From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 3326 invoked by alias); 23 May 2014 21:02:05 -0000 Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org Received: (qmail 3305 invoked by uid 89); 23 May 2014 21:02:04 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-2.2 required=5.0 tests=AWL,BAYES_20,RCVD_IN_DNSWL_LOW,RP_MATCHES_RCVD,SPF_PASS autolearn=ham version=3.3.2 X-HELO: mail-wi0-f170.google.com Received: from mail-wi0-f170.google.com (HELO mail-wi0-f170.google.com) (209.85.212.170) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with (AES128-SHA encrypted) ESMTPS; Fri, 23 May 2014 21:01:58 +0000 Received: by mail-wi0-f170.google.com with SMTP id bs8so1641935wib.1 for ; Fri, 23 May 2014 14:01:55 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:mime-version:date:message-id:subject:from:to :content-type; bh=VlijnUUGM5vSvW+WIvRxRmaoHGj9wR+zAUl/pOdXka0=; b=iZQBKy8btEqQytDT2aPFg4BM60xQPIvW2UygpAaUMIL4mmgP+0TvR4N4kgWCglt8ek sZ+121aw9cnLwAsxepFVvQqIV1JV/0G9Mg0Xdr47LXLsbVdAxwq902esP3Ldev19nBUL V6zrsgkE6OqBDvZuzAzc9wMnIwp90jWepI1TvHm4qeHiLeBvShtUhTg9tpzy9ojbo+5/ ZwJj+tYZRbfT9Pp1pjEVFLVQk/Ch2k6CYtnQZ9gFL+1UlDnGYB12QNIg9aytmYhN/v0t uagWA7DNaTC59u4lrHyGTqOyCwqMhxPRAwjPbt8w2NYot43NHF7GPy/ltTaRoUbvg4KG /+3A== X-Gm-Message-State: ALoCoQkfmhkURcWAjcMMnVVT3vDoFnESQ2HBrCQng40H7y6WTNoYSt357TcvYvAV2sM66S9j96xM MIME-Version: 1.0 X-Received: by 10.180.85.163 with SMTP id i3mr5665325wiz.14.1400878914825; Fri, 23 May 2014 14:01:54 -0700 (PDT) Received: by 10.217.51.7 with HTTP; Fri, 23 May 2014 14:01:54 -0700 (PDT) Date: Fri, 23 May 2014 21:02:00 -0000 Message-ID: Subject: [Patch v18 4/4] Add xmethod support to the Python API From: Siva Chandra To: gdb-patches Content-Type: multipart/mixed; boundary=f46d0444eb0917f65004fa178a46 X-IsSubscribed: yes X-SW-Source: 2014-05/txt/msg00600.txt.bz2 --f46d0444eb0917f65004fa178a46 Content-Type: text/plain; charset=UTF-8 Content-length: 1500 The attached patch addresses all of Doug's comments for this part from last time. The previous version for this part was not numbered 17. I am syncing all parts to v18 now to avoid confusion. ChangeLog: 2014-05-23 Siva Chandra Reddy * python/py-xmethods.c: New file. * python/py-objfile.c (objfile_object): New field 'xmethods'. (objfpy_dealloc): XDECREF on the new xmethods field. (objfpy_new, objfile_to_objfile_object): Initialize xmethods field. (objfpy_get_xmethods): New function. (objfile_getset): New entry 'xmethods'. * python/py-progspace.c (pspace_object): New field 'xmethods'. (pspy_dealloc): XDECREF on the new xmethods field. (pspy_new, pspace_to_pspace_object): Initialize xmethods field. (pspy_get_xmethods): New function. (pspace_getset): New entry 'xmethods'. * python/python-internal.h: Add declarations for new functions. * python/python.c (_initialize_python): Invoke gdbpy_initialize_xmethods. * python/lib/gdb/__init__.py (xmethods): New attribute. * python/lib/gdb/xmethod.py: New file. * python/lib/gdb/command/xmethods.py: New file. testuite/ * gdb.python/py-xmethods.cc: New testcase to test xmethods. * gdb.python/py-xmethods.exp: New tests to test xmethods. * gdb.python/py-xmethods.py: Python script supporting the new testcase and tests. --f46d0444eb0917f65004fa178a46 Content-Type: text/plain; charset=US-ASCII; name="xmethod_python_api_v18.txt" Content-Disposition: attachment; filename="xmethod_python_api_v18.txt" Content-Transfer-Encoding: base64 X-Attachment-Id: f_hvjywkdp0 Content-length: 87023 ZGlmZiAtLWdpdCBhL2dkYi9NYWtlZmlsZS5pbiBiL2dkYi9NYWtlZmlsZS5p bgppbmRleCBmMmMxNmVjLi5iYjg2NjAyIDEwMDY0NAotLS0gYS9nZGIvTWFr ZWZpbGUuaW4KKysrIGIvZ2RiL01ha2VmaWxlLmluCkBAIC0zNDQsNiArMzQ0 LDcgQEAgU1VCRElSX1BZVEhPTl9PQlMgPSBcCiAJcHktYnJlYWtwb2ludC5v IFwKIAlweS1jbWQubyBcCiAJcHktY29udGludWVldmVudC5vIFwKKwlweS14 bWV0aG9kcy5vIFwKIAlweS1ldmVudC5vIFwKIAlweS1ldnRyZWdpc3RyeS5v IFwKIAlweS1ldnRzLm8gXApAQCAtMzgwLDYgKzM4MSw3IEBAIFNVQkRJUl9Q WVRIT05fU1JDUyA9IFwKIAlweXRob24vcHktYnJlYWtwb2ludC5jIFwKIAlw eXRob24vcHktY21kLmMgXAogCXB5dGhvbi9weS1jb250aW51ZWV2ZW50LmMg XAorCXB5dGhvbi9weS14bWV0aG9kcy5jIFwKIAlweXRob24vcHktZXZlbnQu YyBcCiAJcHl0aG9uL3B5LWV2dHJlZ2lzdHJ5LmMgXAogCXB5dGhvbi9weS1l dnRzLmMgXApAQCAtMjM3OCw2ICsyMzgwLDEwIEBAIHB5LWNvbnRpbnVlZXZl bnQubzogJChzcmNkaXIpL3B5dGhvbi9weS1jb250aW51ZWV2ZW50LmMKIAkk KENPTVBJTEUpICQoUFlUSE9OX0NGTEFHUykgJChzcmNkaXIpL3B5dGhvbi9w eS1jb250aW51ZWV2ZW50LmMKIAkkKFBPU1RDT01QSUxFKQogCitweS14bWV0 aG9kcy5vOiAkKHNyY2RpcikvcHl0aG9uL3B5LXhtZXRob2RzLmMKKwkkKENP TVBJTEUpICQoUFlUSE9OX0NGTEFHUykgJChzcmNkaXIpL3B5dGhvbi9weS14 bWV0aG9kcy5jCisJJChQT1NUQ09NUElMRSkKKwogcHktZXZlbnQubzogJChz cmNkaXIpL3B5dGhvbi9weS1ldmVudC5jCiAJJChDT01QSUxFKSAkKFBZVEhP Tl9DRkxBR1MpICQoc3JjZGlyKS9weXRob24vcHktZXZlbnQuYwogCSQoUE9T VENPTVBJTEUpCmRpZmYgLS1naXQgYS9nZGIvZGF0YS1kaXJlY3RvcnkvTWFr ZWZpbGUuaW4gYi9nZGIvZGF0YS1kaXJlY3RvcnkvTWFrZWZpbGUuaW4KaW5k ZXggMzI4OGU1MC4uYjlmY2MwMyAxMDA2NDQKLS0tIGEvZ2RiL2RhdGEtZGly ZWN0b3J5L01ha2VmaWxlLmluCisrKyBiL2dkYi9kYXRhLWRpcmVjdG9yeS9N YWtlZmlsZS5pbgpAQCAtNjMsOCArNjMsMTAgQEAgUFlUSE9OX0ZJTEVTID0g XAogCWdkYi90eXBlcy5weSBcCiAJZ2RiL3ByaW50aW5nLnB5IFwKIAlnZGIv cHJvbXB0LnB5IFwKKwlnZGIveG1ldGhvZC5weSBcCiAJZ2RiL2NvbW1hbmQv Ym91bmRfcmVnaXN0ZXJzLnB5IFwKIAlnZGIvY29tbWFuZC9fX2luaXRfXy5w eSBcCisJZ2RiL2NvbW1hbmQveG1ldGhvZHMucHkgXAogCWdkYi9jb21tYW5k L2ZyYW1lX2ZpbHRlcnMucHkgXAogCWdkYi9jb21tYW5kL3R5cGVfcHJpbnRl cnMucHkgXAogCWdkYi9jb21tYW5kL3ByZXR0eV9wcmludGVycy5weSBcCmRp ZmYgLS1naXQgYS9nZGIvcHl0aG9uL2xpYi9nZGIvX19pbml0X18ucHkgYi9n ZGIvcHl0aG9uL2xpYi9nZGIvX19pbml0X18ucHkKaW5kZXggOTVhNzZjMi4u NTU3ZTE2OCAxMDA2NDQKLS0tIGEvZ2RiL3B5dGhvbi9saWIvZ2RiL19faW5p dF9fLnB5CisrKyBiL2dkYi9weXRob24vbGliL2dkYi9fX2luaXRfXy5weQpA QCAtNjcsNiArNjcsOCBAQCBwcmV0dHlfcHJpbnRlcnMgPSBbXQogCiAjIElu aXRpYWwgdHlwZSBwcmludGVycy4KIHR5cGVfcHJpbnRlcnMgPSBbXQorIyBJ bml0aWFsIHhtZXRob2QgbWF0Y2hlcnMuCit4bWV0aG9kcyA9IFtdCiAjIElu aXRpYWwgZnJhbWUgZmlsdGVycy4KIGZyYW1lX2ZpbHRlcnMgPSB7fQogCmRp ZmYgLS1naXQgYS9nZGIvcHl0aG9uL2xpYi9nZGIvY29tbWFuZC94bWV0aG9k cy5weSBiL2dkYi9weXRob24vbGliL2dkYi9jb21tYW5kL3htZXRob2RzLnB5 Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY2MWU3ZmIK LS0tIC9kZXYvbnVsbAorKysgYi9nZGIvcHl0aG9uL2xpYi9nZGIvY29tbWFu ZC94bWV0aG9kcy5weQpAQCAtMCwwICsxLDI3MiBAQAorIyBYbWV0aG9kIGNv bW1hbmRzLgorIyBDb3B5cmlnaHQgMjAxMy0yMDE0IEZyZWUgU29mdHdhcmUg Rm91bmRhdGlvbiwgSW5jLgorCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNv ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5 CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVi bGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisjIHRoZSBGcmVlIFNvZnR3 YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vu c2UsIG9yCisjIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u CisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkg V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv ZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV TEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBM aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2 ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBM aWNlbnNlCisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBz ZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCitpbXBvcnQg Z2RiCitpbXBvcnQgcmUKKworIiIiR0RCIGNvbW1hbmRzIGZvciB3b3JraW5n IHdpdGggeG1ldGhvZHMuIiIiCisKKworZGVmIHZhbGlkYXRlX3htX3JlZ2V4 cChwYXJ0X25hbWUsIHJlZ2V4cCk6CisgICAgdHJ5OgorICAgICAgICByZXR1 cm4gcmUuY29tcGlsZShyZWdleHApCisgICAgZXhjZXB0IFN5bnRheEVycm9y OgorICAgICAgICByYWlzZSBTeW50YXhFcnJvcigiSW52YWxpZCAlcyByZWdl eHA6ICVzIiwgcGFydF9uYW1lLCByZWdleHApCisKKworZGVmIHBhcnNlX3ht X2NvbW1hbmRfYXJncyhhcmcpOgorICAgICIiIlBhcnNlcyB0aGUgYXJndW1l bnRzIHBhc3NlZCB0byBhIHhtZXRob2QgY29tbWFuZC4KKworICAgIEFyZ3Vt ZW50czoKKyAgICAgICAgYXJnOiBUaGUgYXJndW1lbnQgc3RyaW5nIHBhc3Nl ZCB0byBhIHhtZXRob2QgY29tbWFuZC4KKworICAgIFJldHVybnM6CisgICAg ICAgIEEgMy10dXBsZTogKDxsb2N1cyBtYXRjaGluZyByZWd1bGFyIGV4cHJl c3Npb24+LAorICAgICAgICAgICAgICAgICAgICA8bWF0Y2hlciBtYXRjaGlu ZyByZWd1bGFyIGV4cHJlc3Npb24+LAorICAgICAgICAgICAgICAgICAgICA8 bmFtZSBtYXRjaGluZyByZWd1bGFyIGV4cGVyZXNzaW9uPikKKyAgICAiIiIK KyAgICBhcmd2ID0gZ2RiLnN0cmluZ190b19hcmd2KGFyZykKKyAgICBhcmdj ID0gbGVuKGFyZ3YpCisgICAgaWYgYXJnYyA+IDI6CisgICAgICAgIHJhaXNl IFN5bnRheEVycm9yKCJUb28gbWFueSBhcmd1bWVudHMgdG8gY29tbWFuZC4i KQorICAgIGxvY3VzX3JlZ2V4cCA9ICIiCisgICAgbWF0Y2hlcl9uYW1lX3Jl Z2V4cCA9ICIiCisgICAgeG1fbmFtZV9yZWdleHAgPSBOb25lCisgICAgaWYg YXJnYyA+PSAxOgorICAgICAgICBsb2N1c19yZWdleHAgPSBhcmd2WzBdCisg ICAgaWYgYXJnYyA9PSAyOgorICAgICAgICBwYXJ0cyA9IGFyZ3ZbMV0uc3Bs aXQoIjsiLCAxKQorICAgICAgICBtYXRjaGVyX25hbWVfcmVnZXhwID0gcGFy dHNbMF0KKyAgICAgICAgaWYgbGVuKHBhcnRzKSA+IDE6CisgICAgICAgICAg ICB4bV9uYW1lX3JlZ2V4cCA9IHBhcnRzWzFdCisgICAgaWYgeG1fbmFtZV9y ZWdleHA6CisgICAgICAgIG5hbWVfcmUgPSB2YWxpZGF0ZV94bV9yZWdleHAo InhtZXRob2QgbmFtZSIsIHhtX25hbWVfcmVnZXhwKQorICAgIGVsc2U6Cisg ICAgICAgIG5hbWVfcmUgPSBOb25lCisgICAgcmV0dXJuICh2YWxpZGF0ZV94 bV9yZWdleHAoImxvY3VzIiwgbG9jdXNfcmVnZXhwKSwKKyAgICAgICAgICAg IHZhbGlkYXRlX3htX3JlZ2V4cCgibWF0Y2hlciBuYW1lIiwgbWF0Y2hlcl9u YW1lX3JlZ2V4cCksCisgICAgICAgICAgICBuYW1lX3JlKQorCisKK2RlZiBn ZXRfZ2xvYmFsX21ldGhvZF9tYXRjaGVycyhsb2N1c19yZSwgbWF0Y2hlcl9y ZSk6CisgICAgIiIiUmV0dXJucyBhIGRpY3Qgb2YgbWF0Y2hpbmcgZ2xvYmFs bHkgcmVnaXN0ZXJlZCB4bWV0aG9kcy4KKworICAgIEFyZ3VtZW50czoKKyAg ICAgICAgbG9jdXNfcmU6IEV2ZW4gdGhvdWdoIG9ubHkgZ2xvYmFsbHkgcmVn aXN0ZXJlZCB4bWV0aG9kcyBhcmUKKyAgICAgICAgICAgICAgICAgIGxvb2tl ZCB1cCwgdGhleSB3aWxsIGJlIGxvb2tlZCB1cCBvbmx5IGlmICdnbG9iYWwn IG1hdGNoZXMKKyAgICAgICAgICAgICAgICAgIExPQ1VTX1JFLgorICAgICAg ICBtYXRjaGVyX3JlOiBUaGUgcmVndWxhciBleHByZXNzaW9uIG1hdGNoaW5n IHRoZSBuYW1lcyBvZiB4bWV0aG9kcy4KKworICAgIFJldHVybnM6CisgICAg ICAgIEEgZGljdCBvZiBtYXRjaGluZyBnbG9iYWxseSByZWdpc3RlcmVkIHht ZXRob2QgbWF0Y2hlcnMuICBUaGUgb25seQorICAgICAgICBrZXkgaW4gdGhl IGRpY3Qgd2lsbCBiZSAnZ2xvYmFsJy4KKyAgICAiIiIKKyAgICBsb2N1c19z dHIgPSAiZ2xvYmFsIgorICAgIHhtX2RpY3QgPSB7IGxvY3VzX3N0cjogW10g fQorICAgIGlmIGxvY3VzX3JlLm1hdGNoKCJnbG9iYWwiKToKKyAgICAgICAg eG1fZGljdFtsb2N1c19zdHJdLmV4dGVuZCgKKyAgICAgICAgICAgIFttIGZv ciBtIGluIGdkYi54bWV0aG9kcyBpZiBtYXRjaGVyX3JlLm1hdGNoKG0ubmFt ZSldKQorICAgIHJldHVybiB4bV9kaWN0CisKKworZGVmIGdldF9tZXRob2Rf bWF0Y2hlcnNfaW5fbG9jaShsb2NpLCBsb2N1c19yZSwgbWF0Y2hlcl9yZSk6 CisgICAgIiIiUmV0dXJucyBhIGRpY3Qgb2YgbWF0Y2hpbmcgcmVnaXN0ZXJl ZCB4bWV0aG9kcyBpbiB0aGUgTE9DSS4KKworICAgIEFyZ3VtZW50czoKKyAg ICAgICAgbG9jaTogVGhlIGxpc3Qgb2YgbG9jaSB0byBsb29rdXAgbWF0Y2hp bmcgeG1ldGhvZHMgaW4uCisgICAgICAgIGxvY3VzX3JlOiBYbWV0aG9kIG1h dGNoZXJzIHdpbGwgYmUgbG9va2VkIHVwIGluIGEgcGFydGljdWxhciBsb2N1 cworICAgICAgICAgICAgICAgICAgb25seSBpZiBpdHMgZmlsZW5hbWUgbWF0 Y2hlcyB0aGUgcmVndWxhciBleHByZXNzaW9uIExPQ1VTX1JFLgorICAgICAg ICBtYXRjaGVyX3JlOiBUaGUgcmVndWxhciBleHByZXNzaW9uIHRvIG1hdGNo IHRoZSB4bWV0aG9kIG1hdGNoZXIKKyAgICAgICAgICAgICAgICAgICAgbmFt ZXMuCisKKyAgICBSZXR1cm5zOgorICAgICAgICBBIGRpY3Qgb2YgbWF0Y2hp bmcgeG1ldGhvZCBtYXRjaGVycy4gIFRoZSBrZXlzIG9mIHRoZSBkaWN0IGFy ZSB0aGUKKyAgICAgICAgZmlsZW5hbWVzIG9mIHRoZSBsb2NpIHRoZSB4bWV0 aG9kIG1hdGNoZXJzIGJlbG9uZyB0by4KKyAgICAiIiIKKyAgICB4bV9kaWN0 ID0ge30KKyAgICBmb3IgbG9jdXMgaW4gbG9jaToKKyAgICAgICAgaWYgaXNp bnN0YW5jZShsb2N1cywgZ2RiLlByb2dzcGFjZSk6CisgICAgICAgICAgICBp ZiAobm90IGxvY3VzX3JlLm1hdGNoKGxvY3VzLmZpbGVuYW1lKSBhbmQKKyAg ICAgICAgICAgICAgICBub3QgbG9jdXNfcmUubWF0Y2goJ3Byb2dzcGFjZScp KToKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgbG9j dXNfdHlwZSA9ICJwcm9nc3BhY2UiCisgICAgICAgIGVsc2U6CisgICAgICAg ICAgICBpZiBub3QgbG9jdXNfcmUubWF0Y2gobG9jdXMuZmlsZW5hbWUpOgor ICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBsb2N1c190 eXBlID0gIm9iamZpbGUiCisgICAgICAgIGxvY3VzX3N0ciA9ICIlcyAlcyIg JSAobG9jdXNfdHlwZSwgbG9jdXMuZmlsZW5hbWUpCisgICAgICAgIHhtX2Rp Y3RbbG9jdXNfc3RyXSA9IFsKKyAgICAgICAgICAgIG0gZm9yIG0gaW4gbG9j dXMueG1ldGhvZHMgaWYgbWF0Y2hlcl9yZS5tYXRjaChtLm5hbWUpXQorICAg IHJldHVybiB4bV9kaWN0CisKKworZGVmIHByaW50X3htX2luZm8oeG1fZGlj dCwgbmFtZV9yZSk6CisgICAgIiIiUHJpbnQgYSBkaWN0aW9uYXJ5IG9mIHht ZXRob2RzLiIiIgorICAgIGRlZiBnZXRfc3RhdHVzX3N0cmluZyhtZXRob2Qp OgorICAgICAgICBpZiBub3QgbS5lbmFibGVkOgorICAgICAgICAgICAgcmV0 dXJuICIgW2Rpc2FibGVkXSIKKyAgICAgICAgZWxzZToKKyAgICAgICAgICBy ZXR1cm4gIiIKKworICAgIGlmIG5vdCB4bV9kaWN0OgorICAgICAgICByZXR1 cm4KKyAgICBmb3IgbG9jdXNfc3RyIGluIHhtX2RpY3Q6CisgICAgICAgIGlm IG5vdCB4bV9kaWN0W2xvY3VzX3N0cl06CisgICAgICAgICAgICBjb250aW51 ZQorICAgICAgICBwcmludCAoIlhtZXRob2RzIGluICVzOiIgJSBsb2N1c19z dHIpCisgICAgICAgIGZvciBtYXRjaGVyIGluIHhtX2RpY3RbbG9jdXNfc3Ry XToKKyAgICAgICAgICAgIHByaW50ICgiICAlcyIgJSBtYXRjaGVyLm5hbWUp CisgICAgICAgICAgICBpZiBub3QgbWF0Y2hlci5tZXRob2RzOgorICAgICAg ICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBmb3IgbSBpbiBtYXRj aGVyLm1ldGhvZHM6CisgICAgICAgICAgICAgICAgaWYgbmFtZV9yZSBpcyBO b25lIG9yIG5hbWVfcmUubWF0Y2gobS5uYW1lKToKKyAgICAgICAgICAgICAg ICAgICAgcHJpbnQgKCIgICAgJXMlcyIgJSAobS5uYW1lLCBnZXRfc3RhdHVz X3N0cmluZyhtKSkpCisKKworZGVmIHNldF94bV9zdGF0dXMxKHhtX2RpY3Qs IG5hbWVfcmUsIHN0YXR1cyk6CisgICAgIiIiU2V0IHRoZSBzdGF0dXMgKGVu YWJsZWQvZGlzYWJsZWQpIG9mIGEgZGljdGlvbmFyeSBvZiB4bWV0aG9kcy4i IiIKKyAgICBmb3IgbG9jdXNfc3RyLCBtYXRjaGVycyBpbiB4bV9kaWN0Lml0 ZXJpdGVtcygpOgorICAgICAgICBmb3IgbWF0Y2hlciBpbiBtYXRjaGVyczoK KyAgICAgICAgICAgIGlmIG5vdCBuYW1lX3JlOgorICAgICAgICAgICAgICAg ICMgSWYgdGhlIG5hbWUgcmVnZXggaXMgbWlzc2luZywgdGhlbiBzZXQgdGhl IHN0YXR1cyBvZiB0aGUKKyAgICAgICAgICAgICAgICAjIG1hdGNoZXIgYW5k IG1vdmUgb24uCisgICAgICAgICAgICAgICAgbWF0Y2hlci5lbmFibGVkID0g c3RhdHVzCisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAg IGlmIG5vdCBtYXRjaGVyLm1ldGhvZHM6CisgICAgICAgICAgICAgICAgIyBU aGUgbWV0aG9kcyBhdHRyaWJ1dGUgY291bGQgYmUgTm9uZS4gIE1vdmUgb24u CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGZvciBt IGluIG1hdGNoZXIubWV0aG9kczoKKyAgICAgICAgICAgICAgICBpZiBuYW1l X3JlLm1hdGNoKG0ubmFtZSk6CisgICAgICAgICAgICAgICAgICAgIG0uZW5h YmxlZCA9IHN0YXR1cworCisKK2RlZiBzZXRfeG1fc3RhdHVzKGFyZywgc3Rh dHVzKToKKyAgICAiIiJTZXQgdGhlIHN0YXR1cyAoZW5hYmxlZC9kaXNhYmxl ZCkgb2YgeG1ldGhvZHMgbWF0Y2hpbmcgQVJHLgorICAgIFRoaXMgaXMgYSBo ZWxwZXIgZnVuY3Rpb24gZm9yIGVuYWJsZS9kaXNhYmxlIGNvbW1hbmRzLiAg QVJHIGlzIHRoZQorICAgIGFyZ3VtZW50IHN0cmluZyBwYXNzZWQgdG8gdGhl IGNvbW1hbmRzLgorICAgICIiIgorICAgIGxvY3VzX3JlLCBtYXRjaGVyX3Jl LCBuYW1lX3JlID0gcGFyc2VfeG1fY29tbWFuZF9hcmdzKGFyZykKKyAgICBz ZXRfeG1fc3RhdHVzMShnZXRfZ2xvYmFsX21ldGhvZF9tYXRjaGVycyhsb2N1 c19yZSwgbWF0Y2hlcl9yZSksIG5hbWVfcmUsCisgICAgICAgICAgICAgICAg ICAgc3RhdHVzKQorICAgIHNldF94bV9zdGF0dXMxKAorICAgICAgICBnZXRf bWV0aG9kX21hdGNoZXJzX2luX2xvY2koCisgICAgICAgICAgICBbZ2RiLmN1 cnJlbnRfcHJvZ3NwYWNlKCldLCBsb2N1c19yZSwgbWF0Y2hlcl9yZSksCisg ICAgICAgIG5hbWVfcmUsCisgICAgICAgIHN0YXR1cykKKyAgICBzZXRfeG1f c3RhdHVzMSgKKyAgICAgICAgZ2V0X21ldGhvZF9tYXRjaGVyc19pbl9sb2Np KGdkYi5vYmpmaWxlcygpLCBsb2N1c19yZSwgbWF0Y2hlcl9yZSksCisgICAg ICAgIG5hbWVfcmUsCisgICAgICAgIHN0YXR1cykKKworCitjbGFzcyBJbmZv WE1ldGhvZChnZGIuQ29tbWFuZCk6CisgICAgIiIiR0RCIGNvbW1hbmQgdG8g bGlzdCByZWdpc3RlcmVkIHhtZXRob2QgbWF0Y2hlcnMuCisKKyAgICBVc2Fn ZTogaW5mbyB4bWV0aG9kIFtsb2N1cy1yZWdleHAgW25hbWUtcmVnZXhwXV0K KworICAgIExPQ1VTLVJFR0VYUCBpcyBhIHJlZ3VsYXIgZXhwcmVzc2lvbiBt YXRjaGluZyB0aGUgbG9jYXRpb24gb2YgdGhlCisgICAgeG1ldGhvZCBtYXRj aGVycy4gIElmIGl0IGlzIG9taXR0ZWQsIGFsbCByZWdpc3RlcmVkIHhtZXRo b2QgbWF0Y2hlcnMKKyAgICBmcm9tIGFsbCBsb2NpIGFyZSBsaXN0ZWQuICBB IGxvY3VzIGNvdWxkIGJlICdnbG9iYWwnLCBhIHJlZ3VsYXIgZXhwcmVzc2lv bgorICAgIG1hdGNoaW5nIHRoZSBjdXJyZW50IHByb2dyYW0gc3BhY2UncyBm aWxlbmFtZSwgb3IgYSByZWd1bGFyIGV4cHJlc3Npb24KKyAgICBtYXRjaGlu ZyBmaWxlbmFtZXMgb2Ygb2JqZmlsZXMuICBMb2N1cyBjb3VsZCBiZSAncHJv Z3NwYWNlJyB0byBzcGVjaWZ5IHRoYXQKKyAgICBvbmx5IHhtZXRob2RzIGZy b20gdGhlIGN1cnJlbnQgcHJvZ3NwYWNlIHNob3VsZCBiZSBsaXN0ZWQuCisK KyAgICBOQU1FLVJFR0VYUCBpcyBhIHJlZ3VsYXIgZXhwcmVzc2lvbiBtYXRj aGluZyB0aGUgbmFtZXMgb2YgeG1ldGhvZAorICAgIG1hdGNoZXJzLiAgSWYg dGhpcyBvbWl0dGVkIGZvciBhIHNwZWNpZmllZCBsb2N1cywgdGhlbiBhbGwg cmVnaXN0ZXJlZAorICAgIHhtZXRob2RzIGluIHRoZSBsb2N1cyBhcmUgbGlz dGVkLiAgVG8gbGlzdCBvbmx5IGEgY2VydGFpbiB4bWV0aG9kcworICAgIG1h bmFnZWQgYnkgYSBzaW5nbGUgbWF0Y2hlciwgdGhlIG5hbWUgcmVnZXhwIGNh biBiZSBzcGVjaWZpZWQgYXMKKyAgICBtYXRjaGVyLW5hbWUtcmVnZXhwO3ht ZXRob2QtbmFtZS1yZWdleHAuCisgICAgIiIiCisKKyAgICBkZWYgX19pbml0 X18oc2VsZik6CisgICAgICAgIHN1cGVyKEluZm9YTWV0aG9kLCBzZWxmKS5f X2luaXRfXygiaW5mbyB4bWV0aG9kIiwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGdkYi5DT01NQU5EX0RBVEEpCisKKyAg ICBkZWYgaW52b2tlKHNlbGYsIGFyZywgZnJvbV90dHkpOgorICAgICAgICBs b2N1c19yZSwgbWF0Y2hlcl9yZSwgbmFtZV9yZSA9IHBhcnNlX3htX2NvbW1h bmRfYXJncyhhcmcpCisgICAgICAgIHByaW50X3htX2luZm8oZ2V0X2dsb2Jh bF9tZXRob2RfbWF0Y2hlcnMobG9jdXNfcmUsIG1hdGNoZXJfcmUpLAorICAg ICAgICAgICAgICAgICAgICAgIG5hbWVfcmUpCisgICAgICAgIHByaW50X3ht X2luZm8oCisgICAgICAgICAgICBnZXRfbWV0aG9kX21hdGNoZXJzX2luX2xv Y2koCisgICAgICAgICAgICAgICAgW2dkYi5jdXJyZW50X3Byb2dzcGFjZSgp XSwgbG9jdXNfcmUsIG1hdGNoZXJfcmUpLAorICAgICAgICAgICAgbmFtZV9y ZSkKKyAgICAgICAgcHJpbnRfeG1faW5mbygKKyAgICAgICAgICAgIGdldF9t ZXRob2RfbWF0Y2hlcnNfaW5fbG9jaShnZGIub2JqZmlsZXMoKSwgbG9jdXNf cmUsIG1hdGNoZXJfcmUpLAorICAgICAgICAgICAgbmFtZV9yZSkKKworCitj bGFzcyBFbmFibGVYTWV0aG9kKGdkYi5Db21tYW5kKToKKyAgICAiIiJHREIg Y29tbWFuZCB0byBlbmFibGUgYSBzcGVjaWZpZWQgKGdyb3VwIG9mKSB4bWV0 aG9kKHMpLgorCisgICAgVXNhZ2U6IGVuYWJsZSB4bWV0aG9kIFtsb2N1cy1y ZWdleHAgW25hbWUtcmVnZXhwXV0KKworICAgIExPQ1VTLVJFR0VYUCBpcyBh IHJlZ3VsYXIgZXhwcmVzc2lvbiBtYXRjaGluZyB0aGUgbG9jYXRpb24gb2Yg dGhlCisgICAgeG1ldGhvZCBtYXRjaGVycy4gIElmIGl0IGlzIG9taXR0ZWQs IGFsbCByZWdpc3RlcmVkIHhtZXRob2RzIG1hdGNoZXJzCisgICAgZnJvbSBh bGwgbG9jaSBhcmUgZW5hYmxlZC4gIEEgbG9jdXMgY291bGQgYmUgJ2dsb2Jh bCcsIGEgcmVndWxhciBleHByZXNzaW9uCisgICAgbWF0Y2hpbmcgdGhlIGN1 cnJlbnQgcHJvZ3JhbSBzcGFjZSdzIGZpbGVuYW1lLCBvciBhIHJlZ3VsYXIg ZXhwcmVzc2lvbgorICAgIG1hdGNoaW5nIGZpbGVuYW1lcyBvZiBvYmpmaWxl cy4gIExvY3VzIGNvdWxkIGJlICdwcm9nc3BhY2UnIHRvIHNwZWNpZnkgdGhh dAorICAgIG9ubHkgeG1ldGhvZHMgZnJvbSB0aGUgY3VycmVudCBwcm9nc3Bh Y2Ugc2hvdWxkIGJlIGVuYWJsZWQuCisKKyAgICBOQU1FLVJFR0VYUCBpcyBh IHJlZ3VsYXIgZXhwcmVzc2lvbiBtYXRjaGluZyB0aGUgbmFtZXMgb2YgeG1l dGhvZHMKKyAgICB3aXRoaW4gYSBnaXZlbiBsb2N1cy4gIElmIHRoaXMgb21p dHRlZCBmb3IgYSBzcGVjaWZpZWQgbG9jdXMsIHRoZW4gYWxsCisgICAgcmVn aXN0ZXJlZCB4bWV0aG9kIG1hdGNoZXJzIGluIHRoZSBsb2N1cyBhcmUgZW5h YmxlZC4gIFRvIGVuYWJsZSBvbmx5CisgICAgYSBjZXJ0YWluIHhtZXRob2Rz IG1hbmFnZWQgYnkgYSBzaW5nbGUgbWF0Y2hlciwgdGhlIG5hbWUgcmVnZXhw IGNhbiBiZQorICAgIHNwZWNpZmllZCBhcyBtYXRjaGVyLW5hbWUtcmVnZXhw O3htZXRob2QtbmFtZS1yZWdleHAuCisgICAgIiIiCisKKyAgICBkZWYgX19p bml0X18oc2VsZik6CisgICAgICAgIHN1cGVyKEVuYWJsZVhNZXRob2QsIHNl bGYpLl9faW5pdF9fKCJlbmFibGUgeG1ldGhvZCIsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdkYi5DT01NQU5EX0RB VEEpCisKKyAgICBkZWYgaW52b2tlKHNlbGYsIGFyZywgZnJvbV90dHkpOgor ICAgICAgICBzZXRfeG1fc3RhdHVzKGFyZywgVHJ1ZSkKKworCitjbGFzcyBE aXNhYmxlWE1ldGhvZChnZGIuQ29tbWFuZCk6CisgICAgIiIiR0RCIGNvbW1h bmQgdG8gZGlzYWJsZSBhIHNwZWNpZmllZCAoZ3JvdXAgb2YpIHhtZXRob2Qo cykuCisKKyAgICBVc2FnZTogZGlzYWJsZSB4bWV0aG9kIFtsb2N1cy1yZWdl eHAgW25hbWUtcmVnZXhwXV0KKworICAgIExPQ1VTLVJFR0VYUCBpcyBhIHJl Z3VsYXIgZXhwcmVzc2lvbiBtYXRjaGluZyB0aGUgbG9jYXRpb24gb2YgdGhl CisgICAgeG1ldGhvZCBtYXRjaGVyc3MuICBJZiBpdCBpcyBvbWl0dGVkLCBh bGwgcmVnaXN0ZXJlZCB4bWV0aG9kIG1hdGNoZXJzCisgICAgZnJvbSBhbGwg bG9jaSBhcmUgZGlzYWJsZWQuICBBIGxvY3VzIGNvdWxkIGJlICdnbG9iYWwn LCBhIHJlZ3VsYXIKKyAgICBleHByZXNzaW9uIG1hdGNoaW5nIHRoZSBjdXJy ZW50IHByb2dyYW0gc3BhY2UncyBmaWxlbmFtZSwgb3IgYSByZWd1bGFyCisg ICAgZXhwcmVzc2lvbiBmaWxlbmFtZXMgb2Ygb2JqZmlsZXMuIExvY3VzIGNv dWxkIGJlICdwcm9nc3BhY2UnIHRvIHNwZWNpZnkKKyAgICB0aGF0IG9ubHkg eG1ldGhvZHMgZnJvbSB0aGUgY3VycmVudCBwcm9nc3BhY2Ugc2hvdWxkIGJl IGRpc2FibGVkLgorCisgICAgTkFNRS1SRUdFWFAgaXMgYSByZWd1bGFyIGV4 cHJlc3Npb24gbWF0Y2hpbmcgdGhlIG5hbWVzIG9mIHhtZXRob2RzCisgICAg d2l0aGluIGEgZ2l2ZW4gbG9jdXMuICBJZiB0aGlzIG9taXR0ZWQgZm9yIGEg c3BlY2lmaWVkIGxvY3VzLCB0aGVuIGFsbAorICAgIHJlZ2lzdGVyZWQgeG1l dGhvZCBtYXRjaGVycyBpbiB0aGUgbG9jdXMgYXJlIGRpc2FibGVkLiAgVG8g ZGlzYWJsZQorICAgIG9ubHkgYSBjZXJ0YWluIHhtZXRob2RzIG1hbmFnZWQg YnkgYSBzaW5nbGUgbWF0Y2hlciwgdGhlIG5hbWUgcmVnZXhwCisgICAgY2Fu IGJlIHNwZWNpZmllZCBhcyBtYXRjaGVyLW5hbWUtcmVnZXhwO3htZXRob2Qt bmFtZS1yZWdleHAuCisgICAgIiIiCisKKyAgICBkZWYgX19pbml0X18oc2Vs Zik6CisgICAgICAgIHN1cGVyKERpc2FibGVYTWV0aG9kLCBzZWxmKS5fX2lu aXRfXygiZGlzYWJsZSB4bWV0aG9kIiwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGdkYi5DT01NQU5EX0RBVEEpCisK KyAgICBkZWYgaW52b2tlKHNlbGYsIGFyZywgZnJvbV90dHkpOgorICAgICAg ICBzZXRfeG1fc3RhdHVzKGFyZywgRmFsc2UpCisKKworZGVmIHJlZ2lzdGVy X3htZXRob2RfY29tbWFuZHMoKToKKyAgICAiIiJJbnN0YWxscyB0aGUgeG1l dGhvZCBjb21tYW5kcy4iIiIKKyAgICBJbmZvWE1ldGhvZCgpCisgICAgRW5h YmxlWE1ldGhvZCgpCisgICAgRGlzYWJsZVhNZXRob2QoKQorCisKK3JlZ2lz dGVyX3htZXRob2RfY29tbWFuZHMoKQpkaWZmIC0tZ2l0IGEvZ2RiL3B5dGhv bi9saWIvZ2RiL3htZXRob2QucHkgYi9nZGIvcHl0aG9uL2xpYi9nZGIveG1l dGhvZC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45 ZDBkZWZmCi0tLSAvZGV2L251bGwKKysrIGIvZ2RiL3B5dGhvbi9saWIvZ2Ri L3htZXRob2QucHkKQEAgLTAsMCArMSwyNTQgQEAKKyMgUHl0aG9uIHNpZGUg b2YgdGhlIHN1cHBvcnQgZm9yIHhtZXRob2RzLgorIyBDb3B5cmlnaHQgKEMp IDIwMTMtMjAxNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKwor IyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp c3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVy bXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxp c2hlZCBieQorIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo ZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorIyAoYXQgeW91ciBv cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyBUaGlzIHByb2dyYW0g aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz ZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2 ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZ IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo ZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh aWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m IHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRo IHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5v cmcvbGljZW5zZXMvPi4KKworIiIiVXRpbGl0aWVzIGZvciBkZWZpbmluZyB4 bWV0aG9kcyIiIgorCitpbXBvcnQgZ2RiCitpbXBvcnQgcmUKK2ltcG9ydCBz eXMKKworCitpZiBzeXMudmVyc2lvbl9pbmZvWzBdID4gMjoKKyAgICAjIFB5 dGhvbiAzIHJlbW92ZWQgYmFzZXN0cmluZyBhbmQgbG9uZworICAgIGJhc2Vz dHJpbmcgPSBzdHIKKyAgICBsb25nID0gaW50CisKKworY2xhc3MgWE1ldGhv ZChvYmplY3QpOgorICAgICIiIkJhc2UgY2xhc3MgKG9yIGEgcHJvdG90eXBl KSBmb3IgYW4geG1ldGhvZCBkZXNjcmlwdGlvbi4KKworICAgIEN1cnJlbnRs eSwgdGhlIGRlc2NyaXB0aW9uIG9ubHkgcmVxdWlyZXMgb25seSAnbmFtZScg YW5kICdlbmFibGVkJworICAgIGF0dHJpYnV0ZXMuICBEZXNjcmlwdGlvbiBv YmplY3RzIGFyZSBtYW5hZ2VkIGJ5ICdYTWV0aG9kTWF0Y2hlcicKKyAgICBv YmplY3RzIChzZWUgYmVsb3cpLgorCisgICAgQXR0cmlidXRlczoKKyAgICAg ICAgbmFtZTogVGhlIG5hbWUgb2YgdGhlIHhtZXRob2QuCisgICAgICAgIGVu YWJsZWQ6IEEgYm9vbGVhbiBpbmRpY2F0aW5nIGlmIHRoZSB4bWV0aG9kIGlz IGVuYWJsZWQuCisgICAgIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwg bmFtZSk6CisgICAgICAgIHNlbGYubmFtZSA9IG5hbWUKKyAgICAgICAgc2Vs Zi5lbmFibGVkID0gVHJ1ZQorCisKK2NsYXNzIFhNZXRob2RNYXRjaGVyKG9i amVjdCk6CisgICAgIiIiQWJzdHJhY3QgYmFzZSBjbGFzcyBmb3IgbWF0Y2hp bmcgYW4geG1ldGhvZC4KKworICAgIFdoZW4gbG9va2luZyBmb3IgeG1ldGhv ZHMsIEdEQiBpbnZva2VzIHRoZSBgbWF0Y2gnIG1ldGhvZCBvZiBhCisgICAg cmVnaXN0ZXJlZCB4bWV0aG9kIG1hdGNoZXIgdG8gbWF0Y2ggdGhlIG9iamVj dCB0eXBlIGFuZCBtZXRob2QgbmFtZS4KKyAgICBUaGUgYG1hdGNoJyBtZXRo b2QgaW4gY29uY3JldGUgY2xhc3NlcyBkZXJpdmVkIGZyb20gdGhpcyBjbGFz cyBzaG91bGQKKyAgICByZXR1cm4gYW4gYFhNZXRob2RXb3JrZXInIG9iamVj dCwgb3IgYSBsaXN0IG9mIGBYTWV0aG9kV29ya2VyJworICAgIG9iamVjdHMg aWYgdGhlcmUgaXMgYSBtYXRjaCAoc2VlIGJlbG93IGZvciAnWE1ldGhvZFdv cmtlcicgY2xhc3MpLgorCisgICAgQXR0cmlidXRlczoKKyAgICAgICAgbmFt ZTogVGhlIG5hbWUgb2YgdGhlIG1hdGNoZXIuCisgICAgICAgIGVuYWJsZWQ6 IEEgYm9vbGVhbiBpbmRpY2F0aW5nIGlmIHRoZSBtYXRjaGVyIGlzIGVuYWJs ZWQuCisgICAgICAgIG1ldGhvZHM6IEEgc2VxdWVuY2Ugb2Ygb2JqZWN0cyBv ZiB0eXBlICdYTWV0aG9kJywgb3Igb2JqZWN0cworICAgICAgICAgICAgd2hp Y2ggaGF2ZSBhdCBsZWFzdCB0aGUgYXR0cmlidXRlcyBvZiBhbiAnWE1ldGhv ZCcgb2JqZWN0LgorICAgICAgICAgICAgVGhpcyBsaXN0IGlzIHVzZWQgYnkg dGhlICdlbmFibGUnLydkaXNhYmxlJy8naW5mbycgY29tbWFuZHMgdG8KKyAg ICAgICAgICAgIGVuYWJsZS9kaXNhYmxlL2xpc3QgdGhlIHhtZXRob2RzIHJl Z2lzdGVyZWQgd2l0aCBHREIuICBTZWUKKyAgICAgICAgICAgIHRoZSAnbWF0 Y2gnIG1ldGhvZCBiZWxvdyB0byBrbm93IGhvdyB0aGlzIHNlcXVlbmNlIGlz IHVzZWQuCisgICAgIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbmFt ZSk6CisgICAgICAgICIiIgorICAgICAgICBBcmdzOgorICAgICAgICAgICAg bmFtZTogQW4gaWRlbnRpZnlpbmcgbmFtZSBmb3IgdGhlIHhtZXRob2Qgb3Ig dGhlIGdyb3VwIG9mCisgICAgICAgICAgICAgICAgICB4bWV0aG9kcyByZXR1 cm5lZCBieSB0aGUgYG1hdGNoJyBtZXRob2QuCisgICAgICAgICIiIgorICAg ICAgICBzZWxmLm5hbWUgPSBuYW1lCisgICAgICAgIHNlbGYuZW5hYmxlZCA9 IFRydWUKKyAgICAgICAgc2VsZi5tZXRob2RzID0gTm9uZQorCisgICAgZGVm IG1hdGNoKHNlbGYsIGNsYXNzX3R5cGUsIG1ldGhvZF9uYW1lKToKKyAgICAg ICAgIiIiTWF0Y2ggY2xhc3MgdHlwZSBhbmQgbWV0aG9kIG5hbWUuCisKKyAg ICAgICAgSW4gZGVyaXZlZCBjbGFzc2VzLCBpdCBzaG91bGQgcmV0dXJuIGFu IFhNZXRob2RXb3JrZXIgb2JqZWN0LCBvciBhCisgICAgICAgIHNlcXVlbmNl IG9mICdYTWV0aG9kV29ya2VyJyBvYmplY3RzLiAgT25seSB0aG9zZSB4bWV0 aG9kIHdvcmtlcnMKKyAgICAgICAgd2hvc2UgY29ycmVzcG9uZGluZyAnWE1l dGhvZCcgZGVzY3JpcHRvciBvYmplY3QgaXMgZW5hYmxlZCBzaG91bGQgYmUK KyAgICAgICAgcmV0dXJuZWQuCisKKyAgICAgICAgQXJnczoKKyAgICAgICAg ICAgIGNsYXNzX3R5cGU6IFRoZSBjbGFzcyB0eXBlIChnZGIuVHlwZSBvYmpl Y3QpIHRvIG1hdGNoLgorICAgICAgICAgICAgbWV0aG9kX25hbWU6IFRoZSBu YW1lIChzdHJpbmcpIG9mIHRoZSBtZXRob2QgdG8gbWF0Y2guCisgICAgICAg ICIiIgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKCJYTWV0 aG9kTWF0Y2hlciBtYXRjaCIpCisKKworY2xhc3MgWE1ldGhvZFdvcmtlcihv YmplY3QpOgorICAgICIiIkJhc2UgY2xhc3MgZm9yIGFsbCB4bWV0aG9kIHdv cmtlcnMgZGVmaW5lZCBpbiBQeXRob24uCisKKyAgICBBbiB4bWV0aG9kIHdv cmtlciBpcyBhbiBvYmplY3Qgd2hpY2ggbWF0Y2hlcyB0aGUgbWV0aG9kIGFy Z3VtZW50cywgYW5kCisgICAgaW52b2tlcyB0aGUgbWV0aG9kIHdoZW4gR0RC IHdhbnRzIGl0IHRvLiAgSW50ZXJuYWxseSwgR0RCIGZpcnN0IGludm9rZXMg dGhlCisgICAgJ2dldF9hcmdfdHlwZXMnIG1ldGhvZCB0byBwZXJmb3JtIG92 ZXJsb2FkIHJlc29sdXRpb24uICBJZiBHREIgc2VsZWN0cyB0bworICAgIGlu dm9rZSB0aGlzIFB5dGhvbiB4bWV0aG9kLCB0aGVuIGl0IGludm9rZXMgaXQg dmlhIHRoZSBvdmVycmlkZGVuCisgICAgJ2ludm9rZScgbWV0aG9kLgorCisg ICAgRGVyaXZlZCBjbGFzc2VzIHNob3VsZCBvdmVycmlkZSB0aGUgJ2dldF9h cmdfdHlwZXMnIGFuZCAnaW52b2tlJyBtZXRob2RzLgorICAgICIiIgorCisg ICAgZGVmIGdldF9hcmdfdHlwZXMoc2VsZik6CisgICAgICAgICIiIlJldHVy biBhcmd1bWVudHMgdHlwZXMgb2YgYW4geG1ldGhvZC4KKworICAgICAgICBB IHNlcXVlbmNlIG9mIGdkYi5UeXBlIG9iamVjdHMgY29ycmVzcG9uZGluZyB0 byB0aGUgYXJndW1lbnRzIG9mIHRoZQorICAgICAgICB4bWV0aG9kIGFyZSBy ZXR1cm5lZC4gIElmIHRoZSB4bWV0aG9kIHRha2VzIG5vIGFyZ3VtZW50cywg dGhlbiAnTm9uZScKKyAgICAgICAgb3IgYW4gZW1wdHkgc2VxdWVuY2UgaXMg cmV0dXJuZWQuICBJZiB0aGUgeG1ldGhvZCB0YWtlcyBvbmx5IGEgc2luZ2xl CisgICAgICAgIGFyZ3VtZW50LCB0aGVuIGEgZ2RiLlR5cGUgb2JqZWN0IG9y IGEgc2VxdWVuY2Ugd2l0aCBhIHNpbmdsZSBnZGIuVHlwZQorICAgICAgICBl bGVtZW50IGlzIHJldHVybmVkLgorICAgICAgICAiIiIKKyAgICAgICAgcmFp c2UgTm90SW1wbGVtZW50ZWRFcnJvcigiWE1ldGhvZCBnZXRfYXJnX3R5cGVz IikKKworICAgIGRlZiBpbnZva2Uoc2VsZiwgb2JqLCBhcmdzKToKKyAgICAg ICAgIiIiSW52b2tlIHRoZSB4bWV0aG9kLgorCisgICAgICAgIEFyZ3M6Cisg ICAgICAgICAgICBvYmo6IFRoZSBnZGIuVmFsdWUgb2YgdGhlIG9iamVjdCBv biB3aGljaCB0aGUgbWV0aG9kIGlzIHRvIGJlCisgICAgICAgICAgICAgICAg IGludm9rZWQuCisgICAgICAgICAgICBhcmdzOiBUaGUgdHVwbGUgb2YgYXJn dW1lbnRzIHRvIHRoZSBtZXRob2QuICBFYWNoIGVsZW1lbnQgb2YgdGhlCisg ICAgICAgICAgICAgICAgICB0dXBsZSBpcyBhIGdkYi5WYWx1ZSBvYmplY3Qu CisKKyAgICAgICAgUmV0dXJuczoKKyAgICAgICAgICAgIEEgZ2RiLlZhbHVl IGNvcnJlc3BvbmRpbmcgdG8gdGhlIHZhbHVlIHJldHVybmVkIGJ5IHRoZSB4 bWV0aG9kLgorICAgICAgICAgICAgUmV0dXJucyAnTm9uZScgaWYgdGhlIG1l dGhvZCBkb2VzIG5vdCByZXR1cm4gYW55dGhpbmcuCisgICAgICAgICIiIgor ICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKCJYTWV0aG9kIGlu dm9rZSIpCisKKworY2xhc3MgU2ltcGxlWE1ldGhvZE1hdGNoZXIoWE1ldGhv ZE1hdGNoZXIpOgorICAgICIiIkEgdXRpbGl0eSBjbGFzcyB0byBpbXBsZW1l bnQgc2ltcGxlIHhtZXRob2QgbWF0aGVycyBhbmQgd29ya2Vycy4KKworICAg IFNlZSB0aGUgX19pbml0X18gbWV0aG9kIGJlbG93IGZvciBpbmZvcm1hdGlv biBvbiBob3cgaW5zdGFuY2VzIG9mIHRoaXMKKyAgICBjbGFzcyBjYW4gYmUg dXNlZC4KKworICAgIEZvciBzaW1wbGUgY2xhc3NlcyBhbmQgbWV0aG9kcywg b25lIGNhbiBjaG9vc2UgdG8gdXNlIHRoaXMgY2xhc3MuICBGb3IKKyAgICBj b21wbGV4IHhtZXRob2RzLCB3aGljaCBuZWVkIHRvIHJlcGxhY2UvaW1wbGVt ZW50IHRlbXBsYXRlIG1ldGhvZHMgb24KKyAgICBwb3NzaWJseSB0ZW1wbGF0 ZSBjbGFzc2VzLCBvbmUgc2hvdWxkIGltcGxlbWVudCB0aGVpciBvd24geG1l dGhvZAorICAgIG1hdGNoZXJzIGFuZCB3b3JrZXJzLiAgU2VlIHB5LXhtZXRo b2RzLnB5IGluIHRlc3RzdWl0ZS9nZGIucHl0aG9uCisgICAgZGlyZWN0b3J5 IG9mIHRoZSBHREIgc291cmNlIHRyZWUgZm9yIGV4YW1wbGVzLgorICAgICIi IgorCisgICAgY2xhc3MgU2ltcGxlWE1ldGhvZFdvcmtlcihYTWV0aG9kV29y a2VyKToKKyAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIG1ldGhvZF9mdW5j dGlvbiwgYXJnX3R5cGVzKToKKyAgICAgICAgICAgIHNlbGYuX2FyZ190eXBl cyA9IGFyZ190eXBlcworICAgICAgICAgICAgc2VsZi5fbWV0aG9kX2Z1bmN0 aW9uID0gbWV0aG9kX2Z1bmN0aW9uCisKKyAgICAgICAgZGVmIGdldF9hcmdf dHlwZXMoc2VsZik6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5fYXJnX3R5 cGVzCisKKyAgICAgICAgZGVmIGludm9rZShzZWxmLCBvYmosIGFyZ3MpOgor ICAgICAgICAgICAgcmV0dXJuIHNlbGYuX21ldGhvZF9mdW5jdGlvbihvYmos ICphcmdzKQorCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbmFtZSwgY2xh c3NfbWF0Y2hlciwgbWV0aG9kX21hdGNoZXIsIG1ldGhvZF9mdW5jdGlvbiwK KyAgICAgICAgICAgICAgICAgKmFyZ190eXBlcyk6CisgICAgICAgICIiIgor ICAgICAgICBBcmdzOgorICAgICAgICAgICAgbmFtZTogTmFtZSBvZiB0aGUg eG1ldGhvZCBtYXRjaGVyLgorICAgICAgICAgICAgY2xhc3NfbWF0Y2hlcjog QSByZWd1bGFyIGV4cHJlc3Npb24gdXNlZCB0byBtYXRjaCB0aGUgbmFtZSBv ZiB0aGUKKyAgICAgICAgICAgICAgICBjbGFzcyB3aG9zZSBtZXRob2QgdGhp cyB4bWV0aG9kIGlzIGltcGxlbWVudGluZy9yZXBsYWNpbmcuCisgICAgICAg ICAgICBtZXRob2RfbWF0Y2hlcjogQSByZWd1bGFyIGV4cHJlc3Npb24gdXNl ZCB0byBtYXRjaCB0aGUgbmFtZSBvZiB0aGUKKyAgICAgICAgICAgICAgICBt ZXRob2QgdGhpcyB4bWV0aG9kIGlzIGltcGxlbWVudGluZy9yZXBsYWNpbmcu CisgICAgICAgICAgICBtZXRob2RfZnVuY3Rpb246IEEgUHl0aG9uIGNhbGxh YmxlIHdoaWNoIHdvdWxkIGJlIGNhbGxlZCB2aWEgdGhlCisgICAgICAgICAg ICAgICAgJ2ludm9rZScgbWV0aG9kIG9mIHRoZSB3b3JrZXIgcmV0dXJuZWQg YnkgdGhlIG9iamVjdHMgb2YgdGhpcworICAgICAgICAgICAgICAgIGNsYXNz LiAgVGhpcyBjYWxsYWJsZSBzaG91bGQgYWNjZXB0IHRoZSBvYmplY3QgKCp0 aGlzKSBhcyB0aGUKKyAgICAgICAgICAgICAgICBmaXJzdCBhcmd1bWVudCBm b2xsb3dlZCBieSB0aGUgcmVzdCBvZiB0aGUgYXJndW1lbnRzIHRvIHRoZQor ICAgICAgICAgICAgICAgIG1ldGhvZC4gQWxsIGFyZ3VtZW50cyB0byB0aGlz IGZ1bmN0aW9uIHNob3VsZCBiZSBnZGIuVmFsdWUKKyAgICAgICAgICAgICAg ICBvYmplY3RzLgorICAgICAgICAgICAgYXJnX3R5cGVzOiBUaGUgZ2RiLlR5 cGUgb2JqZWN0cyBjb3JyZXNwb25kaW5nIHRvIHRoZSBhcmd1bWVudHMgdGhh dAorICAgICAgICAgICAgICAgIHRoaXMgeG1ldGhvZCB0YWtlcy4gSXQgY2Fu IGJlIE5vbmUsIG9yIGFuIGVtcHR5IHNlcXVlbmNlLAorICAgICAgICAgICAg ICAgIG9yIGEgc2luZ2xlIGdkYi5UeXBlIG9iamVjdCwgb3IgYSBzZXF1ZW5j ZSBvZiBnZGIuVHlwZSBvYmplY3RzLgorICAgICAgICAiIiIKKyAgICAgICAg WE1ldGhvZE1hdGNoZXIuX19pbml0X18oc2VsZiwgbmFtZSkKKyAgICAgICAg YXNzZXJ0IGNhbGxhYmxlKG1ldGhvZF9mdW5jdGlvbiksICgKKyAgICAgICAg ICAgICJUaGUgJ21ldGhvZF9mdW5jdGlvbicgYXJndW1lbnQgdG8gJ1NpbXBs ZVhNZXRob2RNYXRjaGVyJyAiCisgICAgICAgICAgICAiX19pbml0X18gbWV0 aG9kIHNob3VsZCBiZSBhIGNhbGxhYmxlLiIpCisgICAgICAgIHNlbGYuX21l dGhvZF9mdW5jdGlvbiA9IG1ldGhvZF9mdW5jdGlvbgorICAgICAgICBzZWxm Ll9jbGFzc19tYXRjaGVyID0gY2xhc3NfbWF0Y2hlcgorICAgICAgICBzZWxm Ll9tZXRob2RfbWF0Y2hlciA9IG1ldGhvZF9tYXRjaGVyCisgICAgICAgIHNl bGYuX2FyZ190eXBlcyA9IGFyZ190eXBlcworCisgICAgZGVmIG1hdGNoKHNl bGYsIGNsYXNzX3R5cGUsIG1ldGhvZF9uYW1lKToKKyAgICAgICAgY20gPSBy ZS5tYXRjaChzZWxmLl9jbGFzc19tYXRjaGVyLCBzdHIoY2xhc3NfdHlwZS51 bnF1YWxpZmllZCgpLnRhZykpCisgICAgICAgIG1tID0gcmUubWF0Y2goc2Vs Zi5fbWV0aG9kX21hdGNoZXIsIG1ldGhvZF9uYW1lKQorICAgICAgICBpZiBj bSBhbmQgbW06CisgICAgICAgICAgICByZXR1cm4gU2ltcGxlWE1ldGhvZE1h dGNoZXIuU2ltcGxlWE1ldGhvZFdvcmtlcigKKyAgICAgICAgICAgICAgICBz ZWxmLl9tZXRob2RfZnVuY3Rpb24sIHNlbGYuX2FyZ190eXBlcykKKworCisj IEEgaGVscGVyIGZ1bmN0aW9uIGZvciByZWdpc3Rlcl94bWV0aG9kX21hdGNo ZXIgd2hpY2ggcmV0dXJucyBhbiBlcnJvcgorIyBvYmplY3QgaWYgTUFUQ0hF UiBpcyBub3QgaGF2aW5nIHRoZSByZXF1aXNpdGUgYXR0cmlidXRlcyBpbiB0 aGUgcHJvcGVyCisjIGZvcm1hdC4KKworZGVmIHZhbGlkYXRlX3htZXRob2Rf bWF0Y2hlcihtYXRjaGVyKToKKyAgICBpZiBub3QgaGFzYXR0cihtYXRjaGVy LCAibWF0Y2giKToKKyAgICAgICAgcmV0dXJuIFR5cGVFcnJvcigiWG1ldGhv ZCBtYXRjaGVyIGlzIG1pc3NpbmcgbWV0aG9kOiBtYXRjaCIpCisgICAgaWYg bm90IGhhc2F0dHIobWF0Y2hlciwgIm5hbWUiKToKKyAgICAgICAgcmV0dXJu IFR5cGVFcnJvcigiWG1ldGhvZCBtYXRjaGVyIGlzIG1pc3NpbmcgYXR0cmli dXRlOiBuYW1lIikKKyAgICBpZiBub3QgaGFzYXR0cihtYXRjaGVyLCAiZW5h YmxlZCIpOgorICAgICAgICByZXR1cm4gVHlwZUVycm9yKCJYbWV0aG9kIG1h dGNoZXIgaXMgbWlzc2luZyBhdHRyaWJ1dGU6IGVuYWJsZWQiKQorICAgIGlm IG5vdCBpc2luc3RhbmNlKG1hdGNoZXIubmFtZSwgYmFzZXN0cmluZyk6Cisg ICAgICAgIHJldHVybiBUeXBlRXJyb3IoIkF0dHJpYnV0ZSAnbmFtZScgb2Yg eG1ldGhvZCBtYXRjaGVyIGlzIG5vdCBhICIKKyAgICAgICAgICAgICAgICAg ICAgICAgICAic3RyaW5nIikKKyAgICBpZiBtYXRjaGVyLm5hbWUuZmluZCgi OyIpID49IDA6CisgICAgICAgIHJldHVybiBWYWx1ZUVycm9yKCJYbWV0aG9k IG1hdGNoZXIgbmFtZSBjYW5ub3QgY29udGFpbiAnOycgaW4gaXQiKQorCisK KyMgQSBoZWxwZXIgZnVuY3Rpb24gZm9yIHJlZ2lzdGVyX3htZXRob2RfbWF0 Y2hlciB3aGljaCBsb29rcyB1cCBhbiAKKyMgeG1ldGhvZCBtYXRjaGVyIHdp dGggTkFNRSBpbiBMT0NVUy4gIFJldHVybnMgdGhlIGluZGV4IG9mIHRoZSB4 bWV0aG9kCisjIG1hdGNoZXIgaW4gJ3htZXRob2RzJyBzZXF1ZW5jZSBhdHRy aWJ1dGUgb2YgdGhlIExPQ1VTLgorCitkZWYgbG9va3VwX3htZXRob2RfbWF0 Y2hlcihsb2N1cywgbmFtZSk6CisgICAgaSA9IDAKKyAgICBmb3IgbSBpbiBs b2N1cy54bWV0aG9kczoKKyAgICAgICAgaWYgbS5uYW1lID09IG5hbWU6Cisg ICAgICAgICAgICByZXR1cm4gaQorICAgICAgICBpID0gaSArIDEKKworCitk ZWYgcmVnaXN0ZXJfeG1ldGhvZF9tYXRjaGVyKGxvY3VzLCBtYXRjaGVyLCBy ZXBsYWNlPUZhbHNlKToKKyAgICAiIiJSZWdpc3RlcnMgYSB4bWV0aG9kIG1h dGNoZXIgTUFUQ0hFUiB3aXRoIGEgTE9DVVMuCisKKyAgICBBcmd1bWVudHM6 CisgICAgICAgIGxvY3VzOiBUaGUgbG9jdXMgaW4gd2hpY2ggdGhlIHhtZXRo b2RzIHNob3VsZCBiZSByZWdpc3RlcmVkLiAgSXQKKyAgICAgICAgICAgICAg IGNhbiBiZSAnTm9uZScgdG8gaW5kaWNhdGUgdGhhdCB0aGUgeG1ldGhvZHMg c2hvdWxkIGJlCisgICAgICAgICAgICAgICByZWdpc3RlcmVkIGdsb2JhbGx5 LiBPciwgaXQgY291bGQgYmUgYSBnZGIuT2JqZmlsZSBvciBhCisgICAgICAg ICAgICAgICBnZGIuUHJvZ3NwYWNlIG9iamVjdCBpbiB3aGljaCB0aGUgeG1l dGhvZHMgc2hvdWxkIGJlCisgICAgICAgICAgICAgICByZWdpc3RlcmVkLgor ICAgICAgICBtYXRjaGVyOiBUaGUgeG1ldGhvZCBtYXRjaGVyIHRvIHJlZ2lz dGVyIHdpdGggdGhlIExPQ1VTLiAgSXQKKyAgICAgICAgICAgIHNob3VsZCBi ZSBhbiBpbnN0YW5jZSBvZiAnWE1ldGhvZE1hdGNoZXInIGNsYXNzLgorICAg ICAgICByZXBsYWNlOiBJZiBUcnVlLCByZXBsYWNlIGFueSBleGlzdGluZyB4 bWV0aG9kIG1hdGNoZXIgd2l0aCB0aGUKKyAgICAgICAgICAgIHNhbWUgbmFt ZSBpbiB0aGUgbG9jdXMuICBPdGhlcndpc2UsIGlmIGEgbWF0Y2hlciB3aXRo IHRoZSBzYW1lIG5hbWUKKyAgICAgICAgICAgIGV4aXN0cyBpbiB0aGUgbG9j dXMsIHJhaXNlIGFuIGV4Y2VwdGlvbi4KKyAgICAiIiIKKyAgICBlcnIgPSB2 YWxpZGF0ZV94bWV0aG9kX21hdGNoZXIobWF0Y2hlcikKKyAgICBpZiBlcnI6 CisgICAgICAgIHJhaXNlIGVycgorICAgIGlmIG5vdCBsb2N1czoKKyAgICAg ICAgbG9jdXMgPSBnZGIKKyAgICBpZiBsb2N1cyA9PSBnZGI6CisgICAgICAg IGxvY3VzX25hbWUgPSAiZ2xvYmFsIgorICAgIGVsc2U6CisgICAgICAgIGxv Y3VzX25hbWUgPSBsb2N1cy5maWxlbmFtZQorICAgIGluZGV4ID0gbG9va3Vw X3htZXRob2RfbWF0Y2hlcihsb2N1cywgbWF0Y2hlci5uYW1lKQorICAgIGlm IGluZGV4OgorICAgICAgICBpZiByZXBsYWNlOgorICAgICAgICAgICAgZGVs IGxvY3VzLnhtZXRob2RzW2luZGV4XQorICAgICAgICBlbHNlOgorICAgICAg ICAgICAgcmFpc2UgUnVudGltZUVycm9yKCJYbWV0aG9kIG1hdGNoZXIgYWxy ZWFkeSByZWdpc3RlcmVkIHdpdGggIgorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICIlczogJXMiICUgKGxvY3VzX25hbWUsIG5ld19tZXRob2Qu bmFtZSkpCisgICAgaWYgZ2RiLnBhcmFtZXRlcigidmVyYm9zZSIpOgorICAg ICAgICBnZGIud3JpdGUoIlJlZ2lzdGVyaW5nIHhtZXRob2QgbWF0Y2hlciAn JXMnIHdpdGggJXMnIC4uLlxuIikKKyAgICBsb2N1cy54bWV0aG9kcy5pbnNl cnQoMCwgbWF0Y2hlcikKZGlmZiAtLWdpdCBhL2dkYi9weXRob24vcHktb2Jq ZmlsZS5jIGIvZ2RiL3B5dGhvbi9weS1vYmpmaWxlLmMKaW5kZXggOTdmYjBi ZS4uNWQwMGQ2MiAxMDA2NDQKLS0tIGEvZ2RiL3B5dGhvbi9weS1vYmpmaWxl LmMKKysrIGIvZ2RiL3B5dGhvbi9weS1vYmpmaWxlLmMKQEAgLTM3LDYgKzM3 LDkgQEAgdHlwZWRlZiBzdHJ1Y3QKICAgUHlPYmplY3QgKmZyYW1lX2ZpbHRl cnM7CiAgIC8qIFRoZSB0eXBlLXByaW50ZXIgbGlzdC4gICovCiAgIFB5T2Jq ZWN0ICp0eXBlX3ByaW50ZXJzOworCisgIC8qIFRoZSBkZWJ1ZyBtZXRob2Qg bWF0Y2hlciBsaXN0LiAgKi8KKyAgUHlPYmplY3QgKnhtZXRob2RzOwogfSBv YmpmaWxlX29iamVjdDsKIAogc3RhdGljIFB5VHlwZU9iamVjdCBvYmpmaWxl X29iamVjdF90eXBlCkBAIC02Nyw2ICs3MCw3IEBAIG9iamZweV9kZWFsbG9j IChQeU9iamVjdCAqbykKICAgUHlfWERFQ1JFRiAoc2VsZi0+cHJpbnRlcnMp OwogICBQeV9YREVDUkVGIChzZWxmLT5mcmFtZV9maWx0ZXJzKTsKICAgUHlf WERFQ1JFRiAoc2VsZi0+dHlwZV9wcmludGVycyk7CisgIFB5X1hERUNSRUYg KHNlbGYtPnhtZXRob2RzKTsKICAgUHlfVFlQRSAoc2VsZiktPnRwX2ZyZWUg KHNlbGYpOwogfQogCkBAIC05OSw2ICsxMDMsMTMgQEAgb2JqZnB5X25ldyAo UHlUeXBlT2JqZWN0ICp0eXBlLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3Qg KmtleXdvcmRzKQogCSAgUHlfREVDUkVGIChzZWxmKTsKIAkgIHJldHVybiBO VUxMOwogCX0KKworICAgICAgc2VsZi0+eG1ldGhvZHMgPSBQeUxpc3RfTmV3 ICgwKTsKKyAgICAgIGlmIChzZWxmLT54bWV0aG9kcyA9PSBOVUxMKQorCXsK KwkgIFB5X0RFQ1JFRiAoc2VsZik7CisJICByZXR1cm4gTlVMTDsKKwl9CiAg ICAgfQogICByZXR1cm4gKFB5T2JqZWN0ICopIHNlbGY7CiB9CkBAIC0xOTMs NiArMjA0LDE3IEBAIG9iamZweV9nZXRfdHlwZV9wcmludGVycyAoUHlPYmpl Y3QgKm8sIHZvaWQgKmlnbm9yZSkKICAgcmV0dXJuIHNlbGYtPnR5cGVfcHJp bnRlcnM7CiB9CiAKKy8qIEdldCB0aGUgJ3htZXRob2RzJyBhdHRyaWJ1dGUu ICAqLworCitQeU9iamVjdCAqCitvYmpmcHlfZ2V0X3htZXRob2RzIChQeU9i amVjdCAqbywgdm9pZCAqaWdub3JlKQoreworICBvYmpmaWxlX29iamVjdCAq c2VsZiA9IChvYmpmaWxlX29iamVjdCAqKSBvOworCisgIFB5X0lOQ1JFRiAo c2VsZi0+eG1ldGhvZHMpOworICByZXR1cm4gc2VsZi0+eG1ldGhvZHM7Cit9 CisKIC8qIFNldCB0aGUgJ3R5cGVfcHJpbnRlcnMnIGF0dHJpYnV0ZS4gICov CiAKIHN0YXRpYyBpbnQKQEAgLTI5Miw2ICszMTQsMTMgQEAgb2JqZmlsZV90 b19vYmpmaWxlX29iamVjdCAoc3RydWN0IG9iamZpbGUgKm9iamZpbGUpCiAJ ICAgICAgcmV0dXJuIE5VTEw7CiAJICAgIH0KIAorCSAgb2JqZWN0LT54bWV0 aG9kcyA9IFB5TGlzdF9OZXcgKDApOworCSAgaWYgKG9iamVjdC0+eG1ldGhv ZHMgPT0gTlVMTCkKKwkgICAgeworCSAgICAgIFB5X0RFQ1JFRiAob2JqZWN0 KTsKKwkgICAgICByZXR1cm4gTlVMTDsKKwkgICAgfQorCiAJICBzZXRfb2Jq ZmlsZV9kYXRhIChvYmpmaWxlLCBvYmpmcHlfb2JqZmlsZV9kYXRhX2tleSwg b2JqZWN0KTsKIAl9CiAgICAgfQpAQCAtMzMzLDYgKzM2Miw4IEBAIHN0YXRp YyBQeUdldFNldERlZiBvYmpmaWxlX2dldHNldFtdID0KICAgICBvYmpmcHlf c2V0X2ZyYW1lX2ZpbHRlcnMsICJGcmFtZSBGaWx0ZXJzLiIsIE5VTEwgfSwK ICAgeyAidHlwZV9wcmludGVycyIsIG9iamZweV9nZXRfdHlwZV9wcmludGVy cywgb2JqZnB5X3NldF90eXBlX3ByaW50ZXJzLAogICAgICJUeXBlIHByaW50 ZXJzLiIsIE5VTEwgfSwKKyAgeyAieG1ldGhvZHMiLCBvYmpmcHlfZ2V0X3ht ZXRob2RzLCBOVUxMLAorICAgICJEZWJ1ZyBtZXRob2RzLiIsIE5VTEwgfSwK ICAgeyBOVUxMIH0KIH07CiAKZGlmZiAtLWdpdCBhL2dkYi9weXRob24vcHkt cHJvZ3NwYWNlLmMgYi9nZGIvcHl0aG9uL3B5LXByb2dzcGFjZS5jCmluZGV4 IGRiNGM1NjQuLmIwMDkyYzUgMTAwNjQ0Ci0tLSBhL2dkYi9weXRob24vcHkt cHJvZ3NwYWNlLmMKKysrIGIvZ2RiL3B5dGhvbi9weS1wcm9nc3BhY2UuYwpA QCAtMzksNiArMzksOSBAQCB0eXBlZGVmIHN0cnVjdAogICBQeU9iamVjdCAq ZnJhbWVfZmlsdGVyczsKICAgLyogVGhlIHR5cGUtcHJpbnRlciBsaXN0LiAg Ki8KICAgUHlPYmplY3QgKnR5cGVfcHJpbnRlcnM7CisKKyAgLyogVGhlIGRl YnVnIG1ldGhvZCBsaXN0LiAgKi8KKyAgUHlPYmplY3QgKnhtZXRob2RzOwog fSBwc3BhY2Vfb2JqZWN0OwogCiBzdGF0aWMgUHlUeXBlT2JqZWN0IHBzcGFj ZV9vYmplY3RfdHlwZQpAQCAtNzUsNiArNzgsNyBAQCBwc3B5X2RlYWxsb2Mg KFB5T2JqZWN0ICpzZWxmKQogICBQeV9YREVDUkVGIChwc19zZWxmLT5wcmlu dGVycyk7CiAgIFB5X1hERUNSRUYgKHBzX3NlbGYtPmZyYW1lX2ZpbHRlcnMp OwogICBQeV9YREVDUkVGIChwc19zZWxmLT50eXBlX3ByaW50ZXJzKTsKKyAg UHlfWERFQ1JFRiAocHNfc2VsZi0+eG1ldGhvZHMpOwogICBQeV9UWVBFIChz ZWxmKS0+dHBfZnJlZSAoc2VsZik7CiB9CiAKQEAgLTEwNyw2ICsxMTEsMTMg QEAgcHNweV9uZXcgKFB5VHlwZU9iamVjdCAqdHlwZSwgUHlPYmplY3QgKmFy Z3MsIFB5T2JqZWN0ICprZXl3b3JkcykKIAkgIFB5X0RFQ1JFRiAoc2VsZik7 CiAJICByZXR1cm4gTlVMTDsKIAl9CisKKyAgICAgIHNlbGYtPnhtZXRob2Rz ID0gUHlMaXN0X05ldyAoMCk7CisgICAgICBpZiAoc2VsZi0+eG1ldGhvZHMg PT0gTlVMTCkKKwl7CisJICBQeV9ERUNSRUYgKHNlbGYpOworCSAgcmV0dXJu IE5VTEw7CisJfQogICAgIH0KICAgcmV0dXJuIChQeU9iamVjdCAqKSBzZWxm OwogfQpAQCAtMjAxLDYgKzIxMiwxNyBAQCBwc3B5X2dldF90eXBlX3ByaW50 ZXJzIChQeU9iamVjdCAqbywgdm9pZCAqaWdub3JlKQogICByZXR1cm4gc2Vs Zi0+dHlwZV9wcmludGVyczsKIH0KIAorLyogR2V0IHRoZSAneG1ldGhvZHMn IGF0dHJpYnV0ZS4gICovCisKK1B5T2JqZWN0ICoKK3BzcHlfZ2V0X3htZXRo b2RzIChQeU9iamVjdCAqbywgdm9pZCAqaWdub3JlKQoreworICBwc3BhY2Vf b2JqZWN0ICpzZWxmID0gKHBzcGFjZV9vYmplY3QgKikgbzsKKworICBQeV9J TkNSRUYgKHNlbGYtPnhtZXRob2RzKTsKKyAgcmV0dXJuIHNlbGYtPnhtZXRo b2RzOworfQorCiAvKiBTZXQgdGhlICd0eXBlX3ByaW50ZXJzJyBhdHRyaWJ1 dGUuICAqLwogCiBzdGF0aWMgaW50CkBAIC0yOTcsNiArMzE5LDEzIEBAIHBz cGFjZV90b19wc3BhY2Vfb2JqZWN0IChzdHJ1Y3QgcHJvZ3JhbV9zcGFjZSAq cHNwYWNlKQogCSAgICAgIHJldHVybiBOVUxMOwogCSAgICB9CiAKKwkgIG9i amVjdC0+eG1ldGhvZHMgPSBQeUxpc3RfTmV3ICgwKTsKKwkgIGlmIChvYmpl Y3QtPnhtZXRob2RzID09IE5VTEwpCisJICAgIHsKKwkgICAgICBQeV9ERUNS RUYgKG9iamVjdCk7CisJICAgICAgcmV0dXJuIE5VTEw7CisJICAgIH0KKwog CSAgc2V0X3Byb2dyYW1fc3BhY2VfZGF0YSAocHNwYWNlLCBwc3B5X3BzcGFj ZV9kYXRhX2tleSwgb2JqZWN0KTsKIAl9CiAgICAgfQpAQCAtMzI5LDYgKzM1 OCw4IEBAIHN0YXRpYyBQeUdldFNldERlZiBwc3BhY2VfZ2V0c2V0W10gPQog ICAgICJGcmFtZSBmaWx0ZXJzLiIsIE5VTEwgfSwKICAgeyAidHlwZV9wcmlu dGVycyIsIHBzcHlfZ2V0X3R5cGVfcHJpbnRlcnMsIHBzcHlfc2V0X3R5cGVf cHJpbnRlcnMsCiAgICAgIlR5cGUgcHJpbnRlcnMuIiwgTlVMTCB9LAorICB7 ICJ4bWV0aG9kcyIsIHBzcHlfZ2V0X3htZXRob2RzLCBOVUxMLAorICAgICJE ZWJ1ZyBtZXRob2RzLiIsIE5VTEwgfSwKICAgeyBOVUxMIH0KIH07CiAKZGlm ZiAtLWdpdCBhL2dkYi9weXRob24vcHkteG1ldGhvZHMuYyBiL2dkYi9weXRo b24vcHkteG1ldGhvZHMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw MDAwMDAwLi4wODY4YzlmCi0tLSAvZGV2L251bGwKKysrIGIvZ2RiL3B5dGhv bi9weS14bWV0aG9kcy5jCkBAIC0wLDAgKzEsNjQ4IEBACisvKiBTdXBwb3J0 IGZvciBkZWJ1ZyBtZXRob2RzIGluIFB5dGhvbi4KKworICAgQ29weXJpZ2h0 IChDKSAyMDEzLTIwMTQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMu CisKKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEdEQi4KKworICAgVGhpcyBw cm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl IGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0 aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5 CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVy c2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgKGF0IHlvdXIgb3B0aW9u KSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGRp c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws CisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0 aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9y IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQor ICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls cy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0 aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGgg dGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9y Zy9saWNlbnNlcy8+LiAgKi8KKworI2luY2x1ZGUgImRlZnMuaCIKKyNpbmNs dWRlICJhcmNoLXV0aWxzLmgiCisjaW5jbHVkZSAiZXh0ZW5zaW9uLXByaXYu aCIKKyNpbmNsdWRlICJvYmpmaWxlcy5oIgorI2luY2x1ZGUgInZhbHVlLmgi CisjaW5jbHVkZSAibGFuZ3VhZ2UuaCIKKworI2luY2x1ZGUgInB5dGhvbi5o IgorI2luY2x1ZGUgInB5dGhvbi1pbnRlcm5hbC5oIgorCitzdGF0aWMgY29u c3QgY2hhciBlbmFibGVkX2ZpZWxkX25hbWVbXSA9ICJlbmFibGVkIjsKK3N0 YXRpYyBjb25zdCBjaGFyIG1hdGNoX21ldGhvZF9uYW1lW10gPSAibWF0Y2gi Oworc3RhdGljIGNvbnN0IGNoYXIgZ2V0X2FyZ190eXBlc19tZXRob2RfbmFt ZVtdID0gImdldF9hcmdfdHlwZXMiOworc3RhdGljIGNvbnN0IGNoYXIgaW52 b2tlX21ldGhvZF9uYW1lW10gPSAiaW52b2tlIjsKK3N0YXRpYyBjb25zdCBj aGFyIG1hdGNoZXJzX2F0dHJfc3RyW10gPSAieG1ldGhvZHMiOworCitzdGF0 aWMgUHlPYmplY3QgKnB5X21hdGNoX21ldGhvZF9uYW1lID0gTlVMTDsKK3N0 YXRpYyBQeU9iamVjdCAqcHlfZ2V0X2FyZ190eXBlc19tZXRob2RfbmFtZSA9 IE5VTEw7CitzdGF0aWMgUHlPYmplY3QgKnB5X2ludm9rZV9tZXRob2RfbmFt ZSA9IE5VTEw7CisKK3N0cnVjdCBnZGJweV93b3JrZXJfZGF0YQoreworICBQ eU9iamVjdCAqd29ya2VyOworICBQeU9iamVjdCAqdGhpc190eXBlOworfTsK Kworc3RhdGljIHN0cnVjdCB4bWV0aG9kX3dvcmtlciAqbmV3X3B5dGhvbl94 bWV0aG9kX3dvcmtlcgorICAoUHlPYmplY3QgKml0ZW0sIFB5T2JqZWN0ICpw eV9vYmpfdHlwZSk7CisKKy8qIEltcGxlbWVudGF0aW9uIG9mIGZyZWVfeG1l dGhvZF93b3JrZXJfZGF0YSBmb3IgUHl0aG9uLiAgKi8KKwordm9pZAorZ2Ri cHlfZnJlZV94bWV0aG9kX3dvcmtlcl9kYXRhCisgIChjb25zdCBzdHJ1Y3Qg ZXh0ZW5zaW9uX2xhbmd1YWdlX2RlZm4gKmV4dGxhbmcsIHZvaWQgKmRhdGEp Cit7CisgIHN0cnVjdCBnZGJweV93b3JrZXJfZGF0YSAqd29ya2VyX2RhdGEg PSBkYXRhOworCisgIGdkYl9hc3NlcnQgKHdvcmtlcl9kYXRhLT53b3JrZXIg IT0gTlVMTCAmJiB3b3JrZXJfZGF0YS0+dGhpc190eXBlICE9IE5VTEwpOwor CisgIFB5X0RFQ1JFRiAod29ya2VyX2RhdGEtPndvcmtlcik7CisgIFB5X0RF Q1JFRiAod29ya2VyX2RhdGEtPnRoaXNfdHlwZSk7CisgIHhmcmVlICh3b3Jr ZXJfZGF0YSk7Cit9CisKKy8qIEltcGxlbWVudGF0aW9uIG9mIGNsb25lX3ht ZXRob2Rfd29ya2VyX2RhdGEgZm9yIFB5dGhvbi4gICovCisKK3ZvaWQgKgor Z2RicHlfY2xvbmVfeG1ldGhvZF93b3JrZXJfZGF0YQorICAoY29uc3Qgc3Ry dWN0IGV4dGVuc2lvbl9sYW5ndWFnZV9kZWZuICpleHRsYW5nLCB2b2lkICpk YXRhKQoreworICBzdHJ1Y3QgZ2RicHlfd29ya2VyX2RhdGEgKndvcmtlcl9k YXRhID0gZGF0YSwgKm5ld19kYXRhOworCisgIGdkYl9hc3NlcnQgKHdvcmtl cl9kYXRhLT53b3JrZXIgIT0gTlVMTCAmJiB3b3JrZXJfZGF0YS0+dGhpc190 eXBlICE9IE5VTEwpOworCisgIG5ld19kYXRhID0gWENORVcgKHN0cnVjdCBn ZGJweV93b3JrZXJfZGF0YSk7CisgIG5ld19kYXRhLT53b3JrZXIgPSB3b3Jr ZXJfZGF0YS0+d29ya2VyOworICBuZXdfZGF0YS0+dGhpc190eXBlID0gd29y a2VyX2RhdGEtPnRoaXNfdHlwZTsKKyAgUHlfSU5DUkVGIChuZXdfZGF0YS0+ d29ya2VyKTsKKyAgUHlfSU5DUkVGIChuZXdfZGF0YS0+dGhpc190eXBlKTsK KworICByZXR1cm4gbmV3X2RhdGE7Cit9CisKKy8qIEludm9rZSB0aGUgIm1h dGNoIiBtZXRob2Qgb2YgdGhlIE1BVENIRVIgYW5kIHJldHVybiBhIG5ldyBy ZWZlcmVuY2UKKyAgIHRvIHRoZSByZXN1bHQuICBSZXR1cm5zIE5VTEwgb24g ZXJyb3IuICAqLworCitzdGF0aWMgUHlPYmplY3QgKgoraW52b2tlX21hdGNo X21ldGhvZCAoUHlPYmplY3QgKm1hdGNoZXIsIFB5T2JqZWN0ICpweV9vYmpf dHlwZSwKKwkJICAgICBjb25zdCBjaGFyICp4bWV0aG9kX25hbWUpCit7Cisg IFB5T2JqZWN0ICpweV94bWV0aG9kX25hbWU7CisgIFB5T2JqZWN0ICptYXRj aF9tZXRob2QsICplbmFibGVkX2ZpZWxkLCAqbWF0Y2hfcmVzdWx0OworICBz dHJ1Y3QgY2xlYW51cCAqY2xlYW51cHM7CisgIGludCBlbmFibGVkOworCisg IGNsZWFudXBzID0gbWFrZV9jbGVhbnVwIChudWxsX2NsZWFudXAsIE5VTEwp OworCisgIGVuYWJsZWRfZmllbGQgPSBQeU9iamVjdF9HZXRBdHRyU3RyaW5n IChtYXRjaGVyLCBlbmFibGVkX2ZpZWxkX25hbWUpOworICBpZiAoZW5hYmxl ZF9maWVsZCA9PSBOVUxMKQorICAgIHsKKyAgICAgIGRvX2NsZWFudXBzIChj bGVhbnVwcyk7CisgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgIG1ha2Vf Y2xlYW51cF9weV9kZWNyZWYgKGVuYWJsZWRfZmllbGQpOworCisgIGVuYWJs ZWQgPSBQeU9iamVjdF9Jc1RydWUgKGVuYWJsZWRfZmllbGQpOworICBpZiAo ZW5hYmxlZCA9PSAtMSkKKyAgICB7CisgICAgICBkb19jbGVhbnVwcyAoY2xl YW51cHMpOworICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICBpZiAoZW5h YmxlZCA9PSAwKQorICAgIHsKKyAgICAgIC8qIFJldHVybiAnTm9uZScgaWYg dGhlIG1hdGNoZXIgaXMgbm90IGVuYWJsZWQuICAqLworICAgICAgZG9fY2xl YW51cHMgKGNsZWFudXBzKTsKKyAgICAgIFB5X1JFVFVSTl9OT05FOworICAg IH0KKworICBtYXRjaF9tZXRob2QgPSBQeU9iamVjdF9HZXRBdHRyU3RyaW5n IChtYXRjaGVyLCBtYXRjaF9tZXRob2RfbmFtZSk7CisgIGlmIChtYXRjaF9t ZXRob2QgPT0gTlVMTCkKKyAgICB7CisgICAgICBkb19jbGVhbnVwcyAoY2xl YW51cHMpOworICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICBtYWtlX2Ns ZWFudXBfcHlfZGVjcmVmIChtYXRjaF9tZXRob2QpOworCisgIHB5X3htZXRo b2RfbmFtZSA9IFB5U3RyaW5nX0Zyb21TdHJpbmcgKHhtZXRob2RfbmFtZSk7 CisgIGlmIChweV94bWV0aG9kX25hbWUgPT0gTlVMTCkKKyAgICB7CisgICAg ICBkb19jbGVhbnVwcyAoY2xlYW51cHMpOworICAgICAgcmV0dXJuIE5VTEw7 CisgICAgfQorICBtYWtlX2NsZWFudXBfcHlfZGVjcmVmIChweV94bWV0aG9k X25hbWUpOworCisgIG1hdGNoX3Jlc3VsdCA9IFB5T2JqZWN0X0NhbGxNZXRo b2RPYmpBcmdzIChtYXRjaGVyLAorCQkJCQkgICAgIHB5X21hdGNoX21ldGhv ZF9uYW1lLAorCQkJCQkgICAgIHB5X29ial90eXBlLAorCQkJCQkgICAgIHB5 X3htZXRob2RfbmFtZSwKKwkJCQkJICAgICBOVUxMKTsKKworICBkb19jbGVh bnVwcyAoY2xlYW51cHMpOworCisgIHJldHVybiBtYXRjaF9yZXN1bHQ7Cit9 CisKKy8qIEltcGxlbWVudGF0aW9uIG9mIGdldF9tYXRjaGluZ194bWV0aG9k X3dvcmtlcnMgZm9yIFB5dGhvbi4gICovCisKK2VudW0gZXh0X2xhbmdfcmMK K2dkYnB5X2dldF9tYXRjaGluZ194bWV0aG9kX3dvcmtlcnMKKyAgKGNvbnN0 IHN0cnVjdCBleHRlbnNpb25fbGFuZ3VhZ2VfZGVmbiAqZXh0bGFuZywKKyAg IHN0cnVjdCB0eXBlICpvYmpfdHlwZSwgY29uc3QgY2hhciAqbWV0aG9kX25h bWUsCisgICB4bWV0aG9kX3dvcmtlcl92ZWMgKipkbV92ZWMpCit7CisgIHN0 cnVjdCBjbGVhbnVwICpjbGVhbnVwczsKKyAgc3RydWN0IG9iamZpbGUgKm9i amZpbGU7CisgIFZFQyAoeG1ldGhvZF93b3JrZXJfcHRyKSAqd29ya2VyX3Zl YyA9IE5VTEw7CisgIFB5T2JqZWN0ICpweV90eXBlLCAqcHlfcHJvZ3NwYWNl OworICBQeU9iamVjdCAqcHlfeG1ldGhvZF9tYXRjaGVyX2xpc3QgPSBOVUxM LCAqbGlzdF9pdGVyLCAqbWF0Y2hlcjsKKworICBnZGJfYXNzZXJ0IChvYmpf dHlwZSAhPSBOVUxMICYmIG1ldGhvZF9uYW1lICE9IE5VTEwpOworCisgIGNs ZWFudXBzID0gZW5zdXJlX3B5dGhvbl9lbnYgKGdldF9jdXJyZW50X2FyY2gg KCksIGN1cnJlbnRfbGFuZ3VhZ2UpOworCisgIHB5X3R5cGUgPSB0eXBlX3Rv X3R5cGVfb2JqZWN0IChvYmpfdHlwZSk7CisgIGlmIChweV90eXBlID09IE5V TEwpCisgICAgeworICAgICAgZ2RicHlfcHJpbnRfc3RhY2sgKCk7CisgICAg ICBkb19jbGVhbnVwcyAoY2xlYW51cHMpOworCisgICAgICByZXR1cm4gRVhU X0xBTkdfUkNfRVJST1I7CisgICAgfQorICBtYWtlX2NsZWFudXBfcHlfZGVj cmVmIChweV90eXBlKTsKKworICAvKiBDcmVhdGUgYW4gZW1wdHkgbGlzdCBv ZiBkZWJ1ZyBtZXRob2RzLiAgKi8KKyAgcHlfeG1ldGhvZF9tYXRjaGVyX2xp c3QgPSBQeUxpc3RfTmV3ICgwKTsKKyAgaWYgKHB5X3htZXRob2RfbWF0Y2hl cl9saXN0ID09IE5VTEwpCisgICAgeworICAgICAgZ2RicHlfcHJpbnRfc3Rh Y2sgKCk7CisgICAgICBkb19jbGVhbnVwcyAoY2xlYW51cHMpOworCisgICAg ICByZXR1cm4gRVhUX0xBTkdfUkNfRVJST1I7CisgICAgfQorCisgIC8qIEdh dGhlciBkZWJ1ZyBtZXRob2QgbWF0Y2hlcnMgcmVnaXN0ZXJlZCB3aXRoIHRo ZSBvYmplY3QgZmlsZXMuICAqLworICBBTExfT0JKRklMRVMgKG9iamZpbGUp CisgICAgeworICAgICAgUHlPYmplY3QgKnB5X29iamZpbGUgPSBvYmpmaWxl X3RvX29iamZpbGVfb2JqZWN0IChvYmpmaWxlKTsKKyAgICAgIFB5T2JqZWN0 ICpvYmpmaWxlX21hdGNoZXJzLCAqdGVtcCA9IHB5X3htZXRob2RfbWF0Y2hl cl9saXN0OworCisgICAgICBpZiAocHlfb2JqZmlsZSA9PSBOVUxMKQorCXsK KwkgIGdkYnB5X3ByaW50X3N0YWNrICgpOworCSAgUHlfREVDUkVGIChweV94 bWV0aG9kX21hdGNoZXJfbGlzdCk7CisJICBkb19jbGVhbnVwcyAoY2xlYW51 cHMpOworCisJICByZXR1cm4gRVhUX0xBTkdfUkNfRVJST1I7CisJfQorCisg ICAgICBvYmpmaWxlX21hdGNoZXJzID0gb2JqZnB5X2dldF94bWV0aG9kcyAo cHlfb2JqZmlsZSwgTlVMTCk7CisgICAgICBweV94bWV0aG9kX21hdGNoZXJf bGlzdCA9IFB5U2VxdWVuY2VfQ29uY2F0ICh0ZW1wLAorCQkJCQkJCW9iamZp bGVfbWF0Y2hlcnMpOworICAgICAgUHlfREVDUkVGICh0ZW1wKTsKKyAgICAg IFB5X0RFQ1JFRiAob2JqZmlsZV9tYXRjaGVycyk7CisgICAgICBpZiAocHlf eG1ldGhvZF9tYXRjaGVyX2xpc3QgPT0gTlVMTCkKKwl7CisJICBnZGJweV9w cmludF9zdGFjayAoKTsKKwkgIGRvX2NsZWFudXBzIChjbGVhbnVwcyk7CisK KwkgIHJldHVybiBFWFRfTEFOR19SQ19FUlJPUjsKKwl9CisgICAgfQorCisg IC8qIEdhdGhlciBkZWJ1ZyBtZXRob2RzIG1hdGNoZXJzIHJlZ2lzdGVyZWQg d2l0aCB0aGUgY3VycmVudCBwcm9ncmFtCisgICAgIHNwYWNlLiAgKi8KKyAg cHlfcHJvZ3NwYWNlID0gcHNwYWNlX3RvX3BzcGFjZV9vYmplY3QgKGN1cnJl bnRfcHJvZ3JhbV9zcGFjZSk7CisgIGlmIChweV9wcm9nc3BhY2UgIT0gTlVM TCkKKyAgICB7CisgICAgICBQeU9iamVjdCAqdGVtcCA9IHB5X3htZXRob2Rf bWF0Y2hlcl9saXN0OworICAgICAgUHlPYmplY3QgKnBzcGFjZV9tYXRjaGVy cyA9IHBzcHlfZ2V0X3htZXRob2RzIChweV9wcm9nc3BhY2UsIE5VTEwpOwor CisgICAgICBweV94bWV0aG9kX21hdGNoZXJfbGlzdCA9IFB5U2VxdWVuY2Vf Q29uY2F0ICh0ZW1wLCBwc3BhY2VfbWF0Y2hlcnMpOworICAgICAgUHlfREVD UkVGICh0ZW1wKTsKKyAgICAgIFB5X0RFQ1JFRiAocHNwYWNlX21hdGNoZXJz KTsKKyAgICAgIGlmIChweV94bWV0aG9kX21hdGNoZXJfbGlzdCA9PSBOVUxM KQorCXsKKwkgIGdkYnB5X3ByaW50X3N0YWNrICgpOworCSAgZG9fY2xlYW51 cHMgKGNsZWFudXBzKTsKKworCSAgcmV0dXJuIEVYVF9MQU5HX1JDX0VSUk9S OworCX0KKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICBnZGJweV9wcmlu dF9zdGFjayAoKTsKKyAgICAgIFB5X0RFQ1JFRiAocHlfeG1ldGhvZF9tYXRj aGVyX2xpc3QpOworICAgICAgZG9fY2xlYW51cHMgKGNsZWFudXBzKTsKKwor ICAgICAgcmV0dXJuIEVYVF9MQU5HX1JDX0VSUk9SOworICAgIH0KKworICAv KiBHYXRoZXIgZGVidWcgbWV0aG9kIG1hdGNoZXJzIHJlZ2lzdGVyZWQgZ2xv YmFsbHkuICAqLworICBpZiAoZ2RiX3B5dGhvbl9tb2R1bGUgIT0gTlVMTAor ICAgICAgJiYgUHlPYmplY3RfSGFzQXR0clN0cmluZyAoZ2RiX3B5dGhvbl9t b2R1bGUsIG1hdGNoZXJzX2F0dHJfc3RyKSkKKyAgICB7CisgICAgICBQeU9i amVjdCAqZ2RiX21hdGNoZXJzOworICAgICAgUHlPYmplY3QgKnRlbXAgPSBw eV94bWV0aG9kX21hdGNoZXJfbGlzdDsKKworICAgICAgZ2RiX21hdGNoZXJz ID0gUHlPYmplY3RfR2V0QXR0clN0cmluZyAoZ2RiX3B5dGhvbl9tb2R1bGUs CisJCQkJCSAgICAgbWF0Y2hlcnNfYXR0cl9zdHIpOworICAgICAgaWYgKGdk Yl9tYXRjaGVycyAhPSBOVUxMKQorCXsKKwkgIHB5X3htZXRob2RfbWF0Y2hl cl9saXN0ID0gUHlTZXF1ZW5jZV9Db25jYXQgKHRlbXAsCisJCQkJCQkJICAg Z2RiX21hdGNoZXJzKTsKKwkgIFB5X0RFQ1JFRiAodGVtcCk7CisJICBQeV9E RUNSRUYgKGdkYl9tYXRjaGVycyk7CisJICBpZiAocHlfeG1ldGhvZF9tYXRj aGVyX2xpc3QgPT0gTlVMTCkKKwkgICAgeworCSAgICAgIGdkYnB5X3ByaW50 X3N0YWNrICgpOworCSAgICAgIGRvX2NsZWFudXBzIChjbGVhbnVwcyk7CisK KwkgICAgICByZXR1cm4gRVhUX0xBTkdfUkNfRVJST1I7CisJICAgIH0KKwl9 CisgICAgICBlbHNlCisJeworCSAgZ2RicHlfcHJpbnRfc3RhY2sgKCk7CisJ ICBQeV9ERUNSRUYgKHB5X3htZXRob2RfbWF0Y2hlcl9saXN0KTsKKwkgIGRv X2NsZWFudXBzIChjbGVhbnVwcyk7CisKKwkgIHJldHVybiBFWFRfTEFOR19S Q19FUlJPUjsKKwl9CisgICAgfQorCisgIC8qIFNhZmUgdG8gbWFrZSBhIGNs ZWFudXAgZm9yIHB5X3htZXRob2RfbWF0Y2hlcl9saXN0IG5vdyBhcyBpdAor ICAgICB3aWxsIG5vdCBjaGFuZ2UgYW55IG1vcmUuICAqLworICBtYWtlX2Ns ZWFudXBfcHlfZGVjcmVmIChweV94bWV0aG9kX21hdGNoZXJfbGlzdCk7CisK KyAgbGlzdF9pdGVyID0gUHlPYmplY3RfR2V0SXRlciAocHlfeG1ldGhvZF9t YXRjaGVyX2xpc3QpOworICBpZiAobGlzdF9pdGVyID09IE5VTEwpCisgICAg eworICAgICAgZ2RicHlfcHJpbnRfc3RhY2sgKCk7CisgICAgICBkb19jbGVh bnVwcyAoY2xlYW51cHMpOworCisgICAgICByZXR1cm4gRVhUX0xBTkdfUkNf RVJST1I7CisgICAgfQorICB3aGlsZSAoKG1hdGNoZXIgPSBQeUl0ZXJfTmV4 dCAobGlzdF9pdGVyKSkgIT0gTlVMTCkKKyAgICB7CisgICAgICBQeU9iamVj dCAqbWF0Y2hfcmVzdWx0ID0gaW52b2tlX21hdGNoX21ldGhvZCAobWF0Y2hl ciwgcHlfdHlwZSwKKwkJCQkJCSAgICBtZXRob2RfbmFtZSk7CisKKyAgICAg IGlmIChtYXRjaF9yZXN1bHQgPT0gTlVMTCkKKwl7CisJICBnZGJweV9wcmlu dF9zdGFjayAoKTsKKwkgIFB5X0RFQ1JFRiAobWF0Y2hlcik7CisJICBkb19j bGVhbnVwcyAoY2xlYW51cHMpOworCisJICByZXR1cm4gRVhUX0xBTkdfUkNf RVJST1I7CisJfQorICAgICAgaWYgKG1hdGNoX3Jlc3VsdCA9PSBQeV9Ob25l KQorCTsgLyogVGhpcyBtZWFucyB0aGVyZSB3YXMgbm8gbWF0Y2guICAqLwor ICAgICAgZWxzZSBpZiAoUHlTZXF1ZW5jZV9DaGVjayAobWF0Y2hfcmVzdWx0 KSkKKwl7CisJICBQeU9iamVjdCAqaXRlciA9IFB5T2JqZWN0X0dldEl0ZXIg KG1hdGNoX3Jlc3VsdCk7CisJICBQeU9iamVjdCAqcHlfd29ya2VyOworCisJ ICBpZiAoaXRlciA9PSBOVUxMKQorCSAgICB7CisJICAgICAgZ2RicHlfcHJp bnRfc3RhY2sgKCk7CisJICAgICAgUHlfREVDUkVGIChtYXRjaGVyKTsKKwkg ICAgICBQeV9ERUNSRUYgKG1hdGNoX3Jlc3VsdCk7CisJICAgICAgZG9fY2xl YW51cHMgKGNsZWFudXBzKTsKKworCSAgICAgIHJldHVybiBFWFRfTEFOR19S Q19FUlJPUjsKKwkgICAgfQorCSAgd2hpbGUgKChweV93b3JrZXIgPSBQeUl0 ZXJfTmV4dCAoaXRlcikpICE9IE5VTEwpCisJICAgIHsKKwkgICAgICBzdHJ1 Y3QgeG1ldGhvZF93b3JrZXIgKndvcmtlcjsKKworCSAgICAgIHdvcmtlciA9 IG5ld19weXRob25feG1ldGhvZF93b3JrZXIgKHB5X3dvcmtlciwgcHlfdHlw ZSk7CisJICAgICAgVkVDX3NhZmVfcHVzaCAoeG1ldGhvZF93b3JrZXJfcHRy LCB3b3JrZXJfdmVjLCB3b3JrZXIpOworCSAgICAgIFB5X0RFQ1JFRiAocHlf d29ya2VyKTsKKwkgICAgfQorCSAgUHlfREVDUkVGIChpdGVyKTsKKwkgIC8q IFJlcG9ydCBhbnkgZXJyb3IgdGhhdCBjb3VsZCBoYXZlIG9jY3VycmVkIHdo aWxlIGl0ZXJhdGluZy4gICovCisJICBpZiAoUHlFcnJfT2NjdXJyZWQgKCkp CisJICAgIHsKKwkgICAgICBnZGJweV9wcmludF9zdGFjayAoKTsKKwkgICAg ICBQeV9ERUNSRUYgKG1hdGNoZXIpOworCSAgICAgIFB5X0RFQ1JFRiAobWF0 Y2hfcmVzdWx0KTsKKwkgICAgICBkb19jbGVhbnVwcyAoY2xlYW51cHMpOwor CisJICAgICAgcmV0dXJuIEVYVF9MQU5HX1JDX0VSUk9SOworCSAgICB9CisJ fQorICAgICAgZWxzZQorCXsKKwkgIHN0cnVjdCB4bWV0aG9kX3dvcmtlciAq d29ya2VyOworCisJICB3b3JrZXIgPSBuZXdfcHl0aG9uX3htZXRob2Rfd29y a2VyIChtYXRjaF9yZXN1bHQsIHB5X3R5cGUpOworCSAgVkVDX3NhZmVfcHVz aCAoeG1ldGhvZF93b3JrZXJfcHRyLCB3b3JrZXJfdmVjLCB3b3JrZXIpOwor CX0KKworICAgICAgUHlfREVDUkVGIChtYXRjaF9yZXN1bHQpOworICAgICAg UHlfREVDUkVGIChtYXRjaGVyKTsKKyAgICB9CisgIFB5X0RFQ1JFRiAobGlz dF9pdGVyKTsKKyAgLyogUmVwb3J0IGFueSBlcnJvciB0aGF0IGNvdWxkIGhh dmUgb2NjdXJyZWQgd2hpbGUgaXRlcmF0aW5nLiAgKi8KKyAgaWYgKFB5RXJy X09jY3VycmVkICgpKQorICAgIHsKKyAgICAgIGdkYnB5X3ByaW50X3N0YWNr ICgpOworICAgICAgZG9fY2xlYW51cHMgKGNsZWFudXBzKTsKKworICAgICAg cmV0dXJuIEVYVF9MQU5HX1JDX0VSUk9SOworICAgIH0KKworICBkb19jbGVh bnVwcyAoY2xlYW51cHMpOworICAqZG1fdmVjID0gd29ya2VyX3ZlYzsKKwor ICByZXR1cm4gRVhUX0xBTkdfUkNfT0s7Cit9CisKKy8qIEltcGxlbWVudGF0 aW9uIG9mIGdldF94bWV0aG9kX2FyZ190eXBlcyBmb3IgUHl0aG9uLiAgKi8K KworZW51bSBleHRfbGFuZ19yYworZ2RicHlfZ2V0X3htZXRob2RfYXJnX3R5 cGVzIChjb25zdCBzdHJ1Y3QgZXh0ZW5zaW9uX2xhbmd1YWdlX2RlZm4gKmV4 dGxhbmcsCisJCQkJICBzdHJ1Y3QgeG1ldGhvZF93b3JrZXIgKndvcmtlciwK KwkJCQkgIGludCAqbmFyZ3MsIHN0cnVjdCB0eXBlICoqKmFyZ190eXBlcykK K3sKKyAgc3RydWN0IGdkYnB5X3dvcmtlcl9kYXRhICp3b3JrZXJfZGF0YSA9 IHdvcmtlci0+ZGF0YTsKKyAgUHlPYmplY3QgKnB5X3dvcmtlciA9IHdvcmtl cl9kYXRhLT53b3JrZXI7CisgIFB5T2JqZWN0ICpnZXRfYXJnX3R5cGVzX21l dGhvZDsKKyAgUHlPYmplY3QgKnB5X2FyZ3R5cGVfbGlzdCwgKmxpc3RfaXRl ciA9IE5VTEwsICppdGVtOworICBzdHJ1Y3QgY2xlYW51cCAqY2xlYW51cHM7 CisgIHN0cnVjdCB0eXBlICoqdHlwZV9hcnJheSwgKm9ial90eXBlOworICBp bnQgaSA9IDEsIGFyZ19jb3VudDsKKworICAvKiBTZXQgbmFyZ3MgdG8gLTEg c28gdGhhdCBhbnkgcHJlbWF0dXJlIHJldHVybiBmcm9tIHRoaXMgZnVuY3Rp b24gcmV0dXJucworICAgICBhbiBpbnZhbGlkL3VudXNhYmxlIG51bWJlciBv ZiBhcmcgdHlwZXMuICAqLworICAqbmFyZ3MgPSAtMTsKKworICBjbGVhbnVw cyA9IGVuc3VyZV9weXRob25fZW52IChnZXRfY3VycmVudF9hcmNoICgpLCBj dXJyZW50X2xhbmd1YWdlKTsKKworICBnZXRfYXJnX3R5cGVzX21ldGhvZCA9 ICBQeU9iamVjdF9HZXRBdHRyU3RyaW5nIChweV93b3JrZXIsCisJCQkJCQkg IGdldF9hcmdfdHlwZXNfbWV0aG9kX25hbWUpOworICBpZiAoZ2V0X2FyZ190 eXBlc19tZXRob2QgPT0gTlVMTCkKKyAgICB7CisgICAgICBnZGJweV9wcmlu dF9zdGFjayAoKTsKKyAgICAgIGRvX2NsZWFudXBzIChjbGVhbnVwcyk7CisK KyAgICAgIHJldHVybiBFWFRfTEFOR19SQ19FUlJPUjsKKyAgICB9CisgIG1h a2VfY2xlYW51cF9weV9kZWNyZWYgKGdldF9hcmdfdHlwZXNfbWV0aG9kKTsK KworICBweV9hcmd0eXBlX2xpc3QgPSBQeU9iamVjdF9DYWxsTWV0aG9kT2Jq QXJncyAocHlfd29ya2VyLAorCQkJCQkJcHlfZ2V0X2FyZ190eXBlc19tZXRo b2RfbmFtZSwKKwkJCQkJCU5VTEwpOworICBpZiAocHlfYXJndHlwZV9saXN0 ID09IE5VTEwpCisgICAgeworICAgICAgZ2RicHlfcHJpbnRfc3RhY2sgKCk7 CisgICAgICBkb19jbGVhbnVwcyAoY2xlYW51cHMpOworCisgICAgICByZXR1 cm4gRVhUX0xBTkdfUkNfRVJST1I7CisgICAgfQorICBtYWtlX2NsZWFudXBf cHlfZGVjcmVmIChweV9hcmd0eXBlX2xpc3QpOworICBpZiAocHlfYXJndHlw ZV9saXN0ID09IFB5X05vbmUpCisgICAgYXJnX2NvdW50ID0gMDsKKyAgZWxz ZSBpZiAoUHlTZXF1ZW5jZV9DaGVjayAocHlfYXJndHlwZV9saXN0KSkKKyAg ICB7CisgICAgICBhcmdfY291bnQgPSBQeVNlcXVlbmNlX1NpemUgKHB5X2Fy Z3R5cGVfbGlzdCk7CisgICAgICBpZiAoYXJnX2NvdW50ID09IC0xKQorCXsK KwkgIGdkYnB5X3ByaW50X3N0YWNrICgpOworCSAgZG9fY2xlYW51cHMgKGNs ZWFudXBzKTsKKworCSAgcmV0dXJuIEVYVF9MQU5HX1JDX0VSUk9SOworCX0K KworICAgICAgbGlzdF9pdGVyID0gUHlPYmplY3RfR2V0SXRlciAocHlfYXJn dHlwZV9saXN0KTsKKyAgICAgIGlmIChsaXN0X2l0ZXIgPT0gTlVMTCkKKwl7 CisJICBnZGJweV9wcmludF9zdGFjayAoKTsKKwkgIGRvX2NsZWFudXBzIChj bGVhbnVwcyk7CisKKwkgIHJldHVybiBFWFRfTEFOR19SQ19FUlJPUjsKKwl9 CisgICAgICBtYWtlX2NsZWFudXBfcHlfZGVjcmVmIChsaXN0X2l0ZXIpOwor ICAgIH0KKyAgZWxzZQorICAgIGFyZ19jb3VudCA9IDE7CisKKyAgLyogSW5j bHVkZSB0aGUgJ3RoaXMnIGFyZ3VtZW50IGluIHRoZSBzaXplLiAgKi8KKyAg dHlwZV9hcnJheSA9IFhDTkVXVkVDIChzdHJ1Y3QgdHlwZSAqLCBhcmdfY291 bnQgKyAxKTsKKyAgaSA9IDE7CisgIGlmIChsaXN0X2l0ZXIgIT0gTlVMTCkK KyAgICB7CisgICAgICB3aGlsZSAoKGl0ZW0gPSBQeUl0ZXJfTmV4dCAobGlz dF9pdGVyKSkgIT0gTlVMTCkKKwl7CisJICBzdHJ1Y3QgdHlwZSAqYXJnX3R5 cGUgPSB0eXBlX29iamVjdF90b190eXBlIChpdGVtKTsKKworCSAgUHlfREVD UkVGIChpdGVtKTsKKwkgIGlmIChhcmdfdHlwZSA9PSBOVUxMKQorCSAgICB7 CisJICAgICAgUHlFcnJfU2V0U3RyaW5nIChQeUV4Y19UeXBlRXJyb3IsCisJ CQkgICAgICAgXygiQXJnIHR5cGUgcmV0dXJuZWQgYnkgdGhlIGdldF9hcmdf dHlwZXMgIgorCQkJCSAibWV0aG9kIG9mIGEgZGVidWcgbWV0aG9kIHdvcmtl ciBvYmplY3QgaXMgIgorCQkJCSAibm90IGEgZ2RiLlR5cGUgb2JqZWN0LiIp KTsKKwkgICAgICBicmVhazsKKwkgICAgfQorCisJICB0eXBlX2FycmF5W2ld ID0gYXJnX3R5cGU7CisJICBpKys7CisJfQorICAgIH0KKyAgZWxzZSBpZiAo YXJnX2NvdW50ID09IDEpCisgICAgeworICAgICAgLyogcHlfYXJndHlwZV9s aXN0IGlzIG5vdCBhY3R1YWxseSBhIGxpc3QgYnV0IGEgc2luZ2xlIGdkYi5U eXBlCisJIG9iamVjdC4gICovCisgICAgICBzdHJ1Y3QgdHlwZSAqYXJnX3R5 cGUgPSB0eXBlX29iamVjdF90b190eXBlIChweV9hcmd0eXBlX2xpc3QpOwor CisgICAgICBpZiAoYXJnX3R5cGUgPT0gTlVMTCkKKwlQeUVycl9TZXRTdHJp bmcgKFB5RXhjX1R5cGVFcnJvciwKKwkJCSBfKCJBcmcgdHlwZSByZXR1cm5l ZCBieSB0aGUgZ2V0X2FyZ190eXBlcyBtZXRob2QgIgorCQkJICAgIm9mIGEg ZGVidWcgbWV0aG9kIHdvcmtlciBvYmplY3QgaXMgbm90IGEgZ2RiLlR5cGUg IgorCQkJICAgIm9iamVjdC4iKSk7CisgICAgICBlbHNlCisJeworCSAgdHlw ZV9hcnJheVsxXSA9IGFyZ190eXBlOworCSAgaSsrOworCX0KKyAgICB9Cisg IGlmIChQeUVycl9PY2N1cnJlZCAoKSkKKyAgICB7CisgICAgICBnZGJweV9w cmludF9zdGFjayAoKTsKKyAgICAgIGRvX2NsZWFudXBzIChjbGVhbnVwcyk7 CisgICAgICB4ZnJlZSAodHlwZV9hcnJheSk7CisKKyAgICAgIHJldHVybiBF WFRfTEFOR19SQ19FUlJPUjsKKyAgICB9CisKKyAgLyogQWRkIHRoZSB0eXBl IG9mICd0aGlzJyBhcyB0aGUgZmlyc3QgYXJndW1lbnQuICAqLworICBvYmpf dHlwZSA9IHR5cGVfb2JqZWN0X3RvX3R5cGUgKHdvcmtlcl9kYXRhLT50aGlz X3R5cGUpOworICB0eXBlX2FycmF5WzBdID0gbWFrZV9jdl90eXBlICgxLCAw LCBsb29rdXBfcG9pbnRlcl90eXBlIChvYmpfdHlwZSksIE5VTEwpOworICAq bmFyZ3MgPSBpOworICAqYXJnX3R5cGVzID0gdHlwZV9hcnJheTsKKyAgZG9f Y2xlYW51cHMgKGNsZWFudXBzKTsKKworICByZXR1cm4gRVhUX0xBTkdfUkNf T0s7Cit9CisKKy8qIEltcGxlbWVudGF0aW9uIG9mIGludm9rZV94bWV0aG9k IGZvciBQeXRob24uICAqLworCitlbnVtIGV4dF9sYW5nX3JjCitnZGJweV9p bnZva2VfeG1ldGhvZCAoY29uc3Qgc3RydWN0IGV4dGVuc2lvbl9sYW5ndWFn ZV9kZWZuICpleHRsYW5nLAorCQkJICAgc3RydWN0IHhtZXRob2Rfd29ya2Vy ICp3b3JrZXIsCisJCQkgICBzdHJ1Y3QgdmFsdWUgKm9iaiwgc3RydWN0IHZh bHVlICoqYXJncywgaW50IG5hcmdzLAorCQkJICAgc3RydWN0IHZhbHVlICoq cmVzdWx0KQoreworICBpbnQgaTsKKyAgc3RydWN0IGNsZWFudXAgKmNsZWFu dXBzOworICBQeU9iamVjdCAqcHlfdmFsdWVfb2JqLCAqcHlfYXJnX3R1cGxl LCAqcHlfcmVzdWx0OworICBQeU9iamVjdCAqaW52b2tlX21ldGhvZDsKKyAg c3RydWN0IHR5cGUgKm9ial90eXBlLCAqdGhpc190eXBlOworICBzdHJ1Y3Qg dmFsdWUgKnJlcyA9IE5VTEw7CisgIHN0cnVjdCBnZGJweV93b3JrZXJfZGF0 YSAqd29ya2VyX2RhdGEgPSB3b3JrZXItPmRhdGE7CisgIFB5T2JqZWN0ICp4 bWV0aG9kX3dvcmtlciA9IHdvcmtlcl9kYXRhLT53b3JrZXI7CisKKyAgY2xl YW51cHMgPSBlbnN1cmVfcHl0aG9uX2VudiAoZ2V0X2N1cnJlbnRfYXJjaCAo KSwgY3VycmVudF9sYW5ndWFnZSk7CisKKyAgaW52b2tlX21ldGhvZCA9ICBQ eU9iamVjdF9HZXRBdHRyU3RyaW5nICh4bWV0aG9kX3dvcmtlciwKKwkJCQkJ ICAgaW52b2tlX21ldGhvZF9uYW1lKTsKKyAgaWYgKGludm9rZV9tZXRob2Qg PT0gTlVMTCkKKyAgICB7CisgICAgICBnZGJweV9wcmludF9zdGFjayAoKTsK KyAgICAgIGRvX2NsZWFudXBzIChjbGVhbnVwcyk7CisKKyAgICAgIHJldHVy biBFWFRfTEFOR19SQ19FUlJPUjsKKyAgICB9CisgIG1ha2VfY2xlYW51cF9w eV9kZWNyZWYgKGludm9rZV9tZXRob2QpOworCisgIG9ial90eXBlID0gY2hl Y2tfdHlwZWRlZiAodmFsdWVfdHlwZSAob2JqKSk7CisgIHRoaXNfdHlwZSA9 IGNoZWNrX3R5cGVkZWYgKHR5cGVfb2JqZWN0X3RvX3R5cGUgKHdvcmtlcl9k YXRhLT50aGlzX3R5cGUpKTsKKyAgaWYgKFRZUEVfQ09ERSAob2JqX3R5cGUp ID09IFRZUEVfQ09ERV9QVFIpCisgICAgeworICAgICAgc3RydWN0IHR5cGUg KnRoaXNfcHRyID0gbG9va3VwX3BvaW50ZXJfdHlwZSAodGhpc190eXBlKTsK KworICAgICAgaWYgKCF0eXBlc19lcXVhbCAob2JqX3R5cGUsIHRoaXNfcHRy KSkKKwlvYmogPSB2YWx1ZV9jYXN0ICh0aGlzX3B0ciwgb2JqKTsKKyAgICB9 CisgIGVsc2UgaWYgKFRZUEVfQ09ERSAob2JqX3R5cGUpID09IFRZUEVfQ09E RV9SRUYpCisgICAgeworICAgICAgc3RydWN0IHR5cGUgKnRoaXNfcmVmID0g bG9va3VwX3JlZmVyZW5jZV90eXBlICh0aGlzX3R5cGUpOworCisgICAgICBp ZiAoIXR5cGVzX2VxdWFsIChvYmpfdHlwZSwgdGhpc19yZWYpKQorCW9iaiA9 IHZhbHVlX2Nhc3QgKHRoaXNfcmVmLCBvYmopOworICAgIH0KKyAgZWxzZQor ICAgIHsKKyAgICAgIGlmICghdHlwZXNfZXF1YWwgKG9ial90eXBlLCB0aGlz X3R5cGUpKQorCW9iaiA9IHZhbHVlX2Nhc3QgKHRoaXNfdHlwZSwgb2JqKTsK KyAgICB9CisgIHB5X3ZhbHVlX29iaiA9IHZhbHVlX3RvX3ZhbHVlX29iamVj dCAob2JqKTsKKyAgaWYgKHB5X3ZhbHVlX29iaiA9PSBOVUxMKQorICAgIHsK KyAgICAgIGdkYnB5X3ByaW50X3N0YWNrICgpOworICAgICAgZG9fY2xlYW51 cHMgKGNsZWFudXBzKTsKKworICAgICAgcmV0dXJuIEVYVF9MQU5HX1JDX0VS Uk9SOworICAgIH0KKyAgbWFrZV9jbGVhbnVwX3B5X2RlY3JlZiAocHlfdmFs dWVfb2JqKTsKKworICBweV9hcmdfdHVwbGUgPSBQeVR1cGxlX05ldyAobmFy Z3MpOworICBpZiAocHlfYXJnX3R1cGxlID09IE5VTEwpCisgICAgeworICAg ICAgZ2RicHlfcHJpbnRfc3RhY2sgKCk7CisgICAgICBkb19jbGVhbnVwcyAo Y2xlYW51cHMpOworCisgICAgICByZXR1cm4gRVhUX0xBTkdfUkNfRVJST1I7 CisgICAgfQorICBtYWtlX2NsZWFudXBfcHlfZGVjcmVmIChweV9hcmdfdHVw bGUpOworCisgIGZvciAoaSA9IDA7IGkgPCBuYXJnczsgaSsrKQorICAgIHsK KyAgICAgIFB5T2JqZWN0ICpweV92YWx1ZV9hcmcgPSB2YWx1ZV90b192YWx1 ZV9vYmplY3QgKGFyZ3NbaV0pOworCisgICAgICBpZiAocHlfdmFsdWVfYXJn ID09IE5VTEwpCisJeworCSAgZ2RicHlfcHJpbnRfc3RhY2sgKCk7CisJICBk b19jbGVhbnVwcyAoY2xlYW51cHMpOworCisJICByZXR1cm4gRVhUX0xBTkdf UkNfRVJST1I7CisJfQorCisgICAgICBQeVR1cGxlX1NFVF9JVEVNIChweV9h cmdfdHVwbGUsIGksIHB5X3ZhbHVlX2FyZyk7CisgICAgfQorCisgIHB5X3Jl c3VsdCA9IFB5T2JqZWN0X0NhbGxNZXRob2RPYmpBcmdzICh4bWV0aG9kX3dv cmtlciwKKwkJCQkJICBweV9pbnZva2VfbWV0aG9kX25hbWUsCisJCQkJCSAg cHlfdmFsdWVfb2JqLAorCQkJCQkgIHB5X2FyZ190dXBsZSwgTlVMTCk7Cisg IGlmIChweV9yZXN1bHQgPT0gTlVMTCkKKyAgICB7CisgICAgICBnZGJweV9w cmludF9zdGFjayAoKTsKKyAgICAgIGRvX2NsZWFudXBzIChjbGVhbnVwcyk7 CisKKyAgICAgIHJldHVybiBFWFRfTEFOR19SQ19FUlJPUjsKKyAgICB9Cisg IG1ha2VfY2xlYW51cF9weV9kZWNyZWYgKHB5X3Jlc3VsdCk7CisKKyAgaWYg KHB5X3Jlc3VsdCAhPSBQeV9Ob25lKQorICAgIHsKKyAgICAgIHJlcyA9IGNv bnZlcnRfdmFsdWVfZnJvbV9weXRob24gKHB5X3Jlc3VsdCk7CisgICAgICBp ZiAocmVzID09IE5VTEwpCisJeworCSAgZ2RicHlfcHJpbnRfc3RhY2sgKCk7 CisJICBkb19jbGVhbnVwcyAoY2xlYW51cHMpOworCisJICByZXR1cm4gRVhU X0xBTkdfUkNfRVJST1I7CisJfQorICAgIH0KKyAgZWxzZQorICAgIHsKKyAg ICAgIHJlcyA9IGFsbG9jYXRlX3ZhbHVlIChsb29rdXBfdHlwZW5hbWUgKHB5 dGhvbl9sYW5ndWFnZSwgcHl0aG9uX2dkYmFyY2gsCisJCQkJCSAgICAgInZv aWQiLCBOVUxMLCAwKSk7CisgICAgfQorCisgICpyZXN1bHQgPSByZXM7Cisg IGRvX2NsZWFudXBzIChjbGVhbnVwcyk7CisKKyAgcmV0dXJuIEVYVF9MQU5H X1JDX09LOworfQorCisvKiBDcmVhdGVzIGEgbmV3IFB5dGhvbiB4bWV0aG9k X3dvcmtlciBvYmplY3QuCisgICBUaGUgbmV3IG9iamVjdCBoYXMgZGF0YSBv ZiB0eXBlICdzdHJ1Y3QgZ2RicHlfd29ya2VyX2RhdGEnIGNvbXBvc2VkCisg ICB3aXRoIHRoZSBjb21wb25lbnRzIFBZX1dPUktFUiBhbmQgVEhJU19UWVBF LiAgKi8KKworc3RhdGljIHN0cnVjdCB4bWV0aG9kX3dvcmtlciAqCituZXdf cHl0aG9uX3htZXRob2Rfd29ya2VyIChQeU9iamVjdCAqcHlfd29ya2VyLCBQ eU9iamVjdCAqdGhpc190eXBlKQoreworICBzdHJ1Y3QgZ2RicHlfd29ya2Vy X2RhdGEgKmRhdGE7CisKKyAgZ2RiX2Fzc2VydCAocHlfd29ya2VyICE9IE5V TEwgJiYgdGhpc190eXBlICE9IE5VTEwpOworCisgIGRhdGEgPSBYQ05FVyAo c3RydWN0IGdkYnB5X3dvcmtlcl9kYXRhKTsKKyAgZGF0YS0+d29ya2VyID0g cHlfd29ya2VyOworICBkYXRhLT50aGlzX3R5cGUgPSB0aGlzX3R5cGU7Cisg IFB5X0lOQ1JFRiAocHlfd29ya2VyKTsKKyAgUHlfSU5DUkVGICh0aGlzX3R5 cGUpOworCisgIHJldHVybiBuZXdfeG1ldGhvZF93b3JrZXIgKCZleHRlbnNp b25fbGFuZ3VhZ2VfcHl0aG9uLCBkYXRhKTsKK30KKworaW50CitnZGJweV9p bml0aWFsaXplX3htZXRob2RzICh2b2lkKQoreworICBweV9tYXRjaF9tZXRo b2RfbmFtZSA9IFB5U3RyaW5nX0Zyb21TdHJpbmcgKG1hdGNoX21ldGhvZF9u YW1lKTsKKyAgaWYgKHB5X21hdGNoX21ldGhvZF9uYW1lID09IE5VTEwpCisg ICAgcmV0dXJuIC0xOworCisgIHB5X2ludm9rZV9tZXRob2RfbmFtZSA9IFB5 U3RyaW5nX0Zyb21TdHJpbmcgKGludm9rZV9tZXRob2RfbmFtZSk7CisgIGlm IChweV9pbnZva2VfbWV0aG9kX25hbWUgPT0gTlVMTCkKKyAgICByZXR1cm4g LTE7CisKKyAgcHlfZ2V0X2FyZ190eXBlc19tZXRob2RfbmFtZQorICAgID0g UHlTdHJpbmdfRnJvbVN0cmluZyAoZ2V0X2FyZ190eXBlc19tZXRob2RfbmFt ZSk7CisgIGlmIChweV9nZXRfYXJnX3R5cGVzX21ldGhvZF9uYW1lID09IE5V TEwpCisgICAgcmV0dXJuIC0xOworCisgIHJldHVybiAxOworfQpkaWZmIC0t Z2l0IGEvZ2RiL3B5dGhvbi9weXRob24taW50ZXJuYWwuaCBiL2dkYi9weXRo b24vcHl0aG9uLWludGVybmFsLmgKaW5kZXggMDc2NTBmNy4uN2U0YTdiYyAx MDA2NDQKLS0tIGEvZ2RiL3B5dGhvbi9weXRob24taW50ZXJuYWwuaAorKysg Yi9nZGIvcHl0aG9uL3B5dGhvbi1pbnRlcm5hbC5oCkBAIC0zMDcsNiArMzA3 LDI1IEBAIGV4dGVybiBlbnVtIGV4dF9sYW5nX2JwX3N0b3AgZ2RicHlfYnJl YWtwb2ludF9jb25kX3NheXNfc3RvcAogICAoY29uc3Qgc3RydWN0IGV4dGVu c2lvbl9sYW5ndWFnZV9kZWZuICosIHN0cnVjdCBicmVha3BvaW50ICopOwog ZXh0ZXJuIGludCBnZGJweV9icmVha3BvaW50X2hhc19jb25kIChjb25zdCBz dHJ1Y3QgZXh0ZW5zaW9uX2xhbmd1YWdlX2RlZm4gKiwKIAkJCQkgICAgICBz dHJ1Y3QgYnJlYWtwb2ludCAqYik7CisKK2V4dGVybiB2b2lkICpnZGJweV9j bG9uZV94bWV0aG9kX3dvcmtlcl9kYXRhCisgIChjb25zdCBzdHJ1Y3QgZXh0 ZW5zaW9uX2xhbmd1YWdlX2RlZm4gKmV4dGxhbmcsIHZvaWQgKmRhdGEpOwor ZXh0ZXJuIHZvaWQgZ2RicHlfZnJlZV94bWV0aG9kX3dvcmtlcl9kYXRhCisg IChjb25zdCBzdHJ1Y3QgZXh0ZW5zaW9uX2xhbmd1YWdlX2RlZm4gKmV4dGxh bmcsIHZvaWQgKmRhdGEpOworZXh0ZXJuIGVudW0gZXh0X2xhbmdfcmMgZ2Ri cHlfZ2V0X21hdGNoaW5nX3htZXRob2Rfd29ya2VycworICAoY29uc3Qgc3Ry dWN0IGV4dGVuc2lvbl9sYW5ndWFnZV9kZWZuICpleHRsYW5nLAorICAgc3Ry dWN0IHR5cGUgKm9ial90eXBlLCBjb25zdCBjaGFyICptZXRob2RfbmFtZSwK KyAgIHhtZXRob2Rfd29ya2VyX3ZlYyAqKmRtX3ZlYyk7CitleHRlcm4gZW51 bSBleHRfbGFuZ19yYyBnZGJweV9nZXRfeG1ldGhvZF9hcmdfdHlwZXMKKyAg KGNvbnN0IHN0cnVjdCBleHRlbnNpb25fbGFuZ3VhZ2VfZGVmbiAqZXh0bGFu ZywKKyAgIHN0cnVjdCB4bWV0aG9kX3dvcmtlciAqd29ya2VyLAorICAgaW50 ICpuYXJncywKKyAgIHN0cnVjdCB0eXBlICoqKmFyZ190eXBlcyk7CitleHRl cm4gZW51bSBleHRfbGFuZ19yYyBnZGJweV9pbnZva2VfeG1ldGhvZAorICAo Y29uc3Qgc3RydWN0IGV4dGVuc2lvbl9sYW5ndWFnZV9kZWZuICpleHRsYW5n LAorICAgc3RydWN0IHhtZXRob2Rfd29ya2VyICp3b3JrZXIsCisgICBzdHJ1 Y3QgdmFsdWUgKm9iaiwgc3RydWN0IHZhbHVlICoqYXJncywgaW50IG5hcmdz LAorICAgc3RydWN0IHZhbHVlICoqcmVzdWx0KTsKIAwKIFB5T2JqZWN0ICpn ZGJweV9oaXN0b3J5IChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3Mp OwogUHlPYmplY3QgKmdkYnB5X2JyZWFrcG9pbnRzIChQeU9iamVjdCAqLCBQ eU9iamVjdCAqKTsKQEAgLTM0NSwxMSArMzY0LDEzIEBAIFB5T2JqZWN0ICpw c3BhY2VfdG9fcHNwYWNlX29iamVjdCAoc3RydWN0IHByb2dyYW1fc3BhY2Ug KikKICAgICBDUFlDSEVDS0VSX1JFVFVSTlNfQk9SUk9XRURfUkVGOwogUHlP YmplY3QgKnBzcHlfZ2V0X3ByaW50ZXJzIChQeU9iamVjdCAqLCB2b2lkICop OwogUHlPYmplY3QgKnBzcHlfZ2V0X2ZyYW1lX2ZpbHRlcnMgKFB5T2JqZWN0 ICosIHZvaWQgKik7CitQeU9iamVjdCAqcHNweV9nZXRfeG1ldGhvZHMgKFB5 T2JqZWN0ICosIHZvaWQgKik7CiAKIFB5T2JqZWN0ICpvYmpmaWxlX3RvX29i amZpbGVfb2JqZWN0IChzdHJ1Y3Qgb2JqZmlsZSAqKQogICAgIENQWUNIRUNL RVJfUkVUVVJOU19CT1JST1dFRF9SRUY7CiBQeU9iamVjdCAqb2JqZnB5X2dl dF9wcmludGVycyAoUHlPYmplY3QgKiwgdm9pZCAqKTsKIFB5T2JqZWN0ICpv YmpmcHlfZ2V0X2ZyYW1lX2ZpbHRlcnMgKFB5T2JqZWN0ICosIHZvaWQgKik7 CitQeU9iamVjdCAqb2JqZnB5X2dldF94bWV0aG9kcyAoUHlPYmplY3QgKiwg dm9pZCAqKTsKIAogUHlPYmplY3QgKmdkYmFyY2hfdG9fYXJjaF9vYmplY3Qg KHN0cnVjdCBnZGJhcmNoICpnZGJhcmNoKTsKIApAQCAtNDMwLDYgKzQ1MSw4 IEBAIGludCBnZGJweV9pbml0aWFsaXplX25ld19vYmpmaWxlX2V2ZW50ICh2 b2lkKQogICBDUFlDSEVDS0VSX05FR0FUSVZFX1JFU1VMVF9TRVRTX0VYQ0VQ VElPTjsKIGludCBnZGJweV9pbml0aWFsaXplX2FyY2ggKHZvaWQpCiAgIENQ WUNIRUNLRVJfTkVHQVRJVkVfUkVTVUxUX1NFVFNfRVhDRVBUSU9OOworaW50 IGdkYnB5X2luaXRpYWxpemVfeG1ldGhvZHMgKHZvaWQpCisgIENQWUNIRUNL RVJfTkVHQVRJVkVfUkVTVUxUX1NFVFNfRVhDRVBUSU9OOwogCiBzdHJ1Y3Qg Y2xlYW51cCAqbWFrZV9jbGVhbnVwX3B5X2RlY3JlZiAoUHlPYmplY3QgKnB5 KTsKIHN0cnVjdCBjbGVhbnVwICptYWtlX2NsZWFudXBfcHlfeGRlY3JlZiAo UHlPYmplY3QgKnB5KTsKZGlmZiAtLWdpdCBhL2dkYi9weXRob24vcHl0aG9u LmMgYi9nZGIvcHl0aG9uL3B5dGhvbi5jCmluZGV4IGNiZmE3M2EuLjM2OWEy NDkgMTAwNjQ0Ci0tLSBhL2dkYi9weXRob24vcHl0aG9uLmMKKysrIGIvZ2Ri L3B5dGhvbi9weXRob24uYwpAQCAtMTg2LDcgKzE4NiwxMyBAQCBzdGF0aWMg Y29uc3Qgc3RydWN0IGV4dGVuc2lvbl9sYW5ndWFnZV9vcHMgcHl0aG9uX2V4 dGVuc2lvbl9vcHMgPQogICBnZGJweV9zZXRfcXVpdF9mbGFnLAogICBnZGJw eV9jaGVja19xdWl0X2ZsYWcsCiAKLSAgZ2RicHlfYmVmb3JlX3Byb21wdF9o b29rCisgIGdkYnB5X2JlZm9yZV9wcm9tcHRfaG9vaywKKworICBnZGJweV9j bG9uZV94bWV0aG9kX3dvcmtlcl9kYXRhLAorICBnZGJweV9mcmVlX3htZXRo b2Rfd29ya2VyX2RhdGEsCisgIGdkYnB5X2dldF9tYXRjaGluZ194bWV0aG9k X3dvcmtlcnMsCisgIGdkYnB5X2dldF94bWV0aG9kX2FyZ190eXBlcywKKyAg Z2RicHlfaW52b2tlX3htZXRob2QKIH07CiAKIC8qIEFyY2hpdGVjdHVyZSBh bmQgbGFuZ3VhZ2UgdG8gYmUgdXNlZCBpbiBjYWxsYmFja3MgZnJvbQpAQCAt MTc1Miw3ICsxNzU4LDggQEAgbWVzc2FnZSA9PSBhbiBlcnJvciBtZXNzYWdl IHdpdGhvdXQgYSBzdGFjayB3aWxsIGJlIHByaW50ZWQuIiksCiAgICAgICB8 fCBnZGJweV9pbml0aWFsaXplX2V4aXRlZF9ldmVudCAoKSA8IDAKICAgICAg IHx8IGdkYnB5X2luaXRpYWxpemVfdGhyZWFkX2V2ZW50ICgpIDwgMAogICAg ICAgfHwgZ2RicHlfaW5pdGlhbGl6ZV9uZXdfb2JqZmlsZV9ldmVudCAoKSAg PCAwCi0gICAgICB8fCBnZGJweV9pbml0aWFsaXplX2FyY2ggKCkgPCAwKQor ICAgICAgfHwgZ2RicHlfaW5pdGlhbGl6ZV9hcmNoICgpIDwgMAorICAgICAg fHwgZ2RicHlfaW5pdGlhbGl6ZV94bWV0aG9kcyAoKSA8IDApCiAgICAgZ290 byBmYWlsOwogCiAgIGdkYnB5X3RvX3N0cmluZ19jc3QgPSBQeVN0cmluZ19G cm9tU3RyaW5nICgidG9fc3RyaW5nIik7CmRpZmYgLS1naXQgYS9nZGIvdGVz dHN1aXRlL2dkYi5weXRob24vcHkteG1ldGhvZHMuY2MgYi9nZGIvdGVzdHN1 aXRlL2dkYi5weXRob24vcHkteG1ldGhvZHMuY2MKbmV3IGZpbGUgbW9kZSAx MDA2NDQKaW5kZXggMDAwMDAwMC4uMDc2Y2JhNgotLS0gL2Rldi9udWxsCisr KyBiL2dkYi90ZXN0c3VpdGUvZ2RiLnB5dGhvbi9weS14bWV0aG9kcy5jYwpA QCAtMCwwICsxLDE4NiBAQAorLyogVGhpcyB0ZXN0Y2FzZSBpcyBwYXJ0IG9m IEdEQiwgdGhlIEdOVSBkZWJ1Z2dlci4KKworICAgQ29weXJpZ2h0IDIwMTQg RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyAgIFRoaXMgcHJv Z3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp dCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQor ICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNp b24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyAgIChhdCB5b3VyIG9wdGlvbikg YW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0 cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAor ICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl IGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBG SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAg IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu CisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRo aXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlICA8aHR0cDovL3d3dy5nbnUub3Jn L2xpY2Vuc2VzLz4uICAqLworCisjaW5jbHVkZSA8aW9zdHJlYW0+CisKK3Vz aW5nIG5hbWVzcGFjZSBzdGQ7CisKK25hbWVzcGFjZSBkb3AKK3sKKworY2xh c3MgQQoreworcHVibGljOgorICBpbnQgYTsKKyAgaW50IGFycmF5IFsxMF07 CisgIHZpcnR1YWwgfkEgKCk7CisgIGludCBvcGVyYXRvcisgKGNvbnN0IEEg Jm9iaik7CisgIGludCBvcGVyYXRvci0gKGNvbnN0IEEgJm9iaik7CisgIGlu dCBvcGVyYXRvcisgKGNvbnN0IGludCBpKTsKKyAgaW50IG9wZXJhdG9yLSAo Y29uc3QgaW50IGkpOworICB2aXJ0dWFsIGludCBnZXRhICh2b2lkKTsKK307 CisKK0E6On5BICgpIHsgfQorCitpbnQKK0E6Om9wZXJhdG9yKyAoY29uc3Qg QSAmb2JqKQoreworICBjb3V0IDw8ICJGcm9tIENDIDxBX3BsdXNfQT46IiA8 PCBlbmRsOworICByZXR1cm4gYSArIG9iai5hOworfQorCitpbnQKK0E6Om9w ZXJhdG9yLSAoY29uc3QgQSAmb2JqKQoreworICBjb3V0IDw8ICJGcm9tIEND IDxBX21pbnVzX0E+OiIgPDwgZW5kbDsKKyAgcmV0dXJuIGEgLSBvYmouYTsK K30KKworaW50CitBOjpvcGVyYXRvcisgKGNvbnN0IGludCBpKQoreworICBj b3V0IDw8ICJGcm9tIENDIDxBX3BsdXNfaT46IiA8PCBlbmRsOworICByZXR1 cm4gYSArIGk7Cit9CisKK2ludAorQTo6b3BlcmF0b3ItIChjb25zdCBpbnQg aSkKK3sKKyAgY291dCA8PCAiRnJvbSBDQyA8QV9taW51c19pPjoiIDw8IGVu ZGw7CisgIHJldHVybiBhIC0gaTsKK30KKworaW50CitBOjpnZXRhICh2b2lk KQoreworICBjb3V0IDw8ICJGcm9tIENDIEE6OmdldGE6IiA8PCBlbmRsOwor ICByZXR1cm4gYTsKK30KKworY2xhc3MgQiA6IHB1YmxpYyBBCit7CitwdWJs aWM6CisgIHZpcnR1YWwgaW50IGdldGEgKHZvaWQpOworfTsKKworaW50CitC OjpnZXRhICh2b2lkKQoreworICBjb3V0IDw8ICJGcm9tIENDIEI6OmdldGE6 IiA8PCBlbmRsOworICByZXR1cm4gMiAqIGE7Cit9CisKK3R5cGVkZWYgQiBC dDsKKwordHlwZWRlZiBCdCBCdHQ7CisKK2NsYXNzIEUgOiBwdWJsaWMgQQor eworcHVibGljOgorICAvKiBUaGlzIGNsYXNzIGhhcyBhIG1lbWJlciBuYW1l ZCAnYScsIHdoaWxlIHRoZSBiYXNlIGNsYXNzIGFsc28gaGFzIGEKKyAgICAg bWVtYmVyIG5hbWVkICdhJy4gIFdoZW4gb25lIGludm9rZXMgQTo6Z2V0YSgp LCBBOjphIHNob3VsZCBiZQorICAgICByZXR1cm5lZCBhbmQgbm90IEU6OmEg YXMgdGhlICdnZXRhJyBtZXRob2QgaXMgZGVmaW5lZCBvbiBjbGFzcyAnQScu CisgICAgIFRoaXMgY2xhc3MgdGVzdHMgdGhpcyBhc3BlY3Qgb2YgZGVidWcg bWV0aG9kcy4gICovCisgIGludCBhOworfTsKKwordGVtcGxhdGUgPHR5cGVu YW1lIFQ+CitjbGFzcyBHCit7CisgcHVibGljOgorICB0ZW1wbGF0ZSA8dHlw ZW5hbWUgVDE+CisgIGludCBzaXplX2RpZmYgKCk7CisKKyAgdGVtcGxhdGUg PGludCBNPgorICBpbnQgc2l6ZV9tdWwgKCk7CisKKyAgdGVtcGxhdGUgPHR5 cGVuYW1lIFQxPgorICBUIG11bChjb25zdCBUMSB0MSk7CisKKyBwdWJsaWM6 CisgIFQgdDsKK307CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgordGVtcGxh dGUgPHR5cGVuYW1lIFQxPgoraW50CitHPFQ+OjpzaXplX2RpZmYgKCkKK3sK KyAgY291dCA8PCAiRnJvbSBDQyBHPD46OnNpemVfZGlmZjoiIDw8IGVuZGw7 CisgIHJldHVybiBzaXplb2YgKFQxKSAtIHNpemVvZiAoVCk7Cit9CisKK3Rl bXBsYXRlIDx0eXBlbmFtZSBUPgordGVtcGxhdGUgPGludCBNPgoraW50CitH PFQ+OjpzaXplX211bCAoKQoreworICBjb3V0IDw8ICJGcm9tIENDIEc8Pjo6 c2l6ZV9tdWw6IiA8PCBlbmRsOworICByZXR1cm4gTSAqIHNpemVvZiAoVCk7 Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgordGVtcGxhdGUgPHR5cGVu YW1lIFQxPgorVAorRzxUPjo6bXVsIChjb25zdCBUMSB0MSkKK3sKKyAgY291 dCA8PCAiRnJvbSBDQyBHPD46Om11bDoiIDw8IGVuZGw7CisgIHJldHVybiB0 MSAqIHQ7Cit9CisKK30gIC8vIG5hbWVzcGF4ZSBkb3AKKwordXNpbmcgbmFt ZXNwYWNlIGRvcDsKKworaW50IG1haW4odm9pZCkKK3sKKyAgQSBhMSwgYTI7 CisgIGExLmEgPSA1OworICBhMi5hID0gMTA7CisKKyAgQiBiMTsKKyAgYjEu YSA9IDMwOworICBBICphX3B0ciA9ICZiMTsKKworICBCdCBidDsKKyAgYnQu YSA9IDQwOworCisgIEJ0dCBidHQ7CisgIGJ0dC5hID0gLTU7CisKKyAgRzxp bnQ+IGcsICpnX3B0cjsKKyAgZy50ID0gNTsKKyAgZ19wdHIgPSAmZzsKKwor ICBFIGU7CisgIEUgJmVfcmVmID0gZTsKKyAgRSAqZV9wdHIgPSAmZTsKKyAg ZS5hID0gMTAwMDsKKyAgZS5BOjphID0gMTAwOworCisgIGludCBkaWZmID0g Zy5zaXplX2RpZmY8ZmxvYXQ+ICgpOworICBpbnQgc211bCA9IGcuc2l6ZV9t dWw8Mj4gKCk7CisgIGludCBtdWwgPSBnLm11bCAoMS4wKTsKKworICBmb3Ig KGludCBpID0gMDsgaSA8IDEwOyBpKyspCisgICAgeworICAgICAgYTEuYXJy YXlbaV0gPSBhMi5hcnJheVtpXSA9IGk7CisgICAgfQorCisgIHJldHVybiAw OyAvKiBCcmVhayBoZXJlLiAgKi8KK30KZGlmZiAtLWdpdCBhL2dkYi90ZXN0 c3VpdGUvZ2RiLnB5dGhvbi9weS14bWV0aG9kcy5leHAgYi9nZGIvdGVzdHN1 aXRlL2dkYi5weXRob24vcHkteG1ldGhvZHMuZXhwCm5ldyBmaWxlIG1vZGUg MTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNjYWM0NzgKLS0tIC9kZXYvbnVsbAor KysgYi9nZGIvdGVzdHN1aXRlL2dkYi5weXRob24vcHkteG1ldGhvZHMuZXhw CkBAIC0wLDAgKzEsMTI2IEBACisjIENvcHlyaWdodCAyMDE0IEZyZWUgU29m dHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisjIFRoaXMgcHJvZ3JhbSBpcyBm cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3Ig bW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVy YWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisjIHRoZSBGcmVl IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhl IExpY2Vuc2UsIG9yCisjIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl cnNpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0 aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9V VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy YW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1 YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91 bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1 YmxpYyBMaWNlbnNlCisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYg bm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisj IFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHREIgdGVzdHN1aXRlLiAgSXQg dGVzdHMgdGhlIGRlYnVnIG1ldGhvZHMKKyMgZmVhdHVyZSBpbiB0aGUgUHl0 aG9uIGV4dGVuc2lvbiBsYW5ndWFnZS4KKworbG9hZF9saWIgZ2RiLXB5dGhv bi5leHAKKworaWYgeyBbc2tpcF9jcGx1c190ZXN0c10gfSB7IGNvbnRpbnVl IH0KKworc3RhbmRhcmRfdGVzdGZpbGUgcHkteG1ldGhvZHMuY2MKKworaWYg e1twcmVwYXJlX2Zvcl90ZXN0aW5nICR0ZXN0ZmlsZS5leHAgJHRlc3RmaWxl ICRzcmNmaWxlIHtkZWJ1ZyBjKyt9XX0geworICAgIHJldHVybiAtMQorfQor CisjIFNraXAgYWxsIHRlc3RzIGlmIFB5dGhvbiBzY3JpcHRpbmcgaXMgbm90 IGVuYWJsZWQuCitpZiB7IFtza2lwX3B5dGhvbl90ZXN0c10gfSB7IGNvbnRp bnVlIH0KKworaWYgIVtydW50b19tYWluXSB7CisgICByZXR1cm4gLTEKK30K Kworc2V0IHhtZXRob2RzX3NjcmlwdCBbZ2RiX3JlbW90ZV9kb3dubG9hZCBo b3N0IFwKKwkJICAgICAke3NyY2Rpcn0vJHtzdWJkaXJ9LyR7dGVzdGZpbGV9 LnB5XQorCitnZGJfYnJlYWtwb2ludCBbZ2RiX2dldF9saW5lX251bWJlciAi QnJlYWsgaGVyZS4iXQorZ2RiX2NvbnRpbnVlX3RvX2JyZWFrcG9pbnQgIkJy ZWFrIGhlcmUiICIuKkJyZWFrIGhlcmUuKiIKKworIyBUZXN0cyBiZWZvcmUg bG9hZGluZyB0aGUgZGVidWcgbWV0aG9kcy4KK2dkYl90ZXN0ICJwIGExICsg YTIiICJGcm9tIENDIDxBX3BsdXNfQT4uKjE1IiAiQmVmb3JlOiBhMSArIGEy IgorZ2RiX3Rlc3QgInAgYTIgLSBhMSIgIkZyb20gQ0MgPEFfbWludXNfQT4u KjUiICJCZWZvcmU6IGExIC0gYTIiCitnZGJfdGVzdCAicCBiMSAtIGExIiAi RnJvbSBDQyA8QV9taW51c19BPi4qMjUiICJCZWZvcmU6IGIxIC0gYTEiCitn ZGJfdGVzdCAicCBhMS5nZXRhKCkiICJGcm9tIENDIEE6OmdldGEuKjUiICJC ZWZvcmU6IGExLmdldGEoKSIKK2dkYl90ZXN0ICJwICsrYTEiICJObyBzeW1i b2wuKiIgIkJlZm9yZTogKythMSIKK2dkYl90ZXN0ICJwIGExLmdldGFycmF5 aW5kKDUpIiAiQ291bGRuJ3QgZmluZCBtZXRob2QuKiIgXAorICAiQmVmb3Jl OiBhMS5nZXRhcnJheWluZCg1KSIKK2dkYl90ZXN0ICJwIGFfcHRyLT5nZXRh KCkiICJGcm9tIENDIEI6OmdldGEuKjYwIiAiQmVmb3JlOiBhX3B0ci0+Z2V0 YSgpIgorZ2RiX3Rlc3QgInAgZS5nZXRhKCkiICJGcm9tIENDIEE6OmdldGEu KjEwMCIgIkJlZm9yZTogZS5nZXRhKCkiCitnZGJfdGVzdCAicCBnLnNpemVf ZGlmZjxmbG9hdD4oKSIgIkZyb20gQ0MgRzw+OjpzaXplX2RpZmYuKiIgXAor ICAiQmVmb3JlOiBnLnNpemVfZGlmZjxmbG9hdD4oKSIKK2dkYl90ZXN0ICJw IGcuc2l6ZV9kaWZmPHVuc2lnbmVkIGxvbmc+KCkiICJDb3VsZG4ndCBmaW5k IG1ldGhvZC4qIiBcCisgICJCZWZvcmU6IGcuc2l6ZV9kaWZmPHVuc2lnbmVk IGxvbmc+KCkiCitnZGJfdGVzdCAicCBnLnNpemVfbXVsPDI+KCkiICJGcm9t IENDIEc8Pjo6c2l6ZV9tdWwuKiIgXAorICAiQmVmb3JlOiBnLnNpemVfbXVs PDI+KCkiCitnZGJfdGVzdCAicCBnLnNpemVfbXVsPDU+KCkiICJDb3VsZG4n dCBmaW5kIG1ldGhvZC4qIiBcCisgICJCZWZvcmU6IGcuc2l6ZV9tdWw8NT4o KSIKK2dkYl90ZXN0ICJwIGcubXVsPGRvdWJsZT4oMi4wKSIgIkZyb20gQ0Mg Rzw+OjptdWwuKiIgXAorICAiQmVmb3JlOiBnLm11bDxkb3VibGU+KDIuMCki CitnZGJfdGVzdCAicCBnLm11bDxjaGFyPignYScpIiAiQ291bGRuJ3QgZmlu ZCBtZXRob2QuKiIgXAorICAiQmVmb3JlOiBnLm11bDxjaGFyPignYScpIgor CisjIExvYWQgdGhlIHNjcmlwdCB3aGljaCBhZGRzIHRoZSBkZWJ1ZyBtZXRo b2RzLgorZ2RiX3Rlc3Rfbm9fb3V0cHV0ICJzb3VyY2UgJHt4bWV0aG9kc19z Y3JpcHR9IiAibG9hZCB0aGUgc2NyaXB0IGZpbGUiCisKKyMgVGVzdHMgYWZ0 ZXIgbG9hZGluZyBkZWJ1ZyBtZXRob2RzLgorZ2RiX3Rlc3QgInAgYTEgKyBh MiIgIkZyb20gUHl0aG9uIDxBX3BsdXNfQT4uKjE1IiAiQWZ0ZXI6IGExICsg YTIiCitnZGJfdGVzdCAicCBhMiAtIGExIiAiRnJvbSBDQyA8QV9taW51c19B Pi4qNSIgIkFmdGVyOiBhMSAtIGEyIgorZ2RiX3Rlc3QgInAgYjEgLSBhMSIg IkZyb20gQ0MgPEFfbWludXNfQT4uKjI1IiAiQWZ0ZXI6IGIxIC0gYTIiCitn ZGJfdGVzdCAicCBhMS5nZXRhKCkiICJGcm9tIFB5dGhvbiA8QV9nZXRhPi4q NSIgIkFmdGVyOiBhMS5nZXRhKCkiCitnZGJfdGVzdCAicCArK2ExIiAiRnJv bSBQeXRob24gPHBsdXNfcGx1c19BPi4qNiIgIkFmdGVyOiArK2ExIgorZ2Ri X3Rlc3QgInAgYTEuZ2V0YXJyYXlpbmQoNSkiICJGcm9tIFB5dGhvbiA8QV9n ZXRhcnJheWluZD4uKjUiIFwKKyAgIkFmdGVyOiBhMS5nZXRhcnJheWluZCg1 KSIKKyMgTm90ZSB0aGUgZm9sbG93aW5nIHRlc3QuICBYbWV0aG9kcyBvbiBk eW5hbWMgdHlwZXMgYXJlIG5vdCBsb29rZWQgdXAKKyMgY3VycmVudGx5LiAg SGVuY2UsIGV2ZW4gdGhvdWdoIGFfcHRyIHBvaW50cyB0byBhIEIgb2JqZWN0 LCB0aGUgeG1ldGhvZAorIyBkZWZpbmVkIGZvciBBIG9iamVjdHMgaXMgaW52 b2tlZC4KK2dkYl90ZXN0ICJwIGFfcHRyLT5nZXRhKCkiICJGcm9tIFB5dGhv biA8QV9nZXRhPi4qMzAiICJBZnRlcjogYV9wdHItPmdldGEoKSIKK2dkYl90 ZXN0ICJwIGUuZ2V0YSgpIiAiRnJvbSBQeXRob24gPEFfZ2V0YT4uKjEwMCIg IkFmdGVyOiBlLmdldGEoKSIKK2dkYl90ZXN0ICJwIGVfcHRyLT5nZXRhKCki ICJGcm9tIFB5dGhvbiA8QV9nZXRhPi4qMTAwIiAiQWZ0ZXI6IGVfcHRyLT5n ZXRhKCkiCitnZGJfdGVzdCAicCBlX3JlZi5nZXRhKCkiICJGcm9tIFB5dGhv biA8QV9nZXRhPi4qMTAwIiAiQWZ0ZXI6IGVfcmVmLmdldGEoKSIKK2dkYl90 ZXN0ICJwIGUubWV0aG9kKDEwKSIgIkZyb20gUHl0aG9uIDxFX21ldGhvZF9p bnQ+LioiICJBZnRlcjogZS5tZXRob2QoMTApIgorZ2RiX3Rlc3QgInAgZS5t ZXRob2QoJ2EnKSIgIkZyb20gUHl0aG9uIDxFX21ldGhvZF9jaGFyPi4qIiBc CisgICJBZnRlcjogZS5tZXRob2QoJ2EnKSIKK2dkYl90ZXN0ICJwIGcuc2l6 ZV9kaWZmPGZsb2F0PiAgKCkiICJGcm9tIFB5dGhvbiBHPD46OnNpemVfZGlm Zi4qIiBcCisgICJBZnRlcjogZy5zaXplX2RpZmY8ZmxvYXQ+KCkiCitnZGJf dGVzdCAicCBnLnNpemVfZGlmZjwgIHVuc2lnbmVkIGxvbmcgID4oKSIgIkZy b20gUHl0aG9uIEc8Pjo6c2l6ZV9kaWZmLioiIFwKKyAgIkFmdGVyOiBnLnNp emVfZGlmZjx1bnNpZ25lZCBsb25nPigpIgorZ2RiX3Rlc3QgInAgZy5zaXpl X211bDwyPigpIiAiRnJvbSBQeXRob24gRzw+OjpzaXplX211bC4qIiBcCisg ICJBZnRlcjogZy5zaXplX211bDwyPigpIgorZ2RiX3Rlc3QgInAgZy5zaXpl X211bDwgIDUgID4oKSIgIkZyb20gUHl0aG9uIEc8Pjo6c2l6ZV9tdWwuKiIg XAorICAiQWZ0ZXI6IGcuc2l6ZV9tdWw8ICA1ICA+KCkiCitnZGJfdGVzdCAi cCBnLm11bDxkb3VibGU+KDIuMCkiICJGcm9tIFB5dGhvbiBHPD46Om11bC4q IiBcCisgICJBZnRlcjogZy5tdWw8ZG91YmxlPigyLjApIgorZ2RiX3Rlc3Qg InAgZy5tdWw8Y2hhcj4oJ2EnKSIgIkZyb20gUHl0aG9uIEc8Pjo6bXVsLioi IFwKK2dkYl90ZXN0ICJwIGdfcHRyLT5tdWw8Y2hhcj4oJ2EnKSIgIkZyb20g UHl0aG9uIEc8Pjo6bXVsLioiIFwKKyAgIkFmdGVyOiBnX3B0ci0+bXVsPGNo YXI+KCdhJykiCisKKyMgVGVzdHMgZm9yICdkaXNhYmxlL2VuYWJsZSB4bWV0 aG9kJyBjb21tYW5kLgorZ2RiX3Rlc3Rfbm9fb3V0cHV0ICJkaXNhYmxlIHht ZXRob2QgLip4bWV0aG9kcyBHX21ldGhvZHMiIFwKKyAgIkRpc2FibGUgR19t ZXRob2RzIgorZ2RiX3Rlc3QgInAgZy5tdWw8Y2hhcj4oJ2EnKSIgIkNvdWxk bid0IGZpbmQgbWV0aG9kLioiIFwKKyAgImcubXVsPGNoYXI+KCdhJykgYWZ0 ZXIgZGlzYWJsaW5nIEdfbWV0aG9kcyIKK2dkYl90ZXN0X25vX291dHB1dCAi ZW5hYmxlIHhtZXRob2QgLip4bWV0aG9kcyBHX21ldGhvZHMiIFwKKyAgIkVu YWJsZSBHX21ldGhvZHMiCitnZGJfdGVzdCAicCBnLm11bDxjaGFyPignYScp IiAiRnJvbSBQeXRob24gRzw+OjptdWwuKiIgXAorICAiQWZ0ZXIgZW5hYmxp bmcgR19tZXRob2RzIgorZ2RiX3Rlc3Rfbm9fb3V0cHV0ICJkaXNhYmxlIHht ZXRob2QgLip4bWV0aG9kcyBHX21ldGhvZHM7bXVsIiBcCisgICJEaXNhYmxl IEdfbWV0aG9kczttdWwiCitnZGJfdGVzdCAicCBnLm11bDxjaGFyPignYScp IiAiQ291bGRuJ3QgZmluZCBtZXRob2QuKiIgXAorICAiZy5tdWw8Y2hhcj4o J2EnKSBhZnRlciBkaXNhYmxpbmcgR19tZXRob2RzO211bCIKK2dkYl90ZXN0 X25vX291dHB1dCAiZW5hYmxlIHhtZXRob2QgLip4bWV0aG9kcyBHX21ldGhv ZHM7bXVsIiBcCisgICJFbmFibGUgR19tZXRob2RzO211bCIKK2dkYl90ZXN0 ICJwIGcubXVsPGNoYXI+KCdhJykiICJGcm9tIFB5dGhvbiBHPD46Om11bC4q IiBcCisgICJBZnRlciBlbmFibGluZyBHX21ldGhvZHM7bXVsIgorCisjIFRl c3QgZm9yICdpbmZvIHhtZXRob2RzJyBjb21tYW5kCitnZGJfdGVzdCAiaW5m byB4bWV0aG9kIGdsb2JhbCBwbHVzIiAiZ2xvYmFsLipwbHVzX3BsdXNfQSIg XAorICAiaW5mbyB4bWV0aG9kIGdsb2JhbCBwbHVzIDEiCitnZGJfdGVzdF9u b19vdXRwdXQgImRpc2FibGUgeG1ldGhvZCAuKnhtZXRob2RzIEVfbWV0aG9k czttZXRob2RfaW50IiBcCisgICJkaXNhYmxlIHhtZXRob2QgLip4bWV0aG9k cyBFX21ldGhvZHM7bWV0aG9kX2ludCIKK2dkYl90ZXN0ICJpbmZvIHhtZXRo b2QgLip4bWV0aG9kcyBFX21ldGhvZHM7bWV0aG9kX2ludCIgIi4qIFxcXFtk aXNhYmxlZFxcXF0iIFwKKyAgImluZm8geG1ldGhvZCB4bWV0aG9kcyBFX21l dGhvZHM7bWV0aG9kX2ludCIKKworcmVtb3RlX2ZpbGUgaG9zdCBkZWxldGUg JHt4bWV0aG9kc19zY3JpcHR9CmRpZmYgLS1naXQgYS9nZGIvdGVzdHN1aXRl L2dkYi5weXRob24vcHkteG1ldGhvZHMucHkgYi9nZGIvdGVzdHN1aXRlL2dk Yi5weXRob24vcHkteG1ldGhvZHMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQK aW5kZXggMDAwMDAwMC4uNzExMDdlNQotLS0gL2Rldi9udWxsCisrKyBiL2dk Yi90ZXN0c3VpdGUvZ2RiLnB5dGhvbi9weS14bWV0aG9kcy5weQpAQCAtMCww ICsxLDIxOCBAQAorIyBDb3B5cmlnaHQgMjAxNCBGcmVlIFNvZnR3YXJlIEZv dW5kYXRpb24sIEluYy4KKworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0 d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQor IyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1Ymxp YyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorIyB0aGUgRnJlZSBTb2Z0d2Fy ZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNl LCBvcgorIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgor IworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdB UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK KyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB UiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGlj ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUg cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGlj ZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2Vl IDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworIyBUaGlzIGZp bGUgaXMgcGFydCBvZiB0aGUgR0RCIHRlc3RzdWl0ZS4gIEl0IHRlc3QgdGhl IHhtZXRob2RzIHN1cHBvcnQKKyMgaW4gdGhlIFB5dGhvbiBleHRlbnNpb24g bGFuZ3VhZ2UuCisKK2ltcG9ydCBnZGIKK2ltcG9ydCByZQorCitmcm9tIGdk Yi54bWV0aG9kIGltcG9ydCBYTWV0aG9kCitmcm9tIGdkYi54bWV0aG9kIGlt cG9ydCBYTWV0aG9kTWF0Y2hlciwgWE1ldGhvZFdvcmtlcgorZnJvbSBnZGIu eG1ldGhvZCBpbXBvcnQgU2ltcGxlWE1ldGhvZE1hdGNoZXIKKworCitkZWYg QV9wbHVzX0Eob2JqLCBvcHIpOgorICBwcmludCAoJ0Zyb20gUHl0aG9uIDxB X3BsdXNfQT46JykKKyAgcmV0dXJuIG9ialsnYSddICsgb3ByWydhJ10KKwor CitkZWYgcGx1c19wbHVzX0Eob2JqKToKKyAgcHJpbnQgKCdGcm9tIFB5dGhv biA8cGx1c19wbHVzX0E+OicpCisgIHJldHVybiBvYmpbJ2EnXSArIDEKKwor CitkZWYgQV9nZXRhKG9iaik6CisgIHByaW50ICgnRnJvbSBQeXRob24gPEFf Z2V0YT46JykKKyAgcmV0dXJuIG9ialsnYSddCisKKworZGVmIEFfZ2V0YXJy YXlpbmQob2JqLCBpbmRleCk6CisgIHByaW50ICdGcm9tIFB5dGhvbiA8QV9n ZXRhcnJheWluZD46JworICByZXR1cm4gb2JqWydhcnJheSddW2luZGV4XQor CisKK3R5cGVfQSA9IGdkYi5wYXJzZV9hbmRfZXZhbCgnKGRvcDo6QSAqKSAw JykudHlwZS50YXJnZXQoKQordHlwZV9CID0gZ2RiLnBhcnNlX2FuZF9ldmFs KCcoZG9wOjpCICopIDAnKS50eXBlLnRhcmdldCgpCit0eXBlX2ludCA9IGdk Yi5wYXJzZV9hbmRfZXZhbCgnKGludCAqKSAwJykudHlwZS50YXJnZXQoKQor CisKKyMgVGhlIEUgY2xhc3MgbWF0Y2hlciBhbmQgd29ya2VyIHRlc3QgdHdv IHRoaW5nczoKKyMgICAxLiB4bWV0aG9kIHJldHVybmluZyBOb25lLgorIyAg IDIuIE1hdGNoZXIgcmV0dXJuaW5nIGEgbGlzdCBvZiB3b3JrZXJzLgorCitj bGFzcyBFX21ldGhvZF9jaGFyX3dvcmtlcihYTWV0aG9kV29ya2VyKToKKyAg ICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIHBhc3MKKworICAgIGRl ZiBnZXRfYXJnX3R5cGVzKHNlbGYpOgorICAgICAgICByZXR1cm4gZ2RiLmxv b2t1cF90eXBlKCdjaGFyJykKKworICAgIGRlZiBpbnZva2Uoc2VsZiwgb2Jq LCBhcmdzKToKKyAgICAgICAgcHJpbnQgJ0Zyb20gUHl0aG9uIDxFX21ldGhv ZF9jaGFyPicKKyAgICAgICAgcmV0dXJuIE5vbmUKKworCitjbGFzcyBFX21l dGhvZF9pbnRfd29ya2VyKFhNZXRob2RXb3JrZXIpOgorICAgIGRlZiBfX2lu aXRfXyhzZWxmKToKKyAgICAgICAgcGFzcworCisgICAgZGVmIGdldF9hcmdf dHlwZXMoc2VsZik6CisgICAgICAgIHJldHVybiBnZGIubG9va3VwX3R5cGUo J2ludCcpCisKKyAgICBkZWYgaW52b2tlKHNlbGYsIG9iaiwgYXJncyk6Cisg ICAgICAgIHByaW50ICdGcm9tIFB5dGhvbiA8RV9tZXRob2RfaW50PicKKyAg ICAgICAgcmV0dXJuIE5vbmUKKworCitjbGFzcyBFX21ldGhvZF9tYXRjaGVy KFhNZXRob2RNYXRjaGVyKToKKyAgICBkZWYgX19pbml0X18oc2VsZik6Cisg ICAgICAgIFhNZXRob2RNYXRjaGVyLl9faW5pdF9fKHNlbGYsICdFX21ldGhv ZHMnKQorICAgICAgICBzZWxmLm1ldGhvZHMgPSBbWE1ldGhvZCgnbWV0aG9k X2ludCcpLCBYTWV0aG9kKCdtZXRob2RfY2hhcicpXQorCisgICAgZGVmIG1h dGNoKHNlbGYsIGNsYXNzX3R5cGUsIG1ldGhvZF9uYW1lKToKKyAgICAgICAg Y2xhc3NfdGFnID0gY2xhc3NfdHlwZS51bnF1YWxpZmllZCgpLnRhZworICAg ICAgICBpZiBub3QgcmUubWF0Y2goJ15kb3A6OkUkJywgY2xhc3NfdGFnKToK KyAgICAgICAgICAgIHJldHVybiBOb25lCisJaWYgbm90IHJlLm1hdGNoKCde bWV0aG9kJCcsIG1ldGhvZF9uYW1lKToKKyAgICAgICAgICAgIHJldHVybiBO b25lCisgICAgICAgIHdvcmtlcnMgPSBbXQorICAgICAgICBpZiBzZWxmLm1l dGhvZHNbMF0uZW5hYmxlZDoKKyAgICAgICAgICAgIHdvcmtlcnMuYXBwZW5k KEVfbWV0aG9kX2ludF93b3JrZXIoKSkKKyAgICAgICAgaWYgc2VsZi5tZXRo b2RzWzFdLmVuYWJsZWQ6CisgICAgICAgICAgICB3b3JrZXJzLmFwcGVuZChF X21ldGhvZF9jaGFyX3dvcmtlcigpKQorICAgICAgICByZXR1cm4gd29ya2Vy cworCisKKyMgVGhlIEcgY2xhc3MgbWV0aG9kIG1hdGNoZXIgYW5kIHdvcmtl ciBpbGx1c3RyYXRlIGhvdyB0byB3cml0ZQorIyB4bWV0aG9kIG1hdGNoZXJz IGFuZCB3b3JrZXJzIGZvciB0ZW1wbGF0ZSBjbGFzc2VzIGFuZCB0ZW1wbGF0 ZQorIyBtZXRob2RzLgorCitjbGFzcyBHX3NpemVfZGlmZl93b3JrZXIoWE1l dGhvZFdvcmtlcik6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGNsYXNzX3Rl bXBsYXRlX3R5cGUsIG1ldGhvZF90ZW1wbGF0ZV90eXBlKToKKyAgICAgICAg c2VsZi5fY2xhc3NfdGVtcGxhdGVfdHlwZSA9IGNsYXNzX3RlbXBsYXRlX3R5 cGUKKyAgICAgICAgc2VsZi5fbWV0aG9kX3RlbXBsYXRlX3R5cGUgPSBtZXRo b2RfdGVtcGxhdGVfdHlwZQorCisgICAgZGVmIGdldF9hcmdfdHlwZXMoc2Vs Zik6CisgICAgICAgIHBhc3MKKworICAgIGRlZiBpbnZva2Uoc2VsZiwgb2Jq LCBhcmdzKToKKyAgICAgICAgcHJpbnQgKCdGcm9tIFB5dGhvbiBHPD46OnNp emVfZGlmZigpJykKKyAgICAgICAgcmV0dXJuIChzZWxmLl9tZXRob2RfdGVt cGxhdGVfdHlwZS5zaXplb2YgLQorICAgICAgICAgICAgICAgIHNlbGYuX2Ns YXNzX3RlbXBsYXRlX3R5cGUuc2l6ZW9mKQorCisKK2NsYXNzIEdfc2l6ZV9t dWxfd29ya2VyKFhNZXRob2RXb3JrZXIpOgorICAgIGRlZiBfX2luaXRfXyhz ZWxmLCBjbGFzc190ZW1wbGF0ZV90eXBlLCBtZXRob2RfdGVtcGxhdGVfdmFs KToKKyAgICAgICAgc2VsZi5fY2xhc3NfdGVtcGxhdGVfdHlwZSA9IGNsYXNz X3RlbXBsYXRlX3R5cGUKKyAgICAgICAgc2VsZi5fbWV0aG9kX3RlbXBsYXRl X3ZhbCA9IG1ldGhvZF90ZW1wbGF0ZV92YWwKKworICAgIGRlZiBnZXRfYXJn X3R5cGVzKHNlbGYpOgorICAgICAgICBwYXNzCisKKyAgICBkZWYgaW52b2tl KHNlbGYsIG9iaiwgYXJncyk6CisgICAgICAgIHByaW50ICgnRnJvbSBQeXRo b24gRzw+OjpzaXplX211bCgpJykKKyAgICAgICAgcmV0dXJuIHNlbGYuX2Ns YXNzX3RlbXBsYXRlX3R5cGUuc2l6ZW9mICogc2VsZi5fbWV0aG9kX3RlbXBs YXRlX3ZhbAorCisKK2NsYXNzIEdfbXVsX3dvcmtlcihYTWV0aG9kV29ya2Vy KToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgY2xhc3NfdGVtcGxhdGVfdHlw ZSwgbWV0aG9kX3RlbXBsYXRlX3R5cGUpOgorICAgICAgICBzZWxmLl9jbGFz c190ZW1wbGF0ZV90eXBlID0gY2xhc3NfdGVtcGxhdGVfdHlwZQorICAgICAg ICBzZWxmLl9tZXRob2RfdGVtcGxhdGVfdHlwZSA9IG1ldGhvZF90ZW1wbGF0 ZV90eXBlCisKKyAgICBkZWYgZ2V0X2FyZ190eXBlcyhzZWxmKToKKyAgICAg ICAgcmV0dXJuIHNlbGYuX21ldGhvZF90ZW1wbGF0ZV90eXBlCisKKyAgICBk ZWYgaW52b2tlKHNlbGYsIG9iaiwgYXJncyk6CisgICAgICAgIHByaW50ICgn RnJvbSBQeXRob24gRzw+OjptdWwoKScpCisgICAgICAgIHJldHVybiBvYmpb J3QnXSAqIGFyZ3NbMF0KKworCitjbGFzcyBHX21ldGhvZHNfbWF0Y2hlcihY TWV0aG9kTWF0Y2hlcik6CisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAg ICAgICBYTWV0aG9kTWF0Y2hlci5fX2luaXRfXyhzZWxmLCAnR19tZXRob2Rz JykKKyAgICAgICAgc2VsZi5tZXRob2RzID0gW1hNZXRob2QoJ3NpemVfZGlm ZicpLAorICAgICAgICAgICAgICAgICAgICAgICAgWE1ldGhvZCgnc2l6ZV9t dWwnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIFhNZXRob2QoJ211bCcp XQorCisgICAgZGVmIF9pc19lbmFibGVkKHNlbGYsIG5hbWUpOgorICAgICAg ICBmb3IgbWV0aG9kIGluIHNlbGYubWV0aG9kczoKKyAgICAgICAgICAgIGlm IG1ldGhvZC5uYW1lID09IG5hbWUgYW5kIG1ldGhvZC5lbmFibGVkOgorICAg ICAgICAgICAgICAgIHJldHVybiBUcnVlCisKKyAgICBkZWYgbWF0Y2goc2Vs ZiwgY2xhc3NfdHlwZSwgbWV0aG9kX25hbWUpOgorICAgICAgICBjbGFzc190 YWcgPSBjbGFzc190eXBlLnVucXVhbGlmaWVkKCkudGFnCisgICAgICAgIGlm IG5vdCByZS5tYXRjaCgnXmRvcDo6RzxbIF0qW19hLXpBLVpdWyBfYS16QS1a MC05XSo+JCcsCisgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc190YWcp OgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgdF9uYW1lID0g Y2xhc3NfdGFnWzc6LTFdCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHRf dHlwZSA9IGdkYi5sb29rdXBfdHlwZSh0X25hbWUpCisgICAgICAgIGV4Y2Vw dCBnZGIuZXJyb3I6CisgICAgICAgICAgICByZXR1cm4gTm9uZQorICAgICAg ICBpZiByZS5tYXRjaCgnXnNpemVfZGlmZjxbIF0qW19hLXpBLVpdWyBfYS16 QS1aMC05XSo+JCcsIG1ldGhvZF9uYW1lKToKKyAgICAgICAgICAgIGlmIG5v dCBzZWxmLl9pc19lbmFibGVkKCdzaXplX2RpZmYnKToKKyAgICAgICAgICAg ICAgICByZXR1cm4gTm9uZQorICAgICAgICAgICAgdDFfbmFtZSA9IG1ldGhv ZF9uYW1lWzEwOi0xXQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAg ICAgIHQxX3R5cGUgPSBnZGIubG9va3VwX3R5cGUodDFfbmFtZSkKKyAgICAg ICAgICAgICAgICByZXR1cm4gR19zaXplX2RpZmZfd29ya2VyKHRfdHlwZSwg dDFfdHlwZSkKKyAgICAgICAgICAgIGV4Y2VwdCBnZGIuZXJyb3I6CisgICAg ICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgaWYgcmUubWF0Y2go J15zaXplX211bDxbIF0qWzAtOV0rWyBdKj4kJywgbWV0aG9kX25hbWUpOgor ICAgICAgICAgICAgaWYgbm90IHNlbGYuX2lzX2VuYWJsZWQoJ3NpemVfbXVs Jyk6CisgICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgICAg IG1fdmFsID0gaW50KG1ldGhvZF9uYW1lWzk6LTFdKQorICAgICAgICAgICAg cmV0dXJuIEdfc2l6ZV9tdWxfd29ya2VyKHRfdHlwZSwgbV92YWwpCisgICAg ICAgIGlmIHJlLm1hdGNoKCdebXVsPFsgXSpbX2EtekEtWl1bIF9hLXpBLVow LTldKj4kJywgbWV0aG9kX25hbWUpOgorICAgICAgICAgICAgaWYgbm90IHNl bGYuX2lzX2VuYWJsZWQoJ211bCcpOgorICAgICAgICAgICAgICAgIHJldHVy biBOb25lCisgICAgICAgICAgICB0MV9uYW1lID0gbWV0aG9kX25hbWVbNDot MV0KKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICB0MV90eXBl ID0gZ2RiLmxvb2t1cF90eXBlKHQxX25hbWUpCisgICAgICAgICAgICAgICAg cmV0dXJuIEdfbXVsX3dvcmtlcih0X3R5cGUsIHQxX3R5cGUpCisgICAgICAg ICAgICBleGNlcHQgZ2RiLmVycm9yOgorICAgICAgICAgICAgICAgIHJldHVy biBOb25lCisKKworZ2xvYmFsX2RtX2xpc3QgPSBbCisgICAgU2ltcGxlWE1l dGhvZE1hdGNoZXIoJ0FfcGx1c19BJywKKyAgICAgICAgICAgICAgICAgICAg ICAgICAnXmRvcDo6QSQnLAorICAgICAgICAgICAgICAgICAgICAgICAgICdv cGVyYXRvclwrJywKKyAgICAgICAgICAgICAgICAgICAgICAgICBBX3BsdXNf QSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAjIFRoaXMgaXMgYSByZXBs YWNlbWVudCwgaGVuY2UgbWF0Y2ggdGhlIGFyZyB0eXBlCisgICAgICAgICAg ICAgICAgICAgICAgICAgIyBleGFjdGx5IQorICAgICAgICAgICAgICAgICAg ICAgICAgIHR5cGVfQS5jb25zdCgpLnJlZmVyZW5jZSgpKSwKKyAgICBTaW1w bGVYTWV0aG9kTWF0Y2hlcigncGx1c19wbHVzX0EnLAorICAgICAgICAgICAg ICAgICAgICAgICAgICdeZG9wOjpBJCcsCisgICAgICAgICAgICAgICAgICAg ICAgICAgJ29wZXJhdG9yXCtcKycsCisgICAgICAgICAgICAgICAgICAgICAg ICAgcGx1c19wbHVzX0EpLAorICAgIFNpbXBsZVhNZXRob2RNYXRjaGVyKCdB X2dldGEnLAorICAgICAgICAgICAgICAgICAgICAgICAgICdeZG9wOjpBJCcs CisgICAgICAgICAgICAgICAgICAgICAgICAgJ15nZXRhJCcsCisgICAgICAg ICAgICAgICAgICAgICAgICAgQV9nZXRhKSwKKyAgICBTaW1wbGVYTWV0aG9k TWF0Y2hlcignQV9nZXRhcnJheWluZCcsCisgICAgICAgICAgICAgICAgICAg ICAgICAgJ15kb3A6OkEkJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAn XmdldGFycmF5aW5kJCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgQV9n ZXRhcnJheWluZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlX2lu dCksCitdCisKK2ZvciBtYXRjaGVyIGluIGdsb2JhbF9kbV9saXN0OgorICAg IGdkYi54bWV0aG9kLnJlZ2lzdGVyX3htZXRob2RfbWF0Y2hlcihnZGIsIG1h dGNoZXIpCitnZGIueG1ldGhvZC5yZWdpc3Rlcl94bWV0aG9kX21hdGNoZXIo Z2RiLmN1cnJlbnRfcHJvZ3NwYWNlKCksCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgR19tZXRob2RzX21hdGNoZXIoKSkKK2dkYi54 bWV0aG9kLnJlZ2lzdGVyX3htZXRob2RfbWF0Y2hlcihnZGIuY3VycmVudF9w cm9nc3BhY2UoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBFX21ldGhvZF9tYXRjaGVyKCkpCg== --f46d0444eb0917f65004fa178a46--