Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtp (Exim 4.80) (envelope-from ) id 1X1VS3-000628-CR for pgsql-hackers@arkaria.postgresql.org; Mon, 30 Jun 2014 06:52:31 +0000 Received: from localhost ([127.0.0.1] helo=postgresql.org) by malur.postgresql.org with smtp (Exim 4.80) (envelope-from ) id 1X1VS2-0007R8-SA for pgsql-hackers@arkaria.postgresql.org; Mon, 30 Jun 2014 06:52:30 +0000 Received: from makus.postgresql.org ([2001:4800:1501:1::229]) by malur.postgresql.org with esmtps (TLS1.2:DHE_RSA_AES_256_CBC_SHA256:256) (Exim 4.80) (envelope-from ) id 1X1VS0-0007Qz-3V for pgsql-hackers@postgresql.org; Mon, 30 Jun 2014 06:52:28 +0000 Received: from tama50.ecl.ntt.co.jp ([129.60.39.147]) by makus.postgresql.org with esmtp (Exim 4.80) (envelope-from ) id 1X1VRs-0002GJ-S0 for pgsql-hackers@postgresql.org; Mon, 30 Jun 2014 06:52:26 +0000 Received: from mfs6.rdh.ecl.ntt.co.jp (mfs6.rdh.ecl.ntt.co.jp [129.60.39.149]) by tama50.ecl.ntt.co.jp (8.13.8/8.13.8) with ESMTP id s5U6qGsM027430; Mon, 30 Jun 2014 15:52:16 +0900 Received: from mfs6.rdh.ecl.ntt.co.jp (localhost.localdomain [127.0.0.1]) by mfs6.rdh.ecl.ntt.co.jp (Postfix) with ESMTP id 8525BE0108; Mon, 30 Jun 2014 15:52:16 +0900 (JST) Received: from imail3.m.ecl.ntt.co.jp (imail3.m.ecl.ntt.co.jp [129.60.5.248]) by mfs6.rdh.ecl.ntt.co.jp (Postfix) with ESMTP id 788BCE0107; Mon, 30 Jun 2014 15:52:16 +0900 (JST) Received: from [129.60.241.75] ([129.60.241.75]) by imail3.m.ecl.ntt.co.jp (8.13.8/8.13.8) with ESMTP id s5U6qG83003571; Mon, 30 Jun 2014 15:52:16 +0900 Message-ID: <53B10914.2010504@lab.ntt.co.jp> Date: Mon, 30 Jun 2014 15:52:04 +0900 From: Etsuro Fujita User-Agent: Mozilla/5.0 (Windows NT 6.0; rv:24.0) Gecko/20100101 Thunderbird/24.6.0 MIME-Version: 1.0 To: Ashutosh Bapat , Kyotaro HORIGUCHI CC: Shigeru Hanada , pgsql-hackers Subject: Re: inherit support for foreign tables References: <53393E18.3080901@lab.ntt.co.jp> <533C01C7.6030809@lab.ntt.co.jp> <53706FB6.6000403@lab.ntt.co.jp> <20140620.170406.123403564.horiguchi.kyotaro@lab.ntt.co.jp> <53A92924.90702@lab.ntt.co.jp> In-Reply-To: <53A92924.90702@lab.ntt.co.jp> Content-Type: multipart/mixed; boundary="------------030103080601040207040101" X-TM-AS-MML: No X-Pg-Spam-Score: -1.9 (-) List-Archive: List-Help: List-ID: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: X-Mailing-List: pgsql-hackers Precedence: bulk Sender: pgsql-hackers-owner@postgresql.org This is a multi-part message in MIME format. --------------030103080601040207040101 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit (2014/06/24 16:30), Etsuro Fujita wrote: > (2014/06/23 18:35), Ashutosh Bapat wrote: >> Selecting tableoid on parent causes an error, "ERROR: cannot extract >> system attribute from virtual tuple". The foreign table has an OID which >> can be reported as tableoid for the rows coming from that foreign table. >> Do we want to do that? > > No. I think it's a bug. I'll fix it. Done. I think this is because create_foreignscan_plan() makes reference to attr_needed, which isn't computed for inheritance children. To aboid this, I've modified create_foreignscan_plan() to see reltargetlist and baserestrictinfo, instead of attr_needed. Please find attached an updated version of the patch. Sorry for the delay. Best regards, Etsuro Fujita --------------030103080601040207040101 Content-Type: text/plain; charset=Shift_JIS; name="foreign_inherit-v13.patch" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="foreign_inherit-v13.patch" KioqIGEvY29udHJpYi9maWxlX2Zkdy9maWxlX2Zkdy5jCi0tLSBiL2NvbnRy aWIvZmlsZV9mZHcvZmlsZV9mZHcuYwoqKioqKioqKioqKioqKioKKioqIDEx NSwxMjAgKioqKiBzdGF0aWMgdm9pZCBmaWxlR2V0Rm9yZWlnblJlbFNpemUo UGxhbm5lckluZm8gKnJvb3QsCi0tLSAxMTUsMTI1IC0tLS0KICBzdGF0aWMg dm9pZCBmaWxlR2V0Rm9yZWlnblBhdGhzKFBsYW5uZXJJbmZvICpyb290LAog IAkJCQkJUmVsT3B0SW5mbyAqYmFzZXJlbCwKICAJCQkJCU9pZCBmb3JlaWdu dGFibGVpZCk7Cisgc3RhdGljIEZvcmVpZ25QYXRoICpmaWxlUmVwYXJhbWV0 ZXJpemVGb3JlaWduUGF0aChQbGFubmVySW5mbyAqcm9vdCwKKyAJCQkJCQkJ CQkJCQkgIFJlbE9wdEluZm8gKmJhc2VyZWwsCisgCQkJCQkJCQkJCQkJICBP aWQgZm9yZWlnbnRhYmxlaWQsCisgCQkJCQkJCQkJCQkJICBGb3JlaWduUGF0 aCAqcGF0aCwKKyAJCQkJCQkJCQkJCQkgIFJlbGlkcyByZXF1aXJlZF9vdXRl cik7CiAgc3RhdGljIEZvcmVpZ25TY2FuICpmaWxlR2V0Rm9yZWlnblBsYW4o UGxhbm5lckluZm8gKnJvb3QsCiAgCQkJCSAgIFJlbE9wdEluZm8gKmJhc2Vy ZWwsCiAgCQkJCSAgIE9pZCBmb3JlaWdudGFibGVpZCwKKioqKioqKioqKioq KioqCioqKiAxNDMsMTQ5ICoqKiogc3RhdGljIGJvb2wgY2hlY2tfc2VsZWN0 aXZlX2JpbmFyeV9jb252ZXJzaW9uKFJlbE9wdEluZm8gKmJhc2VyZWwsCiAg c3RhdGljIHZvaWQgZXN0aW1hdGVfc2l6ZShQbGFubmVySW5mbyAqcm9vdCwg UmVsT3B0SW5mbyAqYmFzZXJlbCwKICAJCQkgIEZpbGVGZHdQbGFuU3RhdGUg KmZkd19wcml2YXRlKTsKICBzdGF0aWMgdm9pZCBlc3RpbWF0ZV9jb3N0cyhQ bGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqYmFzZXJlbCwKISAJCQkg ICBGaWxlRmR3UGxhblN0YXRlICpmZHdfcHJpdmF0ZSwKICAJCQkgICBDb3N0 ICpzdGFydHVwX2Nvc3QsIENvc3QgKnRvdGFsX2Nvc3QpOwogIHN0YXRpYyBp bnQgZmlsZV9hY3F1aXJlX3NhbXBsZV9yb3dzKFJlbGF0aW9uIG9uZXJlbCwg aW50IGVsZXZlbCwKICAJCQkJCQkgSGVhcFR1cGxlICpyb3dzLCBpbnQgdGFy Z3Jvd3MsCi0tLSAxNDgsMTU0IC0tLS0KICBzdGF0aWMgdm9pZCBlc3RpbWF0 ZV9zaXplKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpiYXNlcmVs LAogIAkJCSAgRmlsZUZkd1BsYW5TdGF0ZSAqZmR3X3ByaXZhdGUpOwogIHN0 YXRpYyB2b2lkIGVzdGltYXRlX2Nvc3RzKFBsYW5uZXJJbmZvICpyb290LCBS ZWxPcHRJbmZvICpiYXNlcmVsLAohIAkJCSAgIEZpbGVGZHdQbGFuU3RhdGUg KmZkd19wcml2YXRlLCBMaXN0ICpqb2luX2NvbmRzLAogIAkJCSAgIENvc3Qg KnN0YXJ0dXBfY29zdCwgQ29zdCAqdG90YWxfY29zdCk7CiAgc3RhdGljIGlu dCBmaWxlX2FjcXVpcmVfc2FtcGxlX3Jvd3MoUmVsYXRpb24gb25lcmVsLCBp bnQgZWxldmVsLAogIAkJCQkJCSBIZWFwVHVwbGUgKnJvd3MsIGludCB0YXJn cm93cywKKioqKioqKioqKioqKioqCioqKiAxNjEsMTY2ICoqKiogZmlsZV9m ZHdfaGFuZGxlcihQR19GVU5DVElPTl9BUkdTKQotLS0gMTY2LDE3MiAtLS0t CiAgCiAgCWZkd3JvdXRpbmUtPkdldEZvcmVpZ25SZWxTaXplID0gZmlsZUdl dEZvcmVpZ25SZWxTaXplOwogIAlmZHdyb3V0aW5lLT5HZXRGb3JlaWduUGF0 aHMgPSBmaWxlR2V0Rm9yZWlnblBhdGhzOworIAlmZHdyb3V0aW5lLT5SZXBh cmFtZXRlcml6ZUZvcmVpZ25QYXRoID0gZmlsZVJlcGFyYW1ldGVyaXplRm9y ZWlnblBhdGg7CiAgCWZkd3JvdXRpbmUtPkdldEZvcmVpZ25QbGFuID0gZmls ZUdldEZvcmVpZ25QbGFuOwogIAlmZHdyb3V0aW5lLT5FeHBsYWluRm9yZWln blNjYW4gPSBmaWxlRXhwbGFpbkZvcmVpZ25TY2FuOwogIAlmZHdyb3V0aW5l LT5CZWdpbkZvcmVpZ25TY2FuID0gZmlsZUJlZ2luRm9yZWlnblNjYW47Cioq KioqKioqKioqKioqKgoqKiogNTA5LDUxNSAqKioqIGZpbGVHZXRGb3JlaWdu UGF0aHMoUGxhbm5lckluZm8gKnJvb3QsCiAgCQkJCQkJCQkJCSAgKE5vZGUg KikgY29sdW1ucykpOwogIAogIAkvKiBFc3RpbWF0ZSBjb3N0cyAqLwohIAll c3RpbWF0ZV9jb3N0cyhyb290LCBiYXNlcmVsLCBmZHdfcHJpdmF0ZSwKICAJ CQkJICAgJnN0YXJ0dXBfY29zdCwgJnRvdGFsX2Nvc3QpOwogIAogIAkvKgot LS0gNTE1LDUyMiAtLS0tCiAgCQkJCQkJCQkJCSAgKE5vZGUgKikgY29sdW1u cykpOwogIAogIAkvKiBFc3RpbWF0ZSBjb3N0cyAqLwohIAllc3RpbWF0ZV9j b3N0cyhyb290LCBiYXNlcmVsLAohIAkJCQkgICBmZHdfcHJpdmF0ZSwgTklM LAogIAkJCQkgICAmc3RhcnR1cF9jb3N0LCAmdG90YWxfY29zdCk7CiAgCiAg CS8qCioqKioqKioqKioqKioqKgoqKiogNTM0LDUzOSAqKioqIGZpbGVHZXRG b3JlaWduUGF0aHMoUGxhbm5lckluZm8gKnJvb3QsCi0tLSA1NDEsNTgxIC0t LS0KICB9CiAgCiAgLyoKKyAgKiBmaWxlUmVwYXJhbWV0ZXJpemVGb3JlaWdu UGF0aAorICAqCQlBdHRlbXB0IHRvIG1vZGlmeSBhIGdpdmVuIHBhdGggdG8g aGF2ZSBncmVhdGVyIHBhcmFtZXRlcml6YXRpb24KKyAgKi8KKyBzdGF0aWMg Rm9yZWlnblBhdGggKgorIGZpbGVSZXBhcmFtZXRlcml6ZUZvcmVpZ25QYXRo KFBsYW5uZXJJbmZvICpyb290LAorIAkJCQkJCQkgIFJlbE9wdEluZm8gKmJh c2VyZWwsCisgCQkJCQkJCSAgT2lkIGZvcmVpZ250YWJsZWlkLAorIAkJCQkJ CQkgIEZvcmVpZ25QYXRoICpwYXRoLAorIAkJCQkJCQkgIFJlbGlkcyByZXF1 aXJlZF9vdXRlcikKKyB7CisgCVBhcmFtUGF0aEluZm8gKnBhcmFtX2luZm87 CisgCUZpbGVGZHdQbGFuU3RhdGUgKmZkd19wcml2YXRlID0gKEZpbGVGZHdQ bGFuU3RhdGUgKikgYmFzZXJlbC0+ZmR3X3ByaXZhdGU7CisgCUNvc3QJCXN0 YXJ0dXBfY29zdDsKKyAJQ29zdAkJdG90YWxfY29zdDsKKyAKKyAJLyogR2V0 IHRoZSBQYXJhbVBhdGhJbmZvICovCisgCXBhcmFtX2luZm8gPSBnZXRfYmFz ZXJlbF9wYXJhbXBhdGhpbmZvKHJvb3QsIGJhc2VyZWwsIHJlcXVpcmVkX291 dGVyKTsKKyAKKyAJLyogUmVkbyB0aGUgY29zdCBlc3RpbWF0ZXMgKi8KKyAJ ZXN0aW1hdGVfY29zdHMocm9vdCwgYmFzZXJlbCwKKyAJCQkJICAgZmR3X3By aXZhdGUsCisgCQkJCSAgIHBhcmFtX2luZm8tPnBwaV9jbGF1c2VzLAorIAkJ CQkgICAmc3RhcnR1cF9jb3N0LCAmdG90YWxfY29zdCk7CisgCisgCS8qIE1h a2UgYW5kIHJldHVybiB0aGUgbmV3IHBhdGggKi8KKyAJcmV0dXJuIGNyZWF0 ZV9mb3JlaWduc2Nhbl9wYXRoKHJvb3QsIGJhc2VyZWwsCisgCQkJCQkJCQkg ICBwYXJhbV9pbmZvLT5wcGlfcm93cywKKyAJCQkJCQkJCSAgIHN0YXJ0dXBf Y29zdCwKKyAJCQkJCQkJCSAgIHRvdGFsX2Nvc3QsCisgCQkJCQkJCQkgICBO SUwsCQkvKiBubyBwYXRoa2V5cyAqLworIAkJCQkJCQkJICAgcmVxdWlyZWRf b3V0ZXIsCisgCQkJCQkJCQkgICBwYXRoLT5mZHdfcHJpdmF0ZSk7CisgfQor IAorIC8qCiAgICogZmlsZUdldEZvcmVpZ25QbGFuCiAgICoJCUNyZWF0ZSBh IEZvcmVpZ25TY2FuIHBsYW4gbm9kZSBmb3Igc2Nhbm5pbmcgdGhlIGZvcmVp Z24gdGFibGUKICAgKi8KKioqKioqKioqKioqKioqCioqKiA5NjIsOTczICoq KiogZXN0aW1hdGVfc2l6ZShQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5m byAqYmFzZXJlbCwKICAgKi8KICBzdGF0aWMgdm9pZAogIGVzdGltYXRlX2Nv c3RzKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpiYXNlcmVsLAoh IAkJCSAgIEZpbGVGZHdQbGFuU3RhdGUgKmZkd19wcml2YXRlLAogIAkJCSAg IENvc3QgKnN0YXJ0dXBfY29zdCwgQ29zdCAqdG90YWxfY29zdCkKICB7CiAg CUJsb2NrTnVtYmVyIHBhZ2VzID0gZmR3X3ByaXZhdGUtPnBhZ2VzOwogIAlk b3VibGUJCW50dXBsZXMgPSBmZHdfcHJpdmF0ZS0+bnR1cGxlczsKICAJQ29z dAkJcnVuX2Nvc3QgPSAwOwogIAlDb3N0CQljcHVfcGVyX3R1cGxlOwogIAog IAkvKgotLS0gMTAwNCwxMDE2IC0tLS0KICAgKi8KICBzdGF0aWMgdm9pZAog IGVzdGltYXRlX2Nvc3RzKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZv ICpiYXNlcmVsLAohIAkJCSAgIEZpbGVGZHdQbGFuU3RhdGUgKmZkd19wcml2 YXRlLCBMaXN0ICpqb2luX2NvbmRzLAogIAkJCSAgIENvc3QgKnN0YXJ0dXBf Y29zdCwgQ29zdCAqdG90YWxfY29zdCkKICB7CiAgCUJsb2NrTnVtYmVyIHBh Z2VzID0gZmR3X3ByaXZhdGUtPnBhZ2VzOwogIAlkb3VibGUJCW50dXBsZXMg PSBmZHdfcHJpdmF0ZS0+bnR1cGxlczsKICAJQ29zdAkJcnVuX2Nvc3QgPSAw OworIAlRdWFsQ29zdAlqb2luX2Nvc3Q7CiAgCUNvc3QJCWNwdV9wZXJfdHVw bGU7CiAgCiAgCS8qCioqKioqKioqKioqKioqKgoqKiogOTc4LDk4NSAqKioq IGVzdGltYXRlX2Nvc3RzKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZv ICpiYXNlcmVsLAogIAkgKi8KICAJcnVuX2Nvc3QgKz0gc2VxX3BhZ2VfY29z dCAqIHBhZ2VzOwogIAohIAkqc3RhcnR1cF9jb3N0ID0gYmFzZXJlbC0+YmFz ZXJlc3RyaWN0Y29zdC5zdGFydHVwOwohIAljcHVfcGVyX3R1cGxlID0gY3B1 X3R1cGxlX2Nvc3QgKiAxMCArIGJhc2VyZWwtPmJhc2VyZXN0cmljdGNvc3Qu cGVyX3R1cGxlOwogIAlydW5fY29zdCArPSBjcHVfcGVyX3R1cGxlICogbnR1 cGxlczsKICAJKnRvdGFsX2Nvc3QgPSAqc3RhcnR1cF9jb3N0ICsgcnVuX2Nv c3Q7CiAgfQotLS0gMTAyMSwxMDMxIC0tLS0KICAJICovCiAgCXJ1bl9jb3N0 ICs9IHNlcV9wYWdlX2Nvc3QgKiBwYWdlczsKICAKISAJY29zdF9xdWFsX2V2 YWwoJmpvaW5fY29zdCwgam9pbl9jb25kcywgcm9vdCk7CiEgCSpzdGFydHVw X2Nvc3QgPQohIAkJKGJhc2VyZWwtPmJhc2VyZXN0cmljdGNvc3Quc3RhcnR1 cCArIGpvaW5fY29zdC5zdGFydHVwKTsKISAJY3B1X3Blcl90dXBsZSA9IGNw dV90dXBsZV9jb3N0ICogMTAgKwohIAkJKGJhc2VyZWwtPmJhc2VyZXN0cmlj dGNvc3QucGVyX3R1cGxlICsgam9pbl9jb3N0LnBlcl90dXBsZSk7CiAgCXJ1 bl9jb3N0ICs9IGNwdV9wZXJfdHVwbGUgKiBudHVwbGVzOwogIAkqdG90YWxf Y29zdCA9ICpzdGFydHVwX2Nvc3QgKyBydW5fY29zdDsKICB9CioqKiBhL2Nv bnRyaWIvcG9zdGdyZXNfZmR3L3Bvc3RncmVzX2Zkdy5jCi0tLSBiL2NvbnRy aWIvcG9zdGdyZXNfZmR3L3Bvc3RncmVzX2Zkdy5jCioqKioqKioqKioqKioq KgoqKiogMjM5LDI0NCAqKioqIHN0YXRpYyB2b2lkIHBvc3RncmVzR2V0Rm9y ZWlnblJlbFNpemUoUGxhbm5lckluZm8gKnJvb3QsCi0tLSAyMzksMjQ5IC0t LS0KICBzdGF0aWMgdm9pZCBwb3N0Z3Jlc0dldEZvcmVpZ25QYXRocyhQbGFu bmVySW5mbyAqcm9vdCwKICAJCQkJCQlSZWxPcHRJbmZvICpiYXNlcmVsLAog IAkJCQkJCU9pZCBmb3JlaWdudGFibGVpZCk7Cisgc3RhdGljIEZvcmVpZ25Q YXRoICpwb3N0Z3Jlc1JlcGFyYW1ldGVyaXplRm9yZWlnblBhdGgoUGxhbm5l ckluZm8gKnJvb3QsCisgCQkJCQkJCQkJCQkJCSAgUmVsT3B0SW5mbyAqYmFz ZXJlbCwKKyAJCQkJCQkJCQkJCQkJICBPaWQgZm9yZWlnbnRhYmxlaWQsCisg CQkJCQkJCQkJCQkJCSAgRm9yZWlnblBhdGggKnBhdGgsCisgCQkJCQkJCQkJ CQkJCSAgUmVsaWRzIHJlcXVpcmVkX291dGVyKTsKICBzdGF0aWMgRm9yZWln blNjYW4gKnBvc3RncmVzR2V0Rm9yZWlnblBsYW4oUGxhbm5lckluZm8gKnJv b3QsCiAgCQkJCQkgICBSZWxPcHRJbmZvICpiYXNlcmVsLAogIAkJCQkJICAg T2lkIGZvcmVpZ250YWJsZWlkLAoqKioqKioqKioqKioqKioKKioqIDM0MCwz NDUgKioqKiBwb3N0Z3Jlc19mZHdfaGFuZGxlcihQR19GVU5DVElPTl9BUkdT KQotLS0gMzQ1LDM1MSAtLS0tCiAgCS8qIEZ1bmN0aW9ucyBmb3Igc2Nhbm5p bmcgZm9yZWlnbiB0YWJsZXMgKi8KICAJcm91dGluZS0+R2V0Rm9yZWlnblJl bFNpemUgPSBwb3N0Z3Jlc0dldEZvcmVpZ25SZWxTaXplOwogIAlyb3V0aW5l LT5HZXRGb3JlaWduUGF0aHMgPSBwb3N0Z3Jlc0dldEZvcmVpZ25QYXRoczsK KyAJcm91dGluZS0+UmVwYXJhbWV0ZXJpemVGb3JlaWduUGF0aCA9IHBvc3Rn cmVzUmVwYXJhbWV0ZXJpemVGb3JlaWduUGF0aDsKICAJcm91dGluZS0+R2V0 Rm9yZWlnblBsYW4gPSBwb3N0Z3Jlc0dldEZvcmVpZ25QbGFuOwogIAlyb3V0 aW5lLT5CZWdpbkZvcmVpZ25TY2FuID0gcG9zdGdyZXNCZWdpbkZvcmVpZ25T Y2FuOwogIAlyb3V0aW5lLT5JdGVyYXRlRm9yZWlnblNjYW4gPSBwb3N0Z3Jl c0l0ZXJhdGVGb3JlaWduU2NhbjsKKioqKioqKioqKioqKioqCioqKiA3Mjcs NzMyICoqKiogcG9zdGdyZXNHZXRGb3JlaWduUGF0aHMoUGxhbm5lckluZm8g KnJvb3QsCi0tLSA3MzMsNzgwIC0tLS0KICB9CiAgCiAgLyoKKyAgKiBwb3N0 Z3Jlc1JlcGFyYW1ldGVyaXplRm9yZWlnblBhdGgKKyAgKgkJQXR0ZW1wdCB0 byBtb2RpZnkgYSBnaXZlbiBwYXRoIHRvIGhhdmUgZ3JlYXRlciBwYXJhbWV0 ZXJpemF0aW9uCisgICovCisgc3RhdGljIEZvcmVpZ25QYXRoICoKKyBwb3N0 Z3Jlc1JlcGFyYW1ldGVyaXplRm9yZWlnblBhdGgoUGxhbm5lckluZm8gKnJv b3QsCisgCQkJCQkJCQkgIFJlbE9wdEluZm8gKmJhc2VyZWwsCisgCQkJCQkJ CQkgIE9pZCBmb3JlaWdudGFibGVpZCwKKyAJCQkJCQkJCSAgRm9yZWlnblBh dGggKnBhdGgsCisgCQkJCQkJCQkgIFJlbGlkcyByZXF1aXJlZF9vdXRlcikK KyB7CisgCVBhcmFtUGF0aEluZm8gKnBhcmFtX2luZm87CisgCWRvdWJsZQkJ cm93czsKKyAJaW50CQkJd2lkdGg7CisgCUNvc3QJCXN0YXJ0dXBfY29zdDsK KyAJQ29zdAkJdG90YWxfY29zdDsKKyAKKyAJLyogR2V0IHRoZSBQYXJhbVBh dGhJbmZvICovCisgCXBhcmFtX2luZm8gPSBnZXRfYmFzZXJlbF9wYXJhbXBh dGhpbmZvKHJvb3QsIGJhc2VyZWwsIHJlcXVpcmVkX291dGVyKTsKKyAKKyAJ LyogUmVkbyB0aGUgY29zdCBlc3RpbWF0ZXMgKi8KKyAJZXN0aW1hdGVfcGF0 aF9jb3N0X3NpemUocm9vdCwgYmFzZXJlbCwKKyAJCQkJCQkJcGFyYW1faW5m by0+cHBpX2NsYXVzZXMsCisgCQkJCQkJCSZyb3dzLCAmd2lkdGgsCisgCQkJ CQkJCSZzdGFydHVwX2Nvc3QsICZ0b3RhbF9jb3N0KTsKKyAKKyAJLyoKKyAJ ICogcHBpX3Jvd3MgY3VycmVudGx5IHdvbid0IGdldCBsb29rZWQgYXQgYnkg YW55dGhpbmcsIGJ1dCBzdGlsbCB3ZQorIAkgKiBtYXkgYXMgd2VsbCBlbnN1 cmUgdGhhdCBpdCBtYXRjaGVzIG91ciBpZGVhIG9mIHRoZSByb3djb3VudC4K KyAJICovCisgCXBhcmFtX2luZm8tPnBwaV9yb3dzID0gcm93czsKKyAKKyAJ LyogTWFrZSBhbmQgcmV0dXJuIHRoZSBuZXcgcGF0aCAqLworIAlyZXR1cm4g Y3JlYXRlX2ZvcmVpZ25zY2FuX3BhdGgocm9vdCwgYmFzZXJlbCwKKyAJCQkJ CQkJCSAgIHJvd3MsCisgCQkJCQkJCQkgICBzdGFydHVwX2Nvc3QsCisgCQkJ CQkJCQkgICB0b3RhbF9jb3N0LAorIAkJCQkJCQkJICAgTklMLAkJLyogbm8g cGF0aGtleXMgKi8KKyAJCQkJCQkJCSAgIHJlcXVpcmVkX291dGVyLAorIAkJ CQkJCQkJICAgTklMKTsJLyogbm8gZmR3X3ByaXZhdGUgbGlzdCAqLworIH0K KyAKKyAvKgogICAqIHBvc3RncmVzR2V0Rm9yZWlnblBsYW4KICAgKgkJQ3Jl YXRlIEZvcmVpZ25TY2FuIHBsYW4gbm9kZSB3aGljaCBpbXBsZW1lbnRzIHNl bGVjdGVkIGJlc3QgcGF0aAogICAqLwoqKioqKioqKioqKioqKioKKioqIDE3 NzMsMTc4MyAqKioqIGVzdGltYXRlX3BhdGhfY29zdF9zaXplKFBsYW5uZXJJ bmZvICpyb290LAogIAl9CiAgCWVsc2UKICAJewohIAkJLyoKISAJCSAqIFdl IGRvbid0IHN1cHBvcnQgam9pbiBjb25kaXRpb25zIGluIHRoaXMgbW9kZSAo aGVuY2UsIG5vCiEgCQkgKiBwYXJhbWV0ZXJpemVkIHBhdGhzIGNhbiBiZSBt YWRlKS4KISAJCSAqLwohIAkJQXNzZXJ0KGpvaW5fY29uZHMgPT0gTklMKTsK ICAKICAJCS8qIFVzZSByb3dzL3dpZHRoIGVzdGltYXRlcyBtYWRlIGJ5IHNl dF9iYXNlcmVsX3NpemVfZXN0aW1hdGVzLiAqLwogIAkJcm93cyA9IGJhc2Vy ZWwtPnJvd3M7Ci0tLSAxODIxLDE4MjggLS0tLQogIAl9CiAgCWVsc2UKICAJ ewohIAkJU2VsZWN0aXZpdHkgam9pbl9zZWw7CiEgCQlRdWFsQ29zdAlqb2lu X2Nvc3Q7CiAgCiAgCQkvKiBVc2Ugcm93cy93aWR0aCBlc3RpbWF0ZXMgbWFk ZSBieSBzZXRfYmFzZXJlbF9zaXplX2VzdGltYXRlcy4gKi8KICAJCXJvd3Mg PSBiYXNlcmVsLT5yb3dzOwoqKioqKioqKioqKioqKioKKioqIDE3OTAsMTgw NiAqKioqIGVzdGltYXRlX3BhdGhfY29zdF9zaXplKFBsYW5uZXJJbmZvICpy b290LAogIAkJcmV0cmlldmVkX3Jvd3MgPSBjbGFtcF9yb3dfZXN0KHJvd3Mg LyBmcGluZm8tPmxvY2FsX2NvbmRzX3NlbCk7CiAgCQlyZXRyaWV2ZWRfcm93 cyA9IE1pbihyZXRyaWV2ZWRfcm93cywgYmFzZXJlbC0+dHVwbGVzKTsKICAK ICAJCS8qCiAgCQkgKiBDb3N0IGFzIHRob3VnaCB0aGlzIHdlcmUgYSBzZXFz Y2FuLCB3aGljaCBpcyBwZXNzaW1pc3RpYy4gIFdlCiEgCQkgKiBlZmZlY3Rp dmVseSBpbWFnaW5lIHRoZSBsb2NhbF9jb25kcyBhcmUgYmVpbmcgZXZhbHVh dGVkIHJlbW90ZWx5LAohIAkJICogdG9vLgogIAkJICovCiAgCQlzdGFydHVw X2Nvc3QgPSAwOwogIAkJcnVuX2Nvc3QgPSAwOwogIAkJcnVuX2Nvc3QgKz0g c2VxX3BhZ2VfY29zdCAqIGJhc2VyZWwtPnBhZ2VzOwogIAohIAkJc3RhcnR1 cF9jb3N0ICs9IGJhc2VyZWwtPmJhc2VyZXN0cmljdGNvc3Quc3RhcnR1cDsK ISAJCWNwdV9wZXJfdHVwbGUgPSBjcHVfdHVwbGVfY29zdCArIGJhc2VyZWwt PmJhc2VyZXN0cmljdGNvc3QucGVyX3R1cGxlOwogIAkJcnVuX2Nvc3QgKz0g Y3B1X3Blcl90dXBsZSAqIGJhc2VyZWwtPnR1cGxlczsKICAKICAJCXRvdGFs X2Nvc3QgPSBzdGFydHVwX2Nvc3QgKyBydW5fY29zdDsKLS0tIDE4MzUsMTg2 MyAtLS0tCiAgCQlyZXRyaWV2ZWRfcm93cyA9IGNsYW1wX3Jvd19lc3Qocm93 cyAvIGZwaW5mby0+bG9jYWxfY29uZHNfc2VsKTsKICAJCXJldHJpZXZlZF9y b3dzID0gTWluKHJldHJpZXZlZF9yb3dzLCBiYXNlcmVsLT50dXBsZXMpOwog IAorIAkJLyogRmFjdG9yIGluIHRoZSBzZWxlY3Rpdml0eSBvZiB0aGUgam9p bl9jb25kcyAqLworIAkJam9pbl9zZWwgPSBjbGF1c2VsaXN0X3NlbGVjdGl2 aXR5KHJvb3QsCisgCQkJCQkJCQkJCSAgam9pbl9jb25kcywKKyAJCQkJCQkJ CQkJICBiYXNlcmVsLT5yZWxpZCwKKyAJCQkJCQkJCQkJICBKT0lOX0lOTkVS LAorIAkJCQkJCQkJCQkgIE5VTEwpOworIAorIAkJcm93cyA9IGNsYW1wX3Jv d19lc3Qocm93cyAqIGpvaW5fc2VsKTsKKyAKICAJCS8qCiAgCQkgKiBDb3N0 IGFzIHRob3VnaCB0aGlzIHdlcmUgYSBzZXFzY2FuLCB3aGljaCBpcyBwZXNz aW1pc3RpYy4gIFdlCiEgCQkgKiBlZmZlY3RpdmVseSBpbWFnaW5lIHRoZSBs b2NhbF9jb25kcyBhbmQgam9pbl9jb25kcyBhcmUgYmVpbmcKISAJCSAqIGV2 YWx1YXRlZCByZW1vdGVseSwgdG9vLgogIAkJICovCiAgCQlzdGFydHVwX2Nv c3QgPSAwOwogIAkJcnVuX2Nvc3QgPSAwOwogIAkJcnVuX2Nvc3QgKz0gc2Vx X3BhZ2VfY29zdCAqIGJhc2VyZWwtPnBhZ2VzOwogIAohIAkJY29zdF9xdWFs X2V2YWwoJmpvaW5fY29zdCwgam9pbl9jb25kcywgcm9vdCk7CiEgCQlzdGFy dHVwX2Nvc3QgKz0KISAJCQkoYmFzZXJlbC0+YmFzZXJlc3RyaWN0Y29zdC5z dGFydHVwICsgam9pbl9jb3N0LnN0YXJ0dXApOwohIAkJY3B1X3Blcl90dXBs ZSA9IGNwdV90dXBsZV9jb3N0ICsKISAJCQkoYmFzZXJlbC0+YmFzZXJlc3Ry aWN0Y29zdC5wZXJfdHVwbGUgKyBqb2luX2Nvc3QucGVyX3R1cGxlKTsKICAJ CXJ1bl9jb3N0ICs9IGNwdV9wZXJfdHVwbGUgKiBiYXNlcmVsLT50dXBsZXM7 CiAgCiAgCQl0b3RhbF9jb3N0ID0gc3RhcnR1cF9jb3N0ICsgcnVuX2Nvc3Q7 CioqKiBhL2RvYy9zcmMvc2dtbC9mZHdoYW5kbGVyLnNnbWwKLS0tIGIvZG9j L3NyYy9zZ21sL2Zkd2hhbmRsZXIuc2dtbAoqKioqKioqKioqKioqKioKKioq IDE2MiwxNjcgKioqKiBHZXRGb3JlaWduUGF0aHMgKFBsYW5uZXJJbmZvICpy b290LAotLS0gMTYyLDE5OCAtLS0tCiAgCiAgICAgIDxwYXJhPgogIDxwcm9n cmFtbGlzdGluZz4KKyBGb3JlaWduUGF0aCAqCisgUmVwYXJhbWV0ZXJpemVG b3JlaWduUGF0aCAoUGxhbm5lckluZm8gKnJvb3QsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgUmVsT3B0SW5mbyAqYmFzZXJlbCwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICBPaWQgZm9yZWlnbnRhYmxlaWQsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgRm9yZWlnblBhdGggKnBhdGgsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVsaWRzIHJlcXVpcmVkX291 dGVyKTsKKyA8L3Byb2dyYW1saXN0aW5nPgorIAorICAgICAgQ3JlYXRlIGFu IGFjY2VzcyBwYXRoIGZvciBhIHNjYW4gb24gYSBmb3JlaWduIHRhYmxlIHVz aW5nIGpvaW4KKyAgICAgIGNsYXVzZXMsIHdoaWNoIGlzIGNhbGxlZCBhIDxx dW90ZT5wYXJhbWV0ZXJpemVkIHBhdGg8Lz4uCisgICAgICBUaGlzIGlzIGNh bGxlZCBkdXJpbmcgcXVlcnkgcGxhbm5pbmcuCisgICAgICBUaGUgcGFyYW1l dGVycyBhcmUgYXMgZm9yIDxmdW5jdGlvbj5HZXRGb3JlaWduUmVsU2l6ZTwv PiwgcGx1cworICAgICAgdGhlIDxzdHJ1Y3RuYW1lPkZvcmVpZ25QYXRoPC8+ IChwcmV2aW91c2x5IHByb2R1Y2VkIGJ5CisgICAgICA8ZnVuY3Rpb24+R2V0 Rm9yZWlnblBhdGhzPC8+KSwgYW5kIHRoZSBJRHMgb2YgYWxsIG90aGVyIHRh YmxlcworICAgICAgdGhhdCBwcm92aWRlIHRoZSBqb2luIGNsYXVzZXMuCisg ICAgIDwvcGFyYT4KKyAKKyAgICAgPHBhcmE+CisgICAgICBUaGlzIGZ1bmN0 aW9uIG11c3QgZ2VuZXJhdGUgYSBwYXJhbWV0ZXJpemVkIHBhdGggZm9yIGEg c2NhbiBvbiB0aGUKKyAgICAgIGZvcmVpZ24gdGFibGUuICBUaGUgcGFyYW1l dGVyaXplZCBwYXRoIG11c3QgY29udGFpbiBjb3N0IGVzdGltYXRlcywKKyAg ICAgIGFuZCBjYW4gY29udGFpbiBhbnkgRkRXLXByaXZhdGUgaW5mb3JtYXRp b24gdGhhdCBpcyBuZWVkZWQgdG8gaWRlbnRpZnkKKyAgICAgIHRoZSBzcGVj aWZpYyBzY2FuIG1ldGhvZCBpbnRlbmRlZC4gIFVubGlrZSB0aGUgb3RoZXIg c2Nhbi1yZWxhdGVkCisgICAgICBmdW5jdGlvbnMsIHRoaXMgZnVuY3Rpb24g aXMgb3B0aW9uYWwuCisgICAgIDwvcGFyYT4KKyAKKyAgICAgPHBhcmE+Cisg ICAgICBTZWUgPHhyZWYgbGlua2VuZD0iZmR3LXBsYW5uaW5nIj4gZm9yIGFk ZGl0aW9uYWwgaW5mb3JtYXRpb24uCisgICAgIDwvcGFyYT4KKyAKKyAgICAg PHBhcmE+CisgPHByb2dyYW1saXN0aW5nPgogIEZvcmVpZ25TY2FuICoKICBH ZXRGb3JlaWduUGxhbiAoUGxhbm5lckluZm8gKnJvb3QsCiAgICAgICAgICAg ICAgICAgIFJlbE9wdEluZm8gKmJhc2VyZWwsCioqKioqKioqKioqKioqKgoq KiogODA4LDgxNyAqKioqIEdldEZvcmVpZ25TZXJ2ZXJCeU5hbWUoY29uc3Qg Y2hhciAqbmFtZSwgYm9vbCBtaXNzaW5nX29rKTsKICAKICAgICAgPHBhcmE+ CiAgICAgICBUaGUgRkRXIGNhbGxiYWNrIGZ1bmN0aW9ucyA8ZnVuY3Rpb24+ R2V0Rm9yZWlnblJlbFNpemU8Lz4sCiEgICAgICA8ZnVuY3Rpb24+R2V0Rm9y ZWlnblBhdGhzPC8+LCA8ZnVuY3Rpb24+R2V0Rm9yZWlnblBsYW48Lz4sIGFu ZAohICAgICAgPGZ1bmN0aW9uPlBsYW5Gb3JlaWduTW9kaWZ5PC8+IG11c3Qg Zml0IGludG8gdGhlIHdvcmtpbmdzIG9mIHRoZQohICAgICAgPHByb2R1Y3Ru YW1lPlBvc3RncmVTUUw8Lz4gcGxhbm5lci4gIEhlcmUgYXJlIHNvbWUgbm90 ZXMgYWJvdXQgd2hhdAohICAgICAgdGhleSBtdXN0IGRvLgogICAgICA8L3Bh cmE+CiAgCiAgICAgIDxwYXJhPgotLS0gODM5LDg0OCAtLS0tCiAgCiAgICAg IDxwYXJhPgogICAgICAgVGhlIEZEVyBjYWxsYmFjayBmdW5jdGlvbnMgPGZ1 bmN0aW9uPkdldEZvcmVpZ25SZWxTaXplPC8+LAohICAgICAgPGZ1bmN0aW9u PkdldEZvcmVpZ25QYXRoczwvPiwgPGZ1bmN0aW9uPlJlcGFyYW1ldGVyaXpl Rm9yZWlnblBhdGg8Lz4sCiEgICAgICA8ZnVuY3Rpb24+R2V0Rm9yZWlnblBs YW48Lz4sIGFuZCA8ZnVuY3Rpb24+UGxhbkZvcmVpZ25Nb2RpZnk8Lz4gbXVz dCBmaXQKISAgICAgIGludG8gdGhlIHdvcmtpbmdzIG9mIHRoZSA8cHJvZHVj dG5hbWU+UG9zdGdyZVNRTDwvPiBwbGFubmVyLiAgSGVyZSBhcmUKISAgICAg IHNvbWUgbm90ZXMgYWJvdXQgd2hhdCB0aGV5IG11c3QgZG8uCiAgICAgIDwv cGFyYT4KICAKICAgICAgPHBhcmE+CioqKioqKioqKioqKioqKgoqKiogODQx LDg1NCAqKioqIEdldEZvcmVpZ25TZXJ2ZXJCeU5hbWUoY29uc3QgY2hhciAq bmFtZSwgYm9vbCBtaXNzaW5nX29rKTsKICAgICAgIHRvIGluaXRpYWxpemUg aXQgdG8gTlVMTCB3aGVuIHRoZSA8bGl0ZXJhbD5iYXNlcmVsPC8+IG5vZGUg aXMgY3JlYXRlZC4KICAgICAgIEl0IGlzIHVzZWZ1bCBmb3IgcGFzc2luZyBp bmZvcm1hdGlvbiBmb3J3YXJkIGZyb20KICAgICAgIDxmdW5jdGlvbj5HZXRG b3JlaWduUmVsU2l6ZTwvPiB0byA8ZnVuY3Rpb24+R2V0Rm9yZWlnblBhdGhz PC8+IGFuZC9vcgohICAgICAgPGZ1bmN0aW9uPkdldEZvcmVpZ25QYXRoczwv PiB0byA8ZnVuY3Rpb24+R2V0Rm9yZWlnblBsYW48Lz4sIHRoZXJlYnkKISAg ICAgIGF2b2lkaW5nIHJlY2FsY3VsYXRpb24uCiAgICAgIDwvcGFyYT4KICAK ICAgICAgPHBhcmE+CiEgICAgICA8ZnVuY3Rpb24+R2V0Rm9yZWlnblBhdGhz PC8+IGNhbiBpZGVudGlmeSB0aGUgbWVhbmluZyBvZiBkaWZmZXJlbnQKISAg ICAgIGFjY2VzcyBwYXRocyBieSBzdG9yaW5nIHByaXZhdGUgaW5mb3JtYXRp b24gaW4gdGhlCiEgICAgICA8c3RydWN0ZmllbGQ+ZmR3X3ByaXZhdGU8Lz4g ZmllbGQgb2YgPHN0cnVjdG5hbWU+Rm9yZWlnblBhdGg8Lz4gbm9kZXMuCiAg ICAgICA8c3RydWN0ZmllbGQ+ZmR3X3ByaXZhdGU8Lz4gaXMgZGVjbGFyZWQg YXMgYSA8dHlwZT5MaXN0PC8+IHBvaW50ZXIsIGJ1dAogICAgICAgY291bGQg YWN0dWFsbHkgY29udGFpbiBhbnl0aGluZyBzaW5jZSB0aGUgY29yZSBwbGFu bmVyIGRvZXMgbm90IHRvdWNoCiAgICAgICBpdC4gIEhvd2V2ZXIsIGJlc3Qg cHJhY3RpY2UgaXMgdG8gdXNlIGEgcmVwcmVzZW50YXRpb24gdGhhdCdzIGR1 bXBhYmxlCi0tLSA4NzIsODg4IC0tLS0KICAgICAgIHRvIGluaXRpYWxpemUg aXQgdG8gTlVMTCB3aGVuIHRoZSA8bGl0ZXJhbD5iYXNlcmVsPC8+IG5vZGUg aXMgY3JlYXRlZC4KICAgICAgIEl0IGlzIHVzZWZ1bCBmb3IgcGFzc2luZyBp bmZvcm1hdGlvbiBmb3J3YXJkIGZyb20KICAgICAgIDxmdW5jdGlvbj5HZXRG b3JlaWduUmVsU2l6ZTwvPiB0byA8ZnVuY3Rpb24+R2V0Rm9yZWlnblBhdGhz PC8+IGFuZC9vcgohICAgICAgPGZ1bmN0aW9uPkdldEZvcmVpZ25QYXRoczwv PiB0byA8ZnVuY3Rpb24+UmVwYXJhbWV0ZXJpemVGb3JlaWduUGF0aDwvPgoh ICAgICAgYW5kL29yCiEgICAgICA8ZnVuY3Rpb24+R2V0Rm9yZWlnblBhdGhz PC8+IG9yIDxmdW5jdGlvbj5SZXBhcmFtZXRlcml6ZUZvcmVpZ25QYXRoPC8+ CiEgICAgICB0byA8ZnVuY3Rpb24+R2V0Rm9yZWlnblBsYW48Lz4sIHRoZXJl YnkgYXZvaWRpbmcgcmVjYWxjdWxhdGlvbi4KICAgICAgPC9wYXJhPgogIAog ICAgICA8cGFyYT4KISAgICAgIDxmdW5jdGlvbj5HZXRGb3JlaWduUGF0aHM8 Lz4gb3IgPGZ1bmN0aW9uPlJlcGFyYW1ldGVyaXplRm9yZWlnblBhdGg8Lz4K ISAgICAgIGNhbiBpZGVudGlmeSB0aGUgbWVhbmluZyBvZiBkaWZmZXJlbnQg YWNjZXNzIHBhdGhzIGJ5IHN0b3JpbmcgcHJpdmF0ZQohICAgICAgaW5mb3Jt YXRpb24gaW4gdGhlIDxzdHJ1Y3RmaWVsZD5mZHdfcHJpdmF0ZTwvPiBmaWVs ZCBvZgohICAgICAgPHN0cnVjdG5hbWU+Rm9yZWlnblBhdGg8Lz4gbm9kZXMu CiAgICAgICA8c3RydWN0ZmllbGQ+ZmR3X3ByaXZhdGU8Lz4gaXMgZGVjbGFy ZWQgYXMgYSA8dHlwZT5MaXN0PC8+IHBvaW50ZXIsIGJ1dAogICAgICAgY291 bGQgYWN0dWFsbHkgY29udGFpbiBhbnl0aGluZyBzaW5jZSB0aGUgY29yZSBw bGFubmVyIGRvZXMgbm90IHRvdWNoCiAgICAgICBpdC4gIEhvd2V2ZXIsIGJl c3QgcHJhY3RpY2UgaXMgdG8gdXNlIGEgcmVwcmVzZW50YXRpb24gdGhhdCdz IGR1bXBhYmxlCioqKioqKioqKioqKioqKgoqKiogODkxLDkwMCAqKioqIEdl dEZvcmVpZ25TZXJ2ZXJCeU5hbWUoY29uc3QgY2hhciAqbmFtZSwgYm9vbCBt aXNzaW5nX29rKTsKICAgICAgIDxyZXBsYWNlYWJsZT5zdWJfZXhwcmVzc2lv bjwvPiwgd2hpY2ggaXQgZGV0ZXJtaW5lcyBjYW4gYmUgZXhlY3V0ZWQgb24K ICAgICAgIHRoZSByZW1vdGUgc2VydmVyIGdpdmVuIHRoZSBsb2NhbGx5LWV2 YWx1YXRlZCB2YWx1ZSBvZiB0aGUKICAgICAgIDxyZXBsYWNlYWJsZT5zdWJf ZXhwcmVzc2lvbjwvPi4gIFRoZSBhY3R1YWwgaWRlbnRpZmljYXRpb24gb2Yg c3VjaCBhCiEgICAgICBjbGF1c2Ugc2hvdWxkIGhhcHBlbiBkdXJpbmcgPGZ1 bmN0aW9uPkdldEZvcmVpZ25QYXRoczwvPiwgc2luY2UgaXQgd291bGQKISAg ICAgIGFmZmVjdCB0aGUgY29zdCBlc3RpbWF0ZSBmb3IgdGhlIHBhdGguICBU aGUgcGF0aCdzCiEgICAgICA8c3RydWN0ZmllbGQ+ZmR3X3ByaXZhdGU8Lz4g ZmllbGQgd291bGQgcHJvYmFibHkgaW5jbHVkZSBhIHBvaW50ZXIgdG8KISAg ICAgIHRoZSBpZGVudGlmaWVkIGNsYXVzZSdzIDxzdHJ1Y3RuYW1lPlJlc3Ry aWN0SW5mbzwvPiBub2RlLiAgVGhlbgogICAgICAgPGZ1bmN0aW9uPkdldEZv cmVpZ25QbGFuPC8+IHdvdWxkIHJlbW92ZSB0aGF0IGNsYXVzZSBmcm9tIDxs aXRlcmFsPnNjYW5fY2xhdXNlczwvPiwKICAgICAgIGJ1dCBhZGQgdGhlIDxy ZXBsYWNlYWJsZT5zdWJfZXhwcmVzc2lvbjwvPiB0byA8c3RydWN0ZmllbGQ+ ZmR3X2V4cHJzPC8+CiAgICAgICB0byBlbnN1cmUgdGhhdCBpdCBnZXRzIG1h c3NhZ2VkIGludG8gZXhlY3V0YWJsZSBmb3JtLiAgSXQgd291bGQgcHJvYmFi bHkKLS0tIDkyNSw5MzUgLS0tLQogICAgICAgPHJlcGxhY2VhYmxlPnN1Yl9l eHByZXNzaW9uPC8+LCB3aGljaCBpdCBkZXRlcm1pbmVzIGNhbiBiZSBleGVj dXRlZCBvbgogICAgICAgdGhlIHJlbW90ZSBzZXJ2ZXIgZ2l2ZW4gdGhlIGxv Y2FsbHktZXZhbHVhdGVkIHZhbHVlIG9mIHRoZQogICAgICAgPHJlcGxhY2Vh YmxlPnN1Yl9leHByZXNzaW9uPC8+LiAgVGhlIGFjdHVhbCBpZGVudGlmaWNh dGlvbiBvZiBzdWNoIGEKISAgICAgIGNsYXVzZSBzaG91bGQgaGFwcGVuIGR1 cmluZyA8ZnVuY3Rpb24+R2V0Rm9yZWlnblBhdGhzPC8+IG9yCiEgICAgICA8 ZnVuY3Rpb24+UmVwYXJhbWV0ZXJpemVGb3JlaWduUGF0aDwvPiwgc2luY2Ug aXQgd291bGQgYWZmZWN0IHRoZSBjb3N0CiEgICAgICBlc3RpbWF0ZSBmb3Ig dGhlIHBhdGguICBUaGUgcGF0aCdzIDxzdHJ1Y3RmaWVsZD5mZHdfcHJpdmF0 ZTwvPiBmaWVsZAohICAgICAgd291bGQgcHJvYmFibHkgaW5jbHVkZSBhIHBv aW50ZXIgdG8gdGhlIGlkZW50aWZpZWQgY2xhdXNlJ3MKISAgICAgIDxzdHJ1 Y3RuYW1lPlJlc3RyaWN0SW5mbzwvPiBub2RlLiAgVGhlbgogICAgICAgPGZ1 bmN0aW9uPkdldEZvcmVpZ25QbGFuPC8+IHdvdWxkIHJlbW92ZSB0aGF0IGNs YXVzZSBmcm9tIDxsaXRlcmFsPnNjYW5fY2xhdXNlczwvPiwKICAgICAgIGJ1 dCBhZGQgdGhlIDxyZXBsYWNlYWJsZT5zdWJfZXhwcmVzc2lvbjwvPiB0byA8 c3RydWN0ZmllbGQ+ZmR3X2V4cHJzPC8+CiAgICAgICB0byBlbnN1cmUgdGhh dCBpdCBnZXRzIG1hc3NhZ2VkIGludG8gZXhlY3V0YWJsZSBmb3JtLiAgSXQg d291bGQgcHJvYmFibHkKKioqIGEvZG9jL3NyYy9zZ21sL3JlZi9hbHRlcl9m b3JlaWduX3RhYmxlLnNnbWwKLS0tIGIvZG9jL3NyYy9zZ21sL3JlZi9hbHRl cl9mb3JlaWduX3RhYmxlLnNnbWwKKioqKioqKioqKioqKioqCioqKiA0Miw0 NyAqKioqIEFMVEVSIEZPUkVJR04gVEFCTEUgWyBJRiBFWElTVFMgXSA8cmVw bGFjZWFibGUgY2xhc3M9IlBBUkFNRVRFUiI+bmFtZTwvcmVwbGFjZWFiCi0t LSA0Miw1MSAtLS0tCiAgICAgIEFMVEVSIFsgQ09MVU1OIF0gPHJlcGxhY2Vh YmxlIGNsYXNzPSJQQVJBTUVURVIiPmNvbHVtbl9uYW1lPC9yZXBsYWNlYWJs ZT4gU0VUICggPHJlcGxhY2VhYmxlIGNsYXNzPSJQQVJBTUVURVIiPmF0dHJp YnV0ZV9vcHRpb248L3JlcGxhY2VhYmxlPiA9IDxyZXBsYWNlYWJsZSBjbGFz cz0iUEFSQU1FVEVSIj52YWx1ZTwvcmVwbGFjZWFibGU+IFssIC4uLiBdICkK ICAgICAgQUxURVIgWyBDT0xVTU4gXSA8cmVwbGFjZWFibGUgY2xhc3M9IlBB UkFNRVRFUiI+Y29sdW1uX25hbWU8L3JlcGxhY2VhYmxlPiBSRVNFVCAoIDxy ZXBsYWNlYWJsZSBjbGFzcz0iUEFSQU1FVEVSIj5hdHRyaWJ1dGVfb3B0aW9u PC9yZXBsYWNlYWJsZT4gWywgLi4uIF0gKQogICAgICBBTFRFUiBbIENPTFVN TiBdIDxyZXBsYWNlYWJsZSBjbGFzcz0iUEFSQU1FVEVSIj5jb2x1bW5fbmFt ZTwvcmVwbGFjZWFibGU+IE9QVElPTlMgKCBbIEFERCB8IFNFVCB8IERST1Ag XSA8cmVwbGFjZWFibGUgY2xhc3M9IlBBUkFNRVRFUiI+b3B0aW9uPC9yZXBs YWNlYWJsZT4gWyc8cmVwbGFjZWFibGUgY2xhc3M9IlBBUkFNRVRFUiI+dmFs dWU8L3JlcGxhY2VhYmxlPiddIFssIC4uLiBdKQorICAgICBBREQgPHJlcGxh Y2VhYmxlIGNsYXNzPSJQQVJBTUVURVIiPnRhYmxlX2NvbnN0cmFpbnQ8L3Jl cGxhY2VhYmxlPgorICAgICBEUk9QIENPTlNUUkFJTlQgWyBJRiBFWElTVFMg XSAgPHJlcGxhY2VhYmxlIGNsYXNzPSJQQVJBTUVURVIiPmNvbnN0cmFpbnRf bmFtZTwvcmVwbGFjZWFibGU+IFsgUkVTVFJJQ1QgfCBDQVNDQURFIF0KKyAg ICAgSU5IRVJJVCA8cmVwbGFjZWFibGUgY2xhc3M9IlBBUkFNRVRFUiI+cGFy ZW50X3RhYmxlPC9yZXBsYWNlYWJsZT4KKyAgICAgTk8gSU5IRVJJVCA8cmVw bGFjZWFibGUgY2xhc3M9IlBBUkFNRVRFUiI+cGFyZW50X3RhYmxlPC9yZXBs YWNlYWJsZT4KICAgICAgT1dORVIgVE8gPHJlcGxhY2VhYmxlIGNsYXNzPSJQ QVJBTUVURVIiPm5ld19vd25lcjwvcmVwbGFjZWFibGU+CiAgICAgIE9QVElP TlMgKCBbIEFERCB8IFNFVCB8IERST1AgXSA8cmVwbGFjZWFibGUgY2xhc3M9 IlBBUkFNRVRFUiI+b3B0aW9uPC9yZXBsYWNlYWJsZT4gWyc8cmVwbGFjZWFi bGUgY2xhc3M9IlBBUkFNRVRFUiI+dmFsdWU8L3JlcGxhY2VhYmxlPiddIFss IC4uLiBdKQogIDwvc3lub3BzaXM+CioqKioqKioqKioqKioqKgoqKiogMTQ5 LDE1NCAqKioqIEFMVEVSIEZPUkVJR04gVEFCTEUgWyBJRiBFWElTVFMgXSA8 cmVwbGFjZWFibGUgY2xhc3M9IlBBUkFNRVRFUiI+bmFtZTwvcmVwbGFjZWFi Ci0tLSAxNTMsMjAyIC0tLS0KICAgICA8L3Zhcmxpc3RlbnRyeT4KICAKICAg ICA8dmFybGlzdGVudHJ5PgorICAgICA8dGVybT48bGl0ZXJhbD5BREQgPHJl cGxhY2VhYmxlIGNsYXNzPSJQQVJBTUVURVIiPnRhYmxlX2NvbnN0cmFpbnQ8 L3JlcGxhY2VhYmxlPjwvbGl0ZXJhbD48L3Rlcm0+CisgICAgIDxsaXN0aXRl bT4KKyAgICAgIDxwYXJhPgorICAgICAgIFRoaXMgZm9ybSBhZGRzIGEgbmV3 IGNvbnN0cmFpbnQgdG8gYSB0YWJsZSB1c2luZyB0aGUgc2FtZSBzeW50YXgg YXMKKyAgICAgICA8eHJlZiBsaW5rZW5kPSJTUUwtQ1JFQVRFRk9SRUlHTlRB QkxFIj4uCisgICAgICAgVW5saWtlIHRoZSBjYXNlIHdoZW4gYWRkaW5nIGEg Y29uc3RyYWludCB0byBhIHJlZ3VsYXIgdGFibGUsIG5vdGhpbmcgaGFwcGVu cworICAgICAgIHRvIHRoZSB1bmRlcmx5aW5nIHN0b3JhZ2U6IHRoaXMgYWN0 aW9uIHNpbXBseSBkZWNsYXJlcyB0aGF0CisgICAgICAgc29tZSBuZXcgY29u c3RyYWludCBob2xkcyBmb3IgYWxsIHJvd3MgaW4gdGhlIGZvcmVpZ24gdGFi bGUuCisgICAgICA8L3BhcmE+CisgICAgIDwvbGlzdGl0ZW0+CisgICAgPC92 YXJsaXN0ZW50cnk+CisgCisgICAgPHZhcmxpc3RlbnRyeT4KKyAgICAgPHRl cm0+PGxpdGVyYWw+RFJPUCBDT05TVFJBSU5UIFsgSUYgRVhJU1RTIF08L2xp dGVyYWw+PC90ZXJtPgorICAgICA8bGlzdGl0ZW0+CisgICAgICA8cGFyYT4K KyAgICAgICBUaGlzIGZvcm0gZHJvcHMgdGhlIHNwZWNpZmllZCBjb25zdHJh aW50IG9uIGEgdGFibGUuCisgICAgICAgSWYgPGxpdGVyYWw+SUYgRVhJU1RT PC9saXRlcmFsPiBpcyBzcGVjaWZpZWQgYW5kIHRoZSBjb25zdHJhaW50Cisg ICAgICAgZG9lcyBub3QgZXhpc3QsIG5vIGVycm9yIGlzIHRocm93bi4gSW4g dGhpcyBjYXNlIGEgbm90aWNlIGlzIGlzc3VlZCBpbnN0ZWFkLgorICAgICAg PC9wYXJhPgorICAgICA8L2xpc3RpdGVtPgorICAgIDwvdmFybGlzdGVudHJ5 PgorIAorICAgIDx2YXJsaXN0ZW50cnk+CisgICAgIDx0ZXJtPjxsaXRlcmFs PklOSEVSSVQgPHJlcGxhY2VhYmxlIGNsYXNzPSJQQVJBTUVURVIiPnBhcmVu dF90YWJsZTwvcmVwbGFjZWFibGU+PC9saXRlcmFsPjwvdGVybT4KKyAgICAg PGxpc3RpdGVtPgorICAgICAgPHBhcmE+CisgICAgICAgVGhpcyBmb3JtIGFk ZHMgdGhlIHRhcmdldCBmb3JlaWduIHRhYmxlIGFzIGEgbmV3IGNoaWxkIG9m IHRoZSBzcGVjaWZpZWQKKyAgICAgICBwYXJlbnQgdGFibGUuICBUaGUgcGFy ZW50IHRhYmxlIG11c3QgYmUgYW4gb3JkaW5hcnkgdGFibGUuCisgICAgICA8 L3BhcmE+CisgICAgIDwvbGlzdGl0ZW0+CisgICAgPC92YXJsaXN0ZW50cnk+ CisgCisgICAgPHZhcmxpc3RlbnRyeT4KKyAgICAgPHRlcm0+PGxpdGVyYWw+ Tk8gSU5IRVJJVCA8cmVwbGFjZWFibGUgY2xhc3M9IlBBUkFNRVRFUiI+cGFy ZW50X3RhYmxlPC9yZXBsYWNlYWJsZT48L2xpdGVyYWw+PC90ZXJtPgorICAg ICA8bGlzdGl0ZW0+CisgICAgICA8cGFyYT4KKyAgICAgICBUaGlzIGZvcm0g cmVtb3ZlcyB0aGUgdGFyZ2V0IGZvcmVpZ24gdGFibGUgZnJvbSB0aGUgbGlz dCBvZiBjaGlsZHJlbiBvZgorICAgICAgIHRoZSBzcGVjaWZpZWQgcGFyZW50 IHRhYmxlLgorICAgICAgPC9wYXJhPgorICAgICA8L2xpc3RpdGVtPgorICAg IDwvdmFybGlzdGVudHJ5PgorIAorICAgIDx2YXJsaXN0ZW50cnk+CiAgICAg IDx0ZXJtPjxsaXRlcmFsPk9XTkVSPC9saXRlcmFsPjwvdGVybT4KICAgICAg PGxpc3RpdGVtPgogICAgICAgPHBhcmE+CioqKioqKioqKioqKioqKgoqKiog MjcwLDI3NSAqKioqIEFMVEVSIEZPUkVJR04gVEFCTEUgWyBJRiBFWElTVFMg XSA8cmVwbGFjZWFibGUgY2xhc3M9IlBBUkFNRVRFUiI+bmFtZTwvcmVwbGFj ZWFiCi0tLSAzMTgsMzQxIC0tLS0KICAgICAgIDwvdmFybGlzdGVudHJ5Pgog IAogICAgICAgPHZhcmxpc3RlbnRyeT4KKyAgICAgICA8dGVybT48cmVwbGFj ZWFibGUgY2xhc3M9IlBBUkFNRVRFUiI+dGFibGVfY29uc3RyYWludDwvcmVw bGFjZWFibGU+PC90ZXJtPgorICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAg PHBhcmE+CisgICAgICAgICBOZXcgdGFibGUgY29uc3RyYWludCBmb3IgdGhl IHRhYmxlLgorICAgICAgICA8L3BhcmE+CisgICAgICAgPC9saXN0aXRlbT4K KyAgICAgIDwvdmFybGlzdGVudHJ5PgorIAorICAgICAgPHZhcmxpc3RlbnRy eT4KKyAgICAgICA8dGVybT48cmVwbGFjZWFibGUgY2xhc3M9IlBBUkFNRVRF UiI+Y29uc3RyYWludF9uYW1lPC9yZXBsYWNlYWJsZT48L3Rlcm0+CisgICAg ICAgPGxpc3RpdGVtPgorICAgICAgICA8cGFyYT4KKyAgICAgICAgIE5hbWUg b2YgYW4gZXhpc3RpbmcgY29uc3RyYWludCB0byBkcm9wLgorICAgICAgICA8 L3BhcmE+CisgICAgICAgPC9saXN0aXRlbT4KKyAgICAgIDwvdmFybGlzdGVu dHJ5PgorIAorICAgICAgPHZhcmxpc3RlbnRyeT4KICAgICAgICA8dGVybT48 bGl0ZXJhbD5DQVNDQURFPC9saXRlcmFsPjwvdGVybT4KICAgICAgICA8bGlz dGl0ZW0+CiAgICAgICAgIDxwYXJhPgoqKioqKioqKioqKioqKioKKioqIDI5 MCwyOTUgKioqKiBBTFRFUiBGT1JFSUdOIFRBQkxFIFsgSUYgRVhJU1RTIF0g PHJlcGxhY2VhYmxlIGNsYXNzPSJQQVJBTUVURVIiPm5hbWU8L3JlcGxhY2Vh YgotLS0gMzU2LDM3MSAtLS0tCiAgICAgICA8L3Zhcmxpc3RlbnRyeT4KICAK ICAgICAgIDx2YXJsaXN0ZW50cnk+CisgICAgICAgPHRlcm0+PHJlcGxhY2Vh YmxlIGNsYXNzPSJQQVJBTUVURVIiPnBhcmVudF90YWJsZTwvcmVwbGFjZWFi bGU+PC90ZXJtPgorICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgPHBhcmE+ CisgICAgICAgICBBIHBhcmVudCB0YWJsZSB0byBhc3NvY2lhdGUgb3IgZGUt YXNzb2NpYXRlIHdpdGggdGhpcyBmb3JlaWduIHRhYmxlLgorICAgICAgICAg VGhlIHBhcmVudCB0YWJsZSBtdXN0IGJlIGFuIG9yZGluYXJ5IHRhYmxlLgor ICAgICAgICA8L3BhcmE+CisgICAgICAgPC9saXN0aXRlbT4KKyAgICAgIDwv dmFybGlzdGVudHJ5PgorIAorICAgICAgPHZhcmxpc3RlbnRyeT4KICAgICAg ICA8dGVybT48cmVwbGFjZWFibGUgY2xhc3M9IlBBUkFNRVRFUiI+bmV3X293 bmVyPC9yZXBsYWNlYWJsZT48L3Rlcm0+CiAgICAgICAgPGxpc3RpdGVtPgog ICAgICAgICA8cGFyYT4KKioqKioqKioqKioqKioqCioqKiAzMTksMzI4ICoq KiogQUxURVIgRk9SRUlHTiBUQUJMRSBbIElGIEVYSVNUUyBdIDxyZXBsYWNl YWJsZSBjbGFzcz0iUEFSQU1FVEVSIj5uYW1lPC9yZXBsYWNlYWIKICAgICA8 cGFyYT4KICAgICAgQ29uc2lzdGVuY3kgd2l0aCB0aGUgZm9yZWlnbiBzZXJ2 ZXIgaXMgbm90IGNoZWNrZWQgd2hlbiBhIGNvbHVtbiBpcyBhZGRlZAogICAg ICBvciByZW1vdmVkIHdpdGggPGxpdGVyYWw+QUREIENPTFVNTjwvbGl0ZXJh bD4gb3IKISAgICAgPGxpdGVyYWw+RFJPUCBDT0xVTU48L2xpdGVyYWw+LCBh IDxsaXRlcmFsPk5PVCBOVUxMPC8+IGNvbnN0cmFpbnQgaXMKISAgICAgYWRk ZWQsIG9yIGEgY29sdW1uIHR5cGUgaXMgY2hhbmdlZCB3aXRoIDxsaXRlcmFs PlNFVCBEQVRBIFRZUEU8Lz4uICBJdCBpcwohICAgICB0aGUgdXNlcidzIHJl c3BvbnNpYmlsaXR5IHRvIGVuc3VyZSB0aGF0IHRoZSB0YWJsZSBkZWZpbml0 aW9uIG1hdGNoZXMgdGhlCiEgICAgIHJlbW90ZSBzaWRlLgogICAgIDwvcGFy YT4KICAKICAgICA8cGFyYT4KLS0tIDM5NSw0MDQgLS0tLQogICAgIDxwYXJh PgogICAgICBDb25zaXN0ZW5jeSB3aXRoIHRoZSBmb3JlaWduIHNlcnZlciBp cyBub3QgY2hlY2tlZCB3aGVuIGEgY29sdW1uIGlzIGFkZGVkCiAgICAgIG9y IHJlbW92ZWQgd2l0aCA8bGl0ZXJhbD5BREQgQ09MVU1OPC9saXRlcmFsPiBv cgohICAgICA8bGl0ZXJhbD5EUk9QIENPTFVNTjwvbGl0ZXJhbD4sIGEgPGxp dGVyYWw+Tk9UIE5VTEw8Lz4gY29uc3RyYWludCBvcgohICAgICA8bGl0ZXJh bD5DSEVDSzwvPiBjb25zdHJhaW50IGlzIGFkZGVkLCBvciBhIGNvbHVtbiB0 eXBlIGlzIGNoYW5nZWQgd2l0aAohICAgICA8bGl0ZXJhbD5TRVQgREFUQSBU WVBFPC8+LiAgSXQgaXMgdGhlIHVzZXIncyByZXNwb25zaWJpbGl0eSB0byBl bnN1cmUgdGhhdAohICAgICB0aGUgdGFibGUgZGVmaW5pdGlvbiBtYXRjaGVz IHRoZSByZW1vdGUgc2lkZS4KICAgICA8L3BhcmE+CiAgCiAgICAgPHBhcmE+ CioqKiBhL2RvYy9zcmMvc2dtbC9yZWYvYWx0ZXJfdGFibGUuc2dtbAotLS0g Yi9kb2Mvc3JjL3NnbWwvcmVmL2FsdGVyX3RhYmxlLnNnbWwKKioqKioqKioq KioqKioqCioqKiA5NjcsOTcyICoqKiogQUxURVIgVEFCTEUgWyBJRiBFWElT VFMgXSA8cmVwbGFjZWFibGUgY2xhc3M9IlBBUkFNRVRFUiI+bmFtZTwvcmVw bGFjZWFibGU+Ci0tLSA5NjcsOTc5IC0tLS0KICAgICA8L3BhcmE+CiAgCiAg ICAgPHBhcmE+CisgICAgIElmIGEgdGFibGUgaGFzIGFueSBkZXNjZW5kYW50 IHRhYmxlcyB0aGF0IGFyZSBmb3JlaWduLCBhIHJlY3Vyc2l2ZQorICAgICA8 bGl0ZXJhbD5TRVQgU1RPUkFHRTwvbGl0ZXJhbD4gb3BlcmF0aW9uIHdpbGwg YmUgcmVqZWN0ZWQgc2luY2UgaXQKKyAgICAgaXMgbm90IHBlcm1pdHRlZCB0 byBhZGQgYW4gPGxpdGVyYWw+b2lkPC9saXRlcmFsPiBzeXN0ZW0gY29sdW1u IHRvCisgICAgIGZvcmVpZ24gdGFibGVzLgorICAgIDwvcGFyYT4KKyAKKyAg ICA8cGFyYT4KICAgICAgVGhlIDxsaXRlcmFsPlRSSUdHRVI8Lz4sIDxsaXRl cmFsPkNMVVNURVI8Lz4sIDxsaXRlcmFsPk9XTkVSPC8+LAogICAgICBhbmQg PGxpdGVyYWw+VEFCTEVTUEFDRTwvPiBhY3Rpb25zIG5ldmVyIHJlY3Vyc2Ug dG8gZGVzY2VuZGFudCB0YWJsZXM7CiAgICAgIHRoYXQgaXMsIHRoZXkgYWx3 YXlzIGFjdCBhcyB0aG91Z2ggPGxpdGVyYWw+T05MWTwvPiB3ZXJlIHNwZWNp ZmllZC4KKioqKioqKioqKioqKioqCioqKiA5NzUsOTgwICoqKiogQUxURVIg VEFCTEUgWyBJRiBFWElTVFMgXSA8cmVwbGFjZWFibGUgY2xhc3M9IlBBUkFN RVRFUiI+bmFtZTwvcmVwbGFjZWFibGU+Ci0tLSA5ODIsMTAwMCAtLS0tCiAg ICAgPC9wYXJhPgogIAogICAgIDxwYXJhPgorICAgICBXaGVuIGFkZGluZyBh IDxsaXRlcmFsPkNIRUNLPC8+IGNvbnN0cmFpbnQgd2l0aCB0aGUgPGxpdGVy YWw+Tk9UIFZBTElECisgICAgIDwvbGl0ZXJhbD4gb3B0aW9uIHJlY3Vyc2l2 ZWx5LCBhbiBpbmhlcml0ZWQgY29uc3RyYWludCBvbiBhIGRlc2NlbmRhbnQK KyAgICAgdGFibGUgdGhhdCBpcyBmb3JlaWduIHdpbGwgYmUgbWFya2VkIHZh bGlkIHdpdGhvdXQgY2hlY2tpbmcKKyAgICAgY29uc2lzdGVuY3kgd2l0aCB0 aGUgZm9yZWlnbiBzZXJ2ZXIuCisgICAgPC9wYXJhPgorIAorICAgIDxwYXJh PgorICAgICBBIHJlY3Vyc2l2ZSA8bGl0ZXJhbD5TRVQgU1RPUkFHRTwvbGl0 ZXJhbD4gb3BlcmF0aW9uIHdpbGwgbWFrZSB0aGUKKyAgICAgc3RvcmFnZSBt b2RlIGZvciBhIGRlc2NlbmRhbnQgdGFibGUncyBjb2x1bW4gdW5jaGFuZ2Vk IGlmIHRoZSB0YWJsZSBpcworICAgICBmb3JlaWduLgorICAgIDwvcGFyYT4K KyAKKyAgICA8cGFyYT4KICAgICAgQ2hhbmdpbmcgYW55IHBhcnQgb2YgYSBz eXN0ZW0gY2F0YWxvZyB0YWJsZSBpcyBub3QgcGVybWl0dGVkLgogICAgIDwv cGFyYT4KICAKKioqIGEvZG9jL3NyYy9zZ21sL3JlZi9hbmFseXplLnNnbWwK LS0tIGIvZG9jL3NyYy9zZ21sL3JlZi9hbmFseXplLnNnbWwKKioqKioqKioq KioqKioqCioqKiAyMDAsMjA1ICoqKiogQU5BTFlaRSBbIFZFUkJPU0UgXSBb IDxyZXBsYWNlYWJsZSBjbGFzcz0iUEFSQU1FVEVSIj50YWJsZV9uYW1lPC9y ZXBsYWNlYWJsZT4gWwotLS0gMjAwLDIxMiAtLS0tCiAgICA8L3BhcmE+CiAg CiAgICA8cGFyYT4KKyAgICAgVGhlIGluaGVyaXRhbmNlIHN0YXRpc3RpY3Mg Zm9yIGEgcGFyZW50IHRhYmxlIHRoYXQgY29udGFpbnMgb25lIG9yIG1vcmUK KyAgICAgY2hpbGRyZW4gdGhhdCBhcmUgZm9yZWlnbiB0YWJsZXMgYXJlIGNv bGxlY3RlZCBvbmx5IHdoZW4gZXhwbGljaXRseQorICAgICBzZWxlY3RlZC4g IElmIHRoZSBmb3JlaWduIHRhYmxlJ3Mgd3JhcHBlciBkb2VzIG5vdCBzdXBw b3J0CisgICAgIDxjb21tYW5kPkFOQUxZWkU8L2NvbW1hbmQ+LCB0aGUgY29t bWFuZCBwcmludHMgYSB3YXJuaW5nIGFuZCBkb2VzIG5vdGhpbmcuCisgICA8 L3BhcmE+CisgCisgICA8cGFyYT4KICAgICAgSWYgdGhlIHRhYmxlIGJlaW5n IGFuYWx5emVkIGlzIGNvbXBsZXRlbHkgZW1wdHksIDxjb21tYW5kPkFOQUxZ WkU8L2NvbW1hbmQ+CiAgICAgIHdpbGwgbm90IHJlY29yZCBuZXcgc3RhdGlz dGljcyBmb3IgdGhhdCB0YWJsZS4gIEFueSBleGlzdGluZyBzdGF0aXN0aWNz CiAgICAgIHdpbGwgYmUgcmV0YWluZWQuCioqKiBhL2RvYy9zcmMvc2dtbC9y ZWYvY3JlYXRlX2ZvcmVpZ25fdGFibGUuc2dtbAotLS0gYi9kb2Mvc3JjL3Nn bWwvcmVmL2NyZWF0ZV9mb3JlaWduX3RhYmxlLnNnbWwKKioqKioqKioqKioq KioqCioqKiAxOSwyNyAqKioqCiAgIDxyZWZzeW5vcHNpc2Rpdj4KICA8c3lu b3BzaXM+CiAgQ1JFQVRFIEZPUkVJR04gVEFCTEUgWyBJRiBOT1QgRVhJU1RT IF0gPHJlcGxhY2VhYmxlIGNsYXNzPSJQQVJBTUVURVIiPnRhYmxlX25hbWU8 L3JlcGxhY2VhYmxlPiAoIFsKISAgICAgPHJlcGxhY2VhYmxlIGNsYXNzPSJQ QVJBTUVURVIiPmNvbHVtbl9uYW1lPC9yZXBsYWNlYWJsZT4gPHJlcGxhY2Vh YmxlIGNsYXNzPSJQQVJBTUVURVIiPmRhdGFfdHlwZTwvcmVwbGFjZWFibGU+ IFsgT1BUSU9OUyAoIDxyZXBsYWNlYWJsZSBjbGFzcz0iUEFSQU1FVEVSIj5v cHRpb248L3JlcGxhY2VhYmxlPiAnPHJlcGxhY2VhYmxlIGNsYXNzPSJQQVJB TUVURVIiPnZhbHVlPC9yZXBsYWNlYWJsZT4nIFssIC4uLiBdICkgXSBbIENP TExBVEUgPHJlcGxhY2VhYmxlPmNvbGxhdGlvbjwvcmVwbGFjZWFibGU+IF0g WyA8cmVwbGFjZWFibGUgY2xhc3M9IlBBUkFNRVRFUiI+Y29sdW1uX2NvbnN0 cmFpbnQ8L3JlcGxhY2VhYmxlPiBbIC4uLiBdIF0KICAgICAgWywgLi4uIF0K ICBdICkKICAgIFNFUlZFUiA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRl ciI+c2VydmVyX25hbWU8L3JlcGxhY2VhYmxlPgogIFsgT1BUSU9OUyAoIDxy ZXBsYWNlYWJsZSBjbGFzcz0iUEFSQU1FVEVSIj5vcHRpb248L3JlcGxhY2Vh YmxlPiAnPHJlcGxhY2VhYmxlIGNsYXNzPSJQQVJBTUVURVIiPnZhbHVlPC9y ZXBsYWNlYWJsZT4nIFssIC4uLiBdICkgXQogIAotLS0gMTksMjkgLS0tLQog ICA8cmVmc3lub3BzaXNkaXY+CiAgPHN5bm9wc2lzPgogIENSRUFURSBGT1JF SUdOIFRBQkxFIFsgSUYgTk9UIEVYSVNUUyBdIDxyZXBsYWNlYWJsZSBjbGFz cz0iUEFSQU1FVEVSIj50YWJsZV9uYW1lPC9yZXBsYWNlYWJsZT4gKCBbCiEg ICB7IDxyZXBsYWNlYWJsZSBjbGFzcz0iUEFSQU1FVEVSIj5jb2x1bW5fbmFt ZTwvcmVwbGFjZWFibGU+IDxyZXBsYWNlYWJsZSBjbGFzcz0iUEFSQU1FVEVS Ij5kYXRhX3R5cGU8L3JlcGxhY2VhYmxlPiBbIE9QVElPTlMgKCA8cmVwbGFj ZWFibGUgY2xhc3M9IlBBUkFNRVRFUiI+b3B0aW9uPC9yZXBsYWNlYWJsZT4g JzxyZXBsYWNlYWJsZSBjbGFzcz0iUEFSQU1FVEVSIj52YWx1ZTwvcmVwbGFj ZWFibGU+JyBbLCAuLi4gXSApIF0gWyBDT0xMQVRFIDxyZXBsYWNlYWJsZT5j b2xsYXRpb248L3JlcGxhY2VhYmxlPiBdIFsgPHJlcGxhY2VhYmxlIGNsYXNz PSJQQVJBTUVURVIiPmNvbHVtbl9jb25zdHJhaW50PC9yZXBsYWNlYWJsZT4g WyAuLi4gXSBdCiEgICAgIHwgPHJlcGxhY2VhYmxlPnRhYmxlX2NvbnN0cmFp bnQ8L3JlcGxhY2VhYmxlPiB9CiAgICAgIFssIC4uLiBdCiAgXSApCisgWyBJ TkhFUklUUyAoIDxyZXBsYWNlYWJsZT5wYXJlbnRfdGFibGU8L3JlcGxhY2Vh YmxlPiBbLCAuLi4gXSApIF0KICAgIFNFUlZFUiA8cmVwbGFjZWFibGUgY2xh c3M9InBhcmFtZXRlciI+c2VydmVyX25hbWU8L3JlcGxhY2VhYmxlPgogIFsg T1BUSU9OUyAoIDxyZXBsYWNlYWJsZSBjbGFzcz0iUEFSQU1FVEVSIj5vcHRp b248L3JlcGxhY2VhYmxlPiAnPHJlcGxhY2VhYmxlIGNsYXNzPSJQQVJBTUVU RVIiPnZhbHVlPC9yZXBsYWNlYWJsZT4nIFssIC4uLiBdICkgXQogIAoqKioq KioqKioqKioqKioKKioqIDMwLDM2ICoqKiogQ1JFQVRFIEZPUkVJR04gVEFC TEUgWyBJRiBOT1QgRVhJU1RTIF0gPHJlcGxhY2VhYmxlIGNsYXNzPSJQQVJB TUVURVIiPnRhYmxlX25hbWUKLS0tIDMyLDQ0IC0tLS0KICBbIENPTlNUUkFJ TlQgPHJlcGxhY2VhYmxlIGNsYXNzPSJQQVJBTUVURVIiPmNvbnN0cmFpbnRf bmFtZTwvcmVwbGFjZWFibGU+IF0KICB7IE5PVCBOVUxMIHwKICAgIE5VTEwg fAorICAgQ0hFQ0sgKCA8cmVwbGFjZWFibGUgY2xhc3M9IlBBUkFNRVRFUiI+ ZXhwcmVzc2lvbjwvcmVwbGFjZWFibGU+ICkgfAogICAgREVGQVVMVCA8cmVw bGFjZWFibGU+ZGVmYXVsdF9leHByPC9yZXBsYWNlYWJsZT4gfQorIAorIDxw aHJhc2U+YW5kIDxyZXBsYWNlYWJsZSBjbGFzcz0iUEFSQU1FVEVSIj50YWJs ZV9jb25zdHJhaW50PC9yZXBsYWNlYWJsZT4gaXM6PC9waHJhc2U+CisgCisg WyBDT05TVFJBSU5UIDxyZXBsYWNlYWJsZSBjbGFzcz0iUEFSQU1FVEVSIj5j b25zdHJhaW50X25hbWU8L3JlcGxhY2VhYmxlPiBdCisgeyBDSEVDSyAoIDxy ZXBsYWNlYWJsZSBjbGFzcz0iUEFSQU1FVEVSIj5leHByZXNzaW9uPC9yZXBs YWNlYWJsZT4gKSB9CiAgPC9zeW5vcHNpcz4KICAgPC9yZWZzeW5vcHNpc2Rp dj4KICAKKioqKioqKioqKioqKioqCioqKiAxMzgsMTQzICoqKiogQ1JFQVRF IEZPUkVJR04gVEFCTEUgWyBJRiBOT1QgRVhJU1RTIF0gPHJlcGxhY2VhYmxl IGNsYXNzPSJQQVJBTUVURVIiPnRhYmxlX25hbWUKLS0tIDE0NiwxNzIgLS0t LQogICAgIDwvdmFybGlzdGVudHJ5PgogIAogICAgIDx2YXJsaXN0ZW50cnk+ CisgICAgIDx0ZXJtPjxsaXRlcmFsPkNIRUNLICggPHJlcGxhY2VhYmxlIGNs YXNzPSJQQVJBTUVURVIiPmV4cHJlc3Npb248L3JlcGxhY2VhYmxlPiApPC9s aXRlcmFsPjwvdGVybT4KKyAgICAgPGxpc3RpdGVtPgorICAgICAgPHBhcmE+ CisgICAgICAgVGhlIDxsaXRlcmFsPkNIRUNLPC8+IGNsYXVzZSBzcGVjaWZp ZXMgYW4gZXhwcmVzc2lvbiBwcm9kdWNpbmcgYQorICAgICAgIEJvb2xlYW4g cmVzdWx0IHdoaWNoIGVhY2ggcm93IG11c3Qgc2F0aXNmeS4KKyAgICAgICBF eHByZXNzaW9ucyBldmFsdWF0aW5nIHRvIFRSVUUgb3IgVU5LTk9XTiBzdWNj ZWVkLgorICAgICAgIEEgY2hlY2sgY29uc3RyYWludCBzcGVjaWZpZWQgYXMg YSBjb2x1bW4gY29uc3RyYWludCBzaG91bGQKKyAgICAgICByZWZlcmVuY2Ug dGhhdCBjb2x1bW4ncyB2YWx1ZSBvbmx5LCB3aGlsZSBhbiBleHByZXNzaW9u CisgICAgICAgYXBwZWFyaW5nIGluIGEgdGFibGUgY29uc3RyYWludCBjYW4g cmVmZXJlbmNlIG11bHRpcGxlIGNvbHVtbnMuCisgICAgICA8L3BhcmE+Cisg CisgICAgICA8cGFyYT4KKyAgICAgICBDdXJyZW50bHksIDxsaXRlcmFsPkNI RUNLPC9saXRlcmFsPiBleHByZXNzaW9ucyBjYW5ub3QgY29udGFpbgorICAg ICAgIHN1YnF1ZXJpZXMgbm9yIHJlZmVyIHRvIHZhcmlhYmxlcyBvdGhlciB0 aGFuIGNvbHVtbnMgb2YgdGhlCisgICAgICAgY3VycmVudCByb3cuICBUaGUg c3lzdGVtIGNvbHVtbiA8bGl0ZXJhbD50YWJsZW9pZDwvbGl0ZXJhbD4KKyAg ICAgICBtYXkgYmUgcmVmZXJlbmNlZCwgYnV0IG5vdCBhbnkgb3RoZXIgc3lz dGVtIGNvbHVtbi4KKyAgICAgIDwvcGFyYT4KKyAgICAgPC9saXN0aXRlbT4K KyAgICA8L3Zhcmxpc3RlbnRyeT4KKyAKKyAgICA8dmFybGlzdGVudHJ5Pgog ICAgICA8dGVybT48bGl0ZXJhbD5ERUZBVUxUCiAgICAgIDxyZXBsYWNlYWJs ZT5kZWZhdWx0X2V4cHI8L3JlcGxhY2VhYmxlPjwvbGl0ZXJhbD48L3Rlcm0+ CiAgICAgIDxsaXN0aXRlbT4KKioqKioqKioqKioqKioqCioqKiAxNTksMTY0 ICoqKiogQ1JFQVRFIEZPUkVJR04gVEFCTEUgWyBJRiBOT1QgRVhJU1RTIF0g PHJlcGxhY2VhYmxlIGNsYXNzPSJQQVJBTUVURVIiPnRhYmxlX25hbWUKLS0t IDE4OCwyMDUgLS0tLQogICAgIDwvdmFybGlzdGVudHJ5PgogIAogICAgIDx2 YXJsaXN0ZW50cnk+CisgICAgIDx0ZXJtPjxyZXBsYWNlYWJsZSBjbGFzcz0i UEFSQU1FVEVSIj5wYXJlbnRfdGFibGU8L3JlcGxhY2VhYmxlPjwvdGVybT4K KyAgICAgPGxpc3RpdGVtPgorICAgICAgPHBhcmE+CisgICAgICAgVGhlIG5h bWUgb2YgYW4gZXhpc3RpbmcgdGFibGUgZnJvbSB3aGljaCB0aGUgbmV3IGZv cmVpZ24gdGFibGUKKyAgICAgICBhdXRvbWF0aWNhbGx5IGluaGVyaXRzIGFs bCBjb2x1bW5zLiAgVGhlIHNwZWNpZmllZCBwYXJlbnQgdGFibGUKKyAgICAg ICBtdXN0IGJlIGFuIG9yZGluYXJ5IHRhYmxlLiAgU2VlIDx4cmVmIGxpbmtl bmQ9ImRkbC1pbmhlcml0Ij4gZm9yIHRoZQorICAgICAgIGRldGFpbHMgb2Yg dGFibGUgaW5oZXJpdGFuY2UuCisgICAgICA8L3BhcmE+CisgICAgIDwvbGlz dGl0ZW0+CisgICAgPC92YXJsaXN0ZW50cnk+CisgCisgICAgPHZhcmxpc3Rl bnRyeT4KICAgICAgPHRlcm0+PHJlcGxhY2VhYmxlIGNsYXNzPSJQQVJBTUVU RVIiPnNlcnZlcl9uYW1lPC9yZXBsYWNlYWJsZT48L3Rlcm0+CiAgICAgIDxs aXN0aXRlbT4KICAgICAgIDxwYXJhPgoqKioqKioqKioqKioqKioKKioqIDE4 NywxOTIgKioqKiBDUkVBVEUgRk9SRUlHTiBUQUJMRSBbIElGIE5PVCBFWElT VFMgXSA8cmVwbGFjZWFibGUgY2xhc3M9IlBBUkFNRVRFUiI+dGFibGVfbmFt ZQotLS0gMjI4LDI1MSAtLS0tCiAgCiAgIDwvcmVmc2VjdDE+CiAgCisgIDxy ZWZzZWN0MT4KKyAgIDx0aXRsZT5Ob3RlczwvdGl0bGU+CisgCisgICAgPHBh cmE+CisgICAgIENvbnN0cmFpbnRzIG9uIGZvcmVpZ24gdGFibGVzIGFyZSBu b3QgZW5mb3JjZWQgb24gaW5zZXJ0IG9yIHVwZGF0ZS4KKyAgICAgVGhvc2Ug ZGVmaW5pdGlvbnMgc2ltcGx5IGRlY2xhcmUgdGhlIGNvbnN0cmFpbnRzIGhv bGQgZm9yIGFsbCByb3dzCisgICAgIGluIHRoZSBmb3JlaWduIHRhYmxlcy4g IEl0IGlzIHRoZSB1c2VyJ3MgcmVzcG9uc2liaWxpdHkgdG8gZW5zdXJlCisg ICAgIHRoYXQgdGhvc2UgZGVmaW5pdGlvbnMgbWF0Y2ggdGhlIHJlbW90ZSBz aWRlLiAgU3VjaCBjb25zdHJhaW50cyBhcmUKKyAgICAgdXNlZCBmb3Igc29t ZSBraW5kIG9mIHF1ZXJ5IG9wdGltaXphdGlvbiBzdWNoIGFzIGNvbnN0cmFp bnQgZXhjbHVzaW9uCisgICAgIGZvciBwYXJ0aXRpb25lZCB0YWJsZXMgKHNl ZSA8eHJlZiBsaW5rZW5kPSJkZGwtcGFydGl0aW9uaW5nIj4pLgorICAgIDwv cGFyYT4KKyAKKyAgICA8cGFyYT4KKyAgICAgU2luY2UgaXQgaXMgbm90IHBl cm1pdHRlZCB0byBhZGQgYW4gPGxpdGVyYWw+b2lkPC8+IHN5c3RlbSBjb2x1 bW4gdG8KKyAgICAgZm9yZWlnbiB0YWJsZXMsIHRoZSBjb21tYW5kIHdpbGwg YmUgcmVqZWN0ZWQgaWYgYW55IHBhcmVudCB0YWJsZXMKKyAgICAgaGF2ZSA8 bGl0ZXJhbD5vaWQ8Lz4gc3lzdGVtIGNvbHVtbnMuCisgICAgPC9wYXJhPgor ICA8L3JlZnNlY3QxPgogIAogICA8cmVmc2VjdDEgaWQ9IlNRTC1DUkVBVEVG T1JFSUdOVEFCTEUtZXhhbXBsZXMiPgogICAgPHRpdGxlPkV4YW1wbGVzPC90 aXRsZT4KKioqIGEvc3JjL2JhY2tlbmQvY2F0YWxvZy9oZWFwLmMKLS0tIGIv c3JjL2JhY2tlbmQvY2F0YWxvZy9oZWFwLmMKKioqKioqKioqKioqKioqCioq KiAyMjE3LDIyMjIgKioqKiBBZGRSZWxhdGlvbk5ld0NvbnN0cmFpbnRzKFJl bGF0aW9uIHJlbCwKLS0tIDIyMTcsMjIyOCAtLS0tCiAgCQlpZiAoY2RlZi0+ Y29udHlwZSAhPSBDT05TVFJfQ0hFQ0spCiAgCQkJY29udGludWU7CiAgCisg CQlpZiAoY2RlZi0+aXNfbm9faW5oZXJpdCAmJgorIAkJCXJlbC0+cmRfcmVs LT5yZWxraW5kID09IFJFTEtJTkRfRk9SRUlHTl9UQUJMRSkKKyAJCQllcmVw b3J0KEVSUk9SLAorIAkJCQkJKGVycmNvZGUoRVJSQ09ERV9GRUFUVVJFX05P VF9TVVBQT1JURUQpLAorIAkJCQkJIGVycm1zZygiQ0hFQ0sgY29uc3RyYWlu dHMgb24gZm9yZWlnbiB0YWJsZXMgY2Fubm90IGJlIG1hcmtlZCBOTyBJTkhF UklUIikpKTsKKyAKICAJCWlmIChjZGVmLT5yYXdfZXhwciAhPSBOVUxMKQog IAkJewogIAkJCUFzc2VydChjZGVmLT5jb29rZWRfZXhwciA9PSBOVUxMKTsK KioqIGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvYW5hbHl6ZS5jCi0tLSBiL3Ny Yy9iYWNrZW5kL2NvbW1hbmRzL2FuYWx5emUuYwoqKioqKioqKioqKioqKioK KioqIDgyLDg3ICoqKiogaW50CQkJZGVmYXVsdF9zdGF0aXN0aWNzX3Rhcmdl dCA9IDEwMDsKLS0tIDgyLDg4IC0tLS0KICAKICAvKiBBIGZldyB2YXJpYWJs ZXMgdGhhdCBkb24ndCBzZWVtIHdvcnRoIHBhc3NpbmcgYXJvdW5kIGFzIHBh cmFtZXRlcnMgKi8KICBzdGF0aWMgTWVtb3J5Q29udGV4dCBhbmxfY29udGV4 dCA9IE5VTEw7Cisgc3RhdGljIFZhY3V1bU1vZGUgdmFjX21vZGU7CiAgc3Rh dGljIEJ1ZmZlckFjY2Vzc1N0cmF0ZWd5IHZhY19zdHJhdGVneTsKICAKICAK KioqKioqKioqKioqKioqCioqKiAxMTUsMTIxICoqKiogc3RhdGljIERhdHVt IGluZF9mZXRjaF9mdW5jKFZhY0F0dHJTdGF0c1Agc3RhdHMsIGludCByb3du dW0sIGJvb2wgKmlzTnVsbCk7CiAgICoJYW5hbHl6ZV9yZWwoKSAtLSBhbmFs eXplIG9uZSByZWxhdGlvbgogICAqLwogIHZvaWQKISBhbmFseXplX3JlbChP aWQgcmVsaWQsIFZhY3V1bVN0bXQgKnZhY3N0bXQsIEJ1ZmZlckFjY2Vzc1N0 cmF0ZWd5IGJzdHJhdGVneSkKICB7CiAgCVJlbGF0aW9uCW9uZXJlbDsKICAJ aW50CQkJZWxldmVsOwotLS0gMTE2LDEyNSAtLS0tCiAgICoJYW5hbHl6ZV9y ZWwoKSAtLSBhbmFseXplIG9uZSByZWxhdGlvbgogICAqLwogIHZvaWQKISBh bmFseXplX3JlbChPaWQgcmVsaWQsCiEgCQkJVmFjdXVtU3RtdCAqdmFjc3Rt dCwKISAJCQlWYWN1dW1Nb2RlIHZhY21vZGUsCiEgCQkJQnVmZmVyQWNjZXNz U3RyYXRlZ3kgYnN0cmF0ZWd5KQogIHsKICAJUmVsYXRpb24Jb25lcmVsOwog IAlpbnQJCQllbGV2ZWw7CioqKioqKioqKioqKioqKgoqKiogMTI5LDEzNCAq KioqIGFuYWx5emVfcmVsKE9pZCByZWxpZCwgVmFjdXVtU3RtdCAqdmFjc3Rt dCwgQnVmZmVyQWNjZXNzU3RyYXRlZ3kgYnN0cmF0ZWd5KQotLS0gMTMzLDEz OSAtLS0tCiAgCQllbGV2ZWwgPSBERUJVRzI7CiAgCiAgCS8qIFNldCB1cCBz dGF0aWMgdmFyaWFibGVzICovCisgCXZhY19tb2RlID0gdmFjbW9kZTsKICAJ dmFjX3N0cmF0ZWd5ID0gYnN0cmF0ZWd5OwogIAogIAkvKgoqKioqKioqKioq KioqKioKKioqIDE0NTIsMTQ1NyAqKioqIGFjcXVpcmVfaW5oZXJpdGVkX3Nh bXBsZV9yb3dzKFJlbGF0aW9uIG9uZXJlbCwgaW50IGVsZXZlbCwKLS0tIDE0 NTcsMTQ2MyAtLS0tCiAgewogIAlMaXN0CSAgICp0YWJsZU9JRHM7CiAgCVJl bGF0aW9uICAgKnJlbHM7CisgCUFjcXVpcmVTYW1wbGVSb3dzRnVuYyAqYWNx dWlyZWZ1bmM7CiAgCWRvdWJsZQkgICAqcmVsYmxvY2tzOwogIAlkb3VibGUJ CXRvdGFsYmxvY2tzOwogIAlpbnQJCQludW1yb3dzLAoqKioqKioqKioqKioq KioKKioqIDE0ODYsMTQ5MSAqKioqIGFjcXVpcmVfaW5oZXJpdGVkX3NhbXBs ZV9yb3dzKFJlbGF0aW9uIG9uZXJlbCwgaW50IGVsZXZlbCwKLS0tIDE0OTIs MTQ5OSAtLS0tCiAgCSAqIEJsb2NrTnVtYmVyLCBzbyB3ZSB1c2UgZG91Ymxl IGFyaXRobWV0aWMuCiAgCSAqLwogIAlyZWxzID0gKFJlbGF0aW9uICopIHBh bGxvYyhsaXN0X2xlbmd0aCh0YWJsZU9JRHMpICogc2l6ZW9mKFJlbGF0aW9u KSk7CisgCWFjcXVpcmVmdW5jID0gKEFjcXVpcmVTYW1wbGVSb3dzRnVuYyAq KSBwYWxsb2MobGlzdF9sZW5ndGgodGFibGVPSURzKQorIAkJCQkJCQkJCQkJ KiBzaXplb2YoQWNxdWlyZVNhbXBsZVJvd3NGdW5jKSk7CiAgCXJlbGJsb2Nr cyA9IChkb3VibGUgKikgcGFsbG9jKGxpc3RfbGVuZ3RoKHRhYmxlT0lEcykg KiBzaXplb2YoZG91YmxlKSk7CiAgCXRvdGFsYmxvY2tzID0gMDsKICAJbnJl bHMgPSAwOwoqKioqKioqKioqKioqKioKKioqIDE1MDcsMTUxMyAqKioqIGFj cXVpcmVfaW5oZXJpdGVkX3NhbXBsZV9yb3dzKFJlbGF0aW9uIG9uZXJlbCwg aW50IGVsZXZlbCwKICAJCX0KICAKICAJCXJlbHNbbnJlbHNdID0gY2hpbGRy ZWw7CiEgCQlyZWxibG9ja3NbbnJlbHNdID0gKGRvdWJsZSkgUmVsYXRpb25H ZXROdW1iZXJPZkJsb2NrcyhjaGlsZHJlbCk7CiAgCQl0b3RhbGJsb2NrcyAr PSByZWxibG9ja3NbbnJlbHNdOwogIAkJbnJlbHMrKzsKICAJfQotLS0gMTUx NSwxNTU0IC0tLS0KICAJCX0KICAKICAJCXJlbHNbbnJlbHNdID0gY2hpbGRy ZWw7CiEgCiEgCQlpZiAoY2hpbGRyZWwtPnJkX3JlbC0+cmVsa2luZCA9PSBS RUxLSU5EX0ZPUkVJR05fVEFCTEUpCiEgCQl7CiEgCQkJRmR3Um91dGluZSAq ZmR3cm91dGluZTsKISAJCQlCbG9ja051bWJlciByZWxwYWdlcyA9IDA7CiEg CQkJYm9vbAkJb2sgPSBmYWxzZTsKISAKISAJCQkvKiBJZ25vcmUgdW5sZXNz IGFuYWx5emluZyBhIHNwZWNpZmljIGluaGVyaXRhbmNlIHRyZWUgKi8KISAJ CQlpZiAodmFjX21vZGUgIT0gVkFDX01PREVfU0lOR0xFKQohIAkJCQlyZXR1 cm4gMDsKISAKISAJCQkvKiBDaGVjayB3aGV0aGVyIHRoZSBGRFcgc3VwcG9y dHMgYW5hbHlzaXMgKi8KISAJCQlmZHdyb3V0aW5lID0gR2V0RmR3Um91dGlu ZUZvclJlbGF0aW9uKGNoaWxkcmVsLCBmYWxzZSk7CiEgCQkJaWYgKGZkd3Jv dXRpbmUtPkFuYWx5emVGb3JlaWduVGFibGUgIT0gTlVMTCkKISAJCQkJb2sg PSBmZHdyb3V0aW5lLT5BbmFseXplRm9yZWlnblRhYmxlKGNoaWxkcmVsLAoh IAkJCQkJCQkJCQkJCQkgJmFjcXVpcmVmdW5jW25yZWxzXSwKISAJCQkJCQkJ CQkJCQkJICZyZWxwYWdlcyk7CiEgCQkJaWYgKCFvaykKISAJCQl7CiEgCQkJ CS8qIEdpdmUgdXAgaWYgdGhlIEZEVyBkb2Vzbid0IHN1cHBvcnQgYW5hbHlz aXMgKi8KISAJCQkJZXJlcG9ydChXQVJOSU5HLAohIAkJCQkJCShlcnJtc2co InNraXBwaW5nIGFuYWx5emUgb2YgaW5oZXJpdGFuY2UgdHJlZSBcIiVzXCIg LS0tIGNhbm5vdCBhbmFseXplIGZvcmVpZ24gdGFibGUgXCIlc1wiIiwKISAJ CQkJCQkJCVJlbGF0aW9uR2V0UmVsYXRpb25OYW1lKG9uZXJlbCksCiEgCQkJ CQkJCQlSZWxhdGlvbkdldFJlbGF0aW9uTmFtZShjaGlsZHJlbCkpKSk7CiEg CQkJCXJldHVybiAwOwohIAkJCX0KISAJCQlyZWxibG9ja3NbbnJlbHNdID0g KGRvdWJsZSkgcmVscGFnZXM7CiEgCQl9CiEgCQllbHNlCiEgCQl7CiEgCQkJ YWNxdWlyZWZ1bmNbbnJlbHNdID0gYWNxdWlyZV9zYW1wbGVfcm93czsKISAJ CQlyZWxibG9ja3NbbnJlbHNdID0gKGRvdWJsZSkgUmVsYXRpb25HZXROdW1i ZXJPZkJsb2NrcyhjaGlsZHJlbCk7CiEgCQl9CiEgCiAgCQl0b3RhbGJsb2Nr cyArPSByZWxibG9ja3NbbnJlbHNdOwogIAkJbnJlbHMrKzsKICAJfQoqKioq KioqKioqKioqKioKKioqIDE1MjUsMTUzMCAqKioqIGFjcXVpcmVfaW5oZXJp dGVkX3NhbXBsZV9yb3dzKFJlbGF0aW9uIG9uZXJlbCwgaW50IGVsZXZlbCwK LS0tIDE1NjYsMTU3MiAtLS0tCiAgCXsKICAJCVJlbGF0aW9uCWNoaWxkcmVs ID0gcmVsc1tpXTsKICAJCWRvdWJsZQkJY2hpbGRibG9ja3MgPSByZWxibG9j a3NbaV07CisgCQlBY3F1aXJlU2FtcGxlUm93c0Z1bmMgY2hpbGRhY3F1aXJl ZnVuYyA9IGFjcXVpcmVmdW5jW2ldOwogIAogIAkJaWYgKGNoaWxkYmxvY2tz ID4gMCkKICAJCXsKKioqKioqKioqKioqKioqCioqKiAxNTQwLDE1NTEgKioq KiBhY3F1aXJlX2luaGVyaXRlZF9zYW1wbGVfcm93cyhSZWxhdGlvbiBvbmVy ZWwsIGludCBlbGV2ZWwsCiAgCQkJCQkJCXRkcm93czsKICAKICAJCQkJLyog RmV0Y2ggYSByYW5kb20gc2FtcGxlIG9mIHRoZSBjaGlsZCdzIHJvd3MgKi8K ISAJCQkJY2hpbGRyb3dzID0gYWNxdWlyZV9zYW1wbGVfcm93cyhjaGlsZHJl bCwKISAJCQkJCQkJCQkJCQllbGV2ZWwsCiEgCQkJCQkJCQkJCQkJcm93cyAr IG51bXJvd3MsCiEgCQkJCQkJCQkJCQkJY2hpbGR0YXJncm93cywKISAJCQkJ CQkJCQkJCQkmdHJvd3MsCiEgCQkJCQkJCQkJCQkJJnRkcm93cyk7CiAgCiAg CQkJCS8qIFdlIG1heSBuZWVkIHRvIGNvbnZlcnQgZnJvbSBjaGlsZCdzIHJv d3R5cGUgdG8gcGFyZW50J3MgKi8KICAJCQkJaWYgKGNoaWxkcm93cyA+IDAg JiYKLS0tIDE1ODIsMTU5MyAtLS0tCiAgCQkJCQkJCXRkcm93czsKICAKICAJ CQkJLyogRmV0Y2ggYSByYW5kb20gc2FtcGxlIG9mIHRoZSBjaGlsZCdzIHJv d3MgKi8KISAJCQkJY2hpbGRyb3dzID0gY2hpbGRhY3F1aXJlZnVuYyhjaGls ZHJlbCwKISAJCQkJCQkJCQkJCSBlbGV2ZWwsCiEgCQkJCQkJCQkJCQkgcm93 cyArIG51bXJvd3MsCiEgCQkJCQkJCQkJCQkgY2hpbGR0YXJncm93cywKISAJ CQkJCQkJCQkJCSAmdHJvd3MsCiEgCQkJCQkJCQkJCQkgJnRkcm93cyk7CiAg CiAgCQkJCS8qIFdlIG1heSBuZWVkIHRvIGNvbnZlcnQgZnJvbSBjaGlsZCdz IHJvd3R5cGUgdG8gcGFyZW50J3MgKi8KICAJCQkJaWYgKGNoaWxkcm93cyA+ IDAgJiYKKioqIGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvdGFibGVjbWRzLmMK LS0tIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvdGFibGVjbWRzLmMKKioqKioq KioqKioqKioqCioqKiAzMTAsMzE2ICoqKiogc3RhdGljIEFsdGVyZWRUYWJs ZUluZm8gKkFUR2V0UXVldWVFbnRyeShMaXN0ICoqd3F1ZXVlLCBSZWxhdGlv biByZWwpOwogIHN0YXRpYyB2b2lkIEFUU2ltcGxlUGVybWlzc2lvbnMoUmVs YXRpb24gcmVsLCBpbnQgYWxsb3dlZF90YXJnZXRzKTsKICBzdGF0aWMgdm9p ZCBBVFdyb25nUmVsa2luZEVycm9yKFJlbGF0aW9uIHJlbCwgaW50IGFsbG93 ZWRfdGFyZ2V0cyk7CiAgc3RhdGljIHZvaWQgQVRTaW1wbGVSZWN1cnNpb24o TGlzdCAqKndxdWV1ZSwgUmVsYXRpb24gcmVsLAohIAkJCQkgIEFsdGVyVGFi bGVDbWQgKmNtZCwgYm9vbCByZWN1cnNlLCBMT0NLTU9ERSBsb2NrbW9kZSk7 CiAgc3RhdGljIHZvaWQgQVRUeXBlZFRhYmxlUmVjdXJzaW9uKExpc3QgKip3 cXVldWUsIFJlbGF0aW9uIHJlbCwgQWx0ZXJUYWJsZUNtZCAqY21kLAogIAkJ CQkJICBMT0NLTU9ERSBsb2NrbW9kZSk7CiAgc3RhdGljIExpc3QgKmZpbmRf dHlwZWRfdGFibGVfZGVwZW5kZW5jaWVzKE9pZCB0eXBlT2lkLCBjb25zdCBj aGFyICp0eXBlTmFtZSwKLS0tIDMxMCwzMTcgLS0tLQogIHN0YXRpYyB2b2lk IEFUU2ltcGxlUGVybWlzc2lvbnMoUmVsYXRpb24gcmVsLCBpbnQgYWxsb3dl ZF90YXJnZXRzKTsKICBzdGF0aWMgdm9pZCBBVFdyb25nUmVsa2luZEVycm9y KFJlbGF0aW9uIHJlbCwgaW50IGFsbG93ZWRfdGFyZ2V0cyk7CiAgc3RhdGlj IHZvaWQgQVRTaW1wbGVSZWN1cnNpb24oTGlzdCAqKndxdWV1ZSwgUmVsYXRp b24gcmVsLAohIAkJCQkgIEFsdGVyVGFibGVDbWQgKmNtZCwgYm9vbCByZWN1 cnNlLAohIAkJCQkgIGJvb2wgaW5jbHVkZV9mb3JlaWduLCBMT0NLTU9ERSBs b2NrbW9kZSk7CiAgc3RhdGljIHZvaWQgQVRUeXBlZFRhYmxlUmVjdXJzaW9u KExpc3QgKip3cXVldWUsIFJlbGF0aW9uIHJlbCwgQWx0ZXJUYWJsZUNtZCAq Y21kLAogIAkJCQkJICBMT0NLTU9ERSBsb2NrbW9kZSk7CiAgc3RhdGljIExp c3QgKmZpbmRfdHlwZWRfdGFibGVfZGVwZW5kZW5jaWVzKE9pZCB0eXBlT2lk LCBjb25zdCBjaGFyICp0eXBlTmFtZSwKKioqKioqKioqKioqKioqCioqKiA0 NjYsNDc1ICoqKiogRGVmaW5lUmVsYXRpb24oQ3JlYXRlU3RtdCAqc3RtdCwg Y2hhciByZWxraW5kLCBPaWQgb3duZXJJZCkKICAJCWVyZXBvcnQoRVJST1Is CiAgCQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9UQUJMRV9ERUZJTklU SU9OKSwKICAJCQkJIGVycm1zZygiT04gQ09NTUlUIGNhbiBvbmx5IGJlIHVz ZWQgb24gdGVtcG9yYXJ5IHRhYmxlcyIpKSk7Ci0gCWlmIChzdG10LT5jb25z dHJhaW50cyAhPSBOSUwgJiYgcmVsa2luZCA9PSBSRUxLSU5EX0ZPUkVJR05f VEFCTEUpCi0gCQllcmVwb3J0KEVSUk9SLAotIAkJCQkoZXJyY29kZShFUlJD T0RFX1dST05HX09CSkVDVF9UWVBFKSwKLSAJCQkJIGVycm1zZygiY29uc3Ry YWludHMgYXJlIG5vdCBzdXBwb3J0ZWQgb24gZm9yZWlnbiB0YWJsZXMiKSkp OwogIAogIAkvKgogIAkgKiBMb29rIHVwIHRoZSBuYW1lc3BhY2UgaW4gd2hp Y2ggd2UgYXJlIHN1cHBvc2VkIHRvIGNyZWF0ZSB0aGUgcmVsYXRpb24sCi0t LSA0NjcsNDcyIC0tLS0KKioqKioqKioqKioqKioqCioqKiA1NTYsNTYxICoq KiogRGVmaW5lUmVsYXRpb24oQ3JlYXRlU3RtdCAqc3RtdCwgY2hhciByZWxr aW5kLCBPaWQgb3duZXJJZCkKLS0tIDU1Myw1ODIgLS0tLQogIAkJCQkJCQkg c3RtdC0+cmVsYXRpb24tPnJlbHBlcnNpc3RlbmNlLAogIAkJCQkJCQkgJmlu aGVyaXRPaWRzLCAmb2xkX2NvbnN0cmFpbnRzLCAmcGFyZW50T2lkQ291bnQp OwogIAorIAlpZiAocmVsa2luZCA9PSBSRUxLSU5EX0ZPUkVJR05fVEFCTEUp CisgCXsKKyAJCS8qCisgCQkgKiBEb24ndCBhbGxvdyBhIGZvcmVpZ24gdGFi bGUgdG8gaW5oZXJpdCBmcm9tIHBhcmVudHMgdGhhdCBoYXZlIE9JRAorIAkJ ICogc3lzdGVtIGNvbHVtbnMuCisgCQkgKi8KKyAJCWlmIChwYXJlbnRPaWRD b3VudCA+IDApCisgCQkJZXJlcG9ydChFUlJPUiwKKyAJCQkJCShlcnJjb2Rl KEVSUkNPREVfRkVBVFVSRV9OT1RfU1VQUE9SVEVEKSwKKyAJCQkJCSBlcnJt c2coImNhbm5vdCBpbmhlcml0IGZyb20gcmVsYXRpb24gd2l0aCBPSURzIikp KTsKKyAKKyAJCS8qCisgCQkgKiBSZXNldCB0aGUgc3RvcmFnZSBwYXJhbWV0 ZXIgZm9yIGluaGVyaXRlZCBhdHRyaWJ1dGVzIHRoYXQgaGF2ZQorIAkJICog bm9uLWRlZmF1bHQgdmFsdWVzLgorIAkJICovCisgCQlmb3JlYWNoKGxpc3Rw dHIsIHNjaGVtYSkKKyAJCXsKKyAJCQlDb2x1bW5EZWYgICpjb2xEZWYgPSBs Zmlyc3QobGlzdHB0cik7CisgCQkKKyAJCQlpZiAoY29sRGVmLT5zdG9yYWdl ICE9IDApCisgCQkJCWNvbERlZi0+c3RvcmFnZSA9IDA7CisgCQl9CisgCX0K KyAKICAJLyoKICAJICogQ3JlYXRlIGEgdHVwbGUgZGVzY3JpcHRvciBmcm9t IHRoZSByZWxhdGlvbiBzY2hlbWEuICBOb3RlIHRoYXQgdGhpcwogIAkgKiBk ZWFscyB3aXRoIGNvbHVtbiBuYW1lcywgdHlwZXMsIGFuZCBOT1QgTlVMTCBj b25zdHJhaW50cywgYnV0IG5vdAoqKioqKioqKioqKioqKioKKioqIDMwNjQs MzA4NyAqKioqIEFUUHJlcENtZChMaXN0ICoqd3F1ZXVlLCBSZWxhdGlvbiBy ZWwsIEFsdGVyVGFibGVDbWQgKmNtZCwKICAJCQkgKiBydWxlcy4KICAJCQkg Ki8KICAJCQlBVFNpbXBsZVBlcm1pc3Npb25zKHJlbCwgQVRUX1RBQkxFIHwg QVRUX1ZJRVcgfCBBVFRfRk9SRUlHTl9UQUJMRSk7CiEgCQkJQVRTaW1wbGVS ZWN1cnNpb24od3F1ZXVlLCByZWwsIGNtZCwgcmVjdXJzZSwgbG9ja21vZGUp OwogIAkJCS8qIE5vIGNvbW1hbmQtc3BlY2lmaWMgcHJlcCBuZWVkZWQgKi8K ICAJCQlwYXNzID0gY21kLT5kZWYgPyBBVF9QQVNTX0FERF9DT05TVFIgOiBB VF9QQVNTX0RST1A7CiAgCQkJYnJlYWs7CiAgCQljYXNlIEFUX0Ryb3BOb3RO dWxsOgkvKiBBTFRFUiBDT0xVTU4gRFJPUCBOT1QgTlVMTCAqLwogIAkJCUFU U2ltcGxlUGVybWlzc2lvbnMocmVsLCBBVFRfVEFCTEUgfCBBVFRfRk9SRUlH Tl9UQUJMRSk7CiEgCQkJQVRTaW1wbGVSZWN1cnNpb24od3F1ZXVlLCByZWws IGNtZCwgcmVjdXJzZSwgbG9ja21vZGUpOwogIAkJCS8qIE5vIGNvbW1hbmQt c3BlY2lmaWMgcHJlcCBuZWVkZWQgKi8KICAJCQlwYXNzID0gQVRfUEFTU19E Uk9QOwogIAkJCWJyZWFrOwogIAkJY2FzZSBBVF9TZXROb3ROdWxsOgkJLyog QUxURVIgQ09MVU1OIFNFVCBOT1QgTlVMTCAqLwogIAkJCUFUU2ltcGxlUGVy bWlzc2lvbnMocmVsLCBBVFRfVEFCTEUgfCBBVFRfRk9SRUlHTl9UQUJMRSk7 CiEgCQkJQVRTaW1wbGVSZWN1cnNpb24od3F1ZXVlLCByZWwsIGNtZCwgcmVj dXJzZSwgbG9ja21vZGUpOwogIAkJCS8qIE5vIGNvbW1hbmQtc3BlY2lmaWMg cHJlcCBuZWVkZWQgKi8KICAJCQlwYXNzID0gQVRfUEFTU19BRERfQ09OU1RS OwogIAkJCWJyZWFrOwogIAkJY2FzZSBBVF9TZXRTdGF0aXN0aWNzOgkvKiBB TFRFUiBDT0xVTU4gU0VUIFNUQVRJU1RJQ1MgKi8KISAJCQlBVFNpbXBsZVJl Y3Vyc2lvbih3cXVldWUsIHJlbCwgY21kLCByZWN1cnNlLCBsb2NrbW9kZSk7 CiAgCQkJLyogUGVyZm9ybXMgb3duIHBlcm1pc3Npb24gY2hlY2tzICovCiAg CQkJQVRQcmVwU2V0U3RhdGlzdGljcyhyZWwsIGNtZC0+bmFtZSwgY21kLT5k ZWYsIGxvY2ttb2RlKTsKICAJCQlwYXNzID0gQVRfUEFTU19NSVNDOwotLS0g MzA4NSwzMTEyIC0tLS0KICAJCQkgKiBydWxlcy4KICAJCQkgKi8KICAJCQlB VFNpbXBsZVBlcm1pc3Npb25zKHJlbCwgQVRUX1RBQkxFIHwgQVRUX1ZJRVcg fCBBVFRfRk9SRUlHTl9UQUJMRSk7CiEgCQkJLyogUmVjdXJzZSB0byBjaGls ZCB0YWJsZXMgdGhhdCBhcmUgZm9yZWlnbiwgdG9vICovCiEgCQkJQVRTaW1w bGVSZWN1cnNpb24od3F1ZXVlLCByZWwsIGNtZCwgcmVjdXJzZSwgdHJ1ZSwg bG9ja21vZGUpOwogIAkJCS8qIE5vIGNvbW1hbmQtc3BlY2lmaWMgcHJlcCBu ZWVkZWQgKi8KICAJCQlwYXNzID0gY21kLT5kZWYgPyBBVF9QQVNTX0FERF9D T05TVFIgOiBBVF9QQVNTX0RST1A7CiAgCQkJYnJlYWs7CiAgCQljYXNlIEFU X0Ryb3BOb3ROdWxsOgkvKiBBTFRFUiBDT0xVTU4gRFJPUCBOT1QgTlVMTCAq LwogIAkJCUFUU2ltcGxlUGVybWlzc2lvbnMocmVsLCBBVFRfVEFCTEUgfCBB VFRfRk9SRUlHTl9UQUJMRSk7CiEgCQkJLyogUmVjdXJzZSB0byBjaGlsZCB0 YWJsZXMgdGhhdCBhcmUgZm9yZWlnbiwgdG9vICovCiEgCQkJQVRTaW1wbGVS ZWN1cnNpb24od3F1ZXVlLCByZWwsIGNtZCwgcmVjdXJzZSwgdHJ1ZSwgbG9j a21vZGUpOwogIAkJCS8qIE5vIGNvbW1hbmQtc3BlY2lmaWMgcHJlcCBuZWVk ZWQgKi8KICAJCQlwYXNzID0gQVRfUEFTU19EUk9QOwogIAkJCWJyZWFrOwog IAkJY2FzZSBBVF9TZXROb3ROdWxsOgkJLyogQUxURVIgQ09MVU1OIFNFVCBO T1QgTlVMTCAqLwogIAkJCUFUU2ltcGxlUGVybWlzc2lvbnMocmVsLCBBVFRf VEFCTEUgfCBBVFRfRk9SRUlHTl9UQUJMRSk7CiEgCQkJLyogUmVjdXJzZSB0 byBjaGlsZCB0YWJsZXMgdGhhdCBhcmUgZm9yZWlnbiwgdG9vICovCiEgCQkJ QVRTaW1wbGVSZWN1cnNpb24od3F1ZXVlLCByZWwsIGNtZCwgcmVjdXJzZSwg dHJ1ZSwgbG9ja21vZGUpOwogIAkJCS8qIE5vIGNvbW1hbmQtc3BlY2lmaWMg cHJlcCBuZWVkZWQgKi8KICAJCQlwYXNzID0gQVRfUEFTU19BRERfQ09OU1RS OwogIAkJCWJyZWFrOwogIAkJY2FzZSBBVF9TZXRTdGF0aXN0aWNzOgkvKiBB TFRFUiBDT0xVTU4gU0VUIFNUQVRJU1RJQ1MgKi8KISAJCQkvKiBSZWN1cnNl IHRvIGNoaWxkIHRhYmxlcyB0aGF0IGFyZSBmb3JlaWduLCB0b28gKi8KISAJ CQlBVFNpbXBsZVJlY3Vyc2lvbih3cXVldWUsIHJlbCwgY21kLCByZWN1cnNl LCB0cnVlLCBsb2NrbW9kZSk7CiAgCQkJLyogUGVyZm9ybXMgb3duIHBlcm1p c3Npb24gY2hlY2tzICovCiAgCQkJQVRQcmVwU2V0U3RhdGlzdGljcyhyZWws IGNtZC0+bmFtZSwgY21kLT5kZWYsIGxvY2ttb2RlKTsKICAJCQlwYXNzID0g QVRfUEFTU19NSVNDOwoqKioqKioqKioqKioqKioKKioqIDMwOTQsMzEwMCAq KioqIEFUUHJlcENtZChMaXN0ICoqd3F1ZXVlLCBSZWxhdGlvbiByZWwsIEFs dGVyVGFibGVDbWQgKmNtZCwKICAJCQlicmVhazsKICAJCWNhc2UgQVRfU2V0 U3RvcmFnZToJCS8qIEFMVEVSIENPTFVNTiBTRVQgU1RPUkFHRSAqLwogIAkJ CUFUU2ltcGxlUGVybWlzc2lvbnMocmVsLCBBVFRfVEFCTEUgfCBBVFRfTUFU VklFVyk7CiEgCQkJQVRTaW1wbGVSZWN1cnNpb24od3F1ZXVlLCByZWwsIGNt ZCwgcmVjdXJzZSwgbG9ja21vZGUpOwogIAkJCS8qIE5vIGNvbW1hbmQtc3Bl Y2lmaWMgcHJlcCBuZWVkZWQgKi8KICAJCQlwYXNzID0gQVRfUEFTU19NSVND OwogIAkJCWJyZWFrOwotLS0gMzExOSwzMTI2IC0tLS0KICAJCQlicmVhazsK ICAJCWNhc2UgQVRfU2V0U3RvcmFnZToJCS8qIEFMVEVSIENPTFVNTiBTRVQg U1RPUkFHRSAqLwogIAkJCUFUU2ltcGxlUGVybWlzc2lvbnMocmVsLCBBVFRf VEFCTEUgfCBBVFRfTUFUVklFVyk7CiEgCQkJLyogRG9uJ3QgcmVjdXJzZSB0 byBjaGlsZCB0YWJsZXMgdGhhdCBhcmUgZm9yZWlnbiAqLwohIAkJCUFUU2lt cGxlUmVjdXJzaW9uKHdxdWV1ZSwgcmVsLCBjbWQsIHJlY3Vyc2UsIGZhbHNl LCBsb2NrbW9kZSk7CiAgCQkJLyogTm8gY29tbWFuZC1zcGVjaWZpYyBwcmVw IG5lZWRlZCAqLwogIAkJCXBhc3MgPSBBVF9QQVNTX01JU0M7CiAgCQkJYnJl YWs7CioqKioqKioqKioqKioqKgoqKiogMzExMiwzMTE4ICoqKiogQVRQcmVw Q21kKExpc3QgKip3cXVldWUsIFJlbGF0aW9uIHJlbCwgQWx0ZXJUYWJsZUNt ZCAqY21kLAogIAkJCXBhc3MgPSBBVF9QQVNTX0FERF9JTkRFWDsKICAJCQli cmVhazsKICAJCWNhc2UgQVRfQWRkQ29uc3RyYWludDoJLyogQUREIENPTlNU UkFJTlQgKi8KISAJCQlBVFNpbXBsZVBlcm1pc3Npb25zKHJlbCwgQVRUX1RB QkxFKTsKICAJCQkvKiBSZWN1cnNpb24gb2NjdXJzIGR1cmluZyBleGVjdXRp b24gcGhhc2UgKi8KICAJCQkvKiBObyBjb21tYW5kLXNwZWNpZmljIHByZXAg bmVlZGVkIGV4Y2VwdCBzYXZpbmcgcmVjdXJzZSBmbGFnICovCiAgCQkJaWYg KHJlY3Vyc2UpCi0tLSAzMTM4LDMxNDQgLS0tLQogIAkJCXBhc3MgPSBBVF9Q QVNTX0FERF9JTkRFWDsKICAJCQlicmVhazsKICAJCWNhc2UgQVRfQWRkQ29u c3RyYWludDoJLyogQUREIENPTlNUUkFJTlQgKi8KISAJCQlBVFNpbXBsZVBl cm1pc3Npb25zKHJlbCwgQVRUX1RBQkxFIHwgQVRUX0ZPUkVJR05fVEFCTEUp OwogIAkJCS8qIFJlY3Vyc2lvbiBvY2N1cnMgZHVyaW5nIGV4ZWN1dGlvbiBw aGFzZSAqLwogIAkJCS8qIE5vIGNvbW1hbmQtc3BlY2lmaWMgcHJlcCBuZWVk ZWQgZXhjZXB0IHNhdmluZyByZWN1cnNlIGZsYWcgKi8KICAJCQlpZiAocmVj dXJzZSkKKioqKioqKioqKioqKioqCioqKiAzMTI2LDMxMzIgKioqKiBBVFBy ZXBDbWQoTGlzdCAqKndxdWV1ZSwgUmVsYXRpb24gcmVsLCBBbHRlclRhYmxl Q21kICpjbWQsCiAgCQkJcGFzcyA9IEFUX1BBU1NfQUREX0NPTlNUUjsKICAJ CQlicmVhazsKICAJCWNhc2UgQVRfRHJvcENvbnN0cmFpbnQ6CS8qIERST1Ag Q09OU1RSQUlOVCAqLwohIAkJCUFUU2ltcGxlUGVybWlzc2lvbnMocmVsLCBB VFRfVEFCTEUpOwogIAkJCS8qIFJlY3Vyc2lvbiBvY2N1cnMgZHVyaW5nIGV4 ZWN1dGlvbiBwaGFzZSAqLwogIAkJCS8qIE5vIGNvbW1hbmQtc3BlY2lmaWMg cHJlcCBuZWVkZWQgZXhjZXB0IHNhdmluZyByZWN1cnNlIGZsYWcgKi8KICAJ CQlpZiAocmVjdXJzZSkKLS0tIDMxNTIsMzE1OCAtLS0tCiAgCQkJcGFzcyA9 IEFUX1BBU1NfQUREX0NPTlNUUjsKICAJCQlicmVhazsKICAJCWNhc2UgQVRf RHJvcENvbnN0cmFpbnQ6CS8qIERST1AgQ09OU1RSQUlOVCAqLwohIAkJCUFU U2ltcGxlUGVybWlzc2lvbnMocmVsLCBBVFRfVEFCTEUgfCBBVFRfRk9SRUlH Tl9UQUJMRSk7CiAgCQkJLyogUmVjdXJzaW9uIG9jY3VycyBkdXJpbmcgZXhl Y3V0aW9uIHBoYXNlICovCiAgCQkJLyogTm8gY29tbWFuZC1zcGVjaWZpYyBw cmVwIG5lZWRlZCBleGNlcHQgc2F2aW5nIHJlY3Vyc2UgZmxhZyAqLwogIAkJ CWlmIChyZWN1cnNlKQoqKioqKioqKioqKioqKioKKioqIDMxOTQsMzIwNCAq KioqIEFUUHJlcENtZChMaXN0ICoqd3F1ZXVlLCBSZWxhdGlvbiByZWwsIEFs dGVyVGFibGVDbWQgKmNtZCwKICAJCQlwYXNzID0gQVRfUEFTU19NSVNDOwog IAkJCWJyZWFrOwogIAkJY2FzZSBBVF9BZGRJbmhlcml0OgkJLyogSU5IRVJJ VCAqLwohIAkJCUFUU2ltcGxlUGVybWlzc2lvbnMocmVsLCBBVFRfVEFCTEUp OwogIAkJCS8qIFRoaXMgY29tbWFuZCBuZXZlciByZWN1cnNlcyAqLwogIAkJ CUFUUHJlcEFkZEluaGVyaXQocmVsKTsKICAJCQlwYXNzID0gQVRfUEFTU19N SVNDOwogIAkJCWJyZWFrOwogIAkJY2FzZSBBVF9BbHRlckNvbnN0cmFpbnQ6 CQkvKiBBTFRFUiBDT05TVFJBSU5UICovCiAgCQkJQVRTaW1wbGVQZXJtaXNz aW9ucyhyZWwsIEFUVF9UQUJMRSk7CiAgCQkJcGFzcyA9IEFUX1BBU1NfTUlT QzsKLS0tIDMyMjAsMzIzNiAtLS0tCiAgCQkJcGFzcyA9IEFUX1BBU1NfTUlT QzsKICAJCQlicmVhazsKICAJCWNhc2UgQVRfQWRkSW5oZXJpdDoJCS8qIElO SEVSSVQgKi8KISAJCQlBVFNpbXBsZVBlcm1pc3Npb25zKHJlbCwgQVRUX1RB QkxFIHwgQVRUX0ZPUkVJR05fVEFCTEUpOwogIAkJCS8qIFRoaXMgY29tbWFu ZCBuZXZlciByZWN1cnNlcyAqLwogIAkJCUFUUHJlcEFkZEluaGVyaXQocmVs KTsKICAJCQlwYXNzID0gQVRfUEFTU19NSVNDOwogIAkJCWJyZWFrOworIAkJ Y2FzZSBBVF9Ecm9wSW5oZXJpdDoJLyogTk8gSU5IRVJJVCAqLworIAkJCUFU U2ltcGxlUGVybWlzc2lvbnMocmVsLCBBVFRfVEFCTEUgfCBBVFRfRk9SRUlH Tl9UQUJMRSk7CisgCQkJLyogVGhpcyBjb21tYW5kIG5ldmVyIHJlY3Vyc2Vz ICovCisgCQkJLyogTm8gY29tbWFuZC1zcGVjaWZpYyBwcmVwIG5lZWRlZCAq LworIAkJCXBhc3MgPSBBVF9QQVNTX01JU0M7CisgCQkJYnJlYWs7CiAgCQlj YXNlIEFUX0FsdGVyQ29uc3RyYWludDoJCS8qIEFMVEVSIENPTlNUUkFJTlQg Ki8KICAJCQlBVFNpbXBsZVBlcm1pc3Npb25zKHJlbCwgQVRUX1RBQkxFKTsK ICAJCQlwYXNzID0gQVRfUEFTU19NSVNDOwoqKioqKioqKioqKioqKioKKioq IDMyMzIsMzIzOCAqKioqIEFUUHJlcENtZChMaXN0ICoqd3F1ZXVlLCBSZWxh dGlvbiByZWwsIEFsdGVyVGFibGVDbWQgKmNtZCwKICAJCWNhc2UgQVRfRW5h YmxlQWx3YXlzUnVsZToKICAJCWNhc2UgQVRfRW5hYmxlUmVwbGljYVJ1bGU6 CiAgCQljYXNlIEFUX0Rpc2FibGVSdWxlOgotIAkJY2FzZSBBVF9Ecm9wSW5o ZXJpdDoJLyogTk8gSU5IRVJJVCAqLwogIAkJY2FzZSBBVF9BZGRPZjoJCQkv KiBPRiAqLwogIAkJY2FzZSBBVF9Ecm9wT2Y6IC8qIE5PVCBPRiAqLwogIAkJ CUFUU2ltcGxlUGVybWlzc2lvbnMocmVsLCBBVFRfVEFCTEUpOwotLS0gMzI2 NCwzMjY5IC0tLS0KKioqKioqKioqKioqKioqCioqKiA0MTczLDQxNzkgKioq KiBBVFdyb25nUmVsa2luZEVycm9yKFJlbGF0aW9uIHJlbCwgaW50IGFsbG93 ZWRfdGFyZ2V0cykKICAgKi8KICBzdGF0aWMgdm9pZAogIEFUU2ltcGxlUmVj dXJzaW9uKExpc3QgKip3cXVldWUsIFJlbGF0aW9uIHJlbCwKISAJCQkJICBB bHRlclRhYmxlQ21kICpjbWQsIGJvb2wgcmVjdXJzZSwgTE9DS01PREUgbG9j a21vZGUpCiAgewogIAkvKgogIAkgKiBQcm9wYWdhdGUgdG8gY2hpbGRyZW4g aWYgZGVzaXJlZC4gIE5vbi10YWJsZSByZWxhdGlvbnMgbmV2ZXIgaGF2ZQot LS0gNDIwNCw0MjExIC0tLS0KICAgKi8KICBzdGF0aWMgdm9pZAogIEFUU2lt cGxlUmVjdXJzaW9uKExpc3QgKip3cXVldWUsIFJlbGF0aW9uIHJlbCwKISAJ CQkJICBBbHRlclRhYmxlQ21kICpjbWQsIGJvb2wgcmVjdXJzZSwKISAJCQkJ ICBib29sIGluY2x1ZGVfZm9yZWlnbiwgTE9DS01PREUgbG9ja21vZGUpCiAg ewogIAkvKgogIAkgKiBQcm9wYWdhdGUgdG8gY2hpbGRyZW4gaWYgZGVzaXJl ZC4gIE5vbi10YWJsZSByZWxhdGlvbnMgbmV2ZXIgaGF2ZQoqKioqKioqKioq KioqKioKKioqIDQyMDEsNDIwOCAqKioqIEFUU2ltcGxlUmVjdXJzaW9uKExp c3QgKip3cXVldWUsIFJlbGF0aW9uIHJlbCwKICAJCQkJY29udGludWU7CiAg CQkJLyogZmluZF9hbGxfaW5oZXJpdG9ycyBhbHJlYWR5IGdvdCBsb2NrICov CiAgCQkJY2hpbGRyZWwgPSByZWxhdGlvbl9vcGVuKGNoaWxkcmVsaWQsIE5v TG9jayk7CiEgCQkJQ2hlY2tUYWJsZU5vdEluVXNlKGNoaWxkcmVsLCAiQUxU RVIgVEFCTEUiKTsKISAJCQlBVFByZXBDbWQod3F1ZXVlLCBjaGlsZHJlbCwg Y21kLCBmYWxzZSwgdHJ1ZSwgbG9ja21vZGUpOwogIAkJCXJlbGF0aW9uX2Ns b3NlKGNoaWxkcmVsLCBOb0xvY2spOwogIAkJfQogIAl9Ci0tLSA0MjMzLDQy NDQgLS0tLQogIAkJCQljb250aW51ZTsKICAJCQkvKiBmaW5kX2FsbF9pbmhl cml0b3JzIGFscmVhZHkgZ290IGxvY2sgKi8KICAJCQljaGlsZHJlbCA9IHJl bGF0aW9uX29wZW4oY2hpbGRyZWxpZCwgTm9Mb2NrKTsKISAJCQlpZiAoY2hp bGRyZWwtPnJkX3JlbC0+cmVsa2luZCAhPSBSRUxLSU5EX0ZPUkVJR05fVEFC TEUKISAJCQkJfHwgaW5jbHVkZV9mb3JlaWduKQohIAkJCXsKISAJCQkJQ2hl Y2tUYWJsZU5vdEluVXNlKGNoaWxkcmVsLCAiQUxURVIgVEFCTEUiKTsKISAJ CQkJQVRQcmVwQ21kKHdxdWV1ZSwgY2hpbGRyZWwsIGNtZCwgZmFsc2UsIHRy dWUsIGxvY2ttb2RlKTsKISAJCQl9CiAgCQkJcmVsYXRpb25fY2xvc2UoY2hp bGRyZWwsIE5vTG9jayk7CiAgCQl9CiAgCX0KKioqKioqKioqKioqKioqCioq KiA0NDkyLDQ0OTggKioqKiBBVEV4ZWNBZGRDb2x1bW4oTGlzdCAqKndxdWV1 ZSwgQWx0ZXJlZFRhYmxlSW5mbyAqdGFiLCBSZWxhdGlvbiByZWwsCiAgCiAg CS8qIEF0IHRvcCBsZXZlbCwgcGVybWlzc2lvbiBjaGVjayB3YXMgZG9uZSBp biBBVFByZXBDbWQsIGVsc2UgZG8gaXQgKi8KICAJaWYgKHJlY3Vyc2luZykK ISAJCUFUU2ltcGxlUGVybWlzc2lvbnMocmVsLCBBVFRfVEFCTEUpOwogIAog IAlhdHRyZGVzYyA9IGhlYXBfb3BlbihBdHRyaWJ1dGVSZWxhdGlvbklkLCBS b3dFeGNsdXNpdmVMb2NrKTsKICAKLS0tIDQ1MjgsNDUzNCAtLS0tCiAgCiAg CS8qIEF0IHRvcCBsZXZlbCwgcGVybWlzc2lvbiBjaGVjayB3YXMgZG9uZSBp biBBVFByZXBDbWQsIGVsc2UgZG8gaXQgKi8KICAJaWYgKHJlY3Vyc2luZykK ISAJCUFUU2ltcGxlUGVybWlzc2lvbnMocmVsLCBBVFRfVEFCTEUgfCBBVFRf Rk9SRUlHTl9UQUJMRSk7CiAgCiAgCWF0dHJkZXNjID0gaGVhcF9vcGVuKEF0 dHJpYnV0ZVJlbGF0aW9uSWQsIFJvd0V4Y2x1c2l2ZUxvY2spOwogIAoqKioq KioqKioqKioqKioKKioqIDQ3ODgsNDc5MyAqKioqIEFURXhlY0FkZENvbHVt bihMaXN0ICoqd3F1ZXVlLCBBbHRlcmVkVGFibGVJbmZvICp0YWIsIFJlbGF0 aW9uIHJlbCwKLS0tIDQ4MjQsNDgzNCAtLS0tCiAgCiAgCQkvKiBmaW5kX2lu aGVyaXRhbmNlX2NoaWxkcmVuIGFscmVhZHkgZ290IGxvY2sgKi8KICAJCWNo aWxkcmVsID0gaGVhcF9vcGVuKGNoaWxkcmVsaWQsIE5vTG9jayk7CisgCQlp ZiAoY2hpbGRyZWwtPnJkX3JlbC0+cmVsa2luZCA9PSBSRUxLSU5EX0ZPUkVJ R05fVEFCTEUgJiYgaXNPaWQpCisgCQkJZXJlcG9ydChFUlJPUiwKKyAJCQkJ CShlcnJjb2RlKEVSUkNPREVfRkVBVFVSRV9OT1RfU1VQUE9SVEVEKSwKKyAJ CQkJCSBlcnJtc2coImNhbm5vdCBhZGQgT0lEIGNvbHVtbiB0byBmb3JlaWdu IHRhYmxlIFwiJXNcIiIsCisgCQkJCQkJCVJlbGF0aW9uR2V0UmVsYXRpb25O YW1lKGNoaWxkcmVsKSkpKTsKICAJCUNoZWNrVGFibGVOb3RJblVzZShjaGls ZHJlbCwgIkFMVEVSIFRBQkxFIik7CiAgCiAgCQkvKiBGaW5kIG9yIGNyZWF0 ZSB3b3JrIHF1ZXVlIGVudHJ5IGZvciB0aGlzIHRhYmxlICovCioqKioqKioq KioqKioqKgoqKiogNTM4OCw1Mzk0ICoqKiogQVRFeGVjRHJvcENvbHVtbihM aXN0ICoqd3F1ZXVlLCBSZWxhdGlvbiByZWwsIGNvbnN0IGNoYXIgKmNvbE5h bWUsCiAgCiAgCS8qIEF0IHRvcCBsZXZlbCwgcGVybWlzc2lvbiBjaGVjayB3 YXMgZG9uZSBpbiBBVFByZXBDbWQsIGVsc2UgZG8gaXQgKi8KICAJaWYgKHJl Y3Vyc2luZykKISAJCUFUU2ltcGxlUGVybWlzc2lvbnMocmVsLCBBVFRfVEFC TEUpOwogIAogIAkvKgogIAkgKiBnZXQgdGhlIG51bWJlciBvZiB0aGUgYXR0 cmlidXRlCi0tLSA1NDI5LDU0MzUgLS0tLQogIAogIAkvKiBBdCB0b3AgbGV2 ZWwsIHBlcm1pc3Npb24gY2hlY2sgd2FzIGRvbmUgaW4gQVRQcmVwQ21kLCBl bHNlIGRvIGl0ICovCiAgCWlmIChyZWN1cnNpbmcpCiEgCQlBVFNpbXBsZVBl cm1pc3Npb25zKHJlbCwgQVRUX1RBQkxFIHwgQVRUX0ZPUkVJR05fVEFCTEUp OwogIAogIAkvKgogIAkgKiBnZXQgdGhlIG51bWJlciBvZiB0aGUgYXR0cmli dXRlCioqKioqKioqKioqKioqKgoqKiogNTc4MCw1Nzg2ICoqKiogQVRBZGRD aGVja0NvbnN0cmFpbnQoTGlzdCAqKndxdWV1ZSwgQWx0ZXJlZFRhYmxlSW5m byAqdGFiLCBSZWxhdGlvbiByZWwsCiAgCiAgCS8qIEF0IHRvcCBsZXZlbCwg cGVybWlzc2lvbiBjaGVjayB3YXMgZG9uZSBpbiBBVFByZXBDbWQsIGVsc2Ug ZG8gaXQgKi8KICAJaWYgKHJlY3Vyc2luZykKISAJCUFUU2ltcGxlUGVybWlz c2lvbnMocmVsLCBBVFRfVEFCTEUpOwogIAogIAkvKgogIAkgKiBDYWxsIEFk ZFJlbGF0aW9uTmV3Q29uc3RyYWludHMgdG8gZG8gdGhlIHdvcmssIG1ha2lu ZyBzdXJlIGl0IHdvcmtzIG9uCi0tLSA1ODIxLDU4MzQgLS0tLQogIAogIAkv KiBBdCB0b3AgbGV2ZWwsIHBlcm1pc3Npb24gY2hlY2sgd2FzIGRvbmUgaW4g QVRQcmVwQ21kLCBlbHNlIGRvIGl0ICovCiAgCWlmIChyZWN1cnNpbmcpCiEg CQlBVFNpbXBsZVBlcm1pc3Npb25zKHJlbCwgQVRUX1RBQkxFIHwgQVRUX0ZP UkVJR05fVEFCTEUpOwohIAohIAkvKiBEb24ndCBhbGxvdyBBREQgQ09OU1RS QUlOVCBOT1QgVkFMSUQgdG8gYmUgYXBwbGllZCB0byBmb3JlaWduIHRhYmxl cyAqLwohIAlpZiAodGFiLT5yZWxraW5kID09IFJFTEtJTkRfRk9SRUlHTl9U QUJMRSAmJgohIAkJY29uc3RyLT5za2lwX3ZhbGlkYXRpb24gJiYgIXJlY3Vy c2luZykKISAJCWVyZXBvcnQoRVJST1IsCiEgCQkJCShlcnJjb2RlKEVSUkNP REVfRkVBVFVSRV9OT1RfU1VQUE9SVEVEKSwKISAJCQkJIGVycm1zZygiTk9U IFZBTElEIGlzIG5vdCBzdXBwb3J0ZWQgb24gZm9yZWlnbiB0YWJsZXMiKSkp OwogIAogIAkvKgogIAkgKiBDYWxsIEFkZFJlbGF0aW9uTmV3Q29uc3RyYWlu dHMgdG8gZG8gdGhlIHdvcmssIG1ha2luZyBzdXJlIGl0IHdvcmtzIG9uCioq KioqKioqKioqKioqKgoqKiogNTc5MSw1Nzk5ICoqKiogQVRBZGRDaGVja0Nv bnN0cmFpbnQoTGlzdCAqKndxdWV1ZSwgQWx0ZXJlZFRhYmxlSW5mbyAqdGFi LCBSZWxhdGlvbiByZWwsCiAgCSAqIG9taXR0ZWQgZnJvbSB0aGUgcmV0dXJu ZWQgbGlzdCwgd2hpY2ggaXMgd2hhdCB3ZSB3YW50OiB3ZSBkbyBub3QgbmVl ZAogIAkgKiB0byBkbyBhbnkgdmFsaWRhdGlvbiB3b3JrLiAgVGhhdCBjYW4g b25seSBoYXBwZW4gYXQgY2hpbGQgdGFibGVzLAogIAkgKiB0aG91Z2gsIHNp bmNlIHdlIGRpc2FsbG93IG1lcmdpbmcgYXQgdGhlIHRvcCBsZXZlbC4KICAJ ICovCiAgCW5ld2NvbnMgPSBBZGRSZWxhdGlvbk5ld0NvbnN0cmFpbnRzKHJl bCwgTklMLAohIAkJCQkJCQkJCQlsaXN0X21ha2UxKGNvcHlPYmplY3QoY29u c3RyKSksCiAgCQkJCQkJCQkJCXJlY3Vyc2luZywJCS8qIGFsbG93X21lcmdl ICovCiAgCQkJCQkJCQkJCSFyZWN1cnNpbmcsCQkvKiBpc19sb2NhbCAqLwog IAkJCQkJCQkJCQlpc19yZWFkZCk7CQkvKiBpc19pbnRlcm5hbCAqLwotLS0g NTgzOSw1ODU1IC0tLS0KICAJICogb21pdHRlZCBmcm9tIHRoZSByZXR1cm5l ZCBsaXN0LCB3aGljaCBpcyB3aGF0IHdlIHdhbnQ6IHdlIGRvIG5vdCBuZWVk CiAgCSAqIHRvIGRvIGFueSB2YWxpZGF0aW9uIHdvcmsuICBUaGF0IGNhbiBv bmx5IGhhcHBlbiBhdCBjaGlsZCB0YWJsZXMsCiAgCSAqIHRob3VnaCwgc2lu Y2Ugd2UgZGlzYWxsb3cgbWVyZ2luZyBhdCB0aGUgdG9wIGxldmVsLgorIAkg KgorIAkgKiBXaGVuIHByb3BhZ2F0aW5nIGEgTk9UIFZBTElEIG9wdGlvbiB0 byBjaGlsZHJlbiB0aGF0IGFyZSBmb3JlaWduIHRhYmxlcywKKyAJICogd2Ug cXVpZXRseSBpZ25vcmUgdGhlIG9wdGlvbi4gIE5vdGUgdGhhdCB0aGlzIGlz IHNhZmUgYmVjYXVzZSBmb3JlaWduCisgCSAqIHRhYmxlcyBkb24ndCBoYXZl IGFueSBjaGlsZHJlbi4KICAJICovCisgCWNvbnN0ciA9IChDb25zdHJhaW50 ICopIGNvcHlPYmplY3QoY29uc3RyKTsKKyAJaWYgKHRhYi0+cmVsa2luZCA9 PSBSRUxLSU5EX0ZPUkVJR05fVEFCTEUgJiYKKyAJCWNvbnN0ci0+c2tpcF92 YWxpZGF0aW9uICYmIHJlY3Vyc2luZykKKyAJCWNvbnN0ci0+c2tpcF92YWxp ZGF0aW9uID0gZmFsc2U7CiAgCW5ld2NvbnMgPSBBZGRSZWxhdGlvbk5ld0Nv bnN0cmFpbnRzKHJlbCwgTklMLAohIAkJCQkJCQkJCQlsaXN0X21ha2UxKGNv bnN0ciksCiAgCQkJCQkJCQkJCXJlY3Vyc2luZywJCS8qIGFsbG93X21lcmdl ICovCiAgCQkJCQkJCQkJCSFyZWN1cnNpbmcsCQkvKiBpc19sb2NhbCAqLwog IAkJCQkJCQkJCQlpc19yZWFkZCk7CQkvKiBpc19pbnRlcm5hbCAqLwoqKioq KioqKioqKioqKioKKioqIDcyNzMsNzI3OSAqKioqIEFURXhlY0Ryb3BDb25z dHJhaW50KFJlbGF0aW9uIHJlbCwgY29uc3QgY2hhciAqY29uc3RyTmFtZSwK ICAKICAJLyogQXQgdG9wIGxldmVsLCBwZXJtaXNzaW9uIGNoZWNrIHdhcyBk b25lIGluIEFUUHJlcENtZCwgZWxzZSBkbyBpdCAqLwogIAlpZiAocmVjdXJz aW5nKQohIAkJQVRTaW1wbGVQZXJtaXNzaW9ucyhyZWwsIEFUVF9UQUJMRSk7 CiAgCiAgCWNvbnJlbCA9IGhlYXBfb3BlbihDb25zdHJhaW50UmVsYXRpb25J ZCwgUm93RXhjbHVzaXZlTG9jayk7CiAgCi0tLSA3MzI5LDczMzUgLS0tLQog IAogIAkvKiBBdCB0b3AgbGV2ZWwsIHBlcm1pc3Npb24gY2hlY2sgd2FzIGRv bmUgaW4gQVRQcmVwQ21kLCBlbHNlIGRvIGl0ICovCiAgCWlmIChyZWN1cnNp bmcpCiEgCQlBVFNpbXBsZVBlcm1pc3Npb25zKHJlbCwgQVRUX1RBQkxFIHwg QVRUX0ZPUkVJR05fVEFCTEUpOwogIAogIAljb25yZWwgPSBoZWFwX29wZW4o Q29uc3RyYWludFJlbGF0aW9uSWQsIFJvd0V4Y2x1c2l2ZUxvY2spOwogIAoq KioqKioqKioqKioqKioKKioqIDc2MDgsNzYxNCAqKioqIEFUUHJlcEFsdGVy Q29sdW1uVHlwZShMaXN0ICoqd3F1ZXVlLAogIAkgKiBhbHRlciB3b3VsZCBw dXQgdGhlbSBvdXQgb2Ygc3RlcC4KICAJICovCiAgCWlmIChyZWN1cnNlKQoh IAkJQVRTaW1wbGVSZWN1cnNpb24od3F1ZXVlLCByZWwsIGNtZCwgcmVjdXJz ZSwgbG9ja21vZGUpOwogIAllbHNlIGlmICghcmVjdXJzaW5nICYmCiAgCQkJ IGZpbmRfaW5oZXJpdGFuY2VfY2hpbGRyZW4oUmVsYXRpb25HZXRSZWxpZChy ZWwpLCBOb0xvY2spICE9IE5JTCkKICAJCWVyZXBvcnQoRVJST1IsCi0tLSA3 NjY0LDc2NzMgLS0tLQogIAkgKiBhbHRlciB3b3VsZCBwdXQgdGhlbSBvdXQg b2Ygc3RlcC4KICAJICovCiAgCWlmIChyZWN1cnNlKQohIAl7CiEgCQkvKiBS ZWN1cnNlIHRvIGNoaWxkIHRhYmxlcyB0aGF0IGFyZSBmb3JlaWduLCB0b28g Ki8KISAJCUFUU2ltcGxlUmVjdXJzaW9uKHdxdWV1ZSwgcmVsLCBjbWQsIHJl Y3Vyc2UsIHRydWUsIGxvY2ttb2RlKTsKISAJfQogIAllbHNlIGlmICghcmVj dXJzaW5nICYmCiAgCQkJIGZpbmRfaW5oZXJpdGFuY2VfY2hpbGRyZW4oUmVs YXRpb25HZXRSZWxpZChyZWwpLCBOb0xvY2spICE9IE5JTCkKICAJCWVyZXBv cnQoRVJST1IsCioqKiBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3ZhY3V1bS5j Ci0tLSBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3ZhY3V1bS5jCioqKioqKioq KioqKioqKgoqKiogNjEsNjYgKioqKiBpbnQJCQl2YWN1dW1fbXVsdGl4YWN0 X2ZyZWV6ZV90YWJsZV9hZ2U7Ci0tLSA2MSw2NyAtLS0tCiAgCiAgLyogQSBm ZXcgdmFyaWFibGVzIHRoYXQgZG9uJ3Qgc2VlbSB3b3J0aCBwYXNzaW5nIGFy b3VuZCBhcyBwYXJhbWV0ZXJzICovCiAgc3RhdGljIE1lbW9yeUNvbnRleHQg dmFjX2NvbnRleHQgPSBOVUxMOworIHN0YXRpYyBWYWN1dW1Nb2RlIHZhY19t b2RlOwogIHN0YXRpYyBCdWZmZXJBY2Nlc3NTdHJhdGVneSB2YWNfc3RyYXRl Z3k7CiAgCiAgCioqKioqKioqKioqKioqKgoqKiogMTQ2LDE1MSAqKioqIHZh Y3V1bShWYWN1dW1TdG10ICp2YWNzdG10LCBPaWQgcmVsaWQsIGJvb2wgZG9f dG9hc3QsCi0tLSAxNDcsMTY2IC0tLS0KICAJCQkJCQkJCQkJQUxMT0NTRVRf REVGQVVMVF9NQVhTSVpFKTsKICAKICAJLyoKKyAJICogSWRlbnRpZnkgdmFj dXVtIG1vZGUuICBJZiByZWxpZCBpcyBub3QgSW52YWxpZE9pZCwgdGhlIGNh bGxlciBzaG91bGQgYmUKKyAJICogYW4gYXV0b3ZhY3V1bSB3b3JrZXIuICBT ZWUgdGhlIGFib3ZlIGNvbW1lbnRzLgorIAkgKi8KKyAJaWYgKHJlbGlkICE9 IEludmFsaWRPaWQpCisgCQl2YWNfbW9kZSA9IFZBQ19NT0RFX0FVVE9WQUNV VU07CisgCWVsc2UKKyAJeworIAkJaWYgKCF2YWNzdG10LT5yZWxhdGlvbikK KyAJCQl2YWNfbW9kZSA9IFZBQ19NT0RFX0FMTDsKKyAJCWVsc2UKKyAJCQl2 YWNfbW9kZSA9IFZBQ19NT0RFX1NJTkdMRTsKKyAJfQorIAorIAkvKgogIAkg KiBJZiBjYWxsZXIgZGlkbid0IGdpdmUgdXMgYSBidWZmZXIgc3RyYXRlZ3kg b2JqZWN0LCBtYWtlIG9uZSBpbiB0aGUKICAJICogY3Jvc3MtdHJhbnNhY3Rp b24gbWVtb3J5IGNvbnRleHQuCiAgCSAqLwoqKioqKioqKioqKioqKioKKioq IDI0OCwyNTQgKioqKiB2YWN1dW0oVmFjdXVtU3RtdCAqdmFjc3RtdCwgT2lk IHJlbGlkLCBib29sIGRvX3RvYXN0LAogIAkJCQkJUHVzaEFjdGl2ZVNuYXBz aG90KEdldFRyYW5zYWN0aW9uU25hcHNob3QoKSk7CiAgCQkJCX0KICAKISAJ CQkJYW5hbHl6ZV9yZWwocmVsaWQsIHZhY3N0bXQsIHZhY19zdHJhdGVneSk7 CiAgCiAgCQkJCWlmICh1c2Vfb3duX3hhY3RzKQogIAkJCQl7Ci0tLSAyNjMs MjY5IC0tLS0KICAJCQkJCVB1c2hBY3RpdmVTbmFwc2hvdChHZXRUcmFuc2Fj dGlvblNuYXBzaG90KCkpOwogIAkJCQl9CiAgCiEgCQkJCWFuYWx5emVfcmVs KHJlbGlkLCB2YWNzdG10LCB2YWNfbW9kZSwgdmFjX3N0cmF0ZWd5KTsKICAK ICAJCQkJaWYgKHVzZV9vd25feGFjdHMpCiAgCQkJCXsKKioqIGEvc3JjL2Jh Y2tlbmQvb3B0aW1pemVyL3BsYW4vY3JlYXRlcGxhbi5jCi0tLSBiL3NyYy9i YWNrZW5kL29wdGltaXplci9wbGFuL2NyZWF0ZXBsYW4uYwoqKioqKioqKioq KioqKioKKioqIDE5NDUsMTk1MCAqKioqIGNyZWF0ZV9mb3JlaWduc2Nhbl9w bGFuKFBsYW5uZXJJbmZvICpyb290LCBGb3JlaWduUGF0aCAqYmVzdF9wYXRo LAotLS0gMTk0NSwxOTUyIC0tLS0KICAJUmVsT3B0SW5mbyAqcmVsID0gYmVz dF9wYXRoLT5wYXRoLnBhcmVudDsKICAJSW5kZXgJCXNjYW5fcmVsaWQgPSBy ZWwtPnJlbGlkOwogIAlSYW5nZVRibEVudHJ5ICpydGU7CisgCUJpdG1hcHNl dCAgKmF0dHJzX3VzZWQgPSBOVUxMOworIAlMaXN0Q2VsbCAgICpsYzsKICAJ aW50CQkJaTsKICAKICAJLyogaXQgc2hvdWxkIGJlIGEgYmFzZSByZWwuLi4g Ki8KKioqKioqKioqKioqKioqCioqKiAxOTkzLDIwMDggKioqKiBjcmVhdGVf Zm9yZWlnbnNjYW5fcGxhbihQbGFubmVySW5mbyAqcm9vdCwgRm9yZWlnblBh dGggKmJlc3RfcGF0aCwKICAJICogYml0IG9mIGEga2x1Z2UgYW5kIG1pZ2h0 IGdvIGF3YXkgc29tZWRheSwgc28gd2UgaW50ZW50aW9uYWxseSBsZWF2ZSBp dAogIAkgKiBvdXQgb2YgdGhlIEFQSSBwcmVzZW50ZWQgdG8gRkRXcy4KICAJ ICovCiAgCXNjYW5fcGxhbi0+ZnNTeXN0ZW1Db2wgPSBmYWxzZTsKICAJZm9y IChpID0gcmVsLT5taW5fYXR0cjsgaSA8IDA7IGkrKykKICAJewohIAkJaWYg KCFibXNfaXNfZW1wdHkocmVsLT5hdHRyX25lZWRlZFtpIC0gcmVsLT5taW5f YXR0cl0pKQogIAkJewogIAkJCXNjYW5fcGxhbi0+ZnNTeXN0ZW1Db2wgPSB0 cnVlOwogIAkJCWJyZWFrOwogIAkJfQogIAl9CiAgCiAgCXJldHVybiBzY2Fu X3BsYW47CiAgfQogIAotLS0gMTk5NSwyMDI5IC0tLS0KICAJICogYml0IG9m IGEga2x1Z2UgYW5kIG1pZ2h0IGdvIGF3YXkgc29tZWRheSwgc28gd2UgaW50 ZW50aW9uYWxseSBsZWF2ZSBpdAogIAkgKiBvdXQgb2YgdGhlIEFQSSBwcmVz ZW50ZWQgdG8gRkRXcy4KICAJICovCisgCisgCS8qCisgCSAqIEFkZCBhbGwg dGhlIGF0dHJpYnV0ZXMgbmVlZGVkIGZvciBqb2lucyBvciBmaW5hbCBvdXRw dXQuICBOb3RlOiB3ZSBtdXN0CisgCSAqIGxvb2sgYXQgcmVsdGFyZ2V0bGlz dCwgbm90IHRoZSBhdHRyX25lZWRlZCBkYXRhLCBiZWNhdXNlIGF0dHJfbmVl ZGVkCisgCSAqIGlzbid0IGNvbXB1dGVkIGZvciBpbmhlcml0YW5jZSBjaGls ZCByZWxzLgorIAkgKi8KKyAJcHVsbF92YXJhdHRub3MoKE5vZGUgKikgcmVs LT5yZWx0YXJnZXRsaXN0LCByZWwtPnJlbGlkLCAmYXR0cnNfdXNlZCk7Cisg CisgCS8qIEFkZCBhbGwgdGhlIGF0dHJpYnV0ZXMgdXNlZCBieSByZXN0cmlj dGlvbiBjbGF1c2VzLiAqLworIAlmb3JlYWNoKGxjLCByZWwtPmJhc2VyZXN0 cmljdGluZm8pCisgCXsKKyAJCVJlc3RyaWN0SW5mbyAqcmluZm8gPSAoUmVz dHJpY3RJbmZvICopIGxmaXJzdChsYyk7CisgCisgCQlwdWxsX3ZhcmF0dG5v cygoTm9kZSAqKSByaW5mby0+Y2xhdXNlLCByZWwtPnJlbGlkLCAmYXR0cnNf dXNlZCk7CisgCX0KKyAKKyAJLyogQXJlIGFueSBzeXN0ZW0gY29sdW1ucyBy ZXF1ZXN0ZWQ/ICovCiAgCXNjYW5fcGxhbi0+ZnNTeXN0ZW1Db2wgPSBmYWxz ZTsKICAJZm9yIChpID0gcmVsLT5taW5fYXR0cjsgaSA8IDA7IGkrKykKICAJ ewohIAkJaWYgKGJtc19pc19tZW1iZXIoaSAtIHJlbC0+bWluX2F0dHIsIGF0 dHJzX3VzZWQpKQogIAkJewogIAkJCXNjYW5fcGxhbi0+ZnNTeXN0ZW1Db2wg PSB0cnVlOwogIAkJCWJyZWFrOwogIAkJfQogIAl9CiAgCisgCWJtc19mcmVl KGF0dHJzX3VzZWQpOworIAogIAlyZXR1cm4gc2Nhbl9wbGFuOwogIH0KICAK KioqIGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3ByZXAvcHJlcHVuaW9uLmMK LS0tIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3ByZXAvcHJlcHVuaW9uLmMK KioqKioqKioqKioqKioqCioqKiAxMzM4LDEzNDggKioqKiBleHBhbmRfaW5o ZXJpdGVkX3J0ZW50cnkoUGxhbm5lckluZm8gKnJvb3QsIFJhbmdlVGJsRW50 cnkgKnJ0ZSwgSW5kZXggcnRpKQogIAkJLyoKICAJCSAqIEJ1aWxkIGFuIFJU RSBmb3IgdGhlIGNoaWxkLCBhbmQgYXR0YWNoIHRvIHF1ZXJ5J3MgcmFuZ2V0 YWJsZSBsaXN0LgogIAkJICogV2UgY29weSBtb3N0IGZpZWxkcyBvZiB0aGUg cGFyZW50J3MgUlRFLCBidXQgcmVwbGFjZSByZWxhdGlvbiBPSUQsCiEgCQkg KiBhbmQgc2V0IGluaCA9IGZhbHNlLiAgQWxzbywgc2V0IHJlcXVpcmVkUGVy bXMgdG8gemVybyBzaW5jZSBhbGwKISAJCSAqIHJlcXVpcmVkIHBlcm1pc3Np b25zIGNoZWNrcyBhcmUgZG9uZSBvbiB0aGUgb3JpZ2luYWwgUlRFLgogIAkJ ICovCiAgCQljaGlsZHJ0ZSA9IGNvcHlPYmplY3QocnRlKTsKICAJCWNoaWxk cnRlLT5yZWxpZCA9IGNoaWxkT0lEOwogIAkJY2hpbGRydGUtPmluaCA9IGZh bHNlOwogIAkJY2hpbGRydGUtPnJlcXVpcmVkUGVybXMgPSAwOwogIAkJcGFy c2UtPnJ0YWJsZSA9IGxhcHBlbmQocGFyc2UtPnJ0YWJsZSwgY2hpbGRydGUp OwotLS0gMTMzOCwxMzQ5IC0tLS0KICAJCS8qCiAgCQkgKiBCdWlsZCBhbiBS VEUgZm9yIHRoZSBjaGlsZCwgYW5kIGF0dGFjaCB0byBxdWVyeSdzIHJhbmdl dGFibGUgbGlzdC4KICAJCSAqIFdlIGNvcHkgbW9zdCBmaWVsZHMgb2YgdGhl IHBhcmVudCdzIFJURSwgYnV0IHJlcGxhY2UgcmVsYXRpb24gT0lELAohIAkJ ICogcmVsa2luZCBhbmQgc2V0IGluaCA9IGZhbHNlLiAgQWxzbywgc2V0IHJl cXVpcmVkUGVybXMgdG8gemVybyBzaW5jZQohIAkJICogYWxsIHJlcXVpcmVk IHBlcm1pc3Npb25zIGNoZWNrcyBhcmUgZG9uZSBvbiB0aGUgb3JpZ2luYWwg UlRFLgogIAkJICovCiAgCQljaGlsZHJ0ZSA9IGNvcHlPYmplY3QocnRlKTsK ICAJCWNoaWxkcnRlLT5yZWxpZCA9IGNoaWxkT0lEOworIAkJY2hpbGRydGUt PnJlbGtpbmQgPSBuZXdyZWxhdGlvbi0+cmRfcmVsLT5yZWxraW5kOwogIAkJ Y2hpbGRydGUtPmluaCA9IGZhbHNlOwogIAkJY2hpbGRydGUtPnJlcXVpcmVk UGVybXMgPSAwOwogIAkJcGFyc2UtPnJ0YWJsZSA9IGxhcHBlbmQocGFyc2Ut PnJ0YWJsZSwgY2hpbGRydGUpOwoqKiogYS9zcmMvYmFja2VuZC9vcHRpbWl6 ZXIvdXRpbC9wYXRobm9kZS5jCi0tLSBiL3NyYy9iYWNrZW5kL29wdGltaXpl ci91dGlsL3BhdGhub2RlLmMKKioqKioqKioqKioqKioqCioqKiAxNiwyMSAq KioqCi0tLSAxNiwyMiAtLS0tCiAgCiAgI2luY2x1ZGUgPG1hdGguaD4KICAK KyAjaW5jbHVkZSAiZm9yZWlnbi9mZHdhcGkuaCIKICAjaW5jbHVkZSAibWlz Y2FkbWluLmgiCiAgI2luY2x1ZGUgIm5vZGVzL25vZGVGdW5jcy5oIgogICNp bmNsdWRlICJvcHRpbWl6ZXIvY2xhdXNlcy5oIgoqKioqKioqKioqKioqKioK KioqIDIwNjIsMjA2NyAqKioqIHJlcGFyYW1ldGVyaXplX3BhdGgoUGxhbm5l ckluZm8gKnJvb3QsIFBhdGggKnBhdGgsCi0tLSAyMDYzLDIwOTMgLS0tLQog IAkJY2FzZSBUX1N1YnF1ZXJ5U2NhbjoKICAJCQlyZXR1cm4gY3JlYXRlX3N1 YnF1ZXJ5c2Nhbl9wYXRoKHJvb3QsIHJlbCwgcGF0aC0+cGF0aGtleXMsCiAg CQkJCQkJCQkJCQlyZXF1aXJlZF9vdXRlcik7CisgCQljYXNlIFRfRm9yZWln blNjYW46CisgCQkJeworIAkJCQlGb3JlaWduUGF0aCAqbmV3cGF0aCA9IE5V TEw7CisgCisgCQkJCS8qIExldCB0aGUgRkRXIHJlcGFyYW1ldGVyaXplIHRo ZSBwYXRoIG5vZGUgaWYgcG9zc2libGUgKi8KKyAJCQkJaWYgKHJlbC0+ZmR3 cm91dGluZS0+UmVwYXJhbWV0ZXJpemVGb3JlaWduUGF0aCAhPSBOVUxMKQor IAkJCQl7CisgCQkJCQlJbmRleAkJc2Nhbl9yZWxpZCA9IHJlbC0+cmVsaWQ7 CisgCQkJCQlSYW5nZVRibEVudHJ5ICpydGU7CisgCisgCQkJCQkvKiBpdCBz aG91bGQgYmUgYSBiYXNlIHJlbC4uLiAqLworIAkJCQkJQXNzZXJ0KHNjYW5f cmVsaWQgPiAwKTsKKyAJCQkJCUFzc2VydChyZWwtPnJ0ZWtpbmQgPT0gUlRF X1JFTEFUSU9OKTsKKyAJCQkJCXJ0ZSA9IHBsYW5uZXJfcnRfZmV0Y2goc2Nh bl9yZWxpZCwgcm9vdCk7CisgCQkJCQlBc3NlcnQocnRlLT5ydGVraW5kID09 IFJURV9SRUxBVElPTik7CisgCisgCQkJCQluZXdwYXRoID0KKyAJCQkJCQly ZWwtPmZkd3JvdXRpbmUtPlJlcGFyYW1ldGVyaXplRm9yZWlnblBhdGgocm9v dCwKKyAJCQkJCQkJCQkJCQkJCQkJICAgcmVsLAorIAkJCQkJCQkJCQkJCQkJ CQkgICBydGUtPnJlbGlkLAorIAkJCQkJCQkJCQkJCQkJICAoRm9yZWlnblBh dGggKikgcGF0aCwKKyAJCQkJCQkJCQkJCQkJCQkgICByZXF1aXJlZF9vdXRl cik7CisgCQkJCX0KKyAJCQkJcmV0dXJuIChQYXRoICopIG5ld3BhdGg7Cisg CQkJfQogIAkJZGVmYXVsdDoKICAJCQlicmVhazsKICAJfQoqKiogYS9zcmMv YmFja2VuZC9wYXJzZXIvZ3JhbS55Ci0tLSBiL3NyYy9iYWNrZW5kL3BhcnNl ci9ncmFtLnkKKioqKioqKioqKioqKioqCioqKiA0MjEzLDQyNDQgKioqKiBB bHRlckZvcmVpZ25TZXJ2ZXJTdG10OiBBTFRFUiBTRVJWRVIgbmFtZSBmb3Jl aWduX3NlcnZlcl92ZXJzaW9uIGFsdGVyX2dlbmVyaWNfbwogIENyZWF0ZUZv cmVpZ25UYWJsZVN0bXQ6CiAgCQlDUkVBVEUgRk9SRUlHTiBUQUJMRSBxdWFs aWZpZWRfbmFtZQogIAkJCScoJyBPcHRUYWJsZUVsZW1lbnRMaXN0ICcpJwoh IAkJCVNFUlZFUiBuYW1lIGNyZWF0ZV9nZW5lcmljX29wdGlvbnMKICAJCQkJ ewogIAkJCQkJQ3JlYXRlRm9yZWlnblRhYmxlU3RtdCAqbiA9IG1ha2VOb2Rl KENyZWF0ZUZvcmVpZ25UYWJsZVN0bXQpOwogIAkJCQkJJDQtPnJlbHBlcnNp c3RlbmNlID0gUkVMUEVSU0lTVEVOQ0VfUEVSTUFORU5UOwogIAkJCQkJbi0+ YmFzZS5yZWxhdGlvbiA9ICQ0OwogIAkJCQkJbi0+YmFzZS50YWJsZUVsdHMg PSAkNjsKISAJCQkJCW4tPmJhc2UuaW5oUmVsYXRpb25zID0gTklMOwogIAkJ CQkJbi0+YmFzZS5pZl9ub3RfZXhpc3RzID0gZmFsc2U7CiAgCQkJCQkvKiBG RFctc3BlY2lmaWMgZGF0YSAqLwohIAkJCQkJbi0+c2VydmVybmFtZSA9ICQ5 OwohIAkJCQkJbi0+b3B0aW9ucyA9ICQxMDsKICAJCQkJCSQkID0gKE5vZGUg KikgbjsKICAJCQkJfQogIAkJfCBDUkVBVEUgRk9SRUlHTiBUQUJMRSBJRl9Q IE5PVCBFWElTVFMgcXVhbGlmaWVkX25hbWUKICAJCQknKCcgT3B0VGFibGVF bGVtZW50TGlzdCAnKScKISAJCQlTRVJWRVIgbmFtZSBjcmVhdGVfZ2VuZXJp Y19vcHRpb25zCiAgCQkJCXsKICAJCQkJCUNyZWF0ZUZvcmVpZ25UYWJsZVN0 bXQgKm4gPSBtYWtlTm9kZShDcmVhdGVGb3JlaWduVGFibGVTdG10KTsKICAJ CQkJCSQ3LT5yZWxwZXJzaXN0ZW5jZSA9IFJFTFBFUlNJU1RFTkNFX1BFUk1B TkVOVDsKICAJCQkJCW4tPmJhc2UucmVsYXRpb24gPSAkNzsKICAJCQkJCW4t PmJhc2UudGFibGVFbHRzID0gJDk7CiEgCQkJCQluLT5iYXNlLmluaFJlbGF0 aW9ucyA9IE5JTDsKICAJCQkJCW4tPmJhc2UuaWZfbm90X2V4aXN0cyA9IHRy dWU7CiAgCQkJCQkvKiBGRFctc3BlY2lmaWMgZGF0YSAqLwohIAkJCQkJbi0+ c2VydmVybmFtZSA9ICQxMjsKISAJCQkJCW4tPm9wdGlvbnMgPSAkMTM7CiAg CQkJCQkkJCA9IChOb2RlICopIG47CiAgCQkJCX0KICAJCTsKLS0tIDQyMTMs NDI0NCAtLS0tCiAgQ3JlYXRlRm9yZWlnblRhYmxlU3RtdDoKICAJCUNSRUFU RSBGT1JFSUdOIFRBQkxFIHF1YWxpZmllZF9uYW1lCiAgCQkJJygnIE9wdFRh YmxlRWxlbWVudExpc3QgJyknCiEgCQkJT3B0SW5oZXJpdCBTRVJWRVIgbmFt ZSBjcmVhdGVfZ2VuZXJpY19vcHRpb25zCiAgCQkJCXsKICAJCQkJCUNyZWF0 ZUZvcmVpZ25UYWJsZVN0bXQgKm4gPSBtYWtlTm9kZShDcmVhdGVGb3JlaWdu VGFibGVTdG10KTsKICAJCQkJCSQ0LT5yZWxwZXJzaXN0ZW5jZSA9IFJFTFBF UlNJU1RFTkNFX1BFUk1BTkVOVDsKICAJCQkJCW4tPmJhc2UucmVsYXRpb24g PSAkNDsKICAJCQkJCW4tPmJhc2UudGFibGVFbHRzID0gJDY7CiEgCQkJCQlu LT5iYXNlLmluaFJlbGF0aW9ucyA9ICQ4OwogIAkJCQkJbi0+YmFzZS5pZl9u b3RfZXhpc3RzID0gZmFsc2U7CiAgCQkJCQkvKiBGRFctc3BlY2lmaWMgZGF0 YSAqLwohIAkJCQkJbi0+c2VydmVybmFtZSA9ICQxMDsKISAJCQkJCW4tPm9w dGlvbnMgPSAkMTE7CiAgCQkJCQkkJCA9IChOb2RlICopIG47CiAgCQkJCX0K ICAJCXwgQ1JFQVRFIEZPUkVJR04gVEFCTEUgSUZfUCBOT1QgRVhJU1RTIHF1 YWxpZmllZF9uYW1lCiAgCQkJJygnIE9wdFRhYmxlRWxlbWVudExpc3QgJykn CiEgCQkJT3B0SW5oZXJpdCBTRVJWRVIgbmFtZSBjcmVhdGVfZ2VuZXJpY19v cHRpb25zCiAgCQkJCXsKICAJCQkJCUNyZWF0ZUZvcmVpZ25UYWJsZVN0bXQg Km4gPSBtYWtlTm9kZShDcmVhdGVGb3JlaWduVGFibGVTdG10KTsKICAJCQkJ CSQ3LT5yZWxwZXJzaXN0ZW5jZSA9IFJFTFBFUlNJU1RFTkNFX1BFUk1BTkVO VDsKICAJCQkJCW4tPmJhc2UucmVsYXRpb24gPSAkNzsKICAJCQkJCW4tPmJh c2UudGFibGVFbHRzID0gJDk7CiEgCQkJCQluLT5iYXNlLmluaFJlbGF0aW9u cyA9ICQxMTsKICAJCQkJCW4tPmJhc2UuaWZfbm90X2V4aXN0cyA9IHRydWU7 CiAgCQkJCQkvKiBGRFctc3BlY2lmaWMgZGF0YSAqLwohIAkJCQkJbi0+c2Vy dmVybmFtZSA9ICQxMzsKISAJCQkJCW4tPm9wdGlvbnMgPSAkMTQ7CiAgCQkJ CQkkJCA9IChOb2RlICopIG47CiAgCQkJCX0KICAJCTsKKioqIGEvc3JjL2Jh Y2tlbmQvcGFyc2VyL3BhcnNlX3V0aWxjbWQuYwotLS0gYi9zcmMvYmFja2Vu ZC9wYXJzZXIvcGFyc2VfdXRpbGNtZC5jCioqKioqKioqKioqKioqKgoqKiog NTE1LDUyNiAqKioqIHRyYW5zZm9ybUNvbHVtbkRlZmluaXRpb24oQ3JlYXRl U3RtdENvbnRleHQgKmN4dCwgQ29sdW1uRGVmICpjb2x1bW4pCiAgCQkJCWJy ZWFrOwogIAogIAkJCWNhc2UgQ09OU1RSX0NIRUNLOgotIAkJCQlpZiAoY3h0 LT5pc2ZvcmVpZ24pCi0gCQkJCQllcmVwb3J0KEVSUk9SLAotIAkJCQkJCQko ZXJyY29kZShFUlJDT0RFX0ZFQVRVUkVfTk9UX1NVUFBPUlRFRCksCi0gCQkJ CQllcnJtc2coImNvbnN0cmFpbnRzIGFyZSBub3Qgc3VwcG9ydGVkIG9uIGZv cmVpZ24gdGFibGVzIiksCi0gCQkJCQkJCSBwYXJzZXJfZXJycG9zaXRpb24o Y3h0LT5wc3RhdGUsCi0gCQkJCQkJCQkJCQkJY29uc3RyYWludC0+bG9jYXRp b24pKSk7CiAgCQkJCWN4dC0+Y2tjb25zdHJhaW50cyA9IGxhcHBlbmQoY3h0 LT5ja2NvbnN0cmFpbnRzLCBjb25zdHJhaW50KTsKICAJCQkJYnJlYWs7CiAg Ci0tLSA1MTUsNTIwIC0tLS0KKioqKioqKioqKioqKioqCioqKiA1MjksNTM1 ICoqKiogdHJhbnNmb3JtQ29sdW1uRGVmaW5pdGlvbihDcmVhdGVTdG10Q29u dGV4dCAqY3h0LCBDb2x1bW5EZWYgKmNvbHVtbikKICAJCQkJaWYgKGN4dC0+ aXNmb3JlaWduKQogIAkJCQkJZXJlcG9ydChFUlJPUiwKICAJCQkJCQkJKGVy cmNvZGUoRVJSQ09ERV9GRUFUVVJFX05PVF9TVVBQT1JURUQpLAohIAkJCQkJ ZXJybXNnKCJjb25zdHJhaW50cyBhcmUgbm90IHN1cHBvcnRlZCBvbiBmb3Jl aWduIHRhYmxlcyIpLAogIAkJCQkJCQkgcGFyc2VyX2VycnBvc2l0aW9uKGN4 dC0+cHN0YXRlLAogIAkJCQkJCQkJCQkJCWNvbnN0cmFpbnQtPmxvY2F0aW9u KSkpOwogIAkJCQlpZiAoY29uc3RyYWludC0+a2V5cyA9PSBOSUwpCi0tLSA1 MjMsNTI5IC0tLS0KICAJCQkJaWYgKGN4dC0+aXNmb3JlaWduKQogIAkJCQkJ ZXJlcG9ydChFUlJPUiwKICAJCQkJCQkJKGVycmNvZGUoRVJSQ09ERV9GRUFU VVJFX05PVF9TVVBQT1JURUQpLAohIAkJCQkJZXJybXNnKCJwcmltYXJ5IGtl eSBvciB1bmlxdWUgY29uc3RyYWludHMgYXJlIG5vdCBzdXBwb3J0ZWQgb24g Zm9yZWlnbiB0YWJsZXMiKSwKICAJCQkJCQkJIHBhcnNlcl9lcnJwb3NpdGlv bihjeHQtPnBzdGF0ZSwKICAJCQkJCQkJCQkJCQljb25zdHJhaW50LT5sb2Nh dGlvbikpKTsKICAJCQkJaWYgKGNvbnN0cmFpbnQtPmtleXMgPT0gTklMKQoq KioqKioqKioqKioqKioKKioqIDU0Niw1NTIgKioqKiB0cmFuc2Zvcm1Db2x1 bW5EZWZpbml0aW9uKENyZWF0ZVN0bXRDb250ZXh0ICpjeHQsIENvbHVtbkRl ZiAqY29sdW1uKQogIAkJCQlpZiAoY3h0LT5pc2ZvcmVpZ24pCiAgCQkJCQll cmVwb3J0KEVSUk9SLAogIAkJCQkJCQkoZXJyY29kZShFUlJDT0RFX0ZFQVRV UkVfTk9UX1NVUFBPUlRFRCksCiEgCQkJCQllcnJtc2coImNvbnN0cmFpbnRz IGFyZSBub3Qgc3VwcG9ydGVkIG9uIGZvcmVpZ24gdGFibGVzIiksCiAgCQkJ CQkJCSBwYXJzZXJfZXJycG9zaXRpb24oY3h0LT5wc3RhdGUsCiAgCQkJCQkJ CQkJCQkJY29uc3RyYWludC0+bG9jYXRpb24pKSk7CiAgCi0tLSA1NDAsNTQ2 IC0tLS0KICAJCQkJaWYgKGN4dC0+aXNmb3JlaWduKQogIAkJCQkJZXJlcG9y dChFUlJPUiwKICAJCQkJCQkJKGVycmNvZGUoRVJSQ09ERV9GRUFUVVJFX05P VF9TVVBQT1JURUQpLAohIAkJCQkJZXJybXNnKCJmb3JlaWduIGtleSBjb25z dHJhaW50cyBhcmUgbm90IHN1cHBvcnRlZCBvbiBmb3JlaWduIHRhYmxlcyIp LAogIAkJCQkJCQkgcGFyc2VyX2VycnBvc2l0aW9uKGN4dC0+cHN0YXRlLAog IAkJCQkJCQkJCQkJCWNvbnN0cmFpbnQtPmxvY2F0aW9uKSkpOwogIAoqKioq KioqKioqKioqKioKKioqIDYwNSw2MTQgKioqKiB0cmFuc2Zvcm1Db2x1bW5E ZWZpbml0aW9uKENyZWF0ZVN0bXRDb250ZXh0ICpjeHQsIENvbHVtbkRlZiAq Y29sdW1uKQogIHN0YXRpYyB2b2lkCiAgdHJhbnNmb3JtVGFibGVDb25zdHJh aW50KENyZWF0ZVN0bXRDb250ZXh0ICpjeHQsIENvbnN0cmFpbnQgKmNvbnN0 cmFpbnQpCiAgewohIAlpZiAoY3h0LT5pc2ZvcmVpZ24pCiAgCQllcmVwb3J0 KEVSUk9SLAogIAkJCQkoZXJyY29kZShFUlJDT0RFX0ZFQVRVUkVfTk9UX1NV UFBPUlRFRCksCiEgCQkJCSBlcnJtc2coImNvbnN0cmFpbnRzIGFyZSBub3Qg c3VwcG9ydGVkIG9uIGZvcmVpZ24gdGFibGVzIiksCiAgCQkJCSBwYXJzZXJf ZXJycG9zaXRpb24oY3h0LT5wc3RhdGUsCiAgCQkJCQkJCQkJY29uc3RyYWlu dC0+bG9jYXRpb24pKSk7CiAgCi0tLSA1OTksNjEyIC0tLS0KICBzdGF0aWMg dm9pZAogIHRyYW5zZm9ybVRhYmxlQ29uc3RyYWludChDcmVhdGVTdG10Q29u dGV4dCAqY3h0LCBDb25zdHJhaW50ICpjb25zdHJhaW50KQogIHsKISAJaWYg KGN4dC0+aXNmb3JlaWduICYmCiEgCQkoY29uc3RyYWludC0+Y29udHlwZSA9 PSBDT05TVFJfUFJJTUFSWSB8fAohIAkJIGNvbnN0cmFpbnQtPmNvbnR5cGUg PT0gQ09OU1RSX1VOSVFVRSB8fAohIAkJIGNvbnN0cmFpbnQtPmNvbnR5cGUg PT0gQ09OU1RSX0VYQ0xVU0lPTiB8fAohIAkJIGNvbnN0cmFpbnQtPmNvbnR5 cGUgPT0gQ09OU1RSX0ZPUkVJR04pKQogIAkJZXJlcG9ydChFUlJPUiwKICAJ CQkJKGVycmNvZGUoRVJSQ09ERV9GRUFUVVJFX05PVF9TVVBQT1JURUQpLAoh IAkJCQkgZXJybXNnKCJwcmltYXJ5IGtleSwgdW5pcXVlLCBleGNsdXNpb24s IG9yIGZvcmVpZ24ga2V5IGNvbnN0cmFpbnRzIGFyZSBub3Qgc3VwcG9ydGVk IG9uIGZvcmVpZ24gdGFibGVzIiksCiAgCQkJCSBwYXJzZXJfZXJycG9zaXRp b24oY3h0LT5wc3RhdGUsCiAgCQkJCQkJCQkJY29uc3RyYWludC0+bG9jYXRp b24pKSk7CiAgCioqKiBhL3NyYy9pbmNsdWRlL2NvbW1hbmRzL3ZhY3V1bS5o Ci0tLSBiL3NyYy9pbmNsdWRlL2NvbW1hbmRzL3ZhY3V1bS5oCioqKioqKioq KioqKioqKgoqKiogMTQwLDE0NSAqKioqIGV4dGVybiBpbnQJdmFjdXVtX211 bHRpeGFjdF9mcmVlemVfbWluX2FnZTsKLS0tIDE0MCwxNTQgLS0tLQogIGV4 dGVybiBpbnQJdmFjdXVtX211bHRpeGFjdF9mcmVlemVfdGFibGVfYWdlOwog IAogIAorIC8qIFBvc3NpYmxlIG1vZGVzIGZvciB2YWN1dW0oKSAqLworIHR5 cGVkZWYgZW51bQorIHsKKyAJVkFDX01PREVfQUxMLAkJCQkvKiBWYWN1dW0v YW5hbHl6ZSBhbGwgcmVsYXRpb25zICovCisgCVZBQ19NT0RFX1NJTkdMRSwJ CQkvKiBWYWN1dW0vYW5hbHl6ZSBhIHNwZWNpZmljIHJlbGF0aW9uICovCisg CVZBQ19NT0RFX0FVVE9WQUNVVU0JCQkvKiBBdXRvdmFjdXVtIHdvcmtlciAq LworIH0gVmFjdXVtTW9kZTsKKyAKKyAKICAvKiBpbiBjb21tYW5kcy92YWN1 dW0uYyAqLwogIGV4dGVybiB2b2lkIHZhY3V1bShWYWN1dW1TdG10ICp2YWNz dG10LCBPaWQgcmVsaWQsIGJvb2wgZG9fdG9hc3QsCiAgCSAgIEJ1ZmZlckFj Y2Vzc1N0cmF0ZWd5IGJzdHJhdGVneSwgYm9vbCBmb3Jfd3JhcGFyb3VuZCwg Ym9vbCBpc1RvcExldmVsKTsKKioqKioqKioqKioqKioqCioqKiAxNzQsMTgw ICoqKiogZXh0ZXJuIHZvaWQgbGF6eV92YWN1dW1fcmVsKFJlbGF0aW9uIG9u ZXJlbCwgVmFjdXVtU3RtdCAqdmFjc3RtdCwKICAJCQkJQnVmZmVyQWNjZXNz U3RyYXRlZ3kgYnN0cmF0ZWd5KTsKICAKICAvKiBpbiBjb21tYW5kcy9hbmFs eXplLmMgKi8KISBleHRlcm4gdm9pZCBhbmFseXplX3JlbChPaWQgcmVsaWQs IFZhY3V1bVN0bXQgKnZhY3N0bXQsCiAgCQkJQnVmZmVyQWNjZXNzU3RyYXRl Z3kgYnN0cmF0ZWd5KTsKICBleHRlcm4gYm9vbCBzdGRfdHlwYW5hbHl6ZShW YWNBdHRyU3RhdHMgKnN0YXRzKTsKICBleHRlcm4gZG91YmxlIGFubF9yYW5k b21fZnJhY3Qodm9pZCk7Ci0tLSAxODMsMTkxIC0tLS0KICAJCQkJQnVmZmVy QWNjZXNzU3RyYXRlZ3kgYnN0cmF0ZWd5KTsKICAKICAvKiBpbiBjb21tYW5k cy9hbmFseXplLmMgKi8KISBleHRlcm4gdm9pZCBhbmFseXplX3JlbChPaWQg cmVsaWQsCiEgCQkJVmFjdXVtU3RtdCAqdmFjc3RtdCwKISAJCQlWYWN1dW1N b2RlIHZhY21vZGUsCiAgCQkJQnVmZmVyQWNjZXNzU3RyYXRlZ3kgYnN0cmF0 ZWd5KTsKICBleHRlcm4gYm9vbCBzdGRfdHlwYW5hbHl6ZShWYWNBdHRyU3Rh dHMgKnN0YXRzKTsKICBleHRlcm4gZG91YmxlIGFubF9yYW5kb21fZnJhY3Qo dm9pZCk7CioqKiBhL3NyYy9pbmNsdWRlL2ZvcmVpZ24vZmR3YXBpLmgKLS0t IGIvc3JjL2luY2x1ZGUvZm9yZWlnbi9mZHdhcGkuaAoqKioqKioqKioqKioq KioKKioqIDMxLDM2ICoqKiogdHlwZWRlZiB2b2lkICgqR2V0Rm9yZWlnblBh dGhzX2Z1bmN0aW9uKSAoUGxhbm5lckluZm8gKnJvb3QsCi0tLSAzMSw0MiAt LS0tCiAgCQkJCQkJCQkJCQkJCSAgUmVsT3B0SW5mbyAqYmFzZXJlbCwKICAJ CQkJCQkJCQkJCQkJICBPaWQgZm9yZWlnbnRhYmxlaWQpOwogIAorIHR5cGVk ZWYgRm9yZWlnblBhdGggKigqUmVwYXJhbWV0ZXJpemVGb3JlaWduUGF0aF9m dW5jdGlvbikgKFBsYW5uZXJJbmZvICpyb290LAorIAkJCQkJCQkJCQkJCQkJ IFJlbE9wdEluZm8gKmJhc2VyZWwsCisgCQkJCQkJCQkJCQkJCQkgIE9pZCBm b3JlaWdudGFibGVpZCwKKyAJCQkJCQkJCQkJCQkJCQlGb3JlaWduUGF0aCAq cGF0aCwKKyAJCQkJCQkJCQkJCQkJICBSZWxpZHMgcmVxdWlyZWRfb3V0ZXIp OworIAogIHR5cGVkZWYgRm9yZWlnblNjYW4gKigqR2V0Rm9yZWlnblBsYW5f ZnVuY3Rpb24pIChQbGFubmVySW5mbyAqcm9vdCwKICAJCQkJCQkJCQkJCQkJ CSBSZWxPcHRJbmZvICpiYXNlcmVsLAogIAkJCQkJCQkJCQkJCQkJICBPaWQg Zm9yZWlnbnRhYmxlaWQsCioqKioqKioqKioqKioqKgoqKiogMTE3LDEyMiAq KioqIHR5cGVkZWYgc3RydWN0IEZkd1JvdXRpbmUKLS0tIDEyMywxMjkgLS0t LQogIAkvKiBGdW5jdGlvbnMgZm9yIHNjYW5uaW5nIGZvcmVpZ24gdGFibGVz ICovCiAgCUdldEZvcmVpZ25SZWxTaXplX2Z1bmN0aW9uIEdldEZvcmVpZ25S ZWxTaXplOwogIAlHZXRGb3JlaWduUGF0aHNfZnVuY3Rpb24gR2V0Rm9yZWln blBhdGhzOworIAlSZXBhcmFtZXRlcml6ZUZvcmVpZ25QYXRoX2Z1bmN0aW9u IFJlcGFyYW1ldGVyaXplRm9yZWlnblBhdGg7CiAgCUdldEZvcmVpZ25QbGFu X2Z1bmN0aW9uIEdldEZvcmVpZ25QbGFuOwogIAlCZWdpbkZvcmVpZ25TY2Fu X2Z1bmN0aW9uIEJlZ2luRm9yZWlnblNjYW47CiAgCUl0ZXJhdGVGb3JlaWdu U2Nhbl9mdW5jdGlvbiBJdGVyYXRlRm9yZWlnblNjYW47CioqKiBhL3NyYy90 ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvZm9yZWlnbl9kYXRhLm91dAotLS0gYi9z cmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2ZvcmVpZ25fZGF0YS5vdXQKKioq KioqKioqKioqKioqCioqKiA3NDgsNzYzICoqKiogQ1JFQVRFIFRBQkxFIHVz ZV9mdDFfY29sdW1uX3R5cGUgKHggZnQxKTsKICBBTFRFUiBGT1JFSUdOIFRB QkxFIGZ0MSBBTFRFUiBDT0xVTU4gYzggU0VUIERBVEEgVFlQRSBpbnRlZ2Vy OwktLSBFUlJPUgogIEVSUk9SOiAgY2Fubm90IGFsdGVyIGZvcmVpZ24gdGFi bGUgImZ0MSIgYmVjYXVzZSBjb2x1bW4gInVzZV9mdDFfY29sdW1uX3R5cGUu eCIgdXNlcyBpdHMgcm93IHR5cGUKICBEUk9QIFRBQkxFIHVzZV9mdDFfY29s dW1uX3R5cGU7CiEgQUxURVIgRk9SRUlHTiBUQUJMRSBmdDEgQUREIENPTlNU UkFJTlQgZnQxX2M5X2NoZWNrIENIRUNLIChjOSA8IDApOyAtLSBFUlJPUgoh IEVSUk9SOiAgY29uc3RyYWludHMgYXJlIG5vdCBzdXBwb3J0ZWQgb24gZm9y ZWlnbiB0YWJsZXMKISBMSU5FIDE6IEFMVEVSIEZPUkVJR04gVEFCTEUgZnQx IEFERCBDT05TVFJBSU5UIGZ0MV9jOV9jaGVjayBDSEVDSyAoYy4uLgohICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF4KICBBTFRFUiBG T1JFSUdOIFRBQkxFIGZ0MSBEUk9QIENPTlNUUkFJTlQgbm9fY29uc3Q7ICAg ICAgICAgICAgICAgLS0gRVJST1IKISBFUlJPUjogICJmdDEiIGlzIG5vdCBh IHRhYmxlCiAgQUxURVIgRk9SRUlHTiBUQUJMRSBmdDEgRFJPUCBDT05TVFJB SU5UIElGIEVYSVNUUyBub19jb25zdDsKISBFUlJPUjogICJmdDEiIGlzIG5v dCBhIHRhYmxlCiEgQUxURVIgRk9SRUlHTiBUQUJMRSBmdDEgRFJPUCBDT05T VFJBSU5UIGZ0MV9jMV9jaGVjazsKISBFUlJPUjogICJmdDEiIGlzIG5vdCBh IHRhYmxlCiAgQUxURVIgRk9SRUlHTiBUQUJMRSBmdDEgU0VUIFdJVEggT0lE UzsgICAgICAgICAgICAgICAgICAgICAgICAgIC0tIEVSUk9SCiAgRVJST1I6 ICAiZnQxIiBpcyBub3QgYSB0YWJsZQogIEFMVEVSIEZPUkVJR04gVEFCTEUg ZnQxIE9XTkVSIFRPIHJlZ3Jlc3NfdGVzdF9yb2xlOwotLS0gNzQ4LDc1OSAt LS0tCiAgQUxURVIgRk9SRUlHTiBUQUJMRSBmdDEgQUxURVIgQ09MVU1OIGM4 IFNFVCBEQVRBIFRZUEUgaW50ZWdlcjsJLS0gRVJST1IKICBFUlJPUjogIGNh bm5vdCBhbHRlciBmb3JlaWduIHRhYmxlICJmdDEiIGJlY2F1c2UgY29sdW1u ICJ1c2VfZnQxX2NvbHVtbl90eXBlLngiIHVzZXMgaXRzIHJvdyB0eXBlCiAg RFJPUCBUQUJMRSB1c2VfZnQxX2NvbHVtbl90eXBlOwohIEFMVEVSIEZPUkVJ R04gVEFCTEUgZnQxIEFERCBDT05TVFJBSU5UIGZ0MV9jOV9jaGVjayBDSEVD SyAoYzkgPCAwKTsKICBBTFRFUiBGT1JFSUdOIFRBQkxFIGZ0MSBEUk9QIENP TlNUUkFJTlQgbm9fY29uc3Q7ICAgICAgICAgICAgICAgLS0gRVJST1IKISBF UlJPUjogIGNvbnN0cmFpbnQgIm5vX2NvbnN0IiBvZiByZWxhdGlvbiAiZnQx IiBkb2VzIG5vdCBleGlzdAogIEFMVEVSIEZPUkVJR04gVEFCTEUgZnQxIERS T1AgQ09OU1RSQUlOVCBJRiBFWElTVFMgbm9fY29uc3Q7CiEgTk9USUNFOiAg Y29uc3RyYWludCAibm9fY29uc3QiIG9mIHJlbGF0aW9uICJmdDEiIGRvZXMg bm90IGV4aXN0LCBza2lwcGluZwohIEFMVEVSIEZPUkVJR04gVEFCTEUgZnQx IERST1AgQ09OU1RSQUlOVCBmdDFfYzlfY2hlY2s7CiAgQUxURVIgRk9SRUlH TiBUQUJMRSBmdDEgU0VUIFdJVEggT0lEUzsgICAgICAgICAgICAgICAgICAg ICAgICAgIC0tIEVSUk9SCiAgRVJST1I6ICAiZnQxIiBpcyBub3QgYSB0YWJs ZQogIEFMVEVSIEZPUkVJR04gVEFCTEUgZnQxIE9XTkVSIFRPIHJlZ3Jlc3Nf dGVzdF9yb2xlOwoqKiogYS9zcmMvdGVzdC9yZWdyZXNzL3NxbC9mb3JlaWdu X2RhdGEuc3FsCi0tLSBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2ZvcmVpZ25f ZGF0YS5zcWwKKioqKioqKioqKioqKioqCioqKiAzMTQsMzIzICoqKiogQUxU RVIgRk9SRUlHTiBUQUJMRSBmdDEgQUxURVIgQ09MVU1OIGM4IFNFVCBTVEFU SVNUSUNTIC0xOwogIENSRUFURSBUQUJMRSB1c2VfZnQxX2NvbHVtbl90eXBl ICh4IGZ0MSk7CiAgQUxURVIgRk9SRUlHTiBUQUJMRSBmdDEgQUxURVIgQ09M VU1OIGM4IFNFVCBEQVRBIFRZUEUgaW50ZWdlcjsJLS0gRVJST1IKICBEUk9Q IFRBQkxFIHVzZV9mdDFfY29sdW1uX3R5cGU7CiEgQUxURVIgRk9SRUlHTiBU QUJMRSBmdDEgQUREIENPTlNUUkFJTlQgZnQxX2M5X2NoZWNrIENIRUNLIChj OSA8IDApOyAtLSBFUlJPUgogIEFMVEVSIEZPUkVJR04gVEFCTEUgZnQxIERS T1AgQ09OU1RSQUlOVCBub19jb25zdDsgICAgICAgICAgICAgICAtLSBFUlJP UgogIEFMVEVSIEZPUkVJR04gVEFCTEUgZnQxIERST1AgQ09OU1RSQUlOVCBJ RiBFWElTVFMgbm9fY29uc3Q7CiEgQUxURVIgRk9SRUlHTiBUQUJMRSBmdDEg RFJPUCBDT05TVFJBSU5UIGZ0MV9jMV9jaGVjazsKICBBTFRFUiBGT1JFSUdO IFRBQkxFIGZ0MSBTRVQgV0lUSCBPSURTOyAgICAgICAgICAgICAgICAgICAg ICAgICAgLS0gRVJST1IKICBBTFRFUiBGT1JFSUdOIFRBQkxFIGZ0MSBPV05F UiBUTyByZWdyZXNzX3Rlc3Rfcm9sZTsKICBBTFRFUiBGT1JFSUdOIFRBQkxF IGZ0MSBPUFRJT05TIChEUk9QIGRlbGltaXRlciwgU0VUIHF1b3RlICd+Jywg QUREIGVzY2FwZSAnQCcpOwotLS0gMzE0LDMyMyAtLS0tCiAgQ1JFQVRFIFRB QkxFIHVzZV9mdDFfY29sdW1uX3R5cGUgKHggZnQxKTsKICBBTFRFUiBGT1JF SUdOIFRBQkxFIGZ0MSBBTFRFUiBDT0xVTU4gYzggU0VUIERBVEEgVFlQRSBp bnRlZ2VyOwktLSBFUlJPUgogIERST1AgVEFCTEUgdXNlX2Z0MV9jb2x1bW5f dHlwZTsKISBBTFRFUiBGT1JFSUdOIFRBQkxFIGZ0MSBBREQgQ09OU1RSQUlO VCBmdDFfYzlfY2hlY2sgQ0hFQ0sgKGM5IDwgMCk7CiAgQUxURVIgRk9SRUlH TiBUQUJMRSBmdDEgRFJPUCBDT05TVFJBSU5UIG5vX2NvbnN0OyAgICAgICAg ICAgICAgIC0tIEVSUk9SCiAgQUxURVIgRk9SRUlHTiBUQUJMRSBmdDEgRFJP UCBDT05TVFJBSU5UIElGIEVYSVNUUyBub19jb25zdDsKISBBTFRFUiBGT1JF SUdOIFRBQkxFIGZ0MSBEUk9QIENPTlNUUkFJTlQgZnQxX2M5X2NoZWNrOwog IEFMVEVSIEZPUkVJR04gVEFCTEUgZnQxIFNFVCBXSVRIIE9JRFM7ICAgICAg ICAgICAgICAgICAgICAgICAgICAtLSBFUlJPUgogIEFMVEVSIEZPUkVJR04g VEFCTEUgZnQxIE9XTkVSIFRPIHJlZ3Jlc3NfdGVzdF9yb2xlOwogIEFMVEVS IEZPUkVJR04gVEFCTEUgZnQxIE9QVElPTlMgKERST1AgZGVsaW1pdGVyLCBT RVQgcXVvdGUgJ34nLCBBREQgZXNjYXBlICdAJyk7Cg== --------------030103080601040207040101 Content-Type: text/plain Content-Disposition: inline Content-Transfer-Encoding: 8bit MIME-Version: 1.0 -- Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-hackers --------------030103080601040207040101--