From debbugs-submit-bounces@debbugs.gnu.org Mon Aug 09 16:01:51 2021 Received: (at 49828) by debbugs.gnu.org; 9 Aug 2021 20:01:51 +0000 Received: from localhost ([127.0.0.1]:57861 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1mDBT0-0005Vj-B6 for submit@debbugs.gnu.org; Mon, 09 Aug 2021 16:01:51 -0400 Received: from laurent.telenet-ops.be ([195.130.137.89]:37890) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1mDBSt-0005VT-NV for 49828@debbugs.gnu.org; Mon, 09 Aug 2021 16:01:45 -0400 Received: from ptr-bvsjgyjmffd7q9timvx.18120a2.ip6.access.telenet.be ([IPv6:2a02:1811:8c09:9d00:aaf1:9810:a0b8:a55d]) by laurent.telenet-ops.be with bizsmtp id fY1d2500F0mfAB401Y1dav; Mon, 09 Aug 2021 22:01:37 +0200 Message-ID: <9e75e458ab823e627b221218542f800105748c2a.camel@telenet.be> Subject: Re: [PATCH 06/20] guix: Add ContentDB importer. (XXX Don't send yet) From: Maxime Devos To: Leo Prikler , 49828@debbugs.gnu.org Date: Mon, 09 Aug 2021 22:00:51 +0200 In-Reply-To: <190b2e2c5da797a8c0e70f53de3e221861ce3b89.camel@student.tugraz.at> References: <20210802155019.6122-1-maximedevos@telenet.be> <20210802155019.6122-6-maximedevos@telenet.be> <74fcdc1aec1e92afec81c84930cff6ac831f72b1.camel@student.tugraz.at> <190b2e2c5da797a8c0e70f53de3e221861ce3b89.camel@student.tugraz.at> Content-Type: multipart/signed; micalg="pgp-sha512"; protocol="application/pgp-signature"; boundary="=-SnrmijhdF6L2D37MJZhV" User-Agent: Evolution 3.34.2 MIME-Version: 1.0 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=telenet.be; s=r21; t=1628539298; bh=zmZarp+WtKnI2dt2tCyXn7UrlLiQfDDyPIV7SrqDJZE=; h=Subject:From:To:Date:In-Reply-To:References; b=Wr5RS+BJf7qSHzeTuWh3cYXn9mIJvX+eJovC2BTAOMRulLmU5290i8wHgxip6I9Pp UBm8fx2mjUstp64VBkBwUNUClNgvSpMt5ipH+avu43f2G9MwE6TR9d2ysp5Z2MbGfO +xmu1c9cbs1Ag1fhvKLRKNFd9PPPa5Ie+BnkCIO0O1Oq5+CSIiAL7Grz3bSEIO+2Fi YKR9MB/ZCSxrXeNXc7TF6ND1IzP1AiPsbHBpgxFJKiRNKsxSNl7atfQ+xvdyhAZDVq q5Zojy55ZXImf1Zio5lj+aISx+Yu3jy8ksdzuxjgPTTbIfvJOW9SDWp0Zt9VNGHmT3 R/+WoP8veC63Q== X-Spam-Score: -0.7 (/) X-Debbugs-Envelope-To: 49828 X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) --=-SnrmijhdF6L2D37MJZhV Content-Type: multipart/mixed; boundary="=-pOoEpqErlQ86NDgwYOoH" --=-pOoEpqErlQ86NDgwYOoH Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Hi, Leo Prikler schreef op za 07-08-2021 om 21:47 [+0200]: > > > > The commit id is > > > > +sometimes missing. The descriptions are in the Markdown format, > > > > but > > > > +Guix uses Texinfo instead. Texture packs and subgames are > > > > unsupported. > > > What is the "commit id"? Is it the hash? A tag? Anything that > > > resolves to a commit? > >=20 > > It's the SHA-1 of the Git commit. I changes this to =E2=80=98the commi= t's > > SHA-1=E2=80=99. > We usually call it the hash around here :) I adjusted the documentation to call it =E2=80=98the commit hash=E2=80=99. > > I tried implementing "guix refresh -t minetest ...". It seems to > > work, but requires some changes to (guix upstream) that needs some > > more work, so I left it out of the revised patch set. The refresher > > needs to know the author name (or perform extra HTTP requests), so I > > added 'upstream-name' the package properties. > Could we somehow define a (minetest-uri) procedure that can be supplied > to (guix download)? Somehow Minetest must get the package to > installations across operating systems, so surely there's some download > link somewhere. What is this 'minetest-uri' supposed to do? I assume it would be a procedure like 'pypi-uri', 'cran-uri', 'crate-uri', which takes a package name, the version and should return an URL string pointing to a tarball. That would be possible. ContentDB allows for downloading zips: https://github.com/minetest/contentdb/blob/master/docs/minetest_client.md#d= ownloading-and-installing The URL would look like: /packages///releases//downl= oad/. Here, is a the =E2=80=98release id=E2=80=99, which is an integer = (e.g. 4209). It is _not_ the version number, but it is monotonically increasing. There are some problems however: * Old archives are sometimes deleted. TenPlus1/ethereal was added to ContentDB on 2018-02-23, but it only has a single release on ContentDB, from 2021-07-28 . Likewise for TenPlus1/bakedclay, TenPlus1/wine, TenPlus1/bees. Most other mods still have the old archives though (e.g., Jeija/mesecon= s, sfan5/worldedit, PilzAdam/nether). The mods by TenPlus1 seems to be an exception. * The version number is not included in the download URL, the release id = is. So IIUC, update-package-source in (guix upstream) would still need to b= e adjusted somewhat to support Minetest packages. +(define* (make-package-sexp #:key > > + (guix-name "minetest-foo") > > + (home-page "https://example.org/foo") > > + (repo "https://example.org/foo.git") > > + (synopsis "synopsis") > > + (guix-description "description") > > + (guix-license > > + '(list license:cc-by-sa4.0 > > license:lgpl3+)) > > + (inputs '()) > > + (upstream-name "Author/foo") > > + #:allow-other-keys) > > + [...] > As noted above, this procedure would be somewhat simplified if we could > define a (mintest-uri). >=20 I don't see how a 'minetest-uri' would simplify the definition of 'make-package-sexp'. Using 'minetest-uri' would avoid the need to specify the commit, but 'minetest-uri' needs a release id anyway, so no simplification there. I guess it would avoid the 'download-git-repository' procedure and 'vcs-file?', but see two points above. Also, 'latest-repository-commit= ' returns a store path, which does not include the '.git' directory, so 'vcs-file?' isn't necessary, so I removed 'vcs-file?'. > > The revised patch series is attached. It can also be found at > > ;;. It > > includes the latest MINETEST_MOD_PATH patch. I'll make the patch to > > export more things in (guix build utils) later (for core-updates). > For the rest of this, I'll only look over 06/20 v2. I'll assume you > did nothing naughty to 01..04. >=20 > > +;; A structure returned by the /api/packages/?fmt=3Dkeys endpoint > > +(define-json-mapping make-package/keys package/keys? > > + json->package/keys > > + (author package/keys-author) ; string > > + (name package/keys-name) ; string > > + (type package/keys-type)) ; string > Not sure about this slash, as it typically specifies extension of some > sort. Perhaps just naming this package-keys would be better? Done. > > +(define (package-author/name package) > > + "Given a object, return the corresponding AUTHOR/NAME > > string." > > + (string-append (package-author package) "/" (package-name > > package))) > > + > > +(define (package/keys-author/name package) > > + "Given a object, return the corresponding > > AUTHOR/NAME string." > > + (string-append (package/keys-author package) > > + "/" (package/keys-name package))) > I think it's probably be better to merge this into a single procedure > called "package-full-name", "package-unique-name" or "package-id" > (whichever you prefer naming-wise), which handles both cases. I like the name 'package-full-name'. and are rather different structures and used in different contexts though, so I kept package-full-name and package-keys-full-name separate. FWIW, I added a procedure (define (%construct-full-name author name) (string-append author "/" name)) used by 'package-full-name' and 'package-keys-full-name'. > > +(define (contentdb->package-name name) > > + "Given the NAME of a package on ContentDB, return a Guix-compliant= =20 > > name for the > > +package." > > + ;; The author is not included, as the names of popular mods > > + ;; tend to be unique. > > + (string-append "minetest-" (snake-case name))) > I'd at least add an option to generate full names instead, for cases in > which as before we warn about non-uniqueness. Though actually, this > comment is a little misleading as the actual stripping happens... > > + (name ,(contentdb->package-name (author/name->name > > author/name))) > here ContentDB has a policy of requiring mod names to be unique in order to be a =E2=80=98approved=E2=80=99, so I don't think name conflict will be a p= roblem in practice. If full names were generated, keep in mind that dependencies would need to use the full names a well. I couldn't find any mods with name conflicts. I would just emit a warning for now. contentdb->package-name was always used together with 'author/name->name', so I modified contentdb->package-name to call author/name->name as you seem to suggest. It maked the code a little simpler. Thanks, Maxime. --=-pOoEpqErlQ86NDgwYOoH Content-Disposition: inline; filename="guix-Add-ContentDB-importer.patch" Content-Type: text/x-patch; name="guix-Add-ContentDB-importer.patch"; charset="UTF-8" Content-Transfer-Encoding: base64 RnJvbSAzOWQ4NjkzNzBlN2EyODZmYjMwYTA2NTEyYzA4ZmQzMzk5ZDkyZDRmIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXhpbWUgRGV2b3MgPG1heGltZWRldm9zQHRlbGVuZXQuYmU+ CkRhdGU6IFNhdCwgMzEgSnVsIDIwMjEgMTQ6NDQ6MTEgKzAyMDAKU3ViamVjdDogW1BBVENIXSBn dWl4OiBBZGQgQ29udGVudERCIGltcG9ydGVyLgoKKiBndWl4L2ltcG9ydC9jb250ZW50ZGIuc2Nt OiBOZXcgZmlsZS4KKiBndWl4L3NjcmlwdHMvaW1wb3J0L2NvbnRlbnRkYi5zY206IE5ldyBmaWxl LgoqIHRlc3RzL2NvbnRlbnRkYi5zY206IE5ldyBmaWxlLgoqIE1ha2VmaWxlLmFtIChNT0RVTEVT LCBTQ01fVEVTVFMpOiBSZWdpc3RlciB0aGVtLgoqIHBvL2d1aXgvUE9URklMRVMuaW46IExpa2V3 aXNlLgoqIGRvYy9ndWl4LnRleGkgKEludm9raW5nIGd1aXggaW1wb3J0KTogRG9jdW1lbnQgaXQu Ci0tLQogTWFrZWZpbGUuYW0gICAgICAgICAgICAgICAgICAgICAgfCAgIDMgKwogZG9jL2d1aXgu dGV4aSAgICAgICAgICAgICAgICAgICAgfCAgMzIgKysrCiBndWl4L2ltcG9ydC9taW5ldGVzdC5z Y20gICAgICAgICB8IDQ1NiArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCiBndWl4L3Nj cmlwdHMvaW1wb3J0LnNjbSAgICAgICAgICB8ICAgMyArLQogZ3VpeC9zY3JpcHRzL2ltcG9ydC9t aW5ldGVzdC5zY20gfCAxMTcgKysrKysrKysKIHBvL2d1aXgvUE9URklMRVMuaW4gICAgICAgICAg ICAgIHwgICAxICsKIHRlc3RzL21pbmV0ZXN0LnNjbSAgICAgICAgICAgICAgIHwgMzU1ICsrKysr KysrKysrKysrKysrKysrKysrKwogNyBmaWxlcyBjaGFuZ2VkLCA5NjYgaW5zZXJ0aW9ucygrKSwg MSBkZWxldGlvbigtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGd1aXgvaW1wb3J0L21pbmV0ZXN0LnNj bQogY3JlYXRlIG1vZGUgMTAwNjQ0IGd1aXgvc2NyaXB0cy9pbXBvcnQvbWluZXRlc3Quc2NtCiBj cmVhdGUgbW9kZSAxMDA2NDQgdGVzdHMvbWluZXRlc3Quc2NtCgpkaWZmIC0tZ2l0IGEvTWFrZWZp bGUuYW0gYi9NYWtlZmlsZS5hbQppbmRleCBmNDQzOWNlOTNiLi42MjQzNTgzNjE2IDEwMDY0NAot LS0gYS9NYWtlZmlsZS5hbQorKysgYi9NYWtlZmlsZS5hbQpAQCAtMjYyLDYgKzI2Miw3IEBAIE1P RFVMRVMgPQkJCQkJXAogICBndWl4L2ltcG9ydC9qc29uLnNjbQkJCQlcCiAgIGd1aXgvaW1wb3J0 L2tkZS5zY20JCQkJXAogICBndWl4L2ltcG9ydC9sYXVuY2hwYWQuc2NtICAgCQkJXAorICBndWl4 L2ltcG9ydC9taW5ldGVzdC5zY20gICAJCQlcCiAgIGd1aXgvaW1wb3J0L29wYW0uc2NtCQkJCVwK ICAgZ3VpeC9pbXBvcnQvcHJpbnQuc2NtCQkJCVwKICAgZ3VpeC9pbXBvcnQvcHlwaS5zY20JCQkJ XApAQCAtMzA0LDYgKzMwNSw3IEBAIE1PRFVMRVMgPQkJCQkJXAogICBndWl4L3NjcmlwdHMvaW1w b3J0L2dvLnNjbQkJCVwKICAgZ3VpeC9zY3JpcHRzL2ltcG9ydC9oYWNrYWdlLnNjbQkJXAogICBn dWl4L3NjcmlwdHMvaW1wb3J0L2pzb24uc2NtICAJCVwKKyAgZ3VpeC9zY3JpcHRzL2ltcG9ydC9t aW5ldGVzdC5zY20gIAkJXAogICBndWl4L3NjcmlwdHMvaW1wb3J0L29wYW0uc2NtCQkJXAogICBn dWl4L3NjcmlwdHMvaW1wb3J0L3B5cGkuc2NtCQkJXAogICBndWl4L3NjcmlwdHMvaW1wb3J0L3N0 YWNrYWdlLnNjbQkJXApAQCAtNDcwLDYgKzQ3Miw3IEBAIFNDTV9URVNUUyA9CQkJCQlcCiAgIHRl c3RzL2ltcG9ydC11dGlscy5zY20JCQlcCiAgIHRlc3RzL2luZmVyaW9yLnNjbQkJCQlcCiAgIHRl c3RzL2xpbnQuc2NtCQkJCVwKKyAgdGVzdHMvbWluZXRlc3Quc2NtCQkJCVwKICAgdGVzdHMvbW9k dWxlcy5zY20JCQkJXAogICB0ZXN0cy9tb25hZHMuc2NtCQkJCVwKICAgdGVzdHMvbmFyLnNjbQkJ CQlcCmRpZmYgLS1naXQgYS9kb2MvZ3VpeC50ZXhpIGIvZG9jL2d1aXgudGV4aQppbmRleCBkNDRl Y2MyMDA1Li44NTRlMjgyYjM4IDEwMDY0NAotLS0gYS9kb2MvZ3VpeC50ZXhpCisrKyBiL2RvYy9n dWl4LnRleGkKQEAgLTExMzE0LDYgKzExMzE0LDM4IEBAIGFuZCBnZW5lcmF0ZSBwYWNrYWdlIGV4 cHJlc3Npb25zIGZvciBhbGwgdGhvc2UgcGFja2FnZXMgdGhhdCBhcmUgbm90IHlldAogaW4gR3Vp eC4KIEBlbmQgdGFibGUKIAorQGl0ZW0gY29udGVudGRiCitAY2luZGV4IG1pbmV0ZXN0CitAY2lu ZGV4IENvbnRlbnREQgorSW1wb3J0IG1ldGFkYXRhIGZyb20gQHVyZWZ7aHR0cHM6Ly9jb250ZW50 Lm1pbmV0ZXN0Lm5ldCwgQ29udGVudERCfS4KK0luZm9ybWF0aW9uIGlzIHRha2VuIGZyb20gdGhl IEpTT04tZm9ybWF0dGVkIG1ldGFkYXRhIHByb3ZpZGVkIHRocm91Z2gKK0B1cmVme2h0dHBzOi8v Y29udGVudC5taW5ldGVzdC5uZXQvaGVscC9hcGkvLCBDb250ZW50REIncyBBUEl9IGFuZAoraW5j bHVkZXMgbW9zdCByZWxldmFudCBpbmZvcm1hdGlvbiwgaW5jbHVkaW5nIGRlcGVuZGVuY2llcy4g IFRoZXJlIGFyZQorc29tZSBjYXZlYXRzLCBob3dldmVyLiAgVGhlIGxpY2Vuc2UgaW5mb3JtYXRp b24gaXMgb2Z0ZW4gaW5jb21wbGV0ZS4KK1RoZSBjb21taXQgaGFzaCBpcyBzb21ldGltZXMgbWlz c2luZy4gIFRoZSBkZXNjcmlwdGlvbnMgYXJlIGluIHRoZQorTWFya2Rvd24gZm9ybWF0LCBidXQg R3VpeCB1c2VzIFRleGluZm8gaW5zdGVhZC4gIFRleHR1cmUgcGFja3MgYW5kCitzdWJnYW1lcyBh cmUgdW5zdXBwb3J0ZWQuCisKK1RoZSBjb21tYW5kIGJlbG93IGltcG9ydHMgbWV0YWRhdGEgZm9y IHRoZSBNZXNlY29ucyBtb2QgYnkgSmVpamE6CisKK0BleGFtcGxlCitndWl4IGltcG9ydCBtaW5l dGVzdCBKZWlqYS9tZXNlY29ucworQGVuZCBleGFtcGxlCisKK1RoZSBhdXRob3IgbmFtZSBjYW4g YWxzbyBiZSBsZWZ0IG91dDoKKworQGV4YW1wbGUKK2d1aXggaW1wb3J0IG1pbmV0ZXN0IG1lc2Vj b25zCitAZW5kIGV4YW1wbGUKKworQHRhYmxlIEBjb2RlCitAaXRlbSAtLXJlY3Vyc2l2ZQorQGl0 ZW14IC1yCitUcmF2ZXJzZSB0aGUgZGVwZW5kZW5jeSBncmFwaCBvZiB0aGUgZ2l2ZW4gdXBzdHJl YW0gcGFja2FnZSByZWN1cnNpdmVseQorYW5kIGdlbmVyYXRlIHBhY2thZ2UgZXhwcmVzc2lvbnMg Zm9yIGFsbCB0aG9zZSBwYWNrYWdlcyB0aGF0IGFyZSBub3QgeWV0CitpbiBHdWl4LgorQGVuZCB0 YWJsZQorCiBAaXRlbSBjcGFuCiBAY2luZGV4IENQQU4KIEltcG9ydCBtZXRhZGF0YSBmcm9tIEB1 cmVme2h0dHBzOi8vd3d3Lm1ldGFjcGFuLm9yZy8sIE1ldGFDUEFOfS4KZGlmZiAtLWdpdCBhL2d1 aXgvaW1wb3J0L21pbmV0ZXN0LnNjbSBiL2d1aXgvaW1wb3J0L21pbmV0ZXN0LnNjbQpuZXcgZmls ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi5lMWY4NDg3Yjc1Ci0tLSAvZGV2L251bGwK KysrIGIvZ3VpeC9pbXBvcnQvbWluZXRlc3Quc2NtCkBAIC0wLDAgKzEsNDU2IEBACis7OzsgR05V IEd1aXggLS0tIEZ1bmN0aW9uYWwgcGFja2FnZSBtYW5hZ2VtZW50IGZvciBHTlUKKzs7OyBDb3B5 cmlnaHQgwqkgMjAyMSBNYXhpbWUgRGV2b3MgPG1heGltZWRldm9zQHRlbGVuZXQuYmU+Cis7OzsK Kzs7OyBUaGlzIGZpbGUgaXMgcGFydCBvZiBHTlUgR3VpeC4KKzs7OworOzs7IEdOVSBHdWl4IGlz IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQK Kzs7OyB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFz IHB1Ymxpc2hlZCBieQorOzs7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2 ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdAorOzs7IHlvdXIgb3B0aW9uKSBhbnkgbGF0 ZXIgdmVyc2lvbi4KKzs7OworOzs7IEdOVSBHdWl4IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorOzs7IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3 aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKzs7OyBNRVJDSEFOVEFCSUxJVFkg b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCis7OzsgR05VIEdl bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKzs7OworOzs7IFlvdSBzaG91 bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl Cis7OzsgYWxvbmcgd2l0aCBHTlUgR3VpeC4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5v cmcvbGljZW5zZXMvPi4KKworKGRlZmluZS1tb2R1bGUgKGd1aXggaW1wb3J0IG1pbmV0ZXN0KQor ICAjOnVzZS1tb2R1bGUgKGljZS05IG1hdGNoKQorICAjOnVzZS1tb2R1bGUgKGljZS05IHJlY2Vp dmUpCisgICM6dXNlLW1vZHVsZSAoaWNlLTkgdGhyZWFkcykKKyAgIzp1c2UtbW9kdWxlIChpY2Ut OSBoYXNoLXRhYmxlKQorICAjOnVzZS1tb2R1bGUgKHNyZmkgc3JmaS0xKQorICAjOnVzZS1tb2R1 bGUgKHNyZmkgc3JmaS0yKQorICAjOnVzZS1tb2R1bGUgKHNyZmkgc3JmaS0xMSkKKyAgIzp1c2Ut bW9kdWxlIChzcmZpIHNyZmktMjYpCisgICM6dXNlLW1vZHVsZSAoZ3VpeCB1dGlscykKKyAgIzp1 c2UtbW9kdWxlIChndWl4IHVpKQorICAjOnVzZS1tb2R1bGUgKGd1aXggaTE4bikKKyAgIzp1c2Ut bW9kdWxlIChndWl4IG1lbW9pemF0aW9uKQorICAjOnVzZS1tb2R1bGUgKGd1aXggc2VyaWFsaXph dGlvbikKKyAgIzp1c2UtbW9kdWxlIChndWl4IGltcG9ydCB1dGlscykKKyAgIzp1c2UtbW9kdWxl IChndWl4IGltcG9ydCBqc29uKQorICAjOnVzZS1tb2R1bGUgKChnY3J5cHQgaGFzaCkgIzpzZWxl Y3QgKG9wZW4tc2hhMjU2LXBvcnQgcG9ydC1zaGEyNTYpKQorICAjOnVzZS1tb2R1bGUgKGpzb24p CisgICM6dXNlLW1vZHVsZSAoZ3VpeCBiYXNlMzIpCisgICM6dXNlLW1vZHVsZSAoZ3VpeCBnaXQp CisgICM6dXNlLW1vZHVsZSAoZ3VpeCBzdG9yZSkKKyAgIzpleHBvcnQgKCVkZWZhdWx0LXNvcnQt a2V5CisgICAgICAgICAgICAlY29udGVudGRiLWFwaQorICAgICAgICAgICAganNvbi0+cGFja2Fn ZQorICAgICAgICAgICAgY29udGVudGRiLWZldGNoCisgICAgICAgICAgICBlbGFib3JhdGUtY29u dGVudGRiLW5hbWUKKyAgICAgICAgICAgIG1pbmV0ZXN0LT5ndWl4LXBhY2thZ2UKKyAgICAgICAg ICAgIG1pbmV0ZXN0LXJlY3Vyc2l2ZS1pbXBvcnQKKyAgICAgICAgICAgIHNvcnQtcGFja2FnZXMp KQorCis7OyBUaGUgQ29udGVudERCIEFQSSBpcyBkb2N1bWVudGVkIGF0Cis7OyA8aHR0cHM6Ly9j b250ZW50Lm1pbmV0ZXN0Lm5ldD4uCisKKyhkZWZpbmUgJWNvbnRlbnRkYi1hcGkKKyAgKG1ha2Ut cGFyYW1ldGVyICJodHRwczovL2NvbnRlbnQubWluZXRlc3QubmV0L2FwaS8iKSkKKworKGRlZmlu ZSAoc3RyaW5nLW9yLWZhbHNlIHgpCisgIChhbmQgKHN0cmluZz8geCkgeCkpCisKKyhkZWZpbmUg KG5hdHVyYWwtb3ItZmFsc2UgeCkKKyAgKGFuZCAoZXhhY3QtaW50ZWdlcj8geCkgKD49IHggMCkg eCkpCisKKzs7IERlc2NyaXB0aW9ucyBvbiBDb250ZW50REIgdXNlIGNhcnJpYWdlIHJldHVybnMs IGJ1dCBHdWl4IGRvZXNuJ3QuCisoZGVmaW5lIChkZWxldGUtY3IgdGV4dCkKKyAgKHN0cmluZy1k ZWxldGUgI1xjciB0ZXh0KSkKKworDAorCis7OzsKKzs7OyBKU09OIG1hcHBpbmdzCis7OzsKKwor OzsgTWluZXRlc3QgcGFja2FnZS4KKzs7Cis7OyBBUEkgZW5kcG9pbnQ6IC9wYWNrYWdlcy9BVVRI T1IvTkFNRS8KKyhkZWZpbmUtanNvbi1tYXBwaW5nIDxwYWNrYWdlPiBtYWtlLXBhY2thZ2UgcGFj a2FnZT8KKyAganNvbi0+cGFja2FnZQorICAoYXV0aG9yICAgICAgICAgICAgcGFja2FnZS1hdXRo b3IpIDsgc3RyaW5nCisgIChjcmVhdGlvbi1kYXRlICAgICBwYWNrYWdlLWNyZWF0aW9uLWRhdGUg OyBzdHJpbmcKKyAgICAgICAgICAgICAgICAgICAgICJjcmVhdGVkX2F0IikKKyAgKGRvd25sb2Fk cyAgICAgICAgIHBhY2thZ2UtZG93bmxvYWRzKSA7IGludGVnZXIKKyAgKGZvcnVtcyAgICAgICAg ICAgIHBhY2thZ2UtZm9ydW1zICJmb3J1bXMiIG5hdHVyYWwtb3ItZmFsc2UpCisgIChpc3N1ZS10 cmFja2VyICAgICBwYWNrYWdlLWlzc3VlLXRyYWNrZXIgImlzc3VlX3RyYWNrZXIiKSA7IHN0cmlu ZworICAobGljZW5zZSAgICAgICAgICAgcGFja2FnZS1saWNlbnNlKSA7IHN0cmluZworICAobG9u Zy1kZXNjcmlwdGlvbiAgcGFja2FnZS1sb25nLWRlc2NyaXB0aW9uICJsb25nX2Rlc2NyaXB0aW9u IikgOyBzdHJpbmcKKyAgKG1haW50YWluZXJzICAgICAgIHBhY2thZ2UtbWFpbnRhaW5lcnMgOyBs aXN0IG9mIHN0cmluZ3MKKyAgICAgICAgICAgICAgICAgICAgICJtYWludGFpbmVycyIgdmVjdG9y LT5saXN0KQorICAobWVkaWEtbGljZW5zZSAgICAgcGFja2FnZS1tZWRpYS1saWNlbnNlICJtZWRp YV9saWNlbnNlIikgOyBzdHJpbmcKKyAgKG5hbWUgICAgICAgICAgICAgIHBhY2thZ2UtbmFtZSkg OyBzdHJpbmcKKyAgKHByb3ZpZGVzICAgICAgICAgIHBhY2thZ2UtcHJvdmlkZXMgOyBsaXN0IG9m IHN0cmluZ3MKKyAgICAgICAgICAgICAgICAgICAgICJwcm92aWRlcyIgdmVjdG9yLT5saXN0KQor ICAocmVsZWFzZSAgICAgICAgICAgcGFja2FnZS1yZWxlYXNlKSA7IGludGVnZXIKKyAgKHJlcG9z aXRvcnkgICAgICAgIHBhY2thZ2UtcmVwb3NpdG9yeSAicmVwbyIgc3RyaW5nLW9yLWZhbHNlKQor ICAoc2NvcmUgICAgICAgICAgICAgcGFja2FnZS1zY29yZSkgOyBmbG9udW0KKyAgKHNjcmVlbnNo b3RzICAgICAgIHBhY2thZ2Utc2NyZWVuc2hvdHMgInNjcmVlbnNob3RzIiB2ZWN0b3ItPmxpc3Qp IDsgbGlzdCBvZiBzdHJpbmdzCisgIChzaG9ydC1kZXNjcmlwdGlvbiBwYWNrYWdlLXNob3J0LWRl c2NyaXB0aW9uICJzaG9ydF9kZXNjcmlwdGlvbiIpIDsgc3RyaW5nCisgIChzdGF0ZSAgICAgICAg ICAgICBwYWNrYWdlLXN0YXRlKSA7IHN0cmluZworICAodGFncyAgICAgICAgICAgICAgcGFja2Fn ZS10YWdzICJ0YWdzIiB2ZWN0b3ItPmxpc3QpIDsgbGlzdCBvZiBzdHJpbmdzCisgICh0aHVtYm5h aWwgICAgICAgICBwYWNrYWdlLXRodW1ibmFpbCkgOyBzdHJpbmcKKyAgKHRpdGxlICAgICAgICAg ICAgIHBhY2thZ2UtdGl0bGUpIDsgc3RyaW5nCisgICh0eXBlICAgICAgICAgICAgICBwYWNrYWdl LXR5cGUpIDsgc3RyaW5nCisgICh1cmwgICAgICAgICAgICAgICBwYWNrYWdlLXVybCkgOyBzdHJp bmcKKyAgKHdlYnNpdGUgICAgICAgICAgIHBhY2thZ2Utd2Vic2l0ZSAid2Vic2l0ZSIgc3RyaW5n LW9yLWZhbHNlKSkKKworKGRlZmluZS1qc29uLW1hcHBpbmcgPHJlbGVhc2U+IG1ha2UtcmVsZWFz ZSByZWxlYXNlPworICBqc29uLT5yZWxlYXNlCisgIDs7IElmIHByZXNlbnQsIGEgZ2l0IGNvbW1p dCBpZGVudGlmaWVkIGJ5IGl0cyBoYXNoCisgIChjb21taXQgICAgICAgICAgICAgICByZWxlYXNl LWNvbW1pdCAiY29tbWl0IiBzdHJpbmctb3ItZmFsc2UpCisgIChkb3dubG9hZHMgICAgICAgICAg ICByZWxlYXNlLWRvd25sb2FkcykgOyBpbnRlZ2VyCisgIChpZCAgICAgICAgICAgICAgICAgICBy ZWxlYXNlLWlkKSA7IGludGVnZXIKKyAgKG1heC1taW5ldGVzdC12ZXJzaW9uIHJlbGVhc2UtbWF4 LW1pbmV0ZXN0LXZlcnNpb24gc3RyaW5nLW9yLWZhbHNlKQorICAobWluLW1pbmV0ZXN0LXZlcnNp b24gcmVsZWFzZS1taW4tbWluZXRlc3QtdmVyc2lvbiBzdHJpbmctb3ItZmFsc2UpCisgIChyZWxl YXNlLWRhdGUgICAgICAgICByZWxlYXNlLWRhdGEpIDsgc3RyaW5nCisgICh0aXRsZSAgICAgICAg ICAgICAgICByZWxlYXNlLXRpdGxlKSA7IHN0cmluZworICAodXJsICAgICAgICAgICAgICAgICAg cmVsZWFzZS11cmwpKSA7IHN0cmluZworCisoZGVmaW5lLWpzb24tbWFwcGluZyA8ZGVwZW5kZW5j eT4gbWFrZS1kZXBlbmRlbmN5IGRlcGVuZGVuY3k/CisgIGpzb24tPmRlcGVuZGVuY3kKKyAgKG9w dGlvbmFsPyBkZXBlbmRlbmN5LW9wdGlvbmFsPyAiaXNfb3B0aW9uYWwiKSA7IGJvb2wKKyAgKG5h bWUgZGVwZW5kZW5jeS1uYW1lKSA7IHN0cmluZworICAocGFja2FnZXMgZGVwZW5kZW5jeS1wYWNr YWdlcyAicGFja2FnZXMiIHZlY3Rvci0+bGlzdCkpIDsgbGlzdCBvZiBzdHJpbmdzCisKKzs7IEEg c3RydWN0dXJlIHJldHVybmVkIGJ5IHRoZSAvYXBpL3BhY2thZ2VzLz9mbXQ9a2V5cyBlbmRwb2lu dAorKGRlZmluZS1qc29uLW1hcHBpbmcgPHBhY2thZ2Uta2V5cz4gbWFrZS1wYWNrYWdlLWtleXMg cGFja2FnZS1rZXlzPworICBqc29uLT5wYWNrYWdlLWtleXMKKyAgKGF1dGhvciBwYWNrYWdlLWtl eXMtYXV0aG9yKSA7IHN0cmluZworICAobmFtZSBwYWNrYWdlLWtleXMtbmFtZSkgICAgIDsgc3Ry aW5nCisgICh0eXBlIHBhY2thZ2Uta2V5cy10eXBlKSkgICAgOyBzdHJpbmcKKworKGRlZmluZSAo cGFja2FnZS1tb2Q/IHBhY2thZ2UpCisgICJJcyB0aGUgQ29udGVudERCIHBhY2thZ2UgUEFDS0FH RSBhIG1vZD8iCisgIDs7IENvbnRlbnREQiBhbHNvIGhhcyDigJhnYW1lc+KAmSBhbmQg4oCYdGV4 dHVyZSBwYWNrc+KAmS4KKyAgKHN0cmluZz0/IChwYWNrYWdlLXR5cGUgcGFja2FnZSkgIm1vZCIp KQorCisMCisKKzs7OworOzs7IE1hbmlwdWxhdGluZyBuYW1lcyBvZiBwYWNrYWdlcworOzs7Cis7 OzsgVGhlcmUgYXJlIHRocmVlIGtpbmQgb2YgbmFtZXM6Cis7OzsKKzs7OyAgICogbmFtZXMgb2Yg Z3VpeCBwYWNrYWdlcywgZS5nLiBtaW5ldGVzdC1iYXNpYy1tYXRlcmlhbHMuCis7OzsgICAqIG5h bWVzIG9mIG1vZHMgb24gQ29udGVudERCLCBlLmcuIGJhc2ljX21hdGVyaWFscworOzs7ICAgKiBh IGNvbWJpbmF0aW9uIG9mIGF1dGhvciBhbmQgbW9kIG5hbWUgb24gQ29udGVudERCLCBlLmcuIFZh bmVzc2FFL2Jhc2ljX21hdGVyaWFscworOzs7CisKKyhkZWZpbmUgKCVjb25zdHJ1Y3QtZnVsbC1u YW1lIGF1dGhvciBuYW1lKQorICAoc3RyaW5nLWFwcGVuZCBhdXRob3IgIi8iIG5hbWUpKQorCiso ZGVmaW5lIChwYWNrYWdlLWZ1bGwtbmFtZSBwYWNrYWdlKQorICAiR2l2ZW4gYSA8cGFja2FnZT4g b2JqZWN0LCByZXR1cm4gdGhlIGNvcnJlc3BvbmRpbmcgQVVUSE9SL05BTUUgc3RyaW5nLiIKKyAg KCVjb25zdHJ1Y3QtZnVsbC1uYW1lIChwYWNrYWdlLWF1dGhvciBwYWNrYWdlKSAocGFja2FnZS1u YW1lIHBhY2thZ2UpKSkKKworKGRlZmluZSAocGFja2FnZS1rZXlzLWZ1bGwtbmFtZSBwYWNrYWdl KQorICAiR2l2ZW4gYSA8cGFja2FnZS1rZXlzPiBvYmplY3QsIHJldHVybiB0aGUgY29ycmVzcG9u ZGluZyBBVVRIT1IvTkFNRSBzdHJpbmcuIgorICAoJWNvbnN0cnVjdC1mdWxsLW5hbWUgKHBhY2th Z2Uta2V5cy1hdXRob3IgcGFja2FnZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIChwYWNrYWdl LWtleXMtbmFtZSBwYWNrYWdlKSkpCisKKyhkZWZpbmUgKGNvbnRlbnRkYi0+cGFja2FnZS1uYW1l IGF1dGhvci9uYW1lKQorICAiR2l2ZW4gdGhlIEFVVEhPUi9OQU1FIG9mIGEgcGFja2FnZSBvbiBD b250ZW50REIsIHJldHVybiBhIEd1aXgtY29tcGxpYW50CituYW1lIGZvciB0aGUgcGFja2FnZS4i CisgIDs7IFRoZSBhdXRob3IgaXMgbm90IGluY2x1ZGVkLCBhcyB0aGUgbmFtZXMgb2YgcG9wdWxh ciBtb2RzCisgIDs7IHRlbmQgdG8gYmUgdW5pcXVlLgorICAoc3RyaW5nLWFwcGVuZCAibWluZXRl c3QtIiAoc25ha2UtY2FzZSAoYXV0aG9yL25hbWUtPm5hbWUgYXV0aG9yL25hbWUpKSkpCisKKyhk ZWZpbmUgKGF1dGhvci9uYW1lLT5uYW1lIGF1dGhvci9uYW1lKQorICAiRXh0cmFjdCBOQU1FIGZy b20gdGhlIEFVVEhPUi9OQU1FIHN0cmluZywgb3IgcmFpc2UgYW4gZXJyb3IgaWYgQVVUSE9SL05B TUUKK2lzIGlsbC1mb3JtYXR0ZWQuIgorICAobWF0Y2ggKHN0cmluZy1zcGxpdCBhdXRob3IvbmFt ZSAjXC8pCisgICAgKChhdXRob3IgbmFtZSkKKyAgICAgKHdoZW4gKHN0cmluZy1udWxsPyBhdXRo b3IpCisgICAgICAgKGxlYXZlCisgICAgICAgIChHXyAiSW4gfmE6IGF1dGhvciBuYW1lcyBtdXN0 IGNvbnNpc3Qgb2YgYXQgbGVhc3QgYSBzaW5nbGUgY2hhcmFjdGVyLn4lIikKKyAgICAgICAgYXV0 aG9yL25hbWUpKQorICAgICAod2hlbiAoc3RyaW5nLW51bGw/IG5hbWUpCisgICAgICAgKGxlYXZl CisgICAgICAgIChHXyAiSW4gfmE6IG1vZCBuYW1lcyBtdXN0IGNvbnNpc3Qgb2YgYXQgbGVhc3Qg YSBzaW5nbGUgY2hhcmFjdGVyLn4lIikKKyAgICAgICAgYXV0aG9yL25hbWUpKQorICAgICBuYW1l KQorICAgICgodG9vIG1hbnkgLiBjb21wb25lbnRzKQorICAgICAobGVhdmUKKyAgICAgIChHXyAi SW4gfmE6IGF1dGhvciBuYW1lcyBhbmQgbW9kIG5hbWVzIG1heSBub3QgY29udGFpbiBmb3J3YXJk IHNsYXNoZXMufiUiKQorICAgICAgYXV0aG9yL25hbWUpKQorICAgICgobmFtZSkKKyAgICAgKGlm IChzdHJpbmctbnVsbD8gbmFtZSkKKyAgICAgICAgIChsZWF2ZSAoR18gIm1vZCBuYW1lcyBtYXkg bm90IGJlIGVtcHR5Ln4lIikpCisgICAgICAgICAobGVhdmUgKEdfICJUaGUgbmFtZSBvZiB0aGUg YXV0aG9yIGlzIG1pc3NpbmcgaW4gfmEufiUiKQorICAgICAgICAgICAgICAgIGF1dGhvci9uYW1l KSkpKSkKKworKGRlZmluZSogKGVsYWJvcmF0ZS1jb250ZW50ZGItbmFtZSBuYW1lICM6a2V5IChz b3J0ICVkZWZhdWx0LXNvcnQta2V5KSkKKyAgIklmIE5BTUUgaXMgYW4gQVVUSE9SL05BTUUgc3Ry aW5nLCByZXR1cm4gaXQuICBPdGhlcndpc2UsIHRyeSB0byBkZXRlcm1pbmUKK3RoZSBhdXRob3Ig YW5kIHJldHVybiBhbiBhcHByb3ByaWF0ZSBBVVRIT1IvTkFNRSBzdHJpbmcuICBJZiB0aGF0IGZh aWxzLAorcmFpc2UgYW4gZXhjZXB0aW9uLiIKKyAgKGlmIChvciAoc3RyaW5nLWNvbnRhaW5zIG5h bWUgIi8iKSAoc3RyaW5nLW51bGw/IG5hbWUpKQorICAgICAgOzsgQ2FsbCAnYXV0aG9yL25hbWUt Pm5hbWUnIHRvIHZlcmlmeSB0aGF0IE5BTUUgc2VlbXMgcmVhc29uYWJsZQorICAgICAgOzsgYW5k IHJhaXNlIGFuIGFwcHJvcHJpYXRlIGV4Y2VwdGlvbiBpZiBpdCBpc24ndC4KKyAgICAgIChiZWdp bgorICAgICAgICAoYXV0aG9yL25hbWUtPm5hbWUgbmFtZSkKKyAgICAgICAgbmFtZSkKKyAgICAg IChsZXQqICgocGFja2FnZS1rZXlzIChjb250ZW50ZGItcXVlcnktcGFja2FnZXMgbmFtZSAjOnNv cnQgc29ydCkpCisgICAgICAgICAgICAgKGNvcnJlY3RseS1uYW1lZAorICAgICAgICAgICAgICAo ZmlsdGVyIChsYW1iZGEgKHBhY2thZ2Uta2V5KQorICAgICAgICAgICAgICAgICAgICAgICAgKHN0 cmluZz0/IG5hbWUgKHBhY2thZ2Uta2V5cy1uYW1lIHBhY2thZ2Uta2V5KSkpCisgICAgICAgICAg ICAgICAgICAgICAgcGFja2FnZS1rZXlzKSkpCisgICAgICAgIChtYXRjaCBjb3JyZWN0bHktbmFt ZWQKKyAgICAgICAgICAoKG9uZSkgKHBhY2thZ2Uta2V5cy1mdWxsLW5hbWUgb25lKSkKKyAgICAg ICAgICAoKHRvbyAuIG1hbnkpCisgICAgICAgICAgICh3YXJuaW5nIChHXyAifmEgaXMgYW1iaWdp b3VzLCBwcmVzdW1pbmcgfmEgKG90aGVyIG9wdGlvbnMgaW5jbHVkZTogfmEpfiUiKQorICAgICAg ICAgICAgICAgICAgICBuYW1lIChwYWNrYWdlLWtleXMtZnVsbC1uYW1lIHRvbykKKyAgICAgICAg ICAgICAgICAgICAgKG1hcCBwYWNrYWdlLWtleXMtZnVsbC1uYW1lIG1hbnkpKQorICAgICAgICAg ICAocGFja2FnZS1rZXlzLWZ1bGwtbmFtZSB0b28pKQorICAgICAgICAgICgoKQorICAgICAgICAg ICAobGVhdmUgKEdfICJObyBtb2RzIHdpdGggbmFtZSB+YSB3ZXJlIGZvdW5kLn4lIikgbmFtZSkp KSkpKQorCisMCisKKzs7OworOzs7IEFQSSBlbmRwb2ludHMKKzs7OworCisoZGVmaW5lIGNvbnRl bnRkYi1mZXRjaAorICAobWxhbWJkYSAoYXV0aG9yL25hbWUpCisgICAgIlJldHVybiBhIDxwYWNr YWdlPiByZWNvcmQgZm9yIHBhY2thZ2UgQVVUSE9SL05BTUUsIG9yICNmIG9uIGZhaWx1cmUuIgor ICAgIChhbmQ9PiAoanNvbi1mZXRjaAorICAgICAgICAgICAgKHN0cmluZy1hcHBlbmQgKCVjb250 ZW50ZGItYXBpKSAicGFja2FnZXMvIiBhdXRob3IvbmFtZSAiLyIpKQorICAgICAgICAgICBqc29u LT5wYWNrYWdlKSkpCisKKyhkZWZpbmUgKGNvbnRlbnRkYi1mZXRjaC1yZWxlYXNlcyBhdXRob3Iv bmFtZSkKKyAgIlJldHVybiBhIGxpc3Qgb2YgPHJlbGVhc2U+IHJlY29yZHMgZm9yIHBhY2thZ2Ug TkFNRSBieSBBVVRIT1IsIG9yICNmCitvbiBmYWlsdXJlLiIKKyAgKGFuZD0+IChqc29uLWZldGNo IChzdHJpbmctYXBwZW5kICglY29udGVudGRiLWFwaSkgInBhY2thZ2VzLyIgYXV0aG9yL25hbWUK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIvcmVsZWFzZXMvIikpCisgICAg ICAgICAobGFtYmRhIChqc29uKQorICAgICAgICAgICAobWFwIGpzb24tPnJlbGVhc2UgKHZlY3Rv ci0+bGlzdCBqc29uKSkpKSkKKworKGRlZmluZSAobGF0ZXN0LXJlbGVhc2UgYXV0aG9yL25hbWUp CisgICJSZXR1cm4gdGhlIGxhdGVzdCBzb3VyY2UgcmVsZWFzZSBmb3IgcGFja2FnZSBOQU1FIGJ5 IEFVVEhPUiwKK29yICNmIGlmIHRoaXMgcGFja2FnZSBkb2VzIG5vdCBleGlzdC4iCisgIChhbmQ9 PiAoY29udGVudGRiLWZldGNoLXJlbGVhc2VzIGF1dGhvci9uYW1lKQorICAgICAgICAgY2FyKSkK KworKGRlZmluZSAoY29udGVudGRiLWZldGNoLWRlcGVuZGVuY2llcyBhdXRob3IvbmFtZSkKKyAg IlJldHVybiBhbiBhbGlzdCBvZiBsaXN0cyBvZiA8ZGVwZW5kZW5jeT4gcmVjb3JkcyBmb3IgcGFj a2FnZSBOQU1FIGJ5IEFVVEhPUgorYW5kIHBvc3NpYmx5IHNvbWUgb3RoZXIgcGFja2FnZXMgYXMg d2VsbCwgb3IgI2Ygb24gZmFpbHVyZS4iCisgIChkZWZpbmUgdXJsIChzdHJpbmctYXBwZW5kICgl Y29udGVudGRiLWFwaSkgInBhY2thZ2VzLyIgYXV0aG9yL25hbWUKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIi9kZXBlbmRlbmNpZXMvIikpCisgIChhbmQ9PiAoanNvbi1mZXRjaCB1cmwp CisgICAgICAgICAobGFtYmRhIChqc29uKQorICAgICAgICAgICAobWFwIChtYXRjaC1sYW1iZGEK KyAgICAgICAgICAgICAgICAgICgoa2V5IC4gdmFsdWUpCisgICAgICAgICAgICAgICAgICAgKGNv bnMga2V5IChtYXAganNvbi0+ZGVwZW5kZW5jeSAodmVjdG9yLT5saXN0IHZhbHVlKSkpKSkKKyAg ICAgICAgICAgICAgICBqc29uKSkpKQorCisoZGVmaW5lKiAoY29udGVudGRiLXF1ZXJ5LXBhY2th Z2VzIHEgIzprZXkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHR5cGUgIm1v ZCIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW1pdCA1MCkKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNvcnQgJWRlZmF1bHQtc29ydC1rZXkpCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChvcmRlciAiZGVzYyIpKQorICAiU2Vh cmNoIENvbnRlbnREQiBmb3IgUSAoYSBzdHJpbmcpLiAgU29ydCBieSBTT1JULCBpbiBhc2NlbmRp bmcgb3JkZXIKK2lmIE9SREVSIGlzIFwiYXNjXCIgb3IgZGVzY2VuZGluZyBvcmRlciBpZiBPUkRF UiBpcyBcImRlc2NcIi4gIFRZUEUgbXVzdAorYmUgXCJtb2RcIiwgXCJnYW1lXCIgb3IgXCJ0eHBc IiwgcmVzdHJpY3RpbmcgdGhlcyBzZWFyY2ggcmVzdWx0cyB0bworcmVzcGVjdGl2ZWx5IG1vZHMs IGdhbWVzIGFuZCB0ZXh0dXJlIHBhY2tzLiAgTGltaXQgdG8gYXQgbW9zdCBMSU1JVAorcmVzdWx0 cy4gIFRoZSByZXR1cm4gdmFsdWUgaXMgYSBsaXN0IG9mIDxwYWNrYWdlLWtleXM+IHJlY29yZHMu IgorICA7OyBYWFggZG9lcyBHdWlsZSBoYXZlIHNvbWV0aGluZyBmb3IgY29uc3RydWN0aW5nIChh bmQsIHdoZW4gbmVjZXNzYXJ5LAorICA7OyBlc2NhcGluZykgcXVlcnkgc3RyaW5ncz8KKyAgKGRl ZmluZSB1cmwgKHN0cmluZy1hcHBlbmQgKCVjb250ZW50ZGItYXBpKSAicGFja2FnZXMvP3R5cGU9 IiB0eXBlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICImcT0iIHEgIiZmbXQ9a2V5cyIK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiZsaW1pdD0iIChudW1iZXItPnN0cmluZyBs aW1pdCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiZvcmRlcj0iIG9yZGVyCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICImc29ydD0iIHNvcnQpKQorICAobGV0ICgoanNvbiAo anNvbi1mZXRjaCB1cmwpKSkKKyAgICAoaWYganNvbgorICAgICAgICAobWFwIGpzb24tPnBhY2th Z2Uta2V5cyAodmVjdG9yLT5saXN0IGpzb24pKQorICAgICAgICAobGVhdmUKKyAgICAgICAgIChH XyAiVGhlIHBhY2thZ2Ugc2VhcmNoIEFQSSBkb2Vzbid0IGV4aXN0IGFueW1vcmUufiUiKSkpKSkK KworDAorCis7OyBYWFggY29waWVkIGZyb20gKGd1aXggaW1wb3J0IGVscGEpCisoZGVmaW5lKiAo ZG93bmxvYWQtZ2l0LXJlcG9zaXRvcnkgdXJsIHJlZikKKyAgIkZldGNoIHRoZSBnaXZlbiBSRUYg ZnJvbSB0aGUgR2l0IHJlcG9zaXRvcnkgYXQgVVJMLiIKKyAgKHdpdGgtc3RvcmUgc3RvcmUKKyAg ICAobGF0ZXN0LXJlcG9zaXRvcnktY29tbWl0IHN0b3JlIHVybCAjOnJlZiByZWYpKSkKKworOzsg WFhYIGFkYXB0ZWQgZnJvbSAoZ3VpeCBzY3JpcHRzIGhhc2gpCisoZGVmaW5lIChmaWxlLWhhc2gg ZmlsZSkKKyAgIkNvbXB1dGUgdGhlIGhhc2ggb2YgRklMRS4iCisgIChsZXQtdmFsdWVzICgoKHBv cnQgZ2V0LWhhc2gpIChvcGVuLXNoYTI1Ni1wb3J0KSkpCisgICAgKHdyaXRlLWZpbGUgZmlsZSBw b3J0KQorICAgIChmb3JjZS1vdXRwdXQgcG9ydCkKKyAgICAoZ2V0LWhhc2gpKSkKKworKGRlZmlu ZSAobWFrZS1taW5ldGVzdC1zZXhwIGF1dGhvci9uYW1lIHZlcnNpb24gcmVwb3NpdG9yeSBjb21t aXQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dHMgaG9tZS1wYWdlIHN5bm9wc2lz CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gbWVkaWEtbGljZW5zZSBs aWNlbnNlKQorICAiUmV0dXJuIGEgUy1leHByZXNzaW9uIGZvciB0aGUgbWluZXRlc3QgcGFja2Fn ZSB3aXRoIHRoZSBnaXZlbiBhdXRob3IvTkFNRSwKK1ZFUlNJT04sIFJFUE9TSVRPUlksIENPTU1J VCwgSU5QVVRTLCBIT01FLVBBR0UsIFNZTk9QU0lTLCBERVNDUklQVElPTiwKK01FRElBLUxJQ0VO U0UgYW5kIExJQ0VOU0UuIgorICBgKHBhY2thZ2UKKyAgICAgKG5hbWUgLChjb250ZW50ZGItPnBh Y2thZ2UtbmFtZSBhdXRob3IvbmFtZSkpCisgICAgICh2ZXJzaW9uICx2ZXJzaW9uKQorICAgICAo c291cmNlCisgICAgICAgKG9yaWdpbgorICAgICAgICAgKG1ldGhvZCBnaXQtZmV0Y2gpCisgICAg ICAgICAodXJpIChnaXQtcmVmZXJlbmNlCisgICAgICAgICAgICAgICAgKHVybCAscmVwb3NpdG9y eSkKKyAgICAgICAgICAgICAgICAoY29tbWl0ICxjb21taXQpKSkKKyAgICAgICAgIChzaGEyNTYK KyAgICAgICAgICAoYmFzZTMyCisgICAgICAgICAgIDs7IFRoZSBnaXQgY29tbWl0IGlzIG5vdCBh bHdheXMgYXZhaWxhYmxlLgorICAgICAgICAgICAsKGFuZCBjb21taXQKKyAgICAgICAgICAgICAg ICAgKGJ5dGV2ZWN0b3ItPm5peC1iYXNlMzItc3RyaW5nCisgICAgICAgICAgICAgICAgICAoZmls ZS1oYXNoCisgICAgICAgICAgICAgICAgICAgKGRvd25sb2FkLWdpdC1yZXBvc2l0b3J5IHJlcG9z aXRvcnkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYChjb21t aXQgLiAsY29tbWl0KSkpKSkpKQorICAgICAgICAgKGZpbGUtbmFtZSAoZ2l0LWZpbGUtbmFtZSBu YW1lIHZlcnNpb24pKSkpCisgICAgIChidWlsZC1zeXN0ZW0gbWluZXRlc3QtbW9kLWJ1aWxkLXN5 c3RlbSkKKyAgICAgLEAobWF5YmUtcHJvcGFnYXRlZC1pbnB1dHMgKG1hcCBjb250ZW50ZGItPnBh Y2thZ2UtbmFtZSBpbnB1dHMpKQorICAgICAoaG9tZS1wYWdlICxob21lLXBhZ2UpCisgICAgIChz eW5vcHNpcyAsKGRlbGV0ZS1jciBzeW5vcHNpcykpCisgICAgIChkZXNjcmlwdGlvbiAsKGRlbGV0 ZS1jciBkZXNjcmlwdGlvbikpCisgICAgIChsaWNlbnNlICwoaWYgKGVxPyBtZWRpYS1saWNlbnNl IGxpY2Vuc2UpCisgICAgICAgICAgICAgICAgICAgbGljZW5zZQorICAgICAgICAgICAgICAgICAg IGAobGlzdCAsbWVkaWEtbGljZW5zZSAsbGljZW5zZSkpKQorICAgICA7OyBUaGUgTWluZXRlc3Qg dXBkYXRlciAobm90IHlldCBpbiBHdWl4OyBpdCByZXF1aXJlcyBub3QteWV0LXN1Ym1pdHRlZAor ICAgICA7OyBwYXRjaGVzIHRvIChndWl4IHVwc3RyZWFtKSB0aGF0IHJlcXVpcmUgc29tZSB3b3Jr KSBuZWVkcyB0byBrbm93IGJvdGgKKyAgICAgOzsgdGhlIGF1dGhvciBuYW1lIGFuZCBtb2QgbmFt ZSBmb3IgZWZmaWNpZW5jeS4KKyAgICAgKHByb3BlcnRpZXMgLChsaXN0ICdxdWFzaXF1b3RlIGAo KHVwc3RyZWFtLW5hbWUgLiAsYXV0aG9yL25hbWUpKSkpKSkKKworKGRlZmluZSAocGFja2FnZS1o b21lLXBhZ2UgcGFja2FnZSkKKyAgIkd1ZXNzIHRoZSBob21lIHBhZ2Ugb2YgdGhlIENvbnRlbnRE QiBwYWNrYWdlIFBBQ0tBR0UuCisKK0luIG9yZGVyIG9mIHByZWZlcmVuY2UsIHRyeSB0aGUgJ3dl YnNpdGUnLCB0aGUgZm9ydW0gdG9waWMgb24gdGhlCitvZmZpY2lhbCBNaW5ldGVzdCBmb3J1bSBh bmQgdGhlIEdpdCByZXBvc2l0b3J5IChpZiBhbnkpLiIKKyAgKGRlZmluZSAodG9waWMtPnVybC1z ZXhwIHRvcGljKQorICAgIDs7ICdtaW5ldGVzdC10b3BpYycgaXMgYSBwcm9jZWR1cmUgZGVmaW5l ZCBpbiAoZ251IHBhY2thZ2VzIG1pbmV0ZXN0KQorICAgIGAobWluZXRlc3QtdG9waWMgLHRvcGlj KSkKKyAgKG9yIChwYWNrYWdlLXdlYnNpdGUgcGFja2FnZSkKKyAgICAgIChhbmQ9PiAocGFja2Fn ZS1mb3J1bXMgcGFja2FnZSkgdG9waWMtPnVybC1zZXhwKQorICAgICAgKHBhY2thZ2UtcmVwb3Np dG9yeSBwYWNrYWdlKSkpCisKKzs7IElmIHRoZSBkZWZhdWx0IHNvcnQga2V5IGlzIGNoYW5nZWQs IG1ha2Ugc3VyZSB0byBtb2RpZnkgJ3Nob3ctaGVscCcKKzs7IGluIChndWl4IHNjcmlwdHMgaW1w b3J0IG1pbmV0ZXN0KSBhcHByb3ByaWF0ZWx5IGFzIHdlbGwuCisoZGVmaW5lICVkZWZhdWx0LXNv cnQta2V5ICJzY29yZSIpCisKKyhkZWZpbmUqIChzb3J0LXBhY2thZ2VzIHBhY2thZ2VzICM6a2V5 IChzb3J0ICVkZWZhdWx0LXNvcnQta2V5KSkKKyAgIlNvcnQgUEFDS0FHRVMgYnkgU09SVCwgaW4g ZGVzY2VuZGluZyBvcmRlci4iCisgIChkZWZpbmUgcGFja2FnZS0+a2V5CisgICAgKG1hdGNoIHNv cnQKKyAgICAgICgic2NvcmUiIHBhY2thZ2Utc2NvcmUpCisgICAgICAoImRvd25sb2FkcyIgcGFj a2FnZS1kb3dubG9hZHMpKSkKKyAgKGRlZmluZSAoZ3JlYXRlciB4IHkpCisgICAgKD4gKHBhY2th Z2UtPmtleSB4KSAocGFja2FnZS0+a2V5IHkpKSkKKyAgKHNvcnQtbGlzdCBwYWNrYWdlcyBncmVh dGVyKSkKKworKGRlZmluZSBidWlsdGluLW1vZD8KKyAgKGxldCAoKCVidWlsdGluLW1vZHMKKyAg ICAgICAgIChhbGlzdC0+aGFzaC10YWJsZQorICAgICAgICAgIChtYXAgKGxhbWJkYSAoeCkgKGNv bnMgeCAjdCkpCisgICAgICAgICAgICAgICAnKCJiZWRzIiAiYmlub2N1bGFycyIgImJvYXRzIiAi Ym9uZXMiICJidWNrZXQiICJidXR0ZXJmbGllcyIKKyAgICAgICAgICAgICAgICAgImNhcnRzIiAi Y3JlYXRpdmUiICJkZWZhdWx0IiAiZG9vcnMiICJkdW5nZW9uX2xvb3QiICJkeWUiCisgICAgICAg ICAgICAgICAgICJlbnZfc291bmRzIiAiZmFybWluZyIgImZpcmUiICJmaXJlZmxpZXMiICJmbG93 ZXJzIgorICAgICAgICAgICAgICAgICAiZ2FtZV9jb21tYW5kcyIgImdpdmVfaW5pdGlhbF9zdHVm ZiIgIm1hcCIgIm10Z19jcmFmdGd1aWRlIgorICAgICAgICAgICAgICAgICAicGxheWVyX2FwaSIg InNjcmV3ZHJpdmVyIiAic2V0aG9tZSIgInNmaW52IiAic3Bhd24iICJzdGFpcnMiCisgICAgICAg ICAgICAgICAgICJ0bnQiICJ2ZXNzZWxzIiAid2FsbHMiICJ3ZWF0aGVyIiAid29vbCIgInhwYW5l cyIpKSkpKQorICAgIChsYW1iZGEgKG1vZCkKKyAgICAgICJJcyBNT0QgcHJvdmlkZWQgYnkgdGhl IGRlZmF1bHQgbWluZXRlc3Qgc3ViZ2FtZT8iCisgICAgICAoaGFzaC1yZWYgJWJ1aWx0aW4tbW9k cyBtb2QpKSkpCisKKyhkZWZpbmUqIChpbXBvcnRhbnQtZGVwZW5kZW5jaWVzIGRlcGVuZGVuY2ll cyBhdXRob3IvbmFtZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIzprZXkgKHNv cnQgJWRlZmF1bHQtc29ydC1rZXkpKQorICAiUmV0dXJuIHRoZSBoYXJkIGRlcGVuZGVuY2llcyBv ZiBBVVRIT1IvTkFNRSBpbiB0aGUgYXNzb2NpYXRpb24gbGlzdAorREVQRU5ERU5DSUVTIGFzIGEg bGlzdCBvZiBBVVRIT1IvTkFNRSBzdHJpbmdzLiIKKyAgKGRlZmluZSBkZXBlbmRlbmN5LWxpc3QK KyAgICAoYXNzb2MtcmVmIGRlcGVuZGVuY2llcyBhdXRob3IvbmFtZSkpCisgIChmaWx0ZXItbWFw CisgICAobGFtYmRhIChkZXBlbmRlbmN5KQorICAgICAoYW5kIChub3QgKGRlcGVuZGVuY3ktb3B0 aW9uYWw/IGRlcGVuZGVuY3kpKQorICAgICAgICAgIChub3QgKGJ1aWx0aW4tbW9kPyAoZGVwZW5k ZW5jeS1uYW1lIGRlcGVuZGVuY3kpKSkKKyAgICAgICAgICA7OyBUaGUgZGVwZW5kZW5jeSBpbmZv cm1hdGlvbiBjb250YWlucyBzeW1ib2xpYyBuYW1lcworICAgICAgICAgIDs7IHRoYXQgY2FuIGJl IOKAmHByb3ZpZGVk4oCZIGJ5IG11bHRpcGxlIG1vZHMsIHNvIHdlIG5lZWQgdG8gY2hvb3NlIG9u ZQorICAgICAgICAgIDs7IG9mIHRoZSBpbXBsZW1lbnRhdGlvbnMuCisgICAgICAgICAgKGxldCog KChpbXBsZW1lbnRhdGlvbnMKKyAgICAgICAgICAgICAgICAgIChwYXItbWFwIGNvbnRlbnRkYi1m ZXRjaCAoZGVwZW5kZW5jeS1wYWNrYWdlcyBkZXBlbmRlbmN5KSkpCisgICAgICAgICAgICAgICAg IDs7IEZldGNoaW5nIHBhY2thZ2UgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHBhY2thZ2VzIGlzIHJh Y3k6CisgICAgICAgICAgICAgICAgIDs7IHNvbWUgcGFja2FnZXMgbWlnaHQgYmUgcmVtb3ZlZCBm cm9tIENvbnRlbnREQiBiZXR3ZWVuIHRoZQorICAgICAgICAgICAgICAgICA7OyBjb25zdHJ1Y3Rp b24gb2YgREVQRU5ERU5DSUVTIGFuZCB0aGUgY2FsbCB0bworICAgICAgICAgICAgICAgICA7OyAn Y29udGVudGRiLWZldGNoJy4gIFNvIGZpbHRlciBvdXQgI2YuCisgICAgICAgICAgICAgICAgIDs7 CisgICAgICAgICAgICAgICAgIDs7IEZpbHRlciBvdXQg4oCYZ2FtZXPigJkgdGhhdCBpbmNsdWRl IHRoZSByZXF1ZXN0ZWQgbW9kIC0tIGl0J3MKKyAgICAgICAgICAgICAgICAgOzsgdGhlIG1vZCBp dHNlbGYgd2Ugd2FudC4KKyAgICAgICAgICAgICAgICAgKG1vZHMgKGZpbHRlciAobGFtYmRhIChw KSAoYW5kPT4gcCBwYWNrYWdlLW1vZD8pKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGltcGxlbWVudGF0aW9ucykpCisgICAgICAgICAgICAgICAgIChzb3J0ZWQtbW9kcyAoc29ydC1w YWNrYWdlcyBtb2RzICM6c29ydCBzb3J0KSkpCisgICAgICAgICAgICAobWF0Y2ggc29ydGVkLW1v ZHMKKyAgICAgICAgICAgICAgKChwYWNrYWdlKSAocGFja2FnZS1mdWxsLW5hbWUgcGFja2FnZSkp CisgICAgICAgICAgICAgICgodG9vIC4gbWFueSkKKyAgICAgICAgICAgICAgICh3YXJuaW5nCisg ICAgICAgICAgICAgICAgKEdfICJUaGUgZGVwZW5kZW5jeSB+YSBvZiB+YSBoYXMgbXVsdGlwbGUg ZGlmZmVyZW50IGltcGxlbWVudGF0aW9ucyB+YS5+JSIpCisgICAgICAgICAgICAgICAgKGRlcGVu ZGVuY3ktbmFtZSBkZXBlbmRlbmN5KQorICAgICAgICAgICAgICAgIGF1dGhvci9uYW1lCisgICAg ICAgICAgICAgICAgKG1hcCBwYWNrYWdlLWZ1bGwtbmFtZSBzb3J0ZWQtbW9kcykpCisgICAgICAg ICAgICAgICAobWF0Y2ggc29ydAorICAgICAgICAgICAgICAgICAoInNjb3JlIgorICAgICAgICAg ICAgICAgICAgKHdhcm5pbmcKKyAgICAgICAgICAgICAgICAgICAoR18gIlRoZSBpbXBsZW1lbnRh dGlvbiB3aXRoIHRoZSBoaWdoZXN0IHNjb3JlIHdpbGwgYmUgY2hvb3NlbiF+JSIpKSkKKyAgICAg ICAgICAgICAgICAgKCJkb3dubG9hZHMiCisgICAgICAgICAgICAgICAgICAod2FybmluZworICAg ICAgICAgICAgICAgICAgIChHXyAiVGhlIGltcGxlbWVudGF0aW9uIHRoYXQgaGFzIGJlZW4gZG93 bmxvYWRlZCB0aGUgbW9zdCB3aWxsIGJlIGNob29zZW4hfiUiKSkpKQorICAgICAgICAgICAgICAg KHBhY2thZ2UtZnVsbC1uYW1lIHRvbykpCisgICAgICAgICAgICAgICgoKQorICAgICAgICAgICAg ICAgKHdhcm5pbmcKKyAgICAgICAgICAgICAgICAoR18gIlRoZSBkZXBlbmRlbmN5IH5hIG9mIH5h IGRvZXMgbm90IGhhdmUgYW55IGltcGxlbWVudGF0aW9uLiAgSXQgd2lsbCBiZSBpZ25vcmVkIX4l IikKKyAgICAgICAgICAgICAgICAoZGVwZW5kZW5jeS1uYW1lIGRlcGVuZGVuY3kpIGF1dGhvci9u YW1lKQorICAgICAgICAgICAgICAgI2YpKSkpKQorICAgZGVwZW5kZW5jeS1saXN0KSkKKworKGRl ZmluZSogKCVtaW5ldGVzdC0+Z3VpeC1wYWNrYWdlIGF1dGhvci9uYW1lICM6a2V5IChzb3J0ICVk ZWZhdWx0LXNvcnQta2V5KSkKKyAgIkZldGNoIHRoZSBtZXRhZGF0YSBmb3IgQVVUSE9SL05BTUUg ZnJvbSBodHRwczovL2NvbnRlbnQubWluZXRlc3QubmV0LCBhbmQKK3JldHVybiB0aGUgJ3BhY2th Z2UnIFMtZXhwcmVzc2lvbiBjb3JyZXNwb25kaW5nIHRvIHRoYXQgcGFja2FnZSwgb3IgcmFpc2Ug YW4KK2V4Y2VwdGlvbiBvbiBmYWlsdXJlLiAgT24gc3VjY2VzcywgYWxzbyByZXR1cm4gdGhlIHVw c3RyZWFtIGRlcGVuZGVuY2llcyBhcyBhCitsaXN0IG9mIEFVVEhPUi9OQU1FIHN0cmluZ3MuIgor ICA7OyBDYWxsICdhdXRob3IvbmFtZS0+bmFtZScgdG8gdmVyaWZ5IHRoYXQgQVVUSE9SL05BTUUg c2VlbXMgcmVhc29uYWJsZS4KKyAgKGF1dGhvci9uYW1lLT5uYW1lIGF1dGhvci9uYW1lKQorICAo ZGVmaW5lIHBhY2thZ2UgKGNvbnRlbnRkYi1mZXRjaCBhdXRob3IvbmFtZSkpCisgICh1bmxlc3Mg cGFja2FnZQorICAgIChsZWF2ZSAoR18gIm5vIHBhY2thZ2UgbWV0YWRhdGEgZm9yIH5hIG9uIENv bnRlbnREQn4lIikgYXV0aG9yL25hbWUpKQorICAoZGVmaW5lIGRlcGVuZGVuY2llcyAoY29udGVu dGRiLWZldGNoLWRlcGVuZGVuY2llcyBhdXRob3IvbmFtZSkpCisgICh1bmxlc3MgZGVwZW5kZW5j aWVzCisgICAgKGxlYXZlIChHXyAibm8gZGVwZW5kZW5jeSBpbmZvcm1hdGlvbiBmb3IgfmEgb24g Q29udGVudERCfiUiKSBhdXRob3IvbmFtZSkpCisgIChkZWZpbmUgcmVsZWFzZSAobGF0ZXN0LXJl bGVhc2UgYXV0aG9yL25hbWUpKQorICAodW5sZXNzIHJlbGVhc2UKKyAgICAobGVhdmUgKEdfICJu byByZWxlYXNlIG9mIH5hIG9uIENvbnRlbnREQn4lIikgYXV0aG9yL25hbWUpKQorICAoZGVmaW5l IGltcG9ydGFudC11cHN0cmVhbS1kZXBlbmRlbmNpZXMKKyAgICAoaW1wb3J0YW50LWRlcGVuZGVu Y2llcyBkZXBlbmRlbmNpZXMgYXV0aG9yL25hbWUgIzpzb3J0IHNvcnQpKQorICAodmFsdWVzICht YWtlLW1pbmV0ZXN0LXNleHAgYXV0aG9yL25hbWUKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIChyZWxlYXNlLXRpdGxlIHJlbGVhc2UpIDsgdmVyc2lvbgorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgKHBhY2thZ2UtcmVwb3NpdG9yeSBwYWNrYWdlKQorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgKHJlbGVhc2UtY29tbWl0IHJlbGVhc2UpCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBpbXBvcnRhbnQtdXBzdHJlYW0tZGVwZW5kZW5jaWVzCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAocGFja2FnZS1ob21lLXBhZ2UgcGFja2FnZSkKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIChwYWNrYWdlLXNob3J0LWRlc2NyaXB0aW9uIHBhY2thZ2Up CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocGFja2FnZS1sb25nLWRlc2NyaXB0aW9u IHBhY2thZ2UpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc3BkeC1zdHJpbmctPmxp Y2Vuc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocGFja2FnZS1tZWRpYS1saWNl bnNlIHBhY2thZ2UpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNwZHgtc3RyaW5n LT5saWNlbnNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHBhY2thZ2UtbGljZW5z ZSBwYWNrYWdlKSkpCisgICAgICAgICAgaW1wb3J0YW50LXVwc3RyZWFtLWRlcGVuZGVuY2llcykp CisKKyhkZWZpbmUgbWluZXRlc3QtPmd1aXgtcGFja2FnZQorICAobWVtb2l6ZSAlbWluZXRlc3Qt Pmd1aXgtcGFja2FnZSkpCisKKyhkZWZpbmUqIChtaW5ldGVzdC1yZWN1cnNpdmUtaW1wb3J0IGF1 dGhvci9uYW1lICM6a2V5IChzb3J0ICVkZWZhdWx0LXNvcnQta2V5KSkKKyAgKGRlZmluZSogKG1p bmV0ZXN0LT5ndWl4LXBhY2thZ2UqIGF1dGhvci9uYW1lICM6a2V5IHJlcG8gdmVyc2lvbikKKyAg ICAobWluZXRlc3QtPmd1aXgtcGFja2FnZSBhdXRob3IvbmFtZSAjOnNvcnQgc29ydCkpCisgIChy ZWN1cnNpdmUtaW1wb3J0IGF1dGhvci9uYW1lCisgICAgICAgICAgICAgICAgICAgICM6cmVwby0+ Z3VpeC1wYWNrYWdlIG1pbmV0ZXN0LT5ndWl4LXBhY2thZ2UqCisgICAgICAgICAgICAgICAgICAg ICM6Z3VpeC1uYW1lIGNvbnRlbnRkYi0+cGFja2FnZS1uYW1lKSkKZGlmZiAtLWdpdCBhL2d1aXgv c2NyaXB0cy9pbXBvcnQuc2NtIGIvZ3VpeC9zY3JpcHRzL2ltcG9ydC5zY20KaW5kZXggZjUzZDFh YzFmNC4uYjM2OWEzNjJkMCAxMDA2NDQKLS0tIGEvZ3VpeC9zY3JpcHRzL2ltcG9ydC5zY20KKysr IGIvZ3VpeC9zY3JpcHRzL2ltcG9ydC5zY20KQEAgLTc3LDcgKzc3LDggQEAgcmF0aGVyIHRoYW4g XFxuLiIKIDs7OwogCiAoZGVmaW5lIGltcG9ydGVycyAnKCJnbnUiICJweXBpIiAiY3BhbiIgImhh Y2thZ2UiICJzdGFja2FnZSIgImVnZyIgImVscGEiCi0gICAgICAgICAgICAgICAgICAgICJnZW0i ICJnbyIgImNyYW4iICJjcmF0ZSIgInRleGxpdmUiICJqc29uIiAib3BhbSIpKQorICAgICAgICAg ICAgICAgICAgICAiZ2VtIiAiZ28iICJjcmFuIiAiY3JhdGUiICJ0ZXhsaXZlIiAianNvbiIgIm9w YW0iCisgICAgICAgICAgICAgICAgICAgICJtaW5ldGVzdCIpKQogCiAoZGVmaW5lIChyZXNvbHZl LWltcG9ydGVyIG5hbWUpCiAgIChsZXQgKChtb2R1bGUgKHJlc29sdmUtaW50ZXJmYWNlCmRpZmYg LS1naXQgYS9ndWl4L3NjcmlwdHMvaW1wb3J0L21pbmV0ZXN0LnNjbSBiL2d1aXgvc2NyaXB0cy9p bXBvcnQvbWluZXRlc3Quc2NtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAu LjVmMjA0ZDkwZmMKLS0tIC9kZXYvbnVsbAorKysgYi9ndWl4L3NjcmlwdHMvaW1wb3J0L21pbmV0 ZXN0LnNjbQpAQCAtMCwwICsxLDExNyBAQAorOzs7IEdOVSBHdWl4IC0tLSBGdW5jdGlvbmFsIHBh Y2thZ2UgbWFuYWdlbWVudCBmb3IgR05VCis7OzsgQ29weXJpZ2h0IMKpIDIwMTQgRGF2aWQgVGhv bXBzb24gPGRhdmV0QGdudS5vcmc+Cis7OzsgQ29weXJpZ2h0IMKpIDIwMTggUmljYXJkbyBXdXJt dXMgPHJla2Fkb0BlbGVwaGx5Lm5ldD4KKzs7OyBDb3B5cmlnaHQgwqkgMjAyMSBNYXhpbWUgRGV2 b3MgPG1heGltZWRldm9zQHRlbGVuZXQuYmU+Cis7OzsKKzs7OyBUaGlzIGZpbGUgaXMgcGFydCBv ZiBHTlUgR3VpeC4KKzs7OworOzs7IEdOVSBHdWl4IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g cmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKzs7OyB1bmRlciB0aGUgdGVybXMgb2Yg dGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorOzs7IHRoZSBG cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2Us IG9yIChhdAorOzs7IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKzs7OworOzs7IEdO VSBHdWl4IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws IGJ1dAorOzs7IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg d2FycmFudHkgb2YKKzs7OyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV TEFSIFBVUlBPU0UuICBTZWUgdGhlCis7OzsgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y IG1vcmUgZGV0YWlscy4KKzs7OworOzs7IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg b2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCis7OzsgYWxvbmcgd2l0aCBHTlUgR3Vp eC4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworKGRlZmlu ZS1tb2R1bGUgKGd1aXggc2NyaXB0cyBpbXBvcnQgbWluZXRlc3QpCisgICM6dXNlLW1vZHVsZSAo Z3VpeCB1aSkKKyAgIzp1c2UtbW9kdWxlIChndWl4IHV0aWxzKQorICAjOnVzZS1tb2R1bGUgKGd1 aXggc2NyaXB0cykKKyAgIzp1c2UtbW9kdWxlIChndWl4IGltcG9ydCBtaW5ldGVzdCkKKyAgIzp1 c2UtbW9kdWxlIChndWl4IGltcG9ydCB1dGlscykKKyAgIzp1c2UtbW9kdWxlIChndWl4IHNjcmlw dHMgaW1wb3J0KQorICAjOnVzZS1tb2R1bGUgKHNyZmkgc3JmaS0xKQorICAjOnVzZS1tb2R1bGUg KHNyZmkgc3JmaS0xMSkKKyAgIzp1c2UtbW9kdWxlIChzcmZpIHNyZmktMzcpCisgICM6dXNlLW1v ZHVsZSAoaWNlLTkgbWF0Y2gpCisgICM6dXNlLW1vZHVsZSAoaWNlLTkgZm9ybWF0KQorICAjOmV4 cG9ydCAoZ3VpeC1pbXBvcnQtbWluZXRlc3QpKQorCisMCis7OzsKKzs7OyBDb21tYW5kLWxpbmUg b3B0aW9ucy4KKzs7OworCisoZGVmaW5lICVkZWZhdWx0LW9wdGlvbnMKKyAgYCgoc29ydCAuICwl ZGVmYXVsdC1zb3J0LWtleSkpKQorCisoZGVmaW5lIChzaG93LWhlbHApCisgIChkaXNwbGF5IChH XyAiVXNhZ2U6IGd1aXggaW1wb3J0IG1pbmV0ZXN0IEFVVEhPUi9OQU1FCitJbXBvcnQgYW5kIGNv bnZlcnQgdGhlIE1pbmV0ZXN0IG1vZCBOQU1FIGJ5IEFVVEhPUiBmcm9tIENvbnRlbnREQi5cbiIp KQorICAoZGlzcGxheSAoR18gIgorICAtaCwgLS1oZWxwICAgICAgICAgICAgIGRpc3BsYXkgdGhp cyBoZWxwIGFuZCBleGl0IikpCisgIChkaXNwbGF5IChHXyAiCisgIC1yLCAtLXJlY3Vyc2l2ZSAg ICAgICAgaW1wb3J0IHBhY2thZ2VzIHJlY3Vyc2l2ZWx5IikpCisgIChkaXNwbGF5IChHXyAiCisg IC1WLCAtLXZlcnNpb24gICAgICAgICAgZGlzcGxheSB2ZXJzaW9uIGluZm9ybWF0aW9uIGFuZCBl eGl0IikpCisgIChkaXNwbGF5IChHXyAiCisgICAgICAtLXNvcnQ9S0VZICAgICAgICAgd2hlbiBj aG9vc2luZyBiZXR3ZWVuIG11bHRpcGxlIGltcGxlbWVudGF0aW9ucywKKyAgICAgICAgICAgICAg ICAgICAgICAgICBjaG9vc2UgdGhlIG9uZSB3aXRoIHRoZSBoaWdoZXN0IHZhbHVlIGZvciBLRVkK KyAgICAgICAgICAgICAgICAgICAgICAgICAob25lIG9mIFwic2NvcmVcIiAoc3RhbmRhcmQpIG9y IFwiZG93bmxvYWRzXCIpIikpCisgIChuZXdsaW5lKQorICAoc2hvdy1idWctcmVwb3J0LWluZm9y bWF0aW9uKSkKKworKGRlZmluZSAodmVyaWZ5LXNvcnQtb3JkZXIgc29ydCkKKyAgIlZlcmlmeSBT T1JUIGNhbiBiZSB1c2VkIHRvIHNvcnQgbW9kcyBieS4iCisgICh1bmxlc3MgKG1lbWJlciBzb3J0 ICcoInNjb3JlIiAiZG93bmxvYWRzIiAicmV2aWV3cyIpKQorICAgIChsZWF2ZSAoR18gIn5hOiBu b3QgYSB2YWxpZCBrZXkgdG8gc29ydCBieX4lIikgc29ydCkpCisgIHNvcnQpCisKKyhkZWZpbmUg JW9wdGlvbnMKKyAgOzsgU3BlY2lmaWNhdGlvbiBvZiB0aGUgY29tbWFuZC1saW5lIG9wdGlvbnMu CisgIChjb25zKiAob3B0aW9uICcoI1xoICJoZWxwIikgI2YgI2YKKyAgICAgICAgICAgICAgICAg KGxhbWJkYSBhcmdzCisgICAgICAgICAgICAgICAgICAgKHNob3ctaGVscCkKKyAgICAgICAgICAg ICAgICAgICAoZXhpdCAwKSkpCisgICAgICAgICAob3B0aW9uICcoI1xWICJ2ZXJzaW9uIikgI2Yg I2YKKyAgICAgICAgICAgICAgICAgKGxhbWJkYSBhcmdzCisgICAgICAgICAgICAgICAgICAgKHNo b3ctdmVyc2lvbi1hbmQtZXhpdCAiZ3VpeCBpbXBvcnQgbWluZXRlc3QiKSkpCisgICAgICAgICAo b3B0aW9uICcoI1xyICJyZWN1cnNpdmUiKSAjZiAjZgorICAgICAgICAgICAgICAgICAobGFtYmRh IChvcHQgbmFtZSBhcmcgcmVzdWx0KQorICAgICAgICAgICAgICAgICAgIChhbGlzdC1jb25zICdy ZWN1cnNpdmUgI3QgcmVzdWx0KSkpCisgICAgICAgICAob3B0aW9uICcoInNvcnQiKSAjdCAjZgor ICAgICAgICAgICAgICAgICAobGFtYmRhIChvcHQgbmFtZSBhcmcgcmVzdWx0KQorICAgICAgICAg ICAgICAgICAgIChhbGlzdC1jb25zICdzb3J0ICh2ZXJpZnktc29ydC1vcmRlciBhcmcpIHJlc3Vs dCkpKQorICAgICAgICAgJXN0YW5kYXJkLWltcG9ydC1vcHRpb25zKSkKKworDAorOzs7Cis7Ozsg RW50cnkgcG9pbnQuCis7OzsKKworKGRlZmluZSAoZ3VpeC1pbXBvcnQtbWluZXRlc3QgLiBhcmdz KQorICAoZGVmaW5lIChwYXJzZS1vcHRpb25zKQorICAgIDs7IFJldHVybiB0aGUgYWxpc3Qgb2Yg b3B0aW9uIHZhbHVlcy4KKyAgICAoYXJncy1mb2xkKiBhcmdzICVvcHRpb25zCisgICAgICAgICAg ICAgICAgKGxhbWJkYSAob3B0IG5hbWUgYXJnIHJlc3VsdCkKKyAgICAgICAgICAgICAgICAgIChs ZWF2ZSAoR18gIn5BOiB1bnJlY29nbml6ZWQgb3B0aW9ufiUiKSBuYW1lKSkKKyAgICAgICAgICAg ICAgICAobGFtYmRhIChhcmcgcmVzdWx0KQorICAgICAgICAgICAgICAgICAgKGFsaXN0LWNvbnMg J2FyZ3VtZW50IGFyZyByZXN1bHQpKQorICAgICAgICAgICAgICAgICVkZWZhdWx0LW9wdGlvbnMp KQorCisgIChsZXQqICgob3B0cyAocGFyc2Utb3B0aW9ucykpCisgICAgICAgICAoYXJncyAoZmls dGVyLW1hcCAobWF0Y2gtbGFtYmRhCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgnYXJn dW1lbnQgLiB2YWx1ZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUpCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgKF8gI2YpKQorICAgICAgICAgICAgICAgICAgICAgICAg ICAgKHJldmVyc2Ugb3B0cykpKSkKKyAgICAobWF0Y2ggYXJncworICAgICAgKChuYW1lKQorICAg ICAgICh3aXRoLWVycm9yLWhhbmRsaW5nCisgICAgICAgICAobGV0KiAoKHNvcnQgKGFzc29jLXJl ZiBvcHRzICdzb3J0KSkKKyAgICAgICAgICAgICAgICAoYXV0aG9yL25hbWUgKGVsYWJvcmF0ZS1j b250ZW50ZGItbmFtZSBuYW1lICM6c29ydCBzb3J0KSkpCisgICAgICAgICAgIChpZiAoYXNzb2Mt cmVmIG9wdHMgJ3JlY3Vyc2l2ZSkKKyAgICAgICAgICAgICAgIDs7IFJlY3Vyc2l2ZSBpbXBvcnQK KyAgICAgICAgICAgICAgIChmaWx0ZXItbWFwIHBhY2thZ2UtPmRlZmluaXRpb24KKyAgICAgICAg ICAgICAgICAgICAgICAgICAgIChtaW5ldGVzdC1yZWN1cnNpdmUtaW1wb3J0IGF1dGhvci9uYW1l ICM6c29ydCBzb3J0KSkKKyAgICAgICAgICAgICAgIDs7IFNpbmdsZSBpbXBvcnQKKyAgICAgICAg ICAgICAgIChtaW5ldGVzdC0+Z3VpeC1wYWNrYWdlIGF1dGhvci9uYW1lICM6c29ydCBzb3J0KSkp KSkKKyAgICAgICgoKQorICAgICAgIChsZWF2ZSAoR18gInRvbyBmZXcgYXJndW1lbnRzfiUiKSkp CisgICAgICAoKG1hbnkgLi4uKQorICAgICAgIChsZWF2ZSAoR18gInRvbyBtYW55IGFyZ3VtZW50 c34lIikpKSkpKQpkaWZmIC0tZ2l0IGEvcG8vZ3VpeC9QT1RGSUxFUy5pbiBiL3BvL2d1aXgvUE9U RklMRVMuaW4KaW5kZXggYTNiY2VkMWE4Zi4uZjI1YTdiNDgwMiAxMDA2NDQKLS0tIGEvcG8vZ3Vp eC9QT1RGSUxFUy5pbgorKysgYi9wby9ndWl4L1BPVEZJTEVTLmluCkBAIC02MCw2ICs2MCw3IEBA IGd1aXgvc2NyaXB0cy9naXQuc2NtCiBndWl4L3NjcmlwdHMvZ2l0L2F1dGhlbnRpY2F0ZS5zY20K IGd1aXgvc2NyaXB0cy9oYXNoLnNjbQogZ3VpeC9zY3JpcHRzL2ltcG9ydC5zY20KK2d1aXgvc2Ny aXB0cy9pbXBvcnQvY29udGVudGRiLnNjbQogZ3VpeC9zY3JpcHRzL2ltcG9ydC9jcmFuLnNjbQog Z3VpeC9zY3JpcHRzL2ltcG9ydC9lbHBhLnNjbQogZ3VpeC9zY3JpcHRzL3B1bGwuc2NtCmRpZmYg LS1naXQgYS90ZXN0cy9taW5ldGVzdC5zY20gYi90ZXN0cy9taW5ldGVzdC5zY20KbmV3IGZpbGUg bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uNmFlNDc2ZmU1ZgotLS0gL2Rldi9udWxsCisr KyBiL3Rlc3RzL21pbmV0ZXN0LnNjbQpAQCAtMCwwICsxLDM1NSBAQAorOzs7IEdOVSBHdWl4IC0t LSBGdW5jdGlvbmFsIHBhY2thZ2UgbWFuYWdlbWVudCBmb3IgR05VCis7OzsgQ29weXJpZ2h0IMKp IDIwMjEgTWF4aW1lIERldm9zIDxtYXhpbWVkZXZvc0B0ZWxlbmV0LmJlPgorOzs7Cis7OzsgVGhp cyBmaWxlIGlzIHBhcnQgb2YgR05VIEd1aXguCis7OzsKKzs7OyBHTlUgR3VpeCBpcyBmcmVlIHNv ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0Cis7OzsgdW5k ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNo ZWQgYnkKKzs7OyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAz IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQKKzs7OyB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp b24uCis7OzsKKzs7OyBHTlUgR3VpeCBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0 IHdpbGwgYmUgdXNlZnVsLCBidXQKKzs7OyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCis7OzsgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorOzs7IEdOVSBHZW5lcmFsIFB1 YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCis7OzsKKzs7OyBZb3Ugc2hvdWxkIGhhdmUg cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorOzs7IGFs b25nIHdpdGggR05VIEd1aXguICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vu c2VzLz4uCisKKyhkZWZpbmUtbW9kdWxlICh0ZXN0LW1pbmV0ZXN0KQorICAjOnVzZS1tb2R1bGUg KGd1aXggbWVtb2l6YXRpb24pCisgICM6dXNlLW1vZHVsZSAoZ3VpeCBpbXBvcnQgbWluZXRlc3Qp CisgICM6dXNlLW1vZHVsZSAoZ3VpeCBpbXBvcnQgdXRpbHMpCisgICM6dXNlLW1vZHVsZSAoZ3Vp eCB0ZXN0cykKKyAgIzp1c2UtbW9kdWxlIChqc29uKQorICAjOnVzZS1tb2R1bGUgKGljZS05IG1h dGNoKQorICAjOnVzZS1tb2R1bGUgKHNyZmkgc3JmaS0xKQorICAjOnVzZS1tb2R1bGUgKHNyZmkg c3JmaS0yNikKKyAgIzp1c2UtbW9kdWxlIChzcmZpIHNyZmktMzQpCisgICM6dXNlLW1vZHVsZSAo c3JmaSBzcmZpLTY0KSkKKworDAorOzsgU29tZSBwcm9jZWR1cmVzIGZvciBwb3B1bGF0aW5nIGEg 4oCYZmFrZeKAmSBDb250ZW50REIgc2VydmVyLgorCisoZGVmaW5lKiAobWFrZS1wYWNrYWdlLXNl eHAgIzprZXkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZ3VpeC1uYW1lICJtaW5ldGVz dC1mb28iKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIChob21lLXBhZ2UgImh0dHBzOi8v ZXhhbXBsZS5vcmcvZm9vIikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAocmVwbyAiaHR0 cHM6Ly9leGFtcGxlLm9yZy9mb28uZ2l0IikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAo c3lub3BzaXMgInN5bm9wc2lzIikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZ3VpeC1k ZXNjcmlwdGlvbiAiZGVzY3JpcHRpb24iKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIChn dWl4LWxpY2Vuc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyhsaXN0IGxpY2Vuc2U6 Y2MtYnktc2E0LjAgbGljZW5zZTpsZ3BsMyspKQorICAgICAgICAgICAgICAgICAgICAgICAgICAg IChpbnB1dHMgJygpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1cHN0cmVhbS1uYW1l ICJBdXRob3IvZm9vIikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAjOmFsbG93LW90aGVy LWtleXMpCisgIGAocGFja2FnZQorICAgICAobmFtZSAsZ3VpeC1uYW1lKQorICAgICA7OyBUaGlz IGlzIG5vdCBhIHByb3BlciB2ZXJzaW9uIG51bWJlciBidXQgQ29udGVudERCIGRvZXMgbm90IGlu Y2x1ZGUKKyAgICAgOzsgdmVyc2lvbiBudW1iZXJzLgorICAgICAodmVyc2lvbiAiMjAyMS0wNy0y NSIpCisgICAgIChzb3VyY2UKKyAgICAgIChvcmlnaW4KKyAgICAgICAgKG1ldGhvZCBnaXQtZmV0 Y2gpCisgICAgICAgICh1cmkgKGdpdC1yZWZlcmVuY2UKKyAgICAgICAgICAgICAgKHVybCAsKGFu ZCAobm90IChlcT8gcmVwbyAnbnVsbCkpIHJlcG8pKQorICAgICAgICAgICAgICAoY29tbWl0ICNm KSkpCisgICAgICAgIChzaGEyNTYKKyAgICAgICAgIChiYXNlMzIgI2YpKQorICAgICAgICAoZmls ZS1uYW1lIChnaXQtZmlsZS1uYW1lIG5hbWUgdmVyc2lvbikpKSkKKyAgICAgKGJ1aWxkLXN5c3Rl bSBtaW5ldGVzdC1tb2QtYnVpbGQtc3lzdGVtKQorICAgICAsQChtYXliZS1wcm9wYWdhdGVkLWlu cHV0cyBpbnB1dHMpCisgICAgIChob21lLXBhZ2UgLGhvbWUtcGFnZSkKKyAgICAgKHN5bm9wc2lz ICxzeW5vcHNpcykKKyAgICAgKGRlc2NyaXB0aW9uICxndWl4LWRlc2NyaXB0aW9uKQorICAgICAo bGljZW5zZSAsZ3VpeC1saWNlbnNlKQorICAgICAocHJvcGVydGllcworICAgICAgLChsaXN0ICdx dWFzaXF1b3RlCisgICAgICAgICAgICAgYCgodXBzdHJlYW0tbmFtZSAuICx1cHN0cmVhbS1uYW1l KSkpKSkpCisKKyhkZWZpbmUqIChtYWtlLXBhY2thZ2UtanNvbiAjOmtleQorICAgICAgICAgICAg ICAgICAgICAgICAgICAgIChhdXRob3IgIkF1dGhvciIpCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgKG5hbWUgImZvbyIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1lZGlhLWxp Y2Vuc2UgIkNDLUJZLVNBLTQuMCIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpY2Vu c2UgIkxHUEwtMy4wLW9yLWxhdGVyIikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc2hv cnQtZGVzY3JpcHRpb24gInN5bm9wc2lzIikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAo bG9uZy1kZXNjcmlwdGlvbiAiZGVzY3JpcHRpb24iKQorICAgICAgICAgICAgICAgICAgICAgICAg ICAgIChyZXBvICJodHRwczovL2V4YW1wbGUub3JnL2Zvby5naXQiKQorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICh3ZWJzaXRlICJodHRwczovL2V4YW1wbGUub3JnL2ZvbyIpCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgKGZvcnVtcyAzMjEpCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgKHNjb3JlIDk4Ny42NTQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGRvd25s b2FkcyAxMjMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHR5cGUgIm1vZCIpCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIzphbGxvdy1vdGhlci1rZXlzKQorICBgKCgiYXV0aG9y IiAuICxhdXRob3IpCisgICAgKCJjb250ZW50X3dhcm5pbmdzIiAuICMoKSkKKyAgICAoImNyZWF0 ZWRfYXQiIC4gIjIwMTgtMDUtMjNUMTk6NTg6MDcuNDIyMTA4IikKKyAgICAoImRvd25sb2FkcyIg LiAsZG93bmxvYWRzKQorICAgICgiZm9ydW1zIiAuICxmb3J1bXMpCisgICAgKCJpc3N1ZV90cmFj a2VyIiAuICJodHRwczovL2V4YW1wbGUub3JnL2Zvby9pc3N1ZXMiKQorICAgICgibGljZW5zZSIg LiAsbGljZW5zZSkKKyAgICAoImxvbmdfZGVzY3JpcHRpb24iIC4gLGxvbmctZGVzY3JpcHRpb24p CisgICAgKCJtYWludGFpbmVycyIgLiAjKCJtYWludGFpbmVyIikpCisgICAgKCJtZWRpYV9saWNl bnNlIiAuICxtZWRpYS1saWNlbnNlKQorICAgICgibmFtZSIgLiAsbmFtZSkKKyAgICAoInByb3Zp ZGVzIiAuICMoInN0dWZmIikpCisgICAgKCJyZWxlYXNlIiAuIDQ1NikKKyAgICAoInJlcG8iIC4g LHJlcG8pCisgICAgKCJzY29yZSIgLiAsc2NvcmUpCisgICAgKCJzY3JlZW5zaG90cyIgLiAjKCkp CisgICAgKCJzaG9ydF9kZXNjcmlwdGlvbiIgLiAsc2hvcnQtZGVzY3JpcHRpb24pCisgICAgKCJz dGF0ZSIgLiAiQVBQUk9WRUQiKQorICAgICgidGFncyIgLiAjKCJzb21lIiAidGFncyIpKQorICAg ICgidGh1bWJuYWlsIiAuIG51bGwpCisgICAgKCJ0aXRsZSIgLiAiVGhlIG5hbWUiKQorICAgICgi dHlwZSIgLiAsdHlwZSkKKyAgICAoInVybCIgLiAsKHN0cmluZy1hcHBlbmQgImh0dHBzOi8vY29u dGVudC5taW5ldGVzdC5uZXQvcGFja2FnZXMvIgorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBhdXRob3IgIi8iIG5hbWUgIi9kb3dubG9hZC8iKSkKKyAgICAoIndlYnNpdGUiIC4gLHdlYnNp dGUpKSkKKworKGRlZmluZSogKG1ha2UtcmVsZWFzZXMtanNvbiAjOmtleSAoY29tbWl0ICNmKSAo dGl0bGUgIiIpICM6YWxsb3ctb3RoZXIta2V5cykKKyAgYCMoKCgiY29tbWl0IiAuICxjb21taXQp CisgICAgICAoImRvd25sb2FkcyIgLiA0NjkpCisgICAgICAoImlkIiAuIDg2MTQpCisgICAgICAo Im1heF9taW5ldGVzdF92ZXJzaW9uIiAuIG51bGwpCisgICAgICAoIm1pbl9taW5ldGVzdF92ZXJz aW9uIiAuIG51bGwpCisgICAgICAoInJlbGVhc2VfZGF0ZSIgLiAiMjAyMS0wNy0yNVQwMToxMDoy My4yMDc1ODQiKQorICAgICAgKCJ0aXRsZSIgLiAiMjAyMS0wNy0yNSIpKSkpCisKKyhkZWZpbmUq IChtYWtlLWRlcGVuZGVuY2llcy1qc29uICM6a2V5IChhdXRob3IgIkF1dGhvciIpCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAobmFtZSAiZm9vIikKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIChyZXF1aXJlbWVudHMgJygoImRlZmF1bHQiICNmICgpKSkpCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjOmFsbG93LW90aGVyLWtleXMpCisgIGAoKCwo c3RyaW5nLWFwcGVuZCBhdXRob3IgIi8iIG5hbWUpCisgICAgIC4gLChsaXN0LT52ZWN0b3IKKyAg ICAgICAgIChtYXAgKG1hdGNoLWxhbWJkYQorICAgICAgICAgICAgICAgICgoc3ltYm9saWMtbmFt ZSBvcHRpb25hbD8gaW1wbGVtZW50YXRpb25zKQorICAgICAgICAgICAgICAgICBgKCgiaXNfb3B0 aW9uYWwiIC4gLG9wdGlvbmFsPykKKyAgICAgICAgICAgICAgICAgICAoIm5hbWUiIC4gLHN5bWJv bGljLW5hbWUpCisgICAgICAgICAgICAgICAgICAgKCJwYWNrYWdlcyIgLiAsKGxpc3QtPnZlY3Rv ciBpbXBsZW1lbnRhdGlvbnMpKSkpKQorICAgICAgICAgICAgICByZXF1aXJlbWVudHMpKSkKKyAg ICAoInNvbWV0aGluZy9lbHNlIiAuICMoKSkpKQorCisoZGVmaW5lKiAobWFrZS1wYWNrYWdlcy1r ZXlzLWpzb24gIzprZXkgKGF1dGhvciAiQXV0aG9yIikKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAobmFtZSAiTmFtZSIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgKHR5cGUgIm1vZCIpKQorICBgKCgiYXV0aG9yIiAuICxhdXRob3IpCisgICAgKCJuYW1lIiAu ICxuYW1lKQorICAgICgidHlwZSIgLiAsdHlwZSkpKQorCisoZGVmaW5lIChjYWxsLXdpdGgtcGFj a2FnZXMgdGh1bmsgLiBhcmd1bWVudC1saXN0cykKKyAgOzsgRG9uJ3QgcmV1c2UgcmVzdWx0cyBm cm9tIHByZXZpb3VzIHRlc3RzLgorICAoaW52YWxpZGF0ZS1tZW1vaXphdGlvbiEgY29udGVudGRi LWZldGNoKQorICAoaW52YWxpZGF0ZS1tZW1vaXphdGlvbiEgbWluZXRlc3QtPmd1aXgtcGFja2Fn ZSkKKyAgKGRlZmluZSAoc2NtLT5qc29uLXBvcnQgc2NtKQorICAgIChvcGVuLWlucHV0LXN0cmlu ZyAoc2NtLT5qc29uLXN0cmluZyBzY20pKSkKKyAgKGRlZmluZSAoaGFuZGxlLXBhY2thZ2UgdXJs IHJlcXVlc3RlZC1hdXRob3IgcmVxdWVzdGVkLW5hbWUgLiByZXN0KQorICAgIChkZWZpbmUgcmVs ZXZhbnQtYXJndW1lbnQtbGlzdAorICAgICAgKGFueSAobGFtYmRhIChhcmd1bWVudC1saXN0KQor ICAgICAgICAgICAgIChhcHBseSAobGFtYmRhKiAoIzprZXkgKGF1dGhvciAiQXV0aG9yIikgKG5h bWUgImZvbyIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjOmFsbG93LW90aGVyLWtl eXMpCisgICAgICAgICAgICAgICAgICAgICAgKGFuZCAoZXF1YWw/IHJlcXVlc3RlZC1hdXRob3Ig YXV0aG9yKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgKGVxdWFsPyByZXF1ZXN0ZWQtbmFt ZSBuYW1lKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJndW1lbnQtbGlzdCkpCisgICAg ICAgICAgICAgICAgICAgIGFyZ3VtZW50LWxpc3QpKQorICAgICAgICAgICBhcmd1bWVudC1saXN0 cykpCisgICAgKHdoZW4gKG5vdCByZWxldmFudC1hcmd1bWVudC1saXN0KQorICAgICAgKGVycm9y ICJ0aGUgcGFja2FnZSB+YS9+YSBzaG91bGQgYmUgaXJyZWxldmFudCwgYnV0IH5hIGlzIGZldGNo ZWQiCisgICAgICAgICAgICAgcmVxdWVzdGVkLWF1dGhvciByZXF1ZXN0ZWQtbmFtZSB1cmwpKQor ICAgIChzY20tPmpzb24tcG9ydAorICAgICAoYXBwbHkgKG1hdGNoIHJlc3QKKyAgICAgICAgICAg ICAgKCgiIikgbWFrZS1wYWNrYWdlLWpzb24pCisgICAgICAgICAgICAgICgoImRlcGVuZGVuY2ll cyIgIiIpIG1ha2UtZGVwZW5kZW5jaWVzLWpzb24pCisgICAgICAgICAgICAgICgoInJlbGVhc2Vz IiAiIikgbWFrZS1yZWxlYXNlcy1qc29uKQorICAgICAgICAgICAgICAoXyAoZXJyb3IgIlRPRE8g fmEiIHJlc3QpKSkKKyAgICAgICAgICAgIHJlbGV2YW50LWFyZ3VtZW50LWxpc3QpKSkKKyAgKGRl ZmluZSAoaGFuZGxlLW1vZC1zZWFyY2ggc29ydCkKKyAgICA7OyBQcm9kdWNlIHNlYXJjaCByZXN1 bHRzLCBzb3J0ZWQgYnkgU09SVCBpbiBkZXNjZW5kaW5nIG9yZGVyLgorICAgIChkZWZpbmUgYXJn dW1lbnRzLT5rZXkKKyAgICAgIChtYXRjaCBzb3J0CisgICAgICAgICgic2NvcmUiIChsYW1iZGEq ICgjOmtleSAoc2NvcmUgOTg3LjY1NCkgIzphbGxvdy1vdGhlci1rZXlzKQorICAgICAgICAgICAg ICAgICAgIHNjb3JlKSkKKyAgICAgICAgKCJkb3dubG9hZHMiIChsYW1iZGEqICgjOmtleSAoZG93 bmxvYWRzIDEyMykgIzphbGxvdy1vdGhlci1rZXlzKQorICAgICAgICAgICAgICAgICAgICAgICBk b3dubG9hZHMpKSkpCisgICAgKGRlZmluZSBhcmd1bWVudC1saXN0LT5rZXkgKGN1dCBhcHBseSBh cmd1bWVudHMtPmtleSA8PikpCisgICAgKGRlZmluZSAoZ3JlYXRlciB4IHkpCisgICAgICAoPiAo YXJndW1lbnQtbGlzdC0+a2V5IHgpIChhcmd1bWVudC1saXN0LT5rZXkgeSkpKQorICAgIChkZWZp bmUgc29ydGVkLWFyZ3VtZW50LWxpc3RzIChzb3J0LWxpc3QgYXJndW1lbnQtbGlzdHMgZ3JlYXRl cikpCisgICAgKGRlZmluZSogKGFyZ3VtZW50cy0+anNvbiAjOmtleSAoYXV0aG9yICJBdXRob3Ii KSAobmFtZSAiRm9vIikgKHR5cGUgIm1vZCIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAjOmFsbG93LW90aGVyLWtleXMpCisgICAgICAoYW5kIChzdHJpbmc9PyB0eXBlICJtb2QiKQor ICAgICAgICAgICBgKCgiYXV0aG9yIiAuICxhdXRob3IpCisgICAgICAgICAgICAgKCJuYW1lIiAu ICxuYW1lKQorICAgICAgICAgICAgICgidHlwZSIgLiAsdHlwZSkpKSkKKyAgICAoZGVmaW5lIGFy Z3VtZW50LWxpc3QtPmpzb24gKGN1dCBhcHBseSBhcmd1bWVudHMtPmpzb24gPD4pKQorICAgIChz Y20tPmpzb24tcG9ydAorICAgICAobGlzdC0+dmVjdG9yIChmaWx0ZXItbWFwIGFyZ3VtZW50LWxp c3QtPmpzb24gc29ydGVkLWFyZ3VtZW50LWxpc3RzKSkpKQorICAobW9jayAoKGd1aXggaHR0cC1j bGllbnQpIGh0dHAtZmV0Y2gKKyAgICAgICAgIChsYW1iZGEqICh1cmwgIzprZXkgaGVhZGVycykK KyAgICAgICAgICAgKHVubGVzcyAoc3RyaW5nLXByZWZpeD8gIm1vY2s6Ly9hcGkvcGFja2FnZXMv IiB1cmwpCisgICAgICAgICAgICAgKGVycm9yICJ0aGUgVVJMIH5hIHNob3VsZCBub3QgYmUgdXNl ZCIgdXJsKSkKKyAgICAgICAgICAgKGRlZmluZSByZXNvdXJjZQorICAgICAgICAgICAgIChzdWJz dHJpbmcgdXJsIChzdHJpbmctbGVuZ3RoICJtb2NrOi8vYXBpL3BhY2thZ2VzLyIpKSkKKyAgICAg ICAgICAgKGRlZmluZSBjb21wb25lbnRzIChzdHJpbmctc3BsaXQgcmVzb3VyY2UgI1wvKSkKKyAg ICAgICAgICAgKG1hdGNoIGNvbXBvbmVudHMKKyAgICAgICAgICAgICAoKGF1dGhvciBuYW1lIC4g cmVzdCkKKyAgICAgICAgICAgICAgKGFwcGx5IGhhbmRsZS1wYWNrYWdlIHVybCBhdXRob3IgbmFt ZSByZXN0KSkKKyAgICAgICAgICAgICAoKCg/IChjdXQgc3RyaW5nLXByZWZpeD8gIj90eXBlPW1v ZCZxPSIgPD4pIHF1ZXJ5KSkKKyAgICAgICAgICAgICAgKGhhbmRsZS1tb2Qtc2VhcmNoCisgICAg ICAgICAgICAgICAoY29uZCAoKHN0cmluZy1jb250YWlucyBxdWVyeSAic29ydD1zY29yZSIpICJz Y29yZSIpCisgICAgICAgICAgICAgICAgICAgICAoKHN0cmluZy1jb250YWlucyBxdWVyeSAic29y dD1kb3dubG9hZHMiKSAiZG93bmxvYWRzIikKKyAgICAgICAgICAgICAgICAgICAgICgjdCAoZXJy b3IgInNlYXJjaCBxdWVyeSB+YSBoYXMgdW5rbm93biBzb3J0IGtleSIKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgcXVlcnkpKSkpKQorICAgICAgICAgICAgIChfCisgICAgICAgICAg ICAgIChlcnJvciAidGhlIFVSTCB+YSBzaG91bGQgaGF2ZSBhbiBhdXRob3IgYW5kIG5hbWUgY29t cG9uZW50IgorICAgICAgICAgICAgICAgICAgICAgdXJsKSkpKSkKKyAgICAgICAgKHBhcmFtZXRl cml6ZSAoKCVjb250ZW50ZGItYXBpICJtb2NrOi8vYXBpLyIpKQorICAgICAgICAgICh0aHVuaykp KSkKKworKGRlZmluZSogKG1pbmV0ZXN0LT5ndWl4LXBhY2thZ2UqICM6a2V5IChhdXRob3IgIkF1 dGhvciIpIChuYW1lICJmb28iKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChz b3J0ICVkZWZhdWx0LXNvcnQta2V5KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICM6YWxsb3ctb3RoZXIta2V5cykKKyAgKG1pbmV0ZXN0LT5ndWl4LXBhY2thZ2UgKHN0cmluZy1h cHBlbmQgYXV0aG9yICIvIiBuYW1lKSAjOnNvcnQgc29ydCkpCisKKyhkZWZpbmUgKGltcG9ydGVk LXBhY2thZ2Utc2V4cCogcHJpbWFyeS1hcmd1bWVudHMgLiBzZWNvbmRhcnktYXJndW1lbnRzKQor ICAiQXNrIHRoZSBpbXBvcnRlciB0byBpbXBvcnQgYSBwYWNrYWdlIHNwZWNpZmllZCBieSBQUklN QVJZLUFSR1VNRU5UUywKK2R1cmluZyBhIGR5bmFtaWMgd2hlcmUgdGhhdCBwYWNrYWdlIGFuZCB0 aGUgcGFja2FnZXMgc3BlY2lmaWVkIGJ5CitTRUNPTkRBUlktQVJHVU1FTlRTIGFyZSBhdmFpbGFi bGUgb24gQ29udGVudERCLiIKKyAgKGFwcGx5IGNhbGwtd2l0aC1wYWNrYWdlcworICAgICAgICAg KGxhbWJkYSAoKQorICAgICAgICAgICA7OyBUaGUgbWVtb2l6YXRpb24gY2FjaGUgaXMgcmVzZXQg YnkgY2FsbC13aXRoLXBhY2thZ2VzCisgICAgICAgICAgIChhcHBseSBtaW5ldGVzdC0+Z3VpeC1w YWNrYWdlKiBwcmltYXJ5LWFyZ3VtZW50cykpCisgICBwcmltYXJ5LWFyZ3VtZW50cworICAgc2Vj b25kYXJ5LWFyZ3VtZW50cykpCisKKyhkZWZpbmUgKGltcG9ydGVkLXBhY2thZ2Utc2V4cCAuIGV4 dHJhLWFyZ3VtZW50cykKKyAgIkFzayB0aGUgaW1wb3J0ZXIgdG8gaW1wb3J0IGEgcGFja2FnZSBz cGVjaWZpZWQgYnkgRVhUUkEtQVJHVU1FTlRTLAorZHVyaW5nIGEgZHluYW1pYyBleHRlbnQgd2hl cmUgdGhhdCBwYWNrYWdlIGlzIGF2YWlsYWJsZSBvbiBDb250ZW50REIuIgorICAoaW1wb3J0ZWQt cGFja2FnZS1zZXhwKiBleHRyYS1hcmd1bWVudHMpKQorCisoZGVmaW5lLXN5bnRheC1ydWxlICh0 ZXN0LXBhY2thZ2UgdGVzdC1jYXNlIC4gZXh0cmEtYXJndW1lbnRzKQorICAodGVzdC1lcXVhbCB0 ZXN0LWNhc2UKKyAgICAobWFrZS1wYWNrYWdlLXNleHAgLiBleHRyYS1hcmd1bWVudHMpCisgICAg KGltcG9ydGVkLXBhY2thZ2Utc2V4cCAuIGV4dHJhLWFyZ3VtZW50cykpKQorCisoZGVmaW5lLXN5 bnRheC1ydWxlICh0ZXN0LXBhY2thZ2UqIHRlc3QtY2FzZSBwcmltYXJ5LWFyZ3VtZW50cyBleHRy YS1hcmd1bWVudHMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uKQorICAo dGVzdC1lcXVhbCB0ZXN0LWNhc2UKKyAgICAoYXBwbHkgbWFrZS1wYWNrYWdlLXNleHAgcHJpbWFy eS1hcmd1bWVudHMpCisgICAgKGltcG9ydGVkLXBhY2thZ2Utc2V4cCogcHJpbWFyeS1hcmd1bWVu dHMgZXh0cmEtYXJndW1lbnRzIC4uLikpKQorCisodGVzdC1iZWdpbiAibWluZXRlc3QiKQorCisM Cis7OyBQYWNrYWdlIG5hbWVzCisodGVzdC1wYWNrYWdlICJtaW5ldGVzdC0+Z3VpeC1wYWNrYWdl IikKKyh0ZXN0LXBhY2thZ2UgIm1pbmV0ZXN0LT5ndWl4LXBhY2thZ2UsIF8g4oaSIC0gaW4gcGFj a2FnZSBuYW1lIgorICAgICAgICAgICAgICAjOm5hbWUgImZvb19iYXIiCisgICAgICAgICAgICAg ICM6Z3VpeC1uYW1lICJtaW5ldGVzdC1mb28tYmFyIgorICAgICAgICAgICAgICAjOnVwc3RyZWFt LW5hbWUgIkF1dGhvci9mb29fYmFyIikKKworKHRlc3QtZXF1YWwgImVsYWJvcmF0ZSBuYW1lcywg dW5hbWJpZ2lvdXMiCisgICJKZWlqYS9tZXNlY29ucyIKKyAgKGNhbGwtd2l0aC1wYWNrYWdlcwor ICAgKGN1dCBlbGFib3JhdGUtY29udGVudGRiLW5hbWUgIm1lc2Vjb25zIikKKyAgICcoIzpuYW1l ICJtZXNlY29ucyIgIzphdXRob3IgIkplaWphIikKKyAgICcoIzpuYW1lICJzb21ldGhpbmciICM6 YXV0aG9yICJlbHNlIikpKQorCisodGVzdC1lcXVhbCAiZWxhYm9yYXRlIG5hbWUsIGFtYmlnaW91 cyAoaGlnaGVzdCBzY29yZSkiCisgICJKZWlqYS9tZXNlY29ucyIKKyAgKGNhbGwtd2l0aC1wYWNr YWdlcworICAgOzsgIzpzb3J0ICJzY29yZSIgaXMgdGhlIGRlZmF1bHQKKyAgIChjdXQgZWxhYm9y YXRlLWNvbnRlbnRkYi1uYW1lICJtZXNlY29ucyIpCisgICAnKCM6bmFtZSAibWVzZWNvbnMiICM6 YXV0aG9yICJKZWlqYyIgIzpzY29yZSA3NzcpCisgICAnKCM6bmFtZSAibWVzZWNvbnMiICM6YXV0 aG9yICJKZWlqYiIgIzpzY29yZSA4ODgpCisgICAnKCM6bmFtZSAibWVzZWNvbnMiICM6YXV0aG9y ICJKZWlqYSIgIzpzY29yZSA5OTkpKSkKKworCisodGVzdC1lcXVhbCAiZWxhYm9yYXRlIG5hbWUs IGFtYmlnaW91cyAobW9zdCBkb3dubG9hZHMpIgorICAiSmVpamEvbWVzZWNvbnMiCisgIChjYWxs LXdpdGgtcGFja2FnZXMKKyAgIChjdXQgZWxhYm9yYXRlLWNvbnRlbnRkYi1uYW1lICJtZXNlY29u cyIgIzpzb3J0ICJkb3dubG9hZHMiKQorICAgJygjOm5hbWUgIm1lc2Vjb25zIiAjOmF1dGhvciAi SmVpamMiICM6ZG93bmxvYWRzIDc3NykKKyAgICcoIzpuYW1lICJtZXNlY29ucyIgIzphdXRob3Ig IkplaWpiIiAjOmRvd25sb2FkcyA4ODgpCisgICAnKCM6bmFtZSAibWVzZWNvbnMiICM6YXV0aG9y ICJKZWlqYSIgIzpkb3dubG9hZHMgOTk5KSkpCisKKwwKKzs7IERldGVybWluaW5nIHRoZSBob21l IHBhZ2UKKyh0ZXN0LXBhY2thZ2UgIm1pbmV0ZXN0LT5ndWl4LXBhY2thZ2UsIHdlYnNpdGUgaXMg dXNlZCBhcyBob21lIHBhZ2UiCisgICAgICAgICAgICAgICM6aG9tZS1wYWdlICJ3ZWI6Ly9zaXRl IgorICAgICAgICAgICAgICAjOndlYnNpdGUgIndlYjovL3NpdGUiKQorKHRlc3QtcGFja2FnZSAi bWluZXRlc3QtPmd1aXgtcGFja2FnZSwgaWYgYWJzZW50LCB0aGUgZm9ydW0gaXMgdXNlZCIKKyAg ICAgICAgICAgICAgIzpob21lLXBhZ2UgJyhtaW5ldGVzdC10b3BpYyA2MjgpCisgICAgICAgICAg ICAgICM6Zm9ydW1zIDYyOAorICAgICAgICAgICAgICAjOndlYnNpdGUgJ251bGwpCisodGVzdC1w YWNrYWdlICJtaW5ldGVzdC0+Z3VpeC1wYWNrYWdlLCBpZiBhYnNlbnQsIHRoZSBnaXQgcmVwbyBp cyB1c2VkIgorICAgICAgICAgICAgICAjOmhvbWUtcGFnZSAiaHR0cHM6Ly9naXRodWIuY29tL21p bmV0ZXN0LW1vZHMvbWVzZWNvbnMiCisgICAgICAgICAgICAgICM6Zm9ydW1zICdudWxsCisgICAg ICAgICAgICAgICM6d2Vic2l0ZSAnbnVsbAorICAgICAgICAgICAgICAjOnJlcG8gImh0dHBzOi8v Z2l0aHViLmNvbS9taW5ldGVzdC1tb2RzL21lc2Vjb25zIikKKyh0ZXN0LXBhY2thZ2UgIm1pbmV0 ZXN0LT5ndWl4LXBhY2thZ2UsIGFsbCBob21lIHBhZ2UgaW5mb3JtYXRpb24gYWJzZW50IgorICAg ICAgICAgICAgICAjOmhvbWUtcGFnZSAjZgorICAgICAgICAgICAgICAjOmZvcnVtcyAnbnVsbAor ICAgICAgICAgICAgICAjOndlYnNpdGUgJ251bGwKKyAgICAgICAgICAgICAgIzpyZXBvICdudWxs KQorCisMCisKKzs7IERlcGVuZGVuY2llcworKHRlc3QtcGFja2FnZSogIm1pbmV0ZXN0LT5ndWl4 LXBhY2thZ2UsIHVuYW1iaWdpb3VzIGRlcGVuZGVuY3kiCisgIChsaXN0ICM6cmVxdWlyZW1lbnRz ICcoKCJtZXNlY29ucyIgI2YKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKCJKZWlqYS9tZXNl Y29ucyIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJzb21lLW1vZHBhY2svY29udGFpbmlu Zy1tZXNlIikpKQorICAgICAgICAjOmlucHV0cyAnKCJtaW5ldGVzdC1tZXNlY29ucyIpKQorICAo bGlzdCAjOmF1dGhvciAiSmVpamEiICM6bmFtZSAibWVzZWNvbnMiKQorICAobGlzdCAjOmF1dGhv ciAic29tZS1tb2RwYWNrIiAjOm5hbWUgImNvbnRhaW5pbmctbWVzZSIgIzp0eXBlICJtb2RwYWNr IikpCisKKyh0ZXN0LXBhY2thZ2UqICJtaW5ldGVzdC0+Z3VpeC1wYWNrYWdlLCBhbWJpZ2lvdXMg ZGVwZW5kZW5jeSAoaGlnaGVzdCBzY29yZSkiCisgIChsaXN0ICM6bmFtZSAiZnJvYm5pY2F0ZSIK KyAgICAgICAgIzpndWl4LW5hbWUgIm1pbmV0ZXN0LWZyb2JuaWNhdGUiCisgICAgICAgICM6dXBz dHJlYW0tbmFtZSAiQXV0aG9yL2Zyb2JuaWNhdGUiCisgICAgICAgICM6cmVxdWlyZW1lbnRzICco KCJmcm9iIiAjZgorICAgICAgICAgICAgICAgICAgICAgICAgICAoIkF1dGhvci9mb28iICJBdXRo b3IvYmFyIikpKQorICAgICAgICA7OyAjOnNvcnQgInNjb3JlIiBpcyB0aGUgZGVmYXVsdAorICAg ICAgICAjOmlucHV0cyAnKCJtaW5ldGVzdC1iYXIiKSkKKyAgKGxpc3QgIzphdXRob3IgIkF1dGhv ciIgIzpuYW1lICJmb28iICM6c2NvcmUgMCkKKyAgKGxpc3QgIzphdXRob3IgIkF1dGhvciIgIzpu YW1lICJiYXIiICM6c2NvcmUgOTk5OSkpCisKKyh0ZXN0LXBhY2thZ2UqICJtaW5ldGVzdC0+Z3Vp eC1wYWNrYWdlLCBhbWJpZ2lvdXMgZGVwZW5kZW5jeSAobW9zdCBkb3dubG9hZHMpIgorICAobGlz dCAjOm5hbWUgImZyb2JuaWNhdGUiCisgICAgICAgICM6Z3VpeC1uYW1lICJtaW5ldGVzdC1mcm9i bmljYXRlIgorICAgICAgICAjOnVwc3RyZWFtLW5hbWUgIkF1dGhvci9mcm9ibmljYXRlIgorICAg ICAgICAjOnJlcXVpcmVtZW50cyAnKCgiZnJvYiIgI2YKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgKCJBdXRob3IvZm9vIiAiQXV0aG9yL2JhciIpKSkKKyAgICAgICAgIzppbnB1dHMgJygibWlu ZXRlc3QtYmFyIikKKyAgICAgICAgIzpzb3J0ICJkb3dubG9hZHMiKQorICAobGlzdCAjOmF1dGhv ciAiQXV0aG9yIiAjOm5hbWUgImZvbyIgIzpkb3dubG9hZHMgMCkKKyAgKGxpc3QgIzphdXRob3Ig IkF1dGhvciIgIzpuYW1lICJiYXIiICM6ZG93bmxvYWRzIDk5OTkpKQorCisodGVzdC1wYWNrYWdl ICJtaW5ldGVzdC0+Z3VpeC1wYWNrYWdlLCBvcHRpb25hbCBkZXBlbmRlbmN5IgorICAgICAgICAg ICAgICAjOnJlcXVpcmVtZW50cyAnKCgibWVzZWNvbnMiICN0CisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICgiSmVpamEvbWVzZWNvbnMiCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAic29tZS1tb2RwYWNrL2NvbnRhaW5pbmctbWVzZSIpKSkKKyAgICAgICAgICAgICAg IzppbnB1dHMgJygpKQorCisMCis7OyBMaWNlbnNlCisodGVzdC1wYWNrYWdlICJtaW5ldGVzdC0+ Z3VpeC1wYWNrYWdlLCBpZGVudGljYWwgbGljZW5zZXMiCisgICAgICAgICAgICAgICM6Z3VpeC1s aWNlbnNlICdsaWNlbnNlOmxncGwzKworICAgICAgICAgICAgICAjOmxpY2Vuc2UgIkxHUEwtMy4w LW9yLWxhdGVyIgorICAgICAgICAgICAgICAjOm1lZGlhLWxpY2Vuc2UgIkxHUEwtMy4wLW9yLWxh dGVyIikKKworOzsgU29ydGluZworKGxldCogKChtYWtlLXBhY2thZ2UKKyAgICAgICAgKGxhbWJk YSBhcmd1bWVudHMKKyAgICAgICAgICAoanNvbi0+cGFja2FnZSAoYXBwbHkgbWFrZS1wYWNrYWdl LWpzb24gYXJndW1lbnRzKSkpKQorICAgICAgICh4IChtYWtlLXBhY2thZ2UgIzpzY29yZSAwKSkK KyAgICAgICAoeSAobWFrZS1wYWNrYWdlICM6c2NvcmUgMSkpCisgICAgICAgKHogKG1ha2UtcGFj a2FnZSAjOnNjb3JlIDIpKSkKKyAgKHRlc3QtZXF1YWwgInNvcnQtcGFja2FnZXMsIGFscmVhZHkg c29ydGVkIgorICAgIChsaXN0IHogeSB4KQorICAgIChzb3J0LXBhY2thZ2VzIChsaXN0IHogeSB4 KSkpCisgICh0ZXN0LWVxdWFsICJzb3J0LXBhY2thZ2VzLCByZXZlcnNlIgorICAgIChsaXN0IHog eSB4KQorICAgIChzb3J0LXBhY2thZ2VzIChsaXN0IHggeSB6KSkpKQorCisodGVzdC1lbmQgIm1p bmV0ZXN0IikKLS0gCjIuMzIuMAoK --=-pOoEpqErlQ86NDgwYOoH-- --=-SnrmijhdF6L2D37MJZhV Content-Type: application/pgp-signature; name="signature.asc" Content-Description: This is a digitally signed message part Content-Transfer-Encoding: 7bit -----BEGIN PGP SIGNATURE----- iI0EABYKADUWIQTB8z7iDFKP233XAR9J4+4iGRcl7gUCYRGJcxccbWF4aW1lZGV2 b3NAdGVsZW5ldC5iZQAKCRBJ4+4iGRcl7tj+AP47AjnwF/YJKIyF8UwjSijeWoLy UgJMnWD1gOdJTtmW1gEAkTYIuELe4Sjp8txanA28UGwpIXzbSUI+PcWi2J+pHAc= =xaNN -----END PGP SIGNATURE----- --=-SnrmijhdF6L2D37MJZhV--