Received: from magus.postgresql.org (magus.postgresql.org [87.238.57.229]) by mail.postgresql.org (Postfix) with ESMTP id 024BB1365922 for ; Thu, 5 Apr 2012 23:41:26 -0300 (ADT) Received: from mail-pb0-f46.google.com ([209.85.160.46]) by magus.postgresql.org with esmtp (Exim 4.72) (envelope-from ) id 1SFz72-0004Rx-2R for pgsql-hackers@postgresql.org; Fri, 06 Apr 2012 02:41:25 +0000 Received: by pbcun15 with SMTP id un15so2186948pbc.19 for ; Thu, 05 Apr 2012 19:41:06 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=message-id:date:from:user-agent:mime-version:to:cc:subject :references:in-reply-to:content-type; bh=O3FwPsZSgLeMclBIpKvrOU368BZWnwalgC7nCb0G2NQ=; b=H2cIc9M1OfXc6bCCHldKDmtAhbCCVSdXAM2GRT+9a8MSYTlDGKzJUIiwBkWo6QgQ17 Pv8Yaxbc0W8YWnzpA8Y6ICCuLQYmgsrJrSkHAg7CH0YiLG3QkzhkX3r829WJjrCIqLup Pw1fJqVBgSPS4rGkJsWs0lMGKyAGlnKwasmR1KOzIoJ5uDILXHvk8oqiH11P/ilXdbfw svmS2lMucm4zXNWZAIby0SBPOmwZh+oo2QhsWW/XdgLdlAJD8bl6/XnaCWyV6Du2LSY1 f85XgQGlIPgansfqdYksEKUY+XKdFysHeW/dPlXvy3j7vtObOHUKzn7VnhjYH3mmvQra oHmw== Received: by 10.68.194.198 with SMTP id hy6mr12128761pbc.0.1333680066303; Thu, 05 Apr 2012 19:41:06 -0700 (PDT) Received: from [192.168.1.99] ([61.199.203.168]) by mx.google.com with ESMTPS id l1sm4892373pbe.54.2012.04.05.19.41.02 (version=SSLv3 cipher=OTHER); Thu, 05 Apr 2012 19:41:04 -0700 (PDT) Message-ID: <4F7E57D9.3000807@gmail.com> Date: Fri, 06 Apr 2012 11:41:29 +0900 From: Shigeru HANADA User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:11.0) Gecko/20120327 Thunderbird/11.0.1 MIME-Version: 1.0 To: Etsuro Fujita CC: pgsql-hackers@postgresql.org Subject: Re: WIP: Collecting statistics on CSV file data References: <4E6DE18B.4010505@lab.ntt.co.jp> <4E7861C1.2000607@gmail.com> <4E8EC1D8.3080700@lab.ntt.co.jp> <4E9C6573.8050507@gmail.com> <4E9FF04B.3050504@lab.ntt.co.jp> <4EB7C07A.5030205@gmail.com> <4EC60883.2050905@lab.ntt.co.jp> <4EC648CA.5050904@gmail.com> <4EC9CBC5.3070500@lab.ntt.co.jp> <4EE1FC38.5080707@lab.ntt.co.jp> <4EE5D862.1080809@gmail.com> <4EE74C5F.3000309@lab.ntt.co.jp> <4F7D8BBF.4050004@gmail.com> In-Reply-To: <4F7D8BBF.4050004@gmail.com> Content-Type: multipart/mixed; boundary="------------070704020405000006040502" X-Pg-Spam-Score: -2.7 (--) X-Archive-Number: 201204/296 X-Sequence-Number: 206099 This is a multi-part message in MIME format. --------------070704020405000006040502 Content-Type: text/plain; charset=ISO-2022-JP Content-Transfer-Encoding: 7bit (2012/04/05 21:10), Shigeru HANADA wrote: > file_fdw > ======== > This patch contains a use case of new handler function in > contrib/file_fdw. Since file_fdw reads data from a flat file, > fileAnalyzeForeignTable uses similar algorithm to ordinary tables; it > samples first N rows first, and replaces them randomly with subsequent > rows. Also file_fdw updates pg_class.relpages by calculating number of > pages from size of the data file. > > To allow FDWs to implement sampling argorighm like this, several > functions are exported from analyze.c, e.g. random_fract, > init_selection_state, and get_next_S. Just after my post, Fujita-san posted another v7 patch[1], so I merged v7 patches into v8 patch. [1] http://archives.postgresql.org/pgsql-hackers/2012-04/msg00212.php Changes taken from Fujita-san's patch ===================================== * Remove reporting validrows and deadrows at the end of acquire_sample_rows of file_fdw. Thus, it doesn't validate NOT NULL constraints any more. * Improve get_rel_size of file_fdw, which is used in GetForeignRelSize, to estimate current # of tuples of the foreign table from these values. - # of pages/tuples which are updated by last ANALYZE - current file size Additional Changes ================== * Fix memory leak in acquire_sample_rows which caused by calling NextCopyFrom repeatedly in one long-span memory context. I add per-record temporary context and it's used during processing a record. Main context is used to create heap tuples from sampled records, because sample tuples must be valid after the function ends. * Some cosmetic changes for document, e.g. remove line-break inside tagged elements. * Some cosmetic changes to make patch more readable by minimizing difference from master branch. Changes did *not* merged ======================== * Fujita-san moved document of AnalyzeForeignTable to the section "Foreign Data Wrapper Helper Functions" from "Foreign Data Wrapper Callback Routines". But I think analyze handler is one of callback functions, though it's optional. Please find attached a patch. Regards, -- Shigeru HANADA --------------070704020405000006040502 Content-Type: text/plain; charset=Shift_JIS; name="postgresql-analyze-v8.patch" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="postgresql-analyze-v8.patch" ZGlmZiAtLWdpdCBhL2NvbnRyaWIvZmlsZV9mZHcvZmlsZV9mZHcuYyBiL2NvbnRyaWIvZmls ZV9mZHcvZmlsZV9mZHcuYwppbmRleCBlODkwNzcwLi5hYjhjZGE1IDEwMDY0NAoqKiogYS9j b250cmliL2ZpbGVfZmR3L2ZpbGVfZmR3LmMKLS0tIGIvY29udHJpYi9maWxlX2Zkdy9maWxl X2Zkdy5jCioqKioqKioqKioqKioqKgoqKiogMjAsMjUgKioqKgotLS0gMjAsMjYgLS0tLQog ICNpbmNsdWRlICJjb21tYW5kcy9jb3B5LmgiCiAgI2luY2x1ZGUgImNvbW1hbmRzL2RlZnJl bS5oIgogICNpbmNsdWRlICJjb21tYW5kcy9leHBsYWluLmgiCisgI2luY2x1ZGUgImNvbW1h bmRzL3ZhY3V1bS5oIgogICNpbmNsdWRlICJmb3JlaWduL2Zkd2FwaS5oIgogICNpbmNsdWRl ICJmb3JlaWduL2ZvcmVpZ24uaCIKICAjaW5jbHVkZSAibWlzY2FkbWluLmgiCioqKioqKioq KioqKioqKgoqKiogMjgsMzMgKioqKgotLS0gMjksMzUgLS0tLQogICNpbmNsdWRlICJvcHRp bWl6ZXIvcGF0aG5vZGUuaCIKICAjaW5jbHVkZSAib3B0aW1pemVyL3BsYW5tYWluLmgiCiAg I2luY2x1ZGUgIm9wdGltaXplci9yZXN0cmljdGluZm8uaCIKKyAjaW5jbHVkZSAidXRpbHMv bWVtdXRpbHMuaCIKICAjaW5jbHVkZSAidXRpbHMvcmVsLmgiCiAgCiAgUEdfTU9EVUxFX01B R0lDOwoqKioqKioqKioqKioqKiogc3RhdGljIHZvaWQgZmlsZUJlZ2luRm9yZWlnblNjYW4o Rm9yZWlnbgoqKiogMTIzLDEyOCAqKioqCi0tLSAxMjUsMTMzIC0tLS0KICBzdGF0aWMgVHVw bGVUYWJsZVNsb3QgKmZpbGVJdGVyYXRlRm9yZWlnblNjYW4oRm9yZWlnblNjYW5TdGF0ZSAq bm9kZSk7CiAgc3RhdGljIHZvaWQgZmlsZVJlU2NhbkZvcmVpZ25TY2FuKEZvcmVpZ25TY2Fu U3RhdGUgKm5vZGUpOwogIHN0YXRpYyB2b2lkIGZpbGVFbmRGb3JlaWduU2NhbihGb3JlaWdu U2NhblN0YXRlICpub2RlKTsKKyBzdGF0aWMgdm9pZCBmaWxlQW5hbHl6ZUZvcmVpZ25UYWJs ZShSZWxhdGlvbiBvbmVyZWwsCisgCQkJCQlWYWN1dW1TdG10ICp2YWNzdG10LAorIAkJCQkJ aW50IGVsZXZlbCk7CiAgCiAgLyoKICAgKiBIZWxwZXIgZnVuY3Rpb25zCioqKioqKioqKioq KioqKiBzdGF0aWMgdm9pZCBlc3RpbWF0ZV9zaXplKFBsYW5uZXJJbmZvICpyCioqKiAxMzYs MTQyICoqKioKICBzdGF0aWMgdm9pZCBlc3RpbWF0ZV9jb3N0cyhQbGFubmVySW5mbyAqcm9v dCwgUmVsT3B0SW5mbyAqYmFzZXJlbCwKICAJCQkgICBGaWxlRmR3UGxhblN0YXRlICpmZHdf cHJpdmF0ZSwKICAJCQkgICBDb3N0ICpzdGFydHVwX2Nvc3QsIENvc3QgKnRvdGFsX2Nvc3Qp OwohIAogIAogIC8qCiAgICogRm9yZWlnbi1kYXRhIHdyYXBwZXIgaGFuZGxlciBmdW5jdGlv bjogcmV0dXJuIGEgc3RydWN0IHdpdGggcG9pbnRlcnMKLS0tIDE0MSwxNTAgLS0tLQogIHN0 YXRpYyB2b2lkIGVzdGltYXRlX2Nvc3RzKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZv ICpiYXNlcmVsLAogIAkJCSAgIEZpbGVGZHdQbGFuU3RhdGUgKmZkd19wcml2YXRlLAogIAkJ CSAgIENvc3QgKnN0YXJ0dXBfY29zdCwgQ29zdCAqdG90YWxfY29zdCk7CiEgc3RhdGljIGlu dAlhY3F1aXJlX3NhbXBsZV9yb3dzKFJlbGF0aW9uIG9uZXJlbCwKISAJCQkgICBIZWFwVHVw bGUgKnJvd3MsIGludCB0YXJncm93cywKISAJCQkgICBkb3VibGUgKnRvdGFscm93cywgZG91 YmxlICp0b3RhbGRlYWRyb3dzLAohIAkJCSAgIEJsb2NrTnVtYmVyICp0b3RhbHBhZ2VzLCBp bnQgZWxldmVsKTsKICAKICAvKgogICAqIEZvcmVpZ24tZGF0YSB3cmFwcGVyIGhhbmRsZXIg ZnVuY3Rpb246IHJldHVybiBhIHN0cnVjdCB3aXRoIHBvaW50ZXJzCioqKioqKioqKioqKioq KiBmaWxlX2Zkd19oYW5kbGVyKFBHX0ZVTkNUSU9OX0FSR1MpCioqKiAxNTUsMTYwICoqKioK LS0tIDE2MywxNjkgLS0tLQogIAlmZHdyb3V0aW5lLT5JdGVyYXRlRm9yZWlnblNjYW4gPSBm aWxlSXRlcmF0ZUZvcmVpZ25TY2FuOwogIAlmZHdyb3V0aW5lLT5SZVNjYW5Gb3JlaWduU2Nh biA9IGZpbGVSZVNjYW5Gb3JlaWduU2NhbjsKICAJZmR3cm91dGluZS0+RW5kRm9yZWlnblNj YW4gPSBmaWxlRW5kRm9yZWlnblNjYW47CisgCWZkd3JvdXRpbmUtPkFuYWx5emVGb3JlaWdu VGFibGUgPSBmaWxlQW5hbHl6ZUZvcmVpZ25UYWJsZTsKICAKICAJUEdfUkVUVVJOX1BPSU5U RVIoZmR3cm91dGluZSk7CiAgfQoqKioqKioqKioqKioqKiogZmlsZVJlU2NhbkZvcmVpZ25T Y2FuKEZvcmVpZ25TY2FuU3RhdGUgKgoqKiogNjQ1LDY1MCAqKioqCi0tLSA2NTQsNjY5IC0t LS0KICB9CiAgCiAgLyoKKyAgKiBmaWxlQW5hbHl6ZUZvcmVpZ25UYWJsZQorICAqCQlBbmFs eXplIGZvcmVpZ24gdGFibGUKKyAgKi8KKyBzdGF0aWMgdm9pZAorIGZpbGVBbmFseXplRm9y ZWlnblRhYmxlKFJlbGF0aW9uIG9uZXJlbCwgVmFjdXVtU3RtdCAqdmFjc3RtdCwgaW50IGVs ZXZlbCkKKyB7CisgCWRvX2FuYWx5emVfcmVsKG9uZXJlbCwgdmFjc3RtdCwgZWxldmVsLCBm YWxzZSwgYWNxdWlyZV9zYW1wbGVfcm93cyk7CisgfQorIAorIC8qCiAgICogRXN0aW1hdGUg c2l6ZSBvZiBhIGZvcmVpZ24gdGFibGUuCiAgICoKICAgKiBUaGUgbWFpbiByZXN1bHQgaXMg cmV0dXJuZWQgaW4gYmFzZXJlbC0+cm93cy4gIFdlIGFsc28gc2V0CioqKioqKioqKioqKioq KiBlc3RpbWF0ZV9zaXplKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJCioqKiA2NTcsNjYz ICoqKioKICB7CiAgCXN0cnVjdCBzdGF0IHN0YXRfYnVmOwogIAlCbG9ja051bWJlciBwYWdl czsKLSAJaW50CQkJdHVwbGVfd2lkdGg7CiAgCWRvdWJsZQkJbnR1cGxlczsKICAJZG91Ymxl CQlucm93czsKICAKLS0tIDY3Niw2ODEgLS0tLQoqKioqKioqKioqKioqKiogZXN0aW1hdGVf c2l6ZShQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SQoqKiogNjc0LDY5MyAqKioqCiAgCXBh Z2VzID0gKHN0YXRfYnVmLnN0X3NpemUgKyAoQkxDS1NaIC0gMSkpIC8gQkxDS1NaOwogIAlp ZiAocGFnZXMgPCAxKQogIAkJcGFnZXMgPSAxOwotIAogIAlmZHdfcHJpdmF0ZS0+cGFnZXMg PSBwYWdlczsKICAKICAJLyoKISAJICogRXN0aW1hdGUgdGhlIG51bWJlciBvZiB0dXBsZXMg aW4gdGhlIGZpbGUuICBXZSBiYWNrIGludG8gdGhpcyBlc3RpbWF0ZQohIAkgKiB1c2luZyB0 aGUgcGxhbm5lcidzIGlkZWEgb2YgdGhlIHJlbGF0aW9uIHdpZHRoOyB3aGljaCBpcyBib2d1 cyBpZiBub3QKISAJICogYWxsIGNvbHVtbnMgYXJlIGJlaW5nIHJlYWQsIG5vdCB0byBtZW50 aW9uIHRoYXQgdGhlIHRleHQgcmVwcmVzZW50YXRpb24KISAJICogb2YgYSByb3cgcHJvYmFi bHkgaXNuJ3QgdGhlIHNhbWUgc2l6ZSBhcyBpdHMgaW50ZXJuYWwgcmVwcmVzZW50YXRpb24u CiEgCSAqIEZJWE1FIGxhdGVyLgogIAkgKi8KISAJdHVwbGVfd2lkdGggPSBNQVhBTElHTihi YXNlcmVsLT53aWR0aCkgKyBNQVhBTElHTihzaXplb2YoSGVhcFR1cGxlSGVhZGVyRGF0YSkp OwogIAohIAludHVwbGVzID0gY2xhbXBfcm93X2VzdCgoZG91YmxlKSBzdGF0X2J1Zi5zdF9z aXplIC8gKGRvdWJsZSkgdHVwbGVfd2lkdGgpOwogIAogIAlmZHdfcHJpdmF0ZS0+bnR1cGxl cyA9IG50dXBsZXM7CiAgCiAgCS8qCi0tLSA2OTIsNzMwIC0tLS0KICAJcGFnZXMgPSAoc3Rh dF9idWYuc3Rfc2l6ZSArIChCTENLU1ogLSAxKSkgLyBCTENLU1o7CiAgCWlmIChwYWdlcyA8 IDEpCiAgCQlwYWdlcyA9IDE7CiAgCWZkd19wcml2YXRlLT5wYWdlcyA9IHBhZ2VzOwogIAog IAkvKgohIAkgKiBJZiB3ZSBoYXZlICMgb2YgcGFnZXMgYW5kICMgb2YgdHVwbGVzIGFzIGxv Y2FsIHN0YXRzLCBjYWxjdWxhdGUgdHVwbGUKISAJICogZGVuc2l0eSBmcm9tIHRoZW0gdG8g ZXN0aW1hdGUgdGhlIGN1cnJlbnQgIyBvZiB0aGUgdHVwbGVzLgohIAkgKgohIAkgKiBPdGhl cndpc2UsIGVzdGltYXRlIGN1cnJlbnQgIyBvZiB0dXBsZXMgZnJvbSBjYWxjdWxhdGVkIHdp ZHRoIG9mIHR1cGxlcwohIAkgKiBhbmQgY3VycmVudCAjIG9mIHBhZ2VzLgogIAkgKi8KISAJ aWYgKGJhc2VyZWwtPnBhZ2VzID4gMCkKISAJewohIAkJZG91YmxlCQlkZW5zaXR5OwogIAoh IAkJZGVuc2l0eSA9IGJhc2VyZWwtPnR1cGxlcyAvIChkb3VibGUpIGJhc2VyZWwtPnBhZ2Vz OwohIAkJbnR1cGxlcyA9IGNsYW1wX3Jvd19lc3QoZGVuc2l0eSAqIChkb3VibGUpIHBhZ2Vz KTsKISAJfQohIAllbHNlCiEgCXsKISAJCWludAkJCXR1cGxlX3dpZHRoOwogIAorIAkJLyoK KyAJCSAqIEVzdGltYXRlIHRoZSBudW1iZXIgb2YgdHVwbGVzIGluIHRoZSBmaWxlLiAgV2Ug YmFjayBpbnRvIHRoaXMKKyAJCSAqIGVzdGltYXRlIHVzaW5nIHRoZSBwbGFubmVyJ3MgaWRl YSBvZiB0aGUgcmVsYXRpb24gd2lkdGg7IHdoaWNoIGlzCisgCQkgKiBib2d1cyBpZiBub3Qg YWxsIGNvbHVtbnMgYXJlIGJlaW5nIHJlYWQsIG5vdCB0byBtZW50aW9uIHRoYXQgdGhlCisg CQkgKiB0ZXh0IHJlcHJlc2VudGF0aW9uIG9mIGEgcm93IHByb2JhYmx5IGlzbid0IHRoZSBz YW1lIHNpemUgYXMgaXRzCisgCQkgKiBpbnRlcm5hbCByZXByZXNlbnRhdGlvbi4gIEZJWE1F IGxhdGVyLgorIAkJICovCisgCQl0dXBsZV93aWR0aCA9IE1BWEFMSUdOKGJhc2VyZWwtPndp ZHRoKSArCisgCQkJCQkgIE1BWEFMSUdOKHNpemVvZihIZWFwVHVwbGVIZWFkZXJEYXRhKSk7 CisgCisgCQludHVwbGVzID0gY2xhbXBfcm93X2VzdCgoZG91YmxlKSBzdGF0X2J1Zi5zdF9z aXplIC8KKyAJCQkJCQkJCShkb3VibGUpIHR1cGxlX3dpZHRoKTsKKyAJfQogIAlmZHdfcHJp dmF0ZS0+bnR1cGxlcyA9IG50dXBsZXM7CiAgCiAgCS8qCioqKioqKioqKioqKioqKiBlc3Rp bWF0ZV9jb3N0cyhQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0CioqKiA3MzYsNzM4ICoqKioK LS0tIDc3Myw5NTIgLS0tLQogIAlydW5fY29zdCArPSBjcHVfcGVyX3R1cGxlICogbnR1cGxl czsKICAJKnRvdGFsX2Nvc3QgPSAqc3RhcnR1cF9jb3N0ICsgcnVuX2Nvc3Q7CiAgfQorIAor IC8qCisgICogYWNxdWlyZV9zYW1wbGVfcm93cyAtLSBhY3F1aXJlIGEgcmFuZG9tIHNhbXBs ZSBvZiByb3dzIGZyb20gdGhlIHRhYmxlCisgICoKKyAgKiBTZWxlY3RlZCByb3dzIGFyZSBy ZXR1cm5lZCBpbiB0aGUgY2FsbGVyLWFsbG9jYXRlZCBhcnJheSByb3dzW10sIHdoaWNoCisg ICogbXVzdCBoYXZlIGF0IGxlYXN0IHRhcmdyb3dzIGVudHJpZXMuCisgICogVGhlIGFjdHVh bCBudW1iZXIgb2Ygcm93cyBzZWxlY3RlZCBpcyByZXR1cm5lZCBhcyB0aGUgZnVuY3Rpb24g cmVzdWx0LgorICAqIFdlIGFsc28gY291bnQgdGhlIHRvdGFsIG51bWJlciBvZiByb3dzIGlu IHRoZSBmaWxlLCBhbmQgcmV0dXJuIGl0IGludG8KKyAgKiAqdG90YWxyb3dzLiAgTm90ZSB0 aGF0ICp0b3RhbGRlYWRyb3dzIGlzIGFsd2F5cyBzZXQgdG8gMC4KKyAgKgorICAqIE5vdGUg dGhhdCB0aGUgcmV0dXJuZWQgbGlzdCBvZiByb3dzIGlzIG5vdCBhbHdheXMgaW4gb3JkZXIg YnkgcGh5c2ljYWwKKyAgKiBwb3NpdGlvbiBpbiB0aGUgZmlsZS4gIFRoZXJlZm9yZSwgY29y cmVsYXRpb24gZXN0aW1hdGVzIGRlcml2ZWQgbGF0ZXIKKyAgKiBtYXkgYmUgbWVhbmluZ2xl c3MsIGJ1dCBpdCdzIE9LIGJlY2F1c2Ugd2UgZG9uJ3QgdXNlIHRoZSBlc3RpbWF0ZXMgZm9y CisgICogbm93LgorICAqLworIHN0YXRpYyBpbnQKKyBhY3F1aXJlX3NhbXBsZV9yb3dzKFJl bGF0aW9uIG9uZXJlbCwgSGVhcFR1cGxlICpyb3dzLCBpbnQgdGFyZ3Jvd3MsCisgCQkJCQlk b3VibGUgKnRvdGFscm93cywgZG91YmxlICp0b3RhbGRlYWRyb3dzLAorIAkJCQkJQmxvY2tO dW1iZXIgKnRvdGFscGFnZXMsIGludCBlbGV2ZWwpCisgeworIAlpbnQJCQludW1yb3dzID0g MDsKKyAJZG91YmxlCQlyb3dzdG9za2lwID0gLTE7IC8qIC0xIG1lYW5zIG5vdCBzZXQgeWV0 ICovCisgCWRvdWJsZQkJcnN0YXRlOworIAlUdXBsZURlc2MJdHVwRGVzYzsKKyAJRGF0dW0J ICAgKnZhbHVlczsKKyAJYm9vbAkgICAqbnVsbHM7CisgCWJvb2wJCWZvdW5kOworIAljaGFy CSAgICpmaWxlbmFtZTsKKyAJc3RydWN0IHN0YXQJc3RhdF9idWY7CisgCUxpc3QJICAgKm9w dGlvbnM7CisgCUNvcHlTdGF0ZQljc3RhdGU7CisgCUVycm9yQ29udGV4dENhbGxiYWNrIGVy cmNvbnRleHQ7CisgCU1lbW9yeUNvbnRleHQgb2xkY29udGV4dCA9IEN1cnJlbnRNZW1vcnlD b250ZXh0OworIAlNZW1vcnlDb250ZXh0IHR1cGNvbnRleHQ7CisgCisgCUFzc2VydChvbmVy ZWwpOworIAlBc3NlcnQodGFyZ3Jvd3MgPiAwKTsKKyAKKyAJLyoKKyAJICogVXNlIHBlci10 dXBsZSBtZW1vcnkgY29udGV4dCB0byBwcmV2ZW50IGxlYWsgb2YgbWVtb3J5IHVzZWQgdG8g cmVhZCByb3dzCisgCSAqIGZyb20gdGhlIGZpbGUgd2l0aCBDb3B5IHJvdXRpbmVzLgorIAkg Ki8KKyAJdHVwY29udGV4dCA9IEFsbG9jU2V0Q29udGV4dENyZWF0ZShDdXJyZW50TWVtb3J5 Q29udGV4dCwKKyAJCQkJCQkJCQkgICAiZmlsZV9mZHcgdGVtcG9yYXJ5IGNvbnRleHQiLAor IAkJCQkJCQkJCSAgIEFMTE9DU0VUX0RFRkFVTFRfTUlOU0laRSwKKyAJCQkJCQkJCQkgICBB TExPQ1NFVF9ERUZBVUxUX0lOSVRTSVpFLAorIAkJCQkJCQkJCSAgIEFMTE9DU0VUX0RFRkFV TFRfTUFYU0laRSk7CisgCisgCXR1cERlc2MgPSBSZWxhdGlvbkdldERlc2NyKG9uZXJlbCk7 CisgCXZhbHVlcyA9IChEYXR1bSAqKSBwYWxsb2ModHVwRGVzYy0+bmF0dHMgKiBzaXplb2Yo RGF0dW0pKTsKKyAJbnVsbHMgPSAoYm9vbCAqKSBwYWxsb2ModHVwRGVzYy0+bmF0dHMgKiBz aXplb2YoYm9vbCkpOworIAorIAkvKiBGZXRjaCBvcHRpb25zIG9mIGZvcmVpZ24gdGFibGUg Ki8KKyAJZmlsZUdldE9wdGlvbnMoUmVsYXRpb25HZXRSZWxpZChvbmVyZWwpLCAmZmlsZW5h bWUsICZvcHRpb25zKTsKKyAKKyAJLyoKKyAJICogR2V0IHNpemUgb2YgdGhlIGZpbGUuCisg CSAqLworIAlpZiAoc3RhdChmaWxlbmFtZSwgJnN0YXRfYnVmKSA8IDApCisgCQllcmVwb3J0 KEVSUk9SLAorIAkJCQkoZXJyY29kZV9mb3JfZmlsZV9hY2Nlc3MoKSwKKyAJCQkJIGVycm1z ZygiY291bGQgbm90IHN0YXQgZmlsZSBcIiVzXCI6ICVtIiwKKyAJCQkJCQlmaWxlbmFtZSkp KTsKKyAKKyAJLyoKKyAJICogQ29udmVydCBzaXplIHRvIHBhZ2VzIGZvciB1c2UgaW4gSS9P IGNvc3QgZXN0aW1hdGUuCisgCSAqLworIAkqdG90YWxwYWdlcyA9IChzdGF0X2J1Zi5zdF9z aXplICsgKEJMQ0tTWiAtIDEpKSAvIEJMQ0tTWjsKKyAJaWYgKCp0b3RhbHBhZ2VzIDwgMSkK KyAJCSp0b3RhbHBhZ2VzID0gMTsKKyAKKyAJLyoKKyAJICogQ3JlYXRlIENvcHlTdGF0ZSBm cm9tIEZEVyBvcHRpb25zLiAgV2UgYWx3YXlzIGFjcXVpcmUgYWxsIGNvbHVtbnMsIHNvCisg CSAqIGFzIHRvIG1hdGNoIHRoZSBleHBlY3RlZCBTY2FuVHVwbGVTbG90IHNpZ25hdHVyZS4K KyAJICovCisgCWNzdGF0ZSA9IEJlZ2luQ29weUZyb20ob25lcmVsLCBmaWxlbmFtZSwgTklM LCBvcHRpb25zKTsKKyAKKyAJLyogUHJlcGFyZSBmb3Igc2FtcGxpbmcgcm93cyAqLworIAly c3RhdGUgPSBpbml0X3NlbGVjdGlvbl9zdGF0ZSh0YXJncm93cyk7CisgCisgCS8qIFNldCB1 cCBjYWxsYmFjayB0byBpZGVudGlmeSBlcnJvciBsaW5lIG51bWJlci4gKi8KKyAJZXJyY29u dGV4dC5jYWxsYmFjayA9IENvcHlGcm9tRXJyb3JDYWxsYmFjazsKKyAJZXJyY29udGV4dC5h cmcgPSAodm9pZCAqKSBjc3RhdGU7CisgCWVycmNvbnRleHQucHJldmlvdXMgPSBlcnJvcl9j b250ZXh0X3N0YWNrOworIAllcnJvcl9jb250ZXh0X3N0YWNrID0gJmVycmNvbnRleHQ7Cisg CisgCSp0b3RhbHJvd3MgPSAwOworIAlmb3IgKDs7KQorIAl7CisgCQkvKgorIAkJICogQ2hl Y2sgZm9yIHVzZXItcmVxdWVzdGVkIGFib3J0LgorIAkJICovCisgCQlDSEVDS19GT1JfSU5U RVJSVVBUUygpOworIAorIAkJTWVtb3J5Q29udGV4dFJlc2V0KHR1cGNvbnRleHQpOworIAkJ TWVtb3J5Q29udGV4dFN3aXRjaFRvKHR1cGNvbnRleHQpOworIAorIAkJZm91bmQgPSBOZXh0 Q29weUZyb20oY3N0YXRlLCBOVUxMLCB2YWx1ZXMsIG51bGxzLCBOVUxMKTsKKyAKKyAJCWlm ICghZm91bmQpCisgCQkJYnJlYWs7CisgCisgCQkvKgorIAkJICogVGhlIGZpcnN0IHRhcmdy b3dzIHNhbXBsZSByb3dzIGFyZSBzaW1wbHkgY29waWVkIGludG8gdGhlCisgCQkgKiByZXNl cnZvaXIuIFRoZW4gd2Ugc3RhcnQgcmVwbGFjaW5nIHR1cGxlcyBpbiB0aGUgc2FtcGxlCisg CQkgKiB1bnRpbCB3ZSByZWFjaCB0aGUgZW5kIG9mIHRoZSByZWxhdGlvbi4JVGhpcyBhbGdv cml0aG0gaXMKKyAJCSAqIGZyb20gSmVmZiBWaXR0ZXIncyBwYXBlciAoc2VlIGZ1bGwgY2l0 YXRpb24gYmVsb3cpLiBJdAorIAkJICogd29ya3MgYnkgcmVwZWF0ZWRseSBjb21wdXRpbmcg dGhlIG51bWJlciBvZiB0dXBsZXMgdG8gc2tpcAorIAkJICogYmVmb3JlIHNlbGVjdGluZyBh IHR1cGxlLCB3aGljaCByZXBsYWNlcyBhIHJhbmRvbWx5IGNob3NlbgorIAkJICogZWxlbWVu dCBvZiB0aGUgcmVzZXJ2b2lyIChjdXJyZW50IHNldCBvZiB0dXBsZXMpLiAgQXQgYWxsCisg CQkgKiB0aW1lcyB0aGUgcmVzZXJ2b2lyIGlzIGEgdHJ1ZSByYW5kb20gc2FtcGxlIG9mIHRo ZSB0dXBsZXMKKyAJCSAqIHdlJ3ZlIHBhc3NlZCBvdmVyIHNvIGZhciwgc28gd2hlbiB3ZSBm YWxsIG9mZiB0aGUgZW5kIG9mCisgCQkgKiB0aGUgcmVsYXRpb24gd2UncmUgZG9uZS4KKyAJ CSAqLworIAkJaWYgKG51bXJvd3MgPCB0YXJncm93cykKKyAJCXsKKyAJCQlNZW1vcnlDb250 ZXh0U3dpdGNoVG8ob2xkY29udGV4dCk7CisgCQkJcm93c1tudW1yb3dzKytdID0gaGVhcF9m b3JtX3R1cGxlKHR1cERlc2MsIHZhbHVlcywgbnVsbHMpOworIAkJfQorIAkJZWxzZQorIAkJ eworIAkJCS8qCisgCQkJICogdCBpbiBWaXR0ZXIncyBwYXBlciBpcyB0aGUgbnVtYmVyIG9m IHJlY29yZHMgYWxyZWFkeQorIAkJCSAqIHByb2Nlc3NlZC4gIElmIHdlIG5lZWQgdG8gY29t cHV0ZSBhIG5ldyBTIHZhbHVlLCB3ZQorIAkJCSAqIG11c3QgdXNlIHRoZSBub3QteWV0LWlu Y3JlbWVudGVkIHZhbHVlIG9mIHNhbXBsZXJvd3MgYXMKKyAJCQkgKiB0LgorIAkJCSAqLwor IAkJCWlmIChyb3dzdG9za2lwIDwgMCkKKyAJCQkJcm93c3Rvc2tpcCA9IGdldF9uZXh0X1Mo KnRvdGFscm93cywgdGFyZ3Jvd3MsICZyc3RhdGUpOworIAorIAkJCWlmIChyb3dzdG9za2lw IDw9IDApCisgCQkJeworIAkJCQkvKgorIAkJCQkgKiBGb3VuZCBhIHN1aXRhYmxlIHR1cGxl LCBzbyBzYXZlIGl0LCByZXBsYWNpbmcgb25lCisgCQkJCSAqIG9sZCB0dXBsZSBhdCByYW5k b20KKyAJCQkJICovCisgCQkJCWludCBrID0gKGludCkgKHRhcmdyb3dzICogcmFuZG9tX2Zy YWN0KCkpOworIAorIAkJCQlBc3NlcnQoayA+PSAwICYmIGsgPCB0YXJncm93cyk7CisgCQkJ CWhlYXBfZnJlZXR1cGxlKHJvd3Nba10pOworIAkJCQlNZW1vcnlDb250ZXh0U3dpdGNoVG8o b2xkY29udGV4dCk7CisgCQkJCXJvd3Nba10gPSBoZWFwX2Zvcm1fdHVwbGUodHVwRGVzYywg dmFsdWVzLCBudWxscyk7CisgCQkJfQorIAorIAkJCXJvd3N0b3NraXAgLT0gMTsKKyAJCX0K KyAKKyAJCSp0b3RhbHJvd3MgKz0gMTsKKyAJfQorIAkqdG90YWxkZWFkcm93cyA9IDA7Cisg CisgCS8qIFJlbW92ZSBlcnJvciBjYWxsYmFjay4gKi8KKyAJZXJyb3JfY29udGV4dF9zdGFj ayA9IGVycmNvbnRleHQucHJldmlvdXM7CisgCisgCUVuZENvcHlGcm9tKGNzdGF0ZSk7Cisg CisgCXBmcmVlKHZhbHVlcyk7CisgCXBmcmVlKG51bGxzKTsKKyAKKyAJLyoKKyAJICogQmFj ayB0byBvcmlnaW5hbCBtZW1vcnkgY29udGV4dCwgYW5kIGRlbGV0ZSB0ZW1wb3JhcnkgcGVy LXR1cGxlIG1lbW9yeQorIAkgKiBjb250ZXh0LgorIAkgKi8KKyAJTWVtb3J5Q29udGV4dFN3 aXRjaFRvKG9sZGNvbnRleHQpOworIAlNZW1vcnlDb250ZXh0RGVsZXRlKHR1cGNvbnRleHQp OworIAorIAkvKgorIAkgKiBFbWl0IHNvbWUgaW50ZXJlc3RpbmcgcmVsYXRpb24gaW5mbwor IAkgKi8KKyAJZXJlcG9ydChlbGV2ZWwsCisgCQkJKGVycm1zZygiXCIlc1wiOiBzY2FubmVk LCAiCisgCQkJCQkiJWQgcm93cyBpbiBzYW1wbGUsICVkIHRvdGFsIHJvd3MiLAorIAkJCQkJ UmVsYXRpb25HZXRSZWxhdGlvbk5hbWUob25lcmVsKSwKKyAJCQkJCW51bXJvd3MsIChpbnQp ICp0b3RhbHJvd3MpKSk7CisgCisgCXJldHVybiBudW1yb3dzOworIH0KZGlmZiAtLWdpdCBh L2NvbnRyaWIvZmlsZV9mZHcvaW5wdXQvZmlsZV9mZHcuc291cmNlIGIvY29udHJpYi9maWxl X2Zkdy9pbnB1dC9maWxlX2Zkdy5zb3VyY2UKaW5kZXggOGUzZDU1My4uZmRkZDljZCAxMDA2 NDQKKioqIGEvY29udHJpYi9maWxlX2Zkdy9pbnB1dC9maWxlX2Zkdy5zb3VyY2UKLS0tIGIv Y29udHJpYi9maWxlX2Zkdy9pbnB1dC9maWxlX2Zkdy5zb3VyY2UKKioqKioqKioqKioqKioq IEVYRUNVVEUgc3QoMTAwKTsKKioqIDExMSwxMTYgKioqKgotLS0gMTExLDEyMSAtLS0tCiAg RVhFQ1VURSBzdCgxMDApOwogIERFQUxMT0NBVEUgc3Q7CiAgCisgLS0gc3RhdGlzdGljcyBj b2xsZWN0aW9uIHRlc3RzCisgQU5BTFlaRSBhZ2dfY3N2OworIFNFTEVDVCByZWxwYWdlcywg cmVsdHVwbGVzIEZST00gcGdfY2xhc3MgV0hFUkUgcmVsbmFtZSA9ICdhZ2dfY3N2JzsKKyBT RUxFQ1QgKiBGUk9NIHBnX3N0YXRzIFdIRVJFIHRhYmxlbmFtZSA9ICdhZ2dfY3N2JyBPUkRF UiBCWSBhdHRuYW1lOworIAogIC0tIHRhYmxlb2lkCiAgU0VMRUNUIHRhYmxlb2lkOjpyZWdj bGFzcywgYiBGUk9NIGFnZ19jc3Y7CiAgCmRpZmYgLS1naXQgYS9jb250cmliL2ZpbGVfZmR3 L291dHB1dC9maWxlX2Zkdy5zb3VyY2UgYi9jb250cmliL2ZpbGVfZmR3L291dHB1dC9maWxl X2Zkdy5zb3VyY2UKaW5kZXggODRmMDc1MC4uNWJlNWZlMCAxMDA2NDQKKioqIGEvY29udHJp Yi9maWxlX2Zkdy9vdXRwdXQvZmlsZV9mZHcuc291cmNlCi0tLSBiL2NvbnRyaWIvZmlsZV9m ZHcvb3V0cHV0L2ZpbGVfZmR3LnNvdXJjZQoqKioqKioqKioqKioqKiogRVhFQ1VURSBzdCgx MDApOwoqKiogMTc0LDE3OSAqKioqCi0tLSAxNzQsMTk0IC0tLS0KICAoMSByb3cpCiAgCiAg REVBTExPQ0FURSBzdDsKKyAtLSBzdGF0aXN0aWNzIGNvbGxlY3Rpb24gdGVzdHMKKyBBTkFM WVpFIGFnZ19jc3Y7CisgU0VMRUNUIHJlbHBhZ2VzLCByZWx0dXBsZXMgRlJPTSBwZ19jbGFz cyBXSEVSRSByZWxuYW1lID0gJ2FnZ19jc3YnOworICByZWxwYWdlcyB8IHJlbHR1cGxlcyAK KyAtLS0tLS0tLS0tKy0tLS0tLS0tLS0tCisgICAgICAgICAxIHwgICAgICAgICAzCisgKDEg cm93KQorIAorIFNFTEVDVCAqIEZST00gcGdfc3RhdHMgV0hFUkUgdGFibGVuYW1lID0gJ2Fn Z19jc3YnIE9SREVSIEJZIGF0dG5hbWU7CisgIHNjaGVtYW5hbWUgfCB0YWJsZW5hbWUgfCBh dHRuYW1lIHwgaW5oZXJpdGVkIHwgbnVsbF9mcmFjIHwgYXZnX3dpZHRoIHwgbl9kaXN0aW5j dCB8IG1vc3RfY29tbW9uX3ZhbHMgfCBtb3N0X2NvbW1vbl9mcmVxcyB8ICAgIGhpc3RvZ3Jh bV9ib3VuZHMgICAgIHwgY29ycmVsYXRpb24gfCBtb3N0X2NvbW1vbl9lbGVtcyB8IG1vc3Rf Y29tbW9uX2VsZW1fZnJlcXMgfCBlbGVtX2NvdW50X2hpc3RvZ3JhbSAKKyAtLS0tLS0tLS0t LS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0t LS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0t LS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0t LS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQorICBwdWJsaWMgICAgIHwgYWdnX2NzdiAgIHwgYSAgICAgICB8IGYgICAgICAgICB8 ICAgICAgICAgMCB8ICAgICAgICAgMiB8ICAgICAgICAgLTEgfCAgICAgICAgICAgICAgICAg IHwgICAgICAgICAgICAgICAgICAgfCB7MCw0MiwxMDB9ICAgICAgICAgICAgICB8ICAgICAg ICAtMC41IHwgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgIHwg CisgIHB1YmxpYyAgICAgfCBhZ2dfY3N2ICAgfCBiICAgICAgIHwgZiAgICAgICAgIHwgICAg ICAgICAwIHwgICAgICAgICA0IHwgICAgICAgICAtMSB8ICAgICAgICAgICAgICAgICAgfCAg ICAgICAgICAgICAgICAgICB8IHswLjA5NTYxLDk5LjA5NywzMjQuNzh9IHwgICAgICAgICAw LjUgfCAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgfCAKKyAo MiByb3dzKQorIAogIC0tIHRhYmxlb2lkCiAgU0VMRUNUIHRhYmxlb2lkOjpyZWdjbGFzcywg YiBGUk9NIGFnZ19jc3Y7CiAgIHRhYmxlb2lkIHwgICAgYiAgICAKZGlmZiAtLWdpdCBhL2Rv Yy9zcmMvc2dtbC9mZHdoYW5kbGVyLnNnbWwgYi9kb2Mvc3JjL3NnbWwvZmR3aGFuZGxlci5z Z21sCmluZGV4IGY3YmYzZDguLjRmOTYyYjcgMTAwNjQ0CioqKiBhL2RvYy9zcmMvc2dtbC9m ZHdoYW5kbGVyLnNnbWwKLS0tIGIvZG9jL3NyYy9zZ21sL2Zkd2hhbmRsZXIuc2dtbAoqKioq KioqKioqKioqKiogRW5kRm9yZWlnblNjYW4gKEZvcmVpZ25TY2FuU3RhdGUgKm5vZGUpOwoq KiogMjc3LDI4MiAqKioqCi0tLSAyNzcsMzA1IC0tLS0KICAgICAgPC9wYXJhPgogIAogICAg ICA8cGFyYT4KKyA8cHJvZ3JhbWxpc3Rpbmc+Cisgdm9pZAorIEFuYWx5emVGb3JlaWduVGFi bGUgKFJlbGF0aW9uIG9uZXJlbCwKKyAgICAgICAgICAgICAgICAgICAgICBWYWN1dW1TdG10 ICp2YWNzdG10LAorICAgICAgICAgICAgICAgICAgICAgIGludCBlbGV2ZWwpOworIDwvcHJv Z3JhbWxpc3Rpbmc+CisgCisgICAgICBDb2xsZWN0IHN0YXRpc3RpY3Mgb24gYSBmb3JlaWdu IHRhYmxlIGFuZCBzdG9yZSB0aGUgcmVzdWx0cyBpbiB0aGUKKyAgICAgIHBnX2NsYXNzIGFu ZCBwZ19zdGF0aXN0aWNzIHN5c3RlbSBjYXRhbG9ncy4KKyAgICAgIFRoaXMgaXMgb3B0aW9u YWwsIGFuZCBpZiBpbXBsZW1lbnRlZCwgY2FsbGVkIHdoZW4gPGNvbW1hbmQ+QU5BTFlaRTwv PgorICAgICAgY29tbWFuZCBpcyBydW4uICBUaGUgc3RhdGlzdGljcyBhcmUgdXNlZCBieSB0 aGUgcXVlcnkgcGxhbm5lciBpbiBvcmRlciB0bworICAgICAgbWFrZSBnb29kIGNob2ljZXMg b2YgcXVlcnkgcGxhbnMuCisgICAgIDwvcGFyYT4KKyAKKyAgICAgPHBhcmE+CisgICAgICBU aGUgZnVuY3Rpb24gY2FuIGJlIGltcGxlbWVudGVkIGJ5IHdyaXRpbmcgYSBzYW1wbGluZyBm dW5jdGlvbiB0aGF0CisgICAgICBhY3F1aXJlcyBhIHJhbmRvbSBzYW1wbGUgb2Ygcm93cyBm cm9tIGFuIGV4dGVybmFsIGRhdGEgc291cmNlIGFuZAorICAgICAgdGhlbiBieSBjYWxsaW5n IDxmdW5jdGlvbj5kb19hbmFseXplX3JlbDwvPiwgd2hlcmUgeW91IHNob3VsZCBwYXNzCisg ICAgICB0aGUgc2FtcGxpbmcgZnVuY3Rpb24gYXMgYW4gYXJndW1lbnQuCisgICAgICBUaGUg ZnVuY3Rpb24gbXVzdCBiZSBzZXQgdG8gTlVMTCBpZiBpdCBpc24ndCBpbXBsZW1lbnRlZC4K KyAgICAgPC9wYXJhPgorIAorICAgICA8cGFyYT4KICAgICAgIFRoZSA8c3RydWN0bmFtZT5G ZHdSb3V0aW5lPC8+IHN0cnVjdCB0eXBlIGlzIGRlY2xhcmVkIGluCiAgICAgICA8ZmlsZW5h bWU+c3JjL2luY2x1ZGUvZm9yZWlnbi9mZHdhcGkuaDwvPiwgd2hpY2ggc2VlIGZvciBhZGRp dGlvbmFsCiAgICAgICBkZXRhaWxzLgpkaWZmIC0tZ2l0IGEvZG9jL3NyYy9zZ21sL21haW50 ZW5hbmNlLnNnbWwgYi9kb2Mvc3JjL3NnbWwvbWFpbnRlbmFuY2Uuc2dtbAppbmRleCA5M2Mz ZmY1Li41NGQwODM4IDEwMDY0NAoqKiogYS9kb2Mvc3JjL3NnbWwvbWFpbnRlbmFuY2Uuc2dt bAotLS0gYi9kb2Mvc3JjL3NnbWwvbWFpbnRlbmFuY2Uuc2dtbAoqKioqKioqKioqKioqKioK KioqIDI4NCwyODkgKioqKgotLS0gMjg0LDI5MyAtLS0tCiAgICAgIDxjb21tYW5kPkFOQUxZ WkU8Lz4gc3RyaWN0bHkgYXMgYSBmdW5jdGlvbiBvZiB0aGUgbnVtYmVyIG9mIHJvd3MKICAg ICAgaW5zZXJ0ZWQgb3IgdXBkYXRlZDsgaXQgaGFzIG5vIGtub3dsZWRnZSBvZiB3aGV0aGVy IHRoYXQgd2lsbCBsZWFkCiAgICAgIHRvIG1lYW5pbmdmdWwgc3RhdGlzdGljYWwgY2hhbmdl cy4KKyAgICAgTm90ZSB0aGF0IHRoZSBhdXRvdmFjdXVtIGRhZW1vbiBkb2VzIG5vdCBpc3N1 ZSA8Y29tbWFuZD5BTkFMWVpFPC8+CisgICAgIGNvbW1hbmRzIG9uIGZvcmVpZ24gdGFibGVz LiAgSXQgaXMgcmVjb21tZW5kZWQgdG8gcnVuIG1hbnVhbGx5LW1hbmFnZWQKKyAgICAgPGNv bW1hbmQ+QU5BTFlaRTwvPiBjb21tYW5kcyBhcyBuZWVkZWQsIHdoaWNoIHR5cGljYWxseSBh cmUgZXhlY3V0ZWQKKyAgICAgYWNjb3JkaW5nIHRvIGEgc2NoZWR1bGUgYnkgY3JvbiBvciBU YXNrIFNjaGVkdWxlciBzY3JpcHRzLgogICAgIDwvcGFyYT4KICAKICAgICA8cGFyYT4KZGlm ZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9yZWYvYWx0ZXJfZm9yZWlnbl90YWJsZS5zZ21sIGIv ZG9jL3NyYy9zZ21sL3JlZi9hbHRlcl9mb3JlaWduX3RhYmxlLnNnbWwKaW5kZXggYzRjZGFh OC4uYWY1YzBhOCAxMDA2NDQKKioqIGEvZG9jL3NyYy9zZ21sL3JlZi9hbHRlcl9mb3JlaWdu X3RhYmxlLnNnbWwKLS0tIGIvZG9jL3NyYy9zZ21sL3JlZi9hbHRlcl9mb3JlaWduX3RhYmxl LnNnbWwKKioqKioqKioqKioqKioqIEFMVEVSIEZPUkVJR04gVEFCTEUgWyBJRiBFWElTVFMg XSA8cmVwbGEKKioqIDM2LDQxICoqKioKLS0tIDM2LDQ0IC0tLS0KICAgICAgRFJPUCBbIENP TFVNTiBdIFsgSUYgRVhJU1RTIF0gPHJlcGxhY2VhYmxlIGNsYXNzPSJQQVJBTUVURVIiPmNv bHVtbjwvcmVwbGFjZWFibGU+IFsgUkVTVFJJQ1QgfCBDQVNDQURFIF0KICAgICAgQUxURVIg WyBDT0xVTU4gXSA8cmVwbGFjZWFibGUgY2xhc3M9IlBBUkFNRVRFUiI+Y29sdW1uPC9yZXBs YWNlYWJsZT4gWyBTRVQgREFUQSBdIFRZUEUgPHJlcGxhY2VhYmxlIGNsYXNzPSJQQVJBTUVU RVIiPnR5cGU8L3JlcGxhY2VhYmxlPgogICAgICBBTFRFUiBbIENPTFVNTiBdIDxyZXBsYWNl YWJsZSBjbGFzcz0iUEFSQU1FVEVSIj5jb2x1bW48L3JlcGxhY2VhYmxlPiB7IFNFVCB8IERS T1AgfSBOT1QgTlVMTAorICAgICBBTFRFUiBbIENPTFVNTiBdIDxyZXBsYWNlYWJsZSBjbGFz cz0iUEFSQU1FVEVSIj5jb2x1bW48L3JlcGxhY2VhYmxlPiBTRVQgU1RBVElTVElDUyA8cmVw bGFjZWFibGUgY2xhc3M9IlBBUkFNRVRFUiI+aW50ZWdlcjwvcmVwbGFjZWFibGU+CisgICAg IEFMVEVSIFsgQ09MVU1OIF0gPHJlcGxhY2VhYmxlIGNsYXNzPSJQQVJBTUVURVIiPmNvbHVt bjwvcmVwbGFjZWFibGU+IFNFVCAoIDxyZXBsYWNlYWJsZSBjbGFzcz0iUEFSQU1FVEVSIj5h dHRyaWJ1dGVfb3B0aW9uPC9yZXBsYWNlYWJsZT4gPSA8cmVwbGFjZWFibGUgY2xhc3M9IlBB UkFNRVRFUiI+dmFsdWU8L3JlcGxhY2VhYmxlPiBbLCAuLi4gXSApCisgICAgIEFMVEVSIFsg Q09MVU1OIF0gPHJlcGxhY2VhYmxlIGNsYXNzPSJQQVJBTUVURVIiPmNvbHVtbjwvcmVwbGFj ZWFibGU+IFJFU0VUICggPHJlcGxhY2VhYmxlIGNsYXNzPSJQQVJBTUVURVIiPmF0dHJpYnV0 ZV9vcHRpb248L3JlcGxhY2VhYmxlPiBbLCAuLi4gXSApCiAgICAgIEFMVEVSIFsgQ09MVU1O IF0gPHJlcGxhY2VhYmxlIGNsYXNzPSJQQVJBTUVURVIiPmNvbHVtbjwvcmVwbGFjZWFibGU+ IE9QVElPTlMgKCBbIEFERCB8IFNFVCB8IERST1AgXSA8cmVwbGFjZWFibGUgY2xhc3M9IlBB UkFNRVRFUiI+b3B0aW9uPC9yZXBsYWNlYWJsZT4gWyc8cmVwbGFjZWFibGUgY2xhc3M9IlBB UkFNRVRFUiI+dmFsdWU8L3JlcGxhY2VhYmxlPiddIFssIC4uLiBdKQogICAgICBPV05FUiBU TyA8cmVwbGFjZWFibGUgY2xhc3M9IlBBUkFNRVRFUiI+bmV3X293bmVyPC9yZXBsYWNlYWJs ZT4KICAgICAgT1BUSU9OUyAoIFsgQUREIHwgU0VUIHwgRFJPUCBdIDxyZXBsYWNlYWJsZSBj bGFzcz0iUEFSQU1FVEVSIj5vcHRpb248L3JlcGxhY2VhYmxlPiBbJzxyZXBsYWNlYWJsZSBj bGFzcz0iUEFSQU1FVEVSIj52YWx1ZTwvcmVwbGFjZWFibGU+J10gWywgLi4uIF0pCioqKioq KioqKioqKioqKiBBTFRFUiBGT1JFSUdOIFRBQkxFIFsgSUYgRVhJU1RTIF0gPHJlcGxhCioq KiAxMDQsMTA5ICoqKioKLS0tIDEwNywxNTYgLS0tLQogICAgIDwvdmFybGlzdGVudHJ5Pgog IAogICAgIDx2YXJsaXN0ZW50cnk+CisgICAgIDx0ZXJtPjxsaXRlcmFsPlNFVCBTVEFUSVNU SUNTPC9saXRlcmFsPjwvdGVybT4KKyAgICAgPGxpc3RpdGVtPgorICAgICAgPHBhcmE+Cisg ICAgICAgVGhpcyBmb3JtCisgICAgICAgc2V0cyB0aGUgcGVyLWNvbHVtbiBzdGF0aXN0aWNz LWdhdGhlcmluZyB0YXJnZXQgZm9yIHN1YnNlcXVlbnQKKyAgICAgICA8eHJlZiBsaW5rZW5k PSJzcWwtYW5hbHl6ZSI+IG9wZXJhdGlvbnMuCisgICAgICAgVGhlIHRhcmdldCBjYW4gYmUg c2V0IGluIHRoZSByYW5nZSAwIHRvIDEwMDAwOyBhbHRlcm5hdGl2ZWx5LCBzZXQgaXQKKyAg ICAgICB0byAtMSB0byByZXZlcnQgdG8gdXNpbmcgdGhlIHN5c3RlbSBkZWZhdWx0IHN0YXRp c3RpY3MKKyAgICAgICB0YXJnZXQgKDx4cmVmIGxpbmtlbmQ9Imd1Yy1kZWZhdWx0LXN0YXRp c3RpY3MtdGFyZ2V0Ij4pLgorICAgICAgPC9wYXJhPgorICAgICA8L2xpc3RpdGVtPgorICAg IDwvdmFybGlzdGVudHJ5PgorIAorICAgIDx2YXJsaXN0ZW50cnk+CisgICAgIDx0ZXJtPjxs aXRlcmFsPlNFVCAoIDxyZXBsYWNlYWJsZSBjbGFzcz0iUEFSQU1FVEVSIj5hdHRyaWJ1dGVf b3B0aW9uPC9yZXBsYWNlYWJsZT4gPSA8cmVwbGFjZWFibGUgY2xhc3M9IlBBUkFNRVRFUiI+ dmFsdWU8L3JlcGxhY2VhYmxlPiBbLCAuLi4gXSApPC9saXRlcmFsPjwvdGVybT4KKyAgICAg PHRlcm0+PGxpdGVyYWw+UkVTRVQgKCA8cmVwbGFjZWFibGUgY2xhc3M9IlBBUkFNRVRFUiI+ YXR0cmlidXRlX29wdGlvbjwvcmVwbGFjZWFibGU+IFssIC4uLiBdICk8L2xpdGVyYWw+PC90 ZXJtPgorICAgICA8bGlzdGl0ZW0+CisgICAgICA8cGFyYT4KKyAgICAgICBUaGlzIGZvcm0K KyAgICAgICBzZXRzIG9yIHJlc2V0cyBhIHBlci1hdHRyaWJ1dGUgb3B0aW9uLiAgQ3VycmVu dGx5LCB0aGUgb25seSBkZWZpbmVkCisgICAgICAgcGVyLWF0dHJpYnV0ZSBvcHRpb24gaXMg PGxpdGVyYWw+bl9kaXN0aW5jdDwvPiwgd2hpY2ggb3ZlcnJpZGVzCisgICAgICAgdGhlIG51 bWJlci1vZi1kaXN0aW5jdC12YWx1ZXMgZXN0aW1hdGVzIG1hZGUgYnkgc3Vic2VxdWVudAor ICAgICAgIDx4cmVmIGxpbmtlbmQ9InNxbC1hbmFseXplIj4gb3BlcmF0aW9ucy4gCisgICAg ICAgV2hlbiBzZXQgdG8gYSBwb3NpdGl2ZSB2YWx1ZSwgPGNvbW1hbmQ+QU5BTFlaRTwvPiB3 aWxsIGFzc3VtZSB0aGF0CisgICAgICAgdGhlIGNvbHVtbiBjb250YWlucyBleGFjdGx5IHRo ZSBzcGVjaWZpZWQgbnVtYmVyIG9mIGRpc3RpbmN0IG5vbm51bGwKKyAgICAgICB2YWx1ZXMu CisgICAgICAgV2hlbiBzZXQgdG8gYSBuZWdhdGl2ZSB2YWx1ZSwgd2hpY2ggbXVzdCBiZSBn cmVhdGVyIHRoYW4gb3IgZXF1YWwKKyAgICAgICB0byAtMSwgPGNvbW1hbmQ+QU5BTFlaRTwv PiB3aWxsIGFzc3VtZSB0aGF0IHRoZSBudW1iZXIgb2YgZGlzdGluY3QKKyAgICAgICBub25u dWxsIHZhbHVlcyBpbiB0aGUgY29sdW1uIGlzIGxpbmVhciBpbiB0aGUgc2l6ZSBvZiB0aGUg Zm9yZWlnbgorICAgICAgIHRhYmxlOyB0aGUgZXhhY3QgY291bnQgaXMgdG8gYmUgY29tcHV0 ZWQgYnkgbXVsdGlwbHlpbmcgdGhlIGVzdGltYXRlZAorICAgICAgIGZvcmVpZ24gdGFibGUg c2l6ZSBieSB0aGUgYWJzb2x1dGUgdmFsdWUgb2YgdGhlIGdpdmVuIG51bWJlci4KKyAgICAg ICBGb3IgZXhhbXBsZSwKKyAgICAgICBhIHZhbHVlIG9mIC0xIGltcGxpZXMgdGhhdCBhbGwg dmFsdWVzIGluIHRoZSBjb2x1bW4gYXJlIGRpc3RpbmN0LAorICAgICAgIHdoaWxlIGEgdmFs dWUgb2YgLTAuNSBpbXBsaWVzIHRoYXQgZWFjaCB2YWx1ZSBhcHBlYXJzIHR3aWNlIG9uIHRo ZQorICAgICAgIGF2ZXJhZ2UuCisgICAgICAgVGhpcyBjYW4gYmUgdXNlZnVsIHdoZW4gdGhl IHNpemUgb2YgdGhlIGZvcmVpZ24gdGFibGUgY2hhbmdlcyBvdmVyCisgICAgICAgdGltZSwg c2luY2UgdGhlIG11bHRpcGxpY2F0aW9uIGJ5IHRoZSBudW1iZXIgb2Ygcm93cyBpbiB0aGUg Zm9yZWlnbgorICAgICAgIHRhYmxlIGlzIG5vdCBwZXJmb3JtZWQgdW50aWwgcXVlcnkgcGxh bm5pbmcgdGltZS4gIFNwZWNpZnkgYSB2YWx1ZQorICAgICAgIG9mIDAgdG8gcmV2ZXJ0IHRv IGVzdGltYXRpbmcgdGhlIG51bWJlciBvZiBkaXN0aW5jdCB2YWx1ZXMgbm9ybWFsbHkuCisg ICAgICA8L3BhcmE+CisgICAgIDwvbGlzdGl0ZW0+CisgICAgPC92YXJsaXN0ZW50cnk+Cisg CisgICAgPHZhcmxpc3RlbnRyeT4KICAgICAgPHRlcm0+PGxpdGVyYWw+T1dORVI8L2xpdGVy YWw+PC90ZXJtPgogICAgICA8bGlzdGl0ZW0+CiAgICAgICA8cGFyYT4KZGlmZiAtLWdpdCBh L2RvYy9zcmMvc2dtbC9yZWYvYW5hbHl6ZS5zZ21sIGIvZG9jL3NyYy9zZ21sL3JlZi9hbmFs eXplLnNnbWwKaW5kZXggOGM5MDU3Yi4uOTdlOWFkNiAxMDA2NDQKKioqIGEvZG9jL3NyYy9z Z21sL3JlZi9hbmFseXplLnNnbWwKLS0tIGIvZG9jL3NyYy9zZ21sL3JlZi9hbmFseXplLnNn bWwKKioqKioqKioqKioqKioqIEFOQUxZWkUgWyBWRVJCT1NFIF0gWyA8cmVwbGFjZWFibGUg Y2xhc3MKKioqIDM5LDQ3ICoqKioKICAKICAgIDxwYXJhPgogICAgIFdpdGggbm8gcGFyYW1l dGVyLCA8Y29tbWFuZD5BTkFMWVpFPC9jb21tYW5kPiBleGFtaW5lcyBldmVyeSB0YWJsZSBp biB0aGUKISAgICBjdXJyZW50IGRhdGFiYXNlLiAgV2l0aCBhIHBhcmFtZXRlciwgPGNvbW1h bmQ+QU5BTFlaRTwvY29tbWFuZD4gZXhhbWluZXMKISAgICBvbmx5IHRoYXQgdGFibGUuICBJ dCBpcyBmdXJ0aGVyIHBvc3NpYmxlIHRvIGdpdmUgYSBsaXN0IG9mIGNvbHVtbiBuYW1lcywK ISAgICBpbiB3aGljaCBjYXNlIG9ubHkgdGhlIHN0YXRpc3RpY3MgZm9yIHRob3NlIGNvbHVt bnMgYXJlIGNvbGxlY3RlZC4KICAgIDwvcGFyYT4KICAgPC9yZWZzZWN0MT4KICAKLS0tIDM5 LDQ5IC0tLS0KICAKICAgIDxwYXJhPgogICAgIFdpdGggbm8gcGFyYW1ldGVyLCA8Y29tbWFu ZD5BTkFMWVpFPC9jb21tYW5kPiBleGFtaW5lcyBldmVyeSB0YWJsZSBpbiB0aGUKISAgICBj dXJyZW50IGRhdGFiYXNlIGV4Y2VwdCBmb3IgZm9yZWlnbiB0YWJsZXMuICBXaXRoIGEgcGFy YW1ldGVyLAohICAgIDxjb21tYW5kPkFOQUxZWkU8L2NvbW1hbmQ+IGV4YW1pbmVzIG9ubHkg dGhhdCB0YWJsZS4gIEZvciBhIGZvcmVpZ24gdGFibGUsCiEgICAgaXQgaXMgbmVjZXNzYXJ5 IHRvIHNwZWNpZnkgdGhlIG5hbWUgb2YgdGhhdCB0YWJsZS4gIEl0IGlzIGZ1cnRoZXIgcG9z c2libGUKISAgICB0byBnaXZlIGEgbGlzdCBvZiBjb2x1bW4gbmFtZXMsIGluIHdoaWNoIGNh c2Ugb25seSB0aGUgc3RhdGlzdGljcyBmb3IgdGhvc2UKISAgICBjb2x1bW5zIGFyZSBjb2xs ZWN0ZWQuCiAgICA8L3BhcmE+CiAgIDwvcmVmc2VjdDE+CiAgCioqKioqKioqKioqKioqKiBB TkFMWVpFIFsgVkVSQk9TRSBdIFsgPHJlcGxhY2VhYmxlIGNsYXNzCioqKiA2Myw2OSAqKioq CiAgICAgIDxsaXN0aXRlbT4KICAgICAgIDxwYXJhPgogICAgICAgIFRoZSBuYW1lIChwb3Nz aWJseSBzY2hlbWEtcXVhbGlmaWVkKSBvZiBhIHNwZWNpZmljIHRhYmxlIHRvCiEgICAgICAg YW5hbHl6ZS4gRGVmYXVsdHMgdG8gYWxsIHRhYmxlcyBpbiB0aGUgY3VycmVudCBkYXRhYmFz ZS4KICAgICAgIDwvcGFyYT4KICAgICAgPC9saXN0aXRlbT4KICAgICA8L3Zhcmxpc3RlbnRy eT4KLS0tIDY1LDcyIC0tLS0KICAgICAgPGxpc3RpdGVtPgogICAgICAgPHBhcmE+CiAgICAg ICAgVGhlIG5hbWUgKHBvc3NpYmx5IHNjaGVtYS1xdWFsaWZpZWQpIG9mIGEgc3BlY2lmaWMg dGFibGUgdG8KISAgICAgICBhbmFseXplLiBEZWZhdWx0cyB0byBhbGwgdGFibGVzIGluIHRo ZSBjdXJyZW50IGRhdGFiYXNlIGV4Y2VwdAohICAgICAgIGZvciBmb3JlaWduIHRhYmxlcy4K ICAgICAgIDwvcGFyYT4KICAgICAgPC9saXN0aXRlbT4KICAgICA8L3Zhcmxpc3RlbnRyeT4K KioqKioqKioqKioqKioqIEFOQUxZWkUgWyBWRVJCT1NFIF0gWyA8cmVwbGFjZWFibGUgY2xh c3MKKioqIDEzNywxNDMgKioqKgogICAgIEluIHJhcmUgc2l0dWF0aW9ucywgdGhpcyBub24t ZGV0ZXJtaW5pc20gd2lsbCBjYXVzZSB0aGUgcGxhbm5lcidzCiAgICAgY2hvaWNlcyBvZiBx dWVyeSBwbGFucyB0byBjaGFuZ2UgYWZ0ZXIgPGNvbW1hbmQ+QU5BTFlaRTwvY29tbWFuZD4g aXMgcnVuLgogICAgIFRvIGF2b2lkIHRoaXMsIHJhaXNlIHRoZSBhbW91bnQgb2Ygc3RhdGlz dGljcyBjb2xsZWN0ZWQgYnkKISAgICA8Y29tbWFuZD5BTkFMWVpFPC9jb21tYW5kPiwgYXMg ZGVzY3JpYmVkIGJlbG93LgogICAgPC9wYXJhPgogIAogICAgPHBhcmE+Ci0tLSAxNDAsMTQ4 IC0tLS0KICAgICBJbiByYXJlIHNpdHVhdGlvbnMsIHRoaXMgbm9uLWRldGVybWluaXNtIHdp bGwgY2F1c2UgdGhlIHBsYW5uZXIncwogICAgIGNob2ljZXMgb2YgcXVlcnkgcGxhbnMgdG8g Y2hhbmdlIGFmdGVyIDxjb21tYW5kPkFOQUxZWkU8L2NvbW1hbmQ+IGlzIHJ1bi4KICAgICBU byBhdm9pZCB0aGlzLCByYWlzZSB0aGUgYW1vdW50IG9mIHN0YXRpc3RpY3MgY29sbGVjdGVk IGJ5CiEgICAgPGNvbW1hbmQ+QU5BTFlaRTwvY29tbWFuZD4sIGFzIGRlc2NyaWJlZCBiZWxv dy4gIE5vdGUgdGhhdCB0aGUgdGltZQohICAgIG5lZWRlZCB0byBhbmFseXplIG9uIGZvcmVp Z24gdGFibGVzIGRlcGVuZHMgb24gdGhlIGltcGxlbWVudGF0aW9uIG9mCiEgICAgdGhlIGZv cmVpZ24gZGF0YSB3cmFwcGVyIHZpYSB3aGljaCBzdWNoIHRhYmxlcyBhcmUgYXR0YWNoZWQu CiAgICA8L3BhcmE+CiAgCiAgICA8cGFyYT4KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2Nv bW1hbmRzL2FuYWx5emUuYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2FuYWx5emUuYwppbmRl eCA5Y2Q2ZTY3Li42YWM2NTAzIDEwMDY0NAoqKiogYS9zcmMvYmFja2VuZC9jb21tYW5kcy9h bmFseXplLmMKLS0tIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvYW5hbHl6ZS5jCioqKioqKioq KioqKioqKgoqKiogMjMsMjggKioqKgotLS0gMjMsMjkgLS0tLQogICNpbmNsdWRlICJhY2Nl c3MveGFjdC5oIgogICNpbmNsdWRlICJjYXRhbG9nL2luZGV4LmgiCiAgI2luY2x1ZGUgImNh dGFsb2cvaW5kZXhpbmcuaCIKKyAjaW5jbHVkZSAiY2F0YWxvZy9wZ19jbGFzcy5oIgogICNp bmNsdWRlICJjYXRhbG9nL3BnX2NvbGxhdGlvbi5oIgogICNpbmNsdWRlICJjYXRhbG9nL3Bn X2luaGVyaXRzX2ZuLmgiCiAgI2luY2x1ZGUgImNhdGFsb2cvcGdfbmFtZXNwYWNlLmgiCioq KioqKioqKioqKioqKgoqKiogMzAsMzUgKioqKgotLS0gMzEsMzggLS0tLQogICNpbmNsdWRl ICJjb21tYW5kcy90YWJsZWNtZHMuaCIKICAjaW5jbHVkZSAiY29tbWFuZHMvdmFjdXVtLmgi CiAgI2luY2x1ZGUgImV4ZWN1dG9yL2V4ZWN1dG9yLmgiCisgI2luY2x1ZGUgImZvcmVpZ24v Zm9yZWlnbi5oIgorICNpbmNsdWRlICJmb3JlaWduL2Zkd2FwaS5oIgogICNpbmNsdWRlICJt aXNjYWRtaW4uaCIKICAjaW5jbHVkZSAibm9kZXMvbm9kZUZ1bmNzLmgiCiAgI2luY2x1ZGUg InBhcnNlci9wYXJzZV9vcGVyLmgiCioqKioqKioqKioqKioqKiB0eXBlZGVmIHN0cnVjdCBB bmxJbmRleERhdGEKKioqIDc4LDkxICoqKioKICBpbnQJCQlkZWZhdWx0X3N0YXRpc3RpY3Nf dGFyZ2V0ID0gMTAwOwogIAogIC8qIEEgZmV3IHZhcmlhYmxlcyB0aGF0IGRvbid0IHNlZW0g d29ydGggcGFzc2luZyBhcm91bmQgYXMgcGFyYW1ldGVycyAqLwotIHN0YXRpYyBpbnQJZWxl dmVsID0gLTE7Ci0gCiAgc3RhdGljIE1lbW9yeUNvbnRleHQgYW5sX2NvbnRleHQgPSBOVUxM OwogIAogIHN0YXRpYyBCdWZmZXJBY2Nlc3NTdHJhdGVneSB2YWNfc3RyYXRlZ3k7CiAgCiAg Ci0gc3RhdGljIHZvaWQgZG9fYW5hbHl6ZV9yZWwoUmVsYXRpb24gb25lcmVsLCBWYWN1dW1T dG10ICp2YWNzdG10LCBib29sIGluaCk7CiAgc3RhdGljIHZvaWQgQmxvY2tTYW1wbGVyX0lu aXQoQmxvY2tTYW1wbGVyIGJzLCBCbG9ja051bWJlciBuYmxvY2tzLAogIAkJCQkgIGludCBz YW1wbGVzaXplKTsKICBzdGF0aWMgYm9vbCBCbG9ja1NhbXBsZXJfSGFzTW9yZShCbG9ja1Nh bXBsZXIgYnMpOwotLS0gODEsOTEgLS0tLQoqKioqKioqKioqKioqKiogc3RhdGljIHZvaWQg Y29tcHV0ZV9pbmRleF9zdGF0cyhSZWxhdGlvbgoqKiogOTcsMTEwICoqKioKICBzdGF0aWMg VmFjQXR0clN0YXRzICpleGFtaW5lX2F0dHJpYnV0ZShSZWxhdGlvbiBvbmVyZWwsIGludCBh dHRudW0sCiAgCQkJCSAgTm9kZSAqaW5kZXhfZXhwcik7CiAgc3RhdGljIGludCBhY3F1aXJl X3NhbXBsZV9yb3dzKFJlbGF0aW9uIG9uZXJlbCwgSGVhcFR1cGxlICpyb3dzLAohIAkJCQkJ aW50IHRhcmdyb3dzLCBkb3VibGUgKnRvdGFscm93cywgZG91YmxlICp0b3RhbGRlYWRyb3dz KTsKISBzdGF0aWMgZG91YmxlIHJhbmRvbV9mcmFjdCh2b2lkKTsKISBzdGF0aWMgZG91Ymxl IGluaXRfc2VsZWN0aW9uX3N0YXRlKGludCBuKTsKISBzdGF0aWMgZG91YmxlIGdldF9uZXh0 X1MoZG91YmxlIHQsIGludCBuLCBkb3VibGUgKnN0YXRlcHRyKTsKICBzdGF0aWMgaW50CWNv bXBhcmVfcm93cyhjb25zdCB2b2lkICphLCBjb25zdCB2b2lkICpiKTsKICBzdGF0aWMgaW50 IGFjcXVpcmVfaW5oZXJpdGVkX3NhbXBsZV9yb3dzKFJlbGF0aW9uIG9uZXJlbCwKICAJCQkJ CQkJICBIZWFwVHVwbGUgKnJvd3MsIGludCB0YXJncm93cywKISAJCQkJCQkJICBkb3VibGUg KnRvdGFscm93cywgZG91YmxlICp0b3RhbGRlYWRyb3dzKTsKICBzdGF0aWMgdm9pZCB1cGRh dGVfYXR0c3RhdHMoT2lkIHJlbGlkLCBib29sIGluaCwKICAJCQkJaW50IG5hdHRzLCBWYWNB dHRyU3RhdHMgKip2YWNhdHRyc3RhdHMpOwogIHN0YXRpYyBEYXR1bSBzdGRfZmV0Y2hfZnVu YyhWYWNBdHRyU3RhdHNQIHN0YXRzLCBpbnQgcm93bnVtLCBib29sICppc051bGwpOwotLS0g OTcsMTA5IC0tLS0KICBzdGF0aWMgVmFjQXR0clN0YXRzICpleGFtaW5lX2F0dHJpYnV0ZShS ZWxhdGlvbiBvbmVyZWwsIGludCBhdHRudW0sCiAgCQkJCSAgTm9kZSAqaW5kZXhfZXhwcik7 CiAgc3RhdGljIGludCBhY3F1aXJlX3NhbXBsZV9yb3dzKFJlbGF0aW9uIG9uZXJlbCwgSGVh cFR1cGxlICpyb3dzLAohIAkJCQkJaW50IHRhcmdyb3dzLCBkb3VibGUgKnRvdGFscm93cywg ZG91YmxlICp0b3RhbGRlYWRyb3dzLAohIAkJCQkJQmxvY2tOdW1iZXIgKnRvdGFscGFnZXMs IGludCBlbGV2ZWwpOwogIHN0YXRpYyBpbnQJY29tcGFyZV9yb3dzKGNvbnN0IHZvaWQgKmEs IGNvbnN0IHZvaWQgKmIpOwogIHN0YXRpYyBpbnQgYWNxdWlyZV9pbmhlcml0ZWRfc2FtcGxl X3Jvd3MoUmVsYXRpb24gb25lcmVsLAogIAkJCQkJCQkgIEhlYXBUdXBsZSAqcm93cywgaW50 IHRhcmdyb3dzLAohIAkJCQkJCQkgIGRvdWJsZSAqdG90YWxyb3dzLCBkb3VibGUgKnRvdGFs ZGVhZHJvd3MsCiEgCQkJCQkJCSAgQmxvY2tOdW1iZXIgKnRvdGFscGFnZXMsIGludCBlbGV2 ZWwpOwogIHN0YXRpYyB2b2lkIHVwZGF0ZV9hdHRzdGF0cyhPaWQgcmVsaWQsIGJvb2wgaW5o LAogIAkJCQlpbnQgbmF0dHMsIFZhY0F0dHJTdGF0cyAqKnZhY2F0dHJzdGF0cyk7CiAgc3Rh dGljIERhdHVtIHN0ZF9mZXRjaF9mdW5jKFZhY0F0dHJTdGF0c1Agc3RhdHMsIGludCByb3du dW0sIGJvb2wgKmlzTnVsbCk7CioqKioqKioqKioqKioqKiB2b2lkCioqKiAxMTgsMTIzICoq KioKLS0tIDExNywxMjQgLS0tLQogIGFuYWx5emVfcmVsKE9pZCByZWxpZCwgVmFjdXVtU3Rt dCAqdmFjc3RtdCwgQnVmZmVyQWNjZXNzU3RyYXRlZ3kgYnN0cmF0ZWd5KQogIHsKICAJUmVs YXRpb24Jb25lcmVsOworIAlpbnQJCQllbGV2ZWw7CisgCUZkd1JvdXRpbmUgKmZkd3JvdXRp bmU7CiAgCiAgCS8qIFNldCB1cCBzdGF0aWMgdmFyaWFibGVzICovCiAgCWlmICh2YWNzdG10 LT5vcHRpb25zICYgVkFDT1BUX1ZFUkJPU0UpCioqKioqKioqKioqKioqKiBhbmFseXplX3Jl bChPaWQgcmVsaWQsIFZhY3V1bVN0bXQgKnZhY3N0CioqKiAxODIsMTkxICoqKioKICAJfQog IAogIAkvKgohIAkgKiBDaGVjayB0aGF0IGl0J3MgYSBwbGFpbiB0YWJsZTsgd2UgdXNlZCB0 byBkbyB0aGlzIGluIGdldF9yZWxfb2lkcygpIGJ1dAohIAkgKiBzZWVtcyBzYWZlciB0byBj aGVjayBhZnRlciB3ZSd2ZSBsb2NrZWQgdGhlIHJlbGF0aW9uLgogIAkgKi8KISAJaWYgKG9u ZXJlbC0+cmRfcmVsLT5yZWxraW5kICE9IFJFTEtJTkRfUkVMQVRJT04pCiAgCXsKICAJCS8q IE5vIG5lZWQgZm9yIGEgV0FSTklORyBpZiB3ZSBhbHJlYWR5IGNvbXBsYWluZWQgZHVyaW5n IFZBQ1VVTSAqLwogIAkJaWYgKCEodmFjc3RtdC0+b3B0aW9ucyAmIFZBQ09QVF9WQUNVVU0p KQotLS0gMTgzLDE5NCAtLS0tCiAgCX0KICAKICAJLyoKISAJICogQ2hlY2sgdGhhdCBpdCdz IGEgcGxhaW4gdGFibGUgb3IgZm9yZWlnbiB0YWJsZTsgd2UgdXNlZCB0byBkbyB0aGlzCiEg CSAqIGluIGdldF9yZWxfb2lkcygpIGJ1dCBzZWVtcyBzYWZlciB0byBjaGVjayBhZnRlciB3 ZSd2ZSBsb2NrZWQgdGhlCiEgCSAqIHJlbGF0aW9uLgogIAkgKi8KISAJaWYgKG9uZXJlbC0+ cmRfcmVsLT5yZWxraW5kICE9IFJFTEtJTkRfUkVMQVRJT04gJiYKISAJCW9uZXJlbC0+cmRf cmVsLT5yZWxraW5kICE9IFJFTEtJTkRfRk9SRUlHTl9UQUJMRSkKICAJewogIAkJLyogTm8g bmVlZCBmb3IgYSBXQVJOSU5HIGlmIHdlIGFscmVhZHkgY29tcGxhaW5lZCBkdXJpbmcgVkFD VVVNICovCiAgCQlpZiAoISh2YWNzdG10LT5vcHRpb25zICYgVkFDT1BUX1ZBQ1VVTSkpCioq KioqKioqKioqKioqKiBhbmFseXplX3JlbChPaWQgcmVsaWQsIFZhY3V1bVN0bXQgKnZhY3N0 CioqKiAyMDksMjE1ICoqKioKICAJfQogIAogIAkvKgohIAkgKiBXZSBjYW4gQU5BTFlaRSBh bnkgdGFibGUgZXhjZXB0IHBnX3N0YXRpc3RpYy4gU2VlIHVwZGF0ZV9hdHRzdGF0cwogIAkg Ki8KICAJaWYgKFJlbGF0aW9uR2V0UmVsaWQob25lcmVsKSA9PSBTdGF0aXN0aWNSZWxhdGlv bklkKQogIAl7Ci0tLSAyMTIsMjIwIC0tLS0KICAJfQogIAogIAkvKgohIAkgKiBXZSBjYW4g QU5BTFlaRSBhbnkgdGFibGUgZXhjZXB0IHBnX3N0YXRpc3RpYy4gIFNlZSB1cGRhdGVfYXR0 c3RhdHMuCiEgCSAqIEluIGFkZGl0aW9uLCB3ZSBjYW4gQU5BTFlaRSBmb3JlaWduIHRhYmxl cyBpZiBBbmFseXplRm9yZWlnblRhYmxlCiEgCSAqIGNhbGxiYWNrIHJvdXRpbmVzIG9mIHVu ZGVybHlpbmcgZm9yZWlnbi1kYXRhIHdyYXBwZXJzIGFyZSBpbXBsZW1lbnRlZC4KICAJICov CiAgCWlmIChSZWxhdGlvbkdldFJlbGlkKG9uZXJlbCkgPT0gU3RhdGlzdGljUmVsYXRpb25J ZCkKICAJewoqKioqKioqKioqKioqKiogYW5hbHl6ZV9yZWwoT2lkIHJlbGlkLCBWYWN1dW1T dG10ICp2YWNzdAoqKiogMjE3LDIyMiAqKioqCi0tLSAyMjIsMjQxIC0tLS0KICAJCXJldHVy bjsKICAJfQogIAorIAlpZiAob25lcmVsLT5yZF9yZWwtPnJlbGtpbmQgPT0gUkVMS0lORF9G T1JFSUdOX1RBQkxFKQorIAl7CisgIAkJZmR3cm91dGluZSA9IEdldEZkd1JvdXRpbmVCeVJl bElkKFJlbGF0aW9uR2V0UmVsaWQob25lcmVsKSk7CisgCisgCQlpZiAoZmR3cm91dGluZS0+ QW5hbHl6ZUZvcmVpZ25UYWJsZSA9PSBOVUxMKQorIAkJeworIAkJCWVyZXBvcnQoV0FSTklO RywKKyAJCQkJCShlcnJtc2coInNraXBwaW5nIFwiJXNcIiAtLS0gdW5kZXJseWluZyBmb3Jl aWduLWRhdGEgd3JhcHBlciBjYW5ub3QgYW5hbHl6ZSBpdCIsCisgCQkJCQkJCVJlbGF0aW9u R2V0UmVsYXRpb25OYW1lKG9uZXJlbCkpKSk7CisgCQkJcmVsYXRpb25fY2xvc2Uob25lcmVs LCBTaGFyZVVwZGF0ZUV4Y2x1c2l2ZUxvY2spOworIAkJCXJldHVybjsKKyAJCX0KKyAJfQor IAogIAkvKgogIAkgKiBPSywgbGV0J3MgZG8gaXQuICBGaXJzdCBsZXQgb3RoZXIgYmFja2Vu ZHMga25vdyBJJ20gaW4gQU5BTFlaRS4KICAJICovCioqKioqKioqKioqKioqKiBhbmFseXpl X3JlbChPaWQgcmVsaWQsIFZhY3V1bVN0bXQgKnZhY3N0CioqKiAyMjcsMjM5ICoqKioKICAJ LyoKICAJICogRG8gdGhlIG5vcm1hbCBub24tcmVjdXJzaXZlIEFOQUxZWkUuCiAgCSAqLwoh IAlkb19hbmFseXplX3JlbChvbmVyZWwsIHZhY3N0bXQsIGZhbHNlKTsKICAKICAJLyoKICAJ ICogSWYgdGhlcmUgYXJlIGNoaWxkIHRhYmxlcywgZG8gcmVjdXJzaXZlIEFOQUxZWkUuCiAg CSAqLwogIAlpZiAob25lcmVsLT5yZF9yZWwtPnJlbGhhc3N1YmNsYXNzKQohIAkJZG9fYW5h bHl6ZV9yZWwob25lcmVsLCB2YWNzdG10LCB0cnVlKTsKICAKICAJLyoKICAJICogQ2xvc2Ug c291cmNlIHJlbGF0aW9uIG5vdywgYnV0IGtlZXAgbG9jayBzbyB0aGF0IG5vIG9uZSBkZWxl dGVzIGl0Ci0tLSAyNDYsMjczIC0tLS0KICAJLyoKICAJICogRG8gdGhlIG5vcm1hbCBub24t cmVjdXJzaXZlIEFOQUxZWkUuCiAgCSAqLwohIAllcmVwb3J0KGVsZXZlbCwKISAJCQkoZXJy bXNnKCJhbmFseXppbmcgXCIlcy4lc1wiIiwKISAJCQkJCWdldF9uYW1lc3BhY2VfbmFtZShS ZWxhdGlvbkdldE5hbWVzcGFjZShvbmVyZWwpKSwKISAJCQkJCVJlbGF0aW9uR2V0UmVsYXRp b25OYW1lKG9uZXJlbCkpKSk7CiEgCiEgCWlmIChvbmVyZWwtPnJkX3JlbC0+cmVsa2luZCA9 PSBSRUxLSU5EX0ZPUkVJR05fVEFCTEUpCiEgCQlmZHdyb3V0aW5lLT5BbmFseXplRm9yZWln blRhYmxlKG9uZXJlbCwgdmFjc3RtdCwgZWxldmVsKTsKISAJZWxzZQohIAkJZG9fYW5hbHl6 ZV9yZWwob25lcmVsLCB2YWNzdG10LCBlbGV2ZWwsIGZhbHNlLCBhY3F1aXJlX3NhbXBsZV9y b3dzKTsKICAKICAJLyoKICAJICogSWYgdGhlcmUgYXJlIGNoaWxkIHRhYmxlcywgZG8gcmVj dXJzaXZlIEFOQUxZWkUuCiAgCSAqLwogIAlpZiAob25lcmVsLT5yZF9yZWwtPnJlbGhhc3N1 YmNsYXNzKQohIAl7CiEgCQllcmVwb3J0KGVsZXZlbCwKISAJCQkJKGVycm1zZygiYW5hbHl6 aW5nIFwiJXMuJXNcIiBpbmhlcml0YW5jZSB0cmVlIiwKISAJCQkJCQlnZXRfbmFtZXNwYWNl X25hbWUoUmVsYXRpb25HZXROYW1lc3BhY2Uob25lcmVsKSksCiEgCQkJCQkJUmVsYXRpb25H ZXRSZWxhdGlvbk5hbWUob25lcmVsKSkpKTsKISAJCWRvX2FuYWx5emVfcmVsKG9uZXJlbCwg dmFjc3RtdCwgZWxldmVsLCB0cnVlLAohIAkJCQkJICAgYWNxdWlyZV9pbmhlcml0ZWRfc2Ft cGxlX3Jvd3MpOwohIAl9CiAgCiAgCS8qCiAgCSAqIENsb3NlIHNvdXJjZSByZWxhdGlvbiBu b3csIGJ1dCBrZWVwIGxvY2sgc28gdGhhdCBubyBvbmUgZGVsZXRlcyBpdAoqKioqKioqKioq KioqKiogYW5hbHl6ZV9yZWwoT2lkIHJlbGlkLCBWYWN1dW1TdG10ICp2YWNzdAoqKiogMjU1 LDI2MiAqKioqCiAgLyoKICAgKglkb19hbmFseXplX3JlbCgpIC0tIGFuYWx5emUgb25lIHJl bGF0aW9uLCByZWN1cnNpdmVseSBvciBub3QKICAgKi8KISBzdGF0aWMgdm9pZAohIGRvX2Fu YWx5emVfcmVsKFJlbGF0aW9uIG9uZXJlbCwgVmFjdXVtU3RtdCAqdmFjc3RtdCwgYm9vbCBp bmgpCiAgewogIAlpbnQJCQlhdHRyX2NudCwKICAJCQkJdGNudCwKLS0tIDI4OSwyOTcgLS0t LQogIC8qCiAgICoJZG9fYW5hbHl6ZV9yZWwoKSAtLSBhbmFseXplIG9uZSByZWxhdGlvbiwg cmVjdXJzaXZlbHkgb3Igbm90CiAgICovCiEgdm9pZAohIGRvX2FuYWx5emVfcmVsKFJlbGF0 aW9uIG9uZXJlbCwgVmFjdXVtU3RtdCAqdmFjc3RtdCwgaW50IGVsZXZlbCwgCiEgCQkJICAg Ym9vbCBpbmgsIFNhbXBsZVJvd0FjcXVpcmVGdW5jIGFjcXVpcmVmdW5jKQogIHsKICAJaW50 CQkJYXR0cl9jbnQsCiAgCQkJCXRjbnQsCioqKioqKioqKioqKioqKiBkb19hbmFseXplX3Jl bChSZWxhdGlvbiBvbmVyZWwsIFZhY3V1bVN0CioqKiAyNzEsMjc2ICoqKioKLS0tIDMwNiwz MTIgLS0tLQogIAkJCQludW1yb3dzOwogIAlkb3VibGUJCXRvdGFscm93cywKICAJCQkJdG90 YWxkZWFkcm93czsKKyAJQmxvY2tOdW1iZXIgdG90YWxwYWdlczsKICAJSGVhcFR1cGxlICAq cm93czsKICAJUEdSVXNhZ2UJcnUwOwogIAlUaW1lc3RhbXBUeiBzdGFydHRpbWUgPSAwOwoq KioqKioqKioqKioqKiogZG9fYW5hbHl6ZV9yZWwoUmVsYXRpb24gb25lcmVsLCBWYWN1dW1T dAoqKiogMjc5LDI5NSAqKioqCiAgCWludAkJCXNhdmVfc2VjX2NvbnRleHQ7CiAgCWludAkJ CXNhdmVfbmVzdGxldmVsOwogIAotIAlpZiAoaW5oKQotIAkJZXJlcG9ydChlbGV2ZWwsCi0g CQkJCShlcnJtc2coImFuYWx5emluZyBcIiVzLiVzXCIgaW5oZXJpdGFuY2UgdHJlZSIsCi0g CQkJCQkJZ2V0X25hbWVzcGFjZV9uYW1lKFJlbGF0aW9uR2V0TmFtZXNwYWNlKG9uZXJlbCkp LAotIAkJCQkJCVJlbGF0aW9uR2V0UmVsYXRpb25OYW1lKG9uZXJlbCkpKSk7Ci0gCWVsc2UK LSAJCWVyZXBvcnQoZWxldmVsLAotIAkJCQkoZXJybXNnKCJhbmFseXppbmcgXCIlcy4lc1wi IiwKLSAJCQkJCQlnZXRfbmFtZXNwYWNlX25hbWUoUmVsYXRpb25HZXROYW1lc3BhY2Uob25l cmVsKSksCi0gCQkJCQkJUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUob25lcmVsKSkpKTsKLSAK ICAJLyoKICAJICogU2V0IHVwIGEgd29ya2luZyBjb250ZXh0IHNvIHRoYXQgd2UgY2FuIGVh c2lseSBmcmVlIHdoYXRldmVyIGp1bmsgZ2V0cwogIAkgKiBjcmVhdGVkLgotLS0gMzE1LDMy MCAtLS0tCioqKioqKioqKioqKioqKiBkb19hbmFseXplX3JlbChSZWxhdGlvbiBvbmVyZWws IFZhY3V1bVN0CioqKiA0NDcsNDU3ICoqKioKICAJICovCiAgCXJvd3MgPSAoSGVhcFR1cGxl ICopIHBhbGxvYyh0YXJncm93cyAqIHNpemVvZihIZWFwVHVwbGUpKTsKICAJaWYgKGluaCkK ISAJCW51bXJvd3MgPSBhY3F1aXJlX2luaGVyaXRlZF9zYW1wbGVfcm93cyhvbmVyZWwsIHJv d3MsIHRhcmdyb3dzLAohIAkJCQkJCQkJCQkJCSZ0b3RhbHJvd3MsICZ0b3RhbGRlYWRyb3dz KTsKICAJZWxzZQohIAkJbnVtcm93cyA9IGFjcXVpcmVfc2FtcGxlX3Jvd3Mob25lcmVsLCBy b3dzLCB0YXJncm93cywKISAJCQkJCQkJCQkgICZ0b3RhbHJvd3MsICZ0b3RhbGRlYWRyb3dz KTsKICAKICAJLyoKICAJICogQ29tcHV0ZSB0aGUgc3RhdGlzdGljcy4JVGVtcG9yYXJ5IHJl c3VsdHMgZHVyaW5nIHRoZSBjYWxjdWxhdGlvbnMgZm9yCi0tLSA0NzIsNDg0IC0tLS0KICAJ ICovCiAgCXJvd3MgPSAoSGVhcFR1cGxlICopIHBhbGxvYyh0YXJncm93cyAqIHNpemVvZihI ZWFwVHVwbGUpKTsKICAJaWYgKGluaCkKISAJCW51bXJvd3MgPSBhY3F1aXJlZnVuYyhvbmVy ZWwsIHJvd3MsIHRhcmdyb3dzLAohIAkJCQkJCQkgICZ0b3RhbHJvd3MsICZ0b3RhbGRlYWRy b3dzLAohIAkJCQkJCQkgIE5VTEwsIGVsZXZlbCk7CiAgCWVsc2UKISAJCW51bXJvd3MgPSBh Y3F1aXJlZnVuYyhvbmVyZWwsIHJvd3MsIHRhcmdyb3dzLAohIAkJCQkJCQkgICZ0b3RhbHJv d3MsICZ0b3RhbGRlYWRyb3dzLAohIAkJCQkJCQkgICZ0b3RhbHBhZ2VzLCBlbGV2ZWwpOwog IAogIAkvKgogIAkgKiBDb21wdXRlIHRoZSBzdGF0aXN0aWNzLglUZW1wb3JhcnkgcmVzdWx0 cyBkdXJpbmcgdGhlIGNhbGN1bGF0aW9ucyBmb3IKKioqKioqKioqKioqKioqIGRvX2FuYWx5 emVfcmVsKFJlbGF0aW9uIG9uZXJlbCwgVmFjdXVtU3QKKioqIDUzMiw1MzggKioqKgogIAkg Ki8KICAJaWYgKCFpbmgpCiAgCQl2YWNfdXBkYXRlX3JlbHN0YXRzKG9uZXJlbCwKISAJCQkJ CQkJUmVsYXRpb25HZXROdW1iZXJPZkJsb2NrcyhvbmVyZWwpLAogIAkJCQkJCQl0b3RhbHJv d3MsCiAgCQkJCQkJCXZpc2liaWxpdHltYXBfY291bnQob25lcmVsKSwKICAJCQkJCQkJaGFz aW5kZXgsCi0tLSA1NTksNTY1IC0tLS0KICAJICovCiAgCWlmICghaW5oKQogIAkJdmFjX3Vw ZGF0ZV9yZWxzdGF0cyhvbmVyZWwsCiEgCQkJCQkJCXRvdGFscGFnZXMsCiAgCQkJCQkJCXRv dGFscm93cywKICAJCQkJCQkJdmlzaWJpbGl0eW1hcF9jb3VudChvbmVyZWwpLAogIAkJCQkJ CQloYXNpbmRleCwKKioqKioqKioqKioqKioqIEJsb2NrU2FtcGxlcl9OZXh0KEJsb2NrU2Ft cGxlciBicykKKioqIDEwMTUsMTAyMSAqKioqCiAgICovCiAgc3RhdGljIGludAogIGFjcXVp cmVfc2FtcGxlX3Jvd3MoUmVsYXRpb24gb25lcmVsLCBIZWFwVHVwbGUgKnJvd3MsIGludCB0 YXJncm93cywKISAJCQkJCWRvdWJsZSAqdG90YWxyb3dzLCBkb3VibGUgKnRvdGFsZGVhZHJv d3MpCiAgewogIAlpbnQJCQludW1yb3dzID0gMDsJLyogIyByb3dzIG5vdyBpbiByZXNlcnZv aXIgKi8KICAJZG91YmxlCQlzYW1wbGVyb3dzID0gMDsgLyogdG90YWwgIyByb3dzIGNvbGxl Y3RlZCAqLwotLS0gMTA0MiwxMDQ5IC0tLS0KICAgKi8KICBzdGF0aWMgaW50CiAgYWNxdWly ZV9zYW1wbGVfcm93cyhSZWxhdGlvbiBvbmVyZWwsIEhlYXBUdXBsZSAqcm93cywgaW50IHRh cmdyb3dzLAohIAkJCQkJZG91YmxlICp0b3RhbHJvd3MsIGRvdWJsZSAqdG90YWxkZWFkcm93 cywKISAJCQkJCUJsb2NrTnVtYmVyICp0b3RhbHBhZ2VzLCBpbnQgZWxldmVsKQogIHsKICAJ aW50CQkJbnVtcm93cyA9IDA7CS8qICMgcm93cyBub3cgaW4gcmVzZXJ2b2lyICovCiAgCWRv dWJsZQkJc2FtcGxlcm93cyA9IDA7IC8qIHRvdGFsICMgcm93cyBjb2xsZWN0ZWQgKi8KKioq KioqKioqKioqKioqIGFjcXVpcmVfc2FtcGxlX3Jvd3MoUmVsYXRpb24gb25lcmVsLCBIZWEK KioqIDEwMzAsMTAzNSAqKioqCi0tLSAxMDU4LDEwNjUgLS0tLQogIAlBc3NlcnQodGFyZ3Jv d3MgPiAwKTsKICAKICAJdG90YWxibG9ja3MgPSBSZWxhdGlvbkdldE51bWJlck9mQmxvY2tz KG9uZXJlbCk7CisgCWlmICh0b3RhbHBhZ2VzKQorIAkJKnRvdGFscGFnZXMgPSB0b3RhbGJs b2NrczsKICAKICAJLyogTmVlZCBhIGN1dG9mZiB4bWluIGZvciBIZWFwVHVwbGVTYXRpc2Zp ZXNWYWN1dW0gKi8KICAJT2xkZXN0WG1pbiA9IEdldE9sZGVzdFhtaW4ob25lcmVsLT5yZF9y ZWwtPnJlbGlzc2hhcmVkLCB0cnVlKTsKKioqKioqKioqKioqKioqIGFjcXVpcmVfc2FtcGxl X3Jvd3MoUmVsYXRpb24gb25lcmVsLCBIZWEKKioqIDEyNTIsMTI1OCAqKioqCiAgfQogIAog IC8qIFNlbGVjdCBhIHJhbmRvbSB2YWx1ZSBSIHVuaWZvcm1seSBkaXN0cmlidXRlZCBpbiAo MCAtIDEpICovCiEgc3RhdGljIGRvdWJsZQogIHJhbmRvbV9mcmFjdCh2b2lkKQogIHsKICAJ cmV0dXJuICgoZG91YmxlKSByYW5kb20oKSArIDEpIC8gKChkb3VibGUpIE1BWF9SQU5ET01f VkFMVUUgKyAyKTsKLS0tIDEyODIsMTI4OCAtLS0tCiAgfQogIAogIC8qIFNlbGVjdCBhIHJh bmRvbSB2YWx1ZSBSIHVuaWZvcm1seSBkaXN0cmlidXRlZCBpbiAoMCAtIDEpICovCiEgZG91 YmxlCiAgcmFuZG9tX2ZyYWN0KHZvaWQpCiAgewogIAlyZXR1cm4gKChkb3VibGUpIHJhbmRv bSgpICsgMSkgLyAoKGRvdWJsZSkgTUFYX1JBTkRPTV9WQUxVRSArIDIpOwoqKioqKioqKioq KioqKiogcmFuZG9tX2ZyYWN0KHZvaWQpCioqKiAxMjcyLDEyODUgKioqKgogICAqIGRldGVy bWluZXMgdGhlIG51bWJlciBvZiByZWNvcmRzIHRvIHNraXAgYmVmb3JlIHRoZSBuZXh0IHJl Y29yZCBpcwogICAqIHByb2Nlc3NlZC4KICAgKi8KISBzdGF0aWMgZG91YmxlCiAgaW5pdF9z ZWxlY3Rpb25fc3RhdGUoaW50IG4pCiAgewogIAkvKiBJbml0aWFsIHZhbHVlIG9mIFcgKGZv ciB1c2Ugd2hlbiBBbGdvcml0aG0gWiBpcyBmaXJzdCBhcHBsaWVkKSAqLwogIAlyZXR1cm4g ZXhwKC1sb2cocmFuZG9tX2ZyYWN0KCkpIC8gbik7CiAgfQogIAohIHN0YXRpYyBkb3VibGUK ICBnZXRfbmV4dF9TKGRvdWJsZSB0LCBpbnQgbiwgZG91YmxlICpzdGF0ZXB0cikKICB7CiAg CWRvdWJsZQkJUzsKLS0tIDEzMDIsMTMxNSAtLS0tCiAgICogZGV0ZXJtaW5lcyB0aGUgbnVt YmVyIG9mIHJlY29yZHMgdG8gc2tpcCBiZWZvcmUgdGhlIG5leHQgcmVjb3JkIGlzCiAgICog cHJvY2Vzc2VkLgogICAqLwohIGRvdWJsZQogIGluaXRfc2VsZWN0aW9uX3N0YXRlKGludCBu KQogIHsKICAJLyogSW5pdGlhbCB2YWx1ZSBvZiBXIChmb3IgdXNlIHdoZW4gQWxnb3JpdGht IFogaXMgZmlyc3QgYXBwbGllZCkgKi8KICAJcmV0dXJuIGV4cCgtbG9nKHJhbmRvbV9mcmFj dCgpKSAvIG4pOwogIH0KICAKISBkb3VibGUKICBnZXRfbmV4dF9TKGRvdWJsZSB0LCBpbnQg biwgZG91YmxlICpzdGF0ZXB0cikKICB7CiAgCWRvdWJsZQkJUzsKKioqKioqKioqKioqKioq IGNvbXBhcmVfcm93cyhjb25zdCB2b2lkICphLCBjb25zdCB2b2lkICoKKioqIDEzOTUsMTQw MSAqKioqCiAgICovCiAgc3RhdGljIGludAogIGFjcXVpcmVfaW5oZXJpdGVkX3NhbXBsZV9y b3dzKFJlbGF0aW9uIG9uZXJlbCwgSGVhcFR1cGxlICpyb3dzLCBpbnQgdGFyZ3Jvd3MsCiEg CQkJCQkJCSAgZG91YmxlICp0b3RhbHJvd3MsIGRvdWJsZSAqdG90YWxkZWFkcm93cykKICB7 CiAgCUxpc3QJICAgKnRhYmxlT0lEczsKICAJUmVsYXRpb24gICAqcmVsczsKLS0tIDE0MjUs MTQzMiAtLS0tCiAgICovCiAgc3RhdGljIGludAogIGFjcXVpcmVfaW5oZXJpdGVkX3NhbXBs ZV9yb3dzKFJlbGF0aW9uIG9uZXJlbCwgSGVhcFR1cGxlICpyb3dzLCBpbnQgdGFyZ3Jvd3Ms CiEgCQkJCQkJCSAgZG91YmxlICp0b3RhbHJvd3MsIGRvdWJsZSAqdG90YWxkZWFkcm93cywK ISAJCQkJCQkJICBCbG9ja051bWJlciAqdG90YWxwYWdlcywgaW50IGVsZXZlbCkKICB7CiAg CUxpc3QJICAgKnRhYmxlT0lEczsKICAJUmVsYXRpb24gICAqcmVsczsKKioqKioqKioqKioq KioqIGFjcXVpcmVfaW5oZXJpdGVkX3NhbXBsZV9yb3dzKFJlbGF0aW9uIG8KKioqIDE0NTgs MTQ2MyAqKioqCi0tLSAxNDg5LDE0OTYgLS0tLQogIAkJdG90YWxibG9ja3MgKz0gcmVsYmxv Y2tzW25yZWxzXTsKICAJCW5yZWxzKys7CiAgCX0KKyAJaWYgKHRvdGFscGFnZXMpCisgCSAg KnRvdGFscGFnZXMgPSB0b3RhbGJsb2NrczsKICAKICAJLyoKICAJICogTm93IHNhbXBsZSBy b3dzIGZyb20gZWFjaCByZWxhdGlvbiwgcHJvcG9ydGlvbmFsbHkgdG8gaXRzIGZyYWN0aW9u IG9mCioqKioqKioqKioqKioqKiBhY3F1aXJlX2luaGVyaXRlZF9zYW1wbGVfcm93cyhSZWxh dGlvbiBvCioqKiAxNDkxLDE0OTcgKioqKgogIAkJCQkJCQkJCQkJCXJvd3MgKyBudW1yb3dz LAogIAkJCQkJCQkJCQkJCWNoaWxkdGFyZ3Jvd3MsCiAgCQkJCQkJCQkJCQkJJnRyb3dzLAoh IAkJCQkJCQkJCQkJCSZ0ZHJvd3MpOwogIAogIAkJCQkvKiBXZSBtYXkgbmVlZCB0byBjb252 ZXJ0IGZyb20gY2hpbGQncyByb3d0eXBlIHRvIHBhcmVudCdzICovCiAgCQkJCWlmIChjaGls ZHJvd3MgPiAwICYmCi0tLSAxNTI0LDE1MzIgLS0tLQogIAkJCQkJCQkJCQkJCXJvd3MgKyBu dW1yb3dzLAogIAkJCQkJCQkJCQkJCWNoaWxkdGFyZ3Jvd3MsCiAgCQkJCQkJCQkJCQkJJnRy b3dzLAohIAkJCQkJCQkJCQkJCSZ0ZHJvd3MsCiEgCQkJCQkJCQkJCQkJTlVMTCwKISAJCQkJ CQkJCQkJCQllbGV2ZWwpOwogIAogIAkJCQkvKiBXZSBtYXkgbmVlZCB0byBjb252ZXJ0IGZy b20gY2hpbGQncyByb3d0eXBlIHRvIHBhcmVudCdzICovCiAgCQkJCWlmIChjaGlsZHJvd3Mg PiAwICYmCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy90YWJsZWNtZHMuYyBi L3NyYy9iYWNrZW5kL2NvbW1hbmRzL3RhYmxlY21kcy5jCmluZGV4IDk4NTM2ODYuLjMwMzE0 OTYgMTAwNjQ0CioqKiBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3RhYmxlY21kcy5jCi0tLSBi L3NyYy9iYWNrZW5kL2NvbW1hbmRzL3RhYmxlY21kcy5jCioqKioqKioqKioqKioqKiBzdGF0 aWMgdm9pZCBBVFByZXBTZXRTdGF0aXN0aWNzKFJlbGF0aW9uCioqKiAzMjAsMzI1ICoqKioK LS0tIDMyMCwzMjcgLS0tLQogIAkJCQkJTm9kZSAqbmV3VmFsdWUsIExPQ0tNT0RFIGxvY2tt b2RlKTsKICBzdGF0aWMgdm9pZCBBVEV4ZWNTZXRTdGF0aXN0aWNzKFJlbGF0aW9uIHJlbCwg Y29uc3QgY2hhciAqY29sTmFtZSwKICAJCQkJCU5vZGUgKm5ld1ZhbHVlLCBMT0NLTU9ERSBs b2NrbW9kZSk7Cisgc3RhdGljIHZvaWQgQVRQcmVwU2V0T3B0aW9ucyhSZWxhdGlvbiByZWws IGNvbnN0IGNoYXIgKmNvbE5hbWUsCisgCQkJCSBOb2RlICpvcHRpb25zLCBMT0NLTU9ERSBs b2NrbW9kZSk7CiAgc3RhdGljIHZvaWQgQVRFeGVjU2V0T3B0aW9ucyhSZWxhdGlvbiByZWws IGNvbnN0IGNoYXIgKmNvbE5hbWUsCiAgCQkJCSBOb2RlICpvcHRpb25zLCBib29sIGlzUmVz ZXQsIExPQ0tNT0RFIGxvY2ttb2RlKTsKICBzdGF0aWMgdm9pZCBBVEV4ZWNTZXRTdG9yYWdl KFJlbGF0aW9uIHJlbCwgY29uc3QgY2hhciAqY29sTmFtZSwKKioqKioqKioqKioqKioqIEFU UHJlcENtZChMaXN0ICoqd3F1ZXVlLCBSZWxhdGlvbiByZWwsIEEKKioqIDMwMjEsMzAyNyAq KioqCiAgCQkJYnJlYWs7CiAgCQljYXNlIEFUX1NldE9wdGlvbnM6CQkvKiBBTFRFUiBDT0xV TU4gU0VUICggb3B0aW9ucyApICovCiAgCQljYXNlIEFUX1Jlc2V0T3B0aW9uczoJLyogQUxU RVIgQ09MVU1OIFJFU0VUICggb3B0aW9ucyApICovCiEgCQkJQVRTaW1wbGVQZXJtaXNzaW9u cyhyZWwsIEFUVF9UQUJMRSB8IEFUVF9JTkRFWCk7CiAgCQkJLyogVGhpcyBjb21tYW5kIG5l dmVyIHJlY3Vyc2VzICovCiAgCQkJcGFzcyA9IEFUX1BBU1NfTUlTQzsKICAJCQlicmVhazsK LS0tIDMwMjMsMzAzMCAtLS0tCiAgCQkJYnJlYWs7CiAgCQljYXNlIEFUX1NldE9wdGlvbnM6 CQkvKiBBTFRFUiBDT0xVTU4gU0VUICggb3B0aW9ucyApICovCiAgCQljYXNlIEFUX1Jlc2V0 T3B0aW9uczoJLyogQUxURVIgQ09MVU1OIFJFU0VUICggb3B0aW9ucyApICovCiEgCQkJQVRT aW1wbGVQZXJtaXNzaW9ucyhyZWwsIEFUVF9UQUJMRSB8IEFUVF9JTkRFWCB8IEFUVF9GT1JF SUdOX1RBQkxFKTsKISAJCQlBVFByZXBTZXRPcHRpb25zKHJlbCwgY21kLT5uYW1lLCBjbWQt PmRlZiwgbG9ja21vZGUpOwogIAkJCS8qIFRoaXMgY29tbWFuZCBuZXZlciByZWN1cnNlcyAq LwogIAkJCXBhc3MgPSBBVF9QQVNTX01JU0M7CiAgCQkJYnJlYWs7CioqKioqKioqKioqKioq KiBBVFByZXBTZXRTdGF0aXN0aWNzKFJlbGF0aW9uIHJlbCwgY29uc3QgCioqKiA0OTk5LDUw MDggKioqKgogIAkgKiBhbGxvd1N5c3RlbVRhYmxlTW9kcyB0byBiZSB0dXJuZWQgb24uCiAg CSAqLwogIAlpZiAocmVsLT5yZF9yZWwtPnJlbGtpbmQgIT0gUkVMS0lORF9SRUxBVElPTiAm JgohIAkJcmVsLT5yZF9yZWwtPnJlbGtpbmQgIT0gUkVMS0lORF9JTkRFWCkKICAJCWVyZXBv cnQoRVJST1IsCiAgCQkJCShlcnJjb2RlKEVSUkNPREVfV1JPTkdfT0JKRUNUX1RZUEUpLAoh IAkJCQkgZXJybXNnKCJcIiVzXCIgaXMgbm90IGEgdGFibGUgb3IgaW5kZXgiLAogIAkJCQkJ CVJlbGF0aW9uR2V0UmVsYXRpb25OYW1lKHJlbCkpKSk7CiAgCiAgCS8qIFBlcm1pc3Npb25z IGNoZWNrcyAqLwotLS0gNTAwMiw1MDEyIC0tLS0KICAJICogYWxsb3dTeXN0ZW1UYWJsZU1v ZHMgdG8gYmUgdHVybmVkIG9uLgogIAkgKi8KICAJaWYgKHJlbC0+cmRfcmVsLT5yZWxraW5k ICE9IFJFTEtJTkRfUkVMQVRJT04gJiYKISAJCXJlbC0+cmRfcmVsLT5yZWxraW5kICE9IFJF TEtJTkRfSU5ERVggJiYKISAJCXJlbC0+cmRfcmVsLT5yZWxraW5kICE9IFJFTEtJTkRfRk9S RUlHTl9UQUJMRSkKICAJCWVyZXBvcnQoRVJST1IsCiAgCQkJCShlcnJjb2RlKEVSUkNPREVf V1JPTkdfT0JKRUNUX1RZUEUpLAohIAkJCQkgZXJybXNnKCJcIiVzXCIgaXMgbm90IGEgdGFi bGUsIGluZGV4IG9yIGZvcmVpZ24gdGFibGUiLAogIAkJCQkJCVJlbGF0aW9uR2V0UmVsYXRp b25OYW1lKHJlbCkpKSk7CiAgCiAgCS8qIFBlcm1pc3Npb25zIGNoZWNrcyAqLwoqKioqKioq KioqKioqKiogQVRFeGVjU2V0U3RhdGlzdGljcyhSZWxhdGlvbiByZWwsIGNvbnN0IAoqKiog NTA3MSw1MDc2ICoqKioKLS0tIDUwNzUsNTEwMCAtLS0tCiAgfQogIAogIHN0YXRpYyB2b2lk CisgQVRQcmVwU2V0T3B0aW9ucyhSZWxhdGlvbiByZWwsIGNvbnN0IGNoYXIgKmNvbE5hbWUs IE5vZGUgKm9wdGlvbnMsCisgCQkJCSBMT0NLTU9ERSBsb2NrbW9kZSkKKyB7CisgCWlmIChy ZWwtPnJkX3JlbC0+cmVsa2luZCA9PSBSRUxLSU5EX0ZPUkVJR05fVEFCTEUpCisgCXsKKyAJ CUxpc3RDZWxsICAgKmNlbGw7CisgCisgCQlmb3JlYWNoKGNlbGwsIChMaXN0ICopIG9wdGlv bnMpCisgCQl7CisgCQkJRGVmRWxlbSAgICAqZGVmID0gKERlZkVsZW0gKikgbGZpcnN0KGNl bGwpOworIAorIAkJCWlmIChwZ19zdHJjYXNlY21wKGRlZi0+ZGVmbmFtZSwgIm5fZGlzdGlu Y3RfaW5oZXJpdGVkIikgPT0gMCkKKyAJCQkJZXJlcG9ydChFUlJPUiwKKyAJCQkJCQkoZXJy Y29kZShFUlJDT0RFX0ZFQVRVUkVfTk9UX1NVUFBPUlRFRCksCisgCQkJCQkJIGVycm1zZygi Y2Fubm90IHNldCBcIm5fZGlzdGluY3RfaW5oZXJpdGVkXCIgZm9yIGZvcmVpZ24gdGFibGVz IikpKTsKKyAJCX0KKyAJfQorIH0KKyAKKyBzdGF0aWMgdm9pZAogIEFURXhlY1NldE9wdGlv bnMoUmVsYXRpb24gcmVsLCBjb25zdCBjaGFyICpjb2xOYW1lLCBOb2RlICpvcHRpb25zLAog IAkJCQkgYm9vbCBpc1Jlc2V0LCBMT0NLTU9ERSBsb2NrbW9kZSkKICB7CmRpZmYgLS1naXQg YS9zcmMvYmluL3BzcWwvZGVzY3JpYmUuYyBiL3NyYy9iaW4vcHNxbC9kZXNjcmliZS5jCmlu ZGV4IGRjMjI0OGIuLmIzZDIwNzggMTAwNjQ0CioqKiBhL3NyYy9iaW4vcHNxbC9kZXNjcmli ZS5jCi0tLSBiL3NyYy9iaW4vcHNxbC9kZXNjcmliZS5jCioqKioqKioqKioqKioqKiBkZXNj cmliZU9uZVRhYmxlRGV0YWlscyhjb25zdCBjaGFyICpzY2hlCioqKiAxMTA0LDExMTAgKioq KgogIAlib29sCQlwcmludFRhYmxlSW5pdGlhbGl6ZWQgPSBmYWxzZTsKICAJaW50CQkJaTsK ICAJY2hhcgkgICAqdmlld19kZWYgPSBOVUxMOwohIAljaGFyCSAgICpoZWFkZXJzWzZdOwog IAljaGFyCSAgKipzZXFfdmFsdWVzID0gTlVMTDsKICAJY2hhcgkgICoqbW9kaWZpZXJzID0g TlVMTDsKICAJY2hhcgkgICoqcHRyOwotLS0gMTEwNCwxMTEwIC0tLS0KICAJYm9vbAkJcHJp bnRUYWJsZUluaXRpYWxpemVkID0gZmFsc2U7CiAgCWludAkJCWk7CiAgCWNoYXIJICAgKnZp ZXdfZGVmID0gTlVMTDsKISAJY2hhcgkgICAqaGVhZGVyc1s3XTsKICAJY2hhcgkgICoqc2Vx X3ZhbHVlcyA9IE5VTEw7CiAgCWNoYXIJICAqKm1vZGlmaWVycyA9IE5VTEw7CiAgCWNoYXIJ ICAqKnB0cjsKKioqKioqKioqKioqKioqIGRlc2NyaWJlT25lVGFibGVEZXRhaWxzKGNvbnN0 IGNoYXIgKnNjaGUKKioqIDEzOTUsMTQwMSAqKioqCiAgCWlmICh2ZXJib3NlKQogIAl7CiAg CQloZWFkZXJzW2NvbHMrK10gPSBnZXR0ZXh0X25vb3AoIlN0b3JhZ2UiKTsKISAJCWlmICh0 YWJsZWluZm8ucmVsa2luZCA9PSAncicpCiAgCQkJaGVhZGVyc1tjb2xzKytdID0gZ2V0dGV4 dF9ub29wKCJTdGF0cyB0YXJnZXQiKTsKICAJCS8qIENvbHVtbiBjb21tZW50cywgaWYgdGhl IHJlbGtpbmQgc3VwcG9ydHMgdGhpcyBmZWF0dXJlLiAqLwogIAkJaWYgKHRhYmxlaW5mby5y ZWxraW5kID09ICdyJyB8fCB0YWJsZWluZm8ucmVsa2luZCA9PSAndicgfHwKLS0tIDEzOTUs MTQwMSAtLS0tCiAgCWlmICh2ZXJib3NlKQogIAl7CiAgCQloZWFkZXJzW2NvbHMrK10gPSBn ZXR0ZXh0X25vb3AoIlN0b3JhZ2UiKTsKISAJCWlmICh0YWJsZWluZm8ucmVsa2luZCA9PSAn cicgfHwgdGFibGVpbmZvLnJlbGtpbmQgPT0gJ2YnKQogIAkJCWhlYWRlcnNbY29scysrXSA9 IGdldHRleHRfbm9vcCgiU3RhdHMgdGFyZ2V0Iik7CiAgCQkvKiBDb2x1bW4gY29tbWVudHMs IGlmIHRoZSByZWxraW5kIHN1cHBvcnRzIHRoaXMgZmVhdHVyZS4gKi8KICAJCWlmICh0YWJs ZWluZm8ucmVsa2luZCA9PSAncicgfHwgdGFibGVpbmZvLnJlbGtpbmQgPT0gJ3YnIHx8Cioq KioqKioqKioqKioqKiBkZXNjcmliZU9uZVRhYmxlRGV0YWlscyhjb25zdCBjaGFyICpzY2hl CioqKiAxNDk4LDE1MDQgKioqKgogIAkJCQkJCQkgIGZhbHNlLCBmYWxzZSk7CiAgCiAgCQkJ LyogU3RhdGlzdGljcyB0YXJnZXQsIGlmIHRoZSByZWxraW5kIHN1cHBvcnRzIHRoaXMgZmVh dHVyZSAqLwohIAkJCWlmICh0YWJsZWluZm8ucmVsa2luZCA9PSAncicpCiAgCQkJewogIAkJ CQlwcmludFRhYmxlQWRkQ2VsbCgmY29udCwgUFFnZXR2YWx1ZShyZXMsIGksIGZpcnN0dmNv bCArIDEpLAogIAkJCQkJCQkJICBmYWxzZSwgZmFsc2UpOwotLS0gMTQ5OCwxNTA0IC0tLS0K ICAJCQkJCQkJICBmYWxzZSwgZmFsc2UpOwogIAogIAkJCS8qIFN0YXRpc3RpY3MgdGFyZ2V0 LCBpZiB0aGUgcmVsa2luZCBzdXBwb3J0cyB0aGlzIGZlYXR1cmUgKi8KISAJCQlpZiAodGFi bGVpbmZvLnJlbGtpbmQgPT0gJ3InIHx8IHRhYmxlaW5mby5yZWxraW5kID09ICdmJykKICAJ CQl7CiAgCQkJCXByaW50VGFibGVBZGRDZWxsKCZjb250LCBQUWdldHZhbHVlKHJlcywgaSwg Zmlyc3R2Y29sICsgMSksCiAgCQkJCQkJCQkgIGZhbHNlLCBmYWxzZSk7CmRpZmYgLS1naXQg YS9zcmMvYmluL3BzcWwvdGFiLWNvbXBsZXRlLmMgYi9zcmMvYmluL3BzcWwvdGFiLWNvbXBs ZXRlLmMKaW5kZXggOTc1ZDY1NS4uZDExM2FkZiAxMDA2NDQKKioqIGEvc3JjL2Jpbi9wc3Fs L3RhYi1jb21wbGV0ZS5jCi0tLSBiL3NyYy9iaW4vcHNxbC90YWItY29tcGxldGUuYwoqKioq KioqKioqKioqKiogc3RhdGljIGNvbnN0IFNjaGVtYVF1ZXJ5IFF1ZXJ5X2Zvcl9saXN0Xwoq KiogNDA5LDQxNCAqKioqCi0tLSA0MDksNDI5IC0tLS0KICAJTlVMTAogIH07CiAgCisgc3Rh dGljIGNvbnN0IFNjaGVtYVF1ZXJ5IFF1ZXJ5X2Zvcl9saXN0X29mX3RmID0geworIAkvKiBj YXRuYW1lICovCisgCSJwZ19jYXRhbG9nLnBnX2NsYXNzIGMiLAorIAkvKiBzZWxjb25kaXRp b24gKi8KKyAJImMucmVsa2luZCBJTiAoJ3InLCAnZicpIiwKKyAJLyogdmlzY29uZGl0aW9u ICovCisgCSJwZ19jYXRhbG9nLnBnX3RhYmxlX2lzX3Zpc2libGUoYy5vaWQpIiwKKyAJLyog bmFtZXNwYWNlICovCisgCSJjLnJlbG5hbWVzcGFjZSIsCisgCS8qIHJlc3VsdCAqLworIAki cGdfY2F0YWxvZy5xdW90ZV9pZGVudChjLnJlbG5hbWUpIiwKKyAJLyogcXVhbHJlc3VsdCAq LworIAlOVUxMCisgfTsKKyAKICBzdGF0aWMgY29uc3QgU2NoZW1hUXVlcnkgUXVlcnlfZm9y X2xpc3Rfb2Zfdmlld3MgPSB7CiAgCS8qIGNhdG5hbWUgKi8KICAJInBnX2NhdGFsb2cucGdf Y2xhc3MgYyIsCioqKioqKioqKioqKioqKiBwc3FsX2NvbXBsZXRpb24oY2hhciAqdGV4dCwg aW50IHN0YXJ0LCBpCioqKiAyODMzLDI4MzkgKioqKgogIC8qIEFOQUxZWkUgKi8KICAJLyog SWYgdGhlIHByZXZpb3VzIHdvcmQgaXMgQU5BTFlaRSwgcHJvZHVjZSBsaXN0IG9mIHRhYmxl cyAqLwogIAllbHNlIGlmIChwZ19zdHJjYXNlY21wKHByZXZfd2QsICJBTkFMWVpFIikgPT0g MCkKISAJCUNPTVBMRVRFX1dJVEhfU0NIRU1BX1FVRVJZKFF1ZXJ5X2Zvcl9saXN0X29mX3Rh YmxlcywgTlVMTCk7CiAgCiAgLyogV0hFUkUgKi8KICAJLyogU2ltcGxlIGNhc2Ugb2YgdGhl IHdvcmQgYmVmb3JlIHRoZSB3aGVyZSBiZWluZyB0aGUgdGFibGUgbmFtZSAqLwotLS0gMjg0 OCwyODU0IC0tLS0KICAvKiBBTkFMWVpFICovCiAgCS8qIElmIHRoZSBwcmV2aW91cyB3b3Jk IGlzIEFOQUxZWkUsIHByb2R1Y2UgbGlzdCBvZiB0YWJsZXMgKi8KICAJZWxzZSBpZiAocGdf c3RyY2FzZWNtcChwcmV2X3dkLCAiQU5BTFlaRSIpID09IDApCiEgCQlDT01QTEVURV9XSVRI X1NDSEVNQV9RVUVSWShRdWVyeV9mb3JfbGlzdF9vZl90ZiwgTlVMTCk7CiAgCiAgLyogV0hF UkUgKi8KICAJLyogU2ltcGxlIGNhc2Ugb2YgdGhlIHdvcmQgYmVmb3JlIHRoZSB3aGVyZSBi ZWluZyB0aGUgdGFibGUgbmFtZSAqLwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvY29tbWFu ZHMvdmFjdXVtLmggYi9zcmMvaW5jbHVkZS9jb21tYW5kcy92YWN1dW0uaAppbmRleCAzZGVl ZTY2Li4zZTg5ZTgyIDEwMDY0NAoqKiogYS9zcmMvaW5jbHVkZS9jb21tYW5kcy92YWN1dW0u aAotLS0gYi9zcmMvaW5jbHVkZS9jb21tYW5kcy92YWN1dW0uaAoqKioqKioqKioqKioqKiog ZXh0ZXJuIHZvaWQgbGF6eV92YWN1dW1fcmVsKFJlbGF0aW9uIG9uZQoqKiogMTcwLDE3NCAq KioqCi0tLSAxNzAsMTgzIC0tLS0KICBleHRlcm4gdm9pZCBhbmFseXplX3JlbChPaWQgcmVs aWQsIFZhY3V1bVN0bXQgKnZhY3N0bXQsCiAgCQkJQnVmZmVyQWNjZXNzU3RyYXRlZ3kgYnN0 cmF0ZWd5KTsKICBleHRlcm4gYm9vbCBzdGRfdHlwYW5hbHl6ZShWYWNBdHRyU3RhdHMgKnN0 YXRzKTsKKyB0eXBlZGVmIGludCAoKlNhbXBsZVJvd0FjcXVpcmVGdW5jKSAoUmVsYXRpb24g b25lcmVsLCBIZWFwVHVwbGUgKnJvd3MsCisgCQkJCQkJCQkJIGludCB0YXJncm93cywgZG91 YmxlICp0b3RhbHJvd3MsCisgCQkJCQkJCQkJIGRvdWJsZSAqdG90YWxkZWFkcm93cywKKyAJ CQkJCQkJCQkgQmxvY2tOdW1iZXIgKnRvdGFscGFnZXMsIGludCBlbGV2ZWwpOworIGV4dGVy biB2b2lkIGRvX2FuYWx5emVfcmVsKFJlbGF0aW9uIG9uZXJlbCwgVmFjdXVtU3RtdCAqdmFj c3RtdCwgaW50IGVsZXZlbCwKKyAJCQkJCQkgICBib29sIGluaCwgU2FtcGxlUm93QWNxdWly ZUZ1bmMgYWNxdWlyZWZ1bmMpOworIGV4dGVybiBkb3VibGUgcmFuZG9tX2ZyYWN0KHZvaWQp OworIGV4dGVybiBkb3VibGUgaW5pdF9zZWxlY3Rpb25fc3RhdGUoaW50IG4pOworIGV4dGVy biBkb3VibGUgZ2V0X25leHRfUyhkb3VibGUgdCwgaW50IG4sIGRvdWJsZSAqc3RhdGVwdHIp OwogIAogICNlbmRpZiAgIC8qIFZBQ1VVTV9IICovCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVk ZS9mb3JlaWduL2Zkd2FwaS5oIGIvc3JjL2luY2x1ZGUvZm9yZWlnbi9mZHdhcGkuaAppbmRl eCA4NTRmMTc3Li5kNzE4MWM3IDEwMDY0NAoqKiogYS9zcmMvaW5jbHVkZS9mb3JlaWduL2Zk d2FwaS5oCi0tLSBiL3NyYy9pbmNsdWRlL2ZvcmVpZ24vZmR3YXBpLmgKKioqKioqKioqKioq KioqCioqKiAxMiwxOSAqKioqCi0tLSAxMiwyMSAtLS0tCiAgI2lmbmRlZiBGRFdBUElfSAog ICNkZWZpbmUgRkRXQVBJX0gKICAKKyAjaW5jbHVkZSAiZm9yZWlnbi9mb3JlaWduLmgiCiAg I2luY2x1ZGUgIm5vZGVzL2V4ZWNub2Rlcy5oIgogICNpbmNsdWRlICJub2Rlcy9yZWxhdGlv bi5oIgorICNpbmNsdWRlICJ1dGlscy9yZWwuaCIKICAKICAvKiBUbyBhdm9pZCBpbmNsdWRp bmcgZXhwbGFpbi5oIGhlcmUsIHJlZmVyZW5jZSBFeHBsYWluU3RhdGUgdGh1czogKi8KICBz dHJ1Y3QgRXhwbGFpblN0YXRlOwoqKioqKioqKioqKioqKiogdHlwZWRlZiB2b2lkICgqUmVT Y2FuRm9yZWlnblNjYW5fZnVuY3RpbwoqKiogNTAsNTUgKioqKgotLS0gNTIsNjAgLS0tLQog IAogIHR5cGVkZWYgdm9pZCAoKkVuZEZvcmVpZ25TY2FuX2Z1bmN0aW9uKSAoRm9yZWlnblNj YW5TdGF0ZSAqbm9kZSk7CiAgCisgdHlwZWRlZiB2b2lkICgqQW5hbHl6ZUZvcmVpZ25UYWJs ZV9mdW5jdGlvbikgKFJlbGF0aW9uIHJlbGF0aW9uLAorIAkJCQkJCQkJCQkJICBWYWN1dW1T dG10ICp2YWNzdG10LAorIAkJCQkJCQkJCQkJICBpbnQgZWxldmVsKTsKICAKICAvKgogICAq IEZkd1JvdXRpbmUgaXMgdGhlIHN0cnVjdCByZXR1cm5lZCBieSBhIGZvcmVpZ24tZGF0YSB3 cmFwcGVyJ3MgaGFuZGxlcgoqKioqKioqKioqKioqKiogdHlwZWRlZiBzdHJ1Y3QgRmR3Um91 dGluZQoqKiogNjQsNjkgKioqKgotLS0gNjksNzggLS0tLQogIHsKICAJTm9kZVRhZwkJdHlw ZTsKICAKKyAJLyoKKyAJICogVGhlc2UgaGFuZGxlcnMgYXJlIHJlcXVpcmVkIHRvIGV4ZWN1 dGUgYSBzY2FuIG9uIGEgZm9yZWlnbiB0YWJsZS4gIElmCisgCSAqIGFueSBvZiB0aGVtIHdh cyBOVUxMLCBzY2FucyBvbiBhIGZvcmVpZ24gdGFibGUgbWFuYWdlZCBieSBzdWNoIEZEVyBm YWlsLgorIAkgKi8KICAJR2V0Rm9yZWlnblJlbFNpemVfZnVuY3Rpb24gR2V0Rm9yZWlnblJl bFNpemU7CiAgCUdldEZvcmVpZ25QYXRoc19mdW5jdGlvbiBHZXRGb3JlaWduUGF0aHM7CiAg CUdldEZvcmVpZ25QbGFuX2Z1bmN0aW9uIEdldEZvcmVpZ25QbGFuOwoqKioqKioqKioqKioq KiogdHlwZWRlZiBzdHJ1Y3QgRmR3Um91dGluZQoqKiogNzIsNzcgKioqKgotLS0gODEsOTIg LS0tLQogIAlJdGVyYXRlRm9yZWlnblNjYW5fZnVuY3Rpb24gSXRlcmF0ZUZvcmVpZ25TY2Fu OwogIAlSZVNjYW5Gb3JlaWduU2Nhbl9mdW5jdGlvbiBSZVNjYW5Gb3JlaWduU2NhbjsKICAJ RW5kRm9yZWlnblNjYW5fZnVuY3Rpb24gRW5kRm9yZWlnblNjYW47CisgCisgCS8qCisgCSAq IEhhbmRsZXJzIGJlbG93IGFyZSBvcHRpb25hbC4gIFlvdSBjYW4gc2V0IGFueSBvZiB0aGVt IHRvIE5VTEwgdG8gdGVsbAorIAkgKiBQb3N0Z3JlU1FMIGJhY2tlbmQgdGhhdCB0aGUgRkRX IGRvZXNuJ3QgaGF2ZSB0aGUgY2FwYWJpbGl0eS4KKyAJICovCisgCUFuYWx5emVGb3JlaWdu VGFibGVfZnVuY3Rpb24gQW5hbHl6ZUZvcmVpZ25UYWJsZTsKICB9IEZkd1JvdXRpbmU7CiAg CiAgCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2ZvcmVpZ25fZGF0 YS5vdXQgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2ZvcmVpZ25fZGF0YS5vdXQKaW5k ZXggYmE4Njg4My4uZjEzNzlhNiAxMDA2NDQKKioqIGEvc3JjL3Rlc3QvcmVncmVzcy9leHBl Y3RlZC9mb3JlaWduX2RhdGEub3V0Ci0tLSBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQv Zm9yZWlnbl9kYXRhLm91dAoqKioqKioqKioqKioqKiogQ1JFQVRFIEZPUkVJR04gVEFCTEUg ZnQxICgKKioqIDY3OSw2OTAgKioqKgogIENPTU1FTlQgT04gRk9SRUlHTiBUQUJMRSBmdDEg SVMgJ2Z0MSc7CiAgQ09NTUVOVCBPTiBDT0xVTU4gZnQxLmMxIElTICdmdDEuYzEnOwogIFxk KyBmdDEKISAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yZWlnbiB0YWJsZSAi cHVibGljLmZ0MSIKISAgQ29sdW1uIHwgIFR5cGUgICB8IE1vZGlmaWVycyB8ICAgICAgICAg IEZEVyBPcHRpb25zICAgICAgICAgICB8IFN0b3JhZ2UgIHwgRGVzY3JpcHRpb24gCiEgLS0t LS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLQohICBjMSAgICAgfCBpbnRlZ2VyIHwg bm90IG51bGwgIHwgKCJwYXJhbSAxIiAndmFsMScpICAgICAgICAgICAgIHwgcGxhaW4gICAg fCBmdDEuYzEKISAgYzIgICAgIHwgdGV4dCAgICB8ICAgICAgICAgICB8IChwYXJhbTIgJ3Zh bDInLCBwYXJhbTMgJ3ZhbDMnKSB8IGV4dGVuZGVkIHwgCiEgIGMzICAgICB8IGRhdGUgICAg fCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBwbGFpbiAg ICB8IAogIFNlcnZlcjogczAKICBGRFcgT3B0aW9uczogKGRlbGltaXRlciAnLCcsIHF1b3Rl ICciJywgImJlIHF1b3RlZCIgJ3ZhbHVlJykKICBIYXMgT0lEczogbm8KLS0tIDY3OSw2OTAg LS0tLQogIENPTU1FTlQgT04gRk9SRUlHTiBUQUJMRSBmdDEgSVMgJ2Z0MSc7CiAgQ09NTUVO VCBPTiBDT0xVTU4gZnQxLmMxIElTICdmdDEuYzEnOwogIFxkKyBmdDEKISAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvcmVpZ24gdGFibGUgInB1YmxpYy5mdDEi CiEgIENvbHVtbiB8ICBUeXBlICAgfCBNb2RpZmllcnMgfCAgICAgICAgICBGRFcgT3B0aW9u cyAgICAgICAgICAgfCBTdG9yYWdlICB8IFN0YXRzIHRhcmdldCB8IERlc2NyaXB0aW9uIAoh IC0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0KISAg YzEgICAgIHwgaW50ZWdlciB8IG5vdCBudWxsICB8ICgicGFyYW0gMSIgJ3ZhbDEnKSAgICAg ICAgICAgICB8IHBsYWluICAgIHwgICAgICAgICAgICAgIHwgZnQxLmMxCiEgIGMyICAgICB8 IHRleHQgICAgfCAgICAgICAgICAgfCAocGFyYW0yICd2YWwyJywgcGFyYW0zICd2YWwzJykg fCBleHRlbmRlZCB8ICAgICAgICAgICAgICB8IAohICBjMyAgICAgfCBkYXRlICAgIHwgICAg ICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgcGxhaW4gICAgfCAg ICAgICAgICAgICAgfCAKICBTZXJ2ZXI6IHMwCiAgRkRXIE9wdGlvbnM6IChkZWxpbWl0ZXIg JywnLCBxdW90ZSAnIicsICJiZSBxdW90ZWQiICd2YWx1ZScpCiAgSGFzIE9JRHM6IG5vCioq KioqKioqKioqKioqKiBFUlJPUjogIGNhbm5vdCBhbHRlciBzeXN0ZW0gY29sdW1uICJ4bWlu CioqKiA3MzAsNzQ4ICoqKioKICBBTFRFUiBGT1JFSUdOIFRBQkxFIGZ0MSBBTFRFUiBDT0xV TU4gYzcgT1BUSU9OUyAoQUREIHAxICd2MScsIEFERCBwMiAndjInKSwKICAgICAgICAgICAg ICAgICAgICAgICAgICBBTFRFUiBDT0xVTU4gYzggT1BUSU9OUyAoQUREIHAxICd2MScsIEFE RCBwMiAndjInKTsKICBBTFRFUiBGT1JFSUdOIFRBQkxFIGZ0MSBBTFRFUiBDT0xVTU4gYzgg T1BUSU9OUyAoU0VUIHAyICdWMicsIERST1AgcDEpOwogIFxkKyBmdDEKISAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgRm9yZWlnbiB0YWJsZSAicHVibGljLmZ0MSIKISAgQ29s dW1uIHwgIFR5cGUgICB8IE1vZGlmaWVycyB8ICAgICAgICAgIEZEVyBPcHRpb25zICAgICAg ICAgICB8IFN0b3JhZ2UgIHwgRGVzY3JpcHRpb24gCiEgLS0tLS0tLS0rLS0tLS0tLS0tKy0t LS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0r LS0tLS0tLS0tLS0tLQohICBjMSAgICAgfCBpbnRlZ2VyIHwgbm90IG51bGwgIHwgKCJwYXJh bSAxIiAndmFsMScpICAgICAgICAgICAgIHwgcGxhaW4gICAgfCAKISAgYzIgICAgIHwgdGV4 dCAgICB8ICAgICAgICAgICB8IChwYXJhbTIgJ3ZhbDInLCBwYXJhbTMgJ3ZhbDMnKSB8IGV4 dGVuZGVkIHwgCiEgIGMzICAgICB8IGRhdGUgICAgfCAgICAgICAgICAgfCAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgfCBwbGFpbiAgICB8IAohICBjNCAgICAgfCBpbnRlZ2Vy IHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgcGxhaW4g ICAgfCAKISAgYzYgICAgIHwgaW50ZWdlciB8IG5vdCBudWxsICB8ICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICB8IHBsYWluICAgIHwgCiEgIGM3ICAgICB8IGludGVnZXIgfCAg ICAgICAgICAgfCAocDEgJ3YxJywgcDIgJ3YyJykgICAgICAgICAgICAgfCBwbGFpbiAgICB8 IAohICBjOCAgICAgfCB0ZXh0ICAgIHwgICAgICAgICAgIHwgKHAyICdWMicpICAgICAgICAg ICAgICAgICAgICAgIHwgZXh0ZW5kZWQgfCAKISAgYzkgICAgIHwgaW50ZWdlciB8ICAgICAg ICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHBsYWluICAgIHwgCiEg IGMxMCAgICB8IGludGVnZXIgfCAgICAgICAgICAgfCAocDEgJ3YxJykgICAgICAgICAgICAg ICAgICAgICAgfCBwbGFpbiAgICB8IAogIFNlcnZlcjogczAKICBGRFcgT3B0aW9uczogKGRl bGltaXRlciAnLCcsIHF1b3RlICciJywgImJlIHF1b3RlZCIgJ3ZhbHVlJykKICBIYXMgT0lE czogbm8KLS0tIDczMCw3NTMgLS0tLQogIEFMVEVSIEZPUkVJR04gVEFCTEUgZnQxIEFMVEVS IENPTFVNTiBjNyBPUFRJT05TIChBREQgcDEgJ3YxJywgQUREIHAyICd2MicpLAogICAgICAg ICAgICAgICAgICAgICAgICAgIEFMVEVSIENPTFVNTiBjOCBPUFRJT05TIChBREQgcDEgJ3Yx JywgQUREIHAyICd2MicpOwogIEFMVEVSIEZPUkVJR04gVEFCTEUgZnQxIEFMVEVSIENPTFVN TiBjOCBPUFRJT05TIChTRVQgcDIgJ1YyJywgRFJPUCBwMSk7CisgQUxURVIgRk9SRUlHTiBU QUJMRSBmdDEgQUxURVIgQ09MVU1OIGMxIFNFVCBTVEFUSVNUSUNTIDEwMDAwOworIEFMVEVS IEZPUkVJR04gVEFCTEUgZnQxIEFMVEVSIENPTFVNTiBjMSBTRVQgKG5fZGlzdGluY3QgPSAx MDApOworIEFMVEVSIEZPUkVJR04gVEFCTEUgZnQxIEFMVEVSIENPTFVNTiBjMSBTRVQgKG5f ZGlzdGluY3RfaW5oZXJpdGVkID0gMTAwKTsgLS0gRVJST1IKKyBFUlJPUjogIGNhbm5vdCBz ZXQgIm5fZGlzdGluY3RfaW5oZXJpdGVkIiBmb3IgZm9yZWlnbiB0YWJsZXMKKyBBTFRFUiBG T1JFSUdOIFRBQkxFIGZ0MSBBTFRFUiBDT0xVTU4gYzggU0VUIFNUQVRJU1RJQ1MgLTE7CiAg XGQrIGZ0MQohICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yZWln biB0YWJsZSAicHVibGljLmZ0MSIKISAgQ29sdW1uIHwgIFR5cGUgICB8IE1vZGlmaWVycyB8 ICAgICAgICAgIEZEVyBPcHRpb25zICAgICAgICAgICB8IFN0b3JhZ2UgIHwgU3RhdHMgdGFy Z2V0IHwgRGVzY3JpcHRpb24gCiEgLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tLS0tLS0t LS0rLS0tLS0tLS0tLS0tLQohICBjMSAgICAgfCBpbnRlZ2VyIHwgbm90IG51bGwgIHwgKCJw YXJhbSAxIiAndmFsMScpICAgICAgICAgICAgIHwgcGxhaW4gICAgfCAxMDAwMCAgICAgICAg fCAKISAgYzIgICAgIHwgdGV4dCAgICB8ICAgICAgICAgICB8IChwYXJhbTIgJ3ZhbDInLCBw YXJhbTMgJ3ZhbDMnKSB8IGV4dGVuZGVkIHwgICAgICAgICAgICAgIHwgCiEgIGMzICAgICB8 IGRhdGUgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg fCBwbGFpbiAgICB8ICAgICAgICAgICAgICB8IAohICBjNCAgICAgfCBpbnRlZ2VyIHwgICAg ICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgcGxhaW4gICAgfCAg ICAgICAgICAgICAgfCAKISAgYzYgICAgIHwgaW50ZWdlciB8IG5vdCBudWxsICB8ICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICB8IHBsYWluICAgIHwgICAgICAgICAgICAgIHwg CiEgIGM3ICAgICB8IGludGVnZXIgfCAgICAgICAgICAgfCAocDEgJ3YxJywgcDIgJ3YyJykg ICAgICAgICAgICAgfCBwbGFpbiAgICB8ICAgICAgICAgICAgICB8IAohICBjOCAgICAgfCB0 ZXh0ICAgIHwgICAgICAgICAgIHwgKHAyICdWMicpICAgICAgICAgICAgICAgICAgICAgIHwg ZXh0ZW5kZWQgfCAgICAgICAgICAgICAgfCAKISAgYzkgICAgIHwgaW50ZWdlciB8ICAgICAg ICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHBsYWluICAgIHwgICAg ICAgICAgICAgIHwgCiEgIGMxMCAgICB8IGludGVnZXIgfCAgICAgICAgICAgfCAocDEgJ3Yx JykgICAgICAgICAgICAgICAgICAgICAgfCBwbGFpbiAgICB8ICAgICAgICAgICAgICB8IAog IFNlcnZlcjogczAKICBGRFcgT3B0aW9uczogKGRlbGltaXRlciAnLCcsIHF1b3RlICciJywg ImJlIHF1b3RlZCIgJ3ZhbHVlJykKICBIYXMgT0lEczogbm8KZGlmZiAtLWdpdCBhL3NyYy90 ZXN0L3JlZ3Jlc3Mvc3FsL2ZvcmVpZ25fZGF0YS5zcWwgYi9zcmMvdGVzdC9yZWdyZXNzL3Nx bC9mb3JlaWduX2RhdGEuc3FsCmluZGV4IDBjOTU2NzIuLjAzYjU2ODAgMTAwNjQ0CioqKiBh L3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2ZvcmVpZ25fZGF0YS5zcWwKLS0tIGIvc3JjL3Rlc3Qv cmVncmVzcy9zcWwvZm9yZWlnbl9kYXRhLnNxbAoqKioqKioqKioqKioqKiogQUxURVIgRk9S RUlHTiBUQUJMRSBmdDEgQUxURVIgQ09MVU1OIHhtaQoqKiogMzA3LDMxMiAqKioqCi0tLSAz MDcsMzE2IC0tLS0KICBBTFRFUiBGT1JFSUdOIFRBQkxFIGZ0MSBBTFRFUiBDT0xVTU4gYzcg T1BUSU9OUyAoQUREIHAxICd2MScsIEFERCBwMiAndjInKSwKICAgICAgICAgICAgICAgICAg ICAgICAgICBBTFRFUiBDT0xVTU4gYzggT1BUSU9OUyAoQUREIHAxICd2MScsIEFERCBwMiAn djInKTsKICBBTFRFUiBGT1JFSUdOIFRBQkxFIGZ0MSBBTFRFUiBDT0xVTU4gYzggT1BUSU9O UyAoU0VUIHAyICdWMicsIERST1AgcDEpOworIEFMVEVSIEZPUkVJR04gVEFCTEUgZnQxIEFM VEVSIENPTFVNTiBjMSBTRVQgU1RBVElTVElDUyAxMDAwMDsKKyBBTFRFUiBGT1JFSUdOIFRB QkxFIGZ0MSBBTFRFUiBDT0xVTU4gYzEgU0VUIChuX2Rpc3RpbmN0ID0gMTAwKTsKKyBBTFRF UiBGT1JFSUdOIFRBQkxFIGZ0MSBBTFRFUiBDT0xVTU4gYzEgU0VUIChuX2Rpc3RpbmN0X2lu aGVyaXRlZCA9IDEwMCk7IC0tIEVSUk9SCisgQUxURVIgRk9SRUlHTiBUQUJMRSBmdDEgQUxU RVIgQ09MVU1OIGM4IFNFVCBTVEFUSVNUSUNTIC0xOwogIFxkKyBmdDEKICAtLSBjYW4ndCBj aGFuZ2UgdGhlIGNvbHVtbiB0eXBlIGlmIGl0J3MgdXNlZCBlbHNld2hlcmUKICBDUkVBVEUg VEFCTEUgdXNlX2Z0MV9jb2x1bW5fdHlwZSAoeCBmdDEpOwo= --------------070704020405000006040502--