Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1pAf9Y-0001nz-Bg for pgsql-hackers@arkaria.postgresql.org; Wed, 28 Dec 2022 22:44:05 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1pAf8X-0001YK-9S for pgsql-hackers@arkaria.postgresql.org; Wed, 28 Dec 2022 22:43:01 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1pAf8V-0001Ts-Nc for pgsql-hackers@lists.postgresql.org; Wed, 28 Dec 2022 22:43:00 +0000 Received: from mail-yb1-xb34.google.com ([2607:f8b0:4864:20::b34]) by makus.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92) (envelope-from ) id 1pAf8S-0003jM-NA for pgsql-hackers@lists.postgresql.org; Wed, 28 Dec 2022 22:42:58 +0000 Received: by mail-yb1-xb34.google.com with SMTP id c124so18826067ybb.13 for ; Wed, 28 Dec 2022 14:42:56 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=IsBATPWI7rg6ycxk/MTnjHt0kayA59P383jWLym1fEE=; b=qY3Q6LZFKg+BaC/STFWd/XfXUgvzIkyAsKcGZ476OP7UYvP/X9FEmAa7XsHOvqL8f3 r+Nqwo2zuVLHCso3NHv394cgZludQn4eHVZ0OSPkaL/0tr5al3OKQHxSExZi3qFw9m3u vgkF2m95YvfK+/mRsqU4MZqKwFxloSXuPO6jnGz1zM+DJjDKbQGSWKPfVJAR4TO/JLvR I6B0EFbmZFd9l0Vn7BMYl8w/tTmySAQwOQXCXkgYHVFhJ17pooiDrVjkIXhLUipzH6Mx tob8qc66Xm4NHpRLbfsHsEJl6JoaG7IjsIdPuNC5ABDdv+9CECY1kbHvfSDg1YBWuQQW G86w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=IsBATPWI7rg6ycxk/MTnjHt0kayA59P383jWLym1fEE=; b=1wBfigEY5i5r/HgFw7ytRfQrrbIVxjWPR7v3hCzV6jDMSElWGI2ZQKW/tJDqc0u6zt RUoynzWjUP/N4tz1LDjOMXoaWTb3Rt9ZEke6wcTGFehvAdrs2CVoTZTi1LmiLieztnqO JU8VT/DmBMi+1+sxmLQK62RrnBYUquTL8CezFRI29SyeRzaV70f9zuCOFkbUAOpGaXUa iRt8N7/+Re7lE1FiVQ2gW7SsEyX9/MBkRysGKtDQNdGbYKXRneWHCGAGwQbFUdTdFT+8 tILEffXOfdCw5Gv3oGU2pYHkpx8m0tvnh/iLwtjMZZPMiT8YusjPoDqpRlbQS4nPz4J3 UWlw== X-Gm-Message-State: AFqh2kpt4StHrL5Lx3hX0zdtaCv9S5se4g7QI9OKPJOFaucAKJLwJgX+ ZvgAxcLziQiyjIoj6LXqRGFlGnCYzUzEBD6eWjI= X-Google-Smtp-Source: AMrXdXtN1Ibr/DAHlTYK2CEROBP4raVVYo6sxFE3FNhMbsWLUSCodvI1SKlOvuZMjqY4FwKbCUTNNOM5QVfjVuk4DDw= X-Received: by 2002:a25:d88e:0:b0:701:a966:d3f9 with SMTP id p136-20020a25d88e000000b00701a966d3f9mr2513738ybg.262.1672267375420; Wed, 28 Dec 2022 14:42:55 -0800 (PST) MIME-Version: 1.0 References: <20221006171601.6um4ey5idm4h62vf@alvherre.pgsql> In-Reply-To: From: Zheng Li Date: Wed, 28 Dec 2022 17:42:43 -0500 Message-ID: Subject: Re: Support logical replication of DDLs To: vignesh C Cc: li jie , Peter Smith , Ajin Cherian , Dilip Kumar , Alvaro Herrera , "houzj.fnst@fujitsu.com" , Amit Kapila , Masahiko Sawada , Japin Li , rajesh singarapu , PostgreSQL Hackers Content-Type: multipart/mixed; boundary="000000000000e219be05f0eb1648" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000e219be05f0eb1648 Content-Type: text/plain; charset="UTF-8" >- CreatePublication has a long list of command tags; is that good? >Maybe it'd be better to annotate the list in cmdtaglist.h somehow. I've addressed this comment by introducing a new flag ddlreplok in the PG_CMDTAG macro and modified CreatePublication accordingly. Regards, Zane --000000000000e219be05f0eb1648 Content-Type: application/octet-stream; name="v58-0004-DDL-messaging-infrastructure-for-DDL-replication.patch" Content-Disposition: attachment; filename="v58-0004-DDL-messaging-infrastructure-for-DDL-replication.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lc88sdn03 RnJvbSBjYjVmOWYyMTcwMTQ4NGVjYTYzMTU1MDhkZDQ0YjdjYWY5MmY5ZTdmIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBWaWduZXNoIEMgPHZpZ25lc2gyMUBnbWFpbC5jb20+CkRhdGU6 IFR1ZSwgMjcgRGVjIDIwMjIgMTA6NTE6MTcgKzA1MzAKU3ViamVjdDogW1BBVENIIDQvNV0gRERM IG1lc3NhZ2luZyBpbmZyYXN0cnVjdHVyZSBmb3IgRERMIHJlcGxpY2F0aW9uLgoKRERMIG1lc3Nh Z2luZyBpbmZyYXN0cnVjdHVyZSBmb3IgRERMIHJlcGxpY2F0aW9uLgotLS0KIGNvbnRyaWIvdGVz dF9kZWNvZGluZy9leHBlY3RlZC9kZGwub3V0ICAgICAgICB8ICAyNiArKysrCiBjb250cmliL3Rl c3RfZGVjb2Rpbmcvc3FsL2RkbC5zcWwgICAgICAgICAgICAgfCAgIDUgKwogY29udHJpYi90ZXN0 X2RlY29kaW5nL3Rlc3RfZGVjb2RpbmcuYyAgICAgICAgIHwgIDQ4ICsrKysrKysKIHNyYy9iYWNr ZW5kL2FjY2Vzcy9ybWdyZGVzYy9NYWtlZmlsZSAgICAgICAgICB8ICAgMSArCiAuLi4vYWNjZXNz L3JtZ3JkZXNjL2xvZ2ljYWxkZGxtc2dkZXNjLmMgICAgICAgfCAgNTIgKysrKysrKwogc3JjL2Jh Y2tlbmQvYWNjZXNzL3JtZ3JkZXNjL21lc29uLmJ1aWxkICAgICAgIHwgICAxICsKIHNyYy9iYWNr ZW5kL2FjY2Vzcy90cmFuc2FtL3JtZ3IuYyAgICAgICAgICAgICB8ICAgMSArCiBzcmMvYmFja2Vu ZC9yZXBsaWNhdGlvbi9sb2dpY2FsL01ha2VmaWxlICAgICAgfCAgIDEgKwogc3JjL2JhY2tlbmQv cmVwbGljYXRpb24vbG9naWNhbC9kZGxtZXNzYWdlLmMgIHwgIDg0ICsrKysrKysrKysrKwogc3Jj L2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9kZWNvZGUuYyAgICAgIHwgIDQxICsrKysrKwog c3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9sb2dpY2FsLmMgICAgIHwgIDQ0ICsrKysr KwogLi4uL3JlcGxpY2F0aW9uL2xvZ2ljYWwvbG9naWNhbGZ1bmNzLmMgICAgICAgIHwgIDI0ICsr KysKIHNyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvbWVzb24uYnVpbGQgICB8ICAgMSAr CiAuLi4vcmVwbGljYXRpb24vbG9naWNhbC9yZW9yZGVyYnVmZmVyLmMgICAgICAgfCAxMjcgKysr KysrKysrKysrKysrKysrCiBzcmMvYmluL3BnX3dhbGR1bXAvcm1ncmRlc2MuYyAgICAgICAgICAg ICAgICAgfCAgIDEgKwogc3JjL2luY2x1ZGUvYWNjZXNzL3JtZ3JsaXN0LmggICAgICAgICAgICAg ICAgIHwgICAxICsKIHNyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQgICAgICAgICAgICAg ICB8ICAgOCArKwogc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vZGRsbWVzc2FnZS5oICAgICAgICAg IHwgIDYwICsrKysrKysrKwogc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vZGVjb2RlLmggICAgICAg ICAgICAgIHwgICAxICsKIHNyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL291dHB1dF9wbHVnaW4uaCAg ICAgICB8ICAxNCArKwogc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vcmVvcmRlcmJ1ZmZlci5oICAg ICAgIHwgIDI3ICsrKysKIDIxIGZpbGVzIGNoYW5nZWQsIDU2OCBpbnNlcnRpb25zKCspCiBjcmVh dGUgbW9kZSAxMDA2NDQgc3JjL2JhY2tlbmQvYWNjZXNzL3JtZ3JkZXNjL2xvZ2ljYWxkZGxtc2dk ZXNjLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2Fs L2RkbG1lc3NhZ2UuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9pbmNsdWRlL3JlcGxpY2F0aW9u L2RkbG1lc3NhZ2UuaAoKZGlmZiAtLWdpdCBhL2NvbnRyaWIvdGVzdF9kZWNvZGluZy9leHBlY3Rl ZC9kZGwub3V0IGIvY29udHJpYi90ZXN0X2RlY29kaW5nL2V4cGVjdGVkL2RkbC5vdXQKaW5kZXgg OWEyOGI1ZGRjNS4uMGY1MWYyYjQxYSAxMDA2NDQKLS0tIGEvY29udHJpYi90ZXN0X2RlY29kaW5n L2V4cGVjdGVkL2RkbC5vdXQKKysrIGIvY29udHJpYi90ZXN0X2RlY29kaW5nL2V4cGVjdGVkL2Rk bC5vdXQKQEAgLTgzMSw2ICs4MzEsMzIgQEAgU0VMRUNUIGRhdGEgRlJPTSBwZ19sb2dpY2FsX3Ns b3RfZ2V0X2NoYW5nZXMoJ3JlZ3Jlc3Npb25fc2xvdCcsIE5VTEwsIE5VTEwsICdpbmMKIC0tLS0t LQogKDAgcm93cykKIAorU0VMRUNUICdkZGwgbXNnMScgRlJPTSBwZ19sb2dpY2FsX2VtaXRfZGRs X21lc3NhZ2UoJ2RkbCBtc2cxJywgMTYzOTQsIDEsICdtc2cxJyk7CisgP2NvbHVtbj8gCistLS0t LS0tLS0tCisgZGRsIG1zZzEKKygxIHJvdykKKworU0VMRUNUICdkZGwgbXNnMicgRlJPTSBwZ19s b2dpY2FsX2VtaXRfZGRsX21lc3NhZ2UoJ2RkbCBtc2cyJywgMTYzOTQsIDEsICd7ImZtdCI6ICJD UkVBVEUgU0NIRU1BICV7aWZfbm90X2V4aXN0c31zICV7bmFtZX1JICV7YXV0aG9yaXphdGlvbn1z IiwgIm5hbWUiOiAiZm9vIiwgImF1dGhvcml6YXRpb24iOiB7ImZtdCI6ICJBVVRIT1JJWkFUSU9O ICV7YXV0aG9yaXphdGlvbl9yb2xlfUkiLCAicHJlc2VudCI6IGZhbHNlLCAiYXV0aG9yaXphdGlv bl9yb2xlIjogbnVsbH0sICJpZl9ub3RfZXhpc3RzIjogIiJ9Jyk7CisgP2NvbHVtbj8gCistLS0t LS0tLS0tCisgZGRsIG1zZzIKKygxIHJvdykKKworU0VMRUNUICdkZGwgbXNnMycgRlJPTSBwZ19s b2dpY2FsX2VtaXRfZGRsX21lc3NhZ2UoJ2RkbCBtc2czJywgMTYzOTQsIDEsICd7ImZtdCI6ICJD UkVBVEUgJXtwZXJzaXN0ZW5jZX1zIFRBQkxFICV7aWZfbm90X2V4aXN0c31zICV7aWRlbnRpdHl9 RCAoJXt0YWJsZV9lbGVtZW50czosIH1zKSAle2luaGVyaXRzfXMgJXt0YWJsZXNwYWNlfXMgJXtv bl9jb21taXR9cyAle3BhcnRpdGlvbl9ieX1zICV7YWNjZXNzX21ldGhvZH1zICV7d2l0aF9jbGF1 c2V9cyIsICJpZGVudGl0eSI6IHsib2JqbmFtZSI6ICJmb28iLCAic2NoZW1hbmFtZSI6ICJlbGVt ZW50X3Rlc3QifSwgImluaGVyaXRzIjogeyJmbXQiOiAiSU5IRVJJVFMgKCV7cGFyZW50czosIH1E KSIsICJwYXJlbnRzIjogbnVsbCwgInByZXNlbnQiOiBmYWxzZX0sICJvbl9jb21taXQiOiB7ImZt dCI6ICJPTiBDT01NSVQgJXtvbl9jb21taXRfdmFsdWV9cyIsICJwcmVzZW50IjogZmFsc2UsICJv bl9jb21taXRfdmFsdWUiOiBudWxsfSwgInRhYmxlc3BhY2UiOiB7ImZtdCI6ICJUQUJMRVNQQUNF ICV7dGFibGVzcGFjZX1JIiwgInByZXNlbnQiOiBmYWxzZSwgInRhYmxlc3BhY2UiOiBudWxsfSwg InBlcnNpc3RlbmNlIjogIiIsICJ3aXRoX2NsYXVzZSI6IHsiZm10IjogIldJVEgiLCAicHJlc2Vu dCI6IGZhbHNlfSwgInBhcnRpdGlvbl9ieSI6IHsiZm10IjogIlBBUlRJVElPTiBCWSAle2RlZmlu aXRpb259cyIsICJwcmVzZW50IjogZmFsc2UsICJkZWZpbml0aW9uIjogbnVsbH0sICJhY2Nlc3Nf bWV0aG9kIjogeyJmbXQiOiAiVVNJTkcgJXthY2Nlc3NfbWV0aG9kfUkiLCAicHJlc2VudCI6IGZh bHNlLCAiYWNjZXNzX21ldGhvZCI6IG51bGx9LCAiaWZfbm90X2V4aXN0cyI6ICIiLCAidGFibGVf ZWxlbWVudHMiOiBbeyJmbXQiOiAiJXtuYW1lfUkgJXtjb2x0eXBlfVQgU1RPUkFHRSAle2NvbHN0 b3JhZ2V9cyAle2NvbXByZXNzaW9ufXMgJXtjb2xsYXRpb259cyAle25vdF9udWxsfXMgJXtkZWZh dWx0fXMgJXtnZW5lcmF0ZWRfY29sdW1ufXMiLCAibmFtZSI6ICJpZCIsICJ0eXBlIjogImNvbHVt biIsICJjb2x0eXBlIjogeyJ0eXBtb2QiOiAiIiwgInR5cGFycmF5IjogZmFsc2UsICJ0eXBlbmFt ZSI6ICJpbnQ0IiwgInNjaGVtYW5hbWUiOiAicGdfY2F0YWxvZyJ9LCAiZGVmYXVsdCI6IHsiZm10 IjogIkRFRkFVTFQiLCAicHJlc2VudCI6IGZhbHNlfSwgIm5vdF9udWxsIjogIiIsICJjb2xsYXRp b24iOiB7ImZtdCI6ICJDT0xMQVRFIiwgInByZXNlbnQiOiBmYWxzZX0sICJjb2xzdG9yYWdlIjog InBsYWluIiwgImNvbXByZXNzaW9uIjogeyJmbXQiOiAiQ09NUFJFU1NJT04gJXtjb21wcmVzc2lv bl9tZXRob2R9SSIsICJwcmVzZW50IjogZmFsc2UsICJjb21wcmVzc2lvbl9tZXRob2QiOiBudWxs fSwgImdlbmVyYXRlZF9jb2x1bW4iOiB7ImZtdCI6ICJHRU5FUkFURUQgQUxXQVlTIEFTIiwgInBy ZXNlbnQiOiBmYWxzZX19XX19Jyk7CisgP2NvbHVtbj8gCistLS0tLS0tLS0tCisgZGRsIG1zZzMK KygxIHJvdykKKworU0VMRUNUIGRhdGEgRlJPTSBwZ19sb2dpY2FsX3Nsb3RfZ2V0X2NoYW5nZXMo J3JlZ3Jlc3Npb25fc2xvdCcsIE5VTEwsIE5VTEwsICdpbmNsdWRlLXhpZHMnLCAnMCcsICdza2lw LWVtcHR5LXhhY3RzJywgJzEnKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBkYXRhICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KKyBtZXNzYWdlOiBwcmVmaXg6IGRkbCBtc2cxLCByZWxpZDogMTYzOTQs IGNtZHR5cGU6IERyb3Agc3RhcnQsIHN6OiA0IGNvbnRlbnQ6bXNnMQorIG1lc3NhZ2U6IHByZWZp eDogZGRsIG1zZzIsIHJlbGlkOiAxNjM5NCwgY21kdHlwZTogRHJvcCBzdGFydCwgc3o6IDIxNyBj b250ZW50OnsiZm10IjogIkNSRUFURSBTQ0hFTUEgJXtpZl9ub3RfZXhpc3RzfXMgJXtuYW1lfUkg JXthdXRob3JpemF0aW9ufXMiLCAibmFtZSI6ICJmb28iLCAiYXV0aG9yaXphdGlvbiI6IHsiZm10 IjogIkFVVEhPUklaQVRJT04gJXthdXRob3JpemF0aW9uX3JvbGV9SSIsICJwcmVzZW50IjogZmFs c2UsICJhdXRob3JpemF0aW9uX3JvbGUiOiBudWxsfSwgImlmX25vdF9leGlzdHMiOiAiIn0KKyBt ZXNzYWdlOiBwcmVmaXg6IGRkbCBtc2czLCByZWxpZDogMTYzOTQsIGNtZHR5cGU6IERyb3Agc3Rh cnQsIHN6OiAxMzk2IGNvbnRlbnQ6eyJmbXQiOiAiQ1JFQVRFICV7cGVyc2lzdGVuY2V9cyBUQUJM RSAle2lmX25vdF9leGlzdHN9cyAle2lkZW50aXR5fUQgKCV7dGFibGVfZWxlbWVudHM6LCB9cykg JXtpbmhlcml0c31zICV7dGFibGVzcGFjZX1zICV7b25fY29tbWl0fXMgJXtwYXJ0aXRpb25fYnl9 cyAle2FjY2Vzc19tZXRob2R9cyAle3dpdGhfY2xhdXNlfXMiLCAiaWRlbnRpdHkiOiB7Im9iam5h bWUiOiAiZm9vIiwgInNjaGVtYW5hbWUiOiAiZWxlbWVudF90ZXN0In0sICJpbmhlcml0cyI6IHsi Zm10IjogIklOSEVSSVRTICgle3BhcmVudHM6LCB9RCkiLCAicGFyZW50cyI6IG51bGwsICJwcmVz ZW50IjogZmFsc2V9LCAib25fY29tbWl0IjogeyJmbXQiOiAiT04gQ09NTUlUICV7b25fY29tbWl0 X3ZhbHVlfXMiLCAicHJlc2VudCI6IGZhbHNlLCAib25fY29tbWl0X3ZhbHVlIjogbnVsbH0sICJ0 YWJsZXNwYWNlIjogeyJmbXQiOiAiVEFCTEVTUEFDRSAle3RhYmxlc3BhY2V9SSIsICJwcmVzZW50 IjogZmFsc2UsICJ0YWJsZXNwYWNlIjogbnVsbH0sICJwZXJzaXN0ZW5jZSI6ICIiLCAid2l0aF9j bGF1c2UiOiB7ImZtdCI6ICJXSVRIIiwgInByZXNlbnQiOiBmYWxzZX0sICJwYXJ0aXRpb25fYnki OiB7ImZtdCI6ICJQQVJUSVRJT04gQlkgJXtkZWZpbml0aW9ufXMiLCAicHJlc2VudCI6IGZhbHNl LCAiZGVmaW5pdGlvbiI6IG51bGx9LCAiYWNjZXNzX21ldGhvZCI6IHsiZm10IjogIlVTSU5HICV7 YWNjZXNzX21ldGhvZH1JIiwgInByZXNlbnQiOiBmYWxzZSwgImFjY2Vzc19tZXRob2QiOiBudWxs fSwgImlmX25vdF9leGlzdHMiOiAiIiwgInRhYmxlX2VsZW1lbnRzIjogW3siZm10IjogIiV7bmFt ZX1JICV7Y29sdHlwZX1UIFNUT1JBR0UgJXtjb2xzdG9yYWdlfXMgJXtjb21wcmVzc2lvbn1zICV7 Y29sbGF0aW9ufXMgJXtub3RfbnVsbH1zICV7ZGVmYXVsdH1zICV7Z2VuZXJhdGVkX2NvbHVtbn1z IiwgIm5hbWUiOiAiaWQiLCAidHlwZSI6ICJjb2x1bW4iLCAiY29sdHlwZSI6IHsidHlwbW9kIjog IiIsICJ0eXBhcnJheSI6IGZhbHNlLCAidHlwZW5hbWUiOiAiaW50NCIsICJzY2hlbWFuYW1lIjog InBnX2NhdGFsb2cifSwgImRlZmF1bHQiOiB7ImZtdCI6ICJERUZBVUxUIiwgInByZXNlbnQiOiBm YWxzZX0sICJub3RfbnVsbCI6ICIiLCAiY29sbGF0aW9uIjogeyJmbXQiOiAiQ09MTEFURSIsICJw cmVzZW50IjogZmFsc2V9LCAiY29sc3RvcmFnZSI6ICJwbGFpbiIsICJjb21wcmVzc2lvbiI6IHsi Zm10IjogIkNPTVBSRVNTSU9OICV7Y29tcHJlc3Npb25fbWV0aG9kfUkiLCAicHJlc2VudCI6IGZh bHNlLCAiY29tcHJlc3Npb25fbWV0aG9kIjogbnVsbH0sICJnZW5lcmF0ZWRfY29sdW1uIjogeyJm bXQiOiAiR0VORVJBVEVEIEFMV0FZUyBBUyIsICJwcmVzZW50IjogZmFsc2V9fV19fQorKDMgcm93 cykKKwogU0VMRUNUIHBnX2Ryb3BfcmVwbGljYXRpb25fc2xvdCgncmVncmVzc2lvbl9zbG90Jyk7 CiAgcGdfZHJvcF9yZXBsaWNhdGlvbl9zbG90IAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K ZGlmZiAtLWdpdCBhL2NvbnRyaWIvdGVzdF9kZWNvZGluZy9zcWwvZGRsLnNxbCBiL2NvbnRyaWIv dGVzdF9kZWNvZGluZy9zcWwvZGRsLnNxbAppbmRleCA0Zjc2YmVkNzJjLi4xZWE1YTRiMjcxIDEw MDY0NAotLS0gYS9jb250cmliL3Rlc3RfZGVjb2Rpbmcvc3FsL2RkbC5zcWwKKysrIGIvY29udHJp Yi90ZXN0X2RlY29kaW5nL3NxbC9kZGwuc3FsCkBAIC00MzEsNiArNDMxLDExIEBAIFNFTEVDVCBk YXRhIEZST00gcGdfbG9naWNhbF9zbG90X2dldF9jaGFuZ2VzKCdyZWdyZXNzaW9uX3Nsb3QnLCBO VUxMLCBOVUxMLCAnaW5jCiAtLSBkb25lLCBmcmVlIGxvZ2ljYWwgcmVwbGljYXRpb24gc2xvdAog U0VMRUNUIGRhdGEgRlJPTSBwZ19sb2dpY2FsX3Nsb3RfZ2V0X2NoYW5nZXMoJ3JlZ3Jlc3Npb25f c2xvdCcsIE5VTEwsIE5VTEwsICdpbmNsdWRlLXhpZHMnLCAnMCcsICdza2lwLWVtcHR5LXhhY3Rz JywgJzEnKTsKIAorU0VMRUNUICdkZGwgbXNnMScgRlJPTSBwZ19sb2dpY2FsX2VtaXRfZGRsX21l c3NhZ2UoJ2RkbCBtc2cxJywgMTYzOTQsIDEsICdtc2cxJyk7CitTRUxFQ1QgJ2RkbCBtc2cyJyBG Uk9NIHBnX2xvZ2ljYWxfZW1pdF9kZGxfbWVzc2FnZSgnZGRsIG1zZzInLCAxNjM5NCwgMSwgJ3si Zm10IjogIkNSRUFURSBTQ0hFTUEgJXtpZl9ub3RfZXhpc3RzfXMgJXtuYW1lfUkgJXthdXRob3Jp emF0aW9ufXMiLCAibmFtZSI6ICJmb28iLCAiYXV0aG9yaXphdGlvbiI6IHsiZm10IjogIkFVVEhP UklaQVRJT04gJXthdXRob3JpemF0aW9uX3JvbGV9SSIsICJwcmVzZW50IjogZmFsc2UsICJhdXRo b3JpemF0aW9uX3JvbGUiOiBudWxsfSwgImlmX25vdF9leGlzdHMiOiAiIn0nKTsKK1NFTEVDVCAn ZGRsIG1zZzMnIEZST00gcGdfbG9naWNhbF9lbWl0X2RkbF9tZXNzYWdlKCdkZGwgbXNnMycsIDE2 Mzk0LCAxLCAneyJmbXQiOiAiQ1JFQVRFICV7cGVyc2lzdGVuY2V9cyBUQUJMRSAle2lmX25vdF9l eGlzdHN9cyAle2lkZW50aXR5fUQgKCV7dGFibGVfZWxlbWVudHM6LCB9cykgJXtpbmhlcml0c31z ICV7dGFibGVzcGFjZX1zICV7b25fY29tbWl0fXMgJXtwYXJ0aXRpb25fYnl9cyAle2FjY2Vzc19t ZXRob2R9cyAle3dpdGhfY2xhdXNlfXMiLCAiaWRlbnRpdHkiOiB7Im9iam5hbWUiOiAiZm9vIiwg InNjaGVtYW5hbWUiOiAiZWxlbWVudF90ZXN0In0sICJpbmhlcml0cyI6IHsiZm10IjogIklOSEVS SVRTICgle3BhcmVudHM6LCB9RCkiLCAicGFyZW50cyI6IG51bGwsICJwcmVzZW50IjogZmFsc2V9 LCAib25fY29tbWl0IjogeyJmbXQiOiAiT04gQ09NTUlUICV7b25fY29tbWl0X3ZhbHVlfXMiLCAi cHJlc2VudCI6IGZhbHNlLCAib25fY29tbWl0X3ZhbHVlIjogbnVsbH0sICJ0YWJsZXNwYWNlIjog eyJmbXQiOiAiVEFCTEVTUEFDRSAle3RhYmxlc3BhY2V9SSIsICJwcmVzZW50IjogZmFsc2UsICJ0 YWJsZXNwYWNlIjogbnVsbH0sICJwZXJzaXN0ZW5jZSI6ICIiLCAid2l0aF9jbGF1c2UiOiB7ImZt dCI6ICJXSVRIIiwgInByZXNlbnQiOiBmYWxzZX0sICJwYXJ0aXRpb25fYnkiOiB7ImZtdCI6ICJQ QVJUSVRJT04gQlkgJXtkZWZpbml0aW9ufXMiLCAicHJlc2VudCI6IGZhbHNlLCAiZGVmaW5pdGlv biI6IG51bGx9LCAiYWNjZXNzX21ldGhvZCI6IHsiZm10IjogIlVTSU5HICV7YWNjZXNzX21ldGhv ZH1JIiwgInByZXNlbnQiOiBmYWxzZSwgImFjY2Vzc19tZXRob2QiOiBudWxsfSwgImlmX25vdF9l eGlzdHMiOiAiIiwgInRhYmxlX2VsZW1lbnRzIjogW3siZm10IjogIiV7bmFtZX1JICV7Y29sdHlw ZX1UIFNUT1JBR0UgJXtjb2xzdG9yYWdlfXMgJXtjb21wcmVzc2lvbn1zICV7Y29sbGF0aW9ufXMg JXtub3RfbnVsbH1zICV7ZGVmYXVsdH1zICV7Z2VuZXJhdGVkX2NvbHVtbn1zIiwgIm5hbWUiOiAi aWQiLCAidHlwZSI6ICJjb2x1bW4iLCAiY29sdHlwZSI6IHsidHlwbW9kIjogIiIsICJ0eXBhcnJh eSI6IGZhbHNlLCAidHlwZW5hbWUiOiAiaW50NCIsICJzY2hlbWFuYW1lIjogInBnX2NhdGFsb2ci fSwgImRlZmF1bHQiOiB7ImZtdCI6ICJERUZBVUxUIiwgInByZXNlbnQiOiBmYWxzZX0sICJub3Rf bnVsbCI6ICIiLCAiY29sbGF0aW9uIjogeyJmbXQiOiAiQ09MTEFURSIsICJwcmVzZW50IjogZmFs c2V9LCAiY29sc3RvcmFnZSI6ICJwbGFpbiIsICJjb21wcmVzc2lvbiI6IHsiZm10IjogIkNPTVBS RVNTSU9OICV7Y29tcHJlc3Npb25fbWV0aG9kfUkiLCAicHJlc2VudCI6IGZhbHNlLCAiY29tcHJl c3Npb25fbWV0aG9kIjogbnVsbH0sICJnZW5lcmF0ZWRfY29sdW1uIjogeyJmbXQiOiAiR0VORVJB VEVEIEFMV0FZUyBBUyIsICJwcmVzZW50IjogZmFsc2V9fV19fScpOworU0VMRUNUIGRhdGEgRlJP TSBwZ19sb2dpY2FsX3Nsb3RfZ2V0X2NoYW5nZXMoJ3JlZ3Jlc3Npb25fc2xvdCcsIE5VTEwsIE5V TEwsICdpbmNsdWRlLXhpZHMnLCAnMCcsICdza2lwLWVtcHR5LXhhY3RzJywgJzEnKTsKKwogU0VM RUNUIHBnX2Ryb3BfcmVwbGljYXRpb25fc2xvdCgncmVncmVzc2lvbl9zbG90Jyk7CiAKIC8qIGNo ZWNrIHRoYXQgdGhlIHNsb3QgaXMgZ29uZSAqLwpkaWZmIC0tZ2l0IGEvY29udHJpYi90ZXN0X2Rl Y29kaW5nL3Rlc3RfZGVjb2RpbmcuYyBiL2NvbnRyaWIvdGVzdF9kZWNvZGluZy90ZXN0X2RlY29k aW5nLmMKaW5kZXggZTBmZDZmMTc2NS4uZTlmZDNlNWNmMiAxMDA2NDQKLS0tIGEvY29udHJpYi90 ZXN0X2RlY29kaW5nL3Rlc3RfZGVjb2RpbmcuYworKysgYi9jb250cmliL3Rlc3RfZGVjb2Rpbmcv dGVzdF9kZWNvZGluZy5jCkBAIC0xNCw5ICsxNCwxMSBAQAogCiAjaW5jbHVkZSAiY2F0YWxvZy9w Z190eXBlLmgiCiAKKyNpbmNsdWRlICJyZXBsaWNhdGlvbi9kZGxtZXNzYWdlLmgiCiAjaW5jbHVk ZSAicmVwbGljYXRpb24vbG9naWNhbC5oIgogI2luY2x1ZGUgInJlcGxpY2F0aW9uL29yaWdpbi5o IgogCisjaW5jbHVkZSAidGNvcC9kZGxfZGVwYXJzZS5oIgogI2luY2x1ZGUgInV0aWxzL2J1aWx0 aW5zLmgiCiAjaW5jbHVkZSAidXRpbHMvbHN5c2NhY2hlLmgiCiAjaW5jbHVkZSAidXRpbHMvbWVt dXRpbHMuaCIKQEAgLTcyLDYgKzc0LDEyIEBAIHN0YXRpYyB2b2lkIHBnX2RlY29kZV9tZXNzYWdl KExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCwKIAkJCQkJCQkgIFJlb3JkZXJCdWZmZXJUWE4g KnR4biwgWExvZ1JlY1B0ciBsc24sCiAJCQkJCQkJICBib29sIHRyYW5zYWN0aW9uYWwsIGNvbnN0 IGNoYXIgKnByZWZpeCwKIAkJCQkJCQkgIFNpemUgc3osIGNvbnN0IGNoYXIgKm1lc3NhZ2UpOwor c3RhdGljIHZvaWQgcGdfZGVjb2RlX2RkbF9tZXNzYWdlKExvZ2ljYWxEZWNvZGluZ0NvbnRleHQg KmN0eCwKKwkJCQkJCQkJICBSZW9yZGVyQnVmZmVyVFhOICp0eG4sCisJCQkJCQkJCSAgWExvZ1Jl Y1B0ciBtZXNzYWdlX2xzbiwKKwkJCQkJCQkJICBjb25zdCBjaGFyICpwcmVmaXgsIE9pZCByZWxp ZCwKKwkJCQkJCQkJICBEZXBhcnNlZENvbW1hbmRUeXBlIGNtZHR5cGUsCisJCQkJCQkJCSAgU2l6 ZSBzeiwgY29uc3QgY2hhciAqbWVzc2FnZSk7CiBzdGF0aWMgYm9vbCBwZ19kZWNvZGVfZmlsdGVy X3ByZXBhcmUoTG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4LAogCQkJCQkJCQkJIFRyYW5zYWN0 aW9uSWQgeGlkLAogCQkJCQkJCQkJIGNvbnN0IGNoYXIgKmdpZCk7CkBAIC0xMzcsNiArMTQ1LDcg QEAgX1BHX291dHB1dF9wbHVnaW5faW5pdChPdXRwdXRQbHVnaW5DYWxsYmFja3MgKmNiKQogCWNi LT5maWx0ZXJfYnlfb3JpZ2luX2NiID0gcGdfZGVjb2RlX2ZpbHRlcjsKIAljYi0+c2h1dGRvd25f Y2IgPSBwZ19kZWNvZGVfc2h1dGRvd247CiAJY2ItPm1lc3NhZ2VfY2IgPSBwZ19kZWNvZGVfbWVz c2FnZTsKKwljYi0+ZGRsX2NiID0gcGdfZGVjb2RlX2RkbF9tZXNzYWdlOwogCWNiLT5maWx0ZXJf cHJlcGFyZV9jYiA9IHBnX2RlY29kZV9maWx0ZXJfcHJlcGFyZTsKIAljYi0+YmVnaW5fcHJlcGFy ZV9jYiA9IHBnX2RlY29kZV9iZWdpbl9wcmVwYXJlX3R4bjsKIAljYi0+cHJlcGFyZV9jYiA9IHBn X2RlY29kZV9wcmVwYXJlX3R4bjsKQEAgLTc1Miw2ICs3NjEsNDUgQEAgcGdfZGVjb2RlX21lc3Nh Z2UoTG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4LAogCU91dHB1dFBsdWdpbldyaXRlKGN0eCwg dHJ1ZSk7CiB9CiAKK3N0YXRpYyB2b2lkCitwZ19kZWNvZGVfZGRsX21lc3NhZ2UoTG9naWNhbERl Y29kaW5nQ29udGV4dCAqY3R4LCBSZW9yZGVyQnVmZmVyVFhOICp0eG4sCisJCQkJCSAgWExvZ1Jl Y1B0ciBtZXNzYWdlX2xzbiwgY29uc3QgY2hhciAqcHJlZml4LCBPaWQgcmVsaWQsCisJCQkJCSAg RGVwYXJzZWRDb21tYW5kVHlwZSBjbWR0eXBlLCBTaXplIHN6LCBjb25zdCBjaGFyICptZXNzYWdl KQoreworCU91dHB1dFBsdWdpblByZXBhcmVXcml0ZShjdHgsIHRydWUpOworCWFwcGVuZFN0cmlu Z0luZm8oY3R4LT5vdXQsICJtZXNzYWdlOiBwcmVmaXg6ICVzLCByZWxpZDogJXUsICIsCisJCQkJ CSBwcmVmaXgsIHJlbGlkKTsKKworCXN3aXRjaChjbWR0eXBlKQorCXsKKwljYXNlIERDVF9TaW1w bGVDbWQ6CisJCWFwcGVuZFN0cmluZ0luZm8oY3R4LT5vdXQsICJjbWR0eXBlOiBTaW1wbGUsICIp OworCQlicmVhazsKKwljYXNlIERDVF9UYWJsZURyb3BTdGFydDoKKwkJYXBwZW5kU3RyaW5nSW5m byhjdHgtPm91dCwgImNtZHR5cGU6IERyb3Agc3RhcnQsICIpOworCQlicmVhazsKKwljYXNlIERD VF9UYWJsZURyb3BFbmQ6CisJCWFwcGVuZFN0cmluZ0luZm8oY3R4LT5vdXQsICJjbWR0eXBlOiBE cm9wIGVuZCwgIik7CisJCWJyZWFrOworCWNhc2UgRENUX1RhYmxlQWx0ZXI6CisJCWFwcGVuZFN0 cmluZ0luZm8oY3R4LT5vdXQsICJjbWR0eXBlOiBBbHRlciB0YWJsZSwgIik7CisJCWJyZWFrOwor CWNhc2UgRENUX09iamVjdENyZWF0ZToKKwkJYXBwZW5kU3RyaW5nSW5mbyhjdHgtPm91dCwgImNt ZHR5cGU6IENyZWF0ZSwgIik7CisJCWJyZWFrOworCWNhc2UgRENUX09iamVjdERyb3A6CisJCWFw cGVuZFN0cmluZ0luZm8oY3R4LT5vdXQsICJjbWR0eXBlOiBEcm9wLCAiKTsKKwkJYnJlYWs7CisJ ZGVmYXVsdDoKKwkJYXBwZW5kU3RyaW5nSW5mbyhjdHgtPm91dCwgImNtZHR5cGU6IEludmFsaWQs ICIpOworCQlicmVhazsKKwl9CisKKwlhcHBlbmRTdHJpbmdJbmZvKGN0eC0+b3V0LCAic3o6ICV6 dSBjb250ZW50OiIsIHN6KTsKKwlhcHBlbmRCaW5hcnlTdHJpbmdJbmZvKGN0eC0+b3V0LCBtZXNz YWdlLCBzeik7CisJT3V0cHV0UGx1Z2luV3JpdGUoY3R4LCB0cnVlKTsKK30KKwogc3RhdGljIHZv aWQKIHBnX2RlY29kZV9zdHJlYW1fc3RhcnQoTG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4LAog CQkJCQkgICBSZW9yZGVyQnVmZmVyVFhOICp0eG4pCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9h Y2Nlc3Mvcm1ncmRlc2MvTWFrZWZpbGUgYi9zcmMvYmFja2VuZC9hY2Nlc3Mvcm1ncmRlc2MvTWFr ZWZpbGUKaW5kZXggZjg4ZDcyZmQ4Ni4uMmZmMDFlNjliZiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tl bmQvYWNjZXNzL3JtZ3JkZXNjL01ha2VmaWxlCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9ybWdy ZGVzYy9NYWtlZmlsZQpAQCAtMTgsNiArMTgsNyBAQCBPQkpTID0gXAogCWdpc3RkZXNjLm8gXAog CWhhc2hkZXNjLm8gXAogCWhlYXBkZXNjLm8gXAorCWxvZ2ljYWxkZGxtc2dkZXNjLm8gXAogCWxv Z2ljYWxtc2dkZXNjLm8gXAogCW14YWN0ZGVzYy5vIFwKIAluYnRkZXNjLm8gXApkaWZmIC0tZ2l0 IGEvc3JjL2JhY2tlbmQvYWNjZXNzL3JtZ3JkZXNjL2xvZ2ljYWxkZGxtc2dkZXNjLmMgYi9zcmMv YmFja2VuZC9hY2Nlc3Mvcm1ncmRlc2MvbG9naWNhbGRkbG1zZ2Rlc2MuYwpuZXcgZmlsZSBtb2Rl IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi4wNWU5MzBjOTBjCi0tLSAvZGV2L251bGwKKysrIGIv c3JjL2JhY2tlbmQvYWNjZXNzL3JtZ3JkZXNjL2xvZ2ljYWxkZGxtc2dkZXNjLmMKQEAgLTAsMCAr MSw1MiBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogbG9naWNhbGRkbG1zZ2Rlc2MuYwor ICoJICBybWdyIGRlc2NyaXB0b3Igcm91dGluZXMgZm9yIHJlcGxpY2F0aW9uL2xvZ2ljYWwvZGRs bWVzc2FnZS5jCisgKgorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAyMDE1LTIwMjIsIFBvc3Rn cmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisgKgorICoKKyAqIElERU5USUZJQ0FUSU9O CisgKgkgIHNyYy9iYWNrZW5kL2FjY2Vzcy9ybWdyZGVzYy9sb2dpY2FsZGRsbXNnZGVzYy5jCisg KgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKyNpbmNsdWRlICJwb3N0Z3Jlcy5oIgorCisjaW5j bHVkZSAicmVwbGljYXRpb24vZGRsbWVzc2FnZS5oIgorCit2b2lkCitsb2dpY2FsZGRsbXNnX2Rl c2MoU3RyaW5nSW5mbyBidWYsIFhMb2dSZWFkZXJTdGF0ZSAqcmVjb3JkKQoreworCWNoYXIJICAg KnJlYyA9IFhMb2dSZWNHZXREYXRhKHJlY29yZCk7CisJdWludDgJCWluZm8gPSBYTG9nUmVjR2V0 SW5mbyhyZWNvcmQpICYgflhMUl9JTkZPX01BU0s7CisKKwlpZiAoaW5mbyA9PSBYTE9HX0xPR0lD QUxfRERMX01FU1NBR0UpCisJeworCQl4bF9sb2dpY2FsX2RkbF9tZXNzYWdlICp4bHJlYyA9ICh4 bF9sb2dpY2FsX2RkbF9tZXNzYWdlICopIHJlYzsKKwkJY2hhcgkgICAqcHJlZml4ID0geGxyZWMt Pm1lc3NhZ2U7CisJCWNoYXIJICAgKm1lc3NhZ2UgPSB4bHJlYy0+bWVzc2FnZSArIHhscmVjLT5w cmVmaXhfc2l6ZTsKKwkJY2hhcgkgICAqc2VwID0gIiI7CisKKwkJQXNzZXJ0KHByZWZpeFt4bHJl Yy0+cHJlZml4X3NpemVdICE9ICdcMCcpOworCisJCWFwcGVuZFN0cmluZ0luZm8oYnVmLCAicHJl Zml4IFwiJXNcIjsgcGF5bG9hZCAoJXp1IGJ5dGVzKTogIiwKKwkJCQkJCSBwcmVmaXgsIHhscmVj LT5tZXNzYWdlX3NpemUpOworCQlhcHBlbmRTdHJpbmdJbmZvKGJ1ZiwgInJlbGlkICV1IGNtZHR5 cGUgJXUiLCB4bHJlYy0+cmVsaWQsIHhscmVjLT5jbWR0eXBlKTsKKwkJLyogV3JpdGUgbWVzc2Fn ZSBwYXlsb2FkIGFzIGEgc2VyaWVzIG9mIGhleCBieXRlcyAqLworCQlmb3IgKGludCBjbnQgPSAw OyBjbnQgPCB4bHJlYy0+bWVzc2FnZV9zaXplOyBjbnQrKykKKwkJeworCQkJYXBwZW5kU3RyaW5n SW5mbyhidWYsICIlcyUwMlgiLCBzZXAsICh1bnNpZ25lZCBjaGFyKSBtZXNzYWdlW2NudF0pOwor CQkJc2VwID0gIiAiOworCQl9CisJfQorfQorCitjb25zdCBjaGFyICoKK2xvZ2ljYWxkZGxtc2df aWRlbnRpZnkodWludDggaW5mbykKK3sKKwlpZiAoKGluZm8gJiB+WExSX0lORk9fTUFTSykgPT0g WExPR19MT0dJQ0FMX0RETF9NRVNTQUdFKQorCQlyZXR1cm4gIkRETCI7CisKKwlyZXR1cm4gTlVM TDsKK30KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9ybWdyZGVzYy9tZXNvbi5idWls ZCBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9ybWdyZGVzYy9tZXNvbi5idWlsZAppbmRleCBhN2E3YmFl Y2QxLi4zMDUyMGIwNWUwIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3Mvcm1ncmRlc2Mv bWVzb24uYnVpbGQKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3JtZ3JkZXNjL21lc29uLmJ1aWxk CkBAIC0xMSw2ICsxMSw3IEBAIHJtZ3JfZGVzY19zb3VyY2VzID0gZmlsZXMoCiAgICdnaXN0ZGVz Yy5jJywKICAgJ2hhc2hkZXNjLmMnLAogICAnaGVhcGRlc2MuYycsCisgICdsb2dpY2FsZGRsbXNn ZGVzYy5jJywKICAgJ2xvZ2ljYWxtc2dkZXNjLmMnLAogICAnbXhhY3RkZXNjLmMnLAogICAnbmJ0 ZGVzYy5jJywKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3JtZ3IuYyBi L3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3JtZ3IuYwppbmRleCA3ZDY3ZWRhNWY3Li42Nzhl ODFhZTAxIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS9ybWdyLmMKKysr IGIvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0vcm1nci5jCkBAIC0yNyw2ICsyNyw3IEBACiAj aW5jbHVkZSAiZm1nci5oIgogI2luY2x1ZGUgImZ1bmNhcGkuaCIKICNpbmNsdWRlICJtaXNjYWRt aW4uaCIKKyNpbmNsdWRlICJyZXBsaWNhdGlvbi9kZGxtZXNzYWdlLmgiCiAjaW5jbHVkZSAicmVw bGljYXRpb24vZGVjb2RlLmgiCiAjaW5jbHVkZSAicmVwbGljYXRpb24vbWVzc2FnZS5oIgogI2lu Y2x1ZGUgInJlcGxpY2F0aW9uL29yaWdpbi5oIgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcmVw bGljYXRpb24vbG9naWNhbC9NYWtlZmlsZSBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2lj YWwvTWFrZWZpbGUKaW5kZXggYzRlMmZkZWI3MS4uZDRmMjlmOGZmYyAxMDA2NDQKLS0tIGEvc3Jj L2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9NYWtlZmlsZQorKysgYi9zcmMvYmFja2VuZC9y ZXBsaWNhdGlvbi9sb2dpY2FsL01ha2VmaWxlCkBAIC0xNSw2ICsxNSw3IEBAIGluY2x1ZGUgJCh0 b3BfYnVpbGRkaXIpL3NyYy9NYWtlZmlsZS5nbG9iYWwKIG92ZXJyaWRlIENQUEZMQUdTIDo9IC1J JChzcmNkaXIpICQoQ1BQRkxBR1MpCiAKIE9CSlMgPSBcCisJZGRsbWVzc2FnZS5vXAogCWRlY29k ZS5vIFwKIAlsYXVuY2hlci5vIFwKIAlsb2dpY2FsLm8gXApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tl bmQvcmVwbGljYXRpb24vbG9naWNhbC9kZGxtZXNzYWdlLmMgYi9zcmMvYmFja2VuZC9yZXBsaWNh dGlvbi9sb2dpY2FsL2RkbG1lc3NhZ2UuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw MDAwMDAwLi5lMTFlNTZlNWEzCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2JhY2tlbmQvcmVwbGlj YXRpb24vbG9naWNhbC9kZGxtZXNzYWdlLmMKQEAgLTAsMCArMSw4NCBAQAorLyotLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tCisgKgorICogZGRsbWVzc2FnZS5jCisgKgkgIExvZ2ljYWwgRERMIG1lc3NhZ2VzLgor ICoKKyAqIENvcHlyaWdodCAoYykgMjAyMiwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQg R3JvdXAKKyAqCisgKiBJREVOVElGSUNBVElPTgorICoJICBzcmMvYmFja2VuZC9yZXBsaWNhdGlv bi9sb2dpY2FsL2RkbG1lc3NhZ2UuYworICoKKyAqIE5PVEVTCisgKgorICogTG9naWNhbCBEREwg bWVzc2FnZXMgYWxsb3cgWExPRyBsb2dnaW5nIG9mIERETCBjb21tYW5kIHN0cmluZ3MgdGhhdAor ICogZ2V0IHBhc3NlZCB0byB0aGUgbG9naWNhbCBkZWNvZGluZyBwbHVnaW4uIEluIG5vcm1hbCBY TE9HIHByb2Nlc3NpbmcgdGhleQorICogYXJlIHNhbWUgYXMgTk9PUC4KKyAqCisgKiBVbmxpa2Ug Z2VuZXJpYyBsb2dpY2FsIG1lc3NhZ2VzLCB0aGVzZSBEREwgbWVzc2FnZXMgaGF2ZSBvbmx5IHRy YW5zYWN0aW9uYWwKKyAqIG1vZGUuIE5vdGUgYnkgZGVmYXVsdCBERExzIGluIFBvc3RncmVTUUwg YXJlIHRyYW5zYWN0aW9uYWwuCisgKgorICogVGhlc2UgbWVzc2FnZXMgYXJlIHBhcnQgb2YgY3Vy cmVudCB0cmFuc2FjdGlvbiBhbmQgd2lsbCBiZSBzZW50IHRvCisgKiBkZWNvZGluZyBwbHVnaW4g dXNpbmcgaW4gYSBzYW1lIHdheSBhcyBETUwgb3BlcmF0aW9ucy4KKyAqCisgKiBFdmVyeSBtZXNz YWdlIGNhcnJpZXMgcHJlZml4IHRvIGF2b2lkIGNvbmZsaWN0cyBiZXR3ZWVuIGRpZmZlcmVudCBk ZWNvZGluZworICogcGx1Z2lucy4gVGhlIHBsdWdpbiBhdXRob3JzIG11c3QgdGFrZSBleHRyYSBj YXJlIHRvIHVzZSB1bmlxdWUgcHJlZml4LAorICogZ29vZCBvcHRpb25zIHNlZW1zIHRvIGJlIGZv ciBleGFtcGxlIHRvIHVzZSB0aGUgbmFtZSBvZiB0aGUgZXh0ZW5zaW9uLgorICoKKyAqIC0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQorICovCisKKyNpbmNsdWRlICJwb3N0Z3Jlcy5oIgorCisjaW5jbHVkZSAi YWNjZXNzL3hhY3QuaCIKKyNpbmNsdWRlICJhY2Nlc3MveGxvZ2luc2VydC5oIgorI2luY2x1ZGUg ImNhdGFsb2cvbmFtZXNwYWNlLmgiCisjaW5jbHVkZSAibWlzY2FkbWluLmgiCisjaW5jbHVkZSAi bm9kZXMvZXhlY25vZGVzLmgiCisjaW5jbHVkZSAicmVwbGljYXRpb24vbG9naWNhbC5oIgorI2lu Y2x1ZGUgInJlcGxpY2F0aW9uL2RkbG1lc3NhZ2UuaCIKKyNpbmNsdWRlICJ1dGlscy9tZW11dGls cy5oIgorCisvKgorICogV3JpdGUgbG9naWNhbCBkZWNvZGluZyBEREwgbWVzc2FnZSBpbnRvIFhM b2cuCisgKi8KK1hMb2dSZWNQdHIKK0xvZ0xvZ2ljYWxERExNZXNzYWdlKGNvbnN0IGNoYXIgKnBy ZWZpeCwgT2lkIHJlbGlkLCBEZXBhcnNlZENvbW1hbmRUeXBlIGNtZHR5cGUsCisJCQkJCSBjb25z dCBjaGFyICptZXNzYWdlLCBzaXplX3Qgc2l6ZSkKK3sKKwl4bF9sb2dpY2FsX2RkbF9tZXNzYWdl IHhscmVjOworCisJIC8qIEVuc3VyZSB3ZSBoYXZlIGEgdmFsaWQgdHJhbnNhY3Rpb24gaWQuICov CisJQXNzZXJ0KElzVHJhbnNhY3Rpb25TdGF0ZSgpKTsKKwlHZXRDdXJyZW50VHJhbnNhY3Rpb25J ZCgpOworCisJeGxyZWMuZGJJZCA9IE15RGF0YWJhc2VJZDsKKwkvKiBUcmFpbGluZyB6ZXJvIGlz IGNyaXRpY2FsOyBzZWUgbG9naWNhbGRkbG1zZ19kZXNjICovCisJeGxyZWMucHJlZml4X3NpemUg PSBzdHJsZW4ocHJlZml4KSArIDE7CisJeGxyZWMubWVzc2FnZV9zaXplID0gc2l6ZTsKKwl4bHJl Yy5yZWxpZCA9IHJlbGlkOworCXhscmVjLmNtZHR5cGUgPSBjbWR0eXBlOworCisJWExvZ0JlZ2lu SW5zZXJ0KCk7CisJWExvZ1JlZ2lzdGVyRGF0YSgoY2hhciAqKSAmeGxyZWMsIFNpemVPZkxvZ2lj YWxERExNZXNzYWdlKTsKKwlYTG9nUmVnaXN0ZXJEYXRhKHVuY29uc3RpZnkoY2hhciAqLCBwcmVm aXgpLCB4bHJlYy5wcmVmaXhfc2l6ZSk7CisJWExvZ1JlZ2lzdGVyRGF0YSh1bmNvbnN0aWZ5KGNo YXIgKiwgbWVzc2FnZSksIHNpemUpOworCisJLyogQWxsb3cgb3JpZ2luIGZpbHRlcmluZyAqLwor CVhMb2dTZXRSZWNvcmRGbGFncyhYTE9HX0lOQ0xVREVfT1JJR0lOKTsKKworCXJldHVybiBYTG9n SW5zZXJ0KFJNX0xPR0lDQUxERExNU0dfSUQsIFhMT0dfTE9HSUNBTF9ERExfTUVTU0FHRSk7Cit9 CisKKy8qCisgKiBSZWRvIGlzIGJhc2ljYWxseSBqdXN0IG5vb3AgZm9yIGxvZ2ljYWwgZGVjb2Rp bmcgZGRsIG1lc3NhZ2VzLgorICovCit2b2lkCitsb2dpY2FsZGRsbXNnX3JlZG8oWExvZ1JlYWRl clN0YXRlICpyZWNvcmQpCit7CisJdWludDgJCWluZm8gPSBYTG9nUmVjR2V0SW5mbyhyZWNvcmQp ICYgflhMUl9JTkZPX01BU0s7CisKKwlpZiAoaW5mbyAhPSBYTE9HX0xPR0lDQUxfRERMX01FU1NB R0UpCisJCWVsb2coUEFOSUMsICJsb2dpY2FsZGRsbXNnX3JlZG86IHVua25vd24gb3AgY29kZSAl dSIsIGluZm8pOworCisJLyogVGhpcyBpcyBvbmx5IGludGVyZXN0aW5nIGZvciBsb2dpY2FsIGRl Y29kaW5nLCBzZWUgZGVjb2RlLmMuICovCit9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9yZXBs aWNhdGlvbi9sb2dpY2FsL2RlY29kZS5jIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNh bC9kZWNvZGUuYwppbmRleCAyY2MwYWM5ZWIwLi5iNjI4MTI5OTNjIDEwMDY0NAotLS0gYS9zcmMv YmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL2RlY29kZS5jCisrKyBiL3NyYy9iYWNrZW5kL3Jl cGxpY2F0aW9uL2xvZ2ljYWwvZGVjb2RlLmMKQEAgLTM2LDYgKzM2LDcgQEAKICNpbmNsdWRlICJh Y2Nlc3MveGxvZ3V0aWxzLmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9wZ19jb250cm9sLmgiCiAjaW5j bHVkZSAicmVwbGljYXRpb24vZGVjb2RlLmgiCisjaW5jbHVkZSAicmVwbGljYXRpb24vZGRsbWVz c2FnZS5oIgogI2luY2x1ZGUgInJlcGxpY2F0aW9uL2xvZ2ljYWwuaCIKICNpbmNsdWRlICJyZXBs aWNhdGlvbi9tZXNzYWdlLmgiCiAjaW5jbHVkZSAicmVwbGljYXRpb24vb3JpZ2luLmgiCkBAIC02 MDMsNiArNjA0LDQ2IEBAIGxvZ2ljYWxtc2dfZGVjb2RlKExvZ2ljYWxEZWNvZGluZ0NvbnRleHQg KmN0eCwgWExvZ1JlY29yZEJ1ZmZlciAqYnVmKQogCQkJCQkJCSAgbWVzc2FnZS0+bWVzc2FnZSAr IG1lc3NhZ2UtPnByZWZpeF9zaXplKTsKIH0KIAorLyoKKyAqIEhhbmRsZSBybWdyIExPR0lDQUxE RExNU0dfSUQgcmVjb3JkcyBmb3IgRGVjb2RlUmVjb3JkSW50b1Jlb3JkZXJCdWZmZXIoKS4KKyAq Lwordm9pZAorbG9naWNhbGRkbF9kZWNvZGUoTG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4LCBY TG9nUmVjb3JkQnVmZmVyICpidWYpCit7CisJU25hcEJ1aWxkICAqYnVpbGRlciA9IGN0eC0+c25h cHNob3RfYnVpbGRlcjsKKwlYTG9nUmVhZGVyU3RhdGUgKnIgPSBidWYtPnJlY29yZDsKKwlUcmFu c2FjdGlvbklkIHhpZCA9IFhMb2dSZWNHZXRYaWQocik7CisJdWludDgJCWluZm8gPSBYTG9nUmVj R2V0SW5mbyhyKSAmIH5YTFJfSU5GT19NQVNLOworCVJlcE9yaWdpbklkIG9yaWdpbl9pZCA9IFhM b2dSZWNHZXRPcmlnaW4ocik7CisJeGxfbG9naWNhbF9kZGxfbWVzc2FnZSAqbWVzc2FnZTsKKwor CWlmIChpbmZvICE9IFhMT0dfTE9HSUNBTF9ERExfTUVTU0FHRSkKKwkJZWxvZyhFUlJPUiwgInVu ZXhwZWN0ZWQgUk1fTE9HSUNBTERETE1TR19JRCByZWNvcmQgdHlwZTogJXUiLCBpbmZvKTsKKwor CVJlb3JkZXJCdWZmZXJQcm9jZXNzWGlkKGN0eC0+cmVvcmRlciwgWExvZ1JlY0dldFhpZChyKSwg YnVmLT5vcmlncHRyKTsKKworCS8qCisJICogSWYgd2UgZG9uJ3QgaGF2ZSBzbmFwc2hvdCBvciB3 ZSBhcmUganVzdCBmYXN0LWZvcndhcmRpbmcsIHRoZXJlIGlzIG5vCisJICogcG9pbnQgaW4gZGVj b2RpbmcgZGRsIG1lc3NhZ2VzLgorCSAqLworCWlmIChTbmFwQnVpbGRDdXJyZW50U3RhdGUoYnVp bGRlcikgPCBTTkFQQlVJTERfRlVMTF9TTkFQU0hPVCB8fAorCQljdHgtPmZhc3RfZm9yd2FyZCkK KwkJcmV0dXJuOworCisJbWVzc2FnZSA9ICh4bF9sb2dpY2FsX2RkbF9tZXNzYWdlICopIFhMb2dS ZWNHZXREYXRhKHIpOworCisJaWYgKG1lc3NhZ2UtPmRiSWQgIT0gY3R4LT5zbG90LT5kYXRhLmRh dGFiYXNlIHx8CisJCUZpbHRlckJ5T3JpZ2luKGN0eCwgb3JpZ2luX2lkKSkKKwkJcmV0dXJuOwor CisJaWYgKFNuYXBCdWlsZFByb2Nlc3NDaGFuZ2UoYnVpbGRlciwgeGlkLCBidWYtPm9yaWdwdHIp KQorCQlSZW9yZGVyQnVmZmVyUXVldWVERExNZXNzYWdlKGN0eC0+cmVvcmRlciwgeGlkLCBidWYt PmVuZHB0ciwKKwkJCQkJCQkJCSBtZXNzYWdlLT5tZXNzYWdlLCAvKiBmaXJzdCBwYXJ0IG9mIG1l c3NhZ2UgaXMgcHJlZml4ICovCisJCQkJCQkJCQkgbWVzc2FnZS0+bWVzc2FnZV9zaXplLAorCQkJ CQkJCQkJIG1lc3NhZ2UtPm1lc3NhZ2UgKyBtZXNzYWdlLT5wcmVmaXhfc2l6ZSwKKwkJCQkJCQkJ CSBtZXNzYWdlLT5yZWxpZCwgbWVzc2FnZS0+Y21kdHlwZSk7Cit9CisKIC8qCiAgKiBDb25zb2xp ZGF0ZWQgY29tbWl0IHJlY29yZCBoYW5kbGluZyBiZXR3ZWVuIHRoZSBkaWZmZXJlbnQgZm9ybSBv ZiBjb21taXQKICAqIHJlY29yZHMuCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlv bi9sb2dpY2FsL2xvZ2ljYWwuYyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvbG9n aWNhbC5jCmluZGV4IDYyNWE3ZjQyNzMuLmJkMGMyZmQ2ZDggMTAwNjQ0Ci0tLSBhL3NyYy9iYWNr ZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvbG9naWNhbC5jCisrKyBiL3NyYy9iYWNrZW5kL3JlcGxp Y2F0aW9uL2xvZ2ljYWwvbG9naWNhbC5jCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSAiZm1n ci5oIgogI2luY2x1ZGUgIm1pc2NhZG1pbi5oIgogI2luY2x1ZGUgInBnc3RhdC5oIgorI2luY2x1 ZGUgInJlcGxpY2F0aW9uL2RkbG1lc3NhZ2UuaCIKICNpbmNsdWRlICJyZXBsaWNhdGlvbi9kZWNv ZGUuaCIKICNpbmNsdWRlICJyZXBsaWNhdGlvbi9sb2dpY2FsLmgiCiAjaW5jbHVkZSAicmVwbGlj YXRpb24vb3JpZ2luLmgiCkBAIC03Myw2ICs3NCwxMCBAQCBzdGF0aWMgdm9pZCB0cnVuY2F0ZV9j Yl93cmFwcGVyKFJlb3JkZXJCdWZmZXIgKmNhY2hlLCBSZW9yZGVyQnVmZmVyVFhOICp0eG4sCiBz dGF0aWMgdm9pZCBtZXNzYWdlX2NiX3dyYXBwZXIoUmVvcmRlckJ1ZmZlciAqY2FjaGUsIFJlb3Jk ZXJCdWZmZXJUWE4gKnR4biwKIAkJCQkJCQkgICBYTG9nUmVjUHRyIG1lc3NhZ2VfbHNuLCBib29s IHRyYW5zYWN0aW9uYWwsCiAJCQkJCQkJICAgY29uc3QgY2hhciAqcHJlZml4LCBTaXplIG1lc3Nh Z2Vfc2l6ZSwgY29uc3QgY2hhciAqbWVzc2FnZSk7CitzdGF0aWMgdm9pZCBkZGxfY2Jfd3JhcHBl cihSZW9yZGVyQnVmZmVyICpjYWNoZSwgUmVvcmRlckJ1ZmZlclRYTiAqdHhuLAorCQkJCQkJCQkg IFhMb2dSZWNQdHIgbWVzc2FnZV9sc24sIGNvbnN0IGNoYXIgKnByZWZpeCwKKwkJCQkJCQkJICBP aWQgcmVsaWQsIERlcGFyc2VkQ29tbWFuZFR5cGUgY21kdHlwZSwKKwkJCQkJCQkJICBTaXplIG1l c3NhZ2Vfc2l6ZSwgY29uc3QgY2hhciAqbWVzc2FnZSk7CiAKIC8qIHN0cmVhbWluZyBjYWxsYmFj a3MgKi8KIHN0YXRpYyB2b2lkIHN0cmVhbV9zdGFydF9jYl93cmFwcGVyKFJlb3JkZXJCdWZmZXIg KmNhY2hlLCBSZW9yZGVyQnVmZmVyVFhOICp0eG4sCkBAIC0yMTgsNiArMjIzLDcgQEAgU3RhcnR1 cERlY29kaW5nQ29udGV4dChMaXN0ICpvdXRwdXRfcGx1Z2luX29wdGlvbnMsCiAJY3R4LT5yZW9y ZGVyLT5hcHBseV90cnVuY2F0ZSA9IHRydW5jYXRlX2NiX3dyYXBwZXI7CiAJY3R4LT5yZW9yZGVy LT5jb21taXQgPSBjb21taXRfY2Jfd3JhcHBlcjsKIAljdHgtPnJlb3JkZXItPm1lc3NhZ2UgPSBt ZXNzYWdlX2NiX3dyYXBwZXI7CisJY3R4LT5yZW9yZGVyLT5kZGwgPSBkZGxfY2Jfd3JhcHBlcjsK IAogCS8qCiAJICogVG8gc3VwcG9ydCBzdHJlYW1pbmcsIHdlIHJlcXVpcmUgc3RhcnQvc3RvcC9h Ym9ydC9jb21taXQvY2hhbmdlCkBAIC0xMjIwLDYgKzEyMjYsNDQgQEAgbWVzc2FnZV9jYl93cmFw cGVyKFJlb3JkZXJCdWZmZXIgKmNhY2hlLCBSZW9yZGVyQnVmZmVyVFhOICp0eG4sCiAJZXJyb3Jf Y29udGV4dF9zdGFjayA9IGVycmNhbGxiYWNrLnByZXZpb3VzOwogfQogCitzdGF0aWMgdm9pZAor ZGRsX2NiX3dyYXBwZXIoUmVvcmRlckJ1ZmZlciAqY2FjaGUsIFJlb3JkZXJCdWZmZXJUWE4gKnR4 biwKKwkJCQkJICBYTG9nUmVjUHRyIG1lc3NhZ2VfbHNuLAorCQkJCQkgIGNvbnN0IGNoYXIgKnBy ZWZpeCwgT2lkIHJlbGlkLCBEZXBhcnNlZENvbW1hbmRUeXBlIGNtZHR5cGUsCisJCQkJCSAgU2l6 ZSBtZXNzYWdlX3NpemUsCisJCQkJCSAgY29uc3QgY2hhciAqbWVzc2FnZSkKK3sKKwlMb2dpY2Fs RGVjb2RpbmdDb250ZXh0ICpjdHggPSBjYWNoZS0+cHJpdmF0ZV9kYXRhOworCUxvZ2ljYWxFcnJv ckNhbGxiYWNrU3RhdGUgc3RhdGU7CisJRXJyb3JDb250ZXh0Q2FsbGJhY2sgZXJyY2FsbGJhY2s7 CisKKwlBc3NlcnQoIWN0eC0+ZmFzdF9mb3J3YXJkKTsKKworCWlmIChjdHgtPmNhbGxiYWNrcy5k ZGxfY2IgPT0gTlVMTCkKKwkJcmV0dXJuOworCisJLyogUHVzaCBjYWxsYmFjayArIGluZm8gb24g dGhlIGVycm9yIGNvbnRleHQgc3RhY2sgKi8KKwlzdGF0ZS5jdHggPSBjdHg7CisJc3RhdGUuY2Fs bGJhY2tfbmFtZSA9ICJkZGwiOworCXN0YXRlLnJlcG9ydF9sb2NhdGlvbiA9IG1lc3NhZ2VfbHNu OworCWVycmNhbGxiYWNrLmNhbGxiYWNrID0gb3V0cHV0X3BsdWdpbl9lcnJvcl9jYWxsYmFjazsK KwllcnJjYWxsYmFjay5hcmcgPSAodm9pZCAqKSAmc3RhdGU7CisJZXJyY2FsbGJhY2sucHJldmlv dXMgPSBlcnJvcl9jb250ZXh0X3N0YWNrOworCWVycm9yX2NvbnRleHRfc3RhY2sgPSAmZXJyY2Fs bGJhY2s7CisKKwkvKiBzZXQgb3V0cHV0IHN0YXRlICovCisJY3R4LT5hY2NlcHRfd3JpdGVzID0g dHJ1ZTsKKwljdHgtPndyaXRlX3hpZCA9IHR4biAhPSBOVUxMID8gdHhuLT54aWQgOiBJbnZhbGlk VHJhbnNhY3Rpb25JZDsKKwljdHgtPndyaXRlX2xvY2F0aW9uID0gbWVzc2FnZV9sc247CisKKwkv KiBkbyB0aGUgYWN0dWFsIHdvcms6IGNhbGwgY2FsbGJhY2sgKi8KKwljdHgtPmNhbGxiYWNrcy5k ZGxfY2IoY3R4LCB0eG4sIG1lc3NhZ2VfbHNuLCBwcmVmaXgsIHJlbGlkLCBjbWR0eXBlLAorCQkJ CQkJCQkgbWVzc2FnZV9zaXplLCBtZXNzYWdlKTsKKworCS8qIFBvcCB0aGUgZXJyb3IgY29udGV4 dCBzdGFjayAqLworCWVycm9yX2NvbnRleHRfc3RhY2sgPSBlcnJjYWxsYmFjay5wcmV2aW91czsK K30KKwogc3RhdGljIHZvaWQKIHN0cmVhbV9zdGFydF9jYl93cmFwcGVyKFJlb3JkZXJCdWZmZXIg KmNhY2hlLCBSZW9yZGVyQnVmZmVyVFhOICp0eG4sCiAJCQkJCQlYTG9nUmVjUHRyIGZpcnN0X2xz bikKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvbG9naWNhbGZ1 bmNzLmMgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL2xvZ2ljYWxmdW5jcy5jCmlu ZGV4IDVjMjMxNzg1NzAuLmY1NzU0MjA4MzUgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3JlcGxp Y2F0aW9uL2xvZ2ljYWwvbG9naWNhbGZ1bmNzLmMKKysrIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRp b24vbG9naWNhbC9sb2dpY2FsZnVuY3MuYwpAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgIm5v ZGVzL21ha2VmdW5jcy5oIgogI2luY2x1ZGUgInJlcGxpY2F0aW9uL2RlY29kZS5oIgogI2luY2x1 ZGUgInJlcGxpY2F0aW9uL2xvZ2ljYWwuaCIKKyNpbmNsdWRlICJyZXBsaWNhdGlvbi9kZGxtZXNz YWdlLmgiCiAjaW5jbHVkZSAicmVwbGljYXRpb24vbWVzc2FnZS5oIgogI2luY2x1ZGUgInN0b3Jh Z2UvZmQuaCIKICNpbmNsdWRlICJ1dGlscy9hcnJheS5oIgpAQCAtMzg4LDMgKzM4OSwyNiBAQCBw Z19sb2dpY2FsX2VtaXRfbWVzc2FnZV90ZXh0KFBHX0ZVTkNUSU9OX0FSR1MpCiAJLyogYnl0ZWEg YW5kIHRleHQgYXJlIGNvbXBhdGlibGUgKi8KIAlyZXR1cm4gcGdfbG9naWNhbF9lbWl0X21lc3Nh Z2VfYnl0ZWEoZmNpbmZvKTsKIH0KKworLyoKKyAqIFNRTCBmdW5jdGlvbiBmb3Igd3JpdGluZyBs b2dpY2FsIGRlY29kaW5nIERETCBtZXNzYWdlIGludG8gV0FMLgorICovCitEYXR1bQorcGdfbG9n aWNhbF9lbWl0X2RkbF9tZXNzYWdlX2J5dGVhKFBHX0ZVTkNUSU9OX0FSR1MpCit7CisJY2hhcgkg ICAqcHJlZml4ID0gdGV4dF90b19jc3RyaW5nKFBHX0dFVEFSR19URVhUX1BQKDApKTsKKwlPaWQJ CQlyZWxpZCA9IFBHX0dFVEFSR19PSUQoMSk7CisJRGVwYXJzZWRDb21tYW5kVHlwZSBjbWR0eXBl ID0gUEdfR0VUQVJHX0lOVDE2KDIpOworCWNoYXIJICAgKmRhdGEgPSB0ZXh0X3RvX2NzdHJpbmco UEdfR0VUQVJHX1RFWFRfUFAoMykpOworCVhMb2dSZWNQdHIJbHNuOworCisJbHNuID0gTG9nTG9n aWNhbERETE1lc3NhZ2UocHJlZml4LCByZWxpZCwgY21kdHlwZSwgZGF0YSwgc3RybGVuKGRhdGEp KTsKKwlQR19SRVRVUk5fTFNOKGxzbik7Cit9CisKK0RhdHVtCitwZ19sb2dpY2FsX2VtaXRfZGRs X21lc3NhZ2VfdGV4dChQR19GVU5DVElPTl9BUkdTKQoreworCS8qIGJ5dGVhIGFuZCB0ZXh0IGFy ZSBjb21wYXRpYmxlICovCisJcmV0dXJuIHBnX2xvZ2ljYWxfZW1pdF9kZGxfbWVzc2FnZV9ieXRl YShmY2luZm8pOworfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNh bC9tZXNvbi5idWlsZCBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvbWVzb24uYnVp bGQKaW5kZXggMWI5ZjA3MmVkYy4uMDc3NTZlOTBhZSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQv cmVwbGljYXRpb24vbG9naWNhbC9tZXNvbi5idWlsZAorKysgYi9zcmMvYmFja2VuZC9yZXBsaWNh dGlvbi9sb2dpY2FsL21lc29uLmJ1aWxkCkBAIC0xLDYgKzEsNyBAQAogIyBDb3B5cmlnaHQgKGMp IDIwMjIsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCiAKIGJhY2tlbmRfc291 cmNlcyArPSBmaWxlcygKKyAgJ2RkbG1lc3NhZ2UuYycsCiAgICdkZWNvZGUuYycsCiAgICdsYXVu Y2hlci5jJywKICAgJ2xvZ2ljYWwuYycsCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9yZXBsaWNh dGlvbi9sb2dpY2FsL3Jlb3JkZXJidWZmZXIuYyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xv Z2ljYWwvcmVvcmRlcmJ1ZmZlci5jCmluZGV4IDkyMjA0YmQ5Y2QuLjMyMjIwMjdiZTEgMTAwNjQ0 Ci0tLSBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvcmVvcmRlcmJ1ZmZlci5jCisr KyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvcmVvcmRlcmJ1ZmZlci5jCkBAIC05 NCw2ICs5NCw3IEBACiAjaW5jbHVkZSAibGliL2JpbmFyeWhlYXAuaCIKICNpbmNsdWRlICJtaXNj YWRtaW4uaCIKICNpbmNsdWRlICJwZ3N0YXQuaCIKKyNpbmNsdWRlICJyZXBsaWNhdGlvbi9kZGxt ZXNzYWdlLmgiCiAjaW5jbHVkZSAicmVwbGljYXRpb24vbG9naWNhbC5oIgogI2luY2x1ZGUgInJl cGxpY2F0aW9uL3Jlb3JkZXJidWZmZXIuaCIKICNpbmNsdWRlICJyZXBsaWNhdGlvbi9zbG90Lmgi CkBAIC01MTYsNiArNTE3LDE0IEBAIFJlb3JkZXJCdWZmZXJSZXR1cm5DaGFuZ2UoUmVvcmRlckJ1 ZmZlciAqcmIsIFJlb3JkZXJCdWZmZXJDaGFuZ2UgKmNoYW5nZSwKIAkJCQlwZnJlZShjaGFuZ2Ut PmRhdGEubXNnLm1lc3NhZ2UpOwogCQkJY2hhbmdlLT5kYXRhLm1zZy5tZXNzYWdlID0gTlVMTDsK IAkJCWJyZWFrOworCQljYXNlIFJFT1JERVJfQlVGRkVSX0NIQU5HRV9EREw6CisJCQlpZiAoY2hh bmdlLT5kYXRhLmRkbC5wcmVmaXggIT0gTlVMTCkKKwkJCQlwZnJlZShjaGFuZ2UtPmRhdGEuZGRs LnByZWZpeCk7CisJCQljaGFuZ2UtPmRhdGEuZGRsLnByZWZpeCA9IE5VTEw7CisJCQlpZiAoY2hh bmdlLT5kYXRhLmRkbC5tZXNzYWdlICE9IE5VTEwpCisJCQkJcGZyZWUoY2hhbmdlLT5kYXRhLmRk bC5tZXNzYWdlKTsKKwkJCWNoYW5nZS0+ZGF0YS5kZGwubWVzc2FnZSA9IE5VTEw7CisJCQlicmVh azsKIAkJY2FzZSBSRU9SREVSX0JVRkZFUl9DSEFOR0VfSU5WQUxJREFUSU9OOgogCQkJaWYgKGNo YW5nZS0+ZGF0YS5pbnZhbC5pbnZhbGlkYXRpb25zKQogCQkJCXBmcmVlKGNoYW5nZS0+ZGF0YS5p bnZhbC5pbnZhbGlkYXRpb25zKTsKQEAgLTg5NCw2ICs5MDMsMzYgQEAgUmVvcmRlckJ1ZmZlclF1 ZXVlTWVzc2FnZShSZW9yZGVyQnVmZmVyICpyYiwgVHJhbnNhY3Rpb25JZCB4aWQsCiAJfQogfQog CisvKgorICogQSB0cmFuc2FjdGlvbmFsIERETCBtZXNzYWdlIGlzIHF1ZXVlZCB0byBiZSBwcm9j ZXNzZWQgdXBvbiBjb21taXQuCisgKi8KK3ZvaWQKK1Jlb3JkZXJCdWZmZXJRdWV1ZURETE1lc3Nh Z2UoUmVvcmRlckJ1ZmZlciAqcmIsIFRyYW5zYWN0aW9uSWQgeGlkLAorCQkJCQkJCSBYTG9nUmVj UHRyIGxzbiwgY29uc3QgY2hhciAqcHJlZml4LAorCQkJCQkJCSBTaXplIG1lc3NhZ2Vfc2l6ZSwg Y29uc3QgY2hhciAqbWVzc2FnZSwKKwkJCQkJCQkgT2lkIHJlbGlkLCBEZXBhcnNlZENvbW1hbmRU eXBlIGNtZHR5cGUpCit7CisJTWVtb3J5Q29udGV4dCBvbGRjb250ZXh0OworCVJlb3JkZXJCdWZm ZXJDaGFuZ2UgKmNoYW5nZTsKKworCUFzc2VydChUcmFuc2FjdGlvbklkSXNWYWxpZCh4aWQpKTsK KworCW9sZGNvbnRleHQgPSBNZW1vcnlDb250ZXh0U3dpdGNoVG8ocmItPmNvbnRleHQpOworCisJ Y2hhbmdlID0gUmVvcmRlckJ1ZmZlckdldENoYW5nZShyYik7CisJY2hhbmdlLT5hY3Rpb24gPSBS RU9SREVSX0JVRkZFUl9DSEFOR0VfRERMOworCWNoYW5nZS0+ZGF0YS5kZGwucHJlZml4ID0gcHN0 cmR1cChwcmVmaXgpOworCWNoYW5nZS0+ZGF0YS5kZGwucmVsaWQgPSByZWxpZDsKKwljaGFuZ2Ut PmRhdGEuZGRsLmNtZHR5cGUgPSBjbWR0eXBlOworCWNoYW5nZS0+ZGF0YS5kZGwubWVzc2FnZV9z aXplID0gbWVzc2FnZV9zaXplOworCWNoYW5nZS0+ZGF0YS5kZGwubWVzc2FnZSA9IHBhbGxvYyht ZXNzYWdlX3NpemUpOworCW1lbWNweShjaGFuZ2UtPmRhdGEuZGRsLm1lc3NhZ2UsIG1lc3NhZ2Us IG1lc3NhZ2Vfc2l6ZSk7CisKKwlSZW9yZGVyQnVmZmVyUXVldWVDaGFuZ2UocmIsIHhpZCwgbHNu LCBjaGFuZ2UsIGZhbHNlKTsKKworCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhvbGRjb250ZXh0KTsK K30KKwogLyoKICAqIEFzc2VydFRYTkxzbk9yZGVyCiAgKgkJVmVyaWZ5IExTTiBvcmRlcmluZyBv ZiB0cmFuc2FjdGlvbiBsaXN0cyBpbiB0aGUgcmVvcmRlcmJ1ZmZlcgpAQCAtMjAwMiw2ICsyMDQx LDIxIEBAIFJlb3JkZXJCdWZmZXJBcHBseU1lc3NhZ2UoUmVvcmRlckJ1ZmZlciAqcmIsIFJlb3Jk ZXJCdWZmZXJUWE4gKnR4biwKIAkJCQkJY2hhbmdlLT5kYXRhLm1zZy5tZXNzYWdlKTsKIH0KIAor LyoKKyAqIEhlbHBlciBmdW5jdGlvbiBmb3IgUmVvcmRlckJ1ZmZlclByb2Nlc3NUWE4gZm9yIGFw cGx5aW5nIHRoZSBEREwgbWVzc2FnZS4KKyAqLworc3RhdGljIGlubGluZSB2b2lkCitSZW9yZGVy QnVmZmVyQXBwbHlERExNZXNzYWdlKFJlb3JkZXJCdWZmZXIgKnJiLCBSZW9yZGVyQnVmZmVyVFhO ICp0eG4sCisJCQkJCQkJIFJlb3JkZXJCdWZmZXJDaGFuZ2UgKmNoYW5nZSwgYm9vbCBzdHJlYW1p bmcpCit7CisJcmItPmRkbChyYiwgdHhuLCBjaGFuZ2UtPmxzbiwKKwkJCWNoYW5nZS0+ZGF0YS5k ZGwucHJlZml4LAorCQkJY2hhbmdlLT5kYXRhLmRkbC5yZWxpZCwKKwkJCWNoYW5nZS0+ZGF0YS5k ZGwuY21kdHlwZSwKKwkJCWNoYW5nZS0+ZGF0YS5kZGwubWVzc2FnZV9zaXplLAorCQkJY2hhbmdl LT5kYXRhLmRkbC5tZXNzYWdlKTsKK30KKwogLyoKICAqIEZ1bmN0aW9uIHRvIHN0b3JlIHRoZSBj b21tYW5kIGlkIGFuZCBzbmFwc2hvdCBhdCB0aGUgZW5kIG9mIHRoZSBjdXJyZW50CiAgKiBzdHJl YW0gc28gdGhhdCB3ZSBjYW4gcmV1c2UgdGhlIHNhbWUgd2hpbGUgc2VuZGluZyB0aGUgbmV4dCBz dHJlYW0uCkBAIC0yMzgyLDYgKzI0MzYsMTAgQEAgUmVvcmRlckJ1ZmZlclByb2Nlc3NUWE4oUmVv cmRlckJ1ZmZlciAqcmIsIFJlb3JkZXJCdWZmZXJUWE4gKnR4biwKIAkJCQkJUmVvcmRlckJ1ZmZl ckFwcGx5TWVzc2FnZShyYiwgdHhuLCBjaGFuZ2UsIHN0cmVhbWluZyk7CiAJCQkJCWJyZWFrOwog CisJCQkJY2FzZSBSRU9SREVSX0JVRkZFUl9DSEFOR0VfRERMOgorCQkJCQlSZW9yZGVyQnVmZmVy QXBwbHlERExNZXNzYWdlKHJiLCB0eG4sIGNoYW5nZSwgc3RyZWFtaW5nKTsKKwkJCQkJYnJlYWs7 CisKIAkJCQljYXNlIFJFT1JERVJfQlVGRkVSX0NIQU5HRV9JTlZBTElEQVRJT046CiAJCQkJCS8q IEV4ZWN1dGUgdGhlIGludmFsaWRhdGlvbiBtZXNzYWdlcyBsb2NhbGx5ICovCiAJCQkJCVJlb3Jk ZXJCdWZmZXJFeGVjdXRlSW52YWxpZGF0aW9ucyhjaGFuZ2UtPmRhdGEuaW52YWwubmludmFsaWRh dGlvbnMsCkBAIC0zODE0LDYgKzM4NzIsMzkgQEAgUmVvcmRlckJ1ZmZlclNlcmlhbGl6ZUNoYW5n ZShSZW9yZGVyQnVmZmVyICpyYiwgUmVvcmRlckJ1ZmZlclRYTiAqdHhuLAogCQkJCQkgICBjaGFu Z2UtPmRhdGEubXNnLm1lc3NhZ2Vfc2l6ZSk7CiAJCQkJZGF0YSArPSBjaGFuZ2UtPmRhdGEubXNn Lm1lc3NhZ2Vfc2l6ZTsKIAorCQkJCWJyZWFrOworCQkJfQorCQljYXNlIFJFT1JERVJfQlVGRkVS X0NIQU5HRV9EREw6CisJCQl7CisJCQkJY2hhcgkgICAqZGF0YTsKKwkJCQlTaXplCQlwcmVmaXhf c2l6ZSA9IHN0cmxlbihjaGFuZ2UtPmRhdGEuZGRsLnByZWZpeCkgKyAxOworCisJCQkJc3ogKz0g cHJlZml4X3NpemUgKyBjaGFuZ2UtPmRhdGEuZGRsLm1lc3NhZ2Vfc2l6ZSArCisJCQkJCXNpemVv ZihTaXplKSArIHNpemVvZihPaWQpICsgc2l6ZW9mKGludCkgKyBzaXplb2YoU2l6ZSk7CisJCQkJ UmVvcmRlckJ1ZmZlclNlcmlhbGl6ZVJlc2VydmUocmIsIHN6KTsKKworCQkJCWRhdGEgPSAoKGNo YXIgKikgcmItPm91dGJ1ZikgKyBzaXplb2YoUmVvcmRlckJ1ZmZlckRpc2tDaGFuZ2UpOworCisJ CQkJLyogbWlnaHQgaGF2ZSBiZWVuIHJlYWxsb2NhdGVkIGFib3ZlICovCisJCQkJb25kaXNrID0g KFJlb3JkZXJCdWZmZXJEaXNrQ2hhbmdlICopIHJiLT5vdXRidWY7CisKKwkJCQkvKiB3cml0ZSB0 aGUgcHJlZml4LCByZWxpZCBhbmQgY21kdHlwZSBpbmNsdWRpbmcgdGhlIHNpemUgKi8KKwkJCQlt ZW1jcHkoZGF0YSwgJnByZWZpeF9zaXplLCBzaXplb2YoU2l6ZSkpOworCQkJCWRhdGEgKz0gc2l6 ZW9mKFNpemUpOworCQkJCW1lbWNweShkYXRhLCAmY2hhbmdlLT5kYXRhLmRkbC5yZWxpZCwgc2l6 ZW9mKE9pZCkpOworCQkJCWRhdGEgKz0gc2l6ZW9mKE9pZCk7CisJCQkJbWVtY3B5KGRhdGEsICZj aGFuZ2UtPmRhdGEuZGRsLmNtZHR5cGUsIHNpemVvZihEZXBhcnNlZENvbW1hbmRUeXBlKSk7CisJ CQkJZGF0YSArPSBzaXplb2YoaW50KTsKKwkJCQltZW1jcHkoZGF0YSwgY2hhbmdlLT5kYXRhLmRk bC5wcmVmaXgsIHByZWZpeF9zaXplKTsKKwkJCQlkYXRhICs9IHByZWZpeF9zaXplOworCisJCQkJ Lyogd3JpdGUgdGhlIG1lc3NhZ2UgaW5jbHVkaW5nIHRoZSBzaXplICovCisJCQkJbWVtY3B5KGRh dGEsICZjaGFuZ2UtPmRhdGEuZGRsLm1lc3NhZ2Vfc2l6ZSwgc2l6ZW9mKFNpemUpKTsKKwkJCQlk YXRhICs9IHNpemVvZihTaXplKTsKKwkJCQltZW1jcHkoZGF0YSwgY2hhbmdlLT5kYXRhLmRkbC5t ZXNzYWdlLAorCQkJCQkgICBjaGFuZ2UtPmRhdGEuZGRsLm1lc3NhZ2Vfc2l6ZSk7CisJCQkJZGF0 YSArPSBjaGFuZ2UtPmRhdGEuZGRsLm1lc3NhZ2Vfc2l6ZTsKKwogCQkJCWJyZWFrOwogCQkJfQog CQljYXNlIFJFT1JERVJfQlVGRkVSX0NIQU5HRV9JTlZBTElEQVRJT046CkBAIC00MTI4LDYgKzQy MTksMTUgQEAgUmVvcmRlckJ1ZmZlckNoYW5nZVNpemUoUmVvcmRlckJ1ZmZlckNoYW5nZSAqY2hh bmdlKQogCQkJCXN6ICs9IHByZWZpeF9zaXplICsgY2hhbmdlLT5kYXRhLm1zZy5tZXNzYWdlX3Np emUgKwogCQkJCQlzaXplb2YoU2l6ZSkgKyBzaXplb2YoU2l6ZSk7CiAKKwkJCQlicmVhazsKKwkJ CX0KKwkJY2FzZSBSRU9SREVSX0JVRkZFUl9DSEFOR0VfRERMOgorCQkJeworCQkJCVNpemUJCXBy ZWZpeF9zaXplID0gc3RybGVuKGNoYW5nZS0+ZGF0YS5kZGwucHJlZml4KSArIDE7CisKKwkJCQlz eiArPSBwcmVmaXhfc2l6ZSArIGNoYW5nZS0+ZGF0YS5kZGwubWVzc2FnZV9zaXplICsKKwkJCQkJ c2l6ZW9mKFNpemUpICsgc2l6ZW9mKFNpemUpICsgc2l6ZW9mKE9pZCkgKyBzaXplb2YoRGVwYXJz ZWRDb21tYW5kVHlwZSk7CisKIAkJCQlicmVhazsKIAkJCX0KIAkJY2FzZSBSRU9SREVSX0JVRkZF Ul9DSEFOR0VfSU5WQUxJREFUSU9OOgpAQCAtNDQwNSw2ICs0NTA1LDMzIEBAIFJlb3JkZXJCdWZm ZXJSZXN0b3JlQ2hhbmdlKFJlb3JkZXJCdWZmZXIgKnJiLCBSZW9yZGVyQnVmZmVyVFhOICp0eG4s CiAJCQkJCSAgIGNoYW5nZS0+ZGF0YS5tc2cubWVzc2FnZV9zaXplKTsKIAkJCQlkYXRhICs9IGNo YW5nZS0+ZGF0YS5tc2cubWVzc2FnZV9zaXplOwogCisJCQkJYnJlYWs7CisJCQl9CisJCWNhc2Ug UkVPUkRFUl9CVUZGRVJfQ0hBTkdFX0RETDoKKwkJCXsKKwkJCQlTaXplCQlwcmVmaXhfc2l6ZTsK KworCQkJCS8qIHJlYWQgcHJlZml4ICovCisJCQkJbWVtY3B5KCZwcmVmaXhfc2l6ZSwgZGF0YSwg c2l6ZW9mKFNpemUpKTsKKwkJCQlkYXRhICs9IHNpemVvZihTaXplKTsKKwkJCQltZW1jcHkoJmNo YW5nZS0+ZGF0YS5kZGwucmVsaWQsIGRhdGEsIHNpemVvZihPaWQpKTsKKwkJCQlkYXRhICs9IHNp emVvZihPaWQpOworCQkJCW1lbWNweSgmY2hhbmdlLT5kYXRhLmRkbC5jbWR0eXBlLCBkYXRhLCBz aXplb2YoRGVwYXJzZWRDb21tYW5kVHlwZSkpOworCQkJCWRhdGEgKz0gc2l6ZW9mKGludCk7CisJ CQkJY2hhbmdlLT5kYXRhLmRkbC5wcmVmaXggPSBNZW1vcnlDb250ZXh0QWxsb2MocmItPmNvbnRl eHQsIHByZWZpeF9zaXplKTsKKwkJCQltZW1jcHkoY2hhbmdlLT5kYXRhLmRkbC5wcmVmaXgsIGRh dGEsIHByZWZpeF9zaXplKTsKKwkJCQlBc3NlcnQoY2hhbmdlLT5kYXRhLmRkbC5wcmVmaXhbcHJl Zml4X3NpemUgLSAxXSA9PSAnXDAnKTsKKwkJCQlkYXRhICs9IHByZWZpeF9zaXplOworCisJCQkJ LyogcmVhZCB0aGUgbWVzc2FnZSAqLworCQkJCW1lbWNweSgmY2hhbmdlLT5kYXRhLm1zZy5tZXNz YWdlX3NpemUsIGRhdGEsIHNpemVvZihTaXplKSk7CisJCQkJZGF0YSArPSBzaXplb2YoU2l6ZSk7 CisJCQkJY2hhbmdlLT5kYXRhLm1zZy5tZXNzYWdlID0gTWVtb3J5Q29udGV4dEFsbG9jKHJiLT5j b250ZXh0LAorCQkJCQkJCQkJCQkJCQkJICBjaGFuZ2UtPmRhdGEubXNnLm1lc3NhZ2Vfc2l6ZSk7 CisJCQkJbWVtY3B5KGNoYW5nZS0+ZGF0YS5tc2cubWVzc2FnZSwgZGF0YSwKKwkJCQkJICAgY2hh bmdlLT5kYXRhLm1zZy5tZXNzYWdlX3NpemUpOworCQkJCWRhdGEgKz0gY2hhbmdlLT5kYXRhLm1z Zy5tZXNzYWdlX3NpemU7CisKIAkJCQlicmVhazsKIAkJCX0KIAkJY2FzZSBSRU9SREVSX0JVRkZF Ul9DSEFOR0VfSU5WQUxJREFUSU9OOgpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ193YWxkdW1wL3Jt Z3JkZXNjLmMgYi9zcmMvYmluL3BnX3dhbGR1bXAvcm1ncmRlc2MuYwppbmRleCA2YjhjMTdiYjRj Li5kYWYxNzMwMjUyIDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX3dhbGR1bXAvcm1ncmRlc2MuYwor KysgYi9zcmMvYmluL3BnX3dhbGR1bXAvcm1ncmRlc2MuYwpAQCAtMjYsNiArMjYsNyBAQAogI2lu Y2x1ZGUgImNvbW1hbmRzL2RiY29tbWFuZHNfeGxvZy5oIgogI2luY2x1ZGUgImNvbW1hbmRzL3Nl cXVlbmNlLmgiCiAjaW5jbHVkZSAiY29tbWFuZHMvdGFibGVzcGFjZS5oIgorI2luY2x1ZGUgInJl cGxpY2F0aW9uL2RkbG1lc3NhZ2UuaCIKICNpbmNsdWRlICJyZXBsaWNhdGlvbi9tZXNzYWdlLmgi CiAjaW5jbHVkZSAicmVwbGljYXRpb24vb3JpZ2luLmgiCiAjaW5jbHVkZSAicm1ncmRlc2MuaCIK ZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9ybWdybGlzdC5oIGIvc3JjL2luY2x1ZGUv YWNjZXNzL3JtZ3JsaXN0LmgKaW5kZXggMDAwYmNiZmRhZi4uMjJiYzA1YWY1MCAxMDA2NDQKLS0t IGEvc3JjL2luY2x1ZGUvYWNjZXNzL3JtZ3JsaXN0LmgKKysrIGIvc3JjL2luY2x1ZGUvYWNjZXNz L3JtZ3JsaXN0LmgKQEAgLTQ3LDMgKzQ3LDQgQEAgUEdfUk1HUihSTV9DT01NSVRfVFNfSUQsICJD b21taXRUcyIsIGNvbW1pdF90c19yZWRvLCBjb21taXRfdHNfZGVzYywgY29tbWl0X3RzX2kKIFBH X1JNR1IoUk1fUkVQTE9SSUdJTl9JRCwgIlJlcGxpY2F0aW9uT3JpZ2luIiwgcmVwbG9yaWdpbl9y ZWRvLCByZXBsb3JpZ2luX2Rlc2MsIHJlcGxvcmlnaW5faWRlbnRpZnksIE5VTEwsIE5VTEwsIE5V TEwsIE5VTEwpCiBQR19STUdSKFJNX0dFTkVSSUNfSUQsICJHZW5lcmljIiwgZ2VuZXJpY19yZWRv LCBnZW5lcmljX2Rlc2MsIGdlbmVyaWNfaWRlbnRpZnksIE5VTEwsIE5VTEwsIGdlbmVyaWNfbWFz aywgTlVMTCkKIFBHX1JNR1IoUk1fTE9HSUNBTE1TR19JRCwgIkxvZ2ljYWxNZXNzYWdlIiwgbG9n aWNhbG1zZ19yZWRvLCBsb2dpY2FsbXNnX2Rlc2MsIGxvZ2ljYWxtc2dfaWRlbnRpZnksIE5VTEws IE5VTEwsIE5VTEwsIGxvZ2ljYWxtc2dfZGVjb2RlKQorUEdfUk1HUihSTV9MT0dJQ0FMRERMTVNH X0lELCAiTG9naWNhbERETE1lc3NhZ2UiLCBsb2dpY2FsZGRsbXNnX3JlZG8sIGxvZ2ljYWxkZGxt c2dfZGVzYywgbG9naWNhbGRkbG1zZ19pZGVudGlmeSwgTlVMTCwgTlVMTCwgTlVMTCwgbG9naWNh bGRkbF9kZWNvZGUpCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0 IGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdAppbmRleCBkNzVhMjYxMDU1Li4wNWUw NDk4YzVlIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0CisrKyBi L3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQKQEAgLTExMDAwLDYgKzExMDAwLDE0IEBA CiAgIHByb25hbWUgPT4gJ3BnX2xvZ2ljYWxfZW1pdF9tZXNzYWdlJywgcHJvdm9sYXRpbGUgPT4g J3YnLCBwcm9wYXJhbGxlbCA9PiAndScsCiAgIHByb3JldHR5cGUgPT4gJ3BnX2xzbicsIHByb2Fy Z3R5cGVzID0+ICdib29sIHRleHQgYnl0ZWEnLAogICBwcm9zcmMgPT4gJ3BnX2xvZ2ljYWxfZW1p dF9tZXNzYWdlX2J5dGVhJyB9LAoreyBvaWQgPT4gJzM4MTMnLCBkZXNjciA9PiAnZW1pdCBhIHRl eHR1YWwgbG9naWNhbCBkZWNvZGluZyBtZXNzYWdlJywKKyAgcHJvbmFtZSA9PiAncGdfbG9naWNh bF9lbWl0X2RkbF9tZXNzYWdlJywgcHJvdm9sYXRpbGUgPT4gJ3YnLCBwcm9wYXJhbGxlbCA9PiAn dScsCisgIHByb3JldHR5cGUgPT4gJ3BnX2xzbicsIHByb2FyZ3R5cGVzID0+ICdib29sIHRleHQg dGV4dCcsCisgIHByb3NyYyA9PiAncGdfbG9naWNhbF9lbWl0X2RkbF9tZXNzYWdlX3RleHQnIH0s Cit7IG9pZCA9PiAnMzgxNCcsIGRlc2NyID0+ICdlbWl0IGEgYmluYXJ5IGxvZ2ljYWwgZGVjb2Rp bmcgbWVzc2FnZScsCisgIHByb25hbWUgPT4gJ3BnX2xvZ2ljYWxfZW1pdF9kZGxfbWVzc2FnZScs IHByb3ZvbGF0aWxlID0+ICd2JywgcHJvcGFyYWxsZWwgPT4gJ3UnLAorICBwcm9yZXR0eXBlID0+ ICdwZ19sc24nLCBwcm9hcmd0eXBlcyA9PiAndGV4dCByZWdjbGFzcyBpbnQ0IHRleHQnLAorICBw cm9zcmMgPT4gJ3BnX2xvZ2ljYWxfZW1pdF9kZGxfbWVzc2FnZV9ieXRlYScgfSwKIAogIyBldmVu dCB0cmlnZ2VycwogeyBvaWQgPT4gJzM1NjYnLCBkZXNjciA9PiAnbGlzdCBvYmplY3RzIGRyb3Bw ZWQgYnkgdGhlIGN1cnJlbnQgY29tbWFuZCcsCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9yZXBs aWNhdGlvbi9kZGxtZXNzYWdlLmggYi9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9kZGxtZXNzYWdl LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uNzdkZjZlYTExYQotLS0g L2Rldi9udWxsCisrKyBiL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL2RkbG1lc3NhZ2UuaApAQCAt MCwwICsxLDYwIEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIGRkbG1lc3NhZ2UuaAorICoJICAg RXhwb3J0cyBmcm9tIHJlcGxpY2F0aW9uL2xvZ2ljYWwvZGRsbWVzc2FnZS5jCisgKgorICogQ29w eXJpZ2h0IChjKSAyMDIyLCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorICoK KyAqIHNyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL2RkbG1lc3NhZ2UuaAorICotLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tCisgKi8KKyNpZm5kZWYgUEdfTE9HSUNBTF9ERExfTUVTU0FHRV9ICisjZGVmaW5lIFBHX0xP R0lDQUxfRERMX01FU1NBR0VfSAorCisjaW5jbHVkZSAiYWNjZXNzL3hsb2cuaCIKKyNpbmNsdWRl ICJhY2Nlc3MveGxvZ2RlZnMuaCIKKyNpbmNsdWRlICJhY2Nlc3MveGxvZ3JlYWRlci5oIgorI2lu Y2x1ZGUgIm5vZGVzL25vZGVzLmgiCisKKworLyoKKyAqIFN1cHBvcnQgZm9yIGtlZXBpbmcgdHJh Y2sgb2YgZGVwYXJzZWQgY29tbWFuZHMuCisgKi8KK3R5cGVkZWYgZW51bSBEZXBhcnNlZENvbW1h bmRUeXBlCit7CisJRENUX1NpbXBsZUNtZCwKKwlEQ1RfVGFibGVEcm9wU3RhcnQsCisJRENUX1Rh YmxlRHJvcEVuZCwKKwlEQ1RfVGFibGVBbHRlciwKKwlEQ1RfT2JqZWN0Q3JlYXRlLAorCURDVF9P YmplY3REcm9wCit9IERlcGFyc2VkQ29tbWFuZFR5cGU7CisKKy8qCisgKiBHZW5lcmljIGxvZ2lj YWwgZGVjb2RpbmcgRERMIG1lc3NhZ2Ugd2FsIHJlY29yZC4KKyAqLwordHlwZWRlZiBzdHJ1Y3Qg eGxfbG9naWNhbF9kZGxfbWVzc2FnZQoreworCU9pZAkJCWRiSWQ7CQkJLyogZGF0YWJhc2UgT2lk IGVtaXR0ZWQgZnJvbSAqLworCVNpemUJCXByZWZpeF9zaXplOwkvKiBsZW5ndGggb2YgcHJlZml4 IGluY2x1ZGluZyBudWxsIHRlcm1pbmF0b3IgKi8KKwlPaWQJCQlyZWxpZDsJCQkvKiBpZCBvZiB0 aGUgdGFibGUgKi8KKwlEZXBhcnNlZENvbW1hbmRUeXBlIGNtZHR5cGU7CS8qIHR5cGUgb2Ygc3Fs IGNvbW1hbmQgKi8KKwlTaXplCQltZXNzYWdlX3NpemU7CS8qIHNpemUgb2YgdGhlIG1lc3NhZ2Ug Ki8KKworCS8qCisJICogcGF5bG9hZCwgaW5jbHVkaW5nIG51bGwtdGVybWluYXRlZCBwcmVmaXgg b2YgbGVuZ3RoIHByZWZpeF9zaXplCisJICovCisJY2hhcgkJbWVzc2FnZVtGTEVYSUJMRV9BUlJB WV9NRU1CRVJdOworfSB4bF9sb2dpY2FsX2RkbF9tZXNzYWdlOworCisjZGVmaW5lIFNpemVPZkxv Z2ljYWxERExNZXNzYWdlCShvZmZzZXRvZih4bF9sb2dpY2FsX2RkbF9tZXNzYWdlLCBtZXNzYWdl KSkKKworZXh0ZXJuIFhMb2dSZWNQdHIgTG9nTG9naWNhbERETE1lc3NhZ2UoY29uc3QgY2hhciAq cHJlZml4LCBPaWQgcmVsaWQsIERlcGFyc2VkQ29tbWFuZFR5cGUgY21kdHlwZSwKKwkJCQkJCQkJ CSAgIGNvbnN0IGNoYXIgKmRkbF9tZXNzYWdlLCBzaXplX3Qgc2l6ZSk7CisKKy8qIFJNR1IgQVBJ Ki8KKyNkZWZpbmUgWExPR19MT0dJQ0FMX0RETF9NRVNTQUdFCTB4MDAKK3ZvaWQJCWxvZ2ljYWxk ZGxtc2dfcmVkbyhYTG9nUmVhZGVyU3RhdGUgKnJlY29yZCk7Cit2b2lkCQlsb2dpY2FsZGRsbXNn X2Rlc2MoU3RyaW5nSW5mbyBidWYsIFhMb2dSZWFkZXJTdGF0ZSAqcmVjb3JkKTsKK2NvbnN0IGNo YXIgKmxvZ2ljYWxkZGxtc2dfaWRlbnRpZnkodWludDggaW5mbyk7CisKKyNlbmRpZgpkaWZmIC0t Z2l0IGEvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vZGVjb2RlLmggYi9zcmMvaW5jbHVkZS9yZXBs aWNhdGlvbi9kZWNvZGUuaAppbmRleCA3NDFiZjY1Y2Y3Li5mMjcxZjRiMzYxIDEwMDY0NAotLS0g YS9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9kZWNvZGUuaAorKysgYi9zcmMvaW5jbHVkZS9yZXBs aWNhdGlvbi9kZWNvZGUuaApAQCAtMjcsNiArMjcsNyBAQCBleHRlcm4gdm9pZCBoZWFwMl9kZWNv ZGUoTG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4LCBYTG9nUmVjb3JkQnVmZmVyICpidWYpOwog ZXh0ZXJuIHZvaWQgeGFjdF9kZWNvZGUoTG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4LCBYTG9n UmVjb3JkQnVmZmVyICpidWYpOwogZXh0ZXJuIHZvaWQgc3RhbmRieV9kZWNvZGUoTG9naWNhbERl Y29kaW5nQ29udGV4dCAqY3R4LCBYTG9nUmVjb3JkQnVmZmVyICpidWYpOwogZXh0ZXJuIHZvaWQg bG9naWNhbG1zZ19kZWNvZGUoTG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4LCBYTG9nUmVjb3Jk QnVmZmVyICpidWYpOworZXh0ZXJuIHZvaWQgbG9naWNhbGRkbF9kZWNvZGUoTG9naWNhbERlY29k aW5nQ29udGV4dCAqY3R4LCBYTG9nUmVjb3JkQnVmZmVyICpidWYpOwogCiBleHRlcm4gdm9pZCBM b2dpY2FsRGVjb2RpbmdQcm9jZXNzUmVjb3JkKExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCwK IAkJCQkJCQkJCQkgWExvZ1JlYWRlclN0YXRlICpyZWNvcmQpOwpkaWZmIC0tZ2l0IGEvc3JjL2lu Y2x1ZGUvcmVwbGljYXRpb24vb3V0cHV0X3BsdWdpbi5oIGIvc3JjL2luY2x1ZGUvcmVwbGljYXRp b24vb3V0cHV0X3BsdWdpbi5oCmluZGV4IGI3ZDI4ZDcwNDUuLjBjNDI1MDA5NmMgMTAwNjQ0Ci0t LSBhL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL291dHB1dF9wbHVnaW4uaAorKysgYi9zcmMvaW5j bHVkZS9yZXBsaWNhdGlvbi9vdXRwdXRfcGx1Z2luLmgKQEAgLTksNiArOSw3IEBACiAjaWZuZGVm IE9VVFBVVF9QTFVHSU5fSAogI2RlZmluZSBPVVRQVVRfUExVR0lOX0gKIAorI2luY2x1ZGUgInJl cGxpY2F0aW9uL2RkbG1lc3NhZ2UuaCIKICNpbmNsdWRlICJyZXBsaWNhdGlvbi9yZW9yZGVyYnVm ZmVyLmgiCiAKIHN0cnVjdCBMb2dpY2FsRGVjb2RpbmdDb250ZXh0OwpAQCAtOTAsNiArOTEsMTgg QEAgdHlwZWRlZiB2b2lkICgqTG9naWNhbERlY29kZU1lc3NhZ2VDQikgKHN0cnVjdCBMb2dpY2Fs RGVjb2RpbmdDb250ZXh0ICpjdHgsCiAJCQkJCQkJCQkJU2l6ZSBtZXNzYWdlX3NpemUsCiAJCQkJ CQkJCQkJY29uc3QgY2hhciAqbWVzc2FnZSk7CiAKKy8qCisgKiBDYWxsZWQgZm9yIHRoZSBsb2dp Y2FsIGRlY29kaW5nIERETCBtZXNzYWdlcy4KKyAqLwordHlwZWRlZiB2b2lkICgqTG9naWNhbERl Y29kZURETE1lc3NhZ2VDQikgKHN0cnVjdCBMb2dpY2FsRGVjb2RpbmdDb250ZXh0ICpjdHgsCisJ CQkJCQkJCQkJICAgUmVvcmRlckJ1ZmZlclRYTiAqdHhuLAorCQkJCQkJCQkJCSAgIFhMb2dSZWNQ dHIgbWVzc2FnZV9sc24sCisJCQkJCQkJCQkJICAgY29uc3QgY2hhciAqcHJlZml4LAorCQkJCQkJ CQkJCSAgIE9pZCByZWxpZCwKKwkJCQkJCQkJCQkgICBEZXBhcnNlZENvbW1hbmRUeXBlIGNtZHR5 cGUsCisJCQkJCQkJCQkJICAgU2l6ZSBtZXNzYWdlX3NpemUsCisJCQkJCQkJCQkJICAgY29uc3Qg Y2hhciAqbWVzc2FnZSk7CisKIC8qCiAgKiBGaWx0ZXIgY2hhbmdlcyBieSBvcmlnaW4uCiAgKi8K QEAgLTIyMSw2ICsyMzQsNyBAQCB0eXBlZGVmIHN0cnVjdCBPdXRwdXRQbHVnaW5DYWxsYmFja3MK IAlMb2dpY2FsRGVjb2RlVHJ1bmNhdGVDQiB0cnVuY2F0ZV9jYjsKIAlMb2dpY2FsRGVjb2RlQ29t bWl0Q0IgY29tbWl0X2NiOwogCUxvZ2ljYWxEZWNvZGVNZXNzYWdlQ0IgbWVzc2FnZV9jYjsKKwlM b2dpY2FsRGVjb2RlRERMTWVzc2FnZUNCIGRkbF9jYjsKIAlMb2dpY2FsRGVjb2RlRmlsdGVyQnlP cmlnaW5DQiBmaWx0ZXJfYnlfb3JpZ2luX2NiOwogCUxvZ2ljYWxEZWNvZGVTaHV0ZG93bkNCIHNo dXRkb3duX2NiOwogCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9yZW9yZGVy YnVmZmVyLmggYi9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9yZW9yZGVyYnVmZmVyLmgKaW5kZXgg YjI3YTQzNjE4YS4uM2QyOTM5ZGUyOSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvcmVwbGljYXRp b24vcmVvcmRlcmJ1ZmZlci5oCisrKyBiL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL3Jlb3JkZXJi dWZmZXIuaApAQCAtMTEsNiArMTEsOCBAQAogCiAjaW5jbHVkZSAiYWNjZXNzL2h0dXBfZGV0YWls cy5oIgogI2luY2x1ZGUgImxpYi9pbGlzdC5oIgorI2luY2x1ZGUgIm5vZGVzL25vZGVzLmgiCisj aW5jbHVkZSAicmVwbGljYXRpb24vZGRsbWVzc2FnZS5oIgogI2luY2x1ZGUgInN0b3JhZ2Uvc2lu dmFsLmgiCiAjaW5jbHVkZSAidXRpbHMvaHNlYXJjaC5oIgogI2luY2x1ZGUgInV0aWxzL3JlbGNh Y2hlLmgiCkBAIC02NCw2ICs2Niw3IEBAIHR5cGVkZWYgZW51bSBSZW9yZGVyQnVmZmVyQ2hhbmdl VHlwZQogCVJFT1JERVJfQlVGRkVSX0NIQU5HRV9JTlNFUlQsCiAJUkVPUkRFUl9CVUZGRVJfQ0hB TkdFX1VQREFURSwKIAlSRU9SREVSX0JVRkZFUl9DSEFOR0VfREVMRVRFLAorCVJFT1JERVJfQlVG RkVSX0NIQU5HRV9EREwsCiAJUkVPUkRFUl9CVUZGRVJfQ0hBTkdFX01FU1NBR0UsCiAJUkVPUkRF Ul9CVUZGRVJfQ0hBTkdFX0lOVkFMSURBVElPTiwKIAlSRU9SREVSX0JVRkZFUl9DSEFOR0VfSU5U RVJOQUxfU05BUFNIT1QsCkBAIC0xMzgsNiArMTQxLDE2IEBAIHR5cGVkZWYgc3RydWN0IFJlb3Jk ZXJCdWZmZXJDaGFuZ2UKIAkJCWNoYXIJICAgKm1lc3NhZ2U7CiAJCX0JCQltc2c7CiAKKwkJLyog RERMICovCisJCXN0cnVjdAorCQl7CisJCQljaGFyCSAgICpwcmVmaXg7CisJCQlTaXplCQltZXNz YWdlX3NpemU7CisJCQljaGFyCSAgICptZXNzYWdlOworCQkJT2lkCQkJcmVsaWQ7CisJCQlEZXBh cnNlZENvbW1hbmRUeXBlIGNtZHR5cGU7CisJCX0JCQlkZGw7CisKIAkJLyogTmV3IHNuYXBzaG90 LCBzZXQgd2hlbiBhY3Rpb24gPT0gKl9JTlRFUk5BTF9TTkFQU0hPVCAqLwogCQlTbmFwc2hvdAlz bmFwc2hvdDsKIApAQCAtNDUwLDYgKzQ2MywxNiBAQCB0eXBlZGVmIHZvaWQgKCpSZW9yZGVyQnVm ZmVyTWVzc2FnZUNCKSAoUmVvcmRlckJ1ZmZlciAqcmIsCiAJCQkJCQkJCQkJY29uc3QgY2hhciAq cHJlZml4LCBTaXplIHN6LAogCQkJCQkJCQkJCWNvbnN0IGNoYXIgKm1lc3NhZ2UpOwogCisvKiBE REwgbWVzc2FnZSBjYWxsYmFjayBzaWduYXR1cmUgKi8KK3R5cGVkZWYgdm9pZCAoKlJlb3JkZXJC dWZmZXJERExNZXNzYWdlQ0IpIChSZW9yZGVyQnVmZmVyICpyYiwKKwkJCQkJCQkJCQkgICBSZW9y ZGVyQnVmZmVyVFhOICp0eG4sCisJCQkJCQkJCQkJICAgWExvZ1JlY1B0ciBtZXNzYWdlX2xzbiwK KwkJCQkJCQkJCQkgICBjb25zdCBjaGFyICpwcmVmaXgsCisJCQkJCQkJCQkJICAgT2lkIHJlbGlk LAorCQkJCQkJCQkJCSAgIERlcGFyc2VkQ29tbWFuZFR5cGUgY21kdHlwZSwKKwkJCQkJCQkJCQkg ICBTaXplIHN6LAorCQkJCQkJCQkJCSAgIGNvbnN0IGNoYXIgKm1lc3NhZ2UpOworCiAvKiBiZWdp biBwcmVwYXJlIGNhbGxiYWNrIHNpZ25hdHVyZSAqLwogdHlwZWRlZiB2b2lkICgqUmVvcmRlckJ1 ZmZlckJlZ2luUHJlcGFyZUNCKSAoUmVvcmRlckJ1ZmZlciAqcmIsCiAJCQkJCQkJCQkJCSBSZW9y ZGVyQnVmZmVyVFhOICp0eG4pOwpAQCAtNTY2LDYgKzU4OSw3IEBAIHN0cnVjdCBSZW9yZGVyQnVm ZmVyCiAJUmVvcmRlckJ1ZmZlckFwcGx5VHJ1bmNhdGVDQiBhcHBseV90cnVuY2F0ZTsKIAlSZW9y ZGVyQnVmZmVyQ29tbWl0Q0IgY29tbWl0OwogCVJlb3JkZXJCdWZmZXJNZXNzYWdlQ0IgbWVzc2Fn ZTsKKwlSZW9yZGVyQnVmZmVyRERMTWVzc2FnZUNCIGRkbDsKIAogCS8qCiAJICogQ2FsbGJhY2tz IHRvIGJlIGNhbGxlZCB3aGVuIHN0cmVhbWluZyBhIHRyYW5zYWN0aW9uIGF0IHByZXBhcmUgdGlt ZS4KQEAgLTY2NCw2ICs2ODgsOSBAQCBleHRlcm4gdm9pZCBSZW9yZGVyQnVmZmVyUXVldWVNZXNz YWdlKFJlb3JkZXJCdWZmZXIgKnJiLCBUcmFuc2FjdGlvbklkIHhpZCwKIAkJCQkJCQkJCSAgU25h cHNob3Qgc25hcCwgWExvZ1JlY1B0ciBsc24sCiAJCQkJCQkJCQkgIGJvb2wgdHJhbnNhY3Rpb25h bCwgY29uc3QgY2hhciAqcHJlZml4LAogCQkJCQkJCQkJICBTaXplIG1lc3NhZ2Vfc2l6ZSwgY29u c3QgY2hhciAqbWVzc2FnZSk7CitleHRlcm4gdm9pZCBSZW9yZGVyQnVmZmVyUXVldWVERExNZXNz YWdlKFJlb3JkZXJCdWZmZXIgKiwgVHJhbnNhY3Rpb25JZCwgWExvZ1JlY1B0ciBsc24sCisJCQkJ CQkJCQkJIGNvbnN0IGNoYXIgKnByZWZpeCwgU2l6ZSBtZXNzYWdlX3NpemUsCisJCQkJCQkJCQkJ IGNvbnN0IGNoYXIgKm1lc3NhZ2UsIE9pZCByZWxpZCwgRGVwYXJzZWRDb21tYW5kVHlwZSBjbWR0 eXBlKTsKIGV4dGVybiB2b2lkIFJlb3JkZXJCdWZmZXJDb21taXQoUmVvcmRlckJ1ZmZlciAqcmIs IFRyYW5zYWN0aW9uSWQgeGlkLAogCQkJCQkJCQlYTG9nUmVjUHRyIGNvbW1pdF9sc24sIFhMb2dS ZWNQdHIgZW5kX2xzbiwKIAkJCQkJCQkJVGltZXN0YW1wVHogY29tbWl0X3RpbWUsIFJlcE9yaWdp bklkIG9yaWdpbl9pZCwgWExvZ1JlY1B0ciBvcmlnaW5fbHNuKTsKLS0gCjIuMzguMQoK --000000000000e219be05f0eb1648 Content-Type: application/octet-stream; name="v58-0003-Introduce-the-test_ddl_deparse_regress-test-module.patch" Content-Disposition: attachment; filename="v58-0003-Introduce-the-test_ddl_deparse_regress-test-module.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lc88sdmz2 RnJvbSBiODQwOTRkN2JkNWUyZmE3ODBmNDE3Mjc1ZTM2MTIyZjRhODUwNjE5IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBamluIENoZXJpYW4gPGFqaW5jQGZhc3QuYXUuZnVqaXRzdS5j b20+CkRhdGU6IE1vbiwgMTkgRGVjIDIwMjIgMDc6NTc6MjggLTA1MDAKU3ViamVjdDogW1BBVENI IDMvNV0gSW50cm9kdWNlIHRoZSB0ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3MgdGVzdCBtb2R1bGUu CgpUaGlzIHRlc3RpbmcgbW9kdWxlIGFpbXMgdG8gYWNoaWV2ZSB0aGUgZm9sbG93aW5nIGZvdXIg dGVzdGluZyBnb2FscyBmb3IgdGhlIERETCBkZXBhcnNlcjoKMS4gVGVzdCB0aGF0IHRoZSBnZW5l cmF0ZWQgSlNPTiBibG9iIGlzIGV4cGVjdGVkIHVzaW5nIFNRTCB0ZXN0cy4KMi4gVGVzdCB0aGF0 IHRoZSByZS1mb3JtZWQgRERMIGNvbW1hbmQgaXMgZXhwZWN0ZWQgdXNpbmcgU1FMIHRlc3RzLgoz LiBUZXN0IHRoYXQgdGhlIHJlLWZvcm1lZCBEREwgY29tbWFuZCBoYXMgdGhlIHNhbWUgZWZmZWN0 IGFzIHRoZSBvcmlnaW5hbCBjb21tYW5kIGJ5IGNvbXBhcmluZwogICB0aGUgcmVzdWx0cyBvZiBw Z19kdW1wLCB1c2luZyB0aGUgU1FMIHRlc3RzIGluIDEgYW5kIDIuCjQuIFRlc3QgdGhhdCBuZXcg RERMIHN5bnRheCBpcyBoYW5kbGVkIGJ5IHRoZSBEREwgZGVwYXJzZXIgYnkgY2FwdHVyaW5nIGFu ZCBkZXBhcmluZyBEREwgY29tbWFuZHMKICAgcmFuIGJ5IHBnX3JlZ3Jlc3MuCgoxIGFuZCAyIGlz IHRlc3RlZCB3aXRoIFNRTCB0ZXN0cywgYnkgcHJpbnRpbmcgdGhlIGRlcGFyc2VkIEpTT04gYmxv YiBhbmQgdGhlIHJlLWZvcm1lZCBjb21tYW5kLgoKR29hbCAzIGlzIHRlc3RlZCB3aXRoIFRBUCBm cmFtZXdvcmsgaW4gdC8wMDFfY29tcGFyZV9kdW1wZWRfcmVzdWx0cy5wbAoKR29hbCA0IGlzIHRl c3RlZCB3aXRoIFRBUCBmcmFtZXdvcmsgYW5kIHBnX3JlZ3Jlc3MgaW4gMDAyX3JlZ3Jlc3NfdGVz dHMucGwsIHRoZSBleGVjdXRpb24gaXMgY3VycmVudGx5IGNvbW1lbnRlZCBvdXQgYmVjYXVzZSBp dCB3aWxsIGZhaWwgZHVlIHVuaW1wbGVtZW50ZWQgY29tbWFuZHMgaW4gdGhlIERETCBkZXBhcnNl ci4KLS0tCiBzcmMvdGVzdC9tb2R1bGVzL01ha2VmaWxlICAgICAgICAgICAgICAgICAgICAgfCAg IDEgKwogLi4uL3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcy8uZ2l0aWdub3JlICAgICAgIHwgICA0 ICsKIC4uLi9tb2R1bGVzL3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcy9NYWtlZmlsZSB8ICA0MyAr KysrCiAuLi4vdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzL1JFQURNRS5tZCAgICAgICAgfCAgMjIg KysKIC4uLi9leHBlY3RlZC9jcmVhdGVfZXh0ZW5zaW9uLm91dCAgICAgICAgICAgICB8ICAgNiAr CiAuLi4vZXhwZWN0ZWQvY3JlYXRlX3NjaGVtYS5vdXQgICAgICAgICAgICAgICAgfCAgMjIgKysK IC4uLi9leHBlY3RlZC9jcmVhdGVfdGFibGUub3V0ICAgICAgICAgICAgICAgICB8ICAzNiArKysK IC4uLi9leHBlY3RlZC90ZXN0X2RkbF9kZXBhcnNlLm91dCAgICAgICAgICAgICB8ICAxOCArKwog Li4uL3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcy9tZXNvbi5idWlsZCAgICAgIHwgIDQyICsrKysK IC4uLi9zcWwvY3JlYXRlX2V4dGVuc2lvbi5zcWwgICAgICAgICAgICAgICAgICB8ICAgNSArCiAu Li4vc3FsL2NyZWF0ZV9zY2hlbWEuc3FsICAgICAgICAgICAgICAgICAgICAgfCAgMTYgKysKIC4u Li9zcWwvY3JlYXRlX3RhYmxlLnNxbCAgICAgICAgICAgICAgICAgICAgICB8ICAxNiArKwogLi4u L3NxbC90ZXN0X2RkbF9kZXBhcnNlLnNxbCAgICAgICAgICAgICAgICAgIHwgIDIwICsrCiAuLi4v dC8wMDFfY29tcGFyZV9kdW1wZWRfcmVzdWx0cy5wbCAgICAgICAgICAgfCAxODEgKysrKysrKysr KysrKysrCiAuLi4vdC8wMDJfcmVncmVzc190ZXN0cy5wbCAgICAgICAgICAgICAgICAgICAgfCAy MDcgKysrKysrKysrKysrKysrKysrCiAuLi4vdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzLS0xLjAu c3FsICAgICAgICAgfCAgIDkgKwogLi4uL3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcy5jICAgICAg ICAgICAgICAgIHwgIDU5ICsrKysrCiAuLi4vdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzLmNvbnRy b2wgICAgICAgICAgfCAgIDQgKwogMTggZmlsZXMgY2hhbmdlZCwgNzExIGluc2VydGlvbnMoKykK IGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvdGVzdC9tb2R1bGVzL3Rlc3RfZGRsX2RlcGFyc2VfcmVn cmVzcy8uZ2l0aWdub3JlCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL3Rlc3QvbW9kdWxlcy90ZXN0 X2RkbF9kZXBhcnNlX3JlZ3Jlc3MvTWFrZWZpbGUKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvdGVz dC9tb2R1bGVzL3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcy9SRUFETUUubWQKIGNyZWF0ZSBtb2Rl IDEwMDY0NCBzcmMvdGVzdC9tb2R1bGVzL3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcy9leHBlY3Rl ZC9jcmVhdGVfZXh0ZW5zaW9uLm91dAogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy90ZXN0L21vZHVs ZXMvdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzL2V4cGVjdGVkL2NyZWF0ZV9zY2hlbWEub3V0CiBj cmVhdGUgbW9kZSAxMDA2NDQgc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jl c3MvZXhwZWN0ZWQvY3JlYXRlX3RhYmxlLm91dAogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy90ZXN0 L21vZHVsZXMvdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzL2V4cGVjdGVkL3Rlc3RfZGRsX2RlcGFy c2Uub3V0CiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2RkbF9kZXBh cnNlX3JlZ3Jlc3MvbWVzb24uYnVpbGQKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvdGVzdC9tb2R1 bGVzL3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcy9zcWwvY3JlYXRlX2V4dGVuc2lvbi5zcWwKIGNy ZWF0ZSBtb2RlIDEwMDY0NCBzcmMvdGVzdC9tb2R1bGVzL3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVz cy9zcWwvY3JlYXRlX3NjaGVtYS5zcWwKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvdGVzdC9tb2R1 bGVzL3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcy9zcWwvY3JlYXRlX3RhYmxlLnNxbAogY3JlYXRl IG1vZGUgMTAwNjQ0IHNyYy90ZXN0L21vZHVsZXMvdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzL3Nx bC90ZXN0X2RkbF9kZXBhcnNlLnNxbAogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy90ZXN0L21vZHVs ZXMvdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzL3QvMDAxX2NvbXBhcmVfZHVtcGVkX3Jlc3VsdHMu cGwKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvdGVzdC9tb2R1bGVzL3Rlc3RfZGRsX2RlcGFyc2Vf cmVncmVzcy90LzAwMl9yZWdyZXNzX3Rlc3RzLnBsCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL3Rl c3QvbW9kdWxlcy90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3MvdGVzdF9kZGxfZGVwYXJzZV9yZWdy ZXNzLS0xLjAuc3FsCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2Rk bF9kZXBhcnNlX3JlZ3Jlc3MvdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzLmMKIGNyZWF0ZSBtb2Rl IDEwMDY0NCBzcmMvdGVzdC9tb2R1bGVzL3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcy90ZXN0X2Rk bF9kZXBhcnNlX3JlZ3Jlc3MuY29udHJvbAoKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVsZXMv TWFrZWZpbGUgYi9zcmMvdGVzdC9tb2R1bGVzL01ha2VmaWxlCmluZGV4IGM2MjljYmUzODMuLmMy NzJjNjRhMjAgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L21vZHVsZXMvTWFrZWZpbGUKKysrIGIvc3Jj L3Rlc3QvbW9kdWxlcy9NYWtlZmlsZQpAQCAtMTgsNiArMTgsNyBAQCBTVUJESVJTID0gXAogCQkg IHRlc3RfY29weV9jYWxsYmFja3MgXAogCQkgIHRlc3RfY3VzdG9tX3JtZ3JzIFwKIAkJICB0ZXN0 X2RkbF9kZXBhcnNlIFwKKwkJICB0ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3MgXAogCQkgIHRlc3Rf ZXh0ZW5zaW9ucyBcCiAJCSAgdGVzdF9naW5wb3N0aW5nbGlzdCBcCiAJCSAgdGVzdF9pbnRlZ2Vy c2V0IFwKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9kZGxfZGVwYXJzZV9yZWdy ZXNzLy5naXRpZ25vcmUgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVz cy8uZ2l0aWdub3JlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLjVkY2Iz ZmY5NzIKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfZGRsX2RlcGFy c2VfcmVncmVzcy8uZ2l0aWdub3JlCkBAIC0wLDAgKzEsNCBAQAorIyBHZW5lcmF0ZWQgc3ViZGly ZWN0b3JpZXMKKy9sb2cvCisvcmVzdWx0cy8KKy90bXBfY2hlY2svCmRpZmYgLS1naXQgYS9zcmMv dGVzdC9tb2R1bGVzL3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcy9NYWtlZmlsZSBiL3NyYy90ZXN0 L21vZHVsZXMvdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUg MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLjM4ZTIwN2FiNjIKLS0tIC9kZXYvbnVsbAorKysgYi9z cmMvdGVzdC9tb2R1bGVzL3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcy9NYWtlZmlsZQpAQCAtMCww ICsxLDQzIEBACisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIworIyBNYWtlZmlsZSBmb3Igc3JjL3Rlc3Qv bW9kdWxlcy90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3MKKyMKKyMgUG9ydGlvbnMgQ29weXJpZ2h0 IChjKSAxOTk2LTIwMjIsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisjIFBv cnRpb25zIENvcHlyaWdodCAoYykgMTk5NCwgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBD YWxpZm9ybmlhCisjCisjIHNyYy90ZXN0L21vZHVsZXMvdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNz L01ha2VmaWxlCisjCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisKK01PRFVMRVMgPSB0ZXN0X2RkbF9k ZXBhcnNlX3JlZ3Jlc3MKK1BHRklMRURFU0MgPSAidGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzIC0g cmVncmVzc2lvbiB0ZXN0aW5nIGZvciBEREwgZGVwYXJzaW5nIgorCitFWFRFTlNJT04gPSB0ZXN0 X2RkbF9kZXBhcnNlX3JlZ3Jlc3MKK0RBVEEgPSB0ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3MtLTEu MC5zcWwKKworIyB0ZXN0X2RkbF9kZXBhcnNlIG11c3QgYmUgZmlyc3QKK1JFR1JFU1MgPSB0ZXN0 X2RkbF9kZXBhcnNlIFwKKwljcmVhdGVfZXh0ZW5zaW9uIFwKKwljcmVhdGVfc2NoZW1hIFwKKwlj cmVhdGVfdGFibGUKKworZXhwb3J0IFJFR1JFU1MKKworRVhUUkFfSU5TVEFMTCA9IGNvbnRyaWIv cGdfc3RhdF9zdGF0ZW1lbnRzCisKK1RBUF9URVNUUyA9IDEKKworaWZkZWYgVVNFX1BHWFMKK1BH X0NPTkZJRyA9IHBnX2NvbmZpZworUEdYUyA6PSAkKHNoZWxsICQoUEdfQ09ORklHKSAtLXBneHMp CitpbmNsdWRlICQoUEdYUykKK2Vsc2UKK3N1YmRpciA9IHNyYy90ZXN0L21vZHVsZXMvdGVzdF9k ZGxfZGVwYXJzZV9yZWdyZXNzCit0b3BfYnVpbGRkaXIgPSAuLi8uLi8uLi8uLgoraW5jbHVkZSAk KHRvcF9idWlsZGRpcikvc3JjL01ha2VmaWxlLmdsb2JhbAoraW5jbHVkZSAkKHRvcF9zcmNkaXIp L2NvbnRyaWIvY29udHJpYi1nbG9iYWwubWsKK2VuZGlmCisKK1JFR1JFU1NfU0hMSUI9JChhYnNf dG9wX2J1aWxkZGlyKS9zcmMvdGVzdC9yZWdyZXNzL3JlZ3Jlc3MkKERMU1VGRklYKQorZXhwb3J0 IFJFR1JFU1NfU0hMSUIKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9kZGxfZGVw YXJzZV9yZWdyZXNzL1JFQURNRS5tZCBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9kZGxfZGVwYXJz ZV9yZWdyZXNzL1JFQURNRS5tZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw Li5jYzI1MTk4OTVhCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2Rk bF9kZXBhcnNlX3JlZ3Jlc3MvUkVBRE1FLm1kCkBAIC0wLDAgKzEsMjIgQEAKKyMgVGVzdGluZyBo YXJuZXNzIGZvciBEREwgZGVwYXJzZXIKKworIyMgVGVzdGluZyBnb2FscworCitEREwgRGVwYXJz ZXIgcHJvdmlkZXMgdGhlIGFiaWxpdHkgdG8gZW5jb2RlIHRoZSBvcmlnaW5hbCBEREwgY29tbWFu ZCB0byBhIEpTT04gc3RyaW5nLCB0aGVuIGRlY29kZSBpdCB0byBhIGZ1bGx5IHNjaGVtYS1xdWFs aWZpZWQgRERMIGNvbW1hbmQgd2hpY2ggaXMgc3VwcG9zZWQgdG8gaGF2ZSB0aGUgc2FtZSBlZmZl Y3QgYXMgdGhlIG9yaWdpbmFsIGNvbW1hbmQuIFRoaXMgdGVzdGluZyBtb2R1bGUgYWltcyB0byBh Y2hpZXZlIHRoZSBmb2xsb3dpbmcgZm91ciB0ZXN0aW5nIGZvciB0aGUgRERMIGRlcGFyc2VyOgor CisxLiBUZXN0IHRoYXQgdGhlIGdlbmVyYXRlZCBKU09OIGJsb2IgaXMgZXhwZWN0ZWQgdXNpbmcg U1FMIHRlc3RzLgorMi4gVGVzdCB0aGF0IHRoZSByZS1mb3JtZWQgRERMIGNvbW1hbmQgaXMgZXhw ZWN0ZWQgdXNpbmcgU1FMIHRlc3RzLgorMy4gVGVzdAl0aGF0IHRoZSByZS1mb3JtZWQgRERMIGNv bW1hbmQgaGFzIHRoZSBzYW1lIGVmZmVjdCBhcyB0aGUgb3JpZ2luYWwgY29tbWFuZAorICAgYnkg Y29tcGFyaW5nCXRoZSByZXN1bHRzIG9mIHBnX2R1bXAsCXVzaW5nIHRoZSBTUUwgdGVzdHMgaW4g MSBhbmQgMi4KKzQuIFRlc3QJdGhhdCBuZXcgRERMIHN5bnRheCBpcyBoYW5kbGVkIGJ5IHRoZSBE REwgZGVwYXJzZXIgYnkgY2FwdHVyaW5nIGFuZCBkZXBhcmluZworICAgRERMIGNvbW1hbmRzCXJh biBieSBwZ19yZWdyZXNzLgorCisxIGFuZCAyIGlzIHRlc3RlZCB3aXRoIFNRTCB0ZXN0cywgYnkg bm90aWNpbmcgdGhlIGRlcGFyc2VkIEpTT04gYmxvYiBhbmQgdGhlIHJlLWZvcm1lZCBjb21tYW5k LgorCitHb2FsIDMgaXMgdGVzdGVkIHdpdGggVEFQIGZyYW1ld29yayBpbiB0LzAwMV9jb21wYXJl X2R1bXBlZF9yZXN1bHRzLnBsCisKK0dvYWwgNCBpcyB0ZXN0ZWQgd2l0aCBUQVAgZnJhbWV3b3Jr IGFuZCBwZ19yZWdyZXNzIGluIDAwMl9yZWdyZXNzX3Rlc3RzLnBsCisKKyMjIFVzYWdlCisKK1J1 biBgbWFrZSBjaGVja2AsIGl0IHdpbGwgcnVuIHRoZSBTUUwgdGVzdHMgZmlyc3QsIHRoZW4gaXQg d2lsbCBydW4gdGhlIFRBUCB0ZXN0cy4gVGhlIGV4ZWN1dGlvbiBvZiAwMDJfcmVncmVzc190ZXN0 cy5wbCBpcyBjdXJyZW50bHkgY29tbWVudGVkIG91dCBiZWNhdXNlIGl0IHdpbGwgZmFpbCBkdWUg dG8gdW5pbXBsZW1lbnRlZCBjb21tYW5kcyBpbiB0aGUgRERMIGRlcGFyc2VyLgpkaWZmIC0tZ2l0 IGEvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3MvZXhwZWN0ZWQvY3Jl YXRlX2V4dGVuc2lvbi5vdXQgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfZGRsX2RlcGFyc2VfcmVn cmVzcy9leHBlY3RlZC9jcmVhdGVfZXh0ZW5zaW9uLm91dApuZXcgZmlsZSBtb2RlIDEwMDY0NApp bmRleCAwMDAwMDAwMDAwLi4wNmNjYzYyYmE5Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3Qv bW9kdWxlcy90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3MvZXhwZWN0ZWQvY3JlYXRlX2V4dGVuc2lv bi5vdXQKQEAgLTAsMCArMSw2IEBACistLS0KKy0tLSBDUkVBVEVfRVhURU5TSU9OCistLS0KK0NS RUFURSBFWFRFTlNJT04gcGdfc3RhdF9zdGF0ZW1lbnRzOworTk9USUNFOiAgZGVwYXJzZWQganNv bjogeyJmbXQiOiAiQ1JFQVRFIEVYVEVOU0lPTiAle2lmX25vdF9leGlzdHN9cyAle25hbWV9SSAl e29wdGlvbnM6IH1zIiwgIm5hbWUiOiAicGdfc3RhdF9zdGF0ZW1lbnRzIiwgIm9wdGlvbnMiOiBb eyJmbXQiOiAiU0NIRU1BICV7c2NoZW1hfUkiLCAidHlwZSI6ICJzY2hlbWEiLCAic2NoZW1hIjog InB1YmxpYyJ9XSwgImlmX25vdF9leGlzdHMiOiAiIn0KK05PVElDRTogIHJlLWZvcm1lZCBjb21t YW5kOiBDUkVBVEUgRVhURU5TSU9OICBwZ19zdGF0X3N0YXRlbWVudHMgU0NIRU1BIHB1YmxpYwpk aWZmIC0tZ2l0IGEvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3MvZXhw ZWN0ZWQvY3JlYXRlX3NjaGVtYS5vdXQgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfZGRsX2RlcGFy c2VfcmVncmVzcy9leHBlY3RlZC9jcmVhdGVfc2NoZW1hLm91dApuZXcgZmlsZSBtb2RlIDEwMDY0 NAppbmRleCAwMDAwMDAwMDAwLi4xZTA5ZGE1MTcwCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rl c3QvbW9kdWxlcy90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3MvZXhwZWN0ZWQvY3JlYXRlX3NjaGVt YS5vdXQKQEAgLTAsMCArMSwyMiBAQAorLS0KKy0tIENSRUFURV9TQ0hFTUEKKy0tCitDUkVBVEUg U0NIRU1BIGZvbzsKK05PVElDRTogIGRlcGFyc2VkIGpzb246IHsiZm10IjogIkNSRUFURSBTQ0hF TUEgJXtpZl9ub3RfZXhpc3RzfXMgJXtuYW1lfUkgJXthdXRob3JpemF0aW9ufXMiLCAibmFtZSI6 ICJmb28iLCAiYXV0aG9yaXphdGlvbiI6IHsiZm10IjogIkFVVEhPUklaQVRJT04gJXthdXRob3Jp emF0aW9uX3JvbGV9SSIsICJwcmVzZW50IjogZmFsc2UsICJhdXRob3JpemF0aW9uX3JvbGUiOiBu dWxsfSwgImlmX25vdF9leGlzdHMiOiAiIn0KK05PVElDRTogIHJlLWZvcm1lZCBjb21tYW5kOiBD UkVBVEUgU0NIRU1BICBmb28gCitDUkVBVEUgU0NIRU1BIElGIE5PVCBFWElTVFMgYmFyOworTk9U SUNFOiAgZGVwYXJzZWQganNvbjogeyJmbXQiOiAiQ1JFQVRFIFNDSEVNQSAle2lmX25vdF9leGlz dHN9cyAle25hbWV9SSAle2F1dGhvcml6YXRpb259cyIsICJuYW1lIjogImJhciIsICJhdXRob3Jp emF0aW9uIjogeyJmbXQiOiAiQVVUSE9SSVpBVElPTiAle2F1dGhvcml6YXRpb25fcm9sZX1JIiwg InByZXNlbnQiOiBmYWxzZSwgImF1dGhvcml6YXRpb25fcm9sZSI6IG51bGx9LCAiaWZfbm90X2V4 aXN0cyI6ICJJRiBOT1QgRVhJU1RTIn0KK05PVElDRTogIHJlLWZvcm1lZCBjb21tYW5kOiBDUkVB VEUgU0NIRU1BIElGIE5PVCBFWElTVFMgYmFyIAorQ1JFQVRFIFNDSEVNQSBiYXo7CitOT1RJQ0U6 ICBkZXBhcnNlZCBqc29uOiB7ImZtdCI6ICJDUkVBVEUgU0NIRU1BICV7aWZfbm90X2V4aXN0c31z ICV7bmFtZX1JICV7YXV0aG9yaXphdGlvbn1zIiwgIm5hbWUiOiAiYmF6IiwgImF1dGhvcml6YXRp b24iOiB7ImZtdCI6ICJBVVRIT1JJWkFUSU9OICV7YXV0aG9yaXphdGlvbl9yb2xlfUkiLCAicHJl c2VudCI6IGZhbHNlLCAiYXV0aG9yaXphdGlvbl9yb2xlIjogbnVsbH0sICJpZl9ub3RfZXhpc3Rz IjogIiJ9CitOT1RJQ0U6ICByZS1mb3JtZWQgY29tbWFuZDogQ1JFQVRFIFNDSEVNQSAgYmF6IAor LS0gV2lsbCBub3QgYmUgY3JlYXRlZCwgYW5kIHdpbGwgbm90IGJlIGhhbmRsZWQgYnkgdGhlCist LSBldmVudCB0cmlnZ2VyCitDUkVBVEUgU0NIRU1BIElGIE5PVCBFWElTVFMgYmF6OworTk9USUNF OiAgc2NoZW1hICJiYXoiIGFscmVhZHkgZXhpc3RzLCBza2lwcGluZworQ1JFQVRFIFNDSEVNQSBl bGVtZW50X3Rlc3QKKyAgQ1JFQVRFIFRBQkxFIGZvbyAoaWQgaW50KQorTk9USUNFOiAgZGVwYXJz ZWQganNvbjogeyJmbXQiOiAiQ1JFQVRFIFNDSEVNQSAle2lmX25vdF9leGlzdHN9cyAle25hbWV9 SSAle2F1dGhvcml6YXRpb259cyIsICJuYW1lIjogImVsZW1lbnRfdGVzdCIsICJhdXRob3JpemF0 aW9uIjogeyJmbXQiOiAiQVVUSE9SSVpBVElPTiAle2F1dGhvcml6YXRpb25fcm9sZX1JIiwgInBy ZXNlbnQiOiBmYWxzZSwgImF1dGhvcml6YXRpb25fcm9sZSI6IG51bGx9LCAiaWZfbm90X2V4aXN0 cyI6ICIifQorTk9USUNFOiAgcmUtZm9ybWVkIGNvbW1hbmQ6IENSRUFURSBTQ0hFTUEgIGVsZW1l bnRfdGVzdCAKK05PVElDRTogIGRlcGFyc2VkIGpzb246IHsiZm10IjogIkNSRUFURSAle3BlcnNp c3RlbmNlfXMgVEFCTEUgJXtpZl9ub3RfZXhpc3RzfXMgJXtpZGVudGl0eX1EICgle3RhYmxlX2Vs ZW1lbnRzOiwgfXMpICV7aW5oZXJpdHN9cyAle3RhYmxlc3BhY2V9cyAle29uX2NvbW1pdH1zICV7 cGFydGl0aW9uX2J5fXMgJXthY2Nlc3NfbWV0aG9kfXMgJXt3aXRoX2NsYXVzZX1zIiwgImlkZW50 aXR5IjogeyJvYmpuYW1lIjogImZvbyIsICJzY2hlbWFuYW1lIjogImVsZW1lbnRfdGVzdCJ9LCAi aW5oZXJpdHMiOiB7ImZtdCI6ICJJTkhFUklUUyAoJXtwYXJlbnRzOiwgfUQpIiwgInBhcmVudHMi OiBudWxsLCAicHJlc2VudCI6IGZhbHNlfSwgIm9uX2NvbW1pdCI6IHsiZm10IjogIk9OIENPTU1J VCAle29uX2NvbW1pdF92YWx1ZX1zIiwgInByZXNlbnQiOiBmYWxzZSwgIm9uX2NvbW1pdF92YWx1 ZSI6IG51bGx9LCAidGFibGVzcGFjZSI6IHsiZm10IjogIlRBQkxFU1BBQ0UgJXt0YWJsZXNwYWNl fUkiLCAicHJlc2VudCI6IGZhbHNlLCAidGFibGVzcGFjZSI6IG51bGx9LCAicGVyc2lzdGVuY2Ui OiAiIiwgIndpdGhfY2xhdXNlIjogeyJmbXQiOiAiV0lUSCIsICJwcmVzZW50IjogZmFsc2V9LCAi cGFydGl0aW9uX2J5IjogeyJmbXQiOiAiUEFSVElUSU9OIEJZICV7ZGVmaW5pdGlvbn1zIiwgInBy ZXNlbnQiOiBmYWxzZSwgImRlZmluaXRpb24iOiBudWxsfSwgImFjY2Vzc19tZXRob2QiOiB7ImZt dCI6ICJVU0lORyAle2FjY2Vzc19tZXRob2R9SSIsICJwcmVzZW50IjogZmFsc2UsICJhY2Nlc3Nf bWV0aG9kIjogbnVsbH0sICJpZl9ub3RfZXhpc3RzIjogIiIsICJ0YWJsZV9lbGVtZW50cyI6IFt7 ImZtdCI6ICIle25hbWV9SSAle2NvbHR5cGV9VCBTVE9SQUdFICV7Y29sc3RvcmFnZX1zICV7Y29t cHJlc3Npb259cyAle2NvbGxhdGlvbn1zICV7bm90X251bGx9cyAle2RlZmF1bHR9cyAle2dlbmVy YXRlZF9jb2x1bW59cyIsICJuYW1lIjogImlkIiwgInR5cGUiOiAiY29sdW1uIiwgImNvbHR5cGUi OiB7InR5cG1vZCI6ICIiLCAidHlwYXJyYXkiOiBmYWxzZSwgInR5cGVuYW1lIjogImludDQiLCAi c2NoZW1hbmFtZSI6ICJwZ19jYXRhbG9nIn0sICJkZWZhdWx0IjogeyJmbXQiOiAiREVGQVVMVCIs ICJwcmVzZW50IjogZmFsc2V9LCAibm90X251bGwiOiAiIiwgImNvbGxhdGlvbiI6IHsiZm10Ijog IkNPTExBVEUiLCAicHJlc2VudCI6IGZhbHNlfSwgImNvbHN0b3JhZ2UiOiAicGxhaW4iLCAiY29t cHJlc3Npb24iOiB7ImZtdCI6ICJDT01QUkVTU0lPTiAle2NvbXByZXNzaW9uX21ldGhvZH1JIiwg InByZXNlbnQiOiBmYWxzZSwgImNvbXByZXNzaW9uX21ldGhvZCI6IG51bGx9LCAiZ2VuZXJhdGVk X2NvbHVtbiI6IHsiZm10IjogIkdFTkVSQVRFRCBBTFdBWVMgQVMiLCAicHJlc2VudCI6IGZhbHNl fX1dfQorTk9USUNFOiAgcmUtZm9ybWVkIGNvbW1hbmQ6IENSRUFURSAgVEFCTEUgIGVsZW1lbnRf dGVzdC5mb28gKGlkIHBnX2NhdGFsb2cuaW50NCBTVE9SQUdFIHBsYWluICAgICApICAgICAgCmRp ZmYgLS1naXQgYS9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcy9leHBl Y3RlZC9jcmVhdGVfdGFibGUub3V0IGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2RkbF9kZXBhcnNl X3JlZ3Jlc3MvZXhwZWN0ZWQvY3JlYXRlX3RhYmxlLm91dApuZXcgZmlsZSBtb2RlIDEwMDY0NApp bmRleCAwMDAwMDAwMDAwLi45ZWVhYTFjY2MxCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3Qv bW9kdWxlcy90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3MvZXhwZWN0ZWQvY3JlYXRlX3RhYmxlLm91 dApAQCAtMCwwICsxLDM2IEBACitDUkVBVEUgVEFCTEUgc2ltcGxlX3RhYmxlKAorICAgIGlkIGlu dCwKKyAgICBuYW1lIHZhcmNoYXIoNSkKKyk7CitOT1RJQ0U6ICBkZXBhcnNlZCBqc29uOiB7ImZt dCI6ICJDUkVBVEUgJXtwZXJzaXN0ZW5jZX1zIFRBQkxFICV7aWZfbm90X2V4aXN0c31zICV7aWRl bnRpdHl9RCAoJXt0YWJsZV9lbGVtZW50czosIH1zKSAle2luaGVyaXRzfXMgJXt0YWJsZXNwYWNl fXMgJXtvbl9jb21taXR9cyAle3BhcnRpdGlvbl9ieX1zICV7YWNjZXNzX21ldGhvZH1zICV7d2l0 aF9jbGF1c2V9cyIsICJpZGVudGl0eSI6IHsib2JqbmFtZSI6ICJzaW1wbGVfdGFibGUiLCAic2No ZW1hbmFtZSI6ICJwdWJsaWMifSwgImluaGVyaXRzIjogeyJmbXQiOiAiSU5IRVJJVFMgKCV7cGFy ZW50czosIH1EKSIsICJwYXJlbnRzIjogbnVsbCwgInByZXNlbnQiOiBmYWxzZX0sICJvbl9jb21t aXQiOiB7ImZtdCI6ICJPTiBDT01NSVQgJXtvbl9jb21taXRfdmFsdWV9cyIsICJwcmVzZW50Ijog ZmFsc2UsICJvbl9jb21taXRfdmFsdWUiOiBudWxsfSwgInRhYmxlc3BhY2UiOiB7ImZtdCI6ICJU QUJMRVNQQUNFICV7dGFibGVzcGFjZX1JIiwgInByZXNlbnQiOiBmYWxzZSwgInRhYmxlc3BhY2Ui OiBudWxsfSwgInBlcnNpc3RlbmNlIjogIiIsICJ3aXRoX2NsYXVzZSI6IHsiZm10IjogIldJVEgi LCAicHJlc2VudCI6IGZhbHNlfSwgInBhcnRpdGlvbl9ieSI6IHsiZm10IjogIlBBUlRJVElPTiBC WSAle2RlZmluaXRpb259cyIsICJwcmVzZW50IjogZmFsc2UsICJkZWZpbml0aW9uIjogbnVsbH0s ICJhY2Nlc3NfbWV0aG9kIjogeyJmbXQiOiAiVVNJTkcgJXthY2Nlc3NfbWV0aG9kfUkiLCAicHJl c2VudCI6IGZhbHNlLCAiYWNjZXNzX21ldGhvZCI6IG51bGx9LCAiaWZfbm90X2V4aXN0cyI6ICIi LCAidGFibGVfZWxlbWVudHMiOiBbeyJmbXQiOiAiJXtuYW1lfUkgJXtjb2x0eXBlfVQgU1RPUkFH RSAle2NvbHN0b3JhZ2V9cyAle2NvbXByZXNzaW9ufXMgJXtjb2xsYXRpb259cyAle25vdF9udWxs fXMgJXtkZWZhdWx0fXMgJXtnZW5lcmF0ZWRfY29sdW1ufXMiLCAibmFtZSI6ICJpZCIsICJ0eXBl IjogImNvbHVtbiIsICJjb2x0eXBlIjogeyJ0eXBtb2QiOiAiIiwgInR5cGFycmF5IjogZmFsc2Us ICJ0eXBlbmFtZSI6ICJpbnQ0IiwgInNjaGVtYW5hbWUiOiAicGdfY2F0YWxvZyJ9LCAiZGVmYXVs dCI6IHsiZm10IjogIkRFRkFVTFQiLCAicHJlc2VudCI6IGZhbHNlfSwgIm5vdF9udWxsIjogIiIs ICJjb2xsYXRpb24iOiB7ImZtdCI6ICJDT0xMQVRFIiwgInByZXNlbnQiOiBmYWxzZX0sICJjb2xz dG9yYWdlIjogInBsYWluIiwgImNvbXByZXNzaW9uIjogeyJmbXQiOiAiQ09NUFJFU1NJT04gJXtj b21wcmVzc2lvbl9tZXRob2R9SSIsICJwcmVzZW50IjogZmFsc2UsICJjb21wcmVzc2lvbl9tZXRo b2QiOiBudWxsfSwgImdlbmVyYXRlZF9jb2x1bW4iOiB7ImZtdCI6ICJHRU5FUkFURUQgQUxXQVlT IEFTIiwgInByZXNlbnQiOiBmYWxzZX19LCB7ImZtdCI6ICIle25hbWV9SSAle2NvbHR5cGV9VCBT VE9SQUdFICV7Y29sc3RvcmFnZX1zICV7Y29tcHJlc3Npb259cyAle2NvbGxhdGlvbn1zICV7bm90 X251bGx9cyAle2RlZmF1bHR9cyAle2dlbmVyYXRlZF9jb2x1bW59cyIsICJuYW1lIjogIm5hbWUi LCAidHlwZSI6ICJjb2x1bW4iLCAiY29sdHlwZSI6IHsidHlwbW9kIjogIig1KSIsICJ0eXBhcnJh eSI6IGZhbHNlLCAidHlwZW5hbWUiOiAidmFyY2hhciIsICJzY2hlbWFuYW1lIjogInBnX2NhdGFs b2cifSwgImRlZmF1bHQiOiB7ImZtdCI6ICJERUZBVUxUIiwgInByZXNlbnQiOiBmYWxzZX0sICJu b3RfbnVsbCI6ICIiLCAiY29sbGF0aW9uIjogeyJmbXQiOiAiQ09MTEFURSAle25hbWV9RCIsICJu YW1lIjogeyJvYmpuYW1lIjogImRlZmF1bHQiLCAic2NoZW1hbmFtZSI6ICJwZ19jYXRhbG9nIn19 LCAiY29sc3RvcmFnZSI6ICJleHRlbmRlZCIsICJjb21wcmVzc2lvbiI6IHsiZm10IjogIkNPTVBS RVNTSU9OICV7Y29tcHJlc3Npb25fbWV0aG9kfUkiLCAicHJlc2VudCI6IGZhbHNlLCAiY29tcHJl c3Npb25fbWV0aG9kIjogbnVsbH0sICJnZW5lcmF0ZWRfY29sdW1uIjogeyJmbXQiOiAiR0VORVJB VEVEIEFMV0FZUyBBUyIsICJwcmVzZW50IjogZmFsc2V9fV19CitOT1RJQ0U6ICByZS1mb3JtZWQg Y29tbWFuZDogQ1JFQVRFICBUQUJMRSAgcHVibGljLnNpbXBsZV90YWJsZSAoaWQgcGdfY2F0YWxv Zy5pbnQ0IFNUT1JBR0UgcGxhaW4gICAgICwgbmFtZSBwZ19jYXRhbG9nLiJ2YXJjaGFyIig1KSBT VE9SQUdFIGV4dGVuZGVkICBDT0xMQVRFIHBnX2NhdGFsb2cuImRlZmF1bHQiICAgKSAgICAgIAor LS0gVGVzdCBDUkVBVEUgSU5ERVggd2l0aCBhbiBJTkNMVURFIENMQVVTRQorQ1JFQVRFIFVOSVFV RSBJTkRFWCBjb3ZlcmluZ19pbmRleCBvbiBzaW1wbGVfdGFibGUgKGlkKSBJTkNMVURFIChuYW1l KTsKK05PVElDRTogIGRlcGFyc2VkIGpzb246IHsiZm10IjogIkNSRUFURSAle3VuaXF1ZX1zIElO REVYICV7Y29uY3VycmVudGx5fXMgJXtpZl9ub3RfZXhpc3RzfXMgJXtuYW1lfUkgT04gJXt0YWJs ZX1EIFVTSU5HICV7aW5kZXhfYW19cyAle2RlZmluaXRpb259cyAle3dpdGh9cyAle3RhYmxlc3Bh Y2V9cyAle3doZXJlX2NsYXVzZX1zIiwgIm5hbWUiOiAiY292ZXJpbmdfaW5kZXgiLCAid2l0aCI6 IHsiZm10IjogIldJVEgiLCAicHJlc2VudCI6IGZhbHNlfSwgInRhYmxlIjogeyJvYmpuYW1lIjog InNpbXBsZV90YWJsZSIsICJzY2hlbWFuYW1lIjogInB1YmxpYyJ9LCAidW5pcXVlIjogIlVOSVFV RSIsICJpbmRleF9hbSI6ICJidHJlZSIsICJkZWZpbml0aW9uIjogIihpZCBwZ19jYXRhbG9nLmlu dDRfb3BzKSBJTkNMVURFIChuYW1lKSIsICJ0YWJsZXNwYWNlIjogeyJmbXQiOiAiVEFCTEVTUEFD RSIsICJwcmVzZW50IjogZmFsc2V9LCAiY29uY3VycmVudGx5IjogIiIsICJ3aGVyZV9jbGF1c2Ui OiB7ImZtdCI6ICJXSEVSRSIsICJwcmVzZW50IjogZmFsc2V9LCAiaWZfbm90X2V4aXN0cyI6ICIi fQorTk9USUNFOiAgcmUtZm9ybWVkIGNvbW1hbmQ6IENSRUFURSBVTklRVUUgSU5ERVggICBjb3Zl cmluZ19pbmRleCBPTiBwdWJsaWMuc2ltcGxlX3RhYmxlIFVTSU5HIGJ0cmVlIChpZCBwZ19jYXRh bG9nLmludDRfb3BzKSBJTkNMVURFIChuYW1lKSAgIAorLS0gVGVzdCBUYWJsZUxpa2VDbGF1c2Ug aXMgaGFuZGxlZCBwcm9wZXJseQorQ1JFQVRFIFRBQkxFIGN0bHQxIChhIHRleHQgQ0hFQ0sgKGxl bmd0aChhKSA+IDIpIFBSSU1BUlkgS0VZLCBiIHRleHQpOworTk9USUNFOiAgZGVwYXJzZWQganNv bjogeyJmbXQiOiAiQ1JFQVRFICV7cGVyc2lzdGVuY2V9cyBUQUJMRSAle2lmX25vdF9leGlzdHN9 cyAle2lkZW50aXR5fUQgKCV7dGFibGVfZWxlbWVudHM6LCB9cykgJXtpbmhlcml0c31zICV7dGFi bGVzcGFjZX1zICV7b25fY29tbWl0fXMgJXtwYXJ0aXRpb25fYnl9cyAle2FjY2Vzc19tZXRob2R9 cyAle3dpdGhfY2xhdXNlfXMiLCAiaWRlbnRpdHkiOiB7Im9iam5hbWUiOiAiY3RsdDEiLCAic2No ZW1hbmFtZSI6ICJwdWJsaWMifSwgImluaGVyaXRzIjogeyJmbXQiOiAiSU5IRVJJVFMgKCV7cGFy ZW50czosIH1EKSIsICJwYXJlbnRzIjogbnVsbCwgInByZXNlbnQiOiBmYWxzZX0sICJvbl9jb21t aXQiOiB7ImZtdCI6ICJPTiBDT01NSVQgJXtvbl9jb21taXRfdmFsdWV9cyIsICJwcmVzZW50Ijog ZmFsc2UsICJvbl9jb21taXRfdmFsdWUiOiBudWxsfSwgInRhYmxlc3BhY2UiOiB7ImZtdCI6ICJU QUJMRVNQQUNFICV7dGFibGVzcGFjZX1JIiwgInByZXNlbnQiOiBmYWxzZSwgInRhYmxlc3BhY2Ui OiBudWxsfSwgInBlcnNpc3RlbmNlIjogIiIsICJ3aXRoX2NsYXVzZSI6IHsiZm10IjogIldJVEgi LCAicHJlc2VudCI6IGZhbHNlfSwgInBhcnRpdGlvbl9ieSI6IHsiZm10IjogIlBBUlRJVElPTiBC WSAle2RlZmluaXRpb259cyIsICJwcmVzZW50IjogZmFsc2UsICJkZWZpbml0aW9uIjogbnVsbH0s ICJhY2Nlc3NfbWV0aG9kIjogeyJmbXQiOiAiVVNJTkcgJXthY2Nlc3NfbWV0aG9kfUkiLCAicHJl c2VudCI6IGZhbHNlLCAiYWNjZXNzX21ldGhvZCI6IG51bGx9LCAiaWZfbm90X2V4aXN0cyI6ICIi LCAidGFibGVfZWxlbWVudHMiOiBbeyJmbXQiOiAiJXtuYW1lfUkgJXtjb2x0eXBlfVQgU1RPUkFH RSAle2NvbHN0b3JhZ2V9cyAle2NvbXByZXNzaW9ufXMgJXtjb2xsYXRpb259cyAle25vdF9udWxs fXMgJXtkZWZhdWx0fXMgJXtnZW5lcmF0ZWRfY29sdW1ufXMiLCAibmFtZSI6ICJhIiwgInR5cGUi OiAiY29sdW1uIiwgImNvbHR5cGUiOiB7InR5cG1vZCI6ICIiLCAidHlwYXJyYXkiOiBmYWxzZSwg InR5cGVuYW1lIjogInRleHQiLCAic2NoZW1hbmFtZSI6ICJwZ19jYXRhbG9nIn0sICJkZWZhdWx0 IjogeyJmbXQiOiAiREVGQVVMVCIsICJwcmVzZW50IjogZmFsc2V9LCAibm90X251bGwiOiAiIiwg ImNvbGxhdGlvbiI6IHsiZm10IjogIkNPTExBVEUgJXtuYW1lfUQiLCAibmFtZSI6IHsib2JqbmFt ZSI6ICJkZWZhdWx0IiwgInNjaGVtYW5hbWUiOiAicGdfY2F0YWxvZyJ9fSwgImNvbHN0b3JhZ2Ui OiAiZXh0ZW5kZWQiLCAiY29tcHJlc3Npb24iOiB7ImZtdCI6ICJDT01QUkVTU0lPTiAle2NvbXBy ZXNzaW9uX21ldGhvZH1JIiwgInByZXNlbnQiOiBmYWxzZSwgImNvbXByZXNzaW9uX21ldGhvZCI6 IG51bGx9LCAiZ2VuZXJhdGVkX2NvbHVtbiI6IHsiZm10IjogIkdFTkVSQVRFRCBBTFdBWVMgQVMi LCAicHJlc2VudCI6IGZhbHNlfX0sIHsiZm10IjogIiV7bmFtZX1JICV7Y29sdHlwZX1UIFNUT1JB R0UgJXtjb2xzdG9yYWdlfXMgJXtjb21wcmVzc2lvbn1zICV7Y29sbGF0aW9ufXMgJXtub3RfbnVs bH1zICV7ZGVmYXVsdH1zICV7Z2VuZXJhdGVkX2NvbHVtbn1zIiwgIm5hbWUiOiAiYiIsICJ0eXBl IjogImNvbHVtbiIsICJjb2x0eXBlIjogeyJ0eXBtb2QiOiAiIiwgInR5cGFycmF5IjogZmFsc2Us ICJ0eXBlbmFtZSI6ICJ0ZXh0IiwgInNjaGVtYW5hbWUiOiAicGdfY2F0YWxvZyJ9LCAiZGVmYXVs dCI6IHsiZm10IjogIkRFRkFVTFQiLCAicHJlc2VudCI6IGZhbHNlfSwgIm5vdF9udWxsIjogIiIs ICJjb2xsYXRpb24iOiB7ImZtdCI6ICJDT0xMQVRFICV7bmFtZX1EIiwgIm5hbWUiOiB7Im9iam5h bWUiOiAiZGVmYXVsdCIsICJzY2hlbWFuYW1lIjogInBnX2NhdGFsb2cifX0sICJjb2xzdG9yYWdl IjogImV4dGVuZGVkIiwgImNvbXByZXNzaW9uIjogeyJmbXQiOiAiQ09NUFJFU1NJT04gJXtjb21w cmVzc2lvbl9tZXRob2R9SSIsICJwcmVzZW50IjogZmFsc2UsICJjb21wcmVzc2lvbl9tZXRob2Qi OiBudWxsfSwgImdlbmVyYXRlZF9jb2x1bW4iOiB7ImZtdCI6ICJHRU5FUkFURUQgQUxXQVlTIEFT IiwgInByZXNlbnQiOiBmYWxzZX19LCB7ImZtdCI6ICJDT05TVFJBSU5UICV7bmFtZX1JICV7ZGVm aW5pdGlvbn1zIiwgIm5hbWUiOiAiY3RsdDFfYV9jaGVjayIsICJ0eXBlIjogImNvbnN0cmFpbnQi LCAiY29udHlwZSI6ICJjaGVjayIsICJkZWZpbml0aW9uIjogIkNIRUNLICgocGdfY2F0YWxvZy5s ZW5ndGgoYSkgT1BFUkFUT1IocGdfY2F0YWxvZy4+KSAyKSkifSwgeyJmbXQiOiAiQ09OU1RSQUlO VCAle25hbWV9SSAle2RlZmluaXRpb259cyIsICJuYW1lIjogImN0bHQxX3BrZXkiLCAidHlwZSI6 ICJjb25zdHJhaW50IiwgImNvbnR5cGUiOiAicHJpbWFyeSBrZXkiLCAiZGVmaW5pdGlvbiI6ICJQ UklNQVJZIEtFWSAoYSkifV19CitOT1RJQ0U6ICByZS1mb3JtZWQgY29tbWFuZDogQ1JFQVRFICBU QUJMRSAgcHVibGljLmN0bHQxIChhIHBnX2NhdGFsb2cudGV4dCBTVE9SQUdFIGV4dGVuZGVkICBD T0xMQVRFIHBnX2NhdGFsb2cuImRlZmF1bHQiICAgLCBiIHBnX2NhdGFsb2cudGV4dCBTVE9SQUdF IGV4dGVuZGVkICBDT0xMQVRFIHBnX2NhdGFsb2cuImRlZmF1bHQiICAgLCBDT05TVFJBSU5UIGN0 bHQxX2FfY2hlY2sgQ0hFQ0sgKChwZ19jYXRhbG9nLmxlbmd0aChhKSBPUEVSQVRPUihwZ19jYXRh bG9nLj4pIDIpKSwgQ09OU1RSQUlOVCBjdGx0MV9wa2V5IFBSSU1BUlkgS0VZIChhKSkgICAgICAK K05PVElDRTogIGRlcGFyc2VkIGpzb246IDxOVUxMPgorTk9USUNFOiAgcmUtZm9ybWVkIGNvbW1h bmQ6IDxOVUxMPgorQUxURVIgVEFCTEUgY3RsdDEgQUxURVIgQ09MVU1OIGEgU0VUIFNUT1JBR0Ug TUFJTjsKK05PVElDRTogIGRlcGFyc2VkIGpzb246IHsiZm10IjogIkFMVEVSICV7b2JqdHlwZX1z ICV7aWRlbnRpdHl9RCAle3N1YmNtZHM6LCB9cyIsICJvYmp0eXBlIjogIlRBQkxFIiwgInN1YmNt ZHMiOiBbeyJmbXQiOiAiQUxURVIgQ09MVU1OICV7Y29sdW1ufUkgU0VUIFNUT1JBR0UgJXtzdG9y YWdlfXMiLCAidHlwZSI6ICJzZXQgc3RvcmFnZSIsICJjb2x1bW4iOiAiYSIsICJzdG9yYWdlIjog Im1haW4ifV0sICJpZGVudGl0eSI6IHsib2JqbmFtZSI6ICJjdGx0MSIsICJzY2hlbWFuYW1lIjog InB1YmxpYyJ9fQorTk9USUNFOiAgcmUtZm9ybWVkIGNvbW1hbmQ6IEFMVEVSIFRBQkxFIHB1Ymxp Yy5jdGx0MSBBTFRFUiBDT0xVTU4gYSBTRVQgU1RPUkFHRSBtYWluCitBTFRFUiBUQUJMRSBjdGx0 MSBBTFRFUiBDT0xVTU4gYiBTRVQgU1RPUkFHRSBFWFRFUk5BTDsKK05PVElDRTogIGRlcGFyc2Vk IGpzb246IHsiZm10IjogIkFMVEVSICV7b2JqdHlwZX1zICV7aWRlbnRpdHl9RCAle3N1YmNtZHM6 LCB9cyIsICJvYmp0eXBlIjogIlRBQkxFIiwgInN1YmNtZHMiOiBbeyJmbXQiOiAiQUxURVIgQ09M VU1OICV7Y29sdW1ufUkgU0VUIFNUT1JBR0UgJXtzdG9yYWdlfXMiLCAidHlwZSI6ICJzZXQgc3Rv cmFnZSIsICJjb2x1bW4iOiAiYiIsICJzdG9yYWdlIjogImV4dGVybmFsIn1dLCAiaWRlbnRpdHki OiB7Im9iam5hbWUiOiAiY3RsdDEiLCAic2NoZW1hbmFtZSI6ICJwdWJsaWMifX0KK05PVElDRTog IHJlLWZvcm1lZCBjb21tYW5kOiBBTFRFUiBUQUJMRSBwdWJsaWMuY3RsdDEgQUxURVIgQ09MVU1O IGIgU0VUIFNUT1JBR0UgZXh0ZXJuYWwKKy0tIFRlc3QgZm9yZWlnbiBrZXkgY29uc3RyYWludCBp cyBoYW5kbGVkIGluIGEgZm9sbG93aW5nIEFMVEVSIFRBQkxFIEFERCBDT05TVFJBSU5UIEZPUkVJ R04gS0VZIFJFRkVSRU5DRVMgc3ViY29tbWFuZAorQ1JFQVRFIFRBQkxFIHByb2R1Y3QgKGlkIGlu dCBQUklNQVJZIEtFWSwgbmFtZSB0ZXh0KTsKK05PVElDRTogIGRlcGFyc2VkIGpzb246IHsiZm10 IjogIkNSRUFURSAle3BlcnNpc3RlbmNlfXMgVEFCTEUgJXtpZl9ub3RfZXhpc3RzfXMgJXtpZGVu dGl0eX1EICgle3RhYmxlX2VsZW1lbnRzOiwgfXMpICV7aW5oZXJpdHN9cyAle3RhYmxlc3BhY2V9 cyAle29uX2NvbW1pdH1zICV7cGFydGl0aW9uX2J5fXMgJXthY2Nlc3NfbWV0aG9kfXMgJXt3aXRo X2NsYXVzZX1zIiwgImlkZW50aXR5IjogeyJvYmpuYW1lIjogInByb2R1Y3QiLCAic2NoZW1hbmFt ZSI6ICJwdWJsaWMifSwgImluaGVyaXRzIjogeyJmbXQiOiAiSU5IRVJJVFMgKCV7cGFyZW50czos IH1EKSIsICJwYXJlbnRzIjogbnVsbCwgInByZXNlbnQiOiBmYWxzZX0sICJvbl9jb21taXQiOiB7 ImZtdCI6ICJPTiBDT01NSVQgJXtvbl9jb21taXRfdmFsdWV9cyIsICJwcmVzZW50IjogZmFsc2Us ICJvbl9jb21taXRfdmFsdWUiOiBudWxsfSwgInRhYmxlc3BhY2UiOiB7ImZtdCI6ICJUQUJMRVNQ QUNFICV7dGFibGVzcGFjZX1JIiwgInByZXNlbnQiOiBmYWxzZSwgInRhYmxlc3BhY2UiOiBudWxs fSwgInBlcnNpc3RlbmNlIjogIiIsICJ3aXRoX2NsYXVzZSI6IHsiZm10IjogIldJVEgiLCAicHJl c2VudCI6IGZhbHNlfSwgInBhcnRpdGlvbl9ieSI6IHsiZm10IjogIlBBUlRJVElPTiBCWSAle2Rl ZmluaXRpb259cyIsICJwcmVzZW50IjogZmFsc2UsICJkZWZpbml0aW9uIjogbnVsbH0sICJhY2Nl c3NfbWV0aG9kIjogeyJmbXQiOiAiVVNJTkcgJXthY2Nlc3NfbWV0aG9kfUkiLCAicHJlc2VudCI6 IGZhbHNlLCAiYWNjZXNzX21ldGhvZCI6IG51bGx9LCAiaWZfbm90X2V4aXN0cyI6ICIiLCAidGFi bGVfZWxlbWVudHMiOiBbeyJmbXQiOiAiJXtuYW1lfUkgJXtjb2x0eXBlfVQgU1RPUkFHRSAle2Nv bHN0b3JhZ2V9cyAle2NvbXByZXNzaW9ufXMgJXtjb2xsYXRpb259cyAle25vdF9udWxsfXMgJXtk ZWZhdWx0fXMgJXtnZW5lcmF0ZWRfY29sdW1ufXMiLCAibmFtZSI6ICJpZCIsICJ0eXBlIjogImNv bHVtbiIsICJjb2x0eXBlIjogeyJ0eXBtb2QiOiAiIiwgInR5cGFycmF5IjogZmFsc2UsICJ0eXBl bmFtZSI6ICJpbnQ0IiwgInNjaGVtYW5hbWUiOiAicGdfY2F0YWxvZyJ9LCAiZGVmYXVsdCI6IHsi Zm10IjogIkRFRkFVTFQiLCAicHJlc2VudCI6IGZhbHNlfSwgIm5vdF9udWxsIjogIiIsICJjb2xs YXRpb24iOiB7ImZtdCI6ICJDT0xMQVRFIiwgInByZXNlbnQiOiBmYWxzZX0sICJjb2xzdG9yYWdl IjogInBsYWluIiwgImNvbXByZXNzaW9uIjogeyJmbXQiOiAiQ09NUFJFU1NJT04gJXtjb21wcmVz c2lvbl9tZXRob2R9SSIsICJwcmVzZW50IjogZmFsc2UsICJjb21wcmVzc2lvbl9tZXRob2QiOiBu dWxsfSwgImdlbmVyYXRlZF9jb2x1bW4iOiB7ImZtdCI6ICJHRU5FUkFURUQgQUxXQVlTIEFTIiwg InByZXNlbnQiOiBmYWxzZX19LCB7ImZtdCI6ICIle25hbWV9SSAle2NvbHR5cGV9VCBTVE9SQUdF ICV7Y29sc3RvcmFnZX1zICV7Y29tcHJlc3Npb259cyAle2NvbGxhdGlvbn1zICV7bm90X251bGx9 cyAle2RlZmF1bHR9cyAle2dlbmVyYXRlZF9jb2x1bW59cyIsICJuYW1lIjogIm5hbWUiLCAidHlw ZSI6ICJjb2x1bW4iLCAiY29sdHlwZSI6IHsidHlwbW9kIjogIiIsICJ0eXBhcnJheSI6IGZhbHNl LCAidHlwZW5hbWUiOiAidGV4dCIsICJzY2hlbWFuYW1lIjogInBnX2NhdGFsb2cifSwgImRlZmF1 bHQiOiB7ImZtdCI6ICJERUZBVUxUIiwgInByZXNlbnQiOiBmYWxzZX0sICJub3RfbnVsbCI6ICIi LCAiY29sbGF0aW9uIjogeyJmbXQiOiAiQ09MTEFURSAle25hbWV9RCIsICJuYW1lIjogeyJvYmpu YW1lIjogImRlZmF1bHQiLCAic2NoZW1hbmFtZSI6ICJwZ19jYXRhbG9nIn19LCAiY29sc3RvcmFn ZSI6ICJleHRlbmRlZCIsICJjb21wcmVzc2lvbiI6IHsiZm10IjogIkNPTVBSRVNTSU9OICV7Y29t cHJlc3Npb25fbWV0aG9kfUkiLCAicHJlc2VudCI6IGZhbHNlLCAiY29tcHJlc3Npb25fbWV0aG9k IjogbnVsbH0sICJnZW5lcmF0ZWRfY29sdW1uIjogeyJmbXQiOiAiR0VORVJBVEVEIEFMV0FZUyBB UyIsICJwcmVzZW50IjogZmFsc2V9fSwgeyJmbXQiOiAiQ09OU1RSQUlOVCAle25hbWV9SSAle2Rl ZmluaXRpb259cyIsICJuYW1lIjogInByb2R1Y3RfcGtleSIsICJ0eXBlIjogImNvbnN0cmFpbnQi LCAiY29udHlwZSI6ICJwcmltYXJ5IGtleSIsICJkZWZpbml0aW9uIjogIlBSSU1BUlkgS0VZIChp ZCkifV19CitOT1RJQ0U6ICByZS1mb3JtZWQgY29tbWFuZDogQ1JFQVRFICBUQUJMRSAgcHVibGlj LnByb2R1Y3QgKGlkIHBnX2NhdGFsb2cuaW50NCBTVE9SQUdFIHBsYWluICAgICAsIG5hbWUgcGdf Y2F0YWxvZy50ZXh0IFNUT1JBR0UgZXh0ZW5kZWQgIENPTExBVEUgcGdfY2F0YWxvZy4iZGVmYXVs dCIgICAsIENPTlNUUkFJTlQgcHJvZHVjdF9wa2V5IFBSSU1BUlkgS0VZIChpZCkpICAgICAgCitO T1RJQ0U6ICBkZXBhcnNlZCBqc29uOiA8TlVMTD4KK05PVElDRTogIHJlLWZvcm1lZCBjb21tYW5k OiA8TlVMTD4KK0NSRUFURSBUQUJMRSBvcmRlcnMgKG9yZGVyX2lkIGludCBQUklNQVJZIEtFWSwg cHJvZHVjdF9pZCBpbnQKK1JFRkVSRU5DRVMgcHJvZHVjdCAoaWQpKTsKK05PVElDRTogIGRlcGFy c2VkIGpzb246IHsiZm10IjogIkNSRUFURSAle3BlcnNpc3RlbmNlfXMgVEFCTEUgJXtpZl9ub3Rf ZXhpc3RzfXMgJXtpZGVudGl0eX1EICgle3RhYmxlX2VsZW1lbnRzOiwgfXMpICV7aW5oZXJpdHN9 cyAle3RhYmxlc3BhY2V9cyAle29uX2NvbW1pdH1zICV7cGFydGl0aW9uX2J5fXMgJXthY2Nlc3Nf bWV0aG9kfXMgJXt3aXRoX2NsYXVzZX1zIiwgImlkZW50aXR5IjogeyJvYmpuYW1lIjogIm9yZGVy cyIsICJzY2hlbWFuYW1lIjogInB1YmxpYyJ9LCAiaW5oZXJpdHMiOiB7ImZtdCI6ICJJTkhFUklU UyAoJXtwYXJlbnRzOiwgfUQpIiwgInBhcmVudHMiOiBudWxsLCAicHJlc2VudCI6IGZhbHNlfSwg Im9uX2NvbW1pdCI6IHsiZm10IjogIk9OIENPTU1JVCAle29uX2NvbW1pdF92YWx1ZX1zIiwgInBy ZXNlbnQiOiBmYWxzZSwgIm9uX2NvbW1pdF92YWx1ZSI6IG51bGx9LCAidGFibGVzcGFjZSI6IHsi Zm10IjogIlRBQkxFU1BBQ0UgJXt0YWJsZXNwYWNlfUkiLCAicHJlc2VudCI6IGZhbHNlLCAidGFi bGVzcGFjZSI6IG51bGx9LCAicGVyc2lzdGVuY2UiOiAiIiwgIndpdGhfY2xhdXNlIjogeyJmbXQi OiAiV0lUSCIsICJwcmVzZW50IjogZmFsc2V9LCAicGFydGl0aW9uX2J5IjogeyJmbXQiOiAiUEFS VElUSU9OIEJZICV7ZGVmaW5pdGlvbn1zIiwgInByZXNlbnQiOiBmYWxzZSwgImRlZmluaXRpb24i OiBudWxsfSwgImFjY2Vzc19tZXRob2QiOiB7ImZtdCI6ICJVU0lORyAle2FjY2Vzc19tZXRob2R9 SSIsICJwcmVzZW50IjogZmFsc2UsICJhY2Nlc3NfbWV0aG9kIjogbnVsbH0sICJpZl9ub3RfZXhp c3RzIjogIiIsICJ0YWJsZV9lbGVtZW50cyI6IFt7ImZtdCI6ICIle25hbWV9SSAle2NvbHR5cGV9 VCBTVE9SQUdFICV7Y29sc3RvcmFnZX1zICV7Y29tcHJlc3Npb259cyAle2NvbGxhdGlvbn1zICV7 bm90X251bGx9cyAle2RlZmF1bHR9cyAle2dlbmVyYXRlZF9jb2x1bW59cyIsICJuYW1lIjogIm9y ZGVyX2lkIiwgInR5cGUiOiAiY29sdW1uIiwgImNvbHR5cGUiOiB7InR5cG1vZCI6ICIiLCAidHlw YXJyYXkiOiBmYWxzZSwgInR5cGVuYW1lIjogImludDQiLCAic2NoZW1hbmFtZSI6ICJwZ19jYXRh bG9nIn0sICJkZWZhdWx0IjogeyJmbXQiOiAiREVGQVVMVCIsICJwcmVzZW50IjogZmFsc2V9LCAi bm90X251bGwiOiAiIiwgImNvbGxhdGlvbiI6IHsiZm10IjogIkNPTExBVEUiLCAicHJlc2VudCI6 IGZhbHNlfSwgImNvbHN0b3JhZ2UiOiAicGxhaW4iLCAiY29tcHJlc3Npb24iOiB7ImZtdCI6ICJD T01QUkVTU0lPTiAle2NvbXByZXNzaW9uX21ldGhvZH1JIiwgInByZXNlbnQiOiBmYWxzZSwgImNv bXByZXNzaW9uX21ldGhvZCI6IG51bGx9LCAiZ2VuZXJhdGVkX2NvbHVtbiI6IHsiZm10IjogIkdF TkVSQVRFRCBBTFdBWVMgQVMiLCAicHJlc2VudCI6IGZhbHNlfX0sIHsiZm10IjogIiV7bmFtZX1J ICV7Y29sdHlwZX1UIFNUT1JBR0UgJXtjb2xzdG9yYWdlfXMgJXtjb21wcmVzc2lvbn1zICV7Y29s bGF0aW9ufXMgJXtub3RfbnVsbH1zICV7ZGVmYXVsdH1zICV7Z2VuZXJhdGVkX2NvbHVtbn1zIiwg Im5hbWUiOiAicHJvZHVjdF9pZCIsICJ0eXBlIjogImNvbHVtbiIsICJjb2x0eXBlIjogeyJ0eXBt b2QiOiAiIiwgInR5cGFycmF5IjogZmFsc2UsICJ0eXBlbmFtZSI6ICJpbnQ0IiwgInNjaGVtYW5h bWUiOiAicGdfY2F0YWxvZyJ9LCAiZGVmYXVsdCI6IHsiZm10IjogIkRFRkFVTFQiLCAicHJlc2Vu dCI6IGZhbHNlfSwgIm5vdF9udWxsIjogIiIsICJjb2xsYXRpb24iOiB7ImZtdCI6ICJDT0xMQVRF IiwgInByZXNlbnQiOiBmYWxzZX0sICJjb2xzdG9yYWdlIjogInBsYWluIiwgImNvbXByZXNzaW9u IjogeyJmbXQiOiAiQ09NUFJFU1NJT04gJXtjb21wcmVzc2lvbl9tZXRob2R9SSIsICJwcmVzZW50 IjogZmFsc2UsICJjb21wcmVzc2lvbl9tZXRob2QiOiBudWxsfSwgImdlbmVyYXRlZF9jb2x1bW4i OiB7ImZtdCI6ICJHRU5FUkFURUQgQUxXQVlTIEFTIiwgInByZXNlbnQiOiBmYWxzZX19LCB7ImZt dCI6ICJDT05TVFJBSU5UICV7bmFtZX1JICV7ZGVmaW5pdGlvbn1zIiwgIm5hbWUiOiAib3JkZXJz X3BrZXkiLCAidHlwZSI6ICJjb25zdHJhaW50IiwgImNvbnR5cGUiOiAicHJpbWFyeSBrZXkiLCAi ZGVmaW5pdGlvbiI6ICJQUklNQVJZIEtFWSAob3JkZXJfaWQpIn1dfQorTk9USUNFOiAgcmUtZm9y bWVkIGNvbW1hbmQ6IENSRUFURSAgVEFCTEUgIHB1YmxpYy5vcmRlcnMgKG9yZGVyX2lkIHBnX2Nh dGFsb2cuaW50NCBTVE9SQUdFIHBsYWluICAgICAsIHByb2R1Y3RfaWQgcGdfY2F0YWxvZy5pbnQ0 IFNUT1JBR0UgcGxhaW4gICAgICwgQ09OU1RSQUlOVCBvcmRlcnNfcGtleSBQUklNQVJZIEtFWSAo b3JkZXJfaWQpKSAgICAgIAorTk9USUNFOiAgZGVwYXJzZWQganNvbjogPE5VTEw+CitOT1RJQ0U6 ICByZS1mb3JtZWQgY29tbWFuZDogPE5VTEw+CitOT1RJQ0U6ICBkZXBhcnNlZCBqc29uOiB7ImZt dCI6ICJBTFRFUiAle29ianR5cGV9cyAle2lkZW50aXR5fUQgJXtzdWJjbWRzOiwgfXMiLCAib2Jq dHlwZSI6ICJUQUJMRSIsICJzdWJjbWRzIjogW3siZm10IjogIkFERCBDT05TVFJBSU5UICV7bmFt ZX1JICV7ZGVmaW5pdGlvbn1zIiwgIm5hbWUiOiAib3JkZXJzX3Byb2R1Y3RfaWRfZmtleSIsICJ0 eXBlIjogImFkZCBjb25zdHJhaW50IiwgImRlZmluaXRpb24iOiAiRk9SRUlHTiBLRVkgKHByb2R1 Y3RfaWQpIFJFRkVSRU5DRVMgcHVibGljLnByb2R1Y3QoaWQpIn1dLCAiaWRlbnRpdHkiOiB7Im9i am5hbWUiOiAib3JkZXJzIiwgInNjaGVtYW5hbWUiOiAicHVibGljIn19CitOT1RJQ0U6ICByZS1m b3JtZWQgY29tbWFuZDogQUxURVIgVEFCTEUgcHVibGljLm9yZGVycyBBREQgQ09OU1RSQUlOVCBv cmRlcnNfcHJvZHVjdF9pZF9ma2V5IEZPUkVJR04gS0VZIChwcm9kdWN0X2lkKSBSRUZFUkVOQ0VT IHB1YmxpYy5wcm9kdWN0KGlkKQpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2Rk bF9kZXBhcnNlX3JlZ3Jlc3MvZXhwZWN0ZWQvdGVzdF9kZGxfZGVwYXJzZS5vdXQgYi9zcmMvdGVz dC9tb2R1bGVzL3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcy9leHBlY3RlZC90ZXN0X2RkbF9kZXBh cnNlLm91dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi5iMGUyYmYyNTFh Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2RkbF9kZXBhcnNlX3Jl Z3Jlc3MvZXhwZWN0ZWQvdGVzdF9kZGxfZGVwYXJzZS5vdXQKQEAgLTAsMCArMSwxOCBAQAorQ1JF QVRFIEVYVEVOU0lPTiB0ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3M7CitDUkVBVEUgT1IgUkVQTEFD RSBGVU5DVElPTiB0ZXN0X2RkbF9kZXBhcnNlKCkKKyAgUkVUVVJOUyBldmVudF90cmlnZ2VyIExB TkdVQUdFIHBscGdzcWwgQVMKKyQkCitERUNMQVJFCisJciByZWNvcmQ7CisJZGVwYXJzZWRfanNv biB0ZXh0OworQkVHSU4KKwlGT1IgciBJTiBTRUxFQ1QgKiBGUk9NIHBnX2V2ZW50X3RyaWdnZXJf ZGRsX2NvbW1hbmRzKCkKKwlMT09QCisJCWRlcGFyc2VkX2pzb24gPSBwZ19jYXRhbG9nLmRkbF9k ZXBhcnNlX3RvX2pzb24oci5jb21tYW5kKTsKKwkJUkFJU0UgTk9USUNFICdkZXBhcnNlZCBqc29u OiAlJywgZGVwYXJzZWRfanNvbjsKKwkJUkFJU0UgTk9USUNFICdyZS1mb3JtZWQgY29tbWFuZDog JScsIHBnX2NhdGFsb2cuZGRsX2RlcGFyc2VfZXhwYW5kX2NvbW1hbmQoZGVwYXJzZWRfanNvbik7 CisJRU5EIExPT1A7CitFTkQ7CiskJDsKK0NSRUFURSBFVkVOVCBUUklHR0VSIHRlc3RfZGRsX2Rl cGFyc2UKK09OIGRkbF9jb21tYW5kX2VuZCBFWEVDVVRFIFBST0NFRFVSRSB0ZXN0X2RkbF9kZXBh cnNlKCk7CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfZGRsX2RlcGFyc2VfcmVn cmVzcy9tZXNvbi5idWlsZCBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9kZGxfZGVwYXJzZV9yZWdy ZXNzL21lc29uLmJ1aWxkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLjdh MTUyYTIzZTIKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfZGRsX2Rl cGFyc2VfcmVncmVzcy9tZXNvbi5idWlsZApAQCAtMCwwICsxLDQyIEBACisjIEZJWE1FOiBwcmV2 ZW50IGluc3RhbGwgZHVyaW5nIG1haW4gaW5zdGFsbCwgYnV0IG5vdCBkdXJpbmcgdGVzdCA6Lwor Cit0ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3Nfc291cmNlcyA9IGZpbGVzKAorICAndGVzdF9kZGxf ZGVwYXJzZV9yZWdyZXNzLmMnLAorKQorCitpZiBob3N0X3N5c3RlbSA9PSAnd2luZG93cycKKyAg dGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzX3NvdXJjZXMgKz0gcmNfbGliX2dlbi5wcm9jZXNzKHdp bjMydmVyX3JjLCBleHRyYV9hcmdzOiBbCisgICAgJy0tTkFNRScsICd0ZXN0X2RkbF9kZXBhcnNl X3JlZ3Jlc3MnLAorICAgICctLUZJTEVERVNDJywgJ3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcyAt IHJlZ3Jlc3Npb24gdGVzdGluZyBmb3IgRERMIGRlcGFyc2luZycsXSkKK2VuZGlmCisKK3Rlc3Rf ZGRsX2RlcGFyc2VfcmVncmVzcyA9IHNoYXJlZF9tb2R1bGUoJ3Rlc3RfZGRsX2RlcGFyc2VfcmVn cmVzcycsCisgIHRlc3RfZGRsX2RlcGFyc2VfcmVncmVzc19zb3VyY2VzLAorICBrd2FyZ3M6IHBn X21vZF9hcmdzLAorKQordGVzdHByZXBfdGFyZ2V0cyArPSB0ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jl c3MKKworaW5zdGFsbF9kYXRhKAorICAndGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzLmNvbnRyb2wn LAorICAndGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzLS0xLjAuc3FsJywKKyAga3dhcmdzOiBjb250 cmliX2RhdGFfYXJncywKKykKKwordGVzdHMgKz0geworICAnbmFtZSc6ICd0ZXN0X2RkbF9kZXBh cnNlX3JlZ3Jlc3MnLAorICAnc2QnOiBtZXNvbi5jdXJyZW50X3NvdXJjZV9kaXIoKSwKKyAgJ2Jk JzogbWVzb24uY3VycmVudF9idWlsZF9kaXIoKSwKKyAgJ3JlZ3Jlc3MnOiB7CisgICAgJ3NxbCc6 IFsKKyAgICAgICd0ZXN0X2RkbF9kZXBhcnNlJywKKyAgICAgICdjcmVhdGVfZXh0ZW5zaW9uJywK KyAgICAgICdjcmVhdGVfc2NoZW1hJywKKyAgICAgICdjcmVhdGVfdGFibGUnLAorICAgIF0sCisg IH0sCisgICd0YXAnOiB7CisgICAgJ3Rlc3RzJzogWworICAgICAgJ3QvMDAxX2NvbXBhcmVfZHVt cGVkX3Jlc3VsdHMucGwnLAorICAgIF0sCisgIH0sCit9CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9t b2R1bGVzL3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcy9zcWwvY3JlYXRlX2V4dGVuc2lvbi5zcWwg Yi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcy9zcWwvY3JlYXRlX2V4 dGVuc2lvbi5zcWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uZDIzZTdm ZDljZQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9kZGxfZGVwYXJz ZV9yZWdyZXNzL3NxbC9jcmVhdGVfZXh0ZW5zaW9uLnNxbApAQCAtMCwwICsxLDUgQEAKKy0tLQor LS0tIENSRUFURV9FWFRFTlNJT04KKy0tLQorCitDUkVBVEUgRVhURU5TSU9OIHBnX3N0YXRfc3Rh dGVtZW50czsKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9kZGxfZGVwYXJzZV9y ZWdyZXNzL3NxbC9jcmVhdGVfc2NoZW1hLnNxbCBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9kZGxf ZGVwYXJzZV9yZWdyZXNzL3NxbC9jcmVhdGVfc2NoZW1hLnNxbApuZXcgZmlsZSBtb2RlIDEwMDY0 NAppbmRleCAwMDAwMDAwMDAwLi4xMGIxM2YwYTU1Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rl c3QvbW9kdWxlcy90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3Mvc3FsL2NyZWF0ZV9zY2hlbWEuc3Fs CkBAIC0wLDAgKzEsMTYgQEAKKy0tCistLSBDUkVBVEVfU0NIRU1BCistLQorCitDUkVBVEUgU0NI RU1BIGZvbzsKKworQ1JFQVRFIFNDSEVNQSBJRiBOT1QgRVhJU1RTIGJhcjsKKworQ1JFQVRFIFND SEVNQSBiYXo7CisKKy0tIFdpbGwgbm90IGJlIGNyZWF0ZWQsIGFuZCB3aWxsIG5vdCBiZSBoYW5k bGVkIGJ5IHRoZQorLS0gZXZlbnQgdHJpZ2dlcgorQ1JFQVRFIFNDSEVNQSBJRiBOT1QgRVhJU1RT IGJhejsKKworQ1JFQVRFIFNDSEVNQSBlbGVtZW50X3Rlc3QKKyAgQ1JFQVRFIFRBQkxFIGZvbyAo aWQgaW50KQpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2RkbF9kZXBhcnNlX3Jl Z3Jlc3Mvc3FsL2NyZWF0ZV90YWJsZS5zcWwgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfZGRsX2Rl cGFyc2VfcmVncmVzcy9zcWwvY3JlYXRlX3RhYmxlLnNxbApuZXcgZmlsZSBtb2RlIDEwMDY0NApp bmRleCAwMDAwMDAwMDAwLi45OTdkMmY1NGZiCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3Qv bW9kdWxlcy90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3Mvc3FsL2NyZWF0ZV90YWJsZS5zcWwKQEAg LTAsMCArMSwxNiBAQAorQ1JFQVRFIFRBQkxFIHNpbXBsZV90YWJsZSgKKyAgICBpZCBpbnQsCisg ICAgbmFtZSB2YXJjaGFyKDUpCispOworLS0gVGVzdCBDUkVBVEUgSU5ERVggd2l0aCBhbiBJTkNM VURFIENMQVVTRQorQ1JFQVRFIFVOSVFVRSBJTkRFWCBjb3ZlcmluZ19pbmRleCBvbiBzaW1wbGVf dGFibGUgKGlkKSBJTkNMVURFIChuYW1lKTsKKworLS0gVGVzdCBUYWJsZUxpa2VDbGF1c2UgaXMg aGFuZGxlZCBwcm9wZXJseQorQ1JFQVRFIFRBQkxFIGN0bHQxIChhIHRleHQgQ0hFQ0sgKGxlbmd0 aChhKSA+IDIpIFBSSU1BUlkgS0VZLCBiIHRleHQpOworQUxURVIgVEFCTEUgY3RsdDEgQUxURVIg Q09MVU1OIGEgU0VUIFNUT1JBR0UgTUFJTjsKK0FMVEVSIFRBQkxFIGN0bHQxIEFMVEVSIENPTFVN TiBiIFNFVCBTVE9SQUdFIEVYVEVSTkFMOworCistLSBUZXN0IGZvcmVpZ24ga2V5IGNvbnN0cmFp bnQgaXMgaGFuZGxlZCBpbiBhIGZvbGxvd2luZyBBTFRFUiBUQUJMRSBBREQgQ09OU1RSQUlOVCBG T1JFSUdOIEtFWSBSRUZFUkVOQ0VTIHN1YmNvbW1hbmQKK0NSRUFURSBUQUJMRSBwcm9kdWN0IChp ZCBpbnQgUFJJTUFSWSBLRVksIG5hbWUgdGV4dCk7CitDUkVBVEUgVEFCTEUgb3JkZXJzIChvcmRl cl9pZCBpbnQgUFJJTUFSWSBLRVksIHByb2R1Y3RfaWQgaW50CitSRUZFUkVOQ0VTIHByb2R1Y3Qg KGlkKSk7CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfZGRsX2RlcGFyc2VfcmVn cmVzcy9zcWwvdGVzdF9kZGxfZGVwYXJzZS5zcWwgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfZGRs X2RlcGFyc2VfcmVncmVzcy9zcWwvdGVzdF9kZGxfZGVwYXJzZS5zcWwKbmV3IGZpbGUgbW9kZSAx MDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uMDg4OWZhMDJmOQotLS0gL2Rldi9udWxsCisrKyBiL3Ny Yy90ZXN0L21vZHVsZXMvdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzL3NxbC90ZXN0X2RkbF9kZXBh cnNlLnNxbApAQCAtMCwwICsxLDIwIEBACitDUkVBVEUgRVhURU5TSU9OIHRlc3RfZGRsX2RlcGFy c2VfcmVncmVzczsKKworQ1JFQVRFIE9SIFJFUExBQ0UgRlVOQ1RJT04gdGVzdF9kZGxfZGVwYXJz ZSgpCisgIFJFVFVSTlMgZXZlbnRfdHJpZ2dlciBMQU5HVUFHRSBwbHBnc3FsIEFTCiskJAorREVD TEFSRQorCXIgcmVjb3JkOworCWRlcGFyc2VkX2pzb24gdGV4dDsKK0JFR0lOCisJRk9SIHIgSU4g U0VMRUNUICogRlJPTSBwZ19ldmVudF90cmlnZ2VyX2RkbF9jb21tYW5kcygpCisJTE9PUAorCQlk ZXBhcnNlZF9qc29uID0gcGdfY2F0YWxvZy5kZGxfZGVwYXJzZV90b19qc29uKHIuY29tbWFuZCk7 CisJCVJBSVNFIE5PVElDRSAnZGVwYXJzZWQganNvbjogJScsIGRlcGFyc2VkX2pzb247CisJCVJB SVNFIE5PVElDRSAncmUtZm9ybWVkIGNvbW1hbmQ6ICUnLCBwZ19jYXRhbG9nLmRkbF9kZXBhcnNl X2V4cGFuZF9jb21tYW5kKGRlcGFyc2VkX2pzb24pOworCUVORCBMT09QOworRU5EOworJCQ7CisK K0NSRUFURSBFVkVOVCBUUklHR0VSIHRlc3RfZGRsX2RlcGFyc2UKK09OIGRkbF9jb21tYW5kX2Vu ZCBFWEVDVVRFIFBST0NFRFVSRSB0ZXN0X2RkbF9kZXBhcnNlKCk7CmRpZmYgLS1naXQgYS9zcmMv dGVzdC9tb2R1bGVzL3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcy90LzAwMV9jb21wYXJlX2R1bXBl ZF9yZXN1bHRzLnBsIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3Mv dC8wMDFfY29tcGFyZV9kdW1wZWRfcmVzdWx0cy5wbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl eCAwMDAwMDAwMDAwLi42NjRhZDM0OThmCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3QvbW9k dWxlcy90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3MvdC8wMDFfY29tcGFyZV9kdW1wZWRfcmVzdWx0 cy5wbApAQCAtMCwwICsxLDE4MSBAQAordXNlIHN0cmljdDsKK3VzZSB3YXJuaW5nczsKK3VzZSBF bnY7Cit1c2UgUG9zdGdyZVNRTDo6VGVzdDo6Q2x1c3RlcjsKK3VzZSBQb3N0Z3JlU1FMOjpUZXN0 OjpVdGlsczsKK3VzZSBUZXN0OjpNb3JlOwordXNlIEZpbGU6OkJhc2VuYW1lOworCitzdWIgZXhl Y3V0ZV90ZXN0X2Nhc2UgeworICAgIG15ICR0ZXN0X25hbWUgPSAkX1swXTsKKyAgICBteSAkcHVi X25vZGUgPSAkX1sxXTsKKyAgICBteSAkc3ViX25vZGUgPSAkX1syXTsKKyAgICBteSAkZGJuYW1l ID0gJF9bM107CisgICAgbXkgJG91dHB1dGRpciA9ICRQb3N0Z3JlU1FMOjpUZXN0OjpVdGlsczo6 dG1wX2NoZWNrOworCisgICAgIyBzZXQgdXAgZGVwYXJzZSB0ZXN0aW5nIHJlc291cmNlcworICAg IGNyZWF0ZV9kZXBhcnNlX3Rlc3RpbmdfcmVzb3VyY2VzX29uX3B1Yl9ub2RlKCRwdWJfbm9kZSwg JGRibmFtZSk7CisKKyAgICBteSAkdGVzdF9maWxlID0gIi4vc3FsLyR7dGVzdF9uYW1lfS5zcWwi OworICAgIG15ICRjb250ZW50ID0gZG97bG9jYWwoQEFSR1YsJC8pPSR0ZXN0X2ZpbGU7PD59Owor CisgICAgJHB1Yl9ub2RlIC0+IHBzcWwoJGRibmFtZSwgJGNvbnRlbnQpOworCisgICAgIyByZXRy aWV2ZSBTUUwgY29tbWFuZHMgZ2VuZXJhdGVkIGZyb20gZGVwYXJzZWQgRERMcyBvbiBwdWIgbm9k ZQorICAgIG15ICRkZGxfc3FsID0gJyc7CisgICAgJHB1Yl9ub2RlIC0+IHBzcWwoJGRibmFtZSxx KAorICAgICAgICBzZWxlY3QgZGRsX2RlcGFyc2VfZXhwYW5kX2NvbW1hbmQoZGRsKSB8fCAnOycg ZnJvbSBkZXBhcnNlZF9kZGxzIE9SREVSIEJZIGlkIEFTQyksCisgICAgICAgIHN0ZG91dCA9PiBc JGRkbF9zcWwpOworCisgICAgcHJpbnQgIlxuc3RhcnQgcHJpbnRpbmcgcmUtZm9ybWVkIHNxbFxu IjsKKyAgICBwcmludCAkZGRsX3NxbDsKKyAgICBwcmludCAiXG5lbmQgcHJpbnRpbmcgcmUtZm9y bWVkIHNxbFxuIjsKKyAgICAjIGV4ZWN1dGUgU1FMIGNvbW1hbmRzIG9uIHN1YiBub2RlCisgICAg JHN1Yl9ub2RlIC0+IHBzcWwoJGRibmFtZSwgJGRkbF9zcWwpOworCisgICAgIyBjbGVhbiB1cCBk ZXBhcnNlIHRlc3RpbmcgcmVzb3VyY2VzCisgICAgY2xlYW5fZGVwYXJzZV90ZXN0aW5nX3Jlc291 cmNlc19vbl9wdWJfbm9kZSgkcHViX25vZGUsICRkYm5hbWUpOworCisgICAgIyBkdW1wIGZyb20g cHViIG5vZGUgYW5kIHN1YiBub2RlCisgICAgbWtkaXIgJHtvdXRwdXRkaXJ9LiIvZHVtcHMiLCAw NzU1OworICAgIG15ICRwdWJfZHVtcCA9ICR7b3V0cHV0ZGlyfS4iL2R1bXBzLyR7dGVzdF9uYW1l fV9wdWIuZHVtcCI7CisgICAgbXkgJHN1Yl9kdW1wID0gJHtvdXRwdXRkaXJ9LiIvZHVtcHMvJHt0 ZXN0X25hbWV9X3N1Yi5kdW1wIjsKKyAgICBzeXN0ZW0oInBnX2R1bXBhbGwgIgorICAgICAgICAu ICItcyAiCisgICAgICAgIC4gIi1mICIKKyAgICAgICAgLiAkcHViX2R1bXAgLiAiICIKKyAgICAg ICAgLiAiLS1uby1zeW5jICIKKyAgICAgICAgLiAgJy1wICcKKyAgICAgICAgLiAkcHViX25vZGUt PnBvcnQpICA9PSAwIG9yIGRpZSAiRHVtcCBwdWIgbm9kZSBmYWlsZWQgaW4gJHt0ZXN0X25hbWV9 IjsKKyAgICBzeXN0ZW0oInBnX2R1bXBhbGwgIgorICAgICAgICAuICItcyAiCisgICAgICAgIC4g Ii1mICIKKyAgICAgICAgLiAkc3ViX2R1bXAgLiAiICIKKyAgICAgICAgLiAiLS1uby1zeW5jICIK KyAgICAgICAgLiAgJy1wICcKKyAgICAgICAgLiAkc3ViX25vZGUtPnBvcnQpICA9PSAwIG9yIGRp ZSAiRHVtcCBzdWIgbm9kZSBmYWlsZWQgaW4gJHt0ZXN0X25hbWV9IjsKKworICAgICMgY29tcGFy ZSBkdW1wZWQgcmVzdWx0cworICAgIGlzKHN5c3RlbSgiZGlmZiAiCisgICAgLiAkcHViX2R1bXAg LiAiICIKKyAgICAuICRzdWJfZHVtcCksIDAsICJEdW1wZWQgcmVzdWx0cyBkaWZmIGluICR7dGVz dF9uYW1lfSIpOworfQorCitzdWIgaW5pdF9ub2RlIHsKKyAgICBteSAkbm9kZV9uYW1lID0gJF9b MF07CisgICAgbXkgJG5vZGUgPSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyLT5uZXcoJG5vZGVf bmFtZSk7CisgICAgJG5vZGUtPmluaXQ7CisgICAgIyBpbmNyZWFzZSBzb21lIHNldHRpbmdzIHRo YXQgQ2x1c3Rlci0+bmV3IG1ha2VzIHRvbyBsb3cgYnkgZGVmYXVsdC4KKyAgICAkbm9kZS0+YWRq dXN0X2NvbmYoJ3Bvc3RncmVzcWwuY29uZicsICdtYXhfY29ubmVjdGlvbnMnLCAnMjUnKTsKKyAg ICAkbm9kZS0+YXBwZW5kX2NvbmYoJ3Bvc3RncmVzcWwuY29uZicsCisJCSAgICdtYXhfcHJlcGFy ZWRfdHJhbnNhY3Rpb25zID0gMTAnKTsKKyAgICByZXR1cm4gJG5vZGU7Cit9CisKK3N1YiBpbml0 X3B1Yl9ub2RlIHsKKyAgICBteSAkbm9kZV9uYW1lID0gJF9bMF0uIl9wdWIiOworICAgIHJldHVy biBpbml0X25vZGUoJG5vZGVfbmFtZSkKK30KKworc3ViIGluaXRfc3ViX25vZGUgeworICAgIG15 ICRub2RlX25hbWUgPSAkX1swXS4iX3N1YiI7CisgICAgcmV0dXJuIGluaXRfbm9kZSgkbm9kZV9u YW1lKQorfQorCitzdWIgY3JlYXRlX2RlcGFyc2VfdGVzdGluZ19yZXNvdXJjZXNfb25fcHViX25v ZGUgeworICAgIG15ICRub2RlID0gJF9bMF07CisgICAgbXkgJGRibmFtZSA9ICRfWzFdOworICAg ICRub2RlIC0+IHBzcWwoJGRibmFtZSwgcSgKKyAgICAgICAgYmVnaW47CisgICAgICAgIENSRUFU RSBFWFRFTlNJT04gdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzOworICAgICAgICBjcmVhdGUgdGFi bGUgZGVwYXJzZWRfZGRscyhpZCBTRVJJQUwgUFJJTUFSWSBLRVksIHRhZyB0ZXh0LCBvYmplY3Rf aWRlbnRpdHkgdGV4dCwgZGRsIHRleHQpOworCisgICAgICAgIGNyZWF0ZSBvciByZXBsYWNlIGZ1 bmN0aW9uIGRlcGFyc2VfdG9fanNvbigpCisgICAgICAgICAgICByZXR1cm5zIGV2ZW50X3RyaWdn ZXIgbGFuZ3VhZ2UgcGxwZ3NxbCBhcworICAgICAgICAkJAorICAgICAgICBkZWNsYXJlCisgICAg ICAgICAgICByIHJlY29yZDsKKyAgICAgICAgYmVnaW4KKyAgICAgICAgICAgIGZvciByIGluIHNl bGVjdCAqIGZyb20gcGdfZXZlbnRfdHJpZ2dlcl9kZGxfY29tbWFuZHMoKQorICAgICAgICAgICAg bG9vcAorICAgICAgICAgICAgICAgIGluc2VydCBpbnRvIGRlcGFyc2VkX2RkbHModGFnLCBvYmpl Y3RfaWRlbnRpdHksIGRkbCkgdmFsdWVzIChyLmNvbW1hbmRfdGFnLCByLm9iamVjdF9pZGVudGl0 eSwgcGdfY2F0YWxvZy5kZGxfZGVwYXJzZV90b19qc29uKHIuY29tbWFuZCkpOworICAgICAgICAg ICAgZW5kIGxvb3A7CisgICAgICAgIEVORDsKKyAgICAgICAgJCQ7CisKKyAgICAgICAgY3JlYXRl IG9yIHJlcGxhY2UgZnVuY3Rpb24gZGVwYXJzZV9kcm9wc190b19qc29uKCkKKyAgICAgICAgICAg IHJldHVybnMgZXZlbnRfdHJpZ2dlciBsYW5ndWFnZSBwbHBnc3FsIGFzCisgICAgICAgICQkCisg ICAgICAgIGRlY2xhcmUKKyAgICAgICAgICAgIHIgcmVjb3JkOworICAgICAgICBiZWdpbgorICAg ICAgICAgICAgZm9yIHIgaW4gc2VsZWN0ICogZnJvbSBwZ19ldmVudF90cmlnZ2VyX2Ryb3BwZWRf b2JqZWN0cygpCisgICAgICAgICAgICBsb29wCisgICAgICAgICAgICAgICAgaW5zZXJ0IGludG8g ZGVwYXJzZWRfZGRscyh0YWcsIG9iamVjdF9pZGVudGl0eSwgZGRsKSB2YWx1ZXMgKHIub2JqZWN0 X3R5cGUsIHIub2JqZWN0X2lkZW50aXR5LCBwdWJsaWMuZGVwYXJzZV9kcm9wX2RkbChyLm9iamVj dF9pZGVudGl0eSwgci5vYmplY3RfdHlwZSkpOworICAgICAgICAgICAgZW5kIGxvb3A7CisgICAg ICAgIEVORDsKKyAgICAgICAgJCQ7CisKKyAgICAgICAgY3JlYXRlIGV2ZW50IHRyaWdnZXIgZGRs X2RlcGFyc2VfdHJpZworICAgICAgICBvbiBkZGxfY29tbWFuZF9lbmQgZXhlY3V0ZSBwcm9jZWR1 cmUgZGVwYXJzZV90b19qc29uKCk7CisKKyAgICAgICAgY3JlYXRlIGV2ZW50IHRyaWdnZXIgZGRs X2Ryb3BzX2RlcGFyc2VfdHJpZworICAgICAgICBvbiBzcWxfZHJvcCBleGVjdXRlIHByb2NlZHVy ZSBkZXBhcnNlX2Ryb3BzX3RvX2pzb24oKTsKKworICAgICAgICBjb21taXQ7CisgICAgKSk7Cit9 CisKK3N1YiBjbGVhbl9kZXBhcnNlX3Rlc3RpbmdfcmVzb3VyY2VzX29uX3B1Yl9ub2RlIHsKKyAg ICBteSAkbm9kZSA9ICRfWzBdOworICAgIG15ICRkYm5hbWUgPSAkX1sxXTsKKyAgICAjIERyb3Ag dGhlIGV2ZW50IHRyaWdnZXIgYW5kIHRoZSBmdW5jdGlvbiBiZWZvcmUgdGFraW5nIGEgbG9naWNh bCBkdW1wLgorICAgICRub2RlIC0+IHNhZmVfcHNxbCgkZGJuYW1lLHEoCisgICAgICAgIGRyb3Ag ZXZlbnQgdHJpZ2dlciBkZGxfZGVwYXJzZV90cmlnOworICAgICAgICBkcm9wIGV2ZW50IHRyaWdn ZXIgZGRsX2Ryb3BzX2RlcGFyc2VfdHJpZzsKKyAgICAgICAgZHJvcCBmdW5jdGlvbiBkZXBhcnNl X3RvX2pzb24oKTsKKyAgICAgICAgZHJvcCBmdW5jdGlvbiBkZXBhcnNlX2Ryb3BzX3RvX2pzb24o KTsKKyAgICAgICAgZHJvcCB0YWJsZSBkZXBhcnNlZF9kZGxzOworICAgICAgICBEUk9QIEVYVEVO U0lPTiB0ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3M7CisgICAgKSk7Cit9CisKK3N1YiB0cmltIHsK KyAgICBteSBAb3V0ID0gQF87CisgICAgZm9yIChAb3V0KSB7CisgICAgICAgIHMvXlxzKy8vOwor ICAgICAgICBzL1xzKyQvLzsKKyAgICB9CisgICAgcmV0dXJuIHdhbnRhcnJheSA/IEBvdXQgOiAk b3V0WzBdOworfQorCisjIENyZWF0ZSBhbmQgc3RhcnQgcHViIHN1YiBub2RlcworbXkgJHB1Yl9u b2RlID0gaW5pdF9wdWJfbm9kZSgidGVzdCIpOworbXkgJHN1Yl9ub2RlID0gaW5pdF9zdWJfbm9k ZSgidGVzdCIpOworbXkgJGRibmFtZSA9ICJwb3N0Z3JlcyI7CiskcHViX25vZGUgLT4gc3RhcnQ7 Ciskc3ViX25vZGUgLT4gc3RhcnQ7CisKKyMgbG9hZCB0ZXN0IGNhc2VzIGZyb20gdGhlIHJlZ3Jl c3Npb24gdGVzdHMKK215IEByZWdyZXNzX3Rlc3RzID0gc3BsaXQgL1xzKy8sICRFTlZ7UkVHUkVT U307CisKK2ZvcmVhY2goQHJlZ3Jlc3NfdGVzdHMpIHsKKyAgICBteSAkdGVzdF9uYW1lID0gdHJp bSgkXyk7CisgICAgIyBza2lwIGlmIGl0J3MgcmVncmVzc2lvbiB0ZXN0IHByZXBhcmF0aW9uIG9y IGVtcHR5IHN0cmluZworICAgIGlmICgkdGVzdF9uYW1lIGVxICIiIG9yICR0ZXN0X25hbWUgZXEg InRlc3RfZGRsX2RlcGFyc2UiKQorICAgIHsKKyAgICAgICAgbmV4dDsKKyAgICB9CisgICAgZXZh bCB7ZXhlY3V0ZV90ZXN0X2Nhc2UoJHRlc3RfbmFtZSwgJHB1Yl9ub2RlLCAkc3ViX25vZGUsICRk Ym5hbWUpO307CisgICAgaWYgKCRAIG5lICIiKQorICAgIHsKKyAgICAgICAgZmFpbCgkQCk7Cisg ICAgfQorfQorY2xvc2U7CisKKyMgQ2xvc2Ugbm9kZXMKKyRwdWJfbm9kZS0+c3RvcDsKKyRzdWJf bm9kZS0+c3RvcDsKKworZG9uZV90ZXN0aW5nKCk7CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9tb2R1 bGVzL3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcy90LzAwMl9yZWdyZXNzX3Rlc3RzLnBsIGIvc3Jj L3Rlc3QvbW9kdWxlcy90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3MvdC8wMDJfcmVncmVzc190ZXN0 cy5wbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi4zYTg3NWMzM2ZiCi0t LSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jl c3MvdC8wMDJfcmVncmVzc190ZXN0cy5wbApAQCAtMCwwICsxLDIwNyBAQAordXNlIHN0cmljdDsK K3VzZSB3YXJuaW5nczsKK3VzZSBFbnY7Cit1c2UgUG9zdGdyZVNRTDo6VGVzdDo6Q2x1c3RlcjsK K3VzZSBQb3N0Z3JlU1FMOjpUZXN0OjpVdGlsczsKK3VzZSBUZXN0OjpNb3JlOwordXNlIEZpbGU6 OkJhc2VuYW1lOworCitzdWIgZXhlY3V0ZV9yZWdyZXNzX3Rlc3QgeworICAgIG15ICRwdWJfbm9k ZSA9ICRfWzBdOworICAgIG15ICRzdWJfbm9kZSA9ICRfWzFdOworICAgIG15ICRkYm5hbWUgPSAi cG9zdGdyZXMiOworICAgIG15ICRkbHBhdGggICAgPSBkaXJuYW1lKCRFTlZ7UkVHUkVTU19TSExJ Qn0pOworICAgIG15ICRpbnB1dGRpciA9ICIuLi8uLi9yZWdyZXNzIjsKKyAgICBteSAkb3V0cHV0 ZGlyID0gJFBvc3RncmVTUUw6OlRlc3Q6OlV0aWxzOjp0bXBfY2hlY2s7CisKKyAgICAjIHNldCB1 cCBkZXBhcnNlIHRlc3RpbmcgcmVzb3VyY2VzCisgICAgY3JlYXRlX2RlcGFyc2VfdGVzdGluZ19y ZXNvdXJjZXNfb25fcHViX25vZGUoJHB1Yl9ub2RlLCAkZGJuYW1lKTsKKworICAgICMgZXhlY3V0 ZSBjb3JlIHJlZ3Jlc3Npb24gdGVzdHMgb24gcHViIG5vZGUKKyAgICBteSAkcmVncmVzc19jbWQg PSAkRU5We1BHX1JFR1JFU1N9CisgICAgICAgIC4gIiAiCisgICAgICAgIC4gIi0tZGxwYXRoPVwi JGRscGF0aFwiICIKKyAgICAgICAgLiAiLS1tYXgtY29uY3VycmVudC10ZXN0cz0yMCAiCisgICAg ICAgIC4gIi0tZGJuYW1lPSIKKyAgICAgICAgLiAkZGJuYW1lIC4gIiAiCisgICAgICAgIC4gIi0t dXNlLWV4aXN0aW5nICIKKyAgICAgICAgLiAiLS1ob3N0PSIKKyAgICAgICAgLiAkcHViX25vZGUt Pmhvc3QgLiAiICIKKyAgICAgICAgLiAiLS1wb3J0PSIKKyAgICAgICAgLiAkcHViX25vZGUtPnBv cnQgLiAiICIKKyAgICAgICAgLiAiLS1pbnB1dGRpcj0kaW5wdXRkaXIgIgorICAgICAgICAuICIt LW91dHB1dGRpcj1cIiRvdXRwdXRkaXJcIiAiCisgICAgICAgIC4gIi0tc2NoZWR1bGU9JGlucHV0 ZGlyL3BhcmFsbGVsX3NjaGVkdWxlIjsKKyAgICBwcmludCAiUmVncmVzc2lvbiB0ZXN0IGNvbW1h bmQgaXMgJHJlZ3Jlc3NfY21kIjsKKyAgICBteSAkcmMgPSBzeXN0ZW0oJHJlZ3Jlc3NfY21kKTsK KyAgICBpZiAoJHJjICE9IDApCisgICAgeworICAgICAgICAjIElmIHJlZ3Jlc3Npb24gdGVzdCBm YWlscywgZHVtcCBvdXQgdGhlIHJlZ3Jlc3Npb24gZGlmZnMgZmlsZQorICAgICAgICBteSAkZGlm ZnMgPSAiJHtvdXRwdXRkaXJ9L3JlZ3Jlc3Npb24vcmVncmVzc2lvbi5kaWZmcyI7CisgICAgICAg IGlmICgtZSAkZGlmZnMpCisgICAgICAgIHsKKyAgICAgICAgICAgIHByaW50ICI9PT0gZHVtcGlu ZyAkZGlmZnMgPT09XG4iOworICAgICAgICAgICAgcHJpbnQgc2x1cnBfZmlsZSgkZGlmZnMpOwor ICAgICAgICAgICAgcHJpbnQgIj09PSBFT0YgPT09XG4iOworICAgICAgICB9CisgICAgICAgIGRp ZSAiUmVncmVzc2lvbiB0ZXN0IGZhaWxlZCI7CisgICAgfQorCisgICAgIyBSZXRyaWV2ZSBTUUwg Y29tbWFuZHMgZ2VuZXJhdGVkIGZyb20gZGVwYXJzZWQgRERMcyBvbiBwdWIgbm9kZQorICAgIG15 ICRkZGxfc3FsID0gJyc7CisgICAgJHB1Yl9ub2RlIC0+IHBzcWwoJGRibmFtZSxxKAorICAgICAg ICBzZWxlY3QgZGRsX2RlcGFyc2VfZXhwYW5kX2NvbW1hbmQoZGRsKSB8fCAnOycgZnJvbSBkZXBh cnNlZF9kZGxzIE9SREVSIEJZIGlkIEFTQyksCisgICAgICAgIHN0ZG91dCA9PiBcJGRkbF9zcWwp OworCisgICAgIyBFeGVjdXRlIFNRTCBjb21tYW5kcyBvbiBzdWIgbm9kZQorICAgICRzdWJfbm9k ZSAtPiBwc3FsKCRkYm5hbWUsICRkZGxfc3FsKTsKKworICAgICMgQ2xlYW4gdXAgZGVwYXJzZSB0 ZXN0aW5nIHJlc291cmNlcworICAgIGNsZWFuX2RlcGFyc2VfdGVzdGluZ19yZXNvdXJjZXNfb25f cHViX25vZGUoJHB1Yl9ub2RlLCAkZGJuYW1lKTsKKworICAgICMgRHVtcCBmcm9tIHB1YiBub2Rl IGFuZCBzdWIgbm9kZQorICAgIG1rZGlyICR7b3V0cHV0ZGlyfS4iL2R1bXBzIiwgMDc1NTsKKyAg ICBteSAkcHViX2R1bXAgPSAke291dHB1dGRpcn0uIi9kdW1wcy9yZWdyZXNzX3B1Yi5kdW1wIjsK KyAgICBteSAkc3ViX2R1bXAgPSAke291dHB1dGRpcn0uIi9kdW1wcy9yZWdyZXNzX3N1Yi5kdW1w IjsKKyAgICBzeXN0ZW0oInBnX2R1bXBhbGwgIgorICAgICAgICAuICItcyAiCisgICAgICAgIC4g Ii1mICIKKyAgICAgICAgLiAkcHViX2R1bXAgLiAiICIKKyAgICAgICAgLiAiLS1uby1zeW5jICIK KyAgICAgICAgLiAgJy1wICcKKyAgICAgICAgLiAkcHViX25vZGUtPnBvcnQpICA9PSAwIG9yIGRp ZSAiRHVtcCBwdWIgbm9kZSBmYWlsZWQiOworICAgIHN5c3RlbSgicGdfZHVtcGFsbCAiCisgICAg ICAgIC4gIi1zICIKKyAgICAgICAgLiAiLWYgIgorICAgICAgICAuICRzdWJfZHVtcCAuICIgIgor ICAgICAgICAuICItLW5vLXN5bmMgIgorICAgICAgICAuICAnLXAgJworICAgICAgICAuICRzdWJf bm9kZS0+cG9ydCkgID09IDAgb3IgZGllICJEdW1wIHN1YiBub2RlIGZhaWxlZCI7CisKKyAgICAj IENvbXBhcmUgZHVtcGVkIHJlc3VsdHMKKyAgICBpcyhzeXN0ZW0oImRpZmYgIgorICAgIC4gJHB1 Yl9kdW1wIC4gIiAiCisgICAgLiAkc3ViX2R1bXApLCAwLCAiQ29tcGFyaW5nIGR1bXBlZCBvdXRw dXQiKTsKKworICAgICMgQ2xvc2Ugbm9kZXMKKyAgICAkcHViX25vZGUtPnN0b3A7CisgICAgJHN1 Yl9ub2RlLT5zdG9wOworfQorCitzdWIgaW5pdF9ub2RlIHsKKyAgICBteSAkbm9kZV9uYW1lID0g JF9bMF07CisgICAgbXkgJG5vZGUgPSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyLT5uZXcoJG5v ZGVfbmFtZSk7CisgICAgJG5vZGUtPmluaXQ7CisgICAgIyBpbmNyZWFzZSBzb21lIHNldHRpbmdz IHRoYXQgQ2x1c3Rlci0+bmV3IG1ha2VzIHRvbyBsb3cgYnkgZGVmYXVsdC4KKyAgICAkbm9kZS0+ YWRqdXN0X2NvbmYoJ3Bvc3RncmVzcWwuY29uZicsICdtYXhfY29ubmVjdGlvbnMnLCAnMjUnKTsK KyAgICAkbm9kZS0+YXBwZW5kX2NvbmYoJ3Bvc3RncmVzcWwuY29uZicsCisJCSAgICdtYXhfcHJl cGFyZWRfdHJhbnNhY3Rpb25zID0gMTAnKTsKKyAgICByZXR1cm4gJG5vZGU7Cit9CisKK3N1YiBp bml0X3B1Yl9ub2RlIHsKKyAgICBteSAkbm9kZV9uYW1lID0gJF9bMF0uIl9wdWIiOworICAgIHJl dHVybiBpbml0X25vZGUoJG5vZGVfbmFtZSkKK30KKworc3ViIGluaXRfc3ViX25vZGUgeworICAg IG15ICRub2RlX25hbWUgPSAkX1swXS4iX3N1YiI7CisgICAgcmV0dXJuIGluaXRfbm9kZSgkbm9k ZV9uYW1lKQorfQorCitzdWIgY3JlYXRlX2RlcGFyc2VfdGVzdGluZ19yZXNvdXJjZXNfb25fcHVi X25vZGUgeworICAgIG15ICRub2RlID0gJF9bMF07CisgICAgbXkgJGRibmFtZSA9ICRfWzFdOwor ICAgICRub2RlIC0+IHBzcWwoJGRibmFtZSwgcSgKKyAgICAgICAgYmVnaW47CisgICAgICAgIENS RUFURSBFWFRFTlNJT04gdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzOworICAgICAgICBjcmVhdGUg dGFibGUgZGVwYXJzZWRfZGRscyhpZCBTRVJJQUwgUFJJTUFSWSBLRVksIHRhZyB0ZXh0LCBvYmpl Y3RfaWRlbnRpdHkgdGV4dCwgZGRsIHRleHQpOworICAgICAgICBjcmVhdGUgb3IgcmVwbGFjZSBm dW5jdGlvbiBkZXBhcnNlX3RvX2pzb24oKQorICAgICAgICAgICAgcmV0dXJucyBldmVudF90cmln Z2VyIGxhbmd1YWdlIHBscGdzcWwgYXMKKyAgICAgICAgJCQKKyAgICAgICAgZGVjbGFyZQorICAg ICAgICAgICAgciByZWNvcmQ7CisgICAgICAgIGJlZ2luCisgICAgICAgICAgICBmb3IgciBpbiBz ZWxlY3QgKiBmcm9tIHBnX2V2ZW50X3RyaWdnZXJfZGRsX2NvbW1hbmRzKCkKKyAgICAgICAgICAg IGxvb3AKKyAgICAgICAgICAgICAgICBpbnNlcnQgaW50byBkZXBhcnNlZF9kZGxzKHRhZywgb2Jq ZWN0X2lkZW50aXR5LCBkZGwpIHZhbHVlcyAoci5jb21tYW5kX3RhZywgci5vYmplY3RfaWRlbnRp dHksIHBnX2NhdGFsb2cuZGRsX2RlcGFyc2VfdG9fanNvbihyLmNvbW1hbmQpKTsKKyAgICAgICAg ICAgIGVuZCBsb29wOworICAgICAgICBFTkQ7CisgICAgICAgICQkOworICAgICAgICBjcmVhdGUg b3IgcmVwbGFjZSBmdW5jdGlvbiBkZXBhcnNlX2Ryb3BzX3RvX2pzb24oKQorICAgICAgICAgICAg cmV0dXJucyBldmVudF90cmlnZ2VyIGxhbmd1YWdlIHBscGdzcWwgYXMKKyAgICAgICAgJCQKKyAg ICAgICAgZGVjbGFyZQorICAgICAgICAgICAgciByZWNvcmQ7CisgICAgICAgIGJlZ2luCisgICAg ICAgICAgICBmb3IgciBpbiBzZWxlY3QgKiBmcm9tIHBnX2V2ZW50X3RyaWdnZXJfZHJvcHBlZF9v YmplY3RzKCkKKyAgICAgICAgICAgIGxvb3AKKyAgICAgICAgICAgICAgICBpbnNlcnQgaW50byBk ZXBhcnNlZF9kZGxzKHRhZywgb2JqZWN0X2lkZW50aXR5LCBkZGwpIHZhbHVlcyAoci5vYmplY3Rf dHlwZSwgci5vYmplY3RfaWRlbnRpdHksIHB1YmxpYy5kZXBhcnNlX2Ryb3BfZGRsKHIub2JqZWN0 X2lkZW50aXR5LCByLm9iamVjdF90eXBlKSk7CisgICAgICAgICAgICBlbmQgbG9vcDsKKyAgICAg ICAgRU5EOworICAgICAgICAkJDsKKyAgICAgICAgY3JlYXRlIGV2ZW50IHRyaWdnZXIgZGRsX2Rl cGFyc2VfdHJpZworICAgICAgICBvbiBkZGxfY29tbWFuZF9lbmQgZXhlY3V0ZSBwcm9jZWR1cmUg ZGVwYXJzZV90b19qc29uKCk7CisgICAgICAgIGNyZWF0ZSBldmVudCB0cmlnZ2VyIGRkbF9kcm9w c19kZXBhcnNlX3RyaWcKKyAgICAgICAgb24gc3FsX2Ryb3AgZXhlY3V0ZSBwcm9jZWR1cmUgZGVw YXJzZV9kcm9wc190b19qc29uKCk7CisgICAgICAgIGNvbW1pdDsKKyAgICApKTsKK30KKworc3Vi IGNsZWFuX2RlcGFyc2VfdGVzdGluZ19yZXNvdXJjZXNfb25fcHViX25vZGUgeworICAgIG15ICRu b2RlID0gJF9bMF07CisgICAgbXkgJGRibmFtZSA9ICRfWzFdOworICAgICMgRHJvcCB0aGUgZXZl bnQgdHJpZ2dlciBhbmQgdGhlIGZ1bmN0aW9uIGJlZm9yZSB0YWtpbmcgYSBsb2dpY2FsIGR1bXAu CisgICAgJG5vZGUgLT4gc2FmZV9wc3FsKCRkYm5hbWUscSgKKyAgICAgICAgZHJvcCBldmVudCB0 cmlnZ2VyIGRkbF9kZXBhcnNlX3RyaWc7CisgICAgICAgIGRyb3AgZXZlbnQgdHJpZ2dlciBkZGxf ZHJvcHNfZGVwYXJzZV90cmlnOworICAgICAgICBkcm9wIGZ1bmN0aW9uIGRlcGFyc2VfdG9fanNv bigpOworICAgICAgICBkcm9wIGZ1bmN0aW9uIGRlcGFyc2VfZHJvcHNfdG9fanNvbigpOworICAg ICAgICBkcm9wIHRhYmxlIGRlcGFyc2VkX2RkbHM7CisgICAgICAgIERST1AgRVhURU5TSU9OIHRl c3RfZGRsX2RlcGFyc2VfcmVncmVzczsKKyAgICApKTsKK30KKworc3ViIHRyaW0geworICAgIG15 IEBvdXQgPSBAXzsKKyAgICBmb3IgKEBvdXQpIHsKKyAgICAgICAgcy9eXHMrLy87CisgICAgICAg IHMvXHMrJC8vOworICAgIH0KKyAgICByZXR1cm4gd2FudGFycmF5ID8gQG91dCA6ICRvdXRbMF07 Cit9CisKKyMgQ3JlYXRlIGFuZCBzdGFydCBwdWIgc3ViIG5vZGVzCitteSAkcHViX25vZGUgPSBp bml0X3B1Yl9ub2RlKCJyZWdyZXNzIik7CitteSAkc3ViX25vZGUgPSBpbml0X3N1Yl9ub2RlKCJy ZWdyZXNzIik7CiskcHViX25vZGUgLT4gc3RhcnQ7Ciskc3ViX25vZGUgLT4gc3RhcnQ7CisKKyMg Q29tbWVudCB0aGUgZXhlY3V0aW9uIHRlbXBvcmFyaWx5LCBhbiBlcnJvciBpbiBkZGxfZGVwYXJz ZS5jIHdpbGwgY2F1c2UgdGhlIGRhdGFiYXNlIGV4aXRzIGFibm9ybWFsbHksIGVycm9yIHNpZ25h dHVyZToKKyMKKyMgMjAyMi0xMi0wMyAyMzowMjo0NC43NzggVVRDIFsxMjkxMDJdIHBnX3JlZ3Jl c3MvdGFibGVzcGFjZSBMT0c6ICBzdGF0ZW1lbnQ6IEFMVEVSIFRBQkxFIEFMTCBJTiBUQUJMRVNQ QUNFIHJlZ3Jlc3NfdGJsc3BhY2VfcmVuYW1lZCBTRVQgVEFCTEVTUEFDRSBwZ19kZWZhdWx0Owor IyBUUkFQOiBmYWlsZWQgQXNzZXJ0KCJJc0Eoc3RtdCwgQWx0ZXJUYWJsZVN0bXQpIiksIEZpbGU6 ICJkZGxfZGVwYXJzZS5jIiwgTGluZTogMzM3MSwgUElEOiAxMjkxMDIKKyMgcG9zdGdyZXM6IHJl Z3Jlc3NfcHViOiBydW5xaSBwb3N0Z3JlcyBbbG9jYWxdIEFMVEVSIFRBQkxFKEV4Y2VwdGlvbmFs Q29uZGl0aW9uKzB4YmIpWzB4NTYzYmQ2ZWE1YjBkXQorIyAuLi4KKyMgL2xpYi94ODZfNjQtbGlu dXgtZ251L2xpYmMuc28uNigrMHgyOWQ5MClbMHg3ZmQ2YTc0YTZkOTBdCisjIC9saWIveDg2XzY0 LWxpbnV4LWdudS9saWJjLnNvLjYoX19saWJjX3N0YXJ0X21haW4rMHg4MClbMHg3ZmQ2YTc0YTZl NDBdCisjIHBvc3RncmVzOiByZWdyZXNzX3B1YjogcnVucWkgcG9zdGdyZXMgW2xvY2FsXSBBTFRF UiBUQUJMRShfc3RhcnQrMHgyNSlbMHg1NjNiZDY3MmYxZTVdCisjIDIwMjItMTItMDMgMjM6MDI6 NDQuODUwIFVUQyBbMTI5MDU4XSBMT0c6ICBzZXJ2ZXIgcHJvY2VzcyAoUElEIDEyOTEwMikgd2Fz IHRlcm1pbmF0ZWQgYnkgc2lnbmFsIDY6IEFib3J0ZWQKKyMgMjAyMi0xMi0wMyAyMzowMjo0NC44 NTAgVVRDIFsxMjkwNThdIERFVEFJTDogIEZhaWxlZCBwcm9jZXNzIHdhcyBydW5uaW5nOiBBTFRF UiBUQUJMRSBBTEwgSU4gVEFCTEVTUEFDRSByZWdyZXNzX3RibHNwYWNlX3JlbmFtZWQgU0VUIFRB QkxFU1BBQ0UgcGdfZGVmYXVsdDsKKyMgMjAyMi0xMi0wMyAyMzowMjo0NC44NTAgVVRDIFsxMjkw NThdIExPRzogIHRlcm1pbmF0aW5nIGFueSBvdGhlciBhY3RpdmUgc2VydmVyIHByb2Nlc3Nlcwor IyAyMDIyLTEyLTAzIDIzOjAyOjQ0Ljg1MSBVVEMgWzEyOTA1OF0gTE9HOiAgc2h1dHRpbmcgZG93 biBiZWNhdXNlIHJlc3RhcnRfYWZ0ZXJfY3Jhc2ggaXMgb2ZmCisjIDIwMjItMTItMDMgMjM6MDI6 NDQuODUyIFVUQyBbMTI5MDU4XSBMT0c6ICBkYXRhYmFzZSBzeXN0ZW0gaXMgc2h1dCBkb3duCisK KyMgZXZhbCB7ZXhlY3V0ZV9yZWdyZXNzX3Rlc3QoJHB1Yl9ub2RlLCAkc3ViX25vZGUpO307Cisj IGlmICgkQCBuZSAiIikKKyMgeworIyAgICAgZmFpbCgkQCk7CisjIH0KKworIyBDbG9zZSBub2Rl cworJHB1Yl9ub2RlLT5zdG9wOworJHN1Yl9ub2RlLT5zdG9wOworCitwYXNzKCJyZWdyZXNzc2lv biB0ZXN0IHBhc3NlZCIpOworCitkb25lX3Rlc3RpbmcoKTsKXCBObyBuZXdsaW5lIGF0IGVuZCBv ZiBmaWxlCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfZGRsX2RlcGFyc2VfcmVn cmVzcy90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3MtLTEuMC5zcWwgYi9zcmMvdGVzdC9tb2R1bGVz L3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcy90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3MtLTEuMC5z cWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uMTQwNzBjZDUxZgotLS0g L2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNz L3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcy0tMS4wLnNxbApAQCAtMCwwICsxLDkgQEAKKy8qIHNy Yy90ZXN0L21vZHVsZXMvdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzL3Rlc3RfZGRsX2RlcGFyc2Vf cmVncmVzcy0tMS4wLnNxbCAqLworCistLSBjb21wbGFpbiBpZiBzY3JpcHQgaXMgc291cmNlZCBp biBwc3FsLCByYXRoZXIgdGhhbiB2aWEgQ1JFQVRFIEVYVEVOU0lPTgorXGVjaG8gVXNlICJDUkVB VEUgRVhURU5TSU9OIHRlc3RfZGRsX2RlcGFyc2VfcmVncmVzcyIgdG8gbG9hZCB0aGlzIGZpbGUu IFxxdWl0CisKK0NSRUFURSBGVU5DVElPTiBkZXBhcnNlX2Ryb3BfZGRsKElOIG9iamlkZW50aXR5 IHRleHQsCisgICAgSU4gb2JqZWN0dHlwZSB0ZXh0KQorICBSRVRVUk5TIHRleHQgSU1NVVRBQkxF IFNUUklDVAorICBBUyAnTU9EVUxFX1BBVEhOQU1FJyBMQU5HVUFHRSBDOwpcIE5vIG5ld2xpbmUg YXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9kZGxfZGVw YXJzZV9yZWdyZXNzL3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcy5jIGIvc3JjL3Rlc3QvbW9kdWxl cy90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3MvdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzLmMKbmV3 IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uYmQ2OTkyYmRmZAotLS0gL2Rldi9u dWxsCisrKyBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzL3Rlc3Rf ZGRsX2RlcGFyc2VfcmVncmVzcy5jCkBAIC0wLDAgKzEsNTkgQEAKKy8qLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor ICogdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzLmMKKyAqCQlTdXBwb3J0IGZ1bmN0aW9ucyBmb3Ig dGhlIHRlc3RfZGRsX2RlcGFyc2VfcmVncmVzcyBtb2R1bGUKKyAqCisgKiBDb3B5cmlnaHQgKGMp IDIwMTQtMjAyMiwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqCisgKiBJ REVOVElGSUNBVElPTgorICoJICBzcmMvdGVzdC9tb2R1bGVzL3Rlc3RfZGRsX2RlcGFyc2VfcmVn cmVzcy90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3MuYworICotLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKyNp bmNsdWRlICJwb3N0Z3Jlcy5oIgorCisjaW5jbHVkZSAiY2F0YWxvZy9wZ190eXBlLmgiCisjaW5j bHVkZSAiZnVuY2FwaS5oIgorI2luY2x1ZGUgIm5vZGVzL2V4ZWNub2Rlcy5oIgorI2luY2x1ZGUg InRjb3AvZGVwYXJzZV91dGlsaXR5LmgiCisjaW5jbHVkZSAidGNvcC91dGlsaXR5LmgiCisjaW5j bHVkZSAidXRpbHMvYnVpbHRpbnMuaCIKKyNpbmNsdWRlICJ0Y29wL2RkbF9kZXBhcnNlLmgiCisK K1BHX01PRFVMRV9NQUdJQzsKKworUEdfRlVOQ1RJT05fSU5GT19WMShkZXBhcnNlX2Ryb3BfZGRs KTsKKworLyoKKyAqIEdpdmVuIG9iamVjdF9pZGVudGl0eSBhbmQgb2JqZWN0X3R5cGUgb2YgZHJv cHBlZCBvYmplY3QsIHJldHVybiBhIEpTT04gcmVwcmVzZW50YXRpb24gb2YgRFJPUCBjb21tYW5k LgorICovCitEYXR1bQorZGVwYXJzZV9kcm9wX2RkbChQR19GVU5DVElPTl9BUkdTKQoreworCXRl eHQJICAgKm9iamlkZW50aXR5ID0gUEdfR0VUQVJHX1RFWFRfUCgwKTsKKwljb25zdCBjaGFyCSAg ICpvYmppZGVudGl0eV9zdHIgPSB0ZXh0X3RvX2NzdHJpbmcob2JqaWRlbnRpdHkpOworCXRleHQJ ICAgKm9iamVjdHR5cGUgPSBQR19HRVRBUkdfVEVYVF9QKDEpOworCWNvbnN0IGNoYXIJICAgKm9i amVjdHR5cGVfc3RyID0gdGV4dF90b19jc3RyaW5nKG9iamVjdHR5cGUpOworCisJY2hhcgkJICAg KmNvbW1hbmQ7CisKKwkvLyBjb25zdHJhaW50IGlzIHBhcnQgb2YgYWx0ZXIgdGFibGUgY29tbWFu ZCwgbm8gbmVlZCB0byBkcm9wIGluIERST1AgY29tbWFuZAorCWlmIChzdHJjbXAob2JqZWN0dHlw ZV9zdHIsICJ0YWJsZSBjb25zdHJhaW50IikgPT0gMCkgeworCQlQR19SRVRVUk5fTlVMTCgpOwor CX0gZWxzZSBpZiAoc3RyY21wKG9iamVjdHR5cGVfc3RyLCAidG9hc3QgdGFibGUiKSA9PSAwKSB7 CisJCW9iamVjdHR5cGVfc3RyID0gInRhYmxlIjsKKwl9ICBlbHNlIGlmIChzdHJjbXAob2JqZWN0 dHlwZV9zdHIsICJkZWZhdWx0IHZhbHVlIikgPT0gMCkgeworCQlQR19SRVRVUk5fTlVMTCgpOwor CX0gZWxzZSBpZiAoc3RyY21wKG9iamVjdHR5cGVfc3RyLCAib3BlcmF0b3Igb2YgYWNjZXNzIG1l dGhvZCIpID09IDApIHsKKwkJUEdfUkVUVVJOX05VTEwoKTsKKwl9IGVsc2UgaWYgKHN0cmNtcChv YmplY3R0eXBlX3N0ciwgImZ1bmN0aW9uIG9mIGFjY2VzcyBtZXRob2QiKSA9PSAwKSB7CisJCVBH X1JFVFVSTl9OVUxMKCk7CisJfSBlbHNlIGlmIChzdHJjbXAob2JqZWN0dHlwZV9zdHIsICJ0YWJs ZSBjb2x1bW4iKSA9PSAwKSB7CisJCVBHX1JFVFVSTl9OVUxMKCk7CisJfQorCisJY29tbWFuZCA9 IGRlcGFyc2VfZHJvcF9jb21tYW5kKG9iamlkZW50aXR5X3N0ciwgb2JqZWN0dHlwZV9zdHIsIERS T1BfQ0FTQ0FERSk7CisKKwlpZiAoY29tbWFuZCkKKwkJUEdfUkVUVVJOX1RFWFRfUChjc3RyaW5n X3RvX3RleHQoY29tbWFuZCkpOworCisJUEdfUkVUVVJOX05VTEwoKTsKK30KXCBObyBuZXdsaW5l IGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfZGRsX2Rl cGFyc2VfcmVncmVzcy90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3MuY29udHJvbCBiL3NyYy90ZXN0 L21vZHVsZXMvdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzL3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVz cy5jb250cm9sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLmExZjkzNGU2 NTgKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfZGRsX2RlcGFyc2Vf cmVncmVzcy90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3MuY29udHJvbApAQCAtMCwwICsxLDQgQEAK K2NvbW1lbnQgPSAnVGVzdCBjb2RlIGZvciBEREwgZGVwYXJzZSByZWdyZXNzIGZlYXR1cmUnCitk ZWZhdWx0X3ZlcnNpb24gPSAnMS4wJworbW9kdWxlX3BhdGhuYW1lID0gJyRsaWJkaXIvdGVzdF9k ZGxfZGVwYXJzZV9yZWdyZXNzJworcmVsb2NhdGFibGUgPSB0cnVlCi0tIAoyLjM4LjEKCg== --000000000000e219be05f0eb1648 Content-Type: application/octet-stream; name="v58-0005-Support-DDL-replication.patch" Content-Disposition: attachment; filename="v58-0005-Support-DDL-replication.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lc88sdn04 RnJvbSA2MTdkMTQ4MTMwNThmZGMwOTFjNWMyYzY5ODhiMWZjNGEzNTE1YzQ4IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiAiWmhlbmcgKFphbmUpIExpIiA8emhlbGxpQGFtYXpvbi5jb20+ CkRhdGU6IFdlZCwgMjggRGVjIDIwMjIgMjI6MzQ6MDkgKzAwMDAKU3ViamVjdDogW1BBVENIIDUv NV0gU3VwcG9ydCBEREwgcmVwbGljYXRpb24uCgpUbyBzdXBwb3J0IERETCByZXBsaWNhdGlvbiwg d2UgdXNlIGV2ZW50IHRyaWdnZXIgYW5kIERETCBkZXBhcnNpbmcKZmFjaWxpdGllcy4gRHVyaW5n IENSRUFURSBQVUJMSUNBVElPTiB3ZSByZWdpc3RlciBhIGNvbW1hbmQgZW5kIHRyaWdnZXIgdGhh dApkZXBhcnNlcyB0aGUgRERMIChpZiB0aGUgRERMIGlzIGFubm90YXRlZCBhcyBkZGxyZXBsb2sg Zm9yIERETCByZXBsaWNhdGlvbiBpbgpjbWR0YWdsaXN0LmgpIGFzIGEgSlNPTiBibG9iLCBhbmQg V0FMIGxvZ3MgaXQuIFRoZSBldmVudCB0cmlnZ2VyIGlzIGF1dG9tYXRpY2FsbHkKcmVtb3ZlZCBh dCB0aGUgdGltZSBvZiBEUk9QIFBVQkxJQ0FUSU9OLiBUaGUgV0FMU2VuZGVyIGRlY29kZXMgdGhl IFdBTCBhbmQgc2VuZHMKaXQgZG93bnN0cmVhbSBzaW1pbGFyIHRvIG90aGVyIERNTCBjb21tYW5k cy4gVGhlIHN1YnNjcmliZXIgdGhlbiBjb252ZXJ0cyBKU09OCmJhY2sgdG8gdGhlIERETCBjb21t YW5kIHN0cmluZyBhbmQgZXhlY3V0ZXMgaXQuIEluIHRoZSBzdWJzY3JpYmVyLCB3ZSBhbHNvIGFk ZAp0aGUgbmV3bHkgYWRkZWQgcmVsIHRvIHBnX3N1YnNjcmlwdGlvbl9yZWwgc28gdGhhdCB0aGUg RE1MIGNoYW5nZXMgb24gdGhlIG5ldwp0YWJsZSBjYW4gYmUgcmVwbGljYXRlZCB3aXRob3V0IGhh dmluZyB0byBtYW51YWxseSBydW4KIkFMVEVSIFNVQlNDUklQVElPTiAuLi4gUkVGUkVTSCBQVUJM SUNBVElPTiIuCgotIEZvciBub24tcmV3cml0ZSBBTFRFUiBvYmplY3QgY29tbWFuZCBhbmQKLSAg ICAgQ1JFQVRFIG9iamVjdCBjb21tYW5kOgp3ZSBkZXBhcnNlIHRoZSBjb21tYW5kIGF0IGRkbF9j b21tYW5kX2VuZCBldmVudCB0cmlnZ2VyIGFuZCBXQUwgbG9nIHRoZQpkZXBhcnNlZCBqc29uIHN0 cmluZy4gVGhlIFdBTFNlbmRlciBkZWNvZGVzIHRoZSBXQUwgYW5kIHNlbmRzIGl0IHRvCnN1YnNj cmliZXIgaWYgdGhlIGNyZWF0ZWQvYWx0ZXJlZCB0YWJsZSBpcyBwdWJsaXNoZWQuIEl0IHN1cHBv cnRzIG1vc3Qgb2YKQUxURVIgVEFCTEUgY29tbWFuZCBleGNlcHQgc29tZSBjb21tYW5kcyhEREwg cmVsYXRlZCB0byBQQVJUSVRJT05FRCBUQUJMRQouLi4pIHRoYXQgaW50cm9kdWNlZCByZWNlbnRs eSB3aGljaCBoYXZlbid0IGJlZW4gc3VwcG9ydGVkIGJ5IHRoZSBjdXJyZW50CmRkbF9kZXBhcnNl ciwgd2Ugd2lsbCBzdXBwb3J0IHRoYXQgbGF0ZXIuCgotIEZvciBEUk9QIG9iamVjdDoKVGhlICdj b21tYW5kIHN0YXJ0JyBldmVudCBoYW5kbGVyIGxvZ3MgYSBkZGwgbWVzc2FnZSB3aXRoIHRoZSBy ZWxpZHMgb2YKdGhlIHRhYmxlcyB0aGF0IGFyZSBkcm9wcGVkIHdoaWNoIHRoZSBvdXRwdXQgcGx1 Z2luIChwZ291dHB1dCkgc3RvcmVzIGluCml0cyBpbnRlcm5hbCBkYXRhIHN0cnVjdHVyZSBhZnRl ciB2ZXJpZnlpbmcgdGhhdCBpdCBpcyBmb3IgYSB0YWJsZSB0aGF0IGlzCnBhcnQgb2YgdGhlIHB1 YmxpY2F0aW9uLiBMYXRlciB0aGUgJ2NvbW1hbmQgZW5kJyBldmVudCBoYW5kbGVyIHNlbmRzIHRo ZQphY3R1YWwgZHJvcCBtZXNzYWdlLiBQZ291dHB1dCBvbiByZWNlaXZpbmcgdGhlIGNvbW1hbmQg ZW5kLCBvbmx5IHNlbmRzIG91dAp0aGUgZHJvcCBjb21tYW5kIG9ubHkgaWYgaXQgaXMgZm9yIG9u ZSBvZiB0aGUgcmVsaWRzIG1hcmtlZCBmb3IgZGVsZXRpbmcuClRoZSByZWFzb24gd2UgaGF2ZSB0 byBkbyB0aGlzIGlzIGJlY2F1c2UsIG9uY2UgdGhlIGxvZ2ljYWwgZGVjb2RlcgpyZWNlaXZlcyB0 aGUgJ2NvbW1hbmQgZW5kJyBtZXNzYWdlLCAgdGhlIHJlbGlkIG9mIHRoZSB0YWJsZSBpcyBubyBs b25nZXIKdmFsaWQgYXMgaXQgaGFzIGJlZW4gZGVsZXRlZCBhcyBwYXJ0IG9mIGludmFsaWRhdGlv bnMgcmVjZWl2ZWQgZm9yIHRoZQpkcm9wIHRhYmxlIGNvbW1hbmQuIEl0IGlzIG5vIGxvbmdlciBw b3NzaWJsZSB0byB2ZXJpZnkgaWYgdGhlIHRhYmxlIGlzCnBhcnQgb2YgdGhlIHB1YmxpY2F0aW9u IGxpc3Qgb3Igbm90LiBUbyBtYWtlIHRoaXMgcG9zc2libGUsIEkgaGF2ZSBhZGRlZAp0d28gbW9y ZSBlbGVtZW50cyB0byB0aGUgZGRsIHhsb2cgYW5kIGRkbCBtZXNzYWdlLCAocmVsaWQgYW5kIGNt ZHR5cGUpLgoKV2UgY291bGQgaGF2ZSBhbHNvIGhhbmRsZWQgYWxsIHRoaXMgb24gdGhlIHN1YnNj cmliZXIgc2lkZSBhcyB3ZWxsLCBidXQKdGhhdCB3b3VsZCBtZWFuIHNlbmRpbmcgc3B1cmlvdXMg ZGRsIG1lc3NhZ2VzIGZvciB0YWJsZXMgdGhhdCBhcmUgbm90IHBhcnQKb2YgdGhlIHB1YmxpY2F0 aW9uLgoKLSBGb3IgdGFibGVfcmV3cml0ZSBBTFRFUiBUQUJMRSBjb21tYW5kOgooQUxURVIgQ09M VU1OIFRZUEUsIEFERCBDT0xVTU4gREVGQVVMVCwgU0VUIExPR0dFRCwgU0VUIEFDQ0VTUyBNRVRI T0QpCgp3ZSBkZXBhcnNlIHRoZSBjb21tYW5kIGFuZCBXQUwgbG9nIHRoZSBkZXBhcnNlZCBqc29u IHN0cmluZyBhdAp0YWJsZV9yZXdyaXRlIGV2ZW50IHRyaWdnZXIuIFRoZSBXQUxTZW5kZXIgZGVj b2RlcyB0aGUgV0FMIGFuZCBzZW5kcyBpdCB0bwpzdWJzY3JpYmVyIGlmIHRoZSBhbHRlcmVkIHRh YmxlIGlzIHB1Ymxpc2hlZC4gVGhlbiwgdGhlIFdBTFNlbmRlciB3aWxsCmNvbnZlcnQgdGhlIHVw Y29taW5nIHJld3JpdGUgSU5TRVJUcyB0byBVUERBVEVzIGFuZCBzZW5kIHRoZW0gdG8Kc3Vic2Ny aWJlciBzbyB0aGF0IHRoZSBkYXRhIGJldHdlZW4gcHVibGlzaGVyIGFuZCBzdWJzY3JpYmVyIGNh biBhbHdheXMgYmUKY29uc2lzdGVudC4gTm90ZSB0aGF0IHRoZSB0YWJsZXMgdGhhdCBwdWJsaXNo IHJld3JpdGUgZGRsIG11c3QgaGF2ZSBhCnJlcGxpY2EgaWRlbnRpdHkgY29uZmlndXJlZCBpbiBv cmRlciB0byBiZSBhYmxlIHRvIHJlcGxpY2F0ZSB0aGUgdXBjb21pbmcKcmV3cml0ZSBVUERBVEVz LgoKV2UgZG8gdGhpcyB3YXkgYmVjYXVzZSBvZiB0d28gcmVhc29uOgooMSkgVGhlIGRhdGEgYmVm b3JlIHRoZSByZXdyaXRlIGRkbCBjb3VsZCBhbHJlYWR5IGJlIGRpZmZlcmVudCBhbW9uZwpwdWJs aXNoZXIgYW5kIHN1YnNjcmliZXIuIFRvIG1ha2Ugc3VyZSB0aGUgZXh0cmEgZGF0YSBpbiBzdWJz Y3JpYmVyIHdoaWNoCmRvZXNuJ3QgZXhpc3QgaW4gcHVibGlzaGVyIGFsc28gZ2V0IHJld3JpdHRl biwgd2UgbmVlZCB0byBsZXQgdGhlCnN1YnNjcmliZXIgZXhlY3V0ZSB0aGUgb3JpZ2luYWwgcmV3 cml0ZSBkZGwgdG8gcmV3cml0ZSBhbGwgdGhlIGRhdGEgYXQKZmlyc3QuCgooMikgdGhlIGRhdGEg YWZ0ZXIgZXhlY3V0aW5nIHJld3JpdGUgZGRsIGNvdWxkIGJlIGRpZmZlcmVudCBhbW9uZwpwdWJs aXNoZXIgYW5kIHN1YnNjcmliZXIoZHVlIHRvIGRpZmZlcmVudCBmdW5jdGlvbnMvb3BlcmF0b3Jz IHVzZWQgZHVyaW5nCnJld3JpdGUpLCBzbyB3ZSBuZWVkIHRvIHJlcGxpY2F0ZSB0aGUgcmV3cml0 ZSBVUERBVEVzIHRvIGtlZXAgdGhlIGRhdGEKY29uc2lzdGVudC4KClRPIElNUFJPVkU6ClRoaXMg YXBwcm9hY2ggY291bGQgYmUgaW1wcm92ZWQgYnkgbGV0dGluZyB0aGUgc3Vic2NyaWJlciB0cnkg dG8gdXBkYXRlCnRoZSBleHRyYSBkYXRhIGl0c2VsZiBpbnN0ZWFkIG9mIGRvaW5nIGZ1bGx5IHJl d3JpdGUgZGRsIGFuZCB1c2UgdGhlCnVwY29taW5nIHJld3JpdGUgVVBEQVRFcyB0byByZXdyaXRl IHRoZSByZXN0IGRhdGEuIFRvIGFjaGlldmUgdGhpcywgd2UKY291bGQgbW9kaWZ5IHRoZSBkZXBh cnNlZCBqc29uIHN0cmluZyB0byB0ZW1wb3JhcmlseSByZW1vdmUgdGhlIHJld3JpdGUKcGFydCBh bmQgYWRkIHNvbWUgbG9naWMgaW4gc3Vic2NyaWJlciB0byB1cGRhdGUgdGhlIGV4dHJhIGRhdGEu CkJlc2lkZXMsIHdlIG1heSBub3QgbmVlZCB0byBzZW5kIHJld3JpdGUgY2hhbmdlcyBmb3IgYWxs IHR5cGUgb2YgcmV3cml0ZQpkZGwsIGZvciBleGFtcGxlLCBpdCBzZWVtcyBmaW5lIHRvIHNraXAg c2VuZGluZyByZXdyaXRlIGNoYW5nZXMgZm9yIEFMVEVSClRBQkxFIFNFVCBMT0dHRUQgYXMgdGhl IGRhdGEgaW4gdGhlIHRhYmxlIGRvZXNuJ3QgYWN0dWFsbHkgYmUgY2hhbmdlZC4gV2UKY291bGQg dXNlIHRoZSBkZXBhcnNlciBhbmQgZXZlbnQgdHJpZ2dlciB0byBmaWx0ZXIgdGhlc2UgZGRscyBh bmQgc2tpcApzZW5kaW5nIHJld3JpdGUgY2hhbmdlcyBmb3IgdGhlbS4KLS0tCiBzcmMvYmFja2Vu ZC9jYXRhbG9nL3BnX3B1YmxpY2F0aW9uLmMgICAgICAgICAgfCAgIDEgKwogc3JjL2JhY2tlbmQv Y29tbWFuZHMvY3JlYXRlYXMuYyAgICAgICAgICAgICAgIHwgIDEwICsKIHNyYy9iYWNrZW5kL2Nv bW1hbmRzL2V2ZW50X3RyaWdnZXIuYyAgICAgICAgICB8IDI4MyArKysrKysrKysrLQogc3JjL2Jh Y2tlbmQvY29tbWFuZHMvcHVibGljYXRpb25jbWRzLmMgICAgICAgIHwgIDg5ICsrKysKIHNyYy9i YWNrZW5kL2NvbW1hbmRzL3RhYmxlY21kcy5jICAgICAgICAgICAgICB8ICAxMCArLQogc3JjL2Jh Y2tlbmQvcGFyc2VyL3BhcnNlX3V0aWxjbWQuYyAgICAgICAgICAgIHwgICAxICsKIHNyYy9iYWNr ZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvTWFrZWZpbGUgICAgICB8ICAgMSArCiBzcmMvYmFja2Vu ZC9yZXBsaWNhdGlvbi9sb2dpY2FsL2RkbHRyaWdnZXIuYyAgfCAzNTYgKysrKysrKysrKysrKysK IHNyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvbG9naWNhbC5jICAgICB8ICA0OSArKwog c3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9tZXNvbi5idWlsZCAgIHwgICAxICsKIHNy Yy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvcHJvdG8uYyAgICAgICB8ICA0MyArKwogLi4u L3JlcGxpY2F0aW9uL2xvZ2ljYWwvcmVvcmRlcmJ1ZmZlci5jICAgICAgIHwgIDIwICstCiBzcmMv YmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3dvcmtlci5jICAgICAgfCAyNDAgKysrKysrKysr CiBzcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9wZ291dHB1dC9wZ291dHB1dC5jICAgfCAxODggKysr KysrLQogc3JjL2JhY2tlbmQvdGNvcC9jbWR0YWcuYyAgICAgICAgICAgICAgICAgICAgIHwgIDI2 ICstCiBzcmMvYmFja2VuZC90Y29wL3V0aWxpdHkuYyAgICAgICAgICAgICAgICAgICAgfCAgIDMg Kwogc3JjL2JhY2tlbmQvdXRpbHMvY2FjaGUvZXZ0Y2FjaGUuYyAgICAgICAgICAgIHwgICAyICsK IHNyYy9iYWNrZW5kL3V0aWxzL2NhY2hlL3JlbGNhY2hlLmMgICAgICAgICAgICB8ICAgMSArCiBz cmMvYmluL3BnX2R1bXAvcGdfZHVtcC5jICAgICAgICAgICAgICAgICAgICAgfCAgMjEgKy0KIHNy Yy9iaW4vcGdfZHVtcC9wZ19kdW1wLmggICAgICAgICAgICAgICAgICAgICB8ICAgMSArCiBzcmMv YmluL3BzcWwvZGVzY3JpYmUuYyAgICAgICAgICAgICAgICAgICAgICAgfCAgMzMgKy0KIHNyYy9p bmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQgICAgICAgICAgICAgICB8ICAxMiArCiBzcmMvaW5j bHVkZS9jYXRhbG9nL3BnX3B1YmxpY2F0aW9uLmggICAgICAgICAgfCAgIDQgKwogc3JjL2luY2x1 ZGUvY29tbWFuZHMvZXZlbnRfdHJpZ2dlci5oICAgICAgICAgIHwgIDExICstCiBzcmMvaW5jbHVk ZS9yZXBsaWNhdGlvbi9sb2dpY2FscHJvdG8uaCAgICAgICAgfCAgIDQgKwogc3JjL2luY2x1ZGUv cmVwbGljYXRpb24vb3V0cHV0X3BsdWdpbi5oICAgICAgIHwgIDE1ICstCiBzcmMvaW5jbHVkZS9y ZXBsaWNhdGlvbi9wZ291dHB1dC5oICAgICAgICAgICAgfCAgIDEgKwogc3JjL2luY2x1ZGUvcmVw bGljYXRpb24vcmVvcmRlcmJ1ZmZlci5oICAgICAgIHwgIDEyICsKIHNyYy9pbmNsdWRlL3Rjb3Av Y21kdGFnLmggICAgICAgICAgICAgICAgICAgICB8ICAgNCArLQogc3JjL2luY2x1ZGUvdGNvcC9j bWR0YWdsaXN0LmggICAgICAgICAgICAgICAgIHwgMzg2ICsrKysrKystLS0tLS0tLQogc3JjL2lu Y2x1ZGUvdXRpbHMvZXZ0Y2FjaGUuaCAgICAgICAgICAgICAgICAgIHwgICAzICstCiAuLi4vZXhw ZWN0ZWQvY3JlYXRlX3RhYmxlLm91dCAgICAgICAgICAgICAgICAgfCAgIDcgKwogLi4uL3NxbC9j cmVhdGVfdGFibGUuc3FsICAgICAgICAgICAgICAgICAgICAgIHwgICAxICsKIHNyYy90ZXN0L3Jl Z3Jlc3MvZXhwZWN0ZWQvcHNxbC5vdXQgICAgICAgICAgICB8ICAgNiArLQogc3JjL3Rlc3QvcmVn cmVzcy9leHBlY3RlZC9wdWJsaWNhdGlvbi5vdXQgICAgIHwgNDIwICsrKysrKysrLS0tLS0tLS0K IC4uLi9zdWJzY3JpcHRpb24vdC8wMzJfZGRsX3JlcGxpY2F0aW9uLnBsICAgICB8IDQ2NSArKysr KysrKysrKysrKysrKysKIHNyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0ICAgICAgICAg ICAgICB8ICAgNSArCiAzNyBmaWxlcyBjaGFuZ2VkLCAyMjkzIGluc2VydGlvbnMoKyksIDQ0MiBk ZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9s b2dpY2FsL2RkbHRyaWdnZXIuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy90ZXN0L3N1YnNjcmlw dGlvbi90LzAzMl9kZGxfcmVwbGljYXRpb24ucGwKCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9j YXRhbG9nL3BnX3B1YmxpY2F0aW9uLmMgYi9zcmMvYmFja2VuZC9jYXRhbG9nL3BnX3B1YmxpY2F0 aW9uLmMKaW5kZXggNTk5NjcwOThiMy4uNzIxZDAyM2FhNSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tl bmQvY2F0YWxvZy9wZ19wdWJsaWNhdGlvbi5jCisrKyBiL3NyYy9iYWNrZW5kL2NhdGFsb2cvcGdf cHVibGljYXRpb24uYwpAQCAtMTAwNSw2ICsxMDA1LDcgQEAgR2V0UHVibGljYXRpb24oT2lkIHB1 YmlkKQogCXB1Yi0+cHViYWN0aW9ucy5wdWJ1cGRhdGUgPSBwdWJmb3JtLT5wdWJ1cGRhdGU7CiAJ cHViLT5wdWJhY3Rpb25zLnB1YmRlbGV0ZSA9IHB1YmZvcm0tPnB1YmRlbGV0ZTsKIAlwdWItPnB1 YmFjdGlvbnMucHVidHJ1bmNhdGUgPSBwdWJmb3JtLT5wdWJ0cnVuY2F0ZTsKKwlwdWItPnB1YmFj dGlvbnMucHViZGRsID0gcHViZm9ybS0+cHViZGRsOwogCXB1Yi0+cHVidmlhcm9vdCA9IHB1YmZv cm0tPnB1YnZpYXJvb3Q7CiAKIAlSZWxlYXNlU3lzQ2FjaGUodHVwKTsKZGlmZiAtLWdpdCBhL3Ny Yy9iYWNrZW5kL2NvbW1hbmRzL2NyZWF0ZWFzLmMgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9jcmVh dGVhcy5jCmluZGV4IDE1MmMyOWI1NTEuLmI3Nzk1ZGE4N2QgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNr ZW5kL2NvbW1hbmRzL2NyZWF0ZWFzLmMKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvY3JlYXRl YXMuYwpAQCAtMzQsNiArMzQsNyBAQAogI2luY2x1ZGUgImNhdGFsb2cvbmFtZXNwYWNlLmgiCiAj aW5jbHVkZSAiY2F0YWxvZy90b2FzdGluZy5oIgogI2luY2x1ZGUgImNvbW1hbmRzL2NyZWF0ZWFz LmgiCisjaW5jbHVkZSAiY29tbWFuZHMvZXZlbnRfdHJpZ2dlci5oIgogI2luY2x1ZGUgImNvbW1h bmRzL21hdHZpZXcuaCIKICNpbmNsdWRlICJjb21tYW5kcy9wcmVwYXJlLmgiCiAjaW5jbHVkZSAi Y29tbWFuZHMvdGFibGVjbWRzLmgiCkBAIC0xNDMsNiArMTQ0LDE1IEBAIGNyZWF0ZV9jdGFzX2lu dGVybmFsKExpc3QgKmF0dHJMaXN0LCBJbnRvQ2xhdXNlICppbnRvKQogCQlTdG9yZVZpZXdRdWVy eShpbnRvUmVsYXRpb25BZGRyLm9iamVjdElkLCBxdWVyeSwgZmFsc2UpOwogCQlDb21tYW5kQ291 bnRlckluY3JlbWVudCgpOwogCX0KKwllbHNlCisJeworCQkvKgorCQkgKiBGaXJlIHRoZSB0cmln Z2VyIGZvciB0YWJsZV9pbml0X3dyaXRlIGFmdGVyIGNyZWF0aW5nIHRoZSB0YWJsZSBzbworCQkg KiB0aGF0IHdlIGNhbiBhY2Nlc3MgdGhlIGNhdGFsb2cgaW5mbyBhYm91dCB0aGUgbmV3bHkgY3Jl YXRlZCB0YWJsZQorCQkgKiBpbiB0aGUgdHJpZ2dlciBmdW5jdGlvbi4KKwkJICovCisJCUV2ZW50 VHJpZ2dlclRhYmxlSW5pdFdyaXRlKChOb2RlICopIGNyZWF0ZSwgaW50b1JlbGF0aW9uQWRkcik7 CisJfQogCiAJcmV0dXJuIGludG9SZWxhdGlvbkFkZHI7CiB9CmRpZmYgLS1naXQgYS9zcmMvYmFj a2VuZC9jb21tYW5kcy9ldmVudF90cmlnZ2VyLmMgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9ldmVu dF90cmlnZ2VyLmMKaW5kZXggZWZmMTVjMDVkYi4uYWZiNGI3ZTg0MyAxMDA2NDQKLS0tIGEvc3Jj L2JhY2tlbmQvY29tbWFuZHMvZXZlbnRfdHJpZ2dlci5jCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1h bmRzL2V2ZW50X3RyaWdnZXIuYwpAQCAtMzcsOCArMzcsMTEgQEAKICNpbmNsdWRlICJtaXNjYWRt aW4uaCIKICNpbmNsdWRlICJwYXJzZXIvcGFyc2VfZnVuYy5oIgogI2luY2x1ZGUgInBnc3RhdC5o IgorI2luY2x1ZGUgInJlcGxpY2F0aW9uL2RkbG1lc3NhZ2UuaCIKKyNpbmNsdWRlICJyZXBsaWNh dGlvbi9tZXNzYWdlLmgiCiAjaW5jbHVkZSAidGNvcC9kZXBhcnNlX3V0aWxpdHkuaCIKICNpbmNs dWRlICJ0Y29wL3V0aWxpdHkuaCIKKyNpbmNsdWRlICJ0Y29wL2RkbF9kZXBhcnNlLmgiCiAjaW5j bHVkZSAidXRpbHMvYWNsLmgiCiAjaW5jbHVkZSAidXRpbHMvYnVpbHRpbnMuaCIKICNpbmNsdWRl ICJ1dGlscy9ldnRjYWNoZS5oIgpAQCAtOTIsNyArOTUsOCBAQCBDcmVhdGVFdmVudFRyaWdnZXIo Q3JlYXRlRXZlbnRUcmlnU3RtdCAqc3RtdCkKIAlpZiAoc3RyY21wKHN0bXQtPmV2ZW50bmFtZSwg ImRkbF9jb21tYW5kX3N0YXJ0IikgIT0gMCAmJgogCQlzdHJjbXAoc3RtdC0+ZXZlbnRuYW1lLCAi ZGRsX2NvbW1hbmRfZW5kIikgIT0gMCAmJgogCQlzdHJjbXAoc3RtdC0+ZXZlbnRuYW1lLCAic3Fs X2Ryb3AiKSAhPSAwICYmCi0JCXN0cmNtcChzdG10LT5ldmVudG5hbWUsICJ0YWJsZV9yZXdyaXRl IikgIT0gMCkKKwkJc3RyY21wKHN0bXQtPmV2ZW50bmFtZSwgInRhYmxlX3Jld3JpdGUiKSAhPSAw ICYmCisJCXN0cmNtcChzdG10LT5ldmVudG5hbWUsICJ0YWJsZV9pbml0X3dyaXRlIikgIT0gMCkK IAkJZXJlcG9ydChFUlJPUiwKIAkJCQkoZXJyY29kZShFUlJDT0RFX1NZTlRBWF9FUlJPUiksCiAJ CQkJIGVycm1zZygidW5yZWNvZ25pemVkIGV2ZW50IG5hbWUgXCIlc1wiIiwKQEAgLTExOCw3ICsx MjIsOCBAQCBDcmVhdGVFdmVudFRyaWdnZXIoQ3JlYXRlRXZlbnRUcmlnU3RtdCAqc3RtdCkKIAkv KiBWYWxpZGF0ZSB0YWcgbGlzdCwgaWYgYW55LiAqLwogCWlmICgoc3RyY21wKHN0bXQtPmV2ZW50 bmFtZSwgImRkbF9jb21tYW5kX3N0YXJ0IikgPT0gMCB8fAogCQkgc3RyY21wKHN0bXQtPmV2ZW50 bmFtZSwgImRkbF9jb21tYW5kX2VuZCIpID09IDAgfHwKLQkJIHN0cmNtcChzdG10LT5ldmVudG5h bWUsICJzcWxfZHJvcCIpID09IDApCisJCSBzdHJjbXAoc3RtdC0+ZXZlbnRuYW1lLCAic3FsX2Ry b3AiKSA9PSAwIHx8CisJCSBzdHJjbXAoc3RtdC0+ZXZlbnRuYW1lLCAidGFibGVfaW5pdF93cml0 ZSIpID09IDApCiAJCSYmIHRhZ3MgIT0gTlVMTCkKIAkJdmFsaWRhdGVfZGRsX3RhZ3MoInRhZyIs IHRhZ3MpOwogCWVsc2UgaWYgKHN0cmNtcChzdG10LT5ldmVudG5hbWUsICJ0YWJsZV9yZXdyaXRl IikgPT0gMApAQCAtNTQ0LDcgKzU0OSw4IEBAIEV2ZW50VHJpZ2dlckNvbW1vblNldHVwKE5vZGUg KnBhcnNldHJlZSwKIAkJZGJndGFnID0gQ3JlYXRlQ29tbWFuZFRhZyhwYXJzZXRyZWUpOwogCQlp ZiAoZXZlbnQgPT0gRVZUX0RETENvbW1hbmRTdGFydCB8fAogCQkJZXZlbnQgPT0gRVZUX0RETENv bW1hbmRFbmQgfHwKLQkJCWV2ZW50ID09IEVWVF9TUUxEcm9wKQorCQkJZXZlbnQgPT0gRVZUX1NR TERyb3AgfHwKKwkJCWV2ZW50ID09IEVWVF9UYWJsZUluaXRXcml0ZSkKIAkJewogCQkJaWYgKCFj b21tYW5kX3RhZ19ldmVudF90cmlnZ2VyX29rKGRiZ3RhZykpCiAJCQkJZWxvZyhFUlJPUiwgInVu ZXhwZWN0ZWQgY29tbWFuZCB0YWcgXCIlc1wiIiwgR2V0Q29tbWFuZFRhZ05hbWUoZGJndGFnKSk7 CkBAIC04MjcsNiArODMzLDE0MSBAQCBFdmVudFRyaWdnZXJUYWJsZVJld3JpdGUoTm9kZSAqcGFy c2V0cmVlLCBPaWQgdGFibGVPaWQsIGludCByZWFzb24pCiAJQ29tbWFuZENvdW50ZXJJbmNyZW1l bnQoKTsKIH0KIAorCisvKgorICogRXZlbnRUcmlnZ2VyVGFibGVJbml0V3JpdGVTdGFydAorICog ICAgIFByZXBhcmUgdG8gcmVjZWl2ZSBkYXRhIG9uIGFuIENSRUFURSBUQUJMRSBBUy9TRUxFVCBJ TlRPIGNvbW1hbmQgYWJvdXQKKyAqICAgICB0byBiZSBleGVjdXRlZC4KKyAqLwordm9pZAorRXZl bnRUcmlnZ2VyVGFibGVJbml0V3JpdGVTdGFydChOb2RlICpwYXJzZXRyZWUpCit7CisJTWVtb3J5 Q29udGV4dCBvbGRjeHQ7CisJQ29sbGVjdGVkQ29tbWFuZCAqY29tbWFuZDsKKwlDcmVhdGVUYWJs ZUFzU3RtdCAqc3RtdCA9IChDcmVhdGVUYWJsZUFzU3RtdCAqKXBhcnNldHJlZTsKKworCS8qIGln bm9yZSBpZiBldmVudCB0cmlnZ2VyIGNvbnRleHQgbm90IHNldCwgb3IgY29sbGVjdGlvbiBkaXNh YmxlZCAqLworCWlmICghY3VycmVudEV2ZW50VHJpZ2dlclN0YXRlIHx8CisJCWN1cnJlbnRFdmVu dFRyaWdnZXJTdGF0ZS0+Y29tbWFuZENvbGxlY3Rpb25JbmhpYml0ZWQpCisJCXJldHVybjsKKwor CW9sZGN4dCA9IE1lbW9yeUNvbnRleHRTd2l0Y2hUbyhjdXJyZW50RXZlbnRUcmlnZ2VyU3RhdGUt PmN4dCk7CisKKwljb21tYW5kID0gcGFsbG9jKHNpemVvZihDb2xsZWN0ZWRDb21tYW5kKSk7CisK Kwljb21tYW5kLT50eXBlID0gKHN0bXQtPm9ianR5cGUgPT0gT0JKRUNUX1RBQkxFKSA/IFNDVF9D cmVhdGVUYWJsZUFzIDogU0NUX1NpbXBsZTsKKwljb21tYW5kLT5pbl9leHRlbnNpb24gPSBjcmVh dGluZ19leHRlbnNpb247CisJY29tbWFuZC0+ZC5jdGFzLmFkZHJlc3MgPSBJbnZhbGlkT2JqZWN0 QWRkcmVzczsKKwljb21tYW5kLT5kLmN0YXMucmVhbF9jcmVhdGUgPSBOVUxMOworCWNvbW1hbmQt PnBhcnNldHJlZSA9IGNvcHlPYmplY3QocGFyc2V0cmVlKTsKKworCWNvbW1hbmQtPnBhcmVudCA9 IGN1cnJlbnRFdmVudFRyaWdnZXJTdGF0ZS0+Y3VycmVudENvbW1hbmQ7CisJY3VycmVudEV2ZW50 VHJpZ2dlclN0YXRlLT5jdXJyZW50Q29tbWFuZCA9IGNvbW1hbmQ7CisKKwlNZW1vcnlDb250ZXh0 U3dpdGNoVG8ob2xkY3h0KTsKK30KKworLyoKKyAqIEV2ZW50VHJpZ2dlclRhYmxlSW5pdFdyaXRl RW5kCisgKgkJRmluaXNoIHVwIHNhdmluZyBhbiBDUkVBVEUgVEFCTEUgQVMvU0VMRUNUIElOVE8g Y29tbWFuZC4KKyAqCisgKiBGSVhNRSB0aGlzIEFQSSBpc24ndCBjb25zaWRlcmluZyB0aGUgcG9z c2liaWxpdHkgdGhhdCBhbiB4YWN0L3N1YnhhY3QgaXMKKyAqIGFib3J0ZWQgcGFydHdheSB0aHJv dWdoLiAgUHJvYmFibHkgaXQncyBiZXN0IHRvIGFkZCBhbgorICogQXRFT1N1YlhhY3RfRXZlbnRU cmlnZ2VycygpIHRvIGZpeCB0aGlzLgorICovCit2b2lkCitFdmVudFRyaWdnZXJUYWJsZUluaXRX cml0ZUVuZChPYmplY3RBZGRyZXNzIGFkZHJlc3MpCit7CisJQ29sbGVjdGVkQ29tbWFuZCAqcGFy ZW50OworCUNyZWF0ZVRhYmxlQXNTdG10ICpzdG10OworCisJLyogaWdub3JlIGlmIGV2ZW50IHRy aWdnZXIgY29udGV4dCBub3Qgc2V0LCBvciBjb2xsZWN0aW9uIGRpc2FibGVkICovCisJaWYgKCFj dXJyZW50RXZlbnRUcmlnZ2VyU3RhdGUgfHwKKwkJY3VycmVudEV2ZW50VHJpZ2dlclN0YXRlLT5j b21tYW5kQ29sbGVjdGlvbkluaGliaXRlZCkKKwkJcmV0dXJuOworCisJc3RtdCA9ICAoQ3JlYXRl VGFibGVBc1N0bXQgKiljdXJyZW50RXZlbnRUcmlnZ2VyU3RhdGUtPmN1cnJlbnRDb21tYW5kLT5w YXJzZXRyZWU7CisKKwlpZiAoc3RtdC0+b2JqdHlwZSA9PSBPQkpFQ1RfVEFCTEUpCisJeworCQlw YXJlbnQgPSBjdXJyZW50RXZlbnRUcmlnZ2VyU3RhdGUtPmN1cnJlbnRDb21tYW5kLT5wYXJlbnQ7 CisKKwkJcGZyZWUoY3VycmVudEV2ZW50VHJpZ2dlclN0YXRlLT5jdXJyZW50Q29tbWFuZCk7CisK KwkJY3VycmVudEV2ZW50VHJpZ2dlclN0YXRlLT5jdXJyZW50Q29tbWFuZCA9IHBhcmVudDsKKwl9 CisJZWxzZQorCXsKKwkJTWVtb3J5Q29udGV4dCBvbGRjeHQ7CisKKwkJb2xkY3h0ID0gTWVtb3J5 Q29udGV4dFN3aXRjaFRvKGN1cnJlbnRFdmVudFRyaWdnZXJTdGF0ZS0+Y3h0KTsKKworCQljdXJy ZW50RXZlbnRUcmlnZ2VyU3RhdGUtPmN1cnJlbnRDb21tYW5kLT5kLnNpbXBsZS5hZGRyZXNzID0g YWRkcmVzczsKKwkJY3VycmVudEV2ZW50VHJpZ2dlclN0YXRlLT5jb21tYW5kTGlzdCA9CisJCQls YXBwZW5kKGN1cnJlbnRFdmVudFRyaWdnZXJTdGF0ZS0+Y29tbWFuZExpc3QsCisJCQkJCWN1cnJl bnRFdmVudFRyaWdnZXJTdGF0ZS0+Y3VycmVudENvbW1hbmQpOworCisJCU1lbW9yeUNvbnRleHRT d2l0Y2hUbyhvbGRjeHQpOworCX0KK30KKworLyoKKyAqIEZpcmUgdGFibGVfaW5pdF9yZXdyaXRl IHRyaWdnZXJzLgorICovCit2b2lkCitFdmVudFRyaWdnZXJUYWJsZUluaXRXcml0ZShOb2RlICpy ZWFsX2NyZWF0ZSwgT2JqZWN0QWRkcmVzcyBhZGRyZXNzKQoreworCUxpc3QJICAgKnJ1bmxpc3Q7 CisJRXZlbnRUcmlnZ2VyRGF0YSB0cmlnZGF0YTsKKwlDb2xsZWN0ZWRDb21tYW5kICpjb21tYW5k OworCisJLyoKKwkgKiBTZWUgRXZlbnRUcmlnZ2VyRERMQ29tbWFuZFN0YXJ0IGZvciBhIGRpc2N1 c3Npb24gYWJvdXQgd2h5IGV2ZW50CisJICogdHJpZ2dlcnMgYXJlIGRpc2FibGVkIGluIHNpbmds ZSB1c2VyIG1vZGUuCisJICovCisJaWYgKCFJc1VuZGVyUG9zdG1hc3RlcikKKwkJcmV0dXJuOwor CisJLyoKKwkgKiBBbHNvIGRvIG5vdGhpbmcgaWYgb3VyIHN0YXRlIGlzbid0IHNldCB1cCwgd2hp Y2ggaXQgd29uJ3QgYmUgaWYgdGhlcmUKKwkgKiB3ZXJlbid0IGFueSByZWxldmFudCBldmVudCB0 cmlnZ2VycyBhdCB0aGUgc3RhcnQgb2YgdGhlIGN1cnJlbnQgRERMCisJICogY29tbWFuZC4gIFRo aXMgdGVzdCBtaWdodCB0aGVyZWZvcmUgc2VlbSBvcHRpb25hbCwgYnV0IGl0J3MKKwkgKiAqbmVj ZXNzYXJ5KiwgYmVjYXVzZSBFdmVudFRyaWdnZXJDb21tb25TZXR1cCBtaWdodCBmaW5kIHRyaWdn ZXJzIHRoYXQKKwkgKiBkaWRuJ3QgZXhpc3QgYXQgdGhlIHRpbWUgdGhlIGNvbW1hbmQgc3RhcnRl ZC4KKwkgKi8KKwlpZiAoIWN1cnJlbnRFdmVudFRyaWdnZXJTdGF0ZSkKKwkJcmV0dXJuOworCisJ LyogRG8gbm90aGluZyBpZiBubyBjb21tYW5kIHdhcyBjb2xsZWN0ZWQuICovCisJaWYgKCFjdXJy ZW50RXZlbnRUcmlnZ2VyU3RhdGUtPmN1cnJlbnRDb21tYW5kKQorCQlyZXR1cm47CisKKwljb21t YW5kID0gY3VycmVudEV2ZW50VHJpZ2dlclN0YXRlLT5jdXJyZW50Q29tbWFuZDsKKworCXJ1bmxp c3QgPSBFdmVudFRyaWdnZXJDb21tb25TZXR1cChjb21tYW5kLT5wYXJzZXRyZWUsCisJCQkJCQkJ CQkgIEVWVF9UYWJsZUluaXRXcml0ZSwKKwkJCQkJCQkJCSAgInRhYmxlX2luaXRfd3JpdGUiLAor CQkJCQkJCQkJICAmdHJpZ2RhdGEpOworCWlmIChydW5saXN0ID09IE5JTCkKKwkJcmV0dXJuOwor CisJLyogU2V0IHRoZSByZWFsIENyZWF0ZVRhYmxlIHN0YXRtZW50IGFuZCBvYmplY3QgYWRkcmVz cyAqLworCWNvbW1hbmQtPmQuY3Rhcy5yZWFsX2NyZWF0ZSA9IHJlYWxfY3JlYXRlOworCWNvbW1h bmQtPmQuY3Rhcy5hZGRyZXNzID0gYWRkcmVzczsKKworCS8qIFJ1biB0aGUgdHJpZ2dlcnMuICov CisJRXZlbnRUcmlnZ2VySW52b2tlKHJ1bmxpc3QsICZ0cmlnZGF0YSk7CisKKwkvKiBDbGVhbnVw LiAqLworCWxpc3RfZnJlZShydW5saXN0KTsKKworCS8qCisJICogTWFrZSBzdXJlIGFueXRoaW5n IHRoZSBldmVudCB0cmlnZ2VycyBkaWQgd2lsbCBiZSB2aXNpYmxlIHRvIHRoZSBtYWluCisJICog Y29tbWFuZC4KKwkgKi8KKwlDb21tYW5kQ291bnRlckluY3JlbWVudCgpOworfQorCiAvKgogICog SW52b2tlIGVhY2ggZXZlbnQgdHJpZ2dlciBpbiBhIGxpc3Qgb2YgZXZlbnQgdHJpZ2dlcnMuCiAg Ki8KQEAgLTExMDgsNyArMTI0OSw4IEBAIHRyYWNrRHJvcHBlZE9iamVjdHNOZWVkZWQodm9pZCkK IAkgKi8KIAlyZXR1cm4gKEV2ZW50Q2FjaGVMb29rdXAoRVZUX1NRTERyb3ApICE9IE5JTCkgfHwK IAkJKEV2ZW50Q2FjaGVMb29rdXAoRVZUX1RhYmxlUmV3cml0ZSkgIT0gTklMKSB8fAotCQkoRXZl bnRDYWNoZUxvb2t1cChFVlRfRERMQ29tbWFuZEVuZCkgIT0gTklMKTsKKwkJKEV2ZW50Q2FjaGVM b29rdXAoRVZUX0RETENvbW1hbmRFbmQpICE9IE5JTCkgfHwKKwkJKEV2ZW50Q2FjaGVMb29rdXAo RVZUX1RhYmxlSW5pdFdyaXRlKSAhPSBOSUwpOwogfQogCiAvKgpAQCAtMTQ5OSw2ICsxNjQxLDcg QEAgRXZlbnRUcmlnZ2VyQWx0ZXJUYWJsZVN0YXJ0KE5vZGUgKnBhcnNldHJlZSkKIAogCWNvbW1h bmQtPmQuYWx0ZXJUYWJsZS5jbGFzc0lkID0gUmVsYXRpb25SZWxhdGlvbklkOwogCWNvbW1hbmQt PmQuYWx0ZXJUYWJsZS5vYmplY3RJZCA9IEludmFsaWRPaWQ7CisJY29tbWFuZC0+ZC5hbHRlclRh YmxlLnJld3JpdGUgPSBmYWxzZTsKIAljb21tYW5kLT5kLmFsdGVyVGFibGUuc3ViY21kcyA9IE5J TDsKIAljb21tYW5kLT5wYXJzZXRyZWUgPSBjb3B5T2JqZWN0KHBhcnNldHJlZSk7CiAKQEAgLTE1 MzIsNyArMTY3NSw3IEBAIEV2ZW50VHJpZ2dlckFsdGVyVGFibGVSZWxpZChPaWQgb2JqZWN0SWQp CiAgKiBpbnRlcm5hbGx5LCBzbyB0aGF0J3MgYWxsIHRoYXQgdGhpcyBjb2RlIG5lZWRzIHRvIGhh bmRsZSBhdCB0aGUgbW9tZW50LgogICovCiB2b2lkCi1FdmVudFRyaWdnZXJDb2xsZWN0QWx0ZXJU YWJsZVN1YmNtZChOb2RlICpzdWJjbWQsIE9iamVjdEFkZHJlc3MgYWRkcmVzcykKK0V2ZW50VHJp Z2dlckNvbGxlY3RBbHRlclRhYmxlU3ViY21kKE5vZGUgKnN1YmNtZCwgT2JqZWN0QWRkcmVzcyBh ZGRyZXNzLCBib29sIHJld3JpdGUpCiB7CiAJTWVtb3J5Q29udGV4dCBvbGRjeHQ7CiAJQ29sbGVj dGVkQVRTdWJjbWQgKm5ld3N1YjsKQEAgLTE1NTIsMTIgKzE2OTUsMTQwIEBAIEV2ZW50VHJpZ2dl ckNvbGxlY3RBbHRlclRhYmxlU3ViY21kKE5vZGUgKnN1YmNtZCwgT2JqZWN0QWRkcmVzcyBhZGRy ZXNzKQogCW5ld3N1Yi0+YWRkcmVzcyA9IGFkZHJlc3M7CiAJbmV3c3ViLT5wYXJzZXRyZWUgPSBj b3B5T2JqZWN0KHN1YmNtZCk7CiAKKwljdXJyZW50RXZlbnRUcmlnZ2VyU3RhdGUtPmN1cnJlbnRD b21tYW5kLT5kLmFsdGVyVGFibGUucmV3cml0ZSB8PSByZXdyaXRlOwogCWN1cnJlbnRFdmVudFRy aWdnZXJTdGF0ZS0+Y3VycmVudENvbW1hbmQtPmQuYWx0ZXJUYWJsZS5zdWJjbWRzID0KIAkJbGFw cGVuZChjdXJyZW50RXZlbnRUcmlnZ2VyU3RhdGUtPmN1cnJlbnRDb21tYW5kLT5kLmFsdGVyVGFi bGUuc3ViY21kcywgbmV3c3ViKTsKIAogCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhvbGRjeHQpOwog fQogCisvKgorICogRXZlbnRUcmlnZ2VyQWx0ZXJUeXBlU3RhcnQKKyAqCQlTYXZlIGRhdGEgYWJv dXQgYSBzaW5nbGUgcGFydCBvZiBhbiBBTFRFUiBUWVBFLgorICoKKyAqIEFMVEVSIFRBQkxFIGNh biBoYXZlIG11bHRpcGxlIHN1YmNvbW1hbmRzIHdoaWNoIG1pZ2h0IGluY2x1ZGUgRFJPUCBDT0xV TU4KKyAqIGNvbW1hbmQgYW5kIEFMVEVSIFRZUEUgcmVmZXJyaW5nIHRoZSBkcm9wIGNvbHVtbiBp biBVU0lORyBleHByZXNzaW9uLgorICogQXMgdGhlIGRyb3BwZWQgY29sdW1uIGNhbm5vdCBiZSBh Y2Nlc3NlZCBhZnRlciB0aGUgZXhlY3V0aW9uIG9mIERST1AgQ09MVU1OLAorICogYSBzcGVjaWFs IHRyaWdnZXIgaXMgcmVxdWlyZWQgdG8gaGFuZGxlIHRoaXMgY2FzZSBiZWZvcmUgdGhlIGRyb3Ag Y29sdW1uIGlzCisgKiBleGVjdXRlZC4KKyAqLwordm9pZAorRXZlbnRUcmlnZ2VyQWx0ZXJUeXBl U3RhcnQoQWx0ZXJUYWJsZUNtZCAqc3ViY21kLCBSZWxhdGlvbiByZWwpCit7CisJTWVtb3J5Q29u dGV4dCBvbGRjeHQ7CisJQ29sbGVjdGVkQVRTdWJjbWQgKm5ld3N1YjsKKwlDb2x1bW5EZWYgICpk ZWY7CisJUmVsYXRpb24JYXR0cmVsYXRpb247CisJSGVhcFR1cGxlCWhlYXBUdXA7CisJRm9ybV9w Z19hdHRyaWJ1dGUgYXR0VHVwOworCUF0dHJOdW1iZXIJYXR0bnVtOworCU9iamVjdEFkZHJlc3Mg YWRkcmVzczsKKworCS8qIGlnbm9yZSBpZiBldmVudCB0cmlnZ2VyIGNvbnRleHQgbm90IHNldCwg b3IgY29sbGVjdGlvbiBkaXNhYmxlZCAqLworCWlmICghY3VycmVudEV2ZW50VHJpZ2dlclN0YXRl IHx8CisJCWN1cnJlbnRFdmVudFRyaWdnZXJTdGF0ZS0+Y29tbWFuZENvbGxlY3Rpb25JbmhpYml0 ZWQpCisJCXJldHVybjsKKworCUFzc2VydChJc0Eoc3ViY21kLCBBbHRlclRhYmxlQ21kKSk7CisJ QXNzZXJ0KHN1YmNtZC0+c3VidHlwZSA9PSBBVF9BbHRlckNvbHVtblR5cGUpOworCUFzc2VydChj dXJyZW50RXZlbnRUcmlnZ2VyU3RhdGUtPmN1cnJlbnRDb21tYW5kICE9IE5VTEwpOworCUFzc2Vy dChPaWRJc1ZhbGlkKGN1cnJlbnRFdmVudFRyaWdnZXJTdGF0ZS0+Y3VycmVudENvbW1hbmQtPmQu YWx0ZXJUYWJsZS5vYmplY3RJZCkpOworCisJZGVmID0gKENvbHVtbkRlZiAqKSBzdWJjbWQtPmRl ZjsKKwlBc3NlcnQoSXNBKGRlZiwgQ29sdW1uRGVmKSk7CisKKwlvbGRjeHQgPSBNZW1vcnlDb250 ZXh0U3dpdGNoVG8oY3VycmVudEV2ZW50VHJpZ2dlclN0YXRlLT5jeHQpOworCisJbmV3c3ViID0g cGFsbG9jKHNpemVvZihDb2xsZWN0ZWRBVFN1YmNtZCkpOworCW5ld3N1Yi0+cGFyc2V0cmVlID0g KE5vZGUgKiljb3B5T2JqZWN0KHN1YmNtZCk7CisKKwlhdHRyZWxhdGlvbiA9IHRhYmxlX29wZW4o QXR0cmlidXRlUmVsYXRpb25JZCwgUm93RXhjbHVzaXZlTG9jayk7CisKKwkvKiBMb29rIHVwIHRo ZSB0YXJnZXQgY29sdW1uICovCisJaGVhcFR1cCA9IFNlYXJjaFN5c0NhY2hlQ29weUF0dE5hbWUo UmVsYXRpb25HZXRSZWxpZChyZWwpLCBzdWJjbWQtPm5hbWUpOworCWlmICghSGVhcFR1cGxlSXNW YWxpZChoZWFwVHVwKSkgLyogc2hvdWxkbid0IGhhcHBlbiAqLworCQllcmVwb3J0KEVSUk9SLAor CQkJCWVycmNvZGUoRVJSQ09ERV9VTkRFRklORURfQ09MVU1OKSwKKwkJCQllcnJtc2coImNvbHVt biBcIiVzXCIgb2YgcmVsYXRpb24gXCIlc1wiIGRvZXMgbm90IGV4aXN0IiwKKwkJCQkJICAgc3Vi Y21kLT5uYW1lLCBSZWxhdGlvbkdldFJlbGF0aW9uTmFtZShyZWwpKSk7CisJYXR0VHVwID0gKEZv cm1fcGdfYXR0cmlidXRlKSBHRVRTVFJVQ1QoaGVhcFR1cCk7CisJYXR0bnVtID0gYXR0VHVwLT5h dHRudW07CisKKwlPYmplY3RBZGRyZXNzU3ViU2V0KGFkZHJlc3MsIFJlbGF0aW9uUmVsYXRpb25J ZCwKKwkJCQkJCVJlbGF0aW9uR2V0UmVsaWQocmVsKSwgYXR0bnVtKTsKKwloZWFwX2ZyZWV0dXBs ZShoZWFwVHVwKTsKKwl0YWJsZV9jbG9zZShhdHRyZWxhdGlvbiwgUm93RXhjbHVzaXZlTG9jayk7 CisJbmV3c3ViLT5hZGRyZXNzID0gYWRkcmVzczsKKworCWlmIChkZWYtPnJhd19kZWZhdWx0KQor CXsKKwkJY2hhcgkgICAqZGVmZXhwcjsKKworCQlkZWZleHByID0gbm9kZVRvU3RyaW5nKGRlZi0+ Y29va2VkX2RlZmF1bHQpOworCQluZXdzdWItPnVzaW5nZXhwciA9IFRleHREYXR1bUdldENTdHJp bmcoRGlyZWN0RnVuY3Rpb25DYWxsMihwZ19nZXRfZXhwciwKKwkJCQkJCQkJCQkJCQkJCQkJQ1N0 cmluZ0dldFRleHREYXR1bShkZWZleHByKSwKKwkJCQkJCQkJCQkJCQkJCQkJUmVsYXRpb25HZXRS ZWxpZChyZWwpKSk7CisJfQorCWVsc2UKKwkJbmV3c3ViLT51c2luZ2V4cHIgPSBOVUxMOworCisJ Y3VycmVudEV2ZW50VHJpZ2dlclN0YXRlLT5jdXJyZW50Q29tbWFuZC0+ZC5hbHRlclRhYmxlLnN1 YmNtZHMgPQorCQlsYXBwZW5kKGN1cnJlbnRFdmVudFRyaWdnZXJTdGF0ZS0+Y3VycmVudENvbW1h bmQtPmQuYWx0ZXJUYWJsZS5zdWJjbWRzLCBuZXdzdWIpOworCisJTWVtb3J5Q29udGV4dFN3aXRj aFRvKG9sZGN4dCk7Cit9CisKKy8qCisgKiBFdmVudFRyaWdnZXJBbHRlclR5cGVFbmQKKyAqCQlG aW5pc2ggdXAgc2F2aW5nIGFuIEFMVEVSIFRZUEUgY29tbWFuZCwgYW5kIGFkZCBpdCB0byBjb21t YW5kIGxpc3QuCisgKi8KK3ZvaWQKK0V2ZW50VHJpZ2dlckFsdGVyVHlwZUVuZChOb2RlICpzdWJj bWQsIE9iamVjdEFkZHJlc3MgYWRkcmVzcywgYm9vbCByZXdyaXRlKQoreworCU1lbW9yeUNvbnRl eHQgb2xkY3h0OworCUNvbGxlY3RlZEFUU3ViY21kICpuZXdzdWI7CisJTGlzdENlbGwgICAqY2Vs bDsKKwlDb2xsZWN0ZWRDb21tYW5kICpjbWQ7CisJQWx0ZXJUYWJsZUNtZCAqYWx0c3ViY21kID0g KEFsdGVyVGFibGVDbWQgKilzdWJjbWQ7CisKKwkvKiBpZ25vcmUgaWYgZXZlbnQgdHJpZ2dlciBj b250ZXh0IG5vdCBzZXQsIG9yIGNvbGxlY3Rpb24gZGlzYWJsZWQgKi8KKwlpZiAoIWN1cnJlbnRF dmVudFRyaWdnZXJTdGF0ZSB8fAorCQljdXJyZW50RXZlbnRUcmlnZ2VyU3RhdGUtPmNvbW1hbmRD b2xsZWN0aW9uSW5oaWJpdGVkKQorCQlyZXR1cm47CisKKwljbWQgPSBjdXJyZW50RXZlbnRUcmln Z2VyU3RhdGUtPmN1cnJlbnRDb21tYW5kOworCisJQXNzZXJ0KElzQShzdWJjbWQsIEFsdGVyVGFi bGVDbWQpKTsKKwlBc3NlcnQoY21kICE9IE5VTEwpOworCUFzc2VydChPaWRJc1ZhbGlkKGNtZC0+ ZC5hbHRlclRhYmxlLm9iamVjdElkKSk7CisKKwlmb3JlYWNoKGNlbGwsIGNtZC0+ZC5hbHRlclRh YmxlLnN1YmNtZHMpCisJeworCQlDb2xsZWN0ZWRBVFN1YmNtZCAqc3ViID0gKENvbGxlY3RlZEFU U3ViY21kICopIGxmaXJzdChjZWxsKTsKKwkJQWx0ZXJUYWJsZUNtZCAqY29sbGNtZCA9IChBbHRl clRhYmxlQ21kICopIHN1Yi0+cGFyc2V0cmVlOworCisJCWlmIChjb2xsY21kLT5zdWJ0eXBlID09 IGFsdHN1YmNtZC0+c3VidHlwZSAmJgorCQkJYWRkcmVzcy5jbGFzc0lkID09IHN1Yi0+YWRkcmVz cy5jbGFzc0lkICYmCisJCQlhZGRyZXNzLm9iamVjdElkID09IHN1Yi0+YWRkcmVzcy5vYmplY3RJ ZCAmJgorCQkJYWRkcmVzcy5vYmplY3RTdWJJZCA9PSBzdWItPmFkZHJlc3Mub2JqZWN0U3ViSWQp CisJCXsKKwkJCWNtZC0+ZC5hbHRlclRhYmxlLnJld3JpdGUgfD0gcmV3cml0ZTsKKwkJCXJldHVy bjsKKwkJfQorCX0KKworCW9sZGN4dCA9IE1lbW9yeUNvbnRleHRTd2l0Y2hUbyhjdXJyZW50RXZl bnRUcmlnZ2VyU3RhdGUtPmN4dCk7CisKKwluZXdzdWIgPSBwYWxsb2Moc2l6ZW9mKENvbGxlY3Rl ZEFUU3ViY21kKSk7CisJbmV3c3ViLT5hZGRyZXNzID0gYWRkcmVzczsKKwluZXdzdWItPnBhcnNl dHJlZSA9IGNvcHlPYmplY3Qoc3ViY21kKTsKKworCWNtZC0+ZC5hbHRlclRhYmxlLnJld3JpdGUg fD0gcmV3cml0ZTsKKwljbWQtPmQuYWx0ZXJUYWJsZS5zdWJjbWRzID0gbGFwcGVuZChjbWQtPmQu YWx0ZXJUYWJsZS5zdWJjbWRzLCBuZXdzdWIpOworCisJTWVtb3J5Q29udGV4dFN3aXRjaFRvKG9s ZGN4dCk7Cit9CisKIC8qCiAgKiBFdmVudFRyaWdnZXJBbHRlclRhYmxlRW5kCiAgKgkJRmluaXNo IHVwIHNhdmluZyBhbiBBTFRFUiBUQUJMRSBjb21tYW5kLCBhbmQgYWRkIGl0IHRvIGNvbW1hbmQg bGlzdC4KQEAgLTE4NDMsNiArMjExNCw4IEBAIHBnX2V2ZW50X3RyaWdnZXJfZGRsX2NvbW1hbmRz KFBHX0ZVTkNUSU9OX0FSR1MpCiAJCQkJCQlhZGRyID0gY21kLT5kLmNyZWF0ZW9wYy5hZGRyZXNz OwogCQkJCQllbHNlIGlmIChjbWQtPnR5cGUgPT0gU0NUX0FsdGVyVFNDb25maWcpCiAJCQkJCQlh ZGRyID0gY21kLT5kLmF0c2NmZy5hZGRyZXNzOworCQkJCQllbHNlIGlmIChjbWQtPnR5cGUgPT0g U0NUX0FsdGVyVFNDb25maWcpCisJCQkJCQlhZGRyID0gY21kLT5kLmN0YXMuYWRkcmVzczsKIAog CQkJCQkvKgogCQkJCQkgKiBJZiBhbiBvYmplY3Qgd2FzIGRyb3BwZWQgaW4gdGhlIHNhbWUgY29t bWFuZCB3ZSBtYXkgZW5kCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy9wdWJsaWNh dGlvbmNtZHMuYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3B1YmxpY2F0aW9uY21kcy5jCmluZGV4 IDIwZmE3MmM1YzguLmU2MTllYmQ4N2UgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRz L3B1YmxpY2F0aW9uY21kcy5jCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3B1YmxpY2F0aW9u Y21kcy5jCkBAIC0zOCwxMCArMzgsMTIgQEAKICNpbmNsdWRlICJjb21tYW5kcy9wdWJsaWNhdGlv bmNtZHMuaCIKICNpbmNsdWRlICJmdW5jYXBpLmgiCiAjaW5jbHVkZSAibWlzY2FkbWluLmgiCisj aW5jbHVkZSAibm9kZXMvbWFrZWZ1bmNzLmgiCiAjaW5jbHVkZSAibm9kZXMvbm9kZUZ1bmNzLmgi CiAjaW5jbHVkZSAicGFyc2VyL3BhcnNlX2NsYXVzZS5oIgogI2luY2x1ZGUgInBhcnNlci9wYXJz ZV9jb2xsYXRlLmgiCiAjaW5jbHVkZSAicGFyc2VyL3BhcnNlX3JlbGF0aW9uLmgiCisjaW5jbHVk ZSAicGFyc2VyL3BhcnNlci5oIgogI2luY2x1ZGUgInN0b3JhZ2UvbG1nci5oIgogI2luY2x1ZGUg InV0aWxzL2FjbC5oIgogI2luY2x1ZGUgInV0aWxzL2FycmF5LmgiCkBAIC05Nyw2ICs5OSw3IEBA IHBhcnNlX3B1YmxpY2F0aW9uX29wdGlvbnMoUGFyc2VTdGF0ZSAqcHN0YXRlLAogCXB1YmFjdGlv bnMtPnB1YnVwZGF0ZSA9IHRydWU7CiAJcHViYWN0aW9ucy0+cHViZGVsZXRlID0gdHJ1ZTsKIAlw dWJhY3Rpb25zLT5wdWJ0cnVuY2F0ZSA9IHRydWU7CisJcHViYWN0aW9ucy0+cHViZGRsID0gZmFs c2U7CiAJKnB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290ID0gZmFsc2U7CiAKIAkvKiBQYXJzZSBv cHRpb25zICovCkBAIC0xNDQsNiArMTQ3LDggQEAgcGFyc2VfcHVibGljYXRpb25fb3B0aW9ucyhQ YXJzZVN0YXRlICpwc3RhdGUsCiAJCQkJCXB1YmFjdGlvbnMtPnB1YmRlbGV0ZSA9IHRydWU7CiAJ CQkJZWxzZSBpZiAoc3RyY21wKHB1Ymxpc2hfb3B0LCAidHJ1bmNhdGUiKSA9PSAwKQogCQkJCQlw dWJhY3Rpb25zLT5wdWJ0cnVuY2F0ZSA9IHRydWU7CisJCQkJZWxzZSBpZiAoc3RyY21wKHB1Ymxp c2hfb3B0LCAiZGRsIikgPT0gMCkKKwkJCQkJcHViYWN0aW9ucy0+cHViZGRsID0gdHJ1ZTsKIAkJ CQllbHNlCiAJCQkJCWVyZXBvcnQoRVJST1IsCiAJCQkJCQkJKGVycmNvZGUoRVJSQ09ERV9TWU5U QVhfRVJST1IpLApAQCAtNzI4LDYgKzczMyw1MyBAQCBDaGVja1B1YlJlbGF0aW9uQ29sdW1uTGlz dChjaGFyICpwdWJuYW1lLCBMaXN0ICp0YWJsZXMsCiAJfQogfQogCisvKgorICogQ3JlYXRlIGV2 ZW50IHRyaWdnZXIgd2hpY2ggaXMgdXNlZCBmb3IgRERMIHJlcGxpY2F0aW9uLgorICovCitzdGF0 aWMgdm9pZAorQ3JlYXRlRERMUmVwbGljYUV2ZW50VHJpZ2dlcihjaGFyICpldmVudG5hbWUsIENv bW1hbmRUYWcgKmNvbW1hbmRzLAorCQkJCQkJCSBpbnQgbmNvbW1hbmRzLCBPYmplY3RBZGRyZXNz IHB1YmFkZHJlc3MsCisJCQkJCQkJIE9pZCBwdWJvaWQpCit7CisJaW50CQkJaTsKKwlMaXN0CSAg ICp0YWdzID0gTklMOworCU9pZAkJCXRyaWdnZXJfaWQ7CisJT2JqZWN0QWRkcmVzcyByZWZlcmVu Y2VkOworCUNyZWF0ZUV2ZW50VHJpZ1N0bXQgKmRkbF90cmlnZ2VyOworCWNoYXIJCXRyaWdnZXJf bmFtZVtOQU1FREFUQUxFTl07CisJY2hhcgkJdHJpZ2dlcl9mdW5jX25hbWVbTkFNRURBVEFMRU5d OworCXN0YXRpYyBjb25zdCBjaGFyICp0cmlnZ2VyX25hbWVfcHJlZml4ID0gInBnX2RlcGFyc2Vf dHJpZ18lc18ldSI7CisJc3RhdGljIGNvbnN0IGNoYXIgKnRyaWdnZXJfZnVuY19wcmVmaXggPSAi cHVibGljYXRpb25fZGVwYXJzZV8lcyI7CisKKwlkZGxfdHJpZ2dlciA9IG1ha2VOb2RlKENyZWF0 ZUV2ZW50VHJpZ1N0bXQpOworCisJc25wcmludGYodHJpZ2dlcl9uYW1lLCBzaXplb2YodHJpZ2dl cl9uYW1lKSwgdHJpZ2dlcl9uYW1lX3ByZWZpeCwKKwkJCSBldmVudG5hbWUsIHB1Ym9pZCk7CisJ c25wcmludGYodHJpZ2dlcl9mdW5jX25hbWUsIHNpemVvZih0cmlnZ2VyX2Z1bmNfbmFtZSksIHRy aWdnZXJfZnVuY19wcmVmaXgsCisJCQkgZXZlbnRuYW1lKTsKKworCWRkbF90cmlnZ2VyLT50cmln bmFtZSA9IHBzdHJkdXAodHJpZ2dlcl9uYW1lKTsKKwlkZGxfdHJpZ2dlci0+ZXZlbnRuYW1lID0g ZXZlbnRuYW1lOworCWRkbF90cmlnZ2VyLT5mdW5jbmFtZSA9IFN5c3RlbUZ1bmNOYW1lKHRyaWdn ZXJfZnVuY19uYW1lKTsKKworCWZvciAoaSA9IDA7IGkgPCBuY29tbWFuZHM7IGkrKykKKwl7CisJ CVN0cmluZwkgICAqdGFnID0gbWFrZVN0cmluZyhwc3RyZHVwKEdldENvbW1hbmRUYWdOYW1lKGNv bW1hbmRzW2ldKSkpOworCisJCXRhZ3MgPSBsYXBwZW5kKHRhZ3MsIHRhZyk7CisJfQorCisJZGRs X3RyaWdnZXItPndoZW5jbGF1c2UgPSBsaXN0X21ha2UxKG1ha2VEZWZFbGVtKCJ0YWciLCAoTm9k ZSAqKSB0YWdzLCAtMSkpOworCisJdHJpZ2dlcl9pZCA9IENyZWF0ZUV2ZW50VHJpZ2dlcihkZGxf dHJpZ2dlcik7CisKKwkvKgorCSAqIFJlZ2lzdGVyIHRoZSBldmVudCB0cmlnZ2VycyBhcyBpbnRl cm5hbGx5IGRlcGVuZGVudCBvbiB0aGUgcHVibGljYXRpb24uCisJICovCisJT2JqZWN0QWRkcmVz c1NldChyZWZlcmVuY2VkLCBFdmVudFRyaWdnZXJSZWxhdGlvbklkLCB0cmlnZ2VyX2lkKTsKKwly ZWNvcmREZXBlbmRlbmN5T24oJnJlZmVyZW5jZWQsICZwdWJhZGRyZXNzLCBERVBFTkRFTkNZX0lO VEVSTkFMKTsKK30KKwogLyoKICAqIENyZWF0ZSBuZXcgcHVibGljYXRpb24uCiAgKi8KQEAgLTc5 OCw2ICs4NTAsOCBAQCBDcmVhdGVQdWJsaWNhdGlvbihQYXJzZVN0YXRlICpwc3RhdGUsIENyZWF0 ZVB1YmxpY2F0aW9uU3RtdCAqc3RtdCkKIAkJQm9vbEdldERhdHVtKHB1YmFjdGlvbnMucHViZGVs ZXRlKTsKIAl2YWx1ZXNbQW51bV9wZ19wdWJsaWNhdGlvbl9wdWJ0cnVuY2F0ZSAtIDFdID0KIAkJ Qm9vbEdldERhdHVtKHB1YmFjdGlvbnMucHVidHJ1bmNhdGUpOworCXZhbHVlc1tBbnVtX3BnX3B1 YmxpY2F0aW9uX3B1YmRkbCAtIDFdID0KKwkJQm9vbEdldERhdHVtKHB1YmFjdGlvbnMucHViZGRs KTsKIAl2YWx1ZXNbQW51bV9wZ19wdWJsaWNhdGlvbl9wdWJ2aWFyb290IC0gMV0gPQogCQlCb29s R2V0RGF0dW0ocHVibGlzaF92aWFfcGFydGl0aW9uX3Jvb3QpOwogCkBAIC04NTgsNiArOTEyLDM4 IEBAIENyZWF0ZVB1YmxpY2F0aW9uKFBhcnNlU3RhdGUgKnBzdGF0ZSwgQ3JlYXRlUHVibGljYXRp b25TdG10ICpzdG10KQogCQl9CiAJfQogCisJLyoKKwkgKiBDcmVhdGUgYW4gZXZlbnQgdHJpZ2dl ciB0byBhbGxvdyBsb2dnaW5nIG9mIERETCBzdGF0ZW1lbnRzLgorCSAqCisJICovCisJaWYgKHB1 YmFjdGlvbnMucHViZGRsKQorCXsKKwkJQ29tbWFuZFRhZwlzdGFydF9jb21tYW5kc1tdID0ge0NN RFRBR19EUk9QX1RBQkxFfTsKKwkJQ29tbWFuZFRhZwlyZXdyaXRlX2NvbW1hbmRzW10gPSB7Q01E VEFHX0FMVEVSX1RBQkxFfTsKKwkJQ29tbWFuZFRhZwlpbml0X2NvbW1hbmRzW10gPSB7CisJCQlD TURUQUdfQ1JFQVRFX1RBQkxFX0FTLAorCQkJQ01EVEFHX1NFTEVDVF9JTlRPCisJCX07CisJCWlu dCBuY29tbWFuZHMgPSAwOworCQlDb21tYW5kVGFnICplbmRfY29tbWFuZHMgPSBHZXRDb21tYW5k VGFnc0ZvckRETFJlcGwoJm5jb21tYW5kcyk7CisKKwkJLyogQ3JlYXRlIHRoZSBkZGxfY29tbWFu ZF9lbmQgZXZlbnQgdHJpZ2dlciAqLworCQlDcmVhdGVERExSZXBsaWNhRXZlbnRUcmlnZ2VyKCJk ZGxfY29tbWFuZF9lbmQiLCBlbmRfY29tbWFuZHMsCisJCQkJCQkJCQkgbmNvbW1hbmRzLCBteXNl bGYsIHB1Ym9pZCk7CisKKwkJLyogQ3JlYXRlIHRoZSBkZGxfY29tbWFuZF9zdGFydCBldmVudCB0 cmlnZ2VyICovCisJCUNyZWF0ZURETFJlcGxpY2FFdmVudFRyaWdnZXIoImRkbF9jb21tYW5kX3N0 YXJ0Iiwgc3RhcnRfY29tbWFuZHMsCisJCQkJCQkJCQkgbGVuZ3Rob2Yoc3RhcnRfY29tbWFuZHMp LCBteXNlbGYsIHB1Ym9pZCk7CisKKwkJLyogQ3JlYXRlIHRoZSB0YWJsZV9yZXdyaXRlIGV2ZW50 IHRyaWdnZXIgKi8KKwkJQ3JlYXRlRERMUmVwbGljYUV2ZW50VHJpZ2dlcigidGFibGVfcmV3cml0 ZSIsIHJld3JpdGVfY29tbWFuZHMsCisJCQkJCQkJCQkgbGVuZ3Rob2YocmV3cml0ZV9jb21tYW5k cyksIG15c2VsZiwgcHVib2lkKTsKKworCQkvKiBDcmVhdGUgdGhlIHRhYmxlX2luaXRfd3JpdGUg ZXZlbnQgdHJpZ2dlciAqLworCQlDcmVhdGVERExSZXBsaWNhRXZlbnRUcmlnZ2VyKCJ0YWJsZV9p bml0X3dyaXRlIiwgaW5pdF9jb21tYW5kcywKKwkJCQkJCQkJCSBsZW5ndGhvZihpbml0X2NvbW1h bmRzKSwgbXlzZWxmLCBwdWJvaWQpOworCX0KKwogCXRhYmxlX2Nsb3NlKHJlbCwgUm93RXhjbHVz aXZlTG9jayk7CiAKIAlJbnZva2VPYmplY3RQb3N0Q3JlYXRlSG9vayhQdWJsaWNhdGlvblJlbGF0 aW9uSWQsIHB1Ym9pZCwgMCk7CkBAIC05OTYsNiArMTA4Miw5IEBAIEFsdGVyUHVibGljYXRpb25P cHRpb25zKFBhcnNlU3RhdGUgKnBzdGF0ZSwgQWx0ZXJQdWJsaWNhdGlvblN0bXQgKnN0bXQsCiAK IAkJdmFsdWVzW0FudW1fcGdfcHVibGljYXRpb25fcHVidHJ1bmNhdGUgLSAxXSA9IEJvb2xHZXRE YXR1bShwdWJhY3Rpb25zLnB1YnRydW5jYXRlKTsKIAkJcmVwbGFjZXNbQW51bV9wZ19wdWJsaWNh dGlvbl9wdWJ0cnVuY2F0ZSAtIDFdID0gdHJ1ZTsKKworCQl2YWx1ZXNbQW51bV9wZ19wdWJsaWNh dGlvbl9wdWJkZGwgLSAxXSA9IEJvb2xHZXREYXR1bShwdWJhY3Rpb25zLnB1YmRkbCk7CisJCXJl cGxhY2VzW0FudW1fcGdfcHVibGljYXRpb25fcHViZGRsIC0gMV0gPSB0cnVlOwogCX0KIAogCWlm IChwdWJsaXNoX3ZpYV9wYXJ0aXRpb25fcm9vdF9naXZlbikKZGlmZiAtLWdpdCBhL3NyYy9iYWNr ZW5kL2NvbW1hbmRzL3RhYmxlY21kcy5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvdGFibGVjbWRz LmMKaW5kZXggNGJlYTdiM2M5MC4uYjQ4MTgyM2I3OCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQv Y29tbWFuZHMvdGFibGVjbWRzLmMKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvdGFibGVjbWRz LmMKQEAgLTQ2NTEsNiArNDY1MSw5IEBAIEFUUHJlcENtZChMaXN0ICoqd3F1ZXVlLCBSZWxhdGlv biByZWwsIEFsdGVyVGFibGVDbWQgKmNtZCwKIAkJCWNtZCA9IEFUUGFyc2VUcmFuc2Zvcm1DbWQo d3F1ZXVlLCB0YWIsIHJlbCwgY21kLCByZWN1cnNlLCBsb2NrbW9kZSwKIAkJCQkJCQkJCSAgQVRf UEFTU19VTlNFVCwgY29udGV4dCk7CiAJCQlBc3NlcnQoY21kICE9IE5VTEwpOworCisJCQlFdmVu dFRyaWdnZXJBbHRlclR5cGVTdGFydChjbWQsIHJlbCk7CisKIAkJCS8qIFBlcmZvcm1zIG93biBy ZWN1cnNpb24gKi8KIAkJCUFUUHJlcEFsdGVyQ29sdW1uVHlwZSh3cXVldWUsIHRhYiwgcmVsLCBy ZWN1cnNlLCByZWN1cnNpbmcsIGNtZCwKIAkJCQkJCQkJICBsb2NrbW9kZSwgY29udGV4dCk7CkBA IC00OTIyLDYgKzQ5MjUsNyBAQCBBVEV4ZWNDbWQoTGlzdCAqKndxdWV1ZSwgQWx0ZXJlZFRhYmxl SW5mbyAqdGFiLAogewogCU9iamVjdEFkZHJlc3MgYWRkcmVzcyA9IEludmFsaWRPYmplY3RBZGRy ZXNzOwogCVJlbGF0aW9uCXJlbCA9IHRhYi0+cmVsOworCWJvb2wJCWNvbW1hbmRDb2xsZWN0ZWQg PSBmYWxzZTsKIAogCXN3aXRjaCAoY21kLT5zdWJ0eXBlKQogCXsKQEAgLTUwNDUsNiArNTA0OSw4 IEBAIEFURXhlY0NtZChMaXN0ICoqd3F1ZXVlLCBBbHRlcmVkVGFibGVJbmZvICp0YWIsCiAJCWNh c2UgQVRfQWx0ZXJDb2x1bW5UeXBlOgkvKiBBTFRFUiBDT0xVTU4gVFlQRSAqLwogCQkJLyogcGFy c2UgdHJhbnNmb3JtYXRpb24gd2FzIGRvbmUgZWFybGllciAqLwogCQkJYWRkcmVzcyA9IEFURXhl Y0FsdGVyQ29sdW1uVHlwZSh0YWIsIHJlbCwgY21kLCBsb2NrbW9kZSk7CisJCQlFdmVudFRyaWdn ZXJBbHRlclR5cGVFbmQoKE5vZGUgKikgY21kLCBhZGRyZXNzLCB0YWItPnJld3JpdGUpOworCQkJ Y29tbWFuZENvbGxlY3RlZCA9IHRydWU7CiAJCQlicmVhazsKIAkJY2FzZSBBVF9BbHRlckNvbHVt bkdlbmVyaWNPcHRpb25zOgkvKiBBTFRFUiBDT0xVTU4gT1BUSU9OUyAqLwogCQkJYWRkcmVzcyA9 CkBAIC01MjE3LDggKzUyMjMsOCBAQCBBVEV4ZWNDbWQoTGlzdCAqKndxdWV1ZSwgQWx0ZXJlZFRh YmxlSW5mbyAqdGFiLAogCS8qCiAJICogUmVwb3J0IHRoZSBzdWJjb21tYW5kIHRvIGludGVyZXN0 ZWQgZXZlbnQgdHJpZ2dlcnMuCiAJICovCi0JaWYgKGNtZCkKLQkJRXZlbnRUcmlnZ2VyQ29sbGVj dEFsdGVyVGFibGVTdWJjbWQoKE5vZGUgKikgY21kLCBhZGRyZXNzKTsKKwlpZiAoY21kICYmICFj b21tYW5kQ29sbGVjdGVkKQorCQlFdmVudFRyaWdnZXJDb2xsZWN0QWx0ZXJUYWJsZVN1YmNtZCgo Tm9kZSAqKSBjbWQsIGFkZHJlc3MsIHRhYi0+cmV3cml0ZSk7CiAKIAkvKgogCSAqIEJ1bXAgdGhl IGNvbW1hbmQgY291bnRlciB0byBlbnN1cmUgdGhlIG5leHQgc3ViY29tbWFuZCBpbiB0aGUgc2Vx dWVuY2UKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3BhcnNlci9wYXJzZV91dGlsY21kLmMgYi9z cmMvYmFja2VuZC9wYXJzZXIvcGFyc2VfdXRpbGNtZC5jCmluZGV4IGY3NDNjZDU0OGMuLjE2OTY3 NDY4YjggMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3BhcnNlci9wYXJzZV91dGlsY21kLmMKKysr IGIvc3JjL2JhY2tlbmQvcGFyc2VyL3BhcnNlX3V0aWxjbWQuYwpAQCAtMTM5Nyw2ICsxMzk3LDcg QEAgZXhwYW5kVGFibGVMaWtlQ2xhdXNlKFJhbmdlVmFyICpoZWFwUmVsLCBUYWJsZUxpa2VDbGF1 c2UgKnRhYmxlX2xpa2VfY2xhdXNlKQogCQlhdGNtZC0+Y21kcyA9IGF0c3ViY21kczsKIAkJYXRj bWQtPm9ianR5cGUgPSBPQkpFQ1RfVEFCTEU7CiAJCWF0Y21kLT5taXNzaW5nX29rID0gZmFsc2U7 CisJCWF0Y21kLT50YWJsZV9saWtlID0gdHJ1ZTsKIAkJcmVzdWx0ID0gbGNvbnMoYXRjbWQsIHJl c3VsdCk7CiAJfQogCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2Fs L01ha2VmaWxlIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9NYWtlZmlsZQppbmRl eCBkNGYyOWY4ZmZjLi4yM2FiZDZmYTc5IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9yZXBsaWNh dGlvbi9sb2dpY2FsL01ha2VmaWxlCisrKyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2lj YWwvTWFrZWZpbGUKQEAgLTE2LDYgKzE2LDcgQEAgb3ZlcnJpZGUgQ1BQRkxBR1MgOj0gLUkkKHNy Y2RpcikgJChDUFBGTEFHUykKIAogT0JKUyA9IFwKIAlkZGxtZXNzYWdlLm9cCisJZGRsdHJpZ2dl ci5vXAogCWRlY29kZS5vIFwKIAlsYXVuY2hlci5vIFwKIAlsb2dpY2FsLm8gXApkaWZmIC0tZ2l0 IGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9kZGx0cmlnZ2VyLmMgYi9zcmMvYmFj a2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL2RkbHRyaWdnZXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0 NAppbmRleCAwMDAwMDAwMDAwLi5jODI1ZmY2ZDA5Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2Jh Y2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9kZGx0cmlnZ2VyLmMKQEAgLTAsMCArMSwzNTYgQEAK Ky8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIGRkbHRyaWdnZXIuYworICoJICBMb2dpY2FsIERE TCBtZXNzYWdlcy4KKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMjIsIFBvc3RncmVTUUwgR2xvYmFs IERldmVsb3BtZW50IEdyb3VwCisgKgorICogSURFTlRJRklDQVRJT04KKyAqCSAgc3JjL2JhY2tl bmQvcmVwbGljYXRpb24vbG9naWNhbC9kZGx0cmlnZ2VyLmMKKyAqCisgKiBOT1RFUworICoKKyAq IERlcGFyc2UgdGhlIGRkbCBjb21tYW5kIGFuZCBsb2cgaXQuCisgKgorICogLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tCisgKi8KKworI2luY2x1ZGUgInBvc3RncmVzLmgiCisKKyNpbmNsdWRlICJhY2Nlc3Mv dGFibGUuaCIKKyNpbmNsdWRlICJjYXRhbG9nL3BnX2NsYXNzLmgiCisjaW5jbHVkZSAiY29tbWFu ZHMvZXZlbnRfdHJpZ2dlci5oIgorI2luY2x1ZGUgImZ1bmNhcGkuaCIKKyNpbmNsdWRlICJsaWIv aWxpc3QuaCIKKyNpbmNsdWRlICJyZXBsaWNhdGlvbi9kZGxtZXNzYWdlLmgiCisjaW5jbHVkZSAi dGNvcC9kZGxfZGVwYXJzZS5oIgorI2luY2x1ZGUgInV0aWxzL2ZtZ3Jwcm90b3MuaCIKKyNpbmNs dWRlICJ1dGlscy9sc3lzY2FjaGUuaCIKKworZXh0ZXJuIEV2ZW50VHJpZ2dlclF1ZXJ5U3RhdGUg KmN1cnJlbnRFdmVudFRyaWdnZXJTdGF0ZTsKKworLyoKKyAqIERlcGFyc2UgdGhlIGRkbCBjb21t YW5kIGFuZCBsb2cgaXQgcHJpb3IgdG8KKyAqIGV4ZWN1dGlvbi4gQ3VycmVudGx5IG9ubHkgdXNl ZCBmb3IgRFJPUCBUQUJMRSBjb21tYW5kCisgKiBzbyB0aGF0IGNhdGFsb2cgY2FuIGJlIGFjY2Vz c2VkIGJlZm9yZSBiZWluZyBkZWxldGVkLgorICogVGhpcyBpcyB0byBjaGVjayBpZiB0aGUgdGFi bGUgaXMgcGFydCBvZiB0aGUgcHVibGljYXRpb24KKyAqIG9yIG5vdC4KKyAqLworRGF0dW0KK3B1 YmxpY2F0aW9uX2RlcGFyc2VfZGRsX2NvbW1hbmRfc3RhcnQoUEdfRlVOQ1RJT05fQVJHUykKK3sK KwlFdmVudFRyaWdnZXJEYXRhICp0cmlnZGF0YTsKKwljaGFyCSAgICpjb21tYW5kID0gcHNwcmlu dGYoIkRyb3AgdGFibGUgY29tbWFuZCBzdGFydCIpOworCURyb3BTdG10ICAgKnN0bXQ7CisJTGlz dENlbGwgICAqY2VsbDE7CisKKwlpZiAoIUNBTExFRF9BU19FVkVOVF9UUklHR0VSKGZjaW5mbykp CisJCWVsb2coRVJST1IsICJub3QgZmlyZWQgYnkgZXZlbnQgdHJpZ2dlciBtYW5hZ2VyIik7CisK Kwl0cmlnZGF0YSA9IChFdmVudFRyaWdnZXJEYXRhICopIGZjaW5mby0+Y29udGV4dDsKKwlzdG10 ID0gKERyb3BTdG10ICopIHRyaWdkYXRhLT5wYXJzZXRyZWU7CisKKwkvKiBFeHRyYWN0IHRoZSBy ZWxpZCBmcm9tIHRoZSBwYXJzZSB0cmVlICovCisJZm9yZWFjaChjZWxsMSwgc3RtdC0+b2JqZWN0 cykKKwl7CisJCWNoYXIJCXJlbHBlcnNpc3Q7CisJCU5vZGUJICAgKm9iamVjdCA9IGxmaXJzdChj ZWxsMSk7CisJCU9iamVjdEFkZHJlc3MgYWRkcmVzczsKKwkJUmVsYXRpb24JcmVsYXRpb24gPSBO VUxMOworCisJCWFkZHJlc3MgPSBnZXRfb2JqZWN0X2FkZHJlc3Moc3RtdC0+cmVtb3ZlVHlwZSwK KwkJCQkJCQkJCSBvYmplY3QsCisJCQkJCQkJCQkgJnJlbGF0aW9uLAorCQkJCQkJCQkJIEFjY2Vz c0V4Y2x1c2l2ZUxvY2ssCisJCQkJCQkJCQkgdHJ1ZSk7CisKKwkJLyogT2JqZWN0IGRvZXMgbm90 IGV4aXN0LCBub3RoaW5nIHRvIGRvICovCisJCWlmICghcmVsYXRpb24pCisJCQljb250aW51ZTsK KworCQlyZWxwZXJzaXN0ID0gZ2V0X3JlbF9wZXJzaXN0ZW5jZShhZGRyZXNzLm9iamVjdElkKTsK KworCQkvKgorCQkgKiBEbyBub3QgZ2VuZXJhdGUgd2FsIGxvZyBmb3IgY29tbWFuZHMgd2hvc2Ug dGFyZ2V0IHRhYmxlIGlzIGEKKwkJICogdGVtcG9yYXJ5IHRhYmxlLgorCQkgKgorCQkgKiBXZSB3 aWxsIGdlbmVyYXRlIHdhbCBsb2dzIGZvciB1bmxvZ2dlZCB0YWJsZXMgc28gdGhhdCB1bmxvZ2dl ZAorCQkgKiB0YWJsZXMgY2FuIGFsc28gYmUgY3JlYXRlZCBhbmQgYWx0ZXJlZCBvbiB0aGUgc3Vi c2NyaWJlciBzaWRlLiBUaGlzCisJCSAqIG1ha2VzIGl0IHBvc3NpYmxlIHRvIGRpcmVjdGx5IHJl cGxheSB0aGUgU0VUIExPR0dFRCBjb21tYW5kIGFuZCB0aGUKKwkJICogaW5jb21pbmcgcmV3cml0 ZSBtZXNzYWdlIHdpdGhvdXQgY3JlYXRpbmcgYSBuZXcgdGFibGUuCisJCSAqLworCQlpZiAocmVs cGVyc2lzdCAhPSBSRUxQRVJTSVNURU5DRV9URU1QKQorCQkJTG9nTG9naWNhbERETE1lc3NhZ2Uo ImRlcGFyc2UiLCBhZGRyZXNzLm9iamVjdElkLCBEQ1RfVGFibGVEcm9wU3RhcnQsCisJCQkJCQkJ CSBjb21tYW5kLCBzdHJsZW4oY29tbWFuZCkgKyAxKTsKKworCQlpZiAocmVsYXRpb24pCisJCQl0 YWJsZV9jbG9zZShyZWxhdGlvbiwgTm9Mb2NrKTsKKwl9CisJcmV0dXJuIFBvaW50ZXJHZXREYXR1 bShOVUxMKTsKK30KKworLyoKKyAqIHB1YmxpY2F0aW9uX2RlcGFyc2VfdGFibGVfcmV3cml0ZQor ICoKKyAqIERlcGFyc2UgdGhlIGRkbCB0YWJsZSByZXdyaXRlIGNvbW1hbmQgYW5kIGxvZyBpdC4K KyAqLworRGF0dW0KK3B1YmxpY2F0aW9uX2RlcGFyc2VfdGFibGVfcmV3cml0ZShQR19GVU5DVElP Tl9BUkdTKQoreworCWNoYXIJCXJlbHBlcnNpc3Q7CisJQ29sbGVjdGVkQ29tbWFuZCAqY21kOwor CWNoYXIJICAgKmpzb25fc3RyaW5nOworCisJaWYgKCFDQUxMRURfQVNfRVZFTlRfVFJJR0dFUihm Y2luZm8pKQorCQllbG9nKEVSUk9SLCAibm90IGZpcmVkIGJ5IGV2ZW50IHRyaWdnZXIgbWFuYWdl ciIpOworCisJY21kID0gY3VycmVudEV2ZW50VHJpZ2dlclN0YXRlLT5jdXJyZW50Q29tbWFuZDsK KworCUFzc2VydChjbWQgJiYgY21kLT5kLmFsdGVyVGFibGUucmV3cml0ZSk7CisKKwlyZWxwZXJz aXN0ID0gZ2V0X3JlbF9wZXJzaXN0ZW5jZShjbWQtPmQuYWx0ZXJUYWJsZS5vYmplY3RJZCk7CisK KwkvKgorCSAqIERvIG5vdCBnZW5lcmF0ZSB3YWwgbG9nIGZvciBjb21tYW5kcyB3aG9zZSB0YXJn ZXQgdGFibGUgaXMgYSB0ZW1wb3JhcnkKKwkgKiB0YWJsZS4KKwkgKgorCSAqIFdlIHdpbGwgZ2Vu ZXJhdGUgd2FsIGxvZ3MgZm9yIHVubG9nZ2VkIHRhYmxlcyBzbyB0aGF0IHVubG9nZ2VkIHRhYmxl cworCSAqIGNhbiBhbHNvIGJlIGNyZWF0ZWQgYW5kIGFsdGVyZWQgb24gdGhlIHN1YnNjcmliZXIg c2lkZS4gVGhpcyBtYWtlcyBpdAorCSAqIHBvc3NpYmxlIHRvIGRpcmVjdGx5IHJlcGxheSB0aGUg U0VUIExPR0dFRCBjb21tYW5kIGFuZCB0aGUgaW5jb21pbmcKKwkgKiByZXdyaXRlIG1lc3NhZ2Ug d2l0aG91dCBjcmVhdGluZyBhIG5ldyB0YWJsZS4KKwkgKi8KKwlpZiAocmVscGVyc2lzdCAhPSBS RUxQRVJTSVNURU5DRV9URU1QKQorCXsKKwkJLyogRGVwYXJzZSB0aGUgRERMIGNvbW1hbmQgYW5k IFdBTCBsb2cgaXQgdG8gYWxsb3cgZGVjb2Rpbmcgb2YgdGhlIHNhbWUuICovCisJCWpzb25fc3Ry aW5nID0gZGVwYXJzZV91dGlsaXR5X2NvbW1hbmQoY21kLCBmYWxzZSk7CisKKwkJaWYgKGpzb25f c3RyaW5nICE9IE5VTEwpCisJCQlMb2dMb2dpY2FsRERMTWVzc2FnZSgiZGVwYXJzZSIsIGNtZC0+ ZC5hbHRlclRhYmxlLm9iamVjdElkLCBEQ1RfVGFibGVBbHRlciwKKwkJCQkJCQkJIGpzb25fc3Ry aW5nLCBzdHJsZW4oanNvbl9zdHJpbmcpICsgMSk7CisJfQorCisJcmV0dXJuIFBvaW50ZXJHZXRE YXR1bShOVUxMKTsKK30KKworLyoKKyAqIERlcGFyc2UgdGhlIGRkbCBjb21tYW5kIGFuZCBsb2cg aXQuIFRoaXMgZnVuY3Rpb24KKyAqIGlzIGNhbGxlZCBhZnRlciB0aGUgZXhlY3V0aW9uIG9mIHRo ZSBjb21tYW5kIGJ1dCBiZWZvcmUgdGhlCisgKiB0cmFuc2FjdGlvbiBjb21taXRzLgorICovCitE YXR1bQorcHVibGljYXRpb25fZGVwYXJzZV9kZGxfY29tbWFuZF9lbmQoUEdfRlVOQ1RJT05fQVJH UykKK3sKKwlMaXN0Q2VsbCAgICpsYzsKKwlzbGlzdF9pdGVyCWl0ZXI7CisJRGVwYXJzZWRDb21t YW5kVHlwZSB0eXBlOworCU9pZAkJCXJlbGlkOworCWNoYXIJCXJlbGtpbmQ7CisKKwlpZiAoIUNB TExFRF9BU19FVkVOVF9UUklHR0VSKGZjaW5mbykpCisJCWVsb2coRVJST1IsICJub3QgZmlyZWQg YnkgZXZlbnQgdHJpZ2dlciBtYW5hZ2VyIik7CisKKwlmb3JlYWNoKGxjLCBjdXJyZW50RXZlbnRU cmlnZ2VyU3RhdGUtPmNvbW1hbmRMaXN0KQorCXsKKwkJY2hhcgkJcmVscGVyc2lzdCA9IFJFTFBF UlNJU1RFTkNFX1BFUk1BTkVOVDsKKwkJQ29sbGVjdGVkQ29tbWFuZCAqY21kID0gbGZpcnN0KGxj KTsKKwkJY2hhcgkgICAqanNvbl9zdHJpbmc7CisKKwkJLyogUmV3cml0ZSBEREwgaGFzIGJlZW4g aGFuZGxlZCBpbiB0YWJsZV9yZXdyaXRlIHRyaWdnZXIgKi8KKwkJaWYgKGNtZC0+ZC5hbHRlclRh YmxlLnJld3JpdGUpCisJCXsKKwkJCVJlbmFtZVN0bXQgKnJlbmFtZVN0bXQgPSAoUmVuYW1lU3Rt dCAqKSBjbWQtPnBhcnNldHJlZTsKKworCQkJaWYgKHJlbmFtZVN0bXQgJiYgcmVuYW1lU3RtdC0+ cmVsYXRpb25UeXBlICE9IE9CSkVDVF9UWVBFICYmCisJCQkJcmVuYW1lU3RtdC0+cmVsYXRpb25U eXBlICE9IE9CSkVDVF9UQUJMRSkKKwkJCQljb250aW51ZTsKKwkJfQorCisJCWlmIChjbWQtPnR5 cGUgPT0gU0NUX1NpbXBsZSAmJgorCQkJIU9pZElzVmFsaWQoY21kLT5kLnNpbXBsZS5hZGRyZXNz Lm9iamVjdElkKSkKKwkJCWNvbnRpbnVlOworCisJCWlmIChjbWQtPnR5cGUgPT0gU0NUX0FsdGVy VGFibGUpCisJCXsKKwkJCXJlbGlkID0gY21kLT5kLmFsdGVyVGFibGUub2JqZWN0SWQ7CisJCQl0 eXBlID0gRENUX1RhYmxlQWx0ZXI7CisJCX0KKwkJZWxzZQorCQl7CisJCQkvKiBPbmx5IFNDVF9T aW1wbGUgZm9yIG5vdyAqLworCQkJcmVsaWQgPSBjbWQtPmQuc2ltcGxlLmFkZHJlc3Mub2JqZWN0 SWQ7CisJCQl0eXBlID0gRENUX1NpbXBsZUNtZDsKKwkJfQorCisJCXJlbGtpbmQgPSBnZXRfcmVs X3JlbGtpbmQocmVsaWQpOworCQlpZiAocmVsa2luZCkKKwkJCXJlbHBlcnNpc3QgPSBnZXRfcmVs X3BlcnNpc3RlbmNlKHJlbGlkKTsKKworCQkvKgorCQkgKiBEbyBub3QgZ2VuZXJhdGUgd2FsIGxv ZyBmb3IgY29tbWFuZHMgd2hvc2UgdGFyZ2V0IHRhYmxlIGlzIGEKKwkJICogdGVtcG9yYXJ5IHRh YmxlLgorCQkgKgorCQkgKiBXZSB3aWxsIGdlbmVyYXRlIHdhbCBsb2dzIGZvciB1bmxvZ2dlZCB0 YWJsZXMgc28gdGhhdCB1bmxvZ2dlZAorCQkgKiB0YWJsZXMgY2FuIGFsc28gYmUgY3JlYXRlZCBh bmQgYWx0ZXJlZCBvbiB0aGUgc3Vic2NyaWJlciBzaWRlLiBUaGlzCisJCSAqIG1ha2VzIGl0IHBv c3NpYmxlIHRvIGRpcmVjdGx5IHJlcGxheSB0aGUgU0VUIExPR0dFRCBjb21tYW5kIGFuZCB0aGUK KwkJICogaW5jb21pbmcgcmV3cml0ZSBtZXNzYWdlIHdpdGhvdXQgY3JlYXRpbmcgYSBuZXcgdGFi bGUuCisJCSAqLworCQlpZiAocmVscGVyc2lzdCAhPSBSRUxQRVJTSVNURU5DRV9URU1QKQorCQl7 CisJCQkvKgorCQkJICogRGVwYXJzZSB0aGUgRERMIGNvbW1hbmQgYW5kIFdBTCBsb2cgaXQgdG8g YWxsb3cgZGVjb2Rpbmcgb2YgdGhlCisJCQkgKiBzYW1lLgorCQkJICovCisJCQlqc29uX3N0cmlu ZyA9IGRlcGFyc2VfdXRpbGl0eV9jb21tYW5kKGNtZCwgZmFsc2UpOworCisJCQlpZiAoanNvbl9z dHJpbmcgIT0gTlVMTCkKKwkJCQlMb2dMb2dpY2FsRERMTWVzc2FnZSgiZGVwYXJzZSIsIHJlbGlk LCB0eXBlLCBqc29uX3N0cmluZywKKwkJCQkJCQkJCSBzdHJsZW4oanNvbl9zdHJpbmcpICsgMSk7 CisJCX0KKwl9CisKKwlzbGlzdF9mb3JlYWNoKGl0ZXIsICYoY3VycmVudEV2ZW50VHJpZ2dlclN0 YXRlLT5TUUxEcm9wTGlzdCkpCisJeworCQl2b2xhdGlsZSBTUUxEcm9wT2JqZWN0ICpvYmo7CisJ CURyb3BTdG10ICAgKnN0bXQ7CisJCUV2ZW50VHJpZ2dlckRhdGEgKnRyaWdkYXRhOworCQljaGFy CSAgICpjb21tYW5kOworCQlEZXBhcnNlZENvbW1hbmRUeXBlIGNtZHR5cGU7CisJCWNvbnN0IGNo YXIgKnRtcHR5cGU7CisJCU9iamVjdENsYXNzCW9iamNsYXNzOworCQlPYmplY3RBZGRyZXNzIG9i amFkZHI7CisKKwkJdHJpZ2RhdGEgPSAoRXZlbnRUcmlnZ2VyRGF0YSAqKSBmY2luZm8tPmNvbnRl eHQ7CisJCXN0bXQgPSAoRHJvcFN0bXQgKikgdHJpZ2RhdGEtPnBhcnNldHJlZTsKKworCQlvYmog PSBzbGlzdF9jb250YWluZXIoU1FMRHJvcE9iamVjdCwgbmV4dCwgaXRlci5jdXIpOworCQlvYmph ZGRyID0gb2JqLT5hZGRyZXNzOworCQlvYmpjbGFzcyA9IGdldE9iamVjdENsYXNzKCZvYmphZGRy KTsKKworCQlpZiAoc3RyY21wKG9iai0+b2JqZWN0dHlwZSwgInRhYmxlIikgPT0gMCkKKwkJCWNt ZHR5cGUgPSBEQ1RfVGFibGVEcm9wRW5kOworCQllbHNlIGlmIChvYmpjbGFzcyA9PSBPQ0xBU1Nf U0NIRU1BIHx8CisJCQkJIG9iamNsYXNzID09IE9DTEFTU19PUEVSQVRPUiB8fAorCQkJCSBvYmpj bGFzcyA9PSBPQ0xBU1NfT1BDTEFTUyB8fAorCQkJCSBvYmpjbGFzcyA9PSBPQ0xBU1NfT1BGQU1J TFkgfHwKKwkJCQkgb2JqY2xhc3MgPT0gT0NMQVNTX0NBU1QgfHwKKwkJCQkgb2JqY2xhc3MgPT0g T0NMQVNTX1RZUEUgfHwKKwkJCQkgb2JqY2xhc3MgPT0gT0NMQVNTX1RSSUdHRVIgfHwKKwkJCQkg b2JqY2xhc3MgPT0gT0NMQVNTX0NPTlZFUlNJT04gfHwKKwkJCQkgb2JqY2xhc3MgPT0gT0NMQVNT X1BPTElDWSB8fAorCQkJCSBvYmpjbGFzcyA9PSBPQ0xBU1NfUkVXUklURSB8fAorCQkJCSBvYmpj bGFzcyA9PSBPQ0xBU1NfRVhURU5TSU9OIHx8CisJCQkJIG9iamNsYXNzID09IE9DTEFTU19GRFcg fHwKKwkJCQkgb2JqY2xhc3MgPT0gT0NMQVNTX1RTQ09ORklHIHx8CisJCQkJIG9iamNsYXNzID09 IE9DTEFTU19UU0RJQ1QgfHwKKwkJCQkgb2JqY2xhc3MgPT0gT0NMQVNTX1RTVEVNUExBVEUgfHwK KwkJCQkgb2JqY2xhc3MgPT0gT0NMQVNTX1RTUEFSU0VSIHx8CisJCQkJIG9iamNsYXNzID09IE9D TEFTU19UUkFOU0ZPUk0gfHwKKwkJCQkgb2JqY2xhc3MgPT0gT0NMQVNTX0ZPUkVJR05fU0VSVkVS IHx8CisJCQkJIG9iamNsYXNzID09IE9DTEFTU19DT0xMQVRJT04gfHwKKwkJCQkgb2JqY2xhc3Mg PT0gT0NMQVNTX1VTRVJfTUFQUElORyB8fAorCQkJCSBvYmpjbGFzcyA9PSBPQ0xBU1NfTEFOR1VB R0UgfHwKKwkJCQkgb2JqY2xhc3MgPT0gT0NMQVNTX1NUQVRJU1RJQ19FWFQgfHwKKwkJCQkgb2Jq Y2xhc3MgPT0gT0NMQVNTX0FNIHx8CisJCQkJIHN0cmNtcChvYmotPm9iamVjdHR5cGUsICJmb3Jl aWduIHRhYmxlIikgPT0gMCB8fAorCQkJCSBzdHJjbXAob2JqLT5vYmplY3R0eXBlLCAiaW5kZXgi KSA9PSAwIHx8CisJCQkJIHN0cmNtcChvYmotPm9iamVjdHR5cGUsICJzZXF1ZW5jZSIpID09IDAg fHwKKwkJCQkgc3RyY21wKG9iai0+b2JqZWN0dHlwZSwgInZpZXciKSA9PSAwIHx8CisJCQkJIHN0 cmNtcChvYmotPm9iamVjdHR5cGUsICJmdW5jdGlvbiIpID09IDAgfHwKKwkJCQkgc3RyY21wKG9i ai0+b2JqZWN0dHlwZSwgIm1hdGVyaWFsaXplZCB2aWV3IikgPT0gMCB8fAorCQkJCSBzdHJjbXAo b2JqLT5vYmplY3R0eXBlLCAicHJvY2VkdXJlIikgPT0gMCB8fAorCQkJCSBzdHJjbXAob2JqLT5v YmplY3R0eXBlLCAicm91dGluZSIpID09IDApCisJCQljbWR0eXBlID0gRENUX09iamVjdERyb3A7 CisJCWVsc2UKKwkJCWNvbnRpbnVlOworCisJCS8qIENoYW5nZSBmb3JlaWduLWRhdGEgd3JhcHBl ciB0byBmb3JlaWduIGRhdGEgd3JhcHBlciAqLworCQlpZiAoc3RybmNtcChvYmotPm9iamVjdHR5 cGUsICJmb3JlaWduLWRhdGEgd3JhcHBlciIsIDIwKSA9PSAwKQorCQl7CisJCQl0bXB0eXBlID0g cHN0cmR1cCgiZm9yZWlnbiBkYXRhIHdyYXBwZXIiKTsKKwkJCWNvbW1hbmQgPSBkZXBhcnNlX2Ry b3BfY29tbWFuZChvYmotPm9iamlkZW50aXR5LCB0bXB0eXBlLAorCQkJCQkJCQkJCSAgIHN0bXQt PmJlaGF2aW9yKTsKKwkJfQorCisJCS8qIENoYW5nZSBzdGF0aXN0aWNzIG9iamVjdCB0byBzdGF0 aXN0aWNzICovCisJCWVsc2UgaWYgKHN0cm5jbXAob2JqLT5vYmplY3R0eXBlLCAic3RhdGlzdGlj cyBvYmplY3QiLAorCQkJCQkJIHN0cmxlbigic3RhdGlzdGljcyBvYmplY3QiKSkgPT0gMCkKKwkJ eworCQkJdG1wdHlwZSA9IHBzdHJkdXAoInN0YXRpc3RpY3MiKTsKKwkJCWNvbW1hbmQgPSBkZXBh cnNlX2Ryb3BfY29tbWFuZChvYmotPm9iamlkZW50aXR5LCB0bXB0eXBlLAorCQkJCQkJCQkJCSAg IHN0bXQtPmJlaGF2aW9yKTsKKwkJfQorCisJCS8qCisJCSAqIE9iamVjdCBpZGVudGl0eSBuZWVk cyB0byBiZSBtb2RpZmllZCB0byBtYWtlIHRoZSBkcm9wIHdvcmsKKwkJICoKKwkJICogRlJPTTog PHJvbGU+IG9uIHNlcnZlciA8c2VydmVybmFtZT4gVE8gIDogZm9yIDxyb2xlPiBzZXJ2ZXIKKwkJ ICogPHNlcnZlcm5hbWU+CisJCSAqCisJCSAqLworCQllbHNlIGlmIChzdHJuY21wKG9iai0+b2Jq ZWN0dHlwZSwgInVzZXIgbWFwcGluZyIsIDEyKSA9PSAwKQorCQl7CisJCQljaGFyCSAgICpvbl9z ZXJ2ZXI7CisKKwkJCXRtcHR5cGUgPSBwYWxsb2Moc3RybGVuKG9iai0+b2JqaWRlbnRpdHkpICsg Mik7CisJCQlvbl9zZXJ2ZXIgPSBzdHJzdHIob2JqLT5vYmppZGVudGl0eSwgIm9uIHNlcnZlciIp OworCisJCQlzcHJpbnRmKChjaGFyICopIHRtcHR5cGUsICJmb3IgIik7CisJCQlzdHJuY2F0KChj aGFyICopIHRtcHR5cGUsIG9iai0+b2JqaWRlbnRpdHksIG9uX3NlcnZlciAtIG9iai0+b2JqaWRl bnRpdHkpOworCQkJc3RyY2F0KChjaGFyICopIHRtcHR5cGUsIG9uX3NlcnZlciArIDMpOworCQkJ Y29tbWFuZCA9IGRlcGFyc2VfZHJvcF9jb21tYW5kKHRtcHR5cGUsIG9iai0+b2JqZWN0dHlwZSwK KwkJCQkJCQkJCQkgICBzdG10LT5iZWhhdmlvcik7CisJCX0KKwkJZWxzZQorCQkJY29tbWFuZCA9 IGRlcGFyc2VfZHJvcF9jb21tYW5kKG9iai0+b2JqaWRlbnRpdHksIG9iai0+b2JqZWN0dHlwZSwK KwkJCQkJCQkJCQkgICBzdG10LT5iZWhhdmlvcik7CisKKwkJaWYgKGNvbW1hbmQpCisJCQlMb2dM b2dpY2FsRERMTWVzc2FnZSgiZGVwYXJzZSIsIG9iai0+YWRkcmVzcy5vYmplY3RJZCwgY21kdHlw ZSwKKwkJCQkJCQkJIGNvbW1hbmQsIHN0cmxlbihjb21tYW5kKSArIDEpOworCX0KKworCXJldHVy biBQb2ludGVyR2V0RGF0dW0oTlVMTCk7Cit9CisKKworLyoKKyAqIHB1YmxpY2F0aW9uX2RlcGFy c2VfdGFibGVfaW5pdF93cml0ZQorICoKKyAqIERlcGFyc2UgdGhlIGRkbCB0YWJsZSBjcmVhdGUg Y29tbWFuZCBhbmQgbG9nIGl0LgorICovCitEYXR1bQorcHVibGljYXRpb25fZGVwYXJzZV90YWJs ZV9pbml0X3dyaXRlKFBHX0ZVTkNUSU9OX0FSR1MpCit7CisJY2hhcgkJcmVscGVyc2lzdDsKKwlD b2xsZWN0ZWRDb21tYW5kICpjbWQ7CisJY2hhcgkgICAqanNvbl9zdHJpbmc7CisKKwlpZiAoIUNB TExFRF9BU19FVkVOVF9UUklHR0VSKGZjaW5mbykpCisJCWVsb2coRVJST1IsICJub3QgZmlyZWQg YnkgZXZlbnQgdHJpZ2dlciBtYW5hZ2VyIik7CisKKwljbWQgPSBjdXJyZW50RXZlbnRUcmlnZ2Vy U3RhdGUtPmN1cnJlbnRDb21tYW5kOworCUFzc2VydChjbWQpOworCisJcmVscGVyc2lzdCA9IGdl dF9yZWxfcGVyc2lzdGVuY2UoY21kLT5kLnNpbXBsZS5hZGRyZXNzLm9iamVjdElkKTsKKworCS8q CisJICogRG8gbm90IGdlbmVyYXRlIHdhbCBsb2cgZm9yIGNvbW1hbmRzIHdob3NlIHRhcmdldCB0 YWJsZSBpcyBhIHRlbXBvcmFyeQorCSAqIHRhYmxlLgorCSAqCisJICogV2Ugd2lsbCBnZW5lcmF0 ZSB3YWwgbG9ncyBmb3IgdW5sb2dnZWQgdGFibGVzIHNvIHRoYXQgdW5sb2dnZWQgdGFibGVzCisJ ICogY2FuIGFsc28gYmUgY3JlYXRlZCBhbmQgYWx0ZXJlZCBvbiB0aGUgc3Vic2NyaWJlciBzaWRl LiBUaGlzIG1ha2VzIGl0CisJICogcG9zc2libGUgdG8gZGlyZWN0bHkgcmVwbGF5IHRoZSBTRVQg TE9HR0VEIGNvbW1hbmQgYW5kIHRoZSBpbmNvbWluZworCSAqIHJld3JpdGUgbWVzc2FnZSB3aXRo b3V0IGNyZWF0aW5nIGEgbmV3IHRhYmxlLgorCSAqLworCWlmIChyZWxwZXJzaXN0ID09IFJFTFBF UlNJU1RFTkNFX1RFTVApCisJCXJldHVybiBQb2ludGVyR2V0RGF0dW0oTlVMTCk7CisKKwkvKiBE ZXBhcnNlIHRoZSBEREwgY29tbWFuZCBhbmQgV0FMIGxvZyBpdCB0byBhbGxvdyBkZWNvZGluZyBv ZiB0aGUgc2FtZS4gKi8KKwlqc29uX3N0cmluZyA9IGRlcGFyc2VfdXRpbGl0eV9jb21tYW5kKGNt ZCwgZmFsc2UpOworCisJaWYgKGpzb25fc3RyaW5nICE9IE5VTEwpCisJCUxvZ0xvZ2ljYWxERExN ZXNzYWdlKCJkZXBhcnNlIiwgY21kLT5kLnNpbXBsZS5hZGRyZXNzLm9iamVjdElkLCBEQ1RfU2lt cGxlQ21kLAorCQkJCQkJCSBqc29uX3N0cmluZywgc3RybGVuKGpzb25fc3RyaW5nKSArIDEpOwor CisJcmV0dXJuIFBvaW50ZXJHZXREYXR1bShOVUxMKTsKK30KZGlmZiAtLWdpdCBhL3NyYy9iYWNr ZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvbG9naWNhbC5jIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRp b24vbG9naWNhbC9sb2dpY2FsLmMKaW5kZXggYmQwYzJmZDZkOC4uMjNhODg5NWFjNyAxMDA2NDQK LS0tIGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9sb2dpY2FsLmMKKysrIGIvc3Jj L2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9sb2dpY2FsLmMKQEAgLTk1LDYgKzk1LDExIEBA IHN0YXRpYyB2b2lkIHN0cmVhbV9jaGFuZ2VfY2Jfd3JhcHBlcihSZW9yZGVyQnVmZmVyICpjYWNo ZSwgUmVvcmRlckJ1ZmZlclRYTiAqdHhuCiBzdGF0aWMgdm9pZCBzdHJlYW1fbWVzc2FnZV9jYl93 cmFwcGVyKFJlb3JkZXJCdWZmZXIgKmNhY2hlLCBSZW9yZGVyQnVmZmVyVFhOICp0eG4sCiAJCQkJ CQkJCQkgIFhMb2dSZWNQdHIgbWVzc2FnZV9sc24sIGJvb2wgdHJhbnNhY3Rpb25hbCwKIAkJCQkJ CQkJCSAgY29uc3QgY2hhciAqcHJlZml4LCBTaXplIG1lc3NhZ2Vfc2l6ZSwgY29uc3QgY2hhciAq bWVzc2FnZSk7CitzdGF0aWMgdm9pZCBzdHJlYW1fZGRsX2NiX3dyYXBwZXIoUmVvcmRlckJ1ZmZl ciAqY2FjaGUsIFJlb3JkZXJCdWZmZXJUWE4gKnR4biwKKwkJCQkJCQkJCQkgWExvZ1JlY1B0ciBt ZXNzYWdlX2xzbiwKKwkJCQkJCQkJCQkgY29uc3QgY2hhciAqcHJlZml4LAorCQkJCQkJCQkJCSBP aWQgcmVsaWQsIERlcGFyc2VkQ29tbWFuZFR5cGUgY21kdHlwZSwKKwkJCQkJCQkJCQkgU2l6ZSBt ZXNzYWdlX3NpemUsIGNvbnN0IGNoYXIgKm1lc3NhZ2UpOwogc3RhdGljIHZvaWQgc3RyZWFtX3Ry dW5jYXRlX2NiX3dyYXBwZXIoUmVvcmRlckJ1ZmZlciAqY2FjaGUsIFJlb3JkZXJCdWZmZXJUWE4g KnR4biwKIAkJCQkJCQkJCSAgIGludCBucmVsYXRpb25zLCBSZWxhdGlvbiByZWxhdGlvbnNbXSwg UmVvcmRlckJ1ZmZlckNoYW5nZSAqY2hhbmdlKTsKIApAQCAtMjQwLDYgKzI0NSw3IEBAIFN0YXJ0 dXBEZWNvZGluZ0NvbnRleHQoTGlzdCAqb3V0cHV0X3BsdWdpbl9vcHRpb25zLAogCQkoY3R4LT5j YWxsYmFja3Muc3RyZWFtX2NvbW1pdF9jYiAhPSBOVUxMKSB8fAogCQkoY3R4LT5jYWxsYmFja3Mu c3RyZWFtX2NoYW5nZV9jYiAhPSBOVUxMKSB8fAogCQkoY3R4LT5jYWxsYmFja3Muc3RyZWFtX21l c3NhZ2VfY2IgIT0gTlVMTCkgfHwKKwkJKGN0eC0+Y2FsbGJhY2tzLnN0cmVhbV9kZGxfY2IgIT0g TlVMTCkgfHwKIAkJKGN0eC0+Y2FsbGJhY2tzLnN0cmVhbV90cnVuY2F0ZV9jYiAhPSBOVUxMKTsK IAogCS8qCkBAIC0yNTcsNiArMjYzLDcgQEAgU3RhcnR1cERlY29kaW5nQ29udGV4dChMaXN0ICpv dXRwdXRfcGx1Z2luX29wdGlvbnMsCiAJY3R4LT5yZW9yZGVyLT5zdHJlYW1fY29tbWl0ID0gc3Ry ZWFtX2NvbW1pdF9jYl93cmFwcGVyOwogCWN0eC0+cmVvcmRlci0+c3RyZWFtX2NoYW5nZSA9IHN0 cmVhbV9jaGFuZ2VfY2Jfd3JhcHBlcjsKIAljdHgtPnJlb3JkZXItPnN0cmVhbV9tZXNzYWdlID0g c3RyZWFtX21lc3NhZ2VfY2Jfd3JhcHBlcjsKKwljdHgtPnJlb3JkZXItPnN0cmVhbV9kZGwgPSBz dHJlYW1fZGRsX2NiX3dyYXBwZXI7CiAJY3R4LT5yZW9yZGVyLT5zdHJlYW1fdHJ1bmNhdGUgPSBz dHJlYW1fdHJ1bmNhdGVfY2Jfd3JhcHBlcjsKIAogCkBAIC0xNTc5LDYgKzE1ODYsNDggQEAgc3Ry ZWFtX21lc3NhZ2VfY2Jfd3JhcHBlcihSZW9yZGVyQnVmZmVyICpjYWNoZSwgUmVvcmRlckJ1ZmZl clRYTiAqdHhuLAogCWVycm9yX2NvbnRleHRfc3RhY2sgPSBlcnJjYWxsYmFjay5wcmV2aW91czsK IH0KIAorc3RhdGljIHZvaWQKK3N0cmVhbV9kZGxfY2Jfd3JhcHBlcihSZW9yZGVyQnVmZmVyICpj YWNoZSwgUmVvcmRlckJ1ZmZlclRYTiAqdHhuLAorCQkJCQkJCSBYTG9nUmVjUHRyIG1lc3NhZ2Vf bHNuLAorCQkJCQkJCSBjb25zdCBjaGFyICpwcmVmaXgsIE9pZCByZWxpZCwgRGVwYXJzZWRDb21t YW5kVHlwZSBjbWR0eXBlLAorCQkJCQkJCSBTaXplIG1lc3NhZ2Vfc2l6ZSwKKwkJCQkJCQkgY29u c3QgY2hhciAqbWVzc2FnZSkKK3sKKwlMb2dpY2FsRGVjb2RpbmdDb250ZXh0ICpjdHggPSBjYWNo ZS0+cHJpdmF0ZV9kYXRhOworCUxvZ2ljYWxFcnJvckNhbGxiYWNrU3RhdGUgc3RhdGU7CisJRXJy b3JDb250ZXh0Q2FsbGJhY2sgZXJyY2FsbGJhY2s7CisKKwlBc3NlcnQoIWN0eC0+ZmFzdF9mb3J3 YXJkKTsKKworCS8qIFdlJ3JlIG9ubHkgc3VwcG9zZWQgdG8gY2FsbCB0aGlzIHdoZW4gc3RyZWFt aW5nIGlzIHN1cHBvcnRlZC4gKi8KKwlBc3NlcnQoY3R4LT5zdHJlYW1pbmcpOworCisJLyogdGhp cyBjYWxsYmFjayBpcyBvcHRpb25hbCAqLworCWlmIChjdHgtPmNhbGxiYWNrcy5zdHJlYW1fZGRs X2NiID09IE5VTEwpCisJCXJldHVybjsKKworCS8qIFB1c2ggY2FsbGJhY2sgKyBpbmZvIG9uIHRo ZSBlcnJvciBjb250ZXh0IHN0YWNrICovCisJc3RhdGUuY3R4ID0gY3R4OworCXN0YXRlLmNhbGxi YWNrX25hbWUgPSAic3RyZWFtX2RkbCI7CisJc3RhdGUucmVwb3J0X2xvY2F0aW9uID0gbWVzc2Fn ZV9sc247CisJZXJyY2FsbGJhY2suY2FsbGJhY2sgPSBvdXRwdXRfcGx1Z2luX2Vycm9yX2NhbGxi YWNrOworCWVycmNhbGxiYWNrLmFyZyA9ICh2b2lkICopICZzdGF0ZTsKKwllcnJjYWxsYmFjay5w cmV2aW91cyA9IGVycm9yX2NvbnRleHRfc3RhY2s7CisJZXJyb3JfY29udGV4dF9zdGFjayA9ICZl cnJjYWxsYmFjazsKKworCS8qIHNldCBvdXRwdXQgc3RhdGUgKi8KKwljdHgtPmFjY2VwdF93cml0 ZXMgPSB0cnVlOworCWN0eC0+d3JpdGVfeGlkID0gdHhuICE9IE5VTEwgPyB0eG4tPnhpZCA6IElu dmFsaWRUcmFuc2FjdGlvbklkOworCWN0eC0+d3JpdGVfbG9jYXRpb24gPSBtZXNzYWdlX2xzbjsK KworCS8qIGRvIHRoZSBhY3R1YWwgd29yazogY2FsbCBjYWxsYmFjayAqLworCWN0eC0+Y2FsbGJh Y2tzLnN0cmVhbV9kZGxfY2IoY3R4LCB0eG4sIG1lc3NhZ2VfbHNuLCBwcmVmaXgsIHJlbGlkLAor CQkJCQkJCQkJCWNtZHR5cGUsIG1lc3NhZ2Vfc2l6ZSwgbWVzc2FnZSk7CisKKwkvKiBQb3AgdGhl IGVycm9yIGNvbnRleHQgc3RhY2sgKi8KKwllcnJvcl9jb250ZXh0X3N0YWNrID0gZXJyY2FsbGJh Y2sucHJldmlvdXM7Cit9CisKIHN0YXRpYyB2b2lkCiBzdHJlYW1fdHJ1bmNhdGVfY2Jfd3JhcHBl cihSZW9yZGVyQnVmZmVyICpjYWNoZSwgUmVvcmRlckJ1ZmZlclRYTiAqdHhuLAogCQkJCQkJICAg aW50IG5yZWxhdGlvbnMsIFJlbGF0aW9uIHJlbGF0aW9uc1tdLApkaWZmIC0tZ2l0IGEvc3JjL2Jh Y2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9tZXNvbi5idWlsZCBiL3NyYy9iYWNrZW5kL3JlcGxp Y2F0aW9uL2xvZ2ljYWwvbWVzb24uYnVpbGQKaW5kZXggMDc3NTZlOTBhZS4uZGFiOWYzYWZlYiAx MDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9tZXNvbi5idWlsZAor KysgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL21lc29uLmJ1aWxkCkBAIC0yLDYg KzIsNyBAQAogCiBiYWNrZW5kX3NvdXJjZXMgKz0gZmlsZXMoCiAgICdkZGxtZXNzYWdlLmMnLAor ICAnZGRsdHJpZ2dlci5jJywKICAgJ2RlY29kZS5jJywKICAgJ2xhdW5jaGVyLmMnLAogICAnbG9n aWNhbC5jJywKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvcHJv dG8uYyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvcHJvdG8uYwppbmRleCBmNWYy YmMyNGQ4Li4zODE3NWRjMDMwIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9s b2dpY2FsL3Byb3RvLmMKKysrIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9wcm90 by5jCkBAIC02NjMsNiArNjYzLDQ3IEBAIGxvZ2ljYWxyZXBfd3JpdGVfbWVzc2FnZShTdHJpbmdJ bmZvIG91dCwgVHJhbnNhY3Rpb25JZCB4aWQsIFhMb2dSZWNQdHIgbHNuLAogCXBxX3NlbmRieXRl cyhvdXQsIG1lc3NhZ2UsIHN6KTsKIH0KIAorLyoKKyAqIFJlYWQgRERMIE1FU1NBR0UgZnJvbSBz dHJlYW0KKyAqLworY2hhciAqCitsb2dpY2FscmVwX3JlYWRfZGRsKFN0cmluZ0luZm8gaW4sIFhM b2dSZWNQdHIgKmxzbiwKKwkJCQkJCSAgIGNvbnN0IGNoYXIgKipwcmVmaXgsCisJCQkJCQkgICBT aXplICpzeikKK3sKKwl1aW50OCBmbGFnczsKKwljaGFyICptc2c7CisKKwlmbGFncyA9IHBxX2dl dG1zZ2ludChpbiwgMSk7CisJaWYgKGZsYWdzICE9IDApCisJCWVsb2coRVJST1IsICJ1bnJlY29n bml6ZWQgZmxhZ3MgJXUgaW4gZGRsIG1lc3NhZ2UiLCBmbGFncyk7CisKKwkqbHNuID0gcHFfZ2V0 bXNnaW50NjQoaW4pOworCSpwcmVmaXggPSBwcV9nZXRtc2dzdHJpbmcoaW4pOworCSpzeiA9IHBx X2dldG1zZ2ludChpbiwgNCk7CisJbXNnID0gKGNoYXIgKikgcHFfZ2V0bXNnYnl0ZXMoaW4sICpz eik7CisKKwlyZXR1cm4gbXNnOworfQorCisvKgorICogV3JpdGUgRERMIE1FU1NBR0UgdG8gc3Ry ZWFtCisgKi8KK3ZvaWQKK2xvZ2ljYWxyZXBfd3JpdGVfZGRsKFN0cmluZ0luZm8gb3V0LCBYTG9n UmVjUHRyIGxzbiwKKwkJCQkJCQljb25zdCBjaGFyICpwcmVmaXgsIFNpemUgc3osIGNvbnN0IGNo YXIgKm1lc3NhZ2UpCit7CisJdWludDgJCWZsYWdzID0gMDsKKworCXBxX3NlbmRieXRlKG91dCwg TE9HSUNBTF9SRVBfTVNHX0RETCk7CisKKwlwcV9zZW5kaW50OChvdXQsIGZsYWdzKTsKKwlwcV9z ZW5kaW50NjQob3V0LCBsc24pOworCXBxX3NlbmRzdHJpbmcob3V0LCBwcmVmaXgpOworCXBxX3Nl bmRpbnQzMihvdXQsIHN6KTsKKwlwcV9zZW5kYnl0ZXMob3V0LCBtZXNzYWdlLCBzeik7Cit9CisK IC8qCiAgKiBXcml0ZSByZWxhdGlvbiBkZXNjcmlwdGlvbiB0byB0aGUgb3V0cHV0IHN0cmVhbS4K ICAqLwpAQCAtMTIxOSw2ICsxMjYwLDggQEAgbG9naWNhbHJlcF9tZXNzYWdlX3R5cGUoTG9naWNh bFJlcE1zZ1R5cGUgYWN0aW9uKQogCQkJcmV0dXJuICJUWVBFIjsKIAkJY2FzZSBMT0dJQ0FMX1JF UF9NU0dfTUVTU0FHRToKIAkJCXJldHVybiAiTUVTU0FHRSI7CisJCWNhc2UgTE9HSUNBTF9SRVBf TVNHX0RETDoKKwkJCXJldHVybiAiRERMIjsKIAkJY2FzZSBMT0dJQ0FMX1JFUF9NU0dfQkVHSU5f UFJFUEFSRToKIAkJCXJldHVybiAiQkVHSU4gUFJFUEFSRSI7CiAJCWNhc2UgTE9HSUNBTF9SRVBf TVNHX1BSRVBBUkU6CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2Fs L3Jlb3JkZXJidWZmZXIuYyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvcmVvcmRl cmJ1ZmZlci5jCmluZGV4IDMyMjIwMjdiZTEuLmJiMmZlZWIxM2MgMTAwNjQ0Ci0tLSBhL3NyYy9i YWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvcmVvcmRlcmJ1ZmZlci5jCisrKyBiL3NyYy9iYWNr ZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvcmVvcmRlcmJ1ZmZlci5jCkBAIC0yMDQ4LDEyICsyMDQ4 LDIwIEBAIHN0YXRpYyBpbmxpbmUgdm9pZAogUmVvcmRlckJ1ZmZlckFwcGx5RERMTWVzc2FnZShS ZW9yZGVyQnVmZmVyICpyYiwgUmVvcmRlckJ1ZmZlclRYTiAqdHhuLAogCQkJCQkJCSBSZW9yZGVy QnVmZmVyQ2hhbmdlICpjaGFuZ2UsIGJvb2wgc3RyZWFtaW5nKQogewotCXJiLT5kZGwocmIsIHR4 biwgY2hhbmdlLT5sc24sCi0JCQljaGFuZ2UtPmRhdGEuZGRsLnByZWZpeCwKLQkJCWNoYW5nZS0+ ZGF0YS5kZGwucmVsaWQsCi0JCQljaGFuZ2UtPmRhdGEuZGRsLmNtZHR5cGUsCi0JCQljaGFuZ2Ut PmRhdGEuZGRsLm1lc3NhZ2Vfc2l6ZSwKLQkJCWNoYW5nZS0+ZGF0YS5kZGwubWVzc2FnZSk7CisJ aWYgKHN0cmVhbWluZykKKwkJcmItPnN0cmVhbV9kZGwocmIsIHR4biwgY2hhbmdlLT5sc24sCisJ CQkJCQkJICBjaGFuZ2UtPmRhdGEuZGRsLnByZWZpeCwKKwkJCQkJCQkgIGNoYW5nZS0+ZGF0YS5k ZGwucmVsaWQsCisJCQkJCQkJICBjaGFuZ2UtPmRhdGEuZGRsLmNtZHR5cGUsCisJCQkJCQkJICBj aGFuZ2UtPmRhdGEuZGRsLm1lc3NhZ2Vfc2l6ZSwKKwkJCQkJCQkgIGNoYW5nZS0+ZGF0YS5kZGwu bWVzc2FnZSk7CisJZWxzZQorCQlyYi0+ZGRsKHJiLCB0eG4sIGNoYW5nZS0+bHNuLAorCQkJCQkg ICBjaGFuZ2UtPmRhdGEuZGRsLnByZWZpeCwKKwkJCQkJICAgY2hhbmdlLT5kYXRhLmRkbC5yZWxp ZCwKKwkJCQkJICAgY2hhbmdlLT5kYXRhLmRkbC5jbWR0eXBlLAorCQkJCQkgICBjaGFuZ2UtPmRh dGEuZGRsLm1lc3NhZ2Vfc2l6ZSwKKwkJCQkJICAgY2hhbmdlLT5kYXRhLmRkbC5tZXNzYWdlKTsK IH0KIAogLyoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvd29y a2VyLmMgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3dvcmtlci5jCmluZGV4IDk2 NzcyZTRkNzMuLmNhOTI1ODExM2EgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9u L2xvZ2ljYWwvd29ya2VyLmMKKysrIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC93 b3JrZXIuYwpAQCAtMTU2LDYgKzE1Niw3IEBACiAjaW5jbHVkZSAibWlzY2FkbWluLmgiCiAjaW5j bHVkZSAibm9kZXMvbWFrZWZ1bmNzLmgiCiAjaW5jbHVkZSAib3B0aW1pemVyL29wdGltaXplci5o IgorI2luY2x1ZGUgInBhcnNlci9hbmFseXplLmgiCiAjaW5jbHVkZSAicGFyc2VyL3BhcnNlX3Jl bGF0aW9uLmgiCiAjaW5jbHVkZSAicGdzdGF0LmgiCiAjaW5jbHVkZSAicG9zdG1hc3Rlci9iZ3dv cmtlci5oIgpAQCAtMTgwLDcgKzE4MSwxMCBAQAogI2luY2x1ZGUgInN0b3JhZ2UvbG1nci5oIgog I2luY2x1ZGUgInN0b3JhZ2UvcHJvYy5oIgogI2luY2x1ZGUgInN0b3JhZ2UvcHJvY2FycmF5Lmgi CisjaW5jbHVkZSAidGNvcC9kZGxfZGVwYXJzZS5oIgorI2luY2x1ZGUgInRjb3AvcHF1ZXJ5Lmgi CiAjaW5jbHVkZSAidGNvcC90Y29wcHJvdC5oIgorI2luY2x1ZGUgInRjb3AvdXRpbGl0eS5oIgog I2luY2x1ZGUgInV0aWxzL2FjbC5oIgogI2luY2x1ZGUgInV0aWxzL2J1aWx0aW5zLmgiCiAjaW5j bHVkZSAidXRpbHMvY2F0Y2FjaGUuaCIKQEAgLTI1MDcsNiArMjUxMSwyMzggQEAgYXBwbHlfaGFu ZGxlX3RydW5jYXRlKFN0cmluZ0luZm8gcykKIAllbmRfcmVwbGljYXRpb25fc3RlcCgpOwogfQog CisvKgorICogU3BlY2lhbCBoYW5kbGluZyBmb3IgQ1JFQVRFIFRBQkxFIEFTIGFuZCBTRUxFQ1Qg SU5UTworICogdG8gbm90IHBvcHVsYXRlIGRhdGEgZnJvbSB0aGUgc291cmNlIHRhYmxlIG9uIHRo ZSBzdWJzY3JpYmVyLgorICogQWxsb3cgdGhlIGRhdGEgdG8gYmUgcmVwbGljYXRlZCB0aHJvdWdo IElOU0VSVHMgb24gdGhlIHB1Ymxpc2hlci4KKyAqLworc3RhdGljIHZvaWQKK3ByZXByb2Nlc3Nf Y3JlYXRlX3RhYmxlKFJhd1N0bXQgKmNvbW1hbmQpCit7CisJQ29tbWFuZFRhZwljb21tYW5kVGFn OworCisJY29tbWFuZFRhZyA9IENyZWF0ZUNvbW1hbmRUYWcoKE5vZGUgKikgY29tbWFuZCk7CisK Kwlzd2l0Y2ggKGNvbW1hbmRUYWcpCisJeworCQljYXNlIENNRFRBR19DUkVBVEVfVEFCTEVfQVM6 CisJCWNhc2UgQ01EVEFHX1NFTEVDVF9JTlRPOgorCQkJeworCQkJCUNyZWF0ZVRhYmxlQXNTdG10 ICpjYXN0bXQgPSAoQ3JlYXRlVGFibGVBc1N0bXQgKikgY29tbWFuZC0+c3RtdDsKKworCQkJCWlm IChjYXN0bXQtPm9ianR5cGUgPT0gT0JKRUNUX1RBQkxFKQorCQkJCXsKKwkJCQkJLyoKKwkJCQkJ ICogRm9yY2Ugc2tpcHBpbmcgZGF0YSBwb3B1bGF0aW9uIHRvIGF2b2lkIGRhdGEKKwkJCQkJICog aW5jb25zaXN0ZW5jeS4gRGF0YSBzaG91bGQgYmUgcmVwbGljYXRlZCBmcm9tIHRoZQorCQkJCQkg KiBwdWJsaXNoZXIgaW5zdGVhZC4KKwkJCQkJICovCisJCQkJCWNhc3RtdC0+aW50by0+c2tpcERh dGEgPSB0cnVlOworCQkJCX0KKwkJCX0KKwkJCWJyZWFrOworCQljYXNlIENNRFRBR19TRUxFQ1Q6 CisJCQl7CisJCQkJU2VsZWN0U3RtdCAqc3N0bXQgPSAoU2VsZWN0U3RtdCAqKSBjb21tYW5kLT5z dG10OworCisJCQkJaWYgKHNzdG10LT5pbnRvQ2xhdXNlICE9IE5VTEwpCisJCQkJeworCQkJCQkv KgorCQkJCQkgKiBGb3JjZSBza2lwcGluZyBkYXRhIHBvcHVsYXRpb24gdG8gYXZvaWQgZGF0YQor CQkJCQkgKiBpbmNvbnNpc3RlbmN5LiBEYXRhIHNob3VsZCBiZSByZXBsaWNhdGVkIGZyb20gdGhl CisJCQkJCSAqIHB1Ymxpc2hlciBpbnN0ZWFkLgorCQkJCQkgKi8KKwkJCQkJc3N0bXQtPmludG9D bGF1c2UtPnNraXBEYXRhID0gdHJ1ZTsKKwkJCQl9CisJCQl9CisJCQlicmVhazsKKwkJZGVmYXVs dDoKKwkJCWJyZWFrOworCX0KK30KKworLyoKKyAqIEhhbmRsZSBDUkVBVEUgVEFCTEUgY29tbWFu ZAorICoKKyAqIENhbGwgQWRkU3Vic2NyaXB0aW9uUmVsU3RhdGUgZm9yIENSRUFURSBMQUJFTCBj b21tYW5kIHRvIHNldCB0aGUgcmVsc3RhdGUgdG8KKyAqIFNVQlJFTF9TVEFURV9SRUFEWSBzbyBE TUwgY2hhbmdlcyBvbiB0aGlzIG5ldyB0YWJsZSBjYW4gYmUgcmVwbGljYXRlZCB3aXRob3V0Cisg KiBoYXZpbmcgdG8gbWFudWFsbHkgcnVuICJhbHRlciBzdWJzY3JpcHRpb24gLi4uIHJlZnJlc2gg cHVibGljYXRpb24iCisgKi8KK3N0YXRpYyB2b2lkCitoYW5kbGVfY3JlYXRlX3RhYmxlKFJhd1N0 bXQgKmNvbW1hbmQpCit7CisJQ29tbWFuZFRhZwljb21tYW5kVGFnOworCVJhbmdlVmFyICAgKnJ2 ID0gTlVMTDsKKwlPaWQJCQlyZWxpZDsKKwlPaWQJCQlyZWxuYW1lc3BhY2UgPSBJbnZhbGlkT2lk OworCUNyZWF0ZVN0bXQgKmNzdG10OworCWNoYXIJICAgKnNjaGVtYW5hbWUgPSBOVUxMOworCWNo YXIJICAgKnJlbG5hbWUgPSBOVUxMOworCisJY29tbWFuZFRhZyA9IENyZWF0ZUNvbW1hbmRUYWco KE5vZGUgKikgY29tbWFuZCk7CisJY3N0bXQgPSAoQ3JlYXRlU3RtdCAqKSBjb21tYW5kLT5zdG10 OworCXJ2ID0gY3N0bXQtPnJlbGF0aW9uOworCisJaWYgKGNvbW1hbmRUYWcgPT0gQ01EVEFHX0NS RUFURV9UQUJMRSkKKwl7CisJCWNzdG10ID0gKENyZWF0ZVN0bXQgKikgY29tbWFuZC0+c3RtdDsK KwkJcnYgPSBjc3RtdC0+cmVsYXRpb247CisJfQorCWVsc2UKKwl7CisJCXJldHVybjsKKwl9CisK KwlpZiAoIXJ2KQorCQlyZXR1cm47CisKKwlzY2hlbWFuYW1lID0gcnYtPnNjaGVtYW5hbWU7CisJ cmVsbmFtZSA9IHJ2LT5yZWxuYW1lOworCisJaWYgKHNjaGVtYW5hbWUgIT0gTlVMTCkKKwkJcmVs bmFtZXNwYWNlID0gZ2V0X25hbWVzcGFjZV9vaWQoc2NoZW1hbmFtZSwgZmFsc2UpOworCisJaWYg KHJlbG5hbWVzcGFjZSAhPSBJbnZhbGlkT2lkKQorCQlyZWxpZCA9IGdldF9yZWxuYW1lX3JlbGlk KHJlbG5hbWUsIHJlbG5hbWVzcGFjZSk7CisJZWxzZQorCQlyZWxpZCA9IFJlbG5hbWVHZXRSZWxp ZChyZWxuYW1lKTsKKworCWlmIChPaWRJc1ZhbGlkKHJlbGlkKSkKKwl7CisJCUFkZFN1YnNjcmlw dGlvblJlbFN0YXRlKE15U3Vic2NyaXB0aW9uLT5vaWQsIHJlbGlkLAorCQkJCQkJCQlTVUJSRUxf U1RBVEVfUkVBRFksCisJCQkJCQkJCUludmFsaWRYTG9nUmVjUHRyKTsKKwkJZXJlcG9ydChERUJV RzEsCisJCQkJKGVycm1zZ19pbnRlcm5hbCgidGFibGUgXCIlc1wiIGFkZGVkIHRvIHN1YnNjcmlw dGlvbiBcIiVzXCIiLAorCQkJCQkJCQkgcmVsbmFtZSwgTXlTdWJzY3JpcHRpb24tPm5hbWUpKSk7 CisJfQorfQorCisvKgorICogSGFuZGxlIERETCByZXBsaWNhdGlvbiBtZXNzYWdlcy4KKyAqLwor c3RhdGljIHZvaWQKK2FwcGx5X2hhbmRsZV9kZGwoU3RyaW5nSW5mbyBzKQoreworCVhMb2dSZWNQ dHIJbHNuOworCWNvbnN0IGNoYXIgKnByZWZpeCA9IE5VTEw7CisJY2hhcgkgICAqbWVzc2FnZSA9 IE5VTEw7CisJY2hhcgkgICAqZGRsX2NvbW1hbmQ7CisJU2l6ZQkJc3o7CisJTGlzdAkgICAqcGFy c2V0cmVlX2xpc3Q7CisJTGlzdENlbGwgICAqcGFyc2V0cmVlX2l0ZW07CisJRGVzdFJlY2VpdmVy ICpyZWNlaXZlcjsKKwlNZW1vcnlDb250ZXh0IG9sZGNvbnRleHQ7CisJY29uc3QgY2hhciAqc2F2 ZV9kZWJ1Z19xdWVyeV9zdHJpbmcgPSBkZWJ1Z19xdWVyeV9zdHJpbmc7CisKKwltZXNzYWdlID0g bG9naWNhbHJlcF9yZWFkX2RkbChzLCAmbHNuLCAmcHJlZml4LCAmc3opOworCisJLyogTWFrZSBz dXJlIHdlIGFyZSBpbiBhIHRyYW5zYWN0aW9uIGNvbW1hbmQgKi8KKwliZWdpbl9yZXBsaWNhdGlv bl9zdGVwKCk7CisKKwlkZGxfY29tbWFuZCA9IGRlcGFyc2VfZGRsX2pzb25fdG9fc3RyaW5nKG1l c3NhZ2UpOworCWRlYnVnX3F1ZXJ5X3N0cmluZyA9IGRkbF9jb21tYW5kOworCisJLyogRGVzdE5v bmUgZm9yIGxvZ2ljYWwgcmVwbGljYXRpb24gKi8KKwlyZWNlaXZlciA9IENyZWF0ZURlc3RSZWNl aXZlcihEZXN0Tm9uZSk7CisJcGFyc2V0cmVlX2xpc3QgPSBwZ19wYXJzZV9xdWVyeShkZGxfY29t bWFuZCk7CisKKwlmb3JlYWNoKHBhcnNldHJlZV9pdGVtLCBwYXJzZXRyZWVfbGlzdCkKKwl7CisJ CUxpc3QJICAgKnBsYW50cmVlX2xpc3Q7CisJCUxpc3QJICAgKnF1ZXJ5dHJlZV9saXN0OworCQlS YXdTdG10ICAgICpjb21tYW5kID0gKFJhd1N0bXQgKikgbGZpcnN0KHBhcnNldHJlZV9pdGVtKTsK KwkJQ29tbWFuZFRhZwljb21tYW5kVGFnOworCQlNZW1vcnlDb250ZXh0IHBlcl9wYXJzZXRyZWVf Y29udGV4dCA9IE5VTEw7CisJCVBvcnRhbAkJcG9ydGFsOworCQlib29sCQlzbmFwc2hvdF9zZXQg PSBmYWxzZTsKKworCQljb21tYW5kVGFnID0gQ3JlYXRlQ29tbWFuZFRhZygoTm9kZSAqKSBjb21t YW5kKTsKKworCQkvKiBJZiB3ZSBnb3QgYSBjYW5jZWwgc2lnbmFsIGluIHBhcnNpbmcgb3IgcHJp b3IgY29tbWFuZCwgcXVpdCAqLworCQlDSEVDS19GT1JfSU5URVJSVVBUUygpOworCisJCS8qIFJl bW92ZSBkYXRhIHBvcHVsYXRpb24gZnJvbSB0aGUgY29tbWFuZCAqLworCQlwcmVwcm9jZXNzX2Ny ZWF0ZV90YWJsZShjb21tYW5kKTsKKworCQkvKgorCQkgKiBTZXQgdXAgYSBzbmFwc2hvdCBpZiBw YXJzZSBhbmFseXNpcy9wbGFubmluZyB3aWxsIG5lZWQgb25lLgorCQkgKi8KKwkJaWYgKGFuYWx5 emVfcmVxdWlyZXNfc25hcHNob3QoY29tbWFuZCkpCisJCXsKKwkJCVB1c2hBY3RpdmVTbmFwc2hv dChHZXRUcmFuc2FjdGlvblNuYXBzaG90KCkpOworCQkJc25hcHNob3Rfc2V0ID0gdHJ1ZTsKKwkJ fQorCisJCS8qCisJCSAqIFdlIGRvIHRoZSB3b3JrIGZvciBlYWNoIHBhcnNldHJlZSBpbiBhIHNo b3J0LWxpdmVkIGNvbnRleHQsIHRvCisJCSAqIGxpbWl0IHRoZSBtZW1vcnkgdXNlZCB3aGVuIHRo ZXJlIGFyZSBtYW55IGNvbW1hbmRzIGluIHRoZSBzdHJpbmcuCisJCSAqLworCQlwZXJfcGFyc2V0 cmVlX2NvbnRleHQgPQorCQkJQWxsb2NTZXRDb250ZXh0Q3JlYXRlKEN1cnJlbnRNZW1vcnlDb250 ZXh0LAorCQkJCQkJCQkgICJleGVjdXRlX3NxbF9zdHJpbmcgcGVyLXN0YXRlbWVudCBjb250ZXh0 IiwKKwkJCQkJCQkJICBBTExPQ1NFVF9ERUZBVUxUX1NJWkVTKTsKKwkJb2xkY29udGV4dCA9IE1l bW9yeUNvbnRleHRTd2l0Y2hUbyhwZXJfcGFyc2V0cmVlX2NvbnRleHQpOworCisJCXF1ZXJ5dHJl ZV9saXN0ID0gcGdfYW5hbHl6ZV9hbmRfcmV3cml0ZV9maXhlZHBhcmFtcyhjb21tYW5kLAorCQkJ CQkJCQkJCQkJCQkJZGRsX2NvbW1hbmQsCisJCQkJCQkJCQkJCQkJCQlOVUxMLCAwLCBOVUxMKTsK KworCQlwbGFudHJlZV9saXN0ID0gcGdfcGxhbl9xdWVyaWVzKHF1ZXJ5dHJlZV9saXN0LCBkZGxf Y29tbWFuZCwgMCwgTlVMTCk7CisKKwkJLyogRG9uZSB3aXRoIHRoZSBzbmFwc2hvdCB1c2VkIGZv ciBwYXJzaW5nL3BsYW5uaW5nICovCisJCWlmIChzbmFwc2hvdF9zZXQpCisJCQlQb3BBY3RpdmVT bmFwc2hvdCgpOworCisJCXBvcnRhbCA9IENyZWF0ZVBvcnRhbCgibG9naWNhbCByZXBsaWNhdGlv biIsIHRydWUsIHRydWUpOworCisJCS8qCisJCSAqIFdlIGRvbid0IGhhdmUgdG8gY29weSBhbnl0 aGluZyBpbnRvIHRoZSBwb3J0YWwsIGJlY2F1c2UgZXZlcnl0aGluZworCQkgKiB3ZSBhcmUgcGFz c2luZyBoZXJlIGlzIGluIEFwcGx5TWVzc2FnZUNvbnRleHQgb3IgdGhlCisJCSAqIHBlcl9wYXJz ZXRyZWVfY29udGV4dCwgYW5kIHNvIHdpbGwgb3V0bGl2ZSB0aGUgcG9ydGFsIGFueXdheS4KKwkJ ICovCisJCVBvcnRhbERlZmluZVF1ZXJ5KHBvcnRhbCwKKwkJCQkJCSAgTlVMTCwKKwkJCQkJCSAg ZGRsX2NvbW1hbmQsCisJCQkJCQkgIGNvbW1hbmRUYWcsCisJCQkJCQkgIHBsYW50cmVlX2xpc3Qs CisJCQkJCQkgIE5VTEwpOworCisJCS8qCisJCSAqIFN0YXJ0IHRoZSBwb3J0YWwuICBObyBwYXJh bWV0ZXJzIGhlcmUuCisJCSAqLworCQlQb3J0YWxTdGFydChwb3J0YWwsIE5VTEwsIDAsIEludmFs aWRTbmFwc2hvdCk7CisKKwkJLyoKKwkJICogU3dpdGNoIGJhY2sgdG8gdHJhbnNhY3Rpb24gY29u dGV4dCBmb3IgZXhlY3V0aW9uLgorCQkgKi8KKwkJTWVtb3J5Q29udGV4dFN3aXRjaFRvKG9sZGNv bnRleHQpOworCisJCSh2b2lkKSBQb3J0YWxSdW4ocG9ydGFsLAorCQkJCQkJIEZFVENIX0FMTCwK KwkJCQkJCSB0cnVlLAorCQkJCQkJIHRydWUsCisJCQkJCQkgcmVjZWl2ZXIsCisJCQkJCQkgcmVj ZWl2ZXIsCisJCQkJCQkgTlVMTCk7CisKKwkJUG9ydGFsRHJvcChwb3J0YWwsIGZhbHNlKTsKKwor CQlDb21tYW5kQ291bnRlckluY3JlbWVudCgpOworCisJCS8qCisJCSAqIFRhYmxlIGNyZWF0ZWQg YnkgRERMIHJlcGxpY2F0aW9uIChkYXRhYmFzZSBsZXZlbCkgaXMgYXV0b21hdGljYWxseQorCQkg KiBhZGRlZCB0byB0aGUgc3Vic2NyaXB0aW9uIGhlcmUuCisJCSAqLworCQloYW5kbGVfY3JlYXRl X3RhYmxlKGNvbW1hbmQpOworCisJCS8qIE5vdyB3ZSBtYXkgZHJvcCB0aGUgcGVyLXBhcnNldHJl ZSBjb250ZXh0LCBpZiBvbmUgd2FzIGNyZWF0ZWQuICovCisJCU1lbW9yeUNvbnRleHREZWxldGUo cGVyX3BhcnNldHJlZV9jb250ZXh0KTsKKwl9CisKKwlkZWJ1Z19xdWVyeV9zdHJpbmcgPSBzYXZl X2RlYnVnX3F1ZXJ5X3N0cmluZzsKKwllbmRfcmVwbGljYXRpb25fc3RlcCgpOworfQogCiAvKgog ICogTG9naWNhbCByZXBsaWNhdGlvbiBwcm90b2NvbCBtZXNzYWdlIGRpc3BhdGNoZXIuCkBAIC0y NTcyLDYgKzI4MDgsMTAgQEAgYXBwbHlfZGlzcGF0Y2goU3RyaW5nSW5mbyBzKQogCQkJICovCiAJ CQlicmVhazsKIAorCQljYXNlIExPR0lDQUxfUkVQX01TR19EREw6CisJCQlhcHBseV9oYW5kbGVf ZGRsKHMpOworCQkJYnJlYWs7CisKIAkJY2FzZSBMT0dJQ0FMX1JFUF9NU0dfU1RSRUFNX1NUQVJU OgogCQkJYXBwbHlfaGFuZGxlX3N0cmVhbV9zdGFydChzKTsKIAkJCWJyZWFrOwpkaWZmIC0tZ2l0 IGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vcGdvdXRwdXQvcGdvdXRwdXQuYyBiL3NyYy9iYWNr ZW5kL3JlcGxpY2F0aW9uL3Bnb3V0cHV0L3Bnb3V0cHV0LmMKaW5kZXggY2E0NmZiYTNhZi4uYmVk NjM2ZmM2MSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vcGdvdXRwdXQvcGdv dXRwdXQuYworKysgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9wZ291dHB1dC9wZ291dHB1dC5j CkBAIC01Myw2ICs1MywxMSBAQCBzdGF0aWMgdm9pZCBwZ291dHB1dF9tZXNzYWdlKExvZ2ljYWxE ZWNvZGluZ0NvbnRleHQgKmN0eCwKIAkJCQkJCQkgUmVvcmRlckJ1ZmZlclRYTiAqdHhuLCBYTG9n UmVjUHRyIG1lc3NhZ2VfbHNuLAogCQkJCQkJCSBib29sIHRyYW5zYWN0aW9uYWwsIGNvbnN0IGNo YXIgKnByZWZpeCwKIAkJCQkJCQkgU2l6ZSBzeiwgY29uc3QgY2hhciAqbWVzc2FnZSk7CitzdGF0 aWMgdm9pZCBwZ291dHB1dF9kZGwoTG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4LAorCQkJCQkJ CQlSZW9yZGVyQnVmZmVyVFhOICp0eG4sIFhMb2dSZWNQdHIgbWVzc2FnZV9sc24sCisJCQkJCQkJ CWNvbnN0IGNoYXIgKnByZWZpeCwgT2lkIHJlbGlkLAorCQkJCQkJCQlEZXBhcnNlZENvbW1hbmRU eXBlIGNtZHR5cGUsCisJCQkJCQkJCVNpemUgc3osIGNvbnN0IGNoYXIgKm1lc3NhZ2UpOwogc3Rh dGljIGJvb2wgcGdvdXRwdXRfb3JpZ2luX2ZpbHRlcihMb2dpY2FsRGVjb2RpbmdDb250ZXh0ICpj dHgsCiAJCQkJCQkJCSAgIFJlcE9yaWdpbklkIG9yaWdpbl9pZCk7CiBzdGF0aWMgdm9pZCBwZ291 dHB1dF9iZWdpbl9wcmVwYXJlX3R4bihMb2dpY2FsRGVjb2RpbmdDb250ZXh0ICpjdHgsCkBAIC0y NTYsNiArMjYxLDcgQEAgX1BHX291dHB1dF9wbHVnaW5faW5pdChPdXRwdXRQbHVnaW5DYWxsYmFj a3MgKmNiKQogCWNiLT5jaGFuZ2VfY2IgPSBwZ291dHB1dF9jaGFuZ2U7CiAJY2ItPnRydW5jYXRl X2NiID0gcGdvdXRwdXRfdHJ1bmNhdGU7CiAJY2ItPm1lc3NhZ2VfY2IgPSBwZ291dHB1dF9tZXNz YWdlOworCWNiLT5kZGxfY2IgPSBwZ291dHB1dF9kZGw7CiAJY2ItPmNvbW1pdF9jYiA9IHBnb3V0 cHV0X2NvbW1pdF90eG47CiAKIAljYi0+YmVnaW5fcHJlcGFyZV9jYiA9IHBnb3V0cHV0X2JlZ2lu X3ByZXBhcmVfdHhuOwpAQCAtMjcyLDYgKzI3OCw3IEBAIF9QR19vdXRwdXRfcGx1Z2luX2luaXQo T3V0cHV0UGx1Z2luQ2FsbGJhY2tzICpjYikKIAljYi0+c3RyZWFtX2NvbW1pdF9jYiA9IHBnb3V0 cHV0X3N0cmVhbV9jb21taXQ7CiAJY2ItPnN0cmVhbV9jaGFuZ2VfY2IgPSBwZ291dHB1dF9jaGFu Z2U7CiAJY2ItPnN0cmVhbV9tZXNzYWdlX2NiID0gcGdvdXRwdXRfbWVzc2FnZTsKKwljYi0+c3Ry ZWFtX2RkbF9jYiA9IHBnb3V0cHV0X2RkbDsKIAljYi0+c3RyZWFtX3RydW5jYXRlX2NiID0gcGdv dXRwdXRfdHJ1bmNhdGU7CiAJLyogdHJhbnNhY3Rpb24gc3RyZWFtaW5nIC0gdHdvLXBoYXNlIGNv bW1pdCAqLwogCWNiLT5zdHJlYW1fcHJlcGFyZV9jYiA9IHBnb3V0cHV0X3N0cmVhbV9wcmVwYXJl X3R4bjsKQEAgLTQyNiw2ICs0MzMsNyBAQCBwZ291dHB1dF9zdGFydHVwKExvZ2ljYWxEZWNvZGlu Z0NvbnRleHQgKmN0eCwgT3V0cHV0UGx1Z2luT3B0aW9ucyAqb3B0LAogCiAJLyogVGhpcyBwbHVn aW4gdXNlcyBiaW5hcnkgcHJvdG9jb2wuICovCiAJb3B0LT5vdXRwdXRfdHlwZSA9IE9VVFBVVF9Q TFVHSU5fQklOQVJZX09VVFBVVDsKKwlvcHQtPnJlY2VpdmVfcmV3cml0ZXMgPSB0cnVlOwogCiAJ LyoKIAkgKiBUaGlzIGlzIHJlcGxpY2F0aW9uIHN0YXJ0IGFuZCBub3Qgc2xvdCBpbml0aWFsaXph dGlvbi4KQEAgLTQ5OSw2ICs1MDcsNyBAQCBwZ291dHB1dF9zdGFydHVwKExvZ2ljYWxEZWNvZGlu Z0NvbnRleHQgKmN0eCwgT3V0cHV0UGx1Z2luT3B0aW9ucyAqb3B0LAogCiAJCS8qIEluaXQgcHVi bGljYXRpb24gc3RhdGUuICovCiAJCWRhdGEtPnB1YmxpY2F0aW9ucyA9IE5JTDsKKwkJZGF0YS0+ ZGVsZXRlZF9yZWxpZHMgPSBOSUw7CiAJCXB1YmxpY2F0aW9uc192YWxpZCA9IGZhbHNlOwogCQlD YWNoZVJlZ2lzdGVyU3lzY2FjaGVDYWxsYmFjayhQVUJMSUNBVElPTk9JRCwKIAkJCQkJCQkJCSAg cHVibGljYXRpb25faW52YWxpZGF0aW9uX2NiLApAQCAtMTM3Nyw5ICsxMzg2LDIyIEBAIHBnb3V0 cHV0X2NoYW5nZShMb2dpY2FsRGVjb2RpbmdDb250ZXh0ICpjdHgsIFJlb3JkZXJCdWZmZXJUWE4g KnR4biwKIAlSZW9yZGVyQnVmZmVyQ2hhbmdlVHlwZSBhY3Rpb24gPSBjaGFuZ2UtPmFjdGlvbjsK IAlUdXBsZVRhYmxlU2xvdCAqb2xkX3Nsb3QgPSBOVUxMOwogCVR1cGxlVGFibGVTbG90ICpuZXdf c2xvdCA9IE5VTEw7CisJYm9vbAkJdGFibGVfcmV3cml0ZSA9IGZhbHNlOwogCiAJdXBkYXRlX3Jl cGxpY2F0aW9uX3Byb2dyZXNzKGN0eCwgZmFsc2UpOwogCisJLyoKKwkgKiBGb3IgaGVhcCByZXdy aXRlcywgd2UgbWlnaHQgbmVlZCB0byByZXBsaWNhdGUgdGhlbSBpZiB0aGUgcmV3cml0dGVuCisJ ICogdGFibGUgcHVibGlzaGVzIHJld3JpdGUgZGRsIG1lc3NhZ2UuIFNvIGdldCB0aGUgYWN0dWFs IHJlbGF0aW9uIGhlcmUKKwkgKiBhbmQgY2hlY2sgdGhlIHB1YmFjdGlvbiBsYXRlci4KKwkgKi8K KwlpZiAocmVsYXRpb24tPnJkX3JlbC0+cmVscmV3cml0ZSkKKwl7CisJCXRhYmxlX3Jld3JpdGUg PSB0cnVlOworCQlyZWxhdGlvbiA9IFJlbGF0aW9uSWRHZXRSZWxhdGlvbihyZWxhdGlvbi0+cmRf cmVsLT5yZWxyZXdyaXRlKTsKKwkJdGFyZ2V0cmVsID0gcmVsYXRpb247CisJfQorCiAJaWYgKCFp c19wdWJsaXNoYWJsZV9yZWxhdGlvbihyZWxhdGlvbikpCiAJCXJldHVybjsKIApAQCAtMTQxMyw2 ICsxNDM1LDEzIEBAIHBnb3V0cHV0X2NoYW5nZShMb2dpY2FsRGVjb2RpbmdDb250ZXh0ICpjdHgs IFJlb3JkZXJCdWZmZXJUWE4gKnR4biwKIAkJCUFzc2VydChmYWxzZSk7CiAJfQogCisJLyoKKwkg KiBXZSBkb24ndCBwdWJsaXNoIHRhYmxlIHJld3JpdGUgY2hhbmdlIHVubGVzcyB3ZSBwdWJsaXNo IHRoZSByZXdyaXRlIGRkbAorCSAqIG1lc3NhZ2UuCisJICovCisJaWYgKHRhYmxlX3Jld3JpdGUg JiYgIXJlbGVudHJ5LT5wdWJhY3Rpb25zLnB1YmRkbCkKKwkJcmV0dXJuOworCiAJLyogQXZvaWQg bGVha2luZyBtZW1vcnkgYnkgdXNpbmcgYW5kIHJlc2V0dGluZyBvdXIgb3duIGNvbnRleHQgKi8K IAlvbGQgPSBNZW1vcnlDb250ZXh0U3dpdGNoVG8oZGF0YS0+Y29udGV4dCk7CiAKQEAgLTE0NDIs OCArMTQ3MSw4IEBAIHBnb3V0cHV0X2NoYW5nZShMb2dpY2FsRGVjb2RpbmdDb250ZXh0ICpjdHgs IFJlb3JkZXJCdWZmZXJUWE4gKnR4biwKIAkJCX0KIAogCQkJLyogQ2hlY2sgcm93IGZpbHRlciAq LwotCQkJaWYgKCFwZ291dHB1dF9yb3dfZmlsdGVyKHRhcmdldHJlbCwgTlVMTCwgJm5ld19zbG90 LCByZWxlbnRyeSwKLQkJCQkJCQkJCSAmYWN0aW9uKSkKKwkJCWlmICghdGFibGVfcmV3cml0ZSAm JgorCQkJCSFwZ291dHB1dF9yb3dfZmlsdGVyKHRhcmdldHJlbCwgTlVMTCwgJm5ld19zbG90LCBy ZWxlbnRyeSwgJmFjdGlvbikpCiAJCQkJYnJlYWs7CiAKIAkJCS8qCkBAIC0xNDYzLDggKzE0OTIs MTkgQEAgcGdvdXRwdXRfY2hhbmdlKExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCwgUmVvcmRl ckJ1ZmZlclRYTiAqdHhuLAogCQkJbWF5YmVfc2VuZF9zY2hlbWEoY3R4LCBjaGFuZ2UsIHJlbGF0 aW9uLCByZWxlbnRyeSk7CiAKIAkJCU91dHB1dFBsdWdpblByZXBhcmVXcml0ZShjdHgsIHRydWUp OwotCQkJbG9naWNhbHJlcF93cml0ZV9pbnNlcnQoY3R4LT5vdXQsIHhpZCwgdGFyZ2V0cmVsLCBu ZXdfc2xvdCwKLQkJCQkJCQkJCWRhdGEtPmJpbmFyeSwgcmVsZW50cnktPmNvbHVtbnMpOworCisJ CQkvKgorCQkJICogQ29udmVydCB0aGUgcmV3cml0ZSBpbnNlcnRzIHRvIHVwZGF0ZXMgc28gdGhh dCB0aGUgc3Vic2NyaWJlcgorCQkJICogY2FuIHJlcGxheSBpdC4gVGhpcyBpcyBuZWVkZWQgdG8g bWFrZSBzdXJlIHRoZSBkYXRhIGJldHdlZW4KKwkJCSAqIHB1Ymxpc2hlciBhbmQgc3Vic2NyaWJl ciBpcyBjb25zaXN0ZW50LgorCQkJICovCisJCQlpZiAodGFibGVfcmV3cml0ZSkKKwkJCQlsb2dp Y2FscmVwX3dyaXRlX3VwZGF0ZShjdHgtPm91dCwgeGlkLCB0YXJnZXRyZWwsCisJCQkJCQkJCQkJ TlVMTCwgbmV3X3Nsb3QsIGRhdGEtPmJpbmFyeSwKKwkJCQkJCQkJCQlyZWxlbnRyeS0+Y29sdW1u cyk7CisJCQllbHNlCisJCQkJbG9naWNhbHJlcF93cml0ZV9pbnNlcnQoY3R4LT5vdXQsIHhpZCwg dGFyZ2V0cmVsLCBuZXdfc2xvdCwKKwkJCQkJCQkJCQlkYXRhLT5iaW5hcnksIHJlbGVudHJ5LT5j b2x1bW5zKTsKIAkJCU91dHB1dFBsdWdpbldyaXRlKGN0eCwgdHJ1ZSk7CiAJCQlicmVhazsKIAkJ Y2FzZSBSRU9SREVSX0JVRkZFUl9DSEFOR0VfVVBEQVRFOgpAQCAtMTU5Niw2ICsxNjM2LDkgQEAg cGdvdXRwdXRfY2hhbmdlKExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCwgUmVvcmRlckJ1ZmZl clRYTiAqdHhuLAogCQlhbmNlc3RvciA9IE5VTEw7CiAJfQogCisJaWYgKHRhYmxlX3Jld3JpdGUp CisJCVJlbGF0aW9uQ2xvc2UocmVsYXRpb24pOworCiAJLyogQ2xlYW51cCAqLwogCU1lbW9yeUNv bnRleHRTd2l0Y2hUbyhvbGQpOwogCU1lbW9yeUNvbnRleHRSZXNldChkYXRhLT5jb250ZXh0KTsK QEAgLTE3MTQsNiArMTc1NywxMzggQEAgcGdvdXRwdXRfbWVzc2FnZShMb2dpY2FsRGVjb2RpbmdD b250ZXh0ICpjdHgsIFJlb3JkZXJCdWZmZXJUWE4gKnR4biwKIAlPdXRwdXRQbHVnaW5Xcml0ZShj dHgsIHRydWUpOwogfQogCisvKgorICogU2VuZCB0aGUgZGVjb2RlZCBEREwgb3ZlciB3aXJlLgor ICovCitzdGF0aWMgdm9pZAorcGdvdXRwdXRfZGRsKExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0 eCwgUmVvcmRlckJ1ZmZlclRYTiAqdHhuLAorCQkJCQlYTG9nUmVjUHRyIG1lc3NhZ2VfbHNuLAor CQkJCQljb25zdCBjaGFyICpwcmVmaXgsIE9pZCByZWxpZCwgRGVwYXJzZWRDb21tYW5kVHlwZSBj bWR0eXBlLAorCQkJCQlTaXplIHN6LCBjb25zdCBjaGFyICptZXNzYWdlKQoreworCVBHT3V0cHV0 RGF0YSAqZGF0YSA9IChQR091dHB1dERhdGEgKikgY3R4LT5vdXRwdXRfcGx1Z2luX3ByaXZhdGU7 CisJUEdPdXRwdXRUeG5EYXRhICp0eG5kYXRhID0gKFBHT3V0cHV0VHhuRGF0YSAqKSB0eG4tPm91 dHB1dF9wbHVnaW5fcHJpdmF0ZTsKKwlSZWxhdGlvbglyZWxhdGlvbiA9IE5VTEw7CisJUmVsYXRp b25TeW5jRW50cnkgKnJlbGVudHJ5OworCisJc3dpdGNoIChjbWR0eXBlKQorCXsKKwkJY2FzZSBE Q1RfVGFibGVEcm9wU3RhcnQ6CisKKwkJCS8qCisJCQkgKiBPbiBEUk9QIHN0YXJ0LCBhZGQgdGhl IHJlbGlkIHRvIGEgZGVsZXRlZF9yZWxpZCBsaXN0IGlmIHRoZQorCQkJICogcmVsaWQgaXMgcGFy dCBvZiBhIHB1YmxpY2F0aW9uIHRoYXQgc3VwcG9ydHMgZGRsIHB1YmxpY2F0aW9uLgorCQkJICog V2UgbmVlZCB0aGlzIGJlY2F1c2Ugb24gRFJPUCBlbmQsIHRoZSByZWxpZCB3aWxsIG5vIGxvbmdl ciBiZQorCQkJICogdmFsaWQuIExhdGVyIG9uIERyb3AgZW5kLCB2ZXJpZnkgdGhhdCB0aGUgZHJv cCBpcyBmb3IgYSByZWxpZAorCQkJICogdGhhdCBpcyBvbiB0aGUgZGVsZXRlZF9yaWQgbGlzdCwg YW5kIG9ubHkgdGhlbiBzZW5kIHRoZSBkZGwKKwkJCSAqIG1lc3NhZ2UuCisJCQkgKi8KKwkJCXJl bGF0aW9uID0gUmVsYXRpb25JZEdldFJlbGF0aW9uKHJlbGlkKTsKKworCQkJQXNzZXJ0KHJlbGF0 aW9uKTsKKwkJCXJlbGVudHJ5ID0gZ2V0X3JlbF9zeW5jX2VudHJ5KGRhdGEsIHJlbGF0aW9uKTsK KworCQkJaWYgKHJlbGVudHJ5LT5wdWJhY3Rpb25zLnB1YmRkbCkKKwkJCQlkYXRhLT5kZWxldGVk X3JlbGlkcyA9IGxhcHBlbmRfb2lkKGRhdGEtPmRlbGV0ZWRfcmVsaWRzLCByZWxpZCk7CisKKwkJ CVJlbGF0aW9uQ2xvc2UocmVsYXRpb24pOworCQkJcmV0dXJuOworCisJCWNhc2UgRENUX1RhYmxl RHJvcEVuZDoKKwkJCWlmICghbGlzdF9tZW1iZXJfb2lkKGRhdGEtPmRlbGV0ZWRfcmVsaWRzLCBy ZWxpZCkpCisJCQkJcmV0dXJuOworCQkJZWxzZQorCQkJCWRhdGEtPmRlbGV0ZWRfcmVsaWRzID0g bGlzdF9kZWxldGVfb2lkKGRhdGEtPmRlbGV0ZWRfcmVsaWRzLCByZWxpZCk7CisJCQlicmVhazsK KworCQljYXNlIERDVF9UYWJsZUFsdGVyOgorCisJCQkvKgorCQkJICogRm9yIHRhYmxlIHJld3Jp dGUgZGRsLCB3ZSBmaXJzdCBzZW5kIHRoZSBvcmlnaW5hbCBkZGwgbWVzc2FnZQorCQkJICogdG8g c3Vic2NyaWJlciwgdGhlbiBjb252ZXJ0IHRoZSB1cGNvbWluZyByZXdyaXRlIElOU0VSVCB0bwor CQkJICogVVBEQVRFIGFuZCBzZW5kIHRoZW0gdG8gc3Vic2NyaWJlciBzbyB0aGF0IHRoZSBkYXRh IGJldHdlZW4KKwkJCSAqIHB1Ymxpc2hlciBhbmQgc3Vic2NyaWJlciBjYW4gYWx3YXlzIGJlIGNv bnNpc3RlbnQuCisJCQkgKgorCQkJICogV2UgZG8gdGhpcyB3YXkgYmVjYXVzZSBvZiB0d28gcmVh c29uOgorCQkJICoKKwkJCSAqICgxKSBUaGUgZGF0YSBiZWZvcmUgdGhlIHJld3JpdGUgZGRsIGNv dWxkIGFscmVhZHkgYmUgZGlmZmVyZW50CisJCQkgKiBhbW9uZyBwdWJsaXNoZXIgYW5kIHN1YnNj cmliZXIuIFRvIG1ha2Ugc3VyZSB0aGUgZXh0cmEgZGF0YSBpbgorCQkJICogc3Vic2NyaWJlciB3 aGljaCBkb2Vzbid0IGV4aXN0IGluIHB1Ymxpc2hlciBhbHNvIGdldCByZXdyaXR0ZW4sCisJCQkg KiB3ZSBuZWVkIHRvIGxldCB0aGUgc3Vic2NyaWJlciBleGVjdXRlIHRoZSBvcmlnaW5hbCByZXdy aXRlIGRkbAorCQkJICogdG8gcmV3cml0ZSBhbGwgdGhlIGRhdGEgYXQgZmlyc3QuCisJCQkgKgor CQkJICogKDIpIHRoZSBkYXRhIGFmdGVyIGV4ZWN1dGluZyByZXdyaXRlIGRkbCBjb3VsZCBiZSBk aWZmZXJlbnQKKwkJCSAqIGFtb25nIHB1Ymxpc2hlciBhbmQgc3Vic2NyaWJlcihkdWUgdG8gZGlm ZmVyZW50CisJCQkgKiBmdW5jdGlvbnMvb3BlcmF0b3JzIHVzZWQgZHVyaW5nIHJld3JpdGUpLCBz byB3ZSBuZWVkIHRvCisJCQkgKiByZXBsaWNhdGUgdGhlIHJld3JpdGUgVVBEQVRFcyB0byBrZWVw IHRoZSBkYXRhIGNvbnNpc3RlbnQuCisJCQkgKgorCQkJICogVE8gSU1QUk9WRTogV2UgY291bGQg aW1wcm92ZSB0aGlzIGJ5IGxldHRpbmcgdGhlIHN1YnNjcmliZXIKKwkJCSAqIG9ubHkgcmV3cml0 ZSB0aGUgZXh0cmEgZGF0YSBpbnN0ZWFkIG9mIGRvaW5nIGZ1bGx5IHJld3JpdGUgYW5kCisJCQkg KiB1c2UgdGhlIHVwY29taW5nIHJld3JpdGUgVVBEQVRFcyB0byByZXdyaXRlIHRoZSByZXN0IGRh dGEuCisJCQkgKiBCZXNpZGVzLCB3ZSBtYXkgbm90IG5lZWQgdG8gc2VuZCByZXdyaXRlIGNoYW5n ZXMgZm9yIGFsbCB0eXBlCisJCQkgKiBvZiByZXdyaXRlIGRkbCwgZm9yIGV4YW1wbGUsIGl0IHNl ZW1zIGZpbmUgdG8gc2tpcCBzZW5kaW5nCisJCQkgKiByZXdyaXRlIGNoYW5nZXMgZm9yIEFMVEVS IFRBQkxFIFNFVCBMT0dHRUQgYXMgdGhlIGRhdGEgaW4gdGhlCisJCQkgKiB0YWJsZSBkb2Vzbid0 IGFjdHVhbGx5IGJlIGNoYW5nZWQuCisJCQkgKi8KKwkJCXJlbGF0aW9uID0gUmVsYXRpb25JZEdl dFJlbGF0aW9uKHJlbGlkKTsKKwkJCUFzc2VydChyZWxhdGlvbik7CisKKwkJCXJlbGVudHJ5ID0g Z2V0X3JlbF9zeW5jX2VudHJ5KGRhdGEsIHJlbGF0aW9uKTsKKworCQkJLyoKKwkJCSAqIFNraXAg c2VuZGluZyB0aGlzIGRkbCBpZiB3ZSBkb24ndCBwdWJsaXNoIGRkbCBtZXNzYWdlIG9yIHRoZQor CQkJICogZGRsIG5lZWQgdG8gYmUgcHVibGlzaGVkIHZpYSBpdHMgcm9vdCByZWxhdGlvbi4KKwkJ CSAqLworCQkJaWYgKCFyZWxlbnRyeS0+cHViYWN0aW9ucy5wdWJkZGwgfHwKKwkJCQlyZWxlbnRy eS0+cHVibGlzaF9hc19yZWxpZCAhPSByZWxpZCkKKwkJCXsKKwkJCQlSZWxhdGlvbkNsb3NlKHJl bGF0aW9uKTsKKwkJCQlyZXR1cm47CisJCQl9CisKKwkJCWJyZWFrOworCisJCWNhc2UgRENUX1Np bXBsZUNtZDoKKwkJCXJlbGF0aW9uID0gUmVsYXRpb25JZEdldFJlbGF0aW9uKHJlbGlkKTsKKwor CQkJaWYgKHJlbGF0aW9uID09IE5VTEwpCisJCQkJYnJlYWs7CisKKwkJCXJlbGVudHJ5ID0gZ2V0 X3JlbF9zeW5jX2VudHJ5KGRhdGEsIHJlbGF0aW9uKTsKKworCQkJaWYgKCFyZWxlbnRyeS0+cHVi YWN0aW9ucy5wdWJkZGwpCisJCQl7CisJCQkJUmVsYXRpb25DbG9zZShyZWxhdGlvbik7CisJCQkJ cmV0dXJuOworCQkJfQorCisJCQlicmVhazsKKworCQljYXNlIERDVF9PYmplY3REcm9wOgorCQkJ LyogZG8gbm90aGluZyAqLworCQkJYnJlYWs7CisKKwkJZGVmYXVsdDoKKwkJCWVsb2coRVJST1Is ICJ1bnN1cHBvcnRlZCB0eXBlICVkIiwgY21kdHlwZSk7CisJCQlicmVhazsKKwl9CisKKwkvKiBT ZW5kIEJFR0lOIGlmIHdlIGhhdmVuJ3QgeWV0ICovCisJaWYgKHR4bmRhdGEgJiYgIXR4bmRhdGEt PnNlbnRfYmVnaW5fdHhuKQorCQlwZ291dHB1dF9zZW5kX2JlZ2luKGN0eCwgdHhuKTsKKworCU91 dHB1dFBsdWdpblByZXBhcmVXcml0ZShjdHgsIHRydWUpOworCWxvZ2ljYWxyZXBfd3JpdGVfZGRs KGN0eC0+b3V0LAorCQkJCQkJCQltZXNzYWdlX2xzbiwKKwkJCQkJCQkJcHJlZml4LAorCQkJCQkJ CQlzeiwKKwkJCQkJCQkJbWVzc2FnZSk7CisJT3V0cHV0UGx1Z2luV3JpdGUoY3R4LCB0cnVlKTsK KworCWlmIChyZWxhdGlvbikKKwkJUmVsYXRpb25DbG9zZShyZWxhdGlvbik7Cit9CisKIC8qCiAg KiBSZXR1cm4gdHJ1ZSBpZiB0aGUgZGF0YSBpcyBhc3NvY2lhdGVkIHdpdGggYW4gb3JpZ2luIGFu ZCB0aGUgdXNlciBoYXMKICAqIHJlcXVlc3RlZCB0aGUgY2hhbmdlcyB0aGF0IGRvbid0IGhhdmUg YW4gb3JpZ2luLCBmYWxzZSBvdGhlcndpc2UuCkBAIC0xOTk1LDcgKzIxNzAsOCBAQCBnZXRfcmVs X3N5bmNfZW50cnkoUEdPdXRwdXREYXRhICpkYXRhLCBSZWxhdGlvbiByZWxhdGlvbikKIAkJZW50 cnktPnNjaGVtYV9zZW50ID0gZmFsc2U7CiAJCWVudHJ5LT5zdHJlYW1lZF90eG5zID0gTklMOwog CQllbnRyeS0+cHViYWN0aW9ucy5wdWJpbnNlcnQgPSBlbnRyeS0+cHViYWN0aW9ucy5wdWJ1cGRh dGUgPQotCQkJZW50cnktPnB1YmFjdGlvbnMucHViZGVsZXRlID0gZW50cnktPnB1YmFjdGlvbnMu cHVidHJ1bmNhdGUgPSBmYWxzZTsKKwkJCWVudHJ5LT5wdWJhY3Rpb25zLnB1YmRlbGV0ZSA9IGVu dHJ5LT5wdWJhY3Rpb25zLnB1YnRydW5jYXRlID0KKwkJCWVudHJ5LT5wdWJhY3Rpb25zLnB1YmRk bCA9IGZhbHNlOwogCQllbnRyeS0+bmV3X3Nsb3QgPSBOVUxMOwogCQllbnRyeS0+b2xkX3Nsb3Qg PSBOVUxMOwogCQltZW1zZXQoZW50cnktPmV4cHJzdGF0ZSwgMCwgc2l6ZW9mKGVudHJ5LT5leHBy c3RhdGUpKTsKQEAgLTIwNTMsNiArMjIyOSw3IEBAIGdldF9yZWxfc3luY19lbnRyeShQR091dHB1 dERhdGEgKmRhdGEsIFJlbGF0aW9uIHJlbGF0aW9uKQogCQllbnRyeS0+cHViYWN0aW9ucy5wdWJ1 cGRhdGUgPSBmYWxzZTsKIAkJZW50cnktPnB1YmFjdGlvbnMucHViZGVsZXRlID0gZmFsc2U7CiAJ CWVudHJ5LT5wdWJhY3Rpb25zLnB1YnRydW5jYXRlID0gZmFsc2U7CisJCWVudHJ5LT5wdWJhY3Rp b25zLnB1YmRkbCA9IGZhbHNlOwogCiAJCS8qCiAJCSAqIFR1cGxlIHNsb3RzIGNsZWFudXBzLiAo V2lsbCBiZSByZWJ1aWx0IGxhdGVyIGlmIG5lZWRlZCkuCkBAIC0yMTY2LDYgKzIzNDMsNyBAQCBn ZXRfcmVsX3N5bmNfZW50cnkoUEdPdXRwdXREYXRhICpkYXRhLCBSZWxhdGlvbiByZWxhdGlvbikK IAkJCQllbnRyeS0+cHViYWN0aW9ucy5wdWJ1cGRhdGUgfD0gcHViLT5wdWJhY3Rpb25zLnB1YnVw ZGF0ZTsKIAkJCQllbnRyeS0+cHViYWN0aW9ucy5wdWJkZWxldGUgfD0gcHViLT5wdWJhY3Rpb25z LnB1YmRlbGV0ZTsKIAkJCQllbnRyeS0+cHViYWN0aW9ucy5wdWJ0cnVuY2F0ZSB8PSBwdWItPnB1 YmFjdGlvbnMucHVidHJ1bmNhdGU7CisJCQkJZW50cnktPnB1YmFjdGlvbnMucHViZGRsIHw9IHB1 Yi0+cHViYWN0aW9ucy5wdWJkZGw7CiAKIAkJCQkvKgogCQkJCSAqIFdlIHdhbnQgdG8gcHVibGlz aCB0aGUgY2hhbmdlcyBhcyB0aGUgdG9wLW1vc3QgYW5jZXN0b3IKZGlmZiAtLWdpdCBhL3NyYy9i YWNrZW5kL3Rjb3AvY21kdGFnLmMgYi9zcmMvYmFja2VuZC90Y29wL2NtZHRhZy5jCmluZGV4IDI5 NzBmNjgwZWIuLmQyYzliMDQ2ZmMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3Rjb3AvY21kdGFn LmMKKysrIGIvc3JjL2JhY2tlbmQvdGNvcC9jbWR0YWcuYwpAQCAtMjYsMTAgKzI2LDExIEBAIHR5 cGVkZWYgc3RydWN0IENvbW1hbmRUYWdCZWhhdmlvcgogCWNvbnN0IGJvb2wJdGFibGVfcmV3cml0 ZV9vazsKIAljb25zdCBib29sCWRpc3BsYXlfcm93Y291bnQ7CS8qIHNob3VsZCB0aGUgbnVtYmVy IG9mIHJvd3MgYWZmZWN0ZWQgYmUKIAkJCQkJCQkJCSAqIHNob3duIGluIHRoZSBjb21tYW5kIGNv bXBsZXRpb24gc3RyaW5nICovCisJY29uc3QgYm9vbAlkZGxfcmVwbGljYXRpb25fb2s7CiB9IENv bW1hbmRUYWdCZWhhdmlvcjsKIAotI2RlZmluZSBQR19DTURUQUcodGFnLCBuYW1lLCBldnRyZ29r LCByd3Jvaywgcm93Y250KSBcCi0JeyBuYW1lLCAodWludDgpIChzaXplb2YobmFtZSkgLSAxKSwg ZXZ0cmdvaywgcndyb2ssIHJvd2NudCB9LAorI2RlZmluZSBQR19DTURUQUcodGFnLCBuYW1lLCBl dnRyZ29rLCByd3Jvaywgcm93Y250LCBkZGxyZXBsb2spIFwKKwl7IG5hbWUsICh1aW50OCkgKHNp emVvZihuYW1lKSAtIDEpLCBldnRyZ29rLCByd3Jvaywgcm93Y250LCBkZGxyZXBsb2sgfSwKIAog c3RhdGljIGNvbnN0IENvbW1hbmRUYWdCZWhhdmlvciB0YWdfYmVoYXZpb3JbQ09NTUFORF9UQUdf TkVYVFRBR10gPSB7CiAjaW5jbHVkZSAidGNvcC9jbWR0YWdsaXN0LmgiCkBAIC01Nyw2ICs1OCwy MSBAQCBHZXRDb21tYW5kVGFnTmFtZUFuZExlbihDb21tYW5kVGFnIGNvbW1hbmRUYWcsIFNpemUg KmxlbikKIAlyZXR1cm4gdGFnX2JlaGF2aW9yW2NvbW1hbmRUYWddLm5hbWU7CiB9CiAKK0NvbW1h bmRUYWcgKgorR2V0Q29tbWFuZFRhZ3NGb3JERExSZXBsKGludCAqbmNvbW1hbmRzKQoreworCUNv bW1hbmRUYWcgKmRkbHJlcGxfY29tbWFuZHMgPSBwYWxsb2MwKENPTU1BTkRfVEFHX05FWFRUQUcg KiBzaXplb2YoQ29tbWFuZFRhZykpOworCSpuY29tbWFuZHMgPSAwOworCisJZm9yKGludCBpID0g MDsgaSA8IENPTU1BTkRfVEFHX05FWFRUQUc7IGkrKykKKwl7CisJCWlmICh0YWdfYmVoYXZpb3Jb aV0uZGRsX3JlcGxpY2F0aW9uX29rKQorCQkJZGRscmVwbF9jb21tYW5kc1soKm5jb21tYW5kcykr K10gPSAoQ29tbWFuZFRhZykgaTsKKwl9CisKKwlyZXR1cm4gZGRscmVwbF9jb21tYW5kczsKK30K KwogYm9vbAogY29tbWFuZF90YWdfZGlzcGxheV9yb3djb3VudChDb21tYW5kVGFnIGNvbW1hbmRU YWcpCiB7CkBAIC03NSw2ICs5MSwxMiBAQCBjb21tYW5kX3RhZ190YWJsZV9yZXdyaXRlX29rKENv bW1hbmRUYWcgY29tbWFuZFRhZykKIAlyZXR1cm4gdGFnX2JlaGF2aW9yW2NvbW1hbmRUYWddLnRh YmxlX3Jld3JpdGVfb2s7CiB9CiAKK2Jvb2wKK2NvbW1hbmRfdGFnX2RkbF9yZXBsaWNhdGlvbl9v ayhDb21tYW5kVGFnIGNvbW1hbmRUYWcpCit7CisJcmV0dXJuIHRhZ19iZWhhdmlvcltjb21tYW5k VGFnXS5kZGxfcmVwbGljYXRpb25fb2s7Cit9CisKIC8qCiAgKiBTZWFyY2ggQ29tbWFuZFRhZyBi eSBuYW1lCiAgKgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdGNvcC91dGlsaXR5LmMgYi9zcmMv YmFja2VuZC90Y29wL3V0aWxpdHkuYwppbmRleCBmMTIxNWM4ZTE4Li4yOWEzMTQ0OWNmIDEwMDY0 NAotLS0gYS9zcmMvYmFja2VuZC90Y29wL3V0aWxpdHkuYworKysgYi9zcmMvYmFja2VuZC90Y29w L3V0aWxpdHkuYwpAQCAtMTY2Niw4ICsxNjY2LDExIEBAIFByb2Nlc3NVdGlsaXR5U2xvdyhQYXJz ZVN0YXRlICpwc3RhdGUsCiAJCQkJYnJlYWs7CiAKIAkJCWNhc2UgVF9DcmVhdGVUYWJsZUFzU3Rt dDoKKwkJCQlFdmVudFRyaWdnZXJUYWJsZUluaXRXcml0ZVN0YXJ0KHBhcnNldHJlZSk7CiAJCQkJ YWRkcmVzcyA9IEV4ZWNDcmVhdGVUYWJsZUFzKHBzdGF0ZSwgKENyZWF0ZVRhYmxlQXNTdG10ICop IHBhcnNldHJlZSwKIAkJCQkJCQkJCQkJcGFyYW1zLCBxdWVyeUVudiwgcWMpOworCQkJCUV2ZW50 VHJpZ2dlclRhYmxlSW5pdFdyaXRlRW5kKGFkZHJlc3MpOworCQkJCWNvbW1hbmRDb2xsZWN0ZWQg PSB0cnVlOwogCQkJCWJyZWFrOwogCiAJCQljYXNlIFRfUmVmcmVzaE1hdFZpZXdTdG10OgpkaWZm IC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvY2FjaGUvZXZ0Y2FjaGUuYyBiL3NyYy9iYWNrZW5k L3V0aWxzL2NhY2hlL2V2dGNhY2hlLmMKaW5kZXggZjdmNzE2NWY3Zi4uN2ZiOGNiMjkxZCAxMDA2 NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvY2FjaGUvZXZ0Y2FjaGUuYworKysgYi9zcmMvYmFj a2VuZC91dGlscy9jYWNoZS9ldnRjYWNoZS5jCkBAIC0xNjcsNiArMTY3LDggQEAgQnVpbGRFdmVu dFRyaWdnZXJDYWNoZSh2b2lkKQogCQkJZXZlbnQgPSBFVlRfU1FMRHJvcDsKIAkJZWxzZSBpZiAo c3RyY21wKGV2dGV2ZW50LCAidGFibGVfcmV3cml0ZSIpID09IDApCiAJCQlldmVudCA9IEVWVF9U YWJsZVJld3JpdGU7CisJCWVsc2UgaWYgKHN0cmNtcChldnRldmVudCwgInRhYmxlX2luaXRfd3Jp dGUiKSA9PSAwKQorCQkJZXZlbnQgPSBFVlRfVGFibGVJbml0V3JpdGU7CiAJCWVsc2UKIAkJCWNv bnRpbnVlOwogCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9jYWNoZS9yZWxjYWNoZS5j IGIvc3JjL2JhY2tlbmQvdXRpbHMvY2FjaGUvcmVsY2FjaGUuYwppbmRleCA0NTBlNTEyNGE1Li4y ZjlkZDE5Yzg1IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9jYWNoZS9yZWxjYWNoZS5j CisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL2NhY2hlL3JlbGNhY2hlLmMKQEAgLTU2OTAsNiArNTY5 MCw3IEBAIFJlbGF0aW9uQnVpbGRQdWJsaWNhdGlvbkRlc2MoUmVsYXRpb24gcmVsYXRpb24sIFB1 YmxpY2F0aW9uRGVzYyAqcHViZGVzYykKIAkJcHViZGVzYy0+cHViYWN0aW9ucy5wdWJ1cGRhdGUg fD0gcHViZm9ybS0+cHVidXBkYXRlOwogCQlwdWJkZXNjLT5wdWJhY3Rpb25zLnB1YmRlbGV0ZSB8 PSBwdWJmb3JtLT5wdWJkZWxldGU7CiAJCXB1YmRlc2MtPnB1YmFjdGlvbnMucHVidHJ1bmNhdGUg fD0gcHViZm9ybS0+cHVidHJ1bmNhdGU7CisJCXB1YmRlc2MtPnB1YmFjdGlvbnMucHViZGRsIHw9 IHB1YmZvcm0tPnB1YmRkbDsKIAogCQkvKgogCQkgKiBDaGVjayBpZiBhbGwgY29sdW1ucyByZWZl cmVuY2VkIGluIHRoZSBmaWx0ZXIgZXhwcmVzc2lvbiBhcmUgcGFydApkaWZmIC0tZ2l0IGEvc3Jj L2Jpbi9wZ19kdW1wL3BnX2R1bXAuYyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19kdW1wLmMKaW5kZXgg NDRkOTU3YzAzOC4uZWRiNGExYmE4MiAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2R1 bXAuYworKysgYi9zcmMvYmluL3BnX2R1bXAvcGdfZHVtcC5jCkBAIC0zOTQ5LDYgKzM5NDksNyBA QCBnZXRQdWJsaWNhdGlvbnMoQXJjaGl2ZSAqZm91dCwgaW50ICpudW1QdWJsaWNhdGlvbnMpCiAJ aW50CQkJaV9wdWJ1cGRhdGU7CiAJaW50CQkJaV9wdWJkZWxldGU7CiAJaW50CQkJaV9wdWJ0cnVu Y2F0ZTsKKwlpbnQJCQlpX3B1YmRkbDsKIAlpbnQJCQlpX3B1YnZpYXJvb3Q7CiAJaW50CQkJaSwK IAkJCQludHVwczsKQEAgLTM5NjQsMjMgKzM5NjUsMjMgQEAgZ2V0UHVibGljYXRpb25zKEFyY2hp dmUgKmZvdXQsIGludCAqbnVtUHVibGljYXRpb25zKQogCXJlc2V0UFFFeHBCdWZmZXIocXVlcnkp OwogCiAJLyogR2V0IHRoZSBwdWJsaWNhdGlvbnMuICovCi0JaWYgKGZvdXQtPnJlbW90ZVZlcnNp b24gPj0gMTMwMDAwKQorCWlmIChmb3V0LT5yZW1vdGVWZXJzaW9uID49IDE2MDAwMCkKIAkJYXBw ZW5kUFFFeHBCdWZmZXJTdHIocXVlcnksCiAJCQkJCQkJICJTRUxFQ1QgcC50YWJsZW9pZCwgcC5v aWQsIHAucHVibmFtZSwgIgogCQkJCQkJCSAicC5wdWJvd25lciwgIgotCQkJCQkJCSAicC5wdWJh bGx0YWJsZXMsIHAucHViaW5zZXJ0LCBwLnB1YnVwZGF0ZSwgcC5wdWJkZWxldGUsIHAucHVidHJ1 bmNhdGUsIHAucHVidmlhcm9vdCAiCisJCQkJCQkJICJwLnB1YmFsbHRhYmxlcywgcC5wdWJpbnNl cnQsIHAucHVidXBkYXRlLCBwLnB1YmRlbGV0ZSwgcC5wdWJ0cnVuY2F0ZSwgcC5wdWJkZGwsIHAu cHVidmlhcm9vdCAiCiAJCQkJCQkJICJGUk9NIHBnX3B1YmxpY2F0aW9uIHAiKTsKIAllbHNlIGlm IChmb3V0LT5yZW1vdGVWZXJzaW9uID49IDExMDAwMCkKIAkJYXBwZW5kUFFFeHBCdWZmZXJTdHIo cXVlcnksCiAJCQkJCQkJICJTRUxFQ1QgcC50YWJsZW9pZCwgcC5vaWQsIHAucHVibmFtZSwgIgog CQkJCQkJCSAicC5wdWJvd25lciwgIgotCQkJCQkJCSAicC5wdWJhbGx0YWJsZXMsIHAucHViaW5z ZXJ0LCBwLnB1YnVwZGF0ZSwgcC5wdWJkZWxldGUsIHAucHVidHJ1bmNhdGUsIGZhbHNlIEFTIHB1 YnZpYXJvb3QgIgorCQkJCQkJCSAicC5wdWJhbGx0YWJsZXMsIHAucHViaW5zZXJ0LCBwLnB1YnVw ZGF0ZSwgcC5wdWJkZWxldGUsIHAucHVidHJ1bmNhdGUsIGZhbHNlIGFzIHAucHViZGRsLCBmYWxz ZSBBUyBwdWJ2aWFyb290ICIKIAkJCQkJCQkgIkZST00gcGdfcHVibGljYXRpb24gcCIpOwogCWVs c2UKIAkJYXBwZW5kUFFFeHBCdWZmZXJTdHIocXVlcnksCiAJCQkJCQkJICJTRUxFQ1QgcC50YWJs ZW9pZCwgcC5vaWQsIHAucHVibmFtZSwgIgogCQkJCQkJCSAicC5wdWJvd25lciwgIgotCQkJCQkJ CSAicC5wdWJhbGx0YWJsZXMsIHAucHViaW5zZXJ0LCBwLnB1YnVwZGF0ZSwgcC5wdWJkZWxldGUs IGZhbHNlIEFTIHB1YnRydW5jYXRlLCBmYWxzZSBBUyBwdWJ2aWFyb290ICIKKwkJCQkJCQkgInAu cHViYWxsdGFibGVzLCBwLnB1Ymluc2VydCwgcC5wdWJ1cGRhdGUsIHAucHViZGVsZXRlLCBmYWxz ZSBBUyBwdWJ0cnVuY2F0ZSwgZmFsc2UgQVMgcC5wdWJkZGwsIGZhbHNlIEFTIHB1YnZpYXJvb3Qg IgogCQkJCQkJCSAiRlJPTSBwZ19wdWJsaWNhdGlvbiBwIik7CiAKIAlyZXMgPSBFeGVjdXRlU3Fs UXVlcnkoZm91dCwgcXVlcnktPmRhdGEsIFBHUkVTX1RVUExFU19PSyk7CkBAIC0zOTk2LDYgKzM5 OTcsNyBAQCBnZXRQdWJsaWNhdGlvbnMoQXJjaGl2ZSAqZm91dCwgaW50ICpudW1QdWJsaWNhdGlv bnMpCiAJaV9wdWJ1cGRhdGUgPSBQUWZudW1iZXIocmVzLCAicHVidXBkYXRlIik7CiAJaV9wdWJk ZWxldGUgPSBQUWZudW1iZXIocmVzLCAicHViZGVsZXRlIik7CiAJaV9wdWJ0cnVuY2F0ZSA9IFBR Zm51bWJlcihyZXMsICJwdWJ0cnVuY2F0ZSIpOworCWlfcHViZGRsID0gUFFmbnVtYmVyKHJlcywg InB1YmRkbCIpOwogCWlfcHVidmlhcm9vdCA9IFBRZm51bWJlcihyZXMsICJwdWJ2aWFyb290Iik7 CiAKIAlwdWJpbmZvID0gcGdfbWFsbG9jKG50dXBzICogc2l6ZW9mKFB1YmxpY2F0aW9uSW5mbykp OwpAQCAtNDAxOSw2ICs0MDIxLDggQEAgZ2V0UHVibGljYXRpb25zKEFyY2hpdmUgKmZvdXQsIGlu dCAqbnVtUHVibGljYXRpb25zKQogCQkJKHN0cmNtcChQUWdldHZhbHVlKHJlcywgaSwgaV9wdWJk ZWxldGUpLCAidCIpID09IDApOwogCQlwdWJpbmZvW2ldLnB1YnRydW5jYXRlID0KIAkJCShzdHJj bXAoUFFnZXR2YWx1ZShyZXMsIGksIGlfcHVidHJ1bmNhdGUpLCAidCIpID09IDApOworCQlwdWJp bmZvW2ldLnB1YmRkbCA9CisJCQkoc3RyY21wKFBRZ2V0dmFsdWUocmVzLCBpLCBpX3B1YmRkbCks ICJ0IikgPT0gMCk7CiAJCXB1YmluZm9baV0ucHVidmlhcm9vdCA9CiAJCQkoc3RyY21wKFBRZ2V0 dmFsdWUocmVzLCBpLCBpX3B1YnZpYXJvb3QpLCAidCIpID09IDApOwogCkBAIC00MDk4LDYgKzQx MDIsMTUgQEAgZHVtcFB1YmxpY2F0aW9uKEFyY2hpdmUgKmZvdXQsIGNvbnN0IFB1YmxpY2F0aW9u SW5mbyAqcHViaW5mbykKIAkJZmlyc3QgPSBmYWxzZTsKIAl9CiAKKwlpZiAocHViaW5mby0+cHVi ZGRsKQorCXsKKwkJaWYgKCFmaXJzdCkKKwkJCWFwcGVuZFBRRXhwQnVmZmVyU3RyKHF1ZXJ5LCAi LCAiKTsKKworCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cihxdWVyeSwgImRkbCIpOworCQlmaXJzdCA9 IGZhbHNlOworCX0KKwogCWFwcGVuZFBRRXhwQnVmZmVyQ2hhcihxdWVyeSwgJ1wnJyk7CiAKIAlp ZiAocHViaW5mby0+cHVidmlhcm9vdCkKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfZHVtcC9wZ19k dW1wLmggYi9zcmMvYmluL3BnX2R1bXAvcGdfZHVtcC5oCmluZGV4IDQzNmFjNWJiOTguLmNkNTBl YzhjZjkgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdfZHVtcC9wZ19kdW1wLmgKKysrIGIvc3JjL2Jp bi9wZ19kdW1wL3BnX2R1bXAuaApAQCAtNjE5LDYgKzYxOSw3IEBAIHR5cGVkZWYgc3RydWN0IF9Q dWJsaWNhdGlvbkluZm8KIAlib29sCQlwdWJ1cGRhdGU7CiAJYm9vbAkJcHViZGVsZXRlOwogCWJv b2wJCXB1YnRydW5jYXRlOworCWJvb2wJCXB1YmRkbDsKIAlib29sCQlwdWJ2aWFyb290OwogfSBQ dWJsaWNhdGlvbkluZm87CiAKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcHNxbC9kZXNjcmliZS5jIGIv c3JjL2Jpbi9wc3FsL2Rlc2NyaWJlLmMKaW5kZXggZGYxNjYzNjVlOC4uMGY0YjFlYjhkYyAxMDA2 NDQKLS0tIGEvc3JjL2Jpbi9wc3FsL2Rlc2NyaWJlLmMKKysrIGIvc3JjL2Jpbi9wc3FsL2Rlc2Ny aWJlLmMKQEAgLTYxNjQsNyArNjE2NCw3IEBAIGxpc3RQdWJsaWNhdGlvbnMoY29uc3QgY2hhciAq cGF0dGVybikKIAlQUUV4cEJ1ZmZlckRhdGEgYnVmOwogCVBHcmVzdWx0ICAgKnJlczsKIAlwcmlu dFF1ZXJ5T3B0IG15b3B0ID0gcHNldC5wb3B0OwotCXN0YXRpYyBjb25zdCBib29sIHRyYW5zbGF0 ZV9jb2x1bW5zW10gPSB7ZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwg ZmFsc2UsIGZhbHNlfTsKKwlzdGF0aWMgY29uc3QgYm9vbCB0cmFuc2xhdGVfY29sdW1uc1tdID0g e2ZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwg ZmFsc2V9OwogCiAJaWYgKHBzZXQuc3ZlcnNpb24gPCAxMDAwMDApCiAJewpAQCAtNjE4MSwxMyAr NjE4MSwxOCBAQCBsaXN0UHVibGljYXRpb25zKGNvbnN0IGNoYXIgKnBhdHRlcm4pCiAJcHJpbnRm UFFFeHBCdWZmZXIoJmJ1ZiwKIAkJCQkJICAiU0VMRUNUIHB1Ym5hbWUgQVMgXCIlc1wiLFxuIgog CQkJCQkgICIgIHBnX2NhdGFsb2cucGdfZ2V0X3VzZXJieWlkKHB1Ym93bmVyKSBBUyBcIiVzXCIs XG4iCi0JCQkJCSAgIiAgcHViYWxsdGFibGVzIEFTIFwiJXNcIixcbiIKLQkJCQkJICAiICBwdWJp bnNlcnQgQVMgXCIlc1wiLFxuIgotCQkJCQkgICIgIHB1YnVwZGF0ZSBBUyBcIiVzXCIsXG4iCi0J CQkJCSAgIiAgcHViZGVsZXRlIEFTIFwiJXNcIiIsCisJCQkJCSAgIiAgcHViYWxsdGFibGVzIEFT IFwiJXNcIiIsCiAJCQkJCSAgZ2V0dGV4dF9ub29wKCJOYW1lIiksCiAJCQkJCSAgZ2V0dGV4dF9u b29wKCJPd25lciIpLAotCQkJCQkgIGdldHRleHRfbm9vcCgiQWxsIHRhYmxlcyIpLAorCQkJCQkg IGdldHRleHRfbm9vcCgiQWxsIHRhYmxlcyIpKTsKKwlpZiAocHNldC5zdmVyc2lvbiA+PSAxNjAw MDApCisJCWFwcGVuZFBRRXhwQnVmZmVyKCZidWYsCisJCQkJCQkgICIsXG4gIHB1YmRkbCBBUyBc IiVzXCIiLAorCQkJCQkJICBnZXR0ZXh0X25vb3AoIkRETCIpKTsKKwlhcHBlbmRQUUV4cEJ1ZmZl cigmYnVmLAorCQkJCQkgICIsXG4gIHB1Ymluc2VydCBBUyBcIiVzXCIsXG4iCisJCQkJCSAgIiAg cHVidXBkYXRlIEFTIFwiJXNcIixcbiIKKwkJCQkJICAiICBwdWJkZWxldGUgQVMgXCIlc1wiIiwK IAkJCQkJICBnZXR0ZXh0X25vb3AoIkluc2VydHMiKSwKIAkJCQkJICBnZXR0ZXh0X25vb3AoIlVw ZGF0ZXMiKSwKIAkJCQkJICBnZXR0ZXh0X25vb3AoIkRlbGV0ZXMiKSk7CkBAIC02MTk5LDcgKzYy MDQsNiBAQCBsaXN0UHVibGljYXRpb25zKGNvbnN0IGNoYXIgKnBhdHRlcm4pCiAJCWFwcGVuZFBR RXhwQnVmZmVyKCZidWYsCiAJCQkJCQkgICIsXG4gIHB1YnZpYXJvb3QgQVMgXCIlc1wiIiwKIAkJ CQkJCSAgZ2V0dGV4dF9ub29wKCJWaWEgcm9vdCIpKTsKLQogCWFwcGVuZFBRRXhwQnVmZmVyU3Ry KCZidWYsCiAJCQkJCQkgIlxuRlJPTSBwZ19jYXRhbG9nLnBnX3B1YmxpY2F0aW9uXG4iKTsKIApA QCAtNjI4OSw2ICs2MjkzLDcgQEAgZGVzY3JpYmVQdWJsaWNhdGlvbnMoY29uc3QgY2hhciAqcGF0 dGVybikKIAlQR3Jlc3VsdCAgICpyZXM7CiAJYm9vbAkJaGFzX3B1YnRydW5jYXRlOwogCWJvb2wJ CWhhc19wdWJ2aWFyb290OworCWJvb2wJCWhhc19wdWJkZGw7CiAKIAlQUUV4cEJ1ZmZlckRhdGEg dGl0bGU7CiAJcHJpbnRUYWJsZUNvbnRlbnQgY29udDsKQEAgLTYzMDUsMTMgKzYzMTAsMTkgQEAg ZGVzY3JpYmVQdWJsaWNhdGlvbnMoY29uc3QgY2hhciAqcGF0dGVybikKIAogCWhhc19wdWJ0cnVu Y2F0ZSA9IChwc2V0LnN2ZXJzaW9uID49IDExMDAwMCk7CiAJaGFzX3B1YnZpYXJvb3QgPSAocHNl dC5zdmVyc2lvbiA+PSAxMzAwMDApOworCWhhc19wdWJkZGwgPSAgKHBzZXQuc3ZlcnNpb24gPj0g MTYwMDAwKTsKIAogCWluaXRQUUV4cEJ1ZmZlcigmYnVmKTsKIAogCXByaW50ZlBRRXhwQnVmZmVy KCZidWYsCiAJCQkJCSAgIlNFTEVDVCBvaWQsIHB1Ym5hbWUsXG4iCiAJCQkJCSAgIiAgcGdfY2F0 YWxvZy5wZ19nZXRfdXNlcmJ5aWQocHVib3duZXIpIEFTIG93bmVyLFxuIgotCQkJCQkgICIgIHB1 YmFsbHRhYmxlcywgcHViaW5zZXJ0LCBwdWJ1cGRhdGUsIHB1YmRlbGV0ZSIpOworCQkJCQkgICIg IHB1YmFsbHRhYmxlcyIpOworCWlmIChoYXNfcHViZGRsKQorCQlhcHBlbmRQUUV4cEJ1ZmZlclN0 cigmYnVmLAorCQkJCQkJCSAiLCBwdWJkZGwiKTsKKwlhcHBlbmRQUUV4cEJ1ZmZlclN0cigmYnVm LAorCQkJCQkJICIsICBwdWJpbnNlcnQsIHB1YnVwZGF0ZSwgcHViZGVsZXRlIik7CiAJaWYgKGhh c19wdWJ0cnVuY2F0ZSkKIAkJYXBwZW5kUFFFeHBCdWZmZXJTdHIoJmJ1ZiwKIAkJCQkJCQkgIiwg cHVidHJ1bmNhdGUiKTsKQEAgLTYzNjksNiArNjM4MCw4IEBAIGRlc2NyaWJlUHVibGljYXRpb25z KGNvbnN0IGNoYXIgKnBhdHRlcm4pCiAJCQluY29scysrOwogCQlpZiAoaGFzX3B1YnZpYXJvb3Qp CiAJCQluY29scysrOworCQlpZiAoaGFzX3B1YmRkbCkKKwkJCW5jb2xzKys7CiAKIAkJaW5pdFBR RXhwQnVmZmVyKCZ0aXRsZSk7CiAJCXByaW50ZlBRRXhwQnVmZmVyKCZ0aXRsZSwgXygiUHVibGlj YXRpb24gJXMiKSwgcHVibmFtZSk7CkBAIC02Mzc2LDYgKzYzODksOCBAQCBkZXNjcmliZVB1Ymxp Y2F0aW9ucyhjb25zdCBjaGFyICpwYXR0ZXJuKQogCiAJCXByaW50VGFibGVBZGRIZWFkZXIoJmNv bnQsIGdldHRleHRfbm9vcCgiT3duZXIiKSwgdHJ1ZSwgYWxpZ24pOwogCQlwcmludFRhYmxlQWRk SGVhZGVyKCZjb250LCBnZXR0ZXh0X25vb3AoIkFsbCB0YWJsZXMiKSwgdHJ1ZSwgYWxpZ24pOwor CQlpZiAoaGFzX3B1YmRkbCkKKwkJCXByaW50VGFibGVBZGRIZWFkZXIoJmNvbnQsIGdldHRleHRf bm9vcCgiRERMIiksIHRydWUsIGFsaWduKTsKIAkJcHJpbnRUYWJsZUFkZEhlYWRlcigmY29udCwg Z2V0dGV4dF9ub29wKCJJbnNlcnRzIiksIHRydWUsIGFsaWduKTsKIAkJcHJpbnRUYWJsZUFkZEhl YWRlcigmY29udCwgZ2V0dGV4dF9ub29wKCJVcGRhdGVzIiksIHRydWUsIGFsaWduKTsKIAkJcHJp bnRUYWJsZUFkZEhlYWRlcigmY29udCwgZ2V0dGV4dF9ub29wKCJEZWxldGVzIiksIHRydWUsIGFs aWduKTsKQEAgLTYzOTMsNiArNjQwOCw4IEBAIGRlc2NyaWJlUHVibGljYXRpb25zKGNvbnN0IGNo YXIgKnBhdHRlcm4pCiAJCQlwcmludFRhYmxlQWRkQ2VsbCgmY29udCwgUFFnZXR2YWx1ZShyZXMs IGksIDcpLCBmYWxzZSwgZmFsc2UpOwogCQlpZiAoaGFzX3B1YnZpYXJvb3QpCiAJCQlwcmludFRh YmxlQWRkQ2VsbCgmY29udCwgUFFnZXR2YWx1ZShyZXMsIGksIDgpLCBmYWxzZSwgZmFsc2UpOwor CQlpZiAoaGFzX3B1YmRkbCkKKwkJCXByaW50VGFibGVBZGRDZWxsKCZjb250LCBQUWdldHZhbHVl KHJlcywgaSwgOSksIGZhbHNlLCBmYWxzZSk7CiAKIAkJaWYgKCFwdWJhbGx0YWJsZXMpCiAJCXsK ZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQgYi9zcmMvaW5jbHVk ZS9jYXRhbG9nL3BnX3Byb2MuZGF0CmluZGV4IDA1ZTA0OThjNWUuLmFkYmQ2M2Y4YTAgMTAwNjQ0 Ci0tLSBhL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQKKysrIGIvc3JjL2luY2x1ZGUv Y2F0YWxvZy9wZ19wcm9jLmRhdApAQCAtMTE5MDEsNCArMTE5MDEsMTYgQEAKIHsgb2lkID0+ICc0 NjQzJywgZGVzY3IgPT4gJ2V4cGFuZCBKU09OIGZvcm1hdCBEREwgdG8gYSBwbGFpbiBEREwgY29t bWFuZCcsCiAgIHByb25hbWUgPT4gJ2RkbF9kZXBhcnNlX2V4cGFuZF9jb21tYW5kJywgcHJvcmV0 dHlwZSA9PiAndGV4dCcsCiAgIHByb2FyZ3R5cGVzID0+ICd0ZXh0JywgcHJvc3JjID0+ICdkZGxf ZGVwYXJzZV9leHBhbmRfY29tbWFuZCcgfSwKK3sgb2lkID0+ICc0NjQ0JywgZGVzY3IgPT4gJ3Ry aWdnZXIgZm9yIGRkbCBjb21tYW5kIGRlcGFyc2UgZW5kJywKKyAgcHJvbmFtZSA9PiAncHVibGlj YXRpb25fZGVwYXJzZV9kZGxfY29tbWFuZF9lbmQnLCBwcm9yZXR0eXBlID0+ICdldmVudF90cmln Z2VyJywKKyAgcHJvYXJndHlwZXMgPT4gJycsIHByb3NyYyA9PiAncHVibGljYXRpb25fZGVwYXJz ZV9kZGxfY29tbWFuZF9lbmQnIH0sCit7IG9pZCA9PiAnNDY0NScsIGRlc2NyID0+ICd0cmlnZ2Vy IGZvciBkZGwgY29tbWFuZCBkZXBhcnNlIHN0YXJ0JywKKyAgcHJvbmFtZSA9PiAncHVibGljYXRp b25fZGVwYXJzZV9kZGxfY29tbWFuZF9zdGFydCcsIHByb3JldHR5cGUgPT4gJ2V2ZW50X3RyaWdn ZXInLAorICBwcm9hcmd0eXBlcyA9PiAnJywgcHJvc3JjID0+ICdwdWJsaWNhdGlvbl9kZXBhcnNl X2RkbF9jb21tYW5kX3N0YXJ0JyB9LAoreyBvaWQgPT4gJzQ2NDYnLCBkZXNjciA9PiAndHJpZ2dl ciBmb3IgZGRsIGNvbW1hbmQgZGVwYXJzZSB0YWJsZSByZXdyaXRlJywKKyAgcHJvbmFtZSA9PiAn cHVibGljYXRpb25fZGVwYXJzZV90YWJsZV9yZXdyaXRlJywgcHJvcmV0dHlwZSA9PiAnZXZlbnRf dHJpZ2dlcicsCisgIHByb2FyZ3R5cGVzID0+ICcnLCBwcm9zcmMgPT4gJ3B1YmxpY2F0aW9uX2Rl cGFyc2VfdGFibGVfcmV3cml0ZScgfSwKK3sgb2lkID0+ICc0NjQ3JywgZGVzY3IgPT4gJ3RyaWdn ZXIgZm9yIGRkbCBjb21tYW5kIGRlcGFyc2UgdGFibGUgaW5pdCcsCisgIHByb25hbWUgPT4gJ3B1 YmxpY2F0aW9uX2RlcGFyc2VfdGFibGVfaW5pdF93cml0ZScsIHByb3JldHR5cGUgPT4gJ2V2ZW50 X3RyaWdnZXInLAorICBwcm9hcmd0eXBlcyA9PiAnJywgcHJvc3JjID0+ICdwdWJsaWNhdGlvbl9k ZXBhcnNlX3RhYmxlX2luaXRfd3JpdGUnIH0sCiBdCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9j YXRhbG9nL3BnX3B1YmxpY2F0aW9uLmggYi9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3B1YmxpY2F0 aW9uLmgKaW5kZXggZWNmNWEyOGUwMC4uY2M5NTA0MzZhMyAxMDA2NDQKLS0tIGEvc3JjL2luY2x1 ZGUvY2F0YWxvZy9wZ19wdWJsaWNhdGlvbi5oCisrKyBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdf cHVibGljYXRpb24uaApAQCAtNTQsNiArNTQsOSBAQCBDQVRBTE9HKHBnX3B1YmxpY2F0aW9uLDYx MDQsUHVibGljYXRpb25SZWxhdGlvbklkKQogCiAJLyogdHJ1ZSBpZiBwYXJ0aXRpb24gY2hhbmdl cyBhcmUgcHVibGlzaGVkIHVzaW5nIHJvb3Qgc2NoZW1hICovCiAJYm9vbAkJcHVidmlhcm9vdDsK KworCS8qIHRydWUgaWYgZGRscyBhcmUgcHVibGlzaGVkICovCisJYm9vbAkJcHViZGRsOwogfSBG b3JtRGF0YV9wZ19wdWJsaWNhdGlvbjsKIAogLyogLS0tLS0tLS0tLS0tLS0tLQpAQCAtNzIsNiAr NzUsNyBAQCB0eXBlZGVmIHN0cnVjdCBQdWJsaWNhdGlvbkFjdGlvbnMKIAlib29sCQlwdWJ1cGRh dGU7CiAJYm9vbAkJcHViZGVsZXRlOwogCWJvb2wJCXB1YnRydW5jYXRlOworCWJvb2wJCXB1YmRk bDsKIH0gUHVibGljYXRpb25BY3Rpb25zOwogCiB0eXBlZGVmIHN0cnVjdCBQdWJsaWNhdGlvbkRl c2MKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2NvbW1hbmRzL2V2ZW50X3RyaWdnZXIuaCBiL3Ny Yy9pbmNsdWRlL2NvbW1hbmRzL2V2ZW50X3RyaWdnZXIuaAppbmRleCA0NzA5NDc1MmU5Li45NDI4 MTZmNmQ2IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9jb21tYW5kcy9ldmVudF90cmlnZ2VyLmgK KysrIGIvc3JjL2luY2x1ZGUvY29tbWFuZHMvZXZlbnRfdHJpZ2dlci5oCkBAIC05NCw2ICs5NCwx MCBAQCBleHRlcm4gdm9pZCBFdmVudFRyaWdnZXJERExDb21tYW5kRW5kKE5vZGUgKnBhcnNldHJl ZSk7CiBleHRlcm4gdm9pZCBFdmVudFRyaWdnZXJTUUxEcm9wKE5vZGUgKnBhcnNldHJlZSk7CiBl eHRlcm4gdm9pZCBFdmVudFRyaWdnZXJUYWJsZVJld3JpdGUoTm9kZSAqcGFyc2V0cmVlLCBPaWQg dGFibGVPaWQsIGludCByZWFzb24pOwogCitleHRlcm4gdm9pZCBFdmVudFRyaWdnZXJUYWJsZUlu aXRXcml0ZVN0YXJ0KE5vZGUgKnBhcnNldHJlZSk7CitleHRlcm4gdm9pZCBFdmVudFRyaWdnZXJU YWJsZUluaXRXcml0ZShOb2RlICpwYXJzZXRyZWUsIE9iamVjdEFkZHJlc3MgYWRkcmVzcyk7Citl eHRlcm4gdm9pZCBFdmVudFRyaWdnZXJUYWJsZUluaXRXcml0ZUVuZChPYmplY3RBZGRyZXNzIGFk ZHJlc3MpOworCiBleHRlcm4gYm9vbCBFdmVudFRyaWdnZXJCZWdpbkNvbXBsZXRlUXVlcnkodm9p ZCk7CiBleHRlcm4gdm9pZCBFdmVudFRyaWdnZXJFbmRDb21wbGV0ZVF1ZXJ5KHZvaWQpOwogZXh0 ZXJuIGJvb2wgdHJhY2tEcm9wcGVkT2JqZWN0c05lZWRlZCh2b2lkKTsKQEAgLTExMCw3ICsxMTQs MTIgQEAgZXh0ZXJuIHZvaWQgRXZlbnRUcmlnZ2VyQ29sbGVjdFNpbXBsZUNvbW1hbmQoT2JqZWN0 QWRkcmVzcyBhZGRyZXNzLAogZXh0ZXJuIHZvaWQgRXZlbnRUcmlnZ2VyQWx0ZXJUYWJsZVN0YXJ0 KE5vZGUgKnBhcnNldHJlZSk7CiBleHRlcm4gdm9pZCBFdmVudFRyaWdnZXJBbHRlclRhYmxlUmVs aWQoT2lkIG9iamVjdElkKTsKIGV4dGVybiB2b2lkIEV2ZW50VHJpZ2dlckNvbGxlY3RBbHRlclRh YmxlU3ViY21kKE5vZGUgKnN1YmNtZCwKLQkJCQkJCQkJCQkJCU9iamVjdEFkZHJlc3MgYWRkcmVz cyk7CisJCQkJCQkJCQkJCQlPYmplY3RBZGRyZXNzIGFkZHJlc3MsCisJCQkJCQkJCQkJCQlib29s IHJld3JpdGUpOworCitleHRlcm4gdm9pZCBFdmVudFRyaWdnZXJBbHRlclR5cGVTdGFydChBbHRl clRhYmxlQ21kICpzdWJjbWQsIFJlbGF0aW9uIHJlbCk7CitleHRlcm4gdm9pZCBFdmVudFRyaWdn ZXJBbHRlclR5cGVFbmQoTm9kZSAqc3ViY21kLCBPYmplY3RBZGRyZXNzIGFkZHJlc3MsCisJCQkJ CQkJCQkgYm9vbCByZXdyaXRlKTsKIGV4dGVybiB2b2lkIEV2ZW50VHJpZ2dlckFsdGVyVGFibGVF bmQodm9pZCk7CiAKIGV4dGVybiB2b2lkIEV2ZW50VHJpZ2dlckNvbGxlY3RHcmFudChJbnRlcm5h bEdyYW50ICppc3RtdCk7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9sb2dp Y2FscHJvdG8uaCBiL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL2xvZ2ljYWxwcm90by5oCmluZGV4 IDFlYjdkZGE1MjkuLjg1NzJjYTZjMWUgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3JlcGxpY2F0 aW9uL2xvZ2ljYWxwcm90by5oCisrKyBiL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL2xvZ2ljYWxw cm90by5oCkBAIC02MSw2ICs2MSw3IEBAIHR5cGVkZWYgZW51bSBMb2dpY2FsUmVwTXNnVHlwZQog CUxPR0lDQUxfUkVQX01TR19SRUxBVElPTiA9ICdSJywKIAlMT0dJQ0FMX1JFUF9NU0dfVFlQRSA9 ICdZJywKIAlMT0dJQ0FMX1JFUF9NU0dfTUVTU0FHRSA9ICdNJywKKwlMT0dJQ0FMX1JFUF9NU0df RERMID0gJ0wnLAogCUxPR0lDQUxfUkVQX01TR19CRUdJTl9QUkVQQVJFID0gJ2InLAogCUxPR0lD QUxfUkVQX01TR19QUkVQQVJFID0gJ1AnLAogCUxPR0lDQUxfUkVQX01TR19DT01NSVRfUFJFUEFS RUQgPSAnSycsCkBAIC0yMzAsNiArMjMxLDkgQEAgZXh0ZXJuIExpc3QgKmxvZ2ljYWxyZXBfcmVh ZF90cnVuY2F0ZShTdHJpbmdJbmZvIGluLAogCQkJCQkJCQkJICBib29sICpjYXNjYWRlLCBib29s ICpyZXN0YXJ0X3NlcXMpOwogZXh0ZXJuIHZvaWQgbG9naWNhbHJlcF93cml0ZV9tZXNzYWdlKFN0 cmluZ0luZm8gb3V0LCBUcmFuc2FjdGlvbklkIHhpZCwgWExvZ1JlY1B0ciBsc24sCiAJCQkJCQkJ CQkgYm9vbCB0cmFuc2FjdGlvbmFsLCBjb25zdCBjaGFyICpwcmVmaXgsIFNpemUgc3osIGNvbnN0 IGNoYXIgKm1lc3NhZ2UpOworZXh0ZXJuIHZvaWQgbG9naWNhbHJlcF93cml0ZV9kZGwoU3RyaW5n SW5mbyBvdXQsIFhMb2dSZWNQdHIgbHNuLAorCQkJCQkJCQkJCWNvbnN0IGNoYXIgKnByZWZpeCwg U2l6ZSBzeiwgY29uc3QgY2hhciAqbWVzc2FnZSk7CitleHRlcm4gY2hhciAqbG9naWNhbHJlcF9y ZWFkX2RkbChTdHJpbmdJbmZvIGluLCBYTG9nUmVjUHRyICpsc24sIGNvbnN0IGNoYXIgKipwcmVm aXgsIFNpemUgKnN6KTsKIGV4dGVybiB2b2lkIGxvZ2ljYWxyZXBfd3JpdGVfcmVsKFN0cmluZ0lu Zm8gb3V0LCBUcmFuc2FjdGlvbklkIHhpZCwKIAkJCQkJCQkJIFJlbGF0aW9uIHJlbCwgQml0bWFw c2V0ICpjb2x1bW5zKTsKIGV4dGVybiBMb2dpY2FsUmVwUmVsYXRpb24gKmxvZ2ljYWxyZXBfcmVh ZF9yZWwoU3RyaW5nSW5mbyBpbik7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9yZXBsaWNhdGlv bi9vdXRwdXRfcGx1Z2luLmggYi9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9vdXRwdXRfcGx1Z2lu LmgKaW5kZXggMGM0MjUwMDk2Yy4uYWUxYWRkY2U3YSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUv cmVwbGljYXRpb24vb3V0cHV0X3BsdWdpbi5oCisrKyBiL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9u L291dHB1dF9wbHVnaW4uaApAQCAtOSw3ICs5LDYgQEAKICNpZm5kZWYgT1VUUFVUX1BMVUdJTl9I CiAjZGVmaW5lIE9VVFBVVF9QTFVHSU5fSAogCi0jaW5jbHVkZSAicmVwbGljYXRpb24vZGRsbWVz c2FnZS5oIgogI2luY2x1ZGUgInJlcGxpY2F0aW9uL3Jlb3JkZXJidWZmZXIuaCIKIAogc3RydWN0 IExvZ2ljYWxEZWNvZGluZ0NvbnRleHQ7CkBAIC0yMTQsNiArMjEzLDE5IEBAIHR5cGVkZWYgdm9p ZCAoKkxvZ2ljYWxEZWNvZGVTdHJlYW1NZXNzYWdlQ0IpIChzdHJ1Y3QgTG9naWNhbERlY29kaW5n Q29udGV4dCAqY3R4CiAJCQkJCQkJCQkJCSAgU2l6ZSBtZXNzYWdlX3NpemUsCiAJCQkJCQkJCQkJ CSAgY29uc3QgY2hhciAqbWVzc2FnZSk7CiAKKy8qCisgKiBDYWxsYmFjayBmb3Igc3RyZWFtaW5n IGxvZ2ljYWwgZGVjb2RpbmcgRERMIG1lc3NhZ2VzIGZyb20gaW4tcHJvZ3Jlc3MKKyAqIHRyYW5z YWN0aW9ucy4KKyAqLwordHlwZWRlZiB2b2lkICgqTG9naWNhbERlY29kZVN0cmVhbURETE1lc3Nh Z2VDQikgKHN0cnVjdCBMb2dpY2FsRGVjb2RpbmdDb250ZXh0ICpjdHgsCisJCQkJCQkJCQkJCQkg UmVvcmRlckJ1ZmZlclRYTiAqdHhuLAorCQkJCQkJCQkJCQkJIFhMb2dSZWNQdHIgbWVzc2FnZV9s c24sCisJCQkJCQkJCQkJCQkgY29uc3QgY2hhciAqcHJlZml4LAorCQkJCQkJCQkJCQkJIE9pZCBy ZWxpZCwKKwkJCQkJCQkJCQkJCSBEZXBhcnNlZENvbW1hbmRUeXBlIGNtZHR5cGUsCisJCQkJCQkJ CQkJCQkgU2l6ZSBtZXNzYWdlX3NpemUsCisJCQkJCQkJCQkJCQkgY29uc3QgY2hhciAqbWVzc2Fn ZSk7CisKIC8qCiAgKiBDYWxsYmFjayBmb3Igc3RyZWFtaW5nIHRydW5jYXRlcyBmcm9tIGluLXBy b2dyZXNzIHRyYW5zYWN0aW9ucy4KICAqLwpAQCAtMjUzLDYgKzI2NSw3IEBAIHR5cGVkZWYgc3Ry dWN0IE91dHB1dFBsdWdpbkNhbGxiYWNrcwogCUxvZ2ljYWxEZWNvZGVTdHJlYW1Db21taXRDQiBz dHJlYW1fY29tbWl0X2NiOwogCUxvZ2ljYWxEZWNvZGVTdHJlYW1DaGFuZ2VDQiBzdHJlYW1fY2hh bmdlX2NiOwogCUxvZ2ljYWxEZWNvZGVTdHJlYW1NZXNzYWdlQ0Igc3RyZWFtX21lc3NhZ2VfY2I7 CisJTG9naWNhbERlY29kZVN0cmVhbURETE1lc3NhZ2VDQiBzdHJlYW1fZGRsX2NiOwogCUxvZ2lj YWxEZWNvZGVTdHJlYW1UcnVuY2F0ZUNCIHN0cmVhbV90cnVuY2F0ZV9jYjsKIH0gT3V0cHV0UGx1 Z2luQ2FsbGJhY2tzOwogCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9wZ291 dHB1dC5oIGIvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vcGdvdXRwdXQuaAppbmRleCAwMjAyNzU1 MGUyLi44M2UwYjFlMmU1IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9wZ291 dHB1dC5oCisrKyBiL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL3Bnb3V0cHV0LmgKQEAgLTI1LDYg KzI1LDcgQEAgdHlwZWRlZiBzdHJ1Y3QgUEdPdXRwdXREYXRhCiAJdWludDMyCQlwcm90b2NvbF92 ZXJzaW9uOwogCUxpc3QJICAgKnB1YmxpY2F0aW9uX25hbWVzOwogCUxpc3QJICAgKnB1YmxpY2F0 aW9uczsKKwlMaXN0CSAgICpkZWxldGVkX3JlbGlkczsKIAlib29sCQliaW5hcnk7CiAJYm9vbAkJ c3RyZWFtaW5nOwogCWJvb2wJCW1lc3NhZ2VzOwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvcmVw bGljYXRpb24vcmVvcmRlcmJ1ZmZlci5oIGIvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vcmVvcmRl cmJ1ZmZlci5oCmluZGV4IDNkMjkzOWRlMjkuLjQxYTE5MTFjODEgMTAwNjQ0Ci0tLSBhL3NyYy9p bmNsdWRlL3JlcGxpY2F0aW9uL3Jlb3JkZXJidWZmZXIuaAorKysgYi9zcmMvaW5jbHVkZS9yZXBs aWNhdGlvbi9yZW9yZGVyYnVmZmVyLmgKQEAgLTUzOSw2ICs1MzksMTcgQEAgdHlwZWRlZiB2b2lk ICgqUmVvcmRlckJ1ZmZlclN0cmVhbU1lc3NhZ2VDQikgKAogCQkJCQkJCQkJCQkgIGNvbnN0IGNo YXIgKnByZWZpeCwgU2l6ZSBzeiwKIAkJCQkJCQkJCQkJICBjb25zdCBjaGFyICptZXNzYWdlKTsK IAorLyogc3RyZWFtIERETCBtZXNzYWdlIGNhbGxiYWNrIHNpZ25hdHVyZSAqLwordHlwZWRlZiB2 b2lkICgqUmVvcmRlckJ1ZmZlclN0cmVhbURETE1lc3NhZ2VDQikgKAorCQkJCQkJCQkJCQkJIFJl b3JkZXJCdWZmZXIgKnJiLAorCQkJCQkJCQkJCQkJIFJlb3JkZXJCdWZmZXJUWE4gKnR4biwKKwkJ CQkJCQkJCQkJCSBYTG9nUmVjUHRyIG1lc3NhZ2VfbHNuLAorCQkJCQkJCQkJCQkJIGNvbnN0IGNo YXIgKnByZWZpeCwKKwkJCQkJCQkJCQkJCSBPaWQgcmVsaWQsCisJCQkJCQkJCQkJCQkgRGVwYXJz ZWRDb21tYW5kVHlwZSBjbWR0eXBlLAorCQkJCQkJCQkJCQkJIFNpemUgc3osCisJCQkJCQkJCQkJ CQkgY29uc3QgY2hhciAqbWVzc2FnZSk7CisKIC8qIHN0cmVhbSB0cnVuY2F0ZSBjYWxsYmFjayBz aWduYXR1cmUgKi8KIHR5cGVkZWYgdm9pZCAoKlJlb3JkZXJCdWZmZXJTdHJlYW1UcnVuY2F0ZUNC KSAoCiAJCQkJCQkJCQkJCSAgIFJlb3JkZXJCdWZmZXIgKnJiLApAQCAtNjA5LDYgKzYyMCw3IEBA IHN0cnVjdCBSZW9yZGVyQnVmZmVyCiAJUmVvcmRlckJ1ZmZlclN0cmVhbUNvbW1pdENCIHN0cmVh bV9jb21taXQ7CiAJUmVvcmRlckJ1ZmZlclN0cmVhbUNoYW5nZUNCIHN0cmVhbV9jaGFuZ2U7CiAJ UmVvcmRlckJ1ZmZlclN0cmVhbU1lc3NhZ2VDQiBzdHJlYW1fbWVzc2FnZTsKKwlSZW9yZGVyQnVm ZmVyU3RyZWFtRERMTWVzc2FnZUNCIHN0cmVhbV9kZGw7CiAJUmVvcmRlckJ1ZmZlclN0cmVhbVRy dW5jYXRlQ0Igc3RyZWFtX3RydW5jYXRlOwogCiAJLyoKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRl L3Rjb3AvY21kdGFnLmggYi9zcmMvaW5jbHVkZS90Y29wL2NtZHRhZy5oCmluZGV4IDliZGU1Njhi YjAuLjgwOTUwOWY0OTAgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3Rjb3AvY21kdGFnLmgKKysr IGIvc3JjL2luY2x1ZGUvdGNvcC9jbWR0YWcuaApAQCAtMTYsNyArMTYsNyBAQAogLyogYnVmZmVy IHNpemUgcmVxdWlyZWQgZm9yIGNvbW1hbmQgY29tcGxldGlvbiB0YWdzICovCiAjZGVmaW5lIENP TVBMRVRJT05fVEFHX0JVRlNJWkUJNjQKIAotI2RlZmluZSBQR19DTURUQUcodGFnLCBuYW1lLCBl dnRyZ29rLCByd3Jvaywgcm93Y250KSBcCisjZGVmaW5lIFBHX0NNRFRBRyh0YWcsIG5hbWUsIGV2 dHJnb2ssIHJ3cm9rLCByb3djbnQsIGRkbHJlcGxvaykgXAogCXRhZywKIAogdHlwZWRlZiBlbnVt IENvbW1hbmRUYWcKQEAgLTUzLDkgKzUzLDExIEBAIENvcHlRdWVyeUNvbXBsZXRpb24oUXVlcnlD b21wbGV0aW9uICpkc3QsIGNvbnN0IFF1ZXJ5Q29tcGxldGlvbiAqc3JjKQogZXh0ZXJuIHZvaWQg SW5pdGlhbGl6ZVF1ZXJ5Q29tcGxldGlvbihRdWVyeUNvbXBsZXRpb24gKnFjKTsKIGV4dGVybiBj b25zdCBjaGFyICpHZXRDb21tYW5kVGFnTmFtZShDb21tYW5kVGFnIGNvbW1hbmRUYWcpOwogZXh0 ZXJuIGNvbnN0IGNoYXIgKkdldENvbW1hbmRUYWdOYW1lQW5kTGVuKENvbW1hbmRUYWcgY29tbWFu ZFRhZywgU2l6ZSAqbGVuKTsKK2V4dGVybiBDb21tYW5kVGFnICpHZXRDb21tYW5kVGFnc0ZvckRE TFJlcGwoaW50ICpuY29tbWFuZHMpOwogZXh0ZXJuIGJvb2wgY29tbWFuZF90YWdfZGlzcGxheV9y b3djb3VudChDb21tYW5kVGFnIGNvbW1hbmRUYWcpOwogZXh0ZXJuIGJvb2wgY29tbWFuZF90YWdf ZXZlbnRfdHJpZ2dlcl9vayhDb21tYW5kVGFnIGNvbW1hbmRUYWcpOwogZXh0ZXJuIGJvb2wgY29t bWFuZF90YWdfdGFibGVfcmV3cml0ZV9vayhDb21tYW5kVGFnIGNvbW1hbmRUYWcpOworZXh0ZXJu IGJvb2wgY29tbWFuZF90YWdfZGRsX3JlcGxpY2F0aW9uX29rKENvbW1hbmRUYWcgY29tbWFuZFRh Zyk7CiBleHRlcm4gQ29tbWFuZFRhZyBHZXRDb21tYW5kVGFnRW51bShjb25zdCBjaGFyICpjb21t YW5kbmFtZSk7CiBleHRlcm4gU2l6ZSBCdWlsZFF1ZXJ5Q29tcGxldGlvblN0cmluZyhjaGFyICpi dWZmLCBjb25zdCBRdWVyeUNvbXBsZXRpb24gKnFjLAogCQkJCQkJCQkJICAgYm9vbCBuYW1lb25s eSk7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS90Y29wL2NtZHRhZ2xpc3QuaCBiL3NyYy9pbmNs dWRlL3Rjb3AvY21kdGFnbGlzdC5oCmluZGV4IDllOTRmNDRjNWYuLjg0OGI3ZWRhNzYgMTAwNjQ0 Ci0tLSBhL3NyYy9pbmNsdWRlL3Rjb3AvY21kdGFnbGlzdC5oCisrKyBiL3NyYy9pbmNsdWRlL3Rj b3AvY21kdGFnbGlzdC5oCkBAIC0yMywxOTYgKzIzLDE5NiBAQAogICogdGV4dHVhbCBuYW1lLCBz byB0aGF0IHdlIGNhbiBic2VhcmNoIG9uIGl0OyBzZWUgR2V0Q29tbWFuZFRhZ0VudW0oKS4KICAq LwogCi0vKiBzeW1ib2wgbmFtZSwgdGV4dHVhbCBuYW1lLCBldmVudF90cmlnZ2VyX29rLCB0YWJs ZV9yZXdyaXRlX29rLCByb3djb3VudCAqLwotUEdfQ01EVEFHKENNRFRBR19VTktOT1dOLCAiPz8/ IiwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfQUxURVJfQUNDRVNTX01F VEhPRCwgIkFMVEVSIEFDQ0VTUyBNRVRIT0QiLCB0cnVlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURU QUcoQ01EVEFHX0FMVEVSX0FHR1JFR0FURSwgIkFMVEVSIEFHR1JFR0FURSIsIHRydWUsIGZhbHNl LCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfQUxURVJfQ0FTVCwgIkFMVEVSIENBU1QiLCB0cnVl LCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0FMVEVSX0NPTExBVElPTiwgIkFMVEVS IENPTExBVElPTiIsIHRydWUsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfQUxURVJf Q09OU1RSQUlOVCwgIkFMVEVSIENPTlNUUkFJTlQiLCB0cnVlLCBmYWxzZSwgZmFsc2UpCi1QR19D TURUQUcoQ01EVEFHX0FMVEVSX0NPTlZFUlNJT04sICJBTFRFUiBDT05WRVJTSU9OIiwgdHJ1ZSwg ZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19BTFRFUl9EQVRBQkFTRSwgIkFMVEVSIERB VEFCQVNFIiwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfQUxURVJfREVG QVVMVF9QUklWSUxFR0VTLCAiQUxURVIgREVGQVVMVCBQUklWSUxFR0VTIiwgdHJ1ZSwgZmFsc2Us IGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19BTFRFUl9ET01BSU4sICJBTFRFUiBET01BSU4iLCB0 cnVlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0FMVEVSX0VWRU5UX1RSSUdHRVIs ICJBTFRFUiBFVkVOVCBUUklHR0VSIiwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhD TURUQUdfQUxURVJfRVhURU5TSU9OLCAiQUxURVIgRVhURU5TSU9OIiwgdHJ1ZSwgZmFsc2UsIGZh bHNlKQotUEdfQ01EVEFHKENNRFRBR19BTFRFUl9GT1JFSUdOX0RBVEFfV1JBUFBFUiwgIkFMVEVS IEZPUkVJR04gREFUQSBXUkFQUEVSIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENN RFRBR19BTFRFUl9GT1JFSUdOX1RBQkxFLCAiQUxURVIgRk9SRUlHTiBUQUJMRSIsIHRydWUsIGZh bHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfQUxURVJfRlVOQ1RJT04sICJBTFRFUiBGVU5D VElPTiIsIHRydWUsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfQUxURVJfSU5ERVgs ICJBTFRFUiBJTkRFWCIsIHRydWUsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfQUxU RVJfTEFOR1VBR0UsICJBTFRFUiBMQU5HVUFHRSIsIHRydWUsIGZhbHNlLCBmYWxzZSkKLVBHX0NN RFRBRyhDTURUQUdfQUxURVJfTEFSR0VfT0JKRUNULCAiQUxURVIgTEFSR0UgT0JKRUNUIiwgdHJ1 ZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19BTFRFUl9NQVRFUklBTElaRURfVklF VywgIkFMVEVSIE1BVEVSSUFMSVpFRCBWSUVXIiwgdHJ1ZSwgdHJ1ZSwgZmFsc2UpCi1QR19DTURU QUcoQ01EVEFHX0FMVEVSX09QRVJBVE9SLCAiQUxURVIgT1BFUkFUT1IiLCB0cnVlLCBmYWxzZSwg ZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0FMVEVSX09QRVJBVE9SX0NMQVNTLCAiQUxURVIgT1BF UkFUT1IgQ0xBU1MiLCB0cnVlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0FMVEVS X09QRVJBVE9SX0ZBTUlMWSwgIkFMVEVSIE9QRVJBVE9SIEZBTUlMWSIsIHRydWUsIGZhbHNlLCBm YWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfQUxURVJfUE9MSUNZLCAiQUxURVIgUE9MSUNZIiwgdHJ1 ZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19BTFRFUl9QUk9DRURVUkUsICJBTFRF UiBQUk9DRURVUkUiLCB0cnVlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0FMVEVS X1BVQkxJQ0FUSU9OLCAiQUxURVIgUFVCTElDQVRJT04iLCB0cnVlLCBmYWxzZSwgZmFsc2UpCi1Q R19DTURUQUcoQ01EVEFHX0FMVEVSX1JPTEUsICJBTFRFUiBST0xFIiwgZmFsc2UsIGZhbHNlLCBm YWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfQUxURVJfUk9VVElORSwgIkFMVEVSIFJPVVRJTkUiLCB0 cnVlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0FMVEVSX1JVTEUsICJBTFRFUiBS VUxFIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19BTFRFUl9TQ0hFTUEs ICJBTFRFUiBTQ0hFTUEiLCB0cnVlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0FM VEVSX1NFUVVFTkNFLCAiQUxURVIgU0VRVUVOQ0UiLCB0cnVlLCBmYWxzZSwgZmFsc2UpCi1QR19D TURUQUcoQ01EVEFHX0FMVEVSX1NFUlZFUiwgIkFMVEVSIFNFUlZFUiIsIHRydWUsIGZhbHNlLCBm YWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfQUxURVJfU1RBVElTVElDUywgIkFMVEVSIFNUQVRJU1RJ Q1MiLCB0cnVlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0FMVEVSX1NVQlNDUklQ VElPTiwgIkFMVEVSIFNVQlNDUklQVElPTiIsIHRydWUsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRB RyhDTURUQUdfQUxURVJfU1lTVEVNLCAiQUxURVIgU1lTVEVNIiwgZmFsc2UsIGZhbHNlLCBmYWxz ZSkKLVBHX0NNRFRBRyhDTURUQUdfQUxURVJfVEFCTEUsICJBTFRFUiBUQUJMRSIsIHRydWUsIHRy dWUsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19BTFRFUl9UQUJMRVNQQUNFLCAiQUxURVIgVEFC TEVTUEFDRSIsIGZhbHNlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0FMVEVSX1RF WFRfU0VBUkNIX0NPTkZJR1VSQVRJT04sICJBTFRFUiBURVhUIFNFQVJDSCBDT05GSUdVUkFUSU9O IiwgdHJ1ZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19BTFRFUl9URVhUX1NFQVJD SF9ESUNUSU9OQVJZLCAiQUxURVIgVEVYVCBTRUFSQ0ggRElDVElPTkFSWSIsIHRydWUsIGZhbHNl LCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfQUxURVJfVEVYVF9TRUFSQ0hfUEFSU0VSLCAiQUxU RVIgVEVYVCBTRUFSQ0ggUEFSU0VSIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENN RFRBR19BTFRFUl9URVhUX1NFQVJDSF9URU1QTEFURSwgIkFMVEVSIFRFWFQgU0VBUkNIIFRFTVBM QVRFIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19BTFRFUl9UUkFOU0ZP Uk0sICJBTFRFUiBUUkFOU0ZPUk0iLCB0cnVlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01E VEFHX0FMVEVSX1RSSUdHRVIsICJBTFRFUiBUUklHR0VSIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlKQot UEdfQ01EVEFHKENNRFRBR19BTFRFUl9UWVBFLCAiQUxURVIgVFlQRSIsIHRydWUsIHRydWUsIGZh bHNlKQotUEdfQ01EVEFHKENNRFRBR19BTFRFUl9VU0VSX01BUFBJTkcsICJBTFRFUiBVU0VSIE1B UFBJTkciLCB0cnVlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0FMVEVSX1ZJRVcs ICJBTFRFUiBWSUVXIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19BTkFM WVpFLCAiQU5BTFlaRSIsIGZhbHNlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0JF R0lOLCAiQkVHSU4iLCBmYWxzZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19DQUxM LCAiQ0FMTCIsIGZhbHNlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0NIRUNLUE9J TlQsICJDSEVDS1BPSU5UIiwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdf Q0xPU0UsICJDTE9TRSIsIGZhbHNlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0NM T1NFX0NVUlNPUiwgIkNMT1NFIENVUlNPUiIsIGZhbHNlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURU QUcoQ01EVEFHX0NMT1NFX0NVUlNPUl9BTEwsICJDTE9TRSBDVVJTT1IgQUxMIiwgZmFsc2UsIGZh bHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfQ0xVU1RFUiwgIkNMVVNURVIiLCBmYWxzZSwg ZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19DT01NRU5ULCAiQ09NTUVOVCIsIHRydWUs IGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfQ09NTUlULCAiQ09NTUlUIiwgZmFsc2Us IGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfQ09NTUlUX1BSRVBBUkVELCAiQ09NTUlU IFBSRVBBUkVEIiwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfQ09QWSwg IkNPUFkiLCBmYWxzZSwgZmFsc2UsIHRydWUpCi1QR19DTURUQUcoQ01EVEFHX0NPUFlfRlJPTSwg IkNPUFkgRlJPTSIsIGZhbHNlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0NSRUFU RV9BQ0NFU1NfTUVUSE9ELCAiQ1JFQVRFIEFDQ0VTUyBNRVRIT0QiLCB0cnVlLCBmYWxzZSwgZmFs c2UpCi1QR19DTURUQUcoQ01EVEFHX0NSRUFURV9BR0dSRUdBVEUsICJDUkVBVEUgQUdHUkVHQVRF IiwgdHJ1ZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19DUkVBVEVfQ0FTVCwgIkNS RUFURSBDQVNUIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19DUkVBVEVf Q09MTEFUSU9OLCAiQ1JFQVRFIENPTExBVElPTiIsIHRydWUsIGZhbHNlLCBmYWxzZSkKLVBHX0NN RFRBRyhDTURUQUdfQ1JFQVRFX0NPTlNUUkFJTlQsICJDUkVBVEUgQ09OU1RSQUlOVCIsIHRydWUs IGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfQ1JFQVRFX0NPTlZFUlNJT04sICJDUkVB VEUgQ09OVkVSU0lPTiIsIHRydWUsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfQ1JF QVRFX0RBVEFCQVNFLCAiQ1JFQVRFIERBVEFCQVNFIiwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKLVBH X0NNRFRBRyhDTURUQUdfQ1JFQVRFX0RPTUFJTiwgIkNSRUFURSBET01BSU4iLCB0cnVlLCBmYWxz ZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0NSRUFURV9FVkVOVF9UUklHR0VSLCAiQ1JFQVRF IEVWRU5UIFRSSUdHRVIiLCBmYWxzZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19D UkVBVEVfRVhURU5TSU9OLCAiQ1JFQVRFIEVYVEVOU0lPTiIsIHRydWUsIGZhbHNlLCBmYWxzZSkK LVBHX0NNRFRBRyhDTURUQUdfQ1JFQVRFX0ZPUkVJR05fREFUQV9XUkFQUEVSLCAiQ1JFQVRFIEZP UkVJR04gREFUQSBXUkFQUEVSIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRB R19DUkVBVEVfRk9SRUlHTl9UQUJMRSwgIkNSRUFURSBGT1JFSUdOIFRBQkxFIiwgdHJ1ZSwgZmFs c2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19DUkVBVEVfRlVOQ1RJT04sICJDUkVBVEUgRlVO Q1RJT04iLCB0cnVlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0NSRUFURV9JTkRF WCwgIkNSRUFURSBJTkRFWCIsIHRydWUsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdf Q1JFQVRFX0xBTkdVQUdFLCAiQ1JFQVRFIExBTkdVQUdFIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlKQot UEdfQ01EVEFHKENNRFRBR19DUkVBVEVfTUFURVJJQUxJWkVEX1ZJRVcsICJDUkVBVEUgTUFURVJJ QUxJWkVEIFZJRVciLCB0cnVlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0NSRUFU RV9PUEVSQVRPUiwgIkNSRUFURSBPUEVSQVRPUiIsIHRydWUsIGZhbHNlLCBmYWxzZSkKLVBHX0NN RFRBRyhDTURUQUdfQ1JFQVRFX09QRVJBVE9SX0NMQVNTLCAiQ1JFQVRFIE9QRVJBVE9SIENMQVNT IiwgdHJ1ZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19DUkVBVEVfT1BFUkFUT1Jf RkFNSUxZLCAiQ1JFQVRFIE9QRVJBVE9SIEZBTUlMWSIsIHRydWUsIGZhbHNlLCBmYWxzZSkKLVBH X0NNRFRBRyhDTURUQUdfQ1JFQVRFX1BPTElDWSwgIkNSRUFURSBQT0xJQ1kiLCB0cnVlLCBmYWxz ZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0NSRUFURV9QUk9DRURVUkUsICJDUkVBVEUgUFJP Q0VEVVJFIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19DUkVBVEVfUFVC TElDQVRJT04sICJDUkVBVEUgUFVCTElDQVRJT04iLCB0cnVlLCBmYWxzZSwgZmFsc2UpCi1QR19D TURUQUcoQ01EVEFHX0NSRUFURV9ST0xFLCAiQ1JFQVRFIFJPTEUiLCBmYWxzZSwgZmFsc2UsIGZh bHNlKQotUEdfQ01EVEFHKENNRFRBR19DUkVBVEVfUk9VVElORSwgIkNSRUFURSBST1VUSU5FIiwg dHJ1ZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19DUkVBVEVfUlVMRSwgIkNSRUFU RSBSVUxFIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19DUkVBVEVfU0NI RU1BLCAiQ1JFQVRFIFNDSEVNQSIsIHRydWUsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURU QUdfQ1JFQVRFX1NFUVVFTkNFLCAiQ1JFQVRFIFNFUVVFTkNFIiwgdHJ1ZSwgZmFsc2UsIGZhbHNl KQotUEdfQ01EVEFHKENNRFRBR19DUkVBVEVfU0VSVkVSLCAiQ1JFQVRFIFNFUlZFUiIsIHRydWUs IGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfQ1JFQVRFX1NUQVRJU1RJQ1MsICJDUkVB VEUgU1RBVElTVElDUyIsIHRydWUsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfQ1JF QVRFX1NVQlNDUklQVElPTiwgIkNSRUFURSBTVUJTQ1JJUFRJT04iLCB0cnVlLCBmYWxzZSwgZmFs c2UpCi1QR19DTURUQUcoQ01EVEFHX0NSRUFURV9UQUJMRSwgIkNSRUFURSBUQUJMRSIsIHRydWUs IGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfQ1JFQVRFX1RBQkxFX0FTLCAiQ1JFQVRF IFRBQkxFIEFTIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19DUkVBVEVf VEFCTEVTUEFDRSwgIkNSRUFURSBUQUJMRVNQQUNFIiwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKLVBH X0NNRFRBRyhDTURUQUdfQ1JFQVRFX1RFWFRfU0VBUkNIX0NPTkZJR1VSQVRJT04sICJDUkVBVEUg VEVYVCBTRUFSQ0ggQ09ORklHVVJBVElPTiIsIHRydWUsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRB RyhDTURUQUdfQ1JFQVRFX1RFWFRfU0VBUkNIX0RJQ1RJT05BUlksICJDUkVBVEUgVEVYVCBTRUFS Q0ggRElDVElPTkFSWSIsIHRydWUsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfQ1JF QVRFX1RFWFRfU0VBUkNIX1BBUlNFUiwgIkNSRUFURSBURVhUIFNFQVJDSCBQQVJTRVIiLCB0cnVl LCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0NSRUFURV9URVhUX1NFQVJDSF9URU1Q TEFURSwgIkNSRUFURSBURVhUIFNFQVJDSCBURU1QTEFURSIsIHRydWUsIGZhbHNlLCBmYWxzZSkK LVBHX0NNRFRBRyhDTURUQUdfQ1JFQVRFX1RSQU5TRk9STSwgIkNSRUFURSBUUkFOU0ZPUk0iLCB0 cnVlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0NSRUFURV9UUklHR0VSLCAiQ1JF QVRFIFRSSUdHRVIiLCB0cnVlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0NSRUFU RV9UWVBFLCAiQ1JFQVRFIFRZUEUiLCB0cnVlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01E VEFHX0NSRUFURV9VU0VSX01BUFBJTkcsICJDUkVBVEUgVVNFUiBNQVBQSU5HIiwgdHJ1ZSwgZmFs c2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19DUkVBVEVfVklFVywgIkNSRUFURSBWSUVXIiwg dHJ1ZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19ERUFMTE9DQVRFLCAiREVBTExP Q0FURSIsIGZhbHNlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0RFQUxMT0NBVEVf QUxMLCAiREVBTExPQ0FURSBBTEwiLCBmYWxzZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENN RFRBR19ERUNMQVJFX0NVUlNPUiwgIkRFQ0xBUkUgQ1VSU09SIiwgZmFsc2UsIGZhbHNlLCBmYWxz ZSkKLVBHX0NNRFRBRyhDTURUQUdfREVMRVRFLCAiREVMRVRFIiwgZmFsc2UsIGZhbHNlLCB0cnVl KQotUEdfQ01EVEFHKENNRFRBR19ESVNDQVJELCAiRElTQ0FSRCIsIGZhbHNlLCBmYWxzZSwgZmFs c2UpCi1QR19DTURUQUcoQ01EVEFHX0RJU0NBUkRfQUxMLCAiRElTQ0FSRCBBTEwiLCBmYWxzZSwg ZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19ESVNDQVJEX1BMQU5TLCAiRElTQ0FSRCBQ TEFOUyIsIGZhbHNlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0RJU0NBUkRfU0VR VUVOQ0VTLCAiRElTQ0FSRCBTRVFVRU5DRVMiLCBmYWxzZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01E VEFHKENNRFRBR19ESVNDQVJEX1RFTVAsICJESVNDQVJEIFRFTVAiLCBmYWxzZSwgZmFsc2UsIGZh bHNlKQotUEdfQ01EVEFHKENNRFRBR19ETywgIkRPIiwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKLVBH X0NNRFRBRyhDTURUQUdfRFJPUF9BQ0NFU1NfTUVUSE9ELCAiRFJPUCBBQ0NFU1MgTUVUSE9EIiwg dHJ1ZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19EUk9QX0FHR1JFR0FURSwgIkRS T1AgQUdHUkVHQVRFIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19EUk9Q X0NBU1QsICJEUk9QIENBU1QiLCB0cnVlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFH X0RST1BfQ09MTEFUSU9OLCAiRFJPUCBDT0xMQVRJT04iLCB0cnVlLCBmYWxzZSwgZmFsc2UpCi1Q R19DTURUQUcoQ01EVEFHX0RST1BfQ09OU1RSQUlOVCwgIkRST1AgQ09OU1RSQUlOVCIsIHRydWUs IGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfRFJPUF9DT05WRVJTSU9OLCAiRFJPUCBD T05WRVJTSU9OIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19EUk9QX0RB VEFCQVNFLCAiRFJPUCBEQVRBQkFTRSIsIGZhbHNlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUco Q01EVEFHX0RST1BfRE9NQUlOLCAiRFJPUCBET01BSU4iLCB0cnVlLCBmYWxzZSwgZmFsc2UpCi1Q R19DTURUQUcoQ01EVEFHX0RST1BfRVZFTlRfVFJJR0dFUiwgIkRST1AgRVZFTlQgVFJJR0dFUiIs IGZhbHNlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0RST1BfRVhURU5TSU9OLCAi RFJPUCBFWFRFTlNJT04iLCB0cnVlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0RS T1BfRk9SRUlHTl9EQVRBX1dSQVBQRVIsICJEUk9QIEZPUkVJR04gREFUQSBXUkFQUEVSIiwgdHJ1 ZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19EUk9QX0ZPUkVJR05fVEFCTEUsICJE Uk9QIEZPUkVJR04gVEFCTEUiLCB0cnVlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFH X0RST1BfRlVOQ1RJT04sICJEUk9QIEZVTkNUSU9OIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlKQotUEdf Q01EVEFHKENNRFRBR19EUk9QX0lOREVYLCAiRFJPUCBJTkRFWCIsIHRydWUsIGZhbHNlLCBmYWxz ZSkKLVBHX0NNRFRBRyhDTURUQUdfRFJPUF9MQU5HVUFHRSwgIkRST1AgTEFOR1VBR0UiLCB0cnVl LCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0RST1BfTUFURVJJQUxJWkVEX1ZJRVcs ICJEUk9QIE1BVEVSSUFMSVpFRCBWSUVXIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFH KENNRFRBR19EUk9QX09QRVJBVE9SLCAiRFJPUCBPUEVSQVRPUiIsIHRydWUsIGZhbHNlLCBmYWxz ZSkKLVBHX0NNRFRBRyhDTURUQUdfRFJPUF9PUEVSQVRPUl9DTEFTUywgIkRST1AgT1BFUkFUT1Ig Q0xBU1MiLCB0cnVlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0RST1BfT1BFUkFU T1JfRkFNSUxZLCAiRFJPUCBPUEVSQVRPUiBGQU1JTFkiLCB0cnVlLCBmYWxzZSwgZmFsc2UpCi1Q R19DTURUQUcoQ01EVEFHX0RST1BfT1dORUQsICJEUk9QIE9XTkVEIiwgdHJ1ZSwgZmFsc2UsIGZh bHNlKQotUEdfQ01EVEFHKENNRFRBR19EUk9QX1BPTElDWSwgIkRST1AgUE9MSUNZIiwgdHJ1ZSwg ZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19EUk9QX1BST0NFRFVSRSwgIkRST1AgUFJP Q0VEVVJFIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19EUk9QX1BVQkxJ Q0FUSU9OLCAiRFJPUCBQVUJMSUNBVElPTiIsIHRydWUsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRB RyhDTURUQUdfRFJPUF9ST0xFLCAiRFJPUCBST0xFIiwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKLVBH X0NNRFRBRyhDTURUQUdfRFJPUF9ST1VUSU5FLCAiRFJPUCBST1VUSU5FIiwgdHJ1ZSwgZmFsc2Us IGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19EUk9QX1JVTEUsICJEUk9QIFJVTEUiLCB0cnVlLCBm YWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0RST1BfU0NIRU1BLCAiRFJPUCBTQ0hFTUEi LCB0cnVlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0RST1BfU0VRVUVOQ0UsICJE Uk9QIFNFUVVFTkNFIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19EUk9Q X1NFUlZFUiwgIkRST1AgU0VSVkVSIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENN RFRBR19EUk9QX1NUQVRJU1RJQ1MsICJEUk9QIFNUQVRJU1RJQ1MiLCB0cnVlLCBmYWxzZSwgZmFs c2UpCi1QR19DTURUQUcoQ01EVEFHX0RST1BfU1VCU0NSSVBUSU9OLCAiRFJPUCBTVUJTQ1JJUFRJ T04iLCB0cnVlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0RST1BfVEFCTEUsICJE Uk9QIFRBQkxFIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19EUk9QX1RB QkxFU1BBQ0UsICJEUk9QIFRBQkxFU1BBQ0UiLCBmYWxzZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01E VEFHKENNRFRBR19EUk9QX1RFWFRfU0VBUkNIX0NPTkZJR1VSQVRJT04sICJEUk9QIFRFWFQgU0VB UkNIIENPTkZJR1VSQVRJT04iLCB0cnVlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFH X0RST1BfVEVYVF9TRUFSQ0hfRElDVElPTkFSWSwgIkRST1AgVEVYVCBTRUFSQ0ggRElDVElPTkFS WSIsIHRydWUsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfRFJPUF9URVhUX1NFQVJD SF9QQVJTRVIsICJEUk9QIFRFWFQgU0VBUkNIIFBBUlNFUiIsIHRydWUsIGZhbHNlLCBmYWxzZSkK LVBHX0NNRFRBRyhDTURUQUdfRFJPUF9URVhUX1NFQVJDSF9URU1QTEFURSwgIkRST1AgVEVYVCBT RUFSQ0ggVEVNUExBVEUiLCB0cnVlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0RS T1BfVFJBTlNGT1JNLCAiRFJPUCBUUkFOU0ZPUk0iLCB0cnVlLCBmYWxzZSwgZmFsc2UpCi1QR19D TURUQUcoQ01EVEFHX0RST1BfVFJJR0dFUiwgIkRST1AgVFJJR0dFUiIsIHRydWUsIGZhbHNlLCBm YWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfRFJPUF9UWVBFLCAiRFJPUCBUWVBFIiwgdHJ1ZSwgZmFs c2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19EUk9QX1VTRVJfTUFQUElORywgIkRST1AgVVNF UiBNQVBQSU5HIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19EUk9QX1ZJ RVcsICJEUk9QIFZJRVciLCB0cnVlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0VY RUNVVEUsICJFWEVDVVRFIiwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdf RVhQTEFJTiwgIkVYUExBSU4iLCBmYWxzZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRB R19GRVRDSCwgIkZFVENIIiwgZmFsc2UsIGZhbHNlLCB0cnVlKQotUEdfQ01EVEFHKENNRFRBR19H UkFOVCwgIkdSQU5UIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19HUkFO VF9ST0xFLCAiR1JBTlQgUk9MRSIsIGZhbHNlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01E VEFHX0lNUE9SVF9GT1JFSUdOX1NDSEVNQSwgIklNUE9SVCBGT1JFSUdOIFNDSEVNQSIsIHRydWUs IGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfSU5TRVJULCAiSU5TRVJUIiwgZmFsc2Us IGZhbHNlLCB0cnVlKQotUEdfQ01EVEFHKENNRFRBR19MSVNURU4sICJMSVNURU4iLCBmYWxzZSwg ZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19MT0FELCAiTE9BRCIsIGZhbHNlLCBmYWxz ZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0xPQ0tfVEFCTEUsICJMT0NLIFRBQkxFIiwgZmFs c2UsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfTUVSR0UsICJNRVJHRSIsIGZhbHNl LCBmYWxzZSwgdHJ1ZSkKLVBHX0NNRFRBRyhDTURUQUdfTU9WRSwgIk1PVkUiLCBmYWxzZSwgZmFs c2UsIHRydWUpCi1QR19DTURUQUcoQ01EVEFHX05PVElGWSwgIk5PVElGWSIsIGZhbHNlLCBmYWxz ZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX1BSRVBBUkUsICJQUkVQQVJFIiwgZmFsc2UsIGZh bHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfUFJFUEFSRV9UUkFOU0FDVElPTiwgIlBSRVBB UkUgVFJBTlNBQ1RJT04iLCBmYWxzZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19S RUFTU0lHTl9PV05FRCwgIlJFQVNTSUdOIE9XTkVEIiwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKLVBH X0NNRFRBRyhDTURUQUdfUkVGUkVTSF9NQVRFUklBTElaRURfVklFVywgIlJFRlJFU0ggTUFURVJJ QUxJWkVEIFZJRVciLCB0cnVlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX1JFSU5E RVgsICJSRUlOREVYIiwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfUkVM RUFTRSwgIlJFTEVBU0UiLCBmYWxzZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19S RVNFVCwgIlJFU0VUIiwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfUkVW T0tFLCAiUkVWT0tFIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19SRVZP S0VfUk9MRSwgIlJFVk9LRSBST0xFIiwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhD TURUQUdfUk9MTEJBQ0ssICJST0xMQkFDSyIsIGZhbHNlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURU QUcoQ01EVEFHX1JPTExCQUNLX1BSRVBBUkVELCAiUk9MTEJBQ0sgUFJFUEFSRUQiLCBmYWxzZSwg ZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19TQVZFUE9JTlQsICJTQVZFUE9JTlQiLCBm YWxzZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19TRUNVUklUWV9MQUJFTCwgIlNF Q1VSSVRZIExBQkVMIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19TRUxF Q1QsICJTRUxFQ1QiLCBmYWxzZSwgZmFsc2UsIHRydWUpCi1QR19DTURUQUcoQ01EVEFHX1NFTEVD VF9GT1JfS0VZX1NIQVJFLCAiU0VMRUNUIEZPUiBLRVkgU0hBUkUiLCBmYWxzZSwgZmFsc2UsIGZh bHNlKQotUEdfQ01EVEFHKENNRFRBR19TRUxFQ1RfRk9SX05PX0tFWV9VUERBVEUsICJTRUxFQ1Qg Rk9SIE5PIEtFWSBVUERBVEUiLCBmYWxzZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRB R19TRUxFQ1RfRk9SX1NIQVJFLCAiU0VMRUNUIEZPUiBTSEFSRSIsIGZhbHNlLCBmYWxzZSwgZmFs c2UpCi1QR19DTURUQUcoQ01EVEFHX1NFTEVDVF9GT1JfVVBEQVRFLCAiU0VMRUNUIEZPUiBVUERB VEUiLCBmYWxzZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19TRUxFQ1RfSU5UTywg IlNFTEVDVCBJTlRPIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19TRVQs ICJTRVQiLCBmYWxzZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19TRVRfQ09OU1RS QUlOVFMsICJTRVQgQ09OU1RSQUlOVFMiLCBmYWxzZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFH KENNRFRBR19TSE9XLCAiU0hPVyIsIGZhbHNlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01E VEFHX1NUQVJUX1RSQU5TQUNUSU9OLCAiU1RBUlQgVFJBTlNBQ1RJT04iLCBmYWxzZSwgZmFsc2Us IGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19UUlVOQ0FURV9UQUJMRSwgIlRSVU5DQVRFIFRBQkxF IiwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfVU5MSVNURU4sICJVTkxJ U1RFTiIsIGZhbHNlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX1VQREFURSwgIlVQ REFURSIsIGZhbHNlLCBmYWxzZSwgdHJ1ZSkKLVBHX0NNRFRBRyhDTURUQUdfVkFDVVVNLCAiVkFD VVVNIiwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKKy8qIHN5bWJvbCBuYW1lLCB0ZXh0dWFsIG5hbWUs IGV2ZW50X3RyaWdnZXJfb2ssIHRhYmxlX3Jld3JpdGVfb2ssIHJvd2NvdW50LCBkZGxyZXBsb2sg Ki8KK1BHX0NNRFRBRyhDTURUQUdfVU5LTk9XTiwgIj8/PyIsIGZhbHNlLCBmYWxzZSwgZmFsc2Us IGZhbHNlKQorUEdfQ01EVEFHKENNRFRBR19BTFRFUl9BQ0NFU1NfTUVUSE9ELCAiQUxURVIgQUND RVNTIE1FVEhPRCIsIHRydWUsIGZhbHNlLCBmYWxzZSwgZmFsc2UpCitQR19DTURUQUcoQ01EVEFH X0FMVEVSX0FHR1JFR0FURSwgIkFMVEVSIEFHR1JFR0FURSIsIHRydWUsIGZhbHNlLCBmYWxzZSwg ZmFsc2UpCitQR19DTURUQUcoQ01EVEFHX0FMVEVSX0NBU1QsICJBTFRFUiBDQVNUIiwgdHJ1ZSwg ZmFsc2UsIGZhbHNlLCB0cnVlKQorUEdfQ01EVEFHKENNRFRBR19BTFRFUl9DT0xMQVRJT04sICJB TFRFUiBDT0xMQVRJT04iLCB0cnVlLCBmYWxzZSwgZmFsc2UsIHRydWUpCitQR19DTURUQUcoQ01E VEFHX0FMVEVSX0NPTlNUUkFJTlQsICJBTFRFUiBDT05TVFJBSU5UIiwgdHJ1ZSwgZmFsc2UsIGZh bHNlLCBmYWxzZSkKK1BHX0NNRFRBRyhDTURUQUdfQUxURVJfQ09OVkVSU0lPTiwgIkFMVEVSIENP TlZFUlNJT04iLCB0cnVlLCBmYWxzZSwgZmFsc2UsIHRydWUpCitQR19DTURUQUcoQ01EVEFHX0FM VEVSX0RBVEFCQVNFLCAiQUxURVIgREFUQUJBU0UiLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxz ZSkKK1BHX0NNRFRBRyhDTURUQUdfQUxURVJfREVGQVVMVF9QUklWSUxFR0VTLCAiQUxURVIgREVG QVVMVCBQUklWSUxFR0VTIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCB0cnVlKQorUEdfQ01EVEFHKENN RFRBR19BTFRFUl9ET01BSU4sICJBTFRFUiBET01BSU4iLCB0cnVlLCBmYWxzZSwgZmFsc2UsIHRy dWUpCitQR19DTURUQUcoQ01EVEFHX0FMVEVSX0VWRU5UX1RSSUdHRVIsICJBTFRFUiBFVkVOVCBU UklHR0VSIiwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UpCitQR19DTURUQUcoQ01EVEFHX0FM VEVSX0VYVEVOU0lPTiwgIkFMVEVSIEVYVEVOU0lPTiIsIHRydWUsIGZhbHNlLCBmYWxzZSwgdHJ1 ZSkKK1BHX0NNRFRBRyhDTURUQUdfQUxURVJfRk9SRUlHTl9EQVRBX1dSQVBQRVIsICJBTFRFUiBG T1JFSUdOIERBVEEgV1JBUFBFUiIsIHRydWUsIGZhbHNlLCBmYWxzZSwgdHJ1ZSkKK1BHX0NNRFRB RyhDTURUQUdfQUxURVJfRk9SRUlHTl9UQUJMRSwgIkFMVEVSIEZPUkVJR04gVEFCTEUiLCB0cnVl LCBmYWxzZSwgZmFsc2UsIHRydWUpCitQR19DTURUQUcoQ01EVEFHX0FMVEVSX0ZVTkNUSU9OLCAi QUxURVIgRlVOQ1RJT04iLCB0cnVlLCBmYWxzZSwgZmFsc2UsIHRydWUpCitQR19DTURUQUcoQ01E VEFHX0FMVEVSX0lOREVYLCAiQUxURVIgSU5ERVgiLCB0cnVlLCBmYWxzZSwgZmFsc2UsIHRydWUp CitQR19DTURUQUcoQ01EVEFHX0FMVEVSX0xBTkdVQUdFLCAiQUxURVIgTEFOR1VBR0UiLCB0cnVl LCBmYWxzZSwgZmFsc2UsIHRydWUpCitQR19DTURUQUcoQ01EVEFHX0FMVEVSX0xBUkdFX09CSkVD VCwgIkFMVEVSIExBUkdFIE9CSkVDVCIsIHRydWUsIGZhbHNlLCBmYWxzZSwgZmFsc2UpCitQR19D TURUQUcoQ01EVEFHX0FMVEVSX01BVEVSSUFMSVpFRF9WSUVXLCAiQUxURVIgTUFURVJJQUxJWkVE IFZJRVciLCB0cnVlLCB0cnVlLCBmYWxzZSwgdHJ1ZSkKK1BHX0NNRFRBRyhDTURUQUdfQUxURVJf T1BFUkFUT1IsICJBTFRFUiBPUEVSQVRPUiIsIHRydWUsIGZhbHNlLCBmYWxzZSwgdHJ1ZSkKK1BH X0NNRFRBRyhDTURUQUdfQUxURVJfT1BFUkFUT1JfQ0xBU1MsICJBTFRFUiBPUEVSQVRPUiBDTEFT UyIsIHRydWUsIGZhbHNlLCBmYWxzZSwgdHJ1ZSkKK1BHX0NNRFRBRyhDTURUQUdfQUxURVJfT1BF UkFUT1JfRkFNSUxZLCAiQUxURVIgT1BFUkFUT1IgRkFNSUxZIiwgdHJ1ZSwgZmFsc2UsIGZhbHNl LCB0cnVlKQorUEdfQ01EVEFHKENNRFRBR19BTFRFUl9QT0xJQ1ksICJBTFRFUiBQT0xJQ1kiLCB0 cnVlLCBmYWxzZSwgZmFsc2UsIHRydWUpCitQR19DTURUQUcoQ01EVEFHX0FMVEVSX1BST0NFRFVS RSwgIkFMVEVSIFBST0NFRFVSRSIsIHRydWUsIGZhbHNlLCBmYWxzZSwgdHJ1ZSkKK1BHX0NNRFRB RyhDTURUQUdfQUxURVJfUFVCTElDQVRJT04sICJBTFRFUiBQVUJMSUNBVElPTiIsIHRydWUsIGZh bHNlLCBmYWxzZSwgZmFsc2UpCitQR19DTURUQUcoQ01EVEFHX0FMVEVSX1JPTEUsICJBTFRFUiBS T0xFIiwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UpCitQR19DTURUQUcoQ01EVEFHX0FMVEVS X1JPVVRJTkUsICJBTFRFUiBST1VUSU5FIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCB0cnVlKQorUEdf Q01EVEFHKENNRFRBR19BTFRFUl9SVUxFLCAiQUxURVIgUlVMRSIsIHRydWUsIGZhbHNlLCBmYWxz ZSwgdHJ1ZSkKK1BHX0NNRFRBRyhDTURUQUdfQUxURVJfU0NIRU1BLCAiQUxURVIgU0NIRU1BIiwg dHJ1ZSwgZmFsc2UsIGZhbHNlLCB0cnVlKQorUEdfQ01EVEFHKENNRFRBR19BTFRFUl9TRVFVRU5D RSwgIkFMVEVSIFNFUVVFTkNFIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCB0cnVlKQorUEdfQ01EVEFH KENNRFRBR19BTFRFUl9TRVJWRVIsICJBTFRFUiBTRVJWRVIiLCB0cnVlLCBmYWxzZSwgZmFsc2Us IHRydWUpCitQR19DTURUQUcoQ01EVEFHX0FMVEVSX1NUQVRJU1RJQ1MsICJBTFRFUiBTVEFUSVNU SUNTIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCB0cnVlKQorUEdfQ01EVEFHKENNRFRBR19BTFRFUl9T VUJTQ1JJUFRJT04sICJBTFRFUiBTVUJTQ1JJUFRJT04iLCB0cnVlLCBmYWxzZSwgZmFsc2UsIGZh bHNlKQorUEdfQ01EVEFHKENNRFRBR19BTFRFUl9TWVNURU0sICJBTFRFUiBTWVNURU0iLCBmYWxz ZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKK1BHX0NNRFRBRyhDTURUQUdfQUxURVJfVEFCTEUsICJB TFRFUiBUQUJMRSIsIHRydWUsIHRydWUsIGZhbHNlLCB0cnVlKQorUEdfQ01EVEFHKENNRFRBR19B TFRFUl9UQUJMRVNQQUNFLCAiQUxURVIgVEFCTEVTUEFDRSIsIGZhbHNlLCBmYWxzZSwgZmFsc2Us IGZhbHNlKQorUEdfQ01EVEFHKENNRFRBR19BTFRFUl9URVhUX1NFQVJDSF9DT05GSUdVUkFUSU9O LCAiQUxURVIgVEVYVCBTRUFSQ0ggQ09ORklHVVJBVElPTiIsIHRydWUsIGZhbHNlLCBmYWxzZSwg dHJ1ZSkKK1BHX0NNRFRBRyhDTURUQUdfQUxURVJfVEVYVF9TRUFSQ0hfRElDVElPTkFSWSwgIkFM VEVSIFRFWFQgU0VBUkNIIERJQ1RJT05BUlkiLCB0cnVlLCBmYWxzZSwgZmFsc2UsIHRydWUpCitQ R19DTURUQUcoQ01EVEFHX0FMVEVSX1RFWFRfU0VBUkNIX1BBUlNFUiwgIkFMVEVSIFRFWFQgU0VB UkNIIFBBUlNFUiIsIHRydWUsIGZhbHNlLCBmYWxzZSwgZmFsc2UpCitQR19DTURUQUcoQ01EVEFH X0FMVEVSX1RFWFRfU0VBUkNIX1RFTVBMQVRFLCAiQUxURVIgVEVYVCBTRUFSQ0ggVEVNUExBVEUi LCB0cnVlLCBmYWxzZSwgZmFsc2UsIGZhbHNlKQorUEdfQ01EVEFHKENNRFRBR19BTFRFUl9UUkFO U0ZPUk0sICJBTFRFUiBUUkFOU0ZPUk0iLCB0cnVlLCBmYWxzZSwgZmFsc2UsIGZhbHNlKQorUEdf Q01EVEFHKENNRFRBR19BTFRFUl9UUklHR0VSLCAiQUxURVIgVFJJR0dFUiIsIHRydWUsIGZhbHNl LCBmYWxzZSwgdHJ1ZSkKK1BHX0NNRFRBRyhDTURUQUdfQUxURVJfVFlQRSwgIkFMVEVSIFRZUEUi LCB0cnVlLCB0cnVlLCBmYWxzZSwgdHJ1ZSkKK1BHX0NNRFRBRyhDTURUQUdfQUxURVJfVVNFUl9N QVBQSU5HLCAiQUxURVIgVVNFUiBNQVBQSU5HIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCB0cnVlKQor UEdfQ01EVEFHKENNRFRBR19BTFRFUl9WSUVXLCAiQUxURVIgVklFVyIsIHRydWUsIGZhbHNlLCBm YWxzZSwgdHJ1ZSkKK1BHX0NNRFRBRyhDTURUQUdfQU5BTFlaRSwgIkFOQUxZWkUiLCBmYWxzZSwg ZmFsc2UsIGZhbHNlLCBmYWxzZSkKK1BHX0NNRFRBRyhDTURUQUdfQkVHSU4sICJCRUdJTiIsIGZh bHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlKQorUEdfQ01EVEFHKENNRFRBR19DQUxMLCAiQ0FMTCIs IGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlKQorUEdfQ01EVEFHKENNRFRBR19DSEVDS1BPSU5U LCAiQ0hFQ0tQT0lOVCIsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlKQorUEdfQ01EVEFHKENN RFRBR19DTE9TRSwgIkNMT1NFIiwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UpCitQR19DTURU QUcoQ01EVEFHX0NMT1NFX0NVUlNPUiwgIkNMT1NFIENVUlNPUiIsIGZhbHNlLCBmYWxzZSwgZmFs c2UsIGZhbHNlKQorUEdfQ01EVEFHKENNRFRBR19DTE9TRV9DVVJTT1JfQUxMLCAiQ0xPU0UgQ1VS U09SIEFMTCIsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlKQorUEdfQ01EVEFHKENNRFRBR19D TFVTVEVSLCAiQ0xVU1RFUiIsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlKQorUEdfQ01EVEFH KENNRFRBR19DT01NRU5ULCAiQ09NTUVOVCIsIHRydWUsIGZhbHNlLCBmYWxzZSwgdHJ1ZSkKK1BH X0NNRFRBRyhDTURUQUdfQ09NTUlULCAiQ09NTUlUIiwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFs c2UpCitQR19DTURUQUcoQ01EVEFHX0NPTU1JVF9QUkVQQVJFRCwgIkNPTU1JVCBQUkVQQVJFRCIs IGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlKQorUEdfQ01EVEFHKENNRFRBR19DT1BZLCAiQ09Q WSIsIGZhbHNlLCBmYWxzZSwgdHJ1ZSwgZmFsc2UpCitQR19DTURUQUcoQ01EVEFHX0NPUFlfRlJP TSwgIkNPUFkgRlJPTSIsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlKQorUEdfQ01EVEFHKENN RFRBR19DUkVBVEVfQUNDRVNTX01FVEhPRCwgIkNSRUFURSBBQ0NFU1MgTUVUSE9EIiwgdHJ1ZSwg ZmFsc2UsIGZhbHNlLCB0cnVlKQorUEdfQ01EVEFHKENNRFRBR19DUkVBVEVfQUdHUkVHQVRFLCAi Q1JFQVRFIEFHR1JFR0FURSIsIHRydWUsIGZhbHNlLCBmYWxzZSwgZmFsc2UpCitQR19DTURUQUco Q01EVEFHX0NSRUFURV9DQVNULCAiQ1JFQVRFIENBU1QiLCB0cnVlLCBmYWxzZSwgZmFsc2UsIHRy dWUpCitQR19DTURUQUcoQ01EVEFHX0NSRUFURV9DT0xMQVRJT04sICJDUkVBVEUgQ09MTEFUSU9O IiwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCB0cnVlKQorUEdfQ01EVEFHKENNRFRBR19DUkVBVEVfQ09O U1RSQUlOVCwgIkNSRUFURSBDT05TVFJBSU5UIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSkK K1BHX0NNRFRBRyhDTURUQUdfQ1JFQVRFX0NPTlZFUlNJT04sICJDUkVBVEUgQ09OVkVSU0lPTiIs IHRydWUsIGZhbHNlLCBmYWxzZSwgdHJ1ZSkKK1BHX0NNRFRBRyhDTURUQUdfQ1JFQVRFX0RBVEFC QVNFLCAiQ1JFQVRFIERBVEFCQVNFIiwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UpCitQR19D TURUQUcoQ01EVEFHX0NSRUFURV9ET01BSU4sICJDUkVBVEUgRE9NQUlOIiwgdHJ1ZSwgZmFsc2Us IGZhbHNlLCB0cnVlKQorUEdfQ01EVEFHKENNRFRBR19DUkVBVEVfRVZFTlRfVFJJR0dFUiwgIkNS RUFURSBFVkVOVCBUUklHR0VSIiwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UpCitQR19DTURU QUcoQ01EVEFHX0NSRUFURV9FWFRFTlNJT04sICJDUkVBVEUgRVhURU5TSU9OIiwgdHJ1ZSwgZmFs c2UsIGZhbHNlLCB0cnVlKQorUEdfQ01EVEFHKENNRFRBR19DUkVBVEVfRk9SRUlHTl9EQVRBX1dS QVBQRVIsICJDUkVBVEUgRk9SRUlHTiBEQVRBIFdSQVBQRVIiLCB0cnVlLCBmYWxzZSwgZmFsc2Us IHRydWUpCitQR19DTURUQUcoQ01EVEFHX0NSRUFURV9GT1JFSUdOX1RBQkxFLCAiQ1JFQVRFIEZP UkVJR04gVEFCTEUiLCB0cnVlLCBmYWxzZSwgZmFsc2UsIHRydWUpCitQR19DTURUQUcoQ01EVEFH X0NSRUFURV9GVU5DVElPTiwgIkNSRUFURSBGVU5DVElPTiIsIHRydWUsIGZhbHNlLCBmYWxzZSwg dHJ1ZSkKK1BHX0NNRFRBRyhDTURUQUdfQ1JFQVRFX0lOREVYLCAiQ1JFQVRFIElOREVYIiwgdHJ1 ZSwgZmFsc2UsIGZhbHNlLCB0cnVlKQorUEdfQ01EVEFHKENNRFRBR19DUkVBVEVfTEFOR1VBR0Us ICJDUkVBVEUgTEFOR1VBR0UiLCB0cnVlLCBmYWxzZSwgZmFsc2UsIHRydWUpCitQR19DTURUQUco Q01EVEFHX0NSRUFURV9NQVRFUklBTElaRURfVklFVywgIkNSRUFURSBNQVRFUklBTElaRUQgVklF VyIsIHRydWUsIGZhbHNlLCBmYWxzZSwgdHJ1ZSkKK1BHX0NNRFRBRyhDTURUQUdfQ1JFQVRFX09Q RVJBVE9SLCAiQ1JFQVRFIE9QRVJBVE9SIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCB0cnVlKQorUEdf Q01EVEFHKENNRFRBR19DUkVBVEVfT1BFUkFUT1JfQ0xBU1MsICJDUkVBVEUgT1BFUkFUT1IgQ0xB U1MiLCB0cnVlLCBmYWxzZSwgZmFsc2UsIHRydWUpCitQR19DTURUQUcoQ01EVEFHX0NSRUFURV9P UEVSQVRPUl9GQU1JTFksICJDUkVBVEUgT1BFUkFUT1IgRkFNSUxZIiwgdHJ1ZSwgZmFsc2UsIGZh bHNlLCB0cnVlKQorUEdfQ01EVEFHKENNRFRBR19DUkVBVEVfUE9MSUNZLCAiQ1JFQVRFIFBPTElD WSIsIHRydWUsIGZhbHNlLCBmYWxzZSwgdHJ1ZSkKK1BHX0NNRFRBRyhDTURUQUdfQ1JFQVRFX1BS T0NFRFVSRSwgIkNSRUFURSBQUk9DRURVUkUiLCB0cnVlLCBmYWxzZSwgZmFsc2UsIHRydWUpCitQ R19DTURUQUcoQ01EVEFHX0NSRUFURV9QVUJMSUNBVElPTiwgIkNSRUFURSBQVUJMSUNBVElPTiIs IHRydWUsIGZhbHNlLCBmYWxzZSwgZmFsc2UpCitQR19DTURUQUcoQ01EVEFHX0NSRUFURV9ST0xF LCAiQ1JFQVRFIFJPTEUiLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKK1BHX0NNRFRBRyhD TURUQUdfQ1JFQVRFX1JPVVRJTkUsICJDUkVBVEUgUk9VVElORSIsIHRydWUsIGZhbHNlLCBmYWxz ZSwgZmFsc2UpCitQR19DTURUQUcoQ01EVEFHX0NSRUFURV9SVUxFLCAiQ1JFQVRFIFJVTEUiLCB0 cnVlLCBmYWxzZSwgZmFsc2UsIHRydWUpCitQR19DTURUQUcoQ01EVEFHX0NSRUFURV9TQ0hFTUEs ICJDUkVBVEUgU0NIRU1BIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCB0cnVlKQorUEdfQ01EVEFHKENN RFRBR19DUkVBVEVfU0VRVUVOQ0UsICJDUkVBVEUgU0VRVUVOQ0UiLCB0cnVlLCBmYWxzZSwgZmFs c2UsIHRydWUpCitQR19DTURUQUcoQ01EVEFHX0NSRUFURV9TRVJWRVIsICJDUkVBVEUgU0VSVkVS IiwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCB0cnVlKQorUEdfQ01EVEFHKENNRFRBR19DUkVBVEVfU1RB VElTVElDUywgIkNSRUFURSBTVEFUSVNUSUNTIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCB0cnVlKQor UEdfQ01EVEFHKENNRFRBR19DUkVBVEVfU1VCU0NSSVBUSU9OLCAiQ1JFQVRFIFNVQlNDUklQVElP TiIsIHRydWUsIGZhbHNlLCBmYWxzZSwgZmFsc2UpCitQR19DTURUQUcoQ01EVEFHX0NSRUFURV9U QUJMRSwgIkNSRUFURSBUQUJMRSIsIHRydWUsIGZhbHNlLCBmYWxzZSwgdHJ1ZSkKK1BHX0NNRFRB RyhDTURUQUdfQ1JFQVRFX1RBQkxFX0FTLCAiQ1JFQVRFIFRBQkxFIEFTIiwgdHJ1ZSwgZmFsc2Us IGZhbHNlLCBmYWxzZSkKK1BHX0NNRFRBRyhDTURUQUdfQ1JFQVRFX1RBQkxFU1BBQ0UsICJDUkVB VEUgVEFCTEVTUEFDRSIsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlKQorUEdfQ01EVEFHKENN RFRBR19DUkVBVEVfVEVYVF9TRUFSQ0hfQ09ORklHVVJBVElPTiwgIkNSRUFURSBURVhUIFNFQVJD SCBDT05GSUdVUkFUSU9OIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCB0cnVlKQorUEdfQ01EVEFHKENN RFRBR19DUkVBVEVfVEVYVF9TRUFSQ0hfRElDVElPTkFSWSwgIkNSRUFURSBURVhUIFNFQVJDSCBE SUNUSU9OQVJZIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCB0cnVlKQorUEdfQ01EVEFHKENNRFRBR19D UkVBVEVfVEVYVF9TRUFSQ0hfUEFSU0VSLCAiQ1JFQVRFIFRFWFQgU0VBUkNIIFBBUlNFUiIsIHRy dWUsIGZhbHNlLCBmYWxzZSwgdHJ1ZSkKK1BHX0NNRFRBRyhDTURUQUdfQ1JFQVRFX1RFWFRfU0VB UkNIX1RFTVBMQVRFLCAiQ1JFQVRFIFRFWFQgU0VBUkNIIFRFTVBMQVRFIiwgdHJ1ZSwgZmFsc2Us IGZhbHNlLCB0cnVlKQorUEdfQ01EVEFHKENNRFRBR19DUkVBVEVfVFJBTlNGT1JNLCAiQ1JFQVRF IFRSQU5TRk9STSIsIHRydWUsIGZhbHNlLCBmYWxzZSwgdHJ1ZSkKK1BHX0NNRFRBRyhDTURUQUdf Q1JFQVRFX1RSSUdHRVIsICJDUkVBVEUgVFJJR0dFUiIsIHRydWUsIGZhbHNlLCBmYWxzZSwgdHJ1 ZSkKK1BHX0NNRFRBRyhDTURUQUdfQ1JFQVRFX1RZUEUsICJDUkVBVEUgVFlQRSIsIHRydWUsIGZh bHNlLCBmYWxzZSwgdHJ1ZSkKK1BHX0NNRFRBRyhDTURUQUdfQ1JFQVRFX1VTRVJfTUFQUElORywg IkNSRUFURSBVU0VSIE1BUFBJTkciLCB0cnVlLCBmYWxzZSwgZmFsc2UsIHRydWUpCitQR19DTURU QUcoQ01EVEFHX0NSRUFURV9WSUVXLCAiQ1JFQVRFIFZJRVciLCB0cnVlLCBmYWxzZSwgZmFsc2Us IHRydWUpCitQR19DTURUQUcoQ01EVEFHX0RFQUxMT0NBVEUsICJERUFMTE9DQVRFIiwgZmFsc2Us IGZhbHNlLCBmYWxzZSwgZmFsc2UpCitQR19DTURUQUcoQ01EVEFHX0RFQUxMT0NBVEVfQUxMLCAi REVBTExPQ0FURSBBTEwiLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKK1BHX0NNRFRBRyhD TURUQUdfREVDTEFSRV9DVVJTT1IsICJERUNMQVJFIENVUlNPUiIsIGZhbHNlLCBmYWxzZSwgZmFs c2UsIGZhbHNlKQorUEdfQ01EVEFHKENNRFRBR19ERUxFVEUsICJERUxFVEUiLCBmYWxzZSwgZmFs c2UsIHRydWUsIGZhbHNlKQorUEdfQ01EVEFHKENNRFRBR19ESVNDQVJELCAiRElTQ0FSRCIsIGZh bHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlKQorUEdfQ01EVEFHKENNRFRBR19ESVNDQVJEX0FMTCwg IkRJU0NBUkQgQUxMIiwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UpCitQR19DTURUQUcoQ01E VEFHX0RJU0NBUkRfUExBTlMsICJESVNDQVJEIFBMQU5TIiwgZmFsc2UsIGZhbHNlLCBmYWxzZSwg ZmFsc2UpCitQR19DTURUQUcoQ01EVEFHX0RJU0NBUkRfU0VRVUVOQ0VTLCAiRElTQ0FSRCBTRVFV RU5DRVMiLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKK1BHX0NNRFRBRyhDTURUQUdfRElT Q0FSRF9URU1QLCAiRElTQ0FSRCBURU1QIiwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UpCitQ R19DTURUQUcoQ01EVEFHX0RPLCAiRE8iLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKK1BH X0NNRFRBRyhDTURUQUdfRFJPUF9BQ0NFU1NfTUVUSE9ELCAiRFJPUCBBQ0NFU1MgTUVUSE9EIiwg dHJ1ZSwgZmFsc2UsIGZhbHNlLCB0cnVlKQorUEdfQ01EVEFHKENNRFRBR19EUk9QX0FHR1JFR0FU RSwgIkRST1AgQUdHUkVHQVRFIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKK1BHX0NNRFRB RyhDTURUQUdfRFJPUF9DQVNULCAiRFJPUCBDQVNUIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCB0cnVl KQorUEdfQ01EVEFHKENNRFRBR19EUk9QX0NPTExBVElPTiwgIkRST1AgQ09MTEFUSU9OIiwgdHJ1 ZSwgZmFsc2UsIGZhbHNlLCB0cnVlKQorUEdfQ01EVEFHKENNRFRBR19EUk9QX0NPTlNUUkFJTlQs ICJEUk9QIENPTlNUUkFJTlQiLCB0cnVlLCBmYWxzZSwgZmFsc2UsIGZhbHNlKQorUEdfQ01EVEFH KENNRFRBR19EUk9QX0NPTlZFUlNJT04sICJEUk9QIENPTlZFUlNJT04iLCB0cnVlLCBmYWxzZSwg ZmFsc2UsIHRydWUpCitQR19DTURUQUcoQ01EVEFHX0RST1BfREFUQUJBU0UsICJEUk9QIERBVEFC QVNFIiwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UpCitQR19DTURUQUcoQ01EVEFHX0RST1Bf RE9NQUlOLCAiRFJPUCBET01BSU4iLCB0cnVlLCBmYWxzZSwgZmFsc2UsIHRydWUpCitQR19DTURU QUcoQ01EVEFHX0RST1BfRVZFTlRfVFJJR0dFUiwgIkRST1AgRVZFTlQgVFJJR0dFUiIsIGZhbHNl LCBmYWxzZSwgZmFsc2UsIGZhbHNlKQorUEdfQ01EVEFHKENNRFRBR19EUk9QX0VYVEVOU0lPTiwg IkRST1AgRVhURU5TSU9OIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCB0cnVlKQorUEdfQ01EVEFHKENN RFRBR19EUk9QX0ZPUkVJR05fREFUQV9XUkFQUEVSLCAiRFJPUCBGT1JFSUdOIERBVEEgV1JBUFBF UiIsIHRydWUsIGZhbHNlLCBmYWxzZSwgdHJ1ZSkKK1BHX0NNRFRBRyhDTURUQUdfRFJPUF9GT1JF SUdOX1RBQkxFLCAiRFJPUCBGT1JFSUdOIFRBQkxFIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCB0cnVl KQorUEdfQ01EVEFHKENNRFRBR19EUk9QX0ZVTkNUSU9OLCAiRFJPUCBGVU5DVElPTiIsIHRydWUs IGZhbHNlLCBmYWxzZSwgdHJ1ZSkKK1BHX0NNRFRBRyhDTURUQUdfRFJPUF9JTkRFWCwgIkRST1Ag SU5ERVgiLCB0cnVlLCBmYWxzZSwgZmFsc2UsIHRydWUpCitQR19DTURUQUcoQ01EVEFHX0RST1Bf TEFOR1VBR0UsICJEUk9QIExBTkdVQUdFIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCB0cnVlKQorUEdf Q01EVEFHKENNRFRBR19EUk9QX01BVEVSSUFMSVpFRF9WSUVXLCAiRFJPUCBNQVRFUklBTElaRUQg VklFVyIsIHRydWUsIGZhbHNlLCBmYWxzZSwgdHJ1ZSkKK1BHX0NNRFRBRyhDTURUQUdfRFJPUF9P UEVSQVRPUiwgIkRST1AgT1BFUkFUT1IiLCB0cnVlLCBmYWxzZSwgZmFsc2UsIHRydWUpCitQR19D TURUQUcoQ01EVEFHX0RST1BfT1BFUkFUT1JfQ0xBU1MsICJEUk9QIE9QRVJBVE9SIENMQVNTIiwg dHJ1ZSwgZmFsc2UsIGZhbHNlLCB0cnVlKQorUEdfQ01EVEFHKENNRFRBR19EUk9QX09QRVJBVE9S X0ZBTUlMWSwgIkRST1AgT1BFUkFUT1IgRkFNSUxZIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCB0cnVl KQorUEdfQ01EVEFHKENNRFRBR19EUk9QX09XTkVELCAiRFJPUCBPV05FRCIsIHRydWUsIGZhbHNl LCBmYWxzZSwgZmFsc2UpCitQR19DTURUQUcoQ01EVEFHX0RST1BfUE9MSUNZLCAiRFJPUCBQT0xJ Q1kiLCB0cnVlLCBmYWxzZSwgZmFsc2UsIHRydWUpCitQR19DTURUQUcoQ01EVEFHX0RST1BfUFJP Q0VEVVJFLCAiRFJPUCBQUk9DRURVUkUiLCB0cnVlLCBmYWxzZSwgZmFsc2UsIHRydWUpCitQR19D TURUQUcoQ01EVEFHX0RST1BfUFVCTElDQVRJT04sICJEUk9QIFBVQkxJQ0FUSU9OIiwgdHJ1ZSwg ZmFsc2UsIGZhbHNlLCBmYWxzZSkKK1BHX0NNRFRBRyhDTURUQUdfRFJPUF9ST0xFLCAiRFJPUCBS T0xFIiwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UpCitQR19DTURUQUcoQ01EVEFHX0RST1Bf Uk9VVElORSwgIkRST1AgUk9VVElORSIsIHRydWUsIGZhbHNlLCBmYWxzZSwgdHJ1ZSkKK1BHX0NN RFRBRyhDTURUQUdfRFJPUF9SVUxFLCAiRFJPUCBSVUxFIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCB0 cnVlKQorUEdfQ01EVEFHKENNRFRBR19EUk9QX1NDSEVNQSwgIkRST1AgU0NIRU1BIiwgdHJ1ZSwg ZmFsc2UsIGZhbHNlLCB0cnVlKQorUEdfQ01EVEFHKENNRFRBR19EUk9QX1NFUVVFTkNFLCAiRFJP UCBTRVFVRU5DRSIsIHRydWUsIGZhbHNlLCBmYWxzZSwgdHJ1ZSkKK1BHX0NNRFRBRyhDTURUQUdf RFJPUF9TRVJWRVIsICJEUk9QIFNFUlZFUiIsIHRydWUsIGZhbHNlLCBmYWxzZSwgdHJ1ZSkKK1BH X0NNRFRBRyhDTURUQUdfRFJPUF9TVEFUSVNUSUNTLCAiRFJPUCBTVEFUSVNUSUNTIiwgdHJ1ZSwg ZmFsc2UsIGZhbHNlLCB0cnVlKQorUEdfQ01EVEFHKENNRFRBR19EUk9QX1NVQlNDUklQVElPTiwg IkRST1AgU1VCU0NSSVBUSU9OIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKK1BHX0NNRFRB RyhDTURUQUdfRFJPUF9UQUJMRSwgIkRST1AgVEFCTEUiLCB0cnVlLCBmYWxzZSwgZmFsc2UsIHRy dWUpCitQR19DTURUQUcoQ01EVEFHX0RST1BfVEFCTEVTUEFDRSwgIkRST1AgVEFCTEVTUEFDRSIs IGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlKQorUEdfQ01EVEFHKENNRFRBR19EUk9QX1RFWFRf U0VBUkNIX0NPTkZJR1VSQVRJT04sICJEUk9QIFRFWFQgU0VBUkNIIENPTkZJR1VSQVRJT04iLCB0 cnVlLCBmYWxzZSwgZmFsc2UsIHRydWUpCitQR19DTURUQUcoQ01EVEFHX0RST1BfVEVYVF9TRUFS Q0hfRElDVElPTkFSWSwgIkRST1AgVEVYVCBTRUFSQ0ggRElDVElPTkFSWSIsIHRydWUsIGZhbHNl LCBmYWxzZSwgdHJ1ZSkKK1BHX0NNRFRBRyhDTURUQUdfRFJPUF9URVhUX1NFQVJDSF9QQVJTRVIs ICJEUk9QIFRFWFQgU0VBUkNIIFBBUlNFUiIsIHRydWUsIGZhbHNlLCBmYWxzZSwgdHJ1ZSkKK1BH X0NNRFRBRyhDTURUQUdfRFJPUF9URVhUX1NFQVJDSF9URU1QTEFURSwgIkRST1AgVEVYVCBTRUFS Q0ggVEVNUExBVEUiLCB0cnVlLCBmYWxzZSwgZmFsc2UsIHRydWUpCitQR19DTURUQUcoQ01EVEFH X0RST1BfVFJBTlNGT1JNLCAiRFJPUCBUUkFOU0ZPUk0iLCB0cnVlLCBmYWxzZSwgZmFsc2UsIHRy dWUpCitQR19DTURUQUcoQ01EVEFHX0RST1BfVFJJR0dFUiwgIkRST1AgVFJJR0dFUiIsIHRydWUs IGZhbHNlLCBmYWxzZSwgZmFsc2UpCitQR19DTURUQUcoQ01EVEFHX0RST1BfVFlQRSwgIkRST1Ag VFlQRSIsIHRydWUsIGZhbHNlLCBmYWxzZSwgdHJ1ZSkKK1BHX0NNRFRBRyhDTURUQUdfRFJPUF9V U0VSX01BUFBJTkcsICJEUk9QIFVTRVIgTUFQUElORyIsIHRydWUsIGZhbHNlLCBmYWxzZSwgZmFs c2UpCitQR19DTURUQUcoQ01EVEFHX0RST1BfVklFVywgIkRST1AgVklFVyIsIHRydWUsIGZhbHNl LCBmYWxzZSwgdHJ1ZSkKK1BHX0NNRFRBRyhDTURUQUdfRVhFQ1VURSwgIkVYRUNVVEUiLCBmYWxz ZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKK1BHX0NNRFRBRyhDTURUQUdfRVhQTEFJTiwgIkVYUExB SU4iLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKK1BHX0NNRFRBRyhDTURUQUdfRkVUQ0gs ICJGRVRDSCIsIGZhbHNlLCBmYWxzZSwgdHJ1ZSwgZmFsc2UpCitQR19DTURUQUcoQ01EVEFHX0dS QU5ULCAiR1JBTlQiLCB0cnVlLCBmYWxzZSwgZmFsc2UsIHRydWUpCitQR19DTURUQUcoQ01EVEFH X0dSQU5UX1JPTEUsICJHUkFOVCBST0xFIiwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UpCitQ R19DTURUQUcoQ01EVEFHX0lNUE9SVF9GT1JFSUdOX1NDSEVNQSwgIklNUE9SVCBGT1JFSUdOIFND SEVNQSIsIHRydWUsIGZhbHNlLCBmYWxzZSwgdHJ1ZSkKK1BHX0NNRFRBRyhDTURUQUdfSU5TRVJU LCAiSU5TRVJUIiwgZmFsc2UsIGZhbHNlLCB0cnVlLCBmYWxzZSkKK1BHX0NNRFRBRyhDTURUQUdf TElTVEVOLCAiTElTVEVOIiwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UpCitQR19DTURUQUco Q01EVEFHX0xPQUQsICJMT0FEIiwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UpCitQR19DTURU QUcoQ01EVEFHX0xPQ0tfVEFCTEUsICJMT0NLIFRBQkxFIiwgZmFsc2UsIGZhbHNlLCBmYWxzZSwg ZmFsc2UpCitQR19DTURUQUcoQ01EVEFHX01FUkdFLCAiTUVSR0UiLCBmYWxzZSwgZmFsc2UsIHRy dWUsIGZhbHNlKQorUEdfQ01EVEFHKENNRFRBR19NT1ZFLCAiTU9WRSIsIGZhbHNlLCBmYWxzZSwg dHJ1ZSwgZmFsc2UpCitQR19DTURUQUcoQ01EVEFHX05PVElGWSwgIk5PVElGWSIsIGZhbHNlLCBm YWxzZSwgZmFsc2UsIGZhbHNlKQorUEdfQ01EVEFHKENNRFRBR19QUkVQQVJFLCAiUFJFUEFSRSIs IGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlKQorUEdfQ01EVEFHKENNRFRBR19QUkVQQVJFX1RS QU5TQUNUSU9OLCAiUFJFUEFSRSBUUkFOU0FDVElPTiIsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZh bHNlKQorUEdfQ01EVEFHKENNRFRBR19SRUFTU0lHTl9PV05FRCwgIlJFQVNTSUdOIE9XTkVEIiwg ZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UpCitQR19DTURUQUcoQ01EVEFHX1JFRlJFU0hfTUFU RVJJQUxJWkVEX1ZJRVcsICJSRUZSRVNIIE1BVEVSSUFMSVpFRCBWSUVXIiwgdHJ1ZSwgZmFsc2Us IGZhbHNlLCB0cnVlKQorUEdfQ01EVEFHKENNRFRBR19SRUlOREVYLCAiUkVJTkRFWCIsIGZhbHNl LCBmYWxzZSwgZmFsc2UsIGZhbHNlKQorUEdfQ01EVEFHKENNRFRBR19SRUxFQVNFLCAiUkVMRUFT RSIsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlKQorUEdfQ01EVEFHKENNRFRBR19SRVNFVCwg IlJFU0VUIiwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UpCitQR19DTURUQUcoQ01EVEFHX1JF Vk9LRSwgIlJFVk9LRSIsIHRydWUsIGZhbHNlLCBmYWxzZSwgdHJ1ZSkKK1BHX0NNRFRBRyhDTURU QUdfUkVWT0tFX1JPTEUsICJSRVZPS0UgUk9MRSIsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNl KQorUEdfQ01EVEFHKENNRFRBR19ST0xMQkFDSywgIlJPTExCQUNLIiwgZmFsc2UsIGZhbHNlLCBm YWxzZSwgZmFsc2UpCitQR19DTURUQUcoQ01EVEFHX1JPTExCQUNLX1BSRVBBUkVELCAiUk9MTEJB Q0sgUFJFUEFSRUQiLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKK1BHX0NNRFRBRyhDTURU QUdfU0FWRVBPSU5ULCAiU0FWRVBPSU5UIiwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UpCitQ R19DTURUQUcoQ01EVEFHX1NFQ1VSSVRZX0xBQkVMLCAiU0VDVVJJVFkgTEFCRUwiLCB0cnVlLCBm YWxzZSwgZmFsc2UsIHRydWUpCitQR19DTURUQUcoQ01EVEFHX1NFTEVDVCwgIlNFTEVDVCIsIGZh bHNlLCBmYWxzZSwgdHJ1ZSwgZmFsc2UpCitQR19DTURUQUcoQ01EVEFHX1NFTEVDVF9GT1JfS0VZ X1NIQVJFLCAiU0VMRUNUIEZPUiBLRVkgU0hBUkUiLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxz ZSkKK1BHX0NNRFRBRyhDTURUQUdfU0VMRUNUX0ZPUl9OT19LRVlfVVBEQVRFLCAiU0VMRUNUIEZP UiBOTyBLRVkgVVBEQVRFIiwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UpCitQR19DTURUQUco Q01EVEFHX1NFTEVDVF9GT1JfU0hBUkUsICJTRUxFQ1QgRk9SIFNIQVJFIiwgZmFsc2UsIGZhbHNl LCBmYWxzZSwgZmFsc2UpCitQR19DTURUQUcoQ01EVEFHX1NFTEVDVF9GT1JfVVBEQVRFLCAiU0VM RUNUIEZPUiBVUERBVEUiLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKK1BHX0NNRFRBRyhD TURUQUdfU0VMRUNUX0lOVE8sICJTRUxFQ1QgSU5UTyIsIHRydWUsIGZhbHNlLCBmYWxzZSwgZmFs c2UpCitQR19DTURUQUcoQ01EVEFHX1NFVCwgIlNFVCIsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZh bHNlKQorUEdfQ01EVEFHKENNRFRBR19TRVRfQ09OU1RSQUlOVFMsICJTRVQgQ09OU1RSQUlOVFMi LCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKK1BHX0NNRFRBRyhDTURUQUdfU0hPVywgIlNI T1ciLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKK1BHX0NNRFRBRyhDTURUQUdfU1RBUlRf VFJBTlNBQ1RJT04sICJTVEFSVCBUUkFOU0FDVElPTiIsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZh bHNlKQorUEdfQ01EVEFHKENNRFRBR19UUlVOQ0FURV9UQUJMRSwgIlRSVU5DQVRFIFRBQkxFIiwg ZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UpCitQR19DTURUQUcoQ01EVEFHX1VOTElTVEVOLCAi VU5MSVNURU4iLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKK1BHX0NNRFRBRyhDTURUQUdf VVBEQVRFLCAiVVBEQVRFIiwgZmFsc2UsIGZhbHNlLCB0cnVlLCBmYWxzZSkKK1BHX0NNRFRBRyhD TURUQUdfVkFDVVVNLCAiVkFDVVVNIiwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UpCmRpZmYg LS1naXQgYS9zcmMvaW5jbHVkZS91dGlscy9ldnRjYWNoZS5oIGIvc3JjL2luY2x1ZGUvdXRpbHMv ZXZ0Y2FjaGUuaAppbmRleCBkZGI2N2E2OGZhLi4xZTY0ODMxN2FlIDEwMDY0NAotLS0gYS9zcmMv aW5jbHVkZS91dGlscy9ldnRjYWNoZS5oCisrKyBiL3NyYy9pbmNsdWRlL3V0aWxzL2V2dGNhY2hl LmgKQEAgLTIyLDcgKzIyLDggQEAgdHlwZWRlZiBlbnVtCiAJRVZUX0RETENvbW1hbmRTdGFydCwK IAlFVlRfRERMQ29tbWFuZEVuZCwKIAlFVlRfU1FMRHJvcCwKLQlFVlRfVGFibGVSZXdyaXRlCisJ RVZUX1RhYmxlUmV3cml0ZSwKKwlFVlRfVGFibGVJbml0V3JpdGUKIH0gRXZlbnRUcmlnZ2VyRXZl bnQ7CiAKIHR5cGVkZWYgc3RydWN0CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9tb2R1bGVzL3Rlc3Rf ZGRsX2RlcGFyc2VfcmVncmVzcy9leHBlY3RlZC9jcmVhdGVfdGFibGUub3V0IGIvc3JjL3Rlc3Qv bW9kdWxlcy90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3MvZXhwZWN0ZWQvY3JlYXRlX3RhYmxlLm91 dAppbmRleCA5ZWVhYTFjY2MxLi44ZTZmZmE5ODkzIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9tb2R1 bGVzL3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcy9leHBlY3RlZC9jcmVhdGVfdGFibGUub3V0Cisr KyBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzL2V4cGVjdGVkL2Ny ZWF0ZV90YWJsZS5vdXQKQEAgLTIwLDYgKzIwLDEzIEBAIE5PVElDRTogIHJlLWZvcm1lZCBjb21t YW5kOiBBTFRFUiBUQUJMRSBwdWJsaWMuY3RsdDEgQUxURVIgQ09MVU1OIGEgU0VUIFNUT1JBR0UK IEFMVEVSIFRBQkxFIGN0bHQxIEFMVEVSIENPTFVNTiBiIFNFVCBTVE9SQUdFIEVYVEVSTkFMOwog Tk9USUNFOiAgZGVwYXJzZWQganNvbjogeyJmbXQiOiAiQUxURVIgJXtvYmp0eXBlfXMgJXtpZGVu dGl0eX1EICV7c3ViY21kczosIH1zIiwgIm9ianR5cGUiOiAiVEFCTEUiLCAic3ViY21kcyI6IFt7 ImZtdCI6ICJBTFRFUiBDT0xVTU4gJXtjb2x1bW59SSBTRVQgU1RPUkFHRSAle3N0b3JhZ2V9cyIs ICJ0eXBlIjogInNldCBzdG9yYWdlIiwgImNvbHVtbiI6ICJiIiwgInN0b3JhZ2UiOiAiZXh0ZXJu YWwifV0sICJpZGVudGl0eSI6IHsib2JqbmFtZSI6ICJjdGx0MSIsICJzY2hlbWFuYW1lIjogInB1 YmxpYyJ9fQogTk9USUNFOiAgcmUtZm9ybWVkIGNvbW1hbmQ6IEFMVEVSIFRBQkxFIHB1YmxpYy5j dGx0MSBBTFRFUiBDT0xVTU4gYiBTRVQgU1RPUkFHRSBleHRlcm5hbAorQ1JFQVRFIFRBQkxFIGN0 bHQxX2xpa2UgKExJS0UgY3RsdDEgSU5DTFVESU5HIEFMTCk7CitOT1RJQ0U6ICBkZXBhcnNlZCBq c29uOiB7ImZtdCI6ICJDUkVBVEUgJXtwZXJzaXN0ZW5jZX1zIFRBQkxFICV7aWZfbm90X2V4aXN0 c31zICV7aWRlbnRpdHl9RCAoJXt0YWJsZV9lbGVtZW50czosIH1zKSAle2luaGVyaXRzfXMgJXt0 YWJsZXNwYWNlfXMgJXtvbl9jb21taXR9cyAle3BhcnRpdGlvbl9ieX1zICV7YWNjZXNzX21ldGhv ZH1zICV7d2l0aF9jbGF1c2V9cyIsICJpZGVudGl0eSI6IHsib2JqbmFtZSI6ICJjdGx0MV9saWtl IiwgInNjaGVtYW5hbWUiOiAicHVibGljIn0sICJpbmhlcml0cyI6IHsiZm10IjogIklOSEVSSVRT ICgle3BhcmVudHM6LCB9RCkiLCAicGFyZW50cyI6IG51bGwsICJwcmVzZW50IjogZmFsc2V9LCAi b25fY29tbWl0IjogeyJmbXQiOiAiT04gQ09NTUlUICV7b25fY29tbWl0X3ZhbHVlfXMiLCAicHJl c2VudCI6IGZhbHNlLCAib25fY29tbWl0X3ZhbHVlIjogbnVsbH0sICJ0YWJsZXNwYWNlIjogeyJm bXQiOiAiVEFCTEVTUEFDRSAle3RhYmxlc3BhY2V9SSIsICJwcmVzZW50IjogZmFsc2UsICJ0YWJs ZXNwYWNlIjogbnVsbH0sICJwZXJzaXN0ZW5jZSI6ICIiLCAid2l0aF9jbGF1c2UiOiB7ImZtdCI6 ICJXSVRIIiwgInByZXNlbnQiOiBmYWxzZX0sICJwYXJ0aXRpb25fYnkiOiB7ImZtdCI6ICJQQVJU SVRJT04gQlkgJXtkZWZpbml0aW9ufXMiLCAicHJlc2VudCI6IGZhbHNlLCAiZGVmaW5pdGlvbiI6 IG51bGx9LCAiYWNjZXNzX21ldGhvZCI6IHsiZm10IjogIlVTSU5HICV7YWNjZXNzX21ldGhvZH1J IiwgInByZXNlbnQiOiBmYWxzZSwgImFjY2Vzc19tZXRob2QiOiBudWxsfSwgImlmX25vdF9leGlz dHMiOiAiIiwgInRhYmxlX2VsZW1lbnRzIjogW3siZm10IjogIiV7bmFtZX1JICV7Y29sdHlwZX1U IFNUT1JBR0UgJXtjb2xzdG9yYWdlfXMgJXtjb21wcmVzc2lvbn1zICV7Y29sbGF0aW9ufXMgJXtu b3RfbnVsbH1zICV7ZGVmYXVsdH1zICV7Z2VuZXJhdGVkX2NvbHVtbn1zIiwgIm5hbWUiOiAiYSIs ICJ0eXBlIjogImNvbHVtbiIsICJjb2x0eXBlIjogeyJ0eXBtb2QiOiAiIiwgInR5cGFycmF5Ijog ZmFsc2UsICJ0eXBlbmFtZSI6ICJ0ZXh0IiwgInNjaGVtYW5hbWUiOiAicGdfY2F0YWxvZyJ9LCAi ZGVmYXVsdCI6IHsiZm10IjogIkRFRkFVTFQiLCAicHJlc2VudCI6IGZhbHNlfSwgIm5vdF9udWxs IjogIiIsICJjb2xsYXRpb24iOiB7ImZtdCI6ICJDT0xMQVRFICV7bmFtZX1EIiwgIm5hbWUiOiB7 Im9iam5hbWUiOiAiZGVmYXVsdCIsICJzY2hlbWFuYW1lIjogInBnX2NhdGFsb2cifX0sICJjb2xz dG9yYWdlIjogIm1haW4iLCAiY29tcHJlc3Npb24iOiB7ImZtdCI6ICJDT01QUkVTU0lPTiAle2Nv bXByZXNzaW9uX21ldGhvZH1JIiwgInByZXNlbnQiOiBmYWxzZSwgImNvbXByZXNzaW9uX21ldGhv ZCI6IG51bGx9LCAiZ2VuZXJhdGVkX2NvbHVtbiI6IHsiZm10IjogIkdFTkVSQVRFRCBBTFdBWVMg QVMiLCAicHJlc2VudCI6IGZhbHNlfX0sIHsiZm10IjogIiV7bmFtZX1JICV7Y29sdHlwZX1UIFNU T1JBR0UgJXtjb2xzdG9yYWdlfXMgJXtjb21wcmVzc2lvbn1zICV7Y29sbGF0aW9ufXMgJXtub3Rf bnVsbH1zICV7ZGVmYXVsdH1zICV7Z2VuZXJhdGVkX2NvbHVtbn1zIiwgIm5hbWUiOiAiYiIsICJ0 eXBlIjogImNvbHVtbiIsICJjb2x0eXBlIjogeyJ0eXBtb2QiOiAiIiwgInR5cGFycmF5IjogZmFs c2UsICJ0eXBlbmFtZSI6ICJ0ZXh0IiwgInNjaGVtYW5hbWUiOiAicGdfY2F0YWxvZyJ9LCAiZGVm YXVsdCI6IHsiZm10IjogIkRFRkFVTFQiLCAicHJlc2VudCI6IGZhbHNlfSwgIm5vdF9udWxsIjog IiIsICJjb2xsYXRpb24iOiB7ImZtdCI6ICJDT0xMQVRFICV7bmFtZX1EIiwgIm5hbWUiOiB7Im9i am5hbWUiOiAiZGVmYXVsdCIsICJzY2hlbWFuYW1lIjogInBnX2NhdGFsb2cifX0sICJjb2xzdG9y YWdlIjogImV4dGVybmFsIiwgImNvbXByZXNzaW9uIjogeyJmbXQiOiAiQ09NUFJFU1NJT04gJXtj b21wcmVzc2lvbl9tZXRob2R9SSIsICJwcmVzZW50IjogZmFsc2UsICJjb21wcmVzc2lvbl9tZXRo b2QiOiBudWxsfSwgImdlbmVyYXRlZF9jb2x1bW4iOiB7ImZtdCI6ICJHRU5FUkFURUQgQUxXQVlT IEFTIiwgInByZXNlbnQiOiBmYWxzZX19LCB7ImZtdCI6ICJDT05TVFJBSU5UICV7bmFtZX1JICV7 ZGVmaW5pdGlvbn1zIiwgIm5hbWUiOiAiY3RsdDFfYV9jaGVjayIsICJ0eXBlIjogImNvbnN0cmFp bnQiLCAiY29udHlwZSI6ICJjaGVjayIsICJkZWZpbml0aW9uIjogIkNIRUNLICgocGdfY2F0YWxv Zy5sZW5ndGgoYSkgT1BFUkFUT1IocGdfY2F0YWxvZy4+KSAyKSkifSwgeyJmbXQiOiAiQ09OU1RS QUlOVCAle25hbWV9SSAle2RlZmluaXRpb259cyIsICJuYW1lIjogImN0bHQxX2xpa2VfcGtleSIs ICJ0eXBlIjogImNvbnN0cmFpbnQiLCAiY29udHlwZSI6ICJwcmltYXJ5IGtleSIsICJkZWZpbml0 aW9uIjogIlBSSU1BUlkgS0VZIChhKSJ9XX0KK05PVElDRTogIHJlLWZvcm1lZCBjb21tYW5kOiBD UkVBVEUgIFRBQkxFICBwdWJsaWMuY3RsdDFfbGlrZSAoYSBwZ19jYXRhbG9nLnRleHQgU1RPUkFH RSBtYWluICBDT0xMQVRFIHBnX2NhdGFsb2cuImRlZmF1bHQiICAgLCBiIHBnX2NhdGFsb2cudGV4 dCBTVE9SQUdFIGV4dGVybmFsICBDT0xMQVRFIHBnX2NhdGFsb2cuImRlZmF1bHQiICAgLCBDT05T VFJBSU5UIGN0bHQxX2FfY2hlY2sgQ0hFQ0sgKChwZ19jYXRhbG9nLmxlbmd0aChhKSBPUEVSQVRP UihwZ19jYXRhbG9nLj4pIDIpKSwgQ09OU1RSQUlOVCBjdGx0MV9saWtlX3BrZXkgUFJJTUFSWSBL RVkgKGEpKSAgICAgIAorTk9USUNFOiAgZGVwYXJzZWQganNvbjogPE5VTEw+CitOT1RJQ0U6ICBy ZS1mb3JtZWQgY29tbWFuZDogPE5VTEw+CitOT1RJQ0U6ICBkZXBhcnNlZCBqc29uOiA8TlVMTD4K K05PVElDRTogIHJlLWZvcm1lZCBjb21tYW5kOiA8TlVMTD4KIC0tIFRlc3QgZm9yZWlnbiBrZXkg Y29uc3RyYWludCBpcyBoYW5kbGVkIGluIGEgZm9sbG93aW5nIEFMVEVSIFRBQkxFIEFERCBDT05T VFJBSU5UIEZPUkVJR04gS0VZIFJFRkVSRU5DRVMgc3ViY29tbWFuZAogQ1JFQVRFIFRBQkxFIHBy b2R1Y3QgKGlkIGludCBQUklNQVJZIEtFWSwgbmFtZSB0ZXh0KTsKIE5PVElDRTogIGRlcGFyc2Vk IGpzb246IHsiZm10IjogIkNSRUFURSAle3BlcnNpc3RlbmNlfXMgVEFCTEUgJXtpZl9ub3RfZXhp c3RzfXMgJXtpZGVudGl0eX1EICgle3RhYmxlX2VsZW1lbnRzOiwgfXMpICV7aW5oZXJpdHN9cyAl e3RhYmxlc3BhY2V9cyAle29uX2NvbW1pdH1zICV7cGFydGl0aW9uX2J5fXMgJXthY2Nlc3NfbWV0 aG9kfXMgJXt3aXRoX2NsYXVzZX1zIiwgImlkZW50aXR5IjogeyJvYmpuYW1lIjogInByb2R1Y3Qi LCAic2NoZW1hbmFtZSI6ICJwdWJsaWMifSwgImluaGVyaXRzIjogeyJmbXQiOiAiSU5IRVJJVFMg KCV7cGFyZW50czosIH1EKSIsICJwYXJlbnRzIjogbnVsbCwgInByZXNlbnQiOiBmYWxzZX0sICJv bl9jb21taXQiOiB7ImZtdCI6ICJPTiBDT01NSVQgJXtvbl9jb21taXRfdmFsdWV9cyIsICJwcmVz ZW50IjogZmFsc2UsICJvbl9jb21taXRfdmFsdWUiOiBudWxsfSwgInRhYmxlc3BhY2UiOiB7ImZt dCI6ICJUQUJMRVNQQUNFICV7dGFibGVzcGFjZX1JIiwgInByZXNlbnQiOiBmYWxzZSwgInRhYmxl c3BhY2UiOiBudWxsfSwgInBlcnNpc3RlbmNlIjogIiIsICJ3aXRoX2NsYXVzZSI6IHsiZm10Ijog IldJVEgiLCAicHJlc2VudCI6IGZhbHNlfSwgInBhcnRpdGlvbl9ieSI6IHsiZm10IjogIlBBUlRJ VElPTiBCWSAle2RlZmluaXRpb259cyIsICJwcmVzZW50IjogZmFsc2UsICJkZWZpbml0aW9uIjog bnVsbH0sICJhY2Nlc3NfbWV0aG9kIjogeyJmbXQiOiAiVVNJTkcgJXthY2Nlc3NfbWV0aG9kfUki LCAicHJlc2VudCI6IGZhbHNlLCAiYWNjZXNzX21ldGhvZCI6IG51bGx9LCAiaWZfbm90X2V4aXN0 cyI6ICIiLCAidGFibGVfZWxlbWVudHMiOiBbeyJmbXQiOiAiJXtuYW1lfUkgJXtjb2x0eXBlfVQg U1RPUkFHRSAle2NvbHN0b3JhZ2V9cyAle2NvbXByZXNzaW9ufXMgJXtjb2xsYXRpb259cyAle25v dF9udWxsfXMgJXtkZWZhdWx0fXMgJXtnZW5lcmF0ZWRfY29sdW1ufXMiLCAibmFtZSI6ICJpZCIs ICJ0eXBlIjogImNvbHVtbiIsICJjb2x0eXBlIjogeyJ0eXBtb2QiOiAiIiwgInR5cGFycmF5Ijog ZmFsc2UsICJ0eXBlbmFtZSI6ICJpbnQ0IiwgInNjaGVtYW5hbWUiOiAicGdfY2F0YWxvZyJ9LCAi ZGVmYXVsdCI6IHsiZm10IjogIkRFRkFVTFQiLCAicHJlc2VudCI6IGZhbHNlfSwgIm5vdF9udWxs IjogIiIsICJjb2xsYXRpb24iOiB7ImZtdCI6ICJDT0xMQVRFIiwgInByZXNlbnQiOiBmYWxzZX0s ICJjb2xzdG9yYWdlIjogInBsYWluIiwgImNvbXByZXNzaW9uIjogeyJmbXQiOiAiQ09NUFJFU1NJ T04gJXtjb21wcmVzc2lvbl9tZXRob2R9SSIsICJwcmVzZW50IjogZmFsc2UsICJjb21wcmVzc2lv bl9tZXRob2QiOiBudWxsfSwgImdlbmVyYXRlZF9jb2x1bW4iOiB7ImZtdCI6ICJHRU5FUkFURUQg QUxXQVlTIEFTIiwgInByZXNlbnQiOiBmYWxzZX19LCB7ImZtdCI6ICIle25hbWV9SSAle2NvbHR5 cGV9VCBTVE9SQUdFICV7Y29sc3RvcmFnZX1zICV7Y29tcHJlc3Npb259cyAle2NvbGxhdGlvbn1z ICV7bm90X251bGx9cyAle2RlZmF1bHR9cyAle2dlbmVyYXRlZF9jb2x1bW59cyIsICJuYW1lIjog Im5hbWUiLCAidHlwZSI6ICJjb2x1bW4iLCAiY29sdHlwZSI6IHsidHlwbW9kIjogIiIsICJ0eXBh cnJheSI6IGZhbHNlLCAidHlwZW5hbWUiOiAidGV4dCIsICJzY2hlbWFuYW1lIjogInBnX2NhdGFs b2cifSwgImRlZmF1bHQiOiB7ImZtdCI6ICJERUZBVUxUIiwgInByZXNlbnQiOiBmYWxzZX0sICJu b3RfbnVsbCI6ICIiLCAiY29sbGF0aW9uIjogeyJmbXQiOiAiQ09MTEFURSAle25hbWV9RCIsICJu YW1lIjogeyJvYmpuYW1lIjogImRlZmF1bHQiLCAic2NoZW1hbmFtZSI6ICJwZ19jYXRhbG9nIn19 LCAiY29sc3RvcmFnZSI6ICJleHRlbmRlZCIsICJjb21wcmVzc2lvbiI6IHsiZm10IjogIkNPTVBS RVNTSU9OICV7Y29tcHJlc3Npb25fbWV0aG9kfUkiLCAicHJlc2VudCI6IGZhbHNlLCAiY29tcHJl c3Npb25fbWV0aG9kIjogbnVsbH0sICJnZW5lcmF0ZWRfY29sdW1uIjogeyJmbXQiOiAiR0VORVJB VEVEIEFMV0FZUyBBUyIsICJwcmVzZW50IjogZmFsc2V9fSwgeyJmbXQiOiAiQ09OU1RSQUlOVCAl e25hbWV9SSAle2RlZmluaXRpb259cyIsICJuYW1lIjogInByb2R1Y3RfcGtleSIsICJ0eXBlIjog ImNvbnN0cmFpbnQiLCAiY29udHlwZSI6ICJwcmltYXJ5IGtleSIsICJkZWZpbml0aW9uIjogIlBS SU1BUlkgS0VZIChpZCkifV19CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfZGRs X2RlcGFyc2VfcmVncmVzcy9zcWwvY3JlYXRlX3RhYmxlLnNxbCBiL3NyYy90ZXN0L21vZHVsZXMv dGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzL3NxbC9jcmVhdGVfdGFibGUuc3FsCmluZGV4IDk5N2Qy ZjU0ZmIuLjFjNWYwYzIwNmEgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9kZGxf ZGVwYXJzZV9yZWdyZXNzL3NxbC9jcmVhdGVfdGFibGUuc3FsCisrKyBiL3NyYy90ZXN0L21vZHVs ZXMvdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzL3NxbC9jcmVhdGVfdGFibGUuc3FsCkBAIC05LDYg KzksNyBAQCBDUkVBVEUgVU5JUVVFIElOREVYIGNvdmVyaW5nX2luZGV4IG9uIHNpbXBsZV90YWJs ZSAoaWQpIElOQ0xVREUgKG5hbWUpOwogQ1JFQVRFIFRBQkxFIGN0bHQxIChhIHRleHQgQ0hFQ0sg KGxlbmd0aChhKSA+IDIpIFBSSU1BUlkgS0VZLCBiIHRleHQpOwogQUxURVIgVEFCTEUgY3RsdDEg QUxURVIgQ09MVU1OIGEgU0VUIFNUT1JBR0UgTUFJTjsKIEFMVEVSIFRBQkxFIGN0bHQxIEFMVEVS IENPTFVNTiBiIFNFVCBTVE9SQUdFIEVYVEVSTkFMOworQ1JFQVRFIFRBQkxFIGN0bHQxX2xpa2Ug KExJS0UgY3RsdDEgSU5DTFVESU5HIEFMTCk7CiAKIC0tIFRlc3QgZm9yZWlnbiBrZXkgY29uc3Ry YWludCBpcyBoYW5kbGVkIGluIGEgZm9sbG93aW5nIEFMVEVSIFRBQkxFIEFERCBDT05TVFJBSU5U IEZPUkVJR04gS0VZIFJFRkVSRU5DRVMgc3ViY29tbWFuZAogQ1JFQVRFIFRBQkxFIHByb2R1Y3Qg KGlkIGludCBQUklNQVJZIEtFWSwgbmFtZSB0ZXh0KTsKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3Jl Z3Jlc3MvZXhwZWN0ZWQvcHNxbC5vdXQgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3BzcWwu b3V0CmluZGV4IDhmYzYyY2ViZDIuLmViYmRmYTkwMjAgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3Jl Z3Jlc3MvZXhwZWN0ZWQvcHNxbC5vdXQKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9w c3FsLm91dApAQCAtNjE5NCw5ICs2MTk0LDkgQEAgTGlzdCBvZiBzY2hlbWFzCiAoMCByb3dzKQog CiBcZFJwICJuby5zdWNoLnB1YmxpY2F0aW9uIgotICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgTGlzdCBvZiBwdWJsaWNhdGlvbnMKLSBOYW1lIHwgT3duZXIgfCBBbGwgdGFibGVzIHwgSW5z ZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0r LS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0t LS0tLS0rLS0tLS0tLS0tLQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGlzdCBv ZiBwdWJsaWNhdGlvbnMKKyBOYW1lIHwgT3duZXIgfCBBbGwgdGFibGVzIHwgRERMIHwgSW5zZXJ0 cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCistLS0tLS0rLS0t LS0tLSstLS0tLS0tLS0tLS0rLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0t LS0tLS0tLS0rLS0tLS0tLS0tLQogKDAgcm93cykKIAogXGRScyAibm8uc3VjaC5zdWJzY3JpcHRp b24iCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3B1YmxpY2F0aW9uLm91 dCBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcHVibGljYXRpb24ub3V0CmluZGV4IDQyN2Y4 N2VhMDcuLmUwNjRlOTM2ZTcgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQv cHVibGljYXRpb24ub3V0CisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcHVibGljYXRp b24ub3V0CkBAIC0zMCwyMCArMzAsMjAgQEAgRVJST1I6ICBjb25mbGljdGluZyBvciByZWR1bmRh bnQgb3B0aW9ucwogTElORSAxOiAuLi51Yl94eHggV0lUSCAocHVibGlzaF92aWFfcGFydGl0aW9u X3Jvb3QgPSAndHJ1ZScsIHB1Ymxpc2hfdmkuLi4KICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeCiBcZFJwCi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGlzdCBvZiBwdWJsaWNhdGlvbnMKLSAg ICAgICAgTmFtZSAgICAgICAgfCAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVz IHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0t LS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0t LS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQot IHRlc3RwaWJfaW5zX3RydW5jdCB8IHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAg ICAgfCB0ICAgICAgIHwgZiAgICAgICB8IGYgICAgICAgfCBmICAgICAgICAgfCBmCi0gdGVzdHB1 Yl9kZWZhdWx0ICAgIHwgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IGYg ICAgICAgfCB0ICAgICAgIHwgZiAgICAgICB8IGYgICAgICAgICB8IGYKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMaXN0IG9mIHB1YmxpY2F0aW9ucwor ICAgICAgICBOYW1lICAgICAgICB8ICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJs ZXMgfCBEREwgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEg cm9vdCAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0t LS0tLS0tLS0tLSstLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0t LSstLS0tLS0tLS0tCisgdGVzdHBpYl9pbnNfdHJ1bmN0IHwgcmVncmVzc19wdWJsaWNhdGlvbl91 c2VyIHwgZiAgICAgICAgICB8IGYgICB8IHQgICAgICAgfCBmICAgICAgIHwgZiAgICAgICB8IGYg ICAgICAgICB8IGYKKyB0ZXN0cHViX2RlZmF1bHQgICAgfCByZWdyZXNzX3B1YmxpY2F0aW9uX3Vz ZXIgfCBmICAgICAgICAgIHwgZiAgIHwgZiAgICAgICB8IHQgICAgICAgfCBmICAgICAgIHwgZiAg ICAgICAgIHwgZgogKDIgcm93cykKIAogQUxURVIgUFVCTElDQVRJT04gdGVzdHB1Yl9kZWZhdWx0 IFNFVCAocHVibGlzaCA9ICdpbnNlcnQsIHVwZGF0ZSwgZGVsZXRlJyk7CiBcZFJwCi0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGlzdCBvZiBwdWJsaWNhdGlv bnMKLSAgICAgICAgTmFtZSAgICAgICAgfCAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwg dGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJv b3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0t LS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0t LS0tLQotIHRlc3RwaWJfaW5zX3RydW5jdCB8IHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYg ICAgICAgICAgfCB0ICAgICAgIHwgZiAgICAgICB8IGYgICAgICAgfCBmICAgICAgICAgfCBmCi0g dGVzdHB1Yl9kZWZhdWx0ICAgIHwgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAg ICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IGYgICAgICAgICB8IGYKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMaXN0IG9mIHB1YmxpY2F0 aW9ucworICAgICAgICBOYW1lICAgICAgICB8ICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFs bCB0YWJsZXMgfCBEREwgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMg fCBWaWEgcm9vdCAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tKy0tLS0tLS0tLS0tLSstLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0t LS0tLS0tLSstLS0tLS0tLS0tCisgdGVzdHBpYl9pbnNfdHJ1bmN0IHwgcmVncmVzc19wdWJsaWNh dGlvbl91c2VyIHwgZiAgICAgICAgICB8IGYgICB8IHQgICAgICAgfCBmICAgICAgIHwgZiAgICAg ICB8IGYgICAgICAgICB8IGYKKyB0ZXN0cHViX2RlZmF1bHQgICAgfCByZWdyZXNzX3B1YmxpY2F0 aW9uX3VzZXIgfCBmICAgICAgICAgIHwgZiAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAg IHwgZiAgICAgICAgIHwgZgogKDIgcm93cykKIAogLS0tIGFkZGluZyB0YWJsZXMKQEAgLTg3LDEw ICs4NywxMCBAQCBSRVNFVCBjbGllbnRfbWluX21lc3NhZ2VzOwogLS0gc2hvdWxkIGJlIGFibGUg dG8gYWRkIHNjaGVtYSB0byAnRk9SIFRBQkxFJyBwdWJsaWNhdGlvbgogQUxURVIgUFVCTElDQVRJ T04gdGVzdHB1Yl9mb3J0YWJsZSBBREQgVEFCTEVTIElOIFNDSEVNQSBwdWJfdGVzdDsKIFxkUnAr IHRlc3RwdWJfZm9ydGFibGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGlj YXRpb24gdGVzdHB1Yl9mb3J0YWJsZQotICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0 YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9v dCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0t LS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNh dGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQg ICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRp b24gdGVzdHB1Yl9mb3J0YWJsZQorICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJs ZXMgfCBEREwgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEg cm9vdCAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLSstLS0t LS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCisgcmVncmVz c19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IGYgICB8IHQgICAgICAgfCB0ICAgICAg IHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKIFRhYmxlczoKICAgICAicHVibGljLnRlc3RwdWJf dGJsMSIKIFRhYmxlcyBmcm9tIHNjaGVtYXM6CkBAIC05OSwyMCArOTksMjAgQEAgVGFibGVzIGZy b20gc2NoZW1hczoKIC0tIHNob3VsZCBiZSBhYmxlIHRvIGRyb3Agc2NoZW1hIGZyb20gJ0ZPUiBU QUJMRScgcHVibGljYXRpb24KIEFMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWJfZm9ydGFibGUgRFJP UCBUQUJMRVMgSU4gU0NIRU1BIHB1Yl90ZXN0OwogXGRScCsgdGVzdHB1Yl9mb3J0YWJsZQotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViX2ZvcnRhYmxl Ci0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRh dGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0t LS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAg IHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViX2ZvcnRhYmxlCisg ICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IERETCB8IEluc2VydHMgfCBV cGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAorLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0t LS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBm ICAgICAgICAgIHwgZiAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAg IHwgZgogVGFibGVzOgogICAgICJwdWJsaWMudGVzdHB1Yl90YmwxIgogCiAtLSBzaG91bGQgYmUg YWJsZSB0byBzZXQgc2NoZW1hIHRvICdGT1IgVEFCTEUnIHB1YmxpY2F0aW9uCiBBTFRFUiBQVUJM SUNBVElPTiB0ZXN0cHViX2ZvcnRhYmxlIFNFVCBUQUJMRVMgSU4gU0NIRU1BIHB1Yl90ZXN0Owog XGRScCsgdGVzdHB1Yl9mb3J0YWJsZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQ dWJsaWNhdGlvbiB0ZXN0cHViX2ZvcnRhYmxlCi0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwg QWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZp YSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0t LSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1 YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAg IHwgdCAgICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJs aWNhdGlvbiB0ZXN0cHViX2ZvcnRhYmxlCisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxs IHRhYmxlcyB8IERETCB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8 IFZpYSByb290IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0t Ky0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KKyBy ZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgZiAgIHwgdCAgICAgICB8IHQg ICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgogVGFibGVzIGZyb20gc2NoZW1hczoKICAg ICAicHViX3Rlc3QiCiAKQEAgLTEyMywxMCArMTIzLDEwIEBAIENSRUFURSBQVUJMSUNBVElPTiB0 ZXN0cHViX2ZvcnNjaGVtYSBGT1IgVEFCTEVTIElOIFNDSEVNQSBwdWJfdGVzdDsKIENSRUFURSBQ VUJMSUNBVElPTiB0ZXN0cHViX2Zvcl90Ymxfc2NoZW1hIEZPUiBUQUJMRVMgSU4gU0NIRU1BIHB1 Yl90ZXN0LCBUQUJMRSBwdWJfdGVzdC50ZXN0cHViX25vcGs7CiBSRVNFVCBjbGllbnRfbWluX21l c3NhZ2VzOwogXGRScCsgdGVzdHB1Yl9mb3JfdGJsX3NjaGVtYQotICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViX2Zvcl90Ymxfc2NoZW1hCi0gICAgICAgICAg T3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRl cyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0t LS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0t LS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8 IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViX2Zvcl90Ymxfc2NoZW1hCisgICAgICAgICAg T3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IERETCB8IEluc2VydHMgfCBVcGRhdGVzIHwg RGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0rLS0tLS0tLS0tLS0tKy0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0t LS0tLS0tKy0tLS0tLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAg IHwgZiAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgogVGFi bGVzOgogICAgICJwdWJfdGVzdC50ZXN0cHViX25vcGsiCiBUYWJsZXMgZnJvbSBzY2hlbWFzOgpA QCAtMTM1LDEwICsxMzUsMTAgQEAgVGFibGVzIGZyb20gc2NoZW1hczoKIC0tIHNob3VsZCBiZSBh YmxlIHRvIGFkZCBhIHRhYmxlIG9mIHRoZSBzYW1lIHNjaGVtYSB0byB0aGUgc2NoZW1hIHB1Ymxp Y2F0aW9uCiBBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViX2ZvcnNjaGVtYSBBREQgVEFCTEUgcHVi X3Rlc3QudGVzdHB1Yl9ub3BrOwogXGRScCsgdGVzdHB1Yl9mb3JzY2hlbWEKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViX2ZvcnNjaGVtYQotICAgICAg ICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERl bGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t Ky0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSst LS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAg ICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViX2ZvcnNjaGVtYQorICAgICAgICAg IE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBEREwgfCBJbnNlcnRzIHwgVXBkYXRlcyB8 IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tKy0tLS0tLS0tLS0tLSstLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0t LS0tLS0tLSstLS0tLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAg ICB8IGYgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKIFRh YmxlczoKICAgICAicHViX3Rlc3QudGVzdHB1Yl9ub3BrIgogVGFibGVzIGZyb20gc2NoZW1hczoK QEAgLTE0NywxMCArMTQ3LDEwIEBAIFRhYmxlcyBmcm9tIHNjaGVtYXM6CiAtLSBzaG91bGQgYmUg YWJsZSB0byBkcm9wIHRoZSB0YWJsZQogQUxURVIgUFVCTElDQVRJT04gdGVzdHB1Yl9mb3JzY2hl bWEgRFJPUCBUQUJMRSBwdWJfdGVzdC50ZXN0cHViX25vcGs7CiBcZFJwKyB0ZXN0cHViX2ZvcnNj aGVtYQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJf Zm9yc2NoZW1hCi0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2Vy dHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0t LS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBm ICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJfZm9y c2NoZW1hCisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IERETCB8IElu c2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAorLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tKy0tLS0tLS0tLSstLS0tLS0t LS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9u X3VzZXIgfCBmICAgICAgICAgIHwgZiAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwg dCAgICAgICAgIHwgZgogVGFibGVzIGZyb20gc2NoZW1hczoKICAgICAicHViX3Rlc3QiCiAKQEAg LTE2MSwxMCArMTYxLDEwIEBAIEVSUk9SOiAgcmVsYXRpb24gInRlc3RwdWJfbm9wayIgaXMgbm90 IHBhcnQgb2YgdGhlIHB1YmxpY2F0aW9uCiAtLSBzaG91bGQgYmUgYWJsZSB0byBzZXQgdGFibGUg dG8gc2NoZW1hIHB1YmxpY2F0aW9uCiBBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViX2ZvcnNjaGVt YSBTRVQgVEFCTEUgcHViX3Rlc3QudGVzdHB1Yl9ub3BrOwogXGRScCsgdGVzdHB1Yl9mb3JzY2hl bWEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViX2Zv cnNjaGVtYQotICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRz IHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0t LSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAg ICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViX2ZvcnNj aGVtYQorICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBEREwgfCBJbnNl cnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKKy0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0t Ky0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91 c2VyIHwgZiAgICAgICAgICB8IGYgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQg ICAgICAgICB8IGYKIFRhYmxlczoKICAgICAicHViX3Rlc3QudGVzdHB1Yl9ub3BrIgogCkBAIC0x ODYsMTAgKzE4NiwxMCBAQCBQdWJsaWNhdGlvbnM6CiAgICAgInRlc3RwdWJfZm9yYWxsdGFibGVz IgogCiBcZFJwKyB0ZXN0cHViX2ZvcmFsbHRhYmxlcwotICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgUHVibGljYXRpb24gdGVzdHB1Yl9mb3JhbGx0YWJsZXMKLSAgICAgICAgICBPd25lciAg ICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1 bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0t LS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQot IHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IHQgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAg ICB8IGYgICAgICAgfCBmICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViX2ZvcmFsbHRhYmxlcworICAgICAgICAgIE93bmVyICAg ICAgICAgICB8IEFsbCB0YWJsZXMgfCBEREwgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMg fCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0t LS0tLS0tLSstLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSst LS0tLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgdCAgICAgICAgICB8IGYgICB8 IHQgICAgICAgfCB0ICAgICAgIHwgZiAgICAgICB8IGYgICAgICAgICB8IGYKICgxIHJvdykKIAog RFJPUCBUQUJMRSB0ZXN0cHViX3RibDI7CkBAIC0yMDEsMTkgKzIwMSwxOSBAQCBDUkVBVEUgUFVC TElDQVRJT04gdGVzdHB1YjMgRk9SIFRBQkxFIHRlc3RwdWJfdGJsMzsKIENSRUFURSBQVUJMSUNB VElPTiB0ZXN0cHViNCBGT1IgVEFCTEUgT05MWSB0ZXN0cHViX3RibDM7CiBSRVNFVCBjbGllbnRf bWluX21lc3NhZ2VzOwogXGRScCsgdGVzdHB1YjMKLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIzCi0gICAgICAgICAgT3duZXIgICAgICAgICAg IHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8 IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0t LS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNz X3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAg ICAgIHwgdCAgICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgUHVibGljYXRpb24gdGVzdHB1YjMKKyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwg dGFibGVzIHwgRERMIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwg VmlhIHJvb3QgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0r LS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQorIHJl Z3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCBmICAgfCB0ICAgICAgIHwgdCAg ICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmCiBUYWJsZXM6CiAgICAgInB1YmxpYy50ZXN0 cHViX3RibDMiCiAgICAgInB1YmxpYy50ZXN0cHViX3RibDNhIgogCiBcZFJwKyB0ZXN0cHViNAot ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjQK LSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0 ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0t LS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAg fCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViNAorICAgICAg ICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBEREwgfCBJbnNlcnRzIHwgVXBkYXRl cyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKKy0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSst LS0tLS0tLS0tLSstLS0tLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAg ICAgICB8IGYgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYK IFRhYmxlczoKICAgICAicHVibGljLnRlc3RwdWJfdGJsMyIKIApAQCAtMjM0LDEwICsyMzQsMTAg QEAgVVBEQVRFIHRlc3RwdWJfcGFydGVkMSBTRVQgYSA9IDE7CiAtLSBvbmx5IHBhcmVudCBpcyBs aXN0ZWQgYXMgYmVpbmcgaW4gcHVibGljYXRpb24sIG5vdCB0aGUgcGFydGl0aW9uCiBBTFRFUiBQ VUJMSUNBVElPTiB0ZXN0cHViX2ZvcnBhcnRlZCBBREQgVEFCTEUgdGVzdHB1Yl9wYXJ0ZWQ7CiBc ZFJwKyB0ZXN0cHViX2ZvcnBhcnRlZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1 YmxpY2F0aW9uIHRlc3RwdWJfZm9ycGFydGVkCi0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwg QWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZp YSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0t LSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1 YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAg IHwgdCAgICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1Ymxp Y2F0aW9uIHRlc3RwdWJfZm9ycGFydGVkCisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxs IHRhYmxlcyB8IERETCB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8 IFZpYSByb290IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0t Ky0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KKyBy ZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgZiAgIHwgdCAgICAgICB8IHQg ICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgogVGFibGVzOgogICAgICJwdWJsaWMudGVz dHB1Yl9wYXJ0ZWQiCiAKQEAgLTI1MiwxMCArMjUyLDEwIEBAIEFMVEVSIFRBQkxFIHRlc3RwdWJf cGFydGVkIERFVEFDSCBQQVJUSVRJT04gdGVzdHB1Yl9wYXJ0ZWQxOwogVVBEQVRFIHRlc3RwdWJf cGFydGVkMSBTRVQgYSA9IDE7CiBBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViX2ZvcnBhcnRlZCBT RVQgKHB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290ID0gdHJ1ZSk7CiBcZFJwKyB0ZXN0cHViX2Zv cnBhcnRlZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3Rw dWJfZm9ycGFydGVkCi0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IElu c2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0t LS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIg fCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwg dAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJf Zm9ycGFydGVkCisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IERETCB8 IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAorLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tKy0tLS0tLS0tLSstLS0t LS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0 aW9uX3VzZXIgfCBmICAgICAgICAgIHwgZiAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAg IHwgdCAgICAgICAgIHwgdAogVGFibGVzOgogICAgICJwdWJsaWMudGVzdHB1Yl9wYXJ0ZWQiCiAK QEAgLTI4NCwxMCArMjg0LDEwIEBAIFNFVCBjbGllbnRfbWluX21lc3NhZ2VzID0gJ0VSUk9SJzsK IENSRUFURSBQVUJMSUNBVElPTiB0ZXN0cHViNSBGT1IgVEFCTEUgdGVzdHB1Yl9yZl90YmwxLCB0 ZXN0cHViX3JmX3RibDIgV0hFUkUgKGMgPD4gJ3Rlc3QnIEFORCBkIDwgNSkgV0lUSCAocHVibGlz aCA9ICdpbnNlcnQnKTsKIFJFU0VUIGNsaWVudF9taW5fbWVzc2FnZXM7CiBcZFJwKyB0ZXN0cHVi NQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1 YjUKLSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVw ZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0t LS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAg ICAgfCB0ICAgICAgIHwgZiAgICAgICB8IGYgICAgICAgfCBmICAgICAgICAgfCBmCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViNQorICAg ICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBEREwgfCBJbnNlcnRzIHwgVXBk YXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKKy0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0t LSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAg ICAgICAgICB8IGYgICB8IHQgICAgICAgfCBmICAgICAgIHwgZiAgICAgICB8IGYgICAgICAgICB8 IGYKIFRhYmxlczoKICAgICAicHVibGljLnRlc3RwdWJfcmZfdGJsMSIKICAgICAicHVibGljLnRl c3RwdWJfcmZfdGJsMiIgV0hFUkUgKChjIDw+ICd0ZXN0Jzo6dGV4dCkgQU5EIChkIDwgNSkpCkBA IC0zMDAsMTAgKzMwMCwxMCBAQCBUYWJsZXM6CiAKIEFMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWI1 IEFERCBUQUJMRSB0ZXN0cHViX3JmX3RibDMgV0hFUkUgKGUgPiAxMDAwIEFORCBlIDwgMjAwMCk7 CiBcZFJwKyB0ZXN0cHViNQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVi bGljYXRpb24gdGVzdHB1YjUKLSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVz IHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0t LSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25f dXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgZiAgICAgICB8IGYgICAgICAgfCBmICAgICAg ICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlv biB0ZXN0cHViNQorICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBEREwg fCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKKy0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLSstLS0tLS0tLS0rLS0t LS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCisgcmVncmVzc19wdWJsaWNh dGlvbl91c2VyIHwgZiAgICAgICAgICB8IGYgICB8IHQgICAgICAgfCBmICAgICAgIHwgZiAgICAg ICB8IGYgICAgICAgICB8IGYKIFRhYmxlczoKICAgICAicHVibGljLnRlc3RwdWJfcmZfdGJsMSIK ICAgICAicHVibGljLnRlc3RwdWJfcmZfdGJsMiIgV0hFUkUgKChjIDw+ICd0ZXN0Jzo6dGV4dCkg QU5EIChkIDwgNSkpCkBAIC0zMTksMTAgKzMxOSwxMCBAQCBQdWJsaWNhdGlvbnM6CiAKIEFMVEVS IFBVQkxJQ0FUSU9OIHRlc3RwdWI1IERST1AgVEFCTEUgdGVzdHB1Yl9yZl90YmwyOwogXGRScCsg dGVzdHB1YjUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9u IHRlc3RwdWI1Ci0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2Vy dHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0t LS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBm ICAgICAgICAgIHwgdCAgICAgICB8IGYgICAgICAgfCBmICAgICAgIHwgZiAgICAgICAgIHwgZgor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1 YjUKKyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgRERMIHwgSW5zZXJ0 cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCistLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSst LS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNl ciB8IGYgICAgICAgICAgfCBmICAgfCB0ICAgICAgIHwgZiAgICAgICB8IGYgICAgICAgfCBmICAg ICAgICAgfCBmCiBUYWJsZXM6CiAgICAgInB1YmxpYy50ZXN0cHViX3JmX3RibDEiCiAgICAgInB1 YmxpYy50ZXN0cHViX3JmX3RibDMiIFdIRVJFICgoZSA+IDEwMDApIEFORCAoZSA8IDIwMDApKQpA QCAtMzMwLDEwICszMzAsMTAgQEAgVGFibGVzOgogLS0gcmVtb3ZlIHRlc3RwdWJfcmZfdGJsMSBh bmQgYWRkIHRlc3RwdWJfcmZfdGJsMyBhZ2FpbiAoYW5vdGhlciBXSEVSRSBleHByZXNzaW9uKQog QUxURVIgUFVCTElDQVRJT04gdGVzdHB1YjUgU0VUIFRBQkxFIHRlc3RwdWJfcmZfdGJsMyBXSEVS RSAoZSA+IDMwMCBBTkQgZSA8IDUwMCk7CiBcZFJwKyB0ZXN0cHViNQotICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjUKLSAgICAgICAgICBPd25l ciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwg VHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0t LS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0t LQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgZiAg ICAgICB8IGYgICAgICAgfCBmICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViNQorICAgICAgICAgIE93bmVyICAgICAg ICAgICB8IEFsbCB0YWJsZXMgfCBEREwgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBU cnVuY2F0ZXMgfCBWaWEgcm9vdCAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0t LS0tLSstLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0t LS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IGYgICB8IHQg ICAgICAgfCBmICAgICAgIHwgZiAgICAgICB8IGYgICAgICAgICB8IGYKIFRhYmxlczoKICAgICAi cHVibGljLnRlc3RwdWJfcmZfdGJsMyIgV0hFUkUgKChlID4gMzAwKSBBTkQgKGUgPCA1MDApKQog CkBAIC0zNjYsMTAgKzM2NiwxMCBAQCBTRVQgY2xpZW50X21pbl9tZXNzYWdlcyA9ICdFUlJPUic7 CiBDUkVBVEUgUFVCTElDQVRJT04gdGVzdHB1Yl9zeW50YXgxIEZPUiBUQUJMRSB0ZXN0cHViX3Jm X3RibDEsIE9OTFkgdGVzdHB1Yl9yZl90YmwzIFdIRVJFIChlIDwgOTk5KSBXSVRIIChwdWJsaXNo ID0gJ2luc2VydCcpOwogUkVTRVQgY2xpZW50X21pbl9tZXNzYWdlczsKIFxkUnArIHRlc3RwdWJf c3ludGF4MQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0 cHViX3N5bnRheDEKLSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5z ZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0t LS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8 IGYgICAgICAgICAgfCB0ICAgICAgIHwgZiAgICAgICB8IGYgICAgICAgfCBmICAgICAgICAgfCBm CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJf c3ludGF4MQorICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBEREwgfCBJ bnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKKy0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLSstLS0tLS0tLS0rLS0tLS0t LS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlv bl91c2VyIHwgZiAgICAgICAgICB8IGYgICB8IHQgICAgICAgfCBmICAgICAgIHwgZiAgICAgICB8 IGYgICAgICAgICB8IGYKIFRhYmxlczoKICAgICAicHVibGljLnRlc3RwdWJfcmZfdGJsMSIKICAg ICAicHVibGljLnRlc3RwdWJfcmZfdGJsMyIgV0hFUkUgKGUgPCA5OTkpCkBAIC0zNzksMTAgKzM3 OSwxMCBAQCBTRVQgY2xpZW50X21pbl9tZXNzYWdlcyA9ICdFUlJPUic7CiBDUkVBVEUgUFVCTElD QVRJT04gdGVzdHB1Yl9zeW50YXgyIEZPUiBUQUJMRSB0ZXN0cHViX3JmX3RibDEsIHRlc3RwdWJf cmZfc2NoZW1hMS50ZXN0cHViX3JmX3RibDUgV0hFUkUgKGggPCA5OTkpIFdJVEggKHB1Ymxpc2gg PSAnaW5zZXJ0Jyk7CiBSRVNFVCBjbGllbnRfbWluX21lc3NhZ2VzOwogXGRScCsgdGVzdHB1Yl9z eW50YXgyCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3Rw dWJfc3ludGF4MgotICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNl cnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0t LS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwg ZiAgICAgICAgICB8IHQgICAgICAgfCBmICAgICAgIHwgZiAgICAgICB8IGYgICAgICAgICB8IGYK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1Yl9z eW50YXgyCisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IERETCB8IElu c2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAorLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tKy0tLS0tLS0tLSstLS0tLS0t LS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9u X3VzZXIgfCBmICAgICAgICAgIHwgZiAgIHwgdCAgICAgICB8IGYgICAgICAgfCBmICAgICAgIHwg ZiAgICAgICAgIHwgZgogVGFibGVzOgogICAgICJwdWJsaWMudGVzdHB1Yl9yZl90YmwxIgogICAg ICJ0ZXN0cHViX3JmX3NjaGVtYTEudGVzdHB1Yl9yZl90Ymw1IiBXSEVSRSAoaCA8IDk5OSkKQEAg LTQ5NywxMCArNDk3LDEwIEBAIENSRUFURSBQVUJMSUNBVElPTiB0ZXN0cHViNiBGT1IgVEFCTEVT IElOIFNDSEVNQSB0ZXN0cHViX3JmX3NjaGVtYTI7CiBBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHVi NiBTRVQgVEFCTEVTIElOIFNDSEVNQSB0ZXN0cHViX3JmX3NjaGVtYTIsIFRBQkxFIHRlc3RwdWJf cmZfc2NoZW1hMi50ZXN0cHViX3JmX3RibDYgV0hFUkUgKGkgPCA5OSk7CiBSRVNFVCBjbGllbnRf bWluX21lc3NhZ2VzOwogXGRScCsgdGVzdHB1YjYKLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWI2Ci0gICAgICAgICAgT3duZXIgICAgICAgICAg IHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8 IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0t LS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNz X3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAg ICAgIHwgdCAgICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgUHVibGljYXRpb24gdGVzdHB1YjYKKyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwg dGFibGVzIHwgRERMIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwg VmlhIHJvb3QgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0r LS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQorIHJl Z3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCBmICAgfCB0ICAgICAgIHwgdCAg ICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmCiBUYWJsZXM6CiAgICAgInRlc3RwdWJfcmZf c2NoZW1hMi50ZXN0cHViX3JmX3RibDYiIFdIRVJFIChpIDwgOTkpCiBUYWJsZXMgZnJvbSBzY2hl bWFzOgpAQCAtNzE0LDEwICs3MTQsMTAgQEAgQ1JFQVRFIFBVQkxJQ0FUSU9OIHRlc3RwdWJfdGFi bGVfaW5zIFdJVEggKHB1Ymxpc2ggPSAnaW5zZXJ0LCB0cnVuY2F0ZScpOwogUkVTRVQgY2xpZW50 X21pbl9tZXNzYWdlczsKIEFMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWJfdGFibGVfaW5zIEFERCBU QUJMRSB0ZXN0cHViX3RibDUgKGEpOwkJLS0gb2sKIFxkUnArIHRlc3RwdWJfdGFibGVfaW5zCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1Yl90YWJsZV9p bnMKLSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVw ZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0t LS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAg ICAgfCB0ICAgICAgIHwgZiAgICAgICB8IGYgICAgICAgfCB0ICAgICAgICAgfCBmCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1Yl90YWJsZV9pbnMK KyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgRERMIHwgSW5zZXJ0cyB8 IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCistLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0t LS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8 IGYgICAgICAgICAgfCBmICAgfCB0ICAgICAgIHwgZiAgICAgICB8IGYgICAgICAgfCB0ICAgICAg ICAgfCBmCiBUYWJsZXM6CiAgICAgInB1YmxpYy50ZXN0cHViX3RibDUiIChhKQogCkBAIC04OTEs MTAgKzg5MSwxMCBAQCBDUkVBVEUgVEFCTEUgdGVzdHB1Yl90YmxfYm90aF9maWx0ZXJzIChhIGlu dCwgYiBpbnQsIGMgaW50LCBQUklNQVJZIEtFWSAoYSxjKSk7CiBBTFRFUiBUQUJMRSB0ZXN0cHVi X3RibF9ib3RoX2ZpbHRlcnMgUkVQTElDQSBJREVOVElUWSBVU0lORyBJTkRFWCB0ZXN0cHViX3Ri bF9ib3RoX2ZpbHRlcnNfcGtleTsKIEFMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWJfYm90aF9maWx0 ZXJzIEFERCBUQUJMRSB0ZXN0cHViX3RibF9ib3RoX2ZpbHRlcnMgKGEsYykgV0hFUkUgKGMgIT0g MSk7CiBcZFJwKyB0ZXN0cHViX2JvdGhfZmlsdGVycwotICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgUHVibGljYXRpb24gdGVzdHB1Yl9ib3RoX2ZpbHRlcnMKLSAgICAgICAgICBPd25lciAg ICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1 bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0t LS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQot IHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAg ICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViX2JvdGhfZmlsdGVycworICAgICAgICAgIE93bmVyICAg ICAgICAgICB8IEFsbCB0YWJsZXMgfCBEREwgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMg fCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0t LS0tLS0tLSstLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSst LS0tLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IGYgICB8 IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKIFRhYmxlczoKICAg ICAicHVibGljLnRlc3RwdWJfdGJsX2JvdGhfZmlsdGVycyIgKGEsIGMpIFdIRVJFIChjIDw+IDEp CiAKQEAgLTEwOTksMTAgKzEwOTksMTAgQEAgRVJST1I6ICByZWxhdGlvbiAidGVzdHB1Yl90Ymwx IiBpcyBhbHJlYWR5IG1lbWJlciBvZiBwdWJsaWNhdGlvbiAidGVzdHB1Yl9mb3J0YmwKIENSRUFU RSBQVUJMSUNBVElPTiB0ZXN0cHViX2ZvcnRibCBGT1IgVEFCTEUgdGVzdHB1Yl90YmwxOwogRVJS T1I6ICBwdWJsaWNhdGlvbiAidGVzdHB1Yl9mb3J0YmwiIGFscmVhZHkgZXhpc3RzCiBcZFJwKyB0 ZXN0cHViX2ZvcnRibAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRp b24gdGVzdHB1Yl9mb3J0YmwKLSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVz IHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0t LSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25f dXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAg ICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0 ZXN0cHViX2ZvcnRibAorICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBE REwgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAK Ky0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLSstLS0tLS0tLS0r LS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCisgcmVncmVzc19wdWJs aWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IGYgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAg ICAgICB8IHQgICAgICAgICB8IGYKIFRhYmxlczoKICAgICAicHViX3Rlc3QudGVzdHB1Yl9ub3Br IgogICAgICJwdWJsaWMudGVzdHB1Yl90YmwxIgpAQCAtMTE0MCwxMCArMTE0MCwxMCBAQCBQdWJs aWNhdGlvbnM6CiAgICAgInRlc3RwdWJfZm9ydGJsIgogCiBcZFJwKyB0ZXN0cHViX2RlZmF1bHQK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1Yl9kZWZh dWx0Ci0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBV cGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0t LS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAg ICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgZiAgICAgICAgIHwgZgorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViX2RlZmF1bHQK KyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgRERMIHwgSW5zZXJ0cyB8 IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCistLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0t LS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8 IGYgICAgICAgICAgfCBmICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCBmICAgICAg ICAgfCBmCiBUYWJsZXM6CiAgICAgInB1Yl90ZXN0LnRlc3RwdWJfbm9wayIKICAgICAicHVibGlj LnRlc3RwdWJfdGJsMSIKQEAgLTEyMjEsMTAgKzEyMjEsMTAgQEAgUkVWT0tFIENSRUFURSBPTiBE QVRBQkFTRSByZWdyZXNzaW9uIEZST00gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyMjsKIERST1Ag VEFCTEUgdGVzdHB1Yl9wYXJ0ZWQ7CiBEUk9QIFRBQkxFIHRlc3RwdWJfdGJsMTsKIFxkUnArIHRl c3RwdWJfZGVmYXVsdAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlv biB0ZXN0cHViX2RlZmF1bHQKLSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVz IHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0t LSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25f dXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCBmICAgICAg ICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRl c3RwdWJfZGVmYXVsdAorICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBE REwgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAK Ky0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLSstLS0tLS0tLS0r LS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCisgcmVncmVzc19wdWJs aWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IGYgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAg ICAgICB8IGYgICAgICAgICB8IGYKICgxIHJvdykKIAogLS0gZmFpbCAtIG11c3QgYmUgb3duZXIg b2YgcHVibGljYXRpb24KQEAgLTEyMzQsMjAgKzEyMzQsMjAgQEAgRVJST1I6ICBtdXN0IGJlIG93 bmVyIG9mIHB1YmxpY2F0aW9uIHRlc3RwdWJfZGVmYXVsdAogUkVTRVQgUk9MRTsKIEFMVEVSIFBV QkxJQ0FUSU9OIHRlc3RwdWJfZGVmYXVsdCBSRU5BTUUgVE8gdGVzdHB1Yl9mb287CiBcZFJwIHRl c3RwdWJfZm9vCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGlz dCBvZiBwdWJsaWNhdGlvbnMKLSAgICBOYW1lICAgICB8ICAgICAgICAgIE93bmVyICAgICAgICAg ICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMg fCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0t LS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0t LS0tLS0KLSB0ZXN0cHViX2ZvbyB8IHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAg ICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCBmICAgICAgICAgfCBmCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGlzdCBvZiBwdWJsaWNhdGlv bnMKKyAgICBOYW1lICAgICB8ICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMg fCBEREwgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9v dCAKKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0t Ky0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0t LS0KKyB0ZXN0cHViX2ZvbyB8IHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAg fCBmICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCBmICAgICAgICAgfCBmCiAoMSBy b3cpCiAKIC0tIHJlbmFtZSBiYWNrIHRvIGtlZXAgdGhlIHJlc3Qgc2ltcGxlCiBBTFRFUiBQVUJM SUNBVElPTiB0ZXN0cHViX2ZvbyBSRU5BTUUgVE8gdGVzdHB1Yl9kZWZhdWx0OwogQUxURVIgUFVC TElDQVRJT04gdGVzdHB1Yl9kZWZhdWx0IE9XTkVSIFRPIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNl cjI7CiBcZFJwIHRlc3RwdWJfZGVmYXVsdAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgTGlzdCBvZiBwdWJsaWNhdGlvbnMKLSAgICAgIE5hbWUgICAgICAgfCAg ICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVz IHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0rLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0t Ky0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gdGVzdHB1Yl9kZWZhdWx0IHwgcmVn cmVzc19wdWJsaWNhdGlvbl91c2VyMiB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8 IHQgICAgICAgfCBmICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBMaXN0IG9mIHB1YmxpY2F0aW9ucworICAgICAgTmFtZSAgICAgICB8 ICAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgRERMIHwgSW5zZXJ0cyB8 IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCistLS0tLS0tLS0tLS0t LS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tKy0tLS0t LS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KKyB0ZXN0cHVi X2RlZmF1bHQgfCByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIyIHwgZiAgICAgICAgICB8IGYgICB8 IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IGYgICAgICAgICB8IGYKICgxIHJvdykKIAog LS0gYWRkaW5nIHNjaGVtYXMgYW5kIHRhYmxlcwpAQCAtMTI2MywxOSArMTI2MywxOSBAQCBDUkVB VEUgVEFCTEUgIkNVUlJFTlRfU0NIRU1BIi4iQ1VSUkVOVF9TQ0hFTUEiKGlkIGludCk7CiBTRVQg Y2xpZW50X21pbl9tZXNzYWdlcyA9ICdFUlJPUic7CiBDUkVBVEUgUFVCTElDQVRJT04gdGVzdHB1 YjFfZm9yc2NoZW1hIEZPUiBUQUJMRVMgSU4gU0NIRU1BIHB1Yl90ZXN0MTsKIFxkUnArIHRlc3Rw dWIxX2ZvcnNjaGVtYQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9u IHRlc3RwdWIxX2ZvcnNjaGVtYQotICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJs ZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAK LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0t LS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlv bl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAg ICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0 ZXN0cHViMV9mb3JzY2hlbWEKKyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVz IHwgRERMIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJv b3QgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0rLS0tLS0t LS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQorIHJlZ3Jlc3Nf cHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCBmICAgfCB0ICAgICAgIHwgdCAgICAgICB8 IHQgICAgICAgfCB0ICAgICAgICAgfCBmCiBUYWJsZXMgZnJvbSBzY2hlbWFzOgogICAgICJwdWJf dGVzdDEiCiAKIENSRUFURSBQVUJMSUNBVElPTiB0ZXN0cHViMl9mb3JzY2hlbWEgRk9SIFRBQkxF UyBJTiBTQ0hFTUEgcHViX3Rlc3QxLCBwdWJfdGVzdDIsIHB1Yl90ZXN0MzsKIFxkUnArIHRlc3Rw dWIyX2ZvcnNjaGVtYQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9u IHRlc3RwdWIyX2ZvcnNjaGVtYQotICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJs ZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAK LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0t LS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlv bl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAg ICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0 ZXN0cHViMl9mb3JzY2hlbWEKKyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVz IHwgRERMIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJv b3QgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0rLS0tLS0t LS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQorIHJlZ3Jlc3Nf cHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCBmICAgfCB0ICAgICAgIHwgdCAgICAgICB8 IHQgICAgICAgfCB0ICAgICAgICAgfCBmCiBUYWJsZXMgZnJvbSBzY2hlbWFzOgogICAgICJwdWJf dGVzdDEiCiAgICAgInB1Yl90ZXN0MiIKQEAgLTEyODksNDQgKzEyODksNDQgQEAgQ1JFQVRFIFBV QkxJQ0FUSU9OIHRlc3RwdWI2X2ZvcnNjaGVtYSBGT1IgVEFCTEVTIElOIFNDSEVNQSAiQ1VSUkVO VF9TQ0hFTUEiLCBDVVIKIENSRUFURSBQVUJMSUNBVElPTiB0ZXN0cHViX2ZvcnRhYmxlIEZPUiBU QUJMRSAiQ1VSUkVOVF9TQ0hFTUEiLiJDVVJSRU5UX1NDSEVNQSI7CiBSRVNFVCBjbGllbnRfbWlu X21lc3NhZ2VzOwogXGRScCsgdGVzdHB1YjNfZm9yc2NoZW1hCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjNfZm9yc2NoZW1hCi0gICAgICAgICAgT3du ZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8 IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0t LS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0t LS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQg ICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIzX2ZvcnNjaGVtYQorICAgICAgICAgIE93bmVy ICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBEREwgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0 ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0t LS0tLS0tLS0tLSstLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0t LSstLS0tLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IGYg ICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKIFRhYmxlcyBm cm9tIHNjaGVtYXM6CiAgICAgInB1YmxpYyIKIAogXGRScCsgdGVzdHB1YjRfZm9yc2NoZW1hCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjRfZm9yc2No ZW1hCi0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBV cGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0t LS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAg ICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWI0X2ZvcnNjaGVt YQorICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBEREwgfCBJbnNlcnRz IHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKKy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0t LS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2Vy IHwgZiAgICAgICAgICB8IGYgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAg ICAgICB8IGYKIFRhYmxlcyBmcm9tIHNjaGVtYXM6CiAgICAgIkNVUlJFTlRfU0NIRU1BIgogCiBc ZFJwKyB0ZXN0cHViNV9mb3JzY2hlbWEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQ dWJsaWNhdGlvbiB0ZXN0cHViNV9mb3JzY2hlbWEKLSAgICAgICAgICBPd25lciAgICAgICAgICAg fCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwg VmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0t LS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3Nf cHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAg ICAgfCB0ICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVi bGljYXRpb24gdGVzdHB1YjVfZm9yc2NoZW1hCisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwg QWxsIHRhYmxlcyB8IERETCB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRl cyB8IFZpYSByb290IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0t LS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0K KyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgZiAgIHwgdCAgICAgICB8 IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgogVGFibGVzIGZyb20gc2NoZW1hczoK ICAgICAiQ1VSUkVOVF9TQ0hFTUEiCiAgICAgInB1YmxpYyIKIAogXGRScCsgdGVzdHB1YjZfZm9y c2NoZW1hCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1 YjZfZm9yc2NoZW1hCi0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IElu c2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0t LS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIg fCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwg ZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWI2 X2ZvcnNjaGVtYQorICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBEREwg fCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKKy0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLSstLS0tLS0tLS0rLS0t LS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCisgcmVncmVzc19wdWJsaWNh dGlvbl91c2VyIHwgZiAgICAgICAgICB8IGYgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAg ICB8IHQgICAgICAgICB8IGYKIFRhYmxlcyBmcm9tIHNjaGVtYXM6CiAgICAgIkNVUlJFTlRfU0NI RU1BIgogICAgICJwdWJsaWMiCiAKIFxkUnArIHRlc3RwdWJfZm9ydGFibGUKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1Yl9mb3J0YWJsZQotICAgICAg ICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERl bGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t Ky0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSst LS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAg ICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1Yl9mb3J0YWJsZQorICAgICAgICAg IE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBEREwgfCBJbnNlcnRzIHwgVXBkYXRlcyB8 IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tKy0tLS0tLS0tLS0tLSstLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0t LS0tLS0tLSstLS0tLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAg ICB8IGYgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKIFRh YmxlczoKICAgICAiQ1VSUkVOVF9TQ0hFTUEuQ1VSUkVOVF9TQ0hFTUEiCiAKQEAgLTEzNjAsMTAg KzEzNjAsMTAgQEAgRVJST1I6ICBzY2hlbWEgInRlc3RwdWJfdmlldyIgZG9lcyBub3QgZXhpc3QK IC0tIGRyb3BwaW5nIHRoZSBzY2hlbWEgc2hvdWxkIHJlZmxlY3QgdGhlIGNoYW5nZSBpbiBwdWJs aWNhdGlvbgogRFJPUCBTQ0hFTUEgcHViX3Rlc3QzOwogXGRScCsgdGVzdHB1YjJfZm9yc2NoZW1h Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjJfZm9y c2NoZW1hCi0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMg fCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0t Ky0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAg ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIyX2ZvcnNj aGVtYQorICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBEREwgfCBJbnNl cnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKKy0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0t Ky0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91 c2VyIHwgZiAgICAgICAgICB8IGYgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQg ICAgICAgICB8IGYKIFRhYmxlcyBmcm9tIHNjaGVtYXM6CiAgICAgInB1Yl90ZXN0MSIKICAgICAi cHViX3Rlc3QyIgpAQCAtMTM3MSwyMCArMTM3MSwyMCBAQCBUYWJsZXMgZnJvbSBzY2hlbWFzOgog LS0gcmVuYW1pbmcgdGhlIHNjaGVtYSBzaG91bGQgcmVmbGVjdCB0aGUgY2hhbmdlIGluIHB1Ymxp Y2F0aW9uCiBBTFRFUiBTQ0hFTUEgcHViX3Rlc3QxIFJFTkFNRSB0byBwdWJfdGVzdDFfcmVuYW1l ZDsKIFxkUnArIHRlc3RwdWIyX2ZvcnNjaGVtYQotICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIyX2ZvcnNjaGVtYQotICAgICAgICAgIE93bmVyICAgICAg ICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0 ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSst LS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVn cmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwg dCAgICAgICB8IHQgICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBQdWJsaWNhdGlvbiB0ZXN0cHViMl9mb3JzY2hlbWEKKyAgICAgICAgICBPd25lciAgICAgICAg ICAgfCBBbGwgdGFibGVzIHwgRERMIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1 bmNhdGVzIHwgVmlhIHJvb3QgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0t LS0rLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0t LS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCBmICAgfCB0ICAg ICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmCiBUYWJsZXMgZnJvbSBzY2hl bWFzOgogICAgICJwdWJfdGVzdDFfcmVuYW1lZCIKICAgICAicHViX3Rlc3QyIgogCiBBTFRFUiBT Q0hFTUEgcHViX3Rlc3QxX3JlbmFtZWQgUkVOQU1FIHRvIHB1Yl90ZXN0MTsKIFxkUnArIHRlc3Rw dWIyX2ZvcnNjaGVtYQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9u IHRlc3RwdWIyX2ZvcnNjaGVtYQotICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJs ZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAK LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0t LS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlv bl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAg ICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0 ZXN0cHViMl9mb3JzY2hlbWEKKyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVz IHwgRERMIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJv b3QgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0rLS0tLS0t LS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQorIHJlZ3Jlc3Nf cHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCBmICAgfCB0ICAgICAgIHwgdCAgICAgICB8 IHQgICAgICAgfCB0ICAgICAgICAgfCBmCiBUYWJsZXMgZnJvbSBzY2hlbWFzOgogICAgICJwdWJf dGVzdDEiCiAgICAgInB1Yl90ZXN0MiIKQEAgLTEzOTIsMTAgKzEzOTIsMTAgQEAgVGFibGVzIGZy b20gc2NoZW1hczoKIC0tIGFsdGVyIHB1YmxpY2F0aW9uIGFkZCBzY2hlbWEKIEFMVEVSIFBVQkxJ Q0FUSU9OIHRlc3RwdWIxX2ZvcnNjaGVtYSBBREQgVEFCTEVTIElOIFNDSEVNQSBwdWJfdGVzdDI7 CiBcZFJwKyB0ZXN0cHViMV9mb3JzY2hlbWEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBQdWJsaWNhdGlvbiB0ZXN0cHViMV9mb3JzY2hlbWEKLSAgICAgICAgICBPd25lciAgICAgICAg ICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVz IHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0t LS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jl c3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQg ICAgICAgfCB0ICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg UHVibGljYXRpb24gdGVzdHB1YjFfZm9yc2NoZW1hCisgICAgICAgICAgT3duZXIgICAgICAgICAg IHwgQWxsIHRhYmxlcyB8IERETCB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5j YXRlcyB8IFZpYSByb290IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0t Ky0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0t LS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgZiAgIHwgdCAgICAg ICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgogVGFibGVzIGZyb20gc2NoZW1h czoKICAgICAicHViX3Rlc3QxIgogICAgICJwdWJfdGVzdDIiCkBAIC0xNDA0LDEwICsxNDA0LDEw IEBAIFRhYmxlcyBmcm9tIHNjaGVtYXM6CiBBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViMV9mb3Jz Y2hlbWEgQUREIFRBQkxFUyBJTiBTQ0hFTUEgbm9uX2V4aXN0ZW50X3NjaGVtYTsKIEVSUk9SOiAg c2NoZW1hICJub25fZXhpc3RlbnRfc2NoZW1hIiBkb2VzIG5vdCBleGlzdAogXGRScCsgdGVzdHB1 YjFfZm9yc2NoZW1hCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24g dGVzdHB1YjFfZm9yc2NoZW1hCi0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxl cyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAot LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0t LS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9u X3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAg ICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRl c3RwdWIxX2ZvcnNjaGVtYQorICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMg fCBEREwgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9v dCAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLSstLS0tLS0t LS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCisgcmVncmVzc19w dWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IGYgICB8IHQgICAgICAgfCB0ICAgICAgIHwg dCAgICAgICB8IHQgICAgICAgICB8IGYKIFRhYmxlcyBmcm9tIHNjaGVtYXM6CiAgICAgInB1Yl90 ZXN0MSIKICAgICAicHViX3Rlc3QyIgpAQCAtMTQxNiwxMCArMTQxNiwxMCBAQCBUYWJsZXMgZnJv bSBzY2hlbWFzOgogQUxURVIgUFVCTElDQVRJT04gdGVzdHB1YjFfZm9yc2NoZW1hIEFERCBUQUJM RVMgSU4gU0NIRU1BIHB1Yl90ZXN0MTsKIEVSUk9SOiAgc2NoZW1hICJwdWJfdGVzdDEiIGlzIGFs cmVhZHkgbWVtYmVyIG9mIHB1YmxpY2F0aW9uICJ0ZXN0cHViMV9mb3JzY2hlbWEiCiBcZFJwKyB0 ZXN0cHViMV9mb3JzY2hlbWEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNh dGlvbiB0ZXN0cHViMV9mb3JzY2hlbWEKLSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwg dGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJv b3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0t LS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGlj YXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0 ICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRp b24gdGVzdHB1YjFfZm9yc2NoZW1hCisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRh YmxlcyB8IERETCB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZp YSByb290IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tKy0t LS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KKyByZWdy ZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgZiAgIHwgdCAgICAgICB8IHQgICAg ICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgogVGFibGVzIGZyb20gc2NoZW1hczoKICAgICAi cHViX3Rlc3QxIgogICAgICJwdWJfdGVzdDIiCkBAIC0xNDI3LDEwICsxNDI3LDEwIEBAIFRhYmxl cyBmcm9tIHNjaGVtYXM6CiAtLSBhbHRlciBwdWJsaWNhdGlvbiBkcm9wIHNjaGVtYQogQUxURVIg UFVCTElDQVRJT04gdGVzdHB1YjFfZm9yc2NoZW1hIERST1AgVEFCTEVTIElOIFNDSEVNQSBwdWJf dGVzdDI7CiBcZFJwKyB0ZXN0cHViMV9mb3JzY2hlbWEKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViMV9mb3JzY2hlbWEKLSAgICAgICAgICBPd25lciAg ICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1 bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0t LS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQot IHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAg ICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgUHVibGljYXRpb24gdGVzdHB1YjFfZm9yc2NoZW1hCisgICAgICAgICAgT3duZXIgICAg ICAgICAgIHwgQWxsIHRhYmxlcyB8IERETCB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8 IFRydW5jYXRlcyB8IFZpYSByb290IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0t LS0tLS0tKy0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0t LS0tLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgZiAgIHwg dCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgogVGFibGVzIGZyb20g c2NoZW1hczoKICAgICAicHViX3Rlc3QxIgogCkBAIC0xNDM4LDEwICsxNDM4LDEwIEBAIFRhYmxl cyBmcm9tIHNjaGVtYXM6CiBBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViMV9mb3JzY2hlbWEgRFJP UCBUQUJMRVMgSU4gU0NIRU1BIHB1Yl90ZXN0MjsKIEVSUk9SOiAgdGFibGVzIGZyb20gc2NoZW1h ICJwdWJfdGVzdDIiIGFyZSBub3QgcGFydCBvZiB0aGUgcHVibGljYXRpb24KIFxkUnArIHRlc3Rw dWIxX2ZvcnNjaGVtYQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9u IHRlc3RwdWIxX2ZvcnNjaGVtYQotICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJs ZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAK LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0t LS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlv bl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAg ICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0 ZXN0cHViMV9mb3JzY2hlbWEKKyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVz IHwgRERMIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJv b3QgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0rLS0tLS0t LS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQorIHJlZ3Jlc3Nf cHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCBmICAgfCB0ICAgICAgIHwgdCAgICAgICB8 IHQgICAgICAgfCB0ICAgICAgICAgfCBmCiBUYWJsZXMgZnJvbSBzY2hlbWFzOgogICAgICJwdWJf dGVzdDEiCiAKQEAgLTE0NDksMjkgKzE0NDksMjkgQEAgVGFibGVzIGZyb20gc2NoZW1hczoKIEFM VEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWIxX2ZvcnNjaGVtYSBEUk9QIFRBQkxFUyBJTiBTQ0hFTUEg bm9uX2V4aXN0ZW50X3NjaGVtYTsKIEVSUk9SOiAgc2NoZW1hICJub25fZXhpc3RlbnRfc2NoZW1h IiBkb2VzIG5vdCBleGlzdAogXGRScCsgdGVzdHB1YjFfZm9yc2NoZW1hCi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjFfZm9yc2NoZW1hCi0gICAgICAg ICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVs ZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0r LS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0t LS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAg ICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIxX2ZvcnNjaGVtYQorICAgICAgICAg IE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBEREwgfCBJbnNlcnRzIHwgVXBkYXRlcyB8 IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tKy0tLS0tLS0tLS0tLSstLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0t LS0tLS0tLSstLS0tLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAg ICB8IGYgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKIFRh YmxlcyBmcm9tIHNjaGVtYXM6CiAgICAgInB1Yl90ZXN0MSIKIAogLS0gZHJvcCBhbGwgc2NoZW1h cwogQUxURVIgUFVCTElDQVRJT04gdGVzdHB1YjFfZm9yc2NoZW1hIERST1AgVEFCTEVTIElOIFND SEVNQSBwdWJfdGVzdDE7CiBcZFJwKyB0ZXN0cHViMV9mb3JzY2hlbWEKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViMV9mb3JzY2hlbWEKLSAgICAgICAg ICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxl dGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSst LS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0t LS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAg IHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjFfZm9yc2NoZW1hCisgICAgICAgICAg T3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IERETCB8IEluc2VydHMgfCBVcGRhdGVzIHwg RGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0rLS0tLS0tLS0tLS0tKy0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0t LS0tLS0tKy0tLS0tLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAg IHwgZiAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgogKDEg cm93KQogCiAtLSBhbHRlciBwdWJsaWNhdGlvbiBzZXQgbXVsdGlwbGUgc2NoZW1hCiBBTFRFUiBQ VUJMSUNBVElPTiB0ZXN0cHViMV9mb3JzY2hlbWEgU0VUIFRBQkxFUyBJTiBTQ0hFTUEgcHViX3Rl c3QxLCBwdWJfdGVzdDI7CiBcZFJwKyB0ZXN0cHViMV9mb3JzY2hlbWEKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViMV9mb3JzY2hlbWEKLSAgICAgICAg ICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxl dGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSst LS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0t LS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAg IHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjFfZm9yc2NoZW1hCisgICAgICAgICAg T3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IERETCB8IEluc2VydHMgfCBVcGRhdGVzIHwg RGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0rLS0tLS0tLS0tLS0tKy0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0t LS0tLS0tKy0tLS0tLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAg IHwgZiAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgogVGFi bGVzIGZyb20gc2NoZW1hczoKICAgICAicHViX3Rlc3QxIgogICAgICJwdWJfdGVzdDIiCkBAIC0x NDgwLDEwICsxNDgwLDEwIEBAIFRhYmxlcyBmcm9tIHNjaGVtYXM6CiBBTFRFUiBQVUJMSUNBVElP TiB0ZXN0cHViMV9mb3JzY2hlbWEgU0VUIFRBQkxFUyBJTiBTQ0hFTUEgbm9uX2V4aXN0ZW50X3Nj aGVtYTsKIEVSUk9SOiAgc2NoZW1hICJub25fZXhpc3RlbnRfc2NoZW1hIiBkb2VzIG5vdCBleGlz dAogXGRScCsgdGVzdHB1YjFfZm9yc2NoZW1hCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgUHVibGljYXRpb24gdGVzdHB1YjFfZm9yc2NoZW1hCi0gICAgICAgICAgT3duZXIgICAgICAg ICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRl cyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0t LS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdy ZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0 ICAgICAgIHwgdCAgICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFB1YmxpY2F0aW9uIHRlc3RwdWIxX2ZvcnNjaGVtYQorICAgICAgICAgIE93bmVyICAgICAgICAg ICB8IEFsbCB0YWJsZXMgfCBEREwgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVu Y2F0ZXMgfCBWaWEgcm9vdCAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0t LSstLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0t LS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IGYgICB8IHQgICAg ICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKIFRhYmxlcyBmcm9tIHNjaGVt YXM6CiAgICAgInB1Yl90ZXN0MSIKICAgICAicHViX3Rlc3QyIgpAQCAtMTQ5MiwxMCArMTQ5Miwx MCBAQCBUYWJsZXMgZnJvbSBzY2hlbWFzOgogLS0gcmVtb3ZpbmcgdGhlIGR1cGxpY2F0ZSBzY2hl bWFzCiBBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViMV9mb3JzY2hlbWEgU0VUIFRBQkxFUyBJTiBT Q0hFTUEgcHViX3Rlc3QxLCBwdWJfdGVzdDE7CiBcZFJwKyB0ZXN0cHViMV9mb3JzY2hlbWEKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViMV9mb3JzY2hl bWEKLSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVw ZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0t LS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAg ICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjFfZm9yc2NoZW1h CisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IERETCB8IEluc2VydHMg fCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAorLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0t LS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIg fCBmICAgICAgICAgIHwgZiAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAg ICAgIHwgZgogVGFibGVzIGZyb20gc2NoZW1hczoKICAgICAicHViX3Rlc3QxIgogCkBAIC0xNTc0 LDE4ICsxNTc0LDE4IEBAIFNFVCBjbGllbnRfbWluX21lc3NhZ2VzID0gJ0VSUk9SJzsKIENSRUFU RSBQVUJMSUNBVElPTiB0ZXN0cHViM19mb3JzY2hlbWE7CiBSRVNFVCBjbGllbnRfbWluX21lc3Nh Z2VzOwogXGRScCsgdGVzdHB1YjNfZm9yc2NoZW1hCi0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgUHVibGljYXRpb24gdGVzdHB1YjNfZm9yc2NoZW1hCi0gICAgICAgICAgT3duZXIgICAg ICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5j YXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0t Ky0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSBy ZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAg fCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIzX2ZvcnNjaGVtYQorICAgICAgICAgIE93bmVyICAgICAg ICAgICB8IEFsbCB0YWJsZXMgfCBEREwgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBU cnVuY2F0ZXMgfCBWaWEgcm9vdCAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0t LS0tLSstLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0t LS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IGYgICB8IHQg ICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKICgxIHJvdykKIAogQUxU RVIgUFVCTElDQVRJT04gdGVzdHB1YjNfZm9yc2NoZW1hIFNFVCBUQUJMRVMgSU4gU0NIRU1BIHB1 Yl90ZXN0MTsKIFxkUnArIHRlc3RwdWIzX2ZvcnNjaGVtYQotICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIzX2ZvcnNjaGVtYQotICAgICAgICAgIE93bmVy ICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBU cnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0t LS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0t Ci0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAg ICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViM19mb3JzY2hlbWEKKyAgICAgICAgICBPd25lciAg ICAgICAgICAgfCBBbGwgdGFibGVzIHwgRERMIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVz IHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0t LS0tLS0tLS0rLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0r LS0tLS0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCBmICAg fCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmCiBUYWJsZXMgZnJv bSBzY2hlbWFzOgogICAgICJwdWJfdGVzdDEiCiAKQEAgLTE1OTUsMjAgKzE1OTUsMjAgQEAgQ1JF QVRFIFBVQkxJQ0FUSU9OIHRlc3RwdWJfZm9yc2NoZW1hX2ZvcnRhYmxlIEZPUiBUQUJMRVMgSU4g U0NIRU1BIHB1Yl90ZXN0MSwgVEEKIENSRUFURSBQVUJMSUNBVElPTiB0ZXN0cHViX2ZvcnRhYmxl X2ZvcnNjaGVtYSBGT1IgVEFCTEUgcHViX3Rlc3QyLnRibDEsIFRBQkxFUyBJTiBTQ0hFTUEgcHVi X3Rlc3QxOwogUkVTRVQgY2xpZW50X21pbl9tZXNzYWdlczsKIFxkUnArIHRlc3RwdWJfZm9yc2No ZW1hX2ZvcnRhYmxlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0 cHViX2ZvcnNjaGVtYV9mb3J0YWJsZQotICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0 YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9v dCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0t LS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNh dGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQg ICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRl c3RwdWJfZm9yc2NoZW1hX2ZvcnRhYmxlCisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxs IHRhYmxlcyB8IERETCB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8 IFZpYSByb290IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0t Ky0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KKyBy ZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgZiAgIHwgdCAgICAgICB8IHQg ICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgogVGFibGVzOgogICAgICJwdWJfdGVzdDIu dGJsMSIKIFRhYmxlcyBmcm9tIHNjaGVtYXM6CiAgICAgInB1Yl90ZXN0MSIKIAogXGRScCsgdGVz dHB1Yl9mb3J0YWJsZV9mb3JzY2hlbWEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1Ymxp Y2F0aW9uIHRlc3RwdWJfZm9ydGFibGVfZm9yc2NoZW1hCi0gICAgICAgICAgT3duZXIgICAgICAg ICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRl cyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0t LS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdy ZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0 ICAgICAgIHwgdCAgICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVi bGljYXRpb24gdGVzdHB1Yl9mb3J0YWJsZV9mb3JzY2hlbWEKKyAgICAgICAgICBPd25lciAgICAg ICAgICAgfCBBbGwgdGFibGVzIHwgRERMIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwg VHJ1bmNhdGVzIHwgVmlhIHJvb3QgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0t LS0tLS0rLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0t LS0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCBmICAgfCB0 ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmCiBUYWJsZXM6CiAgICAg InB1Yl90ZXN0Mi50YmwxIgogVGFibGVzIGZyb20gc2NoZW1hczoKZGlmZiAtLWdpdCBhL3NyYy90 ZXN0L3N1YnNjcmlwdGlvbi90LzAzMl9kZGxfcmVwbGljYXRpb24ucGwgYi9zcmMvdGVzdC9zdWJz Y3JpcHRpb24vdC8wMzJfZGRsX3JlcGxpY2F0aW9uLnBsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu ZGV4IDAwMDAwMDAwMDAuLjY2ZGNiMDEyYTYKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9z dWJzY3JpcHRpb24vdC8wMzJfZGRsX3JlcGxpY2F0aW9uLnBsCkBAIC0wLDAgKzEsNDY1IEBACisj IENvcHlyaWdodCAoYykgMjAyMiwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAK KyMgUmVncmVzc2lvbiB0ZXN0cyBmb3IgbG9naWNhbCByZXBsaWNhdGlvbiBvZiBERExzCisjCit1 c2Ugc3RyaWN0OwordXNlIHdhcm5pbmdzOwordXNlIFBvc3RncmVTUUw6OlRlc3Q6OkNsdXN0ZXI7 Cit1c2UgUG9zdGdyZVNRTDo6VGVzdDo6VXRpbHM7Cit1c2UgVGVzdDo6TW9yZTsKKworbXkgJG5v ZGVfcHVibGlzaGVyID0gUG9zdGdyZVNRTDo6VGVzdDo6Q2x1c3Rlci0+bmV3KCdwdWJsaXNoZXIn KTsKKyRub2RlX3B1Ymxpc2hlci0+aW5pdChhbGxvd3Nfc3RyZWFtaW5nID0+ICdsb2dpY2FsJyk7 Ciskbm9kZV9wdWJsaXNoZXItPnN0YXJ0OworCitteSAkbm9kZV9zdWJzY3JpYmVyID0gUG9zdGdy ZVNRTDo6VGVzdDo6Q2x1c3Rlci0+bmV3KCdzdWJzY3JpYmVyJyk7Ciskbm9kZV9zdWJzY3JpYmVy LT5pbml0KGFsbG93c19zdHJlYW1pbmcgPT4gJ2xvZ2ljYWwnKTsKKyRub2RlX3N1YnNjcmliZXIt PnN0YXJ0OworCitteSAkZGRsID0gIkNSRUFURSBUQUJMRSB0ZXN0X3JlcChpZCBpbnQgcHJpbWFy eSBrZXksIG5hbWUgdmFyY2hhciwgdmFsdWUgaW50ZWdlcik7IjsKKyRub2RlX3B1Ymxpc2hlci0+ c2FmZV9wc3FsKCdwb3N0Z3JlcycsICRkZGwpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwo J3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIHRlc3RfcmVwIFZBTFVFUyAoMSwgJ2RhdGExJywgMSk7 Iik7Ciskbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgJGRkbCk7CisKK215 ICRwdWJsaXNoZXJfY29ubnN0ciA9ICRub2RlX3B1Ymxpc2hlci0+Y29ubnN0ciAuICcgZGJuYW1l PXBvc3RncmVzJzsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJIkNS RUFURSBQVUJMSUNBVElPTiBteXB1YiBGT1IgQUxMIFRBQkxFUyB3aXRoIChwdWJsaXNoID0gJ2lu c2VydCwgdXBkYXRlLCBkZWxldGUsIGRkbCcpOyIpOworJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9w c3FsKCdwb3N0Z3JlcycsCisJIkNSRUFURSBTVUJTQ1JJUFRJT04gbXlzdWIgQ09OTkVDVElPTiAn JHB1Ymxpc2hlcl9jb25uc3RyJyBQVUJMSUNBVElPTiBteXB1YjsiKTsKKyRub2RlX3B1Ymxpc2hl ci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKworIyBNYWtlIHN1cmUgd2UgaGF2ZSBmdWxs eSBzeW5jaHJvbml6ZWQgdGhlIHRhYmxlLgorIyBUaGlzIHByZXZlbnRzIEFMVEVSIFRBQkxFIGNv bW1hbmQgYmVsb3cgZnJvbSBiZWluZyBleGVjdXRlZCBkdXJpbmcgdGFibGUgc3luY2hyb25pemF0 aW9uLgorJG5vZGVfc3Vic2NyaWJlci0+cG9sbF9xdWVyeV91bnRpbCgncG9zdGdyZXMnLAorICAg IlNFTEVDVCBDT1VOVCgxKSA9IDAgRlJPTSBwZ19zdWJzY3JpcHRpb25fcmVsIHNyIFdIRVJFIHNy LnNyc3Vic3RhdGUgTk9UIElOICgncycsICdyJykgQU5EIHNyLnNycmVsaWQgPSAndGVzdF9yZXAn OjpyZWdjbGFzcyIKKyk7CisKKyMgVGVzdCBBTFRFUiBUQUJMRSBBREQKKyRub2RlX3B1Ymxpc2hl ci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJBTFRFUiBUQUJMRSB0ZXN0X3JlcCBBREQgYzQgaW50 OyIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJTlRP IHRlc3RfcmVwIFZBTFVFUyAoMiwgJ2RhdGEyJywgMiwgMik7Iik7Ciskbm9kZV9wdWJsaXNoZXIt PndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7CitteSAkcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJl ci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgY291bnQoKikgRlJPTSB0ZXN0X3JlcCBX SEVSRSBjNCA9IDI7Iik7CitpcygkcmVzdWx0LCBxcSgxKSwgJ0FMVEVSIHRlc3RfcmVwIEFERCBy ZXBsaWNhdGVkJyk7CisKKyMgVGVzdCBBTFRFUiBUQUJMRSBEUk9QCiskbm9kZV9wdWJsaXNoZXIt PnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiQUxURVIgVEFCTEUgdGVzdF9yZXAgRFJPUCBjNDsiKTsK KyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJERUxFVEUgRlJPTSB0ZXN0 X3JlcCB3aGVyZSBpZCA9IDI7Iik7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAo J215c3ViJyk7CiskcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3Jl cycsICJTRUxFQ1QgY291bnQoKikgZnJvbSB0ZXN0X3JlcDsiKTsKK2lzKCRyZXN1bHQsIHFxKDEp LCAnQUxURVIgdGVzdF9yZXAgRFJPUCByZXBsaWNhdGVkJyk7CisKKyMgVGVzdCBBTFRFUiBUQUJM RSBBTFRFUiBUWVBFCiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiQUxU RVIgVEFCTEUgdGVzdF9yZXAgQUxURVIgdmFsdWUgVFlQRSB2YXJjaGFyIik7Ciskbm9kZV9wdWJs aXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiSU5TRVJUIElOVE8gdGVzdF9yZXAgVkFMVUVT ICgzLCAnZGF0YTMnLCAnMycpOyIpOworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVw KCdteXN1YicpOworJHJlc3VsdCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdy ZXMnLCAiU0VMRUNUIGNvdW50KCopIEZST00gdGVzdF9yZXAgV0hFUkUgdmFsdWUgPSAnMyc7Iik7 CitpcygkcmVzdWx0LCBxcSgxKSwgJ0FMVEVSIHRlc3RfcmVwIEFMVEVSIENPTFVNTiBUWVBFIHJl cGxpY2F0ZWQnKTsKKworIyBUZXN0IEFMVEVSIFRBQkxFIEFMVEVSIFNFVCBERUZBVUxUCisjIENo ZWNrIGlmIHdlIGhhdmUgdGhlIGRlZmF1bHQgdmFsdWUgYWZ0ZXIgdGhlIGRpcmVjdCBpbnNlcnQg dG8gc3Vic2NyaWJlciBub2RlLgorJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVz JywgIkFMVEVSIFRBQkxFIHRlc3RfcmVwIEFMVEVSIENPTFVNTiB2YWx1ZSBTRVQgREVGQVVMVCAn Zm9vJyIpOworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdteXN1YicpOworJG5v ZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyB0ZXN0X3Jl cCBWQUxVRVMgKDQsICdkYXRhNCcpOyIpOworJHJlc3VsdCA9ICRub2RlX3N1YnNjcmliZXItPnNh ZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUIHZhbHVlIEZST00gdGVzdF9yZXAgV0hFUkUgaWQg PSA0OyIpOworaXMoJHJlc3VsdCwgJ2ZvbycsICdBTFRFUiB0ZXN0X3JlcCBBTFRFUiBTRVQgREVG QVVMVCByZXBsaWNhdGVkJyk7CisKKyMgVGVzdCBBTFRFUiBUQUJMRSBBTFRFUiBEUk9QIERFRkFV TFQKKyMgQ2hlY2sgaWYgd2UgZG9uJ3QgaGF2ZSB0aGUgZGVmYXVsdCB2YWx1ZSBwcmV2aW91c2x5 IGRlZmluZWQuCiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiQUxURVIg VEFCTEUgdGVzdF9yZXAgQUxURVIgQ09MVU1OIHZhbHVlIERST1AgREVGQVVMVDsiKTsKKyRub2Rl X3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKyRub2RlX3N1YnNjcmliZXIt PnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiSU5TRVJUIElOVE8gdGVzdF9yZXAgVkFMVUVTICg1LCAn ZGF0YTUnKTsiKTsKKyRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3Rn cmVzJywgIlNFTEVDVCB2YWx1ZSBJUyBOVUxMIEZST00gdGVzdF9yZXAgV0hFUkUgaWQgPSA1OyIp OworaXMoJHJlc3VsdCwgcSh0KSwgJ0FMVEVSIHRlc3RfcmVwIEFMVEVSIERST1AgREVGQVVMVCBy ZXBsaWNhdGVkJyk7CisKKyMgVGVzdCBBTFRFUiBUQUJMRSBBTFRFUiBTRVQgTk9UIE5VTEwKKyMg UmVtb3ZlIHRoZSBleGlzdGluZyByZWNvcmQgdGhhdCBjb250YWlucyBudWxsIHZhbHVlIGZpcnN0 LgorbXkgKCRzdGRvdXQsICRzdGRlcnIpOworJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdw b3N0Z3JlcycsICJERUxFVEUgRlJPTSB0ZXN0X3JlcCBXSEVSRSBpZCA9IDU7Iik7Ciskbm9kZV9w dWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiQUxURVIgVEFCTEUgdGVzdF9yZXAgQUxU RVIgdmFsdWUgU0VUIE5PVCBOVUxMOyIpOworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRj aHVwKCdteXN1YicpOworJG5vZGVfc3Vic2NyaWJlci0+cHNxbCgncG9zdGdyZXMnLCAiSU5TRVJU IElOVE8gdGVzdF9yZXAgVkFMVUVTICg2LCAnZGF0YTYnKTsiLAorCQkJCQkgICBvbl9lcnJvcl9z dG9wID0+IDAsCisJCQkJCSAgIHN0ZGVyciA9PiBcJHN0ZGVyciwKKwkJCQkJICAgc3Rkb3V0ID0+ IFwkc3Rkb3V0KTsKKyRzdGRlcnIgPX4gL0VSUk9SOiAgbnVsbCB2YWx1ZSBpbiBjb2x1bW4gXCJ2 YWx1ZVwiIG9mIHJlbGF0aW9uIFwidGVzdF9yZXBcIiB2aW9sYXRlcyBub3QtbnVsbCBjb25zdHJh aW50LworICBvciBkaWUgImZhaWxlZCB0byByZXBsaWNhdGUgQUxURVIgVEFCTEUgQUxURVIgU0VU IE5PVCBOVUxMIjsKKworIyBUZXN0IEFMVEVSIFRBQkxFIEFMVEVSIERST1AgTk9UIE5VTEwKKyRu b2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJBTFRFUiBUQUJMRSB0ZXN0X3Jl cCBBTFRFUiB2YWx1ZSBEUk9QIE5PVCBOVUxMOyIpOworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zv cl9jYXRjaHVwKCdteXN1YicpOworIyBJbnNlcnQgc2FtZSBkYXRhIHRoYXQgaGFzIE5VTEwgdmFs dWUuIFRoaXMgZmFpbGVkIGJlZm9yZSBidXQgbm93IHNob3VsZCBzdWNjZWVkLgorJG5vZGVfc3Vi c2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyB0ZXN0X3JlcCBWQUxV RVMgKDYsICdkYXRhNicpOyIpOworJHJlc3VsdCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNx bCgncG9zdGdyZXMnLCAiU0VMRUNUIHZhbHVlIElTIE5VTEwgRlJPTSB0ZXN0X3JlcCBXSEVSRSBp ZCA9IDY7Iik7CitpcygkcmVzdWx0LCBxKHQpLCAiQUxURVIgdGVzdF9yZXAgQUxURVIgRFJPUCBO T1QgTlVMTCByZXBsaWNhdGVkIik7CisKKyMgVGVzdCBBTFRFUiBUQUJMRSBTRVQgVU5MT0dHRUQK KyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICdBTFRFUiBUQUJMRSB0ZXN0 X3JlcCBTRVQgVU5MT0dHRUQ7Jyk7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAo J215c3ViJyk7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiSU5TRVJU IElOVE8gdGVzdF9yZXAgVkFMVUVTICg3LCAnZGF0YTcnLCAnNycpOyIpOworJG5vZGVfcHVibGlz aGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdteXN1YicpOworJHJlc3VsdCA9ICRub2RlX3N1YnNjcmli ZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUIGNvdW50KCopIEZST00gdGVzdF9yZXAg V0hFUkUgaWQgPSA3OyIpOworaXMoJHJlc3VsdCwgcXEoMCksICdBTFRFUiB0ZXN0X3JlcCBTRVQg VU5MT0dHRUQgcmVwbGljYXRlZCcpOworCisjIFRlc3QgQUxURVIgVEFCTEUgU0VUIExPR0dFRAor JG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgJ0FMVEVSIFRBQkxFIHRlc3Rf cmVwIFNFVCBMT0dHRUQ7Jyk7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215 c3ViJyk7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiSU5TRVJUIElO VE8gdGVzdF9yZXAgVkFMVUVTICg4LCAnZGF0YTgnLCAnOCcpOyIpOworJG5vZGVfcHVibGlzaGVy LT53YWl0X2Zvcl9jYXRjaHVwKCdteXN1YicpOworJHJlc3VsdCA9ICRub2RlX3N1YnNjcmliZXIt PnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUIGNvdW50KCopIEZST00gdGVzdF9yZXAgV0hF UkUgaWQgPSA4OyIpOworaXMoJHJlc3VsdCwgcXEoMSksICdBTFRFUiB0ZXN0X3JlcCBTRVQgTE9H R0VEIHJlcGxpY2F0ZWQnKTsKKworIyBUZXN0IENSRUFURSBUQUJMRSBhbmQgRE1MIGNoYW5nZXMK KyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJDUkVBVEUgVEFCTEUgdG1w IChhIGludCwgYiB2YXJjaGFyKTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1 cCgnbXlzdWInKTsKKyRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3Rn cmVzJywgIlNFTEVDVCBjb3VudCgqKSBmcm9tIHBnX3RhYmxlcyB3aGVyZSB0YWJsZW5hbWUgPSAn dG1wJzsiKTsKK2lzKCRyZXN1bHQsIHFxKDEpLCAnQ1JFQVRFIHRtcCBpcyByZXBsaWNhdGVkJyk7 Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiSU5TRVJUIElOVE8gdG1w IHZhbHVlcyAoMSwgJ2EnKSIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVz JywgIklOU0VSVCBJTlRPIHRtcCB2YWx1ZXMgKDIsICdiJykiKTsKKyRub2RlX3B1Ymxpc2hlci0+ d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKyRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5z YWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCBjb3VudCgqKSBmcm9tIHRtcDsiKTsKK2lzKCRy ZXN1bHQsIHFxKDIpLCAnRE1MIENoYW5nZXMgdG8gdG1wIGFyZSByZXBsaWNhdGVkJyk7CisKKyMg VGVzdCBDUkVBVEUgVEFCTEUgSU5IRVJJVFMKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdw b3N0Z3JlcycsICJDUkVBVEUgVEFCTEUgdG1wMiAoYzMgaW50KSBJTkhFUklUUyAodG1wKTsiKTsK KyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyB0bXAy IFZBTFVFUyAoMSwgJ2EnLCAxKTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1 cCgnbXlzdWInKTsKKyRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3Rn cmVzJywgIlNFTEVDVCBjb3VudCgqKSBmcm9tIHBnX3RhYmxlcyB3aGVyZSB0YWJsZW5hbWUgPSAn dG1wMic7Iik7CitpcygkcmVzdWx0LCBxcSgxKSwgJ0NSRUFURSBUQUJMRSBJTkhFUklUUyBpcyBy ZXBsaWNhdGVkJyk7CiskcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0 Z3JlcycsICJTRUxFQ1QgY291bnQoKikgZnJvbSB0bXAyOyIpOworaXMoJHJlc3VsdCwgcXEoMSks ICdpbnNlcnRpbmcgc29tZSBkYXRhIHRvIGluaGVyaXRlZCB0YWJsZSByZXBsaWNhdGVkJyk7Cisk bm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiRFJPUCBUQUJMRSB0bXAyIik7 CisKKyMgVGVzdCBDUkVBVEUgVEFCTEUgTElLRQorJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwo J3Bvc3RncmVzJywgIkNSRUFURSBUQUJMRSB0bXAzIChjMyBpbnQsIExJS0UgdG1wKTsiKTsKKyRu b2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyB0bXAzIFZB TFVFUyAoMSwgMSwgJ2EnKTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgn bXlzdWInKTsKKyRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVz JywgIlNFTEVDVCBjb3VudCgqKSBmcm9tIHBnX3RhYmxlcyB3aGVyZSB0YWJsZW5hbWUgPSAndG1w Myc7Iik7CitpcygkcmVzdWx0LCBxcSgxKSwgJ0NSRUFURSBUQUJMRSBMSUtFIHJlcGxpY2F0ZWQn KTsKKyRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNF TEVDVCBjb3VudCgqKSBmcm9tIHRtcDM7Iik7CitpcygkcmVzdWx0LCBxcSgxKSwgJ2luc2VydCBz b21lIGRhdGEgdG8gYSB0YWJsZSBkZWZpbmVkIHdpdGggTElLRSByZXBsaWNhdGVkJyk7Ciskbm9k ZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiRFJPUCBUQUJMRSB0bXAzIik7CisK KyMgVGVzdCBEUk9QIFRBQkxFCiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMn LCAiRFJPUCBUQUJMRSB0bXA7Iik7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAo J215c3ViJyk7CiskcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3Jl cycsICJTRUxFQ1QgY291bnQoKikgZnJvbSBwZ190YWJsZXMgd2hlcmUgdGFibGVuYW1lID0gJ3Rt cCc7Iik7CitpcygkcmVzdWx0LCBxcSgwKSwgJ1RBQkxFIHRtcCBpcyBkcm9wcGVkJyk7CisKKyMg VGVzdCBDUkVBVEUgVU5MT0dHRUQgVEFCTEUKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdw b3N0Z3JlcycsICJDUkVBVEUgVU5MT0dHRUQgVEFCTEUgdG1wIChpZCBpbnQpOyIpOworJG5vZGVf cHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIHRtcCBWQUxVRVMg KDEpOyIpOworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdteXN1YicpOworJHJl c3VsdCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUIGNv dW50KCopIGZyb20gcGdfdGFibGVzIHdoZXJlIHRhYmxlbmFtZSA9ICd0bXAnOyIpOworaXMoJHJl c3VsdCwgcXEoMSksICdDUkVBVEUgVU5MT0dHRUQgVEFCTEUgaXMgcmVwbGljYXRlZCBjb3JyZWN0 bHknKTsKKyRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywg IlNFTEVDVCBjb3VudCgqKSBmcm9tIHRtcDsiKTsKK2lzKCRyZXN1bHQsIHFxKDApLCAnaW5zZXJ0 aW5nIGRhdGEgdG8gdW5sb2dnZWQgdGFibGUgaXMgbm90IHJlcGxpY2F0ZWQgY29ycmVjdGx5Jyk7 Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiRFJPUCBUQUJMRSB0bXAi KTsKKworIyBUZXN0IENSRUFURSBUQUJMRSBJRiBOT1QgRVhJU1RTCiskbm9kZV9wdWJsaXNoZXIt PnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiQ1JFQVRFIFRBQkxFIElGIE5PVCBFWElTVFMgdG1wIChp ZCBpbnQpOyIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIklOU0VS VCBJTlRPIHRtcCBWQUxVRVMgKDEpOyIpOworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRj aHVwKCdteXN1YicpOworJHJlc3VsdCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9z dGdyZXMnLCAiU0VMRUNUIGNvdW50KCopIGZyb20gcGdfdGFibGVzIHdoZXJlIHRhYmxlbmFtZSA9 ICd0bXAnOyIpOworaXMoJHJlc3VsdCwgcXEoMSksICdDUkVBVEUgVEFCTEUgSUYgTk9UIEVYSVNU UyByZXBsaWNhdGVkJyk7CiskcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdw b3N0Z3JlcycsICJTRUxFQ1QgY291bnQoKikgZnJvbSB0bXA7Iik7CitpcygkcmVzdWx0LCBxcSgx KSwgJ2luc2VydGluZyBkYXRhIHRvIGEgdGFibGUgcmVwbGljYXRlZCcpOworJG5vZGVfcHVibGlz aGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkRST1AgVEFCTEUgdG1wIik7CisKKyMgVGVzdCBD UkVBVEUgVEFCTEUgSUYgTk9UIEVYSVNUUyAoY2hlY2sgaWYgd2Ugc2tpcCB0byBjcmVhdGUgYSB0 YWJsZQorIyB3aGVuIHdlIGhhdmUgdGhlIHRhYmxlIG9uIHRoZSBzdWJzY3JpYmVyIGluIGFkdmFu Y2UsIGFuZCBpZiB3ZSBzdWNjZWVkCisjIGluIHJlcGxpY2F0aW5nIGNoYW5nZXMuKQorJG5vZGVf c3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJDUkVBVEUgVEFCTEUgdG1wIChpZCBp bnQpOyIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkNSRUFURSBU QUJMRSBJRiBOT1QgRVhJU1RTIHRtcCAoaWQgaW50KTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+c2Fm ZV9wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyB0bXAgVkFMVUVTICgxKTsiKTsKKyRub2Rl X3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKyRyZXN1bHQgPSAkbm9kZV9z dWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCBjb3VudCgqKSBmcm9tIHRt cDsiKTsKK2lzKCRyZXN1bHQsIHFxKDEpLCAnQ1JFQVRFIFRBQkxFIElGIE5PVCBFWElTVFMgcmVw bGljYXRlZCcpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkRST1Ag VEFCTEUgdG1wIik7CisKKyMgVGVzdCBDUkVBVEUgVEFCTEUgSUYgTk9UIEVYSVNUUyAoY2hlY2sg aWYgd2Ugc2tpcCB0byBjcmVhdGUgYSB0YWJsZQorIyB3aGVuIHdlIGhhdmUgdGhlIHRhYmxlIG9u IHRoZSBwdWJsaXNoZXIsIGJ1dCBub3Qgb24gdGhlIHN1YnNjcmliZXIuKQorJG5vZGVfcHVibGlz aGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkNSRUFURSBUQUJMRSB0bXAgKGlkIGludCk7Iik7 Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiQ1JFQVRFIFRBQkxFIElG IE5PVCBFWElTVFMgdG1wIChpZCBpbnQpOyIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwo J3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIHRtcCBWQUxVRVMgKDEpOyIpOworJG5vZGVfcHVibGlz aGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdteXN1YicpOworJHJlc3VsdCA9ICRub2RlX3N1YnNjcmli ZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUIGNvdW50KCopIGZyb20gdG1wOyIpOwor aXMoJHJlc3VsdCwgcXEoMSksICdDUkVBVEUgVEFCTEUgSUYgTk9UIEVYSVNUUyByZXBsaWNhdGVk Jyk7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiRFJPUCBUQUJMRSB0 bXAiKTsKKworIyBUZXN0IENSRUFURSBUQUJMRSB3aXRoIGNvbGxhdGUKKyRub2RlX3B1Ymxpc2hl ci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJDUkVBVEUgVEFCTEUgdG1wIChuYW1lIHRleHQgQ09M TEFURSBcIkNcIik7Iik7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAi SU5TRVJUIElOVE8gdG1wIFZBTFVFUyAoJ2ZvbycpOyIpOworJG5vZGVfcHVibGlzaGVyLT53YWl0 X2Zvcl9jYXRjaHVwKCdteXN1YicpOworJHJlc3VsdCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVf cHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUIGNvbGxhdGlvbl9uYW1lIEZST00gaW5mb3JtYXRpb25f c2NoZW1hLmNvbHVtbnMgV0hFUkUgdGFibGVfbmFtZSA9ICd0bXAnOyIpOworaXMoJHJlc3VsdCwg cXEoQyksICdDUkVBVEUgVEFCTEUgd2l0aCBjb2xsYXRlIHJlcGxpY2F0ZWQnKTsKKyRub2RlX3B1 Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJEUk9QIFRBQkxFIHRtcCIpOworCisjIFRl c3QgQ1JFQVRFIFRBQkxFIHdpdGggbmFtZWQgY29uc3RyYWludAorJG5vZGVfcHVibGlzaGVyLT5z YWZlX3BzcWwoJ3Bvc3RncmVzJywgIkNSRUFURSBUQUJMRSB0bXAgKGlkIGludCBDT05TVFJBSU5U IFwibXVzdCBiZSBiaWdnZXIgdGhhbiAxMFwiIENIRUNLIChpZCA+IDEwKSk7Iik7Ciskbm9kZV9w dWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7Ciskbm9kZV9zdWJzY3JpYmVyLT5w c3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyB0bXAgVkFMVUVTICgxKTsiLAorCQkJCQkgICBv bl9lcnJvcl9zdG9wID0+IDAsCisJCQkJCSAgIHN0ZGVyciA9PiBcJHN0ZGVyciwKKwkJCQkJICAg c3Rkb3V0ID0+IFwkc3Rkb3V0KTsKKyRzdGRlcnIgPX4gL0VSUk9SOiAgbmV3IHJvdyBmb3IgcmVs YXRpb24gInRtcCIgdmlvbGF0ZXMgY2hlY2sgY29uc3RyYWludCAibXVzdCBiZSBiaWdnZXIgdGhh biAxMCIvCisgIG9yIGRpZSAiZmFpbGVkIHRvIHJlcGxpY2F0ZSBuYW1lZCBjb25zdHJhaW50IGF0 IGNyZWF0aW5nIHRhYmxlIjsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3Jlcycs ICJEUk9QIFRBQkxFIHRtcDsiKTsKKworIyBUZXN0IENSRUFURSBUQUJMRSB3aXRoIHZhcmlvdXMg dHlwZXMgb2YgY29uc3RyYWludHMuCisjIE5PVCBOVUxMIGNvbnN0cmFpbnQKKyRub2RlX3B1Ymxp c2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJDUkVBVEUgVEFCTEUgdG1wIChpZCBpbnQsIG5h bWUgdGV4dCBOT1QgTlVMTCk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAo J215c3ViJyk7Ciskbm9kZV9zdWJzY3JpYmVyLT5wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5U TyB0bXAgVkFMVUVTICgxKTsiLAorCQkJCQkgICBvbl9lcnJvcl9zdG9wID0+IDAsCisJCQkJCSAg IHN0ZGVyciA9PiBcJHN0ZGVyciwKKwkJCQkJICAgc3Rkb3V0ID0+IFwkc3Rkb3V0KTsKKyRzdGRl cnIgPX4gL0VSUk9SOiAgbnVsbCB2YWx1ZSBpbiBjb2x1bW4gIm5hbWUiIG9mIHJlbGF0aW9uICJ0 bXAiIHZpb2xhdGVzIG5vdC1udWxsIGNvbnN0cmFpbnQvCisgIG9yIGRpZSAiZmFpbGVkIHRvIHJl cGxpY2F0ZSBub24gbnVsbCBjb25zdHJhaW50IGF0IGNyZWF0aW5nIHRhYmxlIjsKKyRub2RlX3B1 Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJEUk9QIFRBQkxFIHRtcDsiKTsKKworIyBO VUxMIGNvbnN0cmFpbnQKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJD UkVBVEUgVEFCTEUgdG1wIChpZCBpbnQsIG5hbWUgdGV4dCBOVUxMKTsiKTsKKyRub2RlX3B1Ymxp c2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKyRub2RlX3N1YnNjcmliZXItPnNhZmVf cHNxbCgncG9zdGdyZXMnLCAiSU5TRVJUIElOVE8gdG1wIFZBTFVFUyAoMSk7Iik7CiskcmVzdWx0 ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgbmFtZSBJ UyBOVUxMIEZST00gdG1wOyIpOworaXMoJHJlc3VsdCwgcXEodCksICJDUkVBVEUgVEFCTEUgd2l0 aCBOVUxMIGNvbnN0cmFpbnQgcmVwbGljYXRlZCIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3Bz cWwoJ3Bvc3RncmVzJywgIkRST1AgVEFCTEUgdG1wIik7CisKKyMgQ0hFQ0sgY29uc3RyYWludAor JG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkNSRUFURSBUQUJMRSB0bXAg KGlkIGludCwgcHJvZHVjdF9hbWUgdGV4dCwgcHJpY2UgaW50IENIRUNLIChwcmljZSA+IDApKTsi KTsKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKyRub2RlX3N1 YnNjcmliZXItPnBzcWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIHRtcCBWQUxVRVMgKDEsICdm b28nLCAtMTAwKTsiLAorCQkJCQkgICBvbl9lcnJvcl9zdG9wID0+IDAsCisJCQkJCSAgIHN0ZGVy ciA9PiBcJHN0ZGVyciwKKwkJCQkJICAgc3Rkb3V0ID0+IFwkc3Rkb3V0KTsKKyRzdGRlcnIgPX4g L0VSUk9SOiAgbmV3IHJvdyBmb3IgcmVsYXRpb24gInRtcCIgdmlvbGF0ZXMgY2hlY2sgY29uc3Ry YWludCAidG1wX3ByaWNlX2NoZWNrIi8KKyAgb3IgZGllICJmYWlsZWQgdG8gcmVwbGljYXRlIENI RUNLIGNvbnN0cmFpbnQiOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywg IkRST1AgVEFCTEUgdG1wOyIpOworCisjIERFRkFVTFQKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9w c3FsKCdwb3N0Z3JlcycsICJDUkVBVEUgVEFCTEUgdG1wIChpZCBpbnQsIG5hbWUgdGV4dCBERUZB VUxUICdmb28nKTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWIn KTsKKyRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiSU5TRVJUIElOVE8g dG1wIFZBTFVFUyAoMSk7Iik7CiskcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3Fs KCdwb3N0Z3JlcycsICJTRUxFQ1QgbmFtZSBmcm9tIHRtcDsiKTsKK2lzKCRyZXN1bHQsIHFxKGZv byksICJDUkVBVEUgVEFCTEUgd2l0aCBkZWZhdWx0IHZhbHVlIHJlcGxpY2F0ZWQiKTsKKyRub2Rl X3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJEUk9QIFRBQkxFIHRtcCIpOworCisj IFVOSVFVRSBjb25zdHJhaW50Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMn LCAiQ1JFQVRFIFRBQkxFIHRtcCAoaWQgaW50IFVOSVFVRSk7Iik7Ciskbm9kZV9wdWJsaXNoZXIt PnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiSU5TRVJUIElOVE8gdG1wIFZBTFVFUyAoMSk7Iik7Cisk bm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7Ciskbm9kZV9zdWJzY3Jp YmVyLT5wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyB0bXAgVkFMVUVTICgxKTsiLAorCQkJ CQkgICBvbl9lcnJvcl9zdG9wID0+IDAsCisJCQkJCSAgIHN0ZGVyciA9PiBcJHN0ZGVyciwKKwkJ CQkJICAgc3Rkb3V0ID0+IFwkc3Rkb3V0KTsKKyRzdGRlcnIgPX4gL0VSUk9SOiAgZHVwbGljYXRl IGtleSB2YWx1ZSB2aW9sYXRlcyB1bmlxdWUgY29uc3RyYWludCAidG1wX2lkX2tleSIvCisgIG9y IGRpZSAiZmFpbGVkIHRvIHJlcGxpY2F0ZSBjb25zdHJhaW50IGF0IGNyZWF0aW5nIHRhYmxlIjsK KyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJEUk9QIFRBQkxFIHRtcDsi KTsKKworIyBQUklNQVJZIEtFWQorJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVz JywgIkNSRUFURSBUQUJMRSB0bXAgKGlkIGludCBQUklNQVJZIEtFWSwgbmFtZSB0ZXh0KTsiKTsK KyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyB0bXAg VkFMVUVTICgxLCAnZm9vJyk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAo J215c3ViJyk7Ciskbm9kZV9zdWJzY3JpYmVyLT5wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5U TyB0bXAgVkFMVUVTICgxLCAnYmFyJyk7IiwKKwkJCQkJICAgb25fZXJyb3Jfc3RvcCA9PiAwLAor CQkJCQkgICBzdGRlcnIgPT4gXCRzdGRlcnIsCisJCQkJCSAgIHN0ZG91dCA9PiBcJHN0ZG91dCk7 Ciskc3RkZXJyID1+IC9FUlJPUjogIGR1cGxpY2F0ZSBrZXkgdmFsdWUgdmlvbGF0ZXMgdW5pcXVl IGNvbnN0cmFpbnQgInRtcF9wa2V5Ii8KKyAgb3IgZGllICJmYWlsZWQgdG8gcmVwbGljYXRlIHBy aW1hcnkga2V5IGF0IGNyZWF0aW5nIHRhYmxlIjsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3Fs KCdwb3N0Z3JlcycsICJEUk9QIFRBQkxFIHRtcDsiKTsKKworIyBFWENMVURFCiskbm9kZV9wdWJs aXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiQ1JFQVRFIFRBQkxFIGNpcmNsZXMgKGMgY2ly Y2xlLCBFWENMVURFIFVTSU5HIGdpc3QgKGMgV0lUSCAmJikpOyIpOworJG5vZGVfcHVibGlzaGVy LT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIGNpcmNsZXMgVkFMVUVTICgnPCgx LCAxKSwgMT4nOjpjaXJjbGUpOyIpOworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVw KCdteXN1YicpOworJG5vZGVfc3Vic2NyaWJlci0+cHNxbCgncG9zdGdyZXMnLCAiSU5TRVJUIElO VE8gY2lyY2xlcyBWQUxVRVMgKCc8KDEsIDEpLCAxPic6OmNpcmNsZSk7IiwKKwkJCQkJICAgb25f ZXJyb3Jfc3RvcCA9PiAwLAorCQkJCQkgICBzdGRlcnIgPT4gXCRzdGRlcnIsCisJCQkJCSAgIHN0 ZG91dCA9PiBcJHN0ZG91dCk7Ciskc3RkZXJyID1+IC9FUlJPUjogIGNvbmZsaWN0aW5nIGtleSB2 YWx1ZSB2aW9sYXRlcyBleGNsdXNpb24gY29uc3RyYWludCAiY2lyY2xlc19jX2V4Y2wiLworICBv ciBkaWUgImZhaWxlZCB0byByZXBsaWNhdGUgRVhDTFVERSBhdCBjcmVhdGluZyB0YWJsZSI7Cisk bm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiRFJPUCBUQUJMRSBjaXJjbGVz Iik7CisKKyMgUkVGRVJFTkNFUworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVz JywgIkNSRUFURSBUQUJMRSBwcm9kdWN0IChpZCBpbnQgUFJJTUFSWSBLRVksIG5hbWUgdGV4dCk7 Iik7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiSU5TRVJUIElOVE8g cHJvZHVjdCBWQUxVRVMgKDEsICdmb28nKTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3Fs KCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyBwcm9kdWN0IFZBTFVFUyAoMiwgJ2JhcicpOyIpOwor JG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkNSRUFURSBUQUJMRSBvcmRl cnMgKG9yZGVyX2lkIGludCBQUklNQVJZIEtFWSwgcHJvZHVjdF9pZCBpbnQgUkVGRVJFTkNFUyBw cm9kdWN0IChpZCkpIik7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3Vi Jyk7Ciskbm9kZV9zdWJzY3JpYmVyLT5wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyBvcmRl cnMgVkFMVUVTICgxLCAxMCkiLAorCQkJCQkgICBvbl9lcnJvcl9zdG9wID0+IDAsCisJCQkJCSAg IHN0ZGVyciA9PiBcJHN0ZGVyciwKKwkJCQkJICAgc3Rkb3V0ID0+IFwkc3Rkb3V0KTsKKyRzdGRl cnIgPX4gL0VSUk9SOiAgaW5zZXJ0IG9yIHVwZGF0ZSBvbiB0YWJsZSAib3JkZXJzIiB2aW9sYXRl cyBmb3JlaWduIGtleSBjb25zdHJhaW50ICJvcmRlcnNfcHJvZHVjdF9pZF9ma2V5Ii8KKyAgb3Ig ZGllICJmYWlsZWQgdG8gcmVwbGljYXRlIFJFRkVSRU5DRVMgYXQgY3JlYXRpbmcgdGFibGUiOwor JG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkRST1AgVEFCTEUgb3JkZXJz Iik7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiRFJPUCBUQUJMRSBw cm9kdWN0Iik7CisKKyMgREVGRVJSQUJMRQorJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bv c3RncmVzJywgIkNSRUFURSBUQUJMRSB0bXAgKGlkIGludCBQUklNQVJZIEtFWSBERUZFUlJBQkxF LCBuYW1lIHRleHQpOyIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywg IklOU0VSVCBJTlRPIHRtcCBWQUxVRVMgKDEsICdmb28nKTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+ c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyB0bXAgVkFMVUVTICgyLCAnYmFyJyk7 Iik7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7CisjIFF1aWNr IGNoZWNrIG9mIGRlZmVycmFibGUgY2xhdXNlCiskbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwo J3Bvc3RncmVzJywgIlVQREFURSB0bXAgU0VUIGlkID0gaWQgKyAxOyIpOworIyBBbHNvLCBleGVj dXRlIGEgdGVzdCB0aGF0IHNob3VsZCBmYWlsIGZvciBJTklUSUFMTFkgSU1NRURJQVRFKHRoZSBk ZWZhdWx0KQorJG5vZGVfc3Vic2NyaWJlci0+cHNxbCgncG9zdGdyZXMnLCBxcSgKK0JFR0lOOwor VVBEQVRFIHRtcCBTRVQgaWQgPSBpZCArIDE7CitJTlNFUlQgSU5UTyB0bXAgVkFMVUVTICgzLCAn Zm9vYmFyJyk7CitERUxFVEUgRlJPTSB0bXAgV0hFUkUgaWQgPSAzOworQ09NTUlUOworKSwgb25f ZXJyb3Jfc3RvcCA9PiAwLCBzdGRlcnIgPT4gXCRzdGRlcnIsIHN0ZG91dCA9PiBcJHN0ZG91dCk7 Ciskc3RkZXJyID1+IC9FUlJPUjogIGR1cGxpY2F0ZSBrZXkgdmFsdWUgdmlvbGF0ZXMgdW5pcXVl IGNvbnN0cmFpbnQgInRtcF9wa2V5Ii8KKyAgb3IgZGllICJmYWlsZWQgdG8gcmVwbGljYXRlIERF RkVSUkFCTEUgYXQgY3JlYXRpbmcgdGFibGUiOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwo J3Bvc3RncmVzJywgIkRST1AgVEFCTEUgdG1wOyIpOworCisjIE5PVCBERUZFUlJBQkxFCiskbm9k ZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiQ1JFQVRFIFRBQkxFIHRtcCAoaWQg aW50IFBSSU1BUlkgS0VZIE5PVCBERUZFUlJBQkxFLCBuYW1lIHRleHQpOyIpOworJG5vZGVfcHVi bGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIHRtcCBWQUxVRVMgKDEs ICdmb28nKTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJJTlNF UlQgSU5UTyB0bXAgVkFMVUVTICgyLCAnYmFyJyk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRf Zm9yX2NhdGNodXAoJ215c3ViJyk7Ciskbm9kZV9zdWJzY3JpYmVyLT5wc3FsKCdwb3N0Z3Jlcycs ICJVUERBVEUgdG1wIFNFVCBpZCA9IGlkICsgMTsiLAorCQkJCQkgICBvbl9lcnJvcl9zdG9wID0+ IDAsCisJCQkJCSAgIHN0ZGVyciA9PiBcJHN0ZGVyciwKKwkJCQkJICAgc3Rkb3V0ID0+IFwkc3Rk b3V0KTsKKyRzdGRlcnIgPX4gL0VSUk9SOiAgZHVwbGljYXRlIGtleSB2YWx1ZSB2aW9sYXRlcyB1 bmlxdWUgY29uc3RyYWludCAidG1wX3BrZXkiLworICBvciBkaWUgImZhaWxlZCB0byByZXBsaWNh dGUgTk9UIERFRkVSUkFCTEUgYXQgY3JlYXRpbmcgdGFibGUiOworJG5vZGVfcHVibGlzaGVyLT5z YWZlX3BzcWwoJ3Bvc3RncmVzJywgIkRST1AgVEFCTEUgdG1wOyIpOworCisjIERFRkVSUkFCTEUg YW5kIElOSVRJQUxMWSBERUZFUlJFRAorJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3Rn cmVzJywgIkNSRUFURSBUQUJMRSB0bXAgKGlkIGludCBQUklNQVJZIEtFWSBERUZFUlJBQkxFIElO SVRJQUxMWSBERUZFUlJFRCwgbmFtZSB0ZXh0KTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9w c3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyB0bXAgVkFMVUVTICgxLCAnZm9vJyk7Iik7Cisk bm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiSU5TRVJUIElOVE8gdG1wIFZB TFVFUyAoMiwgJ2JhcicpOyIpOworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdt eXN1YicpOworIyBRdWljayBjaGVjayBvZiBkZWZlcnJhYmxlIGNsYXVzZQorJG5vZGVfc3Vic2Ny aWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJVUERBVEUgdG1wIFNFVCBpZCA9IGlkICsgMTsi KTsKKyMgQWxzbywgZXhlY3V0ZSBhIHRlc3QgdGhhdCBzaG91bGQgc3VjY2VlZCBmb3IgSU5JVElB TExZIERFRkVSUkVECiskbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgcXEo CitCRUdJTjsKK1VQREFURSB0bXAgU0VUIGlkID0gaWQgKyAxOworSU5TRVJUIElOVE8gdG1wIFZB TFVFUyAoMywgJ2Zvb2JhcicpOworREVMRVRFIEZST00gdG1wIFdIRVJFIGlkID0gMzsKK0NPTU1J VDsKKykpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkRST1AgVEFC TEUgdG1wOyIpOworCisjIFRlc3QgQ1JFQVRFIFRBQkxFIHdpdGggdGFibGUgY29uc3RyYWludAor IyBXZSB3aWxsIHNldCB0d28gY2hlY2tzIGFuZCBjb25kdWN0IHR3byBpbnNlcnRzIHRoYXQgc2hv dWxkIGZhaWwgcmVzcGVjdGl2ZWx5LgorJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3Rn cmVzJywKKwkiQ1JFQVRFIFRBQkxFIHRtcCAocHJpY2UgaW50LCBkaXNjb3VudGVkX3ByaWNlIGlu dCwgQ0hFQ0sgKGRpc2NvdW50ZWRfcHJpY2UgPiAwIEFORCBwcmljZSA+IGRpc2NvdW50ZWRfcHJp Y2UpKTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKyRu b2RlX3N1YnNjcmliZXItPnBzcWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIHRtcCBWQUxVRVMg KDEwMCwgMCk7IiwKKwkJCQkJICAgb25fZXJyb3Jfc3RvcCA9PiAwLAorCQkJCQkgICBzdGRlcnIg PT4gXCRzdGRlcnIsCisJCQkJCSAgIHN0ZG91dCA9PiBcJHN0ZG91dCk7Ciskc3RkZXJyID1+IC9F UlJPUjogIG5ldyByb3cgZm9yIHJlbGF0aW9uICJ0bXAiIHZpb2xhdGVzIGNoZWNrIGNvbnN0cmFp bnQgInRtcF9jaGVjayIvCisgIG9yIGRpZSAiZmFpbGVkIHRvIHJlcGxpY2F0ZSB0YWJsZSBjb25z dHJhaW50IChmaXJzdCBjb25kaXRpb24pIGF0IGNyZWF0aW5nIHRhYmxlIjsKKyRub2RlX3N1YnNj cmliZXItPnBzcWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIHRtcCBWQUxVRVMgKDUwLCAxMDAp OyIsCisJCQkJCSAgIG9uX2Vycm9yX3N0b3AgPT4gMCwKKwkJCQkJICAgc3RkZXJyID0+IFwkc3Rk ZXJyLAorCQkJCQkgICBzdGRvdXQgPT4gXCRzdGRvdXQpOworJHN0ZGVyciA9fiAvRVJST1I6ICBu ZXcgcm93IGZvciByZWxhdGlvbiAidG1wIiB2aW9sYXRlcyBjaGVjayBjb25zdHJhaW50ICJ0bXBf Y2hlY2siLworICBvciBkaWUgImZhaWxlZCB0byByZXBsaWNhdGUgdGFibGUgY29uc3RyYWludCAo c2Vjb25kIGNvbmRpdGlvbikgYXQgY3JlYXRpbmcgdGFibGUiOworJG5vZGVfcHVibGlzaGVyLT5z YWZlX3BzcWwoJ3Bvc3RncmVzJywgIkRST1AgVEFCTEUgdG1wOyIpOworCisjIFRlc3QgQ1JFQVRF IFRBQkxFIFdJVEggc3Ryb3JhZ2VfcGFyYW1ldGVyCiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNx bCgncG9zdGdyZXMnLCAiQ1JFQVRFIFRBQkxFIHRtcCAoaWQgaW50KSBXSVRIIChmaWxsZmFjdG9y ID0gODApOyIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIklOU0VS VCBJTlRPIHRtcCBWQUxVRVMgKDEpOyIpOworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRj aHVwKCdteXN1YicpOworJG5vZGVfc3Vic2NyaWJlci0+cHNxbCgncG9zdGdyZXMnLCAiU0VMRUNU IHJlbG9wdGlvbnMgRlJPTSBwZ19jbGFzcyBXSEVSRSByZWxuYW1lID0gJ3RtcCc7IiwKKwkJCQkJ ICAgb25fZXJyb3Jfc3RvcCA9PiAwLAorCQkJCQkgICBzdGRlcnIgPT4gXCRzdGRlcnIsCisJCQkJ CSAgIHN0ZG91dCA9PiBcJHN0ZG91dCk7Ciskc3Rkb3V0ID1+IC97ZmlsbGZhY3Rvcj04MH0vCisg IG9yIGRpZSAiZmFpbGVkIHRvIHJlcGxpY2F0ZSBzdG9yYWdlIG9wdGlvbiI7CiskcmVzdWx0ID0g JG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgY291bnQoKikg ZnJvbSB0bXA7Iik7CitpcygkcmVzdWx0LCBxcSgxKSwgJ0NSRUFURSBUQUJMRSB3aXRoIHN0b3Jh Z2VfcGFyYW1ldGVyIHJlcGxpY2F0ZWQnKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdw b3N0Z3JlcycsICJEUk9QIFRBQkxFIHRtcDsiKTsKKworIyBUZXN0IENSRUFURSBUQUJMRSBUQUJM RVNQQUNFIChjcmVhdGluZyBhIHRhYmxlc3BhY2UgaXMgbm90IHJlcGxpY2F0ZWQpCisjIFByZXBh cmUgdGhlIGRpcmVjdG9yaWVzIGZvciB0aGUgcHVibGlzaGVyIGFuZCBzdWJzY3JpYmVyIGZpcnN0 LgorbXkgKCRiYXNlZGlyLCAkdGFibGVzcGFjZV9kaXIpOworCiskYmFzZWRpciA9ICRub2RlX3B1 Ymxpc2hlci0+YmFzZWRpcjsKKyR0YWJsZXNwYWNlX2RpciA9ICIkYmFzZWRpci90YmxzcGNfcHVi IjsKK21rZGlyKCR0YWJsZXNwYWNlX2Rpcik7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgn cG9zdGdyZXMnLCAiQ1JFQVRFIFRBQkxFU1BBQ0UgbXl0YmxzcGMgTE9DQVRJT04gJyR0YWJsZXNw YWNlX2Rpcic7Iik7CiskYmFzZWRpciA9ICRub2RlX3N1YnNjcmliZXItPmJhc2VkaXI7CiskdGFi bGVzcGFjZV9kaXIgPSAiJGJhc2VkaXIvdGJsc3BjX3N1YiI7Citta2RpciAoJHRhYmxlc3BhY2Vf ZGlyKTsKKyRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiQ1JFQVRFIFRB QkxFU1BBQ0UgbXl0YmxzcGMgTE9DQVRJT04gJyR0YWJsZXNwYWNlX2Rpcic7Iik7CisKKyRub2Rl X3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJDUkVBVEUgVEFCTEUgdG1wIChpZCBp bnQpIFRBQkxFU1BBQ0UgbXl0YmxzcGM7Iik7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgn cG9zdGdyZXMnLCAiSU5TRVJUIElOVE8gdG1wIFZBTFVFUyAoMSk7Iik7Ciskbm9kZV9wdWJsaXNo ZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7CiskcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJl ci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgY291bnQoKikgZnJvbSB0bXA7Iik7Citp cygkcmVzdWx0LCBxcSgxKSwgJ0NSRUFURSBUQUJMRSBUQUJMRVNQQUNFIHJlcGxpY2F0ZWQnKTsK KyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJEUk9QIFRBQkxFIHRtcDsi KTsKKworIyBUZXN0IENSRUFURSBUWVBFCiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9z dGdyZXMnLCAiQ1JFQVRFIFRZUEUgbXl0eXBlIEFTIChpZCBpbnQsIG5hbWUgdGV4dCwgYWdlIGlu dCk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7Ciskbm9k ZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiQ1JFQVRFIFRBQkxFIHRtcCBPRiBt eXR5cGU7Iik7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiSU5TRVJU IElOVE8gdG1wIFZBTFVFUyAoMSwgJ2JhcicpOyIpOworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zv cl9jYXRjaHVwKCdteXN1YicpOworJHJlc3VsdCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNx bCgncG9zdGdyZXMnLCAiU0VMRUNUIGNvdW50KCopIGZyb20gdG1wOyIpOworaXMoJHJlc3VsdCwg cXEoMSksICdDUkVBVEUgVEFCTEUgT0YgcmVwbGljYXRlZCcpOworJG5vZGVfcHVibGlzaGVyLT5z YWZlX3BzcWwoJ3Bvc3RncmVzJywgIkRST1AgVEFCTEUgdG1wIik7Ciskbm9kZV9wdWJsaXNoZXIt PnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiRFJPUCBUWVBFIG15dHlwZSIpOworCisjIFRlc3QgQ1JF QVRFIEVOVU0gVFlQRQorJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkNS RUFURSBUWVBFIG15ZW51bXR5cGUgQVMgRU5VTSAoJ25ldycsICdvcGVuJywgJ2Nsb3NlZCcpOyIp OworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdteXN1YicpOworJG5vZGVfcHVi bGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkNSRUFURSBUQUJMRSB0bXAgKHN0YXR1cyBt eWVudW10eXBlKTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJJ TlNFUlQgSU5UTyB0bXAgVkFMVUVTICgnbmV3Jyk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRf Zm9yX2NhdGNodXAoJ215c3ViJyk7CiskcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9w c3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgKiBmcm9tIHRtcDsiKTsKK2lzKCRyZXN1bHQsIHFxKG5l dyksICdDUkVBVEUgVEFCTEUgT0YgcmVwbGljYXRlZCcpOworJG5vZGVfcHVibGlzaGVyLT5zYWZl X3BzcWwoJ3Bvc3RncmVzJywgIkRST1AgVEFCTEUgdG1wIik7Ciskbm9kZV9wdWJsaXNoZXItPnNh ZmVfcHNxbCgncG9zdGdyZXMnLCAiRFJPUCBUWVBFIG15ZW51bXR5cGUiKTsKKworIyBUZXN0IENS RUFURSBSQU5HRSBUWVBFCiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAi Q1JFQVRFIFRZUEUgZmxvYXQ4X3JhbmdlIEFTIFJBTkdFIChzdWJ0eXBlID0gZmxvYXQ4LCBzdWJ0 eXBlX2RpZmYgPSBmbG9hdDhtaSk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNo dXAoJ215c3ViJyk7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiQ1JF QVRFIFRBQkxFIHRtcCAodmFsIGZsb2F0OF9yYW5nZSk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPnNh ZmVfcHNxbCgncG9zdGdyZXMnLCAiaW5zZXJ0IGludG8gdG1wIHZhbHVlcyhmbG9hdDhfcmFuZ2Uo LTEyLjM0LCAnMS4xMTExMTNlMycpKTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0 Y2h1cCgnbXlzdWInKTsKKyRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bv c3RncmVzJywgIlNFTEVDVCAqIGZyb20gdG1wOyIpOworaXMoJHJlc3VsdCwgcXEoWy0xMi4zNCwx MTExLjExM1wpKSwgJ0NSRUFURSBUQUJMRSBPRiByZXBsaWNhdGVkJyk7Ciskbm9kZV9wdWJsaXNo ZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiRFJPUCBUQUJMRSB0bXAiKTsKKyRub2RlX3B1Ymxp c2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJEUk9QIFRZUEUgZmxvYXQ4X3JhbmdlIik7CisK KyMgVGVzdCBDUkVBVEUgQkFTRSBEQVRBIFRZUEUgYW5kIHVzZSBpdCBpbiB0YWJsZSBkZWZpbml0 aW9uCiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiCitDUkVBVEUgVFlQ RSBpbnQ0MjsKK0NSRUFURSBGVU5DVElPTiBpbnQ0Ml9pbihjc3RyaW5nKQorICAgUkVUVVJOUyBp bnQ0MgorICAgQVMgJ2ludDRpbicKKyAgIExBTkdVQUdFIGludGVybmFsIFNUUklDVCBJTU1VVEFC TEU7CitDUkVBVEUgRlVOQ1RJT04gaW50NDJfb3V0KGludDQyKQorICAgUkVUVVJOUyBjc3RyaW5n CisgICBBUyAnaW50NG91dCcKKyAgIExBTkdVQUdFIGludGVybmFsIFNUUklDVCBJTU1VVEFCTEU7 CitDUkVBVEUgVFlQRSBpbnQ0MiAoCisgICBpbnRlcm5hbGxlbmd0aCA9IDQsCisgICBpbnB1dCA9 IGludDQyX2luLAorICAgb3V0cHV0ID0gaW50NDJfb3V0LAorICAgYWxpZ25tZW50ID0gaW50NCwK KyAgIGRlZmF1bHQgPSA0MiwKKyAgIHBhc3NlZGJ5dmFsdWUKKyk7CitDUkVBVEUgVEFCTEUgdG1w IChmMSBpbnQ0Mik7CitJTlNFUlQgSU5UTyB0bXAgREVGQVVMVCBWQUxVRVM7CisiKTsKKyRub2Rl X3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKyRyZXN1bHQgPSAkbm9kZV9z dWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCAqIGZyb20gdG1wOyIpOwor aXMoJHJlc3VsdCwgcXEoNDIpLCAnQ1JFQVRFIFRBQkxFIE9GIHJlcGxpY2F0ZWQnKTsKKyRub2Rl X3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJEUk9QIFRBQkxFIHRtcCIpOworJG5v ZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkRST1AgVFlQRSBpbnQ0MiBjYXNj YWRlIik7CisKK3Bhc3MgIkRETCByZXBsaWNhdGlvbiB0ZXN0cyBwYXNzZWQ6IjsKKworJG5vZGVf c3Vic2NyaWJlci0+c3RvcDsKKyRub2RlX3B1Ymxpc2hlci0+c3RvcDsKKworZG9uZV90ZXN0aW5n KCk7CmRpZmYgLS1naXQgYS9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdCBiL3NyYy90 b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CmluZGV4IDVjZDhhZjllNjYuLjFkZjY2NjUzZjcg MTAwNjQ0Ci0tLSBhL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CisrKyBiL3NyYy90 b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CkBAIC01NTksNiArNTU5LDcgQEAgRGVmRWxlbUFj dGlvbgogRGVmYXVsdEFDTEluZm8KIERlZmluZVN0bXQKIERlbGV0ZVN0bXQKK0RlcGFyc2VkQ29t bWFuZFR5cGUKIERlcGVuZGVuY3lHZW5lcmF0b3IKIERlcGVuZGVuY3lHZW5lcmF0b3JEYXRhCiBE ZXBlbmRlbmN5VHlwZQpAQCAtMTQzOSw2ICsxNDQwLDggQEAgTG9naWNhbERlY29kZUJlZ2luUHJl cGFyZUNCCiBMb2dpY2FsRGVjb2RlQ2hhbmdlQ0IKIExvZ2ljYWxEZWNvZGVDb21taXRDQgogTG9n aWNhbERlY29kZUNvbW1pdFByZXBhcmVkQ0IKK0xvZ2ljYWxEZWNvZGVERExNZXNzYWdlQ0IKK0xv Z2ljYWxEZWNvZGVTdHJlYW1ERExNZXNzYWdlQ0IKIExvZ2ljYWxEZWNvZGVGaWx0ZXJCeU9yaWdp bkNCCiBMb2dpY2FsRGVjb2RlRmlsdGVyUHJlcGFyZUNCCiBMb2dpY2FsRGVjb2RlTWVzc2FnZUNC CkBAIC0yMjg3LDYgKzIyOTAsOCBAQCBSZW9yZGVyQnVmZmVyQ2hhbmdlCiBSZW9yZGVyQnVmZmVy Q2hhbmdlVHlwZQogUmVvcmRlckJ1ZmZlckNvbW1pdENCCiBSZW9yZGVyQnVmZmVyQ29tbWl0UHJl cGFyZWRDQgorUmVvcmRlckJ1ZmZlckRETE1lc3NhZ2VDQgorUmVvcmRlckJ1ZmZlclN0cmVhbURE TE1lc3NhZ2VDQgogUmVvcmRlckJ1ZmZlckRpc2tDaGFuZ2UKIFJlb3JkZXJCdWZmZXJJdGVyVFhO RW50cnkKIFJlb3JkZXJCdWZmZXJJdGVyVFhOU3RhdGUKLS0gCjIuMzguMQoK --000000000000e219be05f0eb1648 Content-Type: application/octet-stream; name="v58-0001-Infrastructure-to-support-DDL-deparsing.patch" Content-Disposition: attachment; filename="v58-0001-Infrastructure-to-support-DDL-deparsing.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lc88sdmw0 RnJvbSAyZDg2YjM2ZDc4ODE4YjE3ZWIzMTVhNzhmZTFlN2ZlNjJmYjBhMmFiIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBWaWduZXNoIEMgPHZpZ25lc2gyMUBnbWFpbC5jb20+CkRhdGU6 IFR1ZSwgMjAgRGVjIDIwMjIgMTc6NDU6MDcgKzA1MzAKU3ViamVjdDogW1BBVENIIDEvNV0gSW5m cmFzdHJ1Y3R1cmUgdG8gc3VwcG9ydCBEREwgZGVwYXJzaW5nLgoKSW5mcmFzdHJ1Y3R1cmUgdG8g c3VwcG9ydCBEREwgZGVwYXJzaW5nLgotLS0KIHNyYy9iYWNrZW5kL2NhdGFsb2cvYWNsY2hrLmMg ICAgICAgICAgICAgICAgIHwgICA5ICstCiBzcmMvYmFja2VuZC9jYXRhbG9nL29iamVjdGFkZHJl c3MuYyAgICAgICAgICB8ICAgMiArLQogc3JjL2JhY2tlbmQvY29tbWFuZHMvY29sbGF0aW9uY21k cy5jICAgICAgICAgfCAgMTAgKy0KIHNyYy9iYWNrZW5kL2NvbW1hbmRzL2V2ZW50X3RyaWdnZXIu YyAgICAgICAgIHwgIDQwICstLQogc3JjL2JhY2tlbmQvY29tbWFuZHMvc2VjbGFiZWwuYyAgICAg ICAgICAgICAgfCAgIDMgKwogc3JjL2JhY2tlbmQvY29tbWFuZHMvc2VxdWVuY2UuYyAgICAgICAg ICAgICAgfCAgMzMgKysrCiBzcmMvYmFja2VuZC90Y29wL3V0aWxpdHkuYyAgICAgICAgICAgICAg ICAgICB8ICA5MSArKysrKystCiBzcmMvYmFja2VuZC91dGlscy9hZHQvZm9ybWF0X3R5cGUuYyAg ICAgICAgICB8ICAgNCArLQogc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3JlZ3Byb2MuYyAgICAgICAg ICAgICAgfCAgNTMgKysrKwogc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3J1bGV1dGlscy5jICAgICAg ICAgICAgfCAyNTggKysrKysrKysrKysrKystLS0tLQogc3JjL2luY2x1ZGUvY29tbWFuZHMvY29s bGF0aW9uY21kcy5oICAgICAgICAgfCAgIDMgKy0KIHNyYy9pbmNsdWRlL2NvbW1hbmRzL2V2ZW50 X3RyaWdnZXIuaCAgICAgICAgIHwgIDM5ICsrKwogc3JjL2luY2x1ZGUvY29tbWFuZHMvc2VxdWVu Y2UuaCAgICAgICAgICAgICAgfCAgIDEgKwogc3JjL2luY2x1ZGUvdGNvcC91dGlsaXR5LmggICAg ICAgICAgICAgICAgICAgfCAgIDIgKwogc3JjL2luY2x1ZGUvdXRpbHMvYWNsLmggICAgICAgICAg ICAgICAgICAgICAgfCAgIDIgKwogc3JjL2luY2x1ZGUvdXRpbHMvYWNsY2hrX2ludGVybmFsLmgg ICAgICAgICAgfCAgIDEgKwogc3JjL2luY2x1ZGUvdXRpbHMvYnVpbHRpbnMuaCAgICAgICAgICAg ICAgICAgfCAgIDIgKwogc3JjL2luY2x1ZGUvdXRpbHMvcnVsZXV0aWxzLmggICAgICAgICAgICAg ICAgfCAgMTkgKysKIHNyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvb2JqZWN0X2FkZHJlc3Mub3V0 IHwgICAyICstCiAxOSBmaWxlcyBjaGFuZ2VkLCA0NTUgaW5zZXJ0aW9ucygrKSwgMTE5IGRlbGV0 aW9ucygtKQoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NhdGFsb2cvYWNsY2hrLmMgYi9zcmMv YmFja2VuZC9jYXRhbG9nL2FjbGNoay5jCmluZGV4IGNkZmQ2Mzc4MTUuLmJhNjcwYmMxOWMgMTAw NjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NhdGFsb2cvYWNsY2hrLmMKKysrIGIvc3JjL2JhY2tlbmQv Y2F0YWxvZy9hY2xjaGsuYwpAQCAtMTI5LDcgKzEyOSw2IEBAIHN0YXRpYyB2b2lkIGV4cGFuZF9h bGxfY29sX3ByaXZpbGVnZXMoT2lkIHRhYmxlX29pZCwgRm9ybV9wZ19jbGFzcyBjbGFzc0Zvcm0s CiAJCQkJCQkJCQkgIEFjbE1vZGUgKmNvbF9wcml2aWxlZ2VzLAogCQkJCQkJCQkJICBpbnQgbnVt X2NvbF9wcml2aWxlZ2VzKTsKIHN0YXRpYyBBY2xNb2RlIHN0cmluZ190b19wcml2aWxlZ2UoY29u c3QgY2hhciAqcHJpdm5hbWUpOwotc3RhdGljIGNvbnN0IGNoYXIgKnByaXZpbGVnZV90b19zdHJp bmcoQWNsTW9kZSBwcml2aWxlZ2UpOwogc3RhdGljIEFjbE1vZGUgcmVzdHJpY3RfYW5kX2NoZWNr X2dyYW50KGJvb2wgaXNfZ3JhbnQsIEFjbE1vZGUgYXZhaWxfZ29wdGlvbnMsCiAJCQkJCQkJCQkJ Ym9vbCBhbGxfcHJpdnMsIEFjbE1vZGUgcHJpdmlsZWdlcywKIAkJCQkJCQkJCQlPaWQgb2JqZWN0 SWQsIE9pZCBncmFudG9ySWQsCkBAIC0zODUsMTEgKzM4NCwxMCBAQCBFeGVjdXRlR3JhbnRTdG10 KEdyYW50U3RtdCAqc3RtdCkKIAlMaXN0Q2VsbCAgICpjZWxsOwogCWNvbnN0IGNoYXIgKmVycm9y bXNnOwogCUFjbE1vZGUJCWFsbF9wcml2aWxlZ2VzOworCU9pZAkJCWdyYW50b3IgPSBJbnZhbGlk T2lkOwogCiAJaWYgKHN0bXQtPmdyYW50b3IpCiAJewotCQlPaWQJCQlncmFudG9yOwotCiAJCWdy YW50b3IgPSBnZXRfcm9sZXNwZWNfb2lkKHN0bXQtPmdyYW50b3IsIGZhbHNlKTsKIAogCQkvKgpA QCAtNDA4LDYgKzQwNiw5IEBAIEV4ZWN1dGVHcmFudFN0bXQoR3JhbnRTdG10ICpzdG10KQogCWlz dG10LmlzX2dyYW50ID0gc3RtdC0+aXNfZ3JhbnQ7CiAJaXN0bXQub2JqdHlwZSA9IHN0bXQtPm9i anR5cGU7CiAKKwkvKiBDb3B5IHRoZSBncmFudG9yIGlkIG5lZWRlZCBmb3IgRERMIGRlcGFyc2lu ZyBvZiBHcmFudCAqLworCWlzdG10LmdyYW50b3JfdWlkID0gZ3JhbnRvcjsKKwogCS8qIENvbGxl Y3QgdGhlIE9JRHMgb2YgdGhlIHRhcmdldCBvYmplY3RzICovCiAJc3dpdGNoIChzdG10LT50YXJn dHlwZSkKIAl7CkBAIC0yNjI4LDcgKzI2MjksNyBAQCBzdHJpbmdfdG9fcHJpdmlsZWdlKGNvbnN0 IGNoYXIgKnByaXZuYW1lKQogCXJldHVybiAwOwkJCQkJLyogYXBwZWFzZSBjb21waWxlciAqLwog fQogCi1zdGF0aWMgY29uc3QgY2hhciAqCitjb25zdCBjaGFyICoKIHByaXZpbGVnZV90b19zdHJp bmcoQWNsTW9kZSBwcml2aWxlZ2UpCiB7CiAJc3dpdGNoIChwcml2aWxlZ2UpCmRpZmYgLS1naXQg YS9zcmMvYmFja2VuZC9jYXRhbG9nL29iamVjdGFkZHJlc3MuYyBiL3NyYy9iYWNrZW5kL2NhdGFs b2cvb2JqZWN0YWRkcmVzcy5jCmluZGV4IGExZGY4YjFkZGMuLmNmN2E1YWU2MmEgMTAwNjQ0Ci0t LSBhL3NyYy9iYWNrZW5kL2NhdGFsb2cvb2JqZWN0YWRkcmVzcy5jCisrKyBiL3NyYy9iYWNrZW5k L2NhdGFsb2cvb2JqZWN0YWRkcmVzcy5jCkBAIC01OTE0LDcgKzU5MTQsNyBAQCBnZXRPYmplY3RJ ZGVudGl0eVBhcnRzKGNvbnN0IE9iamVjdEFkZHJlc3MgKm9iamVjdCwKIAkJCQl0cmFuc2Zvcm1U eXBlID0gZm9ybWF0X3R5cGVfYmVfcXVhbGlmaWVkKHRyYW5zZm9ybS0+dHJmdHlwZSk7CiAJCQkJ dHJhbnNmb3JtTGFuZyA9IGdldF9sYW5ndWFnZV9uYW1lKHRyYW5zZm9ybS0+dHJmbGFuZywgZmFs c2UpOwogCi0JCQkJYXBwZW5kU3RyaW5nSW5mbygmYnVmZmVyLCAiZm9yICVzIG9uIGxhbmd1YWdl ICVzIiwKKwkJCQlhcHBlbmRTdHJpbmdJbmZvKCZidWZmZXIsICJmb3IgJXMgbGFuZ3VhZ2UgJXMi LAogCQkJCQkJCQkgdHJhbnNmb3JtVHlwZSwKIAkJCQkJCQkJIHRyYW5zZm9ybUxhbmcpOwogCQkJ CWlmIChvYmpuYW1lKQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvY29sbGF0aW9u Y21kcy5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvY29sbGF0aW9uY21kcy5jCmluZGV4IDgxZTU0 ZTBjZTYuLjNjZWI3YjI1MmEgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2NvbGxh dGlvbmNtZHMuYworKysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9jb2xsYXRpb25jbWRzLmMKQEAg LTUyLDcgKzUyLDggQEAgdHlwZWRlZiBzdHJ1Y3QKICAqIENSRUFURSBDT0xMQVRJT04KICAqLwog T2JqZWN0QWRkcmVzcwotRGVmaW5lQ29sbGF0aW9uKFBhcnNlU3RhdGUgKnBzdGF0ZSwgTGlzdCAq bmFtZXMsIExpc3QgKnBhcmFtZXRlcnMsIGJvb2wgaWZfbm90X2V4aXN0cykKK0RlZmluZUNvbGxh dGlvbihQYXJzZVN0YXRlICpwc3RhdGUsIExpc3QgKm5hbWVzLCBMaXN0ICpwYXJhbWV0ZXJzLAor CQkJCSBib29sIGlmX25vdF9leGlzdHMsIE9iamVjdEFkZHJlc3MgKmZyb21fZXhpc3RpbmdfY29s bGlkKQogewogCWNoYXIJICAgKmNvbGxOYW1lOwogCU9pZAkJCWNvbGxOYW1lc3BhY2U7CkBAIC0x MzksNiArMTQwLDEzIEBAIERlZmluZUNvbGxhdGlvbihQYXJzZVN0YXRlICpwc3RhdGUsIExpc3Qg Km5hbWVzLCBMaXN0ICpwYXJhbWV0ZXJzLCBib29sIGlmX25vdF9lCiAJCWlmICghSGVhcFR1cGxl SXNWYWxpZCh0cCkpCiAJCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3IgY29s bGF0aW9uICV1IiwgY29sbGlkKTsKIAorCQkvKgorCQkgKiBNYWtlIGZyb20gZXhpc3RpbmcgY29s bGF0aW9uaWQgYXZhaWxhYmxlIHRvIGNhbGxlcnMgZm9yIHN0YXRlbWVudCBzdWNoIGFzCisJCSAq IENSRUFURSBDT0xMQVRJT04gYW55X25hbWUgRlJPTSBhbnlfbmFtZQorCQkgKi8KKwkJaWYgKGZy b21fZXhpc3RpbmdfY29sbGlkICYmIE9pZElzVmFsaWQoY29sbGlkKSkKKwkJCU9iamVjdEFkZHJl c3NTZXQoKmZyb21fZXhpc3RpbmdfY29sbGlkLCBDb2xsYXRpb25SZWxhdGlvbklkLCBjb2xsaWQp OworCiAJCWNvbGxwcm92aWRlciA9ICgoRm9ybV9wZ19jb2xsYXRpb24pIEdFVFNUUlVDVCh0cCkp LT5jb2xscHJvdmlkZXI7CiAJCWNvbGxpc2RldGVybWluaXN0aWMgPSAoKEZvcm1fcGdfY29sbGF0 aW9uKSBHRVRTVFJVQ1QodHApKS0+Y29sbGlzZGV0ZXJtaW5pc3RpYzsKIAkJY29sbGVuY29kaW5n ID0gKChGb3JtX3BnX2NvbGxhdGlvbikgR0VUU1RSVUNUKHRwKSktPmNvbGxlbmNvZGluZzsKZGlm ZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2V2ZW50X3RyaWdnZXIuYyBiL3NyYy9iYWNr ZW5kL2NvbW1hbmRzL2V2ZW50X3RyaWdnZXIuYwppbmRleCBhM2JkYzVkYjA3Li42NDBjMjVmZjcw IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy9ldmVudF90cmlnZ2VyLmMKKysrIGIv c3JjL2JhY2tlbmQvY29tbWFuZHMvZXZlbnRfdHJpZ2dlci5jCkBAIC00OCw0NSArNDgsNyBAQAog I2luY2x1ZGUgInV0aWxzL3JlbC5oIgogI2luY2x1ZGUgInV0aWxzL3N5c2NhY2hlLmgiCiAKLXR5 cGVkZWYgc3RydWN0IEV2ZW50VHJpZ2dlclF1ZXJ5U3RhdGUKLXsKLQkvKiBtZW1vcnkgY29udGV4 dCBmb3IgdGhpcyBzdGF0ZSdzIG9iamVjdHMgKi8KLQlNZW1vcnlDb250ZXh0IGN4dDsKLQotCS8q IHNxbF9kcm9wICovCi0Jc2xpc3RfaGVhZAlTUUxEcm9wTGlzdDsKLQlib29sCQlpbl9zcWxfZHJv cDsKLQotCS8qIHRhYmxlX3Jld3JpdGUgKi8KLQlPaWQJCQl0YWJsZV9yZXdyaXRlX29pZDsJLyog SW52YWxpZE9pZCwgb3Igc2V0IGZvciB0YWJsZV9yZXdyaXRlCi0JCQkJCQkJCQkgKiBldmVudCAq LwotCWludAkJCXRhYmxlX3Jld3JpdGVfcmVhc29uOwkvKiBBVF9SRVdSSVRFIHJlYXNvbiAqLwot Ci0JLyogU3VwcG9ydCBmb3IgY29tbWFuZCBjb2xsZWN0aW9uICovCi0JYm9vbAkJY29tbWFuZENv bGxlY3Rpb25JbmhpYml0ZWQ7Ci0JQ29sbGVjdGVkQ29tbWFuZCAqY3VycmVudENvbW1hbmQ7Ci0J TGlzdAkgICAqY29tbWFuZExpc3Q7CS8qIGxpc3Qgb2YgQ29sbGVjdGVkQ29tbWFuZDsgc2VlCi0J CQkJCQkJCSAqIGRlcGFyc2VfdXRpbGl0eS5oICovCi0Jc3RydWN0IEV2ZW50VHJpZ2dlclF1ZXJ5 U3RhdGUgKnByZXZpb3VzOwotfSBFdmVudFRyaWdnZXJRdWVyeVN0YXRlOwotCi1zdGF0aWMgRXZl bnRUcmlnZ2VyUXVlcnlTdGF0ZSAqY3VycmVudEV2ZW50VHJpZ2dlclN0YXRlID0gTlVMTDsKLQot LyogU3VwcG9ydCBmb3IgZHJvcHBlZCBvYmplY3RzICovCi10eXBlZGVmIHN0cnVjdCBTUUxEcm9w T2JqZWN0Ci17Ci0JT2JqZWN0QWRkcmVzcyBhZGRyZXNzOwotCWNvbnN0IGNoYXIgKnNjaGVtYW5h bWU7Ci0JY29uc3QgY2hhciAqb2JqbmFtZTsKLQljb25zdCBjaGFyICpvYmppZGVudGl0eTsKLQlj b25zdCBjaGFyICpvYmplY3R0eXBlOwotCUxpc3QJICAgKmFkZHJuYW1lczsKLQlMaXN0CSAgICph ZGRyYXJnczsKLQlib29sCQlvcmlnaW5hbDsKLQlib29sCQlub3JtYWw7Ci0JYm9vbAkJaXN0ZW1w OwotCXNsaXN0X25vZGUJbmV4dDsKLX0gU1FMRHJvcE9iamVjdDsKK0V2ZW50VHJpZ2dlclF1ZXJ5 U3RhdGUgKmN1cnJlbnRFdmVudFRyaWdnZXJTdGF0ZSA9IE5VTEw7CiAKIHN0YXRpYyB2b2lkIEFs dGVyRXZlbnRUcmlnZ2VyT3duZXJfaW50ZXJuYWwoUmVsYXRpb24gcmVsLAogCQkJCQkJCQkJCQlI ZWFwVHVwbGUgdHVwLApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvc2VjbGFiZWwu YyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3NlY2xhYmVsLmMKaW5kZXggN2FlMTliOThiYi4uMjcx M2NhZDU2OSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvc2VjbGFiZWwuYworKysg Yi9zcmMvYmFja2VuZC9jb21tYW5kcy9zZWNsYWJlbC5jCkBAIC0xMzQsNiArMTM0LDkgQEAgRXhl Y1NlY0xhYmVsU3RtdChTZWNMYWJlbFN0bXQgKnN0bXQpCiAJCQkJCShlcnJjb2RlKEVSUkNPREVf SU5WQUxJRF9QQVJBTUVURVJfVkFMVUUpLAogCQkJCQkgZXJybXNnKCJtdXN0IHNwZWNpZnkgcHJv dmlkZXIgd2hlbiBtdWx0aXBsZSBzZWN1cml0eSBsYWJlbCBwcm92aWRlcnMgaGF2ZSBiZWVuIGxv YWRlZCIpKSk7CiAJCXByb3ZpZGVyID0gKExhYmVsUHJvdmlkZXIgKikgbGluaXRpYWwobGFiZWxf cHJvdmlkZXJfbGlzdCk7CisKKwkJLyogQ29weSB0aGUgcHJvdmlkZXIgbmFtZSB0byB0aGUgcGFy c2V0cmVlLCBuZWVkZWQgZm9yIERETCBkZXBhcnNpbmcgb2YgU2VjTGFiZWxTdG10ICovCisJCXN0 bXQtPnByb3ZpZGVyID0gcHN0cmR1cChwcm92aWRlci0+cHJvdmlkZXJfbmFtZSk7CiAJfQogCWVs c2UKIAl7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy9zZXF1ZW5jZS5jIGIvc3Jj L2JhY2tlbmQvY29tbWFuZHMvc2VxdWVuY2UuYwppbmRleCBjMzFjOWI4OTFhLi44OWY4NTVlZGY2 IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy9zZXF1ZW5jZS5jCisrKyBiL3NyYy9i YWNrZW5kL2NvbW1hbmRzL3NlcXVlbmNlLmMKQEAgLTE3MDgsNiArMTcwOCwzOSBAQCBwcm9jZXNz X293bmVkX2J5KFJlbGF0aW9uIHNlcXJlbCwgTGlzdCAqb3duZWRfYnksIGJvb2wgZm9yX2lkZW50 aXR5KQogCQlyZWxhdGlvbl9jbG9zZSh0YWJsZXJlbCwgTm9Mb2NrKTsKIH0KIAorLyoKKyAqIFJl dHVybiBzZXF1ZW5jZSBwYXJhbWV0ZXJzLCBkZXRhaWxlZAorICovCitGb3JtX3BnX3NlcXVlbmNl X2RhdGEKK2dldF9zZXF1ZW5jZV92YWx1ZXMoT2lkIHNlcXVlbmNlSWQpCit7CisJQnVmZmVyICAg ICAgYnVmOworCVNlcVRhYmxlICAgIGVsbTsKKwlSZWxhdGlvbiAgICBzZXFyZWw7CisJSGVhcFR1 cGxlRGF0YSBzZXF0dXBsZTsKKwlGb3JtX3BnX3NlcXVlbmNlX2RhdGEgc2VxOworCUZvcm1fcGdf c2VxdWVuY2VfZGF0YSByZXRTZXE7CisKKwkvKiBPcGVuIGFuZCBBY2Nlc3NTaGFyZUxvY2sgc2Vx dWVuY2UgKi8KKwlpbml0X3NlcXVlbmNlKHNlcXVlbmNlSWQsICZlbG0sICZzZXFyZWwpOworCisJ aWYgKHBnX2NsYXNzX2FjbGNoZWNrKHNlcXVlbmNlSWQsIEdldFVzZXJJZCgpLAorCQkJQUNMX1NF TEVDVCB8IEFDTF9VUERBVEUgfCBBQ0xfVVNBR0UpICE9IEFDTENIRUNLX09LKQorCQllcmVwb3J0 KEVSUk9SLAorCQkJCQkoZXJyY29kZShFUlJDT0RFX0lOU1VGRklDSUVOVF9QUklWSUxFR0UpLAor CQkJCQkgZXJybXNnKCJwZXJtaXNzaW9uIGRlbmllZCBmb3Igc2VxdWVuY2UgJXMiLAorCQkJCQkJ CVJlbGF0aW9uR2V0UmVsYXRpb25OYW1lKHNlcXJlbCkpKSk7CisKKwlzZXEgPSByZWFkX3NlcV90 dXBsZShzZXFyZWwsICZidWYsICZzZXF0dXBsZSk7CisJcmV0U2VxID0gcGFsbG9jKHNpemVvZihG b3JtRGF0YV9wZ19zZXF1ZW5jZV9kYXRhKSk7CisKKwltZW1jcHkocmV0U2VxLCBzZXEsIHNpemVv ZihGb3JtRGF0YV9wZ19zZXF1ZW5jZV9kYXRhKSk7CisKKwlVbmxvY2tSZWxlYXNlQnVmZmVyKGJ1 Zik7CisJcmVsYXRpb25fY2xvc2Uoc2VxcmVsLCBOb0xvY2spOworCisJcmV0dXJuIHJldFNlcTsK K30KIAogLyoKICAqIFJldHVybiBzZXF1ZW5jZSBwYXJhbWV0ZXJzIGluIGEgbGlzdCBvZiB0aGUg Zm9ybSBjcmVhdGVkIGJ5IHRoZSBwYXJzZXIuCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC90Y29w L3V0aWxpdHkuYyBiL3NyYy9iYWNrZW5kL3Rjb3AvdXRpbGl0eS5jCmluZGV4IDI0N2QwODE2YWQu LmYxMjE1YzhlMTggMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3Rjb3AvdXRpbGl0eS5jCisrKyBi L3NyYy9iYWNrZW5kL3Rjb3AvdXRpbGl0eS5jCkBAIC0xNDQ2LDcgKzE0NDYsOCBAQCBQcm9jZXNz VXRpbGl0eVNsb3coUGFyc2VTdGF0ZSAqcHN0YXRlLAogCQkJCQkJCWFkZHJlc3MgPSBEZWZpbmVD b2xsYXRpb24ocHN0YXRlLAogCQkJCQkJCQkJCQkJCSAgc3RtdC0+ZGVmbmFtZXMsCiAJCQkJCQkJ CQkJCQkJICBzdG10LT5kZWZpbml0aW9uLAotCQkJCQkJCQkJCQkJCSAgc3RtdC0+aWZfbm90X2V4 aXN0cyk7CisJCQkJCQkJCQkJCQkJICBzdG10LT5pZl9ub3RfZXhpc3RzLAorCQkJCQkJCQkJCQkJ CSAgJnNlY29uZGFyeU9iamVjdCk7CiAJCQkJCQkJYnJlYWs7CiAJCQkJCQlkZWZhdWx0OgogCQkJ CQkJCWVsb2coRVJST1IsICJ1bnJlY29nbml6ZWQgZGVmaW5lIHN0bXQgdHlwZTogJWQiLApAQCAt MjE5Niw2ICsyMTk3LDk0IEBAIFV0aWxpdHlDb250YWluc1F1ZXJ5KE5vZGUgKnBhcnNldHJlZSkK IAl9CiB9CiAKKy8qCisgKiBSZXR1cm4gdGhlIGdpdmVuIG9iamVjdCB0eXBlIGFzIGEgc3RyaW5n LgorICovCitjb25zdCBjaGFyICoKK3N0cmluZ2lmeV9vYmp0eXBlKE9iamVjdFR5cGUgb2JqdHlw ZSwgYm9vbCBpc2dyYW50KQoreworCXN3aXRjaCAob2JqdHlwZSkKKwl7CisJCWNhc2UgT0JKRUNU X0FHR1JFR0FURToKKwkJCXJldHVybiAiQUdHUkVHQVRFIjsKKwkJY2FzZSBPQkpFQ1RfQ0FTVDoK KwkJCXJldHVybiAiQ0FTVCI7CisJCWNhc2UgT0JKRUNUX0NPTExBVElPTjoKKwkJCXJldHVybiAi Q09MTEFUSU9OIjsKKwkJY2FzZSBPQkpFQ1RfQ09MVU1OOgorCQkJcmV0dXJuIGlzZ3JhbnQgPyAi VEFCTEUiIDogIkNPTFVNTiI7CisJCWNhc2UgT0JKRUNUX0NPTlZFUlNJT046CisJCQlyZXR1cm4g IkNPTlZFUlNJT04iOworCQljYXNlIE9CSkVDVF9EQVRBQkFTRToKKwkJCXJldHVybiAiREFUQUJB U0UiOworCQljYXNlIE9CSkVDVF9ET01BSU46CisJCQlyZXR1cm4gIkRPTUFJTiI7CisJCWNhc2Ug T0JKRUNUX0VWRU5UX1RSSUdHRVI6CisJCQlyZXR1cm4gIkVWRU5UIFRSSUdHRVIiOworCQljYXNl IE9CSkVDVF9FWFRFTlNJT046CisJCQlyZXR1cm4gIkVYVEVOU0lPTiI7CisJCWNhc2UgT0JKRUNU X0ZEVzoKKwkJCXJldHVybiAiRk9SRUlHTiBEQVRBIFdSQVBQRVIiOworCQljYXNlIE9CSkVDVF9G T1JFSUdOX1NFUlZFUjoKKwkJCXJldHVybiBpc2dyYW50ID8gIkZPUkVJR04gU0VSVkVSIiA6ICJT RVJWRVIiOworCQljYXNlIE9CSkVDVF9GT1JFSUdOX1RBQkxFOgorCQkJcmV0dXJuICJGT1JFSUdO IFRBQkxFIjsKKwkJY2FzZSBPQkpFQ1RfRlVOQ1RJT046CisJCQlyZXR1cm4gIkZVTkNUSU9OIjsK KwkJY2FzZSBPQkpFQ1RfSU5ERVg6CisJCQlyZXR1cm4gIklOREVYIjsKKwkJY2FzZSBPQkpFQ1Rf TEFOR1VBR0U6CisJCQlyZXR1cm4gIkxBTkdVQUdFIjsKKwkJY2FzZSBPQkpFQ1RfTEFSR0VPQkpF Q1Q6CisJCQlyZXR1cm4gIkxBUkdFIE9CSkVDVCI7CisJCWNhc2UgT0JKRUNUX01BVFZJRVc6CisJ CQlyZXR1cm4gIk1BVEVSSUFMSVpFRCBWSUVXIjsKKwkJY2FzZSBPQkpFQ1RfT1BDTEFTUzoKKwkJ CXJldHVybiAiT1BFUkFUT1IgQ0xBU1MiOworCQljYXNlIE9CSkVDVF9PUEVSQVRPUjoKKwkJCXJl dHVybiAiT1BFUkFUT1IiOworCQljYXNlIE9CSkVDVF9PUEZBTUlMWToKKwkJCXJldHVybiAiT1BF UkFUT1IgRkFNSUxZIjsKKwkJY2FzZSBPQkpFQ1RfUE9MSUNZOgorCQkJcmV0dXJuICJQT0xJQ1ki OworCQljYXNlIE9CSkVDVF9QUk9DRURVUkU6CisJCQlyZXR1cm4gIlBST0NFRFVSRSI7CisJCWNh c2UgT0JKRUNUX1JPTEU6CisJCQlyZXR1cm4gIlJPTEUiOworCQljYXNlIE9CSkVDVF9ST1VUSU5F OgorCQkJcmV0dXJuICJST1VUSU5FIjsKKwkJY2FzZSBPQkpFQ1RfUlVMRToKKwkJCXJldHVybiAi UlVMRSI7CisJCWNhc2UgT0JKRUNUX1NDSEVNQToKKwkJCXJldHVybiAiU0NIRU1BIjsKKwkJY2Fz ZSBPQkpFQ1RfU0VRVUVOQ0U6CisJCQlyZXR1cm4gIlNFUVVFTkNFIjsKKwkJY2FzZSBPQkpFQ1Rf U1RBVElTVElDX0VYVDoKKwkJCXJldHVybiAiU1RBVElTVElDUyI7CisJCWNhc2UgT0JKRUNUX1RB QkxFOgorCQkJcmV0dXJuICJUQUJMRSI7CisJCWNhc2UgT0JKRUNUX1RBQkxFU1BBQ0U6CisJCQly ZXR1cm4gIlRBQkxFU1BBQ0UiOworCQljYXNlIE9CSkVDVF9UUklHR0VSOgorCQkJcmV0dXJuICJU UklHR0VSIjsKKwkJY2FzZSBPQkpFQ1RfVFNDT05GSUdVUkFUSU9OOgorCQkJcmV0dXJuICJURVhU IFNFQVJDSCBDT05GSUdVUkFUSU9OIjsKKwkJY2FzZSBPQkpFQ1RfVFNESUNUSU9OQVJZOgorCQkJ cmV0dXJuICJURVhUIFNFQVJDSCBESUNUSU9OQVJZIjsKKwkJY2FzZSBPQkpFQ1RfVFNQQVJTRVI6 CisJCQlyZXR1cm4gIlRFWFQgU0VBUkNIIFBBUlNFUiI7CisJCWNhc2UgT0JKRUNUX1RTVEVNUExB VEU6CisJCQlyZXR1cm4gIlRFWFQgU0VBUkNIIFRFTVBMQVRFIjsKKwkJY2FzZSBPQkpFQ1RfVFlQ RToKKwkJCXJldHVybiAiVFlQRSI7CisJCWNhc2UgT0JKRUNUX1VTRVJfTUFQUElORzoKKwkJCXJl dHVybiAiVVNFUiBNQVBQSU5HIjsKKwkJY2FzZSBPQkpFQ1RfVklFVzoKKwkJCXJldHVybiAiVklF VyI7CisJCWRlZmF1bHQ6CisJCQllbG9nKEVSUk9SLCAidW5zdXBwb3J0ZWQgb2JqZWN0IHR5cGUg JWQiLCBvYmp0eXBlKTsKKwl9Cit9CiAKIC8qCiAgKiBBbHRlck9iamVjdFR5cGVDb21tYW5kVGFn CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9hZHQvZm9ybWF0X3R5cGUuYyBiL3NyYy9i YWNrZW5kL3V0aWxzL2FkdC9mb3JtYXRfdHlwZS5jCmluZGV4IDI5MThmZGJmYjYuLjQ5MWRhZmJh NzQgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9mb3JtYXRfdHlwZS5jCisrKyBi L3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9mb3JtYXRfdHlwZS5jCkBAIC0yNyw4ICsyNyw2IEBACiAj aW5jbHVkZSAidXRpbHMvbnVtZXJpYy5oIgogI2luY2x1ZGUgInV0aWxzL3N5c2NhY2hlLmgiCiAK LXN0YXRpYyBjaGFyICpwcmludFR5cG1vZChjb25zdCBjaGFyICp0eXBuYW1lLCBpbnQzMiB0eXBt b2QsIE9pZCB0eXBtb2RvdXQpOwotCiAKIC8qCiAgKiBTUUwgZnVuY3Rpb246IGZvcm1hdF90eXBl KHR5cGVfb2lkLCB0eXBlbW9kKQpAQCAtMzYzLDcgKzM2MSw3IEBAIGZvcm1hdF90eXBlX3dpdGhf dHlwZW1vZChPaWQgdHlwZV9vaWQsIGludDMyIHR5cGVtb2QpCiAvKgogICogQWRkIHR5cG1vZCBk ZWNvcmF0aW9uIHRvIHRoZSBiYXNpYyB0eXBlIG5hbWUKICAqLwotc3RhdGljIGNoYXIgKgorY2hh ciAqCiBwcmludFR5cG1vZChjb25zdCBjaGFyICp0eXBuYW1lLCBpbnQzMiB0eXBtb2QsIE9pZCB0 eXBtb2RvdXQpCiB7CiAJY2hhcgkgICAqcmVzOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRp bHMvYWR0L3JlZ3Byb2MuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9yZWdwcm9jLmMKaW5kZXgg MzYzNWE5NDYzMy4uODgzNjA0ZjdlNiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0 L3JlZ3Byb2MuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvcmVncHJvYy5jCkBAIC00OSw2 ICs0OSw4IEBAIHN0YXRpYyBib29sIHBhcnNlTmFtZUFuZEFyZ1R5cGVzKGNvbnN0IGNoYXIgKnN0 cmluZywgYm9vbCBhbGxvd05vbmUsCiAJCQkJCQkJCSBMaXN0ICoqbmFtZXMsIGludCAqbmFyZ3Ms IE9pZCAqYXJndHlwZXMsCiAJCQkJCQkJCSBOb2RlICplc2NvbnRleHQpOwogCitzdGF0aWMgdm9p ZCBmb3JtYXRfcHJvY2VkdXJlX2FyZ3NfaW50ZXJuYWwoRm9ybV9wZ19wcm9jIHByb2Nmb3JtLAor CQkJCQkJCQkJCSAgIFN0cmluZ0luZm8gYnVmLCBib29sIGZvcmNlX3F1YWxpZnkpOwogCiAvKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioKICAqCSBVU0VSIEkvTyBST1VUSU5FUwkJCQkJCQkJCQkJCQkJICoK QEAgLTMwNyw2ICszMDksMjkgQEAgZm9ybWF0X3Byb2NlZHVyZV9xdWFsaWZpZWQoT2lkIHByb2Nl ZHVyZV9vaWQpCiAJcmV0dXJuIGZvcm1hdF9wcm9jZWR1cmVfZXh0ZW5kZWQocHJvY2VkdXJlX29p ZCwgRk9STUFUX1BST0NfRk9SQ0VfUVVBTElGWSk7CiB9CiAKKy8qCisgKiBmb3JtYXRfcHJvY2Vk dXJlX2FyZ3MgICAtIGNvbnZlcnRzIHByb2MgT0lEIHRvICIoYXJncykiCisgKi8KK2NoYXIgKgor Zm9ybWF0X3Byb2NlZHVyZV9hcmdzKE9pZCBwcm9jZWR1cmVfb2lkLCBib29sIGZvcmNlX3F1YWxp ZnkpCit7CisJU3RyaW5nSW5mb0RhdGEgYnVmOworCUhlYXBUdXBsZSAgIHByb2N0dXA7CisJRm9y bV9wZ19wcm9jIHByb2Nmb3JtOworCisJcHJvY3R1cCA9IFNlYXJjaFN5c0NhY2hlMShQUk9DT0lE LCBPYmplY3RJZEdldERhdHVtKHByb2NlZHVyZV9vaWQpKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFs aWQocHJvY3R1cCkpCisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciBwcm9j ZWR1cmUgJXUiLCBwcm9jZWR1cmVfb2lkKTsKKwlwcm9jZm9ybSA9IChGb3JtX3BnX3Byb2MpIEdF VFNUUlVDVChwcm9jdHVwKTsKKworCWluaXRTdHJpbmdJbmZvKCZidWYpOworCWZvcm1hdF9wcm9j ZWR1cmVfYXJnc19pbnRlcm5hbChwcm9jZm9ybSwgJmJ1ZiwgZm9yY2VfcXVhbGlmeSk7CisKKwlS ZWxlYXNlU3lzQ2FjaGUocHJvY3R1cCk7CisKKwlyZXR1cm4gYnVmLmRhdGE7Cit9CisKIC8qCiAg KiBmb3JtYXRfcHJvY2VkdXJlX2V4dGVuZGVkIC0gY29udmVydHMgcHJvY2VkdXJlIE9JRCB0byAi cHJvX25hbWUoYXJncykiCiAgKgpAQCAtMjAxNiwzICsyMDQxLDMxIEBAIHBhcnNlTmFtZUFuZEFy Z1R5cGVzKGNvbnN0IGNoYXIgKnN0cmluZywgYm9vbCBhbGxvd05vbmUsIExpc3QgKipuYW1lcywK IAogCXJldHVybiB0cnVlOwogfQorCisvKgorICogQXBwZW5kIHRoZSBwYXJlbnRoZXNpemVkIGFy Z3VtZW50cyBvZiB0aGUgZ2l2ZW4gcGdfcHJvYyByb3cgaW50byB0aGUgb3V0cHV0CisgKiBidWZm ZXIuIGZvcmNlX3F1YWxpZnkgaW5kaWNhdGVzIHdoZXRoZXIgdG8gc2NoZW1hLXF1YWxpZnkgdHlw ZSBuYW1lcworICogcmVnYXJkbGVzcyBvZiB2aXNpYmlsaXR5LgorICovCitzdGF0aWMgdm9pZAor Zm9ybWF0X3Byb2NlZHVyZV9hcmdzX2ludGVybmFsKEZvcm1fcGdfcHJvYyBwcm9jZm9ybSwgU3Ry aW5nSW5mbyBidWYsCisJCQkJCQkJICAgYm9vbCBmb3JjZV9xdWFsaWZ5KQoreworCWludAkJCWk7 CisJY2hhcioJCSgqZnVuY1syXSkoT2lkKSA9IHtmb3JtYXRfdHlwZV9iZSwgZm9ybWF0X3R5cGVf YmVfcXVhbGlmaWVkfTsKKworCWFwcGVuZFN0cmluZ0luZm9DaGFyKGJ1ZiwgJygnKTsKKwlmb3Ig KGkgPSAwOyBpIDwgcHJvY2Zvcm0tPnByb25hcmdzOyBpKyspCisJeworCQlPaWQJCQl0aGlzYXJn dHlwZSA9IHByb2Nmb3JtLT5wcm9hcmd0eXBlcy52YWx1ZXNbaV07CisJCWNoYXIJICAgKmFyZ3R5 cGUgPSBOVUxMOworCisJCWlmIChpID4gMCkKKwkJCWFwcGVuZFN0cmluZ0luZm9DaGFyKGJ1Ziwg JywnKTsKKworCQlhcmd0eXBlID0gZnVuY1tmb3JjZV9xdWFsaWZ5XSh0aGlzYXJndHlwZSk7CisJ CWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoYnVmLCBhcmd0eXBlKTsKKwkJcGZyZWUoYXJndHlwZSk7 CisJfQorCWFwcGVuZFN0cmluZ0luZm9DaGFyKGJ1ZiwgJyknKTsKK30KZGlmZiAtLWdpdCBhL3Ny Yy9iYWNrZW5kL3V0aWxzL2FkdC9ydWxldXRpbHMuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9y dWxldXRpbHMuYwppbmRleCA2NDFkZjFjYWJlLi5mOTllYmExZDcwIDEwMDY0NAotLS0gYS9zcmMv YmFja2VuZC91dGlscy9hZHQvcnVsZXV0aWxzLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0 L3J1bGV1dGlscy5jCkBAIC0zNSw2ICszNSw3IEBACiAjaW5jbHVkZSAiY2F0YWxvZy9wZ19vcGVy YXRvci5oIgogI2luY2x1ZGUgImNhdGFsb2cvcGdfcGFydGl0aW9uZWRfdGFibGUuaCIKICNpbmNs dWRlICJjYXRhbG9nL3BnX3Byb2MuaCIKKyNpbmNsdWRlICJjYXRhbG9nL3BnX3Jld3JpdGUuaCIK ICNpbmNsdWRlICJjYXRhbG9nL3BnX3N0YXRpc3RpY19leHQuaCIKICNpbmNsdWRlICJjYXRhbG9n L3BnX3RyaWdnZXIuaCIKICNpbmNsdWRlICJjYXRhbG9nL3BnX3R5cGUuaCIKQEAgLTM1OCw3ICsz NTksNiBAQCBzdGF0aWMgaW50CXByaW50X2Z1bmN0aW9uX2FyZ3VtZW50cyhTdHJpbmdJbmZvIGJ1 ZiwgSGVhcFR1cGxlIHByb2N0dXAsCiAJCQkJCQkJCQkgYm9vbCBwcmludF90YWJsZV9hcmdzLCBi b29sIHByaW50X2RlZmF1bHRzKTsKIHN0YXRpYyB2b2lkIHByaW50X2Z1bmN0aW9uX3JldHR5cGUo U3RyaW5nSW5mbyBidWYsIEhlYXBUdXBsZSBwcm9jdHVwKTsKIHN0YXRpYyB2b2lkIHByaW50X2Z1 bmN0aW9uX3RyZnR5cGVzKFN0cmluZ0luZm8gYnVmLCBIZWFwVHVwbGUgcHJvY3R1cCk7Ci1zdGF0 aWMgdm9pZCBwcmludF9mdW5jdGlvbl9zcWxib2R5KFN0cmluZ0luZm8gYnVmLCBIZWFwVHVwbGUg cHJvY3R1cCk7CiBzdGF0aWMgdm9pZCBzZXRfcnRhYmxlX25hbWVzKGRlcGFyc2VfbmFtZXNwYWNl ICpkcG5zLCBMaXN0ICpwYXJlbnRfbmFtZXNwYWNlcywKIAkJCQkJCQkgQml0bWFwc2V0ICpyZWxz X3VzZWQpOwogc3RhdGljIHZvaWQgc2V0X2RlcGFyc2VfZm9yX3F1ZXJ5KGRlcGFyc2VfbmFtZXNw YWNlICpkcG5zLCBRdWVyeSAqcXVlcnksCkBAIC00ODIsMjIgKzQ4MiwxNSBAQCBzdGF0aWMgdm9p ZCBnZXRfZnJvbV9jbGF1c2VfY29sZGVmbGlzdChSYW5nZVRibEZ1bmN0aW9uICpydGZ1bmMsCiAJ CQkJCQkJCQkgICBkZXBhcnNlX2NvbnRleHQgKmNvbnRleHQpOwogc3RhdGljIHZvaWQgZ2V0X3Rh Ymxlc2FtcGxlX2RlZihUYWJsZVNhbXBsZUNsYXVzZSAqdGFibGVzYW1wbGUsCiAJCQkJCQkJCWRl cGFyc2VfY29udGV4dCAqY29udGV4dCk7Ci1zdGF0aWMgdm9pZCBnZXRfb3BjbGFzc19uYW1lKE9p ZCBvcGNsYXNzLCBPaWQgYWN0dWFsX2RhdGF0eXBlLAotCQkJCQkJCSBTdHJpbmdJbmZvIGJ1Zik7 CiBzdGF0aWMgTm9kZSAqcHJvY2Vzc0luZGlyZWN0aW9uKE5vZGUgKm5vZGUsIGRlcGFyc2VfY29u dGV4dCAqY29udGV4dCk7CiBzdGF0aWMgdm9pZCBwcmludFN1YnNjcmlwdHMoU3Vic2NyaXB0aW5n UmVmICpzYnNyZWYsIGRlcGFyc2VfY29udGV4dCAqY29udGV4dCk7CiBzdGF0aWMgY2hhciAqZ2V0 X3JlbGF0aW9uX25hbWUoT2lkIHJlbGlkKTsKIHN0YXRpYyBjaGFyICpnZW5lcmF0ZV9yZWxhdGlv bl9uYW1lKE9pZCByZWxpZCwgTGlzdCAqbmFtZXNwYWNlcyk7CiBzdGF0aWMgY2hhciAqZ2VuZXJh dGVfcXVhbGlmaWVkX3JlbGF0aW9uX25hbWUoT2lkIHJlbGlkKTsKLXN0YXRpYyBjaGFyICpnZW5l cmF0ZV9mdW5jdGlvbl9uYW1lKE9pZCBmdW5jaWQsIGludCBuYXJncywKLQkJCQkJCQkJCUxpc3Qg KmFyZ25hbWVzLCBPaWQgKmFyZ3R5cGVzLAotCQkJCQkJCQkJYm9vbCBoYXNfdmFyaWFkaWMsIGJv b2wgKnVzZV92YXJpYWRpY19wLAotCQkJCQkJCQkJUGFyc2VFeHByS2luZCBzcGVjaWFsX2V4cHJr aW5kKTsKIHN0YXRpYyBjaGFyICpnZW5lcmF0ZV9vcGVyYXRvcl9uYW1lKE9pZCBvcGVyaWQsIE9p ZCBhcmcxLCBPaWQgYXJnMik7CiBzdGF0aWMgdm9pZCBhZGRfY2FzdF90byhTdHJpbmdJbmZvIGJ1 ZiwgT2lkIHR5cGlkKTsKIHN0YXRpYyBjaGFyICpnZW5lcmF0ZV9xdWFsaWZpZWRfdHlwZV9uYW1l KE9pZCB0eXBpZCk7CiBzdGF0aWMgdGV4dCAqc3RyaW5nX3RvX3RleHQoY2hhciAqc3RyKTsKLXN0 YXRpYyBjaGFyICpmbGF0dGVuX3JlbG9wdGlvbnMoT2lkIHJlbGlkKTsKIHN0YXRpYyB2b2lkIGdl dF9yZWxvcHRpb25zKFN0cmluZ0luZm8gYnVmLCBEYXR1bSByZWxvcHRpb25zKTsKIAogI2RlZmlu ZSBvbmx5X21hcmtlcihydGUpICAoKHJ0ZSktPmluaCA/ICIiIDogIk9OTFkgIikKQEAgLTU0NSw2 ICs1MzgsMTA0IEBAIHBnX2dldF9ydWxlZGVmX2V4dChQR19GVU5DVElPTl9BUkdTKQogCVBHX1JF VFVSTl9URVhUX1Aoc3RyaW5nX3RvX3RleHQocmVzKSk7CiB9CiAKKy8qCisgKiBHaXZlbiBhIHBh aXIgb2YgRGF0dW0gY29ycmVzcG9uZGluZyB0byBhIHJ1bGUncyBwZ19yZXdyaXRlLmV2X3F1YWwg YW5kCisgKiBldl9hY3Rpb24gY29sdW1ucywgcmV0dXJuIHRoZWlyIHRleHQgcmVwcmVzZW50YXRp b247IGV2X3F1YWwgYXMgYSBzaW5nbGUKKyAqIHN0cmluZyBpbiB3aGVyZUNsYXVzZSBhbmQgZXZf YWN0aW9uIGFzIGEgTGlzdCBvZiBzdHJpbmdzICh3aGljaCBtaWdodCBiZQorICogTklMLCBzaWdu YWxsaW5nIE5PVEhJTkcpIGluIGFjdGlvbnMuCisgKi8KK3ZvaWQKK3BnX2dldF9ydWxlZGVmX2Rl dGFpbGVkKERhdHVtIGV2X3F1YWwsIERhdHVtIGV2X2FjdGlvbiwKKwkJCQkJCWNoYXIgKip3aGVy ZUNsYXVzZSwgTGlzdCAqKmFjdGlvbnMpCit7CisJaW50CQkJcHJldHR5RmxhZ3MgPSAwOworCWNo YXIJICAgKnF1YWxzdHIgPSBUZXh0RGF0dW1HZXRDU3RyaW5nKGV2X3F1YWwpOworCWNoYXIJICAg KmFjdGlvbnN0ciA9IFRleHREYXR1bUdldENTdHJpbmcoZXZfYWN0aW9uKTsKKwlMaXN0CSAgICph Y3Rpb25Ob2RlTGlzdCA9IChMaXN0ICopIHN0cmluZ1RvTm9kZShhY3Rpb25zdHIpOworCVN0cmlu Z0luZm9EYXRhIGJ1ZjsKKworCSp3aGVyZUNsYXVzZSA9IE5VTEw7CisJKmFjdGlvbnMgPSBOSUw7 CisJaW5pdFN0cmluZ0luZm8oJmJ1Zik7CisJaWYgKHN0cmxlbihxdWFsc3RyKSA+IDAgJiYgc3Ry Y21wKHF1YWxzdHIsICI8PiIpICE9IDApCisJeworCQlOb2RlCSAgICpxdWFsOworCQlRdWVyeQkg ICAqcXVlcnk7CisJCWRlcGFyc2VfY29udGV4dCBjb250ZXh0OworCQlkZXBhcnNlX25hbWVzcGFj ZSBkcG5zOworCisJCXF1YWwgPSBzdHJpbmdUb05vZGUocXVhbHN0cik7CisKKwkJcXVlcnkgPSAo UXVlcnkgKikgbGluaXRpYWwoYWN0aW9uTm9kZUxpc3QpOworCQlxdWVyeSA9IGdldEluc2VydFNl bGVjdFF1ZXJ5KHF1ZXJ5LCBOVUxMKTsKKworCQlBY3F1aXJlUmV3cml0ZUxvY2tzKHF1ZXJ5LCBm YWxzZSwgZmFsc2UpOworCisJCWNvbnRleHQuYnVmID0gJmJ1ZjsKKwkJY29udGV4dC5uYW1lc3Bh Y2VzID0gbGlzdF9tYWtlMSgmZHBucyk7CisJCWNvbnRleHQud2luZG93Q2xhdXNlID0gTklMOwor CQljb250ZXh0LndpbmRvd1RMaXN0ID0gTklMOworCQljb250ZXh0LnZhcnByZWZpeCA9IChsaXN0 X2xlbmd0aChxdWVyeS0+cnRhYmxlKSAhPSAxKTsKKwkJY29udGV4dC5wcmV0dHlGbGFncyA9IHBy ZXR0eUZsYWdzOworCQljb250ZXh0LndyYXBDb2x1bW4gPSBXUkFQX0NPTFVNTl9ERUZBVUxUOwor CQljb250ZXh0LmluZGVudExldmVsID0gUFJFVFRZSU5ERU5UX1NURDsKKworCQlzZXRfZGVwYXJz ZV9mb3JfcXVlcnkoJmRwbnMsIHF1ZXJ5LCBOSUwpOworCisJCWdldF9ydWxlX2V4cHIocXVhbCwg JmNvbnRleHQsIGZhbHNlKTsKKworCQkqd2hlcmVDbGF1c2UgPSBwc3RyZHVwKGJ1Zi5kYXRhKTsK Kwl9CisKKwlpZiAobGlzdF9sZW5ndGgoYWN0aW9uTm9kZUxpc3QpID4gMCkKKwl7CisJCUxpc3RD ZWxsICAgKmNlbGw7CisKKwkJZm9yZWFjaChjZWxsLCBhY3Rpb25Ob2RlTGlzdCkKKwkJeworCQkJ UXVlcnkJICAgKnF1ZXJ5ID0gKFF1ZXJ5ICopIGxmaXJzdChjZWxsKTsKKworCQkJaWYgKHF1ZXJ5 LT5jb21tYW5kVHlwZSA9PSBDTURfTk9USElORykKKwkJCQljb250aW51ZTsKKworCQkJcmVzZXRT dHJpbmdJbmZvKCZidWYpOworCQkJZ2V0X3F1ZXJ5X2RlZihxdWVyeSwgJmJ1ZiwgTklMLCBOVUxM LCB0cnVlLAorCQkJCQkJICBwcmV0dHlGbGFncywgV1JBUF9DT0xVTU5fREVGQVVMVCwgMCk7CisJ CQkqYWN0aW9ucyA9IGxhcHBlbmQoKmFjdGlvbnMsIHBzdHJkdXAoYnVmLmRhdGEpKTsKKwkJfQor CX0KK30KKworLyoKKyAqIFRvIGdldCB0aGUgcmV3cml0ZSBydWxlIG9mIGEgdmlldyB3aGVuIHRo ZSBDUkVBVEUgVklFVyBjb21tYW5kIGV4ZWN1dGlvbiBpcworICogc3RpbGwgaW4gcHJvZ3Jlc3M6 IHdlIHNlYXJjaCB0aGUgc3lzdGVtIGNhY2hlIFJVTEVSRUxOQU1FIHRvIGdldCB0aGUgcmV3cml0 ZQorICogcnVsZSBvZiB0aGUgdmlldyBhcyBvcHBvc2VkIHRvIHF1ZXJ5aW5nIHBnX3Jld3JpdGUg YXMgaW4gcGdfZ2V0X3ZpZXdkZWZfd29ya2VyKCksCisgKiB3aGljaCB3aWxsIHJldHVybiBlbXB0 eSByZXN1bHQuCisgKi8KK2NoYXIgKgorcGdfZ2V0X3ZpZXdkZWZfaW50ZXJuYWwoT2lkIHZpZXdv aWQpCit7CisJU3RyaW5nSW5mb0RhdGEgYnVmOworCVJlbGF0aW9uCXBnX3Jld3JpdGU7CisJSGVh cFR1cGxlCXJ1bGV0dXA7CisJVHVwbGVEZXNjCXJ1bGV0dGM7CisKKwlpbml0U3RyaW5nSW5mbygm YnVmKTsKKwlwZ19yZXdyaXRlID0gdGFibGVfb3BlbihSZXdyaXRlUmVsYXRpb25JZCwgQWNjZXNz U2hhcmVMb2NrKTsKKworCXJ1bGV0dXAgPSBTZWFyY2hTeXNDYWNoZTIoUlVMRVJFTE5BTUUsCisJ CQkJCQkJICBPYmplY3RJZEdldERhdHVtKHZpZXdvaWQpLAorCQkJCQkJCSAgUG9pbnRlckdldERh dHVtKFZpZXdTZWxlY3RSdWxlTmFtZSkpOworCWlmICghSGVhcFR1cGxlSXNWYWxpZChydWxldHVw KSkKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIHJld3JpdGUgcnVsZSBm b3IgdmlldyB3aXRoIE9JRCAldSIsIHZpZXdvaWQpOworCisJcnVsZXR0YyA9IHBnX3Jld3JpdGUt PnJkX2F0dDsKKwltYWtlX3ZpZXdkZWYoJmJ1ZiwgcnVsZXR1cCwgcnVsZXR0YywgMCwgV1JBUF9D T0xVTU5fREVGQVVMVCk7CisJUmVsZWFzZVN5c0NhY2hlKHJ1bGV0dXApOworCXRhYmxlX2Nsb3Nl KHBnX3Jld3JpdGUsIEFjY2Vzc1NoYXJlTG9jayk7CisKKwlyZXR1cm4gYnVmLmRhdGE7Cit9CiAK IHN0YXRpYyBjaGFyICoKIHBnX2dldF9ydWxlZGVmX3dvcmtlcihPaWQgcnVsZW9pZCwgaW50IHBy ZXR0eUZsYWdzKQpAQCAtMTAxNSw2NSArMTEwNiwxMiBAQCBwZ19nZXRfdHJpZ2dlcmRlZl93b3Jr ZXIoT2lkIHRyaWdpZCwgYm9vbCBwcmV0dHkpCiAJaWYgKCFpc251bGwpCiAJewogCQlOb2RlCSAg ICpxdWFsOwotCQljaGFyCQlyZWxraW5kOwotCQlkZXBhcnNlX2NvbnRleHQgY29udGV4dDsKLQkJ ZGVwYXJzZV9uYW1lc3BhY2UgZHBuczsKLQkJUmFuZ2VUYmxFbnRyeSAqb2xkcnRlOwotCQlSYW5n ZVRibEVudHJ5ICpuZXdydGU7Ci0KLQkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZygmYnVmLCAiV0hF TiAoIik7CisJCWNoYXIJICAgKnF1YWxzdHI7CiAKIAkJcXVhbCA9IHN0cmluZ1RvTm9kZShUZXh0 RGF0dW1HZXRDU3RyaW5nKHZhbHVlKSk7CisJCXF1YWxzdHIgPSBwZ19nZXRfdHJpZ2dlcl93aGVu Y2xhdXNlKHRyaWdyZWMsIHF1YWwsIHByZXR0eSk7CiAKLQkJcmVsa2luZCA9IGdldF9yZWxfcmVs a2luZCh0cmlncmVjLT50Z3JlbGlkKTsKLQotCQkvKiBCdWlsZCBtaW5pbWFsIE9MRCBhbmQgTkVX IFJURXMgZm9yIHRoZSByZWwgKi8KLQkJb2xkcnRlID0gbWFrZU5vZGUoUmFuZ2VUYmxFbnRyeSk7 Ci0JCW9sZHJ0ZS0+cnRla2luZCA9IFJURV9SRUxBVElPTjsKLQkJb2xkcnRlLT5yZWxpZCA9IHRy aWdyZWMtPnRncmVsaWQ7Ci0JCW9sZHJ0ZS0+cmVsa2luZCA9IHJlbGtpbmQ7Ci0JCW9sZHJ0ZS0+ cmVsbG9ja21vZGUgPSBBY2Nlc3NTaGFyZUxvY2s7Ci0JCW9sZHJ0ZS0+YWxpYXMgPSBtYWtlQWxp YXMoIm9sZCIsIE5JTCk7Ci0JCW9sZHJ0ZS0+ZXJlZiA9IG9sZHJ0ZS0+YWxpYXM7Ci0JCW9sZHJ0 ZS0+bGF0ZXJhbCA9IGZhbHNlOwotCQlvbGRydGUtPmluaCA9IGZhbHNlOwotCQlvbGRydGUtPmlu RnJvbUNsID0gdHJ1ZTsKLQotCQluZXdydGUgPSBtYWtlTm9kZShSYW5nZVRibEVudHJ5KTsKLQkJ bmV3cnRlLT5ydGVraW5kID0gUlRFX1JFTEFUSU9OOwotCQluZXdydGUtPnJlbGlkID0gdHJpZ3Jl Yy0+dGdyZWxpZDsKLQkJbmV3cnRlLT5yZWxraW5kID0gcmVsa2luZDsKLQkJbmV3cnRlLT5yZWxs b2NrbW9kZSA9IEFjY2Vzc1NoYXJlTG9jazsKLQkJbmV3cnRlLT5hbGlhcyA9IG1ha2VBbGlhcygi bmV3IiwgTklMKTsKLQkJbmV3cnRlLT5lcmVmID0gbmV3cnRlLT5hbGlhczsKLQkJbmV3cnRlLT5s YXRlcmFsID0gZmFsc2U7Ci0JCW5ld3J0ZS0+aW5oID0gZmFsc2U7Ci0JCW5ld3J0ZS0+aW5Gcm9t Q2wgPSB0cnVlOwotCi0JCS8qIEJ1aWxkIHR3by1lbGVtZW50IHJ0YWJsZSAqLwotCQltZW1zZXQo JmRwbnMsIDAsIHNpemVvZihkcG5zKSk7Ci0JCWRwbnMucnRhYmxlID0gbGlzdF9tYWtlMihvbGRy dGUsIG5ld3J0ZSk7Ci0JCWRwbnMuc3VicGxhbnMgPSBOSUw7Ci0JCWRwbnMuY3RlcyA9IE5JTDsK LQkJZHBucy5hcHBlbmRyZWxzID0gTlVMTDsKLQkJc2V0X3J0YWJsZV9uYW1lcygmZHBucywgTklM LCBOVUxMKTsKLQkJc2V0X3NpbXBsZV9jb2x1bW5fbmFtZXMoJmRwbnMpOwotCi0JCS8qIFNldCB1 cCBjb250ZXh0IHdpdGggb25lLWRlZXAgbmFtZXNwYWNlIHN0YWNrICovCi0JCWNvbnRleHQuYnVm ID0gJmJ1ZjsKLQkJY29udGV4dC5uYW1lc3BhY2VzID0gbGlzdF9tYWtlMSgmZHBucyk7Ci0JCWNv bnRleHQud2luZG93Q2xhdXNlID0gTklMOwotCQljb250ZXh0LndpbmRvd1RMaXN0ID0gTklMOwot CQljb250ZXh0LnZhcnByZWZpeCA9IHRydWU7Ci0JCWNvbnRleHQucHJldHR5RmxhZ3MgPSBHRVRf UFJFVFRZX0ZMQUdTKHByZXR0eSk7Ci0JCWNvbnRleHQud3JhcENvbHVtbiA9IFdSQVBfQ09MVU1O X0RFRkFVTFQ7Ci0JCWNvbnRleHQuaW5kZW50TGV2ZWwgPSBQUkVUVFlJTkRFTlRfU1REOwotCQlj b250ZXh0LnNwZWNpYWxfZXhwcmtpbmQgPSBFWFBSX0tJTkRfTk9ORTsKLQkJY29udGV4dC5hcHBl bmRwYXJlbnRzID0gTlVMTDsKLQotCQlnZXRfcnVsZV9leHByKHF1YWwsICZjb250ZXh0LCBmYWxz ZSk7Ci0KLQkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZygmYnVmLCAiKSAiKTsKKwkJYXBwZW5kU3Ry aW5nSW5mbygmYnVmLCAiV0hFTiAoJXMpICIsIHF1YWxzdHIpOwogCX0KIAogCWFwcGVuZFN0cmlu Z0luZm8oJmJ1ZiwgIkVYRUNVVEUgRlVOQ1RJT04gJXMoIiwKQEAgLTExMTQsNiArMTE1Miw2OSBA QCBwZ19nZXRfdHJpZ2dlcmRlZl93b3JrZXIoT2lkIHRyaWdpZCwgYm9vbCBwcmV0dHkpCiAJcmV0 dXJuIGJ1Zi5kYXRhOwogfQogCisvKgorICogUGFyc2UgYmFjayB0aGUgVHJpZ2dlcldoZW4gY2xh dXNlIG9mIGEgdHJpZ2dlciBnaXZlbiB0aGUgcGdfdHJpZ2dlciByZWNvcmQgYW5kCisgKiB0aGUg ZXhwcmVzc2lvbiB0cmVlIChpbiBub2RlVG9TdHJpbmcoKSByZXByZXNlbnRhdGlvbikgZnJvbSBw Z190cmlnZ2VyLnRncXVhbAorICogZm9yIHRoZSB0cmlnZ2VyJ3MgV0hFTiBjb25kaXRpb24uCisg Ki8KK2NoYXIgKgorcGdfZ2V0X3RyaWdnZXJfd2hlbmNsYXVzZShGb3JtX3BnX3RyaWdnZXIgdHJp Z3JlYywgTm9kZSAqd2hlbkNsYXVzZSwgYm9vbCBwcmV0dHkpCit7CisJU3RyaW5nSW5mb0RhdGEg YnVmOworCWNoYXIJCXJlbGtpbmQ7CisJZGVwYXJzZV9jb250ZXh0IGNvbnRleHQ7CisJZGVwYXJz ZV9uYW1lc3BhY2UgZHBuczsKKwlSYW5nZVRibEVudHJ5ICpvbGRydGU7CisJUmFuZ2VUYmxFbnRy eSAqbmV3cnRlOworCisJaW5pdFN0cmluZ0luZm8oJmJ1Zik7CisKKwlyZWxraW5kID0gZ2V0X3Jl bF9yZWxraW5kKHRyaWdyZWMtPnRncmVsaWQpOworCisJLyogQnVpbGQgbWluaW1hbCBPTEQgYW5k IE5FVyBSVEVzIGZvciB0aGUgcmVsICovCisJb2xkcnRlID0gbWFrZU5vZGUoUmFuZ2VUYmxFbnRy eSk7CisJb2xkcnRlLT5ydGVraW5kID0gUlRFX1JFTEFUSU9OOworCW9sZHJ0ZS0+cmVsaWQgPSB0 cmlncmVjLT50Z3JlbGlkOworCW9sZHJ0ZS0+cmVsa2luZCA9IHJlbGtpbmQ7CisJb2xkcnRlLT5h bGlhcyA9IG1ha2VBbGlhcygib2xkIiwgTklMKTsKKwlvbGRydGUtPmVyZWYgPSBvbGRydGUtPmFs aWFzOworCW9sZHJ0ZS0+bGF0ZXJhbCA9IGZhbHNlOworCW9sZHJ0ZS0+aW5oID0gZmFsc2U7CisJ b2xkcnRlLT5pbkZyb21DbCA9IHRydWU7CisKKwluZXdydGUgPSBtYWtlTm9kZShSYW5nZVRibEVu dHJ5KTsKKwluZXdydGUtPnJ0ZWtpbmQgPSBSVEVfUkVMQVRJT047CisJbmV3cnRlLT5yZWxpZCA9 IHRyaWdyZWMtPnRncmVsaWQ7CisJbmV3cnRlLT5yZWxraW5kID0gcmVsa2luZDsKKwluZXdydGUt PmFsaWFzID0gbWFrZUFsaWFzKCJuZXciLCBOSUwpOworCW5ld3J0ZS0+ZXJlZiA9IG5ld3J0ZS0+ YWxpYXM7CisJbmV3cnRlLT5sYXRlcmFsID0gZmFsc2U7CisJbmV3cnRlLT5pbmggPSBmYWxzZTsK KwluZXdydGUtPmluRnJvbUNsID0gdHJ1ZTsKKworCS8qIEJ1aWxkIHR3by1lbGVtZW50IHJ0YWJs ZSAqLworCW1lbXNldCgmZHBucywgMCwgc2l6ZW9mKGRwbnMpKTsKKwlkcG5zLnJ0YWJsZSA9IGxp c3RfbWFrZTIob2xkcnRlLCBuZXdydGUpOworCWRwbnMuY3RlcyA9IE5JTDsKKwlzZXRfcnRhYmxl X25hbWVzKCZkcG5zLCBOSUwsIE5VTEwpOworCXNldF9zaW1wbGVfY29sdW1uX25hbWVzKCZkcG5z KTsKKworCS8qIFNldCB1cCBjb250ZXh0IHdpdGggb25lLWRlZXAgbmFtZXNwYWNlIHN0YWNrICov CisJY29udGV4dC5idWYgPSAmYnVmOworCWNvbnRleHQubmFtZXNwYWNlcyA9IGxpc3RfbWFrZTEo JmRwbnMpOworCWNvbnRleHQud2luZG93Q2xhdXNlID0gTklMOworCWNvbnRleHQud2luZG93VExp c3QgPSBOSUw7CisJY29udGV4dC52YXJwcmVmaXggPSB0cnVlOworCWNvbnRleHQucHJldHR5Rmxh Z3MgPSBwcmV0dHkgPyBQUkVUVFlGTEFHX1BBUkVOIHwgUFJFVFRZRkxBR19JTkRFTlQgOiBQUkVU VFlGTEFHX0lOREVOVDsKKwljb250ZXh0LndyYXBDb2x1bW4gPSBXUkFQX0NPTFVNTl9ERUZBVUxU OworCWNvbnRleHQuaW5kZW50TGV2ZWwgPSBQUkVUVFlJTkRFTlRfU1REOworCWNvbnRleHQuc3Bl Y2lhbF9leHBya2luZCA9IEVYUFJfS0lORF9OT05FOworCisJZ2V0X3J1bGVfZXhwcih3aGVuQ2xh dXNlLCAmY29udGV4dCwgZmFsc2UpOworCisJcmV0dXJuIGJ1Zi5kYXRhOworfQorCiAvKiAtLS0t LS0tLS0tCiAgKiBwZ19nZXRfaW5kZXhkZWYJCQktIEdldCB0aGUgZGVmaW5pdGlvbiBvZiBhbiBp bmRleAogICoKQEAgLTE4ODAsNiArMTk4MSwxMyBAQCBwZ19nZXRfcGFydGtleWRlZl9jb2x1bW5z KE9pZCByZWxpZCwgYm9vbCBwcmV0dHkpCiAJcmV0dXJuIHBnX2dldF9wYXJ0a2V5ZGVmX3dvcmtl cihyZWxpZCwgcHJldHR5RmxhZ3MsIHRydWUsIGZhbHNlKTsKIH0KIAorLyogSW50ZXJuYWwgdmVy c2lvbiB0aGF0IHJlcG9ydHMgdGhlIGZ1bGwgcGFydGl0aW9uIGtleSBkZWZpbml0aW9uICovCitj aGFyICoKK3BnX2dldF9wYXJ0a2V5ZGVmX3NpbXBsZShPaWQgcmVsaWQpCit7CisJcmV0dXJuIHBn X2dldF9wYXJ0a2V5ZGVmX3dvcmtlcihyZWxpZCwgMCwgZmFsc2UsIGZhbHNlKTsKK30KKwogLyoK ICAqIEludGVybmFsIHdvcmtob3JzZSB0byBkZWNvbXBpbGUgYSBwYXJ0aXRpb24ga2V5IGRlZmlu aXRpb24uCiAgKi8KQEAgLTIxMzEsNiArMjIzOSwxNSBAQCBwZ19nZXRfY29uc3RyYWludGRlZl9l eHQoUEdfRlVOQ1RJT05fQVJHUykKIAlQR19SRVRVUk5fVEVYVF9QKHN0cmluZ190b190ZXh0KHJl cykpOwogfQogCisvKgorICogSW50ZXJuYWwgdmVyc2lvbiB0aGF0IHJldHVybnMgdGhlIGRlZmlu aXRpb24gb2YgYSBDT05TVFJBSU5UIGNvbW1hbmQKKyAqLworY2hhciAqCitwZ19nZXRfY29uc3Ry YWludGRlZl9jb21tYW5kX3NpbXBsZShPaWQgY29uc3RyYWludElkKQoreworCXJldHVybiBwZ19n ZXRfY29uc3RyYWludGRlZl93b3JrZXIoY29uc3RyYWludElkLCBmYWxzZSwgMCwgZmFsc2UpOwor fQorCiAvKgogICogSW50ZXJuYWwgdmVyc2lvbiB0aGF0IHJldHVybnMgYSBmdWxsIEFMVEVSIFRB QkxFIC4uLiBBREQgQ09OU1RSQUlOVCBjb21tYW5kCiAgKi8KQEAgLTM1MDEsNyArMzYxOCwxMiBA QCBwZ19nZXRfZnVuY3Rpb25fYXJnX2RlZmF1bHQoUEdfRlVOQ1RJT05fQVJHUykKIAlQR19SRVRV Uk5fVEVYVF9QKHN0cmluZ190b190ZXh0KHN0cikpOwogfQogCi1zdGF0aWMgdm9pZAorLyoKKyAq IFByb2R1Y2UgdGhlIGZvcm1hdHRlZCBTUUwgYm9keSAobm90IHRoZSB3aG9sZSBmdW5jdGlvbiBk ZWZpbml0aW9uKQorICogb2YgYSBmdW5jdGlvbiBnaXZlbiB0aGUgcGdfcHJvYyB0dXBsZS4gU2F2 ZSB0aGUgZm9ybWF0dGVkIFNRTCBpbiB0aGUKKyAqIGdpdmVuIFN0cmluZ0luZm8uCisgKi8KK3Zv aWQKIHByaW50X2Z1bmN0aW9uX3NxbGJvZHkoU3RyaW5nSW5mbyBidWYsIEhlYXBUdXBsZSBwcm9j dHVwKQogewogCWludAkJCW51bWFyZ3M7CkBAIC0xMTM1Nyw3ICsxMTQ3OSw3IEBAIGdldF90YWJs ZXNhbXBsZV9kZWYoVGFibGVTYW1wbGVDbGF1c2UgKnRhYmxlc2FtcGxlLCBkZXBhcnNlX2NvbnRl eHQgKmNvbnRleHQpCiAgKiBhY3R1YWxfZGF0YXR5cGUuICAoSWYgeW91IGRvbid0IHdhbnQgdGhp cyBiZWhhdmlvciwganVzdCBwYXNzCiAgKiBJbnZhbGlkT2lkIGZvciBhY3R1YWxfZGF0YXR5cGUu KQogICovCi1zdGF0aWMgdm9pZAordm9pZAogZ2V0X29wY2xhc3NfbmFtZShPaWQgb3BjbGFzcywg T2lkIGFjdHVhbF9kYXRhdHlwZSwKIAkJCQkgU3RyaW5nSW5mbyBidWYpCiB7CkBAIC0xMTc1MSw3 ICsxMTg3Myw3IEBAIGdlbmVyYXRlX3F1YWxpZmllZF9yZWxhdGlvbl9uYW1lKE9pZCByZWxpZCkK ICAqCiAgKiBUaGUgcmVzdWx0IGluY2x1ZGVzIGFsbCBuZWNlc3NhcnkgcXVvdGluZyBhbmQgc2No ZW1hLXByZWZpeGluZy4KICAqLwotc3RhdGljIGNoYXIgKgorY2hhciAqCiBnZW5lcmF0ZV9mdW5j dGlvbl9uYW1lKE9pZCBmdW5jaWQsIGludCBuYXJncywgTGlzdCAqYXJnbmFtZXMsIE9pZCAqYXJn dHlwZXMsCiAJCQkJCSAgIGJvb2wgaGFzX3ZhcmlhZGljLCBib29sICp1c2VfdmFyaWFkaWNfcCwK IAkJCQkJICAgUGFyc2VFeHByS2luZCBzcGVjaWFsX2V4cHJraW5kKQpAQCAtMTIxMzcsNyArMTIy NTksNyBAQCBnZXRfcmVsb3B0aW9ucyhTdHJpbmdJbmZvIGJ1ZiwgRGF0dW0gcmVsb3B0aW9ucykK IC8qCiAgKiBHZW5lcmF0ZSBhIEMgc3RyaW5nIHJlcHJlc2VudGluZyBhIHJlbGF0aW9uJ3MgcmVs b3B0aW9ucywgb3IgTlVMTCBpZiBub25lLgogICovCi1zdGF0aWMgY2hhciAqCitjaGFyICoKIGZs YXR0ZW5fcmVsb3B0aW9ucyhPaWQgcmVsaWQpCiB7CiAJY2hhcgkgICAqcmVzdWx0ID0gTlVMTDsK ZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2NvbW1hbmRzL2NvbGxhdGlvbmNtZHMuaCBiL3NyYy9p bmNsdWRlL2NvbW1hbmRzL2NvbGxhdGlvbmNtZHMuaAppbmRleCAyMDFiMTlmOGI3Li40NmQxODM3 NjBhIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9jb21tYW5kcy9jb2xsYXRpb25jbWRzLmgKKysr IGIvc3JjL2luY2x1ZGUvY29tbWFuZHMvY29sbGF0aW9uY21kcy5oCkBAIC0xOCw3ICsxOCw4IEBA CiAjaW5jbHVkZSAiY2F0YWxvZy9vYmplY3RhZGRyZXNzLmgiCiAjaW5jbHVkZSAicGFyc2VyL3Bh cnNlX25vZGUuaCIKIAotZXh0ZXJuIE9iamVjdEFkZHJlc3MgRGVmaW5lQ29sbGF0aW9uKFBhcnNl U3RhdGUgKnBzdGF0ZSwgTGlzdCAqbmFtZXMsIExpc3QgKnBhcmFtZXRlcnMsIGJvb2wgaWZfbm90 X2V4aXN0cyk7CitleHRlcm4gT2JqZWN0QWRkcmVzcyBEZWZpbmVDb2xsYXRpb24oUGFyc2VTdGF0 ZSAqcHN0YXRlLCBMaXN0ICpuYW1lcywgTGlzdCAqcGFyYW1ldGVycywKKwkJCQkJCQkJCSAgYm9v bCBpZl9ub3RfZXhpc3RzLCBPYmplY3RBZGRyZXNzICpmcm9tX2NvbGxpZCk7CiBleHRlcm4gdm9p ZCBJc1RoZXJlQ29sbGF0aW9uSW5OYW1lc3BhY2UoY29uc3QgY2hhciAqY29sbG5hbWUsIE9pZCBu c3BPaWQpOwogZXh0ZXJuIE9iamVjdEFkZHJlc3MgQWx0ZXJDb2xsYXRpb24oQWx0ZXJDb2xsYXRp b25TdG10ICpzdG10KTsKIApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvY29tbWFuZHMvZXZlbnRf dHJpZ2dlci5oIGIvc3JjL2luY2x1ZGUvY29tbWFuZHMvZXZlbnRfdHJpZ2dlci5oCmluZGV4IDEw MDkxYzNhYWYuLjQ3MDk0NzUyZTkgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2NvbW1hbmRzL2V2 ZW50X3RyaWdnZXIuaAorKysgYi9zcmMvaW5jbHVkZS9jb21tYW5kcy9ldmVudF90cmlnZ2VyLmgK QEAgLTE2LDYgKzE2LDcgQEAKICNpbmNsdWRlICJjYXRhbG9nL2RlcGVuZGVuY3kuaCIKICNpbmNs dWRlICJjYXRhbG9nL29iamVjdGFkZHJlc3MuaCIKICNpbmNsdWRlICJjYXRhbG9nL3BnX2V2ZW50 X3RyaWdnZXIuaCIKKyNpbmNsdWRlICJsaWIvaWxpc3QuaCIKICNpbmNsdWRlICJub2Rlcy9wYXJz ZW5vZGVzLmgiCiAjaW5jbHVkZSAidGNvcC9jbWR0YWcuaCIKICNpbmNsdWRlICJ0Y29wL2RlcGFy c2VfdXRpbGl0eS5oIgpAQCAtMjksNiArMzAsNDQgQEAgdHlwZWRlZiBzdHJ1Y3QgRXZlbnRUcmln Z2VyRGF0YQogCUNvbW1hbmRUYWcJdGFnOwogfSBFdmVudFRyaWdnZXJEYXRhOwogCit0eXBlZGVm IHN0cnVjdCBFdmVudFRyaWdnZXJRdWVyeVN0YXRlCit7CisJLyogbWVtb3J5IGNvbnRleHQgZm9y IHRoaXMgc3RhdGUncyBvYmplY3RzICovCisJTWVtb3J5Q29udGV4dCBjeHQ7CisKKwkvKiBzcWxf ZHJvcCAqLworCXNsaXN0X2hlYWQJU1FMRHJvcExpc3Q7CisJYm9vbAkJaW5fc3FsX2Ryb3A7CisK KwkvKiB0YWJsZV9yZXdyaXRlICovCisJT2lkCQkJdGFibGVfcmV3cml0ZV9vaWQ7CS8qIEludmFs aWRPaWQsIG9yIHNldCBmb3IgdGFibGVfcmV3cml0ZQorCQkJCQkJCQkJICogZXZlbnQgKi8KKwlp bnQJCQl0YWJsZV9yZXdyaXRlX3JlYXNvbjsJLyogQVRfUkVXUklURSByZWFzb24gKi8KKworCS8q IFN1cHBvcnQgZm9yIGNvbW1hbmQgY29sbGVjdGlvbiAqLworCWJvb2wJCWNvbW1hbmRDb2xsZWN0 aW9uSW5oaWJpdGVkOworCUNvbGxlY3RlZENvbW1hbmQgKmN1cnJlbnRDb21tYW5kOworCUxpc3QJ ICAgKmNvbW1hbmRMaXN0OwkvKiBsaXN0IG9mIENvbGxlY3RlZENvbW1hbmQ7IHNlZQorCQkJCQkJ CQkgKiBkZXBhcnNlX3V0aWxpdHkuaCAqLworCXN0cnVjdCBFdmVudFRyaWdnZXJRdWVyeVN0YXRl ICpwcmV2aW91czsKK30gRXZlbnRUcmlnZ2VyUXVlcnlTdGF0ZTsKKworLyogU3VwcG9ydCBmb3Ig ZHJvcHBlZCBvYmplY3RzICovCit0eXBlZGVmIHN0cnVjdCBTUUxEcm9wT2JqZWN0Cit7CisJT2Jq ZWN0QWRkcmVzcyBhZGRyZXNzOworCWNvbnN0IGNoYXIgKnNjaGVtYW5hbWU7CisJY29uc3QgY2hh ciAqb2JqbmFtZTsKKwljb25zdCBjaGFyICpvYmppZGVudGl0eTsKKwljb25zdCBjaGFyICpvYmpl Y3R0eXBlOworCUxpc3QJICAgKmFkZHJuYW1lczsKKwlMaXN0CSAgICphZGRyYXJnczsKKwlib29s CQlvcmlnaW5hbDsKKwlib29sCQlub3JtYWw7CisJYm9vbAkJaXN0ZW1wOworCXNsaXN0X25vZGUJ bmV4dDsKK30gU1FMRHJvcE9iamVjdDsKKwogI2RlZmluZSBBVF9SRVdSSVRFX0FMVEVSX1BFUlNJ U1RFTkNFCTB4MDEKICNkZWZpbmUgQVRfUkVXUklURV9ERUZBVUxUX1ZBTAkJCTB4MDIKICNkZWZp bmUgQVRfUkVXUklURV9DT0xVTU5fUkVXUklURQkJMHgwNApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1 ZGUvY29tbWFuZHMvc2VxdWVuY2UuaCBiL3NyYy9pbmNsdWRlL2NvbW1hbmRzL3NlcXVlbmNlLmgK aW5kZXggYjNiMDRjY2ZhOS4uYzJiMWNhMzJmNiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvY29t bWFuZHMvc2VxdWVuY2UuaAorKysgYi9zcmMvaW5jbHVkZS9jb21tYW5kcy9zZXF1ZW5jZS5oCkBA IC01NCw2ICs1NCw3IEBAIHR5cGVkZWYgc3RydWN0IHhsX3NlcV9yZWMKIGV4dGVybiBpbnQ2NCBu ZXh0dmFsX2ludGVybmFsKE9pZCByZWxpZCwgYm9vbCBjaGVja19wZXJtaXNzaW9ucyk7CiBleHRl cm4gRGF0dW0gbmV4dHZhbChQR19GVU5DVElPTl9BUkdTKTsKIGV4dGVybiBMaXN0ICpzZXF1ZW5j ZV9vcHRpb25zKE9pZCByZWxpZCk7CitleHRlcm4gRm9ybV9wZ19zZXF1ZW5jZV9kYXRhIGdldF9z ZXF1ZW5jZV92YWx1ZXMoT2lkIHNlcXVlbmNlSWQpOwogCiBleHRlcm4gT2JqZWN0QWRkcmVzcyBE ZWZpbmVTZXF1ZW5jZShQYXJzZVN0YXRlICpwc3RhdGUsIENyZWF0ZVNlcVN0bXQgKnNlcSk7CiBl eHRlcm4gT2JqZWN0QWRkcmVzcyBBbHRlclNlcXVlbmNlKFBhcnNlU3RhdGUgKnBzdGF0ZSwgQWx0 ZXJTZXFTdG10ICpzdG10KTsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3Rjb3AvdXRpbGl0eS5o IGIvc3JjL2luY2x1ZGUvdGNvcC91dGlsaXR5LmgKaW5kZXggZjlkYWY1Yjc0NC4uZjkyYmJmODg0 MyAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvdGNvcC91dGlsaXR5LmgKKysrIGIvc3JjL2luY2x1 ZGUvdGNvcC91dGlsaXR5LmgKQEAgLTk5LDYgKzk5LDggQEAgZXh0ZXJuIFF1ZXJ5ICpVdGlsaXR5 Q29udGFpbnNRdWVyeShOb2RlICpwYXJzZXRyZWUpOwogCiBleHRlcm4gQ29tbWFuZFRhZyBDcmVh dGVDb21tYW5kVGFnKE5vZGUgKnBhcnNldHJlZSk7CiAKK2V4dGVybiBjb25zdCBjaGFyICpzdHJp bmdpZnlfb2JqdHlwZShPYmplY3RUeXBlIG9ianR5cGUsIGJvb2wgaXNncmFudCk7CisKIHN0YXRp YyBpbmxpbmUgY29uc3QgY2hhciAqCiBDcmVhdGVDb21tYW5kTmFtZShOb2RlICpwYXJzZXRyZWUp CiB7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS91dGlscy9hY2wuaCBiL3NyYy9pbmNsdWRlL3V0 aWxzL2FjbC5oCmluZGV4IDY5ZWI0MzczNzYuLmMwZTIwMmI0NGUgMTAwNjQ0Ci0tLSBhL3NyYy9p bmNsdWRlL3V0aWxzL2FjbC5oCisrKyBiL3NyYy9pbmNsdWRlL3V0aWxzL2FjbC5oCkBAIC0yMDks NiArMjA5LDggQEAgZXh0ZXJuIEFjbE1vZGUgYWNsbWFzayhjb25zdCBBY2wgKmFjbCwgT2lkIHJv bGVpZCwgT2lkIG93bmVySWQsCiAJCQkJCSAgIEFjbE1vZGUgbWFzaywgQWNsTWFza0hvdyBob3cp OwogZXh0ZXJuIGludAlhY2xtZW1iZXJzKGNvbnN0IEFjbCAqYWNsLCBPaWQgKipyb2xlaWRzKTsK IAorZXh0ZXJuIGNvbnN0IGNoYXIgKnByaXZpbGVnZV90b19zdHJpbmcoQWNsTW9kZSBwcml2aWxl Z2UpOworCiBleHRlcm4gYm9vbCBoYXNfcHJpdnNfb2Zfcm9sZShPaWQgbWVtYmVyLCBPaWQgcm9s ZSk7CiBleHRlcm4gYm9vbCBtZW1iZXJfY2FuX3NldF9yb2xlKE9pZCBtZW1iZXIsIE9pZCByb2xl KTsKIGV4dGVybiB2b2lkIGNoZWNrX2Nhbl9zZXRfcm9sZShPaWQgbWVtYmVyLCBPaWQgcm9sZSk7 CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS91dGlscy9hY2xjaGtfaW50ZXJuYWwuaCBiL3NyYy9p bmNsdWRlL3V0aWxzL2FjbGNoa19pbnRlcm5hbC5oCmluZGV4IDM2MTI4NGQ4ZWIuLjRlMDIwZWY0 YWUgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3V0aWxzL2FjbGNoa19pbnRlcm5hbC5oCisrKyBi L3NyYy9pbmNsdWRlL3V0aWxzL2FjbGNoa19pbnRlcm5hbC5oCkBAIC0zOSw2ICszOSw3IEBAIHR5 cGVkZWYgc3RydWN0CiAJTGlzdAkgICAqZ3JhbnRlZXM7CiAJYm9vbAkJZ3JhbnRfb3B0aW9uOwog CURyb3BCZWhhdmlvciBiZWhhdmlvcjsKKwlPaWQJCQlncmFudG9yX3VpZDsKIH0gSW50ZXJuYWxH cmFudDsKIAogCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS91dGlscy9idWlsdGlucy5oIGIvc3Jj L2luY2x1ZGUvdXRpbHMvYnVpbHRpbnMuaAppbmRleCBhNGEyMGI1YTQ1Li45YmZlMDg1ODlmIDEw MDY0NAotLS0gYS9zcmMvaW5jbHVkZS91dGlscy9idWlsdGlucy5oCisrKyBiL3NyYy9pbmNsdWRl L3V0aWxzL2J1aWx0aW5zLmgKQEAgLTEyMywxMCArMTIzLDEyIEBAIGV4dGVybiBEYXR1bSBudW1l cmljX2Zsb2F0OF9ub19vdmVyZmxvdyhQR19GVU5DVElPTl9BUkdTKTsKICNkZWZpbmUgRk9STUFU X1RZUEVfRk9SQ0VfUVVBTElGWQkweDA0CS8qIGZvcmNlIHF1YWxpZmljYXRpb24gb2YgdHlwZSAq LwogI2RlZmluZSBGT1JNQVRfVFlQRV9JTlZBTElEX0FTX05VTEwJMHgwOAkvKiBOVUxMIGlmIHVu ZGVmaW5lZCAqLwogZXh0ZXJuIGNoYXIgKmZvcm1hdF90eXBlX2V4dGVuZGVkKE9pZCB0eXBlX29p ZCwgaW50MzIgdHlwZW1vZCwgYml0czE2IGZsYWdzKTsKK2V4dGVybiBjaGFyICpmb3JtYXRfcHJv Y2VkdXJlX2FyZ3MoT2lkIHByb2NlZHVyZV9vaWQsIGJvb2wgZm9yY2VfcXVhbGlmeSk7CiAKIGV4 dGVybiBjaGFyICpmb3JtYXRfdHlwZV9iZShPaWQgdHlwZV9vaWQpOwogZXh0ZXJuIGNoYXIgKmZv cm1hdF90eXBlX2JlX3F1YWxpZmllZChPaWQgdHlwZV9vaWQpOwogZXh0ZXJuIGNoYXIgKmZvcm1h dF90eXBlX3dpdGhfdHlwZW1vZChPaWQgdHlwZV9vaWQsIGludDMyIHR5cGVtb2QpOworZXh0ZXJu IGNoYXIgKnByaW50VHlwbW9kKGNvbnN0IGNoYXIgKnR5cG5hbWUsIGludDMyIHR5cG1vZCwgT2lk IHR5cG1vZG91dCk7CiAKIGV4dGVybiBpbnQzMiB0eXBlX21heGltdW1fc2l6ZShPaWQgdHlwZV9v aWQsIGludDMyIHR5cGVtb2QpOwogCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS91dGlscy9ydWxl dXRpbHMuaCBiL3NyYy9pbmNsdWRlL3V0aWxzL3J1bGV1dGlscy5oCmluZGV4IDdkNDg5NzE4YTMu LmVjNmVmODAxNjQgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3V0aWxzL3J1bGV1dGlscy5oCisr KyBiL3NyYy9pbmNsdWRlL3V0aWxzL3J1bGV1dGlscy5oCkBAIC0xMyw5ICsxMywxMiBAQAogI2lm bmRlZiBSVUxFVVRJTFNfSAogI2RlZmluZSBSVUxFVVRJTFNfSAogCisjaW5jbHVkZSAiYWNjZXNz L2h0dXAuaCIKKyNpbmNsdWRlICJjYXRhbG9nL3BnX3RyaWdnZXIuaCIKICNpbmNsdWRlICJub2Rl cy9ub2Rlcy5oIgogI2luY2x1ZGUgIm5vZGVzL3BhcnNlbm9kZXMuaCIKICNpbmNsdWRlICJub2Rl cy9wZ19saXN0LmgiCisjaW5jbHVkZSAicGFyc2VyL3BhcnNlX25vZGUuaCIKIAogc3RydWN0IFBs YW47CQkJCQkvKiBhdm9pZCBpbmNsdWRpbmcgcGxhbm5vZGVzLmggaGVyZSAqLwogc3RydWN0IFBs YW5uZWRTdG10OwpAQCAtMjMsMTIgKzI2LDIwIEBAIHN0cnVjdCBQbGFubmVkU3RtdDsKIAogZXh0 ZXJuIGNoYXIgKnBnX2dldF9pbmRleGRlZl9zdHJpbmcoT2lkIGluZGV4cmVsaWQpOwogZXh0ZXJu IGNoYXIgKnBnX2dldF9pbmRleGRlZl9jb2x1bW5zKE9pZCBpbmRleHJlbGlkLCBib29sIHByZXR0 eSk7CitleHRlcm4gY2hhciAqcGdfZ2V0X3RyaWdnZXJfd2hlbmNsYXVzZShGb3JtX3BnX3RyaWdn ZXIgdHJpZ3JlYywKKwkJCQkJCQkJCSAgIE5vZGUgKndoZW5DbGF1c2UsIGJvb2wgcHJldHR5KTsK IGV4dGVybiBjaGFyICpwZ19nZXRfcXVlcnlkZWYoUXVlcnkgKnF1ZXJ5LCBib29sIHByZXR0eSk7 CitleHRlcm4gY2hhciAqcGdfZ2V0X3ZpZXdkZWZfaW50ZXJuYWwoT2lkIHZpZXdvaWQpOwogCiBl eHRlcm4gY2hhciAqcGdfZ2V0X3BhcnRrZXlkZWZfY29sdW1ucyhPaWQgcmVsaWQsIGJvb2wgcHJl dHR5KTsKK2V4dGVybiBjaGFyICpwZ19nZXRfcGFydGtleWRlZl9zaW1wbGUoT2lkIHJlbGlkKTsK IGV4dGVybiBjaGFyICpwZ19nZXRfcGFydGNvbnN0cmRlZl9zdHJpbmcoT2lkIHBhcnRpdGlvbklk LCBjaGFyICphbGlhc25hbWUpOwogCiBleHRlcm4gY2hhciAqcGdfZ2V0X2NvbnN0cmFpbnRkZWZf Y29tbWFuZChPaWQgY29uc3RyYWludElkKTsKK2V4dGVybiBjaGFyICpwZ19nZXRfY29uc3RyYWlu dGRlZl9jb21tYW5kX3NpbXBsZShPaWQgY29uc3RyYWludElkKTsKK2V4dGVybiB2b2lkIHBnX2dl dF9ydWxlZGVmX2RldGFpbGVkKERhdHVtIGV2X3F1YWwsIERhdHVtIGV2X2FjdGlvbiwKKwkJCQkJ CQkJCWNoYXIgKip3aGVyZUNsYXVzZSwgTGlzdCAqKmFjdGlvbnMpOworCiBleHRlcm4gY2hhciAq ZGVwYXJzZV9leHByZXNzaW9uKE5vZGUgKmV4cHIsIExpc3QgKmRwY29udGV4dCwKIAkJCQkJCQkJ Ym9vbCBmb3JjZXByZWZpeCwgYm9vbCBzaG93aW1wbGljaXQpOwogZXh0ZXJuIExpc3QgKmRlcGFy c2VfY29udGV4dF9mb3IoY29uc3QgY2hhciAqYWxpYXNuYW1lLCBPaWQgcmVsaWQpOwpAQCAtNDAs OCArNTEsMTYgQEAgZXh0ZXJuIExpc3QgKnNlbGVjdF9ydGFibGVfbmFtZXNfZm9yX2V4cGxhaW4o TGlzdCAqcnRhYmxlLAogCQkJCQkJCQkJCQkgQml0bWFwc2V0ICpyZWxzX3VzZWQpOwogZXh0ZXJu IGNoYXIgKmdlbmVyYXRlX2NvbGxhdGlvbl9uYW1lKE9pZCBjb2xsaWQpOwogZXh0ZXJuIGNoYXIg KmdlbmVyYXRlX29wY2xhc3NfbmFtZShPaWQgb3BjbGFzcyk7CitleHRlcm4gY2hhciAqZ2VuZXJh dGVfZnVuY3Rpb25fbmFtZShPaWQgZnVuY2lkLCBpbnQgbmFyZ3MsIExpc3QgKmFyZ25hbWVzLAor CQkJCQkJCQkJT2lkICphcmd0eXBlcywgYm9vbCBoYXNfdmFyaWFkaWMsCisJCQkJCQkJCQlib29s ICp1c2VfdmFyaWFkaWNfcCwKKwkJCQkJCQkJCVBhcnNlRXhwcktpbmQgc3BlY2lhbF9leHBya2lu ZCk7CiBleHRlcm4gY2hhciAqZ2V0X3JhbmdlX3BhcnRib3VuZF9zdHJpbmcoTGlzdCAqYm91bmRf ZGF0dW1zKTsKK2V4dGVybiB2b2lkIGdldF9vcGNsYXNzX25hbWUoT2lkIG9wY2xhc3MsIE9pZCBh Y3R1YWxfZGF0YXR5cGUsCisJCQkJCQkJIFN0cmluZ0luZm8gYnVmKTsKK2V4dGVybiBjaGFyICpm bGF0dGVuX3JlbG9wdGlvbnMoT2lkIHJlbGlkKTsKIAogZXh0ZXJuIGNoYXIgKnBnX2dldF9zdGF0 aXN0aWNzb2JqZGVmX3N0cmluZyhPaWQgc3RhdGV4dGlkKTsKK2V4dGVybiB2b2lkIHByaW50X2Z1 bmN0aW9uX3NxbGJvZHkoU3RyaW5nSW5mbyBidWYsIEhlYXBUdXBsZSBwcm9jdHVwKTsKIAogI2Vu ZGlmCQkJCQkJCS8qIFJVTEVVVElMU19IICovCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNz L2V4cGVjdGVkL29iamVjdF9hZGRyZXNzLm91dCBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQv b2JqZWN0X2FkZHJlc3Mub3V0CmluZGV4IDI1YzE3NGYyNzUuLmZjNDJkNDE4YmYgMTAwNjQ0Ci0t LSBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvb2JqZWN0X2FkZHJlc3Mub3V0CisrKyBiL3Ny Yy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvb2JqZWN0X2FkZHJlc3Mub3V0CkBAIC00OTYsNyArNDk2 LDcgQEAgb3BlcmF0b3IgZmFtaWx5fHBnX2NhdGFsb2d8aW50ZWdlcl9vcHN8cGdfY2F0YWxvZy5p bnRlZ2VyX29wcyBVU0lORyBidHJlZXx0CiBwb2xpY3l8TlVMTHxOVUxMfGdlbnBvbCBvbiBhZGRy X25zcC5nZW50YWJsZXx0CiBzdGF0aXN0aWNzIG9iamVjdHxhZGRyX25zcHxnZW50YWJsZV9zdGF0 fGFkZHJfbnNwLmdlbnRhYmxlX3N0YXR8dAogY29sbGF0aW9ufHBnX2NhdGFsb2d8ImRlZmF1bHQi fHBnX2NhdGFsb2cuImRlZmF1bHQifHQKLXRyYW5zZm9ybXxOVUxMfE5VTEx8Zm9yIGludGVnZXIg b24gbGFuZ3VhZ2Ugc3FsfHQKK3RyYW5zZm9ybXxOVUxMfE5VTEx8Zm9yIGludGVnZXIgbGFuZ3Vh Z2Ugc3FsfHQKIHRleHQgc2VhcmNoIGRpY3Rpb25hcnl8YWRkcl9uc3B8YWRkcl90c19kaWN0fGFk ZHJfbnNwLmFkZHJfdHNfZGljdHx0CiB0ZXh0IHNlYXJjaCBwYXJzZXJ8YWRkcl9uc3B8YWRkcl90 c19wcnN8YWRkcl9uc3AuYWRkcl90c19wcnN8dAogdGV4dCBzZWFyY2ggY29uZmlndXJhdGlvbnxh ZGRyX25zcHxhZGRyX3RzX2NvbmZ8YWRkcl9uc3AuYWRkcl90c19jb25mfHQKLS0gCjIuMzguMQoK --000000000000e219be05f0eb1648 Content-Type: application/octet-stream; name="v58-0002-Functions-to-deparse-DDL-commands.patch" Content-Disposition: attachment; filename="v58-0002-Functions-to-deparse-DDL-commands.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lc88sdmz1 RnJvbSA2ZDkzNzFjMzM1ZjE1NmE5ZTNkODcxYWI5OWQwN2IyMzZkZDdlNzJhIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBWaWduZXNoIEMgPHZpZ25lc2gyMUBnbWFpbC5jb20+CkRhdGU6 IFdlZCwgMjEgRGVjIDIwMjIgMTc6MTU6MDggKzA1MzAKU3ViamVjdDogW1BBVENIIDIvNV0gRnVu Y3Rpb25zIHRvIGRlcGFyc2UgRERMIGNvbW1hbmRzLgoKVGhpcyBwYXRjaCBwcm92aWRlcyBKU09O IGJsb2JzIHJlcHJlc2VudGluZyBEREwgY29tbWFuZHMsIHdoaWNoIGNhbgpsYXRlciBiZSByZS1w cm9jZXNzZWQgaW50byBwbGFpbiBzdHJpbmdzIGJ5IHdlbGwtZGVmaW5lZCBzcHJpbnRmLWxpa2UK ZXhwYW5zaW9uLiBUaGVzZSBKU09OIG9iamVjdHMgYXJlIGludGVuZGVkIHRvIGFsbG93IGZvciBt YWNoaW5lLWVkaXRpbmcgb2YKdGhlIGNvbW1hbmRzLCBieSByZXBsYWNpbmcgY2VydGFpbiBub2Rl cyB3aXRoaW4gdGhlIG9iamVjdHMuCgpNdWNoIG9mIHRoZSBpbmZvcm1hdGlvbiBpbiB0aGUgb3V0 cHV0IGJsb2IgYWN0dWFsbHkgY29tZXMgZnJvbSBzeXN0ZW0KY2F0YWxvZ3MsIG5vdCBmcm9tIHRo ZSBjb21tYW5kIHBhcnNlIG5vZGUsIGFzIGl0IGlzIGltcG9zc2libGUgdG8gcmVsaWFibHkKY29u c3RydWN0IGEgZnVsbHktc3BlY2lmaWVkIGNvbW1hbmQgKGkuZS4gb25lIG5vdCBkZXBlbmRlbnQg b24gc2VhcmNoX3BhdGgKZXRjKSBsb29raW5nIG9ubHkgYXQgdGhlIHBhcnNlIG5vZGUuCgpUaGlz IHByb3ZpZGVzIGEgYmFzZSBmb3IgbG9naWNhbCByZXBsaWNhdGlvbiBvZiBEREwgc3RhdGVtZW50 cy4gQ3VycmVudGx5LAp0aGUgcGF0Y2ggaGFzIHN1cHBvcnQgZm9yOgoKQ1JFQVRFL0RST1AgQUND RVNTIE1FVEhPRApDUkVBVEUvQUxURVIvRFJPUCBDQVNUCkNSRUFURS9BTFRFUi9EUk9QIENPTExB VElPTgpDT01NRU5UCkNSRUFURS9BTFRFUi9EUk9QIENPTlZFUlNJT04KQUxURVIgREVGQVVMVCBQ UklWSUxFR0VTCkNSRUFURS9BTFRFUi9EUk9QIERPTUFJTgpDUkVBVEUvQUxURVIvRFJPUCBFWFRF TlNJT04KQ1JFQVRFL0FMVEVSL0RST1AgRk9SRUlHTiBEQVRBIFdSQVBQRVIKQ1JFQVRFL0FMVEVS L0RST1AgRk9SRUlHTiBUQUJMRQpDUkVBVEUvQUxURVIgRlVOQ1RJT04vUFJPQ0VEVVJFCkdSQU5U CkNSRUFURS9EUk9QIElOREVYCkNSRUFURS9BTFRFUi9EUk9QIExBTkdVQUdFCkNSRUFURS9BTFRF Ui9EUk9QIE1BVEVSSUFMSVpFRCBWSUVXCkNSRUFURS9EUk9QIE9QRVJBVE9SIFtDTEFTUy9GQU1J TFldCkNSRUFURS9BTFRFUi9EUk9QIFBPTElDWQpSRUZSRVNIIE1BVEVSSUFMSVpFRCBWSUVXClJF Vk9LRQpBTFRFUi9EUk9QIFJPVVRJTkUKQ1JFQVRFL0FMVEVSL0RST1AgUlVMRQpDUkVBVEUvQUxU RVIvRFJPUCBTQ0hFTUEKQ1JFQVRFL0FMVEVSL0RST1AgU0VRVUVOQ0UKQ1JFQVRFL0FMVEVSL0RS T1AgU0VSVkVSCkNSRUFURS9BTFRFUi9EUk9QIFNUQVRJU1RJQ1MKQ1JFQVRFL0FMVEVSL0RST1Ag VEFCTEUgLS0gTm90ZSAjMSwgTm90ZSAjMgpDUkVBVEUvQUxURVIvRFJPUCBURVhUIFNFQVJDSCBD T05GSUdVUkFUSU9OL1BBUlNFUi9ESUNUSU9OQVJZL1RFTVBMQVRFCkNSRUFURS9EUk9QIFRSQU5T Rk9STQpDUkVBVEUvQUxURVIgVFJJR0dFUgpDUkVBVEUvQUxURVIvRFJPUCBUWVBFCkNSRUFURS9B TFRFUi9EUk9QIFVTRVIgTUFQUElORwpDUkVBVEUvQUxURVIvRFJPUCBWSUVXIC0tIE5vdGUgIzQK U0VDVVJJVFkgTEFCRUwKCihOb3RlICMxKSBTb21lIHJlY2VudGx5IGludHJvZHVjZWQgRERMcyhl LmcuIERETHMgcmVsYXRlZCB0bwpQQVJUSVRJT05FRCBUQUJMRSkgYXJlIHVuc3VwcG9ydGVkLiBX ZSBjYW4gZXh0ZW5kIGl0IGFzIHdlIG5lZWQgbW9yZQpmdW5jdGlvbmFsaXR5IGZvciBEREwgcmVw bGljYXRpb24uCgooTm90ZSAjMikgRm9yIEFUVEFDSC9ERVRBQ0ggUEFSVElUSU9OLCB3ZSBoYXZl bid0IGFkZGVkIGV4dHJhIGxvZ2ljIG9uCnRoZSBzdWJzY3JpYmVyIHRvIGhhbmRsZSB0aGUgY2Fz ZSB3aGVyZSB0aGUgdGFibGUgb24gdGhlIHB1Ymxpc2hlciBpcyBhIFBBUlRJVElPTkVEClRBQkxF IHdoaWxlIHRoZSB0YXJnZXQgdGFibGUgb24gdGhlIHN1YmNyaWJlciBzaWRlIGlzIGEgTk9STUFM IHRhYmxlLiBXZSB3aWxsCnJlc2VhcmNoIHRoaXMgbW9yZSBhbmQgaW1wcm92ZSBpdCBsYXRlci4K CihOb3RlICMzKSBSZW1vdmVkIGFuIHVuZGVzaXJhYmxlICdvbicgZnJvbSB0aGUgaWRlbnRpdHkg c3RyaW5nIGZvciBUUkFOU0ZPUk0KaW4gZ2V0T2JqZWN0SWRlbnRpdHlQYXJ0cy4gVGhpcyBpcyBu ZWVkZWQgdG8gbWFrZSBkZXBhcnNlIG9mIERST1AKVFJBTlNGT1JNIGNvbW1hbmQgd29yayBzaW5j ZSAnb24nIGlzIG5vdCBwcmVzZW50IGluIHRoZSBjdXJyZW50CkRST1AgVFJBTlNGT1JNIHN5bnRh eC4gRm9yIGV4YW1wbGUsIHRoZSBjb3JyZWN0IHN5bnRheCBpcwpEUk9QIFRSQU5TRk9STSB0cmYg Rk9SIElOVCBMQU5HVUFHRSBTUUw7Cmluc3RlYWQgb2YKRFJPUCBUUkFOU0ZPUk0gdHJmIEZPUiBJ TlQgT04gTEFOR1VBR0UgU1FMOwoKKE5vdGUgIzQpIEZvciBWSUVXU1RNVCwgd2UgY3JlYXRlZCBw Z19nZXRfdmlld2RlZl9pbnRlcm5hbCB0byBnZXQgdGhlClNFTEVDVCBxdWVyeSBvZiB0aGUgcGVu ZGluZyBWSUVXU1RNVC4gSW4gdGhlIGNhc2UgdGhhdCB0aGUgQ1JFQVRFIFZJRVcgY29tbWFuZApp cyBzdGlsbCBpbiBwcm9ncmVzcywgd2Ugd291bGQgbmVlZCB0byBzZWFyY2ggdGhlIHN5c3RlbSBj YWNoZSBSVUxFUkVMTkFNRSB0byBnZXQgdGhlCnJld3JpdGUgcnVsZSBvZiB0aGUgdmlldyBhcyBv cHBvc2UgdG8gcXVlcnlpbmcgcGdfcmV3cml0ZSBhcyBpbiBwZ19nZXRfdmlld2RlZl93b3JrZXIo KSwKdGhlIGxhdHRlciB3aWxsIHJldHVybiBlbXB0eSByZXN1bHQuCi0tLQogc3JjL2JhY2tlbmQv Y29tbWFuZHMvTWFrZWZpbGUgICAgICAgIHwgICAgMiArCiBzcmMvYmFja2VuZC9jb21tYW5kcy9k ZGxfZGVwYXJzZS5jICAgfCA5MzA5ICsrKysrKysrKysrKysrKysrKysrKysrKysrCiBzcmMvYmFj a2VuZC9jb21tYW5kcy9kZGxfanNvbi5jICAgICAgfCAgNzc2ICsrKwogc3JjL2JhY2tlbmQvY29t bWFuZHMvZXZlbnRfdHJpZ2dlci5jIHwgICAgMSArCiBzcmMvYmFja2VuZC9jb21tYW5kcy9tZXNv bi5idWlsZCAgICAgfCAgICAyICsKIHNyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQgICAg ICB8ICAgIDYgKwogc3JjL2luY2x1ZGUvbm9kZXMvcGFyc2Vub2Rlcy5oICAgICAgIHwgICAgMSAr CiBzcmMvaW5jbHVkZS90Y29wL2RkbF9kZXBhcnNlLmggICAgICAgfCAgIDIzICsKIHNyYy9pbmNs dWRlL3Rjb3AvZGVwYXJzZV91dGlsaXR5LmggICB8ICAgMTEgKy0KIHNyYy90b29scy9wZ2luZGVu dC90eXBlZGVmcy5saXN0ICAgICB8ICAgIDQgKwogMTAgZmlsZXMgY2hhbmdlZCwgMTAxMzQgaW5z ZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQogY3JlYXRlIG1vZGUgMTAwNzU1IHNyYy9iYWNrZW5k L2NvbW1hbmRzL2RkbF9kZXBhcnNlLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvYmFja2VuZC9j b21tYW5kcy9kZGxfanNvbi5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2luY2x1ZGUvdGNvcC9k ZGxfZGVwYXJzZS5oCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvTWFrZWZpbGUg Yi9zcmMvYmFja2VuZC9jb21tYW5kcy9NYWtlZmlsZQppbmRleCA0OGY3MzQ4ZjkxLi4xNzFkZmIy ODAwIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy9NYWtlZmlsZQorKysgYi9zcmMv YmFja2VuZC9jb21tYW5kcy9NYWtlZmlsZQpAQCAtMjksNiArMjksOCBAQCBPQkpTID0gXAogCWNv cHl0by5vIFwKIAljcmVhdGVhcy5vIFwKIAlkYmNvbW1hbmRzLm8gXAorCWRkbF9kZXBhcnNlLm8g XAorCWRkbF9qc29uLm8gXAogCWRlZmluZS5vIFwKIAlkaXNjYXJkLm8gXAogCWRyb3BjbWRzLm8g XApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvZGRsX2RlcGFyc2UuYyBiL3NyYy9i YWNrZW5kL2NvbW1hbmRzL2RkbF9kZXBhcnNlLmMKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXgg MDAwMDAwMDAwMC4uMzJlOGNhMTAxNQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9iYWNrZW5kL2Nv bW1hbmRzL2RkbF9kZXBhcnNlLmMKQEAgLTAsMCArMSw5MzA5IEBACisvKi0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KKyAqCisgKiBkZGxfZGVwYXJzZS5jCisgKgkgIEZ1bmN0aW9ucyB0byBjb252ZXJ0IHV0aWxp dHkgY29tbWFuZHMgdG8gbWFjaGluZS1wYXJzZWFibGUKKyAqCSAgcmVwcmVzZW50YXRpb24KKyAq CisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTYtMjAyMiwgUG9zdGdyZVNRTCBHbG9iYWwg RGV2ZWxvcG1lbnQgR3JvdXAKKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5NCwgUmVnZW50 cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhCisgKgorICogTk9URVMKKyAqCisgKiBU aGlzIGlzIGludGVuZGVkIHRvIHByb3ZpZGUgSlNPTiBibG9icyByZXByZXNlbnRpbmcgRERMIGNv bW1hbmRzLCB3aGljaCBjYW4KKyAqIGxhdGVyIGJlIHJlLXByb2Nlc3NlZCBpbnRvIHBsYWluIHN0 cmluZ3MgYnkgd2VsbC1kZWZpbmVkIHNwcmludGYtbGlrZQorICogZXhwYW5zaW9uLiAgVGhlc2Ug SlNPTiBvYmplY3RzIGFyZSBpbnRlbmRlZCB0byBhbGxvdyBmb3IgbWFjaGluZS1lZGl0aW5nIG9m CisgKiB0aGUgY29tbWFuZHMsIGJ5IHJlcGxhY2luZyBjZXJ0YWluIG5vZGVzIHdpdGhpbiB0aGUg b2JqZWN0cy4KKyAqCisgKiBNdWNoIG9mIHRoZSBpbmZvcm1hdGlvbiBpbiB0aGUgb3V0cHV0IGJs b2IgYWN0dWFsbHkgY29tZXMgZnJvbSBzeXN0ZW0KKyAqIGNhdGFsb2dzLCBub3QgZnJvbSB0aGUg Y29tbWFuZCBwYXJzZSBub2RlLCBhcyBpdCBpcyBpbXBvc3NpYmxlIHRvIHJlbGlhYmx5CisgKiBj b25zdHJ1Y3QgYSBmdWxseS1zcGVjaWZpZWQgY29tbWFuZCAoaS5lLiBvbmUgbm90IGRlcGVuZGVu dCBvbiBzZWFyY2hfcGF0aAorICogZXRjKSBsb29raW5nIG9ubHkgYXQgdGhlIHBhcnNlIG5vZGUu CisgKgorICogRGVwYXJzZSBvYmplY3QgdHJlZSBpcyBjcmVhdGVkIGJ5IHVzaW5nOgorICogCWEp IG5ld19vYmp0cmVlKCJrbm93IGNvbnRlbnRzIikgd2hlcmUgdGhlIGNvbXBsZXRlIHRyZWUgY29u dGVudCBpcyBrbm93biBvcgorICogICAgIHRoZSBpbml0aWFsIHRyZWUgY29udGVudCBpcyBrbm93 bi4KKyAqIAliKSBuZXdfb2JqdHJlZSgiIikgZm9yIHRoZSBzeW50YXggd2hlcmUgdGhlIG9iamVj dCB0cmVlIHdpbGwgYmUgZGVyaXZlZAorICogICAgIGJhc2VkIG9uIHNvbWUgY29uZGl0aW9uYWwg Y2hlY2tzLgorICogCWMpIG5ld19vYmp0cmVlX1ZBIHdoZXJlIHRoZSBjb21wbGV0ZSB0cmVlIGNh biBiZSBkZXJpdmVkIHVzaW5nIHNvbWUgZml4ZWQKKyAqICAgICBjb250ZW50IGFuZC9vciBzb21l IHZhcmlhYmxlIGFyZ3VtZW50cy4KKyAqCisgKiBJREVOVElGSUNBVElPTgorICoJICBzcmMvYmFj a2VuZC9jb21tYW5kcy9kZGxfZGVwYXJzZS5jCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8K KyNpbmNsdWRlICJwb3N0Z3Jlcy5oIgorCisjaW5jbHVkZSAiYWNjZXNzL2FtYXBpLmgiCisjaW5j bHVkZSAiYWNjZXNzL3JlbGF0aW9uLmgiCisjaW5jbHVkZSAiYWNjZXNzL3RhYmxlLmgiCisjaW5j bHVkZSAiY2F0YWxvZy9uYW1lc3BhY2UuaCIKKyNpbmNsdWRlICJjYXRhbG9nL3BnX2FtLmgiCisj aW5jbHVkZSAiY2F0YWxvZy9wZ19hdXRoaWQuaCIKKyNpbmNsdWRlICJjYXRhbG9nL3BnX2Nhc3Qu aCIKKyNpbmNsdWRlICJjYXRhbG9nL3BnX2NvbGxhdGlvbi5oIgorI2luY2x1ZGUgImNhdGFsb2cv cGdfY29uc3RyYWludC5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdfY29udmVyc2lvbi5oIgorI2lu Y2x1ZGUgImNhdGFsb2cvcGdfZGVwZW5kLmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wZ19leHRlbnNp b24uaCIKKyNpbmNsdWRlICJjYXRhbG9nL3BnX2ZvcmVpZ25fZGF0YV93cmFwcGVyLmgiCisjaW5j bHVkZSAiY2F0YWxvZy9wZ19mb3JlaWduX3NlcnZlci5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdf aW5oZXJpdHMuaCIKKyNpbmNsdWRlICJjYXRhbG9nL3BnX2xhbmd1YWdlLmgiCisjaW5jbHVkZSAi Y2F0YWxvZy9wZ19sYXJnZW9iamVjdC5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdfbmFtZXNwYWNl LmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wZ19vcGNsYXNzLmgiCisjaW5jbHVkZSAiY2F0YWxvZy9w Z19vcGVyYXRvci5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdfb3BmYW1pbHkuaCIKKyNpbmNsdWRl ICJjYXRhbG9nL3BnX3BvbGljeS5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdfcHJvYy5oIgorI2lu Y2x1ZGUgImNhdGFsb2cvcGdfcmFuZ2UuaCIKKyNpbmNsdWRlICJjYXRhbG9nL3BnX3Jld3JpdGUu aCIKKyNpbmNsdWRlICJjYXRhbG9nL3BnX3NlcXVlbmNlLmgiCisjaW5jbHVkZSAiY2F0YWxvZy9w Z19zdGF0aXN0aWNfZXh0LmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wZ190cmFuc2Zvcm0uaCIKKyNp bmNsdWRlICJjYXRhbG9nL3BnX3RzX2NvbmZpZy5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdfdHNf ZGljdC5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdfdHNfcGFyc2VyLmgiCisjaW5jbHVkZSAiY2F0 YWxvZy9wZ190c190ZW1wbGF0ZS5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdfdHlwZS5oIgorI2lu Y2x1ZGUgImNhdGFsb2cvcGdfdXNlcl9tYXBwaW5nLmgiCisjaW5jbHVkZSAiY29tbWFuZHMvZGVm cmVtLmgiCisjaW5jbHVkZSAiY29tbWFuZHMvc2VxdWVuY2UuaCIKKyNpbmNsdWRlICJjb21tYW5k cy90YWJsZXNwYWNlLmgiCisjaW5jbHVkZSAiZm9yZWlnbi9mb3JlaWduLmgiCisjaW5jbHVkZSAi ZnVuY2FwaS5oIgorI2luY2x1ZGUgIm1iL3BnX3djaGFyLmgiCisjaW5jbHVkZSAibm9kZXMvbm9k ZUZ1bmNzLmgiCisjaW5jbHVkZSAibm9kZXMvcGFyc2Vub2Rlcy5oIgorI2luY2x1ZGUgIm9wdGlt aXplci9vcHRpbWl6ZXIuaCIKKyNpbmNsdWRlICJwYXJzZXIvcGFyc2VfdHlwZS5oIgorI2luY2x1 ZGUgInJld3JpdGUvcmV3cml0ZUhhbmRsZXIuaCIKKyNpbmNsdWRlICJ0Y29wL2RkbF9kZXBhcnNl LmgiCisjaW5jbHVkZSAidGNvcC91dGlsaXR5LmgiCisjaW5jbHVkZSAidXRpbHMvYnVpbHRpbnMu aCIKKyNpbmNsdWRlICJ1dGlscy9mbWdyb2lkcy5oIgorI2luY2x1ZGUgInV0aWxzL2d1Yy5oIgor I2luY2x1ZGUgInV0aWxzL2pzb25iLmgiCisjaW5jbHVkZSAidXRpbHMvbHN5c2NhY2hlLmgiCisj aW5jbHVkZSAidXRpbHMvcmVsLmgiCisjaW5jbHVkZSAidXRpbHMvcnVsZXV0aWxzLmgiCisjaW5j bHVkZSAidXRpbHMvc3lzY2FjaGUuaCIKKworLyogRXN0aW1hdGVkIGxlbmd0aCBvZiB0aGUgZ2Vu ZXJhdGVkIGpzb25iIHN0cmluZyAqLworI2RlZmluZSBKU09OQl9FU1RJTUFURURfTEVOIDEyOAor CisvKgorICogQmVmb3JlIHRoZXkgYXJlIHR1cm5lZCBpbnRvIEpTT05CIHJlcHJlc2VudGF0aW9u LCBlYWNoIGNvbW1hbmQgaXMKKyAqIHJlcHJlc2VudGVkIGFzIGFuIG9iamVjdCB0cmVlLCB1c2lu ZyB0aGUgc3RydWN0cyBiZWxvdy4KKyAqLwordHlwZWRlZiBlbnVtCit7CisJT2JqVHlwZU51bGws CisJT2JqVHlwZUJvb2wsCisJT2JqVHlwZVN0cmluZywKKwlPYmpUeXBlQXJyYXksCisJT2JqVHlw ZUludGVnZXIsCisJT2JqVHlwZUZsb2F0LAorCU9ialR5cGVPYmplY3QKK30gT2JqVHlwZTsKKwor LyoKKyAqIFJlcHJlc2VudCB0aGUgY29tbWFuZCBhcyBhbiBvYmplY3QgdHJlZS4KKyAqLwordHlw ZWRlZiBzdHJ1Y3QgT2JqVHJlZQoreworCXNsaXN0X2hlYWQJcGFyYW1zOwkJCS8qIE9iamVjdCB0 cmVlIHBhcmFtZXRlcnMgKi8KKwlpbnQJCQludW1QYXJhbXM7CQkvKiBOdW1iZXIgb2YgcGFyYW1l dGVycyBpbiB0aGUgb2JqZWN0IHRyZWUgKi8KKwlTdHJpbmdJbmZvCWZtdGluZm87CQkvKiBGb3Jt YXQgc3RyaW5nIG9mIHRoZSBPYmpUcmVlICovCisJYm9vbAkJcHJlc2VudDsJCS8qIEluZGljYXRl cyBpZiBib29sZWFuIHZhbHVlIHNob3VsZCBiZSBzdG9yZWQgKi8KK30gT2JqVHJlZTsKKworLyoK KyAqIEFuIGVsZW1lbnQgb2YgYW4gb2JqZWN0IHRyZWUgKE9ialRyZWUpLgorICovCit0eXBlZGVm IHN0cnVjdCBPYmpFbGVtCit7CisJY2hhcgkgICAqbmFtZTsJCQkvKiBOYW1lIG9mIG9iamVjdCBl bGVtZW50ICovCisJT2JqVHlwZQkJb2JqdHlwZTsJCS8qIE9iamVjdCB0eXBlICovCisKKwl1bmlv bgorCXsKKwkJYm9vbAkJYm9vbGVhbjsKKwkJY2hhcgkgICAqc3RyaW5nOworCQlpbnQ2NAkJaW50 ZWdlcjsKKwkJZmxvYXQ4CQlmbHQ7CisJCU9ialRyZWUgICAgKm9iamVjdDsKKwkJTGlzdAkgICAq YXJyYXk7CisJfQkJCXZhbHVlOwkJCS8qIFN0b3JlIHRoZSBvYmplY3QgdmFsdWUgYmFzZWQgb24g dGhlIG9iamVjdAorCQkJCQkJCQkgKiB0eXBlICovCisJc2xpc3Rfbm9kZQlub2RlOwkJCS8qIFVz ZWQgaW4gY29udmVydGluZyBiYWNrIHRvIE9iakVsZW0KKwkJCQkJCQkJICogc3RydWN0dXJlICov Cit9IE9iakVsZW07CisKKy8qCisgKiBSZWR1Y2Ugc29tZSB1bm5lY2Vzc2FyeSBzdHJpbmdzIGZy b20gdGhlIG91dHB1dCBqc29uIHdoZW4gdmVyYm9zZQorICogYW5kICJwcmVzZW50IiBtZW1iZXIg aXMgZmFsc2UuIFRoaXMgbWVhbnMgdGhlc2Ugc3RyaW5ncyB3b24ndCBiZSBtZXJnZWQgaW50bwor ICogdGhlIGxhc3QgRERMIGNvbW1hbmQuCisgKi8KK2Jvb2wJCXZlcmJvc2UgPSB0cnVlOworCitz dGF0aWMgdm9pZCBhcHBlbmRfYXJyYXlfb2JqZWN0KE9ialRyZWUgKnRyZWUsIGNoYXIgKnN1Yl9m bXQsIExpc3QgKmFycmF5KTsKK3N0YXRpYyB2b2lkIGFwcGVuZF9ib29sX29iamVjdChPYmpUcmVl ICp0cmVlLCBjaGFyICpzdWJfZm10LCBib29sIHZhbHVlKTsKK3N0YXRpYyB2b2lkIGFwcGVuZF9m bG9hdF9vYmplY3QoT2JqVHJlZSAqdHJlZSwgY2hhciAqc3ViX2ZtdCwgZmxvYXQ4IHZhbHVlKTsK K3N0YXRpYyB2b2lkIGFwcGVuZF9udWxsX29iamVjdChPYmpUcmVlICp0cmVlLCBjaGFyICpzdWJf Zm10KTsKK3N0YXRpYyB2b2lkIGFwcGVuZF9vYmplY3Rfb2JqZWN0KE9ialRyZWUgKnRyZWUsIGNo YXIgKnN1Yl9mbXQsIE9ialRyZWUgKnZhbHVlKTsKK3N0YXRpYyBjaGFyICphcHBlbmRfb2JqZWN0 X3RvX2Zvcm1hdF9zdHJpbmcoT2JqVHJlZSAqdHJlZSwgY2hhciAqc3ViX2ZtdCk7CitzdGF0aWMg dm9pZCBhcHBlbmRfcHJlbWFkZV9vYmplY3QoT2JqVHJlZSAqdHJlZSwgT2JqRWxlbSAqZWxlbSk7 CitzdGF0aWMgdm9pZCBhcHBlbmRfc3RyaW5nX29iamVjdChPYmpUcmVlICp0cmVlLCBjaGFyICpz dWJfZm10LCBjaGFyICpuYW1lLAorCQkJCQkJCQkgY2hhciAqdmFsdWUpOworc3RhdGljIHZvaWQg Zm9ybWF0X3R5cGVfZGV0YWlsZWQoT2lkIHR5cGVfb2lkLCBpbnQzMiB0eXBlbW9kLAorCQkJCQkJ CQkgT2lkICpuc3BpZCwgY2hhciAqKnR5cG5hbWUsIGNoYXIgKip0eXBlbW9kc3RyLAorCQkJCQkJ CQkgYm9vbCAqdHlwYXJyYXkpOworc3RhdGljIExpc3QgKkZ1bmN0aW9uR2V0RGVmYXVsdHModGV4 dCAqcHJvYXJnZGVmYXVsdHMpOworc3RhdGljIE9iakVsZW0gKm5ld19vYmplY3QoT2JqVHlwZSB0 eXBlLCBjaGFyICpuYW1lKTsKK3N0YXRpYyBPYmpUcmVlICpuZXdfb2JqdHJlZV9mb3JfcXVhbG5h bWVfaWQoT2lkIGNsYXNzSWQsIE9pZCBvYmplY3RJZCk7CitzdGF0aWMgT2JqVHJlZSAqbmV3X29i anRyZWVfZm9yX3JvbGVzcGVjKFJvbGVTcGVjICpzcGVjKTsKK3N0YXRpYyBPYmpFbGVtICpuZXdf b2JqZWN0X29iamVjdChPYmpUcmVlICp2YWx1ZSk7CitzdGF0aWMgT2JqVHJlZSAqbmV3X29ianRy ZWVfVkEoY2hhciAqZm10LCBpbnQgbnVtb2JqcywuLi4pOworc3RhdGljIE9iakVsZW0gKm5ld19z dHJpbmdfb2JqZWN0KGNoYXIgKnZhbHVlKTsKK3N0YXRpYyBKc29uYlZhbHVlICpvYmp0cmVlX3Rv X2pzb25iX3JlYyhPYmpUcmVlICp0cmVlLCBKc29uYlBhcnNlU3RhdGUgKnN0YXRlKTsKK3N0YXRp YyB2b2lkIHBnX2dldF9pbmRleGRlZl9kZXRhaWxlZChPaWQgaW5kZXhyZWxpZCwKKwkJCQkJCQkJ CSBjaGFyICoqaW5kZXhfYW0sCisJCQkJCQkJCQkgY2hhciAqKmRlZmluaXRpb24sCisJCQkJCQkJ CQkgY2hhciAqKnJlbG9wdGlvbnMsCisJCQkJCQkJCQkgY2hhciAqKnRhYmxlc3BhY2UsCisJCQkJ CQkJCQkgY2hhciAqKndoZXJlQ2xhdXNlKTsKK3N0YXRpYyBjaGFyICpSZWxhdGlvbkdldENvbHVt bkRlZmF1bHQoUmVsYXRpb24gcmVsLCBBdHRyTnVtYmVyIGF0dG5vLAorCQkJCQkJCQkJICBMaXN0 ICpkcGNvbnRleHQsIExpc3QgKipleHBycyk7CisKK3N0YXRpYyBPYmpUcmVlICpkZXBhcnNlX0Nv bHVtbkRlZihSZWxhdGlvbiByZWxhdGlvbiwgTGlzdCAqZHBjb250ZXh0LCBib29sIGNvbXBvc2l0 ZSwKKwkJCQkJCQkJICBDb2x1bW5EZWYgKmNvbGRlZiwgYm9vbCBpc19hbHRlciwgTGlzdCAqKmV4 cHJzKTsKK3N0YXRpYyBPYmpUcmVlICpkZXBhcnNlX0NvbHVtbklkZW50aXR5KE9pZCBzZXFyZWxp ZCwgY2hhciBpZGVudGl0eSwgYm9vbCBhbHRlcl90YWJsZSk7CitzdGF0aWMgT2JqVHJlZSAqZGVw YXJzZV9Db2x1bW5TZXRPcHRpb25zKEFsdGVyVGFibGVDbWQgKnN1YmNtZCk7CitzdGF0aWMgT2Jq VHJlZSAqZGVwYXJzZV9EZWZpbmVTdG10X0NvbGxhdGlvbihPaWQgb2JqZWN0SWQsIERlZmluZVN0 bXQgKmRlZmluZSwKKwkJCQkJCQkJCQkJIE9iamVjdEFkZHJlc3MgZnJvbUNvbGxpZCk7CitzdGF0 aWMgT2JqVHJlZSAqZGVwYXJzZV9EZWZpbmVTdG10X09wZXJhdG9yKE9pZCBvYmplY3RJZCwgRGVm aW5lU3RtdCAqZGVmaW5lKTsKK3N0YXRpYyBPYmpUcmVlICpkZXBhcnNlX0RlZmluZVN0bXRfVHlw ZShPaWQgb2JqZWN0SWQsIERlZmluZVN0bXQgKmRlZmluZSk7CitzdGF0aWMgT2JqVHJlZSAqZGVw YXJzZV9EZWZpbmVTdG10X1RTQ29uZmlnKE9pZCBvYmplY3RJZCwgRGVmaW5lU3RtdCAqZGVmaW5l LCBPYmplY3RBZGRyZXNzIGNvcGllZCk7CitzdGF0aWMgT2JqVHJlZSAqZGVwYXJzZV9EZWZpbmVT dG10X1RTUGFyc2VyKE9pZCBvYmplY3RJZCwgRGVmaW5lU3RtdCAqZGVmaW5lKTsKK3N0YXRpYyBP YmpUcmVlICpkZXBhcnNlX0RlZmluZVN0bXRfVFNEaWN0aW9uYXJ5KE9pZCBvYmplY3RJZCwgRGVm aW5lU3RtdCAqZGVmaW5lKTsKK3N0YXRpYyBPYmpUcmVlICpkZXBhcnNlX0RlZmluZVN0bXRfVFNU ZW1wbGF0ZShPaWQgb2JqZWN0SWQsIERlZmluZVN0bXQgKmRlZmluZSk7CisKK3N0YXRpYyBPYmpU cmVlICpkZXBhcnNlX0RlZkVsZW0oRGVmRWxlbSAqZWxlbSwgYm9vbCBpc19yZXNldCk7CitzdGF0 aWMgT2JqVHJlZSAqZGVwYXJzZV9GdW5jdGlvblNldChWYXJpYWJsZVNldEtpbmQga2luZCwgY2hh ciAqbmFtZSwgY2hhciAqdmFsdWUpOworc3RhdGljIE9ialRyZWUgKmRlcGFyc2VfT25Db21taXRD bGF1c2UoT25Db21taXRBY3Rpb24gb3B0aW9uKTsKK3N0YXRpYyBPYmpUcmVlICpkZXBhcnNlX1Jl bFNldE9wdGlvbnMoQWx0ZXJUYWJsZUNtZCAqc3ViY21kKTsKKworc3RhdGljIGlubGluZSBPYmpF bGVtICpkZXBhcnNlX1NlcV9DYWNoZShGb3JtX3BnX3NlcXVlbmNlIHNlcWRhdGEsIGJvb2wgYWx0 ZXJfdGFibGUpOworc3RhdGljIGlubGluZSBPYmpFbGVtICpkZXBhcnNlX1NlcV9DeWNsZShGb3Jt X3BnX3NlcXVlbmNlIHNlcWRhdGEsIGJvb2wgYWx0ZXJfdGFibGUpOworc3RhdGljIGlubGluZSBP YmpFbGVtICpkZXBhcnNlX1NlcV9JbmNyZW1lbnRCeShGb3JtX3BnX3NlcXVlbmNlIHNlcWRhdGEs IGJvb2wgYWx0ZXJfdGFibGUpOworc3RhdGljIGlubGluZSBPYmpFbGVtICpkZXBhcnNlX1NlcV9N aW52YWx1ZShGb3JtX3BnX3NlcXVlbmNlIHNlcWRhdGEsIGJvb2wgYWx0ZXJfdGFibGUpOworc3Rh dGljIGlubGluZSBPYmpFbGVtICpkZXBhcnNlX1NlcV9NYXh2YWx1ZShGb3JtX3BnX3NlcXVlbmNl IHNlcWRhdGEsIGJvb2wgYWx0ZXJfdGFibGUpOworc3RhdGljIE9iakVsZW0gKmRlcGFyc2VfU2Vx X093bmVkQnkoT2lkIHNlcXVlbmNlSWQsIGJvb2wgYWx0ZXJfdGFibGUpOworc3RhdGljIGlubGlu ZSBPYmpFbGVtICpkZXBhcnNlX1NlcV9SZXN0YXJ0KEZvcm1fcGdfc2VxdWVuY2VfZGF0YSBzZXFk YXRhKTsKK3N0YXRpYyBpbmxpbmUgT2JqRWxlbSAqZGVwYXJzZV9TZXFfU3RhcnR3aXRoKEZvcm1f cGdfc2VxdWVuY2Ugc2VxZGF0YSwgYm9vbCBhbHRlcl90YWJsZSk7CitzdGF0aWMgaW5saW5lIE9i akVsZW0gKmRlcGFyc2VfU2VxX0FzKERlZkVsZW0gKmVsZW0pOworc3RhdGljIGlubGluZSBPYmpF bGVtICpkZXBhcnNlX1R5cGVfU3RvcmFnZShGb3JtX3BnX3R5cGUgdHlwRm9ybSk7CitzdGF0aWMg aW5saW5lIE9iakVsZW0gKmRlcGFyc2VfVHlwZV9SZWNlaXZlKEZvcm1fcGdfdHlwZSB0eXBGb3Jt KTsKK3N0YXRpYyBpbmxpbmUgT2JqRWxlbSAqZGVwYXJzZV9UeXBlX1NlbmQoRm9ybV9wZ190eXBl IHR5cEZvcm0pOworc3RhdGljIGlubGluZSBPYmpFbGVtICpkZXBhcnNlX1R5cGVfVHlwbW9kX0lu KEZvcm1fcGdfdHlwZSB0eXBGb3JtKTsKK3N0YXRpYyBpbmxpbmUgT2JqRWxlbSAqZGVwYXJzZV9U eXBlX1R5cG1vZF9PdXQoRm9ybV9wZ190eXBlIHR5cEZvcm0pOworc3RhdGljIGlubGluZSBPYmpF bGVtICpkZXBhcnNlX1R5cGVfQW5hbHl6ZShGb3JtX3BnX3R5cGUgdHlwRm9ybSk7CitzdGF0aWMg aW5saW5lIE9iakVsZW0gKmRlcGFyc2VfVHlwZV9TdWJzY3JpcHQoRm9ybV9wZ190eXBlIHR5cEZv cm0pOworCitzdGF0aWMgTGlzdCAqZGVwYXJzZV9JbmhSZWxhdGlvbnMoT2lkIG9iamVjdElkKTsK K3N0YXRpYyBMaXN0ICpkZXBhcnNlX1RhYmxlRWxlbWVudHMoUmVsYXRpb24gcmVsYXRpb24sIExp c3QgKnRhYmxlRWxlbWVudHMsIExpc3QgKmRwY29udGV4dCwKKwkJCQkJCQkJICAgYm9vbCB0eXBl ZCwgYm9vbCBjb21wb3NpdGUpOworCitzdGF0aWMgY2hhciAqRG9tYWluR2V0RGVmYXVsdChIZWFw VHVwbGUgZG9tVHVwLCBib29sIG1pc3Npbmdfb2spOworCisvKgorICogQXBwZW5kIHByZXNlbnQg YXMgZmFsc2UgdG8gYSB0cmVlLgorICovCitzdGF0aWMgdm9pZAorYXBwZW5kX25vdF9wcmVzZW50 KE9ialRyZWUgKnRyZWUpCit7CisJYXBwZW5kX2Jvb2xfb2JqZWN0KHRyZWUsICJwcmVzZW50Iiwg ZmFsc2UpOworfQorCisvKgorICogQWRkIGNvbW1vbiBjbGF1c2VzIHRvIENyZWF0ZVBvbGljeSBv ciBBbHRlclBvbGljeSBkZXBhcnNlIG9iamVjdHMuCisgKi8KK3N0YXRpYyB2b2lkCithZGRfcG9s aWN5X2NsYXVzZXMoT2JqVHJlZSAqcmV0LCBPaWQgcG9saWN5T2lkLCBMaXN0ICpyb2xlcywgYm9v bCBkb19xdWFsLAorCQkJCSAgIGJvb2wgZG9fd2l0aF9jaGVjaykKK3sKKwlSZWxhdGlvbglwb2xS ZWwgPSB0YWJsZV9vcGVuKFBvbGljeVJlbGF0aW9uSWQsIEFjY2Vzc1NoYXJlTG9jayk7CisJSGVh cFR1cGxlCXBvbFR1cCA9IGdldF9jYXRhbG9nX29iamVjdF9ieV9vaWQocG9sUmVsLCBBbnVtX3Bn X3BvbGljeV9vaWQsIHBvbGljeU9pZCk7CisJRm9ybV9wZ19wb2xpY3kgcG9sRm9ybTsKKworCWlm ICghSGVhcFR1cGxlSXNWYWxpZChwb2xUdXApKQorCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3Vw IGZhaWxlZCBmb3IgcG9saWN5IHdpdGggT0lEICV1IiwgcG9saWN5T2lkKTsKKworCXBvbEZvcm0g PSAoRm9ybV9wZ19wb2xpY3kpIEdFVFNUUlVDVChwb2xUdXApOworCisJLyogQWRkIHRoZSAiT04g dGFibGUiIGNsYXVzZSAqLworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHJldCwgIk9OICV7dGFibGV9 RCIsCisJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFJlbGF0aW9uUmVsYXRpb25J ZCwKKwkJCQkJCQkJCQkJCQkgcG9sRm9ybS0+cG9scmVsaWQpKTsKKworCS8qCisJICogQWRkIHRo ZSAiVE8gcm9sZSIgY2xhdXNlLCBpZiBhbnkuICBJbiB0aGUgQ1JFQVRFIGNhc2UsIGl0IGFsd2F5 cworCSAqIGNvbnRhaW5zIGF0IGxlYXN0IFBVQkxJQywgYnV0IGluIHRoZSBBTFRFUiBjYXNlIGl0 IG1pZ2h0IGJlIGVtcHR5LgorCSAqLworCWlmIChyb2xlcykKKwl7CisJCUxpc3QJICAgKmxpc3Qg PSBOSUw7CisJCUxpc3RDZWxsICAgKmNlbGw7CisKKwkJZm9yZWFjaChjZWxsLCByb2xlcykKKwkJ eworCQkJUm9sZVNwZWMgICAqc3BlYyA9IChSb2xlU3BlYyAqKSBsZmlyc3QoY2VsbCk7CisKKwkJ CWxpc3QgPSBsYXBwZW5kKGxpc3QsCisJCQkJCQkgICBuZXdfb2JqZWN0X29iamVjdChuZXdfb2Jq dHJlZV9mb3Jfcm9sZXNwZWMoc3BlYykpKTsKKwkJfQorCQlhcHBlbmRfYXJyYXlfb2JqZWN0KHJl dCwgIlRPICV7cm9sZTosIH1SIiwgbGlzdCk7CisJfQorCWVsc2UKKwkJYXBwZW5kX25vdF9wcmVz ZW50KHJldCk7CisKKwkvKiBBZGQgdGhlIFVTSU5HIGNsYXVzZSwgaWYgYW55ICovCisJaWYgKGRv X3F1YWwpCisJeworCQlEYXR1bQkJZGVwYXJzZWQ7CisJCURhdHVtCQlzdG9yZWRleHByOworCQli b29sCQlpc251bGw7CisKKwkJc3RvcmVkZXhwciA9IGhlYXBfZ2V0YXR0cihwb2xUdXAsIEFudW1f cGdfcG9saWN5X3BvbHF1YWwsCisJCQkJCQkJCSAgUmVsYXRpb25HZXREZXNjcihwb2xSZWwpLCAm aXNudWxsKTsKKwkJaWYgKGlzbnVsbCkKKwkJCWVsb2coRVJST1IsICJudWxsIHBvbHF1YWwgZXhw cmVzc2lvbiBpbiBwb2xpY3kgJXUiLCBwb2xpY3lPaWQpOworCQlkZXBhcnNlZCA9IERpcmVjdEZ1 bmN0aW9uQ2FsbDIocGdfZ2V0X2V4cHIsIHN0b3JlZGV4cHIsIHBvbEZvcm0tPnBvbHJlbGlkKTsK KwkJYXBwZW5kX3N0cmluZ19vYmplY3QocmV0LCAiVVNJTkcgKCV7ZXhwcmVzc2lvbn1zKSIsICJl eHByZXNzaW9uIiwKKwkJCQkJCQkgVGV4dERhdHVtR2V0Q1N0cmluZyhkZXBhcnNlZCkpOworCX0K KwllbHNlCisJCWFwcGVuZF9ub3RfcHJlc2VudChyZXQpOworCisJLyogQWRkIHRoZSBXSVRIIENI RUNLIGNsYXVzZSwgaWYgYW55ICovCisJaWYgKGRvX3dpdGhfY2hlY2spCisJeworCQlEYXR1bQkJ ZGVwYXJzZWQ7CisJCURhdHVtCQlzdG9yZWRleHByOworCQlib29sCQlpc251bGw7CisKKwkJc3Rv cmVkZXhwciA9IGhlYXBfZ2V0YXR0cihwb2xUdXAsIEFudW1fcGdfcG9saWN5X3BvbHdpdGhjaGVj aywKKwkJCQkJCQkJICBSZWxhdGlvbkdldERlc2NyKHBvbFJlbCksICZpc251bGwpOworCQlpZiAo aXNudWxsKQorCQkJZWxvZyhFUlJPUiwgIm51bGwgcG9sd2l0aGNoZWNrIGV4cHJlc3Npb24gaW4g cG9saWN5ICV1IiwgcG9saWN5T2lkKTsKKwkJZGVwYXJzZWQgPSBEaXJlY3RGdW5jdGlvbkNhbGwy KHBnX2dldF9leHByLCBzdG9yZWRleHByLCBwb2xGb3JtLT5wb2xyZWxpZCk7CisJCWFwcGVuZF9z dHJpbmdfb2JqZWN0KHJldCwgIldJVEggQ0hFQ0sgKCV7ZXhwcmVzc2lvbn1zKSIsCisJCQkJCQkJ ICJleHByZXNzaW9uIiwgVGV4dERhdHVtR2V0Q1N0cmluZyhkZXBhcnNlZCkpOworCX0KKwllbHNl CisJCWFwcGVuZF9ub3RfcHJlc2VudChyZXQpOworCisJcmVsYXRpb25fY2xvc2UocG9sUmVsLCBB Y2Nlc3NTaGFyZUxvY2spOworfQorCisvKgorICogQXBwZW5kIGFuIGFycmF5IHBhcmFtZXRlciB0 byBhIHRyZWUuCisgKi8KK3N0YXRpYyB2b2lkCithcHBlbmRfYXJyYXlfb2JqZWN0KE9ialRyZWUg KnRyZWUsIGNoYXIgKnN1Yl9mbXQsIExpc3QgKmFycmF5KQoreworCU9iakVsZW0gICAgKnBhcmFt OworCWNoYXIJICAgKm9iamVjdF9uYW1lOworCisJQXNzZXJ0KHN1Yl9mbXQpOworCisJaWYgKGxp c3RfbGVuZ3RoKGFycmF5KSA9PSAwKQorCQlyZXR1cm47CisKKwlpZiAoIXZlcmJvc2UpCisJewor CQlMaXN0Q2VsbCAgICpsYzsKKworCQkvKiBSZW1vdmUgZWxlbWVudHMgd2hlcmUgcHJlc2VudCBm bGFnIGlzIGZhbHNlICovCisJCWZvcmVhY2gobGMsIGFycmF5KQorCQl7CisJCQlPYmpFbGVtICAg ICplbGVtID0gKE9iakVsZW0gKikgbGZpcnN0KGxjKTsKKworCQkJQXNzZXJ0KGVsZW0tPm9ianR5 cGUgPT0gT2JqVHlwZU9iamVjdCB8fAorCQkJCSAgIGVsZW0tPm9ianR5cGUgPT0gT2JqVHlwZVN0 cmluZyk7CisKKwkJCWlmICghZWxlbS0+dmFsdWUub2JqZWN0LT5wcmVzZW50ICYmCisJCQkJZWxl bS0+b2JqdHlwZSA9PSBPYmpUeXBlT2JqZWN0KQorCQkJCWFycmF5ID0gZm9yZWFjaF9kZWxldGVf Y3VycmVudChhcnJheSwgbGMpOworCQl9CisKKwl9CisKKwkvKiBDaGVjayBmb3IgZW1wdHkgbGlz dCBhZnRlciByZW1vdmluZyBlbGVtZW50cyAqLworCWlmIChsaXN0X2xlbmd0aChhcnJheSkgPT0g MCkKKwkJcmV0dXJuOworCisJb2JqZWN0X25hbWUgPSBhcHBlbmRfb2JqZWN0X3RvX2Zvcm1hdF9z dHJpbmcodHJlZSwgc3ViX2ZtdCk7CisKKwlwYXJhbSA9IG5ld19vYmplY3QoT2JqVHlwZUFycmF5 LCBvYmplY3RfbmFtZSk7CisJcGFyYW0tPnZhbHVlLmFycmF5ID0gYXJyYXk7CisJYXBwZW5kX3By ZW1hZGVfb2JqZWN0KHRyZWUsIHBhcmFtKTsKK30KKworLyoKKyAqIEFwcGVuZCBhIGJvb2xlYW4g cGFyYW1ldGVyIHRvIGEgdHJlZS4KKyAqLworc3RhdGljIHZvaWQKK2FwcGVuZF9ib29sX29iamVj dChPYmpUcmVlICp0cmVlLCBjaGFyICpzdWJfZm10LCBib29sIHZhbHVlKQoreworCU9iakVsZW0g ICAgKnBhcmFtOworCWNoYXIJICAgKm9iamVjdF9uYW1lID0gc3ViX2ZtdDsKKwlib29sCQlpc19w cmVzZW50X2ZsYWcgPSBmYWxzZTsKKworCUFzc2VydChzdWJfZm10KTsKKworCS8qCisJICogQ2hl Y2sgaWYgdGhlIGZvcm1hdCBzdHJpbmcgaXMgJ3ByZXNlbnQnIGFuZCBpZiB5ZXMsIHN0b3JlIHRo ZSBib29sZWFuCisJICogdmFsdWUKKwkgKi8KKwlpZiAoc3RyY21wKHN1Yl9mbXQsICJwcmVzZW50 IikgPT0gMCkKKwl7CisJCWlzX3ByZXNlbnRfZmxhZyA9IHRydWU7CisJCXRyZWUtPnByZXNlbnQg PSB2YWx1ZTsKKwl9CisKKwlpZiAoIXZlcmJvc2UgJiYgIXRyZWUtPnByZXNlbnQpCisJCXJldHVy bjsKKworCWlmICghaXNfcHJlc2VudF9mbGFnKQorCQlvYmplY3RfbmFtZSA9IGFwcGVuZF9vYmpl Y3RfdG9fZm9ybWF0X3N0cmluZyh0cmVlLCBzdWJfZm10KTsKKworCXBhcmFtID0gbmV3X29iamVj dChPYmpUeXBlQm9vbCwgb2JqZWN0X25hbWUpOworCXBhcmFtLT52YWx1ZS5ib29sZWFuID0gdmFs dWU7CisJYXBwZW5kX3ByZW1hZGVfb2JqZWN0KHRyZWUsIHBhcmFtKTsKK30KKworLyoKKyAqIEFw cGVuZCBhIGZsb2F0OCBwYXJhbWV0ZXIgdG8gYSB0cmVlLgorICovCitzdGF0aWMgdm9pZAorYXBw ZW5kX2Zsb2F0X29iamVjdChPYmpUcmVlICp0cmVlLCBjaGFyICpzdWJfZm10LCBmbG9hdDggdmFs dWUpCit7CisJT2JqRWxlbSAgICAqcGFyYW07CisJY2hhcgkgICAqb2JqZWN0X25hbWU7CisKKwlB c3NlcnQoc3ViX2ZtdCk7CisKKwlvYmplY3RfbmFtZSA9IGFwcGVuZF9vYmplY3RfdG9fZm9ybWF0 X3N0cmluZyh0cmVlLCBzdWJfZm10KTsKKworCXBhcmFtID0gbmV3X29iamVjdChPYmpUeXBlRmxv YXQsIG9iamVjdF9uYW1lKTsKKwlwYXJhbS0+dmFsdWUuZmx0ID0gdmFsdWU7CisJYXBwZW5kX3By ZW1hZGVfb2JqZWN0KHRyZWUsIHBhcmFtKTsKK30KKworLyoKKyAqIEFwcGVuZCB0aGUgaW5wdXQg Zm9ybWF0IHN0cmluZyB0byB0aGUgT2JqVHJlZS4KKyAqLworc3RhdGljIHZvaWQKK2FwcGVuZF9m b3JtYXRfc3RyaW5nKE9ialRyZWUgKnRyZWUsIGNoYXIgKnN1Yl9mbXQpCit7CisJaW50CQkJbGVu OworCWNoYXIJICAgKmZtdDsKKworCWlmICh0cmVlLT5mbXRpbmZvID09IE5VTEwpCisJCXJldHVy bjsKKworCWZtdCA9IHRyZWUtPmZtdGluZm8tPmRhdGE7CisJbGVuID0gdHJlZS0+Zm10aW5mby0+ bGVuOworCisJLyogQWRkIGEgc2VwYXJhdG9yIGlmIG5lY2Vzc2FyeSAqLworCWlmIChsZW4gPiAw ICYmIGZtdFtsZW4gLSAxXSAhPSAnICcpCisJCWFwcGVuZFN0cmluZ0luZm9TcGFjZXModHJlZS0+ Zm10aW5mbywgMSk7CisKKwlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKHRyZWUtPmZtdGluZm8sIHN1 Yl9mbXQpOworfQorCisvKgorICogQXBwZW5kIGEgTlVMTCBvYmplY3QgdG8gYSB0cmVlLgorICov CitzdGF0aWMgdm9pZAorYXBwZW5kX251bGxfb2JqZWN0KE9ialRyZWUgKnRyZWUsIGNoYXIgKnN1 Yl9mbXQpCit7CisJY2hhcgkgICAqb2JqZWN0X25hbWU7CisKKwlBc3NlcnQoc3ViX2ZtdCk7CisK KwlpZiAoIXZlcmJvc2UpCisJCXJldHVybjsKKworCW9iamVjdF9uYW1lID0gYXBwZW5kX29iamVj dF90b19mb3JtYXRfc3RyaW5nKHRyZWUsIHN1Yl9mbXQpOworCisJYXBwZW5kX3ByZW1hZGVfb2Jq ZWN0KHRyZWUsIG5ld19vYmplY3QoT2JqVHlwZU51bGwsIG9iamVjdF9uYW1lKSk7Cit9CisKKy8q CisgKiBBcHBlbmQgYW4gb2JqZWN0IHBhcmFtZXRlciB0byBhIHRyZWUuCisgKi8KK3N0YXRpYyB2 b2lkCithcHBlbmRfb2JqZWN0X29iamVjdChPYmpUcmVlICp0cmVlLCBjaGFyICpzdWJfZm10LCBP YmpUcmVlICp2YWx1ZSkKK3sKKwlPYmpFbGVtICAgICpwYXJhbTsKKwljaGFyCSAgICpvYmplY3Rf bmFtZTsKKworCUFzc2VydChzdWJfZm10KTsKKworCWlmICghdmVyYm9zZSAmJiAhdmFsdWUtPnBy ZXNlbnQpCisJCXJldHVybjsKKworCW9iamVjdF9uYW1lID0gYXBwZW5kX29iamVjdF90b19mb3Jt YXRfc3RyaW5nKHRyZWUsIHN1Yl9mbXQpOworCisJcGFyYW0gPSBuZXdfb2JqZWN0KE9ialR5cGVP YmplY3QsIG9iamVjdF9uYW1lKTsKKwlwYXJhbS0+dmFsdWUub2JqZWN0ID0gdmFsdWU7CisJYXBw ZW5kX3ByZW1hZGVfb2JqZWN0KHRyZWUsIHBhcmFtKTsKK30KKworLyoKKyAqIFJldHVybiB0aGUg b2JqZWN0IG5hbWUgd2hpY2ggaXMgZXh0cmFjdGVkIGZyb20gdGhlIGlucHV0ICIqJXtuYW1lWzou XX0qIgorICogc3R5bGUgc3RyaW5nLiBBbmQgYXBwZW5kIHRoZSBpbnB1dCBmb3JtYXQgc3RyaW5n IHRvIHRoZSBPYmpUcmVlLgorICovCitzdGF0aWMgY2hhciAqCithcHBlbmRfb2JqZWN0X3RvX2Zv cm1hdF9zdHJpbmcoT2JqVHJlZSAqdHJlZSwgY2hhciAqc3ViX2ZtdCkKK3sKKwlTdHJpbmdJbmZv RGF0YSBvYmplY3RfbmFtZTsKKwljb25zdCBjaGFyICplbmRfcHRyOworCWNvbnN0IGNoYXIgKmNw OworCWJvb2wJCXN0YXJ0X2NvcHkgPSBmYWxzZTsKKworCWlmIChzdWJfZm10ID09IE5VTEwgfHwg dHJlZS0+Zm10aW5mbyA9PSBOVUxMKQorCQlyZXR1cm4gc3ViX2ZtdDsKKworCWluaXRTdHJpbmdJ bmZvKCZvYmplY3RfbmFtZSk7CisJZW5kX3B0ciA9IHN1Yl9mbXQgKyBzdHJsZW4oc3ViX2ZtdCk7 CisKKwlmb3IgKGNwID0gc3ViX2ZtdDsgY3AgPCBlbmRfcHRyOyBjcCsrKQorCXsKKwkJaWYgKCpj cCA9PSAneycpCisJCXsKKwkJCXN0YXJ0X2NvcHkgPSB0cnVlOworCQkJY29udGludWU7CisJCX0K KworCQlpZiAoIXN0YXJ0X2NvcHkpCisJCQljb250aW51ZTsKKworCQlpZiAoKmNwID09ICc6JyB8 fCAqY3AgPT0gJ30nKQorCQkJYnJlYWs7CisKKwkJYXBwZW5kU3RyaW5nSW5mb0NoYXJNYWNybygm b2JqZWN0X25hbWUsICpjcCk7CisJfQorCisJaWYgKG9iamVjdF9uYW1lLmxlbiA9PSAwKQorCQll bG9nKEVSUk9SLCAib2JqZWN0IG5hbWUgbm90IGZvdW5kIik7CisKKwlhcHBlbmRfZm9ybWF0X3N0 cmluZyh0cmVlLCBzdWJfZm10KTsKKworCXJldHVybiBvYmplY3RfbmFtZS5kYXRhOworfQorCisv KgorICogQXBwZW5kIGEgcHJlYWxsb2NhdGVkIHBhcmFtZXRlciB0byBhIHRyZWUuCisgKi8KK3N0 YXRpYyBpbmxpbmUgdm9pZAorYXBwZW5kX3ByZW1hZGVfb2JqZWN0KE9ialRyZWUgKnRyZWUsIE9i akVsZW0gKmVsZW0pCit7CisJc2xpc3RfcHVzaF9oZWFkKCZ0cmVlLT5wYXJhbXMsICZlbGVtLT5u b2RlKTsKKwl0cmVlLT5udW1QYXJhbXMrKzsKK30KKworLyoKKyAqIEFwcGVuZCBhIHN0cmluZyBw YXJhbWV0ZXIgdG8gYSB0cmVlLgorICovCitzdGF0aWMgdm9pZAorYXBwZW5kX3N0cmluZ19vYmpl Y3QoT2JqVHJlZSAqdHJlZSwgY2hhciAqc3ViX2ZtdCwgY2hhciAqIG9iamVjdF9uYW1lLAorCQkJ CQkgY2hhciAqdmFsdWUpCit7CisJT2JqRWxlbSAgICAqcGFyYW07CisKKwlBc3NlcnQoc3ViX2Zt dCk7CisKKwlpZiAoIXZlcmJvc2UgJiYgKHZhbHVlID09IE5VTEwgfHwgdmFsdWVbMF0gPT0gJ1ww JykpCisJCXJldHVybjsKKworCWFwcGVuZF9mb3JtYXRfc3RyaW5nKHRyZWUsIHN1Yl9mbXQpOwor CXBhcmFtID0gbmV3X29iamVjdChPYmpUeXBlU3RyaW5nLCBvYmplY3RfbmFtZSk7CisJcGFyYW0t PnZhbHVlLnN0cmluZyA9IHZhbHVlOworCWFwcGVuZF9wcmVtYWRlX29iamVjdCh0cmVlLCBwYXJh bSk7Cit9CisKKy8qCisgKiBTaW1pbGFyIHRvIGZvcm1hdF90eXBlX2V4dGVuZGVkLCBleGNlcHQg d2UgcmV0dXJuIGVhY2ggYml0IG9mIGluZm9ybWF0aW9uCisgKiBzZXBhcmF0ZWx5OgorICoKKyAq IC0gbnNwaWQgaXMgdGhlIHNjaGVtYSBPSUQuICBGb3IgY2VydGFpbiBTUUwtc3RhbmRhcmQgdHlw ZXMgd2hpY2ggaGF2ZSB3ZWlyZAorICogICB0eXBtb2QgcnVsZXMsIHdlIHJldHVybiBJbnZhbGlk T2lkOyB0aGUgY2FsbGVyIGlzIGV4cGVjdGVkIHRvIG5vdCBzY2hlbWEtCisgKiAgIHF1YWxpZnkg dGhlIG5hbWUgbm9yIGFkZCBxdW90ZXMgdG8gdGhlIHR5cGUgbmFtZSBpbiB0aGlzIGNhc2UuCisg KgorICogLSB0eXBuYW1lIGlzIHNldCB0byB0aGUgdHlwZSBuYW1lLCB3aXRob3V0IHF1b3Rlcwor ICoKKyAqIC0gdHlwZW1vZHN0ciBpcyBzZXQgdG8gdGhlIHR5cGVtb2QsIGlmIGFueSwgYXMgYSBz dHJpbmcgd2l0aCBwYXJlbnRoZXNlcworICoKKyAqIC0gdHlwYXJyYXkgaW5kaWNhdGVzIHdoZXRo ZXIgW11zIG11c3QgYmUgYWRkZWQKKyAqCisgKiBXZSBkb24ndCB0cnkgdG8gZGVjb2RlIHR5cGUg bmFtZXMgdG8gdGhlaXIgc3RhbmRhcmQtbWFuZGF0ZWQgbmFtZXMsIGV4Y2VwdAorICogaW4gdGhl IGNhc2VzIG9mIHR5cGVzIHdpdGggdW51c3VhbCB0eXBtb2QgcnVsZXMuCisgKi8KK3N0YXRpYyB2 b2lkCitmb3JtYXRfdHlwZV9kZXRhaWxlZChPaWQgdHlwZV9vaWQsIGludDMyIHR5cGVtb2QsCisJ CQkJCSBPaWQgKm5zcGlkLCBjaGFyICoqdHlwZW5hbWUsIGNoYXIgKip0eXBlbW9kc3RyLAorCQkJ CQkgYm9vbCAqdHlwZWFycmF5KQoreworCUhlYXBUdXBsZQl0dXBsZTsKKwlGb3JtX3BnX3R5cGUg dHlwZWZvcm07CisJT2lkCQkJYXJyYXlfYmFzZV90eXBlOworCisJdHVwbGUgPSBTZWFyY2hTeXND YWNoZTEoVFlQRU9JRCwgT2JqZWN0SWRHZXREYXR1bSh0eXBlX29pZCkpOworCWlmICghSGVhcFR1 cGxlSXNWYWxpZCh0dXBsZSkpCisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZv ciB0eXBlIHdpdGggT0lEICV1IiwgdHlwZV9vaWQpOworCisJdHlwZWZvcm0gPSAoRm9ybV9wZ190 eXBlKSBHRVRTVFJVQ1QodHVwbGUpOworCisJLyoKKwkgKiBDaGVjayBpZiBpdCdzIGEgcmVndWxh ciAodmFyaWFibGUgbGVuZ3RoKSBhcnJheSB0eXBlLiAgQXMgYWJvdmUsCisJICogZml4ZWQtbGVu Z3RoIGFycmF5IHR5cGVzIHN1Y2ggYXMgIm5hbWUiIHNob3VsZG4ndCBnZXQgZGVjb25zdHJ1Y3Rl ZC4KKwkgKi8KKwlhcnJheV9iYXNlX3R5cGUgPSB0eXBlZm9ybS0+dHlwZWxlbTsKKworCSp0eXBl YXJyYXkgPSAoSXNUcnVlQXJyYXlUeXBlKHR5cGVmb3JtKSAmJiB0eXBlZm9ybS0+dHlwc3RvcmFn ZSAhPSBUWVBTVE9SQUdFX1BMQUlOKTsKKworCWlmICgqdHlwZWFycmF5KQorCXsKKwkJLyogU3dp dGNoIG91ciBhdHRlbnRpb24gdG8gdGhlIGFycmF5IGVsZW1lbnQgdHlwZSAqLworCQlSZWxlYXNl U3lzQ2FjaGUodHVwbGUpOworCQl0dXBsZSA9IFNlYXJjaFN5c0NhY2hlMShUWVBFT0lELCBPYmpl Y3RJZEdldERhdHVtKGFycmF5X2Jhc2VfdHlwZSkpOworCQlpZiAoIUhlYXBUdXBsZUlzVmFsaWQo dHVwbGUpKQorCQkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIHR5cGUgd2l0 aCBPSUQgJXUiLCB0eXBlX29pZCk7CisKKwkJdHlwZWZvcm0gPSAoRm9ybV9wZ190eXBlKSBHRVRT VFJVQ1QodHVwbGUpOworCQl0eXBlX29pZCA9IGFycmF5X2Jhc2VfdHlwZTsKKwl9CisKKwkvKgor CSAqIFNwZWNpYWwtY2FzZSBjcm9jayBmb3IgdHlwZXMgd2l0aCBzdHJhbmdlIHR5cG1vZCBydWxl cyB3aGVyZSB3ZSBwdXQKKwkgKiB0eXBlbW9kIGF0IHRoZSBtaWRkbGUgb2YgbmFtZSAoZS5nLiBU SU1FKDYpIHdpdGggdGltZSB6b25lKS4gV2UgY2Fubm90CisJICogc2NoZW1hLXF1YWxpZnkgbm9y IGFkZCBxdW90ZXMgdG8gdGhlIHR5cGUgbmFtZSBpbiB0aGVzZSBjYXNlcy4KKwkgKi8KKwkqbnNw aWQgPSBJbnZhbGlkT2lkOworCisJc3dpdGNoICh0eXBlX29pZCkKKwl7CisJCWNhc2UgSU5URVJW QUxPSUQ6CisJCQkqdHlwZW5hbWUgPSBwc3RyZHVwKCJJTlRFUlZBTCIpOworCQkJYnJlYWs7CisJ CWNhc2UgVElNRVNUQU1QVFpPSUQ6CisJCQlpZiAodHlwZW1vZCA8IDApCisJCQkJKnR5cGVuYW1l ID0gcHN0cmR1cCgiVElNRVNUQU1QIFdJVEggVElNRSBaT05FIik7CisJCQllbHNlCisJCQkJLyog b3RoZXJ3aXNlLCBXSVRIIFRaIGlzIGFkZGVkIGJ5IHR5cG1vZC4gKi8KKwkJCQkqdHlwZW5hbWUg PSBwc3RyZHVwKCJUSU1FU1RBTVAiKTsKKwkJCWJyZWFrOworCQljYXNlIFRJTUVTVEFNUE9JRDoK KwkJCSp0eXBlbmFtZSA9IHBzdHJkdXAoIlRJTUVTVEFNUCIpOworCQkJYnJlYWs7CisJCWNhc2Ug VElNRVRaT0lEOgorCQkJaWYgKHR5cGVtb2QgPCAwKQorCQkJCSp0eXBlbmFtZSA9IHBzdHJkdXAo IlRJTUUgV0lUSCBUSU1FIFpPTkUiKTsKKwkJCWVsc2UKKwkJCQkvKiBvdGhlcndpc2UsIFdJVEgg VFogaXMgYWRkZWQgYnkgdHlwbW9kLiAqLworCQkJCSp0eXBlbmFtZSA9IHBzdHJkdXAoIlRJTUUi KTsKKwkJCWJyZWFrOworCQljYXNlIFRJTUVPSUQ6CisJCQkqdHlwZW5hbWUgPSBwc3RyZHVwKCJU SU1FIik7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKworCQkJLyoKKwkJCSAqIE5vIGFkZGl0aW9u YWwgcHJvY2Vzc2luZyBpcyByZXF1aXJlZCBmb3Igb3RoZXIgdHlwZXMsIHNvIGdldAorCQkJICog dGhlIHR5cGUgbmFtZSBhbmQgc2NoZW1hIGRpcmVjdGx5IGZyb20gdGhlIGNhdGFsb2cuCisJCQkg Ki8KKwkJCSpuc3BpZCA9IHR5cGVmb3JtLT50eXBuYW1lc3BhY2U7CisJCQkqdHlwZW5hbWUgPSBw c3RyZHVwKE5hbWVTdHIodHlwZWZvcm0tPnR5cG5hbWUpKTsKKwl9CisKKwlpZiAodHlwZW1vZCA+ PSAwKQorCQkqdHlwZW1vZHN0ciA9IHByaW50VHlwbW9kKCIiLCB0eXBlbW9kLCB0eXBlZm9ybS0+ dHlwbW9kb3V0KTsKKwllbHNlCisJCSp0eXBlbW9kc3RyID0gcHN0cmR1cCgiIik7CisKKwlSZWxl YXNlU3lzQ2FjaGUodHVwbGUpOworfQorCisvKgorICogUmV0dXJuIHRoZSBkZWZhdWx0IHZhbHVl cyBvZiBhcmd1bWVudHMgdG8gYSBmdW5jdGlvbiwgYXMgYSBsaXN0IG9mCisgKiBkZXBhcnNlZCBl eHByZXNzaW9ucy4KKyAqLworc3RhdGljIExpc3QgKgorRnVuY3Rpb25HZXREZWZhdWx0cyh0ZXh0 ICpwcm9hcmdkZWZhdWx0cykKK3sKKwlMaXN0CSAgICpub2RlZGVmczsKKwlMaXN0CSAgICpzdHJk ZWZzID0gTklMOworCUxpc3RDZWxsICAgKmNlbGw7CisKKwlub2RlZGVmcyA9IChMaXN0ICopIHN0 cmluZ1RvTm9kZSh0ZXh0X3RvX2NzdHJpbmcocHJvYXJnZGVmYXVsdHMpKTsKKwlpZiAoIUlzQShu b2RlZGVmcywgTGlzdCkpCisJCWVsb2coRVJST1IsICJwcm9hcmdkZWZhdWx0cyBpcyBub3QgYSBs aXN0Iik7CisKKwlmb3JlYWNoKGNlbGwsIG5vZGVkZWZzKQorCXsKKwkJTm9kZQkgICAqb25lZGVm ID0gbGZpcnN0KGNlbGwpOworCisJCXN0cmRlZnMgPSBsYXBwZW5kKHN0cmRlZnMsIGRlcGFyc2Vf ZXhwcmVzc2lvbihvbmVkZWYsIE5JTCwgZmFsc2UsIGZhbHNlKSk7CisJfQorCisJcmV0dXJuIHN0 cmRlZnM7Cit9CisKKy8qCisgKiBSZXR1cm4gdGhlIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0 aGUgZ2l2ZW4gUkVMUEVSU0lTVEVOQ0UgdmFsdWUuCisgKi8KK3N0YXRpYyBjaGFyICoKK2dldF9w ZXJzaXN0ZW5jZV9zdHIoY2hhciBwZXJzaXN0ZW5jZSkKK3sKKwlzd2l0Y2ggKHBlcnNpc3RlbmNl KQorCXsKKwkJY2FzZSBSRUxQRVJTSVNURU5DRV9URU1QOgorCQkJcmV0dXJuICJURU1QT1JBUlki OworCQljYXNlIFJFTFBFUlNJU1RFTkNFX1VOTE9HR0VEOgorCQkJcmV0dXJuICJVTkxPR0dFRCI7 CisJCWNhc2UgUkVMUEVSU0lTVEVOQ0VfUEVSTUFORU5UOgorCQkJcmV0dXJuICIiOworCQlkZWZh dWx0OgorCQkJZWxvZyhFUlJPUiwgInVuZXhwZWN0ZWQgcGVyc2lzdGVuY2UgbWFya2luZyAlYyIs IHBlcnNpc3RlbmNlKTsKKwkJCXJldHVybiAiIjsJCQkvKiBtYWtlIGNvbXBpbGVyIGhhcHB5ICov CisJfQorfQorCisvKgorICogUmV0dXJuIHRoZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhl IGdpdmVuIHN0b3JhZ2V0eXBlIHZhbHVlLgorICovCitzdGF0aWMgaW5saW5lIGNoYXIgKgorZ2V0 X3R5cGVfc3RvcmFnZShjaGFyIHN0b3JhZ2V0eXBlKQoreworCXN3aXRjaCAoc3RvcmFnZXR5cGUp CisJeworCQljYXNlICdwJzoKKwkJCXJldHVybiAicGxhaW4iOworCQljYXNlICdlJzoKKwkJCXJl dHVybiAiZXh0ZXJuYWwiOworCQljYXNlICd4JzoKKwkJCXJldHVybiAiZXh0ZW5kZWQiOworCQlj YXNlICdtJzoKKwkJCXJldHVybiAibWFpbiI7CisJCWRlZmF1bHQ6CisJCQllbG9nKEVSUk9SLCAi aW52YWxpZCBzdG9yYWdlIHNwZWNpZmllciAlYyIsIHN0b3JhZ2V0eXBlKTsKKwl9Cit9CisKKy8q CisgKiBBbGxvY2F0ZSBhIG5ldyBwYXJhbWV0ZXIuCisgKi8KK3N0YXRpYyBPYmpFbGVtICoKK25l d19vYmplY3QoT2JqVHlwZSB0eXBlLCBjaGFyICpuYW1lKQoreworCU9iakVsZW0gICAgKnBhcmFt OworCisJcGFyYW0gPSBwYWxsb2MwKHNpemVvZihPYmpFbGVtKSk7CisJcGFyYW0tPm5hbWUgPSBu YW1lOworCXBhcmFtLT5vYmp0eXBlID0gdHlwZTsKKworCXJldHVybiBwYXJhbTsKK30KKworLyoK KyAqIEFsbG9jYXRlIGEgbmV3IG9iamVjdCBwYXJhbWV0ZXIuCisgKi8KK3N0YXRpYyBPYmpFbGVt ICoKK25ld19vYmplY3Rfb2JqZWN0KE9ialRyZWUgKnZhbHVlKQoreworCU9iakVsZW0gICAgKnBh cmFtOworCisJcGFyYW0gPSBuZXdfb2JqZWN0KE9ialR5cGVPYmplY3QsIE5VTEwpOworCXBhcmFt LT52YWx1ZS5vYmplY3QgPSB2YWx1ZTsKKworCXJldHVybiBwYXJhbTsKK30KKworLyoKKyAqIEFs bG9jYXRlIGEgbmV3IG9iamVjdCB0cmVlIHRvIHN0b3JlIHBhcmFtZXRlciB2YWx1ZXMuCisgKi8K K3N0YXRpYyBPYmpUcmVlICoKK25ld19vYmp0cmVlKGNoYXIgKmZtdCkKK3sKKwlPYmpUcmVlICAg ICpwYXJhbXM7CisKKwlwYXJhbXMgPSBwYWxsb2MwKHNpemVvZihPYmpUcmVlKSk7CisJcGFyYW1z LT5wcmVzZW50ID0gdHJ1ZTsKKwlzbGlzdF9pbml0KCZwYXJhbXMtPnBhcmFtcyk7CisKKwlpZiAo Zm10KQorCXsKKwkJcGFyYW1zLT5mbXRpbmZvID0gbWFrZVN0cmluZ0luZm8oKTsKKwkJYXBwZW5k U3RyaW5nSW5mb1N0cmluZyhwYXJhbXMtPmZtdGluZm8sIGZtdCk7CisJfQorCisJcmV0dXJuIHBh cmFtczsKK30KKworLyoKKyAqIEEgaGVscGVyIHJvdXRpbmUgdG8gc2V0IHVwICV7fUQgYW5kICV7 fU8gZWxlbWVudHMuCisgKgorICogRWxlbWVudHMgInNjaGVtYV9uYW1lIiBhbmQgIm9ial9uYW1l IiBhcmUgc2V0LiAgSWYgdGhlIG5hbWVzcGFjZSBPSUQKKyAqIGNvcnJlc3BvbmRzIHRvIGEgdGVt cCBzY2hlbWEsIHRoYXQncyBzZXQgdG8gInBnX3RlbXAiLgorICoKKyAqIFRoZSBkaWZmZXJlbmNl IGJldHdlZW4gdGhvc2UgdHdvIGVsZW1lbnQgdHlwZXMgaXMgd2hldGhlciB0aGUgb2JqX25hbWUg d2lsbAorICogYmUgcXVvdGVkIGFzIGFuIGlkZW50aWZpZXIgb3Igbm90LCB3aGljaCBpcyBub3Qg c29tZXRoaW5nIHRoYXQgdGhpcyByb3V0aW5lCisgKiBjb25jZXJucyBpdHNlbGYgd2l0aDsgdGhh dCB3aWxsIGJlIHVwIHRvIHRoZSBleHBhbmQgZnVuY3Rpb24uCisgKi8KK3N0YXRpYyBPYmpUcmVl ICoKK25ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZShPaWQgbnNwaWQsIGNoYXIgKm5hbWUpCit7CisJ T2JqVHJlZSAgICAqcXVhbGlmaWVkOworCWNoYXIJICAgKm5hbWVzcGFjZTsKKworCWlmIChpc0Fu eVRlbXBOYW1lc3BhY2UobnNwaWQpKQorCQluYW1lc3BhY2UgPSBwc3RyZHVwKCJwZ190ZW1wIik7 CisJZWxzZQorCQluYW1lc3BhY2UgPSBnZXRfbmFtZXNwYWNlX25hbWUobnNwaWQpOworCisJcXVh bGlmaWVkID0gbmV3X29ianRyZWVfVkEoTlVMTCwgMiwKKwkJCQkJCQkgICAic2NoZW1hbmFtZSIs IE9ialR5cGVTdHJpbmcsIG5hbWVzcGFjZSwKKwkJCQkJCQkgICAib2JqbmFtZSIsIE9ialR5cGVT dHJpbmcsIHBzdHJkdXAobmFtZSkpOworCisJcmV0dXJuIHF1YWxpZmllZDsKK30KKworLyoKKyAq IEEgaGVscGVyIHJvdXRpbmUgdG8gc2V0IHVwICV7fUQgYW5kICV7fU8gZWxlbWVudHMsIHdpdGgg dGhlIG9iamVjdCBzcGVjaWZpZWQKKyAqIGJ5IGNsYXNzSWQvb2JqSWQuCisgKi8KK3N0YXRpYyBP YmpUcmVlICoKK25ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChPaWQgY2xhc3NJZCwgT2lkIG9i amVjdElkKQoreworCU9ialRyZWUgICAgKnF1YWxpZmllZDsKKwlSZWxhdGlvbgljYXRhbG9nOwor CUhlYXBUdXBsZQljYXRvYmo7CisJRGF0dW0JCW9ial9uc3A7CisJRGF0dW0JCW9ial9uYW1lOwor CUF0dHJOdW1iZXIJQW51bV9uYW1lOworCUF0dHJOdW1iZXIJQW51bV9uYW1lc3BhY2U7CisJQXR0 ck51bWJlcglBbnVtX29pZCA9IGdldF9vYmplY3RfYXR0bnVtX29pZChjbGFzc0lkKTsKKwlib29s CQlpc251bGw7CisKKwljYXRhbG9nID0gdGFibGVfb3BlbihjbGFzc0lkLCBBY2Nlc3NTaGFyZUxv Y2spOworCisJY2F0b2JqID0gZ2V0X2NhdGFsb2dfb2JqZWN0X2J5X29pZChjYXRhbG9nLCBBbnVt X29pZCwgb2JqZWN0SWQpOworCWlmICghY2F0b2JqKQorCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9v a3VwIGZhaWxlZCBmb3Igb2JqZWN0IHdpdGggT0lEICV1IG9mIGNhdGFsb2cgXCIlc1wiIiwKKwkJ CSBvYmplY3RJZCwgUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUoY2F0YWxvZykpOworCUFudW1fbmFt ZSA9IGdldF9vYmplY3RfYXR0bnVtX25hbWUoY2xhc3NJZCk7CisJQW51bV9uYW1lc3BhY2UgPSBn ZXRfb2JqZWN0X2F0dG51bV9uYW1lc3BhY2UoY2xhc3NJZCk7CisKKwlvYmpfbnNwID0gaGVhcF9n ZXRhdHRyKGNhdG9iaiwgQW51bV9uYW1lc3BhY2UsIFJlbGF0aW9uR2V0RGVzY3IoY2F0YWxvZyks CisJCQkJCQkgICZpc251bGwpOworCWlmIChpc251bGwpCisJCWVsb2coRVJST1IsICJudWxsIG5h bWVzcGFjZSBmb3Igb2JqZWN0ICV1Iiwgb2JqZWN0SWQpOworCisJb2JqX25hbWUgPSBoZWFwX2dl dGF0dHIoY2F0b2JqLCBBbnVtX25hbWUsIFJlbGF0aW9uR2V0RGVzY3IoY2F0YWxvZyksCisJCQkJ CQkgICAmaXNudWxsKTsKKwlpZiAoaXNudWxsKQorCQllbG9nKEVSUk9SLCAibnVsbCBhdHRyaWJ1 dGUgbmFtZSBmb3Igb2JqZWN0ICV1Iiwgb2JqZWN0SWQpOworCisJcXVhbGlmaWVkID0gbmV3X29i anRyZWVfZm9yX3F1YWxuYW1lKERhdHVtR2V0T2JqZWN0SWQob2JqX25zcCksCisJCQkJCQkJCQkJ IE5hbWVTdHIoKkRhdHVtR2V0TmFtZShvYmpfbmFtZSkpKTsKKwl0YWJsZV9jbG9zZShjYXRhbG9n LCBBY2Nlc3NTaGFyZUxvY2spOworCisJcmV0dXJuIHF1YWxpZmllZDsKK30KKworLyoKKyAqIEhl bHBlciByb3V0aW5lIGZvciAle31SIG9iamVjdHMsIHdpdGggcm9sZSBzcGVjaWZpZWQgYnkgUm9s ZVNwZWMgbm9kZS4KKyAqIFNwZWNpYWwgdmFsdWVzIHN1Y2ggYXMgUk9MRVNQRUNfQ1VSUkVOVF9V U0VSIGFyZSBleHBhbmRlZCB0byB0aGVpciBmaW5hbAorICogbmFtZXMuCisgKi8KK3N0YXRpYyBP YmpUcmVlICoKK25ld19vYmp0cmVlX2Zvcl9yb2xlc3BlYyhSb2xlU3BlYyAqc3BlYykKK3sKKwlj aGFyCSAgICpyb2xldHlwZTsKKworCWlmIChzcGVjLT5yb2xldHlwZSAhPSBST0xFU1BFQ19QVUJM SUMpCisJCXJvbGV0eXBlID0gZ2V0X3JvbGVzcGVjX25hbWUoc3BlYyk7CisJZWxzZQorCQlyb2xl dHlwZSA9IHBzdHJkdXAoIiIpOworCisJcmV0dXJuIG5ld19vYmp0cmVlX1ZBKE5VTEwsIDIsCisJ CQkJCQkgICJpc19wdWJsaWMiLCBPYmpUeXBlQm9vbCwgc3BlYy0+cm9sZXR5cGUgPT0gUk9MRVNQ RUNfUFVCTElDLAorCQkJCQkJICAicm9sZW5hbWUiLCBPYmpUeXBlU3RyaW5nLCByb2xldHlwZSk7 Cit9CisKKy8qCisgKiBIZWxwZXIgcm91dGluZSBmb3IgJXt9UiBvYmplY3RzLCB3aXRoIHJvbGUg c3BlY2lmaWVkIGJ5IE9JRC4gKEFDTF9JRF9QVUJMSUMKKyAqIG1lYW5zIHRvIHVzZSAicHVibGlj IikuCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK25ld19vYmp0cmVlX2Zvcl9yb2xlX2lkKE9pZCBy b2xlb2lkKQoreworCU9ialRyZWUgICAgKnJvbGU7CisKKwlpZiAocm9sZW9pZCAhPSBBQ0xfSURf UFVCTElDKQorCXsKKwkJSGVhcFR1cGxlCXJvbHR1cDsKKwkJY2hhcgkgICAqcm9sZV9uYW1lOwor CisJCXJvbHR1cCA9IFNlYXJjaFN5c0NhY2hlMShBVVRIT0lELCBPYmplY3RJZEdldERhdHVtKHJv bGVvaWQpKTsKKwkJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKHJvbHR1cCkpCisJCQllbG9nKEVSUk9S LCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3Igcm9sZSB3aXRoIE9JRCAldSIsIHJvbGVvaWQpOwor CisJCXJvbGVfbmFtZSA9IE5hbWVTdHIoKChGb3JtX3BnX2F1dGhpZCkgR0VUU1RSVUNUKHJvbHR1 cCkpLT5yb2xuYW1lKTsKKwkJcm9sZSA9IG5ld19vYmp0cmVlX1ZBKCIle3JvbGVuYW1lfUkiLCAx LAorCQkJCQkJCSAgInJvbGVuYW1lIiwgT2JqVHlwZVN0cmluZywgcHN0cmR1cChyb2xlX25hbWUp KTsKKworCQlSZWxlYXNlU3lzQ2FjaGUocm9sdHVwKTsKKwl9CisJZWxzZQorCQlyb2xlID0gbmV3 X29ianRyZWVfVkEoIiV7cm9sZW5hbWV9SSIsIDEsCisJCQkJCQkJICAicm9sZW5hbWUiLCBPYmpU eXBlU3RyaW5nLCAicHVibGljIik7CisKKwlyZXR1cm4gcm9sZTsKK30KKworLyoKKyAqIEEgaGVs cGVyIHJvdXRpbmUgdG8gc2V0dXAgJXt9VCBlbGVtZW50cy4KKyAqLworc3RhdGljIE9ialRyZWUg KgorbmV3X29ianRyZWVfZm9yX3R5cGUoT2lkIHR5cGVJZCwgaW50MzIgdHlwbW9kKQoreworCU9p ZAkJCXR5cG5zcGlkOworCWNoYXIJICAgKnR5cGVfbnNwOworCWNoYXIJICAgKnR5cGVfbmFtZSA9 IE5VTEw7CisJY2hhcgkgICAqdHlwbW9kc3RyOworCWJvb2wJCXR5cGVfYXJyYXk7CisKKwlmb3Jt YXRfdHlwZV9kZXRhaWxlZCh0eXBlSWQsIHR5cG1vZCwKKwkJCQkJCSAmdHlwbnNwaWQsICZ0eXBl X25hbWUsICZ0eXBtb2RzdHIsICZ0eXBlX2FycmF5KTsKKworCWlmIChPaWRJc1ZhbGlkKHR5cG5z cGlkKSkKKwkJdHlwZV9uc3AgPSBnZXRfbmFtZXNwYWNlX25hbWVfb3JfdGVtcCh0eXBuc3BpZCk7 CisJZWxzZQorCQl0eXBlX25zcCA9IHBzdHJkdXAoIiIpOworCisJcmV0dXJuIG5ld19vYmp0cmVl X1ZBKE5VTEwsIDQsCisJCQkJCQkgICJzY2hlbWFuYW1lIiwgT2JqVHlwZVN0cmluZywgdHlwZV9u c3AsCisJCQkJCQkgICJ0eXBlbmFtZSIsIE9ialR5cGVTdHJpbmcsIHR5cGVfbmFtZSwKKwkJCQkJ CSAgInR5cG1vZCIsIE9ialR5cGVTdHJpbmcsIHR5cG1vZHN0ciwKKwkJCQkJCSAgInR5cGFycmF5 IiwgT2JqVHlwZUJvb2wsIHR5cGVfYXJyYXkpOworfQorCisvKgorICogQWxsb2NhdGUgYSBuZXcg b2JqZWN0IHRyZWUgdG8gc3RvcmUgcGFyYW1ldGVyIHZhbHVlcyAtLSB2YXJhcmdzIHZlcnNpb24u CisgKgorICogVGhlICJmbXQiIGFyZ3VtZW50IGlzIHVzZWQgdG8gYXBwZW5kIGFzIGEgImZtdCIg ZWxlbWVudCBpbiB0aGUgb3V0cHV0IGJsb2IuCisgKiBudW1vYmpzIGluZGljYXRlcyB0aGUgbnVt YmVyIG9mIGV4dHJhIGVsZW1lbnRzIHRvIGFwcGVuZDsgZm9yIGVhY2ggb25lLCBhCisgKiBuYW1l IChzdHJpbmcpLCB0eXBlIChmcm9tIHRoZSBPYmpUeXBlIGVudW0pIGFuZCB2YWx1ZSBtdXN0IGJl IHN1cHBsaWVkLiAgVGhlCisgKiB2YWx1ZSBtdXN0IG1hdGNoIHRoZSB0eXBlIGdpdmVuOyBmb3Ig aW5zdGFuY2UsIE9ialR5cGVJbnRlZ2VyIHJlcXVpcmVzIGFuCisgKiBpbnQ2NCwgT2JqVHlwZVN0 cmluZyByZXF1aXJlcyBhIGNoYXIgKiwgT2JqVHlwZUFycmF5IHJlcXVpcmVzIGEgbGlzdCAob2YK KyAqIE9iakVsZW0pLCBPYmpUeXBlT2JqZWN0IHJlcXVpcmVzIGFuIE9ialRyZWUsIGFuZCBzbyBv bi4gIEVhY2ggZWxlbWVudCB0eXBlICoKKyAqIG11c3QgbWF0Y2ggdGhlIGNvbnZlcnNpb24gc3Bl Y2lmaWVyIGdpdmVuIGluIHRoZSBmb3JtYXQgc3RyaW5nLCBhcyBkZXNjcmliZWQKKyAqIGluIGRk bF9kZXBhcnNlX2V4cGFuZF9jb21tYW5kLCBxLnYuCisgKgorICogTm90ZSB3ZSBkb24ndCBoYXZl IHRoZSBsdXh1cnkgb2Ygc3ByaW50Zi1saWtlIGNvbXBpbGVyIHdhcm5pbmdzIGZvcgorICogbWFs Zm9ybWVkIGFyZ3VtZW50IGxpc3RzLgorICovCitzdGF0aWMgT2JqVHJlZSAqCituZXdfb2JqdHJl ZV9WQShjaGFyICpmbXQsIGludCBudW1vYmpzLC4uLikKK3sKKwlPYmpUcmVlICAgICp0cmVlOwor CXZhX2xpc3QJCWFyZ3M7CisJaW50CQkJaTsKKworCS8qIFNldCB1cCB0aGUgdG9wbGV2ZWwgb2Jq ZWN0IGFuZCBpdHMgImZtdCIgKi8KKwl0cmVlID0gbmV3X29ianRyZWUoZm10KTsKKworCS8qIEFu ZCBwcm9jZXNzIHRoZSBnaXZlbiB2YXJhcmdzICovCisJdmFfc3RhcnQoYXJncywgbnVtb2Jqcyk7 CisJZm9yIChpID0gMDsgaSA8IG51bW9ianM7IGkrKykKKwl7CisJCWNoYXIJICAgKm5hbWU7CisJ CU9ialR5cGUJCXR5cGU7CisJCU9iakVsZW0gICAgKmVsZW07CisKKwkJbmFtZSA9IHZhX2FyZyhh cmdzLCBjaGFyICopOworCQl0eXBlID0gdmFfYXJnKGFyZ3MsIE9ialR5cGUpOworCQllbGVtID0g bmV3X29iamVjdCh0eXBlLCBOVUxMKTsKKworCQkvKgorCQkgKiBGb3IgYWxsIHBhcmFtIHR5cGVz IG90aGVyIHRoYW4gT2JqVHlwZU51bGwsIHRoZXJlIG11c3QgYmUgYSB2YWx1ZSBpbgorCQkgKiB0 aGUgdmFyYXJncy4gRmV0Y2ggaXQgYW5kIGFkZCB0aGUgZnVsbHkgZm9ybWVkIHN1Ym9iamVjdCBp bnRvIHRoZQorCQkgKiBtYWluIG9iamVjdC4KKwkJICovCisJCXN3aXRjaCAodHlwZSkKKwkJewor CQkJY2FzZSBPYmpUeXBlTnVsbDoKKwkJCQkvKiBOdWxsIHBhcmFtcyBkb24ndCBoYXZlIGEgdmFs dWUgKG9idmlvdXNseSkgKi8KKwkJCQlicmVhazsKKwkJCWNhc2UgT2JqVHlwZUJvb2w6CisJCQkJ ZWxlbS0+dmFsdWUuYm9vbGVhbiA9IHZhX2FyZyhhcmdzLCBpbnQpOworCQkJCWJyZWFrOworCQkJ Y2FzZSBPYmpUeXBlU3RyaW5nOgorCQkJCWVsZW0tPnZhbHVlLnN0cmluZyA9IHZhX2FyZyhhcmdz LCBjaGFyICopOworCQkJCWJyZWFrOworCQkJY2FzZSBPYmpUeXBlQXJyYXk6CisJCQkJZWxlbS0+ dmFsdWUuYXJyYXkgPSB2YV9hcmcoYXJncywgTGlzdCAqKTsKKwkJCQlicmVhazsKKwkJCWNhc2Ug T2JqVHlwZUludGVnZXI6CisJCQkJZWxlbS0+dmFsdWUuaW50ZWdlciA9IHZhX2FyZyhhcmdzLCBp bnQpOworCQkJCWJyZWFrOworCQkJY2FzZSBPYmpUeXBlRmxvYXQ6CisJCQkJZWxlbS0+dmFsdWUu Zmx0ID0gdmFfYXJnKGFyZ3MsIGRvdWJsZSk7CisJCQkJYnJlYWs7CisJCQljYXNlIE9ialR5cGVP YmplY3Q6CisJCQkJZWxlbS0+dmFsdWUub2JqZWN0ID0gdmFfYXJnKGFyZ3MsIE9ialRyZWUgKik7 CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCWVsb2coRVJST1IsICJpbnZhbGlkIE9ialRy ZWUgZWxlbWVudCB0eXBlICVkIiwgdHlwZSk7CisJCX0KKworCQllbGVtLT5uYW1lID0gbmFtZTsK KwkJYXBwZW5kX3ByZW1hZGVfb2JqZWN0KHRyZWUsIGVsZW0pOworCX0KKworCXZhX2VuZChhcmdz KTsKKwlyZXR1cm4gdHJlZTsKK30KKworLyoKKyAqIEFsbG9jYXRlIGEgbmV3IHN0cmluZyBvYmpl Y3QuCisgKi8KK3N0YXRpYyBPYmpFbGVtICoKK25ld19zdHJpbmdfb2JqZWN0KGNoYXIgKnZhbHVl KQoreworCU9iakVsZW0gICAgKnBhcmFtOworCisJQXNzZXJ0KHZhbHVlKTsKKworCXBhcmFtID0g bmV3X29iamVjdChPYmpUeXBlU3RyaW5nLCBOVUxMKTsKKwlwYXJhbS0+dmFsdWUuc3RyaW5nID0g dmFsdWU7CisKKwlyZXR1cm4gcGFyYW07Cit9CisKKy8qCisgKiBQcm9jZXNzIHRoZSBwcmUtYnVp bHQgZm9ybWF0IHN0cmluZyBmcm9tIHRoZSBPYmpUcmVlIGludG8gdGhlIG91dHB1dCBwYXJzZQor ICogc3RhdGUuCisgKi8KK3N0YXRpYyB2b2lkCitvYmp0cmVlX2ZtdF90b19qc29uYl9lbGVtZW50 KEpzb25iUGFyc2VTdGF0ZSAqc3RhdGUsIE9ialRyZWUgKnRyZWUpCit7CisJSnNvbmJWYWx1ZQlr ZXk7CisJSnNvbmJWYWx1ZQl2YWw7CisKKwlpZiAodHJlZS0+Zm10aW5mbyA9PSBOVUxMKQorCQly ZXR1cm47CisKKwkvKiBQdXNoIHRoZSBrZXkgZmlyc3QgKi8KKwlrZXkudHlwZSA9IGpidlN0cmlu ZzsKKwlrZXkudmFsLnN0cmluZy52YWwgPSAiZm10IjsKKwlrZXkudmFsLnN0cmluZy5sZW4gPSBz dHJsZW4oa2V5LnZhbC5zdHJpbmcudmFsKTsKKwlwdXNoSnNvbmJWYWx1ZSgmc3RhdGUsIFdKQl9L RVksICZrZXkpOworCisJLyogVGhlbiBwcm9jZXNzIHRoZSBwcmUtYnVpbHQgZm9ybWF0IHN0cmlu ZyAqLworCXZhbC50eXBlID0gamJ2U3RyaW5nOworCXZhbC52YWwuc3RyaW5nLmxlbiA9IHRyZWUt PmZtdGluZm8tPmxlbjsKKwl2YWwudmFsLnN0cmluZy52YWwgPSB0cmVlLT5mbXRpbmZvLT5kYXRh OworCXB1c2hKc29uYlZhbHVlKCZzdGF0ZSwgV0pCX1ZBTFVFLCAmdmFsKTsKK30KKworLyoKKyAq IENyZWF0ZSBhIEpTT05CIHJlcHJlc2VudGF0aW9uIGZyb20gYW4gT2JqVHJlZS4KKyAqLworc3Rh dGljIEpzb25iICoKK29ianRyZWVfdG9fanNvbmIoT2JqVHJlZSAqdHJlZSkKK3sKKwlKc29uYlZh bHVlICp2YWx1ZTsKKworCXZhbHVlID0gb2JqdHJlZV90b19qc29uYl9yZWModHJlZSwgTlVMTCk7 CisJcmV0dXJuIEpzb25iVmFsdWVUb0pzb25iKHZhbHVlKTsKK30KKworLyoKKyAqIEhlbHBlciBm b3Igb2JqdHJlZV90b19qc29uYjogcHJvY2VzcyBhbiBpbmRpdmlkdWFsIGVsZW1lbnQgZnJvbSBh biBvYmplY3Qgb3IKKyAqIGFuIGFycmF5IGludG8gdGhlIG91dHB1dCBwYXJzZSBzdGF0ZS4KKyAq Lworc3RhdGljIHZvaWQKK29ianRyZWVfdG9fanNvbmJfZWxlbWVudChKc29uYlBhcnNlU3RhdGUg KnN0YXRlLCBPYmpFbGVtICpvYmplY3QsCisJCQkJCQkgSnNvbmJJdGVyYXRvclRva2VuIGVsZW1f dG9rZW4pCit7CisJSnNvbmJWYWx1ZQl2YWw7CisKKwlzd2l0Y2ggKG9iamVjdC0+b2JqdHlwZSkK Kwl7CisJCWNhc2UgT2JqVHlwZU51bGw6CisJCQl2YWwudHlwZSA9IGpidk51bGw7CisJCQlwdXNo SnNvbmJWYWx1ZSgmc3RhdGUsIGVsZW1fdG9rZW4sICZ2YWwpOworCQkJYnJlYWs7CisKKwkJY2Fz ZSBPYmpUeXBlU3RyaW5nOgorCQkJdmFsLnR5cGUgPSBqYnZTdHJpbmc7CisJCQl2YWwudmFsLnN0 cmluZy5sZW4gPSBzdHJsZW4ob2JqZWN0LT52YWx1ZS5zdHJpbmcpOworCQkJdmFsLnZhbC5zdHJp bmcudmFsID0gb2JqZWN0LT52YWx1ZS5zdHJpbmc7CisJCQlwdXNoSnNvbmJWYWx1ZSgmc3RhdGUs IGVsZW1fdG9rZW4sICZ2YWwpOworCQkJYnJlYWs7CisKKwkJY2FzZSBPYmpUeXBlSW50ZWdlcjoK KwkJCXZhbC50eXBlID0gamJ2TnVtZXJpYzsKKwkJCXZhbC52YWwubnVtZXJpYyA9IChOdW1lcmlj KQorCQkJCURhdHVtR2V0TnVtZXJpYyhEaXJlY3RGdW5jdGlvbkNhbGwxKGludDhfbnVtZXJpYywK KwkJCQkJCQkJCQkJCQlvYmplY3QtPnZhbHVlLmludGVnZXIpKTsKKwkJCXB1c2hKc29uYlZhbHVl KCZzdGF0ZSwgZWxlbV90b2tlbiwgJnZhbCk7CisJCQlicmVhazsKKworCQljYXNlIE9ialR5cGVG bG9hdDoKKwkJCXZhbC50eXBlID0gamJ2TnVtZXJpYzsKKwkJCXZhbC52YWwubnVtZXJpYyA9IChO dW1lcmljKQorCQkJCURhdHVtR2V0TnVtZXJpYyhEaXJlY3RGdW5jdGlvbkNhbGwxKGZsb2F0OF9u dW1lcmljLAorCQkJCQkJCQkJCQkJCW9iamVjdC0+dmFsdWUuaW50ZWdlcikpOworCQkJcHVzaEpz b25iVmFsdWUoJnN0YXRlLCBlbGVtX3Rva2VuLCAmdmFsKTsKKwkJCWJyZWFrOworCisJCWNhc2Ug T2JqVHlwZUJvb2w6CisJCQl2YWwudHlwZSA9IGpidkJvb2w7CisJCQl2YWwudmFsLmJvb2xlYW4g PSBvYmplY3QtPnZhbHVlLmJvb2xlYW47CisJCQlwdXNoSnNvbmJWYWx1ZSgmc3RhdGUsIGVsZW1f dG9rZW4sICZ2YWwpOworCQkJYnJlYWs7CisKKwkJY2FzZSBPYmpUeXBlT2JqZWN0OgorCQkJLyog UmVjdXJzaXZlbHkgYWRkIHRoZSBvYmplY3QgaW50byB0aGUgZXhpc3RpbmcgcGFyc2Ugc3RhdGUg Ki8KKwkJCW9ianRyZWVfdG9fanNvbmJfcmVjKG9iamVjdC0+dmFsdWUub2JqZWN0LCBzdGF0ZSk7 CisJCQlicmVhazsKKworCQljYXNlIE9ialR5cGVBcnJheToKKwkJCXsKKwkJCQlMaXN0Q2VsbCAg ICpjZWxsOworCisJCQkJcHVzaEpzb25iVmFsdWUoJnN0YXRlLCBXSkJfQkVHSU5fQVJSQVksIE5V TEwpOworCQkJCWZvcmVhY2goY2VsbCwgb2JqZWN0LT52YWx1ZS5hcnJheSkKKwkJCQl7CisJCQkJ CU9iakVsZW0gICAgKmVsZW0gPSBsZmlyc3QoY2VsbCk7CisKKwkJCQkJb2JqdHJlZV90b19qc29u Yl9lbGVtZW50KHN0YXRlLCBlbGVtLCBXSkJfRUxFTSk7CisJCQkJfQorCQkJCXB1c2hKc29uYlZh bHVlKCZzdGF0ZSwgV0pCX0VORF9BUlJBWSwgTlVMTCk7CisJCQl9CisJCQlicmVhazsKKworCQlk ZWZhdWx0OgorCQkJZWxvZyhFUlJPUiwgInVucmVjb2duaXplZCBvYmplY3QgdHlwZSAlZCIsIG9i amVjdC0+b2JqdHlwZSk7CisJCQlicmVhazsKKwl9Cit9CisKKy8qCisgKiBSZWN1cnNpdmUgaGVs cGVyIGZvciBvYmp0cmVlX3RvX2pzb25iLgorICovCitzdGF0aWMgSnNvbmJWYWx1ZSAqCitvYmp0 cmVlX3RvX2pzb25iX3JlYyhPYmpUcmVlICp0cmVlLCBKc29uYlBhcnNlU3RhdGUgKnN0YXRlKQor eworCXNsaXN0X2l0ZXIJaXRlcjsKKworCXB1c2hKc29uYlZhbHVlKCZzdGF0ZSwgV0pCX0JFR0lO X09CSkVDVCwgTlVMTCk7CisKKwlvYmp0cmVlX2ZtdF90b19qc29uYl9lbGVtZW50KHN0YXRlLCB0 cmVlKTsKKworCXNsaXN0X2ZvcmVhY2goaXRlciwgJnRyZWUtPnBhcmFtcykKKwl7CisJCU9iakVs ZW0gICAgKm9iamVjdCA9IHNsaXN0X2NvbnRhaW5lcihPYmpFbGVtLCBub2RlLCBpdGVyLmN1cik7 CisJCUpzb25iVmFsdWUJa2V5OworCisJCS8qIFB1c2ggdGhlIGtleSBmaXJzdCAqLworCQlrZXku dHlwZSA9IGpidlN0cmluZzsKKwkJa2V5LnZhbC5zdHJpbmcubGVuID0gc3RybGVuKG9iamVjdC0+ bmFtZSk7CisJCWtleS52YWwuc3RyaW5nLnZhbCA9IG9iamVjdC0+bmFtZTsKKwkJcHVzaEpzb25i VmFsdWUoJnN0YXRlLCBXSkJfS0VZLCAma2V5KTsKKworCQkvKiBUaGVuIHByb2Nlc3MgdGhlIHZh bHVlIGFjY29yZGluZyB0byBpdHMgdHlwZSAqLworCQlvYmp0cmVlX3RvX2pzb25iX2VsZW1lbnQo c3RhdGUsIG9iamVjdCwgV0pCX1ZBTFVFKTsKKwl9CisKKwlyZXR1cm4gcHVzaEpzb25iVmFsdWUo JnN0YXRlLCBXSkJfRU5EX09CSkVDVCwgTlVMTCk7Cit9CisKKy8qCisgKiBTdWJyb3V0aW5lIGZv ciBDUkVBVEUgVEFCTEUvQ1JFQVRFIERPTUFJTiBkZXBhcnNpbmcuCisgKgorICogR2l2ZW4gYSB0 YWJsZSBPSUQgb3IgZG9tYWluIE9JRCwgb2J0YWluIGl0cyBjb25zdHJhaW50cyBhbmQgYXBwZW5k IHRoZW0gdG8KKyAqIHRoZSBnaXZlbiBlbGVtZW50cyBsaXN0LiAgVGhlIHVwZGF0ZWQgbGlzdCBp cyByZXR1cm5lZC4KKyAqCisgKiBUaGlzIHdvcmtzIGZvciB0eXBlZCB0YWJsZXMsIHJlZ3VsYXIg dGFibGVzLCBhbmQgZG9tYWlucy4KKyAqCisgKiBOb3RlIHRoYXQgQ09OU1RSQUlOVF9GT1JFSUdO IGNvbnN0cmFpbnRzIGFyZSBhbHdheXMgaWdub3JlZC4KKyAqLworc3RhdGljIExpc3QgKgorb2J0 YWluQ29uc3RyYWludHMoTGlzdCAqZWxlbWVudHMsIE9pZCByZWxhdGlvbklkLCBPaWQgZG9tYWlu SWQpCit7CisJUmVsYXRpb24JY29uUmVsOworCVNjYW5LZXlEYXRhIGtleTsKKwlTeXNTY2FuRGVz YyBzY2FuOworCUhlYXBUdXBsZQl0dXBsZTsKKwlPYmpUcmVlICAgICpjb25zdHI7CisKKwkvKiBP bmx5IG9uZSBtYXkgYmUgdmFsaWQgKi8KKwlBc3NlcnQoT2lkSXNWYWxpZChyZWxhdGlvbklkKSBe IE9pZElzVmFsaWQoZG9tYWluSWQpKTsKKworCS8qCisJICogU2NhbiBwZ19jb25zdHJhaW50IHRv IGZldGNoIGFsbCBjb25zdHJhaW50cyBsaW5rZWQgdG8gdGhlIGdpdmVuCisJICogcmVsYXRpb24u CisJICovCisJY29uUmVsID0gdGFibGVfb3BlbihDb25zdHJhaW50UmVsYXRpb25JZCwgQWNjZXNz U2hhcmVMb2NrKTsKKwlpZiAoT2lkSXNWYWxpZChyZWxhdGlvbklkKSkKKwl7CisJCVNjYW5LZXlJ bml0KCZrZXksCisJCQkJCUFudW1fcGdfY29uc3RyYWludF9jb25yZWxpZCwKKwkJCQkJQlRFcXVh bFN0cmF0ZWd5TnVtYmVyLCBGX09JREVRLAorCQkJCQlPYmplY3RJZEdldERhdHVtKHJlbGF0aW9u SWQpKTsKKwkJc2NhbiA9IHN5c3RhYmxlX2JlZ2luc2Nhbihjb25SZWwsIENvbnN0cmFpbnRSZWxp ZFR5cGlkTmFtZUluZGV4SWQsCisJCQkJCQkJCSAgdHJ1ZSwgTlVMTCwgMSwgJmtleSk7CisJfQor CWVsc2UKKwl7CisJCVNjYW5LZXlJbml0KCZrZXksCisJCQkJCUFudW1fcGdfY29uc3RyYWludF9j b250eXBpZCwKKwkJCQkJQlRFcXVhbFN0cmF0ZWd5TnVtYmVyLCBGX09JREVRLAorCQkJCQlPYmpl Y3RJZEdldERhdHVtKGRvbWFpbklkKSk7CisJCXNjYW4gPSBzeXN0YWJsZV9iZWdpbnNjYW4oY29u UmVsLCBDb25zdHJhaW50VHlwaWRJbmRleElkLAorCQkJCQkJCQkgIHRydWUsIE5VTEwsIDEsICZr ZXkpOworCX0KKworCS8qCisJICogRm9yIGVhY2ggY29uc3RyYWludCwgYWRkIGEgbm9kZSB0byB0 aGUgbGlzdCBvZiB0YWJsZSBlbGVtZW50cy4gIEluCisJICogdGhlc2Ugbm9kZXMgd2UgaW5jbHVk ZSBub3Qgb25seSB0aGUgcHJpbnRhYmxlIGluZm9ybWF0aW9uICgiZm10IiksIGJ1dAorCSAqIGFs c28gc2VwYXJhdGUgYXR0cmlidXRlcyB0byBpbmRpY2F0ZSB0aGUgdHlwZSBvZiBjb25zdHJhaW50 LCBmb3IKKwkgKiBhdXRvbWF0aWMgcHJvY2Vzc2luZy4KKwkgKi8KKwl3aGlsZSAoSGVhcFR1cGxl SXNWYWxpZCh0dXBsZSA9IHN5c3RhYmxlX2dldG5leHQoc2NhbikpKQorCXsKKwkJRm9ybV9wZ19j b25zdHJhaW50IGNvbnN0ckZvcm07CisJCWNoYXIJICAgKmNvbnR5cGU7CisKKwkJY29uc3RyRm9y bSA9IChGb3JtX3BnX2NvbnN0cmFpbnQpIEdFVFNUUlVDVCh0dXBsZSk7CisKKwkJc3dpdGNoIChj b25zdHJGb3JtLT5jb250eXBlKQorCQl7CisJCQljYXNlIENPTlNUUkFJTlRfQ0hFQ0s6CisJCQkJ Y29udHlwZSA9ICJjaGVjayI7CisJCQkJYnJlYWs7CisJCQljYXNlIENPTlNUUkFJTlRfRk9SRUlH TjoKKwkJCQljb250aW51ZTsJCS8qIG5vdCBoZXJlICovCisJCQljYXNlIENPTlNUUkFJTlRfUFJJ TUFSWToKKwkJCQljb250eXBlID0gInByaW1hcnkga2V5IjsKKwkJCQlicmVhazsKKwkJCWNhc2Ug Q09OU1RSQUlOVF9VTklRVUU6CisJCQkJY29udHlwZSA9ICJ1bmlxdWUiOworCQkJCWJyZWFrOwor CQkJY2FzZSBDT05TVFJBSU5UX1RSSUdHRVI6CisJCQkJY29udHlwZSA9ICJ0cmlnZ2VyIjsKKwkJ CQlicmVhazsKKwkJCWNhc2UgQ09OU1RSQUlOVF9FWENMVVNJT046CisJCQkJY29udHlwZSA9ICJl eGNsdXNpb24iOworCQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQllbG9nKEVSUk9SLCAidW5y ZWNvZ25pemVkIGNvbnN0cmFpbnQgdHlwZSIpOworCQl9CisKKwkJLyoKKwkJICogInR5cGUiIGFu ZCAiY29udHlwZSIgYXJlIG5vdCBwYXJ0IG9mIHRoZSBwcmludGFibGUgb3V0cHV0LCBidXQgYXJl CisJCSAqIHVzZWZ1bCB0byBwcm9ncmFtbWF0aWNhbGx5IGRpc3Rpbmd1aXNoIHRoZXNlIGZyb20g Y29sdW1ucyBhbmQgYW1vbmcKKwkJICogZGlmZmVyZW50IGNvbnN0cmFpbnQgdHlwZXMuCisJCSAq CisJCSAqIFhYWCBpdCBtaWdodCBiZSB1c2VmdWwgdG8gYWxzbyBsaXN0IHRoZSBjb2x1bW4gbmFt ZXMgaW4gYSBQSywgZXRjLgorCQkgKi8KKwkJY29uc3RyID0gbmV3X29ianRyZWVfVkEoIkNPTlNU UkFJTlQgJXtuYW1lfUkgJXtkZWZpbml0aW9ufXMiLCA0LAorCQkJCQkJCQkidHlwZSIsIE9ialR5 cGVTdHJpbmcsICJjb25zdHJhaW50IiwKKwkJCQkJCQkJImNvbnR5cGUiLCBPYmpUeXBlU3RyaW5n LCBjb250eXBlLAorCQkJCQkJCQkibmFtZSIsIE9ialR5cGVTdHJpbmcsIE5hbWVTdHIoY29uc3Ry Rm9ybS0+Y29ubmFtZSksCisJCQkJCQkJCSJkZWZpbml0aW9uIiwgT2JqVHlwZVN0cmluZywKKwkJ CQkJCQkJcGdfZ2V0X2NvbnN0cmFpbnRkZWZfY29tbWFuZF9zaW1wbGUoY29uc3RyRm9ybS0+b2lk KSk7CisJCWVsZW1lbnRzID0gbGFwcGVuZChlbGVtZW50cywgbmV3X29iamVjdF9vYmplY3QoY29u c3RyKSk7CisJfQorCisJc3lzdGFibGVfZW5kc2NhbihzY2FuKTsKKwl0YWJsZV9jbG9zZShjb25S ZWwsIEFjY2Vzc1NoYXJlTG9jayk7CisKKwlyZXR1cm4gZWxlbWVudHM7Cit9CisKKy8qCisgKiBS ZXR1cm4gYW4gaW5kZXggZGVmaW5pdGlvbiwgc3BsaXQgaW50byBzZXZlcmFsIHBpZWNlcy4KKyAq CisgKiBBIGxhcmdlIGFtb3VudCBvZiBjb2RlIGlzIGR1cGxpY2F0ZWQgZnJvbSAgcGdfZ2V0X2lu ZGV4ZGVmX3dvcmtlciwgYnV0CisgKiBjb250cm9sIGZsb3cgaXMgZGlmZmVyZW50IGVub3VnaCB0 aGF0IGl0IGRvZXNuJ3Qgc2VlbSB3b3J0aCBrZWVwaW5nIHRoZW0KKyAqIHRvZ2V0aGVyLgorICov CitzdGF0aWMgdm9pZAorcGdfZ2V0X2luZGV4ZGVmX2RldGFpbGVkKE9pZCBpbmRleHJlbGlkLAor CQkJCQkJIGNoYXIgKippbmRleF9hbSwKKwkJCQkJCSBjaGFyICoqZGVmaW5pdGlvbiwKKwkJCQkJ CSBjaGFyICoqcmVsb3B0aW9ucywKKwkJCQkJCSBjaGFyICoqdGFibGVzcGFjZSwKKwkJCQkJCSBj aGFyICoqd2hlcmVDbGF1c2UpCit7CisJSGVhcFR1cGxlCWh0X2lkeDsKKwlIZWFwVHVwbGUJaHRf aWR4cmVsOworCUhlYXBUdXBsZQlodF9hbTsKKwlGb3JtX3BnX2luZGV4IGlkeHJlYzsKKwlGb3Jt X3BnX2NsYXNzIGlkeHJlbHJlYzsKKwlGb3JtX3BnX2FtCWFtcmVjOworCUluZGV4QW1Sb3V0aW5l ICphbXJvdXRpbmU7CisJTGlzdAkgICAqaW5kZXhwcnM7CisJTGlzdENlbGwgICAqaW5kZXhwcl9p dGVtOworCUxpc3QJICAgKmNvbnRleHQ7CisJT2lkCQkJaW5kcmVsaWQ7CisJaW50CQkJa2V5bm87 CisJRGF0dW0JCWluZGNvbGxEYXR1bTsKKwlEYXR1bQkJaW5kY2xhc3NEYXR1bTsKKwlEYXR1bQkJ aW5kb3B0aW9uRGF0dW07CisJYm9vbAkJaXNudWxsOworCW9pZHZlY3RvciAgKmluZGNvbGxhdGlv bjsKKwlvaWR2ZWN0b3IgICppbmRjbGFzczsKKwlpbnQydmVjdG9yICppbmRvcHRpb247CisJU3Ry aW5nSW5mb0RhdGEgZGVmaW5pdGlvbkJ1ZjsKKworCSp0YWJsZXNwYWNlID0gTlVMTDsKKwkqd2hl cmVDbGF1c2UgPSBOVUxMOworCisJLyogRmV0Y2ggdGhlIHBnX2luZGV4IHR1cGxlIGJ5IHRoZSBP aWQgb2YgdGhlIGluZGV4ICovCisJaHRfaWR4ID0gU2VhcmNoU3lzQ2FjaGUxKElOREVYUkVMSUQs IE9iamVjdElkR2V0RGF0dW0oaW5kZXhyZWxpZCkpOworCWlmICghSGVhcFR1cGxlSXNWYWxpZCho dF9pZHgpKQorCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3IgaW5kZXggd2l0 aCBPSUQgJXUiLCBpbmRleHJlbGlkKTsKKwlpZHhyZWMgPSAoRm9ybV9wZ19pbmRleCkgR0VUU1RS VUNUKGh0X2lkeCk7CisKKwlpbmRyZWxpZCA9IGlkeHJlYy0+aW5kcmVsaWQ7CisJQXNzZXJ0KGlu ZGV4cmVsaWQgPT0gaWR4cmVjLT5pbmRleHJlbGlkKTsKKworCS8qIE11c3QgZ2V0IGluZGNvbGxh dGlvbiwgaW5kY2xhc3MsIGFuZCBpbmRvcHRpb24gdGhlIGhhcmQgd2F5ICovCisJaW5kY29sbERh dHVtID0gU3lzQ2FjaGVHZXRBdHRyKElOREVYUkVMSUQsIGh0X2lkeCwKKwkJCQkJCQkJICAgQW51 bV9wZ19pbmRleF9pbmRjb2xsYXRpb24sICZpc251bGwpOworCUFzc2VydCghaXNudWxsKTsKKwlp bmRjb2xsYXRpb24gPSAob2lkdmVjdG9yICopIERhdHVtR2V0UG9pbnRlcihpbmRjb2xsRGF0dW0p OworCisJaW5kY2xhc3NEYXR1bSA9IFN5c0NhY2hlR2V0QXR0cihJTkRFWFJFTElELCBodF9pZHgs CisJCQkJCQkJCQlBbnVtX3BnX2luZGV4X2luZGNsYXNzLCAmaXNudWxsKTsKKwlBc3NlcnQoIWlz bnVsbCk7CisJaW5kY2xhc3MgPSAob2lkdmVjdG9yICopIERhdHVtR2V0UG9pbnRlcihpbmRjbGFz c0RhdHVtKTsKKworCWluZG9wdGlvbkRhdHVtID0gU3lzQ2FjaGVHZXRBdHRyKElOREVYUkVMSUQs IGh0X2lkeCwKKwkJCQkJCQkJCSBBbnVtX3BnX2luZGV4X2luZG9wdGlvbiwgJmlzbnVsbCk7CisJ QXNzZXJ0KCFpc251bGwpOworCWluZG9wdGlvbiA9IChpbnQydmVjdG9yICopIERhdHVtR2V0UG9p bnRlcihpbmRvcHRpb25EYXR1bSk7CisKKwkvKiBGZXRjaCB0aGUgcGdfY2xhc3MgdHVwbGUgb2Yg dGhlIGluZGV4IHJlbGF0aW9uICovCisJaHRfaWR4cmVsID0gU2VhcmNoU3lzQ2FjaGUxKFJFTE9J RCwgT2JqZWN0SWRHZXREYXR1bShpbmRleHJlbGlkKSk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlk KGh0X2lkeHJlbCkpCisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciByZWxh dGlvbiB3aXRoIE9JRCAldSIsIGluZGV4cmVsaWQpOworCWlkeHJlbHJlYyA9IChGb3JtX3BnX2Ns YXNzKSBHRVRTVFJVQ1QoaHRfaWR4cmVsKTsKKworCS8qIEZldGNoIHRoZSBwZ19hbSB0dXBsZSBv ZiB0aGUgaW5kZXgnIGFjY2VzcyBtZXRob2QgKi8KKwlodF9hbSA9IFNlYXJjaFN5c0NhY2hlMShB TU9JRCwgT2JqZWN0SWRHZXREYXR1bShpZHhyZWxyZWMtPnJlbGFtKSk7CisJaWYgKCFIZWFwVHVw bGVJc1ZhbGlkKGh0X2FtKSkKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9y IGFjY2VzcyBtZXRob2Qgd2l0aCBPSUQgJXUiLAorCQkJIGlkeHJlbHJlYy0+cmVsYW0pOworCWFt cmVjID0gKEZvcm1fcGdfYW0pIEdFVFNUUlVDVChodF9hbSk7CisKKwkvKgorCSAqIEdldCB0aGUg aW5kZXggZXhwcmVzc2lvbnMsIGlmIGFueS4gIChOT1RFOiB3ZSBkbyBub3QgdXNlIHRoZSByZWxj YWNoZQorCSAqIHZlcnNpb25zIG9mIHRoZSBleHByZXNzaW9ucyBhbmQgcHJlZGljYXRlLCBiZWNh dXNlIHdlIHdhbnQgdG8gZGlzcGxheQorCSAqIG5vbi1jb25zdC1mb2xkZWQgZXhwcmVzc2lvbnMu KQorCSAqLworCWlmICghaGVhcF9hdHRpc251bGwoaHRfaWR4LCBBbnVtX3BnX2luZGV4X2luZGV4 cHJzLCBOVUxMKSkKKwl7CisJCURhdHVtCQlleHByc0RhdHVtOworCQljaGFyCSAgICpleHByc1N0 cmluZzsKKworCQlleHByc0RhdHVtID0gU3lzQ2FjaGVHZXRBdHRyKElOREVYUkVMSUQsIGh0X2lk eCwKKwkJCQkJCQkJCSBBbnVtX3BnX2luZGV4X2luZGV4cHJzLCAmaXNudWxsKTsKKwkJQXNzZXJ0 KCFpc251bGwpOworCQlleHByc1N0cmluZyA9IFRleHREYXR1bUdldENTdHJpbmcoZXhwcnNEYXR1 bSk7CisJCWluZGV4cHJzID0gKExpc3QgKikgc3RyaW5nVG9Ob2RlKGV4cHJzU3RyaW5nKTsKKwkJ cGZyZWUoZXhwcnNTdHJpbmcpOworCX0KKwllbHNlCisJCWluZGV4cHJzID0gTklMOworCisJaW5k ZXhwcl9pdGVtID0gbGlzdF9oZWFkKGluZGV4cHJzKTsKKworCWNvbnRleHQgPSBkZXBhcnNlX2Nv bnRleHRfZm9yKGdldF9yZWxfbmFtZShpbmRyZWxpZCksIGluZHJlbGlkKTsKKworCWluaXRTdHJp bmdJbmZvKCZkZWZpbml0aW9uQnVmKTsKKworCS8qIE91dHB1dCBpbmRleCBBTSAqLworCSppbmRl eF9hbSA9IHBzdHJkdXAocXVvdGVfaWRlbnRpZmllcihOYW1lU3RyKGFtcmVjLT5hbW5hbWUpKSk7 CisKKwkvKiBGZXRjaCB0aGUgaW5kZXggQU0ncyBBUEkgc3RydWN0ICovCisJYW1yb3V0aW5lID0g R2V0SW5kZXhBbVJvdXRpbmUoYW1yZWMtPmFtaGFuZGxlcik7CisKKwkvKgorCSAqIE91dHB1dCBp bmRleCBkZWZpbml0aW9uLiAgTm90ZSB0aGUgb3V0ZXIgcGFyZW5zIG11c3QgYmUgc3VwcGxpZWQg YnkKKwkgKiBjYWxsZXIuCisJICovCisJYXBwZW5kU3RyaW5nSW5mb1N0cmluZygmZGVmaW5pdGlv bkJ1ZiwgIigiKTsKKwlmb3IgKGtleW5vID0gMDsga2V5bm8gPCBpZHhyZWMtPmluZG5hdHRzOyBr ZXlubysrKQorCXsKKwkJQXR0ck51bWJlcglhdHRudW0gPSBpZHhyZWMtPmluZGtleS52YWx1ZXNb a2V5bm9dOworCQlpbnQxNgkJb3B0ID0gaW5kb3B0aW9uLT52YWx1ZXNba2V5bm9dOworCQlPaWQJ CQlrZXljb2x0eXBlOworCQlPaWQJCQlrZXljb2xjb2xsYXRpb247CisKKwkJLyogUHJpbnQgSU5D TFVERSB0byBkaXZpZGUga2V5IGFuZCBub24ta2V5IGF0dHJzLiAqLworCQlpZiAoa2V5bm8gPT0g aWR4cmVjLT5pbmRua2V5YXR0cykKKwkJeworCQkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZygmZGVm aW5pdGlvbkJ1ZiwgIikgSU5DTFVERSAoIik7CisJCX0KKwkJZWxzZQorCQkJYXBwZW5kU3RyaW5n SW5mb1N0cmluZygmZGVmaW5pdGlvbkJ1Ziwga2V5bm8gPT0gMCA/ICIiIDogIiwgIik7CisKKwkJ aWYgKGF0dG51bSAhPSAwKQorCQl7CisJCQkvKiBTaW1wbGUgaW5kZXggY29sdW1uICovCisJCQlj aGFyCSAgICphdHRuYW1lOworCQkJaW50MzIJCWtleWNvbHR5cG1vZDsKKworCQkJYXR0bmFtZSA9 IGdldF9hdHRuYW1lKGluZHJlbGlkLCBhdHRudW0sIGZhbHNlKTsKKwkJCWFwcGVuZFN0cmluZ0lu Zm9TdHJpbmcoJmRlZmluaXRpb25CdWYsIHF1b3RlX2lkZW50aWZpZXIoYXR0bmFtZSkpOworCQkJ Z2V0X2F0dHR5cGV0eXBtb2Rjb2xsKGluZHJlbGlkLCBhdHRudW0sCisJCQkJCQkJCSAgJmtleWNv bHR5cGUsICZrZXljb2x0eXBtb2QsCisJCQkJCQkJCSAgJmtleWNvbGNvbGxhdGlvbik7CisJCX0K KwkJZWxzZQorCQl7CisJCQkvKiBFeHByZXNzaW9uYWwgaW5kZXggKi8KKwkJCU5vZGUJICAgKmlu ZGV4a2V5OworCQkJY2hhcgkgICAqc3RyOworCisJCQlpZiAoaW5kZXhwcl9pdGVtID09IE5VTEwp CisJCQkJZWxvZyhFUlJPUiwgInRvbyBmZXcgZW50cmllcyBpbiBpbmRleHBycyBsaXN0Iik7CisJ CQlpbmRleGtleSA9IChOb2RlICopIGxmaXJzdChpbmRleHByX2l0ZW0pOworCQkJaW5kZXhwcl9p dGVtID0gbG5leHQoaW5kZXhwcnMsIGluZGV4cHJfaXRlbSk7CisKKwkJCS8qIERlcGFyc2UgKi8K KwkJCXN0ciA9IGRlcGFyc2VfZXhwcmVzc2lvbihpbmRleGtleSwgY29udGV4dCwgZmFsc2UsIGZh bHNlKTsKKworCQkJLyogTmVlZCBwYXJlbnMgaWYgaXQncyBub3QgYSBiYXJlIGZ1bmN0aW9uIGNh bGwgKi8KKwkJCWlmIChpbmRleGtleSAmJiBJc0EoaW5kZXhrZXksIEZ1bmNFeHByKSAmJgorCQkJ CSgoRnVuY0V4cHIgKikgaW5kZXhrZXkpLT5mdW5jZm9ybWF0ID09IENPRVJDRV9FWFBMSUNJVF9D QUxMKQorCQkJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoJmRlZmluaXRpb25CdWYsIHN0cik7CisJ CQllbHNlCisJCQkJYXBwZW5kU3RyaW5nSW5mbygmZGVmaW5pdGlvbkJ1ZiwgIiglcykiLCBzdHIp OworCisJCQlrZXljb2x0eXBlID0gZXhwclR5cGUoaW5kZXhrZXkpOworCQkJa2V5Y29sY29sbGF0 aW9uID0gZXhwckNvbGxhdGlvbihpbmRleGtleSk7CisJCX0KKworCQkvKiBQcmludCBhZGRpdGlv bmFsIGRlY29yYXRpb24gZm9yIChzZWxlY3RlZCkga2V5IGNvbHVtbnMsIGV2ZW4gaWYgZGVmYXVs dCAqLworCQlpZiAoa2V5bm8gPCBpZHhyZWMtPmluZG5rZXlhdHRzKQorCQl7CisJCQlPaWQgaW5k Y29sbCA9IGluZGNvbGxhdGlvbi0+dmFsdWVzW2tleW5vXTsKKwkJCWlmIChPaWRJc1ZhbGlkKGlu ZGNvbGwpKQorCQkJCWFwcGVuZFN0cmluZ0luZm8oJmRlZmluaXRpb25CdWYsICIgQ09MTEFURSAl cyIsCisJCQkJCQkJCWdlbmVyYXRlX2NvbGxhdGlvbl9uYW1lKChpbmRjb2xsKSkpOworCisJCQkv KiBBZGQgdGhlIG9wZXJhdG9yIGNsYXNzIG5hbWUsIGV2ZW4gaWYgZGVmYXVsdCAqLworCQkJZ2V0 X29wY2xhc3NfbmFtZShpbmRjbGFzcy0+dmFsdWVzW2tleW5vXSwgSW52YWxpZE9pZCwgJmRlZmlu aXRpb25CdWYpOworCisJCQkvKiBBZGQgb3B0aW9ucyBpZiByZWxldmFudCAqLworCQkJaWYgKGFt cm91dGluZS0+YW1jYW5vcmRlcikKKwkJCXsKKwkJCQkvKiBJZiBpdCBzdXBwb3J0cyBzb3J0IG9y ZGVyaW5nLCByZXBvcnQgREVTQyBhbmQgTlVMTFMgb3B0cyAqLworCQkJCWlmIChvcHQgJiBJTkRP UFRJT05fREVTQykKKwkJCQl7CisJCQkJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoJmRlZmluaXRp b25CdWYsICIgREVTQyIpOworCQkJCQkvKiBOVUxMUyBGSVJTVCBpcyB0aGUgZGVmYXVsdCBpbiB0 aGlzIGNhc2UgKi8KKwkJCQkJaWYgKCEob3B0ICYgSU5ET1BUSU9OX05VTExTX0ZJUlNUKSkKKwkJ CQkJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoJmRlZmluaXRpb25CdWYsICIgTlVMTFMgTEFTVCIp OworCQkJCX0KKwkJCQllbHNlCisJCQkJeworCQkJCQlpZiAob3B0ICYgSU5ET1BUSU9OX05VTExT X0ZJUlNUKQorCQkJCQkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZygmZGVmaW5pdGlvbkJ1ZiwgIiBO VUxMUyBGSVJTVCIpOworCQkJCX0KKwkJCX0KKworCQkJLyogWFhYIGV4Y2x1ZGVPcHMgdGhpbmd5 IHdhcyBoZXJlOyBkbyB3ZSBuZWVkIGFueXRoaW5nPyAqLworCQl9CisJfQorCWFwcGVuZFN0cmlu Z0luZm9TdHJpbmcoJmRlZmluaXRpb25CdWYsICIpIik7CisJKmRlZmluaXRpb24gPSBkZWZpbml0 aW9uQnVmLmRhdGE7CisKKwkvKiBPdXRwdXQgcmVsb3B0aW9ucyAqLworCSpyZWxvcHRpb25zID0g ZmxhdHRlbl9yZWxvcHRpb25zKGluZGV4cmVsaWQpOworCisJLyogT3V0cHV0IHRhYmxlc3BhY2Ug Ki8KKwl7CisJCU9pZAkJCXRibHNwYzsKKworCQl0YmxzcGMgPSBnZXRfcmVsX3RhYmxlc3BhY2Uo aW5kZXhyZWxpZCk7CisJCWlmIChPaWRJc1ZhbGlkKHRibHNwYykpCisJCQkqdGFibGVzcGFjZSA9 IHBzdHJkdXAocXVvdGVfaWRlbnRpZmllcihnZXRfdGFibGVzcGFjZV9uYW1lKHRibHNwYykpKTsK Kwl9CisKKwkvKiBSZXBvcnQgaW5kZXggcHJlZGljYXRlLCBpZiBhbnkgKi8KKwlpZiAoIWhlYXBf YXR0aXNudWxsKGh0X2lkeCwgQW51bV9wZ19pbmRleF9pbmRwcmVkLCBOVUxMKSkKKwl7CisJCU5v ZGUJICAgKm5vZGU7CisJCURhdHVtCQlwcmVkRGF0dW07CisJCWNoYXIJICAgKnByZWRTdHJpbmc7 CisKKwkJLyogQ29udmVydCB0ZXh0IHN0cmluZyB0byBub2RlIHRyZWUgKi8KKwkJcHJlZERhdHVt ID0gU3lzQ2FjaGVHZXRBdHRyKElOREVYUkVMSUQsIGh0X2lkeCwKKwkJCQkJCQkJCUFudW1fcGdf aW5kZXhfaW5kcHJlZCwgJmlzbnVsbCk7CisJCUFzc2VydCghaXNudWxsKTsKKwkJcHJlZFN0cmlu ZyA9IFRleHREYXR1bUdldENTdHJpbmcocHJlZERhdHVtKTsKKwkJbm9kZSA9IChOb2RlICopIHN0 cmluZ1RvTm9kZShwcmVkU3RyaW5nKTsKKwkJcGZyZWUocHJlZFN0cmluZyk7CisKKwkJLyogRGVw YXJzZSAqLworCQkqd2hlcmVDbGF1c2UgPSBkZXBhcnNlX2V4cHJlc3Npb24obm9kZSwgY29udGV4 dCwgZmFsc2UsIGZhbHNlKTsKKwl9CisKKwkvKiBDbGVhbiB1cCAqLworCVJlbGVhc2VTeXNDYWNo ZShodF9pZHgpOworCVJlbGVhc2VTeXNDYWNoZShodF9pZHhyZWwpOworCVJlbGVhc2VTeXNDYWNo ZShodF9hbSk7Cit9CisKKy8qCisgKiBPYnRhaW4gdGhlIGRlcGFyc2VkIGRlZmF1bHQgdmFsdWUg Zm9yIHRoZSBnaXZlbiBjb2x1bW4gb2YgdGhlIGdpdmVuIHRhYmxlLgorICoKKyAqIENhbGxlciBt dXN0IGhhdmUgc2V0IGEgY29ycmVjdCBkZXBhcnNlIGNvbnRleHQuCisgKi8KK3N0YXRpYyBjaGFy ICoKK1JlbGF0aW9uR2V0Q29sdW1uRGVmYXVsdChSZWxhdGlvbiByZWwsIEF0dHJOdW1iZXIgYXR0 bm8sIExpc3QgKmRwY29udGV4dCwKKwkJCQkJCSBMaXN0ICoqZXhwcnMpCit7CisJTm9kZQkgICAq ZGVmdmFsOworCWNoYXIJICAgKmRlZnN0cjsKKworCWRlZnZhbCA9IGJ1aWxkX2NvbHVtbl9kZWZh dWx0KHJlbCwgYXR0bm8pOworCWRlZnN0ciA9IGRlcGFyc2VfZXhwcmVzc2lvbihkZWZ2YWwsIGRw Y29udGV4dCwgZmFsc2UsIGZhbHNlKTsKKworCS8qIENvbGxlY3QgdGhlIGV4cHJlc3Npb24gZm9y IGxhdGVyIHJlcGxpY2F0aW9uIHNhZmV0eSBjaGVja3MgKi8KKwlpZiAoZXhwcnMpCisJCSpleHBy cyA9IGxhcHBlbmQoKmV4cHJzLCBkZWZ2YWwpOworCisJcmV0dXJuIGRlZnN0cjsKK30KKworLyoK KyAqIE9idGFpbiB0aGUgZGVwYXJzZWQgcGFydGl0aW9uIGJvdW5kIGV4cHJlc3Npb24gZm9yIHRo ZSBnaXZlbiB0YWJsZS4KKyAqLworc3RhdGljIGNoYXIgKgorUmVsYXRpb25HZXRQYXJ0aXRpb25C b3VuZChPaWQgcmVsaWQpCit7CisJRGF0dW0JCWRlcGFyc2VkOworCURhdHVtCQlib3VuZERhdHVt OworCWJvb2wJCWlzbnVsbDsKKwlIZWFwVHVwbGUJdHVwbGU7CisKKwl0dXBsZSA9IFNlYXJjaFN5 c0NhY2hlMShSRUxPSUQsIHJlbGlkKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQodHVwbGUpKQor CQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3IgcmVsYXRpb24gd2l0aCBPSUQg JXUiLCByZWxpZCk7CisKKwlib3VuZERhdHVtID0gU3lzQ2FjaGVHZXRBdHRyKFJFTE9JRCwgdHVw bGUsCisJCQkJCQkJCSBBbnVtX3BnX2NsYXNzX3JlbHBhcnRib3VuZCwKKwkJCQkJCQkJICZpc251 bGwpOworCisJZGVwYXJzZWQgPSBEaXJlY3RGdW5jdGlvbkNhbGwyKHBnX2dldF9leHByLAorCQkJ CQkJCQkgICBDU3RyaW5nR2V0VGV4dERhdHVtKFRleHREYXR1bUdldENTdHJpbmcoYm91bmREYXR1 bSkpLAorCQkJCQkJCQkgICByZWxpZCk7CisKKwlSZWxlYXNlU3lzQ2FjaGUodHVwbGUpOworCisJ cmV0dXJuIFRleHREYXR1bUdldENTdHJpbmcoZGVwYXJzZWQpOworfQorCisvKgorICogR2l2ZW4g YSBDb2xsZWN0ZWRDb21tYW5kLCByZXR1cm4gYSBKU09OIHJlcHJlc2VudGF0aW9uIG9mIGl0Lgor ICoKKyAqIFRoZSBjb21tYW5kIGlzIGV4cGFuZGVkIGZ1bGx5IHNvIHRoYXQgdGhlcmUgYXJlIG5v IGFtYmlndWl0aWVzIGV2ZW4gaW4gdGhlCisgKiBmYWNlIG9mIHNlYXJjaF9wYXRoIGNoYW5nZXMu CisgKi8KK0RhdHVtCitkZGxfZGVwYXJzZV90b19qc29uKFBHX0ZVTkNUSU9OX0FSR1MpCit7CisJ Q29sbGVjdGVkQ29tbWFuZCAqY21kID0gKENvbGxlY3RlZENvbW1hbmQgKikgUEdfR0VUQVJHX1BP SU5URVIoMCk7CisJY2hhcgkgICAqY29tbWFuZDsKKworCWNvbW1hbmQgPSBkZXBhcnNlX3V0aWxp dHlfY29tbWFuZChjbWQsIHRydWUpOworCisJaWYgKGNvbW1hbmQpCisJCVBHX1JFVFVSTl9URVhU X1AoY3N0cmluZ190b190ZXh0KGNvbW1hbmQpKTsKKworCVBHX1JFVFVSTl9OVUxMKCk7Cit9CisK Ky8qCisgKiBEZXBhcnNlIGFuIEFsdGVyQ29sbGF0aW9uU3RtdCAoQUxURVIgQ09MTEFUSU9OKQor ICoKKyAqIEdpdmVuIGEgY29sbGF0aW9uIE9JRCBhbmQgdGhlIHBhcnNlIHRyZWUgdGhhdCBjcmVh dGVkIGl0LCByZXR1cm4gYW4gT2JqVHJlZQorICogcmVwcmVzZW50aW5nIHRoZSBhbHRlciBjb21t YW5kLgorICoKKyAqIFZlcmJvc2Ugc3ludGF4OgorICogQUxURVIgQ09MTEFUSU9OICV7aWRlbnRp dHl9TyBSRUZSRVNIIFZFUlNJT04KKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9BbHRl ckNvbGxhdGlvbihPaWQgb2JqZWN0SWQsIE5vZGUgKnBhcnNldHJlZSkKK3sKKwlPYmpUcmVlICAg ICpyZXQ7CisJSGVhcFR1cGxlCWNvbFR1cDsKKwlGb3JtX3BnX2NvbGxhdGlvbiBjb2xGb3JtOwor CisJY29sVHVwID0gU2VhcmNoU3lzQ2FjaGUxKENPTExPSUQsIE9iamVjdElkR2V0RGF0dW0ob2Jq ZWN0SWQpKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQoY29sVHVwKSkKKwkJZWxvZyhFUlJPUiwg ImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIGNvbGxhdGlvbiB3aXRoIE9JRCAldSIsIG9iamVjdElk KTsKKwljb2xGb3JtID0gKEZvcm1fcGdfY29sbGF0aW9uKSBHRVRTVFJVQ1QoY29sVHVwKTsKKwor CXJldCA9IG5ld19vYmp0cmVlX1ZBKCJBTFRFUiBDT0xMQVRJT04gJXtpZGVudGl0eX1PIFJFRlJF U0ggVkVSU0lPTiIsIDEsCisJCQkJCQkgImlkZW50aXR5IiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJ CSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUoY29sRm9ybS0+Y29sbG5hbWVzcGFjZSwKKwkJCQkJ CQkJCQkJCSAgTmFtZVN0cihjb2xGb3JtLT5jb2xsbmFtZSkpKTsKKworCVJlbGVhc2VTeXNDYWNo ZShjb2xUdXApOworCisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIERlcGFyc2UgYW4gQWx0ZXJG dW5jdGlvblN0bXQgKEFMVEVSIEZVTkNUSU9OL1JPVVRJTkUvUFJPQ0VEVVJFKQorICoKKyAqIEdp dmVuIGEgZnVuY3Rpb24gT0lEIGFuZCB0aGUgcGFyc2UgdHJlZSB0aGF0IGNyZWF0ZWQgaXQsIHJl dHVybiBhbiBPYmpUcmVlCisgKiByZXByZXNlbnRpbmcgdGhlIGFsdGVyIGNvbW1hbmQuCisgKgor ICogVmVyYm9zZSBzeW50YXg6CisgKiBBTFRFUiBGVU5DVElPTi9ST1VUSU5FL1BST0NFRFVSRSAl e3NpZ25hdHVyZX1zICV7ZGVmaW5pdGlvbjogfXMKKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVw YXJzZV9BbHRlckZ1bmN0aW9uKE9pZCBvYmplY3RJZCwgTm9kZSAqcGFyc2V0cmVlKQoreworCUFs dGVyRnVuY3Rpb25TdG10ICpub2RlID0gKEFsdGVyRnVuY3Rpb25TdG10ICopIHBhcnNldHJlZTsK KwlPYmpUcmVlICAgICpyZXQ7CisJT2JqVHJlZSAgICAqc2lnbjsKKwlIZWFwVHVwbGUJcHJvY1R1 cDsKKwlGb3JtX3BnX3Byb2MgcHJvY0Zvcm07CisJTGlzdAkgICAqcGFyYW1zID0gTklMOworCUxp c3QJICAgKmVsZW1zID0gTklMOworCUxpc3RDZWxsICAgKmNlbGw7CisJaW50CQkJaTsKKworCS8q IEdldCB0aGUgcGdfcHJvYyB0dXBsZSAqLworCXByb2NUdXAgPSBTZWFyY2hTeXNDYWNoZTEoUFJP Q09JRCwgb2JqZWN0SWQpOworCWlmICghSGVhcFR1cGxlSXNWYWxpZChwcm9jVHVwKSkKKwkJZWxv ZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIGZ1bmN0aW9uIHdpdGggT0lEICV1Iiwg b2JqZWN0SWQpOworCXByb2NGb3JtID0gKEZvcm1fcGdfcHJvYykgR0VUU1RSVUNUKHByb2NUdXAp OworCisJaWYgKHByb2NGb3JtLT5wcm9raW5kID09IFBST0tJTkRfUFJPQ0VEVVJFKQorCQlyZXQg PSBuZXdfb2JqdHJlZSgiQUxURVIgUFJPQ0VEVVJFIik7CisJZWxzZQorCQlyZXQgPSBuZXdfb2Jq dHJlZShub2RlLT5vYmp0eXBlID09IE9CSkVDVF9ST1VUSU5FID8KKwkJCQkJCSAgIkFMVEVSIFJP VVRJTkUiIDogIkFMVEVSIEZVTkNUSU9OIik7CisKKwkvKgorCSAqIEFMVEVSIEZVTkNUSU9OIGRv ZXMgbm90IGNoYW5nZSBzaWduYXR1cmUgc28gd2UgY2FuIHVzZSBjYXRhbG9nIHRvIGdldAorCSAq IGlucHV0IHR5cGUgT2lkcy4KKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgcHJvY0Zvcm0tPnByb25h cmdzOyBpKyspCisJeworCQlPYmpUcmVlICAgICp0bXBfb2JqOworCisJCXRtcF9vYmogPSBuZXdf b2JqdHJlZV9WQSgiJXt0eXBlfVQiLCAxLAorCQkJCQkJCQkidHlwZSIsIE9ialR5cGVPYmplY3Qs CisJCQkJCQkJCW5ld19vYmp0cmVlX2Zvcl90eXBlKHByb2NGb3JtLT5wcm9hcmd0eXBlcy52YWx1 ZXNbaV0sIC0xKSk7CisJCXBhcmFtcyA9IGxhcHBlbmQocGFyYW1zLCBuZXdfb2JqZWN0X29iamVj dCh0bXBfb2JqKSk7CisJfQorCisJc2lnbiA9IG5ld19vYmp0cmVlX1ZBKCIle2lkZW50aXR5fUQg KCV7YXJndW1lbnRzOiwgfXMpIiwgMiwKKwkJCQkJCSAgImlkZW50aXR5IiwgT2JqVHlwZU9iamVj dCwKKwkJCQkJCSAgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFByb2NlZHVyZVJlbGF0aW9u SWQsIG9iamVjdElkKSwKKwkJCQkJCSAgImFyZ3VtZW50cyIsIE9ialR5cGVBcnJheSwgcGFyYW1z KTsKKworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHJldCwgIiV7c2lnbmF0dXJlfXMiLCBzaWduKTsK KworCWZvcmVhY2goY2VsbCwgbm9kZS0+YWN0aW9ucykKKwl7CisJCURlZkVsZW0gICAgKmRlZmVs ID0gKERlZkVsZW0gKikgbGZpcnN0KGNlbGwpOworCQlPYmpUcmVlICAgICp0bXBfb2JqID0gTlVM TDsKKworCQlpZiAoc3RyY21wKGRlZmVsLT5kZWZuYW1lLCAidm9sYXRpbGl0eSIpID09IDApCisJ CQl0bXBfb2JqID0gbmV3X29ianRyZWUoc3RyVmFsKGRlZmVsLT5hcmcpKTsKKwkJZWxzZSBpZiAo c3RyY21wKGRlZmVsLT5kZWZuYW1lLCAic3RyaWN0IikgPT0gMCkKKwkJCXRtcF9vYmogPSBuZXdf b2JqdHJlZShib29sVmFsKGRlZmVsLT5hcmcpID8KKwkJCQkJCQkJICJSRVRVUk5TIE5VTEwgT04g TlVMTCBJTlBVVCIgOgorCQkJCQkJCQkgIkNBTExFRCBPTiBOVUxMIElOUFVUIik7CisJCWVsc2Ug aWYgKHN0cmNtcChkZWZlbC0+ZGVmbmFtZSwgInNlY3VyaXR5IikgPT0gMCkKKwkJCXRtcF9vYmog PSBuZXdfb2JqdHJlZShib29sVmFsKGRlZmVsLT5hcmcpID8KKwkJCQkJCQkJICJTRUNVUklUWSBE RUZJTkVSIiA6ICJTRUNVUklUWSBJTlZPS0VSIik7CisJCWVsc2UgaWYgKHN0cmNtcChkZWZlbC0+ ZGVmbmFtZSwgImxlYWtwcm9vZiIpID09IDApCisJCQl0bXBfb2JqID0gbmV3X29ianRyZWUoYm9v bFZhbChkZWZlbC0+YXJnKSA/CisJCQkJCQkJCSAiTEVBS1BST09GIiA6ICJOT1QgTEVBS1BST09G Iik7CisJCWVsc2UgaWYgKHN0cmNtcChkZWZlbC0+ZGVmbmFtZSwgImNvc3QiKSA9PSAwKQorCQkJ dG1wX29iaiA9IG5ld19vYmp0cmVlX1ZBKCJDT1NUICV7Y29zdH1uIiwgMSwKKwkJCQkJCQkJCSJj b3N0IiwgT2JqVHlwZUZsb2F0LAorCQkJCQkJCQkJZGVmR2V0TnVtZXJpYyhkZWZlbCkpOworCQll bHNlIGlmIChzdHJjbXAoZGVmZWwtPmRlZm5hbWUsICJyb3dzIikgPT0gMCkKKwkJeworCQkJdG1w X29iaiA9IG5ld19vYmp0cmVlKCJST1dTIik7CisJCQlpZiAoZGVmR2V0TnVtZXJpYyhkZWZlbCkg PT0gMCkKKwkJCQlhcHBlbmRfbm90X3ByZXNlbnQodG1wX29iaik7CisJCQllbHNlCisJCQkJYXBw ZW5kX2Zsb2F0X29iamVjdCh0bXBfb2JqLCAiJXtyb3dzfW4iLAorCQkJCQkJCQkJZGVmR2V0TnVt ZXJpYyhkZWZlbCkpOworCQl9CisJCWVsc2UgaWYgKHN0cmNtcChkZWZlbC0+ZGVmbmFtZSwgInNl dCIpID09IDApCisJCXsKKwkJCVZhcmlhYmxlU2V0U3RtdCAqc3N0bXQgPSAoVmFyaWFibGVTZXRT dG10ICopIGRlZmVsLT5hcmc7CisJCQljaGFyCSAgICp2YWx1ZSA9IEV4dHJhY3RTZXRWYXJpYWJs ZUFyZ3Moc3N0bXQpOworCisJCQl0bXBfb2JqID0gZGVwYXJzZV9GdW5jdGlvblNldChzc3RtdC0+ a2luZCwgc3N0bXQtPm5hbWUsIHZhbHVlKTsKKwkJfQorCQllbHNlIGlmIChzdHJjbXAoZGVmZWwt PmRlZm5hbWUsICJzdXBwb3J0IikgPT0gMCkKKwkJeworCQkJT2lkCQkJYXJndHlwZXNbMV07CisK KwkJCXRtcF9vYmogPSBuZXdfb2JqdHJlZSgiU1VQUE9SVCIpOworCisJCQlBc3NlcnQocHJvY0Zv cm0tPnByb3N1cHBvcnQpOworCisJCQkvKgorCQkJICogV2Ugc2hvdWxkIHF1YWxpZnkgdGhlIHN1 cHBvcnQgZnVuY3Rpb24ncyBuYW1lIGlmIGl0IHdvdWxkbid0IGJlCisJCQkgKiByZXNvbHZlZCBi eSBsb29rdXAgaW4gdGhlIGN1cnJlbnQgc2VhcmNoIHBhdGguCisJCQkgKi8KKwkJCWFyZ3R5cGVz WzBdID0gSU5URVJOQUxPSUQ7CisJCQlhcHBlbmRfc3RyaW5nX29iamVjdCh0bXBfb2JqLCAiJXtu YW1lfXMiLCAibmFtZSIsCisJCQkJCQkJCSBnZW5lcmF0ZV9mdW5jdGlvbl9uYW1lKHByb2NGb3Jt LT5wcm9zdXBwb3J0LCAxLAorCQkJCQkJCQkJCQkJCQlOSUwsIGFyZ3R5cGVzLAorCQkJCQkJCQkJ CQkJCQlmYWxzZSwgTlVMTCwKKwkJCQkJCQkJCQkJCQkJRVhQUl9LSU5EX05PTkUpKTsKKwkJfQor CQllbHNlIGlmIChzdHJjbXAoZGVmZWwtPmRlZm5hbWUsICJwYXJhbGxlbCIpID09IDApCisJCQl0 bXBfb2JqID0gbmV3X29ianRyZWVfVkEoIlBBUkFMTEVMICV7dmFsdWV9cyIsIDEsCisJCQkJCQkJ CQkidmFsdWUiLCBPYmpUeXBlU3RyaW5nLCBzdHJWYWwoZGVmZWwtPmFyZykpOworCisJCWVsZW1z ID0gbGFwcGVuZChlbGVtcywgbmV3X29iamVjdF9vYmplY3QodG1wX29iaikpOworCX0KKworCWFw cGVuZF9hcnJheV9vYmplY3QocmV0LCAiJXtkZWZpbml0aW9uOiB9cyIsIGVsZW1zKTsKKworCVJl bGVhc2VTeXNDYWNoZShwcm9jVHVwKTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBEZXBh cnNlIGFuIEFsdGVyT2JqZWN0U2NoZW1hU3RtdCAoQUxURVIgLi4uIFNFVCBTQ0hFTUEgY29tbWFu ZCkKKyAqCisgKiBHaXZlbiB0aGUgb2JqZWN0IGFkZHJlc3MgYW5kIHRoZSBwYXJzZSB0cmVlIHRo YXQgY3JlYXRlZCBpdCwgcmV0dXJuIGFuCisgKiBPYmpUcmVlIHJlcHJlc2VudGluZyB0aGUgYWx0 ZXIgY29tbWFuZC4KKyAqCisgKiBWZXJib3NlIHN5bnRheAorICogQUxURVIgJXMgJXtpZGVudGl0 eX1zIFNFVCBTQ0hFTUEgJXtuZXdzY2hlbWF9SQorICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBh cnNlX0FsdGVyT2JqZWN0U2NoZW1hU3RtdChPYmplY3RBZGRyZXNzIGFkZHJlc3MsIE5vZGUgKnBh cnNldHJlZSwKKwkJCQkJCQkgIE9iamVjdEFkZHJlc3Mgb2xkX3NjaGVtYSkKK3sKKwlBbHRlck9i amVjdFNjaGVtYVN0bXQgKm5vZGUgPSAoQWx0ZXJPYmplY3RTY2hlbWFTdG10ICopIHBhcnNldHJl ZTsKKwljaGFyCSAgICppZGVudGl0eTsKKwljaGFyCSAgICpuZXdfc2NoZW1hID0gbm9kZS0+bmV3 c2NoZW1hOworCWNoYXIJICAgKm9sZF9zY2huYW1lOworCWNoYXIJICAgKmlkZW50OworCisJLyoK KwkgKiBTaW5jZSB0aGUgY29tbWFuZCBoYXMgYWxyZWFkeSB0YWtlbiBwbGFjZSBmcm9tIHRoZSBw b2ludCBvZiB2aWV3IG9mCisJICogY2F0YWxvZ3MsIGdldE9iamVjdElkZW50aXR5IHJldHVybnMg dGhlIG9iamVjdCBuYW1lIHdpdGggdGhlIGFscmVhZHkKKwkgKiBjaGFuZ2VkIHNjaGVtYS4gIFRo ZSBvdXRwdXQgb2Ygb3VyIGRlcGFyc2luZyBtdXN0IHJldHVybiB0aGUgb3JpZ2luYWwKKwkgKiBz Y2hlbWEgbmFtZSwgaG93ZXZlciwgc28gd2UgY2hvcCB0aGUgc2NoZW1hIG5hbWUgb2ZmIHRoZSBp ZGVudGl0eQorCSAqIHN0cmluZyBhbmQgdGhlbiBwcmVwZW5kIHRoZSBxdW90ZWQgc2NoZW1hIG5h bWUuCisJICoKKwkgKiBYWFggVGhpcyBpcyBwcmV0dHkgY2x1bmt5LiBDYW4gd2UgZG8gYmV0dGVy PworCSAqLworCWlkZW50aXR5ID0gZ2V0T2JqZWN0SWRlbnRpdHkoJmFkZHJlc3MsIGZhbHNlKTsK KwlvbGRfc2NobmFtZSA9IGdldF9uYW1lc3BhY2VfbmFtZShvbGRfc2NoZW1hLm9iamVjdElkKTsK KwlpZiAoIW9sZF9zY2huYW1lKQorCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBm b3Igc2NoZW1hIHdpdGggT0lEICV1IiwKKwkJCSBvbGRfc2NoZW1hLm9iamVjdElkKTsKKworCWlk ZW50ID0gcHNwcmludGYoIiVzJXMiLCBxdW90ZV9pZGVudGlmaWVyKG9sZF9zY2huYW1lKSwKKwkJ CQkJIGlkZW50aXR5ICsgc3RybGVuKHF1b3RlX2lkZW50aWZpZXIobmV3X3NjaGVtYSkpKTsKKwor CXJldHVybiBuZXdfb2JqdHJlZV9WQSgiQUxURVIgJXtvYmp0eXBlfXMgJXtpZGVudGl0eX1zIFNF VCBTQ0hFTUEgJXtuZXdzY2hlbWF9SSIsIDMsCisJCQkJCQkgICJvYmp0eXBlIiwgT2JqVHlwZVN0 cmluZywKKwkJCQkJCSAgc3RyaW5naWZ5X29ianR5cGUobm9kZS0+b2JqZWN0VHlwZSwgZmFsc2Up LAorCQkJCQkJICAiaWRlbnRpdHkiLCBPYmpUeXBlU3RyaW5nLCBpZGVudCwKKwkJCQkJCSAgIm5l d3NjaGVtYSIsIE9ialR5cGVTdHJpbmcsIG5ld19zY2hlbWEpOworfQorCisvKgorICogRGVwYXJz ZSBhIEdSQU5UL1JFVk9LRSBjb21tYW5kLgorICoKKyAqIFZlcmJvc2Ugc3ludGF4CisgKiBHUkFO VCAle3ByaXZpbGVnZXM6LCB9cyBPTiIgJXtvYmp0eXBlfXMgJXtwcml2dGFyZ2V0OiwgfXMgVE8g JXtncmFudGVlczosIH1zCisgKiAle2dyYW50X29wdGlvbn1zIEdSQU5URUQgQlkgJXtyb2xlbmFt ZX1zCisgKiAJCU9SCisgKiBSRVZPS0UgJXtwcml2aWxlZ2VzOiwgfXMgT04iICV7b2JqdHlwZX1z ICV7cHJpdnRhcmdldDosIH1zCisgKiBGUk9NICV7Z3JhbnRlZXM6LCB9cyAle2dyYW50X29wdGlv bn1zICV7Y2FzY2FkZX1zCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfR3JhbnRTdG10 KENvbGxlY3RlZENvbW1hbmQgKmNtZCkKK3sKKwlJbnRlcm5hbEdyYW50ICppc3RtdDsKKwlPYmpU cmVlICAgICpyZXQ7CisJTGlzdAkgICAqbGlzdCA9IE5JTDsKKwlMaXN0Q2VsbCAgICpjZWxsOwor CU9pZAkJCWNsYXNzSWQ7CisJT2JqVHJlZSAgICAqdG1wOworCisJLyogRG9uJ3QgZGVwYXJzZSBT UUwgY29tbWFuZHMgZ2VuZXJhdGVkIHdoaWxlIGNyZWF0aW5nIGV4dGVuc2lvbiAqLworCWlmIChj bWQtPmluX2V4dGVuc2lvbikKKwkJcmV0dXJuIE5VTEw7CisKKwlpc3RtdCA9IGNtZC0+ZC5ncmFu dC5pc3RtdDsKKworCS8qCisJICogSWYgdGhlcmUgYXJlIG5vIG9iamVjdHMgZnJvbSAiQUxMIC4u LiBJTiBTQ0hFTUEiIHRvIGJlIGdyYW50ZWQsIHRoZW4KKwkgKiBub3RoaW5nIHRvIGRvLgorCSAq LworCWlmIChpc3RtdC0+b2JqZWN0cyA9PSBOSUwpCisJCXJldHVybiBOVUxMOworCisJc3dpdGNo IChpc3RtdC0+b2JqdHlwZSkKKwl7CisJCWNhc2UgT0JKRUNUX0NPTFVNTjoKKwkJY2FzZSBPQkpF Q1RfVEFCTEU6CisJCWNhc2UgT0JKRUNUX1NFUVVFTkNFOgorCQkJY2xhc3NJZCA9IFJlbGF0aW9u UmVsYXRpb25JZDsKKwkJCWJyZWFrOworCQljYXNlIE9CSkVDVF9ET01BSU46CisJCWNhc2UgT0JK RUNUX1RZUEU6CisJCQljbGFzc0lkID0gVHlwZVJlbGF0aW9uSWQ7CisJCQlicmVhazsKKwkJY2Fz ZSBPQkpFQ1RfRkRXOgorCQkJY2xhc3NJZCA9IEZvcmVpZ25EYXRhV3JhcHBlclJlbGF0aW9uSWQ7 CisJCQlicmVhazsKKwkJY2FzZSBPQkpFQ1RfRk9SRUlHTl9TRVJWRVI6CisJCQljbGFzc0lkID0g Rm9yZWlnblNlcnZlclJlbGF0aW9uSWQ7CisJCQlicmVhazsKKwkJY2FzZSBPQkpFQ1RfRlVOQ1RJ T046CisJCWNhc2UgT0JKRUNUX1BST0NFRFVSRToKKwkJY2FzZSBPQkpFQ1RfUk9VVElORToKKwkJ CWNsYXNzSWQgPSBQcm9jZWR1cmVSZWxhdGlvbklkOworCQkJYnJlYWs7CisJCWNhc2UgT0JKRUNU X0xBTkdVQUdFOgorCQkJY2xhc3NJZCA9IExhbmd1YWdlUmVsYXRpb25JZDsKKwkJCWJyZWFrOwor CQljYXNlIE9CSkVDVF9MQVJHRU9CSkVDVDoKKwkJCWNsYXNzSWQgPSBMYXJnZU9iamVjdFJlbGF0 aW9uSWQ7CisJCQlicmVhazsKKwkJY2FzZSBPQkpFQ1RfU0NIRU1BOgorCQkJY2xhc3NJZCA9IE5h bWVzcGFjZVJlbGF0aW9uSWQ7CisJCQlicmVhazsKKwkJY2FzZSBPQkpFQ1RfREFUQUJBU0U6CisJ CWNhc2UgT0JKRUNUX1RBQkxFU1BBQ0U6CisJCQljbGFzc0lkID0gSW52YWxpZE9pZDsKKwkJCWVs b2coRVJST1IsICJnbG9iYWwgb2JqZWN0cyBub3Qgc3VwcG9ydGVkIik7CisJCQlicmVhazsKKwkJ ZGVmYXVsdDoKKwkJCWVsb2coRVJST1IsICJpbnZhbGlkIE9CSkVDVCB2YWx1ZSAlZCIsIGlzdG10 LT5vYmp0eXBlKTsKKwl9CisKKwkvKiBHUkFOVCBUTyBvciBSRVZPS0UgRlJPTSAqLworCXJldCA9 IG5ld19vYmp0cmVlKGlzdG10LT5pc19ncmFudCA/ICJHUkFOVCIgOiAiUkVWT0tFIik7CisKKwkv KiBCdWlsZCBhIGxpc3Qgb2YgcHJpdmlsZWdlcyB0byBncmFudC9yZXZva2UgKi8KKwlpZiAoaXN0 bXQtPmFsbF9wcml2cykKKwl7CisJCXRtcCA9IG5ld19vYmp0cmVlKCJBTEwgUFJJVklMRUdFUyIp OworCQlsaXN0ID0gbGlzdF9tYWtlMShuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKwl9CisJZWxz ZQorCXsKKwkJY2hhciAqcHJpdjsKKwkJaWYgKGlzdG10LT5wcml2aWxlZ2VzICYgQUNMX0lOU0VS VCkKKwkJeworCQkJcHJpdiA9IChjaGFyICopcHJpdmlsZWdlX3RvX3N0cmluZyhBQ0xfSU5TRVJU KTsKKwkJCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19zdHJpbmdfb2JqZWN0KHByaXYpKTsKKwkJ fQorCQlpZiAoaXN0bXQtPnByaXZpbGVnZXMgJiBBQ0xfU0VMRUNUKQorCQl7CisJCQlwcml2ID0g KGNoYXIgKilwcml2aWxlZ2VfdG9fc3RyaW5nKEFDTF9TRUxFQ1QpOworCQkJbGlzdCA9IGxhcHBl bmQobGlzdCwgbmV3X3N0cmluZ19vYmplY3QocHJpdikpOworCQl9CisJCWlmIChpc3RtdC0+cHJp dmlsZWdlcyAmIEFDTF9VUERBVEUpCisJCXsKKwkJCXByaXYgPSAoY2hhciAqKXByaXZpbGVnZV90 b19zdHJpbmcoQUNMX1VQREFURSk7CisJCQlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfc3RyaW5n X29iamVjdChwcml2KSk7CisJCX0KKwkJaWYgKGlzdG10LT5wcml2aWxlZ2VzICYgQUNMX0RFTEVU RSkKKwkJeworCQkJcHJpdiA9IChjaGFyICopcHJpdmlsZWdlX3RvX3N0cmluZyhBQ0xfREVMRVRF KTsKKwkJCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19zdHJpbmdfb2JqZWN0KHByaXYpKTsKKwkJ fQorCQlpZiAoaXN0bXQtPnByaXZpbGVnZXMgJiBBQ0xfVFJVTkNBVEUpCisJCXsKKwkJCXByaXYg PSAoY2hhciAqKXByaXZpbGVnZV90b19zdHJpbmcoQUNMX1RSVU5DQVRFKTsKKwkJCWxpc3QgPSBs YXBwZW5kKGxpc3QsIG5ld19zdHJpbmdfb2JqZWN0KHByaXYpKTsKKwkJfQorCQlpZiAoaXN0bXQt PnByaXZpbGVnZXMgJiBBQ0xfUkVGRVJFTkNFUykKKwkJeworCQkJcHJpdiA9IChjaGFyICopcHJp dmlsZWdlX3RvX3N0cmluZyhBQ0xfUkVGRVJFTkNFUyk7CisJCQlsaXN0ID0gbGFwcGVuZChsaXN0 LCBuZXdfc3RyaW5nX29iamVjdChwcml2KSk7CisJCX0KKwkJaWYgKGlzdG10LT5wcml2aWxlZ2Vz ICYgQUNMX1RSSUdHRVIpCisJCXsKKwkJCXByaXYgPSAoY2hhciAqKXByaXZpbGVnZV90b19zdHJp bmcoQUNMX1RSSUdHRVIpOworCQkJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X3N0cmluZ19vYmpl Y3QocHJpdikpOworCQl9CisJCWlmIChpc3RtdC0+cHJpdmlsZWdlcyAmIEFDTF9FWEVDVVRFKQor CQl7CisJCQlwcml2ID0gKGNoYXIgKilwcml2aWxlZ2VfdG9fc3RyaW5nKEFDTF9FWEVDVVRFKTsK KwkJCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19zdHJpbmdfb2JqZWN0KHByaXYpKTsKKwkJfQor CQlpZiAoaXN0bXQtPnByaXZpbGVnZXMgJiBBQ0xfVVNBR0UpCisJCXsKKwkJCXByaXYgPSAoY2hh ciAqKXByaXZpbGVnZV90b19zdHJpbmcoQUNMX1VTQUdFKTsKKwkJCWxpc3QgPSBsYXBwZW5kKGxp c3QsIG5ld19zdHJpbmdfb2JqZWN0KHByaXYpKTsKKwkJfQorCQlpZiAoaXN0bXQtPnByaXZpbGVn ZXMgJiBBQ0xfQ1JFQVRFKQorCQl7CisJCQlwcml2ID0gKGNoYXIgKilwcml2aWxlZ2VfdG9fc3Ry aW5nKEFDTF9DUkVBVEUpOworCQkJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X3N0cmluZ19vYmpl Y3QocHJpdikpOworCQl9CisJCWlmIChpc3RtdC0+cHJpdmlsZWdlcyAmIEFDTF9DUkVBVEVfVEVN UCkKKwkJeworCQkJcHJpdiA9IChjaGFyICopcHJpdmlsZWdlX3RvX3N0cmluZyhBQ0xfQ1JFQVRF X1RFTVApOworCQkJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X3N0cmluZ19vYmplY3QocHJpdikp OworCQl9CisJCWlmIChpc3RtdC0+cHJpdmlsZWdlcyAmIEFDTF9DT05ORUNUKQorCQl7CisJCQlw cml2ID0gKGNoYXIgKilwcml2aWxlZ2VfdG9fc3RyaW5nKEFDTF9DT05ORUNUKTsKKwkJCWxpc3Qg PSBsYXBwZW5kKGxpc3QsIG5ld19zdHJpbmdfb2JqZWN0KHByaXYpKTsKKwkJfQorCQlpZiAoaXN0 bXQtPnByaXZpbGVnZXMgJiBBQ0xfTUFJTlRBSU4pCisJCXsKKwkJCXByaXYgPSAoY2hhciAqKXBy aXZpbGVnZV90b19zdHJpbmcoQUNMX01BSU5UQUlOKTsKKwkJCWxpc3QgPSBsYXBwZW5kKGxpc3Qs IG5ld19zdHJpbmdfb2JqZWN0KHByaXYpKTsKKwkJfQorCisJCWlmICghaXN0bXQtPmlzX2dyYW50 ICYmIGlzdG10LT5ncmFudF9vcHRpb24pCisJCQlhcHBlbmRfc3RyaW5nX29iamVjdChyZXQsICIl e2dyYW50X29wdGlvbn1zIiwgImdyYW50X29wdGlvbiIsCisJCQkJCQkJCSBpc3RtdC0+Z3JhbnRf b3B0aW9uID8gIkdSQU5UIE9QVElPTiBGT1IiIDogIiIpOworCisJCWlmIChpc3RtdC0+Y29sX3By aXZzICE9IE5JTCkKKwkJeworCQkJTGlzdENlbGwgICAqb2NlbGw7CisKKwkJCWZvcmVhY2gob2Nl bGwsIGlzdG10LT5jb2xfcHJpdnMpCisJCQl7CisJCQkJQWNjZXNzUHJpdiAqcHJpdiA9IGxmaXJz dChvY2VsbCk7CisJCQkJTGlzdAkgICAqY29scyA9IE5JTDsKKworCQkJCWZvcmVhY2goY2VsbCwg cHJpdi0+Y29scykKKwkJCQl7CisJCQkJCVN0cmluZwkgICAqY29sbmFtZSA9IGxmaXJzdF9ub2Rl KFN0cmluZywgY2VsbCk7CisKKwkJCQkJY29scyA9IGxhcHBlbmQoY29scywKKwkJCQkJCQkJICAg bmV3X3N0cmluZ19vYmplY3Qoc3RyVmFsKGNvbG5hbWUpKSk7CisJCQkJfQorCisJCQkJdG1wID0g bmV3X29ianRyZWVfVkEoIigle2NvbHM6LCB9cykgJXtwcml2fXMiLCAyLAorCQkJCQkJCQkJICJj b2xzIiwgT2JqVHlwZUFycmF5LCBjb2xzLAorCQkJCQkJCQkJICJwcml2IiwgT2JqVHlwZVN0cmlu ZywKKwkJCQkJCQkJCSAgcHJpdi0+cHJpdl9uYW1lID8gcHJpdi0+cHJpdl9uYW1lIDogIkFMTCBQ UklWSUxFR0VTIik7CisKKwkJCQlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVj dCh0bXApKTsKKwkJCX0KKwkJfQorCX0KKwlhcHBlbmRfYXJyYXlfb2JqZWN0KHJldCwgIiV7cHJp dmlsZWdlczosIH1zIE9OIiwgbGlzdCk7CisKKwlhcHBlbmRfc3RyaW5nX29iamVjdChyZXQsICIl e29ianR5cGV9cyIsICJvYmp0eXBlIiwKKwkJCQkJCSAoY2hhciAqKXN0cmluZ2lmeV9vYmp0eXBl KGlzdG10LT5vYmp0eXBlLCB0cnVlKSk7CisKKwkvKiBUYXJnZXQgb2JqZWN0cy4gIFdlIHVzZSBv YmplY3QgaWRlbnRpdGllcyBoZXJlICovCisJbGlzdCA9IE5JTDsKKwlmb3JlYWNoKGNlbGwsIGlz dG10LT5vYmplY3RzKQorCXsKKwkJT2lkCQkJb2JqaWQgPSBsZmlyc3Rfb2lkKGNlbGwpOworCQlP YmplY3RBZGRyZXNzIGFkZHI7CisKKwkJYWRkci5jbGFzc0lkID0gY2xhc3NJZDsKKwkJYWRkci5v YmplY3RJZCA9IG9iamlkOworCQlhZGRyLm9iamVjdFN1YklkID0gMDsKKworCQl0bXAgPSBuZXdf b2JqdHJlZV9WQSgiJXtpZGVudGl0eX1zIiwgMSwKKwkJCQkJCQkgImlkZW50aXR5IiwgT2JqVHlw ZVN0cmluZywKKwkJCQkJCQkgZ2V0T2JqZWN0SWRlbnRpdHkoJmFkZHIsIGZhbHNlKSk7CisKKwkJ bGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wKSk7CisJfQorCWFwcGVu ZF9hcnJheV9vYmplY3QocmV0LCAiJXtwcml2dGFyZ2V0OiwgfXMiLCBsaXN0KTsKKworCWFwcGVu ZF9mb3JtYXRfc3RyaW5nKHJldCwgaXN0bXQtPmlzX2dyYW50ID8gIlRPIiA6ICJGUk9NIik7CisK KwkvKiBMaXN0IG9mIGdyYW50ZWVzICovCisJbGlzdCA9IE5JTDsKKwlmb3JlYWNoKGNlbGwsIGlz dG10LT5ncmFudGVlcykKKwl7CisJCU9pZAkJCWdyYW50ZWUgPSBsZmlyc3Rfb2lkKGNlbGwpOwor CisJCXRtcCA9IG5ld19vYmp0cmVlX2Zvcl9yb2xlX2lkKGdyYW50ZWUpOworCQlsaXN0ID0gbGFw cGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKwl9CisKKwlhcHBlbmRfYXJyYXlf b2JqZWN0KHJldCwgIiV7Z3JhbnRlZXM6LCB9cyIsIGxpc3QpOworCisJLyogVGhlIHdvcmRpbmcg b2YgdGhlIGdyYW50IG9wdGlvbiBpcyB2YXJpYWJsZSAuLi4gKi8KKwlpZiAoaXN0bXQtPmlzX2dy YW50KQorCQlhcHBlbmRfc3RyaW5nX29iamVjdChyZXQsICIle2dyYW50X29wdGlvbn1zIiwgImdy YW50X29wdGlvbiIsCisJCQkJCQkJIGlzdG10LT5ncmFudF9vcHRpb24gPyAiV0lUSCBHUkFOVCBP UFRJT04iIDogIiIpOworCisJaWYgKGlzdG10LT5ncmFudG9yX3VpZCkKKwl7CisJCUhlYXBUdXBs ZQlyb2x0dXA7CisJCWNoYXIJICAgKnJvbGVuYW1lOworCisJCXJvbHR1cCA9IFNlYXJjaFN5c0Nh Y2hlMShBVVRIT0lELCBPYmplY3RJZEdldERhdHVtKGlzdG10LT5ncmFudG9yX3VpZCkpOworCQlp ZiAoIUhlYXBUdXBsZUlzVmFsaWQocm9sdHVwKSkKKwkJCWVsb2coRVJST1IsICJjYWNoZSBsb29r dXAgZmFpbGVkIGZvciByb2xlIHdpdGggT0lEICV1IiwKKwkJCQkgaXN0bXQtPmdyYW50b3JfdWlk KTsKKworCQlyb2xlbmFtZSA9IE5hbWVTdHIoKChGb3JtX3BnX2F1dGhpZCkgR0VUU1RSVUNUKHJv bHR1cCkpLT5yb2xuYW1lKTsKKwkJYXBwZW5kX3N0cmluZ19vYmplY3QocmV0LCAiR1JBTlRFRCBC WSAle3JvbGVuYW1lfXMiLAorCQkJCQkJCSAicm9sZW5hbWUiLCByb2xlbmFtZSk7CisJCVJlbGVh c2VTeXNDYWNoZShyb2x0dXApOworCX0KKworCWlmICghaXN0bXQtPmlzX2dyYW50KQorCQlhcHBl bmRfc3RyaW5nX29iamVjdChyZXQsICIle2Nhc2NhZGV9cyIsICJjYXNjYWRlIiwKKwkJCQkJCQkg aXN0bXQtPmJlaGF2aW9yID09IERST1BfQ0FTQ0FERSA/ICJDQVNDQURFIiA6ICIiKTsKKworCXJl dHVybiByZXQ7Cit9CisKKy8qCisgKiBEZXBhcnNlIGFuIEFsdGVyT3BlcmF0b3JTdG10IChBTFRF UiBPUEVSQVRPUiAuLi4gU0VUIC4uLikuCisgKgorICogR2l2ZW4gYW4gb3BlcmF0b3IgT0lEIGFu ZCB0aGUgcGFyc2UgdHJlZSB0aGF0IGNyZWF0ZWQgaXQsIHJldHVybiBhbiBPYmpUcmVlCisgKiBy ZXByZXNlbnRpbmcgdGhlIGFsdGVyIGNvbW1hbmQuCisgKgorICogVmVyYm9zZSBzeW50YXgKKyAq IEFMVEVSIE9QRVJBVE9SICV7aWRlbnRpdHl9TyAoJXtsZWZ0X3R5cGV9VCwgJXtyaWdodF90eXBl fVQpCisgKiBTRVQgKCV7ZWxlbXM6LCB9cykKKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJz ZV9BbHRlck9wZXJhdG9yU3RtdChPaWQgb2JqZWN0SWQsIE5vZGUgKnBhcnNldHJlZSkKK3sKKwlI ZWFwVHVwbGUJb3ByVHVwOworCUFsdGVyT3BlcmF0b3JTdG10ICpub2RlID0gKEFsdGVyT3BlcmF0 b3JTdG10ICopIHBhcnNldHJlZTsKKwlPYmpUcmVlICAgICpyZXQ7CisJRm9ybV9wZ19vcGVyYXRv ciBvcHJGb3JtOworCUxpc3RDZWxsICAgKmNlbGw7CisJTGlzdAkgICAqbGlzdCA9IE5JTDsKKwor CW9wclR1cCA9IFNlYXJjaFN5c0NhY2hlMShPUEVST0lELCBPYmplY3RJZEdldERhdHVtKG9iamVj dElkKSk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKG9wclR1cCkpCisJCWVsb2coRVJST1IsICJj YWNoZSBsb29rdXAgZmFpbGVkIGZvciBvcGVyYXRvciB3aXRoIE9JRCAldSIsIG9iamVjdElkKTsK KwlvcHJGb3JtID0gKEZvcm1fcGdfb3BlcmF0b3IpIEdFVFNUUlVDVChvcHJUdXApOworCisJcmV0 ID0gbmV3X29ianRyZWVfVkEoIkFMVEVSIE9QRVJBVE9SICV7aWRlbnRpdHl9TyIsIDEsCisJCQkJ CQkgImlkZW50aXR5IiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVh bG5hbWUob3ByRm9ybS0+b3BybmFtZXNwYWNlLAorCQkJCQkJCQkJCQkJICBOYW1lU3RyKG9wckZv cm0tPm9wcm5hbWUpKSk7CisKKwkvKiBMRUZUQVJHICovCisJaWYgKE9pZElzVmFsaWQob3ByRm9y bS0+b3BybGVmdCkpCisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHJldCwgIigle2xlZnRfdHlwZX1U IiwKKwkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3R5cGUob3ByRm9ybS0+b3BybGVmdCwgLTEpKTsK KwllbHNlCisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHJldCwgIigle2xlZnRfdHlwZX1zIiwgImxl ZnRfdHlwZSIsICJOT05FIik7CisKKwkvKiBSSUdIVEFSRyAqLworCUFzc2VydChPaWRJc1ZhbGlk KG9wckZvcm0tPm9wcmxlZnQpKTsKKwlhcHBlbmRfb2JqZWN0X29iamVjdChyZXQsICIsICV7cmln aHRfdHlwZX1UKSIsCisJCQkJCQkgbmV3X29ianRyZWVfZm9yX3R5cGUob3ByRm9ybS0+b3Bycmln aHQsIC0xKSk7CisKKwlmb3JlYWNoKGNlbGwsIG5vZGUtPm9wdGlvbnMpCisJeworCQlEZWZFbGVt ICAgICplbGVtID0gKERlZkVsZW0gKikgbGZpcnN0KGNlbGwpOworCQlPYmpUcmVlICAgICp0bXBf b2JqID0gTlVMTDsKKworCQlpZiAoc3RyY21wKGVsZW0tPmRlZm5hbWUsICJyZXN0cmljdCIpID09 IDApCisJCXsKKwkJCXRtcF9vYmogPSBuZXdfb2JqdHJlZV9WQSgiUkVTVFJJQ1Q9IiwgMSwKKwkJ CQkJCQkJCSJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAicmVzdHJpY3QiKTsKKwkJCWlmIChPaWRJ c1ZhbGlkKG9wckZvcm0tPm9wcnJlc3QpKQorCQkJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcF9v YmosICIle3Byb2NlZHVyZX1EIiwKKwkJCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVf aWQoUHJvY2VkdXJlUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkJCQkgb3ByRm9ybS0+b3BycmVz dCkpOworCQkJZWxzZQorCQkJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRtcF9vYmosICIle3Byb2Nl ZHVyZX1zIiwgInByb2NlZHVyZSIsCisJCQkJCQkJCQkgIk5PTkUiKTsKKwkJfQorCQllbHNlIGlm IChzdHJjbXAoZWxlbS0+ZGVmbmFtZSwgImpvaW4iKSA9PSAwKQorCQl7CisJCQl0bXBfb2JqID0g bmV3X29ianRyZWVfVkEoIkpPSU49IiwgMSwKKwkJCQkJCQkJCSJjbGF1c2UiLCBPYmpUeXBlU3Ry aW5nLCAiam9pbiIpOworCQkJaWYgKE9pZElzVmFsaWQob3ByRm9ybS0+b3Byam9pbikpCisJCQkJ YXBwZW5kX29iamVjdF9vYmplY3QodG1wX29iaiwgIiV7cHJvY2VkdXJlfUQiLAorCQkJCQkJCQkJ IG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChQcm9jZWR1cmVSZWxhdGlvbklkLAorCQkJCQkJ CQkJCQkJCQkJCSBvcHJGb3JtLT5vcHJqb2luKSk7CisJCQllbHNlCisJCQkJYXBwZW5kX3N0cmlu Z19vYmplY3QodG1wX29iaiwgIiV7cHJvY2VkdXJlfXMiLCAicHJvY2VkdXJlIiwKKwkJCQkJCQkJ CSAiTk9ORSIpOworCQl9CisKKwkJQXNzZXJ0KHRtcF9vYmopOworCQlsaXN0ID0gbGFwcGVuZChs aXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXBfb2JqKSk7CisJfQorCisJYXBwZW5kX2FycmF5X29i amVjdChyZXQsICJTRVQgKCV7ZWxlbXM6LCB9cykiLCBsaXN0KTsKKworCVJlbGVhc2VTeXNDYWNo ZShvcHJUdXApOworCisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIERlcGFyc2UgYW4gQUxURVIg T1BFUkFUT1IgRkFNSUxZIEFERC9EUk9QIGNvbW1hbmQuCisgKgorICogR2l2ZW4gdGhlIENvbGxl Y3RlZENvbW1hbmQsIHJldHVybiBhbiBPYmpUcmVlIHJlcHJlc2VudGluZyB0aGUgQWx0ZXIKKyAq IE9wZXJhdG9yIGNvbW1hbmQuCisgKgorICogVmVyYm9zZSBzeW50YXgKKyAqIEFMVEVSIE9QRVJB VE9SIEZBTUlMWSAle2lkZW50aXR5fUQgVVNJTkcgJXthbW5hbWV9SSBBREQvRFJPUCAle2l0ZW1z Oix9cworICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0FsdGVyT3BGYW1pbHkoQ29sbGVj dGVkQ29tbWFuZCAqY21kKQoreworCU9ialRyZWUgICAgKnJldDsKKwlBbHRlck9wRmFtaWx5U3Rt dCAqc3RtdCA9IChBbHRlck9wRmFtaWx5U3RtdCAqKSBjbWQtPnBhcnNldHJlZTsKKwlIZWFwVHVw bGUJZnRwOworCUZvcm1fcGdfb3BmYW1pbHkgb3BmRm9ybTsKKwlMaXN0CSAgICpsaXN0ID0gTklM OworCUxpc3RDZWxsICAgKmNlbGw7CisKKwkvKiBEb24ndCBkZXBhcnNlIFNRTCBjb21tYW5kcyBn ZW5lcmF0ZWQgd2hpbGUgY3JlYXRpbmcgZXh0ZW5zaW9uICovCisJaWYgKGNtZC0+aW5fZXh0ZW5z aW9uKQorCQlyZXR1cm4gTlVMTDsKKworCWZ0cCA9IFNlYXJjaFN5c0NhY2hlMShPUEZBTUlMWU9J RCwKKwkJCQkJCSAgT2JqZWN0SWRHZXREYXR1bShjbWQtPmQub3BmYW0uYWRkcmVzcy5vYmplY3RJ ZCkpOworCWlmICghSGVhcFR1cGxlSXNWYWxpZChmdHApKQorCQllbG9nKEVSUk9SLCAiY2FjaGUg bG9va3VwIGZhaWxlZCBmb3Igb3BlcmF0b3IgZmFtaWx5IHdpdGggT0lEICV1IiwKKwkJCSBjbWQt PmQub3BmYW0uYWRkcmVzcy5vYmplY3RJZCk7CisJb3BmRm9ybSA9IChGb3JtX3BnX29wZmFtaWx5 KSBHRVRTVFJVQ1QoZnRwKTsKKworCXJldCA9IG5ld19vYmp0cmVlX1ZBKCJBTFRFUiBPUEVSQVRP UiBGQU1JTFkgJXtpZGVudGl0eX1EIFVTSU5HICV7YW1uYW1lfUkiLCAyLAorCQkJCQkJICJpZGVu dGl0eSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lKG9w ZkZvcm0tPm9wZm5hbWVzcGFjZSwKKwkJCQkJCQkJCQkJCSAgTmFtZVN0cihvcGZGb3JtLT5vcGZu YW1lKSksCisJCQkJCQkgImFtbmFtZSIsIE9ialR5cGVTdHJpbmcsIHN0bXQtPmFtbmFtZSk7CisK Kwlmb3JlYWNoKGNlbGwsIGNtZC0+ZC5vcGZhbS5vcGVyYXRvcnMpCisJeworCQlPcEZhbWlseU1l bWJlciAqb3BlciA9IGxmaXJzdChjZWxsKTsKKwkJT2JqVHJlZSAgICAqdG1wX29iajsKKworCQkv KgorCQkgKiBWZXJib3NlIHN5bnRheAorCQkgKgorCQkgKiBPUEVSQVRPUiAle251bX1uICV7b3Bl cmF0b3J9Tygle2x0eXBlfVQsICV7cnR5cGV9VCkgJXtwdXJwb3NlfXMKKwkJICovCisJCXRtcF9v YmogPSBuZXdfb2JqdHJlZV9WQSgiT1BFUkFUT1IgJXtudW19biIsIDEsCisJCQkJCQkJCSJudW0i LCBPYmpUeXBlSW50ZWdlciwgb3Blci0+bnVtYmVyKTsKKworCQkvKiBBZGQgdGhlIG9wZXJhdG9y IG5hbWU7IHRoZSBEUk9QIGNhc2UgZG9lc24ndCBoYXZlIHRoaXMgKi8KKwkJaWYgKCFzdG10LT5p c0Ryb3ApCisJCQlhcHBlbmRfb2JqZWN0X29iamVjdCh0bXBfb2JqLCAiJXtvcGVyYXRvcn1PIiwK KwkJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChPcGVyYXRvclJlbGF0aW9uSWQs CisJCQkJCQkJCQkJCQkJCQkgb3Blci0+b2JqZWN0KSk7CisKKwkJLyogQWRkIHRoZSB0eXBlcyAq LworCQlhcHBlbmRfb2JqZWN0X29iamVjdCh0bXBfb2JqLCAiKCV7bHR5cGV9VCwiLAorCQkJCQkJ CSBuZXdfb2JqdHJlZV9mb3JfdHlwZShvcGVyLT5sZWZ0dHlwZSwgLTEpKTsKKwkJYXBwZW5kX29i amVjdF9vYmplY3QodG1wX29iaiwgIiV7cnR5cGV9VCkiLAorCQkJCQkJCSBuZXdfb2JqdHJlZV9m b3JfdHlwZShvcGVyLT5yaWdodHR5cGUsIC0xKSk7CisKKwkJLyogQWRkIHRoZSBGT1IgU0VBUkNI IC8gRk9SIE9SREVSIEJZIGNsYXVzZTsgbm90IGluIHRoZSBEUk9QIGNhc2UgKi8KKwkJaWYgKCFz dG10LT5pc0Ryb3ApCisJCXsKKwkJCWlmIChvcGVyLT5zb3J0ZmFtaWx5ID09IEludmFsaWRPaWQp CisJCQkJYXBwZW5kX3N0cmluZ19vYmplY3QodG1wX29iaiwgIiV7cHVycG9zZX1zIiwgInB1cnBv c2UiLAorCQkJCQkJCQkJICJGT1IgU0VBUkNIIik7CisJCQllbHNlCisJCQl7CisJCQkJT2JqVHJl ZSAgICAqb3JkZXJieV9vYmo7CisKKwkJCQlvcmRlcmJ5X29iaiA9IG5ld19vYmp0cmVlX1ZBKCJG T1IgT1JERVIgQlkgJXtvcGZhbWlseX1EIiwgMSwKKwkJCQkJCQkJCQkJIm9wZmFtaWx5IiwgT2Jq VHlwZU9iamVjdCwKKwkJCQkJCQkJCQkJbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKE9wZXJh dG9yRmFtaWx5UmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkJCQkJCW9wZXItPnNvcnRmYW1pbHkp KTsKKwkJCQlhcHBlbmRfb2JqZWN0X29iamVjdCh0bXBfb2JqLCAiJXtwdXJwb3NlfXMiLCBvcmRl cmJ5X29iaik7CisJCQl9CisJCX0KKworCQlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0 X29iamVjdCh0bXBfb2JqKSk7CisJfQorCisJZm9yZWFjaChjZWxsLCBjbWQtPmQub3BmYW0ucHJv Y2VkdXJlcykKKwl7CisJCU9wRmFtaWx5TWVtYmVyICpwcm9jID0gbGZpcnN0KGNlbGwpOworCQlP YmpUcmVlICAgICp0bXBfb2JqOworCisJCXRtcF9vYmogPSBuZXdfb2JqdHJlZV9WQSgiRlVOQ1RJ T04gJXtudW19biAoJXtsdHlwZX1ULCAle3J0eXBlfVQpIiwgMywKKwkJCQkJCQkJIm51bSIsIE9i alR5cGVJbnRlZ2VyLCBwcm9jLT5udW1iZXIsCisJCQkJCQkJCSJsdHlwZSIsIE9ialR5cGVPYmpl Y3QsCisJCQkJCQkJCW5ld19vYmp0cmVlX2Zvcl90eXBlKHByb2MtPmxlZnR0eXBlLCAtMSksCisJ CQkJCQkJCSJydHlwZSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkJCW5ld19vYmp0cmVlX2Zvcl90 eXBlKHByb2MtPnJpZ2h0dHlwZSwgLTEpKTsKKworCQkvKgorCQkgKiBBZGQgdGhlIGZ1bmN0aW9u IG5hbWUgYW5kIGFyZyB0eXBlczsgdGhlIERST1AgY2FzZSBkb2Vzbid0IGhhdmUKKwkJICogdGhp cworCQkgKi8KKwkJaWYgKCFzdG10LT5pc0Ryb3ApCisJCXsKKwkJCUhlYXBUdXBsZQlwcm9jVHVw OworCQkJRm9ybV9wZ19wcm9jIHByb2NGb3JtOworCQkJT2lkCQkgICAqcHJvYXJndHlwZXM7CisJ CQlMaXN0CSAgICphcmdsaXN0ID0gTklMOworCQkJaW50CQkJaTsKKworCQkJcHJvY1R1cCA9IFNl YXJjaFN5c0NhY2hlMShQUk9DT0lELCBPYmplY3RJZEdldERhdHVtKHByb2MtPm9iamVjdCkpOwor CQkJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKHByb2NUdXApKQorCQkJCWVsb2coRVJST1IsICJjYWNo ZSBsb29rdXAgZmFpbGVkIGZvciBwcm9jZWR1cmUgd2l0aCBPSUQgJXUiLAorCQkJCQkgcHJvYy0+ b2JqZWN0KTsKKwkJCXByb2NGb3JtID0gKEZvcm1fcGdfcHJvYykgR0VUU1RSVUNUKHByb2NUdXAp OworCisJCQlwcm9hcmd0eXBlcyA9IHByb2NGb3JtLT5wcm9hcmd0eXBlcy52YWx1ZXM7CisJCQlm b3IgKGkgPSAwOyBpIDwgcHJvY0Zvcm0tPnByb25hcmdzOyBpKyspCisJCQl7CisJCQkJT2JqVHJl ZSAgICAqYXJnOworCisJCQkJYXJnID0gbmV3X29ianRyZWVfZm9yX3R5cGUocHJvYXJndHlwZXNb aV0sIC0xKTsKKwkJCQlhcmdsaXN0ID0gbGFwcGVuZChhcmdsaXN0LCBuZXdfb2JqZWN0X29iamVj dChhcmcpKTsKKwkJCX0KKworCQkJYXBwZW5kX29iamVjdF9vYmplY3QodG1wX29iaiwgIiV7ZnVu Y3Rpb259RCIsCisJCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUocHJvY0Zvcm0tPnBy b25hbWVzcGFjZSwKKwkJCQkJCQkJCQkJCQkJICBOYW1lU3RyKHByb2NGb3JtLT5wcm9uYW1lKSkp OworCisJCQlhcHBlbmRfZm9ybWF0X3N0cmluZyh0bXBfb2JqLCAiKCIpOworCQkJYXBwZW5kX2Fy cmF5X29iamVjdCh0bXBfb2JqLCAiJXthcmd0eXBlczosIH1UIiwgYXJnbGlzdCk7CisJCQlhcHBl bmRfZm9ybWF0X3N0cmluZyh0bXBfb2JqLCAiKSIpOworCisJCQlSZWxlYXNlU3lzQ2FjaGUocHJv Y1R1cCk7CisJCX0KKworCQlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0 bXBfb2JqKSk7CisJfQorCisJaWYgKHN0bXQtPmlzRHJvcCkKKwkJYXBwZW5kX2Zvcm1hdF9zdHJp bmcocmV0LCAiRFJPUCIpOworCWVsc2UKKwkJYXBwZW5kX2Zvcm1hdF9zdHJpbmcocmV0LCAiQURE Iik7CisKKwlhcHBlbmRfYXJyYXlfb2JqZWN0KHJldCwgIiV7aXRlbXM6LCB9cyIsIGxpc3QpOwor CisJUmVsZWFzZVN5c0NhY2hlKGZ0cCk7CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogRGVw YXJzZSBhbiBBbHRlck93bmVyU3RtdCAoQUxURVIgLi4uIE9XTkVSIFRPIC4uLikuCisgKgorICog R2l2ZW4gdGhlIG9iamVjdCBhZGRyZXNzIGFuZCB0aGUgcGFyc2UgdHJlZSB0aGF0IGNyZWF0ZWQg aXQsIHJldHVybiBhbgorICogT2JqVHJlZSByZXByZXNlbnRpbmcgdGhlIGFsdGVyIGNvbW1hbmQu CisgKgorICogVmVyYm9zZSBzeW50YXgKKyAqIEFMVEVSICVzICV7aWRlbnRpdHl9cyBPV05FUiBU TyAle25ld293bmVyfUkKKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9BbHRlck93bmVy U3RtdChPYmplY3RBZGRyZXNzIGFkZHJlc3MsIE5vZGUgKnBhcnNldHJlZSkKK3sKKwlBbHRlck93 bmVyU3RtdCAqbm9kZSA9IChBbHRlck93bmVyU3RtdCAqKSBwYXJzZXRyZWU7CisKKwlyZXR1cm4g bmV3X29ianRyZWVfVkEoIkFMVEVSICV7b2JqdHlwZX1zICV7aWRlbnRpdHl9cyBPV05FUiBUTyAl e25ld293bmVyfUkiLCAzLAorCQkJCQkJICAib2JqdHlwZSIsIE9ialR5cGVTdHJpbmcsCisJCQkJ CQkgIHN0cmluZ2lmeV9vYmp0eXBlKG5vZGUtPm9iamVjdFR5cGUsIGZhbHNlKSwKKwkJCQkJCSAg ImlkZW50aXR5IiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCSAgZ2V0T2JqZWN0SWRlbnRpdHkoJmFk ZHJlc3MsIGZhbHNlKSwKKwkJCQkJCSAgIm5ld293bmVyIiwgT2JqVHlwZVN0cmluZywKKwkJCQkJ CSAgZ2V0X3JvbGVzcGVjX25hbWUobm9kZS0+bmV3b3duZXIpKTsKK30KKworLyoKKyAqIERlcGFy c2UgYW4gQWx0ZXJTZXFTdG10LgorICoKKyAqIEdpdmVuIGEgc2VxdWVuY2UgT0lEIGFuZCBhIHBh cnNlIHRyZWUgdGhhdCBtb2RpZmllZCBpdCwgcmV0dXJuIGFuIE9ialRyZWUKKyAqIHJlcHJlc2Vu dGluZyB0aGUgYWx0ZXIgY29tbWFuZC4KKyAqCisgKiBWZXJib3NlIHN5bnRheAorICogQUxURVIg U0VRVUVOQ0UgJXtpZGVudGl0eX1EICV7ZGVmaW5pdGlvbjogfXMKKyAqLworc3RhdGljIE9ialRy ZWUgKgorZGVwYXJzZV9BbHRlclNlcVN0bXQoT2lkIG9iamVjdElkLCBOb2RlICpwYXJzZXRyZWUp Cit7CisJT2JqVHJlZSAgICAqcmV0OworCVJlbGF0aW9uCXJlbGF0aW9uOworCUZvcm1fcGdfc2Vx dWVuY2VfZGF0YSBzZXFkYXRhOworCUxpc3QJICAgKmVsZW1zID0gTklMOworCUxpc3RDZWxsICAg KmNlbGw7CisJRm9ybV9wZ19zZXF1ZW5jZSBzZXFmb3JtOworCVJlbGF0aW9uCXJlbDsKKwlIZWFw VHVwbGUJc2VxdHVwbGU7CisJQWx0ZXJTZXFTdG10ICphbHRlclNlcVN0bXQgPSAoQWx0ZXJTZXFT dG10ICopIHBhcnNldHJlZTsKKworCS8qCisJICogU2VxdWVuY2UgZm9yIElERU5USVRZIENPTFVN TiBvdXRwdXQgc2VwYXJhdGVseSAodmlhIENSRUFURSBUQUJMRSBvcgorCSAqIEFMVEVSIFRBQkxF KTsgcmV0dXJuIGVtcHR5IGhlcmUuCisJICovCisJaWYgKGFsdGVyU2VxU3RtdC0+Zm9yX2lkZW50 aXR5KQorCQlyZXR1cm4gTlVMTDsKKworCXNlcWRhdGEgPSBnZXRfc2VxdWVuY2VfdmFsdWVzKG9i amVjdElkKTsKKworCXJlbGF0aW9uID0gcmVsYXRpb25fb3BlbihvYmplY3RJZCwgQWNjZXNzU2hh cmVMb2NrKTsKKwlyZWwgPSB0YWJsZV9vcGVuKFNlcXVlbmNlUmVsYXRpb25JZCwgUm93RXhjbHVz aXZlTG9jayk7CisJc2VxdHVwbGUgPSBTZWFyY2hTeXNDYWNoZUNvcHkxKFNFUVJFTElELAorCQkJ CQkJCQkgICBPYmplY3RJZEdldERhdHVtKG9iamVjdElkKSk7CisJaWYgKCFIZWFwVHVwbGVJc1Zh bGlkKHNlcXR1cGxlKSkKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIHNl cXVlbmNlIHdpdGggT0lEICAldSIsIG9iamVjdElkKTsKKworCXNlcWZvcm0gPSAoRm9ybV9wZ19z ZXF1ZW5jZSkgR0VUU1RSVUNUKHNlcXR1cGxlKTsKKworCWZvcmVhY2goY2VsbCwgKChBbHRlclNl cVN0bXQgKikgcGFyc2V0cmVlKS0+b3B0aW9ucykKKwl7CisJCURlZkVsZW0gICAgKmVsZW0gPSAo RGVmRWxlbSAqKSBsZmlyc3QoY2VsbCk7CisJCU9iakVsZW0gICAgKm5ld2VsbTsKKworCQlpZiAo c3RyY21wKGVsZW0tPmRlZm5hbWUsICJjYWNoZSIpID09IDApCisJCQluZXdlbG0gPSBkZXBhcnNl X1NlcV9DYWNoZShzZXFmb3JtLCBmYWxzZSk7CisJCWVsc2UgaWYgKHN0cmNtcChlbGVtLT5kZWZu YW1lLCAiY3ljbGUiKSA9PSAwKQorCQkJbmV3ZWxtID0gZGVwYXJzZV9TZXFfQ3ljbGUoc2VxZm9y bSwgZmFsc2UpOworCQllbHNlIGlmIChzdHJjbXAoZWxlbS0+ZGVmbmFtZSwgImluY3JlbWVudCIp ID09IDApCisJCQluZXdlbG0gPSBkZXBhcnNlX1NlcV9JbmNyZW1lbnRCeShzZXFmb3JtLCBmYWxz ZSk7CisJCWVsc2UgaWYgKHN0cmNtcChlbGVtLT5kZWZuYW1lLCAibWludmFsdWUiKSA9PSAwKQor CQkJbmV3ZWxtID0gZGVwYXJzZV9TZXFfTWludmFsdWUoc2VxZm9ybSwgZmFsc2UpOworCQllbHNl IGlmIChzdHJjbXAoZWxlbS0+ZGVmbmFtZSwgIm1heHZhbHVlIikgPT0gMCkKKwkJCW5ld2VsbSA9 IGRlcGFyc2VfU2VxX01heHZhbHVlKHNlcWZvcm0sIGZhbHNlKTsKKwkJZWxzZSBpZiAoc3RyY21w KGVsZW0tPmRlZm5hbWUsICJzdGFydCIpID09IDApCisJCQluZXdlbG0gPSBkZXBhcnNlX1NlcV9T dGFydHdpdGgoc2VxZm9ybSwgZmFsc2UpOworCQllbHNlIGlmIChzdHJjbXAoZWxlbS0+ZGVmbmFt ZSwgInJlc3RhcnQiKSA9PSAwKQorCQkJbmV3ZWxtID0gZGVwYXJzZV9TZXFfUmVzdGFydChzZXFk YXRhKTsKKwkJZWxzZSBpZiAoc3RyY21wKGVsZW0tPmRlZm5hbWUsICJvd25lZF9ieSIpID09IDAp CisJCQluZXdlbG0gPSBkZXBhcnNlX1NlcV9Pd25lZEJ5KG9iamVjdElkLCBmYWxzZSk7CisJCWVs c2UgaWYgKHN0cmNtcChlbGVtLT5kZWZuYW1lLCAiYXMiKSA9PSAwKQorCQkJbmV3ZWxtID0gZGVw YXJzZV9TZXFfQXMoZWxlbSk7CisJCWVsc2UKKwkJCWVsb2coRVJST1IsICJpbnZhbGlkIHNlcXVl bmNlIG9wdGlvbiAlcyIsIGVsZW0tPmRlZm5hbWUpOworCisJCWVsZW1zID0gbGFwcGVuZChlbGVt cywgbmV3ZWxtKTsKKwl9CisKKwlyZXQgPSBuZXdfb2JqdHJlZV9WQSgiQUxURVIgU0VRVUVOQ0Ug JXtpZGVudGl0eX1EICV7ZGVmaW5pdGlvbjogfXMiLCAyLAorCQkJCQkJICJpZGVudGl0eSIsIE9i alR5cGVPYmplY3QsCisJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lKHJlbGF0aW9uLT5y ZF9yZWwtPnJlbG5hbWVzcGFjZSwKKwkJCQkJCQkJCQkJCSAgUmVsYXRpb25HZXRSZWxhdGlvbk5h bWUocmVsYXRpb24pKSwKKwkJCQkJCSAiZGVmaW5pdGlvbiIsIE9ialR5cGVBcnJheSwgZWxlbXMp OworCisJdGFibGVfY2xvc2UocmVsLCBSb3dFeGNsdXNpdmVMb2NrKTsKKwlyZWxhdGlvbl9jbG9z ZShyZWxhdGlvbiwgQWNjZXNzU2hhcmVMb2NrKTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qCisg KiBEZXBhcnNlIGFuIEFsdGVyVHlwZVN0bXQuCisgKgorICogR2l2ZW4gYSB0eXBlIE9JRCBhbmQg YSBwYXJzZSB0cmVlIHRoYXQgbW9kaWZpZWQgaXQsIHJldHVybiBhbiBPYmpUcmVlCisgKiByZXBy ZXNlbnRpbmcgdGhlIGFsdGVyIHR5cGUuCisgKgorICogVmVyYm9zZSBzeW50YXgKKyAqIEFMVEVS IFRZUEUgJXtpZGVudGl0eX1EICgle2RlZmluaXRpb246IH1zKQorICovCitzdGF0aWMgT2JqVHJl ZSAqCitkZXBhcnNlX0FsdGVyVHlwZVNldFN0bXQoT2lkIG9iamVjdElkLCBOb2RlICpjbWQpCit7 CisJQWx0ZXJUeXBlU3RtdCAqYWx0ZXJUeXBlU2V0U3RtdCA9IChBbHRlclR5cGVTdG10ICopIGNt ZDsKKwlMaXN0Q2VsbCAgICpwbDsKKwlMaXN0CSAgICplbGVtcyA9IE5JTDsKKwlIZWFwVHVwbGUJ dHlwVHVwOworCUZvcm1fcGdfdHlwZSB0eXBGb3JtOworCisJdHlwVHVwID0gU2VhcmNoU3lzQ2Fj aGUxKFRZUEVPSUQsIE9iamVjdElkR2V0RGF0dW0ob2JqZWN0SWQpKTsKKwlpZiAoIUhlYXBUdXBs ZUlzVmFsaWQodHlwVHVwKSkKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9y IHR5cGUgd2l0aCBPSUQgJXUiLCBvYmplY3RJZCk7CisJdHlwRm9ybSA9IChGb3JtX3BnX3R5cGUp IEdFVFNUUlVDVCh0eXBUdXApOworCisJZm9yZWFjaChwbCwgYWx0ZXJUeXBlU2V0U3RtdC0+b3B0 aW9ucykKKwl7CisJCURlZkVsZW0gICAgKmRlZmVsID0gKERlZkVsZW0gKikgbGZpcnN0KHBsKTsK KwkJT2JqRWxlbSAgICAqbmV3ZWxtOworCisJCWlmIChzdHJjbXAoZGVmZWwtPmRlZm5hbWUsICJz dG9yYWdlIikgPT0gMCkKKwkJCW5ld2VsbSA9IGRlcGFyc2VfVHlwZV9TdG9yYWdlKHR5cEZvcm0p OworCQlpZiAoc3RyY21wKGRlZmVsLT5kZWZuYW1lLCAicmVjZWl2ZSIpID09IDApCisJCQluZXdl bG0gPSBkZXBhcnNlX1R5cGVfUmVjZWl2ZSh0eXBGb3JtKTsKKwkJaWYgKHN0cmNtcChkZWZlbC0+ ZGVmbmFtZSwgInNlbmQiKSA9PSAwKQorCQkJbmV3ZWxtID0gZGVwYXJzZV9UeXBlX1NlbmQodHlw Rm9ybSk7CisJCWlmIChzdHJjbXAoZGVmZWwtPmRlZm5hbWUsICJ0eXBtb2RfaW4iKSA9PSAwKQor CQkJbmV3ZWxtID0gZGVwYXJzZV9UeXBlX1R5cG1vZF9Jbih0eXBGb3JtKTsKKwkJaWYgKHN0cmNt cChkZWZlbC0+ZGVmbmFtZSwgInR5cG1vZF9vdXQiKSA9PSAwKQorCQkJbmV3ZWxtID0gZGVwYXJz ZV9UeXBlX1R5cG1vZF9PdXQodHlwRm9ybSk7CisJCWlmIChzdHJjbXAoZGVmZWwtPmRlZm5hbWUs ICJhbmFseXplIikgPT0gMCkKKwkJCW5ld2VsbSA9IGRlcGFyc2VfVHlwZV9BbmFseXplKHR5cEZv cm0pOworCQlpZiAoc3RyY21wKGRlZmVsLT5kZWZuYW1lLCAic3Vic2NyaXB0IikgPT0gMCkKKwkJ CW5ld2VsbSA9IGRlcGFyc2VfVHlwZV9TdWJzY3JpcHQodHlwRm9ybSk7CisJCWVsc2UKKwkJCWVs b2coRVJST1IsICJpbnZhbGlkIHR5cGUgb3B0aW9uICVzIiwgZGVmZWwtPmRlZm5hbWUpOworCisJ CWVsZW1zID0gbGFwcGVuZChlbGVtcywgbmV3ZWxtKTsKKwl9CisKKwlSZWxlYXNlU3lzQ2FjaGUo dHlwVHVwKTsKKworCXJldHVybiBuZXdfb2JqdHJlZV9WQSgiQUxURVIgVFlQRSAle2lkZW50aXR5 fUQgU0VUICgle2RlZmluaXRpb246IH1zKSIsIDIsCisJCQkJCQkgICJpZGVudGl0eSIsIE9ialR5 cGVPYmplY3QsCisJCQkJCQkgIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChUeXBlUmVsYXRp b25JZCwKKwkJCQkJCQkJCQkJCQkgIG9iamVjdElkKSwKKwkJCQkJCSAgImRlZmluaXRpb24iLCBP YmpUeXBlQXJyYXksIGVsZW1zKTsKK30KKworLyoKKyAqIERlcGFyc2UgYSBDb21wb3NpdGVUeXBl U3RtdCAoQ1JFQVRFIFRZUEUgQVMpCisgKgorICogR2l2ZW4gYSBDb21wb3NpdGUgdHlwZSBPSUQg YW5kIHRoZSBwYXJzZSB0cmVlIHRoYXQgY3JlYXRlZCBpdCwgcmV0dXJuIGFuCisgKiBPYmpUcmVl IHJlcHJlc2VudGluZyB0aGUgY3JlYXRpb24gY29tbWFuZC4KKyAqCisgKiBWZXJib3NlIHN5bnRh eAorICogQ1JFQVRFIFRZUEUgJXtpZGVudGl0eX1EIEFTICgle2NvbHVtbnM6LCB9cykKKyAqLwor c3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9Db21wb3NpdGVUeXBlU3RtdChPaWQgb2JqZWN0SWQs IE5vZGUgKnBhcnNldHJlZSkKK3sKKwlDb21wb3NpdGVUeXBlU3RtdCAqbm9kZSA9IChDb21wb3Np dGVUeXBlU3RtdCAqKSBwYXJzZXRyZWU7CisJSGVhcFR1cGxlCXR5cHR1cDsKKwlGb3JtX3BnX3R5 cGUgdHlwZm9ybTsKKwlSZWxhdGlvbgl0eXBlcmVsOworCUxpc3QJICAgKmRwY29udGV4dDsKKwlM aXN0CSAgICp0YWJsZWVsdHMgPSBOSUw7CisKKwkvKiBGaW5kIHRoZSBwZ190eXBlIGVudHJ5IGFu ZCBvcGVuIHRoZSBjb3JyZXNwb25kaW5nIHJlbGF0aW9uICovCisJdHlwdHVwID0gU2VhcmNoU3lz Q2FjaGUxKFRZUEVPSUQsIE9iamVjdElkR2V0RGF0dW0ob2JqZWN0SWQpKTsKKwlpZiAoIUhlYXBU dXBsZUlzVmFsaWQodHlwdHVwKSkKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQg Zm9yIHR5cGUgd2l0aCBPSUQgJXUiLCBvYmplY3RJZCk7CisJdHlwZm9ybSA9IChGb3JtX3BnX3R5 cGUpIEdFVFNUUlVDVCh0eXB0dXApOworCXR5cGVyZWwgPSByZWxhdGlvbl9vcGVuKHR5cGZvcm0t PnR5cHJlbGlkLCBBY2Nlc3NTaGFyZUxvY2spOworCisJZHBjb250ZXh0ID0gZGVwYXJzZV9jb250 ZXh0X2ZvcihSZWxhdGlvbkdldFJlbGF0aW9uTmFtZSh0eXBlcmVsKSwKKwkJCQkJCQkJCVJlbGF0 aW9uR2V0UmVsaWQodHlwZXJlbCkpOworCisJdGFibGVlbHRzID0gZGVwYXJzZV9UYWJsZUVsZW1l bnRzKHR5cGVyZWwsIG5vZGUtPmNvbGRlZmxpc3QsIGRwY29udGV4dCwKKwkJCQkJCQkJCSAgZmFs c2UsCS8qIG5vdCB0eXBlZCAqLworCQkJCQkJCQkJICB0cnVlKTsJLyogY29tcG9zaXRlIHR5cGUg Ki8KKworCXRhYmxlX2Nsb3NlKHR5cGVyZWwsIEFjY2Vzc1NoYXJlTG9jayk7CisJUmVsZWFzZVN5 c0NhY2hlKHR5cHR1cCk7CisKKwlyZXR1cm4gbmV3X29ianRyZWVfVkEoIkNSRUFURSBUWVBFICV7 aWRlbnRpdHl9RCBBUyAoJXtjb2x1bW5zOiwgfXMpIiwgMiwKKwkJCQkJCSAgImlkZW50aXR5Iiwg T2JqVHlwZU9iamVjdCwKKwkJCQkJCSAgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFR5cGVS ZWxhdGlvbklkLCBvYmplY3RJZCksCisJCQkJCQkgICJjb2x1bW5zIiwgT2JqVHlwZUFycmF5LCB0 YWJsZWVsdHMpOworfQorCisvKgorICogRGVwYXJzZSBhIENyZWF0ZUNvbnZlcnNpb25TdG10Cisg KgorICogR2l2ZW4gYSBjb252ZXJzaW9uIE9JRCBhbmQgdGhlIHBhcnNlIHRyZWUgdGhhdCBjcmVh dGVkIGl0LCByZXR1cm4gYW4gT2JqVHJlZQorICogcmVwcmVzZW50aW5nIHRoZSBjcmVhdGlvbiBj b21tYW5kLgorICoKKyAqIFZlcmJvc2Ugc3ludGF4CisgKiBDUkVBVEUgJXtkZWZhdWx0fXMgQ09O VkVSU0lPTiAle2lkZW50aXR5fUQgRk9SICV7c291cmNlfUwgVE8gJXtkZXN0fUwKKyAqIEZST00g JXtmdW5jdGlvbn1ECisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfQ3JlYXRlQ29udmVy c2lvbihPaWQgb2JqZWN0SWQsIE5vZGUgKnBhcnNldHJlZSkKK3sKKwlIZWFwVHVwbGUJY29uVHVw OworCVJlbGF0aW9uCWNvbnZyZWw7CisJRm9ybV9wZ19jb252ZXJzaW9uIGNvbkZvcm07CisJT2Jq VHJlZSAgICAqcmV0OworCisJY29udnJlbCA9IHRhYmxlX29wZW4oQ29udmVyc2lvblJlbGF0aW9u SWQsIEFjY2Vzc1NoYXJlTG9jayk7CisJY29uVHVwID0gZ2V0X2NhdGFsb2dfb2JqZWN0X2J5X29p ZChjb252cmVsLCBBbnVtX3BnX2NvbnZlcnNpb25fb2lkLCBvYmplY3RJZCk7CisJaWYgKCFIZWFw VHVwbGVJc1ZhbGlkKGNvblR1cCkpCisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVk IGZvciBjb252ZXJzaW9uIHdpdGggT0lEICV1Iiwgb2JqZWN0SWQpOworCWNvbkZvcm0gPSAoRm9y bV9wZ19jb252ZXJzaW9uKSBHRVRTVFJVQ1QoY29uVHVwKTsKKworCXJldCA9IG5ld19vYmp0cmVl X1ZBKCJDUkVBVEUgJXtkZWZhdWx0fXMgQ09OVkVSU0lPTiAle2lkZW50aXR5fUQgRk9SICV7c291 cmNlfUwgVE8gJXtkZXN0fUwgRlJPTSAle2Z1bmN0aW9ufUQiLCA1LAorCQkJCQkJICAiZGVmYXVs dCIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkgIGNvbkZvcm0tPmNvbmRlZmF1bHQgPyAiREVGQVVM VCIgOiAiIiwKKwkJCQkJCSAgImlkZW50aXR5IiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCSAgbmV3 X29ianRyZWVfZm9yX3F1YWxuYW1lKGNvbkZvcm0tPmNvbm5hbWVzcGFjZSwKKwkJCQkJCQkJCQkJ CSAgIE5hbWVTdHIoY29uRm9ybS0+Y29ubmFtZSkpLAorCQkJCQkJICAic291cmNlIiwgT2JqVHlw ZVN0cmluZywKKwkJCQkJCSAgKGNoYXIgKilwZ19lbmNvZGluZ190b19jaGFyKGNvbkZvcm0tPmNv bmZvcmVuY29kaW5nKSwKKwkJCQkJCSAgImRlc3QiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJICAo Y2hhciAqKXBnX2VuY29kaW5nX3RvX2NoYXIoY29uRm9ybS0+Y29udG9lbmNvZGluZyksCisJCQkJ CQkgICJmdW5jdGlvbiIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkgIG5ld19vYmp0cmVlX2Zvcl9x dWFsbmFtZV9pZChQcm9jZWR1cmVSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCSAgY29uRm9ybS0+ Y29ucHJvYykpOworCisJdGFibGVfY2xvc2UoY29udnJlbCwgQWNjZXNzU2hhcmVMb2NrKTsKKwor CXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBEZXBhcnNlIGEgQ3JlYXRlRW51bVN0bXQgKENSRUFU RSBUWVBFIEFTIEVOVU0pCisgKgorICogR2l2ZW4gYSBFbnVtIHR5cGUgT0lEIGFuZCB0aGUgcGFy c2UgdHJlZSB0aGF0IGNyZWF0ZWQgaXQsIHJldHVybiBhbiBPYmpUcmVlCisgKiByZXByZXNlbnRp bmcgdGhlIGNyZWF0aW9uIGNvbW1hbmQuCisgKgorICogVmVyYm9zZSBzeW50YXgKKyAqIENSRUFU RSBUWVBFICV7aWRlbnRpdHl9RCBBUyBFTlVNICgle3ZhbHVlczosIH1MKQorICovCitzdGF0aWMg T2JqVHJlZSAqCitkZXBhcnNlX0NyZWF0ZUVudW1TdG10KE9pZCBvYmplY3RJZCwgTm9kZSAqcGFy c2V0cmVlKQoreworCUNyZWF0ZUVudW1TdG10ICpub2RlID0gKENyZWF0ZUVudW1TdG10ICopIHBh cnNldHJlZTsKKwlMaXN0CSAgICp2YWx1ZXMgPSBOSUw7CisJTGlzdENlbGwgICAqY2VsbDsKKwor CWZvcmVhY2goY2VsbCwgbm9kZS0+dmFscykKKwkJdmFsdWVzID0gbGFwcGVuZCh2YWx1ZXMsIG5l d19zdHJpbmdfb2JqZWN0KHN0clZhbChsZmlyc3Rfbm9kZShTdHJpbmcsIGNlbGwpKSkpOworCisJ cmV0dXJuIG5ld19vYmp0cmVlX1ZBKCJDUkVBVEUgVFlQRSAle2lkZW50aXR5fUQgQVMgRU5VTSAo JXt2YWx1ZXM6LCB9TCkiLCAyLAorCQkJCQkJICAiaWRlbnRpdHkiLCBPYmpUeXBlT2JqZWN0LAor CQkJCQkJICBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoVHlwZVJlbGF0aW9uSWQsIG9iamVj dElkKSwKKwkJCQkJCSAgInZhbHVlcyIsIE9ialR5cGVBcnJheSwgdmFsdWVzKTsKK30KKworLyoK KyAqIERlcGFyc2UgYSBDcmVhdGVFeHRlbnNpb25TdG10CisgKgorICogR2l2ZW4gYW4gZXh0ZW5z aW9uIE9JRCBhbmQgdGhlIHBhcnNlIHRyZWUgdGhhdCBjcmVhdGVkIGl0LCByZXR1cm4gYW4gT2Jq VHJlZQorICogcmVwcmVzZW50aW5nIHRoZSBjcmVhdGlvbiBjb21tYW5kLgorICoKKyAqIFZlcmJv c2Ugc3ludGF4CisgKiBDUkVBVEUgRVhURU5TSU9OICV7aWZfbm90X2V4aXN0c31zICV7bmFtZX1J ICV7b3B0aW9uczogfXMKKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9DcmVhdGVFeHRl bnNpb25TdG10KE9pZCBvYmplY3RJZCwgTm9kZSAqcGFyc2V0cmVlKQoreworCUNyZWF0ZUV4dGVu c2lvblN0bXQgKm5vZGUgPSAoQ3JlYXRlRXh0ZW5zaW9uU3RtdCAqKSBwYXJzZXRyZWU7CisJUmVs YXRpb24JcGdfZXh0ZW5zaW9uOworCUhlYXBUdXBsZQlleHRUdXA7CisJRm9ybV9wZ19leHRlbnNp b24gZXh0Rm9ybTsKKwlPYmpUcmVlICAgICp0bXA7CisJTGlzdAkgICAqbGlzdCA9IE5JTDsKKwlM aXN0Q2VsbCAgICpjZWxsOworCisJcGdfZXh0ZW5zaW9uID0gdGFibGVfb3BlbihFeHRlbnNpb25S ZWxhdGlvbklkLCBBY2Nlc3NTaGFyZUxvY2spOworCWV4dFR1cCA9IGdldF9jYXRhbG9nX29iamVj dF9ieV9vaWQocGdfZXh0ZW5zaW9uLCBBbnVtX3BnX2V4dGVuc2lvbl9vaWQsIG9iamVjdElkKTsK KwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQoZXh0VHVwKSkKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxv b2t1cCBmYWlsZWQgZm9yIGV4dGVuc2lvbiB3aXRoIE9JRCAldSIsIG9iamVjdElkKTsKKwlleHRG b3JtID0gKEZvcm1fcGdfZXh0ZW5zaW9uKSBHRVRTVFJVQ1QoZXh0VHVwKTsKKworCS8qIExpc3Qg b2Ygb3B0aW9ucyAqLworCWZvcmVhY2goY2VsbCwgbm9kZS0+b3B0aW9ucykKKwl7CisJCURlZkVs ZW0gICAgKm9wdCA9IChEZWZFbGVtICopIGxmaXJzdChjZWxsKTsKKworCQlpZiAoc3RyY21wKG9w dC0+ZGVmbmFtZSwgInNjaGVtYSIpID09IDApCisJCXsKKwkJCS8qIFNraXAgdGhpcyBvbmU7IHdl IGFkZCBvbmUgdW5jb25kaXRpb25hbGx5IGJlbG93ICovCisJCQljb250aW51ZTsKKwkJfQorCQll bHNlIGlmIChzdHJjbXAob3B0LT5kZWZuYW1lLCAibmV3X3ZlcnNpb24iKSA9PSAwKQorCQl7CisJ CQl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiVkVSU0lPTiAle3ZlcnNpb259TCIsIDIsCisJCQkJCQkJ CSAidHlwZSIsIE9ialR5cGVTdHJpbmcsICJ2ZXJzaW9uIiwKKwkJCQkJCQkJICJ2ZXJzaW9uIiwg T2JqVHlwZVN0cmluZywgZGVmR2V0U3RyaW5nKG9wdCkpOworCQkJbGlzdCA9IGxhcHBlbmQobGlz dCwgbmV3X29iamVjdF9vYmplY3QodG1wKSk7CisJCX0KKwkJZWxzZSBpZiAoc3RyY21wKG9wdC0+ ZGVmbmFtZSwgIm9sZF92ZXJzaW9uIikgPT0gMCkKKwkJeworCQkJdG1wID0gbmV3X29ianRyZWVf VkEoIkZST00gJXt2ZXJzaW9ufUwiLCAyLAorCQkJCQkJCQkgInR5cGUiLCBPYmpUeXBlU3RyaW5n LCAiZnJvbSIsCisJCQkJCQkJCSAidmVyc2lvbiIsIE9ialR5cGVTdHJpbmcsIGRlZkdldFN0cmlu ZyhvcHQpKTsKKwkJCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkp OworCQl9CisJCWVsc2UKKwkJCWVsb2coRVJST1IsICJ1bnN1cHBvcnRlZCBvcHRpb24gJXMiLCBv cHQtPmRlZm5hbWUpOworCX0KKworCS8qIEFkZCB0aGUgU0NIRU1BIG9wdGlvbiAqLworCXRtcCA9 IG5ld19vYmp0cmVlX1ZBKCJTQ0hFTUEgJXtzY2hlbWF9SSIsIDIsCisJCQkJCQkgInR5cGUiLCBP YmpUeXBlU3RyaW5nLCAic2NoZW1hIiwKKwkJCQkJCSAic2NoZW1hIiwgT2JqVHlwZVN0cmluZywK KwkJCQkJCSBnZXRfbmFtZXNwYWNlX25hbWUoZXh0Rm9ybS0+ZXh0bmFtZXNwYWNlKSk7CisJbGlz dCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wKSk7CisJdGFibGVfY2xvc2Uo cGdfZXh0ZW5zaW9uLCBBY2Nlc3NTaGFyZUxvY2spOworCisJcmV0dXJuIG5ld19vYmp0cmVlX1ZB KCJDUkVBVEUgRVhURU5TSU9OICV7aWZfbm90X2V4aXN0c31zICV7bmFtZX1JICV7b3B0aW9uczog fXMiLCAzLAorCQkJCQkJICAiaWZfbm90X2V4aXN0cyIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkg IG5vZGUtPmlmX25vdF9leGlzdHMgPyAiSUYgTk9UIEVYSVNUUyIgOiAiIiwKKwkJCQkJCSAgIm5h bWUiLCBPYmpUeXBlU3RyaW5nLCBub2RlLT5leHRuYW1lLAorCQkJCQkJICAib3B0aW9ucyIsIE9i alR5cGVBcnJheSwgbGlzdCk7Cit9CisKKy8qCisgKiBJZiBhIGNvbHVtbiBuYW1lIGlzIHNwZWNp ZmllZCwgYWRkIGFuIGVsZW1lbnQgZm9yIGl0OyBvdGhlcndpc2UgaXQncyBhCisgKiB0YWJsZS1s ZXZlbCBvcHRpb24uCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfRmR3T3B0aW9ucyhM aXN0ICpvcHRpb25zLCBjaGFyICpjb2xuYW1lKQoreworCU9ialRyZWUgICAgKnJldDsKKworCWlm IChjb2xuYW1lKQorCQlyZXQgPSBuZXdfb2JqdHJlZV9WQSgiQUxURVIgQ09MVU1OICV7Y29sdW1u fUkiLCAxLAorCQkJCQkJCSAiY29sdW1uIiwgT2JqVHlwZVN0cmluZywgY29sbmFtZSk7CisJZWxz ZQorCQlyZXQgPSBuZXdfb2JqdHJlZSgiT1BUSU9OUyIpOworCisJaWYgKG9wdGlvbnMgIT0gTklM KQorCXsKKwkJTGlzdAkgICAqb3B0b3V0ID0gTklMOworCQlMaXN0Q2VsbCAgICpjZWxsOworCisJ CWZvcmVhY2goY2VsbCwgb3B0aW9ucykKKwkJeworCQkJRGVmRWxlbSAgICAqZWxlbTsKKwkJCU9i alRyZWUgICAgKm9wdDsKKworCQkJZWxlbSA9IChEZWZFbGVtICopIGxmaXJzdChjZWxsKTsKKwor CQkJc3dpdGNoIChlbGVtLT5kZWZhY3Rpb24pCisJCQl7CisJCQkJY2FzZSBERUZFTEVNX1VOU1BF QzoKKwkJCQkJb3B0ID0gbmV3X29ianRyZWVfVkEoIiV7bGFiZWx9SSAle3ZhbHVlfUwiLCAyLAor CQkJCQkJCQkJCSAibGFiZWwiLCBPYmpUeXBlU3RyaW5nLCBlbGVtLT5kZWZuYW1lLAorCQkJCQkJ CQkJCSAidmFsdWUiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJCQkJCSBlbGVtLT5hcmcgPyBkZWZH ZXRTdHJpbmcoZWxlbSkgOgorCQkJCQkJCQkJCSBkZWZHZXRCb29sZWFuKGVsZW0pID8gIlRSVUUi IDogIkZBTFNFIik7CisJCQkJCWJyZWFrOworCQkJCWNhc2UgREVGRUxFTV9TRVQ6CisJCQkJCW9w dCA9IG5ld19vYmp0cmVlX1ZBKCJTRVQgJXtsYWJlbH1JICV7dmFsdWV9TCIsIDIsCisJCQkJCQkJ CQkJICJsYWJlbCIsIE9ialR5cGVTdHJpbmcsIGVsZW0tPmRlZm5hbWUsCisJCQkJCQkJCQkJICJ2 YWx1ZSIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkJCQkJIGVsZW0tPmFyZyA/IGRlZkdldFN0cmlu ZyhlbGVtKSA6CisJCQkJCQkJCQkJIGRlZkdldEJvb2xlYW4oZWxlbSkgPyAiVFJVRSIgOiAiRkFM U0UiKTsKKwkJCQkJYnJlYWs7CisJCQkJY2FzZSBERUZFTEVNX0FERDoKKwkJCQkJb3B0ID0gbmV3 X29ianRyZWVfVkEoIkFERCAle2xhYmVsfUkgJXt2YWx1ZX1MIiwgMiwKKwkJCQkJCQkJCQkgImxh YmVsIiwgT2JqVHlwZVN0cmluZywgZWxlbS0+ZGVmbmFtZSwKKwkJCQkJCQkJCQkgInZhbHVlIiwg T2JqVHlwZVN0cmluZywKKwkJCQkJCQkJCQkgZWxlbS0+YXJnID8gZGVmR2V0U3RyaW5nKGVsZW0p IDoKKwkJCQkJCQkJCQkgZGVmR2V0Qm9vbGVhbihlbGVtKSA/ICJUUlVFIiA6ICJGQUxTRSIpOwor CQkJCQlicmVhazsKKwkJCQljYXNlIERFRkVMRU1fRFJPUDoKKwkJCQkJb3B0ID0gbmV3X29ianRy ZWVfVkEoIkRST1AgJXtsYWJlbH1JIiwgMSwKKwkJCQkJCQkJCQkgImxhYmVsIiwgT2JqVHlwZVN0 cmluZywgZWxlbS0+ZGVmbmFtZSk7CisJCQkJCWJyZWFrOworCQkJCWRlZmF1bHQ6CisJCQkJCWVs b2coRVJST1IsICJpbnZhbGlkIGRlZiBhY3Rpb24gJWQiLCBlbGVtLT5kZWZhY3Rpb24pOworCQkJ CQlvcHQgPSBOVUxMOworCQkJfQorCisJCQlvcHRvdXQgPSBsYXBwZW5kKG9wdG91dCwgbmV3X29i amVjdF9vYmplY3Qob3B0KSk7CisJCX0KKworCQlhcHBlbmRfYXJyYXlfb2JqZWN0KHJldCwgIigl e29wdGlvbjogLH1zKSIsIG9wdG91dCk7CisJfQorCWVsc2UKKwkJYXBwZW5kX25vdF9wcmVzZW50 KHJldCk7CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogRGVwYXJzZSBhIENyZWF0ZUZkd1N0 bXQgKENSRUFURSBGT1JFSUdOIERBVEEgV1JBUFBFUikKKyAqCisgKiBHaXZlbiBhbiBGRFcgT0lE IGFuZCB0aGUgcGFyc2UgdHJlZSB0aGF0IGNyZWF0ZWQgaXQsIHJldHVybiBhbiBPYmpUcmVlCisg KiByZXByZXNlbnRpbmcgdGhlIGNyZWF0aW9uIGNvbW1hbmQuCisgKgorICogVmVyYm9zZSBzeW50 YXgKKyAqIENSRUFURSBGT1JFSUdOIERBVEEgV1JBUFBFUiAle2lkZW50aXR5fUkgJXtoYW5kbGVy fXMgJXt2YWxpZGF0b3J9cyAle2dlbmVyaWNfb3B0aW9uc31zCisgKi8KK3N0YXRpYyBPYmpUcmVl ICoKK2RlcGFyc2VfQ3JlYXRlRmR3U3RtdChPaWQgb2JqZWN0SWQsIE5vZGUgKnBhcnNldHJlZSkK K3sKKwlDcmVhdGVGZHdTdG10ICpub2RlID0gKENyZWF0ZUZkd1N0bXQgKikgcGFyc2V0cmVlOwor CUhlYXBUdXBsZQlmZHdUdXA7CisJRm9ybV9wZ19mb3JlaWduX2RhdGFfd3JhcHBlciBmZHdGb3Jt OworCVJlbGF0aW9uCXJlbDsKKwlPYmpUcmVlICAgICpyZXQ7CisJT2JqVHJlZSAgICAqdG1wOwor CisJcmVsID0gdGFibGVfb3BlbihGb3JlaWduRGF0YVdyYXBwZXJSZWxhdGlvbklkLCBSb3dFeGNs dXNpdmVMb2NrKTsKKworCWZkd1R1cCA9IFNlYXJjaFN5c0NhY2hlMShGT1JFSUdOREFUQVdSQVBQ RVJPSUQsCisJCQkJCQkJIE9iamVjdElkR2V0RGF0dW0ob2JqZWN0SWQpKTsKKwlpZiAoIUhlYXBU dXBsZUlzVmFsaWQoZmR3VHVwKSkKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQg Zm9yIGZvcmVpZ24tZGF0YSB3cmFwcGVyIHdpdGggT0lEICV1IiwKKwkJCSBvYmplY3RJZCk7CisK KwlmZHdGb3JtID0gKEZvcm1fcGdfZm9yZWlnbl9kYXRhX3dyYXBwZXIpIEdFVFNUUlVDVChmZHdU dXApOworCisJcmV0ID0gbmV3X29ianRyZWVfVkEoIkNSRUFURSBGT1JFSUdOIERBVEEgV1JBUFBF UiAle2lkZW50aXR5fUkiLCAxLAorCQkJCQkJICJpZGVudGl0eSIsIE9ialR5cGVTdHJpbmcsIE5h bWVTdHIoZmR3Rm9ybS0+ZmR3bmFtZSkpOworCisJLyogQWRkIEhBTkRMRVIgY2xhdXNlICovCisJ aWYgKCFPaWRJc1ZhbGlkKGZkd0Zvcm0tPmZkd2hhbmRsZXIpKQorCQl0bXAgPSBuZXdfb2JqdHJl ZSgiTk8gSEFORExFUiIpOworCWVsc2UKKwl7CisJCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJIQU5E TEVSICV7cHJvY2VkdXJlfUQiLCAxLAorCQkJCQkJCSAicHJvY2VkdXJlIiwgT2JqVHlwZU9iamVj dCwKKwkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFByb2NlZHVyZVJlbGF0aW9u SWQsCisJCQkJCQkJCQkJCQkJCSBmZHdGb3JtLT5mZHdoYW5kbGVyKSk7CisJfQorCWFwcGVuZF9v YmplY3Rfb2JqZWN0KHJldCwgIiV7aGFuZGxlcn1zIiwgdG1wKTsKKworCS8qIEFkZCBWQUxJREFU T1IgY2xhdXNlICovCisJaWYgKCFPaWRJc1ZhbGlkKGZkd0Zvcm0tPmZkd3ZhbGlkYXRvcikpCisJ CXRtcCA9IG5ld19vYmp0cmVlKCJOTyBWQUxJREFUT1IiKTsKKwllbHNlCisJeworCQl0bXAgPSBu ZXdfb2JqdHJlZV9WQSgiVkFMSURBVE9SICV7cHJvY2VkdXJlfUQiLCAxLAorCQkJCQkJCSAicHJv Y2VkdXJlIiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1l X2lkKFByb2NlZHVyZVJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJCSBmZHdGb3JtLT5mZHd2YWxp ZGF0b3IpKTsKKwl9CisJYXBwZW5kX29iamVjdF9vYmplY3QocmV0LCAiJXt2YWxpZGF0b3J9cyIs IHRtcCk7CisKKwkvKiBBZGQgYW4gT1BUSU9OUyBjbGF1c2UsIGlmIGFueSAqLworCWFwcGVuZF9v YmplY3Rfb2JqZWN0KHJldCwgIiV7Z2VuZXJpY19vcHRpb25zfXMiLAorCQkJCQkJIGRlcGFyc2Vf RmR3T3B0aW9ucyhub2RlLT5vcHRpb25zLCBOVUxMKSk7CisKKwlSZWxlYXNlU3lzQ2FjaGUoZmR3 VHVwKTsKKwl0YWJsZV9jbG9zZShyZWwsIFJvd0V4Y2x1c2l2ZUxvY2spOworCisJcmV0dXJuIHJl dDsKK30KKworLyoKKyAqIERlcGFyc2UgYW4gQWx0ZXJGZHdTdG10IChBTFRFUiBGT1JFSUdOIERB VEEgV1JBUFBFUikKKyAqCisgKiBHaXZlbiBhbiBGRFcgT0lEIGFuZCB0aGUgcGFyc2UgdHJlZSB0 aGF0IGNyZWF0ZWQgaXQsIHJldHVybiBhbiBPYmpUcmVlCisgKiByZXByZXNlbnRpbmcgdGhlIGFs dGVyIGNvbW1hbmQuCisgKgorICogVmVyYm9zZSBzeW50YXgKKyAqIEFMVEVSIEZPUkVJR04gREFU QSBXUkFQUEVSICV7aWRlbnRpdHl9SSAle2Zkd19vcHRpb25zOiB9cyAle2dlbmVyaWNfb3B0aW9u c31ECisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfQWx0ZXJGZHdTdG10KE9pZCBvYmpl Y3RJZCwgTm9kZSAqcGFyc2V0cmVlKQoreworCUFsdGVyRmR3U3RtdCAqbm9kZSA9IChBbHRlckZk d1N0bXQgKikgcGFyc2V0cmVlOworCUhlYXBUdXBsZQlmZHdUdXA7CisJRm9ybV9wZ19mb3JlaWdu X2RhdGFfd3JhcHBlciBmZHdGb3JtOworCVJlbGF0aW9uCXJlbDsKKwlPYmpUcmVlICAgICpyZXQ7 CisJTGlzdAkgICAqZmR3X29wdGlvbnMgPSBOSUw7CisJTGlzdENlbGwgICAqY2VsbDsKKworCXJl bCA9IHRhYmxlX29wZW4oRm9yZWlnbkRhdGFXcmFwcGVyUmVsYXRpb25JZCwgUm93RXhjbHVzaXZl TG9jayk7CisKKwlmZHdUdXAgPSBTZWFyY2hTeXNDYWNoZTEoRk9SRUlHTkRBVEFXUkFQUEVST0lE LAorCQkJCQkJCSBPYmplY3RJZEdldERhdHVtKG9iamVjdElkKSk7CisJaWYgKCFIZWFwVHVwbGVJ c1ZhbGlkKGZkd1R1cCkpCisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciBm b3JlaWduLWRhdGEgd3JhcHBlciB3aXRoIE9JRCAldSIsCisJCQkgb2JqZWN0SWQpOworCisJZmR3 Rm9ybSA9IChGb3JtX3BnX2ZvcmVpZ25fZGF0YV93cmFwcGVyKSBHRVRTVFJVQ1QoZmR3VHVwKTsK KworCXJldCA9IG5ld19vYmp0cmVlX1ZBKCJBTFRFUiBGT1JFSUdOIERBVEEgV1JBUFBFUiAle2lk ZW50aXR5fUkiLCAxLAorCQkJCQkJICJpZGVudGl0eSIsIE9ialR5cGVTdHJpbmcsIE5hbWVTdHIo ZmR3Rm9ybS0+ZmR3bmFtZSkpOworCisJLyoKKwkgKiBJdGVyYXRlIHRocm91Z2ggb3B0aW9ucywg dG8gc2VlIHdoYXQgY2hhbmdlZCwgYnV0IHVzZSBjYXRhbG9nIGFzIGEKKwkgKiBiYXNpcyBmb3Ig bmV3IHZhbHVlcy4KKwkgKi8KKwlmb3JlYWNoKGNlbGwsIG5vZGUtPmZ1bmNfb3B0aW9ucykKKwl7 CisJCURlZkVsZW0gICAgKmVsZW07CisJCU9ialRyZWUgICAgKnRtcDsKKworCQllbGVtID0gbGZp cnN0KGNlbGwpOworCisJCWlmIChwZ19zdHJjYXNlY21wKGVsZW0tPmRlZm5hbWUsICJoYW5kbGVy IikgPT0gMCkKKwkJeworCQkJLyogYWRkIEhBTkRMRVIgY2xhdXNlICovCisJCQlpZiAoIU9pZElz VmFsaWQoZmR3Rm9ybS0+ZmR3aGFuZGxlcikpCisJCQkJdG1wID0gbmV3X29ianRyZWUoIk5PIEhB TkRMRVIiKTsKKwkJCWVsc2UKKwkJCXsKKwkJCQl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiSEFORExF UiAle3Byb2NlZHVyZX1EIiwgMSwKKwkJCQkJCQkJCSAicHJvY2VkdXJlIiwKKwkJCQkJCQkJCSBu ZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUHJvY2VkdXJlUmVsYXRpb25JZCwKKwkJCQkJCQkJ CQkJCQkJCQkgZmR3Rm9ybS0+ZmR3aGFuZGxlcikpOworCQkJfQorCQkJZmR3X29wdGlvbnMgPSBs YXBwZW5kKGZkd19vcHRpb25zLCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKwkJfQorCQllbHNl IGlmIChwZ19zdHJjYXNlY21wKGVsZW0tPmRlZm5hbWUsICJ2YWxpZGF0b3IiKSA9PSAwKQorCQl7 CisJCQkvKiBhZGQgVkFMSURBVE9SIGNsYXVzZSAqLworCQkJaWYgKCFPaWRJc1ZhbGlkKGZkd0Zv cm0tPmZkd3ZhbGlkYXRvcikpCisJCQkJdG1wID0gbmV3X29ianRyZWUoIk5PIFZBTElEQVRPUiIp OworCQkJZWxzZQorCQkJeworCQkJCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJWQUxJREFUT1IgJXtw cm9jZWR1cmV9RCIsIDEsCisJCQkJCQkJCQkgInByb2NlZHVyZSIsCisJCQkJCQkJCQkgbmV3X29i anRyZWVfZm9yX3F1YWxuYW1lX2lkKFByb2NlZHVyZVJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJ CQkJIGZkd0Zvcm0tPmZkd3ZhbGlkYXRvcikpOworCQkJfQorCQkJZmR3X29wdGlvbnMgPSBsYXBw ZW5kKGZkd19vcHRpb25zLCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKwkJfQorCX0KKworCS8q IEFkZCBIQU5ETEVSL1ZBTElEQVRPUiBpZiBzcGVjaWZpZWQgKi8KKwlhcHBlbmRfYXJyYXlfb2Jq ZWN0KHJldCwgIiV7ZmR3X29wdGlvbnM6IH1zIiwgZmR3X29wdGlvbnMpOworCisJLyogQWRkIGFu IE9QVElPTlMgY2xhdXNlLCBpZiBhbnkgKi8KKwlhcHBlbmRfb2JqZWN0X29iamVjdChyZXQsICIl e2dlbmVyaWNfb3B0aW9uc31EIiwKKwkJCQkJCSBkZXBhcnNlX0Zkd09wdGlvbnMobm9kZS0+b3B0 aW9ucywgTlVMTCkpOworCisJUmVsZWFzZVN5c0NhY2hlKGZkd1R1cCk7CisJdGFibGVfY2xvc2Uo cmVsLCBSb3dFeGNsdXNpdmVMb2NrKTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBEZXBh cnNlIGEgQ1JFQVRFIFRZUEUgQVMgUkFOR0Ugc3RhdGVtZW50CisgKgorICogR2l2ZW4gYSBSYW5n ZSB0eXBlIE9JRCBhbmQgdGhlIHBhcnNlIHRyZWUgdGhhdCBjcmVhdGVkIGl0LCByZXR1cm4gYW4g T2JqVHJlZQorICogcmVwcmVzZW50aW5nIHRoZSBjcmVhdGlvbiBjb21tYW5kLgorICoKKyAqIFZl cmJvc2Ugc3ludGF4CisgKiBDUkVBVEUgVFlQRSAle2lkZW50aXR5fUQgQVMgUkFOR0UgKCV7ZGVm aW5pdGlvbjosIH1zKQorICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0NyZWF0ZVJhbmdl U3RtdChPaWQgb2JqZWN0SWQsIE5vZGUgKnBhcnNldHJlZSkKK3sKKwlPYmpUcmVlICAgICp0bXA7 CisJTGlzdAkgICAqZGVmaW5pdGlvbiA9IE5JTDsKKwlSZWxhdGlvbglwZ19yYW5nZTsKKwlIZWFw VHVwbGUJcmFuZ2VUdXA7CisJRm9ybV9wZ19yYW5nZSByYW5nZUZvcm07CisJU2NhbktleURhdGEg a2V5WzFdOworCVN5c1NjYW5EZXNjIHNjYW47CisKKwlwZ19yYW5nZSA9IHRhYmxlX29wZW4oUmFu Z2VSZWxhdGlvbklkLCBSb3dFeGNsdXNpdmVMb2NrKTsKKworCVNjYW5LZXlJbml0KCZrZXlbMF0s CisJCQkJQW51bV9wZ19yYW5nZV9ybmd0eXBpZCwKKwkJCQlCVEVxdWFsU3RyYXRlZ3lOdW1iZXIs IEZfT0lERVEsCisJCQkJT2JqZWN0SWRHZXREYXR1bShvYmplY3RJZCkpOworCisJc2NhbiA9IHN5 c3RhYmxlX2JlZ2luc2NhbihwZ19yYW5nZSwgUmFuZ2VUeXBpZEluZGV4SWQsIHRydWUsCisJCQkJ CQkJICBOVUxMLCAxLCBrZXkpOworCisJcmFuZ2VUdXAgPSBzeXN0YWJsZV9nZXRuZXh0KHNjYW4p OworCWlmICghSGVhcFR1cGxlSXNWYWxpZChyYW5nZVR1cCkpCisJCWVsb2coRVJST1IsICJjYWNo ZSBsb29rdXAgZmFpbGVkIGZvciByYW5nZSB3aXRoIHR5cGUgT0lEICV1IiwKKwkJCSBvYmplY3RJ ZCk7CisKKwlyYW5nZUZvcm0gPSAoRm9ybV9wZ19yYW5nZSkgR0VUU1RSVUNUKHJhbmdlVHVwKTsK KworCS8qIFNVQlRZUEUgKi8KKwl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiU1VCVFlQRSA9ICV7dHlw ZX1EIiwgMiwKKwkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgInN1YnR5cGUiLAorCQkJ CQkJICJ0eXBlIiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5h bWVfaWQoVHlwZVJlbGF0aW9uSWQsIHJhbmdlRm9ybS0+cm5nc3VidHlwZSkpOworCWRlZmluaXRp b24gPSBsYXBwZW5kKGRlZmluaXRpb24sIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCisJLyog U1VCVFlQRV9PUENMQVNTICovCisJaWYgKE9pZElzVmFsaWQocmFuZ2VGb3JtLT5ybmdzdWJvcGMp KQorCXsKKwkJdG1wID0gbmV3X29ianRyZWVfVkEoIlNVQlRZUEVfT1BDTEFTUyA9ICV7b3BjbGFz c31EIiwgMiwKKwkJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJvcGNsYXNzIiwKKwkJ CQkJCQkgIm9wY2xhc3MiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3Jf cXVhbG5hbWVfaWQoT3BlcmF0b3JDbGFzc1JlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJCSByYW5n ZUZvcm0tPnJuZ3N1Ym9wYykpOworCQlkZWZpbml0aW9uID0gbGFwcGVuZChkZWZpbml0aW9uLCBu ZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKwl9CisKKwkvKiBDT0xMQVRJT04gKi8KKwlpZiAoT2lk SXNWYWxpZChyYW5nZUZvcm0tPnJuZ2NvbGxhdGlvbikpCisJeworCQl0bXAgPSBuZXdfb2JqdHJl ZV9WQSgiQ09MTEFUSU9OID0gJXtjb2xsYXRpb259RCIsIDIsCisJCQkJCQkJICJjbGF1c2UiLCBP YmpUeXBlU3RyaW5nLCAiY29sbGF0aW9uIiwKKwkJCQkJCQkgImNvbGxhdGlvbiIsIE9ialR5cGVP YmplY3QsCisJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChDb2xsYXRpb25SZWxh dGlvbklkLAorCQkJCQkJCQkJCQkJCQkgcmFuZ2VGb3JtLT5ybmdjb2xsYXRpb24pKTsKKwkJZGVm aW5pdGlvbiA9IGxhcHBlbmQoZGVmaW5pdGlvbiwgbmV3X29iamVjdF9vYmplY3QodG1wKSk7CisJ fQorCisJLyogQ0FOT05JQ0FMICovCisJaWYgKE9pZElzVmFsaWQocmFuZ2VGb3JtLT5ybmdjYW5v bmljYWwpKQorCXsKKwkJdG1wID0gbmV3X29ianRyZWVfVkEoIkNBTk9OSUNBTCA9ICV7Y2Fub25p Y2FsfUQiLCAyLAorCQkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgImNhbm9uaWNhbCIs CisJCQkJCQkJICJjYW5vbmljYWwiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJCSBuZXdfb2JqdHJl ZV9mb3JfcXVhbG5hbWVfaWQoUHJvY2VkdXJlUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkJIHJh bmdlRm9ybS0+cm5nY2Fub25pY2FsKSk7CisJCWRlZmluaXRpb24gPSBsYXBwZW5kKGRlZmluaXRp b24sIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCX0KKworCS8qIFNVQlRZUEVfRElGRiAqLwor CWlmIChPaWRJc1ZhbGlkKHJhbmdlRm9ybS0+cm5nc3ViZGlmZikpCisJeworCQl0bXAgPSBuZXdf b2JqdHJlZV9WQSgiU1VCVFlQRV9ESUZGID0gJXtzdWJ0eXBlX2RpZmZ9RCIsIDIsCisJCQkJCQkJ ICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAic3VidHlwZV9kaWZmIiwKKwkJCQkJCQkgInN1YnR5 cGVfZGlmZiIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFt ZV9pZChQcm9jZWR1cmVSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCQkgcmFuZ2VGb3JtLT5ybmdz dWJkaWZmKSk7CisJCWRlZmluaXRpb24gPSBsYXBwZW5kKGRlZmluaXRpb24sIG5ld19vYmplY3Rf b2JqZWN0KHRtcCkpOworCX0KKworCXN5c3RhYmxlX2VuZHNjYW4oc2Nhbik7CisJdGFibGVfY2xv c2UocGdfcmFuZ2UsIFJvd0V4Y2x1c2l2ZUxvY2spOworCisJcmV0dXJuIG5ld19vYmp0cmVlX1ZB KCJDUkVBVEUgVFlQRSAle2lkZW50aXR5fUQgQVMgUkFOR0UgKCV7ZGVmaW5pdGlvbjosIH1zKSIs IDIsCisJCQkJCQkgICJpZGVudGl0eSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkgIG5ld19vYmp0 cmVlX2Zvcl9xdWFsbmFtZV9pZChUeXBlUmVsYXRpb25JZCwgb2JqZWN0SWQpLAorCQkJCQkJICAi ZGVmaW5pdGlvbiIsIE9ialR5cGVBcnJheSwgZGVmaW5pdGlvbik7Cit9CisKKy8qCisgKiBEZXBh cnNlIGFuIEFsdGVyRW51bVN0bXQuCisgKgorICogR2l2ZW4gYW4gZW51bSBPSUQgYW5kIGEgcGFy c2UgdHJlZSB0aGF0IG1vZGlmaWVkIGl0LCByZXR1cm4gYW4gT2JqVHJlZQorICogcmVwcmVzZW50 aW5nIHRoZSBhbHRlciB0eXBlLgorICoKKyAqIFZlcmJvc2Ugc3ludGF4CisgKiBBTFRFUiBUWVBF ICV7aWRlbnRpdHl9RCBBREQgVkFMVUUgJXtpZl9ub3RfZXhpc3RzfXMgJXt2YWx1ZX1MCisgKiAl e2FmdGVyX29yX2JlZm9yZX1zICV7bmVpZ2hib3J9TAorICogCU9SCisgKiBBTFRFUiBUWVBFICV7 aWRlbnRpdHl9RCBSRU5BTUUgVkFMVUUgJXt2YWx1ZX1MIFRPICV7bmV3dmFsdWV9TAorICovCitz dGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0FsdGVyRW51bVN0bXQoT2lkIG9iamVjdElkLCBOb2Rl ICpwYXJzZXRyZWUpCit7CisJQWx0ZXJFbnVtU3RtdCAqbm9kZSA9IChBbHRlckVudW1TdG10ICop IHBhcnNldHJlZTsKKwlPYmpUcmVlICAgICpyZXQ7CisKKwlyZXQgPSBuZXdfb2JqdHJlZV9WQSgi QUxURVIgVFlQRSAle2lkZW50aXR5fUQiLCAxLAorCQkJCQkJICJpZGVudGl0eSIsIE9ialR5cGVP YmplY3QsCisJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFR5cGVSZWxhdGlvbklk LAorCQkJCQkJCQkJCQkJCSBvYmplY3RJZCkpOworCisJaWYgKCFub2RlLT5vbGRWYWwpCisJewor CQlhcHBlbmRfZm9ybWF0X3N0cmluZyhyZXQsICJBREQgVkFMVUUiKTsKKwkJYXBwZW5kX3N0cmlu Z19vYmplY3QocmV0LCAiJXtpZl9ub3RfZXhpc3RzfXMiLCAiaWZfbm90X2V4aXN0cyIsCisJCQkJ CQkJIG5vZGUtPnNraXBJZk5ld1ZhbEV4aXN0cyA/ICJJRiBOT1QgRVhJU1RTIiA6ICIiKTsKKwor CQlhcHBlbmRfc3RyaW5nX29iamVjdChyZXQsICIle3ZhbHVlfUwiLCAidmFsdWUiLCBub2RlLT5u ZXdWYWwpOworCisJCWlmIChub2RlLT5uZXdWYWxOZWlnaGJvcikKKwkJeworCQkJYXBwZW5kX3N0 cmluZ19vYmplY3QocmV0LCAiJXthZnRlcl9vcl9iZWZvcmV9cyIsCisJCQkJCQkJCSAiYWZ0ZXJf b3JfYmVmb3JlIiwKKwkJCQkJCQkJIG5vZGUtPm5ld1ZhbElzQWZ0ZXIgPyAiQUZURVIiIDogIkJF Rk9SRSIpOworCQkJYXBwZW5kX3N0cmluZ19vYmplY3QocmV0LCAiJXtuZWlnaGJvcn1MIiwgIm5l aWdoYm9yIiwKKwkJCQkJCQkJIG5vZGUtPm5ld1ZhbE5laWdoYm9yKTsKKwkJfQorCX0KKwllbHNl CisJeworCQlhcHBlbmRfc3RyaW5nX29iamVjdChyZXQsICJSRU5BTUUgVkFMVUUgJXt2YWx1ZX1M IFRPIiwgInZhbHVlIiwKKwkJCQkJCQkgbm9kZS0+b2xkVmFsKTsKKwkJYXBwZW5kX3N0cmluZ19v YmplY3QocmV0LCAiJXtuZXd2YWx1ZX1MIiwgIm5ld3ZhbHVlIiwgbm9kZS0+bmV3VmFsKTsKKwl9 CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogRGVwYXJzZSBhbiBBbHRlckV4dGVuc2lvblN0 bXQgKEFMVEVSIEVYVEVOU0lPTiAuLiBVUERBVEUgVE8gVkVSU0lPTikKKyAqCisgKiBHaXZlbiBh biBleHRlbnNpb24gT0lEIGFuZCBhIHBhcnNlIHRyZWUgdGhhdCBtb2RpZmllZCBpdCwgcmV0dXJu IGFuIE9ialRyZWUKKyAqIHJlcHJlc2VudGluZyB0aGUgYWx0ZXIgdHlwZS4KKyAqCisgKiBWZXJi b3NlIHN5bnRheAorICogQUxURVIgRVhURU5TSU9OICV7aWRlbnRpdHl9SSBVUERBVEUgJXtvcHRp b25zOiB9cworICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0FsdGVyRXh0ZW5zaW9uU3Rt dChPaWQgb2JqZWN0SWQsIE5vZGUgKnBhcnNldHJlZSkKK3sKKwlBbHRlckV4dGVuc2lvblN0bXQg Km5vZGUgPSAoQWx0ZXJFeHRlbnNpb25TdG10ICopIHBhcnNldHJlZTsKKwlSZWxhdGlvbglwZ19l eHRlbnNpb247CisJSGVhcFR1cGxlCWV4dFR1cDsKKwlGb3JtX3BnX2V4dGVuc2lvbiBleHRGb3Jt OworCU9ialRyZWUgICAgKnJldDsKKwlMaXN0CSAgICpsaXN0ID0gTklMOworCUxpc3RDZWxsICAg KmNlbGw7CisJRGVmRWxlbSAgICAqZF9uZXdfdmVyc2lvbiA9IE5VTEw7CisKKwlwZ19leHRlbnNp b24gPSB0YWJsZV9vcGVuKEV4dGVuc2lvblJlbGF0aW9uSWQsIEFjY2Vzc1NoYXJlTG9jayk7CisJ ZXh0VHVwID0gZ2V0X2NhdGFsb2dfb2JqZWN0X2J5X29pZChwZ19leHRlbnNpb24sIEFudW1fcGdf ZXh0ZW5zaW9uX29pZCwgb2JqZWN0SWQpOworCWlmICghSGVhcFR1cGxlSXNWYWxpZChleHRUdXAp KQorCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3IgZXh0ZW5zaW9uIHdpdGgg T0lEICV1IiwKKwkJCSBvYmplY3RJZCk7CisJZXh0Rm9ybSA9IChGb3JtX3BnX2V4dGVuc2lvbikg R0VUU1RSVUNUKGV4dFR1cCk7CisKKwlmb3JlYWNoKGNlbGwsIG5vZGUtPm9wdGlvbnMpCisJewor CQlEZWZFbGVtICAgICpvcHQgPSAoRGVmRWxlbSAqKSBsZmlyc3QoY2VsbCk7CisKKwkJaWYgKHN0 cmNtcChvcHQtPmRlZm5hbWUsICJuZXdfdmVyc2lvbiIpID09IDApCisJCXsKKwkJCU9ialRyZWUg ICAgKnRtcDsKKworCQkJaWYgKGRfbmV3X3ZlcnNpb24pCisJCQkJZWxvZyhFUlJPUiwgImNvbmZs aWN0aW5nIG9yIHJlZHVuZGFudCBvcHRpb25zIGZvciBleHRlbnNpb24gd2l0aCBPSUQgJXUiLAor CQkJCQkgb2JqZWN0SWQpOworCisJCQlkX25ld192ZXJzaW9uID0gb3B0OworCisJCQl0bXAgPSBu ZXdfb2JqdHJlZV9WQSgiVE8gJXt2ZXJzaW9ufUwiLCAyLAorCQkJCQkJCQkgInR5cGUiLCBPYmpU eXBlU3RyaW5nLCAidmVyc2lvbiIsCisJCQkJCQkJCSAidmVyc2lvbiIsIE9ialR5cGVTdHJpbmcs IGRlZkdldFN0cmluZyhvcHQpKTsKKwkJCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rf b2JqZWN0KHRtcCkpOworCQl9CisJCWVsc2UKKwkJCWVsb2coRVJST1IsICJ1bnN1cHBvcnRlZCBv cHRpb24gJXMiLCBvcHQtPmRlZm5hbWUpOworCX0KKworCXJldCA9IG5ld19vYmp0cmVlX1ZBKCJB TFRFUiBFWFRFTlNJT04gJXtpZGVudGl0eX1JIFVQREFURSAle29wdGlvbnM6IH1zIiwgMiwKKwkJ CQkJCSAiaWRlbnRpdHkiLCBPYmpUeXBlU3RyaW5nLCBOYW1lU3RyKGV4dEZvcm0tPmV4dG5hbWUp LAorCQkJCQkJICJvcHRpb25zIiwgT2JqVHlwZUFycmF5LCBsaXN0KTsKKworCXRhYmxlX2Nsb3Nl KHBnX2V4dGVuc2lvbiwgQWNjZXNzU2hhcmVMb2NrKTsKKworCXJldHVybiByZXQ7Cit9CisKKy8q CisgKiBEZXBhcnNlIGFuIEFsdGVyRXh0ZW5zaW9uQ29udGVudHNTdG10IChBTFRFUiBFWFRFTlNJ T04gZXh0IEFERC9EUk9QIG9iamVjdCkKKyAqCisgKiBWZXJib3NlIHN5bnRheAorICogQUxURVIg RVhURU5TSU9OICV7ZXh0aWRlbnRpdHl9SSBBREQvRFJPUCAle29iamlkZW50aXR5fXMKKyAqLwor c3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9BbHRlckV4dGVuc2lvbkNvbnRlbnRzU3RtdChPaWQg b2JqZWN0SWQsIE5vZGUgKnBhcnNldHJlZSwKKwkJCQkJCQkJICAgT2JqZWN0QWRkcmVzcyBvYmpl Y3RBZGRyZXNzKQoreworCUFsdGVyRXh0ZW5zaW9uQ29udGVudHNTdG10ICpub2RlID0gKEFsdGVy RXh0ZW5zaW9uQ29udGVudHNTdG10ICopIHBhcnNldHJlZTsKKworCUFzc2VydChub2RlLT5hY3Rp b24gPT0gKzEgfHwgbm9kZS0+YWN0aW9uID09IC0xKTsKKworCXJldHVybiBuZXdfb2JqdHJlZV9W QSgiQUxURVIgRVhURU5TSU9OICV7ZXh0aWRlbnRpdHl9SSAle2V4dG9wdGlvbn1zICV7ZXh0b2Jq dHlwZX1zICV7b2JqaWRlbnRpdHl9cyIsIDQsCisJCQkJCQkgICJleHRpZGVudGl0eSIsIE9ialR5 cGVTdHJpbmcsIG5vZGUtPmV4dG5hbWUsCisJCQkJCQkgICJleHRvcHRpb24iLCBPYmpUeXBlU3Ry aW5nLAorCQkJCQkJICBub2RlLT5hY3Rpb24gPT0gKzEgPyAiQUREIiA6ICJEUk9QIiwKKwkJCQkJ CSAgImV4dG9ianR5cGUiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJICBzdHJpbmdpZnlfb2JqdHlw ZShub2RlLT5vYmp0eXBlLCBmYWxzZSksCisJCQkJCQkgICJvYmppZGVudGl0eSIsIE9ialR5cGVT dHJpbmcsCisJCQkJCQkgIGdldE9iamVjdElkZW50aXR5KCZvYmplY3RBZGRyZXNzLCBmYWxzZSkp OworfQorCisvKgorICogRGVwYXJzZSBhbiBDcmVhdGVDYXN0U3RtdC4KKyAqCisgKiBHaXZlbiBh IHNlcXVlbmNlIE9JRCBhbmQgYSBwYXJzZSB0cmVlIHRoYXQgbW9kaWZpZWQgaXQsIHJldHVybiBh biBPYmpUcmVlCisgKiByZXByZXNlbnRpbmcgdGhlIGNyZWF0aW9uIGNvbW1hbmQuCisgKgorICog VmVyYm9zZSBzeW50YXgKKyAqIENSRUFURSBDQVNUICgle3NvdXJjZXR5cGV9VCBBUyAle3Rhcmdl dHR5cGV9VCkgJXttZWNoYW5pc219cyAle2NvbnRleHR9cworICovCitzdGF0aWMgT2JqVHJlZSAq CitkZXBhcnNlX0NyZWF0ZUNhc3RTdG10KE9pZCBvYmplY3RJZCwgTm9kZSAqcGFyc2V0cmVlKQor eworCUNyZWF0ZUNhc3RTdG10ICpub2RlID0gKENyZWF0ZUNhc3RTdG10ICopIHBhcnNldHJlZTsK KwlSZWxhdGlvbgljYXN0cmVsOworCUhlYXBUdXBsZQljYXN0VHVwOworCUZvcm1fcGdfY2FzdCBj YXN0Rm9ybTsKKwlPYmpUcmVlICAgICpyZXQ7CisJY2hhcgkgICAqY29udGV4dDsKKworCWNhc3Ry ZWwgPSB0YWJsZV9vcGVuKENhc3RSZWxhdGlvbklkLCBBY2Nlc3NTaGFyZUxvY2spOworCWNhc3RU dXAgPSBnZXRfY2F0YWxvZ19vYmplY3RfYnlfb2lkKGNhc3RyZWwsIEFudW1fcGdfY2FzdF9vaWQs IG9iamVjdElkKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQoY2FzdFR1cCkpCisJCWVsb2coRVJS T1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciBjYXN0IHdpdGggT0lEICV1Iiwgb2JqZWN0SWQp OworCWNhc3RGb3JtID0gKEZvcm1fcGdfY2FzdCkgR0VUU1RSVUNUKGNhc3RUdXApOworCisJcmV0 ID0gbmV3X29ianRyZWVfVkEoIkNSRUFURSBDQVNUICgle3NvdXJjZXR5cGV9VCBBUyAle3Rhcmdl dHR5cGV9VCkiLCAyLAorCQkJCQkJICJzb3VyY2V0eXBlIiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJ CSBuZXdfb2JqdHJlZV9mb3JfdHlwZShjYXN0Rm9ybS0+Y2FzdHNvdXJjZSwgLTEpLAorCQkJCQkJ ICJ0YXJnZXR0eXBlIiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfdHlw ZShjYXN0Rm9ybS0+Y2FzdHRhcmdldCwgLTEpKTsKKworCWlmIChub2RlLT5pbm91dCkKKwkJYXBw ZW5kX3N0cmluZ19vYmplY3QocmV0LCAiJXttZWNoYW5pc219cyIsICJtZWNoYW5pc20iLAorCQkJ CQkJCSAiV0lUSCBJTk9VVCIpOworCWVsc2UgaWYgKG5vZGUtPmZ1bmMgPT0gTlVMTCkKKwkJYXBw ZW5kX3N0cmluZ19vYmplY3QocmV0LCAiJXttZWNoYW5pc219cyIsICJtZWNoYW5pc20iLAorCQkJ CQkJCSAiV0lUSE9VVCBGVU5DVElPTiIpOworCWVsc2UKKwl7CisJCU9ialRyZWUgICAgKnRtcF9v Ymo7CisJCVN0cmluZ0luZm9EYXRhIGZ1bmM7CisJCUhlYXBUdXBsZQlmdW5jVHVwOworCQlGb3Jt X3BnX3Byb2MgZnVuY0Zvcm07CisJCWludAkJCWk7CisKKwkJZnVuY1R1cCA9IFNlYXJjaFN5c0Nh Y2hlMShQUk9DT0lELCBjYXN0Rm9ybS0+Y2FzdGZ1bmMpOworCQlmdW5jRm9ybSA9IChGb3JtX3Bn X3Byb2MpIEdFVFNUUlVDVChmdW5jVHVwKTsKKworCQlpbml0U3RyaW5nSW5mbygmZnVuYyk7CisJ CWFwcGVuZFN0cmluZ0luZm8oJmZ1bmMsICIlcygiLAorCQkJCQkJIHF1b3RlX3F1YWxpZmllZF9p ZGVudGlmaWVyKGdldF9uYW1lc3BhY2VfbmFtZShmdW5jRm9ybS0+cHJvbmFtZXNwYWNlKSwKKwkJ CQkJCQkJCQkJCQlOYW1lU3RyKGZ1bmNGb3JtLT5wcm9uYW1lKSkpOworCQlmb3IgKGkgPSAwOyBp IDwgZnVuY0Zvcm0tPnByb25hcmdzOyBpKyspCisJCXsKKwkJCWlmIChpICE9IDApCisJCQkJYXBw ZW5kU3RyaW5nSW5mb0NoYXIoJmZ1bmMsICcsJyk7CisKKwkJCWFwcGVuZFN0cmluZ0luZm9TdHJp bmcoJmZ1bmMsCisJCQkJCQkJCSAgIGZvcm1hdF90eXBlX2JlX3F1YWxpZmllZChmdW5jRm9ybS0+ cHJvYXJndHlwZXMudmFsdWVzW2ldKSk7CisJCX0KKwkJYXBwZW5kU3RyaW5nSW5mb0NoYXIoJmZ1 bmMsICcpJyk7CisKKwkJdG1wX29iaiA9IG5ld19vYmp0cmVlX1ZBKCJXSVRIIEZVTkNUSU9OICV7 Y2FzdGZ1bmN0aW9ufXMiLCAxLAorCQkJCQkJCQkiY2FzdGZ1bmN0aW9uIiwgT2JqVHlwZVN0cmlu ZywgZnVuYy5kYXRhKTsKKwkJYXBwZW5kX29iamVjdF9vYmplY3QocmV0LCAiJXttZWNoYW5pc219 cyIsIHRtcF9vYmopOworCisJCVJlbGVhc2VTeXNDYWNoZShmdW5jVHVwKTsKKwl9CisKKwlzd2l0 Y2ggKG5vZGUtPmNvbnRleHQpCisJeworCQljYXNlIENPRVJDSU9OX0lNUExJQ0lUOgorCQkJY29u dGV4dCA9ICJBUyBJTVBMSUNJVCI7CisJCQlicmVhazsKKwkJY2FzZSBDT0VSQ0lPTl9BU1NJR05N RU5UOgorCQkJY29udGV4dCA9ICJBUyBBU1NJR05NRU5UIjsKKwkJCWJyZWFrOworCQljYXNlIENP RVJDSU9OX0VYUExJQ0lUOgorCQkJY29udGV4dCA9ICIiOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6 CisJCQllbG9nKEVSUk9SLCAiaW52YWxpZCBjb2VyY2lvbiBjb2RlICVjIiwgbm9kZS0+Y29udGV4 dCk7CisJCQlyZXR1cm4gTlVMTDsJCS8qIGtlZXAgY29tcGlsZXIgcXVpZXQgKi8KKwl9CisJYXBw ZW5kX3N0cmluZ19vYmplY3QocmV0LCAiJXtjb250ZXh0fXMiLCAiY29udGV4dCIsIGNvbnRleHQp OworCisJdGFibGVfY2xvc2UoY2FzdHJlbCwgQWNjZXNzU2hhcmVMb2NrKTsKKworCXJldHVybiBy ZXQ7Cit9CisKKy8qCisgKiBEZXBhcnNlIGFuIEFMVEVSIERFRkFVTFQgUFJJVklMRUdFUyBzdGF0 ZW1lbnQuCisgKgorICogVmVyYm9zZSBzeW50YXgKKyAqIEFMVEVSIERFRkFVTFQgUFJJVklMRUdF UyAle2luX3NjaGVtYX1zICV7Zm9yX3JvbGVzfXMgJXtncmFudH1zCisgKi8KK3N0YXRpYyBPYmpU cmVlICoKK2RlcGFyc2VfQWx0ZXJEZWZhdWx0UHJpdmlsZWdlc1N0bXQoQ29sbGVjdGVkQ29tbWFu ZCAqY21kKQoreworCU9ialRyZWUgICAgKnJldDsKKwlBbHRlckRlZmF1bHRQcml2aWxlZ2VzU3Rt dCAqc3RtdCA9IChBbHRlckRlZmF1bHRQcml2aWxlZ2VzU3RtdCAqKSBjbWQtPnBhcnNldHJlZTsK KwlMaXN0CSAgICpyb2xlcyA9IE5JTDsKKwlMaXN0CSAgICpzY2hlbWFzID0gTklMOworCUxpc3QJ ICAgKmdyYW50ZWVzOworCUxpc3QJICAgKnByaXZzOworCUxpc3RDZWxsICAgKmNlbGw7CisJT2Jq VHJlZSAgICAqdG1wOworCU9ialRyZWUgICAgKmdyYW50OworCWNoYXIJICAgKm9ianR5cGU7CisK KwlyZXQgPSBuZXdfb2JqdHJlZSgiQUxURVIgREVGQVVMVCBQUklWSUxFR0VTIik7CisKKwkvKiBT Y2FuIHRoZSBwYXJzZSBub2RlIHRvIGRpZyBvdXQgdGhlIEZPUiBST0xFIGFuZCBJTiBTQ0hFTUEg Y2xhdXNlcyAqLworCWZvcmVhY2goY2VsbCwgc3RtdC0+b3B0aW9ucykKKwl7CisJCURlZkVsZW0g ICAgKm9wdCA9IChEZWZFbGVtICopIGxmaXJzdChjZWxsKTsKKwkJTGlzdENlbGwgICAqY2VsbDI7 CisKKwkJQXNzZXJ0KElzQShvcHQsIERlZkVsZW0pKTsKKwkJQXNzZXJ0KElzQShvcHQtPmFyZywg TGlzdCkpOworCQlpZiAoc3RyY21wKG9wdC0+ZGVmbmFtZSwgInJvbGVzIikgPT0gMCkKKwkJewor CQkJZm9yZWFjaChjZWxsMiwgKExpc3QgKikgb3B0LT5hcmcpCisJCQl7CisJCQkJUm9sZVNwZWMg ICAqcm9sZXNwZWMgPSBsZmlyc3QoY2VsbDIpOworCQkJCU9ialRyZWUgICAgKm9iaiA9IG5ld19v Ymp0cmVlX2Zvcl9yb2xlc3BlYyhyb2xlc3BlYyk7CisKKwkJCQlyb2xlcyA9IGxhcHBlbmQocm9s ZXMsIG5ld19vYmplY3Rfb2JqZWN0KG9iaikpOworCQkJfQorCQl9CisJCWVsc2UgaWYgKHN0cmNt cChvcHQtPmRlZm5hbWUsICJzY2hlbWFzIikgPT0gMCkKKwkJeworCQkJZm9yZWFjaChjZWxsMiwg KExpc3QgKikgb3B0LT5hcmcpCisJCQl7CisJCQkJU3RyaW5nCSAgICp2YWwgPSBsZmlyc3Rfbm9k ZShTdHJpbmcsIGNlbGwyKTsKKworCQkJCXNjaGVtYXMgPSBsYXBwZW5kKHNjaGVtYXMsIG5ld19z dHJpbmdfb2JqZWN0KHN0clZhbCh2YWwpKSk7CisJCQl9CisJCX0KKwl9CisKKwkvKiBBZGQgdGhl IElOIFNDSEVNQSBjbGF1c2UsIGlmIGFueSAqLworCXRtcCA9IG5ld19vYmp0cmVlKCJJTiBTQ0hF TUEiKTsKKwlhcHBlbmRfYXJyYXlfb2JqZWN0KHRtcCwgIiV7c2NoZW1hczosIH1JIiwgc2NoZW1h cyk7CisJaWYgKHNjaGVtYXMgPT0gTklMKQorCQlhcHBlbmRfbm90X3ByZXNlbnQodG1wKTsKKwlh cHBlbmRfb2JqZWN0X29iamVjdChyZXQsICIle2luX3NjaGVtYX1zIiwgdG1wKTsKKworCS8qIEFk ZCB0aGUgRk9SIFJPTEUgY2xhdXNlLCBpZiBhbnkgKi8KKwl0bXAgPSBuZXdfb2JqdHJlZSgiRk9S IFJPTEUiKTsKKwlhcHBlbmRfYXJyYXlfb2JqZWN0KHRtcCwgIiV7cm9sZXM6LCB9UiIsIHJvbGVz KTsKKwlpZiAocm9sZXMgPT0gTklMKQorCQlhcHBlbmRfbm90X3ByZXNlbnQodG1wKTsKKwlhcHBl bmRfb2JqZWN0X29iamVjdChyZXQsICIle2Zvcl9yb2xlc31zIiwgdG1wKTsKKworCS8qCisJICog QWRkIHRoZSBHUkFOVCBzdWJjb21tYW5kCisJICogVmVyYm9zZSBzeW50YXgKKwkgKiBHUkFOVCAl e3ByaXZpbGVnZXM6LCB9cyBPTiAle3RhcmdldH1zIFRPICV7Z3JhbnRlZXM6LCB9UiAle2dyYW50 X29wdGlvbn1zCisJICogb3IKKwkgKiBSRVZPS0UgJXtncmFudF9vcHRpb259cyAle3ByaXZpbGVn ZXM6LCB9cyBPTiAle3RhcmdldH1zIEZST00gJXtncmFudGVlczosIH1SCisJICovCisJaWYgKHN0 bXQtPmFjdGlvbi0+aXNfZ3JhbnQpCisJCWdyYW50ID0gbmV3X29ianRyZWUoIkdSQU5UIik7CisJ ZWxzZQorCXsKKwkJZ3JhbnQgPSBuZXdfb2JqdHJlZSgiUkVWT0tFIik7CisKKwkJLyogQWRkIHRo ZSBHUkFOVCBPUFRJT04gY2xhdXNlIGZvciBSRVZPS0Ugc3ViY29tbWFuZCAqLworCQl0bXAgPSBu ZXdfb2JqdHJlZV9WQSgiR1JBTlQgT1BUSU9OIEZPUiIsIDEsCisJCQkJCQkJICJwcmVzZW50Iiwg T2JqVHlwZUJvb2wsCisJCQkJCQkJIHN0bXQtPmFjdGlvbi0+Z3JhbnRfb3B0aW9uKTsKKwkJYXBw ZW5kX29iamVjdF9vYmplY3QoZ3JhbnQsICIle2dyYW50X29wdGlvbn1zIiwgdG1wKTsKKwl9CisK KwkvKgorCSAqIEFkZCB0aGUgcHJpdmlsZWdlcyBsaXN0LiAgVGhpcyB1c2VzIHRoZSBwYXJzZXIg c3RydWN0LCBhcyBvcHBvc2VkIHRvCisJICogdGhlIEludGVybmFsR3JhbnQgZm9ybWF0IHVzZWQg YnkgR1JBTlQuICBUaGVyZSBhcmUgZW5vdWdoIG90aGVyCisJICogZGlmZmVyZW5jZXMgdGhhdCB0 aGlzIGRvZXNuJ3Qgc2VlbSB3b3J0aCBpbXByb3ZpbmcuCisJICovCisJaWYgKHN0bXQtPmFjdGlv bi0+cHJpdmlsZWdlcyA9PSBOSUwpCisJCXByaXZzID0gbGlzdF9tYWtlMShuZXdfc3RyaW5nX29i amVjdCgiQUxMIFBSSVZJTEVHRVMiKSk7CisJZWxzZQorCXsKKwkJcHJpdnMgPSBOSUw7CisKKwkJ Zm9yZWFjaChjZWxsLCBzdG10LT5hY3Rpb24tPnByaXZpbGVnZXMpCisJCXsKKwkJCUFjY2Vzc1By aXYgKnByaXYgPSBsZmlyc3QoY2VsbCk7CisKKwkJCUFzc2VydChwcml2LT5jb2xzID09IE5JTCk7 CisJCQlwcml2cyA9IGxhcHBlbmQocHJpdnMsIG5ld19zdHJpbmdfb2JqZWN0KHByaXYtPnByaXZf bmFtZSkpOworCQl9CisJfQorCisJYXBwZW5kX2FycmF5X29iamVjdChncmFudCwgIiV7cHJpdmls ZWdlczosIH1zIiwgcHJpdnMpOworCisJc3dpdGNoIChjbWQtPmQuZGVmcHJpdnMub2JqdHlwZSkK Kwl7CisJCWNhc2UgT0JKRUNUX1RBQkxFOgorCQkJb2JqdHlwZSA9ICJUQUJMRVMiOworCQkJYnJl YWs7CisJCWNhc2UgT0JKRUNUX0ZVTkNUSU9OOgorCQkJb2JqdHlwZSA9ICJGVU5DVElPTlMiOwor CQkJYnJlYWs7CisJCWNhc2UgT0JKRUNUX1JPVVRJTkU6CisJCQlvYmp0eXBlID0gIlJPVVRJTkVT IjsKKwkJCWJyZWFrOworCQljYXNlIE9CSkVDVF9TRVFVRU5DRToKKwkJCW9ianR5cGUgPSAiU0VR VUVOQ0VTIjsKKwkJCWJyZWFrOworCQljYXNlIE9CSkVDVF9UWVBFOgorCQkJb2JqdHlwZSA9ICJU WVBFUyI7CisJCQlicmVhazsKKwkJY2FzZSBPQkpFQ1RfU0NIRU1BOgorCQkJb2JqdHlwZSA9ICJT Q0hFTUFTIjsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJZWxvZyhFUlJPUiwgImludmFsaWQg T0JKRUNUIHZhbHVlICVkIGZvciBkZWZhdWx0IHByaXZpbGVnZXMiLCBjbWQtPmQuZGVmcHJpdnMu b2JqdHlwZSk7CisJfQorCisJLyogQWRkIHRoZSB0YXJnZXQgb2JqZWN0IHR5cGUgKi8KKwlhcHBl bmRfc3RyaW5nX29iamVjdChncmFudCwgIk9OICV7dGFyZ2V0fXMiLCAidGFyZ2V0Iiwgb2JqdHlw ZSk7CisKKwkvKiBBZGQgdGhlIGdyYW50ZWUgbGlzdCAqLworCWdyYW50ZWVzID0gTklMOworCWZv cmVhY2goY2VsbCwgc3RtdC0+YWN0aW9uLT5ncmFudGVlcykKKwl7CisJCVJvbGVTcGVjICAgKnNw ZWMgPSAoUm9sZVNwZWMgKikgbGZpcnN0KGNlbGwpOworCQlPYmpUcmVlICAgICpvYmogPSBuZXdf b2JqdHJlZV9mb3Jfcm9sZXNwZWMoc3BlYyk7CisKKwkJZ3JhbnRlZXMgPSBsYXBwZW5kKGdyYW50 ZWVzLCBuZXdfb2JqZWN0X29iamVjdChvYmopKTsKKwl9CisKKwlpZiAoc3RtdC0+YWN0aW9uLT5p c19ncmFudCkKKwl7CisJCWFwcGVuZF9hcnJheV9vYmplY3QoZ3JhbnQsICJUTyAle2dyYW50ZWVz OiwgfVIiLCBncmFudGVlcyk7CisKKwkJLyogQWRkIHRoZSBXSVRIIEdSQU5UIE9QVElPTiBjbGF1 c2UgZm9yIEdSQU5UIHN1YmNvbW1hbmQgKi8KKwkJdG1wID0gbmV3X29ianRyZWVfVkEoIldJVEgg R1JBTlQgT1BUSU9OIiwgMSwKKwkJCQkJCQkgInByZXNlbnQiLCBPYmpUeXBlQm9vbCwKKwkJCQkJ CQkgc3RtdC0+YWN0aW9uLT5ncmFudF9vcHRpb24pOworCQlhcHBlbmRfb2JqZWN0X29iamVjdChn cmFudCwgIiV7Z3JhbnRfb3B0aW9ufXMiLCB0bXApOworCX0KKwllbHNlCisJCWFwcGVuZF9hcnJh eV9vYmplY3QoZ3JhbnQsICJGUk9NICV7Z3JhbnRlZXM6LCB9UiIsIGdyYW50ZWVzKTsKKworCWFw cGVuZF9vYmplY3Rfb2JqZWN0KHJldCwgIiV7Z3JhbnR9cyIsIGdyYW50KTsKKworCXJldHVybiBy ZXQ7Cit9CisKKy8qCisgKiBEZXBhcnNlIGFsbCB0aGUgY29sbGVjdGVkIHN1YmNvbW1hbmRzIGFu ZCByZXR1cm4gYW4gT2JqVHJlZSByZXByZXNlbnRpbmcgdGhlCisgKiBhbHRlciBjb21tYW5kLgor ICoKKyAqIFZlcmJvc2Ugc3ludGF4CisgKiBBTFRFUiByZWx0eXBlICV7aWRlbnRpdHl9RCAle3N1 YmNtZHM6LCB9cworICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0FsdGVyUmVsYXRpb24o Q29sbGVjdGVkQ29tbWFuZCAqY21kKQoreworCU9ialRyZWUgICAgKnJldDsKKwlPYmpUcmVlICAg ICp0bXBfb2JqOworCU9ialRyZWUgICAgKnRtcF9vYmoyOworCUxpc3QJICAgKmRwY29udGV4dDsK KwlSZWxhdGlvbglyZWw7CisJTGlzdAkgICAqc3ViY21kcyA9IE5JTDsKKwlMaXN0Q2VsbCAgICpj ZWxsOworCWNvbnN0IGNoYXIgKnJlbHR5cGU7CisJYm9vbAkJaXN0eXBlID0gZmFsc2U7CisJYm9v bAkJaXN0YWJsZSA9IGZhbHNlOworCUxpc3QJICAgKmV4cHJzID0gTklMOworCU9pZAkJCXJlbElk ID0gY21kLT5kLmFsdGVyVGFibGUub2JqZWN0SWQ7CisJQWx0ZXJUYWJsZVN0bXQgKnN0bXQgPSBO VUxMOworCisJQXNzZXJ0KGNtZC0+dHlwZSA9PSBTQ1RfQWx0ZXJUYWJsZSk7CisJc3RtdCA9IChB bHRlclRhYmxlU3RtdCAqKSBjbWQtPnBhcnNldHJlZTsKKwlBc3NlcnQoSXNBKHN0bXQsIEFsdGVy VGFibGVTdG10KSk7CisKKwkvKgorCSAqIEFMVEVSIFRBQkxFIHN1YmNvbW1hbmRzIGdlbmVyYXRl ZCBmb3IgVGFibGVMaWtlQ2xhdXNlIGlzIHByb2Nlc3NlZCBpbgorCSAqIHRoZSB0b3AgbGV2ZWwg Q1JFQVRFIFRBQkxFIGNvbW1hbmQ7IHJldHVybiBlbXB0eSBoZXJlLgorCSAqLworCWlmIChzdG10 LT50YWJsZV9saWtlKQorCQlyZXR1cm4gTlVMTDsKKworCXJlbCA9IHJlbGF0aW9uX29wZW4ocmVs SWQsIEFjY2Vzc1NoYXJlTG9jayk7CisJZHBjb250ZXh0ID0gZGVwYXJzZV9jb250ZXh0X2ZvcihS ZWxhdGlvbkdldFJlbGF0aW9uTmFtZShyZWwpLAorCQkJCQkJCQkJcmVsSWQpOworCisJc3dpdGNo IChyZWwtPnJkX3JlbC0+cmVsa2luZCkKKwl7CisJCWNhc2UgUkVMS0lORF9SRUxBVElPTjoKKwkJ Y2FzZSBSRUxLSU5EX1BBUlRJVElPTkVEX1RBQkxFOgorCQkJcmVsdHlwZSA9ICJUQUJMRSI7CisJ CQlpc3RhYmxlID0gdHJ1ZTsKKwkJCWJyZWFrOworCQljYXNlIFJFTEtJTkRfSU5ERVg6CisJCWNh c2UgUkVMS0lORF9QQVJUSVRJT05FRF9JTkRFWDoKKwkJCXJlbHR5cGUgPSAiSU5ERVgiOworCQkJ YnJlYWs7CisJCWNhc2UgUkVMS0lORF9WSUVXOgorCQkJcmVsdHlwZSA9ICJWSUVXIjsKKwkJCWJy ZWFrOworCQljYXNlIFJFTEtJTkRfQ09NUE9TSVRFX1RZUEU6CisJCQlyZWx0eXBlID0gIlRZUEUi OworCQkJaXN0eXBlID0gdHJ1ZTsKKwkJCWJyZWFrOworCQljYXNlIFJFTEtJTkRfRk9SRUlHTl9U QUJMRToKKwkJCXJlbHR5cGUgPSAiRk9SRUlHTiBUQUJMRSI7CisJCQlicmVhazsKKwkJY2FzZSBS RUxLSU5EX01BVFZJRVc6CisJCQlyZWx0eXBlID0gIk1BVEVSSUFMSVpFRCBWSUVXIjsKKwkJCWJy ZWFrOworCisJCQkvKiBUT0RPIHN1cHBvcnQgZm9yIHBhcnRpdGlvbmVkIHRhYmxlICovCisKKwkJ ZGVmYXVsdDoKKwkJCWVsb2coRVJST1IsICJ1bmV4cGVjdGVkIHJlbGtpbmQgJWQiLCByZWwtPnJk X3JlbC0+cmVsa2luZCk7CisJfQorCisJcmV0ID0gbmV3X29ianRyZWVfVkEoIkFMVEVSICV7b2Jq dHlwZX1zICV7aWRlbnRpdHl9RCIsIDIsCisJCQkJCQkgIm9ianR5cGUiLCBPYmpUeXBlU3RyaW5n LCByZWx0eXBlLAorCQkJCQkJICJpZGVudGl0eSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkgbmV3 X29ianRyZWVfZm9yX3F1YWxuYW1lKHJlbC0+cmRfcmVsLT5yZWxuYW1lc3BhY2UsCisJCQkJCQkJ CQkJCQkgIFJlbGF0aW9uR2V0UmVsYXRpb25OYW1lKHJlbCkpKTsKKworCWZvcmVhY2goY2VsbCwg Y21kLT5kLmFsdGVyVGFibGUuc3ViY21kcykKKwl7CisJCUNvbGxlY3RlZEFUU3ViY21kICpzdWIg PSAoQ29sbGVjdGVkQVRTdWJjbWQgKikgbGZpcnN0KGNlbGwpOworCQlBbHRlclRhYmxlQ21kICpz dWJjbWQgPSAoQWx0ZXJUYWJsZUNtZCAqKSBzdWItPnBhcnNldHJlZTsKKwkJT2JqVHJlZSAgICAq dHJlZTsKKworCQlBc3NlcnQoSXNBKHN1YmNtZCwgQWx0ZXJUYWJsZUNtZCkpOworCisJICAgLyoK KwkJKiBTa2lwIGRlcGFyc2Ugb2YgdGhlIHN1YmNvbW1hbmQgaWYgdGhlIG9iamVjdElkIGRvZXNu J3QgbWF0Y2ggdGhlCisJCSogdGFyZ2V0IHJlbGF0aW9uIElELiBJdCBjYW4gaGFwcGVuIGZvciBp bmhlcml0ZWQgdGFibGVzIHdoZW4KKwkJKiBzdWJjb21tYW5kcyBmb3IgaW5oZXJpdGVkIHRhYmxl cyBhbmQgdGhlIHBhcmVudCB0YWJsZSBhcmUgYm90aAorCQkqIGNvbGxlY3RlZCBpbiB0aGUgQUxU RVIgVEFMQkUgY29tbWFuZCBmb3IgdGhlIHBhcmVudCB0YWJsZS4gV2l0aCB0aGUKKwkJKiBleGNl cHRpb24gb2YgdGhlIGludGVybmFsbHkgZ2VuZXJhdGVkIEFkZENvbnN0cmFpbnQgKGZvcgorCQkq IEFMVEVSIFRBQkxFIEFERCBDT05TVFJBSU5UIEZPUkVJR04gS0VZIFJFRkVSRU5DRVMpIHdoZXJl IHRoZQorCQkqIG9iamVjdElkcyBjb3VsZCBtaXNtYXRjaCAoZm9yZWluIHRhYmxlIGlkIGFuZCB0 aGUgcmVmZXJlbmNlZCB0YWJsZQorCQkqIGlkKS4KKwkJKi8KKwkJaWYgKChzdWItPmFkZHJlc3Mu b2JqZWN0SWQgIT0gcmVsSWQgJiYKKwkJCSBzdWItPmFkZHJlc3Mub2JqZWN0SWQgIT0gSW52YWxp ZE9pZCkgJiYKKwkJCSEoc3ViY21kLT5zdWJ0eXBlID09IEFUX0FkZENvbnN0cmFpbnQgJiYKKwkJ CSAgc3ViY21kLT5yZWN1cnNlKSAmJgorCQkJaXN0YWJsZSkKKwkJCWNvbnRpbnVlOworCisJCXN3 aXRjaCAoc3ViY21kLT5zdWJ0eXBlKQorCQl7CisJCQljYXNlIEFUX0FkZENvbHVtbjoKKwkJCQkv KiBYWFggbmVlZCB0byBzZXQgdGhlICJyZWN1cnNlIiBiaXQgc29tZXdoZXJlPyAqLworCQkJCUFz c2VydChJc0Eoc3ViY21kLT5kZWYsIENvbHVtbkRlZikpOworCQkJCXRyZWUgPSBkZXBhcnNlX0Nv bHVtbkRlZihyZWwsIGRwY29udGV4dCwgZmFsc2UsCisJCQkJCQkJCQkJIChDb2x1bW5EZWYgKikg c3ViY21kLT5kZWYsIHRydWUsICZleHBycyk7CisJCQkJdG1wX29iaiA9IG5ld19vYmp0cmVlX1ZB KCJBREQgJXtvYmp0eXBlfXMgJXtpZl9ub3RfZXhpc3RzfXMgJXtkZWZpbml0aW9ufXMiLCA0LAor CQkJCQkJCQkJCSJvYmp0eXBlIiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCQkJCQlpc3R5cGUgPyAi QVRUUklCVVRFIiA6ICJDT0xVTU4iLAorCQkJCQkJCQkJCSJ0eXBlIiwgT2JqVHlwZVN0cmluZywg ImFkZCBjb2x1bW4iLAorCQkJCQkJCQkJCSJpZl9ub3RfZXhpc3RzIiwgT2JqVHlwZVN0cmluZywK KwkJCQkJCQkJCQlzdWJjbWQtPm1pc3Npbmdfb2sgPyAiSUYgTk9UIEVYSVNUUyIgOiAiIiwKKwkJ CQkJCQkJCQkiZGVmaW5pdGlvbiIsIE9ialR5cGVPYmplY3QsIHRyZWUpOworCQkJCXN1YmNtZHMg PSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcF9vYmopKTsKKwkJCQlicmVh azsKKworCQkJY2FzZSBBVF9BZGRJbmRleENvbnN0cmFpbnQ6CisJCQkJeworCQkJCQlJbmRleFN0 bXQgICppc3RtdDsKKwkJCQkJUmVsYXRpb24JaWR4OworCQkJCQlPaWQJCQljb25zdHJPaWQgPSBz dWItPmFkZHJlc3Mub2JqZWN0SWQ7CisKKwkJCQkJQXNzZXJ0KElzQShzdWJjbWQtPmRlZiwgSW5k ZXhTdG10KSk7CisJCQkJCWlzdG10ID0gKEluZGV4U3RtdCAqKSBzdWJjbWQtPmRlZjsKKworCQkJ CQlBc3NlcnQoaXN0bXQtPmlzY29uc3RyYWludCAmJiBpc3RtdC0+dW5pcXVlKTsKKworCQkJCQlp ZHggPSByZWxhdGlvbl9vcGVuKGlzdG10LT5pbmRleE9pZCwgQWNjZXNzU2hhcmVMb2NrKTsKKwor CQkJCQkvKgorCQkJCQkgKiBWZXJib3NlIHN5bnRheAorCQkJCQkgKgorCQkJCQkgKiBBREQgQ09O U1RSQUlOVCAle25hbWV9SSAle2NvbnN0cmFpbnRfdHlwZX1zIFVTSU5HIElOREVYCisJCQkJCSAq ICVpbmRleF9uYW1lfUkgJXtkZWZlcnJhYmxlfXMgJXtpbml0X2RlZmVycmVkfXMKKwkJCQkJICov CisJCQkJCXRtcF9vYmogPSBuZXdfb2JqdHJlZV9WQSgiQUREIENPTlNUUkFJTlQgJXtuYW1lfUkg JXtjb25zdHJhaW50X3R5cGV9cyBVU0lORyBJTkRFWCAle2luZGV4X25hbWV9SSAle2RlZmVycmFi bGV9cyAle2luaXRfZGVmZXJyZWR9cyIsIDYsCisJCQkJCQkJCQkJCSJ0eXBlIiwgT2JqVHlwZVN0 cmluZywgImFkZCBjb25zdHJhaW50IHVzaW5nIGluZGV4IiwKKwkJCQkJCQkJCQkJIm5hbWUiLCBP YmpUeXBlU3RyaW5nLCBnZXRfY29uc3RyYWludF9uYW1lKGNvbnN0ck9pZCksCisJCQkJCQkJCQkJ CSJjb25zdHJhaW50X3R5cGUiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJCQkJCQlpc3RtdC0+cHJp bWFyeSA/ICJQUklNQVJZIEtFWSIgOiAiVU5JUVVFIiwKKwkJCQkJCQkJCQkJImluZGV4X25hbWUi LCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJCQkJCQlSZWxhdGlvbkdldFJlbGF0aW9uTmFtZShpZHgp LAorCQkJCQkJCQkJCQkiZGVmZXJyYWJsZSIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkJCQkJCWlz dG10LT5kZWZlcnJhYmxlID8gIkRFRkVSUkFCTEUiIDogIk5PVCBERUZFUlJBQkxFIiwKKwkJCQkJ CQkJCQkJImluaXRfZGVmZXJyZWQiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJCQkJCQlpc3RtdC0+ aW5pdGRlZmVycmVkID8gIklOSVRJQUxMWSBERUZFUlJFRCIgOiAiSU5JVElBTExZIElNTUVESUFU RSIpOworCisJCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0 KHRtcF9vYmopKTsKKworCQkJCQlyZWxhdGlvbl9jbG9zZShpZHgsIEFjY2Vzc1NoYXJlTG9jayk7 CisJCQkJfQorCQkJCWJyZWFrOworCisJCQljYXNlIEFUX1JlQWRkSW5kZXg6CisJCQljYXNlIEFU X1JlQWRkQ29uc3RyYWludDoKKwkJCWNhc2UgQVRfUmVBZGRDb21tZW50OgorCQkJY2FzZSBBVF9S ZXBsYWNlUmVsT3B0aW9uczoKKwkJCWNhc2UgQVRfQ2hlY2tOb3ROdWxsOgorCQkJY2FzZSBBVF9S ZUFkZFN0YXRpc3RpY3M6CisJCQkJLyogU3VidHlwZXMgdXNlZCBmb3IgaW50ZXJuYWwgb3BlcmF0 aW9uczsgbm90aGluZyB0byBkbyBoZXJlICovCisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfQ29v a2VkQ29sdW1uRGVmYXVsdDoKKwkJCQl7CisJCQkJCVJlbGF0aW9uCWF0dHJyZWw7CisJCQkJCUhl YXBUdXBsZQlhdHR0dXA7CisJCQkJCUZvcm1fcGdfYXR0cmlidXRlIGF0dFN0cnVjdDsKKworCQkJ CQlhdHRycmVsID0gdGFibGVfb3BlbihBdHRyaWJ1dGVSZWxhdGlvbklkLCBSb3dFeGNsdXNpdmVM b2NrKTsKKwkJCQkJYXR0dHVwID0gU2VhcmNoU3lzQ2FjaGVDb3B5MihBVFROVU0sCisJCQkJCQkJ CQkJCQkgT2JqZWN0SWRHZXREYXR1bShSZWxhdGlvbkdldFJlbGlkKHJlbCkpLAorCQkJCQkJCQkJ CQkJIEludDE2R2V0RGF0dW0oc3ViY21kLT5udW0pKTsKKwkJCQkJaWYgKCFIZWFwVHVwbGVJc1Zh bGlkKGF0dHR1cCkpCisJCQkJCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3Ig YXR0cmlidXRlICVkIG9mIHJlbGF0aW9uIHdpdGggT0lEICV1IiwKKwkJCQkJCQkgc3ViY21kLT5u dW0sIFJlbGF0aW9uR2V0UmVsaWQocmVsKSk7CisJCQkJCWF0dFN0cnVjdCA9IChGb3JtX3BnX2F0 dHJpYnV0ZSkgR0VUU1RSVUNUKGF0dHR1cCk7CisKKwkJCQkJLyoKKwkJCQkJICogQm90aCBkZWZh dWx0IGFuZCBnZW5lcmF0aW9uIGV4cHJlc3Npb24gbm90IHN1cHBvcnRlZAorCQkJCQkgKiB0b2dl dGhlci4KKwkJCQkJICovCisJCQkJCWlmICghYXR0U3RydWN0LT5hdHRnZW5lcmF0ZWQpCisJCQkJ CQllbG9nKFdBUk5JTkcsICJ1bnN1cHBvcnRlZCBhbHRlciB0YWJsZSBzdWJ0eXBlICVkIiwKKwkJ CQkJCQkgc3ViY21kLT5zdWJ0eXBlKTsKKworCQkJCQloZWFwX2ZyZWV0dXBsZShhdHR0dXApOwor CQkJCQl0YWJsZV9jbG9zZShhdHRycmVsLCBSb3dFeGNsdXNpdmVMb2NrKTsKKwkJCQkJYnJlYWs7 CisJCQkJfQorCisJCQljYXNlIEFUX0FkZENvbHVtblRvVmlldzoKKwkJCQkvKiBDUkVBVEUgT1Ig UkVQTEFDRSBWSUVXIC0tIG5vdGhpbmcgdG8gZG8gaGVyZSAqLworCQkJCWJyZWFrOworCisJCQlj YXNlIEFUX0NvbHVtbkRlZmF1bHQ6CisJCQkJaWYgKHN1YmNtZC0+ZGVmID09IE5VTEwpCisJCQkJ CXRtcF9vYmogPSBuZXdfb2JqdHJlZV9WQSgiQUxURVIgQ09MVU1OICV7Y29sdW1ufUkgRFJPUCBE RUZBVUxUIiwgMiwKKwkJCQkJCQkJCQkJInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAiZHJvcCBkZWZh dWx0IiwKKwkJCQkJCQkJCQkJImNvbHVtbiIsIE9ialR5cGVTdHJpbmcsIHN1YmNtZC0+bmFtZSk7 CisJCQkJZWxzZQorCQkJCXsKKwkJCQkJTGlzdAkgICAqZHBjb250ZXh0X3JlbDsKKwkJCQkJSGVh cFR1cGxlCWF0dHJ0dXA7CisJCQkJCUF0dHJOdW1iZXIJYXR0bm87CisKKwkJCQkJdG1wX29iaiA9 IG5ld19vYmp0cmVlX1ZBKCJBTFRFUiBDT0xVTU4gJXtjb2x1bW59SSBTRVQgREVGQVVMVCIsIDIs CisJCQkJCQkJCQkJCSJ0eXBlIiwgT2JqVHlwZVN0cmluZywgInNldCBkZWZhdWx0IiwKKwkJCQkJ CQkJCQkJImNvbHVtbiIsIE9ialR5cGVTdHJpbmcsIHN1YmNtZC0+bmFtZSk7CisKKwkJCQkJZHBj b250ZXh0X3JlbCA9IGRlcGFyc2VfY29udGV4dF9mb3IoUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUo cmVsKSwKKwkJCQkJCQkJCQkJCQkJUmVsYXRpb25HZXRSZWxpZChyZWwpKTsKKwkJCQkJYXR0cnR1 cCA9IFNlYXJjaFN5c0NhY2hlQXR0TmFtZShSZWxhdGlvbkdldFJlbGlkKHJlbCksIHN1YmNtZC0+ bmFtZSk7CisJCQkJCWF0dG5vID0gKChGb3JtX3BnX2F0dHJpYnV0ZSkgR0VUU1RSVUNUKGF0dHJ0 dXApKS0+YXR0bnVtOworCQkJCQlhcHBlbmRfc3RyaW5nX29iamVjdCh0bXBfb2JqLCAiJXtkZWZp bml0aW9ufXMiLCAiZGVmaW5pdGlvbiIsCisJCQkJCQkJCQkJIFJlbGF0aW9uR2V0Q29sdW1uRGVm YXVsdChyZWwsIGF0dG5vLAorCQkJCQkJCQkJCQkJCQkJCSAgZHBjb250ZXh0X3JlbCwKKwkJCQkJ CQkJCQkJCQkJCQkgIE5VTEwpKTsKKwkJCQkJUmVsZWFzZVN5c0NhY2hlKGF0dHJ0dXApOworCQkJ CX0KKworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRt cF9vYmopKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9Ecm9wTm90TnVsbDoKKwkJCQl0bXBf b2JqID0gbmV3X29ianRyZWVfVkEoIkFMVEVSIENPTFVNTiAle2NvbHVtbn1JIERST1AgTk9UIE5V TEwiLCAyLAorCQkJCQkJCQkJCSJ0eXBlIiwgT2JqVHlwZVN0cmluZywgImRyb3Agbm90IG51bGwi LAorCQkJCQkJCQkJCSJjb2x1bW4iLCBPYmpUeXBlU3RyaW5nLCBzdWJjbWQtPm5hbWUpOworCQkJ CXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcF9vYmopKTsK KwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9Gb3JjZVJvd1NlY3VyaXR5OgorCQkJCXRtcF9vYmog PSBuZXdfb2JqdHJlZSgiRk9SQ0UgUk9XIExFVkVMIFNFQ1VSSVRZIik7CisJCQkJc3ViY21kcyA9 IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1wX29iaikpOworCQkJCWJyZWFr OworCisJCQljYXNlIEFUX05vRm9yY2VSb3dTZWN1cml0eToKKwkJCQl0bXBfb2JqID0gbmV3X29i anRyZWUoIk5PIEZPUkNFIFJPVyBMRVZFTCBTRUNVUklUWSIpOworCQkJCXN1YmNtZHMgPSBsYXBw ZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcF9vYmopKTsKKwkJCQlicmVhazsKKwor CQkJY2FzZSBBVF9TZXROb3ROdWxsOgorCQkJCXRtcF9vYmogPSBuZXdfb2JqdHJlZV9WQSgiQUxU RVIgQ09MVU1OICV7Y29sdW1ufUkgU0VUIE5PVCBOVUxMIiwgMiwKKwkJCQkJCQkJCQkidHlwZSIs IE9ialR5cGVTdHJpbmcsICJzZXQgbm90IG51bGwiLAorCQkJCQkJCQkJCSJjb2x1bW4iLCBPYmpU eXBlU3RyaW5nLCBzdWJjbWQtPm5hbWUpOworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMs IG5ld19vYmplY3Rfb2JqZWN0KHRtcF9vYmopKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9E cm9wRXhwcmVzc2lvbjoKKwkJCQl0bXBfb2JqID0gbmV3X29ianRyZWVfVkEoIkFMVEVSIENPTFVN TiAle2NvbHVtbn1JIERST1AgRVhQUkVTU0lPTiAle2lmX2V4aXN0c31zIiwgMywKKwkJCQkJCQkJ CQkidHlwZSIsIE9ialR5cGVTdHJpbmcsICJkcm9wIGV4cHJlc3Npb24iLAorCQkJCQkJCQkJCSJj b2x1bW4iLCBPYmpUeXBlU3RyaW5nLCBzdWJjbWQtPm5hbWUsCisJCQkJCQkJCQkJImlmX2V4aXN0 cyIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkJCQkJc3ViY21kLT5taXNzaW5nX29rID8gIklGIEVY SVNUUyIgOiAiIik7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9v YmplY3QodG1wX29iaikpOworCQkJCWJyZWFrOworCisJCQljYXNlIEFUX1NldFN0YXRpc3RpY3M6 CisJCQkJeworCQkJCQlBc3NlcnQoSXNBKHN1YmNtZC0+ZGVmLCBJbnRlZ2VyKSk7CisJCQkJCWlm IChzdWJjbWQtPm5hbWUpCisJCQkJCQl0bXBfb2JqID0gbmV3X29ianRyZWVfVkEoIkFMVEVSIENP TFVNTiAle2NvbHVtbn1JIFNFVCBTVEFUSVNUSUNTICV7c3RhdGlzdGljc31uIiwgMywKKwkJCQkJ CQkJCQkJCSJ0eXBlIiwgT2JqVHlwZVN0cmluZywgInNldCBzdGF0aXN0aWNzIiwKKwkJCQkJCQkJ CQkJCSJjb2x1bW4iLCBPYmpUeXBlU3RyaW5nLCBzdWJjbWQtPm5hbWUsCisJCQkJCQkJCQkJCQki c3RhdGlzdGljcyIsIE9ialR5cGVJbnRlZ2VyLAorCQkJCQkJCQkJCQkJaW50VmFsKChJbnRlZ2Vy ICopIHN1YmNtZC0+ZGVmKSk7CisJCQkJCWVsc2UKKwkJCQkJCXRtcF9vYmogPSBuZXdfb2JqdHJl ZV9WQSgiQUxURVIgQ09MVU1OICV7Y29sdW1ufW4gU0VUIFNUQVRJU1RJQ1MgJXtzdGF0aXN0aWNz fW4iLCAzLAorCQkJCQkJCQkJCQkJInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAic2V0IHN0YXRpc3Rp Y3MiLAorCQkJCQkJCQkJCQkJImNvbHVtbiIsIE9ialR5cGVJbnRlZ2VyLCBzdWJjbWQtPm51bSwK KwkJCQkJCQkJCQkJCSJzdGF0aXN0aWNzIiwgT2JqVHlwZUludGVnZXIsCisJCQkJCQkJCQkJCQlp bnRWYWwoKEludGVnZXIgKikgc3ViY21kLT5kZWYpKTsKKwkJCQkJc3ViY21kcyA9IGxhcHBlbmQo c3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1wX29iaikpOworCQkJCX0KKwkJCQlicmVhazsK KworCQkJY2FzZSBBVF9TZXRPcHRpb25zOgorCQkJY2FzZSBBVF9SZXNldE9wdGlvbnM6CisJCQkJ c3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3QoCisJCQkJCQkJCQkJ CQkJCQkgZGVwYXJzZV9Db2x1bW5TZXRPcHRpb25zKHN1YmNtZCkpKTsKKwkJCQlicmVhazsKKwor CQkJY2FzZSBBVF9TZXRTdG9yYWdlOgorCQkJCUFzc2VydChJc0Eoc3ViY21kLT5kZWYsIFN0cmlu ZykpOworCQkJCXRtcF9vYmogPSBuZXdfb2JqdHJlZV9WQSgiQUxURVIgQ09MVU1OICV7Y29sdW1u fUkgU0VUIFNUT1JBR0UgJXtzdG9yYWdlfXMiLCAzLAorCQkJCQkJCQkJCSJ0eXBlIiwgT2JqVHlw ZVN0cmluZywgInNldCBzdG9yYWdlIiwKKwkJCQkJCQkJCQkiY29sdW1uIiwgT2JqVHlwZVN0cmlu Zywgc3ViY21kLT5uYW1lLAorCQkJCQkJCQkJCSJzdG9yYWdlIiwgT2JqVHlwZVN0cmluZywKKwkJ CQkJCQkJCQlzdHJWYWwoKFN0cmluZyAqKSBzdWJjbWQtPmRlZikpOworCQkJCXN1YmNtZHMgPSBs YXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcF9vYmopKTsKKwkJCQlicmVhazsK KworCQkJY2FzZSBBVF9TZXRDb21wcmVzc2lvbjoKKwkJCQlBc3NlcnQoSXNBKHN1YmNtZC0+ZGVm LCBTdHJpbmcpKTsKKwkJCQl0bXBfb2JqID0gbmV3X29ianRyZWVfVkEoIkFMVEVSIENPTFVNTiAl e2NvbHVtbn1JIFNFVCBDT01QUkVTU0lPTiAle2NvbXByZXNzaW9uX21ldGhvZH1zIiwgMywKKwkJ CQkJCQkJCQkidHlwZSIsIE9ialR5cGVTdHJpbmcsICJzZXQgY29tcHJlc3Npb24iLAorCQkJCQkJ CQkJCSJjb2x1bW4iLCBPYmpUeXBlU3RyaW5nLCBzdWJjbWQtPm5hbWUsCisJCQkJCQkJCQkJImNv bXByZXNzaW9uX21ldGhvZCIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkJCQkJc3RyVmFsKChTdHJp bmcgKikgc3ViY21kLT5kZWYpKTsKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdf b2JqZWN0X29iamVjdCh0bXBfb2JqKSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfRHJvcENv bHVtbjoKKwkJCQl0bXBfb2JqID0gbmV3X29ianRyZWVfVkEoIkRST1AgJXtvYmp0eXBlfXMgJXtp Zl9ub3RfZXhpc3RzfXMgJXtjb2x1bW59SSIsIDQsCisJCQkJCQkJCQkJIm9ianR5cGUiLCBPYmpU eXBlU3RyaW5nLAorCQkJCQkJCQkJCWlzdHlwZSA/ICJBVFRSSUJVVEUiIDogIkNPTFVNTiIsCisJ CQkJCQkJCQkJInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAiZHJvcCBjb2x1bW4iLAorCQkJCQkJCQkJ CSJpZl9ub3RfZXhpc3RzIiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCQkJCQlzdWJjbWQtPm1pc3Np bmdfb2sgPyAiSUYgTk9UIEVYSVNUUyIgOiAiIiwKKwkJCQkJCQkJCQkiY29sdW1uIiwgT2JqVHlw ZVN0cmluZywgc3ViY21kLT5uYW1lKTsKKwkJCQl0bXBfb2JqMiA9IG5ld19vYmp0cmVlX1ZBKCJD QVNDQURFIiwgMSwKKwkJCQkJCQkJCQkgInByZXNlbnQiLCBPYmpUeXBlQm9vbCwgc3ViY21kLT5i ZWhhdmlvcik7CisJCQkJYXBwZW5kX29iamVjdF9vYmplY3QodG1wX29iaiwgIiV7Y2FzY2FkZX1z IiwgdG1wX29iajIpOworCisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVj dF9vYmplY3QodG1wX29iaikpOworCQkJCWJyZWFrOworCisJCQljYXNlIEFUX0FkZEluZGV4Ogor CQkJCXsKKwkJCQkJT2lkCQkJaWR4T2lkID0gc3ViLT5hZGRyZXNzLm9iamVjdElkOworCQkJCQlJ bmRleFN0bXQgICppc3RtdDsKKwkJCQkJUmVsYXRpb24JaWR4OworCQkJCQljb25zdCBjaGFyICpp ZHhuYW1lOworCQkJCQlPaWQJCQljb25zdHJPaWQ7CisKKwkJCQkJQXNzZXJ0KElzQShzdWJjbWQt PmRlZiwgSW5kZXhTdG10KSk7CisJCQkJCWlzdG10ID0gKEluZGV4U3RtdCAqKSBzdWJjbWQtPmRl ZjsKKworCQkJCQlpZiAoIWlzdG10LT5pc2NvbnN0cmFpbnQpCisJCQkJCQlicmVhazsKKworCQkJ CQlpZHggPSByZWxhdGlvbl9vcGVuKGlkeE9pZCwgQWNjZXNzU2hhcmVMb2NrKTsKKwkJCQkJaWR4 bmFtZSA9IFJlbGF0aW9uR2V0UmVsYXRpb25OYW1lKGlkeCk7CisKKwkJCQkJY29uc3RyT2lkID0g Z2V0X3JlbGF0aW9uX2NvbnN0cmFpbnRfb2lkKAorCQkJCQkJCQkJCQkJCQkJY21kLT5kLmFsdGVy VGFibGUub2JqZWN0SWQsIGlkeG5hbWUsIGZhbHNlKTsKKworCQkJCQl0bXBfb2JqID0gbmV3X29i anRyZWVfVkEoIkFERCBDT05TVFJBSU5UICV7bmFtZX1JICV7ZGVmaW5pdGlvbn1zIiwgMywKKwkJ CQkJCQkJCQkJInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAiYWRkIGNvbnN0cmFpbnQiLAorCQkJCQkJ CQkJCQkibmFtZSIsIE9ialR5cGVTdHJpbmcsIGlkeG5hbWUsCisJCQkJCQkJCQkJCSJkZWZpbml0 aW9uIiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCQkJCQkJcGdfZ2V0X2NvbnN0cmFpbnRkZWZfY29t bWFuZF9zaW1wbGUoY29uc3RyT2lkKSk7CisJCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMs IG5ld19vYmplY3Rfb2JqZWN0KHRtcF9vYmopKTsKKworCQkJCQlyZWxhdGlvbl9jbG9zZShpZHgs IEFjY2Vzc1NoYXJlTG9jayk7CisJCQkJfQorCQkJCWJyZWFrOworCisJCQljYXNlIEFUX0FkZENv bnN0cmFpbnQ6CisJCQkJeworCQkJCQkvKiBYWFggbmVlZCB0byBzZXQgdGhlICJyZWN1cnNlIiBi aXQgc29tZXdoZXJlPyAqLworCQkJCQlPaWQJCQljb25zdHJPaWQgPSBzdWItPmFkZHJlc3Mub2Jq ZWN0SWQ7CisJCQkJCWJvb2wJCWlzbnVsbDsKKwkJCQkJSGVhcFR1cGxlCXR1cDsKKwkJCQkJRGF0 dW0JCXZhbDsKKwkJCQkJQ29uc3RyYWludCAqY29uc3RyOworCisJCQkJCUFzc2VydChJc0Eoc3Vi Y21kLT5kZWYsIENvbnN0cmFpbnQpKTsKKwkJCQkJY29uc3RyID0gY2FzdE5vZGUoQ29uc3RyYWlu dCwgc3ViY21kLT5kZWYpOworCisJCQkJCWlmICghY29uc3RyLT5za2lwX3ZhbGlkYXRpb24pCisJ CQkJCXsKKwkJCQkJCXR1cCA9IFNlYXJjaFN5c0NhY2hlMShDT05TVFJPSUQsIE9iamVjdElkR2V0 RGF0dW0oY29uc3RyT2lkKSk7CisKKwkJCQkJCWlmIChIZWFwVHVwbGVJc1ZhbGlkKHR1cCkpCisJ CQkJCQl7CisJCQkJCQkJY2hhcgkgICAqY29uYmluOworCisJCQkJCQkJLyogRmV0Y2ggY29uc3Ry YWludCBleHByZXNzaW9uIGluIHBhcnNldHJlZSBmb3JtICovCisJCQkJCQkJdmFsID0gU3lzQ2Fj aGVHZXRBdHRyKENPTlNUUk9JRCwgdHVwLAorCQkJCQkJCQkJCQkJICBBbnVtX3BnX2NvbnN0cmFp bnRfY29uYmluLCAmaXNudWxsKTsKKworCQkJCQkJCWlmICghaXNudWxsKQorCQkJCQkJCXsKKwkJ CQkJCQkJY29uYmluID0gVGV4dERhdHVtR2V0Q1N0cmluZyh2YWwpOworCQkJCQkJCQlleHBycyA9 IGxhcHBlbmQoZXhwcnMsIHN0cmluZ1RvTm9kZShjb25iaW4pKTsKKwkJCQkJCQl9CisKKwkJCQkJ CQlSZWxlYXNlU3lzQ2FjaGUodHVwKTsKKwkJCQkJCX0KKwkJCQkJfQorCisJCQkJCXRtcF9vYmog PSBuZXdfb2JqdHJlZV9WQSgiQUREIENPTlNUUkFJTlQgJXtuYW1lfUkgJXtkZWZpbml0aW9ufXMi LCAzLAorCQkJCQkJCQkJCQkidHlwZSIsIE9ialR5cGVTdHJpbmcsICJhZGQgY29uc3RyYWludCIs CisJCQkJCQkJCQkJCSJuYW1lIiwgT2JqVHlwZVN0cmluZywgZ2V0X2NvbnN0cmFpbnRfbmFtZShj b25zdHJPaWQpLAorCQkJCQkJCQkJCQkiZGVmaW5pdGlvbiIsIE9ialR5cGVTdHJpbmcsCisJCQkJ CQkJCQkJCXBnX2dldF9jb25zdHJhaW50ZGVmX2NvbW1hbmRfc2ltcGxlKGNvbnN0ck9pZCkpOwor CQkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBfb2Jq KSk7CisJCQkJfQorCQkJCWJyZWFrOworCisJCQljYXNlIEFUX0FsdGVyQ29uc3RyYWludDoKKwkJ CQl7CisJCQkJCU9pZAkJCWNvbnN0ck9pZCA9IHN1Yi0+YWRkcmVzcy5vYmplY3RJZDsKKwkJCQkJ Q29uc3RyYWludCAqYyA9IChDb25zdHJhaW50ICopIHN1YmNtZC0+ZGVmOworCisJCQkJCS8qIElm IG5vIGNvbnN0cmFpbnQgd2FzIGFsdGVyZWQsIHNpbGVudGx5IHNraXAgaXQgKi8KKwkJCQkJaWYg KCFPaWRJc1ZhbGlkKGNvbnN0ck9pZCkpCisJCQkJCQlicmVhazsKKworCQkJCQlBc3NlcnQoSXNB KGMsIENvbnN0cmFpbnQpKTsKKwkJCQkJdG1wX29iaiA9IG5ld19vYmp0cmVlX1ZBKCJBTFRFUiBD T05TVFJBSU5UICV7bmFtZX1JICV7ZGVmZXJyYWJsZX1zICV7aW5pdF9kZWZlcnJlZH1zIiwgNCwK KwkJCQkJCQkJCQkJInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAiYWx0ZXIgY29uc3RyYWludCIsCisJ CQkJCQkJCQkJCSJuYW1lIiwgT2JqVHlwZVN0cmluZywgZ2V0X2NvbnN0cmFpbnRfbmFtZShjb25z dHJPaWQpLAorCQkJCQkJCQkJCQkiZGVmZXJyYWJsZSIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkJ CQkJCWMtPmRlZmVycmFibGUgPyAiREVGRVJSQUJMRSIgOiAiTk9UIERFRkVSUkFCTEUiLAorCQkJ CQkJCQkJCQkiaW5pdF9kZWZlcnJlZCIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkJCQkJCWMtPmlu aXRkZWZlcnJlZCA/ICJJTklUSUFMTFkgREVGRVJSRUQiIDogIklOSVRJQUxMWSBJTU1FRElBVEUi KTsKKworCQkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0 bXBfb2JqKSk7CisJCQkJfQorCQkJCWJyZWFrOworCisJCQljYXNlIEFUX1ZhbGlkYXRlQ29uc3Ry YWludDoKKwkJCQl0bXBfb2JqID0gbmV3X29ianRyZWVfVkEoIlZBTElEQVRFIENPTlNUUkFJTlQg JXtjb25zdHJhaW50fUkiLCAyLAorCQkJCQkJCQkJCSJ0eXBlIiwgT2JqVHlwZVN0cmluZywgInZh bGlkYXRlIGNvbnN0cmFpbnQiLAorCQkJCQkJCQkJCSJjb25zdHJhaW50IiwgT2JqVHlwZVN0cmlu Zywgc3ViY21kLT5uYW1lKTsKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2Jq ZWN0X29iamVjdCh0bXBfb2JqKSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfRHJvcENvbnN0 cmFpbnQ6CisJCQkJdG1wX29iaiA9IG5ld19vYmp0cmVlX1ZBKCJEUk9QIENPTlNUUkFJTlQgJXtj b25zdHJhaW50fUkgJXtpZl9ub3RfZXhpc3RzfXMiLCAzLAorCQkJCQkJCQkJCSJ0eXBlIiwgT2Jq VHlwZVN0cmluZywgImRyb3AgY29uc3RyYWludCIsCisJCQkJCQkJCQkJImlmX25vdF9leGlzdHMi LCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJCQkJCXN1YmNtZC0+bWlzc2luZ19vayA/ICJJRiBOT1Qg RVhJU1RTIiA6ICIiLAorCQkJCQkJCQkJCSJjb25zdHJhaW50IiwgT2JqVHlwZVN0cmluZywgc3Vi Y21kLT5uYW1lKTsKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29i amVjdCh0bXBfb2JqKSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfQWx0ZXJDb2x1bW5UeXBl OgorCQkJCXsKKwkJCQkJVHVwbGVEZXNjCXR1cGRlc2MgPSBSZWxhdGlvbkdldERlc2NyKHJlbCk7 CisJCQkJCUZvcm1fcGdfYXR0cmlidXRlIGF0dDsKKwkJCQkJQ29sdW1uRGVmICAqZGVmOworCisJ CQkJCWF0dCA9ICYodHVwZGVzYy0+YXR0cnNbc3ViLT5hZGRyZXNzLm9iamVjdFN1YklkIC0gMV0p OworCQkJCQlkZWYgPSAoQ29sdW1uRGVmICopIHN1YmNtZC0+ZGVmOworCQkJCQlBc3NlcnQoSXNB KGRlZiwgQ29sdW1uRGVmKSk7CisKKwkJCQkJLyoKKwkJCQkJICogVmVyYm9zZSBzeW50YXgKKwkJ CQkJICoKKwkJCQkJICogQ29tcG9zaXRlIHR5cGVzOiBBTFRFUiByZWx0eXBlICV7Y29sdW1ufUkg U0VUIERBVEEgVFlQRQorCQkJCQkgKiAle2RhdGF0eXBlfVQgJXtjb2xsYXRpb259cyBBVFRSSUJV VEUgJXtjYXNjYWRlfXMKKwkJCQkJICoKKwkJCQkJICogTm9ybWFsIHR5cGVzOiBBTFRFUiByZWx0 eXBlICV7Y29sdW1ufUkgU0VUIERBVEEgVFlQRQorCQkJCQkgKiAle2RhdGF0eXBlfVQgJXtjb2xs YXRpb259cyBDT0xVTU4gJXt1c2luZ31zCisJCQkJCSAqLworCQkJCQl0bXBfb2JqID0gbmV3X29i anRyZWVfVkEoIkFMVEVSICV7b2JqdHlwZX1zICV7Y29sdW1ufUkgU0VUIERBVEEgVFlQRSAle2Rh dGF0eXBlfVQiLCA0LAorCQkJCQkJCQkJCQkib2JqdHlwZSIsIE9ialR5cGVTdHJpbmcsCisJCQkJ CQkJCQkJCWlzdHlwZSA/ICJBVFRSSUJVVEUiIDogIkNPTFVNTiIsCisJCQkJCQkJCQkJCSJ0eXBl IiwgT2JqVHlwZVN0cmluZywgImFsdGVyIGNvbHVtbiB0eXBlIiwKKwkJCQkJCQkJCQkJImNvbHVt biIsIE9ialR5cGVTdHJpbmcsIHN1YmNtZC0+bmFtZSwKKwkJCQkJCQkJCQkJImRhdGF0eXBlIiwg T2JqVHlwZU9iamVjdCwKKwkJCQkJCQkJCQkJbmV3X29ianRyZWVfZm9yX3R5cGUoYXR0LT5hdHR0 eXBpZCwKKwkJCQkJCQkJCQkJCQkJCQkgYXR0LT5hdHR0eXBtb2QpKTsKKworCQkJCQkvKiBBZGQg YSBDT0xMQVRFIGNsYXVzZSwgaWYgbmVlZGVkICovCisJCQkJCXRtcF9vYmoyID0gbmV3X29ianRy ZWUoIkNPTExBVEUiKTsKKwkJCQkJaWYgKE9pZElzVmFsaWQoYXR0LT5hdHRjb2xsYXRpb24pKQor CQkJCQl7CisJCQkJCQlPYmpUcmVlICAgICpjb2xsbmFtZTsKKworCQkJCQkJY29sbG5hbWUgPSBu ZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoQ29sbGF0aW9uUmVsYXRpb25JZCwKKwkJCQkJCQkJ CQkJCQkJCSAgIGF0dC0+YXR0Y29sbGF0aW9uKTsKKwkJCQkJCWFwcGVuZF9vYmplY3Rfb2JqZWN0 KHRtcF9vYmoyLCAiJXtuYW1lfUQiLCBjb2xsbmFtZSk7CisJCQkJCX0KKwkJCQkJZWxzZQorCQkJ CQkJYXBwZW5kX25vdF9wcmVzZW50KHRtcF9vYmoyKTsKKwkJCQkJYXBwZW5kX29iamVjdF9vYmpl Y3QodG1wX29iaiwgIiV7Y29sbGF0aW9ufXMiLCB0bXBfb2JqMik7CisKKwkJCQkJLyogSWYgbm90 IGEgY29tcG9zaXRlIHR5cGUsIGFkZCB0aGUgVVNJTkcgY2xhdXNlICovCisJCQkJCWlmICghaXN0 eXBlKQorCQkJCQl7CisJCQkJCQkvKgorCQkJCQkJICogSWYgdGhlcmUncyBhIFVTSU5HIGNsYXVz ZSwgdHJhbnNmb3JtQWx0ZXJUYWJsZVN0bXQKKwkJCQkJCSAqIHJhbiBpdCB0aHJvdWdoIHRyYW5z Zm9ybUV4cHIgYW5kIHN0b3JlZCB0aGUKKwkJCQkJCSAqIHJlc3VsdGluZyBub2RlIGluIGNvb2tl ZF9kZWZhdWx0LCB3aGljaCB3ZSBjYW4gdXNlCisJCQkJCQkgKiBoZXJlLgorCQkJCQkJICovCisJ CQkJCQl0bXBfb2JqMiA9IG5ld19vYmp0cmVlKCJVU0lORyIpOworCQkJCQkJaWYgKGRlZi0+cmF3 X2RlZmF1bHQpCisJCQkJCQkJYXBwZW5kX3N0cmluZ19vYmplY3QodG1wX29iajIsICIle2V4cHJl c3Npb259cyIsCisJCQkJCQkJCQkJCQkgImV4cHJlc3Npb24iLAorCQkJCQkJCQkJCQkJIHN1Yi0+ dXNpbmdleHByKTsKKwkJCQkJCWVsc2UKKwkJCQkJCQlhcHBlbmRfbm90X3ByZXNlbnQodG1wX29i ajIpOworCQkJCQkJYXBwZW5kX29iamVjdF9vYmplY3QodG1wX29iaiwgIiV7dXNpbmd9cyIsIHRt cF9vYmoyKTsKKwkJCQkJfQorCisJCQkJCS8qIElmIGl0J3MgYSBjb21wb3NpdGUgdHlwZSwgYWRk IHRoZSBDQVNDQURFIGNsYXVzZSAqLworCQkJCQlpZiAoaXN0eXBlKQorCQkJCQl7CisJCQkJCQl0 bXBfb2JqMiA9IG5ld19vYmp0cmVlKCJDQVNDQURFIik7CisJCQkJCQlpZiAoc3ViY21kLT5iZWhh dmlvciAhPSBEUk9QX0NBU0NBREUpCisJCQkJCQkJYXBwZW5kX25vdF9wcmVzZW50KHRtcF9vYmoy KTsKKwkJCQkJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcF9vYmosICIle2Nhc2NhZGV9cyIsIHRt cF9vYmoyKTsKKwkJCQkJfQorCisJCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19v YmplY3Rfb2JqZWN0KHRtcF9vYmopKTsKKwkJCQl9CisJCQkJYnJlYWs7CisKKyNpZmRlZiBUT0RP TElTVAorCQkJY2FzZSBBVF9BbHRlckNvbHVtbkdlbmVyaWNPcHRpb25zOgorCQkJCXRtcF9vYmog PSBkZXBhcnNlX0Zkd09wdGlvbnMoKExpc3QgKikgc3ViY21kLT5kZWYsCisJCQkJCQkJCQkJCXN1 YmNtZC0+bmFtZSk7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9v YmplY3QodG1wX29iaikpOworCQkJCWJyZWFrOworI2VuZGlmCisJCQljYXNlIEFUX0NoYW5nZU93 bmVyOgorCQkJCXRtcF9vYmogPSBuZXdfb2JqdHJlZV9WQSgiT1dORVIgVE8gJXtvd25lcn1JIiwg MiwKKwkJCQkJCQkJCQkidHlwZSIsIE9ialR5cGVTdHJpbmcsICJjaGFuZ2Ugb3duZXIiLAorCQkJ CQkJCQkJCSJvd25lciIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkJCQkJZ2V0X3JvbGVzcGVjX25h bWUoc3ViY21kLT5uZXdvd25lcikpOworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5l d19vYmplY3Rfb2JqZWN0KHRtcF9vYmopKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9DbHVz dGVyT246CisJCQkJdG1wX29iaiA9IG5ld19vYmp0cmVlX1ZBKCJDTFVTVEVSIE9OICV7aW5kZXh9 SSIsIDIsCisJCQkJCQkJCQkJInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAiY2x1c3RlciBvbiIsCisJ CQkJCQkJCQkJImluZGV4IiwgT2JqVHlwZVN0cmluZywgc3ViY21kLT5uYW1lKTsKKwkJCQlzdWJj bWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBfb2JqKSk7CisJCQkJ YnJlYWs7CisKKwkJCWNhc2UgQVRfRHJvcENsdXN0ZXI6CisJCQkJdG1wX29iaiA9IG5ld19vYmp0 cmVlX1ZBKCJTRVQgV0lUSE9VVCBDTFVTVEVSIiwgMSwKKwkJCQkJCQkJCQkidHlwZSIsIE9ialR5 cGVTdHJpbmcsICJzZXQgd2l0aG91dCBjbHVzdGVyIik7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQo c3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1wX29iaikpOworCQkJCWJyZWFrOworCisJCQlj YXNlIEFUX1NldExvZ2dlZDoKKwkJCQl0bXBfb2JqID0gbmV3X29ianRyZWVfVkEoIlNFVCBMT0dH RUQiLCAxLAorCQkJCQkJCQkJCSJ0eXBlIiwgT2JqVHlwZVN0cmluZywgInNldCBsb2dnZWQiKTsK KwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBfb2Jq KSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfU2V0VW5Mb2dnZWQ6CisJCQkJdG1wX29iaiA9 IG5ld19vYmp0cmVlX1ZBKCJTRVQgVU5MT0dHRUQiLCAxLAorCQkJCQkJCQkJCSJ0eXBlIiwgT2Jq VHlwZVN0cmluZywgInNldCB1bmxvZ2dlZCIpOworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNt ZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcF9vYmopKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBB VF9Ecm9wT2lkczoKKwkJCQl0bXBfb2JqID0gbmV3X29ianRyZWVfVkEoIlNFVCBXSVRIT1VUIE9J RFMiLCAxLAorCQkJCQkJCQkJCSJ0eXBlIiwgT2JqVHlwZVN0cmluZywgInNldCB3aXRob3V0IG9p ZHMiKTsKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0 bXBfb2JqKSk7CisJCQkJYnJlYWs7CisJCQljYXNlIEFUX1NldEFjY2Vzc01ldGhvZDoKKwkJCQl0 bXBfb2JqID0gbmV3X29ianRyZWVfVkEoIlNFVCBBQ0NFU1MgTUVUSE9EICV7YWNjZXNzX21ldGhv ZH1JIiwgMiwKKwkJCQkJCQkJCQkidHlwZSIsIE9ialR5cGVTdHJpbmcsICJzZXQgYWNjZXNzIG1l dGhvZCIsCisJCQkJCQkJCQkJImFjY2Vzc19tZXRob2QiLCBPYmpUeXBlU3RyaW5nLCBzdWJjbWQt Pm5hbWUpOworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0 KHRtcF9vYmopKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgQVRfU2V0VGFibGVTcGFjZToKKwkJCQl0 bXBfb2JqID0gbmV3X29ianRyZWVfVkEoIlNFVCBUQUJMRVNQQUNFICV7dGFibGVzcGFjZX1JIiwg MiwKKwkJCQkJCQkJCQkidHlwZSIsIE9ialR5cGVTdHJpbmcsICJzZXQgdGFibGVzcGFjZSIsCisJ CQkJCQkJCQkJInRhYmxlc3BhY2UiLCBPYmpUeXBlU3RyaW5nLCBzdWJjbWQtPm5hbWUpOworCQkJ CXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcF9vYmopKTsK KwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9TZXRSZWxPcHRpb25zOgorCQkJY2FzZSBBVF9SZXNl dFJlbE9wdGlvbnM6CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9v YmplY3QoCisJCQkJCQkJCQkJCQkJCQkgZGVwYXJzZV9SZWxTZXRPcHRpb25zKHN1YmNtZCkpKTsK KwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9FbmFibGVUcmlnOgorCQkJCXRtcF9vYmogPSBuZXdf b2JqdHJlZV9WQSgiRU5BQkxFIFRSSUdHRVIgJXt0cmlnZ2VyfUkiLCAyLAorCQkJCQkJCQkJCSJ0 eXBlIiwgT2JqVHlwZVN0cmluZywgImVuYWJsZSB0cmlnZ2VyIiwKKwkJCQkJCQkJCQkidHJpZ2dl ciIsIE9ialR5cGVTdHJpbmcsIHN1YmNtZC0+bmFtZSk7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQo c3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1wX29iaikpOworCQkJCWJyZWFrOworCisJCQlj YXNlIEFUX0VuYWJsZUFsd2F5c1RyaWc6CisJCQkJdG1wX29iaiA9IG5ld19vYmp0cmVlX1ZBKCJF TkFCTEUgQUxXQVlTIFRSSUdHRVIgJXt0cmlnZ2VyfUkiLCAyLAorCQkJCQkJCQkJCSJ0eXBlIiwg T2JqVHlwZVN0cmluZywgImVuYWJsZSBhbHdheXMgdHJpZ2dlciIsCisJCQkJCQkJCQkJInRyaWdn ZXIiLCBPYmpUeXBlU3RyaW5nLCBzdWJjbWQtPm5hbWUpOworCQkJCXN1YmNtZHMgPSBsYXBwZW5k KHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcF9vYmopKTsKKwkJCQlicmVhazsKKworCQkJ Y2FzZSBBVF9FbmFibGVSZXBsaWNhVHJpZzoKKwkJCQl0bXBfb2JqID0gbmV3X29ianRyZWVfVkEo IkVOQUJMRSBSRVBMSUNBIFRSSUdHRVIgJXt0cmlnZ2VyfUkiLCAyLAorCQkJCQkJCQkJCSJ0eXBl IiwgT2JqVHlwZVN0cmluZywgImVuYWJsZSByZXBsaWNhIHRyaWdnZXIiLAorCQkJCQkJCQkJCSJ0 cmlnZ2VyIiwgT2JqVHlwZVN0cmluZywgc3ViY21kLT5uYW1lKTsKKwkJCQlzdWJjbWRzID0gbGFw cGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBfb2JqKSk7CisJCQkJYnJlYWs7CisK KwkJCWNhc2UgQVRfRGlzYWJsZVRyaWc6CisJCQkJdG1wX29iaiA9IG5ld19vYmp0cmVlX1ZBKCJE SVNBQkxFIFRSSUdHRVIgJXt0cmlnZ2VyfUkiLCAyLAorCQkJCQkJCQkJCSJ0eXBlIiwgT2JqVHlw ZVN0cmluZywgImRpc2FibGUgdHJpZ2dlciIsCisJCQkJCQkJCQkJInRyaWdnZXIiLCBPYmpUeXBl U3RyaW5nLCBzdWJjbWQtPm5hbWUpOworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5l d19vYmplY3Rfb2JqZWN0KHRtcF9vYmopKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9FbmFi bGVUcmlnQWxsOgorCQkJCXRtcF9vYmogPSBuZXdfb2JqdHJlZV9WQSgiRU5BQkxFIFRSSUdHRVIg QUxMIiwgMSwKKwkJCQkJCQkJCQkidHlwZSIsIE9ialR5cGVTdHJpbmcsICJlbmFibGUgdHJpZ2dl ciBhbGwiKTsKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVj dCh0bXBfb2JqKSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfRGlzYWJsZVRyaWdBbGw6CisJ CQkJdG1wX29iaiA9IG5ld19vYmp0cmVlX1ZBKCJESVNBQkxFIFRSSUdHRVIgQUxMIiwgMSwKKwkJ CQkJCQkJCQkidHlwZSIsIE9ialR5cGVTdHJpbmcsICJkaXNhYmxlIHRyaWdnZXIgYWxsIik7CisJ CQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1wX29iaikp OworCQkJCWJyZWFrOworCisJCQljYXNlIEFUX0VuYWJsZVRyaWdVc2VyOgorCQkJCXRtcF9vYmog PSBuZXdfb2JqdHJlZV9WQSgiRU5BQkxFIFRSSUdHRVIgVVNFUiIsIDEsCisJCQkJCQkJCQkJInR5 cGUiLCBPYmpUeXBlU3RyaW5nLCAiZW5hYmxlIHRyaWdnZXIgdXNlciIpOworCQkJCXN1YmNtZHMg PSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcF9vYmopKTsKKwkJCQlicmVh azsKKworCQkJY2FzZSBBVF9EaXNhYmxlVHJpZ1VzZXI6CisJCQkJdG1wX29iaiA9IG5ld19vYmp0 cmVlX1ZBKCJESVNBQkxFIFRSSUdHRVIgVVNFUiIsIDEsCisJCQkJCQkJCQkJInR5cGUiLCBPYmpU eXBlU3RyaW5nLCAiZGlzYWJsZSB0cmlnZ2VyIHVzZXIiKTsKKwkJCQlzdWJjbWRzID0gbGFwcGVu ZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBfb2JqKSk7CisJCQkJYnJlYWs7CisKKwkJ CWNhc2UgQVRfRW5hYmxlUnVsZToKKwkJCQl0bXBfb2JqID0gbmV3X29ianRyZWVfVkEoIkVOQUJM RSBSVUxFICV7cnVsZX1JIiwgMiwKKwkJCQkJCQkJCQkidHlwZSIsIE9ialR5cGVTdHJpbmcsICJl bmFibGUgcnVsZSIsCisJCQkJCQkJCQkJInJ1bGUiLCBPYmpUeXBlU3RyaW5nLCBzdWJjbWQtPm5h bWUpOworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRt cF9vYmopKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9FbmFibGVBbHdheXNSdWxlOgorCQkJ CXRtcF9vYmogPSBuZXdfb2JqdHJlZV9WQSgiRU5BQkxFIEFMV0FZUyBSVUxFICV7cnVsZX1JIiwg MiwKKwkJCQkJCQkJCQkidHlwZSIsIE9ialR5cGVTdHJpbmcsICJlbmFibGUgYWx3YXlzIHJ1bGUi LAorCQkJCQkJCQkJCSJydWxlIiwgT2JqVHlwZVN0cmluZywgc3ViY21kLT5uYW1lKTsKKwkJCQlz dWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBfb2JqKSk7CisJ CQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfRW5hYmxlUmVwbGljYVJ1bGU6CisJCQkJdG1wX29iaiA9 IG5ld19vYmp0cmVlX1ZBKCJFTkFCTEUgUkVQTElDQSBSVUxFICV7cnVsZX1JIiwgMiwKKwkJCQkJ CQkJCQkidHlwZSIsIE9ialR5cGVTdHJpbmcsICJlbmFibGUgcmVwbGljYSBydWxlIiwKKwkJCQkJ CQkJCQkicnVsZSIsIE9ialR5cGVTdHJpbmcsIHN1YmNtZC0+bmFtZSk7CisJCQkJc3ViY21kcyA9 IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1wX29iaikpOworCQkJCWJyZWFr OworCisJCQljYXNlIEFUX0Rpc2FibGVSdWxlOgorCQkJCXRtcF9vYmogPSBuZXdfb2JqdHJlZV9W QSgiRElTQUJMRSBSVUxFICV7cnVsZX1JIiwgMiwKKwkJCQkJCQkJCQkidHlwZSIsIE9ialR5cGVT dHJpbmcsICJkaXNhYmxlIHJ1bGUiLAorCQkJCQkJCQkJCSJydWxlIiwgT2JqVHlwZVN0cmluZywg c3ViY21kLT5uYW1lKTsKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0 X29iamVjdCh0bXBfb2JqKSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfQWRkSW5oZXJpdDoK KwkJCQl0bXBfb2JqID0gbmV3X29ianRyZWVfVkEoIklOSEVSSVQgJXtwYXJlbnR9RCIsIDIsCisJ CQkJCQkJCQkJInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAiaW5oZXJpdCIsCisJCQkJCQkJCQkJInBh cmVudCIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkJCQkJbmV3X29ianRyZWVfZm9yX3F1YWxuYW1l X2lkKFJlbGF0aW9uUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkJCQkJc3ViLT5hZGRyZXNzLm9i amVjdElkKSk7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmpl Y3QodG1wX29iaikpOworCQkJCWJyZWFrOworCisJCQljYXNlIEFUX0Ryb3BJbmhlcml0OgorCQkJ CXRtcF9vYmogPSBuZXdfb2JqdHJlZV9WQSgiTk8gSU5IRVJJVCAle3BhcmVudH1EIiwgMiwKKwkJ CQkJCQkJCQkidHlwZSIsIE9ialR5cGVTdHJpbmcsICJkcm9wIGluaGVyaXQiLAorCQkJCQkJCQkJ CSJwYXJlbnQiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJCQkJCW5ld19vYmp0cmVlX2Zvcl9xdWFs bmFtZV9pZChSZWxhdGlvblJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJCQkJCXN1Yi0+YWRkcmVz cy5vYmplY3RJZCkpOworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rf b2JqZWN0KHRtcF9vYmopKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9BZGRPZjoKKwkJCQl0 bXBfb2JqID0gbmV3X29ianRyZWVfVkEoIk9GICV7dHlwZV9vZn1UIiwgMiwKKwkJCQkJCQkJCQki dHlwZSIsIE9ialR5cGVTdHJpbmcsICJhZGQgb2YiLAorCQkJCQkJCQkJCSJ0eXBlX29mIiwgT2Jq VHlwZU9iamVjdCwKKwkJCQkJCQkJCQluZXdfb2JqdHJlZV9mb3JfdHlwZShzdWItPmFkZHJlc3Mu b2JqZWN0SWQsIC0xKSk7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVj dF9vYmplY3QodG1wX29iaikpOworCQkJCWJyZWFrOworCisJCQljYXNlIEFUX0Ryb3BPZjoKKwkJ CQl0bXBfb2JqID0gbmV3X29ianRyZWVfVkEoIk5PVCBPRiIsIDEsCisJCQkJCQkJCQkJInR5cGUi LCBPYmpUeXBlU3RyaW5nLCAibm90IG9mIik7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21k cywgbmV3X29iamVjdF9vYmplY3QodG1wX29iaikpOworCQkJCWJyZWFrOworCisJCQljYXNlIEFU X1JlcGxpY2FJZGVudGl0eToKKwkJCQl0bXBfb2JqID0gbmV3X29ianRyZWVfVkEoIlJFUExJQ0Eg SURFTlRJVFkiLCAxLAorCQkJCQkJCQkJCSJ0eXBlIiwgT2JqVHlwZVN0cmluZywgInJlcGxpY2Eg aWRlbnRpdHkiKTsKKwkJCQlzd2l0Y2ggKCgoUmVwbGljYUlkZW50aXR5U3RtdCAqKSBzdWJjbWQt PmRlZiktPmlkZW50aXR5X3R5cGUpCisJCQkJeworCQkJCQljYXNlIFJFUExJQ0FfSURFTlRJVFlf REVGQVVMVDoKKwkJCQkJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRtcF9vYmosICIle2lkZW50fXMi LCAiaWRlbnQiLAorCQkJCQkJCQkJCQkgIkRFRkFVTFQiKTsKKwkJCQkJCWJyZWFrOworCQkJCQlj YXNlIFJFUExJQ0FfSURFTlRJVFlfRlVMTDoKKwkJCQkJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRt cF9vYmosICIle2lkZW50fXMiLCAiaWRlbnQiLAorCQkJCQkJCQkJCQkgIkZVTEwiKTsKKwkJCQkJ CWJyZWFrOworCQkJCQljYXNlIFJFUExJQ0FfSURFTlRJVFlfTk9USElORzoKKwkJCQkJCWFwcGVu ZF9zdHJpbmdfb2JqZWN0KHRtcF9vYmosICIle2lkZW50fXMiLCAiaWRlbnQiLAorCQkJCQkJCQkJ CQkgIk5PVEhJTkciKTsKKwkJCQkJCWJyZWFrOworCQkJCQljYXNlIFJFUExJQ0FfSURFTlRJVFlf SU5ERVg6CisJCQkJCQl0bXBfb2JqMiA9IG5ld19vYmp0cmVlX1ZBKCJVU0lORyBJTkRFWCAle2lu ZGV4fUkiLCAxLAorCQkJCQkJCQkJCQkJICJpbmRleCIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkJ CQkJCQkgKChSZXBsaWNhSWRlbnRpdHlTdG10ICopIHN1YmNtZC0+ZGVmKS0+bmFtZSk7CisJCQkJ CQlhcHBlbmRfb2JqZWN0X29iamVjdCh0bXBfb2JqLCAiJXtpZGVudH1zIiwgdG1wX29iajIpOwor CQkJCQkJYnJlYWs7CisJCQkJfQorCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19v YmplY3Rfb2JqZWN0KHRtcF9vYmopKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9FbmFibGVS b3dTZWN1cml0eToKKwkJCQl0bXBfb2JqID0gbmV3X29ianRyZWVfVkEoIkVOQUJMRSBST1cgTEVW RUwgU0VDVVJJVFkiLCAxLAorCQkJCQkJCQkJCSJ0eXBlIiwgT2JqVHlwZVN0cmluZywgImVuYWJs ZSByb3cgc2VjdXJpdHkiKTsKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2Jq ZWN0X29iamVjdCh0bXBfb2JqKSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfRGlzYWJsZVJv d1NlY3VyaXR5OgorCQkJCXRtcF9vYmogPSBuZXdfb2JqdHJlZV9WQSgiRElTQUJMRSBST1cgTEVW RUwgU0VDVVJJVFkiLCAxLAorCQkJCQkJCQkJCSJ0eXBlIiwgT2JqVHlwZVN0cmluZywgImRpc2Fi bGUgcm93IHNlY3VyaXR5Iik7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29i amVjdF9vYmplY3QodG1wX29iaikpOworCQkJCWJyZWFrOworI2lmZGVmIFRPRE9MSVNUCisJCQlj YXNlIEFUX0dlbmVyaWNPcHRpb25zOgorCQkJCXRtcF9vYmogPSBkZXBhcnNlX0Zkd09wdGlvbnMo KExpc3QgKikgc3ViY21kLT5kZWYsIE5VTEwpOworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNt ZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcF9vYmopKTsKKwkJCQlicmVhazsKKyNlbmRpZgorCQkJ Y2FzZSBBVF9BdHRhY2hQYXJ0aXRpb246CisJCQkJdG1wX29iaiA9IG5ld19vYmp0cmVlX1ZBKCJB VFRBQ0ggUEFSVElUSU9OICV7cGFydGl0aW9uX2lkZW50aXR5fUQiLCAyLAorCQkJCQkJCQkJCSJ0 eXBlIiwgT2JqVHlwZVN0cmluZywgImF0dGFjaCBwYXJ0aXRpb24iLAorCQkJCQkJCQkJCSJwYXJ0 aXRpb25faWRlbnRpdHkiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJCQkJCW5ld19vYmp0cmVlX2Zv cl9xdWFsbmFtZV9pZChSZWxhdGlvblJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJCQkJCXN1Yi0+ YWRkcmVzcy5vYmplY3RJZCkpOworCisJCQkJaWYgKHJlbC0+cmRfcmVsLT5yZWxraW5kID09IFJF TEtJTkRfUEFSVElUSU9ORURfVEFCTEUpCisJCQkJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRtcF9v YmosICIle3BhcnRpdGlvbl9ib3VuZH1zIiwKKwkJCQkJCQkJCQkgInBhcnRpdGlvbl9ib3VuZCIs CisJCQkJCQkJCQkJIFJlbGF0aW9uR2V0UGFydGl0aW9uQm91bmQoc3ViLT5hZGRyZXNzLm9iamVj dElkKSk7CisKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVj dCh0bXBfb2JqKSk7CisJCQkJYnJlYWs7CisJCQljYXNlIEFUX0RldGFjaFBhcnRpdGlvbjoKKwkJ CXsKKwkJCQlQYXJ0aXRpb25DbWQgKmNtZDsKKworCQkJCUFzc2VydChJc0Eoc3ViY21kLT5kZWYs IFBhcnRpdGlvbkNtZCkpOworCQkJCWNtZCA9IChQYXJ0aXRpb25DbWQgKikgc3ViY21kLT5kZWY7 CisKKwkJCQl0bXBfb2JqID0gbmV3X29ianRyZWVfVkEoIkRFVEFDSCBQQVJUSVRJT04gJXtwYXJ0 aXRpb25faWRlbnRpdHl9RCAle2NvbmN1cnJlbnR9cyIsIDMsCisJCQkJCQkJCQkJInR5cGUiLCBP YmpUeXBlU3RyaW5nLAorCQkJCQkJCQkJCSJkZXRhY2ggcGFydGl0aW9uIiwKKwkJCQkJCQkJCQki cGFydGl0aW9uX2lkZW50aXR5IiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCQkJCQluZXdfb2JqdHJl ZV9mb3JfcXVhbG5hbWVfaWQoUmVsYXRpb25SZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCQkJCQlz dWItPmFkZHJlc3Mub2JqZWN0SWQpLAorCQkJCQkJCQkJCWNtZC0+Y29uY3VycmVudCA/ICJDT05D VVJSRU5UTFkiIDogIiIpOworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmpl Y3Rfb2JqZWN0KHRtcF9vYmopKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJCWNhc2UgQVRfRGV0YWNo UGFydGl0aW9uRmluYWxpemU6CisJCQkJdG1wX29iaiA9IG5ld19vYmp0cmVlX1ZBKCJERVRBQ0gg UEFSVElUSU9OICV7cGFydGl0aW9uX2lkZW50aXR5fUQgRklOQUxJWkUiLCAyLAorCQkJCQkJCQkJ CSJ0eXBlIiwgT2JqVHlwZVN0cmluZywgImRldGFjaCBwYXJ0aXRpb24gZmluYWxpemUiLAorCQkJ CQkJCQkJCSJwYXJ0aXRpb25faWRlbnRpdHkiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJCQkJCW5l d19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChSZWxhdGlvblJlbGF0aW9uSWQsCisJCQkJCQkJCQkJ CQkJCQkJCXN1Yi0+YWRkcmVzcy5vYmplY3RJZCkpOworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1 YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcF9vYmopKTsKKwkJCQlicmVhazsKKwkJCWNhc2Ug QVRfQWRkSWRlbnRpdHk6CisJCQkJeworCQkJCQlBdHRyTnVtYmVyCWF0dG51bTsKKwkJCQkJT2lk CQkJc2VxX3JlbGlkOworCQkJCQlPYmpUcmVlICAgICpzZXFkZWY7CisJCQkJCUNvbHVtbkRlZiAg KmNvbGRlZiA9IChDb2x1bW5EZWYgKikgc3ViY21kLT5kZWY7CisKKwkJCQkJdG1wX29iaiA9IG5l d19vYmp0cmVlX1ZBKCJBTFRFUiBDT0xVTU4gJXtjb2x1bW59SSIsIDIsCisJCQkJCQkJCQkJCSJ0 eXBlIiwgT2JqVHlwZVN0cmluZywgImFkZCBpZGVudGl0eSIsCisJCQkJCQkJCQkJCSJjb2x1bW4i LCBPYmpUeXBlU3RyaW5nLCBzdWJjbWQtPm5hbWUpOworCisJCQkJCWF0dG51bSA9IGdldF9hdHRu dW0oUmVsYXRpb25HZXRSZWxpZChyZWwpLCBzdWJjbWQtPm5hbWUpOworCQkJCQlzZXFfcmVsaWQg PSBnZXRJZGVudGl0eVNlcXVlbmNlKFJlbGF0aW9uR2V0UmVsaWQocmVsKSwgYXR0bnVtLCB0cnVl KTsKKworCQkJCQlpZiAoT2lkSXNWYWxpZChzZXFfcmVsaWQpKQorCQkJCQl7CisJCQkJCQlzZXFk ZWYgPSBkZXBhcnNlX0NvbHVtbklkZW50aXR5KHNlcV9yZWxpZCwgY29sZGVmLT5pZGVudGl0eSwg ZmFsc2UpOworCQkJCQkJYXBwZW5kX29iamVjdF9vYmplY3QodG1wX29iaiwgIkFERCAle2lkZW50 aXR5X2NvbHVtbn1zIiwgc2VxZGVmKTsKKwkJCQkJfQorCisJCQkJCXN1YmNtZHMgPSBsYXBwZW5k KHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcF9vYmopKTsKKwkJCQl9CisJCQkJYnJlYWs7 CisJCQljYXNlIEFUX1NldElkZW50aXR5OgorCQkJCXsKKwkJCQkJRGVmRWxlbSAgICAqZGVmZWw7 CisJCQkJCWNoYXIJCWlkZW50aXR5ID0gMDsKKwkJCQkJT2JqVHJlZSAgICAqc2VxZGVmOworCQkJ CQlBdHRyTnVtYmVyCWF0dG51bTsKKwkJCQkJT2lkCQkJc2VxX3JlbGlkOworCisKKwkJCQkJdG1w X29iaiA9IG5ld19vYmp0cmVlX1ZBKCJBTFRFUiBDT0xVTU4gJXtjb2x1bW59SSIsIDIsCisJCQkJ CQkJCQkJCSJ0eXBlIiwgT2JqVHlwZVN0cmluZywgInNldCBpZGVudGl0eSIsCisJCQkJCQkJCQkJ CSJjb2x1bW4iLCBPYmpUeXBlU3RyaW5nLCBzdWJjbWQtPm5hbWUpOworCisJCQkJCWlmIChzdWJj bWQtPmRlZikKKwkJCQkJeworCQkJCQkJTGlzdAkgICAqZGVmID0gKExpc3QgKikgc3ViY21kLT5k ZWY7CisKKwkJCQkJCUFzc2VydChJc0Eoc3ViY21kLT5kZWYsIExpc3QpKTsKKworCQkJCQkJZGVm ZWwgPSBsaW5pdGlhbF9ub2RlKERlZkVsZW0sIGRlZik7CisJCQkJCQlpZGVudGl0eSA9IGRlZkdl dEludDMyKGRlZmVsKTsKKwkJCQkJfQorCisJCQkJCWF0dG51bSA9IGdldF9hdHRudW0oUmVsYXRp b25HZXRSZWxpZChyZWwpLCBzdWJjbWQtPm5hbWUpOworCQkJCQlzZXFfcmVsaWQgPSBnZXRJZGVu dGl0eVNlcXVlbmNlKFJlbGF0aW9uR2V0UmVsaWQocmVsKSwgYXR0bnVtLCB0cnVlKTsKKworCQkJ CQlpZiAoT2lkSXNWYWxpZChzZXFfcmVsaWQpKQorCQkJCQl7CisJCQkJCQlzZXFkZWYgPSBkZXBh cnNlX0NvbHVtbklkZW50aXR5KHNlcV9yZWxpZCwgaWRlbnRpdHksIHRydWUpOworCQkJCQkJYXBw ZW5kX29iamVjdF9vYmplY3QodG1wX29iaiwgIiV7ZGVmaW5pdGlvbn1zIiwgc2VxZGVmKTsKKwkJ CQkJfQorCisJCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0 KHRtcF9vYmopKTsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJY2FzZSBBVF9Ecm9wSWRlbnRpdHk6 CisJCQkJdG1wX29iaiA9IG5ld19vYmp0cmVlX1ZBKCJBTFRFUiBDT0xVTU4gJXtjb2x1bW59SSBE Uk9QIElERU5USVRZIiwgMiwKKwkJCQkJCQkJCQkidHlwZSIsIE9ialR5cGVTdHJpbmcsICJkcm9w IGlkZW50aXR5IiwKKwkJCQkJCQkJCQkiY29sdW1uIiwgT2JqVHlwZVN0cmluZywgc3ViY21kLT5u YW1lKTsKKworCQkJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRtcF9vYmosICIle2lmX2V4aXN0c31z IiwKKwkJCQkJCQkJCSAiaWZfZXhpc3RzIiwKKwkJCQkJCQkJCSBzdWJjbWQtPm1pc3Npbmdfb2sg PyAiSUYgRVhJU1RTIiA6ICIiKTsKKworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5l d19vYmplY3Rfb2JqZWN0KHRtcF9vYmopKTsKKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJ ZWxvZyhXQVJOSU5HLCAidW5zdXBwb3J0ZWQgYWx0ZXIgdGFibGUgc3VidHlwZSAlZCIsCisJCQkJ CSBzdWJjbWQtPnN1YnR5cGUpOworCQkJCWJyZWFrOworCQl9CisKKwkJLyoKKwkJICogV2UgZG9u J3Qgc3VwcG9ydCByZXBsaWNhdGluZyBBTFRFUiBUQUJMRSB3aGljaCBjb250YWlucyB2b2xhdGls ZQorCQkgKiBmdW5jdGlvbnMgYmVjYXVzZSBJdCdzIHBvc3NpYmxlIHRoZSBmdW5jdGlvbnMgY29u dGFpbiBEREwvRE1MIGluCisJCSAqIHdoaWNoIGNhc2UgdGhlc2Ugb3BlcmF0aW9ucyB3aWxsIGJl IGV4ZWN1dGVkIHR3aWNlIGFuZCBjYXVzZQorCQkgKiBkdXBsaWNhdGUgZGF0YS4gSW4gYWRkaXRp b24sIHdlIGRvbid0IGtub3cgd2hldGhlciB0aGUgdGFibGVzIGJlaW5nCisJCSAqIGFjY2Vzc2Vk IGJ5IHRoZXNlIERETC9ETUwgYXJlIHB1Ymxpc2hlZCBvciBub3QuIFNvIGJsaW5kbHkgYWxsb3dp bmcKKwkJICogc3VjaCBmdW5jdGlvbnMgY2FuIGFsbG93IHVuaW50ZW5kZWQgY2xhdXNlcyBsaWtl IHRoZSB0YWJsZXMKKwkJICogYWNjZXNzZWQgaW4gdGhvc2UgZnVuY3Rpb25zIG1heSBub3QgZXZl biBleGlzdCBvbiB0aGUgc3Vic2NyaWJlci4KKwkJICovCisJCWlmIChjb250YWluX3ZvbGF0aWxl X2Z1bmN0aW9ucygoTm9kZSAqKSBleHBycykpCisJCQllbG9nKEVSUk9SLCAiQUxURVIgVEFCTEUg Y29tbWFuZCB1c2luZyB2b2xhdGlsZSBmdW5jdGlvbiBjYW5ub3QgYmUgcmVwbGljYXRlZCIpOwor CisJCS8qCisJCSAqIENsZWFuIHRoZSBsaXN0IGFzIHdlIGFscmVhZHkgY29uZmlybWVkIHRoZXJl IGlzIG5vIHZvbGF0aWxlCisJCSAqIGZ1bmN0aW9uLgorCQkgKi8KKwkJbGlzdF9mcmVlKGV4cHJz KTsKKwkJZXhwcnMgPSBOSUw7CisJfQorCisJdGFibGVfY2xvc2UocmVsLCBBY2Nlc3NTaGFyZUxv Y2spOworCisJaWYgKGxpc3RfbGVuZ3RoKHN1YmNtZHMpID09IDApCisJCXJldHVybiBOVUxMOwor CisJYXBwZW5kX2FycmF5X29iamVjdChyZXQsICIle3N1YmNtZHM6LCB9cyIsIHN1YmNtZHMpOwor CisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIERlcGFyc2UgYSBDb2x1bW5EZWYgbm9kZSB3aXRo aW4gYSByZWd1bGFyIChub24tdHlwZWQpIHRhYmxlIGNyZWF0aW9uLgorICoKKyAqIE5PVCBOVUxM IGNvbnN0cmFpbnRzIGluIHRoZSBjb2x1bW4gZGVmaW5pdGlvbiBhcmUgZW1pdHRlZCBkaXJlY3Rs eSBpbiB0aGUKKyAqIGNvbHVtbiBkZWZpbml0aW9uIGJ5IHRoaXMgcm91dGluZTsgb3RoZXIgY29u c3RyYWludHMgbXVzdCBiZSBlbWl0dGVkCisgKiBlbHNld2hlcmUgKHRoZSBpbmZvIGluIHRoZSBw YXJzZSBub2RlIGlzIGluY29tcGxldGUgYW55d2F5KS4KKyAqCisgKiBWZXJib3NlIHN5bnRheAor ICogJXtuYW1lfUkgJXtjb2x0eXBlfVQgJXtjb21wcmVzc2lvbn1zICV7ZGVmYXVsdH1zICV7bm90 X251bGx9cyAle2NvbGxhdGlvbn1zCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfQ29s dW1uRGVmKFJlbGF0aW9uIHJlbGF0aW9uLCBMaXN0ICpkcGNvbnRleHQsIGJvb2wgY29tcG9zaXRl LAorCQkJCSAgQ29sdW1uRGVmICpjb2xkZWYsIGJvb2wgaXNfYWx0ZXIsIExpc3QgKipleHBycykK K3sKKwlPYmpUcmVlICAgICpyZXQ7CisJT2JqVHJlZSAgICAqdG1wX29iajsKKwlPaWQJCQlyZWxp ZCA9IFJlbGF0aW9uR2V0UmVsaWQocmVsYXRpb24pOworCUhlYXBUdXBsZQlhdHRyVHVwOworCUZv cm1fcGdfYXR0cmlidXRlIGF0dHJGb3JtOworCU9pZAkJCXR5cGlkOworCWludDMyCQl0eXBtb2Q7 CisJT2lkCQkJdHlwY29sbGF0aW9uOworCWJvb2wJCXNhd19ub3RudWxsOworCUxpc3RDZWxsICAg KmNlbGw7CisKKwkvKgorCSAqIEluaGVyaXRlZCBjb2x1bW5zIHdpdGhvdXQgbG9jYWwgZGVmaW5p dGlvbnMgbXVzdCBub3QgYmUgZW1pdHRlZC4KKwkgKgorCSAqIFhYWCBtYXliZSBpdCBpcyB1c2Vm dWwgdG8gaGF2ZSB0aGVtIHdpdGggInByZXNlbnQgPSBmYWxzZSIgb3Igc29tZQorCSAqIHN1Y2g/ CisJICovCisJaWYgKCFjb2xkZWYtPmlzX2xvY2FsKQorCQlyZXR1cm4gTlVMTDsKKworCWF0dHJU dXAgPSBTZWFyY2hTeXNDYWNoZUF0dE5hbWUocmVsaWQsIGNvbGRlZi0+Y29sbmFtZSk7CisJaWYg KCFIZWFwVHVwbGVJc1ZhbGlkKGF0dHJUdXApKQorCQllbG9nKEVSUk9SLCAiY291bGQgbm90IGZp bmQgY2FjaGUgZW50cnkgZm9yIGNvbHVtbiBcIiVzXCIgb2YgcmVsYXRpb24gJXUiLAorCQkJIGNv bGRlZi0+Y29sbmFtZSwgcmVsaWQpOworCWF0dHJGb3JtID0gKEZvcm1fcGdfYXR0cmlidXRlKSBH RVRTVFJVQ1QoYXR0clR1cCk7CisKKwlnZXRfYXR0dHlwZXR5cG1vZGNvbGwocmVsaWQsIGF0dHJG b3JtLT5hdHRudW0sCisJCQkJCQkgICZ0eXBpZCwgJnR5cG1vZCwgJnR5cGNvbGxhdGlvbik7CisK KwlyZXQgPSBuZXdfb2JqdHJlZV9WQSgiJXtuYW1lfUkgJXtjb2x0eXBlfVQiLCAzLAorCQkJCQkJ ICJ0eXBlIiwgT2JqVHlwZVN0cmluZywgImNvbHVtbiIsCisJCQkJCQkgIm5hbWUiLCBPYmpUeXBl U3RyaW5nLCBjb2xkZWYtPmNvbG5hbWUsCisJCQkJCQkgImNvbHR5cGUiLCBPYmpUeXBlT2JqZWN0 LAorCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl90eXBlKHR5cGlkLCB0eXBtb2QpKTsKKworCWlmICgh Y29tcG9zaXRlKQorCQlhcHBlbmRfc3RyaW5nX29iamVjdChyZXQsICJTVE9SQUdFICV7Y29sc3Rv cmFnZX1zIiwgImNvbHN0b3JhZ2UiLAorCQkJCQkJCSBnZXRfdHlwZV9zdG9yYWdlKGF0dHJGb3Jt LT5hdHRzdG9yYWdlKSk7CisKKwkvKiBVU0lORyBjbGF1c2UgKi8KKwl0bXBfb2JqID0gbmV3X29i anRyZWUoIkNPTVBSRVNTSU9OIik7CisJaWYgKGNvbGRlZi0+Y29tcHJlc3Npb24pCisJCWFwcGVu ZF9zdHJpbmdfb2JqZWN0KHRtcF9vYmosICIle2NvbXByZXNzaW9uX21ldGhvZH1JIiwKKwkJCQkJ CQkgImNvbXByZXNzaW9uX21ldGhvZCIsIGNvbGRlZi0+Y29tcHJlc3Npb24pOworCWVsc2UKKwl7 CisJCWFwcGVuZF9udWxsX29iamVjdCh0bXBfb2JqLCAiJXtjb21wcmVzc2lvbl9tZXRob2R9SSIp OworCQlhcHBlbmRfbm90X3ByZXNlbnQodG1wX29iaik7CisJfQorCWFwcGVuZF9vYmplY3Rfb2Jq ZWN0KHJldCwgIiV7Y29tcHJlc3Npb259cyIsIHRtcF9vYmopOworCisJdG1wX29iaiA9IG5ld19v Ymp0cmVlKCJDT0xMQVRFIik7CisJaWYgKE9pZElzVmFsaWQodHlwY29sbGF0aW9uKSkKKwkJYXBw ZW5kX29iamVjdF9vYmplY3QodG1wX29iaiwgIiV7bmFtZX1EIiwKKwkJCQkJCQkgbmV3X29ianRy ZWVfZm9yX3F1YWxuYW1lX2lkKENvbGxhdGlvblJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJCSB0 eXBjb2xsYXRpb24pKTsKKwllbHNlCisJCWFwcGVuZF9ub3RfcHJlc2VudCh0bXBfb2JqKTsKKwlh cHBlbmRfb2JqZWN0X29iamVjdChyZXQsICIle2NvbGxhdGlvbn1zIiwgdG1wX29iaik7CisKKwlp ZiAoIWNvbXBvc2l0ZSkKKwl7CisJCU9pZAkJCXNlcXJlbGlkID0gSW52YWxpZE9pZDsKKworCQkv KgorCQkgKiBFbWl0IGEgTk9UIE5VTEwgZGVjbGFyYXRpb24gaWYgbmVjZXNzYXJ5LiAgTm90ZSB0 aGF0IHdlIGNhbm5vdAorCQkgKiB0cnVzdCBwZ19hdHRyaWJ1dGUuYXR0bm90bnVsbCBoZXJlLCBi ZWNhdXNlIHRoYXQgYml0IGlzIGFsc28gc2V0CisJCSAqIHdoZW4gcHJpbWFyeSBrZXlzIGFyZSBz cGVjaWZpZWQ7IHdlIG11c3Qgbm90IGVtaXQgYSBOT1QgTlVMTAorCQkgKiBjb25zdHJhaW50IGlu IHRoYXQgY2FzZSwgdW5sZXNzIGV4cGxpY2l0bHkgc3BlY2lmaWVkLiAgVGhlcmVmb3JlLAorCQkg KiB3ZSBzY2FuIHRoZSBsaXN0IG9mIGNvbnN0cmFpbnRzIGF0dGFjaGVkIHRvIHRoaXMgY29sdW1u IHRvCisJCSAqIGRldGVybWluZSB3aGV0aGVyIHdlIG5lZWQgdG8gZW1pdCBhbnl0aGluZy4gKEZv cnR1bmF0ZWx5LCBOT1QgTlVMTAorCQkgKiBjb25zdHJhaW50cyBjYW5ub3QgYmUgdGFibGUgY29u c3RyYWludHMuKQorCQkgKgorCQkgKiBJbiB0aGUgQUxURVIgVEFCTEUgY2FzZXMsIHdlIGFsc28g YWRkIGEgTk9UIE5VTEwgaWYgdGhlIGNvbERlZiBpcworCQkgKiBtYXJrZWQgaXNfbm90X251bGwu CisJCSAqLworCQlzYXdfbm90bnVsbCA9IGZhbHNlOworCQlmb3JlYWNoKGNlbGwsIGNvbGRlZi0+ Y29uc3RyYWludHMpCisJCXsKKwkJCUNvbnN0cmFpbnQgKmNvbnN0ciA9IChDb25zdHJhaW50ICop IGxmaXJzdChjZWxsKTsKKworCQkJaWYgKGNvbnN0ci0+Y29udHlwZSA9PSBDT05TVFJfTk9UTlVM TCkKKwkJCXsKKwkJCQlzYXdfbm90bnVsbCA9IHRydWU7CisJCQkJYnJlYWs7CisJCQl9CisJCX0K KworCQlpZiAoaXNfYWx0ZXIgJiYgY29sZGVmLT5pc19ub3RfbnVsbCkKKwkJCXNhd19ub3RudWxs ID0gdHJ1ZTsKKworCQlhcHBlbmRfc3RyaW5nX29iamVjdChyZXQsICIle25vdF9udWxsfXMiLCAi bm90X251bGwiLAorCQkJCQkJCSBzYXdfbm90bnVsbCA/ICJOT1QgTlVMTCIgOiAiIik7CisKKwkJ dG1wX29iaiA9IG5ld19vYmp0cmVlKCJERUZBVUxUIik7CisJCWlmIChhdHRyRm9ybS0+YXR0aGFz ZGVmICYmCisJCQljb2xkZWYtPmdlbmVyYXRlZCAhPSBBVFRSSUJVVEVfR0VORVJBVEVEX1NUT1JF RCkKKwkJeworCQkJY2hhcgkgICAqZGVmc3RyOworCisJCQlkZWZzdHIgPSBSZWxhdGlvbkdldENv bHVtbkRlZmF1bHQocmVsYXRpb24sIGF0dHJGb3JtLT5hdHRudW0sCisJCQkJCQkJCQkJCSAgZHBj b250ZXh0LCBleHBycyk7CisKKwkJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRtcF9vYmosICIle2Rl ZmF1bHR9cyIsICJkZWZhdWx0IiwgZGVmc3RyKTsKKwkJfQorCQllbHNlCisJCQlhcHBlbmRfbm90 X3ByZXNlbnQodG1wX29iaik7CisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHJldCwgIiV7ZGVmYXVs dH1zIiwgdG1wX29iaik7CisKKwkJLyogSURFTlRJVFkgQ09MVU1OICovCisJCWlmIChjb2xkZWYt PmlkZW50aXR5KQorCQl7CisJCQlPaWQJCQlhdHRubyA9IGdldF9hdHRudW0ocmVsaWQsIGNvbGRl Zi0+Y29sbmFtZSk7CisKKwkJCXNlcXJlbGlkID0gZ2V0SWRlbnRpdHlTZXF1ZW5jZShyZWxpZCwg YXR0bm8sIGZhbHNlKTsKKwkJfQorCisJCWlmIChPaWRJc1ZhbGlkKHNlcXJlbGlkKSkKKwkJewor CQkJdG1wX29iaiA9IGRlcGFyc2VfQ29sdW1uSWRlbnRpdHkoc2VxcmVsaWQsIGNvbGRlZi0+aWRl bnRpdHksIGlzX2FsdGVyKTsKKwkJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHJldCwgIiV7aWRlbnRp dHlfY29sdW1ufXMiLCB0bXBfb2JqKTsKKwkJfQorCisJCS8qIEdFTkVSQVRFRCBDT0xVTU4gRVhQ UkVTU0lPTiAqLworCQl0bXBfb2JqID0gbmV3X29ianRyZWUoIkdFTkVSQVRFRCBBTFdBWVMgQVMi KTsKKwkJaWYgKGNvbGRlZi0+Z2VuZXJhdGVkID09IEFUVFJJQlVURV9HRU5FUkFURURfU1RPUkVE KQorCQl7CisJCQljaGFyCSAgICpkZWZzdHI7CisKKwkJCWRlZnN0ciA9IFJlbGF0aW9uR2V0Q29s dW1uRGVmYXVsdChyZWxhdGlvbiwgYXR0ckZvcm0tPmF0dG51bSwKKwkJCQkJCQkJCQkJICBkcGNv bnRleHQsIGV4cHJzKTsKKwkJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRtcF9vYmosICIle2dlbmVy YXRpb25fZXhwcn1zIFNUT1JFRCIsCisJCQkJCQkJCSAiZ2VuZXJhdGlvbl9leHByIiwgZGVmc3Ry KTsKKwkJfQorCQllbHNlCisJCQlhcHBlbmRfbm90X3ByZXNlbnQodG1wX29iaik7CisKKwkJYXBw ZW5kX29iamVjdF9vYmplY3QocmV0LCAiJXtnZW5lcmF0ZWRfY29sdW1ufXMiLCB0bXBfb2JqKTsK Kwl9CisKKwlSZWxlYXNlU3lzQ2FjaGUoYXR0clR1cCk7CisKKwlyZXR1cm4gcmV0OworfQorCisv KgorICogRGVwYXJzZSBhIENvbHVtbkRlZiBub2RlIHdpdGhpbiBhIHR5cGVkIHRhYmxlIGNyZWF0 aW9uLglUaGlzIGlzIHNpbXBsZXIKKyAqIHRoYW4gdGhlIHJlZ3VsYXIgY2FzZSwgYmVjYXVzZSB3 ZSBkb24ndCBoYXZlIHRvIGVtaXQgdGhlIHR5cGUgZGVjbGFyYXRpb24sCisgKiBjb2xsYXRpb24s IG9yIGRlZmF1bHQuICBIZXJlIHdlIG9ubHkgcmV0dXJuIHNvbWV0aGluZyBpZiB0aGUgY29sdW1u IGlzIGJlaW5nCisgKiBkZWNsYXJlZCBOT1QgTlVMTC4KKyAqCisgKiBBcyBpbiBkZXBhcnNlX0Nv bHVtbkRlZiwgYW55IG90aGVyIGNvbnN0cmFpbnQgaXMgcHJvY2Vzc2VkIGVsc2V3aGVyZS4KKyAq CisgKiBWZXJib3NlIHN5bnRheAorICogJXtuYW1lfUkgV0lUSCBPUFRJT05TICV7ZGVmYXVsdH1z ICV7bm90X251bGx9cy4KKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9Db2x1bW5EZWZf dHlwZWQoUmVsYXRpb24gcmVsYXRpb24sIExpc3QgKmRwY29udGV4dCwgQ29sdW1uRGVmICpjb2xk ZWYpCit7CisJT2JqVHJlZSAgICAqcmV0ID0gTlVMTDsKKwlPYmpUcmVlICAgICp0bXBfb2JqOwor CU9pZAkJCXJlbGlkID0gUmVsYXRpb25HZXRSZWxpZChyZWxhdGlvbik7CisJSGVhcFR1cGxlCWF0 dHJUdXA7CisJRm9ybV9wZ19hdHRyaWJ1dGUgYXR0ckZvcm07CisJT2lkCQkJdHlwaWQ7CisJaW50 MzIJCXR5cG1vZDsKKwlPaWQJCQl0eXBjb2xsYXRpb247CisJYm9vbAkJc2F3X25vdG51bGw7CisJ TGlzdENlbGwgICAqY2VsbDsKKworCWF0dHJUdXAgPSBTZWFyY2hTeXNDYWNoZUF0dE5hbWUocmVs aWQsIGNvbGRlZi0+Y29sbmFtZSk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKGF0dHJUdXApKQor CQllbG9nKEVSUk9SLCAiY291bGQgbm90IGZpbmQgY2FjaGUgZW50cnkgZm9yIGNvbHVtbiBcIiVz XCIgb2YgcmVsYXRpb24gJXUiLAorCQkJIGNvbGRlZi0+Y29sbmFtZSwgcmVsaWQpOworCWF0dHJG b3JtID0gKEZvcm1fcGdfYXR0cmlidXRlKSBHRVRTVFJVQ1QoYXR0clR1cCk7CisKKwlnZXRfYXR0 dHlwZXR5cG1vZGNvbGwocmVsaWQsIGF0dHJGb3JtLT5hdHRudW0sCisJCQkJCQkgICZ0eXBpZCwg JnR5cG1vZCwgJnR5cGNvbGxhdGlvbik7CisKKwkvKgorCSAqIFNlYXJjaCBmb3IgYSBOT1QgTlVM TCBkZWNsYXJhdGlvbi4gIEFzIGluIGRlcGFyc2VfQ29sdW1uRGVmLCB3ZSByZWx5IG9uCisJICog ZmluZGluZyBhIGNvbnN0cmFpbnQgb24gdGhlIGNvbHVtbiByYXRoZXIgdGhhbiBjb2xkZWYtPmlz X25vdF9udWxsLgorCSAqIChUaGlzIHJvdXRpbmUgaXMgbmV2ZXIgdXNlZCBmb3IgQUxURVIgY2Fz ZXMuKQorCSAqLworCXNhd19ub3RudWxsID0gZmFsc2U7CisJZm9yZWFjaChjZWxsLCBjb2xkZWYt PmNvbnN0cmFpbnRzKQorCXsKKwkJQ29uc3RyYWludCAqY29uc3RyID0gKENvbnN0cmFpbnQgKikg bGZpcnN0KGNlbGwpOworCisJCWlmIChjb25zdHItPmNvbnR5cGUgPT0gQ09OU1RSX05PVE5VTEwp CisJCXsKKwkJCXNhd19ub3RudWxsID0gdHJ1ZTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJaWYg KCFzYXdfbm90bnVsbCAmJiAhYXR0ckZvcm0tPmF0dGhhc2RlZikKKwl7CisJCVJlbGVhc2VTeXND YWNoZShhdHRyVHVwKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJdG1wX29iaiA9IG5ld19vYmp0 cmVlKCJERUZBVUxUIik7CisJaWYgKGF0dHJGb3JtLT5hdHRoYXNkZWYpCisJeworCQljaGFyCSAg ICpkZWZzdHI7CisKKwkJZGVmc3RyID0gUmVsYXRpb25HZXRDb2x1bW5EZWZhdWx0KHJlbGF0aW9u LCBhdHRyRm9ybS0+YXR0bnVtLAorCQkJCQkJCQkJCSAgZHBjb250ZXh0LCBOVUxMKTsKKworCQlh cHBlbmRfc3RyaW5nX29iamVjdCh0bXBfb2JqLCAiJXtkZWZhdWx0fXMiLCAiZGVmYXVsdCIsIGRl ZnN0cik7CisJfQorCWVsc2UKKwkJYXBwZW5kX25vdF9wcmVzZW50KHRtcF9vYmopOworCisJcmV0 ID0gbmV3X29ianRyZWVfVkEoIiV7bmFtZX1JIFdJVEggT1BUSU9OUyAle25vdF9udWxsfXMgJXtk ZWZhdWx0fXMiLCA0LAorCQkJCQkJICJ0eXBlIiwgT2JqVHlwZVN0cmluZywgImNvbHVtbiIsCisJ CQkJCQkgIm5hbWUiLCBPYmpUeXBlU3RyaW5nLCBjb2xkZWYtPmNvbG5hbWUsCisJCQkJCQkgIm5v dF9udWxsIiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCSBzYXdfbm90bnVsbCA/ICJOT1QgTlVMTCIg OiAiIiwKKwkJCQkJCSAiZGVmYXVsdCIsIE9ialR5cGVPYmplY3QsIHRtcF9vYmopOworCisJLyog R2VuZXJhdGVkIGNvbHVtbnMgYXJlIG5vdCBzdXBwb3J0ZWQgb24gdHlwZWQgdGFibGVzLCBzbyB3 ZSBhcmUgZG9uZSAqLworCisJUmVsZWFzZVN5c0NhY2hlKGF0dHJUdXApOworCisJcmV0dXJuIHJl dDsKK30KKworLyoKKyAqIERlcGFyc2UgdGhlIGRlZmluaXRpb24gb2YgY29sdW1uIGlkZW50aXR5 LgorICoKKyAqIFZlcmJvc2Ugc3ludGF4CisgKiBTRVQgR0VORVJBVEVEICV7b3B0aW9ufXMgJXtp ZGVudGl0eV90eXBlfXMgJXtzZXFfZGVmaW5pdGlvbjogfXMKKyAqIAlPUgorICogR0VORVJBVEVE ICV7b3B0aW9ufXMgQVMgSURFTlRJVFkgJXtpZGVudGl0eV90eXBlfXMgKCAle3NlcV9kZWZpbml0 aW9uOiB9cyApCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfQ29sdW1uSWRlbnRpdHko T2lkIHNlcXJlbGlkLCBjaGFyIGlkZW50aXR5LCBib29sIGFsdGVyX3RhYmxlKQoreworCU9ialRy ZWUgICAgKnJldDsKKwlPYmpUcmVlICAgICppZGVudF9vYmo7CisJTGlzdAkgICAqZWxlbXMgPSBO SUw7CisJUmVsYXRpb24JcmVsOworCUhlYXBUdXBsZQlzZXF0dXBsZTsKKwlGb3JtX3BnX3NlcXVl bmNlIHNlcWZvcm07CisJRm9ybV9wZ19zZXF1ZW5jZV9kYXRhIHNlcWRhdGE7CisJY2hhcgkgICAq aWRlbnRmbXQ7CisJY2hhcgkgICAqb2JqZm10OworCisJaWYgKGFsdGVyX3RhYmxlKQorCXsKKwkJ aWRlbnRmbXQgPSAiU0VUIEdFTkVSQVRFRCAiOworCQlvYmpmbXQgPSAiJXtvcHRpb259cyI7CisJ fQorCWVsc2UKKwl7CisJCWlkZW50Zm10ID0gIkdFTkVSQVRFRCAiOworCQlvYmpmbXQgPSAiJXtv cHRpb259cyBBUyBJREVOVElUWSI7CisJfQorCisJaWRlbnRfb2JqID0gbmV3X29ianRyZWUoaWRl bnRmbXQpOworCisJaWYgKGlkZW50aXR5ID09IEFUVFJJQlVURV9JREVOVElUWV9BTFdBWVMpCisJ CWFwcGVuZF9zdHJpbmdfb2JqZWN0KGlkZW50X29iaiwgb2JqZm10LCAib3B0aW9uIiwgIkFMV0FZ UyIpOworCWVsc2UgaWYgKGlkZW50aXR5ID09IEFUVFJJQlVURV9JREVOVElUWV9CWV9ERUZBVUxU KQorCQlhcHBlbmRfc3RyaW5nX29iamVjdChpZGVudF9vYmosIG9iamZtdCwgIm9wdGlvbiIsICJC WSBERUZBVUxUIik7CisJZWxzZQorCQlhcHBlbmRfbm90X3ByZXNlbnQoaWRlbnRfb2JqKTsKKwor CXJldCA9IG5ld19vYmp0cmVlX1ZBKCIle2lkZW50aXR5X3R5cGV9cyIsIDEsCisJCQkJCQkgImlk ZW50aXR5X3R5cGUiLCBPYmpUeXBlT2JqZWN0LCBpZGVudF9vYmopOworCisJcmVsID0gdGFibGVf b3BlbihTZXF1ZW5jZVJlbGF0aW9uSWQsIFJvd0V4Y2x1c2l2ZUxvY2spOworCXNlcXR1cGxlID0g U2VhcmNoU3lzQ2FjaGVDb3B5MShTRVFSRUxJRCwgc2VxcmVsaWQpOworCWlmICghSGVhcFR1cGxl SXNWYWxpZChzZXF0dXBsZSkpCisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZv ciBzZXF1ZW5jZSB3aXRoIE9JRCAldSIsCisJCQkgc2VxcmVsaWQpOworCisJc2VxZm9ybSA9IChG b3JtX3BnX3NlcXVlbmNlKSBHRVRTVFJVQ1Qoc2VxdHVwbGUpOworCXNlcWRhdGEgPSBnZXRfc2Vx dWVuY2VfdmFsdWVzKHNlcXJlbGlkKTsKKworCS8qIERlZmluaXRpb24gZWxlbWVudHMgKi8KKwll bGVtcyA9IGxhcHBlbmQoZWxlbXMsIGRlcGFyc2VfU2VxX0NhY2hlKHNlcWZvcm0sIGFsdGVyX3Rh YmxlKSk7CisJZWxlbXMgPSBsYXBwZW5kKGVsZW1zLCBkZXBhcnNlX1NlcV9DeWNsZShzZXFmb3Jt LCBhbHRlcl90YWJsZSkpOworCWVsZW1zID0gbGFwcGVuZChlbGVtcywgZGVwYXJzZV9TZXFfSW5j cmVtZW50Qnkoc2VxZm9ybSwgYWx0ZXJfdGFibGUpKTsKKwllbGVtcyA9IGxhcHBlbmQoZWxlbXMs IGRlcGFyc2VfU2VxX01pbnZhbHVlKHNlcWZvcm0sIGFsdGVyX3RhYmxlKSk7CisJZWxlbXMgPSBs YXBwZW5kKGVsZW1zLCBkZXBhcnNlX1NlcV9NYXh2YWx1ZShzZXFmb3JtLCBhbHRlcl90YWJsZSkp OworCWVsZW1zID0gbGFwcGVuZChlbGVtcywgZGVwYXJzZV9TZXFfU3RhcnR3aXRoKHNlcWZvcm0s IGFsdGVyX3RhYmxlKSk7CisJZWxlbXMgPSBsYXBwZW5kKGVsZW1zLCBkZXBhcnNlX1NlcV9SZXN0 YXJ0KHNlcWRhdGEpKTsKKwkvKiBXZSBwdXJwb3NlZnVsbHkgZG8gbm90IGVtaXQgT1dORUQgQlkg aGVyZSAqLworCisJaWYgKGFsdGVyX3RhYmxlKQorCQlhcHBlbmRfYXJyYXlfb2JqZWN0KHJldCwg IiV7c2VxX2RlZmluaXRpb246IH1zIiwgZWxlbXMpOworCWVsc2UKKwkJYXBwZW5kX2FycmF5X29i amVjdChyZXQsICIoICV7c2VxX2RlZmluaXRpb246IH1zICkiLCBlbGVtcyk7CisKKwl0YWJsZV9j bG9zZShyZWwsIFJvd0V4Y2x1c2l2ZUxvY2spOworCisJcmV0dXJuIHJldDsKK30KKworLyoKKyAq IC4uLiBBTFRFUiBDT0xVTU4gLi4uIFNFVC9SRVNFVCAoLi4uKQorICoKKyAqIFZlcmJvc2Ugc3lu dGF4CisgKiBBTFRFUiBDT0xVTU4gJXtjb2x1bW59SSBSRVNFVHxTRVQgKCV7b3B0aW9uczosIH1z KQorICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0NvbHVtblNldE9wdGlvbnMoQWx0ZXJU YWJsZUNtZCAqc3ViY21kKQoreworCUxpc3QJICAgKnNldHMgPSBOSUw7CisJTGlzdENlbGwgICAq Y2VsbDsKKwlPYmpUcmVlICAgICpyZXQ7CisJYm9vbAkJaXNfcmVzZXQgPSBzdWJjbWQtPnN1YnR5 cGUgPT0gQVRfUmVzZXRPcHRpb25zOworCisJcmV0ID0gbmV3X29ianRyZWVfVkEoIkFMVEVSIENP TFVNTiAle2NvbHVtbn1JICV7b3B0aW9ufXMiLCAyLAorCQkJCQkJICJjb2x1bW4iLCBPYmpUeXBl U3RyaW5nLCBzdWJjbWQtPm5hbWUsCisJCQkJCQkgIm9wdGlvbiIsIE9ialR5cGVTdHJpbmcsIGlz X3Jlc2V0ID8gIlJFU0VUIiA6ICJTRVQiKTsKKworCWZvcmVhY2goY2VsbCwgKExpc3QgKikgc3Vi Y21kLT5kZWYpCisJeworCQlEZWZFbGVtICAgICplbGVtOworCQlPYmpUcmVlICAgICpzZXQ7CisK KwkJZWxlbSA9IChEZWZFbGVtICopIGxmaXJzdChjZWxsKTsKKwkJc2V0ID0gZGVwYXJzZV9EZWZF bGVtKGVsZW0sIGlzX3Jlc2V0KTsKKwkJc2V0cyA9IGxhcHBlbmQoc2V0cywgbmV3X29iamVjdF9v YmplY3Qoc2V0KSk7CisJfQorCisJQXNzZXJ0KHNldHMpOworCWFwcGVuZF9hcnJheV9vYmplY3Qo cmV0LCAiKCV7b3B0aW9uczosIH1zKSIsIHNldHMpOworCisJcmV0dXJuIHJldDsKK30KKworLyoK KyAqIERlcGFyc2UgdGhlIENSRUFURSBET01BSU4KKyAqCisgKiBHaXZlbiBhIGZ1bmN0aW9uIE9J RCBhbmQgdGhlIHBhcnNlIHRyZWUgdGhhdCBjcmVhdGVkIGl0LCByZXR1cm4gYW4gT2JqVHJlZQor ICogcmVwcmVzZW50aW5nIHRoZSBjcmVhdGlvbiBjb21tYW5kLgorICoKKyAqIFZlcmJvc2Ugc3lu dGF4CisgKiBDUkVBVEUgRE9NQUlOICV7aWRlbnRpdHl9RCBBUyAle3R5cGV9VCAle25vdF9udWxs fXMgJXtjb25zdHJhaW50c31zCisgKiAle2NvbGxhdGlvbn1zCisgKi8KK3N0YXRpYyBPYmpUcmVl ICoKK2RlcGFyc2VfQ3JlYXRlRG9tYWluKE9pZCBvYmplY3RJZCwgTm9kZSAqcGFyc2V0cmVlKQor eworCU9ialRyZWUgICAgKnJldDsKKwlPYmpUcmVlICAgICp0bXBfb2JqOworCUhlYXBUdXBsZQl0 eXBUdXA7CisJRm9ybV9wZ190eXBlIHR5cEZvcm07CisJTGlzdAkgICAqY29uc3RyYWludHM7CisJ Y2hhcgkgICAqZGVmdmFsOworCisJdHlwVHVwID0gU2VhcmNoU3lzQ2FjaGUxKFRZUEVPSUQsIG9i amVjdElkKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQodHlwVHVwKSkKKwkJZWxvZyhFUlJPUiwg ImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIGRvbWFpbiB3aXRoIE9JRCAldSIsIG9iamVjdElkKTsK Kwl0eXBGb3JtID0gKEZvcm1fcGdfdHlwZSkgR0VUU1RSVUNUKHR5cFR1cCk7CisKKwlyZXQgPSBu ZXdfb2JqdHJlZV9WQSgiQ1JFQVRFIERPTUFJTiAle2lkZW50aXR5fUQgQVMgJXt0eXBlfVQgJXtu b3RfbnVsbH1zIiwgMywKKwkJCQkJCSAiaWRlbnRpdHkiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJ IG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChUeXBlUmVsYXRpb25JZCwgb2JqZWN0SWQpLAor CQkJCQkJICJ0eXBlIiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfdHlw ZSh0eXBGb3JtLT50eXBiYXNldHlwZSwKKwkJCQkJCQkJCQkJICB0eXBGb3JtLT50eXB0eXBtb2Qp LAorCQkJCQkJICJub3RfbnVsbCIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkgdHlwRm9ybS0+dHlw bm90bnVsbCA/ICJOT1QgTlVMTCIgOiAiIik7CisKKwljb25zdHJhaW50cyA9IG9idGFpbkNvbnN0 cmFpbnRzKE5JTCwgSW52YWxpZE9pZCwgb2JqZWN0SWQpOworCWlmIChjb25zdHJhaW50cyA9PSBO SUwpCisJeworCQl0bXBfb2JqID0gbmV3X29ianRyZWUoIiIpOworCQlhcHBlbmRfbm90X3ByZXNl bnQodG1wX29iaik7CisJfQorCWVsc2UKKwkJdG1wX29iaiA9IG5ld19vYmp0cmVlX1ZBKCIle2Vs ZW1lbnRzOiwgfXMiLCAxLAorCQkJCQkJCQkiZWxlbWVudHMiLCBPYmpUeXBlQXJyYXksIGNvbnN0 cmFpbnRzKTsKKwlhcHBlbmRfb2JqZWN0X29iamVjdChyZXQsICIle2NvbnN0cmFpbnRzfXMiLCB0 bXBfb2JqKTsKKworCXRtcF9vYmogPSBuZXdfb2JqdHJlZSgiQ09MTEFURSIpOworCWlmIChPaWRJ c1ZhbGlkKHR5cEZvcm0tPnR5cGNvbGxhdGlvbikpCisJeworCQlPYmpUcmVlICAgICpjb2xsbmFt ZTsKKworCQljb2xsbmFtZSA9IG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChDb2xsYXRpb25S ZWxhdGlvbklkLAorCQkJCQkJCQkJCQkgICB0eXBGb3JtLT50eXBjb2xsYXRpb24pOworCQlhcHBl bmRfb2JqZWN0X29iamVjdCh0bXBfb2JqLCAiJXtuYW1lfUQiLCBjb2xsbmFtZSk7CisJfQorCWVs c2UKKwkJYXBwZW5kX25vdF9wcmVzZW50KHRtcF9vYmopOworCWFwcGVuZF9vYmplY3Rfb2JqZWN0 KHJldCwgIiV7Y29sbGF0aW9ufXMiLCB0bXBfb2JqKTsKKworCWRlZnZhbCA9IERvbWFpbkdldERl ZmF1bHQodHlwVHVwLCB0cnVlKTsKKwlpZiAoZGVmdmFsKQorCQlhcHBlbmRfc3RyaW5nX29iamVj dChyZXQsICJERUZBVUxUICV7ZGVmYXVsdH1zIiwgImRlZmF1bHQiLCBkZWZ2YWwpOworCisJUmVs ZWFzZVN5c0NhY2hlKHR5cFR1cCk7CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogRGVwYXJz ZSBhIENyZWF0ZUZ1bmN0aW9uU3RtdCAoQ1JFQVRFIEZVTkNUSU9OKQorICoKKyAqIEdpdmVuIGEg ZnVuY3Rpb24gT0lEIGFuZCB0aGUgcGFyc2UgdHJlZSB0aGF0IGNyZWF0ZWQgaXQsIHJldHVybiBh biBPYmpUcmVlCisgKiByZXByZXNlbnRpbmcgdGhlIGNyZWF0aW9uIGNvbW1hbmQuCisgKgorICog VmVyYm9zZSBzeW50YXgKKyAqCisgKiBDUkVBVEUgJXtvcl9yZXBsYWNlfXMgRlVOQ1RJT04gJXtz aWduYXR1cmV9cyBSRVRVUk5TICV7cmV0dXJuX3R5cGV9cworICogTEFOR1VBR0UgJXt0cmFuc2Zv cm1fdHlwZX1zICV7bGFuZ3VhZ2V9SSAle3dpbmRvd31zICV7dm9sYXRpbGl0eX1zCisgKiAle3Bh cmFsbGVsX3NhZmV0eX1zICV7bGVha3Byb29mfXMgJXtzdHJpY3R9cyAle3NlY3VyaXR5X2RlZmlu ZXJ9cworICogJXtjb3N0fXMgJXtyb3dzfXMgJXtzdXBwb3J0fXMgJXtzZXRfb3B0aW9uczogfXMg QVMgJXtvYmpmaWxlfUwsCisgKiAle3N5bWJvbH1MCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2Rl cGFyc2VfQ3JlYXRlRnVuY3Rpb24oT2lkIG9iamVjdElkLCBOb2RlICpwYXJzZXRyZWUpCit7CisJ Q3JlYXRlRnVuY3Rpb25TdG10ICpub2RlID0gKENyZWF0ZUZ1bmN0aW9uU3RtdCAqKSBwYXJzZXRy ZWU7CisJT2JqVHJlZSAgICAqcmV0OworCU9ialRyZWUgICAgKnRtcF9vYmo7CisJRGF0dW0JCXRt cGRhdHVtOworCWNoYXIJICAgKnNvdXJjZTsKKwljaGFyCSAgICpwcm9iaW4gPSBOVUxMOworCUxp c3QJICAgKnBhcmFtczsKKwlMaXN0CSAgICpkZWZhdWx0czsKKwlMaXN0CSAgICpzZXRzID0gTklM OworCUxpc3QJICAgKnR5cGVzID0gTklMOworCUxpc3RDZWxsICAgKmNlbGw7CisJTGlzdENlbGwg ICAqY3VyZGVmOworCUxpc3RDZWxsICAgKnRhYmxlX3BhcmFtcyA9IE5VTEw7CisJSGVhcFR1cGxl CXByb2NUdXA7CisJRm9ybV9wZ19wcm9jIHByb2NGb3JtOworCUhlYXBUdXBsZQlsYW5nVHVwOwor CU9pZAkJICAgKnR5cGFycmF5OworCU9pZAkJICAgKnRyZnR5cGVzOworCUZvcm1fcGdfbGFuZ3Vh Z2UgbGFuZ0Zvcm07CisJaW50CQkJaTsKKwlpbnQJCQl0eXBudW07CisJaW50CQkJbnR5cGVzOwor CWludAkJCXBhcmFtY291bnQgPSBsaXN0X2xlbmd0aChub2RlLT5wYXJhbWV0ZXJzKTsKKwlib29s CQlpc251bGw7CisJYm9vbAkJaXNmdW5jdGlvbjsKKworCS8qIEdldCB0aGUgcGdfcHJvYyB0dXBs ZSAqLworCXByb2NUdXAgPSBTZWFyY2hTeXNDYWNoZTEoUFJPQ09JRCwgb2JqZWN0SWQpOworCWlm ICghSGVhcFR1cGxlSXNWYWxpZChwcm9jVHVwKSkKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1 cCBmYWlsZWQgZm9yIGZ1bmN0aW9uIHdpdGggT0lEICV1IiwKKwkJCSBvYmplY3RJZCk7CisJcHJv Y0Zvcm0gPSAoRm9ybV9wZ19wcm9jKSBHRVRTVFJVQ1QocHJvY1R1cCk7CisKKwkvKiBHZXQgdGhl IGNvcnJlc3BvbmRpbmcgcGdfbGFuZ3VhZ2UgdHVwbGUgKi8KKwlsYW5nVHVwID0gU2VhcmNoU3lz Q2FjaGUxKExBTkdPSUQsIHByb2NGb3JtLT5wcm9sYW5nKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFs aWQobGFuZ1R1cCkpCisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciBsYW5n dWFnZSB3aXRoIE9JRCAldSIsCisJCQkgcHJvY0Zvcm0tPnByb2xhbmcpOworCWxhbmdGb3JtID0g KEZvcm1fcGdfbGFuZ3VhZ2UpIEdFVFNUUlVDVChsYW5nVHVwKTsKKworCS8qCisJICogRGV0ZXJt aW5lIHVzZWZ1bCB2YWx1ZXMgZm9yIHByb3NyYyBhbmQgcHJvYmluLiAgV2UgY29wZSB3aXRoIHBy b2JpbgorCSAqIGJlaW5nIGVpdGhlciBOVUxMIG9yICItIiwgYnV0IHByb3NyYyBtdXN0IGhhdmUg YSB2YWxpZCB2YWx1ZS4KKwkgKi8KKwl0bXBkYXR1bSA9IFN5c0NhY2hlR2V0QXR0cihQUk9DT0lE LCBwcm9jVHVwLAorCQkJCQkJCSAgIEFudW1fcGdfcHJvY19wcm9zcmMsICZpc251bGwpOworCWlm IChpc251bGwpCisJCWVsb2coRVJST1IsICJudWxsIHByb3NyYyBpbiBmdW5jdGlvbiB3aXRoIE9J RCAldSIsIG9iamVjdElkKTsKKwlzb3VyY2UgPSBUZXh0RGF0dW1HZXRDU3RyaW5nKHRtcGRhdHVt KTsKKworCS8qIERldGVybWluZSBhIHVzZWZ1bCB2YWx1ZSBmb3IgcHJvYmluICovCisJdG1wZGF0 dW0gPSBTeXNDYWNoZUdldEF0dHIoUFJPQ09JRCwgcHJvY1R1cCwKKwkJCQkJCQkgICBBbnVtX3Bn X3Byb2NfcHJvYmluLCAmaXNudWxsKTsKKwlpZiAoIWlzbnVsbCkKKwl7CisJCXByb2JpbiA9IFRl eHREYXR1bUdldENTdHJpbmcodG1wZGF0dW0pOworCQlpZiAocHJvYmluWzBdID09ICdcMCcgfHwg c3RyY21wKHByb2JpbiwgIi0iKSA9PSAwKQorCQkJcHJvYmluID0gTlVMTDsKKwl9CisKKwlyZXQg PSBuZXdfb2JqdHJlZV9WQSgiQ1JFQVRFICV7b3JfcmVwbGFjZX1zIiwgMSwKKwkJCQkJCSAib3Jf cmVwbGFjZSIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkgbm9kZS0+cmVwbGFjZSA/ICJPUiBSRVBM QUNFIiA6ICIiKTsKKworCS8qCisJICogVG8gY29uc3RydWN0IHRoZSBhcmd1bWVudHMgYXJyYXks IGV4dHJhY3QgdGhlIHR5cGUgT0lEcyBmcm9tIHRoZQorCSAqIGZ1bmN0aW9uJ3MgcGdfcHJvYyBl bnRyeS4gIElmIHByb25hcmdzIGVxdWFscyB0aGUgcGFyYW1ldGVyIGxpc3QKKwkgKiBsZW5ndGgs IHRoZXJlIGFyZSBubyBPVVQgcGFyYW1ldGVycyBhbmQgdGh1cyB3ZSBjYW4gZXh0cmFjdCB0aGUg dHlwZQorCSAqIE9JRCBmcm9tIHByb2FyZ3R5cGVzOyBvdGhlcndpc2Ugd2UgbmVlZCB0byBkZWNv ZGUgcHJvYWxsYXJndHlwZXMsIHdoaWNoCisJICogaXMgYSBiaXQgbW9yZSBpbnZvbHZlZC4KKwkg Ki8KKwl0eXBhcnJheSA9IHBhbGxvYyhwYXJhbWNvdW50ICogc2l6ZW9mKE9pZCkpOworCWlmIChw YXJhbWNvdW50ID4gcHJvY0Zvcm0tPnByb25hcmdzKQorCXsKKwkJRGF0dW0JCWFsbHR5cGVzOwor CQlEYXR1bQkgICAqdmFsdWVzOworCQlib29sCSAgICpudWxsczsKKwkJaW50CQkJbmVsZW1zOwor CisJCWFsbHR5cGVzID0gU3lzQ2FjaGVHZXRBdHRyKFBST0NPSUQsIHByb2NUdXAsCisJCQkJCQkJ CSAgIEFudW1fcGdfcHJvY19wcm9hbGxhcmd0eXBlcywgJmlzbnVsbCk7CisJCWlmIChpc251bGwp CisJCQllbG9nKEVSUk9SLCAibnVsbCBwcm9hbGxhcmd0eXBlcywgbW9yZSBudW1iZXIgb2YgcGFy YW1ldGVycyB0aGFuIGFyZ3MgaW4gZnVuY3Rpb24gd2l0aCBPSUQgJXUiLAorCQkJCSBvYmplY3RJ ZCk7CisJCWRlY29uc3RydWN0X2FycmF5KERhdHVtR2V0QXJyYXlUeXBlUChhbGx0eXBlcyksCisJ CQkJCQkgIE9JRE9JRCwgNCwgJ3QnLCAnaScsCisJCQkJCQkgICZ2YWx1ZXMsICZudWxscywgJm5l bGVtcyk7CisJCWlmIChuZWxlbXMgIT0gcGFyYW1jb3VudCkKKwkJCWVsb2coRVJST1IsICJtaXNt YXRjaGVkIHByb2FsbGFyZ2F0eXBlcyIpOworCQlmb3IgKGkgPSAwOyBpIDwgcGFyYW1jb3VudDsg aSsrKQorCQkJdHlwYXJyYXlbaV0gPSB2YWx1ZXNbaV07CisJfQorCWVsc2UKKwl7CisJCWZvciAo aSA9IDA7IGkgPCBwYXJhbWNvdW50OyBpKyspCisJCQl0eXBhcnJheVtpXSA9IHByb2NGb3JtLT5w cm9hcmd0eXBlcy52YWx1ZXNbaV07CisJfQorCisJLyoKKwkgKiBJZiB0aGVyZSBhcmUgYW55IGRl ZmF1bHQgZXhwcmVzc2lvbnMsIHdlIHJlYWQgdGhlIGRlcGFyc2VkIGV4cHJlc3Npb24KKwkgKiBh cyBhIGxpc3Qgc28gdGhhdCB3ZSBjYW4gYXR0YWNoIHRoZW0gdG8gZWFjaCBhcmd1bWVudC4KKwkg Ki8KKwl0bXBkYXR1bSA9IFN5c0NhY2hlR2V0QXR0cihQUk9DT0lELCBwcm9jVHVwLAorCQkJCQkJ CSAgIEFudW1fcGdfcHJvY19wcm9hcmdkZWZhdWx0cywgJmlzbnVsbCk7CisJaWYgKCFpc251bGwp CisJeworCQlkZWZhdWx0cyA9IEZ1bmN0aW9uR2V0RGVmYXVsdHMoRGF0dW1HZXRUZXh0UCh0bXBk YXR1bSkpOworCQljdXJkZWYgPSBsaXN0X2hlYWQoZGVmYXVsdHMpOworCX0KKwllbHNlCisJewor CQlkZWZhdWx0cyA9IE5JTDsKKwkJY3VyZGVmID0gTlVMTDsKKwl9CisKKwkvKgorCSAqIE5vdyBp dGVyYXRlIG92ZXIgZWFjaCBwYXJhbWV0ZXIgaW4gdGhlIHBhcnNlIHRyZWUgdG8gY3JlYXRlIHRo ZQorCSAqIHBhcmFtZXRlcnMgYXJyYXkuCisJICovCisJcGFyYW1zID0gTklMOworCXR5cG51bSA9 IDA7CisJZm9yZWFjaChjZWxsLCBub2RlLT5wYXJhbWV0ZXJzKQorCXsKKwkJRnVuY3Rpb25QYXJh bWV0ZXIgKnBhcmFtID0gKEZ1bmN0aW9uUGFyYW1ldGVyICopIGxmaXJzdChjZWxsKTsKKwkJT2Jq VHJlZSAgICAqcGFyYW1fb2JqOworCQlPYmpUcmVlICAgICpkZWZhdWx0dmFsOworCQlPYmpUcmVl ICAgICpuYW1lOworCisJCS8qCisJCSAqIEEgUEFSQU1fVEFCTEUgcGFyYW1ldGVyIGluZGljYXRl cyB0aGUgZW5kIG9mIGlucHV0IGFyZ3VtZW50czsgdGhlCisJCSAqIGZvbGxvd2luZyBwYXJhbWV0 ZXJzIGFyZSBwYXJ0IG9mIHRoZSByZXR1cm4gdHlwZS4gIFdlIGlnbm9yZSB0aGVtCisJCSAqIGhl cmUsIGJ1dCBrZWVwIHRyYWNrIG9mIHRoZSBjdXJyZW50IHBvc2l0aW9uIGluIHRoZSBsaXN0IHNv IHRoYXQgd2UKKwkJICogY2FuIGVhc2lseSBwcm9kdWNlIHRoZSByZXR1cm4gdHlwZSBiZWxvdy4K KwkJICovCisJCWlmIChwYXJhbS0+bW9kZSA9PSBGVU5DX1BBUkFNX1RBQkxFKQorCQl7CisJCQl0 YWJsZV9wYXJhbXMgPSBjZWxsOworCQkJYnJlYWs7CisJCX0KKworCQkvKgorCQkgKiBWZXJib3Nl IHN5bnRheCBmb3IgcGFyYW1hdGVyOiAle21vZGV9cyAle25hbWV9cyAle3R5cGV9VAorCQkgKiAl e2RlZmF1bHR9cworCQkgKi8KKwkJcGFyYW1fb2JqID0gbmV3X29ianRyZWVfVkEoIiV7bW9kZX1z IiwgMSwKKwkJCQkJCQkJICAibW9kZSIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkJCSAgcGFyYW0t Pm1vZGUgPT0gRlVOQ19QQVJBTV9PVVQgPyAiT1VUIiA6CisJCQkJCQkJCSAgcGFyYW0tPm1vZGUg PT0gRlVOQ19QQVJBTV9JTk9VVCA/ICJJTk9VVCIgOgorCQkJCQkJCQkgIHBhcmFtLT5tb2RlID09 IEZVTkNfUEFSQU1fVkFSSUFESUMgPyAiVkFSSUFESUMiIDoKKwkJCQkJCQkJICAiSU4iKTsKKwor CQkvKiBPcHRpb25hbCB3aG9sZXNhbGUgc3VwcHJlc3Npb24gb2YgIm5hbWUiIG9jY3VycyBoZXJl ICovCisJCW5hbWUgPSBuZXdfb2JqdHJlZSgiIik7CisJCWlmIChwYXJhbS0+bmFtZSkKKwkJCWFw cGVuZF9zdHJpbmdfb2JqZWN0KG5hbWUsICIle25hbWV9SSIsICJuYW1lIiwgcGFyYW0tPm5hbWUp OworCQllbHNlCisJCXsKKwkJCWFwcGVuZF9udWxsX29iamVjdChuYW1lLCAiJXtuYW1lfUkiKTsK KwkJCWFwcGVuZF9ub3RfcHJlc2VudChuYW1lKTsKKwkJfQorCisJCWFwcGVuZF9vYmplY3Rfb2Jq ZWN0KHBhcmFtX29iaiwgIiV7bmFtZX1zIiwgbmFtZSk7CisKKwkJZGVmYXVsdHZhbCA9IG5ld19v Ymp0cmVlKCJERUZBVUxUIik7CisJCWlmIChQb2ludGVySXNWYWxpZChwYXJhbS0+ZGVmZXhwcikp CisJCXsKKwkJCWNoYXIJICAgKmV4cHI7CisKKwkJCWlmIChjdXJkZWYgPT0gTlVMTCkKKwkJCQll bG9nKEVSUk9SLCAicHJvYXJnZGVmYXVsdHMgbGlzdCB0b28gc2hvcnQiKTsKKwkJCWV4cHIgPSBs Zmlyc3QoY3VyZGVmKTsKKworCQkJYXBwZW5kX3N0cmluZ19vYmplY3QoZGVmYXVsdHZhbCwgIiV7 dmFsdWV9cyIsICJ2YWx1ZSIsIGV4cHIpOworCQkJY3VyZGVmID0gbG5leHQoZGVmYXVsdHMsIGN1 cmRlZik7CisJCX0KKwkJZWxzZQorCQkJYXBwZW5kX25vdF9wcmVzZW50KGRlZmF1bHR2YWwpOwor CisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHBhcmFtX29iaiwgIiV7dHlwZX1UIiwKKwkJCQkJCQkg bmV3X29ianRyZWVfZm9yX3R5cGUodHlwYXJyYXlbdHlwbnVtKytdLCAtMSkpOworCisJCWFwcGVu ZF9vYmplY3Rfb2JqZWN0KHBhcmFtX29iaiwgIiV7ZGVmYXVsdH1zIiwgZGVmYXVsdHZhbCk7CisK KwkJcGFyYW1zID0gbGFwcGVuZChwYXJhbXMsIG5ld19vYmplY3Rfb2JqZWN0KHBhcmFtX29iaikp OworCX0KKworCXRtcF9vYmogPSBuZXdfb2JqdHJlZV9WQSgiJXtpZGVudGl0eX1EIiwgMSwKKwkJ CQkJCQkiaWRlbnRpdHkiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJCW5ld19vYmp0cmVlX2Zvcl9x dWFsbmFtZV9pZChQcm9jZWR1cmVSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCQlvYmplY3RJZCkp OworCisJYXBwZW5kX2Zvcm1hdF9zdHJpbmcodG1wX29iaiwgIigiKTsKKwlhcHBlbmRfYXJyYXlf b2JqZWN0KHRtcF9vYmosICIle2FyZ3VtZW50czosIH1zIiwgcGFyYW1zKTsKKwlhcHBlbmRfZm9y bWF0X3N0cmluZyh0bXBfb2JqLCAiKSIpOworCisJaXNmdW5jdGlvbiA9IChwcm9jRm9ybS0+cHJv a2luZCAhPSBQUk9LSU5EX1BST0NFRFVSRSk7CisKKwlpZiAoaXNmdW5jdGlvbikKKwkJYXBwZW5k X29iamVjdF9vYmplY3QocmV0LCAiRlVOQ1RJT04gJXtzaWduYXR1cmV9cyIsIHRtcF9vYmopOwor CWVsc2UKKwkJYXBwZW5kX29iamVjdF9vYmplY3QocmV0LCAiUFJPQ0VEVVJFICV7c2lnbmF0dXJl fXMiLCB0bXBfb2JqKTsKKworCS8qCisJICogQSByZXR1cm4gdHlwZSBjYW4gYWRvcHQgb25lIG9m IHR3byBmb3JtczogZWl0aGVyIGEgW1NFVE9GXSBzb21lX3R5cGUsCisJICogb3IgYSBUQUJMRShs aXN0LW9mLXR5cGVzKS4gIFdlIGNhbiB0ZWxsIHRoZSBzZWNvbmQgZm9ybSBiZWNhdXNlIHdlIHNh dworCSAqIGEgdGFibGUgcGFyYW0gYWJvdmUgd2hpbGUgc2Nhbm5pbmcgdGhlIGFyZ3VtZW50IGxp c3QuCisJICovCisJaWYgKHRhYmxlX3BhcmFtcyA9PSBOVUxMKQorCXsKKwkJdG1wX29iaiA9IG5l d19vYmp0cmVlX1ZBKCIiLCAxLAorCQkJCQkJCQkicmV0dXJuX2Zvcm0iLCBPYmpUeXBlU3RyaW5n LCAicGxhaW4iKTsKKwkJYXBwZW5kX3N0cmluZ19vYmplY3QodG1wX29iaiwgIiV7c2V0b2Z9cyIs ICJzZXRvZiIsCisJCQkJCQkJIHByb2NGb3JtLT5wcm9yZXRzZXQgPyAiU0VUT0YiIDogIiIpOwor CQlhcHBlbmRfb2JqZWN0X29iamVjdCh0bXBfb2JqLCAiJXtyZXR0eXBlfVQiLAorCQkJCQkJCSBu ZXdfb2JqdHJlZV9mb3JfdHlwZShwcm9jRm9ybS0+cHJvcmV0dHlwZSwgLTEpKTsKKwl9CisJZWxz ZQorCXsKKwkJTGlzdAkgICAqcmV0dHlwZXMgPSBOSUw7CisJCU9ialRyZWUgICAgKnBhcmFtX29i ajsKKworCQl0bXBfb2JqID0gbmV3X29ianRyZWVfVkEoIlRBQkxFIiwgMSwKKwkJCQkJCQkJInJl dHVybl9mb3JtIiwgT2JqVHlwZVN0cmluZywgInRhYmxlIik7CisJCWZvciAoOyB0YWJsZV9wYXJh bXMgIT0gTlVMTDsgdGFibGVfcGFyYW1zID0gbG5leHQobm9kZS0+cGFyYW1ldGVycywgdGFibGVf cGFyYW1zKSkKKwkJeworCQkJRnVuY3Rpb25QYXJhbWV0ZXIgKnBhcmFtID0gbGZpcnN0KHRhYmxl X3BhcmFtcyk7CisKKwkJCXBhcmFtX29iaiA9IG5ld19vYmp0cmVlX1ZBKCIle25hbWV9SSAle3R5 cGV9VCIsIDIsCisJCQkJCQkJCQkgICJuYW1lIiwgT2JqVHlwZVN0cmluZywgcGFyYW0tPm5hbWUs CisJCQkJCQkJCQkgICJ0eXBlIiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCQkJCSAgbmV3X29ianRy ZWVfZm9yX3R5cGUodHlwYXJyYXlbdHlwbnVtKytdLCAtMSkpOworCQkJcmV0dHlwZXMgPSBsYXBw ZW5kKHJldHR5cGVzLCBuZXdfb2JqZWN0X29iamVjdChwYXJhbV9vYmopKTsKKwkJfQorCisJCWFw cGVuZF9hcnJheV9vYmplY3QodG1wX29iaiwgIigle3JldHR5cGVzOiwgfXMpIiwgcmV0dHlwZXMp OworCX0KKworCWlmIChpc2Z1bmN0aW9uKQorCQlhcHBlbmRfb2JqZWN0X29iamVjdChyZXQsICJS RVRVUk5TICV7cmV0dXJuX3R5cGV9cyIsIHRtcF9vYmopOworCisJLyogVFJBTlNGT1JNIEZPUiBU WVBFICovCisJdG1wX29iaiA9IG5ld19vYmp0cmVlKCJUUkFOU0ZPUk0iKTsKKworCW50eXBlcyA9 IGdldF9mdW5jX3RyZnR5cGVzKHByb2NUdXAsICZ0cmZ0eXBlcyk7CisJZm9yIChpID0gMDsgaSA8 IG50eXBlczsgaSsrKQorCXsKKwkJdG1wX29iaiA9IG5ld19vYmp0cmVlX1ZBKCJGT1IgVFlQRSAl e3R5cGV9VCIsIDEsCisJCQkJCQkJCSJ0eXBlIiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCQkJbmV3 X29ianRyZWVfZm9yX3R5cGUodHJmdHlwZXNbaV0sIC0xKSk7CisJCXR5cGVzID0gbGFwcGVuZCh0 eXBlcywgdG1wX29iaik7CisJfQorCisJaWYgKHR5cGVzKQorCQlhcHBlbmRfYXJyYXlfb2JqZWN0 KHRtcF9vYmosICIle2Zvcl90eXBlOiwgfXMiLCB0eXBlcyk7CisJZWxzZQorCQlhcHBlbmRfbm90 X3ByZXNlbnQodG1wX29iaik7CisKKwlhcHBlbmRfb2JqZWN0X29iamVjdChyZXQsICIle3RyYW5z Zm9ybV90eXBlfXMiLCB0bXBfb2JqKTsKKworCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHJldCwgIkxB TkdVQUdFICV7bGFuZ3VhZ2V9SSIsICJsYW5ndWFnZSIsCisJCQkJCQkgTmFtZVN0cihsYW5nRm9y bS0+bGFubmFtZSkpOworCisJaWYgKGlzZnVuY3Rpb24pCisJeworCQlhcHBlbmRfc3RyaW5nX29i amVjdChyZXQsICIle3dpbmRvd31zIiwgIndpbmRvdyIsCisJCQkJCQkJIHByb2NGb3JtLT5wcm9r aW5kID09IFBST0tJTkRfV0lORE9XID8gIldJTkRPVyIgOiAiIik7CisJCWFwcGVuZF9zdHJpbmdf b2JqZWN0KHJldCwgIiV7dm9sYXRpbGl0eX1zIiwgInZvbGF0aWxpdHkiLAorCQkJCQkJCSBwcm9j Rm9ybS0+cHJvdm9sYXRpbGUgPT0gUFJPVk9MQVRJTEVfVk9MQVRJTEUgPworCQkJCQkJCSAiVk9M QVRJTEUiIDoKKwkJCQkJCQkgcHJvY0Zvcm0tPnByb3ZvbGF0aWxlID09IFBST1ZPTEFUSUxFX1NU QUJMRSA/CisJCQkJCQkJICJTVEFCTEUiIDogIklNTVVUQUJMRSIpOworCisJCWFwcGVuZF9zdHJp bmdfb2JqZWN0KHJldCwgIiV7cGFyYWxsZWxfc2FmZXR5fXMiLAorCQkJCQkJCSAicGFyYWxsZWxf c2FmZXR5IiwKKwkJCQkJCQkgcHJvY0Zvcm0tPnByb3BhcmFsbGVsID09IFBST1BBUkFMTEVMX1NB RkUgPworCQkJCQkJCSAiUEFSQUxMRUwgU0FGRSIgOgorCQkJCQkJCSBwcm9jRm9ybS0+cHJvcGFy YWxsZWwgPT0gUFJPUEFSQUxMRUxfUkVTVFJJQ1RFRCA/CisJCQkJCQkJICJQQVJBTExFTCBSRVNU UklDVEVEIiA6ICJQQVJBTExFTCBVTlNBRkUiKTsKKworCQlhcHBlbmRfc3RyaW5nX29iamVjdChy ZXQsICIle2xlYWtwcm9vZn1zIiwgImxlYWtwcm9vZiIsCisJCQkJCQkJIHByb2NGb3JtLT5wcm9s ZWFrcHJvb2YgPyAiTEVBS1BST09GIiA6ICIiKTsKKwkJYXBwZW5kX3N0cmluZ19vYmplY3QocmV0 LCAiJXtzdHJpY3R9cyIsICJzdHJpY3QiLAorCQkJCQkJCSBwcm9jRm9ybS0+cHJvaXNzdHJpY3Qg PworCQkJCQkJCSAiUkVUVVJOUyBOVUxMIE9OIE5VTEwgSU5QVVQiIDoKKwkJCQkJCQkgIkNBTExF RCBPTiBOVUxMIElOUFVUIik7CisKKwkJYXBwZW5kX3N0cmluZ19vYmplY3QocmV0LCAiJXtzZWN1 cml0eV9kZWZpbmVyfXMiLAorCQkJCQkJCSAic2VjdXJpdHlfZGVmaW5lciIsCisJCQkJCQkJIHBy b2NGb3JtLT5wcm9zZWNkZWYgPworCQkJCQkJCSAiU0VDVVJJVFkgREVGSU5FUiIgOiAiU0VDVVJJ VFkgSU5WT0tFUiIpOworCisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHJldCwgIiV7Y29zdH1zIiwK KwkJCQkJCQkgbmV3X29ianRyZWVfVkEoIkNPU1QgJXtjb3N0fW4iLCAxLAorCQkJCQkJCQkJCQki Y29zdCIsIE9ialR5cGVGbG9hdCwKKwkJCQkJCQkJCQkJcHJvY0Zvcm0tPnByb2Nvc3QpKTsKKwor CQl0bXBfb2JqID0gbmV3X29ianRyZWUoIlJPV1MiKTsKKwkJaWYgKHByb2NGb3JtLT5wcm9yb3dz ID09IDApCisJCQlhcHBlbmRfbm90X3ByZXNlbnQodG1wX29iaik7CisJCWVsc2UKKwkJCWFwcGVu ZF9mbG9hdF9vYmplY3QodG1wX29iaiwgIiV7cm93c31uIiwgcHJvY0Zvcm0tPnByb3Jvd3MpOwor CQlhcHBlbmRfb2JqZWN0X29iamVjdChyZXQsICIle3Jvd3N9cyIsIHRtcF9vYmopOworCisJCXRt cF9vYmogPSBuZXdfb2JqdHJlZSgiU1VQUE9SVCAle25hbWV9cyIpOworCQlpZiAocHJvY0Zvcm0t PnByb3N1cHBvcnQpCisJCXsKKwkJCU9pZAkJCWFyZ3R5cGVzW10gPSB7IElOVEVSTkFMT0lEIH07 CisKKwkJCS8qCisJCQkgKiBXZSBzaG91bGQgcXVhbGlmeSB0aGUgc3VwcG9ydCBmdW5jdGlvbidz IG5hbWUgaWYgaXQgd291bGRuJ3QgYmUKKwkJCSAqIHJlc29sdmVkIGJ5IGxvb2t1cCBpbiB0aGUg Y3VycmVudCBzZWFyY2ggcGF0aC4KKwkJCSAqLworCQkJYXBwZW5kX3N0cmluZ19vYmplY3QodG1w X29iaiwgIiV7bmFtZX1zIiwgIm5hbWUiLAorCQkJCQkJCQkgZ2VuZXJhdGVfZnVuY3Rpb25fbmFt ZShwcm9jRm9ybS0+cHJvc3VwcG9ydCwgMSwKKwkJCQkJCQkJCQkJCQkJTklMLCBhcmd0eXBlcywK KwkJCQkJCQkJCQkJCQkJZmFsc2UsIE5VTEwsCisJCQkJCQkJCQkJCQkJCUVYUFJfS0lORF9OT05F KSk7CisJCX0KKwkJZWxzZQorCQkJYXBwZW5kX25vdF9wcmVzZW50KHRtcF9vYmopOworCisJCWFw cGVuZF9vYmplY3Rfb2JqZWN0KHJldCwgIiV7c3VwcG9ydH1zIiwgdG1wX29iaik7CisJfQorCisJ Zm9yZWFjaChjZWxsLCBub2RlLT5vcHRpb25zKQorCXsKKwkJRGVmRWxlbSAgICAqZGVmZWwgPSAo RGVmRWxlbSAqKSBsZmlyc3QoY2VsbCk7CisKKwkJaWYgKHN0cmNtcChkZWZlbC0+ZGVmbmFtZSwg InNldCIpID09IDApCisJCXsKKwkJCVZhcmlhYmxlU2V0U3RtdCAqc3N0bXQgPSAoVmFyaWFibGVT ZXRTdG10ICopIGRlZmVsLT5hcmc7CisJCQljaGFyCSAgICp2YWx1ZSA9IEV4dHJhY3RTZXRWYXJp YWJsZUFyZ3Moc3N0bXQpOworCisJCQl0bXBfb2JqID0gZGVwYXJzZV9GdW5jdGlvblNldChzc3Rt dC0+a2luZCwgc3N0bXQtPm5hbWUsIHZhbHVlKTsKKwkJCXNldHMgPSBsYXBwZW5kKHNldHMsIG5l d19vYmplY3Rfb2JqZWN0KHRtcF9vYmopKTsKKwkJfQorCX0KKwlhcHBlbmRfYXJyYXlfb2JqZWN0 KHJldCwgIiV7c2V0X29wdGlvbnM6IH1zIiwgc2V0cyk7CisKKwkvKiBBZGQgdGhlIGZ1bmN0aW9u IGRlZmluaXRpb24gKi8KKwkodm9pZCkgU3lzQ2FjaGVHZXRBdHRyKFBST0NPSUQsIHByb2NUdXAs IEFudW1fcGdfcHJvY19wcm9zcWxib2R5LCAmaXNudWxsKTsKKwlpZiAocHJvY0Zvcm0tPnByb2xh bmcgPT0gU1FMbGFuZ3VhZ2VJZCAmJiAhaXNudWxsKQorCXsKKwkJU3RyaW5nSW5mb0RhdGEgYnVm OworCisJCWluaXRTdHJpbmdJbmZvKCZidWYpOworCQlwcmludF9mdW5jdGlvbl9zcWxib2R5KCZi dWYsIHByb2NUdXApOworCisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHJldCwgIiV7ZGVmaW5pdGlv bn1zIiwgImRlZmluaXRpb24iLAorCQkJCQkJCSBidWYuZGF0YSk7CisJfQorCWVsc2UgaWYgKHBy b2JpbiA9PSBOVUxMKQorCQlhcHBlbmRfc3RyaW5nX29iamVjdChyZXQsICJBUyAle2RlZmluaXRp b259TCIsICJkZWZpbml0aW9uIiwgc291cmNlKTsKKwllbHNlCisJeworCQlhcHBlbmRfc3RyaW5n X29iamVjdChyZXQsICJBUyAle29iamZpbGV9TCIsICJvYmpmaWxlIiwgcHJvYmluKTsKKwkJYXBw ZW5kX3N0cmluZ19vYmplY3QocmV0LCAiLCAle3N5bWJvbH1MIiwgInN5bWJvbCIsIHNvdXJjZSk7 CisJfQorCisJUmVsZWFzZVN5c0NhY2hlKGxhbmdUdXApOworCVJlbGVhc2VTeXNDYWNoZShwcm9j VHVwKTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBEZXBhcnNlIGEgQ1JFQVRFIE9QRVJB VE9SIENMQVNTIGNvbW1hbmQuCisgKgorICogVmVyYm9zZSBzeW50YXgKKyAqIENSRUFURSBPUEVS QVRPUiBDTEFTUyAle2lkZW50aXR5fUQgJXtkZWZhdWx0fXMgRk9SIFRZUEUgJXt0eXBlfVQgVVNJ TkcKKyAqICV7YW1uYW1lfUkgJXtvcGZhbWlseX1zIEFTICV7aXRlbXM6LCB9cworICovCitzdGF0 aWMgT2JqVHJlZSAqCitkZXBhcnNlX0NyZWF0ZU9wQ2xhc3NTdG10KENvbGxlY3RlZENvbW1hbmQg KmNtZCkKK3sKKwlPaWQJCQlvcGNvaWQgPSBjbWQtPmQuY3JlYXRlb3BjLmFkZHJlc3Mub2JqZWN0 SWQ7CisJSGVhcFR1cGxlCW9wY1R1cDsKKwlIZWFwVHVwbGUJb3BmVHVwOworCUZvcm1fcGdfb3Bm YW1pbHkgb3BmRm9ybTsKKwlGb3JtX3BnX29wY2xhc3Mgb3BjRm9ybTsKKwlPYmpUcmVlICAgICpy ZXQ7CisJT2JqVHJlZSAgICAqdG1wX29iajsKKwlMaXN0CSAgICpsaXN0OworCUxpc3RDZWxsICAg KmNlbGw7CisKKwkvKiBEb24ndCBkZXBhcnNlIFNRTCBjb21tYW5kcyBnZW5lcmF0ZWQgd2hpbGUg Y3JlYXRpbmcgZXh0ZW5zaW9uICovCisJaWYgKGNtZC0+aW5fZXh0ZW5zaW9uKQorCQlyZXR1cm4g TlVMTDsKKworCW9wY1R1cCA9IFNlYXJjaFN5c0NhY2hlMShDTEFPSUQsIE9iamVjdElkR2V0RGF0 dW0ob3Bjb2lkKSk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKG9wY1R1cCkpCisJCWVsb2coRVJS T1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciBvcGNsYXNzIHdpdGggT0lEICV1Iiwgb3Bjb2lk KTsKKwlvcGNGb3JtID0gKEZvcm1fcGdfb3BjbGFzcykgR0VUU1RSVUNUKG9wY1R1cCk7CisKKwlv cGZUdXAgPSBTZWFyY2hTeXNDYWNoZTEoT1BGQU1JTFlPSUQsIG9wY0Zvcm0tPm9wY2ZhbWlseSk7 CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKG9wZlR1cCkpCisJCWVsb2coRVJST1IsICJjYWNoZSBs b29rdXAgZmFpbGVkIGZvciBvcGVyYXRvciBmYW1pbHkgd2l0aCBPSUQgJXUiLCBvcGNGb3JtLT5v cGNmYW1pbHkpOworCW9wZkZvcm0gPSAoRm9ybV9wZ19vcGZhbWlseSkgR0VUU1RSVUNUKG9wZlR1 cCk7CisKKwlyZXQgPSBuZXdfb2JqdHJlZV9WQSgiQ1JFQVRFIE9QRVJBVE9SIENMQVNTICV7aWRl bnRpdHl9RCAle2RlZmF1bHR9cyBGT1IgVFlQRSAle3R5cGV9VCBVU0lORyAle2FtbmFtZX1JIiwg NCwKKwkJCQkJCSAiaWRlbnRpdHkiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJIG5ld19vYmp0cmVl X2Zvcl9xdWFsbmFtZShvcGNGb3JtLT5vcGNuYW1lc3BhY2UsCisJCQkJCQkJCQkJCQkgIE5hbWVT dHIob3BjRm9ybS0+b3BjbmFtZSkpLAorCQkJCQkJICJkZWZhdWx0IiwgT2JqVHlwZVN0cmluZywK KwkJCQkJCSBvcGNGb3JtLT5vcGNkZWZhdWx0ID8gIkRFRkFVTFQiIDogIiIsCisJCQkJCQkgInR5 cGUiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl90eXBlKG9wY0Zvcm0t Pm9wY2ludHlwZSwgLTEpLAorCQkJCQkJICJhbW5hbWUiLCBPYmpUeXBlU3RyaW5nLCBnZXRfYW1f bmFtZShvcGNGb3JtLT5vcGNtZXRob2QpKTsKKworCS8qCisJICogQWRkIHRoZSBGQU1JTFkgY2xh dXNlLCBidXQgaWYgaXQgaGFzIHRoZSBzYW1lIG5hbWUgYW5kIG5hbWVzcGFjZSBhcyB0aGUKKwkg KiBvcGNsYXNzLCB0aGVuIGhhdmUgaXQgZXhwYW5kIHRvIGVtcHR5IGJlY2F1c2UgaXQgd291bGQg Y2F1c2UgYSBmYWlsdXJlCisJICogaWYgdGhlIG9wZmFtaWx5IHdhcyBjcmVhdGVkIGludGVybmFs bHkuCisJICovCisJdG1wX29iaiA9IG5ld19vYmp0cmVlX1ZBKCJGQU1JTFkgJXtvcGZhbWlseX1E IiwgMSwKKwkJCQkJCQkib3BmYW1pbHkiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJCW5ld19vYmp0 cmVlX2Zvcl9xdWFsbmFtZShvcGZGb3JtLT5vcGZuYW1lc3BhY2UsCisJCQkJCQkJCQkJCQkJIE5h bWVTdHIob3BmRm9ybS0+b3BmbmFtZSkpKTsKKworCWlmIChzdHJjbXAoTmFtZVN0cihvcGZGb3Jt LT5vcGZuYW1lKSwgTmFtZVN0cihvcGNGb3JtLT5vcGNuYW1lKSkgPT0gMCAmJgorCQlvcGZGb3Jt LT5vcGZuYW1lc3BhY2UgPT0gb3BjRm9ybS0+b3BjbmFtZXNwYWNlKQorCQlhcHBlbmRfbm90X3By ZXNlbnQodG1wX29iaik7CisKKwlhcHBlbmRfb2JqZWN0X29iamVjdChyZXQsICIle29wZmFtaWx5 fXMiLCB0bXBfb2JqKTsKKworCS8qCisJICogQWRkIHRoZSBpbml0aWFsIGl0ZW0gbGlzdC4gIE5v dGUgd2UgYWx3YXlzIGFkZCB0aGUgU1RPUkFHRSBjbGF1c2UsIGV2ZW4KKwkgKiB3aGVuIGl0IGlz IGltcGxpY2l0IGluIHRoZSBvcmlnaW5hbCBjb21tYW5kLgorCSAqLworCXRtcF9vYmogPSBuZXdf b2JqdHJlZSgiU1RPUkFHRSIpOworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcF9vYmosICIle3R5 cGV9VCIsCisJCQkJCQkgbmV3X29ianRyZWVfZm9yX3R5cGUoT2lkSXNWYWxpZChvcGNGb3JtLT5v cGNrZXl0eXBlKSA/CisJCQkJCQkJCQkJCSAgb3BjRm9ybS0+b3Bja2V5dHlwZSA6IG9wY0Zvcm0t Pm9wY2ludHlwZSwKKwkJCQkJCQkJCQkJICAtMSkpOworCWxpc3QgPSBsaXN0X21ha2UxKG5ld19v YmplY3Rfb2JqZWN0KHRtcF9vYmopKTsKKworCS8qIEFkZCB0aGUgZGVjbGFyZWQgb3BlcmF0b3Jz ICovCisJZm9yZWFjaChjZWxsLCBjbWQtPmQuY3JlYXRlb3BjLm9wZXJhdG9ycykKKwl7CisJCU9w RmFtaWx5TWVtYmVyICpvcGVyID0gbGZpcnN0KGNlbGwpOworCisJCXRtcF9vYmogPSBuZXdfb2Jq dHJlZV9WQSgiT1BFUkFUT1IgJXtudW19biAle29wZXJhdG9yfU8oJXtsdHlwZX1ULCAle3J0eXBl fVQpIiwgNCwKKwkJCQkJCQkJIm51bSIsIE9ialR5cGVJbnRlZ2VyLCBvcGVyLT5udW1iZXIsCisJ CQkJCQkJCSJvcGVyYXRvciIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkJCW5ld19vYmp0cmVlX2Zv cl9xdWFsbmFtZV9pZChPcGVyYXRvclJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJCQlvcGVyLT5v YmplY3QpLAorCQkJCQkJCQkibHR5cGUiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJCQluZXdfb2Jq dHJlZV9mb3JfdHlwZShvcGVyLT5sZWZ0dHlwZSwgLTEpLAorCQkJCQkJCQkicnR5cGUiLCBPYmpU eXBlT2JqZWN0LAorCQkJCQkJCQluZXdfb2JqdHJlZV9mb3JfdHlwZShvcGVyLT5yaWdodHR5cGUs IC0xKSk7CisKKwkJLyogQWRkIHRoZSBGT1IgU0VBUkNIIC8gRk9SIE9SREVSIEJZIGNsYXVzZSAq LworCQlpZiAob3Blci0+c29ydGZhbWlseSA9PSBJbnZhbGlkT2lkKQorCQkJYXBwZW5kX3N0cmlu Z19vYmplY3QodG1wX29iaiwgIiV7cHVycG9zZX1zIiwgInB1cnBvc2UiLAorCQkJCQkJCQkgIkZP UiBTRUFSQ0giKTsKKwkJZWxzZQorCQl7CisJCQlPYmpUcmVlICAgICp0bXBfb2JqMjsKKworCQkJ dG1wX29iajIgPSBuZXdfb2JqdHJlZSgiRk9SIE9SREVSIEJZICV7b3BmYW1pbHl9RCIpOworCQkJ YXBwZW5kX29iamVjdF9vYmplY3QodG1wX29iajIsICJvcGZhbWlseSIsCisJCQkJCQkJCSBuZXdf b2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoT3BlcmF0b3JGYW1pbHlSZWxhdGlvbklkLAorCQkJCQkJ CQkJCQkJCQkJIG9wZXItPnNvcnRmYW1pbHkpKTsKKwkJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRt cF9vYmosICIle3B1cnBvc2V9cyIsIHRtcF9vYmoyKTsKKwkJfQorCisJCWxpc3QgPSBsYXBwZW5k KGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcF9vYmopKTsKKwl9CisKKwkvKiBBZGQgdGhlIGRl Y2xhcmVkIHN1cHBvcnQgZnVuY3Rpb25zICovCisJZm9yZWFjaChjZWxsLCBjbWQtPmQuY3JlYXRl b3BjLnByb2NlZHVyZXMpCisJeworCQlPcEZhbWlseU1lbWJlciAqcHJvYyA9IGxmaXJzdChjZWxs KTsKKwkJSGVhcFR1cGxlCXByb2NUdXA7CisJCUZvcm1fcGdfcHJvYyBwcm9jRm9ybTsKKwkJT2lk CQkgICAqcHJvYXJndHlwZXM7CisJCUxpc3QJICAgKmFyZ2xpc3QgPSBOSUw7CisJCWludAkJCWk7 CisKKwkJcHJvY1R1cCA9IFNlYXJjaFN5c0NhY2hlMShQUk9DT0lELCBPYmplY3RJZEdldERhdHVt KHByb2MtPm9iamVjdCkpOworCQlpZiAoIUhlYXBUdXBsZUlzVmFsaWQocHJvY1R1cCkpCisJCQll bG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3IgcHJvY2VkdXJlIHdpdGggT0lEICV1 IiwKKwkJCQkgcHJvYy0+b2JqZWN0KTsKKwkJcHJvY0Zvcm0gPSAoRm9ybV9wZ19wcm9jKSBHRVRT VFJVQ1QocHJvY1R1cCk7CisKKwkJdG1wX29iaiA9IG5ld19vYmp0cmVlX1ZBKCJGVU5DVElPTiAl e251bX1uICgle2x0eXBlfVQsICV7cnR5cGV9VCkgJXtmdW5jdGlvbn1EIiwgNCwKKwkJCQkJCQkJ Im51bSIsIE9ialR5cGVJbnRlZ2VyLCBwcm9jLT5udW1iZXIsCisJCQkJCQkJCSJsdHlwZSIsIE9i alR5cGVPYmplY3QsCisJCQkJCQkJCW5ld19vYmp0cmVlX2Zvcl90eXBlKHByb2MtPmxlZnR0eXBl LCAtMSksCisJCQkJCQkJCSJydHlwZSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkJCW5ld19vYmp0 cmVlX2Zvcl90eXBlKHByb2MtPnJpZ2h0dHlwZSwgLTEpLAorCQkJCQkJCQkiZnVuY3Rpb24iLCBP YmpUeXBlT2JqZWN0LAorCQkJCQkJCQluZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUocHJvY0Zvcm0t PnByb25hbWVzcGFjZSwKKwkJCQkJCQkJCQkJCQkJIE5hbWVTdHIocHJvY0Zvcm0tPnByb25hbWUp KSk7CisKKwkJcHJvYXJndHlwZXMgPSBwcm9jRm9ybS0+cHJvYXJndHlwZXMudmFsdWVzOworCQlm b3IgKGkgPSAwOyBpIDwgcHJvY0Zvcm0tPnByb25hcmdzOyBpKyspCisJCXsKKwkJCU9ialRyZWUg ICAgKmFyZzsKKworCQkJYXJnID0gbmV3X29ianRyZWVfZm9yX3R5cGUocHJvYXJndHlwZXNbaV0s IC0xKTsKKwkJCWFyZ2xpc3QgPSBsYXBwZW5kKGFyZ2xpc3QsIG5ld19vYmplY3Rfb2JqZWN0KGFy ZykpOworCQl9CisKKwkJYXBwZW5kX2Zvcm1hdF9zdHJpbmcodG1wX29iaiwgIigiKTsKKwkJYXBw ZW5kX2FycmF5X29iamVjdCh0bXBfb2JqLCAiJXthcmd0eXBlczosIH1UIiwgYXJnbGlzdCk7CisJ CWFwcGVuZF9mb3JtYXRfc3RyaW5nKHRtcF9vYmosICIpIik7CisKKwkJUmVsZWFzZVN5c0NhY2hl KHByb2NUdXApOworCisJCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRt cF9vYmopKTsKKwl9CisKKwlhcHBlbmRfYXJyYXlfb2JqZWN0KHJldCwgIkFTICV7aXRlbXM6LCB9 cyIsIGxpc3QpOworCisJUmVsZWFzZVN5c0NhY2hlKG9wZlR1cCk7CisJUmVsZWFzZVN5c0NhY2hl KG9wY1R1cCk7CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogRGVwYXJzZSBhIENyZWF0ZU9w RmFtaWx5U3RtdCAoQ1JFQVRFIE9QRVJBVE9SIEZBTUlMWSkKKyAqCisgKiBHaXZlbiBhIG9wZXJh dG9yIGZhbWlseSBPSUQgYW5kIHRoZSBwYXJzZSB0cmVlIHRoYXQgY3JlYXRlZCBpdCwgcmV0dXJu IGFuCisgKiBPYmpUcmVlIHJlcHJlc2VudGluZyB0aGUgY3JlYXRpb24gY29tbWFuZC4KKyAqCisg KiBWZXJib3NlIHN5bnRheAorICogQ1JFQVRFIE9QRVJBVE9SIEZBTUlMWSAle2lkZW50aXR5fUQg VVNJTkcgJXthbW5hbWV9SQorICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0NyZWF0ZU9w RmFtaWx5KE9pZCBvYmplY3RJZCwgTm9kZSAqcGFyc2V0cmVlKQoreworCUhlYXBUdXBsZQlvcGZU dXA7CisJSGVhcFR1cGxlCWFtVHVwOworCUZvcm1fcGdfb3BmYW1pbHkgb3BmRm9ybTsKKwlGb3Jt X3BnX2FtCWFtRm9ybTsKKwlPYmpUcmVlICAgICpyZXQ7CisKKwlvcGZUdXAgPSBTZWFyY2hTeXND YWNoZTEoT1BGQU1JTFlPSUQsIE9iamVjdElkR2V0RGF0dW0ob2JqZWN0SWQpKTsKKwlpZiAoIUhl YXBUdXBsZUlzVmFsaWQob3BmVHVwKSkKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWls ZWQgZm9yIG9wZXJhdG9yIGZhbWlseSB3aXRoIE9JRCAldSIsIG9iamVjdElkKTsKKwlvcGZGb3Jt ID0gKEZvcm1fcGdfb3BmYW1pbHkpIEdFVFNUUlVDVChvcGZUdXApOworCisJYW1UdXAgPSBTZWFy Y2hTeXNDYWNoZTEoQU1PSUQsIE9iamVjdElkR2V0RGF0dW0ob3BmRm9ybS0+b3BmbWV0aG9kKSk7 CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKGFtVHVwKSkKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxv b2t1cCBmYWlsZWQgZm9yIGFjY2VzcyBtZXRob2Qgd2l0aCBPSUQgJXUiLAorCQkJIG9wZkZvcm0t Pm9wZm1ldGhvZCk7CisJYW1Gb3JtID0gKEZvcm1fcGdfYW0pIEdFVFNUUlVDVChhbVR1cCk7CisK KwlyZXQgPSBuZXdfb2JqdHJlZV9WQSgiQ1JFQVRFIE9QRVJBVE9SIEZBTUlMWSAle2lkZW50aXR5 fUQgVVNJTkcgJXthbW5hbWV9SSIsIDIsCisJCQkJCQkgImlkZW50aXR5IiwgT2JqVHlwZU9iamVj dCwKKwkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUob3BmRm9ybS0+b3BmbmFtZXNwYWNl LAorCQkJCQkJCQkJCQkJICBOYW1lU3RyKG9wZkZvcm0tPm9wZm5hbWUpKSwKKwkJCQkJCSAiYW1u YW1lIiwgT2JqVHlwZVN0cmluZywgTmFtZVN0cihhbUZvcm0tPmFtbmFtZSkpOworCisJUmVsZWFz ZVN5c0NhY2hlKGFtVHVwKTsKKwlSZWxlYXNlU3lzQ2FjaGUob3BmVHVwKTsKKworCXJldHVybiBy ZXQ7Cit9CisKKy8qCisgKiBEZXBhcnNlIGEgQ3JlYXRlUG9saWN5U3RtdCAoQ1JFQVRFIFBPTElD WSkKKyAqCisgKiBHaXZlbiBhIHBvbGljeSBPSUQgYW5kIHRoZSBwYXJzZSB0cmVlIHRoYXQgY3Jl YXRlZCBpdCwgcmV0dXJuIGFuIE9ialRyZWUKKyAqIHJlcHJlc2VudGluZyB0aGUgY3JlYXRpb24g Y29tbWFuZC4KKyAqCisgKiBWZXJib3NlIHN5bnRheAorICogQ1JFQVRFIFBPTElDWSAle2lkZW50 aXR5fUkKKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9DcmVhdGVQb2xpY3lTdG10KE9p ZCBvYmplY3RJZCwgTm9kZSAqcGFyc2V0cmVlKQoreworCUNyZWF0ZVBvbGljeVN0bXQgKm5vZGUg PSAoQ3JlYXRlUG9saWN5U3RtdCAqKSBwYXJzZXRyZWU7CisJT2JqVHJlZSAgICAqcmV0OworCisJ cmV0ID0gbmV3X29ianRyZWVfVkEoIkNSRUFURSBQT0xJQ1kgJXtpZGVudGl0eX1JIiwgMSwKKwkJ CQkJCSAiaWRlbnRpdHkiLCBPYmpUeXBlU3RyaW5nLCBub2RlLT5wb2xpY3lfbmFtZSk7CisKKwkv KiBBZGQgdGhlIHJlc3Qgb2YgdGhlIHN0dWZmICovCisJYWRkX3BvbGljeV9jbGF1c2VzKHJldCwg b2JqZWN0SWQsIG5vZGUtPnJvbGVzLCBub2RlLT5xdWFsICE9IE5VTEwsCisJCQkJCSAgIG5vZGUt PndpdGhfY2hlY2sgIT0gTlVMTCk7CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogRGVwYXJz ZSBhIEFsdGVyUG9saWN5U3RtdCAoQUxURVIgUE9MSUNZKQorICoKKyAqIEdpdmVuIGEgcG9saWN5 IE9JRCBhbmQgdGhlIHBhcnNlIHRyZWUgb2YgdGhlIEFMVEVSIFBPTElDWSBjb21tYW5kLCByZXR1 cm4KKyAqIGFuIE9ialRyZWUgcmVwcmVzZW50aW5nIHRoZSBhbHRlciBjb21tYW5kLgorICoKKyAq IFZlcmJvc2Ugc3ludGF4CisgKiBBTFRFUiBQT0xJQ1kgJXtpZGVudGl0eX1JCisgKi8KK3N0YXRp YyBPYmpUcmVlICoKK2RlcGFyc2VfQWx0ZXJQb2xpY3lTdG10KE9pZCBvYmplY3RJZCwgTm9kZSAq cGFyc2V0cmVlKQoreworCUFsdGVyUG9saWN5U3RtdCAqbm9kZSA9IChBbHRlclBvbGljeVN0bXQg KikgcGFyc2V0cmVlOworCU9ialRyZWUgICAgKnJldDsKKworCXJldCA9IG5ld19vYmp0cmVlX1ZB KCJBTFRFUiBQT0xJQ1kgJXtpZGVudGl0eX1JIiwgMSwKKwkJCQkJCSAiaWRlbnRpdHkiLCBPYmpU eXBlU3RyaW5nLCBub2RlLT5wb2xpY3lfbmFtZSk7CisKKwkvKiBBZGQgdGhlIHJlc3Qgb2YgdGhl IHN0dWZmICovCisJYWRkX3BvbGljeV9jbGF1c2VzKHJldCwgb2JqZWN0SWQsIG5vZGUtPnJvbGVz LCBub2RlLT5xdWFsICE9IE5VTEwsCisJCQkJCSAgIG5vZGUtPndpdGhfY2hlY2sgIT0gTlVMTCk7 CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogRGVwYXJzZSBhIENyZWF0ZVNjaGVtYVN0bXQu CisgKgorICogR2l2ZW4gYSBzY2hlbWEgT0lEIGFuZCB0aGUgcGFyc2UgdHJlZSB0aGF0IGNyZWF0 ZWQgaXQsIHJldHVybiBhbiBPYmpUcmVlCisgKiByZXByZXNlbnRpbmcgdGhlIGNyZWF0aW9uIGNv bW1hbmQuCisgKgorICogVmVyYm9zZSBzeW50YXgKKyAqIENSRUFURSBTQ0hFTUEgJXtpZl9ub3Rf ZXhpc3RzfXMgJXtuYW1lfUkgJXthdXRob3JpemF0aW9ufXMKKyovCitzdGF0aWMgT2JqVHJlZSAq CitkZXBhcnNlX0NyZWF0ZVNjaGVtYVN0bXQoT2lkIG9iamVjdElkLCBOb2RlICpwYXJzZXRyZWUp Cit7CisJQ3JlYXRlU2NoZW1hU3RtdCAqbm9kZSA9IChDcmVhdGVTY2hlbWFTdG10ICopIHBhcnNl dHJlZTsKKwlPYmpUcmVlICAgICpyZXQ7CisJT2JqVHJlZSAgICAqYXV0aDsKKworCXJldCA9IG5l d19vYmp0cmVlX1ZBKCJDUkVBVEUgU0NIRU1BICV7aWZfbm90X2V4aXN0c31zICV7bmFtZX1JIiwg MiwKKwkJCQkJCSAiaWZfbm90X2V4aXN0cyIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkgbm9kZS0+ aWZfbm90X2V4aXN0cyA/ICJJRiBOT1QgRVhJU1RTIiA6ICIiLAorCQkJCQkJICJuYW1lIiwgT2Jq VHlwZVN0cmluZywKKwkJCQkJCSBub2RlLT5zY2hlbWFuYW1lID8gbm9kZS0+c2NoZW1hbmFtZSA6 ICIiKTsKKworCWF1dGggPSBuZXdfb2JqdHJlZSgiQVVUSE9SSVpBVElPTiIpOworCWlmIChub2Rl LT5hdXRocm9sZSkKKwkJYXBwZW5kX3N0cmluZ19vYmplY3QoYXV0aCwgIiV7YXV0aG9yaXphdGlv bl9yb2xlfUkiLAorCQkJCQkJCSAiYXV0aG9yaXphdGlvbl9yb2xlIiwKKwkJCQkJCQkgZ2V0X3Jv bGVzcGVjX25hbWUobm9kZS0+YXV0aHJvbGUpKTsKKwllbHNlCisJeworCQlhcHBlbmRfbnVsbF9v YmplY3QoYXV0aCwgIiV7YXV0aG9yaXphdGlvbl9yb2xlfUkiKTsKKwkJYXBwZW5kX25vdF9wcmVz ZW50KGF1dGgpOworCX0KKwlhcHBlbmRfb2JqZWN0X29iamVjdChyZXQsICIle2F1dGhvcml6YXRp b259cyIsIGF1dGgpOworCisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIFJldHVybiB0aGUgZGVm YXVsdCB2YWx1ZSBvZiBhIGRvbWFpbi4KKyAqLworc3RhdGljIGNoYXIgKgorRG9tYWluR2V0RGVm YXVsdChIZWFwVHVwbGUgZG9tVHVwLCBib29sIG1pc3Npbmdfb2spCit7CisJRGF0dW0JCWRlZjsK KwlOb2RlCSAgICpkZWZ2YWw7CisJY2hhcgkgICAqZGVmc3RyOworCWJvb2wJCWlzbnVsbDsKKwor CWRlZiA9IFN5c0NhY2hlR2V0QXR0cihUWVBFT0lELCBkb21UdXAsIEFudW1fcGdfdHlwZV90eXBk ZWZhdWx0YmluLAorCQkJCQkJICAmaXNudWxsKTsKKwlpZiAoaXNudWxsKQorCXsKKwkJaWYgKCFt aXNzaW5nX29rKQorCQkJZWxvZyhFUlJPUiwgImRvbWFpbiBcIiVzXCIgZG9lcyBub3QgaGF2ZSBh IGRlZmF1bHQgdmFsdWUiLAorCQkJCU5hbWVTdHIoKChGb3JtX3BnX3R5cGUpIEdFVFNUUlVDVChk b21UdXApKS0+dHlwbmFtZSkpOworCQllbHNlCisJCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlkZWZ2 YWwgPSBzdHJpbmdUb05vZGUoVGV4dERhdHVtR2V0Q1N0cmluZyhkZWYpKTsKKwlkZWZzdHIgPSBk ZXBhcnNlX2V4cHJlc3Npb24oZGVmdmFsLCBOVUxMIC8qIGRwY29udGV4dD8gKi8gLAorCQkJCQkJ CQlmYWxzZSwgZmFsc2UpOworCisJcmV0dXJuIGRlZnN0cjsKK30KKworLyoKKyAqIERlcGFyc2Ug YSBBbHRlckRvbWFpblN0bXQuCisgKgorICogVmVyYm9zZSBzeW50YXgKKyAqIEFMVEVSIERPTUFJ TiAle2lkZW50aXR5fUQgRFJPUCBERUZBVUxUCisgKiBPUgorICogQUxURVIgRE9NQUlOICV7aWRl bnRpdHl9RCBTRVQgREVGQVVMVCAle2RlZmF1bHR9cworICogT1IKKyAqIEFMVEVSIERPTUFJTiAl e2lkZW50aXR5fUQgRFJPUCBOT1QgTlVMTAorICogT1IKKyAqIEFMVEVSIERPTUFJTiAle2lkZW50 aXR5fUQgU0VUIE5PVCBOVUxMCisgKiBPUgorICogQUxURVIgRE9NQUlOICV7aWRlbnRpdHl9RCBB REQgQ09OU1RSQUlOVCAle2NvbnN0cmFpbnRfbmFtZX1zICV7ZGVmaW5pdGlvbn1zCisgKiBPUgor ICogQUxURVIgRE9NQUlOICV7aWRlbnRpdHl9RCBEUk9QIENPTlNUUkFJTlQgSUYgRVhJU1RTICV7 Y29uc3RyYWludF9uYW1lfXMgJXtjYXNjYWRlfXMKKyAqIE9SCisgKiBBTFRFUiBET01BSU4gJXtp ZGVudGl0eX1EIFZBTElEQVRFIENPTlNUUkFJTlQgJXtjb25zdHJhaW50X25hbWV9cworICovCitz dGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0FsdGVyRG9tYWluU3RtdChPaWQgb2JqZWN0SWQsIE5v ZGUgKnBhcnNldHJlZSwKKwkJCQkJCU9iamVjdEFkZHJlc3MgY29uc3RyYWludEFkZHIpCit7CisJ QWx0ZXJEb21haW5TdG10ICpub2RlID0gKEFsdGVyRG9tYWluU3RtdCAqKSBwYXJzZXRyZWU7CisJ SGVhcFR1cGxlCWRvbVR1cDsKKwlGb3JtX3BnX3R5cGUgZG9tRm9ybTsKKwlPYmpUcmVlICAgICpy ZXQ7CisKKwlkb21UdXAgPSBTZWFyY2hTeXNDYWNoZTEoVFlQRU9JRCwgb2JqZWN0SWQpOworCWlm ICghSGVhcFR1cGxlSXNWYWxpZChkb21UdXApKQorCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3Vw IGZhaWxlZCBmb3IgZG9tYWluIHdpdGggT0lEICV1Iiwgb2JqZWN0SWQpOworCWRvbUZvcm0gPSAo Rm9ybV9wZ190eXBlKSBHRVRTVFJVQ1QoZG9tVHVwKTsKKworCXN3aXRjaCAobm9kZS0+c3VidHlw ZSkKKwl7CisJCWNhc2UgJ1QnOgorCQkJLyogU0VUIERFRkFVTFQgLyBEUk9QIERFRkFVTFQgKi8K KwkJCWlmIChub2RlLT5kZWYgPT0gTlVMTCkKKwkJCQlyZXQgPSBuZXdfb2JqdHJlZV9WQSgiQUxU RVIgRE9NQUlOICV7aWRlbnRpdHl9RCBEUk9QIERFRkFVTFQiLCAyLAorCQkJCQkJCQkJICJ0eXBl IiwgT2JqVHlwZVN0cmluZywgImRyb3AgZGVmYXVsdCIsCisJCQkJCQkJCQkgImlkZW50aXR5Iiwg T2JqVHlwZU9iamVjdCwKKwkJCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUoZG9tRm9y bS0+dHlwbmFtZXNwYWNlLAorCQkJCQkJCQkJCQkJCQkJICBOYW1lU3RyKGRvbUZvcm0tPnR5cG5h bWUpKSk7CisJCQllbHNlCisJCQkJcmV0ID0gbmV3X29ianRyZWVfVkEoIkFMVEVSIERPTUFJTiAl e2lkZW50aXR5fUQgU0VUIERFRkFVTFQgJXtkZWZhdWx0fXMiLCAzLAorCQkJCQkJCQkJICJ0eXBl IiwgT2JqVHlwZVN0cmluZywgInNldCBkZWZhdWx0IiwKKwkJCQkJCQkJCSAiaWRlbnRpdHkiLCBP YmpUeXBlT2JqZWN0LAorCQkJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZShkb21Gb3Jt LT50eXBuYW1lc3BhY2UsCisJCQkJCQkJCQkJCQkJCQkgIE5hbWVTdHIoZG9tRm9ybS0+dHlwbmFt ZSkpLAorCQkJCQkJCQkJICJkZWZhdWx0IiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCQkJCSBEb21h aW5HZXREZWZhdWx0KGRvbVR1cCwgZmFsc2UpKTsKKwkJCWJyZWFrOworCQljYXNlICdOJzoKKwkJ CS8qIERST1AgTk9UIE5VTEwgKi8KKwkJCXJldCA9IG5ld19vYmp0cmVlX1ZBKCJBTFRFUiBET01B SU4gJXtpZGVudGl0eX1EIERST1AgTk9UIE5VTEwiLCAyLAorCQkJCQkJCQkJICAidHlwZSIsIE9i alR5cGVTdHJpbmcsICJkcm9wIG5vdCBudWxsIiwKKwkJCQkJCQkJCSAgImlkZW50aXR5IiwgT2Jq VHlwZU9iamVjdCwKKwkJCQkJCQkJCSAgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lKGRvbUZvcm0t PnR5cG5hbWVzcGFjZSwKKwkJCQkJCQkJCQkJCQkJCSAgIE5hbWVTdHIoZG9tRm9ybS0+dHlwbmFt ZSkpKTsKKwkJCWJyZWFrOworCQljYXNlICdPJzoKKwkJCS8qIFNFVCBOT1QgTlVMTCAqLworCQkJ cmV0ID0gbmV3X29ianRyZWVfVkEoIkFMVEVSIERPTUFJTiAle2lkZW50aXR5fUQgU0VUIE5PVCBO VUxMIiwgMiwKKwkJCQkJCQkJICJ0eXBlIiwgT2JqVHlwZVN0cmluZywgInNldCBub3QgbnVsbCIs CisJCQkJCQkJCSAiaWRlbnRpdHkiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJCQkgbmV3X29ianRy ZWVfZm9yX3F1YWxuYW1lKGRvbUZvcm0tPnR5cG5hbWVzcGFjZSwKKwkJCQkJCQkJCQkJCQkJICBO YW1lU3RyKGRvbUZvcm0tPnR5cG5hbWUpKSk7CisJCQlicmVhazsKKwkJY2FzZSAnQyc6CisJCQkv KgorCQkJICogQUREIENPTlNUUkFJTlQuICBPbmx5IENIRUNLIGNvbnN0cmFpbnRzIGFyZSBzdXBw b3J0ZWQgYnkKKwkJCSAqIGRvbWFpbnMKKwkJCSAqLworCQkJcmV0ID0gbmV3X29ianRyZWVfVkEo IkFMVEVSIERPTUFJTiAle2lkZW50aXR5fUQgQUREIENPTlNUUkFJTlQgJXtjb25zdHJhaW50X25h bWV9cyAle2RlZmluaXRpb259cyIsIDQsCisJCQkJCQkJCSAidHlwZSIsIE9ialR5cGVTdHJpbmcs ICJhZGQgY29uc3RyYWludCIsCisJCQkJCQkJCSAiaWRlbnRpdHkiLCBPYmpUeXBlT2JqZWN0LAor CQkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lKGRvbUZvcm0tPnR5cG5hbWVzcGFjZSwK KwkJCQkJCQkJCQkJCQkJICBOYW1lU3RyKGRvbUZvcm0tPnR5cG5hbWUpKSwKKwkJCQkJCQkJICJj b25zdHJhaW50X25hbWUiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJCQkgZ2V0X2NvbnN0cmFpbnRf bmFtZShjb25zdHJhaW50QWRkci5vYmplY3RJZCksCisJCQkJCQkJCSAiZGVmaW5pdGlvbiIsIE9i alR5cGVTdHJpbmcsCisJCQkJCQkJCSBwZ19nZXRfY29uc3RyYWludGRlZl9jb21tYW5kX3NpbXBs ZShjb25zdHJhaW50QWRkci5vYmplY3RJZCkpOworCQkJYnJlYWs7CisJCWNhc2UgJ1YnOgorCQkJ LyogVkFMSURBVEUgQ09OU1RSQUlOVCAqLworCQkJLyoKKwkJCSAqIFByb2Nlc3Mgc3VidHlwZT1z cGVjaWZpYyBvcHRpb25zLiBWYWxpZGF0aW9uIGEgY29uc3RyYWludAorCQkJICogcmVxdWlyZXMg aXRzIG5hbWUuCisJCQkgKi8KKwkJCXJldCA9IG5ld19vYmp0cmVlX1ZBKCJBTFRFUiBET01BSU4g JXtpZGVudGl0eX1EIFZBTElEQVRFIENPTlNUUkFJTlQgJXtjb25zdHJhaW50X25hbWV9cyIsIDMs CisJCQkJCQkJCSAidHlwZSIsIE9ialR5cGVTdHJpbmcsICJ2YWxpZGF0ZSBjb25zdHJhaW50IiwK KwkJCQkJCQkJICJpZGVudGl0eSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkJCSBuZXdfb2JqdHJl ZV9mb3JfcXVhbG5hbWUoZG9tRm9ybS0+dHlwbmFtZXNwYWNlLAorCQkJCQkJCQkJCQkJCQkgIE5h bWVTdHIoZG9tRm9ybS0+dHlwbmFtZSkpLAorCQkJCQkJCQkgImNvbnN0cmFpbnRfbmFtZSIsIE9i alR5cGVTdHJpbmcsIG5vZGUtPm5hbWUpOworCQkJYnJlYWs7CisJCWNhc2UgJ1gnOgorCQkJewor CQkJCU9ialRyZWUgICAgKnRtcF9vYmo7CisKKwkJCQkvKiBEUk9QIENPTlNUUkFJTlQgKi8KKwkJ CQlyZXQgPSBuZXdfb2JqdHJlZV9WQSgiQUxURVIgRE9NQUlOICV7aWRlbnRpdHl9RCBEUk9QIENP TlNUUkFJTlQgSUYgRVhJU1RTICV7Y29uc3RyYWludF9uYW1lfXMiLCAzLAorCQkJCQkJCQkJCSJ0 eXBlIiwgT2JqVHlwZVN0cmluZywgImRyb3AgY29uc3RyYWludCIsCisJCQkJCQkJCQkJImlkZW50 aXR5IiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCQkJCQluZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUo ZG9tRm9ybS0+dHlwbmFtZXNwYWNlLAorCQkJCQkJCQkJCQkJCQkJCU5hbWVTdHIoZG9tRm9ybS0+ dHlwbmFtZSkpLAorCQkJCQkJCQkJCSJjb25zdHJhaW50X25hbWUiLCBPYmpUeXBlU3RyaW5nLCBu b2RlLT5uYW1lKTsKKworCQkJCXRtcF9vYmogPSBuZXdfb2JqdHJlZV9WQSgiQ0FTQ0FERSIsIDEs CisJCQkJCQkJCQkJInByZXNlbnQiLCBPYmpUeXBlQm9vbCwgbm9kZS0+YmVoYXZpb3IgPT0gRFJP UF9DQVNDQURFKTsKKworCQkJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHJldCwgIiV7Y2FzY2FkZX1z IiwgdG1wX29iaik7CisJCQl9CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWVsb2coRVJST1Is ICJpbnZhbGlkIHN1YnR5cGUgJWMiLCBub2RlLT5zdWJ0eXBlKTsKKwl9CisKKwkvKiBEb25lICov CisJUmVsZWFzZVN5c0NhY2hlKGRvbVR1cCk7CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICog RGVwYXJzZSBhIENyZWF0ZVN0YXRzU3RtdC4KKyAqCisgKiBHaXZlbiBhIHN0YXRpc3RpY3MgT0lE IGFuZCB0aGUgcGFyc2UgdHJlZSB0aGF0IGNyZWF0ZWQgaXQsIHJldHVybiBhbiBPYmpUcmVlCisg KiByZXByZXNlbnRpbmcgdGhlIGNyZWF0aW9uIGNvbW1hbmQuCisgKgorICogVmVyYm9zZSBzeW50 YXgKKyAqIENSRUFURSBTVEFUSVNUSUNTICV7aWZfbm90X2V4aXN0c31zICV7aWRlbnRpdHl9RCBP TiAle2V4cHI6LCB9cyBGUk9NICV7c3RhdF90YWJsZV9pZGVudGl0eX1ECisgKi8KK3N0YXRpYyBP YmpUcmVlICoKK2RlcGFyc2VfQ3JlYXRlU3RhdGlzdGljc1N0bXQoT2lkIG9iamVjdElkLCBOb2Rl ICpwYXJzZXRyZWUpCit7CisJQ3JlYXRlU3RhdHNTdG10ICpub2RlID0gKENyZWF0ZVN0YXRzU3Rt dCAqKSBwYXJzZXRyZWU7CisJRm9ybV9wZ19zdGF0aXN0aWNfZXh0IHN0YXRmb3JtOworCU9ialRy ZWUgICAgKnJldDsKKwlIZWFwVHVwbGUJdHVwOworCURhdHVtCQlkYXR1bTsKKwlib29sCQlpc251 bGw7CisJTGlzdAkgICAqc3RhdGV4cHJzID0gTklMOworCisJdHVwID0gU2VhcmNoU3lzQ2FjaGUx KFNUQVRFWFRPSUQsIE9iamVjdElkR2V0RGF0dW0ob2JqZWN0SWQpKTsKKwlpZiAoIUhlYXBUdXBs ZUlzVmFsaWQodHVwKSkKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIHN0 YXRpc3RpYyB3aXRoIE9JRCAldSIsIG9iamVjdElkKTsKKworCXN0YXRmb3JtID0gKEZvcm1fcGdf c3RhdGlzdGljX2V4dCkgR0VUU1RSVUNUKHR1cCk7CisKKwlyZXQgPSBuZXdfb2JqdHJlZV9WQSgi Q1JFQVRFIFNUQVRJU1RJQ1MgJXtpZl9ub3RfZXhpc3RzfXMgJXtpZGVudGl0eX1EIiwgMiwKKwkJ CQkJCSAiaWZfbm90X2V4aXN0cyIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkgbm9kZS0+aWZfbm90 X2V4aXN0cyA/ICJJRiBOT1QgRVhJU1RTIiA6ICIiLAorCQkJCQkJICJpZGVudGl0eSIsIE9ialR5 cGVPYmplY3QsCisJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lKHN0YXRmb3JtLT5zdHhu YW1lc3BhY2UsCisJCQkJCQkJCQkJCQkgIE5hbWVTdHIoc3RhdGZvcm0tPnN0eG5hbWUpKSk7CisK KwlkYXR1bSA9IFN5c0NhY2hlR2V0QXR0cihTVEFURVhUT0lELCB0dXAsIEFudW1fcGdfc3RhdGlz dGljX2V4dF9zdHhleHBycywKKwkJCQkJCQkmaXNudWxsKTsKKwlpZiAoIWlzbnVsbCkKKwl7CisJ CUxpc3RDZWxsICAgKmxjOworCQlSZWxhdGlvbglzdGF0c3JlbDsKKwkJTGlzdAkgICAqY29udGV4 dDsKKwkJTGlzdAkgICAqZXhwcnMgPSBOSUw7CisJCWNoYXIJICAgKmV4cHJzU3RyaW5nOworCisJ CXN0YXRzcmVsID0gcmVsYXRpb25fb3BlbihzdGF0Zm9ybS0+c3R4cmVsaWQsIEFjY2Vzc1NoYXJl TG9jayk7CisJCWNvbnRleHQgPSBkZXBhcnNlX2NvbnRleHRfZm9yKFJlbGF0aW9uR2V0UmVsYXRp b25OYW1lKHN0YXRzcmVsKSwKKwkJCQkJCQkJCSAgUmVsYXRpb25HZXRSZWxpZChzdGF0c3JlbCkp OworCisJCWV4cHJzU3RyaW5nID0gVGV4dERhdHVtR2V0Q1N0cmluZyhkYXR1bSk7CisJCWV4cHJz ID0gKExpc3QgKikgc3RyaW5nVG9Ob2RlKGV4cHJzU3RyaW5nKTsKKworCQlmb3JlYWNoKGxjLCBl eHBycykKKwkJeworCQkJTm9kZQkgICAqZXhwciA9IChOb2RlICopIGxmaXJzdChsYyk7CisJCQlj aGFyCSAgICpzdGF0ZXhwcjsKKworCQkJc3RhdGV4cHIgPSBkZXBhcnNlX2V4cHJlc3Npb24oZXhw ciwgY29udGV4dCwgZmFsc2UsIGZhbHNlKTsKKwkJCXN0YXRleHBycyA9IGxhcHBlbmQoc3RhdGV4 cHJzLCBuZXdfc3RyaW5nX29iamVjdChzdGF0ZXhwcikpOworCQl9CisKKwkJYXBwZW5kX2FycmF5 X29iamVjdChyZXQsICJPTiAle2V4cHI6LCB9cyIsIHN0YXRleHBycyk7CisJCXBmcmVlKGV4cHJz U3RyaW5nKTsKKwkJcmVsYXRpb25fY2xvc2Uoc3RhdHNyZWwsIEFjY2Vzc1NoYXJlTG9jayk7CisJ fQorCisJZGF0dW0gPSBTeXNDYWNoZUdldEF0dHIoU1RBVEVYVE9JRCwgdHVwLCBBbnVtX3BnX3N0 YXRpc3RpY19leHRfc3R4a2V5cywKKwkJCQkJCQkmaXNudWxsKTsKKwlpZiAoIWlzbnVsbCkKKwl7 CisJCWludAkJCWtleW5vOworCQljaGFyCSAgICphdHRuYW1lOworCQlMaXN0CSAgICpzdGF0Y29s cyA9IE5JTDsKKwkJaW50MnZlY3RvciAqaW5kb3B0aW9uOworCisJCWluZG9wdGlvbiA9IChpbnQy dmVjdG9yICopIERhdHVtR2V0UG9pbnRlcihkYXR1bSk7CisKKwkJZm9yIChrZXlubyA9IDA7IGtl eW5vIDwgaW5kb3B0aW9uLT5kaW0xOyBrZXlubysrKQorCQl7CisJCQlhdHRuYW1lID0gZ2V0X2F0 dG5hbWUoc3RhdGZvcm0tPnN0eHJlbGlkLCBpbmRvcHRpb24tPnZhbHVlc1trZXlub10sCisJCQkJ CQkJCSAgZmFsc2UpOworCQkJc3RhdGNvbHMgPSBsYXBwZW5kKHN0YXRjb2xzLCBuZXdfc3RyaW5n X29iamVjdChhdHRuYW1lKSk7CisJCX0KKworCQlpZiAoaW5kb3B0aW9uLT5kaW0xKQorCQl7CisJ CQkvKiBBcHBlbmQgYSAnLCcgaWYgc3RhdGV4cHJzIGlzIHByZXNlbnQgZWxzZSBhcHBlbmQgJ09O JyAqLworCQkJYXBwZW5kX3N0cmluZ19vYmplY3QocmV0LCAiJXtjb21tYX1zIiwgImNvbW1hIiwK KwkJCQkJCQkJIHN0YXRleHBycyA/ICIsIiA6ICJPTiIpOworCQkJYXBwZW5kX2FycmF5X29iamVj dChyZXQsICIle2NvbHM6LCB9cyIsIHN0YXRjb2xzKTsKKwkJfQorCX0KKworCWFwcGVuZF9vYmpl Y3Rfb2JqZWN0KHJldCwgIkZST00gJXtzdGF0X3RhYmxlX2lkZW50aXR5fUQiLAorCQkJCQkJIG5l d19vYmp0cmVlX2Zvcl9xdWFsbmFtZShnZXRfcmVsX25hbWVzcGFjZShzdGF0Zm9ybS0+c3R4cmVs aWQpLAorCQkJCQkJCQkJCQkJICBnZXRfcmVsX25hbWUoc3RhdGZvcm0tPnN0eHJlbGlkKSkpOwor CisJUmVsZWFzZVN5c0NhY2hlKHR1cCk7CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogRGVw YXJzZSBhbiBDcmVhdGVGb3JlaWduU2VydmVyU3RtdCAoQ1JFQVRFIFNFUlZFUikKKyAqCisgKiBH aXZlbiBhIHNlcnZlciBPSUQgYW5kIHRoZSBwYXJzZSB0cmVlIHRoYXQgY3JlYXRlZCBpdCwgcmV0 dXJuIGFuIE9ialRyZWUKKyAqIHJlcHJlc2VudGluZyB0aGUgYWx0ZXIgY29tbWFuZC4KKyAqCisg KiBWZXJib3NlIHN5bnRheAorICogQ1JFQVRFIFNFUlZFUiAle2lkZW50aXR5fUkgJXt0eXBlfXMg JXt2ZXJzaW9ufXMgRk9SRUlHTiBEQVRBIFdSQVBQRVIgJXtmZHd9SQorICogJXtnZW5lcmljX29w dGlvbnN9cworICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0NyZWF0ZUZvcmVpZ25TZXJ2 ZXJTdG10KE9pZCBvYmplY3RJZCwgTm9kZSAqcGFyc2V0cmVlKQoreworCUNyZWF0ZUZvcmVpZ25T ZXJ2ZXJTdG10ICpub2RlID0gKENyZWF0ZUZvcmVpZ25TZXJ2ZXJTdG10ICopIHBhcnNldHJlZTsK KwlPYmpUcmVlICAgICpyZXQ7CisJT2JqVHJlZSAgICAqdG1wOworCisJcmV0ID0gbmV3X29ianRy ZWVfVkEoIkNSRUFURSBTRVJWRVIgJXtpZGVudGl0eX1JIiwgMSwKKwkJCQkJCSAiaWRlbnRpdHki LCBPYmpUeXBlU3RyaW5nLCBub2RlLT5zZXJ2ZXJuYW1lKTsKKworCS8qIEFkZCBhIFRZUEUgY2xh dXNlLCBpZiBhbnkgKi8KKwl0bXAgPSBuZXdfb2JqdHJlZSgiVFlQRSIpOworCWlmIChub2RlLT5z ZXJ2ZXJ0eXBlKQorCQlhcHBlbmRfc3RyaW5nX29iamVjdCh0bXAsICIle3R5cGV9TCIsICJ0eXBl Iiwgbm9kZS0+c2VydmVydHlwZSk7CisJZWxzZQorCQlhcHBlbmRfbm90X3ByZXNlbnQodG1wKTsK KwlhcHBlbmRfb2JqZWN0X29iamVjdChyZXQsICIle3R5cGV9cyIsIHRtcCk7CisKKwkvKiBBZGQg YSBWRVJTSU9OIGNsYXVzZSwgaWYgYW55ICovCisJdG1wID0gbmV3X29ianRyZWUoIlZFUlNJT04i KTsKKwlpZiAobm9kZS0+dmVyc2lvbikKKwkJYXBwZW5kX3N0cmluZ19vYmplY3QodG1wLCAiJXt2 ZXJzaW9ufUwiLCAidmVyc2lvbiIsIG5vZGUtPnZlcnNpb24pOworCWVsc2UKKwkJYXBwZW5kX25v dF9wcmVzZW50KHRtcCk7CisJYXBwZW5kX29iamVjdF9vYmplY3QocmV0LCAiJXt2ZXJzaW9ufXMi LCB0bXApOworCisJYXBwZW5kX3N0cmluZ19vYmplY3QocmV0LCAiRk9SRUlHTiBEQVRBIFdSQVBQ RVIgJXtmZHd9SSIsICJmZHciLAorCQkJCQkJIG5vZGUtPmZkd25hbWUpOworCisJLyogQWRkIGFu IE9QVElPTlMgY2xhdXNlLCBpZiBhbnkgKi8KKwlhcHBlbmRfb2JqZWN0X29iamVjdChyZXQsICIl e2dlbmVyaWNfb3B0aW9uc31zIiwKKwkJCQkJCSBkZXBhcnNlX0Zkd09wdGlvbnMobm9kZS0+b3B0 aW9ucywgTlVMTCkpOworCisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIERlcGFyc2UgYW4gQWx0 ZXJGb3JlaWduU2VydmVyU3RtdCAoQUxURVIgU0VSVkVSKQorICoKKyAqIEdpdmVuIGEgc2VydmVy IE9JRCBhbmQgdGhlIHBhcnNlIHRyZWUgdGhhdCBjcmVhdGVkIGl0LCByZXR1cm4gYW4gT2JqVHJl ZQorICogcmVwcmVzZW50aW5nIHRoZSBhbHRlciBjb21tYW5kLgorICoKKyAqIFZlcmJvc2Ugc3lu dGF4CisgKiBBTFRFUiBTRVJWRVIgJXtpZGVudGl0eX1JICV7dmVyc2lvbn1zICV7Z2VuZXJpY19v cHRpb25zfXMKKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9BbHRlckZvcmVpZ25TZXJ2 ZXJTdG10KE9pZCBvYmplY3RJZCwgTm9kZSAqcGFyc2V0cmVlKQoreworCUFsdGVyRm9yZWlnblNl cnZlclN0bXQgKm5vZGUgPSAoQWx0ZXJGb3JlaWduU2VydmVyU3RtdCAqKSBwYXJzZXRyZWU7CisJ T2JqVHJlZSAgICAqdG1wOworCisJLyogQWRkIGEgVkVSU0lPTiBjbGF1c2UsIGlmIGFueSAqLwor CXRtcCA9IG5ld19vYmp0cmVlKCJWRVJTSU9OIik7CisJaWYgKG5vZGUtPmhhc192ZXJzaW9uICYm IG5vZGUtPnZlcnNpb24pCisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRtcCwgIiV7dmVyc2lvbn1M IiwgInZlcnNpb24iLCBub2RlLT52ZXJzaW9uKTsKKwllbHNlIGlmIChub2RlLT5oYXNfdmVyc2lv bikKKwkJYXBwZW5kX3N0cmluZ19vYmplY3QodG1wLCAidmVyc2lvbiIsICJ2ZXJzaW9uIiwgIk5V TEwiKTsKKwllbHNlCisJCWFwcGVuZF9ub3RfcHJlc2VudCh0bXApOworCisJcmV0dXJuIG5ld19v Ymp0cmVlX1ZBKCJBTFRFUiBTRVJWRVIgJXtpZGVudGl0eX1JICV7dmVyc2lvbn1zICV7Z2VuZXJp Y19vcHRpb25zfXMiLCAzLAorCQkJCQkJICAiaWRlbnRpdHkiLCBPYmpUeXBlU3RyaW5nLCBub2Rl LT5zZXJ2ZXJuYW1lLAorCQkJCQkJICAidmVyc2lvbiIsIE9ialR5cGVPYmplY3QsIHRtcCwKKwkJ CQkJCSAgImdlbmVyaWNfb3B0aW9ucyIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkgIGRlcGFyc2Vf RmR3T3B0aW9ucyhub2RlLT5vcHRpb25zLCBOVUxMKSk7Cit9CisKKy8qCisgKiBEZXBhcnNlIGEg Q3JlYXRlUExhbmdTdG10LgorICoKKyAqIEdpdmVuIGEgbGFuZ3VhZ2UgT0lEIGFuZCB0aGUgcGFy c2UgdHJlZSB0aGF0IGNyZWF0ZWQgaXQsIHJldHVybiBhbiBPYmpUcmVlCisgKiByZXByZXNlbnRp bmcgdGhlIGNyZWF0aW9uIGNvbW1hbmQuCisgKgorICogVmVyYm9zZSBzeW50YXgKKyAqIENSRUFU RSAle29yX3JlcGxhY2V9cyAle3RydXN0ZWR9cyBMQU5HVUFHRSAle2lkZW50aXR5fXMgSEFORExF UiAle2hhbmRsZXJ9RAorICogJXtpbmxpbmV9cyAle3ZhbGlkYXRvcn1zCisgKi8KK3N0YXRpYyBP YmpUcmVlICoKK2RlcGFyc2VfQ3JlYXRlTGFuZ1N0bXQoT2lkIG9iamVjdElkLCBOb2RlICpwYXJz ZXRyZWUpCit7CisJQ3JlYXRlUExhbmdTdG10ICpub2RlID0gKENyZWF0ZVBMYW5nU3RtdCAqKSBw YXJzZXRyZWU7CisJT2JqVHJlZSAgICAqcmV0OworCU9ialRyZWUgICAgKnRtcDsKKwlIZWFwVHVw bGUJbGFuZ1R1cDsKKwlGb3JtX3BnX2xhbmd1YWdlIGxhbmdGb3JtOworCisJbGFuZ1R1cCA9IFNl YXJjaFN5c0NhY2hlMShMQU5HT0lELAorCQkJCQkJCSAgT2JqZWN0SWRHZXREYXR1bShvYmplY3RJ ZCkpOworCWlmICghSGVhcFR1cGxlSXNWYWxpZChsYW5nVHVwKSkKKwkJZWxvZyhFUlJPUiwgImNh Y2hlIGxvb2t1cCBmYWlsZWQgZm9yIGxhbmd1YWdlIHdpdGggT0lEICV1Iiwgb2JqZWN0SWQpOwor CWxhbmdGb3JtID0gKEZvcm1fcGdfbGFuZ3VhZ2UpIEdFVFNUUlVDVChsYW5nVHVwKTsKKworCXJl dCA9IG5ld19vYmp0cmVlX1ZBKCJDUkVBVEUgJXtvcl9yZXBsYWNlfXMgJXt0cnVzdGVkfXMgTEFO R1VBR0UgJXtpZGVudGl0eX1zIiwgMywKKwkJCQkJCSAib3JfcmVwbGFjZSIsIE9ialR5cGVTdHJp bmcsCisJCQkJCQkgbm9kZS0+cmVwbGFjZSA/ICJPUiBSRVBMQUNFIiA6ICIiLAorCQkJCQkJICJ0 cnVzdGVkIiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCSBsYW5nRm9ybS0+bGFucGx0cnVzdGVkID8g IlRSVVNURUQiIDogIiIsCisJCQkJCQkgImlkZW50aXR5IiwgT2JqVHlwZVN0cmluZywgbm9kZS0+ cGxuYW1lKTsKKworCWlmIChub2RlLT5wbGhhbmRsZXIgIT0gTklMKQorCXsKKwkJLyogQWRkIHRo ZSBIQU5ETEVSIGNsYXVzZSAqLworCQlhcHBlbmRfb2JqZWN0X29iamVjdChyZXQsICJIQU5ETEVS ICV7aGFuZGxlcn1EIiwKKwkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFByb2Nl ZHVyZVJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJCSBsYW5nRm9ybS0+bGFucGxjYWxsZm9pZCkp OworCisJCS8qIEFkZCB0aGUgSU5MSU5FIGNsYXVzZSwgaWYgYW55ICovCisJCXRtcCA9IG5ld19v Ymp0cmVlKCJJTkxJTkUiKTsKKwkJaWYgKE9pZElzVmFsaWQobGFuZ0Zvcm0tPmxhbmlubGluZSkp CisJCXsKKwkJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcCwgIiV7aGFuZGxlcl9uYW1lfUQiLAor CQkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFByb2NlZHVyZVJlbGF0aW9uSWQs CisJCQkJCQkJCQkJCQkJCQkgbGFuZ0Zvcm0tPmxhbmlubGluZSkpOworCQl9CisJCWVsc2UKKwkJ CWFwcGVuZF9ub3RfcHJlc2VudCh0bXApOworCQlhcHBlbmRfb2JqZWN0X29iamVjdChyZXQsICIl e2lubGluZX1zIiwgdG1wKTsKKworCQkvKiBBZGQgdGhlIFZBTElEQVRPUiBjbGF1c2UsIGlmIGFu eSAqLworCQl0bXAgPSBuZXdfb2JqdHJlZSgiVkFMSURBVE9SIik7CisJCWlmIChPaWRJc1ZhbGlk KGxhbmdGb3JtLT5sYW52YWxpZGF0b3IpKQorCQl7CisJCQlhcHBlbmRfb2JqZWN0X29iamVjdCh0 bXAsICIle2hhbmRsZXJfbmFtZX1EIiwKKwkJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFt ZV9pZChQcm9jZWR1cmVSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCQkJIGxhbmdGb3JtLT5sYW52 YWxpZGF0b3IpKTsKKwkJfQorCQllbHNlCisJCQlhcHBlbmRfbm90X3ByZXNlbnQodG1wKTsKKwkJ YXBwZW5kX29iamVjdF9vYmplY3QocmV0LCAiJXt2YWxpZGF0b3J9cyIsIHRtcCk7CisJfQorCisJ UmVsZWFzZVN5c0NhY2hlKGxhbmdUdXApOworCisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIERl cGFyc2UgYSBDcmVhdGVTZXFTdG10LgorICoKKyAqIEdpdmVuIGEgc2VxdWVuY2UgT0lEIGFuZCB0 aGUgcGFyc2UgdHJlZSB0aGF0IGNyZWF0ZWQgaXQsIHJldHVybiBhbiBPYmpUcmVlCisgKiByZXBy ZXNlbnRpbmcgdGhlIGNyZWF0aW9uIGNvbW1hbmQuCisgKgorICogVmVyYm9zZSBzeW50YXgKKyAq IENSRUFURSAle3BlcnNpc3RlbmNlfXMgU0VRVUVOQ0UgJXtpZGVudGl0eX1ECisgKi8KK3N0YXRp YyBPYmpUcmVlICoKK2RlcGFyc2VfQ3JlYXRlU2VxU3RtdChPaWQgb2JqZWN0SWQsIE5vZGUgKnBh cnNldHJlZSkKK3sKKwlPYmpUcmVlICAgICpyZXQ7CisJUmVsYXRpb24JcmVsYXRpb247CisJRm9y bV9wZ19zZXF1ZW5jZV9kYXRhIHNlcWRhdGE7CisJTGlzdAkgICAqZWxlbXMgPSBOSUw7CisJRm9y bV9wZ19zZXF1ZW5jZSBzZXFmb3JtOworCVJlbGF0aW9uCXJlbDsKKwlIZWFwVHVwbGUJc2VxdHVw bGU7CisJQ3JlYXRlU2VxU3RtdCAqY3JlYXRlU2VxU3RtdCA9IChDcmVhdGVTZXFTdG10ICopIHBh cnNldHJlZTsKKworCS8qCisJICogU2VxdWVuY2UgZm9yIElERU5USVRZIENPTFVNTiBvdXRwdXQg c2VwYXJhdGVseSAodmlhIENSRUFURSBUQUJMRSBvcgorCSAqIEFMVEVSIFRBQkxFKTsgcmV0dXJu IGVtcHR5IGhlcmUuCisJICovCisJaWYgKGNyZWF0ZVNlcVN0bXQtPmZvcl9pZGVudGl0eSkKKwkJ cmV0dXJuIE5VTEw7CisKKwlzZXFkYXRhID0gZ2V0X3NlcXVlbmNlX3ZhbHVlcyhvYmplY3RJZCk7 CisKKwlyZWxhdGlvbiA9IHJlbGF0aW9uX29wZW4ob2JqZWN0SWQsIEFjY2Vzc1NoYXJlTG9jayk7 CisJcmVsID0gdGFibGVfb3BlbihTZXF1ZW5jZVJlbGF0aW9uSWQsIFJvd0V4Y2x1c2l2ZUxvY2sp OworCXNlcXR1cGxlID0gU2VhcmNoU3lzQ2FjaGVDb3B5MShTRVFSRUxJRCwKKwkJCQkJCQkJICAg T2JqZWN0SWRHZXREYXR1bShvYmplY3RJZCkpOworCWlmICghSGVhcFR1cGxlSXNWYWxpZChzZXF0 dXBsZSkpCisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciBzZXF1ZW5jZSB3 aXRoIE9JRCAldSIsCisJCQkgb2JqZWN0SWQpOworCisJc2VxZm9ybSA9IChGb3JtX3BnX3NlcXVl bmNlKSBHRVRTVFJVQ1Qoc2VxdHVwbGUpOworCisJLyogRGVmaW5pdGlvbiBlbGVtZW50cyAqLwor CWVsZW1zID0gbGFwcGVuZChlbGVtcywgZGVwYXJzZV9TZXFfQ2FjaGUoc2VxZm9ybSwgZmFsc2Up KTsKKwllbGVtcyA9IGxhcHBlbmQoZWxlbXMsIGRlcGFyc2VfU2VxX0N5Y2xlKHNlcWZvcm0sIGZh bHNlKSk7CisJZWxlbXMgPSBsYXBwZW5kKGVsZW1zLCBkZXBhcnNlX1NlcV9JbmNyZW1lbnRCeShz ZXFmb3JtLCBmYWxzZSkpOworCWVsZW1zID0gbGFwcGVuZChlbGVtcywgZGVwYXJzZV9TZXFfTWlu dmFsdWUoc2VxZm9ybSwgZmFsc2UpKTsKKwllbGVtcyA9IGxhcHBlbmQoZWxlbXMsIGRlcGFyc2Vf U2VxX01heHZhbHVlKHNlcWZvcm0sIGZhbHNlKSk7CisJZWxlbXMgPSBsYXBwZW5kKGVsZW1zLCBk ZXBhcnNlX1NlcV9TdGFydHdpdGgoc2VxZm9ybSwgZmFsc2UpKTsKKwllbGVtcyA9IGxhcHBlbmQo ZWxlbXMsIGRlcGFyc2VfU2VxX1Jlc3RhcnQoc2VxZGF0YSkpOworCisJLyogV2UgcHVycG9zZWZ1 bGx5IGRvIG5vdCBlbWl0IE9XTkVEIEJZIGhlcmUgKi8KKworCXJldCA9IG5ld19vYmp0cmVlX1ZB KCJDUkVBVEUgJXtwZXJzaXN0ZW5jZX1zIFNFUVVFTkNFICV7aWZfbm90X2V4aXN0c31zICV7aWRl bnRpdHl9RCAle2RlZmluaXRpb246IH1zIiwgNCwKKwkJCQkJCSAicGVyc2lzdGVuY2UiLCBPYmpU eXBlU3RyaW5nLAorCQkJCQkJIGdldF9wZXJzaXN0ZW5jZV9zdHIocmVsYXRpb24tPnJkX3JlbC0+ cmVscGVyc2lzdGVuY2UpLAorCQkJCQkJICJpZl9ub3RfZXhpc3RzIiwgT2JqVHlwZVN0cmluZywK KwkJCQkJCSBjcmVhdGVTZXFTdG10LT5pZl9ub3RfZXhpc3RzID8gIklGIE5PVCBFWElTVFMiIDog IiIsCisJCQkJCQkgImlkZW50aXR5IiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCSBuZXdfb2JqdHJl ZV9mb3JfcXVhbG5hbWUocmVsYXRpb24tPnJkX3JlbC0+cmVsbmFtZXNwYWNlLAorCQkJCQkJCQkJ CQkJICBSZWxhdGlvbkdldFJlbGF0aW9uTmFtZShyZWxhdGlvbikpLAorCQkJCQkJICJkZWZpbml0 aW9uIiwgT2JqVHlwZUFycmF5LCBlbGVtcyk7CisKKwl0YWJsZV9jbG9zZShyZWwsIFJvd0V4Y2x1 c2l2ZUxvY2spOworCXJlbGF0aW9uX2Nsb3NlKHJlbGF0aW9uLCBBY2Nlc3NTaGFyZUxvY2spOwor CisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIERlcGFyc2UgYSBDcmVhdGVTdG10IChDUkVBVEUg VEFCTEUpLgorICoKKyAqIEdpdmVuIGEgdGFibGUgT0lEIGFuZCB0aGUgcGFyc2UgdHJlZSB0aGF0 IGNyZWF0ZWQgaXQsIHJldHVybiBhbiBPYmpUcmVlCisgKiByZXByZXNlbnRpbmcgdGhlIGNyZWF0 aW9uIGNvbW1hbmQuCisgKgorICogVmVyYm9zZSBzeW50YXgKKyAqIENSRUFURSAle3BlcnNpc3Rl bmNlfXMgVEFCTEUgJXtpZl9ub3RfZXhpc3RzfXMgJXtpZGVudGl0eX1EIFtPRgorICogJXtvZl90 eXBlfVQgfCBQQVJUSVRJT04gT0YgJXtwYXJlbnRfaWRlbnRpdHl9RF0gJXt0YWJsZV9lbGVtZW50 c31zCisgKiAle2luaGVyaXRzfXMgJXtwYXJ0aXRpb25fYnl9cyAle2FjY2Vzc19tZXRob2R9cyAl e3dpdGhfY2xhdXNlfXMKKyAqICV7b25fY29tbWl0fXMgJXt0YWJsZXNwYWNlfXMKKyAqLworc3Rh dGljIE9ialRyZWUgKgorZGVwYXJzZV9DcmVhdGVTdG10KE9pZCBvYmplY3RJZCwgTm9kZSAqcGFy c2V0cmVlKQoreworCUNyZWF0ZVN0bXQgKm5vZGUgPSAoQ3JlYXRlU3RtdCAqKSBwYXJzZXRyZWU7 CisJUmVsYXRpb24JcmVsYXRpb24gPSByZWxhdGlvbl9vcGVuKG9iamVjdElkLCBBY2Nlc3NTaGFy ZUxvY2spOworCUxpc3QJICAgKmRwY29udGV4dDsKKwlPYmpUcmVlICAgICpyZXQ7CisJT2JqVHJl ZSAgICAqdG1wX29iajsKKwlMaXN0CSAgICpsaXN0ID0gTklMOworCUxpc3RDZWxsICAgKmNlbGw7 CisKKwlyZXQgPSBuZXdfb2JqdHJlZV9WQSgiQ1JFQVRFICV7cGVyc2lzdGVuY2V9cyBUQUJMRSAl e2lmX25vdF9leGlzdHN9cyAle2lkZW50aXR5fUQiLCAzLAorCQkJCQkJICJwZXJzaXN0ZW5jZSIs IE9ialR5cGVTdHJpbmcsCisJCQkJCQkgZ2V0X3BlcnNpc3RlbmNlX3N0cihyZWxhdGlvbi0+cmRf cmVsLT5yZWxwZXJzaXN0ZW5jZSksCisJCQkJCQkgImlmX25vdF9leGlzdHMiLCBPYmpUeXBlU3Ry aW5nLAorCQkJCQkJIG5vZGUtPmlmX25vdF9leGlzdHMgPyAiSUYgTk9UIEVYSVNUUyIgOiAiIiwK KwkJCQkJCSAiaWRlbnRpdHkiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJIG5ld19vYmp0cmVlX2Zv cl9xdWFsbmFtZShyZWxhdGlvbi0+cmRfcmVsLT5yZWxuYW1lc3BhY2UsCisJCQkJCQkJCQkJCQkg IFJlbGF0aW9uR2V0UmVsYXRpb25OYW1lKHJlbGF0aW9uKSkpOworCisJZHBjb250ZXh0ID0gZGVw YXJzZV9jb250ZXh0X2ZvcihSZWxhdGlvbkdldFJlbGF0aW9uTmFtZShyZWxhdGlvbiksCisJCQkJ CQkJCQlvYmplY3RJZCk7CisKKwkvKgorCSAqIFR5cGVkIHRhYmxlcyBhbmQgcGFydGl0aW9ucyB1 c2UgYSBzbGlnaHRseSBkaWZmZXJlbnQgZm9ybWF0IHN0cmluZzogd2UKKwkgKiBtdXN0IG5vdCBw dXQgdGFibGVfZWxlbWVudHMgd2l0aCBwYXJlbnRzIGRpcmVjdGx5IGluIHRoZSBmbXQgc3RyaW5n LAorCSAqIGJlY2F1c2UgaWYgdGhlcmUgYXJlIG5vIG9wdGlvbnMgdGhlIHBhcmVudGhlc2VzIG11 c3Qgbm90IGJlIGVtaXR0ZWQ7CisJICogYW5kIGFsc28sIHR5cGVkIHRhYmxlcyBkbyBub3QgYWxs b3cgZm9yIGluaGVyaXRhbmNlLgorCSAqLworCWlmIChub2RlLT5vZlR5cGVuYW1lIHx8IG5vZGUt PnBhcnRib3VuZCkKKwl7CisJCUxpc3QJICAgKnRhYmxlZWx0cyA9IE5JTDsKKworCQkvKgorCQkg KiBXZSBjYW4ndCBwdXQgdGFibGUgZWxlbWVudHMgZGlyZWN0bHkgaW4gdGhlIGZtdCBzdHJpbmcg YXMgYW4gYXJyYXkKKwkJICogc3Vycm91bmRlZCBieSBwYXJlbnRoZXNlcyBoZXJlLCBiZWNhdXNl IGFuIGVtcHR5IGNsYXVzZSB3b3VsZCBjYXVzZQorCQkgKiBhIHN5bnRheCBlcnJvci4gIFRoZXJl Zm9yZSwgd2UgdXNlIGFuIGluZGlyZWN0aW9uIGVsZW1lbnQgYW5kIHNldAorCQkgKiBwcmVzZW50 PWZhbHNlIHdoZW4gdGhlcmUgYXJlIG5vIGVsZW1lbnRzLgorCQkgKi8KKwkJaWYgKG5vZGUtPm9m VHlwZW5hbWUpCisJCXsKKwkJCXRtcF9vYmogPSBuZXdfb2JqdHJlZV9mb3JfdHlwZShyZWxhdGlv bi0+cmRfcmVsLT5yZWxvZnR5cGUsIC0xKTsKKwkJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHJldCwg Ik9GICV7b2ZfdHlwZX1UIiwgdG1wX29iaik7CisJCX0KKwkJZWxzZQorCQl7CisJCQlMaXN0CSAg ICpwYXJlbnRzOworCQkJT2JqRWxlbSAgICAqZWxlbTsKKworCQkJcGFyZW50cyA9IGRlcGFyc2Vf SW5oUmVsYXRpb25zKG9iamVjdElkKTsKKwkJCWVsZW0gPSAoT2JqRWxlbSAqKSBsaW5pdGlhbChw YXJlbnRzKTsKKworCQkJQXNzZXJ0KGxpc3RfbGVuZ3RoKHBhcmVudHMpID09IDEpOworCisJCQlh cHBlbmRfZm9ybWF0X3N0cmluZyhyZXQsICJQQVJUSVRJT04gT0YiKTsKKworCQkJYXBwZW5kX29i amVjdF9vYmplY3QocmV0LCAiJXtwYXJlbnRfaWRlbnRpdHl9RCIsCisJCQkJCQkJCSBlbGVtLT52 YWx1ZS5vYmplY3QpOworCQl9CisKKwkJdGFibGVlbHRzID0gZGVwYXJzZV9UYWJsZUVsZW1lbnRz KHJlbGF0aW9uLCBub2RlLT50YWJsZUVsdHMsIGRwY29udGV4dCwKKwkJCQkJCQkJCQkgIHRydWUs IC8qIHR5cGVkIHRhYmxlICovCisJCQkJCQkJCQkJICBmYWxzZSk7CS8qIG5vdCBjb21wb3NpdGUg Ki8KKwkJdGFibGVlbHRzID0gb2J0YWluQ29uc3RyYWludHModGFibGVlbHRzLCBvYmplY3RJZCwg SW52YWxpZE9pZCk7CisKKwkJdG1wX29iaiA9IG5ld19vYmp0cmVlKCIiKTsKKwkJaWYgKHRhYmxl ZWx0cykKKwkJCWFwcGVuZF9hcnJheV9vYmplY3QodG1wX29iaiwgIigle2VsZW1lbnRzOiwgfXMp IiwgdGFibGVlbHRzKTsKKwkJZWxzZQorCQkJYXBwZW5kX25vdF9wcmVzZW50KHRtcF9vYmopOwor CisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHJldCwgIiV7dGFibGVfZWxlbWVudHN9cyIsIHRtcF9v YmopOworCX0KKwllbHNlCisJeworCQlMaXN0CSAgICp0YWJsZWVsdHMgPSBOSUw7CisKKwkJLyoK KwkJICogVGhlcmUgaXMgbm8gbmVlZCB0byBwcm9jZXNzIExJS0UgY2xhdXNlcyBzZXBhcmF0ZWx5 OyB0aGV5IGhhdmUKKwkJICogYWxyZWFkeSBiZWVuIHRyYW5zZm9ybWVkIGludG8gY29sdW1ucyBh bmQgY29uc3RyYWludHMuCisJCSAqLworCisJCS8qCisJCSAqIFByb2Nlc3MgdGFibGUgZWxlbWVu dHM6IGNvbHVtbiBkZWZpbml0aW9ucyBhbmQgY29uc3RyYWludHMuICBPbmx5CisJCSAqIHRoZSBj b2x1bW4gZGVmaW5pdGlvbnMgYXJlIG9idGFpbmVkIGZyb20gdGhlIHBhcnNlIG5vZGUgaXRzZWxm LiAgVG8KKwkJICogZ2V0IGNvbnN0cmFpbnRzIHdlIHJlbHkgb24gcGdfY29uc3RyYWludCwgYmVj YXVzZSB0aGUgcGFyc2Ugbm9kZQorCQkgKiBtaWdodCBiZSBtaXNzaW5nIHNvbWUgdGhpbmdzIHN1 Y2ggYXMgdGhlIG5hbWUgb2YgdGhlIGNvbnN0cmFpbnRzLgorCQkgKi8KKwkJdGFibGVlbHRzID0g ZGVwYXJzZV9UYWJsZUVsZW1lbnRzKHJlbGF0aW9uLCBub2RlLT50YWJsZUVsdHMsIGRwY29udGV4 dCwKKwkJCQkJCQkJCQkgIGZhbHNlLAkvKiBub3QgdHlwZWQgdGFibGUgKi8KKwkJCQkJCQkJCQkg IGZhbHNlKTsJLyogbm90IGNvbXBvc2l0ZSAqLworCQl0YWJsZWVsdHMgPSBvYnRhaW5Db25zdHJh aW50cyh0YWJsZWVsdHMsIG9iamVjdElkLCBJbnZhbGlkT2lkKTsKKworCQlpZiAodGFibGVlbHRz KQorCQkJYXBwZW5kX2FycmF5X29iamVjdChyZXQsICIoJXt0YWJsZV9lbGVtZW50czosIH1zKSIs IHRhYmxlZWx0cyk7CisJCWVsc2UKKwkJCWFwcGVuZF9mb3JtYXRfc3RyaW5nKHJldCwgIigpIik7 CisKKwkJLyoKKwkJICogQWRkIGluaGVyaXRhbmNlIHNwZWNpZmljYXRpb24uICBXZSBjYW5ub3Qg c2ltcGx5IHNjYW4gdGhlIGxpc3Qgb2YKKwkJICogcGFyZW50cyBmcm9tIHRoZSBwYXJzZXIgbm9k ZSwgYmVjYXVzZSB0aGF0IG1heSBsYWNrIHRoZSBhY3R1YWwKKwkJICogcXVhbGlmaWVkIG5hbWVz IG9mIHRoZSBwYXJlbnQgcmVsYXRpb25zLiAgUmF0aGVyIHRoYW4gdHJ5aW5nIHRvCisJCSAqIHJl LXJlc29sdmUgdGhlbSBmcm9tIHRoZSBpbmZvcm1hdGlvbiBpbiB0aGUgcGFyc2Ugbm9kZSwgaXQg c2VlbXMKKwkJICogbW9yZSBhY2N1cmF0ZSBhbmQgY29udmVuaWVudCB0byBncmFiIGl0IGZyb20g cGdfaW5oZXJpdHMuCisJCSAqLworCQl0bXBfb2JqID0gbmV3X29ianRyZWUoIklOSEVSSVRTIik7 CisJCWlmIChub2RlLT5pbmhSZWxhdGlvbnMgIT0gTklMKQorCQkJYXBwZW5kX2FycmF5X29iamVj dCh0bXBfb2JqLCAiKCV7cGFyZW50czosIH1EKSIsIGRlcGFyc2VfSW5oUmVsYXRpb25zKG9iamVj dElkKSk7CisJCWVsc2UKKwkJeworCQkJYXBwZW5kX251bGxfb2JqZWN0KHRtcF9vYmosICIoJXtw YXJlbnRzOiwgfUQpIik7CisJCQlhcHBlbmRfbm90X3ByZXNlbnQodG1wX29iaik7CisJCX0KKwkJ YXBwZW5kX29iamVjdF9vYmplY3QocmV0LCAiJXtpbmhlcml0c31zIiwgdG1wX29iaik7CisJfQor CisJdG1wX29iaiA9IG5ld19vYmp0cmVlKCJUQUJMRVNQQUNFIik7CisJaWYgKG5vZGUtPnRhYmxl c3BhY2VuYW1lKQorCQlhcHBlbmRfc3RyaW5nX29iamVjdCh0bXBfb2JqLCAiJXt0YWJsZXNwYWNl fUkiLCAidGFibGVzcGFjZSIsCisJCQkJCQkJIG5vZGUtPnRhYmxlc3BhY2VuYW1lKTsKKwllbHNl CisJeworCQlhcHBlbmRfbnVsbF9vYmplY3QodG1wX29iaiwgIiV7dGFibGVzcGFjZX1JIik7CisJ CWFwcGVuZF9ub3RfcHJlc2VudCh0bXBfb2JqKTsKKwl9CisJYXBwZW5kX29iamVjdF9vYmplY3Qo cmV0LCAiJXt0YWJsZXNwYWNlfXMiLCB0bXBfb2JqKTsKKwlhcHBlbmRfb2JqZWN0X29iamVjdChy ZXQsICIle29uX2NvbW1pdH1zIiwKKwkJCQkJCSBkZXBhcnNlX09uQ29tbWl0Q2xhdXNlKG5vZGUt Pm9uY29tbWl0KSk7CisKKwkvKiBGT1IgVkFMVUVTIGNsYXVzZSAqLworCWlmIChub2RlLT5wYXJ0 Ym91bmQpCisJeworCQkvKgorCQkgKiBHZXQgcGdfY2xhc3MucmVscGFydGJvdW5kLiBXZSBjYW5u b3QgdXNlIHBhcnRib3VuZCBpbiB0aGUgcGFyc2V0cmVlCisJCSAqIGRpcmVjdGx5IGFzIGl0J3Mg dGhlIG9yaWdpbmFsIHBhcnRib3VuZCBleHByZXNzaW9uIHdoaWNoIGhhdmVuJ3QKKwkJICogYmVl biB0cmFuc2Zvcm1lZC4KKwkJICovCisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHJldCwgIiV7cGFy dGl0aW9uX2JvdW5kfXMiLCAicGFydGl0aW9uX2JvdW5kIiwKKwkJCQkJCQkgUmVsYXRpb25HZXRQ YXJ0aXRpb25Cb3VuZChvYmplY3RJZCkpOworCX0KKworCS8qIFBBUlRJVElPTiBCWSBjbGF1c2Ug Ki8KKwl0bXBfb2JqID0gbmV3X29ianRyZWUoIlBBUlRJVElPTiBCWSIpOworCWlmIChyZWxhdGlv bi0+cmRfcmVsLT5yZWxraW5kID09IFJFTEtJTkRfUEFSVElUSU9ORURfVEFCTEUpCisJCWFwcGVu ZF9zdHJpbmdfb2JqZWN0KHRtcF9vYmosICIle2RlZmluaXRpb259cyIsICJkZWZpbml0aW9uIiwK KwkJCQkJCQkgcGdfZ2V0X3BhcnRrZXlkZWZfc2ltcGxlKG9iamVjdElkKSk7CisJZWxzZQorCXsK KwkJYXBwZW5kX251bGxfb2JqZWN0KHRtcF9vYmosICIle2RlZmluaXRpb259cyIpOworCQlhcHBl bmRfbm90X3ByZXNlbnQodG1wX29iaik7CisJfQorCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHJldCwg IiV7cGFydGl0aW9uX2J5fXMiLCB0bXBfb2JqKTsKKworCS8qIFVTSU5HIGNsYXVzZSAqLworCXRt cF9vYmogPSBuZXdfb2JqdHJlZSgiVVNJTkciKTsKKwlpZiAobm9kZS0+YWNjZXNzTWV0aG9kKQor CQlhcHBlbmRfc3RyaW5nX29iamVjdCh0bXBfb2JqLCAiJXthY2Nlc3NfbWV0aG9kfUkiLCAiYWNj ZXNzX21ldGhvZCIsCisJCQkJCQkJIG5vZGUtPmFjY2Vzc01ldGhvZCk7CisJZWxzZQorCXsKKwkJ YXBwZW5kX251bGxfb2JqZWN0KHRtcF9vYmosICIle2FjY2Vzc19tZXRob2R9SSIpOworCQlhcHBl bmRfbm90X3ByZXNlbnQodG1wX29iaik7CisJfQorCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHJldCwg IiV7YWNjZXNzX21ldGhvZH1zIiwgdG1wX29iaik7CisKKwkvKiBXSVRIIGNsYXVzZSAqLworCXRt cF9vYmogPSBuZXdfb2JqdHJlZSgiV0lUSCIpOworCisJZm9yZWFjaChjZWxsLCBub2RlLT5vcHRp b25zKQorCXsKKwkJT2JqVHJlZSAgICAqdG1wX29iajI7CisJCURlZkVsZW0gICAgKm9wdCA9IChE ZWZFbGVtICopIGxmaXJzdChjZWxsKTsKKworCQl0bXBfb2JqMiA9IGRlcGFyc2VfRGVmRWxlbShv cHQsIGZhbHNlKTsKKwkJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1w X29iajIpKTsKKwl9CisKKwlpZiAobGlzdCkKKwkJYXBwZW5kX2FycmF5X29iamVjdCh0bXBfb2Jq LCAiKCV7d2l0aDosIH1zKSIsIGxpc3QpOworCWVsc2UKKwkJYXBwZW5kX25vdF9wcmVzZW50KHRt cF9vYmopOworCisJYXBwZW5kX29iamVjdF9vYmplY3QocmV0LCAiJXt3aXRoX2NsYXVzZX1zIiwg dG1wX29iaik7CisKKwlyZWxhdGlvbl9jbG9zZShyZWxhdGlvbiwgQWNjZXNzU2hhcmVMb2NrKTsK KworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBEZXBhcnNlIGEgQ3JlYXRlRm9yZWlnblRhYmxl U3RtdCAoQ1JFQVRFIEZPUkVJR04gVEFCTEUpLgorICoKKyAqIEdpdmVuIGEgdGFibGUgT0lEIGFu ZCB0aGUgcGFyc2UgdHJlZSB0aGF0IGNyZWF0ZWQgaXQsIHJldHVybiBhbiBPYmpUcmVlCisgKiBy ZXByZXNlbnRpbmcgdGhlIGNyZWF0aW9uIGNvbW1hbmQuCisgKgorICogQ1JFQVRFIEZPUkVJR04g VEFCTEUgJXtpZl9ub3RfZXhpc3RzfXMgJXtpZGVudGl0eX1ECisgKiBbKCV7dGFibGVfZWxlbWVu dHM6LCB9cykgJXtpbmhlcml0c31zCisgKiAgfCBQQVJUSVRJT04gT0YgJXtwYXJlbnRfaWRlbnRp dHl9RCAoJXt0eXBlZF90YWJsZV9lbGVtZW50czosIH1zKSAle3BhcnRpdGlvbl9ib3VuZH1zXQor ICogU0VSVkVSICV7c2VydmVyfUkgJXtnZW5lcmljX29wdGlvbnN9cworICovCitzdGF0aWMgT2Jq VHJlZSAqCitkZXBhcnNlX0NyZWF0ZUZvcmVpZ25UYWJsZVN0bXQoT2lkIG9iamVjdElkLCBOb2Rl ICpwYXJzZXRyZWUpCit7CisJQ3JlYXRlRm9yZWlnblRhYmxlU3RtdCAqc3RtdCA9IChDcmVhdGVG b3JlaWduVGFibGVTdG10ICopIHBhcnNldHJlZTsKKwlSZWxhdGlvbglyZWxhdGlvbiA9IHJlbGF0 aW9uX29wZW4ob2JqZWN0SWQsIEFjY2Vzc1NoYXJlTG9jayk7CisJTGlzdAkgICAqZHBjb250ZXh0 OworCU9ialRyZWUgICAgKmNyZWF0ZVN0bXQ7CisJT2JqVHJlZSAgICAqdG1wb2JqOworCUxpc3QJ ICAgKnRhYmxlZWx0cyA9IE5JTDsKKworCWNyZWF0ZVN0bXQgPSBuZXdfb2JqdHJlZSgiQ1JFQVRF IEZPUkVJR04gVEFCTEUiKTsKKworCWFwcGVuZF9zdHJpbmdfb2JqZWN0KGNyZWF0ZVN0bXQsICIl e2lmX25vdF9leGlzdHN9cyIsICJpZl9ub3RfZXhpc3RzIiwKKwkJCQkJCSBzdG10LT5iYXNlLmlm X25vdF9leGlzdHMgPyAiSUYgTk9UIEVYSVNUUyIgOiAiIik7CisKKwl0bXBvYmogPSBuZXdfb2Jq dHJlZV9mb3JfcXVhbG5hbWUocmVsYXRpb24tPnJkX3JlbC0+cmVsbmFtZXNwYWNlLAorCQkJCQkJ CQkgICBSZWxhdGlvbkdldFJlbGF0aW9uTmFtZShyZWxhdGlvbikpOworCWFwcGVuZF9vYmplY3Rf b2JqZWN0KGNyZWF0ZVN0bXQsICIle2lkZW50aXR5fUQiLCB0bXBvYmopOworCisJZHBjb250ZXh0 ID0gZGVwYXJzZV9jb250ZXh0X2ZvcihSZWxhdGlvbkdldFJlbGF0aW9uTmFtZShyZWxhdGlvbiks CisJCQkJCQkJCQlvYmplY3RJZCk7CisJaWYgKHN0bXQtPmJhc2UucGFydGJvdW5kKQorCXsKKwkJ LyogUGFydGl0aW9uZWQgdGFibGUgKi8KKwkJTGlzdAkgICAqcGFyZW50czsKKwkJT2JqRWxlbSAg ICAqZWxlbTsKKworCQlwYXJlbnRzID0gZGVwYXJzZV9JbmhSZWxhdGlvbnMob2JqZWN0SWQpOwor CQllbGVtID0gKE9iakVsZW0gKikgbGluaXRpYWwocGFyZW50cyk7CisKKwkJQXNzZXJ0KGxpc3Rf bGVuZ3RoKHBhcmVudHMpID09IDEpOworCisJCWFwcGVuZF9mb3JtYXRfc3RyaW5nKGNyZWF0ZVN0 bXQsICJQQVJUSVRJT04gT0YiKTsKKworCQlhcHBlbmRfb2JqZWN0X29iamVjdChjcmVhdGVTdG10 LCAiJXtwYXJlbnRfaWRlbnRpdHl9RCIsCisJCQkJCQkJCQkJIGVsZW0tPnZhbHVlLm9iamVjdCk7 CisKKwkJdGFibGVlbHRzID0gZGVwYXJzZV9UYWJsZUVsZW1lbnRzKHJlbGF0aW9uLCBzdG10LT5i YXNlLnRhYmxlRWx0cywgZHBjb250ZXh0LAorCQkJCQkJCQkJCSAgdHJ1ZSwgLyogdHlwZWQgdGFi bGUgKi8KKwkJCQkJCQkJCQkgIGZhbHNlKTsJLyogbm90IGNvbXBvc2l0ZSAqLworCQl0YWJsZWVs dHMgPSBvYnRhaW5Db25zdHJhaW50cyh0YWJsZWVsdHMsIG9iamVjdElkLCBJbnZhbGlkT2lkKTsK KworCQl0bXBvYmogPSBuZXdfb2JqdHJlZSgiIik7CisJCWlmICh0YWJsZWVsdHMpCisJCQlhcHBl bmRfYXJyYXlfb2JqZWN0KHRtcG9iaiwgIigle2VsZW1lbnRzOiwgfXMpIiwgdGFibGVlbHRzKTsK KwkJZWxzZQorCQkJYXBwZW5kX25vdF9wcmVzZW50KHRtcG9iaik7CisKKwkJYXBwZW5kX29iamVj dF9vYmplY3QoY3JlYXRlU3RtdCwgIiV7dHlwZWRfdGFibGVfZWxlbWVudHN9cyIsIHRtcG9iaik7 CisKKwkJLyoKKwkJICogQWRkIHRoZSBwYXJ0aXRpb25fYm91bmRfc3BlYywgaS5lLiB0aGUgRk9S IFZBTFVFUyBjbGF1c2UuCisJCSAqIEdldCBwZ19jbGFzcy5yZWxwYXJ0Ym91bmQuIFdlIGNhbm5v dCB1c2UgcGFydGJvdW5kIGluIHRoZSBwYXJzZXRyZWUKKwkJICogZGlyZWN0bHkgYXMgaXQncyB0 aGUgb3JpZ2luYWwgcGFydGJvdW5kIGV4cHJlc3Npb24gd2hpY2ggaGF2ZW4ndAorCQkgKiBiZWVu IHRyYW5zZm9ybWVkLgorCQkgKi8KKwkJYXBwZW5kX3N0cmluZ19vYmplY3QoY3JlYXRlU3RtdCwg IiV7cGFydGl0aW9uX2JvdW5kfXMiLCAicGFydGl0aW9uX2JvdW5kIiwKKwkJCQkJCQkgUmVsYXRp b25HZXRQYXJ0aXRpb25Cb3VuZChvYmplY3RJZCkpOworCisJCS8qIE5vIFBBUlRJVElPTiBCWSBj bGF1c2UgZm9yIENSRUFURSBGT1JFSUdOIFRBQkxFICovCisJfQorCWVsc2UKKwl7CisJCXRhYmxl ZWx0cyA9IGRlcGFyc2VfVGFibGVFbGVtZW50cyhyZWxhdGlvbiwgc3RtdC0+YmFzZS50YWJsZUVs dHMsIGRwY29udGV4dCwKKwkJCQkJCQkJCQkgIGZhbHNlLAkJLyogbm90IHR5cGVkIHRhYmxlICov CisJCQkJCQkJCQkJICBmYWxzZSk7CS8qIG5vdCBjb21wb3NpdGUgKi8KKwkJdGFibGVlbHRzID0g b2J0YWluQ29uc3RyYWludHModGFibGVlbHRzLCBvYmplY3RJZCwgSW52YWxpZE9pZCk7CisKKwkJ aWYgKHRhYmxlZWx0cykKKwkJCWFwcGVuZF9hcnJheV9vYmplY3QoY3JlYXRlU3RtdCwgIigle3Rh YmxlX2VsZW1lbnRzOiwgfXMpIiwgdGFibGVlbHRzKTsKKwkJZWxzZQorCQkJYXBwZW5kX2Zvcm1h dF9zdHJpbmcoY3JlYXRlU3RtdCwgIigpIik7CisKKwkJLyoKKwkJKiBBZGQgaW5oZXJpdGFuY2Ug c3BlY2lmaWNhdGlvbi4gIFdlIGNhbm5vdCBzaW1wbHkgc2NhbiB0aGUgbGlzdCBvZgorCQkqIHBh cmVudHMgZnJvbSB0aGUgcGFyc2VyIG5vZGUsIGJlY2F1c2UgdGhhdCBtYXkgbGFjayB0aGUgYWN0 dWFsCisJCSogcXVhbGlmaWVkIG5hbWVzIG9mIHRoZSBwYXJlbnQgcmVsYXRpb25zLiAgUmF0aGVy IHRoYW4gdHJ5aW5nIHRvCisJCSogcmUtcmVzb2x2ZSB0aGVtIGZyb20gdGhlIGluZm9ybWF0aW9u IGluIHRoZSBwYXJzZSBub2RlLCBpdCBzZWVtcworCQkqIG1vcmUgYWNjdXJhdGUgYW5kIGNvbnZl bmllbnQgdG8gZ3JhYiBpdCBmcm9tIHBnX2luaGVyaXRzLgorCQkqLworCQl0bXBvYmogPSBuZXdf b2JqdHJlZSgiSU5IRVJJVFMiKTsKKwkJaWYgKHN0bXQtPmJhc2UuaW5oUmVsYXRpb25zICE9IE5J TCkKKwkJCWFwcGVuZF9hcnJheV9vYmplY3QodG1wb2JqLCAiKCV7cGFyZW50czosIH1EKSIsIGRl cGFyc2VfSW5oUmVsYXRpb25zKG9iamVjdElkKSk7CisJCWVsc2UKKwkJeworCQkJYXBwZW5kX251 bGxfb2JqZWN0KHRtcG9iaiwgIigle3BhcmVudHM6LCB9RCkiKTsKKwkJCWFwcGVuZF9ub3RfcHJl c2VudCh0bXBvYmopOworCQl9CisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGNyZWF0ZVN0bXQsICIl e2luaGVyaXRzfXMiLCB0bXBvYmopOworCX0KKworCWFwcGVuZF9zdHJpbmdfb2JqZWN0KGNyZWF0 ZVN0bXQsICJTRVJWRVIgJXtzZXJ2ZXJ9SSIsICJzZXJ2ZXIiLCBzdG10LT5zZXJ2ZXJuYW1lKTsK KworCS8qIGFkZCBhbiBPUFRJT05TIGNsYXVzZSwgaWYgYW55ICovCisJYXBwZW5kX29iamVjdF9v YmplY3QoY3JlYXRlU3RtdCwgIiV7Z2VuZXJpY19vcHRpb25zfXMiLAorCQkJCQkJIGRlcGFyc2Vf RmR3T3B0aW9ucyhzdG10LT5vcHRpb25zLCBOVUxMKSk7CisKKwlyZWxhdGlvbl9jbG9zZShyZWxh dGlvbiwgQWNjZXNzU2hhcmVMb2NrKTsKKworCXJldHVybiBjcmVhdGVTdG10OworfQorCisvKgor ICogRGVwYXJzZSBhIERlZmluZVN0bXQuCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2Vf RGVmaW5lU3RtdChPaWQgb2JqZWN0SWQsIE5vZGUgKnBhcnNldHJlZSwgT2JqZWN0QWRkcmVzcyBz ZWNvbmRhcnlPYmopCit7CisJRGVmaW5lU3RtdCAqZGVmaW5lID0gKERlZmluZVN0bXQgKikgcGFy c2V0cmVlOworCisJc3dpdGNoIChkZWZpbmUtPmtpbmQpCisJeworCQljYXNlIE9CSkVDVF9DT0xM QVRJT046CisJCQlyZXR1cm4gZGVwYXJzZV9EZWZpbmVTdG10X0NvbGxhdGlvbihvYmplY3RJZCwg ZGVmaW5lLCBzZWNvbmRhcnlPYmopOworCisJCWNhc2UgT0JKRUNUX09QRVJBVE9SOgorCQkJcmV0 dXJuIGRlcGFyc2VfRGVmaW5lU3RtdF9PcGVyYXRvcihvYmplY3RJZCwgZGVmaW5lKTsKKworCQlj YXNlIE9CSkVDVF9UU0NPTkZJR1VSQVRJT046CisJCQlyZXR1cm4gZGVwYXJzZV9EZWZpbmVTdG10 X1RTQ29uZmlnKG9iamVjdElkLCBkZWZpbmUsIHNlY29uZGFyeU9iaik7CisKKwkJY2FzZSBPQkpF Q1RfVFNESUNUSU9OQVJZOgorCQkJcmV0dXJuIGRlcGFyc2VfRGVmaW5lU3RtdF9UU0RpY3Rpb25h cnkob2JqZWN0SWQsIGRlZmluZSk7CisKKwkJY2FzZSBPQkpFQ1RfVFNQQVJTRVI6CisJCQlyZXR1 cm4gZGVwYXJzZV9EZWZpbmVTdG10X1RTUGFyc2VyKG9iamVjdElkLCBkZWZpbmUpOworCisJCWNh c2UgT0JKRUNUX1RTVEVNUExBVEU6CisJCQlyZXR1cm4gZGVwYXJzZV9EZWZpbmVTdG10X1RTVGVt cGxhdGUob2JqZWN0SWQsIGRlZmluZSk7CisJCQlicmVhazsKKworCQljYXNlIE9CSkVDVF9UWVBF OgorCQkJcmV0dXJuIGRlcGFyc2VfRGVmaW5lU3RtdF9UeXBlKG9iamVjdElkLCBkZWZpbmUpOwor CisJCWRlZmF1bHQ6CisJCQllbG9nKEVSUk9SLCAidW5zdXBwb3J0ZWQgb2JqZWN0IGtpbmQ6ICVk IiwgZGVmaW5lLT5raW5kKTsKKwl9CisKKwlyZXR1cm4gTlVMTDsKK30KKworLyoKKyAqIERlcGFy c2UgYSBEZWZpbmVTdG10IChDUkVBVEUgQ09MTEFUSU9OKQorICoKKyAqIEdpdmVuIGEgY29sbGF0 aW9uIE9JRCwgcmV0dXJuIGFuIE9ialRyZWUgcmVwcmVzZW50aW5nIHRoZSBhbHRlciBjb21tYW5k LgorICoKKyAqIFZlcmJvc2Ugc3ludGF4CisgKiBDUkVBVEUgQ09MTEFUSU9OICV7aWRlbnRpdHl9 RCBGUk9NICV7ZnJvbV9pZGVudGl0eX1EICgle2VsZW1zOiwgfXMpCisgKi8KK3N0YXRpYyBPYmpU cmVlICoKK2RlcGFyc2VfRGVmaW5lU3RtdF9Db2xsYXRpb24oT2lkIG9iamVjdElkLCBEZWZpbmVT dG10ICpkZWZpbmUsCisJCQkJCQkJIE9iamVjdEFkZHJlc3MgZnJvbUNvbGxpZCkKK3sKKwlPYmpU cmVlICAgICpyZXQ7CisJSGVhcFR1cGxlCWNvbFR1cDsKKwlGb3JtX3BnX2NvbGxhdGlvbiBjb2xG b3JtOworCURhdHVtCQlkYXR1bTsKKwlib29sCQlpc251bGw7CisJT2JqVHJlZSAgICAqdG1wOwor CUxpc3QJICAgKmxpc3QgPSBOSUw7CisKKwljb2xUdXAgPSBTZWFyY2hTeXNDYWNoZTEoQ09MTE9J RCwgT2JqZWN0SWRHZXREYXR1bShvYmplY3RJZCkpOworCWlmICghSGVhcFR1cGxlSXNWYWxpZChj b2xUdXApKQorCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3IgY29sbGF0aW9u IHdpdGggT0lEICV1Iiwgb2JqZWN0SWQpOworCWNvbEZvcm0gPSAoRm9ybV9wZ19jb2xsYXRpb24p IEdFVFNUUlVDVChjb2xUdXApOworCisJcmV0ID0gbmV3X29ianRyZWVfVkEoIkNSRUFURSBDT0xM QVRJT04gJXtpZGVudGl0eX1EIiwgMSwKKwkJCQkJCSAiaWRlbnRpdHkiLCBPYmpUeXBlT2JqZWN0 LAorCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZShjb2xGb3JtLT5jb2xsbmFtZXNwYWNl LAorCQkJCQkJCQkJCQkJICBOYW1lU3RyKGNvbEZvcm0tPmNvbGxuYW1lKSkpOworCisJaWYgKE9p ZElzVmFsaWQoZnJvbUNvbGxpZC5vYmplY3RJZCkpCisJeworCQlPaWQJCQljb2xsaWQgPSBmcm9t Q29sbGlkLm9iamVjdElkOworCQlIZWFwVHVwbGUJdHA7CisJCUZvcm1fcGdfY29sbGF0aW9uIGZy b21Db2xGb3JtOworCisJCS8qCisJCSAqIENSRUFURSBDT0xMQVRJT04gJXtpZGVudGl0eX1EIEZS T00gZXhpc3RpbmdfY29sbGF0aW9uOworCQkgKi8KKwkJdHAgPSBTZWFyY2hTeXNDYWNoZTEoQ09M TE9JRCwgT2JqZWN0SWRHZXREYXR1bShjb2xsaWQpKTsKKwkJaWYgKCFIZWFwVHVwbGVJc1ZhbGlk KHRwKSkKKwkJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciBjb2xsYXRpb24g d2l0aCBPSUQgJXUiLCBjb2xsaWQpOworCisJCWZyb21Db2xGb3JtID0gKEZvcm1fcGdfY29sbGF0 aW9uKSBHRVRTVFJVQ1QodHApOworCisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHJldCwgIkZST00g JXtmcm9tX2lkZW50aXR5fUQiLAorCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUoZnJv bUNvbEZvcm0tPmNvbGxuYW1lc3BhY2UsCisJCQkJCQkJCQkJCQkJICBOYW1lU3RyKGZyb21Db2xG b3JtLT5jb2xsbmFtZSkpKTsKKworCQlSZWxlYXNlU3lzQ2FjaGUodHApOworCQlSZWxlYXNlU3lz Q2FjaGUoY29sVHVwKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwkvKiBMT0NBTEUgKi8KKwlkYXR1 bSA9IFN5c0NhY2hlR2V0QXR0cihDT0xMT0lELCBjb2xUdXAsIEFudW1fcGdfY29sbGF0aW9uX2Nv bGxpY3Vsb2NhbGUsICZpc251bGwpOworCWlmICghaXNudWxsKQorCXsKKwkJdG1wID0gbmV3X29i anRyZWVfVkEoIkxPQ0FMRT0le2xvY2FsZX1MIiwgMiwKKwkJCQkJCQkgImNsYXVzZSIsIE9ialR5 cGVTdHJpbmcsICJsb2NhbGUiLAorCQkJCQkJCSAibG9jYWxlIiwgT2JqVHlwZVN0cmluZywKKwkJ CQkJCQkgcHNwcmludGYoIiVzIiwgVGV4dERhdHVtR2V0Q1N0cmluZyhkYXR1bSkpKTsKKwkJbGlz dCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wKSk7CisJfQorCisJLyogTENf Q09MTEFURSAqLworCWRhdHVtID0gU3lzQ2FjaGVHZXRBdHRyKENPTExPSUQsIGNvbFR1cCwgQW51 bV9wZ19jb2xsYXRpb25fY29sbGNvbGxhdGUsICZpc251bGwpOworCWlmICghaXNudWxsKQorCXsK KwkJdG1wID0gbmV3X29ianRyZWVfVkEoIkxDX0NPTExBVEU9JXtjb2xsYXRlfUwiLCAyLAorCQkJ CQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgImNvbGxhdGUiLAorCQkJCQkJCSAiY29sbGF0 ZSIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkJIHBzcHJpbnRmKCIlcyIsIFRleHREYXR1bUdldENT dHJpbmcoZGF0dW0pKSk7CisJCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0 KHRtcCkpOworCX0KKworCS8qIExDX0NUWVBFICovCisJZGF0dW0gPSBTeXNDYWNoZUdldEF0dHIo Q09MTE9JRCwgY29sVHVwLCBBbnVtX3BnX2NvbGxhdGlvbl9jb2xsY3R5cGUsICZpc251bGwpOwor CWlmICghaXNudWxsKQorCXsKKwkJdG1wID0gbmV3X29ianRyZWVfVkEoIkxDX0NUWVBFPSV7Y3R5 cGV9TCIsIDIsCisJCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAiY3R5cGUiLAorCQkJ CQkJCSAiY3R5cGUiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJCSBwc3ByaW50ZigiJXMiLCBUZXh0 RGF0dW1HZXRDU3RyaW5nKGRhdHVtKSkpOworCQlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2Jq ZWN0X29iamVjdCh0bXApKTsKKwl9CisKKwkvKiBQUk9WSURFUiAqLworCWlmIChjb2xGb3JtLT5j b2xscHJvdmlkZXIgPT0gQ09MTFBST1ZJREVSX0lDVSkKKwl7CisJCXRtcCA9IG5ld19vYmp0cmVl X1ZBKCJQUk9WSURFUj0le3Byb3ZpZGVyfUwiLCAyLAorCQkJCQkJCSAiY2xhdXNlIiwgT2JqVHlw ZVN0cmluZywgInByb3ZpZGVyIiwKKwkJCQkJCQkgInByb3ZpZGVyIiwgT2JqVHlwZVN0cmluZywK KwkJCQkJCQkgcHNwcmludGYoIiVzIiwgImljdSIpKTsKKwkJbGlzdCA9IGxhcHBlbmQobGlzdCwg bmV3X29iamVjdF9vYmplY3QodG1wKSk7CisJfQorCWVsc2UgaWYgKGNvbEZvcm0tPmNvbGxwcm92 aWRlciA9PSBDT0xMUFJPVklERVJfTElCQykKKwl7CisJCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJQ Uk9WSURFUj0le3Byb3ZpZGVyfUwiLCAyLAorCQkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0cmlu ZywgInByb3ZpZGVyIiwKKwkJCQkJCQkgInByb3ZpZGVyIiwgT2JqVHlwZVN0cmluZywKKwkJCQkJ CQkgcHNwcmludGYoIiVzIiwgImxpYmMiKSk7CisJCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19v YmplY3Rfb2JqZWN0KHRtcCkpOworCX0KKworCS8qIERFVEVSTUlOSVNUSUMgKi8KKwlpZiAoY29s Rm9ybS0+Y29sbGlzZGV0ZXJtaW5pc3RpYykKKwl7CisJCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJE RVRFUk1JTklTVElDPSV7ZGV0ZXJtaW5pc3RpY31MIiwgMiwKKwkJCQkJCQkgImNsYXVzZSIsIE9i alR5cGVTdHJpbmcsICJkZXRlcm1pbmlzdGljIiwKKwkJCQkJCQkgImRldGVybWluaXN0aWMiLCBP YmpUeXBlU3RyaW5nLAorCQkJCQkJCSBwc3ByaW50ZigiJXMiLCAidHJ1ZSIpKTsKKwkJbGlzdCA9 IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wKSk7CisJfQorCisJLyogVkVSU0lP TiAqLworCWRhdHVtID0gU3lzQ2FjaGVHZXRBdHRyKENPTExPSUQsIGNvbFR1cCwgQW51bV9wZ19j b2xsYXRpb25fY29sbHZlcnNpb24sICZpc251bGwpOworCWlmICghaXNudWxsKQorCXsKKwkJdG1w ID0gbmV3X29ianRyZWVfVkEoIlZFUlNJT049JXt2ZXJzaW9ufUwiLCAyLAorCQkJCQkJCSAiY2xh dXNlIiwgT2JqVHlwZVN0cmluZywgInZlcnNpb24iLAorCQkJCQkJCSAidmVyc2lvbiIsIE9ialR5 cGVTdHJpbmcsCisJCQkJCQkJIHBzcHJpbnRmKCIlcyIsIFRleHREYXR1bUdldENTdHJpbmcoZGF0 dW0pKSk7CisJCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOwor CX0KKworCWFwcGVuZF9hcnJheV9vYmplY3QocmV0LCAiKCV7ZWxlbXM6LCB9cykiLCBsaXN0KTsK KwlSZWxlYXNlU3lzQ2FjaGUoY29sVHVwKTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBE ZXBhcnNlIGEgRGVmaW5lU3RtdCAoQ1JFQVRFIE9QRVJBVE9SKQorICoKKyAqIEdpdmVuIGEgb3Bl cmF0b3IgT0lEIGFuZCB0aGUgcGFyc2UgdHJlZSB0aGF0IGNyZWF0ZWQgaXQsIHJldHVybiBhbiBP YmpUcmVlCisgKiByZXByZXNlbnRpbmcgdGhlIGNyZWF0aW9uIGNvbW1hbmQuCisgKgorICogVmVy Ym9zZSBzeW50YXgKKyAqIENSRUFURSBPUEVSQVRPUiAle2lkZW50aXR5fU8gKCV7ZWxlbXM6LCB9 cykKKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9EZWZpbmVTdG10X09wZXJhdG9yKE9p ZCBvYmplY3RJZCwgRGVmaW5lU3RtdCAqZGVmaW5lKQoreworCUhlYXBUdXBsZQlvcHJUdXA7CisJ T2JqVHJlZSAgICAqcmV0OworCU9ialRyZWUgICAgKnRtcF9vYmo7CisJTGlzdAkgICAqbGlzdCA9 IE5JTDsKKwlGb3JtX3BnX29wZXJhdG9yIG9wckZvcm07CisKKwlvcHJUdXAgPSBTZWFyY2hTeXND YWNoZTEoT1BFUk9JRCwgT2JqZWN0SWRHZXREYXR1bShvYmplY3RJZCkpOworCWlmICghSGVhcFR1 cGxlSXNWYWxpZChvcHJUdXApKQorCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBm b3Igb3BlcmF0b3Igd2l0aCBPSUQgJXUiLCBvYmplY3RJZCk7CisJb3ByRm9ybSA9IChGb3JtX3Bn X29wZXJhdG9yKSBHRVRTVFJVQ1Qob3ByVHVwKTsKKworCXJldCA9IG5ld19vYmp0cmVlX1ZBKCJD UkVBVEUgT1BFUkFUT1IgJXtpZGVudGl0eX1PIiwgMSwKKwkJCQkJCSAiaWRlbnRpdHkiLCBPYmpU eXBlT2JqZWN0LAorCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZShvcHJGb3JtLT5vcHJu YW1lc3BhY2UsCisJCQkJCQkJCQkJCQkgIE5hbWVTdHIob3ByRm9ybS0+b3BybmFtZSkpKTsKKwor CS8qIFBST0NFRFVSRSAqLworCXRtcF9vYmogPSBuZXdfb2JqdHJlZV9WQSgiUFJPQ0VEVVJFPSV7 cHJvY2VkdXJlfUQiLCAyLAorCQkJCQkJCSJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAicHJvY2Vk dXJlIiwKKwkJCQkJCQkicHJvY2VkdXJlIiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCQluZXdfb2Jq dHJlZV9mb3JfcXVhbG5hbWVfaWQoUHJvY2VkdXJlUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkJ b3ByRm9ybS0+b3ByY29kZSkpOworCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2Jq ZWN0KHRtcF9vYmopKTsKKworCS8qIExFRlRBUkcgKi8KKwl0bXBfb2JqID0gbmV3X29ianRyZWVf VkEoIkxFRlRBUkc9IiwgMSwKKwkJCQkJCQkiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgImxlZnRh cmciKTsKKwlpZiAoT2lkSXNWYWxpZChvcHJGb3JtLT5vcHJsZWZ0KSkKKwkJYXBwZW5kX29iamVj dF9vYmplY3QodG1wX29iaiwgIiV7dHlwZX1UIiwKKwkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3R5 cGUob3ByRm9ybS0+b3BybGVmdCwgLTEpKTsKKwllbHNlCisJCWFwcGVuZF9ub3RfcHJlc2VudCh0 bXBfb2JqKTsKKwlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXBfb2Jq KSk7CisKKwkvKiBSSUdIVEFSRyAqLworCXRtcF9vYmogPSBuZXdfb2JqdHJlZV9WQSgiUklHSFRB Ukc9IiwgMSwKKwkJCQkJCQkiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgInJpZ2h0YXJnIik7CisJ aWYgKE9pZElzVmFsaWQob3ByRm9ybS0+b3BycmlnaHQpKQorCQlhcHBlbmRfb2JqZWN0X29iamVj dCh0bXBfb2JqLCAiJXt0eXBlfVQiLAorCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfdHlwZShvcHJG b3JtLT5vcHJyaWdodCwgLTEpKTsKKwllbHNlCisJCWFwcGVuZF9ub3RfcHJlc2VudCh0bXBfb2Jq KTsKKwlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXBfb2JqKSk7CisK KwkvKiBDT01NVVRBVE9SICovCisJdG1wX29iaiA9IG5ld19vYmp0cmVlX1ZBKCJDT01NVVRBVE9S PSIsIDEsCisJCQkJCQkJImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJjb21tdXRhdG9yIik7CisJ aWYgKE9pZElzVmFsaWQob3ByRm9ybS0+b3ByY29tKSkKKwkJYXBwZW5kX29iamVjdF9vYmplY3Qo dG1wX29iaiwgIiV7b3Blcn1EIiwKKwkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lk KE9wZXJhdG9yUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkJIG9wckZvcm0tPm9wcmNvbSkpOwor CWVsc2UKKwkJYXBwZW5kX25vdF9wcmVzZW50KHRtcF9vYmopOworCWxpc3QgPSBsYXBwZW5kKGxp c3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcF9vYmopKTsKKworCS8qIE5FR0FUT1IgKi8KKwl0bXBf b2JqID0gbmV3X29ianRyZWVfVkEoIk5FR0FUT1I9IiwgMSwKKwkJCQkJCQkiY2xhdXNlIiwgT2Jq VHlwZVN0cmluZywgIm5lZ2F0b3IiKTsKKwlpZiAoT2lkSXNWYWxpZChvcHJGb3JtLT5vcHJuZWdh dGUpKQorCQlhcHBlbmRfb2JqZWN0X29iamVjdCh0bXBfb2JqLCAiJXtvcGVyfUQiLAorCQkJCQkJ CSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoT3BlcmF0b3JSZWxhdGlvbklkLAorCQkJCQkJ CQkJCQkJCQkgb3ByRm9ybS0+b3BybmVnYXRlKSk7CisJZWxzZQorCQlhcHBlbmRfbm90X3ByZXNl bnQodG1wX29iaik7CisJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1w X29iaikpOworCisJLyogUkVTVFJJQ1QgKi8KKwl0bXBfb2JqID0gbmV3X29ianRyZWVfVkEoIlJF U1RSSUNUPSIsIDEsCisJCQkJCQkJImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJyZXN0cmljdCIp OworCWlmIChPaWRJc1ZhbGlkKG9wckZvcm0tPm9wcnJlc3QpKQorCQlhcHBlbmRfb2JqZWN0X29i amVjdCh0bXBfb2JqLCAiJXtwcm9jZWR1cmV9RCIsCisJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9x dWFsbmFtZV9pZChQcm9jZWR1cmVSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCQkgb3ByRm9ybS0+ b3BycmVzdCkpOworCWVsc2UKKwkJYXBwZW5kX25vdF9wcmVzZW50KHRtcF9vYmopOworCWxpc3Qg PSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcF9vYmopKTsKKworCS8qIEpPSU4g Ki8KKwl0bXBfb2JqID0gbmV3X29ianRyZWVfVkEoIkpPSU49IiwgMSwKKwkJCQkJCQkiY2xhdXNl IiwgT2JqVHlwZVN0cmluZywgImpvaW4iKTsKKwlpZiAoT2lkSXNWYWxpZChvcHJGb3JtLT5vcHJq b2luKSkKKwkJYXBwZW5kX29iamVjdF9vYmplY3QodG1wX29iaiwgIiV7cHJvY2VkdXJlfUQiLAor CQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUHJvY2VkdXJlUmVsYXRpb25JZCwK KwkJCQkJCQkJCQkJCQkJIG9wckZvcm0tPm9wcmpvaW4pKTsKKwllbHNlCisJCWFwcGVuZF9ub3Rf cHJlc2VudCh0bXBfb2JqKTsKKwlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVj dCh0bXBfb2JqKSk7CisKKwkvKiBIQVNIRVMgKi8KKwl0bXBfb2JqID0gbmV3X29ianRyZWVfVkEo IkhBU0hFUyIsIDEsCisJCQkJCQkJImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJoYXNoZXMiKTsK KwlpZiAoIW9wckZvcm0tPm9wcmNhbmhhc2gpCisJCWFwcGVuZF9ub3RfcHJlc2VudCh0bXBfb2Jq KTsKKwlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXBfb2JqKSk7CisK KwkvKiBNRVJHRVMgKi8KKwl0bXBfb2JqID0gbmV3X29ianRyZWVfVkEoIk1FUkdFUyIsIDEsCisJ CQkJCQkJImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJtZXJnZXMiKTsKKwlpZiAoIW9wckZvcm0t Pm9wcmNhbm1lcmdlKQorCQlhcHBlbmRfbm90X3ByZXNlbnQodG1wX29iaik7CisJbGlzdCA9IGxh cHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wX29iaikpOworCisJYXBwZW5kX2FycmF5 X29iamVjdChyZXQsICIoJXtlbGVtczosIH1zKSIsIGxpc3QpOworCisJUmVsZWFzZVN5c0NhY2hl KG9wclR1cCk7CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogRGVwYXJzZSBhIENSRUFURSBU WVBFIHN0YXRlbWVudC4KKyAqCisgKiBWZXJib3NlIHN5bnRheAorICogQ1JFQVRFIFRZUEUgJXtp ZGVudGl0eX1EICV7ZWxlbXM6LCB9cykKKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9E ZWZpbmVTdG10X1R5cGUoT2lkIG9iamVjdElkLCBEZWZpbmVTdG10ICpkZWZpbmUpCit7CisJSGVh cFR1cGxlCXR5cFR1cDsKKwlPYmpUcmVlICAgICpyZXQ7CisJT2JqVHJlZSAgICAqdG1wOworCUxp c3QJICAgKmxpc3QgPSBOSUw7CisJY2hhcgkgICAqc3RyOworCURhdHVtCQlkZmx0OworCWJvb2wJ CWlzbnVsbDsKKwlGb3JtX3BnX3R5cGUgdHlwRm9ybTsKKworCXR5cFR1cCA9IFNlYXJjaFN5c0Nh Y2hlMShUWVBFT0lELCBPYmplY3RJZEdldERhdHVtKG9iamVjdElkKSk7CisJaWYgKCFIZWFwVHVw bGVJc1ZhbGlkKHR5cFR1cCkpCisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZv ciB0eXBlIHdpdGggT0lEICV1Iiwgb2JqZWN0SWQpOworCXR5cEZvcm0gPSAoRm9ybV9wZ190eXBl KSBHRVRTVFJVQ1QodHlwVHVwKTsKKworCXJldCA9IG5ld19vYmp0cmVlX1ZBKCJDUkVBVEUgVFlQ RSAle2lkZW50aXR5fUQiLCAxLAorCQkJCQkJICJpZGVudGl0eSIsIE9ialR5cGVPYmplY3QsCisJ CQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lKHR5cEZvcm0tPnR5cG5hbWVzcGFjZSwKKwkJ CQkJCQkJCQkJCSAgTmFtZVN0cih0eXBGb3JtLT50eXBuYW1lKSkpOworCisJLyogU2hlbGwgdHlw ZXMuICovCisJaWYgKCF0eXBGb3JtLT50eXBpc2RlZmluZWQpCisJeworCQlSZWxlYXNlU3lzQ2Fj aGUodHlwVHVwKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwkvKiBBZGQgdGhlIGRlZmluaXRpb24g Y2xhdXNlICovCisJLyogSU5QVVQgKi8KKwl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiKElOUFVUPSV7 cHJvY2VkdXJlfUQiLCAyLAorCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAiaW5wdXQi LAorCQkJCQkJICJwcm9jZWR1cmUiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJIG5ld19vYmp0cmVl X2Zvcl9xdWFsbmFtZV9pZChQcm9jZWR1cmVSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCSB0eXBG b3JtLT50eXBpbnB1dCkpOworCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0 KHRtcCkpOworCisJLyogT1VUUFVUICovCisJdG1wID0gbmV3X29ianRyZWVfVkEoIk9VVFBVVD0l e3Byb2NlZHVyZX1EIiwgMiwKKwkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgIm91dHB1 dCIsCisJCQkJCQkgInByb2NlZHVyZSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkgbmV3X29ianRy ZWVfZm9yX3F1YWxuYW1lX2lkKFByb2NlZHVyZVJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJIHR5 cEZvcm0tPnR5cG91dHB1dCkpOworCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2Jq ZWN0KHRtcCkpOworCisJLyogUkVDRUlWRSAqLworCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJSRUNF SVZFPSIsIDEsCisJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJyZWNlaXZlIik7CisJ aWYgKE9pZElzVmFsaWQodHlwRm9ybS0+dHlwcmVjZWl2ZSkpCisJCWFwcGVuZF9vYmplY3Rfb2Jq ZWN0KHRtcCwgIiV7cHJvY2VkdXJlfUQiLAorCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5h bWVfaWQoUHJvY2VkdXJlUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkJIHR5cEZvcm0tPnR5cHJl Y2VpdmUpKTsKKwllbHNlCisJCWFwcGVuZF9ub3RfcHJlc2VudCh0bXApOworCWxpc3QgPSBsYXBw ZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCisJLyogU0VORCAqLworCXRtcCA9 IG5ld19vYmp0cmVlX1ZBKCJTRU5EPSIsIDEsCisJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJp bmcsICJzZW5kIik7CisJaWYgKE9pZElzVmFsaWQodHlwRm9ybS0+dHlwc2VuZCkpCisJCWFwcGVu ZF9vYmplY3Rfb2JqZWN0KHRtcCwgIiV7cHJvY2VkdXJlfUQiLAorCQkJCQkJCSBuZXdfb2JqdHJl ZV9mb3JfcXVhbG5hbWVfaWQoUHJvY2VkdXJlUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkJIHR5 cEZvcm0tPnR5cHNlbmQpKTsKKwllbHNlCisJCWFwcGVuZF9ub3RfcHJlc2VudCh0bXApOworCWxp c3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCisJLyogVFlQTU9E X0lOICovCisJdG1wID0gbmV3X29ianRyZWVfVkEoIlRZUE1PRF9JTj0iLCAxLAorCQkJCQkJICJj bGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAidHlwbW9kX2luIik7CisJaWYgKE9pZElzVmFsaWQodHlw Rm9ybS0+dHlwbW9kaW4pKQorCQlhcHBlbmRfb2JqZWN0X29iamVjdCh0bXAsICIle3Byb2NlZHVy ZX1EIiwKKwkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFByb2NlZHVyZVJlbGF0 aW9uSWQsCisJCQkJCQkJCQkJCQkJCSB0eXBGb3JtLT50eXBtb2RpbikpOworCWVsc2UKKwkJYXBw ZW5kX25vdF9wcmVzZW50KHRtcCk7CisJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9v YmplY3QodG1wKSk7CisKKwkvKiBUWVBNT0RfT1VUICovCisJdG1wID0gbmV3X29ianRyZWVfVkEo IlRZUE1PRF9PVVQ9IiwgMSwKKwkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgInR5cG1v ZF9vdXQiKTsKKwlpZiAoT2lkSXNWYWxpZCh0eXBGb3JtLT50eXBtb2RvdXQpKQorCQlhcHBlbmRf b2JqZWN0X29iamVjdCh0bXAsICIle3Byb2NlZHVyZX1EIiwKKwkJCQkJCQkgbmV3X29ianRyZWVf Zm9yX3F1YWxuYW1lX2lkKFByb2NlZHVyZVJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJCSB0eXBG b3JtLT50eXBtb2RvdXQpKTsKKwllbHNlCisJCWFwcGVuZF9ub3RfcHJlc2VudCh0bXApOworCWxp c3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCisJLyogQU5BTFla RSAqLworCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJBTkFMWVpFPSIsIDEsCisJCQkJCQkgImNsYXVz ZSIsIE9ialR5cGVTdHJpbmcsICJhbmFseXplIik7CisJaWYgKE9pZElzVmFsaWQodHlwRm9ybS0+ dHlwYW5hbHl6ZSkpCisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcCwgIiV7cHJvY2VkdXJlfUQi LAorCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUHJvY2VkdXJlUmVsYXRpb25J ZCwKKwkJCQkJCQkJCQkJCQkJIHR5cEZvcm0tPnR5cGFuYWx5emUpKTsKKwllbHNlCisJCWFwcGVu ZF9ub3RfcHJlc2VudCh0bXApOworCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2Jq ZWN0KHRtcCkpOworCisJLyogSU5URVJOQUxMRU5HVEggKi8KKwlpZiAodHlwRm9ybS0+dHlwbGVu ID09IC0xKQorCQl0bXAgPSBuZXdfb2JqdHJlZSgiSU5URVJOQUxMRU5HVEg9VkFSSUFCTEUiKTsK KwllbHNlCisJCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJJTlRFUk5BTExFTkdUSD0le3R5cGxlbn1u IiwgMSwKKwkJCQkJCQkgInR5cGxlbiIsIE9ialR5cGVJbnRlZ2VyLCB0eXBGb3JtLT50eXBsZW4p OworCisJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wKSk7CisKKwkv KiBQQVNTRURCWVZBTFVFICovCisJdG1wID0gbmV3X29ianRyZWVfVkEoIlBBU1NFREJZVkFMVUUi LCAxLAorCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAicGFzc2VkYnl2YWx1ZSIpOwor CWlmICghdHlwRm9ybS0+dHlwYnl2YWwpCisJCWFwcGVuZF9ub3RfcHJlc2VudCh0bXApOworCWxp c3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCisJLyogWFhYIGl0 J3Mgb2RkIHRvIHJlcHJlc2VudCBhbGlnbm1lbnQgd2l0aCBzY2hlbWEtcXVhbGlmaWVkIHR5cGUg bmFtZXMgKi8KKwlzd2l0Y2ggKHR5cEZvcm0tPnR5cGFsaWduKQorCXsKKwkJY2FzZSAnZCc6CisJ CQlzdHIgPSAicGdfY2F0YWxvZy5mbG9hdDgiOworCQkJYnJlYWs7CisJCWNhc2UgJ2knOgorCQkJ c3RyID0gInBnX2NhdGFsb2cuaW50NCI7CisJCQlicmVhazsKKwkJY2FzZSAncyc6CisJCQlzdHIg PSAicGdfY2F0YWxvZy5pbnQyIjsKKwkJCWJyZWFrOworCQljYXNlICdjJzoKKwkJCXN0ciA9ICJw Z19jYXRhbG9nLmJwY2hhciI7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWVsb2coRVJST1Is ICJpbnZhbGlkIGFsaWdubWVudCAlYyIsIHR5cEZvcm0tPnR5cGFsaWduKTsKKwl9CisKKwkvKiBB TElHTk1FTlQgKi8KKwl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiQUxJR05NRU5UPSV7YWxpZ259cyIs IDIsCisJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJhbGlnbm1lbnQiLAorCQkJCQkJ ICJhbGlnbiIsIE9ialR5cGVTdHJpbmcsIHN0cik7CisJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3 X29iamVjdF9vYmplY3QodG1wKSk7CisKKwkvKiBTVE9SQUdFICovCisJdG1wID0gbmV3X29ianRy ZWVfVkEoIlNUT1JBR0U9JXtzdG9yYWdlfXMiLCAyLAorCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBl U3RyaW5nLCAic3RvcmFnZSIsCisJCQkJCQkgInN0b3JhZ2UiLCBPYmpUeXBlU3RyaW5nLAorCQkJ CQkJIGdldF90eXBlX3N0b3JhZ2UodHlwRm9ybS0+dHlwc3RvcmFnZSkpOworCWxpc3QgPSBsYXBw ZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCisJLyogQ0FURUdPUlkgKi8KKwl0 bXAgPSBuZXdfb2JqdHJlZV9WQSgiQ0FURUdPUlk9JXtjYXRlZ29yeX1zIiwgMiwKKwkJCQkJCSAi Y2xhdXNlIiwgT2JqVHlwZVN0cmluZywgImNhdGVnb3J5IiwKKwkJCQkJCSAiY2F0ZWdvcnkiLCBP YmpUeXBlU3RyaW5nLAorCQkJCQkJIHBzcHJpbnRmKCIlYyIsIHR5cEZvcm0tPnR5cGNhdGVnb3J5 KSk7CisJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wKSk7CisKKwkv KiBQUkVGRVJSRUQgKi8KKwl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiUFJFRkVSUkVEPSIsIDEsCisJ CQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJwcmVmZXJyZWQiKTsKKwlpZiAoIXR5cEZv cm0tPnR5cGlzcHJlZmVycmVkKQorCQlhcHBlbmRfbm90X3ByZXNlbnQodG1wKTsKKwlsaXN0ID0g bGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKworCS8qIERFRkFVTFQgKi8K KwlkZmx0ID0gU3lzQ2FjaGVHZXRBdHRyKFRZUEVPSUQsIHR5cFR1cCwKKwkJCQkJCSAgIEFudW1f cGdfdHlwZV90eXBkZWZhdWx0LAorCQkJCQkJICAgJmlzbnVsbCk7CisJdG1wID0gbmV3X29ianRy ZWVfVkEoIkRFRkFVTFQ9IiwgMSwKKwkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgImRl ZmF1bHQiKTsKKwlpZiAoIWlzbnVsbCkKKwkJYXBwZW5kX3N0cmluZ19vYmplY3QodG1wLCAiJXtk ZWZhdWx0fXMiLCAiZGVmYXVsdCIsCisJCQkJCQkJIFRleHREYXR1bUdldENTdHJpbmcoZGZsdCkp OworCWVsc2UKKwkJYXBwZW5kX25vdF9wcmVzZW50KHRtcCk7CisJbGlzdCA9IGxhcHBlbmQobGlz dCwgbmV3X29iamVjdF9vYmplY3QodG1wKSk7CisKKwkvKiBFTEVNRU5UICovCisJdG1wID0gbmV3 X29ianRyZWVfVkEoIkVMRU1FTlQ9IiwgMSwKKwkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0cmlu ZywgImVsZW1lbnQiKTsKKwlpZiAoT2lkSXNWYWxpZCh0eXBGb3JtLT50eXBlbGVtKSkKKwkJYXBw ZW5kX29iamVjdF9vYmplY3QodG1wLCAiZWxlbSIsCisJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl90 eXBlKHR5cEZvcm0tPnR5cGVsZW0sIC0xKSk7CisJZWxzZQorCQlhcHBlbmRfbm90X3ByZXNlbnQo dG1wKTsKKwlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKwor CS8qIERFTElNSVRFUiAqLworCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJERUxJTUlURVI9IiwgMSwK KwkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgImRlbGltaXRlciIpOworCWFwcGVuZF9z dHJpbmdfb2JqZWN0KHRtcCwgIiV7ZGVsaW19TCIsICJkZWxpbSIsCisJCQkJCQkgcHNwcmludGYo IiVjIiwgdHlwRm9ybS0+dHlwZGVsaW0pKTsKKwlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2Jq ZWN0X29iamVjdCh0bXApKTsKKworCS8qIENPTExBVEFCTEUgKi8KKwl0bXAgPSBuZXdfb2JqdHJl ZV9WQSgiQ09MTEFUQUJMRT0iLCAxLAorCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAi Y29sbGF0YWJsZSIpOworCWlmICghT2lkSXNWYWxpZCh0eXBGb3JtLT50eXBjb2xsYXRpb24pKQor CQlhcHBlbmRfbm90X3ByZXNlbnQodG1wKTsKKwlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2Jq ZWN0X29iamVjdCh0bXApKTsKKworCWFwcGVuZF9hcnJheV9vYmplY3QocmV0LCAiJXtlbGVtczos IH1zKSIsIGxpc3QpOworCisJUmVsZWFzZVN5c0NhY2hlKHR5cFR1cCk7CisKKwlyZXR1cm4gcmV0 OworfQorCisvKgorICogRGVwYXJzZSBhIENSRUFURSBURVhUIFNFQVJDSCBDT05GSUdVUkFUSU9O IHN0YXRlbWVudC4KKyAqCisgKiBWZXJib3NlIHN5bnRheAorICogQ1JFQVRFIFRFWFQgU0VBUkNI IENPTkZJR1VSQVRJT04gJXtpZGVudGl0eX1EICgle2VsZW1zOiwgfXMpCisgKi8KK3N0YXRpYyBP YmpUcmVlICoKK2RlcGFyc2VfRGVmaW5lU3RtdF9UU0NvbmZpZyhPaWQgb2JqZWN0SWQsIERlZmlu ZVN0bXQgKmRlZmluZSwKKwkJCQkJCQlPYmplY3RBZGRyZXNzIGNvcGllZCkKK3sKKwlIZWFwVHVw bGUJdHNjVHVwOworCUhlYXBUdXBsZQl0c3BUdXA7CisJT2JqVHJlZSAgICAqcmV0OworCU9ialRy ZWUgICAgKnRtcDsKKwlGb3JtX3BnX3RzX2NvbmZpZyB0c2NGb3JtOworCUZvcm1fcGdfdHNfcGFy c2VyIHRzcEZvcm07CisJTGlzdAkgICAqbGlzdCA9IE5JTDsKKworCXRzY1R1cCA9IFNlYXJjaFN5 c0NhY2hlMShUU0NPTkZJR09JRCwgT2JqZWN0SWRHZXREYXR1bShvYmplY3RJZCkpOworCWlmICgh SGVhcFR1cGxlSXNWYWxpZCh0c2NUdXApKQorCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZh aWxlZCBmb3IgdGV4dCBzZWFyY2ggY29uZmlndXJhdGlvbiB3aXRoIE9JRCAldSIsCisJCQkgb2Jq ZWN0SWQpOworCXRzY0Zvcm0gPSAoRm9ybV9wZ190c19jb25maWcpIEdFVFNUUlVDVCh0c2NUdXAp OworCisJdHNwVHVwID0gU2VhcmNoU3lzQ2FjaGUxKFRTUEFSU0VST0lELCBPYmplY3RJZEdldERh dHVtKHRzY0Zvcm0tPmNmZ3BhcnNlcikpOworCWlmICghSGVhcFR1cGxlSXNWYWxpZCh0c3BUdXAp KQorCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3IgdGV4dCBzZWFyY2ggcGFy c2VyICV1IiwKKwkJCSB0c2NGb3JtLT5jZmdwYXJzZXIpOworCXRzcEZvcm0gPSAoRm9ybV9wZ190 c19wYXJzZXIpIEdFVFNUUlVDVCh0c3BUdXApOworCisJLyoKKwkgKiBBZGQgdGhlIGRlZmluaXRp b24gY2xhdXNlLiAgSWYgd2UgaGF2ZSBDT1BZJ2VkIGFuIGV4aXN0aW5nIGNvbmZpZywgYWRkCisJ ICogYSBDT1BZIGNsYXVzZTsgb3RoZXJ3aXNlIGFkZCBhIFBBUlNFUiBjbGF1c2UuCisJICovCisJ LyogQ09QWSAqLworCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJDT1BZPSIsIDEsCisJCQkJCQkgImNs YXVzZSIsIE9ialR5cGVTdHJpbmcsICJjb3B5Iik7CisJaWYgKE9pZElzVmFsaWQoY29waWVkLm9i amVjdElkKSkKKwkJYXBwZW5kX29iamVjdF9vYmplY3QodG1wLCAiJXt0c2NvbmZpZ31EIiwKKwkJ CQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFRTQ29uZmlnUmVsYXRpb25JZCwKKwkJ CQkJCQkJCQkJCQkJIGNvcGllZC5vYmplY3RJZCkpOworCWVsc2UKKwkJYXBwZW5kX25vdF9wcmVz ZW50KHRtcCk7CisJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wKSk7 CisKKwkvKiBQQVJTRVIgKi8KKwl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiUEFSU0VSPSIsIDEsCisJ CQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJwYXJzZXIiKTsKKwlpZiAoY29waWVkLm9i amVjdElkID09IEludmFsaWRPaWQpCisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcCwgIiV7cGFy c2VyfUQiLAorCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUodHNwRm9ybS0+cHJzbmFt ZXNwYWNlLAorCQkJCQkJCQkJCQkJCSAgTmFtZVN0cih0c3BGb3JtLT5wcnNuYW1lKSkpOworCWVs c2UKKwkJYXBwZW5kX25vdF9wcmVzZW50KHRtcCk7CisJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3 X29iamVjdF9vYmplY3QodG1wKSk7CisKKwlyZXQgPSBuZXdfb2JqdHJlZV9WQSgiQ1JFQVRFIFRF WFQgU0VBUkNIIENPTkZJR1VSQVRJT04gJXtpZGVudGl0eX1EICgle2VsZW1zOiwgfXMpIiwgMiwK KwkJCQkJCSAiaWRlbnRpdHkiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJIG5ld19vYmp0cmVlX2Zv cl9xdWFsbmFtZSh0c2NGb3JtLT5jZmduYW1lc3BhY2UsCisJCQkJCQkJCQkJCQkgIE5hbWVTdHIo dHNjRm9ybS0+Y2ZnbmFtZSkpLAorCQkJCQkJICJlbGVtcyIsIE9ialR5cGVBcnJheSwgbGlzdCk7 CisKKwlSZWxlYXNlU3lzQ2FjaGUodHNwVHVwKTsKKwlSZWxlYXNlU3lzQ2FjaGUodHNjVHVwKTsK KwlyZXR1cm4gcmV0OworfQorCisvKgorICogRGVwYXJzZSBhIENSRUFURSBURVhUIFNFQVJDSCBQ QVJTRVIgc3RhdGVtZW50LgorICoKKyAqIFZlcmJvc2Ugc3ludGF4CisgKiBDUkVBVEUgVEVYVCBT RUFSQ0ggUEFSU0VSICV7aWRlbnRpdHl9RCAoJXtlbGVtczosIH1zKQorICovCitzdGF0aWMgT2Jq VHJlZSAqCitkZXBhcnNlX0RlZmluZVN0bXRfVFNQYXJzZXIoT2lkIG9iamVjdElkLCBEZWZpbmVT dG10ICpkZWZpbmUpCit7CisJSGVhcFR1cGxlCXRzcFR1cDsKKwlPYmpUcmVlICAgICpyZXQ7CisJ T2JqVHJlZSAgICAqdG1wOworCUxpc3QJICAgKmxpc3QgPSBOSUw7CisJRm9ybV9wZ190c19wYXJz ZXIgdHNwRm9ybTsKKworCXRzcFR1cCA9IFNlYXJjaFN5c0NhY2hlMShUU1BBUlNFUk9JRCwgT2Jq ZWN0SWRHZXREYXR1bShvYmplY3RJZCkpOworCWlmICghSGVhcFR1cGxlSXNWYWxpZCh0c3BUdXAp KQorCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3IgdGV4dCBzZWFyY2ggcGFy c2VyIHdpdGggT0lEICV1IiwKKwkJCSBvYmplY3RJZCk7CisJdHNwRm9ybSA9IChGb3JtX3BnX3Rz X3BhcnNlcikgR0VUU1RSVUNUKHRzcFR1cCk7CisKKwkvKiBBZGQgdGhlIGRlZmluaXRpb24gY2xh dXNlICovCisJLyogU1RBUlQgKi8KKwl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiU1RBUlQ9JXtwcm9j ZWR1cmV9RCIsIDIsCisJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJzdGFydCIsCisJ CQkJCQkgInByb2NlZHVyZSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkgbmV3X29ianRyZWVfZm9y X3F1YWxuYW1lX2lkKFByb2NlZHVyZVJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJIHRzcEZvcm0t PnByc3N0YXJ0KSk7CisJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1w KSk7CisKKwkvKiBHRVRUT0tFTiAqLworCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJHRVRUT0tFTj0l e3Byb2NlZHVyZX1EIiwgMiwKKwkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgImdldHRv a2VuIiwKKwkJCQkJCSAicHJvY2VkdXJlIiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCSBuZXdfb2Jq dHJlZV9mb3JfcXVhbG5hbWVfaWQoUHJvY2VkdXJlUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkg dHNwRm9ybS0+cHJzdG9rZW4pKTsKKwlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29i amVjdCh0bXApKTsKKworCS8qIEVORCAqLworCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJFTkQ9JXtw cm9jZWR1cmV9RCIsIDIsCisJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJlbmQiLAor CQkJCQkJICJwcm9jZWR1cmUiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJIG5ld19vYmp0cmVlX2Zv cl9xdWFsbmFtZV9pZChQcm9jZWR1cmVSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCSB0c3BGb3Jt LT5wcnNlbmQpKTsKKwlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXAp KTsKKworCS8qIExFWFRZUEVTICovCisJdG1wID0gbmV3X29ianRyZWVfVkEoIkxFWFRZUEVTPSV7 cHJvY2VkdXJlfUQiLCAyLAorCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAibGV4dHlw ZXMiLAorCQkJCQkJICJwcm9jZWR1cmUiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJIG5ld19vYmp0 cmVlX2Zvcl9xdWFsbmFtZV9pZChQcm9jZWR1cmVSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCSB0 c3BGb3JtLT5wcnNsZXh0eXBlKSk7CisJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9v YmplY3QodG1wKSk7CisKKwkvKiBIRUFETElORSAqLworCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJI RUFETElORT0iLCAxLAorCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAiaGVhZGxpbmUi KTsKKwlpZiAoT2lkSXNWYWxpZCh0c3BGb3JtLT5wcnNoZWFkbGluZSkpCisJCWFwcGVuZF9vYmpl Y3Rfb2JqZWN0KHRtcCwgIiV7cHJvY2VkdXJlfUQiLAorCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3Jf cXVhbG5hbWVfaWQoUHJvY2VkdXJlUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkJIHRzcEZvcm0t PnByc2hlYWRsaW5lKSk7CisJZWxzZQorCQlhcHBlbmRfbm90X3ByZXNlbnQodG1wKTsKKwlsaXN0 ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKworCXJldCA9IG5ld19v Ymp0cmVlX1ZBKCJDUkVBVEUgVEVYVCBTRUFSQ0ggUEFSU0VSICV7aWRlbnRpdHl9RCAoJXtlbGVt czosIH1zKSIsIDIsCisJCQkJCQkgImlkZW50aXR5IiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCSBu ZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUodHNwRm9ybS0+cHJzbmFtZXNwYWNlLAorCQkJCQkJCQkJ CQkJICBOYW1lU3RyKHRzcEZvcm0tPnByc25hbWUpKSwKKwkJCQkJCSAiZWxlbXMiLCBPYmpUeXBl QXJyYXksIGxpc3QpOworCisJUmVsZWFzZVN5c0NhY2hlKHRzcFR1cCk7CisJcmV0dXJuIHJldDsK K30KKworLyoKKyAqIERlcGFyc2UgYSBDUkVBVEUgVEVYVCBTRUFSQ0ggRElDVElPTkFSWSBzdGF0 ZW1lbnQuCisgKgorICogVmVyYm9zZSBzeW50YXgKKyAqIENSRUFURSBURVhUIFNFQVJDSCBESUNU SU9OQVJZICV7aWRlbnRpdHl9RCAoJXtlbGVtczosIH1zKQorICovCitzdGF0aWMgT2JqVHJlZSAq CitkZXBhcnNlX0RlZmluZVN0bXRfVFNEaWN0aW9uYXJ5KE9pZCBvYmplY3RJZCwgRGVmaW5lU3Rt dCAqZGVmaW5lKQoreworCUhlYXBUdXBsZQl0c2RUdXA7CisJT2JqVHJlZSAgICAqcmV0OworCU9i alRyZWUgICAgKnRtcDsKKwlMaXN0CSAgICpsaXN0ID0gTklMOworCURhdHVtCQlvcHRpb25zOwor CWJvb2wJCWlzbnVsbDsKKwlGb3JtX3BnX3RzX2RpY3QgdHNkRm9ybTsKKworCXRzZFR1cCA9IFNl YXJjaFN5c0NhY2hlMShUU0RJQ1RPSUQsIE9iamVjdElkR2V0RGF0dW0ob2JqZWN0SWQpKTsKKwlp ZiAoIUhlYXBUdXBsZUlzVmFsaWQodHNkVHVwKSkKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1 cCBmYWlsZWQgZm9yIHRleHQgc2VhcmNoIGRpY3Rpb25hcnkgd2l0aCBPSUQgJXUiLAorCQkJIG9i amVjdElkKTsKKwl0c2RGb3JtID0gKEZvcm1fcGdfdHNfZGljdCkgR0VUU1RSVUNUKHRzZFR1cCk7 CisKKworCisJLyogQWRkIHRoZSBkZWZpbml0aW9uIGNsYXVzZSAqLworCS8qIFRFTVBMQVRFICov CisJdG1wID0gbmV3X29ianRyZWVfVkEoIlRFTVBMQVRFPSIsIDEsCisJCQkJCQkgImNsYXVzZSIs IE9ialR5cGVTdHJpbmcsICJ0ZW1wbGF0ZSIpOworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcCwg IiV7dGVtcGxhdGV9RCIsCisJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFRTVGVt cGxhdGVSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCSB0c2RGb3JtLT5kaWN0dGVtcGxhdGUpKTsK KwlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKworCS8qCisJ ICogb3B0aW9ucy4gIFhYWCB0aGlzIGlzIGEgcHJldHR5IHVzZWxlc3MgcmVwcmVzZW50YXRpb24s IGJ1dCB3ZSBjYW4ndCBkbworCSAqIGJldHRlciB3aXRob3V0IG1vcmUgdHNfY2FjaGUuYyBjb29w ZXJhdGlvbiAuLi4KKwkgKi8KKwlvcHRpb25zID0gU3lzQ2FjaGVHZXRBdHRyKFRTRElDVE9JRCwg dHNkVHVwLAorCQkJCQkJCSAgQW51bV9wZ190c19kaWN0X2RpY3Rpbml0b3B0aW9uLAorCQkJCQkJ CSAgJmlzbnVsbCk7CisJdG1wID0gbmV3X29ianRyZWUoIiIpOworCWlmICghaXNudWxsKQorCQlh cHBlbmRfc3RyaW5nX29iamVjdCh0bXAsICIle29wdGlvbnN9cyIsICJvcHRpb25zIiwKKwkJCQkJ CQkgVGV4dERhdHVtR2V0Q1N0cmluZyhvcHRpb25zKSk7CisJZWxzZQorCQlhcHBlbmRfbm90X3By ZXNlbnQodG1wKTsKKwlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXAp KTsKKworCXJldCA9IG5ld19vYmp0cmVlX1ZBKCJDUkVBVEUgVEVYVCBTRUFSQ0ggRElDVElPTkFS WSAle2lkZW50aXR5fUQgKCV7ZWxlbXM6LCB9cykiLCAyLAorCQkJCQkJICJpZGVudGl0eSIsIE9i alR5cGVPYmplY3QsCisJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lKHRzZEZvcm0tPmRp Y3RuYW1lc3BhY2UsCisJCQkJCQkJCQkJCQkgIE5hbWVTdHIodHNkRm9ybS0+ZGljdG5hbWUpKSwK KwkJCQkJCSAiZWxlbXMiLCBPYmpUeXBlQXJyYXksIGxpc3QpOworCisJUmVsZWFzZVN5c0NhY2hl KHRzZFR1cCk7CisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIERlcGFyc2UgYSBDUkVBVEUgVEVY VCBTRUFSQ0ggVEVNUExBVEUgc3RhdGVtZW50LgorICoKKyAqIFZlcmJvc2Ugc3ludGF4CisgKiBD UkVBVEUgVEVYVCBTRUFSQ0ggVEVNUExBVEUgJXtpZGVudGl0eX1EICgle2VsZW1zOiwgfXMpCisg Ki8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfRGVmaW5lU3RtdF9UU1RlbXBsYXRlKE9pZCBv YmplY3RJZCwgRGVmaW5lU3RtdCAqZGVmaW5lKQoreworCUhlYXBUdXBsZQl0c3RUdXA7CisJT2Jq VHJlZSAgICAqcmV0OworCU9ialRyZWUgICAgKnRtcDsKKwlMaXN0CSAgICpsaXN0ID0gTklMOwor CUZvcm1fcGdfdHNfdGVtcGxhdGUgdHN0Rm9ybTsKKworCXRzdFR1cCA9IFNlYXJjaFN5c0NhY2hl MShUU1RFTVBMQVRFT0lELCBPYmplY3RJZEdldERhdHVtKG9iamVjdElkKSk7CisJaWYgKCFIZWFw VHVwbGVJc1ZhbGlkKHRzdFR1cCkpCisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVk IGZvciB0ZXh0IHNlYXJjaCB0ZW1wbGF0ZSB3aXRoIE9JRCAldSIsCisJCQkgb2JqZWN0SWQpOwor CXRzdEZvcm0gPSAoRm9ybV9wZ190c190ZW1wbGF0ZSkgR0VUU1RSVUNUKHRzdFR1cCk7CisKKwkv KiBBZGQgdGhlIGRlZmluaXRpb24gY2xhdXNlICovCisJLyogSU5JVCAqLworCXRtcCA9IG5ld19v Ymp0cmVlX1ZBKCJJTklUPSIsIDEsCisJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJp bml0Iik7CisJaWYgKE9pZElzVmFsaWQodHN0Rm9ybS0+dG1wbGluaXQpKQorCQlhcHBlbmRfb2Jq ZWN0X29iamVjdCh0bXAsICIle3Byb2NlZHVyZX1EIiwKKwkJCQkJCQkgbmV3X29ianRyZWVfZm9y X3F1YWxuYW1lX2lkKFByb2NlZHVyZVJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJCSB0c3RGb3Jt LT50bXBsaW5pdCkpOworCWVsc2UKKwkJYXBwZW5kX25vdF9wcmVzZW50KHRtcCk7CisJbGlzdCA9 IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wKSk7CisKKwkvKiBMRVhJWkUgKi8K Kwl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiTEVYSVpFPSV7cHJvY2VkdXJlfUQiLCAyLAorCQkJCQkJ ICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAibGV4aXplIiwKKwkJCQkJCSAicHJvY2VkdXJlIiwg T2JqVHlwZU9iamVjdCwKKwkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUHJvY2Vk dXJlUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkgdHN0Rm9ybS0+dG1wbGxleGl6ZSkpOworCWxp c3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCisJcmV0ID0gbmV3 X29ianRyZWVfVkEoIkNSRUFURSBURVhUIFNFQVJDSCBURU1QTEFURSAle2lkZW50aXR5fUQgKCV7 ZWxlbXM6LCB9cykiLCAyLAorCQkJCQkJICJpZGVudGl0eSIsIE9ialR5cGVPYmplY3QsCisJCQkJ CQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lKHRzdEZvcm0tPnRtcGxuYW1lc3BhY2UsCisJCQkJ CQkJCQkJCQkgIE5hbWVTdHIodHN0Rm9ybS0+dG1wbG5hbWUpKSwKKwkJCQkJCSAiZWxlbXMiLCBP YmpUeXBlQXJyYXksIGxpc3QpOworCisJUmVsZWFzZVN5c0NhY2hlKHRzdFR1cCk7CisJcmV0dXJu IHJldDsKK30KKworLyoKKyAqIERlcGFyc2UgYW4gQUxURVIgVEVYVCBTRUFSQ0ggQ09ORklHVVJB VElPTiBzdGF0ZW1lbnQuCisgKgorICogVmVyYm9zZSBzeW50YXgKKyAqIEFMVEVSIFRFWFQgU0VB UkNIIENPTkZJR1VSQVRJT04gJXtpZGVudGl0eX1EIEFERCBNQVBQSU5HCisgKiBGT1IgJXt0b2tl bnR5cGU6LCB9SSBXSVRIICV7ZGljdGlvbmFyaWVzOiwgfUQKKyAqCU9SCisgKiBBTFRFUiBURVhU IFNFQVJDSCBDT05GSUdVUkFUSU9OICV7aWRlbnRpdHl9RCBEUk9QIE1BUFBJTkcgJXtpZl9leGlz dHN9cworICogRk9SICV7dG9rZW50eXBlfUkKKyAqCU9SCisgKiBBTFRFUiBURVhUIFNFQVJDSCBD T05GSUdVUkFUSU9OICV7aWRlbnRpdHl9RCBBTFRFUiBNQVBQSU5HCisgKiBGT1IgJXt0b2tlbnR5 cGU6LCB9SSBXSVRIICV7ZGljdGlvbmFyaWVzOiwgfUQKKyAqCU9SCisgKiBBTFRFUiBURVhUIFNF QVJDSCBDT05GSUdVUkFUSU9OICV7aWRlbnRpdHl9RCBBTFRFUiBNQVBQSU5HCisgKiBSRVBMQUNF ICV7b2xkX2RpY3Rpb25hcnl9RCBXSVRIICV7bmV3X2RpY3Rpb25hcnl9RAorICoJT1IKKyAqIEFM VEVSIFRFWFQgU0VBUkNIIENPTkZJR1VSQVRJT04gJXtpZGVudGl0eX1EIEFMVEVSIE1BUFBJTkcK KyAqIEZPUiAle3Rva2VudHlwZTosIH1JIFJFUExBQ0UgJXtvbGRfZGljdGlvbmFyeX1EIFdJVEgg JXtuZXdfZGljdGlvbmFyeX1ECisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfQWx0ZXJU U0NvbmZpZ3VyYXRpb25TdG10KENvbGxlY3RlZENvbW1hbmQgKmNtZCkKK3sKKwlBbHRlclRTQ29u ZmlndXJhdGlvblN0bXQgKm5vZGUgPSAoQWx0ZXJUU0NvbmZpZ3VyYXRpb25TdG10ICopIGNtZC0+ cGFyc2V0cmVlOworCU9ialRyZWUgICAgKnJldDsKKwlPYmpUcmVlICAgICp0bXA7CisJTGlzdAkg ICAqbGlzdCA9IE5JTDsKKwlMaXN0Q2VsbCAgICpjZWxsOworCWludAkJCWk7CisKKwlyZXQgPSBu ZXdfb2JqdHJlZSgiQUxURVIgVEVYVCBTRUFSQ0ggQ09ORklHVVJBVElPTiIpOworCisJLyogRGV0 ZXJtaW5lIHRoZSBmb3JtYXQgc3RyaW5nIGFwcHJvcHJpYXRlIHRvIGVhY2ggc3ViY29tbWFuZCAq LworCXN3aXRjaCAobm9kZS0+a2luZCkKKwl7CisJCWNhc2UgQUxURVJfVFNDT05GSUdfQUREX01B UFBJTkc6CisJCQlhcHBlbmRfb2JqZWN0X29iamVjdChyZXQsICIle2lkZW50aXR5fUQgQUREIE1B UFBJTkciLAorCQkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKGNtZC0+ZC5hdHNj ZmcuYWRkcmVzcy5jbGFzc0lkLAorCQkJCQkJCQkJCQkJCQkJIGNtZC0+ZC5hdHNjZmcuYWRkcmVz cy5vYmplY3RJZCkpOworCQkJYnJlYWs7CisKKwkJY2FzZSBBTFRFUl9UU0NPTkZJR19EUk9QX01B UFBJTkc6CisJCQlhcHBlbmRfb2JqZWN0X29iamVjdChyZXQsICIle2lkZW50aXR5fUQgRFJPUCBN QVBQSU5HIiwKKwkJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChjbWQtPmQuYXRz Y2ZnLmFkZHJlc3MuY2xhc3NJZCwKKwkJCQkJCQkJCQkJCQkJCSBjbWQtPmQuYXRzY2ZnLmFkZHJl c3Mub2JqZWN0SWQpKTsKKwkJCXRtcCA9IG5ld19vYmp0cmVlKCJJRiBFWElTVFMiKTsKKwkJCWFw cGVuZF9ib29sX29iamVjdCh0bXAsICJwcmVzZW50Iiwgbm9kZS0+bWlzc2luZ19vayk7CisJCQlh cHBlbmRfb2JqZWN0X29iamVjdChyZXQsICIle2lmX2V4aXN0c31zIiwgdG1wKTsKKwkJCWJyZWFr OworCisJCWNhc2UgQUxURVJfVFNDT05GSUdfQUxURVJfTUFQUElOR19GT1JfVE9LRU46CisJCWNh c2UgQUxURVJfVFNDT05GSUdfUkVQTEFDRV9ESUNUOgorCQljYXNlIEFMVEVSX1RTQ09ORklHX1JF UExBQ0VfRElDVF9GT1JfVE9LRU46CisJCQlhcHBlbmRfb2JqZWN0X29iamVjdChyZXQsICIle2lk ZW50aXR5fUQgQUxURVIgTUFQUElORyIsCisJCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5h bWVfaWQoY21kLT5kLmF0c2NmZy5hZGRyZXNzLmNsYXNzSWQsCisJCQkJCQkJCQkJCQkJCQkgY21k LT5kLmF0c2NmZy5hZGRyZXNzLm9iamVjdElkKSk7CisJCQlicmVhazsKKwl9CisKKwkvKiBBZGQg dGhlIGFmZmVjdGVkIHRva2VuIGxpc3QsIGZvciBzdWJjb21tYW5kcyB0aGF0IGhhdmUgb25lICov CisJaWYgKG5vZGUtPmtpbmQgPT0gQUxURVJfVFNDT05GSUdfQUREX01BUFBJTkcgfHwKKwkJbm9k ZS0+a2luZCA9PSBBTFRFUl9UU0NPTkZJR19BTFRFUl9NQVBQSU5HX0ZPUl9UT0tFTiB8fAorCQlu b2RlLT5raW5kID09IEFMVEVSX1RTQ09ORklHX1JFUExBQ0VfRElDVF9GT1JfVE9LRU4gfHwKKwkJ bm9kZS0+a2luZCA9PSBBTFRFUl9UU0NPTkZJR19EUk9QX01BUFBJTkcpCisJeworCQlmb3JlYWNo KGNlbGwsIG5vZGUtPnRva2VudHlwZSkKKwkJCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19zdHJp bmdfb2JqZWN0KHN0clZhbChsZmlyc3QoY2VsbCkpKSk7CisJCWFwcGVuZF9hcnJheV9vYmplY3Qo cmV0LCAiRk9SICV7dG9rZW50eXBlOiwgfUkiLCBsaXN0KTsKKwl9CisKKwkvKiBBZGQgZnVydGhl ciBzdWJjb21tYW5kLXNwZWNpZmljIGVsZW1lbnRzICovCisJaWYgKG5vZGUtPmtpbmQgPT0gQUxU RVJfVFNDT05GSUdfQUREX01BUFBJTkcgfHwKKwkJbm9kZS0+a2luZCA9PSBBTFRFUl9UU0NPTkZJ R19BTFRFUl9NQVBQSU5HX0ZPUl9UT0tFTikKKwl7CisJCS8qIEFERCBNQVBQSU5HIGFuZCBBTFRF UiBNQVBQSU5HIEZPUiBuZWVkIGEgbGlzdCBvZiBkaWN0aW9uYXJpZXMgKi8KKwkJbGlzdCA9IE5J TDsKKwkJZm9yIChpID0gMDsgaSA8IGNtZC0+ZC5hdHNjZmcubmRpY3RzOyBpKyspCisJCXsKKwkJ CU9ialRyZWUgICAgKmRpY3Rfb2JqOworCisJCQlkaWN0X29iaiA9IG5ld19vYmp0cmVlX2Zvcl9x dWFsbmFtZV9pZChUU0RpY3Rpb25hcnlSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJICBjbWQtPmQu YXRzY2ZnLmRpY3RJZHNbaV0pOworCQkJbGlzdCA9IGxhcHBlbmQobGlzdCwKKwkJCQkJCSAgIG5l d19vYmplY3Rfb2JqZWN0KGRpY3Rfb2JqKSk7CisJCX0KKwkJYXBwZW5kX2FycmF5X29iamVjdChy ZXQsICJXSVRIICV7ZGljdGlvbmFyaWVzOiwgfUQiLCBsaXN0KTsKKwl9CisJZWxzZSBpZiAobm9k ZS0+a2luZCA9PSBBTFRFUl9UU0NPTkZJR19SRVBMQUNFX0RJQ1QgfHwKKwkJCSBub2RlLT5raW5k ID09IEFMVEVSX1RTQ09ORklHX1JFUExBQ0VfRElDVF9GT1JfVE9LRU4pCisJeworCQkvKiBUaGUg UkVQTEFDRSBmb3JtcyB3YW50IG9sZCBhbmQgbmV3IGRpY3Rpb25hcmllcyAqLworCQlBc3NlcnQo Y21kLT5kLmF0c2NmZy5uZGljdHMgPT0gMik7CisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHJldCwg IlJFUExBQ0UgJXtvbGRfZGljdGlvbmFyeX1EIiwKKwkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1 YWxuYW1lX2lkKFRTRGljdGlvbmFyeVJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJCSBjbWQtPmQu YXRzY2ZnLmRpY3RJZHNbMF0pKTsKKwkJYXBwZW5kX29iamVjdF9vYmplY3QocmV0LCAiV0lUSCAl e25ld19kaWN0aW9uYXJ5fUQiLAorCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQo VFNEaWN0aW9uYXJ5UmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkJIGNtZC0+ZC5hdHNjZmcuZGlj dElkc1sxXSkpOworCX0KKworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBEZXBhcnNlIGFuIEFM VEVSIFRFWFQgU0VBUkNIIERJQ1RJT05BUlkgc3RhdGVtZW50LgorICoKKyAqIFZlcmJvc2Ugc3lu dGF4CisgKiBBTFRFUiBURVhUIFNFQVJDSCBESUNUSU9OQVJZICV7aWRlbnRpdHl9RCAoJXtkZWZp bml0aW9uOiwgfXMpCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfQWx0ZXJUU0RpY3Rp b25hcnlTdG10KE9pZCBvYmplY3RJZCwgTm9kZSAqcGFyc2V0cmVlKQoreworCU9ialRyZWUgICAg KnJldDsKKwlPYmpUcmVlICAgICp0bXA7CisJRGF0dW0JCW9wdGlvbnM7CisJTGlzdAkgICAqZGVm aW5pdGlvbiA9IE5JTDsKKwlib29sCQlpc251bGw7CisJSGVhcFR1cGxlCXRzZFR1cDsKKwlGb3Jt X3BnX3RzX2RpY3QgdHNkRm9ybTsKKworCXRzZFR1cCA9IFNlYXJjaFN5c0NhY2hlMShUU0RJQ1RP SUQsIE9iamVjdElkR2V0RGF0dW0ob2JqZWN0SWQpKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQo dHNkVHVwKSkKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIHRleHQgc2Vh cmNoIGRpY3Rpb25hcnkgd2l0aCBPSUQgJXUiLAorCQkJIG9iamVjdElkKTsKKwl0c2RGb3JtID0g KEZvcm1fcGdfdHNfZGljdCkgR0VUU1RSVUNUKHRzZFR1cCk7CisKKwkvKgorCSAqIEFkZCB0aGUg ZGVmaW5pdGlvbiBsaXN0IGFjY29yZGluZyB0byB0aGUgcGdfdHNfZGljdCBkaWN0aW5pdG9wdGlv bgorCSAqIGNvbHVtbgorCSAqLworCW9wdGlvbnMgPSBTeXNDYWNoZUdldEF0dHIoVFNESUNUT0lE LCB0c2RUdXAsCisJCQkJCQkJICBBbnVtX3BnX3RzX2RpY3RfZGljdGluaXRvcHRpb24sCisJCQkJ CQkJICAmaXNudWxsKTsKKwl0bXAgPSBuZXdfb2JqdHJlZSgiIik7CisJaWYgKCFpc251bGwpCisJ CWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRtcCwgIiV7b3B0aW9uc31zIiwgIm9wdGlvbnMiLAorCQkJ CQkJCSBUZXh0RGF0dW1HZXRDU3RyaW5nKG9wdGlvbnMpKTsKKwllbHNlCisJCWFwcGVuZF9ub3Rf cHJlc2VudCh0bXApOworCisJZGVmaW5pdGlvbiA9IGxhcHBlbmQoZGVmaW5pdGlvbiwgbmV3X29i amVjdF9vYmplY3QodG1wKSk7CisKKwlyZXQgPSBuZXdfb2JqdHJlZV9WQSgiQUxURVIgVEVYVCBT RUFSQ0ggRElDVElPTkFSWSAle2lkZW50aXR5fUQgKCV7ZGVmaW5pdGlvbjosIH1zKSIsIDIsCisJ CQkJCQkgImlkZW50aXR5IiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCSBuZXdfb2JqdHJlZV9mb3Jf cXVhbG5hbWUodHNkRm9ybS0+ZGljdG5hbWVzcGFjZSwKKwkJCQkJCQkJCQkJCSAgTmFtZVN0cih0 c2RGb3JtLT5kaWN0bmFtZSkpLAorCQkJCQkJICJkZWZpbml0aW9uIiwgT2JqVHlwZUFycmF5LCBk ZWZpbml0aW9uKTsKKworCVJlbGVhc2VTeXNDYWNoZSh0c2RUdXApOworCXJldHVybiByZXQ7Cit9 CisKKy8qCisgKiAuLi4gQUxURVIgQ09MVU1OIC4uLiBTRVQvUkVTRVQgKC4uLikKKyAqCisgKiBW ZXJib3NlIHN5bnRheAorICogUkVTRVR8U0VUICgle29wdGlvbnM6LCB9cykKKyAqLworc3RhdGlj IE9ialRyZWUgKgorZGVwYXJzZV9SZWxTZXRPcHRpb25zKEFsdGVyVGFibGVDbWQgKnN1YmNtZCkK K3sKKwlMaXN0CSAgICpzZXRzID0gTklMOworCUxpc3RDZWxsICAgKmNlbGw7CisJYm9vbAkJaXNf cmVzZXQgPSBzdWJjbWQtPnN1YnR5cGUgPT0gQVRfUmVzZXRSZWxPcHRpb25zOworCisJZm9yZWFj aChjZWxsLCAoTGlzdCAqKSBzdWJjbWQtPmRlZikKKwl7CisJCURlZkVsZW0gICAgKmVsZW07CisJ CU9ialRyZWUgICAgKnNldDsKKworCQllbGVtID0gKERlZkVsZW0gKikgbGZpcnN0KGNlbGwpOwor CQlzZXQgPSBkZXBhcnNlX0RlZkVsZW0oZWxlbSwgaXNfcmVzZXQpOworCQlzZXRzID0gbGFwcGVu ZChzZXRzLCBuZXdfb2JqZWN0X29iamVjdChzZXQpKTsKKwl9CisKKwlBc3NlcnQoc2V0cyk7CisK KwlyZXR1cm4gbmV3X29ianRyZWVfVkEoIiV7c2V0X3Jlc2V0fXMgKCV7b3B0aW9uczosIH1zKSIs IDIsCisJCQkJCQkgICJzZXRfcmVzZXQiLCBPYmpUeXBlU3RyaW5nLCBpc19yZXNldCA/ICJSRVNF VCIgOiAiU0VUIiwKKwkJCQkJCSAgIm9wdGlvbnMiLCBPYmpUeXBlQXJyYXksIHNldHMpOworfQor CisvKgorICogZGVwYXJzZV9WaWV3U3RtdAorICoJCWRlcGFyc2UgYSBWaWV3U3RtdAorICoKKyAq IEdpdmVuIGEgdmlldyBPSUQgYW5kIHRoZSBwYXJzZSB0cmVlIHRoYXQgY3JlYXRlZCBpdCwgcmV0 dXJuIGFuIE9ialRyZWUKKyAqIHJlcHJlc2VudGluZyB0aGUgY3JlYXRpb24gY29tbWFuZC4KKyAq CisgKiBWZXJib3NlIHN5bnRheAorICogQ1JFQVRFICV7b3JfcmVwbGFjZX1zICV7cGVyc2lzdGVu Y2V9cyBWSUVXICV7aWRlbnRpdHl9RCBBUyAle3F1ZXJ5fXMKKyAqLworc3RhdGljIE9ialRyZWUg KgorZGVwYXJzZV9WaWV3U3RtdChPaWQgb2JqZWN0SWQsIE5vZGUgKnBhcnNldHJlZSkKK3sKKwlW aWV3U3RtdCAgICpub2RlID0gKFZpZXdTdG10ICopIHBhcnNldHJlZTsKKwlPYmpUcmVlICAgICpy ZXQ7CisJUmVsYXRpb24JcmVsYXRpb247CisKKwlyZWxhdGlvbiA9IHJlbGF0aW9uX29wZW4ob2Jq ZWN0SWQsIEFjY2Vzc1NoYXJlTG9jayk7CisKKwlyZXQgPSBuZXdfb2JqdHJlZV9WQSgiQ1JFQVRF ICV7b3JfcmVwbGFjZX1zICV7cGVyc2lzdGVuY2V9cyBWSUVXICV7aWRlbnRpdHl9RCBBUyAle3F1 ZXJ5fXMiLCA0LAorCQkJCQkJICJvcl9yZXBsYWNlIiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCSBu b2RlLT5yZXBsYWNlID8gIk9SIFJFUExBQ0UiIDogIiIsCisJCQkJCQkgInBlcnNpc3RlbmNlIiwg T2JqVHlwZVN0cmluZywKKwkJCQkJCSBnZXRfcGVyc2lzdGVuY2Vfc3RyKHJlbGF0aW9uLT5yZF9y ZWwtPnJlbHBlcnNpc3RlbmNlKSwKKwkJCQkJCSAiaWRlbnRpdHkiLCBPYmpUeXBlT2JqZWN0LAor CQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZShyZWxhdGlvbi0+cmRfcmVsLT5yZWxuYW1l c3BhY2UsCisJCQkJCQkJCQkJCQkgIFJlbGF0aW9uR2V0UmVsYXRpb25OYW1lKHJlbGF0aW9uKSks CisJCQkJCQkgInF1ZXJ5IiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCSBwZ19nZXRfdmlld2RlZl9p bnRlcm5hbChvYmplY3RJZCkpOworCisJcmVsYXRpb25fY2xvc2UocmVsYXRpb24sIEFjY2Vzc1No YXJlTG9jayk7CisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIERlcGFyc2UgQ1JFQVRFIE1hdGVy aWFsaXplZCBWaWV3IHN0YXRlbWVudCwgaXQgaXMgYSB2YXJpYW50IG9mCisgKiBDcmVhdGVUYWJs ZUFzU3RtdAorICoKKyAqIE5vdGUgdGhhdCBDUkVBVEUgVEFCTEUgQVMgU0VMRUNUIElOVE8gY2Fu IGFsc28gYmUgZGVwYXJzZWQgYnkKKyAqIGRlcGFyc2VfQ3JlYXRlVGFibGVBc1N0bXQgdG8gcmVt b3ZlIHRoZSBTRUxFQ1QgSU5UTyBjbGF1c2UuCisgKgorICogVmVyYm9zZSBzeW50YXgKKyAqIENS RUFURSAle3BlcnNpc3RlbmNlfXMgW01BVEVSSUFMSVpFRCBWSUVXIHwgVEFCTEVdICV7aWZfbm90 X2V4aXN0c31zCisgKiAJCSV7aWRlbnRpdHl9RCAle2NvbHVtbnN9cyBbJXtvbl9jb21taXR9c10g JXt0YWJsZXNwYWNlfXMKKyAqICAJCUFTICV7cXVlcnl9cyAle3dpdGhfbm9fZGF0YX1zIgorICov CitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0NyZWF0ZVRhYmxlQXNTdG10X3ZhbmlsbGEoT2lk IG9iamVjdElkLCBOb2RlICpwYXJzZXRyZWUpCit7CisJQ3JlYXRlVGFibGVBc1N0bXQgKm5vZGUg PSAoQ3JlYXRlVGFibGVBc1N0bXQgKikgcGFyc2V0cmVlOworCVJlbGF0aW9uCXJlbGF0aW9uID0g cmVsYXRpb25fb3BlbihvYmplY3RJZCwgQWNjZXNzU2hhcmVMb2NrKTsKKwlPYmpUcmVlICAgICpy ZXQ7CisJT2JqVHJlZSAgICAqdG1wOworCU9ialRyZWUgICAgKnRtcDI7CisJY2hhcgkgICAqZm10 OworCUxpc3QJICAgKmxpc3QgPSBOSUw7CisJTGlzdENlbGwgICAqY2VsbDsKKworCS8qIFJlamVj dCB1bnN1cHBvcnRlZCBjYXNlIHJpZ2h0IGF3YXkuICovCisJaWYgKCgoUXVlcnkgKikgKG5vZGUt PnF1ZXJ5KSktPmNvbW1hbmRUeXBlID09IENNRF9VVElMSVRZKQorCQllbG9nKEVSUk9SLCAidW5p bXBsZW1lbnRlZCBkZXBhcnNlIG9mIENSRUFURSBUQUJMRSBBUyBFWEVDVVRFIik7CisKKwkvKgor CSAqIE5vdGUgdGhhdCBJTlNFUlQgSU5UTyBpcyBkZXBhcnNlZCBhcyBDUkVBVEUgVEFCTEUgQVMu ICBUaGV5IGFyZQorCSAqIGZ1bmN0aW9uYWxseSBlcXVpdmFsZW50IHN5bm9ueW1zIHNvIHRoZXJl IGlzIG5vIGhhcm0gZnJvbSB0aGlzLgorCSAqLworCWlmIChub2RlLT5vYmp0eXBlID09IE9CSkVD VF9NQVRWSUVXKQorCQlmbXQgPSAiQ1JFQVRFICV7cGVyc2lzdGVuY2V9cyBNQVRFUklBTElaRUQg VklFVyAle2lmX25vdF9leGlzdHN9cyAle2lkZW50aXR5fUQiOworCWVsc2UKKwkJZm10ID0gIkNS RUFURSAle3BlcnNpc3RlbmNlfXMgVEFCTEUgJXtpZl9ub3RfZXhpc3RzfXMgJXtpZGVudGl0eX1E IjsKKworCXJldCA9IG5ld19vYmp0cmVlX1ZBKGZtdCwgMywKKwkJCQkJCSAicGVyc2lzdGVuY2Ui LCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJIGdldF9wZXJzaXN0ZW5jZV9zdHIobm9kZS0+aW50by0+ cmVsLT5yZWxwZXJzaXN0ZW5jZSksCisJCQkJCQkgImlmX25vdF9leGlzdHMiLCBPYmpUeXBlU3Ry aW5nLAorCQkJCQkJIG5vZGUtPmlmX25vdF9leGlzdHMgPyAiSUYgTk9UIEVYSVNUUyIgOiAiIiwK KwkJCQkJCSAiaWRlbnRpdHkiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJIG5ld19vYmp0cmVlX2Zv cl9xdWFsbmFtZV9pZChSZWxhdGlvblJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJIG9iamVjdElk KSk7CisKKwkvKiBDT0xVTU5TIGNsYXVzZSAqLworCWlmIChub2RlLT5pbnRvLT5jb2xOYW1lcykK Kwl7CisJCWZvcmVhY2goY2VsbCwgbm9kZS0+aW50by0+Y29sTmFtZXMpCisJCQlsaXN0ID0gbGFw cGVuZChsaXN0LCBuZXdfc3RyaW5nX29iamVjdChzdHJWYWwobGZpcnN0KGNlbGwpKSkpOworCisJ CXRtcCA9IG5ld19vYmp0cmVlX1ZBKCIoJXtjb2x1bW5zOiwgfUkpIiwgMSwKKwkJCQkJCQkgImNv bHVtbnMiLCBPYmpUeXBlQXJyYXksIGxpc3QpOworCX0KKwllbHNlCisJCXRtcCA9IG5ld19vYmp0 cmVlX1ZBKCIiLCAxLAorCQkJCQkJCSAicHJlc2VudCIsIE9ialR5cGVCb29sLCBmYWxzZSk7CisK KwlhcHBlbmRfb2JqZWN0X29iamVjdChyZXQsICIle2NvbHVtbnN9cyIsIHRtcCk7CisKKwkvKiBV U0lORyBjbGF1c2UgKi8KKwl0bXAgPSBuZXdfb2JqdHJlZSgiVVNJTkciKTsKKwlpZiAobm9kZS0+ aW50by0+YWNjZXNzTWV0aG9kKQorCQlhcHBlbmRfc3RyaW5nX29iamVjdCh0bXAsICIle2FjY2Vz c19tZXRob2R9SSIsICJhY2Nlc3NfbWV0aG9kIiwKKwkJCQkJCQkgbm9kZS0+aW50by0+YWNjZXNz TWV0aG9kKTsKKwllbHNlCisJeworCQlhcHBlbmRfbnVsbF9vYmplY3QodG1wLCAiJXthY2Nlc3Nf bWV0aG9kfUkiKTsKKwkJYXBwZW5kX25vdF9wcmVzZW50KHRtcCk7CisJfQorCWFwcGVuZF9vYmpl Y3Rfb2JqZWN0KHJldCwgIiV7YWNjZXNzX21ldGhvZH1zIiwgdG1wKTsKKworCS8qIFdJVEggY2xh dXNlICovCisJdG1wID0gbmV3X29ianRyZWUoIldJVEgiKTsKKwlsaXN0ID0gTklMOworCisJZm9y ZWFjaChjZWxsLCBub2RlLT5pbnRvLT5vcHRpb25zKQorCXsKKwkJRGVmRWxlbSAgICAqb3B0ID0g KERlZkVsZW0gKikgbGZpcnN0KGNlbGwpOworCisJCXRtcDIgPSBkZXBhcnNlX0RlZkVsZW0ob3B0 LCBmYWxzZSk7CisJCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcDIp KTsKKwl9CisKKwlpZiAobGlzdCkKKwkJYXBwZW5kX2FycmF5X29iamVjdCh0bXAsICIoJXt3aXRo OiwgfXMpIiwgbGlzdCk7CisJZWxzZQorCQlhcHBlbmRfbm90X3ByZXNlbnQodG1wKTsKKworCWFw cGVuZF9vYmplY3Rfb2JqZWN0KHJldCwgIiV7d2l0aF9jbGF1c2V9cyIsIHRtcCk7CisKKwkvKiBP TiBDT01NSVQgY2xhdXNlLiAgQ1JFQVRFIE1BVEVSSUFMSVpFRCBWSUVXIGRvZXNuJ3QgaGF2ZSBv bmUgKi8KKwlpZiAobm9kZS0+b2JqdHlwZSA9PSBPQkpFQ1RfVEFCTEUpCisJCWFwcGVuZF9vYmpl Y3Rfb2JqZWN0KHJldCwgIiV7b25fY29tbWl0fXMiLAorCQkJCQkJCSBkZXBhcnNlX09uQ29tbWl0 Q2xhdXNlKG5vZGUtPmludG8tPm9uQ29tbWl0KSk7CisKKwkvKiBUQUJMRVNQQUNFIGNsYXVzZSAq LworCXRtcCA9IG5ld19vYmp0cmVlKCJUQUJMRVNQQUNFICV7dGFibGVzcGFjZX1JIik7CisJaWYg KG5vZGUtPmludG8tPnRhYmxlU3BhY2VOYW1lKQorCQlhcHBlbmRfc3RyaW5nX29iamVjdCh0bXAs ICIle3RhYmxlc3BhY2V9cyIsICJ0YWJsZXNwYWNlIiwKKwkJCQkJCQkgbm9kZS0+aW50by0+dGFi bGVTcGFjZU5hbWUpOworCWVsc2UKKwl7CisJCWFwcGVuZF9udWxsX29iamVjdCh0bXAsICIle3Rh Ymxlc3BhY2V9SSIpOworCQlhcHBlbmRfbm90X3ByZXNlbnQodG1wKTsKKwl9CisJYXBwZW5kX29i amVjdF9vYmplY3QocmV0LCAiJXt0YWJsZXNwYWNlfXMiLCB0bXApOworCisJLyogQWRkIHRoZSBx dWVyeSAqLworCUFzc2VydChJc0Eobm9kZS0+cXVlcnksIFF1ZXJ5KSk7CisJYXBwZW5kX3N0cmlu Z19vYmplY3QocmV0LCAiQVMgJXtxdWVyeX1zIiwgInF1ZXJ5IiwKKwkJCQkJCSBwZ19nZXRfcXVl cnlkZWYoKFF1ZXJ5ICopIG5vZGUtPnF1ZXJ5LCBmYWxzZSkpOworCisJLyogQWRkIGEgV0lUSCBO TyBEQVRBIGNsYXVzZSAqLworCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJXSVRIIE5PIERBVEEiLCAx LAorCQkJCQkJICJwcmVzZW50IiwgT2JqVHlwZUJvb2wsCisJCQkJCQkgbm9kZS0+aW50by0+c2tp cERhdGEgPyB0cnVlIDogZmFsc2UpOworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHJldCwgIiV7d2l0 aF9ub19kYXRhfXMiLCB0bXApOworCisJcmVsYXRpb25fY2xvc2UocmVsYXRpb24sIEFjY2Vzc1No YXJlTG9jayk7CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogRGVwYXJzZSBhIENyZWF0ZVRy aWdTdG10IChDUkVBVEUgVFJJR0dFUikKKyAqCisgKiBHaXZlbiBhIHRyaWdnZXIgT0lEIGFuZCB0 aGUgcGFyc2UgdHJlZSB0aGF0IGNyZWF0ZWQgaXQsIHJldHVybiBhbiBPYmpUcmVlCisgKiByZXBy ZXNlbnRpbmcgdGhlIGNyZWF0aW9uIGNvbW1hbmQuCisgKgorICogVmVyYm9zZSBzeW50YXgKKyAq IENSRUFURSAle2NvbnN0cmFpbnR9cyBUUklHR0VSICV7bmFtZX1JICV7dGltZX1zICV7ZXZlbnRz OiBPUiB9cyBPTgorICogJXtyZWxhdGlvbn1EICV7ZnJvbV90YWJsZX1zICV7Y29uc3RyYWludF9h dHRyczogfXMgRk9SIEVBQ0gKKyAqICV7Zm9yX2VhY2h9cyAle3doZW59cyBFWEVDVVRFIFBST0NF RFVSRSAle2Z1bmN0aW9ufXMKKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9DcmVhdGVU cmlnU3RtdChPaWQgb2JqZWN0SWQsIE5vZGUgKnBhcnNldHJlZSkKK3sKKwlDcmVhdGVUcmlnU3Rt dCAqbm9kZSA9IChDcmVhdGVUcmlnU3RtdCAqKSBwYXJzZXRyZWU7CisJUmVsYXRpb24JcGdfdHJp Z2dlcjsKKwlIZWFwVHVwbGUJdHJpZ1R1cDsKKwlGb3JtX3BnX3RyaWdnZXIgdHJpZ0Zvcm07CisJ T2JqVHJlZSAgICAqcmV0OworCU9ialRyZWUgICAgKnRtcF9vYmo7CisJaW50CQkJdGduYXJnczsK KwlMaXN0CSAgICpsaXN0ID0gTklMOworCUxpc3QJICAgKmV2ZW50czsKKwljaGFyCSAgICp0cmln dGltaW5nOworCisJcGdfdHJpZ2dlciA9IHRhYmxlX29wZW4oVHJpZ2dlclJlbGF0aW9uSWQsIEFj Y2Vzc1NoYXJlTG9jayk7CisKKwl0cmlnVHVwID0gZ2V0X2NhdGFsb2dfb2JqZWN0X2J5X29pZChw Z190cmlnZ2VyLCBBbnVtX3BnX3RyaWdnZXJfb2lkLCBvYmplY3RJZCk7CisJdHJpZ0Zvcm0gPSAo Rm9ybV9wZ190cmlnZ2VyKSBHRVRTVFJVQ1QodHJpZ1R1cCk7CisKKwl0cmlndGltaW5nID0gbm9k ZS0+dGltaW5nID09IFRSSUdHRVJfVFlQRV9CRUZPUkUgPyAiQkVGT1JFIiA6CisJCW5vZGUtPnRp bWluZyA9PSBUUklHR0VSX1RZUEVfQUZURVIgPyAiQUZURVIiIDoKKwkJbm9kZS0+dGltaW5nID09 IFRSSUdHRVJfVFlQRV9JTlNURUFEID8gIklOU1RFQUQgT0YiIDoKKwkJTlVMTDsKKwlpZiAoIXRy aWd0aW1pbmcpCisJCWVsb2coRVJST1IsICJ1bnJlY29nbml6ZWQgdHJpZ2dlciB0aW1pbmcgdHlw ZSAlZCIsIG5vZGUtPnRpbWluZyk7CisKKwlyZXQgPSBuZXdfb2JqdHJlZV9WQSgiQ1JFQVRFICV7 Y29uc3RyYWludH1zIFRSSUdHRVIgJXtuYW1lfUkgJXt0aW1lfXMiLCAzLAorCQkJCQkJICJjb25z dHJhaW50IiwgT2JqVHlwZVN0cmluZywgbm9kZS0+aXNjb25zdHJhaW50ID8gIkNPTlNUUkFJTlQi IDogIiIsCisJCQkJCQkgIm5hbWUiLCBPYmpUeXBlU3RyaW5nLCBub2RlLT50cmlnbmFtZSwKKwkJ CQkJCSAidGltZSIsIE9ialR5cGVTdHJpbmcsIHRyaWd0aW1pbmcpOworCisJLyoKKwkgKiBEZWNv ZGUgdGhlIGV2ZW50cyB0aGF0IHRoZSB0cmlnZ2VyIGZpcmVzIGZvci4gIFRoZSBvdXRwdXQgaXMg YSBsaXN0OyBpbgorCSAqIG1vc3QgY2FzZXMgaXQgd2lsbCBqdXN0IGJlIGEgc3RyaW5nIHdpdGgg dGhlIGV2ZW50IG5hbWUsIGJ1dCB3aGVuCisJICogdGhlcmUncyBhbiBVUERBVEUgd2l0aCBhIGxp c3Qgb2YgY29sdW1ucywgd2UgcmV0dXJuIGEgSlNPTiBvYmplY3QuCisJICovCisJZXZlbnRzID0g TklMOworCWlmIChub2RlLT5ldmVudHMgJiBUUklHR0VSX1RZUEVfSU5TRVJUKQorCQlldmVudHMg PSBsYXBwZW5kKGV2ZW50cywgbmV3X3N0cmluZ19vYmplY3QoIklOU0VSVCIpKTsKKwlpZiAobm9k ZS0+ZXZlbnRzICYgVFJJR0dFUl9UWVBFX0RFTEVURSkKKwkJZXZlbnRzID0gbGFwcGVuZChldmVu dHMsIG5ld19zdHJpbmdfb2JqZWN0KCJERUxFVEUiKSk7CisJaWYgKG5vZGUtPmV2ZW50cyAmIFRS SUdHRVJfVFlQRV9UUlVOQ0FURSkKKwkJZXZlbnRzID0gbGFwcGVuZChldmVudHMsIG5ld19zdHJp bmdfb2JqZWN0KCJUUlVOQ0FURSIpKTsKKwlpZiAobm9kZS0+ZXZlbnRzICYgVFJJR0dFUl9UWVBF X1VQREFURSkKKwl7CisJCWlmIChub2RlLT5jb2x1bW5zID09IE5JTCkKKwkJeworCQkJZXZlbnRz ID0gbGFwcGVuZChldmVudHMsIG5ld19zdHJpbmdfb2JqZWN0KCJVUERBVEUiKSk7CisJCX0KKwkJ ZWxzZQorCQl7CisJCQlPYmpUcmVlICAgICp1cGRhdGU7CisJCQlMaXN0Q2VsbCAgICpjZWxsOwor CQkJTGlzdAkgICAqY29scyA9IE5JTDsKKworCQkJLyoKKwkJCSAqIEN1cnJlbnRseSBvbmx5IFVQ REFURSBPRiBjYW4gYmUgb2JqZWN0cyBpbiB0aGUgb3V0cHV0IEpTT04sIGJ1dAorCQkJICogd2Ug YWRkIGEgImtpbmQiIGVsZW1lbnQgc28gdGhhdCB1c2VyIGNvZGUgY2FuIGRpc3Rpbmd1aXNoCisJ CQkgKiBwb3NzaWJsZSBmdXR1cmUgbmV3IGV2ZW50IHR5cGVzLgorCQkJICovCisJCQl1cGRhdGUg PSBuZXdfb2JqdHJlZV9WQSgiVVBEQVRFIE9GIiwgMSwKKwkJCQkJCQkJCSJraW5kIiwgT2JqVHlw ZVN0cmluZywgInVwZGF0ZV9vZiIpOworCisJCQlmb3JlYWNoKGNlbGwsIG5vZGUtPmNvbHVtbnMp CisJCQl7CisJCQkJY2hhcgkgICAqY29sbmFtZSA9IHN0clZhbChsZmlyc3QoY2VsbCkpOworCisJ CQkJY29scyA9IGxhcHBlbmQoY29scywgbmV3X3N0cmluZ19vYmplY3QoY29sbmFtZSkpOworCQkJ fQorCisJCQlhcHBlbmRfYXJyYXlfb2JqZWN0KHVwZGF0ZSwgIiV7Y29sdW1uczosIH1JIiwgY29s cyk7CisKKwkJCWV2ZW50cyA9IGxhcHBlbmQoZXZlbnRzLCBuZXdfb2JqZWN0X29iamVjdCh1cGRh dGUpKTsKKwkJfQorCX0KKwlhcHBlbmRfYXJyYXlfb2JqZWN0KHJldCwgIiV7ZXZlbnRzOiBPUiB9 cyIsIGV2ZW50cyk7CisKKwl0bXBfb2JqID0gbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFJl bGF0aW9uUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkgdHJpZ0Zvcm0tPnRncmVsaWQpOworCWFwcGVu ZF9vYmplY3Rfb2JqZWN0KHJldCwgIk9OICV7cmVsYXRpb259RCIsIHRtcF9vYmopOworCisJdG1w X29iaiA9IG5ld19vYmp0cmVlKCJGUk9NIik7CisJaWYgKHRyaWdGb3JtLT50Z2NvbnN0cnJlbGlk KQorCXsKKwkJT2JqVHJlZSAgICAqcmVsOworCisJCXJlbCA9IG5ld19vYmp0cmVlX2Zvcl9xdWFs bmFtZV9pZChSZWxhdGlvblJlbGF0aW9uSWQsCisJCQkJCQkJCQkJICB0cmlnRm9ybS0+dGdjb25z dHJyZWxpZCk7CisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcF9vYmosICIle3JlbGF0aW9ufUQi LCByZWwpOworCX0KKwllbHNlCisJCWFwcGVuZF9ub3RfcHJlc2VudCh0bXBfb2JqKTsKKwlhcHBl bmRfb2JqZWN0X29iamVjdChyZXQsICIle2Zyb21fdGFibGV9cyIsIHRtcF9vYmopOworCisJaWYg KG5vZGUtPmRlZmVycmFibGUpCisJCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19zdHJpbmdfb2Jq ZWN0KCJERUZFUlJBQkxFIikpOworCWlmIChub2RlLT5pbml0ZGVmZXJyZWQpCisJCWxpc3QgPSBs YXBwZW5kKGxpc3QsIG5ld19zdHJpbmdfb2JqZWN0KCJJTklUSUFMTFkgREVGRVJSRUQiKSk7CisJ YXBwZW5kX2FycmF5X29iamVjdChyZXQsICIle2NvbnN0cmFpbnRfYXR0cnM6IH1zIiwgbGlzdCk7 CisKKwlhcHBlbmRfc3RyaW5nX29iamVjdChyZXQsICJGT1IgRUFDSCAle2Zvcl9lYWNofXMiLCAi Zm9yX2VhY2giLAorCQkJCQkJIG5vZGUtPnJvdyA/ICJST1ciIDogIlNUQVRFTUVOVCIpOworCisJ dG1wX29iaiA9IG5ld19vYmp0cmVlKCJXSEVOIik7CisJaWYgKG5vZGUtPndoZW5DbGF1c2UpCisJ eworCQlOb2RlCSAgICp3aGVuQ2xhdXNlOworCQlEYXR1bQkJdmFsdWU7CisJCWJvb2wJCWlzbnVs bDsKKworCQl2YWx1ZSA9IGZhc3RnZXRhdHRyKHRyaWdUdXAsIEFudW1fcGdfdHJpZ2dlcl90Z3F1 YWwsCisJCQkJCQkJUmVsYXRpb25HZXREZXNjcihwZ190cmlnZ2VyKSwgJmlzbnVsbCk7CisJCWlm IChpc251bGwpCisJCQllbG9nKEVSUk9SLCAibnVsbCB0Z3F1YWwgZm9yIHRyaWdnZXIgXCIlc1wi IiwKKwkJCQkgTmFtZVN0cih0cmlnRm9ybS0+dGduYW1lKSk7CisKKwkJd2hlbkNsYXVzZSA9IHN0 cmluZ1RvTm9kZShUZXh0RGF0dW1HZXRDU3RyaW5nKHZhbHVlKSk7CisJCWFwcGVuZF9zdHJpbmdf b2JqZWN0KHRtcF9vYmosICIoJXtjbGF1c2V9cykiLCAiY2xhdXNlIiwKKwkJCQkJCQkgcGdfZ2V0 X3RyaWdnZXJfd2hlbmNsYXVzZSh0cmlnRm9ybSwKKwkJCQkJCQkJCQkJCQkgICB3aGVuQ2xhdXNl LAorCQkJCQkJCQkJCQkJCSAgIGZhbHNlKSk7CisJfQorCWVsc2UKKwkJYXBwZW5kX25vdF9wcmVz ZW50KHRtcF9vYmopOworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHJldCwgIiV7d2hlbn1zIiwgdG1w X29iaik7CisKKwl0bXBfb2JqID0gbmV3X29ianRyZWVfVkEoIiV7ZnVuY25hbWV9RCIsIDEsCisJ CQkJCQkJImZ1bmNuYW1lIiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCQluZXdfb2JqdHJlZV9mb3Jf cXVhbG5hbWVfaWQoUHJvY2VkdXJlUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkJdHJpZ0Zvcm0t PnRnZm9pZCkpOworCWxpc3QgPSBOSUw7CisJdGduYXJncyA9IHRyaWdGb3JtLT50Z25hcmdzOwor CWlmICh0Z25hcmdzID4gMCkKKwl7CisJCWJ5dGVhCSAgICp0Z2FyZ3M7CisJCWNoYXIJICAgKmFy Z3N0cjsKKwkJYm9vbAkJaXNudWxsOworCQlpbnQJCQlmaW5keDsKKwkJaW50CQkJbGVudGdhcmdz OworCQljaGFyCSAgICpwOworCisJCXRnYXJncyA9IERhdHVtR2V0Qnl0ZWFQKGZhc3RnZXRhdHRy KHRyaWdUdXAsCisJCQkJCQkJCQkJCUFudW1fcGdfdHJpZ2dlcl90Z2FyZ3MsCisJCQkJCQkJCQkJ CVJlbGF0aW9uR2V0RGVzY3IocGdfdHJpZ2dlciksCisJCQkJCQkJCQkJCSZpc251bGwpKTsKKwkJ aWYgKGlzbnVsbCkKKwkJCWVsb2coRVJST1IsICJudWxsIHRnYXJncyBmb3IgdHJpZ2dlciBcIiVz XCIiLAorCQkJCSBOYW1lU3RyKHRyaWdGb3JtLT50Z25hbWUpKTsKKwkJYXJnc3RyID0gKGNoYXIg KikgVkFSREFUQSh0Z2FyZ3MpOworCQlsZW50Z2FyZ3MgPSBWQVJTSVpFX0FOWV9FWEhEUih0Z2Fy Z3MpOworCisJCXAgPSBhcmdzdHI7CisJCWZvciAoZmluZHggPSAwOyBmaW5keCA8IHRnbmFyZ3M7 IGZpbmR4KyspCisJCXsKKwkJCXNpemVfdAkJdGxlbjsKKworCQkJLyogVmVyaWZ5IHRoYXQgdGhl IGFyZ3VtZW50IGVuY29kaW5nIGlzIGNvcnJlY3QgKi8KKwkJCXRsZW4gPSBzdHJsZW4ocCk7CisJ CQlpZiAocCArIHRsZW4gPj0gYXJnc3RyICsgbGVudGdhcmdzKQorCQkJCWVsb2coRVJST1IsICJp bnZhbGlkIGFyZ3VtZW50IHN0cmluZyAoJXMpIGZvciB0cmlnZ2VyIFwiJXNcIiIsCisJCQkJCSBh cmdzdHIsIE5hbWVTdHIodHJpZ0Zvcm0tPnRnbmFtZSkpOworCisJCQlsaXN0ID0gbGFwcGVuZChs aXN0LCBuZXdfc3RyaW5nX29iamVjdChwKSk7CisKKwkJCXAgKz0gdGxlbiArIDE7CisJCX0KKwl9 CisKKwlhcHBlbmRfZm9ybWF0X3N0cmluZyh0bXBfb2JqLCAiKCIpOworCWFwcGVuZF9hcnJheV9v YmplY3QodG1wX29iaiwgIiV7YXJnczosIH1MIiwgbGlzdCk7CS8qIG1pZ2h0IGJlIE5JTCAqLwor CWFwcGVuZF9mb3JtYXRfc3RyaW5nKHRtcF9vYmosICIpIik7CisKKwlhcHBlbmRfb2JqZWN0X29i amVjdChyZXQsICJFWEVDVVRFIFBST0NFRFVSRSAle2Z1bmN0aW9ufXMiLCB0bXBfb2JqKTsKKwor CXRhYmxlX2Nsb3NlKHBnX3RyaWdnZXIsIEFjY2Vzc1NoYXJlTG9jayk7CisKKwlyZXR1cm4gcmV0 OworfQorCisvKgorICogRGVwYXJzZSBhIENyZWF0ZVVzZXJNYXBwaW5nU3RtdCAoQ1JFQVRFIFVT RVIgTUFQUElORykKKyAqCisgKiBHaXZlbiBhIFVzZXIgTWFwcGluZyBPSUQgYW5kIHRoZSBwYXJz ZSB0cmVlIHRoYXQgY3JlYXRlZCBpdCwKKyAqIHJldHVybiBhbiBPYmpUcmVlIHJlcHJlc2VudGlu ZyB0aGUgQ1JFQVRFIFVTRVIgTUFQUElORyBjb21tYW5kLgorICoKKyAqIFZlcmJvc2Ugc3ludGF4 CisgKiBDUkVBVEUgVVNFUiBNQVBQSU5HIEZPUiAle3JvbGV9UiBTRVJWRVIgJXtzZXJ2ZXJ9SQor ICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0NyZWF0ZVVzZXJNYXBwaW5nU3RtdChPaWQg b2JqZWN0SWQsIE5vZGUgKnBhcnNldHJlZSkKK3sKKwlDcmVhdGVVc2VyTWFwcGluZ1N0bXQgKm5v ZGUgPSAoQ3JlYXRlVXNlck1hcHBpbmdTdG10ICopIHBhcnNldHJlZTsKKwlPYmpUcmVlICAgICpy ZXQ7CisJUmVsYXRpb24JcmVsOworCUhlYXBUdXBsZQl0cDsKKwlGb3JtX3BnX3VzZXJfbWFwcGlu ZyBmb3JtOworCUZvcmVpZ25TZXJ2ZXIgKnNlcnZlcjsKKworCXJlbCA9IHRhYmxlX29wZW4oVXNl ck1hcHBpbmdSZWxhdGlvbklkLCBSb3dFeGNsdXNpdmVMb2NrKTsKKworCS8qCisJICogTG9va3Vw IG9iamVjdCBpbiB0aGUgY2F0YWxvZywgc28gd2UgZG9uJ3QgaGF2ZSB0byBkZWFsIHdpdGgKKwkg KiBjdXJyZW50X3VzZXIgYW5kIHN1Y2guCisJICovCisJdHAgPSBTZWFyY2hTeXNDYWNoZTEoVVNF Uk1BUFBJTkdPSUQsIE9iamVjdElkR2V0RGF0dW0ob2JqZWN0SWQpKTsKKwlpZiAoIUhlYXBUdXBs ZUlzVmFsaWQodHApKQorCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3IgdXNl ciBtYXBwaW5nIHdpdGggT0lEICV1IiwKKwkJCSBvYmplY3RJZCk7CisKKwlmb3JtID0gKEZvcm1f cGdfdXNlcl9tYXBwaW5nKSBHRVRTVFJVQ1QodHApOworCisJc2VydmVyID0gR2V0Rm9yZWlnblNl cnZlcihmb3JtLT51bXNlcnZlcik7CisKKwlyZXQgPSBuZXdfb2JqdHJlZV9WQSgiQ1JFQVRFIFVT RVIgTUFQUElORyBGT1IgJXtyb2xlfVIgU0VSVkVSICV7c2VydmVyfUkgJXtnZW5lcmljX29wdGlv bnN9cyIsIDMsCisJCQkJCQkgInJvbGUiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJIG5ld19vYmp0 cmVlX2Zvcl9yb2xlX2lkKGZvcm0tPnVtdXNlciksCisJCQkJCQkgInNlcnZlciIsIE9ialR5cGVT dHJpbmcsIHNlcnZlci0+c2VydmVybmFtZSwKKwkJCQkJCSAiZ2VuZXJpY19vcHRpb25zIiwgT2Jq VHlwZU9iamVjdCwKKwkJCQkJCSBkZXBhcnNlX0Zkd09wdGlvbnMobm9kZS0+b3B0aW9ucywgTlVM TCkpOworCisJUmVsZWFzZVN5c0NhY2hlKHRwKTsKKwl0YWJsZV9jbG9zZShyZWwsIFJvd0V4Y2x1 c2l2ZUxvY2spOworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBkZXBhcnNlX0FsdGVyVXNlck1h cHBpbmcKKyAqCisgKiBHaXZlbiBhIFVzZXIgTWFwcGluZyBPSUQgYW5kIHRoZSBwYXJzZSB0cmVl IHRoYXQgY3JlYXRlZCBpdCwgcmV0dXJuIGFuCisgKiBPYmpUcmVlIHJlcHJlc2VudGluZyB0aGUg YWx0ZXIgY29tbWFuZC4KKyAqCisgKiBWZXJib3NlIHN5bnRheAorICogQUxURVIgVVNFUiBNQVBQ SU5HIEZPUiAle3JvbGV9UiBTRVJWRVIgJXtzZXJ2ZXJ9SQorICovCitzdGF0aWMgT2JqVHJlZSAq CitkZXBhcnNlX0FsdGVyVXNlck1hcHBpbmdTdG10KE9pZCBvYmplY3RJZCwgTm9kZSAqcGFyc2V0 cmVlKQoreworCUFsdGVyVXNlck1hcHBpbmdTdG10ICpub2RlID0gKEFsdGVyVXNlck1hcHBpbmdT dG10ICopIHBhcnNldHJlZTsKKwlPYmpUcmVlICAgICpyZXQ7CisJUmVsYXRpb24JcmVsOworCUhl YXBUdXBsZQl0cDsKKwlGb3JtX3BnX3VzZXJfbWFwcGluZyBmb3JtOworCUZvcmVpZ25TZXJ2ZXIg KnNlcnZlcjsKKworCXJlbCA9IHRhYmxlX29wZW4oVXNlck1hcHBpbmdSZWxhdGlvbklkLCBSb3dF eGNsdXNpdmVMb2NrKTsKKworCS8qCisJICogTG9va3VwIG9iamVjdCBpbiB0aGUgY2F0YWxvZywg c28gd2UgZG9uJ3QgaGF2ZSB0byBkZWFsIHdpdGgKKwkgKiBjdXJyZW50X3VzZXIgYW5kIHN1Y2gu CisJICovCisJdHAgPSBTZWFyY2hTeXNDYWNoZTEoVVNFUk1BUFBJTkdPSUQsIE9iamVjdElkR2V0 RGF0dW0ob2JqZWN0SWQpKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQodHApKQorCQllbG9nKEVS Uk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3IgdXNlciBtYXBwaW5nIHdpdGggT0lEICV1IiwK KwkJCSBvYmplY3RJZCk7CisKKwlmb3JtID0gKEZvcm1fcGdfdXNlcl9tYXBwaW5nKSBHRVRTVFJV Q1QodHApOworCisJc2VydmVyID0gR2V0Rm9yZWlnblNlcnZlcihmb3JtLT51bXNlcnZlcik7CisK KwlyZXQgPSBuZXdfb2JqdHJlZV9WQSgiQUxURVIgVVNFUiBNQVBQSU5HIEZPUiAle3JvbGV9UiBT RVJWRVIgJXtzZXJ2ZXJ9SSAle2dlbmVyaWNfb3B0aW9uc31zIiwgMywKKwkJCQkJCSAicm9sZSIs IE9ialR5cGVPYmplY3QsCisJCQkJCQkgbmV3X29ianRyZWVfZm9yX3JvbGVfaWQoZm9ybS0+dW11 c2VyKSwKKwkJCQkJCSAic2VydmVyIiwgT2JqVHlwZVN0cmluZywgc2VydmVyLT5zZXJ2ZXJuYW1l LAorCQkJCQkJICJnZW5lcmljX29wdGlvbnMiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJIGRlcGFy c2VfRmR3T3B0aW9ucyhub2RlLT5vcHRpb25zLCBOVUxMKSk7CisKKwlSZWxlYXNlU3lzQ2FjaGUo dHApOworCXRhYmxlX2Nsb3NlKHJlbCwgUm93RXhjbHVzaXZlTG9jayk7CisJcmV0dXJuIHJldDsK K30KKworLyoKKyAqIERlcGFyc2UgYW4gQWx0ZXJTdGF0c1N0bXQgKEFMVEVSIFNUQVRJU1RJQ1Mp CisgKgorICogR2l2ZW4gYSBhbHRlciBzdGF0aXN0aWNzIE9JRCBhbmQgdGhlIHBhcnNlIHRyZWUg dGhhdCBjcmVhdGVkIGl0LCByZXR1cm4gYW4KKyAqIE9ialRyZWUgcmVwcmVzZW50aW5nIHRoZSBh bHRlciBjb21tYW5kLgorICoKKyAqIFZlcmJvc2Ugc3ludGF4CisgKiBBTFRFUiBTVEFUSVNUSUNT ICV7aWRlbnRpdHl9RCBTRVQgU1RBVElTVElDUyAle3RhcmdldH1uCisgKi8KK3N0YXRpYyBPYmpU cmVlICoKK2RlcGFyc2VfQWx0ZXJTdGF0c1N0bXQoT2lkIG9iamVjdElkLCBOb2RlICpwYXJzZXRy ZWUpCit7CisJQWx0ZXJTdGF0c1N0bXQgKm5vZGUgPSAoQWx0ZXJTdGF0c1N0bXQgKikgcGFyc2V0 cmVlOworCU9ialRyZWUgICAgKnJldDsKKwlIZWFwVHVwbGUJdHA7CisJRm9ybV9wZ19zdGF0aXN0 aWNfZXh0IHN0YXRmb3JtOworCisJaWYgKCFub2RlLT5zdHhzdGF0dGFyZ2V0KQorCQlyZXR1cm4g TlVMTDsKKworCS8qIExvb2t1cCBvYmplY3QgaW4gdGhlIGNhdGFsb2cgKi8KKwl0cCA9IFNlYXJj aFN5c0NhY2hlMShTVEFURVhUT0lELCBPYmplY3RJZEdldERhdHVtKG9iamVjdElkKSk7CisJaWYg KCFIZWFwVHVwbGVJc1ZhbGlkKHRwKSkKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWls ZWQgZm9yIHN0YXRpc3RpYyB3aXRoIE9JRCAldSIsIG9iamVjdElkKTsKKworCXN0YXRmb3JtID0g KEZvcm1fcGdfc3RhdGlzdGljX2V4dCkgR0VUU1RSVUNUKHRwKTsKKwlyZXQgPSBuZXdfb2JqdHJl ZV9WQSgiQUxURVIgU1RBVElTVElDUyAle2lkZW50aXR5fUQgU0VUIFNUQVRJU1RJQ1MgJXt0YXJn ZXR9biIsIDIsCisJCQkJCQkgImlkZW50aXR5IiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCSBuZXdf b2JqdHJlZV9mb3JfcXVhbG5hbWUoc3RhdGZvcm0tPnN0eG5hbWVzcGFjZSwKKwkJCQkJCQkJCQkJ CSAgTmFtZVN0cihzdGF0Zm9ybS0+c3R4bmFtZSkpLAorCQkJCQkJICJ0YXJnZXQiLCBPYmpUeXBl SW50ZWdlciwgbm9kZS0+c3R4c3RhdHRhcmdldCk7CisKKwlSZWxlYXNlU3lzQ2FjaGUodHApOwor CXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBEZXBhcnNlIGEgUmVmcmVzaE1hdFZpZXdTdG10IChS RUZSRVNIIE1BVEVSSUFMSVpFRCBWSUVXKQorICoKKyAqIEdpdmVuIGEgbWF0ZXJpYWxpemVkIHZp ZXcgT0lEIGFuZCB0aGUgcGFyc2UgdHJlZSB0aGF0IGNyZWF0ZWQgaXQsIHJldHVybiBhbgorICog T2JqVHJlZSByZXByZXNlbnRpbmcgdGhlIHJlZnJlc2ggY29tbWFuZC4KKyAqCisgKiBWZXJib3Nl IHN5bnRheAorICogUkVGUkVTSCBNQVRFUklBTElaRUQgVklFVyAle2NvbmN1cnJlbnRseX1zICV7 aWRlbnRpdHl9RCAle3dpdGhfbm9fZGF0YX1zCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFy c2VfUmVmcmVzaE1hdFZpZXdTdG10KE9pZCBvYmplY3RJZCwgTm9kZSAqcGFyc2V0cmVlKQorewor CVJlZnJlc2hNYXRWaWV3U3RtdCAqbm9kZSA9IChSZWZyZXNoTWF0Vmlld1N0bXQgKikgcGFyc2V0 cmVlOworCU9ialRyZWUgICAgKnJldDsKKwlPYmpUcmVlICAgICp0bXA7CisKKwlyZXQgPSBuZXdf b2JqdHJlZV9WQSgiUkVGUkVTSCBNQVRFUklBTElaRUQgVklFVyAle2NvbmN1cnJlbnRseX1zICV7 aWRlbnRpdHl9RCIsIDIsCisJCQkJCQkgImNvbmN1cnJlbnRseSIsIE9ialR5cGVTdHJpbmcsCisJ CQkJCQkgbm9kZS0+Y29uY3VycmVudCA/ICJDT05DVVJSRU5UTFkiIDogIiIsCisJCQkJCQkgImlk ZW50aXR5IiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVf aWQoUmVsYXRpb25SZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCSBvYmplY3RJZCkpOworCisJLyog QWRkIGEgV0lUSCBOTyBEQVRBIGNsYXVzZSAqLworCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJXSVRI IE5PIERBVEEiLCAxLAorCQkJCQkJICJwcmVzZW50IiwgT2JqVHlwZUJvb2wsCisJCQkJCQkgbm9k ZS0+c2tpcERhdGEgPyB0cnVlIDogZmFsc2UpOworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHJldCwg IiV7d2l0aF9ub19kYXRhfXMiLCB0bXApOworCisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIERl cGFyc2UgRGVmRWxlbXMsIGFzIHVzZWQgZS5nLiBieSBBTFRFUiBDT0xVTU4gLi4uIFNFVCwgaW50 byBhIGxpc3Qgb2YgU0VUCisgKiAoLi4uKSAgb3IgUkVTRVQgKC4uLikgY29udGVudHMuCisgKgor ICogVmVyYm9zZSBzeW50YXgKKyAqICV7bGFiZWx9cyA9ICV7dmFsdWV9TAorICovCitzdGF0aWMg T2JqVHJlZSAqCitkZXBhcnNlX0RlZkVsZW0oRGVmRWxlbSAqZWxlbSwgYm9vbCBpc19yZXNldCkK K3sKKwlPYmpUcmVlICAgICpyZXQ7CisJT2JqVHJlZSAgICAqb3B0bmFtZSA9IG5ld19vYmp0cmVl KCIiKTsKKworCWlmIChlbGVtLT5kZWZuYW1lc3BhY2UgIT0gTlVMTCkKKwkJYXBwZW5kX3N0cmlu Z19vYmplY3Qob3B0bmFtZSwgIiV7c2NoZW1hfUkuIiwgInNjaGVtYSIsCisJCQkJCQkJIGVsZW0t PmRlZm5hbWVzcGFjZSk7CisKKwlhcHBlbmRfc3RyaW5nX29iamVjdChvcHRuYW1lLCAiJXtsYWJl bH1JIiwgImxhYmVsIiwgZWxlbS0+ZGVmbmFtZSk7CisKKwlyZXQgPSBuZXdfb2JqdHJlZV9WQSgi JXtsYWJlbH1zIiwgMSwKKwkJCQkJCSAibGFiZWwiLCBPYmpUeXBlT2JqZWN0LCBvcHRuYW1lKTsK KworCWlmICghaXNfcmVzZXQpCisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHJldCwgIj0gJXt2YWx1 ZX1MIiwgInZhbHVlIiwKKwkJCQkJCQkgZWxlbS0+YXJnID8gZGVmR2V0U3RyaW5nKGVsZW0pIDoK KwkJCQkJCQkgZGVmR2V0Qm9vbGVhbihlbGVtKSA/ICJUUlVFIiA6ICJGQUxTRSIpOworCisJcmV0 dXJuIHJldDsKK30KKworLyoKKyAqIEhhbmRsZSBkZXBhcnNpbmcgb2YgRFJPUCBjb21tYW5kcy4K KyAqCisgKiBWZXJib3NlIHN5bnRheAorICogRFJPUCAlcyBJRiBFWElTVFMgJSV7b2JqaWRlbnRp dHl9cyAle2Nhc2NhZGV9cworICovCitjaGFyICoKK2RlcGFyc2VfZHJvcF9jb21tYW5kKGNvbnN0 IGNoYXIgKm9iamlkZW50aXR5LCBjb25zdCBjaGFyICpvYmplY3R0eXBlLAorCQkJCQkgRHJvcEJl aGF2aW9yIGJlaGF2aW9yKQoreworCVN0cmluZ0luZm9EYXRhIHN0cjsKKwljaGFyCSAgICpjb21t YW5kOworCWNoYXIJICAgKmlkZW50aXR5ID0gKGNoYXIgKikgb2JqaWRlbnRpdHk7CisJT2JqVHJl ZSAgICAqc3RtdDsKKwlPYmpUcmVlICAgICp0bXBfb2JqOworCUpzb25iCSAgICpqc29uYjsKKwor CWluaXRTdHJpbmdJbmZvKCZzdHIpOworCisJc3RtdCA9IG5ld19vYmp0cmVlX1ZBKCJEUk9QICV7 b2JqdHlwZX1zIElGIEVYSVNUUyAle29iamlkZW50aXR5fXMiLCAyLAorCQkJCQkJICAib2JqdHlw ZSIsIE9ialR5cGVTdHJpbmcsIG9iamVjdHR5cGUsCisJCQkJCQkgICJvYmppZGVudGl0eSIsIE9i alR5cGVTdHJpbmcsIGlkZW50aXR5KTsKKworCXRtcF9vYmogPSBuZXdfb2JqdHJlZV9WQSgiQ0FT Q0FERSIsIDEsCisJCQkJCQkJInByZXNlbnQiLCBPYmpUeXBlQm9vbCwgYmVoYXZpb3IgPT0gRFJP UF9DQVNDQURFKTsKKwlhcHBlbmRfb2JqZWN0X29iamVjdChzdG10LCAiJXtjYXNjYWRlfXMiLCB0 bXBfb2JqKTsKKworCWpzb25iID0gb2JqdHJlZV90b19qc29uYihzdG10KTsKKwljb21tYW5kID0g SnNvbmJUb0NTdHJpbmcoJnN0ciwgJmpzb25iLT5yb290LCBKU09OQl9FU1RJTUFURURfTEVOKTsK KworCXJldHVybiBjb21tYW5kOworfQorCisvKgorICogSGFuZGxlIGRlcGFyc2luZyBzZXR0aW5n IG9mIEZ1bmN0aW9uCisgKgorICogVmVyYm9zZSBzeW50YXgKKyAqIFJFU0VUIEFMTAorICogT1IK KyAqIFNFVCAle3NldF9uYW1lfUkgVE8gJXtzZXRfdmFsdWV9cworICogT1IKKyAqIFJFU0VUICV7 c2V0X25hbWV9SQorICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0Z1bmN0aW9uU2V0KFZh cmlhYmxlU2V0S2luZCBraW5kLCBjaGFyICpuYW1lLCBjaGFyICp2YWx1ZSkKK3sKKwlPYmpUcmVl ICAgICpyZXQ7CisKKwlpZiAoa2luZCA9PSBWQVJfUkVTRVRfQUxMKQorCQlyZXQgPSBuZXdfb2Jq dHJlZSgiUkVTRVQgQUxMIik7CisJZWxzZSBpZiAoa2luZCA9PSBWQVJfU0VUX1ZBTFVFKQorCXsK KwkJcmV0ID0gbmV3X29ianRyZWVfVkEoIlNFVCAle3NldF9uYW1lfUkiLCAxLAorCQkJCQkJCSAi c2V0X25hbWUiLCBPYmpUeXBlU3RyaW5nLCBuYW1lKTsKKworCQkvKgorCQkgKiBTb21lIEdVQyB2 YXJpYWJsZSBuYW1lcyBhcmUgJ0xJU1QnIHR5cGUgYW5kIGhlbmNlIG11c3Qgbm90IGJlCisJCSAq IHF1b3RlZC4KKwkJICovCisJCWlmIChHZXRDb25maWdPcHRpb25GbGFncyhuYW1lLCB0cnVlKSAm IEdVQ19MSVNUX1FVT1RFKQorCQkJYXBwZW5kX3N0cmluZ19vYmplY3QocmV0LCAiVE8gJXtzZXRf dmFsdWV9cyIsICJzZXRfdmFsdWUiLCB2YWx1ZSk7CisJCWVsc2UKKwkJCWFwcGVuZF9zdHJpbmdf b2JqZWN0KHJldCwgIlRPICV7c2V0X3ZhbHVlfUwiLCAic2V0X3ZhbHVlIiwgdmFsdWUpOworCX0K KwllbHNlCisJCXJldCA9IG5ld19vYmp0cmVlX1ZBKCJSRVNFVCAle3NldF9uYW1lfUkiLCAxLAor CQkJCQkJCSAic2V0X25hbWUiLCBPYmpUeXBlU3RyaW5nLCBuYW1lKTsKKworCXJldHVybiByZXQ7 Cit9CisKKy8qCisgKiBEZXBhcnNlIGFuIEluZGV4U3RtdC4KKyAqCisgKiBHaXZlbiBhbiBpbmRl eCBPSUQgYW5kIHRoZSBwYXJzZSB0cmVlIHRoYXQgY3JlYXRlZCBpdCwgcmV0dXJuIGFuIE9ialRy ZWUKKyAqIHJlcHJlc2VudGluZyB0aGUgY3JlYXRpb24gY29tbWFuZC4KKyAqCisgKiBJZiB0aGUg aW5kZXggY29ycmVzcG9uZHMgdG8gYSBjb25zdHJhaW50LCBOVUxMIGlzIHJldHVybmVkLgorICoK KyAqIFZlcmJvc2Ugc3ludGF4CisgKiBDUkVBVEUgJXt1bmlxdWV9cyBJTkRFWCAle2NvbmN1cnJl bnRseX1zICV7aWZfbm90X2V4aXN0c31zICV7bmFtZX1JIE9OCisgKiAle3RhYmxlfUQgVVNJTkcg JXtpbmRleF9hbX1zICV7ZGVmaW5pdGlvbn1zICV7d2l0aH1zICV7dGFibGVzcGFjZX1zCisgKiAl e3doZXJlX2NsYXVzZX1zCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfSW5kZXhTdG10 KE9pZCBvYmplY3RJZCwgTm9kZSAqcGFyc2V0cmVlKQoreworCUluZGV4U3RtdCAgKm5vZGUgPSAo SW5kZXhTdG10ICopIHBhcnNldHJlZTsKKwlPYmpUcmVlICAgICpyZXQ7CisJT2JqVHJlZSAgICAq dG1wX29iajsKKwlSZWxhdGlvbglpZHhyZWw7CisJUmVsYXRpb24JaGVhcHJlbDsKKwljaGFyCSAg ICppbmRleF9hbTsKKwljaGFyCSAgICpkZWZpbml0aW9uOworCWNoYXIJICAgKnJlbG9wdGlvbnM7 CisJY2hhcgkgICAqdGFibGVzcGFjZTsKKwljaGFyCSAgICp3aGVyZUNsYXVzZTsKKworCWlmIChu b2RlLT5wcmltYXJ5IHx8IG5vZGUtPmlzY29uc3RyYWludCkKKwl7CisJCS8qCisJCSAqIEluZGV4 ZXMgZm9yIFBSSU1BUlkgS0VZIGFuZCBvdGhlciBjb25zdHJhaW50cyBhcmUgb3V0cHV0CisJCSAq IHNlcGFyYXRlbHk7IHJldHVybiBlbXB0eSBoZXJlLgorCQkgKi8KKwkJcmV0dXJuIE5VTEw7CisJ fQorCisJaWR4cmVsID0gcmVsYXRpb25fb3BlbihvYmplY3RJZCwgQWNjZXNzU2hhcmVMb2NrKTsK KwloZWFwcmVsID0gcmVsYXRpb25fb3BlbihpZHhyZWwtPnJkX2luZGV4LT5pbmRyZWxpZCwgQWNj ZXNzU2hhcmVMb2NrKTsKKworCXBnX2dldF9pbmRleGRlZl9kZXRhaWxlZChvYmplY3RJZCwKKwkJ CQkJCQkgJmluZGV4X2FtLCAmZGVmaW5pdGlvbiwgJnJlbG9wdGlvbnMsCisJCQkJCQkJICZ0YWJs ZXNwYWNlLCAmd2hlcmVDbGF1c2UpOworCisJcmV0ID0gbmV3X29ianRyZWVfVkEoIkNSRUFURSAl e3VuaXF1ZX1zIElOREVYICV7Y29uY3VycmVudGx5fXMgJXtpZl9ub3RfZXhpc3RzfXMgJXtuYW1l fUkgT04gJXt0YWJsZX1EIFVTSU5HICV7aW5kZXhfYW19cyAle2RlZmluaXRpb259cyIsIDcsCisJ CQkJCQkgInVuaXF1ZSIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkgbm9kZS0+dW5pcXVlID8gIlVO SVFVRSIgOiAiIiwKKwkJCQkJCSAiY29uY3VycmVudGx5IiwgT2JqVHlwZVN0cmluZywKKwkJCQkJ CSBub2RlLT5jb25jdXJyZW50ID8gIkNPTkNVUlJFTlRMWSIgOiAiIiwKKwkJCQkJCSAiaWZfbm90 X2V4aXN0cyIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkgbm9kZS0+aWZfbm90X2V4aXN0cyA/ICJJ RiBOT1QgRVhJU1RTIiA6ICIiLAorCQkJCQkJICJuYW1lIiwgT2JqVHlwZVN0cmluZywKKwkJCQkJ CSBSZWxhdGlvbkdldFJlbGF0aW9uTmFtZShpZHhyZWwpLAorCQkJCQkJICJ0YWJsZSIsIE9ialR5 cGVPYmplY3QsCisJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lKGhlYXByZWwtPnJkX3Jl bC0+cmVsbmFtZXNwYWNlLAorCQkJCQkJCQkJCQkJICBSZWxhdGlvbkdldFJlbGF0aW9uTmFtZSho ZWFwcmVsKSksCisJCQkJCQkgImluZGV4X2FtIiwgT2JqVHlwZVN0cmluZywgaW5kZXhfYW0sCisJ CQkJCQkgImRlZmluaXRpb24iLCBPYmpUeXBlU3RyaW5nLCBkZWZpbml0aW9uKTsKKworCS8qIHJl bG9wdGlvbnMgKi8KKwl0bXBfb2JqID0gbmV3X29ianRyZWUoIldJVEgiKTsKKwlpZiAocmVsb3B0 aW9ucykKKwkJYXBwZW5kX3N0cmluZ19vYmplY3QodG1wX29iaiwgIigle29wdHN9cykiLCAib3B0 cyIsIHJlbG9wdGlvbnMpOworCWVsc2UKKwkJYXBwZW5kX25vdF9wcmVzZW50KHRtcF9vYmopOwor CWFwcGVuZF9vYmplY3Rfb2JqZWN0KHJldCwgIiV7d2l0aH1zIiwgdG1wX29iaik7CisKKwkvKiB0 YWJsZXNwYWNlICovCisJdG1wX29iaiA9IG5ld19vYmp0cmVlKCJUQUJMRVNQQUNFIik7CisJaWYg KHRhYmxlc3BhY2UpCisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRtcF9vYmosICIle3RhYmxlc3Bh Y2V9cyIsICJ0YWJsZXNwYWNlIiwgdGFibGVzcGFjZSk7CisJZWxzZQorCQlhcHBlbmRfbm90X3By ZXNlbnQodG1wX29iaik7CisJYXBwZW5kX29iamVjdF9vYmplY3QocmV0LCAiJXt0YWJsZXNwYWNl fXMiLCB0bXBfb2JqKTsKKworCS8qIFdIRVJFIGNsYXVzZSAqLworCXRtcF9vYmogPSBuZXdfb2Jq dHJlZSgiV0hFUkUiKTsKKwlpZiAod2hlcmVDbGF1c2UpCisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0 KHRtcF9vYmosICIle3doZXJlfXMiLCAid2hlcmUiLCB3aGVyZUNsYXVzZSk7CisJZWxzZQorCQlh cHBlbmRfbm90X3ByZXNlbnQodG1wX29iaik7CisJYXBwZW5kX29iamVjdF9vYmplY3QocmV0LCAi JXt3aGVyZV9jbGF1c2V9cyIsIHRtcF9vYmopOworCisJdGFibGVfY2xvc2UoaWR4cmVsLCBBY2Nl c3NTaGFyZUxvY2spOworCXRhYmxlX2Nsb3NlKGhlYXByZWwsIEFjY2Vzc1NoYXJlTG9jayk7CisK KwlyZXR1cm4gcmV0OworfQorCisvKgorICogRGVwYXJzZSB0aGUgSU5IRVJJVFMgcmVsYXRpb25z LgorICoKKyAqIEdpdmVuIGEgdGFibGUgT0lELCByZXR1cm4gYSBzY2hlbWEtcXVhbGlmaWVkIHRh YmxlIGxpc3QgcmVwcmVzZW50aW5nCisgKiB0aGUgcGFyZW50IHRhYmxlcy4KKyAqLworc3RhdGlj IExpc3QgKgorZGVwYXJzZV9JbmhSZWxhdGlvbnMoT2lkIG9iamVjdElkKQoreworCUxpc3QJICAg KnBhcmVudHMgPSBOSUw7CisJUmVsYXRpb24JaW5oUmVsOworCVN5c1NjYW5EZXNjIHNjYW47CisJ U2NhbktleURhdGEga2V5OworCUhlYXBUdXBsZQl0dXBsZTsKKworCWluaFJlbCA9IHRhYmxlX29w ZW4oSW5oZXJpdHNSZWxhdGlvbklkLCBSb3dFeGNsdXNpdmVMb2NrKTsKKworCVNjYW5LZXlJbml0 KCZrZXksCisJCQkJQW51bV9wZ19pbmhlcml0c19pbmhyZWxpZCwKKwkJCQlCVEVxdWFsU3RyYXRl Z3lOdW1iZXIsIEZfT0lERVEsCisJCQkJT2JqZWN0SWRHZXREYXR1bShvYmplY3RJZCkpOworCisJ c2NhbiA9IHN5c3RhYmxlX2JlZ2luc2NhbihpbmhSZWwsIEluaGVyaXRzUmVsaWRTZXFub0luZGV4 SWQsCisJCQkJCQkJICB0cnVlLCBOVUxMLCAxLCAma2V5KTsKKworCXdoaWxlIChIZWFwVHVwbGVJ c1ZhbGlkKHR1cGxlID0gc3lzdGFibGVfZ2V0bmV4dChzY2FuKSkpCisJeworCQlPYmpUcmVlICAg ICpwYXJlbnQ7CisJCUZvcm1fcGdfaW5oZXJpdHMgZm9ybUluaCA9IChGb3JtX3BnX2luaGVyaXRz KSBHRVRTVFJVQ1QodHVwbGUpOworCisJCXBhcmVudCA9IG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFt ZV9pZChSZWxhdGlvblJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCSBmb3JtSW5oLT5pbmhwYXJlbnQp OworCQlwYXJlbnRzID0gbGFwcGVuZChwYXJlbnRzLCBuZXdfb2JqZWN0X29iamVjdChwYXJlbnQp KTsKKwl9CisKKwlzeXN0YWJsZV9lbmRzY2FuKHNjYW4pOworCXRhYmxlX2Nsb3NlKGluaFJlbCwg Um93RXhjbHVzaXZlTG9jayk7CisKKwlyZXR1cm4gcGFyZW50czsKK30KKworLyoKKyAqIERlcGFy c2UgdGhlIE9OIENPTU1JVCAuLi4gY2xhdXNlIGZvciBDUkVBVEUgLi4uIFRFTVBPUkFSWSAuLi4K KyAqCisgKiBWZXJib3NlIHN5bnRheAorICogT04gQ09NTUlUICV7b25fY29tbWl0X3ZhbHVlfXMK KyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9PbkNvbW1pdENsYXVzZShPbkNvbW1pdEFj dGlvbiBvcHRpb24pCit7CisJT2JqVHJlZSAgICAqcmV0ICA9IG5ld19vYmp0cmVlKCJPTiBDT01N SVQiKTsKKwlzd2l0Y2ggKG9wdGlvbikKKwl7CisJCWNhc2UgT05DT01NSVRfRFJPUDoKKwkJCWFw cGVuZF9zdHJpbmdfb2JqZWN0KHJldCwgIiV7b25fY29tbWl0X3ZhbHVlfXMiLAorCQkJCQkJCQkg Im9uX2NvbW1pdF92YWx1ZSIsICJEUk9QIik7CisJCQlicmVhazsKKworCQljYXNlIE9OQ09NTUlU X0RFTEVURV9ST1dTOgorCQkJYXBwZW5kX3N0cmluZ19vYmplY3QocmV0LCAiJXtvbl9jb21taXRf dmFsdWV9cyIsCisJCQkJCQkJCSAib25fY29tbWl0X3ZhbHVlIiwgIkRFTEVURSBST1dTIik7CisJ CQlicmVhazsKKworCQljYXNlIE9OQ09NTUlUX1BSRVNFUlZFX1JPV1M6CisJCQlhcHBlbmRfc3Ry aW5nX29iamVjdChyZXQsICIle29uX2NvbW1pdF92YWx1ZX1zIiwKKwkJCQkJCQkJICJvbl9jb21t aXRfdmFsdWUiLCAiUFJFU0VSVkUgUk9XUyIpOworCQkJYnJlYWs7CisKKwkJY2FzZSBPTkNPTU1J VF9OT09QOgorCQkJYXBwZW5kX251bGxfb2JqZWN0KHJldCwgIiV7b25fY29tbWl0X3ZhbHVlfXMi KTsKKwkJCWFwcGVuZF9ub3RfcHJlc2VudChyZXQpOworCQkJYnJlYWs7CisJfQorCisJcmV0dXJu IHJldDsKK30KKworLyoKKyAqIERlcGFyc2UgYSBSZW5hbWVTdG10LgorICoKKyAqIFZlcmJvc2Ug c3ludGF4CisgKiBBTFRFUiAlcyAle2lmX2V4aXN0c31zICV7aWRlbnRpdHl9RCBSRU5BTUUgVE8g JXtuZXduYW1lfUkKKyAqIE9SCisgKiBBTFRFUiBQT0xJQ1kgJXtpZl9leGlzdHN9cyAle3BvbGlj eW5hbWV9SSBPTiAle2lkZW50aXR5fUQgUkVOQU1FIFRPICV7bmV3bmFtZX1JCisgKiBPUgorICog QUxURVIgb2JqdHlwZSAle2lkZW50aXR5fUQgUkVOQU1FIEFUVFJJQlVURSAle2NvbG5hbWV9SSBU TyAle25ld25hbWV9SSAle2Nhc2NhZGV9cworICogT1IKKyAqIEFMVEVSIG9ianR5cGUgJXtpZl9l eGlzdHN9cyAlJXtpZGVudGl0eX1EIFJFTkFNRSBDT0xVTU4gJXtjb2xuYW1lfUkgVE8gJXtuZXdu YW1lfUkKKyAqIE9SCisgKiBBTFRFUiAlcyAlJXtpZGVudGl0eX1zIFJFTkFNRSBUTyAlJXtuZXdu YW1lfUkKKyAqIE9SCisgKiBBTFRFUiAlcyAlJXtpZGVudGl0eX1EIFVTSU5HICUle2luZGV4X21l dGhvZH1zIFJFTkFNRSBUTyAlJXtuZXduYW1lfUkKKyAqIE9SCisgKiBBTFRFUiBTQ0hFTUEgJXtp ZGVudGl0eX1JIFJFTkFNRSBUTyAle25ld25hbWV9SQorICogT1IKKyAqIEFMVEVSIFJVTEUgJXty dWxlbmFtZX1JIE9OICV7aWRlbnRpdHl9RCBSRU5BTUUgVE8gJXtuZXduYW1lfUkKKyAqIE9SCisg KiBBTFRFUiBUUklHR0VSICV7dHJpZ2dlcm5hbWV9SSBPTiAle2lkZW50aXR5fUQgUkVOQU1FIFRP ICV7bmV3bmFtZX1JCisgKiBPUgorICogQUxURVIgJXMgJSV7aWRlbnRpdHl9RCBSRU5BTUUgVE8g JSV7bmV3bmFtZX1JCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfUmVuYW1lU3RtdChP YmplY3RBZGRyZXNzIGFkZHJlc3MsIE5vZGUgKnBhcnNldHJlZSkKK3sKKwlSZW5hbWVTdG10ICpu b2RlID0gKFJlbmFtZVN0bXQgKikgcGFyc2V0cmVlOworCU9ialRyZWUgICAgKnJldDsKKwlSZWxh dGlvbglyZWxhdGlvbjsKKwlPaWQJCQlzY2hlbWFJZDsKKworCS8qCisJICogSW4gYW4gQUxURVIg Li4gUkVOQU1FIGNvbW1hbmQsIHdlIGRvbid0IGhhdmUgdGhlIG9yaWdpbmFsIG5hbWUgb2YgdGhl CisJICogb2JqZWN0IGluIHN5c3RlbSBjYXRhbG9nczogc2luY2Ugd2UgaW5zcGVjdCB0aGVtIGFm dGVyIHRoZSBjb21tYW5kIGhhcworCSAqIGV4ZWN1dGVkLCB0aGUgb2xkIG5hbWUgaXMgYWxyZWFk eSBnb25lLiAgVGhlcmVmb3JlLCB3ZSBleHRyYWN0IGl0IGZyb20KKwkgKiB0aGUgcGFyc2Ugbm9k ZS4gIE5vdGUgd2Ugc3RpbGwgZXh0cmFjdCB0aGUgc2NoZW1hIG5hbWUgZnJvbSB0aGUgY2F0YWxv ZworCSAqIChpdCBtaWdodCBub3QgYmUgcHJlc2VudCBpbiB0aGUgcGFyc2Ugbm9kZSk7IGl0IGNh bm5vdCBwb3NzaWJseSBoYXZlCisJICogY2hhbmdlZCBhbnl3YXkuCisJICovCisJc3dpdGNoIChu b2RlLT5yZW5hbWVUeXBlKQorCXsKKwkJY2FzZSBPQkpFQ1RfVEFCTEU6CisJCWNhc2UgT0JKRUNU X0lOREVYOgorCQljYXNlIE9CSkVDVF9TRVFVRU5DRToKKwkJY2FzZSBPQkpFQ1RfVklFVzoKKwkJ Y2FzZSBPQkpFQ1RfTUFUVklFVzoKKwkJCXJlbGF0aW9uID0gcmVsYXRpb25fb3BlbihhZGRyZXNz Lm9iamVjdElkLCBBY2Nlc3NTaGFyZUxvY2spOworCQkJc2NoZW1hSWQgPSBSZWxhdGlvbkdldE5h bWVzcGFjZShyZWxhdGlvbik7CisJCQlyZXQgPSBuZXdfb2JqdHJlZV9WQSgiQUxURVIgJXtvYmp0 eXBlfXMgJXtpZl9leGlzdHN9cyAle2lkZW50aXR5fUQgUkVOQU1FIFRPICV7bmV3bmFtZX1JIiwg NCwKKwkJCQkJCQkJICJvYmp0eXBlIiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCQkJIHN0cmluZ2lm eV9vYmp0eXBlKG5vZGUtPnJlbmFtZVR5cGUsIGZhbHNlKSwKKwkJCQkJCQkJICJpZl9leGlzdHMi LCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJCQkgbm9kZS0+bWlzc2luZ19vayA/ICJJRiBFWElTVFMi IDogIiIsCisJCQkJCQkJCSAiaWRlbnRpdHkiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJCQkgbmV3 X29ianRyZWVfZm9yX3F1YWxuYW1lKHNjaGVtYUlkLAorCQkJCQkJCQkJCQkJCQkgIG5vZGUtPnJl bGF0aW9uLT5yZWxuYW1lKSwKKwkJCQkJCQkJICJuZXduYW1lIiwgT2JqVHlwZVN0cmluZywKKwkJ CQkJCQkJIG5vZGUtPm5ld25hbWUpOworCQkJcmVsYXRpb25fY2xvc2UocmVsYXRpb24sIEFjY2Vz c1NoYXJlTG9jayk7CisJCQlicmVhazsKKworCQljYXNlIE9CSkVDVF9QT0xJQ1k6CisJCQl7CisJ CQkJSGVhcFR1cGxlCXBvbFR1cDsKKwkJCQlGb3JtX3BnX3BvbGljeSBwb2xGb3JtOworCQkJCVJl bGF0aW9uCXBnX3BvbGljeTsKKwkJCQlTY2FuS2V5RGF0YSBrZXk7CisJCQkJU3lzU2NhbkRlc2Mg c2NhbjsKKworCQkJCXBnX3BvbGljeSA9IHJlbGF0aW9uX29wZW4oUG9saWN5UmVsYXRpb25JZCwg QWNjZXNzU2hhcmVMb2NrKTsKKwkJCQlTY2FuS2V5SW5pdCgma2V5LCBBbnVtX3BnX3BvbGljeV9v aWQsCisJCQkJCQkJQlRFcXVhbFN0cmF0ZWd5TnVtYmVyLCBGX09JREVRLAorCQkJCQkJCU9iamVj dElkR2V0RGF0dW0oYWRkcmVzcy5vYmplY3RJZCkpOworCQkJCXNjYW4gPSBzeXN0YWJsZV9iZWdp bnNjYW4ocGdfcG9saWN5LCBQb2xpY3lPaWRJbmRleElkLCB0cnVlLAorCQkJCQkJCQkJCSAgTlVM TCwgMSwgJmtleSk7CisJCQkJcG9sVHVwID0gc3lzdGFibGVfZ2V0bmV4dChzY2FuKTsKKwkJCQlp ZiAoIUhlYXBUdXBsZUlzVmFsaWQocG9sVHVwKSkKKwkJCQkJZWxvZyhFUlJPUiwgImNhY2hlIGxv b2t1cCBmYWlsZWQgZm9yIHBvbGljeSB3aXRoIE9JRCAldSIsCisJCQkJCQkgYWRkcmVzcy5vYmpl Y3RJZCk7CisJCQkJcG9sRm9ybSA9IChGb3JtX3BnX3BvbGljeSkgR0VUU1RSVUNUKHBvbFR1cCk7 CisKKwkJCQlyZXQgPSBuZXdfb2JqdHJlZV9WQSgiQUxURVIgUE9MSUNZICV7aWZfZXhpc3RzfXMg JXtwb2xpY3luYW1lfUkgT04gJXtpZGVudGl0eX1EIFJFTkFNRSBUTyAle25ld25hbWV9SSIsIDQs CisJCQkJCQkJCQkgImlmX2V4aXN0cyIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkJCQkgbm9kZS0+ bWlzc2luZ19vayA/ICJJRiBFWElTVFMiIDogIiIsCisJCQkJCQkJCQkgInBvbGljeW5hbWUiLCBP YmpUeXBlU3RyaW5nLAorCQkJCQkJCQkJIG5vZGUtPnN1Ym5hbWUsCisJCQkJCQkJCQkgImlkZW50 aXR5IiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVf aWQoUmVsYXRpb25SZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCQkJCSBwb2xGb3JtLT5wb2xyZWxp ZCksCisJCQkJCQkJCQkgIm5ld25hbWUiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJCQkJIG5vZGUt Pm5ld25hbWUpOworCQkJCXN5c3RhYmxlX2VuZHNjYW4oc2Nhbik7CisJCQkJcmVsYXRpb25fY2xv c2UocGdfcG9saWN5LCBBY2Nlc3NTaGFyZUxvY2spOworCQkJfQorCQkJYnJlYWs7CisKKwkJY2Fz ZSBPQkpFQ1RfQVRUUklCVVRFOgorCQljYXNlIE9CSkVDVF9DT0xVTU46CisJCQlyZWxhdGlvbiA9 IHJlbGF0aW9uX29wZW4oYWRkcmVzcy5vYmplY3RJZCwgQWNjZXNzU2hhcmVMb2NrKTsKKwkJCXNj aGVtYUlkID0gUmVsYXRpb25HZXROYW1lc3BhY2UocmVsYXRpb24pOworCisJCQlpZiAobm9kZS0+ cmVuYW1lVHlwZSA9PSBPQkpFQ1RfQVRUUklCVVRFKQorCQkJCXJldCA9IG5ld19vYmp0cmVlX1ZB KCJBTFRFUiBUWVBFICV7aWRlbnRpdHl9RCBSRU5BTUUgQVRUUklCVVRFICV7Y29sbmFtZX1JIiwg MiwKKwkJCQkJCQkJCSAiaWRlbnRpdHkiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJCQkJIG5ld19v Ymp0cmVlX2Zvcl9xdWFsbmFtZShzY2hlbWFJZCwKKwkJCQkJCQkJCQkJCQkJCSAgbm9kZS0+cmVs YXRpb24tPnJlbG5hbWUpLAorCQkJCQkJCQkJICJjb2xuYW1lIiwgT2JqVHlwZVN0cmluZywgbm9k ZS0+c3VibmFtZSk7CisJCQllbHNlCisJCQl7CisJCQkJcmV0ID0gbmV3X29ianRyZWVfVkEoIkFM VEVSICV7b2JqdHlwZX1zIiwgMSwKKwkJCQkJCQkJCSAib2JqdHlwZSIsIE9ialR5cGVTdHJpbmcs CisJCQkJCQkJCQkgc3RyaW5naWZ5X29ianR5cGUobm9kZS0+cmVsYXRpb25UeXBlLCBmYWxzZSkp OworCisJCQkJLyogQ29tcG9zaXRlIHR5cGVzIGRvIG5vdCBzdXBwb3J0IElGIEVYSVNUUyAqLwor CQkJCWlmIChub2RlLT5yZW5hbWVUeXBlID09IE9CSkVDVF9DT0xVTU4pCisJCQkJCWFwcGVuZF9z dHJpbmdfb2JqZWN0KHJldCwgIiV7aWZfZXhpc3RzfXMiLAorCQkJCQkJCQkJCSAiaWZfZXhpc3Rz IiwKKwkJCQkJCQkJCQkgbm9kZS0+bWlzc2luZ19vayA/ICJJRiBFWElTVFMiIDogIiIpOworCisJ CQkJYXBwZW5kX29iamVjdF9vYmplY3QocmV0LCAiJXtpZGVudGl0eX1EIiwKKwkJCQkJCQkJCSBu ZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUoc2NoZW1hSWQsCisJCQkJCQkJCQkJCQkJCQkgIG5vZGUt PnJlbGF0aW9uLT5yZWxuYW1lKSk7CisJCQkJYXBwZW5kX3N0cmluZ19vYmplY3QocmV0LCAiUkVO QU1FIENPTFVNTiAle2NvbG5hbWV9SSIsCisJCQkJCQkJCQkgImNvbG5hbWUiLCBub2RlLT5zdWJu YW1lKTsKKwkJCX0KKworCQkJYXBwZW5kX3N0cmluZ19vYmplY3QocmV0LCAiVE8gJXtuZXduYW1l fUkiLCAibmV3bmFtZSIsCisJCQkJCQkJCSBub2RlLT5uZXduYW1lKTsKKworCQkJaWYgKG5vZGUt PnJlbmFtZVR5cGUgPT0gT0JKRUNUX0FUVFJJQlVURSkKKwkJCQlhcHBlbmRfb2JqZWN0X29iamVj dChyZXQsICIle2Nhc2NhZGV9cyIsCisJCQkJCQkJCQkgbmV3X29ianRyZWVfVkEoIkNBU0NBREUi LCAxLAorCQkJCQkJCQkJCQkJCSJwcmVzZW50IiwgT2JqVHlwZUJvb2wsCisJCQkJCQkJCQkJCQkJ bm9kZS0+YmVoYXZpb3IgPT0gRFJPUF9DQVNDQURFKSk7CisKKwkJCXJlbGF0aW9uX2Nsb3NlKHJl bGF0aW9uLCBBY2Nlc3NTaGFyZUxvY2spOworCQkJYnJlYWs7CisKKwkJY2FzZSBPQkpFQ1RfRlVO Q1RJT046CisJCWNhc2UgT0JKRUNUX1JPVVRJTkU6CisJCQl7CisJCQkJY2hhcgkgICAqaWRlbnQ7 CisJCQkJSGVhcFR1cGxlCXByb2N0dXA7CisJCQkJRm9ybV9wZ19wcm9jIHByb2Nmb3JtOworCQkJ CUxpc3QJICAgKmlkZW50aXR5OworCisJCQkJQXNzZXJ0KElzQShub2RlLT5vYmplY3QsIE9iamVj dFdpdGhBcmdzKSk7CisJCQkJaWRlbnRpdHkgPSAoKE9iamVjdFdpdGhBcmdzICopIG5vZGUtPm9i amVjdCktPm9iam5hbWU7CisKKwkJCQlwcm9jdHVwID0gU2VhcmNoU3lzQ2FjaGUxKFBST0NPSUQs CisJCQkJCQkJCQkJICBPYmplY3RJZEdldERhdHVtKGFkZHJlc3Mub2JqZWN0SWQpKTsKKwkJCQlp ZiAoIUhlYXBUdXBsZUlzVmFsaWQocHJvY3R1cCkpCisJCQkJCWVsb2coRVJST1IsICJjYWNoZSBs b29rdXAgZmFpbGVkIGZvciBwcm9jZWR1cmUgd2l0aCBPSUQgJXUiLAorCQkJCQkJIGFkZHJlc3Mu b2JqZWN0SWQpOworCQkJCXByb2Nmb3JtID0gKEZvcm1fcGdfcHJvYykgR0VUU1RSVUNUKHByb2N0 dXApOworCisJCQkJLyogWFhYIGRvZXMgdGhpcyB3b3JrIGZvciBvcmRlcmVkLXNldCBhZ2dyZWdh dGVzPyAqLworCQkJCWlkZW50ID0gcHNwcmludGYoIiVzJXMiLAorCQkJCQkJCQkgcXVvdGVfcXVh bGlmaWVkX2lkZW50aWZpZXIoZ2V0X25hbWVzcGFjZV9uYW1lKHByb2Nmb3JtLT5wcm9uYW1lc3Bh Y2UpLAorCQkJCQkJCQkJCQkJCQkJc3RyVmFsKGxsYXN0KGlkZW50aXR5KSkpLAorCQkJCQkJCQkg Zm9ybWF0X3Byb2NlZHVyZV9hcmdzKGFkZHJlc3Mub2JqZWN0SWQsIHRydWUpKTsKKworCQkJCXJl dCA9IG5ld19vYmp0cmVlX1ZBKCJBTFRFUiAle29ianR5cGV9cyAle2lkZW50aXR5fXMgUkVOQU1F IFRPICV7bmV3bmFtZX1JIiwgMywKKwkJCQkJCQkJCSAib2JqdHlwZSIsIE9ialR5cGVTdHJpbmcs CisJCQkJCQkJCQkgc3RyaW5naWZ5X29ianR5cGUobm9kZS0+cmVuYW1lVHlwZSwgZmFsc2UpLAor CQkJCQkJCQkJICJpZGVudGl0eSIsIE9ialR5cGVTdHJpbmcsIGlkZW50LAorCQkJCQkJCQkJICJu ZXduYW1lIiwgT2JqVHlwZVN0cmluZywgbm9kZS0+bmV3bmFtZSk7CisKKwkJCQlSZWxlYXNlU3lz Q2FjaGUocHJvY3R1cCk7CisJCQl9CisJCQlicmVhazsKKworCQljYXNlIE9CSkVDVF9PUENMQVNT OgorCQkJeworCQkJCUhlYXBUdXBsZQlvcGNUdXA7CisJCQkJRm9ybV9wZ19vcGNsYXNzIG9wY0Zv cm07CisJCQkJTGlzdAkgICAqb2xkbmFtZXM7CisJCQkJY2hhcgkgICAqc2NoZW1hbmFtZTsKKwkJ CQljaGFyCSAgICpvcGNuYW1lOworCisJCQkJb3BjVHVwID0gU2VhcmNoU3lzQ2FjaGUxKENMQU9J RCwgT2JqZWN0SWRHZXREYXR1bShhZGRyZXNzLm9iamVjdElkKSk7CisJCQkJaWYgKCFIZWFwVHVw bGVJc1ZhbGlkKG9wY1R1cCkpCisJCQkJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVk IGZvciBvcGNsYXNzIHdpdGggT0lEICV1IiwKKwkJCQkJCSBhZGRyZXNzLm9iamVjdElkKTsKKwor CQkJCW9wY0Zvcm0gPSAoRm9ybV9wZ19vcGNsYXNzKSBHRVRTVFJVQ1Qob3BjVHVwKTsKKworCQkJ CW9sZG5hbWVzID0gbGlzdF9jb3B5X3RhaWwoKExpc3QgKikgbm9kZS0+b2JqZWN0LCAxKTsKKwor CQkJCS8qIERlY29uc3RydWN0IHRoZSBuYW1lIGxpc3QgKi8KKwkJCQlEZWNvbnN0cnVjdFF1YWxp ZmllZE5hbWUob2xkbmFtZXMsICZzY2hlbWFuYW1lLCAmb3BjbmFtZSk7CisKKwkJCQlyZXQgPSBu ZXdfb2JqdHJlZV9WQSgiQUxURVIgJXtvYmp0eXBlfXMgJXtpZGVudGl0eX1EIFVTSU5HICV7aW5k ZXhfbWV0aG9kfXMgUkVOQU1FIFRPICV7bmV3bmFtZX1JIiwgNCwKKwkJCQkJCQkJCSAib2JqdHlw ZSIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkJCQkgc3RyaW5naWZ5X29ianR5cGUobm9kZS0+cmVu YW1lVHlwZSwgZmFsc2UpLAorCQkJCQkJCQkJICJpZGVudGl0eSIsIE9ialR5cGVPYmplY3QsCisJ CQkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lKG9wY0Zvcm0tPm9wY25hbWVzcGFjZSwK KwkJCQkJCQkJCQkJCQkJCSAgb3BjbmFtZSksCisJCQkJCQkJCQkgImluZGV4X21ldGhvZCIsIE9i alR5cGVTdHJpbmcsCisJCQkJCQkJCQkgZ2V0X2FtX25hbWUob3BjRm9ybS0+b3BjbWV0aG9kKSwK KwkJCQkJCQkJCSAibmV3bmFtZSIsIE9ialR5cGVTdHJpbmcsIG5vZGUtPm5ld25hbWUpOworCisJ CQkJUmVsZWFzZVN5c0NhY2hlKG9wY1R1cCk7CisJCQl9CisJCQlicmVhazsKKworCQljYXNlIE9C SkVDVF9PUEZBTUlMWToKKwkJCXsKKwkJCQlIZWFwVHVwbGUJb3BmVHVwOworCQkJCUhlYXBUdXBs ZQlhbVR1cDsKKwkJCQlGb3JtX3BnX29wZmFtaWx5IG9wZkZvcm07CisJCQkJRm9ybV9wZ19hbQlh bUZvcm07CisJCQkJTGlzdAkgICAqb2xkbmFtZXM7CisJCQkJY2hhcgkgICAqc2NoZW1hbmFtZTsK KwkJCQljaGFyCSAgICpvcGZuYW1lOworCisJCQkJb3BmVHVwID0gU2VhcmNoU3lzQ2FjaGUxKE9Q RkFNSUxZT0lELCBhZGRyZXNzLm9iamVjdElkKTsKKwkJCQlpZiAoIUhlYXBUdXBsZUlzVmFsaWQo b3BmVHVwKSkKKwkJCQkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIG9wZXJh dG9yIGZhbWlseSB3aXRoIE9JRCAldSIsCisJCQkJCQkgYWRkcmVzcy5vYmplY3RJZCk7CisJCQkJ b3BmRm9ybSA9IChGb3JtX3BnX29wZmFtaWx5KSBHRVRTVFJVQ1Qob3BmVHVwKTsKKworCQkJCWFt VHVwID0gU2VhcmNoU3lzQ2FjaGUxKEFNT0lELCBPYmplY3RJZEdldERhdHVtKG9wZkZvcm0tPm9w Zm1ldGhvZCkpOworCQkJCWlmICghSGVhcFR1cGxlSXNWYWxpZChhbVR1cCkpCisJCQkJCWVsb2co RVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciBhY2Nlc3MgbWV0aG9kIHdpdGggT0lEICV1 IiwKKwkJCQkJCSBvcGZGb3JtLT5vcGZtZXRob2QpOworCisJCQkJYW1Gb3JtID0gKEZvcm1fcGdf YW0pIEdFVFNUUlVDVChhbVR1cCk7CisKKwkJCQlvbGRuYW1lcyA9IGxpc3RfY29weV90YWlsKChM aXN0ICopIG5vZGUtPm9iamVjdCwgMSk7CisKKwkJCQkvKiBEZWNvbnN0cnVjdCB0aGUgbmFtZSBs aXN0ICovCisJCQkJRGVjb25zdHJ1Y3RRdWFsaWZpZWROYW1lKG9sZG5hbWVzLCAmc2NoZW1hbmFt ZSwgJm9wZm5hbWUpOworCisJCQkJcmV0ID0gbmV3X29ianRyZWVfVkEoIkFMVEVSICV7b2JqdHlw ZX1zICV7aWRlbnRpdHl9RCBVU0lORyAle2luZGV4X21ldGhvZH1zIFJFTkFNRSBUTyAle25ld25h bWV9SSIsIDQsCisJCQkJCQkJCQkgIm9ianR5cGUiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJCQkJ IHN0cmluZ2lmeV9vYmp0eXBlKG5vZGUtPnJlbmFtZVR5cGUsIGZhbHNlKSwKKwkJCQkJCQkJCSAi aWRlbnRpdHkiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFs bmFtZShvcGZGb3JtLT5vcGZuYW1lc3BhY2UsCisJCQkJCQkJCQkJCQkJCQkgIG9wZm5hbWUpLAor CQkJCQkJCQkJICJpbmRleF9tZXRob2QiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJCQkJIE5hbWVT dHIoYW1Gb3JtLT5hbW5hbWUpLAorCQkJCQkJCQkJICJuZXduYW1lIiwgT2JqVHlwZVN0cmluZywg bm9kZS0+bmV3bmFtZSk7CisKKwkJCQlSZWxlYXNlU3lzQ2FjaGUoYW1UdXApOworCQkJCVJlbGVh c2VTeXNDYWNoZShvcGZUdXApOworCQkJfQorCQkJYnJlYWs7CisKKwkJY2FzZSBPQkpFQ1RfU0NI RU1BOgorCQkJcmV0ID0gbmV3X29ianRyZWVfVkEoIkFMVEVSIFNDSEVNQSAle2lkZW50aXR5fUkg UkVOQU1FIFRPICV7bmV3bmFtZX1JIiwgMiwKKwkJCQkJCQkJICJpZGVudGl0eSIsIE9ialR5cGVT dHJpbmcsIG5vZGUtPnN1Ym5hbWUsCisJCQkJCQkJCSAibmV3bmFtZSIsIE9ialR5cGVTdHJpbmcs IG5vZGUtPm5ld25hbWUpOworCQkJYnJlYWs7CisKKwkJY2FzZSBPQkpFQ1RfRkRXOgorCQljYXNl IE9CSkVDVF9MQU5HVUFHRToKKwkJY2FzZSBPQkpFQ1RfRk9SRUlHTl9TRVJWRVI6CisJCQlyZXQg PSBuZXdfb2JqdHJlZV9WQSgiQUxURVIgJXtvYmp0eXBlfXMgJXtpZGVudGl0eX1zIFJFTkFNRSBU TyAle25ld25hbWV9SSIsIDMsCisJCQkJCQkJCSAib2JqdHlwZSIsIE9ialR5cGVTdHJpbmcsCisJ CQkJCQkJCSBzdHJpbmdpZnlfb2JqdHlwZShub2RlLT5yZW5hbWVUeXBlLCBmYWxzZSksCisJCQkJ CQkJCSAiaWRlbnRpdHkiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJCQkgc3RyVmFsKGNhc3ROb2Rl KFN0cmluZywgbm9kZS0+b2JqZWN0KSksCisJCQkJCQkJCSAibmV3bmFtZSIsIE9ialR5cGVTdHJp bmcsIG5vZGUtPm5ld25hbWUpOworCQkJYnJlYWs7CisKKwkJY2FzZSBPQkpFQ1RfUlVMRToKKwkJ CXsKKwkJCQlIZWFwVHVwbGUJcmV3clR1cDsKKwkJCQlGb3JtX3BnX3Jld3JpdGUgcmV3ckZvcm07 CisJCQkJUmVsYXRpb24JcGdfcmV3cml0ZTsKKworCQkJCXBnX3Jld3JpdGUgPSByZWxhdGlvbl9v cGVuKFJld3JpdGVSZWxhdGlvbklkLCBBY2Nlc3NTaGFyZUxvY2spOworCQkJCXJld3JUdXAgPSBn ZXRfY2F0YWxvZ19vYmplY3RfYnlfb2lkKHBnX3Jld3JpdGUsIEFudW1fcGdfcmV3cml0ZV9vaWQs IGFkZHJlc3Mub2JqZWN0SWQpOworCQkJCXJld3JGb3JtID0gKEZvcm1fcGdfcmV3cml0ZSkgR0VU U1RSVUNUKHJld3JUdXApOworCisJCQkJcmV0ID0gbmV3X29ianRyZWVfVkEoIkFMVEVSIFJVTEUg JXtydWxlbmFtZX1JIE9OICV7aWRlbnRpdHl9RCBSRU5BTUUgVE8gJXtuZXduYW1lfUkiLCAzLAor CQkJCQkJCQkJICJydWxlbmFtZSIsIE9ialR5cGVTdHJpbmcsIG5vZGUtPnN1Ym5hbWUsCisJCQkJ CQkJCQkgImlkZW50aXR5IiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCQkJCSBuZXdfb2JqdHJlZV9m b3JfcXVhbG5hbWVfaWQoUmVsYXRpb25SZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCQkJCSByZXdy Rm9ybS0+ZXZfY2xhc3MpLAorCQkJCQkJCQkJICJuZXduYW1lIiwgT2JqVHlwZVN0cmluZywgbm9k ZS0+bmV3bmFtZSk7CisJCQkJcmVsYXRpb25fY2xvc2UocGdfcmV3cml0ZSwgQWNjZXNzU2hhcmVM b2NrKTsKKwkJCX0KKwkJCWJyZWFrOworCisJCWNhc2UgT0JKRUNUX1RSSUdHRVI6CisJCQl7CisJ CQkJSGVhcFR1cGxlCXRyaWdUdXA7CisJCQkJRm9ybV9wZ190cmlnZ2VyIHRyaWdGb3JtOworCQkJ CVJlbGF0aW9uCXBnX3RyaWdnZXI7CisKKwkJCQlwZ190cmlnZ2VyID0gcmVsYXRpb25fb3BlbihU cmlnZ2VyUmVsYXRpb25JZCwgQWNjZXNzU2hhcmVMb2NrKTsKKwkJCQl0cmlnVHVwID0gZ2V0X2Nh dGFsb2dfb2JqZWN0X2J5X29pZChwZ190cmlnZ2VyLCBnZXRfb2JqZWN0X2F0dG51bV9vaWQoYWRk cmVzcy5jbGFzc0lkKSwgYWRkcmVzcy5vYmplY3RJZCk7CisJCQkJdHJpZ0Zvcm0gPSAoRm9ybV9w Z190cmlnZ2VyKSBHRVRTVFJVQ1QodHJpZ1R1cCk7CisKKwkJCQlyZXQgPSBuZXdfb2JqdHJlZV9W QSgiQUxURVIgVFJJR0dFUiAle3RyaWdnZXJuYW1lfUkgT04gJXtpZGVudGl0eX1EIFJFTkFNRSBU TyAle25ld25hbWV9SSIsIDMsCisJCQkJCQkJCQkgInRyaWdnZXJuYW1lIiwgT2JqVHlwZVN0cmlu Zywgbm9kZS0+c3VibmFtZSwKKwkJCQkJCQkJCSAiaWRlbnRpdHkiLCBPYmpUeXBlT2JqZWN0LAor CQkJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChSZWxhdGlvblJlbGF0aW9uSWQs CisJCQkJCQkJCQkJCQkJCQkJIHRyaWdGb3JtLT50Z3JlbGlkKSwKKwkJCQkJCQkJCSAibmV3bmFt ZSIsIE9ialR5cGVTdHJpbmcsIG5vZGUtPm5ld25hbWUpOworCisJCQkJcmVsYXRpb25fY2xvc2Uo cGdfdHJpZ2dlciwgQWNjZXNzU2hhcmVMb2NrKTsKKwkJCX0KKwkJCWJyZWFrOworCisJCWNhc2Ug T0JKRUNUX0NPTExBVElPTjoKKwkJY2FzZSBPQkpFQ1RfU1RBVElTVElDX0VYVDoKKwkJY2FzZSBP QkpFQ1RfVFlQRToKKwkJY2FzZSBPQkpFQ1RfQ09OVkVSU0lPTjoKKwkJY2FzZSBPQkpFQ1RfRE9N QUlOOgorCQljYXNlIE9CSkVDVF9UU0RJQ1RJT05BUlk6CisJCWNhc2UgT0JKRUNUX1RTUEFSU0VS OgorCQljYXNlIE9CSkVDVF9UU1RFTVBMQVRFOgorCQljYXNlIE9CSkVDVF9UU0NPTkZJR1VSQVRJ T046CisJCQl7CisJCQkJSGVhcFR1cGxlCW9ialR1cDsKKwkJCQlSZWxhdGlvbgljYXRhbG9nOwor CQkJCURhdHVtCQlvYmpuc3A7CisJCQkJYm9vbAkJaXNudWxsOworCQkJCUF0dHJOdW1iZXIJQW51 bV9uYW1lc3BhY2U7CisJCQkJTGlzdAkgICAqaWRlbnRpdHkgPSBjYXN0Tm9kZShMaXN0LCBub2Rl LT5vYmplY3QpOworCisJCQkJLyogT2J0YWluIG9iamVjdCB0dXBsZSAqLworCQkJCWNhdGFsb2cg PSByZWxhdGlvbl9vcGVuKGFkZHJlc3MuY2xhc3NJZCwgQWNjZXNzU2hhcmVMb2NrKTsKKwkJCQlv YmpUdXAgPSBnZXRfY2F0YWxvZ19vYmplY3RfYnlfb2lkKGNhdGFsb2csIGdldF9vYmplY3RfYXR0 bnVtX29pZChhZGRyZXNzLmNsYXNzSWQpLCBhZGRyZXNzLm9iamVjdElkKTsKKworCQkJCS8qIE9i dGFpbiBuYW1lc3BhY2UgKi8KKwkJCQlBbnVtX25hbWVzcGFjZSA9IGdldF9vYmplY3RfYXR0bnVt X25hbWVzcGFjZShhZGRyZXNzLmNsYXNzSWQpOworCQkJCW9iam5zcCA9IGhlYXBfZ2V0YXR0cihv YmpUdXAsIEFudW1fbmFtZXNwYWNlLAorCQkJCQkJCQkJICBSZWxhdGlvbkdldERlc2NyKGNhdGFs b2cpLCAmaXNudWxsKTsKKwkJCQlpZiAoaXNudWxsKQorCQkJCQllbG9nKEVSUk9SLCAiaW52YWxp ZCBOVUxMIG5hbWVzcGFjZSIpOworCisJCQkJcmV0ID0gbmV3X29ianRyZWVfVkEoIkFMVEVSICV7 b2JqdHlwZX1zICV7aWRlbnRpdHl9RCBSRU5BTUUgVE8gJXtuZXduYW1lfUkiLCAzLAorCQkJCQkJ CQkJICJvYmp0eXBlIiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCQkJCSBzdHJpbmdpZnlfb2JqdHlw ZShub2RlLT5yZW5hbWVUeXBlLCBmYWxzZSksCisJCQkJCQkJCQkgImlkZW50aXR5IiwgT2JqVHlw ZU9iamVjdCwKKwkJCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUoRGF0dW1HZXRPYmpl Y3RJZChvYmpuc3ApLAorCQkJCQkJCQkJCQkJCQkJICBzdHJWYWwobGxhc3QoaWRlbnRpdHkpKSks CisJCQkJCQkJCQkgIm5ld25hbWUiLCBPYmpUeXBlU3RyaW5nLCBub2RlLT5uZXduYW1lKTsKKwkJ CQlyZWxhdGlvbl9jbG9zZShjYXRhbG9nLCBBY2Nlc3NTaGFyZUxvY2spOworCQkJfQorCQkJYnJl YWs7CisKKwkJZGVmYXVsdDoKKwkJCWVsb2coRVJST1IsICJ1bnN1cHBvcnRlZCBvYmplY3QgdHlw ZSAlZCIsIG5vZGUtPnJlbmFtZVR5cGUpOworCX0KKworCXJldHVybiByZXQ7Cit9CisKKy8qCisg KiBEZXBhcnNlIGEgQWx0ZXJPYmplY3REZXBlbmRzU3RtdCAoQUxURVIgLi4uIERFUEVORFMgT04g Li4uKS4KKyAqCisgKiBWZXJib3NlIHN5bnRheAorICogQUxURVIgSU5ERVggJXtpZGVudGl0eX1E ICV7bm99cyBERVBFTkRTIE9OIEVYVEVOU0lPTiAle25ld25hbWV9SQorICovCitzdGF0aWMgT2Jq VHJlZSAqCitkZXBhcnNlX0FsdGVyRGVwZW5kU3RtdChPaWQgb2JqZWN0SWQsIE5vZGUgKnBhcnNl dHJlZSkKK3sKKwlBbHRlck9iamVjdERlcGVuZHNTdG10ICpub2RlID0gKEFsdGVyT2JqZWN0RGVw ZW5kc1N0bXQgKikgcGFyc2V0cmVlOworCU9ialRyZWUgICAgKnJldCA9IE5VTEw7CisKKwlpZiAo bm9kZS0+b2JqZWN0VHlwZSA9PSBPQkpFQ1RfSU5ERVgpCisJeworCQlPYmpUcmVlICAgICpxdWFs aWZpZWQ7CisJCVJlbGF0aW9uCXJlbGF0aW9uID0gcmVsYXRpb25fb3BlbihvYmplY3RJZCwgQWNj ZXNzU2hhcmVMb2NrKTsKKworCQlxdWFsaWZpZWQgPSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUo cmVsYXRpb24tPnJkX3JlbC0+cmVsbmFtZXNwYWNlLAorCQkJCQkJCQkJCQkgbm9kZS0+cmVsYXRp b24tPnJlbG5hbWUpOworCQlyZWxhdGlvbl9jbG9zZShyZWxhdGlvbiwgQWNjZXNzU2hhcmVMb2Nr KTsKKworCQlyZXQgPSBuZXdfb2JqdHJlZV9WQSgiQUxURVIgSU5ERVggJXtpZGVudGl0eX1EICV7 bm99cyBERVBFTkRTIE9OIEVYVEVOU0lPTiAle25ld25hbWV9SSIsIDMsCisJCQkJCQkJICJpZGVu dGl0eSIsIE9ialR5cGVPYmplY3QsIHF1YWxpZmllZCwKKwkJCQkJCQkgIm5vIiwgT2JqVHlwZVN0 cmluZywKKwkJCQkJCQkgbm9kZS0+cmVtb3ZlID8gIk5PIiA6ICIiLAorCQkJCQkJCSAibmV3bmFt ZSIsIE9ialR5cGVTdHJpbmcsIHN0clZhbChub2RlLT5leHRuYW1lKSk7CisJfQorCWVsc2UKKwkJ ZWxvZyhMT0csICJ1bnJlY29nbml6ZWQgbm9kZSB0eXBlIGluIGRlcGFyc2UgY29tbWFuZDogJWQi LAorCQkJIChpbnQpIG5vZGVUYWcocGFyc2V0cmVlKSk7CisKKwlyZXR1cm4gcmV0OworfQorCisv KgorICogRGVwYXJzZSB0aGUgc2VxdWVuY2UgQ0FDSEUgb3B0aW9uLgorICoKKyAqIFZlcmJvc2Ug c3ludGF4CisgKiBTRVQgQ0FDSEUgJXt2YWx1ZX1zCisgKiBPUgorICogQ0FDSEUgJXt2YWx1ZX0K KyAqLworc3RhdGljIGlubGluZSBPYmpFbGVtICoKK2RlcGFyc2VfU2VxX0NhY2hlKEZvcm1fcGdf c2VxdWVuY2Ugc2VxZGF0YSwgYm9vbCBhbHRlcl90YWJsZSkKK3sKKwlPYmpUcmVlICAgICpyZXQ7 CisJY2hhcgkgICAqdG1wc3RyOworCWNoYXIJICAgKmZtdDsKKworCWZtdCA9IGFsdGVyX3RhYmxl ID8gIlNFVCBDQUNIRSAle3ZhbHVlfXMiIDogIkNBQ0hFICV7dmFsdWV9cyI7CisKKwl0bXBzdHIg PSBwc3ByaW50ZihJTlQ2NF9GT1JNQVQsIHNlcWRhdGEtPnNlcWNhY2hlKTsKKwlyZXQgPSBuZXdf b2JqdHJlZV9WQShmbXQsIDIsCisJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJjYWNo ZSIsCisJCQkJCQkgInZhbHVlIiwgT2JqVHlwZVN0cmluZywgdG1wc3RyKTsKKworCXJldHVybiBu ZXdfb2JqZWN0X29iamVjdChyZXQpOworfQorCisvKgorICogRGVwYXJzZSB0aGUgc2VxdWVuY2Ug Q1lDTEUgb3B0aW9uLgorICoKKyAqIFZlcmJvc2Ugc3ludGF4CisgKiBTRVQgJXtub31zIENZQ0xF CisgKiBPUgorICogJXtub31zIENZQ0xFCisgKi8KK3N0YXRpYyBpbmxpbmUgT2JqRWxlbSAqCitk ZXBhcnNlX1NlcV9DeWNsZShGb3JtX3BnX3NlcXVlbmNlIHNlcWRhdGEsIGJvb2wgYWx0ZXJfdGFi bGUpCit7CisJT2JqVHJlZSAgICAqcmV0OworCWNoYXIJICAgKmZtdDsKKworCWZtdCA9IGFsdGVy X3RhYmxlID8gIlNFVCAle25vfXMgQ1lDTEUiIDogIiV7bm99cyBDWUNMRSI7CisKKwlyZXQgPSBu ZXdfb2JqdHJlZV9WQShmbXQsIDIsCisJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJj eWNsZSIsCisJCQkJCQkgIm5vIiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCSBzZXFkYXRhLT5zZXFj eWNsZSA/ICIiIDogIk5PIik7CisKKwlyZXR1cm4gbmV3X29iamVjdF9vYmplY3QocmV0KTsKK30K KworLyoKKyAqIERlcGFyc2UgdGhlIHNlcXVlbmNlIElOQ1JFTUVOVCBCWSBvcHRpb24uCisgKgor ICogVmVyYm9zZSBzeW50YXgKKyAqIFNFVCBJTkNSRU1FTlQgQlkgJXt2YWx1ZX1zCisgKiBPUgor ICogSU5DUkVNRU5UIEJZICV7dmFsdWV9cworICovCitzdGF0aWMgaW5saW5lIE9iakVsZW0gKgor ZGVwYXJzZV9TZXFfSW5jcmVtZW50QnkoRm9ybV9wZ19zZXF1ZW5jZSBzZXFkYXRhLCBib29sIGFs dGVyX3RhYmxlKQoreworCU9ialRyZWUgICAgKnJldDsKKwljaGFyCSAgICp0bXBzdHI7CisJY2hh cgkgICAqZm10OworCisJZm10ID0gYWx0ZXJfdGFibGUgPyAiU0VUIElOQ1JFTUVOVCBCWSAle3Zh bHVlfXMiIDogIklOQ1JFTUVOVCBCWSAle3ZhbHVlfXMiOworCisJdG1wc3RyID0gcHNwcmludGYo SU5UNjRfRk9STUFULCBzZXFkYXRhLT5zZXFpbmNyZW1lbnQpOworCXJldCA9IG5ld19vYmp0cmVl X1ZBKGZtdCwgMiwKKwkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgInNlcWluY3JlbWVu dCIsCisJCQkJCQkgInZhbHVlIiwgT2JqVHlwZVN0cmluZywgdG1wc3RyKTsKKworCXJldHVybiBu ZXdfb2JqZWN0X29iamVjdChyZXQpOworfQorCisvKgorICogRGVwYXJzZSB0aGUgc2VxdWVuY2Ug TUFYVkFMVUUgb3B0aW9uLgorICoKKyAqIFZlcmJvc2Ugc3ludGF4CisgKiBTRVQgTUFYVkFMVUUg JXt2YWx1ZX1zCisgKiBPUgorICogTUFYVkFMVUUgJXt2YWx1ZX1zCisgKi8KK3N0YXRpYyBpbmxp bmUgT2JqRWxlbSAqCitkZXBhcnNlX1NlcV9NYXh2YWx1ZShGb3JtX3BnX3NlcXVlbmNlIHNlcWRh dGEsIGJvb2wgYWx0ZXJfdGFibGUpCit7CisJT2JqVHJlZSAgICAqcmV0OworCWNoYXIJICAgKnRt cHN0cjsKKwljaGFyCSAgICpmbXQ7CisKKwlmbXQgPSBhbHRlcl90YWJsZSA/ICJTRVQgTUFYVkFM VUUgJXt2YWx1ZX1zIiA6ICJNQVhWQUxVRSAle3ZhbHVlfXMiOworCisJdG1wc3RyID0gcHNwcmlu dGYoSU5UNjRfRk9STUFULCBzZXFkYXRhLT5zZXFtYXgpOworCXJldCA9IG5ld19vYmp0cmVlX1ZB KGZtdCwgMiwKKwkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgIm1heHZhbHVlIiwKKwkJ CQkJCSAidmFsdWUiLCBPYmpUeXBlU3RyaW5nLCB0bXBzdHIpOworCisJcmV0dXJuIG5ld19vYmpl Y3Rfb2JqZWN0KHJldCk7Cit9CisKKy8qCisgKiBEZXBhcnNlIHRoZSBzZXF1ZW5jZSBNSU5WQUxV RSBvcHRpb24uCisgKgorICogVmVyYm9zZSBzeW50YXgKKyAqIFNFVCBNSU5WQUxVRSAle3ZhbHVl fXMKKyAqIE9SCisgKiBNSU5WQUxVRSAle3ZhbHVlfXMKKyAqLworc3RhdGljIGlubGluZSBPYmpF bGVtICoKK2RlcGFyc2VfU2VxX01pbnZhbHVlKEZvcm1fcGdfc2VxdWVuY2Ugc2VxZGF0YSwgYm9v bCBhbHRlcl90YWJsZSkKK3sKKwlPYmpUcmVlICAgICpyZXQ7CisJY2hhcgkgICAqdG1wc3RyOwor CWNoYXIJICAgKmZtdDsKKworCWZtdCA9IGFsdGVyX3RhYmxlID8gIlNFVCBNSU5WQUxVRSAle3Zh bHVlfXMiIDogIk1JTlZBTFVFICV7dmFsdWV9cyI7CisKKwl0bXBzdHIgPSBwc3ByaW50ZihJTlQ2 NF9GT1JNQVQsIHNlcWRhdGEtPnNlcW1pbik7CisJcmV0ID0gbmV3X29ianRyZWVfVkEoZm10LCAy LAorCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAibWludmFsdWUiLAorCQkJCQkJICJ2 YWx1ZSIsIE9ialR5cGVTdHJpbmcsIHRtcHN0cik7CisKKwlyZXR1cm4gbmV3X29iamVjdF9vYmpl Y3QocmV0KTsKK30KKworLyoKKyAqIERlcGFyc2UgdGhlIHNlcXVlbmNlIE9XTkVEIEJZIGNvbW1h bmQuCisgKgorICogVmVyYm9zZSBzeW50YXgKKyAqIE9XTkVEIEJZICV7b3duZXJ9RAorICovCitz dGF0aWMgT2JqRWxlbSAqCitkZXBhcnNlX1NlcV9Pd25lZEJ5KE9pZCBzZXF1ZW5jZUlkLCBib29s IGFsdGVyX3RhYmxlKQoreworCU9ialRyZWUgICAgKnJldCA9IE5VTEw7CisJUmVsYXRpb24JZGVw UmVsOworCVN5c1NjYW5EZXNjIHNjYW47CisJU2NhbktleURhdGEga2V5c1szXTsKKwlIZWFwVHVw bGUJdHVwbGU7CisKKwlkZXBSZWwgPSB0YWJsZV9vcGVuKERlcGVuZFJlbGF0aW9uSWQsIEFjY2Vz c1NoYXJlTG9jayk7CisJU2NhbktleUluaXQoJmtleXNbMF0sCisJCQkJQW51bV9wZ19kZXBlbmRf Y2xhc3NpZCwKKwkJCQlCVEVxdWFsU3RyYXRlZ3lOdW1iZXIsIEZfT0lERVEsCisJCQkJT2JqZWN0 SWRHZXREYXR1bShSZWxhdGlvblJlbGF0aW9uSWQpKTsKKwlTY2FuS2V5SW5pdCgma2V5c1sxXSwK KwkJCQlBbnVtX3BnX2RlcGVuZF9vYmppZCwKKwkJCQlCVEVxdWFsU3RyYXRlZ3lOdW1iZXIsIEZf T0lERVEsCisJCQkJT2JqZWN0SWRHZXREYXR1bShzZXF1ZW5jZUlkKSk7CisJU2NhbktleUluaXQo JmtleXNbMl0sCisJCQkJQW51bV9wZ19kZXBlbmRfb2Jqc3ViaWQsCisJCQkJQlRFcXVhbFN0cmF0 ZWd5TnVtYmVyLCBGX0lOVDRFUSwKKwkJCQlJbnQzMkdldERhdHVtKDApKTsKKworCXNjYW4gPSBz eXN0YWJsZV9iZWdpbnNjYW4oZGVwUmVsLCBEZXBlbmREZXBlbmRlckluZGV4SWQsIHRydWUsCisJ CQkJCQkJICBOVUxMLCAzLCBrZXlzKTsKKwl3aGlsZSAoSGVhcFR1cGxlSXNWYWxpZCh0dXBsZSA9 IHN5c3RhYmxlX2dldG5leHQoc2NhbikpKQorCXsKKwkJT2lkCQkJb3duZXJJZDsKKwkJRm9ybV9w Z19kZXBlbmQgZGVwZm9ybTsKKwkJT2JqVHJlZSAgICAqdG1wX29iajsKKwkJY2hhcgkgICAqY29s bmFtZTsKKworCQlkZXBmb3JtID0gKEZvcm1fcGdfZGVwZW5kKSBHRVRTVFJVQ1QodHVwbGUpOwor CisJCS8qIE9ubHkgY29uc2lkZXIgQVVUTyBkZXBlbmRlbmNpZXMgb24gcGdfY2xhc3MgKi8KKwkJ aWYgKGRlcGZvcm0tPmRlcHR5cGUgIT0gREVQRU5ERU5DWV9BVVRPKQorCQkJY29udGludWU7CisJ CWlmIChkZXBmb3JtLT5yZWZjbGFzc2lkICE9IFJlbGF0aW9uUmVsYXRpb25JZCkKKwkJCWNvbnRp bnVlOworCQlpZiAoZGVwZm9ybS0+cmVmb2Jqc3ViaWQgPD0gMCkKKwkJCWNvbnRpbnVlOworCisJ CW93bmVySWQgPSBkZXBmb3JtLT5yZWZvYmppZDsKKwkJY29sbmFtZSA9IGdldF9hdHRuYW1lKG93 bmVySWQsIGRlcGZvcm0tPnJlZm9ianN1YmlkLCBmYWxzZSk7CisJCWlmIChjb2xuYW1lID09IE5V TEwpCisJCQljb250aW51ZTsKKworCQl0bXBfb2JqID0gbmV3X29ianRyZWVfZm9yX3F1YWxuYW1l X2lkKFJlbGF0aW9uUmVsYXRpb25JZCwgb3duZXJJZCk7CisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0 KHRtcF9vYmosICJhdHRybmFtZSIsICJhdHRybmFtZSIsIGNvbG5hbWUpOworCQlyZXQgPSBuZXdf b2JqdHJlZV9WQSgiT1dORUQgQlkgJXtvd25lcn1EIiwgMiwKKwkJCQkJCQkgImNsYXVzZSIsIE9i alR5cGVTdHJpbmcsICJvd25lZCIsCisJCQkJCQkJICJvd25lciIsIE9ialR5cGVPYmplY3QsIHRt cF9vYmopOworCX0KKworCXN5c3RhYmxlX2VuZHNjYW4oc2Nhbik7CisJcmVsYXRpb25fY2xvc2Uo ZGVwUmVsLCBBY2Nlc3NTaGFyZUxvY2spOworCisJLyoKKwkgKiBJZiB0aGVyZSdzIG5vIG93bmVy IGNvbHVtbiwgZW1pdCBhbiBlbXB0eSBPV05FRCBCWSBlbGVtZW50LCBzZXQgdXAgc28KKwkgKiB0 aGF0IGl0IHdvbid0IHByaW50IGFueXRoaW5nLgorCSAqLworCWlmICghcmV0KQorCQkvKiBYWFgg dGhpcyBzaG91bGRuJ3QgaGFwcGVuIC4uLiAqLworCQlyZXQgPSBuZXdfb2JqdHJlZV9WQSgiT1dO RUQgQlkgJXtvd25lcn1EIiwgMywKKwkJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJv d25lZCIsCisJCQkJCQkJICJvd25lciIsIE9ialR5cGVOdWxsLAorCQkJCQkJCSAicHJlc2VudCIs IE9ialR5cGVCb29sLCBmYWxzZSk7CisKKwlyZXR1cm4gbmV3X29iamVjdF9vYmplY3QocmV0KTsK K30KKworLyoKKyAqIERlcGFyc2UgdGhlIHNlcXVlbmNlIFJFU1RBUlQgb3B0aW9uLgorICoKKyAq IFZlcmJvc2Ugc3ludGF4CisgKiBSRVNUQVJUICV7dmFsdWV9cworICovCitzdGF0aWMgaW5saW5l IE9iakVsZW0gKgorZGVwYXJzZV9TZXFfUmVzdGFydChGb3JtX3BnX3NlcXVlbmNlX2RhdGEgc2Vx ZGF0YSkKK3sKKwlPYmpUcmVlICAgICpyZXQ7CisJY2hhcgkgICAqdG1wc3RyOworCisJdG1wc3Ry ID0gcHNwcmludGYoSU5UNjRfRk9STUFULCBzZXFkYXRhLT5sYXN0X3ZhbHVlKTsKKwlyZXQgPSBu ZXdfb2JqdHJlZV9WQSgiUkVTVEFSVCAle3ZhbHVlfXMiLCAyLAorCQkJCQkJICJjbGF1c2UiLCBP YmpUeXBlU3RyaW5nLCAicmVzdGFydCIsCisJCQkJCQkgInZhbHVlIiwgT2JqVHlwZVN0cmluZywg dG1wc3RyKTsKKworCXJldHVybiBuZXdfb2JqZWN0X29iamVjdChyZXQpOworfQorCisvKgorICog RGVwYXJzZSB0aGUgc2VxdWVuY2UgQVMgb3B0aW9uLgorICoKKyAqIFZlcmJvc2Ugc3ludGF4Cisg KiBBUyAle2lkZW50aXR5fUQKKyAqLworc3RhdGljIGlubGluZSBPYmpFbGVtICoKK2RlcGFyc2Vf U2VxX0FzKERlZkVsZW0gKmVsZW0pCit7CisJT2JqVHJlZSAgICAqcmV0OworCVR5cGUJCWxpa2VU eXBlOworCUZvcm1fcGdfdHlwZSBsaWtlRm9ybTsKKworCWxpa2VUeXBlID0gdHlwZW5hbWVUeXBl KE5VTEwsIGRlZkdldFR5cGVOYW1lKGVsZW0pLCBOVUxMKTsKKwlsaWtlRm9ybSA9IChGb3JtX3Bn X3R5cGUpIEdFVFNUUlVDVChsaWtlVHlwZSk7CisKKwlyZXQgPSBuZXdfb2JqdHJlZV9WQSgiQVMg JXtpZGVudGl0eX1EIiwgMSwKKwkJCQkJCSAiaWRlbnRpdHkiLCBPYmpUeXBlT2JqZWN0LAorCQkJ CQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZShsaWtlRm9ybS0+dHlwbmFtZXNwYWNlLAorCQkJ CQkJCQkJCQkJICBOYW1lU3RyKGxpa2VGb3JtLT50eXBuYW1lKSkpOworCVJlbGVhc2VTeXNDYWNo ZShsaWtlVHlwZSk7CisKKwlyZXR1cm4gbmV3X29iamVjdF9vYmplY3QocmV0KTsKK30KKworLyoK KyAqIERlcGFyc2UgdGhlIHNlcXVlbmNlIFNUQVJUIFdJVEggb3B0aW9uLgorICoKKyAqIFZlcmJv c2Ugc3ludGF4CisgKiBTRVQgU1RBUlQgV0lUSCAle3ZhbHVlfXMKKyAqIE9SCisgKiBTVEFSVCBX SVRIICV7dmFsdWV9cworICovCitzdGF0aWMgaW5saW5lIE9iakVsZW0gKgorZGVwYXJzZV9TZXFf U3RhcnR3aXRoKEZvcm1fcGdfc2VxdWVuY2Ugc2VxZGF0YSwgYm9vbCBhbHRlcl90YWJsZSkKK3sK KwlPYmpUcmVlICAgICpyZXQ7CisJY2hhcgkgICAqdG1wc3RyOworCWNoYXIJICAgKmZtdDsKKwor CWZtdCA9IGFsdGVyX3RhYmxlID8gIlNFVCBTVEFSVCBXSVRIICV7dmFsdWV9cyIgOiAiU1RBUlQg V0lUSCAle3ZhbHVlfXMiOworCisJdG1wc3RyID0gcHNwcmludGYoSU5UNjRfRk9STUFULCBzZXFk YXRhLT5zZXFzdGFydCk7CisJcmV0ID0gbmV3X29ianRyZWVfVkEoZm10LCAyLAorCQkJCQkJICJj bGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAic3RhcnQiLAorCQkJCQkJICJ2YWx1ZSIsIE9ialR5cGVT dHJpbmcsIHRtcHN0cik7CisKKwlyZXR1cm4gbmV3X29iamVjdF9vYmplY3QocmV0KTsKK30KKwor LyoKKyAqIERlcGFyc2UgdGhlIHR5cGUgU1RPUkFHRSBvcHRpb24uCisgKgorICogVmVyYm9zZSBz eW50YXgKKyAqIFNUT1JBR0U9JXt2YWx1ZX1zCisgKi8KK3N0YXRpYyBpbmxpbmUgT2JqRWxlbSAq CitkZXBhcnNlX1R5cGVfU3RvcmFnZShGb3JtX3BnX3R5cGUgdHlwRm9ybSkKK3sKKwlPYmpUcmVl ICAgICpyZXQ7CisJcmV0ID0gbmV3X29ianRyZWVfVkEoIlNUT1JBR0UgPSAle3ZhbHVlfXMiLCAy LAorCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAic3RvcmFnZSIsCisJCQkJCQkgInZh bHVlIiwgT2JqVHlwZVN0cmluZywgZ2V0X3R5cGVfc3RvcmFnZSh0eXBGb3JtLT50eXBzdG9yYWdl KSk7CisKKwlyZXR1cm4gbmV3X29iamVjdF9vYmplY3QocmV0KTsKK30KKworLyoKKyAqIERlcGFy c2UgdGhlIHR5cGUgUkVDRUlWRSBvcHRpb24uCisgKgorICogVmVyYm9zZSBzeW50YXgKKyAqIFJF Q0VJVkU9JXtwcm9jZWR1cmV9RAorICovCitzdGF0aWMgaW5saW5lIE9iakVsZW0gKgorZGVwYXJz ZV9UeXBlX1JlY2VpdmUoRm9ybV9wZ190eXBlIHR5cEZvcm0pCit7CisJT2JqVHJlZSAgICAqcmV0 OworCisJcmV0ID0gbmV3X29ianRyZWVfVkEoIlJFQ0VJVkU9IiwgMSwKKwkJCQkJCSAiY2xhdXNl IiwgT2JqVHlwZVN0cmluZywgInJlY2VpdmUiKTsKKwlpZiAoT2lkSXNWYWxpZCh0eXBGb3JtLT50 eXByZWNlaXZlKSkKKwkJYXBwZW5kX29iamVjdF9vYmplY3QocmV0LCAiJXtwcm9jZWR1cmV9RCIs CisJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChQcm9jZWR1cmVSZWxhdGlvbklk LAorCQkJCQkJCQkJCQkJCQkgdHlwRm9ybS0+dHlwcmVjZWl2ZSkpOworCWVsc2UKKwkJYXBwZW5k X25vdF9wcmVzZW50KHJldCk7CisKKwlyZXR1cm4gbmV3X29iamVjdF9vYmplY3QocmV0KTsKK30K KworLyoKKyAqIERlcGFyc2UgdGhlIHR5cGUgU0VORCBvcHRpb24uCisgKgorICogVmVyYm9zZSBz eW50YXgKKyAqIFNFTkQ9JXtwcm9jZWR1cmV9RAorICovCitzdGF0aWMgaW5saW5lIE9iakVsZW0g KgorZGVwYXJzZV9UeXBlX1NlbmQoRm9ybV9wZ190eXBlIHR5cEZvcm0pCit7CisJT2JqVHJlZSAg ICAqcmV0OworCisJcmV0ID0gbmV3X29ianRyZWVfVkEoIlNFTkQ9IiwgMSwKKwkJCQkJCSAiY2xh dXNlIiwgT2JqVHlwZVN0cmluZywgInNlbmQiKTsKKwlpZiAoT2lkSXNWYWxpZCh0eXBGb3JtLT50 eXBzZW5kKSkKKwkJYXBwZW5kX29iamVjdF9vYmplY3QocmV0LCAiJXtwcm9jZWR1cmV9RCIsCisJ CQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChQcm9jZWR1cmVSZWxhdGlvbklkLAor CQkJCQkJCQkJCQkJCQkgdHlwRm9ybS0+dHlwc2VuZCkpOworCWVsc2UKKwkJYXBwZW5kX25vdF9w cmVzZW50KHJldCk7CisKKwlyZXR1cm4gbmV3X29iamVjdF9vYmplY3QocmV0KTsKK30KKworLyoK KyAqIERlcGFyc2UgdGhlIHR5cGUgdHlwbW9kX2luIG9wdGlvbi4KKyAqCisgKiBWZXJib3NlIHN5 bnRheAorICogVFlQTU9EX0lOPSV7cHJvY2VkdXJlfUQKKyAqLworc3RhdGljIGlubGluZSBPYmpF bGVtICoKK2RlcGFyc2VfVHlwZV9UeXBtb2RfSW4oRm9ybV9wZ190eXBlIHR5cEZvcm0pCit7CisJ T2JqVHJlZSAgICAqcmV0OworCisJcmV0ID0gbmV3X29ianRyZWVfVkEoIlRZUE1PRF9JTj0iLCAx LAorCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAidHlwbW9kX2luIik7CisJaWYgKE9p ZElzVmFsaWQodHlwRm9ybS0+dHlwbW9kaW4pKQorCQlhcHBlbmRfb2JqZWN0X29iamVjdChyZXQs ICIle3Byb2NlZHVyZX1EIiwKKwkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFBy b2NlZHVyZVJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJCSB0eXBGb3JtLT50eXBtb2RpbikpOwor CWVsc2UKKwkJYXBwZW5kX25vdF9wcmVzZW50KHJldCk7CisKKwlyZXR1cm4gbmV3X29iamVjdF9v YmplY3QocmV0KTsKK30KKworLyoKKyAqIERlcGFyc2UgdGhlIHR5cGUgdHlwbW9kX291dCBvcHRp b24uCisgKgorICogVmVyYm9zZSBzeW50YXgKKyAqIFRZUE1PRF9PVVQ9JXtwcm9jZWR1cmV9RAor ICovCitzdGF0aWMgaW5saW5lIE9iakVsZW0gKgorZGVwYXJzZV9UeXBlX1R5cG1vZF9PdXQoRm9y bV9wZ190eXBlIHR5cEZvcm0pCit7CisJT2JqVHJlZSAgICAqcmV0OworCisJcmV0ID0gbmV3X29i anRyZWVfVkEoIlRZUE1PRF9PVVQ9IiwgMSwKKwkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0cmlu ZywgInR5cG1vZF9vdXQiKTsKKwlpZiAoT2lkSXNWYWxpZCh0eXBGb3JtLT50eXBtb2RvdXQpKQor CQlhcHBlbmRfb2JqZWN0X29iamVjdChyZXQsICIle3Byb2NlZHVyZX1EIiwKKwkJCQkJCQkgbmV3 X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFByb2NlZHVyZVJlbGF0aW9uSWQsCisJCQkJCQkJCQkJ CQkJCSB0eXBGb3JtLT50eXBtb2RvdXQpKTsKKwllbHNlCisJCWFwcGVuZF9ub3RfcHJlc2VudChy ZXQpOworCisJcmV0dXJuIG5ld19vYmplY3Rfb2JqZWN0KHJldCk7Cit9CisKKy8qCisgKiBEZXBh cnNlIENSRUFURSBUQUJMRSBBUyBjb21tYW5kLgorICoKKyAqIGRlcGFyc2VfQ3JlYXRlU3RtdCBk byB0aGUgYWN0dWFsIHdvcmsgYXMgd2UgZGVwYXJzZSB0aGUgZmluYWwgQ3JlYXRlU3RtdCBmb3IK KyAqIENSRUFURSBUQUJMRSBBUyBjb21tYW5kLgorICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBh cnNlX0NyZWF0ZVRhYmxlQXNTdG10KENvbGxlY3RlZENvbW1hbmQgKmNtZCkKK3sKKwlPaWQJCQlv YmplY3RJZDsKKwlOb2RlCSAgICpwYXJzZXRyZWU7CisKKwlBc3NlcnQoY21kLT50eXBlID09IFND VF9DcmVhdGVUYWJsZUFzKTsKKworCXBhcnNldHJlZSA9IGNtZC0+ZC5jdGFzLnJlYWxfY3JlYXRl OworCW9iamVjdElkID0gY21kLT5kLmN0YXMuYWRkcmVzcy5vYmplY3RJZDsKKworCXJldHVybiBk ZXBhcnNlX0NyZWF0ZVN0bXQob2JqZWN0SWQsIHBhcnNldHJlZSk7Cit9CisKKy8qCisgKiBEZXBh cnNlIHRoZSB0eXBlIGFuYWx5emUgb3B0aW9uLgorICoKKyAqIFZlcmJvc2Ugc3ludGF4CisgKiBB TkFMWVpFPSV7cHJvY2VkdXJlfUQKKyAqLworc3RhdGljIGlubGluZSBPYmpFbGVtICoKK2RlcGFy c2VfVHlwZV9BbmFseXplKEZvcm1fcGdfdHlwZSB0eXBGb3JtKQoreworCU9ialRyZWUgICAgKnJl dDsKKworCXJldCA9IG5ld19vYmp0cmVlX1ZBKCJBTkFMWVpFPSIsIDEsCisJCQkJCQkgImNsYXVz ZSIsIE9ialR5cGVTdHJpbmcsICJhbmFseXplIik7CisJaWYgKE9pZElzVmFsaWQodHlwRm9ybS0+ dHlwYW5hbHl6ZSkpCisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHJldCwgIiV7cHJvY2VkdXJlfUQi LAorCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUHJvY2VkdXJlUmVsYXRpb25J ZCwKKwkJCQkJCQkJCQkJCQkJIHR5cEZvcm0tPnR5cGFuYWx5emUpKTsKKwllbHNlCisJCWFwcGVu ZF9ub3RfcHJlc2VudChyZXQpOworCisJcmV0dXJuIG5ld19vYmplY3Rfb2JqZWN0KHJldCk7Cit9 CisKKy8qCisgKiBEZXBhcnNlIHRoZSB0eXBlIHN1YnNjcmlwdCBvcHRpb24uCisgKgorICogVmVy Ym9zZSBzeW50YXgKKyAqIFNVQlNDUklQVD0le3Byb2NlZHVyZX1ECisgKi8KK3N0YXRpYyBpbmxp bmUgT2JqRWxlbSAqCitkZXBhcnNlX1R5cGVfU3Vic2NyaXB0KEZvcm1fcGdfdHlwZSB0eXBGb3Jt KQoreworCU9ialRyZWUgICAgKnJldDsKKworCXJldCA9IG5ld19vYmp0cmVlX1ZBKCJTVUJTQ1JJ UFQ9IiwgMSwKKwkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgInN1YnNjcmlwdCIpOwor CWlmIChPaWRJc1ZhbGlkKHR5cEZvcm0tPnR5cHN1YnNjcmlwdCkpCisJCWFwcGVuZF9vYmplY3Rf b2JqZWN0KHJldCwgIiV7cHJvY2VkdXJlfUQiLAorCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVh bG5hbWVfaWQoUHJvY2VkdXJlUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkJIHR5cEZvcm0tPnR5 cHN1YnNjcmlwdCkpOworCWVsc2UKKwkJYXBwZW5kX25vdF9wcmVzZW50KHJldCk7CisKKwlyZXR1 cm4gbmV3X29iamVjdF9vYmplY3QocmV0KTsKK30KKworLyoKKyAqIERlcGFyc2UgYSBSdWxlU3Rt dCAoQ1JFQVRFIFJVTEUpLgorICoKKyAqIEdpdmVuIGEgcnVsZSBPSUQgYW5kIHRoZSBwYXJzZSB0 cmVlIHRoYXQgY3JlYXRlZCBpdCwgcmV0dXJuIGFuIE9ialRyZWUKKyAqIHJlcHJlc2VudGluZyB0 aGUgcnVsZSBjb21tYW5kLgorICoKKyAqIFZlcmJvc2Ugc3ludGF4CisgKiBDUkVBVEUgUlVMRSAl e29yX3JlcGxhY2V9cyAle2lkZW50aXR5fUkgQVMgT04gJXtldmVudH1zIFRPICV7dGFibGV9RAor ICogJXt3aGVyZV9jbGF1c2V9cyBETyAle2luc3RlYWR9cyAle2FjdGlvbnM6LCB9cworICovCitz dGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX1J1bGVTdG10KE9pZCBvYmplY3RJZCwgTm9kZSAqcGFy c2V0cmVlKQoreworCVJ1bGVTdG10ICAgKm5vZGUgPSAoUnVsZVN0bXQgKikgcGFyc2V0cmVlOwor CU9ialRyZWUgICAgKnJldDsKKwlPYmpUcmVlICAgICp0bXA7CisJUmVsYXRpb24JcGdfcmV3cml0 ZTsKKwlGb3JtX3BnX3Jld3JpdGUgcmV3ckZvcm07CisJSGVhcFR1cGxlCXJld3JUdXA7CisJU3lz U2NhbkRlc2Mgc2NhbjsKKwlTY2FuS2V5RGF0YSBrZXk7CisJRGF0dW0JCWV2X3F1YWw7CisJRGF0 dW0JCWV2X2FjdGlvbnM7CisJYm9vbAkJaXNudWxsOworCWNoYXIJICAgKnF1YWw7CisJTGlzdAkg ICAqYWN0aW9uczsKKwlMaXN0CSAgICpsaXN0ID0gTklMOworCUxpc3RDZWxsICAgKmNlbGw7CisJ Y2hhcgkgICAqZXZlbnRfc3RyOworCisJcGdfcmV3cml0ZSA9IHRhYmxlX29wZW4oUmV3cml0ZVJl bGF0aW9uSWQsIEFjY2Vzc1NoYXJlTG9jayk7CisJU2NhbktleUluaXQoJmtleSwKKwkJCQlBbnVt X3BnX3Jld3JpdGVfb2lkLAorCQkJCUJURXF1YWxTdHJhdGVneU51bWJlciwKKwkJCQlGX09JREVR LCBPYmplY3RJZEdldERhdHVtKG9iamVjdElkKSk7CisKKwlzY2FuID0gc3lzdGFibGVfYmVnaW5z Y2FuKHBnX3Jld3JpdGUsIFJld3JpdGVPaWRJbmRleElkLCB0cnVlLAorCQkJCQkJCSAgTlVMTCwg MSwgJmtleSk7CisJcmV3clR1cCA9IHN5c3RhYmxlX2dldG5leHQoc2Nhbik7CisJaWYgKCFIZWFw VHVwbGVJc1ZhbGlkKHJld3JUdXApKQorCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxl ZCBmb3IgcmV3cml0ZSBydWxlIHdpdGggT0lEICV1IiwKKwkJCSBvYmplY3RJZCk7CisKKwlyZXdy Rm9ybSA9IChGb3JtX3BnX3Jld3JpdGUpIEdFVFNUUlVDVChyZXdyVHVwKTsKKworCWV2ZW50X3N0 ciA9IG5vZGUtPmV2ZW50ID09IENNRF9TRUxFQ1QgPyAiU0VMRUNUIiA6CisJCW5vZGUtPmV2ZW50 ID09IENNRF9VUERBVEUgPyAiVVBEQVRFIiA6CisJCW5vZGUtPmV2ZW50ID09IENNRF9ERUxFVEUg PyAiREVMRVRFIiA6CisJCW5vZGUtPmV2ZW50ID09IENNRF9JTlNFUlQgPyAiSU5TRVJUIiA6IE5V TEw7CisJQXNzZXJ0KGV2ZW50X3N0ciAhPSBOVUxMKTsKKworCWV2X3F1YWwgPSBoZWFwX2dldGF0 dHIocmV3clR1cCwgQW51bV9wZ19yZXdyaXRlX2V2X3F1YWwsCisJCQkJCQkgICBSZWxhdGlvbkdl dERlc2NyKHBnX3Jld3JpdGUpLCAmaXNudWxsKTsKKwlldl9hY3Rpb25zID0gaGVhcF9nZXRhdHRy KHJld3JUdXAsIEFudW1fcGdfcmV3cml0ZV9ldl9hY3Rpb24sCisJCQkJCQkJICBSZWxhdGlvbkdl dERlc2NyKHBnX3Jld3JpdGUpLCAmaXNudWxsKTsKKworCXBnX2dldF9ydWxlZGVmX2RldGFpbGVk KGV2X3F1YWwsIGV2X2FjdGlvbnMsICZxdWFsLCAmYWN0aW9ucyk7CisKKwl0bXAgPSBuZXdfb2Jq dHJlZSgiIik7CisJaWYgKHF1YWwpCisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRtcCwgIldIRVJF ICV7Y2xhdXNlfXMiLCAiY2xhdXNlIiwgcXVhbCk7CisJZWxzZQorCXsKKwkJYXBwZW5kX251bGxf b2JqZWN0KHRtcCwgIldIRVJFICV7Y2xhdXNlfXMiKTsKKwkJYXBwZW5kX25vdF9wcmVzZW50KHRt cCk7CisJfQorCisJaWYgKGFjdGlvbnMgPT0gTklMKQorCQlsaXN0ID0gbGFwcGVuZChsaXN0LCBu ZXdfc3RyaW5nX29iamVjdCgiTk9USElORyIpKTsKKwllbHNlCisJeworCQlmb3JlYWNoKGNlbGws IGFjdGlvbnMpCisJCQlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfc3RyaW5nX29iamVjdChsZmly c3QoY2VsbCkpKTsKKwl9CisKKwlyZXQgPSBuZXdfb2JqdHJlZV9WQSgiQ1JFQVRFIFJVTEUgJXtv cl9yZXBsYWNlfXMgJXtpZGVudGl0eX1JIEFTIE9OICV7ZXZlbnR9cyBUTyAle3RhYmxlfUQgJXt3 aGVyZV9jbGF1c2V9cyBETyAle2luc3RlYWR9cyAle2FjdGlvbnM6LCB9cyIsIDcsCisJCQkJCQkg Im9yX3JlcGxhY2UiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJIG5vZGUtPnJlcGxhY2UgPyAiT1Ig UkVQTEFDRSIgOiAiIiwKKwkJCQkJCSAiaWRlbnRpdHkiLCBPYmpUeXBlU3RyaW5nLCBub2RlLT5y dWxlbmFtZSwKKwkJCQkJCSAiZXZlbnQiLCBPYmpUeXBlU3RyaW5nLCBldmVudF9zdHIsCisJCQkJ CQkgInRhYmxlIiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5h bWVfaWQoUmVsYXRpb25SZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCSByZXdyRm9ybS0+ZXZfY2xh c3MpLAorCQkJCQkJICJ3aGVyZV9jbGF1c2UiLCBPYmpUeXBlT2JqZWN0LCB0bXAsCisJCQkJCQkg Imluc3RlYWQiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJIG5vZGUtPmluc3RlYWQgPyAiSU5TVEVB RCIgOiAiQUxTTyIsCisJCQkJCQkgImFjdGlvbnMiLCBPYmpUeXBlQXJyYXksIGxpc3QpOworCisJ c3lzdGFibGVfZW5kc2NhbihzY2FuKTsKKwl0YWJsZV9jbG9zZShwZ19yZXdyaXRlLCBBY2Nlc3NT aGFyZUxvY2spOworCisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIERlcGFyc2UgYSBDcmVhdGVU cmFuc2Zvcm1TdG10IChDUkVBVEUgVFJBTlNGT1JNKS4KKyAqCisgKiBHaXZlbiBhIHRyYW5zZm9y bSBPSUQgYW5kIHRoZSBwYXJzZSB0cmVlIHRoYXQgY3JlYXRlZCBpdCwgcmV0dXJuIGFuIE9ialRy ZWUKKyAqIHJlcHJlc2VudGluZyB0aGUgQ1JFQVRFIFRSQU5TRk9STSBjb21tYW5kLgorICoKKyAq IFZlcmJvc2Ugc3ludGF4CisgKiBDUkVBVEUgJXtvcl9yZXBsYWNlfXMgVFJBTlNGT1JNIEZPUiAl e3R5cGVuYW1lfUQgTEFOR1VBR0UgJXtsYW5ndWFnZX1JCisgKiAoIEZST00gU1FMIFdJVEggRlVO Q1RJT04gJXtzaWduYXR1cmV9cywgVE8gU1FMIFdJVEggRlVOQ1RJT04KKyAqICV7c2lnbmF0dXJl X3RvZn1zICkKKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9DcmVhdGVUcmFuc2Zvcm1T dG10KE9pZCBvYmplY3RJZCwgTm9kZSAqcGFyc2V0cmVlKQoreworCUNyZWF0ZVRyYW5zZm9ybVN0 bXQgKm5vZGUgPSAoQ3JlYXRlVHJhbnNmb3JtU3RtdCAqKSBwYXJzZXRyZWU7CisJT2JqVHJlZSAg ICAqcmV0OworCU9ialRyZWUgICAgKnNpZ25hdHVyZTsKKwlIZWFwVHVwbGUJdHJmVHVwOworCUhl YXBUdXBsZQlsYW5nVHVwOworCUhlYXBUdXBsZQlwcm9jVHVwOworCUZvcm1fcGdfdHJhbnNmb3Jt IHRyZkZvcm07CisJRm9ybV9wZ19sYW5ndWFnZSBsYW5nRm9ybTsKKwlGb3JtX3BnX3Byb2MgcHJv Y0Zvcm07CisJaW50CQkJaTsKKworCS8qIEdldCB0aGUgcGdfdHJhbnNmb3JtIHR1cGxlICovCisJ dHJmVHVwID0gU2VhcmNoU3lzQ2FjaGUxKFRSRk9JRCwgT2JqZWN0SWRHZXREYXR1bShvYmplY3RJ ZCkpOworCWlmICghSGVhcFR1cGxlSXNWYWxpZCh0cmZUdXApKQorCQllbG9nKEVSUk9SLCAiY2Fj aGUgbG9va3VwIGZhaWxlZCBmb3IgdHJhbnNmb3JtIHdpdGggT0lEICV1IiwKKwkJCSBvYmplY3RJ ZCk7CisJdHJmRm9ybSA9IChGb3JtX3BnX3RyYW5zZm9ybSkgR0VUU1RSVUNUKHRyZlR1cCk7CisK KwkvKiBHZXQgdGhlIGNvcnJlc3BvbmRpbmcgcGdfbGFuZ3VhZ2UgdHVwbGUgKi8KKwlsYW5nVHVw ID0gU2VhcmNoU3lzQ2FjaGUxKExBTkdPSUQsIHRyZkZvcm0tPnRyZmxhbmcpOworCWlmICghSGVh cFR1cGxlSXNWYWxpZChsYW5nVHVwKSkKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWls ZWQgZm9yIGxhbmd1YWdlIHdpdGggT0lEICV1IiwKKwkJCSB0cmZGb3JtLT50cmZsYW5nKTsKKwls YW5nRm9ybSA9IChGb3JtX3BnX2xhbmd1YWdlKSBHRVRTVFJVQ1QobGFuZ1R1cCk7CisKKwlyZXQg PSBuZXdfb2JqdHJlZV9WQSgiQ1JFQVRFICV7b3JfcmVwbGFjZX1zIFRSQU5TRk9STSBGT1IgJXt0 eXBlbmFtZX1EIExBTkdVQUdFICV7bGFuZ3VhZ2V9SSIsIDMsCisJCQkJCQkgIm9yX3JlcGxhY2Ui LCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJIG5vZGUtPnJlcGxhY2UgPyAiT1IgUkVQTEFDRSIgOiAi IiwKKwkJCQkJCSAidHlwZW5hbWUiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJIG5ld19vYmp0cmVl X2Zvcl9xdWFsbmFtZV9pZChUeXBlUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkgdHJmRm9ybS0+ dHJmdHlwZSksCisJCQkJCQkgImxhbmd1YWdlIiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCSBOYW1l U3RyKGxhbmdGb3JtLT5sYW5uYW1lKSk7CisKKwkvKiBEZXBhcnNlIHRoZSB0cmFuc2Zvcm1fZWxl bWVudF9saXN0ICovCisJaWYgKE9pZElzVmFsaWQodHJmRm9ybS0+dHJmZnJvbXNxbCkpCisJewor CQlMaXN0CSAgICpwYXJhbXMgPSBOSUw7CisKKwkJLyogR2V0IHRoZSBwZ19wcm9jIHR1cGxlIGZv ciB0aGUgRlJPTSBGVU5DVElPTiAqLworCQlwcm9jVHVwID0gU2VhcmNoU3lzQ2FjaGUxKFBST0NP SUQsIHRyZkZvcm0tPnRyZmZyb21zcWwpOworCQlpZiAoIUhlYXBUdXBsZUlzVmFsaWQocHJvY1R1 cCkpCisJCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3IgZnVuY3Rpb24gd2l0 aCBPSUQgJXUiLAorCQkJCSB0cmZGb3JtLT50cmZmcm9tc3FsKTsKKwkJcHJvY0Zvcm0gPSAoRm9y bV9wZ19wcm9jKSBHRVRTVFJVQ1QocHJvY1R1cCk7CisKKwkJLyoKKwkJICogQ1JFQVRFIFRSQU5T Rk9STSBkb2VzIG5vdCBjaGFuZ2UgZnVuY3Rpb24gc2lnbmF0dXJlIHNvIHdlIGNhbiB1c2UKKwkJ ICogY2F0YWxvZyB0byBnZXQgaW5wdXQgdHlwZSBPaWRzLgorCQkgKi8KKwkJZm9yIChpID0gMDsg aSA8IHByb2NGb3JtLT5wcm9uYXJnczsgaSsrKQorCQl7CisJCQlPYmpUcmVlICAgICpwYXJhbV9v Ymo7CisKKwkJCXBhcmFtX29iaiA9IG5ld19vYmp0cmVlX1ZBKCIle3R5cGV9VCIsIDEsCisJCQkJ CQkJCQkgICJ0eXBlIiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl90 eXBlKHByb2NGb3JtLT5wcm9hcmd0eXBlcy52YWx1ZXNbaV0sIC0xKSk7CisJCQlwYXJhbXMgPSBs YXBwZW5kKHBhcmFtcywgbmV3X29iamVjdF9vYmplY3QocGFyYW1fb2JqKSk7CisJCX0KKworCQlz aWduYXR1cmUgPSBuZXdfb2JqdHJlZV9WQSgiJXtpZGVudGl0eX1EICgle2FyZ3VtZW50czosIH1z KSIsIDIsCisJCQkJCQkJCSAgICJpZGVudGl0eSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkJCSAg IG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZShwcm9jRm9ybS0+cHJvbmFtZXNwYWNlLAorCQkJCQkJ CQkJCQkJCQkJTmFtZVN0cihwcm9jRm9ybS0+cHJvbmFtZSkpLAorCQkJCQkJCQkgICAiYXJndW1l bnRzIiwgT2JqVHlwZUFycmF5LCBwYXJhbXMpOworCisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHJl dCwgIihGUk9NIFNRTCBXSVRIIEZVTkNUSU9OICV7c2lnbmF0dXJlfXMiLAorCQkJCQkJCSBzaWdu YXR1cmUpOworCQlSZWxlYXNlU3lzQ2FjaGUocHJvY1R1cCk7CisJfQorCWlmIChPaWRJc1ZhbGlk KHRyZkZvcm0tPnRyZnRvc3FsKSkKKwl7CisJCUxpc3QJICAgKnBhcmFtcyA9IE5JTDsKKworCQkv KiBBcHBlbmQgYSAnLCcgaWYgdHJmZnJvbXNxbCBpcyBwcmVzZW50LCBlbHNlIGFwcGVuZCAnKCcg Ki8KKwkJYXBwZW5kX2Zvcm1hdF9zdHJpbmcocmV0LCBPaWRJc1ZhbGlkKHRyZkZvcm0tPnRyZmZy b21zcWwpID8gIiwiIDogIigiKTsKKworCQkvKiBHZXQgdGhlIHBnX3Byb2MgdHVwbGUgZm9yIHRo ZSBUTyBGVU5DVElPTiAqLworCQlwcm9jVHVwID0gU2VhcmNoU3lzQ2FjaGUxKFBST0NPSUQsIHRy ZkZvcm0tPnRyZnRvc3FsKTsKKwkJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKHByb2NUdXApKQorCQkJ ZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIGZ1bmN0aW9uIHdpdGggT0lEICV1 IiwKKwkJCQkgdHJmRm9ybS0+dHJmdG9zcWwpOworCQlwcm9jRm9ybSA9IChGb3JtX3BnX3Byb2Mp IEdFVFNUUlVDVChwcm9jVHVwKTsKKworCQkvKgorCQkgKiBDUkVBVEUgVFJBTlNGT1JNIGRvZXMg bm90IGNoYW5nZSBmdW5jdGlvbiBzaWduYXR1cmUgc28gd2UgY2FuIHVzZQorCQkgKiBjYXRhbG9n IHRvIGdldCBpbnB1dCB0eXBlIE9pZHMuCisJCSAqLworCQlmb3IgKGkgPSAwOyBpIDwgcHJvY0Zv cm0tPnByb25hcmdzOyBpKyspCisJCXsKKwkJCU9ialRyZWUgICAgKnBhcmFtX29iaiA9IG5ld19v Ymp0cmVlKCIiKTsKKworCQkJcGFyYW1fb2JqID0gbmV3X29ianRyZWVfVkEoIiV7dHlwZX1UIiwg MSwKKwkJCQkJCQkJCSAgInR5cGUiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJCQkJICBuZXdfb2Jq dHJlZV9mb3JfdHlwZShwcm9jRm9ybS0+cHJvYXJndHlwZXMudmFsdWVzW2ldLCAtMSkpOworCQkJ cGFyYW1zID0gbGFwcGVuZChwYXJhbXMsIG5ld19vYmplY3Rfb2JqZWN0KHBhcmFtX29iaikpOwor CQl9CisKKwkJc2lnbmF0dXJlID0gbmV3X29ianRyZWVfVkEoIiV7aWRlbnRpdHl9RCAoJXthcmd1 bWVudHM6LCB9cykiLCAyLAorCQkJCQkJCQkgICAiaWRlbnRpdHkiLCBPYmpUeXBlT2JqZWN0LAor CQkJCQkJCQkgICBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUocHJvY0Zvcm0tPnByb25hbWVzcGFj ZSwKKwkJCQkJCQkJCQkJCQkJCU5hbWVTdHIocHJvY0Zvcm0tPnByb25hbWUpKSwKKwkJCQkJCQkJ ICAgImFyZ3VtZW50cyIsIE9ialR5cGVBcnJheSwgcGFyYW1zKTsKKworCQlhcHBlbmRfb2JqZWN0 X29iamVjdChyZXQsICJUTyBTUUwgV0lUSCBGVU5DVElPTiAle3NpZ25hdHVyZV90b2Z9cyIsCisJ CQkJCQkJIHNpZ25hdHVyZSk7CisJCVJlbGVhc2VTeXNDYWNoZShwcm9jVHVwKTsKKwl9CisKKwlh cHBlbmRfZm9ybWF0X3N0cmluZyhyZXQsICIpIik7CisKKwlSZWxlYXNlU3lzQ2FjaGUobGFuZ1R1 cCk7CisJUmVsZWFzZVN5c0NhY2hlKHRyZlR1cCk7CisJcmV0dXJuIHJldDsKK30KKworLyoKKyAq IEFwcGVuZCBhIE5VTEwtb3ItcXVvdGVkLWxpdGVyYWwgY2xhdXNlLiAgVXNlZnVsIGZvciBDT01N RU5UIGFuZCBTRUNVUklUWQorICogTEFCRUwuCisgKgorICogVmVyYm9zZSBzeW50YXgKKyAqICV7 bnVsbH1zICV7bGl0ZXJhbH1zCisgKi8KK3N0YXRpYyB2b2lkCithcHBlbmRfbGl0ZXJhbF9vcl9u dWxsKE9ialRyZWUgKnBhcmVudCwgY2hhciAqZWxlbW5hbWUsIGNoYXIgKnZhbHVlKQoreworCU9i alRyZWUgICAgKnRvcDsKKwlPYmpUcmVlICAgICpwYXJ0OworCisJdG9wID0gbmV3X29ianRyZWUo IiIpOworCXBhcnQgPSBuZXdfb2JqdHJlZV9WQSgiTlVMTCIsIDEsCisJCQkJCQkgICJwcmVzZW50 IiwgT2JqVHlwZUJvb2wsICF2YWx1ZSk7CisJYXBwZW5kX29iamVjdF9vYmplY3QodG9wLCAiJXtu dWxsfXMiLCBwYXJ0KTsKKworCXBhcnQgPSBuZXdfb2JqdHJlZV9WQSgiIiwgMSwKKwkJCQkJCSAg InByZXNlbnQiLCBPYmpUeXBlQm9vbCwgdmFsdWUgIT0gTlVMTCk7CisKKwlpZiAodmFsdWUpCisJ CWFwcGVuZF9zdHJpbmdfb2JqZWN0KHBhcnQsICIle3ZhbHVlfUwiLCAidmFsdWUiLCB2YWx1ZSk7 CisJYXBwZW5kX29iamVjdF9vYmplY3QodG9wLCAiJXtsaXRlcmFsfXMiLCBwYXJ0KTsKKworCWFw cGVuZF9vYmplY3Rfb2JqZWN0KHBhcmVudCwgZWxlbW5hbWUsIHRvcCk7Cit9CisKKy8qCisgKiBE ZXBhcnNlIGEgQ29tbWVudFN0bXQgd2hlbiBpdCBwZXJ0YWlucyB0byBhIGNvbnN0cmFpbnQuCisg KgorICogVmVyYm9zZSBzeW50YXgKKyAqIENPTU1FTlQgT04gQ09OU1RSQUlOVCAle2lkZW50aXR5 fXMgT04gW0RPTUFJTl0gJXtwYXJlbnRvYmp9cyBJUyAle2NvbW1lbnR9cworICovCitzdGF0aWMg T2JqVHJlZSAqCitkZXBhcnNlX0NvbW1lbnRPbkNvbnN0cmFpbnRTbXQoT2lkIG9iamVjdElkLCBO b2RlICpwYXJzZXRyZWUpCit7CisJQ29tbWVudFN0bXQgKm5vZGUgPSAoQ29tbWVudFN0bXQgKikg cGFyc2V0cmVlOworCU9ialRyZWUgICAgKnJldDsKKwlIZWFwVHVwbGUJY29uc3RyVHVwOworCUZv cm1fcGdfY29uc3RyYWludCBjb25zdHJGb3JtOworCU9iamVjdEFkZHJlc3MgYWRkcjsKKworCUFz c2VydChub2RlLT5vYmp0eXBlID09IE9CSkVDVF9UQUJDT05TVFJBSU5UIHx8IG5vZGUtPm9ianR5 cGUgPT0gT0JKRUNUX0RPTUNPTlNUUkFJTlQpOworCisJY29uc3RyVHVwID0gU2VhcmNoU3lzQ2Fj aGUxKENPTlNUUk9JRCwgb2JqZWN0SWQpOworCWlmICghSGVhcFR1cGxlSXNWYWxpZChjb25zdHJU dXApKQorCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3IgY29uc3RyYWludCB3 aXRoIE9JRCAldSIsIG9iamVjdElkKTsKKwljb25zdHJGb3JtID0gKEZvcm1fcGdfY29uc3RyYWlu dCkgR0VUU1RSVUNUKGNvbnN0clR1cCk7CisKKwlpZiAoT2lkSXNWYWxpZChjb25zdHJGb3JtLT5j b25yZWxpZCkpCisJCU9iamVjdEFkZHJlc3NTZXQoYWRkciwgUmVsYXRpb25SZWxhdGlvbklkLCBj b25zdHJGb3JtLT5jb25yZWxpZCk7CisJZWxzZQorCQlPYmplY3RBZGRyZXNzU2V0KGFkZHIsIFR5 cGVSZWxhdGlvbklkLCBjb25zdHJGb3JtLT5jb250eXBpZCk7CisKKwlyZXQgPSBuZXdfb2JqdHJl ZV9WQSgiQ09NTUVOVCBPTiBDT05TVFJBSU5UICV7aWRlbnRpdHl9cyBPTiAle2RvbWFpbn1zICV7 cGFyZW50b2JqfXMiLCAzLAorCQkJCQkJICJpZGVudGl0eSIsIE9ialR5cGVTdHJpbmcsIHBzdHJk dXAoTmFtZVN0cihjb25zdHJGb3JtLT5jb25uYW1lKSksCisJCQkJCQkgImRvbWFpbiIsIE9ialR5 cGVTdHJpbmcsCisJCQkJCQkgKG5vZGUtPm9ianR5cGUgPT0gT0JKRUNUX0RPTUNPTlNUUkFJTlQp ID8gIkRPTUFJTiIgOiAiIiwKKwkJCQkJCSAicGFyZW50b2JqIiwgT2JqVHlwZVN0cmluZywKKwkJ CQkJCSBnZXRPYmplY3RJZGVudGl0eSgmYWRkciwgZmFsc2UpKTsKKworCS8qIEFkZCB0aGUgY29t bWVudCBjbGF1c2UgKi8KKwlhcHBlbmRfbGl0ZXJhbF9vcl9udWxsKHJldCwgIklTICV7Y29tbWVu dH1zIiwgbm9kZS0+Y29tbWVudCk7CisKKwlSZWxlYXNlU3lzQ2FjaGUoY29uc3RyVHVwKTsKKwly ZXR1cm4gcmV0OworfQorCisvKgorICogRGVwYXJzZSBhbiBDb21tZW50U3RtdCAoQ09NTUVOVCBP TiAuLi4pLgorICoKKyAqIEdpdmVuIHRoZSBvYmplY3QgYWRkcmVzcyBhbmQgdGhlIHBhcnNlIHRy ZWUgdGhhdCBjcmVhdGVkIGl0LCByZXR1cm4gYW4KKyAqIE9ialRyZWUgcmVwcmVzZW50aW5nIHRo ZSBjb21tZW50IGNvbW1hbmQuCisgKgorICogVmVyYm9zZSBzeW50YXgKKyAqIENPTU1FTlQgT04g JXtvYmp0eXBlfXMgJXtpZGVudGl0eX1zIElTICV7Y29tbWVudH1zCisgKi8KK3N0YXRpYyBPYmpU cmVlICoKK2RlcGFyc2VfQ29tbWVudFN0bXQoT2JqZWN0QWRkcmVzcyBhZGRyZXNzLCBOb2RlICpw YXJzZXRyZWUpCit7CisJQ29tbWVudFN0bXQgKm5vZGUgPSAoQ29tbWVudFN0bXQgKikgcGFyc2V0 cmVlOworCU9ialRyZWUgICAgKnJldDsKKwljaGFyCSAgICppZGVudGl0eTsKKworCS8qCisJICog Q29uc3RyYWludHMgYXJlIHN1ZmZpY2llbnRseSBkaWZmZXJlbnQgdGhhdCBpdCBpcyBlYXNpZXIg dG8gaGFuZGxlIHRoZW0KKwkgKiBzZXBhcmF0ZWx5LgorCSAqLworCWlmIChub2RlLT5vYmp0eXBl ID09IE9CSkVDVF9ET01DT05TVFJBSU5UIHx8CisJCW5vZGUtPm9ianR5cGUgPT0gT0JKRUNUX1RB QkNPTlNUUkFJTlQpCisJeworCQlBc3NlcnQoYWRkcmVzcy5jbGFzc0lkID09IENvbnN0cmFpbnRS ZWxhdGlvbklkKTsKKwkJcmV0dXJuIGRlcGFyc2VfQ29tbWVudE9uQ29uc3RyYWludFNtdChhZGRy ZXNzLm9iamVjdElkLCBwYXJzZXRyZWUpOworCX0KKworCXJldCA9IG5ld19vYmp0cmVlX1ZBKCJD T01NRU5UIE9OICV7b2JqdHlwZX1zIiwgMSwKKwkJCQkJCSAib2JqdHlwZSIsIE9ialR5cGVTdHJp bmcsCisJCQkJCQkgKGNoYXIgKikgc3RyaW5naWZ5X29ianR5cGUobm9kZS0+b2JqdHlwZSwgZmFs c2UpKTsKKworCS8qCisJICogQWRkIHRoZSBvYmplY3QgaWRlbnRpdHkgY2xhdXNlLiAgRm9yIHpl cm8gYXJndW1lbnQgYWdncmVnYXRlcyB3ZSBuZWVkCisJICogdG8gYWRkIHRoZSAoKikgYml0OyBp biBhbGwgb3RoZXIgY2FzZXMgd2UgY2FuIGp1c3QgdXNlCisJICogZ2V0T2JqZWN0SWRlbnRpdHku CisJICoKKwkgKiBYWFggc2hvdWxkbid0IHdlIGluc3RlYWQgZml4IHRoZSBvYmplY3QgaWRlbnRp dGllcyBmb3IgemVyby1hcmd1bWVudAorCSAqIGFnZ3JlZ2F0ZXM/CisJICovCisJaWYgKG5vZGUt Pm9ianR5cGUgPT0gT0JKRUNUX0FHR1JFR0FURSkKKwl7CisJCUhlYXBUdXBsZQlwcm9jVHVwOwor CQlGb3JtX3BnX3Byb2MgcHJvY0Zvcm07CisKKwkJcHJvY1R1cCA9IFNlYXJjaFN5c0NhY2hlMShQ Uk9DT0lELCBPYmplY3RJZEdldERhdHVtKGFkZHJlc3Mub2JqZWN0SWQpKTsKKwkJaWYgKCFIZWFw VHVwbGVJc1ZhbGlkKHByb2NUdXApKQorCQkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWls ZWQgZm9yIHByb2NlZHVyZSB3aXRoIE9JRCAldSIsCisJCQkJIGFkZHJlc3Mub2JqZWN0SWQpOwor CQlwcm9jRm9ybSA9IChGb3JtX3BnX3Byb2MpIEdFVFNUUlVDVChwcm9jVHVwKTsKKwkJaWYgKHBy b2NGb3JtLT5wcm9uYXJncyA9PSAwKQorCQkJaWRlbnRpdHkgPSBwc3ByaW50ZigiJXMoKikiLAor CQkJCQkJCQlxdW90ZV9xdWFsaWZpZWRfaWRlbnRpZmllcihnZXRfbmFtZXNwYWNlX25hbWUocHJv Y0Zvcm0tPnByb25hbWVzcGFjZSksCisJCQkJCQkJCQkJCQkJCSAgIE5hbWVTdHIocHJvY0Zvcm0t PnByb25hbWUpKSk7CisJCWVsc2UKKwkJCWlkZW50aXR5ID0gZ2V0T2JqZWN0SWRlbnRpdHkoJmFk ZHJlc3MsIGZhbHNlKTsKKwkJUmVsZWFzZVN5c0NhY2hlKHByb2NUdXApOworCX0KKwllbHNlCisJ CWlkZW50aXR5ID0gZ2V0T2JqZWN0SWRlbnRpdHkoJmFkZHJlc3MsIGZhbHNlKTsKKworCWFwcGVu ZF9zdHJpbmdfb2JqZWN0KHJldCwgIiV7aWRlbnRpdHl9cyIsICJpZGVudGl0eSIsIGlkZW50aXR5 KTsKKworCS8qIEFkZCB0aGUgY29tbWVudCBjbGF1c2U7IGNhbiBiZSBlaXRoZXIgTlVMTCBvciBh IHF1b3RlZCBsaXRlcmFsLiAqLworCWFwcGVuZF9saXRlcmFsX29yX251bGwocmV0LCAiSVMgJXtj b21tZW50fXMiLCBub2RlLT5jb21tZW50KTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBE ZXBhcnNlIGEgU2VjTGFiZWxTdG10IChTRUNVUklUWSBMQUJFTCkKKyAqCisgKiBHaXZlbiB0aGUg T2JqZWN0QWRkcmVzcyBvZiB0aGUgdGFyZ2V0IG9iamVjdCBhbmQgdGhlIHBhcnNlIHRyZWUgb2Yg dGhlCisgKiBTRUNVUklUWSBMQUJFTCBjb21tYW5kLCByZXR1cm4gYW4gT2JqVHJlZSByZXByZXNl bnRpbmcgdGhlIFNFQ1VSSVRZIExBQkVMCisgKiBjb21tYW5kLgorICoKKyAqIFZlcmJvc2Ugc3lu dGF4CisgKiBTRUNVUklUWSBMQUJFTCBGT1IgJXtwcm92aWRlcn1zIE9OICV7b2JqZWN0X3R5cGVf bmFtZX1zICV7aWRlbnRpdHl9cyBJUyAle2xhYmVsfXMKKyAqLworc3RhdGljIE9ialRyZWUgKgor ZGVwYXJzZV9TZWNMYWJlbFN0bXQoT2JqZWN0QWRkcmVzcyBhZGRyZXNzLCBOb2RlICpwYXJzZXRy ZWUpCit7CisJU2VjTGFiZWxTdG10ICpub2RlID0gKFNlY0xhYmVsU3RtdCAqKSBwYXJzZXRyZWU7 CisJT2JqVHJlZQkgICAqcmV0OworCisJQXNzZXJ0KG5vZGUtPnByb3ZpZGVyKTsKKworCXJldCA9 IG5ld19vYmp0cmVlX1ZBKCJTRUNVUklUWSBMQUJFTCBGT1IgJXtwcm92aWRlcn1zIE9OICV7b2Jq dHlwZX1zICV7aWRlbnRpdHl9cyIsIDMsCisJCQkJCQkgInByb3ZpZGVyIiwgT2JqVHlwZVN0cmlu Zywgbm9kZS0+cHJvdmlkZXIsCisJCQkJCQkgIm9ianR5cGUiLCBPYmpUeXBlU3RyaW5nLAorCQkJ CQkJIHN0cmluZ2lmeV9vYmp0eXBlKG5vZGUtPm9ianR5cGUsIGZhbHNlKSwKKwkJCQkJCSAiaWRl bnRpdHkiLCBPYmpUeXBlU3RyaW5nLCBnZXRPYmplY3RJZGVudGl0eSgmYWRkcmVzcywgZmFsc2Up KTsKKworCS8qIEFkZCB0aGUgbGFiZWwgY2xhdXNlOyBjYW4gYmUgZWl0aGVyIE5VTEwgb3IgYSBx dW90ZWQgbGl0ZXJhbC4gKi8KKwlhcHBlbmRfbGl0ZXJhbF9vcl9udWxsKHJldCwgIklTICV7bGFi ZWx9cyIsIG5vZGUtPmxhYmVsKTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBEZXBhcnNl IGEgQ3JlYXRlQW1TdG10IChDUkVBVEUgQUNDRVNTIE1FVEhPRCkuCisgKgorICogR2l2ZW4gYW4g YWNjZXNzIG1ldGhvZCBPSUQgYW5kIHRoZSBwYXJzZSB0cmVlIHRoYXQgY3JlYXRlZCBpdCwgcmV0 dXJuIGFuCisgKiBPYmpUcmVlIHJlcHJlc2VudGluZyB0aGUgQ1JFQVRFIEFDQ0VTUyBNRVRIT0Qg Y29tbWFuZC4KKyAqCisgKiBWZXJib3NlIHN5bnRheAorICogQ1JFQVRFIEFDQ0VTUyBNRVRIT0Qg JXtpZGVudGl0eX1JIFRZUEUgJXthbV90eXBlfXMgSEFORExFUiAle2hhbmRsZXJ9RAorICovCitz dGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0NyZWF0ZUFtU3RtdChPaWQgb2JqZWN0SWQsIE5vZGUg KnBhcnNldHJlZSkKK3sKKwlPYmpUcmVlICAgICpyZXQ7CisJSGVhcFR1cGxlCWFtVHVwOworCUZv cm1fcGdfYW0JYW1Gb3JtOworCWNoYXIJICAgKmFtdHlwZTsKKworCWFtVHVwID0gU2VhcmNoU3lz Q2FjaGUxKEFNT0lELCBPYmplY3RJZEdldERhdHVtKG9iamVjdElkKSk7CisJaWYgKCFIZWFwVHVw bGVJc1ZhbGlkKGFtVHVwKSkKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9y IGFjY2VzcyBtZXRob2Qgd2l0aCBPSUQgJXUiLAorCQkJIG9iamVjdElkKTsKKwlhbUZvcm0gPSAo Rm9ybV9wZ19hbSkgR0VUU1RSVUNUKGFtVHVwKTsKKworCXN3aXRjaCAoYW1Gb3JtLT5hbXR5cGUp CisJeworCQljYXNlICdpJzoKKwkJCWFtdHlwZSA9ICJJTkRFWCI7CisJCQlicmVhazsKKwkJY2Fz ZSAndCc6CisJCQlhbXR5cGUgPSAiVEFCTEUiOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQll bG9nKEVSUk9SLCAiaW52YWxpZCB0eXBlICVjIGZvciBhY2Nlc3MgbWV0aG9kIiwgYW1Gb3JtLT5h bXR5cGUpOworCX0KKworCXJldCA9IG5ld19vYmp0cmVlX1ZBKCJDUkVBVEUgQUNDRVNTIE1FVEhP RCAle2lkZW50aXR5fUkgVFlQRSAle2FtX3R5cGV9cyBIQU5ETEVSICV7aGFuZGxlcn1EIiwgMywK KwkJCQkJCSAiaWRlbnRpdHkiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJIE5hbWVTdHIoYW1Gb3Jt LT5hbW5hbWUpLAorCQkJCQkJICJhbV90eXBlIiwgT2JqVHlwZVN0cmluZywgYW10eXBlLAorCQkJ CQkJICJoYW5kbGVyIiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVh bG5hbWVfaWQoUHJvY2VkdXJlUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkgYW1Gb3JtLT5hbWhh bmRsZXIpKTsKKworCVJlbGVhc2VTeXNDYWNoZShhbVR1cCk7CisKKwlyZXR1cm4gcmV0OworfQor CisvKgorICogSGFuZGxlIGRlcGFyc2luZyBvZiBzaW1wbGUgY29tbWFuZHMuCisgKgorICogVGhp cyBmdW5jdGlvbiBzaG91bGQgY292ZXIgYWxsIGNhc2VzIGhhbmRsZWQgaW4gUHJvY2Vzc1V0aWxp dHlTbG93LgorICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX3NpbXBsZV9jb21tYW5kKENv bGxlY3RlZENvbW1hbmQgKmNtZCkKK3sKKwlPaWQJCQlvYmplY3RJZDsKKwlOb2RlCSAgICpwYXJz ZXRyZWU7CisKKwlBc3NlcnQoY21kLT50eXBlID09IFNDVF9TaW1wbGUpOworCisJcGFyc2V0cmVl ID0gY21kLT5wYXJzZXRyZWU7CisJb2JqZWN0SWQgPSBjbWQtPmQuc2ltcGxlLmFkZHJlc3Mub2Jq ZWN0SWQ7CisKKwlpZiAoY21kLT5pbl9leHRlbnNpb24gJiYgKG5vZGVUYWcocGFyc2V0cmVlKSAh PSBUX0NyZWF0ZUV4dGVuc2lvblN0bXQpKQorCQlyZXR1cm4gTlVMTDsKKworCS8qIFRoaXMgc3dp dGNoIG5lZWRzIHRvIGhhbmRsZSBldmVyeXRoaW5nIHRoYXQgUHJvY2Vzc1V0aWxpdHlTbG93IGRv ZXMgKi8KKwlzd2l0Y2ggKG5vZGVUYWcocGFyc2V0cmVlKSkKKwl7CisJCWNhc2UgVF9BbHRlckNv bGxhdGlvblN0bXQ6CisJCQlyZXR1cm4gZGVwYXJzZV9BbHRlckNvbGxhdGlvbihvYmplY3RJZCwg cGFyc2V0cmVlKTsKKworCQljYXNlIFRfQWx0ZXJEb21haW5TdG10OgorCQkJcmV0dXJuIGRlcGFy c2VfQWx0ZXJEb21haW5TdG10KG9iamVjdElkLCBwYXJzZXRyZWUsCisJCQkJCQkJCQkJICAgY21k LT5kLnNpbXBsZS5zZWNvbmRhcnlPYmplY3QpOworCisJCWNhc2UgVF9BbHRlckVudW1TdG10Ogor CQkJcmV0dXJuIGRlcGFyc2VfQWx0ZXJFbnVtU3RtdChvYmplY3RJZCwgcGFyc2V0cmVlKTsKKwor CQljYXNlIFRfQWx0ZXJFeHRlbnNpb25Db250ZW50c1N0bXQ6CisJCQlyZXR1cm4gZGVwYXJzZV9B bHRlckV4dGVuc2lvbkNvbnRlbnRzU3RtdChvYmplY3RJZCwgcGFyc2V0cmVlLAorCQkJCQkJCQkJ CQkJCSAgY21kLT5kLnNpbXBsZS5zZWNvbmRhcnlPYmplY3QpOworCisJCWNhc2UgVF9BbHRlckV4 dGVuc2lvblN0bXQ6CisJCQlyZXR1cm4gZGVwYXJzZV9BbHRlckV4dGVuc2lvblN0bXQob2JqZWN0 SWQsIHBhcnNldHJlZSk7CisKKwkJY2FzZSBUX0FsdGVyRmR3U3RtdDoKKwkJCXJldHVybiBkZXBh cnNlX0FsdGVyRmR3U3RtdChvYmplY3RJZCwgcGFyc2V0cmVlKTsKKworCQljYXNlIFRfQWx0ZXJG b3JlaWduU2VydmVyU3RtdDoKKwkJCXJldHVybiBkZXBhcnNlX0FsdGVyRm9yZWlnblNlcnZlclN0 bXQob2JqZWN0SWQsIHBhcnNldHJlZSk7CisKKwkJY2FzZSBUX0FsdGVyRnVuY3Rpb25TdG10Ogor CQkJcmV0dXJuIGRlcGFyc2VfQWx0ZXJGdW5jdGlvbihvYmplY3RJZCwgcGFyc2V0cmVlKTsKKwor CQljYXNlIFRfQWx0ZXJPYmplY3REZXBlbmRzU3RtdDoKKwkJCXJldHVybiBkZXBhcnNlX0FsdGVy RGVwZW5kU3RtdChvYmplY3RJZCwgcGFyc2V0cmVlKTsKKworCQljYXNlIFRfQWx0ZXJPYmplY3RT Y2hlbWFTdG10OgorCQkJcmV0dXJuIGRlcGFyc2VfQWx0ZXJPYmplY3RTY2hlbWFTdG10KGNtZC0+ ZC5zaW1wbGUuYWRkcmVzcywKKwkJCQkJCQkJCQkJCSBwYXJzZXRyZWUsCisJCQkJCQkJCQkJCQkg Y21kLT5kLnNpbXBsZS5zZWNvbmRhcnlPYmplY3QpOworCisJCWNhc2UgVF9BbHRlck9wZXJhdG9y U3RtdDoKKwkJCXJldHVybiBkZXBhcnNlX0FsdGVyT3BlcmF0b3JTdG10KG9iamVjdElkLCBwYXJz ZXRyZWUpOworCisJCWNhc2UgVF9BbHRlck93bmVyU3RtdDoKKwkJCXJldHVybiBkZXBhcnNlX0Fs dGVyT3duZXJTdG10KGNtZC0+ZC5zaW1wbGUuYWRkcmVzcywgcGFyc2V0cmVlKTsKKworCQljYXNl IFRfQWx0ZXJQb2xpY3lTdG10OgorCQkJcmV0dXJuIGRlcGFyc2VfQWx0ZXJQb2xpY3lTdG10KG9i amVjdElkLCBwYXJzZXRyZWUpOworCisJCWNhc2UgVF9BbHRlclNlcVN0bXQ6CisJCQlyZXR1cm4g ZGVwYXJzZV9BbHRlclNlcVN0bXQob2JqZWN0SWQsIHBhcnNldHJlZSk7CisKKwkJY2FzZSBUX0Fs dGVyU3RhdHNTdG10OgorCQkJcmV0dXJuIGRlcGFyc2VfQWx0ZXJTdGF0c1N0bXQob2JqZWN0SWQs IHBhcnNldHJlZSk7CisKKwkJY2FzZSBUX0FsdGVyVFNEaWN0aW9uYXJ5U3RtdDoKKwkJCXJldHVy biBkZXBhcnNlX0FsdGVyVFNEaWN0aW9uYXJ5U3RtdChvYmplY3RJZCwgcGFyc2V0cmVlKTsKKwor CQljYXNlIFRfQWx0ZXJUeXBlU3RtdDoKKwkJCXJldHVybiBkZXBhcnNlX0FsdGVyVHlwZVNldFN0 bXQob2JqZWN0SWQsIHBhcnNldHJlZSk7CisKKwkJY2FzZSBUX0FsdGVyVXNlck1hcHBpbmdTdG10 OgorCQkJcmV0dXJuIGRlcGFyc2VfQWx0ZXJVc2VyTWFwcGluZ1N0bXQob2JqZWN0SWQsIHBhcnNl dHJlZSk7CisKKwkJY2FzZSBUX0NvbW1lbnRTdG10OgorCQkJcmV0dXJuIGRlcGFyc2VfQ29tbWVu dFN0bXQoY21kLT5kLnNpbXBsZS5hZGRyZXNzLCBwYXJzZXRyZWUpOworCisJCWNhc2UgVF9Db21w b3NpdGVUeXBlU3RtdDoKKwkJCXJldHVybiBkZXBhcnNlX0NvbXBvc2l0ZVR5cGVTdG10KG9iamVj dElkLCBwYXJzZXRyZWUpOworCisJCWNhc2UgVF9DcmVhdGVBbVN0bXQ6CisJCQlyZXR1cm4gZGVw YXJzZV9DcmVhdGVBbVN0bXQob2JqZWN0SWQsIHBhcnNldHJlZSk7CisKKwkJY2FzZSBUX0NyZWF0 ZUNhc3RTdG10OgorCQkJcmV0dXJuIGRlcGFyc2VfQ3JlYXRlQ2FzdFN0bXQob2JqZWN0SWQsIHBh cnNldHJlZSk7CisKKwkJY2FzZSBUX0NyZWF0ZUNvbnZlcnNpb25TdG10OgorCQkJcmV0dXJuIGRl cGFyc2VfQ3JlYXRlQ29udmVyc2lvbihvYmplY3RJZCwgcGFyc2V0cmVlKTsKKworCQljYXNlIFRf Q3JlYXRlRG9tYWluU3RtdDoKKwkJCXJldHVybiBkZXBhcnNlX0NyZWF0ZURvbWFpbihvYmplY3RJ ZCwgcGFyc2V0cmVlKTsKKworCQljYXNlIFRfQ3JlYXRlRW51bVN0bXQ6CS8qIENSRUFURSBUWVBF IEFTIEVOVU0gKi8KKwkJCXJldHVybiBkZXBhcnNlX0NyZWF0ZUVudW1TdG10KG9iamVjdElkLCBw YXJzZXRyZWUpOworCisJCWNhc2UgVF9DcmVhdGVFeHRlbnNpb25TdG10OgorCQkJcmV0dXJuIGRl cGFyc2VfQ3JlYXRlRXh0ZW5zaW9uU3RtdChvYmplY3RJZCwgcGFyc2V0cmVlKTsKKworCQljYXNl IFRfQ3JlYXRlRmR3U3RtdDoKKwkJCXJldHVybiBkZXBhcnNlX0NyZWF0ZUZkd1N0bXQob2JqZWN0 SWQsIHBhcnNldHJlZSk7CisKKwkJY2FzZSBUX0NyZWF0ZUZvcmVpZ25TZXJ2ZXJTdG10OgorCQkJ cmV0dXJuIGRlcGFyc2VfQ3JlYXRlRm9yZWlnblNlcnZlclN0bXQob2JqZWN0SWQsIHBhcnNldHJl ZSk7CisKKwkJY2FzZSBUX0NyZWF0ZUZ1bmN0aW9uU3RtdDoKKwkJCXJldHVybiBkZXBhcnNlX0Ny ZWF0ZUZ1bmN0aW9uKG9iamVjdElkLCBwYXJzZXRyZWUpOworCisJCWNhc2UgVF9DcmVhdGVPcEZh bWlseVN0bXQ6CisJCQlyZXR1cm4gZGVwYXJzZV9DcmVhdGVPcEZhbWlseShvYmplY3RJZCwgcGFy c2V0cmVlKTsKKworCQljYXNlIFRfQ3JlYXRlUExhbmdTdG10OgorCQkJcmV0dXJuIGRlcGFyc2Vf Q3JlYXRlTGFuZ1N0bXQob2JqZWN0SWQsIHBhcnNldHJlZSk7CisKKwkJY2FzZSBUX0NyZWF0ZVBv bGljeVN0bXQ6CisJCQlyZXR1cm4gZGVwYXJzZV9DcmVhdGVQb2xpY3lTdG10KG9iamVjdElkLCBw YXJzZXRyZWUpOworCisJCWNhc2UgVF9DcmVhdGVSYW5nZVN0bXQ6IC8qIENSRUFURSBUWVBFIEFT IFJBTkdFICovCisJCQlyZXR1cm4gZGVwYXJzZV9DcmVhdGVSYW5nZVN0bXQob2JqZWN0SWQsIHBh cnNldHJlZSk7CisKKwkJY2FzZSBUX0NyZWF0ZVNjaGVtYVN0bXQ6CisJCQlyZXR1cm4gZGVwYXJz ZV9DcmVhdGVTY2hlbWFTdG10KG9iamVjdElkLCBwYXJzZXRyZWUpOworCisJCWNhc2UgVF9DcmVh dGVTZXFTdG10OgorCQkJcmV0dXJuIGRlcGFyc2VfQ3JlYXRlU2VxU3RtdChvYmplY3RJZCwgcGFy c2V0cmVlKTsKKworCQljYXNlIFRfQ3JlYXRlU3RhdHNTdG10OgorCQkJcmV0dXJuIGRlcGFyc2Vf Q3JlYXRlU3RhdGlzdGljc1N0bXQob2JqZWN0SWQsIHBhcnNldHJlZSk7CisKKwkJY2FzZSBUX0Ny ZWF0ZVN0bXQ6CisJCQlyZXR1cm4gZGVwYXJzZV9DcmVhdGVTdG10KG9iamVjdElkLCBwYXJzZXRy ZWUpOworCisJCWNhc2UgVF9DcmVhdGVGb3JlaWduVGFibGVTdG10OgorCQkJcmV0dXJuIGRlcGFy c2VfQ3JlYXRlRm9yZWlnblRhYmxlU3RtdChvYmplY3RJZCwgcGFyc2V0cmVlKTsKKworCQljYXNl IFRfQ3JlYXRlVGFibGVBc1N0bXQ6CS8qIENSRUFURSBNQVRFUklBTElaRUQgVklFVyAqLworCQkJ cmV0dXJuIGRlcGFyc2VfQ3JlYXRlVGFibGVBc1N0bXRfdmFuaWxsYShvYmplY3RJZCwgcGFyc2V0 cmVlKTsKKworCQljYXNlIFRfQ3JlYXRlVHJhbnNmb3JtU3RtdDoKKwkJCXJldHVybiBkZXBhcnNl X0NyZWF0ZVRyYW5zZm9ybVN0bXQob2JqZWN0SWQsIHBhcnNldHJlZSk7CisKKwkJY2FzZSBUX0Ny ZWF0ZVRyaWdTdG10OgorCQkJcmV0dXJuIGRlcGFyc2VfQ3JlYXRlVHJpZ1N0bXQob2JqZWN0SWQs IHBhcnNldHJlZSk7CisKKwkJY2FzZSBUX0NyZWF0ZVVzZXJNYXBwaW5nU3RtdDoKKwkJCXJldHVy biBkZXBhcnNlX0NyZWF0ZVVzZXJNYXBwaW5nU3RtdChvYmplY3RJZCwgcGFyc2V0cmVlKTsKKwor CQljYXNlIFRfRGVmaW5lU3RtdDoKKwkJCXJldHVybiBkZXBhcnNlX0RlZmluZVN0bXQob2JqZWN0 SWQsIHBhcnNldHJlZSwKKwkJCQkJCQkJCSAgY21kLT5kLnNpbXBsZS5zZWNvbmRhcnlPYmplY3Qp OworCisJCWNhc2UgVF9JbmRleFN0bXQ6CisJCQlyZXR1cm4gZGVwYXJzZV9JbmRleFN0bXQob2Jq ZWN0SWQsIHBhcnNldHJlZSk7CisKKwkJY2FzZSBUX1JlZnJlc2hNYXRWaWV3U3RtdDoKKwkJCXJl dHVybiBkZXBhcnNlX1JlZnJlc2hNYXRWaWV3U3RtdChvYmplY3RJZCwgcGFyc2V0cmVlKTsKKwor CQljYXNlIFRfUmVuYW1lU3RtdDoKKwkJCXJldHVybiBkZXBhcnNlX1JlbmFtZVN0bXQoY21kLT5k LnNpbXBsZS5hZGRyZXNzLCBwYXJzZXRyZWUpOworCisJCWNhc2UgVF9SdWxlU3RtdDoKKwkJCXJl dHVybiBkZXBhcnNlX1J1bGVTdG10KG9iamVjdElkLCBwYXJzZXRyZWUpOworCisJCWNhc2UgVF9W aWV3U3RtdDoJCS8qIENSRUFURSBWSUVXICovCisJCQlyZXR1cm4gZGVwYXJzZV9WaWV3U3RtdChv YmplY3RJZCwgcGFyc2V0cmVlKTsKKworCQljYXNlIFRfU2VjTGFiZWxTdG10OgorCQkJcmV0dXJu IGRlcGFyc2VfU2VjTGFiZWxTdG10KGNtZC0+ZC5zaW1wbGUuYWRkcmVzcywgcGFyc2V0cmVlKTsK KworCQlkZWZhdWx0OgorCQkJZWxvZyhMT0csICJ1bnJlY29nbml6ZWQgbm9kZSB0eXBlIGluIGRl cGFyc2UgY29tbWFuZDogJWQiLAorCQkJCSAoaW50KSBub2RlVGFnKHBhcnNldHJlZSkpOworCX0K KworCXJldHVybiBOVUxMOworfQorCisvKgorICogU3Vicm91dGluZSBmb3IgQ1JFQVRFIFRBQkxF IGRlcGFyc2luZy4KKyAqCisgKiBEZWFsIHdpdGggYWxsIHRoZSB0YWJsZSBlbGVtZW50cyAoY29s dW1ucyBhbmQgY29uc3RyYWludHMpLgorICoKKyAqIE5vdGUgd2UgaWdub3JlIGNvbnN0cmFpbnRz IGluIHRoZSBwYXJzZSBub2RlIGhlcmU7IHRoZXkgYXJlIGV4dHJhY3RlZCBmcm9tCisgKiBzeXN0 ZW0gY2F0YWxvZ3MgaW5zdGVhZC4KKyAqLworc3RhdGljIExpc3QgKgorZGVwYXJzZV9UYWJsZUVs ZW1lbnRzKFJlbGF0aW9uIHJlbGF0aW9uLCBMaXN0ICp0YWJsZUVsZW1lbnRzLCBMaXN0ICpkcGNv bnRleHQsCisJCQkJCSAgYm9vbCB0eXBlZCwgYm9vbCBjb21wb3NpdGUpCit7CisJTGlzdAkgICAq ZWxlbWVudHMgPSBOSUw7CisJTGlzdENlbGwgICAqbGM7CisKKwlmb3JlYWNoKGxjLCB0YWJsZUVs ZW1lbnRzKQorCXsKKwkJTm9kZQkgICAqZWx0ID0gKE5vZGUgKikgbGZpcnN0KGxjKTsKKworCQlz d2l0Y2ggKG5vZGVUYWcoZWx0KSkKKwkJeworCQkJY2FzZSBUX0NvbHVtbkRlZjoKKwkJCQl7CisJ CQkJCU9ialRyZWUgICAgKnRyZWU7CisKKwkJCQkJdHJlZSA9IHR5cGVkID8KKwkJCQkJCWRlcGFy c2VfQ29sdW1uRGVmX3R5cGVkKHJlbGF0aW9uLCBkcGNvbnRleHQsCisJCQkJCQkJCQkJCQkoQ29s dW1uRGVmICopIGVsdCkgOgorCQkJCQkJZGVwYXJzZV9Db2x1bW5EZWYocmVsYXRpb24sIGRwY29u dGV4dCwKKwkJCQkJCQkJCQkgIGNvbXBvc2l0ZSwgKENvbHVtbkRlZiAqKSBlbHQsCisJCQkJCQkJ CQkJICBmYWxzZSwgTlVMTCk7CisJCQkJCWlmICh0cmVlICE9IE5VTEwpCisJCQkJCQllbGVtZW50 cyA9IGxhcHBlbmQoZWxlbWVudHMsIG5ld19vYmplY3Rfb2JqZWN0KHRyZWUpKTsKKwkJCQl9CisJ CQkJYnJlYWs7CisJCQljYXNlIFRfQ29uc3RyYWludDoKKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6 CisJCQkJZWxvZyhFUlJPUiwgImludmFsaWQgbm9kZSB0eXBlICVkIiwgbm9kZVRhZyhlbHQpKTsK KwkJfQorCX0KKworCXJldHVybiBlbGVtZW50czsKK30KKworLyoKKyAqIFdvcmtob3JzZSB0byBk ZXBhcnNlIGEgQ29sbGVjdGVkQ29tbWFuZC4KKyAqLworY2hhciAqCitkZXBhcnNlX3V0aWxpdHlf Y29tbWFuZChDb2xsZWN0ZWRDb21tYW5kICpjbWQsIGJvb2wgdmVyYm9zZV9tb2RlKQoreworCU92 ZXJyaWRlU2VhcmNoUGF0aCAqb3ZlcnJpZGVQYXRoOworCU1lbW9yeUNvbnRleHQgb2xkY3h0Owor CU1lbW9yeUNvbnRleHQgdG1wY3h0OworCU9ialRyZWUgICAgKnRyZWU7CisJY2hhcgkgICAqY29t bWFuZCA9IE5VTEw7CisJU3RyaW5nSW5mb0RhdGEgc3RyOworCisJLyoKKwkgKiBBbGxvY2F0ZSBl dmVyeXRoaW5nIGRvbmUgYnkgdGhlIGRlcGFyc2luZyByb3V0aW5lcyBpbnRvIGEgdGVtcCBjb250 ZXh0LAorCSAqIHRvIGF2b2lkIGhhdmluZyB0byBzcHJpbmtsZSB0aGVtIHdpdGggbWVtb3J5IGhh bmRsaW5nIGNvZGUsIGJ1dAorCSAqIGFsbG9jYXRlIHRoZSBvdXRwdXQgU3RyaW5nSW5mbyBiZWZv cmUgc3dpdGNoaW5nLgorCSAqLworCWluaXRTdHJpbmdJbmZvKCZzdHIpOworCXRtcGN4dCA9IEFs bG9jU2V0Q29udGV4dENyZWF0ZShDdXJyZW50TWVtb3J5Q29udGV4dCwKKwkJCQkJCQkJICAgImRl cGFyc2UgY3R4IiwKKwkJCQkJCQkJICAgQUxMT0NTRVRfREVGQVVMVF9NSU5TSVpFLAorCQkJCQkJ CQkgICBBTExPQ1NFVF9ERUZBVUxUX0lOSVRTSVpFLAorCQkJCQkJCQkgICBBTExPQ1NFVF9ERUZB VUxUX01BWFNJWkUpOworCW9sZGN4dCA9IE1lbW9yeUNvbnRleHRTd2l0Y2hUbyh0bXBjeHQpOwor CisJLyoKKwkgKiBNYW55IHJvdXRpbmVzIHVuZGVybHlpbmcgdGhpcyBvbmUgd2lsbCBpbnZva2Ug cnVsZXV0aWxzLmMgZnVuY3Rpb25hbGl0eQorCSAqIHRvIG9idGFpbiBkZXBhcnNlZCB2ZXJzaW9u cyBvZiBleHByZXNzaW9ucy4gIEluIHN1Y2ggcmVzdWx0cywgd2Ugd2FudAorCSAqIGFsbCBvYmpl Y3QgbmFtZXMgdG8gYmUgcXVhbGlmaWVkLCBzbyB0aGF0IHJlc3VsdHMgYXJlICJwb3J0YWJsZSIg dG8KKwkgKiBlbnZpcm9ubWVudHMgd2l0aCBkaWZmZXJlbnQgc2VhcmNoX3BhdGggc2V0dGluZ3Mu ICBSYXRoZXIgdGhhbiBpbmplY3QKKwkgKiB3aGF0IHdvdWxkIGJlIHJlcGV0aXRpdmUgY2FsbHMg dG8gb3ZlcnJpZGUgc2VhcmNoIHBhdGggYWxsIG92ZXIgdGhlCisJICogcGxhY2UsIHdlIGRvIGl0 IGNlbnRyYWxseSBoZXJlLgorCSAqLworCW92ZXJyaWRlUGF0aCA9IEdldE92ZXJyaWRlU2VhcmNo UGF0aChDdXJyZW50TWVtb3J5Q29udGV4dCk7CisJb3ZlcnJpZGVQYXRoLT5zY2hlbWFzID0gTklM OworCW92ZXJyaWRlUGF0aC0+YWRkQ2F0YWxvZyA9IGZhbHNlOworCW92ZXJyaWRlUGF0aC0+YWRk VGVtcCA9IHRydWU7CisJUHVzaE92ZXJyaWRlU2VhcmNoUGF0aChvdmVycmlkZVBhdGgpOworCisJ dmVyYm9zZSA9IHZlcmJvc2VfbW9kZTsKKworCXN3aXRjaCAoY21kLT50eXBlKQorCXsKKwkJY2Fz ZSBTQ1RfU2ltcGxlOgorCQkJdHJlZSA9IGRlcGFyc2Vfc2ltcGxlX2NvbW1hbmQoY21kKTsKKwkJ CWJyZWFrOworCQljYXNlIFNDVF9BbHRlclRhYmxlOgorCQkJdHJlZSA9IGRlcGFyc2VfQWx0ZXJS ZWxhdGlvbihjbWQpOworCQkJYnJlYWs7CisJCWNhc2UgU0NUX0dyYW50OgorCQkJdHJlZSA9IGRl cGFyc2VfR3JhbnRTdG10KGNtZCk7CisJCQlicmVhazsKKwkJY2FzZSBTQ1RfQ3JlYXRlVGFibGVB czoKKwkJCXRyZWUgPSBkZXBhcnNlX0NyZWF0ZVRhYmxlQXNTdG10KGNtZCk7CisJCQlicmVhazsK KwkJY2FzZSBTQ1RfQWx0ZXJPcEZhbWlseToKKwkJCXRyZWUgPSBkZXBhcnNlX0FsdGVyT3BGYW1p bHkoY21kKTsKKwkJCWJyZWFrOworCQljYXNlIFNDVF9DcmVhdGVPcENsYXNzOgorCQkJdHJlZSA9 IGRlcGFyc2VfQ3JlYXRlT3BDbGFzc1N0bXQoY21kKTsKKwkJCWJyZWFrOworCQljYXNlIFNDVF9B bHRlckRlZmF1bHRQcml2aWxlZ2VzOgorCQkJdHJlZSA9IGRlcGFyc2VfQWx0ZXJEZWZhdWx0UHJp dmlsZWdlc1N0bXQoY21kKTsKKwkJCWJyZWFrOworCQljYXNlIFNDVF9BbHRlclRTQ29uZmlnOgor CQkJdHJlZSA9IGRlcGFyc2VfQWx0ZXJUU0NvbmZpZ3VyYXRpb25TdG10KGNtZCk7CisJCQlicmVh azsKKwkJZGVmYXVsdDoKKwkJCWVsb2coRVJST1IsICJ1bmV4cGVjdGVkIGRlcGFyc2Ugbm9kZSB0 eXBlICVkIiwgY21kLT50eXBlKTsKKwl9CisKKwlQb3BPdmVycmlkZVNlYXJjaFBhdGgoKTsKKwor CWlmICh0cmVlKQorCXsKKwkJSnNvbmIJICAgKmpzb25iOworCisJCWpzb25iID0gb2JqdHJlZV90 b19qc29uYih0cmVlKTsKKwkJY29tbWFuZCA9IEpzb25iVG9DU3RyaW5nKCZzdHIsICZqc29uYi0+ cm9vdCwgSlNPTkJfRVNUSU1BVEVEX0xFTik7CisJfQorCisJLyoKKwkgKiBDbGVhbiB1cC4gIE5v dGUgdGhhdCBzaW5jZSB3ZSBjcmVhdGVkIHRoZSBTdHJpbmdJbmZvIGluIHRoZSBjYWxsZXIncwor CSAqIGNvbnRleHQsIHRoZSBvdXRwdXQgc3RyaW5nIGlzIG5vdCBkZWxldGVkIGhlcmUuCisJICov CisJTWVtb3J5Q29udGV4dFN3aXRjaFRvKG9sZGN4dCk7CisJTWVtb3J5Q29udGV4dERlbGV0ZSh0 bXBjeHQpOworCisJcmV0dXJuIGNvbW1hbmQ7Cit9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9j b21tYW5kcy9kZGxfanNvbi5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvZGRsX2pzb24uYwpuZXcg ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi5mYmQzYjU0ZTVlCi0tLSAvZGV2L251 bGwKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvZGRsX2pzb24uYwpAQCAtMCwwICsxLDc3NiBA QAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogZGRsX2pzb24uYworICoJICBKU09OIGNvZGUg cmVsYXRlZCB0byBEREwgY29tbWFuZCBkZXBhcnNpbmcKKyAqCisgKiBQb3J0aW9ucyBDb3B5cmln aHQgKGMpIDE5OTYtMjAyMiwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAq IFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5NCwgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBv ZiBDYWxpZm9ybmlhCisgKgorICogSURFTlRJRklDQVRJT04KKyAqCSAgc3JjL2JhY2tlbmQvY29t bWFuZHMvZGRsX2pzb24uYworICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisjaW5jbHVkZSAi cG9zdGdyZXMuaCIKKworI2luY2x1ZGUgImxpYi9zdHJpbmdpbmZvLmgiCisjaW5jbHVkZSAidXRp bHMvYnVpbHRpbnMuaCIKKyNpbmNsdWRlICJ1dGlscy9qc29uYi5oIgorCisKKy8qCisgKiBDb252 ZXJzaW9uIHNwZWNpZmllciB3aGljaCBkZXRlcm1pbmVzIGhvdyB3ZSBleHBhbmQgdGhlIEpTT04g ZWxlbWVudCBpbnRvCisgKiBzdHJpbmcuCisgKi8KK3R5cGVkZWYgZW51bQoreworCVNwZWNUeXBl TmFtZSwKKwlTcGVjT3BlcmF0b3JOYW1lLAorCVNwZWNEb3R0ZWROYW1lLAorCVNwZWNTdHJpbmcs CisJU3BlY051bWJlciwKKwlTcGVjU3RyaW5nTGl0ZXJhbCwKKwlTcGVjSWRlbnRpZmllciwKKwlT cGVjUm9sZQorfSBjb252U3BlY2lmaWVyOworCisvKgorICogQSB0ZXJuYXJ5IHZhbHVlIHRoYXQg cmVwcmVzZW50cyBhIGJvb2xlYW4gdHlwZSBKc29uYlZhbHVlLgorICovCit0eXBlZGVmIGVudW0K K3sKKwl0dl9hYnNlbnQsCisJdHZfdHJ1ZSwKKwl0dl9mYWxzZQorfQkJCWpzb25fdHJpdmFsdWU7 CisKK3N0YXRpYyBib29sIGV4cGFuZF9vbmVfanNvbmJfZWxlbWVudChTdHJpbmdJbmZvIGJ1Ziwg Y2hhciAqcGFyYW0sCisJCQkJCQkJCQkgSnNvbmJWYWx1ZSAqanNvbnZhbCwgY29udlNwZWNpZmll ciBzcGVjaWZpZXIsCisJCQkJCQkJCQkgY29uc3QgY2hhciAqZm10KTsKK3N0YXRpYyB2b2lkIGV4 cGFuZF9qc29uYl9hcnJheShTdHJpbmdJbmZvIGJ1ZiwgY2hhciAqcGFyYW0sCisJCQkJCQkJICAg SnNvbmJWYWx1ZSAqanNvbmFyciwgY2hhciAqYXJyYXlzZXAsCisJCQkJCQkJICAgY29udlNwZWNp ZmllciBzcGVjaWZpZXIsIGNvbnN0IGNoYXIgKmZtdCk7CitzdGF0aWMgdm9pZCBmbXRzdHJfZXJy b3JfY2FsbGJhY2sodm9pZCAqYXJnKTsKK2NoYXIgKmRlcGFyc2VfZGRsX2pzb25fdG9fc3RyaW5n KGNoYXIgKmpzb25iKTsKKworLyoKKyAqIEdpdmVuIGEgSnNvbmJDb250YWluZXIsIGZpbmQgdGhl IEpzb25iVmFsdWUgd2l0aCB0aGUgZ2l2ZW4ga2V5IG5hbWUgaW4gaXQuCisgKiBJZiBpdCdzIG9m IGEgdHlwZSBvdGhlciB0aGFuIGpidkJvb2wsIGFuIGVycm9yIGlzIHJhaXNlZC4gSWYgaXQgZG9l c24ndAorICogZXhpc3QsIHR2X2Fic2VudCBpcyByZXR1cm5lZDsgb3RoZXJ3aXNlIHJldHVybiB0 aGUgYWN0dWFsIGpzb25fdHJpdmFsdWUuCisgKi8KK3N0YXRpYyBqc29uX3RyaXZhbHVlCitmaW5k X2Jvb2xfaW5fanNvbmJjb250YWluZXIoSnNvbmJDb250YWluZXIgKmNvbnRhaW5lciwgY2hhciAq a2V5bmFtZSkKK3sKKwlKc29uYlZhbHVlCWtleTsKKwlKc29uYlZhbHVlICp2YWx1ZTsKKwlqc29u X3RyaXZhbHVlIHJlc3VsdDsKKworCWtleS50eXBlID0gamJ2U3RyaW5nOworCWtleS52YWwuc3Ry aW5nLnZhbCA9IGtleW5hbWU7CisJa2V5LnZhbC5zdHJpbmcubGVuID0gc3RybGVuKGtleW5hbWUp OworCXZhbHVlID0gZmluZEpzb25iVmFsdWVGcm9tQ29udGFpbmVyKGNvbnRhaW5lciwKKwkJCQkJ CQkJCQlKQl9GT0JKRUNULCAma2V5KTsKKwlpZiAodmFsdWUgPT0gTlVMTCkKKwkJcmV0dXJuIHR2 X2Fic2VudDsKKwlpZiAodmFsdWUtPnR5cGUgIT0gamJ2Qm9vbCkKKwkJZXJlcG9ydChFUlJPUiwK KwkJCQkoZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwKKwkJCQkgZXJy bXNnKCJlbGVtZW50IFwiJXNcIiBpcyBub3Qgb2YgdHlwZSBib29sZWFuIiwKKwkJCQkJCWtleW5h bWUpKSk7CisJcmVzdWx0ID0gdmFsdWUtPnZhbC5ib29sZWFuID8gdHZfdHJ1ZSA6IHR2X2ZhbHNl OworCXBmcmVlKHZhbHVlKTsKKworCXJldHVybiByZXN1bHQ7Cit9CisKKy8qCisgKiBHaXZlbiBh IEpzb25iQ29udGFpbmVyLCBmaW5kIHRoZSBKc29uYlZhbHVlIHdpdGggdGhlIGdpdmVuIGtleSBu YW1lIGluIGl0LgorICogSWYgaXQncyBvZiBhIHR5cGUgb3RoZXIgdGhhbiBqYnZTdHJpbmcsIGFu IGVycm9yIGlzIHJhaXNlZC4gIElmIGl0IGRvZXNuJ3QKKyAqIGV4aXN0LCBhbiBlcnJvciBpcyBy YWlzZWQgdW5sZXNzIG1pc3Npbmdfb2s7IG90aGVyd2lzZSByZXR1cm4gTlVMTC4KKyAqCisgKiBJ ZiBpdCBleGlzdHMgYW5kIGlzIGEgc3RyaW5nLCBhIGZyZXNobHkgcGFsbG9jJ2VkIGNvcHkgaXMg cmV0dXJuZWQuCisgKgorICogSWYgKmxlbmd0aCBpcyBub3QgTlVMTCwgaXQgaXMgc2V0IHRvIHRo ZSBsZW5ndGggb2YgdGhlIHN0cmluZy4KKyAqLworc3RhdGljIGNoYXIgKgorZmluZF9zdHJpbmdf aW5fanNvbmJjb250YWluZXIoSnNvbmJDb250YWluZXIgKmNvbnRhaW5lciwgY2hhciAqa2V5bmFt ZSwKKwkJCQkJCQkgIGJvb2wgbWlzc2luZ19vaywgaW50ICpsZW5ndGgpCit7CisJSnNvbmJWYWx1 ZQlrZXk7CisJSnNvbmJWYWx1ZSAqdmFsdWU7CisJY2hhcgkgICAqc3RyOworCisJLyogWFhYIHZl cmlmeSB0aGF0IHRoaXMgaXMgYW4gb2JqZWN0LCBub3QgYW4gYXJyYXkgKi8KKworCWtleS50eXBl ID0gamJ2U3RyaW5nOworCWtleS52YWwuc3RyaW5nLnZhbCA9IGtleW5hbWU7CisJa2V5LnZhbC5z dHJpbmcubGVuID0gc3RybGVuKGtleW5hbWUpOworCXZhbHVlID0gZmluZEpzb25iVmFsdWVGcm9t Q29udGFpbmVyKGNvbnRhaW5lciwKKwkJCQkJCQkJCQlKQl9GT0JKRUNULCAma2V5KTsKKwlpZiAo dmFsdWUgPT0gTlVMTCkKKwl7CisJCWlmIChtaXNzaW5nX29rKQorCQkJcmV0dXJuIE5VTEw7CisJ CWVyZXBvcnQoRVJST1IsCisJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRFUl9W QUxVRSksCisJCQkJIGVycm1zZygibWlzc2luZyBlbGVtZW50IFwiJXNcIiBpbiBKU09OIG9iamVj dCIsIGtleW5hbWUpKSk7CisJfQorCisJaWYgKHZhbHVlLT50eXBlICE9IGpidlN0cmluZykKKwkJ ZXJlcG9ydChFUlJPUiwKKwkJCQkoZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZB TFVFKSwKKwkJCQkgZXJybXNnKCJlbGVtZW50IFwiJXNcIiBpcyBub3Qgb2YgdHlwZSBzdHJpbmci LCBrZXluYW1lKSkpOworCisJc3RyID0gcG5zdHJkdXAodmFsdWUtPnZhbC5zdHJpbmcudmFsLCB2 YWx1ZS0+dmFsLnN0cmluZy5sZW4pOworCWlmIChsZW5ndGgpCisJCSpsZW5ndGggPSB2YWx1ZS0+ dmFsLnN0cmluZy5sZW47CisJcGZyZWUodmFsdWUpOworCXJldHVybiBzdHI7Cit9CisKKyNkZWZp bmUgQURWQU5DRV9QQVJTRV9QT0lOVEVSKHB0cixlbmRfcHRyKSBcCisJZG8geyBcCisJCWlmICgr KyhwdHIpID49IChlbmRfcHRyKSkgXAorCQkJZXJlcG9ydChFUlJPUiwgXAorCQkJCQkoZXJyY29k ZShFUlJDT0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwgXAorCQkJCQkgZXJybXNnKCJ1bnRl cm1pbmF0ZWQgZm9ybWF0IHNwZWNpZmllciIpKSk7IFwKKwl9IHdoaWxlICgwKQorCisvKgorICog UmVjdXJzaXZlIGhlbHBlciBmb3IgZGVwYXJzZV9kZGxfanNvbl90b19zdHJpbmcuCisgKgorICog RmluZCB0aGUgImZtdCIgZWxlbWVudCBpbiB0aGUgZ2l2ZW4gY29udGFpbmVyLCBhbmQgZXhwYW5k IGl0IGludG8gdGhlCisgKiBwcm92aWRlZCBTdHJpbmdJbmZvLgorICovCitzdGF0aWMgdm9pZAor ZXhwYW5kX2ZtdF9yZWN1cnNpdmUoSnNvbmJDb250YWluZXIgKmNvbnRhaW5lciwgU3RyaW5nSW5m byBidWYpCit7CisJSnNvbmJWYWx1ZQlrZXk7CisJSnNvbmJWYWx1ZSAqdmFsdWU7CisJY29uc3Qg Y2hhciAqY3A7CisJY29uc3QgY2hhciAqc3RhcnRfcHRyOworCWNvbnN0IGNoYXIgKmVuZF9wdHI7 CisJaW50CQkJbGVuOworCisJc3RhcnRfcHRyID0gZmluZF9zdHJpbmdfaW5fanNvbmJjb250YWlu ZXIoY29udGFpbmVyLCAiZm10IiwgZmFsc2UsICZsZW4pOworCWVuZF9wdHIgPSBzdGFydF9wdHIg KyBsZW47CisKKwlmb3IgKGNwID0gc3RhcnRfcHRyOyBjcCA8IGVuZF9wdHI7IGNwKyspCisJewor CQljb252U3BlY2lmaWVyIHNwZWNpZmllcjsKKwkJYm9vbAkJaXNfYXJyYXkgPSBmYWxzZTsKKwkJ Y2hhcgkgICAqcGFyYW0gPSBOVUxMOworCQljaGFyCSAgICphcnJheXNlcCA9IE5VTEw7CisKKwkJ aWYgKCpjcCAhPSAnJScpCisJCXsKKwkJCWFwcGVuZFN0cmluZ0luZm9DaGFyTWFjcm8oYnVmLCAq Y3ApOworCQkJY29udGludWU7CisJCX0KKworCisJCUFEVkFOQ0VfUEFSU0VfUE9JTlRFUihjcCwg ZW5kX3B0cik7CisKKwkJLyogRWFzeSBjYXNlOiAlJSBvdXRwdXRzIGEgc2luZ2xlICUgKi8KKwkJ aWYgKCpjcCA9PSAnJScpCisJCXsKKwkJCWFwcGVuZFN0cmluZ0luZm9DaGFyTWFjcm8oYnVmLCAq Y3ApOworCQkJY29udGludWU7CisJCX0KKworCQkvKgorCQkgKiBTY2FuIHRoZSBtYW5kYXRvcnkg ZWxlbWVudCBuYW1lLiAgQWxsb3cgZm9yIGFuIGFycmF5IHNlcGFyYXRvcgorCQkgKiAod2hpY2gg bWF5IGJlIHRoZSBlbXB0eSBzdHJpbmcpIHRvIGJlIHNwZWNpZmllZCBhZnRlciBhIGNvbG9uLgor CQkgKi8KKwkJaWYgKCpjcCA9PSAneycpCisJCXsKKwkJCVN0cmluZ0luZm9EYXRhIHBhcmJ1ZjsK KwkJCVN0cmluZ0luZm9EYXRhIGFycmF5c2VwYnVmOworCQkJU3RyaW5nSW5mbwlhcHBlbmRUbzsK KworCQkJaW5pdFN0cmluZ0luZm8oJnBhcmJ1Zik7CisJCQlhcHBlbmRUbyA9ICZwYXJidWY7CisK KwkJCUFEVkFOQ0VfUEFSU0VfUE9JTlRFUihjcCwgZW5kX3B0cik7CisJCQlmb3IgKDsgY3AgPCBl bmRfcHRyOykKKwkJCXsKKwkJCQlpZiAoKmNwID09ICc6JykKKwkJCQl7CisJCQkJCS8qCisJCQkJ CSAqIEZvdW5kIGFycmF5IHNlcGFyYXRvciBkZWxpbWl0ZXI7IGVsZW1lbnQgbmFtZSBpcyBub3cK KwkJCQkJICogY29tcGxldGUsIHN0YXJ0IGZpbGxpbmcgdGhlIHNlcGFyYXRvci4KKwkJCQkJICov CisJCQkJCWluaXRTdHJpbmdJbmZvKCZhcnJheXNlcGJ1Zik7CisJCQkJCWFwcGVuZFRvID0gJmFy cmF5c2VwYnVmOworCQkJCQlpc19hcnJheSA9IHRydWU7CisJCQkJCUFEVkFOQ0VfUEFSU0VfUE9J TlRFUihjcCwgZW5kX3B0cik7CisJCQkJCWNvbnRpbnVlOworCQkJCX0KKworCQkJCWlmICgqY3Ag PT0gJ30nKQorCQkJCXsKKwkJCQkJQURWQU5DRV9QQVJTRV9QT0lOVEVSKGNwLCBlbmRfcHRyKTsK KwkJCQkJYnJlYWs7CisJCQkJfQorCQkJCWFwcGVuZFN0cmluZ0luZm9DaGFyTWFjcm8oYXBwZW5k VG8sICpjcCk7CisJCQkJQURWQU5DRV9QQVJTRV9QT0lOVEVSKGNwLCBlbmRfcHRyKTsKKwkJCX0K KwkJCXBhcmFtID0gcGFyYnVmLmRhdGE7CisJCQlpZiAoaXNfYXJyYXkpCisJCQkJYXJyYXlzZXAg PSBhcnJheXNlcGJ1Zi5kYXRhOworCQl9CisJCWlmIChwYXJhbSA9PSBOVUxMKQorCQkJZXJlcG9y dChFUlJPUiwKKwkJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRFUl9WQUxVRSks CisJCQkJCSBlcnJtc2coIm1pc3NpbmcgY29udmVyc2lvbiBuYW1lIGluIGNvbnZlcnNpb24gc3Bl Y2lmaWVyIikpKTsKKworCQlzd2l0Y2ggKCpjcCkKKwkJeworCQkJY2FzZSAnSSc6CisJCQkJc3Bl Y2lmaWVyID0gU3BlY0lkZW50aWZpZXI7CisJCQkJYnJlYWs7CisJCQljYXNlICdEJzoKKwkJCQlz cGVjaWZpZXIgPSBTcGVjRG90dGVkTmFtZTsKKwkJCQlicmVhazsKKwkJCWNhc2UgJ3MnOgorCQkJ CXNwZWNpZmllciA9IFNwZWNTdHJpbmc7CisJCQkJYnJlYWs7CisJCQljYXNlICdMJzoKKwkJCQlz cGVjaWZpZXIgPSBTcGVjU3RyaW5nTGl0ZXJhbDsKKwkJCQlicmVhazsKKwkJCWNhc2UgJ1QnOgor CQkJCXNwZWNpZmllciA9IFNwZWNUeXBlTmFtZTsKKwkJCQlicmVhazsKKwkJCWNhc2UgJ08nOgor CQkJCXNwZWNpZmllciA9IFNwZWNPcGVyYXRvck5hbWU7CisJCQkJYnJlYWs7CisJCQljYXNlICdu JzoKKwkJCQlzcGVjaWZpZXIgPSBTcGVjTnVtYmVyOworCQkJCWJyZWFrOworCQkJY2FzZSAnUic6 CisJCQkJc3BlY2lmaWVyID0gU3BlY1JvbGU7CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJ CWVyZXBvcnQoRVJST1IsCisJCQkJCQkoZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1FVEVS X1ZBTFVFKSwKKwkJCQkJCSBlcnJtc2coImludmFsaWQgY29udmVyc2lvbiBzcGVjaWZpZXIgXCIl Y1wiIiwgKmNwKSkpOworCQl9CisKKwkJLyoKKwkJICogT2J0YWluIHRoZSBlbGVtZW50IHRvIGJl IGV4cGFuZGVkLgorCQkgKi8KKwkJa2V5LnR5cGUgPSBqYnZTdHJpbmc7CisJCWtleS52YWwuc3Ry aW5nLnZhbCA9IHBhcmFtOworCQlrZXkudmFsLnN0cmluZy5sZW4gPSBzdHJsZW4ocGFyYW0pOwor CisJCXZhbHVlID0gZmluZEpzb25iVmFsdWVGcm9tQ29udGFpbmVyKGNvbnRhaW5lciwgSkJfRk9C SkVDVCwgJmtleSk7CisKKwkJLyoKKwkJICogRXhwYW5kIHRoZSBkYXRhIChwb3NzaWJseSBhbiBh cnJheSkgaW50byB0aGUgb3V0cHV0IFN0cmluZ0luZm8uCisJCSAqLworCQlpZiAoaXNfYXJyYXkp CisJCQlleHBhbmRfanNvbmJfYXJyYXkoYnVmLCBwYXJhbSwgdmFsdWUsIGFycmF5c2VwLCBzcGVj aWZpZXIsIHN0YXJ0X3B0cik7CisJCWVsc2UKKwkJCWV4cGFuZF9vbmVfanNvbmJfZWxlbWVudChi dWYsIHBhcmFtLCB2YWx1ZSwgc3BlY2lmaWVyLCBzdGFydF9wdHIpOworCX0KK30KKworLyoKKyAq IEV4cGFuZCBhIGpzb24gdmFsdWUgYXMgYSBxdW90ZWQgaWRlbnRpZmllci4gIFRoZSB2YWx1ZSBt dXN0IGJlIG9mIHR5cGUgc3RyaW5nLgorICovCitzdGF0aWMgdm9pZAorZXhwYW5kX2pzb252YWxf aWRlbnRpZmllcihTdHJpbmdJbmZvIGJ1ZiwgSnNvbmJWYWx1ZSAqanNvbnZhbCkKK3sKKwljaGFy CSAgICpzdHI7CisKKwlBc3NlcnQoanNvbnZhbC0+dHlwZSA9PSBqYnZTdHJpbmcpOworCisJc3Ry ID0gcG5zdHJkdXAoanNvbnZhbC0+dmFsLnN0cmluZy52YWwsIGpzb252YWwtPnZhbC5zdHJpbmcu bGVuKTsKKwlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKGJ1ZiwgcXVvdGVfaWRlbnRpZmllcihzdHIp KTsKKwlwZnJlZShzdHIpOworfQorCisvKgorICogRXhwYW5kIGEganNvbiB2YWx1ZSBhcyBhIGRv dC1zZXBhcmF0ZWQtbmFtZS4gIFRoZSB2YWx1ZSBtdXN0IGJlIG9mIHR5cGUKKyAqIGJpbmFyeSBh bmQgbWF5IGNvbnRhaW4gZWxlbWVudHMgInNjaGVtYW5hbWUiIChvcHRpb25hbCksICJvYmpuYW1l IgorICogKG1hbmRhdG9yeSksICJhdHRybmFtZSIgKG9wdGlvbmFsKS4gIERvdWJsZSBxdW90ZXMg YXJlIGFkZGVkIHRvIGVhY2ggZWxlbWVudAorICogYXMgbmVjZXNzYXJ5LCBhbmQgZG90IHNlcGFy YXRvcnMgd2hlcmUgbmVlZGVkLgorICoKKyAqIE9uZSBkYXkgd2UgbWlnaHQgbmVlZCBhICJjYXRh bG9nIiBlbGVtZW50IGFzIHdlbGwsIGJ1dCBubyBjdXJyZW50IHVzZSBjYXNlCisgKiBuZWVkcyB0 aGF0LgorICovCitzdGF0aWMgdm9pZAorZXhwYW5kX2pzb252YWxfZG90dGVkbmFtZShTdHJpbmdJ bmZvIGJ1ZiwgSnNvbmJWYWx1ZSAqanNvbnZhbCkKK3sKKwljaGFyCSAgICpzdHI7CisKKwlBc3Nl cnQoanNvbnZhbC0+dHlwZSA9PSBqYnZCaW5hcnkpOworCisJc3RyID0gZmluZF9zdHJpbmdfaW5f anNvbmJjb250YWluZXIoanNvbnZhbC0+dmFsLmJpbmFyeS5kYXRhLAorCQkJCQkJCQkJCSJzY2hl bWFuYW1lIiwgdHJ1ZSwgTlVMTCk7CisJaWYgKHN0cikKKwl7CisJCWFwcGVuZFN0cmluZ0luZm8o YnVmLCAiJXMuIiwgcXVvdGVfaWRlbnRpZmllcihzdHIpKTsKKwkJcGZyZWUoc3RyKTsKKwl9CisK KwlzdHIgPSBmaW5kX3N0cmluZ19pbl9qc29uYmNvbnRhaW5lcihqc29udmFsLT52YWwuYmluYXJ5 LmRhdGEsCisJCQkJCQkJCQkJIm9iam5hbWUiLCBmYWxzZSwgTlVMTCk7CisJYXBwZW5kU3RyaW5n SW5mbyhidWYsICIlcyIsIHF1b3RlX2lkZW50aWZpZXIoc3RyKSk7CisJcGZyZWUoc3RyKTsKKwor CXN0ciA9IGZpbmRfc3RyaW5nX2luX2pzb25iY29udGFpbmVyKGpzb252YWwtPnZhbC5iaW5hcnku ZGF0YSwKKwkJCQkJCQkJCQkiYXR0cm5hbWUiLCB0cnVlLCBOVUxMKTsKKwlpZiAoc3RyKQorCXsK KwkJYXBwZW5kU3RyaW5nSW5mbyhidWYsICIuJXMiLCBxdW90ZV9pZGVudGlmaWVyKHN0cikpOwor CQlwZnJlZShzdHIpOworCX0KK30KKworLyoKKyAqIEV4cGFuZCBhIEpTT04gdmFsdWUgYXMgYSB0 eXBlIG5hbWUuCisgKi8KK3N0YXRpYyB2b2lkCitleHBhbmRfanNvbnZhbF90eXBlbmFtZShTdHJp bmdJbmZvIGJ1ZiwgSnNvbmJWYWx1ZSAqanNvbnZhbCkKK3sKKwljaGFyCSAgICpzY2hlbWEgPSBO VUxMOworCWNoYXIJICAgKnR5cGVuYW1lOworCWNoYXIJICAgKnR5cG1vZHN0cjsKKwlqc29uX3Ry aXZhbHVlIGlzX2FycmF5OworCWNoYXIJICAgKmFycmF5X2RlY29yOworCisJLyoKKwkgKiBXZSBv bWl0IHNjaGVtYS1xdWFsaWZ5aW5nIHRoZSBvdXRwdXQgbmFtZSBpZiB0aGUgc2NoZW1hIGVsZW1l bnQgaXMKKwkgKiBlaXRoZXIgdGhlIGVtcHR5IHN0cmluZyBvciBOVUxMOyB0aGUgZGlmZmVyZW5j ZSBiZXR3ZWVuIHRob3NlIHR3byBjYXNlcworCSAqIGlzIHRoYXQgaW4gdGhlIGxhdHRlciB3ZSBx dW90ZSB0aGUgdHlwZSBuYW1lLCBpbiB0aGUgZm9ybWVyIHdlIGRvbid0LgorCSAqIFRoaXMgYWxs b3dzIGZvciB0eXBlcyB3aXRoIHNwZWNpYWwgdHlwbW9kIG5lZWRzLCBzdWNoIGFzIGludGVydmFs IGFuZAorCSAqIHRpbWVzdGFtcCAoc2VlIGZvcm1hdF90eXBlX2RldGFpbGVkKSwgd2hpbGUgYXQg dGhlIHNhbWUgdGltZSBhbGxvd2luZworCSAqIGZvciB0aGUgc2NoZW1hIG5hbWUgdG8gYmUgb21p dHRlZCBmcm9tIHR5cGUgbmFtZXMgdGhhdCByZXF1aXJlIHF1b3RlcworCSAqIGJ1dCBhcmUgdG8g YmUgb2J0YWluZWQgZnJvbSBhIHVzZXIgc2NoZW1hLgorCSAqLworCisJc2NoZW1hID0gZmluZF9z dHJpbmdfaW5fanNvbmJjb250YWluZXIoanNvbnZhbC0+dmFsLmJpbmFyeS5kYXRhLAorCQkJCQkJ CQkJCSAgICJzY2hlbWFuYW1lIiwgdHJ1ZSwgTlVMTCk7CisJdHlwZW5hbWUgPSBmaW5kX3N0cmlu Z19pbl9qc29uYmNvbnRhaW5lcihqc29udmFsLT52YWwuYmluYXJ5LmRhdGEsCisJCQkJCQkJCQkJ CSAidHlwZW5hbWUiLCBmYWxzZSwgTlVMTCk7CisJdHlwbW9kc3RyID0gZmluZF9zdHJpbmdfaW5f anNvbmJjb250YWluZXIoanNvbnZhbC0+dmFsLmJpbmFyeS5kYXRhLAorCQkJCQkJCQkJCQkgICJ0 eXBtb2QiLCB0cnVlLCBOVUxMKTsKKwlpc19hcnJheSA9IGZpbmRfYm9vbF9pbl9qc29uYmNvbnRh aW5lcihqc29udmFsLT52YWwuYmluYXJ5LmRhdGEsCisJCQkJCQkJCQkJICAgInR5cGFycmF5Iik7 CisJc3dpdGNoIChpc19hcnJheSkKKwl7CisJCWNhc2UgdHZfdHJ1ZToKKwkJCWFycmF5X2RlY29y ID0gIltdIjsKKwkJCWJyZWFrOworCisJCWNhc2UgdHZfZmFsc2U6CisJCQlhcnJheV9kZWNvciA9 ICIiOworCQkJYnJlYWs7CisKKwkJY2FzZSB0dl9hYnNlbnQ6CisJCWRlZmF1bHQ6CisJCQllcmVw b3J0KEVSUk9SLAorCQkJCQkoZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVF KSwKKwkJCQkJIGVycm1zZygibWlzc2luZyB0eXBhcnJheSBlbGVtZW50IikpKTsKKwl9CisKKwlp ZiAoc2NoZW1hID09IE5VTEwpCisJCWFwcGVuZFN0cmluZ0luZm8oYnVmLCAiJXMiLCBxdW90ZV9p ZGVudGlmaWVyKHR5cGVuYW1lKSk7CisJZWxzZSBpZiAoc2NoZW1hWzBdID09ICdcMCcpCisJCWFw cGVuZFN0cmluZ0luZm8oYnVmLCAiJXMiLCB0eXBlbmFtZSk7CS8qIFNwZWNpYWwgdHlwbW9kIG5l ZWRzICovCisJZWxzZQorCQlhcHBlbmRTdHJpbmdJbmZvKGJ1ZiwgIiVzLiVzIiwgcXVvdGVfaWRl bnRpZmllcihzY2hlbWEpLAorCQkJCQkJIHF1b3RlX2lkZW50aWZpZXIodHlwZW5hbWUpKTsKKwor CWFwcGVuZFN0cmluZ0luZm8oYnVmLCAiJXMlcyIsIHR5cG1vZHN0ciA/IHR5cG1vZHN0ciA6ICIi LCBhcnJheV9kZWNvcik7CisJcGZyZWUoc2NoZW1hKTsKKwlwZnJlZSh0eXBlbmFtZSk7CisJcGZy ZWUodHlwbW9kc3RyKTsKK30KKworLyoKKyAqIEV4cGFuZCBhIEpTT04gdmFsdWUgYXMgYW4gb3Bl cmF0b3IgbmFtZS4KKyAqLworc3RhdGljIHZvaWQKK2V4cGFuZF9qc29udmFsX29wZXJhdG9yKFN0 cmluZ0luZm8gYnVmLCBKc29uYlZhbHVlICpqc29udmFsKQoreworCWNoYXIJICAgKnN0cjsKKwor CXN0ciA9IGZpbmRfc3RyaW5nX2luX2pzb25iY29udGFpbmVyKGpzb252YWwtPnZhbC5iaW5hcnku ZGF0YSwKKwkJCQkJCQkJCQkic2NoZW1hbmFtZSIsIHRydWUsIE5VTEwpOworCS8qIFNjaGVtYSBt aWdodCBiZSBOVUxMIG9yIGVtcHR5ICovCisJaWYgKHN0ciAhPSBOVUxMICYmIHN0clswXSAhPSAn XDAnKQorCXsKKwkJYXBwZW5kU3RyaW5nSW5mbyhidWYsICIlcy4iLCBxdW90ZV9pZGVudGlmaWVy KHN0cikpOworCQlwZnJlZShzdHIpOworCX0KKworCXN0ciA9IGZpbmRfc3RyaW5nX2luX2pzb25i Y29udGFpbmVyKGpzb252YWwtPnZhbC5iaW5hcnkuZGF0YSwKKwkJCQkJCQkJCQkib2JqbmFtZSIs IGZhbHNlLCBOVUxMKTsKKworCWlmIChzdHIpCisJeworCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5n KGJ1Ziwgc3RyKTsKKwkJcGZyZWUoc3RyKTsKKwl9Cit9CisKKy8qCisgKiBFeHBhbmQgYSBKU09O IHZhbHVlIGFzIGEgc3RyaW5nLiAgVGhlIHZhbHVlIG11c3QgYmUgb2YgdHlwZSBzdHJpbmcgb3Ig b2YKKyAqIHR5cGUgQmluYXJ5LiAgSW4gdGhlIGxhdHRlciBjYXNlLCBpdCBtdXN0IGNvbnRhaW4g YSAiZm10IiBlbGVtZW50IHdoaWNoIHdpbGwKKyAqIGJlIHJlY3Vyc2l2ZWx5IGV4cGFuZGVkOyBh bHNvLCBpZiB0aGUgb2JqZWN0IGNvbnRhaW5zIGFuIGVsZW1lbnQgInByZXNlbnQiCisgKiBhbmQg aXQgaXMgc2V0IHRvIGZhbHNlLCB0aGUgZXhwYW5zaW9uIGlzIHRoZSBlbXB0eSBzdHJpbmcuCisg KgorICogUmV0dXJucyBmYWxzZSBpZiBubyBhY3R1YWwgZXhwYW5zaW9uIHdhcyBtYWRlIGR1ZSB0 byB0aGUgInByZXNlbnQiIGZsYWcKKyAqIGJlaW5nIHNldCB0byAiZmFsc2UiLgorICoKKyAqIFRo ZSBjYWxsZXIgaXMgcmVzcG9uc2libGUgdG8gY2hlY2sganNvbnZhbCBpcyBvZiB0eXBlIGpidlN0 cmluZyBvciBqYnZCaW5hcnkuCisgKi8KK3N0YXRpYyBib29sCitleHBhbmRfanNvbnZhbF9zdHJp bmcoU3RyaW5nSW5mbyBidWYsIEpzb25iVmFsdWUgKmpzb252YWwpCit7CisJaWYgKGpzb252YWwt PnR5cGUgPT0gamJ2U3RyaW5nKQorCXsKKwkJYXBwZW5kQmluYXJ5U3RyaW5nSW5mbyhidWYsIGpz b252YWwtPnZhbC5zdHJpbmcudmFsLAorCQkJCQkJCSAgIGpzb252YWwtPnZhbC5zdHJpbmcubGVu KTsKKwl9CisJZWxzZSBpZiAoanNvbnZhbC0+dHlwZSA9PSBqYnZCaW5hcnkpCisJeworCQlqc29u X3RyaXZhbHVlIHByZXNlbnQ7CisKKwkJcHJlc2VudCA9IGZpbmRfYm9vbF9pbl9qc29uYmNvbnRh aW5lcihqc29udmFsLT52YWwuYmluYXJ5LmRhdGEsCisJCQkJCQkJCQkJCSAgInByZXNlbnQiKTsK KworCQkvKgorCQkgKiBJZiAicHJlc2VudCIgaXMgc2V0IHRvIGZhbHNlLCB0aGlzIGVsZW1lbnQg ZXhwYW5kcyB0byBlbXB0eTsKKwkJICogb3RoZXJ3aXNlIChlaXRoZXIgdHJ1ZSBvciBhYnNlbnQp LCBmYWxsIHRocm91Z2ggdG8gZXhwYW5kICJmbXQiLgorCQkgKi8KKwkJaWYgKHByZXNlbnQgPT0g dHZfZmFsc2UpCisJCQlyZXR1cm4gZmFsc2U7CisKKwkJZXhwYW5kX2ZtdF9yZWN1cnNpdmUoanNv bnZhbC0+dmFsLmJpbmFyeS5kYXRhLCBidWYpOworCX0KKwllbHNlCisJCXJldHVybiBmYWxzZTsK KworCXJldHVybiB0cnVlOworfQorCisvKgorICogRXhwYW5kIGEgSlNPTiB2YWx1ZSBhcyBhIHN0 cmluZyBsaXRlcmFsLgorICovCitzdGF0aWMgdm9pZAorZXhwYW5kX2pzb252YWxfc3RybGl0KFN0 cmluZ0luZm8gYnVmLCBKc29uYlZhbHVlICpqc29udmFsKQoreworCWNoYXIJICAgKnN0cjsKKwlT dHJpbmdJbmZvRGF0YSBkcWRlbGltOworCXN0YXRpYyBjb25zdCBjaGFyIGRxc3VmZml4ZXNbXSA9 ICJfWFlaWllYXyI7CisJaW50CQkJZHFuZXh0Y2hhciA9IDA7CisKKwlzdHIgPSBwbnN0cmR1cChq c29udmFsLT52YWwuc3RyaW5nLnZhbCwganNvbnZhbC0+dmFsLnN0cmluZy5sZW4pOworCisJLyog RWFzeSBjYXNlOiBpZiB0aGVyZSBhcmUgbm8gJyBhbmQgbm8gXCwganVzdCB1c2UgYSBzaW5nbGUg cXVvdGUgKi8KKwlpZiAoc3RycGJyayhzdHIsICJcJ1xcIikgPT0gTlVMTCkKKwl7CisJCWFwcGVu ZFN0cmluZ0luZm8oYnVmLCAiJyVzJyIsIHN0cik7CisJCXBmcmVlKHN0cik7CisJCXJldHVybjsK Kwl9CisKKwkvKiBPdGhlcndpc2UgbmVlZCB0byBmaW5kIGEgdXNlZnVsIGRvbGxhci1xdW90ZSBk ZWxpbWl0ZXIgKi8KKwlpbml0U3RyaW5nSW5mbygmZHFkZWxpbSk7CisJYXBwZW5kU3RyaW5nSW5m b1N0cmluZygmZHFkZWxpbSwgIiQiKTsKKwl3aGlsZSAoc3Ryc3RyKHN0ciwgZHFkZWxpbS5kYXRh KSAhPSBOVUxMKQorCXsKKwkJYXBwZW5kU3RyaW5nSW5mb0NoYXIoJmRxZGVsaW0sIGRxc3VmZml4 ZXNbZHFuZXh0Y2hhcisrXSk7CisJCWRxbmV4dGNoYXIgPSBkcW5leHRjaGFyICUgKHNpemVvZihk cXN1ZmZpeGVzKSAtIDEpOworCX0KKwkvKiBBZGQgdHJhaWxpbmcgJCAqLworCWFwcGVuZFN0cmlu Z0luZm9DaGFyKCZkcWRlbGltLCAnJCcpOworCisJLyogQW5kIGZpbmFsbHkgcHJvZHVjZSB0aGUg cXVvdGVkIGxpdGVyYWwgaW50byB0aGUgb3V0cHV0IFN0cmluZ0luZm8gKi8KKwlhcHBlbmRTdHJp bmdJbmZvKGJ1ZiwgIiVzJXMlcyIsIGRxZGVsaW0uZGF0YSwgc3RyLCBkcWRlbGltLmRhdGEpOwor CXBmcmVlKGRxZGVsaW0uZGF0YSk7CisJcGZyZWUoc3RyKTsKK30KKworLyoKKyAqIEV4cGFuZCBh IEpTT04gdmFsdWUgYXMgYW4gaW50ZWdlciBxdWFudGl0eS4KKyAqLworc3RhdGljIHZvaWQKK2V4 cGFuZF9qc29udmFsX251bWJlcihTdHJpbmdJbmZvIGJ1ZiwgSnNvbmJWYWx1ZSAqanNvbnZhbCkK K3sKKwljaGFyCSAgICpzdHJkYXR1bTsKKworCXN0cmRhdHVtID0gRGF0dW1HZXRDU3RyaW5nKERp cmVjdEZ1bmN0aW9uQ2FsbDEobnVtZXJpY19vdXQsCisJCQkJCQkJCQkJCQkgICBOdW1lcmljR2V0 RGF0dW0oanNvbnZhbC0+dmFsLm51bWVyaWMpKSk7CisJYXBwZW5kU3RyaW5nSW5mb1N0cmluZyhi dWYsIHN0cmRhdHVtKTsKKwlwZnJlZShzdHJkYXR1bSk7Cit9CisKKy8qCisgKiBFeHBhbmQgYSBK U09OIHZhbHVlIGFzIGEgcm9sZSBuYW1lLiAgSWYgdGhlIGlzX3B1YmxpYyBlbGVtZW50IGlzIHNl dCB0bworICogdHJ1ZSwgUFVCTElDIGlzIGV4cGFuZGVkIChubyBxdW90ZXMpOyBvdGhlcndpc2Us IGV4cGFuZCB0aGUgZ2l2ZW4gcm9sZSBuYW1lLAorICogcXVvdGluZyBhcyBhbiBpZGVudGlmaWVy LgorICovCitzdGF0aWMgdm9pZAorZXhwYW5kX2pzb252YWxfcm9sZShTdHJpbmdJbmZvIGJ1Ziwg SnNvbmJWYWx1ZSAqanNvbnZhbCkKK3sKKwlqc29uX3RyaXZhbHVlIGlzX3B1YmxpYzsKKworCWlz X3B1YmxpYyA9IGZpbmRfYm9vbF9pbl9qc29uYmNvbnRhaW5lcihqc29udmFsLT52YWwuYmluYXJ5 LmRhdGEsCisJCQkJCQkJCQkJCSJpc19wdWJsaWMiKTsKKwlpZiAoaXNfcHVibGljID09IHR2X3Ry dWUpCisJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoYnVmLCAiUFVCTElDIik7CisJZWxzZQorCXsK KwkJY2hhcgkgICAqcm9sZW5hbWU7CisKKwkJcm9sZW5hbWUgPSBmaW5kX3N0cmluZ19pbl9qc29u YmNvbnRhaW5lcihqc29udmFsLT52YWwuYmluYXJ5LmRhdGEsCisJCQkJCQkJCQkJCQkgInJvbGVu YW1lIiwgZmFsc2UsIE5VTEwpOworCQlpZiAocm9sZW5hbWUpCisJCXsKKwkJCWFwcGVuZFN0cmlu Z0luZm9TdHJpbmcoYnVmLCBxdW90ZV9pZGVudGlmaWVyKHJvbGVuYW1lKSk7CisJCQlwZnJlZShy b2xlbmFtZSk7CisJCX0KKwl9Cit9CisKKy8qCisgKiBFeHBhbmQgb25lIEpTT04gZWxlbWVudCBp bnRvIHRoZSBvdXRwdXQgU3RyaW5nSW5mbyBhY2NvcmRpbmcgdG8gdGhlCisgKiBjb252ZXJzaW9u IHNwZWNpZmllci4gIFRoZSBlbGVtZW50IHR5cGUgaXMgdmFsaWRhdGVkLCBhbmQgYW4gZXJyb3Ig aXMgcmFpc2VkCisgKiBpZiBpdCBkb2Vzbid0IG1hdGNoIHdoYXQgd2UgZXhwZWN0IGZvciB0aGUg Y29udmVyc2lvbiBzcGVjaWZpZXIuCisgKgorICogUmV0dXJucyBmYWxzZSBpZiBubyBhY3R1YWwg ZXhwYW5zaW9uIHdhcyBtYWRlIChkdWUgdG8gdGhlICJwcmVzZW50IiBmbGFnCisgKiBiZWluZyBz ZXQgdG8gImZhbHNlIiBpbiBmb3JtYXR0ZWQgc3RyaW5nIGV4cGFuc2lvbikuCisgKi8KK3N0YXRp YyBib29sCitleHBhbmRfb25lX2pzb25iX2VsZW1lbnQoU3RyaW5nSW5mbyBidWYsIGNoYXIgKnBh cmFtLCBKc29uYlZhbHVlICpqc29udmFsLAorCQkJCQkJIGNvbnZTcGVjaWZpZXIgc3BlY2lmaWVy LCBjb25zdCBjaGFyICpmbXQpCit7CisJYm9vbAkJcmVzdWx0ID0gdHJ1ZTsKKwlFcnJvckNvbnRl eHRDYWxsYmFjayBzcWxlcnJjb250ZXh0OworCisJLyogSWYgd2Ugd2VyZSBnaXZlbiBhIGZvcm1h dCBzdHJpbmcsIHNldHVwIGFuIGVyZXBvcnQoKSBjb250ZXh0IGNhbGxiYWNrICovCisJaWYgKGZt dCkKKwl7CisJCXNxbGVycmNvbnRleHQuY2FsbGJhY2sgPSBmbXRzdHJfZXJyb3JfY2FsbGJhY2s7 CisJCXNxbGVycmNvbnRleHQuYXJnID0gKHZvaWQgKikgZm10OworCQlzcWxlcnJjb250ZXh0LnBy ZXZpb3VzID0gZXJyb3JfY29udGV4dF9zdGFjazsKKwkJZXJyb3JfY29udGV4dF9zdGFjayA9ICZz cWxlcnJjb250ZXh0OworCX0KKworCWlmICghanNvbnZhbCkKKwkJZXJlcG9ydChFUlJPUiwKKwkJ CQkoZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwKKwkJCQkgZXJybXNn KCJlbGVtZW50IFwiJXNcIiBub3QgZm91bmQiLCBwYXJhbSkpKTsKKworCXN3aXRjaCAoc3BlY2lm aWVyKQorCXsKKwkJY2FzZSBTcGVjSWRlbnRpZmllcjoKKwkJCWlmIChqc29udmFsLT50eXBlICE9 IGpidlN0cmluZykKKwkJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkJKGVycmNvZGUoRVJSQ09ERV9J TlZBTElEX1BBUkFNRVRFUl9WQUxVRSksCisJCQkJCQkgZXJybXNnKCJleHBlY3RlZCBKU09OIHN0 cmluZyBmb3IgJSVJIGVsZW1lbnQgXCIlc1wiLCBnb3QgJWQiLAorCQkJCQkJCQlwYXJhbSwganNv bnZhbC0+dHlwZSkpKTsKKwkJCWV4cGFuZF9qc29udmFsX2lkZW50aWZpZXIoYnVmLCBqc29udmFs KTsKKwkJCWJyZWFrOworCisJCWNhc2UgU3BlY0RvdHRlZE5hbWU6CisJCQlpZiAoanNvbnZhbC0+ dHlwZSAhPSBqYnZCaW5hcnkpCisJCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJCShlcnJjb2RlKEVS UkNPREVfSU5WQUxJRF9QQVJBTUVURVJfVkFMVUUpLAorCQkJCQkJIGVycm1zZygiZXhwZWN0ZWQg SlNPTiBzdHJ1Y3QgZm9yICUlRCBlbGVtZW50IFwiJXNcIiwgZ290ICVkIiwKKwkJCQkJCQkJcGFy YW0sIGpzb252YWwtPnR5cGUpKSk7CisJCQlleHBhbmRfanNvbnZhbF9kb3R0ZWRuYW1lKGJ1Ziwg anNvbnZhbCk7CisJCQlicmVhazsKKworCQljYXNlIFNwZWNTdHJpbmc6CisJCQlpZiAoanNvbnZh bC0+dHlwZSAhPSBqYnZTdHJpbmcgJiYKKwkJCQlqc29udmFsLT50eXBlICE9IGpidkJpbmFyeSkK KwkJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFN RVRFUl9WQUxVRSksCisJCQkJCQkgZXJybXNnKCJleHBlY3RlZCBKU09OIHN0cmluZyBvciBzdHJ1 Y3QgZm9yICUlcyBlbGVtZW50IFwiJXNcIiwgZ290ICVkIiwKKwkJCQkJCQkJcGFyYW0sIGpzb252 YWwtPnR5cGUpKSk7CisJCQlyZXN1bHQgPSBleHBhbmRfanNvbnZhbF9zdHJpbmcoYnVmLCBqc29u dmFsKTsKKwkJCWJyZWFrOworCisJCWNhc2UgU3BlY1N0cmluZ0xpdGVyYWw6CisJCQlpZiAoanNv bnZhbC0+dHlwZSAhPSBqYnZTdHJpbmcpCisJCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJCShlcnJj b2RlKEVSUkNPREVfSU5WQUxJRF9QQVJBTUVURVJfVkFMVUUpLAorCQkJCQkJIGVycm1zZygiZXhw ZWN0ZWQgSlNPTiBzdHJpbmcgZm9yICUlTCBlbGVtZW50IFwiJXNcIiwgZ290ICVkIiwKKwkJCQkJ CQkJcGFyYW0sIGpzb252YWwtPnR5cGUpKSk7CisJCQlleHBhbmRfanNvbnZhbF9zdHJsaXQoYnVm LCBqc29udmFsKTsKKwkJCWJyZWFrOworCisJCWNhc2UgU3BlY1R5cGVOYW1lOgorCQkJaWYgKGpz b252YWwtPnR5cGUgIT0gamJ2QmluYXJ5KQorCQkJCWVyZXBvcnQoRVJST1IsCisJCQkJCQkoZXJy Y29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwKKwkJCQkJCSBlcnJtc2coImV4 cGVjdGVkIEpTT04gc3RydWN0IGZvciAlJVQgZWxlbWVudCBcIiVzXCIsIGdvdCAlZCIsCisJCQkJ CQkJCXBhcmFtLCBqc29udmFsLT50eXBlKSkpOworCQkJZXhwYW5kX2pzb252YWxfdHlwZW5hbWUo YnVmLCBqc29udmFsKTsKKwkJCWJyZWFrOworCisJCWNhc2UgU3BlY09wZXJhdG9yTmFtZToKKwkJ CWlmIChqc29udmFsLT50eXBlICE9IGpidkJpbmFyeSkKKwkJCQllcmVwb3J0KEVSUk9SLAorCQkJ CQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRFUl9WQUxVRSksCisJCQkJCQkgZXJy bXNnKCJleHBlY3RlZCBKU09OIHN0cnVjdCBmb3IgJSVPIGVsZW1lbnQgXCIlc1wiLCBnb3QgJWQi LAorCQkJCQkJCQlwYXJhbSwganNvbnZhbC0+dHlwZSkpKTsKKwkJCWV4cGFuZF9qc29udmFsX29w ZXJhdG9yKGJ1ZiwganNvbnZhbCk7CisJCQlicmVhazsKKworCQljYXNlIFNwZWNOdW1iZXI6CisJ CQlpZiAoanNvbnZhbC0+dHlwZSAhPSBqYnZOdW1lcmljKQorCQkJCWVyZXBvcnQoRVJST1IsCisJ CQkJCQkoZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwKKwkJCQkJCSBl cnJtc2coImV4cGVjdGVkIEpTT04gbnVtZXJpYyBmb3IgJSVuIGVsZW1lbnQgXCIlc1wiLCBnb3Qg JWQiLAorCQkJCQkJCQlwYXJhbSwganNvbnZhbC0+dHlwZSkpKTsKKwkJCWV4cGFuZF9qc29udmFs X251bWJlcihidWYsIGpzb252YWwpOworCQkJYnJlYWs7CisKKwkJY2FzZSBTcGVjUm9sZToKKwkJ CWlmIChqc29udmFsLT50eXBlICE9IGpidkJpbmFyeSkKKwkJCQllcmVwb3J0KEVSUk9SLAorCQkJ CQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRFUl9WQUxVRSksCisJCQkJCQkgZXJy bXNnKCJleHBlY3RlZCBKU09OIHN0cnVjdCBmb3IgJSVSIGVsZW1lbnQgXCIlc1wiLCBnb3QgJWQi LAorCQkJCQkJCQlwYXJhbSwganNvbnZhbC0+dHlwZSkpKTsKKwkJCWV4cGFuZF9qc29udmFsX3Jv bGUoYnVmLCBqc29udmFsKTsKKwkJCWJyZWFrOworCX0KKworCWlmIChmbXQpCisJCWVycm9yX2Nv bnRleHRfc3RhY2sgPSBzcWxlcnJjb250ZXh0LnByZXZpb3VzOworCisJcmV0dXJuIHJlc3VsdDsK K30KKworLyoKKyAqIEl0ZXJhdGUgb24gdGhlIGVsZW1lbnRzIG9mIGEgSlNPTiBhcnJheSwgZXhw YW5kaW5nIGVhY2ggb25lIGludG8gdGhlIG91dHB1dAorICogU3RyaW5nSW5mbyBwZXIgdGhlIGdp dmVuIGNvbnZlcnNpb24gc3BlY2lmaWVyLCBzZXBhcmF0ZWQgYnkgdGhlIGdpdmVuCisgKiBzZXBh cmF0b3IuCisgKi8KK3N0YXRpYyB2b2lkCitleHBhbmRfanNvbmJfYXJyYXkoU3RyaW5nSW5mbyBi dWYsIGNoYXIgKnBhcmFtLAorCQkJCSAgIEpzb25iVmFsdWUgKmpzb25hcnIsIGNoYXIgKmFycmF5 c2VwLCBjb252U3BlY2lmaWVyIHNwZWNpZmllciwKKwkJCQkgICBjb25zdCBjaGFyICpmbXQpCit7 CisJRXJyb3JDb250ZXh0Q2FsbGJhY2sgc3FsZXJyY29udGV4dDsKKwlKc29uYkNvbnRhaW5lciAq Y29udGFpbmVyOworCUpzb25iSXRlcmF0b3IgKml0OworCUpzb25iVmFsdWUJdjsKKwlpbnQJCQl0 eXBlOworCWJvb2wJCWZpcnN0ID0gdHJ1ZTsKKwlTdHJpbmdJbmZvRGF0YSBhcnJheWVsZW07CisK KwkvKiBJZiB3ZSB3ZXJlIGdpdmVuIGEgZm9ybWF0IHN0cmluZywgc2V0dXAgYW4gZXJlcG9ydCgp IGNvbnRleHQgY2FsbGJhY2sgKi8KKwlpZiAoZm10KQorCXsKKwkJc3FsZXJyY29udGV4dC5jYWxs YmFjayA9IGZtdHN0cl9lcnJvcl9jYWxsYmFjazsKKwkJc3FsZXJyY29udGV4dC5hcmcgPSAodm9p ZCAqKSBmbXQ7CisJCXNxbGVycmNvbnRleHQucHJldmlvdXMgPSBlcnJvcl9jb250ZXh0X3N0YWNr OworCQllcnJvcl9jb250ZXh0X3N0YWNrID0gJnNxbGVycmNvbnRleHQ7CisJfQorCisJaWYgKGpz b25hcnItPnR5cGUgIT0gamJ2QmluYXJ5KQorCQllcmVwb3J0KEVSUk9SLAorCQkJCShlcnJjb2Rl KEVSUkNPREVfSU5WQUxJRF9QQVJBTUVURVJfVkFMVUUpLAorCQkJCSBlcnJtc2coImVsZW1lbnQg XCIlc1wiIGlzIG5vdCBhIEpTT04gYXJyYXkiLCBwYXJhbSkpKTsKKworCWNvbnRhaW5lciA9IGpz b25hcnItPnZhbC5iaW5hcnkuZGF0YTsKKwlpZiAoIUpzb25Db250YWluZXJJc0FycmF5KGNvbnRh aW5lcikpCisJCWVyZXBvcnQoRVJST1IsCisJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BB UkFNRVRFUl9WQUxVRSksCisJCQkJIGVycm1zZygiZWxlbWVudCBcIiVzXCIgaXMgbm90IGEgSlNP TiBhcnJheSIsIHBhcmFtKSkpOworCisJaW5pdFN0cmluZ0luZm8oJmFycmF5ZWxlbSk7CisKKwlp dCA9IEpzb25iSXRlcmF0b3JJbml0KGNvbnRhaW5lcik7CisJd2hpbGUgKCh0eXBlID0gSnNvbmJJ dGVyYXRvck5leHQoJml0LCAmdiwgdHJ1ZSkpICE9IFdKQl9ET05FKQorCXsKKwkJaWYgKHR5cGUg PT0gV0pCX0VMRU0pCisJCXsKKwkJCXJlc2V0U3RyaW5nSW5mbygmYXJyYXllbGVtKTsKKworCQkJ aWYgKGV4cGFuZF9vbmVfanNvbmJfZWxlbWVudCgmYXJyYXllbGVtLCBwYXJhbSwgJnYsIHNwZWNp ZmllciwgTlVMTCkpCisJCQl7CisJCQkJaWYgKCFmaXJzdCkKKwkJCQkJYXBwZW5kU3RyaW5nSW5m b1N0cmluZyhidWYsIGFycmF5c2VwKTsKKworCQkJCWFwcGVuZEJpbmFyeVN0cmluZ0luZm8oYnVm LCBhcnJheWVsZW0uZGF0YSwgYXJyYXllbGVtLmxlbik7CisJCQkJZmlyc3QgPSBmYWxzZTsKKwkJ CX0KKwkJfQorCX0KKworCWlmIChmbXQpCisJCWVycm9yX2NvbnRleHRfc3RhY2sgPSBzcWxlcnJj b250ZXh0LnByZXZpb3VzOworfQorCisvKgorICogV29ya2hvcnNlIGZvciBkZGxfZGVwYXJzZV9l eHBhbmRfY29tbWFuZC4KKyAqLworY2hhciAqCitkZXBhcnNlX2RkbF9qc29uX3RvX3N0cmluZyhj aGFyICpqc29uX3N0cikKK3sKKwlEYXR1bQkJZDsKKwlKc29uYgkgICAqanNvbmI7CisJU3RyaW5n SW5mbwlidWYgPSAoU3RyaW5nSW5mbykgcGFsbG9jMChzaXplb2YoU3RyaW5nSW5mb0RhdGEpKTsK KworCWluaXRTdHJpbmdJbmZvKGJ1Zik7CisKKwlkID0gRGlyZWN0RnVuY3Rpb25DYWxsMShqc29u Yl9pbiwgUG9pbnRlckdldERhdHVtKGpzb25fc3RyKSk7CisJanNvbmIgPSAoSnNvbmIgKikgRGF0 dW1HZXRQb2ludGVyKGQpOworCisJZXhwYW5kX2ZtdF9yZWN1cnNpdmUoJmpzb25iLT5yb290LCBi dWYpOworCisJcmV0dXJuIGJ1Zi0+ZGF0YTsKK30KKworLyotLS0tLS0KKyAqIFJldHVybnMgYSBm b3JtYXR0ZWQgc3RyaW5nIGZyb20gYSBKU09OIG9iamVjdC4KKyAqCisgKiBUaGUgc3RhcnRpbmcg cG9pbnQgaXMgdGhlIGVsZW1lbnQgbmFtZWQgImZtdCIgKHdoaWNoIG11c3QgYmUgYSBzdHJpbmcp LgorICogVGhpcyBmb3JtYXQgc3RyaW5nIG1heSBjb250YWluIHplcm8gb3IgbW9yZSAlLWVzY2Fw ZXMsIHdoaWNoIGNvbnNpc3Qgb2YgYW4KKyAqIGVsZW1lbnQgbmFtZSBlbmNsb3NlZCBpbiB7IH0s IHBvc3NpYmx5IGZvbGxvd2VkIGJ5IGEgY29udmVyc2lvbiBtb2RpZmllciwKKyAqIGZvbGxvd2Vk IGJ5IGEgY29udmVyc2lvbiBzcGVjaWZpZXIuICBQb3NzaWJsZSBjb252ZXJzaW9uIHNwZWNpZmll cnMgYXJlOgorICoKKyAqICUJCWV4cGFuZCB0byBhIGxpdGVyYWwgJQorICogSQkJZXhwYW5kIGFz IGEgc2luZ2xlLCBub24tcXVhbGlmaWVkIGlkZW50aWZpZXIKKyAqIEQJCWV4cGFuZCBhcyBhIHBv c3NpYmx5LXF1YWxpZmllZCBpZGVudGlmaWVyCisgKiBUCQlleHBhbmQgYXMgYSB0eXBlIG5hbWUK KyAqIE8JCWV4cGFuZCBhcyBhbiBvcGVyYXRvciBuYW1lCisgKiBMCQlleHBhbmQgYXMgYSBzdHJp bmcgbGl0ZXJhbCAocXVvdGUgdXNpbmcgc2luZ2xlIHF1b3RlcykKKyAqIHMJCWV4cGFuZCBhcyBh IHNpbXBsZSBzdHJpbmcgKG5vIHF1b3RpbmcpCisgKiBuCQlleHBhbmQgYXMgYSBzaW1wbGUgbnVt YmVyIChubyBxdW90aW5nKQorICogUgkJZXhwYW5kIGFzIGEgcm9sZSBuYW1lIChwb3NzaWJseSBx dW90ZWQgbmFtZSwgb3IgUFVCTElDKQorICoKKyAqIFRoZSBlbGVtZW50IG5hbWUgbWF5IGhhdmUg YW4gb3B0aW9uYWwgc2VwYXJhdG9yIHNwZWNpZmljYXRpb24gcHJlY2VkZWQKKyAqIGJ5IGEgY29s b24uICBJdHMgcHJlc2VuY2UgaW5kaWNhdGVzIHRoYXQgdGhlIGVsZW1lbnQgaXMgZXhwZWN0ZWQg dG8gYmUKKyAqIGFuIGFycmF5OyB0aGUgc3BlY2lmaWVkIHNlcGFyYXRvciBpcyB1c2VkIHRvIGpv aW4gdGhlIGFycmF5IGVsZW1lbnRzLgorICotLS0tLS0KKyAqLworRGF0dW0KK2RkbF9kZXBhcnNl X2V4cGFuZF9jb21tYW5kKFBHX0ZVTkNUSU9OX0FSR1MpCit7CisJdGV4dAkgICAqanNvbiA9IFBH X0dFVEFSR19URVhUX1AoMCk7CisJY2hhcgkgICAqanNvbl9zdHI7CisKKwlqc29uX3N0ciA9IHRl eHRfdG9fY3N0cmluZyhqc29uKTsKKworCVBHX1JFVFVSTl9URVhUX1AoY3N0cmluZ190b190ZXh0 KGRlcGFyc2VfZGRsX2pzb25fdG9fc3RyaW5nKGpzb25fc3RyKSkpOworfQorCisvKgorICogRXJy b3IgY29udGV4dCBjYWxsYmFjayBmb3IgSlNPTiBmb3JtYXQgc3RyaW5nIGV4cGFuc2lvbi4KKyAq CisgKiBYWFg6IGluZGljYXRlIHdoaWNoIGVsZW1lbnQgd2UncmUgZXhwYW5kaW5nLCBpZiBhcHBs aWNhYmxlLgorICovCitzdGF0aWMgdm9pZAorZm10c3RyX2Vycm9yX2NhbGxiYWNrKHZvaWQgKmFy ZykKK3sKKwllcnJjb250ZXh0KCJ3aGlsZSBleHBhbmRpbmcgZm9ybWF0IHN0cmluZyBcIiVzXCIi LCAoY2hhciAqKSBhcmcpOworfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvZXZl bnRfdHJpZ2dlci5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvZXZlbnRfdHJpZ2dlci5jCmluZGV4 IDY0MGMyNWZmNzAuLmVmZjE1YzA1ZGIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRz L2V2ZW50X3RyaWdnZXIuYworKysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9ldmVudF90cmlnZ2Vy LmMKQEAgLTE4MjUsNiArMTgyNSw3IEBAIHBnX2V2ZW50X3RyaWdnZXJfZGRsX2NvbW1hbmRzKFBH X0ZVTkNUSU9OX0FSR1MpCiAJCQljYXNlIFNDVF9BbHRlck9wRmFtaWx5OgogCQkJY2FzZSBTQ1Rf Q3JlYXRlT3BDbGFzczoKIAkJCWNhc2UgU0NUX0FsdGVyVFNDb25maWc6CisJCQljYXNlIFNDVF9D cmVhdGVUYWJsZUFzOgogCQkJCXsKIAkJCQkJY2hhcgkgICAqaWRlbnRpdHk7CiAJCQkJCWNoYXIJ ICAgKnR5cGU7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy9tZXNvbi5idWlsZCBi L3NyYy9iYWNrZW5kL2NvbW1hbmRzL21lc29uLmJ1aWxkCmluZGV4IDg2NzkxMWMwZDMuLmViNjY1 MDFjNDUgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL21lc29uLmJ1aWxkCisrKyBi L3NyYy9iYWNrZW5kL2NvbW1hbmRzL21lc29uLmJ1aWxkCkBAIC0xNyw2ICsxNyw4IEBAIGJhY2tl bmRfc291cmNlcyArPSBmaWxlcygKICAgJ2NvcHl0by5jJywKICAgJ2NyZWF0ZWFzLmMnLAogICAn ZGJjb21tYW5kcy5jJywKKyAgJ2RkbF9kZXBhcnNlLmMnLAorICAnZGRsX2pzb24uYycsCiAgICdk ZWZpbmUuYycsCiAgICdkaXNjYXJkLmMnLAogICAnZHJvcGNtZHMuYycsCmRpZmYgLS1naXQgYS9z cmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0IGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19w cm9jLmRhdAppbmRleCA3MDU2Yzk1MzcxLi5kNzVhMjYxMDU1IDEwMDY0NAotLS0gYS9zcmMvaW5j bHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0CisrKyBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJv Yy5kYXQKQEAgLTExODg3LDQgKzExODg3LDEwIEBACiAgIHByb3JldHR5cGUgPT4gJ2J5dGVhJywg cHJvYXJndHlwZXMgPT4gJ3BnX2JyaW5fbWlubWF4X211bHRpX3N1bW1hcnknLAogICBwcm9zcmMg PT4gJ2JyaW5fbWlubWF4X211bHRpX3N1bW1hcnlfc2VuZCcgfSwKIAoreyBvaWQgPT4gJzQ2NDIn LCBkZXNjciA9PiAnZGVwYXJzZSB0aGUgRERMIGNvbW1hbmQgaW50byBKU09OIGZvcm1hdCBzdHJp bmcnLAorICBwcm9uYW1lID0+ICdkZGxfZGVwYXJzZV90b19qc29uJywgcHJvcmV0dHlwZSA9PiAn dGV4dCcsCisgIHByb2FyZ3R5cGVzID0+ICdwZ19kZGxfY29tbWFuZCcsIHByb3NyYyA9PiAnZGRs X2RlcGFyc2VfdG9fanNvbicgfSwKK3sgb2lkID0+ICc0NjQzJywgZGVzY3IgPT4gJ2V4cGFuZCBK U09OIGZvcm1hdCBEREwgdG8gYSBwbGFpbiBEREwgY29tbWFuZCcsCisgIHByb25hbWUgPT4gJ2Rk bF9kZXBhcnNlX2V4cGFuZF9jb21tYW5kJywgcHJvcmV0dHlwZSA9PiAndGV4dCcsCisgIHByb2Fy Z3R5cGVzID0+ICd0ZXh0JywgcHJvc3JjID0+ICdkZGxfZGVwYXJzZV9leHBhbmRfY29tbWFuZCcg fSwKIF0KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL25vZGVzL3BhcnNlbm9kZXMuaCBiL3NyYy9p bmNsdWRlL25vZGVzL3BhcnNlbm9kZXMuaAppbmRleCAzNGJjNjQwZmYyLi4yNjNjMGUyN2MyIDEw MDY0NAotLS0gYS9zcmMvaW5jbHVkZS9ub2Rlcy9wYXJzZW5vZGVzLmgKKysrIGIvc3JjL2luY2x1 ZGUvbm9kZXMvcGFyc2Vub2Rlcy5oCkBAIC0xOTczLDYgKzE5NzMsNyBAQCB0eXBlZGVmIHN0cnVj dCBBbHRlclRhYmxlU3RtdAogCUxpc3QJICAgKmNtZHM7CQkJLyogbGlzdCBvZiBzdWJjb21tYW5k cyAqLwogCU9iamVjdFR5cGUJb2JqdHlwZTsJCS8qIHR5cGUgb2Ygb2JqZWN0ICovCiAJYm9vbAkJ bWlzc2luZ19vazsJCS8qIHNraXAgZXJyb3IgaWYgdGFibGUgbWlzc2luZyAqLworCWJvb2wgICAg ICAgIHRhYmxlX2xpa2U7CQkvKiBpbnRlcm5hbGx5IGdlbmVyYXRlZCBmb3IgVGFibGVMaWtlQ2xh dXNlICovCiB9IEFsdGVyVGFibGVTdG10OwogCiB0eXBlZGVmIGVudW0gQWx0ZXJUYWJsZVR5cGUK ZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3Rjb3AvZGRsX2RlcGFyc2UuaCBiL3NyYy9pbmNsdWRl L3Rjb3AvZGRsX2RlcGFyc2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw Li45YzI1NDljOTRjCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2luY2x1ZGUvdGNvcC9kZGxfZGVw YXJzZS5oCkBAIC0wLDAgKzEsMjMgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIGRkbF9k ZXBhcnNlLmgKKyAqCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTYtMjAyMiwgUG9zdGdy ZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykg MTk5NCwgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhCisgKgorICogc3Jj L2luY2x1ZGUvdGNvcC9kZGxfZGVwYXJzZS5oCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8K KyNpZm5kZWYgRERMX0RFUEFSU0VfSAorI2RlZmluZSBERExfREVQQVJTRV9ICisKKyNpbmNsdWRl ICJ0Y29wL2RlcGFyc2VfdXRpbGl0eS5oIgorCitleHRlcm4gY2hhciAqZGVwYXJzZV91dGlsaXR5 X2NvbW1hbmQoQ29sbGVjdGVkQ29tbWFuZCAqY21kLCBib29sIHZlcmJvc2VfbW9kZSk7CitleHRl cm4gY2hhciAqZGVwYXJzZV9kZGxfanNvbl90b19zdHJpbmcoY2hhciAqanNvbmIpOworZXh0ZXJu IGNoYXIgKmRlcGFyc2VfZHJvcF9jb21tYW5kKGNvbnN0IGNoYXIgKm9iamlkZW50aXR5LCBjb25z dCBjaGFyICpvYmplY3R0eXBlLAorCQkJCQkJCQkgIERyb3BCZWhhdmlvciBiZWhhdmlvcik7CisK KworI2VuZGlmCQkJCQkJCS8qIERETF9ERVBBUlNFX0ggKi8KZGlmZiAtLWdpdCBhL3NyYy9pbmNs dWRlL3Rjb3AvZGVwYXJzZV91dGlsaXR5LmggYi9zcmMvaW5jbHVkZS90Y29wL2RlcGFyc2VfdXRp bGl0eS5oCmluZGV4IDk0ZGUxM2Q5OTAuLmExZGQyNDg4MWMgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNs dWRlL3Rjb3AvZGVwYXJzZV91dGlsaXR5LmgKKysrIGIvc3JjL2luY2x1ZGUvdGNvcC9kZXBhcnNl X3V0aWxpdHkuaApAQCAtMjksNyArMjksOCBAQCB0eXBlZGVmIGVudW0gQ29sbGVjdGVkQ29tbWFu ZFR5cGUKIAlTQ1RfQWx0ZXJPcEZhbWlseSwKIAlTQ1RfQWx0ZXJEZWZhdWx0UHJpdmlsZWdlcywK IAlTQ1RfQ3JlYXRlT3BDbGFzcywKLQlTQ1RfQWx0ZXJUU0NvbmZpZworCVNDVF9BbHRlclRTQ29u ZmlnLAorCVNDVF9DcmVhdGVUYWJsZUFzCiB9IENvbGxlY3RlZENvbW1hbmRUeXBlOwogCiAvKgpA QCAtMzksNiArNDAsNyBAQCB0eXBlZGVmIHN0cnVjdCBDb2xsZWN0ZWRBVFN1YmNtZAogewogCU9i amVjdEFkZHJlc3MgYWRkcmVzczsJCS8qIGFmZmVjdGVkIGNvbHVtbiwgY29uc3RyYWludCwgaW5k ZXgsIC4uLiAqLwogCU5vZGUJICAgKnBhcnNldHJlZTsKKwljaGFyCSAgICp1c2luZ2V4cHI7CiB9 IENvbGxlY3RlZEFUU3ViY21kOwogCiB0eXBlZGVmIHN0cnVjdCBDb2xsZWN0ZWRDb21tYW5kCkBA IC02Miw2ICs2NCw3IEBAIHR5cGVkZWYgc3RydWN0IENvbGxlY3RlZENvbW1hbmQKIAkJewogCQkJ T2lkCQkJb2JqZWN0SWQ7CiAJCQlPaWQJCQljbGFzc0lkOworCQkJYm9vbAkJcmV3cml0ZTsKIAkJ CUxpc3QJICAgKnN1YmNtZHM7CiAJCX0JCQlhbHRlclRhYmxlOwogCkBAIC0xMDAsNiArMTAzLDEy IEBAIHR5cGVkZWYgc3RydWN0IENvbGxlY3RlZENvbW1hbmQKIAkJewogCQkJT2JqZWN0VHlwZQlv Ymp0eXBlOwogCQl9CQkJZGVmcHJpdnM7CisKKwkJc3RydWN0CisJCXsKKwkJCU9iamVjdEFkZHJl c3MgYWRkcmVzczsKKwkJCU5vZGUJCSAqcmVhbF9jcmVhdGU7CisJCX0JCQljdGFzOwogCX0JCQlk OwogCiAJc3RydWN0IENvbGxlY3RlZENvbW1hbmQgKnBhcmVudDsJLyogd2hlbiBuZXN0ZWQgKi8K ZGlmZiAtLWdpdCBhL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0IGIvc3JjL3Rvb2xz L3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKaW5kZXggNTBkODZjYjAxYi4uNWNkOGFmOWU2NiAxMDA2 NDQKLS0tIGEvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKKysrIGIvc3JjL3Rvb2xz L3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKQEAgLTE2MTEsNiArMTYxMSw5IEBAIE9TSW5mbwogT1NT TENpcGhlcgogT1NTTERpZ2VzdAogT1ZFUkxBUFBFRAorT2JqRWxlbQorT2JqVHJlZQorT2JqVHlw ZQogT2JqZWN0QWNjZXNzRHJvcAogT2JqZWN0QWNjZXNzTmFtZXNwYWNlU2VhcmNoCiBPYmplY3RB Y2Nlc3NQb3N0QWx0ZXIKQEAgLTMxNzgsNiArMzE4MSw3IEBAIGNvbXBhcmVfY29udGV4dAogY29u ZmlnX3Zhcl92YWx1ZQogY29udGFpbl9hZ2dzX29mX2xldmVsX2NvbnRleHQKIGNvbnZlcnRfdGVz dGV4cHJfY29udGV4dAorY29udlNwZWNpZmllcgogY29weV9kYXRhX2Rlc3RfY2IKIGNvcHlfZGF0 YV9zb3VyY2VfY2IKIGNvcmVfWVlTVFlQRQotLSAKMi4zOC4xCgo= --000000000000e219be05f0eb1648--