Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtp (Exim 4.80) (envelope-from ) id 1WVKFZ-0004fV-E8 for pgsql-hackers@arkaria.postgresql.org; Wed, 02 Apr 2014 12:26:38 +0000 Received: from localhost ([127.0.0.1] helo=postgresql.org) by malur.postgresql.org with smtp (Exim 4.80) (envelope-from ) id 1WVKFY-0004Ns-OW for pgsql-hackers@arkaria.postgresql.org; Wed, 02 Apr 2014 12:26:36 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtp (Exim 4.80) (envelope-from ) id 1WVKFW-0004Nj-HY for pgsql-hackers@postgresql.org; Wed, 02 Apr 2014 12:26:34 +0000 Received: from tama500.ecl.ntt.co.jp ([129.60.39.148]) by magus.postgresql.org with esmtp (Exim 4.80) (envelope-from ) id 1WVKFN-0003Qm-VA for pgsql-hackers@postgresql.org; Wed, 02 Apr 2014 12:26:34 +0000 Received: from mfs6.rdh.ecl.ntt.co.jp (mfs6.rdh.ecl.ntt.co.jp [129.60.39.149]) by tama500.ecl.ntt.co.jp (8.13.8/8.13.8) with ESMTP id s32CQJcV016555; Wed, 2 Apr 2014 21:26:19 +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 E019CE0156; Wed, 2 Apr 2014 21:26:18 +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 D3549E0155; Wed, 2 Apr 2014 21:26:18 +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 s32CQIsI003796; Wed, 2 Apr 2014 21:26:18 +0900 Message-ID: <533C01C7.6030809@lab.ntt.co.jp> Date: Wed, 02 Apr 2014 21:25:43 +0900 From: Etsuro Fujita User-Agent: Mozilla/5.0 (Windows NT 6.0; rv:24.0) Gecko/20100101 Thunderbird/24.4.0 MIME-Version: 1.0 To: Kyotaro HORIGUCHI CC: shigeru.hanada@gmail.com, pgsql-hackers@postgresql.org Subject: Re: inherit support for foreign tables References: <20140318.183856.121817800.horiguchi.kyotaro@lab.ntt.co.jp> <532AE62A.6020307@lab.ntt.co.jp> <532F8EC1.6020401@lab.ntt.co.jp> <20140326.171454.142890940.horiguchi.kyotaro@lab.ntt.co.jp> <533383BF.1050004@lab.ntt.co.jp> <53341F3C.2050609@lab.ntt.co.jp> <53393E18.3080901@lab.ntt.co.jp> In-Reply-To: <53393E18.3080901@lab.ntt.co.jp> Content-Type: multipart/mixed; boundary="------------000007070100040102030703" X-TM-AS-MML: No X-Pg-Spam-Score: -2.5 (--) 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. --------------000007070100040102030703 Content-Type: text/plain; charset=Shift_JIS Content-Transfer-Encoding: 7bit Attached is v11. Changes: * Rebased to head * Improve an error message added to tablecmd.c to match it to existing ones there * Improve the documentaion a bit Thanks, Best regards, Etsuro Fujita --------------000007070100040102030703 Content-Type: text/plain; charset=Shift_JIS; name="foreign_inherit-v11.patch" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="foreign_inherit-v11.patch" KioqIGEvY29udHJpYi9maWxlX2Zkdy9maWxlX2Zkdy5jCi0tLSBiL2NvbnRy aWIvZmlsZV9mZHcvZmlsZV9mZHcuYwoqKioqKioqKioqKioqKioKKioqIDEx NywxMjIgKioqKiBzdGF0aWMgdm9pZCBmaWxlR2V0Rm9yZWlnblJlbFNpemUo UGxhbm5lckluZm8gKnJvb3QsCi0tLSAxMTcsMTI3IC0tLS0KICBzdGF0aWMg dm9pZCBmaWxlR2V0Rm9yZWlnblBhdGhzKFBsYW5uZXJJbmZvICpyb290LAog IAkJCQkJUmVsT3B0SW5mbyAqYmFzZXJlbCwKICAJCQkJCU9pZCBmb3JlaWdu dGFibGVpZCk7Cisgc3RhdGljIEZvcmVpZ25QYXRoICpmaWxlUmVwYXJhbWV0 ZXJpemVGb3JlaWduUGF0aChQbGFubmVySW5mbyAqcm9vdCwKKyAJCQkJCQkJ CQkJCQkgIFJlbE9wdEluZm8gKmJhc2VyZWwsCisgCQkJCQkJCQkJCQkJICBP aWQgZm9yZWlnbnRhYmxlaWQsCisgCQkJCQkJCQkJCQkJICBGb3JlaWduUGF0 aCAqcGF0aCwKKyAJCQkJCQkJCQkJCQkgIFJlbGlkcyByZXF1aXJlZF9vdXRl cik7CiAgc3RhdGljIEZvcmVpZ25TY2FuICpmaWxlR2V0Rm9yZWlnblBsYW4o UGxhbm5lckluZm8gKnJvb3QsCiAgCQkJCSAgIFJlbE9wdEluZm8gKmJhc2Vy ZWwsCiAgCQkJCSAgIE9pZCBmb3JlaWdudGFibGVpZCwKKioqKioqKioqKioq KioqCioqKiAxNDUsMTUxICoqKiogc3RhdGljIGJvb2wgY2hlY2tfc2VsZWN0 aXZlX2JpbmFyeV9jb252ZXJzaW9uKFJlbE9wdEluZm8gKmJhc2VyZWwsCiAg c3RhdGljIHZvaWQgZXN0aW1hdGVfc2l6ZShQbGFubmVySW5mbyAqcm9vdCwg UmVsT3B0SW5mbyAqYmFzZXJlbCwKICAJCQkgIEZpbGVGZHdQbGFuU3RhdGUg KmZkd19wcml2YXRlKTsKICBzdGF0aWMgdm9pZCBlc3RpbWF0ZV9jb3N0cyhQ bGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqYmFzZXJlbCwKISAJCQkg ICBGaWxlRmR3UGxhblN0YXRlICpmZHdfcHJpdmF0ZSwKICAJCQkgICBDb3N0 ICpzdGFydHVwX2Nvc3QsIENvc3QgKnRvdGFsX2Nvc3QpOwogIHN0YXRpYyBp bnQgZmlsZV9hY3F1aXJlX3NhbXBsZV9yb3dzKFJlbGF0aW9uIG9uZXJlbCwg aW50IGVsZXZlbCwKICAJCQkJCQkgSGVhcFR1cGxlICpyb3dzLCBpbnQgdGFy Z3Jvd3MsCi0tLSAxNTAsMTU2IC0tLS0KICBzdGF0aWMgdm9pZCBlc3RpbWF0 ZV9zaXplKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpiYXNlcmVs LAogIAkJCSAgRmlsZUZkd1BsYW5TdGF0ZSAqZmR3X3ByaXZhdGUpOwogIHN0 YXRpYyB2b2lkIGVzdGltYXRlX2Nvc3RzKFBsYW5uZXJJbmZvICpyb290LCBS ZWxPcHRJbmZvICpiYXNlcmVsLAohIAkJCSAgIEZpbGVGZHdQbGFuU3RhdGUg KmZkd19wcml2YXRlLCBMaXN0ICpqb2luX2NvbmRzLAogIAkJCSAgIENvc3Qg KnN0YXJ0dXBfY29zdCwgQ29zdCAqdG90YWxfY29zdCk7CiAgc3RhdGljIGlu dCBmaWxlX2FjcXVpcmVfc2FtcGxlX3Jvd3MoUmVsYXRpb24gb25lcmVsLCBp bnQgZWxldmVsLAogIAkJCQkJCSBIZWFwVHVwbGUgKnJvd3MsIGludCB0YXJn cm93cywKKioqKioqKioqKioqKioqCioqKiAxNjMsMTY4ICoqKiogZmlsZV9m ZHdfaGFuZGxlcihQR19GVU5DVElPTl9BUkdTKQotLS0gMTY4LDE3NCAtLS0t CiAgCiAgCWZkd3JvdXRpbmUtPkdldEZvcmVpZ25SZWxTaXplID0gZmlsZUdl dEZvcmVpZ25SZWxTaXplOwogIAlmZHdyb3V0aW5lLT5HZXRGb3JlaWduUGF0 aHMgPSBmaWxlR2V0Rm9yZWlnblBhdGhzOworIAlmZHdyb3V0aW5lLT5SZXBh cmFtZXRlcml6ZUZvcmVpZ25QYXRoID0gZmlsZVJlcGFyYW1ldGVyaXplRm9y ZWlnblBhdGg7CiAgCWZkd3JvdXRpbmUtPkdldEZvcmVpZ25QbGFuID0gZmls ZUdldEZvcmVpZ25QbGFuOwogIAlmZHdyb3V0aW5lLT5FeHBsYWluRm9yZWln blNjYW4gPSBmaWxlRXhwbGFpbkZvcmVpZ25TY2FuOwogIAlmZHdyb3V0aW5l LT5CZWdpbkZvcmVpZ25TY2FuID0gZmlsZUJlZ2luRm9yZWlnblNjYW47Cioq KioqKioqKioqKioqKgoqKiogNTE3LDUyMyAqKioqIGZpbGVHZXRGb3JlaWdu UGF0aHMoUGxhbm5lckluZm8gKnJvb3QsCiAgCQkJCQkJCQkJCSAgKE5vZGUg KikgY29sdW1ucykpOwogIAogIAkvKiBFc3RpbWF0ZSBjb3N0cyAqLwohIAll c3RpbWF0ZV9jb3N0cyhyb290LCBiYXNlcmVsLCBmZHdfcHJpdmF0ZSwKICAJ CQkJICAgJnN0YXJ0dXBfY29zdCwgJnRvdGFsX2Nvc3QpOwogIAogIAkvKgot LS0gNTIzLDUzMCAtLS0tCiAgCQkJCQkJCQkJCSAgKE5vZGUgKikgY29sdW1u cykpOwogIAogIAkvKiBFc3RpbWF0ZSBjb3N0cyAqLwohIAllc3RpbWF0ZV9j b3N0cyhyb290LCBiYXNlcmVsLAohIAkJCQkgICBmZHdfcHJpdmF0ZSwgTklM LAogIAkJCQkgICAmc3RhcnR1cF9jb3N0LCAmdG90YWxfY29zdCk7CiAgCiAg CS8qCioqKioqKioqKioqKioqKgoqKiogNTQyLDU0NyAqKioqIGZpbGVHZXRG b3JlaWduUGF0aHMoUGxhbm5lckluZm8gKnJvb3QsCi0tLSA1NDksNTg5IC0t 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 Z24gdGFibGUKICAgKi8KKioqKioqKioqKioqKioqCioqKiA5NzAsOTgxICoq KiogZXN0aW1hdGVfc2l6ZShQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5m byAqYmFzZXJlbCwKICAgKi8KICBzdGF0aWMgdm9pZAogIGVzdGltYXRlX2Nv c3RzKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpiYXNlcmVsLAoh IAkJCSAgIEZpbGVGZHdQbGFuU3RhdGUgKmZkd19wcml2YXRlLAogIAkJCSAg IENvc3QgKnN0YXJ0dXBfY29zdCwgQ29zdCAqdG90YWxfY29zdCkKICB7CiAg CUJsb2NrTnVtYmVyIHBhZ2VzID0gZmR3X3ByaXZhdGUtPnBhZ2VzOwogIAlk b3VibGUJCW50dXBsZXMgPSBmZHdfcHJpdmF0ZS0+bnR1cGxlczsKICAJQ29z dAkJcnVuX2Nvc3QgPSAwOwogIAlDb3N0CQljcHVfcGVyX3R1cGxlOwogIAog IAkvKgotLS0gMTAxMiwxMDI0IC0tLS0KICAgKi8KICBzdGF0aWMgdm9pZAog IGVzdGltYXRlX2Nvc3RzKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZv ICpiYXNlcmVsLAohIAkJCSAgIEZpbGVGZHdQbGFuU3RhdGUgKmZkd19wcml2 YXRlLCBMaXN0ICpqb2luX2NvbmRzLAogIAkJCSAgIENvc3QgKnN0YXJ0dXBf Y29zdCwgQ29zdCAqdG90YWxfY29zdCkKICB7CiAgCUJsb2NrTnVtYmVyIHBh Z2VzID0gZmR3X3ByaXZhdGUtPnBhZ2VzOwogIAlkb3VibGUJCW50dXBsZXMg PSBmZHdfcHJpdmF0ZS0+bnR1cGxlczsKICAJQ29zdAkJcnVuX2Nvc3QgPSAw OworIAlRdWFsQ29zdAlqb2luX2Nvc3Q7CiAgCUNvc3QJCWNwdV9wZXJfdHVw bGU7CiAgCiAgCS8qCioqKioqKioqKioqKioqKgoqKiogOTg2LDk5MyAqKioq IGVzdGltYXRlX2Nvc3RzKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZv ICpiYXNlcmVsLAogIAkgKi8KICAJcnVuX2Nvc3QgKz0gc2VxX3BhZ2VfY29z dCAqIHBhZ2VzOwogIAohIAkqc3RhcnR1cF9jb3N0ID0gYmFzZXJlbC0+YmFz ZXJlc3RyaWN0Y29zdC5zdGFydHVwOwohIAljcHVfcGVyX3R1cGxlID0gY3B1 X3R1cGxlX2Nvc3QgKiAxMCArIGJhc2VyZWwtPmJhc2VyZXN0cmljdGNvc3Qu cGVyX3R1cGxlOwogIAlydW5fY29zdCArPSBjcHVfcGVyX3R1cGxlICogbnR1 cGxlczsKICAJKnRvdGFsX2Nvc3QgPSAqc3RhcnR1cF9jb3N0ICsgcnVuX2Nv c3Q7CiAgfQotLS0gMTAyOSwxMDM5IC0tLS0KICAJICovCiAgCXJ1bl9jb3N0 ICs9IHNlcV9wYWdlX2Nvc3QgKiBwYWdlczsKICAKISAJY29zdF9xdWFsX2V2 YWwoJmpvaW5fY29zdCwgam9pbl9jb25kcywgcm9vdCk7CiEgCSpzdGFydHVw X2Nvc3QgPQohIAkJKGJhc2VyZWwtPmJhc2VyZXN0cmljdGNvc3Quc3RhcnR1 cCArIGpvaW5fY29zdC5zdGFydHVwKTsKISAJY3B1X3Blcl90dXBsZSA9IGNw dV90dXBsZV9jb3N0ICogMTAgKwohIAkJKGJhc2VyZWwtPmJhc2VyZXN0cmlj dGNvc3QucGVyX3R1cGxlICsgam9pbl9jb3N0LnBlcl90dXBsZSk7CiAgCXJ1 bl9jb3N0ICs9IGNwdV9wZXJfdHVwbGUgKiBudHVwbGVzOwogIAkqdG90YWxf Y29zdCA9ICpzdGFydHVwX2Nvc3QgKyBydW5fY29zdDsKICB9CioqKiBhL2Nv bnRyaWIvcG9zdGdyZXNfZmR3L3Bvc3RncmVzX2Zkdy5jCi0tLSBiL2NvbnRy aWIvcG9zdGdyZXNfZmR3L3Bvc3RncmVzX2Zkdy5jCioqKioqKioqKioqKioq KgoqKiogMjQxLDI0NiAqKioqIHN0YXRpYyB2b2lkIHBvc3RncmVzR2V0Rm9y ZWlnblJlbFNpemUoUGxhbm5lckluZm8gKnJvb3QsCi0tLSAyNDEsMjUxIC0t LS0KICBzdGF0aWMgdm9pZCBwb3N0Z3Jlc0dldEZvcmVpZ25QYXRocyhQbGFu bmVySW5mbyAqcm9vdCwKICAJCQkJCQlSZWxPcHRJbmZvICpiYXNlcmVsLAog IAkJCQkJCU9pZCBmb3JlaWdudGFibGVpZCk7Cisgc3RhdGljIEZvcmVpZ25Q YXRoICpwb3N0Z3Jlc1JlcGFyYW1ldGVyaXplRm9yZWlnblBhdGgoUGxhbm5l ckluZm8gKnJvb3QsCisgCQkJCQkJCQkJCQkJCSAgUmVsT3B0SW5mbyAqYmFz ZXJlbCwKKyAJCQkJCQkJCQkJCQkJICBPaWQgZm9yZWlnbnRhYmxlaWQsCisg CQkJCQkJCQkJCQkJCSAgRm9yZWlnblBhdGggKnBhdGgsCisgCQkJCQkJCQkJ CQkJCSAgUmVsaWRzIHJlcXVpcmVkX291dGVyKTsKICBzdGF0aWMgRm9yZWln blNjYW4gKnBvc3RncmVzR2V0Rm9yZWlnblBsYW4oUGxhbm5lckluZm8gKnJv b3QsCiAgCQkJCQkgICBSZWxPcHRJbmZvICpiYXNlcmVsLAogIAkJCQkJICAg T2lkIGZvcmVpZ250YWJsZWlkLAoqKioqKioqKioqKioqKioKKioqIDM0Miwz NDcgKioqKiBwb3N0Z3Jlc19mZHdfaGFuZGxlcihQR19GVU5DVElPTl9BUkdT KQotLS0gMzQ3LDM1MyAtLS0tCiAgCS8qIEZ1bmN0aW9ucyBmb3Igc2Nhbm5p bmcgZm9yZWlnbiB0YWJsZXMgKi8KICAJcm91dGluZS0+R2V0Rm9yZWlnblJl bFNpemUgPSBwb3N0Z3Jlc0dldEZvcmVpZ25SZWxTaXplOwogIAlyb3V0aW5l LT5HZXRGb3JlaWduUGF0aHMgPSBwb3N0Z3Jlc0dldEZvcmVpZ25QYXRoczsK KyAJcm91dGluZS0+UmVwYXJhbWV0ZXJpemVGb3JlaWduUGF0aCA9IHBvc3Rn cmVzUmVwYXJhbWV0ZXJpemVGb3JlaWduUGF0aDsKICAJcm91dGluZS0+R2V0 Rm9yZWlnblBsYW4gPSBwb3N0Z3Jlc0dldEZvcmVpZ25QbGFuOwogIAlyb3V0 aW5lLT5CZWdpbkZvcmVpZ25TY2FuID0gcG9zdGdyZXNCZWdpbkZvcmVpZ25T Y2FuOwogIAlyb3V0aW5lLT5JdGVyYXRlRm9yZWlnblNjYW4gPSBwb3N0Z3Jl c0l0ZXJhdGVGb3JlaWduU2NhbjsKKioqKioqKioqKioqKioqCioqKiA3Mjks NzM0ICoqKiogcG9zdGdyZXNHZXRGb3JlaWduUGF0aHMoUGxhbm5lckluZm8g KnJvb3QsCi0tLSA3MzUsNzgyIC0tLS0KICB9CiAgCiAgLyoKKyAgKiBwb3N0 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 NzUsMTc4NSAqKioqIGVzdGltYXRlX3BhdGhfY29zdF9zaXplKFBsYW5uZXJJ bmZvICpyb290LAogIAl9CiAgCWVsc2UKICAJewohIAkJLyoKISAJCSAqIFdl IGRvbid0IHN1cHBvcnQgam9pbiBjb25kaXRpb25zIGluIHRoaXMgbW9kZSAo aGVuY2UsIG5vCiEgCQkgKiBwYXJhbWV0ZXJpemVkIHBhdGhzIGNhbiBiZSBt YWRlKS4KISAJCSAqLwohIAkJQXNzZXJ0KGpvaW5fY29uZHMgPT0gTklMKTsK ICAKICAJCS8qIFVzZSByb3dzL3dpZHRoIGVzdGltYXRlcyBtYWRlIGJ5IHNl dF9iYXNlcmVsX3NpemVfZXN0aW1hdGVzLiAqLwogIAkJcm93cyA9IGJhc2Vy ZWwtPnJvd3M7Ci0tLSAxODIzLDE4MzAgLS0tLQogIAl9CiAgCWVsc2UKICAJ ewohIAkJU2VsZWN0aXZpdHkgam9pbl9zZWw7CiEgCQlRdWFsQ29zdAlqb2lu X2Nvc3Q7CiAgCiAgCQkvKiBVc2Ugcm93cy93aWR0aCBlc3RpbWF0ZXMgbWFk ZSBieSBzZXRfYmFzZXJlbF9zaXplX2VzdGltYXRlcy4gKi8KICAJCXJvd3Mg PSBiYXNlcmVsLT5yb3dzOwoqKioqKioqKioqKioqKioKKioqIDE3OTIsMTgw OCAqKioqIGVzdGltYXRlX3BhdGhfY29zdF9zaXplKFBsYW5uZXJJbmZvICpy b290LAogIAkJcmV0cmlldmVkX3Jvd3MgPSBjbGFtcF9yb3dfZXN0KHJvd3Mg LyBmcGluZm8tPmxvY2FsX2NvbmRzX3NlbCk7CiAgCQlyZXRyaWV2ZWRfcm93 cyA9IE1pbihyZXRyaWV2ZWRfcm93cywgYmFzZXJlbC0+dHVwbGVzKTsKICAK ICAJCS8qCiAgCQkgKiBDb3N0IGFzIHRob3VnaCB0aGlzIHdlcmUgYSBzZXFz Y2FuLCB3aGljaCBpcyBwZXNzaW1pc3RpYy4gIFdlCiEgCQkgKiBlZmZlY3Rp dmVseSBpbWFnaW5lIHRoZSBsb2NhbF9jb25kcyBhcmUgYmVpbmcgZXZhbHVh dGVkIHJlbW90ZWx5LAohIAkJICogdG9vLgogIAkJICovCiAgCQlzdGFydHVw X2Nvc3QgPSAwOwogIAkJcnVuX2Nvc3QgPSAwOwogIAkJcnVuX2Nvc3QgKz0g c2VxX3BhZ2VfY29zdCAqIGJhc2VyZWwtPnBhZ2VzOwogIAohIAkJc3RhcnR1 cF9jb3N0ICs9IGJhc2VyZWwtPmJhc2VyZXN0cmljdGNvc3Quc3RhcnR1cDsK ISAJCWNwdV9wZXJfdHVwbGUgPSBjcHVfdHVwbGVfY29zdCArIGJhc2VyZWwt PmJhc2VyZXN0cmljdGNvc3QucGVyX3R1cGxlOwogIAkJcnVuX2Nvc3QgKz0g Y3B1X3Blcl90dXBsZSAqIGJhc2VyZWwtPnR1cGxlczsKICAKICAJCXRvdGFs X2Nvc3QgPSBzdGFydHVwX2Nvc3QgKyBydW5fY29zdDsKLS0tIDE4MzcsMTg2 NSAtLS0tCiAgCQlyZXRyaWV2ZWRfcm93cyA9IGNsYW1wX3Jvd19lc3Qocm93 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+IHdvdWxkIHJlbW92ZSB0aGF0IGNsYXVzZSBmcm9tIHNj YW5fY2xhdXNlcywKICAgICAgIGJ1dCBhZGQgdGhlIDxyZXBsYWNlYWJsZT5z dWJfZXhwcmVzc2lvbjwvPiB0byA8c3RydWN0ZmllbGQ+ZmR3X2V4cHJzPC8+ CiAgICAgICB0byBlbnN1cmUgdGhhdCBpdCBnZXRzIG1hc3NhZ2VkIGludG8g ZXhlY3V0YWJsZSBmb3JtLiAgSXQgd291bGQgcHJvYmFibHkKLS0tIDkyNSw5 MzUgLS0tLQogICAgICAgPHJlcGxhY2VhYmxlPnN1Yl9leHByZXNzaW9uPC8+ LCB3aGljaCBpdCBkZXRlcm1pbmVzIGNhbiBiZSBleGVjdXRlZCBvbgogICAg ICAgdGhlIHJlbW90ZSBzZXJ2ZXIgZ2l2ZW4gdGhlIGxvY2FsbHktZXZhbHVh dGVkIHZhbHVlIG9mIHRoZQogICAgICAgPHJlcGxhY2VhYmxlPnN1Yl9leHBy ZXNzaW9uPC8+LiAgVGhlIGFjdHVhbCBpZGVudGlmaWNhdGlvbiBvZiBzdWNo IGEKISAgICAgIGNsYXVzZSBzaG91bGQgaGFwcGVuIGR1cmluZyA8ZnVuY3Rp b24+R2V0Rm9yZWlnblBhdGhzPC8+IG9yCiEgICAgICA8ZnVuY3Rpb24+UmVw YXJhbWV0ZXJpemVGb3JlaWduUGF0aDwvPiwgc2luY2UgaXQgd291bGQgYWZm ZWN0IHRoZSBjb3N0CiEgICAgICBlc3RpbWF0ZSBmb3IgdGhlIHBhdGguICBU aGUgcGF0aCdzIDxzdHJ1Y3RmaWVsZD5mZHdfcHJpdmF0ZTwvPiBmaWVsZAoh ICAgICAgd291bGQgcHJvYmFibHkgaW5jbHVkZSBhIHBvaW50ZXIgdG8gdGhl IGlkZW50aWZpZWQgY2xhdXNlJ3MKISAgICAgIDxzdHJ1Y3RuYW1lPlJlc3Ry aWN0SW5mbzwvPiBub2RlLiAgVGhlbgogICAgICAgPGZ1bmN0aW9uPkdldEZv cmVpZ25QbGFuPC8+IHdvdWxkIHJlbW92ZSB0aGF0IGNsYXVzZSBmcm9tIHNj YW5fY2xhdXNlcywKICAgICAgIGJ1dCBhZGQgdGhlIDxyZXBsYWNlYWJsZT5z dWJfZXhwcmVzc2lvbjwvPiB0byA8c3RydWN0ZmllbGQ+ZmR3X2V4cHJzPC8+ CiAgICAgICB0byBlbnN1cmUgdGhhdCBpdCBnZXRzIG1hc3NhZ2VkIGludG8g ZXhlY3V0YWJsZSBmb3JtLiAgSXQgd291bGQgcHJvYmFibHkKKioqIGEvZG9j L3NyYy9zZ21sL3JlZi9hbHRlcl9mb3JlaWduX3RhYmxlLnNnbWwKLS0tIGIv ZG9jL3NyYy9zZ21sL3JlZi9hbHRlcl9mb3JlaWduX3RhYmxlLnNnbWwKKioq KioqKioqKioqKioqCioqKiA0Miw0NyAqKioqIEFMVEVSIEZPUkVJR04gVEFC TEUgWyBJRiBFWElTVFMgXSA8cmVwbGFjZWFibGUgY2xhc3M9IlBBUkFNRVRF UiI+bmFtZTwvcmVwbGFjZWFiCi0tLSA0Miw1MSAtLS0tCiAgICAgIEFMVEVS IFsgQ09MVU1OIF0gPHJlcGxhY2VhYmxlIGNsYXNzPSJQQVJBTUVURVIiPmNv bHVtbl9uYW1lPC9yZXBsYWNlYWJsZT4gU0VUICggPHJlcGxhY2VhYmxlIGNs YXNzPSJQQVJBTUVURVIiPmF0dHJpYnV0ZV9vcHRpb248L3JlcGxhY2VhYmxl PiA9IDxyZXBsYWNlYWJsZSBjbGFzcz0iUEFSQU1FVEVSIj52YWx1ZTwvcmVw bGFjZWFibGU+IFssIC4uLiBdICkKICAgICAgQUxURVIgWyBDT0xVTU4gXSA8 cmVwbGFjZWFibGUgY2xhc3M9IlBBUkFNRVRFUiI+Y29sdW1uX25hbWU8L3Jl cGxhY2VhYmxlPiBSRVNFVCAoIDxyZXBsYWNlYWJsZSBjbGFzcz0iUEFSQU1F VEVSIj5hdHRyaWJ1dGVfb3B0aW9uPC9yZXBsYWNlYWJsZT4gWywgLi4uIF0g KQogICAgICBBTFRFUiBbIENPTFVNTiBdIDxyZXBsYWNlYWJsZSBjbGFzcz0i UEFSQU1FVEVSIj5jb2x1bW5fbmFtZTwvcmVwbGFjZWFibGU+IE9QVElPTlMg KCBbIEFERCB8IFNFVCB8IERST1AgXSA8cmVwbGFjZWFibGUgY2xhc3M9IlBB UkFNRVRFUiI+b3B0aW9uPC9yZXBsYWNlYWJsZT4gWyc8cmVwbGFjZWFibGUg Y2xhc3M9IlBBUkFNRVRFUiI+dmFsdWU8L3JlcGxhY2VhYmxlPiddIFssIC4u LiBdKQorICAgICBBREQgPHJlcGxhY2VhYmxlIGNsYXNzPSJQQVJBTUVURVIi PnRhYmxlX2NvbnN0cmFpbnQ8L3JlcGxhY2VhYmxlPgorICAgICBEUk9QIENP TlNUUkFJTlQgWyBJRiBFWElTVFMgXSAgPHJlcGxhY2VhYmxlIGNsYXNzPSJQ QVJBTUVURVIiPmNvbnN0cmFpbnRfbmFtZTwvcmVwbGFjZWFibGU+IFsgUkVT VFJJQ1QgfCBDQVNDQURFIF0KKyAgICAgSU5IRVJJVCA8cmVwbGFjZWFibGUg Y2xhc3M9IlBBUkFNRVRFUiI+cGFyZW50X3RhYmxlPC9yZXBsYWNlYWJsZT4K KyAgICAgTk8gSU5IRVJJVCA8cmVwbGFjZWFibGUgY2xhc3M9IlBBUkFNRVRF UiI+cGFyZW50X3RhYmxlPC9yZXBsYWNlYWJsZT4KICAgICAgT1dORVIgVE8g PHJlcGxhY2VhYmxlIGNsYXNzPSJQQVJBTUVURVIiPm5ld19vd25lcjwvcmVw bGFjZWFibGU+CiAgICAgIE9QVElPTlMgKCBbIEFERCB8IFNFVCB8IERST1Ag XSA8cmVwbGFjZWFibGUgY2xhc3M9IlBBUkFNRVRFUiI+b3B0aW9uPC9yZXBs YWNlYWJsZT4gWyc8cmVwbGFjZWFibGUgY2xhc3M9IlBBUkFNRVRFUiI+dmFs dWU8L3JlcGxhY2VhYmxlPiddIFssIC4uLiBdKQogIDwvc3lub3BzaXM+Cioq KioqKioqKioqKioqKgoqKiogMTQ5LDE1NCAqKioqIEFMVEVSIEZPUkVJR04g VEFCTEUgWyBJRiBFWElTVFMgXSA8cmVwbGFjZWFibGUgY2xhc3M9IlBBUkFN RVRFUiI+bmFtZTwvcmVwbGFjZWFiCi0tLSAxNTMsMjAyIC0tLS0KICAgICA8 L3Zhcmxpc3RlbnRyeT4KICAKICAgICA8dmFybGlzdGVudHJ5PgorICAgICA8 dGVybT48bGl0ZXJhbD5BREQgPHJlcGxhY2VhYmxlIGNsYXNzPSJQQVJBTUVU RVIiPnRhYmxlX2NvbnN0cmFpbnQ8L3JlcGxhY2VhYmxlPjwvbGl0ZXJhbD48 L3Rlcm0+CisgICAgIDxsaXN0aXRlbT4KKyAgICAgIDxwYXJhPgorICAgICAg IFRoaXMgZm9ybSBhZGRzIGEgbmV3IGNvbnN0cmFpbnQgdG8gYSB0YWJsZSB1 c2luZyB0aGUgc2FtZSBzeW50YXggYXMKKyAgICAgICA8eHJlZiBsaW5rZW5k PSJTUUwtQ1JFQVRFRk9SRUlHTlRBQkxFIj4uCisgICAgICAgVW5saWtlIHRo ZSBjYXNlIHdoZW4gYWRkaW5nIGEgY29uc3RyYWludCB0byBhIHJlZ3VsYXIg dGFibGUsIG5vdGhpbmcgaGFwcGVucworICAgICAgIHRvIHRoZSB1bmRlcmx5 aW5nIHN0b3JhZ2U6IHRoaXMgYWN0aW9uIHNpbXBseSBkZWNsYXJlcyB0aGF0 CisgICAgICAgc29tZSBuZXcgY29uc3RyYWludCBob2xkcyBmb3IgYWxsIHJv d3MgaW4gdGhlIGZvcmVpZ24gdGFibGUuCisgICAgICA8L3BhcmE+CisgICAg IDwvbGlzdGl0ZW0+CisgICAgPC92YXJsaXN0ZW50cnk+CisgCisgICAgPHZh cmxpc3RlbnRyeT4KKyAgICAgPHRlcm0+PGxpdGVyYWw+RFJPUCBDT05TVFJB SU5UIFsgSUYgRVhJU1RTIF08L2xpdGVyYWw+PC90ZXJtPgorICAgICA8bGlz dGl0ZW0+CisgICAgICA8cGFyYT4KKyAgICAgICBUaGlzIGZvcm0gZHJvcHMg dGhlIHNwZWNpZmllZCBjb25zdHJhaW50IG9uIGEgdGFibGUuCisgICAgICAg SWYgPGxpdGVyYWw+SUYgRVhJU1RTPC9saXRlcmFsPiBpcyBzcGVjaWZpZWQg YW5kIHRoZSBjb25zdHJhaW50CisgICAgICAgZG9lcyBub3QgZXhpc3QsIG5v IGVycm9yIGlzIHRocm93bi4gSW4gdGhpcyBjYXNlIGEgbm90aWNlIGlzIGlz c3VlZCBpbnN0ZWFkLgorICAgICAgPC9wYXJhPgorICAgICA8L2xpc3RpdGVt PgorICAgIDwvdmFybGlzdGVudHJ5PgorIAorICAgIDx2YXJsaXN0ZW50cnk+ CisgICAgIDx0ZXJtPjxsaXRlcmFsPklOSEVSSVQgPHJlcGxhY2VhYmxlIGNs YXNzPSJQQVJBTUVURVIiPnBhcmVudF90YWJsZTwvcmVwbGFjZWFibGU+PC9s aXRlcmFsPjwvdGVybT4KKyAgICAgPGxpc3RpdGVtPgorICAgICAgPHBhcmE+ CisgICAgICAgVGhpcyBmb3JtIGFkZHMgdGhlIHRhcmdldCBmb3JlaWduIHRh YmxlIGFzIGEgbmV3IGNoaWxkIG9mIHRoZSBzcGVjaWZpZWQKKyAgICAgICBw YXJlbnQgdGFibGUuICBUaGUgcGFyZW50IHRhYmxlIG11c3QgYmUgYW4gb3Jk aW5hcnkgdGFibGUuCisgICAgICA8L3BhcmE+CisgICAgIDwvbGlzdGl0ZW0+ CisgICAgPC92YXJsaXN0ZW50cnk+CisgCisgICAgPHZhcmxpc3RlbnRyeT4K KyAgICAgPHRlcm0+PGxpdGVyYWw+Tk8gSU5IRVJJVCA8cmVwbGFjZWFibGUg Y2xhc3M9IlBBUkFNRVRFUiI+cGFyZW50X3RhYmxlPC9yZXBsYWNlYWJsZT48 L2xpdGVyYWw+PC90ZXJtPgorICAgICA8bGlzdGl0ZW0+CisgICAgICA8cGFy YT4KKyAgICAgICBUaGlzIGZvcm0gcmVtb3ZlcyB0aGUgdGFyZ2V0IGZvcmVp Z24gdGFibGUgZnJvbSB0aGUgbGlzdCBvZiBjaGlsZHJlbiBvZgorICAgICAg IHRoZSBzcGVjaWZpZWQgcGFyZW50IHRhYmxlLgorICAgICAgPC9wYXJhPgor ICAgICA8L2xpc3RpdGVtPgorICAgIDwvdmFybGlzdGVudHJ5PgorIAorICAg IDx2YXJsaXN0ZW50cnk+CiAgICAgIDx0ZXJtPjxsaXRlcmFsPk9XTkVSPC9s aXRlcmFsPjwvdGVybT4KICAgICAgPGxpc3RpdGVtPgogICAgICAgPHBhcmE+ CioqKioqKioqKioqKioqKgoqKiogMjcwLDI3NSAqKioqIEFMVEVSIEZPUkVJ R04gVEFCTEUgWyBJRiBFWElTVFMgXSA8cmVwbGFjZWFibGUgY2xhc3M9IlBB UkFNRVRFUiI+bmFtZTwvcmVwbGFjZWFiCi0tLSAzMTgsMzQxIC0tLS0KICAg ICAgIDwvdmFybGlzdGVudHJ5PgogIAogICAgICAgPHZhcmxpc3RlbnRyeT4K KyAgICAgICA8dGVybT48cmVwbGFjZWFibGUgY2xhc3M9IlBBUkFNRVRFUiI+ dGFibGVfY29uc3RyYWludDwvcmVwbGFjZWFibGU+PC90ZXJtPgorICAgICAg IDxsaXN0aXRlbT4KKyAgICAgICAgPHBhcmE+CisgICAgICAgICBOZXcgdGFi bGUgY29uc3RyYWludCBmb3IgdGhlIHRhYmxlLgorICAgICAgICA8L3BhcmE+ CisgICAgICAgPC9saXN0aXRlbT4KKyAgICAgIDwvdmFybGlzdGVudHJ5Pgor IAorICAgICAgPHZhcmxpc3RlbnRyeT4KKyAgICAgICA8dGVybT48cmVwbGFj ZWFibGUgY2xhc3M9IlBBUkFNRVRFUiI+Y29uc3RyYWludF9uYW1lPC9yZXBs YWNlYWJsZT48L3Rlcm0+CisgICAgICAgPGxpc3RpdGVtPgorICAgICAgICA8 cGFyYT4KKyAgICAgICAgIE5hbWUgb2YgYW4gZXhpc3RpbmcgY29uc3RyYWlu dCB0byBkcm9wLgorICAgICAgICA8L3BhcmE+CisgICAgICAgPC9saXN0aXRl bT4KKyAgICAgIDwvdmFybGlzdGVudHJ5PgorIAorICAgICAgPHZhcmxpc3Rl bnRyeT4KICAgICAgICA8dGVybT48bGl0ZXJhbD5DQVNDQURFPC9saXRlcmFs PjwvdGVybT4KICAgICAgICA8bGlzdGl0ZW0+CiAgICAgICAgIDxwYXJhPgoq KioqKioqKioqKioqKioKKioqIDI5MCwyOTUgKioqKiBBTFRFUiBGT1JFSUdO IFRBQkxFIFsgSUYgRVhJU1RTIF0gPHJlcGxhY2VhYmxlIGNsYXNzPSJQQVJB TUVURVIiPm5hbWU8L3JlcGxhY2VhYgotLS0gMzU2LDM3MSAtLS0tCiAgICAg ICA8L3Zhcmxpc3RlbnRyeT4KICAKICAgICAgIDx2YXJsaXN0ZW50cnk+Cisg ICAgICAgPHRlcm0+PHJlcGxhY2VhYmxlIGNsYXNzPSJQQVJBTUVURVIiPnBh cmVudF90YWJsZTwvcmVwbGFjZWFibGU+PC90ZXJtPgorICAgICAgIDxsaXN0 aXRlbT4KKyAgICAgICAgPHBhcmE+CisgICAgICAgICBBIHBhcmVudCB0YWJs ZSB0byBhc3NvY2lhdGUgb3IgZGUtYXNzb2NpYXRlIHdpdGggdGhpcyBmb3Jl aWduIHRhYmxlLgorICAgICAgICAgVGhlIHBhcmVudCB0YWJsZSBtdXN0IGJl IGFuIG9yZGluYXJ5IHRhYmxlLgorICAgICAgICA8L3BhcmE+CisgICAgICAg PC9saXN0aXRlbT4KKyAgICAgIDwvdmFybGlzdGVudHJ5PgorIAorICAgICAg PHZhcmxpc3RlbnRyeT4KICAgICAgICA8dGVybT48cmVwbGFjZWFibGUgY2xh c3M9IlBBUkFNRVRFUiI+bmV3X293bmVyPC9yZXBsYWNlYWJsZT48L3Rlcm0+ CiAgICAgICAgPGxpc3RpdGVtPgogICAgICAgICA8cGFyYT4KKioqKioqKioq KioqKioqCioqKiAzMTksMzI4ICoqKiogQUxURVIgRk9SRUlHTiBUQUJMRSBb IElGIEVYSVNUUyBdIDxyZXBsYWNlYWJsZSBjbGFzcz0iUEFSQU1FVEVSIj5u YW1lPC9yZXBsYWNlYWIKICAgICA8cGFyYT4KICAgICAgQ29uc2lzdGVuY3kg d2l0aCB0aGUgZm9yZWlnbiBzZXJ2ZXIgaXMgbm90IGNoZWNrZWQgd2hlbiBh IGNvbHVtbiBpcyBhZGRlZAogICAgICBvciByZW1vdmVkIHdpdGggPGxpdGVy YWw+QUREIENPTFVNTjwvbGl0ZXJhbD4gb3IKISAgICAgPGxpdGVyYWw+RFJP UCBDT0xVTU48L2xpdGVyYWw+LCBhIDxsaXRlcmFsPk5PVCBOVUxMPC8+IGNv bnN0cmFpbnQgaXMKISAgICAgYWRkZWQsIG9yIGEgY29sdW1uIHR5cGUgaXMg Y2hhbmdlZCB3aXRoIDxsaXRlcmFsPlNFVCBEQVRBIFRZUEU8Lz4uICBJdCBp cwohICAgICB0aGUgdXNlcidzIHJlc3BvbnNpYmlsaXR5IHRvIGVuc3VyZSB0 aGF0IHRoZSB0YWJsZSBkZWZpbml0aW9uIG1hdGNoZXMgdGhlCiEgICAgIHJl bW90ZSBzaWRlLgogICAgIDwvcGFyYT4KICAKICAgICA8cGFyYT4KLS0tIDM5 NSw0MDQgLS0tLQogICAgIDxwYXJhPgogICAgICBDb25zaXN0ZW5jeSB3aXRo IHRoZSBmb3JlaWduIHNlcnZlciBpcyBub3QgY2hlY2tlZCB3aGVuIGEgY29s dW1uIGlzIGFkZGVkCiAgICAgIG9yIHJlbW92ZWQgd2l0aCA8bGl0ZXJhbD5B REQgQ09MVU1OPC9saXRlcmFsPiBvcgohICAgICA8bGl0ZXJhbD5EUk9QIENP TFVNTjwvbGl0ZXJhbD4sIGEgPGxpdGVyYWw+Tk9UIE5VTEw8Lz4gY29uc3Ry YWludCBvcgohICAgICA8bGl0ZXJhbD5DSEVDSzwvPiBjb25zdHJhaW50IGlz IGFkZGVkLCBvciBhIGNvbHVtbiB0eXBlIGlzIGNoYW5nZWQgd2l0aAohICAg ICA8bGl0ZXJhbD5TRVQgREFUQSBUWVBFPC8+LiAgSXQgaXMgdGhlIHVzZXIn cyByZXNwb25zaWJpbGl0eSB0byBlbnN1cmUgdGhhdAohICAgICB0aGUgdGFi bGUgZGVmaW5pdGlvbiBtYXRjaGVzIHRoZSByZW1vdGUgc2lkZS4KICAgICA8 L3BhcmE+CiAgCiAgICAgPHBhcmE+CioqKiBhL2RvYy9zcmMvc2dtbC9yZWYv YWx0ZXJfdGFibGUuc2dtbAotLS0gYi9kb2Mvc3JjL3NnbWwvcmVmL2FsdGVy X3RhYmxlLnNnbWwKKioqKioqKioqKioqKioqCioqKiA5MzcsOTQyICoqKiog QUxURVIgVEFCTEUgWyBJRiBFWElTVFMgXSA8cmVwbGFjZWFibGUgY2xhc3M9 IlBBUkFNRVRFUiI+bmFtZTwvcmVwbGFjZWFibGU+Ci0tLSA5MzcsOTQ5IC0t LS0KICAgICA8L3BhcmE+CiAgCiAgICAgPHBhcmE+CisgICAgIElmIGEgdGFi bGUgaGFzIGFueSBkZXNjZW5kYW50IHRhYmxlcyB0aGF0IGFyZSBmb3JlaWdu LCBhIHJlY3Vyc2l2ZQorICAgICA8bGl0ZXJhbD5TRVQgU1RPUkFHRTwvbGl0 ZXJhbD4gb3BlcmF0aW9uIHdpbGwgYmUgcmVqZWN0ZWQgc2luY2UgaXQKKyAg ICAgaXMgbm90IHBlcm1pdHRlZCB0byBhZGQgYW4gPGxpdGVyYWw+b2lkPC9s aXRlcmFsPiBzeXN0ZW0gY29sdW1uIHRvCisgICAgIGZvcmVpZ24gdGFibGVz LgorICAgIDwvcGFyYT4KKyAKKyAgICA8cGFyYT4KICAgICAgVGhlIDxsaXRl cmFsPlRSSUdHRVI8Lz4sIDxsaXRlcmFsPkNMVVNURVI8Lz4sIDxsaXRlcmFs Pk9XTkVSPC8+LAogICAgICBhbmQgPGxpdGVyYWw+VEFCTEVTUEFDRTwvPiBh Y3Rpb25zIG5ldmVyIHJlY3Vyc2UgdG8gZGVzY2VuZGFudCB0YWJsZXM7CiAg ICAgIHRoYXQgaXMsIHRoZXkgYWx3YXlzIGFjdCBhcyB0aG91Z2ggPGxpdGVy YWw+T05MWTwvPiB3ZXJlIHNwZWNpZmllZC4KKioqKioqKioqKioqKioqCioq KiA5NDUsOTUwICoqKiogQUxURVIgVEFCTEUgWyBJRiBFWElTVFMgXSA8cmVw bGFjZWFibGUgY2xhc3M9IlBBUkFNRVRFUiI+bmFtZTwvcmVwbGFjZWFibGU+ Ci0tLSA5NTIsOTcwIC0tLS0KICAgICA8L3BhcmE+CiAgCiAgICAgPHBhcmE+ CisgICAgIFdoZW4gYWRkaW5nIGEgPGxpdGVyYWw+Q0hFQ0s8Lz4gY29uc3Ry YWludCB3aXRoIHRoZSA8bGl0ZXJhbD5OT1QgVkFMSUQKKyAgICAgPC9saXRl cmFsPiBvcHRpb24gcmVjdXJzaXZlbHksIGFuIGluaGVyaXRlZCBjb25zdHJh aW50IG9uIGEgZGVzY2VuZGFudAorICAgICB0YWJsZSB0aGF0IGlzIGZvcmVp Z24gd2lsbCBiZSBtYXJrZWQgdmFsaWQgd2l0aG91dCBjaGVja2luZworICAg ICBjb25zaXN0ZW5jeSB3aXRoIHRoZSBmb3JlaWduIHNlcnZlci4KKyAgICA8 L3BhcmE+CisgCisgICAgPHBhcmE+CisgICAgIEEgcmVjdXJzaXZlIDxsaXRl cmFsPlNFVCBTVE9SQUdFPC9saXRlcmFsPiBvcGVyYXRpb24gd2lsbCBtYWtl IHRoZQorICAgICBzdG9yYWdlIG1vZGUgZm9yIGEgZGVzY2VuZGFudCB0YWJs ZSdzIGNvbHVtbiB1bmNoYW5nZWQgaWYgdGhlIHRhYmxlIGlzCisgICAgIGZv cmVpZ24uCisgICAgPC9wYXJhPgorIAorICAgIDxwYXJhPgogICAgICBDaGFu Z2luZyBhbnkgcGFydCBvZiBhIHN5c3RlbSBjYXRhbG9nIHRhYmxlIGlzIG5v dCBwZXJtaXR0ZWQuCiAgICAgPC9wYXJhPgogIAoqKiogYS9kb2Mvc3JjL3Nn bWwvcmVmL2FuYWx5emUuc2dtbAotLS0gYi9kb2Mvc3JjL3NnbWwvcmVmL2Fu YWx5emUuc2dtbAoqKioqKioqKioqKioqKioKKioqIDIwMCwyMDUgKioqKiBB TkFMWVpFIFsgVkVSQk9TRSBdIFsgPHJlcGxhY2VhYmxlIGNsYXNzPSJQQVJB TUVURVIiPnRhYmxlX25hbWU8L3JlcGxhY2VhYmxlPiBbCi0tLSAyMDAsMjEy IC0tLS0KICAgIDwvcGFyYT4KICAKICAgIDxwYXJhPgorICAgICBUaGUgaW5o ZXJpdGFuY2Ugc3RhdGlzdGljcyBmb3IgYSBwYXJlbnQgdGFibGUgdGhhdCBj b250YWlucyBvbmUgb3IgbW9yZQorICAgICBjaGlsZHJlbiB0aGF0IGFyZSBm b3JlaWduIHRhYmxlcyBhcmUgY29sbGVjdGVkIG9ubHkgd2hlbiBleHBsaWNp dGx5CisgICAgIHNlbGVjdGVkLiAgSWYgdGhlIGZvcmVpZ24gdGFibGUncyB3 cmFwcGVyIGRvZXMgbm90IHN1cHBvcnQKKyAgICAgPGNvbW1hbmQ+QU5BTFla RTwvY29tbWFuZD4sIHRoZSBjb21tYW5kIHByaW50cyBhIHdhcm5pbmcgYW5k IGRvZXMgbm90aGluZy4KKyAgIDwvcGFyYT4KKyAKKyAgIDxwYXJhPgogICAg ICBJZiB0aGUgdGFibGUgYmVpbmcgYW5hbHl6ZWQgaXMgY29tcGxldGVseSBl bXB0eSwgPGNvbW1hbmQ+QU5BTFlaRTwvY29tbWFuZD4KICAgICAgd2lsbCBu b3QgcmVjb3JkIG5ldyBzdGF0aXN0aWNzIGZvciB0aGF0IHRhYmxlLiAgQW55 IGV4aXN0aW5nIHN0YXRpc3RpY3MKICAgICAgd2lsbCBiZSByZXRhaW5lZC4K KioqIGEvZG9jL3NyYy9zZ21sL3JlZi9jcmVhdGVfZm9yZWlnbl90YWJsZS5z Z21sCi0tLSBiL2RvYy9zcmMvc2dtbC9yZWYvY3JlYXRlX2ZvcmVpZ25fdGFi bGUuc2dtbAoqKioqKioqKioqKioqKioKKioqIDE5LDI3ICoqKioKICAgPHJl ZnN5bm9wc2lzZGl2PgogIDxzeW5vcHNpcz4KICBDUkVBVEUgRk9SRUlHTiBU QUJMRSBbIElGIE5PVCBFWElTVFMgXSA8cmVwbGFjZWFibGUgY2xhc3M9IlBB UkFNRVRFUiI+dGFibGVfbmFtZTwvcmVwbGFjZWFibGU+ICggWwohICAgICA8 cmVwbGFjZWFibGUgY2xhc3M9IlBBUkFNRVRFUiI+Y29sdW1uX25hbWU8L3Jl cGxhY2VhYmxlPiA8cmVwbGFjZWFibGUgY2xhc3M9IlBBUkFNRVRFUiI+ZGF0 YV90eXBlPC9yZXBsYWNlYWJsZT4gWyBPUFRJT05TICggPHJlcGxhY2VhYmxl IGNsYXNzPSJQQVJBTUVURVIiPm9wdGlvbjwvcmVwbGFjZWFibGU+ICc8cmVw bGFjZWFibGUgY2xhc3M9IlBBUkFNRVRFUiI+dmFsdWU8L3JlcGxhY2VhYmxl PicgWywgLi4uIF0gKSBdIFsgQ09MTEFURSA8cmVwbGFjZWFibGU+Y29sbGF0 aW9uPC9yZXBsYWNlYWJsZT4gXSBbIDxyZXBsYWNlYWJsZSBjbGFzcz0iUEFS QU1FVEVSIj5jb2x1bW5fY29uc3RyYWludDwvcmVwbGFjZWFibGU+IFsgLi4u IF0gXQogICAgICBbLCAuLi4gXQogIF0gKQogICAgU0VSVkVSIDxyZXBsYWNl YWJsZSBjbGFzcz0icGFyYW1ldGVyIj5zZXJ2ZXJfbmFtZTwvcmVwbGFjZWFi bGU+CiAgWyBPUFRJT05TICggPHJlcGxhY2VhYmxlIGNsYXNzPSJQQVJBTUVU RVIiPm9wdGlvbjwvcmVwbGFjZWFibGU+ICc8cmVwbGFjZWFibGUgY2xhc3M9 IlBBUkFNRVRFUiI+dmFsdWU8L3JlcGxhY2VhYmxlPicgWywgLi4uIF0gKSBd CiAgCi0tLSAxOSwyOSAtLS0tCiAgIDxyZWZzeW5vcHNpc2Rpdj4KICA8c3lu b3BzaXM+CiAgQ1JFQVRFIEZPUkVJR04gVEFCTEUgWyBJRiBOT1QgRVhJU1RT IF0gPHJlcGxhY2VhYmxlIGNsYXNzPSJQQVJBTUVURVIiPnRhYmxlX25hbWU8 L3JlcGxhY2VhYmxlPiAoIFsKISAgIHsgPHJlcGxhY2VhYmxlIGNsYXNzPSJQ QVJBTUVURVIiPmNvbHVtbl9uYW1lPC9yZXBsYWNlYWJsZT4gPHJlcGxhY2Vh YmxlIGNsYXNzPSJQQVJBTUVURVIiPmRhdGFfdHlwZTwvcmVwbGFjZWFibGU+ IFsgT1BUSU9OUyAoIDxyZXBsYWNlYWJsZSBjbGFzcz0iUEFSQU1FVEVSIj5v cHRpb248L3JlcGxhY2VhYmxlPiAnPHJlcGxhY2VhYmxlIGNsYXNzPSJQQVJB TUVURVIiPnZhbHVlPC9yZXBsYWNlYWJsZT4nIFssIC4uLiBdICkgXSBbIENP TExBVEUgPHJlcGxhY2VhYmxlPmNvbGxhdGlvbjwvcmVwbGFjZWFibGU+IF0g WyA8cmVwbGFjZWFibGUgY2xhc3M9IlBBUkFNRVRFUiI+Y29sdW1uX2NvbnN0 cmFpbnQ8L3JlcGxhY2VhYmxlPiBbIC4uLiBdIF0KISAgICAgfCA8cmVwbGFj ZWFibGU+dGFibGVfY29uc3RyYWludDwvcmVwbGFjZWFibGU+IH0KICAgICAg WywgLi4uIF0KICBdICkKKyBbIElOSEVSSVRTICggPHJlcGxhY2VhYmxlPnBh cmVudF90YWJsZTwvcmVwbGFjZWFibGU+IFssIC4uLiBdICkgXQogICAgU0VS VkVSIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5zZXJ2ZXJfbmFt ZTwvcmVwbGFjZWFibGU+CiAgWyBPUFRJT05TICggPHJlcGxhY2VhYmxlIGNs YXNzPSJQQVJBTUVURVIiPm9wdGlvbjwvcmVwbGFjZWFibGU+ICc8cmVwbGFj ZWFibGUgY2xhc3M9IlBBUkFNRVRFUiI+dmFsdWU8L3JlcGxhY2VhYmxlPicg WywgLi4uIF0gKSBdCiAgCioqKioqKioqKioqKioqKgoqKiogMzAsMzYgKioq KiBDUkVBVEUgRk9SRUlHTiBUQUJMRSBbIElGIE5PVCBFWElTVFMgXSA8cmVw bGFjZWFibGUgY2xhc3M9IlBBUkFNRVRFUiI+dGFibGVfbmFtZQotLS0gMzIs NDQgLS0tLQogIFsgQ09OU1RSQUlOVCA8cmVwbGFjZWFibGUgY2xhc3M9IlBB UkFNRVRFUiI+Y29uc3RyYWludF9uYW1lPC9yZXBsYWNlYWJsZT4gXQogIHsg Tk9UIE5VTEwgfAogICAgTlVMTCB8CisgICBDSEVDSyAoIDxyZXBsYWNlYWJs ZSBjbGFzcz0iUEFSQU1FVEVSIj5leHByZXNzaW9uPC9yZXBsYWNlYWJsZT4g KSB8CiAgICBERUZBVUxUIDxyZXBsYWNlYWJsZT5kZWZhdWx0X2V4cHI8L3Jl cGxhY2VhYmxlPiB9CisgCisgPHBocmFzZT5hbmQgPHJlcGxhY2VhYmxlIGNs YXNzPSJQQVJBTUVURVIiPnRhYmxlX2NvbnN0cmFpbnQ8L3JlcGxhY2VhYmxl PiBpczo8L3BocmFzZT4KKyAKKyBbIENPTlNUUkFJTlQgPHJlcGxhY2VhYmxl IGNsYXNzPSJQQVJBTUVURVIiPmNvbnN0cmFpbnRfbmFtZTwvcmVwbGFjZWFi bGU+IF0KKyB7IENIRUNLICggPHJlcGxhY2VhYmxlIGNsYXNzPSJQQVJBTUVU RVIiPmV4cHJlc3Npb248L3JlcGxhY2VhYmxlPiApIH0KICA8L3N5bm9wc2lz PgogICA8L3JlZnN5bm9wc2lzZGl2PgogIAoqKioqKioqKioqKioqKioKKioq IDEzOCwxNDMgKioqKiBDUkVBVEUgRk9SRUlHTiBUQUJMRSBbIElGIE5PVCBF WElTVFMgXSA8cmVwbGFjZWFibGUgY2xhc3M9IlBBUkFNRVRFUiI+dGFibGVf bmFtZQotLS0gMTQ2LDE3MiAtLS0tCiAgICAgPC92YXJsaXN0ZW50cnk+CiAg CiAgICAgPHZhcmxpc3RlbnRyeT4KKyAgICAgPHRlcm0+PGxpdGVyYWw+Q0hF Q0sgKCA8cmVwbGFjZWFibGUgY2xhc3M9IlBBUkFNRVRFUiI+ZXhwcmVzc2lv bjwvcmVwbGFjZWFibGU+ICk8L2xpdGVyYWw+PC90ZXJtPgorICAgICA8bGlz dGl0ZW0+CisgICAgICA8cGFyYT4KKyAgICAgICBUaGUgPGxpdGVyYWw+Q0hF Q0s8Lz4gY2xhdXNlIHNwZWNpZmllcyBhbiBleHByZXNzaW9uIHByb2R1Y2lu ZyBhCisgICAgICAgQm9vbGVhbiByZXN1bHQgd2hpY2ggZWFjaCByb3cgbXVz dCBzYXRpc2Z5LgorICAgICAgIEV4cHJlc3Npb25zIGV2YWx1YXRpbmcgdG8g VFJVRSBvciBVTktOT1dOIHN1Y2NlZWQuCisgICAgICAgQSBjaGVjayBjb25z dHJhaW50IHNwZWNpZmllZCBhcyBhIGNvbHVtbiBjb25zdHJhaW50IHNob3Vs ZAorICAgICAgIHJlZmVyZW5jZSB0aGF0IGNvbHVtbidzIHZhbHVlIG9ubHks IHdoaWxlIGFuIGV4cHJlc3Npb24KKyAgICAgICBhcHBlYXJpbmcgaW4gYSB0 YWJsZSBjb25zdHJhaW50IGNhbiByZWZlcmVuY2UgbXVsdGlwbGUgY29sdW1u cy4KKyAgICAgIDwvcGFyYT4KKyAKKyAgICAgIDxwYXJhPgorICAgICAgIEN1 cnJlbnRseSwgPGxpdGVyYWw+Q0hFQ0s8L2xpdGVyYWw+IGV4cHJlc3Npb25z IGNhbm5vdCBjb250YWluCisgICAgICAgc3VicXVlcmllcyBub3IgcmVmZXIg dG8gdmFyaWFibGVzIG90aGVyIHRoYW4gY29sdW1ucyBvZiB0aGUKKyAgICAg ICBjdXJyZW50IHJvdy4gIFRoZSBzeXN0ZW0gY29sdW1uIDxsaXRlcmFsPnRh Ymxlb2lkPC9saXRlcmFsPgorICAgICAgIG1heSBiZSByZWZlcmVuY2VkLCBi dXQgbm90IGFueSBvdGhlciBzeXN0ZW0gY29sdW1uLgorICAgICAgPC9wYXJh PgorICAgICA8L2xpc3RpdGVtPgorICAgIDwvdmFybGlzdGVudHJ5PgorIAor ICAgIDx2YXJsaXN0ZW50cnk+CiAgICAgIDx0ZXJtPjxsaXRlcmFsPkRFRkFV TFQKICAgICAgPHJlcGxhY2VhYmxlPmRlZmF1bHRfZXhwcjwvcmVwbGFjZWFi bGU+PC9saXRlcmFsPjwvdGVybT4KICAgICAgPGxpc3RpdGVtPgoqKioqKioq KioqKioqKioKKioqIDE1OSwxNjQgKioqKiBDUkVBVEUgRk9SRUlHTiBUQUJM RSBbIElGIE5PVCBFWElTVFMgXSA8cmVwbGFjZWFibGUgY2xhc3M9IlBBUkFN RVRFUiI+dGFibGVfbmFtZQotLS0gMTg4LDIwNSAtLS0tCiAgICAgPC92YXJs aXN0ZW50cnk+CiAgCiAgICAgPHZhcmxpc3RlbnRyeT4KKyAgICAgPHRlcm0+ PHJlcGxhY2VhYmxlIGNsYXNzPSJQQVJBTUVURVIiPnBhcmVudF90YWJsZTwv cmVwbGFjZWFibGU+PC90ZXJtPgorICAgICA8bGlzdGl0ZW0+CisgICAgICA8 cGFyYT4KKyAgICAgICBUaGUgbmFtZSBvZiBhbiBleGlzdGluZyB0YWJsZSBm cm9tIHdoaWNoIHRoZSBuZXcgZm9yZWlnbiB0YWJsZQorICAgICAgIGF1dG9t YXRpY2FsbHkgaW5oZXJpdHMgYWxsIGNvbHVtbnMuICBUaGUgc3BlY2lmaWVk IHBhcmVudCB0YWJsZQorICAgICAgIG11c3QgYmUgYW4gb3JkaW5hcnkgdGFi bGUuICBTZWUgPHhyZWYgbGlua2VuZD0iZGRsLWluaGVyaXQiPiBmb3IgdGhl CisgICAgICAgZGV0YWlscyBvZiB0YWJsZSBpbmhlcml0YW5jZS4KKyAgICAg IDwvcGFyYT4KKyAgICAgPC9saXN0aXRlbT4KKyAgICA8L3Zhcmxpc3RlbnRy eT4KKyAKKyAgICA8dmFybGlzdGVudHJ5PgogICAgICA8dGVybT48cmVwbGFj ZWFibGUgY2xhc3M9IlBBUkFNRVRFUiI+c2VydmVyX25hbWU8L3JlcGxhY2Vh YmxlPjwvdGVybT4KICAgICAgPGxpc3RpdGVtPgogICAgICAgPHBhcmE+Cioq KioqKioqKioqKioqKgoqKiogMTg3LDE5MiAqKioqIENSRUFURSBGT1JFSUdO IFRBQkxFIFsgSUYgTk9UIEVYSVNUUyBdIDxyZXBsYWNlYWJsZSBjbGFzcz0i UEFSQU1FVEVSIj50YWJsZV9uYW1lCi0tLSAyMjgsMjUxIC0tLS0KICAKICAg PC9yZWZzZWN0MT4KICAKKyAgPHJlZnNlY3QxPgorICAgPHRpdGxlPk5vdGVz PC90aXRsZT4KKyAKKyAgICA8cGFyYT4KKyAgICAgQ29uc3RyYWludHMgb24g Zm9yZWlnbiB0YWJsZXMgYXJlIG5vdCBlbmZvcmNlZCBvbiBpbnNlcnQgb3Ig dXBkYXRlLgorICAgICBUaG9zZSBkZWZpbml0aW9ucyBzaW1wbHkgZGVjbGFy ZSB0aGUgY29uc3RyYWludHMgaG9sZCBmb3IgYWxsIHJvd3MKKyAgICAgaW4g dGhlIGZvcmVpZ24gdGFibGVzLiAgSXQgaXMgdGhlIHVzZXIncyByZXNwb25z aWJpbGl0eSB0byBlbnN1cmUKKyAgICAgdGhhdCB0aG9zZSBkZWZpbml0aW9u cyBtYXRjaCB0aGUgcmVtb3RlIHNpZGUuICBTdWNoIGNvbnN0cmFpbnRzIGFy ZQorICAgICB1c2VkIGZvciBzb21lIGtpbmQgb2YgcXVlcnkgb3B0aW1pemF0 aW9uIHN1Y2ggYXMgY29uc3RyYWludCBleGNsdXNpb24KKyAgICAgZm9yIHBh cnRpdGlvbmVkIHRhYmxlcyAoc2VlIDx4cmVmIGxpbmtlbmQ9ImRkbC1wYXJ0 aXRpb25pbmciPikuCisgICAgPC9wYXJhPgorIAorICAgIDxwYXJhPgorICAg ICBTaW5jZSBpdCBpcyBub3QgcGVybWl0dGVkIHRvIGFkZCBhbiA8bGl0ZXJh bD5vaWQ8Lz4gc3lzdGVtIGNvbHVtbiB0bworICAgICBmb3JlaWduIHRhYmxl cywgdGhlIGNvbW1hbmQgd2lsbCBiZSByZWplY3RlZCBpZiBhbnkgcGFyZW50 IHRhYmxlcworICAgICBoYXZlIDxsaXRlcmFsPm9pZDwvPiBzeXN0ZW0gY29s dW1ucy4KKyAgICA8L3BhcmE+CisgIDwvcmVmc2VjdDE+CiAgCiAgIDxyZWZz ZWN0MSBpZD0iU1FMLUNSRUFURUZPUkVJR05UQUJMRS1leGFtcGxlcyI+CiAg ICA8dGl0bGU+RXhhbXBsZXM8L3RpdGxlPgoqKiogYS9zcmMvYmFja2VuZC9j YXRhbG9nL2hlYXAuYwotLS0gYi9zcmMvYmFja2VuZC9jYXRhbG9nL2hlYXAu YwoqKioqKioqKioqKioqKioKKioqIDIyMTcsMjIyMiAqKioqIEFkZFJlbGF0 aW9uTmV3Q29uc3RyYWludHMoUmVsYXRpb24gcmVsLAotLS0gMjIxNywyMjI4 IC0tLS0KICAJCWlmIChjZGVmLT5jb250eXBlICE9IENPTlNUUl9DSEVDSykK ICAJCQljb250aW51ZTsKICAKKyAJCWlmIChjZGVmLT5pc19ub19pbmhlcml0 ICYmCisgCQkJcmVsLT5yZF9yZWwtPnJlbGtpbmQgPT0gUkVMS0lORF9GT1JF SUdOX1RBQkxFKQorIAkJCWVyZXBvcnQoRVJST1IsCisgCQkJCQkoZXJyY29k ZShFUlJDT0RFX0ZFQVRVUkVfTk9UX1NVUFBPUlRFRCksCisgCQkJCQkgZXJy bXNnKCJDSEVDSyBjb25zdHJhaW50cyBvbiBmb3JlaWduIHRhYmxlcyBjYW5u b3QgYmUgbWFya2VkIE5PIElOSEVSSVQiKSkpOworIAogIAkJaWYgKGNkZWYt PnJhd19leHByICE9IE5VTEwpCiAgCQl7CiAgCQkJQXNzZXJ0KGNkZWYtPmNv b2tlZF9leHByID09IE5VTEwpOwoqKiogYS9zcmMvYmFja2VuZC9jb21tYW5k cy9hbmFseXplLmMKLS0tIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvYW5hbHl6 ZS5jCioqKioqKioqKioqKioqKgoqKiogODIsODcgKioqKiBpbnQJCQlkZWZh dWx0X3N0YXRpc3RpY3NfdGFyZ2V0ID0gMTAwOwotLS0gODIsODggLS0tLQog IAogIC8qIEEgZmV3IHZhcmlhYmxlcyB0aGF0IGRvbid0IHNlZW0gd29ydGgg cGFzc2luZyBhcm91bmQgYXMgcGFyYW1ldGVycyAqLwogIHN0YXRpYyBNZW1v cnlDb250ZXh0IGFubF9jb250ZXh0ID0gTlVMTDsKKyBzdGF0aWMgVmFjdXVt TW9kZSB2YWNfbW9kZTsKICBzdGF0aWMgQnVmZmVyQWNjZXNzU3RyYXRlZ3kg dmFjX3N0cmF0ZWd5OwogIAogIAoqKioqKioqKioqKioqKioKKioqIDExNSwx MjEgKioqKiBzdGF0aWMgRGF0dW0gaW5kX2ZldGNoX2Z1bmMoVmFjQXR0clN0 YXRzUCBzdGF0cywgaW50IHJvd251bSwgYm9vbCAqaXNOdWxsKTsKICAgKglh bmFseXplX3JlbCgpIC0tIGFuYWx5emUgb25lIHJlbGF0aW9uCiAgICovCiAg dm9pZAohIGFuYWx5emVfcmVsKE9pZCByZWxpZCwgVmFjdXVtU3RtdCAqdmFj c3RtdCwgQnVmZmVyQWNjZXNzU3RyYXRlZ3kgYnN0cmF0ZWd5KQogIHsKICAJ UmVsYXRpb24Jb25lcmVsOwogIAlpbnQJCQllbGV2ZWw7Ci0tLSAxMTYsMTI1 IC0tLS0KICAgKglhbmFseXplX3JlbCgpIC0tIGFuYWx5emUgb25lIHJlbGF0 aW9uCiAgICovCiAgdm9pZAohIGFuYWx5emVfcmVsKE9pZCByZWxpZCwKISAJ CQlWYWN1dW1TdG10ICp2YWNzdG10LAohIAkJCVZhY3V1bU1vZGUgdmFjbW9k ZSwKISAJCQlCdWZmZXJBY2Nlc3NTdHJhdGVneSBic3RyYXRlZ3kpCiAgewog IAlSZWxhdGlvbglvbmVyZWw7CiAgCWludAkJCWVsZXZlbDsKKioqKioqKioq KioqKioqCioqKiAxMjksMTM0ICoqKiogYW5hbHl6ZV9yZWwoT2lkIHJlbGlk LCBWYWN1dW1TdG10ICp2YWNzdG10LCBCdWZmZXJBY2Nlc3NTdHJhdGVneSBi c3RyYXRlZ3kpCi0tLSAxMzMsMTM5IC0tLS0KICAJCWVsZXZlbCA9IERFQlVH MjsKICAKICAJLyogU2V0IHVwIHN0YXRpYyB2YXJpYWJsZXMgKi8KKyAJdmFj X21vZGUgPSB2YWNtb2RlOwogIAl2YWNfc3RyYXRlZ3kgPSBic3RyYXRlZ3k7 CiAgCiAgCS8qCioqKioqKioqKioqKioqKgoqKiogMTQ1MiwxNDU3ICoqKiog YWNxdWlyZV9pbmhlcml0ZWRfc2FtcGxlX3Jvd3MoUmVsYXRpb24gb25lcmVs LCBpbnQgZWxldmVsLAotLS0gMTQ1NywxNDYzIC0tLS0KICB7CiAgCUxpc3QJ ICAgKnRhYmxlT0lEczsKICAJUmVsYXRpb24gICAqcmVsczsKKyAJQWNxdWly ZVNhbXBsZVJvd3NGdW5jICphY3F1aXJlZnVuYzsKICAJZG91YmxlCSAgICpy ZWxibG9ja3M7CiAgCWRvdWJsZQkJdG90YWxibG9ja3M7CiAgCWludAkJCW51 bXJvd3MsCioqKioqKioqKioqKioqKgoqKiogMTQ4NiwxNDkxICoqKiogYWNx dWlyZV9pbmhlcml0ZWRfc2FtcGxlX3Jvd3MoUmVsYXRpb24gb25lcmVsLCBp bnQgZWxldmVsLAotLS0gMTQ5MiwxNDk5IC0tLS0KICAJICogQmxvY2tOdW1i ZXIsIHNvIHdlIHVzZSBkb3VibGUgYXJpdGhtZXRpYy4KICAJICovCiAgCXJl bHMgPSAoUmVsYXRpb24gKikgcGFsbG9jKGxpc3RfbGVuZ3RoKHRhYmxlT0lE cykgKiBzaXplb2YoUmVsYXRpb24pKTsKKyAJYWNxdWlyZWZ1bmMgPSAoQWNx dWlyZVNhbXBsZVJvd3NGdW5jICopIHBhbGxvYyhsaXN0X2xlbmd0aCh0YWJs ZU9JRHMpCisgCQkJCQkJCQkJCQkqIHNpemVvZihBY3F1aXJlU2FtcGxlUm93 c0Z1bmMpKTsKICAJcmVsYmxvY2tzID0gKGRvdWJsZSAqKSBwYWxsb2MobGlz dF9sZW5ndGgodGFibGVPSURzKSAqIHNpemVvZihkb3VibGUpKTsKICAJdG90 YWxibG9ja3MgPSAwOwogIAlucmVscyA9IDA7CioqKioqKioqKioqKioqKgoq KiogMTUwNywxNTEzICoqKiogYWNxdWlyZV9pbmhlcml0ZWRfc2FtcGxlX3Jv d3MoUmVsYXRpb24gb25lcmVsLCBpbnQgZWxldmVsLAogIAkJfQogIAogIAkJ cmVsc1tucmVsc10gPSBjaGlsZHJlbDsKISAJCXJlbGJsb2Nrc1tucmVsc10g PSAoZG91YmxlKSBSZWxhdGlvbkdldE51bWJlck9mQmxvY2tzKGNoaWxkcmVs KTsKICAJCXRvdGFsYmxvY2tzICs9IHJlbGJsb2Nrc1tucmVsc107CiAgCQlu cmVscysrOwogIAl9Ci0tLSAxNTE1LDE1NTQgLS0tLQogIAkJfQogIAogIAkJ cmVsc1tucmVsc10gPSBjaGlsZHJlbDsKISAKISAJCWlmIChjaGlsZHJlbC0+ cmRfcmVsLT5yZWxraW5kID09IFJFTEtJTkRfRk9SRUlHTl9UQUJMRSkKISAJ CXsKISAJCQlGZHdSb3V0aW5lICpmZHdyb3V0aW5lOwohIAkJCUJsb2NrTnVt YmVyIHJlbHBhZ2VzID0gMDsKISAJCQlib29sCQlvayA9IGZhbHNlOwohIAoh IAkJCS8qIElnbm9yZSB1bmxlc3MgYW5hbHl6aW5nIGEgc3BlY2lmaWMgaW5o ZXJpdGFuY2UgdHJlZSAqLwohIAkJCWlmICh2YWNfbW9kZSAhPSBWQUNfTU9E RV9TSU5HTEUpCiEgCQkJCXJldHVybiAwOwohIAohIAkJCS8qIENoZWNrIHdo ZXRoZXIgdGhlIEZEVyBzdXBwb3J0cyBhbmFseXNpcyAqLwohIAkJCWZkd3Jv dXRpbmUgPSBHZXRGZHdSb3V0aW5lRm9yUmVsYXRpb24oY2hpbGRyZWwsIGZh bHNlKTsKISAJCQlpZiAoZmR3cm91dGluZS0+QW5hbHl6ZUZvcmVpZ25UYWJs ZSAhPSBOVUxMKQohIAkJCQlvayA9IGZkd3JvdXRpbmUtPkFuYWx5emVGb3Jl aWduVGFibGUoY2hpbGRyZWwsCiEgCQkJCQkJCQkJCQkJCSAmYWNxdWlyZWZ1 bmNbbnJlbHNdLAohIAkJCQkJCQkJCQkJCQkgJnJlbHBhZ2VzKTsKISAJCQlp ZiAoIW9rKQohIAkJCXsKISAJCQkJLyogR2l2ZSB1cCBpZiB0aGUgRkRXIGRv ZXNuJ3Qgc3VwcG9ydCBhbmFseXNpcyAqLwohIAkJCQllcmVwb3J0KFdBUk5J TkcsCiEgCQkJCQkJKGVycm1zZygic2tpcHBpbmcgYW5hbHl6ZSBvZiBpbmhl cml0YW5jZSB0cmVlIFwiJXNcIiAtLS0gY2Fubm90IGFuYWx5emUgZm9yZWln biB0YWJsZSBcIiVzXCIiLAohIAkJCQkJCQkJUmVsYXRpb25HZXRSZWxhdGlv bk5hbWUob25lcmVsKSwKISAJCQkJCQkJCVJlbGF0aW9uR2V0UmVsYXRpb25O YW1lKGNoaWxkcmVsKSkpKTsKISAJCQkJcmV0dXJuIDA7CiEgCQkJfQohIAkJ CXJlbGJsb2Nrc1tucmVsc10gPSAoZG91YmxlKSByZWxwYWdlczsKISAJCX0K ISAJCWVsc2UKISAJCXsKISAJCQlhY3F1aXJlZnVuY1tucmVsc10gPSBhY3F1 aXJlX3NhbXBsZV9yb3dzOwohIAkJCXJlbGJsb2Nrc1tucmVsc10gPSAoZG91 YmxlKSBSZWxhdGlvbkdldE51bWJlck9mQmxvY2tzKGNoaWxkcmVsKTsKISAJ CX0KISAKICAJCXRvdGFsYmxvY2tzICs9IHJlbGJsb2Nrc1tucmVsc107CiAg CQlucmVscysrOwogIAl9CioqKioqKioqKioqKioqKgoqKiogMTUyNSwxNTMw ICoqKiogYWNxdWlyZV9pbmhlcml0ZWRfc2FtcGxlX3Jvd3MoUmVsYXRpb24g b25lcmVsLCBpbnQgZWxldmVsLAotLS0gMTU2NiwxNTcyIC0tLS0KICAJewog IAkJUmVsYXRpb24JY2hpbGRyZWwgPSByZWxzW2ldOwogIAkJZG91YmxlCQlj aGlsZGJsb2NrcyA9IHJlbGJsb2Nrc1tpXTsKKyAJCUFjcXVpcmVTYW1wbGVS b3dzRnVuYyBjaGlsZGFjcXVpcmVmdW5jID0gYWNxdWlyZWZ1bmNbaV07CiAg CiAgCQlpZiAoY2hpbGRibG9ja3MgPiAwKQogIAkJewoqKioqKioqKioqKioq KioKKioqIDE1NDAsMTU1MSAqKioqIGFjcXVpcmVfaW5oZXJpdGVkX3NhbXBs ZV9yb3dzKFJlbGF0aW9uIG9uZXJlbCwgaW50IGVsZXZlbCwKICAJCQkJCQkJ dGRyb3dzOwogIAogIAkJCQkvKiBGZXRjaCBhIHJhbmRvbSBzYW1wbGUgb2Yg dGhlIGNoaWxkJ3Mgcm93cyAqLwohIAkJCQljaGlsZHJvd3MgPSBhY3F1aXJl X3NhbXBsZV9yb3dzKGNoaWxkcmVsLAohIAkJCQkJCQkJCQkJCWVsZXZlbCwK ISAJCQkJCQkJCQkJCQlyb3dzICsgbnVtcm93cywKISAJCQkJCQkJCQkJCQlj aGlsZHRhcmdyb3dzLAohIAkJCQkJCQkJCQkJCSZ0cm93cywKISAJCQkJCQkJ CQkJCQkmdGRyb3dzKTsKICAKICAJCQkJLyogV2UgbWF5IG5lZWQgdG8gY29u dmVydCBmcm9tIGNoaWxkJ3Mgcm93dHlwZSB0byBwYXJlbnQncyAqLwogIAkJ CQlpZiAoY2hpbGRyb3dzID4gMCAmJgotLS0gMTU4MiwxNTkzIC0tLS0KICAJ CQkJCQkJdGRyb3dzOwogIAogIAkJCQkvKiBGZXRjaCBhIHJhbmRvbSBzYW1w bGUgb2YgdGhlIGNoaWxkJ3Mgcm93cyAqLwohIAkJCQljaGlsZHJvd3MgPSBj aGlsZGFjcXVpcmVmdW5jKGNoaWxkcmVsLAohIAkJCQkJCQkJCQkJIGVsZXZl bCwKISAJCQkJCQkJCQkJCSByb3dzICsgbnVtcm93cywKISAJCQkJCQkJCQkJ CSBjaGlsZHRhcmdyb3dzLAohIAkJCQkJCQkJCQkJICZ0cm93cywKISAJCQkJ CQkJCQkJCSAmdGRyb3dzKTsKICAKICAJCQkJLyogV2UgbWF5IG5lZWQgdG8g Y29udmVydCBmcm9tIGNoaWxkJ3Mgcm93dHlwZSB0byBwYXJlbnQncyAqLwog IAkJCQlpZiAoY2hpbGRyb3dzID4gMCAmJgoqKiogYS9zcmMvYmFja2VuZC9j b21tYW5kcy90YWJsZWNtZHMuYwotLS0gYi9zcmMvYmFja2VuZC9jb21tYW5k cy90YWJsZWNtZHMuYwoqKioqKioqKioqKioqKioKKioqIDMxMSwzMTcgKioq KiBzdGF0aWMgQWx0ZXJlZFRhYmxlSW5mbyAqQVRHZXRRdWV1ZUVudHJ5KExp c3QgKip3cXVldWUsIFJlbGF0aW9uIHJlbCk7CiAgc3RhdGljIHZvaWQgQVRT aW1wbGVQZXJtaXNzaW9ucyhSZWxhdGlvbiByZWwsIGludCBhbGxvd2VkX3Rh cmdldHMpOwogIHN0YXRpYyB2b2lkIEFUV3JvbmdSZWxraW5kRXJyb3IoUmVs YXRpb24gcmVsLCBpbnQgYWxsb3dlZF90YXJnZXRzKTsKICBzdGF0aWMgdm9p ZCBBVFNpbXBsZVJlY3Vyc2lvbihMaXN0ICoqd3F1ZXVlLCBSZWxhdGlvbiBy ZWwsCiEgCQkJCSAgQWx0ZXJUYWJsZUNtZCAqY21kLCBib29sIHJlY3Vyc2Us IExPQ0tNT0RFIGxvY2ttb2RlKTsKICBzdGF0aWMgdm9pZCBBVFR5cGVkVGFi bGVSZWN1cnNpb24oTGlzdCAqKndxdWV1ZSwgUmVsYXRpb24gcmVsLCBBbHRl clRhYmxlQ21kICpjbWQsCiAgCQkJCQkgIExPQ0tNT0RFIGxvY2ttb2RlKTsK ICBzdGF0aWMgTGlzdCAqZmluZF90eXBlZF90YWJsZV9kZXBlbmRlbmNpZXMo T2lkIHR5cGVPaWQsIGNvbnN0IGNoYXIgKnR5cGVOYW1lLAotLS0gMzExLDMx OCAtLS0tCiAgc3RhdGljIHZvaWQgQVRTaW1wbGVQZXJtaXNzaW9ucyhSZWxh dGlvbiByZWwsIGludCBhbGxvd2VkX3RhcmdldHMpOwogIHN0YXRpYyB2b2lk IEFUV3JvbmdSZWxraW5kRXJyb3IoUmVsYXRpb24gcmVsLCBpbnQgYWxsb3dl ZF90YXJnZXRzKTsKICBzdGF0aWMgdm9pZCBBVFNpbXBsZVJlY3Vyc2lvbihM aXN0ICoqd3F1ZXVlLCBSZWxhdGlvbiByZWwsCiEgCQkJCSAgQWx0ZXJUYWJs ZUNtZCAqY21kLCBib29sIHJlY3Vyc2UsCiEgCQkJCSAgYm9vbCBpbmNsdWRl X2ZvcmVpZ24sIExPQ0tNT0RFIGxvY2ttb2RlKTsKICBzdGF0aWMgdm9pZCBB VFR5cGVkVGFibGVSZWN1cnNpb24oTGlzdCAqKndxdWV1ZSwgUmVsYXRpb24g cmVsLCBBbHRlclRhYmxlQ21kICpjbWQsCiAgCQkJCQkgIExPQ0tNT0RFIGxv Y2ttb2RlKTsKICBzdGF0aWMgTGlzdCAqZmluZF90eXBlZF90YWJsZV9kZXBl bmRlbmNpZXMoT2lkIHR5cGVPaWQsIGNvbnN0IGNoYXIgKnR5cGVOYW1lLAoq KioqKioqKioqKioqKioKKioqIDQ2Nyw0NzYgKioqKiBEZWZpbmVSZWxhdGlv bihDcmVhdGVTdG10ICpzdG10LCBjaGFyIHJlbGtpbmQsIE9pZCBvd25lcklk KQogIAkJZXJlcG9ydChFUlJPUiwKICAJCQkJKGVycmNvZGUoRVJSQ09ERV9J TlZBTElEX1RBQkxFX0RFRklOSVRJT04pLAogIAkJCQkgZXJybXNnKCJPTiBD T01NSVQgY2FuIG9ubHkgYmUgdXNlZCBvbiB0ZW1wb3JhcnkgdGFibGVzIikp KTsKLSAJaWYgKHN0bXQtPmNvbnN0cmFpbnRzICE9IE5JTCAmJiByZWxraW5k ID09IFJFTEtJTkRfRk9SRUlHTl9UQUJMRSkKLSAJCWVyZXBvcnQoRVJST1Is Ci0gCQkJCShlcnJjb2RlKEVSUkNPREVfV1JPTkdfT0JKRUNUX1RZUEUpLAot IAkJCQkgZXJybXNnKCJjb25zdHJhaW50cyBhcmUgbm90IHN1cHBvcnRlZCBv biBmb3JlaWduIHRhYmxlcyIpKSk7CiAgCiAgCS8qCiAgCSAqIExvb2sgdXAg dGhlIG5hbWVzcGFjZSBpbiB3aGljaCB3ZSBhcmUgc3VwcG9zZWQgdG8gY3Jl YXRlIHRoZSByZWxhdGlvbiwKLS0tIDQ2OCw0NzMgLS0tLQoqKioqKioqKioq KioqKioKKioqIDU1Nyw1NjIgKioqKiBEZWZpbmVSZWxhdGlvbihDcmVhdGVT dG10ICpzdG10LCBjaGFyIHJlbGtpbmQsIE9pZCBvd25lcklkKQotLS0gNTU0 LDU4MyAtLS0tCiAgCQkJCQkJCSBzdG10LT5yZWxhdGlvbi0+cmVscGVyc2lz dGVuY2UsCiAgCQkJCQkJCSAmaW5oZXJpdE9pZHMsICZvbGRfY29uc3RyYWlu dHMsICZwYXJlbnRPaWRDb3VudCk7CiAgCisgCWlmIChyZWxraW5kID09IFJF TEtJTkRfRk9SRUlHTl9UQUJMRSkKKyAJeworIAkJLyoKKyAJCSAqIERvbid0 IGFsbG93IGEgZm9yZWlnbiB0YWJsZSB0byBpbmhlcml0IGZyb20gcGFyZW50 cyB0aGF0IGhhdmUgT0lECisgCQkgKiBzeXN0ZW0gY29sdW1ucy4KKyAJCSAq LworIAkJaWYgKHBhcmVudE9pZENvdW50ID4gMCkKKyAJCQllcmVwb3J0KEVS Uk9SLAorIAkJCQkJKGVycmNvZGUoRVJSQ09ERV9GRUFUVVJFX05PVF9TVVBQ T1JURUQpLAorIAkJCQkJIGVycm1zZygiY2Fubm90IGluaGVyaXQgZnJvbSBy ZWxhdGlvbiB3aXRoIE9JRHMiKSkpOworIAorIAkJLyoKKyAJCSAqIFJlc2V0 IHRoZSBzdG9yYWdlIHBhcmFtZXRlciBmb3IgaW5oZXJpdGVkIGF0dHJpYnV0 ZXMgdGhhdCBoYXZlCisgCQkgKiBub24tZGVmYXVsdCB2YWx1ZXMuCisgCQkg Ki8KKyAJCWZvcmVhY2gobGlzdHB0ciwgc2NoZW1hKQorIAkJeworIAkJCUNv bHVtbkRlZiAgKmNvbERlZiA9IGxmaXJzdChsaXN0cHRyKTsKKyAJCQorIAkJ CWlmIChjb2xEZWYtPnN0b3JhZ2UgIT0gMCkKKyAJCQkJY29sRGVmLT5zdG9y YWdlID0gMDsKKyAJCX0KKyAJfQorIAogIAkvKgogIAkgKiBDcmVhdGUgYSB0 dXBsZSBkZXNjcmlwdG9yIGZyb20gdGhlIHJlbGF0aW9uIHNjaGVtYS4JTm90 ZSB0aGF0IHRoaXMKICAJICogZGVhbHMgd2l0aCBjb2x1bW4gbmFtZXMsIHR5 cGVzLCBhbmQgTk9UIE5VTEwgY29uc3RyYWludHMsIGJ1dCBub3QKKioqKioq KioqKioqKioqCioqKiAzMDE5LDMwNDIgKioqKiBBVFByZXBDbWQoTGlzdCAq KndxdWV1ZSwgUmVsYXRpb24gcmVsLCBBbHRlclRhYmxlQ21kICpjbWQsCiAg CQkJICogcnVsZXMuCiAgCQkJICovCiAgCQkJQVRTaW1wbGVQZXJtaXNzaW9u cyhyZWwsIEFUVF9UQUJMRSB8IEFUVF9WSUVXIHwgQVRUX0ZPUkVJR05fVEFC TEUpOwohIAkJCUFUU2ltcGxlUmVjdXJzaW9uKHdxdWV1ZSwgcmVsLCBjbWQs IHJlY3Vyc2UsIGxvY2ttb2RlKTsKICAJCQkvKiBObyBjb21tYW5kLXNwZWNp ZmljIHByZXAgbmVlZGVkICovCiAgCQkJcGFzcyA9IGNtZC0+ZGVmID8gQVRf UEFTU19BRERfQ09OU1RSIDogQVRfUEFTU19EUk9QOwogIAkJCWJyZWFrOwog IAkJY2FzZSBBVF9Ecm9wTm90TnVsbDoJLyogQUxURVIgQ09MVU1OIERST1Ag Tk9UIE5VTEwgKi8KICAJCQlBVFNpbXBsZVBlcm1pc3Npb25zKHJlbCwgQVRU X1RBQkxFIHwgQVRUX0ZPUkVJR05fVEFCTEUpOwohIAkJCUFUU2ltcGxlUmVj dXJzaW9uKHdxdWV1ZSwgcmVsLCBjbWQsIHJlY3Vyc2UsIGxvY2ttb2RlKTsK ICAJCQkvKiBObyBjb21tYW5kLXNwZWNpZmljIHByZXAgbmVlZGVkICovCiAg CQkJcGFzcyA9IEFUX1BBU1NfRFJPUDsKICAJCQlicmVhazsKICAJCWNhc2Ug QVRfU2V0Tm90TnVsbDoJCS8qIEFMVEVSIENPTFVNTiBTRVQgTk9UIE5VTEwg Ki8KICAJCQlBVFNpbXBsZVBlcm1pc3Npb25zKHJlbCwgQVRUX1RBQkxFIHwg QVRUX0ZPUkVJR05fVEFCTEUpOwohIAkJCUFUU2ltcGxlUmVjdXJzaW9uKHdx dWV1ZSwgcmVsLCBjbWQsIHJlY3Vyc2UsIGxvY2ttb2RlKTsKICAJCQkvKiBO byBjb21tYW5kLXNwZWNpZmljIHByZXAgbmVlZGVkICovCiAgCQkJcGFzcyA9 IEFUX1BBU1NfQUREX0NPTlNUUjsKICAJCQlicmVhazsKICAJCWNhc2UgQVRf U2V0U3RhdGlzdGljczoJLyogQUxURVIgQ09MVU1OIFNFVCBTVEFUSVNUSUNT ICovCiEgCQkJQVRTaW1wbGVSZWN1cnNpb24od3F1ZXVlLCByZWwsIGNtZCwg cmVjdXJzZSwgbG9ja21vZGUpOwogIAkJCS8qIFBlcmZvcm1zIG93biBwZXJt aXNzaW9uIGNoZWNrcyAqLwogIAkJCUFUUHJlcFNldFN0YXRpc3RpY3MocmVs LCBjbWQtPm5hbWUsIGNtZC0+ZGVmLCBsb2NrbW9kZSk7CiAgCQkJcGFzcyA9 IEFUX1BBU1NfTUlTQzsKLS0tIDMwNDAsMzA2NyAtLS0tCiAgCQkJICogcnVs ZXMuCiAgCQkJICovCiAgCQkJQVRTaW1wbGVQZXJtaXNzaW9ucyhyZWwsIEFU VF9UQUJMRSB8IEFUVF9WSUVXIHwgQVRUX0ZPUkVJR05fVEFCTEUpOwohIAkJ CS8qIFJlY3Vyc2UgdG8gY2hpbGQgdGFibGVzIHRoYXQgYXJlIGZvcmVpZ24s IHRvbyAqLwohIAkJCUFUU2ltcGxlUmVjdXJzaW9uKHdxdWV1ZSwgcmVsLCBj bWQsIHJlY3Vyc2UsIHRydWUsIGxvY2ttb2RlKTsKICAJCQkvKiBObyBjb21t YW5kLXNwZWNpZmljIHByZXAgbmVlZGVkICovCiAgCQkJcGFzcyA9IGNtZC0+ ZGVmID8gQVRfUEFTU19BRERfQ09OU1RSIDogQVRfUEFTU19EUk9QOwogIAkJ CWJyZWFrOwogIAkJY2FzZSBBVF9Ecm9wTm90TnVsbDoJLyogQUxURVIgQ09M VU1OIERST1AgTk9UIE5VTEwgKi8KICAJCQlBVFNpbXBsZVBlcm1pc3Npb25z KHJlbCwgQVRUX1RBQkxFIHwgQVRUX0ZPUkVJR05fVEFCTEUpOwohIAkJCS8q IFJlY3Vyc2UgdG8gY2hpbGQgdGFibGVzIHRoYXQgYXJlIGZvcmVpZ24sIHRv byAqLwohIAkJCUFUU2ltcGxlUmVjdXJzaW9uKHdxdWV1ZSwgcmVsLCBjbWQs IHJlY3Vyc2UsIHRydWUsIGxvY2ttb2RlKTsKICAJCQkvKiBObyBjb21tYW5k LXNwZWNpZmljIHByZXAgbmVlZGVkICovCiAgCQkJcGFzcyA9IEFUX1BBU1Nf RFJPUDsKICAJCQlicmVhazsKICAJCWNhc2UgQVRfU2V0Tm90TnVsbDoJCS8q IEFMVEVSIENPTFVNTiBTRVQgTk9UIE5VTEwgKi8KICAJCQlBVFNpbXBsZVBl cm1pc3Npb25zKHJlbCwgQVRUX1RBQkxFIHwgQVRUX0ZPUkVJR05fVEFCTEUp OwohIAkJCS8qIFJlY3Vyc2UgdG8gY2hpbGQgdGFibGVzIHRoYXQgYXJlIGZv cmVpZ24sIHRvbyAqLwohIAkJCUFUU2ltcGxlUmVjdXJzaW9uKHdxdWV1ZSwg cmVsLCBjbWQsIHJlY3Vyc2UsIHRydWUsIGxvY2ttb2RlKTsKICAJCQkvKiBO byBjb21tYW5kLXNwZWNpZmljIHByZXAgbmVlZGVkICovCiAgCQkJcGFzcyA9 IEFUX1BBU1NfQUREX0NPTlNUUjsKICAJCQlicmVhazsKICAJCWNhc2UgQVRf U2V0U3RhdGlzdGljczoJLyogQUxURVIgQ09MVU1OIFNFVCBTVEFUSVNUSUNT ICovCiEgCQkJLyogUmVjdXJzZSB0byBjaGlsZCB0YWJsZXMgdGhhdCBhcmUg Zm9yZWlnbiwgdG9vICovCiEgCQkJQVRTaW1wbGVSZWN1cnNpb24od3F1ZXVl LCByZWwsIGNtZCwgcmVjdXJzZSwgdHJ1ZSwgbG9ja21vZGUpOwogIAkJCS8q IFBlcmZvcm1zIG93biBwZXJtaXNzaW9uIGNoZWNrcyAqLwogIAkJCUFUUHJl cFNldFN0YXRpc3RpY3MocmVsLCBjbWQtPm5hbWUsIGNtZC0+ZGVmLCBsb2Nr bW9kZSk7CiAgCQkJcGFzcyA9IEFUX1BBU1NfTUlTQzsKKioqKioqKioqKioq KioqCioqKiAzMDQ5LDMwNTUgKioqKiBBVFByZXBDbWQoTGlzdCAqKndxdWV1 ZSwgUmVsYXRpb24gcmVsLCBBbHRlclRhYmxlQ21kICpjbWQsCiAgCQkJYnJl YWs7CiAgCQljYXNlIEFUX1NldFN0b3JhZ2U6CQkvKiBBTFRFUiBDT0xVTU4g U0VUIFNUT1JBR0UgKi8KICAJCQlBVFNpbXBsZVBlcm1pc3Npb25zKHJlbCwg QVRUX1RBQkxFIHwgQVRUX01BVFZJRVcpOwohIAkJCUFUU2ltcGxlUmVjdXJz aW9uKHdxdWV1ZSwgcmVsLCBjbWQsIHJlY3Vyc2UsIGxvY2ttb2RlKTsKICAJ CQkvKiBObyBjb21tYW5kLXNwZWNpZmljIHByZXAgbmVlZGVkICovCiAgCQkJ cGFzcyA9IEFUX1BBU1NfTUlTQzsKICAJCQlicmVhazsKLS0tIDMwNzQsMzA4 MSAtLS0tCiAgCQkJYnJlYWs7CiAgCQljYXNlIEFUX1NldFN0b3JhZ2U6CQkv KiBBTFRFUiBDT0xVTU4gU0VUIFNUT1JBR0UgKi8KICAJCQlBVFNpbXBsZVBl cm1pc3Npb25zKHJlbCwgQVRUX1RBQkxFIHwgQVRUX01BVFZJRVcpOwohIAkJ CS8qIERvbid0IHJlY3Vyc2UgdG8gY2hpbGQgdGFibGVzIHRoYXQgYXJlIGZv cmVpZ24gKi8KISAJCQlBVFNpbXBsZVJlY3Vyc2lvbih3cXVldWUsIHJlbCwg Y21kLCByZWN1cnNlLCBmYWxzZSwgbG9ja21vZGUpOwogIAkJCS8qIE5vIGNv bW1hbmQtc3BlY2lmaWMgcHJlcCBuZWVkZWQgKi8KICAJCQlwYXNzID0gQVRf UEFTU19NSVNDOwogIAkJCWJyZWFrOwoqKioqKioqKioqKioqKioKKioqIDMw NjcsMzA3MyAqKioqIEFUUHJlcENtZChMaXN0ICoqd3F1ZXVlLCBSZWxhdGlv biByZWwsIEFsdGVyVGFibGVDbWQgKmNtZCwKICAJCQlwYXNzID0gQVRfUEFT U19BRERfSU5ERVg7CiAgCQkJYnJlYWs7CiAgCQljYXNlIEFUX0FkZENvbnN0 cmFpbnQ6CS8qIEFERCBDT05TVFJBSU5UICovCiEgCQkJQVRTaW1wbGVQZXJt aXNzaW9ucyhyZWwsIEFUVF9UQUJMRSk7CiAgCQkJLyogUmVjdXJzaW9uIG9j Y3VycyBkdXJpbmcgZXhlY3V0aW9uIHBoYXNlICovCiAgCQkJLyogTm8gY29t bWFuZC1zcGVjaWZpYyBwcmVwIG5lZWRlZCBleGNlcHQgc2F2aW5nIHJlY3Vy c2UgZmxhZyAqLwogIAkJCWlmIChyZWN1cnNlKQotLS0gMzA5MywzMDk5IC0t LS0KICAJCQlwYXNzID0gQVRfUEFTU19BRERfSU5ERVg7CiAgCQkJYnJlYWs7 CiAgCQljYXNlIEFUX0FkZENvbnN0cmFpbnQ6CS8qIEFERCBDT05TVFJBSU5U ICovCiEgCQkJQVRTaW1wbGVQZXJtaXNzaW9ucyhyZWwsIEFUVF9UQUJMRSB8 IEFUVF9GT1JFSUdOX1RBQkxFKTsKICAJCQkvKiBSZWN1cnNpb24gb2NjdXJz IGR1cmluZyBleGVjdXRpb24gcGhhc2UgKi8KICAJCQkvKiBObyBjb21tYW5k LXNwZWNpZmljIHByZXAgbmVlZGVkIGV4Y2VwdCBzYXZpbmcgcmVjdXJzZSBm bGFnICovCiAgCQkJaWYgKHJlY3Vyc2UpCioqKioqKioqKioqKioqKgoqKiog MzA4MSwzMDg3ICoqKiogQVRQcmVwQ21kKExpc3QgKip3cXVldWUsIFJlbGF0 aW9uIHJlbCwgQWx0ZXJUYWJsZUNtZCAqY21kLAogIAkJCXBhc3MgPSBBVF9Q QVNTX0FERF9DT05TVFI7CiAgCQkJYnJlYWs7CiAgCQljYXNlIEFUX0Ryb3BD b25zdHJhaW50OgkvKiBEUk9QIENPTlNUUkFJTlQgKi8KISAJCQlBVFNpbXBs ZVBlcm1pc3Npb25zKHJlbCwgQVRUX1RBQkxFKTsKICAJCQkvKiBSZWN1cnNp b24gb2NjdXJzIGR1cmluZyBleGVjdXRpb24gcGhhc2UgKi8KICAJCQkvKiBO byBjb21tYW5kLXNwZWNpZmljIHByZXAgbmVlZGVkIGV4Y2VwdCBzYXZpbmcg cmVjdXJzZSBmbGFnICovCiAgCQkJaWYgKHJlY3Vyc2UpCi0tLSAzMTA3LDMx MTMgLS0tLQogIAkJCXBhc3MgPSBBVF9QQVNTX0FERF9DT05TVFI7CiAgCQkJ YnJlYWs7CiAgCQljYXNlIEFUX0Ryb3BDb25zdHJhaW50OgkvKiBEUk9QIENP TlNUUkFJTlQgKi8KISAJCQlBVFNpbXBsZVBlcm1pc3Npb25zKHJlbCwgQVRU X1RBQkxFIHwgQVRUX0ZPUkVJR05fVEFCTEUpOwogIAkJCS8qIFJlY3Vyc2lv biBvY2N1cnMgZHVyaW5nIGV4ZWN1dGlvbiBwaGFzZSAqLwogIAkJCS8qIE5v IGNvbW1hbmQtc3BlY2lmaWMgcHJlcCBuZWVkZWQgZXhjZXB0IHNhdmluZyBy ZWN1cnNlIGZsYWcgKi8KICAJCQlpZiAocmVjdXJzZSkKKioqKioqKioqKioq KioqCioqKiAzMTQ5LDMxNTkgKioqKiBBVFByZXBDbWQoTGlzdCAqKndxdWV1 ZSwgUmVsYXRpb24gcmVsLCBBbHRlclRhYmxlQ21kICpjbWQsCiAgCQkJcGFz cyA9IEFUX1BBU1NfTUlTQzsKICAJCQlicmVhazsKICAJCWNhc2UgQVRfQWRk SW5oZXJpdDoJCS8qIElOSEVSSVQgKi8KISAJCQlBVFNpbXBsZVBlcm1pc3Np b25zKHJlbCwgQVRUX1RBQkxFKTsKICAJCQkvKiBUaGlzIGNvbW1hbmQgbmV2 ZXIgcmVjdXJzZXMgKi8KICAJCQlBVFByZXBBZGRJbmhlcml0KHJlbCk7CiAg CQkJcGFzcyA9IEFUX1BBU1NfTUlTQzsKICAJCQlicmVhazsKICAJCWNhc2Ug QVRfQWx0ZXJDb25zdHJhaW50OgkJLyogQUxURVIgQ09OU1RSQUlOVCAqLwog IAkJCUFUU2ltcGxlUGVybWlzc2lvbnMocmVsLCBBVFRfVEFCTEUpOwogIAkJ CXBhc3MgPSBBVF9QQVNTX01JU0M7Ci0tLSAzMTc1LDMxOTEgLS0tLQogIAkJ CXBhc3MgPSBBVF9QQVNTX01JU0M7CiAgCQkJYnJlYWs7CiAgCQljYXNlIEFU X0FkZEluaGVyaXQ6CQkvKiBJTkhFUklUICovCiEgCQkJQVRTaW1wbGVQZXJt aXNzaW9ucyhyZWwsIEFUVF9UQUJMRSB8IEFUVF9GT1JFSUdOX1RBQkxFKTsK ICAJCQkvKiBUaGlzIGNvbW1hbmQgbmV2ZXIgcmVjdXJzZXMgKi8KICAJCQlB VFByZXBBZGRJbmhlcml0KHJlbCk7CiAgCQkJcGFzcyA9IEFUX1BBU1NfTUlT QzsKICAJCQlicmVhazsKKyAJCWNhc2UgQVRfRHJvcEluaGVyaXQ6CS8qIE5P IElOSEVSSVQgKi8KKyAJCQlBVFNpbXBsZVBlcm1pc3Npb25zKHJlbCwgQVRU X1RBQkxFIHwgQVRUX0ZPUkVJR05fVEFCTEUpOworIAkJCS8qIFRoaXMgY29t bWFuZCBuZXZlciByZWN1cnNlcyAqLworIAkJCS8qIE5vIGNvbW1hbmQtc3Bl Y2lmaWMgcHJlcCBuZWVkZWQgKi8KKyAJCQlwYXNzID0gQVRfUEFTU19NSVND OworIAkJCWJyZWFrOwogIAkJY2FzZSBBVF9BbHRlckNvbnN0cmFpbnQ6CQkv KiBBTFRFUiBDT05TVFJBSU5UICovCiAgCQkJQVRTaW1wbGVQZXJtaXNzaW9u cyhyZWwsIEFUVF9UQUJMRSk7CiAgCQkJcGFzcyA9IEFUX1BBU1NfTUlTQzsK KioqKioqKioqKioqKioqCioqKiAzMTg3LDMxOTMgKioqKiBBVFByZXBDbWQo TGlzdCAqKndxdWV1ZSwgUmVsYXRpb24gcmVsLCBBbHRlclRhYmxlQ21kICpj bWQsCiAgCQljYXNlIEFUX0VuYWJsZUFsd2F5c1J1bGU6CiAgCQljYXNlIEFU X0VuYWJsZVJlcGxpY2FSdWxlOgogIAkJY2FzZSBBVF9EaXNhYmxlUnVsZToK LSAJCWNhc2UgQVRfRHJvcEluaGVyaXQ6CS8qIE5PIElOSEVSSVQgKi8KICAJ CWNhc2UgQVRfQWRkT2Y6CQkJLyogT0YgKi8KICAJCWNhc2UgQVRfRHJvcE9m OiAvKiBOT1QgT0YgKi8KICAJCQlBVFNpbXBsZVBlcm1pc3Npb25zKHJlbCwg QVRUX1RBQkxFKTsKLS0tIDMyMTksMzIyNCAtLS0tCioqKioqKioqKioqKioq KgoqKiogNDEyOCw0MTM0ICoqKiogQVRXcm9uZ1JlbGtpbmRFcnJvcihSZWxh dGlvbiByZWwsIGludCBhbGxvd2VkX3RhcmdldHMpCiAgICovCiAgc3RhdGlj IHZvaWQKICBBVFNpbXBsZVJlY3Vyc2lvbihMaXN0ICoqd3F1ZXVlLCBSZWxh dGlvbiByZWwsCiEgCQkJCSAgQWx0ZXJUYWJsZUNtZCAqY21kLCBib29sIHJl Y3Vyc2UsIExPQ0tNT0RFIGxvY2ttb2RlKQogIHsKICAJLyoKICAJICogUHJv cGFnYXRlIHRvIGNoaWxkcmVuIGlmIGRlc2lyZWQuICBOb24tdGFibGUgcmVs YXRpb25zIG5ldmVyIGhhdmUKLS0tIDQxNTksNDE2NiAtLS0tCiAgICovCiAg c3RhdGljIHZvaWQKICBBVFNpbXBsZVJlY3Vyc2lvbihMaXN0ICoqd3F1ZXVl LCBSZWxhdGlvbiByZWwsCiEgCQkJCSAgQWx0ZXJUYWJsZUNtZCAqY21kLCBi b29sIHJlY3Vyc2UsCiEgCQkJCSAgYm9vbCBpbmNsdWRlX2ZvcmVpZ24sIExP Q0tNT0RFIGxvY2ttb2RlKQogIHsKICAJLyoKICAJICogUHJvcGFnYXRlIHRv IGNoaWxkcmVuIGlmIGRlc2lyZWQuICBOb24tdGFibGUgcmVsYXRpb25zIG5l dmVyIGhhdmUKKioqKioqKioqKioqKioqCioqKiA0MTU2LDQxNjMgKioqKiBB VFNpbXBsZVJlY3Vyc2lvbihMaXN0ICoqd3F1ZXVlLCBSZWxhdGlvbiByZWws CiAgCQkJCWNvbnRpbnVlOwogIAkJCS8qIGZpbmRfYWxsX2luaGVyaXRvcnMg YWxyZWFkeSBnb3QgbG9jayAqLwogIAkJCWNoaWxkcmVsID0gcmVsYXRpb25f b3BlbihjaGlsZHJlbGlkLCBOb0xvY2spOwohIAkJCUNoZWNrVGFibGVOb3RJ blVzZShjaGlsZHJlbCwgIkFMVEVSIFRBQkxFIik7CiEgCQkJQVRQcmVwQ21k KHdxdWV1ZSwgY2hpbGRyZWwsIGNtZCwgZmFsc2UsIHRydWUsIGxvY2ttb2Rl KTsKICAJCQlyZWxhdGlvbl9jbG9zZShjaGlsZHJlbCwgTm9Mb2NrKTsKICAJ CX0KICAJfQotLS0gNDE4OCw0MTk5IC0tLS0KICAJCQkJY29udGludWU7CiAg CQkJLyogZmluZF9hbGxfaW5oZXJpdG9ycyBhbHJlYWR5IGdvdCBsb2NrICov CiAgCQkJY2hpbGRyZWwgPSByZWxhdGlvbl9vcGVuKGNoaWxkcmVsaWQsIE5v TG9jayk7CiEgCQkJaWYgKGNoaWxkcmVsLT5yZF9yZWwtPnJlbGtpbmQgIT0g UkVMS0lORF9GT1JFSUdOX1RBQkxFCiEgCQkJCXx8IGluY2x1ZGVfZm9yZWln bikKISAJCQl7CiEgCQkJCUNoZWNrVGFibGVOb3RJblVzZShjaGlsZHJlbCwg IkFMVEVSIFRBQkxFIik7CiEgCQkJCUFUUHJlcENtZCh3cXVldWUsIGNoaWxk cmVsLCBjbWQsIGZhbHNlLCB0cnVlLCBsb2NrbW9kZSk7CiEgCQkJfQogIAkJ CXJlbGF0aW9uX2Nsb3NlKGNoaWxkcmVsLCBOb0xvY2spOwogIAkJfQogIAl9 CioqKioqKioqKioqKioqKgoqKiogNDQ0Nyw0NDUzICoqKiogQVRFeGVjQWRk Q29sdW1uKExpc3QgKip3cXVldWUsIEFsdGVyZWRUYWJsZUluZm8gKnRhYiwg UmVsYXRpb24gcmVsLAogIAogIAkvKiBBdCB0b3AgbGV2ZWwsIHBlcm1pc3Np b24gY2hlY2sgd2FzIGRvbmUgaW4gQVRQcmVwQ21kLCBlbHNlIGRvIGl0ICov CiAgCWlmIChyZWN1cnNpbmcpCiEgCQlBVFNpbXBsZVBlcm1pc3Npb25zKHJl bCwgQVRUX1RBQkxFKTsKICAKICAJYXR0cmRlc2MgPSBoZWFwX29wZW4oQXR0 cmlidXRlUmVsYXRpb25JZCwgUm93RXhjbHVzaXZlTG9jayk7CiAgCi0tLSA0 NDgzLDQ0ODkgLS0tLQogIAogIAkvKiBBdCB0b3AgbGV2ZWwsIHBlcm1pc3Np b24gY2hlY2sgd2FzIGRvbmUgaW4gQVRQcmVwQ21kLCBlbHNlIGRvIGl0ICov CiAgCWlmIChyZWN1cnNpbmcpCiEgCQlBVFNpbXBsZVBlcm1pc3Npb25zKHJl bCwgQVRUX1RBQkxFIHwgQVRUX0ZPUkVJR05fVEFCTEUpOwogIAogIAlhdHRy ZGVzYyA9IGhlYXBfb3BlbihBdHRyaWJ1dGVSZWxhdGlvbklkLCBSb3dFeGNs dXNpdmVMb2NrKTsKICAKKioqKioqKioqKioqKioqCioqKiA0NzQzLDQ3NDgg KioqKiBBVEV4ZWNBZGRDb2x1bW4oTGlzdCAqKndxdWV1ZSwgQWx0ZXJlZFRh YmxlSW5mbyAqdGFiLCBSZWxhdGlvbiByZWwsCi0tLSA0Nzc5LDQ3ODkgLS0t LQogIAogIAkJLyogZmluZF9pbmhlcml0YW5jZV9jaGlsZHJlbiBhbHJlYWR5 IGdvdCBsb2NrICovCiAgCQljaGlsZHJlbCA9IGhlYXBfb3BlbihjaGlsZHJl bGlkLCBOb0xvY2spOworIAkJaWYgKGNoaWxkcmVsLT5yZF9yZWwtPnJlbGtp bmQgPT0gUkVMS0lORF9GT1JFSUdOX1RBQkxFICYmIGlzT2lkKQorIAkJCWVy ZXBvcnQoRVJST1IsCisgCQkJCQkoZXJyY29kZShFUlJDT0RFX0ZFQVRVUkVf Tk9UX1NVUFBPUlRFRCksCisgCQkJCQkgZXJybXNnKCJjYW5ub3QgYWRkIE9J RCBjb2x1bW4gdG8gZm9yZWlnbiB0YWJsZSBcIiVzXCIiLAorIAkJCQkJCQlS ZWxhdGlvbkdldFJlbGF0aW9uTmFtZShjaGlsZHJlbCkpKSk7CiAgCQlDaGVj a1RhYmxlTm90SW5Vc2UoY2hpbGRyZWwsICJBTFRFUiBUQUJMRSIpOwogIAog IAkJLyogRmluZCBvciBjcmVhdGUgd29yayBxdWV1ZSBlbnRyeSBmb3IgdGhp cyB0YWJsZSAqLwoqKioqKioqKioqKioqKioKKioqIDUzNDMsNTM0OSAqKioq IEFURXhlY0Ryb3BDb2x1bW4oTGlzdCAqKndxdWV1ZSwgUmVsYXRpb24gcmVs LCBjb25zdCBjaGFyICpjb2xOYW1lLAogIAogIAkvKiBBdCB0b3AgbGV2ZWws IHBlcm1pc3Npb24gY2hlY2sgd2FzIGRvbmUgaW4gQVRQcmVwQ21kLCBlbHNl IGRvIGl0ICovCiAgCWlmIChyZWN1cnNpbmcpCiEgCQlBVFNpbXBsZVBlcm1p c3Npb25zKHJlbCwgQVRUX1RBQkxFKTsKICAKICAJLyoKICAJICogZ2V0IHRo ZSBudW1iZXIgb2YgdGhlIGF0dHJpYnV0ZQotLS0gNTM4NCw1MzkwIC0tLS0K ICAKICAJLyogQXQgdG9wIGxldmVsLCBwZXJtaXNzaW9uIGNoZWNrIHdhcyBk b25lIGluIEFUUHJlcENtZCwgZWxzZSBkbyBpdCAqLwogIAlpZiAocmVjdXJz aW5nKQohIAkJQVRTaW1wbGVQZXJtaXNzaW9ucyhyZWwsIEFUVF9UQUJMRSB8 IEFUVF9GT1JFSUdOX1RBQkxFKTsKICAKICAJLyoKICAJICogZ2V0IHRoZSBu dW1iZXIgb2YgdGhlIGF0dHJpYnV0ZQoqKioqKioqKioqKioqKioKKioqIDU3 MzUsNTc0MSAqKioqIEFUQWRkQ2hlY2tDb25zdHJhaW50KExpc3QgKip3cXVl dWUsIEFsdGVyZWRUYWJsZUluZm8gKnRhYiwgUmVsYXRpb24gcmVsLAogIAog IAkvKiBBdCB0b3AgbGV2ZWwsIHBlcm1pc3Npb24gY2hlY2sgd2FzIGRvbmUg aW4gQVRQcmVwQ21kLCBlbHNlIGRvIGl0ICovCiAgCWlmIChyZWN1cnNpbmcp CiEgCQlBVFNpbXBsZVBlcm1pc3Npb25zKHJlbCwgQVRUX1RBQkxFKTsKICAK ICAJLyoKICAJICogQ2FsbCBBZGRSZWxhdGlvbk5ld0NvbnN0cmFpbnRzIHRv IGRvIHRoZSB3b3JrLCBtYWtpbmcgc3VyZSBpdCB3b3JrcyBvbgotLS0gNTc3 Niw1Nzg5IC0tLS0KICAKICAJLyogQXQgdG9wIGxldmVsLCBwZXJtaXNzaW9u IGNoZWNrIHdhcyBkb25lIGluIEFUUHJlcENtZCwgZWxzZSBkbyBpdCAqLwog IAlpZiAocmVjdXJzaW5nKQohIAkJQVRTaW1wbGVQZXJtaXNzaW9ucyhyZWws IEFUVF9UQUJMRSB8IEFUVF9GT1JFSUdOX1RBQkxFKTsKISAKISAJLyogRG9u J3QgYWxsb3cgQUREIENPTlNUUkFJTlQgTk9UIFZBTElEIHRvIGJlIGFwcGxp ZWQgdG8gZm9yZWlnbiB0YWJsZXMgKi8KISAJaWYgKHRhYi0+cmVsa2luZCA9 PSBSRUxLSU5EX0ZPUkVJR05fVEFCTEUgJiYKISAJCWNvbnN0ci0+c2tpcF92 YWxpZGF0aW9uICYmICFyZWN1cnNpbmcpCiEgCQllcmVwb3J0KEVSUk9SLAoh IAkJCQkoZXJyY29kZShFUlJDT0RFX0ZFQVRVUkVfTk9UX1NVUFBPUlRFRCks CiEgCQkJCSBlcnJtc2coIk5PVCBWQUxJRCBpcyBub3Qgc3VwcG9ydGVkIG9u IGZvcmVpZ24gdGFibGVzIikpKTsKICAKICAJLyoKICAJICogQ2FsbCBBZGRS ZWxhdGlvbk5ld0NvbnN0cmFpbnRzIHRvIGRvIHRoZSB3b3JrLCBtYWtpbmcg c3VyZSBpdCB3b3JrcyBvbgoqKioqKioqKioqKioqKioKKioqIDU3NDYsNTc1 NCAqKioqIEFUQWRkQ2hlY2tDb25zdHJhaW50KExpc3QgKip3cXVldWUsIEFs dGVyZWRUYWJsZUluZm8gKnRhYiwgUmVsYXRpb24gcmVsLAogIAkgKiBvbWl0 dGVkIGZyb20gdGhlIHJldHVybmVkIGxpc3QsIHdoaWNoIGlzIHdoYXQgd2Ug d2FudDogd2UgZG8gbm90IG5lZWQKICAJICogdG8gZG8gYW55IHZhbGlkYXRp b24gd29yay4gIFRoYXQgY2FuIG9ubHkgaGFwcGVuIGF0IGNoaWxkIHRhYmxl cywKICAJICogdGhvdWdoLCBzaW5jZSB3ZSBkaXNhbGxvdyBtZXJnaW5nIGF0 IHRoZSB0b3AgbGV2ZWwuCiAgCSAqLwogIAluZXdjb25zID0gQWRkUmVsYXRp b25OZXdDb25zdHJhaW50cyhyZWwsIE5JTCwKISAJCQkJCQkJCQkJbGlzdF9t YWtlMShjb3B5T2JqZWN0KGNvbnN0cikpLAogIAkJCQkJCQkJCQlyZWN1cnNp bmcsCQkvKiBhbGxvd19tZXJnZSAqLwogIAkJCQkJCQkJCQkhcmVjdXJzaW5n LAkJLyogaXNfbG9jYWwgKi8KICAJCQkJCQkJCQkJaXNfcmVhZGQpOwkJLyog aXNfaW50ZXJuYWwgKi8KLS0tIDU3OTQsNTgxMCAtLS0tCiAgCSAqIG9taXR0 ZWQgZnJvbSB0aGUgcmV0dXJuZWQgbGlzdCwgd2hpY2ggaXMgd2hhdCB3ZSB3 YW50OiB3ZSBkbyBub3QgbmVlZAogIAkgKiB0byBkbyBhbnkgdmFsaWRhdGlv biB3b3JrLiAgVGhhdCBjYW4gb25seSBoYXBwZW4gYXQgY2hpbGQgdGFibGVz LAogIAkgKiB0aG91Z2gsIHNpbmNlIHdlIGRpc2FsbG93IG1lcmdpbmcgYXQg dGhlIHRvcCBsZXZlbC4KKyAJICoKKyAJICogV2hlbiBwcm9wYWdhdGluZyBh IE5PVCBWQUxJRCBvcHRpb24gdG8gY2hpbGRyZW4gdGhhdCBhcmUgZm9yZWln biB0YWJsZXMsCisgCSAqIHdlIHF1aWV0bHkgaWdub3JlIHRoZSBvcHRpb24u ICBOb3RlIHRoYXQgdGhpcyBpcyBzYWZlIGJlY2F1c2UgZm9yZWlnbgorIAkg KiB0YWJsZXMgZG9uJ3QgaGF2ZSBhbnkgY2hpbGRyZW4uCiAgCSAqLworIAlj b25zdHIgPSAoQ29uc3RyYWludCAqKSBjb3B5T2JqZWN0KGNvbnN0cik7Cisg CWlmICh0YWItPnJlbGtpbmQgPT0gUkVMS0lORF9GT1JFSUdOX1RBQkxFICYm CisgCQljb25zdHItPnNraXBfdmFsaWRhdGlvbiAmJiByZWN1cnNpbmcpCisg CQljb25zdHItPnNraXBfdmFsaWRhdGlvbiA9IGZhbHNlOwogIAluZXdjb25z ID0gQWRkUmVsYXRpb25OZXdDb25zdHJhaW50cyhyZWwsIE5JTCwKISAJCQkJ CQkJCQkJbGlzdF9tYWtlMShjb25zdHIpLAogIAkJCQkJCQkJCQlyZWN1cnNp bmcsCQkvKiBhbGxvd19tZXJnZSAqLwogIAkJCQkJCQkJCQkhcmVjdXJzaW5n LAkJLyogaXNfbG9jYWwgKi8KICAJCQkJCQkJCQkJaXNfcmVhZGQpOwkJLyog aXNfaW50ZXJuYWwgKi8KKioqKioqKioqKioqKioqCioqKiA3MjI4LDcyMzQg KioqKiBBVEV4ZWNEcm9wQ29uc3RyYWludChSZWxhdGlvbiByZWwsIGNvbnN0 IGNoYXIgKmNvbnN0ck5hbWUsCiAgCiAgCS8qIEF0IHRvcCBsZXZlbCwgcGVy bWlzc2lvbiBjaGVjayB3YXMgZG9uZSBpbiBBVFByZXBDbWQsIGVsc2UgZG8g aXQgKi8KICAJaWYgKHJlY3Vyc2luZykKISAJCUFUU2ltcGxlUGVybWlzc2lv bnMocmVsLCBBVFRfVEFCTEUpOwogIAogIAljb25yZWwgPSBoZWFwX29wZW4o Q29uc3RyYWludFJlbGF0aW9uSWQsIFJvd0V4Y2x1c2l2ZUxvY2spOwogIAot LS0gNzI4NCw3MjkwIC0tLS0KICAKICAJLyogQXQgdG9wIGxldmVsLCBwZXJt aXNzaW9uIGNoZWNrIHdhcyBkb25lIGluIEFUUHJlcENtZCwgZWxzZSBkbyBp dCAqLwogIAlpZiAocmVjdXJzaW5nKQohIAkJQVRTaW1wbGVQZXJtaXNzaW9u cyhyZWwsIEFUVF9UQUJMRSB8IEFUVF9GT1JFSUdOX1RBQkxFKTsKICAKICAJ Y29ucmVsID0gaGVhcF9vcGVuKENvbnN0cmFpbnRSZWxhdGlvbklkLCBSb3dF eGNsdXNpdmVMb2NrKTsKICAKKioqKioqKioqKioqKioqCioqKiA3NTYzLDc1 NjkgKioqKiBBVFByZXBBbHRlckNvbHVtblR5cGUoTGlzdCAqKndxdWV1ZSwK ICAJICogYWx0ZXIgd291bGQgcHV0IHRoZW0gb3V0IG9mIHN0ZXAuCiAgCSAq LwogIAlpZiAocmVjdXJzZSkKISAJCUFUU2ltcGxlUmVjdXJzaW9uKHdxdWV1 ZSwgcmVsLCBjbWQsIHJlY3Vyc2UsIGxvY2ttb2RlKTsKICAJZWxzZSBpZiAo IXJlY3Vyc2luZyAmJgogIAkJCSBmaW5kX2luaGVyaXRhbmNlX2NoaWxkcmVu KFJlbGF0aW9uR2V0UmVsaWQocmVsKSwgTm9Mb2NrKSAhPSBOSUwpCiAgCQll cmVwb3J0KEVSUk9SLAotLS0gNzYxOSw3NjI4IC0tLS0KICAJICogYWx0ZXIg d291bGQgcHV0IHRoZW0gb3V0IG9mIHN0ZXAuCiAgCSAqLwogIAlpZiAocmVj dXJzZSkKISAJewohIAkJLyogUmVjdXJzZSB0byBjaGlsZCB0YWJsZXMgdGhh dCBhcmUgZm9yZWlnbiwgdG9vICovCiEgCQlBVFNpbXBsZVJlY3Vyc2lvbih3 cXVldWUsIHJlbCwgY21kLCByZWN1cnNlLCB0cnVlLCBsb2NrbW9kZSk7CiEg CX0KICAJZWxzZSBpZiAoIXJlY3Vyc2luZyAmJgogIAkJCSBmaW5kX2luaGVy aXRhbmNlX2NoaWxkcmVuKFJlbGF0aW9uR2V0UmVsaWQocmVsKSwgTm9Mb2Nr KSAhPSBOSUwpCiAgCQllcmVwb3J0KEVSUk9SLAoqKiogYS9zcmMvYmFja2Vu ZC9jb21tYW5kcy92YWN1dW0uYwotLS0gYi9zcmMvYmFja2VuZC9jb21tYW5k cy92YWN1dW0uYwoqKioqKioqKioqKioqKioKKioqIDYxLDY2ICoqKiogaW50 CQkJdmFjdXVtX211bHRpeGFjdF9mcmVlemVfdGFibGVfYWdlOwotLS0gNjEs NjcgLS0tLQogIAogIC8qIEEgZmV3IHZhcmlhYmxlcyB0aGF0IGRvbid0IHNl ZW0gd29ydGggcGFzc2luZyBhcm91bmQgYXMgcGFyYW1ldGVycyAqLwogIHN0 YXRpYyBNZW1vcnlDb250ZXh0IHZhY19jb250ZXh0ID0gTlVMTDsKKyBzdGF0 aWMgVmFjdXVtTW9kZSB2YWNfbW9kZTsKICBzdGF0aWMgQnVmZmVyQWNjZXNz U3RyYXRlZ3kgdmFjX3N0cmF0ZWd5OwogIAogIAoqKioqKioqKioqKioqKioK KioqIDE0NiwxNTEgKioqKiB2YWN1dW0oVmFjdXVtU3RtdCAqdmFjc3RtdCwg T2lkIHJlbGlkLCBib29sIGRvX3RvYXN0LAotLS0gMTQ3LDE2NiAtLS0tCiAg CQkJCQkJCQkJCUFMTE9DU0VUX0RFRkFVTFRfTUFYU0laRSk7CiAgCiAgCS8q CisgCSAqIElkZW50aWZ5IHZhY3V1bSBtb2RlLiAgSWYgcmVsaWQgaXMgbm90 IEludmFsaWRPaWQsIHRoZSBjYWxsZXIgc2hvdWxkIGJlCisgCSAqIGFuIGF1 dG92YWN1dW0gd29ya2VyLiAgU2VlIHRoZSBhYm92ZSBjb21tZW50cy4KKyAJ ICovCisgCWlmIChyZWxpZCAhPSBJbnZhbGlkT2lkKQorIAkJdmFjX21vZGUg PSBWQUNfTU9ERV9BVVRPVkFDVVVNOworIAllbHNlCisgCXsKKyAJCWlmICgh dmFjc3RtdC0+cmVsYXRpb24pCisgCQkJdmFjX21vZGUgPSBWQUNfTU9ERV9B TEw7CisgCQllbHNlCisgCQkJdmFjX21vZGUgPSBWQUNfTU9ERV9TSU5HTEU7 CisgCX0KKyAKKyAJLyoKICAJICogSWYgY2FsbGVyIGRpZG4ndCBnaXZlIHVz IGEgYnVmZmVyIHN0cmF0ZWd5IG9iamVjdCwgbWFrZSBvbmUgaW4gdGhlCiAg CSAqIGNyb3NzLXRyYW5zYWN0aW9uIG1lbW9yeSBjb250ZXh0LgogIAkgKi8K KioqKioqKioqKioqKioqCioqKiAyNDgsMjU0ICoqKiogdmFjdXVtKFZhY3V1 bVN0bXQgKnZhY3N0bXQsIE9pZCByZWxpZCwgYm9vbCBkb190b2FzdCwKICAJ CQkJCVB1c2hBY3RpdmVTbmFwc2hvdChHZXRUcmFuc2FjdGlvblNuYXBzaG90 KCkpOwogIAkJCQl9CiAgCiEgCQkJCWFuYWx5emVfcmVsKHJlbGlkLCB2YWNz dG10LCB2YWNfc3RyYXRlZ3kpOwogIAogIAkJCQlpZiAodXNlX293bl94YWN0 cykKICAJCQkJewotLS0gMjYzLDI2OSAtLS0tCiAgCQkJCQlQdXNoQWN0aXZl U25hcHNob3QoR2V0VHJhbnNhY3Rpb25TbmFwc2hvdCgpKTsKICAJCQkJfQog IAohIAkJCQlhbmFseXplX3JlbChyZWxpZCwgdmFjc3RtdCwgdmFjX21vZGUs IHZhY19zdHJhdGVneSk7CiAgCiAgCQkJCWlmICh1c2Vfb3duX3hhY3RzKQog IAkJCQl7CioqKiBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wcmVwL3ByZXB1 bmlvbi5jCi0tLSBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wcmVwL3ByZXB1 bmlvbi5jCioqKioqKioqKioqKioqKgoqKiogMTMzNywxMzQ3ICoqKiogZXhw YW5kX2luaGVyaXRlZF9ydGVudHJ5KFBsYW5uZXJJbmZvICpyb290LCBSYW5n ZVRibEVudHJ5ICpydGUsIEluZGV4IHJ0aSkKICAJCS8qCiAgCQkgKiBCdWls ZCBhbiBSVEUgZm9yIHRoZSBjaGlsZCwgYW5kIGF0dGFjaCB0byBxdWVyeSdz IHJhbmdldGFibGUgbGlzdC4KICAJCSAqIFdlIGNvcHkgbW9zdCBmaWVsZHMg b2YgdGhlIHBhcmVudCdzIFJURSwgYnV0IHJlcGxhY2UgcmVsYXRpb24gT0lE LAohIAkJICogYW5kIHNldCBpbmggPSBmYWxzZS4gIEFsc28sIHNldCByZXF1 aXJlZFBlcm1zIHRvIHplcm8gc2luY2UgYWxsCiEgCQkgKiByZXF1aXJlZCBw ZXJtaXNzaW9ucyBjaGVja3MgYXJlIGRvbmUgb24gdGhlIG9yaWdpbmFsIFJU RS4KICAJCSAqLwogIAkJY2hpbGRydGUgPSBjb3B5T2JqZWN0KHJ0ZSk7CiAg CQljaGlsZHJ0ZS0+cmVsaWQgPSBjaGlsZE9JRDsKICAJCWNoaWxkcnRlLT5p bmggPSBmYWxzZTsKICAJCWNoaWxkcnRlLT5yZXF1aXJlZFBlcm1zID0gMDsK ICAJCXBhcnNlLT5ydGFibGUgPSBsYXBwZW5kKHBhcnNlLT5ydGFibGUsIGNo aWxkcnRlKTsKLS0tIDEzMzcsMTM0OCAtLS0tCiAgCQkvKgogIAkJICogQnVp bGQgYW4gUlRFIGZvciB0aGUgY2hpbGQsIGFuZCBhdHRhY2ggdG8gcXVlcnkn cyByYW5nZXRhYmxlIGxpc3QuCiAgCQkgKiBXZSBjb3B5IG1vc3QgZmllbGRz IG9mIHRoZSBwYXJlbnQncyBSVEUsIGJ1dCByZXBsYWNlIHJlbGF0aW9uIE9J RCwKISAJCSAqIHJlbGtpbmQgYW5kIHNldCBpbmggPSBmYWxzZS4gIEFsc28s IHNldCByZXF1aXJlZFBlcm1zIHRvIHplcm8gc2luY2UKISAJCSAqIGFsbCBy ZXF1aXJlZCBwZXJtaXNzaW9ucyBjaGVja3MgYXJlIGRvbmUgb24gdGhlIG9y aWdpbmFsIFJURS4KICAJCSAqLwogIAkJY2hpbGRydGUgPSBjb3B5T2JqZWN0 KHJ0ZSk7CiAgCQljaGlsZHJ0ZS0+cmVsaWQgPSBjaGlsZE9JRDsKKyAJCWNo aWxkcnRlLT5yZWxraW5kID0gbmV3cmVsYXRpb24tPnJkX3JlbC0+cmVsa2lu ZDsKICAJCWNoaWxkcnRlLT5pbmggPSBmYWxzZTsKICAJCWNoaWxkcnRlLT5y ZXF1aXJlZFBlcm1zID0gMDsKICAJCXBhcnNlLT5ydGFibGUgPSBsYXBwZW5k KHBhcnNlLT5ydGFibGUsIGNoaWxkcnRlKTsKKioqIGEvc3JjL2JhY2tlbmQv b3B0aW1pemVyL3V0aWwvcGF0aG5vZGUuYwotLS0gYi9zcmMvYmFja2VuZC9v cHRpbWl6ZXIvdXRpbC9wYXRobm9kZS5jCioqKioqKioqKioqKioqKgoqKiog MTYsMjEgKioqKgotLS0gMTYsMjIgLS0tLQogIAogICNpbmNsdWRlIDxtYXRo Lmg+CiAgCisgI2luY2x1ZGUgImZvcmVpZ24vZmR3YXBpLmgiCiAgI2luY2x1 ZGUgIm1pc2NhZG1pbi5oIgogICNpbmNsdWRlICJub2Rlcy9ub2RlRnVuY3Mu aCIKICAjaW5jbHVkZSAib3B0aW1pemVyL2NsYXVzZXMuaCIKKioqKioqKioq KioqKioqCioqKiAyMDYyLDIwNjcgKioqKiByZXBhcmFtZXRlcml6ZV9wYXRo KFBsYW5uZXJJbmZvICpyb290LCBQYXRoICpwYXRoLAotLS0gMjA2MywyMDkz IC0tLS0KICAJCWNhc2UgVF9TdWJxdWVyeVNjYW46CiAgCQkJcmV0dXJuIGNy ZWF0ZV9zdWJxdWVyeXNjYW5fcGF0aChyb290LCByZWwsIHBhdGgtPnBhdGhr ZXlzLAogIAkJCQkJCQkJCQkJcmVxdWlyZWRfb3V0ZXIpOworIAkJY2FzZSBU X0ZvcmVpZ25TY2FuOgorIAkJCXsKKyAJCQkJRm9yZWlnblBhdGggKm5ld3Bh dGggPSBOVUxMOworIAorIAkJCQkvKiBMZXQgdGhlIEZEVyByZXBhcmFtZXRl cml6ZSB0aGUgcGF0aCBub2RlIGlmIHBvc3NpYmxlICovCisgCQkJCWlmIChy ZWwtPmZkd3JvdXRpbmUtPlJlcGFyYW1ldGVyaXplRm9yZWlnblBhdGggIT0g TlVMTCkKKyAJCQkJeworIAkJCQkJSW5kZXgJCXNjYW5fcmVsaWQgPSByZWwt PnJlbGlkOworIAkJCQkJUmFuZ2VUYmxFbnRyeSAqcnRlOworIAorIAkJCQkJ LyogaXQgc2hvdWxkIGJlIGEgYmFzZSByZWwuLi4gKi8KKyAJCQkJCUFzc2Vy dChzY2FuX3JlbGlkID4gMCk7CisgCQkJCQlBc3NlcnQocmVsLT5ydGVraW5k ID09IFJURV9SRUxBVElPTik7CisgCQkJCQlydGUgPSBwbGFubmVyX3J0X2Zl dGNoKHNjYW5fcmVsaWQsIHJvb3QpOworIAkJCQkJQXNzZXJ0KHJ0ZS0+cnRl a2luZCA9PSBSVEVfUkVMQVRJT04pOworIAorIAkJCQkJbmV3cGF0aCA9Cisg CQkJCQkJcmVsLT5mZHdyb3V0aW5lLT5SZXBhcmFtZXRlcml6ZUZvcmVpZ25Q YXRoKHJvb3QsCisgCQkJCQkJCQkJCQkJCQkJCSAgIHJlbCwKKyAJCQkJCQkJ CQkJCQkJCQkJICAgcnRlLT5yZWxpZCwKKyAJCQkJCQkJCQkJCQkJCSAgKEZv cmVpZ25QYXRoICopIHBhdGgsCisgCQkJCQkJCQkJCQkJCQkJICAgcmVxdWly ZWRfb3V0ZXIpOworIAkJCQl9CisgCQkJCXJldHVybiAoUGF0aCAqKSBuZXdw YXRoOworIAkJCX0KICAJCWRlZmF1bHQ6CiAgCQkJYnJlYWs7CiAgCX0KKioq IGEvc3JjL2JhY2tlbmQvcGFyc2VyL2dyYW0ueQotLS0gYi9zcmMvYmFja2Vu ZC9wYXJzZXIvZ3JhbS55CioqKioqKioqKioqKioqKgoqKiogNDIwOSw0MjQw ICoqKiogQWx0ZXJGb3JlaWduU2VydmVyU3RtdDogQUxURVIgU0VSVkVSIG5h bWUgZm9yZWlnbl9zZXJ2ZXJfdmVyc2lvbiBhbHRlcl9nZW5lcmljX28KICBD cmVhdGVGb3JlaWduVGFibGVTdG10OgogIAkJQ1JFQVRFIEZPUkVJR04gVEFC TEUgcXVhbGlmaWVkX25hbWUKICAJCQknKCcgT3B0VGFibGVFbGVtZW50TGlz dCAnKScKISAJCQlTRVJWRVIgbmFtZSBjcmVhdGVfZ2VuZXJpY19vcHRpb25z CiAgCQkJCXsKICAJCQkJCUNyZWF0ZUZvcmVpZ25UYWJsZVN0bXQgKm4gPSBt YWtlTm9kZShDcmVhdGVGb3JlaWduVGFibGVTdG10KTsKICAJCQkJCSQ0LT5y ZWxwZXJzaXN0ZW5jZSA9IFJFTFBFUlNJU1RFTkNFX1BFUk1BTkVOVDsKICAJ CQkJCW4tPmJhc2UucmVsYXRpb24gPSAkNDsKICAJCQkJCW4tPmJhc2UudGFi bGVFbHRzID0gJDY7CiEgCQkJCQluLT5iYXNlLmluaFJlbGF0aW9ucyA9IE5J TDsKICAJCQkJCW4tPmJhc2UuaWZfbm90X2V4aXN0cyA9IGZhbHNlOwogIAkJ CQkJLyogRkRXLXNwZWNpZmljIGRhdGEgKi8KISAJCQkJCW4tPnNlcnZlcm5h bWUgPSAkOTsKISAJCQkJCW4tPm9wdGlvbnMgPSAkMTA7CiAgCQkJCQkkJCA9 IChOb2RlICopIG47CiAgCQkJCX0KICAJCXwgQ1JFQVRFIEZPUkVJR04gVEFC TEUgSUZfUCBOT1QgRVhJU1RTIHF1YWxpZmllZF9uYW1lCiAgCQkJJygnIE9w dFRhYmxlRWxlbWVudExpc3QgJyknCiEgCQkJU0VSVkVSIG5hbWUgY3JlYXRl X2dlbmVyaWNfb3B0aW9ucwogIAkJCQl7CiAgCQkJCQlDcmVhdGVGb3JlaWdu VGFibGVTdG10ICpuID0gbWFrZU5vZGUoQ3JlYXRlRm9yZWlnblRhYmxlU3Rt dCk7CiAgCQkJCQkkNy0+cmVscGVyc2lzdGVuY2UgPSBSRUxQRVJTSVNURU5D RV9QRVJNQU5FTlQ7CiAgCQkJCQluLT5iYXNlLnJlbGF0aW9uID0gJDc7CiAg CQkJCQluLT5iYXNlLnRhYmxlRWx0cyA9ICQ5OwohIAkJCQkJbi0+YmFzZS5p bmhSZWxhdGlvbnMgPSBOSUw7CiAgCQkJCQluLT5iYXNlLmlmX25vdF9leGlz dHMgPSB0cnVlOwogIAkJCQkJLyogRkRXLXNwZWNpZmljIGRhdGEgKi8KISAJ CQkJCW4tPnNlcnZlcm5hbWUgPSAkMTI7CiEgCQkJCQluLT5vcHRpb25zID0g JDEzOwogIAkJCQkJJCQgPSAoTm9kZSAqKSBuOwogIAkJCQl9CiAgCQk7Ci0t LSA0MjA5LDQyNDAgLS0tLQogIENyZWF0ZUZvcmVpZ25UYWJsZVN0bXQ6CiAg CQlDUkVBVEUgRk9SRUlHTiBUQUJMRSBxdWFsaWZpZWRfbmFtZQogIAkJCSco JyBPcHRUYWJsZUVsZW1lbnRMaXN0ICcpJwohIAkJCU9wdEluaGVyaXQgU0VS VkVSIG5hbWUgY3JlYXRlX2dlbmVyaWNfb3B0aW9ucwogIAkJCQl7CiAgCQkJ CQlDcmVhdGVGb3JlaWduVGFibGVTdG10ICpuID0gbWFrZU5vZGUoQ3JlYXRl Rm9yZWlnblRhYmxlU3RtdCk7CiAgCQkJCQkkNC0+cmVscGVyc2lzdGVuY2Ug PSBSRUxQRVJTSVNURU5DRV9QRVJNQU5FTlQ7CiAgCQkJCQluLT5iYXNlLnJl bGF0aW9uID0gJDQ7CiAgCQkJCQluLT5iYXNlLnRhYmxlRWx0cyA9ICQ2Owoh IAkJCQkJbi0+YmFzZS5pbmhSZWxhdGlvbnMgPSAkODsKICAJCQkJCW4tPmJh c2UuaWZfbm90X2V4aXN0cyA9IGZhbHNlOwogIAkJCQkJLyogRkRXLXNwZWNp ZmljIGRhdGEgKi8KISAJCQkJCW4tPnNlcnZlcm5hbWUgPSAkMTA7CiEgCQkJ CQluLT5vcHRpb25zID0gJDExOwogIAkJCQkJJCQgPSAoTm9kZSAqKSBuOwog IAkJCQl9CiAgCQl8IENSRUFURSBGT1JFSUdOIFRBQkxFIElGX1AgTk9UIEVY SVNUUyBxdWFsaWZpZWRfbmFtZQogIAkJCScoJyBPcHRUYWJsZUVsZW1lbnRM aXN0ICcpJwohIAkJCU9wdEluaGVyaXQgU0VSVkVSIG5hbWUgY3JlYXRlX2dl bmVyaWNfb3B0aW9ucwogIAkJCQl7CiAgCQkJCQlDcmVhdGVGb3JlaWduVGFi bGVTdG10ICpuID0gbWFrZU5vZGUoQ3JlYXRlRm9yZWlnblRhYmxlU3RtdCk7 CiAgCQkJCQkkNy0+cmVscGVyc2lzdGVuY2UgPSBSRUxQRVJTSVNURU5DRV9Q RVJNQU5FTlQ7CiAgCQkJCQluLT5iYXNlLnJlbGF0aW9uID0gJDc7CiAgCQkJ CQluLT5iYXNlLnRhYmxlRWx0cyA9ICQ5OwohIAkJCQkJbi0+YmFzZS5pbmhS ZWxhdGlvbnMgPSAkMTE7CiAgCQkJCQluLT5iYXNlLmlmX25vdF9leGlzdHMg PSB0cnVlOwogIAkJCQkJLyogRkRXLXNwZWNpZmljIGRhdGEgKi8KISAJCQkJ CW4tPnNlcnZlcm5hbWUgPSAkMTM7CiEgCQkJCQluLT5vcHRpb25zID0gJDE0 OwogIAkJCQkJJCQgPSAoTm9kZSAqKSBuOwogIAkJCQl9CiAgCQk7CioqKiBh L3NyYy9iYWNrZW5kL3BhcnNlci9wYXJzZV91dGlsY21kLmMKLS0tIGIvc3Jj L2JhY2tlbmQvcGFyc2VyL3BhcnNlX3V0aWxjbWQuYwoqKioqKioqKioqKioq KioKKioqIDUxNSw1MjYgKioqKiB0cmFuc2Zvcm1Db2x1bW5EZWZpbml0aW9u KENyZWF0ZVN0bXRDb250ZXh0ICpjeHQsIENvbHVtbkRlZiAqY29sdW1uKQog IAkJCQlicmVhazsKICAKICAJCQljYXNlIENPTlNUUl9DSEVDSzoKLSAJCQkJ aWYgKGN4dC0+aXNmb3JlaWduKQotIAkJCQkJZXJlcG9ydChFUlJPUiwKLSAJ CQkJCQkJKGVycmNvZGUoRVJSQ09ERV9GRUFUVVJFX05PVF9TVVBQT1JURUQp LAotIAkJCQkJZXJybXNnKCJjb25zdHJhaW50cyBhcmUgbm90IHN1cHBvcnRl ZCBvbiBmb3JlaWduIHRhYmxlcyIpLAotIAkJCQkJCQkgcGFyc2VyX2VycnBv c2l0aW9uKGN4dC0+cHN0YXRlLAotIAkJCQkJCQkJCQkJCWNvbnN0cmFpbnQt PmxvY2F0aW9uKSkpOwogIAkJCQljeHQtPmNrY29uc3RyYWludHMgPSBsYXBw ZW5kKGN4dC0+Y2tjb25zdHJhaW50cywgY29uc3RyYWludCk7CiAgCQkJCWJy ZWFrOwogIAotLS0gNTE1LDUyMCAtLS0tCioqKioqKioqKioqKioqKgoqKiog NTI5LDUzNSAqKioqIHRyYW5zZm9ybUNvbHVtbkRlZmluaXRpb24oQ3JlYXRl U3RtdENvbnRleHQgKmN4dCwgQ29sdW1uRGVmICpjb2x1bW4pCiAgCQkJCWlm IChjeHQtPmlzZm9yZWlnbikKICAJCQkJCWVyZXBvcnQoRVJST1IsCiAgCQkJ CQkJCShlcnJjb2RlKEVSUkNPREVfRkVBVFVSRV9OT1RfU1VQUE9SVEVEKSwK ISAJCQkJCWVycm1zZygiY29uc3RyYWludHMgYXJlIG5vdCBzdXBwb3J0ZWQg b24gZm9yZWlnbiB0YWJsZXMiKSwKICAJCQkJCQkJIHBhcnNlcl9lcnJwb3Np dGlvbihjeHQtPnBzdGF0ZSwKICAJCQkJCQkJCQkJCQljb25zdHJhaW50LT5s b2NhdGlvbikpKTsKICAJCQkJaWYgKGNvbnN0cmFpbnQtPmtleXMgPT0gTklM KQotLS0gNTIzLDUyOSAtLS0tCiAgCQkJCWlmIChjeHQtPmlzZm9yZWlnbikK ICAJCQkJCWVyZXBvcnQoRVJST1IsCiAgCQkJCQkJCShlcnJjb2RlKEVSUkNP REVfRkVBVFVSRV9OT1RfU1VQUE9SVEVEKSwKISAJCQkJCWVycm1zZygicHJp bWFyeSBrZXkgb3IgdW5pcXVlIGNvbnN0cmFpbnRzIGFyZSBub3Qgc3VwcG9y dGVkIG9uIGZvcmVpZ24gdGFibGVzIiksCiAgCQkJCQkJCSBwYXJzZXJfZXJy cG9zaXRpb24oY3h0LT5wc3RhdGUsCiAgCQkJCQkJCQkJCQkJY29uc3RyYWlu dC0+bG9jYXRpb24pKSk7CiAgCQkJCWlmIChjb25zdHJhaW50LT5rZXlzID09 IE5JTCkKKioqKioqKioqKioqKioqCioqKiA1NDYsNTUyICoqKiogdHJhbnNm b3JtQ29sdW1uRGVmaW5pdGlvbihDcmVhdGVTdG10Q29udGV4dCAqY3h0LCBD b2x1bW5EZWYgKmNvbHVtbikKICAJCQkJaWYgKGN4dC0+aXNmb3JlaWduKQog IAkJCQkJZXJlcG9ydChFUlJPUiwKICAJCQkJCQkJKGVycmNvZGUoRVJSQ09E RV9GRUFUVVJFX05PVF9TVVBQT1JURUQpLAohIAkJCQkJZXJybXNnKCJjb25z dHJhaW50cyBhcmUgbm90IHN1cHBvcnRlZCBvbiBmb3JlaWduIHRhYmxlcyIp LAogIAkJCQkJCQkgcGFyc2VyX2VycnBvc2l0aW9uKGN4dC0+cHN0YXRlLAog IAkJCQkJCQkJCQkJCWNvbnN0cmFpbnQtPmxvY2F0aW9uKSkpOwogIAotLS0g NTQwLDU0NiAtLS0tCiAgCQkJCWlmIChjeHQtPmlzZm9yZWlnbikKICAJCQkJ CWVyZXBvcnQoRVJST1IsCiAgCQkJCQkJCShlcnJjb2RlKEVSUkNPREVfRkVB VFVSRV9OT1RfU1VQUE9SVEVEKSwKISAJCQkJCWVycm1zZygiZm9yZWlnbiBr ZXkgY29uc3RyYWludHMgYXJlIG5vdCBzdXBwb3J0ZWQgb24gZm9yZWlnbiB0 YWJsZXMiKSwKICAJCQkJCQkJIHBhcnNlcl9lcnJwb3NpdGlvbihjeHQtPnBz dGF0ZSwKICAJCQkJCQkJCQkJCQljb25zdHJhaW50LT5sb2NhdGlvbikpKTsK ICAKKioqKioqKioqKioqKioqCioqKiA2MDUsNjE0ICoqKiogdHJhbnNmb3Jt Q29sdW1uRGVmaW5pdGlvbihDcmVhdGVTdG10Q29udGV4dCAqY3h0LCBDb2x1 bW5EZWYgKmNvbHVtbikKICBzdGF0aWMgdm9pZAogIHRyYW5zZm9ybVRhYmxl Q29uc3RyYWludChDcmVhdGVTdG10Q29udGV4dCAqY3h0LCBDb25zdHJhaW50 ICpjb25zdHJhaW50KQogIHsKISAJaWYgKGN4dC0+aXNmb3JlaWduKQogIAkJ ZXJlcG9ydChFUlJPUiwKICAJCQkJKGVycmNvZGUoRVJSQ09ERV9GRUFUVVJF X05PVF9TVVBQT1JURUQpLAohIAkJCQkgZXJybXNnKCJjb25zdHJhaW50cyBh cmUgbm90IHN1cHBvcnRlZCBvbiBmb3JlaWduIHRhYmxlcyIpLAogIAkJCQkg cGFyc2VyX2VycnBvc2l0aW9uKGN4dC0+cHN0YXRlLAogIAkJCQkJCQkJCWNv bnN0cmFpbnQtPmxvY2F0aW9uKSkpOwogIAotLS0gNTk5LDYxMiAtLS0tCiAg c3RhdGljIHZvaWQKICB0cmFuc2Zvcm1UYWJsZUNvbnN0cmFpbnQoQ3JlYXRl U3RtdENvbnRleHQgKmN4dCwgQ29uc3RyYWludCAqY29uc3RyYWludCkKICB7 CiEgCWlmIChjeHQtPmlzZm9yZWlnbiAmJgohIAkJKGNvbnN0cmFpbnQtPmNv bnR5cGUgPT0gQ09OU1RSX1BSSU1BUlkgfHwKISAJCSBjb25zdHJhaW50LT5j b250eXBlID09IENPTlNUUl9VTklRVUUgfHwKISAJCSBjb25zdHJhaW50LT5j b250eXBlID09IENPTlNUUl9FWENMVVNJT04gfHwKISAJCSBjb25zdHJhaW50 LT5jb250eXBlID09IENPTlNUUl9GT1JFSUdOKSkKICAJCWVyZXBvcnQoRVJS T1IsCiAgCQkJCShlcnJjb2RlKEVSUkNPREVfRkVBVFVSRV9OT1RfU1VQUE9S VEVEKSwKISAJCQkJIGVycm1zZygicHJpbWFyeSBrZXksIHVuaXF1ZSwgZXhj bHVzaW9uLCBvciBmb3JlaWduIGtleSBjb25zdHJhaW50cyBhcmUgbm90IHN1 cHBvcnRlZCBvbiBmb3JlaWduIHRhYmxlcyIpLAogIAkJCQkgcGFyc2VyX2Vy cnBvc2l0aW9uKGN4dC0+cHN0YXRlLAogIAkJCQkJCQkJCWNvbnN0cmFpbnQt PmxvY2F0aW9uKSkpOwogIAoqKiogYS9zcmMvaW5jbHVkZS9jb21tYW5kcy92 YWN1dW0uaAotLS0gYi9zcmMvaW5jbHVkZS9jb21tYW5kcy92YWN1dW0uaAoq KioqKioqKioqKioqKioKKioqIDE0MCwxNDUgKioqKiBleHRlcm4gaW50CXZh Y3V1bV9tdWx0aXhhY3RfZnJlZXplX21pbl9hZ2U7Ci0tLSAxNDAsMTU0IC0t LS0KICBleHRlcm4gaW50CXZhY3V1bV9tdWx0aXhhY3RfZnJlZXplX3RhYmxl X2FnZTsKICAKICAKKyAvKiBQb3NzaWJsZSBtb2RlcyBmb3IgdmFjdXVtKCkg Ki8KKyB0eXBlZGVmIGVudW0KKyB7CisgCVZBQ19NT0RFX0FMTCwJCQkJLyog VmFjdXVtL2FuYWx5emUgYWxsIHJlbGF0aW9ucyAqLworIAlWQUNfTU9ERV9T SU5HTEUsCQkJLyogVmFjdXVtL2FuYWx5emUgYSBzcGVjaWZpYyByZWxhdGlv biAqLworIAlWQUNfTU9ERV9BVVRPVkFDVVVNCQkJLyogQXV0b3ZhY3V1bSB3 b3JrZXIgKi8KKyB9IFZhY3V1bU1vZGU7CisgCisgCiAgLyogaW4gY29tbWFu ZHMvdmFjdXVtLmMgKi8KICBleHRlcm4gdm9pZCB2YWN1dW0oVmFjdXVtU3Rt dCAqdmFjc3RtdCwgT2lkIHJlbGlkLCBib29sIGRvX3RvYXN0LAogIAkgICBC dWZmZXJBY2Nlc3NTdHJhdGVneSBic3RyYXRlZ3ksIGJvb2wgZm9yX3dyYXBh cm91bmQsIGJvb2wgaXNUb3BMZXZlbCk7CioqKioqKioqKioqKioqKgoqKiog MTc0LDE4MCAqKioqIGV4dGVybiB2b2lkIGxhenlfdmFjdXVtX3JlbChSZWxh dGlvbiBvbmVyZWwsIFZhY3V1bVN0bXQgKnZhY3N0bXQsCiAgCQkJCUJ1ZmZl ckFjY2Vzc1N0cmF0ZWd5IGJzdHJhdGVneSk7CiAgCiAgLyogaW4gY29tbWFu ZHMvYW5hbHl6ZS5jICovCiEgZXh0ZXJuIHZvaWQgYW5hbHl6ZV9yZWwoT2lk IHJlbGlkLCBWYWN1dW1TdG10ICp2YWNzdG10LAogIAkJCUJ1ZmZlckFjY2Vz c1N0cmF0ZWd5IGJzdHJhdGVneSk7CiAgZXh0ZXJuIGJvb2wgc3RkX3R5cGFu YWx5emUoVmFjQXR0clN0YXRzICpzdGF0cyk7CiAgZXh0ZXJuIGRvdWJsZSBh bmxfcmFuZG9tX2ZyYWN0KHZvaWQpOwotLS0gMTgzLDE5MSAtLS0tCiAgCQkJ CUJ1ZmZlckFjY2Vzc1N0cmF0ZWd5IGJzdHJhdGVneSk7CiAgCiAgLyogaW4g Y29tbWFuZHMvYW5hbHl6ZS5jICovCiEgZXh0ZXJuIHZvaWQgYW5hbHl6ZV9y ZWwoT2lkIHJlbGlkLAohIAkJCVZhY3V1bVN0bXQgKnZhY3N0bXQsCiEgCQkJ VmFjdXVtTW9kZSB2YWNtb2RlLAogIAkJCUJ1ZmZlckFjY2Vzc1N0cmF0ZWd5 IGJzdHJhdGVneSk7CiAgZXh0ZXJuIGJvb2wgc3RkX3R5cGFuYWx5emUoVmFj QXR0clN0YXRzICpzdGF0cyk7CiAgZXh0ZXJuIGRvdWJsZSBhbmxfcmFuZG9t X2ZyYWN0KHZvaWQpOwoqKiogYS9zcmMvaW5jbHVkZS9mb3JlaWduL2Zkd2Fw aS5oCi0tLSBiL3NyYy9pbmNsdWRlL2ZvcmVpZ24vZmR3YXBpLmgKKioqKioq KioqKioqKioqCioqKiAzMSwzNiAqKioqIHR5cGVkZWYgdm9pZCAoKkdldEZv cmVpZ25QYXRoc19mdW5jdGlvbikgKFBsYW5uZXJJbmZvICpyb290LAotLS0g MzEsNDIgLS0tLQogIAkJCQkJCQkJCQkJCQkgIFJlbE9wdEluZm8gKmJhc2Vy ZWwsCiAgCQkJCQkJCQkJCQkJCSAgT2lkIGZvcmVpZ250YWJsZWlkKTsKICAK KyB0eXBlZGVmIEZvcmVpZ25QYXRoICooKlJlcGFyYW1ldGVyaXplRm9yZWln blBhdGhfZnVuY3Rpb24pIChQbGFubmVySW5mbyAqcm9vdCwKKyAJCQkJCQkJ CQkJCQkJCSBSZWxPcHRJbmZvICpiYXNlcmVsLAorIAkJCQkJCQkJCQkJCQkJ ICBPaWQgZm9yZWlnbnRhYmxlaWQsCisgCQkJCQkJCQkJCQkJCQkJRm9yZWln blBhdGggKnBhdGgsCisgCQkJCQkJCQkJCQkJCSAgUmVsaWRzIHJlcXVpcmVk X291dGVyKTsKKyAKICB0eXBlZGVmIEZvcmVpZ25TY2FuICooKkdldEZvcmVp Z25QbGFuX2Z1bmN0aW9uKSAoUGxhbm5lckluZm8gKnJvb3QsCiAgCQkJCQkJ CQkJCQkJCQkgUmVsT3B0SW5mbyAqYmFzZXJlbCwKICAJCQkJCQkJCQkJCQkJ CSAgT2lkIGZvcmVpZ250YWJsZWlkLAoqKioqKioqKioqKioqKioKKioqIDEx NywxMjIgKioqKiB0eXBlZGVmIHN0cnVjdCBGZHdSb3V0aW5lCi0tLSAxMjMs MTI5IC0tLS0KICAJLyogRnVuY3Rpb25zIGZvciBzY2FubmluZyBmb3JlaWdu IHRhYmxlcyAqLwogIAlHZXRGb3JlaWduUmVsU2l6ZV9mdW5jdGlvbiBHZXRG b3JlaWduUmVsU2l6ZTsKICAJR2V0Rm9yZWlnblBhdGhzX2Z1bmN0aW9uIEdl dEZvcmVpZ25QYXRoczsKKyAJUmVwYXJhbWV0ZXJpemVGb3JlaWduUGF0aF9m dW5jdGlvbiBSZXBhcmFtZXRlcml6ZUZvcmVpZ25QYXRoOwogIAlHZXRGb3Jl aWduUGxhbl9mdW5jdGlvbiBHZXRGb3JlaWduUGxhbjsKICAJQmVnaW5Gb3Jl aWduU2Nhbl9mdW5jdGlvbiBCZWdpbkZvcmVpZ25TY2FuOwogIAlJdGVyYXRl Rm9yZWlnblNjYW5fZnVuY3Rpb24gSXRlcmF0ZUZvcmVpZ25TY2FuOwoqKiog YS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2ZvcmVpZ25fZGF0YS5vdXQK LS0tIGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9mb3JlaWduX2RhdGEu b3V0CioqKioqKioqKioqKioqKgoqKiogNzUwLDc2NSAqKioqIENSRUFURSBU QUJMRSB1c2VfZnQxX2NvbHVtbl90eXBlICh4IGZ0MSk7CiAgQUxURVIgRk9S RUlHTiBUQUJMRSBmdDEgQUxURVIgQ09MVU1OIGM4IFNFVCBEQVRBIFRZUEUg aW50ZWdlcjsJLS0gRVJST1IKICBFUlJPUjogIGNhbm5vdCBhbHRlciBmb3Jl aWduIHRhYmxlICJmdDEiIGJlY2F1c2UgY29sdW1uICJ1c2VfZnQxX2NvbHVt bl90eXBlLngiIHVzZXMgaXRzIHJvdyB0eXBlCiAgRFJPUCBUQUJMRSB1c2Vf ZnQxX2NvbHVtbl90eXBlOwohIEFMVEVSIEZPUkVJR04gVEFCTEUgZnQxIEFE RCBDT05TVFJBSU5UIGZ0MV9jOV9jaGVjayBDSEVDSyAoYzkgPCAwKTsgLS0g RVJST1IKISBFUlJPUjogIGNvbnN0cmFpbnRzIGFyZSBub3Qgc3VwcG9ydGVk IG9uIGZvcmVpZ24gdGFibGVzCiEgTElORSAxOiBBTFRFUiBGT1JFSUdOIFRB QkxFIGZ0MSBBREQgQ09OU1RSQUlOVCBmdDFfYzlfY2hlY2sgQ0hFQ0sgKGMu Li4KISAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeCiAg QUxURVIgRk9SRUlHTiBUQUJMRSBmdDEgRFJPUCBDT05TVFJBSU5UIG5vX2Nv bnN0OyAgICAgICAgICAgICAgIC0tIEVSUk9SCiEgRVJST1I6ICAiZnQxIiBp cyBub3QgYSB0YWJsZQogIEFMVEVSIEZPUkVJR04gVEFCTEUgZnQxIERST1Ag Q09OU1RSQUlOVCBJRiBFWElTVFMgbm9fY29uc3Q7CiEgRVJST1I6ICAiZnQx IiBpcyBub3QgYSB0YWJsZQohIEFMVEVSIEZPUkVJR04gVEFCTEUgZnQxIERS T1AgQ09OU1RSQUlOVCBmdDFfYzFfY2hlY2s7CiEgRVJST1I6ICAiZnQxIiBp cyBub3QgYSB0YWJsZQogIEFMVEVSIEZPUkVJR04gVEFCTEUgZnQxIFNFVCBX SVRIIE9JRFM7ICAgICAgICAgICAgICAgICAgICAgICAgICAtLSBFUlJPUgog IEVSUk9SOiAgImZ0MSIgaXMgbm90IGEgdGFibGUKICBBTFRFUiBGT1JFSUdO IFRBQkxFIGZ0MSBPV05FUiBUTyByZWdyZXNzX3Rlc3Rfcm9sZTsKLS0tIDc1 MCw3NjEgLS0tLQogIEFMVEVSIEZPUkVJR04gVEFCTEUgZnQxIEFMVEVSIENP TFVNTiBjOCBTRVQgREFUQSBUWVBFIGludGVnZXI7CS0tIEVSUk9SCiAgRVJS T1I6ICBjYW5ub3QgYWx0ZXIgZm9yZWlnbiB0YWJsZSAiZnQxIiBiZWNhdXNl IGNvbHVtbiAidXNlX2Z0MV9jb2x1bW5fdHlwZS54IiB1c2VzIGl0cyByb3cg dHlwZQogIERST1AgVEFCTEUgdXNlX2Z0MV9jb2x1bW5fdHlwZTsKISBBTFRF UiBGT1JFSUdOIFRBQkxFIGZ0MSBBREQgQ09OU1RSQUlOVCBmdDFfYzlfY2hl Y2sgQ0hFQ0sgKGM5IDwgMCk7CiAgQUxURVIgRk9SRUlHTiBUQUJMRSBmdDEg RFJPUCBDT05TVFJBSU5UIG5vX2NvbnN0OyAgICAgICAgICAgICAgIC0tIEVS Uk9SCiEgRVJST1I6ICBjb25zdHJhaW50ICJub19jb25zdCIgb2YgcmVsYXRp b24gImZ0MSIgZG9lcyBub3QgZXhpc3QKICBBTFRFUiBGT1JFSUdOIFRBQkxF IGZ0MSBEUk9QIENPTlNUUkFJTlQgSUYgRVhJU1RTIG5vX2NvbnN0OwohIE5P VElDRTogIGNvbnN0cmFpbnQgIm5vX2NvbnN0IiBvZiByZWxhdGlvbiAiZnQx IiBkb2VzIG5vdCBleGlzdCwgc2tpcHBpbmcKISBBTFRFUiBGT1JFSUdOIFRB QkxFIGZ0MSBEUk9QIENPTlNUUkFJTlQgZnQxX2M5X2NoZWNrOwogIEFMVEVS IEZPUkVJR04gVEFCTEUgZnQxIFNFVCBXSVRIIE9JRFM7ICAgICAgICAgICAg ICAgICAgICAgICAgICAtLSBFUlJPUgogIEVSUk9SOiAgImZ0MSIgaXMgbm90 IGEgdGFibGUKICBBTFRFUiBGT1JFSUdOIFRBQkxFIGZ0MSBPV05FUiBUTyBy ZWdyZXNzX3Rlc3Rfcm9sZTsKKioqIGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwv Zm9yZWlnbl9kYXRhLnNxbAotLS0gYi9zcmMvdGVzdC9yZWdyZXNzL3NxbC9m b3JlaWduX2RhdGEuc3FsCioqKioqKioqKioqKioqKgoqKiogMzE0LDMyMyAq KioqIEFMVEVSIEZPUkVJR04gVEFCTEUgZnQxIEFMVEVSIENPTFVNTiBjOCBT RVQgU1RBVElTVElDUyAtMTsKICBDUkVBVEUgVEFCTEUgdXNlX2Z0MV9jb2x1 bW5fdHlwZSAoeCBmdDEpOwogIEFMVEVSIEZPUkVJR04gVEFCTEUgZnQxIEFM VEVSIENPTFVNTiBjOCBTRVQgREFUQSBUWVBFIGludGVnZXI7CS0tIEVSUk9S CiAgRFJPUCBUQUJMRSB1c2VfZnQxX2NvbHVtbl90eXBlOwohIEFMVEVSIEZP UkVJR04gVEFCTEUgZnQxIEFERCBDT05TVFJBSU5UIGZ0MV9jOV9jaGVjayBD SEVDSyAoYzkgPCAwKTsgLS0gRVJST1IKICBBTFRFUiBGT1JFSUdOIFRBQkxF IGZ0MSBEUk9QIENPTlNUUkFJTlQgbm9fY29uc3Q7ICAgICAgICAgICAgICAg LS0gRVJST1IKICBBTFRFUiBGT1JFSUdOIFRBQkxFIGZ0MSBEUk9QIENPTlNU UkFJTlQgSUYgRVhJU1RTIG5vX2NvbnN0OwohIEFMVEVSIEZPUkVJR04gVEFC TEUgZnQxIERST1AgQ09OU1RSQUlOVCBmdDFfYzFfY2hlY2s7CiAgQUxURVIg Rk9SRUlHTiBUQUJMRSBmdDEgU0VUIFdJVEggT0lEUzsgICAgICAgICAgICAg ICAgICAgICAgICAgIC0tIEVSUk9SCiAgQUxURVIgRk9SRUlHTiBUQUJMRSBm dDEgT1dORVIgVE8gcmVncmVzc190ZXN0X3JvbGU7CiAgQUxURVIgRk9SRUlH TiBUQUJMRSBmdDEgT1BUSU9OUyAoRFJPUCBkZWxpbWl0ZXIsIFNFVCBxdW90 ZSAnficsIEFERCBlc2NhcGUgJ0AnKTsKLS0tIDMxNCwzMjMgLS0tLQogIENS RUFURSBUQUJMRSB1c2VfZnQxX2NvbHVtbl90eXBlICh4IGZ0MSk7CiAgQUxU RVIgRk9SRUlHTiBUQUJMRSBmdDEgQUxURVIgQ09MVU1OIGM4IFNFVCBEQVRB IFRZUEUgaW50ZWdlcjsJLS0gRVJST1IKICBEUk9QIFRBQkxFIHVzZV9mdDFf Y29sdW1uX3R5cGU7CiEgQUxURVIgRk9SRUlHTiBUQUJMRSBmdDEgQUREIENP TlNUUkFJTlQgZnQxX2M5X2NoZWNrIENIRUNLIChjOSA8IDApOwogIEFMVEVS IEZPUkVJR04gVEFCTEUgZnQxIERST1AgQ09OU1RSQUlOVCBub19jb25zdDsg ICAgICAgICAgICAgICAtLSBFUlJPUgogIEFMVEVSIEZPUkVJR04gVEFCTEUg ZnQxIERST1AgQ09OU1RSQUlOVCBJRiBFWElTVFMgbm9fY29uc3Q7CiEgQUxU RVIgRk9SRUlHTiBUQUJMRSBmdDEgRFJPUCBDT05TVFJBSU5UIGZ0MV9jOV9j aGVjazsKICBBTFRFUiBGT1JFSUdOIFRBQkxFIGZ0MSBTRVQgV0lUSCBPSURT OyAgICAgICAgICAgICAgICAgICAgICAgICAgLS0gRVJST1IKICBBTFRFUiBG T1JFSUdOIFRBQkxFIGZ0MSBPV05FUiBUTyByZWdyZXNzX3Rlc3Rfcm9sZTsK ICBBTFRFUiBGT1JFSUdOIFRBQkxFIGZ0MSBPUFRJT05TIChEUk9QIGRlbGlt aXRlciwgU0VUIHF1b3RlICd+JywgQUREIGVzY2FwZSAnQCcpOwo= --------------000007070100040102030703 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 --------------000007070100040102030703--