From mboxrd@z Thu Jan 1 00:00:00 1970 From: Federico Beffa Subject: Re: hackage importer Date: Sun, 26 Apr 2015 13:38:33 +0200 Message-ID: References: <87k2yiqqaw.fsf@gnu.org> <871tkbdhwc.fsf@gnu.org> <871tk7ykfj.fsf@gnu.org> <87zj6t9tq5.fsf@gnu.org> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary=001a11c33c90ca686705149f113d Return-path: Received: from eggs.gnu.org ([2001:4830:134:3::10]:37874) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1YmKtX-0001i9-B8 for guix-devel@gnu.org; Sun, 26 Apr 2015 07:38:49 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1YmKtQ-00089q-RN for guix-devel@gnu.org; Sun, 26 Apr 2015 07:38:43 -0400 In-Reply-To: <87zj6t9tq5.fsf@gnu.org> List-Id: "Development of GNU Guix and the GNU System distribution." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: guix-devel-bounces+gcggd-guix-devel=m.gmane.org@gnu.org Sender: guix-devel-bounces+gcggd-guix-devel=m.gmane.org@gnu.org To: =?UTF-8?Q?Ludovic_Court=C3=A8s?= Cc: Guix-devel --001a11c33c90ca686705149f113d Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable On Tue, Mar 31, 2015 at 3:33 PM, Ludovic Court=C3=A8s wrote: > I think it=E2=80=99s a matter of separating concerns. In my mind there a= re > three distinct layers: > > 1. Cabal parsing (what I call =E2=80=98read-cabal=E2=80=99, because it= =E2=80=99s the > equivalent of =E2=80=98read=E2=80=99); > > 2. Cabal evaluation/instantiation for a certain set of flags, OS, > etc. (what I call =E2=80=98eval-cabal=E2=80=99 because it=E2=80=99s = the equivalent of > =E2=80=98eval=E2=80=99); > > 3. Conversion of Cabal packages of Guix package sexps. > > My concern was about making sure these three phases were clearly visible > in the code. Tu put it differently, #1 and #2 would conceptually be > part of a Cabal parsing/evaluation library, while #3 would be the only > Guix-specific part. Please find attached a patch reorganizing the code as you suggest. Regards, Fede --001a11c33c90ca686705149f113d Content-Type: text/x-diff; charset=UTF-8; name="0001-import-hackage-Refactor-parsing-code-and-add-new-opt.patch" Content-Disposition: attachment; filename="0001-import-hackage-Refactor-parsing-code-and-add-new-opt.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: f_i8ydra6n0 RnJvbSBiYzhjZGFiMWUzMjJhMjUwMDJhM2Q5Y2YzM2VkZGQ4NTZjOGE4MWQ4IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBGZWRlcmljbyBCZWZmYSA8YmVmZmFAZmJlbmdpbmVlcmluZy5j aD4KRGF0ZTogU3VuLCAyNiBBcHIgMjAxNSAxMToyMjoyOSArMDIwMApTdWJqZWN0OiBbUEFUQ0hd IGltcG9ydDogaGFja2FnZTogUmVmYWN0b3IgcGFyc2luZyBjb2RlIGFuZCBhZGQgbmV3IG9wdGlv bi4KCiogZ3VpeC9pbXBvcnQvY2FiYWwuc2NtOiBOZXcgZmlsZS4KCiogZ3VpeC9pbXBvcnQvaGFj a2FnZS5zY206IFVwZGF0ZSB0byB1c2UgdGhlIG5ldyBDYWJhbCBwYXJzaW5nIG1vZHVsZS4KCiog dGVzdHMvaGFja2FnZS5zY206IFVwZGF0ZSB0ZXN0cyBmb3IgcHJpdmF0ZSBmdW5jdGlvbnMuCgoq IGd1aXgvc2NyaXB0cy9pbXBvcnQvaGFja2FnZS5zY206IEFkZCBuZXcgJy0tY2FiYWwtZW52aXJv bm1lbnQnIG9wdGlvbi4KCiogZG9jL2d1aXgudGV4aTogLi4uIGFuZCBkb2N1bWVudCBpdC4KCiog TWFrZWZpbGUuYW0gKE1PRFVMRVMpOiBBZGQgJ2d1aXgvaW1wb3J0L2NhYmFsLnNjbScsCiAgJ2d1 aXgvaW1wb3J0L2hhY2thZ2Uuc2NtJyBhbmQgJ2d1aXgvc2NyaXB0cy9pbXBvcnQvaGFja2FnZS5z Y20nLgogIChTQ01fVEVTVFMpOiBBZGQgJ3Rlc3RzL2hhY2thZ2Uuc2NtJy4KLS0tCiBNYWtlZmls ZS5hbSAgICAgICAgICAgICAgICAgICAgIHwgICA0ICsKIGRvYy9ndWl4LnRleGkgICAgICAgICAg ICAgICAgICAgfCAgMTcgKy0KIGd1aXgvaW1wb3J0L2NhYmFsLnNjbSAgICAgICAgICAgfCA5MDIg KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwogZ3VpeC9pbXBvcnQvaGFj a2FnZS5zY20gICAgICAgICB8IDY5MSArKysrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIGd1 aXgvc2NyaXB0cy9pbXBvcnQvaGFja2FnZS5zY20gfCAgMTQgKy0KIHRlc3RzL2hhY2thZ2Uuc2Nt ICAgICAgICAgICAgICAgfCAgMTggKy0KIDYgZmlsZXMgY2hhbmdlZCwgMTAwOSBpbnNlcnRpb25z KCspLCA2MzcgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgZ3VpeC9pbXBvcnQvY2Fi YWwuc2NtCgpkaWZmIC0tZ2l0IGEvTWFrZWZpbGUuYW0gYi9NYWtlZmlsZS5hbQppbmRleCBkNTRl MjgxLi5iNDJhN2Y1IDEwMDY0NAotLS0gYS9NYWtlZmlsZS5hbQorKysgYi9NYWtlZmlsZS5hbQpA QCAtODksNiArODksOCBAQCBNT0RVTEVTID0JCQkJCVwKICAgZ3VpeC9pbXBvcnQvdXRpbHMuc2Nt CQkJCVwKICAgZ3VpeC9pbXBvcnQvZ251LnNjbQkJCQlcCiAgIGd1aXgvaW1wb3J0L3NuaXguc2Nt CQkJCVwKKyAgZ3VpeC9pbXBvcnQvY2FiYWwuc2NtCQkJCVwKKyAgZ3VpeC9pbXBvcnQvaGFja2Fn ZS5zY20JCQlcCiAgIGd1aXgvc2NyaXB0cy9kb3dubG9hZC5zY20JCQlcCiAgIGd1aXgvc2NyaXB0 cy9idWlsZC5zY20JCQlcCiAgIGd1aXgvc2NyaXB0cy9hcmNoaXZlLnNjbQkJCVwKQEAgLTEwNCw2 ICsxMDYsNyBAQCBNT0RVTEVTID0JCQkJCVwKICAgZ3VpeC9zY3JpcHRzL2xpbnQuc2NtCQkJCVwK ICAgZ3VpeC9zY3JpcHRzL2ltcG9ydC9nbnUuc2NtCQkJXAogICBndWl4L3NjcmlwdHMvaW1wb3J0 L25peC5zY20JCQlcCisgIGd1aXgvc2NyaXB0cy9pbXBvcnQvaGFja2FnZS5zY20JCVwKICAgZ3Vp eC9zY3JpcHRzL2Vudmlyb25tZW50LnNjbQkJCVwKICAgZ3VpeC9zY3JpcHRzL3B1Ymxpc2guc2Nt CQkJXAogICBndWl4LnNjbQkJCQkJXApAQCAtMTczLDYgKzE3Niw3IEBAIFNDTV9URVNUUyA9CQkJ CQlcCiAgIHRlc3RzL2J1aWxkLXV0aWxzLnNjbQkJCQlcCiAgIHRlc3RzL3BhY2thZ2VzLnNjbQkJ CQlcCiAgIHRlc3RzL3NuaXguc2NtCQkJCVwKKyAgdGVzdHMvaGFja2FnZS5zY20JCQkJXAogICB0 ZXN0cy9zdG9yZS5zY20JCQkJXAogICB0ZXN0cy9tb25hZHMuc2NtCQkJCVwKICAgdGVzdHMvZ2V4 cC5zY20JCQkJXApkaWZmIC0tZ2l0IGEvZG9jL2d1aXgudGV4aSBiL2RvYy9ndWl4LnRleGkKaW5k ZXggNzA2MDRiNy4uNDUzZTcxZiAxMDA2NDQKLS0tIGEvZG9jL2d1aXgudGV4aQorKysgYi9kb2Mv Z3VpeC50ZXhpCkBAIC0zMjAxLDE0ICszMjAxLDI1IEBAIFNwZWNpZmljIGNvbW1hbmQtbGluZSBv cHRpb25zIGFyZToKIEB0YWJsZSBAY29kZQogQGl0ZW0gLS1uby10ZXN0LWRlcGVuZGVuY2llcwog QGl0ZW14IC10Ci1EbyBub3QgaW5jbHVkZSBkZXBlbmRlbmNpZXMgb25seSByZXF1aXJlZCB0byBy dW4gdGhlIHRlc3Qgc3VpdGUuCitEbyBub3QgaW5jbHVkZSBkZXBlbmRlbmNpZXMgb25seSByZXF1 aXJlZCB0byBydW4gdGhlIHRlc3Qgc3VpdGVzLgorQGl0ZW0gLS1jYWJhbC1lbnZpcm9ubWVudD1A dmFye2FsaXN0fQorQGl0ZW14IC1lIEB2YXJ7YWxpc3R9CitAdmFye2FsaXN0fSBpcyBhIFNjaGVt ZSBhbGlzdCBkZWZpbmluZyB0aGUgZW52aXJvbm1lbnQgaW4gd2hpY2ggdGhlCitDYWJhbCBjb25k aXRpb25hbHMgYXJlIGV2YWx1YXRlZC4gIFRoZSBhY2NlcHRlZCBrZXlzIGFyZTogQHNhbXB7b3N9 LAorQHNhbXB7YXJjaH0sIEBzYW1we2ltcGx9IGFuZCBhIHN0cmluZyByZXByZXNlbnRpbmcgdGhl IG5hbWUgb2YgYSBmbGFnLgorVGhlIHZhbHVlIGFzc29jaWF0ZWQgd2l0aCBhIGZsYWcgaGFzIHRv IGJlIGVpdGhlciB0aGUgc3ltYm9sCitAdmVyYnsndHJ1ZSd9IG9yIEB2ZXJieydmYWxzZSd9LiAg VGhlIHZhbHVlIGFzc29jaWF0ZWQgd2l0aCBvdGhlciBrZXlzCitoYXMgdG8gY29uZm9ybSB0byB0 aGUgQ2FiYWwgZmlsZSBmb3JtYXQgZGVmaW5pdGlvbi4gIFRoZSBkZWZhdWx0IHZhbHVlCithc3Nv Y2lhdGVkIHdpdGggdGhlIGtleXMgQHNhbXB7b3N9LCBAc2FtcHthcmNofSBhbmQgQHNhbXB7aW1w bH0gaXMKK0BzYW1we2xpbnV4fSwgQHNhbXB7eDg2XzY0fSBhbmQgQHNhbXB7Z2hjfSByZXNwZWN0 aXZlbHkuCiBAZW5kIHRhYmxlCiAKIFRoZSBjb21tYW5kIGJlbG93IGltcG9ydHMgbWV0YS1kYXRh IGZvciB0aGUgbGF0ZXN0IHZlcnNpb24gb2YgdGhlCi1AY29kZXtIVFRQfSBIYXNrZWxsIHBhY2th Z2Ugd2l0aG91dCBpbmNsdWRpbmcgdGVzdCBkZXBlbmRlbmNpZXM6CitAY29kZXtIVFRQfSBIYXNr ZWxsIHBhY2thZ2Ugd2l0aG91dCBpbmNsdWRpbmcgdGVzdCBkZXBlbmRlbmNpZXMgYW5kCitzcGVj aWZ5aW5nIHRoZSB2YWx1ZSBvZiB0aGUgZmxhZyBAc2FtcHtuZXR3b3JrLXVyaX0gYXMgQHZlcmJ7 J2ZhbHNlJ306CiAKIEBleGFtcGxlCi1ndWl4IGltcG9ydCBoYWNrYWdlIC10IEhUVFAKK2d1aXgg aW1wb3J0IGhhY2thZ2UgLXQgLWUgIicoKFwibmV0d29yay11cmlcIiAuIGZhbHNlKSkiIEhUVFAK IEBlbmQgZXhhbXBsZQogCiBBIHNwZWNpZmljIHBhY2thZ2UgdmVyc2lvbiBtYXkgb3B0aW9uYWxs eSBiZSBzcGVjaWZpZWQgYnkgZm9sbG93aW5nIHRoZQpkaWZmIC0tZ2l0IGEvZ3VpeC9pbXBvcnQv Y2FiYWwuc2NtIGIvZ3VpeC9pbXBvcnQvY2FiYWwuc2NtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu ZGV4IDAwMDAwMDAuLmZkNGJiZDYKLS0tIC9kZXYvbnVsbAorKysgYi9ndWl4L2ltcG9ydC9jYWJh bC5zY20KQEAgLTAsMCArMSw5MDIgQEAKKzs7OyBHTlUgR3VpeCAtLS0gRnVuY3Rpb25hbCBwYWNr YWdlIG1hbmFnZW1lbnQgZm9yIEdOVQorOzs7IENvcHlyaWdodCDCqSAyMDE1IEZlZGVyaWNvIEJl ZmZhIDxiZWZmYUBmYmVuZ2luZWVyaW5nLmNoPgorOzs7Cis7OzsgVGhpcyBmaWxlIGlzIHBhcnQg b2YgR05VIEd1aXguCis7OzsKKzs7OyBHTlUgR3VpeCBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0Cis7OzsgdW5kZXIgdGhlIHRlcm1zIG9m IHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKzs7OyB0aGUg RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNl LCBvciAoYXQKKzs7OyB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCis7OzsKKzs7OyBH TlUgR3VpeCBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs LCBidXQKKzs7OyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk IHdhcnJhbnR5IG9mCis7OzsgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD VUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorOzs7IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv ciBtb3JlIGRldGFpbHMuCis7OzsKKzs7OyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5 IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorOzs7IGFsb25nIHdpdGggR05VIEd1 aXguICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKyhkZWZp bmUtbW9kdWxlIChndWl4IGltcG9ydCBjYWJhbCkKKyAgIzp1c2UtbW9kdWxlIChpY2UtOSBtYXRj aCkKKyAgIzp1c2UtbW9kdWxlIChpY2UtOSByZWdleCkKKyAgIzp1c2UtbW9kdWxlIChpY2UtOSBy ZGVsaW0pCisgICM6dXNlLW1vZHVsZSAoaWNlLTkgcmVjZWl2ZSkKKyAgIzp1c2UtbW9kdWxlIChz cmZpIHNyZmktMjYpCisgICM6dXNlLW1vZHVsZSAoc3JmaSBzcmZpLTM0KQorICAjOnVzZS1tb2R1 bGUgKHNyZmkgc3JmaS0zNSkKKyAgIzp1c2UtbW9kdWxlIChzcmZpIHNyZmktMTEpCisgICM6dXNl LW1vZHVsZSAoc3JmaSBzcmZpLTEpCisgICM6dXNlLW1vZHVsZSAoc3JmaSBzcmZpLTkpCisgICM6 dXNlLW1vZHVsZSAoc3JmaSBzcmZpLTkgZ251KQorICAjOnVzZS1tb2R1bGUgKGd1aXggbW9uYWRz KQorICAjOmV4cG9ydCAocmVhZC1jYWJhbAorICAgICAgICAgICAgcGFyc2UtY2FiYWwKKyAgICAg ICAgICAgIGV2YWwtY2FiYWwKKyAgICAgICAgICAgIAorICAgICAgICAgICAgY2FiYWwtcGFja2Fn ZT8KKyAgICAgICAgICAgIGNhYmFsLXBhY2thZ2UtbmFtZQorICAgICAgICAgICAgY2FiYWwtcGFj a2FnZS12ZXJzaW9uCisgICAgICAgICAgICBjYWJhbC1wYWNrYWdlLWxpY2Vuc2UKKyAgICAgICAg ICAgIGNhYmFsLXBhY2thZ2UtaG9tZS1wYWdlCisgICAgICAgICAgICBjYWJhbC1wYWNrYWdlLXNv dXJjZS1yZXBvc2l0b3J5CisgICAgICAgICAgICBjYWJhbC1wYWNrYWdlLXN5bm9wc2lzCisgICAg ICAgICAgICBjYWJhbC1wYWNrYWdlLWRlc2NyaXB0aW9uCisgICAgICAgICAgICBjYWJhbC1wYWNr YWdlLWV4ZWN1dGFibGVzCisgICAgICAgICAgICBjYWJhbC1wYWNrYWdlLWxpYnJhcnkKKyAgICAg ICAgICAgIGNhYmFsLXBhY2thZ2UtdGVzdC1zdWl0ZXMKKyAgICAgICAgICAgIGNhYmFsLXBhY2th Z2UtZmxhZ3MKKyAgICAgICAgICAgIGNhYmFsLXBhY2thZ2UtZXZhbC1lbnZpcm9ubWVudAorCisg ICAgICAgICAgICBjYWJhbC1zb3VyY2UtcmVwb3NpdG9yeT8KKyAgICAgICAgICAgIGNhYmFsLXNv dXJjZS1yZXBvc2l0b3J5LXVzZS1jYXNlCisgICAgICAgICAgICBjYWJhbC1zb3VyY2UtcmVwb3Np dG9yeS10eXBlCisgICAgICAgICAgICBjYWJhbC1zb3VyY2UtcmVwb3NpdG9yeS1sb2NhdGlvbgor CisgICAgICAgICAgICBjYWJhbC1mbGFnPworICAgICAgICAgICAgY2FiYWwtZmxhZy1uYW1lCisg ICAgICAgICAgICBjYWJhbC1mbGFnLWRlc2NyaXB0aW9uCisgICAgICAgICAgICBjYWJhbC1mbGFn LWRlZmF1bHQKKyAgICAgICAgICAgIGNhYmFsLWZsYWctbWFudWFsCisKKyAgICAgICAgICAgIGNh YmFsLWRlcGVuZGVuY3k/CisgICAgICAgICAgICBjYWJhbC1kZXBlbmRlbmN5LW5hbWUKKyAgICAg ICAgICAgIGNhYmFsLWRlcGVuZGVuY3ktdmVyc2lvbgorCisgICAgICAgICAgICBjYWJhbC1leGVj dXRhYmxlPworICAgICAgICAgICAgY2FiYWwtZXhlY3V0YWJsZS1uYW1lCisgICAgICAgICAgICBj YWJhbC1leGVjdXRhYmxlLWRlcGVuZGVuY2llcworCisgICAgICAgICAgICBjYWJhbC1saWJyYXJ5 PworICAgICAgICAgICAgY2FiYWwtbGlicmFyeS1kZXBlbmRlbmNpZXMKKworICAgICAgICAgICAg Y2FiYWwtdGVzdC1zdWl0ZT8KKyAgICAgICAgICAgIGNhYmFsLXRlc3Qtc3VpdGUtbmFtZQorICAg ICAgICAgICAgY2FiYWwtdGVzdC1zdWl0ZS1kZXBlbmRlbmNpZXMpKQorCis7OyBQYXJ0IDE6Cis7 OworOzsgRnVuY3Rpb25zIHVzZWQgdG8gcmVhZCBhIENhYmFsIGZpbGUuCisKKzs7IFRoaXMgcmVj b3JkIHN0b3JlcyB0aGUgc3RhdGUgaW5mb3JtYXRpb24gbmVlZGVkIGR1cmluZyBwYXJzaW5nIG9m IENhYmFsCis7OyBmaWxlcy4KKyhkZWZpbmUtcmVjb3JkLXR5cGUgIDxjYWJhbC1wYXJzZS1zdGF0 ZT4KKyAgKG1ha2UtY2FiYWwtcGFyc2Utc3RhdGUgbGluZXMgbWluaW11bS1pbmRlbnQgaW5kZW50 cyBjb25kaXRpb25hbHMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ1ZS1ncm91cD8gdHJ1 ZS1ncm91cCBmYWxzZS1ncm91cAorICAgICAgICAgICAgICAgICAgICAgICAgICB0cnVlLWdyb3Vw Py1zdGFjayB0cnVlLWdyb3VwLXN0YWNrIGZhbHNlLWdyb3VwLXN0YWNrKQorICBjYWJhbC1wYXJz ZS1zdGF0ZT8KKyAgKGxpbmVzIGNhYmFsLXBhcnNlLXN0YXRlLWxpbmVzKQorICAobWluaW11bS1p bmRlbnQgY2FiYWwtcGFyc2Utc3RhdGUtbWluaW11bS1pbmRlbnQpCisgIChpbmRlbnRzIGNhYmFs LXBhcnNlLXN0YXRlLWluZGVudHMpCisgIChjb25kaXRpb25hbHMgY2FiYWwtcGFyc2Utc3RhdGUt Y29uZGl0aW9uYWxzKQorICAodHJ1ZS1ncm91cD8gY2FiYWwtcGFyc2Utc3RhdGUtdHJ1ZS1ncm91 cD8pCisgICh0cnVlLWdyb3VwIGNhYmFsLXBhcnNlLXN0YXRlLXRydWUtZ3JvdXApCisgIChmYWxz ZS1ncm91cCBjYWJhbC1wYXJzZS1zdGF0ZS1mYWxzZS1ncm91cCkKKyAgKHRydWUtZ3JvdXA/LXN0 YWNrIGNhYmFsLXBhcnNlLXN0YXRlLXRydWUtZ3JvdXA/LXN0YWNrKQorICAodHJ1ZS1ncm91cC1z dGFjayBjYWJhbC1wYXJzZS1zdGF0ZS10cnVlLWdyb3VwLXN0YWNrKQorICAoZmFsc2UtZ3JvdXAt c3RhY2sgY2FiYWwtcGFyc2Utc3RhdGUtZmFsc2UtZ3JvdXAtc3RhY2spKQorCisoZGVmaW5lIGtl eS12YWx1ZS1yeAorICA7OyBSZWd1bGFyIGV4cHJlc3Npb24gbWF0Y2hpbmcgImtleTogdmFsdWUi CisgIChtYWtlLXJlZ2V4cCAiKFthLXpBLVowLTktXSspOlsgXHRdKihcXHc/LiopJCIpKQorCiso ZGVmaW5lIGNvbW1lbnQtcngKKyAgOzsgUmVnZXhwIG1hdGNoaW5nIENhYmFsIGNvbW1lbnQgbGlu ZXMuCisgIChtYWtlLXJlZ2V4cCAiXiAqLS0iKSkKKworKGRlZmluZSAoaGFzLWtleT8gbGluZSkK KyAgIkNoZWNrIGlmIExJTkUgaW5jbHVkZXMgYSBrZXkuIgorICAocmVnZXhwLWV4ZWMga2V5LXZh bHVlLXJ4IGxpbmUpKQorCisoZGVmaW5lIChjb21tZW50LWxpbmU/IGxpbmUpCisgICJDaGVjayBp ZiBMSU5FIGlzIGEgY29tbWVudCBsaW5lLiIKKyAgKHJlZ2V4cC1leGVjIGNvbW1lbnQtcnggbGlu ZSkpCisKKyhkZWZpbmUgKGxpbmUtaW5kZW50YXRpb24rcmVzdCBsaW5lKQorICAiUmV0dXJucyB0 d28gcmVzdWx0czogVGhlIG51bWJlciBvZiBpbmRlbnRhdGlvbiBzcGFjZXMgYW5kIHRoZSByZXN0 IG9mCitMSU5FICh3aXRob3V0IGluZGVudGF0aW9uKS4iCisgIChsZXQgbG9vcCAoKGxpbmUtbHN0 IChzdHJpbmctPmxpc3QgbGluZSkpCisgICAgICAgICAgICAgKGNvdW50IDApKQorICAgIDs7IFNv bWV0aW1lcyB2YWx1ZXMgYXJlIHNwcmVhZCBvdmVyIG11bHRpcGxlIGxpbmVzIGFuZCBuZXcgbGlu ZXMgc3RhcnQKKyAgICA7OyB3aXRoIGEgY29tbWEgJywnIHdpdGggdGhlIHdyb25nIGluZGVudGF0 aW9uLiAgU2VlIGUuZy4gaGFkZG9jay1hcGkuCisgICAgKGlmIChvciAobnVsbD8gbGluZS1sc3Qp CisgICAgICAgICAgICAobm90IChvcgorICAgICAgICAgICAgICAgICAgKGVxdj8gKGZpcnN0IGxp bmUtbHN0KSAjXHNwYWNlKQorICAgICAgICAgICAgICAgICAgKGVxdj8gKGZpcnN0IGxpbmUtbHN0 KSAjXCwpCisgICAgICAgICAgICAgICAgICAoZXF2PyAoZmlyc3QgbGluZS1sc3QpICNcdGFiKSkp KQorICAgICAgICAodmFsdWVzIGNvdW50IChsaXN0LT5zdHJpbmcgbGluZS1sc3QpKQorICAgICAg ICAobG9vcCAoY2RyIGxpbmUtbHN0KSAoKyBjb3VudCAxKSkpKSkKKworKGRlZmluZSAobXVsdGkt bGluZS12YWx1ZSBsaW5lcyBzZWVkKQorICAiRnVuY3Rpb24gdG8gcmVhZCBhIHZhbHVlIHNwbGl0 IGFjcm9zcyBtdWx0aXBsZSBsaW5lcy4gTElORVMgYXJlIHRoZQorcmVtYWluaW5nIGlucHV0IGxp bmVzIHRvIGJlIHJlYWQuICBTRUVEIGlzIHRoZSB2YWx1ZSByZWFkIG9uIHRoZSBzYW1lIGxpbmUg YXMKK3RoZSBrZXkuICBSZXR1cm4gdHdvIHZhbHVlczogQSBsaXN0IHdpdGggdGhlIHZhbHVlcyBh bmQgdGhlIHJlbWFpbmluZyBsaW5lcyB0bworYmUgcHJvY2Vzc2VkLiIKKyAgKGRlZmluZSAobXVs dGktbGluZS12YWx1ZS13aXRoLW1pbi1pbmRlbnQgbGluZXMgc2VlZCBtaW4taW5kZW50KQorICAg IChpZiAobnVsbD8gbGluZXMpCisgICAgICAgICh2YWx1ZXMgJygpICcoKSkKKyAgICAgICAgKGxl dC12YWx1ZXMgKCgoY3VycmVudC1pbmRlbnQgdmFsdWUpIChsaW5lLWluZGVudGF0aW9uK3Jlc3Qg KGZpcnN0IGxpbmVzKSkpCisgICAgICAgICAgICAgICAgICAgICAoKG5leHQtbGluZS1pbmRlbnQg bmV4dC1saW5lLXZhbHVlKQorICAgICAgICAgICAgICAgICAgICAgIChpZiAobnVsbD8gKGNkciBs aW5lcykpCisgICAgICAgICAgICAgICAgICAgICAgICAgICh2YWx1ZXMgI2YgIiIpCisgICAgICAg ICAgICAgICAgICAgICAgICAgIChsaW5lLWluZGVudGF0aW9uK3Jlc3QgKHNlY29uZCBsaW5lcykp KSkpCisgICAgICAgICAgKGlmIChvciAobm90IG5leHQtbGluZS1pbmRlbnQpICg8IG5leHQtbGlu ZS1pbmRlbnQgbWluLWluZGVudCkKKyAgICAgICAgICAgICAgICAgIChyZWdleHAtZXhlYyBjb25k aXRpb24tcnggbmV4dC1saW5lLXZhbHVlKSkKKyAgICAgICAgICAgICAgKHZhbHVlcyAocmV2ZXJz ZSAoY29ucyB2YWx1ZSBzZWVkKSkgKGNkciBsaW5lcykpCisgICAgICAgICAgICAgIChtdWx0aS1s aW5lLXZhbHVlLXdpdGgtbWluLWluZGVudCAoY2RyIGxpbmVzKSAoY29ucyB2YWx1ZSBzZWVkKQor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWluLWluZGVu dCkpKSkpCisKKyAgKGxldC12YWx1ZXMgKCgoY3VycmVudC1pbmRlbnQgdmFsdWUpIChsaW5lLWlu ZGVudGF0aW9uK3Jlc3QgKGZpcnN0IGxpbmVzKSkpKQorICAgIChtdWx0aS1saW5lLXZhbHVlLXdp dGgtbWluLWluZGVudCBsaW5lcyBzZWVkIGN1cnJlbnQtaW5kZW50KSkpCisKKyhkZWZpbmUgKHJl YWQtYW5kLXRyaW0tbGluZSBwb3J0KQorICAobGV0ICgobGluZSAocmVhZC1saW5lIHBvcnQpKSkK KyAgICAoaWYgKHN0cmluZz8gbGluZSkKKyAgICAgICAgKHN0cmluZy10cmltLWJvdGggbGluZSAj XHJldHVybikKKyAgICAgICAgbGluZSkpKQorCisoZGVmaW5lIChzdHJpcC1pbnNpZ25pZmljYW50 LWxpbmVzIHBvcnQpCisgIChsZXQgbG9vcCAoKGxpbmUgKHJlYWQtYW5kLXRyaW0tbGluZSBwb3J0 KSkKKyAgICAgICAgICAgICAocmVzdWx0ICcoKSkpCisgICAgKGNvbmQKKyAgICAgKChlb2Ytb2Jq ZWN0PyBsaW5lKQorICAgICAgKHJldmVyc2UgcmVzdWx0KSkKKyAgICAgKChvciAoc3RyaW5nLW51 bGw/IGxpbmUpIChjb21tZW50LWxpbmU/IGxpbmUpKQorICAgICAgKGxvb3AgKHJlYWQtYW5kLXRy aW0tbGluZSBwb3J0KSByZXN1bHQpKQorICAgICAoZWxzZQorICAgICAgKGxvb3AgKHJlYWQtYW5k LXRyaW0tbGluZSBwb3J0KSAoY29ucyBsaW5lIHJlc3VsdCkpKSkpKQorCisoZGVmaW5lIChyZWFk LWNhYmFsIHBvcnQpCisgICJQYXJzZXMgYSBDYWJhbCBmaWxlIGZyb20gUE9SVC4gIFJldHVybiBh biBTLWV4cHJlc3Npb24gcmVwcmVzZW50aW5nIHRoZQorY29udGVudCBvZiB0aGUgZmlsZS4gIFdl IHRyeSBkbyBkZWR1Y2UgdGhlIENhYmFsIGZvcm1hdCBmcm9tIHRoZSBmb2xsb3dpbmcKK2RvY3Vt ZW50OiBodHRwczovL3d3dy5oYXNrZWxsLm9yZy9jYWJhbC91c2Vycy1ndWlkZS9kZXZlbG9waW5n LXBhY2thZ2VzLmh0bWwuCitLZXlzIGFyZSBjYXNlLWluc2Vuc2l0aXZlLiAgV2UgdGhlcmVmb3Jl IGxvd2VyY2FzZSB0aGVtLiAgVmFsdWVzIGFyZQorY2FzZS1zZW5zaXRpdmUuICBDdXJyZW50bHkg b25seSBpbmRlbnRhdGlvbi1zdHJ1Y3R1cmVkIGZpbGVzIGFyZSBwYXJzZWQuCitCcmFjZXMgc3Ry dWN0dXJlZCBmaWxlcyBhcmUgbm90IGhhbmRsZWQuIgorICAobGV0ICgobGluZXMgKHN0cmlwLWlu c2lnbmlmaWNhbnQtbGluZXMgcG9ydCkpKQorICAgIChjYWxsLXdpdGgtdmFsdWVzCisgICAgICAg IChsYW1iZGEgKCkKKyAgICAgICAgICAocnVuLXdpdGgtc3RhdGUgKHBhcnNlLWNhYmFsICcoKSkK KyAgICAgICAgICAgIChtYWtlLWNhYmFsLXBhcnNlLXN0YXRlIGxpbmVzIC0xICcoKSAnKCkgI3Qg JygpICcoKSAnKCkgJygpICcoKSkpKQorICAgICAgKGxhbWJkYSAocmVzdWx0IHN0YXRlKSByZXN1 bHQpKSkpCisKKyhkZWZpbmUgKHBhcnNlLWNhYmFsIHJlc3VsdCkKKyAgIlBhcnNlIGEgQ2FiYWwg ZmlsZSBhbmQgYXBwZW5kIGl0cyBjb250ZW50IHRvIFJFU1VMVCAoYSBsaXN0KS4gIFJldHVybiB0 aGUKK3VwZGF0ZWQgcmVzdWx0IGFzIGEgbW9uYWRpYyB2YWx1ZSBpbiB0aGUgc3RhdGUgbW9uYWQu IgorICAobWxldCogJXN0YXRlLW1vbmFkICgoc3RhdGUgKGN1cnJlbnQtc3RhdGUpKSkKKyAgICAo bWF0Y2ggc3RhdGUKKyAgICAgICgoJCA8Y2FiYWwtcGFyc2Utc3RhdGU+IGxpbmVzIG1pbmltdW0t aW5kZW50IGluZGVudHMgY29uZGl0aW9uYWxzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICB0cnVlLWdyb3VwPyB0cnVlLWdyb3VwIGZhbHNlLWdyb3VwCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICB0cnVlLWdyb3VwPy1zdGFjayB0cnVlLWdyb3VwLXN0YWNrCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBmYWxzZS1ncm91cC1zdGFjaykKKyAgICAgICAobGV0Ki12YWx1 ZXMKKyAgICAgICAgICAgKCgoY3VycmVudC1pbmRlbnQgbGluZSkKKyAgICAgICAgICAgICAoaWYg KG51bGw/IGxpbmVzKQorICAgICAgICAgICAgICAgICAodmFsdWVzIDAgIiIpCisgICAgICAgICAg ICAgICAgIChsaW5lLWluZGVudGF0aW9uK3Jlc3QgKGZpcnN0IGxpbmVzKSkpKQorICAgICAgICAg ICAgKChuZXh0LWxpbmUtaW5kZW50IG5leHQtbGluZSkKKyAgICAgICAgICAgICAoaWYgKG9yIChu dWxsPyBsaW5lcykgKG51bGw/IChjZHIgbGluZXMpKSkKKyAgICAgICAgICAgICAgICAgKHZhbHVl cyAwICIiKQorICAgICAgICAgICAgICAgICAobGluZS1pbmRlbnRhdGlvbityZXN0IChzZWNvbmQg bGluZXMpKSkpCisgICAgICAgICAgICAoKGtleS12YWx1ZS1yeC1yZXN1bHQpIChoYXMta2V5PyBs aW5lKSkKKyAgICAgICAgICAgICgoZW5kLW9mLWZpbGU/KSAobnVsbD8gbGluZXMpKQorICAgICAg ICAgICAgKChpcy1zaW1wbGUta2V5LXZhbHVlPykgKGFuZCAoPSBuZXh0LWxpbmUtaW5kZW50IGN1 cnJlbnQtaW5kZW50KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBr ZXktdmFsdWUtcngtcmVzdWx0KSkKKyAgICAgICAgICAgICgoaXMtbXVsdGktbGluZS1rZXktdmFs dWU/KSAoYW5kICg+IG5leHQtbGluZS1pbmRlbnQgY3VycmVudC1pbmRlbnQpCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXktdmFsdWUtcngtcmVzdWx0KSkK KyAgICAgICAgICAgICgoa2V5KSAoYW5kPT4ga2V5LXZhbHVlLXJ4LXJlc3VsdAorICAgICAgICAg ICAgICAgICAgICAgICAgICAobGFtYmRhIChyeC1yZXMpCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgKHN0cmluZy1kb3duY2FzZSAobWF0Y2g6c3Vic3RyaW5nIHJ4LXJlcyAxKSkpKSkKKyAg ICAgICAgICAgICgodmFsdWUpIChhbmQ9PiBrZXktdmFsdWUtcngtcmVzdWx0IChjdXQgbWF0Y2g6 c3Vic3RyaW5nIDw+IDIpKSkpCisgICAgICAgICAoY29uZAorICAgICAgICAgIChlbmQtb2YtZmls ZT8gKHJldHVybiAocmV2ZXJzZSByZXN1bHQpKSkKKyAgICAgICAgICAoaXMtc2ltcGxlLWtleS12 YWx1ZT8KKyAgICAgICAgICAgKD4+PSAoc3RhdGUtYWRkLWVudHJ5IChsaXN0IGtleSBgKCx2YWx1 ZSkpIHJlc3VsdCAoY2RyIGxpbmVzKSkKKyAgICAgICAgICAgICAgICBwYXJzZS1jYWJhbCkpCisg ICAgICAgICAgKGlzLW11bHRpLWxpbmUta2V5LXZhbHVlPworICAgICAgICAgICAobGV0Ki12YWx1 ZXMgCisgICAgICAgICAgICAgICAoKCh2YWx1ZS1sc3QgbGluZXMpCisgICAgICAgICAgICAgICAg IChtdWx0aS1saW5lLXZhbHVlIChjZHIgbGluZXMpCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIChpZiAoc3RyaW5nLW51bGw/IHZhbHVlKSAnKCkgYCgsdmFsdWUpKSkpKQorICAg ICAgICAgICAgICg+Pj0gKHN0YXRlLWFkZC1lbnRyeSAobGlzdCBrZXkgdmFsdWUtbHN0KSByZXN1 bHQgbGluZXMpCisgICAgICAgICAgICAgICAgICBwYXJzZS1jYWJhbCkpKQorICAgICAgICAgIChl bHNlIDsgaXQncyBhIHNlY3Rpb24KKyAgICAgICAgICAgKGxldCogKChzZWN0aW9uLWhlYWRlciAo c3RyaW5nLXRva2VuaXplIChzdHJpbmctZG93bmNhc2UgbGluZSkpKQorICAgICAgICAgICAgICAg ICAgKHNlY3Rpb24tdHlwZSAoc3RyaW5nLT5zeW1ib2wgKGZpcnN0IHNlY3Rpb24taGVhZGVyKSkp CisgICAgICAgICAgICAgICAgICAoc2VjdGlvbi1uYW1lIChpZiAoPiAobGVuZ3RoIHNlY3Rpb24t aGVhZGVyKSAxKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzZWNvbmQg c2VjdGlvbi1oZWFkZXIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiIp KSkKKyAgICAgICAgICAgICAobWJlZ2luICVjdXJyZW50LW1vbmFkCisgICAgICAgICAgICAgICAo c2V0LWN1cnJlbnQtc3RhdGUgCisgICAgICAgICAgICAgICAgKHNldC1maWVsZHMgc3RhdGUKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAoKGNhYmFsLXBhcnNlLXN0YXRlLW1pbmltdW0taW5k ZW50KSBjdXJyZW50LWluZGVudCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKGNhYmFs LXBhcnNlLXN0YXRlLWxpbmVzKSAoY2RyIGxpbmVzKSkpKQorICAgICAgICAgICAgICAgKD4+PQor ICAgICAgICAgICAgICAgICg+Pj0gKHBhcnNlLWNhYmFsLXNlY3Rpb24gJygpKQorICAgICAgICAg ICAgICAgICAgICAgKGxhbWJkYSAoc2VjdGlvbi1jb250ZW50cykKKyAgICAgICAgICAgICAgICAg ICAgICAgKG1sZXQqICVzdGF0ZS1tb25hZCAoKHN0YXRlIChjdXJyZW50LXN0YXRlKSkpCisgICAg ICAgICAgICAgICAgICAgICAgICAgKG1iZWdpbiAlY3VycmVudC1tb25hZAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgKHNldC1jdXJyZW50LXN0YXRlCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgKHNldC1maWVsZHMgc3RhdGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAoKGNhYmFsLXBhcnNlLXN0YXRlLW1pbmltdW0taW5kZW50KSAtMSkpKQorICAgICAg ICAgICAgICAgICAgICAgICAgICAgKHJldHVybiAKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAoY29ucyAoYXBwZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpZiAo c3RyaW5nLW51bGw/IHNlY3Rpb24tbmFtZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIChsaXN0ICdzZWN0aW9uIHNlY3Rpb24tdHlwZSkKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIChsaXN0ICdzZWN0aW9uIHNlY3Rpb24tdHlwZSBzZWN0aW9u LW5hbWUpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGlzdCBzZWN0aW9u LWNvbnRlbnRzKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQpKSkp KSkKKyAgICAgICAgICAgICAgICBwYXJzZS1jYWJhbCkpKSkpKSkpKSkKKworKGRlZmluZSAocGFy c2UtY2FiYWwtc2VjdGlvbiByZXN1bHQpCisgICJQYXJzZSBhIHNlY3Rpb24gb2YgYSBjYWJhbCBm aWxlIGFuZCBhcHBlbmQgaXRzIGNvbnRlbnQgdG8gUkVTVUxUIChhIGxpc3QpLgorUmV0dXJuIHRo ZSB1cGRhdGVkIHJlc3VsdCBhcyBhIHZhbHVlIGluIHRoZSBzdGF0ZSBtb25hZC4iCisgIChtbGV0 KiAlc3RhdGUtbW9uYWQgKChzdGF0ZSAoY3VycmVudC1zdGF0ZSkpKQorICAgIChtYXRjaCBzdGF0 ZQorICAgICAgKCgkIDxjYWJhbC1wYXJzZS1zdGF0ZT4gbGluZXMgbWluaW11bS1pbmRlbnQgaW5k ZW50cyBjb25kaXRpb25hbHMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRydWUtZ3Jv dXA/IHRydWUtZ3JvdXAgZmFsc2UtZ3JvdXAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHRydWUtZ3JvdXA/LXN0YWNrIHRydWUtZ3JvdXAtc3RhY2sKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGZhbHNlLWdyb3VwLXN0YWNrKQorICAgICAgIChsZXQqLXZhbHVlcworICAgICAg ICAgICAoKChjdXJyZW50LWluZGVudCBsaW5lKQorICAgICAgICAgICAgIChpZiAobnVsbD8gbGlu ZXMpCisgICAgICAgICAgICAgICAgICh2YWx1ZXMgMCAiIikKKyAgICAgICAgICAgICAgICAgKGxp bmUtaW5kZW50YXRpb24rcmVzdCAoZmlyc3QgbGluZXMpKSkpCisgICAgICAgICAgICAoKG5leHQt bGluZS1pbmRlbnQgbmV4dC1saW5lKQorICAgICAgICAgICAgIChpZiAob3IgKG51bGw/IGxpbmVz KSAobnVsbD8gKGNkciBsaW5lcykpKQorICAgICAgICAgICAgICAgICAodmFsdWVzIDAgIiIpCisg ICAgICAgICAgICAgICAgIChsaW5lLWluZGVudGF0aW9uK3Jlc3QgKHNlY29uZCBsaW5lcykpKSkK KyAgICAgICAgICAgICgoa2V5LXZhbHVlLXJ4LXJlc3VsdCkgKGhhcy1rZXk/IGxpbmUpKQorICAg ICAgICAgICAgKChlbmQtb2Ytc2VjdGlvbj8pIChvciAoPD0gY3VycmVudC1pbmRlbnQgbWluaW11 bS1pbmRlbnQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChudWxsPyBsaW5l cykpKQorICAgICAgICAgICAgOzsgSWYgdGhpcyBpcyB0aGUgbGFzdCBsaW5lIG9mIHRoZSBzZWN0 aW9uLCB0aGVuIGl0IGNhbid0IGJlIHRoZQorICAgICAgICAgICAgOzsgc3RhcnQgb2YgYSBjb25k aXRpb25hbCBvciBhbiAnZWxzZScuCisgICAgICAgICAgICAoKGxhc3QtbGluZS1vZi1zZWN0aW9u PykgKDw9IG5leHQtbGluZS1pbmRlbnQgbWluaW11bS1pbmRlbnQpKQorICAgICAgICAgICAgKChp cy1zaW1wbGUta2V5LXZhbHVlPykgKG9yIChhbmQgKD0gbmV4dC1saW5lLWluZGVudCBjdXJyZW50 LWluZGVudCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtl eS12YWx1ZS1yeC1yZXN1bHQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgKGFuZCAocGFpcj8gY29uZGl0aW9uYWxzKQorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgKD0gbmV4dC1saW5lLWluZGVudCAoZmlyc3QgaW5kZW50cykpCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc3RyaW5nLXByZWZp eD8gImVsc2UiIG5leHQtbGluZSkpKSkKKyAgICAgICAgICAgICgoaXMtbXVsdGktbGluZS1rZXkt dmFsdWU/KSAoYW5kICg+IG5leHQtbGluZS1pbmRlbnQgY3VycmVudC1pbmRlbnQpCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXktdmFsdWUtcngtcmVzdWx0 KSkKKyAgICAgICAgICAgICgoZW5kLW9mLWNvbmQ/KQorICAgICAgICAgICAgIChhbmQgKHBhaXI/ IGNvbmRpdGlvbmFscykKKyAgICAgICAgICAgICAgICAgIChvciAoYW5kICg9IG5leHQtbGluZS1p bmRlbnQgKGZpcnN0IGluZGVudHMpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgKG5vdCAo c3RyaW5nLXByZWZpeD8gImVsc2UiIG5leHQtbGluZSkpKQorICAgICAgICAgICAgICAgICAgICAg ICg8IG5leHQtbGluZS1pbmRlbnQgKGZpcnN0IGluZGVudHMpKSkpKQorICAgICAgICAgICAgKChp cy1lbHNlPykgKGFuZCAocGFpcj8gY29uZGl0aW9uYWxzKQorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAoPSBjdXJyZW50LWluZGVudCAoZmlyc3QgaW5kZW50cykpCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIChzdHJpbmctcHJlZml4PyAiZWxzZSIgbGluZSkpKQorICAgICAgICAg ICAgKChjb25kaXRpb24pIChjYWJhbC1jb25kaXRpb25hbC1saW5lLT5zZXhwIGxpbmUpKQorICAg ICAgICAgICAgKChrZXkpIChhbmQ9PiBrZXktdmFsdWUtcngtcmVzdWx0CisgICAgICAgICAgICAg ICAgICAgICAgICAgIChsYW1iZGEgKHJ4LXJlcykKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAoc3RyaW5nLWRvd25jYXNlIChtYXRjaDpzdWJzdHJpbmcgcngtcmVzIDEpKSkpKQorICAgICAg ICAgICAgKCh2YWx1ZSkgKGFuZD0+IGtleS12YWx1ZS1yeC1yZXN1bHQKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAoY3V0IG1hdGNoOnN1YnN0cmluZyA8PiAyKSkpKQorICAgICAgICAgKGNv bmQKKyAgICAgICAgICAoZW5kLW9mLXNlY3Rpb24/CisgICAgICAgICAgIChpZiAocGFpcj8gaW5k ZW50cykKKyAgICAgICAgICAgICAgIChzdGF0ZS1yZWR1Y2UtaW5kZW50YXRpb24gKDEtIChsZW5n dGggaW5kZW50cykpICNmIHJlc3VsdCBsaW5lcykKKyAgICAgICAgICAgICAgIChyZXR1cm4gcmVz dWx0KSkpCisgICAgICAgICAgKGxhc3QtbGluZS1vZi1zZWN0aW9uPworICAgICAgICAgICAoaWYg KHBhaXI/IGluZGVudHMpCisgICAgICAgICAgICAgICAoc3RhdGUtcmVkdWNlLWluZGVudGF0aW9u CisgICAgICAgICAgICAgICAgKDEtIChsZW5ndGggaW5kZW50cykpIChsaXN0IGtleSBgKCx2YWx1 ZSkpIHJlc3VsdCAoY2RyIGxpbmVzKSkKKyAgICAgICAgICAgICAgIChtYmVnaW4gJWN1cnJlbnQt bW9uYWQKKyAgICAgICAgICAgICAgICAgKHNldC1jdXJyZW50LXN0YXRlIAorICAgICAgICAgICAg ICAgICAgKHNldC1maWVsZHMgc3RhdGUgKChjYWJhbC1wYXJzZS1zdGF0ZS1saW5lcykgKGNkciBs aW5lcykpKSkKKyAgICAgICAgICAgICAgICAgKHJldHVybiAoY29ucyAobGlzdCBrZXkgYCgsdmFs dWUpKSByZXN1bHQpKSkpKQorICAgICAgICAgIChpcy1zaW1wbGUta2V5LXZhbHVlPworICAgICAg ICAgICAoPj49IChzdGF0ZS1hZGQtZW50cnkgKGxpc3Qga2V5IGAoLHZhbHVlKSkgcmVzdWx0IChj ZHIgbGluZXMpKQorICAgICAgICAgICAgICAgIHBhcnNlLWNhYmFsLXNlY3Rpb24pKQorICAgICAg ICAgIChpcy1tdWx0aS1saW5lLWtleS12YWx1ZT8KKyAgICAgICAgICAgKGxldCotdmFsdWVzCisg ICAgICAgICAgICAgICA7OyBWQUxVRS1MU1QgaXMgdGhlIGZ1bGwgbXVsdGktbGluZSB2YWx1ZSBh bmQgTElORVMgYXJlIHRoZQorICAgICAgICAgICAgICAgOzsgcmVtYWluaW5nIGxpbmVzIHRvIGJl IHBhcnNlZCAoZnJvbSB0aGUgbGluZSBmb2xsb3dpbmcgdGhlCisgICAgICAgICAgICAgICA7OyBt dWx0aS1saW5lIHZhbHVlKS4gIFdlIG5lZWQgdG8gY2hlY2sgaWYgd2UgYXJlIGF0IHRoZSBlbmQg b2YKKyAgICAgICAgICAgICAgIDs7IGEgY29uZGl0aW9uYWwgb3IgYXQgdGhlIGVuZCBvZiB0aGUg c2VjdGlvbi4KKyAgICAgICAgICAgICAgICgoKHZhbHVlLWxzdCBsaW5lcykKKyAgICAgICAgICAg ICAgICAgKG11bHRpLWxpbmUtdmFsdWUgKGNkciBsaW5lcykKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgKGlmIChzdHJpbmctbnVsbD8gdmFsdWUpICcoKSBgKCx2YWx1ZSkpKSkK KyAgICAgICAgICAgICAgICAoKGluZCBsaW5lKSAoaWYgKG51bGw/IGxpbmVzKQorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAodmFsdWVzIDAgIiIpCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIChsaW5lLWluZGVudGF0aW9uK3Jlc3QgKGZpcnN0IGxpbmVzKSkpKQorICAg ICAgICAgICAgICAgICgoZW5kLW9mLWNvbmQ/KSAoYW5kIChwYWlyPyBjb25kaXRpb25hbHMpCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG9yIChhbmQgKD0gaW5kIChmaXJz dCBpbmRlbnRzKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAobm90IChzdHJpbmctcHJlZml4PyAiZWxzZSIgbGluZSkpKQorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAoPCBpbmQgKGZpcnN0IGluZGVudHMpKSkpKQorICAgICAg ICAgICAgICAgIDs7IElmIElORCBpcyBub3QgaW4gSU5ERU5UUywgYXNzdW1lIHRoYXQgd2UgYXJl IGF0IHRoZSBlbmQgb2YKKyAgICAgICAgICAgICAgICA7OyB0aGUgc2VjdGlvbi4KKyAgICAgICAg ICAgICAgICAoKGlkeCkgKG9yIChhbmQ9PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIChs aXN0LWluZGV4IChjdXQgPSBpbmQgPD4pIGluZGVudHMpCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgKGN1dCArIDw+IChpZiAoc3RyaW5nLXByZWZpeD8gImVsc2UiIGxpbmUpIC0xIDApKSkK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICgxLSAobGVuZ3RoIGluZGVudHMpKSkpKQorICAg ICAgICAgICAgIChpZiBlbmQtb2YtY29uZD8KKyAgICAgICAgICAgICAgICAgKD4+PSAoc3RhdGUt cmVkdWNlLWluZGVudGF0aW9uIGlkeCAobGlzdCBrZXkgdmFsdWUtbHN0KQorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0IGxpbmVzKQorICAgICAg ICAgICAgICAgICAgICAgIHBhcnNlLWNhYmFsLXNlY3Rpb24pCisgICAgICAgICAgICAgICAgICg+ Pj0gKHN0YXRlLWFkZC1lbnRyeSAobGlzdCBrZXkgdmFsdWUtbHN0KSByZXN1bHQgbGluZXMpCisg ICAgICAgICAgICAgICAgICAgICAgcGFyc2UtY2FiYWwtc2VjdGlvbikpKSkKKyAgICAgICAgICAo ZW5kLW9mLWNvbmQ/CisgICAgICAgICAgIChsZXQgKChpZHggKCsgKGxpc3QtaW5kZXggKGN1dCA9 IG5leHQtbGluZS1pbmRlbnQgPD4pIGluZGVudHMpCisgICAgICAgICAgICAgICAgICAgICAgICAg KGlmIChzdHJpbmctcHJlZml4PyAiZWxzZSIgbmV4dC1saW5lKSAtMSAwKSkpKQorICAgICAgICAg ICAgICg+Pj0gKHN0YXRlLXJlZHVjZS1pbmRlbnRhdGlvbiBpZHggKGxpc3Qga2V5IGAoLHZhbHVl KSkgcmVzdWx0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpZiAo cGFpcj8gbGluZXMpIChjZHIgbGluZXMpICcoKSkpCisgICAgICAgICAgICAgICAgICBwYXJzZS1j YWJhbC1zZWN0aW9uKSkpCisgICAgICAgICAgKGlzLWVsc2U/CisgICAgICAgICAgIChtYmVnaW4g JWN1cnJlbnQtbW9uYWQKKyAgICAgICAgICAgICAoc2V0LWN1cnJlbnQtc3RhdGUgCisgICAgICAg ICAgICAgIChzZXQtZmllbGRzIHN0YXRlCisgICAgICAgICAgICAgICAgICAgICAgICAgICgoY2Fi YWwtcGFyc2Utc3RhdGUtbGluZXMpIChjZHIgbGluZXMpKQorICAgICAgICAgICAgICAgICAgICAg ICAgICAoKGNhYmFsLXBhcnNlLXN0YXRlLXRydWUtZ3JvdXA/KSAjZikpKQorICAgICAgICAgICAg IChwYXJzZS1jYWJhbC1zZWN0aW9uIHJlc3VsdCkpKQorICAgICAgICAgIChjb25kaXRpb24KKyAg ICAgICAgICAgKG1iZWdpbiAlY3VycmVudC1tb25hZAorICAgICAgICAgICAgIChzdGF0ZS1hZGQt Y29uZGl0aW9uYWwgY29uZGl0aW9uIGN1cnJlbnQtaW5kZW50KQorICAgICAgICAgICAgIChwYXJz ZS1jYWJhbC1zZWN0aW9uIHJlc3VsdCkpKSkpKSkpKQorCisoZGVmaW5lIChzdGF0ZS1yZWR1Y2Ut aW5kZW50YXRpb24gaW5kZXggZW50cnkgcmVzdWx0IGxpbmVzKQorICAiR2l2ZW4gUkVTVUxULCBp ZiBFTlRSWSBpcyBub3QgI2YsIGFkZCBpdCBhcyBhcHByb3ByaWF0ZSBhbmQgcmV0dXJuIHRoZQor dXBkYXRlZCByZXN1bHQgYXMgYSB2YWx1ZSBpbiB0aGUgc3RhdGUgbW9uYWQuICBVcGRhdGUgdGhl IHN0YXRlIGFjY29yZGluZyB0bwordGhlIHJlZHVjdGlvbiBvZiB0aGUgaW5kZW50YXRpb24gbGV2 ZWwgc3BlY2lmaWVkIGJ5IElOREVYLCBhbiBpbmRleCBvZiBhbgorZW50cnkgaW4gdGhlICdpbmRl bnRhdGlvbnMnIGZpZWxkIG9mIHRoZSBzdGF0ZS4gIEFzIGFuIGV4YW1wbGUsIGlmIHRoZXJlIGFy ZQordHdvIG5lc3RlZCBjb25kaXRpb25hbCBsZXZlbHMsIHRoZSBmaXJzdCBzdGFydGluZyBhdCBp bmRlbnRhdGlvbiAyIGFuZCB0aGUKK3NlY29uZCBhdCBpbmRlbnRhdGlvbiA0LCB0aGVuIHRoZSAn aW5kZW50YXRpb25zJyBmaWVsZCBvZiBzdGF0ZSBpcyAnKDQgMikgYW5kCithbiBJTkRFWCB2YWx1 ZSBvZiAwIG1lYW5zIHRoYXQgdGhlIHNlY29uZCBjb25kaXRpb25hbCBpcyBmaW5pc2hlZC4gIFNl dCB0aGUKK3JlbWFpbmluZyBsaW5lcyB0byBiZSBwYXJzZWQgdG8gTElORVMuIgorICAobGFtYmRh IChzdGF0ZSkKKyAgICAobWF0Y2ggc3RhdGUKKyAgICAgICgoJCA8Y2FiYWwtcGFyc2Utc3RhdGU+ IF8gbWluaW11bS1pbmRlbnQgaW5kZW50cyBjb25kaXRpb25hbHMKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHRydWUtZ3JvdXA/IHRydWUtZ3JvdXAgZmFsc2UtZ3JvdXAKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHRydWUtZ3JvdXA/LXN0YWNrIHRydWUtZ3JvdXAtc3RhY2sK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhbHNlLWdyb3VwLXN0YWNrKQorICAgICAg IDs7IFRoZSBzdWZmaXggJy1kJyBzdGF5cyBmb3IgJ2Ryb3AnLgorICAgICAgIChsZXQqLXZhbHVl cyAoKChpbmRzLWQgaW5kcykgKHNwbGl0LWF0IGluZGVudHMgKDErIGluZGV4KSkpCisgICAgICAg ICAgICAgICAgICAgICAoKGNvbmRzLWQgY29uZHMpIChzcGxpdC1hdCBjb25kaXRpb25hbHMgKDEr IGluZGV4KSkpCisgICAgICAgICAgICAgICAgICAgICAoKHQtZz8tcy1kIHQtZz8tcykKKyAgICAg ICAgICAgICAgICAgICAgICAoaWYgKD4gKGxlbmd0aCB0cnVlLWdyb3VwPy1zdGFjaykgaW5kZXgp CisgICAgICAgICAgICAgICAgICAgICAgICAgIChzcGxpdC1hdCB0cnVlLWdyb3VwPy1zdGFjayAo MSsgaW5kZXgpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAodmFsdWVzIHRydWUtZ3JvdXA/ LXN0YWNrICcoKSkpKQorICAgICAgICAgICAgICAgICAgICAgKCh0LWctcy1kIHQtZy1zKQorICAg ICAgICAgICAgICAgICAgICAgIChpZiAoPiAobGVuZ3RoIHRydWUtZ3JvdXAtc3RhY2spIGluZGV4 KQorICAgICAgICAgICAgICAgICAgICAgICAgICAoc3BsaXQtYXQgdHJ1ZS1ncm91cC1zdGFjayAo MSsgaW5kZXgpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAodmFsdWVzIHRydWUtZ3JvdXAt c3RhY2sgJygpKSkpCisgICAgICAgICAgICAgICAgICAgICAoKGYtZy1zLWQgZi1nLXMpCisgICAg ICAgICAgICAgICAgICAgICAgKGlmICg+IChsZW5ndGggZmFsc2UtZ3JvdXAtc3RhY2spIGluZGV4 KQorICAgICAgICAgICAgICAgICAgICAgICAgICAoc3BsaXQtYXQgZmFsc2UtZ3JvdXAtc3RhY2sg KDErIGluZGV4KSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKHZhbHVlcyBmYWxzZS1ncm91 cC1zdGFjayAnKCkpKSkKKyAgICAgICAgICAgICAgICAgICAgICgodC1nPykKKyAgICAgICAgICAg ICAgICAgICAgICAoaWYgKD4gKGxlbmd0aCB0cnVlLWdyb3VwPy1zdGFjaykgaW5kZXgpIAorICAg ICAgICAgICAgICAgICAgICAgICAgICAobGFzdCB0LWc/LXMtZCkgI3QpKQorICAgICAgICAgICAg ICAgICAgICAgKCh0LWcpIChpZiAoYW5kIHRydWUtZ3JvdXA/IGVudHJ5KQorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAoY29ucyBlbnRyeSB0cnVlLWdyb3VwKQorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICB0cnVlLWdyb3VwKSkKKyAgICAgICAgICAgICAgICAgICAgICgo Zi1nKSAoaWYgKG9yIHRydWUtZ3JvdXA/IChub3QgZW50cnkpKQorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBmYWxzZS1ncm91cAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAoY29ucyBlbnRyeSBmYWxzZS1ncm91cCkpKQorICAgICAgICAgICAgICAgICAgICAgKChyZXMp IHJlc3VsdCkpCisgICAgICAgICAobGV0IHJlZHVjZS1ieS1vbmUgKChjb25kcy1kIGNvbmRzLWQp ICh0LWcgdC1nKSAoZi1nIGYtZykgKHJlcyByZXMpCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICh0LWc/LXMtZCB0LWc/LXMtZCkgKHQtZy1zLWQgdC1nLXMtZCkgCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIChmLWctcy1kIGYtZy1zLWQpKQorICAgICAgICAgICAoY29uZAorICAg ICAgICAgICAgKChudWxsPyBjb25kcy1kKQorICAgICAgICAgICAgICh2YWx1ZXMgcmVzCisgICAg ICAgICAgICAgICAgICAgICAoc2V0LWZpZWxkcyBzdGF0ZQorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgKChjYWJhbC1wYXJzZS1zdGF0ZS1saW5lcykgbGluZXMpCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAoKGNhYmFsLXBhcnNlLXN0YXRlLWluZGVudHMpIGluZHMp CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKGNhYmFsLXBhcnNlLXN0YXRlLWNv bmRpdGlvbmFscykgY29uZHMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKGNh YmFsLXBhcnNlLXN0YXRlLXRydWUtZ3JvdXA/KSB0LWc/KQorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgKChjYWJhbC1wYXJzZS1zdGF0ZS10cnVlLWdyb3VwKSB0LWcpCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAoKGNhYmFsLXBhcnNlLXN0YXRlLWZhbHNlLWdyb3Vw KSBmLWcpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKGNhYmFsLXBhcnNlLXN0 YXRlLXRydWUtZ3JvdXA/LXN0YWNrKSB0LWc/LXMpCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAoKGNhYmFsLXBhcnNlLXN0YXRlLXRydWUtZ3JvdXAtc3RhY2spIHQtZy1zKQorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChjYWJhbC1wYXJzZS1zdGF0ZS1mYWxzZS1n cm91cC1zdGFjaykgZi1nLXMpKSkpCisgICAgICAgICAgICAoKG51bGw/IHQtZz8tcy1kKQorICAg ICAgICAgICAgIChyZWR1Y2UtYnktb25lIChjZHIgY29uZHMtZCkgJygpICcoKQorICAgICAgICAg ICAgICAgICAgICAgICAgICAgIChjb25zIGAoaWYgLChmaXJzdCBjb25kcy1kKSAsdC1nICxmLWcp IHJlcykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0LWc/LXMgdC1nLXMgZi1nLXMpKQor ICAgICAgICAgICAgKChmaXJzdCB0LWc/LXMtZCkKKyAgICAgICAgICAgICAocmVkdWNlLWJ5LW9u ZSAoY2RyIGNvbmRzLWQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnMgYChpZiAs KGZpcnN0IGNvbmRzLWQpICx0LWcgLGYtZykgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgKGZpcnN0IHQtZy1zLWQpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIChmaXJz dCBmLWctcy1kKSByZXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2RyIHQtZz8tcy1k KSAoY2RyIHQtZy1zLWQpIChjZHIgZi1nLXMtZCkpKQorICAgICAgICAgICAgKGVsc2UKKyAgICAg ICAgICAgICAocmVkdWNlLWJ5LW9uZSAoY2RyIGNvbmRzLWQpIChmaXJzdCB0LWctcy1kKQorICAg ICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zIGAoaWYgLChmaXJzdCBjb25kcy1kKSAsdC1n ICxmLWcpIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChmaXJzdCBmLWctcy1k KSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXMKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAoY2RyIHQtZz8tcy1kKSAoY2RyIHQtZy1zLWQpIChjZHIgZi1nLXMtZCkpKSkpKSkp KSkKKworKGRlZmluZSAoc3RhdGUtYWRkLWVudHJ5IGVudHJ5IHJlc3VsdCBsaW5lcykKKyAgIkdp dmVuIHRoZSBjdXJyZW50IFJFU1VMVCwgYWRkcyBFTlRSWSBhcyBhcHByb3ByaWF0ZS4gIFNldCB0 aGUgcmVtYWluaW5nCitsaW5lcyB0byBiZSBwYXJzZWQgdG8gTElORVMuICBSZXRydW4gdGhlIHVw ZGF0ZWQgcmVzdWx0IGFzIGEgdmFsdWUgaW4gdGhlCitzdGF0ZSBtb25hZC4iCisgIChsYW1iZGEg KHN0YXRlKQorICAgIChtYXRjaCBzdGF0ZQorICAgICAgKCgkIDxjYWJhbC1wYXJzZS1zdGF0ZT4g XyBtaW5pbXVtLWluZGVudCBpbmRlbnRzIGNvbmRpdGlvbmFscworICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgdHJ1ZS1ncm91cD8gdHJ1ZS1ncm91cCBmYWxzZS1ncm91cAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgdHJ1ZS1ncm91cD8tc3RhY2sgdHJ1ZS1ncm91cC1zdGFjawor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFsc2UtZ3JvdXAtc3RhY2spCisgICAgICAg KGNvbmQKKyAgICAgICAgKChudWxsPyBjb25kaXRpb25hbHMpCisgICAgICAgICAodmFsdWVzIChj b25zIGVudHJ5IHJlc3VsdCkKKyAgICAgICAgICAgICAgICAgKHNldC1maWVsZHMgc3RhdGUKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgKChjYWJhbC1wYXJzZS1zdGF0ZS1saW5lcykgbGlu ZXMpKSkpCisgICAgICAgICh0cnVlLWdyb3VwPworICAgICAgICAgKHZhbHVlcyByZXN1bHQKKyAg ICAgICAgICAgICAgICAgKHNldC1maWVsZHMgc3RhdGUKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgKChjYWJhbC1wYXJzZS1zdGF0ZS10cnVlLWdyb3VwKQorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgKGNvbnMgZW50cnkgdHJ1ZS1ncm91cCkpCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICgoY2FiYWwtcGFyc2Utc3RhdGUtbGluZXMpIGxpbmVzKSkpKQorICAgICAgICAo ZWxzZQorICAgICAgICAgKHZhbHVlcyByZXN1bHQKKyAgICAgICAgICAgICAgICAgKHNldC1maWVs ZHMgc3RhdGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChjYWJhbC1wYXJzZS1zdGF0 ZS1mYWxzZS1ncm91cCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zIGVudHJ5 IGZhbHNlLWdyb3VwKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChjYWJhbC1wYXJz ZS1zdGF0ZS1saW5lcykgbGluZXMpKSkpKSkpKSkKKworKGRlZmluZSAoc3RhdGUtYWRkLWNvbmRp dGlvbmFsIGNvbmRpdGlvbiBpbmRlbnRhdGlvbikKKyAgIkFkZCBDT05ESVRJT04gYXQgSU5ERU5U QVRJT04gbGV2ZWwgdG8gdGhlIGN1cnJlbnQgc3RhdGUuICBSZXR1cm4gdGhlIHZhbHVlCisqdW5z cGVjaWZpZWQqIGluIHRoZSBzdGF0ZSBtb25hZC4iCisgIChsYW1iZGEgKHN0YXRlKQorICAgICht YXRjaCBzdGF0ZQorICAgICAgKCgkIDxjYWJhbC1wYXJzZS1zdGF0ZT4gbGluZXMgbWluaW11bS1p bmRlbnQgaW5kZW50cyBjb25kaXRpb25hbHMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHRydWUtZ3JvdXA/IHRydWUtZ3JvdXAgZmFsc2UtZ3JvdXAKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHRydWUtZ3JvdXA/LXN0YWNrIHRydWUtZ3JvdXAtc3RhY2sKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGZhbHNlLWdyb3VwLXN0YWNrKQorICAgICAgIChpZiAobnVsbD8g Y29uZGl0aW9uYWxzKQorICAgICAgICAgICAodmFsdWVzICcqdW5zcGVjaWZpZWQqCisgICAgICAg ICAgICAgICAgICAgKHNldC1maWVsZHMgc3RhdGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAoKGNhYmFsLXBhcnNlLXN0YXRlLWxpbmVzKSAoY2RyIGxpbmVzKSkKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAoKGNhYmFsLXBhcnNlLXN0YXRlLWNvbmRpdGlvbmFscykKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnMgY29uZGl0aW9uIGNvbmRpdGlvbmFs cykpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChjYWJhbC1wYXJzZS1zdGF0ZS1p bmRlbnRzKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29ucyBpbmRlbnRhdGlv biBpbmRlbnRzKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKGNhYmFsLXBhcnNl LXN0YXRlLXRydWUtZ3JvdXA/KSAjdCkpKQorICAgICAgICAgICAodmFsdWVzICcqdW5zcGVjaWZp ZWQqCisgICAgICAgICAgICAgICAgICAgKHNldC1maWVsZHMgc3RhdGUKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAoKGNhYmFsLXBhcnNlLXN0YXRlLWxpbmVzKSAoY2RyIGxpbmVzKSkK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKGNhYmFsLXBhcnNlLXN0YXRlLWNvbmRp dGlvbmFscykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnMgY29uZGl0aW9u IGNvbmRpdGlvbmFscykpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChjYWJhbC1w YXJzZS1zdGF0ZS1pbmRlbnRzKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29u cyBpbmRlbnRhdGlvbiBpbmRlbnRzKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAo KGNhYmFsLXBhcnNlLXN0YXRlLXRydWUtZ3JvdXA/KSAjdCkKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAoKGNhYmFsLXBhcnNlLXN0YXRlLXRydWUtZ3JvdXApICcoKSkKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAoKGNhYmFsLXBhcnNlLXN0YXRlLWZhbHNlLWdyb3VwKSAn KCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChjYWJhbC1wYXJzZS1zdGF0ZS10 cnVlLWdyb3VwPy1zdGFjaykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnMg dHJ1ZS1ncm91cD8gdHJ1ZS1ncm91cD8tc3RhY2spKQorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICgoY2FiYWwtcGFyc2Utc3RhdGUtdHJ1ZS1ncm91cC1zdGFjaykKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgKGNvbnMgdHJ1ZS1ncm91cCB0cnVlLWdyb3VwLXN0YWNrKSkK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKGNhYmFsLXBhcnNlLXN0YXRlLWZhbHNl LWdyb3VwLXN0YWNrKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29ucyBmYWxz ZS1ncm91cCBmYWxzZS1ncm91cC1zdGFjaykpKSkpKSkpKQorICAgICAgCisoZGVmaW5lIGNvbmRp dGlvbi1yeAorICA7OyBSZWdleHAgZm9yIGNvbmRpdGlvbmFscy4KKyAgKG1ha2UtcmVnZXhwICJe aWYgKyguKikkIikpCisKKyhkZWZpbmUgKGNhYmFsLWV4dHJhY3QtY29uZGl0aW9uIGxpbmUpCisg ICJFeHRyYWN0IHRoZSB0ZXN0IGNvbmRpdGlvbiBmcm9tIGEgY29uZGl0aW9uYWwgTElORS4iCisg IChsZXQgKChyeC1yZXN1bHQgKHJlZ2V4cC1leGVjIGNvbmRpdGlvbi1yeCAoc3RyaW5nLWRvd25j YXNlIGxpbmUpKSkpCisgICAgKGlmIHJ4LXJlc3VsdCAobWF0Y2g6c3Vic3RyaW5nIHJ4LXJlc3Vs dCAxKSAjZikpKQorCisoZGVmaW5lIChjYWJhbC1jb25kaXRpb25hbC1saW5lLT5zZXhwIGxpbmUp CisgICJFeHRyYWN0IHRoZSB0ZXN0IGNvbmRpdGlvbiBmcm9tIExJTkUgYW5kIGNvbnZlcnQgaXQg aW50byBhbiBTLWV4cHJlc3Npb24uIgorICAobGV0ICgoY29uZGl0aW9uYWwgKGNhYmFsLWV4dHJh Y3QtY29uZGl0aW9uIGxpbmUpKSkKKyAgICAoYW5kPT4gY29uZGl0aW9uYWwKKyAgICAgICAgICAg KGNvbXBvc2UgY2FiYWwtdGVzdC1rZXl3b3Jkcy0+c2V4cAorICAgICAgICAgICAgICAgICAgICBj YWJhbC1jb25kaXRpb25hbC0+c2V4cC1saWtlCisgICAgICAgICAgICAgICAgICAgIGNhYmFsLWlt cGwtd2l0aC1hbmQtPmltcGwtYW5kKSkpKQorCisoZGVmaW5lIHBhcmVucy1yeAorICA7OyBQYXJl bnRoZXNlcyB3aXRoaW4gY29uZGl0aW9ucworICAobWFrZS1yZWdleHAgIlxcKCguKylcXCkiKSkK KworKGRlZmluZSBvci1yeAorICA7OyBPUiBvcGVyYXRvciBpbiBjb25kaXRpb25zCisgIChtYWtl LXJlZ2V4cCAiICpcXHxcXHwgKiIpKQorCisoZGVmaW5lIGFuZC1yeAorICA7OyBBTkQgb3BlcmF0 b3IgaW4gY29uZGl0aW9ucworICAobWFrZS1yZWdleHAgIiAqJiYgKiIpKQorCisoZGVmaW5lIG5v dC1yeAorICA7OyBOT1Qgb3BlcmF0b3IgaW4gY29uZGl0aW9ucworICAobWFrZS1yZWdleHAgIl4h LisiKSkKKworKGRlZmluZSAoYmktb3AtYXJncyBzdHIgbWF0Y2gtbHN0KQorICAiUmV0dXJuIGEg bGlzdCB3aXRoIHRoZSBhcmd1bWVudHMgb2YgKGxvZ2ljKSBiaWFucnkgb3BlcmF0b3JzLiAgTUFU Q0gtTFNUCitpcyB0aGUgcmVzdWx0IG9mICdsaXN0LW1hdGNoJyBhZ2FpbnN0IGEgYmluYXJ5IG9w ZXJhdG9yIHJlZ2V4cCBvbiBTVFIuIgorICAobGV0ICgob3BlcmF0b3JzIChsZW5ndGggbWF0Y2gt bHN0KSkpCisgICAgKG1hcCAobGFtYmRhIChmcm9tIHRvKQorICAgICAgICAgICAoc3Vic3RyaW5n IHN0ciBmcm9tIHRvKSkKKyAgICAgICAgIChjb25zIDAgKG1hcCBtYXRjaDplbmQgbWF0Y2gtbHN0 KSkKKyAgICAgICAgIChhcHBlbmQgKG1hcCBtYXRjaDpzdGFydCBtYXRjaC1sc3QpIChsaXN0IChz dHJpbmctbGVuZ3RoIHN0cikpKSkpKQorCisoZGVmaW5lIChiaS1vcC0+c2V4cC1saWtlIGJpLW9w IGFyZ3MpCisgICJCSS1PUCBpcyBhIHN0cmluZyB3aXRoIHRoZSBuYW1lIG9mIGEgU2NoZW1lIG9w ZXJhdG9yIHdoaWNoIGluIGEgQ2FiYWwgZmlsZQoraXMgcmVwcmVzZW50ZWQgYnkgYSBiaW5hcnkg b3BlcmF0b3IuICBBUkdTIGFyZSB0aGUgYXJndW1lbnRzIG9mIHNhaWQgb3BlcmF0b3IuCitSZXR1 cm4gYSBzdHJpbmcgcmVwcmVzZW50aW5nIGFuIFMtZXhwcmVzc2lvbiBvZiB0aGUgb3BlcmF0b3Ig YXBwbGllZCB0byBpdHMKK2FyZ3VtZW50cy4iCisgIChpZiAoPSAobGVuZ3RoIGFyZ3MpIDEpCisg ICAgICAoZmlyc3QgYXJncykKKyAgICAgIChzdHJpbmctYXBwZW5kICIoIiBiaS1vcAorICAgICAg ICAgICAgICAgICAgICAgKGZvbGQgKGxhbWJkYSAoYXJnIHNlZWQpIChzdHJpbmctYXBwZW5kIHNl ZWQgIiAiIGFyZykpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAiIiBhcmdzKSAiKSIpKSkK KworKGRlZmluZSAobm90LT5zZXhwLWxpa2UgYXJnKQorICAiSWYgdGhlIHN0cmluZyBBUkcgaXMg cHJlZml4ZWQgYnkgYSBDYWJhbCBuZWdhdGlvbiBvcGVyYXRvciwgY29udmVydCBpdCB0bworYW4g ZXF1aXZhbGVudCBTY2hlbWUgUy1leHByZXNzaW9uIHN0cmluZy4iCisgIChpZiAocmVnZXhwLWV4 ZWMgbm90LXJ4IGFyZykKKyAgICAgIChzdHJpbmctYXBwZW5kICIobm90ICIKKyAgICAgICAgICAg ICAgICAgICAgIChzdWJzdHJpbmcgYXJnIDEgKHN0cmluZy1sZW5ndGggYXJnKSkKKyAgICAgICAg ICAgICAgICAgICAgICIpIikKKyAgICAgIGFyZykpCisKKyhkZWZpbmUgKHBhcmVucy1sZXNzLWNv bmQtPnNleHAtbGlrZSBjb25kaXRpb25hbCkKKyAgIkNvbnZlcnQgYSBDYWJhbCBDT05ESVRJT05B TCBzdHJpbmcgaW50byBhIHN0cmluZyB3aXRoIGVxdWl2YWxlbnQgU2NoZW1lCitzeW50YXguICBU aGlzIHByb2NlZHVyZSBhY2NlcHRzIG9ubHkgc2ltcGxlIGNvbmRpdGlvbmFscyB3aXRob3V0IHBh cmVudGhlc2VzLiIKKyAgOzsgVGhlIG91dGhlciBvcGVyYXRpb24gaXMgdGhlIG9uZSB3aXRoIHRo ZSBsb3dlc3QgcHJpb3JpdHk6IE9SCisgIChiaS1vcC0+c2V4cC1saWtlCisgICAib3IiCisgICA7 OyBlYWNoIE9SIGFyZ3VtZW50IG1heSBiZSBhbiBBTkQgb3BlcmF0aW9uCisgICAobWFwIChsYW1i ZGEgKG9yLWFyZykKKyAgICAgICAgICAobGV0ICgobS1sc3QgKGxpc3QtbWF0Y2hlcyBhbmQtcngg b3ItYXJnKSkpCisgICAgICAgICAgICA7OyBpcyB0aGVyZSBhbiBBTkQgb3BlcmF0aW9uPworICAg ICAgICAgICAgKGlmICg+IChsZW5ndGggbS1sc3QpIDApCisgICAgICAgICAgICAgICAgKGJpLW9w LT5zZXhwLWxpa2UKKyAgICAgICAgICAgICAgICAgImFuZCIKKyAgICAgICAgICAgICAgICAgOzsg ZXhwYW5kIE5PVCBvcGVyYXRvcnMgd2hlbiB0aGVyZSBhcmUgQU5EcworICAgICAgICAgICAgICAg ICAobWFwIG5vdC0+c2V4cC1saWtlIChiaS1vcC1hcmdzIG9yLWFyZyBtLWxzdCkpKQorICAgICAg ICAgICAgICAgIDs7IC4uLiBhbmQgd2hlbiB0aGVyZSBhcmVuJ3QuCisgICAgICAgICAgICAgICAg KG5vdC0+c2V4cC1saWtlIG9yLWFyZykpKSkKKyAgICAgICAgOzsgbGlzdCBvZiBPUiBhcmd1bWVu dHMKKyAgICAgICAgKGJpLW9wLWFyZ3MgY29uZGl0aW9uYWwgKGxpc3QtbWF0Y2hlcyBvci1yeCBj b25kaXRpb25hbCkpKSkpCisKKyhkZWZpbmUgdGVzdC1rZXl3b3JkLW9ybmFtZW50ICJfXyIpCisK KyhkZWZpbmUgdGVzdHMtcngKKyAgOzsgQ2FiYWwgdGVzdCBrZXl3b3JkcworICAobWFrZS1yZWdl eHAgIihvc3xhcmNofGZsYWd8aW1wbCkgKlxcKChbIGEtekEtWjAtOV8uPD49LV0rKVxcKSIpKQor CisoZGVmaW5lIGltcGwtd2l0aC1hbmQKKyAgKG1ha2UtcmVnZXhwIAorICAgICIoaW1wbCkgKlxc KChbIGEtekEtWjAtOV8tXSspICooWyAwLTlfLjw+PS1dKykgKigmJikgKihbIDAtOV8uPD49LV0r KSAqXFwpIikpCisKKyhkZWZpbmUgKGNhYmFsLWltcGwtd2l0aC1hbmQtPmltcGwtYW5kIGNvbmRp dGlvbmFsKQorICAiVHJhbnNmb3JtIGFueSBjb21waWxlciB2ZXJzaW9uIHJhbmdlIHNwZWNpZmlj aWNhdGlvbiBhcHBlYXJpbmcgaW4KK0NPTkRJVElPTkFMIGludG8gdHdvIHNwZWNpZmljYXRpb25z IGFuZCBhbiAnYW5kJyBjb25qdW5jdGlvbi4gIEZvciBleGFtcGxlLAordGhlIHNwZWNpZmljYXRp b24gXCJpbXBsKGdoYyA+PSA3LjIgJiYgPCA3LjYpXCIgaXMgdHJhbnNmb3JtZWQgaW50byAKK1wi aW1wbChnaGMgPj0gNy4yICkgJiYgaW1wbChnaGMgPCA3LjYpXCIuIgorICAocmVnZXhwLXN1YnN0 aXR1dGUvZ2xvYmFsICNmIGltcGwtd2l0aC1hbmQgCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgY29uZGl0aW9uYWwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAncHJlIDEgIigiIDIg MyAiKSAiIDQgIiAiIDEgIigiIDIgNSAiKSIgJ3Bvc3QpKQorCisoZGVmaW5lIChjYWJhbC1jb25k aXRpb25hbC0+c2V4cC1saWtlIGNvbmRpdGlvbmFsKQorICAiQ29udmVydCBhIENhYmFsIENPTkRJ VElPTkFMIHN0cmluZyBpbnRvIGEgc3RyaW5nIHdpdGggZXF1aXZhbGVudCBTY2hlbWUKK3N5bnRh eC4iCisgIDs7IEZpcnN0IHdlIHN1YnN0aXR1dGUgVEVTVC1LRVlXT1JELU9STkFNRU5UIGZvciBw YXJlbnRoZXNlcyBhcm91bmQgdGVzdHMKKyAgOzsga2V5d29yZHMgc28gdGhhdCBwYXJlbnRoZXNl cyBhcmUgb25seSB1c2VkIHRvIHNldCBwcmVjZWRlbmNlcy4gVGhpcworICA7OyBzdWJzdGFudGlh bGx5IHNpbXBsaWZ5IHBhcnNpbmcuCisgIChsZXQgKChjb25kaXRpb25hbAorICAgICAgICAgKHJl Z2V4cC1zdWJzdGl0dXRlL2dsb2JhbCAjZiB0ZXN0cy1yeCBjb25kaXRpb25hbAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAncHJlIDEgdGVzdC1rZXl3b3JkLW9ybmFtZW50IDIK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdC1rZXl3b3JkLW9ybmFtZW50 ICdwb3N0KSkpCisgICAgKGxldCBsb29wICgoc3ViLWNvbmQgY29uZGl0aW9uYWwpKQorICAgICAg KGxldCAoKHJ4LXJlc3VsdCAocmVnZXhwLWV4ZWMgcGFyZW5zLXJ4IHN1Yi1jb25kKSkpCisgICAg ICAgIChjb25kCisgICAgICAgICAocngtcmVzdWx0CisgICAgICAgICAgKHBhcmVucy1sZXNzLWNv bmQtPnNleHAtbGlrZQorICAgICAgICAgICAoc3RyaW5nLWFwcGVuZAorICAgICAgICAgICAgKG1h dGNoOnByZWZpeCByeC1yZXN1bHQpCisgICAgICAgICAgICAobG9vcCAobWF0Y2g6c3Vic3RyaW5n IHJ4LXJlc3VsdCAxKSkKKyAgICAgICAgICAgIChtYXRjaDpzdWZmaXggcngtcmVzdWx0KSkpKQor ICAgICAgICAgKGVsc2UKKyAgICAgICAgICAocGFyZW5zLWxlc3MtY29uZC0+c2V4cC1saWtlIHN1 Yi1jb25kKSkpKSkpKQorCisoZGVmaW5lIChjYWJhbC10ZXN0LWtleXdvcmRzLT5zZXhwIHNleHAt bGlrZS1jb25kKQorICAiSW4gdGhlIHN0cmluZyBTRVhQLUxJS0UtQ09ORCBzdWJzdGl0dXRlIHRl c3Qga2V5d29yZHMgXCJvcyguLi4pXCIgYW5kCitcImFyY2goLi4uKVwiIHdpdGggZXF1aXZhbGVu dCBTY2hlbWUgY2hlY2tzLiAgUmV0cnVuIGFuIFMtZXhwcmVzc2lvbi4iCisgICh3aXRoLWlucHV0 LWZyb20tc3RyaW5nIAorICAgICAgKGZvbGQtcmlnaHQKKyAgICAgICAobGFtYmRhICh0ZXN0IHNl eHApCisgICAgICAgICAobWF0Y2ggdGVzdAorICAgICAgICAgICAoKHR5cGUgcHJlLW1hdGNoIHBv c3QtbWF0Y2gpCisgICAgICAgICAgICAobGV0ICgocnggKG1ha2UtcmVnZXhwCisgICAgICAgICAg ICAgICAgICAgICAgIChzdHJpbmctYXBwZW5kIHR5cGUgdGVzdC1rZXl3b3JkLW9ybmFtZW50Cisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgKihbYS16QS1aMC05Xy1dKykg KihbPD49XSopICooWzAtOS5dKikgKiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgdGVzdC1rZXl3b3JkLW9ybmFtZW50KSkpKQorICAgICAgICAgICAgICAocmVnZXhwLXN1 YnN0aXR1dGUvZ2xvYmFsCisgICAgICAgICAgICAgICAjZiByeCBzZXhwCisgICAgICAgICAgICAg ICAncHJlIHByZS1tYXRjaCAyIDMgNCBwb3N0LW1hdGNoICdwb3N0KSkpCisgICAgICAgICAgIChf IHNleHApKSkKKyAgICAgICBzZXhwLWxpa2UtY29uZAorICAgICAgICcoKCIob3MpIiAiKG9zIFwi IiAiXCIpIikKKyAgICAgICAgICgiKGFyY2gpIiAiKGFyY2ggXCIiICJcIikiKQorICAgICAgICAg KCIoaW1wbCkiICIoaW1wbCBcIiIgIlwiKSIpCisgICAgICAgICAoIihmbGFnKSIgIihmbGFnIFwi IiAiXCIpIikpKQorICAgIHJlYWQpKQorCis7OyBQYXJ0IDI6Cis7OworOzsgRXZhbHVhdGUgdGhl IFMtZXhwcmVzc2lvbiByZXR1cm5lZCBieSAncmVhZC1jYWJhbCcuCisKKzs7IFRoaXMgZGVmaW5l cyB0aGUgb2JqZWN0IGFuZCBpbnRlcmZhY2UgdGhhdCB3ZSBwcm92aWRlIHRvIGFjY2VzcyB0aGUg Q2FiYWwKKzs7IGZpbGUgaW5mb3JtYXRpb24uICBOb3RlIHRoYXQgdGhpcyBkb2VzIG5vdCBpbmNs dWRlIGFsbCB0aGUgcGllY2VzIG9mCis7OyBpbmZvcm1hdGlvbiBvZiB0aGUgQ2FiYWwgZmlsZSwg YnV0IG9ubHkgdGhlIG9uZXMgd2UgY3VycmVudGx5IGFyZQorOzsgaW50ZXJlc3RlZCBpbi4KKyhk ZWZpbmUtcmVjb3JkLXR5cGUgPGNhYmFsLXBhY2thZ2U+CisgIChtYWtlLWNhYmFsLXBhY2thZ2Ug bmFtZSB2ZXJzaW9uIGxpY2Vuc2UgaG9tZS1wYWdlIHNvdXJjZS1yZXBvc2l0b3J5CisgICAgICAg ICAgICAgICAgICAgICAgc3lub3BzaXMgZGVzY3JpcHRpb24KKyAgICAgICAgICAgICAgICAgICAg ICBleGVjdXRhYmxlcyBsaWIgdGVzdC1zdWl0ZXMKKyAgICAgICAgICAgICAgICAgICAgICBmbGFn cyBldmFsLWVudmlyb25tZW50KQorICBjYWJhbC1wYWNrYWdlPworICAobmFtZSAgIGNhYmFsLXBh Y2thZ2UtbmFtZSkKKyAgKHZlcnNpb24gY2FiYWwtcGFja2FnZS12ZXJzaW9uKQorICAobGljZW5z ZSBjYWJhbC1wYWNrYWdlLWxpY2Vuc2UpCisgIChob21lLXBhZ2UgY2FiYWwtcGFja2FnZS1ob21l LXBhZ2UpCisgIChzb3VyY2UtcmVwb3NpdG9yeSBjYWJhbC1wYWNrYWdlLXNvdXJjZS1yZXBvc2l0 b3J5KQorICAoc3lub3BzaXMgY2FiYWwtcGFja2FnZS1zeW5vcHNpcykKKyAgKGRlc2NyaXB0aW9u IGNhYmFsLXBhY2thZ2UtZGVzY3JpcHRpb24pCisgIChleGVjdXRhYmxlcyBjYWJhbC1wYWNrYWdl LWV4ZWN1dGFibGVzKQorICAobGliIGNhYmFsLXBhY2thZ2UtbGlicmFyeSkgOyAnbGlicmFyeScg aXMgYSBTY2hlbWUga2V5d29yZAorICAodGVzdC1zdWl0ZXMgY2FiYWwtcGFja2FnZS10ZXN0LXN1 aXRlcykKKyAgKGZsYWdzIGNhYmFsLXBhY2thZ2UtZmxhZ3MpCisgIChldmFsLWVudmlyb25tZW50 IGNhYmFsLXBhY2thZ2UtZXZhbC1lbnZpcm9ubWVudCkpIDsgYWxpc3QKKworKHNldC1yZWNvcmQt dHlwZS1wcmludGVyISA8Y2FiYWwtcGFja2FnZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAg KGxhbWJkYSAocGFja2FnZSBwb3J0KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIChmb3Jt YXQgcG9ydCAiIzxjYWJhbC1wYWNrYWdlIH5hLX5hPiIKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgKGNhYmFsLXBhY2thZ2UtbmFtZSBwYWNrYWdlKQorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAoY2FiYWwtcGFja2FnZS12ZXJzaW9uIHBhY2thZ2Up KSkpCisKKyhkZWZpbmUtcmVjb3JkLXR5cGUgPGNhYmFsLXNvdXJjZS1yZXBvc2l0b3J5PgorICAo bWFrZS1jYWJhbC1zb3VyY2UtcmVwb3NpdG9yeSB1c2UtY2FzZSB0eXBlIGxvY2F0aW9uKQorICBj YWJhbC1zb3VyY2UtcmVwb3NpdG9yeT8KKyAgKHVzZS1jYXNlIGNhYmFsLXNvdXJjZS1yZXBvc2l0 b3J5LXVzZS1jYXNlKQorICAodHlwZSBjYWJhbC1zb3VyY2UtcmVwb3NpdG9yeS10eXBlKQorICAo bG9jYXRpb24gY2FiYWwtc291cmNlLXJlcG9zaXRvcnktbG9jYXRpb24pKQorCis7OyBXZSBuZWVk IHRvIGJlIGFibGUgdG8gZGlzdGluZ3Vpc2ggdGhlIHZhbHVlIG9mIGEgZmxhZyBmcm9tIHRoZSBT Y2hlbWUgI3QKKzs7IGFuZCAjZiB2YWx1ZXMuCisoZGVmaW5lLXJlY29yZC10eXBlIDxjYWJhbC1m bGFnPgorICAobWFrZS1jYWJhbC1mbGFnIG5hbWUgZGVzY3JpcHRpb24gZGVmYXVsdCBtYW51YWwp CisgIGNhYmFsLWZsYWc/CisgIChuYW1lIGNhYmFsLWZsYWctbmFtZSkKKyAgKGRlc2NyaXB0aW9u IGNhYmFsLWZsYWctZGVzY3JpcHRpb24pCisgIChkZWZhdWx0IGNhYmFsLWZsYWctZGVmYXVsdCkg OyAndHJ1ZSBvciAnZmFsc2UKKyAgKG1hbnVhbCBjYWJhbC1mbGFnLW1hbnVhbCkpICA7ICd0cnVl IG9yICdmYWxzZQorCisoc2V0LXJlY29yZC10eXBlLXByaW50ZXIhIDxjYWJhbC1mbGFnPgorICAg ICAgICAgICAgICAgICAgICAgICAgICAobGFtYmRhIChwYWNrYWdlIHBvcnQpCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgKGZvcm1hdCBwb3J0ICIjPGNhYmFsLWZsYWcgfmEgZGVmYXVsdDp+ YT4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjYWJhbC1mbGFnLW5h bWUgcGFja2FnZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNhYmFs LWZsYWctZGVmYXVsdCBwYWNrYWdlKSkpKQorCisoZGVmaW5lLXJlY29yZC10eXBlIDxjYWJhbC1k ZXBlbmRlbmN5PgorICAobWFrZS1jYWJhbC1kZXBlbmRlbmN5IG5hbWUgdmVyc2lvbikKKyAgY2Fi YWwtZGVwZW5kZW5jeT8KKyAgKG5hbWUgY2FiYWwtZGVwZW5kZW5jeS1uYW1lKQorICAodmVyc2lv biBjYWJhbC1kZXBlbmRlbmN5LXZlcnNpb24pKQorCisoZGVmaW5lLXJlY29yZC10eXBlIDxjYWJh bC1leGVjdXRhYmxlPgorICAobWFrZS1jYWJhbC1leGVjdXRhYmxlIG5hbWUgZGVwZW5kZW5jaWVz KQorICBjYWJhbC1leGVjdXRhYmxlPworICAobmFtZSBjYWJhbC1leGVjdXRhYmxlLW5hbWUpCisg IChkZXBlbmRlbmNpZXMgY2FiYWwtZXhlY3V0YWJsZS1kZXBlbmRlbmNpZXMpKSA7IGxpc3Qgb2Yg PGNhYmFsLWRlcGVuZGVuY3k+CisKKyhkZWZpbmUtcmVjb3JkLXR5cGUgPGNhYmFsLWxpYnJhcnk+ CisgIChtYWtlLWNhYmFsLWxpYnJhcnkgZGVwZW5kZW5jaWVzKQorICBjYWJhbC1saWJyYXJ5Pwor ICAoZGVwZW5kZW5jaWVzIGNhYmFsLWxpYnJhcnktZGVwZW5kZW5jaWVzKSkgOyBsaXN0IG9mIDxj YWJhbC1kZXBlbmRlbmN5PgorCisoZGVmaW5lLXJlY29yZC10eXBlIDxjYWJhbC10ZXN0LXN1aXRl PgorICAobWFrZS1jYWJhbC10ZXN0LXN1aXRlIG5hbWUgZGVwZW5kZW5jaWVzKQorICBjYWJhbC10 ZXN0LXN1aXRlPworICAobmFtZSBjYWJhbC10ZXN0LXN1aXRlLW5hbWUpCisgIChkZXBlbmRlbmNp ZXMgY2FiYWwtdGVzdC1zdWl0ZS1kZXBlbmRlbmNpZXMpKSA7IGxpc3Qgb2YgPGNhYmFsLWRlcGVu ZGVuY3k+CisKKyhkZWZpbmUgKGNhYmFsLWZsYWdzLT5hbGlzdCBmbGFnLWxpc3QpCisgICAgIlJl dHJ1biBhbiBhbGlzdCBhc3NvY2lhdGluZyB0aGUgZmxhZyBuYW1lIHRvIGl0cyBkZWZhdWx0IHZh bHVlIGZyb20gYQorbGlzdCBvZiA8Y2FiYWwtZmxhZz4gb2JqZWN0cy4iCisgIChtYXAgKGxhbWJk YSAoZmxhZykgKGNvbnMgKGNhYmFsLWZsYWctbmFtZSBmbGFnKSAoY2FiYWwtZmxhZy1kZWZhdWx0 IGZsYWcpKSkKKyAgICAgICBmbGFnLWxpc3QpKQorCisoZGVmaW5lIChldmFsLWNhYmFsIGNhYmFs LXNleHAgZW52KQorICAiR2l2ZW4gdGhlIENBQkFMLVNFWFAgcHJvZHVjZWQgYnkgJ3JlYWQtY2Fi YWwnLCBldmFsdWF0ZSBhbGwgY29uZGl0aW9uYWxzCithbmQgcmV0dXJuIGEgJ2NhYmFsLXBhY2th Z2UnIG9iamVjdC4gIFRoZSB2YWx1ZXMgb2YgYWxsIHRlc3RzIGNhbiBiZQorb3ZlcndyaXR0ZW4g Ynkgc3BlY2lmeWluZyB0aGUgZGVzaXJlZCB2YWx1ZSBpbiBFTlYuICBFTlYgbXVzdCBiZSBhbiBh bGlzdC4KK1RoZSBhY2NlcHRlZCBrZXlzIGFyZTogXCJvc1wiLCBcImFyY2hcIiwgXCJpbXBsXCIg YW5kIGEgbmFtZSBvZiBhIGZsYWcuICBUaGUKK3ZhbHVlIGFzc29jaWF0ZWQgd2l0aCBhIGZsYWcg aGFzIHRvIGJlIGVpdGhlciBcInRydWVcIiBvciBcImZhbHNlXCIuICBUaGUKK3ZhbHVlIGFzc29j aWF0ZWQgd2l0aCBvdGhlciBrZXlzIGhhcyB0byBjb25mb3JtIHRvIHRoZSBDYWJhbCBmaWxlIGZv cm1hdAorZGVmaW5pdGlvbi4iCisgIChkZWZpbmUgKG9zIG5hbWUpCisgICAgKGxldCAoKGVudi1v cyAob3IgKGFzc29jLXJlZiBlbnYgIm9zIikgImxpbnV4IikpKQorICAgICAgKHN0cmluZy1tYXRj aCBlbnYtb3MgbmFtZSkpKQorICAKKyAgKGRlZmluZSAoYXJjaCBuYW1lKQorICAgIChsZXQgKChl bnYtYXJjaCAob3IgKGFzc29jLXJlZiBlbnYgImFyY2giKSAieDg2XzY0IikpKQorICAgICAgKHN0 cmluZy1tYXRjaCBlbnYtYXJjaCBuYW1lKSkpCisgIAorICAoZGVmaW5lIChpbXBsIGhhc2tlbGwp CisgICAgKGxldCogKChoYXNrZWxsLWltcGxlbWVudGF0aW9uIChvciAoYXNzb2MtcmVmIGVudiAi aW1wbCIpICJnaGMiKSkKKyAgICAgICAgICAgKGltcGwtcngtcmVzdWx0LXdpdGgtdmVyc2lvbgor ICAgICAgICAgICAgKHN0cmluZy1tYXRjaCAiKFthLXpBLVowLTlfXSspLShbMC05Ll0rKSIgaGFz a2VsbC1pbXBsZW1lbnRhdGlvbikpCisgICAgICAgICAgIChpbXBsLW5hbWUgKG9yIChhbmQ9PiBp bXBsLXJ4LXJlc3VsdC13aXRoLXZlcnNpb24KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIChjdXQgbWF0Y2g6c3Vic3RyaW5nIDw+IDEpKQorICAgICAgICAgICAgICAgICAgICAgICAg ICBoYXNrZWxsLWltcGxlbWVudGF0aW9uKSkKKyAgICAgICAgICAgKGltcGwtdmVyc2lvbiAoYW5k PT4gaW1wbC1yeC1yZXN1bHQtd2l0aC12ZXJzaW9uCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIChjdXQgbWF0Y2g6c3Vic3RyaW5nIDw+IDIpKSkKKyAgICAgICAgICAgKGNhYmFsLXJ4 LXJlc3VsdC13aXRoLXZlcnNpb24KKyAgICAgICAgICAgIChzdHJpbmctbWF0Y2ggIihbYS16QS1a MC05Xy1dKykgKihbPD49XSspICooWzAtOS5dKykgKiIgaGFza2VsbCkpCisgICAgICAgICAgIChj YWJhbC1yeC1yZXN1bHQtd2l0aG91dC12ZXJzaW9uIAorICAgICAgICAgICAgKHN0cmluZy1tYXRj aCAiKFthLXpBLVowLTlfLV0rKSIgaGFza2VsbCkpCisgICAgICAgICAgIChjYWJhbC1pbXBsLW5h bWUgKG9yIChhbmQ9PiBjYWJhbC1yeC1yZXN1bHQtd2l0aC12ZXJzaW9uCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAoY3V0IG1hdGNoOnN1YnN0cmluZyA8PiAxKSkKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1hdGNoOnN1YnN0cmluZyAKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGNhYmFsLXJ4LXJlc3VsdC13aXRob3V0LXZlcnNpb24g MSkpKQorICAgICAgICAgICAoY2FiYWwtaW1wbC12ZXJzaW9uIChhbmQ9PiBjYWJhbC1yeC1yZXN1 bHQtd2l0aC12ZXJzaW9uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChj dXQgbWF0Y2g6c3Vic3RyaW5nIDw+IDMpKSkKKyAgICAgICAgICAgKGNhYmFsLWltcGwtb3BlcmF0 b3IgKGFuZD0+IGNhYmFsLXJ4LXJlc3VsdC13aXRoLXZlcnNpb24KKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIChjdXQgbWF0Y2g6c3Vic3RyaW5nIDw+IDIpKSkKKyAgICAg ICAgICAgKGNvbXBhcmlzb24gKGFuZD0+IGNhYmFsLWltcGwtb3BlcmF0b3IKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIChjdXQgc3RyaW5nLWFwcGVuZCAic3RyaW5nIiA8PikpKSkKKyAg ICAgIChpZiAoYW5kIGNhYmFsLWltcGwtdmVyc2lvbiBpbXBsLXZlcnNpb24pCisgICAgICAgICAg KGV2YWwtc3RyaW5nCisgICAgICAgICAgIChzdHJpbmctYXBwZW5kICIoc3RyaW5nIiBjYWJhbC1p bXBsLW9wZXJhdG9yCisgICAgICAgICAgICAgICAgICAgICAgICAgICIgXCIiIGhhc2tlbGwtaW1w bGVtZW50YXRpb24gIlwiIgorICAgICAgICAgICAgICAgICAgICAgICAgICAiIFwiIiBjYWJhbC1p bXBsLW5hbWUgIi0iIGNhYmFsLWltcGwtdmVyc2lvbiAiXCIpIikpCisgICAgICAgICAgKHN0cmlu Zy1tYXRjaCBjYWJhbC1pbXBsLW5hbWUgaW1wbC1uYW1lKSkpKQorICAKKyAgKGRlZmluZSAoY2Fi YWwtZmxhZ3MpCisgICAgKG1ha2UtY2FiYWwtc2VjdGlvbiBjYWJhbC1zZXhwICdmbGFnKSkKKyAg CisgIChkZWZpbmUgKGZsYWcgbmFtZSkKKyAgICAobGV0ICgodmFsdWUgKG9yIChhc3NvYy1yZWYg ZW52IG5hbWUpCisgICAgICAgICAgICAgICAgICAgICAoYXNzb2MtcmVmIChjYWJhbC1mbGFncy0+ YWxpc3QgKGNhYmFsLWZsYWdzKSkgbmFtZSkpKSkKKyAgICAgIChpZiAoZXE/IHZhbHVlICdmYWxz ZSkgI2YgI3QpKSkKKyAgCisgIChkZWZpbmUgKGV2YWwgc2V4cCkKKyAgICAobWF0Y2ggc2V4cAor ICAgICAgKCgpICcoKSkKKyAgICAgIDs7IG5lc3RlZCAnaWYnCisgICAgICAoKCgnaWYgcHJlZGlj YXRlIHRydWUtZ3JvdXAgZmFsc2UtZ3JvdXApIHJlc3QgLi4uKQorICAgICAgIChhcHBlbmQgKGlm IChldmFsIHByZWRpY2F0ZSkKKyAgICAgICAgICAgICAgICAgICAoZXZhbCB0cnVlLWdyb3VwKQor ICAgICAgICAgICAgICAgICAgIChldmFsIGZhbHNlLWdyb3VwKSkKKyAgICAgICAgICAgICAgIChl dmFsIHJlc3QpKSkKKyAgICAgICgoJ2lmIHByZWRpY2F0ZSB0cnVlLWdyb3VwIGZhbHNlLWdyb3Vw KQorICAgICAgIChpZiAoZXZhbCBwcmVkaWNhdGUpCisgICAgICAgICAgIChldmFsIHRydWUtZ3Jv dXApCisgICAgICAgICAgIChldmFsIGZhbHNlLWdyb3VwKSkpCisgICAgICAoKCdmbGFnIG5hbWUp IChmbGFnIG5hbWUpKQorICAgICAgKCgnb3MgbmFtZSkgKG9zIG5hbWUpKQorICAgICAgKCgnYXJj aCBuYW1lKSAoYXJjaCBuYW1lKSkKKyAgICAgICgoJ2ltcGwgbmFtZSkgKGltcGwgbmFtZSkpCisg ICAgICAoKCdub3QgbmFtZSkgKG5vdCAoZXZhbCBuYW1lKSkpCisgICAgICA7OyAnYW5kJyBhbmQg J29yJyBhcmVuJ3QgZnVuY3Rpb25zLCB0aHVzIHdlIGNhbid0IHVzZSBhcHBseQorICAgICAgKCgn YW5kIGFyZ3MgLi4uKSAoZm9sZCAobGFtYmRhIChlIHMpIChhbmQgZSBzKSkgI3QgKGV2YWwgYXJn cykpKQorICAgICAgKCgnb3IgYXJncyAuLi4pIChmb2xkIChsYW1iZGEgKGUgcykgKG9yIGUgcykp ICNmIChldmFsIGFyZ3MpKSkKKyAgICAgIDs7IG5vIG5lZWQgdG8gZXZhbHVhdGUgZmxhZyBwYXJh bWV0ZXJzCisgICAgICAoKCdzZWN0aW9uICdmbGFnIG5hbWUgcGFyYW1ldGVycykKKyAgICAgICAo bGlzdCAnc2VjdGlvbiAnZmxhZyBuYW1lIHBhcmFtZXRlcnMpKQorICAgICAgOzsgbGlicmFyeSBk byBub3QgaGF2ZSBhIG5hbWUgcGFyYW1ldGVyCisgICAgICAoKCdzZWN0aW9uICdsaWJyYXJ5IHBh cmFtZXRlcnMpCisgICAgICAgKGxpc3QgJ3NlY3Rpb24gJ2xpYnJhcnkgKGV2YWwgcGFyYW1ldGVy cykpKQorICAgICAgKCgnc2VjdGlvbiB0eXBlIG5hbWUgcGFyYW1ldGVycykKKyAgICAgICAobGlz dCAnc2VjdGlvbiB0eXBlIG5hbWUgKGV2YWwgcGFyYW1ldGVycykpKQorICAgICAgKCgoPyBzdHJp bmc/IG5hbWUpIHZhbHVlcykKKyAgICAgICAobGlzdCBuYW1lIHZhbHVlcykpCisgICAgICAoKGVs ZW1lbnQgcmVzdCAuLi4pCisgICAgICAgKGNvbnMgKGV2YWwgZWxlbWVudCkgKGV2YWwgcmVzdCkp KQorICAgICAgKF8gKHJhaXNlIChjb25kaXRpb24KKyAgICAgICAgICAgICAgICAgKCZtZXNzYWdl IChtZXNzYWdlICJGYWlsZWQgdG8gZXZhbHVhdGUgQ2FiYWwgZmlsZS4gXAorU2VlIHRoZSBtYW51 YWwgZm9yIGxpbWl0YXRpb25zLiIpKSkpKSkpCisKKyAgKGRlZmluZSAoY2FiYWwtZXZhbHVhdGVk LXNleHAtPnBhY2thZ2UgZXZhbHVhdGVkLXNleHApCisgICAgKGxldCogKChuYW1lIChsb29rdXAt am9pbiBldmFsdWF0ZWQtc2V4cCAibmFtZSIpKQorICAgICAgICAgICAodmVyc2lvbiAobG9va3Vw LWpvaW4gZXZhbHVhdGVkLXNleHAgInZlcnNpb24iKSkKKyAgICAgICAgICAgKGxpY2Vuc2UgKGxv b2t1cC1qb2luIGV2YWx1YXRlZC1zZXhwICJsaWNlbnNlIikpCisgICAgICAgICAgIChob21lLXBh Z2UgKGxvb2t1cC1qb2luIGV2YWx1YXRlZC1zZXhwICJob21lcGFnZSIpKQorICAgICAgICAgICAo aG9tZS1wYWdlLW9yLWhhY2thZ2UKKyAgICAgICAgICAgIChpZiAoc3RyaW5nLW51bGw/IGhvbWUt cGFnZSkKKyAgICAgICAgICAgICAgICAoc3RyaW5nLWFwcGVuZCAiaHR0cDovL2hhY2thZ2UuaGFz a2VsbC5vcmcvcGFja2FnZS8iIG5hbWUpCisgICAgICAgICAgICAgICAgaG9tZS1wYWdlKSkKKyAg ICAgICAgICAgKHNvdXJjZS1yZXBvc2l0b3J5IChtYWtlLWNhYmFsLXNlY3Rpb24gZXZhbHVhdGVk LXNleHAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg J3NvdXJjZS1yZXBvc2l0b3J5KSkKKyAgICAgICAgICAgKHN5bm9wc2lzIChsb29rdXAtam9pbiBl dmFsdWF0ZWQtc2V4cCAic3lub3BzaXMiKSkKKyAgICAgICAgICAgKGRlc2NyaXB0aW9uIChsb29r dXAtam9pbiBldmFsdWF0ZWQtc2V4cCAiZGVzY3JpcHRpb24iKSkKKyAgICAgICAgICAgKGV4ZWN1 dGFibGVzIChtYWtlLWNhYmFsLXNlY3Rpb24gZXZhbHVhdGVkLXNleHAgJ2V4ZWN1dGFibGUpKQor ICAgICAgICAgICAobGliIChtYWtlLWNhYmFsLXNlY3Rpb24gZXZhbHVhdGVkLXNleHAgJ2xpYnJh cnkpKQorICAgICAgICAgICAodGVzdC1zdWl0ZXMgKG1ha2UtY2FiYWwtc2VjdGlvbiBldmFsdWF0 ZWQtc2V4cCAndGVzdC1zdWl0ZSkpCisgICAgICAgICAgIChmbGFncyAnKCkpCisgICAgICAgICAg IChldmFsLWVudmlyb25tZW50ICcoKSkpCisgICAgICAobWFrZS1jYWJhbC1wYWNrYWdlIG5hbWUg dmVyc2lvbiBsaWNlbnNlIGhvbWUtcGFnZS1vci1oYWNrYWdlCisgICAgICAgICAgICAgICAgICAg ICAgICAgIHNvdXJjZS1yZXBvc2l0b3J5IHN5bm9wc2lzIGRlc2NyaXB0aW9uIGV4ZWN1dGFibGVz IGxpYgorICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0LXN1aXRlcyBmbGFncyBldmFsLWVu dmlyb25tZW50KSkpCisKKyAgKChjb21wb3NlIGNhYmFsLWV2YWx1YXRlZC1zZXhwLT5wYWNrYWdl IGV2YWwpIGNhYmFsLXNleHApKQorCisoZGVmaW5lIChtYWtlLWNhYmFsLXNlY3Rpb24gc2V4cCBz ZWN0aW9uLXR5cGUpCisgICJHaXZlbiBhbiBTRVhQIGFzIHByb2R1Y2VkIGJ5ICdyZWFkLWNhYmFs JywgcHJvZHVjZSBhIGxpc3Qgb2Ygb2JqZWN0cworcGVydGFpbmluZyB0byBTRUNUSU9OLVRZUEUg c2VjdGlvbnMuICBTRUNUSU9OLVRZUEUgbXVzdCBiZSBvbmUgb2Y6CisnZXhlY3V0YWJsZSwgJ2Zs YWcsICd0ZXN0LXN1aXRlLCAnc291cmNlLXJlcG9zaXRvcnkgb3IgJ2xpYnJhcnkuIgorICAoZmls dGVyLW1hcCAoY3V0IG1hdGNoIDw+CisgICAgICAgICAgICAgICAgICAgKCgnc2VjdGlvbiAoPyAo Y3V0IGVxdWFsPyA8PiBzZWN0aW9uLXR5cGUpKSBuYW1lIHBhcmFtZXRlcnMpCisgICAgICAgICAg ICAgICAgICAgIChjYXNlIHNlY3Rpb24tdHlwZQorICAgICAgICAgICAgICAgICAgICAgICgodGVz dC1zdWl0ZSkgKG1ha2UtY2FiYWwtdGVzdC1zdWl0ZQorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBuYW1lIChkZXBlbmRlbmNpZXMgcGFyYW1ldGVycykpKQorICAgICAgICAg ICAgICAgICAgICAgICgoZXhlY3V0YWJsZSkgKG1ha2UtY2FiYWwtZXhlY3V0YWJsZQorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lIChkZXBlbmRlbmNpZXMgcGFyYW1l dGVycykpKQorICAgICAgICAgICAgICAgICAgICAgICgoc291cmNlLXJlcG9zaXRvcnkpIChtYWtl LWNhYmFsLXNvdXJjZS1yZXBvc2l0b3J5CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIG5hbWUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgKGxvb2t1cC1qb2luIHBhcmFtZXRlcnMgInR5cGUiKQorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAobG9va3VwLWpvaW4gcGFyYW1ldGVycyAibG9jYXRp b24iKSkpCisgICAgICAgICAgICAgICAgICAgICAgKChmbGFnKQorICAgICAgICAgICAgICAgICAg ICAgICAobGV0KiAoKGRlZmF1bHQgKGxvb2t1cC1qb2luIHBhcmFtZXRlcnMgImRlZmF1bHQiKSkK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChkZWZhdWx0LXRydWUtb3ItZmFsc2UKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGlmIChhbmQgZGVmYXVsdCAoc3RyaW5nLWNp PT8gImZhbHNlIiBkZWZhdWx0KSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICdmYWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3RydWUpKQorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgKGRlc2NyaXB0aW9uIChsb29rdXAtam9pbiBwYXJh bWV0ZXJzICJkZXNjcmlwdGlvbiIpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1h bnVhbCAobG9va3VwLWpvaW4gcGFyYW1ldGVycyAibWFudWFsIikpCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAobWFudWFsLXRydWUtb3ItZmFsc2UKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAoaWYgKGFuZCBtYW51YWwgKHN0cmluZy1jaT0/ICJ0cnVlIiBtYW51YWwpKQor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndHJ1ZQorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAnZmFsc2UpKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAo bWFrZS1jYWJhbC1mbGFnIG5hbWUgZGVzY3JpcHRpb24KKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGRlZmF1bHQtdHJ1ZS1vci1mYWxzZQorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFudWFsLXRydWUtb3ItZmFsc2UpKSkKKyAgICAg ICAgICAgICAgICAgICAgICAoZWxzZSAjZikpKQorICAgICAgICAgICAgICAgICAgICgoJ3NlY3Rp b24gKD8gKGN1dCBlcXVhbD8gPD4gc2VjdGlvbi10eXBlKSBsaWIpIHBhcmFtZXRlcnMpCisgICAg ICAgICAgICAgICAgICAgIChtYWtlLWNhYmFsLWxpYnJhcnkgKGRlcGVuZGVuY2llcyBwYXJhbWV0 ZXJzKSkpCisgICAgICAgICAgICAgICAgICAgKF8gI2YpKQorICAgICAgICAgICAgICBzZXhwKSkK KworKGRlZmluZSogKGxvb2t1cC1qb2luIGtleS12YWx1ZXMtbGlzdCBrZXkgIzpvcHRpb25hbCAo ZGVsaW1pdGVyICIgIikpCisgICJMb29rdXAgYW5kIGpvaW50IGFsbCB2YWx1ZXMgcGVydGFpbmlu ZyB0byBrZXlzIG9mIHZhbHVlIEtFWSBpbgorS0VZLVZBTFVFUy1MSVNULiAgVGhlIG9wdGlvbmFs IERFTElNSVRFUiBpcyB1c2VkIHRvIHNwZWNpZnkgYSBkZWxpbWl0ZXIgc3RyaW5nCit0byBiZSBh ZGRlZCBiZXR3ZWVuIHRoZSB2YWx1ZXMgZm91bmQgaW4gZGlmZmVyZW50IGtleS92YWx1ZSBwYWly cy4iCisgIChzdHJpbmctam9pbiAKKyAgIChmaWx0ZXItbWFwIChjdXQgbWF0Y2ggPD4gCisgICAg ICAgICAgICAgICAgICAgICgoKD8gKGxhbWJkYSh4KSAoZXF1YWw/IHgga2V5KSkpIHZhbHVlKQor ICAgICAgICAgICAgICAgICAgICAgKHN0cmluZy1qb2luIHZhbHVlIGRlbGltaXRlcikpCisgICAg ICAgICAgICAgICAgICAgIChfICNmKSkKKyAgICAgICAgICAgICAgIGtleS12YWx1ZXMtbGlzdCkK KyAgIGRlbGltaXRlcikpCisKKyhkZWZpbmUgZGVwZW5kZW5jeS1uYW1lLXZlcnNpb24tcngKKyAg KG1ha2UtcmVnZXhwICIoW2EtekEtWjAtOV8tXSspICooLiopIikpCisKKyhkZWZpbmUgKGRlcGVu ZGVuY2llcyBrZXktdmFsdWVzLWxpc3QpCisgICJSZXR1cm4gYSBsaXN0IG9mICdjYWJhbC1kZXBl bmRlbmN5JyBvYmplY3RzIGZvciB0aGUgZGVwZW5kZW5jaWVzIGZvdW5kIGluCitLRVktVkFMVUVT LUxJU1QuIgorICAobGV0ICgoZGVwcyAoc3RyaW5nLXRva2VuaXplIChsb29rdXAtam9pbiBrZXkt dmFsdWVzLWxpc3QgImJ1aWxkLWRlcGVuZHMiICIsIikKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAoY2hhci1zZXQtY29tcGxlbWVudCAoY2hhci1zZXQgI1wsKSkpKSkKKyAgICAobWFw IChsYW1iZGEgKGQpCisgICAgICAgICAgIChsZXQgKChyeC1yZXN1bHQgKHJlZ2V4cC1leGVjIGRl cGVuZGVuY3ktbmFtZS12ZXJzaW9uLXJ4IGQpKSkKKyAgICAgICAgICAgICAobWFrZS1jYWJhbC1k ZXBlbmRlbmN5CisgICAgICAgICAgICAgIChtYXRjaDpzdWJzdHJpbmcgcngtcmVzdWx0IDEpCisg ICAgICAgICAgICAgIChtYXRjaDpzdWJzdHJpbmcgcngtcmVzdWx0IDIpKSkpCisgICAgICAgICBk ZXBzKSkpCisKKzs7OyBjYWJhbC5zY20gZW5kcyBoZXJlCmRpZmYgLS1naXQgYS9ndWl4L2ltcG9y dC9oYWNrYWdlLnNjbSBiL2d1aXgvaW1wb3J0L2hhY2thZ2Uuc2NtCmluZGV4IDFiMjc4MDMuLjQ3 OGQ0MmMgMTAwNjQ0Ci0tLSBhL2d1aXgvaW1wb3J0L2hhY2thZ2Uuc2NtCisrKyBiL2d1aXgvaW1w b3J0L2hhY2thZ2Uuc2NtCkBAIC0xOCwyOCArMTgsMTkgQEAKIAogKGRlZmluZS1tb2R1bGUgKGd1 aXggaW1wb3J0IGhhY2thZ2UpCiAgICM6dXNlLW1vZHVsZSAoaWNlLTkgbWF0Y2gpCi0gICM6dXNl LW1vZHVsZSAoaWNlLTkgcmVnZXgpCi0gICM6dXNlLW1vZHVsZSAoaWNlLTkgcmRlbGltKQotICAj OnVzZS1tb2R1bGUgKGljZS05IHJlY2VpdmUpCi0gICM6dXNlLW1vZHVsZSAoaWNlLTkgcHJldHR5 LXByaW50KQogICAjOnVzZS1tb2R1bGUgKHNyZmkgc3JmaS0yNikKLSAgIzp1c2UtbW9kdWxlIChz cmZpIHNyZmktMzQpCi0gICM6dXNlLW1vZHVsZSAoc3JmaSBzcmZpLTM1KQogICAjOnVzZS1tb2R1 bGUgKHNyZmkgc3JmaS0xMSkKICAgIzp1c2UtbW9kdWxlIChzcmZpIHNyZmktMSkKICAgIzp1c2Ut bW9kdWxlICgoZ3VpeCBkb3dubG9hZCkgIzpzZWxlY3QgKGRvd25sb2FkLXRvLXN0b3JlKSkKICAg Izp1c2UtbW9kdWxlICgoZ3VpeCB1dGlscykgIzpzZWxlY3QgKHBhY2thZ2UtbmFtZS0+bmFtZSt2 ZXJzaW9uKSkKICAgIzp1c2UtbW9kdWxlIChndWl4IGltcG9ydCB1dGlscykKKyAgIzp1c2UtbW9k dWxlIChndWl4IGltcG9ydCBjYWJhbCkKICAgIzp1c2UtbW9kdWxlIChndWl4IHN0b3JlKQogICAj OnVzZS1tb2R1bGUgKGd1aXggaGFzaCkKICAgIzp1c2UtbW9kdWxlIChndWl4IGJhc2UzMikKICAg Izp1c2UtbW9kdWxlICgoZ3VpeCB1dGlscykgIzpzZWxlY3QgKGNhbGwtd2l0aC10ZW1wb3Jhcnkt b3V0cHV0LWZpbGUpKQogICAjOmV4cG9ydCAoaGFja2FnZS0+Z3VpeC1wYWNrYWdlKSkKIAotOzsg UGFydCAxOgotOzsKLTs7IEZ1bmN0aW9ucyB1c2VkIHRvIHJlYWQgYSBDYWJhbCBmaWxlLgotCiAo ZGVmaW5lIGdoYy1zdGFuZGFyZC1saWJyYXJpZXMKICAgOzsgTGlzdCBvZiBsaWJyYXJpZXMgZGlz dHJpYnV0ZWQgd2l0aCBnaGMgKDcuOC40KS4gV2UgaW5jbHVkZSBHSEMgaXRzZWxmIGFzCiAgIDs7 IHNvbWUgcGFja2FnZXMgbGlzdCBpdC4KQEAgLTc1LDU4OCArNjYsMTIgQEAKIAogKGRlZmluZSBw YWNrYWdlLW5hbWUtcHJlZml4ICJnaGMtIikKIAotKGRlZmluZSBrZXktdmFsdWUtcngKLSAgOzsg UmVndWxhciBleHByZXNzaW9uIG1hdGNoaW5nICJrZXk6IHZhbHVlIgotICAobWFrZS1yZWdleHAg IihbYS16QS1aMC05LV0rKTpbIFx0XSooXFx3Py4qKSQiKSkKLQotKGRlZmluZSBzZWN0aW9ucy1y eAotICA7OyBSZWd1bGFyIGV4cHJlc3Npb24gbWF0Y2hpbmcgYSBzZWN0aW9uICJoZWFkIHN1Yi1o ZWFkIC4uLiIKLSAgKG1ha2UtcmVnZXhwICIoW2EtekEtWjAtOVxcKFxcKS1dKykiKSkKLQotKGRl ZmluZSBjb21tZW50LXJ4Ci0gIDs7IFJlZ2V4cCBtYXRjaGluZyBDYWJhbCBjb21tZW50IGxpbmVz LgotICAobWFrZS1yZWdleHAgIl4gKi0tIikpCi0KLShkZWZpbmUgKGhhcy1rZXk/IGxpbmUpCi0g ICJDaGVjayBpZiBMSU5FIGluY2x1ZGVzIGEga2V5LiIKLSAgKHJlZ2V4cC1leGVjIGtleS12YWx1 ZS1yeCBsaW5lKSkKLQotKGRlZmluZSAoY29tbWVudC1saW5lPyBsaW5lKQotICAiQ2hlY2sgaWYg TElORSBpcyBhIGNvbW1lbnQgbGluZS4iCi0gIChyZWdleHAtZXhlYyBjb21tZW50LXJ4IGxpbmUp KQotCi0oZGVmaW5lIChsaW5lLWluZGVudGF0aW9uK3Jlc3QgbGluZSkKLSAgIlJldHVybnMgdHdv IHJlc3VsdHM6IFRoZSBudW1iZXIgb2YgaW5kZW50YXRpb24gc3BhY2VzIGFuZCB0aGUgcmVzdCBv ZiB0aGUKLWxpbmUgKHdpdGhvdXQgaW5kZW50YXRpb24pLiIKLSAgKGxldCBsb29wICgobGluZS1s c3QgKHN0cmluZy0+bGlzdCBsaW5lKSkKLSAgICAgICAgICAgICAoY291bnQgMCkpCi0gICAgOzsg U29tZXRpbWVzIHZhbHVlcyBhcmUgc3ByZWFkIG92ZXIgbXVsdGlwbGUgbGluZXMgYW5kIG5ldyBs aW5lcyBzdGFydAotICAgIDs7IHdpdGggYSBjb21tYSAnLCcgd2l0aCB0aGUgd3JvbmcgaW5kZW50 YXRpb24uICBTZWUgZS5nLiBoYWRkb2NrLWFwaS4KLSAgICAoaWYgKG9yIChudWxsPyBsaW5lLWxz dCkKLSAgICAgICAgICAgIChub3QgKG9yCi0gICAgICAgICAgICAgICAgICAoZXF2PyAoZmlyc3Qg bGluZS1sc3QpICNcc3BhY2UpCi0gICAgICAgICAgICAgICAgICAoZXF2PyAoZmlyc3QgbGluZS1s c3QpICNcLCkgOyBzZWUsIGUuZy4sIGhhZGRvY2stYXBpLmNhYmFsCi0gICAgICAgICAgICAgICAg ICAoZXF2PyAoZmlyc3QgbGluZS1sc3QpICNcdGFiKSkpKQotICAgICAgICAodmFsdWVzIGNvdW50 IChsaXN0LT5zdHJpbmcgbGluZS1sc3QpKQotICAgICAgICAobG9vcCAoY2RyIGxpbmUtbHN0KSAo KyBjb3VudCAxKSkpKSkKLQotKGRlZmluZSAobXVsdGktbGluZS12YWx1ZSBsaW5lcyBzZWVkKQot ICAiRnVuY3Rpb24gdG8gcmVhZCBhIHZhbHVlIHNwbGl0IGFjcm9zcyBtdWx0aXBsZSBsaW5lcy4g TElORVMgYXJlIHRoZQotcmVtYWluaW5nIGlucHV0IGxpbmVzIHRvIGJlIHJlYWQuIFNFRUQgaXMg dGhlIHZhbHVlIHJlYWQgb24gdGhlIHNhbWUgbGluZSBhcwotdGhlIGtleS4gIFJldHVybiB0d28g dmFsdWVzOiBBIGxpc3Qgd2l0aCB2YWx1ZXMgYW5kIHRoZSByZW1haW5pbmcgbGluZXMgdG8gYmUK LXByb2Nlc3NlZC4iCi0gIChkZWZpbmUgKG11bHRpLWxpbmUtdmFsdWUtd2l0aC1taW4taW5kZW50 IGxpbmVzIHNlZWQgbWluLWluZGVudCkKLSAgICAoaWYgKG51bGw/IGxpbmVzKQotICAgICAgICAo dmFsdWVzICcoKSAnKCkpCi0gICAgICAgIChsZXQtdmFsdWVzICgoKGN1cnJlbnQtaW5kZW50IHZh bHVlKSAobGluZS1pbmRlbnRhdGlvbityZXN0IChmaXJzdCBsaW5lcykpKQotICAgICAgICAgICAg ICAgICAgICAgKChuZXh0LWxpbmUtaW5kZW50IG5leHQtbGluZS12YWx1ZSkKLSAgICAgICAgICAg ICAgICAgICAgICAoaWYgKG51bGw/IChjZHIgbGluZXMpKQotICAgICAgICAgICAgICAgICAgICAg ICAgICAodmFsdWVzICNmICIiKQotICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZS1pbmRl bnRhdGlvbityZXN0IChzZWNvbmQgbGluZXMpKSkpKQotICAgICAgICAgIChpZiAob3IgKG5vdCBu ZXh0LWxpbmUtaW5kZW50KSAoPCBuZXh0LWxpbmUtaW5kZW50IG1pbi1pbmRlbnQpCi0gICAgICAg ICAgICAgICAgICAocmVnZXhwLWV4ZWMgY29uZGl0aW9uLXJ4IG5leHQtbGluZS12YWx1ZSkpCi0g ICAgICAgICAgICAgICh2YWx1ZXMgKHJldmVyc2UgKGNvbnMgdmFsdWUgc2VlZCkpIChjZHIgbGlu ZXMpKQotICAgICAgICAgICAgICAobXVsdGktbGluZS12YWx1ZS13aXRoLW1pbi1pbmRlbnQgKGNk ciBsaW5lcykgKGNvbnMgdmFsdWUgc2VlZCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIG1pbi1pbmRlbnQpKSkpKQotCi0gIChsZXQtdmFsdWVzICgoKGN1 cnJlbnQtaW5kZW50IHZhbHVlKSAobGluZS1pbmRlbnRhdGlvbityZXN0IChmaXJzdCBsaW5lcykp KSkKLSAgICAobXVsdGktbGluZS12YWx1ZS13aXRoLW1pbi1pbmRlbnQgbGluZXMgc2VlZCBjdXJy ZW50LWluZGVudCkpKQotCi0oZGVmaW5lIChyZWFkLWNhYmFsIHBvcnQpCi0gICJQYXJzZXMgYSBD YWJhbCBmaWxlIGZyb20gUE9SVC4gIFJldHVybiBhIGxpc3Qgb2YgbGlzdCBwYWlyczoKLQotKCgo aGVhZDEgc3ViLWhlYWQxIC4uLiBrZXkxKSAodmFsdWUpKQotICgoaGVhZDIgc3ViLWhlYWQyIC4u LiBrZXkyKSAodmFsdWUyKSkKLSAuLi4pLgotCi1XZSB0cnkgZG8gZGVkdWNlIHRoZSBDYWJhbCBm b3JtYXQgZnJvbSB0aGUgZm9sbG93aW5nIGRvY3VtZW50OgotaHR0cHM6Ly93d3cuaGFza2VsbC5v cmcvY2FiYWwvdXNlcnMtZ3VpZGUvZGV2ZWxvcGluZy1wYWNrYWdlcy5odG1sIAotCi1LZXlzIGFy ZSBjYXNlLWluc2Vuc2l0aXZlLiAgV2UgdGhlcmVmb3JlIGxvd2VyY2FzZSB0aGVtLiAgVmFsdWVz IGFyZQotY2FzZS1zZW5zaXRpdmUuICBDdXJyZW50bHkgb25seSBpbmRlbnRhdGlvbi1zdHJ1Y3R1 cmVkIGZpbGVzIGFyZSBwYXJzZWQuCi1CcmFjZXMgc3RydWN0dXJlZCBmaWxlcyBhcmUgbm90IGhh bmRsZWQuIiA7IiA8LSBtYWtlIGVtYWNzIGhhcHB5LgotICAoZGVmaW5lIChyZWFkLWFuZC10cmlt LWxpbmUgcG9ydCkKLSAgICAobGV0ICgobGluZSAocmVhZC1saW5lIHBvcnQpKSkKLSAgICAgIChp ZiAoc3RyaW5nPyBsaW5lKQotICAgICAgICAgIChzdHJpbmctdHJpbS1ib3RoIGxpbmUgI1xyZXR1 cm4pCi0gICAgICAgICAgbGluZSkpKQotCi0gIChkZWZpbmUgKHN0cmlwLWluc2lnbmlmaWNhbnQt bGluZXMgcG9ydCkKLSAgICAobGV0IGxvb3AgKChsaW5lIChyZWFkLWFuZC10cmltLWxpbmUgcG9y dCkpCi0gICAgICAgICAgICAgICAocmVzdWx0ICcoKSkpCi0gICAgICAoY29uZAotICAgICAgICgo ZW9mLW9iamVjdD8gbGluZSkKLSAgICAgICAgKHJldmVyc2UgcmVzdWx0KSkKLSAgICAgICAoKG9y IChzdHJpbmctbnVsbD8gbGluZSkgKGNvbW1lbnQtbGluZT8gbGluZSkpCi0gICAgICAgIChsb29w IChyZWFkLWFuZC10cmltLWxpbmUgcG9ydCkgcmVzdWx0KSkKLSAgICAgICAoZWxzZQotICAgICAg ICAobG9vcCAocmVhZC1hbmQtdHJpbS1saW5lIHBvcnQpIChjb25zIGxpbmUgcmVzdWx0KSkpKSkp Ci0KLSAgKGxldCBsb29wCi0gICAgICAoKGxpbmVzIChzdHJpcC1pbnNpZ25pZmljYW50LWxpbmVz IHBvcnQpKQotICAgICAgIChpbmRlbnRzICAnKCkpIDsgb25seSBpbmNsdWRlcyBpbmRlbnRzIGF0 IHN0YXJ0IG9mIHNlY3Rpb24gaGVhZHMuCi0gICAgICAgKHNlY3Rpb25zICcoKSkKLSAgICAgICAo cmVzdWx0ICcoKSkpCi0gICAgKGxldC12YWx1ZXMKLSAgICAgICAgKCgoY3VycmVudC1pbmRlbnQg bGluZSkKLSAgICAgICAgICAoaWYgKG51bGw/IGxpbmVzKQotICAgICAgICAgICAgICAodmFsdWVz IDAgIiIpCi0gICAgICAgICAgICAgIChsaW5lLWluZGVudGF0aW9uK3Jlc3QgKGZpcnN0IGxpbmVz KSkpKQotICAgICAgICAgKChuZXh0LWxpbmUtaW5kZW50IG5leHQtbGluZSkKLSAgICAgICAgICAo aWYgKG9yIChudWxsPyBsaW5lcykgKG51bGw/IChjZHIgbGluZXMpKSkKLSAgICAgICAgICAgICAg KHZhbHVlcyAwICIiKQotICAgICAgICAgICAgICAobGluZS1pbmRlbnRhdGlvbityZXN0IChzZWNv bmQgbGluZXMpKSkpKQotICAgICAgKGlmIChudWxsPyBsaW5lcykKLSAgICAgICAgICAocmV2ZXJz ZSByZXN1bHQpCi0gICAgICAgICAgKGxldCAoKHJ4LXJlc3VsdCAoaGFzLWtleT8gbGluZSkpKQot ICAgICAgICAgICAgKGNvbmQKLSAgICAgICAgICAgICAocngtcmVzdWx0Ci0gICAgICAgICAgICAg IChsZXQgKChrZXkgKHN0cmluZy1kb3duY2FzZSAobWF0Y2g6c3Vic3RyaW5nIHJ4LXJlc3VsdCAx KSkpCi0gICAgICAgICAgICAgICAgICAgICh2YWx1ZSAobWF0Y2g6c3Vic3RyaW5nIHJ4LXJlc3Vs dCAyKSkpCi0gICAgICAgICAgICAgICAgKGNvbmQKLSAgICAgICAgICAgICAgICAgOzsgU2ltcGxl IHNpbmdsZSBsaW5lICJrZXk6IHZhbHVlIi4KLSAgICAgICAgICAgICAgICAgKCg9IG5leHQtbGlu ZS1pbmRlbnQgY3VycmVudC1pbmRlbnQpCi0gICAgICAgICAgICAgICAgICAobG9vcCAoY2RyIGxp bmVzKSBpbmRlbnRzIHNlY3Rpb25zCi0gICAgICAgICAgICAgICAgICAgICAgICAoY29ucwotICAg ICAgICAgICAgICAgICAgICAgICAgIChsaXN0IChyZXZlcnNlIChjb25zIGtleSBzZWN0aW9ucykp IChsaXN0IHZhbHVlKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQpKSkKLSAgICAg ICAgICAgICAgICAgOzsgTXVsdGkgbGluZSAia2V5OiB2YWx1ZVxuIHZhbHVlIGNvbnQuLi4iLgot ICAgICAgICAgICAgICAgICAoKD4gbmV4dC1saW5lLWluZGVudCBjdXJyZW50LWluZGVudCkKLSAg ICAgICAgICAgICAgICAgIChsZXQqLXZhbHVlcyAoKCh2YWx1ZS1sc3QgbGluZXMpCi0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAobXVsdGktbGluZS12YWx1ZSAoY2RyIGxpbmVzKQot ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGlmIChz dHJpbmctbnVsbD8gdmFsdWUpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgJygpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgYCgsdmFsdWUpKSkpKQotICAgICAgICAgICAgICAgICAgICA7 OyBtdWx0aS1saW5lLXZhbHVlIHJldHVybnMgdG8gdGhlIGZpcnN0IGxpbmUgYWZ0ZXIgdGhlCi0g ICAgICAgICAgICAgICAgICAgIDs7IG11bHRpLXZhbHVlLgotICAgICAgICAgICAgICAgICAgICAo bG9vcCBsaW5lcyBpbmRlbnRzIHNlY3Rpb25zCi0gICAgICAgICAgICAgICAgICAgICAgICAgIChj b25zCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAobGlzdCAocmV2ZXJzZSAoY29ucyBrZXkg c2VjdGlvbnMpKSB2YWx1ZS1sc3QpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQp KSkpCi0gICAgICAgICAgICAgICAgIDs7IFNlY3Rpb24gZW5kZWQuCi0gICAgICAgICAgICAgICAg IChlbHNlCi0gICAgICAgICAgICAgICAgICA7OyBJbmRlbnRhdGlvbiBpcyByZWR1Y2VkLiBDaGVj ayBieSBob3cgbWFueSBsZXZlbHMuCi0gICAgICAgICAgICAgICAgICAobGV0KiAoKGlkeCAoYW5k PT4gKGxpc3QtaW5kZXgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxh bWJkYSAoeCkgKD0gbmV4dC1saW5lLWluZGVudCB4KSkKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgaW5kZW50cykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAoY3V0ICsgPD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgKGlmIChoYXMta2V5PyBuZXh0LWxpbmUpIDEgMCkpKSkKLSAgICAgICAgICAgICAgICAgICAg ICAgICAoc2VjCi0gICAgICAgICAgICAgICAgICAgICAgICAgIChpZiBpZHgKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIChkcm9wIHNlY3Rpb25zIGlkeCkKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIChyYWlzZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25k aXRpb24KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCZtZXNzYWdlCi0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAobWVzc2FnZSAidW5hYmxlIHRvIHBhcnNlIENhYmFs IGZpbGUiKSkpKSkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgKGluZCAoZHJvcCBpbmRlbnRz IGlkeCkpKQotICAgICAgICAgICAgICAgICAgICAobG9vcCAoY2RyIGxpbmVzKSBpbmQgc2VjCi0g ICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zIAotICAgICAgICAgICAgICAgICAgICAgICAg ICAgKGxpc3QgKHJldmVyc2UgKGNvbnMga2V5IHNlY3Rpb25zKSkgKGxpc3QgdmFsdWUpKQotICAg ICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0KSkpKSkpKQotICAgICAgICAgICAgIDs7IFN0 YXJ0IG9mIGEgbmV3IHNlY3Rpb24uCi0gICAgICAgICAgICAgKChvciAobnVsbD8gaW5kZW50cykK LSAgICAgICAgICAgICAgICAgICg+IGN1cnJlbnQtaW5kZW50IChmaXJzdCBpbmRlbnRzKSkpCi0g ICAgICAgICAgICAgIChsb29wIChjZHIgbGluZXMpIChjb25zIGN1cnJlbnQtaW5kZW50IGluZGVu dHMpCi0gICAgICAgICAgICAgICAgICAgIChjb25zIChzdHJpbmctZG93bmNhc2UgbGluZSkgc2Vj dGlvbnMpIHJlc3VsdCkpCi0gICAgICAgICAgICAgKGVsc2UKLSAgICAgICAgICAgICAgKGxvb3Ag KGNkciBsaW5lcykgaW5kZW50cwotICAgICAgICAgICAgICAgICAgICAoY29ucyAoc3RyaW5nLWRv d25jYXNlIGxpbmUpIChjZHIgc2VjdGlvbnMpKQotICAgICAgICAgICAgICAgICAgICByZXN1bHQp KSkpKSkpKQotCi0oZGVmaW5lIGNvbmRpdGlvbi1yeAotICA7OyBSZWdleHAgZm9yIGNvbmRpdGlv bmFscy4KLSAgKG1ha2UtcmVnZXhwICJeaWYgKyguKikkIikpCi0KLShkZWZpbmUgKHNwbGl0LXNl Y3Rpb24gc2VjdGlvbikKLSAgIlNwbGl0IFNFQ1RJT04gaW4gaW5kaXZpZHVhbCB3b3JkcyB3aXRo IGV4Y2VwdGlvbiBmb3IgdGhlIHByZWRpY2F0ZSBvZiBhbgotJ2lmJyBjb25kaXRpb25hbC4iCi0g IChsZXQgKChyeC1yZXN1bHQgKHJlZ2V4cC1leGVjIGNvbmRpdGlvbi1yeCBzZWN0aW9uKSkpCi0g ICAgKGlmIHJ4LXJlc3VsdAotICAgICAgICBgKCJpZiIgLChtYXRjaDpzdWJzdHJpbmcgcngtcmVz dWx0IDEpKQotICAgICAgICAobWFwIG1hdGNoOnN1YnN0cmluZyAobGlzdC1tYXRjaGVzIHNlY3Rp b25zLXJ4IHNlY3Rpb24pKSkpKQotCi0oZGVmaW5lIChqb2luLXNlY3Rpb25zIHNlYzEgc2VjMikK LSAgKGZvbGQtcmlnaHQgY29ucyBzZWMyIHNlYzEpKQotCi0oZGVmaW5lIChwcmUtcHJvY2Vzcy1r ZXlzIGtleSkKLSAgKG1hdGNoIGtleQotICAgICgoKSAnKCkpCi0gICAgKChzZWMxIHJlc3QgLi4u KQotICAgICAoam9pbi1zZWN0aW9ucyAoc3BsaXQtc2VjdGlvbiBzZWMxKSAocHJlLXByb2Nlc3Mt a2V5cyByZXN0KSkpKSkKLQotKGRlZmluZSAocHJlLXByb2Nlc3MtZW50cnkta2V5cyBlbnRyeSkK LSAgKG1hdGNoIGVudHJ5Ci0gICAgKChrZXkgdmFsdWUpCi0gICAgIChsaXN0IChwcmUtcHJvY2Vz cy1rZXlzIGtleSkgdmFsdWUpKQotICAgICgoKSAnKCkpKSkKLQotKGRlZmluZSAocHJlLXByb2Nl c3MtZW50cmllcy1rZXlzIGVudHJpZXMpCi0gICJFTlRSSUVTIGlzIGEgbGlzdCBvZiBsaXN0IHBh aXJzLCBhIGtleXMgbGlzdCBhbmQgYSB2YWx1bGVzIGxpc3QsIGFzCi1wcm9kdWNlZCBieSAncmVh ZC1jYWJhbCcuICBTcGxpdCBlYWNoIGVsZW1lbnQgb2YgdGhlIGtleXMgbGlzdCBpbnRvIGluZGl2 aWR1YWwKLXdvcmRzLiAgVGhpcyBwcmUtcHJvY2Vzc2luZyBpcyB1c2VkIHRvIHJlYWQgZmxhZ3Mu IgotICAobWF0Y2ggZW50cmllcwotICAgICgoZW50cnkgcmVzdCAuLi4pCi0gICAgIChjb25zIChw cmUtcHJvY2Vzcy1lbnRyeS1rZXlzIGVudHJ5KQotICAgICAgICAgICAocHJlLXByb2Nlc3MtZW50 cmllcy1rZXlzIHJlc3QpKSkKLSAgICAoKCkKLSAgICAgJygpKSkpCi0KLShkZWZpbmUgKGdldC1m bGFncyBwcmUtcHJvY2Vzc2VkLWVudHJpZXMpCi0gICJQUkUtUFJPQ0VTU0VELUVOVFJJRVMgaXMg YSBsaXN0IG9mIGxpc3QgcGFpcnMsIGEga2V5cyBsaXN0IGFuZCBhIHZhbHVlcwotbGlzdCwgYXMg cHJvZHVjZWQgYnkgJ3JlYWQtY2FiYWwnIGFuZCBwcmUtcHJvY2Vzc2VkIGJ5Ci0ncHJlLXByb2Nl c3MtZW50cmllcy1rZXlzJy4gIFJldHVybiBhIGxpc3Qgb2YgcGFpcnMgd2l0aCB0aGUgbmFtZSBv ZiBmbGFncyBhbmQKLXRoZWlyIGRlZmF1bHQgdmFsdWUgKG9uZSBvZiBcIkZhbHNlXCIgb3IgXCJU cnVlXCIpIGFzIHNwZWNpZmllZCBpbiB0aGUgQ2FiYWwgZmlsZToKLQotKChcImZsYWcxLW5hbWVc IiAuIFwiRmFsc2Utb3ItVHJ1ZVwiKSAuLi4pLiIgOyIgPC0gbWFrZSBlbWFjcyBoYXBweQotICAo bWF0Y2ggcHJlLXByb2Nlc3NlZC1lbnRyaWVzCi0gICAgKCgpICcoKSkKLSAgICAoKCgoImZsYWci IGZsYWctbmFtZSAiZGVmYXVsdCIpIChmbGFnLXZhbCkpIHJlc3QgLi4uKQotICAgICAoY29ucyAo Y29ucyBmbGFnLW5hbWUgIGZsYWctdmFsKQotICAgICAgICAgICAoZ2V0LWZsYWdzIHJlc3QpKSkK LSAgICAoKGVudHJ5IHJlc3QgLi4uICkKLSAgICAgKGdldC1mbGFncyByZXN0KSkKLSAgICAoXyAj ZikpKQotCi07OyBQYXJ0IDI6Ci07OwotOzsgRnVuY3Rpb25zIHRvIHJlYWQgaW5mb3JtYXRpb24g ZnJvbSB0aGUgQ2FiYWwgb2JqZWN0IGNyZWF0ZWQgYnkgJ3JlYWQtY2FiYWwnCi07OyBhbmQgY29u dmVydCBDYWJhbCBmb3JtYXQgZGVwZW5kZW5jaWVzIGNvbmRpdGlvbmFscyBpbnRvIGVxdWl2YWxl bnQKLTs7IFMtZXhwcmVzc2lvbnMuCi0KLShkZWZpbmUgdGVzdHMtcngKLSAgOzsgQ2FiYWwgdGVz dCBrZXl3b3JkcwotICAobWFrZS1yZWdleHAgIihvc3xhcmNofGZsYWd8aW1wbCkgKlxcKChbIGEt ekEtWjAtOV8uPD49LV0rKVxcKSIpKQotCi0oZGVmaW5lIHBhcmVucy1yeAotICA7OyBQYXJlbnRo ZXNlcyB3aXRoaW4gY29uZGl0aW9ucwotICAobWFrZS1yZWdleHAgIlxcKCguKylcXCkiKSkKLQot KGRlZmluZSBvci1yeAotICA7OyBPUiBvcGVyYXRvciBpbiBjb25kaXRpb25zCi0gIChtYWtlLXJl Z2V4cCAiICtcXHxcXHwgKyIpKQotCi0oZGVmaW5lIGFuZC1yeAotICA7OyBBTkQgb3BlcmF0b3Ig aW4gY29uZGl0aW9ucwotICAobWFrZS1yZWdleHAgIiArJiYgKyIpKQotCi0oZGVmaW5lIG5vdC1y eAotICA7OyBOT1Qgb3BlcmF0b3IgaW4gY29uZGl0aW9ucwotICAobWFrZS1yZWdleHAgIl4hLisi KSkKLQotKGRlZmluZSAoYmktb3AtYXJncyBzdHIgbWF0Y2gtbHN0KQotICAiUmV0dXJuIGEgbGlz dCB3aXRoIHRoZSBhcmd1bWVudHMgb2YgKGxvZ2ljKSBiaWFucnkgb3BlcmF0b3JzLiAgTUFUQ0gt TFNUCi1pcyB0aGUgcmVzdWx0IG9mICdsaXN0LW1hdGNoJyBhZ2FpbnN0IGEgYmluYXJ5IG9wZXJh dG9yIHJlZ2V4cCBvbiBTVFIuIgotICAobGV0ICgob3BlcmF0b3JzIChsZW5ndGggbWF0Y2gtbHN0 KSkpCi0gICAgKG1hcCAobGFtYmRhIChmcm9tIHRvKQotICAgICAgICAgICAoc3Vic3RyaW5nIHN0 ciBmcm9tIHRvKSkKLSAgICAgICAgIChjb25zIDAgKG1hcCBtYXRjaDplbmQgbWF0Y2gtbHN0KSkK LSAgICAgICAgIChhcHBlbmQgKG1hcCBtYXRjaDpzdGFydCBtYXRjaC1sc3QpIChsaXN0IChzdHJp bmctbGVuZ3RoIHN0cikpKSkpKQotCi0oZGVmaW5lIChiaS1vcC0+c2V4cC1saWtlIGJpLW9wIGFy Z3MpCi0gICJCSS1PUCBpcyBhIHN0cmluZyB3aXRoIHRoZSBuYW1lIG9mIGEgU2NoZW1lIG9wZXJh dG9yIHdoaWNoIGluIGEgQ2FiYWwgZmlsZQotaXMgcmVwcmVzZW50ZWQgYnkgYSBiaW5hcnkgb3Bl cmF0b3IuICBBUkdTIGFyZSB0aGUgYXJndW1lbnRzIG9mIHNhaWQgb3BlcmF0b3IuCi1SZXR1cm4g YSBzdHJpbmcgcmVwcmVzZW50aW5nIGFuIFMtZXhwcmVzc2lvbiBvZiB0aGUgb3BlcmF0b3IgYXBw bGllZCB0byBpdHMKLWFyZ3VtZW50cy4iCi0gIChpZiAoPSAobGVuZ3RoIGFyZ3MpIDEpCi0gICAg ICAoZmlyc3QgYXJncykKLSAgICAgIChzdHJpbmctYXBwZW5kICIoIiBiaS1vcAotICAgICAgICAg ICAgICAgICAgICAgKGZvbGQgKGxhbWJkYSAoYXJnIHNlZWQpIChzdHJpbmctYXBwZW5kIHNlZWQg IiAiIGFyZykpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAiIiBhcmdzKSAiKSIpKSkKLQot KGRlZmluZSAobm90LT5zZXhwLWxpa2UgYXJnKQotICAiSWYgdGhlIHN0cmluZyBBUkcgaXMgcHJl Zml4ZWQgYnkgYSBDYWJhbCBuZWdhdGlvbiBvcGVyYXRvciwgY29udmVydCBpdCB0bwotYW4gZXF1 aXZhbGVudCBTY2hlbWUgUy1leHByZXNzaW9uIHN0cmluZy4iCi0gIChpZiAocmVnZXhwLWV4ZWMg bm90LXJ4IGFyZykKLSAgICAgIChzdHJpbmctYXBwZW5kICIobm90ICIKLSAgICAgICAgICAgICAg ICAgICAgIChzdWJzdHJpbmcgYXJnIDEgKHN0cmluZy1sZW5ndGggYXJnKSkKLSAgICAgICAgICAg ICAgICAgICAgICIpIikKLSAgICAgIGFyZykpCi0KLShkZWZpbmUgKHBhcmVucy1sZXNzLWNvbmQt PnNleHAtbGlrZSBjb25kaXRpb25hbCkKLSAgIkNvbnZlcnQgYSBDYWJhbCBDT05ESVRJT05BTCBz dHJpbmcgaW50byBhIHN0cmluZyB3aXRoIGVxdWl2YWxlbnQgU2NoZW1lCi1zeW50YXguICBUaGlz IHByb2NlZHVyZSBhY2NlcHRzIG9ubHkgc2ltcGxlIGNvbmRpdGlvbmFscyB3aXRob3V0IHBhcmVu dGhlc2VzLiIKLSAgOzsgVGhlIG91dGhlciBvcGVyYXRpb24gaXMgdGhlIG9uZSB3aXRoIHRoZSBs b3dlc3QgcHJpb3JpdHk6IE9SCi0gIChiaS1vcC0+c2V4cC1saWtlCi0gICAib3IiCi0gICA7OyBl YWNoIE9SIGFyZ3VtZW50IG1heSBiZSBhbiBBTkQgb3BlcmF0aW9uCi0gICAobWFwIChsYW1iZGEg KG9yLWFyZykKLSAgICAgICAgICAobGV0ICgobS1sc3QgKGxpc3QtbWF0Y2hlcyBhbmQtcnggb3It YXJnKSkpCi0gICAgICAgICAgICA7OyBpcyB0aGVyZSBhbiBBTkQgb3BlcmF0aW9uPwotICAgICAg ICAgICAgKGlmICg+IChsZW5ndGggbS1sc3QpIDApCi0gICAgICAgICAgICAgICAgKGJpLW9wLT5z ZXhwLWxpa2UKLSAgICAgICAgICAgICAgICAgImFuZCIKLSAgICAgICAgICAgICAgICAgOzsgZXhw YW5kIE5PVCBvcGVyYXRvcnMgd2hlbiB0aGVyZSBhcmUgQU5EcwotICAgICAgICAgICAgICAgICAo bWFwIG5vdC0+c2V4cC1saWtlIChiaS1vcC1hcmdzIG9yLWFyZyBtLWxzdCkpKQotICAgICAgICAg ICAgICAgIDs7IC4uLiBhbmQgd2hlbiB0aGVyZSBhcmVuJ3QuCi0gICAgICAgICAgICAgICAgKG5v dC0+c2V4cC1saWtlIG9yLWFyZykpKSkKLSAgICAgICAgOzsgbGlzdCBvZiBPUiBhcmd1bWVudHMK LSAgICAgICAgKGJpLW9wLWFyZ3MgY29uZGl0aW9uYWwgKGxpc3QtbWF0Y2hlcyBvci1yeCBjb25k aXRpb25hbCkpKSkpCi0KLShkZWZpbmUgdGVzdC1rZXl3b3JkLW9ybmFtZW50ICJfXyIpCi0KLShk ZWZpbmUgKGNvbmRpdGlvbmFsLT5zZXhwLWxpa2UgY29uZGl0aW9uYWwpCi0gICJDb252ZXJ0IGEg Q2FiYWwgQ09ORElUSU9OQUwgc3RyaW5nIGludG8gYSBzdHJpbmcgd2l0aCBlcXVpdmFsZW50IFNj aGVtZQotc3ludGF4LiIKLSAgOzsgRmlyc3Qgd2Ugc3Vic3RpdHV0ZSBURVNULUtFWVdPUkQtT1JO QU1FTlQgZm9yIHBhcmVudGhlc2VzIGFyb3VuZCB0ZXN0cwotICA7OyBrZXl3b3JkcyBzbyB0aGF0 IHBhcmVudGhlc2VzIGFyZSBvbmx5IHVzZWQgdG8gc2V0IHByZWNlZGVuY2VzLiBUaGlzCi0gIDs7 IHN1YnN0YW50aWFsbHkgc2ltcGxpZnkgcGFyc2luZy4KLSAgKGxldCAoKGNvbmRpdGlvbmFsCi0g ICAgICAgICAocmVnZXhwLXN1YnN0aXR1dGUvZ2xvYmFsICNmIHRlc3RzLXJ4IGNvbmRpdGlvbmFs Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwcmUgMSB0ZXN0LWtleXdvcmQt b3JuYW1lbnQgMgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0LWtleXdv cmQtb3JuYW1lbnQgJ3Bvc3QpKSkKLSAgICAobGV0IGxvb3AgKChzdWItY29uZCBjb25kaXRpb25h bCkpCi0gICAgICAobGV0ICgocngtcmVzdWx0IChyZWdleHAtZXhlYyBwYXJlbnMtcnggc3ViLWNv bmQpKSkKLSAgICAgICAgKGNvbmQKLSAgICAgICAgIChyeC1yZXN1bHQKLSAgICAgICAgICAocGFy ZW5zLWxlc3MtY29uZC0+c2V4cC1saWtlCi0gICAgICAgICAgIChzdHJpbmctYXBwZW5kCi0gICAg ICAgICAgICAobWF0Y2g6cHJlZml4IHJ4LXJlc3VsdCkKLSAgICAgICAgICAgIChsb29wIChtYXRj aDpzdWJzdHJpbmcgcngtcmVzdWx0IDEpKQotICAgICAgICAgICAgKG1hdGNoOnN1ZmZpeCByeC1y ZXN1bHQpKSkpCi0gICAgICAgICAoZWxzZQotICAgICAgICAgIChwYXJlbnMtbGVzcy1jb25kLT5z ZXhwLWxpa2Ugc3ViLWNvbmQpKSkpKSkpCi0KLShkZWZpbmUgKGV2YWwtZmxhZ3Mgc2V4cC1saWtl LWNvbmQgZmxhZ3MpCi0gICJTRVhQLUxJS0UtQ09ORCBpcyBhIHN0cmluZyByZXByZXNlbnRpbmcg YW4gUy1leHByZXNzaW9uIGNvbmRpdGlvbmFsLiAgRkxBR1MKLWlzIGEgbGlzdCBvZiBmbGFnIG5h bWUgYW5kIHZhbHVlIHBhaXJzIGFzIHByb2R1Y2VkIGJ5ICdnZXQtZmxhZ3MnLiAgU3Vic3RpdHV0 ZQotXCIjdFwiIG9yIFwiI2ZcIiBhY2NvcmRpbmcgdG8gdGhlIHZhbHVlIG9mIGZsYWdzLiAoRGVm YXVsdCB0byBcIlRydWVcIikuIgotICAoZm9sZC1yaWdodAotICAgKGxhbWJkYSAoZmxhZyBzZXhw KQotICAgICAobWF0Y2ggZmxhZwotICAgICAgICgobmFtZSAuIHZhbHVlKQotICAgICAgICAobGV0 ICgocnggKG1ha2UtcmVnZXhwCi0gICAgICAgICAgICAgICAgICAgKHN0cmluZy1hcHBlbmQgImZs YWciIHRlc3Qta2V5d29yZC1vcm5hbWVudCBuYW1lCi0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgdGVzdC1rZXl3b3JkLW9ybmFtZW50KSkpKQotICAgICAgICAgIChyZWdleHAtc3Vi c3RpdHV0ZS9nbG9iYWwKLSAgICAgICAgICAgI2Ygcnggc2V4cAotICAgICAgICAgICAncHJlIChp ZiAoc3RyaW5nLWNpPSB2YWx1ZSAiRmFsc2UiKSAiI2YiICIjdCIpICdwb3N0KSkpCi0gICAgICAg KF8gc2V4cCkpKQotICAgc2V4cC1saWtlLWNvbmQKLSAgIChjb25zICcoIlthLXpBLVowLTlfLV0r IiAuICJUcnVlIikgZmxhZ3MpKSkKLQotKGRlZmluZSAoZXZhbC10ZXN0cy0+c2V4cCBzZXhwLWxp a2UtY29uZCkKLSAgIkluIHRoZSBzdHJpbmcgU0VYUC1MSUtFLUNPTkQgc3Vic3RpdHV0ZSB0ZXN0 IGtleXdvcmRzIFwib3MoLi4uKVwiIGFuZAotXCJhcmNoKC4uLilcIiB3aXRoIGVxdWl2YWxlbnQg U2NoZW1lIGNoZWNrcy4gIFJldHJ1biBhbiBTLWV4cHJlc3Npb24uIgotICAod2l0aC1pbnB1dC1m cm9tLXN0cmluZyAKLSAgICAgIChmb2xkLXJpZ2h0Ci0gICAgICAgKGxhbWJkYSAodGVzdCBzZXhw KQotICAgICAgICAgKG1hdGNoIHRlc3QKLSAgICAgICAgICAgKCh0eXBlIHByZS1tYXRjaCBwb3N0 LW1hdGNoKQotICAgICAgICAgICAgKGxldCAoKHJ4IChtYWtlLXJlZ2V4cAotICAgICAgICAgICAg ICAgICAgICAgICAoc3RyaW5nLWFwcGVuZCB0eXBlIHRlc3Qta2V5d29yZC1vcm5hbWVudCAiKFxc dyspIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0LWtleXdvcmQt b3JuYW1lbnQpKSkpCi0gICAgICAgICAgICAgIChyZWdleHAtc3Vic3RpdHV0ZS9nbG9iYWwKLSAg ICAgICAgICAgICAgICNmIHJ4IHNleHAKLSAgICAgICAgICAgICAgICdwcmUgcHJlLW1hdGNoIDIg cG9zdC1tYXRjaCAncG9zdCkpKQotICAgICAgICAgICAoXyBzZXhwKSkpCi0gICAgICAgc2V4cC1s aWtlLWNvbmQKLSAgICAgICA7OyAoJWN1cnJlbnQtc3lzdGVtKSByZXR1cm5zLCBlLmcuLCAieDg2 XzY0LWxpbnV4IiBvciAiaTY4Ni1saW51eCIuCi0gICAgICAgJygoIihvc3xhcmNoKSIgIihzdHJp bmctbWF0Y2ggXCIiICJcIiAoJWN1cnJlbnQtc3lzdGVtKSkiKSkpCi0gICAgcmVhZCkpCi0KLShk ZWZpbmUgKGV2YWwtaW1wbCBzZXhwLWxpa2UtY29uZCkKLSAgIkNoZWNrIGZvciB0aGUgQ2FiYWwg dGVzdCBcImltcGwoLi4uKVwiIGluIHRoZSBzdHJpbmcgU0VYUC1MSUtFLUNPTkQuCi1Bc3N1bWUg dGhlIG1vZHVsZSBkZWNsYXJpbmcgdGhlIGdlbmVyYXRlZCBwYWNrYWdlIGluY2x1ZGVzIGEgbG9j YWwgdmFyaWFibGUKLWNhbGxlZCBcImhhc2tlbGwtaW1wbGVtZW50YXRpb25cIiB3aXRoIGEgc3Ry aW5nIHZhbHVlIG9mIHRoZSBmb3JtIE5BTUUtVkVSU0lPTgotYWdhaW5zdCB3aGljaCB3ZSBjb21w YXJlLiIKLSAgKHdpdGgtb3V0cHV0LXRvLXN0cmluZwotICAgIChsYW1iZGEgKCkKLSAgICAgICh3 cml0ZQotICAgICAgICh3aXRoLWlucHV0LWZyb20tc3RyaW5nIAotICAgICAgICAgICAoZm9sZC1y aWdodAotICAgICAgICAgICAgKGxhbWJkYSAodGVzdCBzZXhwKQotICAgICAgICAgICAgICAobWF0 Y2ggdGVzdAotICAgICAgICAgICAgICAgICgocHJlLW1hdGNoIHBvc3QtbWF0Y2gpCi0gICAgICAg ICAgICAgICAgIChsZXQgKChyeC13aXRoLXZlcnNpb24KLSAgICAgICAgICAgICAgICAgICAgICAg IChtYWtlLXJlZ2V4cAotICAgICAgICAgICAgICAgICAgICAgICAgIChzdHJpbmctYXBwZW5kCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICJpbXBsIiB0ZXN0LWtleXdvcmQtb3JuYW1lbnQKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgIihbYS16QS1aMC05Xy1dKykgKihbPD49XSspICooWzAt OS5dKykgKiIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdC1rZXl3b3JkLW9ybmFtZW50 KSkpCi0gICAgICAgICAgICAgICAgICAgICAgIChyeC13aXRob3V0LXZlcnNpb24KLSAgICAgICAg ICAgICAgICAgICAgICAgIChtYWtlLXJlZ2V4cAotICAgICAgICAgICAgICAgICAgICAgICAgIChz dHJpbmctYXBwZW5kICJpbXBsIiB0ZXN0LWtleXdvcmQtb3JuYW1lbnQgIihcXHcrKSIKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0LWtleXdvcmQtb3JuYW1lbnQp KSkpCi0gICAgICAgICAgICAgICAgICAgKGlmIChyZWdleHAtZXhlYyByeC13aXRoLXZlcnNpb24g c2V4cCkKLSAgICAgICAgICAgICAgICAgICAgICAgKHJlZ2V4cC1zdWJzdGl0dXRlL2dsb2JhbAot ICAgICAgICAgICAgICAgICAgICAgICAgI2Ygcngtd2l0aC12ZXJzaW9uIHNleHAKLSAgICAgICAg ICAgICAgICAgICAgICAgICdwcmUgcHJlLW1hdGNoIDIgIiAiIHBvc3QtbWF0Y2ggIiBcIiIgMSAi LSIgMyAiXCIpIiAncG9zdCkKLSAgICAgICAgICAgICAgICAgICAgICAgKHJlZ2V4cC1zdWJzdGl0 dXRlL2dsb2JhbAotICAgICAgICAgICAgICAgICAgICAgICAgI2Ygcngtd2l0aG91dC12ZXJzaW9u IHNleHAKLSAgICAgICAgICAgICAgICAgICAgICAgICdwcmUgcHJlLW1hdGNoICItbWF0Y2ggXCIi IDEgIlwiICIgcG9zdC1tYXRjaCAiKSIgJ3Bvc3QpKSkpCi0gICAgICAgICAgICAgICAgKF8gc2V4 cCkpKQotICAgICAgICAgICAgc2V4cC1saWtlLWNvbmQKLSAgICAgICAgICAgICcoKCIoc3RyaW5n IiAiaGFza2VsbC1pbXBsZW1lbnRhdGlvbiIpKSkKLSAgICAgICAgIHJlYWQpKSkpKQotCi0oZGVm aW5lIChldmFsLWNhYmFsLWtleXdvcmRzIHNleHAtbGlrZS1jb25kIGZsYWdzKQotICAoKGNvbXBv c2UgZXZhbC10ZXN0cy0+c2V4cCBldmFsLWltcGwgKGN1dCBldmFsLWZsYWdzIDw+IGZsYWdzKSkK LSAgIHNleHAtbGlrZS1jb25kKSkKLQotKGRlZmluZSAoa2V5LT52YWx1ZXMgbWV0YSBrZXkpCi0g ICJNRVRBIGlzIHRoZSByZXByZXNlbnRhdGlvbiBvZiBhIENhYmFsIGZpbGUgYXMgcHJvZHVjZWQg YnkgJ3JlYWQtY2FiYWwnLgotUmV0dXJuIHRoZSBsaXN0IG9mIHZhbHVlcyBhc3NvY2lhdGVkIHdp dGggYSBzcGVjaWZpYyBLRVkgKGEgc3RyaW5nKS4iCi0gIChtYXRjaCBtZXRhCi0gICAgKCgpICco KSkKLSAgICAoKCgoKD8gKGxhbWJkYSh4KSAoZXF1YWw/IHgga2V5KSkpKSB2KSByIC4uLikKLSAg ICAgdikKLSAgICAoKChrIHYpIHIgLi4uKQotICAgICAoa2V5LT52YWx1ZXMgKGNkciBtZXRhKSBr ZXkpKQotICAgIChfICJrZXkgTm90IGZvdW50IikpKQotCi0oZGVmaW5lIChrZXktc3RhcnQtZW5k LT5lbnRyaWVzIG1ldGEga2V5LXN0YXJ0LXJ4IGtleS1lbmQtcngpCi0gICJNRVRBIGlzIHRoZSBy ZXByZXNlbnRhdGlvbiBvZiBhIENhYmFsIGZpbGUgYXMgcHJvZHVjZWQgYnkgJ3JlYWQtY2FiYWwn LgotUmV0dXJuIGFsbCBlbnRyaWVzIHdob3NlIGtleXMgbGlzdCBzdGFydHMgd2l0aCBLRVktU1RB UlQgYW5kIGVuZHMgd2l0aAotS0VZLUVORC4iCi0gIChsZXQgKChwcmVkCi0gICAgICAgICAobGFt YmRhICh4KQotICAgICAgICAgICAoYW5kIChyZWdleHAtZXhlYyBrZXktc3RhcnQtcnggKGZpcnN0 IHgpKQotICAgICAgICAgICAgICAgIChyZWdleHAtZXhlYyBrZXktZW5kLXJ4IChsYXN0IHgpKSkp KSkKLSAgICAgICAgICAgOzsgKGVxdWFsPyAobGlzdCBrZXktc3RhcnQga2V5LWVuZCkgKGxpc3Qg KGZpcnN0IHgpIChsYXN0IHgpKSkpKSkKLSAgICAobWF0Y2ggbWV0YQotICAgICAgKCgpICcoKSkK LSAgICAgICgoKCg/IHByZWQgaykgdikgciAuLi4pCi0gICAgICAgKGNvbnMgYCgsayAsdikKLSAg ICAgICAgICAgICAoa2V5LXN0YXJ0LWVuZC0+ZW50cmllcyAoY2RyIG1ldGEpIGtleS1zdGFydC1y eCBrZXktZW5kLXJ4KSkpCi0gICAgICAoKChrIHYpIHIgLi4uKQotICAgICAgIChrZXktc3RhcnQt ZW5kLT5lbnRyaWVzIChjZHIgbWV0YSkga2V5LXN0YXJ0LXJ4IGtleS1lbmQtcngpKQotICAgICAg KF8gImtleSBOb3QgZm91bnQiKSkpKQotCi0oZGVmaW5lIGVsc2UtcngKLSAgKG1ha2UtcmVnZXhw ICJeZWxzZSQiKSkKLQotKGRlZmluZSAoY291bnQtaWYtZWxzZSByeC1yZXN1bHQtbHMpCi0gIChh cHBseSArIChtYXAgKGxhbWJkYSAobSkgKGlmIG0gMSAwKSkgcngtcmVzdWx0LWxzKSkpCi0KLShk ZWZpbmUgKGFuYWx5emUtZW50cnktY29uZCBlbnRyeSkKLSAgKGxldCogKChrZXlzIChmaXJzdCBl bnRyeSkpCi0gICAgICAgICAodmFscyAoc2Vjb25kIGVudHJ5KSkKLSAgICAgICAgIChyeC1jb25k LXJlc3VsdAotICAgICAgICAgIChtYXAgKGN1dCByZWdleHAtZXhlYyBjb25kaXRpb24tcnggPD4p IGtleXMpKQotICAgICAgICAgKHJ4LWVsc2UtcmVzdWx0Ci0gICAgICAgICAgKG1hcCAoY3V0IHJl Z2V4cC1leGVjIGVsc2UtcnggPD4pIGtleXMpKQotICAgICAgICAgKGNvbmQtbm8gKGNvdW50LWlm LWVsc2UgcngtY29uZC1yZXN1bHQpKQotICAgICAgICAgKGVsc2Utbm8gKGNvdW50LWlmLWVsc2Ug cngtZWxzZS1yZXN1bHQpKQotICAgICAgICAgKGNvbmQtaWR4IChsaXN0LWluZGV4IChsYW1iZGEg KHJ4KSAoaWYgcnggI3QgI2YpKSByeC1jb25kLXJlc3VsdCkpCi0gICAgICAgICAoZWxzZS1pZHgg KGxpc3QtaW5kZXggKGxhbWJkYSAocngpIChpZiByeCAjdCAjZikpIHJ4LWVsc2UtcmVzdWx0KSkK LSAgICAgICAgIChrZXktY29uZAotICAgICAgICAgICAgICAoY29uZAotICAgICAgICAgICAgICAg KChvciAoYW5kIGNvbmQtaWR4IGVsc2UtaWR4ICg8IGNvbmQtaWR4IGVsc2UtaWR4KSkKLSAgICAg ICAgICAgICAgICAgICAgKGFuZCBjb25kLWlkeCAobm90IGVsc2UtaWR4KSkpCi0gICAgICAgICAg ICAgICAgKG1hdGNoOnN1YnN0cmluZwotICAgICAgICAgICAgICAgICAocmVjZWl2ZSAoaGVhZCB0 YWlsKQotICAgICAgICAgICAgICAgICAgICAgKHNwbGl0LWF0IHJ4LWNvbmQtcmVzdWx0IGNvbmQt aWR4KSAoZmlyc3QgdGFpbCkpKSkKLSAgICAgICAgICAgICAgICgob3IgKGFuZCBjb25kLWlkeCBl bHNlLWlkeCAoPiBjb25kLWlkeCBlbHNlLWlkeCkpCi0gICAgICAgICAgICAgICAgICAgIChhbmQg KG5vdCBjb25kLWlkeCkgZWxzZS1pZHgpKQotICAgICAgICAgICAgICAgIChtYXRjaDpzdWJzdHJp bmcKLSAgICAgICAgICAgICAgICAgKHJlY2VpdmUgKGhlYWQgdGFpbCkKLSAgICAgICAgICAgICAg ICAgICAgIChzcGxpdC1hdCByeC1lbHNlLXJlc3VsdCBlbHNlLWlkeCkgKGZpcnN0IHRhaWwpKSkp Ci0gICAgICAgICAgICAgICAoZWxzZQotICAgICAgICAgICAgICAgICIiKSkpKQotICAgICh2YWx1 ZXMga2V5cyB2YWxzIHJ4LWNvbmQtcmVzdWx0Ci0gICAgICAgICAgICByeC1lbHNlLXJlc3VsdCBj b25kLW5vIGVsc2Utbm8ga2V5LWNvbmQpKSkKLQotKGRlZmluZSAocmVtb3ZlLWNvbmQgZW50cnkg Y29uZCkKLSAgKG1hdGNoIGVudHJ5Ci0gICAgKChrIHYpCi0gICAgIChsaXN0IChjZHIgKG1lbWJl ciBjb25kIGspKSB2KSkpKQotCi0oZGVmaW5lIChncm91cC1hbmQtcmVkdWNlLWxldmVsIGVudHJp ZXMgZ3JvdXAgZ3JvdXAtY29uZCkKLSAgKGxldCBsb29wCi0gICAgICAoKHRydWUtZ3JvdXAgZ3Jv dXApCi0gICAgICAgKGZhbHNlLWdyb3VwICcoKSkKLSAgICAgICAoZW50cmllcyBlbnRyaWVzKSkK LSAgICAoaWYgKG51bGw/IGVudHJpZXMpCi0gICAgICAgICh2YWx1ZXMgKHJldmVyc2UgdHJ1ZS1n cm91cCkgKHJldmVyc2UgZmFsc2UtZ3JvdXApIGVudHJpZXMpCi0gICAgICAgIChsZXQqLXZhbHVl cyAoKChlbnRyeSkgKGZpcnN0IGVudHJpZXMpKQotICAgICAgICAgICAgICAgICAgICAgICgoa2V5 cyB2YWxzIHJ4LWNvbmQtcmVzdWx0IHJ4LWVsc2UtcmVzdWx0Ci0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGNvbmQtbm8gZWxzZS1ubyBrZXktY29uZCkKLSAgICAgICAgICAgICAgICAgICAg ICAgKGFuYWx5emUtZW50cnktY29uZCBlbnRyeSkpKQotICAgICAgICAgIChjb25kCi0gICAgICAg ICAgICgoYW5kICg+PSAoKyBjb25kLW5vIGVsc2Utbm8pIDEpIChzdHJpbmc9IGdyb3VwLWNvbmQg a2V5LWNvbmQpKQotICAgICAgICAgICAgKGxvb3AgKGNvbnMgKHJlbW92ZS1jb25kIGVudHJ5IGdy b3VwLWNvbmQpIHRydWUtZ3JvdXApIGZhbHNlLWdyb3VwCi0gICAgICAgICAgICAgICAgICAoY2Ry IGVudHJpZXMpKSkKLSAgICAgICAgICAgKChhbmQgKD49ICgrIGNvbmQtbm8gZWxzZS1ubykgMSkg KHN0cmluZz0ga2V5LWNvbmQgImVsc2UiKSkKLSAgICAgICAgICAgIChsb29wIHRydWUtZ3JvdXAg KGNvbnMgKHJlbW92ZS1jb25kIGVudHJ5ICJlbHNlIikgZmFsc2UtZ3JvdXApCi0gICAgICAgICAg ICAgICAgICAoY2RyIGVudHJpZXMpKSkKLSAgICAgICAgICAgKGVsc2UKLSAgICAgICAgICAgICh2 YWx1ZXMgKHJldmVyc2UgdHJ1ZS1ncm91cCkgKHJldmVyc2UgZmFsc2UtZ3JvdXApIGVudHJpZXMp KSkpKSkpCi0KLShkZWZpbmUgZGVwZW5kZW5jaWVzLXJ4Ci0gIChtYWtlLXJlZ2V4cCAiKFthLXpB LVowLTlfLV0rKSAqW14sXSosPyIpKQotCiAoZGVmaW5lIChoYWNrYWdlLW5hbWUtPnBhY2thZ2Ut bmFtZSBuYW1lKQorICAiR2l2ZW4gdGhlIE5BTUUgb2YgYSBDYWJhbCBwYWNrYWdlLCByZXR1cm4g dGhlIGNvcnJlc3BvbmRpbmcgR3VpeCBuYW1lLiIKICAgKGlmIChzdHJpbmctcHJlZml4PyBwYWNr YWdlLW5hbWUtcHJlZml4IG5hbWUpCiAgICAgICAoc3RyaW5nLWRvd25jYXNlIG5hbWUpCiAgICAg ICAoc3RyaW5nLWFwcGVuZCBwYWNrYWdlLW5hbWUtcHJlZml4IChzdHJpbmctZG93bmNhc2UgbmFt ZSkpKSkKIAotKGRlZmluZSAoc3BsaXQtYW5kLWZpbHRlci1kZXBlbmRlbmNpZXMgbHMgbmFtZXMt dG8tZmlsdGVyKQotICAiU3BsaXQgdGhlIGNvbW1hIHNlcGFyYXRlZCBsaXN0IG9mIGRlcGVuZGVu Y2llcyBMUyBjb21pbmcgZnJvbSB0aGUgQ2FiYWwKLWZpbGUsIGZpbHRlciBwYWNrYWdlcyBpbmNs dWRlZCBpbiBOQU1FUy1UTy1GSUxURVIgYW5kIHJldHVybiBhIGxpc3Qgd2l0aAotaW5wdXRzIHN1 aXRhYmxlIGZvciB0aGUgR3VpeCBwYWNrYWdlLiAgQ3VycmVudGx5IHRoZSB2ZXJzaW9uIGluZm9y bWF0aW9uIGlzCi1kaXNjYXJkZWQuIgotICAoZGVmaW5lIChzcGxpdC1hdC1jb21tYS1hbmQtZmls dGVyIGQpCi0gICAgKGZvbGQKLSAgICAgKGxhbWJkYSAobSBzZWVkKQotICAgICAgIChsZXQqICgo bmFtZSAoc3RyaW5nLWRvd25jYXNlIChtYXRjaDpzdWJzdHJpbmcgbSAxKSkpCi0gICAgICAgICAg ICAgIChwa2ctbmFtZSAoaGFja2FnZS1uYW1lLT5wYWNrYWdlLW5hbWUgbmFtZSkpKQotICAgICAg ICAgKGlmIChtZW1iZXIgbmFtZSBuYW1lcy10by1maWx0ZXIpCi0gICAgICAgICAgICAgc2VlZAot ICAgICAgICAgICAgIChjb25zIChsaXN0IHBrZy1uYW1lIChsaXN0ICd1bnF1b3RlIChzdHJpbmct PnN5bWJvbCBwa2ctbmFtZSkpKQotICAgICAgICAgICAgICAgICAgIHNlZWQpKSkpCi0gICAgICco KQotICAgICAobGlzdC1tYXRjaGVzIGRlcGVuZGVuY2llcy1yeCBkKSkpCi0gICAgCi0gIChmb2xk IChsYW1iZGEgKGQgcCkgKGFwcGVuZCAoc3BsaXQtYXQtY29tbWEtYW5kLWZpbHRlciBkKSBwKSkg JygpICBscykpCi0KLShkZWZpbmUqIChkZXBlbmRlbmNpZXMtY29uZC0+c2V4cCBtZXRhICM6a2V5 IChpbmNsdWRlLXRlc3QtZGVwZW5kZW5jaWVzPyAjdCkpCi0gICJNRVRBIGlzIHRoZSByZXByZXNl bnRhdGlvbiBvZiBhIENhYmFsIGZpbGUgYXMgcHJvZHVjZWQgYnkgJ3JlYWQtY2FiYWwnLgotUmV0 dXJuIGFuIFMtZXhwcmVzc2lvbiBjb250YWluaW5nIHRoZSBsaXN0IG9mIGRlcGVuZGVuY2llcyBh cyBleHBlY3RlZCBieSB0aGUKLSdpbnB1dHMnIGZpZWxkIG9mIGEgcGFja2FnZS4gIFRoZSBnZW5l cmF0ZWQgUy1leHByZXNzaW9ucyBtYXkgaW5jbHVkZQotY29uZGl0aW9uYWxzIGFzIGRlZmluZWQg aW4gdGhlIGNhYmFsIGZpbGUuICBEdXJpbmcgdGhpcyBwcm9jZXNzIHdlIGRpc2NhcmQgdGhlCi12 ZXJzaW9uIGluZm9ybWF0aW9uIG9mIHRoZSBwYWNrYWdlcy4iCi0gIChkZWZpbmUgKHRha2UtZGVw ZW5kZW5jaWVzIG1ldGEpCi0gICAgKGxldCAoKGtleS1zdGFydC1leGUgKG1ha2UtcmVnZXhwICJl eGVjdXRhYmxlIikpCi0gICAgICAgICAgKGtleS1zdGFydC1saWIgKG1ha2UtcmVnZXhwICJsaWJy YXJ5IikpCi0gICAgICAgICAgKGtleS1zdGFydC10ZXN0cyAobWFrZS1yZWdleHAgInRlc3Qtc3Vp dGUiKSkKLSAgICAgICAgICAoa2V5LWVuZCAobWFrZS1yZWdleHAgImJ1aWxkLWRlcGVuZHMiKSkp Ci0gICAgICAoYXBwZW5kCi0gICAgICAgKGtleS1zdGFydC1lbmQtPmVudHJpZXMgbWV0YSBrZXkt c3RhcnQtZXhlIGtleS1lbmQpCi0gICAgICAgKGtleS1zdGFydC1lbmQtPmVudHJpZXMgbWV0YSBr ZXktc3RhcnQtbGliIGtleS1lbmQpCi0gICAgICAgKGlmIGluY2x1ZGUtdGVzdC1kZXBlbmRlbmNp ZXM/Ci0gICAgICAgICAgIChrZXktc3RhcnQtZW5kLT5lbnRyaWVzIG1ldGEga2V5LXN0YXJ0LXRl c3RzIGtleS1lbmQpCi0gICAgICAgICAgICcoKSkpKSkKLQotICAobGV0ICgoZmxhZ3MgKGdldC1m bGFncyAocHJlLXByb2Nlc3MtZW50cmllcy1rZXlzIG1ldGEpKSkKLSAgICAgICAgKGF1Z21lbnRl ZC1naGMtc3RkLWxpYnMgKGFwcGVuZCAoa2V5LT52YWx1ZXMgbWV0YSAibmFtZSIpCi0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2hjLXN0YW5kYXJkLWxpYnJhcmllcykp KQotICAgIChkZWxldGUtZHVwbGljYXRlcwotICAgICAobGV0IGxvb3AgKChlbnRyaWVzICh0YWtl LWRlcGVuZGVuY2llcyBtZXRhKSkKLSAgICAgICAgICAgICAgICAocmVzdWx0ICcoKSkpCi0gICAg ICAgKGlmIChudWxsPyBlbnRyaWVzKQotICAgICAgICAgICAocmV2ZXJzZSByZXN1bHQpCi0gICAg ICAgICAgIChsZXQqLXZhbHVlcyAoKChlbnRyeSkgKGZpcnN0IGVudHJpZXMpKQotICAgICAgICAg ICAgICAgICAgICAgICAgICgoa2V5cyB2YWxzIHJ4LWNvbmQtcmVzdWx0IHJ4LWVsc2UtcmVzdWx0 Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmQtbm8gZWxzZS1ubyBrZXktY29u ZCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgKGFuYWx5emUtZW50cnktY29uZCBlbnRyeSkp KQotICAgICAgICAgICAgIChjb25kCi0gICAgICAgICAgICAgICgoPSAoKyBjb25kLW5vIGVsc2Ut bm8pIDApCi0gICAgICAgICAgICAgICAobG9vcCAoY2RyIGVudHJpZXMpCi0gICAgICAgICAgICAg ICAgICAgICAoYXBwZW5kCi0gICAgICAgICAgICAgICAgICAgICAgKHNwbGl0LWFuZC1maWx0ZXIt ZGVwZW5kZW5jaWVzIHZhbHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgYXVnbWVudGVkLWdoYy1zdGQtbGlicykKLSAgICAgICAgICAgICAgICAg ICAgICByZXN1bHQpKSkKLSAgICAgICAgICAgICAgKGVsc2UKLSAgICAgICAgICAgICAgIChsZXQt dmFsdWVzICgoKHRydWUtZ3JvdXAgZmFsc2UtZ3JvdXAgZW50cmllcykKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgKGdyb3VwLWFuZC1yZWR1Y2UtbGV2ZWwgZW50cmllcyAnKCkKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5LWNvbmQp KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoY29uZC1maW5hbCkgKGV2YWwtY2FiYWwt a2V5d29yZHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29u ZGl0aW9uYWwtPnNleHAtbGlrZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAobGFzdCAoc3BsaXQtc2VjdGlvbiBrZXktY29uZCkpKQotICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsYWdzKSkpCi0gICAgICAgICAgICAgICAgIChs b29wIGVudHJpZXMKLSAgICAgICAgICAgICAgICAgICAgICAgKGNvbmQKLSAgICAgICAgICAgICAg ICAgICAgICAgICgob3IgKGVxPyBjb25kLWZpbmFsICN0KSAoZXF1YWw/IGNvbmQtZmluYWwgJyhu b3QgI2YpKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAoYXBwZW5kIChsb29wIHRydWUtZ3Jv dXAgJygpKSByZXN1bHQpKQotICAgICAgICAgICAgICAgICAgICAgICAgKChvciAoZXE/IGNvbmQt ZmluYWwgI2YpIChlcXVhbD8gY29uZC1maW5hbCAnKG5vdCAjdCkpKQotICAgICAgICAgICAgICAg ICAgICAgICAgIChhcHBlbmQgKGxvb3AgZmFsc2UtZ3JvdXAgJygpKSByZXN1bHQpKQotICAgICAg ICAgICAgICAgICAgICAgICAgKGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgICAobGV0ICgo dHJ1ZS1ncm91cC1yZXN1bHQgKGxvb3AgdHJ1ZS1ncm91cCAnKCkpKQotICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIChmYWxzZS1ncm91cC1yZXN1bHQgKGxvb3AgZmFsc2UtZ3JvdXAgJygp KSkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uZAotICAgICAgICAgICAgICAgICAg ICAgICAgICAgICgoYW5kIChudWxsPyB0cnVlLWdyb3VwLXJlc3VsdCkKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAobnVsbD8gZmFsc2UtZ3JvdXAtcmVzdWx0KSkKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgcmVzdWx0KQotICAgICAgICAgICAgICAgICAgICAgICAgICAg ICgobnVsbD8gZmFsc2UtZ3JvdXAtcmVzdWx0KQotICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAoY29ucyBgKHVucXVvdGUtc3BsaWNpbmcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAod2hlbiAsY29uZC1maW5hbCAsdHJ1ZS1ncm91cC1yZXN1bHQpKQotICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQpKQotICAgICAgICAgICAgICAgICAgICAg ICAgICAgICgobnVsbD8gdHJ1ZS1ncm91cC1yZXN1bHQpCi0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgIChjb25zIGAodW5xdW90ZS1zcGxpY2luZwotICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICh1bmxlc3MgLGNvbmQtZmluYWwgLGZhbHNlLWdyb3VwLXJlc3VsdCkpCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCkpCi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgKGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnMg YCh1bnF1b3RlLXNwbGljaW5nCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg KGlmICxjb25kLWZpbmFsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICx0cnVlLWdyb3VwLXJlc3VsdAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAsZmFsc2UtZ3JvdXAtcmVzdWx0KSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgcmVzdWx0KSkpKSkpKSkpKSkpKSkpKQotCi07OyBQYXJ0IDM6Ci07OwotOzsgUmV0cml2 ZSB0aGUgZGVzaXJlZCBwYWNrYWdlIGFuZCBpdHMgQ2FiYWwgZmlsZSBmcm9tCi07OyBodHRwOi8v aGFja2FnZS5oYXNrZWxsLm9yZyBhbmQgY29uc3RydWN0IHRoZSBHdWl4IHBhY2thZ2UgUy1leHBy ZXNzaW9uLgotCiAoZGVmaW5lIChoYWNrYWdlLWZldGNoIG5hbWUtdmVyc2lvbikKICAgIlJldHVy biB0aGUgQ2FiYWwgZmlsZSBmb3IgdGhlIHBhY2thZ2UgTkFNRS1WRVJTSU9OLCBvciAjZiBvbiBm YWlsdXJlLiAgSWYKIHRoZSB2ZXJzaW9uIHBhcnQgaXMgb21pdHRlZCBmcm9tIHRoZSBwYWNrYWdl IG5hbWUsIHRoZW4gcmV0dXJuIHRoZSBsYXRlc3QKQEAgLTY5NiwzMyArMTExLDYzIEBAIHZlcnNp b24uIgogICAgKChsc3QgLi4uKSBgKGxpc3QgLEAobWFwIHN0cmluZy0+bGljZW5zZSBsc3QpKSkK ICAgIChfICNmKSkpCiAKLShkZWZpbmUqIChoYWNrYWdlLW1vZHVsZS0+c2V4cCBtZXRhICM6a2V5 IChpbmNsdWRlLXRlc3QtZGVwZW5kZW5jaWVzPyAjdCkpCi0gICJSZXR1cm4gdGhlIGBwYWNrYWdl JyBTLWV4cHJlc3Npb24gZm9yIGEgQ2FiYWwgcGFja2FnZS4gIE1FVEEgaXMgdGhlCisKKyhkZWZp bmUgKGNhYmFsLWRlcGVuZGVuY2llcy0+bmFtZXMgY2FiYWwgaW5jbHVkZS10ZXN0LWRlcGVuZGVu Y2llcz8pCisgICJSZXR1cm4gdGhlIGxpc3Qgb2YgZGVwZW5kZW5jaWVzIG5hbWVzIGZyb20gdGhl IENBQkFMIHBhY2thZ2Ugb2JqZWN0LiAgSWYKK0lOQ0xVREUtVEVTVC1ERVBFTkRFTkNJRVM/IGlz ICNmLCBkbyBub3QgaW5jbHVkZSBkZXBlbmRlbmNpZXMgcmVxdWlyZWQgYnkgdGVzdAorc3VpdGVz LiIKKyAgKGxldCogKChsaWIgKGNhYmFsLXBhY2thZ2UtbGlicmFyeSBjYWJhbCkpCisgICAgICAg ICAobGliLWRlcHMgKGlmIChwYWlyPyBsaWIpCisgICAgICAgICAgICAgICAgICAgICAgIChtYXAg Y2FiYWwtZGVwZW5kZW5jeS1uYW1lCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGFwcGVu ZC1tYXAgY2FiYWwtbGlicmFyeS1kZXBlbmRlbmNpZXMgbGliKSkKKyAgICAgICAgICAgICAgICAg ICAgICAgJygpKSkKKyAgICAgICAgIChleGUgKGNhYmFsLXBhY2thZ2UtZXhlY3V0YWJsZXMgY2Fi YWwpKQorICAgICAgICAgKGV4ZS1kZXBzIChpZiAocGFpcj8gZXhlKQorICAgICAgICAgICAgICAg ICAgICAgICAobWFwIGNhYmFsLWRlcGVuZGVuY3ktbmFtZQorICAgICAgICAgICAgICAgICAgICAg ICAgICAgIChhcHBlbmQtbWFwIGNhYmFsLWV4ZWN1dGFibGUtZGVwZW5kZW5jaWVzIGV4ZSkpCisg ICAgICAgICAgICAgICAgICAgICAgICcoKSkpCisgICAgICAgICAodHMgKGNhYmFsLXBhY2thZ2Ut dGVzdC1zdWl0ZXMgY2FiYWwpKQorICAgICAgICAgKHRzLWRlcHMgKGlmIChwYWlyPyB0cykKKyAg ICAgICAgICAgICAgICAgICAgICAgKG1hcCBjYWJhbC1kZXBlbmRlbmN5LW5hbWUKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAoYXBwZW5kLW1hcCBjYWJhbC10ZXN0LXN1aXRlLWRlcGVuZGVu Y2llcyB0cykpCisgICAgICAgICAgICAgICAgICAgICAgICcoKSkpKQorICAgIChpZiBpbmNsdWRl LXRlc3QtZGVwZW5kZW5jaWVzPworICAgICAgICAoZGVsZXRlLWR1cGxpY2F0ZXMgKGFwcGVuZCBs aWItZGVwcyBleGUtZGVwcyB0cy1kZXBzKSkKKyAgICAgICAgKGRlbGV0ZS1kdXBsaWNhdGVzIChh cHBlbmQgbGliLWRlcHMgZXhlLWRlcHMpKSkpKQorCisoZGVmaW5lIChmaWx0ZXItZGVwZW5kZW5j aWVzIGRlcGVuZGVuY2llcyBvd24tbmFtZSkKKyAgIkZpbHRlciB0aGUgZGVwZW5kZW5jaWVzIGlu Y2x1ZGVkIHdpdGggdGhlIEdIQyBjb21waWxlciBmcm9tIERFUEVOREVOQ0lFUywgYQorbGlzdCB3 aXRoIHRoZSBuYW1lcyBvZiBkZXBlbmRlbmNpZXMuICBPV04tTkFNRSBpcyB0aGUgbmFtZSBvZiB0 aGUgQ2FiYWwKK3BhY2thZ2UgYmVpbmcgcHJvY2Vzc2VkIGFuZCBpcyB1c2VkIHRvIGZpbHRlciBy ZWZlcmVuY2VzIHRvIGl0c2VsZi4iCisgIChmaWx0ZXIgKGxhbWJkYSAoZCkgKG5vdCAobWVtYmVy IChzdHJpbmctZG93bmNhc2UgZCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg KGNvbnMgb3duLW5hbWUgZ2hjLXN0YW5kYXJkLWxpYnJhcmllcykpKSkKKyAgICAgICAgICBkZXBl bmRlbmNpZXMpKQorCisoZGVmaW5lKiAoaGFja2FnZS1tb2R1bGUtPnNleHAgY2FiYWwgIzprZXkg KGluY2x1ZGUtdGVzdC1kZXBlbmRlbmNpZXM/ICN0KSkKKyAgIlJldHVybiB0aGUgYHBhY2thZ2Un IFMtZXhwcmVzc2lvbiBmb3IgYSBDYWJhbCBwYWNrYWdlLiAgQ0FCQUwgaXMgdGhlCiByZXByZXNl bnRhdGlvbiBvZiBhIENhYmFsIGZpbGUgYXMgcHJvZHVjZWQgYnkgJ3JlYWQtY2FiYWwnLiIKIAog ICAoZGVmaW5lIG5hbWUKLSAgICAoZmlyc3QgKGtleS0+dmFsdWVzIG1ldGEgIm5hbWUiKSkpCisg ICAgKGNhYmFsLXBhY2thZ2UtbmFtZSBjYWJhbCkpCiAKICAgKGRlZmluZSB2ZXJzaW9uCi0gICAg KGZpcnN0IChrZXktPnZhbHVlcyBtZXRhICJ2ZXJzaW9uIikpKQotICAKLSAgKGRlZmluZSBkZXNj cmlwdGlvbgotICAgIChsZXQqLXZhbHVlcyAoKChkZXNjcmlwdGlvbikgKGtleS0+dmFsdWVzIG1l dGEgImRlc2NyaXB0aW9uIikpCi0gICAgICAgICAgICAgICAgICAoKGxpbmVzIGxhc3QpCi0gICAg ICAgICAgICAgICAgICAgKHNwbGl0LWF0IGRlc2NyaXB0aW9uICgtIChsZW5ndGggZGVzY3JpcHRp b24pIDEpKSkpCi0gICAgICAoZm9sZC1yaWdodCAobGFtYmRhIChsaW5lIHNlZWQpIChzdHJpbmct YXBwZW5kIGxpbmUgIlxuIiBzZWVkKSkKLSAgICAgICAgICAgICAgICAgIChmaXJzdCBsYXN0KSBs aW5lcykpKQorICAgIChjYWJhbC1wYWNrYWdlLXZlcnNpb24gY2FiYWwpKQogICAKICAgKGRlZmlu ZSBzb3VyY2UtdXJsCiAgICAgKHN0cmluZy1hcHBlbmQgImh0dHA6Ly9oYWNrYWdlLmhhc2tlbGwu b3JnL3BhY2thZ2UvIiBuYW1lCiAgICAgICAgICAgICAgICAgICAgIi8iIG5hbWUgIi0iIHZlcnNp b24gIi50YXIuZ3oiKSkKIAotICA7OyBTZXZlcmFsIHBhY2thZ2VzIGRvIG5vdCBoYXZlIGFuIG9m ZmljaWFsIGhvbWUtcGFnZSBvdGhlciB0aGFuIG9uIEhhY2thZ2UuCi0gIChkZWZpbmUgaG9tZS1w YWdlCi0gICAgKGxldCAoKGhvbWUtcGFnZS1lbnRyeSAoa2V5LT52YWx1ZXMgbWV0YSAiaG9tZXBh Z2UiKSkpCi0gICAgICAoaWYgKG51bGw/IGhvbWUtcGFnZS1lbnRyeSkKLSAgICAgICAgICAoc3Ry aW5nLWFwcGVuZCAiaHR0cDovL2hhY2thZ2UuaGFza2VsbC5vcmcvcGFja2FnZS8iIG5hbWUpCi0g ICAgICAgICAgKGZpcnN0IGhvbWUtcGFnZS1lbnRyeSkpKSkKKyAgKGRlZmluZSBkZXBlbmRlbmNp ZXMKKyAgICAobGV0ICgobmFtZXMKKyAgICAgICAgICAgKG1hcCBoYWNrYWdlLW5hbWUtPnBhY2th Z2UtbmFtZQorICAgICAgICAgICAgICAgICgoY29tcG9zZSAoY3V0IGZpbHRlci1kZXBlbmRlbmNp ZXMgPD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2FiYWwtcGFja2FnZS1uYW1l IGNhYmFsKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKGN1dCBjYWJhbC1kZXBlbmRlbmNp ZXMtPm5hbWVzIDw+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5jbHVkZS10ZXN0 LWRlcGVuZGVuY2llcz8pKQorICAgICAgICAgICAgICAgICBjYWJhbCkpKSkKKyAgICAgIChtYXAg KGxhbWJkYSAobmFtZSkKKyAgICAgICAgICAgICAobGlzdCBuYW1lIChsaXN0ICd1bnF1b3RlIChz dHJpbmctPnN5bWJvbCBuYW1lKSkpKQorICAgICAgICAgICBuYW1lcykpKQogICAKICAgKGRlZmlu ZSAobWF5YmUtaW5wdXRzIGlucHV0LXR5cGUgaW5wdXRzKQogICAgIChtYXRjaCBpbnB1dHMKQEAg LTc0NiwyMiArMTkxLDI4IEBAIHJlcHJlc2VudGF0aW9uIG9mIGEgQ2FiYWwgZmlsZSBhcyBwcm9k dWNlZCBieSAncmVhZC1jYWJhbCcuIgogICAgICAgICAgICAgICAgICAgICAgICAgKGJ5dGV2ZWN0 b3ItPm5peC1iYXNlMzItc3RyaW5nIChmaWxlLXNoYTI1NiB0YXJiYWxsKSkKICAgICAgICAgICAg ICAgICAgICAgICAgICJmYWlsZWQgdG8gZG93bmxvYWQgdGFyIGFyY2hpdmUiKSkpKSkKICAgICAg ICAoYnVpbGQtc3lzdGVtIGhhc2tlbGwtYnVpbGQtc3lzdGVtKQotICAgICAgICxAKG1heWJlLWlu cHV0cyAnaW5wdXRzCi0gICAgICAgICAgICAgICAgICAgICAgIChkZXBlbmRlbmNpZXMtY29uZC0+ c2V4cCBtZXRhCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAjOmluY2x1ZGUtdGVzdC1kZXBlbmRlbmNpZXM/Ci0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBpbmNsdWRlLXRlc3QtZGVwZW5kZW5jaWVzPykpCi0gICAg ICAgKGhvbWUtcGFnZSAsaG9tZS1wYWdlKQotICAgICAgIChzeW5vcHNpcyAsQChrZXktPnZhbHVl cyBtZXRhICJzeW5vcHNpcyIpKQotICAgICAgIChkZXNjcmlwdGlvbiAsZGVzY3JpcHRpb24pCi0g ICAgICAgKGxpY2Vuc2UgLChzdHJpbmctPmxpY2Vuc2UgKGtleS0+dmFsdWVzIG1ldGEgImxpY2Vu c2UiKSkpKSkpCi0KLShkZWZpbmUqIChoYWNrYWdlLT5ndWl4LXBhY2thZ2UgbW9kdWxlLW5hbWUK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIzprZXkgKGluY2x1ZGUtdGVzdC1kZXBl bmRlbmNpZXM/ICN0KSkKKyAgICAgICAsQChtYXliZS1pbnB1dHMgJ2lucHV0cyBkZXBlbmRlbmNp ZXMpCisgICAgICAgKGhvbWUtcGFnZSAsKGNhYmFsLXBhY2thZ2UtaG9tZS1wYWdlIGNhYmFsKSkK KyAgICAgICAoc3lub3BzaXMgLChjYWJhbC1wYWNrYWdlLXN5bm9wc2lzIGNhYmFsKSkKKyAgICAg ICAoZGVzY3JpcHRpb24gLChjYWJhbC1wYWNrYWdlLWRlc2NyaXB0aW9uIGNhYmFsKSkKKyAgICAg ICAobGljZW5zZSAsKHN0cmluZy0+bGljZW5zZSAoY2FiYWwtcGFja2FnZS1saWNlbnNlIGNhYmFs KSkpKSkpCisKKyhkZWZpbmUqIChoYWNrYWdlLT5ndWl4LXBhY2thZ2UgcGFja2FnZS1uYW1lICM6 a2V5CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbmNsdWRlLXRlc3QtZGVwZW5k ZW5jaWVzPyAjdCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNhYmFsLWVudmly b25tZW50ICcoKSkpCiAgICJGZXRjaCB0aGUgQ2FiYWwgZmlsZSBmb3IgUEFDS0FHRS1OQU1FIGZy b20gaGFja2FnZS5oYXNrZWxsLm9yZywgYW5kIHJldHVybgotdGhlIGBwYWNrYWdlJyBTLWV4cHJl c3Npb24gY29ycmVzcG9uZGluZyB0byB0aGF0IHBhY2thZ2UsIG9yICNmIG9uIGZhaWx1cmUuIgot ICAobGV0ICgobW9kdWxlLW1ldGEgKGhhY2thZ2UtZmV0Y2ggbW9kdWxlLW5hbWUpKSkKLSAgICAo YW5kPT4gbW9kdWxlLW1ldGEgKGN1dCBoYWNrYWdlLW1vZHVsZS0+c2V4cCA8PgotICAgICAgICAg ICAgICAgICAgICAgICAgICAgICM6aW5jbHVkZS10ZXN0LWRlcGVuZGVuY2llcz8KLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICBpbmNsdWRlLXRlc3QtZGVwZW5kZW5jaWVzPykpKSkKK3RoZSBg cGFja2FnZScgUy1leHByZXNzaW9uIGNvcnJlc3BvbmRpbmcgdG8gdGhhdCBwYWNrYWdlLCBvciAj ZiBvbiBmYWlsdXJlLgorQ0FCQUwtRU5WSVJPTk1FTlQgaXMgYW4gYWxpc3QgZGVmaW5pbmcgdGhl IGVudmlyb25tZW50IGluIHdoaWNoIHRoZSBDYWJhbAorY29uZGl0aW9uYWxzIGFyZSBldmFsdWF0 ZWQuICBUaGUgYWNjZXB0ZWQga2V5cyBhcmU6IFwib3NcIiwgXCJhcmNoXCIsIFwiaW1wbFwiCith bmQgdGhlIG5hbWUgb2YgYSBmbGFnLiAgVGhlIHZhbHVlIGFzc29jaWF0ZWQgd2l0aCBhIGZsYWcg aGFzIHRvIGJlIGVpdGhlciB0aGUKK3N5bWJvbCAndHJ1ZScgb3IgJ2ZhbHNlJy4gIFRoZSB2YWx1 ZSBhc3NvY2lhdGVkIHdpdGggb3RoZXIga2V5cyBoYXMgdG8gY29uZm9ybQordG8gdGhlIENhYmFs IGZpbGUgZm9ybWF0IGRlZmluaXRpb24uICBUaGUgZGVmYXVsdCB2YWx1ZSBhc3NvY2lhdGVkIHdp dGggdGhlCitrZXlzIFwib3NcIiwgXCJhcmNoXCIgYW5kIFwiaW1wbFwiIGlzIFwibGludXhcIiwg XCJ4ODZfNjRcIiBhbmQgXCJnaGNcIgorcmVzcGVjdGl2ZWx5LiIKKyAgKGxldCAoKGNhYmFsLW1l dGEgKGhhY2thZ2UtZmV0Y2ggcGFja2FnZS1uYW1lKSkpCisgICAgKGFuZD0+IGNhYmFsLW1ldGEg KGNvbXBvc2UgKGN1dCBoYWNrYWdlLW1vZHVsZS0+c2V4cCA8PgorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIzppbmNsdWRlLXRlc3QtZGVwZW5kZW5jaWVzPyAKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluY2x1ZGUtdGVzdC1kZXBlbmRlbmNpZXM/KQor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjdXQgZXZhbC1jYWJhbCA8PiBjYWJhbC1l bnZpcm9ubWVudCkpKSkpCiAKIDs7OyBjYWJhbC5zY20gZW5kcyBoZXJlCmRpZmYgLS1naXQgYS9n dWl4L3NjcmlwdHMvaW1wb3J0L2hhY2thZ2Uuc2NtIGIvZ3VpeC9zY3JpcHRzL2ltcG9ydC9oYWNr YWdlLnNjbQppbmRleCBmN2MxOGNkLi45MmZmOTQxIDEwMDY0NAotLS0gYS9ndWl4L3NjcmlwdHMv aW1wb3J0L2hhY2thZ2Uuc2NtCisrKyBiL2d1aXgvc2NyaXB0cy9pbXBvcnQvaGFja2FnZS5zY20K QEAgLTM0LDcgKzM0LDggQEAKIDs7OwogCiAoZGVmaW5lICVkZWZhdWx0LW9wdGlvbnMKLSAgJygo aW5jbHVkZS10ZXN0LWRlcGVuZGVuY2llcz8gLiAjdCkpKQorICAnKChpbmNsdWRlLXRlc3QtZGVw ZW5kZW5jaWVzPyAuICN0KQorICAgICgnY2FiYWwtZW52aXJvbm1lbnQgLiAnKCkpKSkKIAogKGRl ZmluZSAoc2hvdy1oZWxwKQogICAoZGlzcGxheSAoXyAiVXNhZ2U6IGd1aXggaW1wb3J0IGhhY2th Z2UgUEFDS0FHRS1OQU1FCkBAIC00NSw2ICs0Niw5IEBAIHBhY2thZ2Ugd2lsbCBiZSBnZW5lcmF0 ZWQuICBJZiBubyB2ZXJzaW9uIHN1ZmZpeCBpcyBwZWNpZmllZCwgdGhlbiB0aGUKIGdlbmVyYXRl ZCBwYWNrYWdlIGRlZmluaXRpb24gd2lsbCBjb3JyZXNwb25kIHRvIHRoZSBsYXRlc3QgYXZhaWxh YmxlCiB2ZXJzaW9uLlxuIikpCiAgIChkaXNwbGF5IChfICIKKyAgLWUgQUxJU1QsIC0tY2FiYWwt ZW52aXJvbm1lbnQ9QUxJU1QgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGVj aWZ5IGVudmlyb25tZW50IGZvciBDYWJhbCBldmFsdWF0aW9uIikpCisgIChkaXNwbGF5IChfICIK ICAgLWgsIC0taGVscCAgICAgICAgICAgICAgICAgICBkaXNwbGF5IHRoaXMgaGVscCBhbmQgZXhp dCIpKQogICAoZGlzcGxheSAoXyAiCiAgIC10LCAtLW5vLXRlc3QtZGVwZW5kZW5jaWVzICAgZG9u J3QgaW5jbHVkZSB0ZXN0IG9ubHkgZGVwZW5kZW5jaWVzIikpCkBAIC02Nyw2ICs3MSwxMSBAQCB2 ZXJzaW9uLlxuIikpCiAgICAgICAgICAgICAgICAgICAgKGFsaXN0LWNvbnMgJ2luY2x1ZGUtdGVz dC1kZXBlbmRlbmNpZXM/ICNmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGFsaXN0 LWRlbGV0ZSAnaW5jbHVkZS10ZXN0LWRlcGVuZGVuY2llcz8KICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCkpKSkKKyAgICAgICAgIChvcHRpb24gJygj XGUgImNhYmFsLWVudmlyb25tZW50IikgI3QgI2YKKyAgICAgICAgICAgICAgICAgKGxhbWJkYSAo b3B0IG5hbWUgYXJnIHJlc3VsdCkKKyAgICAgICAgICAgICAgICAgICAoYWxpc3QtY29ucyAnY2Fi YWwtZW52aXJvbm1lbnQgKHJlYWQvZXZhbCBhcmcpCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgKGFsaXN0LWRlbGV0ZSAnY2FiYWwtZW52aXJvbm1lbnQKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCkpKSkKICAgICAgICAgICVzdGFuZGFy ZC1pbXBvcnQtb3B0aW9ucykpCiAKIAwKQEAgLTk1LDcgKzEwNCw4IEBAIHZlcnNpb24uXG4iKSkK ICAgICAgICAobGV0ICgoc2V4cCAoaGFja2FnZS0+Z3VpeC1wYWNrYWdlCiAgICAgICAgICAgICAg ICAgICAgIHBhY2thZ2UtbmFtZQogICAgICAgICAgICAgICAgICAgICAjOmluY2x1ZGUtdGVzdC1k ZXBlbmRlbmNpZXM/Ci0gICAgICAgICAgICAgICAgICAgIChhc3NvYy1yZWYgb3B0cyAnaW5jbHVk ZS10ZXN0LWRlcGVuZGVuY2llcz8pKSkpCisgICAgICAgICAgICAgICAgICAgIChhc3NvYy1yZWYg b3B0cyAnaW5jbHVkZS10ZXN0LWRlcGVuZGVuY2llcz8pCisgICAgICAgICAgICAgICAgICAgICM6 Y2FiYWwtZW52aXJvbm1lbnQgKGFzc29jLXJlZiBvcHRzICdjYWJhbC1lbnZpcm9ubWVudCkpKSkK ICAgICAgICAgICh1bmxlc3Mgc2V4cAogICAgICAgICAgICAobGVhdmUgKF8gImZhaWxlZCB0byBk b3dubG9hZCBjYWJhbCBmaWxlIGZvciBwYWNrYWdlICd+YSd+JSIpCiAgICAgICAgICAgICAgICAg ICBwYWNrYWdlLW5hbWUpKQpkaWZmIC0tZ2l0IGEvdGVzdHMvaGFja2FnZS5zY20gYi90ZXN0cy9o YWNrYWdlLnNjbQppbmRleCAyM2I4NTRjLi5kY2E1MDc0IDEwMDY0NAotLS0gYS90ZXN0cy9oYWNr YWdlLnNjbQorKysgYi90ZXN0cy9oYWNrYWdlLnNjbQpAQCAtNjMsMTYgKzYzLDEzIEBAIGV4ZWN1 dGFibGUgY2FiYWwKICIpCiAKIChkZWZpbmUgdGVzdC1jb25kLTEKLSAgIihvcyhkYXJ3aW4pIHx8 ICEoZmxhZyhkZWJ1ZykpKSAmJiBmbGFnKGNpcHMpIikKKyAgImlmIChvcyhkYXJ3aW4pIHx8ICEo ZmxhZyhkZWJ1ZykpKSAmJiBmbGFnKGNpcHMpIikKIAogKGRlZmluZSByZWFkLWNhYmFsCiAgIChA QCAoZ3VpeCBpbXBvcnQgaGFja2FnZSkgcmVhZC1jYWJhbCkpCiAKLShkZWZpbmUgZXZhbC1jYWJh bC1rZXl3b3JkcwotICAoQEAgKGd1aXggaW1wb3J0IGhhY2thZ2UpIGV2YWwtY2FiYWwta2V5d29y ZHMpKQotCi0oZGVmaW5lIGNvbmRpdGlvbmFsLT5zZXhwLWxpa2UKLSAgKEBAIChndWl4IGltcG9y dCBoYWNrYWdlKSBjb25kaXRpb25hbC0+c2V4cC1saWtlKSkKKyhkZWZpbmUgY2FiYWwtY29uZGl0 aW9uYWwtbGluZS0+c2V4cAorICAoQEAgKGd1aXggaW1wb3J0IGNhYmFsKSBjYWJhbC1jb25kaXRp b25hbC1saW5lLT5zZXhwKSkKIAogKHRlc3QtYmVnaW4gImhhY2thZ2UiKQogCkBAIC0xMTgsMTIg KzExNSw5IEBAIGV4ZWN1dGFibGUgY2FiYWwKICh0ZXN0LWFzc2VydCAiaGFja2FnZS0+Z3VpeC1w YWNrYWdlIHRlc3QgMyIKICAgKGV2YWwtdGVzdC13aXRoLWNhYmFsIHRlc3QtY2FiYWwtMykpCiAK LSh0ZXN0LWFzc2VydCAiY29uZGl0aW9uYWwtPnNleHAtbGlrZSIKLSAgKG1hdGNoCi0gICAgKGV2 YWwtY2FiYWwta2V5d29yZHMKLSAgICAgKGNvbmRpdGlvbmFsLT5zZXhwLWxpa2UgdGVzdC1jb25k LTEpCi0gICAgICcoKCJkZWJ1ZyIgLiAiRmFsc2UiKSkpCi0gICAgKCgnYW5kICgnb3IgKCdzdHJp bmctbWF0Y2ggImRhcndpbiIgKCclY3VycmVudC1zeXN0ZW0pKSAoJ25vdCAnI2YpKSAnI3QpCiso dGVzdC1hc3NlcnQgImNhYmFsLWNvbmRpdGlvbmFsLWxpbmUtPnNleHAiCisgIChtYXRjaCAoY2Fi YWwtY29uZGl0aW9uYWwtbGluZS0+c2V4cCB0ZXN0LWNvbmQtMSkKKyAgICAoKCdhbmQgKCdvciAo J29zICJkYXJ3aW4iKSAoJ25vdCAoJ2ZsYWcgImRlYnVnIikpKSAoJ2ZsYWcgImNpcHMiKSkKICAg ICAgI3QpCiAgICAgKHgKICAgICAgKHBrICdmYWlsIHggI2YpKSkpCi0tIAoyLjIuMQoK --001a11c33c90ca686705149f113d--