From debbugs-submit-bounces@debbugs.gnu.org Fri Nov 29 12:45:37 2024 Received: (at submit) by debbugs.gnu.org; 29 Nov 2024 17:45:37 +0000 Received: from localhost ([127.0.0.1]:44296 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1tH53h-0005Sh-FF for submit@debbugs.gnu.org; Fri, 29 Nov 2024 12:45:37 -0500 Received: from lists.gnu.org ([209.51.188.17]:55242) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1tH2Z9-0005ka-4U for submit@debbugs.gnu.org; Fri, 29 Nov 2024 10:05:55 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1tH2Z7-0003dZ-PM for guix-patches@gnu.org; Fri, 29 Nov 2024 10:05:54 -0500 Received: from mail-40135.protonmail.ch ([185.70.40.135]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1tH2Yk-0000pA-Do for guix-patches@gnu.org; Fri, 29 Nov 2024 10:05:53 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=proton.me; s=protonmail; t=1732892717; x=1733151917; bh=5BdJ2GZZrTwq59Xn8qI8n3DnwsHxQIOn2BX8rf3v+xo=; h=Date:To:From:Subject:Message-ID:Feedback-ID:From:To:Cc:Date: Subject:Reply-To:Feedback-ID:Message-ID:BIMI-Selector: List-Unsubscribe:List-Unsubscribe-Post; b=Fw05FbZh7y0wfyJ8cg7e19IyCNOcCahVjvLVXGv5sk0+4xm2sGULVQhbHYDVwqvgF mSNaVmP6MILbco29iQBSKHCKfn56Kr4NGj8dU+sImBwdgh0WSGE+p2CqqyiIyxLExe dS1BVl14Kr8lyAhG18yHcnysSoJ4hLzF+JCWKQsBhSyx9NRVi278I+TqGNg/klmjOF amI9DJAdXUF/CEZNIhk3xk6zJrlhvtWIliGKRE3wwWRkQ7YXbZ2n+FbNoCGMx9HU1p wxn1iyCgwxlqwfLnZZyJRvuYFIIvCitvV3RUbciOL8po7p4088xlHOzUdTwTikzSW2 ANDwy1yS7HmnQ== Date: Fri, 29 Nov 2024 15:05:09 +0000 To: "guix-patches@gnu.org" From: unmush Subject: [PATCH] Adding a fully-bootstrapped mono Message-ID: Feedback-ID: 126986417:user:proton X-Pm-Message-ID: 6499f2f3bd38752c35c3f0b32ffba1249db73cd3 MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="b1=_an9yUQc81YewVJ071Mjh6ZcI5zllr0hgLHfHss8ka8A" Received-SPF: pass client-ip=185.70.40.135; envelope-from=unmush@proton.me; helo=mail-40135.protonmail.ch X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_MSPIKE_H4=0.001, RCVD_IN_MSPIKE_WL=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.001, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-Debbugs-Envelope-To: submit X-Mailman-Approved-At: Fri, 29 Nov 2024 12:45:36 -0500 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" --b1=_an9yUQc81YewVJ071Mjh6ZcI5zllr0hgLHfHss8ka8A Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable We used to have a mono package, but it was removed due to includingbootstra= p binaries (among others). =C2=A0This patch series introduces a full, 17-mono-package sequence that takes us from a mono-1.2.6 built fully from source to mono-6.12.0 built fully from source, using only packages that already have full bootstrap paths. =C2=A0I make no promise that this i= s the shortest or most optimal path, but it exists and I have verified it works. As I've spent what is probably an unreasonable amount of time working toward this, I thought I'd share some of my thoughts, experiences, and commentary. =C2=A0Sorry in advance if it gets a bit rambly or lecture-ish. * Prologue I started down this road because someone I'm working on a project with decided to depend on a C# package that requires C# 12.0 features, and my personal mono package based on the tarball releases (which include bootstrap binaries) only went up to C# 7.0. =C2=A0This meant that the C# package in question de facto required strictly Microsoft's (er, I mean, "the .NET foundation"'s) .NET implementation - hereafter referred to as "dotnet" - and a very recent version no less. =C2=A0The bootstrapping story with dotnet is very bad: https://github.com/dotnet/source-build/issues/1930. =C2=A0Even beginning to untangle it would probably require a relatively modern C# compiler, and something that at least sort of understands msbuild. =C2=A0And there's not much point to "bootstrapping" dotnet from something that isn't bootstrapped itself. =C2=A0So I figured I may as well start with mono. * History While mono is today probably the most well-known alternative to Microsoft's .NET offerings, it is not the only one. =C2=A0Indeed, in the early 2000s there were at least 2 competing free software implementations: Mono, and DotGNU's Portable.NET (abbreviated pnet). They differed in goals, licenses, and methods: Portable.NET was a GNU project concerned with, among other things, limiting the ability of Microsoft to impose vendor lock-in via its proprietary .NET implementation and software patents. =C2=A0As a GNU project, it used the GP= L for its runtime and compiler, and the GPL with a linking exception for its standard library, pnetlib. =C2=A0Mono, on the other hand, used a mix of many copyleft and permissive licenses: X11 for the standard library, GPL for the compiler (later dual-licensed to add an X11 option), and LGPL for the runtime, with GPL and LGPL code also offered "under commercial terms for when the GPL and the LGPL are not suitable". =C2=A0In 2016 after its acquisition by Microsoft, the runtime was relicensed to use the Expat (MIT) license. But perhaps most importantly to us, while Mono opted to write its C# compiler, mcs, in... C#, Portable.NET's runtime and C# compiler were both written in C. =C2=A0Portable.NET along with the entire DotGNU project was decommissioned in 2012, but the source is still available, and it still works fine (with a few modifications for compatibility with newer versions of its dependencies). =C2=A0In https://issues.guix.gnu.org/57625 Adam Faiz submitted patches to package pnet and pnetlib, along with one of their dependencies named treecc. =C2=A0These packages were based on the last release of Portable.NET, version 0.8.0, released in 2007. =C2=A0I initially used these packages as the basis for my bootstrap efforts, and even managed to get mono-1.2.6 built using them, but later discovered that using a more recent version from git made it much easier. =C2=A0For example, while pnet-0.8.0 can do pointer arithmetic inside unsafe code blocks, it doesn't support the +=3D or -=3D operators specifically, which requires lots of patching (after all, who would use x =3D x + y when you could do x+=3D y?). =C2=A0There are many other similar improvements in the = git version, so for this patch series I've decided to go with pnet-git. * The start After building mono-1.2.6, I tried a few later versions, and the third or fourth one would always fail with errors about missing methods. =C2= =A0It turns out that the reason for this is that, contrary to what their marketing suggests, C# and Java are not "write once, run everywhere". This is because their compilers rely on the details of the libraries that the program will be run with at compile-time. =C2=A0This is used, for example, to do overload resolution. =C2=A0Suppose, for example, that a certain implementation of the "=3D=3D" operator is present in version 1.0 o= f a library, and then in version 2.0 of a library a more specific implementation is introduced. =C2=A0Now code that is compiled against versi= on 2.0 may instead automatically reference the more-specific implementation, as is in accordance with the rules of C#. =C2=A0But when it is run with version 1.0, it will fail because that implementation doesn't exist. =C2=A0In my case, for some reason the initial mcs and core libraries being built to compile the rest of mono were being compiled against a 2.0 library and then run with a 1.0 library. =C2=A0It turns out that this was because mcs uses mono's code for producing assemblies (.NET dlls and exes), and mono decides which version to put in an assembly it writes based on "which runtime version" is being used, and that version is decided at startup based on... the version that was put in the assembly it is running. =C2=A0So for example, mono-1.9.1 would produ= ce 2.0 assemblies because mono-1.2.6 produced 2.0 assemblies because pnet produced 2.0 assemblies. =C2=A0So I modified mono's runtime in mono-1.9.1 t= o allow for this version to be overridden via environment variable, and set it to "v1.1.4322", and things went a lot more smoothly after that. >From there on it was mostly the usual trial-and-error process of identifying where things had bitrotted. =C2=A0I made sure to unvendor libgc wherever possible, though eventually by mono-4.9.0 they explicitly dropped support in their configure script for using any libgc other than what was bundled, so at that point I switched to using their homebrewed sgen garbage collector. * A concerning development Once I got to mono-2.11.4, though, things took a turn for the interesting: mono started using git submodules, and the (recursive? #t) clones were all failing. =C2=A0It turns out that this is because their submodules reference github.com using the git:// protocol. This is notable for a few reasons. First, github dropped support for the git:// protocol in 2021, so recursive clones won't work now. =C2=A0This means I have to explicitly list out every submodule, its commit, and its sha256 hash, for every mono version until they switched to using http or https. =C2=A0mono-2.11.4 has only 4 submodules, but that doesn't last for long: by mono-4.9.0 it has 14 submodules. =C2=A0A significant portion of these patches is just listing these submodules and their hashes. =C2=A0It's a bit annoying. The more concerning reason, though, is *why* github dropped support for the git:// protocol: it is unencrypted and unauthenticated. =C2=A0This is mitigated somewhat by the use of sha-1 hashes to identify commits in the referenced submodules, putting a significant computational burden on anyone who would try to alter what was fetched corresponding to a given submodule. =C2=A0Significantly more risky, though, is the process of *updating* submodules that use git:// URLs. =C2=A0It is quite unlikely that= a developer is going to independently clone one of the submodules over https, navigate to a desirable commit, copy the sha-1 hash, and manually update the submodule reference's commit. =C2=A0They're far more likely to r= un 'cd submodule; git pull; cd ..; git add submodule; git commit ...' or an equivalent. Of course, any changes a network man-in-the-middle might try to make here would still be reflected in the commit history, so even if a developer did that, they or any of their fellow committers could spot anything strange or malicious and point it out. =C2=A0Also, the changes couldn't be propagated to others trying to pull them who weren't on a path containing the MITM because the potentially-malicious commit wouldn't be present in the real submodule's repository. =C2=A0So the transparency of git clearly showing changes to text files, combined with the fact that surely no git hosting platform would just allow arbitrary entities to make whatever commits they want accessible under any arbitrary repository URL, rather mitigate this security issue. This usage of git:// URLs lasted all the way until September 28, 2021, when github's removal of support for it forced the developers to change them to https. * Meanwhile, in reality On November 28, 2016, mono added a submodule named roslyn-binaries. Unsurprisingly, it included binary blobs for Microsoft's Roslyn compiler (which I believe had been open-sourced shortly prior). =C2=A0From here on, mono's build system would default to using these binaries for building on little-endian systems (though another compiler could be specified with the --with-csc configure flag). =C2=A0I happen to know that it is extremely unlikely that many mono developers used this configure flag. I know this because the 5.0 series is an absolute pain in the neck to build from source, because they consistently depend on new C# features *before* they implement them. To go on a brief tangent: does anyone remember back when youtube-dl was temporarily taken down from github due to the RIAA's DMCA request? =C2= =A0Many were unhappy about that. =C2=A0One such unhappy person made news when they made the full contents of youtube-dl's repository available to access through the DMCA request repository: https://gist.github.com/lrvick/02088ee5466ca51116bdaf1e709ddd7c. =C2=A0It turns out that there are many actions that one can take on github that will make arbitrary commits available under arbitrary repository URLs. So, in reality, for the span of time from November 28, 2016 to September 28, 2021, anybody sitting on the network path between github and any mono developer updating the roslyn-binaries submodule could decide on any arbitrary new commit to be used. =C2=A0Of course, merely inspecting the diff for the commit will reveal nothing of use, because the contents are binary blobs. =C2=A0And not only are these blobs those of = a compiler, they are the blobs of a compiler that is sure to be used to compile another compiler, which will then be redistributed as an opaque, non-bootstrappable binary blob to be used for compiling other compilers. You would be hard-pressed to find a more fertile breeding ground for Ken Thompson / Trusting Trust attacks. =C2=A0If every agent of the NSA (and whatever other agencies, including those of other countries, had access to the appropriate network traffic) somehow failed to capitalize on 6 years of opportunity to compromise an entire software ecosystem using only a basic MITM of unencrypted traffic, they deserve to be sacked. Whether such an attack actually occurred or not, this is a case study in carelessness and why bootstrappability is so important; discovering all this made me quite worried about having used a mono version built from blobs previously, and has convinced me that, as time-wasting and tedious as this project has been, it is nevertheless probably an important one. * Another note on roslyn-binaries If you're going to write a self-hosting compiler, the least you can do is keep it self-hosting. =C2=A0Deciding to write a self-hosting compiler is= a valid choice, of course, with its own merits and demerits, but there is something bitterly poetic about mono starting out requiring specifically Microsoft's C# compiler in order to build (mono did its initial bootstrapping using Microsoft's proprietary csc), achieving independence through self-hosting, being acquired by Microsoft, and thereafter coming crawling back to Microsoft's C# compiler once more before eventually dying. The funny thing is that it's not even necessary. =C2=A0The dependencies on new C# features are all in mono's standard library (which increasingly borrowed code from Microsoft's corefx library), not in mono's compiler. * More binary submodules? Even before roslyn-binaries, there was binary-reference-assemblies, which contained prebuilt "reference" blobs for the various versions of the standard libraries. =C2=A0These exist, I assume, precisely because of t= he library incompatibility problems regarding overloading that I mentioned earlier. =C2=A0While later versions of mono included sources and a build system for producing these reference binaries, mono-4.9.0 and earlier did not. =C2=A0Mono's build system still demanded /something/ to install, though, so I told it to use the real standard library of the input mono version. =C2=A0When I did get to a mono version that at least claimed to support regenerating the reference binaries, I found that it didn't work with mcs due to differences in which libraries had to be referenced, so I had to patch it to add a bunch of references determined through trial and error. The xunit-binaries submodule was also added sometime before mono-5.1.0. This dependency makes it impossible to run the full test suite without binary blobs. =C2=A0Presumably for this reason, Debian elects to only run tests within the mono/mini/ and mono/tests/ subdirectories. =C2=A0For my part, I've disabled all tests except for those of mono-6.12.0, the final version, limited to the two aforementioned subdirectories. =C2=A0This is because it would take extra time for the builds, because several of the tests depend on binary blobs bundled into the mono repository itself (which my thorough cleaning of all dlls and exes from the sources removes), because a large chunk of the tests depend on binary blobs in xunit-binaries in later versions, and because "expect some test failures" is part of the mono documentation and I don't have the time to figure out for the mono developers every reason why each of 17 versions of their test suite is broken. * The long march through the 5.0s The 5.0 series was when Microsoft acquired Mono, and it shows. =C2=A0You'll notice I needed to introduce "pre-" packages for various versions because in several cases a tagged release could not build the following tagged release. =C2=A0For that matter, they couldn't build the pre- package either, but it at least took fewer patches to get them working. =C2=A0The reason for this is that Mono added a dependency on Microsoft's corefx library source code, and it usually started using C# features well before mcs was able to compile them. =C2=A0Because of this, despite taking = 8 versions to get from 1.2.6 to 4.9.0, it took another 8 versions to get through the 5.0 series, and 5 of them required nontrivial patching to massage the source into a form compilable by mcs. * The final stretch Eventually I realized that the dependencies on new features were all coming from corefx, not from mono's compiler. =C2=A0Consequently, the only reason for this particular bootstrap-hostile ordering of builds is that it happened to be the order the mono devs committed things. =C2=A0So I just cherry-picked every commit I could find touching mcs/mcs (magit was quite useful for this) and applied it to 5.10.0 to produce what is essentially the 6.12.0 compiler, then used it to jump straight to building 6.12.0. Use of this technique earlier on in the bootstrap process may be of interest to anyone looking to shorten the chain of packages. * The finishing touches My initial goal was to package dotnet, and I had tried to progress toward that from mono-4.9.0 for a period, but with no success. =C2=A0During that time, though, I did encounter a bug in mono's xbuild condition parser, which I wrote a patch for, and included in mono-6.12.0. I also discovered that xbuild would wrongly complain about missing references even when the proper assemblies were in MONO_PATH or MONO_GAC_PREFIX, because xbuild would erroneously only consider the path /gnu/store/...mono-6.12.0/lib/mono/gac when looking for global assembly caches, completely ignoring MONO_GAC_PREFIX. =C2=A0So I wrote a patch to fi= x that, and included it in mono-6.12.0. Having witnessed how much nicer it is to package things that use rpath / runpath than things that use environment variables (like python) and therefore require constant wrapping of executables and use of propagated-inputs, I devised a patch that would extend mono's per-assembly config files to support a element. =C2=A0For example= , if you have a file /tmp/dir2/test2.exe, and there is also a file /tmp/dir2/test2.exe.config, and its contents are =C2=A0 and it references test1.dll, it will first look for it at /tmp/dir1/test1.dll. =C2=A0Note that, of course, test1.dll still needs to b= e accessible to the compiler at compile-time through MONO_PATH or an explicitly-specified path passed on the mcs command line. It is my hope that this feature will be of use to anybody interested in developing a build system. * Future work Mono had several difficult points in bootstrapping and packaging, but at the end of the day it still met the basic description of a software package: well-defined environment-supplied inputs and sources, a user-supplied install prefix, and files installed under that prefix. The dotnet world is an entirely different beast. =C2=A0The first step of mo= st build systems I have encountered from that realm is downloading an entire toolchain, among other dependencies, as a binary blob. =C2=A0They heavily depend on the exact packages they specify being available exactly where they say to install them. =C2=A0There is no "install", there are no "install directories" to my knowledge. =C2=A0A build that doesn't contact nuget.org is an abberation. =C2=A0I am at a loss how to build these things, much less package them. =C2=A0I badly need help. * Closing thoughts "You wish now that our places had been exchanged. =C2=A0That I had died, an= d DotGNU had lived?" "... Yes. =C2=A0I wish that." Maintenance of Mono was recently transferred over to WineHQ. =C2=A0With tha= t announcement this statement was placed at https://www.mono-project.com: "We want to recognize that the Mono Project was the first .NET implementation on Android, iOS, Linux, and other operating systems. The Mono Project was a trailblazer for the .NET platform across many operating systems. It helped make cross-platform .NET a reality and enabled .NET in many new places and we appreciate the work of those who came before us." I would like to clarify that, according to Miguel de Icaza himself (https://www.mono-project.com/archived/mailpostearlystory/), DotGNU "started working on the system about the same time". =C2=A0According to https://lwn.net/2002/0103/a/dotgnu.php3 Portable.NET began "in January 2001". =C2=A0While it's unclear exactly when Portable.NET reached various milestones, and the significance of the various milestones varies somewhat (for example, mono probably does not care that Portable.NET also includes a Java and C compiler), I think that there is cause to dispute the claim that Mono was "the first" .NET implementation on Linux. On a related note, if we haven't looked at the possibility of using Portable.NET in the Java bootstrap process, it may be worth visiting at some point. Thank you for your time, I think I need to get some rest now. - unmush --b1=_an9yUQc81YewVJ071Mjh6ZcI5zllr0hgLHfHss8ka8A Content-Type: text/x-patch; name=0001-gnu-add-treecc.patch Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=0001-gnu-add-treecc.patch RnJvbSAzZjhhZjY1ZjcyODcxZDYxZmE4NWU2OTM5ZjQ2Y2I4ZGFjMTg1YzcwIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpNZXNzYWdlLUlEOiA8M2Y4YWY2NWY3Mjg3MWQ2MWZhODVlNjkzOWY0NmNi OGRhYzE4NWM3MC4xNzMyNzA3Mjg4LmdpdC51bm11c2hAaGFzaGJhbmcuc2g+CkZyb206IHVubXVz aCA8dW5tdXNoQGhhc2hiYW5nLnNoPgpEYXRlOiBUdWUsIDI2IE5vdiAyMDI0IDEyOjEzOjMyClN1 YmplY3Q6IFtQQVRDSCAwMS8yMV0gZ251OiBhZGQgdHJlZWNjLgoKKiBnbnUvcGFja2FnZXMvZG90 bmV0LnNjbTogbmV3IG1vZHVsZS4KICAodHJlZWNjKTogbmV3IHBhY2thZ2UuCiogZ251L2xvY2Fs Lm1rIChHTlVfU1lTVEVNX01PRFVMRVMpOiBhZGQgbmV3IG1vZHVsZS4KCkNoYW5nZS1JZDogSWYz ZjM2NjE1Nzc0Yzg3MmYzMDE1NTEwZWIwOGVjNTM2NTdlNGVkZmIKLS0tCiBnbnUvbG9jYWwubWsg ICAgICAgICAgICB8ICAxICsKIGdudS9wYWNrYWdlcy9kb3RuZXQuc2NtIHwgNjIgKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKIDIgZmlsZXMgY2hhbmdlZCwgNjMgaW5z ZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGdudS9wYWNrYWdlcy9kb3RuZXQuc2NtCgpk aWZmIC0tZ2l0IGEvZ251L2xvY2FsLm1rIGIvZ251L2xvY2FsLm1rCmluZGV4IGJkMGY4NTBkNTMu LjBhMTYxNzQ0OGMgMTAwNjQ0Ci0tLSBhL2dudS9sb2NhbC5taworKysgYi9nbnUvbG9jYWwubWsK QEAgLTI0OSw2ICsyNDksNyBAQCBHTlVfU1lTVEVNX01PRFVMRVMgPQkJCQlcCiAgICVEJS9wYWNr YWdlcy9kb2Nib29rLnNjbQkJCVwKICAgJUQlL3BhY2thZ2VzL2RvY2tlci5zY20JCQlcCiAgICVE JS9wYWNrYWdlcy9kb2N1bWVudGF0aW9uLnNjbQkJXAorICAlRCUvcGFja2FnZXMvZG90bmV0LnNj bQkJCVwKICAgJUQlL3BhY2thZ2VzL2R2dG0uc2NtCQkJCVwKICAgJUQlL3BhY2thZ2VzL2Vhc3ly cGcuc2NtCQkJXAogICAlRCUvcGFja2FnZXMvZWJvb2suc2NtCQkJXApkaWZmIC0tZ2l0IGEvZ251 L3BhY2thZ2VzL2RvdG5ldC5zY20gYi9nbnUvcGFja2FnZXMvZG90bmV0LnNjbQpuZXcgZmlsZSBt b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi4zMDg0ZTFjZjNhCi0tLSAvZGV2L251bGwKKysr IGIvZ251L3BhY2thZ2VzL2RvdG5ldC5zY20KQEAgLTAsMCArMSw2MiBAQAorKGRlZmluZS1tb2R1 bGUgKGdudSBwYWNrYWdlcyBkb3RuZXQpCisgICM6dXNlLW1vZHVsZSAoKGd1aXggbGljZW5zZXMp ICM6cHJlZml4IGxpY2Vuc2U6KQorICAjOnVzZS1tb2R1bGUgKGdudSBwYWNrYWdlcyBhc3NlbWJs eSkKKyAgIzp1c2UtbW9kdWxlIChnbnUgcGFja2FnZXMgYmlzb24pCisgICM6dXNlLW1vZHVsZSAo Z251IHBhY2thZ2VzIGNoZWNrKQorICAjOnVzZS1tb2R1bGUgKGdudSBwYWNrYWdlcyBjbWFrZSkK KyAgIzp1c2UtbW9kdWxlIChnbnUgcGFja2FnZXMgY29tcHJlc3Npb24pCisgICM6dXNlLW1vZHVs ZSAoZ251IHBhY2thZ2VzIGN1cmwpCisgICM6dXNlLW1vZHVsZSAoZ251IHBhY2thZ2VzIGZsZXgp CisgICM6dXNlLW1vZHVsZSAoZ251IHBhY2thZ2VzIGdldHRleHQpCisgICM6dXNlLW1vZHVsZSAo Z251IHBhY2thZ2VzIHBrZy1jb25maWcpCisgICM6dXNlLW1vZHVsZSAoZ251IHBhY2thZ2VzIGJh c2UpCisgICM6dXNlLW1vZHVsZSAoZ251IHBhY2thZ2VzIGF1dG90b29scykKKyAgIzp1c2UtbW9k dWxlIChnbnUgcGFja2FnZXMgYmR3LWdjKQorICAjOnVzZS1tb2R1bGUgKGdudSBwYWNrYWdlcyBm b250dXRpbHMpCisgICM6dXNlLW1vZHVsZSAoZ251IHBhY2thZ2VzIGdsaWIpCisgICM6dXNlLW1v ZHVsZSAoZ251IHBhY2thZ2VzIGljdTRjKQorICAjOnVzZS1tb2R1bGUgKGdudSBwYWNrYWdlcyBp bnN0cnVtZW50YXRpb24pCisgICM6dXNlLW1vZHVsZSAoZ251IHBhY2thZ2VzIGtlcmJlcm9zKQor ICAjOnVzZS1tb2R1bGUgKGdudSBwYWNrYWdlcyBsaWJmZmkpCisgICM6dXNlLW1vZHVsZSAoZ251 IHBhY2thZ2VzIGxpbnV4KQorICAjOnVzZS1tb2R1bGUgKGdudSBwYWNrYWdlcyBsbHZtKQorICAj OnVzZS1tb2R1bGUgKGdudSBwYWNrYWdlcyBwZXJsKQorICAjOnVzZS1tb2R1bGUgKGdudSBwYWNr YWdlcyBwaG90bykKKyAgIzp1c2UtbW9kdWxlIChnbnUgcGFja2FnZXMgdGV4aW5mbykKKyAgIzp1 c2UtbW9kdWxlIChnbnUgcGFja2FnZXMgdGxzKQorICAjOnVzZS1tb2R1bGUgKGdudSBwYWNrYWdl cyBpbWFnZSkKKyAgIzp1c2UtbW9kdWxlIChnbnUgcGFja2FnZXMgZ3RrKQorICAjOnVzZS1tb2R1 bGUgKGdudSBwYWNrYWdlcyBweXRob24pCisgICM6dXNlLW1vZHVsZSAoZ251IHBhY2thZ2VzIHht bCkKKyAgIzp1c2UtbW9kdWxlIChnbnUgcGFja2FnZXMgeG9yZykKKyAgIzp1c2UtbW9kdWxlIChn bnUgcGFja2FnZXMgdmVyc2lvbi1jb250cm9sKQorICAjOnVzZS1tb2R1bGUgKGdudSBwYWNrYWdl cykKKyAgIzp1c2UtbW9kdWxlIChndWl4IG1vZHVsZXMpCisgICM6dXNlLW1vZHVsZSAoZ3VpeCBw YWNrYWdlcykKKyAgIzp1c2UtbW9kdWxlIChndWl4IGRvd25sb2FkKQorICAjOnVzZS1tb2R1bGUg KGd1aXggZ2l0LWRvd25sb2FkKQorICAjOnVzZS1tb2R1bGUgKGd1aXggZ2V4cCkKKyAgIzp1c2Ut bW9kdWxlIChndWl4IHV0aWxzKQorICAjOnVzZS1tb2R1bGUgKGd1aXggYnVpbGQtc3lzdGVtIGdu dSkKKyAgIzp1c2UtbW9kdWxlIChndWl4IGJ1aWxkLXN5c3RlbSBweXRob24pCisgICM6dXNlLW1v ZHVsZSAoaWNlLTkgbWF0Y2gpKQorCisoZGVmaW5lLXB1YmxpYyB0cmVlY2MKKyAgKHBhY2thZ2UK KyAgICAobmFtZSAidHJlZWNjIikKKyAgICAodmVyc2lvbiAiMC4zLjEwIikKKyAgICAoc291cmNl IChvcmlnaW4KKyAgICAgICAgICAgICAgKG1ldGhvZCB1cmwtZmV0Y2gpCisgICAgICAgICAgICAg ICh1cmkgKHN0cmluZy1hcHBlbmQKKyAgICAgICAgICAgICAgICAgICAgImh0dHBzOi8vZG93bmxv YWQuc2F2YW5uYWguZ251Lm9yZy9yZWxlYXNlcy9kb3RnbnUtcG5ldC90cmVlY2MtIgorICAgICAg ICAgICAgICAgICAgICB2ZXJzaW9uICIudGFyLmd6IikpCisgICAgICAgICAgICAgIChzaGEyNTYK KyAgICAgICAgICAgICAgIChiYXNlMzIKKyAgICAgICAgICAgICAgICAiMXJ6Z25zcGcyeGNjZHEz cXN4MHZpM2oyOGg0cWtyemJyam5oenZubnkzNGZqZmsyMTdheSIpKSkpCisgICAgKGJ1aWxkLXN5 c3RlbSBnbnUtYnVpbGQtc3lzdGVtKQorICAgIChob21lLXBhZ2UgImh0dHBzOi8vd3d3LmdudS5v cmcvc29mdHdhcmUvZG90Z251IikKKyAgICAoc3lub3BzaXMgIlRyZWUgQ29tcGlsZXItQ29tcGls ZXIuIikKKyAgICAoZGVzY3JpcHRpb24gIlRoZSB0cmVlY2MgcHJvZ3JhbSBpcyBkZXNpZ25lZCB0 byBhc3Npc3QgaW4gdGhlIGRldmVsb3BtZW50CitvZiBjb21waWxlcnMgYW5kIG90aGVyIGxhbmd1 YWdlLWJhc2VkIHRvb2xzLiAgSXQgbWFuYWdlcyB0aGUgZ2VuZXJhdGlvbiBvZgorY29kZSB0byBo YW5kbGUgYWJzdHJhY3Qgc3ludGF4IHRyZWVzIGFuZCBvcGVyYXRpb25zIHVwb24gdGhlIHRyZWVz LiIpCisgICAgKGxpY2Vuc2UgbGljZW5zZTpncGwyKykpKQotLSAKMi40NS4yCgo= --b1=_an9yUQc81YewVJ071Mjh6ZcI5zllr0hgLHfHss8ka8A Content-Type: text/x-patch; name=0005-gnu-Add-mono-1.9.1.patch Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=0005-gnu-Add-mono-1.9.1.patch RnJvbSA2ZDNiMGQ1YWQxMWM5ZTUwOGQyMWQzZjU0MTNjMGViYzE5ZjQ5MTdlIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpNZXNzYWdlLUlEOiA8NmQzYjBkNWFkMTFjOWU1MDhkMjFkM2Y1NDEzYzBl YmMxOWY0OTE3ZS4xNzMyNzA3Mjg4LmdpdC51bm11c2hAaGFzaGJhbmcuc2g+CkluLVJlcGx5LVRv OiA8M2Y4YWY2NWY3Mjg3MWQ2MWZhODVlNjkzOWY0NmNiOGRhYzE4NWM3MC4xNzMyNzA3Mjg4Lmdp dC51bm11c2hAaGFzaGJhbmcuc2g+ClJlZmVyZW5jZXM6IDwzZjhhZjY1ZjcyODcxZDYxZmE4NWU2 OTM5ZjQ2Y2I4ZGFjMTg1YzcwLjE3MzI3MDcyODguZ2l0LnVubXVzaEBoYXNoYmFuZy5zaD4KRnJv bTogdW5tdXNoIDx1bm11c2hAaGFzaGJhbmcuc2g+CkRhdGU6IFR1ZSwgMjYgTm92IDIwMjQgMTI6 NTk6NDkKU3ViamVjdDogW1BBVENIIDA1LzIxXSBnbnU6IEFkZCBtb25vLTEuOS4xLgoKKiBnbnUv cGFja2FnZXMvZG90bmV0LnNjbSAobW9uby0xLjkuMSk6IE5ldyB2YXJpYWJsZS4KKiBnbnUvcGFj a2FnZXMvcGF0Y2hlcy9tb25vLTEuOS4xLWFkZC1NT05PX0NSRUFURV9JTUFHRV9WRVJTSU9OLnBh dGNoOgogIE5ldyBwYXRjaC4KKiBnbnUvcGFja2FnZXMvcGF0Y2hlcy9tb25vLTEuOS4xLWZpeGVz LnBhdGNoOiBOZXcgcGF0Y2guCiogZ251L2xvY2FsLm1rIChkaXN0X3BhdGNoX0RBVEEpOiByZWdp c3RlciBuZXcgcGF0Y2hlcy4KCkNoYW5nZS1JZDogSTE5YzE2MDQxZmE0NDE5YTdjMzFjYTUxMGRh NmYzM2EwMzc4NWY1ODQKLS0tCiBnbnUvbG9jYWwubWsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgfCAgMiArCiBnbnUvcGFja2FnZXMvZG90bmV0LnNjbSAgICAgICAgICAgICAgICAg ICAgICAgfCA2MCArKysrKysrKysrKysrKysrKysrCiAuLi4tMS45LjEtYWRkLU1PTk9fQ1JFQVRF X0lNQUdFX1ZFUlNJT04ucGF0Y2ggfCAxNCArKysrKwogZ251L3BhY2thZ2VzL3BhdGNoZXMvbW9u by0xLjkuMS1maXhlcy5wYXRjaCAgIHwgNTkgKysrKysrKysrKysrKysrKysrCiA0IGZpbGVzIGNo YW5nZWQsIDEzNSBpbnNlcnRpb25zKCspCiBjcmVhdGUgbW9kZSAxMDA2NDQgZ251L3BhY2thZ2Vz L3BhdGNoZXMvbW9uby0xLjkuMS1hZGQtTU9OT19DUkVBVEVfSU1BR0VfVkVSU0lPTi5wYXRjaAog Y3JlYXRlIG1vZGUgMTAwNjQ0IGdudS9wYWNrYWdlcy9wYXRjaGVzL21vbm8tMS45LjEtZml4ZXMu cGF0Y2gKCmRpZmYgLS1naXQgYS9nbnUvbG9jYWwubWsgYi9nbnUvbG9jYWwubWsKaW5kZXggZmFk YTQ5NzFmYi4uODUyYjMzZTBhYSAxMDA2NDQKLS0tIGEvZ251L2xvY2FsLm1rCisrKyBiL2dudS9s b2NhbC5tawpAQCAtMTc2MSw2ICsxNzYxLDggQEAgZGlzdF9wYXRjaF9EQVRBID0JCQkJCQlcCiAg ICVEJS9wYWNrYWdlcy9wYXRjaGVzL21vZHVsZS1pbml0LXRvb2xzLW1vZHVsZWRpci5wYXRjaAlc CiAgICVEJS9wYWNrYWdlcy9wYXRjaGVzL21vbmVyby11c2Utc3lzdGVtLW1pbml1cG5wYy5wYXRj aAkJCVwKICAgJUQlL3BhY2thZ2VzL3BhdGNoZXMvbW9uby0xLjIuNi1ib290c3RyYXAucGF0Y2gJ CVwKKyAgJUQlL3BhY2thZ2VzL3BhdGNoZXMvbW9uby0xLjkuMS1hZGQtTU9OT19DUkVBVEVfSU1B R0VfVkVSU0lPTi5wYXRjaAkJXAorICAlRCUvcGFja2FnZXMvcGF0Y2hlcy9tb25vLTEuOS4xLWZp eGVzLnBhdGNoCQkJXAogICAlRCUvcGFja2FnZXMvcGF0Y2hlcy9tb3NhaWNhdGNoZXItdW5idW5k bGUtaHRzbGliLnBhdGNoCVwKICAgJUQlL3BhY2thZ2VzL3BhdGNoZXMvbXJyZXNjdWUtc3VwcG9y dC1sb3ZlLTExLnBhdGNoCQlcCiAgICVEJS9wYWNrYWdlcy9wYXRjaGVzL210b29scy1tZm9ybWF0 LXVuaW5pdGlhbGl6ZWQucGF0Y2gJXApkaWZmIC0tZ2l0IGEvZ251L3BhY2thZ2VzL2RvdG5ldC5z Y20gYi9nbnUvcGFja2FnZXMvZG90bmV0LnNjbQppbmRleCA1NjhlNTM3MzhmLi40OTM2YTEzOTRm IDEwMDY0NAotLS0gYS9nbnUvcGFja2FnZXMvZG90bmV0LnNjbQorKysgYi9nbnUvcGFja2FnZXMv ZG90bmV0LnNjbQpAQCAtMzYyLDMgKzM2Miw2MyBAQCAoZGVmaW5lLXB1YmxpYyBtb25vLTEuMi42 CiAgICAgICAgICAgICAgIGxpY2Vuc2U6bGdwbDIuMCsgOzsgbm90ZTogLi9tY3MvTElDRU5TRS5M R1BMIHNwZWNpZmllcyBubyB2ZXJzaW9uCiAgICAgICAgICAgICAgIDs7IG1jcy9qYXkKICAgICAg ICAgICAgICAgbGljZW5zZTpic2QtNCkpKSkKKworKGRlZmluZS1wdWJsaWMgbW9uby0xLjkuMQor ICAocGFja2FnZQorICAgIChpbmhlcml0IG1vbm8tMS4yLjYpCisgICAgKHZlcnNpb24gIjEuOS4x IikKKyAgICAobmFtZSAibW9ubyIpCisgICAgKHNvdXJjZSAob3JpZ2luCisgICAgICAgICAgICAg IChtZXRob2QgZ2l0LWZldGNoKQorICAgICAgICAgICAgICAodXJpCisgICAgICAgICAgICAgICAo Z2l0LXJlZmVyZW5jZQorICAgICAgICAgICAgICAgICh1cmwgImh0dHBzOi8vZ2l0bGFiLndpbmVo cS5vcmcvbW9uby9tb25vLmdpdCIpCisgICAgICAgICAgICAgICAgKGNvbW1pdCAoc3RyaW5nLWFw cGVuZCAibW9uby0iICIxLjkuMS4xIikpKSkKKyAgICAgICAgICAgICAgKGZpbGUtbmFtZSAoZ2l0 LWZpbGUtbmFtZSBuYW1lIHZlcnNpb24pKQorICAgICAgICAgICAgICAoc2hhMjU2CisgICAgICAg ICAgICAgICAoYmFzZTMyCisgICAgICAgICAgICAgICAgIjBzMW4zemRoYzJhbGs5c214ZmRsMWtq ejdsejJwMTlnczBrczRoZ3I4NjRqbG1mMTNid3MiKSkKKyAgICAgICAgICAgICAgKG1vZHVsZXMg JygoZ3VpeCBidWlsZCB1dGlscykKKyAgICAgICAgICAgICAgICAgICAgICAgICAoaWNlLTkgc3Ry aW5nLWZ1bikpKQorICAgICAgICAgICAgICAoc25pcHBldCBwcmVwYXJlLW1vbm8tc291cmNlKQor ICAgICAgICAgICAgICAocGF0Y2hlcworICAgICAgICAgICAgICAgKHNlYXJjaC1wYXRjaGVzCisg ICAgICAgICAgICAgICAgIm1vbm8tMS45LjEtZml4ZXMucGF0Y2giCisgICAgICAgICAgICAgICAg Im1vbm8tMS45LjEtYWRkLU1PTk9fQ1JFQVRFX0lNQUdFX1ZFUlNJT04ucGF0Y2giKSkpKQorICAg IChuYXRpdmUtaW5wdXRzCisgICAgIChtb2RpZnktaW5wdXRzIChwYWNrYWdlLW5hdGl2ZS1pbnB1 dHMgbW9uby0xLjIuNikKKyAgICAgICAoZGVsZXRlICJwbmV0LWdpdCIpCisgICAgICAgKGRlbGV0 ZSAicG5ldGxpYi1naXQiKQorICAgICAgIChwcmVwZW5kIG1vbm8tMS4yLjYpCisgICAgICAgKGFw cGVuZCB3aGljaCkKKyAgICAgICA7OyBuZWVkZWQgZm9yIHRlc3RzCisgICAgICAgKGFwcGVuZCBw ZXJsKSkpCisgICAgKGFyZ3VtZW50cworICAgICAoc3Vic3RpdHV0ZS1rZXl3b3JkLWFyZ3VtZW50 cyAocGFja2FnZS1hcmd1bWVudHMgbW9uby0xLjIuNikKKyAgICAgICAoKCM6bWFrZS1mbGFncyBf ICNmKQorICAgICAgICAjfihsaXN0ICJDQz1nY2MiICJWPTEiKSkKKyAgICAgICAoKCM6cGhhc2Vz IHBoYXNlcyAjfiVzdGFuZGFyZC1waGFzZXMpCisgICAgICAgICN+KG1vZGlmeS1waGFzZXMgIyRw aGFzZXMKKyAgICAgICAgICAgIChhZGQtYmVmb3JlICdjb25maWd1cmUgJ3NldC1jZmxhZ3MKKyAg ICAgICAgICAgICAgKGxhbWJkYSBfCisgICAgICAgICAgICAgICAgOzsgYXBwYXJlbnRseSBjYW4n dCBiZSBzZXQgdmlhIG1ha2UgZmxhZ3MgaW4gdGhpcyB2ZXJzaW9uCisgICAgICAgICAgICAgICAg KGxldCAoKG9yaWdpbmFsIChnZXRlbnYgIkNGTEFHUyIpKSkKKyAgICAgICAgICAgICAgICAgIChz ZXRlbnYgIkNGTEFHUyIgKHN0cmluZy1hcHBlbmQgKG9yIG9yaWdpbmFsICIiKQorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaWYgb3JpZ2luYWwgIiAi ICIiKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi LURBUkdfTUFYPTUwMCIpKSkpKQorICAgICAgICAgICAgKGFkZC1iZWZvcmUgJ2NvbmZpZ3VyZSAn c2V0LWNyZWF0ZS1pbWFnZS12ZXJzaW9uCisgICAgICAgICAgICAgIChsYW1iZGEgXworICAgICAg ICAgICAgICAgIDs7IHBuZXQgcHJvZHVjZXMgdjIueCBhc3NlbWJsaWVzLiAgTW9ubyBkb2VzIHRo aXMgd2VpcmQgdGhpbmcKKyAgICAgICAgICAgICAgICA7OyB3aGVyZSBpdCBhbHdheXMgcHJvZHVj ZXMgYXNzZW1ibGllcyBvZiB0aGUgc2FtZSB2ZXJzaW9uIGFzCisgICAgICAgICAgICAgICAgOzsg dGhlIHJ1bnRpbWUgdGhhdCBpcyBydW5uaW5nIGl0LCB3aGljaCBpcyBiYXNlZCBvbiB0aGUKKyAg ICAgICAgICAgICAgICA7OyB2ZXJzaW9uIG9mIHRoZSBhc3NlbWJseSB0aGF0IGl0IGxvYWRlZCwg d2hpY2ggaXMgYmFzZWQgb24KKyAgICAgICAgICAgICAgICA7OyB3aGF0IGl0IGRlY2lkZWQgZm9y IHRoZSBwcmV2aW91cyBjb21waWxlci4uLiBvbiBhbmQgb24gYWxsCisgICAgICAgICAgICAgICAg OzsgdGhlIHdheSBiYWNrIHRvIHBuZXQuICBUaGlzIGJyZWFrcyB0aGF0IGNoYWluLCBiZWNhdXNl CisgICAgICAgICAgICAgICAgOzsgb3RoZXJ3aXNlIGl0IGVuZHMgdXAgY29tcGlsaW5nIHRoZSBp bml0aWFsIG1jcyBhZ2FpbnN0IC5ORVQKKyAgICAgICAgICAgICAgICA7OyAyLjAgbGlicmFyaWVz IGFuZCB0aGVuIHJ1bm5pbmcgd2l0aCAuTkVUIDEuMCBsaWJyYXJpZXMuCisgICAgICAgICAgICAg ICAgKHNldGVudiAiTU9OT19DUkVBVEVfSU1BR0VfVkVSU0lPTiIgInYxLjEuNDMyMiIpKSkKKyAg ICAgICAgICAgIChhZGQtYWZ0ZXIgJ3VucGFjayAncGF0Y2gtdGVzdC1kcml2ZXItc2hlYmFuZwor ICAgICAgICAgICAgICAobGFtYmRhIF8KKyAgICAgICAgICAgICAgICAocGF0Y2gtc2hlYmFuZyAi bW9uby90ZXN0cy90ZXN0LWRyaXZlciIpKSkpKQorICAgICAgICgoIzp0ZXN0cz8gXyAjZikgI2Yp CisgICAgICAgKCgjOnBhcmFsbGVsLXRlc3RzPyBfICNmKSAjZikpKSkpCmRpZmYgLS1naXQgYS9n bnUvcGFja2FnZXMvcGF0Y2hlcy9tb25vLTEuOS4xLWFkZC1NT05PX0NSRUFURV9JTUFHRV9WRVJT SU9OLnBhdGNoIGIvZ251L3BhY2thZ2VzL3BhdGNoZXMvbW9uby0xLjkuMS1hZGQtTU9OT19DUkVB VEVfSU1BR0VfVkVSU0lPTi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw MDAwLi4xZWVmMDU0OGNhCi0tLSAvZGV2L251bGwKKysrIGIvZ251L3BhY2thZ2VzL3BhdGNoZXMv bW9uby0xLjkuMS1hZGQtTU9OT19DUkVBVEVfSU1BR0VfVkVSU0lPTi5wYXRjaApAQCAtMCwwICsx LDE0IEBACitkaWZmIC0tZ2l0IGEvbW9uby9tZXRhZGF0YS9yZWZsZWN0aW9uLmMgYi9tb25vL21l dGFkYXRhL3JlZmxlY3Rpb24uYworaW5kZXggY2UwNTNiMGVmNDkuLjdjNTFmMjBjNGNmIDEwMDY0 NAorLS0tIGEvbW9uby9tZXRhZGF0YS9yZWZsZWN0aW9uLmMKKysrKyBiL21vbm8vbWV0YWRhdGEv cmVmbGVjdGlvbi5jCitAQCAtNDMzNiw2ICs0MzM2LDkgQEAgY3JlYXRlX2R5bmFtaWNfbW9ub19p bWFnZSAoTW9ub0R5bmFtaWNBc3NlbWJseSAqYXNzZW1ibHksIGNoYXIgKmFzc2VtYmx5X25hbWUs IGMKKyAKKyAJY29uc3QgY2hhciAqdmVyc2lvbiA9IG1vbm9fZ2V0X3J1bnRpbWVfaW5mbyAoKS0+ cnVudGltZV92ZXJzaW9uOworIAorKyAgICAgICAgY2hhciAqZW52X3ZlciA9IGdldGVudigiTU9O T19DUkVBVEVfSU1BR0VfVkVSU0lPTiIpOworKyAgICAgICAgaWYgKGVudl92ZXIpIHZlcnNpb24g PSBlbnZfdmVyOworKworICNpZiBIQVZFX0JPRUhNX0dDCisgCWltYWdlID0gR0NfTUFMTE9DIChz aXplb2YgKE1vbm9EeW5hbWljSW1hZ2UpKTsKKyAjZWxzZQpkaWZmIC0tZ2l0IGEvZ251L3BhY2th Z2VzL3BhdGNoZXMvbW9uby0xLjkuMS1maXhlcy5wYXRjaCBiL2dudS9wYWNrYWdlcy9wYXRjaGVz L21vbm8tMS45LjEtZml4ZXMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw MDAwMC4uMTYzNTNlYTc0MQotLS0gL2Rldi9udWxsCisrKyBiL2dudS9wYWNrYWdlcy9wYXRjaGVz L21vbm8tMS45LjEtZml4ZXMucGF0Y2gKQEAgLTAsMCArMSw1OSBAQAorZGlmZiAtLWdpdCBhL2Rh dGEvbW9uby5wYy5pbiBiL2RhdGEvbW9uby5wYy5pbgoraW5kZXggNmRhMDk2MGRiMmQuLmQ0M2Ji MTg3MjE4IDEwMDY0NAorLS0tIGEvZGF0YS9tb25vLnBjLmluCisrKysgYi9kYXRhL21vbm8ucGMu aW4KK0BAIC03LDYgKzcsNiBAQCBzeXNjb25mZGlyPUBzeXNjb25mZGlyQAorIE5hbWU6IE1vbm8K KyBEZXNjcmlwdGlvbjogTW9ubyBSdW50aW1lCisgVmVyc2lvbjogQFZFUlNJT05ACistUmVxdWly ZXM6IGdsaWItMi4wIGd0aHJlYWQtMi4wCisrUmVxdWlyZXM6IGdsaWItMi4wIGd0aHJlYWQtMi4w IGJkdy1nYworIExpYnM6IC1MJHtsaWJkaXJ9IEBleHBvcnRfbGRmbGFnc0AgLWxtb25vIEBsaWJt b25vX2xkZmxhZ3NACisgQ2ZsYWdzOiAtSSR7aW5jbHVkZWRpcn0gQGxpYm1vbm9fY2ZsYWdzQAor ZGlmZiAtLWdpdCBhL21vbm8tdW5pbnN0YWxsZWQucGMuaW4gYi9tb25vLXVuaW5zdGFsbGVkLnBj LmluCitpbmRleCA3ZmEzZjEyZGM5MS4uMmEwNzM0MzYyZmQgMTAwNjQ0CistLS0gYS9tb25vLXVu aW5zdGFsbGVkLnBjLmluCisrKysgYi9tb25vLXVuaW5zdGFsbGVkLnBjLmluCitAQCAtMSw2ICsx LDYgQEAKKyBOYW1lOiBNb25vCisgRGVzY3JpcHRpb246IE1vbm8gUnVudGltZQorIFZlcnNpb246 IEBWRVJTSU9OQAorLVJlcXVpcmVzOiBnbGliLTIuMCBndGhyZWFkLTIuMAorK1JlcXVpcmVzOiBn bGliLTIuMCBndGhyZWFkLTIuMCBiZHctZ2MKKyBMaWJzOiAtTEBtb25vX2J1aWxkX3Jvb3RAL21v bm8vbWluaS8ubGlicyBAZXhwb3J0X2xkZmxhZ3NAIC1sbW9ubyBAbGlibW9ub19sZGZsYWdzQAor IENmbGFnczogLUlAYWJzX3RvcF9zcmNkaXJAIC1JQGFic190b3Bfc3JjZGlyQC9tb25vIEBsaWJt b25vX2NmbGFnc0AKK2RpZmYgLS1naXQgYS9tb25vL21ldGFkYXRhL01ha2VmaWxlLmFtIGIvbW9u by9tZXRhZGF0YS9NYWtlZmlsZS5hbQoraW5kZXggMmU0ODAxOTBjOGMuLjkwZDBmNjE5OTU5IDEw MDY0NAorLS0tIGEvbW9uby9tZXRhZGF0YS9NYWtlZmlsZS5hbQorKysrIGIvbW9uby9tZXRhZGF0 YS9NYWtlZmlsZS5hbQorQEAgLTE1Nyw3ICsxNTcsNiBAQCBsaWJtb25vcnVudGltZWluY2x1ZGVf SEVBREVSUyA9IFwKKyAJb2JqZWN0LmgJXAorIAlleGNlcHRpb24uaAlcCisgCXByb2ZpbGVyLmgJ XAorLQlhcHBkb21haW4uaAlcCisgCW1vbm8tY29uZmlnLmgJXAorIAlkZWJ1Zy1oZWxwZXJzLmgJ XAorIAltZW1wb29sLmgKK2RpZmYgLS1naXQgYS9tb25vL21pbmkvZHJpdmVyLmMgYi9tb25vL21p bmkvZHJpdmVyLmMKK2luZGV4IGZmYTRiNWU1ZTY5Li44NWE5NTQ5NjBlYiAxMDA2NDQKKy0tLSBh L21vbm8vbWluaS9kcml2ZXIuYworKysrIGIvbW9uby9taW5pL2RyaXZlci5jCitAQCAtMTAzMyw2 ICsxMDMzLDcgQEAgbW9ub19tYWluIChpbnQgYXJnYywgY2hhciogYXJndltdKQorICNlbmRpZgor IAlpZiAoIWdfdGhyZWFkX3N1cHBvcnRlZCAoKSkKKyAJCWdfdGhyZWFkX2luaXQgKE5VTEwpOwor KyAgICAgICAgR0NfYWxsb3dfcmVnaXN0ZXJfdGhyZWFkcygpOworIAorIAlpZiAobW9ub19ydW5u aW5nX29uX3ZhbGdyaW5kICgpICYmIGdldGVudiAoIk1PTk9fVkFMR1JJTkRfTEVBS19DSEVDSyIp KSB7CisgCQlHTWVtVlRhYmxlIG1lbV92dGFibGU7CitkaWZmIC0tZ2l0IGEvcnVudGltZS9NYWtl ZmlsZS5hbSBiL3J1bnRpbWUvTWFrZWZpbGUuYW0KK2luZGV4IGUzYThhMjFlOWUyLi41ODdiOWY0 YWE3OSAxMDA2NDQKKy0tLSBhL3J1bnRpbWUvTWFrZWZpbGUuYW0KKysrKyBiL3J1bnRpbWUvTWFr ZWZpbGUuYW0KK0BAIC0xLDYgKzEsMyBAQAorLSMgaGFjayB0byBwcmV2ZW50ICdjaGVjaycgZnJv bSBkZXBlbmRpbmcgb24gJ2FsbCcKKy1BVVRPTUFLRV9PUFRJT05TID0gY3lnbnVzCistCisgdG1w aW5zdCA9IF90bXBpbnN0CisgCisgbm9pbnN0X1NDUklQVFMgPSBtb25vLXdyYXBwZXIgbW9ub2Rp cy13cmFwcGVyIHNlbWRlbC13cmFwcGVyCi0tIAoyLjQ1LjIKCg== --b1=_an9yUQc81YewVJ071Mjh6ZcI5zllr0hgLHfHss8ka8A Content-Type: text/x-patch; name=0002-gnu-Add-pnet-git.patch Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=0002-gnu-Add-pnet-git.patch RnJvbSBhZWIyZjFjZjU0MzIyY2MzNjExYjMxYzUzNmY0YzgyYWIwNDI1OTU3IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpNZXNzYWdlLUlEOiA8YWViMmYxY2Y1NDMyMmNjMzYxMWIzMWM1MzZmNGM4 MmFiMDQyNTk1Ny4xNzMyNzA3Mjg4LmdpdC51bm11c2hAaGFzaGJhbmcuc2g+CkluLVJlcGx5LVRv OiA8M2Y4YWY2NWY3Mjg3MWQ2MWZhODVlNjkzOWY0NmNiOGRhYzE4NWM3MC4xNzMyNzA3Mjg4Lmdp dC51bm11c2hAaGFzaGJhbmcuc2g+ClJlZmVyZW5jZXM6IDwzZjhhZjY1ZjcyODcxZDYxZmE4NWU2 OTM5ZjQ2Y2I4ZGFjMTg1YzcwLjE3MzI3MDcyODguZ2l0LnVubXVzaEBoYXNoYmFuZy5zaD4KRnJv bTogdW5tdXNoIDx1bm11c2hAaGFzaGJhbmcuc2g+CkRhdGU6IFR1ZSwgMjYgTm92IDIwMjQgMTI6 NDQ6NTYKU3ViamVjdDogW1BBVENIIDAyLzIxXSBnbnU6IEFkZCBwbmV0LWdpdC4KCiogZ251L3Bh Y2thZ2VzL2RvdG5ldC5zY20gKHBuZXQtZ2l0KTogTmV3IHZhcmlhYmxlLgoqIGdudS9wYWNrYWdl cy9wYXRjaGVzL3BuZXQtZml4LWxpbmUtbnVtYmVyLWluZm8ucGF0Y2g6IG5ldyBwYXRjaC4KKiBn bnUvcGFja2FnZXMvcGF0Y2hlcy9wbmV0LWZpeC1vZmYtYnktb25lLnBhdGNoOiBuZXcgcGF0Y2gu CiogZ251L3BhY2thZ2VzL3BhdGNoZXMvcG5ldC1uZXdlci1saWJnYy1maXgucGF0Y2g6IG5ldyBw YXRjaC4KKiBnbnUvcGFja2FnZXMvcGF0Y2hlcy9wbmV0LW5ld2VyLXRleGluZm8tZml4LnBhdGNo OiBuZXcgcGF0Y2guCiogZ251L2xvY2FsLm1rIChkaXN0X3BhdGNoX0RBVEEpOiByZWdpc3RlciBu ZXcgcGF0Y2hlcy4KCkNoYW5nZS1JZDogSTc1MWU5NzA4OGUyYjg0ODA3ODg4OWIyMDMzZWJiNDM1 NmQzY2ZlNGIKLS0tCiBnbnUvbG9jYWwubWsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgfCAgIDQgKwogZ251L3BhY2thZ2VzL2RvdG5ldC5zY20gICAgICAgICAgICAgICAgICAgICAg IHwgMTAwICsrKysrKysrKysrKysrKysrKwogLi4uL3BhdGNoZXMvcG5ldC1maXgtbGluZS1udW1i ZXItaW5mby5wYXRjaCAgIHwgIDEzICsrKwogLi4uL3BhdGNoZXMvcG5ldC1maXgtb2ZmLWJ5LW9u ZS5wYXRjaCAgICAgICAgIHwgIDEzICsrKwogLi4uL3BhdGNoZXMvcG5ldC1uZXdlci1saWJnYy1m aXgucGF0Y2ggICAgICAgIHwgIDQ1ICsrKysrKysrCiAuLi4vcGF0Y2hlcy9wbmV0LW5ld2VyLXRl eGluZm8tZml4LnBhdGNoICAgICAgfCAgMTMgKysrCiA2IGZpbGVzIGNoYW5nZWQsIDE4OCBpbnNl cnRpb25zKCspCiBjcmVhdGUgbW9kZSAxMDA2NDQgZ251L3BhY2thZ2VzL3BhdGNoZXMvcG5ldC1m aXgtbGluZS1udW1iZXItaW5mby5wYXRjaAogY3JlYXRlIG1vZGUgMTAwNjQ0IGdudS9wYWNrYWdl cy9wYXRjaGVzL3BuZXQtZml4LW9mZi1ieS1vbmUucGF0Y2gKIGNyZWF0ZSBtb2RlIDEwMDY0NCBn bnUvcGFja2FnZXMvcGF0Y2hlcy9wbmV0LW5ld2VyLWxpYmdjLWZpeC5wYXRjaAogY3JlYXRlIG1v ZGUgMTAwNjQ0IGdudS9wYWNrYWdlcy9wYXRjaGVzL3BuZXQtbmV3ZXItdGV4aW5mby1maXgucGF0 Y2gKCmRpZmYgLS1naXQgYS9nbnUvbG9jYWwubWsgYi9nbnUvbG9jYWwubWsKaW5kZXggMGExNjE3 NDQ4Yy4uZDM2YTAwMzAwNyAxMDA2NDQKLS0tIGEvZ251L2xvY2FsLm1rCisrKyBiL2dudS9sb2Nh bC5tawpAQCAtMTkyNCw2ICsxOTI0LDEwIEBAIGRpc3RfcGF0Y2hfREFUQSA9CQkJCQkJXAogICAl RCUvcGFja2FnZXMvcGF0Y2hlcy9wbG90dXRpbHMtc3BsaW5lLXRlc3QucGF0Y2gJCVwKICAgJUQl L3BhY2thZ2VzL3BhdGNoZXMvcG80YS1wYXJ0aWFsLXRleGluZm8tbWVudS1maXgucGF0Y2gJXAog ICAlRCUvcGFja2FnZXMvcGF0Y2hlcy9wbG92ZXItbXVsdGlzY3JlZW4ucGF0Y2gJCVwKKyAgJUQl L3BhY2thZ2VzL3BhdGNoZXMvcG5ldC1maXgtbGluZS1udW1iZXItaW5mby5wYXRjaAkJXAorICAl RCUvcGFja2FnZXMvcGF0Y2hlcy9wbmV0LWZpeC1vZmYtYnktb25lLnBhdGNoCQlcCisgICVEJS9w YWNrYWdlcy9wYXRjaGVzL3BuZXQtbmV3ZXItbGliZ2MtZml4LnBhdGNoCQlcCisgICVEJS9wYWNr YWdlcy9wYXRjaGVzL3BuZXQtbmV3ZXItdGV4aW5mby1maXgucGF0Y2gJCVwKICAgJUQlL3BhY2th Z2VzL3BhdGNoZXMvcG9sa2l0LWRpc2FibGUtc3lzdGVtZC5wYXRjaAkJXAogICAlRCUvcGFja2Fn ZXMvcGF0Y2hlcy9wb3J0YXVkaW8tYXVkYWNpdHktY29tcGF0LnBhdGNoCQlcCiAgICVEJS9wYWNr YWdlcy9wYXRjaGVzL3BvcnRtaWRpLW1vZHVsYXItYnVpbGQucGF0Y2gJCVwKZGlmZiAtLWdpdCBh L2dudS9wYWNrYWdlcy9kb3RuZXQuc2NtIGIvZ251L3BhY2thZ2VzL2RvdG5ldC5zY20KaW5kZXgg MzA4NGUxY2YzYS4uZTExZGFmZjQ4YyAxMDA2NDQKLS0tIGEvZ251L3BhY2thZ2VzL2RvdG5ldC5z Y20KKysrIGIvZ251L3BhY2thZ2VzL2RvdG5ldC5zY20KQEAgLTYwLDMgKzYwLDEwMyBAQCAoZGVm aW5lLXB1YmxpYyB0cmVlY2MKIG9mIGNvbXBpbGVycyBhbmQgb3RoZXIgbGFuZ3VhZ2UtYmFzZWQg dG9vbHMuICBJdCBtYW5hZ2VzIHRoZSBnZW5lcmF0aW9uIG9mCiBjb2RlIHRvIGhhbmRsZSBhYnN0 cmFjdCBzeW50YXggdHJlZXMgYW5kIG9wZXJhdGlvbnMgdXBvbiB0aGUgdHJlZXMuIikKICAgICAo bGljZW5zZSBsaWNlbnNlOmdwbDIrKSkpCisKKzs7IHNldmVyYWwgaW1wcm92ZW1lbnRzIG9jY3Vy cmVkIHBhc3QgdGhlIDAuOC4wIHJlbGVhc2UgdGhhdCBtYWtlIGl0IGVhc2llciB0bworOzsgYm9v dHN0cmFwIG1vbm8KKyhkZWZpbmUtcHVibGljIHBuZXQtZ2l0CisgIChsZXQgKChjb21taXQgIjNi YWY5NDczNGQ4ZGMzZmRhYmJhNjhhODg5MWU2N2E0M2VkNmM0YmQiKQorICAgICAgICAodmVyc2lv biAiMC44LjAiKQorICAgICAgICAocmV2aXNpb24gIjAiKSkKKyAgICAocGFja2FnZQorICAgICAg KG5hbWUgInBuZXQtZ2l0IikKKyAgICAgICh2ZXJzaW9uIChnaXQtdmVyc2lvbiB2ZXJzaW9uIHJl dmlzaW9uIGNvbW1pdCkpCisgICAgICAoc291cmNlIChvcmlnaW4KKyAgICAgICAgICAgICAgICAo bWV0aG9kIGdpdC1mZXRjaCkKKyAgICAgICAgICAgICAgICAodXJpIChnaXQtcmVmZXJlbmNlCisg ICAgICAgICAgICAgICAgICAgICAgKHVybCAiaHR0cHM6Ly9naXQuc2F2YW5uYWguZ251Lm9yZy9n aXQvZG90Z251LXBuZXQvcG5ldC5naXQiKQorICAgICAgICAgICAgICAgICAgICAgIChjb21taXQg Y29tbWl0KSkpCisgICAgICAgICAgICAgICAgKGZpbGUtbmFtZSAoZ2l0LWZpbGUtbmFtZSBuYW1l IHZlcnNpb24pKQorICAgICAgICAgICAgICAgIChzaGEyNTYKKyAgICAgICAgICAgICAgICAgKGJh c2UzMgorICAgICAgICAgICAgICAgICAgIjB2em52cmd6OGwwbXBpYjFyejV2M2NscjdjbjU3MHZ5 cDgwZjdmMWp2eml2bmMxaW16bjYiKSkKKyAgICAgICAgICAgICAgICAobW9kdWxlcyAnKChndWl4 IGJ1aWxkIHV0aWxzKSkpCisgICAgICAgICAgICAgICAgKHNuaXBwZXQKKyAgICAgICAgICAgICAg ICAgI34oYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgIChmb3ItZWFjaCBkZWxldGUtZmlsZS1y ZWN1cnNpdmVseSAnKCJsaWJmZmkiICJsaWJnYyIpKQorICAgICAgICAgICAgICAgICAgICAgKGZv ci1lYWNoIGRlbGV0ZS1maWxlIChmaWx0ZXIgZmlsZS1leGlzdHM/CisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnKCJjb21waWxlIgorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29uZmlndXJlIgor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29u ZmlnLmd1ZXNzIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAiY29uZmlnLnN1YiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgImRlcGNvbXAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICJpbnN0YWxsLXNoIgorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibHRjb25maWciCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsdGNmLWMuc2giCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsdG1h aW4uc2giKSkpCisgICAgICAgICAgICAgICAgICAgICAoZm9yLWVhY2ggZGVsZXRlLWZpbGUgKGZp bmQtZmlsZXMgIi4iICJNYWtlZmlsZShcXC5pbik/JCIpKQorICAgICAgICAgICAgICAgICAgICAg KGZvci1lYWNoIGRlbGV0ZS1maWxlIChmaW5kLWZpbGVzICIuIiAiX2dyYW1tYXJcXC4oY3xoKSQi KSkKKyAgICAgICAgICAgICAgICAgICAgIChmb3ItZWFjaCBkZWxldGUtZmlsZSAoZmluZC1maWxl cyAiLiIgIl9zY2FubmVyXFwuKGN8aCkkIikpCisgICAgICAgICAgICAgICAgICAgICA7OyBGaXgg dG8gbm90IHJlcXVpcmUgYnVuZGxlZCBkZXBlbmRlbmNpZXMKKyAgICAgICAgICAgICAgICAgICAg IChzdWJzdGl0dXRlKiAiY29uZmlndXJlLmluIgorICAgICAgICAgICAgICAgICAgICAgICAoKCJH Q0xJQlM9Jy4qbGliZ2MuYSciKSAiR0NMSUJTPSctbGdjJyIpCisgICAgICAgICAgICAgICAgICAg ICAgIDs7IEFDX1NFQVJDSF9MSUJKSVQgY2hlY2tzIGhhcmRjb2RlZCBoZWFkZXIgbG9jYXRpb25z CisgICAgICAgICAgICAgICAgICAgICAgICgoInNlYXJjaF9saWJqaXQ9dHJ1ZSIpCisgICAgICAg ICAgICAgICAgICAgICAgICAoc3RyaW5nLWFwcGVuZCAic2VhcmNoX2xpYmppdD1mYWxzZVxuIgor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkpJVF9MSUJTPS1saml0Iikp KQorICAgICAgICAgICAgICAgICAgICAgKHN1YnN0aXR1dGUqICJNYWtlZmlsZS5hbSIKKyAgICAg ICAgICAgICAgICAgICAgICAgKCgiT1BUX1NVQkRJUlMgXFwrPSBsaWIuKiIpICIiKSkKKyAgICAg ICAgICAgICAgICAgICAgIChzdWJzdGl0dXRlKiAic3VwcG9ydC9oYl9nYy5jIgorICAgICAgICAg ICAgICAgICAgICAgICAoKCIjaW5jbHVkZSAuKi9saWJnYy9pbmNsdWRlL2djLmguIikKKyAgICAg ICAgICAgICAgICAgICAgICAgICIjaW5jbHVkZSA8Z2MuaD4iKQorICAgICAgICAgICAgICAgICAg ICAgICAoKCIjaW5jbHVkZSAuKi9saWJnYy9pbmNsdWRlL2djX3R5cGVkLmguIikKKyAgICAgICAg ICAgICAgICAgICAgICAgICIjaW5jbHVkZSA8Z2MvZ2NfdHlwZWQuaD4iKSkKKyAgICAgICAgICAg ICAgICAgICAgIChzdWJzdGl0dXRlKiAobGlzdCAiY29kZWdlbi9NYWtlZmlsZS5hbSIKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY3NjYy9iZi9NYWtlZmlsZS5hbSIK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY3NjYy9jc2hhcnAvTWFr ZWZpbGUuYW0iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNzY2Mv Yy9NYWtlZmlsZS5hbSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi Y3NjYy9qYXZhL01ha2VmaWxlLmFtIikKKyAgICAgICAgICAgICAgICAgICAgICAgOzsgR2VuZXJh dGVkIGZpbGVzIGFyZW4ndCBwcmVyZXF1aXNpdGVzCisgICAgICAgICAgICAgICAgICAgICAgICgo IlRSRUVDQ19PVVRQVVQgPS4qIikgIiIpKQorICAgICAgICAgICAgICAgICAgICAgKHN1YnN0aXR1 dGUqICJjc2NjL2NzaGFycC9jc19ncmFtbWFyLnkiCisgICAgICAgICAgICAgICAgICAgICAgICgo IllZTEVYIikgInl5bGV4KCkiKSkKKyAgICAgICAgICAgICAgICAgICAgIChzdWJzdGl0dXRlKiAi Y3NjYy9jb21tb24vY2NfbWFpbi5oIgorICAgICAgICAgICAgICAgICAgICAgICAoKCJDQ1ByZVBy b2MgQ0NQcmVQcm9jZXNzb3JTdHJlYW07IiBhbGwpCisgICAgICAgICAgICAgICAgICAgICAgICAo c3RyaW5nLWFwcGVuZCAiZXh0ZXJuICIgYWxsKSkpCisgICAgICAgICAgICAgICAgICAgICAoc3Vi c3RpdHV0ZSogImNzZG9jL3NjYW5uZXIuYyIKKyAgICAgICAgICAgICAgICAgICAgICAgKCgiaW50 XHR0b2tlbjsiIGFsbCkKKyAgICAgICAgICAgICAgICAgICAgICAgIChzdHJpbmctYXBwZW5kICJl eHRlcm4gIiBhbGwpKSkKKyAgICAgICAgICAgICAgICAgICAgIChzdWJzdGl0dXRlKiAiZG9jL2N2 bWRvYy5weSIKKyAgICAgICAgICAgICAgICAgICAgICAgKCgicHl0aG9uMS41IikKKyAgICAgICAg ICAgICAgICAgICAgICAgICJweXRob24zIikpKSkKKyAgICAgICAgICAgICAgICAocGF0Y2hlcwor ICAgICAgICAgICAgICAgICAoc2VhcmNoLXBhdGNoZXMgInBuZXQtbmV3ZXItbGliZ2MtZml4LnBh dGNoIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBuZXQtbmV3ZXItdGV4aW5m by1maXgucGF0Y2giCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicG5ldC1maXgt bGluZS1udW1iZXItaW5mby5wYXRjaCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICJwbmV0LWZpeC1vZmYtYnktb25lLnBhdGNoIikpKSkKKyAgICAgIChidWlsZC1zeXN0ZW0gZ251 LWJ1aWxkLXN5c3RlbSkKKyAgICAgIChuYXRpdmUtaW5wdXRzCisgICAgICAgKGxpc3QgYXV0b2Nv bmYKKyAgICAgICAgICAgICBhdXRvbWFrZQorICAgICAgICAgICAgIGJpc29uCisgICAgICAgICAg ICAgZmxleAorICAgICAgICAgICAgIGxpYnRvb2wKKyAgICAgICAgICAgICBsaWJhdG9taWMtb3Bz CisgICAgICAgICAgICAgKGRlZmF1bHQtcHl0aG9uKSA7OyBmb3IgY3ZtZG9jLnB5CisgICAgICAg ICAgICAgdGV4aW5mbworICAgICAgICAgICAgIHRyZWVjYykpCisgICAgICAoaW5wdXRzCisgICAg ICAgKGxpc3QgbGliZ2MgbGliaml0KSkKKyAgICAgIChhcmd1bWVudHMKKyAgICAgICAobGlzdCAj OmNvbmZpZ3VyZS1mbGFncyAjfihsaXN0ICItLXdpdGgtaml0IikKKyAgICAgICAgICAgICAjOm1h a2UtZmxhZ3MgI34obGlzdCAiQ0ZMQUdTKz0tV25vLXBvaW50ZXItdG8taW50LWNhc3QiKSkpCisg ICAgICAobmF0aXZlLXNlYXJjaC1wYXRocworICAgICAgIChsaXN0IChzZWFyY2gtcGF0aC1zcGVj aWZpY2F0aW9uCisgICAgICAgICAgICAgICh2YXJpYWJsZSAiQ1NDQ19MSUJfUEFUSCIpCisgICAg ICAgICAgICAgIChmaWxlcyAobGlzdCAibGliL2NzY2MvbGliIikpKSkpCisgICAgICAoaG9tZS1w YWdlICJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvZG90Z251L2h0bWwyLjAvcG5ldC5odG1s IikKKyAgICAgIChzeW5vcHNpcyAiQ29tcGlsZXIgZm9yIHRoZSBDIyBwcm9ncmFtbWluZyBsYW5n dWFnZSIpCisgICAgICAoZGVzY3JpcHRpb24KKyAgICAgICAiVGhlIGdvYWwgb2YgdGhpcyBwcm9q ZWN0IGlzIHRvIGJ1aWxkIGEgc3VpdGUgb2YgZnJlZSBzb2Z0d2FyZSB0b29scwordG8gYnVpbGQg YW5kIGV4ZWN1dGUgLk5FVCBhcHBsaWNhdGlvbnMsIGluY2x1ZGluZyBhIEMjIGNvbXBpbGVyLAor YXNzZW1ibGVyLCBkaXNhc3NlbWJsZXIsIGFuZCBydW50aW1lIGVuZ2luZS4iKQorICAgICAgKGxp Y2Vuc2UgbGljZW5zZTpncGwyKykpKSkKZGlmZiAtLWdpdCBhL2dudS9wYWNrYWdlcy9wYXRjaGVz L3BuZXQtZml4LWxpbmUtbnVtYmVyLWluZm8ucGF0Y2ggYi9nbnUvcGFja2FnZXMvcGF0Y2hlcy9w bmV0LWZpeC1saW5lLW51bWJlci1pbmZvLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4 IDAwMDAwMDAwMDAuLjllNWFmODQ5NDEKLS0tIC9kZXYvbnVsbAorKysgYi9nbnUvcGFja2FnZXMv cGF0Y2hlcy9wbmV0LWZpeC1saW5lLW51bWJlci1pbmZvLnBhdGNoCkBAIC0wLDAgKzEsMTMgQEAK K2RpZmYgLS1naXQgYS9jb2RlZ2VuL2NnX2NvZXJjZS5jIGIvY29kZWdlbi9jZ19jb2VyY2UuYwor aW5kZXggOTJkMmY1OWEuLmM5MGFkNWUyIDEwMDY0NAorLS0tIGEvY29kZWdlbi9jZ19jb2VyY2Uu YworKysrIGIvY29kZWdlbi9jZ19jb2VyY2UuYworQEAgLTEyMDMsNiArMTIwMyw4IEBAIGludCBJ TENvZXJjZShJTEdlbkluZm8gKmluZm8sIElMTm9kZSAqbm9kZSwgSUxOb2RlICoqcGFyZW50LAor IAkJCQkJIT0gSUxNYWNoaW5lVHlwZV9Wb2lkKQorIAl7CisgCQkqcGFyZW50ID0gSUxOb2RlX0Nh c3RTaW1wbGVfY3JlYXRlKG5vZGUsIGNvbnN0VHlwZSk7CisrICAgICAgICAgICAgICAgIHl5c2V0 ZmlsZW5hbWUoKnBhcmVudCwgeXlnZXRmaWxlbmFtZShub2RlKSk7CisrCQl5eXNldGxpbmVudW0o KnBhcmVudCwgeXlnZXRsaW5lbnVtKG5vZGUpKTsKKyAJCXJldHVybiAxOworIAl9CisgCWVsc2Ug aWYoaW5kaXJlY3QgJiYgR2V0SW5kaXJlY3RDb252ZXJ0UnVsZXMoaW5mbyxmcm9tVHlwZSx0b1R5 cGUsMCwgCmRpZmYgLS1naXQgYS9nbnUvcGFja2FnZXMvcGF0Y2hlcy9wbmV0LWZpeC1vZmYtYnkt b25lLnBhdGNoIGIvZ251L3BhY2thZ2VzL3BhdGNoZXMvcG5ldC1maXgtb2ZmLWJ5LW9uZS5wYXRj aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi44NThkMjI2Njk3Ci0tLSAv ZGV2L251bGwKKysrIGIvZ251L3BhY2thZ2VzL3BhdGNoZXMvcG5ldC1maXgtb2ZmLWJ5LW9uZS5w YXRjaApAQCAtMCwwICsxLDEzIEBACitkaWZmIC0tZ2l0IGEvY29kZWdlbi9jZ19nZW5hdHRyLmMg Yi9jb2RlZ2VuL2NnX2dlbmF0dHIuYworaW5kZXggNTM1ODUyZGEuLmMzYWNjMGRjIDEwMDY0NAor LS0tIGEvY29kZWdlbi9jZ19nZW5hdHRyLmMKKysrKyBiL2NvZGVnZW4vY2dfZ2VuYXR0ci5jCitA QCAtMTUzMiw3ICsxNTMyLDcgQEAgc3RhdGljIGludCBNYXJzaGFsQXNBdHRyaWJ1dGUoSUxHZW5J bmZvICppbmZvLAorIAkJCWVsc2UKKyAJCQl7CisgCQkJCXNpemVQYXJhbUluZGV4ID0gYXR0cmli dXRlSW5mby0+bmFtZWRBcmdzW2N1cnJlbnROYW1lZEFyZ10uZXZhbFZhbHVlLnVuLmk0VmFsdWU7 CistCQkJCWlmKHNpemVQYXJhbUluZGV4IDw9IDApCisrCQkJCWlmKHNpemVQYXJhbUluZGV4IDwg MCkKKyAJCQkJeworIAkJCQkJQ0dFcnJvckZvck5vZGUoaW5mbywgYXR0cmlidXRlSW5mby0+bmFt ZWRBcmdzW2N1cnJlbnROYW1lZEFyZ10ubm9kZSwKKyAJCQkJCQlfKCJUaGUgc2l6ZSBwYXJhbWV0 ZXIgaW5kZXggbXVzdCBiZSA+PSAwIikpOwpkaWZmIC0tZ2l0IGEvZ251L3BhY2thZ2VzL3BhdGNo ZXMvcG5ldC1uZXdlci1saWJnYy1maXgucGF0Y2ggYi9nbnUvcGFja2FnZXMvcGF0Y2hlcy9wbmV0 LW5ld2VyLWxpYmdjLWZpeC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw MDAwLi4xMDg0YjVhNWJlCi0tLSAvZGV2L251bGwKKysrIGIvZ251L3BhY2thZ2VzL3BhdGNoZXMv cG5ldC1uZXdlci1saWJnYy1maXgucGF0Y2gKQEAgLTAsMCArMSw0NSBAQAorZGlmZiAtLWdpdCBh L3N1cHBvcnQvaGJfZ2MuYyBiL3N1cHBvcnQvaGJfZ2MuYworaW5kZXggYTVhZGRiMmQuLjQxMTI2 OTYzIDEwMDY0NAorLS0tIGEvc3VwcG9ydC9oYl9nYy5jCisrKysgYi9zdXBwb3J0L2hiX2djLmMK K0BAIC0xMDQsMTIgKzEwNCw2IEBAIHN0YXRpYyB2b2xhdGlsZSBpbnQgX0ZpbmFsaXplcnNSdW5u aW5nU3luY2hyb25vdXNseSA9IDA7CisgCSNkZWZpbmUgR0NfVFJBQ0UoYSwgYikKKyAjZW5kaWYK KyAKKy0vKgorLSAqIFRoaXMgaXMgYSBpbnRlcm5hbCBnbG9iYWwgdmFyaWFibGUgd2l0aCB0aGUg bnVtYmVyIG9mIHJlY2xhaW1lZCBieXRlcworLSAqIGFmdGVyIGEgZ2FyYmFnZSBjb2xsZWN0aW9u LgorLSAqLworLWV4dGVybiBHQ19zaWduZWRfd29yZCBHQ19ieXRlc19mb3VuZDsKKy0KKyAvKgor ICAqCU1haW4gZW50cnkgcG9pbnQgZm9yIHRoZSBmaW5hbGl6ZXIgdGhyZWFkLgorICAqLworQEAg LTQzMiw2ICs0MjYsNyBAQCBpbnQgSUxHQ0Z1bGxDb2xsZWN0aW9uKGludCB0aW1lb3V0KQorIHsK KyAJaW50IGxhc3RGaW5hbGl6aW5nQ291bnQ7CisgCWludCBoYXNUaHJlYWRzOworKyAgICAgICBz dHJ1Y3QgR0NfcHJvZl9zdGF0c19zIHN0YXRzOworIAorIAloYXNUaHJlYWRzID0gX0lMSGFzVGhy ZWFkcygpOworIAorQEAgLTQ2Miw3ICs0NTcsOCBAQCBpbnQgSUxHQ0Z1bGxDb2xsZWN0aW9uKGlu dCB0aW1lb3V0KQorIAkJCUdDX1RSQUNFKCJMYXN0IGZpbmFsaXppbmdDb3VudCA9ICVpXG4iLCBs YXN0RmluYWxpemluZ0NvdW50KTsKKyAKKyAJCQlHQ19nY29sbGVjdCgpOworLQkJCWJ5dGVzQ29s bGVjdGVkID0gR0NfYnl0ZXNfZm91bmQ7CisrICAgICAgICAgICAgICAgICAgICAgICBHQ19nZXRf cHJvZl9zdGF0cygmc3RhdHMsIHNpemVvZihzdGF0cykpOworKwkJCWJ5dGVzQ29sbGVjdGVkID0g c3RhdHMuYnl0ZXNfcmVjbGFpbWVkX3NpbmNlX2djOworIAorIAkJCUdDX1RSQUNFKCJHQzogYnl0 ZXMgY29sbGVjdGVkID0gICVpXG4iLCBieXRlc0NvbGxlY3RlZCk7CisgCitAQCAtNTE2LDcgKzUx Miw4IEBAIGludCBJTEdDRnVsbENvbGxlY3Rpb24oaW50IHRpbWVvdXQpCisgCQkJR0NfVFJBQ0Uo Ikxhc3QgZmluYWxpemluZ0NvdW50ID0gJWlcbiIsIGxhc3RGaW5hbGl6aW5nQ291bnQpOworIAor IAkJCUdDX2djb2xsZWN0KCk7CistCQkJYnl0ZXNDb2xsZWN0ZWQgPSBHQ19ieXRlc19mb3VuZDsK KysgICAgICAgICAgICAgICAgICAgICAgIEdDX2dldF9wcm9mX3N0YXRzKCZzdGF0cywgc2l6ZW9m KHN0YXRzKSk7CisrCQkJYnl0ZXNDb2xsZWN0ZWQgPSBzdGF0cy5ieXRlc19yZWNsYWltZWRfc2lu Y2VfZ2M7CisgCisgCQkJR0NfVFJBQ0UoIkdDOiBieXRlcyBjb2xsZWN0ZWQgPSAgJWlcbiIsIGJ5 dGVzQ29sbGVjdGVkKTsKKyAKZGlmZiAtLWdpdCBhL2dudS9wYWNrYWdlcy9wYXRjaGVzL3BuZXQt bmV3ZXItdGV4aW5mby1maXgucGF0Y2ggYi9nbnUvcGFja2FnZXMvcGF0Y2hlcy9wbmV0LW5ld2Vy LXRleGluZm8tZml4LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAu LmI1NzA1MmVlZWEKLS0tIC9kZXYvbnVsbAorKysgYi9nbnUvcGFja2FnZXMvcGF0Y2hlcy9wbmV0 LW5ld2VyLXRleGluZm8tZml4LnBhdGNoCkBAIC0wLDAgKzEsMTMgQEAKK2RpZmYgLS1naXQgYS9k b2MvcG5ldHRvb2xzLnRleGkgYi9kb2MvcG5ldHRvb2xzLnRleGkKK2luZGV4IDkxNmQ5MGJiLi5j ZGJlMDVjZiAxMDA2NDQKKy0tLSBhL2RvYy9wbmV0dG9vbHMudGV4aQorKysrIGIvZG9jL3BuZXR0 b29scy50ZXhpCitAQCAtNTksNyArNTksNyBAQCBDb3B5cmlnaHQgQGNvcHlyaWdodHt9IDIwMDEs IDIwMDIsIDIwMDMgU291dGhlcm4gU3Rvcm0gU29mdHdhcmUsIFB0eSBMdGQKKyBAY2VudGVyIEB0 aXRsZWZvbnR7UG9ydGFibGUuTkVUIERldmVsb3BtZW50IFRvb2xzfQorIAorIEB2c2tpcCAwcHQg cGx1cyAxZmlsbAorLUBjZW50ZXJ7Q29weXJpZ2h0IEBjb3B5cmlnaHR7fSAyMDAxLCAyMDAyLCAy MDAzIFNvdXRoZXJuIFN0b3JtIFNvZnR3YXJlLCBQdHkgTHRkfQorK0BjZW50ZXIgQ29weXJpZ2h0 IEBjb3B5cmlnaHR7fSAyMDAxLCAyMDAyLCAyMDAzIFNvdXRoZXJuIFN0b3JtIFNvZnR3YXJlLCBQ dHkgTHRkCisgQGVuZCB0aXRsZXBhZ2UKKyAKKyBAYyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLSAKMi40NS4y Cgo= --b1=_an9yUQc81YewVJ071Mjh6ZcI5zllr0hgLHfHss8ka8A Content-Type: text/x-patch; name=0003-gnu-Add-pnetlib-git.patch Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=0003-gnu-Add-pnetlib-git.patch RnJvbSBhM2U5NmVlYTc2OTNhNTU0YmQ0Y2FiMmY1MzFiZDlmNjNlZWU4NTBiIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpNZXNzYWdlLUlEOiA8YTNlOTZlZWE3NjkzYTU1NGJkNGNhYjJmNTMxYmQ5 ZjYzZWVlODUwYi4xNzMyNzA3Mjg4LmdpdC51bm11c2hAaGFzaGJhbmcuc2g+CkluLVJlcGx5LVRv OiA8M2Y4YWY2NWY3Mjg3MWQ2MWZhODVlNjkzOWY0NmNiOGRhYzE4NWM3MC4xNzMyNzA3Mjg4Lmdp dC51bm11c2hAaGFzaGJhbmcuc2g+ClJlZmVyZW5jZXM6IDwzZjhhZjY1ZjcyODcxZDYxZmE4NWU2 OTM5ZjQ2Y2I4ZGFjMTg1YzcwLjE3MzI3MDcyODguZ2l0LnVubXVzaEBoYXNoYmFuZy5zaD4KRnJv bTogdW5tdXNoIDx1bm11c2hAaGFzaGJhbmcuc2g+CkRhdGU6IFR1ZSwgMjYgTm92IDIwMjQgMTI6 NTM6MjMKU3ViamVjdDogW1BBVENIIDAzLzIxXSBnbnU6IEFkZCBwbmV0bGliLWdpdC4KCiogZ251 L3BhY2thZ2VzL2RvdG5ldC5zY20gKHBuZXRsaWItZ2l0KTogTmV3IHZhcmlhYmxlLgoKQ2hhbmdl LUlkOiBJM2EwNDFkZTE4MWQ5NmJmZTllNDQ3ZDcyZGRkOTU3OGUxMmRiODAxNAotLS0KIGdudS9w YWNrYWdlcy9kb3RuZXQuc2NtIHwgNTcgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysKIDEgZmlsZSBjaGFuZ2VkLCA1NyBpbnNlcnRpb25zKCspCgpkaWZmIC0tZ2l0IGEv Z251L3BhY2thZ2VzL2RvdG5ldC5zY20gYi9nbnUvcGFja2FnZXMvZG90bmV0LnNjbQppbmRleCBl MTFkYWZmNDhjLi45MGNjZmQyZDU0IDEwMDY0NAotLS0gYS9nbnUvcGFja2FnZXMvZG90bmV0LnNj bQorKysgYi9nbnUvcGFja2FnZXMvZG90bmV0LnNjbQpAQCAtMTYwLDMgKzE2MCw2MCBAQCAoZGVm aW5lLXB1YmxpYyBwbmV0LWdpdAogdG8gYnVpbGQgYW5kIGV4ZWN1dGUgLk5FVCBhcHBsaWNhdGlv bnMsIGluY2x1ZGluZyBhIEMjIGNvbXBpbGVyLAogYXNzZW1ibGVyLCBkaXNhc3NlbWJsZXIsIGFu ZCBydW50aW1lIGVuZ2luZS4iKQogICAgICAgKGxpY2Vuc2UgbGljZW5zZTpncGwyKykpKSkKKwor KGRlZmluZS1wdWJsaWMgcG5ldGxpYi1naXQKKyAgKGxldCAoKHZlcnNpb24gIjAuOC4wIikKKyAg ICAgICAgKGNvbW1pdCAiYzNjMTJiOGIwYzY1ZjU0ODJkMDNkNmE0ODY1Zjc2NzBlOThiYWY0YyIp CisgICAgICAgIChyZXZpc2lvbiAiMCIpKQorICAgIChwYWNrYWdlCisgICAgICAobmFtZSAicG5l dGxpYi1naXQiKQorICAgICAgKHZlcnNpb24gKGdpdC12ZXJzaW9uIHZlcnNpb24gcmV2aXNpb24g Y29tbWl0KSkKKyAgICAgIChzb3VyY2UgKG9yaWdpbgorICAgICAgICAgICAgICAgIChtZXRob2Qg Z2l0LWZldGNoKQorICAgICAgICAgICAgICAgICh1cmkgKGdpdC1yZWZlcmVuY2UKKyAgICAgICAg ICAgICAgICAgICAgICAodXJsCisgICAgICAgICAgICAgICAgICAgICAgICJodHRwczovL2dpdC5z YXZhbm5haC5nbnUub3JnL2dpdC9kb3RnbnUtcG5ldC9wbmV0bGliLmdpdCIpCisgICAgICAgICAg ICAgICAgICAgICAgKGNvbW1pdCBjb21taXQpKSkKKyAgICAgICAgICAgICAgICAoZmlsZS1uYW1l IChnaXQtZmlsZS1uYW1lIG5hbWUgdmVyc2lvbikpCisgICAgICAgICAgICAgICAgKHNoYTI1Ngor ICAgICAgICAgICAgICAgICAoYmFzZTMyCisgICAgICAgICAgICAgICAgICAiMDRkaWtraTNscjNt MWNhY2lybGQ5MHJwaTk1NjU2YjJ5Mm1jNXJreWNiN3MweWZkejFuayIpKQorICAgICAgICAgICAg ICAgIChtb2R1bGVzICcoKGd1aXggYnVpbGQgdXRpbHMpKSkKKyAgICAgICAgICAgICAgICAoc25p cHBldAorICAgICAgICAgICAgICAgICAjfihiZWdpbgorICAgICAgICAgICAgICAgICAgICAgKGZv ci1lYWNoIGRlbGV0ZS1maWxlIChmaWx0ZXIgZmlsZS1leGlzdHM/CisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnKCJjb25maWd1cmUiCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb25maWcuZ3Vl c3MiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICJjb25maWcuc3ViIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAiaW5zdGFsbC1zaCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgImx0bWFpbi5zaCIpKSkKKyAgICAgICAgICAgICAgICAgICAg IChmb3ItZWFjaCBkZWxldGUtZmlsZSAoZmluZC1maWxlcyAiLiIgIk1ha2VmaWxlKFxcLmluKT8k IikpCisgICAgICAgICAgICAgICAgICAgICAoc3Vic3RpdHV0ZSogKGZpbmQtZmlsZXMgInRlc3Rz IiAiXk1ha2VmaWxlXFwuYW0kIikKKyAgICAgICAgICAgICAgICAgICAgICAgKCgiVEVTVFNfRU5W SVJPTk1FTlQuKiIpCisgICAgICAgICAgICAgICAgICAgICAgICAoc3RyaW5nLWFwcGVuZAorICAg ICAgICAgICAgICAgICAgICAgICAgICJMT0dfQ09NUElMRVIgPSAkKFNIRUxMKVxuIgorICAgICAg ICAgICAgICAgICAgICAgICAgICJBTV9MT0dfRkxBR1MgPSAkKHRvcF9idWlsZGRpcikvdG9vbHMv cnVuX3Rlc3Quc2giCisgICAgICAgICAgICAgICAgICAgICAgICAgIiAkKHRvcF9idWlsZGRpciki KSkpCisgICAgICAgICAgICAgICAgICAgICAoc3Vic3RpdHV0ZSogInRvb2xzL3J1bl90ZXN0LnNo LmluIgorICAgICAgICAgICAgICAgICAgICAgICAoKCJlbl9VUyIpICJlbl9VUy51dGY4IikpCisg ICAgICAgICAgICAgICAgICAgICAoc3Vic3RpdHV0ZSogInRvb2xzL3dyYXBwZXIuc2guaW4iCisg ICAgICAgICAgICAgICAgICAgICAgICgoImV4ZWMgLkxOX1MgY2xyd3JhcCAuLjEuIiBhbGwpCisg ICAgICAgICAgICAgICAgICAgICAgICAoc3RyaW5nLWFwcGVuZAorICAgICAgICAgICAgICAgICAg ICAgICAgICJlY2hvICcjIUBTSEVMTEAnID4+ICQxXG4iCisgICAgICAgICAgICAgICAgICAgICAg ICAgImVjaG8gZXhlYyAkQ0xSV1JBUCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAiICQoZGly bmFtZSAkKGRpcm5hbWUgJDEpKSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAiL2xpYi9jc2Nj L2xpYi8kKGJhc2VuYW1lICQxKS5leGUgPj4gJDFcbiIKKyAgICAgICAgICAgICAgICAgICAgICAg ICAiY2htb2QgK3ggJDEiKSkpKSkpKQorICAgICAgKGJ1aWxkLXN5c3RlbSBnbnUtYnVpbGQtc3lz dGVtKQorICAgICAgKGFyZ3VtZW50cworICAgICAgIChsaXN0ICM6bWFrZS1mbGFncyAjfihsaXN0 ICJDRkxBR1MrPS1Xbm8tcG9pbnRlci10by1pbnQtY2FzdCIpKSkKKyAgICAgIChuYXRpdmUtaW5w dXRzCisgICAgICAgKGxpc3QgYXV0b2NvbmYgYXV0b21ha2UgbGlidG9vbCB0cmVlY2MpKQorICAg ICAgKGlucHV0cworICAgICAgIChsaXN0IHBuZXQtZ2l0KSkKKyAgICAgIChob21lLXBhZ2UgImh0 dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9kb3RnbnUvaHRtbDIuMC9wbmV0Lmh0bWwiKQorICAg ICAgKHN5bm9wc2lzICJMaWJyYXJpZXMgZm9yIHRoZSBDIyBwcm9ncmFtbWluZyBsYW5ndWFnZSIp CisgICAgICAoZGVzY3JpcHRpb24KKyAgICAgICAiRG90R05VIFBvcnRhYmxlLk5FVCBMaWJyYXJ5 IGNvbnRhaW5zIGFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBDIyBsaWJyYXJ5LAorZm9yIHVzZSB3 aXRoIC5ORVQtY2FwYWJsZSBydW50aW1lIGVuZ2luZXMgYW5kIGFwcGxpY2F0aW9ucy4iKQorICAg ICAgKGxpY2Vuc2UgbGljZW5zZTpncGwyKykpKSkKLS0gCjIuNDUuMgoK --b1=_an9yUQc81YewVJ071Mjh6ZcI5zllr0hgLHfHss8ka8A Content-Type: text/x-patch; name=0004-gnu-Add-mono-1.2.6.patch Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=0004-gnu-Add-mono-1.2.6.patch RnJvbSAzYWIzY2M0YzYyNjE5YmY0MGViODZlMDMxODExNTQ2ZWMwNzQ2Mjg4IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpNZXNzYWdlLUlEOiA8M2FiM2NjNGM2MjYxOWJmNDBlYjg2ZTAzMTgxMTU0 NmVjMDc0NjI4OC4xNzMyNzA3Mjg4LmdpdC51bm11c2hAaGFzaGJhbmcuc2g+CkluLVJlcGx5LVRv OiA8M2Y4YWY2NWY3Mjg3MWQ2MWZhODVlNjkzOWY0NmNiOGRhYzE4NWM3MC4xNzMyNzA3Mjg4Lmdp dC51bm11c2hAaGFzaGJhbmcuc2g+ClJlZmVyZW5jZXM6IDwzZjhhZjY1ZjcyODcxZDYxZmE4NWU2 OTM5ZjQ2Y2I4ZGFjMTg1YzcwLjE3MzI3MDcyODguZ2l0LnVubXVzaEBoYXNoYmFuZy5zaD4KRnJv bTogdW5tdXNoIDx1bm11c2hAaGFzaGJhbmcuc2g+CkRhdGU6IFR1ZSwgMjYgTm92IDIwMjQgMTI6 NTU6NTcKU3ViamVjdDogW1BBVENIIDA0LzIxXSBnbnU6IEFkZCBtb25vLTEuMi42LgoKKiBnbnUv cGFja2FnZXMvZG90bmV0LnNjbSAobW9uby0xLjIuNik6IE5ldyB2YXJpYWJsZS4KKiBnbnUvcGFj a2FnZXMvcGF0Y2hlcy9tb25vLTEuMi42LWJvb3RzdHJhcC5wYXRjaDogTmV3IHBhdGNoLgoqIGdu dS9sb2NhbC5tayAoZGlzdF9wYXRjaF9EQVRBKTogcmVnaXN0ZXIgaXQuCgpDaGFuZ2UtSWQ6IEk3 Mzc2NWQ5MjFjMjhjNDczMjcxYTIwMzhkZmFhNTNjYzdmZGFkM2M1Ci0tLQogZ251L2xvY2FsLm1r ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAxICsKIGdudS9wYWNrYWdlcy9k b3RuZXQuc2NtICAgICAgICAgICAgICAgICAgICAgICB8IDE0NSArKysrKwogLi4uL3BhdGNoZXMv bW9uby0xLjIuNi1ib290c3RyYXAucGF0Y2ggICAgICAgIHwgNTg1ICsrKysrKysrKysrKysrKysr KwogMyBmaWxlcyBjaGFuZ2VkLCA3MzEgaW5zZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0 IGdudS9wYWNrYWdlcy9wYXRjaGVzL21vbm8tMS4yLjYtYm9vdHN0cmFwLnBhdGNoCgpkaWZmIC0t Z2l0IGEvZ251L2xvY2FsLm1rIGIvZ251L2xvY2FsLm1rCmluZGV4IGQzNmEwMDMwMDcuLmZhZGE0 OTcxZmIgMTAwNjQ0Ci0tLSBhL2dudS9sb2NhbC5taworKysgYi9nbnUvbG9jYWwubWsKQEAgLTE3 NjAsNiArMTc2MCw3IEBAIGRpc3RfcGF0Y2hfREFUQSA9CQkJCQkJXAogICAlRCUvcGFja2FnZXMv cGF0Y2hlcy9tcGczMjEtZ2NjLTEwLnBhdGNoCQkJXAogICAlRCUvcGFja2FnZXMvcGF0Y2hlcy9t b2R1bGUtaW5pdC10b29scy1tb2R1bGVkaXIucGF0Y2gJXAogICAlRCUvcGFja2FnZXMvcGF0Y2hl cy9tb25lcm8tdXNlLXN5c3RlbS1taW5pdXBucGMucGF0Y2gJCQlcCisgICVEJS9wYWNrYWdlcy9w YXRjaGVzL21vbm8tMS4yLjYtYm9vdHN0cmFwLnBhdGNoCQlcCiAgICVEJS9wYWNrYWdlcy9wYXRj aGVzL21vc2FpY2F0Y2hlci11bmJ1bmRsZS1odHNsaWIucGF0Y2gJXAogICAlRCUvcGFja2FnZXMv cGF0Y2hlcy9tcnJlc2N1ZS1zdXBwb3J0LWxvdmUtMTEucGF0Y2gJCVwKICAgJUQlL3BhY2thZ2Vz L3BhdGNoZXMvbXRvb2xzLW1mb3JtYXQtdW5pbml0aWFsaXplZC5wYXRjaAlcCmRpZmYgLS1naXQg YS9nbnUvcGFja2FnZXMvZG90bmV0LnNjbSBiL2dudS9wYWNrYWdlcy9kb3RuZXQuc2NtCmluZGV4 IDkwY2NmZDJkNTQuLjU2OGU1MzczOGYgMTAwNjQ0Ci0tLSBhL2dudS9wYWNrYWdlcy9kb3RuZXQu c2NtCisrKyBiL2dudS9wYWNrYWdlcy9kb3RuZXQuc2NtCkBAIC0yMTcsMyArMjE3LDE0OCBAQCAo ZGVmaW5lLXB1YmxpYyBwbmV0bGliLWdpdAogICAgICAgICJEb3RHTlUgUG9ydGFibGUuTkVUIExp YnJhcnkgY29udGFpbnMgYW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIEMjIGxpYnJhcnksCiBmb3Ig dXNlIHdpdGggLk5FVC1jYXBhYmxlIHJ1bnRpbWUgZW5naW5lcyBhbmQgYXBwbGljYXRpb25zLiIp CiAgICAgICAobGljZW5zZSBsaWNlbnNlOmdwbDIrKSkpKQorCisoZGVmaW5lIHByZXBhcmUtbW9u by1zb3VyY2UtMAorICAjfigoZmFsc2UtaWYtZXhjZXB0aW9uCisgICAgICAoZGVsZXRlLWZpbGUg Ii4vY29uZmlndXJlIikpCisgICAgIChmYWxzZS1pZi1leGNlcHRpb24KKyAgICAgIChkZWxldGUt ZmlsZS1yZWN1cnNpdmVseSAiLi9saWJnYyIpKQorICAgICA7OyBqdXN0IHRvIGJlIHN1cmUKKyAg ICAgKGZvci1lYWNoIGRlbGV0ZS1maWxlCisgICAgICAgICAgICAgICAoZmluZC1maWxlcyAiLiIK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICJcXC4oZGxsfGV4ZXxETEx8RVhFfHNvKSQiKSkK KyAgICAgOzsgV2UgZGVsZXRlZCBkb2NzL0FnaWxpdHlQYWNrLmRsbCBlYXJsaWVyIChpZiBpdCBl eGlzdGVkKSwgYW5kIGl0J3MKKyAgICAgOzsgcmVxdWlyZWQgZm9yIGJ1aWxkaW5nIHRoZSBkb2N1 bWVudGF0aW9uLCBzbyBza2lwIGJ1aWxkaW5nIHRoZQorICAgICA7OyBkb2N1bWVudGF0aW9uLiAg QWNjb3JkaW5nIHRvIGRvY3MvUkVBRE1FLCAidGhlIHNvdXJjZXMgdG8gdGhpcyBETEwKKyAgICAg OzsgbGl2ZSBpbiBHTk9NRSBDVlMgbW9kdWxlIGJlYWdsZS9GaWx0ZXJzL0FnaWxpdHlQYWNrIi4K KyAgICAgKHN1YnN0aXR1dGUqICIuL01ha2VmaWxlLmFtIgorICAgICAgICgoIl4ofERJU1RffE1P T05MSUdIVF98TU9OT1RPVUNIXylTVUJESVJTID0uKiIgYWxsKQorICAgICAgICAoc3RyaW5nLXJl cGxhY2Utc3Vic3RyaW5nCisgICAgICAgICAoc3RyaW5nLXJlcGxhY2Utc3Vic3RyaW5nCisgICAg ICAgICAgKHN0cmluZy1yZXBsYWNlLXN1YnN0cmluZyBhbGwgIiBkb2NzIiAiIikKKyAgICAgICAg ICAiICQobGliZ2NfZGlyKSIgIiIpCisgICAgICAgICAiIGxpYmdjIiAiIikpKSkpCisKKzs7IEEg bG90IG9mIHRoZSBmaXhlcyBhcmUgc2hhcmVkIGJldHdlZW4gbWFueSB2ZXJzaW9ucywgYW5kIGl0 IGRvZXNuJ3QgaHVydCB0bworOzsgYXBwbHkgdGhlbSB0byB2ZXJzaW9ucyBiZWZvcmUgb3IgYWZ0 ZXIgdGhleSBhcmUgbmVjZXNzYXJ5LCBzbyBqdXN0IGluY2x1ZGUKKzs7IHRoZW0gYWxsLgorKGRl ZmluZSBwcmVwYXJlLW1vbm8tc291cmNlCisgICN+KGJlZ2luCisgICAgICAjJEBwcmVwYXJlLW1v bm8tc291cmNlLTAKKyAgICAgIChzdWJzdGl0dXRlKiAoZmlsdGVyIGZpbGUtZXhpc3RzPworICAg ICAgICAgICAgICAgICAgICAgICAgICAgJygiLi9jb25maWd1cmUuaW4iCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICIuL2NvbmZpZ3VyZS5hYyIpKQorICAgICAgICAoKCJpbnQgZiA9IGlz aW5mIFxcKDFcXCk7IikKKyAgICAgICAgICJpbnQgZiA9IGlzaW5mICgxLjApOyIpKQorICAgICAg OzsgbWFrZWRldiBpcyBpbiA8c3lzL3N5c21hY3Jvcy5oPiBub3cuICBJbmNsdWRlCisgICAgICA7 OyBpdC4KKyAgICAgIChzdWJzdGl0dXRlKiAibW9uby9pby1sYXllci9wcm9jZXNzZXMuYyIKKyAg ICAgICAgKCgiI2lmZGVmIEhBVkVfU1lTX01LREVWX0giKSAiI2lmIDEiKQorICAgICAgICAoKCJz eXMvbWtkZXYuaCIpICJzeXMvc3lzbWFjcm9zLmgiKSkKKyAgICAgIChzdWJzdGl0dXRlKiAoZmls dGVyIGZpbGUtZXhpc3RzPyAnKCIuL21vbm8vbWV0YWRhdGEvYm9laG0tZ2MuYyIpKQorICAgICAg ICAoKCJHQ19zZXRfZmluYWxpemVyX25vdGlmeV9wcm9jIikKKyAgICAgICAgICJHQ19zZXRfYXdh aXRfZmluYWxpemVfcHJvYyIpCisgICAgICAgICgoIkdDX3RvZ2dsZXJlZl9yZWdpc3Rlcl9jYWxs YmFjayIpCisgICAgICAgICAiR0Nfc2V0X3RvZ2dsZXJlZl9mdW5jIikpCisgICAgICAoc3Vic3Rp dHV0ZSogKGZpbHRlciBmaWxlLWV4aXN0cz8gJygiLi9tb25vL3V0aWxzL21vbm8tY29tcGlsZXIu aCIpKQorICAgICAgICAoKCJzdGF0aWMgX190aHJlYWQgZ3BvaW50ZXIgeCBNT05PX1RMU19GQVNU IikKKyAgICAgICAgIChzdHJpbmctYXBwZW5kCisgICAgICAgICAgInN0YXRpYyBfX3RocmVhZCBn cG9pbnRlciB4IgorICAgICAgICAgICIgX19hdHRyaWJ1dGVfXygodXNlZCkpIikpKQorICAgICAg OzsgU2luY2UgdGhlIHRpbWUgdGhlIG9sZCBtb25vIHZlcnNpb25zIHdlcmUgd3JpdHRlbiBhdCwg Z2NjIGhhcyBzdGFydGVkCisgICAgICA7OyByZW1vdmluZyBtb3JlIHRoaW5ncyBpdCB0aGlua3Mg YXJlIHVudXNlZCAoZm9yIGV4YW1wbGUgYmVjYXVzZSB0aGV5CisgICAgICA7OyBhcmUgb25seSBy ZWZlcmVuY2VkIGluIGlubGluZSBhc3NlbWJseSBvZiBzb21lIHNvcnQpLgorICAgICAgKHN1YnN0 aXR1dGUqIChmaWx0ZXIgZmlsZS1leGlzdHM/ICcoIi4vbW9uby9tZXRhZGF0YS9zZ2VuLWFsbG9j LmMiKSkKKyAgICAgICAgKCgic3RhdGljIF9fdGhyZWFkIGNoYXIgXFwqXFwqdGxhYl9uZXh0X2Fk ZHIiKQorICAgICAgICAgKHN0cmluZy1hcHBlbmQKKyAgICAgICAgICAic3RhdGljIF9fdGhyZWFk IGNoYXIgKip0bGFiX25leHRfYWRkciIKKyAgICAgICAgICAiIF9fYXR0cmlidXRlX18oKHVzZWQp KSIpKSkKKyAgICAgIChzdWJzdGl0dXRlKiAoZmlsdGVyIGZpbGUtZXhpc3RzPyAnKCJtb25vL3V0 aWxzL21vbm8tY29tcGlsZXIuaCIpKQorICAgICAgICAoKCIjZGVmaW5lIE1PTk9fVExTX0ZBU1Qg IikKKyAgICAgICAgICIjZGVmaW5lIE1PTk9fVExTX0ZBU1QgX19hdHRyaWJ1dGVfXygodXNlZCkp ICIpKSkpCisKKyhkZWZpbmUtcHVibGljIG1vbm8tMS4yLjYKKyAgKHBhY2thZ2UKKyAgICAodmVy c2lvbiAiMS4yLjYiKQorICAgIChuYW1lICJtb25vIikKKyAgICAoc291cmNlIChvcmlnaW4KKyAg ICAgICAgICAgICAgKG1ldGhvZCB1cmwtZmV0Y2gpCisgICAgICAgICAgICAgICh1cmkgKHN0cmlu Zy1hcHBlbmQKKyAgICAgICAgICAgICAgICAgICAgImh0dHA6Ly9kb3dubG9hZC5tb25vLXByb2pl Y3QuY29tL3NvdXJjZXMvbW9uby8iCisgICAgICAgICAgICAgICAgICAgICJtb25vIiAiLSIgdmVy c2lvbiAiLnRhci5iejIiKSkKKyAgICAgICAgICAgICAgKHNoYTI1NgorICAgICAgICAgICAgICAg KGJhc2UzMiAiMDNzbjd3eXZyamtra2JycWFqcG1xaWZ4Zm44M3AzMHFwcml6cGIzbTZjNWNkaHds emsxNCIpKQorICAgICAgICAgICAgICAobW9kdWxlcyAnKChndWl4IGJ1aWxkIHV0aWxzKQorICAg ICAgICAgICAgICAgICAgICAgICAgIChpY2UtOSBzdHJpbmctZnVuKSkpCisgICAgICAgICAgICAg IChzbmlwcGV0ICN+KGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAjJHByZXBhcmUt bW9uby1zb3VyY2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIChkZWxldGUtZmlsZQorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICIuL21jcy9jbGFzcy9TeXN0ZW0vU3lzdGVtLlRleHQu UmVndWxhckV4cHJlc3Npb25zL0Jhc2VNYWNoaW5lLmNzIikKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgIDs7IENhbid0IHBhdGNoIGEgZmlsZSB3aXRoIGRpZmZlcmVudCBsaW5lIGVuZGluZ3Ms CisgICAgICAgICAgICAgICAgICAgICAgICAgICA7OyBzbyB0aGUgcGF0Y2ggY3JlYXRlcyBhIG5l dyBvbmUsIGFuZCB3ZSBvdmVyd3JpdGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIDs7IHRo ZSBvbGQgb25lIGhlcmUuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAocmVuYW1lLWZpbGUK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLi9tY3MvY2xhc3MvU3lzdGVtL1N5c3RlbS5U ZXh0LlJlZ3VsYXJFeHByZXNzaW9ucy9CYXNlTWFjaGluZS5jcy0yIgorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICIuL21jcy9jbGFzcy9TeXN0ZW0vU3lzdGVtLlRleHQuUmVndWxhckV4cHJl c3Npb25zL0Jhc2VNYWNoaW5lLmNzIikpKQorICAgICAgICAgICAgICAocGF0Y2hlcworICAgICAg ICAgICAgICAgKHNlYXJjaC1wYXRjaGVzICJtb25vLTEuMi42LWJvb3RzdHJhcC5wYXRjaCIpKSkp CisgICAgKGJ1aWxkLXN5c3RlbSBnbnUtYnVpbGQtc3lzdGVtKQorICAgIChuYXRpdmUtaW5wdXRz CisgICAgIChsaXN0IGF1dG9jb25mCisgICAgICAgICAgIGF1dG9tYWtlCisgICAgICAgICAgIGJp c29uCisgICAgICAgICAgIGxpYnRvb2wKKyAgICAgICAgICAgcG5ldC1naXQKKyAgICAgICAgICAg cG5ldGxpYi1naXQKKyAgICAgICAgICAgcGtnLWNvbmZpZykpCisgICAgKGlucHV0cworICAgICAo bGlzdCBnbGliCisgICAgICAgICAgIGxpYmdjCisgICAgICAgICAgIGxpYngxMQorICAgICAgICAg ICB6bGliKSkKKyAgICAoYXJndW1lbnRzCisgICAgIChsaXN0CisgICAgICAjOmNvbmZpZ3VyZS1m bGFncyAjfihsaXN0ICItLXdpdGgtZ2M9Ym9laG0iKQorICAgICAgIzptYWtlLWZsYWdzICN+KGxp c3QgKHN0cmluZy1hcHBlbmQgIkVYVEVSTkFMX01DUz0iCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAjKyh0aGlzLXBhY2thZ2UtbmF0aXZlLWlucHV0ICJwbmV0LWdp dCIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiL2Jpbi9jc2Nj IikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIChzdHJpbmctYXBwZW5kICJFWFRFUk5BTF9S VU5USU1FPSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMrKHRo aXMtcGFja2FnZS1uYXRpdmUtaW5wdXQgInBuZXQtZ2l0IikKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICIvYmluL2lscnVuIikKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICJDRkxBR1MrPS1EQVJHX01BWD01MDAiCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAiQ0M9Z2NjIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIlY9MSIpCisgICAgICA7OyBi dWlsZCBmYWlscyBub25kZXRlcm1pbmlzdGljYWxseSB3aXRob3V0IHRoaXMKKyAgICAgICM6cGFy YWxsZWwtYnVpbGQ/ICNmCisgICAgICAjOnBoYXNlcworICAgICAgI34obW9kaWZ5LXBoYXNlcyAl c3RhbmRhcmQtcGhhc2VzCisgICAgICAgICAgKGFkZC1hZnRlciAndW5wYWNrICdzZXQtZW52Cisg ICAgICAgICAgICAobGFtYmRhIF8gOzsqICgjOmtleSBpbnB1dHMgIzphbGxvdy1vdGhlci1rZXlz KQorICAgICAgICAgICAgICA7OyBhbGwgdGVzdHMgdW5kZXIgbWNzL2NsYXNzIGZhaWwgdHJ5aW5n IHRvIGFjY2VzcyAkSE9NRQorICAgICAgICAgICAgICAoc2V0ZW52ICJIT01FIiAiL3RtcCIpCisg ICAgICAgICAgICAgIDs7IFpJUCBmaWxlcyBoYXZlICJET1MgdGltZSIgd2hpY2ggc3RhcnRzIGlu IEphbiAxOTgwLgorICAgICAgICAgICAgICAoc2V0ZW52ICJTT1VSQ0VfREFURV9FUE9DSCIgIjMx NTUzMjgwMCIpKSkpCisgICAgICA7OyBTeXN0ZW0uT2JqZWN0IGlzbid0IG1hcmtlZCBhcyBzZXJp YWxpemFibGUgYmVjYXVzZSBpdCBjYXVzZXMgaXNzdWVzCisgICAgICA7OyB3aXRoIGNvbXBpbGlu ZyB3aXRoIHBuZXQgKGNpcmN1bGFyIGNsYXNzIHJlZmVyZW5jZSBiZXR3ZWVuIE9iamVjdCBhbmQK KyAgICAgIDs7IFNlcmlhbGl6YWJsZUF0dHJpYnV0ZSksIGFuZCB0aGlzIGNhdXNlcyB0ZXN0cyB0 byBmYWlsCisgICAgICAjOnRlc3RzPyAjZikpCisgICAgKG5hdGl2ZS1zZWFyY2gtcGF0aHMKKyAg ICAgKGxpc3QgKHNlYXJjaC1wYXRoLXNwZWNpZmljYXRpb24KKyAgICAgICAgICAgICh2YXJpYWJs ZSAiTU9OT19QQVRIIikKKyAgICAgICAgICAgIChmaWxlcyAobGlzdCAibGliL21vbm8iKSkpKSkK KyAgICAoc3lub3BzaXMgIkNvbXBpbGVyIGFuZCBsaWJyYXJpZXMgZm9yIHRoZSBDIyBwcm9ncmFt bWluZyBsYW5ndWFnZSIpCisgICAgKGRlc2NyaXB0aW9uICJNb25vIGlzIGEgY29tcGlsZXIsIHZt LCBkZWJ1Z2dlciBhbmQgc2V0IG9mIGxpYnJhcmllcyBmb3IKK0MjLCBhIEMtc3R5bGUgcHJvZ3Jh bW1pbmcgbGFuZ3VhZ2UgZnJvbSBNaWNyb3NvZnQgdGhhdCBpcyB2ZXJ5IHNpbWlsYXIgdG8KK0ph dmEuIikKKyAgICAoaG9tZS1wYWdlICJodHRwczovL3d3dy5tb25vLXByb2plY3QuY29tLyIpCisg ICAgOzsgU2VlIC4vTElDRU5TRQorICAgIChsaWNlbnNlIChsaXN0CisgICAgICAgICAgICAgIDs7 IG1vc3Qgb2YgbWNzL3Rvb2xzLCBtb25vL21hbiwgbW9zdCBvZiBtY3MvY2xhc3MsIHRlc3RzIGJ5 CisgICAgICAgICAgICAgIDs7IGRlZmF1bHQsIG1vbm8vZWdsaWIKKyAgICAgICAgICAgICAgbGlj ZW5zZTp4MTEKKyAgICAgICAgICAgICAgOzsgbWNzL21jcywgbWNzL2dtY3MsIHNvbWUgb2YgbWNz L3Rvb2xzCisgICAgICAgICAgICAgIGxpY2Vuc2U6Z3BsMSsgOzsgbm90ZTogLi9tY3MvTElDRU5T RS5HUEwgc3BlY2lmaWVzIG5vIHZlcnNpb24KKyAgICAgICAgICAgICAgOzsgbW9uby9tb25vICh0 aGUgbW9ubyBWTSwgSSB0aGluayB0aGV5IG1lYW50IG1vbm8vbWluaSkKKyAgICAgICAgICAgICAg bGljZW5zZTpsZ3BsMi4wKyA7OyBub3RlOiAuL21jcy9MSUNFTlNFLkxHUEwgc3BlY2lmaWVzIG5v IHZlcnNpb24KKyAgICAgICAgICAgICAgOzsgbWNzL2pheQorICAgICAgICAgICAgICBsaWNlbnNl OmJzZC00KSkpKQpkaWZmIC0tZ2l0IGEvZ251L3BhY2thZ2VzL3BhdGNoZXMvbW9uby0xLjIuNi1i b290c3RyYXAucGF0Y2ggYi9nbnUvcGFja2FnZXMvcGF0Y2hlcy9tb25vLTEuMi42LWJvb3RzdHJh cC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi4wZjZlZmQ0YTAz Ci0tLSAvZGV2L251bGwKKysrIGIvZ251L3BhY2thZ2VzL3BhdGNoZXMvbW9uby0xLjIuNi1ib290 c3RyYXAucGF0Y2gKQEAgLTAsMCArMSw1ODUgQEAKK2RpZmYgLS1naXQgYS9tY3MvY2xhc3MvU3lz dGVtL1N5c3RlbS5EaWFnbm9zdGljcy9JQ29sbGVjdERhdGEuY3MgYi9tY3MvY2xhc3MvU3lzdGVt L1N5c3RlbS5EaWFnbm9zdGljcy9JQ29sbGVjdERhdGEuY3MKK2luZGV4IGM1MmY5ODcxNTg5Li5j NjZjMTkzNmQzZCAxMDA2NDQKKy0tLSBhL21jcy9jbGFzcy9TeXN0ZW0vU3lzdGVtLkRpYWdub3N0 aWNzL0lDb2xsZWN0RGF0YS5jcworKysrIGIvbWNzL2NsYXNzL1N5c3RlbS9TeXN0ZW0uRGlhZ25v c3RpY3MvSUNvbGxlY3REYXRhLmNzCitAQCAtNDEsNyArNDEsNyBAQCBuYW1lc3BhY2UgU3lzdGVt LkRpYWdub3N0aWNzCisgI2VuZGlmCisgCXB1YmxpYyBpbnRlcmZhY2UgSUNvbGxlY3REYXRhIHsK KyAJCXZvaWQgQ2xvc2VEYXRhICgpOworLQkJW3JldHVybjogTWFyc2hhbEFzKFVubWFuYWdlZFR5 cGUuSTQpXQorKwkJLy9bcmV0dXJuOiBNYXJzaGFsQXMoVW5tYW5hZ2VkVHlwZS5JNCldCisgCQl2 b2lkIENvbGxlY3REYXRhICgKKyAJCQlbSW5dIFtNYXJzaGFsQXMoVW5tYW5hZ2VkVHlwZS5JNCld IGludCBpZCwgCisgCQkJW0luXSBbTWFyc2hhbEFzKFVubWFuYWdlZFR5cGUuU3lzSW50KV0gSW50 UHRyIHZhbHVlTmFtZSwgCitkaWZmIC0tZ2l0IGEvbWNzL2NsYXNzL1N5c3RlbS9TeXN0ZW0uRGlh Z25vc3RpY3MvTG9jYWxGaWxlRXZlbnRMb2cuY3MgYi9tY3MvY2xhc3MvU3lzdGVtL1N5c3RlbS5E aWFnbm9zdGljcy9Mb2NhbEZpbGVFdmVudExvZy5jcworaW5kZXggMjgwZTZhOTcyMjcuLmM0MTgx NmRjYTI0IDEwMDY0NAorLS0tIGEvbWNzL2NsYXNzL1N5c3RlbS9TeXN0ZW0uRGlhZ25vc3RpY3Mv TG9jYWxGaWxlRXZlbnRMb2cuY3MKKysrKyBiL21jcy9jbGFzcy9TeXN0ZW0vU3lzdGVtLkRpYWdu b3N0aWNzL0xvY2FsRmlsZUV2ZW50TG9nLmNzCitAQCAtMTQwLDYgKzE0MCwzMCBAQCBuYW1lc3Bh Y2UgU3lzdGVtLkRpYWdub3N0aWNzCisgCQkJZmlsZV93YXRjaGVyLkVuYWJsZVJhaXNpbmdFdmVu dHMgPSBmYWxzZTsKKyAJCX0KKyAKKysgICAgICAgIHZvaWQgRmlsZUNyZWF0aW9uV2F0Y2hlcihv YmplY3QgbywgRmlsZVN5c3RlbUV2ZW50QXJncyBlKQorKyAgICAgICAgeworKyAgICAgICAgICAg IGxvY2sgKHRoaXMpIHsKKysgICAgICAgICAgICAgICAgaWYgKF9ub3RpZnlpbmcpCisrICAgICAg ICAgICAgICAgICAgICByZXR1cm47CisrICAgICAgICAgICAgICAgIF9ub3RpZnlpbmcgPSB0cnVl OworKyAgICAgICAgICAgIH0KKysKKysgICAgICAgICAgICAvLyBQcm9jZXNzIGV2ZXJ5IG5ldyBl bnRyeSBpbiBvbmUgbm90aWZpY2F0aW9uIGV2ZW50LgorKyAgICAgICAgICAgIHRyeSB7CisrICAg ICAgICAgICAgICAgIHdoaWxlIChHZXRMYXRlc3RJbmRleCAoKSA+IGxhc3Rfbm90aWZpY2F0aW9u X2luZGV4KSB7CisrICAgICAgICAgICAgICAgICAgICB0cnkgeworKyAgICAgICAgICAgICAgICAg ICAgICAgIENvcmVFdmVudExvZy5PbkVudHJ5V3JpdHRlbiAoR2V0RW50cnkgKGxhc3Rfbm90aWZp Y2F0aW9uX2luZGV4KyspKTsKKysgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlv biBleCkgeworKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBmaW5kIHNvbWUgcHJv cGVyIHdheSB0byBvdXRwdXQgdGhpcyBlcnJvcgorKyAgICAgICAgICAgICAgICAgICAgICAgIERl YnVnLldyaXRlTGluZSAoZXgpOworKyAgICAgICAgICAgICAgICAgICAgfQorKyAgICAgICAgICAg ICAgICB9CisrICAgICAgICAgICAgICAgIH0gZmluYWxseSB7CisrICAgICAgICAgICAgICAgIGxv Y2sgKHRoaXMpCisrICAgICAgICAgICAgICAgICAgICBfbm90aWZ5aW5nID0gZmFsc2U7CisrICAg ICAgICAgICAgfQorKyAgICAgICAgfQorKworIAkJcHVibGljIG92ZXJyaWRlIHZvaWQgRW5hYmxl Tm90aWZpY2F0aW9uICgpCisgCQl7CisgCQkJaWYgKGZpbGVfd2F0Y2hlciA9PSBudWxsKSB7CitA QCAtMTQ5LDI4ICsxNzMsNyBAQCBuYW1lc3BhY2UgU3lzdGVtLkRpYWdub3N0aWNzCisgCisgCQkJ CWZpbGVfd2F0Y2hlciA9IG5ldyBGaWxlU3lzdGVtV2F0Y2hlciAoKTsKKyAJCQkJZmlsZV93YXRj aGVyLlBhdGggPSBsb2dEaXI7CistCQkJCWZpbGVfd2F0Y2hlci5DcmVhdGVkICs9IGRlbGVnYXRl IChvYmplY3QgbywgRmlsZVN5c3RlbUV2ZW50QXJncyBlKSB7CistCQkJCQlsb2NrICh0aGlzKSB7 CistCQkJCQkJaWYgKF9ub3RpZnlpbmcpCistCQkJCQkJCXJldHVybjsKKy0JCQkJCQlfbm90aWZ5 aW5nID0gdHJ1ZTsKKy0JCQkJCX0KKy0KKy0JCQkJCS8vIFByb2Nlc3MgZXZlcnkgbmV3IGVudHJ5 IGluIG9uZSBub3RpZmljYXRpb24gZXZlbnQuCistCQkJCQl0cnkgeworLQkJCQkJCXdoaWxlIChH ZXRMYXRlc3RJbmRleCAoKSA+IGxhc3Rfbm90aWZpY2F0aW9uX2luZGV4KSB7CistCQkJCQkJCXRy eSB7CistCQkJCQkJCQlDb3JlRXZlbnRMb2cuT25FbnRyeVdyaXR0ZW4gKEdldEVudHJ5IChsYXN0 X25vdGlmaWNhdGlvbl9pbmRleCsrKSk7CistCQkJCQkJCX0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkg eworLQkJCQkJCQkJLy8gRklYTUU6IGZpbmQgc29tZSBwcm9wZXIgd2F5IHRvIG91dHB1dCB0aGlz IGVycm9yCistCQkJCQkJCQlEZWJ1Zy5Xcml0ZUxpbmUgKGV4KTsKKy0JCQkJCQkJfQorLQkJCQkJ CX0KKy0JCQkJCX0gZmluYWxseSB7CistCQkJCQkJbG9jayAodGhpcykKKy0JCQkJCQkJX25vdGlm eWluZyA9IGZhbHNlOworLQkJCQkJfQorLQkJCQl9OworKwkJCQlmaWxlX3dhdGNoZXIuQ3JlYXRl ZCArPSBuZXcgRmlsZVN5c3RlbUV2ZW50SGFuZGxlcihGaWxlQ3JlYXRpb25XYXRjaGVyKTsKKyAJ CQl9CisgCQkJbGFzdF9ub3RpZmljYXRpb25faW5kZXggPSBHZXRMYXRlc3RJbmRleCAoKTsKKyAJ CQlmaWxlX3dhdGNoZXIuRW5hYmxlUmFpc2luZ0V2ZW50cyA9IHRydWU7CitkaWZmIC0tZ2l0IGEv bWNzL2NsYXNzL1N5c3RlbS9TeXN0ZW0uSU8vSW5vdGlmeVdhdGNoZXIuY3MgYi9tY3MvY2xhc3Mv U3lzdGVtL1N5c3RlbS5JTy9Jbm90aWZ5V2F0Y2hlci5jcworaW5kZXggZDhlN2FjY2UzYTcuLjdi MDkwN2VlYmMxIDEwMDY0NAorLS0tIGEvbWNzL2NsYXNzL1N5c3RlbS9TeXN0ZW0uSU8vSW5vdGlm eVdhdGNoZXIuY3MKKysrKyBiL21jcy9jbGFzcy9TeXN0ZW0vU3lzdGVtLklPL0lub3RpZnlXYXRj aGVyLmNzCitAQCAtNDIzLDE5ICs0MjMsMzYgQEAgbmFtZXNwYWNlIFN5c3RlbS5JTyB7CisgCQkJ cmV0dXJuIDE2ICsgbGVuOworIAkJfQorIAorKyAgICAgICAgY2xhc3MgVGhpbmdFbnVtZXJhdG9y IDogSUVudW1lcmF0b3IsIElFbnVtZXJhYmxlCisrICAgICAgICB7CisrICAgICAgICAgICAgb2Jq ZWN0IHRoaW5nOworKyAgICAgICAgICAgIGludCBqOworKyAgICAgICAgICAgIHB1YmxpYyBUaGlu Z0VudW1lcmF0b3Iob2JqZWN0IHRoaW5nKQorKyAgICAgICAgICAgIHsgdGhpcy50aGluZyA9IHRo aW5nOyBqID0gLTE7IH0KKysKKysgICAgICAgICAgICBwdWJsaWMgSUVudW1lcmF0b3IgR2V0RW51 bWVyYXRvcigpIHsgcmV0dXJuIHRoaXM7IH0KKysgICAgICAgICAgICBwdWJsaWMgYm9vbCBNb3Zl TmV4dCgpCisrICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICBpZih0aGluZyA9PSBudWxs KSB7IHJldHVybiBmYWxzZTsgfQorKyAgICAgICAgICAgICAgICBpZih0aGluZyBpcyBBcnJheUxp c3QpCisrICAgICAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgICAgIEFycmF5TGlzdCBs aXN0ID0gKEFycmF5TGlzdCkgdGhpbmc7CisrICAgICAgICAgICAgICAgICAgICBpZihqKzEgPj0g bGlzdC5Db3VudCkgeyByZXR1cm4gZmFsc2U7IH0KKysgICAgICAgICAgICAgICAgICAgIGorKzsK KysgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworKyAgICAgICAgICAgICAgICB9Cisr ICAgICAgICAgICAgICAgIGlmKGogPT0gLTEpIHsgaiA9IDA7IHJldHVybiB0cnVlOyB9CisrICAg ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKysgICAgICAgICAgICB9CisrICAgICAgICAgICAg cHVibGljIHZvaWQgUmVzZXQoKSB7IGogPSAtMTsgfQorKyAgICAgICAgICAgIHB1YmxpYyBvYmpl Y3QgQ3VycmVudAorKyAgICAgICAgICAgIHsgZ2V0IHsgaWYodGhpbmcgaXMgQXJyYXlMaXN0KSBy ZXR1cm4gKChBcnJheUxpc3QpdGhpbmcpW2pdOworKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu IHRoaW5nOyB9fQorKyAgICAgICAgfQorKworIAkJc3RhdGljIElFbnVtZXJhYmxlIEdldEVudW1l cmF0b3IgKG9iamVjdCBzb3VyY2UpCisgCQl7CistCQkJaWYgKHNvdXJjZSA9PSBudWxsKQorLQkJ CQl5aWVsZCBicmVhazsKKy0KKy0JCQlpZiAoc291cmNlIGlzIElub3RpZnlEYXRhKQorLQkJCQl5 aWVsZCByZXR1cm4gc291cmNlOworLQorLQkJCWlmIChzb3VyY2UgaXMgQXJyYXlMaXN0KSB7Cist CQkJCUFycmF5TGlzdCBsaXN0ID0gKEFycmF5TGlzdCkgc291cmNlOworLQkJCQlmb3IgKGludCBp ID0gMDsgaSA8IGxpc3QuQ291bnQ7IGkrKykKKy0JCQkJCXlpZWxkIHJldHVybiBsaXN0IFtpXTsK Ky0JCQl9CisrCQkJcmV0dXJuIG5ldyBUaGluZ0VudW1lcmF0b3Ioc291cmNlKTsKKyAJCX0KKyAK KyAJCS8qIEludGVyZXN0aW5nIGV2ZW50czoKK2RpZmYgLS1naXQgYS9tY3MvY2xhc3MvU3lzdGVt L1N5c3RlbS5OZXQvU2VydmljZVBvaW50LmNzIGIvbWNzL2NsYXNzL1N5c3RlbS9TeXN0ZW0uTmV0 L1NlcnZpY2VQb2ludC5jcworaW5kZXggYTg4NGQ5MGY1MDcuLmUxYzczYjA5OGMyIDEwMDY0NAor LS0tIGEvbWNzL2NsYXNzL1N5c3RlbS9TeXN0ZW0uTmV0L1NlcnZpY2VQb2ludC5jcworKysrIGIv bWNzL2NsYXNzL1N5c3RlbS9TeXN0ZW0uTmV0L1NlcnZpY2VQb2ludC5jcworQEAgLTEzNyw3ICsx MzcsNyBAQCBuYW1lc3BhY2UgU3lzdGVtLk5ldAorIAkJCWdldCB7CisgCQkJCXJldHVybiBpZGxl U2luY2U7CisgCQkJfQorLQkJCWludGVybmFsIHNldCB7CisrCQkJc2V0IHsKKyAJCQkJbG9jayAo bG9ja2VyKQorIAkJCQkJaWRsZVNpbmNlID0gdmFsdWU7CisgCQkJfQorZGlmZiAtLWdpdCBhL21j cy9jbGFzcy9TeXN0ZW0vU3lzdGVtLlRleHQuUmVndWxhckV4cHJlc3Npb25zL0Jhc2VNYWNoaW5l LmNzLTIgYi9tY3MvY2xhc3MvU3lzdGVtL1N5c3RlbS5UZXh0LlJlZ3VsYXJFeHByZXNzaW9ucy9C YXNlTWFjaGluZS5jcy0yCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMDAwMDAu LmE2ODVlMjY3OWI3CistLS0gL2Rldi9udWxsCisrKysgYi9tY3MvY2xhc3MvU3lzdGVtL1N5c3Rl bS5UZXh0LlJlZ3VsYXJFeHByZXNzaW9ucy9CYXNlTWFjaGluZS5jcy0yCitAQCAtMCwwICsxLDE2 OCBAQAorKy8vCisrLy8gQmFzZU1hY2hpbmUuanZtLmNzCisrLy8KKysvLyBBdXRob3I6CisrLy8g YXV0aG9yOglEYW4gTGV3aXMgKGRsZXdpc0BnbXguY28udWspCisrLy8JCShjKSAyMDAyCisrLy8g Q29weXJpZ2h0IChDKSAyMDA1IE5vdmVsbCwgSW5jIChodHRwOi8vd3d3Lm5vdmVsbC5jb20pCisr Ly8KKysKKysvLworKy8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hh cmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZworKy8vIGEgY29weSBvZiB0aGlzIHNvZnR3YXJl IGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZQorKy8vICJTb2Z0d2FyZSIp LCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcK KysvLyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwg bWVyZ2UsIHB1Ymxpc2gsCisrLy8gZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwg Y29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvCisrLy8gcGVybWl0IHBlcnNvbnMgdG8gd2hv bSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvCisrLy8gdGhl IGZvbGxvd2luZyBjb25kaXRpb25zOgorKy8vCisrLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3Rp Y2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUKKysvLyBpbmNsdWRlZCBpbiBh bGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKysvLwor Ky8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9G IEFOWSBLSU5ELAorKy8vIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElN SVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorKy8vIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBG T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECisrLy8gTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBF VkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRQorKy8vIExJQUJM RSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBB TiBBQ1RJT04KKysvLyBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJP TSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04KKysvLyBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUg VVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKysvLworKworK3VzaW5nIFN5 c3RlbTsKKyt1c2luZyBTeXN0ZW0uQ29sbGVjdGlvbnM7CisrdXNpbmcgU3lzdGVtLkNvbGxlY3Rp b25zLlNwZWNpYWxpemVkOworKworK25hbWVzcGFjZSBTeXN0ZW0uVGV4dC5SZWd1bGFyRXhwcmVz c2lvbnMKKyt7CisrCWFic3RyYWN0IGNsYXNzIEJhc2VNYWNoaW5lIDogSU1hY2hpbmUKKysJewor KwkJaW50ZXJuYWwgZGVsZWdhdGUgdm9pZCBNYXRjaEFwcGVuZEV2YWx1YXRvciAoTWF0Y2ggbWF0 Y2gsIFN0cmluZ0J1aWxkZXIgc2IpOworKworKwkJcHVibGljIHZpcnR1YWwgc3RyaW5nIFJlcGxh Y2UgKFJlZ2V4IHJlZ2V4LCBzdHJpbmcgaW5wdXQsIHN0cmluZyByZXBsYWNlbWVudCwgaW50IGNv dW50LCBpbnQgc3RhcnRhdCkKKysJCXsKKysJCQlSZXBsYWNlbWVudEV2YWx1YXRvciBldiA9IG5l dyBSZXBsYWNlbWVudEV2YWx1YXRvciAocmVnZXgsIHJlcGxhY2VtZW50KTsKKysJCQlpZiAocmVn ZXguUmlnaHRUb0xlZnQpCisrCQkJCXJldHVybiBSVExSZXBsYWNlIChyZWdleCwgaW5wdXQsIG5l dyBNYXRjaEV2YWx1YXRvciAoZXYuRXZhbHVhdGUpLCBjb3VudCwgc3RhcnRhdCk7CisrCQkJZWxz ZQorKwkJCQlyZXR1cm4gTFRSUmVwbGFjZSAocmVnZXgsIGlucHV0LCBuZXcgTWF0Y2hBcHBlbmRF dmFsdWF0b3IgKGV2LkV2YWx1YXRlQXBwZW5kKSwgY291bnQsIHN0YXJ0YXQpOworKwkJfQorKwor KwkJdmlydHVhbCBwdWJsaWMgc3RyaW5nIFtdIFNwbGl0IChSZWdleCByZWdleCwgc3RyaW5nIGlu cHV0LCBpbnQgY291bnQsIGludCBzdGFydGF0KQorKwkJeworKwkJCUFycmF5TGlzdCBzcGxpdHMg PSBuZXcgQXJyYXlMaXN0ICgpOworKwkJCWlmIChjb3VudCA9PSAwKQorKwkJCQljb3VudCA9IElu dDMyLk1heFZhbHVlOworKworKwkJCWludCBwdHIgPSBzdGFydGF0OworKwkJCU1hdGNoIG0gPSBu dWxsOworKwkJCXdoaWxlICgtLWNvdW50ID4gMCkgeworKwkJCQlpZiAobSAhPSBudWxsKQorKwkJ CQkJbSA9IG0uTmV4dE1hdGNoICgpOworKwkJCQllbHNlCisrCQkJCQltID0gcmVnZXguTWF0Y2gg KGlucHV0LCBwdHIpOworKworKwkJCQlpZiAoIW0uU3VjY2VzcykKKysJCQkJCWJyZWFrOworKwor KwkJCQlpZiAocmVnZXguUmlnaHRUb0xlZnQpCisrCQkJCQlzcGxpdHMuQWRkIChpbnB1dC5TdWJz dHJpbmcgKG0uSW5kZXggKyBtLkxlbmd0aCwgcHRyIC0gbS5JbmRleCAtIG0uTGVuZ3RoKSk7Cisr CQkJCWVsc2UKKysJCQkJCXNwbGl0cy5BZGQgKGlucHV0LlN1YnN0cmluZyAocHRyLCBtLkluZGV4 IC0gcHRyKSk7CisrCisrCQkJCWludCBnY291bnQgPSBtLkdyb3Vwcy5Db3VudDsKKysJCQkJZm9y IChpbnQgZ2luZGV4ID0gMTsgZ2luZGV4IDwgZ2NvdW50OyBnaW5kZXgrKykgeworKwkJCQkJR3Jv dXAgZ3JwID0gbS5Hcm91cHMgW2dpbmRleF07CisrCQkJCQlzcGxpdHMuQWRkIChpbnB1dC5TdWJz dHJpbmcgKGdycC5JbmRleCwgZ3JwLkxlbmd0aCkpOworKwkJCQl9CisrCisrCQkJCWlmIChyZWdl eC5SaWdodFRvTGVmdCkKKysJCQkJCXB0ciA9IG0uSW5kZXg7CisrCQkJCWVsc2UKKysJCQkJCXB0 ciA9IG0uSW5kZXggKyBtLkxlbmd0aDsKKysKKysJCQl9CisrCisrCQkJaWYgKHJlZ2V4LlJpZ2h0 VG9MZWZ0ICYmIHB0ciA+PSAwKQorKwkJCQlzcGxpdHMuQWRkIChpbnB1dC5TdWJzdHJpbmcgKDAs IHB0cikpOworKwkJCWlmICghcmVnZXguUmlnaHRUb0xlZnQgJiYgcHRyIDw9IGlucHV0Lkxlbmd0 aCkKKysJCQkJc3BsaXRzLkFkZCAoaW5wdXQuU3Vic3RyaW5nIChwdHIpKTsKKysKKysJCQlyZXR1 cm4gKHN0cmluZyBbXSkgc3BsaXRzLlRvQXJyYXkgKHR5cGVvZiAoc3RyaW5nKSk7CisrCQl9Cisr CisrCQl2aXJ0dWFsIHB1YmxpYyBNYXRjaCBTY2FuIChSZWdleCByZWdleCwgc3RyaW5nIHRleHQs IGludCBzdGFydCwgaW50IGVuZCkKKysJCXsKKysJCQl0aHJvdyBuZXcgTm90SW1wbGVtZW50ZWRF eGNlcHRpb24gKCJTY2FuIG1ldGhvZCBtdXN0IGJlIGltcGxlbWVudGVkIGluIGRlcml2ZWQgY2xh c3NlcyIpOworKwkJfQorKworKwkJdmlydHVhbCBwdWJsaWMgc3RyaW5nIFJlc3VsdCAoc3RyaW5n IHJlcGxhY2VtZW50LCBNYXRjaCBtYXRjaCkKKysJCXsKKysJCQlyZXR1cm4gUmVwbGFjZW1lbnRF dmFsdWF0b3IuRXZhbHVhdGUgKHJlcGxhY2VtZW50LCBtYXRjaCk7CisrCQl9CisrCisrCQlpbnRl cm5hbCBzdGF0aWMgc3RyaW5nIExUUlJlcGxhY2UgKFJlZ2V4IHJlZ2V4LCBzdHJpbmcgaW5wdXQs IE1hdGNoQXBwZW5kRXZhbHVhdG9yIGV2YWx1YXRvciwgaW50IGNvdW50LCBpbnQgc3RhcnRhdCkK KysJCXsKKysJCQlNYXRjaCBtID0gcmVnZXguTWF0Y2ggKGlucHV0LCBzdGFydGF0KTsKKysJCQlp ZiAoIW0uU3VjY2VzcykKKysJCQkJcmV0dXJuIGlucHV0OworKworKwkJCVN0cmluZ0J1aWxkZXIg cmVzdWx0ID0gbmV3IFN0cmluZ0J1aWxkZXIgKCk7CisrCQkJaW50IHB0ciA9IHN0YXJ0YXQ7Cisr CQkJaW50IGNvdW50ZXIgPSBjb3VudDsKKysKKysJCQlyZXN1bHQuQXBwZW5kIChpbnB1dCwgMCwg cHRyKTsKKysKKysJCQlkbyB7CisrCQkJCWlmIChjb3VudCAhPSAtMSkKKysJCQkJCWlmIChjb3Vu dGVyLS0gPD0gMCkKKysJCQkJCQlicmVhazsKKysJCQkJaWYgKG0uSW5kZXggPCBwdHIpCisrCQkJ CQl0aHJvdyBuZXcgU3lzdGVtRXhjZXB0aW9uICgiaG93Iik7CisrCQkJCXJlc3VsdC5BcHBlbmQg KGlucHV0LCBwdHIsIG0uSW5kZXggLSBwdHIpOworKwkJCQlldmFsdWF0b3IgKG0sIHJlc3VsdCk7 CisrCisrCQkJCXB0ciA9IG0uSW5kZXggKyBtLkxlbmd0aDsKKysJCQkJbSA9IG0uTmV4dE1hdGNo ICgpOworKwkJCX0gd2hpbGUgKG0uU3VjY2Vzcyk7CisrCisrCQkJcmVzdWx0LkFwcGVuZCAoaW5w dXQsIHB0ciwgaW5wdXQuTGVuZ3RoIC0gcHRyKTsKKysKKysJCQlyZXR1cm4gcmVzdWx0LlRvU3Ry aW5nICgpOworKwkJfQorKworKwkJaW50ZXJuYWwgc3RhdGljIHN0cmluZyBSVExSZXBsYWNlIChS ZWdleCByZWdleCwgc3RyaW5nIGlucHV0LCBNYXRjaEV2YWx1YXRvciBldmFsdWF0b3IsIGludCBj b3VudCwgaW50IHN0YXJ0YXQpCisrCQl7CisrCQkJTWF0Y2ggbSA9IHJlZ2V4Lk1hdGNoIChpbnB1 dCwgc3RhcnRhdCk7CisrCQkJaWYgKCFtLlN1Y2Nlc3MpCisrCQkJCXJldHVybiBpbnB1dDsKKysK KysJCQlpbnQgcHRyID0gc3RhcnRhdDsKKysJCQlpbnQgY291bnRlciA9IGNvdW50OworKwkJCVN0 cmluZ0NvbGxlY3Rpb24gcGllY2VzID0gbmV3IFN0cmluZ0NvbGxlY3Rpb24gKCk7CisrCQkJcGll Y2VzLkFkZCAoaW5wdXQuU3Vic3RyaW5nIChwdHIpKTsKKysKKysJCQlkbyB7CisrCQkJCWlmIChj b3VudCAhPSAtMSkKKysJCQkJCWlmIChjb3VudGVyLS0gPD0gMCkKKysJCQkJCQlicmVhazsKKysJ CQkJaWYgKG0uSW5kZXggKyBtLkxlbmd0aCA+IHB0cikKKysJCQkJCXRocm93IG5ldyBTeXN0ZW1F eGNlcHRpb24gKCJob3ciKTsKKysJCQkJcGllY2VzLkFkZCAoaW5wdXQuU3Vic3RyaW5nIChtLklu ZGV4ICsgbS5MZW5ndGgsIHB0ciAtIG0uSW5kZXggLSBtLkxlbmd0aCkpOworKwkJCQlwaWVjZXMu QWRkIChldmFsdWF0b3IgKG0pKTsKKysKKysJCQkJcHRyID0gbS5JbmRleDsKKysJCQkJbSA9IG0u TmV4dE1hdGNoICgpOworKwkJCX0gd2hpbGUgKG0uU3VjY2Vzcyk7CisrCisrCQkJU3RyaW5nQnVp bGRlciByZXN1bHQgPSBuZXcgU3RyaW5nQnVpbGRlciAoKTsKKysKKysJCQlyZXN1bHQuQXBwZW5k IChpbnB1dCwgMCwgcHRyKTsKKysJCQlmb3IgKGludCBpID0gcGllY2VzLkNvdW50OyBpID4gMDsg KQorKwkJCQlyZXN1bHQuQXBwZW5kIChwaWVjZXMgWy0taV0pOworKworKwkJCXBpZWNlcy5DbGVh ciAoKTsKKysKKysJCQlyZXR1cm4gcmVzdWx0LlRvU3RyaW5nICgpOworKwkJfQorKwl9CisrfQor ZGlmZiAtLWdpdCBhL21jcy9jbGFzcy9jb3JsaWIvU3lzdGVtLlJ1bnRpbWUuUmVtb3RpbmcuTWVz c2FnaW5nL01ldGhvZENhbGwuY3MgYi9tY3MvY2xhc3MvY29ybGliL1N5c3RlbS5SdW50aW1lLlJl bW90aW5nLk1lc3NhZ2luZy9NZXRob2RDYWxsLmNzCitpbmRleCA5NDA2OWQxNzI3ZS4uMDQyNTc0 MTc4ZmEgMTAwNjQ0CistLS0gYS9tY3MvY2xhc3MvY29ybGliL1N5c3RlbS5SdW50aW1lLlJlbW90 aW5nLk1lc3NhZ2luZy9NZXRob2RDYWxsLmNzCisrKysgYi9tY3MvY2xhc3MvY29ybGliL1N5c3Rl bS5SdW50aW1lLlJlbW90aW5nLk1lc3NhZ2luZy9NZXRob2RDYWxsLmNzCitAQCAtMjcyLDYgKzI3 MiwxMCBAQCBuYW1lc3BhY2UgU3lzdGVtLlJ1bnRpbWUuUmVtb3RpbmcuTWVzc2FnaW5nIHsKKyAJ CQlzZXQgeyBfdXJpID0gdmFsdWU7IH0KKyAJCX0KKyAKKysgICAgICAgIHN0cmluZyBJTWV0aG9k TWVzc2FnZS5VcmkgeworKwkJCWdldCB7IHJldHVybiBVcmk7IH0KKysJCX0KKysKKyAJCXN0cmlu ZyBJSW50ZXJuYWxNZXNzYWdlLlVyaSB7CisgCQkJZ2V0IHsgcmV0dXJuIFVyaTsgfQorIAkJCXNl dCB7IFVyaSA9IHZhbHVlOyB9CitkaWZmIC0tZ2l0IGEvbWNzL2NsYXNzL2NvcmxpYi9TeXN0ZW0u UnVudGltZS5SZW1vdGluZy5NZXNzYWdpbmcvTWV0aG9kUmVzcG9uc2UuY3MgYi9tY3MvY2xhc3Mv Y29ybGliL1N5c3RlbS5SdW50aW1lLlJlbW90aW5nLk1lc3NhZ2luZy9NZXRob2RSZXNwb25zZS5j cworaW5kZXggMWIxZWFiMDE0YjMuLjU3NWU3ZTM3ZGVlIDEwMDY0NAorLS0tIGEvbWNzL2NsYXNz L2NvcmxpYi9TeXN0ZW0uUnVudGltZS5SZW1vdGluZy5NZXNzYWdpbmcvTWV0aG9kUmVzcG9uc2Uu Y3MKKysrKyBiL21jcy9jbGFzcy9jb3JsaWIvU3lzdGVtLlJ1bnRpbWUuUmVtb3RpbmcuTWVzc2Fn aW5nL01ldGhvZFJlc3BvbnNlLmNzCitAQCAtMjcyLDYgKzI3MiwxMCBAQCBuYW1lc3BhY2UgU3lz dGVtLlJ1bnRpbWUuUmVtb3RpbmcuTWVzc2FnaW5nIHsKKyAJCQl9CisgCQl9CisgCisrICAgICAg ICBzdHJpbmcgSU1ldGhvZE1lc3NhZ2UuVXJpIHsKKysJCQlnZXQgeyByZXR1cm4gVXJpOyB9Cisr CQl9CisrCisgCQlzdHJpbmcgSUludGVybmFsTWVzc2FnZS5VcmkgeworIAkJCWdldCB7IHJldHVy biBVcmk7IH0KKyAJCQlzZXQgeyBVcmkgPSB2YWx1ZTsgfQorZGlmZiAtLWdpdCBhL21jcy9jbGFz cy9jb3JsaWIvU3lzdGVtLlJ1bnRpbWUuUmVtb3RpbmcuTWVzc2FnaW5nL1JldHVybk1lc3NhZ2Uu Y3MgYi9tY3MvY2xhc3MvY29ybGliL1N5c3RlbS5SdW50aW1lLlJlbW90aW5nLk1lc3NhZ2luZy9S ZXR1cm5NZXNzYWdlLmNzCitpbmRleCBhZWUzOWY1YmI4MS4uZWMwOWI3M2MxNWQgMTAwNjQ0Cist LS0gYS9tY3MvY2xhc3MvY29ybGliL1N5c3RlbS5SdW50aW1lLlJlbW90aW5nLk1lc3NhZ2luZy9S ZXR1cm5NZXNzYWdlLmNzCisrKysgYi9tY3MvY2xhc3MvY29ybGliL1N5c3RlbS5SdW50aW1lLlJl bW90aW5nLk1lc3NhZ2luZy9SZXR1cm5NZXNzYWdlLmNzCitAQCAtMTY2LDYgKzE2NiwxMCBAQCBu YW1lc3BhY2UgU3lzdGVtLlJ1bnRpbWUuUmVtb3RpbmcuTWVzc2FnaW5nCisgCQkJfQorIAkJfQor IAorKyAgICAgICAgc3RyaW5nIElNZXRob2RNZXNzYWdlLlVyaSB7CisrCQkJZ2V0IHsgcmV0dXJu IFVyaTsgfQorKwkJfQorKworIAkJc3RyaW5nIElJbnRlcm5hbE1lc3NhZ2UuVXJpIHsKKyAJCQln ZXQgeyByZXR1cm4gVXJpOyB9CisgCQkJc2V0IHsgVXJpID0gdmFsdWU7IH0KK2RpZmYgLS1naXQg YS9tY3MvY2xhc3MvY29ybGliL1N5c3RlbS9NdWx0aWNhc3REZWxlZ2F0ZS5jcyBiL21jcy9jbGFz cy9jb3JsaWIvU3lzdGVtL011bHRpY2FzdERlbGVnYXRlLmNzCitpbmRleCBiMzZhZmYzMzQ5Mi4u Y2Y5MTM0YTMzYjMgMTAwNjQ0CistLS0gYS9tY3MvY2xhc3MvY29ybGliL1N5c3RlbS9NdWx0aWNh c3REZWxlZ2F0ZS5jcworKysrIGIvbWNzL2NsYXNzL2NvcmxpYi9TeXN0ZW0vTXVsdGljYXN0RGVs ZWdhdGUuY3MKK0BAIC0yNjIsMTYgKzI2MiwxNiBAQCBuYW1lc3BhY2UgU3lzdGVtCisgCisgCQlw dWJsaWMgc3RhdGljIGJvb2wgb3BlcmF0b3IgPT0gKE11bHRpY2FzdERlbGVnYXRlIGEsIE11bHRp Y2FzdERlbGVnYXRlIGIpCisgCQl7CistCQkJaWYgKGEgPT0gbnVsbCkKKy0JCSAgICAJCXJldHVy biBiID09IG51bGw7CisrCQkJaWYgKChvYmplY3QpYSA9PSBudWxsKQorKyAgICAgICAgICAgICAg ICByZXR1cm4gKG9iamVjdCliID09IG51bGw7CisgCQkgICAgCQkKKyAJCQlyZXR1cm4gYS5FcXVh bHMgKGIpOworIAkJfQorIAkJCisgCQlwdWJsaWMgc3RhdGljIGJvb2wgb3BlcmF0b3IgIT0gKE11 bHRpY2FzdERlbGVnYXRlIGEsIE11bHRpY2FzdERlbGVnYXRlIGIpCisgCQl7CistCQkJaWYgKGEg PT0gbnVsbCkKKy0JCQkJcmV0dXJuIGIgIT0gbnVsbDsKKysJCQlpZiAoKG9iamVjdClhID09IG51 bGwpCisrCQkJCXJldHVybiAob2JqZWN0KWIgIT0gbnVsbDsKKyAJCSAgICAJCisgCQkJcmV0dXJu ICFhLkVxdWFscyAoYik7CisgCQl9CitkaWZmIC0tZ2l0IGEvbWNzL2NsYXNzL2NvcmxpYi9TeXN0 ZW0vT2JqZWN0LmNzIGIvbWNzL2NsYXNzL2NvcmxpYi9TeXN0ZW0vT2JqZWN0LmNzCitpbmRleCA2 YjBhMDNkMmEzMS4uNjk0Y2JkNDU0ZTEgMTAwNjQ0CistLS0gYS9tY3MvY2xhc3MvY29ybGliL1N5 c3RlbS9PYmplY3QuY3MKKysrKyBiL21jcy9jbGFzcy9jb3JsaWIvU3lzdGVtL09iamVjdC5jcwor QEAgLTQwLDcgKzQwLDcgQEAgdXNpbmcgU3lzdGVtLlJ1bnRpbWUuQ29uc3RyYWluZWRFeGVjdXRp b247CisgCisgbmFtZXNwYWNlIFN5c3RlbSB7CisgCistCVtTZXJpYWxpemFibGVdCisrCS8vW1Nl cmlhbGl6YWJsZV0KKyAJW0NsYXNzSW50ZXJmYWNlIChDbGFzc0ludGVyZmFjZVR5cGUuQXV0b0R1 YWwpXQorICNpZiBORVRfMl8wCisgCVtDb21WaXNpYmxlICh0cnVlKV0KK0BAIC00Nyw2ICs0Nywx MiBAQAorICNlbmRpZgorIAlwdWJsaWMgY2xhc3MgT2JqZWN0IHsKKyAKKysgICAgICAgIC8vIERl ZmF1bHQgZGVmaW5pdGlvbiBvZiB0aGUgb2JqZWN0IGZpbmFsaXplci4KKysgICAgICAgICNpZiBO RVRfMl8wCisrCQlbUmVsaWFiaWxpdHlDb250cmFjdEF0dHJpYnV0ZSAoQ29uc2lzdGVuY3kuV2ls bE5vdENvcnJ1cHRTdGF0ZSwgQ2VyLlN1Y2Nlc3MpXQorKyAgICAgICAgI2VuZGlmCisrICAgICAg ICBwcm90ZWN0ZWQgdmlydHVhbCB2b2lkIEZpbmFsaXplKCkge30KKysKKyAJCS8vIDxzdW1tYXJ5 PgorIAkJLy8gICBDb21wYXJlcyB0aGlzIG9iamVjdCB0byB0aGUgc3BlY2lmaWVkIG9iamVjdC4K KyAJCS8vICAgUmV0dXJucyB0cnVlIGlmIHRoZXkgYXJlIGVxdWFsLCBmYWxzZSBvdGhlcndpc2Uu CitAQCAtODAsMTYgKzg2LDYgQEAgbmFtZXNwYWNlIFN5c3RlbSB7CisgCQl7CisgCQl9CisgCist CQkvLyA8c3VtbWFyeT4KKy0JCS8vICAgT2JqZWN0IGRlc3RydWN0b3IuIAorLQkJLy8gPC9zdW1t YXJ5PgorLSNpZiBORVRfMl8wCistCQlbUmVsaWFiaWxpdHlDb250cmFjdEF0dHJpYnV0ZSAoQ29u c2lzdGVuY3kuV2lsbE5vdENvcnJ1cHRTdGF0ZSwgQ2VyLlN1Y2Nlc3MpXQorLSNlbmRpZgorLQkJ fk9iamVjdCAoKQorLQkJeworLQkJfQorLQorIAkJLy8gPHN1bW1hcnk+CisgCQkvLyAgIFJldHVy bnMgYSBoYXNoY29kZSBmb3IgdGhpcyBvYmplY3QuICBFYWNoIGRlcml2ZWQKKyAJCS8vICAgY2xh c3Mgc2hvdWxkIHJldHVybiBhIGhhc2ggY29kZSB0aGF0IG1ha2VzIHNlbnNlCitkaWZmIC0tZ2l0 IGEvbWNzL21jcy9jb2RlZ2VuLmNzIGIvbWNzL21jcy9jb2RlZ2VuLmNzCitpbmRleCBjOTRhNjE3 NzJmNC4uODU0NmQ2NzFlYzYgMTAwNjQ0CistLS0gYS9tY3MvbWNzL2NvZGVnZW4uY3MKKysrKyBi L21jcy9tY3MvY29kZWdlbi5jcworQEAgLTQ5OCw3ICs0OTgsNyBAQCBuYW1lc3BhY2UgTW9uby5D U2hhcnAgeworIAorIAkJLy8gdXRpbGl0eSBoZWxwZXIgZm9yIENoZWNrRXhwciwgVW5DaGVja0V4 cHIsIENoZWNrZWQgYW5kIFVuY2hlY2tlZCBzdGF0ZW1lbnRzCisgCQkvLyBpdCdzIHB1YmxpYyBz byB0aGF0IHdlIGNhbiB1c2UgYSBzdHJ1Y3QgYXQgdGhlIGNhbGxzaXRlCistCQlwdWJsaWMgc3Ry dWN0IEZsYWdzSGFuZGxlIDogSURpc3Bvc2FibGUKKysJCXB1YmxpYyBjbGFzcyBGbGFnc0hhbmRs ZSA6IElEaXNwb3NhYmxlCisgCQl7CisgCQkJRW1pdENvbnRleHQgZWM7CisgCQkJcmVhZG9ubHkg RmxhZ3MgaW52bWFzaywgb2xkdmFsOworZGlmZiAtLWdpdCBhL21jcy9tY3MvdHlwZW1hbmFnZXIu Y3MgYi9tY3MvbWNzL3R5cGVtYW5hZ2VyLmNzCitpbmRleCAxZTE3M2RlODlkMi4uNTg0NzdhZjQx YTMgMTAwNjQ0CistLS0gYS9tY3MvbWNzL3R5cGVtYW5hZ2VyLmNzCisrKysgYi9tY3MvbWNzL3R5 cGVtYW5hZ2VyLmNzCitAQCAtNjI5LDE4ICs2MjksNDIgQEAgbmFtZXNwYWNlIE1vbm8uQ1NoYXJw IHsKKyAJCXJldHVybiBDU2hhcnBOYW1lIChHZXRGdWxsTmFtZSAodCkpOworICAgICB9CisgCisr ICAgIHN0YXRpYyBib29sIFN0YXJ0c1dpdGhXb3JkKHN0cmluZyBoYXlzdGFjaywgc3RyaW5nIGNo ZWNrKQorKyAgICB7CisrICAgICAgICBpZihTdHJpbmcuQ29tcGFyZShoYXlzdGFjaywgMCwgY2hl Y2ssIDAsIGNoZWNrLkxlbmd0aCwgZmFsc2UpICE9IDApCisrICAgICAgICB7IHJldHVybiBmYWxz ZTsgfQorKyAgICAgICAgaWYoY2hlY2suTGVuZ3RoID09IGhheXN0YWNrLkxlbmd0aCkgeyByZXR1 cm4gdHJ1ZTsgfQorKyAgICAgICAgY2hhciBjID0gaGF5c3RhY2tbY2hlY2suTGVuZ3RoXTsKKysg ICAgICAgIHJldHVybiAhKENoYXIuSXNMZXR0ZXIoYykgfHwgQ2hhci5Jc0RpZ2l0KGMpKTsKKysg ICAgfQorKyAgICAgICAgCisgCXB1YmxpYyBzdGF0aWMgc3RyaW5nIENTaGFycE5hbWUgKHN0cmlu ZyBuYW1lKQorIAl7CisgCQlpZiAobmFtZS5TdGFydHNXaXRoIChBbm9ueW1vdXNUeXBlQ2xhc3Mu Q2xhc3NOYW1lUHJlZml4KSkKKyAJCQkJcmV0dXJuIEFub255bW91c1R5cGVDbGFzcy5TaWduYXR1 cmVGb3JFcnJvcjsKKy0JCQkKKy0JCXJldHVybiBSZWdleC5SZXBsYWNlIChuYW1lLAorLQkJCUAi XlN5c3RlbVwuIiArCistCQkJQCIoSW50MzJ8VUludDMyfEludDE2fFVJbnQxNnxJbnQ2NHxVSW50 NjR8IiArCistCQkJQCJTaW5nbGV8RG91YmxlfENoYXJ8RGVjaW1hbHxCeXRlfFNCeXRlfE9iamVj dHwiICsKKy0JCQlAIkJvb2xlYW58U3RyaW5nfFZvaWR8TnVsbCkiICsKKy0JCQlAIihcVyt8XGIp IiwKKy0JCQluZXcgTWF0Y2hFdmFsdWF0b3IgKENTaGFycE5hbWVNYXRjaCkpLlJlcGxhY2UgKCcr JywgJy4nKTsKKysKKysgICAgICAgIGludCBsID0gIlN5c3RlbS4iLkxlbmd0aDsKKysgICAgICAg IGlmKG5hbWUuU3RhcnRzV2l0aCgiU3lzdGVtLiIpICYmIG5hbWUuTGVuZ3RoID4gbCkKKysgICAg ICAgIHsKKysgICAgICAgICAgICBzdHJpbmcgczIgPSBuYW1lLlN1YnN0cmluZyhsKS5Ub0xvd2Vy KCk7CisrICAgICAgICAgICAgaWYoU3RhcnRzV2l0aFdvcmQoczIsICJpbnQzMiIpKQorKyAgICAg ICAgICAgICAgICByZXR1cm4gImludCI7CisrICAgICAgICAgICAgaWYoU3RhcnRzV2l0aFdvcmQo czIsICJ1aW50MzIiKSkKKysgICAgICAgICAgICAgICAgcmV0dXJuICJ1aW50IjsKKysgICAgICAg ICAgICBpZihTdGFydHNXaXRoV29yZChzMiwgImludDE2IikpCisrICAgICAgICAgICAgICAgIHJl dHVybiAic2hvcnQiOworKyAgICAgICAgICAgIGlmKFN0YXJ0c1dpdGhXb3JkKHMyLCAidWludDE2 IikpCisrICAgICAgICAgICAgICAgIHJldHVybiAidXNob3J0IjsKKysgICAgICAgICAgICBpZihT dGFydHNXaXRoV29yZChzMiwgImludDY0IikpCisrICAgICAgICAgICAgICAgIHJldHVybiAibG9u ZyI7CisrICAgICAgICAgICAgaWYoU3RhcnRzV2l0aFdvcmQoczIsICJ1aW50NjQiKSkKKysgICAg ICAgICAgICAgICAgcmV0dXJuICJ1bG9uZyI7CisrICAgICAgICAgICAgaWYoU3RhcnRzV2l0aFdv cmQoczIsICJzaW5nbGUiKSkKKysgICAgICAgICAgICAgICAgcmV0dXJuICJmbG9hdCI7CisrICAg ICAgICAgICAgaWYoU3RhcnRzV2l0aFdvcmQoczIsICJib29sZWFuIikpCisrICAgICAgICAgICAg ICAgIHJldHVybiAiYm9vbCI7CisrICAgICAgICB9CisrICAgICAgICByZXR1cm4gbmFtZTsKKyAJ fQorIAorIAlzdGF0aWMgcHVibGljIHN0cmluZyBDU2hhcnBOYW1lIChUeXBlW10gdHlwZXMpCitA QCAtNjU0LDIxICs2NzgsNiBAQCBuYW1lc3BhY2UgTW9uby5DU2hhcnAgeworIAkJcmV0dXJuIHNi LlRvU3RyaW5nICgpOworIAl9CisgCQorLQlzdGF0aWMgU3RyaW5nIENTaGFycE5hbWVNYXRjaCAo TWF0Y2ggbWF0Y2gpIAorLQl7CistCQlzdHJpbmcgcyA9IG1hdGNoLkdyb3VwcyBbMV0uQ2FwdHVy ZXMgWzBdLlZhbHVlOworLQkJcmV0dXJuIHMuVG9Mb3dlciAoKS4KKy0JCVJlcGxhY2UgKCJpbnQz MiIsICJpbnQiKS4KKy0JCVJlcGxhY2UgKCJ1aW50MzIiLCAidWludCIpLgorLQkJUmVwbGFjZSAo ImludDE2IiwgInNob3J0IikuCistCQlSZXBsYWNlICgidWludDE2IiwgInVzaG9ydCIpLgorLQkJ UmVwbGFjZSAoImludDY0IiwgImxvbmciKS4KKy0JCVJlcGxhY2UgKCJ1aW50NjQiLCAidWxvbmci KS4KKy0JCVJlcGxhY2UgKCJzaW5nbGUiLCAiZmxvYXQiKS4KKy0JCVJlcGxhY2UgKCJib29sZWFu IiwgImJvb2wiKQorLQkJKyBtYXRjaC5Hcm91cHMgWzJdLkNhcHR1cmVzIFswXS5WYWx1ZTsKKy0J fQorLQorIAkvLyBVc2VkIGZvciBlcnJvciByZXBvcnRpbmcgdG8gc2hvdyBzeW1ib2xpYyBuYW1l IGluc3RlYWQgb2YgdW5kZXJseWluZyB2YWx1ZQorIAlwdWJsaWMgc3RhdGljIHN0cmluZyBDU2hh cnBFbnVtVmFsdWUgKFR5cGUgdCwgb2JqZWN0IHZhbHVlKQorIAl7CitkaWZmIC0tZ2l0IGEvbW9u by9pby1sYXllci9wcm9jZXNzZXMuYyBiL21vbm8vaW8tbGF5ZXIvcHJvY2Vzc2VzLmMKK2luZGV4 IGNkNjE3NmNkZGEyLi40ODYwODdkM2ExYiAxMDA2NDQKKy0tLSBhL21vbm8vaW8tbGF5ZXIvcHJv Y2Vzc2VzLmMKKysrKyBiL21vbm8vaW8tbGF5ZXIvcHJvY2Vzc2VzLmMKK0BAIC0xNSw2ICsxNSw3 IEBACisgI2luY2x1ZGUgPHN5cy90aW1lLmg+CisgI2luY2x1ZGUgPGVycm5vLmg+CisgI2luY2x1 ZGUgPHN5cy90eXBlcy5oPgorKyNpbmNsdWRlIDxzeXMvc3lzbWFjcm9zLmg+CisgI2luY2x1ZGUg PHVuaXN0ZC5oPgorICNpbmNsdWRlIDxzaWduYWwuaD4KKyAjaW5jbHVkZSA8c3lzL3dhaXQuaD4K K2RpZmYgLS1naXQgYS9tb25vL21ldGFkYXRhL01ha2VmaWxlLmFtIGIvbW9uby9tZXRhZGF0YS9N YWtlZmlsZS5hbQoraW5kZXggNmZmMjM2ODg5NWIuLmI4YmE2NmU4NzU2IDEwMDY0NAorLS0tIGEv bW9uby9tZXRhZGF0YS9NYWtlZmlsZS5hbQorKysrIGIvbW9uby9tZXRhZGF0YS9NYWtlZmlsZS5h bQorQEAgLTE1NCw3ICsxNTQsNiBAQCBsaWJtb25vcnVudGltZWluY2x1ZGVfSEVBREVSUyA9IFwK KyAJb2JqZWN0LmgJXAorIAlleGNlcHRpb24uaAlcCisgCXByb2ZpbGVyLmgJXAorLQlhcHBkb21h aW4uaAlcCisgCW1vbm8tY29uZmlnLmgJXAorIAlkZWJ1Zy1oZWxwZXJzLmgJXAorIAltZW1wb29s LmgKK2RpZmYgLS1naXQgYS9tb25vL21ldGFkYXRhL2NsYXNzLmMgYi9tb25vL21ldGFkYXRhL2Ns YXNzLmMKK2luZGV4IGYxM2YzNzYzMmZlLi4xMjg3MTAzMzdmNCAxMDA2NDQKKy0tLSBhL21vbm8v bWV0YWRhdGEvY2xhc3MuYworKysrIGIvbW9uby9tZXRhZGF0YS9jbGFzcy5jCitAQCAtMjY5NSwx MCArMjY5NSwxMCBAQCBpbml0aWFsaXplX29iamVjdF9zbG90cyAoTW9ub0NsYXNzICpjbGFzcykK KyAJCQkJZmluYWxpemVfc2xvdCA9IGk7CisgCQl9CisgCistCQlnX2Fzc2VydCAoZ2hjX3Nsb3Qg PiAwKTsKKysJCWdfYXNzZXJ0IChnaGNfc2xvdCA+PSAwKTsKKyAJCWRlZmF1bHRfZ2hjID0gY2xh c3MtPnZ0YWJsZSBbZ2hjX3Nsb3RdOworIAorLQkJZ19hc3NlcnQgKGZpbmFsaXplX3Nsb3QgPiAw KTsKKysJCWdfYXNzZXJ0IChmaW5hbGl6ZV9zbG90ID49IDApOworIAkJZGVmYXVsdF9maW5hbGl6 ZSA9IGNsYXNzLT52dGFibGUgW2ZpbmFsaXplX3Nsb3RdOworIAl9CisgfQorZGlmZiAtLWdpdCBh L21vbm8vbWV0YWRhdGEvb2JqZWN0LmMgYi9tb25vL21ldGFkYXRhL29iamVjdC5jCitpbmRleCAy YjZmNDkwOWIzNC4uZWY0YzhmZDhiNDQgMTAwNjQ0CistLS0gYS9tb25vL21ldGFkYXRhL29iamVj dC5jCisrKysgYi9tb25vL21ldGFkYXRhL29iamVjdC5jCitAQCAtODYxLDcgKzg2MSw3IEBAIG1v bm9fY2xhc3NfY29tcHV0ZV9nY19kZXNjcmlwdG9yIChNb25vQ2xhc3MgKmNsYXNzKQorIAkJbW9u b19yZWdpc3Rlcl9qaXRfaWNhbGwgKEdDX2xvY2FsX2djal9mYXN0X21hbGxvYywgIkdDX2xvY2Fs X2djal9mYXN0X21hbGxvYyIsIG1vbm9fY3JlYXRlX2ljYWxsX3NpZ25hdHVyZSAoIm9iamVjdCBp bnQgcHRyIiksIEZBTFNFKTsKKyAjZW5kaWYKKyAJCW1vbm9fcmVnaXN0ZXJfaml0X2ljYWxsIChH Q19nY2pfbWFsbG9jLCAiR0NfZ2NqX21hbGxvYyIsIG1vbm9fY3JlYXRlX2ljYWxsX3NpZ25hdHVy ZSAoIm9iamVjdCBpbnQgcHRyIiksIEZBTFNFKTsKKy0JCW1vbm9fcmVnaXN0ZXJfaml0X2ljYWxs IChHQ19nY2pfZmFzdF9tYWxsb2MsICJHQ19nY2pfZmFzdF9tYWxsb2MiLCBtb25vX2NyZWF0ZV9p Y2FsbF9zaWduYXR1cmUgKCJvYmplY3QgaW50IHB0ciIpLCBGQUxTRSk7CisrCQltb25vX3JlZ2lz dGVyX2ppdF9pY2FsbCAoR0NfZ2NqX21hbGxvYywgIkdDX2djal9mYXN0X21hbGxvYyIsIG1vbm9f Y3JlYXRlX2ljYWxsX3NpZ25hdHVyZSAoIm9iamVjdCBpbnQgcHRyIiksIEZBTFNFKTsKKyAjZW5k aWYKKyAJCWdjal9pbml0ZWQgPSBUUlVFOworIAkJbW9ub19sb2FkZXJfdW5sb2NrICgpOworZGlm ZiAtLWdpdCBhL3J1bnRpbWUvTWFrZWZpbGUuYW0gYi9ydW50aW1lL01ha2VmaWxlLmFtCitpbmRl eCA3Nzk3ODdiM2NlMy4uYjY3OTU3ZGNmMTYgMTAwNjQ0CistLS0gYS9ydW50aW1lL01ha2VmaWxl LmFtCisrKysgYi9ydW50aW1lL01ha2VmaWxlLmFtCitAQCAtMSw2ICsxLDMgQEAKKy0jIGhhY2sg dG8gcHJldmVudCAnY2hlY2snIGZyb20gZGVwZW5kaW5nIG9uICdhbGwnCistQVVUT01BS0VfT1BU SU9OUyA9IGN5Z251cworLQorIHRtcGluc3QgPSBfdG1waW5zdAorIAorIG5vaW5zdF9TQ1JJUFRT ID0gbW9uby13cmFwcGVyIG1vbm9kaXMtd3JhcHBlciBzZW1kZWwtd3JhcHBlcgotLSAKMi40NS4y Cgo= --b1=_an9yUQc81YewVJ071Mjh6ZcI5zllr0hgLHfHss8ka8A Content-Type: text/x-patch; name=0009-gnu-Add-mono-3.0.patch Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=0009-gnu-Add-mono-3.0.patch RnJvbSBmYWQ2ZmMzNWU3NmNhYWQ1YTcyOWM3ZTIxYWZkNGFmMzM3YjQ3ZDhmIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpNZXNzYWdlLUlEOiA8ZmFkNmZjMzVlNzZjYWFkNWE3MjljN2UyMWFmZDRh ZjMzN2I0N2Q4Zi4xNzMyNzA3Mjg4LmdpdC51bm11c2hAaGFzaGJhbmcuc2g+CkluLVJlcGx5LVRv OiA8M2Y4YWY2NWY3Mjg3MWQ2MWZhODVlNjkzOWY0NmNiOGRhYzE4NWM3MC4xNzMyNzA3Mjg4Lmdp dC51bm11c2hAaGFzaGJhbmcuc2g+ClJlZmVyZW5jZXM6IDwzZjhhZjY1ZjcyODcxZDYxZmE4NWU2 OTM5ZjQ2Y2I4ZGFjMTg1YzcwLjE3MzI3MDcyODguZ2l0LnVubXVzaEBoYXNoYmFuZy5zaD4KRnJv bTogdW5tdXNoIDx1bm11c2hAaGFzaGJhbmcuc2g+CkRhdGU6IFR1ZSwgMjYgTm92IDIwMjQgMTM6 MTM6NDAKU3ViamVjdDogW1BBVENIIDA5LzIxXSBnbnU6IEFkZCBtb25vLTMuMC4KCiogZ251L3Bh Y2thZ2VzL2RvdG5ldC5zY20KICAobW9uby0zLjAuMTItZXh0ZXJuYWwtcmVwby1zcGVjcywgbW9u by0zLjApOiBOZXcgdmFyaWFibGVzLgoKQ2hhbmdlLUlkOiBJMWYzMDA0MTE4N2M3ZDBjZjZlNDVk NTZmNmRhOWJiNGE3MDUyMDJjZgotLS0KIGdudS9wYWNrYWdlcy9kb3RuZXQuc2NtIHwgNjMgKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKIDEgZmlsZSBjaGFuZ2VkLCA2 MyBpbnNlcnRpb25zKCspCgpkaWZmIC0tZ2l0IGEvZ251L3BhY2thZ2VzL2RvdG5ldC5zY20gYi9n bnUvcGFja2FnZXMvZG90bmV0LnNjbQppbmRleCA3YTYyMTQ3NDZmLi4zMzM1ZmM1OGIxIDEwMDY0 NAotLS0gYS9nbnUvcGFja2FnZXMvZG90bmV0LnNjbQorKysgYi9nbnUvcGFja2FnZXMvZG90bmV0 LnNjbQpAQCAtNTkzLDMgKzU5Myw2NiBAQCAoZGVmaW5lLXB1YmxpYyBtb25vLTIuMTEuNAogICAg ICAgICAgICAgICBsaWNlbnNlOmJzZC00CiAgICAgICAgICAgICAgIDs7IG1jcy9jbGFzcy9TeXN0 ZW0uQ29yZS9TeXN0ZW0vVGltZVpvbmVJbmZvLkFuZHJvaWQuY3MKICAgICAgICAgICAgICAgbGlj ZW5zZTphc2wyLjApKSkpCisKKyhkZWZpbmUgbW9uby0zLjAuMTItZXh0ZXJuYWwtcmVwby1zcGVj cworICA7OyBmb3JtYXQ6ICh7cmVwb25hbWUgT1IgKHJlcG9uYW1lIGRpci1uYW1lKX0gY29tbWl0 IHNoYTI1NikgLi4uCisgIDs7IGlmIHJlcG9uYW1lIHN0YXJ0cyB3aXRoIGh0dHBzOi8vIGl0IGlz IHRyZWF0ZWQgYXMgdGhlIHJlcG9zaXRvcnkgdXJsLAorICA7OyBvdGhlcndpc2UgdGhlIG5hbWUg b2YgYSByZXBvc2l0b3J5IHVuZGVyIGh0dHBzOi8vZ2l0aHViLmNvbS9tb25vLworICAnKCgiYXNw bmV0d2Vic3RhY2siICAgICAgICAgICAgICAgImU3N2IxMmU2Y2M1ZWQyNjBhOTg0NDdmNjA5ZTg4 NzMzN2U0NGUyOTkiCisgICAgICIwcmtzMzQ0cXI0Zm1wM2ZzMTI2NGQycWttbTM0OG04ZDFramQ3 ejRsOTRpaWlyd24xZnExIikKKyAgICAoImNlY2lsIiAgICAgICAgICAgICAgICAgICAgICAgICI1 NGUwYTUwNDY0ZWRiYzI1NGIzOWVhM2M4ODVlZTkxYWRhNzMwNzA1IgorICAgICAiMDA3c3piZjVh MTRxODM4Njk1bHdkcDdhcDZyd3p6M2t6bGxnamZuaWJ6bHFpcHczeDJ5ayIpCisgICAgKCJlbnRp dHlmcmFtZXdvcmsiICAgICAgICAgICAgICAiYTVmYWRkZWNhMmJlZTA4NjM2ZjFiN2IzYWY4Mzg5 YmQ0MTE5ZjRjZCIKKyAgICAgIjBiMDVwemY2cXdkZDkycGJ6eW0zMm5mbXc4cnEzNjgyMHZkemFr cTFreWtmbWRkanI5YTciKQorICAgICgoImlrdm0tZm9yayIgImlrdm0iKSAgICAgICAgICAgIjEw YjgzMTJjODAyNDExMTc4MGVlMzgyNjg4Y2Q0Yzg3NTRiMWYxYWMiCisgICAgICIwMjV3Zjlnamdm dnJxNDJ2Z3c5MWFoeTNjbXpjdzA5NHZ4NzgzZHNwN2dqZHlkOHEwOW5tIikKKyAgICAoIkx1Y2Vu ZS5OZXQiICAgICAgICAgICAgICAgICAgICI4OGZiNjdiMDc2MjFkZmVkMDU0ZDhkNzVmZDUwNjcy ZmIyNjM0OWRmIgorICAgICAiMXJmeHFmejdoa3A5cmc1YW52eGx2NmZuYTB4aTBibnYxeThxYmhm OHg0OGwwOHlqYjM4ayIpCisgICAgKCJOZXd0b25zb2Z0Lkpzb24iICAgICAgICAgICAgICAiNDcx YzNlMDgwM2E5ZjQwYTBhY2M4YWVjZWIzMWRlNmZmOTNhNTJjNCIKKyAgICAgIjBkZ25nZDVocWs2 eWhsZzQwa2FibjZxZG5rbm0zMnpjeDlxNmJtMnczMWNzbnNrNTk3OHMiKQorICAgICgicngiICAg ICAgICAgICAgICAgICAgICAgICAgICAgIjE3ZTg0NzdiMmNiOGRkMDE4ZDQ5YTU2NzUyNmZlOTlm ZDI4OTc4NTciCisgICAgICIwZnl5eTRqZjBtbWE2a2ZmNmZ2YnZkY3M1cmExYno0czA2M252amp2 YTl4bG52N3Nqdmg0IikpKQorCisoZGVmaW5lLXB1YmxpYyBtb25vLTMuMAorICAocGFja2FnZQor ICAgIChpbmhlcml0IG1vbm8tMi4xMS40KQorICAgICh2ZXJzaW9uICIzLjAuMTIiKQorICAgIChu YW1lICJtb25vIikKKyAgICAoc291cmNlIChvcmlnaW4KKyAgICAgICAgICAgICAgKG1ldGhvZCBn aXQtZmV0Y2gpCisgICAgICAgICAgICAgICh1cmkKKyAgICAgICAgICAgICAgIChnaXQtcmVmZXJl bmNlCisgICAgICAgICAgICAgICAgKHVybCAiaHR0cHM6Ly9naXRsYWIud2luZWhxLm9yZy9tb25v L21vbm8uZ2l0IikKKyAgICAgICAgICAgICAgICAoY29tbWl0IChzdHJpbmctYXBwZW5kICJtb25v LSIgIjMuMC4xMiIpKSkpCisgICAgICAgICAgICAgIChmaWxlLW5hbWUgKGdpdC1maWxlLW5hbWUg bmFtZSB2ZXJzaW9uKSkKKyAgICAgICAgICAgICAgKHNoYTI1NgorICAgICAgICAgICAgICAgKGJh c2UzMgorICAgICAgICAgICAgICAgICIxMTBmM2hjZmlrazZieGJyZ2phczVkcWxkY2k5ZjI0Z3Zt M3ZkZ240ajlqN3hobGN4MWxqIikpCisgICAgICAgICAgICAgIChtb2R1bGVzICcoKGd1aXggYnVp bGQgdXRpbHMpCisgICAgICAgICAgICAgICAgICAgICAgICAgKGljZS05IHN0cmluZy1mdW4pKSkK KyAgICAgICAgICAgICAgKHNuaXBwZXQgI34oYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICMkKGFkZC1leHRlcm5hbC1yZXBvcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg bW9uby0zLjAuMTItZXh0ZXJuYWwtcmVwby1zcGVjcykKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICMkcHJlcGFyZS1tb25vLXNvdXJjZSkpKSkKKyAgICAobmF0aXZlLWlucHV0cyAobW9kaWZ5 LWlucHV0cyAocGFja2FnZS1uYXRpdmUtaW5wdXRzIG1vbm8tMi4xMS40KQorICAgICAgICAgICAg ICAgICAgICAgKHJlcGxhY2UgIm1vbm8iIG1vbm8tMi4xMS40KSkpCisgICAgKGxpY2Vuc2UgKGxp c3QKKyAgICAgICAgICAgICAgOzsgbW9zdCBvZiBtY3MvdG9vbHMsIG1vbm8vbWFuLCBtb3N0IG9m IG1jcy9jbGFzcywgdGVzdHMgYnkKKyAgICAgICAgICAgICAgOzsgZGVmYXVsdCwgbW9uby9lZ2xp YiwgbW9uby9tZXRhZGF0YS9zZ2VuKiwKKyAgICAgICAgICAgICAgOzsgbW9uby9hcmNoLyovWFhY LWNvZGVnZW4uaAorICAgICAgICAgICAgICA7OyBtY3MvbWNzLCBtY3MvZ21jcyAoZHVhbC1saWNl bnNlZCBHUEwpCisgICAgICAgICAgICAgIDs7IHNhbXBsZXMKKyAgICAgICAgICAgICAgbGljZW5z ZTp4MTEKKyAgICAgICAgICAgICAgOzsgbWNzL21jcywgbWNzL2dtY3MgKGR1YWwtbGljZW5zZWQg WDExKQorICAgICAgICAgICAgICA7OyBzb21lIG9mIG1jcy90b29scworICAgICAgICAgICAgICBs aWNlbnNlOmdwbDErIDs7IG5vdGU6IC4vbWNzL0xJQ0VOU0UuR1BMIHNwZWNpZmllcyBubyB2ZXJz aW9uCisgICAgICAgICAgICAgIDs7IG1vbm8vbW9ubyAodGhlIG1vbm8gVk0sIEkgdGhpbmsgdGhl eSBtZWFudCBtb25vL21pbmkpCisgICAgICAgICAgICAgIDs7IG1vbm8vc3VwcG9ydCAobm90ZTog ZGlyZWN0b3J5IGRvZXNuJ3QgZXhpc3QsIHByb2JhYmx5IG1lYW50CisgICAgICAgICAgICAgIDs7 IC4vc3VwcG9ydCwgYnV0IHRoYXQgY29udGFpbnMgYSBjb3B5IG9mIHpsaWI/KQorICAgICAgICAg ICAgICBsaWNlbnNlOmxncGwyLjArIDs7IG5vdGU6IC4vbWNzL0xJQ0VOU0UuTEdQTCBzcGVjaWZp ZXMgbm8gdmVyc2lvbgorICAgICAgICAgICAgICA7OyBtY3MvamF5CisgICAgICAgICAgICAgIGxp Y2Vuc2U6YnNkLTQKKyAgICAgICAgICAgICAgOzsgbWNzL2NsYXNzL1N5c3RlbS5Db3JlL1N5c3Rl bS9UaW1lWm9uZUluZm8uQW5kcm9pZC5jcworICAgICAgICAgICAgICBsaWNlbnNlOmFzbDIuMAor ICAgICAgICAgICAgICA7OyAuL3N1cHBvcnQsIGNvbnRhaW5zIGEgY29weSBvZiB6bGliCisgICAg ICAgICAgICAgIGxpY2Vuc2U6emxpYikpKSkKLS0gCjIuNDUuMgoK --b1=_an9yUQc81YewVJ071Mjh6ZcI5zllr0hgLHfHss8ka8A Content-Type: text/x-patch; name=0013-gnu-Add-mono-5.1.0.patch Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=0013-gnu-Add-mono-5.1.0.patch RnJvbSBlYjczZTM1Mjg4ZjU1ZmQ3ZTNiOTFhYTA1ZWMzOTMxZmZiZTZmMmRjIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpNZXNzYWdlLUlEOiA8ZWI3M2UzNTI4OGY1NWZkN2UzYjkxYWEwNWVjMzkz MWZmYmU2ZjJkYy4xNzMyNzA3Mjg4LmdpdC51bm11c2hAaGFzaGJhbmcuc2g+CkluLVJlcGx5LVRv OiA8M2Y4YWY2NWY3Mjg3MWQ2MWZhODVlNjkzOWY0NmNiOGRhYzE4NWM3MC4xNzMyNzA3Mjg4Lmdp dC51bm11c2hAaGFzaGJhbmcuc2g+ClJlZmVyZW5jZXM6IDwzZjhhZjY1ZjcyODcxZDYxZmE4NWU2 OTM5ZjQ2Y2I4ZGFjMTg1YzcwLjE3MzI3MDcyODguZ2l0LnVubXVzaEBoYXNoYmFuZy5zaD4KRnJv bTogdW5tdXNoIDx1bm11c2hAaGFzaGJhbmcuc2g+CkRhdGU6IFR1ZSwgMjYgTm92IDIwMjQgMTM6 Mjk6MzEKU3ViamVjdDogW1BBVENIIDEzLzIxXSBnbnU6IEFkZCBtb25vLTUuMS4wLgoKKiBnbnUv cGFja2FnZXMvZG90bmV0LnNjbQogIChtb25vLTUuMS4wLWV4dGVybmFsLXJlcG8tc3BlY3MsIG1v bm8tNS4xLjApOiBOZXcgdmFyaWFibGVzLgoKQ2hhbmdlLUlkOiBJZTU4ZTIwZjc1OTIwZWUwNDky ZTk3N2M4MmEyZTMwMjMxMTc5Mzk0NgotLS0KIGdudS9wYWNrYWdlcy9kb3RuZXQuc2NtIHwgNjgg KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKIDEgZmlsZSBjaGFuZ2Vk LCA2OCBpbnNlcnRpb25zKCspCgpkaWZmIC0tZ2l0IGEvZ251L3BhY2thZ2VzL2RvdG5ldC5zY20g Yi9nbnUvcGFja2FnZXMvZG90bmV0LnNjbQppbmRleCAzM2I3MTdiMGVkLi5kYTI5NjFiZmY0IDEw MDY0NAotLS0gYS9nbnUvcGFja2FnZXMvZG90bmV0LnNjbQorKysgYi9nbnUvcGFja2FnZXMvZG90 bmV0LnNjbQpAQCAtOTcwLDMgKzk3MCw3MSBAQCAoZGVmaW5lLXB1YmxpYyBtb25vLTUuMC4xCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICIKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvcCAiL21jcy9jbGFzcy9saWIvYnVpbGQv bWNzLmV4ZSIpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWtlLWZsYWdzKSkpKSkpKSkp KSkKKworKGRlZmluZSBtb25vLTUuMS4wLWV4dGVybmFsLXJlcG8tc3BlY3MKKyAgJygoImFzcG5l dHdlYnN0YWNrIiAgICAgICAgICAgICAgImU3N2IxMmU2Y2M1ZWQyNjBhOTg0NDdmNjA5ZTg4NzMz N2U0NGUyOTkiCisgICAgICIwcmtzMzQ0cXI0Zm1wM2ZzMTI2NGQycWttbTM0OG04ZDFramQ3ejRs OTRpaWlyd24xZnExIikKKyAgICAoKCJyZWZlcmVuY2UtYXNzZW1ibGllcyIgImJpbmFyeS1yZWZl cmVuY2UtYXNzZW1ibGllcyIpCisgICAgICJmZWJjMTAwZjAzMTNmMGRjOWQ3NWRkMWJjZWE0NWU4 NzEzNGI1YjU1IgorICAgICAiMGxwajkxMW0ybHEyM3IyMmRweTRpMDJmeTR5a2YyN2R4OGZ2cXB4 c3hrbnlzajJqbDZ5NCIpCisgICAgKCJib2NrYnVpbGQiICAgICAgICAgICAgICAgICAgICJmZDFk NmM0MDRkNzYzYzk4YjZmMGU2NGU5OGFiNjVmOTJlODA4MjQ1IgorICAgICAiMGwybjk4NjNqNXky MGxwM2ZqY3BiYjBhOWpjZmswa3Ftbnpsc3cyMHFjaGQwNXJqZ3liMCIpCisgICAgKCJib3Jpbmdz c2wiICAgICAgICAgICAgICAgICAgICJjMDZhYzZiMzNkM2U3NDQyYWQ4Nzg0ODhiOWQxMTAwMTI3 ZWZmOTk4IgorICAgICAiMTg3enBpMXJ2aDlpNmpmY2N3enFxMzM3cnh4aTFyZ255Nm1qcTc5cjA4 ZGxyaDBseWR6YyIpCisgICAgKCJidWlsZHRvb2xzIiAgICAgICAgICAgICAgICAgICJiNWNjNmU2 YWI1ZjcxZjZjMGJlN2I3MzAwNThiNDI2ZTkyNTI4NDc5IgorICAgICAiMGxkajVsNHA0cThqOWRo azBuaWZyM20waTY0Y3N2YjU2d2xjMnhkNHp5ODBzZmdtam4wNiIpCisgICAgKCJjZWNpbCIgICAg ICAgICAgICAgICAgICAgICAgICI0NGJjODYyMjM1MzBhMDdmYTc0YWI4NzAwN2NmMjY0ZTUzZDYz NDAwIgorICAgICAiMHNtc2E4aTQ3MDl5MW5reTNoc2hqN2F5eGhqY2MxN3dsbmZkdmhmYXk3bHk1 ZHhtbDg0ZyIpCisgICAgKCgiY2VjaWwiICJjZWNpbC1sZWdhY3kiKSAgICAgICIzM2Q1MGI4NzRm ZDUyNzExOGJjMzYxZDgzZGUzZDQ5NGU4YmI1NWUxIgorICAgICAiMXA0aGwxNzk2aWIyNnlreWY1 c25sNmNqMGx4MHY3bWpoMHhxaGp3NnFkaDc1M25zanloYiIpCisgICAgKCJjb3JlZngiICAgICAg ICAgICAgICAgICAgICAgICI2M2M1MWU3MjYyOTIxNDliNDg2OGRiNzFiYWE4ODNlNWFkMTczNzY2 IgorICAgICAiMTQwNnJicmE4M2s2Z3cyZG5uc2ZxY2Z3aXkxaDg5eTZscTY0bWE1cmNrbWI1ZHJi MG5nOSIpCisgICAgKCJjb3JlcnQiICAgICAgICAgICAgICAgICAgICAgICIzMWVkYTI2MTk5MWY5 ZjZjMWFkZDE2ODZiNmQzNzk5ZjgzNWIyOTc4IgorICAgICAiMHMwcGQ0bTkwNzB4bHgyMzhmZGhx ZjJiM2l5ZDJ2emZmM2Ywc3hseWk4czBsaHNybDh6diIpCisgICAgKCJpa2Rhc20iICAgICAgICAg ICAgICAgICAgICAgICI4OGI2N2M0MmNhOGI3ZDU4MTQxYzE3NmI0Njc0OTgxOWJmY2VmMTY2Igor ICAgICAiMGIwYjFkaGc4MHI2NDBuODFpcWF3d2t4aTFrMjg5bjR6eGpmajBsZGQ5cmt2Znh2bHdh dyIpCisgICAgKCgiaWt2bS1mb3JrIiAiaWt2bSIpICAgICAgICAgICI3YzFlNjFiZWM4YzA2OWIy Y2M5ZTIxNGMzMDk0YjE0N2Q3NmJiZjgyIgorICAgICAiMHZtYzVyNGo3NmhrZDR6aXMxNzY5cHBk bDFoMWw3ejhjbGQweTRwMW02NG44Nmdoa3pmbiIpCisgICAgKCJsaW5rZXIiICAgICAgICAgICAg ICAgICAgICAgICIxYmRjZjZiN2JmYmUzYjAzZmRhYTc2ZjYxMjRkMGQ3Mzc0ZjA4NjE1IgorICAg ICAiMXh4NnM4ZGNnY3o4MDN5dnFnemhjZ21qMTZjOXM4dnJ2dmw4azR5MHhtYTV3NTFrbjIzayIp CisgICAgKCJMdWNlbmUuTmV0LkxpZ2h0IiAgICAgICAgICAgICI4NTk3OGI3ZWI5NDczOGY1MTY4 MjQzNDEyMTNkNWU5NDA2MGY1Mjg0IgorICAgICAiMGQxMThpNTJtM2EwdmZqaGZjaTgxYTJrYzRx dm5qMjNnczAyaHJ2ZHJmcGQxcTkyZnlpaSIpCisgICAgKCJOZXd0b25zb2Z0Lkpzb24iICAgICAg ICAgICAgICI0NzFjM2UwODAzYTlmNDBhMGFjYzhhZWNlYjMxZGU2ZmY5M2E1MmM0IgorICAgICAi MGRnbmdkNWhxazZ5aGxnNDBrYWJuNnFkbmtubTMyemN4OXE2Ym0ydzMxY3Nuc2s1OTc4cyIpCisg ICAgKCgiTnVHZXQuQnVpbGRUYXNrcyIgIm51Z2V0LWJ1aWxkdGFza3MiKQorICAgICAiMDRiZGFi NTVkOGRlOWVkY2Y2Mjg2OTRjZmQyMDAxNTYxZThmOGU2MCIKKyAgICAgIjFua2x4YXl4a2Rza2c1 d2xmbDQ0Y25kenFrbDE4djU2MXJ6MDNod3g3d2JuNXc4OXE3NzUiKQorICAgICgoIk5Vbml0TGl0 ZSIgIm51bml0LWxpdGUiKSAgICAiNjkwNjAzYmVhOThhYWU2OWZjYTlhNjUxMzBkODg1OTFiYzZj YWJlZSIKKyAgICAgIjFmODQ1eXNqenMzeWQ5Z2N5d3c2NmRua3g0ODR6NWZrbmI4bDB4ejc0c2pt eGsybW5nd2MiKQorICAgIDs7ICgicm9zbHluLWJpbmFyaWVzIiAgICAgICAgICAiMGQ0MTk4YjEy OTliY2IwMTk5NzM3NDlkYTRkNDdlOTBmMTVhMWU0NiIKKyAgICA7OyAgIiIpCisgICAgKCJyeCIg ICAgICAgICAgICAgICAgICAgICAgICAgICJiMjlhNGIwZmRhNjA5ZTBhZjMzZmY1NGVkMTM2NTJi NmNjZjBlMDVlIgorICAgICAiMW4xandobXNia2N2MmQ4MDZpbW1jcHprYjcycnowNHh5OThteXcz NTVhOHc1YWgyNXlpdiIpCisgICAgOzsgKCJ4dW5pdC1iaW5hcmllcyIgICAgICAgICAgICJiOGUy MGQyNjViMzY4ZGQ2MjUyNzAzZDVhZmQwMzhkMGIwMjhlMzg4IgorICAgIDs7ICAiIikKKyAgICAp KQorCisoZGVmaW5lLXB1YmxpYyBtb25vLTUuMS4wCisgIChwYWNrYWdlCisgICAgKGluaGVyaXQg bW9uby01LjAuMSkKKyAgICAodmVyc2lvbiAiNS4xLjAiKQorICAgIChuYW1lICJtb25vIikKKyAg ICAoc291cmNlIChvcmlnaW4KKyAgICAgICAgICAgICAgKG1ldGhvZCBnaXQtZmV0Y2gpCisgICAg ICAgICAgICAgICh1cmkKKyAgICAgICAgICAgICAgIChnaXQtcmVmZXJlbmNlCisgICAgICAgICAg ICAgICAgKHVybCAiaHR0cHM6Ly9naXRsYWIud2luZWhxLm9yZy9tb25vL21vbm8uZ2l0IikKKyAg ICAgICAgICAgICAgICAoY29tbWl0CisgICAgICAgICAgICAgICAgICI2ZmFmZDA4YjUwN2M1NmYx MWEyZWI2NTcwNzAzYTM5ZTViZGMwYTgxIikpKQorICAgICAgICAgICAgICAoZmlsZS1uYW1lIChn aXQtZmlsZS1uYW1lIG5hbWUgdmVyc2lvbikpCisgICAgICAgICAgICAgIChzaGEyNTYKKyAgICAg ICAgICAgICAgIChiYXNlMzIKKyAgICAgICAgICAgICAgICAiMXN4cTQwbmF5NWdoaG1mYmRsbjk4 aXJpMTl5MGg3cTM2cjNwcW54bXhubTk0bGl2eDJrNSIpKQorICAgICAgICAgICAgICAobW9kdWxl cyAnKChndWl4IGJ1aWxkIHV0aWxzKQorICAgICAgICAgICAgICAgICAgICAgICAgIChpY2UtOSBz dHJpbmctZnVuKSkpCisgICAgICAgICAgICAgIChzbmlwcGV0ICN+KGJlZ2luCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAjJChhZGQtZXh0ZXJuYWwtcmVwb3MKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIG1vbm8tNS4xLjAtZXh0ZXJuYWwtcmVwby1zcGVjcykKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICMkQHByZXBhcmUtbW9uby1zb3VyY2UtMCkpKSkKKyAgICAobmF0aXZl LWlucHV0cyAobW9kaWZ5LWlucHV0cyAocGFja2FnZS1uYXRpdmUtaW5wdXRzIG1vbm8tNS4wLjEp CisgICAgICAgICAgICAgICAgICAgICAocmVwbGFjZSAibW9ubyIgbW9uby01LjAuMSkpKSkpCi0t IAoyLjQ1LjIKCg== --b1=_an9yUQc81YewVJ071Mjh6ZcI5zllr0hgLHfHss8ka8A Content-Type: text/x-patch; name=0007-gnu-Add-mono-2.6.4.patch Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=0007-gnu-Add-mono-2.6.4.patch RnJvbSA4NmRmMWNiYzE4OWRmMzhiZGYwNjE3MzgxYTJjYjk5YWY5OWM5NTlmIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpNZXNzYWdlLUlEOiA8ODZkZjFjYmMxODlkZjM4YmRmMDYxNzM4MWEyY2I5 OWFmOTljOTU5Zi4xNzMyNzA3Mjg4LmdpdC51bm11c2hAaGFzaGJhbmcuc2g+CkluLVJlcGx5LVRv OiA8M2Y4YWY2NWY3Mjg3MWQ2MWZhODVlNjkzOWY0NmNiOGRhYzE4NWM3MC4xNzMyNzA3Mjg4Lmdp dC51bm11c2hAaGFzaGJhbmcuc2g+ClJlZmVyZW5jZXM6IDwzZjhhZjY1ZjcyODcxZDYxZmE4NWU2 OTM5ZjQ2Y2I4ZGFjMTg1YzcwLjE3MzI3MDcyODguZ2l0LnVubXVzaEBoYXNoYmFuZy5zaD4KRnJv bTogdW5tdXNoIDx1bm11c2hAaGFzaGJhbmcuc2g+CkRhdGU6IFR1ZSwgMjYgTm92IDIwMjQgMTM6 MDQ6MTMKU3ViamVjdDogW1BBVENIIDA3LzIxXSBnbnU6IEFkZCBtb25vLTIuNi40LgoKKiBnbnUv ZG90bmV0LnNjbSAobW9uby0yLjYuNCk6IE5ldyB2YXJpYWJsZS4KKiBnbnUvcGFja2FnZXMvcGF0 Y2hlcy9tb25vLTIuNi40LWZpeGVzLnBhdGNoOiBOZXcgcGF0Y2guCiogZ251L2xvY2FsLm1rIChk aXN0X3BhdGNoX0RBVEEpOiBSZWdpc3RlciBpdC4KCkNoYW5nZS1JZDogSTY2ZTliYjJlMTJjYTZm NDdiNGNkODI3ODIyZGI1YmVlOTNiNjRkZmUKLS0tCiBnbnUvbG9jYWwubWsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHwgIDEgKwogZ251L3BhY2thZ2VzL2RvdG5ldC5zY20gICAgICAg ICAgICAgICAgICAgICB8IDIzICsrKysrKysrKysKIGdudS9wYWNrYWdlcy9wYXRjaGVzL21vbm8t Mi42LjQtZml4ZXMucGF0Y2ggfCA0OSArKysrKysrKysrKysrKysrKysrKysKIDMgZmlsZXMgY2hh bmdlZCwgNzMgaW5zZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGdudS9wYWNrYWdlcy9w YXRjaGVzL21vbm8tMi42LjQtZml4ZXMucGF0Y2gKCmRpZmYgLS1naXQgYS9nbnUvbG9jYWwubWsg Yi9nbnUvbG9jYWwubWsKaW5kZXggZDA4YzAzYTY4OS4uYTQ2MTFkMDAxNiAxMDA2NDQKLS0tIGEv Z251L2xvY2FsLm1rCisrKyBiL2dudS9sb2NhbC5tawpAQCAtMTc2NCw2ICsxNzY0LDcgQEAgZGlz dF9wYXRjaF9EQVRBID0JCQkJCQlcCiAgICVEJS9wYWNrYWdlcy9wYXRjaGVzL21vbm8tMS45LjEt YWRkLU1PTk9fQ1JFQVRFX0lNQUdFX1ZFUlNJT04ucGF0Y2gJCVwKICAgJUQlL3BhY2thZ2VzL3Bh dGNoZXMvbW9uby0xLjkuMS1maXhlcy5wYXRjaAkJCVwKICAgJUQlL3BhY2thZ2VzL3BhdGNoZXMv bW9uby0yLjQuMi4zLWZpeGVzLnBhdGNoCQkJXAorICAlRCUvcGFja2FnZXMvcGF0Y2hlcy9tb25v LTIuNi40LWZpeGVzLnBhdGNoCQkJXAogICAlRCUvcGFja2FnZXMvcGF0Y2hlcy9tb3NhaWNhdGNo ZXItdW5idW5kbGUtaHRzbGliLnBhdGNoCVwKICAgJUQlL3BhY2thZ2VzL3BhdGNoZXMvbXJyZXNj dWUtc3VwcG9ydC1sb3ZlLTExLnBhdGNoCQlcCiAgICVEJS9wYWNrYWdlcy9wYXRjaGVzL210b29s cy1tZm9ybWF0LXVuaW5pdGlhbGl6ZWQucGF0Y2gJXApkaWZmIC0tZ2l0IGEvZ251L3BhY2thZ2Vz L2RvdG5ldC5zY20gYi9nbnUvcGFja2FnZXMvZG90bmV0LnNjbQppbmRleCAyNDExNTdjZGNlLi40 YWY2NDJiOWYzIDEwMDY0NAotLS0gYS9nbnUvcGFja2FnZXMvZG90bmV0LnNjbQorKysgYi9nbnUv cGFja2FnZXMvZG90bmV0LnNjbQpAQCAtNDc1LDMgKzQ3NSwyNiBAQCAoZGVmaW5lLXB1YmxpYyBt b25vLTIuNC4yCiAgICAgICAgICAgICAgIGxpY2Vuc2U6bGdwbDIuMCsgOzsgbm90ZTogLi9tY3Mv TElDRU5TRS5MR1BMIHNwZWNpZmllcyBubyB2ZXJzaW9uCiAgICAgICAgICAgICAgIDs7IG1jcy9q YXkKICAgICAgICAgICAgICAgbGljZW5zZTpic2QtNCkpKSkKKworKGRlZmluZS1wdWJsaWMgbW9u by0yLjYuNAorICAocGFja2FnZQorICAgIChpbmhlcml0IG1vbm8tMi40LjIpCisgICAgKHZlcnNp b24gIjIuNi40IikKKyAgICAobmFtZSAibW9ubyIpCisgICAgKHNvdXJjZSAob3JpZ2luCisgICAg ICAgICAgICAgIChtZXRob2QgZ2l0LWZldGNoKQorICAgICAgICAgICAgICAodXJpCisgICAgICAg ICAgICAgICAoZ2l0LXJlZmVyZW5jZQorICAgICAgICAgICAgICAgICh1cmwgImh0dHBzOi8vZ2l0 bGFiLndpbmVocS5vcmcvbW9uby9tb25vLmdpdCIpCisgICAgICAgICAgICAgICAgKGNvbW1pdCAo c3RyaW5nLWFwcGVuZCAibW9uby0iICIyLjYuNCIpKSkpCisgICAgICAgICAgICAgIChmaWxlLW5h bWUgKGdpdC1maWxlLW5hbWUgbmFtZSB2ZXJzaW9uKSkKKyAgICAgICAgICAgICAgKHNoYTI1Ngor ICAgICAgICAgICAgICAgKGJhc2UzMgorICAgICAgICAgICAgICAgICIxNzk3N3c0NXFoOGptZnNs NGJoaTgzc2k0ZnhkOHMzeDhiMHB4bndkemp2M2JxcjU0Yzg1IikpCisgICAgICAgICAgICAgICht b2R1bGVzICcoKGd1aXggYnVpbGQgdXRpbHMpCisgICAgICAgICAgICAgICAgICAgICAgICAgKGlj ZS05IHN0cmluZy1mdW4pKSkKKyAgICAgICAgICAgICAgKHNuaXBwZXQgcHJlcGFyZS1tb25vLXNv dXJjZSkKKyAgICAgICAgICAgICAgKHBhdGNoZXMKKyAgICAgICAgICAgICAgIChzZWFyY2gtcGF0 Y2hlcyAibW9uby0yLjYuNC1maXhlcy5wYXRjaCIpKSkpCisgICAgKG5hdGl2ZS1pbnB1dHMgKG1v ZGlmeS1pbnB1dHMgKHBhY2thZ2UtbmF0aXZlLWlucHV0cyBtb25vLTIuNC4yKQorICAgICAgICAg ICAgICAgICAgICAgKHJlcGxhY2UgIm1vbm8iIG1vbm8tMi40LjIpKSkpKQpkaWZmIC0tZ2l0IGEv Z251L3BhY2thZ2VzL3BhdGNoZXMvbW9uby0yLjYuNC1maXhlcy5wYXRjaCBiL2dudS9wYWNrYWdl cy9wYXRjaGVzL21vbm8tMi42LjQtZml4ZXMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k ZXggMDAwMDAwMDAwMC4uZTgwMmM4YmI3ZQotLS0gL2Rldi9udWxsCisrKyBiL2dudS9wYWNrYWdl cy9wYXRjaGVzL21vbm8tMi42LjQtZml4ZXMucGF0Y2gKQEAgLTAsMCArMSw0OSBAQAorZGlmZiAt LWdpdCBhL2RhdGEvbW9uby5wYy5pbiBiL2RhdGEvbW9uby5wYy5pbgoraW5kZXggMDFlMGE5ZTVk NDEuLmQ0M2JiMTg3MjE4IDEwMDY0NAorLS0tIGEvZGF0YS9tb25vLnBjLmluCisrKysgYi9kYXRh L21vbm8ucGMuaW4KK0BAIC03LDggKzcsNiBAQCBzeXNjb25mZGlyPUBzeXNjb25mZGlyQAorIE5h bWU6IE1vbm8KKyBEZXNjcmlwdGlvbjogTW9ubyBSdW50aW1lCisgVmVyc2lvbjogQFZFUlNJT05A CistIyMgQ29tbWVudGVkIG91dCBiZWNhdXNlIFNMRSBoaWRlcyBkZXZlbCBmaWxlcyBpbiB0aGUg U0xFIFNESywKKy0jIyB3aGljaCBub3QgYWxsIGN1c3RvbWVycyB3aWxsIGhhdmUuCistI1JlcXVp cmVzOiBnbGliLTIuMCBndGhyZWFkLTIuMAorK1JlcXVpcmVzOiBnbGliLTIuMCBndGhyZWFkLTIu MCBiZHctZ2MKKyBMaWJzOiAtTCR7bGliZGlyfSBAZXhwb3J0X2xkZmxhZ3NAIC1sbW9ubyBAbGli bW9ub19sZGZsYWdzQAorIENmbGFnczogLUkke2luY2x1ZGVkaXJ9IEBsaWJtb25vX2NmbGFnc0AK K2RpZmYgLS1naXQgYS9tb25vLXVuaW5zdGFsbGVkLnBjLmluIGIvbW9uby11bmluc3RhbGxlZC5w Yy5pbgoraW5kZXggN2ZhM2YxMmRjOTEuLjJhMDczNDM2MmZkIDEwMDY0NAorLS0tIGEvbW9uby11 bmluc3RhbGxlZC5wYy5pbgorKysrIGIvbW9uby11bmluc3RhbGxlZC5wYy5pbgorQEAgLTEsNiAr MSw2IEBACisgTmFtZTogTW9ubworIERlc2NyaXB0aW9uOiBNb25vIFJ1bnRpbWUKKyBWZXJzaW9u OiBAVkVSU0lPTkAKKy1SZXF1aXJlczogZ2xpYi0yLjAgZ3RocmVhZC0yLjAKKytSZXF1aXJlczog Z2xpYi0yLjAgZ3RocmVhZC0yLjAgYmR3LWdjCisgTGliczogLUxAbW9ub19idWlsZF9yb290QC9t b25vL21pbmkvLmxpYnMgQGV4cG9ydF9sZGZsYWdzQCAtbG1vbm8gQGxpYm1vbm9fbGRmbGFnc0AK KyBDZmxhZ3M6IC1JQGFic190b3Bfc3JjZGlyQCAtSUBhYnNfdG9wX3NyY2RpckAvbW9ubyBAbGli bW9ub19jZmxhZ3NACitkaWZmIC0tZ2l0IGEvbW9uby9taW5pL2RyaXZlci5jIGIvbW9uby9taW5p L2RyaXZlci5jCitpbmRleCBjNGU3ZjRjY2RiMy4uYmI3MDVjMGQxZmMgMTAwNjQ0CistLS0gYS9t b25vL21pbmkvZHJpdmVyLmMKKysrKyBiL21vbm8vbWluaS9kcml2ZXIuYworQEAgLTEzMDIsNiAr MTMwMiw3IEBAIG1vbm9fbWFpbiAoaW50IGFyZ2MsIGNoYXIqIGFyZ3ZbXSkKKyAjZW5kaWYKKyAJ aWYgKCFnX3RocmVhZF9zdXBwb3J0ZWQgKCkpCisgCQlnX3RocmVhZF9pbml0IChOVUxMKTsKKysg ICAgICAgIEdDX2FsbG93X3JlZ2lzdGVyX3RocmVhZHMoKTsKKyAKKyAJaWYgKG1vbm9fcnVubmlu Z19vbl92YWxncmluZCAoKSAmJiBnZXRlbnYgKCJNT05PX1ZBTEdSSU5EX0xFQUtfQ0hFQ0siKSkg eworIAkJR01lbVZUYWJsZSBtZW1fdnRhYmxlOworZGlmZiAtLWdpdCBhL3J1bnRpbWUvTWFrZWZp bGUuYW0gYi9ydW50aW1lL01ha2VmaWxlLmFtCitpbmRleCBkYTBjMGU4NjcxZC4uOWQwZGVhZjE4 MmYgMTAwNjQ0CistLS0gYS9ydW50aW1lL01ha2VmaWxlLmFtCisrKysgYi9ydW50aW1lL01ha2Vm aWxlLmFtCitAQCAtMSw2ICsxLDMgQEAKKy0jIGhhY2sgdG8gcHJldmVudCAnY2hlY2snIGZyb20g ZGVwZW5kaW5nIG9uICdhbGwnCistQVVUT01BS0VfT1BUSU9OUyA9IGN5Z251cworLQorIHRtcGlu c3QgPSBfdG1waW5zdAorIAorIG5vaW5zdF9TQ1JJUFRTID0gbW9uby13cmFwcGVyIG1vbm9kaXMt d3JhcHBlcgotLSAKMi40NS4yCgo= --b1=_an9yUQc81YewVJ071Mjh6ZcI5zllr0hgLHfHss8ka8A Content-Type: text/x-patch; name=0011-gnu-Add-mono-4.9.0.patch Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=0011-gnu-Add-mono-4.9.0.patch RnJvbSAwNTBlMmFjNzRkZjU4MjViN2M5ZDUxMGViZjc1ZTI0ZTQ3ZmFlNzFmIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpNZXNzYWdlLUlEOiA8MDUwZTJhYzc0ZGY1ODI1YjdjOWQ1MTBlYmY3NWUy NGU0N2ZhZTcxZi4xNzMyNzA3Mjg4LmdpdC51bm11c2hAaGFzaGJhbmcuc2g+CkluLVJlcGx5LVRv OiA8M2Y4YWY2NWY3Mjg3MWQ2MWZhODVlNjkzOWY0NmNiOGRhYzE4NWM3MC4xNzMyNzA3Mjg4Lmdp dC51bm11c2hAaGFzaGJhbmcuc2g+ClJlZmVyZW5jZXM6IDwzZjhhZjY1ZjcyODcxZDYxZmE4NWU2 OTM5ZjQ2Y2I4ZGFjMTg1YzcwLjE3MzI3MDcyODguZ2l0LnVubXVzaEBoYXNoYmFuZy5zaD4KRnJv bTogdW5tdXNoIDx1bm11c2hAaGFzaGJhbmcuc2g+CkRhdGU6IFR1ZSwgMjYgTm92IDIwMjQgMTM6 MjU6MDAKU3ViamVjdDogW1BBVENIIDExLzIxXSBnbnU6IEFkZCBtb25vLTQuOS4wLgoKKiBnbnUv cGFja2FnZXMvZG90bmV0LnNjbSAobW9uby00LjkuMCk6IE5ldyB2YXJpYWJsZS4KKiBnbnUvcGFj a2FnZXMvcGF0Y2hlcy9tb25vLTQuOS4wLWZpeC1ydW50aW1lbWV0YWRhdGF2ZXJzaW9uLnBhdGNo OiBOZXcgcGF0Y2guCiogZ251L2xvY2FsLm1rIChkaXN0X3BhdGNoX0RBVEEpOiByZWdpc3RlciBp dC4KCkNoYW5nZS1JZDogSWVhNTkyNmU3OWY3ODc3YWNhNzE4YzEzMTJjODliY2M3MTViNjRkMjEK LS0tCiBnbnUvbG9jYWwubWsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDEg KwogZ251L3BhY2thZ2VzL2RvdG5ldC5zY20gICAgICAgICAgICAgICAgICAgICAgIHwgMTI5ICsr KysrKysrKysrKysrKysrKwogLi4ub25vLTQuOS4wLWZpeC1ydW50aW1lbWV0YWRhdGF2ZXJzaW9u LnBhdGNoIHwgIDEzICsrCiAzIGZpbGVzIGNoYW5nZWQsIDE0MyBpbnNlcnRpb25zKCspCiBjcmVh dGUgbW9kZSAxMDA2NDQgZ251L3BhY2thZ2VzL3BhdGNoZXMvbW9uby00LjkuMC1maXgtcnVudGlt ZW1ldGFkYXRhdmVyc2lvbi5wYXRjaAoKZGlmZiAtLWdpdCBhL2dudS9sb2NhbC5tayBiL2dudS9s b2NhbC5tawppbmRleCBhOWEyNmI5YmMxLi5jYzc5ZjU1NDFkIDEwMDY0NAotLS0gYS9nbnUvbG9j YWwubWsKKysrIGIvZ251L2xvY2FsLm1rCkBAIC0xNzY2LDYgKzE3NjYsNyBAQCBkaXN0X3BhdGNo X0RBVEEgPQkJCQkJCVwKICAgJUQlL3BhY2thZ2VzL3BhdGNoZXMvbW9uby0yLjQuMi4zLWZpeGVz LnBhdGNoCQkJXAogICAlRCUvcGFja2FnZXMvcGF0Y2hlcy9tb25vLTIuNi40LWZpeGVzLnBhdGNo CQkJXAogICAlRCUvcGFja2FnZXMvcGF0Y2hlcy9tb25vLTIuMTEuNC1maXhlcy5wYXRjaAkJCVwK KyAgJUQlL3BhY2thZ2VzL3BhdGNoZXMvbW9uby00LjkuMC1maXgtcnVudGltZW1ldGFkYXRhdmVy c2lvbi5wYXRjaAkJXAogICAlRCUvcGFja2FnZXMvcGF0Y2hlcy9tb3NhaWNhdGNoZXItdW5idW5k bGUtaHRzbGliLnBhdGNoCVwKICAgJUQlL3BhY2thZ2VzL3BhdGNoZXMvbXJyZXNjdWUtc3VwcG9y dC1sb3ZlLTExLnBhdGNoCQlcCiAgICVEJS9wYWNrYWdlcy9wYXRjaGVzL210b29scy1tZm9ybWF0 LXVuaW5pdGlhbGl6ZWQucGF0Y2gJXApkaWZmIC0tZ2l0IGEvZ251L3BhY2thZ2VzL2RvdG5ldC5z Y20gYi9nbnUvcGFja2FnZXMvZG90bmV0LnNjbQppbmRleCBlMWYxMjcyMDg4Li40OTVmZTkzNDIx IDEwMDY0NAotLS0gYS9nbnUvcGFja2FnZXMvZG90bmV0LnNjbQorKysgYi9nbnUvcGFja2FnZXMv ZG90bmV0LnNjbQpAQCAtNzA4LDMgKzcwOCwxMzIgQEAgKGRlZmluZS1wdWJsaWMgbW9uby0zLjEy LjEKICAgICAgICAgICAgICAgICA7OyBmb3Igc29tZSByZWFzb24gYSBkZWZhdWx0IGlzIG9ubHkg dXNlZCBpZiB0aGlzIGlzIGVtcHR5LCBub3QKICAgICAgICAgICAgICAgICA7OyBpZiBpdCBpcyB1 bnNldC4KICAgICAgICAgICAgICAgICAoc2V0ZW52ICJUWiIgIiIpKSkpKSkpKSkKKworKGRlZmlu ZSBtb25vLTQuOS4wLWV4dGVybmFsLXJlcG8tc3BlY3MKKyAgOzsgZm9ybWF0OiAoe3JlcG9uYW1l IE9SIChyZXBvbmFtZSBkaXItbmFtZSl9IGNvbW1pdCBzaGEyNTYpIC4uLgorICAnKCgiYXNwbmV0 d2Vic3RhY2siICAgICAgICAgICAgICAgImU3N2IxMmU2Y2M1ZWQyNjBhOTg0NDdmNjA5ZTg4NzMz N2U0NGUyOTkiCisgICAgICIwcmtzMzQ0cXI0Zm1wM2ZzMTI2NGQycWttbTM0OG04ZDFramQ3ejRs OTRpaWlyd24xZnExIikKKyAgICA7OyAoKCJyZWZlcmVuY2UtYXNzZW1ibGllcyIgImJpbmFyeS1y ZWZlcmVuY2UtYXNzZW1ibGllcyIpCisgICAgOzsgICI2Yzc3MTk3MzE4ZmU4NWRmZGRmNzVhMWIz NDRiOWJmOGQwMDA3YjBiIgorICAgIDs7ICAiMTFoYnM5NTJzcmpsc2l5aW43NnkybGxtNXJmamt3 amM2N3lhMWkzcDBwdzE5M3p3MTRqayIpCisgICAgOzsgQWNjb3JkaW5nIHRvIGdpdGh1YiBkZXNj cmlwdGlvbiB0aGlzIGlzIGEgImN1c3RvbSIgZm9yayBvZiBib3Jpbmdzc2wKKyAgICAoImJvcmlu Z3NzbCIgICAgICAgICAgICAgICAgICAgICJjMDZhYzZiMzNkM2U3NDQyYWQ4Nzg0ODhiOWQxMTAw MTI3ZWZmOTk4IgorICAgICAiMTg3enBpMXJ2aDlpNmpmY2N3enFxMzM3cnh4aTFyZ255Nm1qcTc5 cjA4ZGxyaDBseWR6YyIpCisgICAgKCJidWlsZHRvb2xzIiAgICAgICAgICAgICAgICAgICAiOWI2 ZWU4Njg2YmU1NWE5ODNkODg2OTM4MTY1YjYyMDZjZGE1MDc3MiIKKyAgICAgIjBzanczc3dhdmNt aWp5bm1heGg2NDdxcGtqc2JnaWhkcjhsaGt5emY4ZHNwcmhscTRmeGQiKQorICAgICgiY2VjaWwi ICAgICAgICAgICAgICAgICAgICAgICAgIjJiMzk4NTZlODBkODUxM2Y3MGJjMzI0MWVkMDUzMjVi MGRlNjc5YWUiCisgICAgICIwdnZheDMycjZibmh2cmN2aXM4M2dkcmRxY2d5eGI3MDRoejI4Zzlx MHduYXk0a25xeGRtIikKKyAgICAoKCJjZWNpbCIgImNlY2lsLWxlZ2FjeSIpICAgICAgICIzM2Q1 MGI4NzRmZDUyNzExOGJjMzYxZDgzZGUzZDQ5NGU4YmI1NWUxIgorICAgICAiMXA0aGwxNzk2aWIy NnlreWY1c25sNmNqMGx4MHY3bWpoMHhxaGp3NnFkaDc1M25zanloYiIpCisgICAgOzsgKCJkZWJp YW4tc25hcHNob3QiICAgICAgICAgICAgICAiOTM0MmY4ZjA1MmY4MWRlYWJhNzg5ZjAzMGRiMjNh ODhiNDM2OTcyNCIKKyAgICA7OyAgIiIpCisgICAgKCJpa2Rhc20iICAgICAgICAgICAgICAgICAg ICAgICAiZTRkZWFiZjYxYzExOTk5ZjIwMGRjZWE2ZjZkNmI0MjQ3NGNjMjEzMSIKKyAgICAgIjFm cmJmNzB5N243bDcyajM5M2F2ZGl3azYxNTNjdmZ3d3BpZ2hrZjJtNDZjbHFtcTRoYW4iKQorICAg ICgoImlrdm0tZm9yayIgImlrdm0iKSAgICAgICAgICAgIjM2Nzg2NGVmODEwODU5YWUzY2U2NTI4 NjQyMzNiMzVmMmRkNWZkYmUiCisgICAgICIwaWc5OWtibWE0czBtemIxM256c2sxdm0yMDB5Z2Zy MTFxNm16Z2g2amo0NnMyZmMzNXB4IikKKyAgICAoIkx1Y2VuZS5OZXQuTGlnaHQiICAgICAgICAg ICAgICI4NTk3OGI3ZWI5NDczOGY1MTY4MjQzNDEyMTNkNWU5NDA2MGY1Mjg0IgorICAgICAiMGQx MThpNTJtM2EwdmZqaGZjaTgxYTJrYzRxdm5qMjNnczAyaHJ2ZHJmcGQxcTkyZnlpaSIpCisgICAg KCJOZXd0b25zb2Z0Lkpzb24iICAgICAgICAgICAgICAiNDcxYzNlMDgwM2E5ZjQwYTBhY2M4YWVj ZWIzMWRlNmZmOTNhNTJjNCIKKyAgICAgIjBkZ25nZDVocWs2eWhsZzQwa2FibjZxZG5rbm0zMnpj eDlxNmJtMnczMWNzbnNrNTk3OHMiKQorICAgICgibnVnZXQtYnVpbGR0YXNrcyIgICAgICAgICAg ICAgIjA0YmRhYjU1ZDhkZTllZGNmNjI4Njk0Y2ZkMjAwMTU2MWU4ZjhlNjAiCisgICAgICIxbmts eGF5eGtkc2tnNXdsZmw0NGNuZHpxa2wxOHY1NjFyejAzaHd4N3dibjV3ODlxNzc1IikKKyAgICAo Im51bml0LWxpdGUiICAgICAgICAgICAgICAgICAgICI0YmM3OWE2ZGExZjBlZTUzODU2MGI3ZTRk MGNhZmY0NmQzYzg2ZTRmIgorICAgICAiMDg1ZnBhYmp3NDdybjhoYjV6dzZ3aXpzZzJqcmdkYmo5 cm5sYXI5bHJsczQwd2lnMjcycSIpCisgICAgKCJyeCIgICAgICAgICAgICAgICAgICAgICAgICAg ICAiYjI5YTRiMGZkYTYwOWUwYWYzM2ZmNTRlZDEzNjUyYjZjY2YwZTA1ZSIKKyAgICAgIjFuMWp3 aG1zYmtjdjJkODA2aW1tY3B6a2I3MnJ6MDR4eTk4bXl3MzU1YTh3NWFoMjV5aXYiKSkpCisKKyhk ZWZpbmUtcHVibGljIG1vbm8tNC45LjAKKyAgKHBhY2thZ2UKKyAgICAoaW5oZXJpdCBtb25vLTMu MTIuMSkKKyAgICAodmVyc2lvbiAiNC45LjAiKQorICAgIChuYW1lICJtb25vIikKKyAgICAoc291 cmNlIChvcmlnaW4KKyAgICAgICAgICAgICAgKG1ldGhvZCBnaXQtZmV0Y2gpCisgICAgICAgICAg ICAgICh1cmkKKyAgICAgICAgICAgICAgIChnaXQtcmVmZXJlbmNlCisgICAgICAgICAgICAgICAg KHVybCAiaHR0cHM6Ly9naXRsYWIud2luZWhxLm9yZy9tb25vL21vbm8uZ2l0IikKKyAgICAgICAg ICAgICAgICA7OyBzb21lIGNvbW1pdCBjaG9zZW4gYWZ0ZXIgY29uZmlndXJlLmFjIHdhcyB1cGRh dGVkIHRvIG1ha2UKKyAgICAgICAgICAgICAgICA7OyB0aGUgdmVyc2lvbiA+PSA0LjkuMAorICAg ICAgICAgICAgICAgIChjb21taXQgIjVhMzczNjYwNmU2MjQzZDJjODRkNGRmMmNmMzVjMjg0MjE0 YjhjYzQiKSkpCisgICAgICAgICAgICAgIChmaWxlLW5hbWUgKGdpdC1maWxlLW5hbWUgbmFtZSB2 ZXJzaW9uKSkKKyAgICAgICAgICAgICAgKHNoYTI1NgorICAgICAgICAgICAgICAgKGJhc2UzMgor ICAgICAgICAgICAgICAgICIwdnFra3FrYXF3YmlpNGhkemcwdmZmeXkzMWZ6MWttbXNhNjdqeXF3 eGRzdmdwanN6aWgzIikpCisgICAgICAgICAgICAgIChtb2R1bGVzICcoKGd1aXggYnVpbGQgdXRp bHMpCisgICAgICAgICAgICAgICAgICAgICAgICAgKGljZS05IHN0cmluZy1mdW4pKSkKKyAgICAg ICAgICAgICAgKHNuaXBwZXQgI34oYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICMk KGFkZC1leHRlcm5hbC1yZXBvcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9uby00 LjkuMC1leHRlcm5hbC1yZXBvLXNwZWNzKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIyRw cmVwYXJlLW1vbm8tc291cmNlKSkKKyAgICAgICAgICAgICAgKHBhdGNoZXMgKHNlYXJjaC1wYXRj aGVzCisgICAgICAgICAgICAgICAgICAgICAgICA7OyBTYXZlcyB1cyBhbiBleHRyYSBpbnRlcm1l ZGlhdGUgc3RlcAorICAgICAgICAgICAgICAgICAgICAgICAgIm1vbm8tNC45LjAtZml4LXJ1bnRp bWVtZXRhZGF0YXZlcnNpb24ucGF0Y2giKSkpKQorICAgIChuYXRpdmUtaW5wdXRzIChtb2RpZnkt aW5wdXRzIChwYWNrYWdlLW5hdGl2ZS1pbnB1dHMgbW9uby0zLjEyLjEpCisgICAgICAgICAgICAg ICAgICAgICAocmVwbGFjZSAibW9ubyIgbW9uby0zLjEyLjEpCisgICAgICAgICAgICAgICAgICAg ICAoYXBwZW5kIHR6ZGF0YS1mb3ItdGVzdHMpKSkKKyAgICAoYXJndW1lbnRzCisgICAgIChzdWJz dGl0dXRlLWtleXdvcmQtYXJndW1lbnRzIChwYWNrYWdlLWFyZ3VtZW50cyBtb25vLTMuMTIuMSkK KyAgICAgICAoKCM6Y29uZmlndXJlLWZsYWdzIF8gI2YpCisgICAgICAgIDs7ICJFeHRlcm5hbCBC b2VobSBpcyBubyBsb25nZXIgc3VwcG9ydGVkIiAtIEkgVklMTCBOT1QgdXNlIHRoZQorICAgICAg ICA7OyBidW5kbGVkIHNvZnR3YXJlIQorICAgICAgICAjfihsaXN0ICItLXdpdGgtc2dlbj15ZXMi CisgICAgICAgICAgICAgICAgIi0tZGlzYWJsZS1ib2VobSIKKyAgICAgICAgICAgICAgICAiLS13 aXRoLWNzYz1tY3MiKSkKKyAgICAgICAoKCM6cGhhc2VzIHBoYXNlcyAjfiVzdGFuZGFyZC1waGFz ZXMpCisgICAgICAgICN+KG1vZGlmeS1waGFzZXMgIyRwaGFzZXMKKyAgICAgICAgICAgIChhZGQt YmVmb3JlICdjb25maWd1cmUgJ3NldC1UWkRJUgorICAgICAgICAgICAgICAobGFtYmRhKiAoIzpr ZXkgbmF0aXZlLWlucHV0cyBpbnB1dHMgIzphbGxvdy1vdGhlci1rZXlzKQorICAgICAgICAgICAg ICAgIChzZWFyY2gtaW5wdXQtZGlyZWN0b3J5IChvciBuYXRpdmUtaW5wdXRzIGlucHV0cykKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2hhcmUvem9uZWluZm8iKSkp CisgICAgICAgICAgICAoYWRkLWFmdGVyICd1bnBhY2sgJ3VzZS1vbGQtbW9uby1saWJyYXJpZXMK KyAgICAgICAgICAgICAgOzsgQXQgdGhpcyBwb2ludCBpbiBoaXN0b3J5IG1vbm8gaGFkIG5vdCwg dG8gbXkga25vd2xlZGdlLAorICAgICAgICAgICAgICA7OyBkZWlnbmVkIHRvIGdyYWNlIHVzIHdp dGggdGhlIGFjdHVhbCBzb3VyY2VzIHRvIHRoZSBiaW5hcmllcworICAgICAgICAgICAgICA7OyBz aGlwcGVkIGluIGV4dGVybmFsL2JpbmFyeS1yZWZlcmVuY2UtYXNzZW1ibGllcywgc28ganVzdCBj b3B5CisgICAgICAgICAgICAgIDs7IHRoZSBsaWJyYXJpZXMgZnJvbSBhbiBvbGRlciBtb25vIGZv ciBub3cgSSBndWVzcy4KKyAgICAgICAgICAgICAgKGxhbWJkYSBfCisgICAgICAgICAgICAgICAg KHN1YnN0aXR1dGUqICIuL21jcy9jbGFzcy9yZWZlcmVuY2UtYXNzZW1ibGllcy9NYWtlZmlsZSIK KyAgICAgICAgICAgICAgICAgICgoIlxcLlxcLi9cXC5cXC4vXFwuXFwuL2V4dGVybmFsL2JpbmFy eS1yZWZlcmVuY2UtYXNzZW1ibGllcy92IikKKyAgICAgICAgICAgICAgICAgICAoc3RyaW5nLWFw cGVuZCAjJCh0aGlzLXBhY2thZ2UtbmF0aXZlLWlucHV0ICJtb25vIikKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAiL2xpYi9tb25vLyIpKSkpKQorICAgICAgICAgICAgKGFkZC1h ZnRlciAndW5wYWNrICdkaXNhYmxlLU1pY3Jvc29mdC5CdWlsZC5UYXNrcy10ZXN0cworICAgICAg ICAgICAgICAobGFtYmRhIF8KKyAgICAgICAgICAgICAgICA7OyBUaGVzZSBmYWlsIGZvciB1bmtu b3duIHJlYXNvbnMKKyAgICAgICAgICAgICAgICAoc3Vic3RpdHV0ZSogIm1jcy9jbGFzcy9NaWNy b3NvZnQuQnVpbGQuVGFza3MvTWFrZWZpbGUiCisgICAgICAgICAgICAgICAgICAoKCJeaW5jbHVk ZSAuLi8uLi9idWlsZC9saWJyYXJ5Lm1ha2UiIGFsbCkKKyAgICAgICAgICAgICAgICAgICAoc3Ry aW5nLWFwcGVuZAorICAgICAgICAgICAgICAgICAgICBhbGwKKyAgICAgICAgICAgICAgICAgICAg IlxucnVuLXRlc3QtcmVjdXJzaXZlOlxuXHRAZWNobyBza2lwcGluZyB0ZXN0c1xuIikpKSkpKSkp KQorICAgIChsaWNlbnNlIChsaXN0CisgICAgICAgICAgICAgIDs7IG1vc3Qgb2YgbWNzL3Rvb2xz LCBtb25vL21hbiwgbW9zdCBvZiBtY3MvY2xhc3MsIHRlc3RzIGJ5CisgICAgICAgICAgICAgIDs7 IGRlZmF1bHQsIG1vbm8vZWdsaWIsIG1vbm8vbWV0YWRhdGEvc2dlbiosCisgICAgICAgICAgICAg IDs7IG1vbm8vYXJjaC8qL1hYWC1jb2RlZ2VuLmgKKyAgICAgICAgICAgICAgOzsgbWNzL21jcywg bWNzL2dtY3MgKGR1YWwtbGljZW5zZWQgR1BMKQorICAgICAgICAgICAgICA7OyBzYW1wbGVzCisg ICAgICAgICAgICAgIGxpY2Vuc2U6eDExCisgICAgICAgICAgICAgIDs7IG1jcy9tY3MsIG1jcy9n bWNzIChkdWFsLWxpY2Vuc2VkIFgxMSkKKyAgICAgICAgICAgICAgOzsgc29tZSBvZiBtY3MvdG9v bHMKKyAgICAgICAgICAgICAgbGljZW5zZTpncGwxKyA7OyBub3RlOiAuL21jcy9MSUNFTlNFLkdQ TCBzcGVjaWZpZXMgbm8gdmVyc2lvbgorICAgICAgICAgICAgICA7OyBtb25vL21vbm8gKHRoZSBt b25vIFZNLCBJIHRoaW5rIHRoZXkgbWVhbnQgbW9uby9taW5pKQorICAgICAgICAgICAgICA7OyBt b25vL3N1cHBvcnQgKG5vdGU6IGRpcmVjdG9yeSBkb2Vzbid0IGV4aXN0LCBwcm9iYWJseSBtZWFu dAorICAgICAgICAgICAgICA7OyAuL3N1cHBvcnQsIGJ1dCB0aGF0IGNvbnRhaW5zIGEgY29weSBv ZiB6bGliPykKKyAgICAgICAgICAgICAgbGljZW5zZTpsZ3BsMi4wKyA7OyBub3RlOiAuL21jcy9M SUNFTlNFLkxHUEwgc3BlY2lmaWVzIG5vIHZlcnNpb24KKyAgICAgICAgICAgICAgOzsgbWNzL2ph eSwgbW9uby91dGlscy9tZW1jaGVjay5oCisgICAgICAgICAgICAgIGxpY2Vuc2U6YnNkLTQKKyAg ICAgICAgICAgICAgOzsgbW9uby91dGlscy9ic2VhcmNoLmMsIG1vbm8vaW8tbGF5ZXIvd2FwaV9n bG9iLntoLGN9CisgICAgICAgICAgICAgIGxpY2Vuc2U6YnNkLTMKKyAgICAgICAgICAgICAgOzsg bW9uby91dGlscy9mcmVlYnNkLXtkd2FyZixlbGZfY29tbW9uLGVsZjY0LGVsZjMyfS5oCisgICAg ICAgICAgICAgIGxpY2Vuc2U6YnNkLTIKKyAgICAgICAgICAgICAgOzsgbWNzL2NsYXNzL1N5c3Rl bS5Db3JlL1N5c3RlbS9UaW1lWm9uZUluZm8uQW5kcm9pZC5jcworICAgICAgICAgICAgICA7OyBt Y3MvY2xhc3MvUmFiYml0TVEuQ2xpZW50IChkdWFsIGxpY2Vuc2VkIG1wbDEuMSkKKyAgICAgICAg ICAgICAgbGljZW5zZTphc2wyLjAKKyAgICAgICAgICAgICAgOzsgLi9zdXBwb3J0LCBjb250YWlu cyBhIGNvcHkgb2YgemxpYiwgaW5jbC4gLi9zdXBwb3J0L21pbml6aXAKKyAgICAgICAgICAgICAg bGljZW5zZTp6bGliCisgICAgICAgICAgICAgIDs7IG1vbm8vZG9jcy9IdG1sQWdpbGl0eVBhY2ss IG1jcy91bml0MjQKKyAgICAgICAgICAgICAgbGljZW5zZTptcy1wbAorICAgICAgICAgICAgICA7 OyBtY3MvY2xhc3MvSTE4Ti9ta2xpc3Quc2gsIG1vbm8vYmVuY2htYXJrL3t6aXBtYXJrLGxvZ2lj fS5jcworICAgICAgICAgICAgICA7OyBtY3MvY2xhc3MveyxDb21wYXQufUlDU2hhcnBDb2RlLlNo YXJwWmlwTGliCisgICAgICAgICAgICAgIGxpY2Vuc2U6Z3BsMisKKyAgICAgICAgICAgICAgOzsg bWNzL2NsYXNzL1JhYmJpdE1RLkNsaWVudCAoZHVhbCBsaWNlbnNlZCBhc2wyLjApCisgICAgICAg ICAgICAgIGxpY2Vuc2U6bXBsMS4xCisgICAgICAgICAgICAgIDs7IEFQSSBEb2N1bWVudGF0aW9u CisgICAgICAgICAgICAgIGxpY2Vuc2U6Y2MtYnk0LjApKSkpCmRpZmYgLS1naXQgYS9nbnUvcGFj a2FnZXMvcGF0Y2hlcy9tb25vLTQuOS4wLWZpeC1ydW50aW1lbWV0YWRhdGF2ZXJzaW9uLnBhdGNo IGIvZ251L3BhY2thZ2VzL3BhdGNoZXMvbW9uby00LjkuMC1maXgtcnVudGltZW1ldGFkYXRhdmVy c2lvbi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi5lYzViYWQ5 YWUxCi0tLSAvZGV2L251bGwKKysrIGIvZ251L3BhY2thZ2VzL3BhdGNoZXMvbW9uby00LjkuMC1m aXgtcnVudGltZW1ldGFkYXRhdmVyc2lvbi5wYXRjaApAQCAtMCwwICsxLDEzIEBACitkaWZmIC0t Z2l0IGEvbWNzL21jcy9zZXR0aW5ncy5jcyBiL21jcy9tY3Mvc2V0dGluZ3MuY3MKK2luZGV4IDEz OTNiY2Q1OGYzLi5hZjVmZWJlN2NmNiAxMDA2NDQKKy0tLSBhL21jcy9tY3Mvc2V0dGluZ3MuY3MK KysrKyBiL21jcy9tY3Mvc2V0dGluZ3MuY3MKK0BAIC0xMTk3LDcgKzExOTcsNyBAQCBuYW1lc3Bh Y2UgTW9uby5DU2hhcnAgeworIAkJCQl9CisgCQkJCXJldHVybiBQYXJzZVJlc3VsdC5TdWNjZXNz OworIAorLQkJCWNhc2UgInJ1bnRpbWVtZXRhZGF0YXZlcnNpb24iOgorKwkJCWNhc2UgIi9ydW50 aW1lbWV0YWRhdGF2ZXJzaW9uIjoKKyAJCQkJaWYgKHZhbHVlLkxlbmd0aCA9PSAwKSB7CisgCQkJ CQlFcnJvcl9SZXF1aXJlc0FyZ3VtZW50IChvcHRpb24pOworIAkJCQkJcmV0dXJuIFBhcnNlUmVz dWx0LkVycm9yOwotLSAKMi40NS4yCgo= --b1=_an9yUQc81YewVJ071Mjh6ZcI5zllr0hgLHfHss8ka8A Content-Type: text/x-patch; name=0008-gnu-Add-mono-2.11.4.patch Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=0008-gnu-Add-mono-2.11.4.patch RnJvbSAzOTlmNWU4YWUxNmQ0ZmZkYzYyYWJmZDdiZDY0Y2QwZWNhMjU1YzQ2IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpNZXNzYWdlLUlEOiA8Mzk5ZjVlOGFlMTZkNGZmZGM2MmFiZmQ3YmQ2NGNk MGVjYTI1NWM0Ni4xNzMyNzA3Mjg4LmdpdC51bm11c2hAaGFzaGJhbmcuc2g+CkluLVJlcGx5LVRv OiA8M2Y4YWY2NWY3Mjg3MWQ2MWZhODVlNjkzOWY0NmNiOGRhYzE4NWM3MC4xNzMyNzA3Mjg4Lmdp dC51bm11c2hAaGFzaGJhbmcuc2g+ClJlZmVyZW5jZXM6IDwzZjhhZjY1ZjcyODcxZDYxZmE4NWU2 OTM5ZjQ2Y2I4ZGFjMTg1YzcwLjE3MzI3MDcyODguZ2l0LnVubXVzaEBoYXNoYmFuZy5zaD4KRnJv bTogdW5tdXNoIDx1bm11c2hAaGFzaGJhbmcuc2g+CkRhdGU6IFR1ZSwgMjYgTm92IDIwMjQgMTM6 MTI6MTEKU3ViamVjdDogW1BBVENIIDA4LzIxXSBnbnU6IEFkZCBtb25vLTIuMTEuNC4KCiogZ251 L3BhY2thZ2VzL2RvdG5ldC5zY20KICAobW9uby0yLjExLjQtZXh0ZXJuYWwtcmVwby1zcGVjcywg bW9uby0yLjExLjQpOiBOZXcgdmFyaWFibGVzLgogIChhZGQtZXh0ZXJuYWwtcmVwb3MpOiBOZXcg cHJvY2VkdXJlLgoqIGdudS9wYWNrYWdlcy9wYXRjaGVzL21vbm8tMi4xMS40LWZpeGVzLnBhdGNo OiBOZXcgcGF0Y2guCiogZ251L2xvY2FsLm1rIChkaXN0X3BhdGNoX0RBVEEpOiBSZWdpc3RlciBp dC4KCkNoYW5nZS1JZDogSTdjYjk2YWY4YjA1YTYyNWNmZTljYTlhYjBmMTEzMjYwOGMwMmVkMzEK LS0tCiBnbnUvbG9jYWwubWsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAxICsK IGdudS9wYWNrYWdlcy9kb3RuZXQuc2NtICAgICAgICAgICAgICAgICAgICAgIHwgOTUgKysrKysr KysrKysrKysrKysrKysKIGdudS9wYWNrYWdlcy9wYXRjaGVzL21vbm8tMi4xMS40LWZpeGVzLnBh dGNoIHwgMzYgKysrKysrKysKIDMgZmlsZXMgY2hhbmdlZCwgMTMyIGluc2VydGlvbnMoKykKIGNy ZWF0ZSBtb2RlIDEwMDY0NCBnbnUvcGFja2FnZXMvcGF0Y2hlcy9tb25vLTIuMTEuNC1maXhlcy5w YXRjaAoKZGlmZiAtLWdpdCBhL2dudS9sb2NhbC5tayBiL2dudS9sb2NhbC5tawppbmRleCBhNDYx MWQwMDE2Li5hOWEyNmI5YmMxIDEwMDY0NAotLS0gYS9nbnUvbG9jYWwubWsKKysrIGIvZ251L2xv Y2FsLm1rCkBAIC0xNzY1LDYgKzE3NjUsNyBAQCBkaXN0X3BhdGNoX0RBVEEgPQkJCQkJCVwKICAg JUQlL3BhY2thZ2VzL3BhdGNoZXMvbW9uby0xLjkuMS1maXhlcy5wYXRjaAkJCVwKICAgJUQlL3Bh Y2thZ2VzL3BhdGNoZXMvbW9uby0yLjQuMi4zLWZpeGVzLnBhdGNoCQkJXAogICAlRCUvcGFja2Fn ZXMvcGF0Y2hlcy9tb25vLTIuNi40LWZpeGVzLnBhdGNoCQkJXAorICAlRCUvcGFja2FnZXMvcGF0 Y2hlcy9tb25vLTIuMTEuNC1maXhlcy5wYXRjaAkJCVwKICAgJUQlL3BhY2thZ2VzL3BhdGNoZXMv bW9zYWljYXRjaGVyLXVuYnVuZGxlLWh0c2xpYi5wYXRjaAlcCiAgICVEJS9wYWNrYWdlcy9wYXRj aGVzL21ycmVzY3VlLXN1cHBvcnQtbG92ZS0xMS5wYXRjaAkJXAogICAlRCUvcGFja2FnZXMvcGF0 Y2hlcy9tdG9vbHMtbWZvcm1hdC11bmluaXRpYWxpemVkLnBhdGNoCVwKZGlmZiAtLWdpdCBhL2du dS9wYWNrYWdlcy9kb3RuZXQuc2NtIGIvZ251L3BhY2thZ2VzL2RvdG5ldC5zY20KaW5kZXggNGFm NjQyYjlmMy4uN2E2MjE0NzQ2ZiAxMDA2NDQKLS0tIGEvZ251L3BhY2thZ2VzL2RvdG5ldC5zY20K KysrIGIvZ251L3BhY2thZ2VzL2RvdG5ldC5zY20KQEAgLTQ5OCwzICs0OTgsOTggQEAgKGRlZmlu ZS1wdWJsaWMgbW9uby0yLjYuNAogICAgICAgICAgICAgICAgKHNlYXJjaC1wYXRjaGVzICJtb25v LTIuNi40LWZpeGVzLnBhdGNoIikpKSkKICAgICAobmF0aXZlLWlucHV0cyAobW9kaWZ5LWlucHV0 cyAocGFja2FnZS1uYXRpdmUtaW5wdXRzIG1vbm8tMi40LjIpCiAgICAgICAgICAgICAgICAgICAg ICAocmVwbGFjZSAibW9ubyIgbW9uby0yLjQuMikpKSkpCisKKzs7IHN1Ym1vZHVsZSBjaGVja291 dHMgdXNlIGdpdDovLywgd2hpY2ggaXNuJ3Qgc3VwcG9ydGVkIGJ5IGdpdGh1YiBhbnltb3JlLCBz bworOzsgd2UgbmVlZCB0byBtYW51YWxseSBwcm92aWRlIHRoZW0gaW5zdGVhZCBvZiBiZWluZyBh YmxlIHRvIHVzZSAocmVjdXJzaXZlPworOzsgI3QpLiAgQWxzbyB0cnkgbm90IHRvIHRoaW5rIHRv byBoYXJkIGFib3V0IHRoZSBmYWN0IHRoYXQgc29tZSBvZiB0aGVzZQorOzsgc3VibW9kdWxlcyBp biBsYXRlciB2ZXJzaW9ucyBjb250YWluIGJpbmFyeSBjb21waWxlciBibG9icyB3aGljaCBtb25v Cis7OyBtYWludGFpbmVycyBwcmVzdW1hYmx5IHVzZWQgd2hlbiBjcmVhdGluZyB0aGUgYm9vdHN0 cmFwIGJpbmFyaWVzIHRoZXkKKzs7IHB1Ymxpc2hlZC4gIEFsbCBmZXRjaGVkIGFuZCB1cGRhdGVk IG92ZXIgdW5hdXRoZW50aWNhdGVkIGdpdDovLy4KKworKGRlZmluZSBtb25vLTIuMTEuNC1leHRl cm5hbC1yZXBvLXNwZWNzCisgIDs7IGZvcm1hdDogKHtyZXBvbmFtZSBPUiAocmVwb25hbWUgZGly LW5hbWUpfSBjb21taXQtaGFzaCBvcmlnaW4tc2hhMjU2KSAuLi4KKyAgOzsgaWYgcmVwb25hbWUg c3RhcnRzIHdpdGggaHR0cHM6Ly8gaXQgaXMgdHJlYXRlZCBhcyB0aGUgcmVwb3NpdG9yeSB1cmws CisgIDs7IG90aGVyd2lzZSB0aGUgbmFtZSBvZiBhIHJlcG9zaXRvcnkgdW5kZXIgaHR0cHM6Ly9n aXRodWIuY29tL21vbm8vCisgICcoKCJhc3BuZXR3ZWJzdGFjayIgICAgICAgICAgICAgICAiMTgz NmRlZmY2YTI2ODNiOGE1YjdkZDc4ZjJiNTkxYTEwYjQ3NTczZSIKKyAgICAgIjB2cXE0NWk4azZq eWxsamFycjA5aHFxaXdqczh3bjBsZ2pybDZiejcydnhxcHAwajM0NGsiKQorICAgICgiY2VjaWwi ICAgICAgICAgICAgICAgICAgICAgICAgIjU0ZTBhNTA0NjRlZGJjMjU0YjM5ZWEzYzg4NWVlOTFh ZGE3MzA3MDUiCisgICAgICIwMDdzemJmNWExNHE4Mzg2OTVsd2RwN2FwNnJ3enoza3psbGdqZm5p YnpscWlwdzN4MnlrIikKKyAgICAoImVudGl0eWZyYW1ld29yayIgICAgICAgICAgICAgICI5YmFj YTU2MmVlM2E3NDdhNDE4NzBmNDVlNzQ5ZTQ0MzZiNmFjYTI2IgorICAgICAiMGw4azA0YnlrYnJi azVxMnB6OGh6aDh4eTh5NGF5ejdqOTdmdzBreWszbHJhaTg5djVkYSIpCisgICAgKCJOZXd0b25z b2Z0Lkpzb24iICAgICAgICAgICAgICAiNDcxYzNlMDgwM2E5ZjQwYTBhY2M4YWVjZWIzMWRlNmZm OTNhNTJjNCIKKyAgICAgIjBkZ25nZDVocWs2eWhsZzQwa2FibjZxZG5rbm0zMnpjeDlxNmJtMncz MWNzbnNrNTk3OHMiKSkpCisKKyhkZWZpbmUgKGFkZC1leHRlcm5hbC1yZXBvcyBzcGVjcykKKyAg KGRlZmluZSAocmVwb25hbWUtPnVybCByZXBvbmFtZSkKKyAgICAoaWYgKHN0cmluZy1wcmVmaXg/ ICJodHRwczovLyIgcmVwb25hbWUpCisgICAgICAgIHJlcG9uYW1lCisgICAgICAgIChzdHJpbmct YXBwZW5kICJodHRwczovL2dpdGh1Yi5jb20vbW9uby8iIHJlcG9uYW1lKSkpCisKKyAgKGRlZmlu ZSogKGV4dGVybmFsLXJlcG8tZ2V4cCByZXBvbmFtZSBjb21taXQgaGFzaAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICM6a2V5IHJlY3Vyc2l2ZT8gKHBhdGNoZXMgJygpKSkKKyAgICAo bGV0ICgoc2hvcnQtY29tbWl0IChzdHJpbmctdGFrZSBjb21taXQgNikpCisgICAgICAgICAgKHJl cG9uYW1lIChpZiAocGFpcj8gcmVwb25hbWUpIChjYXIgcmVwb25hbWUpCisgICAgICAgICAgICAg ICAgICAgICAgICByZXBvbmFtZSkpCisgICAgICAgICAgKGRpci1uYW1lIChpZiAocGFpcj8gcmVw b25hbWUpIChjYWRyIHJlcG9uYW1lKQorICAgICAgICAgICAgICAgICAgICAgICAgcmVwb25hbWUp KSkKKyAgICAgICN+KGNvcHktcmVjdXJzaXZlbHkgIysob3JpZ2luCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAobWV0aG9kIGdpdC1mZXRjaCkKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICh1cmkgKGdpdC1yZWZlcmVuY2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICh1cmwgKHJlcG9uYW1lLT51cmwgcmVwb25hbWUpKQorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgKGNvbW1pdCBjb21taXQpCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAocmVjdXJzaXZlPyByZWN1cnNpdmU/KSkpCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAoZmlsZS1uYW1lCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg KGdpdC1maWxlLW5hbWUgZGlyLW5hbWUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBzaG9ydC1jb21taXQpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgKHNoYTI1NiAoYmFzZTMyIGhhc2gpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg KHBhdGNoZXMgKG1hcCBzZWFyY2gtcGF0Y2ggcGF0Y2hlcykpKQorICAgICAgICAgICAgICAgICAg ICAgICAgICAjJChzdHJpbmctYXBwZW5kICIuL2V4dGVybmFsLyIgZGlyLW5hbWUpKSkpCisKKyAg KGRlZmluZSAoc3BlYy0+Z2V4cCBzcGVjKQorICAgIChhcHBseSBleHRlcm5hbC1yZXBvLWdleHAg c3BlYykpCisKKyAgI34oYmVnaW4KKyAgICAgICMrQChtYXAgc3BlYy0+Z2V4cCBzcGVjcykpKQor CisoZGVmaW5lLXB1YmxpYyBtb25vLTIuMTEuNAorICAocGFja2FnZQorICAgIChpbmhlcml0IG1v bm8tMi42LjQpCisgICAgKHZlcnNpb24gIjIuMTEuNCIpCisgICAgKG5hbWUgIm1vbm8iKQorICAg IChzb3VyY2UgKG9yaWdpbgorICAgICAgICAgICAgICAobWV0aG9kIGdpdC1mZXRjaCkKKyAgICAg ICAgICAgICAgKHVyaQorICAgICAgICAgICAgICAgKGdpdC1yZWZlcmVuY2UKKyAgICAgICAgICAg ICAgICAodXJsICJodHRwczovL2dpdGxhYi53aW5laHEub3JnL21vbm8vbW9uby5naXQiKQorICAg ICAgICAgICAgICAgIChjb21taXQgKHN0cmluZy1hcHBlbmQgIm1vbm8tIiAiMi4xMS40IikpKSkK KyAgICAgICAgICAgICAgKGZpbGUtbmFtZSAoZ2l0LWZpbGUtbmFtZSBuYW1lIHZlcnNpb24pKQor ICAgICAgICAgICAgICAoc2hhMjU2CisgICAgICAgICAgICAgICAoYmFzZTMyCisgICAgICAgICAg ICAgICAgIjB5MmJpZmkyYXZiam1mcDgwaGpnYTJkeXFpcDRiNDZ6a3Z4NnlmcjlwYTJoaG05NDBy cHgiKSkKKyAgICAgICAgICAgICAgKG1vZHVsZXMgJygoZ3VpeCBidWlsZCB1dGlscykKKyAgICAg ICAgICAgICAgICAgICAgICAgICAoaWNlLTkgc3RyaW5nLWZ1bikpKQorICAgICAgICAgICAgICAo c25pcHBldCAjfihiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIyQoYWRkLWV4dGVy bmFsLXJlcG9zCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb25vLTIuMTEuNC1leHRl cm5hbC1yZXBvLXNwZWNzKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIyRwcmVwYXJlLW1v bm8tc291cmNlKSkKKyAgICAgICAgICAgICAgKHBhdGNoZXMKKyAgICAgICAgICAgICAgIChzZWFy Y2gtcGF0Y2hlcyAibW9uby0yLjExLjQtZml4ZXMucGF0Y2giKSkpKQorICAgIChidWlsZC1zeXN0 ZW0gZ251LWJ1aWxkLXN5c3RlbSkKKyAgICAobmF0aXZlLWlucHV0cyAobW9kaWZ5LWlucHV0cyAo cGFja2FnZS1uYXRpdmUtaW5wdXRzIG1vbm8tMi42LjQpCisgICAgICAgICAgICAgICAgICAgICAo cmVwbGFjZSAibW9ubyIgbW9uby0yLjYuNCkpKQorICAgIChsaWNlbnNlIChsaXN0CisgICAgICAg ICAgICAgIDs7IG1vc3Qgb2YgbWNzL3Rvb2xzLCBtb25vL21hbiwgbW9zdCBvZiBtY3MvY2xhc3Ms IHRlc3RzIGJ5CisgICAgICAgICAgICAgIDs7IGRlZmF1bHQsIG1vbm8vZWdsaWIsIG1vbm8vbWV0 YWRhdGEvc2dlbiosCisgICAgICAgICAgICAgIDs7IG1vbm8vYXJjaC8qL1hYWC1jb2RlZ2VuLmgK KyAgICAgICAgICAgICAgOzsgbWNzL21jcywgbWNzL2dtY3MgKGR1YWwtbGljZW5zZWQgR1BMKQor ICAgICAgICAgICAgICA7OyBzYW1wbGVzCisgICAgICAgICAgICAgIGxpY2Vuc2U6eDExCisgICAg ICAgICAgICAgIDs7IG1jcy9tY3MsIG1jcy9nbWNzIChkdWFsLWxpY2Vuc2VkIFgxMSkKKyAgICAg ICAgICAgICAgOzsgc29tZSBvZiBtY3MvdG9vbHMKKyAgICAgICAgICAgICAgbGljZW5zZTpncGwx KyA7OyBub3RlOiAuL21jcy9MSUNFTlNFLkdQTCBzcGVjaWZpZXMgbm8gdmVyc2lvbgorICAgICAg ICAgICAgICA7OyBtb25vL21vbm8gKHRoZSBtb25vIFZNLCBJIHRoaW5rIHRoZXkgbWVhbnQgbW9u by9taW5pKQorICAgICAgICAgICAgICBsaWNlbnNlOmxncGwyLjArIDs7IG5vdGU6IC4vbWNzL0xJ Q0VOU0UuTEdQTCBzcGVjaWZpZXMgbm8gdmVyc2lvbgorICAgICAgICAgICAgICA7OyBtY3MvamF5 CisgICAgICAgICAgICAgIGxpY2Vuc2U6YnNkLTQKKyAgICAgICAgICAgICAgOzsgbWNzL2NsYXNz L1N5c3RlbS5Db3JlL1N5c3RlbS9UaW1lWm9uZUluZm8uQW5kcm9pZC5jcworICAgICAgICAgICAg ICBsaWNlbnNlOmFzbDIuMCkpKSkKZGlmZiAtLWdpdCBhL2dudS9wYWNrYWdlcy9wYXRjaGVzL21v bm8tMi4xMS40LWZpeGVzLnBhdGNoIGIvZ251L3BhY2thZ2VzL3BhdGNoZXMvbW9uby0yLjExLjQt Zml4ZXMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uMDJhMDVm Nzk3NwotLS0gL2Rldi9udWxsCisrKyBiL2dudS9wYWNrYWdlcy9wYXRjaGVzL21vbm8tMi4xMS40 LWZpeGVzLnBhdGNoCkBAIC0wLDAgKzEsMzYgQEAKK2RpZmYgLS1naXQgYS9jb25maWd1cmUuaW4g Yi9jb25maWd1cmUuaW4KK2luZGV4IDM4Y2M2ZGMyOTI1Li40YzYwOGViMTUwZiAxMDA2NDQKKy0t LSBhL2NvbmZpZ3VyZS5pbgorKysrIGIvY29uZmlndXJlLmluCitAQCAtNDcwLDcgKzQ3MCw3IEBA IEFDX0NIRUNLX0hFQURFUlMod2NoYXIuaCkKKyBBQ19DSEVDS19IRUFERVJTKGllZWVmcC5oKQor IEFDX01TR19DSEVDS0lORyhmb3IgaXNpbmYpCisgQUNfVFJZX0xJTksoWyNpbmNsdWRlIDxtYXRo Lmg+XSwgWworLQlpbnQgZiA9IGlzaW5mICgxKTsKKysJaW50IGYgPSBpc2luZiAoMS4wKTsKKyBd LCBbCisgCUFDX01TR19SRVNVTFQoeWVzKQorIAlBQ19ERUZJTkUoSEFWRV9JU0lORiwgMSwgW2lz aW5mIGF2YWlsYWJsZV0pCitkaWZmIC0tZ2l0IGEvbW9uby9pby1sYXllci9wcm9jZXNzZXMuYyBi L21vbm8vaW8tbGF5ZXIvcHJvY2Vzc2VzLmMKK2luZGV4IDU4NmI1NDcxNWRiLi5kMjc4NTdhYTA5 MiAxMDA2NDQKKy0tLSBhL21vbm8vaW8tbGF5ZXIvcHJvY2Vzc2VzLmMKKysrKyBiL21vbm8vaW8t bGF5ZXIvcHJvY2Vzc2VzLmMKK0BAIC0xOCw2ICsxOCw3IEBACisgI2luY2x1ZGUgPGVycm5vLmg+ CisgI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorICNpbmNsdWRlIDxzeXMvc3RhdC5oPgorKyNpbmNs dWRlIDxzeXMvc3lzbWFjcm9zLmg+CisgI2luY2x1ZGUgPHVuaXN0ZC5oPgorICNpbmNsdWRlIDxz aWduYWwuaD4KKyAjaW5jbHVkZSA8c3lzL3dhaXQuaD4KK2RpZmYgLS1naXQgYS9ydW50aW1lL01h a2VmaWxlLmFtIGIvcnVudGltZS9NYWtlZmlsZS5hbQoraW5kZXggNjk1N2EyODdkMzguLjJkMDcx MjMwYTg0IDEwMDY0NAorLS0tIGEvcnVudGltZS9NYWtlZmlsZS5hbQorKysrIGIvcnVudGltZS9N YWtlZmlsZS5hbQorQEAgLTEsNiArMSwzIEBACistIyBoYWNrIHRvIHByZXZlbnQgJ2NoZWNrJyBm cm9tIGRlcGVuZGluZyBvbiAnYWxsJworLUFVVE9NQUtFX09QVElPTlMgPSBjeWdudXMKKy0KKyB0 bXBpbnN0ID0gX3RtcGluc3QKKyAKKyBub2luc3RfU0NSSVBUUyA9IG1vbm8td3JhcHBlciBtb25v ZGlzLXdyYXBwZXIKLS0gCjIuNDUuMgoK --b1=_an9yUQc81YewVJ071Mjh6ZcI5zllr0hgLHfHss8ka8A Content-Type: text/x-patch; name=0010-gnu-Add-mono-3.12.1.patch Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=0010-gnu-Add-mono-3.12.1.patch RnJvbSA5ZGRkOTM2MjhhMTdkZjFkYjdhZjVmZWQ3YjJkOWM3ZjE4MTY5YzU2IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpNZXNzYWdlLUlEOiA8OWRkZDkzNjI4YTE3ZGYxZGI3YWY1ZmVkN2IyZDlj N2YxODE2OWM1Ni4xNzMyNzA3Mjg4LmdpdC51bm11c2hAaGFzaGJhbmcuc2g+CkluLVJlcGx5LVRv OiA8M2Y4YWY2NWY3Mjg3MWQ2MWZhODVlNjkzOWY0NmNiOGRhYzE4NWM3MC4xNzMyNzA3Mjg4Lmdp dC51bm11c2hAaGFzaGJhbmcuc2g+ClJlZmVyZW5jZXM6IDwzZjhhZjY1ZjcyODcxZDYxZmE4NWU2 OTM5ZjQ2Y2I4ZGFjMTg1YzcwLjE3MzI3MDcyODguZ2l0LnVubXVzaEBoYXNoYmFuZy5zaD4KRnJv bTogdW5tdXNoIDx1bm11c2hAaGFzaGJhbmcuc2g+CkRhdGU6IFR1ZSwgMjYgTm92IDIwMjQgMTM6 MTQ6MzUKU3ViamVjdDogW1BBVENIIDEwLzIxXSBnbnU6IEFkZCBtb25vLTMuMTIuMS4KCiogZ251 L3BhY2thZ2VzL2RvdG5ldC5zY20KICAobW9uby0zLjEyLjEtZXh0ZXJuYWwtcmVwby1zcGVjcywg bW9uby0zLjEyLjEpOiBOZXcgdmFyaWFibGVzLgoKQ2hhbmdlLUlkOiBJZDVkMTM0OTIxNjNhYWJi ODQ1YzQ3NjA5ZjUyMjg3YzU1NjU0OTdhNAotLS0KIGdudS9wYWNrYWdlcy9kb3RuZXQuc2NtIHwg NTIgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKIDEgZmlsZSBjaGFu Z2VkLCA1MiBpbnNlcnRpb25zKCspCgpkaWZmIC0tZ2l0IGEvZ251L3BhY2thZ2VzL2RvdG5ldC5z Y20gYi9nbnUvcGFja2FnZXMvZG90bmV0LnNjbQppbmRleCAzMzM1ZmM1OGIxLi5lMWYxMjcyMDg4 IDEwMDY0NAotLS0gYS9nbnUvcGFja2FnZXMvZG90bmV0LnNjbQorKysgYi9nbnUvcGFja2FnZXMv ZG90bmV0LnNjbQpAQCAtNjU2LDMgKzY1Niw1NSBAQCAoZGVmaW5lLXB1YmxpYyBtb25vLTMuMAog ICAgICAgICAgICAgICBsaWNlbnNlOmFzbDIuMAogICAgICAgICAgICAgICA7OyAuL3N1cHBvcnQs IGNvbnRhaW5zIGEgY29weSBvZiB6bGliCiAgICAgICAgICAgICAgIGxpY2Vuc2U6emxpYikpKSkK KworKGRlZmluZSBtb25vLTMuMTIuMS1leHRlcm5hbC1yZXBvLXNwZWNzCisgIDs7IGZvcm1hdDog KHtyZXBvbmFtZSBPUiAocmVwb25hbWUgZGlyLW5hbWUpfSBjb21taXQgc2hhMjU2KSAuLi4KKyAg JygoImFzcG5ldHdlYnN0YWNrIiAgICAgICAgICAgICAgICJlNzdiMTJlNmNjNWVkMjYwYTk4NDQ3 ZjYwOWU4ODczMzdlNDRlMjk5IgorICAgICAiMHJrczM0NHFyNGZtcDNmczEyNjRkMnFrbW0zNDht OGQxa2pkN3o0bDk0aWlpcnduMWZxMSIpCisgICAgKCJjZWNpbCIgICAgICAgICAgICAgICAgICAg ICAgICAiMzNkNTBiODc0ZmQ1MjcxMThiYzM2MWQ4M2RlM2Q0OTRlOGJiNTVlMSIKKyAgICAgIjFw NGhsMTc5NmliMjZ5a3lmNXNubDZjajBseDB2N21qaDB4cWhqdzZxZGg3NTNuc2p5aGIiKQorICAg ICgiZW50aXR5ZnJhbWV3b3JrIiAgICAgICAgICAgICAgImE1ZmFkZGVjYTJiZWUwODYzNmYxYjdi M2FmODM4OWJkNDExOWY0Y2QiCisgICAgICIwYjA1cHpmNnF3ZGQ5MnBienltMzJuZm13OHJxMzY4 MjB2ZHpha3Exa3lrZm1kZGpyOWE3IikKKyAgICAoImlrZGFzbSIgICAgICAgICAgICAgICAgICAg ICAgICI3ZGVkNGRlY2I5YzM5NDQ2YmU2MzRkNDJhNTc1ZmRhOWJjM2Q5NDVjIgorICAgICAiMGYz bWJmaXp4bXZyNW5qajEyM3cwd243c3o4NXY1cTJtendpampxbDh3MTA5NWkwOTE2bCIpCisgICAg KCgiaWt2bS1mb3JrIiAiaWt2bSIpICAgICAgICAgICAiMjI1MzRkZTIwOThhY2JjZjIwOGY2YjA2 ODM2ZDEyMmRhYjc5OWU0YiIKKyAgICAgIjFpdnl3eTVzYzU5NHNsM2JzOXhya25hMWRiaGtwN3Yx bXY3OW45NnlkZ3E2emNzMDY5OGwiKQorICAgICgiTHVjZW5lLk5ldCIgICAgICAgICAgICAgICAg ICAgIjg4ZmI2N2IwNzYyMWRmZWQwNTRkOGQ3NWZkNTA2NzJmYjI2MzQ5ZGYiCisgICAgICIxcmZ4 cWZ6N2hrcDlyZzVhbnZ4bHY2Zm5hMHhpMGJudjF5OHFiaGY4eDQ4bDA4eWpiMzhrIikKKyAgICAo Ik5ld3RvbnNvZnQuSnNvbiIgICAgICAgICAgICAgICI0NzFjM2UwODAzYTlmNDBhMGFjYzhhZWNl YjMxZGU2ZmY5M2E1MmM0IgorICAgICAiMGRnbmdkNWhxazZ5aGxnNDBrYWJuNnFkbmtubTMyemN4 OXE2Ym0ydzMxY3Nuc2s1OTc4cyIpCisgICAgKCJyeCIgICAgICAgICAgICAgICAgICAgICAgICAg ICAiMDBjMWFhZGYxNDkzMzRjNjk0ZDJhNTA5Njk4M2E4NGNmNDYyMjFiOCIKKyAgICAgIjBuZGFt MHFybmtiNGdqMjFsYXBxZ2N5MG1xdzdzMTh2aXN3c2p5anlhYWE0ZmdxdzhrbXEiKSkpCisKKyhk ZWZpbmUtcHVibGljIG1vbm8tMy4xMi4xCisgIChwYWNrYWdlCisgICAgKGluaGVyaXQgbW9uby0z LjApCisgICAgKHZlcnNpb24gIjMuMTIuMSIpCisgICAgKG5hbWUgIm1vbm8iKQorICAgIChzb3Vy Y2UgKG9yaWdpbgorICAgICAgICAgICAgICAobWV0aG9kIGdpdC1mZXRjaCkKKyAgICAgICAgICAg ICAgKHVyaQorICAgICAgICAgICAgICAgKGdpdC1yZWZlcmVuY2UKKyAgICAgICAgICAgICAgICAo dXJsICJodHRwczovL2dpdGxhYi53aW5laHEub3JnL21vbm8vbW9uby5naXQiKQorICAgICAgICAg ICAgICAgIChjb21taXQgKHN0cmluZy1hcHBlbmQgIm1vbm8tIiAiMy4xMi4xIikpKSkKKyAgICAg ICAgICAgICAgKGZpbGUtbmFtZSAoZ2l0LWZpbGUtbmFtZSBuYW1lIHZlcnNpb24pKQorICAgICAg ICAgICAgICAoc2hhMjU2CisgICAgICAgICAgICAgICAoYmFzZTMyCisgICAgICAgICAgICAgICAg IjAxc3hybmZjaDYxazh2N2F2N2NjYm15M3YzN2t5OHlwODQ2MGo2eWNuYnlmYTMzMDV5MGYiKSkK KyAgICAgICAgICAgICAgKG1vZHVsZXMgJygoZ3VpeCBidWlsZCB1dGlscykKKyAgICAgICAgICAg ICAgICAgICAgICAgICAoaWNlLTkgc3RyaW5nLWZ1bikpKQorICAgICAgICAgICAgICAoc25pcHBl dCAjfihiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIyQoYWRkLWV4dGVybmFsLXJl cG9zCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb25vLTMuMTIuMS1leHRlcm5hbC1y ZXBvLXNwZWNzKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIyRwcmVwYXJlLW1vbm8tc291 cmNlKSkpKQorICAgIChuYXRpdmUtaW5wdXRzIChtb2RpZnktaW5wdXRzIChwYWNrYWdlLW5hdGl2 ZS1pbnB1dHMgbW9uby0zLjApCisgICAgICAgICAgICAgICAgICAgICAocmVwbGFjZSAibW9ubyIg bW9uby0zLjApKSkKKyAgICAoYXJndW1lbnRzCisgICAgIChzdWJzdGl0dXRlLWtleXdvcmQtYXJn dW1lbnRzIChwYWNrYWdlLWFyZ3VtZW50cyBtb25vLTMuMCkKKyAgICAgICAoKCM6cGhhc2VzIHBo YXNlcyAjfiVzdGFuZGFyZC1waGFzZXMpCisgICAgICAgICN+KG1vZGlmeS1waGFzZXMgIyRwaGFz ZXMKKyAgICAgICAgICAgIChhZGQtYWZ0ZXIgJ3VucGFjayAnc2V0LVRaCisgICAgICAgICAgICAg IChsYW1iZGEgXworICAgICAgICAgICAgICAgIDs7IGZvciBzb21lIHJlYXNvbiBhIGRlZmF1bHQg aXMgb25seSB1c2VkIGlmIHRoaXMgaXMgZW1wdHksIG5vdAorICAgICAgICAgICAgICAgIDs7IGlm IGl0IGlzIHVuc2V0LgorICAgICAgICAgICAgICAgIChzZXRlbnYgIlRaIiAiIikpKSkpKSkpKQot LSAKMi40NS4yCgo= --b1=_an9yUQc81YewVJ071Mjh6ZcI5zllr0hgLHfHss8ka8A Content-Type: text/x-patch; name=0006-gnu-Add-mono-2.4.2.patch Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=0006-gnu-Add-mono-2.4.2.patch RnJvbSA5OGNlN2VjN2Y0ZDBjZDY2Yzc3YjdlZGM0MzZmMDAwYWQxYjdhZjQwIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpNZXNzYWdlLUlEOiA8OThjZTdlYzdmNGQwY2Q2NmM3N2I3ZWRjNDM2ZjAw MGFkMWI3YWY0MC4xNzMyNzA3Mjg4LmdpdC51bm11c2hAaGFzaGJhbmcuc2g+CkluLVJlcGx5LVRv OiA8M2Y4YWY2NWY3Mjg3MWQ2MWZhODVlNjkzOWY0NmNiOGRhYzE4NWM3MC4xNzMyNzA3Mjg4Lmdp dC51bm11c2hAaGFzaGJhbmcuc2g+ClJlZmVyZW5jZXM6IDwzZjhhZjY1ZjcyODcxZDYxZmE4NWU2 OTM5ZjQ2Y2I4ZGFjMTg1YzcwLjE3MzI3MDcyODguZ2l0LnVubXVzaEBoYXNoYmFuZy5zaD4KRnJv bTogdW5tdXNoIDx1bm11c2hAaGFzaGJhbmcuc2g+CkRhdGU6IFR1ZSwgMjYgTm92IDIwMjQgMTM6 MDI6MzEKU3ViamVjdDogW1BBVENIIDA2LzIxXSBnbnU6IEFkZCBtb25vLTIuNC4yLgoKKiBnbnUv cGFja2FnZXMvZG90bmV0LnNjbSAobW9uby0yLjQuMik6IE5ldyB2YXJpYWJsZS4KKiBnbnUvcGFj a2FnZXMvcGF0Y2hlcy9tb25vLTIuNC4yLjMtZml4ZXMucGF0Y2g6IE5ldyBwYXRjaC4KKiBnbnUv bG9jYWwubWsgKGRpc3RfcGF0Y2hfREFUQSk6IFJlZ2lzdGVyIGl0LgoKQ2hhbmdlLUlkOiBJMTRm ZjAxZDVmYjNjM2YyM2M4M2Y4NTE4OTkwYTc5MzI5NDkwZDNiOQotLS0KIGdudS9sb2NhbC5tayAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAxICsKIGdudS9wYWNrYWdlcy9kb3Ru ZXQuc2NtICAgICAgICAgICAgICAgICAgICAgICB8IDUzICsrKysrKysrKysrKysrKysrCiBnbnUv cGFja2FnZXMvcGF0Y2hlcy9tb25vLTIuNC4yLjMtZml4ZXMucGF0Y2ggfCA1OSArKysrKysrKysr KysrKysrKysrCiAzIGZpbGVzIGNoYW5nZWQsIDExMyBpbnNlcnRpb25zKCspCiBjcmVhdGUgbW9k ZSAxMDA2NDQgZ251L3BhY2thZ2VzL3BhdGNoZXMvbW9uby0yLjQuMi4zLWZpeGVzLnBhdGNoCgpk aWZmIC0tZ2l0IGEvZ251L2xvY2FsLm1rIGIvZ251L2xvY2FsLm1rCmluZGV4IDg1MmIzM2UwYWEu LmQwOGMwM2E2ODkgMTAwNjQ0Ci0tLSBhL2dudS9sb2NhbC5taworKysgYi9nbnUvbG9jYWwubWsK QEAgLTE3NjMsNiArMTc2Myw3IEBAIGRpc3RfcGF0Y2hfREFUQSA9CQkJCQkJXAogICAlRCUvcGFj a2FnZXMvcGF0Y2hlcy9tb25vLTEuMi42LWJvb3RzdHJhcC5wYXRjaAkJXAogICAlRCUvcGFja2Fn ZXMvcGF0Y2hlcy9tb25vLTEuOS4xLWFkZC1NT05PX0NSRUFURV9JTUFHRV9WRVJTSU9OLnBhdGNo CQlcCiAgICVEJS9wYWNrYWdlcy9wYXRjaGVzL21vbm8tMS45LjEtZml4ZXMucGF0Y2gJCQlcCisg ICVEJS9wYWNrYWdlcy9wYXRjaGVzL21vbm8tMi40LjIuMy1maXhlcy5wYXRjaAkJCVwKICAgJUQl L3BhY2thZ2VzL3BhdGNoZXMvbW9zYWljYXRjaGVyLXVuYnVuZGxlLWh0c2xpYi5wYXRjaAlcCiAg ICVEJS9wYWNrYWdlcy9wYXRjaGVzL21ycmVzY3VlLXN1cHBvcnQtbG92ZS0xMS5wYXRjaAkJXAog ICAlRCUvcGFja2FnZXMvcGF0Y2hlcy9tdG9vbHMtbWZvcm1hdC11bmluaXRpYWxpemVkLnBhdGNo CVwKZGlmZiAtLWdpdCBhL2dudS9wYWNrYWdlcy9kb3RuZXQuc2NtIGIvZ251L3BhY2thZ2VzL2Rv dG5ldC5zY20KaW5kZXggNDkzNmExMzk0Zi4uMjQxMTU3Y2RjZSAxMDA2NDQKLS0tIGEvZ251L3Bh Y2thZ2VzL2RvdG5ldC5zY20KKysrIGIvZ251L3BhY2thZ2VzL2RvdG5ldC5zY20KQEAgLTQyMiwz ICs0MjIsNTYgQEAgKGRlZmluZS1wdWJsaWMgbW9uby0xLjkuMQogICAgICAgICAgICAgICAgIChw YXRjaC1zaGViYW5nICJtb25vL3Rlc3RzL3Rlc3QtZHJpdmVyIikpKSkpCiAgICAgICAgKCgjOnRl c3RzPyBfICNmKSAjZikKICAgICAgICAoKCM6cGFyYWxsZWwtdGVzdHM/IF8gI2YpICNmKSkpKSkK KworKGRlZmluZS1wdWJsaWMgbW9uby0yLjQuMgorICAocGFja2FnZQorICAgIChpbmhlcml0IG1v bm8tMS45LjEpCisgICAgKHZlcnNpb24gIjIuNC4yLjMiKQorICAgIChuYW1lICJtb25vIikKKyAg ICAoc291cmNlIChvcmlnaW4KKyAgICAgICAgICAgICAgKG1ldGhvZCBnaXQtZmV0Y2gpCisgICAg ICAgICAgICAgICh1cmkKKyAgICAgICAgICAgICAgIChnaXQtcmVmZXJlbmNlCisgICAgICAgICAg ICAgICAgKHVybCAiaHR0cHM6Ly9naXRsYWIud2luZWhxLm9yZy9tb25vL21vbm8uZ2l0IikKKyAg ICAgICAgICAgICAgICAoY29tbWl0IChzdHJpbmctYXBwZW5kICJtb25vLSIgIjItNC0yLTMiKSkp KQorICAgICAgICAgICAgICAoZmlsZS1uYW1lIChnaXQtZmlsZS1uYW1lIG5hbWUgdmVyc2lvbikp CisgICAgICAgICAgICAgIChzaGEyNTYKKyAgICAgICAgICAgICAgIChiYXNlMzIKKyAgICAgICAg ICAgICAgICAiMG1ucmsxN3JkOWM1cmgzMGRoODJhMzljOWFrMW5zOTk4YjQxaXZwcnZ5N20wNjhz a3BkYSIpKQorICAgICAgICAgICAgICAobW9kdWxlcyAnKChndWl4IGJ1aWxkIHV0aWxzKQorICAg ICAgICAgICAgICAgICAgICAgICAgIChpY2UtOSBzdHJpbmctZnVuKSkpCisgICAgICAgICAgICAg IChzbmlwcGV0IHByZXBhcmUtbW9uby1zb3VyY2UpCisgICAgICAgICAgICAgIChwYXRjaGVzCisg ICAgICAgICAgICAgICAoc2VhcmNoLXBhdGNoZXMgIm1vbm8tMi40LjIuMy1maXhlcy5wYXRjaCIp KSkpCisgICAgKG5hdGl2ZS1pbnB1dHMgKG1vZGlmeS1pbnB1dHMgKHBhY2thZ2UtbmF0aXZlLWlu cHV0cyBtb25vLTEuOS4xKQorICAgICAgICAgICAgICAgICAgICAgKHJlcGxhY2UgIm1vbm8iIG1v bm8tMS45LjEpKSkKKyAgICAoaW5wdXRzIChtb2RpZnktaW5wdXRzIChwYWNrYWdlLWlucHV0cyBt b25vLTEuOS4xKQorICAgICAgICAgICAgICAoYXBwZW5kIGdldHRleHQtbWluaW1hbCkpKQorICAg IChhcmd1bWVudHMKKyAgICAgKHN1YnN0aXR1dGUta2V5d29yZC1hcmd1bWVudHMgKHBhY2thZ2Ut YXJndW1lbnRzIG1vbm8tMS45LjEpCisgICAgICAgKCgjOnRlc3RzPyBfICNmKQorICAgICAgICA7 OyBXaGVuIGl0IHRyaWVzIGJ1aWxkaW5nIGlsdGVzdHMuaWwgaW4gbW9uby9taW5pLCBpdCBnZXRz OiBlcnJvcgorICAgICAgICA7OyBDUzAwMDY6IGNhbm5vdCBmaW5kIG1ldGFkYXRhIGZpbGUgYFRl c3REcml2ZXIuZGxsJy4gIEl0IGJ1aWxkcyBmaW5lCisgICAgICAgIDs7IG91dHNpZGUgb2YgdGhl IGJ1aWxkIGVudmlyb25tZW50LCBidXQgbGF0ZXIgdGVzdHMgZmFpbCwgYW5kIEkgY2FuJ3QKKyAg ICAgICAgOzsgYmUgYm90aGVyZWQgdG8gZmlndXJlIG91dCB3aGF0J3MgY2F1c2luZyBpbGFzbSB0 byBub3QgZmluZAorICAgICAgICA7OyBUZXN0RHJpdmVyLmRsbC4KKyAgICAgICAgI2YpCisgICAg ICAgKCgjOnBhcmFsbGVsLWJ1aWxkPyBfKSAjdCkKKyAgICAgICAoKCM6cGhhc2VzIHBoYXNlcyAj fiVzdGFuZGFyZC1waGFzZXMpCisgICAgICAgICN+KG1vZGlmeS1waGFzZXMgIyRwaGFzZXMKKyAg ICAgICAgICAgIChhZGQtYmVmb3JlICdib290c3RyYXAgJ3BhdGNoLXN1Yi1hdXRvZ2VuLnNoLXNo ZWJhbmcKKyAgICAgICAgICAgICAgKGxhbWJkYSBfCisgICAgICAgICAgICAgICAgKHBhdGNoLXNo ZWJhbmcgIi4vZWdsaWIvYXV0b2dlbi5zaCIpKSkpKSkpCisgICAgKGxpY2Vuc2UgKGxpc3QKKyAg ICAgICAgICAgICAgOzsgbW9zdCBvZiBtY3MvdG9vbHMsIG1vbm8vbWFuLCBtb3N0IG9mIG1jcy9j bGFzcywgdGVzdHMgYnkKKyAgICAgICAgICAgICAgOzsgZGVmYXVsdCwgbW9uby9lZ2xpYgorICAg ICAgICAgICAgICA7OyBtY3MvbWNzLCBtY3MvZ21jcyAoZHVhbC1saWNlbnNlZCBHUEwpCisgICAg ICAgICAgICAgIDs7IHNhbXBsZXMKKyAgICAgICAgICAgICAgbGljZW5zZTp4MTEKKyAgICAgICAg ICAgICAgOzsgbWNzL21jcywgbWNzL2dtY3MgKGR1YWwtbGljZW5zZWQgWDExKQorICAgICAgICAg ICAgICA7OyBzb21lIG9mIG1jcy90b29scworICAgICAgICAgICAgICBsaWNlbnNlOmdwbDErIDs7 IG5vdGU6IC4vbWNzL0xJQ0VOU0UuR1BMIHNwZWNpZmllcyBubyB2ZXJzaW9uCisgICAgICAgICAg ICAgIDs7IG1vbm8vbW9ubyAodGhlIG1vbm8gVk0sIEkgdGhpbmsgdGhleSBtZWFudCBtb25vL21p bmkpCisgICAgICAgICAgICAgIGxpY2Vuc2U6bGdwbDIuMCsgOzsgbm90ZTogLi9tY3MvTElDRU5T RS5MR1BMIHNwZWNpZmllcyBubyB2ZXJzaW9uCisgICAgICAgICAgICAgIDs7IG1jcy9qYXkKKyAg ICAgICAgICAgICAgbGljZW5zZTpic2QtNCkpKSkKZGlmZiAtLWdpdCBhL2dudS9wYWNrYWdlcy9w YXRjaGVzL21vbm8tMi40LjIuMy1maXhlcy5wYXRjaCBiL2dudS9wYWNrYWdlcy9wYXRjaGVzL21v bm8tMi40LjIuMy1maXhlcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw MDAwLi4xM2NmZjc3NDUwCi0tLSAvZGV2L251bGwKKysrIGIvZ251L3BhY2thZ2VzL3BhdGNoZXMv bW9uby0yLjQuMi4zLWZpeGVzLnBhdGNoCkBAIC0wLDAgKzEsNTkgQEAKK2RpZmYgLS1naXQgYS9k YXRhL21vbm8ucGMuaW4gYi9kYXRhL21vbm8ucGMuaW4KK2luZGV4IDZkYTA5NjBkYjJkLi5kNDNi YjE4NzIxOCAxMDA2NDQKKy0tLSBhL2RhdGEvbW9uby5wYy5pbgorKysrIGIvZGF0YS9tb25vLnBj LmluCitAQCAtNyw2ICs3LDYgQEAgc3lzY29uZmRpcj1Ac3lzY29uZmRpckAKKyBOYW1lOiBNb25v CisgRGVzY3JpcHRpb246IE1vbm8gUnVudGltZQorIFZlcnNpb246IEBWRVJTSU9OQAorLVJlcXVp cmVzOiBnbGliLTIuMCBndGhyZWFkLTIuMAorK1JlcXVpcmVzOiBnbGliLTIuMCBndGhyZWFkLTIu MCBiZHctZ2MKKyBMaWJzOiAtTCR7bGliZGlyfSBAZXhwb3J0X2xkZmxhZ3NAIC1sbW9ubyBAbGli bW9ub19sZGZsYWdzQAorIENmbGFnczogLUkke2luY2x1ZGVkaXJ9IEBsaWJtb25vX2NmbGFnc0AK K2RpZmYgLS1naXQgYS9tb25vLXVuaW5zdGFsbGVkLnBjLmluIGIvbW9uby11bmluc3RhbGxlZC5w Yy5pbgoraW5kZXggN2ZhM2YxMmRjOTEuLjJhMDczNDM2MmZkIDEwMDY0NAorLS0tIGEvbW9uby11 bmluc3RhbGxlZC5wYy5pbgorKysrIGIvbW9uby11bmluc3RhbGxlZC5wYy5pbgorQEAgLTEsNiAr MSw2IEBACisgTmFtZTogTW9ubworIERlc2NyaXB0aW9uOiBNb25vIFJ1bnRpbWUKKyBWZXJzaW9u OiBAVkVSU0lPTkAKKy1SZXF1aXJlczogZ2xpYi0yLjAgZ3RocmVhZC0yLjAKKytSZXF1aXJlczog Z2xpYi0yLjAgZ3RocmVhZC0yLjAgYmR3LWdjCisgTGliczogLUxAbW9ub19idWlsZF9yb290QC9t b25vL21pbmkvLmxpYnMgQGV4cG9ydF9sZGZsYWdzQCAtbG1vbm8gQGxpYm1vbm9fbGRmbGFnc0AK KyBDZmxhZ3M6IC1JQGFic190b3Bfc3JjZGlyQCAtSUBhYnNfdG9wX3NyY2RpckAvbW9ubyBAbGli bW9ub19jZmxhZ3NACitkaWZmIC0tZ2l0IGEvbW9uby9tZXRhZGF0YS9NYWtlZmlsZS5hbSBiL21v bm8vbWV0YWRhdGEvTWFrZWZpbGUuYW0KK2luZGV4IDgzZjg1MzIzNjliLi4zZmNhN2ZjMTNiOSAx MDA2NDQKKy0tLSBhL21vbm8vbWV0YWRhdGEvTWFrZWZpbGUuYW0KKysrKyBiL21vbm8vbWV0YWRh dGEvTWFrZWZpbGUuYW0KK0BAIC0xNzEsNyArMTcxLDYgQEAgbGlibW9ub3J1bnRpbWVpbmNsdWRl X0hFQURFUlMgPSBcCisgCW9iamVjdC5oCVwKKyAJZXhjZXB0aW9uLmgJXAorIAlwcm9maWxlci5o CVwKKy0JYXBwZG9tYWluLmgJXAorIAltb25vLWNvbmZpZy5oCVwKKyAJZGVidWctaGVscGVycy5o CVwKKyAJbWVtcG9vbC5oCitkaWZmIC0tZ2l0IGEvbW9uby9taW5pL2RyaXZlci5jIGIvbW9uby9t aW5pL2RyaXZlci5jCitpbmRleCA0OGNhMmQ5Njg5OS4uOWZiMzUxMjIwMGIgMTAwNjQ0CistLS0g YS9tb25vL21pbmkvZHJpdmVyLmMKKysrKyBiL21vbm8vbWluaS9kcml2ZXIuYworQEAgLTEyMzYs NiArMTIzNiw3IEBAIG1vbm9fbWFpbiAoaW50IGFyZ2MsIGNoYXIqIGFyZ3ZbXSkKKyAjZW5kaWYK KyAJaWYgKCFnX3RocmVhZF9zdXBwb3J0ZWQgKCkpCisgCQlnX3RocmVhZF9pbml0IChOVUxMKTsK KysgICAgICAgIEdDX2FsbG93X3JlZ2lzdGVyX3RocmVhZHMoKTsKKyAKKyAJaWYgKG1vbm9fcnVu bmluZ19vbl92YWxncmluZCAoKSAmJiBnZXRlbnYgKCJNT05PX1ZBTEdSSU5EX0xFQUtfQ0hFQ0si KSkgeworIAkJR01lbVZUYWJsZSBtZW1fdnRhYmxlOworZGlmZiAtLWdpdCBhL3J1bnRpbWUvTWFr ZWZpbGUuYW0gYi9ydW50aW1lL01ha2VmaWxlLmFtCitpbmRleCAwZTg3NmUyYTQ5MS4uYjljZDBh OTlkOWUgMTAwNjQ0CistLS0gYS9ydW50aW1lL01ha2VmaWxlLmFtCisrKysgYi9ydW50aW1lL01h a2VmaWxlLmFtCitAQCAtMSw2ICsxLDMgQEAKKy0jIGhhY2sgdG8gcHJldmVudCAnY2hlY2snIGZy b20gZGVwZW5kaW5nIG9uICdhbGwnCistQVVUT01BS0VfT1BUSU9OUyA9IGN5Z251cworLQorIHRt cGluc3QgPSBfdG1waW5zdAorIAorIG5vaW5zdF9TQ1JJUFRTID0gbW9uby13cmFwcGVyIG1vbm9k aXMtd3JhcHBlcgotLSAKMi40NS4yCgo= --b1=_an9yUQc81YewVJ071Mjh6ZcI5zllr0hgLHfHss8ka8A Content-Type: text/x-patch; name=0014-gnu-Add-mono-5.2.0.patch Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=0014-gnu-Add-mono-5.2.0.patch RnJvbSAwYTc5NWFhNjgzZjQxNjczNzU2YjQ2YWNiNWVjMjlhNTI4YzY1NDY5IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpNZXNzYWdlLUlEOiA8MGE3OTVhYTY4M2Y0MTY3Mzc1NmI0NmFjYjVlYzI5 YTUyOGM2NTQ2OS4xNzMyNzA3Mjg4LmdpdC51bm11c2hAaGFzaGJhbmcuc2g+CkluLVJlcGx5LVRv OiA8M2Y4YWY2NWY3Mjg3MWQ2MWZhODVlNjkzOWY0NmNiOGRhYzE4NWM3MC4xNzMyNzA3Mjg4Lmdp dC51bm11c2hAaGFzaGJhbmcuc2g+ClJlZmVyZW5jZXM6IDwzZjhhZjY1ZjcyODcxZDYxZmE4NWU2 OTM5ZjQ2Y2I4ZGFjMTg1YzcwLjE3MzI3MDcyODguZ2l0LnVubXVzaEBoYXNoYmFuZy5zaD4KRnJv bTogdW5tdXNoIDx1bm11c2hAaGFzaGJhbmcuc2g+CkRhdGU6IFR1ZSwgMjYgTm92IDIwMjQgMTM6 MzM6MzgKU3ViamVjdDogW1BBVENIIDE0LzIxXSBnbnU6IEFkZCBtb25vLTUuMi4wLgoKKiBnbnUv cGFja2FnZXMvZG90bmV0LnNjbQogIChtb25vLTUuMi4wLWV4dGVybmFsLXJlcG8tc3BlY3MsIG1v bm8tNS4yLjApOiBOZXcgdmFyaWFibGVzLgoKQ2hhbmdlLUlkOiBJMDg5ODUwYmZkNTBmMjI5YWY1 YTIzNmJiYzM5ZWU5YWU0Nzg3ZWY5ZgotLS0KIGdudS9wYWNrYWdlcy9kb3RuZXQuc2NtIHwgNjcg KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKIDEgZmlsZSBjaGFuZ2Vk LCA2NyBpbnNlcnRpb25zKCspCgpkaWZmIC0tZ2l0IGEvZ251L3BhY2thZ2VzL2RvdG5ldC5zY20g Yi9nbnUvcGFja2FnZXMvZG90bmV0LnNjbQppbmRleCBkYTI5NjFiZmY0Li5mYjEzNmQwOWMyIDEw MDY0NAotLS0gYS9nbnUvcGFja2FnZXMvZG90bmV0LnNjbQorKysgYi9nbnUvcGFja2FnZXMvZG90 bmV0LnNjbQpAQCAtMTAzOCwzICsxMDM4LDcwIEBAIChkZWZpbmUtcHVibGljIG1vbm8tNS4xLjAK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICMkQHByZXBhcmUtbW9uby1zb3VyY2UtMCkpKSkK ICAgICAobmF0aXZlLWlucHV0cyAobW9kaWZ5LWlucHV0cyAocGFja2FnZS1uYXRpdmUtaW5wdXRz IG1vbm8tNS4wLjEpCiAgICAgICAgICAgICAgICAgICAgICAocmVwbGFjZSAibW9ubyIgbW9uby01 LjAuMSkpKSkpCisKKyhkZWZpbmUgbW9uby01LjIuMC1leHRlcm5hbC1yZXBvLXNwZWNzCisgICco KCJhc3BuZXR3ZWJzdGFjayIgICAgICAgICAgICAgICJlNzdiMTJlNmNjNWVkMjYwYTk4NDQ3ZjYw OWU4ODczMzdlNDRlMjk5IgorICAgICAiMHJrczM0NHFyNGZtcDNmczEyNjRkMnFrbW0zNDhtOGQx a2pkN3o0bDk0aWlpcnduMWZxMSIpCisgICAgKCgicmVmZXJlbmNlLWFzc2VtYmxpZXMiICJiaW5h cnktcmVmZXJlbmNlLWFzc2VtYmxpZXMiKQorICAgICAiMTQyY2JlYjYyZmZhYmYxZGQ5YzE0MTRk OGRkNzZmOTNiY2JlZDBjMiIKKyAgICAgIjF3a2Q1ODloZ2IxNm01enZtcDl5YjU3YWd5eXJ5YWEx amo4dmhsNHcyMGkyaHAyMndhZDkiKQorICAgICgiYm9ja2J1aWxkIiAgICAgICAgICAgICAgICAg ICAiNDVhYTE0MmZhMzIyZjViNDEwNTFlN2Y0MDAwOGYwMzM0NmExZTExOSIKKyAgICAgIjFzamxn emgzaHEyNTFrNzI5YTFweDcwN2MxcTJnbmZheWdoZ3gxejVxeWRkbnlheG5hMjAiKQorICAgICgi Ym9yaW5nc3NsIiAgICAgICAgICAgICAgICAgICAiM2UwNzcwZTE4ODM1NzE0NzA4ODYwYmE5ZmUx YWYwNGE5MzI5NzFmZiIKKyAgICAgIjEzOWEwZ2w5MWE1MmsycjZuYTZpYWx6a3F5a2FqMXJrODh6 anJrYXozc2R4eDdubW1nNnkiKQorICAgICgiYnVpbGR0b29scyIgICAgICAgICAgICAgICAgICAi YjVjYzZlNmFiNWY3MWY2YzBiZTdiNzMwMDU4YjQyNmU5MjUyODQ3OSIKKyAgICAgIjBsZGo1bDRw NHE4ajlkaGswbmlmcjNtMGk2NGNzdmI1NndsYzJ4ZDR6eTgwc2ZnbWpuMDYiKQorICAgICgiY2Vj aWwiICAgICAgICAgICAgICAgICAgICAgICAiMzYyZTJiYjAwZmE2OTNkMDRjMmQxNDBhNGNkMzEz ZWI4MmM3OGQ5NSIKKyAgICAgIjBidmFhdmxubGRyamE4aXhiNjZiZzMza3owNTk1MHZtNXNrNHB6 MGswempnc3BmZ3BjdmQiKQorICAgICgoImNlY2lsIiAiY2VjaWwtbGVnYWN5IikgICAgICAiMzNk NTBiODc0ZmQ1MjcxMThiYzM2MWQ4M2RlM2Q0OTRlOGJiNTVlMSIKKyAgICAgIjFwNGhsMTc5Nmli MjZ5a3lmNXNubDZjajBseDB2N21qaDB4cWhqdzZxZGg3NTNuc2p5aGIiKQorICAgICgiY29yZWZ4 IiAgICAgICAgICAgICAgICAgICAgICAiNzgzNjBiMjJlNzFiNzBkZTFkOGNjOTU4OGNiNGVmMDA0 MDQ0OWMzMSIKKyAgICAgIjF3cnN6YWZ5YXI3cTFjZGZiYTY4eGQ2YjRkNTRwM2lpbTJjem14Ymxt czF5dzE5eWNxbTciKQorICAgICgiY29yZXJ0IiAgICAgICAgICAgICAgICAgICAgICAiZWQ2Mjk2 ZGZiYjg4ZDY2ZjA4NjAxYzAxM2NhZWUzMGM4OGM0MWFmYSIKKyAgICAgIjE3OXExYWlxNDRiemRj a2cxeHFtNml3eXg4MzVjcDYxNjF3NXZnc2ZyZ2J3MHAza2lkeHIiKQorICAgICgiaWtkYXNtIiAg ICAgICAgICAgICAgICAgICAgICAiODhiNjdjNDJjYThiN2Q1ODE0MWMxNzZiNDY3NDk4MTliZmNl ZjE2NiIKKyAgICAgIjBiMGIxZGhnODByNjQwbjgxaXFhd3dreGkxazI4OW40enhqZmowbGRkOXJr dmZ4dmx3YXciKQorICAgICgoImlrdm0tZm9yayIgImlrdm0iKSAgICAgICAgICAiN2MxZTYxYmVj OGMwNjliMmNjOWUyMTRjMzA5NGIxNDdkNzZiYmY4MiIKKyAgICAgIjB2bWM1cjRqNzZoa2Q0emlz MTc2OXBwZGwxaDFsN3o4Y2xkMHk0cDFtNjRuODZnaGt6Zm4iKQorICAgICgibGlua2VyIiAgICAg ICAgICAgICAgICAgICAgICAiYzc0NTBjYTI2NjliZWNkZGZmZGVhN2RjZGNjMDY2OTJlNTc5ODll MSIKKyAgICAgIjB2ZDF2dzZocW0xcDEyN202MDc5cDluNHhyY2tyZjRpYWt2ajQxaG5xZnd3czk0 dzVtdjEiKQorICAgICgiTHVjZW5lLk5ldC5MaWdodCIgICAgICAgICAgICAiODU5NzhiN2ViOTQ3 MzhmNTE2ODI0MzQxMjEzZDVlOTQwNjBmNTI4NCIKKyAgICAgIjBkMTE4aTUybTNhMHZmamhmY2k4 MWEya2M0cXZuajIzZ3MwMmhydmRyZnBkMXE5MmZ5aWkiKQorICAgICgiTmV3dG9uc29mdC5Kc29u IiAgICAgICAgICAgICAiNDcxYzNlMDgwM2E5ZjQwYTBhY2M4YWVjZWIzMWRlNmZmOTNhNTJjNCIK KyAgICAgIjBkZ25nZDVocWs2eWhsZzQwa2FibjZxZG5rbm0zMnpjeDlxNmJtMnczMWNzbnNrNTk3 OHMiKQorICAgICgoIk51R2V0LkJ1aWxkVGFza3MiICJudWdldC1idWlsZHRhc2tzIikKKyAgICAg IjhkMzA3NDcyZWEyMTRmMmI1OTYzNjQzMWY3NzE4OTRkYmNiYTcyNTgiCisgICAgICIxaDFmcm5q MHg4azdiMjlpYzRqaXNjaDB2bHBtc21naGp3NTU0cHoyNzdmMm54YWlkbGpqIikKKyAgICAoKCJO VW5pdExpdGUiICJudW5pdC1saXRlIikgICAgIjY5MDYwM2JlYTk4YWFlNjlmY2E5YTY1MTMwZDg4 NTkxYmM2Y2FiZWUiCisgICAgICIxZjg0NXlzanpzM3lkOWdjeXd3NjZkbmt4NDg0ejVma25iOGww eHo3NHNqbXhrMm1uZ3djIikKKyAgICA7OyAoInJvc2x5bi1iaW5hcmllcyIgICAgICAgICAgImRj YjBhMDUzNGQ1MTA0ZWFmOTQ1ZDNkMWYzMTlkYzMzMDQ0YjdiYmUiCisgICAgOzsgICIiKQorICAg ICgicngiICAgICAgICAgICAgICAgICAgICAgICAgICAiYjI5YTRiMGZkYTYwOWUwYWYzM2ZmNTRl ZDEzNjUyYjZjY2YwZTA1ZSIKKyAgICAgIjFuMWp3aG1zYmtjdjJkODA2aW1tY3B6a2I3MnJ6MDR4 eTk4bXl3MzU1YTh3NWFoMjV5aXYiKQorICAgIDs7ICgieHVuaXQtYmluYXJpZXMiICAgICAgICAg ICAiYjhlMjBkMjY1YjM2OGRkNjI1MjcwM2Q1YWZkMDM4ZDBiMDI4ZTM4OCIKKyAgICA7OyAgIiIp CisgICAgKSkKKworKGRlZmluZS1wdWJsaWMgbW9uby01LjIuMAorICAocGFja2FnZQorICAgIChp bmhlcml0IG1vbm8tNS4xLjApCisgICAgKHZlcnNpb24gIjUuMi4wLjIyNCIpCisgICAgKG5hbWUg Im1vbm8iKQorICAgIChzb3VyY2UgKG9yaWdpbgorICAgICAgICAgICAgICAobWV0aG9kIGdpdC1m ZXRjaCkKKyAgICAgICAgICAgICAgKHVyaQorICAgICAgICAgICAgICAgKGdpdC1yZWZlcmVuY2UK KyAgICAgICAgICAgICAgICAodXJsICJodHRwczovL2dpdGxhYi53aW5laHEub3JnL21vbm8vbW9u by5naXQiKQorICAgICAgICAgICAgICAgIChjb21taXQgIm1vbm8tNS4yLjAuMjI0IikpKQorICAg ICAgICAgICAgICAoZmlsZS1uYW1lIChnaXQtZmlsZS1uYW1lIG5hbWUgdmVyc2lvbikpCisgICAg ICAgICAgICAgIChzaGEyNTYKKyAgICAgICAgICAgICAgIChiYXNlMzIKKyAgICAgICAgICAgICAg ICAiMHpzZ2ZxeWprcGl4MDVndmd2aHF5eXFjd2NqcDV4bHZjeXY0NzFxMzJxZjMwN2RjY2JmYSIp KQorICAgICAgICAgICAgICAobW9kdWxlcyAnKChndWl4IGJ1aWxkIHV0aWxzKQorICAgICAgICAg ICAgICAgICAgICAgICAgIChpY2UtOSBzdHJpbmctZnVuKSkpCisgICAgICAgICAgICAgIChzbmlw cGV0ICN+KGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAjJChhZGQtZXh0ZXJuYWwt cmVwb3MKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vbm8tNS4yLjAtZXh0ZXJuYWwt cmVwby1zcGVjcykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICMkQHByZXBhcmUtbW9uby1z b3VyY2UtMCkpKSkKKyAgICAobmF0aXZlLWlucHV0cyAobW9kaWZ5LWlucHV0cyAocGFja2FnZS1u YXRpdmUtaW5wdXRzIG1vbm8tNS4xLjApCisgICAgICAgICAgICAgICAgICAgICAocmVwbGFjZSAi bW9ubyIgbW9uby01LjEuMCkpKSkpCi0tIAoyLjQ1LjIKCg== --b1=_an9yUQc81YewVJ071Mjh6ZcI5zllr0hgLHfHss8ka8A Content-Type: text/x-patch; name=0012-gnu-Add-mono-5.0.1.patch Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=0012-gnu-Add-mono-5.0.1.patch RnJvbSAxNDBhYmRjMmI0MTE1MjQ2ZjBmMmFmYzY5YmQ1ZWQxMzUwYTIzNzMyIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpNZXNzYWdlLUlEOiA8MTQwYWJkYzJiNDExNTI0NmYwZjJhZmM2OWJkNWVk MTM1MGEyMzczMi4xNzMyNzA3Mjg4LmdpdC51bm11c2hAaGFzaGJhbmcuc2g+CkluLVJlcGx5LVRv OiA8M2Y4YWY2NWY3Mjg3MWQ2MWZhODVlNjkzOWY0NmNiOGRhYzE4NWM3MC4xNzMyNzA3Mjg4Lmdp dC51bm11c2hAaGFzaGJhbmcuc2g+ClJlZmVyZW5jZXM6IDwzZjhhZjY1ZjcyODcxZDYxZmE4NWU2 OTM5ZjQ2Y2I4ZGFjMTg1YzcwLjE3MzI3MDcyODguZ2l0LnVubXVzaEBoYXNoYmFuZy5zaD4KRnJv bTogdW5tdXNoIDx1bm11c2hAaGFzaGJhbmcuc2g+CkRhdGU6IFR1ZSwgMjYgTm92IDIwMjQgMTM6 Mjc6MTcKU3ViamVjdDogW1BBVENIIDEyLzIxXSBnbnU6IEFkZCBtb25vLTUuMC4xLgoKKiBnbnUv cGFja2FnZXMvZG90bmV0LnNjbQogIChtb25vLTUuMC4xLWV4dGVybmFsLXJlcG8tc3BlY3MsIG1v bm8tNS4wLjEpOiBOZXcgdmFyaWFibGVzLgoKQ2hhbmdlLUlkOiBJMTY1ZWY4MjM4YzRhZGRkY2Y5 MjY2N2MzNGRiYjM2NmY5OGQyODhiZAotLS0KIGdudS9wYWNrYWdlcy9kb3RuZXQuc2NtIHwgMTMz ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKIDEgZmlsZSBjaGFuZ2Vk LCAxMzMgaW5zZXJ0aW9ucygrKQoKZGlmZiAtLWdpdCBhL2dudS9wYWNrYWdlcy9kb3RuZXQuc2Nt IGIvZ251L3BhY2thZ2VzL2RvdG5ldC5zY20KaW5kZXggNDk1ZmU5MzQyMS4uMzNiNzE3YjBlZCAx MDA2NDQKLS0tIGEvZ251L3BhY2thZ2VzL2RvdG5ldC5zY20KKysrIGIvZ251L3BhY2thZ2VzL2Rv dG5ldC5zY20KQEAgLTgzNywzICs4MzcsMTM2IEBAIChkZWZpbmUtcHVibGljIG1vbm8tNC45LjAK ICAgICAgICAgICAgICAgbGljZW5zZTptcGwxLjEKICAgICAgICAgICAgICAgOzsgQVBJIERvY3Vt ZW50YXRpb24KICAgICAgICAgICAgICAgbGljZW5zZTpjYy1ieTQuMCkpKSkKKworKGRlZmluZSBt b25vLTUuMC4xLWV4dGVybmFsLXJlcG8tc3BlY3MKKyAgJygoImFzcG5ldHdlYnN0YWNrIiAgICAg ICAgICAgICAgImU3N2IxMmU2Y2M1ZWQyNjBhOTg0NDdmNjA5ZTg4NzMzN2U0NGUyOTkiCisgICAg ICIwcmtzMzQ0cXI0Zm1wM2ZzMTI2NGQycWttbTM0OG04ZDFramQ3ejRsOTRpaWlyd24xZnExIikK KyAgICA7OyBzbmlwcGV0IGluIHRoZSBhY3R1YWwgcGFja2FnZSB3aWxsIGRlbGV0ZSBhbGwgZGxs cyBhbmQgZXhlcywgc28gdGhpcworICAgIDs7IHNob3VsZCBiZSByZWJ1aWx0IGZyb20gc2NyYXRj aC4KKyAgICAoKCJyZWZlcmVuY2UtYXNzZW1ibGllcyIgImJpbmFyeS1yZWZlcmVuY2UtYXNzZW1i bGllcyIpCisgICAgICJmZWJjMTAwZjAzMTNmMGRjOWQ3NWRkMWJjZWE0NWU4NzEzNGI1YjU1Igor ICAgICAiMGxwajkxMW0ybHEyM3IyMmRweTRpMDJmeTR5a2YyN2R4OGZ2cXB4c3hrbnlzajJqbDZ5 NCIpCisgICAgKCJib2NrYnVpbGQiICAgICAgICAgICAgICAgICAgICI1MTJiYTQxYTk0YmVjMzVm ZjBjMzk1ZWI3MWExODBmZGEyM2RhOTVjIgorICAgICAiMTZtMDBsYThzdng4djA3c3h5NHp4YnBx MGNicTdkM256eTUzdzhrcW1sOGIxOGg1ZGFiZyIpCisgICAgKCJib3Jpbmdzc2wiICAgICAgICAg ICAgICAgICAgICJjMDZhYzZiMzNkM2U3NDQyYWQ4Nzg0ODhiOWQxMTAwMTI3ZWZmOTk4IgorICAg ICAiMTg3enBpMXJ2aDlpNmpmY2N3enFxMzM3cnh4aTFyZ255Nm1qcTc5cjA4ZGxyaDBseWR6YyIp CisgICAgKCJidWlsZHRvb2xzIiAgICAgICAgICAgICAgICAgICI5YjZlZTg2ODZiZTU1YTk4M2Q4 ODY5MzgxNjViNjIwNmNkYTUwNzcyIgorICAgICAiMHNqdzNzd2F2Y21panlubWF4aDY0N3Fwa2pz YmdpaGRyOGxoa3l6Zjhkc3ByaGxxNGZ4ZCIpCisgICAgKCJjZWNpbCIgICAgICAgICAgICAgICAg ICAgICAgICI3ODAxNTM0ZGUxYmZlZDk3Yzg0NDgyMWMzMjQ0ZTA1ZmM3ZmZjZmI4IgorICAgICAi MGRtZnl6a201N24zbGJnbGx4NmZmejRnODR4MXNsa2liOWhiNGNmcDNuaHo4NTJxaW03YiIpCisg ICAgKCgiY2VjaWwiICJjZWNpbC1sZWdhY3kiKSAgICAgICIzM2Q1MGI4NzRmZDUyNzExOGJjMzYx ZDgzZGUzZDQ5NGU4YmI1NWUxIgorICAgICAiMXA0aGwxNzk2aWIyNnlreWY1c25sNmNqMGx4MHY3 bWpoMHhxaGp3NnFkaDc1M25zanloYiIpCisgICAgKCJjb3JlZngiICAgICAgICAgICAgICAgICAg ICAgICJiZDk2YWU1ZjE0ODVhZTg1NDFmZTQ3NmRmZDk0NGVmZGU3NmJjZDljIgorICAgICAiMGo1 MWxjNTRkbXdhNGZ6bmEydmpmajRwY2QxbGsxczVicDVkZml4MWFxY25jeXppdmF6aSIpCisgICAg KCJjb3JlcnQiICAgICAgICAgICAgICAgICAgICAgICJkODdjOTY2ZDgwYzEyNzQzNzNkZGFmZTMz NzViZjE3MzBjZDQzMGVkIgorICAgICAiMDc4djVrczdpbm0yZzFoZjk2eDE5azQyam52MXFoaGg3 cjhqeHJmYzdqazR2NGxnbXF5ZiIpCisgICAgKCJpa2Rhc20iICAgICAgICAgICAgICAgICAgICAg ICJlNGRlYWJmNjFjMTE5OTlmMjAwZGNlYTZmNmQ2YjQyNDc0Y2MyMTMxIgorICAgICAiMWZyYmY3 MHk3bjdsNzJqMzkzYXZkaXdrNjE1M2N2Znd3cGlnaGtmMm00NmNscW1xNGhhbiIpCisgICAgKCgi aWt2bS1mb3JrIiAiaWt2bSIpICAgICAgICAgICIzNjc4NjRlZjgxMDg1OWFlM2NlNjUyODY0MjMz YjM1ZjJkZDVmZGJlIgorICAgICAiMGlnOTlrYm1hNHMwbXpiMTNuenNrMXZtMjAweWdmcjExcTZt emdoNmpqNDZzMmZjMzVweCIpCisgICAgKCJsaW5rZXIiICAgICAgICAgICAgICAgICAgICAgICJl NGQ5Nzg0YWMzN2I5ZWJmNDc1NzE3NWM5MmJjN2EzZWM5ZmQ4NjdhIgorICAgICAiMGdhN2JyOWxx ZHN5Y3oyMmRuZGtiaXdiZDBjNjBtbDZubDIyeGxzbmpyN2x3ZGNjZmp2bCIpCisgICAgKCJMdWNl bmUuTmV0LkxpZ2h0IiAgICAgICAgICAgICI4NTk3OGI3ZWI5NDczOGY1MTY4MjQzNDEyMTNkNWU5 NDA2MGY1Mjg0IgorICAgICAiMGQxMThpNTJtM2EwdmZqaGZjaTgxYTJrYzRxdm5qMjNnczAyaHJ2 ZHJmcGQxcTkyZnlpaSIpCisgICAgKCJOZXd0b25zb2Z0Lkpzb24iICAgICAgICAgICAgICI0NzFj M2UwODAzYTlmNDBhMGFjYzhhZWNlYjMxZGU2ZmY5M2E1MmM0IgorICAgICAiMGRnbmdkNWhxazZ5 aGxnNDBrYWJuNnFkbmtubTMyemN4OXE2Ym0ydzMxY3Nuc2s1OTc4cyIpCisgICAgKCgiTnVHZXQu QnVpbGRUYXNrcyIgIm51Z2V0LWJ1aWxkdGFza3MiKQorICAgICAiOGQzMDc0NzJlYTIxNGYyYjU5 NjM2NDMxZjc3MTg5NGRiY2JhNzI1OCIKKyAgICAgIjFoMWZybmoweDhrN2IyOWljNGppc2NoMHZs cG1zbWdoanc1NTRwejI3N2YybnhhaWRsamoiKQorICAgICgoIk5Vbml0TGl0ZSIgIm51bml0LWxp dGUiKSAgICAiNjkwNjAzYmVhOThhYWU2OWZjYTlhNjUxMzBkODg1OTFiYzZjYWJlZSIKKyAgICAg IjFmODQ1eXNqenMzeWQ5Z2N5d3c2NmRua3g0ODR6NWZrbmI4bDB4ejc0c2pteGsybW5nd2MiKQor ICAgIDs7ICgicm9zbHluLWJpbmFyaWVzIiAgICAgICAgICAiMGQ0MTk4YjEyOTliY2IwMTk5NzM3 NDlkYTRkNDdlOTBmMTVhMWU0NiIKKyAgICA7OyAgIiIpCisgICAgKCJyeCIgICAgICAgICAgICAg ICAgICAgICAgICAgICJiMjlhNGIwZmRhNjA5ZTBhZjMzZmY1NGVkMTM2NTJiNmNjZjBlMDVlIgor ICAgICAiMW4xandobXNia2N2MmQ4MDZpbW1jcHprYjcycnowNHh5OThteXczNTVhOHc1YWgyNXlp diIpKSkKKworKGRlZmluZS1wdWJsaWMgbW9uby01LjAuMQorICAocGFja2FnZQorICAgIChpbmhl cml0IG1vbm8tNC45LjApCisgICAgKHZlcnNpb24gIjUuMC4xIikKKyAgICAobmFtZSAibW9ubyIp CisgICAgKHNvdXJjZSAob3JpZ2luCisgICAgICAgICAgICAgIChtZXRob2QgZ2l0LWZldGNoKQor ICAgICAgICAgICAgICAodXJpCisgICAgICAgICAgICAgICAoZ2l0LXJlZmVyZW5jZQorICAgICAg ICAgICAgICAgICh1cmwgImh0dHBzOi8vZ2l0bGFiLndpbmVocS5vcmcvbW9uby9tb25vLmdpdCIp CisgICAgICAgICAgICAgICAgKGNvbW1pdCAibW9uby01LjAuMS4xIikpKQorICAgICAgICAgICAg ICAoZmlsZS1uYW1lIChnaXQtZmlsZS1uYW1lIG5hbWUgdmVyc2lvbikpCisgICAgICAgICAgICAg IChzaGEyNTYKKyAgICAgICAgICAgICAgIChiYXNlMzIKKyAgICAgICAgICAgICAgICAiMDV6OWJk ZGxqcDh4d3N3N3F3M2Y3YmljOGkyMDJ3cmM2MHBqYjlmbjRpZ3dmejkyNzhuNSIpKQorICAgICAg ICAgICAgICAobW9kdWxlcyAnKChndWl4IGJ1aWxkIHV0aWxzKQorICAgICAgICAgICAgICAgICAg ICAgICAgIChpY2UtOSBzdHJpbmctZnVuKSkpCisgICAgICAgICAgICAgIChzbmlwcGV0ICN+KGJl Z2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAjJChhZGQtZXh0ZXJuYWwtcmVwb3MKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vbm8tNS4wLjEtZXh0ZXJuYWwtcmVwby1zcGVj cykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICMkQHByZXBhcmUtbW9uby1zb3VyY2UtMCkp KSkKKyAgICAobmF0aXZlLWlucHV0cyAobW9kaWZ5LWlucHV0cyAocGFja2FnZS1uYXRpdmUtaW5w dXRzIG1vbm8tNC45LjApCisgICAgICAgICAgICAgICAgICAgICAocmVwbGFjZSAibW9ubyIgbW9u by00LjkuMCkKKyAgICAgICAgICAgICAgICAgICAgIChhcHBlbmQgY21ha2UtbWluaW1hbCkpKQor ICAgIChhcmd1bWVudHMKKyAgICAgKHN1YnN0aXR1dGUta2V5d29yZC1hcmd1bWVudHMgKHBhY2th Z2UtYXJndW1lbnRzIG1vbm8tNC45LjApCisgICAgICAgKCgjOm1ha2UtZmxhZ3MgXyAjZikKKyAg ICAgICAgOzsgQnVpbGQgc3lzdGVtIGlzIGJ1Z2d5IGhlcmUsIGl0IGRvZXMgc29tZSB3ZWlyZCB3 aWxkY2FyZCBleHBhbnNpb24KKyAgICAgICAgOzsgdGhhdCBhc3N1bWVzIHRoZXJlJ3Mgb25seSBh dCBtb3N0IG9uZSBmaWxlIGluIGEgZGlyZWN0b3J5CisgICAgICAgICN+KGxpc3QgIlY9MSIgIlNL SVBfQU9UPTEiKSkKKyAgICAgICAoKCM6cGhhc2VzIHBoYXNlcyAjfiVzdGFuZGFyZC1waGFzZXMp CisgICAgICAgICN+KG1vZGlmeS1waGFzZXMgIyRwaGFzZXMKKyAgICAgICAgICAgIChhZGQtYWZ0 ZXIgJ3VucGFjayAnZGlzYWJsZS1yb3NseW4taW5zdGFsbAorICAgICAgICAgICAgICA7OyBGb3Ig c29tZSByZWFzb24gdGhlcmUgaXMgbm8gcHJlZGVmaW5lZCB3YXkgdG8gcGVyc3VhZGUgbW9ubyB0 bworICAgICAgICAgICAgICA7OyBub3QgaW5zdGFsbCB0aGUgYmluYXJ5IGJsb2JzIGl0IGFzc3Vt ZXMgYXJlIHRoZXJlLgorICAgICAgICAgICAgICAobGFtYmRhIF8KKyAgICAgICAgICAgICAgICAo c3Vic3RpdHV0ZSogIm1jcy9wYWNrYWdlcy9NYWtlZmlsZSIKKyAgICAgICAgICAgICAgICAgICgo Il5pbnN0YWxsLWxvY2FsOiIpCisgICAgICAgICAgICAgICAgICAgKHN0cmluZy1hcHBlbmQgImlu c3RhbGwtbG9jYWw6CisJZWNobyBcIlNraXBwaW5nIGJsb2IgaW5zdGFsbFwiCisKK3VudXNlZDA6 IikpKSkpCisgICAgICAgICAgICAoZGVsZXRlICd1c2Utb2xkLW1vbm8tbGlicmFyaWVzKQorICAg ICAgICAgICAgKGFkZC1hZnRlciAnYnVpbGQgJ2J1aWxkLXJlZmVyZW5jZS1hc3NlbWJsaWVzCisg ICAgICAgICAgICAgIChsYW1iZGEqICgjOmtleSBtYWtlLWZsYWdzICM6YWxsb3ctb3RoZXIta2V5 cykKKyAgICAgICAgICAgICAgICAobGV0ICgodG9wIChnZXRjd2QpKSkKKyAgICAgICAgICAgICAg ICAgICh3aXRoLWRpcmVjdG9yeS1leGN1cnNpb24gImV4dGVybmFsL2JpbmFyeS1yZWZlcmVuY2Ut YXNzZW1ibGllcyIKKyAgICAgICAgICAgICAgICAgICAgOzsgTm8gY2x1ZSB3aHkgYWxsIHRoZXNl IHJlZmVyZW5jZXMgYXJlIG1pc3NpbmcsIGp1c3QKKyAgICAgICAgICAgICAgICAgICAgOzsgcG93 ZXIgdGhyb3VnaCBJIGd1ZXNzLgorICAgICAgICAgICAgICAgICAgICAoc3Vic3RpdHV0ZSogKGZp bmQtZmlsZXMgIi4iICJeTWFrZWZpbGUkIikKKyAgICAgICAgICAgICAgICAgICAgICAoKCJDU0Nf Q09NTU9OX0FSR1MgOj0gIiBhbGwpCisgICAgICAgICAgICAgICAgICAgICAgIChzdHJpbmctYXBw ZW5kIGFsbCAiLWRlbGF5c2lnbisgIikpCisgICAgICAgICAgICAgICAgICAgICAgKCgiSUJNXFwu RGF0YVxcLkRCMl9SRUZTIDo9ICIgYWxsKQorICAgICAgICAgICAgICAgICAgICAgICAoc3RyaW5n LWFwcGVuZCBhbGwgIlN5c3RlbS5YbWwgIikpCisgICAgICAgICAgICAgICAgICAgICAgKCgiTW9u b1xcLkRhdGFcXC5TcWxpdGVfUkVGUyA6PSAiIGFsbCkKKyAgICAgICAgICAgICAgICAgICAgICAg KHN0cmluZy1hcHBlbmQgYWxsICJTeXN0ZW0uWG1sICIpKQorICAgICAgICAgICAgICAgICAgICAg ICgoIlN5c3RlbVxcLkRhdGFcXC5EYXRhU2V0RXh0ZW5zaW9uc19SRUZTIDo9ICIgYWxsKQorICAg ICAgICAgICAgICAgICAgICAgICAoc3RyaW5nLWFwcGVuZCBhbGwgIlN5c3RlbS5YbWwgIikpCisg ICAgICAgICAgICAgICAgICAgICAgKCgiU3lzdGVtXFwuRGF0YVxcLk9yYWNsZUNsaWVudF9SRUZT IDo9ICIgYWxsKQorICAgICAgICAgICAgICAgICAgICAgICAoc3RyaW5nLWFwcGVuZCBhbGwgIlN5 c3RlbS5YbWwgIikpCisgICAgICAgICAgICAgICAgICAgICAgKCgiU3lzdGVtXFwuSWRlbnRpdHlN b2RlbF9SRUZTIDo9ICIgYWxsKQorICAgICAgICAgICAgICAgICAgICAgICAoc3RyaW5nLWFwcGVu ZCBhbGwgIlN5c3RlbS5Db25maWd1cmF0aW9uICIpKQorICAgICAgICAgICAgICAgICAgICAgICgo IlN5c3RlbVxcLkRlc2lnbl9SRUZTIDo9ICIgYWxsKQorICAgICAgICAgICAgICAgICAgICAgICAo c3RyaW5nLWFwcGVuZCBhbGwgIkFjY2Vzc2liaWxpdHkgIikpCisgICAgICAgICAgICAgICAgICAg ICAgKCgiU3lzdGVtXFwuV2ViXFwuRXh0ZW5zaW9uc1xcLkRlc2lnbl9SRUZTIDo9ICIgYWxsKQor ICAgICAgICAgICAgICAgICAgICAgICAoc3RyaW5nLWFwcGVuZCBhbGwgIlN5c3RlbS5XaW5kb3dz LkZvcm1zIFN5c3RlbS5XZWIgIikpCisgICAgICAgICAgICAgICAgICAgICAgKCgiU3lzdGVtXFwu U2VydmljZU1vZGVsXFwuUm91dGluZ19SRUZTIDo9ICIgYWxsKQorICAgICAgICAgICAgICAgICAg ICAgICAoc3RyaW5nLWFwcGVuZCBhbGwgIlN5c3RlbS5YbWwgIikpCisgICAgICAgICAgICAgICAg ICAgICAgKCgiU3lzdGVtXFwuV2ViXFwuQWJzdHJhY3Rpb25zX1JFRlMgOj0gIiBhbGwpCisgICAg ICAgICAgICAgICAgICAgICAgIChzdHJpbmctYXBwZW5kIGFsbCAiU3lzdGVtICIpKQorICAgICAg ICAgICAgICAgICAgICAgICgoIlN5c3RlbVxcLlJlYWN0aXZlXFwuV2luZG93c1xcLkZvcm1zX1JF RlMgOj0gIiBhbGwpCisgICAgICAgICAgICAgICAgICAgICAgIChzdHJpbmctYXBwZW5kIGFsbCAi U3lzdGVtICIpKQorICAgICAgICAgICAgICAgICAgICAgICgoIlN5c3RlbVxcLldpbmRvd3NcXC5G b3Jtc1xcLkRhdGFWaXN1YWxpemF0aW9uX1JFRlMgOj0gIiBhbGwpCisgICAgICAgICAgICAgICAg ICAgICAgIChzdHJpbmctYXBwZW5kIGFsbCAiQWNjZXNzaWJpbGl0eSAiKSkKKyAgICAgICAgICAg ICAgICAgICAgICAoKCJGYWNhZGVzL1N5c3RlbVxcLlNlcnZpY2VNb2RlbFxcLlByaW1pdGl2ZXNf UkVGUyA6PSAiIGFsbCkKKyAgICAgICAgICAgICAgICAgICAgICAgKHN0cmluZy1hcHBlbmQgYWxs ICJTeXN0ZW0uWG1sICIpKQorICAgICAgICAgICAgICAgICAgICAgICgoIkZhY2FkZXMvU3lzdGVt XFwuRHluYW1pY1xcLlJ1bnRpbWVfUkVGUyA6PSAiIGFsbCkKKyAgICAgICAgICAgICAgICAgICAg ICAgKHN0cmluZy1hcHBlbmQgYWxsICJTeXN0ZW0gIikpCisgICAgICAgICAgICAgICAgICAgICAg KCgiRmFjYWRlcy9TeXN0ZW1cXC5YbWxcXC5YRG9jdW1lbnRfUkVGUyA6PSAiIGFsbCkKKyAgICAg ICAgICAgICAgICAgICAgICAgKHN0cmluZy1hcHBlbmQgYWxsICJTeXN0ZW0uWG1sICIpKQorICAg ICAgICAgICAgICAgICAgICAgICgoIkZhY2FkZXMvU3lzdGVtXFwuUnVudGltZVxcLlNlcmlhbGl6 YXRpb24uWG1sX1JFRlMgOj0gIiBhbGwpCisgICAgICAgICAgICAgICAgICAgICAgIChzdHJpbmct YXBwZW5kIGFsbCAiU3lzdGVtLlhtbCAiKSkpCisgICAgICAgICAgICAgICAgICAgIChhcHBseSBp bnZva2UgIm1ha2UiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAoc3RyaW5nLWFwcGVuZCAi Q1NDPU1PTk9fUEFUSD0iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICB0b3AgIi9tY3MvY2xhc3MvbGliL2J1aWxkIgorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIiAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB0b3AgIi9ydW50aW1lL21vbm8td3JhcHBlciIKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICIgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgdG9wICIvbWNzL2NsYXNzL2xpYi9idWlsZC9tY3MuZXhlIikKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgIG1ha2UtZmxhZ3MpKSkpKSkpKSkpKQotLSAKMi40NS4yCgo= --b1=_an9yUQc81YewVJ071Mjh6ZcI5zllr0hgLHfHss8ka8A Content-Type: text/x-patch; name=0017-gnu-Add-mono-5.8.0.patch Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=0017-gnu-Add-mono-5.8.0.patch RnJvbSA2MzkzZGE3M2I3NWRiYThjMzlhZmVhZjZhNmYyNTZiOWM4YmZhYjQ5IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpNZXNzYWdlLUlEOiA8NjM5M2RhNzNiNzVkYmE4YzM5YWZlYWY2YTZmMjU2 YjljOGJmYWI0OS4xNzMyNzA3Mjg4LmdpdC51bm11c2hAaGFzaGJhbmcuc2g+CkluLVJlcGx5LVRv OiA8M2Y4YWY2NWY3Mjg3MWQ2MWZhODVlNjkzOWY0NmNiOGRhYzE4NWM3MC4xNzMyNzA3Mjg4Lmdp dC51bm11c2hAaGFzaGJhbmcuc2g+ClJlZmVyZW5jZXM6IDwzZjhhZjY1ZjcyODcxZDYxZmE4NWU2 OTM5ZjQ2Y2I4ZGFjMTg1YzcwLjE3MzI3MDcyODguZ2l0LnVubXVzaEBoYXNoYmFuZy5zaD4KRnJv bTogdW5tdXNoIDx1bm11c2hAaGFzaGJhbmcuc2g+CkRhdGU6IFdlZCwgMjcgTm92IDIwMjQgMDA6 NDc6MDkKU3ViamVjdDogW1BBVENIIDE3LzIxXSBnbnU6IEFkZCBtb25vLTUuOC4wLgoKKiBnbnUv cGFja2FnZXMvZG90bmV0LnNjbQogIChtb25vLTUuOC4wLWV4dGVybmFsLXJlcG8tc3BlY3MsIG1v bm8tNS44LjApOiBOZXcgdmFyaWFibGVzLgoqIGdudS9wYWNrYWdlcy9wYXRjaGVzL21vbm8tNS44 LjAtcGF0Y2hlcy5wYXRjaDogTmV3IHBhdGNoLgoqIGdudS9sb2NhbC5tayAoZGlzdF9wYXRjaF9E QVRBKTogUmVnaXN0ZXIgbmV3IHBhdGNoLgoKQ2hhbmdlLUlkOiBJZWE3MWJmNTJkNjdhMTgyZjc1 NDNhZGFiYTQ0NDA5ZGJmNmMzYzBlMgotLS0KIGdudS9sb2NhbC5tayAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICB8ICAgMSArCiBnbnUvcGFja2FnZXMvZG90bmV0LnNjbSAgICAgICAg ICAgICAgICAgICAgICAgfCAxMjMgKysrKysrKysrKysrKysrKysrCiBnbnUvcGFja2FnZXMvcGF0 Y2hlcy9tb25vLTUuOC4wLXBhdGNoZXMucGF0Y2ggfCAgNjAgKysrKysrKysrCiAzIGZpbGVzIGNo YW5nZWQsIDE4NCBpbnNlcnRpb25zKCspCiBjcmVhdGUgbW9kZSAxMDA2NDQgZ251L3BhY2thZ2Vz L3BhdGNoZXMvbW9uby01LjguMC1wYXRjaGVzLnBhdGNoCgpkaWZmIC0tZ2l0IGEvZ251L2xvY2Fs Lm1rIGIvZ251L2xvY2FsLm1rCmluZGV4IDc1NDFkYjA0ZTUuLjRhNzg3MjZjOWYgMTAwNjQ0Ci0t LSBhL2dudS9sb2NhbC5taworKysgYi9nbnUvbG9jYWwubWsKQEAgLTE3NzAsNiArMTc3MCw3IEBA IGRpc3RfcGF0Y2hfREFUQSA9CQkJCQkJXAogICAlRCUvcGFja2FnZXMvcGF0Y2hlcy9tb25vLTIu MTEuNC1maXhlcy5wYXRjaAkJCVwKICAgJUQlL3BhY2thZ2VzL3BhdGNoZXMvbW9uby00LjkuMC1m aXgtcnVudGltZW1ldGFkYXRhdmVyc2lvbi5wYXRjaAkJXAogICAlRCUvcGFja2FnZXMvcGF0Y2hl cy9tb25vLTUuNC4wLXBhdGNoZXMucGF0Y2gJCVwKKyAgJUQlL3BhY2thZ2VzL3BhdGNoZXMvbW9u by01LjguMC1wYXRjaGVzLnBhdGNoCQlcCiAgICVEJS9wYWNrYWdlcy9wYXRjaGVzL21vc2FpY2F0 Y2hlci11bmJ1bmRsZS1odHNsaWIucGF0Y2gJXAogICAlRCUvcGFja2FnZXMvcGF0Y2hlcy9tcnJl c2N1ZS1zdXBwb3J0LWxvdmUtMTEucGF0Y2gJCVwKICAgJUQlL3BhY2thZ2VzL3BhdGNoZXMvbXRv b2xzLW1mb3JtYXQtdW5pbml0aWFsaXplZC5wYXRjaAlcCmRpZmYgLS1naXQgYS9nbnUvcGFja2Fn ZXMvZG90bmV0LnNjbSBiL2dudS9wYWNrYWdlcy9kb3RuZXQuc2NtCmluZGV4IDkwZTFmMjBjOGUu LjE0NGY2Nzg3MmIgMTAwNjQ0Ci0tLSBhL2dudS9wYWNrYWdlcy9kb3RuZXQuc2NtCisrKyBiL2du dS9wYWNrYWdlcy9kb3RuZXQuc2NtCkBAIC0xMjc2LDMgKzEyNzYsMTI2IEBAIChkZWZpbmUtcHVi bGljIG1vbm8tcHJlLTUuOC4wCiAgICAgICAgICAoKCM6cGhhc2VzIHBoYXNlcyAjfiVzdGFuZGFy ZC1waGFzZXMpCiAgICAgICAgICAgI34obW9kaWZ5LXBoYXNlcyAjJHBoYXNlcwogICAgICAgICAg ICAgICAoZGVsZXRlICdwYXRjaC1zdWItYXV0b2dlbi5zaC1zaGViYW5nKSkpKSkpKSkKKworKGRl ZmluZSBtb25vLTUuOC4wLWV4dGVybmFsLXJlcG8tc3BlY3MKKyAgJygoImFwaS1kb2MtdG9vbHMi ICAgICAgICAgICAgICAgImQwM2U4MTk4MzhjNjI0MWY5MmY5MDY1NWNiNDQ4Y2M0N2M5ZTg3OTEi CisgICAgICIxcmlraTc5ZjNpZzNjeGlndmlzczgxZHo2MDFobjkyYTFnaWZnbG0wbXpqYnM3NnNm M2ZqIgorICAgICAjOnJlY3Vyc2l2ZT8gI3QpCisgICAgKCJhcGktc25hcHNob3QiICAgICAgICAg ICAgICAgICI2NjY4YzgwYTk0OTkyMThjMGI4Y2M0MWY0OGE5ZTI0MjU4N2RmNzU2IgorICAgICAi MHZid2J3YTFocjRqbGo3MjgzdzhiazN2NWk4czQzaDg0MTNyMnBraDRoZjM4YjJya3M3ZCIpCisg ICAgKCJhc3BuZXR3ZWJzdGFjayIgICAgICAgICAgICAgICJlNzdiMTJlNmNjNWVkMjYwYTk4NDQ3 ZjYwOWU4ODczMzdlNDRlMjk5IgorICAgICAiMHJrczM0NHFyNGZtcDNmczEyNjRkMnFrbW0zNDht OGQxa2pkN3o0bDk0aWlpcnduMWZxMSIpCisgICAgKCgicmVmZXJlbmNlLWFzc2VtYmxpZXMiICJi aW5hcnktcmVmZXJlbmNlLWFzc2VtYmxpZXMiKQorICAgICAiZTA0OGZlNGE4OGQyMzdkMTA1YWUw MmZlMDM2M2E2ODI5NjA5OTM2MiIKKyAgICAgIjBpODdpM3g2OTRmNGc4czJmbGZsdjBhaDg4Ymx4 ZHM3Z2JpeXJ3cm1zY3FkanNpZmh5NDkiKQorICAgICgiYm9ja2J1aWxkIiAgICAgICAgICAgICAg ICAgICAiY2I0NTQ1NDA5ZGFmZTE2ZGZlODZjN2Q4ZTY1NDhhNjljMzY5ZTJhMiIKKyAgICAgIjBz dmRmdjYxZDZwcHdkNHpna2kxMjlyOXByZjc1Zm5zcWlobmEyNTN6ZndmcHpwaW5neDciKQorICAg ICgiYm9yaW5nc3NsIiAgICAgICAgICAgICAgICAgICAiM2UwNzcwZTE4ODM1NzE0NzA4ODYwYmE5 ZmUxYWYwNGE5MzI5NzFmZiIKKyAgICAgIjEzOWEwZ2w5MWE1MmsycjZuYTZpYWx6a3F5a2FqMXJr ODh6anJrYXozc2R4eDdubW1nNnkiKQorICAgICgiY2VjaWwiICAgICAgICAgICAgICAgICAgICAg ICAiNzZmZmNkYWJhZTY2MGU5NTg2MjczYzliNDBkYjE4MGEwZGM4ZDRjOCIKKyAgICAgIjBmM2Jz ZnJpMjhweG1uYjBtNjA3NGJubW1qZ3NyN2NqaXh2OWZobnA2YWltaHZ5NGw1cDQiKQorICAgICgo ImNlY2lsIiAiY2VjaWwtbGVnYWN5IikgICAgICAiMzNkNTBiODc0ZmQ1MjcxMThiYzM2MWQ4M2Rl M2Q0OTRlOGJiNTVlMSIKKyAgICAgIjFwNGhsMTc5NmliMjZ5a3lmNXNubDZjajBseDB2N21qaDB4 cWhqdzZxZGg3NTNuc2p5aGIiKQorICAgICgiY29yZWZ4IiAgICAgICAgICAgICAgICAgICAgICAi Yjk2NWQxZjhiNTI4MTcxMmM0NDAwZWYyOGVkOTc2NzBmZmQ0ODgwZCIKKyAgICAgIjByOWhyMGJz M2ozYWdxaTJwcTRuMWttOWpmeWNhcXZ4ZjY3NTZ5N3I1bDN5a3FzZDZ3c3IiKQorICAgICgiY29y ZXJ0IiAgICAgICAgICAgICAgICAgICAgICAiNDhkYmE3MzgwMWU4MDRlODlmMDAzMTFkYTk5ZDg3 M2Y5YzU1MDI3OCIKKyAgICAgIjF6dzQ3amY0Y3dxbWFpeHlsaXN4aTczeGY2Y2FwNDFid2Y5dmxt cHhhbnp4YXFrbHpzdmsiKQorICAgICgiaWtkYXNtIiAgICAgICAgICAgICAgICAgICAgICAiNDY1 YzA4MTU1NThmZDQzYzAxMTBmOGQwMGZjMTg2YWMwMDQ0YWM2YSIKKyAgICAgIjB4aXI3cGNncTA0 aGI3czhnOXdzcWRyeXBiNmwyOXJhajNpejVyY3F6ZG0wMDU2azc1dzIiKQorICAgICgoImlrdm0t Zm9yayIgImlrdm0iKSAgICAgICAgICAiODQ3ZTA1ZmNlZDVjOWE0MWZmMGYyNGYxZjlkNDBkNWE4 YTU3NzJjMSIKKyAgICAgIjFmbDlibTNsbXpmOGlxdjN4NGlxa3o5ZmM1NG13ZHZyeGlzeGcybnZ3 d2NzaTRzYWZmcGkiKQorICAgICgibGlua2VyIiAgICAgICAgICAgICAgICAgICAgICAiYzYyMzM1 YzM1MGYzOTAyZmYwNDU5MTEyZjdlZmM4YjkyNmY0ZjE1ZCIKKyAgICAgIjAxNTE5MXNkdzlpN3Zu aGxzeWN2NjVwdzhubmZwa2Q2NWsxMWp3MXk5YmlrYjR4M2FqOHgiKQorICAgICgiTmV3dG9uc29m dC5Kc29uIiAgICAgICAgICAgICAiNDcxYzNlMDgwM2E5ZjQwYTBhY2M4YWVjZWIzMWRlNmZmOTNh NTJjNCIKKyAgICAgIjBkZ25nZDVocWs2eWhsZzQwa2FibjZxZG5rbm0zMnpjeDlxNmJtMnczMWNz bnNrNTk3OHMiKQorICAgICgoIk51R2V0LkJ1aWxkVGFza3MiICJudWdldC1idWlsZHRhc2tzIikK KyAgICAgImIyYzMwYmM4MWIyYTc3MzNhNGVlYjI1MmE1NWY2YjRkNTBjZmMzYTEiCisgICAgICIw MXZhanJmeDZ5MTJmNTI1eGRpd2Zibjlxem15bTJzNjVyYmlxcHk5ZDl4dzBwbnE3Z2JsIikKKyAg ICAoKCJOVW5pdExpdGUiICJudW5pdC1saXRlIikgICAgIjc2NDY1NmNkYWZkYjNhY2QyNWRmOGNi NTJhNGUwZWExNDc2MGZjY2QiCisgICAgICIwcGM3bGszcDkxNmlzOGNuNG5nYXF2amxtbHp2M3Z2 anB5a3N5NHB2YjNxYjVpaWF3MHZxIikKKyAgICA7OyAoInJvc2x5bi1iaW5hcmllcyIgICAgICAg ICAgImU0ODRjNzVlMmVkZDNjM2YxODcwYTI0NjhhNzFhNTYyMjBjZjFmN2YiCisgICAgOzsgICIi KQorICAgICgicngiICAgICAgICAgICAgICAgICAgICAgICAgICAiYjI5YTRiMGZkYTYwOWUwYWYz M2ZmNTRlZDEzNjUyYjZjY2YwZTA1ZSIKKyAgICAgIjFuMWp3aG1zYmtjdjJkODA2aW1tY3B6a2I3 MnJ6MDR4eTk4bXl3MzU1YTh3NWFoMjV5aXYiKQorICAgIDs7ICgieHVuaXQtYmluYXJpZXMiICAg ICAgICAgICAiZDQ0MzNiMDk3MmY0MGNiM2VmYWEzZmJiYTUyODY5YmRlNWRmOGZhOCIKKyAgICA7 OyAgIiIpCisgICAgKSkKKworKGRlZmluZS1wdWJsaWMgbW9uby01LjguMAorICAocGFja2FnZQor ICAgIChpbmhlcml0IG1vbm8tcHJlLTUuOC4wKQorICAgICh2ZXJzaW9uICI1LjguMC4xMjkiKQor ICAgIChuYW1lICJtb25vIikKKyAgICAoc291cmNlIChvcmlnaW4KKyAgICAgICAgICAgICAgKG1l dGhvZCBnaXQtZmV0Y2gpCisgICAgICAgICAgICAgICh1cmkKKyAgICAgICAgICAgICAgIChnaXQt cmVmZXJlbmNlCisgICAgICAgICAgICAgICAgKHVybCAiaHR0cHM6Ly9naXRsYWIud2luZWhxLm9y Zy9tb25vL21vbm8uZ2l0IikKKyAgICAgICAgICAgICAgICAoY29tbWl0ICJtb25vLTUuOC4wLjEy OSIpKSkKKyAgICAgICAgICAgICAgKGZpbGUtbmFtZSAoZ2l0LWZpbGUtbmFtZSBuYW1lIHZlcnNp b24pKQorICAgICAgICAgICAgICAoc2hhMjU2CisgICAgICAgICAgICAgICAoYmFzZTMyCisgICAg ICAgICAgICAgICAgIjAxMzB2ZDMzeXpwNHc3NTcwcXc5eGpxMmc3YjJ4bWFjamJwa216cnBiaHk4 YXM1aHk0ejYiKSkKKyAgICAgICAgICAgICAgKG1vZHVsZXMgJygoZ3VpeCBidWlsZCB1dGlscykK KyAgICAgICAgICAgICAgICAgICAgICAgICAoaWNlLTkgc3RyaW5nLWZ1bikpKQorICAgICAgICAg ICAgICAoc25pcHBldCAjfihiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIyQoYWRk LWV4dGVybmFsLXJlcG9zCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb25vLTUuOC4w LWV4dGVybmFsLXJlcG8tc3BlY3MpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAjJEBwcmVw YXJlLW1vbm8tc291cmNlLTApKQorICAgICAgICAgICAgICAocGF0Y2hlcworICAgICAgICAgICAg ICAgKHNlYXJjaC1wYXRjaGVzICJtb25vLTUuOC4wLXBhdGNoZXMucGF0Y2giKSkpKQorICAgIChu YXRpdmUtaW5wdXRzIChtb2RpZnktaW5wdXRzIChwYWNrYWdlLW5hdGl2ZS1pbnB1dHMgbW9uby1w cmUtNS44LjApCisgICAgICAgICAgICAgICAgICAgICAocmVwbGFjZSAibW9ubyIgbW9uby1wcmUt NS44LjApKSkKKyAgICAoYXJndW1lbnRzCisgICAgIChzdWJzdGl0dXRlLWtleXdvcmQtYXJndW1l bnRzIChwYWNrYWdlLWFyZ3VtZW50cyBtb25vLXByZS01LjguMCkKKyAgICAgICAoKCM6cGhhc2Vz IHBoYXNlcyAjfiVzdGFuZGFyZC1waGFzZXMpCisgICAgICAgICN+KG1vZGlmeS1waGFzZXMgIyRw aGFzZXMKKyAgICAgICAgICAgIChyZXBsYWNlICdidWlsZC1yZWZlcmVuY2UtYXNzZW1ibGllcwor ICAgICAgICAgICAgICA7OyBNb3JlIHJlZmVyZW5jZXMgbmVlZCB1cGRhdGluZyB0aGlzIHRpbWUu Li4KKyAgICAgICAgICAgICAgKGxhbWJkYSogKCM6a2V5IG1ha2UtZmxhZ3MgIzphbGxvdy1vdGhl ci1rZXlzKQorICAgICAgICAgICAgICAgIChsZXQgKCh0b3AgKGdldGN3ZCkpKQorICAgICAgICAg ICAgICAgICAgKHdpdGgtZGlyZWN0b3J5LWV4Y3Vyc2lvbgorICAgICAgICAgICAgICAgICAgICAg ICJleHRlcm5hbC9iaW5hcnktcmVmZXJlbmNlLWFzc2VtYmxpZXMiCisgICAgICAgICAgICAgICAg ICAgIChzdWJzdGl0dXRlKiAoZmluZC1maWxlcyAiLiIgIl5NYWtlZmlsZSQiKQorICAgICAgICAg ICAgICAgICAgICAgICgoIkNTQ19DT01NT05fQVJHUyA6PSAiIGFsbCkKKyAgICAgICAgICAgICAg ICAgICAgICAgKHN0cmluZy1hcHBlbmQgYWxsICItZGVsYXlzaWduKyAiKSkKKyAgICAgICAgICAg ICAgICAgICAgICAoKCJJQk1cXC5EYXRhXFwuREIyX1JFRlMgOj0gIiBhbGwpCisgICAgICAgICAg ICAgICAgICAgICAgIChzdHJpbmctYXBwZW5kIGFsbCAiU3lzdGVtLlhtbCAiKSkKKyAgICAgICAg ICAgICAgICAgICAgICAoKCJNb25vXFwuRGF0YVxcLlNxbGl0ZV9SRUZTIDo9ICIgYWxsKQorICAg ICAgICAgICAgICAgICAgICAgICAoc3RyaW5nLWFwcGVuZCBhbGwgIlN5c3RlbS5YbWwgIikpCisg ICAgICAgICAgICAgICAgICAgICAgKCgiU3lzdGVtXFwuRGF0YVxcLkRhdGFTZXRFeHRlbnNpb25z X1JFRlMgOj0gIiBhbGwpCisgICAgICAgICAgICAgICAgICAgICAgIChzdHJpbmctYXBwZW5kIGFs bCAiU3lzdGVtLlhtbCAiKSkKKyAgICAgICAgICAgICAgICAgICAgICAoKCJTeXN0ZW1cXC5EYXRh XFwuT3JhY2xlQ2xpZW50X1JFRlMgOj0gIiBhbGwpCisgICAgICAgICAgICAgICAgICAgICAgIChz dHJpbmctYXBwZW5kIGFsbCAiU3lzdGVtLlhtbCAiKSkKKyAgICAgICAgICAgICAgICAgICAgICAo KCJTeXN0ZW1cXC5JZGVudGl0eU1vZGVsX1JFRlMgOj0gIiBhbGwpCisgICAgICAgICAgICAgICAg ICAgICAgIChzdHJpbmctYXBwZW5kIGFsbCAiU3lzdGVtLkNvbmZpZ3VyYXRpb24gIikpCisgICAg ICAgICAgICAgICAgICAgICAgKCgiU3lzdGVtXFwuRGVzaWduX1JFRlMgOj0gIiBhbGwpCisgICAg ICAgICAgICAgICAgICAgICAgIChzdHJpbmctYXBwZW5kIGFsbCAiQWNjZXNzaWJpbGl0eSAiKSkK KyAgICAgICAgICAgICAgICAgICAgICAoKCJTeXN0ZW1cXC5XZWJcXC5FeHRlbnNpb25zXFwuRGVz aWduX1JFRlMgOj0gIiBhbGwpCisgICAgICAgICAgICAgICAgICAgICAgIChzdHJpbmctYXBwZW5k IGFsbCAiU3lzdGVtLldpbmRvd3MuRm9ybXMgU3lzdGVtLldlYiAiKSkKKyAgICAgICAgICAgICAg ICAgICAgICAoKCJTeXN0ZW1cXC5TZXJ2aWNlTW9kZWxcXC5Sb3V0aW5nX1JFRlMgOj0gIiBhbGwp CisgICAgICAgICAgICAgICAgICAgICAgIChzdHJpbmctYXBwZW5kIGFsbCAiU3lzdGVtLlhtbCAi KSkKKyAgICAgICAgICAgICAgICAgICAgICAoKCJTeXN0ZW1cXC5XZWJcXC5BYnN0cmFjdGlvbnNf UkVGUyA6PSAiIGFsbCkKKyAgICAgICAgICAgICAgICAgICAgICAgKHN0cmluZy1hcHBlbmQgYWxs ICJTeXN0ZW0gIikpCisgICAgICAgICAgICAgICAgICAgICAgKCgiU3lzdGVtXFwuUmVhY3RpdmVc XC5XaW5kb3dzXFwuRm9ybXNfUkVGUyA6PSAiIGFsbCkKKyAgICAgICAgICAgICAgICAgICAgICAg KHN0cmluZy1hcHBlbmQgYWxsICJTeXN0ZW0gIikpCisgICAgICAgICAgICAgICAgICAgICAgKCgi U3lzdGVtXFwuV2luZG93c1xcLkZvcm1zXFwuRGF0YVZpc3VhbGl6YXRpb25fUkVGUyA6PSAiIGFs bCkKKyAgICAgICAgICAgICAgICAgICAgICAgKHN0cmluZy1hcHBlbmQgYWxsICJBY2Nlc3NpYmls aXR5ICIpKQorICAgICAgICAgICAgICAgICAgICAgICgoIkZhY2FkZXMvU3lzdGVtXFwuU2Vydmlj ZU1vZGVsXFwuUHJpbWl0aXZlc19SRUZTIDo9ICIgYWxsKQorICAgICAgICAgICAgICAgICAgICAg ICAoc3RyaW5nLWFwcGVuZCBhbGwgIlN5c3RlbS5YbWwgIikpCisgICAgICAgICAgICAgICAgICAg ICAgKCgiRmFjYWRlcy9TeXN0ZW1cXC5EeW5hbWljXFwuUnVudGltZV9SRUZTIDo9ICIgYWxsKQor ICAgICAgICAgICAgICAgICAgICAgICAoc3RyaW5nLWFwcGVuZCBhbGwgIlN5c3RlbSAiKSkKKyAg ICAgICAgICAgICAgICAgICAgICAoKCJGYWNhZGVzL1N5c3RlbVxcLlhtbFxcLlhEb2N1bWVudF9S RUZTIDo9ICIgYWxsKQorICAgICAgICAgICAgICAgICAgICAgICAoc3RyaW5nLWFwcGVuZCBhbGwg IlN5c3RlbS5YbWwgIikpCisgICAgICAgICAgICAgICAgICAgICAgKCgiRmFjYWRlcy9TeXN0ZW1c XC5SdW50aW1lXFwuU2VyaWFsaXphdGlvbi5YbWxfUkVGUyA6PSAiIGFsbCkKKyAgICAgICAgICAg ICAgICAgICAgICAgKHN0cmluZy1hcHBlbmQgYWxsICJTeXN0ZW0uWG1sICIpKQorICAgICAgICAg ICAgICAgICAgICAgICgoIkZhY2FkZXMvU3lzdGVtXFwuRGF0YVxcLkNvbW1vbl9SRUZTIDo9ICIg YWxsKQorICAgICAgICAgICAgICAgICAgICAgICAoc3RyaW5nLWFwcGVuZCBhbGwgIlN5c3RlbSBT eXN0ZW0uWG1sICIpKSkKKyAgICAgICAgICAgICAgICAgICAgKGFwcGx5IGludm9rZSAibWFrZSIK KyAgICAgICAgICAgICAgICAgICAgICAgICAgIChzdHJpbmctYXBwZW5kICJDU0M9TU9OT19QQVRI PSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvcCAiL21jcy9j bGFzcy9saWIvYnVpbGQiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAiICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvcCAiL3J1 bnRpbWUvbW9uby13cmFwcGVyIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIiAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b3Ag Ii9tY3MvY2xhc3MvbGliL2J1aWxkL21jcy5leGUiKQorICAgICAgICAgICAgICAgICAgICAgICAg ICAgbWFrZS1mbGFncykpKSkpKSkpKSkpCmRpZmYgLS1naXQgYS9nbnUvcGFja2FnZXMvcGF0Y2hl cy9tb25vLTUuOC4wLXBhdGNoZXMucGF0Y2ggYi9nbnUvcGFja2FnZXMvcGF0Y2hlcy9tb25vLTUu OC4wLXBhdGNoZXMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4u ZjczYzUxZDkyZgotLS0gL2Rldi9udWxsCisrKyBiL2dudS9wYWNrYWdlcy9wYXRjaGVzL21vbm8t NS44LjAtcGF0Y2hlcy5wYXRjaApAQCAtMCwwICsxLDYwIEBACitkaWZmIC0tZ2l0IGEvbWNzL2Ns YXNzL1N5c3RlbS9Nb25vLkFwcGxlVGxzL0FwcGxlVGxzQ29udGV4dC5jcyBiL21jcy9jbGFzcy9T eXN0ZW0vTW9uby5BcHBsZVRscy9BcHBsZVRsc0NvbnRleHQuY3MKK2luZGV4IDBjYzY5ZTQ3NjQ4 Li41MWRlZDcxM2JhNiAxMDA2NDQKKy0tLSBhL21jcy9jbGFzcy9TeXN0ZW0vTW9uby5BcHBsZVRs cy9BcHBsZVRsc0NvbnRleHQuY3MKKysrKyBiL21jcy9jbGFzcy9TeXN0ZW0vTW9uby5BcHBsZVRs cy9BcHBsZVRsc0NvbnRleHQuY3MKK0BAIC03NzUsNyArNzc1LDcgQEAgbmFtZXNwYWNlIE1vbm8u QXBwbGVUbHMKKyAJCVtEbGxJbXBvcnQgKFNlY3VyaXR5TGlicmFyeSldCisgCQlleHRlcm4gdW5z YWZlIHN0YXRpYyAvKiBPU1N0YXR1cyAqLyBTc2xTdGF0dXMgU1NMUmVhZCAoLyogU1NMQ29udGV4 dFJlZiAqLyBJbnRQdHIgY29udGV4dCwgLyogY29uc3Qgdm9pZCogKi8gYnl0ZSogZGF0YSwgLyog c2l6ZV90ICovIEludFB0ciBkYXRhTGVuZ3RoLCAvKiBzaXplX3QqICovIG91dCBJbnRQdHIgcHJv Y2Vzc2VkKTsKKyAKKy0JCXB1YmxpYyBvdmVycmlkZSB1bnNhZmUgKGludCByZXQsIGJvb2wgd2Fu dE1vcmUpIFJlYWQgKGJ5dGVbXSBidWZmZXIsIGludCBvZmZzZXQsIGludCBjb3VudCkKKysJCXB1 YmxpYyBvdmVycmlkZSB1bnNhZmUgU3lzdGVtLlZhbHVlVHVwbGU8aW50LCBib29sPiBSZWFkIChi eXRlW10gYnVmZmVyLCBpbnQgb2Zmc2V0LCBpbnQgY291bnQpCisgCQl7CisgCQkJaWYgKEludGVy bG9ja2VkLkV4Y2hhbmdlIChyZWYgcGVuZGluZ0lPLCAxKSA9PSAxKQorIAkJCQl0aHJvdyBuZXcg SW52YWxpZE9wZXJhdGlvbkV4Y2VwdGlvbiAoKTsKK0BAIC04MTYsNyArODE2LDcgQEAgbmFtZXNw YWNlIE1vbm8uQXBwbGVUbHMKKyAJCVtEbGxJbXBvcnQgKFNlY3VyaXR5TGlicmFyeSldCisgCQll eHRlcm4gdW5zYWZlIHN0YXRpYyAvKiBPU1N0YXR1cyAqLyBTc2xTdGF0dXMgU1NMV3JpdGUgKC8q IFNTTENvbnRleHRSZWYgKi8gSW50UHRyIGNvbnRleHQsIC8qIGNvbnN0IHZvaWQqICovIGJ5dGUq IGRhdGEsIC8qIHNpemVfdCAqLyBJbnRQdHIgZGF0YUxlbmd0aCwgLyogc2l6ZV90KiAqLyBvdXQg SW50UHRyIHByb2Nlc3NlZCk7CisgCistCQlwdWJsaWMgb3ZlcnJpZGUgdW5zYWZlIChpbnQgcmV0 LCBib29sIHdhbnRNb3JlKSBXcml0ZSAoYnl0ZVtdIGJ1ZmZlciwgaW50IG9mZnNldCwgaW50IGNv dW50KQorKwkJcHVibGljIG92ZXJyaWRlIHVuc2FmZSBTeXN0ZW0uVmFsdWVUdXBsZTxpbnQsIGJv b2w+IFdyaXRlIChieXRlW10gYnVmZmVyLCBpbnQgb2Zmc2V0LCBpbnQgY291bnQpCisgCQl7Cisg CQkJaWYgKEludGVybG9ja2VkLkV4Y2hhbmdlIChyZWYgcGVuZGluZ0lPLCAxKSA9PSAxKQorIAkJ CQl0aHJvdyBuZXcgSW52YWxpZE9wZXJhdGlvbkV4Y2VwdGlvbiAoKTsKK2RpZmYgLS1naXQgYS9t Y3MvY2xhc3MvU3lzdGVtL01vbm8uQnRscy9Nb25vQnRsc0NvbnRleHQuY3MgYi9tY3MvY2xhc3Mv U3lzdGVtL01vbm8uQnRscy9Nb25vQnRsc0NvbnRleHQuY3MKK2luZGV4IDU1OWRiNGFjYTVkLi5i NzAyMzljNTE2MyAxMDA2NDQKKy0tLSBhL21jcy9jbGFzcy9TeXN0ZW0vTW9uby5CdGxzL01vbm9C dGxzQ29udGV4dC5jcworKysrIGIvbWNzL2NsYXNzL1N5c3RlbS9Nb25vLkJ0bHMvTW9ub0J0bHND b250ZXh0LmNzCitAQCAtMzAwLDcgKzMwMCw3IEBAIG5hbWVzcGFjZSBNb25vLkJ0bHMKKyAJCQl0 aHJvdyBuZXcgTm90SW1wbGVtZW50ZWRFeGNlcHRpb24gKCk7CisgCQl9CisgCistCQlwdWJsaWMg b3ZlcnJpZGUgKGludCByZXQsIGJvb2wgd2FudE1vcmUpIFJlYWQgKGJ5dGVbXSBidWZmZXIsIGlu dCBvZmZzZXQsIGludCBzaXplKQorKwkJcHVibGljIG92ZXJyaWRlIFN5c3RlbS5WYWx1ZVR1cGxl PGludCwgYm9vbD4gUmVhZCAoYnl0ZVtdIGJ1ZmZlciwgaW50IG9mZnNldCwgaW50IHNpemUpCisg CQl7CisgCQkJRGVidWcgKCJSZWFkOiB7MH0gezF9IHsyfSIsIGJ1ZmZlci5MZW5ndGgsIG9mZnNl dCwgc2l6ZSk7CisgCitAQCAtMzI5LDcgKzMyOSw3IEBAIG5hbWVzcGFjZSBNb25vLkJ0bHMKKyAJ CQl9CisgCQl9CisgCistCQlwdWJsaWMgb3ZlcnJpZGUgKGludCByZXQsIGJvb2wgd2FudE1vcmUp IFdyaXRlIChieXRlW10gYnVmZmVyLCBpbnQgb2Zmc2V0LCBpbnQgc2l6ZSkKKysJCXB1YmxpYyBv dmVycmlkZSBTeXN0ZW0uVmFsdWVUdXBsZTxpbnQsIGJvb2w+IFdyaXRlIChieXRlW10gYnVmZmVy LCBpbnQgb2Zmc2V0LCBpbnQgc2l6ZSkKKyAJCXsKKyAJCQlEZWJ1ZyAoIldyaXRlOiB7MH0gezF9 IHsyfSIsIGJ1ZmZlci5MZW5ndGgsIG9mZnNldCwgc2l6ZSk7CisgCitkaWZmIC0tZ2l0IGEvbWNz L2NsYXNzL1N5c3RlbS9Nb25vLk5ldC5TZWN1cml0eS9Nb2JpbGVUbHNDb250ZXh0LmNzIGIvbWNz L2NsYXNzL1N5c3RlbS9Nb25vLk5ldC5TZWN1cml0eS9Nb2JpbGVUbHNDb250ZXh0LmNzCitpbmRl eCA3NDQxMDk3NmE4NS4uNDZmMGViNTliOWMgMTAwNjQ0CistLS0gYS9tY3MvY2xhc3MvU3lzdGVt L01vbm8uTmV0LlNlY3VyaXR5L01vYmlsZVRsc0NvbnRleHQuY3MKKysrKyBiL21jcy9jbGFzcy9T eXN0ZW0vTW9uby5OZXQuU2VjdXJpdHkvTW9iaWxlVGxzQ29udGV4dC5jcworQEAgLTE2NSw5ICsx NjUsOSBAQCBuYW1lc3BhY2UgTW9uby5OZXQuU2VjdXJpdHkKKyAKKyAJCXB1YmxpYyBhYnN0cmFj dCB2b2lkIEZsdXNoICgpOworIAorLQkJcHVibGljIGFic3RyYWN0IChpbnQgcmV0LCBib29sIHdh bnRNb3JlKSBSZWFkIChieXRlW10gYnVmZmVyLCBpbnQgb2Zmc2V0LCBpbnQgY291bnQpOworKwkJ cHVibGljIGFic3RyYWN0IFN5c3RlbS5WYWx1ZVR1cGxlPGludCwgYm9vbD4gUmVhZCAoYnl0ZVtd IGJ1ZmZlciwgaW50IG9mZnNldCwgaW50IGNvdW50KTsKKyAKKy0JCXB1YmxpYyBhYnN0cmFjdCAo aW50IHJldCwgYm9vbCB3YW50TW9yZSkgV3JpdGUgKGJ5dGVbXSBidWZmZXIsIGludCBvZmZzZXQs IGludCBjb3VudCk7CisrCQlwdWJsaWMgYWJzdHJhY3QgU3lzdGVtLlZhbHVlVHVwbGU8aW50LCBi b29sPiBXcml0ZSAoYnl0ZVtdIGJ1ZmZlciwgaW50IG9mZnNldCwgaW50IGNvdW50KTsKKyAKKyAJ CXB1YmxpYyBhYnN0cmFjdCB2b2lkIFNodXRkb3duICgpOworIAotLSAKMi40NS4yCgo= --b1=_an9yUQc81YewVJ071Mjh6ZcI5zllr0hgLHfHss8ka8A Content-Type: text/x-patch; name=0015-gnu-Add-mono-5.4.0.patch Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=0015-gnu-Add-mono-5.4.0.patch RnJvbSA3MWExNTI5OWEyYmJjNTQ4MmZkNGY1ZjE0NzMwNjdjM2ZmMzljZjgzIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpNZXNzYWdlLUlEOiA8NzFhMTUyOTlhMmJiYzU0ODJmZDRmNWYxNDczMDY3 YzNmZjM5Y2Y4My4xNzMyNzA3Mjg4LmdpdC51bm11c2hAaGFzaGJhbmcuc2g+CkluLVJlcGx5LVRv OiA8M2Y4YWY2NWY3Mjg3MWQ2MWZhODVlNjkzOWY0NmNiOGRhYzE4NWM3MC4xNzMyNzA3Mjg4Lmdp dC51bm11c2hAaGFzaGJhbmcuc2g+ClJlZmVyZW5jZXM6IDwzZjhhZjY1ZjcyODcxZDYxZmE4NWU2 OTM5ZjQ2Y2I4ZGFjMTg1YzcwLjE3MzI3MDcyODguZ2l0LnVubXVzaEBoYXNoYmFuZy5zaD4KRnJv bTogdW5tdXNoIDx1bm11c2hAaGFzaGJhbmcuc2g+CkRhdGU6IFR1ZSwgMjYgTm92IDIwMjQgMTM6 MzY6NDYKU3ViamVjdDogW1BBVENIIDE1LzIxXSBnbnU6IEFkZCBtb25vLTUuNC4wLgoKKiBnbnUv cGFja2FnZXMvZG90bmV0LnNjbQogIChtb25vLTUuNC4wLWV4dGVybmFsLXJlcG8tc3BlY3MsIG1v bm8tNS40LjApOiBOZXcgdmFyaWFibGVzLgoqIGdudS9wYWNrYWdlcy9wYXRjaGVzL2NvcmVmeC1t b25vLTUuNC4wLXBhdGNoZXMucGF0Y2g6IE5ldyBwYXRjaC4KKiBnbnUvcGFja2FnZXMvcGF0Y2hl cy9tb25vLTUuNC4wLXBhdGNoZXMucGF0Y2g6IE5ldyBwYXRjaC4KKiBnbnUvbG9jYWwubWsgKGRp c3RfcGF0Y2hfREFUQSk6IFJlZ2lzdGVyIG5ldyBwYXRjaGVzLgoKQ2hhbmdlLUlkOiBJMTUxMGM4 YWMxM2RiNjBlNWJlYWI4MDMzYmUzZWZjNDgzZTk4NGVjMAotLS0KIGdudS9sb2NhbC5tayAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgMiArCiBnbnUvcGFja2FnZXMvZG90bmV0 LnNjbSAgICAgICAgICAgICAgICAgICAgICAgfCAgOTIgKysKIC4uLi9wYXRjaGVzL2NvcmVmeC1t b25vLTUuNC4wLXBhdGNoZXMucGF0Y2ggICB8IDkxNSArKysrKysrKysrKysrKysrKysKIGdudS9w YWNrYWdlcy9wYXRjaGVzL21vbm8tNS40LjAtcGF0Y2hlcy5wYXRjaCB8IDEwMCArKwogNCBmaWxl cyBjaGFuZ2VkLCAxMTA5IGluc2VydGlvbnMoKykKIGNyZWF0ZSBtb2RlIDEwMDY0NCBnbnUvcGFj a2FnZXMvcGF0Y2hlcy9jb3JlZngtbW9uby01LjQuMC1wYXRjaGVzLnBhdGNoCiBjcmVhdGUgbW9k ZSAxMDA2NDQgZ251L3BhY2thZ2VzL3BhdGNoZXMvbW9uby01LjQuMC1wYXRjaGVzLnBhdGNoCgpk aWZmIC0tZ2l0IGEvZ251L2xvY2FsLm1rIGIvZ251L2xvY2FsLm1rCmluZGV4IGNjNzlmNTU0MWQu Ljk1NDdiZWNkZWMgMTAwNjQ0Ci0tLSBhL2dudS9sb2NhbC5taworKysgYi9nbnUvbG9jYWwubWsK QEAgLTEwOTMsNiArMTA5Myw3IEBAIGRpc3RfcGF0Y2hfREFUQSA9CQkJCQkJXAogICAlRCUvcGFj a2FnZXMvcGF0Y2hlcy9jb252ZXJzZWVuLWhpZGUtbm9uLWZyZWUtcG9pbnRlcnMucGF0Y2gJXAog ICAlRCUvcGFja2FnZXMvcGF0Y2hlcy9jb29sLXJldHJvLXRlcm0td2N0eXBlLnBhdGNoCQlcCiAg ICVEJS9wYWNrYWdlcy9wYXRjaGVzL2NvcS1hdXRvc3Vic3QtMS44LXJlbW92ZS1kZXByZWNhdGVk LWZpbGVzLnBhdGNoCQlcCisgICVEJS9wYWNrYWdlcy9wYXRjaGVzL2NvcmVmeC1tb25vLTUuNC4w LXBhdGNoZXMucGF0Y2gJCVwKICAgJUQlL3BhY2thZ2VzL3BhdGNoZXMvY29yZXV0aWxzLWdudWxp Yi10ZXN0cy5wYXRjaAkJXAogICAlRCUvcGFja2FnZXMvcGF0Y2hlcy9jcHBjaGVjay1kaXNhYmxl LWNoYXItc2lnbmVkbmVzcy10ZXN0LnBhdGNoCVwKICAgJUQlL3BhY2thZ2VzL3BhdGNoZXMvY3Bw ZGFwLWFkZC1DUFBEQVBfVVNFX0VYVEVSTkFMX0dURVNUX1BBQ0tBR0UucGF0Y2hcCkBAIC0xNzY3 LDYgKzE3NjgsNyBAQCBkaXN0X3BhdGNoX0RBVEEgPQkJCQkJCVwKICAgJUQlL3BhY2thZ2VzL3Bh dGNoZXMvbW9uby0yLjYuNC1maXhlcy5wYXRjaAkJCVwKICAgJUQlL3BhY2thZ2VzL3BhdGNoZXMv bW9uby0yLjExLjQtZml4ZXMucGF0Y2gJCQlcCiAgICVEJS9wYWNrYWdlcy9wYXRjaGVzL21vbm8t NC45LjAtZml4LXJ1bnRpbWVtZXRhZGF0YXZlcnNpb24ucGF0Y2gJCVwKKyAgJUQlL3BhY2thZ2Vz L3BhdGNoZXMvbW9uby01LjQuMC1wYXRjaGVzLnBhdGNoCQlcCiAgICVEJS9wYWNrYWdlcy9wYXRj aGVzL21vc2FpY2F0Y2hlci11bmJ1bmRsZS1odHNsaWIucGF0Y2gJXAogICAlRCUvcGFja2FnZXMv cGF0Y2hlcy9tcnJlc2N1ZS1zdXBwb3J0LWxvdmUtMTEucGF0Y2gJCVwKICAgJUQlL3BhY2thZ2Vz L3BhdGNoZXMvbXRvb2xzLW1mb3JtYXQtdW5pbml0aWFsaXplZC5wYXRjaAlcCmRpZmYgLS1naXQg YS9nbnUvcGFja2FnZXMvZG90bmV0LnNjbSBiL2dudS9wYWNrYWdlcy9kb3RuZXQuc2NtCmluZGV4 IGZiMTM2ZDA5YzIuLjkzNTcyYTA4MTIgMTAwNjQ0Ci0tLSBhL2dudS9wYWNrYWdlcy9kb3RuZXQu c2NtCisrKyBiL2dudS9wYWNrYWdlcy9kb3RuZXQuc2NtCkBAIC0xMTA1LDMgKzExMDUsOTUgQEAg KGRlZmluZS1wdWJsaWMgbW9uby01LjIuMAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIyRA cHJlcGFyZS1tb25vLXNvdXJjZS0wKSkpKQogICAgIChuYXRpdmUtaW5wdXRzIChtb2RpZnktaW5w dXRzIChwYWNrYWdlLW5hdGl2ZS1pbnB1dHMgbW9uby01LjEuMCkKICAgICAgICAgICAgICAgICAg ICAgIChyZXBsYWNlICJtb25vIiBtb25vLTUuMS4wKSkpKSkKKworKGRlZmluZSBtb25vLTUuNC4w LWV4dGVybmFsLXJlcG8tc3BlY3MKKyAgJygoImFzcG5ldHdlYnN0YWNrIiAgICAgICAgICAgICAg ImU3N2IxMmU2Y2M1ZWQyNjBhOTg0NDdmNjA5ZTg4NzMzN2U0NGUyOTkiCisgICAgICIwcmtzMzQ0 cXI0Zm1wM2ZzMTI2NGQycWttbTM0OG04ZDFramQ3ejRsOTRpaWlyd24xZnExIikKKyAgICAoImFw aS1kb2MtdG9vbHMiICAgICAgICAgICAgICAgImQwM2U4MTk4MzhjNjI0MWY5MmY5MDY1NWNiNDQ4 Y2M0N2M5ZTg3OTEiCisgICAgICIxcmlraTc5ZjNpZzNjeGlndmlzczgxZHo2MDFobjkyYTFnaWZn bG0wbXpqYnM3NnNmM2ZqIgorICAgICAjOnJlY3Vyc2l2ZT8gI3QpCisgICAgKCJhcGktc25hcHNo b3QiICAgICAgICAgICAgICAgICJiMDkwMzNiZTMzYWIyNTExMzc0MzE1MWM2NDRjODMxMTU4YzU0 MDQyIgorICAgICAiMHo2N2lxZDFicmliNm5pMzZwa2xycDdybHh5aHJpNW5rM3B4MzdmbTFhYWNn cm5zazdjayIpCisgICAgKCgicmVmZXJlbmNlLWFzc2VtYmxpZXMiICJiaW5hcnktcmVmZXJlbmNl LWFzc2VtYmxpZXMiKQorICAgICAiMTQyY2JlYjYyZmZhYmYxZGQ5YzE0MTRkOGRkNzZmOTNiY2Jl ZDBjMiIKKyAgICAgIjF3a2Q1ODloZ2IxNm01enZtcDl5YjU3YWd5eXJ5YWExamo4dmhsNHcyMGky aHAyMndhZDkiKQorICAgICgiYm9ja2J1aWxkIiAgICAgICAgICAgICAgICAgICAiMGVmZGIzNzFl NmQ3OWFiYzU0YzBlM2JiMzY4OWZhMTY0NmY0Mzk0ZSIKKyAgICAgIjEwcXIxbTJ3YTN6YjJpM2ox NmkwY3E0OWhpZ2ptNDUxYmhscWhxZDRybGlzcW4wdzhucnYiKQorICAgICgiYm9yaW5nc3NsIiAg ICAgICAgICAgICAgICAgICAiM2UwNzcwZTE4ODM1NzE0NzA4ODYwYmE5ZmUxYWYwNGE5MzI5NzFm ZiIKKyAgICAgIjEzOWEwZ2w5MWE1MmsycjZuYTZpYWx6a3F5a2FqMXJrODh6anJrYXozc2R4eDdu bW1nNnkiKQorICAgICgiY2VjaWwiICAgICAgICAgICAgICAgICAgICAgICAiYzBlYjk4M2RhYzYy NTE5ZDNhZTkzYTY4OTMxMjA3NmFhY2VjYjcyMyIKKyAgICAgIjAyaTNwd3BhZjZxMDBwa2xmbXd4 aHowbGdwODM4NTRkeXFudmY0YzF5czA3Y3M4eTFwZGsiKQorICAgICgoImNlY2lsIiAiY2VjaWwt bGVnYWN5IikgICAgICAiMzNkNTBiODc0ZmQ1MjcxMThiYzM2MWQ4M2RlM2Q0OTRlOGJiNTVlMSIK KyAgICAgIjFwNGhsMTc5NmliMjZ5a3lmNXNubDZjajBseDB2N21qaDB4cWhqdzZxZGg3NTNuc2p5 aGIiKQorICAgICgiY29yZWZ4IiAgICAgICAgICAgICAgICAgICAgICAiOWFkNTNkNjc0ZTMxMzI3 YWJjYzYwZjM1YzE0Mzg3NzAwZjUwY2M2OCIKKyAgICAgIjBhcDRnMmZqOHdzYXI0eHZiYzZka2Qy bDY3cWFseGxjdzVsYXBscTNhbjVudmoybGQ2NXciCisgICAgICM6cGF0Y2hlcyAoImNvcmVmeC1t b25vLTUuNC4wLXBhdGNoZXMucGF0Y2giKSkKKyAgICAoImNvcmVydCIgICAgICAgICAgICAgICAg ICAgICAgIjQ4ZGJhNzM4MDFlODA0ZTg5ZjAwMzExZGE5OWQ4NzNmOWM1NTAyNzgiCisgICAgICIx enc0N2pmNGN3cW1haXh5bGlzeGk3M3hmNmNhcDQxYndmOXZsbXB4YW56eGFxa2x6c3ZrIikKKyAg ICAoImlrZGFzbSIgICAgICAgICAgICAgICAgICAgICAgIjFkN2Q0MzYwMzc5MWUwMjM2YjU2ZDA3 NjU3ODY1N2JlZTQ0ZmVmNmIiCisgICAgICIxa3c4eWtrYWQ1NXFoYXBnNmpidnFpbTd2YWlucWxw ejg0NjlmbG0wODNscHo3cGtzM3NnIikKKyAgICAoKCJpa3ZtLWZvcmsiICJpa3ZtIikgICAgICAg ICAgIjg0N2UwNWZjZWQ1YzlhNDFmZjBmMjRmMWY5ZDQwZDVhOGE1NzcyYzEiCisgICAgICIxZmw5 Ym0zbG16ZjhpcXYzeDRpcWt6OWZjNTRtd2R2cnhpc3hnMm52d3djc2k0c2FmZnBpIikKKyAgICAo ImxpbmtlciIgICAgICAgICAgICAgICAgICAgICAgIjk5MzU0YmY1YzEzYjgwNTUyMDljYjA4MmNk ZGM1MGM4MDQ3YWIwODgiCisgICAgICIwNXpsYWpucWY4M3hmdm4yd2hoOW5xbDZqODVzcTEyYXcy NnNxbXlxejd6Y3BtbDE3MW1qIikKKyAgICAoIk5ld3RvbnNvZnQuSnNvbiIgICAgICAgICAgICAg IjQ3MWMzZTA4MDNhOWY0MGEwYWNjOGFlY2ViMzFkZTZmZjkzYTUyYzQiCisgICAgICIwZGduZ2Q1 aHFrNnlobGc0MGthYm42cWRua25tMzJ6Y3g5cTZibTJ3MzFjc25zazU5NzhzIikKKyAgICAoKCJO dUdldC5CdWlsZFRhc2tzIiAibnVnZXQtYnVpbGR0YXNrcyIpCisgICAgICJiNThiYTQyODIzNzdi Y2VmZDQ4YWJkYzJkNjJjZTYzMzBlMDc5YWJlIgorICAgICAiMXNheTAzZm5xa2pzeDk3emFjYW55 M3NhNWo0bWhmazgyN2hrd3AyM2liMDJxMThmN2x2cCIpCisgICAgKCgiTlVuaXRMaXRlIiAibnVu aXQtbGl0ZSIpICAgICI2OTA2MDNiZWE5OGFhZTY5ZmNhOWE2NTEzMGQ4ODU5MWJjNmNhYmVlIgor ICAgICAiMWY4NDV5c2p6czN5ZDlnY3l3dzY2ZG5reDQ4NHo1ZmtuYjhsMHh6NzRzam14azJtbmd3 YyIpCisgICAgOzsgKCJyb3NseW4tYmluYXJpZXMiICAgICAgICAgICIxOTA0YzdkMDY4MmE4Nzhl MmQyNWI0ZDQ5ZjM0NzVkMTJmYmI5Y2M2IgorICAgIDs7ICAiIikKKyAgICAoInJ4IiAgICAgICAg ICAgICAgICAgICAgICAgICAgImIyOWE0YjBmZGE2MDllMGFmMzNmZjU0ZWQxMzY1MmI2Y2NmMGUw NWUiCisgICAgICIxbjFqd2htc2JrY3YyZDgwNmltbWNwemtiNzJyejA0eHk5OG15dzM1NWE4dzVh aDI1eWl2IikKKyAgICA7OyAoInh1bml0LWJpbmFyaWVzIiAgICAgICAgICAgImQ0NDMzYjA5NzJm NDBjYjNlZmFhM2ZiYmE1Mjg2OWJkZTVkZjhmYTgiCisgICAgOzsgICIiKQorICAgICkpCisKKyhk ZWZpbmUtcHVibGljIG1vbm8tNS40LjAKKyAgKHBhY2thZ2UKKyAgICAoaW5oZXJpdCBtb25vLTUu Mi4wKQorICAgICh2ZXJzaW9uICI1LjQuMC4yMTIiKQorICAgIChuYW1lICJtb25vIikKKyAgICAo c291cmNlIChvcmlnaW4KKyAgICAgICAgICAgICAgKG1ldGhvZCBnaXQtZmV0Y2gpCisgICAgICAg ICAgICAgICh1cmkKKyAgICAgICAgICAgICAgIChnaXQtcmVmZXJlbmNlCisgICAgICAgICAgICAg ICAgKHVybCAiaHR0cHM6Ly9naXRsYWIud2luZWhxLm9yZy9tb25vL21vbm8uZ2l0IikKKyAgICAg ICAgICAgICAgICAoY29tbWl0CisgICAgICAgICAgICAgICAgIDs7IDUuNC4wLjEzNSBhbmQgYmVm b3JlIGhhdmUgYSBidWcgdGhhdCBtYWtlcyBtb25vIG5vdAorICAgICAgICAgICAgICAgICA7OyBz ZWxmLWhvc3RpbmcgKGZhaWxzIHRvIGNvbXBpbGUgc2VsZiwgZXhhbXBsZSBlcnJvcjoKKyAgICAg ICAgICAgICAgICAgOzsgU3lzdGVtLkRhdGEuU3FsQ2xpZW50L1NxbFRyYW5zYWN0aW9uLmNzKDM5 LDIyKTogZXJyb3IKKyAgICAgICAgICAgICAgICAgOzsgQ1MwNzM4OiBgU3lzdGVtLkRhdGEuU3Fs Q2xpZW50LlNxbFRyYW5zYWN0aW9uJyBkb2VzIG5vdAorICAgICAgICAgICAgICAgICA7OyBpbXBs ZW1lbnQgaW50ZXJmYWNlIG1lbWJlcgorICAgICAgICAgICAgICAgICA7OyBgU3lzdGVtLkRhdGEu SURiVHJhbnNhY3Rpb24uQ29ubmVjdGlvbi5nZXQnIGFuZCB0aGUgYmVzdAorICAgICAgICAgICAg ICAgICA7OyBpbXBsZW1lbnRpbmcgY2FuZGlkYXRlCisgICAgICAgICAgICAgICAgIDs7IGBTeXN0 ZW0uRGF0YS5TcWxDbGllbnQuU3FsVHJhbnNhY3Rpb24uQ29ubmVjdGlvbi5nZXQnCisgICAgICAg ICAgICAgICAgIDs7IHJldHVybiB0eXBlIGBTeXN0ZW0uRGF0YS5TcWxDbGllbnQuU3FsQ29ubmVj dGlvbicgZG9lcyBub3QKKyAgICAgICAgICAgICAgICAgOzsgbWF0Y2ggaW50ZXJmYWNlIG1lbWJl ciByZXR1cm4gdHlwZQorICAgICAgICAgICAgICAgICA7OyBgU3lzdGVtLkRhdGEuSURiQ29ubmVj dGlvbicKKworICAgICAgICAgICAgICAgICA7OyBOb3RlOiBpbiBhYm92ZSBleGFtcGxlLCBTcWxD b25uZWN0aW9uIGltcGxlbWVudHMKKyAgICAgICAgICAgICAgICAgOzsgSURiQ29ubmVjdGlvbi4g IE15IHVuZGVyc3RhbmRpbmcgaXMgdGhhdCBmb3IgdGhpcyB0bworICAgICAgICAgICAgICAgICA7 OyBjb21waWxlIHByb3Blcmx5LCB3ZSBuZWVkIGNvdmFyaWFudCByZXR1cm4gdHlwZXMsIHdoaWNo IGlzCisgICAgICAgICAgICAgICAgIDs7IGEgQyMgOS4wIGZlYXR1cmUsIGJ1dCBzb21laG93IHRo ZSBzYW1lIGNvZGUgaGFzIGJlZW4KKyAgICAgICAgICAgICAgICAgOzsgY29tcGlsZWQganVzdCBm aW5lIGJ5IHByZXZpb3VzIHZlcnNpb25zIG9mIG1vbm8sIGFuZCBpcworICAgICAgICAgICAgICAg ICA7OyBjb21waWxlZCBmaW5lIGJ5IHRoaXMgdmVyc2lvbiwgYnV0IG5vdCBzcGVjaWZpYyA1LjQu MC5YWFgKKyAgICAgICAgICAgICAgICAgOzsgdmVyc2lvbnMuCisgICAgICAgICAgICAgICAgICJt b25vLTUuNC4wLjIxMiIpKSkKKyAgICAgICAgICAgICAgKGZpbGUtbmFtZSAoZ2l0LWZpbGUtbmFt ZSBuYW1lIHZlcnNpb24pKQorICAgICAgICAgICAgICAoc2hhMjU2CisgICAgICAgICAgICAgICAo YmFzZTMyCisgICAgICAgICAgICAgICAgIjBneDNmeHoxd2xxNWZrajdpcGh2MzJ2ZzltNzhpYTc0 bTlwZ245cmFiNGZ5cTJrOWFuMnkiKSkKKyAgICAgICAgICAgICAgKG1vZHVsZXMgJygoZ3VpeCBi dWlsZCB1dGlscykKKyAgICAgICAgICAgICAgICAgICAgICAgICAoaWNlLTkgc3RyaW5nLWZ1bikp KQorICAgICAgICAgICAgICAoc25pcHBldCAjfihiZWdpbgorICAgICAgICAgICAgICAgICAgICAg ICAgICAgIyQoYWRkLWV4dGVybmFsLXJlcG9zCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBtb25vLTUuNC4wLWV4dGVybmFsLXJlcG8tc3BlY3MpCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAjJEBwcmVwYXJlLW1vbm8tc291cmNlLTApKQorICAgICAgICAgICAgICAocGF0Y2hlcwor ICAgICAgICAgICAgICAgKHNlYXJjaC1wYXRjaGVzCisgICAgICAgICAgICAgICAgIm1vbm8tNS40 LjAtcGF0Y2hlcy5wYXRjaCIpKSkpCisgICAgKG5hdGl2ZS1pbnB1dHMgKG1vZGlmeS1pbnB1dHMg KHBhY2thZ2UtbmF0aXZlLWlucHV0cyBtb25vLTUuMi4wKQorICAgICAgICAgICAgICAgICAgICAg KHJlcGxhY2UgIm1vbm8iIG1vbm8tNS4yLjApKSkpKQpkaWZmIC0tZ2l0IGEvZ251L3BhY2thZ2Vz L3BhdGNoZXMvY29yZWZ4LW1vbm8tNS40LjAtcGF0Y2hlcy5wYXRjaCBiL2dudS9wYWNrYWdlcy9w YXRjaGVzL2NvcmVmeC1tb25vLTUuNC4wLXBhdGNoZXMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggMDAwMDAwMDAwMC4uMDM0ZDc2OWViYwotLS0gL2Rldi9udWxsCisrKyBiL2dudS9w YWNrYWdlcy9wYXRjaGVzL2NvcmVmeC1tb25vLTUuNC4wLXBhdGNoZXMucGF0Y2gKQEAgLTAsMCAr MSw5MTUgQEAKK2RpZmYgLS1naXQgYS9zcmMvTWljcm9zb2Z0LkNTaGFycC9zcmMvTWljcm9zb2Z0 L0NTaGFycC9SdW50aW1lQmluZGVyL0V4cHJlc3Npb25UcmVlQ2FsbFJld3JpdGVyLmNzIGIvc3Jj L01pY3Jvc29mdC5DU2hhcnAvc3JjL01pY3Jvc29mdC9DU2hhcnAvUnVudGltZUJpbmRlci9FeHBy ZXNzaW9uVHJlZUNhbGxSZXdyaXRlci5jcworaW5kZXggYWE4YWZhNWExYi4uM2EyNTE4MjQ2YSAx MDA2NDQKKy0tLSBhL3NyYy9NaWNyb3NvZnQuQ1NoYXJwL3NyYy9NaWNyb3NvZnQvQ1NoYXJwL1J1 bnRpbWVCaW5kZXIvRXhwcmVzc2lvblRyZWVDYWxsUmV3cml0ZXIuY3MKKysrKyBiL3NyYy9NaWNy b3NvZnQuQ1NoYXJwL3NyYy9NaWNyb3NvZnQvQ1NoYXJwL1J1bnRpbWVCaW5kZXIvRXhwcmVzc2lv blRyZWVDYWxsUmV3cml0ZXIuY3MKK0BAIC0yNDYsOCArMjQ2LDkgQEAgbmFtZXNwYWNlIE1pY3Jv c29mdC5DU2hhcnAuUnVudGltZUJpbmRlcgorICAgICAgICAgICAgIEV4cHJBcnJheUluaXQgYXJy aW5pdDsKKyAKKyAgICAgICAgICAgICBFeHByTGlzdCBsaXN0ID0gKEV4cHJMaXN0KXBFeHByLk9w dGlvbmFsQXJndW1lbnRzOworLSAgICAgICAgICAgIGlmIChsaXN0Lk9wdGlvbmFsTmV4dExpc3RO b2RlIGlzIEV4cHJMaXN0IG5leHQpCisrICAgICAgICAgICAgaWYgKGxpc3QuT3B0aW9uYWxOZXh0 TGlzdE5vZGUgaXMgRXhwckxpc3QpCisgICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICBF eHByTGlzdCBuZXh0ID0gKEV4cHJMaXN0KWxpc3QuT3B0aW9uYWxOZXh0TGlzdE5vZGU7CisgICAg ICAgICAgICAgICAgIG1ldGhpbmZvID0gKEV4cHJNZXRob2RJbmZvKW5leHQuT3B0aW9uYWxFbGVt ZW50OworICAgICAgICAgICAgICAgICBhcnJpbml0ID0gKEV4cHJBcnJheUluaXQpbmV4dC5PcHRp b25hbE5leHRMaXN0Tm9kZTsKKyAgICAgICAgICAgICB9CitAQCAtMzgyLDggKzM4Myw5IEBAIG5h bWVzcGFjZSBNaWNyb3NvZnQuQ1NoYXJwLlJ1bnRpbWVCaW5kZXIKKyAgICAgICAgICAgICBFeHBy IG5leHROb2RlID0gbGlzdC5PcHRpb25hbE5leHRMaXN0Tm9kZTsKKyAgICAgICAgICAgICBFeHBy UHJvcGVydHlJbmZvIHByb3BpbmZvOworICAgICAgICAgICAgIEV4cHJBcnJheUluaXQgYXJndW1l bnRzOworLSAgICAgICAgICAgIGlmIChuZXh0Tm9kZSBpcyBFeHByTGlzdCBuZXh0TGlzdCkKKysg ICAgICAgICAgICBpZiAobmV4dE5vZGUgaXMgRXhwckxpc3QpCisgICAgICAgICAgICAgeworKyAg ICAgICAgICAgICAgICBFeHByTGlzdCBuZXh0TGlzdCA9IChFeHByTGlzdClsaXN0Lk9wdGlvbmFs TmV4dExpc3ROb2RlOworICAgICAgICAgICAgICAgICBwcm9waW5mbyA9IG5leHRMaXN0Lk9wdGlv bmFsRWxlbWVudCBhcyBFeHByUHJvcGVydHlJbmZvOworICAgICAgICAgICAgICAgICBhcmd1bWVu dHMgPSBuZXh0TGlzdC5PcHRpb25hbE5leHRMaXN0Tm9kZSBhcyBFeHByQXJyYXlJbml0OworICAg ICAgICAgICAgIH0KK0BAIC01NTMsOCArNTU1LDkgQEAgbmFtZXNwYWNlIE1pY3Jvc29mdC5DU2hh cnAuUnVudGltZUJpbmRlcgorICAgICAgICAgICAgIGxpc3QgPSAoRXhwckxpc3QpbGlzdC5PcHRp b25hbE5leHRMaXN0Tm9kZTsKKyAgICAgICAgICAgICBNZXRob2RJbmZvIG1ldGhvZEluZm87Cisg ICAgICAgICAgICAgYm9vbCBiSXNMaWZ0ZWQgPSBmYWxzZTsKKy0gICAgICAgICAgICBpZiAobGlz dC5PcHRpb25hbE5leHRMaXN0Tm9kZSBpcyBFeHByTGlzdCBuZXh0KQorKyAgICAgICAgICAgIGlm IChsaXN0Lk9wdGlvbmFsTmV4dExpc3ROb2RlIGlzIEV4cHJMaXN0KQorICAgICAgICAgICAgIHsK KysgICAgICAgICAgICAgICAgRXhwckxpc3QgbmV4dCA9IChFeHByTGlzdClsaXN0Lk9wdGlvbmFs TmV4dExpc3ROb2RlOworICAgICAgICAgICAgICAgICBFeHByQ29uc3RhbnQgaXNMaWZ0ZWQgPSAo RXhwckNvbnN0YW50KW5leHQuT3B0aW9uYWxFbGVtZW50OworICAgICAgICAgICAgICAgICBEZWJ1 Zy5Bc3NlcnQoaXNMaWZ0ZWQgIT0gbnVsbCk7CisgICAgICAgICAgICAgICAgIGJJc0xpZnRlZCA9 IGlzTGlmdGVkLlZhbC5JbnQzMlZhbCA9PSAxOworQEAgLTY3Nyw4ICs2ODAsOSBAQCBuYW1lc3Bh Y2UgTWljcm9zb2Z0LkNTaGFycC5SdW50aW1lQmluZGVyCisgCisgICAgICAgICBwcml2YXRlIEV4 cHJlc3Npb24gR2V0RXhwcmVzc2lvbihFeHByIHBFeHByKQorICAgICAgICAgeworLSAgICAgICAg ICAgIGlmIChwRXhwciBpcyBFeHByV3JhcCB3cmFwKQorKyAgICAgICAgICAgIGlmIChwRXhwciBp cyBFeHByV3JhcCkKKyAgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgIEV4cHJXcmFwIHdy YXAgPSAoRXhwcldyYXApIHBFeHByOworICAgICAgICAgICAgICAgICByZXR1cm4gX0RpY3Rpb25h cnlPZlBhcmFtZXRlcnNbKEV4cHJDYWxsKXdyYXAuT3B0aW9uYWxFeHByZXNzaW9uXTsKKyAgICAg ICAgICAgICB9CisgICAgICAgICAgICAgZWxzZSBpZiAocEV4cHIgaXMgRXhwckNvbnN0YW50KQor QEAgLTg3NSwyMCArODc5LDI0IEBAIG5hbWVzcGFjZSBNaWNyb3NvZnQuQ1NoYXJwLlJ1bnRpbWVC aW5kZXIKKyAgICAgICAgIHsKKyAgICAgICAgICAgICBmb3IgKDs7KQorICAgICAgICAgICAgIHsK Ky0gICAgICAgICAgICAgICAgaWYgKHBFeHByIGlzIEV4cHJDYXN0IGNhc3QpCisrICAgICAgICAg ICAgICAgIGlmIChwRXhwciBpcyBFeHByQ2FzdCkKKyAgICAgICAgICAgICAgICAgeworKyAgICAg ICAgICAgICAgICAgICAgRXhwckNhc3QgY2FzdCA9IChFeHByQ2FzdCkgcEV4cHI7CisgICAgICAg ICAgICAgICAgICAgICBwRXhwciA9IGNhc3QuQXJndW1lbnQ7CisgICAgICAgICAgICAgICAgIH0K Ky0gICAgICAgICAgICAgICAgZWxzZSBpZiAocEV4cHIgaXMgRXhwclR5cGVPZiB0eXBlT2YpCisr ICAgICAgICAgICAgICAgIGVsc2UgaWYgKHBFeHByIGlzIEV4cHJUeXBlT2YpCisgICAgICAgICAg ICAgICAgIHsKKysgICAgICAgICAgICAgICAgICAgIEV4cHJUeXBlT2YgdHlwZU9mID0gKEV4cHJU eXBlT2YpIHBFeHByOworICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHR5cGVPZi5Tb3VyY2VU eXBlLlR5cGUuQXNzb2NpYXRlZFN5c3RlbVR5cGU7CisgICAgICAgICAgICAgICAgIH0KKy0gICAg ICAgICAgICAgICAgZWxzZSBpZiAocEV4cHIgaXMgRXhwck1ldGhvZEluZm8gbWV0aG9kSW5mbykK KysgICAgICAgICAgICAgICAgZWxzZSBpZiAocEV4cHIgaXMgRXhwck1ldGhvZEluZm8pCisgICAg ICAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgICAgIEV4cHJNZXRob2RJbmZvIG1ldGhv ZEluZm8gPSAoRXhwck1ldGhvZEluZm8pIHBFeHByOworICAgICAgICAgICAgICAgICAgICAgcmV0 dXJuIEdldE1ldGhvZEluZm9Gcm9tRXhwcihtZXRob2RJbmZvKTsKKyAgICAgICAgICAgICAgICAg fQorLSAgICAgICAgICAgICAgICBlbHNlIGlmIChwRXhwciBpcyBFeHByQ29uc3RhbnQgY29uc3Rh bnQpCisrICAgICAgICAgICAgICAgIGVsc2UgaWYgKHBFeHByIGlzIEV4cHJDb25zdGFudCkKKyAg ICAgICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICAgICAgRXhwckNvbnN0YW50IGNvbnN0 YW50ID0gKEV4cHJDb25zdGFudCkgcEV4cHI7CisgICAgICAgICAgICAgICAgICAgICBDb25zdFZh bCB2YWwgPSBjb25zdGFudC5WYWw7CisgICAgICAgICAgICAgICAgICAgICBDVHlwZSB1bmRlcmx5 aW5nVHlwZSA9IHBFeHByLlR5cGU7CisgICAgICAgICAgICAgICAgICAgICBvYmplY3Qgb2JqdmFs OworQEAgLTk1NCw4ICs5NjIsOSBAQCBuYW1lc3BhY2UgTWljcm9zb2Z0LkNTaGFycC5SdW50aW1l QmluZGVyCisgCisgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcEV4cHIuVHlwZS5pc0VudW1U eXBlKCkgPyBFbnVtLlRvT2JqZWN0KHBFeHByLlR5cGUuQXNzb2NpYXRlZFN5c3RlbVR5cGUsIG9i anZhbCkgOiBvYmp2YWw7CisgICAgICAgICAgICAgICAgIH0KKy0gICAgICAgICAgICAgICAgZWxz ZSBpZiAocEV4cHIgaXMgRXhwclplcm9Jbml0IHplcm9Jbml0KQorKyAgICAgICAgICAgICAgICBl bHNlIGlmIChwRXhwciBpcyBFeHByWmVyb0luaXQpCisgICAgICAgICAgICAgICAgIHsKKysgICAg ICAgICAgICAgICAgICAgIEV4cHJaZXJvSW5pdCB6ZXJvSW5pdCA9IChFeHByWmVyb0luaXQpIHBF eHByOworICAgICAgICAgICAgICAgICAgICAgaWYgKChwRXhwciA9IHplcm9Jbml0Lk9wdGlvbmFs QXJndW1lbnQpID09IG51bGwpCisgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAg ICAgICAgICAgICAgcmV0dXJuIEFjdGl2YXRvci5DcmVhdGVJbnN0YW5jZSh6ZXJvSW5pdC5UeXBl LkFzc29jaWF0ZWRTeXN0ZW1UeXBlKTsKK0BAIC05ODEsOCArOTkwLDkgQEAgbmFtZXNwYWNlIE1p Y3Jvc29mdC5DU2hhcnAuUnVudGltZUJpbmRlcgorICAgICAgICAgICAgICAgICBFeHByIHAgPSBs aXN0OworICAgICAgICAgICAgICAgICB3aGlsZSAobGlzdCAhPSBudWxsKQorICAgICAgICAgICAg ICAgICB7CistICAgICAgICAgICAgICAgICAgICBpZiAobGlzdCBpcyBFeHByTGlzdCBwTGlzdCkK KysgICAgICAgICAgICAgICAgICAgIGlmIChsaXN0IGlzIEV4cHJMaXN0KQorICAgICAgICAgICAg ICAgICAgICAgeworKyAgICAgICAgICAgICAgICAgICAgICAgIEV4cHJMaXN0IHBMaXN0ID0gKEV4 cHJMaXN0KSBsaXN0OworICAgICAgICAgICAgICAgICAgICAgICAgIHAgPSBwTGlzdC5PcHRpb25h bEVsZW1lbnQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgbGlzdCA9IHBMaXN0Lk9wdGlvbmFs TmV4dExpc3ROb2RlOworICAgICAgICAgICAgICAgICAgICAgfQorZGlmZiAtLWdpdCBhL3NyYy9N aWNyb3NvZnQuQ1NoYXJwL3NyYy9NaWNyb3NvZnQvQ1NoYXJwL1J1bnRpbWVCaW5kZXIvUnVudGlt ZUJpbmRlci5jcyBiL3NyYy9NaWNyb3NvZnQuQ1NoYXJwL3NyYy9NaWNyb3NvZnQvQ1NoYXJwL1J1 bnRpbWVCaW5kZXIvUnVudGltZUJpbmRlci5jcworaW5kZXggNmRjODg4YzZlZi4uODlmODgxZjY2 OCAxMDA2NDQKKy0tLSBhL3NyYy9NaWNyb3NvZnQuQ1NoYXJwL3NyYy9NaWNyb3NvZnQvQ1NoYXJw L1J1bnRpbWVCaW5kZXIvUnVudGltZUJpbmRlci5jcworKysrIGIvc3JjL01pY3Jvc29mdC5DU2hh cnAvc3JjL01pY3Jvc29mdC9DU2hhcnAvUnVudGltZUJpbmRlci9SdW50aW1lQmluZGVyLmNzCitA QCAtMTk1LDcgKzE5NSw4IEBAIG5hbWVzcGFjZSBNaWNyb3NvZnQuQ1NoYXJwLlJ1bnRpbWVCaW5k ZXIKKyAgICAgICAgICAgICBMb2NhbFZhcmlhYmxlU3ltYm9sW10gbG9jYWxzID0gUG9wdWxhdGVM b2NhbFNjb3BlKHBheWxvYWQsIHBTY29wZSwgYXJndW1lbnRzLCBwYXJhbWV0ZXJzKTsKKyAKKyAg ICAgICAgICAgICAvLyAoMS41KSAtIENoZWNrIHRvIHNlZSBpZiB3ZSBuZWVkIHRvIGRlZmVyLgor LSAgICAgICAgICAgIGlmIChEZWZlckJpbmRpbmcocGF5bG9hZCwgYXJndW1lbnRzLCBhcmdzLCBs b2NhbHMsIG91dCBEeW5hbWljTWV0YU9iamVjdCBvKSkKKysgICAgICAgICAgICBEeW5hbWljTWV0 YU9iamVjdCBvOworKyAgICAgICAgICAgIGlmIChEZWZlckJpbmRpbmcocGF5bG9hZCwgYXJndW1l bnRzLCBhcmdzLCBsb2NhbHMsIG91dCBvKSkKKyAgICAgICAgICAgICB7CisgICAgICAgICAgICAg ICAgIGRlZmVycmVkQmluZGluZyA9IG87CisgICAgICAgICAgICAgICAgIHJldHVybiBudWxsOwor QEAgLTEwNTMsOCArMTA1NCw5IEBAIG5hbWVzcGFjZSBNaWNyb3NvZnQuQ1NoYXJwLlJ1bnRpbWVC aW5kZXIKKyAKKyAgICAgICAgIHByaXZhdGUgc3RhdGljIHZvaWQgQ2hlY2tGb3JDb25kaXRpb25h bE1ldGhvZEVycm9yKEV4cHIgcEV4cHIpCisgICAgICAgICB7CistICAgICAgICAgICAgaWYgKHBF eHByIGlzIEV4cHJDYWxsIGNhbGwpCisrICAgICAgICAgICAgaWYgKHBFeHByIGlzIEV4cHJDYWxs KQorICAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgRXhwckNhbGwgY2FsbCA9IChFeHBy Q2FsbClwRXhwcjsKKyAgICAgICAgICAgICAgICAgLy8gVGhpcyBtaW1pY3MgdGhlIGJlaGF2aW9y IG9mIHRoZSBuYXRpdmUgQ29tcGlsZXJTeW1ib2xMb2FkZXIgaW4gR2V0Q29uZGl0aW9uYWxTeW1i b2xzLiBPdmVycmlkZQorICAgICAgICAgICAgICAgICAvLyBtZXRob2RzIGNhbm5vdCBoYXZlIHRo ZSBjb25kaXRpb25hbCBhdHRyaWJ1dGUsIGJ1dCBpbXBsaWNpdGx5IGFjcXVpcmUgaXQgZnJvbSB0 aGVpciBzbG90LgorIAorQEAgLTEwODcsOCArMTA4OSw5IEBAIG5hbWVzcGFjZSBNaWNyb3NvZnQu Q1NoYXJwLlJ1bnRpbWVCaW5kZXIKKyAgICAgICAgICAgICBFeHByTWVtYmVyR3JvdXAgbWVtZ3Jv dXA7CisgICAgICAgICAgICAgVHlwZUFycmF5IHR5cGVBcmdzOworIAorLSAgICAgICAgICAgIGlm IChwUmVzdWx0IGlzIEV4cHJDYWxsIGNhbGwpCisrICAgICAgICAgICAgaWYgKHBSZXN1bHQgaXMg RXhwckNhbGwpCisgICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICBFeHByQ2FsbCBjYWxs ID0gKEV4cHJDYWxsKSBwUmVzdWx0OworICAgICAgICAgICAgICAgICB0eXBlID0gY2FsbC5NZXRo V2l0aEluc3QuQXRzOworICAgICAgICAgICAgICAgICBtZXRocHJvcCA9IGNhbGwuTWV0aFdpdGhJ bnN0Lk1ldGgoKTsKKyAgICAgICAgICAgICAgICAgbWVtZ3JvdXAgPSBjYWxsLk1lbWJlckdyb3Vw OworQEAgLTExNTUsMTIgKzExNTgsMTUgQEAgbmFtZXNwYWNlIE1pY3Jvc29mdC5DU2hhcnAuUnVu dGltZUJpbmRlcgorIAorICAgICAgICAgcHJpdmF0ZSBFeHByIFN0cmlwTmFtZWRBcmd1bWVudChF eHByIHBBcmcpCisgICAgICAgICB7CistICAgICAgICAgICAgaWYgKHBBcmcgaXMgRXhwck5hbWVk QXJndW1lbnRTcGVjaWZpY2F0aW9uIG5hbWVkKQorKyAgICAgICAgICAgIGlmIChwQXJnIGlzIEV4 cHJOYW1lZEFyZ3VtZW50U3BlY2lmaWNhdGlvbikKKyAgICAgICAgICAgICB7CisrICAgICAgICAg ICAgICAgIEV4cHJOYW1lZEFyZ3VtZW50U3BlY2lmaWNhdGlvbiBuYW1lZCA9CisrICAgICAgICAg ICAgICAgICAgICAoRXhwck5hbWVkQXJndW1lbnRTcGVjaWZpY2F0aW9uKSBwQXJnOworICAgICAg ICAgICAgICAgICBwQXJnID0gbmFtZWQuVmFsdWU7CisgICAgICAgICAgICAgfQorLSAgICAgICAg ICAgIGVsc2UgaWYgKHBBcmcgaXMgRXhwckFycmF5SW5pdCBpbml0KQorKyAgICAgICAgICAgIGVs c2UgaWYgKHBBcmcgaXMgRXhwckFycmF5SW5pdCkKKyAgICAgICAgICAgICB7CisrICAgICAgICAg ICAgICAgIEV4cHJBcnJheUluaXQgaW5pdCA9IChFeHByQXJyYXlJbml0KSBwQXJnOworICAgICAg ICAgICAgICAgICBpbml0Lk9wdGlvbmFsQXJndW1lbnRzID0gU3RyaXBOYW1lZEFyZ3VtZW50cyhp bml0Lk9wdGlvbmFsQXJndW1lbnRzKTsKKyAgICAgICAgICAgICB9CisgCitAQCAtMTE2OSwxNCAr MTE3NSwxNiBAQCBuYW1lc3BhY2UgTWljcm9zb2Z0LkNTaGFycC5SdW50aW1lQmluZGVyCisgCisg ICAgICAgICBwcml2YXRlIEV4cHIgU3RyaXBOYW1lZEFyZ3VtZW50cyhFeHByIHBBcmcpCisgICAg ICAgICB7CistICAgICAgICAgICAgaWYgKHBBcmcgaXMgRXhwckxpc3QgbGlzdCkKKysgICAgICAg ICAgICBpZiAocEFyZyBpcyBFeHByTGlzdCkKKyAgICAgICAgICAgICB7CisrICAgICAgICAgICAg ICAgIEV4cHJMaXN0IGxpc3QgPSAoRXhwckxpc3QpIHBBcmc7CisgICAgICAgICAgICAgICAgIGZv cig7OykKKyAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgbGlzdC5PcHRp b25hbEVsZW1lbnQgPSBTdHJpcE5hbWVkQXJndW1lbnQobGlzdC5PcHRpb25hbEVsZW1lbnQpOwor IAorLSAgICAgICAgICAgICAgICAgICAgaWYgKGxpc3QuT3B0aW9uYWxOZXh0TGlzdE5vZGUgaXMg RXhwckxpc3QgbmV4dCkKKysgICAgICAgICAgICAgICAgICAgIGlmIChsaXN0Lk9wdGlvbmFsTmV4 dExpc3ROb2RlIGlzIEV4cHJMaXN0KQorICAgICAgICAgICAgICAgICAgICAgeworKyAgICAgICAg ICAgICAgICAgICAgICAgIEV4cHJMaXN0IG5leHQgPSAoRXhwckxpc3QpbGlzdC5PcHRpb25hbE5l eHRMaXN0Tm9kZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICBsaXN0ID0gbmV4dDsKKyAgICAg ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgIGVsc2UKK2RpZmYgLS1naXQg YS9zcmMvTWljcm9zb2Z0LkNTaGFycC9zcmMvTWljcm9zb2Z0L0NTaGFycC9SdW50aW1lQmluZGVy L1NlbWFudGljcy9CaW5kaW5nL0JldHRlci5jcyBiL3NyYy9NaWNyb3NvZnQuQ1NoYXJwL3NyYy9N aWNyb3NvZnQvQ1NoYXJwL1J1bnRpbWVCaW5kZXIvU2VtYW50aWNzL0JpbmRpbmcvQmV0dGVyLmNz CitpbmRleCBjZWJmY2Q5NGUxLi4xNzlhYzIxNjIwIDEwMDY0NAorLS0tIGEvc3JjL01pY3Jvc29m dC5DU2hhcnAvc3JjL01pY3Jvc29mdC9DU2hhcnAvUnVudGltZUJpbmRlci9TZW1hbnRpY3MvQmlu ZGluZy9CZXR0ZXIuY3MKKysrKyBiL3NyYy9NaWNyb3NvZnQuQ1NoYXJwL3NyYy9NaWNyb3NvZnQv Q1NoYXJwL1J1bnRpbWVCaW5kZXIvU2VtYW50aWNzL0JpbmRpbmcvQmV0dGVyLmNzCitAQCAtMTU3 LDggKzE1Nyw5IEBAIG5hbWVzcGFjZSBNaWNyb3NvZnQuQ1NoYXJwLlJ1bnRpbWVCaW5kZXIuU2Vt YW50aWNzCisgICAgICAgICAgICAgLy8gV2UgdGhlbiBnbyBvdmVyIHRoZSBzcGVjaWZpZWQgYXJn dW1lbnRzIGFuZCBwdXQgdGhlIHR5cGUgZm9yIGFueSBuYW1lZCBhcmd1bWVudCBpbiB0aGUgcmln aHQgcG9zaXRpb24gaW4gdGhlIGFycmF5LgorICAgICAgICAgICAgIGZvciAoaW50IGlQYXJhbSA9 IDA7IGlQYXJhbSA8IGFyZ3MuY2FyZzsgaVBhcmFtKyspCisgICAgICAgICAgICAgeworLSAgICAg ICAgICAgICAgICBpZiAocHJnZXhwcltpUGFyYW1dIGlzIEV4cHJOYW1lZEFyZ3VtZW50U3BlY2lm aWNhdGlvbiBuYW1lZCkKKysgICAgICAgICAgICAgICAgaWYgKHByZ2V4cHJbaVBhcmFtXSBpcyBF eHByTmFtZWRBcmd1bWVudFNwZWNpZmljYXRpb24pCisgICAgICAgICAgICAgICAgIHsKKysgICAg ICAgICAgICAgICAgICAgIEV4cHJOYW1lZEFyZ3VtZW50U3BlY2lmaWNhdGlvbiBuYW1lZCA9IChF eHByTmFtZWRBcmd1bWVudFNwZWNpZmljYXRpb24pcHJnZXhwcltpUGFyYW1dOworICAgICAgICAg ICAgICAgICAgICAgLy8gV2UgZmluZCB0aGUgaW5kZXggb2YgdGhlIHR5cGUgb2YgdGhlIGFyZ3Vt ZW50IGluIHRoZSBtZXRob2QgcGFyYW1ldGVyIGxpc3QgYW5kIHN0b3JlIHRoYXQgaW4gYSB0ZW1w CisgICAgICAgICAgICAgICAgICAgICBpbnQgaW5kZXggPSBGaW5kTmFtZShtZXRoUHJvcC5QYXJh bWV0ZXJOYW1lcywgbmFtZWQuTmFtZSk7CisgICAgICAgICAgICAgICAgICAgICBDVHlwZSB0ZW1w VHlwZSA9IHB0YVtpbmRleF07CitkaWZmIC0tZ2l0IGEvc3JjL01pY3Jvc29mdC5DU2hhcnAvc3Jj L01pY3Jvc29mdC9DU2hhcnAvUnVudGltZUJpbmRlci9TZW1hbnRpY3MvQmluZGluZy9FcnJvclJl cG9ydGluZy5jcyBiL3NyYy9NaWNyb3NvZnQuQ1NoYXJwL3NyYy9NaWNyb3NvZnQvQ1NoYXJwL1J1 bnRpbWVCaW5kZXIvU2VtYW50aWNzL0JpbmRpbmcvRXJyb3JSZXBvcnRpbmcuY3MKK2luZGV4IGM0 MDZhZjQzZGUuLjBlYTgxZWYyMWMgMTAwNjQ0CistLS0gYS9zcmMvTWljcm9zb2Z0LkNTaGFycC9z cmMvTWljcm9zb2Z0L0NTaGFycC9SdW50aW1lQmluZGVyL1NlbWFudGljcy9CaW5kaW5nL0Vycm9y UmVwb3J0aW5nLmNzCisrKysgYi9zcmMvTWljcm9zb2Z0LkNTaGFycC9zcmMvTWljcm9zb2Z0L0NT aGFycC9SdW50aW1lQmluZGVyL1NlbWFudGljcy9CaW5kaW5nL0Vycm9yUmVwb3J0aW5nLmNzCitA QCAtNzYsMjIgKzc2LDI1IEBAIG5hbWVzcGFjZSBNaWNyb3NvZnQuQ1NoYXJwLlJ1bnRpbWVCaW5k ZXIuU2VtYW50aWNzCisgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICBEZWJ1Zy5Bc3Nl cnQoZXhwciAhPSBudWxsKTsKKyAKKy0gICAgICAgICAgICAgICAgaWYgKGV4cHIgaXMgRXhwckxv Y2FsIGxvY2FsICYmIGxvY2FsLklzT0spCisrICAgICAgICAgICAgICAgIGlmIChleHByIGlzIEV4 cHJMb2NhbCAmJiAoKEV4cHJMb2NhbClleHByKS5Jc09LKQorICAgICAgICAgICAgICAgICB7Cisr ICAgICAgICAgICAgICAgICAgICBFeHByTG9jYWwgbG9jYWwgPSAoRXhwckxvY2FsKWV4cHI7Cisg ICAgICAgICAgICAgICAgICAgICBSZXBvcnRMb2NhbEVycm9yKGxvY2FsLkxvY2FsLCBraW5kLCBp c05lc3RlZCk7CisgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAg ICAgICAgfQorIAorICAgICAgICAgICAgICAgICBFeHByIHBPYmplY3QgPSBudWxsOworIAorLSAg ICAgICAgICAgICAgICBpZiAoZXhwciBpcyBFeHByUHJvcGVydHkgcHJvcCkKKysgICAgICAgICAg ICAgICAgaWYgKGV4cHIgaXMgRXhwclByb3BlcnR5KQorICAgICAgICAgICAgICAgICB7CisrICAg ICAgICAgICAgICAgICAgICBFeHByUHJvcGVydHkgcHJvcCA9IChFeHByUHJvcGVydHkpZXhwcjsK KyAgICAgICAgICAgICAgICAgICAgIC8vIFdlJ3ZlIGFscmVhZHkgcmVwb3J0ZWQgcmVhZC1vbmx5 LXByb3BlcnR5IGVycm9ycy4KKyAgICAgICAgICAgICAgICAgICAgIERlYnVnLkFzc2VydChwcm9w Lk1ldGhXaXRoVHlwZVNldCAhPSBudWxsKTsKKyAgICAgICAgICAgICAgICAgICAgIHBPYmplY3Qg PSBwcm9wLk1lbWJlckdyb3VwLk9wdGlvbmFsT2JqZWN0OworICAgICAgICAgICAgICAgICB9Cist ICAgICAgICAgICAgICAgIGVsc2UgaWYgKGV4cHIgaXMgRXhwckZpZWxkIGZpZWxkKQorKyAgICAg ICAgICAgICAgICBlbHNlIGlmIChleHByIGlzIEV4cHJGaWVsZCkKKyAgICAgICAgICAgICAgICAg eworKyAgICAgICAgICAgICAgICAgICAgRXhwckZpZWxkIGZpZWxkID0gKEV4cHJGaWVsZClleHBy OworICAgICAgICAgICAgICAgICAgICAgaWYgKGZpZWxkLkZpZWxkV2l0aFR5cGUuRmllbGQoKS5p c1JlYWRPbmx5KQorICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAg ICAgIFJlcG9ydFJlYWRPbmx5RXJyb3IoZmllbGQsIGtpbmQsIGlzTmVzdGVkKTsKK0BAIC0xMDUs OCArMTA4LDkgQEAgbmFtZXNwYWNlIE1pY3Jvc29mdC5DU2hhcnAuUnVudGltZUJpbmRlci5TZW1h bnRpY3MKKyAKKyAgICAgICAgICAgICAgICAgaWYgKHBPYmplY3QgIT0gbnVsbCAmJiBwT2JqZWN0 LlR5cGUuaXNTdHJ1Y3RPckVudW0oKSkKKyAgICAgICAgICAgICAgICAgeworLSAgICAgICAgICAg ICAgICAgICAgaWYgKHBPYmplY3QgaXMgSUV4cHJXaXRoQXJncyB3aXRoQXJncykKKysgICAgICAg ICAgICAgICAgICAgIGlmIChwT2JqZWN0IGlzIElFeHByV2l0aEFyZ3MpCisgICAgICAgICAgICAg ICAgICAgICB7CisrICAgICAgICAgICAgICAgICAgICAgICAgSUV4cHJXaXRoQXJncyB3aXRoQXJn cyA9IChJRXhwcldpdGhBcmdzKXBPYmplY3Q7CisgICAgICAgICAgICAgICAgICAgICAgICAgLy8g YXNzaWduaW5nIHRvIFJIUyBvZiBtZXRob2Qgb3IgcHJvcGVydHkgZ2V0dGVyIHJldHVybmluZyBh IHZhbHVlLXR5cGUgb24gdGhlIHN0YWNrIG9yCisgICAgICAgICAgICAgICAgICAgICAgICAgLy8g cGFzc2luZyBSSFMgb2YgbWV0aG9kIG9yIHByb3BlcnR5IGdldHRlciByZXR1cm5pbmcgYSB2YWx1 ZS10eXBlIG9uIHRoZSBzdGFjaywgYXMgcmVmIG9yIG91dAorICAgICAgICAgICAgICAgICAgICAg ICAgIEVycm9yQ29udGV4dC5FcnJvcihFcnJvckNvZGUuRVJSX1JldHVybk5vdExWYWx1ZSwgd2l0 aEFyZ3MuR2V0U3ltV2l0aFR5cGUoKSk7CitkaWZmIC0tZ2l0IGEvc3JjL01pY3Jvc29mdC5DU2hh cnAvc3JjL01pY3Jvc29mdC9DU2hhcnAvUnVudGltZUJpbmRlci9TZW1hbnRpY3MvQ29udmVyc2lv bi5jcyBiL3NyYy9NaWNyb3NvZnQuQ1NoYXJwL3NyYy9NaWNyb3NvZnQvQ1NoYXJwL1J1bnRpbWVC aW5kZXIvU2VtYW50aWNzL0NvbnZlcnNpb24uY3MKK2luZGV4IGJiNjJhOTI2YjUuLjg3M2ZlZmY3 MmYgMTAwNjQ0CistLS0gYS9zcmMvTWljcm9zb2Z0LkNTaGFycC9zcmMvTWljcm9zb2Z0L0NTaGFy cC9SdW50aW1lQmluZGVyL1NlbWFudGljcy9Db252ZXJzaW9uLmNzCisrKysgYi9zcmMvTWljcm9z b2Z0LkNTaGFycC9zcmMvTWljcm9zb2Z0L0NTaGFycC9SdW50aW1lQmluZGVyL1NlbWFudGljcy9D b252ZXJzaW9uLmNzCitAQCAtMzkxLDkgKzM5MSwxMCBAQCBuYW1lc3BhY2UgTWljcm9zb2Z0LkNT aGFycC5SdW50aW1lQmluZGVyLlNlbWFudGljcworICAgICAgICAgICAgICAgICBGVU5EVFlQRSBm dFNyYyA9IGV4cHIuVHlwZS5mdW5kVHlwZSgpOworICAgICAgICAgICAgICAgICBGVU5EVFlQRSBm dERlc3QgPSBkZXN0LmZ1bmRUeXBlKCk7CisgCistICAgICAgICAgICAgICAgIGlmIChleHByIGlz IEV4cHJDb25zdGFudCBjb25zdGFudCAmJiBjb25zdGFudC5Jc09LICYmCisrICAgICAgICAgICAg ICAgIGlmIChleHByIGlzIEV4cHJDb25zdGFudCAmJiAoKEV4cHJDb25zdGFudClleHByKS5Jc09L ICYmCisgICAgICAgICAgICAgICAgICAgICBleHByLlR5cGUuaXNTaW1wbGVUeXBlKCkgJiYgZGVz dC5pc1NpbXBsZVR5cGUoKSkKKyAgICAgICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICAg ICAgRXhwckNvbnN0YW50IGNvbnN0YW50ID0gKEV4cHJDb25zdGFudCkgZXhwcjsKKyAgICAgICAg ICAgICAgICAgICAgIGlmICgoZnRTcmMgPT0gRlVORFRZUEUuRlRfSTQgJiYgKGZ0RGVzdCA8PSBG VU5EVFlQRS5GVF9MQVNUTk9OTE9ORyB8fCBmdERlc3QgPT0gRlVORFRZUEUuRlRfVTgpKSB8fAor ICAgICAgICAgICAgICAgICAgICAgICAgIChmdFNyYyA9PSBGVU5EVFlQRS5GVF9JOCAmJiBmdERl c3QgPT0gRlVORFRZUEUuRlRfVTgpKQorICAgICAgICAgICAgICAgICAgICAgeworQEAgLTQyMSw4 ICs0MjIsOSBAQCBuYW1lc3BhY2UgTWljcm9zb2Z0LkNTaGFycC5SdW50aW1lQmluZGVyLlNlbWFu dGljcworICAgICAgICAgICAgICAgICAgICAgRXJyb3JDb250ZXh0LkVycm9yKGRlc3QgaXMgVHlw ZVBhcmFtZXRlclR5cGUgPyBFcnJvckNvZGUuRVJSX1R5cGVWYXJDYW50QmVOdWxsIDogRXJyb3JD b2RlLkVSUl9WYWx1ZUNhbnRCZU51bGwsIGRlc3QpOworICAgICAgICAgICAgICAgICB9CisgCist ICAgICAgICAgICAgICAgIGVsc2UgaWYgKGV4cHIgaXMgRXhwck1lbWJlckdyb3VwIG1lbUdycCkK KysgICAgICAgICAgICAgICAgZWxzZSBpZiAoZXhwciBpcyBFeHByTWVtYmVyR3JvdXApCisgICAg ICAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgICAgIEV4cHJNZW1iZXJHcm91cCBtZW1H cnAgPSAoRXhwck1lbWJlckdyb3VwKSBleHByOworICAgICAgICAgICAgICAgICAgICAgQmluZEdy cENvbnZlcnNpb24obWVtR3JwLCBkZXN0LCB0cnVlKTsKKyAgICAgICAgICAgICAgICAgfQorICAg ICAgICAgICAgICAgICBlbHNlIGlmICghVHlwZU1hbmFnZXIuVHlwZUNvbnRhaW5zQW5vbnltb3Vz VHlwZXMoZGVzdCkgJiYgY2FuQ2FzdChleHByLlR5cGUsIGRlc3QsIGZsYWdzKSkKK0BAIC01NTUs OCArNTU3LDkgQEAgbmFtZXNwYWNlIE1pY3Jvc29mdC5DU2hhcnAuUnVudGltZUJpbmRlci5TZW1h bnRpY3MKKyAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICBF cnJvckNvbnRleHQuRXJyb3IoRXJyb3JDb2RlLkVSUl9WYWx1ZUNhbnRCZU51bGwsIGRlc3QpOwor ICAgICAgICAgICAgICAgICAgICAgfQorLSAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoZXhw ciBpcyBFeHByTWVtYmVyR3JvdXAgbWVtR3JwKQorKyAgICAgICAgICAgICAgICAgICAgZWxzZSBp ZiAoZXhwciBpcyBFeHByTWVtYmVyR3JvdXApCisgICAgICAgICAgICAgICAgICAgICB7CisrICAg ICAgICAgICAgICAgICAgICAgICAgRXhwck1lbWJlckdyb3VwIG1lbUdycCA9IChFeHByTWVtYmVy R3JvdXApZXhwcjsKKyAgICAgICAgICAgICAgICAgICAgICAgICBCaW5kR3JwQ29udmVyc2lvbiht ZW1HcnAsIGRlc3QsIHRydWUpOworICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg ICAgICAgICAgZWxzZQorQEAgLTEzOTYsOCArMTM5OSw5IEBAIG5hbWVzcGFjZSBNaWNyb3NvZnQu Q1NoYXJwLlJ1bnRpbWVCaW5kZXIuU2VtYW50aWNzCisgICAgICAgICAgICAgZm9yICg7OykKKyAg ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIERlYnVnLkFzc2VydChwRXhwciAhPSBudWxs KTsKKy0gICAgICAgICAgICAgICAgaWYgKHBFeHByIGlzIEV4cHJDYWxsIGNhbGwpCisrICAgICAg ICAgICAgICAgIGlmIChwRXhwciBpcyBFeHByQ2FsbCkKKyAgICAgICAgICAgICAgICAgeworKyAg ICAgICAgICAgICAgICAgICAgRXhwckNhbGwgY2FsbCA9IChFeHByQ2FsbClwRXhwcjsKKyAgICAg ICAgICAgICAgICAgICAgIHN3aXRjaCAoY2FsbC5OdWxsYWJsZUNhbGxMaWZ0S2luZCkKKyAgICAg ICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIE51bGxhYmxl Q2FsbExpZnRLaW5kLk5vdExpZnRlZDoKK0BAIC0xNDExLDggKzE0MTUsOSBAQCBuYW1lc3BhY2Ug TWljcm9zb2Z0LkNTaGFycC5SdW50aW1lQmluZGVyLlNlbWFudGljcworICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg ICAgICAgICAgfQorLSAgICAgICAgICAgICAgICBlbHNlIGlmIChwRXhwciBpcyBFeHByVXNlckRl ZmluZWRDb252ZXJzaW9uIHVkYykKKysgICAgICAgICAgICAgICAgZWxzZSBpZiAocEV4cHIgaXMg RXhwclVzZXJEZWZpbmVkQ29udmVyc2lvbikKKyAgICAgICAgICAgICAgICAgeworKyAgICAgICAg ICAgICAgICAgICAgRXhwclVzZXJEZWZpbmVkQ29udmVyc2lvbiB1ZGMgPSAoRXhwclVzZXJEZWZp bmVkQ29udmVyc2lvbilwRXhwcjsKKyAgICAgICAgICAgICAgICAgICAgIHBFeHByID0gdWRjLlVz ZXJEZWZpbmVkQ2FsbDsKKyAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAg ICAgICAgICB9CitkaWZmIC0tZ2l0IGEvc3JjL01pY3Jvc29mdC5DU2hhcnAvc3JjL01pY3Jvc29m dC9DU2hhcnAvUnVudGltZUJpbmRlci9TZW1hbnRpY3MvRVhQUkV4dGVuc2lvbnMuY3MgYi9zcmMv TWljcm9zb2Z0LkNTaGFycC9zcmMvTWljcm9zb2Z0L0NTaGFycC9SdW50aW1lQmluZGVyL1NlbWFu dGljcy9FWFBSRXh0ZW5zaW9ucy5jcworaW5kZXggMDc1ZWQyM2ExMS4uNjQwOGRmNGMzNiAxMDA2 NDQKKy0tLSBhL3NyYy9NaWNyb3NvZnQuQ1NoYXJwL3NyYy9NaWNyb3NvZnQvQ1NoYXJwL1J1bnRp bWVCaW5kZXIvU2VtYW50aWNzL0VYUFJFeHRlbnNpb25zLmNzCisrKysgYi9zcmMvTWljcm9zb2Z0 LkNTaGFycC9zcmMvTWljcm9zb2Z0L0NTaGFycC9SdW50aW1lQmluZGVyL1NlbWFudGljcy9FWFBS RXh0ZW5zaW9ucy5jcworQEAgLTMzLDggKzMzLDkgQEAgbmFtZXNwYWNlIE1pY3Jvc29mdC5DU2hh cnAuUnVudGltZUJpbmRlci5TZW1hbnRpY3MKKyAgICAgICAgICAgICBFeHByIGV4cHJDdXIgPSBl eHByOworICAgICAgICAgICAgIHdoaWxlIChleHByQ3VyICE9IG51bGwpCisgICAgICAgICAgICAg eworLSAgICAgICAgICAgICAgICBpZiAoZXhwckN1ciBpcyBFeHByTGlzdCBsaXN0KQorKyAgICAg ICAgICAgICAgICBpZiAoZXhwckN1ciBpcyBFeHByTGlzdCkKKyAgICAgICAgICAgICAgICAgewor KyAgICAgICAgICAgICAgICAgICAgRXhwckxpc3QgbGlzdCA9IChFeHByTGlzdClleHByQ3VyOwor ICAgICAgICAgICAgICAgICAgICAgeWllbGQgcmV0dXJuIGxpc3QuT3B0aW9uYWxFbGVtZW50Owor ICAgICAgICAgICAgICAgICAgICAgZXhwckN1ciA9IGxpc3QuT3B0aW9uYWxOZXh0TGlzdE5vZGU7 CisgICAgICAgICAgICAgICAgIH0KK0BAIC02MSwxMiArNjIsMTIgQEAgbmFtZXNwYWNlIE1pY3Jv c29mdC5DU2hhcnAuUnVudGltZUJpbmRlci5TZW1hbnRpY3MKKyAgICAgICAgIH0KKyAgICAgICAg IHB1YmxpYyBzdGF0aWMgYm9vbCBpc051bGwodGhpcyBFeHByIGV4cHIpCisgICAgICAgICB7Cist ICAgICAgICAgICAgcmV0dXJuIGV4cHIgaXMgRXhwckNvbnN0YW50IGNvbnN0YW50ICYmIGNvbnN0 YW50LklzT0sgJiYgKGV4cHIuVHlwZS5mdW5kVHlwZSgpID09IEZVTkRUWVBFLkZUX1JFRikgJiYg Y29uc3RhbnQuVmFsLklzTnVsbFJlZjsKKysgICAgICAgICAgICByZXR1cm4gZXhwciBpcyBFeHBy Q29uc3RhbnQgJiYgKChFeHByQ29uc3RhbnQpZXhwcikuSXNPSyAmJiAoZXhwci5UeXBlLmZ1bmRU eXBlKCkgPT0gRlVORFRZUEUuRlRfUkVGKSAmJiAoKEV4cHJDb25zdGFudClleHByKS5WYWwuSXNO dWxsUmVmOworICAgICAgICAgfQorIAorICAgICAgICAgcHVibGljIHN0YXRpYyBib29sIElzWmVy byh0aGlzIEV4cHIgZXhwcikKKyAgICAgICAgIHsKKy0gICAgICAgICAgICByZXR1cm4gZXhwciBp cyBFeHByQ29uc3RhbnQgY29uc3RhbnQgJiYgY29uc3RhbnQuSXNPSyAmJiBjb25zdGFudC5Jc1pl cm87CisrICAgICAgICAgICAgcmV0dXJuIGV4cHIgaXMgRXhwckNvbnN0YW50ICYmICgoRXhwckNv bnN0YW50KWV4cHIpLklzT0sgJiYgKChFeHByQ29uc3RhbnQpZXhwcikuSXNaZXJvOworICAgICAg ICAgfQorIAorICAgICAgICAgcHJpdmF0ZSBzdGF0aWMgRXhwciBHZXRTZXFWYWwodGhpcyBFeHBy IGV4cHIpCitkaWZmIC0tZ2l0IGEvc3JjL01pY3Jvc29mdC5DU2hhcnAvc3JjL01pY3Jvc29mdC9D U2hhcnAvUnVudGltZUJpbmRlci9TZW1hbnRpY3MvRXhwbGljaXRDb252ZXJzaW9uLmNzIGIvc3Jj L01pY3Jvc29mdC5DU2hhcnAvc3JjL01pY3Jvc29mdC9DU2hhcnAvUnVudGltZUJpbmRlci9TZW1h bnRpY3MvRXhwbGljaXRDb252ZXJzaW9uLmNzCitpbmRleCA2ZWE4ODc5YzQwLi4xMzdlOTUwZTc2 IDEwMDY0NAorLS0tIGEvc3JjL01pY3Jvc29mdC5DU2hhcnAvc3JjL01pY3Jvc29mdC9DU2hhcnAv UnVudGltZUJpbmRlci9TZW1hbnRpY3MvRXhwbGljaXRDb252ZXJzaW9uLmNzCisrKysgYi9zcmMv TWljcm9zb2Z0LkNTaGFycC9zcmMvTWljcm9zb2Z0L0NTaGFycC9SdW50aW1lQmluZGVyL1NlbWFu dGljcy9FeHBsaWNpdENvbnZlcnNpb24uY3MKK0BAIC0yMDcsOCArMjA3LDkgQEAgbmFtZXNwYWNl IE1pY3Jvc29mdC5DU2hhcnAuUnVudGltZUJpbmRlci5TZW1hbnRpY3MKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgVlNGQUlMKCJCaW5kRXhwbGljaXRDb252ZXJzaW9uIGZhaWxlZCB1bmV4 cGVjdGVkbHkiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor ICAgICAgICAgICAgICAgICAgICAgICAgIH0KKy0gICAgICAgICAgICAgICAgICAgICAgICBpZiAo X2V4cHJEZXN0IGlzIEV4cHJVc2VyRGVmaW5lZENvbnZlcnNpb24gdWRjKQorKyAgICAgICAgICAg ICAgICAgICAgICAgIGlmIChfZXhwckRlc3QgaXMgRXhwclVzZXJEZWZpbmVkQ29udmVyc2lvbikK KyAgICAgICAgICAgICAgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgICAgICAgICAgICAg IEV4cHJVc2VyRGVmaW5lZENvbnZlcnNpb24gdWRjID0gKEV4cHJVc2VyRGVmaW5lZENvbnZlcnNp b24pX2V4cHJEZXN0OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1ZGMuQXJndW1lbnQg PSBfZXhwclNyYzsKKyAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg ICAgICB9CitkaWZmIC0tZ2l0IGEvc3JjL01pY3Jvc29mdC5DU2hhcnAvc3JjL01pY3Jvc29mdC9D U2hhcnAvUnVudGltZUJpbmRlci9TZW1hbnRpY3MvRXhwckZhY3RvcnkuY3MgYi9zcmMvTWljcm9z b2Z0LkNTaGFycC9zcmMvTWljcm9zb2Z0L0NTaGFycC9SdW50aW1lQmluZGVyL1NlbWFudGljcy9F eHByRmFjdG9yeS5jcworaW5kZXggOTllZTU3NjI2YS4uZWMwZDI5ZDZmMyAxMDA2NDQKKy0tLSBh L3NyYy9NaWNyb3NvZnQuQ1NoYXJwL3NyYy9NaWNyb3NvZnQvQ1NoYXJwL1J1bnRpbWVCaW5kZXIv U2VtYW50aWNzL0V4cHJGYWN0b3J5LmNzCisrKysgYi9zcmMvTWljcm9zb2Z0LkNTaGFycC9zcmMv TWljcm9zb2Z0L0NTaGFycC9SdW50aW1lQmluZGVyL1NlbWFudGljcy9FeHByRmFjdG9yeS5jcwor QEAgLTI2NSw4ICsyNjUsOSBAQCBuYW1lc3BhY2UgTWljcm9zb2Z0LkNTaGFycC5SdW50aW1lQmlu ZGVyLlNlbWFudGljcworICAgICAgICAgICAgIEV4cHJVc2VyTG9naWNhbE9wIHJ2YWwgPSBuZXcg RXhwclVzZXJMb2dpY2FsT3AocFR5cGUpOworICAgICAgICAgICAgIEV4cHIgbGVmdENoaWxkID0g KChFeHByTGlzdClwQ2FsbE9wLk9wdGlvbmFsQXJndW1lbnRzKS5PcHRpb25hbEVsZW1lbnQ7Cisg ICAgICAgICAgICAgRGVidWcuQXNzZXJ0KGxlZnRDaGlsZCAhPSBudWxsKTsKKy0gICAgICAgICAg ICBpZiAobGVmdENoaWxkIGlzIEV4cHJXcmFwIHdyYXApCisrICAgICAgICAgICAgaWYgKGxlZnRD aGlsZCBpcyBFeHByV3JhcCkKKyAgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgIEV4cHJX cmFwIHdyYXAgPSAoRXhwcldyYXApbGVmdENoaWxkOworICAgICAgICAgICAgICAgICAvLyBJbiB0 aGUgRUUgY2FzZSwgd2UgZG9uJ3QgY3JlYXRlIFdSQVBFWFBScy4KKyAgICAgICAgICAgICAgICAg bGVmdENoaWxkID0gd3JhcC5PcHRpb25hbEV4cHJlc3Npb247CisgICAgICAgICAgICAgICAgIERl YnVnLkFzc2VydChsZWZ0Q2hpbGQgIT0gbnVsbCk7CitkaWZmIC0tZ2l0IGEvc3JjL01pY3Jvc29m dC5DU2hhcnAvc3JjL01pY3Jvc29mdC9DU2hhcnAvUnVudGltZUJpbmRlci9TZW1hbnRpY3MvRXhw cmVzc2lvbkJpbmRlci5jcyBiL3NyYy9NaWNyb3NvZnQuQ1NoYXJwL3NyYy9NaWNyb3NvZnQvQ1No YXJwL1J1bnRpbWVCaW5kZXIvU2VtYW50aWNzL0V4cHJlc3Npb25CaW5kZXIuY3MKK2luZGV4IDYw YTE2NjFlYWMuLmRjMDRmYTE2NTcgMTAwNjQ0CistLS0gYS9zcmMvTWljcm9zb2Z0LkNTaGFycC9z cmMvTWljcm9zb2Z0L0NTaGFycC9SdW50aW1lQmluZGVyL1NlbWFudGljcy9FeHByZXNzaW9uQmlu ZGVyLmNzCisrKysgYi9zcmMvTWljcm9zb2Z0LkNTaGFycC9zcmMvTWljcm9zb2Z0L0NTaGFycC9S dW50aW1lQmluZGVyL1NlbWFudGljcy9FeHByZXNzaW9uQmluZGVyLmNzCitAQCAtNjAxLDEwICs2 MDEsMTEgQEAgbmFtZXNwYWNlIE1pY3Jvc29mdC5DU2hhcnAuUnVudGltZUJpbmRlci5TZW1hbnRp Y3MKKyAgICAgICAgICAgICAvLyBDaGVjayBpZiB3ZSBoYXZlIGEgY29tcGlsZSB0aW1lIGNvbnN0 YW50LiBJZiB3ZSBkbywgY3JlYXRlIGEgY29uc3RhbnQgZm9yIGl0IGFuZCBzZXQgdGhlCisgICAg ICAgICAgICAgLy8gb3JpZ2luYWwgdHJlZSB0byB0aGUgY2FzdC4KKyAKKy0gICAgICAgICAgICBp ZiAoZXhwckNvbnN0IGlzIEV4cHJDb25zdGFudCBjb25zdGFudCAmJiBleHByRmxhZ3MgPT0gMCAm JgorKyAgICAgICAgICAgIGlmIChleHByQ29uc3QgaXMgRXhwckNvbnN0YW50ICYmIGV4cHJGbGFn cyA9PSAwICYmCisgICAgICAgICAgICAgICAgIGV4cHJTcmMuVHlwZS5mdW5kVHlwZSgpID09IHR5 cGVEZXN0LmZ1bmRUeXBlKCkgJiYKKy0gICAgICAgICAgICAgICAgKCFleHByU3JjLlR5cGUuaXNQ cmVkZWZUeXBlKFByZWRlZmluZWRUeXBlLlBUX1NUUklORykgfHwgY29uc3RhbnQuVmFsLklzTnVs bFJlZikpCisrICAgICAgICAgICAgICAgICghZXhwclNyYy5UeXBlLmlzUHJlZGVmVHlwZShQcmVk ZWZpbmVkVHlwZS5QVF9TVFJJTkcpIHx8ICgoRXhwckNvbnN0YW50KWV4cHJDb25zdCkuVmFsLklz TnVsbFJlZikpCisgICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICBFeHByQ29uc3RhbnQg Y29uc3RhbnQgPSAoRXhwckNvbnN0YW50KWV4cHJDb25zdDsKKyAgICAgICAgICAgICAgICAgRXhw ckNvbnN0YW50IGV4cHIgPSBHZXRFeHByRmFjdG9yeSgpLkNyZWF0ZUNvbnN0YW50KHR5cGVEZXN0 LCBjb25zdGFudC5WYWwpOworICAgICAgICAgICAgICAgICBwZXhwckRlc3QgPSBleHByOworICAg ICAgICAgICAgICAgICByZXR1cm47CitAQCAtMTE5MSw4ICsxMTkyLDkgQEAgbmFtZXNwYWNlIE1p Y3Jvc29mdC5DU2hhcnAuUnVudGltZUJpbmRlci5TZW1hbnRpY3MKKyAgICAgICAgICAgICB3aGls ZSAobGlzdCAhPSBudWxsKQorICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgRXhwciBh cmc7CistICAgICAgICAgICAgICAgIGlmIChsaXN0IGlzIEV4cHJMaXN0IG5leHQpCisrICAgICAg ICAgICAgICAgIGlmIChsaXN0IGlzIEV4cHJMaXN0KQorICAgICAgICAgICAgICAgICB7CisrICAg ICAgICAgICAgICAgICAgICBFeHByTGlzdCBuZXh0ID0gKEV4cHJMaXN0KWxpc3Q7CisgICAgICAg ICAgICAgICAgICAgICBhcmcgPSBuZXh0Lk9wdGlvbmFsRWxlbWVudDsKKyAgICAgICAgICAgICAg ICAgICAgIGxpc3QgPSBuZXh0Lk9wdGlvbmFsTmV4dExpc3ROb2RlOworICAgICAgICAgICAgICAg ICB9CitAQCAtMTI2NSw4ICsxMjY3LDkgQEAgbmFtZXNwYWNlIE1pY3Jvc29mdC5DU2hhcnAuUnVu dGltZUJpbmRlci5TZW1hbnRpY3MKKyAKKyAgICAgICAgIHByaXZhdGUgRXhwciBVbndyYXBFeHBy ZXNzaW9uKEV4cHIgcEV4cHJlc3Npb24pCisgICAgICAgICB7CistICAgICAgICAgICAgd2hpbGUg KHBFeHByZXNzaW9uIGlzIEV4cHJXcmFwIHdyYXApCisrICAgICAgICAgICAgd2hpbGUgKHBFeHBy ZXNzaW9uIGlzIEV4cHJXcmFwKQorICAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgRXhw cldyYXAgd3JhcCA9IChFeHByV3JhcClwRXhwcmVzc2lvbjsKKyAgICAgICAgICAgICAgICAgRXhw ciB3cmFwcGVkID0gd3JhcC5PcHRpb25hbEV4cHJlc3Npb247CisgICAgICAgICAgICAgICAgIGlm ICh3cmFwcGVkID09IG51bGwpCisgICAgICAgICAgICAgICAgIHsKK0BAIC0xMzQ0LDggKzEzNDcs OSBAQCBuYW1lc3BhY2UgTWljcm9zb2Z0LkNTaGFycC5SdW50aW1lQmluZGVyLlNlbWFudGljcwor ICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgaWYgKGV4cHIuaXNM dmFsdWUoKSkKKyAgICAgICAgICAgICB7CistICAgICAgICAgICAgICAgIGlmIChleHByIGlzIEV4 cHJQcm9wZXJ0eSBwcm9wKQorKyAgICAgICAgICAgICAgICBpZiAoZXhwciBpcyBFeHByUHJvcGVy dHkpCisgICAgICAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgICAgIEV4cHJQcm9wZXJ0 eSBwcm9wID0gKEV4cHJQcm9wZXJ0eSlleHByOworICAgICAgICAgICAgICAgICAgICAgQ2hlY2tM dmFsdWVQcm9wKHByb3ApOworICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgIG1h cmtGaWVsZEFzc2lnbmVkKGV4cHIpOworQEAgLTE1NzEsOSArMTU3NSwxMCBAQCBuYW1lc3BhY2Ug TWljcm9zb2Z0LkNTaGFycC5SdW50aW1lQmluZGVyLlNlbWFudGljcworIAorICAgICAgICAgICAg ICAgICAvLyBJZiB3ZSdyZSBpbnZva2luZyBjb2RlIG9uIGEgc3RydWN0LXZhbHVlZCBmaWVsZCwg bWFyayB0aGUgc3RydWN0IGFzIGFzc2lnbmVkICh0bworICAgICAgICAgICAgICAgICAvLyBhdm9p ZCB3YXJuaW5nIENTMDY0OSkuCistICAgICAgICAgICAgICAgIGlmIChwT2JqZWN0IGlzIEV4cHJG aWVsZCBmaWVsZCAmJiAhZmllbGQuRmllbGRXaXRoVHlwZS5GaWVsZCgpLmlzQXNzaWduZWQgJiYg IXN3dC5TeW0uSXNGaWVsZFN5bWJvbCgpICYmCisrICAgICAgICAgICAgICAgIGlmIChwT2JqZWN0 IGlzIEV4cHJGaWVsZCAmJiAhKChFeHByRmllbGQpcE9iamVjdCkuRmllbGRXaXRoVHlwZS5GaWVs ZCgpLmlzQXNzaWduZWQgJiYgIXN3dC5TeW0uSXNGaWVsZFN5bWJvbCgpICYmCisgICAgICAgICAg ICAgICAgICAgICB0eXBlT2JqLmlzU3RydWN0VHlwZSgpICYmICF0eXBlT2JqLmlzUHJlZGVmaW5l ZCgpKQorICAgICAgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgICAgICBFeHByRmllbGQg ZmllbGQgPSAoRXhwckZpZWxkKSBwT2JqZWN0OworICAgICAgICAgICAgICAgICAgICAgZmllbGQu RmllbGRXaXRoVHlwZS5GaWVsZCgpLmlzQXNzaWduZWQgPSB0cnVlOworICAgICAgICAgICAgICAg ICB9CisgCitAQCAtMTc4Niw4ICsxNzkxLDkgQEAgbmFtZXNwYWNlIE1pY3Jvc29mdC5DU2hhcnAu UnVudGltZUJpbmRlci5TZW1hbnRpY3MKKyAKKyAgICAgICAgICAgICAgICAgICAgIEV4cHIgYXJn dW1lbnQgPSBpbmRpcjsKKyAgICAgICAgICAgICAgICAgICAgIEV4cHIgcnZhbDsKKy0gICAgICAg ICAgICAgICAgICAgIGlmIChhcmd1bWVudCBpcyBFeHByTmFtZWRBcmd1bWVudFNwZWNpZmljYXRp b24gbmFtZWQpCisrICAgICAgICAgICAgICAgICAgICBpZiAoYXJndW1lbnQgaXMgRXhwck5hbWVk QXJndW1lbnRTcGVjaWZpY2F0aW9uKQorICAgICAgICAgICAgICAgICAgICAgeworKyAgICAgICAg ICAgICAgICAgICAgICAgIEV4cHJOYW1lZEFyZ3VtZW50U3BlY2lmaWNhdGlvbiBuYW1lZCA9IChF eHByTmFtZWRBcmd1bWVudFNwZWNpZmljYXRpb24pYXJndW1lbnQ7CisgICAgICAgICAgICAgICAg ICAgICAgICAgaW50IGluZGV4ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAvLyBJZiB3 ZSdyZSBuYW1lZCwgbG9vayBmb3IgdGhlIHR5cGUgb2YgdGhlIG1hdGNoaW5nIG5hbWUuCisgICAg ICAgICAgICAgICAgICAgICAgICAgZm9yZWFjaCAoTmFtZSBpIGluIG1vc3REZXJpdmVkTWV0aG9k LlBhcmFtZXRlck5hbWVzKQorQEAgLTE5MjgsOCArMTkzNCw5IEBAIG5hbWVzcGFjZSBNaWNyb3Nv ZnQuQ1NoYXJwLlJ1bnRpbWVCaW5kZXIuU2VtYW50aWNzCisgICAgICAgICAgICAgICAgICAgICBF eHByIGV4cHIgPSBpdC5DdXJyZW50KCk7CisgICAgICAgICAgICAgICAgICAgICBjb3VudCsrOwor IAorLSAgICAgICAgICAgICAgICAgICAgaWYgKGV4cHIgaXMgRXhwck5hbWVkQXJndW1lbnRTcGVj aWZpY2F0aW9uIG5hbWVkKQorKyAgICAgICAgICAgICAgICAgICAgaWYgKGV4cHIgaXMgRXhwck5h bWVkQXJndW1lbnRTcGVjaWZpY2F0aW9uKQorICAgICAgICAgICAgICAgICAgICAgeworKyAgICAg ICAgICAgICAgICAgICAgICAgIEV4cHJOYW1lZEFyZ3VtZW50U3BlY2lmaWNhdGlvbiBuYW1lZCA9 IChFeHByTmFtZWRBcmd1bWVudFNwZWNpZmljYXRpb24pZXhwcjsKKyAgICAgICAgICAgICAgICAg ICAgICAgICBuYW1lZC5WYWx1ZSA9IHRyeUNvbnZlcnQobmFtZWQuVmFsdWUsIGVsZW1lbnRUeXBl KTsKKyAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgIGVsc2UKK0BA IC0xOTUxLDggKzE5NTgsOSBAQCBuYW1lc3BhY2UgTWljcm9zb2Z0LkNTaGFycC5SdW50aW1lQmlu ZGVyLlNlbWFudGljcworIAorICAgICAgICAgcHJpdmF0ZSB2b2lkIG1hcmtGaWVsZEFzc2lnbmVk KEV4cHIgZXhwcikKKyAgICAgICAgIHsKKy0gICAgICAgICAgICBpZiAoMCAhPSAoZXhwci5GbGFn cyAmIEVYUFJGTEFHLkVYRl9MVkFMVUUpICYmIGV4cHIgaXMgRXhwckZpZWxkIGZpZWxkKQorKyAg ICAgICAgICAgIGlmICgwICE9IChleHByLkZsYWdzICYgRVhQUkZMQUcuRVhGX0xWQUxVRSkgJiYg ZXhwciBpcyBFeHByRmllbGQpCisgICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICBFeHBy RmllbGQgZmllbGQgPSAoRXhwckZpZWxkKSBleHByOworICAgICAgICAgICAgICAgICBGaWVsZFN5 bWJvbCBzeW1ib2w7CisgICAgICAgICAgICAgICAgIGRvCisgICAgICAgICAgICAgICAgIHsKK0BA IC0yMDE5LDggKzIwMjcsOSBAQCBuYW1lc3BhY2UgTWljcm9zb2Z0LkNTaGFycC5SdW50aW1lQmlu ZGVyLlNlbWFudGljcworICAgICAgICAgICAgIGZvciAoRXhwciBsaXN0ID0gYXJnczsgbGlzdCAh PSBudWxsOyBpYXJnKyspCisgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICBFeHByIGFy ZzsKKy0gICAgICAgICAgICAgICAgaWYgKGxpc3QgaXMgRXhwckxpc3QgbmV4dCkKKysgICAgICAg ICAgICAgICAgaWYgKGxpc3QgaXMgRXhwckxpc3QpCisgICAgICAgICAgICAgICAgIHsKKysgICAg ICAgICAgICAgICAgICAgIEV4cHJMaXN0IG5leHQgPSAoRXhwckxpc3QpbGlzdDsKKyAgICAgICAg ICAgICAgICAgICAgIGFyZyA9IG5leHQuT3B0aW9uYWxFbGVtZW50OworICAgICAgICAgICAgICAg ICAgICAgbGlzdCA9IG5leHQuT3B0aW9uYWxOZXh0TGlzdE5vZGU7CisgICAgICAgICAgICAgICAg IH0KK0BAIC0yMzc0LDggKzIzODMsOSBAQCBuYW1lc3BhY2UgTWljcm9zb2Z0LkNTaGFycC5SdW50 aW1lQmluZGVyLlNlbWFudGljcworICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgRXhw ciBhcmc7CisgCistICAgICAgICAgICAgICAgIGlmIChsaXN0IGlzIEV4cHJMaXN0IG5leHQpCisr ICAgICAgICAgICAgICAgIGlmIChsaXN0IGlzIEV4cHJMaXN0KQorICAgICAgICAgICAgICAgICB7 CisrICAgICAgICAgICAgICAgICAgICBFeHByTGlzdCBuZXh0ID0gKEV4cHJMaXN0KWxpc3Q7Cisg ICAgICAgICAgICAgICAgICAgICBhcmcgPSBuZXh0Lk9wdGlvbmFsRWxlbWVudDsKKyAgICAgICAg ICAgICAgICAgICAgIGxpc3QgPSBuZXh0Lk9wdGlvbmFsTmV4dExpc3ROb2RlOworICAgICAgICAg ICAgICAgICB9CitkaWZmIC0tZ2l0IGEvc3JjL01pY3Jvc29mdC5DU2hhcnAvc3JjL01pY3Jvc29m dC9DU2hhcnAvUnVudGltZUJpbmRlci9TZW1hbnRpY3MvR3JvdXBUb0FyZ3NCaW5kZXIuY3MgYi9z cmMvTWljcm9zb2Z0LkNTaGFycC9zcmMvTWljcm9zb2Z0L0NTaGFycC9SdW50aW1lQmluZGVyL1Nl bWFudGljcy9Hcm91cFRvQXJnc0JpbmRlci5jcworaW5kZXggNzcwOGYxOTdhZS4uYjc1YWMzNDBi ZSAxMDA2NDQKKy0tLSBhL3NyYy9NaWNyb3NvZnQuQ1NoYXJwL3NyYy9NaWNyb3NvZnQvQ1NoYXJw L1J1bnRpbWVCaW5kZXIvU2VtYW50aWNzL0dyb3VwVG9BcmdzQmluZGVyLmNzCisrKysgYi9zcmMv TWljcm9zb2Z0LkNTaGFycC9zcmMvTWljcm9zb2Z0L0NTaGFycC9SdW50aW1lQmluZGVyL1NlbWFu dGljcy9Hcm91cFRvQXJnc0JpbmRlci5jcworQEAgLTUxMCw3ICs1MTAsNyBAQCBuYW1lc3BhY2Ug TWljcm9zb2Z0LkNTaGFycC5SdW50aW1lQmluZGVyLlNlbWFudGljcworICAgICAgICAgICAgICAg ICAgICAgLy8gdGhlbiBsZXQgdXMgdGhyb3VnaC4KKyAgICAgICAgICAgICAgICAgICAgIGlmICht ZXRocHJvcC5pc1BhcmFtQXJyYXkgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleCA8 IHBBcmd1bWVudHMuY2FyZyAmJgorLSAgICAgICAgICAgICAgICAgICAgICAgIHBBcmd1bWVudHMu cHJnZXhwcltpbmRleF0gaXMgRXhwckFycmF5SW5pdCBhcnJheUluaXQgJiYgYXJyYXlJbml0Lkdl bmVyYXRlZEZvclBhcmFtQXJyYXkpCisrICAgICAgICAgICAgICAgICAgICAgICAgcEFyZ3VtZW50 cy5wcmdleHByW2luZGV4XSBpcyBFeHByQXJyYXlJbml0ICYmICgoRXhwckFycmF5SW5pdClwQXJn dW1lbnRzLnByZ2V4cHJbaW5kZXhdKS5HZW5lcmF0ZWRGb3JQYXJhbUFycmF5KQorICAgICAgICAg ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtQXJyYXlBcmd1bWVu dCA9IHBBcmd1bWVudHMucHJnZXhwcltpbmRleF07CisgICAgICAgICAgICAgICAgICAgICB9CitA QCAtNTE4LDcgKzUxOCw3IEBAIG5hbWVzcGFjZSBNaWNyb3NvZnQuQ1NoYXJwLlJ1bnRpbWVCaW5k ZXIuU2VtYW50aWNzCisgICAgICAgICAgICAgICAgICAgICAvLyBQb3NpdGlvbmFsLgorICAgICAg ICAgICAgICAgICAgICAgaWYgKGluZGV4IDwgcEFyZ3VtZW50cy5jYXJnICYmCisgICAgICAgICAg ICAgICAgICAgICAgICAgIShwQXJndW1lbnRzLnByZ2V4cHJbaW5kZXhdIGlzIEV4cHJOYW1lZEFy Z3VtZW50U3BlY2lmaWNhdGlvbikgJiYKKy0gICAgICAgICAgICAgICAgICAgICAgICAhKHBBcmd1 bWVudHMucHJnZXhwcltpbmRleF0gaXMgRXhwckFycmF5SW5pdCBhcnJheUluaXRQb3MgJiYgYXJy YXlJbml0UG9zLkdlbmVyYXRlZEZvclBhcmFtQXJyYXkpKQorKyAgICAgICAgICAgICAgICAgICAg ICAgICEocEFyZ3VtZW50cy5wcmdleHByW2luZGV4XSBpcyBFeHByQXJyYXlJbml0ICYmICgoRXhw ckFycmF5SW5pdClwQXJndW1lbnRzLnByZ2V4cHJbaW5kZXhdKS5HZW5lcmF0ZWRGb3JQYXJhbUFy cmF5KSkKKyAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICBw RXhwckFyZ3VtZW50c1tpbmRleF0gPSBwQXJndW1lbnRzLnByZ2V4cHJbaW5kZXgrK107CisgICAg ICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CitAQCAtODM5LDcgKzgzOSw3IEBAIG5hbWVz cGFjZSBNaWNyb3NvZnQuQ1NoYXJwLlJ1bnRpbWVCaW5kZXIuU2VtYW50aWNzCisgICAgICAgICAg ICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcEFyZ3VtZW50cy5jYXJnOyBpKyspCisgICAgICAg ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgIEV4cHIgZXhwciA9IHByZ2V4cHJbaV07 CistICAgICAgICAgICAgICAgICAgICBpZiAoZXhwciBpcyBFeHByTmFtZWRBcmd1bWVudFNwZWNp ZmljYXRpb24gbmFtZWQgJiYgbmFtZWQuTmFtZSA9PSBwTmFtZSkKKysgICAgICAgICAgICAgICAg ICAgIGlmIChleHByIGlzIEV4cHJOYW1lZEFyZ3VtZW50U3BlY2lmaWNhdGlvbiAmJiAoKEV4cHJO YW1lZEFyZ3VtZW50U3BlY2lmaWNhdGlvbilleHByKS5OYW1lID09IHBOYW1lKQorICAgICAgICAg ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBleHByOworICAg ICAgICAgICAgICAgICAgICAgfQorQEAgLTg2MSw3ICs4NjEsOCBAQCBuYW1lc3BhY2UgTWljcm9z b2Z0LkNTaGFycC5SdW50aW1lQmluZGVyLlNlbWFudGljcworICAgICAgICAgICAgICAgICBIYXNo U2V0PE5hbWU+IG5hbWVzID0gbmV3IEhhc2hTZXQ8TmFtZT4oKTsKKyAgICAgICAgICAgICAgICAg Zm9yIChpbnQgaSA9IDA7IGkgPCBfcEFyZ3VtZW50cy5jYXJnOyBpKyspCisgICAgICAgICAgICAg ICAgIHsKKy0gICAgICAgICAgICAgICAgICAgIGlmICghKF9wQXJndW1lbnRzLnByZ2V4cHJbaV0g aXMgRXhwck5hbWVkQXJndW1lbnRTcGVjaWZpY2F0aW9uIG5hbWVkKSkKKysgICAgICAgICAgICAg ICAgICAgIEV4cHJOYW1lZEFyZ3VtZW50U3BlY2lmaWNhdGlvbiBuYW1lZDsKKysgICAgICAgICAg ICAgICAgICAgIGlmICghKF9wQXJndW1lbnRzLnByZ2V4cHJbaV0gaXMgRXhwck5hbWVkQXJndW1l bnRTcGVjaWZpY2F0aW9uKSkKKyAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg ICAgICAgICAgICBpZiAoIWN1cnJlbnRQb3NpdGlvbi5Jc0VtcHR5KCkpCisgICAgICAgICAgICAg ICAgICAgICAgICAgeworQEAgLTg2OSw2ICs4NzAsNyBAQCBuYW1lc3BhY2UgTWljcm9zb2Z0LkNT aGFycC5SdW50aW1lQmluZGVyLlNlbWFudGljcworICAgICAgICAgICAgICAgICAgICAgICAgIH0K KyAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAg IH0KKysgICAgICAgICAgICAgICAgICAgIG5hbWVkID0gKEV4cHJOYW1lZEFyZ3VtZW50U3BlY2lm aWNhdGlvbikgX3BBcmd1bWVudHMucHJnZXhwcltpXTsKKyAKKyAgICAgICAgICAgICAgICAgICAg IE5hbWUgbmFtZSA9IG5hbWVkLk5hbWU7CisgICAgICAgICAgICAgICAgICAgICBpZiAoIW1ldGhw cm9wLlBhcmFtZXRlck5hbWVzLkNvbnRhaW5zKG5hbWUpKQorQEAgLTEwODAsOCArMTA4Miw5IEBA IG5hbWVzcGFjZSBNaWNyb3NvZnQuQ1NoYXJwLlJ1bnRpbWVCaW5kZXIuU2VtYW50aWNzCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIEV4cHIgcEFyZ3VtZW50ID0gX3BBcmd1bWVudHMucHJn ZXhwcltpdmFyXTsKKyAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gSWYgd2UgaGF2 ZSBhIG5hbWVkIGFyZ3VtZW50LCBzdHJpcCBpdCB0byBkbyB0aGUgY29udmVyc2lvbi4KKy0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBBcmd1bWVudCBpcyBFeHByTmFtZWRBcmd1bWVu dFNwZWNpZmljYXRpb24gbmFtZWQpCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChw QXJndW1lbnQgaXMgRXhwck5hbWVkQXJndW1lbnRTcGVjaWZpY2F0aW9uKQorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFeHBy TmFtZWRBcmd1bWVudFNwZWNpZmljYXRpb24gbmFtZWQgPSAoRXhwck5hbWVkQXJndW1lbnRTcGVj aWZpY2F0aW9uKXBBcmd1bWVudDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBB cmd1bWVudCA9IG5hbWVkLlZhbHVlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Cisg CitkaWZmIC0tZ2l0IGEvc3JjL01pY3Jvc29mdC5DU2hhcnAvc3JjL01pY3Jvc29mdC9DU2hhcnAv UnVudGltZUJpbmRlci9TZW1hbnRpY3MvSW1wbGljaXRDb252ZXJzaW9uLmNzIGIvc3JjL01pY3Jv c29mdC5DU2hhcnAvc3JjL01pY3Jvc29mdC9DU2hhcnAvUnVudGltZUJpbmRlci9TZW1hbnRpY3Mv SW1wbGljaXRDb252ZXJzaW9uLmNzCitpbmRleCBmMWEwMTU5ZTUzLi5mZGJkMWRkNDI2IDEwMDY0 NAorLS0tIGEvc3JjL01pY3Jvc29mdC5DU2hhcnAvc3JjL01pY3Jvc29mdC9DU2hhcnAvUnVudGlt ZUJpbmRlci9TZW1hbnRpY3MvSW1wbGljaXRDb252ZXJzaW9uLmNzCisrKysgYi9zcmMvTWljcm9z b2Z0LkNTaGFycC9zcmMvTWljcm9zb2Z0L0NTaGFycC9SdW50aW1lQmluZGVyL1NlbWFudGljcy9J bXBsaWNpdENvbnZlcnNpb24uY3MKK0BAIC0xNzIsOCArMTcyLDkgQEAgbmFtZXNwYWNlIE1pY3Jv c29mdC5DU2hhcnAuUnVudGltZUJpbmRlci5TZW1hbnRpY3MKKyAgICAgICAgICAgICAgICAgICAg ICAgICBWU0ZBSUwoIkJhZCB0eXBlIHN5bWJvbCBraW5kIik7CisgICAgICAgICAgICAgICAgICAg ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICBjYXNlIFR5cGVLaW5kLlRLX01ldGhv ZEdyb3VwVHlwZToKKy0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoX2V4cHJTcmMgaXMgRXhw ck1lbWJlckdyb3VwIG1lbUdycCkKKysgICAgICAgICAgICAgICAgICAgICAgICBpZiAoX2V4cHJT cmMgaXMgRXhwck1lbWJlckdyb3VwKQorICAgICAgICAgICAgICAgICAgICAgICAgIHsKKysgICAg ICAgICAgICAgICAgICAgICAgICAgICAgRXhwck1lbWJlckdyb3VwIG1lbUdycCA9IChFeHByTWVt YmVyR3JvdXApX2V4cHJTcmM7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEV4cHJDYWxs IG91dEV4cHI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgcmV0VmFsID0gX2Jp bmRlci5CaW5kR3JwQ29udmVyc2lvbihtZW1HcnAsIF90eXBlRGVzdCwgX25lZWRzRXhwckRlc3Qs IG91dCBvdXRFeHByLCBmYWxzZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9leHBy RGVzdCA9IG91dEV4cHI7CitAQCAtNzQ0LDEwICs3NDUsMTAgQEAgbmFtZXNwYWNlIE1pY3Jvc29m dC5DU2hhcnAuUnVudGltZUJpbmRlci5TZW1hbnRpY3MKKyAgICAgICAgICAgICAgICAgLy8gKiAg IEEgY29uc3RhbnQtZXhwcmVzc2lvbiBvZiB0eXBlIGxvbmcgY2FuIGJlIGNvbnZlcnRlZCB0byB0 eXBlIHVsb25nLCBwcm92aWRlZCB0aGUgdmFsdWUgb2YKKyAgICAgICAgICAgICAgICAgLy8gICAg IHRoZSBjb25zdGFudC1leHByZXNzaW9uIGlzIG5vdCBuZWdhdGl2ZS4KKyAgICAgICAgICAgICAg ICAgLy8gTm90ZTogRG9uJ3QgdXNlIEdldENvbnN0IGhlcmUgc2luY2UgdGhlIGNvbnZlcnNpb24g b25seSBhcHBsaWVzIHRvIGJvbmEtZmlkZSBjb21waWxlIHRpbWUgY29uc3RhbnRzLgorLSAgICAg ICAgICAgICAgICBpZiAoX2V4cHJTcmMgaXMgRXhwckNvbnN0YW50IGNvbnN0YW50ICYmIF9leHBy U3JjLklzT0sgJiYKKysgICAgICAgICAgICAgICAgaWYgKF9leHByU3JjIGlzIEV4cHJDb25zdGFu dCAmJiBfZXhwclNyYy5Jc09LICYmCisgICAgICAgICAgICAgICAgICAgICAoKHB0U3JjID09IFBy ZWRlZmluZWRUeXBlLlBUX0lOVCAmJiBwdERlc3QgIT0gUHJlZGVmaW5lZFR5cGUuUFRfQk9PTCAm JiBwdERlc3QgIT0gUHJlZGVmaW5lZFR5cGUuUFRfQ0hBUikgfHwKKyAgICAgICAgICAgICAgICAg ICAgIChwdFNyYyA9PSBQcmVkZWZpbmVkVHlwZS5QVF9MT05HICYmIHB0RGVzdCA9PSBQcmVkZWZp bmVkVHlwZS5QVF9VTE9ORykpICYmCistICAgICAgICAgICAgICAgICAgICBpc0NvbnN0YW50SW5S YW5nZShjb25zdGFudCwgX3R5cGVEZXN0KSkKKysgICAgICAgICAgICAgICAgICAgIGlzQ29uc3Rh bnRJblJhbmdlKCgoRXhwckNvbnN0YW50KV9leHByU3JjKSwgX3R5cGVEZXN0KSkKKyAgICAgICAg ICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgLy8gU3BlY2lhbCBjYXNlIChDTFIgNi4x LjYpOiBpZiBpbnRlZ3JhbCBjb25zdGFudCBpcyBpbiByYW5nZSwgdGhlIGNvbnZlcnNpb24gaXMg YSBsZWdhbCBpbXBsaWNpdCBjb252ZXJzaW9uLgorICAgICAgICAgICAgICAgICAgICAgY29udmVy dEtpbmQgPSBDb252S2luZC5JbXBsaWNpdDsKK2RpZmYgLS1naXQgYS9zcmMvTWljcm9zb2Z0LkNT aGFycC9zcmMvTWljcm9zb2Z0L0NTaGFycC9SdW50aW1lQmluZGVyL1NlbWFudGljcy9NZXRob2RU eXBlSW5mZXJyZXIuY3MgYi9zcmMvTWljcm9zb2Z0LkNTaGFycC9zcmMvTWljcm9zb2Z0L0NTaGFy cC9SdW50aW1lQmluZGVyL1NlbWFudGljcy9NZXRob2RUeXBlSW5mZXJyZXIuY3MKK2luZGV4IDU4 OWI5Yzk2ZDAuLjI1NTljYTVjODUgMTAwNjQ0CistLS0gYS9zcmMvTWljcm9zb2Z0LkNTaGFycC9z cmMvTWljcm9zb2Z0L0NTaGFycC9SdW50aW1lQmluZGVyL1NlbWFudGljcy9NZXRob2RUeXBlSW5m ZXJyZXIuY3MKKysrKyBiL3NyYy9NaWNyb3NvZnQuQ1NoYXJwL3NyYy9NaWNyb3NvZnQvQ1NoYXJw L1J1bnRpbWVCaW5kZXIvU2VtYW50aWNzL01ldGhvZFR5cGVJbmZlcnJlci5jcworQEAgLTEwNjQs MTAgKzEwNjQsMTEgQEAgbmFtZXNwYWNlIE1pY3Jvc29mdC5DU2hhcnAuUnVudGltZUJpbmRlci5T ZW1hbnRpY3MKKyAgICAgICAgICAgICAvLyBTUEVDOiAgIHlpZWxkcyBhIHNpbmdsZSBtZXRob2Qg d2l0aCByZXR1cm4gQ1R5cGUgVSB0aGVuIGEgbG93ZXItYm91bmQKKyAgICAgICAgICAgICAvLyBT UEVDOiAgIGluZmVyZW5jZSBpcyBtYWRlIGZyb20gVSB0byBUYi4KKyAKKy0gICAgICAgICAgICBp ZiAoIShwU291cmNlIGlzIEV4cHJNZW1iZXJHcm91cCBtZW1HcnApKQorKyAgICAgICAgICAgIGlm ICghKHBTb3VyY2UgaXMgRXhwck1lbWJlckdyb3VwKSkKKyAgICAgICAgICAgICB7CisgICAgICAg ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICB9CisrICAgICAgICAgICAgRXhw ck1lbWJlckdyb3VwIG1lbUdycCA9IChFeHByTWVtYmVyR3JvdXApcFNvdXJjZTsKKyAgICAgICAg ICAgICBwVHlwZSA9IHBUeXBlLkdldERlbGVnYXRlVHlwZU9mUG9zc2libGVFeHByZXNzaW9uKCk7 CisgICAgICAgICAgICAgaWYgKCFwVHlwZS5pc0RlbGVnYXRlVHlwZSgpKQorICAgICAgICAgICAg IHsKK2RpZmYgLS1naXQgYS9zcmMvTWljcm9zb2Z0LkNTaGFycC9zcmMvTWljcm9zb2Z0L0NTaGFy cC9SdW50aW1lQmluZGVyL1NlbWFudGljcy9OdWxsYWJsZS5jcyBiL3NyYy9NaWNyb3NvZnQuQ1No YXJwL3NyYy9NaWNyb3NvZnQvQ1NoYXJwL1J1bnRpbWVCaW5kZXIvU2VtYW50aWNzL051bGxhYmxl LmNzCitpbmRleCAxOWRiZWE3ZTJmLi4xZDI1OGYyZDY3IDEwMDY0NAorLS0tIGEvc3JjL01pY3Jv c29mdC5DU2hhcnAvc3JjL01pY3Jvc29mdC9DU2hhcnAvUnVudGltZUJpbmRlci9TZW1hbnRpY3Mv TnVsbGFibGUuY3MKKysrKyBiL3NyYy9NaWNyb3NvZnQuQ1NoYXJwL3NyYy9NaWNyb3NvZnQvQ1No YXJwL1J1bnRpbWVCaW5kZXIvU2VtYW50aWNzL051bGxhYmxlLmNzCitAQCAtMjksOCArMjksOSBA QCBuYW1lc3BhY2UgTWljcm9zb2Z0LkNTaGFycC5SdW50aW1lQmluZGVyLlNlbWFudGljcworICAg ICAgICAgeworICAgICAgICAgICAgIERlYnVnLkFzc2VydChleHByICE9IG51bGwpOworIAorLSAg ICAgICAgICAgIGlmIChleHByIGlzIEV4cHJDYWxsIHBDYWxsICYmIHBDYWxsLk1lbWJlckdyb3Vw Lk9wdGlvbmFsT2JqZWN0ID09IG51bGwpCisrICAgICAgICAgICAgaWYgKGV4cHIgaXMgRXhwckNh bGwgJiYgKChFeHByQ2FsbClleHByKS5NZW1iZXJHcm91cC5PcHRpb25hbE9iamVjdCA9PSBudWxs KQorICAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgRXhwckNhbGwgcENhbGwgPSAoRXhw ckNhbGwpZXhwcjsKKyAgICAgICAgICAgICAgICAgTWV0aG9kU3ltYm9sIG1ldGggPSBwQ2FsbC5N ZXRoV2l0aEluc3QuTWV0aCgpOworICAgICAgICAgICAgICAgICBpZiAobWV0aCAhPSBudWxsICYm IG1ldGguSXNOdWxsYWJsZUNvbnN0cnVjdG9yKCkpCisgICAgICAgICAgICAgICAgIHsKK0BAIC00 NSw3ICs0Niw4IEBAIG5hbWVzcGFjZSBNaWNyb3NvZnQuQ1NoYXJwLlJ1bnRpbWVCaW5kZXIuU2Vt YW50aWNzCisgCisgICAgICAgICBwdWJsaWMgc3RhdGljIEV4cHIgU3RyaXBOdWxsYWJsZUNvbnN0 cnVjdG9yKEV4cHIgcEV4cHIpCisgICAgICAgICB7CistICAgICAgICAgICAgd2hpbGUgKElzTnVs bGFibGVDb25zdHJ1Y3RvcihwRXhwciwgb3V0IEV4cHJDYWxsIGNhbGwpKQorKyAgICAgICAgICAg IEV4cHJDYWxsIGNhbGw7CisrICAgICAgICAgICAgd2hpbGUgKElzTnVsbGFibGVDb25zdHJ1Y3Rv cihwRXhwciwgb3V0IGNhbGwpKQorICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgcEV4 cHIgPSBjYWxsLk9wdGlvbmFsQXJndW1lbnRzOworICAgICAgICAgICAgICAgICBEZWJ1Zy5Bc3Nl cnQocEV4cHIgIT0gbnVsbCAmJiAhKHBFeHByIGlzIEV4cHJMaXN0KSk7CitAQCAtNjAsNyArNjIs OCBAQCBuYW1lc3BhY2UgTWljcm9zb2Z0LkNTaGFycC5SdW50aW1lQmluZGVyLlNlbWFudGljcwor ICAgICAgICAgICAgIERlYnVnLkFzc2VydChleHByU3JjICE9IG51bGwgJiYgZXhwclNyYy5UeXBl LklzTnVsbGFibGVUeXBlKCkpOworIAorICAgICAgICAgICAgIC8vIEZvciBuZXcgVD8oeCksIHRo ZSBhbnN3ZXIgaXMgeC4KKy0gICAgICAgICAgICBpZiAoSXNOdWxsYWJsZUNvbnN0cnVjdG9yKGV4 cHJTcmMsIG91dCBFeHByQ2FsbCBjYWxsKSkKKysgICAgICAgICAgICBFeHByQ2FsbCBjYWxsOwor KyAgICAgICAgICAgIGlmIChJc051bGxhYmxlQ29uc3RydWN0b3IoZXhwclNyYywgb3V0IGNhbGwp KQorICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgdmFyIGFyZ3MgPSBjYWxsLk9wdGlv bmFsQXJndW1lbnRzOworICAgICAgICAgICAgICAgICBEZWJ1Zy5Bc3NlcnQoYXJncyAhPSBudWxs ICYmICEoYXJncyBpcyBFeHByTGlzdCkpOworZGlmZiAtLWdpdCBhL3NyYy9NaWNyb3NvZnQuQ1No YXJwL3NyYy9NaWNyb3NvZnQvQ1NoYXJwL1J1bnRpbWVCaW5kZXIvU2VtYW50aWNzL1RyZWUvRXhw cmVzc2lvbkl0ZXJhdG9yLmNzIGIvc3JjL01pY3Jvc29mdC5DU2hhcnAvc3JjL01pY3Jvc29mdC9D U2hhcnAvUnVudGltZUJpbmRlci9TZW1hbnRpY3MvVHJlZS9FeHByZXNzaW9uSXRlcmF0b3IuY3MK K2luZGV4IDk2ZWUwMzI0MjIuLjkzOTc1NDNkZTYgMTAwNjQ0CistLS0gYS9zcmMvTWljcm9zb2Z0 LkNTaGFycC9zcmMvTWljcm9zb2Z0L0NTaGFycC9SdW50aW1lQmluZGVyL1NlbWFudGljcy9UcmVl L0V4cHJlc3Npb25JdGVyYXRvci5jcworKysrIGIvc3JjL01pY3Jvc29mdC5DU2hhcnAvc3JjL01p Y3Jvc29mdC9DU2hhcnAvUnVudGltZUJpbmRlci9TZW1hbnRpY3MvVHJlZS9FeHByZXNzaW9uSXRl cmF0b3IuY3MKK0BAIC04Myw4ICs4Myw5IEBAIG5hbWVzcGFjZSBNaWNyb3NvZnQuQ1NoYXJwLlJ1 bnRpbWVCaW5kZXIuU2VtYW50aWNzCisgICAgICAgICAgICAgICAgIF9wTGlzdCA9IG51bGw7Cisg ICAgICAgICAgICAgICAgIF9wQ3VycmVudCA9IG51bGw7CisgICAgICAgICAgICAgfQorLSAgICAg ICAgICAgIGVsc2UgaWYgKHBFeHByIGlzIEV4cHJMaXN0IHBMaXN0KQorKyAgICAgICAgICAgIGVs c2UgaWYgKHBFeHByIGlzIEV4cHJMaXN0KQorICAgICAgICAgICAgIHsKKysgICAgICAgICAgICAg ICAgRXhwckxpc3QgcExpc3QgPSAoRXhwckxpc3QpcEV4cHI7CisgICAgICAgICAgICAgICAgIF9w TGlzdCA9IHBMaXN0OworICAgICAgICAgICAgICAgICBfcEN1cnJlbnQgPSBwTGlzdC5PcHRpb25h bEVsZW1lbnQ7CisgICAgICAgICAgICAgfQorZGlmZiAtLWdpdCBhL3NyYy9NaWNyb3NvZnQuQ1No YXJwL3NyYy9NaWNyb3NvZnQvQ1NoYXJwL1J1bnRpbWVCaW5kZXIvU2VtYW50aWNzL1RyZWUvVmlz aXRvcnMvRXhwclZpc2l0b3JCYXNlLmNzIGIvc3JjL01pY3Jvc29mdC5DU2hhcnAvc3JjL01pY3Jv c29mdC9DU2hhcnAvUnVudGltZUJpbmRlci9TZW1hbnRpY3MvVHJlZS9WaXNpdG9ycy9FeHByVmlz aXRvckJhc2UuY3MKK2luZGV4IGUyY2U4ZTg4ZjUuLmRlZDRkMGIyMTYgMTAwNjQ0CistLS0gYS9z cmMvTWljcm9zb2Z0LkNTaGFycC9zcmMvTWljcm9zb2Z0L0NTaGFycC9SdW50aW1lQmluZGVyL1Nl bWFudGljcy9UcmVlL1Zpc2l0b3JzL0V4cHJWaXNpdG9yQmFzZS5jcworKysrIGIvc3JjL01pY3Jv c29mdC5DU2hhcnAvc3JjL01pY3Jvc29mdC9DU2hhcnAvUnVudGltZUJpbmRlci9TZW1hbnRpY3Mv VHJlZS9WaXNpdG9ycy9FeHByVmlzaXRvckJhc2UuY3MKK0BAIC0yMSw4ICsyMSw5IEBAIG5hbWVz cGFjZSBNaWNyb3NvZnQuQ1NoYXJwLlJ1bnRpbWVCaW5kZXIuU2VtYW50aWNzCisgICAgICAgICAg ICAgICAgIHJldHVybiBwUmVzdWx0OworICAgICAgICAgICAgIH0KKyAKKy0gICAgICAgICAgICBp ZiAocEV4cHIgaXMgRXhwclN0YXRlbWVudCBzdGF0ZW1lbnQpCisrICAgICAgICAgICAgaWYgKHBF eHByIGlzIEV4cHJTdGF0ZW1lbnQpCisgICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICBF eHByU3RhdGVtZW50IHN0YXRlbWVudCA9IChFeHByU3RhdGVtZW50KXBFeHByOworICAgICAgICAg ICAgICAgICByZXR1cm4gQ2FjaGVFeHByTWFwcGluZyhwRXhwciwgRGlzcGF0Y2hTdGF0ZW1lbnRM aXN0KHN0YXRlbWVudCkpOworICAgICAgICAgICAgIH0KKyAKK0BAIC0yNzksMTEgKzI4MCwxMyBA QCBuYW1lc3BhY2UgTWljcm9zb2Z0LkNTaGFycC5SdW50aW1lQmluZGVyLlNlbWFudGljcworICAg ICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgICAg ICAgfQorIAorLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKG5leHROb2RlIGlzIEV4cHJM aXN0IG5leHQpKQorKyAgICAgICAgICAgICAgICAgICAgICAgIEV4cHJMaXN0IG5leHQ7CisrICAg ICAgICAgICAgICAgICAgICAgICAgaWYgKCEobmV4dE5vZGUgaXMgRXhwckxpc3QpKQorICAgICAg ICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlzdC5P cHRpb25hbE5leHRMaXN0Tm9kZSA9IFZpc2l0KG5leHROb2RlKTsKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAgICAgICAgIH0KKysgICAgICAg ICAgICAgICAgICAgICAgICBuZXh0ID0gKEV4cHJMaXN0KW5leHROb2RlOworIAorICAgICAgICAg ICAgICAgICAgICAgICAgIGxpc3QgPSBuZXh0OworICAgICAgICAgICAgICAgICAgICAgfQorZGlm ZiAtLWdpdCBhL3NyYy9NaWNyb3NvZnQuQ1NoYXJwL3NyYy9NaWNyb3NvZnQvQ1NoYXJwL1J1bnRp bWVCaW5kZXIvU2VtYW50aWNzL1RyZWUvVmlzaXRvcnMvRXhwcmVzc2lvblRyZWVSZXdyaXRlci5j cyBiL3NyYy9NaWNyb3NvZnQuQ1NoYXJwL3NyYy9NaWNyb3NvZnQvQ1NoYXJwL1J1bnRpbWVCaW5k ZXIvU2VtYW50aWNzL1RyZWUvVmlzaXRvcnMvRXhwcmVzc2lvblRyZWVSZXdyaXRlci5jcworaW5k ZXggOGE4NDFlZTVkOS4uY2I0MGE1OWY2ZCAxMDA2NDQKKy0tLSBhL3NyYy9NaWNyb3NvZnQuQ1No YXJwL3NyYy9NaWNyb3NvZnQvQ1NoYXJwL1J1bnRpbWVCaW5kZXIvU2VtYW50aWNzL1RyZWUvVmlz aXRvcnMvRXhwcmVzc2lvblRyZWVSZXdyaXRlci5jcworKysrIGIvc3JjL01pY3Jvc29mdC5DU2hh cnAvc3JjL01pY3Jvc29mdC9DU2hhcnAvUnVudGltZUJpbmRlci9TZW1hbnRpY3MvVHJlZS9WaXNp dG9ycy9FeHByZXNzaW9uVHJlZVJld3JpdGVyLmNzCitAQCAtNTQsOCArNTQsOSBAQCBuYW1lc3Bh Y2UgTWljcm9zb2Z0LkNTaGFycC5SdW50aW1lQmluZGVyLlNlbWFudGljcworICAgICAgICAgICAg IC8vIEZvciBhc3NpZ25tZW50cywgd2UgZWl0aGVyIGhhdmUgYSBtZW1iZXIgYXNzaWdubWVudCBv ciBhbiBpbmRleGVkIGFzc2lnbm1lbnQuCisgICAgICAgICAgICAgLy9EZWJ1Zy5Bc3NlcnQoYXNz aWdubWVudC5HZXRMSFMoKS5pc1BST1AoKSB8fCBhc3NpZ25tZW50LkdldExIUygpLmlzRklFTEQo KSB8fCBhc3NpZ25tZW50LkdldExIUygpLmlzQVJSQVlJTkRFWCgpIHx8IGFzc2lnbm1lbnQuR2V0 TEhTKCkuaXNMT0NBTCgpKTsKKyAgICAgICAgICAgICBFeHByIGxoczsKKy0gICAgICAgICAgICBp ZiAoYXNzaWdubWVudC5MSFMgaXMgRXhwclByb3BlcnR5IHByb3ApCisrICAgICAgICAgICAgaWYg KGFzc2lnbm1lbnQuTEhTIGlzIEV4cHJQcm9wZXJ0eSkKKyAgICAgICAgICAgICB7CisrICAgICAg ICAgICAgICAgIEV4cHJQcm9wZXJ0eSBwcm9wID0gKEV4cHJQcm9wZXJ0eSlhc3NpZ25tZW50LkxI UzsKKyAgICAgICAgICAgICAgICAgaWYgKHByb3AuT3B0aW9uYWxBcmd1bWVudHM9PSBudWxsKQor ICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAvLyBSZWd1bGFyIHByb3Bl cnR5LgorQEAgLTMxOCw4ICszMTksOSBAQCBuYW1lc3BhY2UgTWljcm9zb2Z0LkNTaGFycC5SdW50 aW1lQmluZGVyLlNlbWFudGljcworICAgICAgICAgICAgICAgICAvLyBjYW4gaGFuZGxlIGluIHRo ZSBnZW5lcmFsIGNhc2UgYWxsIGltcGxpY2l0IGJveGluZyBjb252ZXJzaW9ucy4gUmlnaHQgbm93 IGl0IAorICAgICAgICAgICAgICAgICAvLyByZXF1aXJlcyB0aGF0IGFsbCBhcmd1bWVudHMgdG8g YSBjYWxsIHRoYXQgbmVlZCB0byBiZSBib3hlZCBiZSBleHBsaWNpdGx5IGJveGVkLgorIAorLSAg ICAgICAgICAgICAgICBpZiAocE9iamVjdCAhPSBudWxsICYmIHBPYmplY3QgaXMgRXhwckNhc3Qg Y2FzdCAmJiBjYXN0LklzQm94aW5nQ2FzdCkKKysgICAgICAgICAgICAgICAgaWYgKHBPYmplY3Qg IT0gbnVsbCAmJiBwT2JqZWN0IGlzIEV4cHJDYXN0ICYmICgoRXhwckNhc3QpcE9iamVjdCkuSXNC b3hpbmdDYXN0KQorICAgICAgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgICAgICBFeHBy Q2FzdCBjYXN0ID0gKEV4cHJDYXN0KSBwT2JqZWN0OworICAgICAgICAgICAgICAgICAgICAgcE9i amVjdCA9IGNhc3QuQXJndW1lbnQ7CisgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg ICAgcE9iamVjdCA9IFZpc2l0KHBPYmplY3QpOworQEAgLTU5Nyw4ICs1OTksOSBAQCBuYW1lc3Bh Y2UgTWljcm9zb2Z0LkNTaGFycC5SdW50aW1lQmluZGVyLlNlbWFudGljcworICAgICAgICAgICAg IGlmICh1ZGNhbGwgIT0gbnVsbCkKKyAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIERl YnVnLkFzc2VydCh1ZGNhbGwuS2luZCA9PSBFeHByZXNzaW9uS2luZC5DYWxsIHx8IHVkY2FsbC5L aW5kID09IEV4cHJlc3Npb25LaW5kLlVzZXJMb2dpY2FsT3ApOworLSAgICAgICAgICAgICAgICBp ZiAodWRjYWxsIGlzIEV4cHJDYWxsIGFzY2FsbCkKKysgICAgICAgICAgICAgICAgaWYgKHVkY2Fs bCBpcyBFeHByQ2FsbCkKKyAgICAgICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICAgICAg RXhwckNhbGwgYXNjYWxsID0gKEV4cHJDYWxsKXVkY2FsbDsKKyAgICAgICAgICAgICAgICAgICAg IEV4cHJMaXN0IGFyZ3MgPSAoRXhwckxpc3QpYXNjYWxsLk9wdGlvbmFsQXJndW1lbnRzOworICAg ICAgICAgICAgICAgICAgICAgRGVidWcuQXNzZXJ0KGFyZ3MuT3B0aW9uYWxOZXh0TGlzdE5vZGUu S2luZCAhPSBFeHByZXNzaW9uS2luZC5MaXN0KTsKKyAgICAgICAgICAgICAgICAgICAgIHAxID0g YXJncy5PcHRpb25hbEVsZW1lbnQ7CitAQCAtNzMxLDggKzczNCw5IEBAIG5hbWVzcGFjZSBNaWNy b3NvZnQuQ1NoYXJwLlJ1bnRpbWVCaW5kZXIuU2VtYW50aWNzCisgICAgICAgICAgICAgRXhwckJs b2NrIGJvZHkgPSBhbm9ubWV0aC5PcHRpb25hbEJvZHk7CisgCisgICAgICAgICAgICAgLy8gVGhl IG1vc3QgbGlrZWx5IGNhc2U6CistICAgICAgICAgICAgaWYgKGJvZHkuT3B0aW9uYWxTdGF0ZW1l bnRzIGlzIEV4cHJSZXR1cm4gcmV0KQorKyAgICAgICAgICAgIGlmIChib2R5Lk9wdGlvbmFsU3Rh dGVtZW50cyBpcyBFeHByUmV0dXJuKQorICAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAg RXhwclJldHVybiByZXQgPSAoRXhwclJldHVybilib2R5Lk9wdGlvbmFsU3RhdGVtZW50czsKKyAg ICAgICAgICAgICAgICAgRGVidWcuQXNzZXJ0KHJldC5PcHRpb25hbE9iamVjdCAhPSBudWxsKTsK KyAgICAgICAgICAgICAgICAgcmV0dXJuIFZpc2l0KHJldC5PcHRpb25hbE9iamVjdCk7CisgICAg ICAgICAgICAgfQorQEAgLTg1NCw4ICs4NTgsOSBAQCBuYW1lc3BhY2UgTWljcm9zb2Z0LkNTaGFy cC5SdW50aW1lQmluZGVyLlNlbWFudGljcworICAgICAgICAgICAgICAgICBFeHByIHBVRENvbnZl cnNpb24gPSBjYWxsPy5QQ29udmVyc2lvbnM7CisgICAgICAgICAgICAgICAgIGlmIChwVURDb252 ZXJzaW9uICE9IG51bGwpCisgICAgICAgICAgICAgICAgIHsKKy0gICAgICAgICAgICAgICAgICAg IGlmIChwVURDb252ZXJzaW9uIGlzIEV4cHJDYWxsIGNvbnZDYWxsKQorKyAgICAgICAgICAgICAg ICAgICAgaWYgKHBVRENvbnZlcnNpb24gaXMgRXhwckNhbGwpCisgICAgICAgICAgICAgICAgICAg ICB7CisrICAgICAgICAgICAgICAgICAgICAgICAgRXhwckNhbGwgY29udkNhbGwgPSAoRXhwckNh bGwpcFVEQ29udmVyc2lvbjsKKyAgICAgICAgICAgICAgICAgICAgICAgICBFeHByIHBVRENvbnZl cnNpb25Bcmd1bWVudCA9IGNvbnZDYWxsLk9wdGlvbmFsQXJndW1lbnRzOworICAgICAgICAgICAg ICAgICAgICAgICAgIGlmIChJc051bGxhYmxlVmFsdWVBY2Nlc3MocFVEQ29udmVyc2lvbkFyZ3Vt ZW50LCBwQXJndW1lbnQpKQorICAgICAgICAgICAgICAgICAgICAgICAgIHsKK0BAIC0xMjM4LDIz ICsxMjQzLDI1IEBAIG5hbWVzcGFjZSBNaWNyb3NvZnQuQ1NoYXJwLlJ1bnRpbWVCaW5kZXIuU2Vt YW50aWNzCisgICAgICAgICBwcml2YXRlIGJvb2wgSXNOdWxsYWJsZVZhbHVlQWNjZXNzKEV4cHIg cEV4cHIsIEV4cHIgcE9iamVjdCkKKyAgICAgICAgIHsKKyAgICAgICAgICAgICBEZWJ1Zy5Bc3Nl cnQocEV4cHIgIT0gbnVsbCk7CistICAgICAgICAgICAgcmV0dXJuIHBFeHByIGlzIEV4cHJQcm9w ZXJ0eSBwcm9wICYmIHByb3AuTWVtYmVyR3JvdXAuT3B0aW9uYWxPYmplY3QgPT0gcE9iamVjdCAm JiBwT2JqZWN0LlR5cGUuSXNOdWxsYWJsZVR5cGUoKTsKKysgICAgICAgICAgICByZXR1cm4gcEV4 cHIgaXMgRXhwclByb3BlcnR5ICYmICgoRXhwclByb3BlcnR5KXBFeHByKS5NZW1iZXJHcm91cC5P cHRpb25hbE9iamVjdCA9PSBwT2JqZWN0ICYmIHBPYmplY3QuVHlwZS5Jc051bGxhYmxlVHlwZSgp OworICAgICAgICAgfQorIAorICAgICAgICAgcHJpdmF0ZSBib29sIElzRGVsZWdhdGVDb25zdHJ1 Y3RvckNhbGwoRXhwciBwRXhwcikKKyAgICAgICAgIHsKKyAgICAgICAgICAgICBEZWJ1Zy5Bc3Nl cnQocEV4cHIgIT0gbnVsbCk7CistICAgICAgICAgICAgaWYgKCEocEV4cHIgaXMgRXhwckNhbGwg cENhbGwpKQorKyAgICAgICAgICAgIEV4cHJDYWxsIHBDYWxsOworKyAgICAgICAgICAgIGlmICgh KHBFeHByIGlzIEV4cHJDYWxsKSkKKyAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIHJl dHVybiBmYWxzZTsKKyAgICAgICAgICAgICB9CisrICAgICAgICAgICAgcENhbGwgPSAoRXhwckNh bGwpcEV4cHI7CisgCisgICAgICAgICAgICAgcmV0dXJuIHBDYWxsLk1ldGhXaXRoSW5zdC5NZXRo KCkgIT0gbnVsbCAmJgorICAgICAgICAgICAgICAgICBwQ2FsbC5NZXRoV2l0aEluc3QuTWV0aCgp LklzQ29uc3RydWN0b3IoKSAmJgorICAgICAgICAgICAgICAgICBwQ2FsbC5UeXBlLmlzRGVsZWdh dGVUeXBlKCkgJiYKKyAgICAgICAgICAgICAgICAgcENhbGwuT3B0aW9uYWxBcmd1bWVudHMgIT0g bnVsbCAmJgorLSAgICAgICAgICAgICAgICBwQ2FsbC5PcHRpb25hbEFyZ3VtZW50cyBpcyBFeHBy TGlzdCBsaXN0ICYmCistICAgICAgICAgICAgICAgIGxpc3QuT3B0aW9uYWxOZXh0TGlzdE5vZGUu S2luZCA9PSBFeHByZXNzaW9uS2luZC5GdW5jdGlvblBvaW50ZXI7CisrICAgICAgICAgICAgICAg IChwQ2FsbC5PcHRpb25hbEFyZ3VtZW50cyBpcyBFeHByTGlzdCkgJiYKKysgICAgICAgICAgICAg ICAgKChFeHByTGlzdClwQ2FsbC5PcHRpb25hbEFyZ3VtZW50cykuT3B0aW9uYWxOZXh0TGlzdE5v ZGUuS2luZCA9PSBFeHByZXNzaW9uS2luZC5GdW5jdGlvblBvaW50ZXI7CisgICAgICAgICB9Cisg ICAgICAgICBwcml2YXRlIHN0YXRpYyBib29sIGlzRW51bVRvRGVjaW1hbENvbnZlcnNpb24oQ1R5 cGUgYXJndHlwZSwgQ1R5cGUgZGVzdHR5cGUpCisgICAgICAgICB7CitkaWZmIC0tZ2l0IGEvc3Jj L1N5c3RlbS5Db2xsZWN0aW9ucy9zcmMvU3lzdGVtL0NvbGxlY3Rpb25zL0dlbmVyaWMvU29ydGVk U2V0LlRyZWVTdWJTZXQuY3MgYi9zcmMvU3lzdGVtLkNvbGxlY3Rpb25zL3NyYy9TeXN0ZW0vQ29s bGVjdGlvbnMvR2VuZXJpYy9Tb3J0ZWRTZXQuVHJlZVN1YlNldC5jcworaW5kZXggNGViODE3YzBh Zi4uNjcxNjM2ZjQyOCAxMDA2NDQKKy0tLSBhL3NyYy9TeXN0ZW0uQ29sbGVjdGlvbnMvc3JjL1N5 c3RlbS9Db2xsZWN0aW9ucy9HZW5lcmljL1NvcnRlZFNldC5UcmVlU3ViU2V0LmNzCisrKysgYi9z cmMvU3lzdGVtLkNvbGxlY3Rpb25zL3NyYy9TeXN0ZW0vQ29sbGVjdGlvbnMvR2VuZXJpYy9Tb3J0 ZWRTZXQuVHJlZVN1YlNldC5jcworQEAgLTM1Miw3ICszNTIsMTAgQEAgbmFtZXNwYWNlIFN5c3Rl bS5Db2xsZWN0aW9ucy5HZW5lcmljCisgICAgICAgICAgICAgICAgIHRocm93IG5ldyBQbGF0Zm9y bU5vdFN1cHBvcnRlZEV4Y2VwdGlvbigpOworICAgICAgICAgICAgIH0KKyAKKy0gICAgICAgICAg ICBwcm90ZWN0ZWQgb3ZlcnJpZGUgdm9pZCBPbkRlc2VyaWFsaXphdGlvbihPYmplY3Qgc2VuZGVy KSA9PiB0aHJvdyBuZXcgUGxhdGZvcm1Ob3RTdXBwb3J0ZWRFeGNlcHRpb24oKTsKKysgICAgICAg ICAgICBwcm90ZWN0ZWQgb3ZlcnJpZGUgdm9pZCBPbkRlc2VyaWFsaXphdGlvbihPYmplY3Qgc2Vu ZGVyKQorKyAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFBsYXRmb3Jt Tm90U3VwcG9ydGVkRXhjZXB0aW9uKCk7CisrICAgICAgICAgICAgfQorICAgICAgICAgfQorICAg ICB9CisgfQorZGlmZiAtLWdpdCBhL3NyYy9TeXN0ZW0uTGlucS5FeHByZXNzaW9ucy9zcmMvU3lz dGVtL0R5bmFtaWMvVXRpbHMvVHlwZUV4dGVuc2lvbnMuY3MgYi9zcmMvU3lzdGVtLkxpbnEuRXhw cmVzc2lvbnMvc3JjL1N5c3RlbS9EeW5hbWljL1V0aWxzL1R5cGVFeHRlbnNpb25zLmNzCitpbmRl eCBjNDVjYWJhMDkzLi5lZjlhMjUyMDNkIDEwMDY0NAorLS0tIGEvc3JjL1N5c3RlbS5MaW5xLkV4 cHJlc3Npb25zL3NyYy9TeXN0ZW0vRHluYW1pYy9VdGlscy9UeXBlRXh0ZW5zaW9ucy5jcworKysr IGIvc3JjL1N5c3RlbS5MaW5xLkV4cHJlc3Npb25zL3NyYy9TeXN0ZW0vRHluYW1pYy9VdGlscy9U eXBlRXh0ZW5zaW9ucy5jcworQEAgLTY1LDcgKzY1LDggQEAgbmFtZXNwYWNlIFN5c3RlbS5EeW5h bWljLlV0aWxzCisgICAgICAgICBpbnRlcm5hbCBzdGF0aWMgUGFyYW1ldGVySW5mb1tdIEdldFBh cmFtZXRlcnNDYWNoZWQodGhpcyBNZXRob2RCYXNlIG1ldGhvZCkKKyAgICAgICAgIHsKKyAgICAg ICAgICAgICBDYWNoZURpY3Q8TWV0aG9kQmFzZSwgUGFyYW1ldGVySW5mb1tdPiBwaWMgPSBzX3Bh cmFtSW5mb0NhY2hlOworLSAgICAgICAgICAgIGlmICghcGljLlRyeUdldFZhbHVlKG1ldGhvZCwg b3V0IFBhcmFtZXRlckluZm9bXSBwaXMpKQorKyAgICAgICAgICAgIFBhcmFtZXRlckluZm9bXSBw aXM7CisrICAgICAgICAgICAgaWYgKCFwaWMuVHJ5R2V0VmFsdWUobWV0aG9kLCBvdXQgcGlzKSkK KyAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIHBpcyA9IG1ldGhvZC5HZXRQYXJhbWV0 ZXJzKCk7CisgCitkaWZmIC0tZ2l0IGEvc3JjL1N5c3RlbS5MaW5xLkV4cHJlc3Npb25zL3NyYy9T eXN0ZW0vTGlucS9FeHByZXNzaW9ucy9Db21waWxlci9MYW1iZGFDb21waWxlci5FeHByZXNzaW9u cy5jcyBiL3NyYy9TeXN0ZW0uTGlucS5FeHByZXNzaW9ucy9zcmMvU3lzdGVtL0xpbnEvRXhwcmVz c2lvbnMvQ29tcGlsZXIvTGFtYmRhQ29tcGlsZXIuRXhwcmVzc2lvbnMuY3MKK2luZGV4IGQ4YjFj NjFmNzQuLjhjZWZiZDRmMTkgMTAwNjQ0CistLS0gYS9zcmMvU3lzdGVtLkxpbnEuRXhwcmVzc2lv bnMvc3JjL1N5c3RlbS9MaW5xL0V4cHJlc3Npb25zL0NvbXBpbGVyL0xhbWJkYUNvbXBpbGVyLkV4 cHJlc3Npb25zLmNzCisrKysgYi9zcmMvU3lzdGVtLkxpbnEuRXhwcmVzc2lvbnMvc3JjL1N5c3Rl bS9MaW5xL0V4cHJlc3Npb25zL0NvbXBpbGVyL0xhbWJkYUNvbXBpbGVyLkV4cHJlc3Npb25zLmNz CitAQCAtOTUyLDggKzk1Miw5IEBAIG5hbWVzcGFjZSBTeXN0ZW0uTGlucS5FeHByZXNzaW9ucy5D b21waWxlcgorICAgICAgICAgcHJpdmF0ZSB2b2lkIEVtaXRNZW1iZXJBc3NpZ25tZW50KE1lbWJl ckFzc2lnbm1lbnQgYmluZGluZywgVHlwZSBvYmplY3RUeXBlKQorICAgICAgICAgeworICAgICAg ICAgICAgIEVtaXRFeHByZXNzaW9uKGJpbmRpbmcuRXhwcmVzc2lvbik7CistICAgICAgICAgICAg aWYgKGJpbmRpbmcuTWVtYmVyIGlzIEZpZWxkSW5mbyBmaSkKKysgICAgICAgICAgICBpZiAoYmlu ZGluZy5NZW1iZXIgaXMgRmllbGRJbmZvKQorICAgICAgICAgICAgIHsKKysgICAgICAgICAgICAg ICAgRmllbGRJbmZvIGZpID0gKEZpZWxkSW5mbyliaW5kaW5nLk1lbWJlcjsKKyAgICAgICAgICAg ICAgICAgX2lsZy5FbWl0KE9wQ29kZXMuU3RmbGQsIGZpKTsKKyAgICAgICAgICAgICB9CisgICAg ICAgICAgICAgZWxzZQorQEAgLTEwOTcsNyArMTA5OCw3IEBAIG5hbWVzcGFjZSBTeXN0ZW0uTGlu cS5FeHByZXNzaW9ucy5Db21waWxlcgorICAgICAgICAgcHJpdmF0ZSBzdGF0aWMgVHlwZSBHZXRN ZW1iZXJUeXBlKE1lbWJlckluZm8gbWVtYmVyKQorICAgICAgICAgeworICAgICAgICAgICAgIERl YnVnLkFzc2VydChtZW1iZXIgaXMgRmllbGRJbmZvIHx8IG1lbWJlciBpcyBQcm9wZXJ0eUluZm8p OworLSAgICAgICAgICAgIHJldHVybiBtZW1iZXIgaXMgRmllbGRJbmZvIGZpID8gZmkuRmllbGRU eXBlIDogKG1lbWJlciBhcyBQcm9wZXJ0eUluZm8pLlByb3BlcnR5VHlwZTsKKysgICAgICAgICAg ICByZXR1cm4gbWVtYmVyIGlzIEZpZWxkSW5mbyA/ICgoRmllbGRJbmZvKW1lbWJlcikuRmllbGRU eXBlIDogKG1lbWJlciBhcyBQcm9wZXJ0eUluZm8pLlByb3BlcnR5VHlwZTsKKyAgICAgICAgIH0K KyAKKyAgICAgICAgICNlbmRyZWdpb24KK2RpZmYgLS1naXQgYS9zcmMvU3lzdGVtLkxpbnEuRXhw cmVzc2lvbnMvc3JjL1N5c3RlbS9MaW5xL0V4cHJlc3Npb25zL01lbWJlckFzc2lnbm1lbnQuY3Mg Yi9zcmMvU3lzdGVtLkxpbnEuRXhwcmVzc2lvbnMvc3JjL1N5c3RlbS9MaW5xL0V4cHJlc3Npb25z L01lbWJlckFzc2lnbm1lbnQuY3MKK2luZGV4IDQ3NWE2YzYzY2MuLjA3ODdiMTAxODYgMTAwNjQ0 CistLS0gYS9zcmMvU3lzdGVtLkxpbnEuRXhwcmVzc2lvbnMvc3JjL1N5c3RlbS9MaW5xL0V4cHJl c3Npb25zL01lbWJlckFzc2lnbm1lbnQuY3MKKysrKyBiL3NyYy9TeXN0ZW0uTGlucS5FeHByZXNz aW9ucy9zcmMvU3lzdGVtL0xpbnEvRXhwcmVzc2lvbnMvTWVtYmVyQXNzaWdubWVudC5jcworQEAg LTkzLDIzICs5MywyMyBAQCBuYW1lc3BhY2UgU3lzdGVtLkxpbnEuRXhwcmVzc2lvbnMKKyAKKyAg ICAgICAgICAgICAvLyBOdWxsIHBhcmFtTmFtZSBhcyB0aGVyZSBhcmUgdHdvIHBhdGhzIGhlcmUg d2l0aCBkaWZmZXJlbnQgcGFyYW1ldGVyIG5hbWVzIGF0IHRoZSBBUEkKKyAgICAgICAgICAgICBU eXBlVXRpbHMuVmFsaWRhdGVUeXBlKGRlY1R5cGUsIG51bGwpOworLSAgICAgICAgICAgIHN3aXRj aCAobWVtYmVyKQorKyAgICAgICAgICAgIGlmIChtZW1iZXIgaXMgUHJvcGVydHlJbmZvKQorICAg ICAgICAgICAgIHsKKy0gICAgICAgICAgICAgICAgY2FzZSBQcm9wZXJ0eUluZm8gcGk6CistICAg ICAgICAgICAgICAgICAgICBpZiAoIXBpLkNhbldyaXRlKQorLSAgICAgICAgICAgICAgICAgICAg eworLSAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IEVycm9yLlByb3BlcnR5RG9lc05vdEhh dmVTZXR0ZXIocGksIG5hbWVvZihtZW1iZXIpKTsKKy0gICAgICAgICAgICAgICAgICAgIH0KKy0K Ky0gICAgICAgICAgICAgICAgICAgIG1lbWJlclR5cGUgPSBwaS5Qcm9wZXJ0eVR5cGU7CistICAg ICAgICAgICAgICAgICAgICBicmVhazsKKy0KKy0gICAgICAgICAgICAgICAgY2FzZSBGaWVsZElu Zm8gZmk6CistICAgICAgICAgICAgICAgICAgICBtZW1iZXJUeXBlID0gZmkuRmllbGRUeXBlOwor LSAgICAgICAgICAgICAgICAgICAgYnJlYWs7CistCistICAgICAgICAgICAgICAgIGRlZmF1bHQ6 CistICAgICAgICAgICAgICAgICAgICB0aHJvdyBFcnJvci5Bcmd1bWVudE11c3RCZUZpZWxkSW5m b09yUHJvcGVydHlJbmZvKG5hbWVvZihtZW1iZXIpKTsKKysgICAgICAgICAgICAgICAgUHJvcGVy dHlJbmZvIHBpID0gKFByb3BlcnR5SW5mbykgbWVtYmVyOworKyAgICAgICAgICAgICAgICBpZiAo IXBpLkNhbldyaXRlKQorKyAgICAgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgICAgICB0 aHJvdyBFcnJvci5Qcm9wZXJ0eURvZXNOb3RIYXZlU2V0dGVyKHBpLCBuYW1lb2YobWVtYmVyKSk7 CisrICAgICAgICAgICAgICAgIH0KKysgICAgICAgICAgICAgICAgbWVtYmVyVHlwZSA9IHBpLlBy b3BlcnR5VHlwZTsKKysgICAgICAgICAgICB9CisrICAgICAgICAgICAgZWxzZSBpZiAobWVtYmVy IGlzIEZpZWxkSW5mbykKKysgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgIEZpZWxkSW5m byBmaSA9IChGaWVsZEluZm8pIG1lbWJlcjsKKysgICAgICAgICAgICAgICAgbWVtYmVyVHlwZSA9 IGZpLkZpZWxkVHlwZTsKKysgICAgICAgICAgICB9CisrICAgICAgICAgICAgZWxzZQorKyAgICAg ICAgICAgIHsKKysgICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IuQXJndW1lbnRNdXN0QmVGaWVs ZEluZm9PclByb3BlcnR5SW5mbyhuYW1lb2YobWVtYmVyKSk7CisgICAgICAgICAgICAgfQorICAg ICAgICAgfQorICAgICB9CitkaWZmIC0tZ2l0IGEvc3JjL1N5c3RlbS5MaW5xLkV4cHJlc3Npb25z L3NyYy9TeXN0ZW0vTGlucS9FeHByZXNzaW9ucy9NZW1iZXJCaW5kaW5nLmNzIGIvc3JjL1N5c3Rl bS5MaW5xLkV4cHJlc3Npb25zL3NyYy9TeXN0ZW0vTGlucS9FeHByZXNzaW9ucy9NZW1iZXJCaW5k aW5nLmNzCitpbmRleCBjMWM1ODg0NjE4Li40M2MwNjk4ZjkwIDEwMDY0NAorLS0tIGEvc3JjL1N5 c3RlbS5MaW5xLkV4cHJlc3Npb25zL3NyYy9TeXN0ZW0vTGlucS9FeHByZXNzaW9ucy9NZW1iZXJC aW5kaW5nLmNzCisrKysgYi9zcmMvU3lzdGVtLkxpbnEuRXhwcmVzc2lvbnMvc3JjL1N5c3RlbS9M aW5xL0V4cHJlc3Npb25zL01lbWJlckJpbmRpbmcuY3MKK0BAIC02MSw2ICs2MSw5IEBAIG5hbWVz cGFjZSBTeXN0ZW0uTGlucS5FeHByZXNzaW9ucworICAgICAgICAgICAgIHJldHVybiBFeHByZXNz aW9uU3RyaW5nQnVpbGRlci5NZW1iZXJCaW5kaW5nVG9TdHJpbmcodGhpcyk7CisgICAgICAgICB9 CisgCistICAgICAgICBpbnRlcm5hbCB2aXJ0dWFsIHZvaWQgVmFsaWRhdGVBc0RlZmluZWRIZXJl KGludCBpbmRleCkgPT4gdGhyb3cgRXJyb3IuVW5rbm93bkJpbmRpbmdUeXBlKGluZGV4KTsKKysg ICAgICAgIGludGVybmFsIHZpcnR1YWwgdm9pZCBWYWxpZGF0ZUFzRGVmaW5lZEhlcmUoaW50IGlu ZGV4KQorKyAgICAgICAgeworKyAgICAgICAgICAgIHRocm93IEVycm9yLlVua25vd25CaW5kaW5n VHlwZShpbmRleCk7CisrICAgICAgICB9CisgICAgIH0KKyB9CitkaWZmIC0tZ2l0IGEvc3JjL1N5 c3RlbS5MaW5xLkV4cHJlc3Npb25zL3NyYy9TeXN0ZW0vTGlucS9FeHByZXNzaW9ucy9NZW1iZXJN ZW1iZXJCaW5kaW5nLmNzIGIvc3JjL1N5c3RlbS5MaW5xLkV4cHJlc3Npb25zL3NyYy9TeXN0ZW0v TGlucS9FeHByZXNzaW9ucy9NZW1iZXJNZW1iZXJCaW5kaW5nLmNzCitpbmRleCBmMzk4MWEyYjFm Li43NWRkNzE0MWRhIDEwMDY0NAorLS0tIGEvc3JjL1N5c3RlbS5MaW5xLkV4cHJlc3Npb25zL3Ny Yy9TeXN0ZW0vTGlucS9FeHByZXNzaW9ucy9NZW1iZXJNZW1iZXJCaW5kaW5nLmNzCisrKysgYi9z cmMvU3lzdGVtLkxpbnEuRXhwcmVzc2lvbnMvc3JjL1N5c3RlbS9MaW5xL0V4cHJlc3Npb25zL01l bWJlck1lbWJlckJpbmRpbmcuY3MKK0BAIC0xMjcsMjMgKzEyNywyNCBAQCBuYW1lc3BhY2UgU3lz dGVtLkxpbnEuRXhwcmVzc2lvbnMKKyAKKyAgICAgICAgICAgICAvLyBOdWxsIHBhcmFtTmFtZSBh cyB0aGVyZSBhcmUgc2V2ZXJhbCBwYXRocyBoZXJlIHdpdGggZGlmZmVyZW50IHBhcmFtZXRlciBu YW1lcyBhdCB0aGUgQVBJCisgICAgICAgICAgICAgVHlwZVV0aWxzLlZhbGlkYXRlVHlwZShkZWNU eXBlLCBudWxsLCBhbGxvd0J5UmVmOiB0cnVlLCBhbGxvd1BvaW50ZXI6IHRydWUpOworLSAgICAg ICAgICAgIHN3aXRjaCAobWVtYmVyKQorKyAgICAgICAgICAgIGlmIChtZW1iZXIgaXMgUHJvcGVy dHlJbmZvKQorICAgICAgICAgICAgIHsKKy0gICAgICAgICAgICAgICAgY2FzZSBQcm9wZXJ0eUlu Zm8gcGk6CistICAgICAgICAgICAgICAgICAgICBpZiAoIXBpLkNhblJlYWQpCistICAgICAgICAg ICAgICAgICAgICB7CistICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IuUHJvcGVy dHlEb2VzTm90SGF2ZUdldHRlcihwaSwgbmFtZW9mKG1lbWJlcikpOworLSAgICAgICAgICAgICAg ICAgICAgfQorLQorLSAgICAgICAgICAgICAgICAgICAgbWVtYmVyVHlwZSA9IHBpLlByb3BlcnR5 VHlwZTsKKy0gICAgICAgICAgICAgICAgICAgIGJyZWFrOworLQorLSAgICAgICAgICAgICAgICBj YXNlIEZpZWxkSW5mbyBmaToKKy0gICAgICAgICAgICAgICAgICAgIG1lbWJlclR5cGUgPSBmaS5G aWVsZFR5cGU7CistICAgICAgICAgICAgICAgICAgICBicmVhazsKKysgICAgICAgICAgICAgICAg UHJvcGVydHlJbmZvIHBpID0gKFByb3BlcnR5SW5mbyltZW1iZXI7CisrICAgICAgICAgICAgICAg IGlmICghcGkuQ2FuUmVhZCkKKysgICAgICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICAg ICAgdGhyb3cgRXJyb3IuUHJvcGVydHlEb2VzTm90SGF2ZUdldHRlcihwaSwgbmFtZW9mKG1lbWJl cikpOworKyAgICAgICAgICAgICAgICB9CisgCistICAgICAgICAgICAgICAgIGRlZmF1bHQ6Cist ICAgICAgICAgICAgICAgICAgICB0aHJvdyBFcnJvci5Bcmd1bWVudE11c3RCZUZpZWxkSW5mb09y UHJvcGVydHlJbmZvKG5hbWVvZihtZW1iZXIpKTsKKysgICAgICAgICAgICAgICAgbWVtYmVyVHlw ZSA9IHBpLlByb3BlcnR5VHlwZTsKKysgICAgICAgICAgICB9CisrICAgICAgICAgICAgZWxzZSBp ZiAobWVtYmVyIGlzIEZpZWxkSW5mbykKKysgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAg IEZpZWxkSW5mbyBmaSA9IChGaWVsZEluZm8pbWVtYmVyOworKyAgICAgICAgICAgICAgICBtZW1i ZXJUeXBlID0gZmkuRmllbGRUeXBlOworKyAgICAgICAgICAgIH0KKysgICAgICAgICAgICBlbHNl CisrICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICB0aHJvdyBFcnJvci5Bcmd1bWVudE11 c3RCZUZpZWxkSW5mb09yUHJvcGVydHlJbmZvKG5hbWVvZihtZW1iZXIpKTsKKyAgICAgICAgICAg ICB9CisgICAgICAgICB9CisgCitkaWZmIC0tZ2l0IGEvc3JjL1N5c3RlbS5OZXQuSHR0cExpc3Rl bmVyL3NyYy9TeXN0ZW0vTmV0L1dlYlNvY2tldHMvSHR0cExpc3RlbmVyV2ViU29ja2V0Q29udGV4 dC5jcyBiL3NyYy9TeXN0ZW0uTmV0Lkh0dHBMaXN0ZW5lci9zcmMvU3lzdGVtL05ldC9XZWJTb2Nr ZXRzL0h0dHBMaXN0ZW5lcldlYlNvY2tldENvbnRleHQuY3MKK2luZGV4IDUzMjE1Nzg5NDYuLmZm NTQ2NzcwMjcgMTAwNjQ0CistLS0gYS9zcmMvU3lzdGVtLk5ldC5IdHRwTGlzdGVuZXIvc3JjL1N5 c3RlbS9OZXQvV2ViU29ja2V0cy9IdHRwTGlzdGVuZXJXZWJTb2NrZXRDb250ZXh0LmNzCisrKysg Yi9zcmMvU3lzdGVtLk5ldC5IdHRwTGlzdGVuZXIvc3JjL1N5c3RlbS9OZXQvV2ViU29ja2V0cy9I dHRwTGlzdGVuZXJXZWJTb2NrZXRDb250ZXh0LmNzCitAQCAtOTQsOCArOTQsOSBAQCBuYW1lc3Bh Y2UgU3lzdGVtLk5ldC5XZWJTb2NrZXRzCisgICAgICAgICAgICAgICAgIGlmICghKHVzZXIgaXMg V2luZG93c1ByaW5jaXBhbCkpCisgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAg ICAgIC8vIEF1dGhlbnRpY2F0aW9uU2NoZW1lcy5CYXNpYy4KKy0gICAgICAgICAgICAgICAgICAg IGlmICh1c2VyLklkZW50aXR5IGlzIEh0dHBMaXN0ZW5lckJhc2ljSWRlbnRpdHkgYmFzaWNJZGVu dGl0eSkKKysgICAgICAgICAgICAgICAgICAgIGlmICh1c2VyLklkZW50aXR5IGlzIEh0dHBMaXN0 ZW5lckJhc2ljSWRlbnRpdHkpCisgICAgICAgICAgICAgICAgICAgICB7CisrICAgICAgICAgICAg ICAgICAgICAgICAgSHR0cExpc3RlbmVyQmFzaWNJZGVudGl0eSBiYXNpY0lkZW50aXR5ID0gKEh0 dHBMaXN0ZW5lckJhc2ljSWRlbnRpdHkpdXNlci5JZGVudGl0eTsKKyAgICAgICAgICAgICAgICAg ICAgICAgICByZXR1cm4gbmV3IEdlbmVyaWNQcmluY2lwYWwobmV3IEh0dHBMaXN0ZW5lckJhc2lj SWRlbnRpdHkoYmFzaWNJZGVudGl0eS5OYW1lLCBiYXNpY0lkZW50aXR5LlBhc3N3b3JkKSwgbnVs bCk7CisgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgIH0KZGlmZiAtLWdp dCBhL2dudS9wYWNrYWdlcy9wYXRjaGVzL21vbm8tNS40LjAtcGF0Y2hlcy5wYXRjaCBiL2dudS9w YWNrYWdlcy9wYXRjaGVzL21vbm8tNS40LjAtcGF0Y2hlcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEw MDY0NAppbmRleCAwMDAwMDAwMDAwLi4wMDdhNmI4NDdjCi0tLSAvZGV2L251bGwKKysrIGIvZ251 L3BhY2thZ2VzL3BhdGNoZXMvbW9uby01LjQuMC1wYXRjaGVzLnBhdGNoCkBAIC0wLDAgKzEsMTAw IEBACitkaWZmIC0tZ2l0IGEvbWNzL2NsYXNzL1N5c3RlbS9Nb25vLk5ldC5TZWN1cml0eS9Bc3lu Y1Byb3RvY29sUmVxdWVzdC5jcyBiL21jcy9jbGFzcy9TeXN0ZW0vTW9uby5OZXQuU2VjdXJpdHkv QXN5bmNQcm90b2NvbFJlcXVlc3QuY3MKK2luZGV4IDNjNTM3YTdlNDI3Li41OWJlYjE5MjU1ZiAx MDA2NDQKKy0tLSBhL21jcy9jbGFzcy9TeXN0ZW0vTW9uby5OZXQuU2VjdXJpdHkvQXN5bmNQcm90 b2NvbFJlcXVlc3QuY3MKKysrKyBiL21jcy9jbGFzcy9TeXN0ZW0vTW9uby5OZXQuU2VjdXJpdHkv QXN5bmNQcm90b2NvbFJlcXVlc3QuY3MKK0BAIC0zMTYsNyArMzE2LDkgQEAgbmFtZXNwYWNlIE1v bm8uTmV0LlNlY3VyaXR5CisgCQl7CisgCQkJRGVidWcgKCJQcm9jZXNzUmVhZCAtIHJlYWQgdXNl cjogezB9IHsxfSIsIHRoaXMsIHN0YXR1cyk7CisgCistCQkJdmFyIChyZXQsIHdhbnRNb3JlKSA9 IFBhcmVudC5Qcm9jZXNzUmVhZCAoVXNlckJ1ZmZlcik7CisrICAgICAgICAgICAgU3lzdGVtLlZh bHVlVHVwbGU8aW50LCBib29sPiB0MCA9IFBhcmVudC5Qcm9jZXNzUmVhZCAoVXNlckJ1ZmZlcik7 CisrICAgICAgICAgICAgdmFyIHJldCA9IHQwLkl0ZW0xOworKyAgICAgICAgICAgIHZhciB3YW50 TW9yZSA9IHQwLkl0ZW0yOworIAorIAkJCURlYnVnICgiUHJvY2Vzc1JlYWQgLSByZWFkIHVzZXIg ZG9uZTogezB9IC0gezF9IHsyfSIsIHRoaXMsIHJldCwgd2FudE1vcmUpOworIAorQEAgLTM1NSw3 ICszNTcsOSBAQCBuYW1lc3BhY2UgTW9uby5OZXQuU2VjdXJpdHkKKyAJCQkJcmV0dXJuIEFzeW5j T3BlcmF0aW9uU3RhdHVzLkNvbXBsZXRlOworIAkJCX0KKyAKKy0JCQl2YXIgKHJldCwgd2FudE1v cmUpID0gUGFyZW50LlByb2Nlc3NXcml0ZSAoVXNlckJ1ZmZlcik7CisrICAgICAgICAgICAgU3lz dGVtLlZhbHVlVHVwbGU8aW50LCBib29sPiB0MCA9IFBhcmVudC5Qcm9jZXNzV3JpdGUgKFVzZXJC dWZmZXIpOworKyAgICAgICAgICAgIHZhciByZXQgPSB0MC5JdGVtMTsKKysgICAgICAgICAgICB2 YXIgd2FudE1vcmUgPSB0MC5JdGVtMjsKKyAKKyAJCQlEZWJ1ZyAoIlByb2Nlc3NXcml0ZSAtIHdy aXRlIHVzZXIgZG9uZTogezB9IC0gezF9IHsyfSIsIHRoaXMsIHJldCwgd2FudE1vcmUpOworIAor ZGlmZiAtLWdpdCBhL21jcy9jbGFzcy9TeXN0ZW0vTW9uby5OZXQuU2VjdXJpdHkvTW9iaWxlQXV0 aGVudGljYXRlZFN0cmVhbS5jcyBiL21jcy9jbGFzcy9TeXN0ZW0vTW9uby5OZXQuU2VjdXJpdHkv TW9iaWxlQXV0aGVudGljYXRlZFN0cmVhbS5jcworaW5kZXggMmIzODBhMWFlNmMuLjY2ZTQ1YmMx ZjFkIDEwMDY0NAorLS0tIGEvbWNzL2NsYXNzL1N5c3RlbS9Nb25vLk5ldC5TZWN1cml0eS9Nb2Jp bGVBdXRoZW50aWNhdGVkU3RyZWFtLmNzCisrKysgYi9tY3MvY2xhc3MvU3lzdGVtL01vbm8uTmV0 LlNlY3VyaXR5L01vYmlsZUF1dGhlbnRpY2F0ZWRTdHJlYW0uY3MKK0BAIC00MDMsOCArNDAzLDEw IEBAIG5hbWVzcGFjZSBNb25vLk5ldC5TZWN1cml0eQorIAkJCQkgICAgICAgYXN5bmNSZWFkUmVx dWVzdCAhPSBudWxsID8gImFzeW5jIiA6ICIiLAorIAkJCQkgICAgICAgcmVhZEJ1ZmZlciAhPSBu dWxsID8gcmVhZEJ1ZmZlci5Ub1N0cmluZyAoKSA6ICIiKTsKKyAJCQkJdmFyIGFzeW5jUmVxdWVz dCA9IGFzeW5jSGFuZHNoYWtlUmVxdWVzdCA/PyBhc3luY1JlYWRSZXF1ZXN0OworLQkJCQl2YXIg KHJldCwgd2FudE1vcmUpID0gSW50ZXJuYWxSZWFkIChhc3luY1JlcXVlc3QsIHJlYWRCdWZmZXIs IGJ1ZmZlciwgb2Zmc2V0LCBzaXplKTsKKy0JCQkJb3V0V2FudE1vcmUgPSB3YW50TW9yZTsKKysg ICAgICAgICAgICAgICAgU3lzdGVtLlZhbHVlVHVwbGU8aW50LCBib29sPiB0MCA9IEludGVybmFs UmVhZCAoYXN5bmNSZXF1ZXN0LCByZWFkQnVmZmVyLCBidWZmZXIsIG9mZnNldCwgc2l6ZSk7Cisr ICAgICAgICAgICAgICAgIHZhciByZXQgPSB0MC5JdGVtMTsKKysgICAgICAgICAgICAgICAgdmFy IHdhbnRNb3JlID0gdDAuSXRlbTI7CisrICAgICAgICAgICAgICAgIG91dFdhbnRNb3JlID0gd2Fu dE1vcmU7CisgCQkJCXJldHVybiByZXQ7CisgCQkJfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7Cisg CQkJCURlYnVnICgiSW50ZXJuYWxSZWFkIGZhaWxlZDogezB9IiwgZXgpOworQEAgLTQxNCw3ICs0 MTYsNyBAQCBuYW1lc3BhY2UgTW9uby5OZXQuU2VjdXJpdHkKKyAJCQl9CisgCQl9CisgCistCQko aW50LCBib29sKSBJbnRlcm5hbFJlYWQgKEFzeW5jUHJvdG9jb2xSZXF1ZXN0IGFzeW5jUmVxdWVz dCwgQnVmZmVyT2Zmc2V0U2l6ZSBpbnRlcm5hbEJ1ZmZlciwgYnl0ZVtdIGJ1ZmZlciwgaW50IG9m ZnNldCwgaW50IHNpemUpCisrCQlTeXN0ZW0uVmFsdWVUdXBsZTxpbnQsIGJvb2w+IEludGVybmFs UmVhZCAoQXN5bmNQcm90b2NvbFJlcXVlc3QgYXN5bmNSZXF1ZXN0LCBCdWZmZXJPZmZzZXRTaXpl IGludGVybmFsQnVmZmVyLCBieXRlW10gYnVmZmVyLCBpbnQgb2Zmc2V0LCBpbnQgc2l6ZSkKKyAJ CXsKKyAJCQlpZiAoYXN5bmNSZXF1ZXN0ID09IG51bGwpCisgCQkJCXRocm93IG5ldyBJbnZhbGlk T3BlcmF0aW9uRXhjZXB0aW9uICgpOworQEAgLTQzNiw3ICs0MzgsNyBAQCBuYW1lc3BhY2UgTW9u by5OZXQuU2VjdXJpdHkKKyAJCQkJRGVidWcgKCJJbnRlcm5hbFJlYWQgIzE6IHswfSB7MX0gezJ9 IiwgaW50ZXJuYWxCdWZmZXIuT2Zmc2V0LCBpbnRlcm5hbEJ1ZmZlci5Ub3RhbEJ5dGVzLCBzaXpl KTsKKyAJCQkJaW50ZXJuYWxCdWZmZXIuT2Zmc2V0ID0gaW50ZXJuYWxCdWZmZXIuU2l6ZSA9IDA7 CisgCQkJCWFzeW5jUmVxdWVzdC5SZXF1ZXN0UmVhZCAoc2l6ZSk7CistCQkJCXJldHVybiAoMCwg dHJ1ZSk7CisrCQkJCXJldHVybiBuZXcgVmFsdWVUdXBsZTxpbnQsIGJvb2w+KDAsIHRydWUpOwor IAkJCX0KKyAKKyAJCQkvKgorQEAgLTQ1MSw3ICs0NTMsNyBAQCBuYW1lc3BhY2UgTW9uby5OZXQu U2VjdXJpdHkKKyAJCQlCdWZmZXIuQmxvY2tDb3B5IChpbnRlcm5hbEJ1ZmZlci5CdWZmZXIsIGlu dGVybmFsQnVmZmVyLk9mZnNldCwgYnVmZmVyLCBvZmZzZXQsIGxlbik7CisgCQkJaW50ZXJuYWxC dWZmZXIuT2Zmc2V0ICs9IGxlbjsKKyAJCQlpbnRlcm5hbEJ1ZmZlci5TaXplIC09IGxlbjsKKy0J CQlyZXR1cm4gKGxlbiwgIWludGVybmFsQnVmZmVyLkNvbXBsZXRlICYmIGxlbiA8IHNpemUpOwor KwkJCXJldHVybiBuZXcgVmFsdWVUdXBsZTxpbnQsIGJvb2w+KGxlbiwgIWludGVybmFsQnVmZmVy LkNvbXBsZXRlICYmIGxlbiA8IHNpemUpOworIAkJfQorIAorIAkJLyoKK0BAIC02MjAsMjEgKzYy MiwyMyBAQCBuYW1lc3BhY2UgTW9uby5OZXQuU2VjdXJpdHkKKyAJCQl9CisgCQl9CisgCistCQlp bnRlcm5hbCAoaW50LCBib29sKSBQcm9jZXNzUmVhZCAoQnVmZmVyT2Zmc2V0U2l6ZSB1c2VyQnVm ZmVyKQorKwkJaW50ZXJuYWwgU3lzdGVtLlZhbHVlVHVwbGU8aW50LCBib29sPiBQcm9jZXNzUmVh ZCAoQnVmZmVyT2Zmc2V0U2l6ZSB1c2VyQnVmZmVyKQorIAkJeworIAkJCWxvY2sgKGlvTG9jaykg eworIAkJCQkvLyBUaGlzIG9wZXJhdGVzIG9uIHRoZSBpbnRlcm5hbCBidWZmZXIgYW5kIHdpbGwg bmV2ZXIgYmxvY2suCistCQkJCXZhciByZXQgPSB4b2JpbGVUbHNDb250ZXh0LlJlYWQgKHVzZXJC dWZmZXIuQnVmZmVyLCB1c2VyQnVmZmVyLk9mZnNldCwgdXNlckJ1ZmZlci5TaXplLCBvdXQgYm9v bCB3YW50TW9yZSk7CistCQkJCXJldHVybiAocmV0LCB3YW50TW9yZSk7CisrICAgICAgICAgICAg ICAgIGJvb2wgd2FudE1vcmU7CisrCQkJCXZhciByZXQgPSB4b2JpbGVUbHNDb250ZXh0LlJlYWQg KHVzZXJCdWZmZXIuQnVmZmVyLCB1c2VyQnVmZmVyLk9mZnNldCwgdXNlckJ1ZmZlci5TaXplLCBv dXQgd2FudE1vcmUpOworKwkJCQlyZXR1cm4gbmV3IFN5c3RlbS5WYWx1ZVR1cGxlPGludCwgYm9v bD4ocmV0LCB3YW50TW9yZSk7CisgCQkJfQorIAkJfQorIAorLQkJaW50ZXJuYWwgKGludCwgYm9v bCkgUHJvY2Vzc1dyaXRlIChCdWZmZXJPZmZzZXRTaXplIHVzZXJCdWZmZXIpCisrCQlpbnRlcm5h bCBTeXN0ZW0uVmFsdWVUdXBsZTxpbnQsIGJvb2w+IFByb2Nlc3NXcml0ZSAoQnVmZmVyT2Zmc2V0 U2l6ZSB1c2VyQnVmZmVyKQorIAkJeworIAkJCWxvY2sgKGlvTG9jaykgeworIAkJCQkvLyBUaGlz IG9wZXJhdGVzIG9uIHRoZSBpbnRlcm5hbCBidWZmZXIgYW5kIHdpbGwgbmV2ZXIgYmxvY2suCist CQkJCXZhciByZXQgPSB4b2JpbGVUbHNDb250ZXh0LldyaXRlICh1c2VyQnVmZmVyLkJ1ZmZlciwg dXNlckJ1ZmZlci5PZmZzZXQsIHVzZXJCdWZmZXIuU2l6ZSwgb3V0IGJvb2wgd2FudE1vcmUpOwor LQkJCQlyZXR1cm4gKHJldCwgd2FudE1vcmUpOworKyAgICAgICAgICAgICAgICBib29sIHdhbnRN b3JlOworKwkJCQl2YXIgcmV0ID0geG9iaWxlVGxzQ29udGV4dC5Xcml0ZSAodXNlckJ1ZmZlci5C dWZmZXIsIHVzZXJCdWZmZXIuT2Zmc2V0LCB1c2VyQnVmZmVyLlNpemUsIG91dCB3YW50TW9yZSk7 CisrCQkJCXJldHVybiBuZXcgU3lzdGVtLlZhbHVlVHVwbGU8aW50LCBib29sPihyZXQsIHdhbnRN b3JlKTsKKyAJCQl9CisgCQl9CisgCi0tIAoyLjQ1LjIKCg== --b1=_an9yUQc81YewVJ071Mjh6ZcI5zllr0hgLHfHss8ka8A Content-Type: text/x-patch; name=0016-gnu-Add-mono-pre-5.8.0.patch Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=0016-gnu-Add-mono-pre-5.8.0.patch RnJvbSAwNDlmN2FiMjM2YmNiYWIwYjA2NzQxOGY0YjVkZTY2MmJjM2E1ODY5IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpNZXNzYWdlLUlEOiA8MDQ5ZjdhYjIzNmJjYmFiMGIwNjc0MThmNGI1ZGU2 NjJiYzNhNTg2OS4xNzMyNzA3Mjg4LmdpdC51bm11c2hAaGFzaGJhbmcuc2g+CkluLVJlcGx5LVRv OiA8M2Y4YWY2NWY3Mjg3MWQ2MWZhODVlNjkzOWY0NmNiOGRhYzE4NWM3MC4xNzMyNzA3Mjg4Lmdp dC51bm11c2hAaGFzaGJhbmcuc2g+ClJlZmVyZW5jZXM6IDwzZjhhZjY1ZjcyODcxZDYxZmE4NWU2 OTM5ZjQ2Y2I4ZGFjMTg1YzcwLjE3MzI3MDcyODguZ2l0LnVubXVzaEBoYXNoYmFuZy5zaD4KRnJv bTogdW5tdXNoIDx1bm11c2hAaGFzaGJhbmcuc2g+CkRhdGU6IFR1ZSwgMjYgTm92IDIwMjQgMTM6 NDI6MzkKU3ViamVjdDogW1BBVENIIDE2LzIxXSBnbnU6IEFkZCBtb25vLXByZS01LjguMC4KCiog Z251L3BhY2thZ2VzL2RvdG5ldC5zY20KICAobW9uby1wcmUtNS44LjAtZXh0ZXJuYWwtcmVwby1z cGVjcywgbW9uby1wcmUtNS44LjApOiBOZXcgdmFyaWFibGUuCiogZ251L3BhY2thZ2VzL3BhdGNo ZXMvY29yZWZ4LW1vbm8tcHJlLTUuOC4wLXBhdGNoZXMucGF0Y2g6IE5ldyBwYXRjaC4KKiBnbnUv bG9jYWwubWsgKGRpc3RfcGF0Y2hfREFUQSk6IFJlZ2lzdGVyIG5ldyBwYXRjaC4KCkNoYW5nZS1J ZDogSWQ1NzNiMDUxZTAxOTgwODY3YTA3MDMyZjMzOWZkYjI4MjliMmE0MTMKLS0tCiBnbnUvbG9j YWwubWsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAxICsKIGdudS9wYWNr YWdlcy9kb3RuZXQuc2NtICAgICAgICAgICAgICAgICAgICAgICB8ICAgNzkgKwogLi4uL2NvcmVm eC1tb25vLXByZS01LjguMC1wYXRjaGVzLnBhdGNoICAgICAgIHwgMTM0OSArKysrKysrKysrKysr KysrKwogMyBmaWxlcyBjaGFuZ2VkLCAxNDI5IGluc2VydGlvbnMoKykKIGNyZWF0ZSBtb2RlIDEw MDY0NCBnbnUvcGFja2FnZXMvcGF0Y2hlcy9jb3JlZngtbW9uby1wcmUtNS44LjAtcGF0Y2hlcy5w YXRjaAoKZGlmZiAtLWdpdCBhL2dudS9sb2NhbC5tayBiL2dudS9sb2NhbC5tawppbmRleCA5NTQ3 YmVjZGVjLi43NTQxZGIwNGU1IDEwMDY0NAotLS0gYS9nbnUvbG9jYWwubWsKKysrIGIvZ251L2xv Y2FsLm1rCkBAIC0xMDk0LDYgKzEwOTQsNyBAQCBkaXN0X3BhdGNoX0RBVEEgPQkJCQkJCVwKICAg JUQlL3BhY2thZ2VzL3BhdGNoZXMvY29vbC1yZXRyby10ZXJtLXdjdHlwZS5wYXRjaAkJXAogICAl RCUvcGFja2FnZXMvcGF0Y2hlcy9jb3EtYXV0b3N1YnN0LTEuOC1yZW1vdmUtZGVwcmVjYXRlZC1m aWxlcy5wYXRjaAkJXAogICAlRCUvcGFja2FnZXMvcGF0Y2hlcy9jb3JlZngtbW9uby01LjQuMC1w YXRjaGVzLnBhdGNoCQlcCisgICVEJS9wYWNrYWdlcy9wYXRjaGVzL2NvcmVmeC1tb25vLXByZS01 LjguMC1wYXRjaGVzLnBhdGNoCVwKICAgJUQlL3BhY2thZ2VzL3BhdGNoZXMvY29yZXV0aWxzLWdu dWxpYi10ZXN0cy5wYXRjaAkJXAogICAlRCUvcGFja2FnZXMvcGF0Y2hlcy9jcHBjaGVjay1kaXNh YmxlLWNoYXItc2lnbmVkbmVzcy10ZXN0LnBhdGNoCVwKICAgJUQlL3BhY2thZ2VzL3BhdGNoZXMv Y3BwZGFwLWFkZC1DUFBEQVBfVVNFX0VYVEVSTkFMX0dURVNUX1BBQ0tBR0UucGF0Y2hcCmRpZmYg LS1naXQgYS9nbnUvcGFja2FnZXMvZG90bmV0LnNjbSBiL2dudS9wYWNrYWdlcy9kb3RuZXQuc2Nt CmluZGV4IDkzNTcyYTA4MTIuLjkwZTFmMjBjOGUgMTAwNjQ0Ci0tLSBhL2dudS9wYWNrYWdlcy9k b3RuZXQuc2NtCisrKyBiL2dudS9wYWNrYWdlcy9kb3RuZXQuc2NtCkBAIC0xMTk3LDMgKzExOTcs ODIgQEAgKGRlZmluZS1wdWJsaWMgbW9uby01LjQuMAogICAgICAgICAgICAgICAgICJtb25vLTUu NC4wLXBhdGNoZXMucGF0Y2giKSkpKQogICAgIChuYXRpdmUtaW5wdXRzIChtb2RpZnktaW5wdXRz IChwYWNrYWdlLW5hdGl2ZS1pbnB1dHMgbW9uby01LjIuMCkKICAgICAgICAgICAgICAgICAgICAg IChyZXBsYWNlICJtb25vIiBtb25vLTUuMi4wKSkpKSkKKworKGRlZmluZSBtb25vLXByZS01Ljgu MC1leHRlcm5hbC1yZXBvLXNwZWNzCisgICcoKCJhcGktZG9jLXRvb2xzIiAgICAgICAgICAgICAg ICJkMDNlODE5ODM4YzYyNDFmOTJmOTA2NTVjYjQ0OGNjNDdjOWU4NzkxIgorICAgICAiMXJpa2k3 OWYzaWczY3hpZ3Zpc3M4MWR6NjAxaG45MmExZ2lmZ2xtMG16amJzNzZzZjNmaiIKKyAgICAgIzpy ZWN1cnNpdmU/ICN0KQorICAgICgiYXBpLXNuYXBzaG90IiAgICAgICAgICAgICAgICAiZTc5MGE5 Yjc3MDMxZWYxZDhlYmYwOTNlZjg4ODQwZWRlYTExZWQ3MyIKKyAgICAgIjFjNG5wMmZxZDltcGMx aTF4OGJzeG55cGFjcDU4dmt2Z2R3cG5tdm1seWpkdmJqNWF4NnEiKQorICAgICgiYXNwbmV0d2Vi c3RhY2siICAgICAgICAgICAgICAiZTc3YjEyZTZjYzVlZDI2MGE5ODQ0N2Y2MDllODg3MzM3ZTQ0 ZTI5OSIKKyAgICAgIjBya3MzNDRxcjRmbXAzZnMxMjY0ZDJxa21tMzQ4bThkMWtqZDd6NGw5NGlp aXJ3bjFmcTEiKQorICAgICgoInJlZmVyZW5jZS1hc3NlbWJsaWVzIiAiYmluYXJ5LXJlZmVyZW5j ZS1hc3NlbWJsaWVzIikKKyAgICAgIjE0MmNiZWI2MmZmYWJmMWRkOWMxNDE0ZDhkZDc2ZjkzYmNi ZWQwYzIiCisgICAgICIxd2tkNTg5aGdiMTZtNXp2bXA5eWI1N2FneXlyeWFhMWpqOHZobDR3MjBp MmhwMjJ3YWQ5IikKKyAgICAoImJvY2tidWlsZCIgICAgICAgICAgICAgICAgICAgImI0NDUwMTcz MDlhYWM3NDFhMjZkOGM1MWJiMDYzNjIzNDA4NGJmMjMiCisgICAgICIxanpodmF2ZDFqMG43c3kx d2FjemdqdjBrbXJicjM1Z2t6ZDc2ZmhsbXF2c3kwc3I5Njk1IikKKyAgICAoImJvcmluZ3NzbCIg ICAgICAgICAgICAgICAgICAgIjNlMDc3MGUxODgzNTcxNDcwODg2MGJhOWZlMWFmMDRhOTMyOTcx ZmYiCisgICAgICIxMzlhMGdsOTFhNTJrMnI2bmE2aWFsemtxeWthajFyazg4empya2F6M3NkeHg3 bm1tZzZ5IikKKyAgICAoImNlY2lsIiAgICAgICAgICAgICAgICAgICAgICAgImM3NmJhN2I0MTA0 NDdmYTM3MDkzMTUwY2I3YmM3NzJjYmEyOGEwYWUiCisgICAgICIweWRpN3JuOGFqcXl2bmo5YWd5 bjc0bGxiNHFnZDlrZ2RjZzNnYWpkZnliMmtseHg2emE4IikKKyAgICAoKCJjZWNpbCIgImNlY2ls LWxlZ2FjeSIpICAgICAgIjMzZDUwYjg3NGZkNTI3MTE4YmMzNjFkODNkZTNkNDk0ZThiYjU1ZTEi CisgICAgICIxcDRobDE3OTZpYjI2eWt5ZjVzbmw2Y2owbHgwdjdtamgweHFoanc2cWRoNzUzbnNq eWhiIikKKyAgICAoImNvcmVmeCIgICAgICAgICAgICAgICAgICAgICAgIjc0Y2NkOGFhMDBkN2Qy NzExOTFjYTNiOWM0ZjgxODI2OGRjMzZjMjgiCisgICAgICIwbm00MXFkcHZqNjJyOGJ4bmY5Mm03 a2ltam0xaTU0NHlnZHF6NWE3cGdjNnpmOTlhczZqIgorICAgICAjOnBhdGNoZXMgKCJjb3JlZngt bW9uby1wcmUtNS44LjAtcGF0Y2hlcy5wYXRjaCIpKQorICAgICgiY29yZXJ0IiAgICAgICAgICAg ICAgICAgICAgICAiNDhkYmE3MzgwMWU4MDRlODlmMDAzMTFkYTk5ZDg3M2Y5YzU1MDI3OCIKKyAg ICAgIjF6dzQ3amY0Y3dxbWFpeHlsaXN4aTczeGY2Y2FwNDFid2Y5dmxtcHhhbnp4YXFrbHpzdmsi KQorICAgICgiaWtkYXNtIiAgICAgICAgICAgICAgICAgICAgICAiM2FlZjljZGQ2MDEzZmMwNjIw YTE4MTdmMGIxMWQ4ZmI5MGVkMmUwZiIKKyAgICAgIjA3OGNhaTMzeDhjNzE5Njlpd2k3aG1icWRm d3BpY3BtYW0yYWczazJia2xwdmEydm5zenYiKQorICAgICgoImlrdm0tZm9yayIgImlrdm0iKSAg ICAgICAgICAiODQ3ZTA1ZmNlZDVjOWE0MWZmMGYyNGYxZjlkNDBkNWE4YTU3NzJjMSIKKyAgICAg IjFmbDlibTNsbXpmOGlxdjN4NGlxa3o5ZmM1NG13ZHZyeGlzeGcybnZ3d2NzaTRzYWZmcGkiKQor ICAgICgibGlua2VyIiAgICAgICAgICAgICAgICAgICAgICAiMjFlNDQ1YzI2YzY5YWMzYTJlMTQ0 MWJlZmEwMmQwYmQxMDVmZjg0OSIKKyAgICAgIjFoeDNpazBzZzcweXNjMnk4amRqeG0ybGpxbDAw NjlpMDVpOGZwMWxha3g3czd6N2J5d2MiKQorICAgICgiTmV3dG9uc29mdC5Kc29uIiAgICAgICAg ICAgICAiNDcxYzNlMDgwM2E5ZjQwYTBhY2M4YWVjZWIzMWRlNmZmOTNhNTJjNCIKKyAgICAgIjBk Z25nZDVocWs2eWhsZzQwa2FibjZxZG5rbm0zMnpjeDlxNmJtMnczMWNzbnNrNTk3OHMiKQorICAg ICgoIk51R2V0LkJ1aWxkVGFza3MiICJudWdldC1idWlsZHRhc2tzIikKKyAgICAgIjhkMzA3NDcy ZWEyMTRmMmI1OTYzNjQzMWY3NzE4OTRkYmNiYTcyNTgiCisgICAgICIxaDFmcm5qMHg4azdiMjlp YzRqaXNjaDB2bHBtc21naGp3NTU0cHoyNzdmMm54YWlkbGpqIikKKyAgICAoKCJOVW5pdExpdGUi ICJudW5pdC1saXRlIikgICAgIjY5MDYwM2JlYTk4YWFlNjlmY2E5YTY1MTMwZDg4NTkxYmM2Y2Fi ZWUiCisgICAgICIxZjg0NXlzanpzM3lkOWdjeXd3NjZkbmt4NDg0ejVma25iOGwweHo3NHNqbXhr Mm1uZ3djIikKKyAgICA7OyAoInJvc2x5bi1iaW5hcmllcyIgICAgICAgICAgIjgwYjg2ZjM0MGI3 ZjZmYjdhZmU4NDQ0MzIxNGUxY2JkN2ZmNzA2MjAiCisgICAgOzsgICIiKQorICAgICgicngiICAg ICAgICAgICAgICAgICAgICAgICAgICAiYjI5YTRiMGZkYTYwOWUwYWYzM2ZmNTRlZDEzNjUyYjZj Y2YwZTA1ZSIKKyAgICAgIjFuMWp3aG1zYmtjdjJkODA2aW1tY3B6a2I3MnJ6MDR4eTk4bXl3MzU1 YTh3NWFoMjV5aXYiKQorICAgIDs7ICgieHVuaXQtYmluYXJpZXMiICAgICAgICAgICAiZDQ0MzNi MDk3MmY0MGNiM2VmYWEzZmJiYTUyODY5YmRlNWRmOGZhOCIKKyAgICA7OyAgIiIpCisgICAgKSkK KworKGRlZmluZS1wdWJsaWMgbW9uby1wcmUtNS44LjAKKyAgKGxldCAoKGNvbW1pdCAiZDBmNTFi NGU4MzQwNDJjZmE1OTM3NDhhZGE5NDIwMzNiNDU4Y2M0MCIpCisgICAgICAgICh2ZXJzaW9uICI1 LjQuMC4yMDEiKQorICAgICAgICAocmV2aXNpb24gIjAiKSkKKyAgICAocGFja2FnZQorICAgICAg KGluaGVyaXQgbW9uby01LjQuMCkKKyAgICAgICh2ZXJzaW9uIChnaXQtdmVyc2lvbiB2ZXJzaW9u IHJldmlzaW9uIGNvbW1pdCkpCisgICAgICAobmFtZSAibW9ubyIpCisgICAgICAoc291cmNlIChv cmlnaW4KKyAgICAgICAgICAgICAgICAobWV0aG9kIGdpdC1mZXRjaCkKKyAgICAgICAgICAgICAg ICAodXJpCisgICAgICAgICAgICAgICAgIChnaXQtcmVmZXJlbmNlCisgICAgICAgICAgICAgICAg ICAodXJsICJodHRwczovL2dpdGxhYi53aW5laHEub3JnL21vbm8vbW9uby5naXQiKQorICAgICAg ICAgICAgICAgICAgKGNvbW1pdCBjb21taXQpKSkKKyAgICAgICAgICAgICAgICAoZmlsZS1uYW1l IChnaXQtZmlsZS1uYW1lIG5hbWUgdmVyc2lvbikpCisgICAgICAgICAgICAgICAgKHNoYTI1Ngor ICAgICAgICAgICAgICAgICAoYmFzZTMyCisgICAgICAgICAgICAgICAgICAiMGF6NXN5azFubjln ZDVpbWtibXBiMTNxbTlxNmlicjJkMmtzZHpwd3NhcmtmeXA0aWM1MyIpKQorICAgICAgICAgICAg ICAgIChtb2R1bGVzICcoKGd1aXggYnVpbGQgdXRpbHMpCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAoaWNlLTkgc3RyaW5nLWZ1bikpKQorICAgICAgICAgICAgICAgIChzbmlwcGV0ICN+KGJl Z2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMkKGFkZC1leHRlcm5hbC1yZXBvcwor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb25vLXByZS01LjguMC1leHRlcm5hbC1y ZXBvLXNwZWNzKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjJEBwcmVwYXJlLW1vbm8t c291cmNlLTApKQorICAgICAgICAgICAgICAgIChwYXRjaGVzCisgICAgICAgICAgICAgICAgIChz ZWFyY2gtcGF0Y2hlcyAibW9uby01LjQuMC1wYXRjaGVzLnBhdGNoIikpKSkKKyAgICAgIChuYXRp dmUtaW5wdXRzIChtb2RpZnktaW5wdXRzIChwYWNrYWdlLW5hdGl2ZS1pbnB1dHMgbW9uby01LjQu MCkKKyAgICAgICAgICAgICAgICAgICAgICAgKHJlcGxhY2UgIm1vbm8iIG1vbm8tNS40LjApKSkK KyAgICAgIChhcmd1bWVudHMKKyAgICAgICAoc3Vic3RpdHV0ZS1rZXl3b3JkLWFyZ3VtZW50cyAo cGFja2FnZS1hcmd1bWVudHMgbW9uby01LjQuMCkKKyAgICAgICAgICgoIzpwaGFzZXMgcGhhc2Vz ICN+JXN0YW5kYXJkLXBoYXNlcykKKyAgICAgICAgICAjfihtb2RpZnktcGhhc2VzICMkcGhhc2Vz CisgICAgICAgICAgICAgIChkZWxldGUgJ3BhdGNoLXN1Yi1hdXRvZ2VuLnNoLXNoZWJhbmcpKSkp KSkpKQpkaWZmIC0tZ2l0IGEvZ251L3BhY2thZ2VzL3BhdGNoZXMvY29yZWZ4LW1vbm8tcHJlLTUu OC4wLXBhdGNoZXMucGF0Y2ggYi9nbnUvcGFja2FnZXMvcGF0Y2hlcy9jb3JlZngtbW9uby1wcmUt NS44LjAtcGF0Y2hlcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw Li4wNGRjYzZjNWE1Ci0tLSAvZGV2L251bGwKKysrIGIvZ251L3BhY2thZ2VzL3BhdGNoZXMvY29y ZWZ4LW1vbm8tcHJlLTUuOC4wLXBhdGNoZXMucGF0Y2gKQEAgLTAsMCArMSwxMzQ5IEBACitkaWZm IC0tZ2l0IGEvc3JjL01pY3Jvc29mdC5DU2hhcnAvc3JjL01pY3Jvc29mdC9DU2hhcnAvUnVudGlt ZUJpbmRlci9FeHByZXNzaW9uVHJlZUNhbGxSZXdyaXRlci5jcyBiL3NyYy9NaWNyb3NvZnQuQ1No YXJwL3NyYy9NaWNyb3NvZnQvQ1NoYXJwL1J1bnRpbWVCaW5kZXIvRXhwcmVzc2lvblRyZWVDYWxs UmV3cml0ZXIuY3MKK2luZGV4IGFhOGFmYTVhMWIuLjNhMjUxODI0NmEgMTAwNjQ0CistLS0gYS9z cmMvTWljcm9zb2Z0LkNTaGFycC9zcmMvTWljcm9zb2Z0L0NTaGFycC9SdW50aW1lQmluZGVyL0V4 cHJlc3Npb25UcmVlQ2FsbFJld3JpdGVyLmNzCisrKysgYi9zcmMvTWljcm9zb2Z0LkNTaGFycC9z cmMvTWljcm9zb2Z0L0NTaGFycC9SdW50aW1lQmluZGVyL0V4cHJlc3Npb25UcmVlQ2FsbFJld3Jp dGVyLmNzCitAQCAtMjQ2LDggKzI0Niw5IEBAIG5hbWVzcGFjZSBNaWNyb3NvZnQuQ1NoYXJwLlJ1 bnRpbWVCaW5kZXIKKyAgICAgICAgICAgICBFeHByQXJyYXlJbml0IGFycmluaXQ7CisgCisgICAg ICAgICAgICAgRXhwckxpc3QgbGlzdCA9IChFeHByTGlzdClwRXhwci5PcHRpb25hbEFyZ3VtZW50 czsKKy0gICAgICAgICAgICBpZiAobGlzdC5PcHRpb25hbE5leHRMaXN0Tm9kZSBpcyBFeHByTGlz dCBuZXh0KQorKyAgICAgICAgICAgIGlmIChsaXN0Lk9wdGlvbmFsTmV4dExpc3ROb2RlIGlzIEV4 cHJMaXN0KQorICAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgRXhwckxpc3QgbmV4dCA9 IChFeHByTGlzdClsaXN0Lk9wdGlvbmFsTmV4dExpc3ROb2RlOworICAgICAgICAgICAgICAgICBt ZXRoaW5mbyA9IChFeHByTWV0aG9kSW5mbyluZXh0Lk9wdGlvbmFsRWxlbWVudDsKKyAgICAgICAg ICAgICAgICAgYXJyaW5pdCA9IChFeHByQXJyYXlJbml0KW5leHQuT3B0aW9uYWxOZXh0TGlzdE5v ZGU7CisgICAgICAgICAgICAgfQorQEAgLTM4Miw4ICszODMsOSBAQCBuYW1lc3BhY2UgTWljcm9z b2Z0LkNTaGFycC5SdW50aW1lQmluZGVyCisgICAgICAgICAgICAgRXhwciBuZXh0Tm9kZSA9IGxp c3QuT3B0aW9uYWxOZXh0TGlzdE5vZGU7CisgICAgICAgICAgICAgRXhwclByb3BlcnR5SW5mbyBw cm9waW5mbzsKKyAgICAgICAgICAgICBFeHByQXJyYXlJbml0IGFyZ3VtZW50czsKKy0gICAgICAg ICAgICBpZiAobmV4dE5vZGUgaXMgRXhwckxpc3QgbmV4dExpc3QpCisrICAgICAgICAgICAgaWYg KG5leHROb2RlIGlzIEV4cHJMaXN0KQorICAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAg RXhwckxpc3QgbmV4dExpc3QgPSAoRXhwckxpc3QpbGlzdC5PcHRpb25hbE5leHRMaXN0Tm9kZTsK KyAgICAgICAgICAgICAgICAgcHJvcGluZm8gPSBuZXh0TGlzdC5PcHRpb25hbEVsZW1lbnQgYXMg RXhwclByb3BlcnR5SW5mbzsKKyAgICAgICAgICAgICAgICAgYXJndW1lbnRzID0gbmV4dExpc3Qu T3B0aW9uYWxOZXh0TGlzdE5vZGUgYXMgRXhwckFycmF5SW5pdDsKKyAgICAgICAgICAgICB9CitA QCAtNTUzLDggKzU1NSw5IEBAIG5hbWVzcGFjZSBNaWNyb3NvZnQuQ1NoYXJwLlJ1bnRpbWVCaW5k ZXIKKyAgICAgICAgICAgICBsaXN0ID0gKEV4cHJMaXN0KWxpc3QuT3B0aW9uYWxOZXh0TGlzdE5v ZGU7CisgICAgICAgICAgICAgTWV0aG9kSW5mbyBtZXRob2RJbmZvOworICAgICAgICAgICAgIGJv b2wgYklzTGlmdGVkID0gZmFsc2U7CistICAgICAgICAgICAgaWYgKGxpc3QuT3B0aW9uYWxOZXh0 TGlzdE5vZGUgaXMgRXhwckxpc3QgbmV4dCkKKysgICAgICAgICAgICBpZiAobGlzdC5PcHRpb25h bE5leHRMaXN0Tm9kZSBpcyBFeHByTGlzdCkKKyAgICAgICAgICAgICB7CisrICAgICAgICAgICAg ICAgIEV4cHJMaXN0IG5leHQgPSAoRXhwckxpc3QpbGlzdC5PcHRpb25hbE5leHRMaXN0Tm9kZTsK KyAgICAgICAgICAgICAgICAgRXhwckNvbnN0YW50IGlzTGlmdGVkID0gKEV4cHJDb25zdGFudClu ZXh0Lk9wdGlvbmFsRWxlbWVudDsKKyAgICAgICAgICAgICAgICAgRGVidWcuQXNzZXJ0KGlzTGlm dGVkICE9IG51bGwpOworICAgICAgICAgICAgICAgICBiSXNMaWZ0ZWQgPSBpc0xpZnRlZC5WYWwu SW50MzJWYWwgPT0gMTsKK0BAIC02NzcsOCArNjgwLDkgQEAgbmFtZXNwYWNlIE1pY3Jvc29mdC5D U2hhcnAuUnVudGltZUJpbmRlcgorIAorICAgICAgICAgcHJpdmF0ZSBFeHByZXNzaW9uIEdldEV4 cHJlc3Npb24oRXhwciBwRXhwcikKKyAgICAgICAgIHsKKy0gICAgICAgICAgICBpZiAocEV4cHIg aXMgRXhwcldyYXAgd3JhcCkKKysgICAgICAgICAgICBpZiAocEV4cHIgaXMgRXhwcldyYXApCisg ICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICBFeHByV3JhcCB3cmFwID0gKEV4cHJXcmFw KSBwRXhwcjsKKyAgICAgICAgICAgICAgICAgcmV0dXJuIF9EaWN0aW9uYXJ5T2ZQYXJhbWV0ZXJz WyhFeHByQ2FsbCl3cmFwLk9wdGlvbmFsRXhwcmVzc2lvbl07CisgICAgICAgICAgICAgfQorICAg ICAgICAgICAgIGVsc2UgaWYgKHBFeHByIGlzIEV4cHJDb25zdGFudCkKK0BAIC04NzUsMjAgKzg3 OSwyNCBAQCBuYW1lc3BhY2UgTWljcm9zb2Z0LkNTaGFycC5SdW50aW1lQmluZGVyCisgICAgICAg ICB7CisgICAgICAgICAgICAgZm9yICg7OykKKyAgICAgICAgICAgICB7CistICAgICAgICAgICAg ICAgIGlmIChwRXhwciBpcyBFeHByQ2FzdCBjYXN0KQorKyAgICAgICAgICAgICAgICBpZiAocEV4 cHIgaXMgRXhwckNhc3QpCisgICAgICAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgICAg IEV4cHJDYXN0IGNhc3QgPSAoRXhwckNhc3QpIHBFeHByOworICAgICAgICAgICAgICAgICAgICAg cEV4cHIgPSBjYXN0LkFyZ3VtZW50OworICAgICAgICAgICAgICAgICB9CistICAgICAgICAgICAg ICAgIGVsc2UgaWYgKHBFeHByIGlzIEV4cHJUeXBlT2YgdHlwZU9mKQorKyAgICAgICAgICAgICAg ICBlbHNlIGlmIChwRXhwciBpcyBFeHByVHlwZU9mKQorICAgICAgICAgICAgICAgICB7CisrICAg ICAgICAgICAgICAgICAgICBFeHByVHlwZU9mIHR5cGVPZiA9IChFeHByVHlwZU9mKSBwRXhwcjsK KyAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0eXBlT2YuU291cmNlVHlwZS5UeXBlLkFzc29j aWF0ZWRTeXN0ZW1UeXBlOworICAgICAgICAgICAgICAgICB9CistICAgICAgICAgICAgICAgIGVs c2UgaWYgKHBFeHByIGlzIEV4cHJNZXRob2RJbmZvIG1ldGhvZEluZm8pCisrICAgICAgICAgICAg ICAgIGVsc2UgaWYgKHBFeHByIGlzIEV4cHJNZXRob2RJbmZvKQorICAgICAgICAgICAgICAgICB7 CisrICAgICAgICAgICAgICAgICAgICBFeHByTWV0aG9kSW5mbyBtZXRob2RJbmZvID0gKEV4cHJN ZXRob2RJbmZvKSBwRXhwcjsKKyAgICAgICAgICAgICAgICAgICAgIHJldHVybiBHZXRNZXRob2RJ bmZvRnJvbUV4cHIobWV0aG9kSW5mbyk7CisgICAgICAgICAgICAgICAgIH0KKy0gICAgICAgICAg ICAgICAgZWxzZSBpZiAocEV4cHIgaXMgRXhwckNvbnN0YW50IGNvbnN0YW50KQorKyAgICAgICAg ICAgICAgICBlbHNlIGlmIChwRXhwciBpcyBFeHByQ29uc3RhbnQpCisgICAgICAgICAgICAgICAg IHsKKysgICAgICAgICAgICAgICAgICAgIEV4cHJDb25zdGFudCBjb25zdGFudCA9IChFeHByQ29u c3RhbnQpIHBFeHByOworICAgICAgICAgICAgICAgICAgICAgQ29uc3RWYWwgdmFsID0gY29uc3Rh bnQuVmFsOworICAgICAgICAgICAgICAgICAgICAgQ1R5cGUgdW5kZXJseWluZ1R5cGUgPSBwRXhw ci5UeXBlOworICAgICAgICAgICAgICAgICAgICAgb2JqZWN0IG9ianZhbDsKK0BAIC05NTQsOCAr OTYyLDkgQEAgbmFtZXNwYWNlIE1pY3Jvc29mdC5DU2hhcnAuUnVudGltZUJpbmRlcgorIAorICAg ICAgICAgICAgICAgICAgICAgcmV0dXJuIHBFeHByLlR5cGUuaXNFbnVtVHlwZSgpID8gRW51bS5U b09iamVjdChwRXhwci5UeXBlLkFzc29jaWF0ZWRTeXN0ZW1UeXBlLCBvYmp2YWwpIDogb2JqdmFs OworICAgICAgICAgICAgICAgICB9CistICAgICAgICAgICAgICAgIGVsc2UgaWYgKHBFeHByIGlz IEV4cHJaZXJvSW5pdCB6ZXJvSW5pdCkKKysgICAgICAgICAgICAgICAgZWxzZSBpZiAocEV4cHIg aXMgRXhwclplcm9Jbml0KQorICAgICAgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgICAg ICBFeHByWmVyb0luaXQgemVyb0luaXQgPSAoRXhwclplcm9Jbml0KSBwRXhwcjsKKyAgICAgICAg ICAgICAgICAgICAgIGlmICgocEV4cHIgPSB6ZXJvSW5pdC5PcHRpb25hbEFyZ3VtZW50KSA9PSBu dWxsKQorICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgIHJl dHVybiBBY3RpdmF0b3IuQ3JlYXRlSW5zdGFuY2UoemVyb0luaXQuVHlwZS5Bc3NvY2lhdGVkU3lz dGVtVHlwZSk7CitAQCAtOTgxLDggKzk5MCw5IEBAIG5hbWVzcGFjZSBNaWNyb3NvZnQuQ1NoYXJw LlJ1bnRpbWVCaW5kZXIKKyAgICAgICAgICAgICAgICAgRXhwciBwID0gbGlzdDsKKyAgICAgICAg ICAgICAgICAgd2hpbGUgKGxpc3QgIT0gbnVsbCkKKyAgICAgICAgICAgICAgICAgeworLSAgICAg ICAgICAgICAgICAgICAgaWYgKGxpc3QgaXMgRXhwckxpc3QgcExpc3QpCisrICAgICAgICAgICAg ICAgICAgICBpZiAobGlzdCBpcyBFeHByTGlzdCkKKyAgICAgICAgICAgICAgICAgICAgIHsKKysg ICAgICAgICAgICAgICAgICAgICAgICBFeHByTGlzdCBwTGlzdCA9IChFeHByTGlzdCkgbGlzdDsK KyAgICAgICAgICAgICAgICAgICAgICAgICBwID0gcExpc3QuT3B0aW9uYWxFbGVtZW50OworICAg ICAgICAgICAgICAgICAgICAgICAgIGxpc3QgPSBwTGlzdC5PcHRpb25hbE5leHRMaXN0Tm9kZTsK KyAgICAgICAgICAgICAgICAgICAgIH0KK2RpZmYgLS1naXQgYS9zcmMvTWljcm9zb2Z0LkNTaGFy cC9zcmMvTWljcm9zb2Z0L0NTaGFycC9SdW50aW1lQmluZGVyL1J1bnRpbWVCaW5kZXIuY3MgYi9z cmMvTWljcm9zb2Z0LkNTaGFycC9zcmMvTWljcm9zb2Z0L0NTaGFycC9SdW50aW1lQmluZGVyL1J1 bnRpbWVCaW5kZXIuY3MKK2luZGV4IGE2MjNiZmMwYmYuLjRhNzQyMTU2YjkgMTAwNjQ0CistLS0g YS9zcmMvTWljcm9zb2Z0LkNTaGFycC9zcmMvTWljcm9zb2Z0L0NTaGFycC9SdW50aW1lQmluZGVy L1J1bnRpbWVCaW5kZXIuY3MKKysrKyBiL3NyYy9NaWNyb3NvZnQuQ1NoYXJwL3NyYy9NaWNyb3Nv ZnQvQ1NoYXJwL1J1bnRpbWVCaW5kZXIvUnVudGltZUJpbmRlci5jcworQEAgLTE4OSw3ICsxODks OCBAQCBuYW1lc3BhY2UgTWljcm9zb2Z0LkNTaGFycC5SdW50aW1lQmluZGVyCisgICAgICAgICAg ICAgTG9jYWxWYXJpYWJsZVN5bWJvbFtdIGxvY2FscyA9IFBvcHVsYXRlTG9jYWxTY29wZShwYXls b2FkLCBwU2NvcGUsIGFyZ3VtZW50cywgcGFyYW1ldGVycyk7CisgCisgICAgICAgICAgICAgLy8g KDEuNSkgLSBDaGVjayB0byBzZWUgaWYgd2UgbmVlZCB0byBkZWZlci4KKy0gICAgICAgICAgICBp ZiAoRGVmZXJCaW5kaW5nKHBheWxvYWQsIGFyZ3VtZW50cywgYXJncywgbG9jYWxzLCBvdXQgRHlu YW1pY01ldGFPYmplY3QgbykpCisrICAgICAgICAgICAgRHluYW1pY01ldGFPYmplY3QgbzsKKysg ICAgICAgICAgICBpZiAoRGVmZXJCaW5kaW5nKHBheWxvYWQsIGFyZ3VtZW50cywgYXJncywgbG9j YWxzLCBvdXQgbykpCisgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICBkZWZlcnJlZEJp bmRpbmcgPSBvOworICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKK0BAIC0xMDMwLDggKzEw MzEsOSBAQCBuYW1lc3BhY2UgTWljcm9zb2Z0LkNTaGFycC5SdW50aW1lQmluZGVyCisgCisgICAg ICAgICBwcml2YXRlIHN0YXRpYyB2b2lkIENoZWNrRm9yQ29uZGl0aW9uYWxNZXRob2RFcnJvcihF eHByIHBFeHByKQorICAgICAgICAgeworLSAgICAgICAgICAgIGlmIChwRXhwciBpcyBFeHByQ2Fs bCBjYWxsKQorKyAgICAgICAgICAgIGlmIChwRXhwciBpcyBFeHByQ2FsbCkKKyAgICAgICAgICAg ICB7CisrICAgICAgICAgICAgICAgIEV4cHJDYWxsIGNhbGwgPSAoRXhwckNhbGwpcEV4cHI7Cisg ICAgICAgICAgICAgICAgIC8vIFRoaXMgbWltaWNzIHRoZSBiZWhhdmlvciBvZiB0aGUgbmF0aXZl IENvbXBpbGVyU3ltYm9sTG9hZGVyIGluIEdldENvbmRpdGlvbmFsU3ltYm9scy4gT3ZlcnJpZGUK KyAgICAgICAgICAgICAgICAgLy8gbWV0aG9kcyBjYW5ub3QgaGF2ZSB0aGUgY29uZGl0aW9uYWwg YXR0cmlidXRlLCBidXQgaW1wbGljaXRseSBhY3F1aXJlIGl0IGZyb20gdGhlaXIgc2xvdC4KKyAK K0BAIC0xMDY0LDggKzEwNjYsOSBAQCBuYW1lc3BhY2UgTWljcm9zb2Z0LkNTaGFycC5SdW50aW1l QmluZGVyCisgICAgICAgICAgICAgRXhwck1lbWJlckdyb3VwIG1lbWdyb3VwOworICAgICAgICAg ICAgIFR5cGVBcnJheSB0eXBlQXJnczsKKyAKKy0gICAgICAgICAgICBpZiAocFJlc3VsdCBpcyBF eHByQ2FsbCBjYWxsKQorKyAgICAgICAgICAgIGlmIChwUmVzdWx0IGlzIEV4cHJDYWxsKQorICAg ICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgRXhwckNhbGwgY2FsbCA9IChFeHByQ2FsbCkg cFJlc3VsdDsKKyAgICAgICAgICAgICAgICAgdHlwZSA9IGNhbGwuTWV0aFdpdGhJbnN0LkF0czsK KyAgICAgICAgICAgICAgICAgbWV0aHByb3AgPSBjYWxsLk1ldGhXaXRoSW5zdC5NZXRoKCk7Cisg ICAgICAgICAgICAgICAgIG1lbWdyb3VwID0gY2FsbC5NZW1iZXJHcm91cDsKK0BAIC0xMTMyLDEy ICsxMTM1LDE1IEBAIG5hbWVzcGFjZSBNaWNyb3NvZnQuQ1NoYXJwLlJ1bnRpbWVCaW5kZXIKKyAK KyAgICAgICAgIHByaXZhdGUgRXhwciBTdHJpcE5hbWVkQXJndW1lbnQoRXhwciBwQXJnKQorICAg ICAgICAgeworLSAgICAgICAgICAgIGlmIChwQXJnIGlzIEV4cHJOYW1lZEFyZ3VtZW50U3BlY2lm aWNhdGlvbiBuYW1lZCkKKysgICAgICAgICAgICBpZiAocEFyZyBpcyBFeHByTmFtZWRBcmd1bWVu dFNwZWNpZmljYXRpb24pCisgICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICBFeHByTmFt ZWRBcmd1bWVudFNwZWNpZmljYXRpb24gbmFtZWQgPQorKyAgICAgICAgICAgICAgICAgICAgKEV4 cHJOYW1lZEFyZ3VtZW50U3BlY2lmaWNhdGlvbikgcEFyZzsKKyAgICAgICAgICAgICAgICAgcEFy ZyA9IG5hbWVkLlZhbHVlOworICAgICAgICAgICAgIH0KKy0gICAgICAgICAgICBlbHNlIGlmIChw QXJnIGlzIEV4cHJBcnJheUluaXQgaW5pdCkKKysgICAgICAgICAgICBlbHNlIGlmIChwQXJnIGlz IEV4cHJBcnJheUluaXQpCisgICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICBFeHByQXJy YXlJbml0IGluaXQgPSAoRXhwckFycmF5SW5pdCkgcEFyZzsKKyAgICAgICAgICAgICAgICAgaW5p dC5PcHRpb25hbEFyZ3VtZW50cyA9IFN0cmlwTmFtZWRBcmd1bWVudHMoaW5pdC5PcHRpb25hbEFy Z3VtZW50cyk7CisgICAgICAgICAgICAgfQorIAorQEAgLTExNDYsMTQgKzExNTIsMTYgQEAgbmFt ZXNwYWNlIE1pY3Jvc29mdC5DU2hhcnAuUnVudGltZUJpbmRlcgorIAorICAgICAgICAgcHJpdmF0 ZSBFeHByIFN0cmlwTmFtZWRBcmd1bWVudHMoRXhwciBwQXJnKQorICAgICAgICAgeworLSAgICAg ICAgICAgIGlmIChwQXJnIGlzIEV4cHJMaXN0IGxpc3QpCisrICAgICAgICAgICAgaWYgKHBBcmcg aXMgRXhwckxpc3QpCisgICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICBFeHByTGlzdCBs aXN0ID0gKEV4cHJMaXN0KSBwQXJnOworICAgICAgICAgICAgICAgICBmb3IoOzspCisgICAgICAg ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgIGxpc3QuT3B0aW9uYWxFbGVtZW50ID0g U3RyaXBOYW1lZEFyZ3VtZW50KGxpc3QuT3B0aW9uYWxFbGVtZW50KTsKKyAKKy0gICAgICAgICAg ICAgICAgICAgIGlmIChsaXN0Lk9wdGlvbmFsTmV4dExpc3ROb2RlIGlzIEV4cHJMaXN0IG5leHQp CisrICAgICAgICAgICAgICAgICAgICBpZiAobGlzdC5PcHRpb25hbE5leHRMaXN0Tm9kZSBpcyBF eHByTGlzdCkKKyAgICAgICAgICAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgICAgICAg ICBFeHByTGlzdCBuZXh0ID0gKEV4cHJMaXN0KWxpc3QuT3B0aW9uYWxOZXh0TGlzdE5vZGU7Cisg ICAgICAgICAgICAgICAgICAgICAgICAgbGlzdCA9IG5leHQ7CisgICAgICAgICAgICAgICAgICAg ICB9CisgICAgICAgICAgICAgICAgICAgICBlbHNlCitkaWZmIC0tZ2l0IGEvc3JjL01pY3Jvc29m dC5DU2hhcnAvc3JjL01pY3Jvc29mdC9DU2hhcnAvUnVudGltZUJpbmRlci9TZW1hbnRpY3MvQmlu ZGluZy9CZXR0ZXIuY3MgYi9zcmMvTWljcm9zb2Z0LkNTaGFycC9zcmMvTWljcm9zb2Z0L0NTaGFy cC9SdW50aW1lQmluZGVyL1NlbWFudGljcy9CaW5kaW5nL0JldHRlci5jcworaW5kZXggY2ViZmNk OTRlMS4uMTc5YWMyMTYyMCAxMDA2NDQKKy0tLSBhL3NyYy9NaWNyb3NvZnQuQ1NoYXJwL3NyYy9N aWNyb3NvZnQvQ1NoYXJwL1J1bnRpbWVCaW5kZXIvU2VtYW50aWNzL0JpbmRpbmcvQmV0dGVyLmNz CisrKysgYi9zcmMvTWljcm9zb2Z0LkNTaGFycC9zcmMvTWljcm9zb2Z0L0NTaGFycC9SdW50aW1l QmluZGVyL1NlbWFudGljcy9CaW5kaW5nL0JldHRlci5jcworQEAgLTE1Nyw4ICsxNTcsOSBAQCBu YW1lc3BhY2UgTWljcm9zb2Z0LkNTaGFycC5SdW50aW1lQmluZGVyLlNlbWFudGljcworICAgICAg ICAgICAgIC8vIFdlIHRoZW4gZ28gb3ZlciB0aGUgc3BlY2lmaWVkIGFyZ3VtZW50cyBhbmQgcHV0 IHRoZSB0eXBlIGZvciBhbnkgbmFtZWQgYXJndW1lbnQgaW4gdGhlIHJpZ2h0IHBvc2l0aW9uIGlu IHRoZSBhcnJheS4KKyAgICAgICAgICAgICBmb3IgKGludCBpUGFyYW0gPSAwOyBpUGFyYW0gPCBh cmdzLmNhcmc7IGlQYXJhbSsrKQorICAgICAgICAgICAgIHsKKy0gICAgICAgICAgICAgICAgaWYg KHByZ2V4cHJbaVBhcmFtXSBpcyBFeHByTmFtZWRBcmd1bWVudFNwZWNpZmljYXRpb24gbmFtZWQp CisrICAgICAgICAgICAgICAgIGlmIChwcmdleHByW2lQYXJhbV0gaXMgRXhwck5hbWVkQXJndW1l bnRTcGVjaWZpY2F0aW9uKQorICAgICAgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgICAg ICBFeHByTmFtZWRBcmd1bWVudFNwZWNpZmljYXRpb24gbmFtZWQgPSAoRXhwck5hbWVkQXJndW1l bnRTcGVjaWZpY2F0aW9uKXByZ2V4cHJbaVBhcmFtXTsKKyAgICAgICAgICAgICAgICAgICAgIC8v IFdlIGZpbmQgdGhlIGluZGV4IG9mIHRoZSB0eXBlIG9mIHRoZSBhcmd1bWVudCBpbiB0aGUgbWV0 aG9kIHBhcmFtZXRlciBsaXN0IGFuZCBzdG9yZSB0aGF0IGluIGEgdGVtcAorICAgICAgICAgICAg ICAgICAgICAgaW50IGluZGV4ID0gRmluZE5hbWUobWV0aFByb3AuUGFyYW1ldGVyTmFtZXMsIG5h bWVkLk5hbWUpOworICAgICAgICAgICAgICAgICAgICAgQ1R5cGUgdGVtcFR5cGUgPSBwdGFbaW5k ZXhdOworZGlmZiAtLWdpdCBhL3NyYy9NaWNyb3NvZnQuQ1NoYXJwL3NyYy9NaWNyb3NvZnQvQ1No YXJwL1J1bnRpbWVCaW5kZXIvU2VtYW50aWNzL0JpbmRpbmcvRXJyb3JSZXBvcnRpbmcuY3MgYi9z cmMvTWljcm9zb2Z0LkNTaGFycC9zcmMvTWljcm9zb2Z0L0NTaGFycC9SdW50aW1lQmluZGVyL1Nl bWFudGljcy9CaW5kaW5nL0Vycm9yUmVwb3J0aW5nLmNzCitpbmRleCBjNDA2YWY0M2RlLi4wZWE4 MWVmMjFjIDEwMDY0NAorLS0tIGEvc3JjL01pY3Jvc29mdC5DU2hhcnAvc3JjL01pY3Jvc29mdC9D U2hhcnAvUnVudGltZUJpbmRlci9TZW1hbnRpY3MvQmluZGluZy9FcnJvclJlcG9ydGluZy5jcwor KysrIGIvc3JjL01pY3Jvc29mdC5DU2hhcnAvc3JjL01pY3Jvc29mdC9DU2hhcnAvUnVudGltZUJp bmRlci9TZW1hbnRpY3MvQmluZGluZy9FcnJvclJlcG9ydGluZy5jcworQEAgLTc2LDIyICs3Niwy NSBAQCBuYW1lc3BhY2UgTWljcm9zb2Z0LkNTaGFycC5SdW50aW1lQmluZGVyLlNlbWFudGljcwor ICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgRGVidWcuQXNzZXJ0KGV4cHIgIT0gbnVs bCk7CisgCistICAgICAgICAgICAgICAgIGlmIChleHByIGlzIEV4cHJMb2NhbCBsb2NhbCAmJiBs b2NhbC5Jc09LKQorKyAgICAgICAgICAgICAgICBpZiAoZXhwciBpcyBFeHByTG9jYWwgJiYgKChF eHByTG9jYWwpZXhwcikuSXNPSykKKyAgICAgICAgICAgICAgICAgeworKyAgICAgICAgICAgICAg ICAgICAgRXhwckxvY2FsIGxvY2FsID0gKEV4cHJMb2NhbClleHByOworICAgICAgICAgICAgICAg ICAgICAgUmVwb3J0TG9jYWxFcnJvcihsb2NhbC5Mb2NhbCwga2luZCwgaXNOZXN0ZWQpOworICAg ICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICAgICAgIH0KKyAKKyAg ICAgICAgICAgICAgICAgRXhwciBwT2JqZWN0ID0gbnVsbDsKKyAKKy0gICAgICAgICAgICAgICAg aWYgKGV4cHIgaXMgRXhwclByb3BlcnR5IHByb3ApCisrICAgICAgICAgICAgICAgIGlmIChleHBy IGlzIEV4cHJQcm9wZXJ0eSkKKyAgICAgICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICAg ICAgRXhwclByb3BlcnR5IHByb3AgPSAoRXhwclByb3BlcnR5KWV4cHI7CisgICAgICAgICAgICAg ICAgICAgICAvLyBXZSd2ZSBhbHJlYWR5IHJlcG9ydGVkIHJlYWQtb25seS1wcm9wZXJ0eSBlcnJv cnMuCisgICAgICAgICAgICAgICAgICAgICBEZWJ1Zy5Bc3NlcnQocHJvcC5NZXRoV2l0aFR5cGVT ZXQgIT0gbnVsbCk7CisgICAgICAgICAgICAgICAgICAgICBwT2JqZWN0ID0gcHJvcC5NZW1iZXJH cm91cC5PcHRpb25hbE9iamVjdDsKKyAgICAgICAgICAgICAgICAgfQorLSAgICAgICAgICAgICAg ICBlbHNlIGlmIChleHByIGlzIEV4cHJGaWVsZCBmaWVsZCkKKysgICAgICAgICAgICAgICAgZWxz ZSBpZiAoZXhwciBpcyBFeHByRmllbGQpCisgICAgICAgICAgICAgICAgIHsKKysgICAgICAgICAg ICAgICAgICAgIEV4cHJGaWVsZCBmaWVsZCA9IChFeHByRmllbGQpZXhwcjsKKyAgICAgICAgICAg ICAgICAgICAgIGlmIChmaWVsZC5GaWVsZFdpdGhUeXBlLkZpZWxkKCkuaXNSZWFkT25seSkKKyAg ICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICBSZXBvcnRSZWFk T25seUVycm9yKGZpZWxkLCBraW5kLCBpc05lc3RlZCk7CitAQCAtMTA1LDggKzEwOCw5IEBAIG5h bWVzcGFjZSBNaWNyb3NvZnQuQ1NoYXJwLlJ1bnRpbWVCaW5kZXIuU2VtYW50aWNzCisgCisgICAg ICAgICAgICAgICAgIGlmIChwT2JqZWN0ICE9IG51bGwgJiYgcE9iamVjdC5UeXBlLmlzU3RydWN0 T3JFbnVtKCkpCisgICAgICAgICAgICAgICAgIHsKKy0gICAgICAgICAgICAgICAgICAgIGlmIChw T2JqZWN0IGlzIElFeHByV2l0aEFyZ3Mgd2l0aEFyZ3MpCisrICAgICAgICAgICAgICAgICAgICBp ZiAocE9iamVjdCBpcyBJRXhwcldpdGhBcmdzKQorICAgICAgICAgICAgICAgICAgICAgeworKyAg ICAgICAgICAgICAgICAgICAgICAgIElFeHByV2l0aEFyZ3Mgd2l0aEFyZ3MgPSAoSUV4cHJXaXRo QXJncylwT2JqZWN0OworICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFzc2lnbmluZyB0byBS SFMgb2YgbWV0aG9kIG9yIHByb3BlcnR5IGdldHRlciByZXR1cm5pbmcgYSB2YWx1ZS10eXBlIG9u IHRoZSBzdGFjayBvcgorICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHBhc3NpbmcgUkhTIG9m IG1ldGhvZCBvciBwcm9wZXJ0eSBnZXR0ZXIgcmV0dXJuaW5nIGEgdmFsdWUtdHlwZSBvbiB0aGUg c3RhY2ssIGFzIHJlZiBvciBvdXQKKyAgICAgICAgICAgICAgICAgICAgICAgICBFcnJvckNvbnRl eHQuRXJyb3IoRXJyb3JDb2RlLkVSUl9SZXR1cm5Ob3RMVmFsdWUsIHdpdGhBcmdzLkdldFN5bVdp dGhUeXBlKCkpOworZGlmZiAtLWdpdCBhL3NyYy9NaWNyb3NvZnQuQ1NoYXJwL3NyYy9NaWNyb3Nv ZnQvQ1NoYXJwL1J1bnRpbWVCaW5kZXIvU2VtYW50aWNzL0NvbnZlcnNpb24uY3MgYi9zcmMvTWlj cm9zb2Z0LkNTaGFycC9zcmMvTWljcm9zb2Z0L0NTaGFycC9SdW50aW1lQmluZGVyL1NlbWFudGlj cy9Db252ZXJzaW9uLmNzCitpbmRleCAyNzU2NTM4NzcwLi45OWFkZjQ4OGIzIDEwMDY0NAorLS0t IGEvc3JjL01pY3Jvc29mdC5DU2hhcnAvc3JjL01pY3Jvc29mdC9DU2hhcnAvUnVudGltZUJpbmRl ci9TZW1hbnRpY3MvQ29udmVyc2lvbi5jcworKysrIGIvc3JjL01pY3Jvc29mdC5DU2hhcnAvc3Jj L01pY3Jvc29mdC9DU2hhcnAvUnVudGltZUJpbmRlci9TZW1hbnRpY3MvQ29udmVyc2lvbi5jcwor QEAgLTM4Miw5ICszODIsMTAgQEAgbmFtZXNwYWNlIE1pY3Jvc29mdC5DU2hhcnAuUnVudGltZUJp bmRlci5TZW1hbnRpY3MKKyAgICAgICAgICAgICAgICAgRlVORFRZUEUgZnRTcmMgPSBleHByLlR5 cGUuZnVuZFR5cGUoKTsKKyAgICAgICAgICAgICAgICAgRlVORFRZUEUgZnREZXN0ID0gZGVzdC5m dW5kVHlwZSgpOworIAorLSAgICAgICAgICAgICAgICBpZiAoZXhwciBpcyBFeHByQ29uc3RhbnQg Y29uc3RhbnQgJiYgY29uc3RhbnQuSXNPSyAmJgorKyAgICAgICAgICAgICAgICBpZiAoZXhwciBp cyBFeHByQ29uc3RhbnQgJiYgKChFeHByQ29uc3RhbnQpZXhwcikuSXNPSyAmJgorICAgICAgICAg ICAgICAgICAgICAgZXhwci5UeXBlLmlzU2ltcGxlVHlwZSgpICYmIGRlc3QuaXNTaW1wbGVUeXBl KCkpCisgICAgICAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgICAgIEV4cHJDb25zdGFu dCBjb25zdGFudCA9IChFeHByQ29uc3RhbnQpIGV4cHI7CisgICAgICAgICAgICAgICAgICAgICBp ZiAoKGZ0U3JjID09IEZVTkRUWVBFLkZUX0k0ICYmIChmdERlc3QgPD0gRlVORFRZUEUuRlRfTEFT VE5PTkxPTkcgfHwgZnREZXN0ID09IEZVTkRUWVBFLkZUX1U4KSkgfHwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAoZnRTcmMgPT0gRlVORFRZUEUuRlRfSTggJiYgZnREZXN0ID09IEZVTkRUWVBF LkZUX1U4KSkKKyAgICAgICAgICAgICAgICAgICAgIHsKK0BAIC00MTIsOCArNDEzLDkgQEAgbmFt ZXNwYWNlIE1pY3Jvc29mdC5DU2hhcnAuUnVudGltZUJpbmRlci5TZW1hbnRpY3MKKyAgICAgICAg ICAgICAgICAgICAgIEVycm9yQ29udGV4dC5FcnJvcihkZXN0IGlzIFR5cGVQYXJhbWV0ZXJUeXBl ID8gRXJyb3JDb2RlLkVSUl9UeXBlVmFyQ2FudEJlTnVsbCA6IEVycm9yQ29kZS5FUlJfVmFsdWVD YW50QmVOdWxsLCBkZXN0KTsKKyAgICAgICAgICAgICAgICAgfQorIAorLSAgICAgICAgICAgICAg ICBlbHNlIGlmIChleHByIGlzIEV4cHJNZW1iZXJHcm91cCBtZW1HcnApCisrICAgICAgICAgICAg ICAgIGVsc2UgaWYgKGV4cHIgaXMgRXhwck1lbWJlckdyb3VwKQorICAgICAgICAgICAgICAgICB7 CisrICAgICAgICAgICAgICAgICAgICBFeHByTWVtYmVyR3JvdXAgbWVtR3JwID0gKEV4cHJNZW1i ZXJHcm91cCkgZXhwcjsKKyAgICAgICAgICAgICAgICAgICAgIEJpbmRHcnBDb252ZXJzaW9uKG1l bUdycCwgZGVzdCwgdHJ1ZSk7CisgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg ZWxzZSBpZiAoY2FuQ2FzdChleHByLlR5cGUsIGRlc3QsIGZsYWdzKSkKK0BAIC01NDYsOCArNTQ4 LDkgQEAgbmFtZXNwYWNlIE1pY3Jvc29mdC5DU2hhcnAuUnVudGltZUJpbmRlci5TZW1hbnRpY3MK KyAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICBFcnJvckNv bnRleHQuRXJyb3IoRXJyb3JDb2RlLkVSUl9WYWx1ZUNhbnRCZU51bGwsIGRlc3QpOworICAgICAg ICAgICAgICAgICAgICAgfQorLSAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoZXhwciBpcyBF eHByTWVtYmVyR3JvdXAgbWVtR3JwKQorKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoZXhw ciBpcyBFeHByTWVtYmVyR3JvdXApCisgICAgICAgICAgICAgICAgICAgICB7CisrICAgICAgICAg ICAgICAgICAgICAgICAgRXhwck1lbWJlckdyb3VwIG1lbUdycCA9IChFeHByTWVtYmVyR3JvdXAp ZXhwcjsKKyAgICAgICAgICAgICAgICAgICAgICAgICBCaW5kR3JwQ29udmVyc2lvbihtZW1HcnAs IGRlc3QsIHRydWUpOworICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAg ICAgZWxzZQorQEAgLTEzODcsOCArMTM5MCw5IEBAIG5hbWVzcGFjZSBNaWNyb3NvZnQuQ1NoYXJw LlJ1bnRpbWVCaW5kZXIuU2VtYW50aWNzCisgICAgICAgICAgICAgZm9yICg7OykKKyAgICAgICAg ICAgICB7CisgICAgICAgICAgICAgICAgIERlYnVnLkFzc2VydChwRXhwciAhPSBudWxsKTsKKy0g ICAgICAgICAgICAgICAgaWYgKHBFeHByIGlzIEV4cHJDYWxsIGNhbGwpCisrICAgICAgICAgICAg ICAgIGlmIChwRXhwciBpcyBFeHByQ2FsbCkKKyAgICAgICAgICAgICAgICAgeworKyAgICAgICAg ICAgICAgICAgICAgRXhwckNhbGwgY2FsbCA9IChFeHByQ2FsbClwRXhwcjsKKyAgICAgICAgICAg ICAgICAgICAgIHN3aXRjaCAoY2FsbC5OdWxsYWJsZUNhbGxMaWZ0S2luZCkKKyAgICAgICAgICAg ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIE51bGxhYmxlQ2FsbExp ZnRLaW5kLk5vdExpZnRlZDoKK0BAIC0xNDAyLDggKzE0MDYsOSBAQCBuYW1lc3BhY2UgTWljcm9z b2Z0LkNTaGFycC5SdW50aW1lQmluZGVyLlNlbWFudGljcworICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg ICAgfQorLSAgICAgICAgICAgICAgICBlbHNlIGlmIChwRXhwciBpcyBFeHByVXNlckRlZmluZWRD b252ZXJzaW9uIHVkYykKKysgICAgICAgICAgICAgICAgZWxzZSBpZiAocEV4cHIgaXMgRXhwclVz ZXJEZWZpbmVkQ29udmVyc2lvbikKKyAgICAgICAgICAgICAgICAgeworKyAgICAgICAgICAgICAg ICAgICAgRXhwclVzZXJEZWZpbmVkQ29udmVyc2lvbiB1ZGMgPSAoRXhwclVzZXJEZWZpbmVkQ29u dmVyc2lvbilwRXhwcjsKKyAgICAgICAgICAgICAgICAgICAgIHBFeHByID0gdWRjLlVzZXJEZWZp bmVkQ2FsbDsKKyAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAg ICB9CitkaWZmIC0tZ2l0IGEvc3JjL01pY3Jvc29mdC5DU2hhcnAvc3JjL01pY3Jvc29mdC9DU2hh cnAvUnVudGltZUJpbmRlci9TZW1hbnRpY3MvRVhQUkV4dGVuc2lvbnMuY3MgYi9zcmMvTWljcm9z b2Z0LkNTaGFycC9zcmMvTWljcm9zb2Z0L0NTaGFycC9SdW50aW1lQmluZGVyL1NlbWFudGljcy9F WFBSRXh0ZW5zaW9ucy5jcworaW5kZXggMDc1ZWQyM2ExMS4uNjQwOGRmNGMzNiAxMDA2NDQKKy0t LSBhL3NyYy9NaWNyb3NvZnQuQ1NoYXJwL3NyYy9NaWNyb3NvZnQvQ1NoYXJwL1J1bnRpbWVCaW5k ZXIvU2VtYW50aWNzL0VYUFJFeHRlbnNpb25zLmNzCisrKysgYi9zcmMvTWljcm9zb2Z0LkNTaGFy cC9zcmMvTWljcm9zb2Z0L0NTaGFycC9SdW50aW1lQmluZGVyL1NlbWFudGljcy9FWFBSRXh0ZW5z aW9ucy5jcworQEAgLTMzLDggKzMzLDkgQEAgbmFtZXNwYWNlIE1pY3Jvc29mdC5DU2hhcnAuUnVu dGltZUJpbmRlci5TZW1hbnRpY3MKKyAgICAgICAgICAgICBFeHByIGV4cHJDdXIgPSBleHByOwor ICAgICAgICAgICAgIHdoaWxlIChleHByQ3VyICE9IG51bGwpCisgICAgICAgICAgICAgeworLSAg ICAgICAgICAgICAgICBpZiAoZXhwckN1ciBpcyBFeHByTGlzdCBsaXN0KQorKyAgICAgICAgICAg ICAgICBpZiAoZXhwckN1ciBpcyBFeHByTGlzdCkKKyAgICAgICAgICAgICAgICAgeworKyAgICAg ICAgICAgICAgICAgICAgRXhwckxpc3QgbGlzdCA9IChFeHByTGlzdClleHByQ3VyOworICAgICAg ICAgICAgICAgICAgICAgeWllbGQgcmV0dXJuIGxpc3QuT3B0aW9uYWxFbGVtZW50OworICAgICAg ICAgICAgICAgICAgICAgZXhwckN1ciA9IGxpc3QuT3B0aW9uYWxOZXh0TGlzdE5vZGU7CisgICAg ICAgICAgICAgICAgIH0KK0BAIC02MSwxMiArNjIsMTIgQEAgbmFtZXNwYWNlIE1pY3Jvc29mdC5D U2hhcnAuUnVudGltZUJpbmRlci5TZW1hbnRpY3MKKyAgICAgICAgIH0KKyAgICAgICAgIHB1Ymxp YyBzdGF0aWMgYm9vbCBpc051bGwodGhpcyBFeHByIGV4cHIpCisgICAgICAgICB7CistICAgICAg ICAgICAgcmV0dXJuIGV4cHIgaXMgRXhwckNvbnN0YW50IGNvbnN0YW50ICYmIGNvbnN0YW50Lklz T0sgJiYgKGV4cHIuVHlwZS5mdW5kVHlwZSgpID09IEZVTkRUWVBFLkZUX1JFRikgJiYgY29uc3Rh bnQuVmFsLklzTnVsbFJlZjsKKysgICAgICAgICAgICByZXR1cm4gZXhwciBpcyBFeHByQ29uc3Rh bnQgJiYgKChFeHByQ29uc3RhbnQpZXhwcikuSXNPSyAmJiAoZXhwci5UeXBlLmZ1bmRUeXBlKCkg PT0gRlVORFRZUEUuRlRfUkVGKSAmJiAoKEV4cHJDb25zdGFudClleHByKS5WYWwuSXNOdWxsUmVm OworICAgICAgICAgfQorIAorICAgICAgICAgcHVibGljIHN0YXRpYyBib29sIElzWmVybyh0aGlz IEV4cHIgZXhwcikKKyAgICAgICAgIHsKKy0gICAgICAgICAgICByZXR1cm4gZXhwciBpcyBFeHBy Q29uc3RhbnQgY29uc3RhbnQgJiYgY29uc3RhbnQuSXNPSyAmJiBjb25zdGFudC5Jc1plcm87Cisr ICAgICAgICAgICAgcmV0dXJuIGV4cHIgaXMgRXhwckNvbnN0YW50ICYmICgoRXhwckNvbnN0YW50 KWV4cHIpLklzT0sgJiYgKChFeHByQ29uc3RhbnQpZXhwcikuSXNaZXJvOworICAgICAgICAgfQor IAorICAgICAgICAgcHJpdmF0ZSBzdGF0aWMgRXhwciBHZXRTZXFWYWwodGhpcyBFeHByIGV4cHIp CitkaWZmIC0tZ2l0IGEvc3JjL01pY3Jvc29mdC5DU2hhcnAvc3JjL01pY3Jvc29mdC9DU2hhcnAv UnVudGltZUJpbmRlci9TZW1hbnRpY3MvRXhwbGljaXRDb252ZXJzaW9uLmNzIGIvc3JjL01pY3Jv c29mdC5DU2hhcnAvc3JjL01pY3Jvc29mdC9DU2hhcnAvUnVudGltZUJpbmRlci9TZW1hbnRpY3Mv RXhwbGljaXRDb252ZXJzaW9uLmNzCitpbmRleCBiNTVjZjA3MDc4Li45YWZlYWFjNjIyIDEwMDY0 NAorLS0tIGEvc3JjL01pY3Jvc29mdC5DU2hhcnAvc3JjL01pY3Jvc29mdC9DU2hhcnAvUnVudGlt ZUJpbmRlci9TZW1hbnRpY3MvRXhwbGljaXRDb252ZXJzaW9uLmNzCisrKysgYi9zcmMvTWljcm9z b2Z0LkNTaGFycC9zcmMvTWljcm9zb2Z0L0NTaGFycC9SdW50aW1lQmluZGVyL1NlbWFudGljcy9F eHBsaWNpdENvbnZlcnNpb24uY3MKK0BAIC0yMDcsOCArMjA3LDkgQEAgbmFtZXNwYWNlIE1pY3Jv c29mdC5DU2hhcnAuUnVudGltZUJpbmRlci5TZW1hbnRpY3MKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgVlNGQUlMKCJCaW5kRXhwbGljaXRDb252ZXJzaW9uIGZhaWxlZCB1bmV4cGVjdGVk bHkiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg ICAgICAgICAgICAgICAgICAgIH0KKy0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoX2V4cHJE ZXN0IGlzIEV4cHJVc2VyRGVmaW5lZENvbnZlcnNpb24gdWRjKQorKyAgICAgICAgICAgICAgICAg ICAgICAgIGlmIChfZXhwckRlc3QgaXMgRXhwclVzZXJEZWZpbmVkQ29udmVyc2lvbikKKyAgICAg ICAgICAgICAgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIEV4cHJV c2VyRGVmaW5lZENvbnZlcnNpb24gdWRjID0gKEV4cHJVc2VyRGVmaW5lZENvbnZlcnNpb24pX2V4 cHJEZXN0OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1ZGMuQXJndW1lbnQgPSBfZXhw clNyYzsKKyAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICB9 CitkaWZmIC0tZ2l0IGEvc3JjL01pY3Jvc29mdC5DU2hhcnAvc3JjL01pY3Jvc29mdC9DU2hhcnAv UnVudGltZUJpbmRlci9TZW1hbnRpY3MvRXhwckZhY3RvcnkuY3MgYi9zcmMvTWljcm9zb2Z0LkNT aGFycC9zcmMvTWljcm9zb2Z0L0NTaGFycC9SdW50aW1lQmluZGVyL1NlbWFudGljcy9FeHByRmFj dG9yeS5jcworaW5kZXggMTU5ZjE1N2Y0My4uNGEwZTNjYjQ3OSAxMDA2NDQKKy0tLSBhL3NyYy9N aWNyb3NvZnQuQ1NoYXJwL3NyYy9NaWNyb3NvZnQvQ1NoYXJwL1J1bnRpbWVCaW5kZXIvU2VtYW50 aWNzL0V4cHJGYWN0b3J5LmNzCisrKysgYi9zcmMvTWljcm9zb2Z0LkNTaGFycC9zcmMvTWljcm9z b2Z0L0NTaGFycC9SdW50aW1lQmluZGVyL1NlbWFudGljcy9FeHByRmFjdG9yeS5jcworQEAgLTE3 LDMzICsxNywzMyBAQCBuYW1lc3BhY2UgTWljcm9zb2Z0LkNTaGFycC5SdW50aW1lQmluZGVyLlNl bWFudGljcworICAgICAgICAgICAgIERlYnVnLkFzc2VydChnbG9iYWxTeW1ib2xDb250ZXh0ICE9 IG51bGwpOworICAgICAgICAgICAgIF9nbG9iYWxTeW1ib2xDb250ZXh0ID0gZ2xvYmFsU3ltYm9s Q29udGV4dDsKKyAgICAgICAgIH0KKy0gICAgICAgIHByaXZhdGUgVHlwZU1hbmFnZXIgVHlwZXMg PT4gX2dsb2JhbFN5bWJvbENvbnRleHQuR2V0VHlwZXMoKTsKKysgICAgICAgIHByaXZhdGUgVHlw ZU1hbmFnZXIgVHlwZXMgeyBnZXQgeyByZXR1cm4gX2dsb2JhbFN5bWJvbENvbnRleHQuR2V0VHlw ZXMoKTsgfSB9CisgCistICAgICAgICBwcml2YXRlIEJTWU1NR1IgR2xvYmFsU3ltYm9scyA9PiBf Z2xvYmFsU3ltYm9sQ29udGV4dC5HZXRHbG9iYWxTeW1ib2xzKCk7CisrICAgICAgICBwcml2YXRl IEJTWU1NR1IgR2xvYmFsU3ltYm9scyB7IGdldCB7IHJldHVybiBfZ2xvYmFsU3ltYm9sQ29udGV4 dC5HZXRHbG9iYWxTeW1ib2xzKCk7IH0gfQorIAorLSAgICAgICAgcHVibGljIEV4cHJDYWxsIENy ZWF0ZUNhbGwoRVhQUkZMQUcgZmxhZ3MsIENUeXBlIHR5cGUsIEV4cHIgYXJndW1lbnRzLCBFeHBy TWVtYmVyR3JvdXAgbWVtYmVyR3JvdXAsIE1ldGhXaXRoSW5zdCBtZXRob2QpID0+IAorLSAgICAg ICAgICAgIG5ldyBFeHByQ2FsbCh0eXBlLCBmbGFncywgYXJndW1lbnRzLCBtZW1iZXJHcm91cCwg bWV0aG9kKTsKKysgICAgICAgIHB1YmxpYyBFeHByQ2FsbCBDcmVhdGVDYWxsKEVYUFJGTEFHIGZs YWdzLCBDVHlwZSB0eXBlLCBFeHByIGFyZ3VtZW50cywgRXhwck1lbWJlckdyb3VwIG1lbWJlckdy b3VwLCBNZXRoV2l0aEluc3QgbWV0aG9kKSAKKysgICAgICAgIHsgcmV0dXJuIG5ldyBFeHByQ2Fs bCh0eXBlLCBmbGFncywgYXJndW1lbnRzLCBtZW1iZXJHcm91cCwgbWV0aG9kKTsgfQorIAorLSAg ICAgICAgcHVibGljIEV4cHJGaWVsZCBDcmVhdGVGaWVsZChDVHlwZSB0eXBlLCBFeHByIG9wdGlv bmFsT2JqZWN0LCBGaWVsZFdpdGhUeXBlIGZpZWxkLCBib29sIGlzTFZhbHVlKSA9PiAKKy0gICAg ICAgICAgICBuZXcgRXhwckZpZWxkKHR5cGUsIG9wdGlvbmFsT2JqZWN0LCBmaWVsZCwgaXNMVmFs dWUpOworKyAgICAgICAgcHVibGljIEV4cHJGaWVsZCBDcmVhdGVGaWVsZChDVHlwZSB0eXBlLCBF eHByIG9wdGlvbmFsT2JqZWN0LCBGaWVsZFdpdGhUeXBlIGZpZWxkLCBib29sIGlzTFZhbHVlKSAK KysgICAgICAgIHsgcmV0dXJuIG5ldyBFeHByRmllbGQodHlwZSwgb3B0aW9uYWxPYmplY3QsIGZp ZWxkLCBpc0xWYWx1ZSk7IH0KKyAKKy0gICAgICAgIHB1YmxpYyBFeHByRnVuY1B0ciBDcmVhdGVG dW5jdGlvblBvaW50ZXIoRVhQUkZMQUcgZmxhZ3MsIENUeXBlIHR5cGUsIEV4cHIgb2JqLCBNZXRo V2l0aEluc3QgbWV0aG9kKSA9PiAKKy0gICAgICAgICAgICBuZXcgRXhwckZ1bmNQdHIodHlwZSwg ZmxhZ3MsIG9iaiwgbWV0aG9kKTsKKysgICAgICAgIHB1YmxpYyBFeHByRnVuY1B0ciBDcmVhdGVG dW5jdGlvblBvaW50ZXIoRVhQUkZMQUcgZmxhZ3MsIENUeXBlIHR5cGUsIEV4cHIgb2JqLCBNZXRo V2l0aEluc3QgbWV0aG9kKQorKyAgICAgICAgeyByZXR1cm4gbmV3IEV4cHJGdW5jUHRyKHR5cGUs IGZsYWdzLCBvYmosIG1ldGhvZCk7IH0KKyAKKy0gICAgICAgIHB1YmxpYyBFeHByQXJyYXlJbml0 IENyZWF0ZUFycmF5SW5pdChDVHlwZSB0eXBlLCBFeHByIGFyZ3VtZW50cywgRXhwciBhcmd1bWVu dERpbWVuc2lvbnMsIGludFtdIGRpbVNpemVzLCBpbnQgZGltU2l6ZSkgPT4gCistICAgICAgICAg ICAgbmV3IEV4cHJBcnJheUluaXQodHlwZSwgYXJndW1lbnRzLCBhcmd1bWVudERpbWVuc2lvbnMs IGRpbVNpemVzLCBkaW1TaXplKTsKKysgICAgICAgIHB1YmxpYyBFeHByQXJyYXlJbml0IENyZWF0 ZUFycmF5SW5pdChDVHlwZSB0eXBlLCBFeHByIGFyZ3VtZW50cywgRXhwciBhcmd1bWVudERpbWVu c2lvbnMsIGludFtdIGRpbVNpemVzLCBpbnQgZGltU2l6ZSkKKysgICAgICAgIHsgcmV0dXJuIG5l dyBFeHByQXJyYXlJbml0KHR5cGUsIGFyZ3VtZW50cywgYXJndW1lbnREaW1lbnNpb25zLCBkaW1T aXplcywgZGltU2l6ZSk7IH0KKyAKKy0gICAgICAgIHB1YmxpYyBFeHByUHJvcGVydHkgQ3JlYXRl UHJvcGVydHkoQ1R5cGUgdHlwZSwgRXhwciBvcHRpb25hbE9iamVjdCkgPT4gCistICAgICAgICAg ICAgQ3JlYXRlUHJvcGVydHkodHlwZSwgbnVsbCwgbnVsbCwgQ3JlYXRlTWVtR3JvdXAob3B0aW9u YWxPYmplY3QsIG5ldyBNZXRoUHJvcFdpdGhJbnN0KCkpLCBudWxsLCBudWxsKTsKKysgICAgICAg IHB1YmxpYyBFeHByUHJvcGVydHkgQ3JlYXRlUHJvcGVydHkoQ1R5cGUgdHlwZSwgRXhwciBvcHRp b25hbE9iamVjdCkKKysgICAgICAgIHsgcmV0dXJuIENyZWF0ZVByb3BlcnR5KHR5cGUsIG51bGws IG51bGwsIENyZWF0ZU1lbUdyb3VwKG9wdGlvbmFsT2JqZWN0LCBuZXcgTWV0aFByb3BXaXRoSW5z dCgpKSwgbnVsbCwgbnVsbCk7IH0KKyAKKy0gICAgICAgIHB1YmxpYyBFeHByUHJvcGVydHkgQ3Jl YXRlUHJvcGVydHkoQ1R5cGUgdHlwZSwgRXhwciBvcHRpb25hbE9iamVjdFRocm91Z2gsIEV4cHIg YXJndW1lbnRzLCBFeHByTWVtYmVyR3JvdXAgbWVtYmVyR3JvdXAsIFByb3BXaXRoVHlwZSBwcm9w ZXJ0eSwgTWV0aFdpdGhUeXBlIHNldE1ldGhvZCkgPT4gCistICAgICAgICAgICAgbmV3IEV4cHJQ cm9wZXJ0eSh0eXBlLCBvcHRpb25hbE9iamVjdFRocm91Z2gsIGFyZ3VtZW50cywgbWVtYmVyR3Jv dXAsIHByb3BlcnR5LCBzZXRNZXRob2QpOworKyAgICAgICAgcHVibGljIEV4cHJQcm9wZXJ0eSBD cmVhdGVQcm9wZXJ0eShDVHlwZSB0eXBlLCBFeHByIG9wdGlvbmFsT2JqZWN0VGhyb3VnaCwgRXhw ciBhcmd1bWVudHMsIEV4cHJNZW1iZXJHcm91cCBtZW1iZXJHcm91cCwgUHJvcFdpdGhUeXBlIHBy b3BlcnR5LCBNZXRoV2l0aFR5cGUgc2V0TWV0aG9kKQorKyAgICAgICAgeyByZXR1cm4gbmV3IEV4 cHJQcm9wZXJ0eSh0eXBlLCBvcHRpb25hbE9iamVjdFRocm91Z2gsIGFyZ3VtZW50cywgbWVtYmVy R3JvdXAsIHByb3BlcnR5LCBzZXRNZXRob2QpOyB9CisgCistICAgICAgICBwdWJsaWMgRXhwckV2 ZW50IENyZWF0ZUV2ZW50KENUeXBlIHR5cGUsIEV4cHIgb3B0aW9uYWxPYmplY3QsIEV2ZW50V2l0 aFR5cGUgZXZlbnRXaXRoVHlwZSkgPT4gCistICAgICAgICAgICAgbmV3IEV4cHJFdmVudCh0eXBl LCBvcHRpb25hbE9iamVjdCwgZXZlbnRXaXRoVHlwZSk7CisrICAgICAgICBwdWJsaWMgRXhwckV2 ZW50IENyZWF0ZUV2ZW50KENUeXBlIHR5cGUsIEV4cHIgb3B0aW9uYWxPYmplY3QsIEV2ZW50V2l0 aFR5cGUgZXZlbnRXaXRoVHlwZSkgIAorKyAgICAgICAgeyByZXR1cm4gbmV3IEV4cHJFdmVudCh0 eXBlLCBvcHRpb25hbE9iamVjdCwgZXZlbnRXaXRoVHlwZSk7IH0KKyAKKy0gICAgICAgIHB1Ymxp YyBFeHByTWVtYmVyR3JvdXAgQ3JlYXRlTWVtR3JvdXAoRVhQUkZMQUcgZmxhZ3MsIE5hbWUgbmFt ZSwgVHlwZUFycmF5IHR5cGVBcmdzLCBTWU1LSU5EIHN5bUtpbmQsIENUeXBlIHBhcmVudFR5cGUs IE1ldGhvZE9yUHJvcGVydHlTeW1ib2wgbWVtYmVyU3ltYm9sLCBFeHByIG9iaiwgQ01lbWJlckxv b2t1cFJlc3VsdHMgbWVtYmVyTG9va3VwUmVzdWx0cykgPT4gCistICAgICAgICAgICAgbmV3IEV4 cHJNZW1iZXJHcm91cChUeXBlcy5HZXRNZXRoR3JwVHlwZSgpLCBmbGFncywgbmFtZSwgdHlwZUFy Z3MsIHN5bUtpbmQsIHBhcmVudFR5cGUsIG1lbWJlclN5bWJvbCwgb2JqLCBtZW1iZXJMb29rdXBS ZXN1bHRzKTsKKysgICAgICAgIHB1YmxpYyBFeHByTWVtYmVyR3JvdXAgQ3JlYXRlTWVtR3JvdXAo RVhQUkZMQUcgZmxhZ3MsIE5hbWUgbmFtZSwgVHlwZUFycmF5IHR5cGVBcmdzLCBTWU1LSU5EIHN5 bUtpbmQsIENUeXBlIHBhcmVudFR5cGUsIE1ldGhvZE9yUHJvcGVydHlTeW1ib2wgbWVtYmVyU3lt Ym9sLCBFeHByIG9iaiwgQ01lbWJlckxvb2t1cFJlc3VsdHMgbWVtYmVyTG9va3VwUmVzdWx0cykK KysgICAgICAgIHsgcmV0dXJuIG5ldyBFeHByTWVtYmVyR3JvdXAoVHlwZXMuR2V0TWV0aEdycFR5 cGUoKSwgZmxhZ3MsIG5hbWUsIHR5cGVBcmdzLCBzeW1LaW5kLCBwYXJlbnRUeXBlLCBtZW1iZXJT eW1ib2wsIG9iaiwgbWVtYmVyTG9va3VwUmVzdWx0cyk7IH0KKyAKKyAgICAgICAgIHB1YmxpYyBF eHByTWVtYmVyR3JvdXAgQ3JlYXRlTWVtR3JvdXAoRXhwciBvYmosIE1ldGhQcm9wV2l0aEluc3Qg bWV0aG9kKQorICAgICAgICAgeworQEAgLTU3LDI1ICs1NywyNSBAQCBuYW1lc3BhY2UgTWljcm9z b2Z0LkNTaGFycC5SdW50aW1lQmluZGVyLlNlbWFudGljcworICAgICAgICAgICAgICAgICBvYmos IG5ldyBDTWVtYmVyTG9va3VwUmVzdWx0cyhHbG9iYWxTeW1ib2xzLkFsbG9jUGFyYW1zKDEsIG5l d1tdIHt0eXBlfSksIG5hbWUpKTsKKyAgICAgICAgIH0KKyAKKy0gICAgICAgIHB1YmxpYyBFeHBy VXNlckRlZmluZWRDb252ZXJzaW9uIENyZWF0ZVVzZXJEZWZpbmVkQ29udmVyc2lvbihFeHByIGFy ZywgRXhwciBjYWxsLCBNZXRoV2l0aEluc3QgbWV0aG9kKSA9PiAKKy0gICAgICAgICAgICBuZXcg RXhwclVzZXJEZWZpbmVkQ29udmVyc2lvbihhcmcsIGNhbGwsIG1ldGhvZCk7CisrICAgICAgICBw dWJsaWMgRXhwclVzZXJEZWZpbmVkQ29udmVyc2lvbiBDcmVhdGVVc2VyRGVmaW5lZENvbnZlcnNp b24oRXhwciBhcmcsIEV4cHIgY2FsbCwgTWV0aFdpdGhJbnN0IG1ldGhvZCkKKysgICAgICAgIHsg cmV0dXJuIG5ldyBFeHByVXNlckRlZmluZWRDb252ZXJzaW9uKGFyZywgY2FsbCwgbWV0aG9kKTsg fQorIAorICAgICAgICAgcHVibGljIEV4cHJDYXN0IENyZWF0ZUNhc3QoQ1R5cGUgdHlwZSwgRXhw ciBhcmd1bWVudCkgPT4gQ3JlYXRlQ2FzdCgwLCBDcmVhdGVDbGFzcyh0eXBlKSwgYXJndW1lbnQp OworIAorLSAgICAgICAgcHVibGljIEV4cHJDYXN0IENyZWF0ZUNhc3QoRVhQUkZMQUcgZmxhZ3Ms IEV4cHJDbGFzcyB0eXBlLCBFeHByIGFyZ3VtZW50KSA9PiBuZXcgRXhwckNhc3QoZmxhZ3MsIHR5 cGUsIGFyZ3VtZW50KTsKKysgICAgICAgIHB1YmxpYyBFeHByQ2FzdCBDcmVhdGVDYXN0KEVYUFJG TEFHIGZsYWdzLCBFeHByQ2xhc3MgdHlwZSwgRXhwciBhcmd1bWVudCkgeyByZXR1cm4gbmV3IEV4 cHJDYXN0KGZsYWdzLCB0eXBlLCBhcmd1bWVudCk7IH0KKyAKKy0gICAgICAgIHB1YmxpYyBFeHBy UmV0dXJuIENyZWF0ZVJldHVybihFeHByIG9wdGlvbmFsT2JqZWN0KSA9PiBuZXcgRXhwclJldHVy bihvcHRpb25hbE9iamVjdCk7CisrICAgICAgICBwdWJsaWMgRXhwclJldHVybiBDcmVhdGVSZXR1 cm4oRXhwciBvcHRpb25hbE9iamVjdCkgeyByZXR1cm4gbmV3IEV4cHJSZXR1cm4ob3B0aW9uYWxP YmplY3QpOyB9CisgCistICAgICAgICBwdWJsaWMgRXhwckxvY2FsIENyZWF0ZUxvY2FsKExvY2Fs VmFyaWFibGVTeW1ib2wgbG9jYWwpID0+IG5ldyBFeHByTG9jYWwobG9jYWwpOworKyAgICAgICAg cHVibGljIEV4cHJMb2NhbCBDcmVhdGVMb2NhbChMb2NhbFZhcmlhYmxlU3ltYm9sIGxvY2FsKSB7 IHJldHVybiBuZXcgRXhwckxvY2FsKGxvY2FsKTsgfQorIAorLSAgICAgICAgcHVibGljIEV4cHJC b3VuZExhbWJkYSBDcmVhdGVBbm9ueW1vdXNNZXRob2QoQWdncmVnYXRlVHlwZSBkZWxlZ2F0ZVR5 cGUsIFNjb3BlIGFyZ3VtZW50U2NvcGUpID0+IAorLSAgICAgICAgICAgIG5ldyBFeHByQm91bmRM YW1iZGEoZGVsZWdhdGVUeXBlLCBhcmd1bWVudFNjb3BlKTsKKysgICAgICAgIHB1YmxpYyBFeHBy Qm91bmRMYW1iZGEgQ3JlYXRlQW5vbnltb3VzTWV0aG9kKEFnZ3JlZ2F0ZVR5cGUgZGVsZWdhdGVU eXBlLCBTY29wZSBhcmd1bWVudFNjb3BlKQorKyAgICAgICAgeyByZXR1cm4gbmV3IEV4cHJCb3Vu ZExhbWJkYShkZWxlZ2F0ZVR5cGUsIGFyZ3VtZW50U2NvcGUpOyB9CisgCistICAgICAgICBwdWJs aWMgRXhwckhvaXN0ZWRMb2NhbEV4cHIgQ3JlYXRlSG9pc3RlZExvY2FsSW5FeHByZXNzaW9uKCkg PT4gCistICAgICAgICAgICAgbmV3IEV4cHJIb2lzdGVkTG9jYWxFeHByKFR5cGVzLkdldE9wdFBy ZWRlZkFnZyhQcmVkZWZpbmVkVHlwZS5QVF9FWFBSRVNTSU9OKS5nZXRUaGlzVHlwZSgpKTsKKysg ICAgICAgIHB1YmxpYyBFeHBySG9pc3RlZExvY2FsRXhwciBDcmVhdGVIb2lzdGVkTG9jYWxJbkV4 cHJlc3Npb24oKQorKyAgICAgICAgeyByZXR1cm4gbmV3IEV4cHJIb2lzdGVkTG9jYWxFeHByKFR5 cGVzLkdldE9wdFByZWRlZkFnZyhQcmVkZWZpbmVkVHlwZS5QVF9FWFBSRVNTSU9OKS5nZXRUaGlz VHlwZSgpKTsgfQorIAorLSAgICAgICAgcHVibGljIEV4cHJNZXRob2RJbmZvIENyZWF0ZU1ldGhv ZEluZm8oTWV0aFByb3BXaXRoSW5zdCBtd2kpID0+IAorLSAgICAgICAgICAgIENyZWF0ZU1ldGhv ZEluZm8obXdpLk1ldGgoKSwgbXdpLkdldFR5cGUoKSwgbXdpLlR5cGVBcmdzKTsKKysgICAgICAg IHB1YmxpYyBFeHByTWV0aG9kSW5mbyBDcmVhdGVNZXRob2RJbmZvKE1ldGhQcm9wV2l0aEluc3Qg bXdpKQorKyAgICAgICAgeyByZXR1cm4gQ3JlYXRlTWV0aG9kSW5mbyhtd2kuTWV0aCgpLCBtd2ku R2V0VHlwZSgpLCBtd2kuVHlwZUFyZ3MpOyB9CisgCisgICAgICAgICBwdWJsaWMgRXhwck1ldGhv ZEluZm8gQ3JlYXRlTWV0aG9kSW5mbyhNZXRob2RTeW1ib2wgbWV0aG9kLCBBZ2dyZWdhdGVUeXBl IG1ldGhvZFR5cGUsIFR5cGVBcnJheSBtZXRob2RQYXJhbWV0ZXJzKQorICAgICAgICAgeworQEAg LTg0LDE5ICs4NCwxOSBAQCBuYW1lc3BhY2UgTWljcm9zb2Z0LkNTaGFycC5SdW50aW1lQmluZGVy LlNlbWFudGljcworICAgICAgICAgICAgICAgICBtZXRob2QsIG1ldGhvZFR5cGUsIG1ldGhvZFBh cmFtZXRlcnMpOworICAgICAgICAgfQorIAorLSAgICAgICAgcHVibGljIEV4cHJQcm9wZXJ0eUlu Zm8gQ3JlYXRlUHJvcGVydHlJbmZvKFByb3BlcnR5U3ltYm9sIHByb3AsIEFnZ3JlZ2F0ZVR5cGUg cHJvcGVydHlUeXBlKSA9PiAKKy0gICAgICAgICAgICBuZXcgRXhwclByb3BlcnR5SW5mbyhUeXBl cy5HZXRPcHRQcmVkZWZBZ2coUHJlZGVmaW5lZFR5cGUuUFRfUFJPUEVSVFlJTkZPKS5nZXRUaGlz VHlwZSgpLCBwcm9wLCBwcm9wZXJ0eVR5cGUpOworKyAgICAgICAgcHVibGljIEV4cHJQcm9wZXJ0 eUluZm8gQ3JlYXRlUHJvcGVydHlJbmZvKFByb3BlcnR5U3ltYm9sIHByb3AsIEFnZ3JlZ2F0ZVR5 cGUgcHJvcGVydHlUeXBlKQorKyAgICAgICAgeyByZXR1cm4gbmV3IEV4cHJQcm9wZXJ0eUluZm8o VHlwZXMuR2V0T3B0UHJlZGVmQWdnKFByZWRlZmluZWRUeXBlLlBUX1BST1BFUlRZSU5GTykuZ2V0 VGhpc1R5cGUoKSwgcHJvcCwgcHJvcGVydHlUeXBlKTsgfQorIAorLSAgICAgICAgcHVibGljIEV4 cHJGaWVsZEluZm8gQ3JlYXRlRmllbGRJbmZvKEZpZWxkU3ltYm9sIGZpZWxkLCBBZ2dyZWdhdGVU eXBlIGZpZWxkVHlwZSkgPT4gCistICAgICAgICAgICAgbmV3IEV4cHJGaWVsZEluZm8oZmllbGQs IGZpZWxkVHlwZSwgVHlwZXMuR2V0T3B0UHJlZGVmQWdnKFByZWRlZmluZWRUeXBlLlBUX0ZJRUxE SU5GTykuZ2V0VGhpc1R5cGUoKSk7CisrICAgICAgICBwdWJsaWMgRXhwckZpZWxkSW5mbyBDcmVh dGVGaWVsZEluZm8oRmllbGRTeW1ib2wgZmllbGQsIEFnZ3JlZ2F0ZVR5cGUgZmllbGRUeXBlKQor KyAgICAgICAgeyByZXR1cm4gbmV3IEV4cHJGaWVsZEluZm8oZmllbGQsIGZpZWxkVHlwZSwgVHlw ZXMuR2V0T3B0UHJlZGVmQWdnKFByZWRlZmluZWRUeXBlLlBUX0ZJRUxESU5GTykuZ2V0VGhpc1R5 cGUoKSk7IH0KKyAKKy0gICAgICAgIHByaXZhdGUgRXhwclR5cGVPZiBDcmVhdGVUeXBlT2YoRXhw ckNsYXNzIHNvdXJjZVR5cGUpID0+IAorLSAgICAgICAgICAgIG5ldyBFeHByVHlwZU9mKFR5cGVz LkdldFJlcVByZWRlZkFnZyhQcmVkZWZpbmVkVHlwZS5QVF9UWVBFKS5nZXRUaGlzVHlwZSgpLCBz b3VyY2VUeXBlKTsKKysgICAgICAgIHByaXZhdGUgRXhwclR5cGVPZiBDcmVhdGVUeXBlT2YoRXhw ckNsYXNzIHNvdXJjZVR5cGUpCisrICAgICAgICB7IHJldHVybiBuZXcgRXhwclR5cGVPZihUeXBl cy5HZXRSZXFQcmVkZWZBZ2coUHJlZGVmaW5lZFR5cGUuUFRfVFlQRSkuZ2V0VGhpc1R5cGUoKSwg c291cmNlVHlwZSk7IH0KKyAKKy0gICAgICAgIHB1YmxpYyBFeHByVHlwZU9mIENyZWF0ZVR5cGVP ZihDVHlwZSBzb3VyY2VUeXBlKSA9PiBDcmVhdGVUeXBlT2YoQ3JlYXRlQ2xhc3Moc291cmNlVHlw ZSkpOworKyAgICAgICAgcHVibGljIEV4cHJUeXBlT2YgQ3JlYXRlVHlwZU9mKENUeXBlIHNvdXJj ZVR5cGUpIHsgcmV0dXJuIENyZWF0ZVR5cGVPZihDcmVhdGVDbGFzcyhzb3VyY2VUeXBlKSk7IH0K KyAKKy0gICAgICAgIHB1YmxpYyBFeHByVXNlckxvZ2ljYWxPcCBDcmVhdGVVc2VyTG9nT3AoQ1R5 cGUgdHlwZSwgRXhwciB0cnVlRmFsc2VDYWxsLCBFeHByQ2FsbCBvcGVyYXRvckNhbGwpID0+IAor LSAgICAgICAgICAgIG5ldyBFeHByVXNlckxvZ2ljYWxPcCh0eXBlLCB0cnVlRmFsc2VDYWxsLCBv cGVyYXRvckNhbGwpOworKyAgICAgICAgcHVibGljIEV4cHJVc2VyTG9naWNhbE9wIENyZWF0ZVVz ZXJMb2dPcChDVHlwZSB0eXBlLCBFeHByIHRydWVGYWxzZUNhbGwsIEV4cHJDYWxsIG9wZXJhdG9y Q2FsbCkKKysgICAgICAgIHsgcmV0dXJuIG5ldyBFeHByVXNlckxvZ2ljYWxPcCh0eXBlLCB0cnVl RmFsc2VDYWxsLCBvcGVyYXRvckNhbGwpOyB9CisgCisgICAgICAgICBwdWJsaWMgRXhwclVzZXJM b2dpY2FsT3AgQ3JlYXRlVXNlckxvZ09wRXJyb3IoQ1R5cGUgdHlwZSwgRXhwciB0cnVlRmFsc2VD YWxsLCBFeHByQ2FsbCBvcGVyYXRvckNhbGwpCisgICAgICAgICB7CitAQCAtMTA1LDE2ICsxMDUs MTYgQEAgbmFtZXNwYWNlIE1pY3Jvc29mdC5DU2hhcnAuUnVudGltZUJpbmRlci5TZW1hbnRpY3MK KyAgICAgICAgICAgICByZXR1cm4gcnZhbDsKKyAgICAgICAgIH0KKyAKKy0gICAgICAgIHB1Ymxp YyBFeHByQ29uY2F0IENyZWF0ZUNvbmNhdChFeHByIGZpcnN0LCBFeHByIHNlY29uZCkgPT4gbmV3 IEV4cHJDb25jYXQoZmlyc3QsIHNlY29uZCk7CisrICAgICAgICBwdWJsaWMgRXhwckNvbmNhdCBD cmVhdGVDb25jYXQoRXhwciBmaXJzdCwgRXhwciBzZWNvbmQpIHsgcmV0dXJuIG5ldyBFeHByQ29u Y2F0KGZpcnN0LCBzZWNvbmQpOyB9CisgCistICAgICAgICBwdWJsaWMgRXhwckNvbnN0YW50IENy ZWF0ZVN0cmluZ0NvbnN0YW50KHN0cmluZyBzdHIpID0+IAorLSAgICAgICAgICAgIENyZWF0ZUNv bnN0YW50KFR5cGVzLkdldFJlcVByZWRlZkFnZyhQcmVkZWZpbmVkVHlwZS5QVF9TVFJJTkcpLmdl dFRoaXNUeXBlKCksIENvbnN0VmFsLkdldChzdHIpKTsKKysgICAgICAgIHB1YmxpYyBFeHByQ29u c3RhbnQgQ3JlYXRlU3RyaW5nQ29uc3RhbnQoc3RyaW5nIHN0cikKKysgICAgICAgIHsgcmV0dXJu IENyZWF0ZUNvbnN0YW50KFR5cGVzLkdldFJlcVByZWRlZkFnZyhQcmVkZWZpbmVkVHlwZS5QVF9T VFJJTkcpLmdldFRoaXNUeXBlKCksIENvbnN0VmFsLkdldChzdHIpKTsgfQorIAorLSAgICAgICAg cHVibGljIEV4cHJNdWx0aUdldCBDcmVhdGVNdWx0aUdldChFWFBSRkxBRyBmbGFncywgQ1R5cGUg dHlwZSwgRXhwck11bHRpIG11bHRpKSA9PiAKKy0gICAgICAgICAgICBuZXcgRXhwck11bHRpR2V0 KHR5cGUsIGZsYWdzLCBtdWx0aSk7CisrICAgICAgICBwdWJsaWMgRXhwck11bHRpR2V0IENyZWF0 ZU11bHRpR2V0KEVYUFJGTEFHIGZsYWdzLCBDVHlwZSB0eXBlLCBFeHByTXVsdGkgbXVsdGkpCisr ICAgICAgICB7IHJldHVybiBuZXcgRXhwck11bHRpR2V0KHR5cGUsIGZsYWdzLCBtdWx0aSk7IH0K KyAKKy0gICAgICAgIHB1YmxpYyBFeHByTXVsdGkgQ3JlYXRlTXVsdGkoRVhQUkZMQUcgZmxhZ3Ms IENUeXBlIHR5cGUsIEV4cHIgbGVmdCwgRXhwciBvcCkgPT4gCistICAgICAgICAgICAgbmV3IEV4 cHJNdWx0aSh0eXBlLCBmbGFncywgbGVmdCwgb3ApOworKyAgICAgICAgcHVibGljIEV4cHJNdWx0 aSBDcmVhdGVNdWx0aShFWFBSRkxBRyBmbGFncywgQ1R5cGUgdHlwZSwgRXhwciBsZWZ0LCBFeHBy IG9wKQorKyAgICAgICAgeyByZXR1cm4gbmV3IEV4cHJNdWx0aSh0eXBlLCBmbGFncywgbGVmdCwg b3ApOyB9CisgCisgICAgICAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworICAgICAgICAgLy8K K0BAIC0xMjQsNyArMTI0LDcgQEAgbmFtZXNwYWNlIE1pY3Jvc29mdC5DU2hhcnAuUnVudGltZUJp bmRlci5TZW1hbnRpY3MKKyAgICAgICAgIC8vCisgICAgICAgICAvLyBUaGlzIHJldHVybnMgYSBu dWxsIGZvciByZWZlcmVuY2UgdHlwZXMgYW5kIGFuIEVYUFJaRVJPSU5JVCBmb3IgYWxsIG90aGVy cy4KKyAKKy0gICAgICAgIHB1YmxpYyBFeHByIENyZWF0ZVplcm9Jbml0KENUeXBlIHR5cGUpID0+ IENyZWF0ZVplcm9Jbml0KENyZWF0ZUNsYXNzKHR5cGUpLCBudWxsLCBmYWxzZSk7CisrICAgICAg ICBwdWJsaWMgRXhwciBDcmVhdGVaZXJvSW5pdChDVHlwZSB0eXBlKSB7IHJldHVybiBDcmVhdGVa ZXJvSW5pdChDcmVhdGVDbGFzcyh0eXBlKSwgbnVsbCwgZmFsc2UpOyB9CisgCisgICAgICAgICBw cml2YXRlIEV4cHIgQ3JlYXRlWmVyb0luaXQoRXhwckNsYXNzIHR5cGVFeHByLCBFeHByIG9yaWdp bmFsQ29uc3RydWN0b3JDYWxsLCBib29sIGlzQ29uc3RydWN0b3IpCisgICAgICAgICB7CitAQCAt MTg3LDE1ICsxODcsMTUgQEAgbmFtZXNwYWNlIE1pY3Jvc29mdC5DU2hhcnAuUnVudGltZUJpbmRl ci5TZW1hbnRpY3MKKyAgICAgICAgICAgICByZXR1cm4gbmV3IEV4cHJaZXJvSW5pdCh0eXBlLCBv cmlnaW5hbENvbnN0cnVjdG9yQ2FsbCwgaXNDb25zdHJ1Y3RvciwgaXNFcnJvcik7CisgICAgICAg ICB9CisgCistICAgICAgICBwdWJsaWMgRXhwckNvbnN0YW50IENyZWF0ZUNvbnN0YW50KENUeXBl IHR5cGUsIENvbnN0VmFsIGNvbnN0VmFsKSA9PiBuZXcgRXhwckNvbnN0YW50KHR5cGUsIGNvbnN0 VmFsKTsKKysgICAgICAgIHB1YmxpYyBFeHByQ29uc3RhbnQgQ3JlYXRlQ29uc3RhbnQoQ1R5cGUg dHlwZSwgQ29uc3RWYWwgY29uc3RWYWwpIHsgcmV0dXJuIG5ldyBFeHByQ29uc3RhbnQodHlwZSwg Y29uc3RWYWwpOyB9CisgCistICAgICAgICBwdWJsaWMgRXhwckNvbnN0YW50IENyZWF0ZUludGVn ZXJDb25zdGFudChpbnQgeCkgPT4KKy0gICAgICAgICAgICBDcmVhdGVDb25zdGFudChUeXBlcy5H ZXRSZXFQcmVkZWZBZ2coUHJlZGVmaW5lZFR5cGUuUFRfSU5UKS5nZXRUaGlzVHlwZSgpLCBDb25z dFZhbC5HZXQoeCkpOworKyAgICAgICAgcHVibGljIEV4cHJDb25zdGFudCBDcmVhdGVJbnRlZ2Vy Q29uc3RhbnQoaW50IHgpCisrICAgICAgICB7IHJldHVybiBDcmVhdGVDb25zdGFudChUeXBlcy5H ZXRSZXFQcmVkZWZBZ2coUHJlZGVmaW5lZFR5cGUuUFRfSU5UKS5nZXRUaGlzVHlwZSgpLCBDb25z dFZhbC5HZXQoeCkpOyB9CisgCistICAgICAgICBwdWJsaWMgRXhwckNvbnN0YW50IENyZWF0ZUJv b2xDb25zdGFudChib29sIGIpID0+IAorLSAgICAgICAgICAgIENyZWF0ZUNvbnN0YW50KFR5cGVz LkdldFJlcVByZWRlZkFnZyhQcmVkZWZpbmVkVHlwZS5QVF9CT09MKS5nZXRUaGlzVHlwZSgpLCBD b25zdFZhbC5HZXQoYikpOworKyAgICAgICAgcHVibGljIEV4cHJDb25zdGFudCBDcmVhdGVCb29s Q29uc3RhbnQoYm9vbCBiKQorKyAgICAgICAgeyByZXR1cm4gQ3JlYXRlQ29uc3RhbnQoVHlwZXMu R2V0UmVxUHJlZGVmQWdnKFByZWRlZmluZWRUeXBlLlBUX0JPT0wpLmdldFRoaXNUeXBlKCksIENv bnN0VmFsLkdldChiKSk7IH0KKyAKKy0gICAgICAgIHB1YmxpYyBFeHByQmxvY2sgQ3JlYXRlQmxv Y2soRXhwclN0YXRlbWVudCBwT3B0aW9uYWxTdGF0ZW1lbnRzKSA9PiBuZXcgRXhwckJsb2NrKHBP cHRpb25hbFN0YXRlbWVudHMpOworKyAgICAgICAgcHVibGljIEV4cHJCbG9jayBDcmVhdGVCbG9j ayhFeHByU3RhdGVtZW50IHBPcHRpb25hbFN0YXRlbWVudHMpIHsgcmV0dXJuIG5ldyBFeHByQmxv Y2socE9wdGlvbmFsU3RhdGVtZW50cyk7IH0KKyAKKyAgICAgICAgIHB1YmxpYyBFeHByQXJyYXlJ bmRleCBDcmVhdGVBcnJheUluZGV4KEV4cHIgYXJyYXksIEV4cHIgaW5kZXgpCisgICAgICAgICB7 CitAQCAtMjEyLDExICsyMTIsMTEgQEAgbmFtZXNwYWNlIE1pY3Jvc29mdC5DU2hhcnAuUnVudGlt ZUJpbmRlci5TZW1hbnRpY3MKKyAgICAgICAgICAgICByZXR1cm4gbmV3IEV4cHJBcnJheUluZGV4 KHR5cGUsIGFycmF5LCBpbmRleCk7CisgICAgICAgICB9CisgCistICAgICAgICBwdWJsaWMgRXhw ckJpbk9wIENyZWF0ZUJpbm9wKEV4cHJlc3Npb25LaW5kIGV4cHJLaW5kLCBDVHlwZSB0eXBlLCBF eHByIGxlZnQsIEV4cHIgcmlnaHQpID0+IAorLSAgICAgICAgICAgIG5ldyBFeHByQmluT3AoZXhw cktpbmQsIHR5cGUsIGxlZnQsIHJpZ2h0KTsKKysgICAgICAgIHB1YmxpYyBFeHByQmluT3AgQ3Jl YXRlQmlub3AoRXhwcmVzc2lvbktpbmQgZXhwcktpbmQsIENUeXBlIHR5cGUsIEV4cHIgbGVmdCwg RXhwciByaWdodCkgCisrICAgICAgICB7IHJldHVybiBuZXcgRXhwckJpbk9wKGV4cHJLaW5kLCB0 eXBlLCBsZWZ0LCByaWdodCk7IH0KKyAKKy0gICAgICAgIHB1YmxpYyBFeHByVW5hcnlPcCBDcmVh dGVVbmFyeU9wKEV4cHJlc3Npb25LaW5kIGV4cHJLaW5kLCBDVHlwZSB0eXBlLCBFeHByIG9wZXJh bmQpID0+IAorLSAgICAgICAgICAgIG5ldyBFeHByVW5hcnlPcChleHByS2luZCwgdHlwZSwgb3Bl cmFuZCk7CisrICAgICAgICBwdWJsaWMgRXhwclVuYXJ5T3AgQ3JlYXRlVW5hcnlPcChFeHByZXNz aW9uS2luZCBleHByS2luZCwgQ1R5cGUgdHlwZSwgRXhwciBvcGVyYW5kKQorKyAgICAgICAgeyBy ZXR1cm4gbmV3IEV4cHJVbmFyeU9wKGV4cHJLaW5kLCB0eXBlLCBvcGVyYW5kKTsgfQorIAorICAg ICAgICAgcHVibGljIEV4cHJPcGVyYXRvciBDcmVhdGVPcGVyYXRvcihFeHByZXNzaW9uS2luZCBl eHByS2luZCwgQ1R5cGUgdHlwZSwgRXhwciBhcmcxLCBFeHByIGFyZzIpCisgICAgICAgICB7CitA QCAtMjI4LDEyICsyMjgsMTIgQEAgbmFtZXNwYWNlIE1pY3Jvc29mdC5DU2hhcnAuUnVudGltZUJp bmRlci5TZW1hbnRpY3MKKyAgICAgICAgIH0KKyAKKyAKKy0gICAgICAgIHB1YmxpYyBFeHByQmlu T3AgQ3JlYXRlVXNlckRlZmluZWRCaW5vcChFeHByZXNzaW9uS2luZCBleHByS2luZCwgQ1R5cGUg dHlwZSwgRXhwciBsZWZ0LCBFeHByIHJpZ2h0LCBFeHByIGNhbGwsIE1ldGhQcm9wV2l0aEluc3Qg dXNlck1ldGhvZCkgPT4gCistICAgICAgICAgICAgbmV3IEV4cHJCaW5PcChleHByS2luZCwgdHlw ZSwgbGVmdCwgcmlnaHQsIGNhbGwsIHVzZXJNZXRob2QpOworKyAgICAgICAgcHVibGljIEV4cHJC aW5PcCBDcmVhdGVVc2VyRGVmaW5lZEJpbm9wKEV4cHJlc3Npb25LaW5kIGV4cHJLaW5kLCBDVHlw ZSB0eXBlLCBFeHByIGxlZnQsIEV4cHIgcmlnaHQsIEV4cHIgY2FsbCwgTWV0aFByb3BXaXRoSW5z dCB1c2VyTWV0aG9kKQorKyAgICAgICAgeyByZXR1cm4gbmV3IEV4cHJCaW5PcChleHByS2luZCwg dHlwZSwgbGVmdCwgcmlnaHQsIGNhbGwsIHVzZXJNZXRob2QpOyB9CisgCisgICAgICAgICAvLyBU aGUgY2FsbCBtYXkgYmUgbGlmdGVkLCBidXQgd2UgZG8gbm90IG1hcmsgdGhlIG91dGVyIGJpbm9w IGFzIGxpZnRlZC4KKy0gICAgICAgIHB1YmxpYyBFeHByVW5hcnlPcCBDcmVhdGVVc2VyRGVmaW5l ZFVuYXJ5T3BlcmF0b3IoRXhwcmVzc2lvbktpbmQgZXhwcktpbmQsIENUeXBlIHR5cGUsIEV4cHIg b3BlcmFuZCwgRXhwckNhbGwgY2FsbCwgTWV0aFByb3BXaXRoSW5zdCB1c2VyTWV0aG9kKSA9PiAK Ky0gICAgICAgICAgICBuZXcgRXhwclVuYXJ5T3AoZXhwcktpbmQsIHR5cGUsIG9wZXJhbmQsIGNh bGwsIHVzZXJNZXRob2QpOworKyAgICAgICAgcHVibGljIEV4cHJVbmFyeU9wIENyZWF0ZVVzZXJE ZWZpbmVkVW5hcnlPcGVyYXRvcihFeHByZXNzaW9uS2luZCBleHByS2luZCwgQ1R5cGUgdHlwZSwg RXhwciBvcGVyYW5kLCBFeHByQ2FsbCBjYWxsLCBNZXRoUHJvcFdpdGhJbnN0IHVzZXJNZXRob2Qp CisrICAgICAgICB7IHJldHVybiBuZXcgRXhwclVuYXJ5T3AoZXhwcktpbmQsIHR5cGUsIG9wZXJh bmQsIGNhbGwsIHVzZXJNZXRob2QpOyB9CisgCisgICAgICAgICBwdWJsaWMgRXhwclVuYXJ5T3Ag Q3JlYXRlTmVnKEVYUFJGTEFHIGZsYWdzLCBFeHByIG9wZXJhbmQpCisgICAgICAgICB7CitAQCAt MjQ2LDIzICsyNDYsMjIgQEAgbmFtZXNwYWNlIE1pY3Jvc29mdC5DU2hhcnAuUnVudGltZUJpbmRl ci5TZW1hbnRpY3MKKyAgICAgICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisgICAgICAgICAv LyBDcmVhdGUgYSBub2RlIHRoYXQgZXZhbHVhdGVzIHRoZSBmaXJzdCwgZXZhbHVhdGVzIHRoZSBz ZWNvbmQsIHJlc3VsdHMgaW4gdGhlIHNlY29uZC4KKyAKKy0gICAgICAgIHB1YmxpYyBFeHByQmlu T3AgQ3JlYXRlU2VxdWVuY2UoRXhwciBmaXJzdCwgRXhwciBzZWNvbmQpID0+CistICAgICAgICAg ICAgQ3JlYXRlQmlub3AoRXhwcmVzc2lvbktpbmQuU2VxdWVuY2UsIHNlY29uZC5UeXBlLCBmaXJz dCwgc2Vjb25kKTsKKysgICAgICAgIHB1YmxpYyBFeHByQmluT3AgQ3JlYXRlU2VxdWVuY2UoRXhw ciBmaXJzdCwgRXhwciBzZWNvbmQpCisrICAgICAgICB7IHJldHVybiBDcmVhdGVCaW5vcChFeHBy ZXNzaW9uS2luZC5TZXF1ZW5jZSwgc2Vjb25kLlR5cGUsIGZpcnN0LCBzZWNvbmQpOyB9CisgCisg ICAgICAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworICAgICAgICAgLy8gQ3JlYXRlIGEgbm9k ZSB0aGF0IGV2YWx1YXRlcyB0aGUgZmlyc3QsIGV2YWx1YXRlcyB0aGUgc2Vjb25kLCByZXN1bHRz IGluIHRoZSBmaXJzdC4KKyAKKy0gICAgICAgIHB1YmxpYyBFeHByQmluT3AgQ3JlYXRlUmV2ZXJz ZVNlcXVlbmNlKEV4cHIgZmlyc3QsIEV4cHIgc2Vjb25kKSA9PgorLSAgICAgICAgICAgIENyZWF0 ZUJpbm9wKEV4cHJlc3Npb25LaW5kLlNlcXVlbmNlUmV2ZXJzZSwgZmlyc3QuVHlwZSwgZmlyc3Qs IHNlY29uZCk7CisrICAgICAgICBwdWJsaWMgRXhwckJpbk9wIENyZWF0ZVJldmVyc2VTZXF1ZW5j ZShFeHByIGZpcnN0LCBFeHByIHNlY29uZCkKKysgICAgICAgIHsgcmV0dXJuIENyZWF0ZUJpbm9w KEV4cHJlc3Npb25LaW5kLlNlcXVlbmNlUmV2ZXJzZSwgZmlyc3QuVHlwZSwgZmlyc3QsIHNlY29u ZCk7IH0KKyAKKy0gICAgICAgIHB1YmxpYyBFeHByQXNzaWdubWVudCBDcmVhdGVBc3NpZ25tZW50 KEV4cHIgbGVmdCwgRXhwciByaWdodCkgPT4gbmV3IEV4cHJBc3NpZ25tZW50KGxlZnQsIHJpZ2h0 KTsKKysgICAgICAgIHB1YmxpYyBFeHByQXNzaWdubWVudCBDcmVhdGVBc3NpZ25tZW50KEV4cHIg bGVmdCwgRXhwciByaWdodCkgeyByZXR1cm4gbmV3IEV4cHJBc3NpZ25tZW50KGxlZnQsIHJpZ2h0 KTsgfQorIAorICAgICAgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKyAKKy0gICAgICAgIHB1 YmxpYyBFeHByTmFtZWRBcmd1bWVudFNwZWNpZmljYXRpb24gQ3JlYXRlTmFtZWRBcmd1bWVudFNw ZWNpZmljYXRpb24oTmFtZSBuYW1lLCBFeHByIHZhbHVlKSA9PgorLSAgICAgICAgICAgIG5ldyBF eHByTmFtZWRBcmd1bWVudFNwZWNpZmljYXRpb24obmFtZSwgdmFsdWUpOworKyAgICAgICAgcHVi bGljIEV4cHJOYW1lZEFyZ3VtZW50U3BlY2lmaWNhdGlvbiBDcmVhdGVOYW1lZEFyZ3VtZW50U3Bl Y2lmaWNhdGlvbihOYW1lIG5hbWUsIEV4cHIgdmFsdWUpIHsgcmV0dXJuIG5ldyBFeHByTmFtZWRB cmd1bWVudFNwZWNpZmljYXRpb24obmFtZSwgdmFsdWUpOyB9CisgCistICAgICAgICBwdWJsaWMg RXhwcldyYXAgQ3JlYXRlV3JhcChFeHByIGV4cHJlc3Npb24pID0+IG5ldyBFeHByV3JhcChleHBy ZXNzaW9uKTsKKysgICAgICAgIHB1YmxpYyBFeHByV3JhcCBDcmVhdGVXcmFwKEV4cHIgZXhwcmVz c2lvbikgeyByZXR1cm4gbmV3IEV4cHJXcmFwKGV4cHJlc3Npb24pOyB9CisgCisgICAgICAgICBw dWJsaWMgRXhwckJpbk9wIENyZWF0ZVNhdmUoRXhwcldyYXAgd3JhcCkKKyAgICAgICAgIHsKK0BA IC0yNzIsNyArMjcxLDcgQEAgbmFtZXNwYWNlIE1pY3Jvc29mdC5DU2hhcnAuUnVudGltZUJpbmRl ci5TZW1hbnRpY3MKKyAgICAgICAgICAgICByZXR1cm4gZXhwcjsKKyAgICAgICAgIH0KKyAKKy0g ICAgICAgIHB1YmxpYyBFeHByQ29uc3RhbnQgQ3JlYXRlTnVsbCgpID0+IENyZWF0ZUNvbnN0YW50 KFR5cGVzLkdldE51bGxUeXBlKCksIGRlZmF1bHQoQ29uc3RWYWwpKTsKKysgICAgICAgIHB1Ymxp YyBFeHByQ29uc3RhbnQgQ3JlYXRlTnVsbCgpIHsgcmV0dXJuIENyZWF0ZUNvbnN0YW50KFR5cGVz LkdldE51bGxUeXBlKCksIGRlZmF1bHQoQ29uc3RWYWwpKTsgfQorIAorICAgICAgICAgcHVibGlj IHZvaWQgQXBwZW5kSXRlbVRvTGlzdCgKKyAgICAgICAgICAgICBFeHByIG5ld0l0ZW0sCitAQCAt MzA2LDE0ICszMDUsMTMgQEAgbmFtZXNwYWNlIE1pY3Jvc29mdC5DU2hhcnAuUnVudGltZUJpbmRl ci5TZW1hbnRpY3MKKyAgICAgICAgICAgICBsYXN0ID0gbGlzdC5PcHRpb25hbE5leHRMaXN0Tm9k ZTsKKyAgICAgICAgIH0KKyAKKy0gICAgICAgIHB1YmxpYyBFeHByTGlzdCBDcmVhdGVMaXN0KEV4 cHIgb3AxLCBFeHByIG9wMikgPT4gbmV3IEV4cHJMaXN0KG9wMSwgb3AyKTsKKysgICAgICAgIHB1 YmxpYyBFeHByTGlzdCBDcmVhdGVMaXN0KEV4cHIgb3AxLCBFeHByIG9wMikgeyByZXR1cm4gbmV3 IEV4cHJMaXN0KG9wMSwgb3AyKTsgfQorIAorLSAgICAgICAgcHVibGljIEV4cHJMaXN0IENyZWF0 ZUxpc3QoRXhwciBvcDEsIEV4cHIgb3AyLCBFeHByIG9wMykgPT4gQ3JlYXRlTGlzdChvcDEsIENy ZWF0ZUxpc3Qob3AyLCBvcDMpKTsKKysgICAgICAgIHB1YmxpYyBFeHByTGlzdCBDcmVhdGVMaXN0 KEV4cHIgb3AxLCBFeHByIG9wMiwgRXhwciBvcDMpIHsgcmV0dXJuIENyZWF0ZUxpc3Qob3AxLCBD cmVhdGVMaXN0KG9wMiwgb3AzKSk7IH0KKyAKKy0gICAgICAgIHB1YmxpYyBFeHByTGlzdCBDcmVh dGVMaXN0KEV4cHIgb3AxLCBFeHByIG9wMiwgRXhwciBvcDMsIEV4cHIgb3A0KSA9PgorLSAgICAg ICAgICAgIENyZWF0ZUxpc3Qob3AxLCBDcmVhdGVMaXN0KG9wMiwgQ3JlYXRlTGlzdChvcDMsIG9w NCkpKTsKKysgICAgICAgIHB1YmxpYyBFeHByTGlzdCBDcmVhdGVMaXN0KEV4cHIgb3AxLCBFeHBy IG9wMiwgRXhwciBvcDMsIEV4cHIgb3A0KSB7IHJldHVybiBDcmVhdGVMaXN0KG9wMSwgQ3JlYXRl TGlzdChvcDIsIENyZWF0ZUxpc3Qob3AzLCBvcDQpKSk7IH0KKyAKKy0gICAgICAgIHB1YmxpYyBF eHByQ2xhc3MgQ3JlYXRlQ2xhc3MoQ1R5cGUgdHlwZSkgPT4gbmV3IEV4cHJDbGFzcyh0eXBlKTsK KysgICAgICAgIHB1YmxpYyBFeHByQ2xhc3MgQ3JlYXRlQ2xhc3MoQ1R5cGUgdHlwZSkgeyByZXR1 cm4gbmV3IEV4cHJDbGFzcyh0eXBlKTsgfQorICAgICB9CisgfQorIAorZGlmZiAtLWdpdCBhL3Ny Yy9NaWNyb3NvZnQuQ1NoYXJwL3NyYy9NaWNyb3NvZnQvQ1NoYXJwL1J1bnRpbWVCaW5kZXIvU2Vt YW50aWNzL0V4cHJlc3Npb25CaW5kZXIuY3MgYi9zcmMvTWljcm9zb2Z0LkNTaGFycC9zcmMvTWlj cm9zb2Z0L0NTaGFycC9SdW50aW1lQmluZGVyL1NlbWFudGljcy9FeHByZXNzaW9uQmluZGVyLmNz CitpbmRleCBlZTc1ZTdiMzhlLi5iZDdjNTJmODdlIDEwMDY0NAorLS0tIGEvc3JjL01pY3Jvc29m dC5DU2hhcnAvc3JjL01pY3Jvc29mdC9DU2hhcnAvUnVudGltZUJpbmRlci9TZW1hbnRpY3MvRXhw cmVzc2lvbkJpbmRlci5jcworKysrIGIvc3JjL01pY3Jvc29mdC5DU2hhcnAvc3JjL01pY3Jvc29m dC9DU2hhcnAvUnVudGltZUJpbmRlci9TZW1hbnRpY3MvRXhwcmVzc2lvbkJpbmRlci5jcworQEAg LTYwMSwxMCArNjAxLDExIEBAIG5hbWVzcGFjZSBNaWNyb3NvZnQuQ1NoYXJwLlJ1bnRpbWVCaW5k ZXIuU2VtYW50aWNzCisgICAgICAgICAgICAgLy8gQ2hlY2sgaWYgd2UgaGF2ZSBhIGNvbXBpbGUg dGltZSBjb25zdGFudC4gSWYgd2UgZG8sIGNyZWF0ZSBhIGNvbnN0YW50IGZvciBpdCBhbmQgc2V0 IHRoZQorICAgICAgICAgICAgIC8vIG9yaWdpbmFsIHRyZWUgdG8gdGhlIGNhc3QuCisgCistICAg ICAgICAgICAgaWYgKGV4cHJDb25zdCBpcyBFeHByQ29uc3RhbnQgY29uc3RhbnQgJiYgZXhwckZs YWdzID09IDAgJiYKKysgICAgICAgICAgICBpZiAoZXhwckNvbnN0IGlzIEV4cHJDb25zdGFudCAm JiBleHByRmxhZ3MgPT0gMCAmJgorICAgICAgICAgICAgICAgICBleHByU3JjLlR5cGUuZnVuZFR5 cGUoKSA9PSB0eXBlRGVzdC5mdW5kVHlwZSgpICYmCistICAgICAgICAgICAgICAgICghZXhwclNy Yy5UeXBlLmlzUHJlZGVmVHlwZShQcmVkZWZpbmVkVHlwZS5QVF9TVFJJTkcpIHx8IGNvbnN0YW50 LlZhbC5Jc051bGxSZWYpKQorKyAgICAgICAgICAgICAgICAoIWV4cHJTcmMuVHlwZS5pc1ByZWRl ZlR5cGUoUHJlZGVmaW5lZFR5cGUuUFRfU1RSSU5HKSB8fCAoKEV4cHJDb25zdGFudClleHByQ29u c3QpLlZhbC5Jc051bGxSZWYpKQorICAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgRXhw ckNvbnN0YW50IGNvbnN0YW50ID0gKEV4cHJDb25zdGFudClleHByQ29uc3Q7CisgICAgICAgICAg ICAgICAgIEV4cHJDb25zdGFudCBleHByID0gR2V0RXhwckZhY3RvcnkoKS5DcmVhdGVDb25zdGFu dCh0eXBlRGVzdCwgY29uc3RhbnQuVmFsKTsKKyAgICAgICAgICAgICAgICAgcGV4cHJEZXN0ID0g ZXhwcjsKKyAgICAgICAgICAgICAgICAgcmV0dXJuOworQEAgLTExOTEsOCArMTE5Miw5IEBAIG5h bWVzcGFjZSBNaWNyb3NvZnQuQ1NoYXJwLlJ1bnRpbWVCaW5kZXIuU2VtYW50aWNzCisgICAgICAg ICAgICAgd2hpbGUgKGxpc3QgIT0gbnVsbCkKKyAgICAgICAgICAgICB7CisgICAgICAgICAgICAg ICAgIEV4cHIgYXJnOworLSAgICAgICAgICAgICAgICBpZiAobGlzdCBpcyBFeHByTGlzdCBuZXh0 KQorKyAgICAgICAgICAgICAgICBpZiAobGlzdCBpcyBFeHByTGlzdCkKKyAgICAgICAgICAgICAg ICAgeworKyAgICAgICAgICAgICAgICAgICAgRXhwckxpc3QgbmV4dCA9IChFeHByTGlzdClsaXN0 OworICAgICAgICAgICAgICAgICAgICAgYXJnID0gbmV4dC5PcHRpb25hbEVsZW1lbnQ7CisgICAg ICAgICAgICAgICAgICAgICBsaXN0ID0gbmV4dC5PcHRpb25hbE5leHRMaXN0Tm9kZTsKKyAgICAg ICAgICAgICAgICAgfQorQEAgLTEyNjUsOCArMTI2Nyw5IEBAIG5hbWVzcGFjZSBNaWNyb3NvZnQu Q1NoYXJwLlJ1bnRpbWVCaW5kZXIuU2VtYW50aWNzCisgCisgICAgICAgICBwcml2YXRlIEV4cHIg VW53cmFwRXhwcmVzc2lvbihFeHByIHBFeHByZXNzaW9uKQorICAgICAgICAgeworLSAgICAgICAg ICAgIHdoaWxlIChwRXhwcmVzc2lvbiBpcyBFeHByV3JhcCB3cmFwKQorKyAgICAgICAgICAgIHdo aWxlIChwRXhwcmVzc2lvbiBpcyBFeHByV3JhcCkKKyAgICAgICAgICAgICB7CisrICAgICAgICAg ICAgICAgIEV4cHJXcmFwIHdyYXAgPSAoRXhwcldyYXApcEV4cHJlc3Npb247CisgICAgICAgICAg ICAgICAgIEV4cHIgd3JhcHBlZCA9IHdyYXAuT3B0aW9uYWxFeHByZXNzaW9uOworICAgICAgICAg ICAgICAgICBpZiAod3JhcHBlZCA9PSBudWxsKQorICAgICAgICAgICAgICAgICB7CitAQCAtMTM0 NCw4ICsxMzQ3LDkgQEAgbmFtZXNwYWNlIE1pY3Jvc29mdC5DU2hhcnAuUnVudGltZUJpbmRlci5T ZW1hbnRpY3MKKyAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgIGlm IChleHByLmlzTHZhbHVlKCkpCisgICAgICAgICAgICAgeworLSAgICAgICAgICAgICAgICBpZiAo ZXhwciBpcyBFeHByUHJvcGVydHkgcHJvcCkKKysgICAgICAgICAgICAgICAgaWYgKGV4cHIgaXMg RXhwclByb3BlcnR5KQorICAgICAgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgICAgICBF eHByUHJvcGVydHkgcHJvcCA9IChFeHByUHJvcGVydHkpZXhwcjsKKyAgICAgICAgICAgICAgICAg ICAgIENoZWNrTHZhbHVlUHJvcChwcm9wKTsKKyAgICAgICAgICAgICAgICAgfQorICAgICAgICAg ICAgICAgICBtYXJrRmllbGRBc3NpZ25lZChleHByKTsKK0BAIC0xNTcwLDkgKzE1NzQsMTAgQEAg bmFtZXNwYWNlIE1pY3Jvc29mdC5DU2hhcnAuUnVudGltZUJpbmRlci5TZW1hbnRpY3MKKyAKKyAg ICAgICAgICAgICAgICAgLy8gSWYgd2UncmUgaW52b2tpbmcgY29kZSBvbiBhIHN0cnVjdC12YWx1 ZWQgZmllbGQsIG1hcmsgdGhlIHN0cnVjdCBhcyBhc3NpZ25lZCAodG8KKyAgICAgICAgICAgICAg ICAgLy8gYXZvaWQgd2FybmluZyBDUzA2NDkpLgorLSAgICAgICAgICAgICAgICBpZiAocE9iamVj dCBpcyBFeHByRmllbGQgZmllbGQgJiYgIWZpZWxkLkZpZWxkV2l0aFR5cGUuRmllbGQoKS5pc0Fz c2lnbmVkICYmICFzd3QuU3ltLklzRmllbGRTeW1ib2woKSAmJgorKyAgICAgICAgICAgICAgICBp ZiAocE9iamVjdCBpcyBFeHByRmllbGQgJiYgISgoRXhwckZpZWxkKXBPYmplY3QpLkZpZWxkV2l0 aFR5cGUuRmllbGQoKS5pc0Fzc2lnbmVkICYmICFzd3QuU3ltLklzRmllbGRTeW1ib2woKSAmJgor ICAgICAgICAgICAgICAgICAgICAgdHlwZU9iai5pc1N0cnVjdFR5cGUoKSAmJiAhdHlwZU9iai5p c1ByZWRlZmluZWQoKSkKKyAgICAgICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICAgICAg RXhwckZpZWxkIGZpZWxkID0gKEV4cHJGaWVsZCkgcE9iamVjdDsKKyAgICAgICAgICAgICAgICAg ICAgIGZpZWxkLkZpZWxkV2l0aFR5cGUuRmllbGQoKS5pc0Fzc2lnbmVkID0gdHJ1ZTsKKyAgICAg ICAgICAgICAgICAgfQorIAorQEAgLTE3NzksOCArMTc4NCw5IEBAIG5hbWVzcGFjZSBNaWNyb3Nv ZnQuQ1NoYXJwLlJ1bnRpbWVCaW5kZXIuU2VtYW50aWNzCisgCisgICAgICAgICAgICAgICAgICAg ICBFeHByIGFyZ3VtZW50ID0gaW5kaXI7CisgICAgICAgICAgICAgICAgICAgICBFeHByIHJ2YWw7 CistICAgICAgICAgICAgICAgICAgICBpZiAoYXJndW1lbnQgaXMgRXhwck5hbWVkQXJndW1lbnRT cGVjaWZpY2F0aW9uIG5hbWVkKQorKyAgICAgICAgICAgICAgICAgICAgaWYgKGFyZ3VtZW50IGlz IEV4cHJOYW1lZEFyZ3VtZW50U3BlY2lmaWNhdGlvbikKKyAgICAgICAgICAgICAgICAgICAgIHsK KysgICAgICAgICAgICAgICAgICAgICAgICBFeHByTmFtZWRBcmd1bWVudFNwZWNpZmljYXRpb24g bmFtZWQgPSAoRXhwck5hbWVkQXJndW1lbnRTcGVjaWZpY2F0aW9uKWFyZ3VtZW50OworICAgICAg ICAgICAgICAgICAgICAgICAgIGludCBpbmRleCA9IDA7CisgICAgICAgICAgICAgICAgICAgICAg ICAgLy8gSWYgd2UncmUgbmFtZWQsIGxvb2sgZm9yIHRoZSB0eXBlIG9mIHRoZSBtYXRjaGluZyBu YW1lLgorICAgICAgICAgICAgICAgICAgICAgICAgIGZvcmVhY2ggKE5hbWUgaSBpbiBtb3N0RGVy aXZlZE1ldGhvZC5QYXJhbWV0ZXJOYW1lcykKK0BAIC0xOTE4LDggKzE5MjQsOSBAQCBuYW1lc3Bh Y2UgTWljcm9zb2Z0LkNTaGFycC5SdW50aW1lQmluZGVyLlNlbWFudGljcworICAgICAgICAgICAg ICAgICAgICAgRXhwciBleHByID0gaXQuQ3VycmVudCgpOworICAgICAgICAgICAgICAgICAgICAg Y291bnQrKzsKKyAKKy0gICAgICAgICAgICAgICAgICAgIGlmIChleHByIGlzIEV4cHJOYW1lZEFy Z3VtZW50U3BlY2lmaWNhdGlvbiBuYW1lZCkKKysgICAgICAgICAgICAgICAgICAgIGlmIChleHBy IGlzIEV4cHJOYW1lZEFyZ3VtZW50U3BlY2lmaWNhdGlvbikKKyAgICAgICAgICAgICAgICAgICAg IHsKKysgICAgICAgICAgICAgICAgICAgICAgICBFeHByTmFtZWRBcmd1bWVudFNwZWNpZmljYXRp b24gbmFtZWQgPSAoRXhwck5hbWVkQXJndW1lbnRTcGVjaWZpY2F0aW9uKWV4cHI7CisgICAgICAg ICAgICAgICAgICAgICAgICAgbmFtZWQuVmFsdWUgPSB0cnlDb252ZXJ0KG5hbWVkLlZhbHVlLCBl bGVtZW50VHlwZSk7CisgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg ICBlbHNlCitAQCAtMTk0MSw4ICsxOTQ4LDkgQEAgbmFtZXNwYWNlIE1pY3Jvc29mdC5DU2hhcnAu UnVudGltZUJpbmRlci5TZW1hbnRpY3MKKyAKKyAgICAgICAgIHByaXZhdGUgdm9pZCBtYXJrRmll bGRBc3NpZ25lZChFeHByIGV4cHIpCisgICAgICAgICB7CistICAgICAgICAgICAgaWYgKDAgIT0g KGV4cHIuRmxhZ3MgJiBFWFBSRkxBRy5FWEZfTFZBTFVFKSAmJiBleHByIGlzIEV4cHJGaWVsZCBm aWVsZCkKKysgICAgICAgICAgICBpZiAoMCAhPSAoZXhwci5GbGFncyAmIEVYUFJGTEFHLkVYRl9M VkFMVUUpICYmIGV4cHIgaXMgRXhwckZpZWxkKQorICAgICAgICAgICAgIHsKKysgICAgICAgICAg ICAgICAgRXhwckZpZWxkIGZpZWxkID0gKEV4cHJGaWVsZCkgZXhwcjsKKyAgICAgICAgICAgICAg ICAgRmllbGRTeW1ib2wgc3ltYm9sOworICAgICAgICAgICAgICAgICBkbworICAgICAgICAgICAg ICAgICB7CitAQCAtMjAwOSw4ICsyMDE3LDkgQEAgbmFtZXNwYWNlIE1pY3Jvc29mdC5DU2hhcnAu UnVudGltZUJpbmRlci5TZW1hbnRpY3MKKyAgICAgICAgICAgICBmb3IgKEV4cHIgbGlzdCA9IGFy Z3M7IGxpc3QgIT0gbnVsbDsgaWFyZysrKQorICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg ICAgRXhwciBhcmc7CistICAgICAgICAgICAgICAgIGlmIChsaXN0IGlzIEV4cHJMaXN0IG5leHQp CisrICAgICAgICAgICAgICAgIGlmIChsaXN0IGlzIEV4cHJMaXN0KQorICAgICAgICAgICAgICAg ICB7CisrICAgICAgICAgICAgICAgICAgICBFeHByTGlzdCBuZXh0ID0gKEV4cHJMaXN0KWxpc3Q7 CisgICAgICAgICAgICAgICAgICAgICBhcmcgPSBuZXh0Lk9wdGlvbmFsRWxlbWVudDsKKyAgICAg ICAgICAgICAgICAgICAgIGxpc3QgPSBuZXh0Lk9wdGlvbmFsTmV4dExpc3ROb2RlOworICAgICAg ICAgICAgICAgICB9CitAQCAtMjM2NCw4ICsyMzczLDkgQEAgbmFtZXNwYWNlIE1pY3Jvc29mdC5D U2hhcnAuUnVudGltZUJpbmRlci5TZW1hbnRpY3MKKyAgICAgICAgICAgICB7CisgICAgICAgICAg ICAgICAgIEV4cHIgYXJnOworIAorLSAgICAgICAgICAgICAgICBpZiAobGlzdCBpcyBFeHByTGlz dCBuZXh0KQorKyAgICAgICAgICAgICAgICBpZiAobGlzdCBpcyBFeHByTGlzdCkKKyAgICAgICAg ICAgICAgICAgeworKyAgICAgICAgICAgICAgICAgICAgRXhwckxpc3QgbmV4dCA9IChFeHByTGlz dClsaXN0OworICAgICAgICAgICAgICAgICAgICAgYXJnID0gbmV4dC5PcHRpb25hbEVsZW1lbnQ7 CisgICAgICAgICAgICAgICAgICAgICBsaXN0ID0gbmV4dC5PcHRpb25hbE5leHRMaXN0Tm9kZTsK KyAgICAgICAgICAgICAgICAgfQorZGlmZiAtLWdpdCBhL3NyYy9NaWNyb3NvZnQuQ1NoYXJwL3Ny Yy9NaWNyb3NvZnQvQ1NoYXJwL1J1bnRpbWVCaW5kZXIvU2VtYW50aWNzL0dyb3VwVG9BcmdzQmlu ZGVyLmNzIGIvc3JjL01pY3Jvc29mdC5DU2hhcnAvc3JjL01pY3Jvc29mdC9DU2hhcnAvUnVudGlt ZUJpbmRlci9TZW1hbnRpY3MvR3JvdXBUb0FyZ3NCaW5kZXIuY3MKK2luZGV4IDI1YThkNDAzNDEu LmQxN2RlMzk3N2QgMTAwNjQ0CistLS0gYS9zcmMvTWljcm9zb2Z0LkNTaGFycC9zcmMvTWljcm9z b2Z0L0NTaGFycC9SdW50aW1lQmluZGVyL1NlbWFudGljcy9Hcm91cFRvQXJnc0JpbmRlci5jcwor KysrIGIvc3JjL01pY3Jvc29mdC5DU2hhcnAvc3JjL01pY3Jvc29mdC9DU2hhcnAvUnVudGltZUJp bmRlci9TZW1hbnRpY3MvR3JvdXBUb0FyZ3NCaW5kZXIuY3MKK0BAIC01MTAsNyArNTEwLDcgQEAg bmFtZXNwYWNlIE1pY3Jvc29mdC5DU2hhcnAuUnVudGltZUJpbmRlci5TZW1hbnRpY3MKKyAgICAg ICAgICAgICAgICAgICAgIC8vIHRoZW4gbGV0IHVzIHRocm91Z2guCisgICAgICAgICAgICAgICAg ICAgICBpZiAobWV0aHByb3AuaXNQYXJhbUFycmF5ICYmCisgICAgICAgICAgICAgICAgICAgICAg ICAgaW5kZXggPCBwQXJndW1lbnRzLmNhcmcgJiYKKy0gICAgICAgICAgICAgICAgICAgICAgICBw QXJndW1lbnRzLnByZ2V4cHJbaW5kZXhdIGlzIEV4cHJBcnJheUluaXQgYXJyYXlJbml0ICYmIGFy cmF5SW5pdC5HZW5lcmF0ZWRGb3JQYXJhbUFycmF5KQorKyAgICAgICAgICAgICAgICAgICAgICAg IHBBcmd1bWVudHMucHJnZXhwcltpbmRleF0gaXMgRXhwckFycmF5SW5pdCAmJiAoKEV4cHJBcnJh eUluaXQpcEFyZ3VtZW50cy5wcmdleHByW2luZGV4XSkuR2VuZXJhdGVkRm9yUGFyYW1BcnJheSkK KyAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbUFy cmF5QXJndW1lbnQgPSBwQXJndW1lbnRzLnByZ2V4cHJbaW5kZXhdOworICAgICAgICAgICAgICAg ICAgICAgfQorQEAgLTUxOCw3ICs1MTgsNyBAQCBuYW1lc3BhY2UgTWljcm9zb2Z0LkNTaGFycC5S dW50aW1lQmluZGVyLlNlbWFudGljcworICAgICAgICAgICAgICAgICAgICAgLy8gUG9zaXRpb25h bC4KKyAgICAgICAgICAgICAgICAgICAgIGlmIChpbmRleCA8IHBBcmd1bWVudHMuY2FyZyAmJgor ICAgICAgICAgICAgICAgICAgICAgICAgICEocEFyZ3VtZW50cy5wcmdleHByW2luZGV4XSBpcyBF eHByTmFtZWRBcmd1bWVudFNwZWNpZmljYXRpb24pICYmCistICAgICAgICAgICAgICAgICAgICAg ICAgIShwQXJndW1lbnRzLnByZ2V4cHJbaW5kZXhdIGlzIEV4cHJBcnJheUluaXQgYXJyYXlJbml0 UG9zICYmIGFycmF5SW5pdFBvcy5HZW5lcmF0ZWRGb3JQYXJhbUFycmF5KSkKKysgICAgICAgICAg ICAgICAgICAgICAgICAhKHBBcmd1bWVudHMucHJnZXhwcltpbmRleF0gaXMgRXhwckFycmF5SW5p dCAmJiAoKEV4cHJBcnJheUluaXQpcEFyZ3VtZW50cy5wcmdleHByW2luZGV4XSkuR2VuZXJhdGVk Rm9yUGFyYW1BcnJheSkpCisgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg ICAgICAgICAgcEV4cHJBcmd1bWVudHNbaW5kZXhdID0gcEFyZ3VtZW50cy5wcmdleHByW2luZGV4 KytdOworICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworQEAgLTgzOSw3ICs4Mzks NyBAQCBuYW1lc3BhY2UgTWljcm9zb2Z0LkNTaGFycC5SdW50aW1lQmluZGVyLlNlbWFudGljcwor ICAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHBBcmd1bWVudHMuY2FyZzsgaSsr KQorICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICBFeHByIGV4cHIgPSBw cmdleHByW2ldOworLSAgICAgICAgICAgICAgICAgICAgaWYgKGV4cHIgaXMgRXhwck5hbWVkQXJn dW1lbnRTcGVjaWZpY2F0aW9uIG5hbWVkICYmIG5hbWVkLk5hbWUgPT0gcE5hbWUpCisrICAgICAg ICAgICAgICAgICAgICBpZiAoZXhwciBpcyBFeHByTmFtZWRBcmd1bWVudFNwZWNpZmljYXRpb24g JiYgKChFeHByTmFtZWRBcmd1bWVudFNwZWNpZmljYXRpb24pZXhwcikuTmFtZSA9PSBwTmFtZSkK KyAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g ZXhwcjsKKyAgICAgICAgICAgICAgICAgICAgIH0KK0BAIC04NjEsNyArODYxLDggQEAgbmFtZXNw YWNlIE1pY3Jvc29mdC5DU2hhcnAuUnVudGltZUJpbmRlci5TZW1hbnRpY3MKKyAgICAgICAgICAg ICAgICAgSGFzaFNldDxOYW1lPiBuYW1lcyA9IG5ldyBIYXNoU2V0PE5hbWU+KCk7CisgICAgICAg ICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgX3BBcmd1bWVudHMuY2FyZzsgaSsrKQorICAg ICAgICAgICAgICAgICB7CistICAgICAgICAgICAgICAgICAgICBpZiAoIShfcEFyZ3VtZW50cy5w cmdleHByW2ldIGlzIEV4cHJOYW1lZEFyZ3VtZW50U3BlY2lmaWNhdGlvbiBuYW1lZCkpCisrICAg ICAgICAgICAgICAgICAgICBFeHByTmFtZWRBcmd1bWVudFNwZWNpZmljYXRpb24gbmFtZWQ7Cisr ICAgICAgICAgICAgICAgICAgICBpZiAoIShfcEFyZ3VtZW50cy5wcmdleHByW2ldIGlzIEV4cHJO YW1lZEFyZ3VtZW50U3BlY2lmaWNhdGlvbikpCisgICAgICAgICAgICAgICAgICAgICB7CisgICAg ICAgICAgICAgICAgICAgICAgICAgaWYgKCFjdXJyZW50UG9zaXRpb24uSXNFbXB0eSgpKQorICAg ICAgICAgICAgICAgICAgICAgICAgIHsKK0BAIC04NjksNiArODcwLDcgQEAgbmFtZXNwYWNlIE1p Y3Jvc29mdC5DU2hhcnAuUnVudGltZUJpbmRlci5TZW1hbnRpY3MKKyAgICAgICAgICAgICAgICAg ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAg ICAgICAgICAgICB9CisrICAgICAgICAgICAgICAgICAgICBuYW1lZCA9IChFeHByTmFtZWRBcmd1 bWVudFNwZWNpZmljYXRpb24pIF9wQXJndW1lbnRzLnByZ2V4cHJbaV07CisgCisgICAgICAgICAg ICAgICAgICAgICBOYW1lIG5hbWUgPSBuYW1lZC5OYW1lOworICAgICAgICAgICAgICAgICAgICAg aWYgKCFtZXRocHJvcC5QYXJhbWV0ZXJOYW1lcy5Db250YWlucyhuYW1lKSkKK0BAIC0xMDgwLDgg KzEwODIsOSBAQCBuYW1lc3BhY2UgTWljcm9zb2Z0LkNTaGFycC5SdW50aW1lQmluZGVyLlNlbWFu dGljcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFeHByIHBBcmd1bWVudCA9IF9wQXJn dW1lbnRzLnByZ2V4cHJbaXZhcl07CisgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8v IElmIHdlIGhhdmUgYSBuYW1lZCBhcmd1bWVudCwgc3RyaXAgaXQgdG8gZG8gdGhlIGNvbnZlcnNp b24uCistICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwQXJndW1lbnQgaXMgRXhwck5h bWVkQXJndW1lbnRTcGVjaWZpY2F0aW9uIG5hbWVkKQorKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICBpZiAocEFyZ3VtZW50IGlzIEV4cHJOYW1lZEFyZ3VtZW50U3BlY2lmaWNhdGlvbikKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgRXhwck5hbWVkQXJndW1lbnRTcGVjaWZpY2F0aW9uIG5hbWVkID0gKEV4cHJOYW1lZEFy Z3VtZW50U3BlY2lmaWNhdGlvbilwQXJndW1lbnQ7CisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBwQXJndW1lbnQgPSBuYW1lZC5WYWx1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgfQorIAorZGlmZiAtLWdpdCBhL3NyYy9NaWNyb3NvZnQuQ1NoYXJwL3NyYy9NaWNyb3Nv ZnQvQ1NoYXJwL1J1bnRpbWVCaW5kZXIvU2VtYW50aWNzL0ltcGxpY2l0Q29udmVyc2lvbi5jcyBi L3NyYy9NaWNyb3NvZnQuQ1NoYXJwL3NyYy9NaWNyb3NvZnQvQ1NoYXJwL1J1bnRpbWVCaW5kZXIv U2VtYW50aWNzL0ltcGxpY2l0Q29udmVyc2lvbi5jcworaW5kZXggYzllYjVhZTIxZC4uY2RlNTMz ZDc1MCAxMDA2NDQKKy0tLSBhL3NyYy9NaWNyb3NvZnQuQ1NoYXJwL3NyYy9NaWNyb3NvZnQvQ1No YXJwL1J1bnRpbWVCaW5kZXIvU2VtYW50aWNzL0ltcGxpY2l0Q29udmVyc2lvbi5jcworKysrIGIv c3JjL01pY3Jvc29mdC5DU2hhcnAvc3JjL01pY3Jvc29mdC9DU2hhcnAvUnVudGltZUJpbmRlci9T ZW1hbnRpY3MvSW1wbGljaXRDb252ZXJzaW9uLmNzCitAQCAtMTcyLDggKzE3Miw5IEBAIG5hbWVz cGFjZSBNaWNyb3NvZnQuQ1NoYXJwLlJ1bnRpbWVCaW5kZXIuU2VtYW50aWNzCisgICAgICAgICAg ICAgICAgICAgICAgICAgVlNGQUlMKCJCYWQgdHlwZSBzeW1ib2wga2luZCIpOworICAgICAgICAg ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgY2FzZSBUeXBlS2lu ZC5US19NZXRob2RHcm91cFR5cGU6CistICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF9leHBy U3JjIGlzIEV4cHJNZW1iZXJHcm91cCBtZW1HcnApCisrICAgICAgICAgICAgICAgICAgICAgICAg aWYgKF9leHByU3JjIGlzIEV4cHJNZW1iZXJHcm91cCkKKyAgICAgICAgICAgICAgICAgICAgICAg ICB7CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIEV4cHJNZW1iZXJHcm91cCBtZW1HcnAg PSAoRXhwck1lbWJlckdyb3VwKV9leHByU3JjOworICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBFeHByQ2FsbCBvdXRFeHByOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHJl dFZhbCA9IF9iaW5kZXIuQmluZEdycENvbnZlcnNpb24obWVtR3JwLCBfdHlwZURlc3QsIF9uZWVk c0V4cHJEZXN0LCBvdXQgb3V0RXhwciwgZmFsc2UpOworICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBfZXhwckRlc3QgPSBvdXRFeHByOworQEAgLTczNywxMCArNzM4LDEwIEBAIG5hbWVzcGFj ZSBNaWNyb3NvZnQuQ1NoYXJwLlJ1bnRpbWVCaW5kZXIuU2VtYW50aWNzCisgICAgICAgICAgICAg ICAgIC8vICogICBBIGNvbnN0YW50LWV4cHJlc3Npb24gb2YgdHlwZSBsb25nIGNhbiBiZSBjb252 ZXJ0ZWQgdG8gdHlwZSB1bG9uZywgcHJvdmlkZWQgdGhlIHZhbHVlIG9mCisgICAgICAgICAgICAg ICAgIC8vICAgICB0aGUgY29uc3RhbnQtZXhwcmVzc2lvbiBpcyBub3QgbmVnYXRpdmUuCisgICAg ICAgICAgICAgICAgIC8vIE5vdGU6IERvbid0IHVzZSBHZXRDb25zdCBoZXJlIHNpbmNlIHRoZSBj b252ZXJzaW9uIG9ubHkgYXBwbGllcyB0byBib25hLWZpZGUgY29tcGlsZSB0aW1lIGNvbnN0YW50 cy4KKy0gICAgICAgICAgICAgICAgaWYgKF9leHByU3JjIGlzIEV4cHJDb25zdGFudCBjb25zdGFu dCAmJiBfZXhwclNyYy5Jc09LICYmCisrICAgICAgICAgICAgICAgIGlmIChfZXhwclNyYyBpcyBF eHByQ29uc3RhbnQgJiYgX2V4cHJTcmMuSXNPSyAmJgorICAgICAgICAgICAgICAgICAgICAgKChw dFNyYyA9PSBQcmVkZWZpbmVkVHlwZS5QVF9JTlQgJiYgcHREZXN0ICE9IFByZWRlZmluZWRUeXBl LlBUX0JPT0wgJiYgcHREZXN0ICE9IFByZWRlZmluZWRUeXBlLlBUX0NIQVIpIHx8CisgICAgICAg ICAgICAgICAgICAgICAocHRTcmMgPT0gUHJlZGVmaW5lZFR5cGUuUFRfTE9ORyAmJiBwdERlc3Qg PT0gUHJlZGVmaW5lZFR5cGUuUFRfVUxPTkcpKSAmJgorLSAgICAgICAgICAgICAgICAgICAgaXND b25zdGFudEluUmFuZ2UoY29uc3RhbnQsIF90eXBlRGVzdCkpCisrICAgICAgICAgICAgICAgICAg ICBpc0NvbnN0YW50SW5SYW5nZSgoKEV4cHJDb25zdGFudClfZXhwclNyYyksIF90eXBlRGVzdCkp CisgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgIC8vIFNwZWNpYWwgY2Fz ZSAoQ0xSIDYuMS42KTogaWYgaW50ZWdyYWwgY29uc3RhbnQgaXMgaW4gcmFuZ2UsIHRoZSBjb252 ZXJzaW9uIGlzIGEgbGVnYWwgaW1wbGljaXQgY29udmVyc2lvbi4KKyAgICAgICAgICAgICAgICAg ICAgIGNvbnZlcnRLaW5kID0gQ29udktpbmQuSW1wbGljaXQ7CitkaWZmIC0tZ2l0IGEvc3JjL01p Y3Jvc29mdC5DU2hhcnAvc3JjL01pY3Jvc29mdC9DU2hhcnAvUnVudGltZUJpbmRlci9TZW1hbnRp Y3MvTWV0aG9kVHlwZUluZmVycmVyLmNzIGIvc3JjL01pY3Jvc29mdC5DU2hhcnAvc3JjL01pY3Jv c29mdC9DU2hhcnAvUnVudGltZUJpbmRlci9TZW1hbnRpY3MvTWV0aG9kVHlwZUluZmVycmVyLmNz CitpbmRleCA1MmQzNTRhYzUzLi5mNDM2ODQ2OTBkIDEwMDY0NAorLS0tIGEvc3JjL01pY3Jvc29m dC5DU2hhcnAvc3JjL01pY3Jvc29mdC9DU2hhcnAvUnVudGltZUJpbmRlci9TZW1hbnRpY3MvTWV0 aG9kVHlwZUluZmVycmVyLmNzCisrKysgYi9zcmMvTWljcm9zb2Z0LkNTaGFycC9zcmMvTWljcm9z b2Z0L0NTaGFycC9SdW50aW1lQmluZGVyL1NlbWFudGljcy9NZXRob2RUeXBlSW5mZXJyZXIuY3MK K0BAIC0xMDYzLDEwICsxMDYzLDExIEBAIG5hbWVzcGFjZSBNaWNyb3NvZnQuQ1NoYXJwLlJ1bnRp bWVCaW5kZXIuU2VtYW50aWNzCisgICAgICAgICAgICAgLy8gU1BFQzogICB5aWVsZHMgYSBzaW5n bGUgbWV0aG9kIHdpdGggcmV0dXJuIENUeXBlIFUgdGhlbiBhIGxvd2VyLWJvdW5kCisgICAgICAg ICAgICAgLy8gU1BFQzogICBpbmZlcmVuY2UgaXMgbWFkZSBmcm9tIFUgdG8gVGIuCisgCistICAg ICAgICAgICAgaWYgKCEocFNvdXJjZSBpcyBFeHByTWVtYmVyR3JvdXAgbWVtR3JwKSkKKysgICAg ICAgICAgICBpZiAoIShwU291cmNlIGlzIEV4cHJNZW1iZXJHcm91cCkpCisgICAgICAgICAgICAg eworICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgfQorKyAgICAg ICAgICAgIEV4cHJNZW1iZXJHcm91cCBtZW1HcnAgPSAoRXhwck1lbWJlckdyb3VwKXBTb3VyY2U7 CisgICAgICAgICAgICAgcFR5cGUgPSBwVHlwZS5HZXREZWxlZ2F0ZVR5cGVPZlBvc3NpYmxlRXhw cmVzc2lvbigpOworICAgICAgICAgICAgIGlmICghcFR5cGUuaXNEZWxlZ2F0ZVR5cGUoKSkKKyAg ICAgICAgICAgICB7CitkaWZmIC0tZ2l0IGEvc3JjL01pY3Jvc29mdC5DU2hhcnAvc3JjL01pY3Jv c29mdC9DU2hhcnAvUnVudGltZUJpbmRlci9TZW1hbnRpY3MvTnVsbGFibGUuY3MgYi9zcmMvTWlj cm9zb2Z0LkNTaGFycC9zcmMvTWljcm9zb2Z0L0NTaGFycC9SdW50aW1lQmluZGVyL1NlbWFudGlj cy9OdWxsYWJsZS5jcworaW5kZXggYjIzZmM0NDUwOS4uN2RiZTgyMjdjYSAxMDA2NDQKKy0tLSBh L3NyYy9NaWNyb3NvZnQuQ1NoYXJwL3NyYy9NaWNyb3NvZnQvQ1NoYXJwL1J1bnRpbWVCaW5kZXIv U2VtYW50aWNzL051bGxhYmxlLmNzCisrKysgYi9zcmMvTWljcm9zb2Z0LkNTaGFycC9zcmMvTWlj cm9zb2Z0L0NTaGFycC9SdW50aW1lQmluZGVyL1NlbWFudGljcy9OdWxsYWJsZS5jcworQEAgLTI5 LDggKzI5LDkgQEAgbmFtZXNwYWNlIE1pY3Jvc29mdC5DU2hhcnAuUnVudGltZUJpbmRlci5TZW1h bnRpY3MKKyAgICAgICAgIHsKKyAgICAgICAgICAgICBEZWJ1Zy5Bc3NlcnQoZXhwciAhPSBudWxs KTsKKyAKKy0gICAgICAgICAgICBpZiAoZXhwciBpcyBFeHByQ2FsbCBwQ2FsbCAmJiBwQ2FsbC5N ZW1iZXJHcm91cC5PcHRpb25hbE9iamVjdCA9PSBudWxsKQorKyAgICAgICAgICAgIGlmIChleHBy IGlzIEV4cHJDYWxsICYmICgoRXhwckNhbGwpZXhwcikuTWVtYmVyR3JvdXAuT3B0aW9uYWxPYmpl Y3QgPT0gbnVsbCkKKyAgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgIEV4cHJDYWxsIHBD YWxsID0gKEV4cHJDYWxsKWV4cHI7CisgICAgICAgICAgICAgICAgIE1ldGhvZFN5bWJvbCBtZXRo ID0gcENhbGwuTWV0aFdpdGhJbnN0Lk1ldGgoKTsKKyAgICAgICAgICAgICAgICAgaWYgKG1ldGgg IT0gbnVsbCAmJiBtZXRoLklzTnVsbGFibGVDb25zdHJ1Y3RvcigpKQorICAgICAgICAgICAgICAg ICB7CitAQCAtNDUsNyArNDYsOCBAQCBuYW1lc3BhY2UgTWljcm9zb2Z0LkNTaGFycC5SdW50aW1l QmluZGVyLlNlbWFudGljcworIAorICAgICAgICAgcHVibGljIHN0YXRpYyBFeHByIFN0cmlwTnVs bGFibGVDb25zdHJ1Y3RvcihFeHByIHBFeHByKQorICAgICAgICAgeworLSAgICAgICAgICAgIHdo aWxlIChJc051bGxhYmxlQ29uc3RydWN0b3IocEV4cHIsIG91dCBFeHByQ2FsbCBjYWxsKSkKKysg ICAgICAgICAgICBFeHByQ2FsbCBjYWxsOworKyAgICAgICAgICAgIHdoaWxlIChJc051bGxhYmxl Q29uc3RydWN0b3IocEV4cHIsIG91dCBjYWxsKSkKKyAgICAgICAgICAgICB7CisgICAgICAgICAg ICAgICAgIHBFeHByID0gY2FsbC5PcHRpb25hbEFyZ3VtZW50czsKKyAgICAgICAgICAgICAgICAg RGVidWcuQXNzZXJ0KHBFeHByICE9IG51bGwgJiYgIShwRXhwciBpcyBFeHByTGlzdCkpOworQEAg LTYwLDcgKzYyLDggQEAgbmFtZXNwYWNlIE1pY3Jvc29mdC5DU2hhcnAuUnVudGltZUJpbmRlci5T ZW1hbnRpY3MKKyAgICAgICAgICAgICBEZWJ1Zy5Bc3NlcnQoZXhwclNyYyAhPSBudWxsICYmIGV4 cHJTcmMuVHlwZS5Jc051bGxhYmxlVHlwZSgpKTsKKyAKKyAgICAgICAgICAgICAvLyBGb3IgbmV3 IFQ/KHgpLCB0aGUgYW5zd2VyIGlzIHguCistICAgICAgICAgICAgaWYgKElzTnVsbGFibGVDb25z dHJ1Y3RvcihleHByU3JjLCBvdXQgRXhwckNhbGwgY2FsbCkpCisrICAgICAgICAgICAgRXhwckNh bGwgY2FsbDsKKysgICAgICAgICAgICBpZiAoSXNOdWxsYWJsZUNvbnN0cnVjdG9yKGV4cHJTcmMs IG91dCBjYWxsKSkKKyAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIHZhciBhcmdzID0g Y2FsbC5PcHRpb25hbEFyZ3VtZW50czsKKyAgICAgICAgICAgICAgICAgRGVidWcuQXNzZXJ0KGFy Z3MgIT0gbnVsbCAmJiAhKGFyZ3MgaXMgRXhwckxpc3QpKTsKK2RpZmYgLS1naXQgYS9zcmMvTWlj cm9zb2Z0LkNTaGFycC9zcmMvTWljcm9zb2Z0L0NTaGFycC9SdW50aW1lQmluZGVyL1NlbWFudGlj cy9UcmVlL0V4cHJlc3Npb25JdGVyYXRvci5jcyBiL3NyYy9NaWNyb3NvZnQuQ1NoYXJwL3NyYy9N aWNyb3NvZnQvQ1NoYXJwL1J1bnRpbWVCaW5kZXIvU2VtYW50aWNzL1RyZWUvRXhwcmVzc2lvbkl0 ZXJhdG9yLmNzCitpbmRleCA5NmVlMDMyNDIyLi45Mzk3NTQzZGU2IDEwMDY0NAorLS0tIGEvc3Jj L01pY3Jvc29mdC5DU2hhcnAvc3JjL01pY3Jvc29mdC9DU2hhcnAvUnVudGltZUJpbmRlci9TZW1h bnRpY3MvVHJlZS9FeHByZXNzaW9uSXRlcmF0b3IuY3MKKysrKyBiL3NyYy9NaWNyb3NvZnQuQ1No YXJwL3NyYy9NaWNyb3NvZnQvQ1NoYXJwL1J1bnRpbWVCaW5kZXIvU2VtYW50aWNzL1RyZWUvRXhw cmVzc2lvbkl0ZXJhdG9yLmNzCitAQCAtODMsOCArODMsOSBAQCBuYW1lc3BhY2UgTWljcm9zb2Z0 LkNTaGFycC5SdW50aW1lQmluZGVyLlNlbWFudGljcworICAgICAgICAgICAgICAgICBfcExpc3Qg PSBudWxsOworICAgICAgICAgICAgICAgICBfcEN1cnJlbnQgPSBudWxsOworICAgICAgICAgICAg IH0KKy0gICAgICAgICAgICBlbHNlIGlmIChwRXhwciBpcyBFeHByTGlzdCBwTGlzdCkKKysgICAg ICAgICAgICBlbHNlIGlmIChwRXhwciBpcyBFeHByTGlzdCkKKyAgICAgICAgICAgICB7CisrICAg ICAgICAgICAgICAgIEV4cHJMaXN0IHBMaXN0ID0gKEV4cHJMaXN0KXBFeHByOworICAgICAgICAg ICAgICAgICBfcExpc3QgPSBwTGlzdDsKKyAgICAgICAgICAgICAgICAgX3BDdXJyZW50ID0gcExp c3QuT3B0aW9uYWxFbGVtZW50OworICAgICAgICAgICAgIH0KK2RpZmYgLS1naXQgYS9zcmMvTWlj cm9zb2Z0LkNTaGFycC9zcmMvTWljcm9zb2Z0L0NTaGFycC9SdW50aW1lQmluZGVyL1NlbWFudGlj cy9UcmVlL1Zpc2l0b3JzL0V4cHJWaXNpdG9yQmFzZS5jcyBiL3NyYy9NaWNyb3NvZnQuQ1NoYXJw L3NyYy9NaWNyb3NvZnQvQ1NoYXJwL1J1bnRpbWVCaW5kZXIvU2VtYW50aWNzL1RyZWUvVmlzaXRv cnMvRXhwclZpc2l0b3JCYXNlLmNzCitpbmRleCAyYWJhYzRjZWNjLi44NGJjMGUxZDRjIDEwMDY0 NAorLS0tIGEvc3JjL01pY3Jvc29mdC5DU2hhcnAvc3JjL01pY3Jvc29mdC9DU2hhcnAvUnVudGlt ZUJpbmRlci9TZW1hbnRpY3MvVHJlZS9WaXNpdG9ycy9FeHByVmlzaXRvckJhc2UuY3MKKysrKyBi L3NyYy9NaWNyb3NvZnQuQ1NoYXJwL3NyYy9NaWNyb3NvZnQvQ1NoYXJwL1J1bnRpbWVCaW5kZXIv U2VtYW50aWNzL1RyZWUvVmlzaXRvcnMvRXhwclZpc2l0b3JCYXNlLmNzCitAQCAtMjEsOCArMjEs OSBAQCBuYW1lc3BhY2UgTWljcm9zb2Z0LkNTaGFycC5SdW50aW1lQmluZGVyLlNlbWFudGljcwor ICAgICAgICAgICAgICAgICByZXR1cm4gcFJlc3VsdDsKKyAgICAgICAgICAgICB9CisgCistICAg ICAgICAgICAgaWYgKHBFeHByIGlzIEV4cHJTdGF0ZW1lbnQgc3RhdGVtZW50KQorKyAgICAgICAg ICAgIGlmIChwRXhwciBpcyBFeHByU3RhdGVtZW50KQorICAgICAgICAgICAgIHsKKysgICAgICAg ICAgICAgICAgRXhwclN0YXRlbWVudCBzdGF0ZW1lbnQgPSAoRXhwclN0YXRlbWVudClwRXhwcjsK KyAgICAgICAgICAgICAgICAgcmV0dXJuIENhY2hlRXhwck1hcHBpbmcocEV4cHIsIERpc3BhdGNo U3RhdGVtZW50TGlzdChzdGF0ZW1lbnQpKTsKKyAgICAgICAgICAgICB9CisgCitAQCAtMjc1LDEx ICsyNzYsMTMgQEAgbmFtZXNwYWNlIE1pY3Jvc29mdC5DU2hhcnAuUnVudGltZUJpbmRlci5TZW1h bnRpY3MKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAg ICAgICAgICAgICAgIH0KKyAKKy0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIShuZXh0Tm9k ZSBpcyBFeHByTGlzdCBuZXh0KSkKKysgICAgICAgICAgICAgICAgICAgICAgICBFeHByTGlzdCBu ZXh0OworKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKG5leHROb2RlIGlzIEV4cHJMaXN0 KSkKKyAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGxpc3QuT3B0aW9uYWxOZXh0TGlzdE5vZGUgPSBWaXNpdChuZXh0Tm9kZSk7CisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAgICAgICB9 CisrICAgICAgICAgICAgICAgICAgICAgICAgbmV4dCA9IChFeHByTGlzdCluZXh0Tm9kZTsKKyAK KyAgICAgICAgICAgICAgICAgICAgICAgICBsaXN0ID0gbmV4dDsKKyAgICAgICAgICAgICAgICAg ICAgIH0KK2RpZmYgLS1naXQgYS9zcmMvTWljcm9zb2Z0LkNTaGFycC9zcmMvTWljcm9zb2Z0L0NT aGFycC9SdW50aW1lQmluZGVyL1NlbWFudGljcy9UcmVlL1Zpc2l0b3JzL0V4cHJlc3Npb25UcmVl UmV3cml0ZXIuY3MgYi9zcmMvTWljcm9zb2Z0LkNTaGFycC9zcmMvTWljcm9zb2Z0L0NTaGFycC9S dW50aW1lQmluZGVyL1NlbWFudGljcy9UcmVlL1Zpc2l0b3JzL0V4cHJlc3Npb25UcmVlUmV3cml0 ZXIuY3MKK2luZGV4IDk2MDc1YjZkMzguLmUwNTgxZmQxNGUgMTAwNjQ0CistLS0gYS9zcmMvTWlj cm9zb2Z0LkNTaGFycC9zcmMvTWljcm9zb2Z0L0NTaGFycC9SdW50aW1lQmluZGVyL1NlbWFudGlj cy9UcmVlL1Zpc2l0b3JzL0V4cHJlc3Npb25UcmVlUmV3cml0ZXIuY3MKKysrKyBiL3NyYy9NaWNy b3NvZnQuQ1NoYXJwL3NyYy9NaWNyb3NvZnQvQ1NoYXJwL1J1bnRpbWVCaW5kZXIvU2VtYW50aWNz L1RyZWUvVmlzaXRvcnMvRXhwcmVzc2lvblRyZWVSZXdyaXRlci5jcworQEAgLTUwLDggKzUwLDkg QEAgbmFtZXNwYWNlIE1pY3Jvc29mdC5DU2hhcnAuUnVudGltZUJpbmRlci5TZW1hbnRpY3MKKyAg ICAgICAgICAgICAvLyBGb3IgYXNzaWdubWVudHMsIHdlIGVpdGhlciBoYXZlIGEgbWVtYmVyIGFz c2lnbm1lbnQgb3IgYW4gaW5kZXhlZCBhc3NpZ25tZW50LgorICAgICAgICAgICAgIC8vRGVidWcu QXNzZXJ0KGFzc2lnbm1lbnQuR2V0TEhTKCkuaXNQUk9QKCkgfHwgYXNzaWdubWVudC5HZXRMSFMo KS5pc0ZJRUxEKCkgfHwgYXNzaWdubWVudC5HZXRMSFMoKS5pc0FSUkFZSU5ERVgoKSB8fCBhc3Np Z25tZW50LkdldExIUygpLmlzTE9DQUwoKSk7CisgICAgICAgICAgICAgRXhwciBsaHM7CistICAg ICAgICAgICAgaWYgKGFzc2lnbm1lbnQuTEhTIGlzIEV4cHJQcm9wZXJ0eSBwcm9wKQorKyAgICAg ICAgICAgIGlmIChhc3NpZ25tZW50LkxIUyBpcyBFeHByUHJvcGVydHkpCisgICAgICAgICAgICAg eworKyAgICAgICAgICAgICAgICBFeHByUHJvcGVydHkgcHJvcCA9IChFeHByUHJvcGVydHkpYXNz aWdubWVudC5MSFM7CisgICAgICAgICAgICAgICAgIGlmIChwcm9wLk9wdGlvbmFsQXJndW1lbnRz PT0gbnVsbCkKKyAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgLy8gUmVn dWxhciBwcm9wZXJ0eS4KK0BAIC0zMDQsOCArMzA1LDkgQEAgbmFtZXNwYWNlIE1pY3Jvc29mdC5D U2hhcnAuUnVudGltZUJpbmRlci5TZW1hbnRpY3MKKyAgICAgICAgICAgICAgICAgLy8gY2FuIGhh bmRsZSBpbiB0aGUgZ2VuZXJhbCBjYXNlIGFsbCBpbXBsaWNpdCBib3hpbmcgY29udmVyc2lvbnMu IFJpZ2h0IG5vdyBpdCAKKyAgICAgICAgICAgICAgICAgLy8gcmVxdWlyZXMgdGhhdCBhbGwgYXJn dW1lbnRzIHRvIGEgY2FsbCB0aGF0IG5lZWQgdG8gYmUgYm94ZWQgYmUgZXhwbGljaXRseSBib3hl ZC4KKyAKKy0gICAgICAgICAgICAgICAgaWYgKHBPYmplY3QgIT0gbnVsbCAmJiBwT2JqZWN0IGlz IEV4cHJDYXN0IGNhc3QgJiYgY2FzdC5Jc0JveGluZ0Nhc3QpCisrICAgICAgICAgICAgICAgIGlm IChwT2JqZWN0ICE9IG51bGwgJiYgcE9iamVjdCBpcyBFeHByQ2FzdCAmJiAoKEV4cHJDYXN0KXBP YmplY3QpLklzQm94aW5nQ2FzdCkKKyAgICAgICAgICAgICAgICAgeworKyAgICAgICAgICAgICAg ICAgICAgRXhwckNhc3QgY2FzdCA9IChFeHByQ2FzdCkgcE9iamVjdDsKKyAgICAgICAgICAgICAg ICAgICAgIHBPYmplY3QgPSBjYXN0LkFyZ3VtZW50OworICAgICAgICAgICAgICAgICB9CisgICAg ICAgICAgICAgICAgIHBPYmplY3QgPSBWaXNpdChwT2JqZWN0KTsKK0BAIC01NzYsOCArNTc4LDkg QEAgbmFtZXNwYWNlIE1pY3Jvc29mdC5DU2hhcnAuUnVudGltZUJpbmRlci5TZW1hbnRpY3MKKyAg ICAgICAgICAgICBpZiAodWRjYWxsICE9IG51bGwpCisgICAgICAgICAgICAgeworICAgICAgICAg ICAgICAgICBEZWJ1Zy5Bc3NlcnQodWRjYWxsLktpbmQgPT0gRXhwcmVzc2lvbktpbmQuQ2FsbCB8 fCB1ZGNhbGwuS2luZCA9PSBFeHByZXNzaW9uS2luZC5Vc2VyTG9naWNhbE9wKTsKKy0gICAgICAg ICAgICAgICAgaWYgKHVkY2FsbCBpcyBFeHByQ2FsbCBhc2NhbGwpCisrICAgICAgICAgICAgICAg IGlmICh1ZGNhbGwgaXMgRXhwckNhbGwpCisgICAgICAgICAgICAgICAgIHsKKysgICAgICAgICAg ICAgICAgICAgIEV4cHJDYWxsIGFzY2FsbCA9IChFeHByQ2FsbCl1ZGNhbGw7CisgICAgICAgICAg ICAgICAgICAgICBFeHByTGlzdCBhcmdzID0gKEV4cHJMaXN0KWFzY2FsbC5PcHRpb25hbEFyZ3Vt ZW50czsKKyAgICAgICAgICAgICAgICAgICAgIERlYnVnLkFzc2VydChhcmdzLk9wdGlvbmFsTmV4 dExpc3ROb2RlLktpbmQgIT0gRXhwcmVzc2lvbktpbmQuTGlzdCk7CisgICAgICAgICAgICAgICAg ICAgICBwMSA9IGFyZ3MuT3B0aW9uYWxFbGVtZW50OworQEAgLTcwOCw4ICs3MTEsOSBAQCBuYW1l c3BhY2UgTWljcm9zb2Z0LkNTaGFycC5SdW50aW1lQmluZGVyLlNlbWFudGljcworICAgICAgICAg ICAgIEV4cHJCbG9jayBib2R5ID0gYW5vbm1ldGguT3B0aW9uYWxCb2R5OworIAorICAgICAgICAg ICAgIC8vIFRoZSBtb3N0IGxpa2VseSBjYXNlOgorLSAgICAgICAgICAgIGlmIChib2R5Lk9wdGlv bmFsU3RhdGVtZW50cyBpcyBFeHByUmV0dXJuIHJldCkKKysgICAgICAgICAgICBpZiAoYm9keS5P cHRpb25hbFN0YXRlbWVudHMgaXMgRXhwclJldHVybikKKyAgICAgICAgICAgICB7CisrICAgICAg ICAgICAgICAgIEV4cHJSZXR1cm4gcmV0ID0gKEV4cHJSZXR1cm4pYm9keS5PcHRpb25hbFN0YXRl bWVudHM7CisgICAgICAgICAgICAgICAgIERlYnVnLkFzc2VydChyZXQuT3B0aW9uYWxPYmplY3Qg IT0gbnVsbCk7CisgICAgICAgICAgICAgICAgIHJldHVybiBWaXNpdChyZXQuT3B0aW9uYWxPYmpl Y3QpOworICAgICAgICAgICAgIH0KK0BAIC04MzEsOCArODM1LDkgQEAgbmFtZXNwYWNlIE1pY3Jv c29mdC5DU2hhcnAuUnVudGltZUJpbmRlci5TZW1hbnRpY3MKKyAgICAgICAgICAgICAgICAgRXhw ciBwVURDb252ZXJzaW9uID0gY2FsbD8uUENvbnZlcnNpb25zOworICAgICAgICAgICAgICAgICBp ZiAocFVEQ29udmVyc2lvbiAhPSBudWxsKQorICAgICAgICAgICAgICAgICB7CistICAgICAgICAg ICAgICAgICAgICBpZiAocFVEQ29udmVyc2lvbiBpcyBFeHByQ2FsbCBjb252Q2FsbCkKKysgICAg ICAgICAgICAgICAgICAgIGlmIChwVURDb252ZXJzaW9uIGlzIEV4cHJDYWxsKQorICAgICAgICAg ICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICAgICAgICAgIEV4cHJDYWxsIGNvbnZDYWxs ID0gKEV4cHJDYWxsKXBVRENvbnZlcnNpb247CisgICAgICAgICAgICAgICAgICAgICAgICAgRXhw ciBwVURDb252ZXJzaW9uQXJndW1lbnQgPSBjb252Q2FsbC5PcHRpb25hbEFyZ3VtZW50czsKKyAg ICAgICAgICAgICAgICAgICAgICAgICBpZiAoSXNOdWxsYWJsZVZhbHVlQWNjZXNzKHBVRENvbnZl cnNpb25Bcmd1bWVudCwgcEFyZ3VtZW50KSkKKyAgICAgICAgICAgICAgICAgICAgICAgICB7CitA QCAtMTE3NCwyMyArMTE3OSwyNSBAQCBuYW1lc3BhY2UgTWljcm9zb2Z0LkNTaGFycC5SdW50aW1l QmluZGVyLlNlbWFudGljcworICAgICAgICAgcHJpdmF0ZSBib29sIElzTnVsbGFibGVWYWx1ZUFj Y2VzcyhFeHByIHBFeHByLCBFeHByIHBPYmplY3QpCisgICAgICAgICB7CisgICAgICAgICAgICAg RGVidWcuQXNzZXJ0KHBFeHByICE9IG51bGwpOworLSAgICAgICAgICAgIHJldHVybiBwRXhwciBp cyBFeHByUHJvcGVydHkgcHJvcCAmJiBwcm9wLk1lbWJlckdyb3VwLk9wdGlvbmFsT2JqZWN0ID09 IHBPYmplY3QgJiYgcE9iamVjdC5UeXBlLklzTnVsbGFibGVUeXBlKCk7CisrICAgICAgICAgICAg cmV0dXJuIHBFeHByIGlzIEV4cHJQcm9wZXJ0eSAmJiAoKEV4cHJQcm9wZXJ0eSlwRXhwcikuTWVt YmVyR3JvdXAuT3B0aW9uYWxPYmplY3QgPT0gcE9iamVjdCAmJiBwT2JqZWN0LlR5cGUuSXNOdWxs YWJsZVR5cGUoKTsKKyAgICAgICAgIH0KKyAKKyAgICAgICAgIHByaXZhdGUgYm9vbCBJc0RlbGVn YXRlQ29uc3RydWN0b3JDYWxsKEV4cHIgcEV4cHIpCisgICAgICAgICB7CisgICAgICAgICAgICAg RGVidWcuQXNzZXJ0KHBFeHByICE9IG51bGwpOworLSAgICAgICAgICAgIGlmICghKHBFeHByIGlz IEV4cHJDYWxsIHBDYWxsKSkKKysgICAgICAgICAgICBFeHByQ2FsbCBwQ2FsbDsKKysgICAgICAg ICAgICBpZiAoIShwRXhwciBpcyBFeHByQ2FsbCkpCisgICAgICAgICAgICAgeworICAgICAgICAg ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgfQorKyAgICAgICAgICAgIHBDYWxs ID0gKEV4cHJDYWxsKXBFeHByOworIAorICAgICAgICAgICAgIHJldHVybiBwQ2FsbC5NZXRoV2l0 aEluc3QuTWV0aCgpICE9IG51bGwgJiYKKyAgICAgICAgICAgICAgICAgcENhbGwuTWV0aFdpdGhJ bnN0Lk1ldGgoKS5Jc0NvbnN0cnVjdG9yKCkgJiYKKyAgICAgICAgICAgICAgICAgcENhbGwuVHlw ZS5pc0RlbGVnYXRlVHlwZSgpICYmCisgICAgICAgICAgICAgICAgIHBDYWxsLk9wdGlvbmFsQXJn dW1lbnRzICE9IG51bGwgJiYKKy0gICAgICAgICAgICAgICAgcENhbGwuT3B0aW9uYWxBcmd1bWVu dHMgaXMgRXhwckxpc3QgbGlzdCAmJgorLSAgICAgICAgICAgICAgICBsaXN0Lk9wdGlvbmFsTmV4 dExpc3ROb2RlLktpbmQgPT0gRXhwcmVzc2lvbktpbmQuRnVuY3Rpb25Qb2ludGVyOworKyAgICAg ICAgICAgICAgICAocENhbGwuT3B0aW9uYWxBcmd1bWVudHMgaXMgRXhwckxpc3QpICYmCisrICAg ICAgICAgICAgICAgICgoRXhwckxpc3QpcENhbGwuT3B0aW9uYWxBcmd1bWVudHMpLk9wdGlvbmFs TmV4dExpc3ROb2RlLktpbmQgPT0gRXhwcmVzc2lvbktpbmQuRnVuY3Rpb25Qb2ludGVyOworICAg ICAgICAgfQorICAgICAgICAgcHJpdmF0ZSBzdGF0aWMgYm9vbCBpc0VudW1Ub0RlY2ltYWxDb252 ZXJzaW9uKENUeXBlIGFyZ3R5cGUsIENUeXBlIGRlc3R0eXBlKQorICAgICAgICAgeworZGlmZiAt LWdpdCBhL3NyYy9TeXN0ZW0uQ29sbGVjdGlvbnMvc3JjL1N5c3RlbS9Db2xsZWN0aW9ucy9HZW5l cmljL1NvcnRlZFNldC5UcmVlU3ViU2V0LmNzIGIvc3JjL1N5c3RlbS5Db2xsZWN0aW9ucy9zcmMv U3lzdGVtL0NvbGxlY3Rpb25zL0dlbmVyaWMvU29ydGVkU2V0LlRyZWVTdWJTZXQuY3MKK2luZGV4 IDRlYjgxN2MwYWYuLjY3MTYzNmY0MjggMTAwNjQ0CistLS0gYS9zcmMvU3lzdGVtLkNvbGxlY3Rp b25zL3NyYy9TeXN0ZW0vQ29sbGVjdGlvbnMvR2VuZXJpYy9Tb3J0ZWRTZXQuVHJlZVN1YlNldC5j cworKysrIGIvc3JjL1N5c3RlbS5Db2xsZWN0aW9ucy9zcmMvU3lzdGVtL0NvbGxlY3Rpb25zL0dl bmVyaWMvU29ydGVkU2V0LlRyZWVTdWJTZXQuY3MKK0BAIC0zNTIsNyArMzUyLDEwIEBAIG5hbWVz cGFjZSBTeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYworICAgICAgICAgICAgICAgICB0aHJvdyBu ZXcgUGxhdGZvcm1Ob3RTdXBwb3J0ZWRFeGNlcHRpb24oKTsKKyAgICAgICAgICAgICB9CisgCist ICAgICAgICAgICAgcHJvdGVjdGVkIG92ZXJyaWRlIHZvaWQgT25EZXNlcmlhbGl6YXRpb24oT2Jq ZWN0IHNlbmRlcikgPT4gdGhyb3cgbmV3IFBsYXRmb3JtTm90U3VwcG9ydGVkRXhjZXB0aW9uKCk7 CisrICAgICAgICAgICAgcHJvdGVjdGVkIG92ZXJyaWRlIHZvaWQgT25EZXNlcmlhbGl6YXRpb24o T2JqZWN0IHNlbmRlcikKKysgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgIHRocm93IG5l dyBQbGF0Zm9ybU5vdFN1cHBvcnRlZEV4Y2VwdGlvbigpOworKyAgICAgICAgICAgIH0KKyAgICAg ICAgIH0KKyAgICAgfQorIH0KK2RpZmYgLS1naXQgYS9zcmMvU3lzdGVtLkRyYXdpbmcuQ29tbW9u L3NyYy9TeXN0ZW0vRHJhd2luZy9CcnVzaC5jcyBiL3NyYy9TeXN0ZW0uRHJhd2luZy5Db21tb24v c3JjL1N5c3RlbS9EcmF3aW5nL0JydXNoLmNzCitpbmRleCAwODkwNjllZDY0Li5iMjAyZWY3NzM2 IDEwMDY0NAorLS0tIGEvc3JjL1N5c3RlbS5EcmF3aW5nLkNvbW1vbi9zcmMvU3lzdGVtL0RyYXdp bmcvQnJ1c2guY3MKKysrKyBiL3NyYy9TeXN0ZW0uRHJhd2luZy5Db21tb24vc3JjL1N5c3RlbS9E cmF3aW5nL0JydXNoLmNzCitAQCAtNjIsNiArNjIsNiBAQCBuYW1lc3BhY2UgU3lzdGVtLkRyYXdp bmcKKyAgICAgICAgICAgICB9CisgICAgICAgICB9CisgCistICAgICAgICB+QnJ1c2goKSA9PiBE aXNwb3NlKGZhbHNlKTsKKysgICAgICAgIH5CcnVzaCgpIHsgRGlzcG9zZShmYWxzZSk7IH0KKyAg ICAgfQorIH0KK2RpZmYgLS1naXQgYS9zcmMvU3lzdGVtLkRyYXdpbmcuQ29tbW9uL3NyYy9TeXN0 ZW0vRHJhd2luZy9EZXNpZ24vQ2F0ZWdvcnlOYW1lQ29sbGVjdGlvbi5jcyBiL3NyYy9TeXN0ZW0u RHJhd2luZy5Db21tb24vc3JjL1N5c3RlbS9EcmF3aW5nL0Rlc2lnbi9DYXRlZ29yeU5hbWVDb2xs ZWN0aW9uLmNzCitpbmRleCAwNjU0OThjM2FkLi5mY2M0ZjhiMmI2IDEwMDY0NAorLS0tIGEvc3Jj L1N5c3RlbS5EcmF3aW5nLkNvbW1vbi9zcmMvU3lzdGVtL0RyYXdpbmcvRGVzaWduL0NhdGVnb3J5 TmFtZUNvbGxlY3Rpb24uY3MKKysrKyBiL3NyYy9TeXN0ZW0uRHJhd2luZy5Db21tb24vc3JjL1N5 c3RlbS9EcmF3aW5nL0Rlc2lnbi9DYXRlZ29yeU5hbWVDb2xsZWN0aW9uLmNzCitAQCAtMTYsMzQg KzE2LDM0IEBAIG5hbWVzcGFjZSBTeXN0ZW0uRHJhd2luZy5EZXNpZ24KKyAgICAgICAgIC8vLyBJ bml0aWFsaXplcyBhIG5ldyBpbnN0YW5jZSBvZiA8c2VlIGNyZWY9J0NhdGVnb3J5TmFtZUNvbGxl Y3Rpb24nLz4gYmFzZWQgb24gYW5vdGhlcgorICAgICAgICAgLy8vIDxzZWUgY3JlZj0nQ2F0ZWdv cnlOYW1lQ29sbGVjdGlvbicvPi4KKyAgICAgICAgIC8vLyA8L3N1bW1hcnk+CistICAgICAgICBw dWJsaWMgQ2F0ZWdvcnlOYW1lQ29sbGVjdGlvbihDYXRlZ29yeU5hbWVDb2xsZWN0aW9uIHZhbHVl KSA9PiBJbm5lckxpc3QuQWRkUmFuZ2UodmFsdWUpOworKyAgICAgICAgcHVibGljIENhdGVnb3J5 TmFtZUNvbGxlY3Rpb24oQ2F0ZWdvcnlOYW1lQ29sbGVjdGlvbiB2YWx1ZSkgeyBJbm5lckxpc3Qu QWRkUmFuZ2UodmFsdWUpOyB9CisgCisgICAgICAgICAvLy8gPHN1bW1hcnk+CisgICAgICAgICAv Ly8gSW5pdGlhbGl6ZXMgYSBuZXcgaW5zdGFuY2Ugb2YgPHNlZSBjcmVmPSdDYXRlZ29yeU5hbWVD b2xsZWN0aW9uJy8+IGNvbnRhaW5pbmcgYW55IGFycmF5IG9mCisgICAgICAgICAvLy8gPHNlZSBj cmVmPSdzdHJpbmcnLz4gb2JqZWN0cy4KKyAgICAgICAgIC8vLyA8L3N1bW1hcnk+CistICAgICAg ICBwdWJsaWMgQ2F0ZWdvcnlOYW1lQ29sbGVjdGlvbihzdHJpbmdbXSB2YWx1ZSkgPT4gSW5uZXJM aXN0LkFkZFJhbmdlKHZhbHVlKTsKKysgICAgICAgIHB1YmxpYyBDYXRlZ29yeU5hbWVDb2xsZWN0 aW9uKHN0cmluZ1tdIHZhbHVlKSB7IElubmVyTGlzdC5BZGRSYW5nZSh2YWx1ZSk7IH0KKyAKKyAg ICAgICAgIC8vLyA8c3VtbWFyeT4KKyAgICAgICAgIC8vLyBSZXByZXNlbnRzIHRoZSBlbnRyeSBh dCB0aGUgc3BlY2lmaWVkIGluZGV4IG9mIHRoZSA8c2VlIGNyZWY9J3N0cmluZycvPi4KKyAgICAg ICAgIC8vLyA8L3N1bW1hcnk+CistICAgICAgICBwdWJsaWMgc3RyaW5nIHRoaXNbaW50IGluZGV4 XSA9PiAoKHN0cmluZykoSW5uZXJMaXN0W2luZGV4XSkpOworKyAgICAgICAgcHVibGljIHN0cmlu ZyB0aGlzW2ludCBpbmRleF0geyBnZXQgeyByZXR1cm4gKChzdHJpbmcpKElubmVyTGlzdFtpbmRl eF0pKTsgfSB9CisgCisgICAgICAgICAvLy8gPHN1bW1hcnk+CisgICAgICAgICAvLy8gR2V0cyBh IHZhbHVlIGluZGljYXRpbmcgd2hldGhlciB0aGUgIDxzZWUgY3JlZj0nQ2F0ZWdvcnlOYW1lQ29s bGVjdGlvbicvPiBjb250YWlucyB0aGUgc3BlY2lmaWVkCisgICAgICAgICAvLy8gPHNlZSBjcmVm PSdzdHJpbmcnLz4uCisgICAgICAgICAvLy8gPC9zdW1tYXJ5PgorLSAgICAgICAgcHVibGljIGJv b2wgQ29udGFpbnMoc3RyaW5nIHZhbHVlKSA9PiBJbm5lckxpc3QuQ29udGFpbnModmFsdWUpOwor KyAgICAgICAgcHVibGljIGJvb2wgQ29udGFpbnMoc3RyaW5nIHZhbHVlKSB7IHJldHVybiBJbm5l ckxpc3QuQ29udGFpbnModmFsdWUpOyB9CisgCisgICAgICAgICAvLy8gPHN1bW1hcnk+CisgICAg ICAgICAvLy8gQ29waWVzIHRoZSA8c2VlIGNyZWY9J0NhdGVnb3J5TmFtZUNvbGxlY3Rpb24nLz4g dmFsdWVzIHRvIGEgb25lLWRpbWVuc2lvbmFsIDxzZWUgY3JlZj0nQXJyYXknLz4gaW5zdGFuY2UK KyAgICAgICAgIC8vLyBhdCB0aGUgc3BlY2lmaWVkIGluZGV4LgorICAgICAgICAgLy8vIDwvc3Vt bWFyeT4KKy0gICAgICAgIHB1YmxpYyB2b2lkIENvcHlUbyhzdHJpbmdbXSBhcnJheSwgaW50IGlu ZGV4KSA9PiBJbm5lckxpc3QuQ29weVRvKGFycmF5LCBpbmRleCk7CisrICAgICAgICBwdWJsaWMg dm9pZCBDb3B5VG8oc3RyaW5nW10gYXJyYXksIGludCBpbmRleCkgeyBJbm5lckxpc3QuQ29weVRv KGFycmF5LCBpbmRleCk7IH0KKyAKKyAgICAgICAgIC8vLyA8c3VtbWFyeT4KKyAgICAgICAgIC8v LyBSZXR1cm5zIHRoZSBpbmRleCBvZiBhIDxzZWUgY3JlZj0nc3RyaW5nJy8+IGluICB0aGUgPHNl ZSBjcmVmPSdDYXRlZ29yeU5hbWVDb2xsZWN0aW9uJy8+IC4KKyAgICAgICAgIC8vLyA8L3N1bW1h cnk+CistICAgICAgICBwdWJsaWMgaW50IEluZGV4T2Yoc3RyaW5nIHZhbHVlKSA9PiBJbm5lckxp c3QuSW5kZXhPZih2YWx1ZSk7CisrICAgICAgICBwdWJsaWMgaW50IEluZGV4T2Yoc3RyaW5nIHZh bHVlKSB7IHJldHVybiBJbm5lckxpc3QuSW5kZXhPZih2YWx1ZSk7IH0KKyAgICAgfQorIH0KK2Rp ZmYgLS1naXQgYS9zcmMvU3lzdGVtLkRyYXdpbmcuQ29tbW9uL3NyYy9TeXN0ZW0vRHJhd2luZy9E cmF3aW5nMkQvQ3VzdG9tTGluZUNhcC5jcyBiL3NyYy9TeXN0ZW0uRHJhd2luZy5Db21tb24vc3Jj L1N5c3RlbS9EcmF3aW5nL0RyYXdpbmcyRC9DdXN0b21MaW5lQ2FwLmNzCitpbmRleCAxNTI0NzQx MTdkLi5kOTc2OTc3OGM3IDEwMDY0NAorLS0tIGEvc3JjL1N5c3RlbS5EcmF3aW5nLkNvbW1vbi9z cmMvU3lzdGVtL0RyYXdpbmcvRHJhd2luZzJEL0N1c3RvbUxpbmVDYXAuY3MKKysrKyBiL3NyYy9T eXN0ZW0uRHJhd2luZy5Db21tb24vc3JjL1N5c3RlbS9EcmF3aW5nL0RyYXdpbmcyRC9DdXN0b21M aW5lQ2FwLmNzCitAQCAtMzgsNyArMzgsNyBAQCBuYW1lc3BhY2UgU3lzdGVtLkRyYXdpbmcuRHJh d2luZzJECisgICAgICAgICAgICAgU2V0TmF0aXZlTGluZUNhcChuYXRpdmVMaW5lQ2FwKTsKKyAg ICAgICAgIH0KKyAKKy0gICAgICAgIGludGVybmFsIEN1c3RvbUxpbmVDYXAoSW50UHRyIG5hdGl2 ZUxpbmVDYXApID0+IFNldE5hdGl2ZUxpbmVDYXAobmF0aXZlTGluZUNhcCk7CisrICAgICAgICBp bnRlcm5hbCBDdXN0b21MaW5lQ2FwKEludFB0ciBuYXRpdmVMaW5lQ2FwKSB7IFNldE5hdGl2ZUxp bmVDYXAobmF0aXZlTGluZUNhcCk7IH0KKyAKKyAgICAgICAgIGludGVybmFsIHZvaWQgU2V0TmF0 aXZlTGluZUNhcChJbnRQdHIgaGFuZGxlKQorICAgICAgICAgeworQEAgLTcyLDcgKzcyLDcgQEAg bmFtZXNwYWNlIFN5c3RlbS5EcmF3aW5nLkRyYXdpbmcyRAorICAgICAgICAgICAgIF9kaXNwb3Nl ZCA9IHRydWU7CisgICAgICAgICB9CisgCistICAgICAgICB+Q3VzdG9tTGluZUNhcCgpID0+IERp c3Bvc2UoZmFsc2UpOworKyAgICAgICAgfkN1c3RvbUxpbmVDYXAoKSB7IERpc3Bvc2UoZmFsc2Up OyB9CisgCisgICAgICAgICBwdWJsaWMgb2JqZWN0IENsb25lKCkKKyAgICAgICAgIHsKK2RpZmYg LS1naXQgYS9zcmMvU3lzdGVtLkRyYXdpbmcuQ29tbW9uL3NyYy9TeXN0ZW0vRHJhd2luZy9EcmF3 aW5nMkQvR3JhcGhpY3NQYXRoSXRlcmF0b3IuY3MgYi9zcmMvU3lzdGVtLkRyYXdpbmcuQ29tbW9u L3NyYy9TeXN0ZW0vRHJhd2luZy9EcmF3aW5nMkQvR3JhcGhpY3NQYXRoSXRlcmF0b3IuY3MKK2lu ZGV4IGNiOWMzNGM2MmEuLjNiNTUyZjFiYWYgMTAwNjQ0CistLS0gYS9zcmMvU3lzdGVtLkRyYXdp bmcuQ29tbW9uL3NyYy9TeXN0ZW0vRHJhd2luZy9EcmF3aW5nMkQvR3JhcGhpY3NQYXRoSXRlcmF0 b3IuY3MKKysrKyBiL3NyYy9TeXN0ZW0uRHJhd2luZy5Db21tb24vc3JjL1N5c3RlbS9EcmF3aW5n L0RyYXdpbmcyRC9HcmFwaGljc1BhdGhJdGVyYXRvci5jcworQEAgLTU4LDcgKzU4LDcgQEAgbmFt ZXNwYWNlIFN5c3RlbS5EcmF3aW5nLkRyYXdpbmcyRAorICAgICAgICAgICAgIH0KKyAgICAgICAg IH0KKyAKKy0gICAgICAgIH5HcmFwaGljc1BhdGhJdGVyYXRvcigpID0+IERpc3Bvc2UoZmFsc2Up OworKyAgICAgICAgfkdyYXBoaWNzUGF0aEl0ZXJhdG9yKCkgeyBEaXNwb3NlKGZhbHNlKTsgfQor IAorICAgICAgICAgcHVibGljIGludCBOZXh0U3VicGF0aChvdXQgaW50IHN0YXJ0SW5kZXgsIG91 dCBpbnQgZW5kSW5kZXgsIG91dCBib29sIGlzQ2xvc2VkKQorICAgICAgICAgeworZGlmZiAtLWdp dCBhL3NyYy9TeXN0ZW0uRHJhd2luZy5Db21tb24vc3JjL1N5c3RlbS9EcmF3aW5nL0RyYXdpbmcy RC9HcmFwaGljc1N0YXRlLmNzIGIvc3JjL1N5c3RlbS5EcmF3aW5nLkNvbW1vbi9zcmMvU3lzdGVt L0RyYXdpbmcvRHJhd2luZzJEL0dyYXBoaWNzU3RhdGUuY3MKK2luZGV4IGM3ZDA4Njc1NmUuLjYx ZGU5NDhiMmQgMTAwNjQ0CistLS0gYS9zcmMvU3lzdGVtLkRyYXdpbmcuQ29tbW9uL3NyYy9TeXN0 ZW0vRHJhd2luZy9EcmF3aW5nMkQvR3JhcGhpY3NTdGF0ZS5jcworKysrIGIvc3JjL1N5c3RlbS5E cmF3aW5nLkNvbW1vbi9zcmMvU3lzdGVtL0RyYXdpbmcvRHJhd2luZzJEL0dyYXBoaWNzU3RhdGUu Y3MKK0BAIC04LDcgKzgsNyBAQCBuYW1lc3BhY2UgU3lzdGVtLkRyYXdpbmcuRHJhd2luZzJECisg ICAgIHsKKyAgICAgICAgIGludGVybmFsIGludCBuYXRpdmVTdGF0ZTsKKyAKKy0gICAgICAgIGlu dGVybmFsIEdyYXBoaWNzU3RhdGUoaW50IG5hdGl2ZVN0YXRlKSA9PiB0aGlzLm5hdGl2ZVN0YXRl ID0gbmF0aXZlU3RhdGU7CisrICAgICAgICBpbnRlcm5hbCBHcmFwaGljc1N0YXRlKGludCBuYXRp dmVTdGF0ZSkgeyB0aGlzLm5hdGl2ZVN0YXRlID0gbmF0aXZlU3RhdGU7IH0KKyAgICAgfQorIH0K KyAKK2RpZmYgLS1naXQgYS9zcmMvU3lzdGVtLkRyYXdpbmcuQ29tbW9uL3NyYy9TeXN0ZW0vRHJh d2luZy9EcmF3aW5nMkQvUmVnaW9uRGF0YS5jcyBiL3NyYy9TeXN0ZW0uRHJhd2luZy5Db21tb24v c3JjL1N5c3RlbS9EcmF3aW5nL0RyYXdpbmcyRC9SZWdpb25EYXRhLmNzCitpbmRleCA1OTZiODYy MmViLi5kZmEyNDQ2Yzg3IDEwMDY0NAorLS0tIGEvc3JjL1N5c3RlbS5EcmF3aW5nLkNvbW1vbi9z cmMvU3lzdGVtL0RyYXdpbmcvRHJhd2luZzJEL1JlZ2lvbkRhdGEuY3MKKysrKyBiL3NyYy9TeXN0 ZW0uRHJhd2luZy5Db21tb24vc3JjL1N5c3RlbS9EcmF3aW5nL0RyYXdpbmcyRC9SZWdpb25EYXRh LmNzCitAQCAtNiw3ICs2LDcgQEAgbmFtZXNwYWNlIFN5c3RlbS5EcmF3aW5nLkRyYXdpbmcyRAor IHsKKyAgICAgcHVibGljIHNlYWxlZCBjbGFzcyBSZWdpb25EYXRhCisgICAgIHsKKy0gICAgICAg IGludGVybmFsIFJlZ2lvbkRhdGEoYnl0ZVtdIGRhdGEpID0+IERhdGEgPSBkYXRhOworKyAgICAg ICAgaW50ZXJuYWwgUmVnaW9uRGF0YShieXRlW10gZGF0YSkgeyBEYXRhID0gZGF0YTsgfQorIAor ICAgICAgICAgcHVibGljIGJ5dGVbXSBEYXRhIHsgZ2V0OyBzZXQ7IH0KKyAgICAgfQorZGlmZiAt LWdpdCBhL3NyYy9TeXN0ZW0uRHJhd2luZy5Db21tb24vc3JjL1N5c3RlbS9EcmF3aW5nL1RleHQv Rm9udENvbGxlY3Rpb24uY3MgYi9zcmMvU3lzdGVtLkRyYXdpbmcuQ29tbW9uL3NyYy9TeXN0ZW0v RHJhd2luZy9UZXh0L0ZvbnRDb2xsZWN0aW9uLmNzCitpbmRleCBkZjJhYzVjOGMyLi5hNDUxZGM2 MjFkIDEwMDY0NAorLS0tIGEvc3JjL1N5c3RlbS5EcmF3aW5nLkNvbW1vbi9zcmMvU3lzdGVtL0Ry YXdpbmcvVGV4dC9Gb250Q29sbGVjdGlvbi5jcworKysrIGIvc3JjL1N5c3RlbS5EcmF3aW5nLkNv bW1vbi9zcmMvU3lzdGVtL0RyYXdpbmcvVGV4dC9Gb250Q29sbGVjdGlvbi5jcworQEAgLTE0LDcg KzE0LDcgQEAgbmFtZXNwYWNlIFN5c3RlbS5EcmF3aW5nLlRleHQKKyAgICAgeworICAgICAgICAg aW50ZXJuYWwgSW50UHRyIF9uYXRpdmVGb250Q29sbGVjdGlvbjsKKyAKKy0gICAgICAgIGludGVy bmFsIEZvbnRDb2xsZWN0aW9uKCkgPT4gX25hdGl2ZUZvbnRDb2xsZWN0aW9uID0gSW50UHRyLlpl cm87CisrICAgICAgICBpbnRlcm5hbCBGb250Q29sbGVjdGlvbigpIHsgX25hdGl2ZUZvbnRDb2xs ZWN0aW9uID0gSW50UHRyLlplcm87IH0KKyAKKyAgICAgICAgIC8vLyA8c3VtbWFyeT4KKyAgICAg ICAgIC8vLyBEaXNwb3NlcyBvZiB0aGlzIDxzZWUgY3JlZj0nU3lzdGVtLkRyYXdpbmcuVGV4dC5G b250Q29sbGVjdGlvbicvPgorQEAgLTU4LDYgKzU4LDYgQEAgbmFtZXNwYWNlIFN5c3RlbS5EcmF3 aW5nLlRleHQKKyAgICAgICAgICAgICB9CisgICAgICAgICB9CisgCistICAgICAgICB+Rm9udENv bGxlY3Rpb24oKSA9PiBEaXNwb3NlKGZhbHNlKTsKKysgICAgICAgIH5Gb250Q29sbGVjdGlvbigp IHsgRGlzcG9zZShmYWxzZSk7IH0KKyAgICAgfQorIH0KK2RpZmYgLS1naXQgYS9zcmMvU3lzdGVt LkxpbnEuRXhwcmVzc2lvbnMvc3JjL1N5c3RlbS9EeW5hbWljL1V0aWxzL1R5cGVFeHRlbnNpb25z LmNzIGIvc3JjL1N5c3RlbS5MaW5xLkV4cHJlc3Npb25zL3NyYy9TeXN0ZW0vRHluYW1pYy9VdGls cy9UeXBlRXh0ZW5zaW9ucy5jcworaW5kZXggYzQ1Y2FiYTA5My4uZWY5YTI1MjAzZCAxMDA2NDQK Ky0tLSBhL3NyYy9TeXN0ZW0uTGlucS5FeHByZXNzaW9ucy9zcmMvU3lzdGVtL0R5bmFtaWMvVXRp bHMvVHlwZUV4dGVuc2lvbnMuY3MKKysrKyBiL3NyYy9TeXN0ZW0uTGlucS5FeHByZXNzaW9ucy9z cmMvU3lzdGVtL0R5bmFtaWMvVXRpbHMvVHlwZUV4dGVuc2lvbnMuY3MKK0BAIC02NSw3ICs2NSw4 IEBAIG5hbWVzcGFjZSBTeXN0ZW0uRHluYW1pYy5VdGlscworICAgICAgICAgaW50ZXJuYWwgc3Rh dGljIFBhcmFtZXRlckluZm9bXSBHZXRQYXJhbWV0ZXJzQ2FjaGVkKHRoaXMgTWV0aG9kQmFzZSBt ZXRob2QpCisgICAgICAgICB7CisgICAgICAgICAgICAgQ2FjaGVEaWN0PE1ldGhvZEJhc2UsIFBh cmFtZXRlckluZm9bXT4gcGljID0gc19wYXJhbUluZm9DYWNoZTsKKy0gICAgICAgICAgICBpZiAo IXBpYy5UcnlHZXRWYWx1ZShtZXRob2QsIG91dCBQYXJhbWV0ZXJJbmZvW10gcGlzKSkKKysgICAg ICAgICAgICBQYXJhbWV0ZXJJbmZvW10gcGlzOworKyAgICAgICAgICAgIGlmICghcGljLlRyeUdl dFZhbHVlKG1ldGhvZCwgb3V0IHBpcykpCisgICAgICAgICAgICAgeworICAgICAgICAgICAgICAg ICBwaXMgPSBtZXRob2QuR2V0UGFyYW1ldGVycygpOworIAorZGlmZiAtLWdpdCBhL3NyYy9TeXN0 ZW0uTGlucS5FeHByZXNzaW9ucy9zcmMvU3lzdGVtL0xpbnEvRXhwcmVzc2lvbnMvQ29tcGlsZXIv TGFtYmRhQ29tcGlsZXIuRXhwcmVzc2lvbnMuY3MgYi9zcmMvU3lzdGVtLkxpbnEuRXhwcmVzc2lv bnMvc3JjL1N5c3RlbS9MaW5xL0V4cHJlc3Npb25zL0NvbXBpbGVyL0xhbWJkYUNvbXBpbGVyLkV4 cHJlc3Npb25zLmNzCitpbmRleCBkOGIxYzYxZjc0Li44Y2VmYmQ0ZjE5IDEwMDY0NAorLS0tIGEv c3JjL1N5c3RlbS5MaW5xLkV4cHJlc3Npb25zL3NyYy9TeXN0ZW0vTGlucS9FeHByZXNzaW9ucy9D b21waWxlci9MYW1iZGFDb21waWxlci5FeHByZXNzaW9ucy5jcworKysrIGIvc3JjL1N5c3RlbS5M aW5xLkV4cHJlc3Npb25zL3NyYy9TeXN0ZW0vTGlucS9FeHByZXNzaW9ucy9Db21waWxlci9MYW1i ZGFDb21waWxlci5FeHByZXNzaW9ucy5jcworQEAgLTk1Miw4ICs5NTIsOSBAQCBuYW1lc3BhY2Ug U3lzdGVtLkxpbnEuRXhwcmVzc2lvbnMuQ29tcGlsZXIKKyAgICAgICAgIHByaXZhdGUgdm9pZCBF bWl0TWVtYmVyQXNzaWdubWVudChNZW1iZXJBc3NpZ25tZW50IGJpbmRpbmcsIFR5cGUgb2JqZWN0 VHlwZSkKKyAgICAgICAgIHsKKyAgICAgICAgICAgICBFbWl0RXhwcmVzc2lvbihiaW5kaW5nLkV4 cHJlc3Npb24pOworLSAgICAgICAgICAgIGlmIChiaW5kaW5nLk1lbWJlciBpcyBGaWVsZEluZm8g ZmkpCisrICAgICAgICAgICAgaWYgKGJpbmRpbmcuTWVtYmVyIGlzIEZpZWxkSW5mbykKKyAgICAg ICAgICAgICB7CisrICAgICAgICAgICAgICAgIEZpZWxkSW5mbyBmaSA9IChGaWVsZEluZm8pYmlu ZGluZy5NZW1iZXI7CisgICAgICAgICAgICAgICAgIF9pbGcuRW1pdChPcENvZGVzLlN0ZmxkLCBm aSk7CisgICAgICAgICAgICAgfQorICAgICAgICAgICAgIGVsc2UKK0BAIC0xMDk3LDcgKzEwOTgs NyBAQCBuYW1lc3BhY2UgU3lzdGVtLkxpbnEuRXhwcmVzc2lvbnMuQ29tcGlsZXIKKyAgICAgICAg IHByaXZhdGUgc3RhdGljIFR5cGUgR2V0TWVtYmVyVHlwZShNZW1iZXJJbmZvIG1lbWJlcikKKyAg ICAgICAgIHsKKyAgICAgICAgICAgICBEZWJ1Zy5Bc3NlcnQobWVtYmVyIGlzIEZpZWxkSW5mbyB8 fCBtZW1iZXIgaXMgUHJvcGVydHlJbmZvKTsKKy0gICAgICAgICAgICByZXR1cm4gbWVtYmVyIGlz IEZpZWxkSW5mbyBmaSA/IGZpLkZpZWxkVHlwZSA6IChtZW1iZXIgYXMgUHJvcGVydHlJbmZvKS5Q cm9wZXJ0eVR5cGU7CisrICAgICAgICAgICAgcmV0dXJuIG1lbWJlciBpcyBGaWVsZEluZm8gPyAo KEZpZWxkSW5mbyltZW1iZXIpLkZpZWxkVHlwZSA6IChtZW1iZXIgYXMgUHJvcGVydHlJbmZvKS5Q cm9wZXJ0eVR5cGU7CisgICAgICAgICB9CisgCisgICAgICAgICAjZW5kcmVnaW9uCitkaWZmIC0t Z2l0IGEvc3JjL1N5c3RlbS5MaW5xLkV4cHJlc3Npb25zL3NyYy9TeXN0ZW0vTGlucS9FeHByZXNz aW9ucy9NZW1iZXJBc3NpZ25tZW50LmNzIGIvc3JjL1N5c3RlbS5MaW5xLkV4cHJlc3Npb25zL3Ny Yy9TeXN0ZW0vTGlucS9FeHByZXNzaW9ucy9NZW1iZXJBc3NpZ25tZW50LmNzCitpbmRleCA0NzVh NmM2M2NjLi4wNzg3YjEwMTg2IDEwMDY0NAorLS0tIGEvc3JjL1N5c3RlbS5MaW5xLkV4cHJlc3Np b25zL3NyYy9TeXN0ZW0vTGlucS9FeHByZXNzaW9ucy9NZW1iZXJBc3NpZ25tZW50LmNzCisrKysg Yi9zcmMvU3lzdGVtLkxpbnEuRXhwcmVzc2lvbnMvc3JjL1N5c3RlbS9MaW5xL0V4cHJlc3Npb25z L01lbWJlckFzc2lnbm1lbnQuY3MKK0BAIC05MywyMyArOTMsMjMgQEAgbmFtZXNwYWNlIFN5c3Rl bS5MaW5xLkV4cHJlc3Npb25zCisgCisgICAgICAgICAgICAgLy8gTnVsbCBwYXJhbU5hbWUgYXMg dGhlcmUgYXJlIHR3byBwYXRocyBoZXJlIHdpdGggZGlmZmVyZW50IHBhcmFtZXRlciBuYW1lcyBh dCB0aGUgQVBJCisgICAgICAgICAgICAgVHlwZVV0aWxzLlZhbGlkYXRlVHlwZShkZWNUeXBlLCBu dWxsKTsKKy0gICAgICAgICAgICBzd2l0Y2ggKG1lbWJlcikKKysgICAgICAgICAgICBpZiAobWVt YmVyIGlzIFByb3BlcnR5SW5mbykKKyAgICAgICAgICAgICB7CistICAgICAgICAgICAgICAgIGNh c2UgUHJvcGVydHlJbmZvIHBpOgorLSAgICAgICAgICAgICAgICAgICAgaWYgKCFwaS5DYW5Xcml0 ZSkKKy0gICAgICAgICAgICAgICAgICAgIHsKKy0gICAgICAgICAgICAgICAgICAgICAgICB0aHJv dyBFcnJvci5Qcm9wZXJ0eURvZXNOb3RIYXZlU2V0dGVyKHBpLCBuYW1lb2YobWVtYmVyKSk7Cist ICAgICAgICAgICAgICAgICAgICB9CistCistICAgICAgICAgICAgICAgICAgICBtZW1iZXJUeXBl ID0gcGkuUHJvcGVydHlUeXBlOworLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7CistCistICAg ICAgICAgICAgICAgIGNhc2UgRmllbGRJbmZvIGZpOgorLSAgICAgICAgICAgICAgICAgICAgbWVt YmVyVHlwZSA9IGZpLkZpZWxkVHlwZTsKKy0gICAgICAgICAgICAgICAgICAgIGJyZWFrOworLQor LSAgICAgICAgICAgICAgICBkZWZhdWx0OgorLSAgICAgICAgICAgICAgICAgICAgdGhyb3cgRXJy b3IuQXJndW1lbnRNdXN0QmVGaWVsZEluZm9PclByb3BlcnR5SW5mbyhuYW1lb2YobWVtYmVyKSk7 CisrICAgICAgICAgICAgICAgIFByb3BlcnR5SW5mbyBwaSA9IChQcm9wZXJ0eUluZm8pIG1lbWJl cjsKKysgICAgICAgICAgICAgICAgaWYgKCFwaS5DYW5Xcml0ZSkKKysgICAgICAgICAgICAgICAg eworKyAgICAgICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IuUHJvcGVydHlEb2VzTm90SGF2ZVNl dHRlcihwaSwgbmFtZW9mKG1lbWJlcikpOworKyAgICAgICAgICAgICAgICB9CisrICAgICAgICAg ICAgICAgIG1lbWJlclR5cGUgPSBwaS5Qcm9wZXJ0eVR5cGU7CisrICAgICAgICAgICAgfQorKyAg ICAgICAgICAgIGVsc2UgaWYgKG1lbWJlciBpcyBGaWVsZEluZm8pCisrICAgICAgICAgICAgewor KyAgICAgICAgICAgICAgICBGaWVsZEluZm8gZmkgPSAoRmllbGRJbmZvKSBtZW1iZXI7CisrICAg ICAgICAgICAgICAgIG1lbWJlclR5cGUgPSBmaS5GaWVsZFR5cGU7CisrICAgICAgICAgICAgfQor KyAgICAgICAgICAgIGVsc2UKKysgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgIHRocm93 IEVycm9yLkFyZ3VtZW50TXVzdEJlRmllbGRJbmZvT3JQcm9wZXJ0eUluZm8obmFtZW9mKG1lbWJl cikpOworICAgICAgICAgICAgIH0KKyAgICAgICAgIH0KKyAgICAgfQorZGlmZiAtLWdpdCBhL3Ny Yy9TeXN0ZW0uTGlucS5FeHByZXNzaW9ucy9zcmMvU3lzdGVtL0xpbnEvRXhwcmVzc2lvbnMvTWVt YmVyQmluZGluZy5jcyBiL3NyYy9TeXN0ZW0uTGlucS5FeHByZXNzaW9ucy9zcmMvU3lzdGVtL0xp bnEvRXhwcmVzc2lvbnMvTWVtYmVyQmluZGluZy5jcworaW5kZXggYzFjNTg4NDYxOC4uNDNjMDY5 OGY5MCAxMDA2NDQKKy0tLSBhL3NyYy9TeXN0ZW0uTGlucS5FeHByZXNzaW9ucy9zcmMvU3lzdGVt L0xpbnEvRXhwcmVzc2lvbnMvTWVtYmVyQmluZGluZy5jcworKysrIGIvc3JjL1N5c3RlbS5MaW5x LkV4cHJlc3Npb25zL3NyYy9TeXN0ZW0vTGlucS9FeHByZXNzaW9ucy9NZW1iZXJCaW5kaW5nLmNz CitAQCAtNjEsNiArNjEsOSBAQCBuYW1lc3BhY2UgU3lzdGVtLkxpbnEuRXhwcmVzc2lvbnMKKyAg ICAgICAgICAgICByZXR1cm4gRXhwcmVzc2lvblN0cmluZ0J1aWxkZXIuTWVtYmVyQmluZGluZ1Rv U3RyaW5nKHRoaXMpOworICAgICAgICAgfQorIAorLSAgICAgICAgaW50ZXJuYWwgdmlydHVhbCB2 b2lkIFZhbGlkYXRlQXNEZWZpbmVkSGVyZShpbnQgaW5kZXgpID0+IHRocm93IEVycm9yLlVua25v d25CaW5kaW5nVHlwZShpbmRleCk7CisrICAgICAgICBpbnRlcm5hbCB2aXJ0dWFsIHZvaWQgVmFs aWRhdGVBc0RlZmluZWRIZXJlKGludCBpbmRleCkKKysgICAgICAgIHsKKysgICAgICAgICAgICB0 aHJvdyBFcnJvci5Vbmtub3duQmluZGluZ1R5cGUoaW5kZXgpOworKyAgICAgICAgfQorICAgICB9 CisgfQorZGlmZiAtLWdpdCBhL3NyYy9TeXN0ZW0uTGlucS5FeHByZXNzaW9ucy9zcmMvU3lzdGVt L0xpbnEvRXhwcmVzc2lvbnMvTWVtYmVyTWVtYmVyQmluZGluZy5jcyBiL3NyYy9TeXN0ZW0uTGlu cS5FeHByZXNzaW9ucy9zcmMvU3lzdGVtL0xpbnEvRXhwcmVzc2lvbnMvTWVtYmVyTWVtYmVyQmlu ZGluZy5jcworaW5kZXggZjM5ODFhMmIxZi4uNzVkZDcxNDFkYSAxMDA2NDQKKy0tLSBhL3NyYy9T eXN0ZW0uTGlucS5FeHByZXNzaW9ucy9zcmMvU3lzdGVtL0xpbnEvRXhwcmVzc2lvbnMvTWVtYmVy TWVtYmVyQmluZGluZy5jcworKysrIGIvc3JjL1N5c3RlbS5MaW5xLkV4cHJlc3Npb25zL3NyYy9T eXN0ZW0vTGlucS9FeHByZXNzaW9ucy9NZW1iZXJNZW1iZXJCaW5kaW5nLmNzCitAQCAtMTI3LDIz ICsxMjcsMjQgQEAgbmFtZXNwYWNlIFN5c3RlbS5MaW5xLkV4cHJlc3Npb25zCisgCisgICAgICAg ICAgICAgLy8gTnVsbCBwYXJhbU5hbWUgYXMgdGhlcmUgYXJlIHNldmVyYWwgcGF0aHMgaGVyZSB3 aXRoIGRpZmZlcmVudCBwYXJhbWV0ZXIgbmFtZXMgYXQgdGhlIEFQSQorICAgICAgICAgICAgIFR5 cGVVdGlscy5WYWxpZGF0ZVR5cGUoZGVjVHlwZSwgbnVsbCwgYWxsb3dCeVJlZjogdHJ1ZSwgYWxs b3dQb2ludGVyOiB0cnVlKTsKKy0gICAgICAgICAgICBzd2l0Y2ggKG1lbWJlcikKKysgICAgICAg ICAgICBpZiAobWVtYmVyIGlzIFByb3BlcnR5SW5mbykKKyAgICAgICAgICAgICB7CistICAgICAg ICAgICAgICAgIGNhc2UgUHJvcGVydHlJbmZvIHBpOgorLSAgICAgICAgICAgICAgICAgICAgaWYg KCFwaS5DYW5SZWFkKQorLSAgICAgICAgICAgICAgICAgICAgeworLSAgICAgICAgICAgICAgICAg ICAgICAgIHRocm93IEVycm9yLlByb3BlcnR5RG9lc05vdEhhdmVHZXR0ZXIocGksIG5hbWVvZiht ZW1iZXIpKTsKKy0gICAgICAgICAgICAgICAgICAgIH0KKy0KKy0gICAgICAgICAgICAgICAgICAg IG1lbWJlclR5cGUgPSBwaS5Qcm9wZXJ0eVR5cGU7CistICAgICAgICAgICAgICAgICAgICBicmVh azsKKy0KKy0gICAgICAgICAgICAgICAgY2FzZSBGaWVsZEluZm8gZmk6CistICAgICAgICAgICAg ICAgICAgICBtZW1iZXJUeXBlID0gZmkuRmllbGRUeXBlOworLSAgICAgICAgICAgICAgICAgICAg YnJlYWs7CisrICAgICAgICAgICAgICAgIFByb3BlcnR5SW5mbyBwaSA9IChQcm9wZXJ0eUluZm8p bWVtYmVyOworKyAgICAgICAgICAgICAgICBpZiAoIXBpLkNhblJlYWQpCisrICAgICAgICAgICAg ICAgIHsKKysgICAgICAgICAgICAgICAgICAgIHRocm93IEVycm9yLlByb3BlcnR5RG9lc05vdEhh dmVHZXR0ZXIocGksIG5hbWVvZihtZW1iZXIpKTsKKysgICAgICAgICAgICAgICAgfQorIAorLSAg ICAgICAgICAgICAgICBkZWZhdWx0OgorLSAgICAgICAgICAgICAgICAgICAgdGhyb3cgRXJyb3Iu QXJndW1lbnRNdXN0QmVGaWVsZEluZm9PclByb3BlcnR5SW5mbyhuYW1lb2YobWVtYmVyKSk7Cisr ICAgICAgICAgICAgICAgIG1lbWJlclR5cGUgPSBwaS5Qcm9wZXJ0eVR5cGU7CisrICAgICAgICAg ICAgfQorKyAgICAgICAgICAgIGVsc2UgaWYgKG1lbWJlciBpcyBGaWVsZEluZm8pCisrICAgICAg ICAgICAgeworKyAgICAgICAgICAgICAgICBGaWVsZEluZm8gZmkgPSAoRmllbGRJbmZvKW1lbWJl cjsKKysgICAgICAgICAgICAgICAgbWVtYmVyVHlwZSA9IGZpLkZpZWxkVHlwZTsKKysgICAgICAg ICAgICB9CisrICAgICAgICAgICAgZWxzZQorKyAgICAgICAgICAgIHsKKysgICAgICAgICAgICAg ICAgdGhyb3cgRXJyb3IuQXJndW1lbnRNdXN0QmVGaWVsZEluZm9PclByb3BlcnR5SW5mbyhuYW1l b2YobWVtYmVyKSk7CisgICAgICAgICAgICAgfQorICAgICAgICAgfQorIAorZGlmZiAtLWdpdCBh L3NyYy9TeXN0ZW0uTGlucS9zcmMvU3lzdGVtL0xpbnEvUmV2ZXJzZS5jcyBiL3NyYy9TeXN0ZW0u TGlucS9zcmMvU3lzdGVtL0xpbnEvUmV2ZXJzZS5jcworaW5kZXggZTY4YTRmNDJlZS4uYTYzNTI3 NzliMCAxMDA2NDQKKy0tLSBhL3NyYy9TeXN0ZW0uTGlucS9zcmMvU3lzdGVtL0xpbnEvUmV2ZXJz ZS5jcworKysrIGIvc3JjL1N5c3RlbS5MaW5xL3NyYy9TeXN0ZW0vTGlucS9SZXZlcnNlLmNzCitA QCAtMTAzLDE5ICsxMDMsMjQgQEAgbmFtZXNwYWNlIFN5c3RlbS5MaW5xCisgICAgICAgICAgICAg eworICAgICAgICAgICAgICAgICBpZiAob25seUlmQ2hlYXApCisgICAgICAgICAgICAgICAgIHsK Ky0gICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoX3NvdXJjZSkKKysgICAgICAgICAgICAgICAg ICAgIGlmIChfc291cmNlIGlzIElJTGlzdFByb3ZpZGVyPFRTb3VyY2U+KQorICAgICAgICAgICAg ICAgICAgICAgeworLSAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgSUlMaXN0UHJvdmlkZXI8 VFNvdXJjZT4gbGlzdFByb3Y6CistICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBs aXN0UHJvdi5HZXRDb3VudChvbmx5SWZDaGVhcDogdHJ1ZSk7CistCistICAgICAgICAgICAgICAg ICAgICAgICAgY2FzZSBJQ29sbGVjdGlvbjxUU291cmNlPiBjb2xUOgorLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICByZXR1cm4gY29sVC5Db3VudDsKKy0KKy0gICAgICAgICAgICAgICAgICAg ICAgICBjYXNlIElDb2xsZWN0aW9uIGNvbDoKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAg cmV0dXJuIGNvbC5Db3VudDsKKy0KKy0gICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0Ogor LSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisrICAgICAgICAgICAgICAg ICAgICAgICAgSUlMaXN0UHJvdmlkZXI8VFNvdXJjZT4gbGlzdFByb3YgPSAoSUlMaXN0UHJvdmlk ZXI8VFNvdXJjZT4pX3NvdXJjZTsKKysgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbGlz dFByb3YuR2V0Q291bnQob25seUlmQ2hlYXA6IHRydWUpOworKyAgICAgICAgICAgICAgICAgICAg fQorKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoX3NvdXJjZSBpcyBJQ29sbGVjdGlvbjxU U291cmNlPikKKysgICAgICAgICAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgICAgICAg ICBJQ29sbGVjdGlvbjxUU291cmNlPiBjb2xUID0gKElDb2xsZWN0aW9uPFRTb3VyY2U+KSBfc291 cmNlOworKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjb2xULkNvdW50OworKyAgICAg ICAgICAgICAgICAgICAgfQorKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoX3NvdXJjZSBp cyBJQ29sbGVjdGlvbikKKysgICAgICAgICAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAg ICAgICAgICBJQ29sbGVjdGlvbiBjb2wgPSAoSUNvbGxlY3Rpb24pIF9zb3VyY2U7CisrICAgICAg ICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbC5Db3VudDsKKysgICAgICAgICAgICAgICAgICAg IH0KKysgICAgICAgICAgICAgICAgICAgIGVsc2UKKysgICAgICAgICAgICAgICAgICAgIHsKKysg ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICAgICAgICAgICB9 CisgICAgICAgICAgICAgICAgIH0KKyAKK2RpZmYgLS1naXQgYS9zcmMvU3lzdGVtLk5ldC5IdHRw TGlzdGVuZXIvc3JjL1N5c3RlbS9OZXQvV2ViU29ja2V0cy9IdHRwTGlzdGVuZXJXZWJTb2NrZXRD b250ZXh0LmNzIGIvc3JjL1N5c3RlbS5OZXQuSHR0cExpc3RlbmVyL3NyYy9TeXN0ZW0vTmV0L1dl YlNvY2tldHMvSHR0cExpc3RlbmVyV2ViU29ja2V0Q29udGV4dC5jcworaW5kZXggNTMyMTU3ODk0 Ni4uZmY1NDY3NzAyNyAxMDA2NDQKKy0tLSBhL3NyYy9TeXN0ZW0uTmV0Lkh0dHBMaXN0ZW5lci9z cmMvU3lzdGVtL05ldC9XZWJTb2NrZXRzL0h0dHBMaXN0ZW5lcldlYlNvY2tldENvbnRleHQuY3MK KysrKyBiL3NyYy9TeXN0ZW0uTmV0Lkh0dHBMaXN0ZW5lci9zcmMvU3lzdGVtL05ldC9XZWJTb2Nr ZXRzL0h0dHBMaXN0ZW5lcldlYlNvY2tldENvbnRleHQuY3MKK0BAIC05NCw4ICs5NCw5IEBAIG5h bWVzcGFjZSBTeXN0ZW0uTmV0LldlYlNvY2tldHMKKyAgICAgICAgICAgICAgICAgaWYgKCEodXNl ciBpcyBXaW5kb3dzUHJpbmNpcGFsKSkKKyAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAg ICAgICAgICAgLy8gQXV0aGVudGljYXRpb25TY2hlbWVzLkJhc2ljLgorLSAgICAgICAgICAgICAg ICAgICAgaWYgKHVzZXIuSWRlbnRpdHkgaXMgSHR0cExpc3RlbmVyQmFzaWNJZGVudGl0eSBiYXNp Y0lkZW50aXR5KQorKyAgICAgICAgICAgICAgICAgICAgaWYgKHVzZXIuSWRlbnRpdHkgaXMgSHR0 cExpc3RlbmVyQmFzaWNJZGVudGl0eSkKKyAgICAgICAgICAgICAgICAgICAgIHsKKysgICAgICAg ICAgICAgICAgICAgICAgICBIdHRwTGlzdGVuZXJCYXNpY0lkZW50aXR5IGJhc2ljSWRlbnRpdHkg PSAoSHR0cExpc3RlbmVyQmFzaWNJZGVudGl0eSl1c2VyLklkZW50aXR5OworICAgICAgICAgICAg ICAgICAgICAgICAgIHJldHVybiBuZXcgR2VuZXJpY1ByaW5jaXBhbChuZXcgSHR0cExpc3RlbmVy QmFzaWNJZGVudGl0eShiYXNpY0lkZW50aXR5Lk5hbWUsIGJhc2ljSWRlbnRpdHkuUGFzc3dvcmQp LCBudWxsKTsKKyAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgfQotLSAK Mi40NS4yCgo= --b1=_an9yUQc81YewVJ071Mjh6ZcI5zllr0hgLHfHss8ka8A Content-Type: text/x-patch; name=0018-gnu-Add-mono-pre-5.10.0.patch Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=0018-gnu-Add-mono-pre-5.10.0.patch RnJvbSA1OGFlYmIyYWI1ZWY2ZmY4MDYyZGIwZmY2MWUyNmQxMWNhMGUzYTJiIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpNZXNzYWdlLUlEOiA8NThhZWJiMmFiNWVmNmZmODA2MmRiMGZmNjFlMjZk MTFjYTBlM2EyYi4xNzMyNzA3Mjg4LmdpdC51bm11c2hAaGFzaGJhbmcuc2g+CkluLVJlcGx5LVRv OiA8M2Y4YWY2NWY3Mjg3MWQ2MWZhODVlNjkzOWY0NmNiOGRhYzE4NWM3MC4xNzMyNzA3Mjg4Lmdp dC51bm11c2hAaGFzaGJhbmcuc2g+ClJlZmVyZW5jZXM6IDwzZjhhZjY1ZjcyODcxZDYxZmE4NWU2 OTM5ZjQ2Y2I4ZGFjMTg1YzcwLjE3MzI3MDcyODguZ2l0LnVubXVzaEBoYXNoYmFuZy5zaD4KRnJv bTogdW5tdXNoIDx1bm11c2hAaGFzaGJhbmcuc2g+CkRhdGU6IFdlZCwgMjcgTm92IDIwMjQgMDA6 NTI6MDUKU3ViamVjdDogW1BBVENIIDE4LzIxXSBnbnU6IEFkZCBtb25vLXByZS01LjEwLjAuCgoq IGdudS9wYWNrYWdlcy9kb3RuZXQuc2NtCiAgKG1vbm8tcHJlLTUuMTAuMC1leHRlcm5hbC1yZXBv LXNwZWNzLCBtb25vLXByZS01LjEwLjApOiBOZXcgdmFyaWFibGVzLgoqIGdudS9wYWNrYWdlcy9w YXRjaGVzL21vbm8tbWNzLXBhdGNoZXMtZnJvbS01LjEwLjAucGF0Y2g6IE5ldyBwYXRjaC4KKiBn bnUvbG9jYWwubWsgKGRpc3RfcGF0Y2hfREFUQSk6IFJlZ2lzdGVyIG5ldyBwYXRjaC4KCkNoYW5n ZS1JZDogSWU3OGRjZTA3MTAzMmI2NzQzYjZlNGMyZWI1OGU0M2JjODllNmExZDEKLS0tCiBnbnUv bG9jYWwubWsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAxICsKIGdudS9w YWNrYWdlcy9kb3RuZXQuc2NtICAgICAgICAgICAgICAgICAgICAgICB8ICAgNzMgKwogLi4uL21v bm8tbWNzLXBhdGNoZXMtZnJvbS01LjEwLjAucGF0Y2ggICAgICAgIHwgNDIxOCArKysrKysrKysr KysrKysrKwogMyBmaWxlcyBjaGFuZ2VkLCA0MjkyIGluc2VydGlvbnMoKykKIGNyZWF0ZSBtb2Rl IDEwMDY0NCBnbnUvcGFja2FnZXMvcGF0Y2hlcy9tb25vLW1jcy1wYXRjaGVzLWZyb20tNS4xMC4w LnBhdGNoCgpkaWZmIC0tZ2l0IGEvZ251L2xvY2FsLm1rIGIvZ251L2xvY2FsLm1rCmluZGV4IDRh Nzg3MjZjOWYuLjdlMjY0MTZlNzggMTAwNjQ0Ci0tLSBhL2dudS9sb2NhbC5taworKysgYi9nbnUv bG9jYWwubWsKQEAgLTE3NzEsNiArMTc3MSw3IEBAIGRpc3RfcGF0Y2hfREFUQSA9CQkJCQkJXAog ICAlRCUvcGFja2FnZXMvcGF0Y2hlcy9tb25vLTQuOS4wLWZpeC1ydW50aW1lbWV0YWRhdGF2ZXJz aW9uLnBhdGNoCQlcCiAgICVEJS9wYWNrYWdlcy9wYXRjaGVzL21vbm8tNS40LjAtcGF0Y2hlcy5w YXRjaAkJXAogICAlRCUvcGFja2FnZXMvcGF0Y2hlcy9tb25vLTUuOC4wLXBhdGNoZXMucGF0Y2gJ CVwKKyAgJUQlL3BhY2thZ2VzL3BhdGNoZXMvbW9uby1tY3MtcGF0Y2hlcy1mcm9tLTUuMTAuMC5w YXRjaAlcCiAgICVEJS9wYWNrYWdlcy9wYXRjaGVzL21vc2FpY2F0Y2hlci11bmJ1bmRsZS1odHNs aWIucGF0Y2gJXAogICAlRCUvcGFja2FnZXMvcGF0Y2hlcy9tcnJlc2N1ZS1zdXBwb3J0LWxvdmUt MTEucGF0Y2gJCVwKICAgJUQlL3BhY2thZ2VzL3BhdGNoZXMvbXRvb2xzLW1mb3JtYXQtdW5pbml0 aWFsaXplZC5wYXRjaAlcCmRpZmYgLS1naXQgYS9nbnUvcGFja2FnZXMvZG90bmV0LnNjbSBiL2du dS9wYWNrYWdlcy9kb3RuZXQuc2NtCmluZGV4IDE0NGY2Nzg3MmIuLjQzOWU5Nzc5YmIgMTAwNjQ0 Ci0tLSBhL2dudS9wYWNrYWdlcy9kb3RuZXQuc2NtCisrKyBiL2dudS9wYWNrYWdlcy9kb3RuZXQu c2NtCkBAIC0xMzk5LDMgKzEzOTksNzYgQEAgKGRlZmluZS1wdWJsaWMgbW9uby01LjguMAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAiCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b3AgIi9tY3MvY2xhc3MvbGliL2J1aWxkL21j cy5leGUiKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFrZS1mbGFncykpKSkpKSkpKSkp CisKKyhkZWZpbmUgbW9uby1wcmUtNS4xMC4wLWV4dGVybmFsLXJlcG8tc3BlY3MKKyAgJygoImFw aS1kb2MtdG9vbHMiICAgICAgICAgICAgICAgImQwM2U4MTk4MzhjNjI0MWY5MmY5MDY1NWNiNDQ4 Y2M0N2M5ZTg3OTEiCisgICAgICIxcmlraTc5ZjNpZzNjeGlndmlzczgxZHo2MDFobjkyYTFnaWZn bG0wbXpqYnM3NnNmM2ZqIgorICAgICAjOnJlY3Vyc2l2ZT8gI3QpCisgICAgKCJhcGktc25hcHNo b3QiICAgICAgICAgICAgICAgICI2MjczMzNjYWU4NGYwMmEzNmVlOWNhNjA1Yzk2ZGFjNDU1N2Q5 ZjM1IgorICAgICAiMHA5YzZicnhpd3gzOHl2YWY1NWpkMGwxbXhmajNiNWFoMHhhczJodjZmcmt6 ODB5cnFkbCIpCisgICAgKCJhc3BuZXR3ZWJzdGFjayIgICAgICAgICAgICAgICJlNzdiMTJlNmNj NWVkMjYwYTk4NDQ3ZjYwOWU4ODczMzdlNDRlMjk5IgorICAgICAiMHJrczM0NHFyNGZtcDNmczEy NjRkMnFrbW0zNDhtOGQxa2pkN3o0bDk0aWlpcnduMWZxMSIpCisgICAgKCgicmVmZXJlbmNlLWFz c2VtYmxpZXMiICJiaW5hcnktcmVmZXJlbmNlLWFzc2VtYmxpZXMiKQorICAgICAiOWM1Y2M3ZjA1 MWEwYmJhMmU0MTM0MWE1YmFlYmZjNGQyYzIxMzNlZiIKKyAgICAgIjE0YmZuMXF2bmk4Z3lmeGp3 bXZ5a3lqankzajVuZzRmbmJsamRhZGk5ZG00YjlhbDB3ZzEiKQorICAgICgiYm9ja2J1aWxkIiAg ICAgICAgICAgICAgICAgICAiMjkwMjJhZjVkOGE5NDY1MWIyZWVjZTkzZjkxMDU1OWIyNTRlYzNm MCIKKyAgICAgIjBsY2xjMXNtbXJqNnh3MzJkbGwwNzNteHc0ZGRpaXh2OWFydjAyeXczdzVoMTM1 YXk3dzQiKQorICAgICgiYm9yaW5nc3NsIiAgICAgICAgICAgICAgICAgICAiM2UwNzcwZTE4ODM1 NzE0NzA4ODYwYmE5ZmUxYWYwNGE5MzI5NzFmZiIKKyAgICAgIjEzOWEwZ2w5MWE1MmsycjZuYTZp YWx6a3F5a2FqMXJrODh6anJrYXozc2R4eDdubW1nNnkiKQorICAgICgiY2VjaWwiICAgICAgICAg ICAgICAgICAgICAgICAiYmMxMWY0NzI5NTQ2OTRlYmQ5MmFlNDk1NmYxMTBjMTAzNmE3YzJlMCIK KyAgICAgIjEyMm5ucDVwY253MThwajZhbW5xa3F4bHJtYXBkNHZ5OXhzNjVoZDBicXlxamg1NmJ3 bmQiKQorICAgICgoImNlY2lsIiAiY2VjaWwtbGVnYWN5IikgICAgICAiMzNkNTBiODc0ZmQ1Mjcx MThiYzM2MWQ4M2RlM2Q0OTRlOGJiNTVlMSIKKyAgICAgIjFwNGhsMTc5NmliMjZ5a3lmNXNubDZj ajBseDB2N21qaDB4cWhqdzZxZGg3NTNuc2p5aGIiKQorICAgICgiY29yZWZ4IiAgICAgICAgICAg ICAgICAgICAgICAiY2IxYjA0OWM5NTIyNzQ2NWMxNzkxYjg1N2NiNWJhODYzODVkOWYyOSIKKyAg ICAgIjFwcjBxamxneGY2M3pzMWc4MGdxZDZ4M3FobGdiMHdsY2M4em04ejhhbTVheXdydmdiNTMi KQorICAgICgiY29yZXJ0IiAgICAgICAgICAgICAgICAgICAgICAiNDhkYmE3MzgwMWU4MDRlODlm MDAzMTFkYTk5ZDg3M2Y5YzU1MDI3OCIKKyAgICAgIjF6dzQ3amY0Y3dxbWFpeHlsaXN4aTczeGY2 Y2FwNDFid2Y5dmxtcHhhbnp4YXFrbHpzdmsiKQorICAgICgiaWtkYXNtIiAgICAgICAgICAgICAg ICAgICAgICAiNDY1YzA4MTU1NThmZDQzYzAxMTBmOGQwMGZjMTg2YWMwMDQ0YWM2YSIKKyAgICAg IjB4aXI3cGNncTA0aGI3czhnOXdzcWRyeXBiNmwyOXJhajNpejVyY3F6ZG0wMDU2azc1dzIiKQor ICAgICgoImlrdm0tZm9yayIgImlrdm0iKSAgICAgICAgICAiODQ3ZTA1ZmNlZDVjOWE0MWZmMGYy NGYxZjlkNDBkNWE4YTU3NzJjMSIKKyAgICAgIjFmbDlibTNsbXpmOGlxdjN4NGlxa3o5ZmM1NG13 ZHZyeGlzeGcybnZ3d2NzaTRzYWZmcGkiKQorICAgICgibGlua2VyIiAgICAgICAgICAgICAgICAg ICAgICAiOTkzNTRiZjVjMTNiODA1NTIwOWNiMDgyY2RkYzUwYzgwNDdhYjA4OCIKKyAgICAgIjA1 emxham5xZjgzeGZ2bjJ3aGg5bnFsNmo4NXNxMTJhdzI2c3FteXF6N3pjcG1sMTcxbWoiKQorICAg ICgiTmV3dG9uc29mdC5Kc29uIiAgICAgICAgICAgICAiNDcxYzNlMDgwM2E5ZjQwYTBhY2M4YWVj ZWIzMWRlNmZmOTNhNTJjNCIKKyAgICAgIjBkZ25nZDVocWs2eWhsZzQwa2FibjZxZG5rbm0zMnpj eDlxNmJtMnczMWNzbnNrNTk3OHMiKQorICAgICgoIk51R2V0LkJ1aWxkVGFza3MiICJudWdldC1i dWlsZHRhc2tzIikKKyAgICAgImI1OGJhNDI4MjM3N2JjZWZkNDhhYmRjMmQ2MmNlNjMzMGUwNzlh YmUiCisgICAgICIxc2F5MDNmbnFranN4OTd6YWNhbnkzc2E1ajRtaGZrODI3aGt3cDIzaWIwMnEx OGY3bHZwIikKKyAgICAoKCJOVW5pdExpdGUiICJudW5pdC1saXRlIikgICAgIjc2NDY1NmNkYWZk YjNhY2QyNWRmOGNiNTJhNGUwZWExNDc2MGZjY2QiCisgICAgICIwcGM3bGszcDkxNmlzOGNuNG5n YXF2amxtbHp2M3Z2anB5a3N5NHB2YjNxYjVpaWF3MHZxIikKKyAgICA7OyAoInJvc2x5bi1iaW5h cmllcyIgICAgICAgICAgIjE5MDRjN2QwNjgyYTg3OGUyZDI1YjRkNDlmMzQ3NWQxMmZiYjljYzYi CisgICAgOzsgICIiKQorICAgICgicngiICAgICAgICAgICAgICAgICAgICAgICAgICAiYjI5YTRi MGZkYTYwOWUwYWYzM2ZmNTRlZDEzNjUyYjZjY2YwZTA1ZSIKKyAgICAgIjFuMWp3aG1zYmtjdjJk ODA2aW1tY3B6a2I3MnJ6MDR4eTk4bXl3MzU1YTh3NWFoMjV5aXYiKQorICAgIDs7ICgieHVuaXQt YmluYXJpZXMiICAgICAgICAgICAiZDQ0MzNiMDk3MmY0MGNiM2VmYWEzZmJiYTUyODY5YmRlNWRm OGZhOCIKKyAgICA7OyAgIiIpCisgICAgKSkKKworKGRlZmluZS1wdWJsaWMgbW9uby1wcmUtNS4x MC4wCisgIChsZXQgKChjb21taXQgIjNlOWQ3ZDZlOWNmOGRjMzNlYjI5YzQ5N2MzNTBhMWNkN2Rm M2EwNTciKQorICAgICAgICAodmVyc2lvbiAiNS44LjAuMTI5IikKKyAgICAgICAgKHJldmlzaW9u ICIwIikpCisgICAgKHBhY2thZ2UKKyAgICAgIChpbmhlcml0IG1vbm8tNS44LjApCisgICAgICAo dmVyc2lvbiAoZ2l0LXZlcnNpb24gdmVyc2lvbiByZXZpc2lvbiBjb21taXQpKQorICAgICAgKG5h bWUgIm1vbm8iKQorICAgICAgKHNvdXJjZSAob3JpZ2luCisgICAgICAgICAgICAgICAgKG1ldGhv ZCBnaXQtZmV0Y2gpCisgICAgICAgICAgICAgICAgKHVyaQorICAgICAgICAgICAgICAgICAoZ2l0 LXJlZmVyZW5jZQorICAgICAgICAgICAgICAgICAgKHVybCAiaHR0cHM6Ly9naXRsYWIud2luZWhx Lm9yZy9tb25vL21vbm8uZ2l0IikKKyAgICAgICAgICAgICAgICAgIChjb21taXQgY29tbWl0KSkp CisgICAgICAgICAgICAgICAgKGZpbGUtbmFtZSAoZ2l0LWZpbGUtbmFtZSBuYW1lIHZlcnNpb24p KQorICAgICAgICAgICAgICAgIChzaGEyNTYKKyAgICAgICAgICAgICAgICAgKGJhc2UzMgorICAg ICAgICAgICAgICAgICAgIjBtOGkwemd6aDBmZ2Izc3N5OTV2OWN6azFjMHJsNzZxMGpqNzgzNHM1 Zmpua2RqOGw0amIiKSkKKyAgICAgICAgICAgICAgICAobW9kdWxlcyAnKChndWl4IGJ1aWxkIHV0 aWxzKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgKGljZS05IHN0cmluZy1mdW4pKSkKKyAg ICAgICAgICAgICAgICAoc25pcHBldCAjfihiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAjJChhZGQtZXh0ZXJuYWwtcmVwb3MKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgbW9uby1wcmUtNS4xMC4wLWV4dGVybmFsLXJlcG8tc3BlY3MpCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICMkQHByZXBhcmUtbW9uby1zb3VyY2UtMCkpCisgICAgICAgICAgICAgICAg KHBhdGNoZXMKKyAgICAgICAgICAgICAgICAgKHNlYXJjaC1wYXRjaGVzICJtb25vLW1jcy1wYXRj aGVzLWZyb20tNS4xMC4wLnBhdGNoIikpKSkKKyAgICAgIChuYXRpdmUtaW5wdXRzIChtb2RpZnkt aW5wdXRzIChwYWNrYWdlLW5hdGl2ZS1pbnB1dHMgbW9uby01LjguMCkKKyAgICAgICAgICAgICAg ICAgICAgIChyZXBsYWNlICJtb25vIiBtb25vLTUuOC4wKSkpKSkpCmRpZmYgLS1naXQgYS9nbnUv cGFja2FnZXMvcGF0Y2hlcy9tb25vLW1jcy1wYXRjaGVzLWZyb20tNS4xMC4wLnBhdGNoIGIvZ251 L3BhY2thZ2VzL3BhdGNoZXMvbW9uby1tY3MtcGF0Y2hlcy1mcm9tLTUuMTAuMC5wYXRjaApuZXcg ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi40MWRmZWQ3ZGY3Ci0tLSAvZGV2L251 bGwKKysrIGIvZ251L3BhY2thZ2VzL3BhdGNoZXMvbW9uby1tY3MtcGF0Y2hlcy1mcm9tLTUuMTAu MC5wYXRjaApAQCAtMCwwICsxLDQyMTggQEAKK0luY2x1ZGVzIHRoZSBmb2xsb3dpbmcgY29tbWl0 czoKKzZmNWJmZTVjZjVhCiszODEyZDFjMTNmYworYTgwZjNkMGQ4N2MKK2IyZjA1MWYwYjE5Cisy YTIwMmE4NDc4YgorNGQ3ZDE2MDZkNzMKK2Q5OTcwMzA1NzMxCis5NGU4MGZjOGQ3ZgorMGI5Mjgw MDgzYTkKKzA3ZDFlNWYzNmE1Cis1ZjI3OWYxNGFhMgorODg5NDIxZjNiZWYKK2Y0YzBmZDNkYzEx Cis3MWRmNWM2M2I0NgorZDZlNWJmMTY3ODIKKzIwN2Y1YzJjZDZkCitjNTEyNzUyYTQxNgorOWFj YThkNWZlNGIKK2RpZmYgLS1naXQgYS9tY3MvY2xhc3MvTW9uby5DU2hhcnAvVGVzdC9FdmFsdWF0 b3IvVHlwZXNUZXN0LmNzIGIvbWNzL2NsYXNzL01vbm8uQ1NoYXJwL1Rlc3QvRXZhbHVhdG9yL1R5 cGVzVGVzdC5jcworaW5kZXggOTdmOWUwNDdlNmQuLmY4YmY2MzQ1NWRlIDEwMDY0NAorLS0tIGEv bWNzL2NsYXNzL01vbm8uQ1NoYXJwL1Rlc3QvRXZhbHVhdG9yL1R5cGVzVGVzdC5jcworKysrIGIv bWNzL2NsYXNzL01vbm8uQ1NoYXJwL1Rlc3QvRXZhbHVhdG9yL1R5cGVzVGVzdC5jcworQEAgLTEz MSw1ICsxMzEsMTcgQEAgbmFtZXNwYWNlIE1vbm9UZXN0cy5FdmFsdWF0b3JUZXN0CisgCQl7Cisg CQkJRXZhbHVhdG9yLlJ1biAoInB1YmxpYyBjbGFzcyBUZXN0Q2xhc3MgeyBwcml2YXRlIFRlc3RF bnVtIF90ZTsgcHVibGljIHN0cmluZyBHZXQoKSB7IHJldHVybiBfdGUuVG9TdHJpbmcoKTsgfSB9 IHB1YmxpYyBlbnVtIFRlc3RFbnVtIHsgRmlyc3QsIFNlY29uZCB9Iik7CisgCQl9CisrCisrCQlb VGVzdF0KKysJCXB1YmxpYyB2b2lkIEVudW1UeXBlV2l0aE9yZGVyRGVwZW5kZW5jeSAoKQorKwkJ eworKwkJCUV2YWx1YXRvci5SdW4gKCJwdWJsaWMgY2xhc3MgVGVzdENsYXNzIHsgcHVibGljIGVu dW0gVGVzdEVudW0geyBWYWwxLCBWYWwyLCBWYWwzIH0gcHVibGljIFRlc3RFbnVtIHRlc3Q7IHB1 YmxpYyBUZXN0Q2xhc3MoKSB7IHRlc3QgPSBUZXN0RW51bS5WYWwzOyB9IH0iKTsKKysJCQlvYmpl Y3QgcmVzID0gRXZhbHVhdG9yLkV2YWx1YXRlICgibmV3IFRlc3RDbGFzcygpIik7CisrCisrCQkJ dmFyIGZpZWxkcyA9IHJlcy5HZXRUeXBlICgpLkdldEZpZWxkcyAoKTsKKysJCQlmb3JlYWNoICh2 YXIgZmllbGQgaW4gZmllbGRzKSB7CisrCQkJCUNvbnNvbGUuV3JpdGVMaW5lICgkIntmaWVsZC5O YW1lfSA9IHtmaWVsZC5NZW1iZXJUeXBlfSIpOworKwkJCX0KKysJCX0KKyAJfQorIH0KK1wgTm8g bmV3bGluZSBhdCBlbmQgb2YgZmlsZQorZGlmZiAtLWdpdCBhL21jcy9lcnJvcnMvY3MwMDIzLTMw LmNzIGIvbWNzL2Vycm9ycy9jczAwMjMtMzAuY3MKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRl eCAwMDAwMDAwMDAwMC4uZmMxOWNjMjRlM2UKKy0tLSAvZGV2L251bGwKKysrKyBiL21jcy9lcnJv cnMvY3MwMDIzLTMwLmNzCitAQCAtMCwwICsxLDExIEBACisrLy8gQ1MwMDIzOiBUaGUgYGlzJyBv cGVyYXRvciBjYW5ub3QgYmUgYXBwbGllZCB0byBvcGVyYW5kIG9mIHR5cGUgYGRlZmF1bHQnCisr Ly8gTGluZTogOQorKy8vIENvbXBpbGVyIG9wdGlvbnM6IC1sYW5ndmVyc2lvbjpsYXRlc3QKKysK KytjbGFzcyBDCisreworKwlzdGF0aWMgdm9pZCBNYWluICgpCisrCXsKKysJCWJvb2wgZCA9IGRl ZmF1bHQgaXMgQzsKKysJfQorK30KK1wgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorZGlmZiAt LWdpdCBhL21jcy9lcnJvcnMvY3MwMDI5LTM5LmNzIGIvbWNzL2Vycm9ycy9jczAwMjktMzkuY3MK K25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwMDAwMC4uMGVkMjAwMDM2ZGMKKy0t LSAvZGV2L251bGwKKysrKyBiL21jcy9lcnJvcnMvY3MwMDI5LTM5LmNzCitAQCAtMCwwICsxLDE1 IEBACisrLy8gQ1MwMDI5OiBDYW5ub3QgaW1wbGljaXRseSBjb252ZXJ0IHR5cGUgYFMnIHRvIGBv YmplY3QnCisrLy8gTGluZTogMTMKKysvLyBDb21waWxlciBvcHRpb25zOiAtbGFuZ3ZlcnNpb246 bGF0ZXN0CisrCisrcHVibGljIHJlZiBzdHJ1Y3QgUworK3sKKyt9CisrCisrY2xhc3MgVGVzdAor K3sKKysJcHVibGljIHN0YXRpYyB2b2lkIE1haW4gKCkKKysJeworKwkJb2JqZWN0IG8gPSBuZXcg UyAoKTsKKysJfQorK30KK1wgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorZGlmZiAtLWdpdCBh L21jcy9lcnJvcnMvY3MwMDI5LTQwLmNzIGIvbWNzL2Vycm9ycy9jczAwMjktNDAuY3MKK25ldyBm aWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwMDAwMC4uNmQ5MTY3YzMxZmEKKy0tLSAvZGV2 L251bGwKKysrKyBiL21jcy9lcnJvcnMvY3MwMDI5LTQwLmNzCitAQCAtMCwwICsxLDE5IEBACisr Ly8gQ1MwMDI5OiBDYW5ub3QgaW1wbGljaXRseSBjb252ZXJ0IHR5cGUgYFMnIHRvIGBTeXN0ZW0u VmFsdWVUeXBlJworKy8vIExpbmU6IDE2CisrLy8gQ29tcGlsZXIgb3B0aW9uczogLWxhbmd2ZXJz aW9uOmxhdGVzdAorKworK3VzaW5nIFN5c3RlbTsKKysKKytwdWJsaWMgcmVmIHN0cnVjdCBTCisr eworK30KKysKKytjbGFzcyBUZXN0CisreworKwlwdWJsaWMgc3RhdGljIHZvaWQgTWFpbiAoKQor Kwl7CisrCQl2YXIgcyA9IGRlZmF1bHQgKFMpOworKwkJVmFsdWVUeXBlIHMyID0gczsKKysJCXZh ciByZXMgPSBkZWZhdWx0IChTKS5Ub1N0cmluZyAoKTsKKysJfQorK30KK1wgTm8gbmV3bGluZSBh dCBlbmQgb2YgZmlsZQorZGlmZiAtLWdpdCBhL21jcy9lcnJvcnMvY3MwMDI5LTQxLmNzIGIvbWNz L2Vycm9ycy9jczAwMjktNDEuY3MKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAw MDAwMC4uMWE2NWY1MmY3MzcKKy0tLSAvZGV2L251bGwKKysrKyBiL21jcy9lcnJvcnMvY3MwMDI5 LTQxLmNzCitAQCAtMCwwICsxLDEyIEBACisrLy8gQ1MwMDI5OiBDYW5ub3QgaW1wbGljaXRseSBj b252ZXJ0IHR5cGUgYFN5c3RlbS5UeXBlZFJlZmVyZW5jZScgdG8gYG9iamVjdCcKKysvLyBMaW5l OiAxMAorKworK3VzaW5nIFN5c3RlbTsKKysKKytjbGFzcyBUZXN0CisreworKwlwdWJsaWMgc3Rh dGljIHZvaWQgTWFpbiAoKQorKwl7CisrCQl2YXIgcmVzID0gZGVmYXVsdCAoVHlwZWRSZWZlcmVu Y2UpLlRvU3RyaW5nICgpOworKwl9CisrfQorXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCitk aWZmIC0tZ2l0IGEvbWNzL2Vycm9ycy9jczAwMjktNDIuY3MgYi9tY3MvZXJyb3JzL2NzMDAyOS00 Mi5jcworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAwMDAwLi5jNzY3MTAwMGM3 NgorLS0tIC9kZXYvbnVsbAorKysrIGIvbWNzL2Vycm9ycy9jczAwMjktNDIuY3MKK0BAIC0wLDAg KzEsMTAgQEAKKysvLyBDUzAwMjk6IENhbm5vdCBpbXBsaWNpdGx5IGNvbnZlcnQgdHlwZSBgc3Ry aW5nJyB0byBgaW50JworKy8vIExpbmU6IDgKKysKKytjbGFzcyBDCisreworKwl2b2lkIEV4aXN0 cyAoaW50IF8pCisrCXsKKysJCV8gPSAiMiI7CisrCX0JCisrfQorXCBObyBuZXdsaW5lIGF0IGVu ZCBvZiBmaWxlCitkaWZmIC0tZ2l0IGEvbWNzL2Vycm9ycy9jczAwMzAtMTcuY3MgYi9tY3MvZXJy b3JzL2NzMDAzMC0xNy5jcworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAwMDAw Li5iNzJiOGJmNzFlNQorLS0tIC9kZXYvbnVsbAorKysrIGIvbWNzL2Vycm9ycy9jczAwMzAtMTcu Y3MKK0BAIC0wLDAgKzEsMTUgQEAKKysvLyBDUzAwMzA6IENhbm5vdCBjb252ZXJ0IHR5cGUgYG9i amVjdCcgdG8gYFMnCisrLy8gTGluZTogMTMKKysvLyBDb21waWxlciBvcHRpb25zOiAtbGFuZ3Zl cnNpb246bGF0ZXN0CisrCisrcmVmIHN0cnVjdCBTCisreworK30KKysKKytjbGFzcyBYCisrewor KwlwdWJsaWMgc3RhdGljIHZvaWQgRm9vIChvYmplY3QgbykKKysJeworKwkJdmFyIHJlcyA9IChT KSBvOworKwl9CisrfQorXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCitkaWZmIC0tZ2l0IGEv bWNzL2Vycm9ycy9jczAxMDMtMTguY3MgYi9tY3MvZXJyb3JzL2NzMDEwMy0xOC5jcworbmV3IGZp bGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAwMDAwLi44Y2VjNzU1ZDIzZAorLS0tIC9kZXYv bnVsbAorKysrIGIvbWNzL2Vycm9ycy9jczAxMDMtMTguY3MKK0BAIC0wLDAgKzEsMTAgQEAKKysv LyBDUzAxMDM6IFRoZSBuYW1lIGBfJyBkb2VzIG5vdCBleGlzdCBpbiB0aGUgY3VycmVudCBjb250 ZXh0CisrLy8gTGluZTogOAorKworK2NsYXNzIEMKKyt7CisrCXZvaWQgVGVzdCAoKQorKwl7Cisr CQlfLlRvU3RyaW5nICgpOworKwl9CisrfQorXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCitk aWZmIC0tZ2l0IGEvbWNzL2Vycm9ycy9jczAxMjMtMTAuY3MgYi9tY3MvZXJyb3JzL2NzMDEyMy0x MC5jcworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAwMDAwLi40M2Q1ZTVkNjM2 OAorLS0tIC9kZXYvbnVsbAorKysrIGIvbWNzL2Vycm9ycy9jczAxMjMtMTAuY3MKK0BAIC0wLDAg KzEsMTggQEAKKysvLyBDUzAxMjM6IEEgbWV0aG9kIG9yIGRlbGVnYXRlIGBvYmplY3QuVG9TdHJp bmcoKScgcGFyYW1ldGVycyBkbyBub3QgbWF0Y2ggZGVsZWdhdGUgYFN5c3RlbS5GdW5jPHN0cmlu Zz4oKScgcGFyYW1ldGVycworKy8vIExpbmU6IDE2CisrLy8gQ29tcGlsZXIgb3B0aW9uczogLWxh bmd2ZXJzaW9uOmxhdGVzdAorKworK3VzaW5nIFN5c3RlbTsKKysKKytwdWJsaWMgcmVmIHN0cnVj dCBTCisreworK30KKysKKytjbGFzcyBUZXN0CisreworKwlwdWJsaWMgc3RhdGljIHZvaWQgTWFp biAoKQorKwl7CisrCQl2YXIgcyA9IG5ldyBTICgpOworKwkJRnVuYzxzdHJpbmc+IGYgPSBzLlRv U3RyaW5nOworKwl9CisrfQorXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCitkaWZmIC0tZ2l0 IGEvbWNzL2Vycm9ycy9jczAxMjMtMTEuY3MgYi9tY3MvZXJyb3JzL2NzMDEyMy0xMS5jcworbmV3 IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAwMDAwLi40MjdiNjI4YzE1OQorLS0tIC9k ZXYvbnVsbAorKysrIGIvbWNzL2Vycm9ycy9jczAxMjMtMTEuY3MKK0BAIC0wLDAgKzEsMTIgQEAK KysvLyBDUzAxMjM6IEEgbWV0aG9kIG9yIGRlbGVnYXRlIGBvYmplY3QuVG9TdHJpbmcoKScgcGFy YW1ldGVycyBkbyBub3QgbWF0Y2ggZGVsZWdhdGUgYFN5c3RlbS5GdW5jPHN0cmluZz4oKScgcGFy YW1ldGVycworKy8vIExpbmU6IDE2CisrCisrdXNpbmcgU3lzdGVtOworKworK2NsYXNzIFRlc3QK Kyt7CisrCXB1YmxpYyBzdGF0aWMgdm9pZCBNYWluICgpCisrCXsKKysJCUZ1bmM8c3RyaW5nPiBm ID0gZGVmYXVsdCAoVHlwZWRSZWZlcmVuY2UpLlRvU3RyaW5nOworKwl9CisrfQorXCBObyBuZXds aW5lIGF0IGVuZCBvZiBmaWxlCitkaWZmIC0tZ2l0IGEvbWNzL2Vycm9ycy9jczAxMzMtMi5jcyBi L21jcy9lcnJvcnMvY3MwMTMzLTIuY3MKK2luZGV4IGI3YTM3MTgyZDczLi40ODQ4ODg3NmY3ZSAx MDA2NDQKKy0tLSBhL21jcy9lcnJvcnMvY3MwMTMzLTIuY3MKKysrKyBiL21jcy9lcnJvcnMvY3Mw MTMzLTIuY3MKK0BAIC0xLDQgKzEsNCBAQAorLS8vIENTMDEzMzogVGhlIGV4cHJlc3Npb24gYmVp bmcgYXNzaWduZWQgdG8gYGMnIG11c3QgYmUgY29uc3RhbnQKKysvLyBDUzAxMzM6IFRoZSBleHBy ZXNzaW9uIGJlaW5nIGFzc2lnbmVkIHRvIGBjJyBtdXN0IGJlIGEgY29uc3RhbnQgb3IgZGVmYXVs dCB2YWx1ZQorIC8vIExpbmU6IDEwCisgCisgY2xhc3MgQworZGlmZiAtLWdpdCBhL21jcy9lcnJv cnMvY3MwMTMzLTMuY3MgYi9tY3MvZXJyb3JzL2NzMDEzMy0zLmNzCitpbmRleCBjYWFlM2JkZTY4 Yy4uMmY3ZGFjNjg4MGQgMTAwNjQ0CistLS0gYS9tY3MvZXJyb3JzL2NzMDEzMy0zLmNzCisrKysg Yi9tY3MvZXJyb3JzL2NzMDEzMy0zLmNzCitAQCAtMSw1ICsxLDUgQEAKKy0vLyBDUzAxMzM6IFRo ZSBleHByZXNzaW9uIGJlaW5nIGFzc2lnbmVkIHRvIGBGb28nIG11c3QgYmUgY29uc3RhbnQKKy0v LyBMaW5lOiAxMgorKy8vIENTMDEzMzogVGhlIGV4cHJlc3Npb24gYmVpbmcgYXNzaWduZWQgdG8g YEZvbycgbXVzdCBiZSBhIGNvbnN0YW50IG9yIGRlZmF1bHQgdmFsdWUKKysvLyBMaW5lOiA4Cisg CisgY2xhc3MgVAorIHsKK2RpZmYgLS1naXQgYS9tY3MvZXJyb3JzL2NzMDEzMy00LmNzIGIvbWNz L2Vycm9ycy9jczAxMzMtNC5jcworaW5kZXggNDFmZTYzOWI0NDYuLjU0MTYyZDU0NGNhIDEwMDY0 NAorLS0tIGEvbWNzL2Vycm9ycy9jczAxMzMtNC5jcworKysrIGIvbWNzL2Vycm9ycy9jczAxMzMt NC5jcworQEAgLTEsNCArMSw0IEBACistLy8gQ1MwMTMzOiBUaGUgZXhwcmVzc2lvbiBiZWluZyBh c3NpZ25lZCB0byBgUy5wYXRoTmFtZScgbXVzdCBiZSBjb25zdGFudAorKy8vIENTMDEzMzogVGhl IGV4cHJlc3Npb24gYmVpbmcgYXNzaWduZWQgdG8gYFMucGF0aE5hbWUnIG11c3QgYmUgYSBjb25z dGFudCBvciBkZWZhdWx0IHZhbHVlCisgLy8gTGluZTogMTIKKyAvLyBDb21waWxlciBvcHRpb25z OiAtdW5zYWZlCisgCitkaWZmIC0tZ2l0IGEvbWNzL2Vycm9ycy9jczAxMzMtNS5jcyBiL21jcy9l cnJvcnMvY3MwMTMzLTUuY3MKK2luZGV4IGE0OWYyNjVjNjkwLi4zMmU2YmZkZjQxNiAxMDA2NDQK Ky0tLSBhL21jcy9lcnJvcnMvY3MwMTMzLTUuY3MKKysrKyBiL21jcy9lcnJvcnMvY3MwMTMzLTUu Y3MKK0BAIC0xLDQgKzEsNCBAQAorLS8vIENTMDEzMzogVGhlIGV4cHJlc3Npb24gYmVpbmcgYXNz aWduZWQgdG8gYGInIG11c3QgYmUgY29uc3RhbnQKKysvLyBDUzAxMzM6IFRoZSBleHByZXNzaW9u IGJlaW5nIGFzc2lnbmVkIHRvIGBiJyBtdXN0IGJlIGEgY29uc3RhbnQgb3IgZGVmYXVsdCB2YWx1 ZQorIC8vIExpbmU6IDgKKyAKKyBjbGFzcyBYCitkaWZmIC0tZ2l0IGEvbWNzL2Vycm9ycy9jczAx MzMtNi5jcyBiL21jcy9lcnJvcnMvY3MwMTMzLTYuY3MKK2luZGV4IGE1MjMxNjljZGJkLi4yODQ0 OGRkNmRlOCAxMDA2NDQKKy0tLSBhL21jcy9lcnJvcnMvY3MwMTMzLTYuY3MKKysrKyBiL21jcy9l cnJvcnMvY3MwMTMzLTYuY3MKK0BAIC0xLDQgKzEsNCBAQAorLS8vIENTMDEzMzogVGhlIGV4cHJl c3Npb24gYmVpbmcgYXNzaWduZWQgdG8gYG8nIG11c3QgYmUgY29uc3RhbnQKKysvLyBDUzAxMzM6 IFRoZSBleHByZXNzaW9uIGJlaW5nIGFzc2lnbmVkIHRvIGBvJyBtdXN0IGJlIGEgY29uc3RhbnQg b3IgZGVmYXVsdCB2YWx1ZQorIC8vIExpbmU6IDgKKyAKKyBjbGFzcyBYCitkaWZmIC0tZ2l0IGEv bWNzL2Vycm9ycy9jczAxMzMtNy5jcyBiL21jcy9lcnJvcnMvY3MwMTMzLTcuY3MKK2luZGV4IDEw ZDgyZDlmZTVlLi4wMjRiYzE0ODIyOSAxMDA2NDQKKy0tLSBhL21jcy9lcnJvcnMvY3MwMTMzLTcu Y3MKKysrKyBiL21jcy9lcnJvcnMvY3MwMTMzLTcuY3MKK0BAIC0xLDQgKzEsNCBAQAorLS8vIENT MDEzMzogVGhlIGV4cHJlc3Npb24gYmVpbmcgYXNzaWduZWQgdG8gYG8nIG11c3QgYmUgY29uc3Rh bnQKKysvLyBDUzAxMzM6IFRoZSBleHByZXNzaW9uIGJlaW5nIGFzc2lnbmVkIHRvIGBvJyBtdXN0 IGJlIGEgY29uc3RhbnQgb3IgZGVmYXVsdCB2YWx1ZQorIC8vIExpbmU6IDgKKyAKKyBjbGFzcyBY CitkaWZmIC0tZ2l0IGEvbWNzL2Vycm9ycy9jczAxMzMuY3MgYi9tY3MvZXJyb3JzL2NzMDEzMy5j cworaW5kZXggMDk0MTk0ZGVhYmIuLmYwZGRhOWVlM2NiIDEwMDY0NAorLS0tIGEvbWNzL2Vycm9y cy9jczAxMzMuY3MKKysrKyBiL21jcy9lcnJvcnMvY3MwMTMzLmNzCitAQCAtMSw1ICsxLDYgQEAK Ky0vLyBDUzAxMzM6IFRoZSBleHByZXNzaW9uIGJlaW5nIGFzc2lnbmVkIHRvIGB4JyBtdXN0IGJl IGNvbnN0YW50CistLy8gTGluZTogNgorKy8vIENTMDEzMzogVGhlIGV4cHJlc3Npb24gYmVpbmcg YXNzaWduZWQgdG8gYHgnIG11c3QgYmUgYSBjb25zdGFudCBvciBkZWZhdWx0IHZhbHVlCisrLy8g TGluZTogNworKworIGNsYXNzIFggeworIAlYIChpbnQgYXJnKQorIAl7CitkaWZmIC0tZ2l0IGEv bWNzL2Vycm9ycy9jczAzMDYtNC5jcyBiL21jcy9lcnJvcnMvY3MwMzA2LTQuY3MKK25ldyBmaWxl IG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwMDAwMC4uNDY1MzUxMmU1NWIKKy0tLSAvZGV2L251 bGwKKysrKyBiL21jcy9lcnJvcnMvY3MwMzA2LTQuY3MKK0BAIC0wLDAgKzEsMTUgQEAKKysvLyBD UzAzMDY6IFRoZSB0eXBlIGBTJyBtYXkgbm90IGJlIHVzZWQgYXMgYSB0eXBlIGFyZ3VtZW50Cisr Ly8gTGluZTogMTMKKysvLyBDb21waWxlciBvcHRpb25zOiAtbGFuZ3ZlcnNpb246bGF0ZXN0Cisr CisrcHVibGljIHJlZiBzdHJ1Y3QgUworK3sKKyt9CisrCisrY2xhc3MgVGVzdDxUPgorK3sKKysJ cHVibGljIHN0YXRpYyB2b2lkIEZvbyAoKQorKwl7CisrCQlUZXN0PFM+IGxvY2FsOworKwl9Cisr fQorXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCitkaWZmIC0tZ2l0IGEvbWNzL2Vycm9ycy9j czA2MTEtMy5jcyBiL21jcy9lcnJvcnMvY3MwNjExLTMuY3MKK25ldyBmaWxlIG1vZGUgMTAwNjQ0 CitpbmRleCAwMDAwMDAwMDAwMC4uNmVkYTc3M2RkMjQKKy0tLSAvZGV2L251bGwKKysrKyBiL21j cy9lcnJvcnMvY3MwNjExLTMuY3MKK0BAIC0wLDAgKzEsMTUgQEAKKysvLyBDUzA2MTE6IEFycmF5 IGVsZW1lbnRzIGNhbm5vdCBiZSBvZiB0eXBlIGBTJworKy8vIExpbmU6IDEzCisrLy8gQ29tcGls ZXIgb3B0aW9uczogLWxhbmd2ZXJzaW9uOmxhdGVzdAorKworK3B1YmxpYyByZWYgc3RydWN0IFMK Kyt7CisrfQorKworK2NsYXNzIFRlc3QKKyt7CisrCXB1YmxpYyBzdGF0aWMgdm9pZCBNYWluICgp CisrCXsKKysJCXZhciB4ID0gbmV3IFNbMF07CisrCX0KKyt9CitcIE5vIG5ld2xpbmUgYXQgZW5k IG9mIGZpbGUKK2RpZmYgLS1naXQgYS9tY3MvZXJyb3JzL2NzMDgxNS05LmNzIGIvbWNzL2Vycm9y cy9jczA4MTUtOS5jcworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAwMDAwLi5m NTQ3MDMzNDliZQorLS0tIC9kZXYvbnVsbAorKysrIGIvbWNzL2Vycm9ycy9jczA4MTUtOS5jcwor QEAgLTAsMCArMSwxMSBAQAorKy8vIENTMDgxNTogQW4gaW1wbGljaXRseSB0eXBlZCBsb2NhbCB2 YXJpYWJsZSBkZWNsYXJhdGlvbiBjYW5ub3QgYmUgaW5pdGlhbGl6ZWQgd2l0aCBgZGVmYXVsdCcK KysvLyBMaW5lOiA5CisrLy8gQ29tcGlsZXIgb3B0aW9uczogLWxhbmd2ZXJzaW9uOmxhdGVzdAor KworK3N0YXRpYyBjbGFzcyBYCisreworKwlwdWJsaWMgc3RhdGljIHZvaWQgTWFpbiAoKQorKwl7 CisrCQl2YXIgeCA9IGRlZmF1bHQ7CisrCX0KKyt9CitcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZp bGUKK2RpZmYgLS1naXQgYS9tY3MvZXJyb3JzL2NzMTUwMi0xMS5jcyBiL21jcy9lcnJvcnMvY3Mx NTAyLTExLmNzCitkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDgyZGNiM2EyYzE3Li4w MDAwMDAwMDAwMAorLS0tIGEvbWNzL2Vycm9ycy9jczE1MDItMTEuY3MKKysrKyAvZGV2L251bGwK K0BAIC0xLDExICswLDAgQEAKKy0vLyBDUzE1MDI6IFRoZSBiZXN0IG92ZXJsb2FkZWQgbWV0aG9k IG1hdGNoIGZvciBgc3RyaW5nLlN0cmluZyhjaGFyKiknIGhhcyBzb21lIGludmFsaWQgYXJndW1l bnRzCistLy8gTGluZTogOAorLQorLWNsYXNzIEMKKy17CistCXN0YXRpYyBzdHJpbmcgUHJvcCB7 CistCQlnZXQgeworLQkJCXJldHVybiBuZXcgc3RyaW5nICgicyIpOworLQkJfQorLSAgICB9Cist fQorZGlmZiAtLWdpdCBhL21jcy9lcnJvcnMvY3MxNTk5LTIuY3MgYi9tY3MvZXJyb3JzL2NzMTU5 OS0yLmNzCitpbmRleCA5NDFmZjZiYjBkNi4uMjhhYTA1YjJlZDMgMTAwNjQ0CistLS0gYS9tY3Mv ZXJyb3JzL2NzMTU5OS0yLmNzCisrKysgYi9tY3MvZXJyb3JzL2NzMTU5OS0yLmNzCitAQCAtMSw0 ICsxLDQgQEAKKy0vLyBDUzE1OTk6IE1ldGhvZCBvciBkZWxlZ2F0ZSBjYW5ub3QgcmV0dXJuIHR5 cGUgYFN5c3RlbS5BcmdJdGVyYXRvcicKKysvLyBDUzE1OTk6IFRoZSByZXR1cm4gdHlwZSBvZiBg U3lzdGVtLkFyZ0l0ZXJhdG9yJyBpcyBub3QgYWxsb3dlZAorIC8vIExpbmU6IDgKKyAKKyB1c2lu ZyBTeXN0ZW07CitkaWZmIC0tZ2l0IGEvbWNzL2Vycm9ycy9jczE1OTktMy5jcyBiL21jcy9lcnJv cnMvY3MxNTk5LTMuY3MKK2luZGV4IGU0ODY5ZGNhZjcwLi45ZDM3ODA5OWQ4MiAxMDA2NDQKKy0t LSBhL21jcy9lcnJvcnMvY3MxNTk5LTMuY3MKKysrKyBiL21jcy9lcnJvcnMvY3MxNTk5LTMuY3MK K0BAIC0xLDQgKzEsNCBAQAorLS8vIENTMTU5OTogTWV0aG9kIG9yIGRlbGVnYXRlIGNhbm5vdCBy ZXR1cm4gdHlwZSBgU3lzdGVtLkFyZ0l0ZXJhdG9yJworKy8vIENTMTU5OTogVGhlIHJldHVybiB0 eXBlIG9mIGBTeXN0ZW0uQXJnSXRlcmF0b3InIGlzIG5vdCBhbGxvd2VkCisgLy8gTGluZTogOAor IAorIHVzaW5nIFN5c3RlbTsKK2RpZmYgLS1naXQgYS9tY3MvZXJyb3JzL2NzMTU5OS00LmNzIGIv bWNzL2Vycm9ycy9jczE1OTktNC5jcworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAw MDAwMDAwLi4zNThlZWU1OWExMworLS0tIC9kZXYvbnVsbAorKysrIGIvbWNzL2Vycm9ycy9jczE1 OTktNC5jcworQEAgLTAsMCArMSwxMiBAQAorKy8vIENTMTU5OTogVGhlIHJldHVybiB0eXBlIG9m IGBTeXN0ZW0uVHlwZWRSZWZlcmVuY2UnIGlzIG5vdCBhbGxvd2VkCisrLy8gTGluZTogOAorKwor K3VzaW5nIFN5c3RlbTsKKysKKytwdWJsaWMgY2xhc3MgUHJvZ3JhbQorK3sKKysgICAgcHVibGlj IHN0YXRpYyBUeXBlZFJlZmVyZW5jZSBvcGVyYXRvciArIChpbnQgYSwgUHJvZ3JhbSBiKQorKyAg ICB7CisrICAgIAl0aHJvdyBuZXcgQXBwbGljYXRpb25FeGNlcHRpb24gKCk7CisrICAgIH0KKyt9 CitcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKK2RpZmYgLS1naXQgYS9tY3MvZXJyb3JzL2Nz MTU5OS5jcyBiL21jcy9lcnJvcnMvY3MxNTk5LmNzCitpbmRleCA1Y2VmMzJkN2Y5Ny4uODcxZDlm YjNlN2EgMTAwNjQ0CistLS0gYS9tY3MvZXJyb3JzL2NzMTU5OS5jcworKysrIGIvbWNzL2Vycm9y cy9jczE1OTkuY3MKK0BAIC0xLDQgKzEsNCBAQAorLS8vIENTMTU5OTogTWV0aG9kIG9yIGRlbGVn YXRlIGNhbm5vdCByZXR1cm4gdHlwZSBgU3lzdGVtLlR5cGVkUmVmZXJlbmNlJworKy8vIENTMTU5 OTogVGhlIHJldHVybiB0eXBlIG9mIGBTeXN0ZW0uVHlwZWRSZWZlcmVuY2UnIGlzIG5vdCBhbGxv d2VkCisgLy8gTGluZTogOAorIAorIHVzaW5nIFN5c3RlbTsKK2RpZmYgLS1naXQgYS9tY3MvZXJy b3JzL2NzMTY0NC01Ny5jcyBiL21jcy9lcnJvcnMvY3MxNjQ0LTU3LmNzCituZXcgZmlsZSBtb2Rl IDEwMDY0NAoraW5kZXggMDAwMDAwMDAwMDAuLjdlZTk4MzczMDgwCistLS0gL2Rldi9udWxsCisr KysgYi9tY3MvZXJyb3JzL2NzMTY0NC01Ny5jcworQEAgLTAsMCArMSw3IEBACisrLy8gQ1MxNjQ0 OiBGZWF0dXJlIGByZWYgc3RydWN0cycgY2Fubm90IGJlIHVzZWQgYmVjYXVzZSBpdCBpcyBub3Qg cGFydCBvZiB0aGUgQyMgNy4wIGxhbmd1YWdlIHNwZWNpZmljYXRpb24KKysvLyBMaW5lOiA1Cisr Ly8gQ29tcGlsZXIgb3B0aW9uczogLWxhbmd2ZXJzaW9uOjcKKysKKytyZWYgc3RydWN0IFMKKyt7 CisrfQorXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCitkaWZmIC0tZ2l0IGEvbWNzL2Vycm9y cy9jczE2NDQtNTguY3MgYi9tY3MvZXJyb3JzL2NzMTY0NC01OC5jcworbmV3IGZpbGUgbW9kZSAx MDA2NDQKK2luZGV4IDAwMDAwMDAwMDAwLi5lOTk0Y2YzMzhiZAorLS0tIC9kZXYvbnVsbAorKysr IGIvbWNzL2Vycm9ycy9jczE2NDQtNTguY3MKK0BAIC0wLDAgKzEsOCBAQAorKy8vIENTMTY0NDog RmVhdHVyZSBgZGVmYXVsdCBsaXRlcmFsJyBjYW5ub3QgYmUgdXNlZCBiZWNhdXNlIGl0IGlzIG5v dCBwYXJ0IG9mIHRoZSBDIyA3LjAgbGFuZ3VhZ2Ugc3BlY2lmaWNhdGlvbgorKy8vIExpbmU6IDcK KysvLyBDb21waWxlciBvcHRpb25zOiAtbGFuZ3ZlcnNpb246NworKworK2NsYXNzIFgKKyt7Cisr CWludCBpID0gZGVmYXVsdDsKKyt9CitkaWZmIC0tZ2l0IGEvbWNzL2Vycm9ycy9jczE2NDQtNTku Y3MgYi9tY3MvZXJyb3JzL2NzMTY0NC01OS5jcworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4 IDAwMDAwMDAwMDAwLi4yZjhhZWQ2Yjk1OAorLS0tIC9kZXYvbnVsbAorKysrIGIvbWNzL2Vycm9y cy9jczE2NDQtNTkuY3MKK0BAIC0wLDAgKzEsMTMgQEAKKysvLyBDUzE2NDQ6IEZlYXR1cmUgYHJl YWRvbmx5IHJlZmVyZW5jZXMnIGNhbm5vdCBiZSB1c2VkIGJlY2F1c2UgaXQgaXMgbm90IHBhcnQg b2YgdGhlIEMjIDcuMCBsYW5ndWFnZSBzcGVjaWZpY2F0aW9uCisrLy8gTGluZTogOQorKy8vIENv bXBpbGVyIG9wdGlvbnM6IC1sYW5ndmVyc2lvbjo3CisrCisrY2xhc3MgWAorK3sKKysJaW50IGk7 CisrCisrCXJlZiByZWFkb25seSBpbnQgVGVzdCAoKQorKwl7CisrCQlyZXR1cm4gcmVmIGk7Cisr CX0KKyt9CitkaWZmIC0tZ2l0IGEvbWNzL2Vycm9ycy9jczE2NDQtNjAuY3MgYi9tY3MvZXJyb3Jz L2NzMTY0NC02MC5jcworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAwMDAwLi5j YTk1NDdiYzU2MQorLS0tIC9kZXYvbnVsbAorKysrIGIvbWNzL2Vycm9ycy9jczE2NDQtNjAuY3MK K0BAIC0wLDAgKzEsMTEgQEAKKysvLyBDUzE2NDQ6IEZlYXR1cmUgYGRpc2NhcmRzJyBjYW5ub3Qg YmUgdXNlZCBiZWNhdXNlIGl0IGlzIG5vdCBwYXJ0IG9mIHRoZSBDIyA2LjAgbGFuZ3VhZ2Ugc3Bl Y2lmaWNhdGlvbgorKy8vIExpbmU6IDkKKysvLyBDb21waWxlciBvcHRpb25zOiAtbGFuZ3ZlcnNp b246NgorKworK2NsYXNzIFgKKyt7CisrCWludCBUZXN0ICgpCisrCXsKKysJCV8gPSAyOworKwl9 CisrfQorZGlmZiAtLWdpdCBhL21jcy9lcnJvcnMvY3MxNzM4LTIuY3MgYi9tY3MvZXJyb3JzL2Nz MTczOC0yLmNzCitpbmRleCBmNTkyMjFmNGM3YS4uNDRiM2Y2ZDFiMTQgMTAwNjQ0CistLS0gYS9t Y3MvZXJyb3JzL2NzMTczOC0yLmNzCisrKysgYi9tY3MvZXJyb3JzL2NzMTczOC0yLmNzCitAQCAt MSw0ICsxLDQgQEAKKy0vLyBDUzE3Mzg6IE5hbWVkIGFyZ3VtZW50cyBtdXN0IGFwcGVhciBhZnRl ciB0aGUgcG9zaXRpb25hbCBhcmd1bWVudHMKKysvLyBDUzE3Mzg6IE5hbWVkIGFyZ3VtZW50cyBt dXN0IGFwcGVhciBhZnRlciB0aGUgcG9zaXRpb25hbCBhcmd1bWVudHMgd2hlbiB1c2luZyBsYW5n dWFnZSB2ZXJzaW9uIG9sZGVyIHRoYW4gNy4yCisgLy8gTGluZTogMTMKKyAKKyB1c2luZyBTeXN0 ZW07CitkaWZmIC0tZ2l0IGEvbWNzL2Vycm9ycy9jczE3MzgtMy5jcyBiL21jcy9lcnJvcnMvY3Mx NzM4LTMuY3MKK2luZGV4IDUzYzRlZmMzNTUzLi45MDFhYzBlNWQ1OSAxMDA2NDQKKy0tLSBhL21j cy9lcnJvcnMvY3MxNzM4LTMuY3MKKysrKyBiL21jcy9lcnJvcnMvY3MxNzM4LTMuY3MKK0BAIC0x LDQgKzEsNCBAQAorLS8vIENTMTczODogTmFtZWQgYXJndW1lbnRzIG11c3QgYXBwZWFyIGFmdGVy IHRoZSBwb3NpdGlvbmFsIGFyZ3VtZW50cworKy8vIENTMTczODogTmFtZWQgYXJndW1lbnRzIG11 c3QgYXBwZWFyIGFmdGVyIHRoZSBwb3NpdGlvbmFsIGFyZ3VtZW50cyB3aGVuIHVzaW5nIGxhbmd1 YWdlIHZlcnNpb24gb2xkZXIgdGhhbiA3LjIKKyAvLyBMaW5lOiAxNAorIAorIGNsYXNzIEMKK2Rp ZmYgLS1naXQgYS9tY3MvZXJyb3JzL2NzMTczOC5jcyBiL21jcy9lcnJvcnMvY3MxNzM4LmNzCitp bmRleCBkYWI5YTYxMTYwYi4uNTM3YmMxN2I5MTcgMTAwNjQ0CistLS0gYS9tY3MvZXJyb3JzL2Nz MTczOC5jcworKysrIGIvbWNzL2Vycm9ycy9jczE3MzguY3MKK0BAIC0xLDQgKzEsNCBAQAorLS8v IENTMTczODogTmFtZWQgYXJndW1lbnRzIG11c3QgYXBwZWFyIGFmdGVyIHRoZSBwb3NpdGlvbmFs IGFyZ3VtZW50cworKy8vIENTMTczODogTmFtZWQgYXJndW1lbnRzIG11c3QgYXBwZWFyIGFmdGVy IHRoZSBwb3NpdGlvbmFsIGFyZ3VtZW50cyB3aGVuIHVzaW5nIGxhbmd1YWdlIHZlcnNpb24gb2xk ZXIgdGhhbiA3LjIKKyAvLyBMaW5lOiAxMgorIAorIGNsYXNzIEMKK2RpZmYgLS1naXQgYS9tY3Mv ZXJyb3JzL2NzMTk4My5jcyBiL21jcy9lcnJvcnMvY3MxOTgzLmNzCitpbmRleCBhMmVmNmMxNTBk Ni4uNzZkMmRiNGU2NzcgMTAwNjQ0CistLS0gYS9tY3MvZXJyb3JzL2NzMTk4My5jcworKysrIGIv bWNzL2Vycm9ycy9jczE5ODMuY3MKK0BAIC0xLDQgKzEsNCBAQAorLS8vIENTMTk4MzogVGhlIHJl dHVybiB0eXBlIG9mIGFuIGFzeW5jIG1ldGhvZCBtdXN0IGJlIHZvaWQsIFRhc2ssIG9yIFRhc2s8 VD4KKysvLyBDUzE5ODM6IFRoZSByZXR1cm4gdHlwZSBvZiBhbiBhc3luYyBtZXRob2QgbXVzdCBi ZSB2b2lkIG9yIHRhc2sgdHlwZQorIC8vIExpbmU6IDYKKyAKKyBjbGFzcyBDCitkaWZmIC0tZ2l0 IGEvbWNzL2Vycm9ycy9jczQwMTItMy5jcyBiL21jcy9lcnJvcnMvY3M0MDEyLTMuY3MKK25ldyBm aWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwMDAwMC4uZmIzZDFkYzI3NmYKKy0tLSAvZGV2 L251bGwKKysrKyBiL21jcy9lcnJvcnMvY3M0MDEyLTMuY3MKK0BAIC0wLDAgKzEsMTkgQEAKKysv LyBDUzQwMTI6IFBhcmFtZXRlcnMgb3IgbG9jYWwgdmFyaWFibGVzIG9mIHR5cGUgYFMnIGNhbm5v dCBiZSBkZWNsYXJlZCBpbiBhc3luYyBtZXRob2RzIG9yIGl0ZXJhdG9ycworKy8vIExpbmU6IDE2 CisrLy8gQ29tcGlsZXIgb3B0aW9uczogLWxhbmd2ZXJzaW9uOmxhdGVzdAorKworK3VzaW5nIFN5 c3RlbTsKKyt1c2luZyBTeXN0ZW0uVGhyZWFkaW5nLlRhc2tzOworKworK3B1YmxpYyByZWYgc3Ry dWN0IFMKKyt7CisrfQorKworK2NsYXNzIEMKKyt7CisrCXB1YmxpYyBhc3luYyB2b2lkIFRlc3Qg KCkKKysJeworKwkJdmFyIHRyID0gbmV3IFMgKCk7CisrCQlhd2FpdCBUYXNrLkZhY3RvcnkuU3Rh cnROZXcgKCgpID0+IDYpOworKwl9CisrfQorXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCitk aWZmIC0tZ2l0IGEvbWNzL2Vycm9ycy9jczgxNzUtMi5jcyBiL21jcy9lcnJvcnMvY3M4MTc1LTIu Y3MKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwMDAwMC4uMjdjNGJhYmY4YmYK Ky0tLSAvZGV2L251bGwKKysrKyBiL21jcy9lcnJvcnMvY3M4MTc1LTIuY3MKK0BAIC0wLDAgKzEs MTkgQEAKKysvLyBDUzgxNzU6IENhbm5vdCB1c2UgYnktcmVmZXJlbmNlIHZhcmlhYmxlIGBzJyBp bnNpZGUgYW4gYW5vbnltb3VzIG1ldGhvZCwgbGFtYmRhIGV4cHJlc3Npb24sIG9yIHF1ZXJ5IGV4 cHJlc3Npb24KKysvLyBMaW5lOiAxNworKy8vIENvbXBpbGVyIG9wdGlvbnM6IC1sYW5ndmVyc2lv bjpsYXRlc3QKKysKKyt1c2luZyBTeXN0ZW07CisrCisrcHVibGljIHJlZiBzdHJ1Y3QgUworK3sK Kyt9CisrCisrY2xhc3MgVGVzdAorK3sKKysJcHVibGljIHN0YXRpYyB2b2lkIE1haW4gKCkKKysJ eworKwkJdmFyIHMgPSBuZXcgUyAoKTsKKysKKysJCUFjdGlvbiBhID0gKCkgPT4gQ29uc29sZS5X cml0ZUxpbmUgKHMpOworKwl9CisrfQorXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCitkaWZm IC0tZ2l0IGEvbWNzL2Vycm9ycy9jczgxODMuY3MgYi9tY3MvZXJyb3JzL2NzODE4My5jcworbmV3 IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAwMDAwLi5mOWU5MDA0YjczNworLS0tIC9k ZXYvbnVsbAorKysrIGIvbWNzL2Vycm9ycy9jczgxODMuY3MKK0BAIC0wLDAgKzEsMTEgQEAKKysv LyBDUzgxODM6IENhbm5vdCBpbmZlciB0aGUgdHlwZSBvZiBpbXBsaWNpdGx5LXR5cGVkIGRpc2Nh cmQKKysvLyBMaW5lOiA5CisrLy8gQ29tcGlsZXIgb3B0aW9uczogLWxhbmd2ZXJzaW9uOjcuMgor KworK2NsYXNzIFgKKyt7CisrCXB1YmxpYyBzdGF0aWMgdm9pZCBNYWluICgpCisrCXsKKysJCV8g PSBkZWZhdWx0OworKwl9CisrfQorXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCitkaWZmIC0t Z2l0IGEvbWNzL2Vycm9ycy9jczgxODQuY3MgYi9tY3MvZXJyb3JzL2NzODE4NC5jcworbmV3IGZp bGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAwMDAwLi4xOWE0Njg1ZDdiZAorLS0tIC9kZXYv bnVsbAorKysrIGIvbWNzL2Vycm9ycy9jczgxODQuY3MKK0BAIC0wLDAgKzEsMTAgQEAKKysvLyBD UzgxODQ6IEEgZGVjb25zdHJ1Y3Rpb24gY2Fubm90IG1peCBkZWNsYXJhdGlvbnMgYW5kIGV4cHJl c3Npb25zIG9uIHRoZSBsZWZ0LWhhbmQtc2lkZQorKy8vIExpbmU6IDgKKysKKytjbGFzcyBYCisr eworKwlwdWJsaWMgc3RhdGljIHZvaWQgTWFpbiAoKQorKwl7CisrCQkoaW50IGEsIGIpID0gKDEs IDIpOworKwl9CisrfQorXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCitkaWZmIC0tZ2l0IGEv bWNzL2Vycm9ycy9jczgyMDcuY3MgYi9tY3MvZXJyb3JzL2NzODIwNy5jcworbmV3IGZpbGUgbW9k ZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAwMDAwLi4zMTA5MDk0OGI0NQorLS0tIC9kZXYvbnVsbAor KysrIGIvbWNzL2Vycm9ycy9jczgyMDcuY3MKK0BAIC0wLDAgKzEsMTkgQEAKKysvLyBDUzgyMDc6 IEFuIGV4cHJlc3Npb24gdHJlZSBjYW5ub3QgY29udGFpbiBhIGRpc2NhcmQKKysvLyBMaW5lOiAx MQorKworK3VzaW5nIFN5c3RlbTsKKyt1c2luZyBTeXN0ZW0uTGlucS5FeHByZXNzaW9uczsKKysK KytjbGFzcyBYCisreworKwl2b2lkIFRlc3QgKCkKKysJeworKwkJRXhwcmVzc2lvbjxGdW5jPGJv b2w+PiBlID0gKCkgPT4gVHJ5R2V0VmFsdWUgKG91dCBfKTsKKysJfQorKworKwlib29sIFRyeUdl dFZhbHVlIChvdXQgaW50IGFyZykKKysJeworKwkJYXJnID0gMzsKKysJCXJldHVybiB0cnVlOwor Kwl9CisrfQorZGlmZiAtLWdpdCBhL21jcy9lcnJvcnMvY3M4MjA5LmNzIGIvbWNzL2Vycm9ycy9j czgyMDkuY3MKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwMDAwMC4uM2E0NmEy MDZjOGUKKy0tLSAvZGV2L251bGwKKysrKyBiL21jcy9lcnJvcnMvY3M4MjA5LmNzCitAQCAtMCww ICsxLDEwIEBACisrLy8gQ1M4MjA5OiBDYW5ub3QgYXNzaWduIHZvaWQgdG8gYSBkaXNjYXJkCisr Ly8gTGluZTogOAorKworK2NsYXNzIEMKKyt7CisrCXB1YmxpYyBzdGF0aWMgdm9pZCBNYWluICgp CisrCXsKKysJCV8gPSBNYWluICgpOworKwl9CisrfQorXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBm aWxlCitkaWZmIC0tZ2l0IGEvbWNzL2Vycm9ycy9jczgzMTAuY3MgYi9tY3MvZXJyb3JzL2NzODMx MC5jcworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAwMDAwLi4xMzQ2MjRjMDNi NworLS0tIC9kZXYvbnVsbAorKysrIGIvbWNzL2Vycm9ycy9jczgzMTAuY3MKK0BAIC0wLDAgKzEs MTEgQEAKKysvLyBDUzgzMTA6IE9wZXJhdG9yIGArJyBjYW5ub3QgYmUgYXBwbGllZCB0byBvcGVy YW5kIGBkZWZhdWx0JworKy8vIExpbmU6IDkKKysvLyBDb21waWxlciBvcHRpb25zOiAtbGFuZ3Zl cnNpb246bGF0ZXN0CisrCisrY2xhc3MgQworK3sKKysJc3RhdGljIHZvaWQgTWFpbiAoKQorKwl7 CisrCQlpbnQgaCA9IDEgKyBkZWZhdWx0OworKwl9CisrfQorXCBObyBuZXdsaW5lIGF0IGVuZCBv ZiBmaWxlCitkaWZmIC0tZ2l0IGEvbWNzL2Vycm9ycy9jczgzMTEuY3MgYi9tY3MvZXJyb3JzL2Nz ODMxMS5jcworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAwMDAwLi41YjM1MjI5 NDQyZAorLS0tIC9kZXYvbnVsbAorKysrIGIvbWNzL2Vycm9ycy9jczgzMTEuY3MKK0BAIC0wLDAg KzEsMTIgQEAKKysvLyBDUzgzMTE6IENhbm5vdCB1c2UgYSBkZWZhdWx0IGxpdGVyYWwgYXMgYW4g YXJndW1lbnQgdG8gYSBkeW5hbWljYWxseSBkaXNwYXRjaGVkIG9wZXJhdGlvbgorKy8vIExpbmU6 IDEwCisrLy8gQ29tcGlsZXIgb3B0aW9uczogLWxhbmd2ZXJzaW9uOmxhdGVzdAorKworK2NsYXNz IEMKKyt7CisrICAgIHN0YXRpYyB2b2lkIE1haW4gKCkKKysgICAgeworKyAgICAgICAgZHluYW1p YyBkID0gbnVsbDsKKysgICAgICAgIGQuTTIgKGRlZmF1bHQpOworKyAgICB9CisrfQorXCBObyBu ZXdsaW5lIGF0IGVuZCBvZiBmaWxlCitkaWZmIC0tZ2l0IGEvbWNzL2Vycm9ycy9jczgzMTIuY3Mg Yi9tY3MvZXJyb3JzL2NzODMxMi5jcworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAw MDAwMDAwLi5kMmFkM2Y1MmYwMgorLS0tIC9kZXYvbnVsbAorKysrIGIvbWNzL2Vycm9ycy9jczgz MTIuY3MKK0BAIC0wLDAgKzEsMTIgQEAKKysvLyBDUzgzMTI6IFVzZSBvZiBkZWZhdWx0IGxpdGVy YWwgaXMgbm90IHZhbGlkIGluIHRoaXMgY29udGV4dAorKy8vIExpbmU6IDkKKysvLyBDb21waWxl ciBvcHRpb25zOiAtbGFuZ3ZlcnNpb246bGF0ZXN0CisrCisrY2xhc3MgQworK3sKKysJc3RhdGlj IHZvaWQgTWFpbiAoKQorKwl7CisrCQlmb3JlYWNoICh2YXIgeCBpbiBkZWZhdWx0KSB7CisrCQl9 CisrCX0KKyt9CitcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKK2RpZmYgLS1naXQgYS9tY3Mv ZXJyb3JzL2NzODMxNS5jcyBiL21jcy9lcnJvcnMvY3M4MzE1LmNzCituZXcgZmlsZSBtb2RlIDEw MDY0NAoraW5kZXggMDAwMDAwMDAwMDAuLmM0MGJmODYxM2I0CistLS0gL2Rldi9udWxsCisrKysg Yi9tY3MvZXJyb3JzL2NzODMxNS5jcworQEAgLTAsMCArMSwxMSBAQAorKy8vIENTODMxNTogT3Bl cmF0b3IgYD09JyBpcyBhbWJpZ3VvdXMgb24gb3BlcmFuZHMgYGRlZmF1bHQnIGFuZCBgZGVmYXVs dCcKKysvLyBMaW5lOiA5CisrLy8gQ29tcGlsZXIgb3B0aW9uczogLWxhbmd2ZXJzaW9uOmxhdGVz dAorKworK2NsYXNzIEMKKyt7CisrCXN0YXRpYyB2b2lkIE1haW4gKCkKKysJeworKwkJYm9vbCBk ID0gZGVmYXVsdCA9PSBkZWZhdWx0OworKwl9CisrfQorXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBm aWxlCitkaWZmIC0tZ2l0IGEvbWNzL2Vycm9ycy9jczgzMjMuY3MgYi9tY3MvZXJyb3JzL2NzODMy My5jcworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAwMDAwLi5jNmM5MzA5ZWMw ZAorLS0tIC9kZXYvbnVsbAorKysrIGIvbWNzL2Vycm9ycy9jczgzMjMuY3MKK0BAIC0wLDAgKzEs MTUgQEAKKysvLyBDUzgzMjM6IE5hbWVkIGFyZ3VtZW50IGBzdHInIGlzIHVzZWQgb3V0IG9mIHBv c2l0aW9uIGJ1dCBpcyBmb2xsb3dlZCBieSBwb3NpdGlvbmFsIGFyZ3VtZW50CisrLy8gTGluZTog OQorKy8vIENvbXBpbGVyIG9wdGlvbnM6IC1sYW5ndmVyc2lvbjo3LjIKKysKKytjbGFzcyBYCisr eworKwlwdWJsaWMgc3RhdGljIHZvaWQgTWFpbiAoKQorKwl7CisrCQlUZXN0IChzdHI6ICIiLCAi Iik7CisrCX0KKysKKysJc3RhdGljIHZvaWQgVGVzdCAoaW50IGFyZywgc3RyaW5nIHN0cikKKysJ eworKwl9CisrfQorXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCitkaWZmIC0tZ2l0IGEvbWNz L2Vycm9ycy9jczgzMjQuY3MgYi9tY3MvZXJyb3JzL2NzODMyNC5jcworbmV3IGZpbGUgbW9kZSAx MDA2NDQKK2luZGV4IDAwMDAwMDAwMDAwLi44YTBiZTFhZWZiOQorLS0tIC9kZXYvbnVsbAorKysr IGIvbWNzL2Vycm9ycy9jczgzMjQuY3MKK0BAIC0wLDAgKzEsMTIgQEAKKysvLyBDUzgzMjQ6IE5h bWVkIGFyZ3VtZW50IHNwZWNpZmljYXRpb25zIG11c3QgYXBwZWFyIGFmdGVyIGFsbCBmaXhlZCBh cmd1bWVudHMgaGF2ZSBiZWVuIHNwZWNpZmllZCBpbiBhIGR5bmFtaWMgaW52b2NhdGlvbgorKy8v IExpbmU6IDEwCisrLy8gQ29tcGlsZXIgb3B0aW9uczogLWxhbmd2ZXJzaW9uOjcuMgorKworK2Ns YXNzIEMKKyt7CisrCXZvaWQgTSAoKQorKwl7CisrCQlkeW5hbWljIGQgPSBuZXcgb2JqZWN0ICgp OworKwkJZC5NIChhcmc6IDEsICIiKTsKKysJfQorK30KK1wgTm8gbmV3bGluZSBhdCBlbmQgb2Yg ZmlsZQorZGlmZiAtLWdpdCBhL21jcy9lcnJvcnMvY3M4MzQzLmNzIGIvbWNzL2Vycm9ycy9jczgz NDMuY3MKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwMDAwMC4uYjZhYThlODNh MDkKKy0tLSAvZGV2L251bGwKKysrKyBiL21jcy9lcnJvcnMvY3M4MzQzLmNzCitAQCAtMCwwICsx LDEyIEBACisrLy8gQ1M4MzQzOiBgUyc6IHJlZiBzdHJ1Y3RzIGNhbm5vdCBpbXBsZW1lbnQgaW50 ZXJmYWNlcworKy8vIExpbmU6IDcKKysvLyBDb21waWxlciBvcHRpb25zOiAtbGFuZ3ZlcnNpb246 bGF0ZXN0CisrCisrdXNpbmcgU3lzdGVtOworKworK3B1YmxpYyByZWYgc3RydWN0IFMgOiBJRGlz cG9zYWJsZQorK3sKKysJcHVibGljIHZvaWQgRGlzcG9zZSAoKQorKwl7CQkJCisrCX0KKyt9Citk aWZmIC0tZ2l0IGEvbWNzL2Vycm9ycy9jczgzNDUtMi5jcyBiL21jcy9lcnJvcnMvY3M4MzQ1LTIu Y3MKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwMDAwMC4uM2Y2MTM3YjFiNTYK Ky0tLSAvZGV2L251bGwKKysrKyBiL21jcy9lcnJvcnMvY3M4MzQ1LTIuY3MKK0BAIC0wLDAgKzEs MTIgQEAKKysvLyBDUzgzNDU6IEZpZWxkIG9yIGF1dG8taW1wbGVtZW50ZWQgcHJvcGVydHkgY2Fu bm90IGJlIG9mIHR5cGUgYFMnIHVubGVzcyBpdCBpcyBhbiBpbnN0YW5jZSBtZW1iZXIgb2YgYSBy ZWYgc3RydWN0CisrLy8gTGluZTogMTEKKysvLyBDb21waWxlciBvcHRpb25zOiAtbGFuZ3ZlcnNp b246bGF0ZXN0CisrCisrcHVibGljIHJlZiBzdHJ1Y3QgUworK3sKKyt9CisrCisrcmVmIHN0cnVj dCBUZXN0CisreworKwlzdGF0aWMgUyBmaWVsZDsKKyt9CitcIE5vIG5ld2xpbmUgYXQgZW5kIG9m IGZpbGUKK2RpZmYgLS1naXQgYS9tY3MvZXJyb3JzL2NzODM0NS5jcyBiL21jcy9lcnJvcnMvY3M4 MzQ1LmNzCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMDAwMDAuLjBiNWJkMDU1 MThmCistLS0gL2Rldi9udWxsCisrKysgYi9tY3MvZXJyb3JzL2NzODM0NS5jcworQEAgLTAsMCAr MSwxMiBAQAorKy8vIENTODM0NTogRmllbGQgb3IgYXV0by1pbXBsZW1lbnRlZCBwcm9wZXJ0eSBj YW5ub3QgYmUgb2YgdHlwZSBgUycgdW5sZXNzIGl0IGlzIGFuIGluc3RhbmNlIG1lbWJlciBvZiBh IHJlZiBzdHJ1Y3QKKysvLyBMaW5lOiAxMQorKy8vIENvbXBpbGVyIG9wdGlvbnM6IC1sYW5ndmVy c2lvbjpsYXRlc3QKKysKKytwdWJsaWMgcmVmIHN0cnVjdCBTCisreworK30KKysKKytzdHJ1Y3Qg VGVzdAorK3sKKysJUyBmaWVsZDsKKyt9CitcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKK2Rp ZmYgLS1naXQgYS9tY3MvZXJyb3JzL2NzODM0Ni5jcyBiL21jcy9lcnJvcnMvY3M4MzQ2LmNzCitu ZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMDAwMDAuLjU4ZTIyYTJhZTdmCistLS0g L2Rldi9udWxsCisrKysgYi9tY3MvZXJyb3JzL2NzODM0Ni5jcworQEAgLTAsMCArMSwxMyBAQAor Ky8vIENTODM0NjogQ2Fubm90IGNvbnZlcnQgYSBzdGFja2FsbG9jIGV4cHJlc3Npb24gb2YgdHlw ZSBgYnl0ZScgdG8gdHlwZSBgU3lzdGVtLlNwYW48aW50PicKKysvLyBMaW5lOiAxMQorKy8vIENv bXBpbGVyIG9wdGlvbnM6IC1sYW5ndmVyc2lvbjo3LjIKKysKKyt1c2luZyBTeXN0ZW07CisrCisr Y2xhc3MgWAorK3sKKysJcHVibGljIHN0YXRpYyB2b2lkIE1haW4gKCkKKysJeworKwkJU3Bhbjxp bnQ+IHN0YWNrU3BhbiA9IHN0YWNrYWxsb2MgYnl0ZVsxXTsKKysJfQorK30KK1wgTm8gbmV3bGlu ZSBhdCBlbmQgb2YgZmlsZQorZGlmZiAtLWdpdCBhL21jcy9tY3MvYXJndW1lbnQuY3MgYi9tY3Mv bWNzL2FyZ3VtZW50LmNzCitpbmRleCA4NDIxYjRkZmJmYy4uNWIxMDAzZGJhZGYgMTAwNjQ0Cist LS0gYS9tY3MvbWNzL2FyZ3VtZW50LmNzCisrKysgYi9tY3MvbWNzL2FyZ3VtZW50LmNzCitAQCAt MTA2LDExICsxMDYsNiBAQCBuYW1lc3BhY2UgTW9uby5DU2hhcnAKKyAKKyAJCXB1YmxpYyB2aXJ0 dWFsIEV4cHJlc3Npb24gQ3JlYXRlRXhwcmVzc2lvblRyZWUgKFJlc29sdmVDb250ZXh0IHJjKQor IAkJeworLQkJCWlmIChUeXBlLktpbmQgPT0gTWVtYmVyS2luZC5CeVJlZikgeworLQkJCQlyYy5S ZXBvcnQuRXJyb3IgKDgxNTMsIEV4cHIuTG9jYXRpb24sICJBbiBleHByZXNzaW9uIHRyZWUgbGFt YmRhIGNhbm5vdCBjb250YWluIGEgY2FsbCB0byBhIG1ldGhvZCwgcHJvcGVydHksIG9yIGluZGV4 ZXIgdGhhdCByZXR1cm5zIGJ5IHJlZmVyZW5jZSIpOworLQkJCQlyZXR1cm4gbnVsbDsKKy0JCQl9 CistCisgCQkJaWYgKEFyZ1R5cGUgPT0gQVR5cGUuRGVmYXVsdCkKKyAJCQkJcmMuUmVwb3J0LkVy cm9yICg4NTQsIEV4cHIuTG9jYXRpb24sICJBbiBleHByZXNzaW9uIHRyZWUgY2Fubm90IGNvbnRh aW4gYW4gaW52b2NhdGlvbiB3aGljaCB1c2VzIG9wdGlvbmFsIHBhcmFtZXRlciIpOworIAorZGlm ZiAtLWdpdCBhL21jcy9tY3MvYXNzaWduLmNzIGIvbWNzL21jcy9hc3NpZ24uY3MKK2luZGV4IGEw N2M4YzBlZjM5Li41OTY2MjNmZWFlNCAxMDA2NDQKKy0tLSBhL21jcy9tY3MvYXNzaWduLmNzCisr KysgYi9tY3MvbWNzL2Fzc2lnbi5jcworQEAgLTM5MSw5ICszOTEsMjEgQEAgbmFtZXNwYWNlIE1v bm8uQ1NoYXJwIHsKKyAJCQlyZXR1cm4gU3lzdGVtLkxpbnEuRXhwcmVzc2lvbnMuRXhwcmVzc2lv bi5Bc3NpZ24gKHRhcmdldF9vYmplY3QsIHNvdXJjZV9vYmplY3QpOworIAkJfQorIAorLQkJcHJv dGVjdGVkIHZpcnR1YWwgRXhwcmVzc2lvbiBSZXNvbHZlQ29udmVyc2lvbnMgKFJlc29sdmVDb250 ZXh0IGVjKQorKwkJcHJvdGVjdGVkIHZpcnR1YWwgRXhwcmVzc2lvbiBSZXNvbHZlQ29udmVyc2lv bnMgKFJlc29sdmVDb250ZXh0IHJjKQorIAkJeworLQkJCXNvdXJjZSA9IENvbnZlcnQuSW1wbGlj aXRDb252ZXJzaW9uUmVxdWlyZWQgKGVjLCBzb3VyY2UsIHRhcmdldC5UeXBlLCBzb3VyY2UuTG9j YXRpb24pOworKwkJCXZhciB0dHlwZSA9IHRhcmdldC5UeXBlOworKwkJCXZhciBzdGFja0FsbG9j ID0gc291cmNlIGFzIFN0YWNrQWxsb2M7CisrCQkJaWYgKHN0YWNrQWxsb2MgIT0gbnVsbCAmJiB0 dHlwZS5Bcml0eSA9PSAxICYmIHR0eXBlLkdldERlZmluaXRpb24gKCkgPT0gcmMuTW9kdWxlLlBy ZWRlZmluZWRUeXBlcy5TcGFuR2VuZXJpYy5UeXBlU3BlYyAmJgorKwkJCSAgICByYy5Nb2R1bGUu Q29tcGlsZXIuU2V0dGluZ3MuVmVyc2lvbiA+PSBMYW5ndWFnZVZlcnNpb24uVl83XzIpIHsKKysK KysJCQkJdmFyIGV0eXBlID0gdHR5cGUuVHlwZUFyZ3VtZW50cyBbMF07CisrCQkJCXZhciBzdHlw ZSA9ICgoUG9pbnRlckNvbnRhaW5lcilzb3VyY2UuVHlwZSkuRWxlbWVudDsKKysJCQkJaWYgKGV0 eXBlID09IHN0eXBlICYmIHN0YWNrQWxsb2MuUmVzb2x2ZVNwYW5Db252ZXJzaW9uIChyYywgdHR5 cGUpKSB7CisrCQkJCQlyZXR1cm4gdGhpczsKKysJCQkJfQorKwkJCX0KKysKKysJCQlzb3VyY2Ug PSBDb252ZXJ0LkltcGxpY2l0Q29udmVyc2lvblJlcXVpcmVkIChyYywgc291cmNlLCB0dHlwZSwg c291cmNlLkxvY2F0aW9uKTsKKyAJCQlpZiAoc291cmNlID09IG51bGwpCisgCQkJCXJldHVybiBu dWxsOworIAorZGlmZiAtLWdpdCBhL21jcy9tY3MvYXN5bmMuY3MgYi9tY3MvbWNzL2FzeW5jLmNz CitpbmRleCBmZDY0OTkzNDZlOC4uNjQzYWVkNWU1NjggMTAwNjQ0CistLS0gYS9tY3MvbWNzL2Fz eW5jLmNzCisrKysgYi9tY3MvbWNzL2FzeW5jLmNzCitAQCAtNjI4LDU4ICs2MjgsMTEyIEBAIG5h bWVzcGFjZSBNb25vLkNTaGFycAorIAorIAkJcHJvdGVjdGVkIG92ZXJyaWRlIGJvb2wgRG9EZWZp bmVNZW1iZXJzICgpCisgCQl7CistCQkJUHJlZGVmaW5lZFR5cGUgYnVpbGRlcl90eXBlOworLQkJ CVByZWRlZmluZWRNZW1iZXI8TWV0aG9kU3BlYz4gYmY7CistCQkJUHJlZGVmaW5lZE1lbWJlcjxN ZXRob2RTcGVjPiBiczsKKy0JCQlQcmVkZWZpbmVkTWVtYmVyPE1ldGhvZFNwZWM+IHNyOworLQkJ CVByZWRlZmluZWRNZW1iZXI8TWV0aG9kU3BlYz4gc2U7CistCQkJUHJlZGVmaW5lZE1lbWJlcjxN ZXRob2RTcGVjPiBzbTsKKysJCQlUeXBlU3BlYyBidDsKKyAJCQlib29sIGhhc190YXNrX3JldHVy bl90eXBlID0gZmFsc2U7CistCQkJdmFyIHByZWRfbWVtYmVycyA9IE1vZHVsZS5QcmVkZWZpbmVk TWVtYmVyczsKKysJCQl2YXIgaXN0YXRlX21hY2hpbmUgPSBNb2R1bGUuUHJlZGVmaW5lZFR5cGVz LklBc3luY1N0YXRlTWFjaGluZTsKKysJCQlNZXRob2RTcGVjIHNldF9zdGF0ZW1hY2hpbmU7Cisg CistCQkJaWYgKHJldHVybl90eXBlLktpbmQgPT0gTWVtYmVyS2luZC5Wb2lkKSB7CistCQkJCWJ1 aWxkZXJfdHlwZSA9IE1vZHVsZS5QcmVkZWZpbmVkVHlwZXMuQXN5bmNWb2lkTWV0aG9kQnVpbGRl cjsKKy0JCQkJYmYgPSBwcmVkX21lbWJlcnMuQXN5bmNWb2lkTWV0aG9kQnVpbGRlckNyZWF0ZTsK Ky0JCQkJYnMgPSBwcmVkX21lbWJlcnMuQXN5bmNWb2lkTWV0aG9kQnVpbGRlclN0YXJ0OworLQkJ CQlzciA9IHByZWRfbWVtYmVycy5Bc3luY1ZvaWRNZXRob2RCdWlsZGVyU2V0UmVzdWx0OworLQkJ CQlzZSA9IHByZWRfbWVtYmVycy5Bc3luY1ZvaWRNZXRob2RCdWlsZGVyU2V0RXhjZXB0aW9uOwor LQkJCQlzbSA9IHByZWRfbWVtYmVycy5Bc3luY1ZvaWRNZXRob2RCdWlsZGVyU2V0U3RhdGVNYWNo aW5lOworLQkJCX0gZWxzZSBpZiAocmV0dXJuX3R5cGUgPT0gTW9kdWxlLlByZWRlZmluZWRUeXBl cy5UYXNrLlR5cGVTcGVjKSB7CistCQkJCWJ1aWxkZXJfdHlwZSA9IE1vZHVsZS5QcmVkZWZpbmVk VHlwZXMuQXN5bmNUYXNrTWV0aG9kQnVpbGRlcjsKKy0JCQkJYmYgPSBwcmVkX21lbWJlcnMuQXN5 bmNUYXNrTWV0aG9kQnVpbGRlckNyZWF0ZTsKKy0JCQkJYnMgPSBwcmVkX21lbWJlcnMuQXN5bmNU YXNrTWV0aG9kQnVpbGRlclN0YXJ0OworLQkJCQlzciA9IHByZWRfbWVtYmVycy5Bc3luY1Rhc2tN ZXRob2RCdWlsZGVyU2V0UmVzdWx0OworLQkJCQlzZSA9IHByZWRfbWVtYmVycy5Bc3luY1Rhc2tN ZXRob2RCdWlsZGVyU2V0RXhjZXB0aW9uOworLQkJCQlzbSA9IHByZWRfbWVtYmVycy5Bc3luY1Rh c2tNZXRob2RCdWlsZGVyU2V0U3RhdGVNYWNoaW5lOworLQkJCQl0YXNrID0gcHJlZF9tZW1iZXJz LkFzeW5jVGFza01ldGhvZEJ1aWxkZXJUYXNrLkdldCAoKTsKKysJCQlpZiAocmV0dXJuX3R5cGUu SXNDdXN0b21UYXNrVHlwZSAoKSkgeworKwkJCQkvLworKwkJCQkvLyBUT0RPOiBXb3VsZCBiZSBu aWNlIHRvIGNhY2hlIGFsbCB0aGlzIG9uIHBlci10eXBlIGJhc2lzCisrCQkJCS8vCisrCQkJCXZh ciBidHlwZXMgPSBDb21waWxlci5CdWlsdGluVHlwZXM7CisrCQkJCWJ0ID0gcmV0dXJuX3R5cGUu TWVtYmVyRGVmaW5pdGlvbi5HZXRBc3luY01ldGhvZEJ1aWxkZXIgKCk7CisrCQkJCVR5cGVTcGVj IGJ0X2luZmxhdGVkOworKwkJCQlpZiAocmV0dXJuX3R5cGUuSXNHZW5lcmljKSB7CisrCQkJCQli dF9pbmZsYXRlZCA9IGJ0Lk1ha2VHZW5lcmljVHlwZSAoTW9kdWxlLCBidC5NZW1iZXJEZWZpbml0 aW9uLlR5cGVQYXJhbWV0ZXJzKTsKKysJCQkJfSBlbHNlIHsKKysJCQkJCWJ0X2luZmxhdGVkID0g YnQ7CisrCQkJCX0KKysKKysJCQkJdmFyIHNldF9yZXN1bHRfc2lnbiA9IE1lbWJlckZpbHRlci5N ZXRob2QgKCJTZXRSZXN1bHQiLCAwLCBQYXJhbWV0ZXJzQ29tcGlsZWQuQ3JlYXRlRnVsbHlSZXNv bHZlZCAoYnQuTWVtYmVyRGVmaW5pdGlvbi5UeXBlUGFyYW1ldGVycyksIGJ0eXBlcy5Wb2lkKTsK KysJCQkJc2V0X3Jlc3VsdCA9IG5ldyBQcmVkZWZpbmVkTWVtYmVyPE1ldGhvZFNwZWM+IChNb2R1 bGUsIGJ0LCBzZXRfcmVzdWx0X3NpZ24pLlJlc29sdmUgKExvY2F0aW9uKTsKKysKKysJCQkJdmFy IHNldF9leGNlcHRpb25fc2lnbiA9IE1lbWJlckZpbHRlci5NZXRob2QgKCJTZXRFeGNlcHRpb24i LCAwLCBQYXJhbWV0ZXJzQ29tcGlsZWQuQ3JlYXRlRnVsbHlSZXNvbHZlZCAoYnR5cGVzLkV4Y2Vw dGlvbiksIGJ0eXBlcy5Wb2lkKTsKKysJCQkJc2V0X2V4Y2VwdGlvbiA9IG5ldyBQcmVkZWZpbmVk TWVtYmVyPE1ldGhvZFNwZWM+IChNb2R1bGUsIGJ0LCBzZXRfZXhjZXB0aW9uX3NpZ24pLlJlc29s dmUgKExvY2F0aW9uKTsKKysKKysJCQkJdmFyIGJ1aWxkZXJfZmFjdG9yeV9zaWduID0gTWVtYmVy RmlsdGVyLk1ldGhvZCAoIkNyZWF0ZSIsIDAsIFBhcmFtZXRlcnNDb21waWxlZC5FbXB0eVJlYWRP bmx5UGFyYW1ldGVycywgYnRfaW5mbGF0ZWQpOworKwkJCQlidWlsZGVyX2ZhY3RvcnkgPSBuZXcg UHJlZGVmaW5lZE1lbWJlcjxNZXRob2RTcGVjPiAoTW9kdWxlLCBidCwgYnVpbGRlcl9mYWN0b3J5 X3NpZ24pLlJlc29sdmUgKExvY2F0aW9uKTsKKysJCQkJaWYgKGJ1aWxkZXJfZmFjdG9yeT8uSXNT dGF0aWMgPT0gZmFsc2UpCisrCQkJCQl0aHJvdyBuZXcgTm90SW1wbGVtZW50ZWRFeGNlcHRpb24g KCJyZXBvcnQgYmV0dGVyIGVycm9yIG1lc3NhZ2UiKTsKKysKKysJCQkJdmFyIGJ1aWxkZXJfc3Rh cnRfc2lnbiA9IE1lbWJlckZpbHRlci5NZXRob2QgKCJTdGFydCIsIDEsIG5ldyBQYXJhbWV0ZXJz SW1wb3J0ZWQgKAorKwkJCQkJCW5ldyBbXSB7CisrCQkJCQkJCQluZXcgUGFyYW1ldGVyRGF0YSAo bnVsbCwgUGFyYW1ldGVyLk1vZGlmaWVyLlJFRiksCisrCQkJCQkJCX0sCisrCQkJCQkJbmV3IFtd IHsKKysJCQkJCQkJCW5ldyBUeXBlUGFyYW1ldGVyU3BlYyAoMCwgbnVsbCwgU3BlY2lhbENvbnN0 cmFpbnQuTm9uZSwgVmFyaWFuY2UuTm9uZSwgbnVsbCksCisrCQkJCQkJCX0sIGZhbHNlKSwKKysJ CQkJCWJ0eXBlcy5Wb2lkKTsKKysJCQkJYnVpbGRlcl9zdGFydCA9IG5ldyBQcmVkZWZpbmVkTWVt YmVyPE1ldGhvZFNwZWM+IChNb2R1bGUsIGJ0LCBidWlsZGVyX3N0YXJ0X3NpZ24pLlJlc29sdmUg KExvY2F0aW9uKTsKKysKKysJCQkJaWYgKCFpc3RhdGVfbWFjaGluZS5EZWZpbmUgKCkpCisrCQkJ CQlyZXR1cm4gZmFsc2U7CisrCisrCQkJCXZhciBzZXRfc3RhdGVtYWNoaW5lX3NpZ24gPSBNZW1i ZXJGaWx0ZXIuTWV0aG9kICgiU2V0U3RhdGVNYWNoaW5lIiwgMCwgUGFyYW1ldGVyc0NvbXBpbGVk LkNyZWF0ZUZ1bGx5UmVzb2x2ZWQgKGlzdGF0ZV9tYWNoaW5lLlR5cGVTcGVjKSwgYnR5cGVzLlZv aWQpOworKwkJCQlzZXRfc3RhdGVtYWNoaW5lID0gbmV3IFByZWRlZmluZWRNZW1iZXI8TWV0aG9k U3BlYz4gKE1vZHVsZSwgYnQsIHNldF9zdGF0ZW1hY2hpbmVfc2lnbikuUmVzb2x2ZSAoTG9jYXRp b24pOyA7CisrCisrCQkJCXZhciB0YXNrX3NpZ24gPSBNZW1iZXJGaWx0ZXIuUHJvcGVydHkgKCJU YXNrIiwgcmV0dXJuX3R5cGUuTWVtYmVyRGVmaW5pdGlvbiBhcyBUeXBlU3BlYyk7CisrCQkJCXRh c2sgPSBuZXcgUHJlZGVmaW5lZE1lbWJlcjxQcm9wZXJ0eVNwZWM+IChNb2R1bGUsIGJ0LCB0YXNr X3NpZ24pLlJlc29sdmUgKExvY2F0aW9uKTsKKysKKysJCQkJaWYgKHNldF9yZXN1bHQgPT0gbnVs bCB8fCBzZXRfZXhjZXB0aW9uID09IG51bGwgfHwgYnVpbGRlcl9mYWN0b3J5ID09IG51bGwgfHwg YnVpbGRlcl9zdGFydCA9PSBudWxsIHx8IHNldF9zdGF0ZW1hY2hpbmUgPT0gbnVsbCB8fCB0YXNr ID09IG51bGwgfHwKKysJCQkJCSFNb2R1bGUuUHJlZGVmaW5lZFR5cGVzLklOb3RpZnlDb21wbGV0 aW9uLkRlZmluZSAoKSkgeworKwkJCQkJcmV0dXJuIGZhbHNlOworKwkJCQl9CisrCisrCQkJCWhh c190YXNrX3JldHVybl90eXBlID0gcmV0dXJuX3R5cGUuSXNHZW5lcmljOworIAkJCX0gZWxzZSB7 CistCQkJCWJ1aWxkZXJfdHlwZSA9IE1vZHVsZS5QcmVkZWZpbmVkVHlwZXMuQXN5bmNUYXNrTWV0 aG9kQnVpbGRlckdlbmVyaWM7CistCQkJCWJmID0gcHJlZF9tZW1iZXJzLkFzeW5jVGFza01ldGhv ZEJ1aWxkZXJHZW5lcmljQ3JlYXRlOworLQkJCQlicyA9IHByZWRfbWVtYmVycy5Bc3luY1Rhc2tN ZXRob2RCdWlsZGVyR2VuZXJpY1N0YXJ0OworLQkJCQlzciA9IHByZWRfbWVtYmVycy5Bc3luY1Rh c2tNZXRob2RCdWlsZGVyR2VuZXJpY1NldFJlc3VsdDsKKy0JCQkJc2UgPSBwcmVkX21lbWJlcnMu QXN5bmNUYXNrTWV0aG9kQnVpbGRlckdlbmVyaWNTZXRFeGNlcHRpb247CistCQkJCXNtID0gcHJl ZF9tZW1iZXJzLkFzeW5jVGFza01ldGhvZEJ1aWxkZXJHZW5lcmljU2V0U3RhdGVNYWNoaW5lOwor LQkJCQl0YXNrID0gcHJlZF9tZW1iZXJzLkFzeW5jVGFza01ldGhvZEJ1aWxkZXJHZW5lcmljVGFz ay5HZXQgKCk7CistCQkJCWhhc190YXNrX3JldHVybl90eXBlID0gdHJ1ZTsKKy0JCQl9CisrCQkJ CVByZWRlZmluZWRUeXBlIGJ1aWxkZXJfdHlwZTsKKysJCQkJUHJlZGVmaW5lZE1lbWJlcjxNZXRo b2RTcGVjPiBiZjsKKysJCQkJUHJlZGVmaW5lZE1lbWJlcjxNZXRob2RTcGVjPiBiczsKKysJCQkJ UHJlZGVmaW5lZE1lbWJlcjxNZXRob2RTcGVjPiBzcjsKKysJCQkJUHJlZGVmaW5lZE1lbWJlcjxN ZXRob2RTcGVjPiBzZTsKKysJCQkJUHJlZGVmaW5lZE1lbWJlcjxNZXRob2RTcGVjPiBzbTsKKysJ CQkJdmFyIHByZWRfbWVtYmVycyA9IE1vZHVsZS5QcmVkZWZpbmVkTWVtYmVyczsKKysKKysJCQkJ aWYgKHJldHVybl90eXBlLktpbmQgPT0gTWVtYmVyS2luZC5Wb2lkKSB7CisrCQkJCQlidWlsZGVy X3R5cGUgPSBNb2R1bGUuUHJlZGVmaW5lZFR5cGVzLkFzeW5jVm9pZE1ldGhvZEJ1aWxkZXI7Cisr CQkJCQliZiA9IHByZWRfbWVtYmVycy5Bc3luY1ZvaWRNZXRob2RCdWlsZGVyQ3JlYXRlOworKwkJ CQkJYnMgPSBwcmVkX21lbWJlcnMuQXN5bmNWb2lkTWV0aG9kQnVpbGRlclN0YXJ0OworKwkJCQkJ c3IgPSBwcmVkX21lbWJlcnMuQXN5bmNWb2lkTWV0aG9kQnVpbGRlclNldFJlc3VsdDsKKysJCQkJ CXNlID0gcHJlZF9tZW1iZXJzLkFzeW5jVm9pZE1ldGhvZEJ1aWxkZXJTZXRFeGNlcHRpb247Cisr CQkJCQlzbSA9IHByZWRfbWVtYmVycy5Bc3luY1ZvaWRNZXRob2RCdWlsZGVyU2V0U3RhdGVNYWNo aW5lOworKwkJCQl9IGVsc2UgaWYgKHJldHVybl90eXBlID09IE1vZHVsZS5QcmVkZWZpbmVkVHlw ZXMuVGFzay5UeXBlU3BlYykgeworKwkJCQkJYnVpbGRlcl90eXBlID0gTW9kdWxlLlByZWRlZmlu ZWRUeXBlcy5Bc3luY1Rhc2tNZXRob2RCdWlsZGVyOworKwkJCQkJYmYgPSBwcmVkX21lbWJlcnMu QXN5bmNUYXNrTWV0aG9kQnVpbGRlckNyZWF0ZTsKKysJCQkJCWJzID0gcHJlZF9tZW1iZXJzLkFz eW5jVGFza01ldGhvZEJ1aWxkZXJTdGFydDsKKysJCQkJCXNyID0gcHJlZF9tZW1iZXJzLkFzeW5j VGFza01ldGhvZEJ1aWxkZXJTZXRSZXN1bHQ7CisrCQkJCQlzZSA9IHByZWRfbWVtYmVycy5Bc3lu Y1Rhc2tNZXRob2RCdWlsZGVyU2V0RXhjZXB0aW9uOworKwkJCQkJc20gPSBwcmVkX21lbWJlcnMu QXN5bmNUYXNrTWV0aG9kQnVpbGRlclNldFN0YXRlTWFjaGluZTsKKysJCQkJCXRhc2sgPSBwcmVk X21lbWJlcnMuQXN5bmNUYXNrTWV0aG9kQnVpbGRlclRhc2suR2V0ICgpOworKwkJCQl9IGVsc2Ug eworKwkJCQkJYnVpbGRlcl90eXBlID0gTW9kdWxlLlByZWRlZmluZWRUeXBlcy5Bc3luY1Rhc2tN ZXRob2RCdWlsZGVyR2VuZXJpYzsKKysJCQkJCWJmID0gcHJlZF9tZW1iZXJzLkFzeW5jVGFza01l dGhvZEJ1aWxkZXJHZW5lcmljQ3JlYXRlOworKwkJCQkJYnMgPSBwcmVkX21lbWJlcnMuQXN5bmNU YXNrTWV0aG9kQnVpbGRlckdlbmVyaWNTdGFydDsKKysJCQkJCXNyID0gcHJlZF9tZW1iZXJzLkFz eW5jVGFza01ldGhvZEJ1aWxkZXJHZW5lcmljU2V0UmVzdWx0OworKwkJCQkJc2UgPSBwcmVkX21l bWJlcnMuQXN5bmNUYXNrTWV0aG9kQnVpbGRlckdlbmVyaWNTZXRFeGNlcHRpb247CisrCQkJCQlz bSA9IHByZWRfbWVtYmVycy5Bc3luY1Rhc2tNZXRob2RCdWlsZGVyR2VuZXJpY1NldFN0YXRlTWFj aGluZTsKKysJCQkJCXRhc2sgPSBwcmVkX21lbWJlcnMuQXN5bmNUYXNrTWV0aG9kQnVpbGRlckdl bmVyaWNUYXNrLkdldCAoKTsKKysJCQkJCWhhc190YXNrX3JldHVybl90eXBlID0gdHJ1ZTsKKysJ CQkJfQorIAorLQkJCXNldF9yZXN1bHQgPSBzci5HZXQgKCk7CistCQkJc2V0X2V4Y2VwdGlvbiA9 IHNlLkdldCAoKTsKKy0JCQlidWlsZGVyX2ZhY3RvcnkgPSBiZi5HZXQgKCk7CistCQkJYnVpbGRl cl9zdGFydCA9IGJzLkdldCAoKTsKKysJCQkJc2V0X3Jlc3VsdCA9IHNyLkdldCAoKTsKKysJCQkJ c2V0X2V4Y2VwdGlvbiA9IHNlLkdldCAoKTsKKysJCQkJYnVpbGRlcl9mYWN0b3J5ID0gYmYuR2V0 ICgpOworKwkJCQlidWlsZGVyX3N0YXJ0ID0gYnMuR2V0ICgpOworIAorLQkJCXZhciBpc3RhdGVf bWFjaGluZSA9IE1vZHVsZS5QcmVkZWZpbmVkVHlwZXMuSUFzeW5jU3RhdGVNYWNoaW5lOworLQkJ CXZhciBzZXRfc3RhdGVtYWNoaW5lID0gc20uR2V0ICgpOworLQorLQkJCWlmICghYnVpbGRlcl90 eXBlLkRlZmluZSAoKSB8fCAhaXN0YXRlX21hY2hpbmUuRGVmaW5lICgpIHx8IHNldF9yZXN1bHQg PT0gbnVsbCB8fCBidWlsZGVyX2ZhY3RvcnkgPT0gbnVsbCB8fAorLQkJCQlzZXRfZXhjZXB0aW9u ID09IG51bGwgfHwgc2V0X3N0YXRlbWFjaGluZSA9PSBudWxsIHx8IGJ1aWxkZXJfc3RhcnQgPT0g bnVsbCB8fAorLQkJCQkhTW9kdWxlLlByZWRlZmluZWRUeXBlcy5JTm90aWZ5Q29tcGxldGlvbi5E ZWZpbmUgKCkpIHsKKy0JCQkJUmVwb3J0LkVycm9yICgxOTkzLCBMb2NhdGlvbiwKKy0JCQkJCSJD YW5ub3QgZmluZCBjb21waWxlciByZXF1aXJlZCB0eXBlcyBmb3IgYXN5bmNocm9ub3VzIGZ1bmN0 aW9ucyBzdXBwb3J0LiBBcmUgeW91IHRhcmdldGluZyB0aGUgd3JvbmcgZnJhbWV3b3JrIHZlcnNp b24/Iik7CistCQkJCXJldHVybiBiYXNlLkRvRGVmaW5lTWVtYmVycyAoKTsKKy0JCQl9CisrCQkJ CXNldF9zdGF0ZW1hY2hpbmUgPSBzbS5HZXQgKCk7CisrCisrCQkJCWlmICghYnVpbGRlcl90eXBl LkRlZmluZSAoKSB8fCAhaXN0YXRlX21hY2hpbmUuRGVmaW5lICgpIHx8IHNldF9yZXN1bHQgPT0g bnVsbCB8fCBidWlsZGVyX2ZhY3RvcnkgPT0gbnVsbCB8fAorKwkJCQkJc2V0X2V4Y2VwdGlvbiA9 PSBudWxsIHx8IHNldF9zdGF0ZW1hY2hpbmUgPT0gbnVsbCB8fCBidWlsZGVyX3N0YXJ0ID09IG51 bGwgfHwKKysJCQkJCSFNb2R1bGUuUHJlZGVmaW5lZFR5cGVzLklOb3RpZnlDb21wbGV0aW9uLkRl ZmluZSAoKSkgeworKwkJCQkJUmVwb3J0LkVycm9yICgxOTkzLCBMb2NhdGlvbiwKKysJCQkJCQki Q2Fubm90IGZpbmQgY29tcGlsZXIgcmVxdWlyZWQgdHlwZXMgZm9yIGFzeW5jaHJvbm91cyBmdW5j dGlvbnMgc3VwcG9ydC4gQXJlIHlvdSB0YXJnZXRpbmcgdGhlIHdyb25nIGZyYW1ld29yayB2ZXJz aW9uPyIpOworKwkJCQkJcmV0dXJuIGJhc2UuRG9EZWZpbmVNZW1iZXJzICgpOworKwkJCQl9Cisg CistCQkJdmFyIGJ0ID0gYnVpbGRlcl90eXBlLlR5cGVTcGVjOworKwkJCQlidCA9IGJ1aWxkZXJf dHlwZS5UeXBlU3BlYzsKKysJCQl9CisgCisgCQkJLy8KKyAJCQkvLyBJbmZsYXRlIGdlbmVyaWMg VGFzayB0eXBlcworQEAgLTgyNSw5ICs4NzksMjYgQEAgbmFtZXNwYWNlIE1vbm8uQ1NoYXJwCisg CQkJCXByZWRlZmluZWQgPSB1bnNhZmVWZXJzaW9uID8gcG0uQXN5bmNWb2lkTWV0aG9kQnVpbGRl ck9uQ29tcGxldGVkVW5zYWZlIDogcG0uQXN5bmNWb2lkTWV0aG9kQnVpbGRlck9uQ29tcGxldGVk OworIAkJCX0gZWxzZSBpZiAocmV0dXJuX3R5cGUgPT0gTW9kdWxlLlByZWRlZmluZWRUeXBlcy5U YXNrLlR5cGVTcGVjKSB7CisgCQkJCXByZWRlZmluZWQgPSB1bnNhZmVWZXJzaW9uID8gcG0uQXN5 bmNUYXNrTWV0aG9kQnVpbGRlck9uQ29tcGxldGVkVW5zYWZlIDogcG0uQXN5bmNUYXNrTWV0aG9k QnVpbGRlck9uQ29tcGxldGVkOworLQkJCX0gZWxzZSB7CisrCQkJfSBlbHNlIGlmIChyZXR1cm5f dHlwZS5Jc0dlbmVyaWNUYXNrKSB7CisgCQkJCXByZWRlZmluZWQgPSB1bnNhZmVWZXJzaW9uID8g cG0uQXN5bmNUYXNrTWV0aG9kQnVpbGRlckdlbmVyaWNPbkNvbXBsZXRlZFVuc2FmZSA6IHBtLkFz eW5jVGFza01ldGhvZEJ1aWxkZXJHZW5lcmljT25Db21wbGV0ZWQ7CisgCQkJCWhhc190YXNrX3Jl dHVybl90eXBlID0gdHJ1ZTsKKysJCQl9IGVsc2UgeworKwkJCQl2YXIgcGFyYW1ldGVycyA9IG5l dyBQYXJhbWV0ZXJzSW1wb3J0ZWQgKAorKwkJCQkJbmV3IFtdIHsKKysJCQkJCQkJCW5ldyBQYXJh bWV0ZXJEYXRhIChudWxsLCBQYXJhbWV0ZXIuTW9kaWZpZXIuUkVGKSwKKysJCQkJCQkJCW5ldyBQ YXJhbWV0ZXJEYXRhIChudWxsLCBQYXJhbWV0ZXIuTW9kaWZpZXIuUkVGKQorKwkJCQkJCX0sCisr CQkJCQluZXcgW10geworKwkJCQkJCQkJbmV3IFR5cGVQYXJhbWV0ZXJTcGVjICgwLCBudWxsLCBT cGVjaWFsQ29uc3RyYWludC5Ob25lLCBWYXJpYW5jZS5Ob25lLCBudWxsKSwKKysJCQkJCQkJCW5l dyBUeXBlUGFyYW1ldGVyU3BlYyAoMSwgbnVsbCwgU3BlY2lhbENvbnN0cmFpbnQuTm9uZSwgVmFy aWFuY2UuTm9uZSwgbnVsbCkKKysJCQkJCX0sIGZhbHNlKTsKKysKKysJCQkJdmFyIG9uX2NvbXBs ZXRlZF9zaWduID0gdW5zYWZlVmVyc2lvbiA/CisrCQkJCQlNZW1iZXJGaWx0ZXIuTWV0aG9kICgi QXdhaXRVbnNhZmVPbkNvbXBsZXRlZCIsIDIsIHBhcmFtZXRlcnMsIENvbXBpbGVyLkJ1aWx0aW5U eXBlcy5Wb2lkKSA6CisrCQkJCSAgICBNZW1iZXJGaWx0ZXIuTWV0aG9kICgiQXdhaXRPbkNvbXBs ZXRlZCIsIDIsIHBhcmFtZXRlcnMsIENvbXBpbGVyLkJ1aWx0aW5UeXBlcy5Wb2lkKTsKKysJCQkJ CisrCQkJCXByZWRlZmluZWQgPSBuZXcgUHJlZGVmaW5lZE1lbWJlcjxNZXRob2RTcGVjPiAoTW9k dWxlLCByZXR1cm5fdHlwZS5NZW1iZXJEZWZpbml0aW9uLkdldEFzeW5jTWV0aG9kQnVpbGRlciAo KSwgb25fY29tcGxldGVkX3NpZ24pOworKwkJCQloYXNfdGFza19yZXR1cm5fdHlwZSA9IHJldHVy bl90eXBlLklzR2VuZXJpYzsKKyAJCQl9CisgCisgCQkJdmFyIG9uX2NvbXBsZXRlZCA9IHByZWRl ZmluZWQuUmVzb2x2ZSAoTG9jYXRpb24pOworQEAgLTg4NywxMSArOTU4LDE0IEBAIG5hbWVzcGFj ZSBNb25vLkNTaGFycAorIAkJCS8vIHN0YXRlTWFjaGluZS4kYnVpbGRlci5TdGFydDx7c3RvcmV5 LXR5cGV9PihyZWYgc3RhdGVNYWNoaW5lKTsKKyAJCQkvLworIAkJCWluc3RhbmNlLkFkZHJlc3NP ZiAoZWMsIEFkZHJlc3NPcC5TdG9yZSk7CistCQkJZWMuRW1pdCAoT3BDb2Rlcy5MZGZsZGEsIGJ1 aWxkZXJfZmllbGQpOworKworKwkJCWJvb2wgc3RydWN0X2J1aWxkZXIgPSBidWlsZGVyLk1lbWJl clR5cGUuSXNTdHJ1Y3Q7CisrCisrCQkJZWMuRW1pdCAoc3RydWN0X2J1aWxkZXIgPyBPcENvZGVz LkxkZmxkYSA6IE9wQ29kZXMuTGRmbGQsIGJ1aWxkZXJfZmllbGQpOworIAkJCWlmIChUYXNrICE9 IG51bGwpCisgCQkJCWVjLkVtaXQgKE9wQ29kZXMuRHVwKTsKKyAJCQlpbnN0YW5jZS5BZGRyZXNz T2YgKGVjLCBBZGRyZXNzT3AuU3RvcmUpOworLQkJCWVjLkVtaXQgKE9wQ29kZXMuQ2FsbCwgYnVp bGRlcl9zdGFydC5NYWtlR2VuZXJpY01ldGhvZCAoTW9kdWxlLCBpbnN0YW5jZS5UeXBlKSk7Cisr CQkJZWMuRW1pdCAoc3RydWN0X2J1aWxkZXIgPyBPcENvZGVzLkNhbGwgOiBPcENvZGVzLkNhbGx2 aXJ0LCBidWlsZGVyX3N0YXJ0Lk1ha2VHZW5lcmljTWV0aG9kIChNb2R1bGUsIGluc3RhbmNlLlR5 cGUpKTsKKyAKKyAJCQkvLworIAkJCS8vIEVtaXRzIHJldHVybiBzdGF0ZU1hY2hpbmUuJGJ1aWxk ZXIuVGFzazsKK0BAIC0xMDI5LDQgKzExMDMsMjAgQEAgbmFtZXNwYWNlIE1vbm8uQ1NoYXJwCisg CQkJRW1pdEFzc2lnbiAoZWMsIG5ldyBOdWxsQ29uc3RhbnQgKHR5cGUsIGxvYyksIGZhbHNlLCBm YWxzZSk7CisgCQl9CisgCX0KKysKKysJc3RhdGljIGNsYXNzIFR5cGVTcGVjQXN5bmNFeHRlbnNp b25zCisrCXsKKysJCXB1YmxpYyBzdGF0aWMgYm9vbCBJc0N1c3RvbVRhc2tUeXBlICh0aGlzIFR5 cGVTcGVjIHR5cGUpCisrCQl7CisrCQkJLy8gTEFNRVNQRUM6IEFyaXR5IGlzIG5vdCBtZW50aW9u ZWQKKysJCQlpZiAodHlwZS5Bcml0eSA+IDEpCisrCQkJCXJldHVybiBmYWxzZTsKKysJCQkKKysJ CQl2YXIgYW1iID0gdHlwZS5NZW1iZXJEZWZpbml0aW9uLkdldEFzeW5jTWV0aG9kQnVpbGRlciAo KTsKKysJCQlpZiAoYW1iID09IG51bGwpCisrCQkJCXJldHVybiBmYWxzZTsKKysKKysJCQlyZXR1 cm4gYW1iLkFyaXR5ID09IHR5cGUuQXJpdHk7CisrCQl9CisrCX0KKyB9CitkaWZmIC0tZ2l0IGEv bWNzL21jcy9hdHRyaWJ1dGUuY3MgYi9tY3MvbWNzL2F0dHJpYnV0ZS5jcworaW5kZXggM2ZmMmQ2 OGNjYjUuLjgzZDQwMzExOGFkIDEwMDY0NAorLS0tIGEvbWNzL21jcy9hdHRyaWJ1dGUuY3MKKysr KyBiL21jcy9tY3MvYXR0cmlidXRlLmNzCitAQCAtNzg5LDYgKzc4OSwxNyBAQCBuYW1lc3BhY2Ug TW9uby5DU2hhcnAgeworIAkJCXJldHVybiAoKEJvb2xDb25zdGFudCkgcG9zX2FyZ3NbMF0uRXhw cikuVmFsdWU7CisgCQl9CisgCisrCQlwdWJsaWMgVHlwZVNwZWMgR2V0QXN5bmNNZXRob2RCdWls ZGVyVmFsdWUgKCkKKysJCXsKKysJCQlpZiAoIWFyZ19yZXNvbHZlZCkKKysJCQkJUmVzb2x2ZSAo KTsKKysKKysJCQlpZiAocmVzb2x2ZV9lcnJvcikKKysJCQkJcmV0dXJuIG51bGw7CisrCisrCQkJ cmV0dXJuIEdldEFyZ3VtZW50VHlwZSAoKTsKKysJCX0KKysKKyAJCXB1YmxpYyBUeXBlU3BlYyBH ZXRDb0NsYXNzQXR0cmlidXRlVmFsdWUgKCkKKyAJCXsKKyAJCQlpZiAoIWFyZ19yZXNvbHZlZCkK K0BAIC0xNzU0LDkgKzE3NjUsMTEgQEAgbmFtZXNwYWNlIE1vbm8uQ1NoYXJwIHsKKyAKKyAJCS8v IE5ldyBpbiAuTkVUIDQuNworIAkJcHVibGljIHJlYWRvbmx5IFByZWRlZmluZWRUdXBsZUVsZW1l bnROYW1lc0F0dHJpYnV0ZSBUdXBsZUVsZW1lbnROYW1lczsKKysJCXB1YmxpYyByZWFkb25seSBQ cmVkZWZpbmVkQXR0cmlidXRlIEFzeW5jTWV0aG9kQnVpbGRlcjsKKyAKKyAJCS8vIE5ldyBpbiAu TkVUIDQuNy4xCisgCQlwdWJsaWMgcmVhZG9ubHkgUHJlZGVmaW5lZEF0dHJpYnV0ZSBJc1JlYWRP bmx5OworKwkJcHVibGljIHJlYWRvbmx5IFByZWRlZmluZWRBdHRyaWJ1dGUgSXNCeVJlZkxpa2U7 CisgCisgCQkvLworIAkJLy8gT3B0aW9uYWwgdHlwZXMgd2hpY2ggYXJlIHVzZWQgYXMgdHlwZXMg YW5kIGZvciBtZW1iZXIgbG9va3VwCitAQCAtMTgzNyw4ICsxODUwLDEwIEBAIG5hbWVzcGFjZSBN b25vLkNTaGFycCB7CisgCQkJQ2FsbGVyTGluZU51bWJlckF0dHJpYnV0ZSA9IG5ldyBQcmVkZWZp bmVkQXR0cmlidXRlIChtb2R1bGUsICJTeXN0ZW0uUnVudGltZS5Db21waWxlclNlcnZpY2VzIiwg IkNhbGxlckxpbmVOdW1iZXJBdHRyaWJ1dGUiKTsKKyAJCQlDYWxsZXJGaWxlUGF0aEF0dHJpYnV0 ZSA9IG5ldyBQcmVkZWZpbmVkQXR0cmlidXRlIChtb2R1bGUsICJTeXN0ZW0uUnVudGltZS5Db21w aWxlclNlcnZpY2VzIiwgIkNhbGxlckZpbGVQYXRoQXR0cmlidXRlIik7CisgCisrCQkJQXN5bmNN ZXRob2RCdWlsZGVyID0gbmV3IFByZWRlZmluZWRBdHRyaWJ1dGUgKG1vZHVsZSwgIlN5c3RlbS5S dW50aW1lLkNvbXBpbGVyU2VydmljZXMiLCAiQXN5bmNNZXRob2RCdWlsZGVyQXR0cmlidXRlIik7 CisgCQkJVHVwbGVFbGVtZW50TmFtZXMgPSBuZXcgUHJlZGVmaW5lZFR1cGxlRWxlbWVudE5hbWVz QXR0cmlidXRlIChtb2R1bGUsICJTeXN0ZW0uUnVudGltZS5Db21waWxlclNlcnZpY2VzIiwgIlR1 cGxlRWxlbWVudE5hbWVzQXR0cmlidXRlIik7CisgCQkJSXNSZWFkT25seSA9IG5ldyBQcmVkZWZp bmVkQXR0cmlidXRlIChtb2R1bGUsICJTeXN0ZW0uUnVudGltZS5Db21waWxlclNlcnZpY2VzIiwg IklzUmVhZE9ubHlBdHRyaWJ1dGUiKTsKKysJCQlJc0J5UmVmTGlrZSA9IG5ldyBQcmVkZWZpbmVk QXR0cmlidXRlIChtb2R1bGUsICJTeXN0ZW0uUnVudGltZS5Db21waWxlclNlcnZpY2VzIiwgIklz QnlSZWZMaWtlQXR0cmlidXRlIik7CisgCisgCQkJLy8gVE9ETzogU2hvdWxkIGRlZmluZSBvbmx5 IGF0dHJpYnV0ZXMgd2hpY2ggYXJlIHVzZWQgZm9yIGNvbXBhcmlzb24KKyAJCQljb25zdCBTeXN0 ZW0uUmVmbGVjdGlvbi5CaW5kaW5nRmxhZ3MgYWxsX2ZpZWxkcyA9IFN5c3RlbS5SZWZsZWN0aW9u LkJpbmRpbmdGbGFncy5QdWJsaWMgfAorZGlmZiAtLWdpdCBhL21jcy9tY3MvY2xhc3MuY3MgYi9t Y3MvbWNzL2NsYXNzLmNzCitpbmRleCA5YWZiMzJjNmZlNS4uNmIxYWRjMjk3YTMgMTAwNjQ0Cist LS0gYS9tY3MvbWNzL2NsYXNzLmNzCisrKysgYi9tY3MvbWNzL2NsYXNzLmNzCitAQCAtMjI0LDYg KzIyNCwyNCBAQCBuYW1lc3BhY2UgTW9uby5DU2hhcnAKKyAJCQl9CisgCQl9CisgCisrCQlwdWJs aWMgdm9pZCBDbG9zZUNvbnRhaW5lckVhcmx5Rm9yUmVmbGVjdGlvbkVtaXQgKCkKKysJCXsKKysJ CQlpZiAoY29udGFpbmVycyAhPSBudWxsKSB7CisrCQkJCWZvcmVhY2ggKFR5cGVDb250YWluZXIg dGMgaW4gY29udGFpbmVycykgeworKwkJCQkJLy8KKysJCQkJCS8vIFNSRSByZXF1aXJlcyBkdWUg dG8gaW50ZXJuYWwgY2hlY2tzIHRoYXQgYW55IGZpZWxkIG9mIGVudW0gdHlwZSBpcworKwkJCQkJ Ly8gYmFrZWQuIFdlIGNsb3NlIGFsbCBlbnVtIHR5cGVzIGJlZm9yZSBjbG9zaW5nIGFueSBvdGhl ciB0eXBlcyB0bworKwkJCQkJLy8gd29ya2Fyb3VuZCB0aGlzIGxpbWl0YXRpb24KKysJCQkJCS8v CisrCQkJCQlpZiAodGMuS2luZCA9PSBNZW1iZXJLaW5kLkVudW0pIHsKKysJCQkJCQl0Yy5DbG9z ZUNvbnRhaW5lciAoKTsKKysJCQkJCX0gZWxzZSB7CisrCQkJCQkJdGMuQ2xvc2VDb250YWluZXJF YXJseUZvclJlZmxlY3Rpb25FbWl0ICgpOworKwkJCQkJfQorKwkJCQl9CisrCQkJfQorKwkJfQor KworIAkJcHVibGljIHZpcnR1YWwgdm9pZCBDcmVhdGVNZXRhZGF0YU5hbWUgKFN0cmluZ0J1aWxk ZXIgc2IpCisgCQl7CisgCQkJaWYgKFBhcmVudCAhPSBudWxsICYmIFBhcmVudC5NZW1iZXJOYW1l ICE9IG51bGwpCitAQCAtMTEwMiw2ICsxMTIwLDE4IEBAIG5hbWVzcGFjZSBNb25vLkNTaGFycAor IAkJCQltZW1iZXIuR2VuZXJhdGVEb2NDb21tZW50IChidWlsZGVyKTsKKyAJCX0KKyAKKysJCXB1 YmxpYyBUeXBlU3BlYyBHZXRBc3luY01ldGhvZEJ1aWxkZXIgKCkKKysJCXsKKysJCQlpZiAoT3B0 QXR0cmlidXRlcyA9PSBudWxsKQorKwkJCQlyZXR1cm4gbnVsbDsKKysKKysJCQlBdHRyaWJ1dGUg YSA9IE9wdEF0dHJpYnV0ZXMuU2VhcmNoIChNb2R1bGUuUHJlZGVmaW5lZEF0dHJpYnV0ZXMuQXN5 bmNNZXRob2RCdWlsZGVyKTsKKysJCQlpZiAoYSA9PSBudWxsKQorKwkJCQlyZXR1cm4gbnVsbDsK KysKKysJCQlyZXR1cm4gYS5HZXRBc3luY01ldGhvZEJ1aWxkZXJWYWx1ZSAoKTsKKysJCX0KKysK KyAJCXB1YmxpYyBUeXBlU3BlYyBHZXRBdHRyaWJ1dGVDb0NsYXNzICgpCisgCQl7CisgCQkJaWYg KE9wdEF0dHJpYnV0ZXMgPT0gbnVsbCkKK0BAIC0yMTcxLDcgKzIyMDEsNyBAQCBuYW1lc3BhY2Ug TW9uby5DU2hhcnAKKyAKKyAJCXB1YmxpYyBvdmVycmlkZSB2b2lkIEVtaXQgKCkKKyAJCXsKKy0J CQlpZiAoSW50ZXJmYWNlcyAhPSBudWxsKSB7CisrCQkJaWYgKEludGVyZmFjZXMgIT0gbnVsbCAm JiAoTW9kRmxhZ3MgJiBNb2RpZmllcnMuUFJJVkFURSkgPT0gMCkgeworIAkJCQlmb3JlYWNoICh2 YXIgaWZhY2UgaW4gSW50ZXJmYWNlcykgeworIAkJCQkJaWYgKGlmYWNlLkhhc05hbWVkVHVwbGVF bGVtZW50KSB7CisgCQkJCQkJdGhyb3cgbmV3IE5vdEltcGxlbWVudGVkRXhjZXB0aW9uICgibmFt ZWQgdHVwbGVzIGZvciAuaW50ZXJmYWNlaW1wbCIpOworQEAgLTMwMjMsNyArMzA1Myw4IEBAIG5h bWVzcGFjZSBNb25vLkNTaGFycAorIAkJCU1vZGlmaWVycy5JTlRFUk5BTCAgfAorIAkJCU1vZGlm aWVycy5VTlNBRkUgICAgfAorIAkJCU1vZGlmaWVycy5QUklWQVRFICAgfAorLQkJCU1vZGlmaWVy cy5SRUFET05MWTsKKysJCQlNb2RpZmllcnMuUkVBRE9OTFkgIHwKKysJCQlNb2RpZmllcnMuUkVG OworIAorIAkJcHVibGljIFN0cnVjdCAoVHlwZUNvbnRhaW5lciBwYXJlbnQsIE1lbWJlck5hbWUg bmFtZSwgTW9kaWZpZXJzIG1vZCwgQXR0cmlidXRlcyBhdHRycykKKyAJCQk6IGJhc2UgKHBhcmVu dCwgbmFtZSwgYXR0cnMsIE1lbWJlcktpbmQuU3RydWN0KQorQEAgLTMxMzksNiArMzE3MCw5IEBA IG5hbWVzcGFjZSBNb25vLkNTaGFycAorIAkJCWlmICgoTW9kRmxhZ3MgJiBNb2RpZmllcnMuUkVB RE9OTFkpICE9IDApCisgCQkJCU1vZHVsZS5QcmVkZWZpbmVkQXR0cmlidXRlcy5Jc1JlYWRPbmx5 LkVtaXRBdHRyaWJ1dGUgKFR5cGVCdWlsZGVyKTsKKyAKKysJCQlpZiAoKE1vZEZsYWdzICYgTW9k aWZpZXJzLlJFRikgIT0gMCkKKysJCQkJTW9kdWxlLlByZWRlZmluZWRBdHRyaWJ1dGVzLklzQnlS ZWZMaWtlLkVtaXRBdHRyaWJ1dGUgKFR5cGVCdWlsZGVyKTsKKysKKyAJCQlDaGVja1N0cnVjdEN5 Y2xlcyAoKTsKKyAKKyAJCQliYXNlLkVtaXQgKCk7CitAQCAtMzIxMyw2ICszMjQ3LDEwIEBAIG5h bWVzcGFjZSBNb25vLkNTaGFycAorIAkJcHJvdGVjdGVkIG92ZXJyaWRlIFR5cGVTcGVjW10gUmVz b2x2ZUJhc2VUeXBlcyAob3V0IEZ1bGxOYW1lZEV4cHJlc3Npb24gYmFzZV9jbGFzcykKKyAJCXsK KyAJCQl2YXIgaWZhY2VzID0gYmFzZS5SZXNvbHZlQmFzZVR5cGVzIChvdXQgYmFzZV9jbGFzcyk7 CisrCQkJaWYgKGlmYWNlcyAhPSBudWxsICYmIChNb2RGbGFncyAmIE1vZGlmaWVycy5SRUYpICE9 IDApIHsKKysJCQkJUmVwb3J0LkVycm9yICg4MzQzLCBMb2NhdGlvbiwgImB7MH0nOiByZWYgc3Ry dWN0cyBjYW5ub3QgaW1wbGVtZW50IGludGVyZmFjZXMiLCBHZXRTaWduYXR1cmVGb3JFcnJvciAo KSk7CisrCQkJfQorKworIAkJCWJhc2VfdHlwZSA9IENvbXBpbGVyLkJ1aWx0aW5UeXBlcy5WYWx1 ZVR5cGU7CisgCQkJcmV0dXJuIGlmYWNlczsKKyAJCX0KK0BAIC0zOTE1LDcgKzM5NTMsNyBAQCBu YW1lc3BhY2UgTW9uby5DU2hhcnAKKyAKKyAJCXByb3RlY3RlZCB2b2lkIElzVHlwZVBlcm1pdHRl ZCAoKQorIAkJeworLQkJCWlmIChNZW1iZXJUeXBlLklzU3BlY2lhbFJ1bnRpbWVUeXBlKSB7Cisr CQkJaWYgKE1lbWJlclR5cGUuSXNTcGVjaWFsUnVudGltZVR5cGUgfHwgTWVtYmVyVHlwZS5Jc0J5 UmVmTGlrZSkgeworIAkJCQlpZiAoUGFyZW50IGlzIFN0YXRlTWFjaGluZSkgeworIAkJCQkJUmVw b3J0LkVycm9yICg0MDEyLCBMb2NhdGlvbiwKKyAJCQkJCQkiUGFyYW1ldGVycyBvciBsb2NhbCB2 YXJpYWJsZXMgb2YgdHlwZSBgezB9JyBjYW5ub3QgYmUgZGVjbGFyZWQgaW4gYXN5bmMgbWV0aG9k cyBvciBpdGVyYXRvcnMiLAorQEAgLTM5MjQsNiArMzk2MiwxOSBAQCBuYW1lc3BhY2UgTW9uby5D U2hhcnAKKyAJCQkJCVJlcG9ydC5FcnJvciAoNDAxMywgTG9jYXRpb24sCisgCQkJCQkJIkxvY2Fs IHZhcmlhYmxlcyBvZiB0eXBlIGB7MH0nIGNhbm5vdCBiZSB1c2VkIGluc2lkZSBhbm9ueW1vdXMg bWV0aG9kcywgbGFtYmRhIGV4cHJlc3Npb25zIG9yIHF1ZXJ5IGV4cHJlc3Npb25zIiwKKyAJCQkJ CQlNZW1iZXJUeXBlLkdldFNpZ25hdHVyZUZvckVycm9yICgpKTsKKysJCQkJfSBlbHNlIGlmIChN ZW1iZXJUeXBlLklzQnlSZWZMaWtlKSB7CisrCQkJCQlpZiAoKE1vZEZsYWdzICYgKE1vZGlmaWVy cy5BQlNUUkFDVCB8IE1vZGlmaWVycy5FWFRFUk4pKSAhPSAwKQorKwkJCQkJCXJldHVybjsKKysK KysJCQkJCWlmICgoTW9kRmxhZ3MgJiBNb2RpZmllcnMuQXV0b1Byb3BlcnR5KSA9PSAwICYmIHRo aXMgaXMgUHJvcGVydHkpCisrCQkJCQkJcmV0dXJuOworKworKwkJCQkJaWYgKChNb2RGbGFncyAm IE1vZGlmaWVycy5TVEFUSUMpID09IDAgJiYgKFBhcmVudC5Nb2RGbGFncyAmIE1vZGlmaWVycy5S RUYpICE9IDApCisrCQkJCQkJcmV0dXJuOworKworKwkJCQkJUmVwb3J0LkVycm9yICg4MzQ1LCBM b2NhdGlvbiwKKysJCQkJCQkiRmllbGQgb3IgYXV0by1pbXBsZW1lbnRlZCBwcm9wZXJ0eSBjYW5u b3QgYmUgb2YgdHlwZSBgezB9JyB1bmxlc3MgaXQgaXMgYW4gaW5zdGFuY2UgbWVtYmVyIG9mIGEg cmVmIHN0cnVjdCIsCisrCQkJCQkJTWVtYmVyVHlwZS5HZXRTaWduYXR1cmVGb3JFcnJvciAoKSk7 CisgCQkJCX0gZWxzZSB7CisgCQkJCQlSZXBvcnQuRXJyb3IgKDYxMCwgTG9jYXRpb24sIAorIAkJ CQkJCSJGaWVsZCBvciBwcm9wZXJ0eSBjYW5ub3QgYmUgb2YgdHlwZSBgezB9JyIsIE1lbWJlclR5 cGUuR2V0U2lnbmF0dXJlRm9yRXJyb3IgKCkpOworZGlmZiAtLWdpdCBhL21jcy9tY3MvY29uc3Qu Y3MgYi9tY3MvbWNzL2NvbnN0LmNzCitpbmRleCAwNDZhZWMyNGMxYi4uNjU4ZjE1ZWM1N2EgMTAw NjQ0CistLS0gYS9tY3MvbWNzL2NvbnN0LmNzCisrKysgYi9tY3MvbWNzL2NvbnN0LmNzCitAQCAt MjA2LDcgKzIwNiw5IEBAIG5hbWVzcGFjZSBNb25vLkNTaGFycCB7CisgCQkJCQljID0gZmllbGQu Q29udmVydEluaXRpYWxpemVyIChyYywgYyk7CisgCisgCQkJCWlmIChjID09IG51bGwpIHsKKy0J CQkJCWlmIChUeXBlU3BlYy5Jc1JlZmVyZW5jZVR5cGUgKGZpZWxkLk1lbWJlclR5cGUpKQorKwkJ CQkJaWYgKGV4cHIgaXMgRGVmYXVsdExpdGVyYWxFeHByZXNzaW9uKSB7CisrCQkJCQkJLy8gSXQn cyBoYW5kbGVkIGJlbGxvdyBpbiBOZXcuQ29uc3RhbnRpZnkKKysJCQkJCX0gZWxzZSBpZiAoVHlw ZVNwZWMuSXNSZWZlcmVuY2VUeXBlIChmaWVsZC5NZW1iZXJUeXBlKSkKKyAJCQkJCQlFcnJvcl9D b25zdGFudENhbkJlSW5pdGlhbGl6ZWRXaXRoTnVsbE9ubHkgKHJjLCBmaWVsZC5NZW1iZXJUeXBl LCBleHByLkxvY2F0aW9uLCBHZXRTaWduYXR1cmVGb3JFcnJvciAoKSk7CisgCQkJCQllbHNlIGlm ICghKGV4cHIgaXMgQ29uc3RhbnQpKQorIAkJCQkJCUVycm9yX0V4cHJlc3Npb25NdXN0QmVDb25z dGFudCAocmMsIGV4cHIuTG9jYXRpb24sIEdldFNpZ25hdHVyZUZvckVycm9yICgpKTsKK2RpZmYg LS1naXQgYS9tY3MvbWNzL2NvbnZlcnQuY3MgYi9tY3MvbWNzL2NvbnZlcnQuY3MKK2luZGV4IGIx MTQ3N2MxMDQzLi5hZTE1M2ZjNDllOCAxMDA2NDQKKy0tLSBhL21jcy9tY3MvY29udmVydC5jcwor KysrIGIvbWNzL21jcy9jb252ZXJ0LmNzCitAQCAtMzkyLDYgKzM5Miw5IEBAIG5hbWVzcGFjZSBN b25vLkNTaGFycCB7CisgCQkJCWlmICghVHlwZVNwZWMuSXNWYWx1ZVR5cGUgKGV4cHJfdHlwZSkp CisgCQkJCQlyZXR1cm4gbnVsbDsKKyAKKysJCQkJaWYgKGV4cHJfdHlwZS5Jc0J5UmVmTGlrZSkK KysJCQkJCXJldHVybiBudWxsOworKworIAkJCQlyZXR1cm4gZXhwciA9PSBudWxsID8gRW1wdHlF eHByZXNzaW9uLk51bGwgOiBuZXcgQm94ZWRDYXN0IChleHByLCB0YXJnZXRfdHlwZSk7CisgCisg CQkJY2FzZSBCdWlsdGluVHlwZVNwZWMuVHlwZS5FbnVtOgorQEAgLTgxNiw3ICs4MTksNyBAQCBu YW1lc3BhY2UgTW9uby5DU2hhcnAgeworIAkJCWlmIChleHByX3R5cGUgPT0gdGFyZ2V0X3R5cGUp CisgCQkJCXJldHVybiB0cnVlOworIAorLQkJCWlmIChleHByX3R5cGUgPT0gSW50ZXJuYWxUeXBl LlRocm93RXhwcikKKysJCQlpZiAoZXhwcl90eXBlID09IEludGVybmFsVHlwZS5UaHJvd0V4cHIg fHwgZXhwcl90eXBlID09IEludGVybmFsVHlwZS5EZWZhdWx0VHlwZSkKKyAJCQkJcmV0dXJuIHRh cmdldF90eXBlLktpbmQgIT0gTWVtYmVyS2luZC5JbnRlcm5hbENvbXBpbGVyVHlwZTsKKyAKKyAJ CQlpZiAodGFyZ2V0X3R5cGUuSXNOdWxsYWJsZVR5cGUpCitAQCAtMTQ3OCw2ICsxNDgxLDEwIEBA IG5hbWVzcGFjZSBNb25vLkNTaGFycCB7CisgCQkJCXJldHVybiB0YXJnZXRfdHlwZS5LaW5kID09 IE1lbWJlcktpbmQuSW50ZXJuYWxDb21waWxlclR5cGUgPyBudWxsIDogRW1wdHlDYXN0LkNyZWF0 ZSAoZXhwciwgdGFyZ2V0X3R5cGUpOworIAkJCX0KKyAKKysJCQlpZiAoZXhwcl90eXBlID09IElu dGVybmFsVHlwZS5EZWZhdWx0VHlwZSkgeworKwkJCQlyZXR1cm4gbmV3IERlZmF1bHRWYWx1ZUV4 cHJlc3Npb24gKG5ldyBUeXBlRXhwcmVzc2lvbiAodGFyZ2V0X3R5cGUsIGV4cHIuTG9jYXRpb24p LCBleHByLkxvY2F0aW9uKS5SZXNvbHZlIChlYyk7CisrCQkJfQorKworIAkJCWlmICh0YXJnZXRf dHlwZS5Jc051bGxhYmxlVHlwZSkKKyAJCQkJcmV0dXJuIEltcGxpY2l0TnVsYWJsZUNvbnZlcnNp b24gKGVjLCBleHByLCB0YXJnZXRfdHlwZSk7CisgCitAQCAtMTk2Nyw3ICsxOTc0LDcgQEAgbmFt ZXNwYWNlIE1vbm8uQ1NoYXJwIHsKKyAJCQkvLyBGcm9tIG9iamVjdCBvciBkeW5hbWljIHRvIGFu eSByZWZlcmVuY2UgdHlwZSBvciB2YWx1ZSB0eXBlICh1bmJveGluZykKKyAJCQkvLworIAkJCWlm IChzb3VyY2VfdHlwZS5CdWlsdGluVHlwZSA9PSBCdWlsdGluVHlwZVNwZWMuVHlwZS5PYmplY3Qg fHwgc291cmNlX3R5cGUuQnVpbHRpblR5cGUgPT0gQnVpbHRpblR5cGVTcGVjLlR5cGUuRHluYW1p YykgeworLQkJCQlpZiAodGFyZ2V0X3R5cGUuSXNQb2ludGVyKQorKwkJCQlpZiAodGFyZ2V0X3R5 cGUuSXNQb2ludGVyIHx8IHRhcmdldF90eXBlLklzQnlSZWZMaWtlKQorIAkJCQkJcmV0dXJuIG51 bGw7CisgCisgCQkJCXJldHVybgorZGlmZiAtLWdpdCBhL21jcy9tY3MvY3MtcGFyc2VyLmpheSBi L21jcy9tY3MvY3MtcGFyc2VyLmpheQoraW5kZXggMjg2OGQyZmQ4ZjYuLjRkNmZjYjQ0YzBkIDEw MDY0NAorLS0tIGEvbWNzL21jcy9jcy1wYXJzZXIuamF5CisrKysgYi9tY3MvbWNzL2NzLXBhcnNl ci5qYXkKK0BAIC0xNjksNyArMTY5LDggQEAgbmFtZXNwYWNlIE1vbm8uQ1NoYXJwCisgJXRva2Vu IENPTlNUCQorICV0b2tlbiBDT05USU5VRQkKKyAldG9rZW4gREVDSU1BTAkKKy0ldG9rZW4gREVG QVVMVAkKKysldG9rZW4gREVGQVVMVAorKyV0b2tlbiBERUZBVUxUX1ZBTFVFCisgJXRva2VuIERF TEVHQVRFCQorICV0b2tlbiBETwkKKyAldG9rZW4gRE9VQkxFCQorQEAgLTMzNiw2ICszMzcsNyBA QCBuYW1lc3BhY2UgTW9uby5DU2hhcnAKKyAldG9rZW4gREVGQVVMVF9DT0xPTgorICV0b2tlbiBP UEVOX0JSQUNLRVRfRVhQUgorICV0b2tlbiBPUEVOX1BBUkVOU19ERUNPTlNUUlVDVAorKyV0b2tl biBSRUZfU1RSVUNUCisgCisgLy8gTWFrZSB0aGUgcGFyc2VyIGdvIGludG8gZXZhbCBtb2RlIHBh cnNpbmcgKHN0YXRlbWVudHMgYW5kIGNvbXBpbGF0aW9uIHVuaXRzKS4KKyAldG9rZW4gRVZBTF9T VEFURU1FTlRfUEFSU0VSCitAQCAtODYzLDcgKzg2NSw3IEBAIGF0dHJpYnV0ZV9hcmd1bWVudHMK KyAJCX0KKyAJCQorIAkJQXJndW1lbnRzIGFyZ3MgPSAoKEFyZ3VtZW50cykgbyBbMF0pOworLQkJ aWYgKGFyZ3MuQ291bnQgPiAwICYmICEoJDMgaXMgTmFtZWRBcmd1bWVudCkgJiYgYXJncyBbYXJn cy5Db3VudCAtIDFdIGlzIE5hbWVkQXJndW1lbnQpCisrCQlpZiAobGFuZ192ZXJzaW9uIDwgTGFu Z3VhZ2VWZXJzaW9uLlZfN18yICYmIGFyZ3MuQ291bnQgPiAwICYmICEoJDMgaXMgTmFtZWRBcmd1 bWVudCkgJiYgYXJncyBbYXJncy5Db3VudCAtIDFdIGlzIE5hbWVkQXJndW1lbnQpCisgCQkJRXJy b3JfTmFtZWRBcmd1bWVudEV4cGVjdGVkICgoTmFtZWRBcmd1bWVudCkgYXJncyBbYXJncy5Db3Vu dCAtIDFdKTsKKyAJCQorIAkJYXJncy5BZGQgKChBcmd1bWVudCkgJDMpOworQEAgLTEwMTUsMTcg KzEwMTcsMzQgQEAgcHJpbWFyeV9jb25zdHJ1Y3Rvcl9ib2R5CisgCSAgfQorIAk7CisgCisrc3Ry dWN0X2tleXdvcmQKKysJOiBTVFJVQ1QKKysJICB7CisrCQkkJCA9IG51bGw7CisrCSAgfQorKwl8 IFJFRl9TVFJVQ1QKKysJICB7CisrCQlpZiAobGFuZ192ZXJzaW9uIDwgTGFuZ3VhZ2VWZXJzaW9u LlZfN18yKSB7CisrCQkJRmVhdHVyZUlzTm90QXZhaWxhYmxlIChHZXRMb2NhdGlvbiAoJDEpLCAi cmVmIHN0cnVjdHMiKTsKKysJCX0KKysKKysJCSQkID0gdGhpczsKKysJICB9CisrCTsKKysKKyBz dHJ1Y3RfZGVjbGFyYXRpb24KKyAJOiBvcHRfYXR0cmlidXRlcworIAkgIG9wdF9tb2RpZmllcnMK KyAJICBvcHRfcGFydGlhbAorLQkgIFNUUlVDVAorKwkgIHN0cnVjdF9rZXl3b3JkCisgCSAgdHlw ZV9kZWNsYXJhdGlvbl9uYW1lCisgCSAgeworIAkJdmFyIG1vZHMgPSAoTW9kaWZpZXJzKSAkMjsK KyAJCWlmICgobW9kcyAmIE1vZGlmaWVycy5SRUFET05MWSkgIT0gMCAmJiBsYW5nX3ZlcnNpb24g PCBMYW5ndWFnZVZlcnNpb24uVl83XzIpIHsKKyAJCQlGZWF0dXJlSXNOb3RBdmFpbGFibGUgKEdl dExvY2F0aW9uICgkNCksICJyZWFkb25seSBzdHJ1Y3RzIik7CisgCQl9CisrCQlpZiAoJDQgIT0g bnVsbCkKKysJCQltb2RzIHw9IE1vZGlmaWVycy5SRUY7CisgCisgCQlsZXhlci5Db25zdHJhaW50 c1BhcnNpbmcgPSB0cnVlOworIAkJdmFsaWRfcGFyYW1fbW9kID0gUGFyYW1ldGVyTW9kaWZpZXJU eXBlLlByaW1hcnlDb25zdHJ1Y3RvcjsKK0BAIC0xMDcxLDcgKzEwOTAsNyBAQCBzdHJ1Y3RfZGVj bGFyYXRpb24KKyAJCX0KKyAJCSQkID0gcG9wX2N1cnJlbnRfY2xhc3MgKCk7CisgCSAgfQorLQl8 IG9wdF9hdHRyaWJ1dGVzIG9wdF9tb2RpZmllcnMgb3B0X3BhcnRpYWwgU1RSVUNUIGVycm9yCisr CXwgb3B0X2F0dHJpYnV0ZXMgb3B0X21vZGlmaWVycyBvcHRfcGFydGlhbCBzdHJ1Y3Rfa2V5d29y ZCBlcnJvcgorIAkgIHsKKyAJCUVycm9yX1N5bnRheEVycm9yICh5eVRva2VuKTsKKyAJICB9CitA QCAtMTM4NCw2ICsxNDAzLDE4IEBAIHJlZl9tZW1iZXJfdHlwZQorIAorIAkJJCQgPSBuZXcgUmVm ZXJlbmNlVHlwZUV4cHIgKChGdWxsTmFtZWRFeHByZXNzaW9uKSAkMywgR2V0TG9jYXRpb24gKCQx KSk7CisgCSAgfQorKwl8IFJFRiBSRUFET05MWQorKwkgIHsKKysJCWxleGVyLnBhcnNpbmdfZ2Vu ZXJpY19kZWNsYXJhdGlvbiA9IHRydWU7CisrCSAgfQorKwkgIHR5cGUKKysJICB7CisrCQlpZiAo bGFuZ192ZXJzaW9uIDwgTGFuZ3VhZ2VWZXJzaW9uLlZfN18yKSB7CisrCQkJRmVhdHVyZUlzTm90 QXZhaWxhYmxlIChHZXRMb2NhdGlvbiAoJDIpLCAicmVhZG9ubHkgcmVmZXJlbmNlcyIpOworKwkJ fQorKworKwkJJCQgPSBuZXcgUmVmZXJlbmNlVHlwZUV4cHIgKChGdWxsTmFtZWRFeHByZXNzaW9u KSAkNCwgdHJ1ZSwgR2V0TG9jYXRpb24gKCQxKSk7CisrCSAgfQorIAk7CisgCisgbWV0aG9kX2hl YWRlcgorQEAgLTM0NDgsNiArMzQ3OSw3IEBAIHByaW1hcnlfZXhwcmVzc2lvbgorIAl8IGFub255 bW91c19tZXRob2RfZXhwcmVzc2lvbgorIAl8IHVuZG9jdW1lbnRlZF9leHByZXNzaW9ucworIAl8 IGludGVycG9sYXRlZF9zdHJpbmcKKysJfCBkZWZhdWx0X2xpdGVyYWwKKyAJOworIAorIHR5cGVf bmFtZV9leHByZXNzaW9uCitAQCAtMzgyNCw3ICszODU2LDcgQEAgYXJndW1lbnRfbGlzdAorIAl8 IGFyZ3VtZW50X2xpc3QgQ09NTUEgYXJndW1lbnQKKyAJICB7CisgCQlBcmd1bWVudHMgbGlzdCA9 IChBcmd1bWVudHMpICQxOworLQkJaWYgKGxpc3QgW2xpc3QuQ291bnQgLSAxXSBpcyBOYW1lZEFy Z3VtZW50KQorKwkJaWYgKGxhbmdfdmVyc2lvbiA8IExhbmd1YWdlVmVyc2lvbi5WXzdfMiAmJiBs aXN0IFtsaXN0LkNvdW50IC0gMV0gaXMgTmFtZWRBcmd1bWVudCkKKyAJCQlFcnJvcl9OYW1lZEFy Z3VtZW50RXhwZWN0ZWQgKChOYW1lZEFyZ3VtZW50KSBsaXN0IFtsaXN0LkNvdW50IC0gMV0pOwor IAkJCisgCQlsaXN0LkFkZCAoKEFyZ3VtZW50KSAkMyk7CitAQCAtMzk2OSw3ICs0MDAxLDcgQEAg ZXhwcmVzc2lvbl9saXN0X2FyZ3VtZW50cworIAl8IGV4cHJlc3Npb25fbGlzdF9hcmd1bWVudHMg Q09NTUEgZXhwcmVzc2lvbl9saXN0X2FyZ3VtZW50CisgCSAgeworIAkJQXJndW1lbnRzIGFyZ3Mg PSAoQXJndW1lbnRzKSAkMTsKKy0JCWlmIChhcmdzIFthcmdzLkNvdW50IC0gMV0gaXMgTmFtZWRB cmd1bWVudCAmJiAhKCQzIGlzIE5hbWVkQXJndW1lbnQpKQorKwkJaWYgKGxhbmdfdmVyc2lvbiA8 IExhbmd1YWdlVmVyc2lvbi5WXzdfMiAmJiBhcmdzIFthcmdzLkNvdW50IC0gMV0gaXMgTmFtZWRB cmd1bWVudCAmJiAhKCQzIGlzIE5hbWVkQXJndW1lbnQpKQorIAkJCUVycm9yX05hbWVkQXJndW1l bnRFeHBlY3RlZCAoKE5hbWVkQXJndW1lbnQpIGFyZ3MgW2FyZ3MuQ291bnQgLSAxXSk7CisgCSAg CisgCQlhcmdzLkFkZCAoKEFyZ3VtZW50KSAkMyk7CitAQCAtNDM4Niw3ICs0NDE4LDcgQEAgYW5v bnltb3VzX21ldGhvZF9zaWduYXR1cmUKKyAJOworIAorIGRlZmF1bHRfdmFsdWVfZXhwcmVzc2lv bgorLQk6IERFRkFVTFQgb3Blbl9wYXJlbnNfYW55IHR5cGUgQ0xPU0VfUEFSRU5TCisrCTogREVG QVVMVF9WQUxVRSBvcGVuX3BhcmVuc19hbnkgdHlwZSBDTE9TRV9QQVJFTlMKKyAJICB7CisgCQlp ZiAobGFuZ192ZXJzaW9uIDwgTGFuZ3VhZ2VWZXJzaW9uLklTT18yKQorIAkJCUZlYXR1cmVJc05v dEF2YWlsYWJsZSAoR2V0TG9jYXRpb24gKCQxKSwgImRlZmF1bHQgdmFsdWUgZXhwcmVzc2lvbiIp OworQEAgLTQzOTYsNiArNDQyOCwxNiBAQCBkZWZhdWx0X3ZhbHVlX2V4cHJlc3Npb24KKyAJICB9 CisgCTsKKyAKKytkZWZhdWx0X2xpdGVyYWwKKysJOiBERUZBVUxUCisrCSAgeworKwkJaWYgKGxh bmdfdmVyc2lvbiA8IExhbmd1YWdlVmVyc2lvbi5WXzdfMSkKKysJCQlGZWF0dXJlSXNOb3RBdmFp bGFibGUgKEdldExvY2F0aW9uICgkMSksICJkZWZhdWx0IGxpdGVyYWwiKTsKKysKKysJCSQkID0g bmV3IERlZmF1bHRMaXRlcmFsRXhwcmVzc2lvbiAoR2V0TG9jYXRpb24gKCQxKSk7CisrCSAgfQor Kwk7CisrCisgdW5hcnlfZXhwcmVzc2lvbgorIAk6IHByaW1hcnlfZXhwcmVzc2lvbgorIAl8IEJB TkcgcHJlZml4ZWRfdW5hcnlfZXhwcmVzc2lvbgorQEAgLTQ3NTAsNyArNDc5Miw3IEBAIHBhdHRl cm5fbGlzdAorIAl8IHBhdHRlcm5fbGlzdCBDT01NQSBwYXR0ZXJuX2FyZ3VtZW50CisgCSAgewor IAkJQXJndW1lbnRzIGFyZ3MgPSAoQXJndW1lbnRzKSAkMTsKKy0JCWlmIChhcmdzIFthcmdzLkNv dW50IC0gMV0gaXMgTmFtZWRBcmd1bWVudCAmJiAhKCQzIGlzIE5hbWVkQXJndW1lbnQpKQorKwkJ aWYgKGxhbmdfdmVyc2lvbiA8IExhbmd1YWdlVmVyc2lvbi5WXzdfMiAmJiBhcmdzIFthcmdzLkNv dW50IC0gMV0gaXMgTmFtZWRBcmd1bWVudCAmJiAhKCQzIGlzIE5hbWVkQXJndW1lbnQpKQorIAkJ CUVycm9yX05hbWVkQXJndW1lbnRFeHBlY3RlZCAoKE5hbWVkQXJndW1lbnQpIGFyZ3MgW2FyZ3Mu Q291bnQgLSAxXSk7CisgCisgCQlhcmdzLkFkZCAoKEFyZ3VtZW50KSAkMyk7CitAQCAtNTA2Nywx NyArNTEwOSwyNSBAQCBhc3NpZ25tZW50X2V4cHJlc3Npb24KKyAJCSQkID0gbmV3IENvbXBvdW5k QXNzaWduIChCaW5hcnkuT3BlcmF0b3IuRXhjbHVzaXZlT3IsIChFeHByZXNzaW9uKSAkMSwgKEV4 cHJlc3Npb24pICQzKTsKKyAJCWxiYWcuQWRkTG9jYXRpb24gKCQkLCBHZXRMb2NhdGlvbiAoJDIp KTsKKyAJICB9CistCXwgT1BFTl9QQVJFTlNfREVDT05TVFJVQ1QgZGVjb25zdHJ1Y3RfZXhwcnMg Q0xPU0VfUEFSRU5TIEFTU0lHTiBleHByZXNzaW9uCisrCXwgT1BFTl9QQVJFTlNfREVDT05TVFJV Q1QgZGVjb25zdHJ1Y3RfYXNzaWdubWVudCBDTE9TRV9QQVJFTlMgQVNTSUdOIGV4cHJlc3Npb24K KyAJICB7CisgCQlpZiAobGFuZ192ZXJzaW9uIDwgTGFuZ3VhZ2VWZXJzaW9uLlZfNykKKyAJCQlG ZWF0dXJlSXNOb3RBdmFpbGFibGUgKEdldExvY2F0aW9uICgkMSksICJ0dXBsZXMiKTsKKyAKKy0J ICAJdmFyIGV4cHJzID0gKExpc3Q8RXhwcmVzc2lvbj4pICQyOworKwkJdmFyIGV4cHJzID0gKExp c3Q8RXhwcmVzc2lvbj4pICQyOworKwkJJCQgPSBuZXcgVHVwbGVEZWNvbnN0cnVjdCAoZXhwcnMs IChFeHByZXNzaW9uKSAkNSwgR2V0TG9jYXRpb24gKCQ0KSk7CisrCSAgfQorKwl8IE9QRU5fUEFS RU5TX0RFQ09OU1RSVUNUIGRlY29uc3RydWN0X2RlY2xhcmF0aW9uIENMT1NFX1BBUkVOUyBBU1NJ R04gZXhwcmVzc2lvbgorKwkgIHsKKysJCWlmIChsYW5nX3ZlcnNpb24gPCBMYW5ndWFnZVZlcnNp b24uVl83KQorKwkJCUZlYXR1cmVJc05vdEF2YWlsYWJsZSAoR2V0TG9jYXRpb24gKCQxKSwgInR1 cGxlcyIpOworKworKwkJdmFyIGV4cHJzID0gKExpc3Q8QmxvY2tWYXJpYWJsZT4pICQyOworIAkJ JCQgPSBuZXcgVHVwbGVEZWNvbnN0cnVjdCAoZXhwcnMsIChFeHByZXNzaW9uKSAkNSwgR2V0TG9j YXRpb24gKCQ0KSk7CisgCSAgfQorIAk7CisgCistZGVjb25zdHJ1Y3RfZXhwcnMKKytkZWNvbnN0 cnVjdF9hc3NpZ25tZW50CisgCTogZXhwcmVzc2lvbiBDT01NQSBleHByZXNzaW9uCisgCSAgewor IAkJJCQgPSBuZXcgTGlzdDxFeHByZXNzaW9uPiAoKSB7CitAQCAtNTA4NSw3ICs1MTM1LDcgQEAg ZGVjb25zdHJ1Y3RfZXhwcnMKKyAJCQkoRXhwcmVzc2lvbikgJDMKKyAJICAJfTsKKyAJICB9Cist CXwgZGVjb25zdHJ1Y3RfZXhwcnMgQ09NTUEgZXhwcmVzc2lvbgorKwl8IGRlY29uc3RydWN0X2Fz c2lnbm1lbnQgQ09NTUEgZXhwcmVzc2lvbgorIAkgIHsKKyAJCXZhciBzcmMgPSAoTGlzdDxFeHBy ZXNzaW9uPikgJDE7CisgCQlzcmMuQWRkICgoRXhwcmVzc2lvbikgJDMpOworQEAgLTUwOTMsNiAr NTE0Myw0MyBAQCBkZWNvbnN0cnVjdF9leHBycworIAkgIH0KKyAJOworIAorK2RlY29uc3RydWN0 X2RlY2xhcmF0aW9uCisrCTogdmFyaWFibGVfdHlwZSBpZGVudGlmaWVyX2luc2lkZV9ib2R5Cisr CSAgeworKwkJdmFyIGx0ID0gKExvY2F0ZWRUb2tlbikgJDI7CisrCQl2YXIgbGkgPSBuZXcgTG9j YWxWYXJpYWJsZSAoY3VycmVudF9ibG9jaywgbHQuVmFsdWUsIGx0LkxvY2F0aW9uKTsKKysJCWN1 cnJlbnRfYmxvY2suQWRkTG9jYWxOYW1lIChsaSk7CisrCQkkJCA9IG5ldyBMaXN0PEJsb2NrVmFy aWFibGU+ICgyKSB7CisrCQkJbmV3IEJsb2NrVmFyaWFibGUgKChGdWxsTmFtZWRFeHByZXNzaW9u KSAkMSwgbGkpCisrCQl9OworKwkgIH0KKysJfCBkZWNvbnN0cnVjdF9kZWNsYXJhdGlvbiBDT01N QSB2YXJpYWJsZV90eXBlIGlkZW50aWZpZXJfaW5zaWRlX2JvZHkKKysJICB7CisrCQl2YXIgbHQg PSAoTG9jYXRlZFRva2VuKSAkNDsKKysJCXZhciBsaSA9IG5ldyBMb2NhbFZhcmlhYmxlIChjdXJy ZW50X2Jsb2NrLCBsdC5WYWx1ZSwgbHQuTG9jYXRpb24pOworKwkJY3VycmVudF9ibG9jay5BZGRM b2NhbE5hbWUgKGxpKTsKKysKKysJCXZhciBzcmMgPSAoTGlzdDxCbG9ja1ZhcmlhYmxlPikgJDE7 CisrCQlzcmMuQWRkIChuZXcgQmxvY2tWYXJpYWJsZSAoKEZ1bGxOYW1lZEV4cHJlc3Npb24pICQz LCBsaSkpOworKwkJJCQgPSBzcmM7CisrCSAgfQorKwl8IGRlY29uc3RydWN0X2RlY2xhcmF0aW9u IENPTU1BIGlkZW50aWZpZXJfaW5zaWRlX2JvZHkKKysJICB7CisrCQl2YXIgbHQgPSAoTG9jYXRl ZFRva2VuKSAkMzsKKysJCXZhciBsaSA9IG5ldyBMb2NhbFZhcmlhYmxlIChjdXJyZW50X2Jsb2Nr LCBsdC5WYWx1ZSwgbHQuTG9jYXRpb24pOworKworKwkJaWYgKGx0LlZhbHVlICE9ICJfIikgewor KwkJCXJlcG9ydC5FcnJvciAoODE4NCwgbHQuTG9jYXRpb24sICJBIGRlY29uc3RydWN0aW9uIGNh bm5vdCBtaXggZGVjbGFyYXRpb25zIGFuZCBleHByZXNzaW9ucyBvbiB0aGUgbGVmdC1oYW5kLXNp ZGUiKTsKKysJCX0gZWxzZSB7CisrCQkJbGkuVHlwZSA9IEludGVybmFsVHlwZS5EaXNjYXJkOwor KwkJfQorKworKwkJdmFyIHNyYyA9IChMaXN0PEJsb2NrVmFyaWFibGU+KSAkMTsKKysJCXNyYy5B ZGQgKG5ldyBCbG9ja1ZhcmlhYmxlIChuZXcgVHlwZUV4cHJlc3Npb24gKGxpLlR5cGUsIGx0Lkxv Y2F0aW9uKSwgbGkpKTsKKysJCSQkID0gc3JjOworKwkgIH0KKysJOworKworIGxhbWJkYV9wYXJh bWV0ZXJfbGlzdAorIAk6IGxhbWJkYV9wYXJhbWV0ZXIKKyAJICB7CitAQCAtNjAwOCw2ICs2MDk1 LDI4IEBAIGJsb2NrX3ZhcmlhYmxlX2RlY2xhcmF0aW9uCisgCQkJbGJhZy5BZGRMb2NhdGlvbiAo JCQsIEdldExvY2F0aW9uICgkNykpOworIAkJfQorIAkgIH0KKysJfCBSRUYgUkVBRE9OTFkgdmFy aWFibGVfdHlwZSBpZGVudGlmaWVyX2luc2lkZV9ib2R5CisrCSAgeworKwkJaWYgKGxhbmdfdmVy c2lvbiA8IExhbmd1YWdlVmVyc2lvbi5WXzdfMikgeworKwkJCUZlYXR1cmVJc05vdEF2YWlsYWJs ZSAoR2V0TG9jYXRpb24gKCQyKSwgInJlYWRvbmx5IHJlZmVyZW5jZXMiKTsKKysJCX0KKysKKysJ CXZhciBsdCA9IChMb2NhdGVkVG9rZW4pICQ0OworKwkJdmFyIGxpID0gbmV3IExvY2FsVmFyaWFi bGUgKGN1cnJlbnRfYmxvY2ssIGx0LlZhbHVlLCBMb2NhbFZhcmlhYmxlLkZsYWdzLkJ5UmVmIHwg TG9jYWxWYXJpYWJsZS5GbGFncy5SZWFkb25seU1hc2ssIGx0LkxvY2F0aW9uKTsKKysJCWN1cnJl bnRfYmxvY2suQWRkTG9jYWxOYW1lIChsaSk7CisrCQljdXJyZW50X3ZhcmlhYmxlID0gbmV3IEJs b2NrVmFyaWFibGUgKChGdWxsTmFtZWRFeHByZXNzaW9uKSAkMywgbGkpOworKwkgIH0KKysJICBv cHRfbG9jYWxfdmFyaWFibGVfaW5pdGlhbGl6ZXIgb3B0X3ZhcmlhYmxlX2RlY2xhcmF0b3JzIFNF TUlDT0xPTgorKwkgIHsKKysJCSQkID0gY3VycmVudF92YXJpYWJsZTsKKysJCWN1cnJlbnRfdmFy aWFibGUgPSBudWxsOworKwkJaWYgKCQ2ICE9IG51bGwpIHsKKysJCQlsYmFnLkFkZExvY2F0aW9u ICgkJCwgUG9wTG9jYXRpb24gKCksIEdldExvY2F0aW9uICgkOCkpOworKwkJfSBlbHNlIHsKKysJ CQlyZXBvcnQuRXJyb3IgKDgxNzQsIEdldExvY2F0aW9uICgkMyksICJBIGRlY2xhcmF0aW9uIG9m IGEgYnktcmVmZXJlbmNlIHZhcmlhYmxlIG11c3QgaGF2ZSBhbiBpbml0aWFsaXplciIpOworKwkJ CWxiYWcuQWRkTG9jYXRpb24gKCQkLCBHZXRMb2NhdGlvbiAoJDgpKTsKKysJCX0KKysJICB9Cisg CTsKKyAKKyBvcHRfbG9jYWxfdmFyaWFibGVfaW5pdGlhbGl6ZXIKK0BAIC03NzMxLDcgKzc4NDAs NyBAQCB2b2lkIFdhcm5pbmdfRW1wdHlTdGF0ZW1lbnQgKExvY2F0aW9uIGxvYykKKyAKKyB2b2lk IEVycm9yX05hbWVkQXJndW1lbnRFeHBlY3RlZCAoTmFtZWRBcmd1bWVudCBhKQorIHsKKy0JcmVw b3J0LkVycm9yICgxNzM4LCBhLkxvY2F0aW9uLCAiTmFtZWQgYXJndW1lbnRzIG11c3QgYXBwZWFy IGFmdGVyIHRoZSBwb3NpdGlvbmFsIGFyZ3VtZW50cyIpOworKwlyZXBvcnQuRXJyb3IgKDE3Mzgs IGEuTG9jYXRpb24sICJOYW1lZCBhcmd1bWVudHMgbXVzdCBhcHBlYXIgYWZ0ZXIgdGhlIHBvc2l0 aW9uYWwgYXJndW1lbnRzIHdoZW4gdXNpbmcgbGFuZ3VhZ2UgdmVyc2lvbiBvbGRlciB0aGFuIDcu MiIpOworIH0KKyAKKyB2b2lkIEVycm9yX01pc3NpbmdJbml0aWFsaXplciAoTG9jYXRpb24gbG9j KQorQEAgLTgyNTUsNiArODM2NCw3IEBAIHN0YXRpYyBzdHJpbmcgR2V0VG9rZW5OYW1lIChpbnQg dG9rZW4pCisgCWNhc2UgVG9rZW4uQ09OVElOVUU6CisgCQlyZXR1cm4gImNvbnRpbnVlIjsKKyAJ Y2FzZSBUb2tlbi5ERUZBVUxUOgorKwljYXNlIFRva2VuLkRFRkFVTFRfVkFMVUU6CisgCQlyZXR1 cm4gImRlZmF1bHQiOworIAljYXNlIFRva2VuLkRFTEVHQVRFOgorIAkJcmV0dXJuICJkZWxlZ2F0 ZSI7CitAQCAtODMzNCw2ICs4NDQ0LDcgQEAgc3RhdGljIHN0cmluZyBHZXRUb2tlbk5hbWUgKGlu dCB0b2tlbikKKyAJY2FzZSBUb2tlbi5TVEFUSUM6CisgCQlyZXR1cm4gInN0YXRpYyI7CisgCWNh c2UgVG9rZW4uU1RSVUNUOgorKwljYXNlIFRva2VuLlJFRl9TVFJVQ1Q6CisgCQlyZXR1cm4gInN0 cnVjdCI7CisgCWNhc2UgVG9rZW4uU1dJVENIOgorIAkJcmV0dXJuICJzd2l0Y2giOworZGlmZiAt LWdpdCBhL21jcy9tY3MvY3MtdG9rZW5pemVyLmNzIGIvbWNzL21jcy9jcy10b2tlbml6ZXIuY3MK K2luZGV4IGQ2ZDAwZDMxNDAwLi4zN2VkYjVjMTIyNCAxMDA2NDQKKy0tLSBhL21jcy9tY3MvY3Mt dG9rZW5pemVyLmNzCisrKysgYi9tY3MvbWNzL2NzLXRva2VuaXplci5jcworQEAgLTcxNiw5ICs3 MTYsMTggQEAgbmFtZXNwYWNlIE1vbm8uQ1NoYXJwCisgCQkJCQlyZXMgPSBUb2tlbi5FWFRFUk5f QUxJQVM7CisgCQkJCWJyZWFrOworIAkJCWNhc2UgVG9rZW4uREVGQVVMVDoKKy0JCQkJaWYgKHBl ZWtfdG9rZW4gKCkgPT0gVG9rZW4uQ09MT04pIHsKKy0JCQkJCXRva2VuICgpOworLQkJCQkJcmVz ID0gVG9rZW4uREVGQVVMVF9DT0xPTjsKKysJCQkJc3dpdGNoIChwZWVrX3Rva2VuICgpKSB7Cisr CQkJCWNhc2UgVG9rZW4uQ09MT046CisrCQkJCQkvLyBTcGVjaWFsIGNhc2U6IGZvbyA9PSBudWxs ID8gZGVmYXVsdCA6IDE7CisrCQkJCQlpZiAoY3VycmVudF90b2tlbiAhPSBUb2tlbi5JTlRFUlIp IHsKKysJCQkJCQl0b2tlbiAoKTsKKysJCQkJCQlyZXMgPSBUb2tlbi5ERUZBVUxUX0NPTE9OOwor KwkJCQkJfQorKwkJCQkJYnJlYWs7CisrCQkJCWNhc2UgVG9rZW4uT1BFTl9QQVJFTlM6CisrCQkJ CWNhc2UgVG9rZW4uT1BFTl9QQVJFTlNfQ0FTVDoKKysJCQkJCXJlcyA9IFRva2VuLkRFRkFVTFRf VkFMVUU7CisrCQkJCQlicmVhazsKKyAJCQkJfQorIAkJCQlicmVhazsKKyAJCQljYXNlIFRva2Vu LldIRU46CitAQCAtODEyLDEwICs4MjEsMTIgQEAgbmFtZXNwYWNlIE1vbm8uQ1NoYXJwCisgCQkJ CVB1c2hQb3NpdGlvbiAoKTsKKyAKKyAJCQkJbmV4dF90b2tlbiA9IHRva2VuICgpOworLQkJCQli b29sIG9rID0gKG5leHRfdG9rZW4gPT0gVG9rZW4uQ0xBU1MpIHx8CistCQkJCQkobmV4dF90b2tl biA9PSBUb2tlbi5TVFJVQ1QpIHx8CistCQkJCQkobmV4dF90b2tlbiA9PSBUb2tlbi5JTlRFUkZB Q0UpIHx8CistCQkJCQkobmV4dF90b2tlbiA9PSBUb2tlbi5WT0lEKTsKKysJCQkJYm9vbCBvayA9 CisrCQkJCQluZXh0X3Rva2VuID09IFRva2VuLkNMQVNTIHx8CisrCQkJCQluZXh0X3Rva2VuID09 IFRva2VuLlNUUlVDVCB8fAorKwkJCQkJbmV4dF90b2tlbiA9PSBUb2tlbi5JTlRFUkZBQ0UgfHwK KysJCQkJCW5leHRfdG9rZW4gPT0gVG9rZW4uVk9JRCB8fAorKwkJCQkJbmV4dF90b2tlbiA9PSBU b2tlbi5SRUZfU1RSVUNUOworIAorIAkJCQlQb3BQb3NpdGlvbiAoKTsKKyAKK0BAIC05MDMsNiAr OTE0LDEyIEBAIG5hbWVzcGFjZSBNb25vLkNTaGFycAorIAkJCQkJYnJlYWs7CisgCQkJCX0KKyAK KysJCQkJYnJlYWs7CisrCQkJY2FzZSBUb2tlbi5SRUY6CisrCQkJCWlmIChwZWVrX3Rva2VuICgp ID09IFRva2VuLlNUUlVDVCkgeworKwkJCQkJdG9rZW4gKCk7CisrCQkJCQlyZXMgPSBUb2tlbi5S RUZfU1RSVUNUOworKwkJCQl9CisgCQkJCWJyZWFrOworIAkJCX0KKyAKK0BAIC0xMDk0LDYgKzEx MTEsNyBAQCBuYW1lc3BhY2UgTW9uby5DU2hhcnAKKyAJCQkJCQljYXNlIFRva2VuLlVOQ0hFQ0tF RDoKKyAJCQkJCQljYXNlIFRva2VuLlVOU0FGRToKKyAJCQkJCQljYXNlIFRva2VuLkRFRkFVTFQ6 CisrCQkJCQkJY2FzZSBUb2tlbi5ERUZBVUxUX1ZBTFVFOgorIAkJCQkJCWNhc2UgVG9rZW4uQVdB SVQ6CisgCisgCQkJCQkJLy8KK0BAIC0xMjczLDE0ICsxMjkxLDIxIEBAIG5hbWVzcGFjZSBNb25v LkNTaGFycAorIAorIAkJCQlyZXR1cm4gZmFsc2U7CisgCQkJY2FzZSBUb2tlbi5PUEVOX1BBUkVO UzoKKy0JCQkJaWYgKCFwYXJzaW5nX2dlbmVyaWNfZGVjbGFyYXRpb24pCistCQkJCQlyZXR1cm4g ZmFsc2U7CistCQkJCQorKwkJCQlpbnQgcGFyZW5zX2NvdW50ID0gMTsKKyAJCQkJd2hpbGUgKHRy dWUpIHsKKyAJCQkJCXN3aXRjaCAodG9rZW4gKCkpIHsKKyAJCQkJCWNhc2UgVG9rZW4uQ09NTUE6 CisgCQkJCQkJLy8gdHVwbGUgZGVjbGFyYXRpb24gYWZ0ZXIgPAorLQkJCQkJCXJldHVybiB0cnVl OworKwkJCQkJCWlmIChwYXJlbnNfY291bnQgPT0gMSkKKysJCQkJCQkJcmV0dXJuIHRydWU7Cisr CQkJCQkJY29udGludWU7CisrCQkJCQljYXNlIFRva2VuLk9QRU5fUEFSRU5TOgorKwkJCQkJCSsr cGFyZW5zX2NvdW50OworKwkJCQkJCWNvbnRpbnVlOworKwkJCQkJY2FzZSBUb2tlbi5DTE9TRV9Q QVJFTlM6CisrCQkJCQkJaWYgKC0tcGFyZW5zX2NvdW50IDw9IDApCisrCQkJCQkJCXJldHVybiBm YWxzZTsKKysJCQkJCQljb250aW51ZTsKKyAJCQkJCWNhc2UgVG9rZW4uT1BfR0VORVJJQ1NfR1Q6 CisgCQkJCQljYXNlIFRva2VuLkVPRjoKKyAJCQkJCQlyZXR1cm4gZmFsc2U7CitAQCAtMTM4MCw2 ICsxNDA1LDcgQEAgbmFtZXNwYWNlIE1vbm8uQ1NoYXJwCisgCQkJY2FzZSBUb2tlbi5ORVc6Cisg CQkJY2FzZSBUb2tlbi5JTlRFUlBPTEFURURfU1RSSU5HOgorIAkJCWNhc2UgVG9rZW4uVEhST1c6 CisrCQkJY2FzZSBUb2tlbi5ERUZBVUxUX0NPTE9OOgorIAkJCQluZXh0X3Rva2VuID0gVG9rZW4u SU5URVJSOworIAkJCQlicmVhazsKKyAJCQkJCitAQCAtMzUwMiw2ICszNTI4LDcgQEAgbmFtZXNw YWNlIE1vbm8uQ1NoYXJwCisgCQkJCQkJY2FzZSBUb2tlbi5TV0lUQ0g6CisgCQkJCQkJY2FzZSBU b2tlbi5VU0lORzoKKyAJCQkJCQljYXNlIFRva2VuLkRFRkFVTFQ6CisrCQkJCQkJY2FzZSBUb2tl bi5ERUZBVUxUX1ZBTFVFOgorIAkJCQkJCWNhc2UgVG9rZW4uREVMRUdBVEU6CisgCQkJCQkJY2Fz ZSBUb2tlbi5PUF9HRU5FUklDU19HVDoKKyAJCQkJCQljYXNlIFRva2VuLlJFRlZBTFVFOgorQEAg LTM5NjMsMjYgKzM5OTAsMjkgQEAgbmFtZXNwYWNlIE1vbm8uQ1NoYXJwCisgCQl7CisgCQkJaW50 IGQ7CisgCistCQkJLy8gU2F2ZSBjdXJyZW50IHBvc2l0aW9uIGFuZCBwYXJzZSBuZXh0IHRva2Vu LgorLQkJCVB1c2hQb3NpdGlvbiAoKTsKKy0JCQlpbnQgZ2VuZXJpY19kaW1lbnNpb24gPSAwOwor LQkJCWlmIChwYXJzZV9sZXNzX3RoYW4gKHJlZiBnZW5lcmljX2RpbWVuc2lvbikpIHsKKy0JCQkJ aWYgKHBhcnNpbmdfZ2VuZXJpY19kZWNsYXJhdGlvbiAmJiAocGFyc2luZ19nZW5lcmljX2RlY2xh cmF0aW9uX2RvYyB8fCB0b2tlbiAoKSAhPSBUb2tlbi5ET1QpKSB7CistCQkJCQlkID0gVG9rZW4u T1BfR0VORVJJQ1NfTFRfREVDTDsKKy0JCQkJfSBlbHNlIHsKKy0JCQkJCWlmIChnZW5lcmljX2Rp bWVuc2lvbiA+IDApIHsKKy0JCQkJCQl2YWwgPSBnZW5lcmljX2RpbWVuc2lvbjsKKy0JCQkJCQlE aXNjYXJkUG9zaXRpb24gKCk7CistCQkJCQkJcmV0dXJuIFRva2VuLkdFTkVSSUNfRElNRU5TSU9O OworLQkJCQkJfQorKwkJCWlmIChjdXJyZW50X3Rva2VuICE9IFRva2VuLk9QRVJBVE9SKSB7Cisr CQkJCS8vIFNhdmUgY3VycmVudCBwb3NpdGlvbiBhbmQgcGFyc2UgbmV4dCB0b2tlbi4KKysJCQkJ UHVzaFBvc2l0aW9uICgpOworKwkJCQlpbnQgZ2VuZXJpY19kaW1lbnNpb24gPSAwOworKwkJCQlp ZiAocGFyc2VfbGVzc190aGFuIChyZWYgZ2VuZXJpY19kaW1lbnNpb24pKSB7CisrCQkJCQlpZiAo cGFyc2luZ19nZW5lcmljX2RlY2xhcmF0aW9uICYmIChwYXJzaW5nX2dlbmVyaWNfZGVjbGFyYXRp b25fZG9jIHx8IHRva2VuICgpICE9IFRva2VuLkRPVCkpIHsKKysJCQkJCQlkID0gVG9rZW4uT1Bf R0VORVJJQ1NfTFRfREVDTDsKKysJCQkJCX0gZWxzZSB7CisrCQkJCQkJaWYgKGdlbmVyaWNfZGlt ZW5zaW9uID4gMCkgeworKwkJCQkJCQl2YWwgPSBnZW5lcmljX2RpbWVuc2lvbjsKKysJCQkJCQkJ RGlzY2FyZFBvc2l0aW9uICgpOworKwkJCQkJCQlyZXR1cm4gVG9rZW4uR0VORVJJQ19ESU1FTlNJ T047CisrCQkJCQkJfQorIAorLQkJCQkJZCA9IFRva2VuLk9QX0dFTkVSSUNTX0xUOworKwkJCQkJ CWQgPSBUb2tlbi5PUF9HRU5FUklDU19MVDsKKysJCQkJCX0KKysJCQkJCVBvcFBvc2l0aW9uICgp OworKwkJCQkJcmV0dXJuIGQ7CisgCQkJCX0KKysKKyAJCQkJUG9wUG9zaXRpb24gKCk7CistCQkJ CXJldHVybiBkOworIAkJCX0KKyAKKy0JCQlQb3BQb3NpdGlvbiAoKTsKKyAJCQlwYXJzaW5nX2dl bmVyaWNfbGVzc190aGFuID0gMDsKKyAKKyAJCQlkID0gcGVla19jaGFyICgpOworZGlmZiAtLWdp dCBhL21jcy9tY3MvZGVsZWdhdGUuY3MgYi9tY3MvbWNzL2RlbGVnYXRlLmNzCitpbmRleCA4MGVi N2UyNjVmMS4uNTJjZWU4ZjM0NTUgMTAwNjQ0CistLS0gYS9tY3MvbWNzL2RlbGVnYXRlLmNzCisr KysgYi9tY3MvbWNzL2RlbGVnYXRlLmNzCitAQCAtMTg4LDggKzE4OCw4IEBAIG5hbWVzcGFjZSBN b25vLkNTaGFycCB7CisgCisgCQkJQ2hlY2tQcm90ZWN0ZWRNb2RpZmllciAoKTsKKyAKKy0JCQlp ZiAoQ29tcGlsZXIuU2V0dGluZ3MuU3RkTGliICYmIHJldF90eXBlLklzU3BlY2lhbFJ1bnRpbWVU eXBlKSB7CistCQkJCU1ldGhvZC5FcnJvcjE1OTkgKExvY2F0aW9uLCByZXRfdHlwZSwgUmVwb3J0 KTsKKysJCQlpZiAocmV0X3R5cGUuSXNTcGVjaWFsUnVudGltZVR5cGUgJiYgQ29tcGlsZXIuU2V0 dGluZ3MuU3RkTGliKSB7CisrCQkJCU1ldGhvZC5FcnJvcl9SZXR1cm5UeXBlQ2FudEJlUmVmQW55 IChMb2NhdGlvbiwgcmV0X3R5cGUsIFJlcG9ydCk7CisgCQkJCXJldHVybiBmYWxzZTsKKyAJCQl9 CisgCitAQCAtMzM4LDYgKzMzOCw4IEBAIG5hbWVzcGFjZSBNb25vLkNTaGFycCB7CisgCQkJCQlN b2R1bGUuUHJlZGVmaW5lZEF0dHJpYnV0ZXMuRHluYW1pYy5FbWl0QXR0cmlidXRlIChDcmVhdGVS ZXR1cm5CdWlsZGVyICgpLkJ1aWxkZXIpOworIAkJCQl9IGVsc2UgaWYgKHJ0eXBlLkhhc0R5bmFt aWNFbGVtZW50KSB7CisgCQkJCQlNb2R1bGUuUHJlZGVmaW5lZEF0dHJpYnV0ZXMuRHluYW1pYy5F bWl0QXR0cmlidXRlIChDcmVhdGVSZXR1cm5CdWlsZGVyICgpLkJ1aWxkZXIsIHJ0eXBlLCBMb2Nh dGlvbik7CisrCQkJCX0gZWxzZSBpZiAocnR5cGUgaXMgUmVhZE9ubHlSZWZlcmVuY2VDb250YWlu ZXIpIHsKKysJCQkJCU1vZHVsZS5QcmVkZWZpbmVkQXR0cmlidXRlcy5Jc1JlYWRPbmx5LkVtaXRB dHRyaWJ1dGUgKENyZWF0ZVJldHVybkJ1aWxkZXIgKCkuQnVpbGRlcik7CisgCQkJCX0KKyAKKyAJ CQkJaWYgKHJ0eXBlLkhhc05hbWVkVHVwbGVFbGVtZW50KSB7CitAQCAtNjAzLDggKzYwNSwxNCBA QCBuYW1lc3BhY2UgTW9uby5DU2hhcnAgeworIAkJCX0KKyAKKyAJCQl2YXIgZXhwciA9IG1ldGhv ZF9ncm91cC5JbnN0YW5jZUV4cHJlc3Npb247CistCQkJaWYgKGV4cHIgIT0gbnVsbCAmJiAoZXhw ci5UeXBlLklzR2VuZXJpY1BhcmFtZXRlciB8fCAhVHlwZVNwZWMuSXNSZWZlcmVuY2VUeXBlIChl eHByLlR5cGUpKSkKKysJCQlpZiAoZXhwciAhPSBudWxsICYmIChleHByLlR5cGUuSXNHZW5lcmlj UGFyYW1ldGVyIHx8ICFUeXBlU3BlYy5Jc1JlZmVyZW5jZVR5cGUgKGV4cHIuVHlwZSkpKSB7Cisr CQkJCWlmIChleHByLlR5cGUuSXNCeVJlZkxpa2UgfHwgZXhwci5UeXBlLklzU3BlY2lhbFJ1bnRp bWVUeXBlKSB7CisrCQkJCQkvLyBDU0M6IFNob3VsZCBiZSBiZXR0ZXIgZXJyb3IgY29kZQorKwkJ CQkJRXJyb3JfQ29udmVyc2lvbkZhaWxlZCAoZWMsIGRlbGVnYXRlX21ldGhvZCwgbnVsbCk7Cisr CQkJCX0KKysKKyAJCQkJbWV0aG9kX2dyb3VwLkluc3RhbmNlRXhwcmVzc2lvbiA9IG5ldyBCb3hl ZENhc3QgKGV4cHIsIGVjLkJ1aWx0aW5UeXBlcy5PYmplY3QpOworKwkJCX0KKyAKKyAJCQllY2xh c3MgPSBFeHByQ2xhc3MuVmFsdWU7CisgCQkJcmV0dXJuIHRoaXM7CitkaWZmIC0tZ2l0IGEvbWNz L21jcy9keW5hbWljLmNzIGIvbWNzL21jcy9keW5hbWljLmNzCitpbmRleCBmZDQ2NjJiMmZlZC4u ZjgzMTRiMmYzY2QgMTAwNjQ0CistLS0gYS9tY3MvbWNzL2R5bmFtaWMuY3MKKysrKyBiL21jcy9t Y3MvZHluYW1pYy5jcworQEAgLTI3OSwxMSArMjc5LDE5IEBAIG5hbWVzcGFjZSBNb25vLkNTaGFy cAorIAorIAkJcHJvdGVjdGVkIGJvb2wgRG9SZXNvbHZlQ29yZSAoUmVzb2x2ZUNvbnRleHQgcmMp CisgCQl7CisrCQkJaW50IGkgPSAwOworIAkJCWZvcmVhY2ggKHZhciBhcmcgaW4gYXJndW1lbnRz KSB7CisgCQkJCWlmIChhcmcuVHlwZSA9PSBJbnRlcm5hbFR5cGUuVmFyT3V0VHlwZSkgeworIAkJ CQkJLy8gU2hvdWxkIGJlIHNwZWNpYWwgZXJyb3IgbWVzc2FnZSBhYm91dCBkeW5hbWljIGRpc3Bh dGNoCisgCQkJCQlyYy5SZXBvcnQuRXJyb3IgKDgxOTcsIGFyZy5FeHByLkxvY2F0aW9uLCAiQ2Fu bm90IGluZmVyIHRoZSB0eXBlIG9mIGltcGxpY2l0bHktdHlwZWQgb3V0IHZhcmlhYmxlIGB7MH0n IiwgKChEZWNsYXJhdGlvbkV4cHJlc3Npb24pIGFyZy5FeHByKS5WYXJpYWJsZS5OYW1lKTsKKysJ CQkJfSBlbHNlIGlmIChhcmcuVHlwZSA9PSBJbnRlcm5hbFR5cGUuRGVmYXVsdFR5cGUpIHsKKysJ CQkJCXJjLlJlcG9ydC5FcnJvciAoODMxMSwgYXJnLkV4cHIuTG9jYXRpb24sICJDYW5ub3QgdXNl IGEgZGVmYXVsdCBsaXRlcmFsIGFzIGFuIGFyZ3VtZW50IHRvIGEgZHluYW1pY2FsbHkgZGlzcGF0 Y2hlZCBvcGVyYXRpb24iKTsKKyAJCQkJfQorKworKwkJCQkvLyBGb3JjZWQgbGltaXRhdGlvbiBi ZWNhdXNlIE1pY3Jvc29mdC5DU2hhcnAgbmVlZHMgdG8gY2F0Y2ggdXAKKysJCQkJaWYgKGkgPiAw ICYmIGFyZ3VtZW50cyBbaSAtIDFdIGlzIE5hbWVkQXJndW1lbnQgJiYgIShhcmd1bWVudHMgW2ld IGlzIE5hbWVkQXJndW1lbnQpKQorKwkJCQkJcmMuUmVwb3J0LkVycm9yICg4MzI0LCBsb2MsICJO YW1lZCBhcmd1bWVudCBzcGVjaWZpY2F0aW9ucyBtdXN0IGFwcGVhciBhZnRlciBhbGwgZml4ZWQg YXJndW1lbnRzIGhhdmUgYmVlbiBzcGVjaWZpZWQgaW4gYSBkeW5hbWljIGludm9jYXRpb24iKTsK KysJCQkJKytpOworIAkJCX0KKyAKKyAJCQlpZiAocmMuQ3VycmVudFR5cGVQYXJhbWV0ZXJzICE9 IG51bGwgJiYgcmMuQ3VycmVudFR5cGVQYXJhbWV0ZXJzWzBdLklzTWV0aG9kVHlwZVBhcmFtZXRl cikKK2RpZmYgLS1naXQgYS9tY3MvbWNzL2Vjb3JlLmNzIGIvbWNzL21jcy9lY29yZS5jcworaW5k ZXggMzRmZjlhMzBkYWIuLjIwZWU5ZTczYjE5IDEwMDY0NAorLS0tIGEvbWNzL21jcy9lY29yZS5j cworKysrIGIvbWNzL21jcy9lY29yZS5jcworQEAgLTI1NSw3ICsyNTUsNyBAQCBuYW1lc3BhY2Ug TW9uby5DU2hhcnAgeworIAorIAkJcHVibGljIHZvaWQgRXJyb3JfRXhwcmVzc2lvbk11c3RCZUNv bnN0YW50IChSZXNvbHZlQ29udGV4dCByYywgTG9jYXRpb24gbG9jLCBzdHJpbmcgZV9uYW1lKQor IAkJeworLQkJCXJjLlJlcG9ydC5FcnJvciAoMTMzLCBsb2MsICJUaGUgZXhwcmVzc2lvbiBiZWlu ZyBhc3NpZ25lZCB0byBgezB9JyBtdXN0IGJlIGNvbnN0YW50IiwgZV9uYW1lKTsKKysJCQlyYy5S ZXBvcnQuRXJyb3IgKDEzMywgbG9jLCAiVGhlIGV4cHJlc3Npb24gYmVpbmcgYXNzaWduZWQgdG8g YHswfScgbXVzdCBiZSBhIGNvbnN0YW50IG9yIGRlZmF1bHQgdmFsdWUiLCBlX25hbWUpOworIAkJ fQorIAorIAkJcHVibGljIHZvaWQgRXJyb3JfQ29uc3RhbnRDYW5CZUluaXRpYWxpemVkV2l0aE51 bGxPbmx5IChSZXNvbHZlQ29udGV4dCByYywgVHlwZVNwZWMgdHlwZSwgTG9jYXRpb24gbG9jLCBz dHJpbmcgbmFtZSkKK0BAIC0yOTU3LDYgKzI5NTcsMTMgQEAgbmFtZXNwYWNlIE1vbm8uQ1NoYXJw IHsKKyAJCQkJaWYgKChyZXN0cmljdGlvbnMgJiBNZW1iZXJMb29rdXBSZXN0cmljdGlvbnMuTmFt ZU9mRXhjbHVkZWQpID09IDAgJiYgTmFtZSA9PSAibmFtZW9mIikKKyAJCQkJCXJldHVybiBuZXcg TmFtZU9mICh0aGlzKTsKKyAKKysJCQkJaWYgKChyZXN0cmljdGlvbnMgJiBNZW1iZXJMb29rdXBS ZXN0cmljdGlvbnMuUmVhZEFjY2VzcykgPT0gMCAmJiBOYW1lID09ICJfIikgeworKwkJCQkJaWYg KHJjLk1vZHVsZS5Db21waWxlci5TZXR0aW5ncy5WZXJzaW9uIDwgTGFuZ3VhZ2VWZXJzaW9uLlZf NykKKysJCQkJCQlyYy5SZXBvcnQuRmVhdHVyZUlzTm90QXZhaWxhYmxlIChyYy5Nb2R1bGUuQ29t cGlsZXIsIGxvYywgImRpc2NhcmRzIik7CisrCisrCQkJCQlyZXR1cm4gbmV3IERpc2NhcmQgKGxv YykuUmVzb2x2ZSAocmMpOworKwkJCQl9CisrCisgCQkJCWlmIChlcnJvck1vZGUpIHsKKyAJCQkJ CWlmICh2YXJpYWJsZV9mb3VuZCkgeworIAkJCQkJCXJjLlJlcG9ydC5FcnJvciAoODQxLCBsb2Ms ICJBIGxvY2FsIHZhcmlhYmxlIGB7MH0nIGNhbm5vdCBiZSB1c2VkIGJlZm9yZSBpdCBpcyBkZWNs YXJlZCIsIE5hbWUpOworQEAgLTQwMjksNiArNDAzNiwxMyBAQCBuYW1lc3BhY2UgTW9uby5DU2hh cnAgeworIAkJCXJldHVybiBNZXRob2RzLkZpcnN0ICgpLkdldFNpZ25hdHVyZUZvckVycm9yICgp OworIAkJfQorIAorKwkJc3RhdGljIE1ldGhvZFNwZWMgQ2FuZGlkYXRlRGV2aXJ0dWFsaXphdGlv biAoVHlwZVNwZWMgdHlwZSwgTWV0aG9kU3BlYyBtZXRob2QpCisrCQl7CisrCQkJLy8gQXNzdW1l cyBubyBnZW5lcmljcyBnZXQgaW52b2x2ZWQKKysJCQl2YXIgZmlsdGVyID0gbmV3IE1lbWJlckZp bHRlciAobWV0aG9kLk5hbWUsIG1ldGhvZC5Bcml0eSwgTWVtYmVyS2luZC5NZXRob2QsIG1ldGhv ZC5QYXJhbWV0ZXJzLCBudWxsKTsKKysJCQlyZXR1cm4gTWVtYmVyQ2FjaGUuRmluZE1lbWJlciAo dHlwZSwgZmlsdGVyLCBCaW5kaW5nUmVzdHJpY3Rpb24uSW5zdGFuY2VPbmx5IHwgQmluZGluZ1Jl c3RyaWN0aW9uLk92ZXJyaWRlT25seSB8IEJpbmRpbmdSZXN0cmljdGlvbi5EZWNsYXJlZE9ubHkp IGFzIE1ldGhvZFNwZWM7CisrCQl9CisrCisgCQlwdWJsaWMgb3ZlcnJpZGUgRXhwcmVzc2lvbiBD cmVhdGVFeHByZXNzaW9uVHJlZSAoUmVzb2x2ZUNvbnRleHQgZWMpCisgCQl7CisgCQkJaWYgKGJl c3RfY2FuZGlkYXRlID09IG51bGwpIHsKK0BAIC00MTc3LDYgKzQxOTEsMjIgQEAgbmFtZXNwYWNl IE1vbm8uQ1NoYXJwIHsKKyAJCQkJCQl9CisgCisgCQkJCQkJSW5zdGFuY2VFeHByZXNzaW9uLlJl c29sdmUgKGVjLCBSZXNvbHZlRmxhZ3MuVmFyaWFibGVPclZhbHVlIHwgUmVzb2x2ZUZsYWdzLk1l dGhvZEdyb3VwIHwgUmVzb2x2ZUZsYWdzLlR5cGUpOworKworKwkJCQkJCXZhciBleHByX3R5cGUg PSBJbnN0YW5jZUV4cHJlc3Npb24uVHlwZTsKKysJCQkJCQlpZiAoKGV4cHJfdHlwZS5Jc0J5UmVm TGlrZSB8fCBleHByX3R5cGUuSXNTcGVjaWFsUnVudGltZVR5cGUpICYmIGJlc3RfY2FuZGlkYXRl LkRlY2xhcmluZ1R5cGUgIT0gZXhwcl90eXBlKSB7CisrCQkJCQkJCU1ldGhvZFNwZWMgZGV2aXJ0 ID0gbnVsbDsKKysJCQkJCQkJaWYgKChiZXN0X2NhbmRpZGF0ZS5Nb2RpZmllcnMgJiAoTW9kaWZp ZXJzLlZJUlRVQUwgfCBNb2RpZmllcnMuQUJTVFJBQ1QgfCBNb2RpZmllcnMuT1ZFUlJJREUpKSAh PSAwKSB7CisrCQkJCQkJCQlkZXZpcnQgPSBDYW5kaWRhdGVEZXZpcnR1YWxpemF0aW9uIChleHBy X3R5cGUsIGJlc3RfY2FuZGlkYXRlKTsKKysJCQkJCQkJfQorKworKwkJCQkJCQlpZiAoZGV2aXJ0 ID09IG51bGwpIHsKKysJCQkJCQkJCS8vIENTQzogU2hvdWxkIGJlIGJldHRlciBlcnJvciBtZXNz YWdlCisrCQkJCQkJCQllYy5SZXBvcnQuRXJyb3IgKDI5LCBJbnN0YW5jZUV4cHJlc3Npb24uTG9j YXRpb24sICJDYW5ub3QgaW1wbGljaXRseSBjb252ZXJ0IHR5cGUgYHswfScgdG8gYHsxfSciLAor KwkJCQkJCQkJCQkJCSBJbnN0YW5jZUV4cHJlc3Npb24uVHlwZS5HZXRTaWduYXR1cmVGb3JFcnJv ciAoKSwgYmVzdF9jYW5kaWRhdGUuRGVjbGFyaW5nVHlwZS5HZXRTaWduYXR1cmVGb3JFcnJvciAo KSk7CisrCQkJCQkJCX0gZWxzZSB7CisrCQkJCQkJCQliZXN0X2NhbmRpZGF0ZSA9IGRldmlydDsK KysJCQkJCQkJfQorKwkJCQkJCX0KKyAJCQkJCX0KKyAJCQkJfQorIAorQEAgLTU0MTksNyArNTQ0 OSw3IEBAIG5hbWVzcGFjZSBNb25vLkNTaGFycCB7CisgCQkJCX0KKyAKKyAJCQkJaWYgKGFyZ190 eXBlICE9IHBhcmFtZXRlcikgeworLQkJCQkJaWYgKGFyZ190eXBlID09IEludGVybmFsVHlwZS5W YXJPdXRUeXBlKQorKwkJCQkJaWYgKGFyZ190eXBlID09IEludGVybmFsVHlwZS5WYXJPdXRUeXBl IHx8IGFyZ190eXBlID09IEludGVybmFsVHlwZS5EaXNjYXJkKQorIAkJCQkJCXJldHVybiAwOwor IAorIAkJCQkJdmFyIHJlZl9hcmdfdHlwZSA9IGFyZ190eXBlIGFzIFJlZmVyZW5jZUNvbnRhaW5l cjsKK0BAIC02MDI4LDYgKzYwNTgsMTEgQEAgbmFtZXNwYWNlIE1vbm8uQ1NoYXJwIHsKKyAJCQkJ CQljb250aW51ZTsKKyAJCQkJCX0KKyAKKysJCQkJCWlmIChhcmdfdHlwZSA9PSBJbnRlcm5hbFR5 cGUuRGlzY2FyZCkgeworKwkJCQkJCWEuRXhwci5UeXBlID0gcHQ7CisrCQkJCQkJY29udGludWU7 CisrCQkJCQl9CisrCisgCQkJCQl2YXIgcmVmX2FyZ190eXBlID0gYXJnX3R5cGUgYXMgUmVmZXJl bmNlQ29udGFpbmVyOworIAkJCQkJaWYgKHJlZl9hcmdfdHlwZSAhPSBudWxsKSB7CisgCQkJCQkJ aWYgKHJlZl9hcmdfdHlwZS5FbGVtZW50ICE9IHB0KQorQEAgLTYwNjEsOSArNjA5NiwxNSBAQCBu YW1lc3BhY2UgTW9uby5DU2hhcnAgeworIAkJCQkJCWVsc2UKKyAJCQkJCQkJZWMuUmVwb3J0LlN5 bWJvbFJlbGF0ZWRUb1ByZXZpb3VzRXJyb3IgKG1lbWJlcik7CisgCistCQkJCQkJZWMuUmVwb3J0 LkVycm9yICgxNzQ0LCBuYS5Mb2NhdGlvbiwKKy0JCQkJCQkJIk5hbWVkIGFyZ3VtZW50IGB7MH0n IGNhbm5vdCBiZSB1c2VkIGZvciBhIHBhcmFtZXRlciB3aGljaCBoYXMgcG9zaXRpb25hbCBhcmd1 bWVudCBzcGVjaWZpZWQiLAorLQkJCQkJCQluYS5OYW1lKTsKKysJCQkJCQlpZiAobmFtZV9pbmRl eCA+IGFfaWR4KSB7CisrCQkJCQkJCWVjLlJlcG9ydC5FcnJvciAoODMyMywgbmEuTG9jYXRpb24s CisrCQkJCQkJCQkiTmFtZWQgYXJndW1lbnQgYHswfScgaXMgdXNlZCBvdXQgb2YgcG9zaXRpb24g YnV0IGlzIGZvbGxvd2VkIGJ5IHBvc2l0aW9uYWwgYXJndW1lbnQiLAorKwkJCQkJCQkJbmEuTmFt ZSk7CisrCQkJCQkJfSBlbHNlIHsKKysJCQkJCQkJZWMuUmVwb3J0LkVycm9yICgxNzQ0LCBuYS5M b2NhdGlvbiwKKysJCQkJCQkJCSJOYW1lZCBhcmd1bWVudCBgezB9JyBjYW5ub3QgYmUgdXNlZCBm b3IgYSBwYXJhbWV0ZXIgd2hpY2ggaGFzIHBvc2l0aW9uYWwgYXJndW1lbnQgc3BlY2lmaWVkIiwK KysJCQkJCQkJCW5hLk5hbWUpOworKwkJCQkJCX0KKyAJCQkJCX0KKyAJCQkJfQorIAkJCQkKK0BA IC03MzUwLDYgKzczOTEsOSBAQCBuYW1lc3BhY2UgTW9uby5DU2hhcnAgeworIAkJCWlmICghUmVz b2x2ZUdldHRlciAoZWMpKQorIAkJCQlyZXR1cm4gbnVsbDsKKyAKKysJCQlpZiAodHlwZS5LaW5k ID09IE1lbWJlcktpbmQuQnlSZWYpCisrCQkJCXJldHVybiBCeVJlZkRlcmVmZXJlbmNlLkNyZWF0 ZSAodGhpcykuUmVzb2x2ZSAoZWMpOworKworIAkJCXJldHVybiB0aGlzOworIAkJfQorIAorQEAg LTczNTksMTIgKzc0MDMsMTEgQEAgbmFtZXNwYWNlIE1vbm8uQ1NoYXJwIHsKKyAJCQkJRXJyb3Jf TnVsbFByb3BhZ2F0aW5nTFZhbHVlIChyYyk7CisgCisgCQkJaWYgKHJpZ2h0X3NpZGUgPT0gRW1w dHlFeHByZXNzaW9uLk91dEFjY2VzcykgeworLQkJCQlpZiAoYmVzdF9jYW5kaWRhdGU/Lk1lbWJl clR5cGUuS2luZCA9PSBNZW1iZXJLaW5kLkJ5UmVmKSB7CistCQkJCQlpZiAoQXJndW1lbnRzPy5D b250YWluc0VtaXRXaXRoQXdhaXQgKCkgPT0gdHJ1ZSkgeworLQkJCQkJCXJjLlJlcG9ydC5FcnJv ciAoODE3OCwgbG9jLCAiYGF3YWl0JyBjYW5ub3QgYmUgdXNlZCBpbiBhbiBleHByZXNzaW9uIGNv bnRhaW5pbmcgYSBjYWxsIHRvIGB7MH0nIGJlY2F1c2UgaXQgcmV0dXJucyBieSByZWZlcmVuY2Ui LAorLQkJCQkJCQlHZXRTaWduYXR1cmVGb3JFcnJvciAoKSk7CistCQkJCQl9CisrCQkJCWlmIChP dmVybG9hZFJlc29sdmUgKHJjLCBudWxsKSA9PSBudWxsKQorKwkJCQkJcmV0dXJuIG51bGw7Cisg CisrCQkJCWlmIChiZXN0X2NhbmRpZGF0ZT8uTWVtYmVyVHlwZS5LaW5kID09IE1lbWJlcktpbmQu QnlSZWYpIHsKKysJCQkJCWdldHRlciA9IENhbmRpZGF0ZVRvQmFzZU92ZXJyaWRlIChyYywgYmVz dF9jYW5kaWRhdGUuR2V0KTsKKyAJCQkJCXJldHVybiB0aGlzOworIAkJCQl9CisgCitAQCAtNzM5 Niw3ICs3NDM5LDcgQEAgbmFtZXNwYWNlIE1vbm8uQ1NoYXJwIHsKKyAKKyAJCQkJaWYgKGJlc3Rf Y2FuZGlkYXRlLk1lbWJlclR5cGUuS2luZCA9PSBNZW1iZXJLaW5kLkJ5UmVmKSB7CisgCQkJCQln ZXR0ZXIgPSBDYW5kaWRhdGVUb0Jhc2VPdmVycmlkZSAocmMsIGJlc3RfY2FuZGlkYXRlLkdldCk7 CistCQkJCQlyZXR1cm4gQnlSZWZEZXJlZmVyZW5jZS5DcmVhdGUodGhpcykuUmVzb2x2ZShyYyk7 CisrCQkJCQlyZXR1cm4gQnlSZWZEZXJlZmVyZW5jZS5DcmVhdGUgKHRoaXMpLlJlc29sdmUgKHJj KTsKKyAJCQkJfQorIAorIAkJCQlyYy5SZXBvcnQuRXJyb3IgKDIwMCwgbG9jLCAiUHJvcGVydHkg b3IgaW5kZXhlciBgezB9JyBjYW5ub3QgYmUgYXNzaWduZWQgdG8gKGl0IGlzIHJlYWQtb25seSki LAorZGlmZiAtLWdpdCBhL21jcy9tY3MvZXZhbC5jcyBiL21jcy9tY3MvZXZhbC5jcworaW5kZXgg NjBlMGM2ZDY0YTAuLjA3NTY5N2JiMWRmIDEwMDY0NAorLS0tIGEvbWNzL21jcy9ldmFsLmNzCisr KysgYi9tY3MvbWNzL2V2YWwuY3MKK0BAIC03ODgsNiArNzg4LDcgQEAgbmFtZXNwYWNlIE1vbm8u Q1NoYXJwCisgCQkJCXJldHVybiBudWxsOworIAkJCX0KKyAKKysJCQltb2R1bGUuQ2xvc2VDb250 YWluZXJFYXJseUZvclJlZmxlY3Rpb25FbWl0ICgpOworIAkJCW1vZHVsZS5DbG9zZUNvbnRhaW5l ciAoKTsKKyAJCQlpZiAoaG9zdCAhPSBudWxsKQorIAkJCQlob3N0LkNsb3NlQ29udGFpbmVyICgp OworZGlmZiAtLWdpdCBhL21jcy9tY3MvZXhwcmVzc2lvbi5jcyBiL21jcy9tY3MvZXhwcmVzc2lv bi5jcworaW5kZXggNzMyZWUzZWU5MzQuLjUxOGNjYzhlZjQzIDEwMDY0NAorLS0tIGEvbWNzL21j cy9leHByZXNzaW9uLmNzCisrKysgYi9tY3MvbWNzL2V4cHJlc3Npb24uY3MKK0BAIC0xMjIwLDYg KzEyMjAsNyBAQCBuYW1lc3BhY2UgTW9uby5DU2hhcnAKKyAJCQkJZXhwciA9IGV4cHIuUmVzb2x2 ZUxWYWx1ZSAoZWMsIGV4cHIpOworIAkJCX0gZWxzZSB7CisgCQkJCWVjLlJlcG9ydC5FcnJvciAo MTA1OSwgbG9jLCAiVGhlIG9wZXJhbmQgb2YgYW4gaW5jcmVtZW50IG9yIGRlY3JlbWVudCBvcGVy YXRvciBtdXN0IGJlIGEgdmFyaWFibGUsIHByb3BlcnR5IG9yIGluZGV4ZXIiKTsKKysJCQkJcmV0 dXJuIG51bGw7CisgCQkJfQorIAorIAkJCS8vCitAQCAtMTQ3Nyw2ICsxNDc4LDExIEBAIG5hbWVz cGFjZSBNb25vLkNTaGFycAorIAkJCQlyZXR1cm4gbnVsbDsKKyAJCQl9CisgCisrCQkJaWYgKGV4 cHIuVHlwZSA9PSBJbnRlcm5hbFR5cGUuRGVmYXVsdFR5cGUpIHsKKysJCQkJRXJyb3JfT3BlcmF0 b3JDYW5ub3RCZUFwcGxpZWQgKHJjLCBsb2MsIE9wZXJhdG9yTmFtZSwgZXhwci5UeXBlKTsKKysJ CQkJcmV0dXJuIG51bGw7CisrCQkJfQorKworIAkJCXJldHVybiB0aGlzOworIAkJfQorIAorQEAg LTQzMDQsOSArNDMxMCwzMiBAQCBuYW1lc3BhY2UgTW9uby5DU2hhcnAKKyAJCQkJQ2hlY2tPdXRP ZlJhbmdlQ29tcGFyaXNvbiAoZWMsIHJjLCBsZWZ0LlR5cGUpOworIAkJCX0KKyAKKy0JCQlpZiAo bGVmdC5UeXBlLkJ1aWx0aW5UeXBlID09IEJ1aWx0aW5UeXBlU3BlYy5UeXBlLkR5bmFtaWMgfHwg cmlnaHQuVHlwZS5CdWlsdGluVHlwZSA9PSBCdWlsdGluVHlwZVNwZWMuVHlwZS5EeW5hbWljKQor KwkJCXZhciBsdHlwZSA9IGxlZnQuVHlwZTsKKysJCQl2YXIgcnR5cGUgPSByaWdodC5UeXBlOwor KwkJCWlmIChsdHlwZS5CdWlsdGluVHlwZSA9PSBCdWlsdGluVHlwZVNwZWMuVHlwZS5EeW5hbWlj IHx8IHJ0eXBlLkJ1aWx0aW5UeXBlID09IEJ1aWx0aW5UeXBlU3BlYy5UeXBlLkR5bmFtaWMpCisg CQkJCXJldHVybiBEb1Jlc29sdmVEeW5hbWljIChlYyk7CisgCisrCQkJLy8KKysJCQkvLyBPbmx5 IGRlZmF1bHQgd2l0aCA9PSBhbmQgIT0gaXMgZXhwbGljaXRseSBhbGxvd2VkCisrCQkJLy8KKysJ CQlpZiAobHR5cGUgPT0gSW50ZXJuYWxUeXBlLkRlZmF1bHRUeXBlIHx8IHJ0eXBlID09IEludGVy bmFsVHlwZS5EZWZhdWx0VHlwZSkgeworKwkJCQlpZiAoKE9wZXIgJiBPcGVyYXRvci5FcXVhbGl0 eU1hc2spID09IDApIHsKKysJCQkJCWVjLlJlcG9ydC5FcnJvciAoODMxMCwgbG9jLCAiT3BlcmF0 b3IgYHswfScgY2Fubm90IGJlIGFwcGxpZWQgdG8gb3BlcmFuZCBgZGVmYXVsdCciLCBPcGVyTmFt ZSAoT3BlcikpOworKwkJCQkJcmV0dXJuIG51bGw7CisrCQkJCX0KKysKKysJCQkJaWYgKGx0eXBl ID09IHJ0eXBlKSB7CisrCQkJCQllYy5SZXBvcnQuRXJyb3IgKDgzMTUsIGxvYywgIk9wZXJhdG9y IGB7MH0nIGlzIGFtYmlndW91cyBvbiBvcGVyYW5kcyBgZGVmYXVsdCcgYW5kIGBkZWZhdWx0JyIs IE9wZXJOYW1lIChPcGVyKSk7CisrCQkJCQlyZXR1cm4gbnVsbDsKKysJCQkJfQorKworKwkJCQlp ZiAocnR5cGUgPT0gSW50ZXJuYWxUeXBlLkRlZmF1bHRUeXBlKSB7CisrCQkJCQlyaWdodCA9IG5l dyBEZWZhdWx0VmFsdWVFeHByZXNzaW9uIChuZXcgVHlwZUV4cHJlc3Npb24gKGx0eXBlLCByaWdo dC5Mb2NhdGlvbiksIHJpZ2h0LkxvY2F0aW9uKS5SZXNvbHZlIChlYyk7CisrCQkJCX0gZWxzZSB7 CisrCQkJCQlsZWZ0ID0gbmV3IERlZmF1bHRWYWx1ZUV4cHJlc3Npb24gKG5ldyBUeXBlRXhwcmVz c2lvbiAocnR5cGUsIGxlZnQuTG9jYXRpb24pLCBsZWZ0LkxvY2F0aW9uKS5SZXNvbHZlIChlYyk7 CisrCQkJCX0KKysJCQl9CisrCisgCQkJcmV0dXJuIERvUmVzb2x2ZUNvcmUgKGVjLCBsZWZ0LCBy aWdodCk7CisgCQl9CisgCitAQCAtNjc0NCwxMCArNjc3MywxNCBAQCBuYW1lc3BhY2UgTW9uby5D U2hhcnAKKyAJCQkJCWVjLlJlcG9ydC5FcnJvciAoMTc2NCwgbG9jLAorIAkJCQkJCSJDYW5ub3Qg dXNlIGZpeGVkIHZhcmlhYmxlIGB7MH0nIGluc2lkZSBhbiBhbm9ueW1vdXMgbWV0aG9kLCBsYW1i ZGEgZXhwcmVzc2lvbiBvciBxdWVyeSBleHByZXNzaW9uIiwKKyAJCQkJCQlHZXRTaWduYXR1cmVG b3JFcnJvciAoKSk7CistCQkJCX0gZWxzZSBpZiAobG9jYWxfaW5mby5Jc0J5UmVmKSB7CistCQkJ CQllYy5SZXBvcnQuRXJyb3IgKDgxNzUsIGxvYywKKy0JCQkJCQkiQ2Fubm90IHVzZSBieS1yZWZl cmVuY2UgdmFyaWFibGUgYHswfScgaW5zaWRlIGFuIGFub255bW91cyBtZXRob2QsIGxhbWJkYSBl eHByZXNzaW9uLCBvciBxdWVyeSBleHByZXNzaW9uIiwKKy0JCQkJCQlHZXRTaWduYXR1cmVGb3JF cnJvciAoKSk7CisrCQkJCX0gZWxzZSBpZiAobG9jYWxfaW5mby5Jc0J5UmVmIHx8IGxvY2FsX2lu Zm8uVHlwZS5Jc0J5UmVmTGlrZSkgeworKwkJCQkJaWYgKGVjLkN1cnJlbnRBbm9ueW1vdXNNZXRo b2QgaXMgU3RhdGVNYWNoaW5lSW5pdGlhbGl6ZXIpIHsKKysJCQkJCQkvLyBJdCdzIHJlcG9ydGVk IGxhdGVyIGFzIDQwMTIvNDAxMworKwkJCQkJfSBlbHNlIHsKKysJCQkJCQllYy5SZXBvcnQuRXJy b3IgKDgxNzUsIGxvYywKKysJCQkJCQkJIkNhbm5vdCB1c2UgYnktcmVmZXJlbmNlIHZhcmlhYmxl IGB7MH0nIGluc2lkZSBhbiBhbm9ueW1vdXMgbWV0aG9kLCBsYW1iZGEgZXhwcmVzc2lvbiwgb3Ig cXVlcnkgZXhwcmVzc2lvbiIsCisrCQkJCQkJCUdldFNpZ25hdHVyZUZvckVycm9yICgpKTsKKysJ CQkJCX0KKyAJCQkJfQorIAorIAkJCQlpZiAoZWMuSXNWYXJpYWJsZUNhcHR1cmluZ1JlcXVpcmVk KSB7CitAQCAtNjc4Myw3ICs2ODE2LDkgQEAgbmFtZXNwYWNlIE1vbm8uQ1NoYXJwCisgCQkJCWxv Y2FsX2luZm8uU2V0SXNVc2VkICgpOworIAorIAkJCWlmIChsb2NhbF9pbmZvLklzUmVhZG9ubHkg JiYgIWVjLkhhc0FueSAoUmVzb2x2ZUNvbnRleHQuT3B0aW9ucy5GaWVsZEluaXRpYWxpemVyU2Nv cGUgfCBSZXNvbHZlQ29udGV4dC5PcHRpb25zLlVzaW5nSW5pdGlhbGl6ZXJTY29wZSkpIHsKKy0J CQkJaWYgKHJocyA9PSBFbXB0eUV4cHJlc3Npb24uTFZhbHVlTWVtYmVyQWNjZXNzKSB7CisrCQkJ CWlmIChsb2NhbF9pbmZvLklzQnlSZWYpIHsKKysJCQkJCS8vIE9LIGJlY2F1c2UgaXQgY2Fubm90 IGJlIHJlYXNzaWduZWQKKysJCQkJfSBlbHNlIGlmIChyaHMgPT0gRW1wdHlFeHByZXNzaW9uLkxW YWx1ZU1lbWJlckFjY2VzcykgeworIAkJCQkJLy8gQ1MxNjU0IGFscmVhZHkgcmVwb3J0ZWQKKyAJ CQkJfSBlbHNlIHsKKyAJCQkJCWludCBjb2RlOworQEAgLTcxNzUsOCArNzIxMCw3IEBAIG5hbWVz cGFjZSBNb25vLkNTaGFycAorIAkJeworIAkJCXZhciBzbiA9IGV4cHIgYXMgU2ltcGxlTmFtZTsK KyAJCQlpZiAoc24gIT0gbnVsbCAmJiBzbi5OYW1lID09ICJ2YXIiICYmIHNuLkFyaXR5ID09IDAg JiYgYXJndW1lbnRzPy5Db3VudCA+IDEpIHsKKy0JCQkJdmFyIHRhcmdldHMgPSBuZXcgTGlzdDxF eHByZXNzaW9uPiAoYXJndW1lbnRzLkNvdW50KTsKKy0JCQkJdmFyIHZhcmlhYmxlcyA9IG5ldyBM aXN0PExvY2FsVmFyaWFibGU+IChhcmd1bWVudHMuQ291bnQpOworKwkJCQl2YXIgdmFyaWFibGVz ID0gbmV3IExpc3Q8QmxvY2tWYXJpYWJsZT4gKGFyZ3VtZW50cy5Db3VudCk7CisgCQkJCWZvcmVh Y2ggKHZhciBhcmcgaW4gYXJndW1lbnRzKSB7CisgCQkJCQl2YXIgYXJnX3NuID0gYXJnLkV4cHIg YXMgU2ltcGxlTmFtZTsKKyAJCQkJCWlmIChhcmdfc24gPT0gbnVsbCB8fCBhcmdfc24uQXJpdHkg IT0gMCkgeworQEAgLTcxODYsMTIgKzcyMjAsMTAgQEAgbmFtZXNwYWNlIE1vbm8uQ1NoYXJwCisg CisgCQkJCQl2YXIgbHYgPSBuZXcgTG9jYWxWYXJpYWJsZSAocmMuQ3VycmVudEJsb2NrLCBhcmdf c24uTmFtZSwgYXJnLkV4cHIuTG9jYXRpb24pOworIAkJCQkJcmMuQ3VycmVudEJsb2NrLkFkZExv Y2FsTmFtZSAobHYpOworLQkJCQkJdmFyaWFibGVzLkFkZCAobHYpOworLQorLQkJCQkJdGFyZ2V0 cy5BZGQgKG5ldyBMb2NhbFZhcmlhYmxlUmVmZXJlbmNlIChsdiwgYXJnX3NuLkxvY2F0aW9uKSk7 CisrCQkJCQl2YXJpYWJsZXMuQWRkIChuZXcgQmxvY2tWYXJpYWJsZSAobmV3IFZhckV4cHIgKGx2 LkxvY2F0aW9uKSwgbHYpKTsKKyAJCQkJfQorIAorLQkJCQl2YXIgcmVzID0gbmV3IFR1cGxlRGVj b25zdHJ1Y3QgKHRhcmdldHMsIHZhcmlhYmxlcywgcmlnaHRfc2lkZSwgbG9jKTsKKysJCQkJdmFy IHJlcyA9IG5ldyBUdXBsZURlY29uc3RydWN0ICh2YXJpYWJsZXMsIHJpZ2h0X3NpZGUsIGxvYyk7 CisgCQkJCXJldHVybiByZXMuUmVzb2x2ZSAocmMpOworIAkJCX0KKyAKK0BAIC03MzA2LDE1ICs3 MzM4LDggQEAgbmFtZXNwYWNlIE1vbm8uQ1NoYXJwCisgCQkJCisgCQkJZWNsYXNzID0gRXhwckNs YXNzLlZhbHVlOworIAorLQkJCWlmICh0eXBlLktpbmQgPT0gTWVtYmVyS2luZC5CeVJlZikgewor LQkJCQlpZiAocmhzID09IG51bGwgJiYgYXJndW1lbnRzPy5Db250YWluc0VtaXRXaXRoQXdhaXQg KCkgPT0gdHJ1ZSkgeworLQkJCQkJZWMuUmVwb3J0LkVycm9yICg4MTc4LCBsb2MsICJgYXdhaXQn IGNhbm5vdCBiZSB1c2VkIGluIGFuIGV4cHJlc3Npb24gY29udGFpbmluZyBhIGNhbGwgdG8gYHsw fScgYmVjYXVzZSBpdCByZXR1cm5zIGJ5IHJlZmVyZW5jZSIsCistCQkJCQkJR2V0U2lnbmF0dXJl Rm9yRXJyb3IgKCkpOworLQkJCQl9CistCistCQkJCWlmIChyaHMgIT0gRW1wdHlFeHByZXNzaW9u Lk91dEFjY2VzcykKKy0JCQkJCXJldHVybiBCeVJlZkRlcmVmZXJlbmNlLkNyZWF0ZSAodGhpcyku UmVzb2x2ZSAoZWMpOworLQkJCX0KKysJCQlpZiAodHlwZS5LaW5kID09IE1lbWJlcktpbmQuQnlS ZWYgJiYgcmhzICE9IEVtcHR5RXhwcmVzc2lvbi5PdXRBY2Nlc3MpCisrCQkJCXJldHVybiBCeVJl ZkRlcmVmZXJlbmNlLkNyZWF0ZSAodGhpcykuUmVzb2x2ZSAoZWMpOworIAorIAkJCXJldHVybiB0 aGlzOworIAkJfQorQEAgLTkwMzQsNyArOTA1OSw3IEBAIG5hbWVzcGFjZSBNb25vLkNTaGFycAor IAkJCWlmIChlY2xhc3MgPT0gRXhwckNsYXNzLlVucmVzb2x2ZWQpCisgCQkJCVJlc29sdmVCYXNl IChlYyk7CisgCistCQkJaWYgKHR5cGUuSXNDbGFzcyB8fCB0eXBlLklzUmVhZE9ubHkpIHsKKysJ CQlpZiAodHlwZS5Jc0NsYXNzIHx8ICh0eXBlLklzUmVhZE9ubHkgJiYgIWVjLkhhc1NldCAoUmVz b2x2ZUNvbnRleHQuT3B0aW9ucy5Db25zdHJ1Y3RvclNjb3BlKSkpIHsKKyAJCQkJaWYgKHJpZ2h0 X3NpZGUgPT0gRW1wdHlFeHByZXNzaW9uLlVuYXJ5QWRkcmVzcykKKyAJCQkJCWVjLlJlcG9ydC5F cnJvciAoNDU5LCBsb2MsICJDYW5ub3QgdGFrZSB0aGUgYWRkcmVzcyBvZiBgdGhpcycgYmVjYXVz ZSBpdCBpcyByZWFkLW9ubHkiKTsKKyAJCQkJZWxzZSBpZiAocmlnaHRfc2lkZSA9PSBFbXB0eUV4 cHJlc3Npb24uT3V0QWNjZXNzKQorQEAgLTk5MDgsNyArOTkzMyw3IEBAIG5hbWVzcGFjZSBNb25v LkNTaGFycAorIAkJcHVibGljIHN0YXRpYyBib29sIElzVmFsaWREb3RFeHByZXNzaW9uIChUeXBl U3BlYyB0eXBlKQorIAkJeworIAkJCWNvbnN0IE1lbWJlcktpbmQgZG90X2tpbmRzID0gTWVtYmVy S2luZC5DbGFzcyB8IE1lbWJlcktpbmQuU3RydWN0IHwgTWVtYmVyS2luZC5EZWxlZ2F0ZSB8IE1l bWJlcktpbmQuRW51bSB8CistCQkJCU1lbWJlcktpbmQuSW50ZXJmYWNlIHwgTWVtYmVyS2luZC5U eXBlUGFyYW1ldGVyIHwgTWVtYmVyS2luZC5BcnJheVR5cGU7CisrCQkJCU1lbWJlcktpbmQuSW50 ZXJmYWNlIHwgTWVtYmVyS2luZC5UeXBlUGFyYW1ldGVyIHwgTWVtYmVyS2luZC5BcnJheVR5cGUg IHwgTWVtYmVyS2luZC5CeVJlZjsKKyAKKyAJCQlyZXR1cm4gKHR5cGUuS2luZCAmIGRvdF9raW5k cykgIT0gMCB8fCB0eXBlLkJ1aWx0aW5UeXBlID09IEJ1aWx0aW5UeXBlU3BlYy5UeXBlLkR5bmFt aWM7CisgCQl9CitAQCAtMTE2MTQsNyArMTE2MzksNyBAQCBuYW1lc3BhY2UgTW9uby5DU2hhcnAK KyAJCQl9CisgCisgCQkJaWYgKHNpbmdsZV9zcGVjICE9IG51bGwgJiYgc2luZ2xlX3NwZWMuRGlt ZW5zaW9uID4gMCkgeworLQkJCQlpZiAodHlwZS5Jc1NwZWNpYWxSdW50aW1lVHlwZSkgeworKwkJ CQlpZiAodHlwZS5Jc1NwZWNpYWxSdW50aW1lVHlwZSB8fCB0eXBlLklzQnlSZWZMaWtlKSB7Cisg CQkJCQllYy5Nb2R1bGUuQ29tcGlsZXIuUmVwb3J0LkVycm9yICg2MTEsIGxvYywgIkFycmF5IGVs ZW1lbnRzIGNhbm5vdCBiZSBvZiB0eXBlIGB7MH0nIiwgdHlwZS5HZXRTaWduYXR1cmVGb3JFcnJv ciAoKSk7CisgCQkJCX0gZWxzZSBpZiAodHlwZS5Jc1N0YXRpYykgeworIAkJCQkJZWMuTW9kdWxl LkNvbXBpbGVyLlJlcG9ydC5TeW1ib2xSZWxhdGVkVG9QcmV2aW91c0Vycm9yICh0eXBlKTsKK0BA IC0xMTY1MCw2ICsxMTY3NSwxMyBAQCBuYW1lc3BhY2UgTW9uby5DU2hhcnAKKyAJY2xhc3MgUmVm ZXJlbmNlVHlwZUV4cHIgOiBUeXBlRXhwcgorIAl7CisgCQlGdWxsTmFtZWRFeHByZXNzaW9uIGVs ZW1lbnQ7CisrCQlyZWFkb25seSBib29sIHJlYWRPbmx5OworKworKwkJcHVibGljIFJlZmVyZW5j ZVR5cGVFeHByIChGdWxsTmFtZWRFeHByZXNzaW9uIGVsZW1lbnQsIGJvb2wgcmVhZE9ubHksIExv Y2F0aW9uIGxvYykKKysJCQk6IHRoaXMgKGVsZW1lbnQsIGxvYykKKysJCXsKKysJCQl0aGlzLnJl YWRPbmx5ID0gcmVhZE9ubHk7CisrCQl9CisgCisgCQlwdWJsaWMgUmVmZXJlbmNlVHlwZUV4cHIg KEZ1bGxOYW1lZEV4cHJlc3Npb24gZWxlbWVudCwgTG9jYXRpb24gbG9jKQorIAkJeworQEAgLTEx NjY0LDE0ICsxMTY5NiwxNyBAQCBuYW1lc3BhY2UgTW9uby5DU2hhcnAKKyAJCQkJcmV0dXJuIG51 bGw7CisgCisgCQkJZWNsYXNzID0gRXhwckNsYXNzLlR5cGU7CistCQkJdHlwZSA9IFJlZmVyZW5j ZUNvbnRhaW5lci5NYWtlVHlwZSAobWMuTW9kdWxlLCB0eXBlKTsKKysJCQl0eXBlID0gcmVhZE9u bHkgPworKwkJCQlSZWFkT25seVJlZmVyZW5jZUNvbnRhaW5lci5NYWtlVHlwZSAobWMuTW9kdWxl LCB0eXBlKSA6CisrCQkJCVJlZmVyZW5jZUNvbnRhaW5lci5NYWtlVHlwZSAobWMuTW9kdWxlLCB0 eXBlKTsKKyAKKyAJCQlyZXR1cm4gdHlwZTsKKyAJCX0KKyAKKyAJCXB1YmxpYyBvdmVycmlkZSBz dHJpbmcgR2V0U2lnbmF0dXJlRm9yRXJyb3IgKCkKKyAJCXsKKy0JCQlyZXR1cm4gInJlZiAiICsg ZWxlbWVudC5HZXRTaWduYXR1cmVGb3JFcnJvciAoKTsKKysJCQl2YXIgcHJlZml4ID0gcmVhZE9u bHkgPyAicmVmICIgOiAicmVmIHJlYWRvbmx5ICI7CisrCQkJcmV0dXJuIHByZWZpeCArIGVsZW1l bnQuR2V0U2lnbmF0dXJlRm9yRXJyb3IgKCk7CisgCQl9CisgCisgCQlwdWJsaWMgb3ZlcnJpZGUg b2JqZWN0IEFjY2VwdCAoU3RydWN0dXJhbFZpc2l0b3IgdmlzaXRvcikKK0BAIC0xMTc4Myw2ICsx MTgxOCw3IEBAIG5hbWVzcGFjZSBNb25vLkNTaGFycAorIAkJVHlwZVNwZWMgb3R5cGU7CisgCQlF eHByZXNzaW9uIHRleHByOworIAkJRXhwcmVzc2lvbiBjb3VudDsKKysJCU1ldGhvZFNwZWMgY3Rv cjsKKyAJCQorIAkJcHVibGljIFN0YWNrQWxsb2MgKEV4cHJlc3Npb24gdHlwZSwgRXhwcmVzc2lv biBjb3VudCwgTG9jYXRpb24gbCkKKyAJCXsKK0BAIC0xMTg1Miw2ICsxMTg4OCwxMSBAQCBuYW1l c3BhY2UgTW9uby5DU2hhcnAKKyAJCQlpbnQgc2l6ZSA9IEJ1aWx0aW5UeXBlU3BlYy5HZXRTaXpl IChvdHlwZSk7CisgCisgCQkJY291bnQuRW1pdCAoZWMpOworKwkJCWJvb2wgY291bnRfb25fc3Rh Y2sgPSBmYWxzZTsKKysJCQlpZiAoY3RvciAhPSBudWxsICYmICFFeHByZXNzaW9uQW5hbHl6ZXIu SXNJbmV4cGVuc2l2ZUxvYWQgKGNvdW50KSkgeworKwkJCQllYy5FbWl0IChPcENvZGVzLkR1cCk7 CisrCQkJCWNvdW50X29uX3N0YWNrID0gdHJ1ZTsKKysJCQl9CisgCisgCQkJaWYgKHNpemUgPT0g MCkKKyAJCQkJZWMuRW1pdCAoT3BDb2Rlcy5TaXplb2YsIG90eXBlKTsKK0BAIC0xMTg2MCw2ICsx MTkwMSwxOSBAQCBuYW1lc3BhY2UgTW9uby5DU2hhcnAKKyAKKyAJCQllYy5FbWl0IChPcENvZGVz Lk11bF9PdmZfVW4pOworIAkJCWVjLkVtaXQgKE9wQ29kZXMuTG9jYWxsb2MpOworKworKwkJCWlm IChjdG9yICE9IG51bGwpIHsKKysJCQkJaWYgKCFjb3VudF9vbl9zdGFjaykKKysJCQkJCWNvdW50 LkVtaXQgKGVjKTsKKysJCQkJZWMuRW1pdCAoT3BDb2Rlcy5OZXdvYmosIGN0b3IpOworKwkJCX0K KysJCX0KKysKKysJCXB1YmxpYyBvdmVycmlkZSB2b2lkIEVycm9yX1ZhbHVlQ2Fubm90QmVDb252 ZXJ0ZWQgKFJlc29sdmVDb250ZXh0IHJjLCBUeXBlU3BlYyB0YXJnZXQsIGJvb2wgZXhwbCkKKysJ CXsKKysJCQl2YXIgZXR5cGUgPSAoKFBvaW50ZXJDb250YWluZXIpdHlwZSkuRWxlbWVudDsKKysJ CQlyYy5SZXBvcnQuRXJyb3IgKDgzNDYsIGxvYywgIkNhbm5vdCBjb252ZXJ0IGEgc3RhY2thbGxv YyBleHByZXNzaW9uIG9mIHR5cGUgYHswfScgdG8gdHlwZSBgezF9JyIsCisrCQkJICAgICAgICAg ICAgICAgICBldHlwZS5HZXRTaWduYXR1cmVGb3JFcnJvciAoKSwgdGFyZ2V0LkdldFNpZ25hdHVy ZUZvckVycm9yICgpKTsKKyAJCX0KKyAKKyAJCXByb3RlY3RlZCBvdmVycmlkZSB2b2lkIENsb25l VG8gKENsb25lQ29udGV4dCBjbG9uZWN0eCwgRXhwcmVzc2lvbiB0KQorQEAgLTExODczLDYgKzEx OTI3LDE2IEBAIG5hbWVzcGFjZSBNb25vLkNTaGFycAorIAkJeworIAkJCXJldHVybiB2aXNpdG9y LlZpc2l0ICh0aGlzKTsKKyAJCX0KKysKKysJCXB1YmxpYyBib29sIFJlc29sdmVTcGFuQ29udmVy c2lvbiAoUmVzb2x2ZUNvbnRleHQgcmMsIFR5cGVTcGVjIHNwYW5UeXBlKQorKwkJeworKwkJCWN0 b3IgPSBNZW1iZXJDYWNoZS5GaW5kTWVtYmVyIChzcGFuVHlwZSwgTWVtYmVyRmlsdGVyLkNvbnN0 cnVjdG9yIChQYXJhbWV0ZXJzQ29tcGlsZWQuQ3JlYXRlRnVsbHlSZXNvbHZlZCAoUG9pbnRlckNv bnRhaW5lci5NYWtlVHlwZSAocmMuTW9kdWxlLCByYy5Nb2R1bGUuQ29tcGlsZXIuQnVpbHRpblR5 cGVzLlZvaWQpLCByYy5Nb2R1bGUuQ29tcGlsZXIuQnVpbHRpblR5cGVzLkludCkpLCBCaW5kaW5n UmVzdHJpY3Rpb24uRGVjbGFyZWRPbmx5KSBhcyBNZXRob2RTcGVjOworKwkJCWlmIChjdG9yID09 IG51bGwpCisrCQkJCXJldHVybiBmYWxzZTsKKysJCQkKKysJCQl0aGlzLnR5cGUgPSBzcGFuVHlw ZTsKKysJCQlyZXR1cm4gdHJ1ZTsKKysJCX0KKyAJfQorIAorIAkvLworQEAgLTEzMDkzLDYgKzEz MTU3LDEyIEBAIG5hbWVzcGFjZSBNb25vLkNTaGFycAorIAkJCWV4cHIuRW1pdCAoZWMpOworIAkJ fQorIAorKwkJcHVibGljIG92ZXJyaWRlIEV4cHJlc3Npb24gQ3JlYXRlRXhwcmVzc2lvblRyZWUg KFJlc29sdmVDb250ZXh0IHJjKQorKwkJeworKwkJCXJjLlJlcG9ydC5FcnJvciAoODE1MywgTG9j YXRpb24sICJBbiBleHByZXNzaW9uIHRyZWUgbGFtYmRhIGNhbm5vdCBjb250YWluIGEgY2FsbCB0 byBhIG1ldGhvZCwgcHJvcGVydHksIG9yIGluZGV4ZXIgdGhhdCByZXR1cm5zIGJ5IHJlZmVyZW5j ZSIpOworKwkJCXJldHVybiBudWxsOworKwkJfQorKworIAkJcHVibGljIHZvaWQgRW1pdCAoRW1p dENvbnRleHQgZWMsIGJvb2wgbGVhdmVfY29weSkKKyAJCXsKKyAJCQlFbWl0IChlYyk7CitAQCAt MTMxMzMsNiArMTMyMDMsMTEgQEAgbmFtZXNwYWNlIE1vbm8uQ1NoYXJwCisgCisgCQlwdWJsaWMg b3ZlcnJpZGUgRXhwcmVzc2lvbiBEb1Jlc29sdmVMVmFsdWUgKFJlc29sdmVDb250ZXh0IHJjLCBF eHByZXNzaW9uIHJpZ2h0X3NpZGUpCisgCQl7CisrCQkJaWYgKGV4cHIuQ29udGFpbnNFbWl0V2l0 aEF3YWl0ICgpKSB7CisrCQkJCXJjLlJlcG9ydC5FcnJvciAoODE3OCwgbG9jLCAiYGF3YWl0JyBj YW5ub3QgYmUgdXNlZCBpbiBhbiBleHByZXNzaW9uIGNvbnRhaW5pbmcgYSBjYWxsIHRvIGB7MH0n IGJlY2F1c2UgaXQgcmV0dXJucyBieSByZWZlcmVuY2UiLAorKwkJCQkJZXhwci5HZXRTaWduYXR1 cmVGb3JFcnJvciAoKSk7CisrCQkJfQorKworIAkJCXJldHVybiBEb1Jlc29sdmUgKHJjKTsKKyAJ CX0KKyAKK0BAIC0xMzE0OSw0ICsxMzIyNCw5OCBAQCBuYW1lc3BhY2UgTW9uby5DU2hhcnAKKyAJ CQlyZXR1cm4gdmlzaXRvci5WaXNpdCAodGhpcyk7CisgCQl9CisgCX0KKysKKysJY2xhc3MgRGVm YXVsdExpdGVyYWxFeHByZXNzaW9uIDogRXhwcmVzc2lvbgorKwl7CisrCQlwdWJsaWMgRGVmYXVs dExpdGVyYWxFeHByZXNzaW9uIChMb2NhdGlvbiBsb2MpCisrCQl7CisrCQkJdGhpcy5sb2MgPSBs b2M7CisrCQl9CisrCisrCQlwdWJsaWMgb3ZlcnJpZGUgRXhwcmVzc2lvbiBDcmVhdGVFeHByZXNz aW9uVHJlZSAoUmVzb2x2ZUNvbnRleHQgZWMpCisrCQl7CisrCQkJdGhyb3cgbmV3IE5vdEltcGxl bWVudGVkRXhjZXB0aW9uICgpOworKwkJfQorKworKwkJcHJvdGVjdGVkIG92ZXJyaWRlIEV4cHJl c3Npb24gRG9SZXNvbHZlIChSZXNvbHZlQ29udGV4dCByYykKKysJCXsKKysJCQl0eXBlID0gSW50 ZXJuYWxUeXBlLkRlZmF1bHRUeXBlOworKwkJCWVjbGFzcyA9IEV4cHJDbGFzcy5WYWx1ZTsKKysJ CQlyZXR1cm4gdGhpczsKKysJCX0KKysKKysJCXB1YmxpYyBvdmVycmlkZSB2b2lkIEVtaXQgKEVt aXRDb250ZXh0IGVjKQorKwkJeworKwkJCXRocm93IG5ldyBOb3RTdXBwb3J0ZWRFeGNlcHRpb24g KCk7CisrCQl9CisrCX0KKysKKysJY2xhc3MgRGlzY2FyZCA6IEV4cHJlc3Npb24sIElBc3NpZ25N ZXRob2QsIElNZW1vcnlMb2NhdGlvbgorKwl7CisrCQlwdWJsaWMgRGlzY2FyZCAoTG9jYXRpb24g bG9jKQorKwkJeworKwkJCXRoaXMubG9jID0gbG9jOworKwkJfQorKworKwkJcHVibGljIG92ZXJy aWRlIEV4cHJlc3Npb24gQ3JlYXRlRXhwcmVzc2lvblRyZWUgKFJlc29sdmVDb250ZXh0IHJjKQor KwkJeworKwkJCXJjLlJlcG9ydC5FcnJvciAoODIwNywgbG9jLCAiQW4gZXhwcmVzc2lvbiB0cmVl IGNhbm5vdCBjb250YWluIGEgZGlzY2FyZCIpOworKwkJCXJldHVybiBudWxsOworKwkJfQorKwor KwkJcHJvdGVjdGVkIG92ZXJyaWRlIEV4cHJlc3Npb24gRG9SZXNvbHZlIChSZXNvbHZlQ29udGV4 dCByYykKKysJCXsKKysJCQl0eXBlID0gSW50ZXJuYWxUeXBlLkRpc2NhcmQ7CisrCQkJZWNsYXNz ID0gRXhwckNsYXNzLlZhcmlhYmxlOworKwkJCXJldHVybiB0aGlzOworKwkJfQorKworKwkJcHVi bGljIG92ZXJyaWRlIEV4cHJlc3Npb24gRG9SZXNvbHZlTFZhbHVlIChSZXNvbHZlQ29udGV4dCBy YywgRXhwcmVzc2lvbiByaWdodF9zaWRlKQorKwkJeworKwkJCWlmIChyaWdodF9zaWRlLlR5cGUg PT0gSW50ZXJuYWxUeXBlLkRlZmF1bHRUeXBlKSB7CisrCQkJCXJjLlJlcG9ydC5FcnJvciAoODE4 MywgbG9jLCAiQ2Fubm90IGluZmVyIHRoZSB0eXBlIG9mIGltcGxpY2l0bHktdHlwZWQgZGlzY2Fy ZCIpOworKwkJCQl0eXBlID0gSW50ZXJuYWxUeXBlLkVycm9yVHlwZTsKKysJCQkJcmV0dXJuIHRo aXM7CisrCQkJfQorKworKwkJCWlmIChyaWdodF9zaWRlLlR5cGUuS2luZCA9PSBNZW1iZXJLaW5k LlZvaWQpIHsKKysJCQkJcmMuUmVwb3J0LkVycm9yICg4MjA5LCBsb2MsICJDYW5ub3QgYXNzaWdu IHZvaWQgdG8gYSBkaXNjYXJkIik7CisrCQkJCXR5cGUgPSBJbnRlcm5hbFR5cGUuRXJyb3JUeXBl OworKwkJCQlyZXR1cm4gdGhpczsKKysJCQl9CisrCisrCQkJaWYgKHJpZ2h0X3NpZGUgIT0gRW1w dHlFeHByZXNzaW9uLk91dEFjY2VzcykgeworKwkJCQl0eXBlID0gcmlnaHRfc2lkZS5UeXBlOwor KwkJCX0KKysKKysJCQlyZXR1cm4gdGhpczsKKysJCX0KKysKKysJCXB1YmxpYyBvdmVycmlkZSB2 b2lkIEVtaXQgKEVtaXRDb250ZXh0IGVjKQorKwkJeworKwkJCXRocm93IG5ldyBOb3RJbXBsZW1l bnRlZEV4Y2VwdGlvbiAoKTsKKysJCX0KKysKKysJCXB1YmxpYyB2b2lkIEVtaXQgKEVtaXRDb250 ZXh0IGVjLCBib29sIGxlYXZlX2NvcHkpCisrCQl7CisrCQkJdGhyb3cgbmV3IE5vdEltcGxlbWVu dGVkRXhjZXB0aW9uICgpOworKwkJfQorKworKwkJcHVibGljIHZvaWQgRW1pdEFzc2lnbiAoRW1p dENvbnRleHQgZWMsIEV4cHJlc3Npb24gc291cmNlLCBib29sIGxlYXZlX2NvcHksIGJvb2wgaXND b21wb3VuZCkKKysJCXsKKysJCQlpZiAobGVhdmVfY29weSkKKysJCQkJc291cmNlLkVtaXQgKGVj KTsKKysJCQllbHNlCisrCQkJCXNvdXJjZS5FbWl0U2lkZUVmZmVjdCAoZWMpOworKwkJfQorKwor KwkJcHVibGljIHZvaWQgQWRkcmVzc09mIChFbWl0Q29udGV4dCBlYywgQWRkcmVzc09wIG1vZGUp CisrCQl7CisrCQkJdmFyIHRlbXAgPSBlYy5HZXRUZW1wb3JhcnlMb2NhbCAodHlwZSk7CisrCQkJ ZWMuRW1pdCAoT3BDb2Rlcy5MZGxvY2EsIHRlbXApOworKworKwkJCS8vIFRPRE86IFNob3VsZCBm cmVlIGl0IG9uIG5leHQgc3RhdGVtZW50IGJ1dCBkb24ndCBoYXZlIG1lY2hhbmlzbSBmb3IgdGhh dCB5ZXQKKysJCQkvLyBlYy5GcmVlVGVtcG9yYXJ5TG9jYWwgKHRlbXAsIHR5cGUpOworKwkJfQor Kwl9CisgfQorZGlmZiAtLWdpdCBhL21jcy9tY3MvZ2VuZXJpYy5jcyBiL21jcy9tY3MvZ2VuZXJp Yy5jcworaW5kZXggNjI1Y2QwYzc3M2YuLmVjMjk2NWRmNjNiIDEwMDY0NAorLS0tIGEvbWNzL21j cy9nZW5lcmljLmNzCisrKysgYi9tY3MvbWNzL2dlbmVyaWMuY3MKK0BAIC02OTMsNiArNjkzLDEx IEBAIG5hbWVzcGFjZSBNb25vLkNTaGFycCB7CisgCQkJCQlHZXRTaWduYXR1cmVGb3JFcnJvciAo KSwgbWMuR2V0U2lnbmF0dXJlRm9yRXJyb3IgKCksIGlucHV0X3ZhcmlhbmNlLCBndHlwZV92YXJp YW5jZSwgcGFyYW1ldGVycyk7CisgCQl9CisgCisrCQlwdWJsaWMgVHlwZVNwZWMgR2V0QXN5bmNN ZXRob2RCdWlsZGVyICgpCisrCQl7CisrCQkJcmV0dXJuIG51bGw7CisrCQl9CisrCisgCQlwdWJs aWMgVHlwZVNwZWMgR2V0QXR0cmlidXRlQ29DbGFzcyAoKQorIAkJeworIAkJCXJldHVybiBudWxs OworQEAgLTIyOTIsNyArMjI5Nyw3IEBAIG5hbWVzcGFjZSBNb25vLkNTaGFycCB7CisgCQkJCQlv ayA9IGZhbHNlOworIAkJCQl9CisgCistCQkJCWlmICh0ZS5Jc1BvaW50ZXIgfHwgdGUuSXNTcGVj aWFsUnVudGltZVR5cGUpIHsKKysJCQkJaWYgKHRlLklzUG9pbnRlciB8fCB0ZS5Jc1NwZWNpYWxS dW50aW1lVHlwZSB8fCB0ZS5Jc0J5UmVmTGlrZSkgeworIAkJCQkJZWMuTW9kdWxlLkNvbXBpbGVy LlJlcG9ydC5FcnJvciAoMzA2LCBhcmdzW2ldLkxvY2F0aW9uLAorIAkJCQkJCSJUaGUgdHlwZSBg ezB9JyBtYXkgbm90IGJlIHVzZWQgYXMgYSB0eXBlIGFyZ3VtZW50IiwKKyAJCQkJCQl0ZS5HZXRT aWduYXR1cmVGb3JFcnJvciAoKSk7CitAQCAtMzEwMiw3ICszMTA3LDcgQEAgbmFtZXNwYWNlIE1v bm8uQ1NoYXJwIHsKKyAJCQkvLworIAkJCS8vIFNvbWUgdHlwZXMgY2Fubm90IGJlIHVzZWQgYXMg dHlwZSBhcmd1bWVudHMKKyAJCQkvLworLQkJCWlmICgoYm91bmQuVHlwZS5LaW5kID09IE1lbWJl cktpbmQuVm9pZCAmJiAhdm9pZEFsbG93ZWQpIHx8IGJvdW5kLlR5cGUuSXNQb2ludGVyIHx8IGJv dW5kLlR5cGUuSXNTcGVjaWFsUnVudGltZVR5cGUgfHwKKysJCQlpZiAoKGJvdW5kLlR5cGUuS2lu ZCA9PSBNZW1iZXJLaW5kLlZvaWQgJiYgIXZvaWRBbGxvd2VkKSB8fCBib3VuZC5UeXBlLklzUG9p bnRlciB8fCBib3VuZC5UeXBlLklzU3BlY2lhbFJ1bnRpbWVUeXBlIHx8IGJvdW5kLlR5cGUuSXNC eVJlZkxpa2UgfHwKKyAJCQkgICAgYm91bmQuVHlwZSA9PSBJbnRlcm5hbFR5cGUuTWV0aG9kR3Jv dXAgfHwgYm91bmQuVHlwZSA9PSBJbnRlcm5hbFR5cGUuQW5vbnltb3VzTWV0aG9kIHx8IGJvdW5k LlR5cGUgPT0gSW50ZXJuYWxUeXBlLlZhck91dFR5cGUgfHwKKyAJCQkgICAgYm91bmQuVHlwZSA9 PSBJbnRlcm5hbFR5cGUuVGhyb3dFeHByKQorIAkJCQlyZXR1cm47CitAQCAtMzExMCw2ICszMTE1 LDkgQEAgbmFtZXNwYWNlIE1vbm8uQ1NoYXJwIHsKKyAJCQlpZiAoYm91bmQuVHlwZS5Jc1R1cGxl VHlwZSAmJiBUdXBsZUxpdGVyYWwuQ29udGFpbnNOb1R5cGVFbGVtZW50IChib3VuZC5UeXBlKSkK KyAJCQkJcmV0dXJuOworIAorKwkJCWlmIChib3VuZC5UeXBlID09IEludGVybmFsVHlwZS5EZWZh dWx0VHlwZSkKKysJCQkJcmV0dXJuOworKworIAkJCXZhciBhID0gYm91bmRzIFtpbmRleF07Cisg CQkJaWYgKGEgPT0gbnVsbCkgeworIAkJCQlhID0gbmV3IExpc3Q8Qm91bmRJbmZvPiAoMik7Citk aWZmIC0tZ2l0IGEvbWNzL21jcy9pbXBvcnQuY3MgYi9tY3MvbWNzL2ltcG9ydC5jcworaW5kZXgg MWNkZGY3YzAxZjQuLmY3YzRmZDc0YjA4IDEwMDY0NAorLS0tIGEvbWNzL21jcy9pbXBvcnQuY3MK KysrKyBiL21jcy9tY3MvaW1wb3J0LmNzCitAQCAtOTc1LDYgKzk3NSwxMCBAQCBuYW1lc3BhY2Ug TW9uby5DU2hhcnAKKyAJCQkJCQltb2QgfD0gTW9kaWZpZXJzLlJFQURPTkxZOworIAkJCQkJfQor IAorKwkJCQkJaWYgKEhhc0F0dHJpYnV0ZSAoQ3VzdG9tQXR0cmlidXRlRGF0YS5HZXRDdXN0b21B dHRyaWJ1dGVzICh0eXBlKSwgIklzQnlSZWZMaWtlQXR0cmlidXRlIiwgQ29tcGlsZXJTZXJ2aWNl c05hbWVzcGFjZSkpIHsKKysJCQkJCQltb2QgfD0gTW9kaWZpZXJzLlJFRjsKKysJCQkJCX0KKysK KyAJCQkJCWJyZWFrOworIAkJCQl9CisgCQkJfQorQEAgLTE0MDEsNiArMTQwNSw3IEBAIG5hbWVz cGFjZSBNb25vLkNTaGFycAorIAkJCXB1YmxpYyBzdHJpbmcgRGVmYXVsdEluZGV4ZXJOYW1lOwor IAkJCXB1YmxpYyBib29sPyBDTFNBdHRyaWJ1dGVWYWx1ZTsKKyAJCQlwdWJsaWMgVHlwZVNwZWMg Q29DbGFzczsKKysJCQlwdWJsaWMgVHlwZVNwZWMgQXN5bmNNZXRob2RCdWlsZGVyOworIAorIAkJ CXN0YXRpYyBib29sIEhhc01pc3NpbmdUeXBlIChDb25zdHJ1Y3RvckluZm8gY3RvcikKKyAJCQl7 CitAQCAtMTUyMiw2ICsxNTI3LDIwIEBAIG5hbWVzcGFjZSBNb25vLkNTaGFycAorIAkJCQkJCQli YWcuQ29DbGFzcyA9IGltcG9ydGVyLkltcG9ydFR5cGUgKChNZXRhVHlwZSkgYS5Db25zdHJ1Y3Rv ckFyZ3VtZW50c1swXS5WYWx1ZSk7CisgCQkJCQkJCWNvbnRpbnVlOworIAkJCQkJCX0KKysKKysJ CQkJCQlpZiAobmFtZSA9PSAiQXN5bmNNZXRob2RCdWlsZGVyQXR0cmlidXRlIikgeworKwkJCQkJ CQlpZiAoZHQuTmFtZXNwYWNlICE9ICJTeXN0ZW0uUnVudGltZS5Db21waWxlclNlcnZpY2VzIikK KysJCQkJCQkJCWNvbnRpbnVlOworKworKwkJCQkJCQlpZiAoSGFzTWlzc2luZ1R5cGUgKGEuQ29u c3RydWN0b3IpKQorKwkJCQkJCQkJY29udGludWU7CisrCisrCQkJCQkJCWlmIChiYWcgPT0gbnVs bCkKKysJCQkJCQkJCWJhZyA9IG5ldyBBdHRyaWJ1dGVzQmFnICgpOworKworKwkJCQkJCQliYWcu QXN5bmNNZXRob2RCdWlsZGVyID0gaW1wb3J0ZXIuSW1wb3J0VHlwZSAoKE1ldGFUeXBlKWEuQ29u c3RydWN0b3JBcmd1bWVudHMgWzBdLlZhbHVlKTsKKysJCQkJCQkJY29udGludWU7CisrCQkJCQkJ fQorIAkJCQkJfQorIAkJCQl9CisgCitAQCAtMjEyOSw2ICsyMTQ4LDE0IEBAIG5hbWVzcGFjZSBN b25vLkNTaGFycAorIAkJCX0KKyAJCX0KKyAKKysJCXB1YmxpYyBUeXBlU3BlYyBHZXRBc3luY01l dGhvZEJ1aWxkZXIgKCkKKysJCXsKKysJCQlpZiAoY2F0dHJzID09IG51bGwpCisrCQkJCVJlYWRB dHRyaWJ1dGVzICgpOworKworKwkJCXJldHVybiBjYXR0cnMuQXN5bmNNZXRob2RCdWlsZGVyOwor KwkJfQorKworIAkJcHVibGljIFR5cGVTcGVjIEdldEF0dHJpYnV0ZUNvQ2xhc3MgKCkKKyAJCXsK KyAJCQlpZiAoY2F0dHJzID09IG51bGwpCitAQCAtMjQ0NSw2ICsyNDcyLDExIEBAIG5hbWVzcGFj ZSBNb25vLkNTaGFycAorIAorIAkJI2VuZHJlZ2lvbgorIAorKwkJcHVibGljIFR5cGVTcGVjIEdl dEFzeW5jTWV0aG9kQnVpbGRlciAoKQorKwkJeworKwkJCXJldHVybiBudWxsOworKwkJfQorKwor IAkJcHVibGljIFR5cGVTcGVjIEdldEF0dHJpYnV0ZUNvQ2xhc3MgKCkKKyAJCXsKKyAJCQlyZXR1 cm4gbnVsbDsKK2RpZmYgLS1naXQgYS9tY3MvbWNzL21lbWJlcmNhY2hlLmNzIGIvbWNzL21jcy9t ZW1iZXJjYWNoZS5jcworaW5kZXggZWViZjcxYjg0NGIuLmNhMDVkMmQ3YWZjIDEwMDY0NAorLS0t IGEvbWNzL21jcy9tZW1iZXJjYWNoZS5jcworKysrIGIvbWNzL21jcy9tZW1iZXJjYWNoZS5jcwor QEAgLTMwOSw3ICszMDksNiBAQCBuYW1lc3BhY2UgTW9uby5DU2hhcnAgeworIAkJCQkvLworIAkJ CQlpZiAoIUJ1aWx0aW5UeXBlU3BlYy5Jc1ByaW1pdGl2ZVR5cGUgKGR0KSB8fCBkdC5CdWlsdGlu VHlwZSA9PSBCdWlsdGluVHlwZVNwZWMuVHlwZS5DaGFyKSB7CisgCQkJCQlzd2l0Y2ggKGR0LkJ1 aWx0aW5UeXBlKSB7CistCQkJCQljYXNlIEJ1aWx0aW5UeXBlU3BlYy5UeXBlLlN0cmluZzoKKyAJ CQkJCWNhc2UgQnVpbHRpblR5cGVTcGVjLlR5cGUuRGVsZWdhdGU6CisgCQkJCQljYXNlIEJ1aWx0 aW5UeXBlU3BlYy5UeXBlLk11bHRpY2FzdERlbGVnYXRlOgorIAkJCQkJCWJyZWFrOworQEAgLTMx Nyw2ICszMTYsOSBAQCBuYW1lc3BhY2UgTW9uby5DU2hhcnAgeworIAkJCQkJCWlmIChuYW1lID09 IE9wZXJhdG9yLkdldE1ldGFkYXRhTmFtZSAoT3BlcmF0b3IuT3BUeXBlLkltcGxpY2l0KSB8fCBu YW1lID09IE9wZXJhdG9yLkdldE1ldGFkYXRhTmFtZSAoT3BlcmF0b3IuT3BUeXBlLkV4cGxpY2l0 KSkgeworIAkJCQkJCQlzdGF0ZSB8PSBTdGF0ZUZsYWdzLkhhc0NvbnZlcnNpb25PcGVyYXRvcjsK KyAJCQkJCQl9IGVsc2UgeworKwkJCQkJCQlpZiAoZHQuQnVpbHRpblR5cGUgPT0gQnVpbHRpblR5 cGVTcGVjLlR5cGUuU3RyaW5nKQorKwkJCQkJCQkJYnJlYWs7CisrCisgCQkJCQkJCXN0YXRlIHw9 IFN0YXRlRmxhZ3MuSGFzVXNlck9wZXJhdG9yOworIAkJCQkJCX0KKyAKK2RpZmYgLS1naXQgYS9t Y3MvbWNzL21ldGhvZC5jcyBiL21jcy9tY3MvbWV0aG9kLmNzCitpbmRleCBjY2Q0ODk4ZTkxYy4u MWZjYTEwZGQ2ZDAgMTAwNjQ0CistLS0gYS9tY3MvbWNzL21ldGhvZC5jcworKysrIGIvbWNzL21j cy9tZXRob2QuY3MKK0BAIC03MDEsNiArNzAxLDEwIEBAIG5hbWVzcGFjZSBNb25vLkNTaGFycCB7 CisgCQkJaWYgKE1lbWJlclR5cGUuSXNTdGF0aWMpIHsKKyAJCQkJRXJyb3JfU3RhdGljUmV0dXJu VHlwZSAoKTsKKyAJCQl9CisrCisrCQkJaWYgKE1lbWJlclR5cGUuSXNTcGVjaWFsUnVudGltZVR5 cGUgJiYgQ29tcGlsZXIuU2V0dGluZ3MuU3RkTGliKSB7CisrCQkJCUVycm9yX1JldHVyblR5cGVD YW50QmVSZWZBbnkgKExvY2F0aW9uLCBSZXR1cm5UeXBlLCBSZXBvcnQpOworKwkJCX0KKyAJCX0K KyAKKyAJCXB1YmxpYyBvdmVycmlkZSB2b2lkIEVtaXQgKCkKK0BAIC03MTYsNiArNzIwLDggQEAg bmFtZXNwYWNlIE1vbm8uQ1NoYXJwIHsKKyAJCQkJTW9kdWxlLlByZWRlZmluZWRBdHRyaWJ1dGVz LkR5bmFtaWMuRW1pdEF0dHJpYnV0ZSAoQ3JlYXRlUmV0dXJuQnVpbGRlciAoKS5CdWlsZGVyKTsK KyAJCQl9IGVsc2UgaWYgKFJldHVyblR5cGUuSGFzRHluYW1pY0VsZW1lbnQpIHsKKyAJCQkJTW9k dWxlLlByZWRlZmluZWRBdHRyaWJ1dGVzLkR5bmFtaWMuRW1pdEF0dHJpYnV0ZSAoQ3JlYXRlUmV0 dXJuQnVpbGRlciAoKS5CdWlsZGVyLCBSZXR1cm5UeXBlLCBMb2NhdGlvbik7CisrCQkJfSBlbHNl IGlmIChSZXR1cm5UeXBlIGlzIFJlYWRPbmx5UmVmZXJlbmNlQ29udGFpbmVyKSB7CisrCQkJCU1v ZHVsZS5QcmVkZWZpbmVkQXR0cmlidXRlcy5Jc1JlYWRPbmx5LkVtaXRBdHRyaWJ1dGUgKENyZWF0 ZVJldHVybkJ1aWxkZXIgKCkuQnVpbGRlcik7CisgCQkJfQorIAorIAkJCWlmIChSZXR1cm5UeXBl Lkhhc05hbWVkVHVwbGVFbGVtZW50KSB7CitAQCAtNzY0LDYgKzc3MCwxMSBAQCBuYW1lc3BhY2Ug TW9uby5DU2hhcnAgeworIAkJCQlHZXRTaWduYXR1cmVGb3JFcnJvciAoKSk7CisgCQl9CisgCisr CQlwdWJsaWMgc3RhdGljIHZvaWQgRXJyb3JfUmV0dXJuVHlwZUNhbnRCZVJlZkFueSAoTG9jYXRp b24gbG9jLCBUeXBlU3BlYyB0LCBSZXBvcnQgUmVwb3J0KQorKwkJeworKwkJCVJlcG9ydC5FcnJv ciAoMTU5OSwgbG9jLCAiVGhlIHJldHVybiB0eXBlIG9mIGB7MH0nIGlzIG5vdCBhbGxvd2VkIiwg dC5HZXRTaWduYXR1cmVGb3JFcnJvciAoKSk7CisrCQl9CisrCisgCQlwdWJsaWMgYm9vbCBJc1Bh cnRpYWxEZWZpbml0aW9uIHsKKyAJCQlnZXQgeworIAkJCQlyZXR1cm4gKE1vZEZsYWdzICYgTW9k aWZpZXJzLlBBUlRJQUwpICE9IDAgJiYgQmxvY2sgPT0gbnVsbDsKK0BAIC0xMjMxLDExICsxMjQy LDYgQEAgbmFtZXNwYWNlIE1vbm8uQ1NoYXJwIHsKKyAJCQkJCSJJbnRyb2R1Y2luZyBgRmluYWxp emUnIG1ldGhvZCBjYW4gaW50ZXJmZXJlIHdpdGggZGVzdHJ1Y3RvciBpbnZvY2F0aW9uLiBEaWQg eW91IGludGVuZCB0byBkZWNsYXJlIGEgZGVzdHJ1Y3Rvcj8iKTsKKyAJCQl9CisgCistCQkJaWYg KENvbXBpbGVyLlNldHRpbmdzLlN0ZExpYiAmJiBSZXR1cm5UeXBlLklzU3BlY2lhbFJ1bnRpbWVU eXBlKSB7CistCQkJCUVycm9yMTU5OSAoTG9jYXRpb24sIFJldHVyblR5cGUsIFJlcG9ydCk7Cist CQkJCXJldHVybiBmYWxzZTsKKy0JCQl9CistCisgCQkJaWYgKEN1cnJlbnRUeXBlUGFyYW1ldGVy cyA9PSBudWxsKSB7CisgCQkJCWlmIChiYXNlX21ldGhvZCAhPSBudWxsICYmICFJc0V4cGxpY2l0 SW1wbCkgeworIAkJCQkJaWYgKHBhcmFtZXRlcnMuQ291bnQgPT0gMSAmJiBQYXJhbWV0ZXJUeXBl c1swXS5CdWlsdGluVHlwZSA9PSBCdWlsdGluVHlwZVNwZWMuVHlwZS5PYmplY3QgJiYgTWVtYmVy TmFtZS5OYW1lID09ICJFcXVhbHMiKQorQEAgLTEyNjEsOCArMTI2Nyw5IEBAIG5hbWVzcGFjZSBN b25vLkNTaGFycCB7CisgCQkJCWlmICgoTW9kRmxhZ3MgJiBNb2RpZmllcnMuQVNZTkMpICE9IDAp IHsKKyAJCQkJCWlmIChSZXR1cm5UeXBlLktpbmQgIT0gTWVtYmVyS2luZC5Wb2lkICYmCisgCQkJ CQkJUmV0dXJuVHlwZSAhPSBNb2R1bGUuUHJlZGVmaW5lZFR5cGVzLlRhc2suVHlwZVNwZWMgJiYK Ky0JCQkJCQkhUmV0dXJuVHlwZS5Jc0dlbmVyaWNUYXNrKSB7CistCQkJCQkJUmVwb3J0LkVycm9y ICgxOTgzLCBMb2NhdGlvbiwgIlRoZSByZXR1cm4gdHlwZSBvZiBhbiBhc3luYyBtZXRob2QgbXVz dCBiZSB2b2lkLCBUYXNrLCBvciBUYXNrPFQ+Iik7CisrCQkJCQkJIVJldHVyblR5cGUuSXNHZW5l cmljVGFzayAmJgorKwkJCQkJICAgICFSZXR1cm5UeXBlLklzQ3VzdG9tVGFza1R5cGUgKCkpIHsK KysJCQkJCQlSZXBvcnQuRXJyb3IgKDE5ODMsIExvY2F0aW9uLCAiVGhlIHJldHVybiB0eXBlIG9m IGFuIGFzeW5jIG1ldGhvZCBtdXN0IGJlIHZvaWQgb3IgdGFzayB0eXBlIik7CisgCQkJCQl9Cisg CisgCQkJCQlibG9jayA9IChUb3BsZXZlbEJsb2NrKSBibG9jay5Db252ZXJ0VG9Bc3luY1Rhc2sg KHRoaXMsIFBhcmVudC5QYXJ0aWFsQ29udGFpbmVyLCBwYXJhbWV0ZXJzLCBSZXR1cm5UeXBlLCBu dWxsLCBMb2NhdGlvbik7CitAQCAtMTM5NiwxMSArMTQwMyw2IEBAIG5hbWVzcGFjZSBNb25vLkNT aGFycCB7CisgCQkJcmV0dXJuIGJhc2UuRW5hYmxlT3ZlcmxvYWRDaGVja3MgKG92ZXJsb2FkKTsK KyAJCX0KKyAKKy0JCXB1YmxpYyBzdGF0aWMgdm9pZCBFcnJvcjE1OTkgKExvY2F0aW9uIGxvYywg VHlwZVNwZWMgdCwgUmVwb3J0IFJlcG9ydCkKKy0JCXsKKy0JCQlSZXBvcnQuRXJyb3IgKDE1OTks IGxvYywgIk1ldGhvZCBvciBkZWxlZ2F0ZSBjYW5ub3QgcmV0dXJuIHR5cGUgYHswfSciLCB0Lkdl dFNpZ25hdHVyZUZvckVycm9yICgpKTsKKy0JCX0KKy0KKyAJCXByb3RlY3RlZCBvdmVycmlkZSBi b29sIFJlc29sdmVNZW1iZXJUeXBlICgpCisgCQl7CisgCQkJaWYgKEN1cnJlbnRUeXBlUGFyYW1l dGVycyAhPSBudWxsKSB7CitAQCAtMjQ2Nyw2ICsyNDY5LDggQEAgbmFtZXNwYWNlIE1vbm8uQ1No YXJwIHsKKyAJCQkJTW9kdWxlLlByZWRlZmluZWRBdHRyaWJ1dGVzLkR5bmFtaWMuRW1pdEF0dHJp YnV0ZSAoQ3JlYXRlUmV0dXJuQnVpbGRlciAoKS5CdWlsZGVyKTsKKyAJCQl9IGVsc2UgaWYgKFJl dHVyblR5cGUuSGFzRHluYW1pY0VsZW1lbnQpIHsKKyAJCQkJTW9kdWxlLlByZWRlZmluZWRBdHRy aWJ1dGVzLkR5bmFtaWMuRW1pdEF0dHJpYnV0ZSAoQ3JlYXRlUmV0dXJuQnVpbGRlciAoKS5CdWls ZGVyLCBSZXR1cm5UeXBlLCBMb2NhdGlvbik7CisrCQkJfSBlbHNlIGlmIChSZXR1cm5UeXBlIGlz IFJlYWRPbmx5UmVmZXJlbmNlQ29udGFpbmVyKSB7CisrCQkJCU1vZHVsZS5QcmVkZWZpbmVkQXR0 cmlidXRlcy5Jc1JlYWRPbmx5LkVtaXRBdHRyaWJ1dGUgKENyZWF0ZVJldHVybkJ1aWxkZXIgKCku QnVpbGRlcik7CisgCQkJfQorIAorIAkJCWlmIChSZXR1cm5UeXBlLkhhc05hbWVkVHVwbGVFbGVt ZW50KSB7CitkaWZmIC0tZ2l0IGEvbWNzL21jcy9tb2RpZmllcnMuY3MgYi9tY3MvbWNzL21vZGlm aWVycy5jcworaW5kZXggYmZhZTU5ODVhMDMuLjkyNmFiNWQxODQ4IDEwMDY0NAorLS0tIGEvbWNz L21jcy9tb2RpZmllcnMuY3MKKysrKyBiL21jcy9tY3MvbW9kaWZpZXJzLmNzCitAQCAtNTMsNiAr NTMsNyBAQCBuYW1lc3BhY2UgTW9uby5DU2hhcnAKKyAJCURFQlVHR0VSX0hJRERFTgkJCT0gMHg0 MDAwMDAsCisgCQlERUJVR0dFUl9TVEVQX1RIUk9VR0gJPSAweDgwMDAwMCwKKyAJCUF1dG9Qcm9w ZXJ0eQkJCT0gMHgxMDAwMDAwLAorKwkJUkVGICAgICAgICAgICAgICAgICAgICAgPSAweDIwMDAw MDAsCisgCisgCQlBY2Nlc3NpYmlsaXR5TWFzayA9IFBVQkxJQyB8IFBST1RFQ1RFRCB8IElOVEVS TkFMIHwgUFJJVkFURSwKKyAJCUFsbG93ZWRFeHBsaWNpdEltcGxGbGFncyA9IFVOU0FGRSB8IEVY VEVSTiwKK2RpZmYgLS1naXQgYS9tY3MvbWNzL21vZHVsZS5jcyBiL21jcy9tY3MvbW9kdWxlLmNz CitpbmRleCAwMGFmYWM2YzYwNC4uMjI5M2Q4MjViMzYgMTAwNjQ0CistLS0gYS9tY3MvbWNzL21v ZHVsZS5jcworKysrIGIvbWNzL21jcy9tb2R1bGUuY3MKK0BAIC0yNjUsNiArMjY1LDcgQEAgbmFt ZXNwYWNlIE1vbm8uQ1NoYXJwCisgCQlyZWFkb25seSBEaWN0aW9uYXJ5PEFycmF5Q29udGFpbmVy LlR5cGVSYW5rUGFpciwgQXJyYXlDb250YWluZXI+IGFycmF5X3R5cGVzOworIAkJcmVhZG9ubHkg RGljdGlvbmFyeTxUeXBlU3BlYywgUG9pbnRlckNvbnRhaW5lcj4gcG9pbnRlcl90eXBlczsKKyAJ CXJlYWRvbmx5IERpY3Rpb25hcnk8VHlwZVNwZWMsIFJlZmVyZW5jZUNvbnRhaW5lcj4gcmVmZXJl bmNlX3R5cGVzOworKwkJcmVhZG9ubHkgRGljdGlvbmFyeTxUeXBlU3BlYywgUmVhZE9ubHlSZWZl cmVuY2VDb250YWluZXI+IHJlYWRvbmx5X3JlZmVyZW5jZV90eXBlczsKKyAJCXJlYWRvbmx5IERp Y3Rpb25hcnk8VHlwZVNwZWMsIE1ldGhvZFNwZWM+IGF0dHJzX2NhY2hlOworIAkJcmVhZG9ubHkg RGljdGlvbmFyeTxUeXBlU3BlYywgQXdhaXRlckRlZmluaXRpb24+IGF3YWl0ZXJzOworIAkJcmVh ZG9ubHkgRGljdGlvbmFyeTxUeXBlU3BlYywgVHlwZUluZm8+IHR5cGVfaW5mb19jYWNoZTsKK0BA IC0zMDEsNiArMzAyLDcgQEAgbmFtZXNwYWNlIE1vbm8uQ1NoYXJwCisgCQkJYXJyYXlfdHlwZXMg PSBuZXcgRGljdGlvbmFyeTxBcnJheUNvbnRhaW5lci5UeXBlUmFua1BhaXIsIEFycmF5Q29udGFp bmVyPiAoKTsKKyAJCQlwb2ludGVyX3R5cGVzID0gbmV3IERpY3Rpb25hcnk8VHlwZVNwZWMsIFBv aW50ZXJDb250YWluZXI+ICgpOworIAkJCXJlZmVyZW5jZV90eXBlcyA9IG5ldyBEaWN0aW9uYXJ5 PFR5cGVTcGVjLCBSZWZlcmVuY2VDb250YWluZXI+ICgpOworKwkJCXJlYWRvbmx5X3JlZmVyZW5j ZV90eXBlcyA9IG5ldyBEaWN0aW9uYXJ5PFR5cGVTcGVjLCBSZWFkT25seVJlZmVyZW5jZUNvbnRh aW5lcj4gKCk7CisgCQkJYXR0cnNfY2FjaGUgPSBuZXcgRGljdGlvbmFyeTxUeXBlU3BlYywgTWV0 aG9kU3BlYz4gKCk7CisgCQkJYXdhaXRlcnMgPSBuZXcgRGljdGlvbmFyeTxUeXBlU3BlYywgQXdh aXRlckRlZmluaXRpb24+ICgpOworIAkJCXR5cGVfaW5mb19jYWNoZSA9IG5ldyBEaWN0aW9uYXJ5 PFR5cGVTcGVjLCBUeXBlSW5mbz4gKCk7CitAQCAtNDI3LDYgKzQyOSwxMiBAQCBuYW1lc3BhY2Ug TW9uby5DU2hhcnAKKyAJCQl9CisgCQl9CisgCisrCQlpbnRlcm5hbCBEaWN0aW9uYXJ5PFR5cGVT cGVjLCBSZWFkT25seVJlZmVyZW5jZUNvbnRhaW5lcj4gUmVhZG9ubHlSZWZlcmVuY2VUeXBlc0Nh Y2hlIHsKKysJCQlnZXQgeworKwkJCQlyZXR1cm4gcmVhZG9ubHlfcmVmZXJlbmNlX3R5cGVzOwor KwkJCX0KKysJCX0KKysKKyAJCWludGVybmFsIERpY3Rpb25hcnk8VHlwZVNwZWMsIFR5cGVJbmZv PiBUeXBlSW5mb0NhY2hlIHsKKyAJCQlnZXQgeworIAkJCQlyZXR1cm4gdHlwZV9pbmZvX2NhY2hl OworZGlmZiAtLWdpdCBhL21jcy9tY3MvcGFyYW1ldGVyLmNzIGIvbWNzL21jcy9wYXJhbWV0ZXIu Y3MKK2luZGV4IDJiZDJhNDk4YTkxLi5jYzEwZWVlMTYyYiAxMDA2NDQKKy0tLSBhL21jcy9tY3Mv cGFyYW1ldGVyLmNzCisrKysgYi9tY3MvbWNzL3BhcmFtZXRlci5jcworQEAgLTE0NDcsNyArMTQ0 Nyw3IEBAIG5hbWVzcGFjZSBNb25vLkNTaGFycCB7CisgCisgCQkJZXhwciA9IENoaWxkOworIAor LQkJCWlmICghKGV4cHIgaXMgQ29uc3RhbnQgfHwgZXhwciBpcyBEZWZhdWx0VmFsdWVFeHByZXNz aW9uIHx8IChleHByIGlzIE5ldyAmJiAoKE5ldykgZXhwcikuSXNHZW5lcmF0ZWRTdHJ1Y3RDb25z dHJ1Y3RvcikpKSB7CisrCQkJaWYgKCEoZXhwciBpcyBDb25zdGFudCB8fCBleHByIGlzIERlZmF1 bHRWYWx1ZUV4cHJlc3Npb24gfHwgZXhwciBpcyBEZWZhdWx0TGl0ZXJhbEV4cHJlc3Npb24gfHwg KGV4cHIgaXMgTmV3ICYmICgoTmV3KSBleHByKS5Jc0dlbmVyYXRlZFN0cnVjdENvbnN0cnVjdG9y KSkpIHsKKyAJCQkJaWYgKCEoZXhwciBpcyBFcnJvckV4cHJlc3Npb24pKSB7CisgCQkJCQlyYy5S ZXBvcnQuRXJyb3IgKDE3MzYsIExvY2F0aW9uLAorIAkJCQkJCSJUaGUgZXhwcmVzc2lvbiBiZWlu ZyBhc3NpZ25lZCB0byBvcHRpb25hbCBwYXJhbWV0ZXIgYHswfScgbXVzdCBiZSBhIGNvbnN0YW50 IG9yIGRlZmF1bHQgdmFsdWUiLAorZGlmZiAtLWdpdCBhL21jcy9tY3Mvc3RhdGVtZW50LmNzIGIv bWNzL21jcy9zdGF0ZW1lbnQuY3MKK2luZGV4IDU4YmEyNzk1ZTRiLi45YzUxMTI4NTQ4ZiAxMDA2 NDQKKy0tLSBhL21jcy9tY3Mvc3RhdGVtZW50LmNzCisrKysgYi9tY3MvbWNzL3N0YXRlbWVudC5j cworQEAgLTExNjAsNyArMTE2MCw4IEBAIG5hbWVzcGFjZSBNb25vLkNTaGFycCB7CisgCQkJCS8v CisgCQkJCWlmIChlYy5DdXJyZW50QW5vbnltb3VzTWV0aG9kIGlzIEFzeW5jSW5pdGlhbGl6ZXIp IHsKKyAJCQkJCXZhciBzdG9yZXkgPSAoQXN5bmNUYXNrU3RvcmV5KSBlYy5DdXJyZW50QW5vbnlt b3VzTWV0aG9kLlN0b3JleTsKKy0JCQkJCWlmIChzdG9yZXkuUmV0dXJuVHlwZSA9PSBlYy5Nb2R1 bGUuUHJlZGVmaW5lZFR5cGVzLlRhc2suVHlwZVNwZWMpIHsKKysJCQkJCXZhciBzX3JldHVybl90 eXBlID0gc3RvcmV5LlJldHVyblR5cGU7CisrCQkJCQlpZiAoc19yZXR1cm5fdHlwZSA9PSBlYy5N b2R1bGUuUHJlZGVmaW5lZFR5cGVzLlRhc2suVHlwZVNwZWMpIHsKKyAJCQkJCQkvLworIAkJCQkJ CS8vIEV4dHJhIHRyaWNrIG5vdCB0byBlbWl0IHJldC9sZWF2ZSBpbnNpZGUgYXdhaXRlciBib2R5 CisgCQkJCQkJLy8KK0BAIC0xMTY4LDggKzExNjksOCBAQCBuYW1lc3BhY2UgTW9uby5DU2hhcnAg eworIAkJCQkJCXJldHVybiB0cnVlOworIAkJCQkJfQorIAorLQkJCQkJaWYgKHN0b3JleS5SZXR1 cm5UeXBlLklzR2VuZXJpY1Rhc2spCistCQkJCQkJYmxvY2tfcmV0dXJuX3R5cGUgPSBzdG9yZXku UmV0dXJuVHlwZS5UeXBlQXJndW1lbnRzWzBdOworKwkJCQkJaWYgKHNfcmV0dXJuX3R5cGUuSXNH ZW5lcmljVGFzayB8fCAoc19yZXR1cm5fdHlwZS5Bcml0eSA9PSAxICYmIHNfcmV0dXJuX3R5cGUu SXNDdXN0b21UYXNrVHlwZSAoKSkpCisrCQkJCQkgICAgYmxvY2tfcmV0dXJuX3R5cGUgPSBzX3Jl dHVybl90eXBlLlR5cGVBcmd1bWVudHNbMF07CisgCQkJCX0KKyAKKyAJCQkJaWYgKGVjLkN1cnJl bnRJdGVyYXRvciAhPSBudWxsKSB7CitAQCAtMTIyMCw3ICsxMjIxLDcgQEAgbmFtZXNwYWNlIE1v bm8uQ1NoYXJwIHsKKyAJCQkJCQkJcmV0dXJuIGZhbHNlOworIAkJCQkJCX0KKyAKKy0JCQkJCQlp ZiAoIWFzeW5jX3R5cGUuSXNHZW5lcmljVGFzaykgeworKwkJCQkJCWlmICghYXN5bmNfdHlwZS5J c0dlbmVyaWMpIHsKKyAJCQkJCQkJaWYgKHRoaXMgaXMgQ29udGV4dHVhbFJldHVybikKKyAJCQkJ CQkJCXJldHVybiB0cnVlOworIAorQEAgLTIzNjgsNyArMjM2OSwxMiBAQCBuYW1lc3BhY2UgTW9u by5DU2hhcnAgeworIAkJCWlmIChpbml0aWFsaXplciA9PSBudWxsKQorIAkJCQlyZXR1cm4gbnVs bDsKKyAKKy0JCQl2YXIgYyA9IGluaXRpYWxpemVyIGFzIENvbnN0YW50OworKwkJCUNvbnN0YW50 IGM7CisrCQkJaWYgKGluaXRpYWxpemVyLlR5cGUgPT0gSW50ZXJuYWxUeXBlLkRlZmF1bHRUeXBl KQorKwkJCQljID0gTmV3LkNvbnN0YW50aWZ5IChsaS5UeXBlLCBpbml0aWFsaXplci5Mb2NhdGlv bik7CisrCQkJZWxzZQorKwkJCQljID0gaW5pdGlhbGl6ZXIgYXMgQ29uc3RhbnQ7CisrCisgCQkJ aWYgKGMgPT0gbnVsbCkgeworIAkJCQlpbml0aWFsaXplci5FcnJvcl9FeHByZXNzaW9uTXVzdEJl Q29uc3RhbnQgKGJjLCBpbml0aWFsaXplci5Mb2NhdGlvbiwgbGkuTmFtZSk7CisgCQkJCXJldHVy biBudWxsOworQEAgLTI0MDcsMTQgKzI0MTMsMTQgQEAgbmFtZXNwYWNlIE1vbm8uQ1NoYXJwIHsK KyAJCQlBZGRyZXNzVGFrZW4gPSAxIDw8IDIsCisgCQkJQ29tcGlsZXJHZW5lcmF0ZWQgPSAxIDw8 IDMsCisgCQkJQ29uc3RhbnQgPSAxIDw8IDQsCistCQkJRm9yZWFjaFZhcmlhYmxlID0gMSA8PCA1 LAorLQkJCUZpeGVkVmFyaWFibGUgPSAxIDw8IDYsCistCQkJVXNpbmdWYXJpYWJsZSA9IDEgPDwg NywKKysJCQlGb3JlYWNoVmFyaWFibGUgPSAxIDw8IDUgfCBSZWFkb25seU1hc2ssCisrCQkJRml4 ZWRWYXJpYWJsZSA9IDEgPDwgNiB8IFJlYWRvbmx5TWFzaywKKysJCQlVc2luZ1ZhcmlhYmxlID0g MSA8PCA3IHwgUmVhZG9ubHlNYXNrLAorIAkJCUlzTG9ja2VkID0gMSA8PCA4LAorIAkJCVN5bWJv bEZpbGVIaWRkZW4gPSAxIDw8IDksCisgCQkJQnlSZWYgPSAxIDw8IDEwLAorIAorLQkJCVJlYWRv bmx5TWFzayA9IEZvcmVhY2hWYXJpYWJsZSB8IEZpeGVkVmFyaWFibGUgfCBVc2luZ1ZhcmlhYmxl CisrCQkJUmVhZG9ubHlNYXNrID0gMSA8PCAyMAorIAkJfQorIAorIAkJVHlwZVNwZWMgdHlwZTsK K0BAIC0yNTM0LDcgKzI1NDAsNyBAQCBuYW1lc3BhY2UgTW9uby5DU2hhcnAgeworIAorIAkJcHVi bGljIGJvb2wgSXNGaXhlZCB7CisgCQkJZ2V0IHsKKy0JCQkJcmV0dXJuIChmbGFncyAmIEZsYWdz LkZpeGVkVmFyaWFibGUpICE9IDA7CisrCQkJCXJldHVybiAoZmxhZ3MgJiBGbGFncy5GaXhlZFZh cmlhYmxlKSA9PSBGbGFncy5GaXhlZFZhcmlhYmxlOworIAkJCX0KKyAJCQlzZXQgeworIAkJCQlm bGFncyA9IHZhbHVlID8gZmxhZ3MgfCBGbGFncy5GaXhlZFZhcmlhYmxlIDogZmxhZ3MgJiB+Rmxh Z3MuRml4ZWRWYXJpYWJsZTsKK0BAIC0yNjcyLDcgKzI2NzgsNyBAQCBuYW1lc3BhY2UgTW9uby5D U2hhcnAgeworIAorIAkJcHVibGljIHN0cmluZyBHZXRSZWFkT25seUNvbnRleHQgKCkKKyAJCXsK Ky0JCQlzd2l0Y2ggKGZsYWdzICYgRmxhZ3MuUmVhZG9ubHlNYXNrKSB7CisrCQkJc3dpdGNoIChm bGFncyAmIChGbGFncy5Gb3JlYWNoVmFyaWFibGUgfCBGbGFncy5GaXhlZFZhcmlhYmxlIHwgRmxh Z3MuVXNpbmdWYXJpYWJsZSkpIHsKKyAJCQljYXNlIEZsYWdzLkZpeGVkVmFyaWFibGU6CisgCQkJ CXJldHVybiAiZml4ZWQgdmFyaWFibGUiOworIAkJCWNhc2UgRmxhZ3MuRm9yZWFjaFZhcmlhYmxl OgorQEAgLTgxOTEsNyArODE5Nyw5IEBAIG5hbWVzcGFjZSBNb25vLkNTaGFycCB7CisgCQkJCX0K KyAKKyAJCQkJaWYgKGlmYWNlX2NhbmRpZGF0ZSA9PSBudWxsKSB7CistCQkJCQlpZiAoZXhwci5U eXBlICE9IEludGVybmFsVHlwZS5FcnJvclR5cGUpIHsKKysJCQkJCWlmIChleHByLlR5cGUgPT0g SW50ZXJuYWxUeXBlLkRlZmF1bHRUeXBlKSB7CisrCQkJCQkJcmMuUmVwb3J0LkVycm9yICg4MzEy LCBsb2MsICJVc2Ugb2YgZGVmYXVsdCBsaXRlcmFsIGlzIG5vdCB2YWxpZCBpbiB0aGlzIGNvbnRl eHQiKTsKKysJCQkJCX0gZWxzZSBpZiAoZXhwci5UeXBlICE9IEludGVybmFsVHlwZS5FcnJvclR5 cGUpIHsKKyAJCQkJCQlyYy5SZXBvcnQuRXJyb3IgKDE1NzksIGxvYywKKyAJCQkJCQkJImZvcmVh Y2ggc3RhdGVtZW50IGNhbm5vdCBvcGVyYXRlIG9uIHZhcmlhYmxlcyBvZiB0eXBlIGB7MH0nIGJl Y2F1c2UgaXQgZG9lcyBub3QgY29udGFpbiBhIGRlZmluaXRpb24gZm9yIGB7MX0nIG9yIGlzIGlu YWNjZXNzaWJsZSIsCisgCQkJCQkJCWV4cHIuVHlwZS5HZXRTaWduYXR1cmVGb3JFcnJvciAoKSwg IkdldEVudW1lcmF0b3IiKTsKK2RpZmYgLS1naXQgYS9tY3MvbWNzL3R1cGxlcy5jcyBiL21jcy9t Y3MvdHVwbGVzLmNzCitpbmRleCBiYjdmYWY3MzRkZi4uOTAxZWZkYzk1NDEgMTAwNjQ0CistLS0g YS9tY3MvbWNzL3R1cGxlcy5jcworKysrIGIvbWNzL21jcy90dXBsZXMuY3MKK0BAIC00MzIsNyAr NDMyLDcgQEAgbmFtZXNwYWNlIE1vbm8uQ1NoYXJwCisgCXsKKyAJCUV4cHJlc3Npb24gc291cmNl OworIAkJTGlzdDxFeHByZXNzaW9uPiB0YXJnZXRFeHByczsKKy0JCUxpc3Q8TG9jYWxWYXJpYWJs ZT4gdmFyaWFibGVzVG9JbmZlcjsKKysJCUxpc3Q8QmxvY2tWYXJpYWJsZT4gdmFyaWFibGVzOwor IAkJRXhwcmVzc2lvbiBpbnN0YW5jZTsKKyAKKyAJCXB1YmxpYyBUdXBsZURlY29uc3RydWN0IChM aXN0PEV4cHJlc3Npb24+IHRhcmdldEV4cHJzLCBFeHByZXNzaW9uIHNvdXJjZSwgTG9jYXRpb24g bG9jKQorQEAgLTQ0MiwxMCArNDQyLDExIEBAIG5hbWVzcGFjZSBNb25vLkNTaGFycAorIAkJCXRo aXMubG9jID0gbG9jOworIAkJfQorIAorLQkJcHVibGljIFR1cGxlRGVjb25zdHJ1Y3QgKExpc3Q8 RXhwcmVzc2lvbj4gdGFyZ2V0RXhwcnMsIExpc3Q8TG9jYWxWYXJpYWJsZT4gdmFyaWFibGVzLCBF eHByZXNzaW9uIHNvdXJjZSwgTG9jYXRpb24gbG9jKQorLQkJCTogdGhpcyAodGFyZ2V0RXhwcnMs IHNvdXJjZSwgbG9jKQorKwkJcHVibGljIFR1cGxlRGVjb25zdHJ1Y3QgKExpc3Q8QmxvY2tWYXJp YWJsZT4gdmFyaWFibGVzLCBFeHByZXNzaW9uIHNvdXJjZSwgTG9jYXRpb24gbG9jKQorIAkJewor LQkJCXRoaXMudmFyaWFibGVzVG9JbmZlciA9IHZhcmlhYmxlczsKKysJCQl0aGlzLnNvdXJjZSA9 IHNvdXJjZTsKKysJCQl0aGlzLnZhcmlhYmxlcyA9IHZhcmlhYmxlczsKKysJCQl0aGlzLmxvYyA9 IGxvYzsKKyAJCX0KKyAKKyAJCXB1YmxpYyBvdmVycmlkZSBFeHByZXNzaW9uIENyZWF0ZUV4cHJl c3Npb25UcmVlIChSZXNvbHZlQ29udGV4dCBlYykKK0BAIC00NjksOSArNDcwLDE4IEBAIG5hbWVz cGFjZSBNb25vLkNTaGFycAorIAkJCXZhciBzcmNfdHlwZSA9IHNyYy5UeXBlOworIAorIAkJCWlm IChzcmNfdHlwZS5Jc1R1cGxlVHlwZSkgeworLQkJCQlpZiAoc3JjX3R5cGUuQXJpdHkgIT0gdGFy Z2V0RXhwcnMuQ291bnQpIHsKKysJCQkJaW50IHRhcmdldF9jb3VudDsKKysKKysJCQkJaWYgKHRh cmdldEV4cHJzID09IG51bGwpIHsKKysJCQkJCXRhcmdldF9jb3VudCA9IHZhcmlhYmxlcy5Db3Vu dDsKKysJCQkJCXRhcmdldEV4cHJzID0gbmV3IExpc3Q8RXhwcmVzc2lvbj4gKHRhcmdldF9jb3Vu dCk7CisrCQkJCX0gZWxzZSB7CisrCQkJCQl0YXJnZXRfY291bnQgPSB0YXJnZXRFeHBycy5Db3Vu dDsKKysJCQkJfQorKworKwkJCQlpZiAoc3JjX3R5cGUuQXJpdHkgIT0gdGFyZ2V0X2NvdW50KSB7 CisgCQkJCQlyYy5SZXBvcnQuRXJyb3IgKDgxMzIsIGxvYywgIkNhbm5vdCBkZWNvbnN0cnVjdCBh IHR1cGxlIG9mIGB7MH0nIGVsZW1lbnRzIGludG8gYHsxfScgdmFyaWFibGVzIiwKKy0JCQkJCQlz cmNfdHlwZS5Bcml0eS5Ub1N0cmluZyAoKSwgdGFyZ2V0RXhwcnMuQ291bnQuVG9TdHJpbmcgKCkp OworKwkJCQkJCXNyY190eXBlLkFyaXR5LlRvU3RyaW5nIChDdWx0dXJlSW5mby5JbnZhcmlhbnRD dWx0dXJlKSwgdGFyZ2V0X2NvdW50LlRvU3RyaW5nIChDdWx0dXJlSW5mby5JbnZhcmlhbnRDdWx0 dXJlKSk7CisgCQkJCQlyZXR1cm4gbnVsbDsKKyAJCQkJfQorIAorQEAgLTQ4MiwyNyArNDkyLDQ0 IEBAIG5hbWVzcGFjZSBNb25vLkNTaGFycAorIAkJCQkJaW5zdGFuY2UgPSBleHByX3ZhcmlhYmxl LkNyZWF0ZVJlZmVyZW5jZUV4cHJlc3Npb24gKHJjLCBsb2MpOworIAkJCQl9CisgCistCQkJCWZv ciAoaW50IGkgPSAwOyBpIDwgdGFyZ2V0RXhwcnMuQ291bnQ7ICsraSkgeworKwkJCQlmb3IgKGlu dCBpID0gMDsgaSA8IHRhcmdldF9jb3VudDsgKytpKSB7CisgCQkJCQl2YXIgdGxlID0gc3JjX3R5 cGUuVHlwZUFyZ3VtZW50cyBbaV07CisgCistCQkJCQl2YXIgbHYgPSB2YXJpYWJsZXNUb0luZmVy PyBbaV07CistCQkJCQlpZiAobHYgIT0gbnVsbCkgeworLQkJCQkJCWlmIChJbnRlcm5hbFR5cGUu SGFzTm9UeXBlICh0bGUpKSB7CistCQkJCQkJCXJjLlJlcG9ydC5FcnJvciAoODEzMCwgTG9jYXRp b24sICJDYW5ub3QgaW5mZXIgdGhlIHR5cGUgb2YgaW1wbGljaXRseS10eXBlZCBkZWNvbnN0cnVj dGlvbiB2YXJpYWJsZSBgezB9JyIsIGx2Lk5hbWUpOworLQkJCQkJCQlsdi5UeXBlID0gSW50ZXJu YWxUeXBlLkVycm9yVHlwZTsKKysJCQkJCWlmICh2YXJpYWJsZXMgIT0gbnVsbCkgeworKwkJCQkJ CXZhciB2YXJpYWJsZSA9IHZhcmlhYmxlcyBbaV0uVmFyaWFibGU7CisrCisrCQkJCQkJaWYgKHZh cmlhYmxlLlR5cGUgPT0gSW50ZXJuYWxUeXBlLkRpc2NhcmQpIHsKKysJCQkJCQkJdmFyaWFibGVz IFtpXSA9IG51bGw7CisrCQkJCQkJCXRhcmdldEV4cHJzLkFkZCAoRW1wdHlFeHByZXNzaW9uU3Rh dGVtZW50Lkluc3RhbmNlKTsKKyAJCQkJCQkJY29udGludWU7CisgCQkJCQkJfQorIAorLQkJCQkJ CWx2LlR5cGUgPSB0bGU7CistCQkJCQkJbHYuUHJlcGFyZUFzc2lnbm1lbnRBbmFseXNpcyAoKEJs b2NrQ29udGV4dCkgcmMpOworLQkJCQkJfQorKwkJCQkJCXZhciB2YXJpYWJsZV90eXBlID0gdmFy aWFibGVzIFtpXS5UeXBlRXhwcmVzc2lvbjsKKysKKysJCQkJCQl0YXJnZXRFeHBycy5BZGQgKG5l dyBMb2NhbFZhcmlhYmxlUmVmZXJlbmNlICh2YXJpYWJsZSwgdmFyaWFibGUuTG9jYXRpb24pKTsK KysKKysJCQkJCQlpZiAodmFyaWFibGVfdHlwZSBpcyBWYXJFeHByKSB7CisrCQkJCQkJCWlmIChJ bnRlcm5hbFR5cGUuSGFzTm9UeXBlICh0bGUpKSB7CisrCQkJCQkJCQlyYy5SZXBvcnQuRXJyb3Ig KDgxMzAsIExvY2F0aW9uLCAiQ2Fubm90IGluZmVyIHRoZSB0eXBlIG9mIGltcGxpY2l0bHktdHlw ZWQgZGVjb25zdHJ1Y3Rpb24gdmFyaWFibGUgYHswfSciLCB2YXJpYWJsZS5OYW1lKTsKKysJCQkJ CQkJCXRsZSA9IEludGVybmFsVHlwZS5FcnJvclR5cGU7CisrCQkJCQkJCX0KKyAKKysJCQkJCQkJ dmFyaWFibGUuVHlwZSA9IHRsZTsKKysJCQkJCQl9IGVsc2UgeworKwkJCQkJCQl2YXJpYWJsZS5U eXBlID0gdmFyaWFibGVfdHlwZS5SZXNvbHZlQXNUeXBlIChyYyk7CisrCQkJCQkJfQorKworKwkJ CQkJCXZhcmlhYmxlLlByZXBhcmVBc3NpZ25tZW50QW5hbHlzaXMgKChCbG9ja0NvbnRleHQpcmMp OworKwkJCQkJfQorIAorIAkJCQkJdmFyIGVsZW1lbnRfc3JjID0gdHVwbGVMaXRlcmFsID09IG51 bGwgPyBuZXcgTWVtYmVyQWNjZXNzIChpbnN0YW5jZSwgTmFtZWRUdXBsZVNwZWMuR2V0RWxlbWVu dFByb3BlcnR5TmFtZSAoaSkpIDogdHVwbGVMaXRlcmFsLkVsZW1lbnRzIFtpXS5FeHByOworIAkJ CQkJdGFyZ2V0RXhwcnMgW2ldID0gbmV3IFNpbXBsZUFzc2lnbiAodGFyZ2V0RXhwcnMgW2ldLCBl bGVtZW50X3NyYykuUmVzb2x2ZSAocmMpOworIAkJCQl9CisgCisgCQkJCWVjbGFzcyA9IEV4cHJD bGFzcy5WYWx1ZTsKKysKKysJCQkJLy8gVE9ETzogVGhlIHR5cGUgaXMgc2FtZSBvbmx5IGlmIHRo ZXJlIGlzIG5vIHRhcmdldCBlbGVtZW50IGNvbnZlcnNpb24KKysJCQkJLy8gdmFyIHJlcyA9ICgv KmJ5dGUqLyBiLCAvKnNob3J0Ki8gcykgPSAoMiwgNCk7CisgCQkJCXR5cGUgPSBzcmMuVHlwZTsK KyAJCQkJcmV0dXJuIHRoaXM7CisgCQkJfQorQEAgLTUyNywxMSArNTU0LDI0IEBAIG5hbWVzcGFj ZSBNb25vLkNTaGFycAorIAorIAkJcHVibGljIG92ZXJyaWRlIHZvaWQgRW1pdCAoRW1pdENvbnRl eHQgZWMpCisgCQl7CistCQkJdGhyb3cgbmV3IE5vdEltcGxlbWVudGVkRXhjZXB0aW9uICgpOwor KwkJCWlmIChpbnN0YW5jZSAhPSBudWxsKQorKwkJCQkoKEV4cHJlc3Npb25TdGF0ZW1lbnQpc291 cmNlKS5FbWl0U3RhdGVtZW50IChlYyk7CisrCisrCQkJZm9yZWFjaCAoRXhwcmVzc2lvblN0YXRl bWVudCBleHByIGluIHRhcmdldEV4cHJzKQorKwkJCQlleHByLkVtaXQgKGVjKTsKKysKKysJCQl2 YXIgY3RvciA9IE1lbWJlckNhY2hlLkZpbmRNZW1iZXIgKHR5cGUsIE1lbWJlckZpbHRlci5Db25z dHJ1Y3RvciAobnVsbCksIEJpbmRpbmdSZXN0cmljdGlvbi5EZWNsYXJlZE9ubHkgfCBCaW5kaW5n UmVzdHJpY3Rpb24uSW5zdGFuY2VPbmx5KSBhcyBNZXRob2RTcGVjOworKwkJCWVjLkVtaXQgKE9w Q29kZXMuTmV3b2JqLCBjdG9yKTsKKyAJCX0KKyAKKyAJCXB1YmxpYyBvdmVycmlkZSB2b2lkIEVt aXRTdGF0ZW1lbnQgKEVtaXRDb250ZXh0IGVjKQorIAkJeworKwkJCWlmICh2YXJpYWJsZXMgIT0g bnVsbCkgeworKwkJCQlmb3JlYWNoICh2YXIgbHYgaW4gdmFyaWFibGVzKSB7CisrCQkJCQlsdj8u VmFyaWFibGUuQ3JlYXRlQnVpbGRlciAoZWMpOworKwkJCQl9CisrCQkJfQorKwkJCQorIAkJCWlm IChpbnN0YW5jZSAhPSBudWxsKQorIAkJCQkoKEV4cHJlc3Npb25TdGF0ZW1lbnQpIHNvdXJjZSku RW1pdFN0YXRlbWVudCAoZWMpOworIAkJCQorQEAgLTU0OSw5ICs1ODksNiBAQCBuYW1lc3BhY2Ug TW9uby5DU2hhcnAKKyAJCQlpZiAobGVhdmVfY29weSkKKyAJCQkJdGhyb3cgbmV3IE5vdEltcGxl bWVudGVkRXhjZXB0aW9uICgpOworIAorLQkJCWZvcmVhY2ggKHZhciBsdiBpbiB2YXJpYWJsZXNU b0luZmVyKQorLQkJCQlsdi5DcmVhdGVCdWlsZGVyIChlYyk7CistCisgCQkJRW1pdFN0YXRlbWVu dCAoZWMpOworIAkJfQorIAorQEAgLTU2MywxMSArNjAwLDExIEBAIG5hbWVzcGFjZSBNb25vLkNT aGFycAorIAorIAkJcHVibGljIHZvaWQgU2V0R2VuZXJhdGVkRmllbGRBc3NpZ25lZCAoRmxvd0Fu YWx5c2lzQ29udGV4dCBmYykKKyAJCXsKKy0JCQlpZiAodmFyaWFibGVzVG9JbmZlciA9PSBudWxs KQorKwkJCWlmICh2YXJpYWJsZXMgPT0gbnVsbCkKKyAJCQkJcmV0dXJuOworIAorLQkJCWZvcmVh Y2ggKHZhciBsdiBpbiB2YXJpYWJsZXNUb0luZmVyKQorLQkJCQlmYy5TZXRWYXJpYWJsZUFzc2ln bmVkIChsdi5WYXJpYWJsZUluZm8pOworKwkJCWZvcmVhY2ggKHZhciBsdiBpbiB2YXJpYWJsZXMp CisrCQkJCWZjLlNldFZhcmlhYmxlQXNzaWduZWQgKGx2LlZhcmlhYmxlLlZhcmlhYmxlSW5mbyk7 CisgCQl9CisgCX0KKyB9CitcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKK2RpZmYgLS1naXQg YS9tY3MvbWNzL3R5cGVtYW5hZ2VyLmNzIGIvbWNzL21jcy90eXBlbWFuYWdlci5jcworaW5kZXgg YjZhZmYxNGUxYzAuLjdhMTZjZGEyNzc0IDEwMDY0NAorLS0tIGEvbWNzL21jcy90eXBlbWFuYWdl ci5jcworKysrIGIvbWNzL21jcy90eXBlbWFuYWdlci5jcworQEAgLTI0Miw2ICsyNDIsNyBAQCBu YW1lc3BhY2UgTW9uby5DU2hhcnAKKyAKKyAJCS8vIEMjIDcuMAorIAkJcHVibGljIHJlYWRvbmx5 IFByZWRlZmluZWRUeXBlW10gVHVwbGVzOworKwkJcHVibGljIHJlYWRvbmx5IFByZWRlZmluZWRU eXBlIFNwYW5HZW5lcmljOworIAorIAkJcHVibGljIFByZWRlZmluZWRUeXBlcyAoTW9kdWxlQ29u dGFpbmVyIG1vZHVsZSkKKyAJCXsKK0BAIC0zMDEsNiArMzAyLDggQEAgbmFtZXNwYWNlIE1vbm8u Q1NoYXJwCisgCQkJRm9ybWF0dGFibGVTdHJpbmcgPSBuZXcgUHJlZGVmaW5lZFR5cGUgKG1vZHVs ZSwgTWVtYmVyS2luZC5DbGFzcywgIlN5c3RlbSIsICJGb3JtYXR0YWJsZVN0cmluZyIpOworIAkJ CUZvcm1hdHRhYmxlU3RyaW5nRmFjdG9yeSA9IG5ldyBQcmVkZWZpbmVkVHlwZSAobW9kdWxlLCBN ZW1iZXJLaW5kLkNsYXNzLCAiU3lzdGVtLlJ1bnRpbWUuQ29tcGlsZXJTZXJ2aWNlcyIsICJGb3Jt YXR0YWJsZVN0cmluZ0ZhY3RvcnkiKTsKKyAKKysJCQlTcGFuR2VuZXJpYyA9IG5ldyBQcmVkZWZp bmVkVHlwZSAobW9kdWxlLCBNZW1iZXJLaW5kLlN0cnVjdCwgIlN5c3RlbSIsICJTcGFuIiwgMSk7 CisrCisgCQkJLy8KKyAJCQkvLyBEZWZpbmUgdHlwZXMgd2hpY2ggYXJlIHVzZWQgZm9yIGNvbXBh cmlzb24uIEl0IGRvZXMgbm90IG1hdHRlcgorIAkJCS8vIGlmIHRoZXkgZG9uJ3QgZXhpc3QgYXMg bm8gZXJyb3IgcmVwb3J0IGlzIG5lZWRlZAorQEAgLTM0OCw2ICszNTEsOCBAQCBuYW1lc3BhY2Ug TW9uby5DU2hhcnAKKyAJCQkJaWYgKHB0LkRlZmluZSAoKSkKKyAJCQkJCXB0LlR5cGVTcGVjLklz VHVwbGVUeXBlID0gdHJ1ZTsKKyAJCQl9CisrCisrCQkJU3BhbkdlbmVyaWMuRGVmaW5lICgpOwor IAkJfQorIAl9CisgCitAQCAtNDMwLDYgKzQzNSw3IEBAIG5hbWVzcGFjZSBNb25vLkNTaGFycAor IAkJCUFycmF5RW1wdHkgPSBuZXcgUHJlZGVmaW5lZE1lbWJlcjxNZXRob2RTcGVjPiAobW9kdWxl LCB0eXBlcy5BcnJheSwKKyAJCQkJTWVtYmVyRmlsdGVyLk1ldGhvZCAoIkVtcHR5IiwgMSwgUGFy YW1ldGVyc0NvbXBpbGVkLkVtcHR5UmVhZE9ubHlQYXJhbWV0ZXJzLCBudWxsKSk7CisgCisrCQkJ Ly8gVE9ETzogTXVzdCBtZSBzdGF0aWMKKyAJCQlBc3luY1Rhc2tNZXRob2RCdWlsZGVyQ3JlYXRl ID0gbmV3IFByZWRlZmluZWRNZW1iZXI8TWV0aG9kU3BlYz4gKG1vZHVsZSwgdHlwZXMuQXN5bmNU YXNrTWV0aG9kQnVpbGRlciwKKyAJCQkJTWVtYmVyRmlsdGVyLk1ldGhvZCAoIkNyZWF0ZSIsIDAs IFBhcmFtZXRlcnNDb21waWxlZC5FbXB0eVJlYWRPbmx5UGFyYW1ldGVycywgdHlwZXMuQXN5bmNU YXNrTWV0aG9kQnVpbGRlci5UeXBlU3BlYykpOworIAorQEAgLTQ4NSw2ICs0OTEsNyBAQCBuYW1l c3BhY2UgTW9uby5DU2hhcnAKKyAJCQlBc3luY1Rhc2tNZXRob2RCdWlsZGVyVGFzayA9IG5ldyBQ cmVkZWZpbmVkTWVtYmVyPFByb3BlcnR5U3BlYz4gKG1vZHVsZSwgdHlwZXMuQXN5bmNUYXNrTWV0 aG9kQnVpbGRlciwKKyAJCQkJTWVtYmVyRmlsdGVyLlByb3BlcnR5ICgiVGFzayIsIG51bGwpKTsK KyAKKysJCQkvLyBUT0RPOiBNdXN0IG1lIHN0YXRpYworIAkJCUFzeW5jVGFza01ldGhvZEJ1aWxk ZXJHZW5lcmljQ3JlYXRlID0gbmV3IFByZWRlZmluZWRNZW1iZXI8TWV0aG9kU3BlYz4gKG1vZHVs ZSwgdHlwZXMuQXN5bmNUYXNrTWV0aG9kQnVpbGRlckdlbmVyaWMsCisgCQkJCU1lbWJlckZpbHRl ci5NZXRob2QgKCJDcmVhdGUiLCAwLCBQYXJhbWV0ZXJzQ29tcGlsZWQuRW1wdHlSZWFkT25seVBh cmFtZXRlcnMsIHR5cGVzLkFzeW5jVm9pZE1ldGhvZEJ1aWxkZXIuVHlwZVNwZWMpKTsKKyAKK0BA IC01NDIsNiArNTQ5LDcgQEAgbmFtZXNwYWNlIE1vbm8uQ1NoYXJwCisgCQkJQXN5bmNUYXNrTWV0 aG9kQnVpbGRlckdlbmVyaWNUYXNrID0gbmV3IFByZWRlZmluZWRNZW1iZXI8UHJvcGVydHlTcGVj PiAobW9kdWxlLCB0eXBlcy5Bc3luY1Rhc2tNZXRob2RCdWlsZGVyR2VuZXJpYywKKyAJCQkJTWVt YmVyRmlsdGVyLlByb3BlcnR5ICgiVGFzayIsIG51bGwpKTsKKyAKKysJCQkvLyBUT0RPOiBNdXN0 IG1lIHN0YXRpYworIAkJCUFzeW5jVm9pZE1ldGhvZEJ1aWxkZXJDcmVhdGUgPSBuZXcgUHJlZGVm aW5lZE1lbWJlcjxNZXRob2RTcGVjPiAobW9kdWxlLCB0eXBlcy5Bc3luY1ZvaWRNZXRob2RCdWls ZGVyLAorIAkJCQlNZW1iZXJGaWx0ZXIuTWV0aG9kICgiQ3JlYXRlIiwgMCwgUGFyYW1ldGVyc0Nv bXBpbGVkLkVtcHR5UmVhZE9ubHlQYXJhbWV0ZXJzLCB0eXBlcy5Bc3luY1ZvaWRNZXRob2RCdWls ZGVyLlR5cGVTcGVjKSk7CisgCitAQCAtMTAwNiw5ICsxMDE0LDYgQEAgbmFtZXNwYWNlIE1vbm8u Q1NoYXJwCisgCisgCQlwdWJsaWMgVCBSZXNvbHZlIChMb2NhdGlvbiBsb2MpCisgCQl7CistCQkJ aWYgKG1lbWJlciAhPSBudWxsKQorLQkJCQlyZXR1cm4gbWVtYmVyOworLQorIAkJCWlmIChHZXQg KCkgIT0gbnVsbCkKKyAJCQkJcmV0dXJuIG1lbWJlcjsKKyAKK2RpZmYgLS1naXQgYS9tY3MvbWNz L3R5cGVzcGVjLmNzIGIvbWNzL21jcy90eXBlc3BlYy5jcworaW5kZXggZDE0ZTFlYWQzZTMuLmE1 OGEwZmU1MTc4IDEwMDY0NAorLS0tIGEvbWNzL21jcy90eXBlc3BlYy5jcworKysrIGIvbWNzL21j cy90eXBlc3BlYy5jcworQEAgLTIyNSw2ICsyMjUsOCBAQCBuYW1lc3BhY2UgTW9uby5DU2hhcnAK KyAJCQl9CisgCQl9CisgCisrCQlwdWJsaWMgYm9vbCBJc0J5UmVmTGlrZSA9PiAobW9kaWZpZXJz ICYgTW9kaWZpZXJzLlJFRikgIT0gMDsKKysKKyAJCS8vCisgCQkvLyBSZXR1cm5zIHRydWUgZm9y IGluc3RhbmNlcyBvZiBTeXN0ZW0uVGhyZWFkaW5nLlRhc2tzLlRhc2s8VD4KKyAJCS8vCitAQCAt MTQ1Miw2ICsxNDU0LDcgQEAgbmFtZXNwYWNlIE1vbm8uQ1NoYXJwCisgCQlpbnQgVHlwZVBhcmFt ZXRlcnNDb3VudCB7IGdldDsgfQorIAkJVHlwZVBhcmFtZXRlclNwZWNbXSBUeXBlUGFyYW1ldGVy cyB7IGdldDsgfQorIAorKwkJVHlwZVNwZWMgR2V0QXN5bmNNZXRob2RCdWlsZGVyICgpOworIAkJ VHlwZVNwZWMgR2V0QXR0cmlidXRlQ29DbGFzcyAoKTsKKyAJCXN0cmluZyBHZXRBdHRyaWJ1dGVE ZWZhdWx0TWVtYmVyICgpOworIAkJQXR0cmlidXRlVXNhZ2VBdHRyaWJ1dGUgR2V0QXR0cmlidXRl VXNhZ2UgKFByZWRlZmluZWRBdHRyaWJ1dGUgcGEpOworQEAgLTE0NjEsNiArMTQ2NCwyOSBAQCBu YW1lc3BhY2UgTW9uby5DU2hhcnAKKyAKKyAJY2xhc3MgSW50ZXJuYWxUeXBlIDogVHlwZVNwZWMs IElUeXBlRGVmaW5pdGlvbgorIAl7CisrCQlzZWFsZWQgY2xhc3MgSW50ZXJuYWxUeXBlQXNzZW1i bHkgOiBJQXNzZW1ibHlEZWZpbml0aW9uCisrCQl7CisrCQkJcHVibGljIHN0YXRpYyByZWFkb25s eSBJbnRlcm5hbFR5cGVBc3NlbWJseSBJbnN0YW5jZSA9IG5ldyBJbnRlcm5hbFR5cGVBc3NlbWJs eSAoKTsKKysKKysJCQlwdWJsaWMgc3RyaW5nIEZ1bGxOYW1lID0+IHRocm93IG5ldyBOb3RJbXBs ZW1lbnRlZEV4Y2VwdGlvbiAoKTsKKysKKysJCQlwdWJsaWMgYm9vbCBJc0NMU0NvbXBsaWFudCA9 PiBmYWxzZTsKKysKKysJCQlwdWJsaWMgYm9vbCBJc01pc3NpbmcgPT4gZmFsc2U7CisrCisrCQkJ cHVibGljIHN0cmluZyBOYW1lID0+IHRocm93IG5ldyBOb3RJbXBsZW1lbnRlZEV4Y2VwdGlvbiAo KTsKKysKKysJCQlwdWJsaWMgYnl0ZSBbXSBHZXRQdWJsaWNLZXlUb2tlbiAoKQorKwkJCXsKKysJ CQkJdGhyb3cgbmV3IE5vdEltcGxlbWVudGVkRXhjZXB0aW9uICgpOworKwkJCX0KKysKKysJCQlw dWJsaWMgYm9vbCBJc0ZyaWVuZEFzc2VtYmx5VG8gKElBc3NlbWJseURlZmluaXRpb24gYXNzZW1i bHkpCisrCQkJeworKwkJCQlyZXR1cm4gZmFsc2U7CisrCQkJfQorKwkJfQorKworIAkJcHVibGlj IHN0YXRpYyByZWFkb25seSBJbnRlcm5hbFR5cGUgQW5vbnltb3VzTWV0aG9kID0gbmV3IEludGVy bmFsVHlwZSAoImFub255bW91cyBtZXRob2QiKTsKKyAJCXB1YmxpYyBzdGF0aWMgcmVhZG9ubHkg SW50ZXJuYWxUeXBlIEFyZ2xpc3QgPSBuZXcgSW50ZXJuYWxUeXBlICgiX19hcmdsaXN0Iik7Cisg CQlwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEludGVybmFsVHlwZSBNZXRob2RHcm91cCA9IG5ldyBJ bnRlcm5hbFR5cGUgKCJtZXRob2QgZ3JvdXAiKTsKK0BAIC0xNDcwLDYgKzE0OTYsOCBAQCBuYW1l c3BhY2UgTW9uby5DU2hhcnAKKyAJCXB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgSW50ZXJuYWxUeXBl IEVycm9yVHlwZSA9IG5ldyBJbnRlcm5hbFR5cGUgKCI8ZXJyb3I+Iik7CisgCQlwdWJsaWMgc3Rh dGljIHJlYWRvbmx5IEludGVybmFsVHlwZSBWYXJPdXRUeXBlID0gbmV3IEludGVybmFsVHlwZSAo InZhciBvdXQiKTsKKyAJCXB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgSW50ZXJuYWxUeXBlIFRocm93 RXhwciA9IG5ldyBJbnRlcm5hbFR5cGUgKCJ0aHJvdyBleHByZXNzaW9uIik7CisrCQlwdWJsaWMg c3RhdGljIHJlYWRvbmx5IEludGVybmFsVHlwZSBEZWZhdWx0VHlwZSA9IG5ldyBJbnRlcm5hbFR5 cGUgKCJkZWZhdWx0Iik7CisrCQlwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEludGVybmFsVHlwZSBE aXNjYXJkID0gbmV3IEludGVybmFsVHlwZSAoImRpc2NhcmQiKTsKKyAKKyAJCXJlYWRvbmx5IHN0 cmluZyBuYW1lOworIAorQEAgLTE0OTQsNyArMTUyMiw3IEBAIG5hbWVzcGFjZSBNb25vLkNTaGFy cAorIAorIAkJSUFzc2VtYmx5RGVmaW5pdGlvbiBJVHlwZURlZmluaXRpb24uRGVjbGFyaW5nQXNz ZW1ibHkgeworIAkJCWdldCB7CistCQkJCXRocm93IG5ldyBOb3RJbXBsZW1lbnRlZEV4Y2VwdGlv biAoKTsKKysJCQkJcmV0dXJuIEludGVybmFsVHlwZUFzc2VtYmx5Lkluc3RhbmNlOworIAkJCX0K KyAJCX0KKyAKK0BAIC0xNTYxLDYgKzE1ODksMTEgQEAgbmFtZXNwYWNlIE1vbm8uQ1NoYXJwCisg CisgCQkjcmVnaW9uIElUeXBlRGVmaW5pdGlvbiBNZW1iZXJzCisgCisrCQlUeXBlU3BlYyBJVHlw ZURlZmluaXRpb24uR2V0QXN5bmNNZXRob2RCdWlsZGVyICgpCisrCQl7CisrCQkJcmV0dXJuIG51 bGw7CisrCQl9CisrCisgCQlUeXBlU3BlYyBJVHlwZURlZmluaXRpb24uR2V0QXR0cmlidXRlQ29D bGFzcyAoKQorIAkJeworIAkJCXJldHVybiBudWxsOworQEAgLTE2MTQsNyArMTY0Nyw3IEBAIG5h bWVzcGFjZSBNb25vLkNTaGFycAorIAorIAkJcHVibGljIHN0YXRpYyBib29sIEhhc05vVHlwZSAo VHlwZVNwZWMgdHlwZSkKKyAJCXsKKy0JCQlyZXR1cm4gdHlwZSA9PSBBbm9ueW1vdXNNZXRob2Qg fHwgdHlwZSA9PSBNZXRob2RHcm91cCB8fCB0eXBlID09IE51bGxMaXRlcmFsIHx8IHR5cGUgPT0g VGhyb3dFeHByOworKwkJCXJldHVybiB0eXBlID09IEFub255bW91c01ldGhvZCB8fCB0eXBlID09 IE1ldGhvZEdyb3VwIHx8IHR5cGUgPT0gTnVsbExpdGVyYWwgfHwgdHlwZSA9PSBUaHJvd0V4cHIg fHwgdHlwZSA9PSBEZWZhdWx0VHlwZTsKKyAJCX0KKyAJfQorIAorQEAgLTE3NDksNiArMTc4Miwx MSBAQCBuYW1lc3BhY2UgTW9uby5DU2hhcnAKKyAJCQl9CisgCQl9CisgCisrCQlwdWJsaWMgVHlw ZVNwZWMgR2V0QXN5bmNNZXRob2RCdWlsZGVyICgpCisrCQl7CisrCQkJcmV0dXJuIG51bGw7Cisr CQl9CisrCisgCQlwdWJsaWMgVHlwZVNwZWMgR2V0QXR0cmlidXRlQ29DbGFzcyAoKQorIAkJewor IAkJCXJldHVybiBFbGVtZW50Lk1lbWJlckRlZmluaXRpb24uR2V0QXR0cmlidXRlQ29DbGFzcyAo KTsKK0BAIC0xOTk2LDkgKzIwMzQsMTAgQEAgbmFtZXNwYWNlIE1vbm8uQ1NoYXJwCisgCVtTeXN0 ZW0uRGlhZ25vc3RpY3MuRGVidWdnZXJEaXNwbGF5KCJ7RGlzcGxheURlYnVnSW5mbygpfSIpXQor IAljbGFzcyBSZWZlcmVuY2VDb250YWluZXIgOiBFbGVtZW50VHlwZVNwZWMKKyAJeworLQkJUmVm ZXJlbmNlQ29udGFpbmVyIChUeXBlU3BlYyBlbGVtZW50KQorKwkJcHJvdGVjdGVkIFJlZmVyZW5j ZUNvbnRhaW5lciAoVHlwZVNwZWMgZWxlbWVudCkKKyAJCQk6IGJhc2UgKE1lbWJlcktpbmQuQnlS ZWYsIGVsZW1lbnQsIG51bGwpCisgCQl7CisrCQkJY2FjaGUgPSBudWxsOworIAkJfQorIAorIAkJ cHVibGljIG92ZXJyaWRlIElMaXN0PFR5cGVTcGVjPiBJbnRlcmZhY2VzIHsKK0BAIC0yMDM5LDYg KzIwNzgsMzkgQEAgbmFtZXNwYWNlIE1vbm8uQ1NoYXJwCisgCisgCQkJcmV0dXJuIHBjOworIAkJ fQorKworKwkJcHJvdGVjdGVkIG92ZXJyaWRlIHZvaWQgSW5pdGlhbGl6ZU1lbWJlckNhY2hlKGJv b2wgb25seVR5cGVzKQorKwkJeworKwkJCWNhY2hlID0gRWxlbWVudC5NZW1iZXJDYWNoZTsKKysJ CX0KKysJfQorKworKwlbU3lzdGVtLkRpYWdub3N0aWNzLkRlYnVnZ2VyRGlzcGxheSAoIntEaXNw bGF5RGVidWdJbmZvKCl9IildCisrCWNsYXNzIFJlYWRPbmx5UmVmZXJlbmNlQ29udGFpbmVyIDog UmVmZXJlbmNlQ29udGFpbmVyCisrCXsKKysJCXB1YmxpYyBSZWFkT25seVJlZmVyZW5jZUNvbnRh aW5lciAoVHlwZVNwZWMgZWxlbWVudCkKKysJCQk6IGJhc2UgKGVsZW1lbnQpCisrCQl7CisrCQl9 CisrCisrCQlzdHJpbmcgRGlzcGxheURlYnVnSW5mbyAoKQorKwkJeworKwkJCXJldHVybiAicmVm IHJlYWRvbmx5ICIgKyBHZXRTaWduYXR1cmVGb3JFcnJvciAoKTsKKysJCX0KKysKKysJCXB1Ymxp YyBuZXcgc3RhdGljIFJlZmVyZW5jZUNvbnRhaW5lciBNYWtlVHlwZSAoTW9kdWxlQ29udGFpbmVy IG1vZHVsZSwgVHlwZVNwZWMgZWxlbWVudCkKKysJCXsKKysJCQlpZiAoZWxlbWVudC5LaW5kID09 IE1lbWJlcktpbmQuQnlSZWYpCisrCQkJCXRocm93IG5ldyBBcmd1bWVudEV4Y2VwdGlvbiAoKTsK KysKKysJCQlSZWFkT25seVJlZmVyZW5jZUNvbnRhaW5lciBwYzsKKysJCQlpZiAoIW1vZHVsZS5S ZWFkb25seVJlZmVyZW5jZVR5cGVzQ2FjaGUuVHJ5R2V0VmFsdWUgKGVsZW1lbnQsIG91dCBwYykp IHsKKysJCQkJcGMgPSBuZXcgUmVhZE9ubHlSZWZlcmVuY2VDb250YWluZXIgKGVsZW1lbnQpOwor KwkJCQltb2R1bGUuUmVhZG9ubHlSZWZlcmVuY2VUeXBlc0NhY2hlLkFkZCAoZWxlbWVudCwgcGMp OworKwkJCX0KKysKKysJCQlyZXR1cm4gcGM7CisrCQl9CisgCX0KKyAKKyAJY2xhc3MgUG9pbnRl ckNvbnRhaW5lciA6IEVsZW1lbnRUeXBlU3BlYworZGlmZiAtLWdpdCBhL21jcy90ZXN0cy9ndGVz dC00MDkuY3MgYi9tY3MvdGVzdHMvZ3Rlc3QtNDA5LmNzCitpbmRleCA4ZGI1OWQ3ZTQ4ZC4uNjA2 YWUzNjg1ZDEgMTAwNjQ0CistLS0gYS9tY3MvdGVzdHMvZ3Rlc3QtNDA5LmNzCisrKysgYi9tY3Mv dGVzdHMvZ3Rlc3QtNDA5LmNzCitAQCAtMSwzICsxLDQgQEAKKysvLyBDb21waWxlciBvcHRpb25z OiAtbGFuZ3ZlcnNpb246bGF0ZXN0CisgdXNpbmcgU3lzdGVtOworIAorIC8vCitAQCAtMTc1LDYg KzE3NiwxMSBAQCBwdWJsaWMgY2xhc3MgQ29uZGl0aW9uYWxQYXJzaW5nCisgCQl2YXIgeCA9IGFy Z3MgPy4yZiA6IC0uMmY7CisgCX0KKyAKKysJdm9pZCBUZXN0XzIzIChzdHJpbmcgYXJncykKKysJ eworKwkJdmFyIHggPSBhcmdzID09IG51bGwgPyBkZWZhdWx0IDogMTsKKysJfQorKworIAlzdGF0 aWMgdm9pZCBIZWxwZXI8VD4gKFQgYXJnKQorIAl7CisgCX0KK2RpZmYgLS1naXQgYS9tY3MvdGVz dHMvdGVzdC05NDguY3MgYi9tY3MvdGVzdHMvdGVzdC05NDguY3MKK25ldyBmaWxlIG1vZGUgMTAw NjQ0CitpbmRleCAwMDAwMDAwMDAwMC4uMzRiM2FiOWEwYzQKKy0tLSAvZGV2L251bGwKKysrKyBi L21jcy90ZXN0cy90ZXN0LTk0OC5jcworQEAgLTAsMCArMSwxNiBAQAorKy8vIENvbXBpbGVyIG9w dGlvbnM6IC1sYW5ndmVyc2lvbjo3LjIgLXVuc2FmZQorKworK3VzaW5nIFN5c3RlbTsKKysKKytj bGFzcyBYCisreworKwlwdWJsaWMgc3RhdGljIHZvaWQgTWFpbiAoKQorKwl7CisrCQlTcGFuPGlu dD4gc3RhY2tTcGFuID0gc3RhY2thbGxvYyBpbnRbMTAwXTsKKysJfQorKworKwl1bnNhZmUgdm9p ZCBGb28gKCkKKysJeworKworKwl9CisrfQorXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCitk aWZmIC0tZ2l0IGEvbWNzL3Rlc3RzL3Rlc3QtYXN5bmMtOTQuY3MgYi9tY3MvdGVzdHMvdGVzdC1h c3luYy05NC5jcworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAwMDAwLi5jZTlh MzA0MDliYgorLS0tIC9kZXYvbnVsbAorKysrIGIvbWNzL3Rlc3RzL3Rlc3QtYXN5bmMtOTQuY3MK K0BAIC0wLDAgKzEsMTI3IEBACisrdXNpbmcgU3lzdGVtOworK3VzaW5nIFN5c3RlbS5UaHJlYWRp bmcuVGFza3M7CisrdXNpbmcgU3lzdGVtLlJ1bnRpbWUuQ29tcGlsZXJTZXJ2aWNlczsKKysKKytb QXN5bmNNZXRob2RCdWlsZGVyICh0eXBlb2YoTXlUYXNrTWV0aG9kQnVpbGRlcjw+KSldCisrY2xh c3MgTXlUYXNrPFQ+CisreworK30KKysKKytbQXN5bmNNZXRob2RCdWlsZGVyICh0eXBlb2YoTXlU YXNrTWV0aG9kQnVpbGRlcikpXQorK2NsYXNzIE15VGFzaworK3sKKyt9CisrCisrY2xhc3MgTXlU YXNrTWV0aG9kQnVpbGRlcgorK3sKKysJcHVibGljIHN0YXRpYyBNeVRhc2tNZXRob2RCdWlsZGVy IENyZWF0ZSgpCisrCXsKKysJCXJldHVybiBudWxsOworKwl9CisrCisrCXB1YmxpYyBNeVRhc2sg VGFzayB7CisrCQlnZXQgeworKwkJCXJldHVybiBudWxsOworKwkJfQorKwl9CisrCisrCXB1Ymxp YyB2b2lkIFNldEV4Y2VwdGlvbiAoRXhjZXB0aW9uIGV4Y2VwdGlvbikKKysJeworKworKwl9Cisr CisrCXB1YmxpYyB2b2lkIFNldFJlc3VsdCAoKQorKwl7CisrCisrCX0KKysKKysJcHVibGljIHZv aWQgQXdhaXRPbkNvbXBsZXRlZDxUQXdhaXRlciwgVFN0YXRlTWFjaGluZT4gKHJlZiBUQXdhaXRl ciBhd2FpdGVyLCByZWYgVFN0YXRlTWFjaGluZSBzdGF0ZU1hY2hpbmUpIHdoZXJlIFRBd2FpdGVy IDogSU5vdGlmeUNvbXBsZXRpb24gd2hlcmUgVFN0YXRlTWFjaGluZSA6IElBc3luY1N0YXRlTWFj aGluZQorKwl7CisrCisrCX0KKysKKysJcHVibGljIHZvaWQgQXdhaXRVbnNhZmVPbkNvbXBsZXRl ZDxUQXdhaXRlciwgVFN0YXRlTWFjaGluZT4gKHJlZiBUQXdhaXRlciBhd2FpdGVyLCByZWYgVFN0 YXRlTWFjaGluZSBzdGF0ZU1hY2hpbmUpIHdoZXJlIFRBd2FpdGVyIDogSUNyaXRpY2FsTm90aWZ5 Q29tcGxldGlvbiB3aGVyZSBUU3RhdGVNYWNoaW5lIDogSUFzeW5jU3RhdGVNYWNoaW5lCisrCXsK KysKKysJfQorKworKwlwdWJsaWMgdm9pZCBTdGFydDxUU3RhdGVNYWNoaW5lPiAocmVmIFRTdGF0 ZU1hY2hpbmUgc3RhdGVNYWNoaW5lKSB3aGVyZSBUU3RhdGVNYWNoaW5lIDogSUFzeW5jU3RhdGVN YWNoaW5lCisrCXsKKysKKysJfQorKworKwlwdWJsaWMgdm9pZCBTZXRTdGF0ZU1hY2hpbmUgKElB c3luY1N0YXRlTWFjaGluZSBzdGF0ZU1hY2hpbmUpCisrCXsKKysKKysJfQkKKyt9CisrCisrY2xh c3MgTXlUYXNrTWV0aG9kQnVpbGRlcjxUPgorK3sKKysJcHVibGljIHN0YXRpYyBNeVRhc2tNZXRo b2RCdWlsZGVyPFQ+IENyZWF0ZSgpCisrCXsKKysJCXJldHVybiBudWxsOworKwl9CisrCisrCXB1 YmxpYyBNeVRhc2s8VD4gVGFzayB7CisrCQlnZXQgeworKwkJCXJldHVybiBudWxsOworKwkJfQor Kwl9CisrCisrCXB1YmxpYyB2b2lkIFNldEV4Y2VwdGlvbiAoRXhjZXB0aW9uIGV4Y2VwdGlvbikK KysJeworKworKwl9CisrCisrCXB1YmxpYyB2b2lkIFNldFJlc3VsdCAoVCByZXN1bHQpCisrCXsK KysKKysJfQorKworKwlwdWJsaWMgdm9pZCBBd2FpdE9uQ29tcGxldGVkPFRBd2FpdGVyLCBUU3Rh dGVNYWNoaW5lPiAocmVmIFRBd2FpdGVyIGF3YWl0ZXIsIHJlZiBUU3RhdGVNYWNoaW5lIHN0YXRl TWFjaGluZSkgd2hlcmUgVEF3YWl0ZXIgOiBJTm90aWZ5Q29tcGxldGlvbiB3aGVyZSBUU3RhdGVN YWNoaW5lIDogSUFzeW5jU3RhdGVNYWNoaW5lCisrCXsKKysKKysJfQorKworKwlwdWJsaWMgdm9p ZCBBd2FpdFVuc2FmZU9uQ29tcGxldGVkPFRBd2FpdGVyLCBUU3RhdGVNYWNoaW5lPiAocmVmIFRB d2FpdGVyIGF3YWl0ZXIsIHJlZiBUU3RhdGVNYWNoaW5lIHN0YXRlTWFjaGluZSkgd2hlcmUgVEF3 YWl0ZXIgOiBJQ3JpdGljYWxOb3RpZnlDb21wbGV0aW9uIHdoZXJlIFRTdGF0ZU1hY2hpbmUgOiBJ QXN5bmNTdGF0ZU1hY2hpbmUKKysJeworKworKwl9CisrCisrCXB1YmxpYyB2b2lkIFN0YXJ0PFRT dGF0ZU1hY2hpbmU+IChyZWYgVFN0YXRlTWFjaGluZSBzdGF0ZU1hY2hpbmUpIHdoZXJlIFRTdGF0 ZU1hY2hpbmUgOiBJQXN5bmNTdGF0ZU1hY2hpbmUKKysJeworKworKwl9CisrCisrCXB1YmxpYyB2 b2lkIFNldFN0YXRlTWFjaGluZSAoSUFzeW5jU3RhdGVNYWNoaW5lIHN0YXRlTWFjaGluZSkKKysJ eworKworKwl9CisrfQorKworK2NsYXNzIFgKKyt7CisrCXB1YmxpYyBhc3luYyBNeVRhc2sgVGVz dCAoKQorKwl7CisrCQlhd2FpdCBUYXNrLkRlbGF5ICgxKTsKKysJfQorKworKwlwdWJsaWMgYXN5 bmMgTXlUYXNrPGludD4gVGVzdDIgKCkKKysJeworKwkJYXdhaXQgVGFzay5EZWxheSAoMSk7Cisr CQlyZXR1cm4gMjsKKysJfQorKworKwlwdWJsaWMgYXN5bmMgVmFsdWVUYXNrPHN0cmluZz4gVGVz dDMgKCkKKysJeworKwkJYXdhaXQgVGFzay5EZWxheSAoMSk7CisrCQlyZXR1cm4gImFzIjsKKysJ fQkKKysKKysJcHVibGljIHN0YXRpYyB2b2lkIE1haW4gKCkKKysJeworKwkJdmFyIHggPSBuZXcg WCAoKTsKKysJCXZhciByMSA9IHguVGVzdDMgKCkuUmVzdWx0OworKwl9CisrfQorXCBObyBuZXds aW5lIGF0IGVuZCBvZiBmaWxlCitkaWZmIC0tZ2l0IGEvbWNzL3Rlc3RzL3Rlc3QtZGVmYXVsdC0w MS5jcyBiL21jcy90ZXN0cy90ZXN0LWRlZmF1bHQtMDEuY3MKK25ldyBmaWxlIG1vZGUgMTAwNjQ0 CitpbmRleCAwMDAwMDAwMDAwMC4uODIzZTMzYzQ1MWIKKy0tLSAvZGV2L251bGwKKysrKyBiL21j cy90ZXN0cy90ZXN0LWRlZmF1bHQtMDEuY3MKK0BAIC0wLDAgKzEsNTIgQEAKKysvLyBDb21waWxl ciBvcHRpb25zOiAtbGFuZ3ZlcnNpb246bGF0ZXN0CisrCisrc3RhdGljIGNsYXNzIFgKKyt7Cisr CWNvbnN0IGludCBjMSA9IGRlZmF1bHQ7CisrCWNvbnN0IGludCBjMiA9IGRlZmF1bHQgKGludCk7 CisrCisrCXB1YmxpYyBzdGF0aWMgdm9pZCBNYWluICgpCisrCXsKKysJCWludCBhID0gZGVmYXVs dDsKKysJCXZhciBiID0gKGludCkgZGVmYXVsdDsKKysJCWNvbnN0IGludCBjID0gZGVmYXVsdDsK KysJCXZhciBkID0gbmV3W10geyAxLCBkZWZhdWx0IH07CisrCQlkeW5hbWljIGUgPSBkZWZhdWx0 OworKwkJaW50IGYgPSBjaGVja2VkIChkZWZhdWx0KTsKKysJCShpbnQgYSwgaW50IGIpIGcgPSAo MSwgZGVmYXVsdCk7CisrCQl2YXIgaCA9IDEgIT0gZGVmYXVsdDsKKysJCXZhciBpID0gZGVmYXVs dCA9PSBNNCAoKTsKKysJfQorKworKwlzdGF0aWMgaW50IE0xICgpCisrCXsKKysJCXJldHVybiBk ZWZhdWx0OworKwl9CisrCisrCXN0YXRpYyB2b2lkIE0yICgpCisrCXsKKysJCXRyeSB7CisrCQkJ dGhyb3cgbmV3IFN5c3RlbS5FeGNlcHRpb24gKCk7CisrCQl9IGNhdGNoIChTeXN0ZW0uRXhjZXB0 aW9uKSB3aGVuIChkZWZhdWx0KSB7CisrCQl9CisrCisrCQlpZiAoZGVmYXVsdCkgewkJCQorKwkJ fQorKwl9CisrCisrCXN0YXRpYyB2b2lkIE0zIChpbnQgeCA9IGRlZmF1bHQpCisrCXsKKysJfQor KworKwlzdGF0aWMgU3lzdGVtLkZ1bmM8aW50PiBNNCAoKQorKwl7CisrCQlyZXR1cm4gKCkgPT4g ZGVmYXVsdDsKKysJfSAKKyt9CisrLyoKKytlbnVtIEUKKyt7CisrCUEgPSBkZWZhdWx0LAorKwlC ID0gZGVmYXVsdCArIDEKKyt9CisrKi8KK1wgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorZGlm ZiAtLWdpdCBhL21jcy90ZXN0cy90ZXN0LWRlZmF1bHQtMDIuY3MgYi9tY3MvdGVzdHMvdGVzdC1k ZWZhdWx0LTAyLmNzCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMDAwMDAuLjAw Mzk3ODJlNWYyCistLS0gL2Rldi9udWxsCisrKysgYi9tY3MvdGVzdHMvdGVzdC1kZWZhdWx0LTAy LmNzCitAQCAtMCwwICsxLDMzIEBACisrLy8gQ29tcGlsZXIgb3B0aW9uczogLWxhbmd2ZXJzaW9u OmxhdGVzdAorKworK2NsYXNzIEMKKyt7CisrCXN0YXRpYyB2b2lkIE1haW4oKQorKwl7CisrCQlN IChkZWZhdWx0LCAxKTsKKysKKysJCU0yIChkZWZhdWx0KTsKKysJCU0yIChudWxsKTsKKysKKysJ CXZhciByZXMgPSBUZXN0IChkZWZhdWx0KTsKKysJfQorKworKworKwlzdGF0aWMgdm9pZCBNPFQ+ IChUIHgsIFQgeSkKKysJeworKwl9CisrCisrCXN0YXRpYyB2b2lkIE0yIChwYXJhbXMgb2JqZWN0 W10geCkKKysJeyAgICAgICAgCisrCX0KKysKKysJc3RhdGljIGJ5dGVbXSBUZXN0IChTPGJ5dGU+ IHgpCisrCXsKKysJCXJldHVybiBudWxsOworKwl9CisrfQorKworK3N0cnVjdCBTPFQ+Cisrewor KworK30KK1wgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorZGlmZiAtLWdpdCBhL21jcy90ZXN0 cy90ZXN0LWRpc2NhcmRzLTAxLmNzIGIvbWNzL3Rlc3RzL3Rlc3QtZGlzY2FyZHMtMDEuY3MKK25l dyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwMDAwMC4uNTRjZjI5Nzc5YzYKKy0tLSAv ZGV2L251bGwKKysrKyBiL21jcy90ZXN0cy90ZXN0LWRpc2NhcmRzLTAxLmNzCitAQCAtMCwwICsx LDM2IEBACisrdXNpbmcgU3lzdGVtOworKworK2NsYXNzIFgKKyt7CisrCXB1YmxpYyBzdGF0aWMg dm9pZCBNYWluICgpCisrCXsKKysJCXN0cmluZyBzID0gbnVsbDsKKysKKysJCV8gPSAxOworKwkJ eworKwkJCWNoYXIgXyA9ICc0JzsKKysJCX0KKysKKysJCV8gPSBUZXN0VmFsdWUgKCk7CisrCisr CQlfID0gXyA9IHM7CisrCisrCQlieXRlIGsxOworKwkJdmFyIHMxID0gKGsxLCBfKSA9ICgxLCBz KTsKKysKKysJCUZ1bmM8b2JqZWN0PiBsMSA9ICgpID0+IF8gPSAoXywgXykgPSAoMSwgcyk7Cisr CisrCQlUcnlHZXRWYWx1ZSAob3V0IF8pOworKwl9CisrCisrCXN0YXRpYyBib29sIFRyeUdldFZh bHVlIChvdXQgaW50IGFyZykKKysJeworKwkJYXJnID0gMzsKKysJCXJldHVybiB0cnVlOworKwl9 CisrCisrCXN0YXRpYyBpbnQgVGVzdFZhbHVlICgpCisrCXsKKysJCXJldHVybiA0OworKwl9Cisr fQorXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCitkaWZmIC0tZ2l0IGEvbWNzL3Rlc3RzL3Rl c3QtbmFtZWQtMTEuY3MgYi9tY3MvdGVzdHMvdGVzdC1uYW1lZC0xMS5jcworbmV3IGZpbGUgbW9k ZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAwMDAwLi5hMDFkMjg4M2I5YworLS0tIC9kZXYvbnVsbAor KysrIGIvbWNzL3Rlc3RzL3Rlc3QtbmFtZWQtMTEuY3MKK0BAIC0wLDAgKzEsMTMgQEAKKysvLyBD b21waWxlciBvcHRpb25zOiAtbGFuZ3ZlcnNpb246Ny4yCisrCisrY2xhc3MgWAorK3sKKysJcHVi bGljIHN0YXRpYyB2b2lkIE1haW4gKCkKKysJeworKwkJVGVzdCAoYXJnOiAxLCAiIik7CisrCX0K KysKKysJc3RhdGljIHZvaWQgVGVzdCAoaW50IGFyZywgc3RyaW5nIHN0cikKKysJeworKwl9Cisr fQorXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCitkaWZmIC0tZ2l0IGEvbWNzL3Rlc3RzL3Rl c3QtcmVhZG9ubHktMDIuY3MgYi9tY3MvdGVzdHMvdGVzdC1yZWFkb25seS0wMi5jcworbmV3IGZp bGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAwMDAwLi4yMzFiOGNkOGZkYQorLS0tIC9kZXYv bnVsbAorKysrIGIvbWNzL3Rlc3RzL3Rlc3QtcmVhZG9ubHktMDIuY3MKK0BAIC0wLDAgKzEsMjcg QEAKKysvLyBDb21waWxlciBvcHRpb25zOiAtbGFuZ3ZlcnNpb246bGF0ZXN0CisrdXNpbmcgU3lz dGVtOworKworK3B1YmxpYyBkZWxlZ2F0ZSByZWYgcmVhZG9ubHkgaW50IEQgKGludCB4KTsKKysK KytjbGFzcyBYCisreworKwlwdWJsaWMgc3RhdGljIHZvaWQgTWFpbiAoKQorKwl7CisrCisrCX0K KysKKysJR3VpZCBnOworKworKwlyZWYgcmVhZG9ubHkgR3VpZCBUZXN0TWV0aG9kICgpCisrCXsK KysJCXJldHVybiByZWYgZzsKKysJfQorKworKwlyZWYgcmVhZG9ubHkgR3VpZCBUZXN0UHJvcCB7 CisrCQlnZXQgeworKwkJCXJlZiByZWFkb25seSB2YXIgcmcgPSByZWYgZzsKKysJCQlyZXR1cm4g cmVmIHJnOworKwkJfQorKwl9CQorKworK30KK1wgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQor ZGlmZiAtLWdpdCBhL21jcy90ZXN0cy90ZXN0LXJlYWRvbmx5LTAzLmNzIGIvbWNzL3Rlc3RzL3Rl c3QtcmVhZG9ubHktMDMuY3MKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwMDAw MC4uMTRjYjk1OGI0MWEKKy0tLSAvZGV2L251bGwKKysrKyBiL21jcy90ZXN0cy90ZXN0LXJlYWRv bmx5LTAzLmNzCitAQCAtMCwwICsxLDE2IEBACisrLy8gQ29tcGlsZXIgb3B0aW9uczogLWxhbmd2 ZXJzaW9uOmxhdGVzdAorK3VzaW5nIFN5c3RlbTsKKysKKytyZWFkb25seSBzdHJ1Y3QgUworK3sK KysJc3RhdGljIFMgc2hhcmVkID0gbmV3IFMgKCk7CisrCisrCXB1YmxpYyBTIChpbnQgYXJnKQor Kwl7CisrCQl0aGlzID0gc2hhcmVkOworKwl9CisrCisrCXB1YmxpYyBzdGF0aWMgdm9pZCBNYWlu ICgpCisrCXsKKysJfQorK30KK1wgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorZGlmZiAtLWdp dCBhL21jcy90ZXN0cy90ZXN0LXJlZi0wNy5jcyBiL21jcy90ZXN0cy90ZXN0LXJlZi0wNy5jcwor bmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAwMDAwLi40YWExNjU3OTc1MgorLS0t IC9kZXYvbnVsbAorKysrIGIvbWNzL3Rlc3RzL3Rlc3QtcmVmLTA3LmNzCitAQCAtMCwwICsxLDMw IEBACisrLy8gQ29tcGlsZXIgb3B0aW9uczogLWxhbmd2ZXJzaW9uOmxhdGVzdAorKworK3B1Ymxp YyByZWFkb25seSBwYXJ0aWFsIHJlZiBzdHJ1Y3QgVGVzdAorK3sKKysJcHVibGljIHN0YXRpYyB2 b2lkIE1haW4gKCkKKysJeworKwkJdmFyIG0gPSBuZXcgVGVzdCAoKTsKKysJCW0uTWV0aG9kICgp OworKwl9CisrCisrCVRlc3QgTWV0aG9kICgpCisrCXsKKysJCXJldHVybiBuZXcgVGVzdCAoKTsK KysJfQorK30KKysKKytyZWYgc3RydWN0IFNlY29uZAorK3sKKysJVGVzdCBmaWVsZDsKKyt9Cisr CisrcHVibGljIGFic3RyYWN0IGNsYXNzIFAKKyt7CisrCXB1YmxpYyBhYnN0cmFjdCBUZXN0IFNw YW4geyBnZXQ7IH0KKyt9CisrCisrcHVibGljIGludGVyZmFjZSBJSQorK3sKKysJVGVzdCBTcGFu IHsgZ2V0OyB9CisrfQorZGlmZiAtLWdpdCBhL21jcy90ZXN0cy90ZXN0LXJlZi0wOC5jcyBiL21j cy90ZXN0cy90ZXN0LXJlZi0wOC5jcworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAw MDAwMDAwLi5mNGZmNTBmNGM1YworLS0tIC9kZXYvbnVsbAorKysrIGIvbWNzL3Rlc3RzL3Rlc3Qt cmVmLTA4LmNzCitAQCAtMCwwICsxLDEwMSBAQAorK3VzaW5nIFN5c3RlbTsKKysKKytuYW1lc3Bh Y2UgQ2xhc3NMaWJyYXJ5MQorK3sKKysJcHVibGljIGNsYXNzIEMKKysJeworKworKwkJY2xhc3Mg QgorKwkJeworKwkJCWludCB2OworKwkJCXB1YmxpYyByZWYgaW50IHRoaXNbaW50IGluZGV4XQor KwkJCXsKKysJCQkJZ2V0CisrCQkJCXsKKysJCQkJCXJldHVybiByZWYgdjsKKysJCQkJfQorKwkJ CX0KKysJCX0KKysKKysKKysJCWNsYXNzIEdlbjxUPiB3aGVyZSBUIDogc3RydWN0CisrCQl7Cisr CQkJVCB2OworKwkJCXB1YmxpYyByZWYgVCB0aGlzW2ludCBpbmRleF0KKysJCQl7CisrCQkJCWdl dAorKwkJCQl7CisrCQkJCQlyZXR1cm4gcmVmIHY7CisrCQkJCX0KKysJCQl9CisrCQl9CisrCisr CQlzdHJ1Y3QgVmFsCisrCQl7CisrCQl9CisrCisrCQljbGFzcyBCQgorKwkJeworKwkJCVZhbCB2 OworKwkJCXB1YmxpYyByZWYgVmFsIHRoaXNbaW50IGluZGV4XQorKwkJCXsKKysJCQkJZ2V0Cisr CQkJCXsKKysJCQkJCXJldHVybiByZWYgdjsKKysJCQkJfQorKwkJCX0KKysJCX0KKysKKysJCXZv aWQgTU0gKCkKKysJCXsKKysJCQl2YXIgYmJiID0gbmV3IEJCKCk7CisrCQkJVmFsIHYxID0gYmJi WzBdOworKwkJCWJiYlsxXSA9IHYxOworKworKwkJCXJlZiBWYWwgdjIgPSByZWYgYmJiWzJdOwor KwkJCWJiYlsyXSA9IHYyOworKwkJfQorKworKwkJc3RhdGljIGludFtdIGEgPSBuZXcgaW50WzFd OworKwkJcHVibGljIHN0YXRpYyB2b2lkIE1haW4oKQorKwkJeworKwkJCXZhciBiYiA9IG5ldyBC KCk7CisrCQkJaW50IGIgPSAxOworKwkJCWJiWzBdID0gYjsKKysJCQlhWzBdID0gQWRkMihyZWYg YiwgMik7CisrCisrCQkJdmFyIGJiYiA9IG5ldyBCQigpOworKwkJCWJiYlswXSA9IG5ldyBWYWwo KTsKKysKKysJCQl2YXIgdiA9IG5ldyBWYWwoKTsKKysJCQliYmJbMV0gPSB2OworKworKwkJCXZh ciB2MiA9IGJiYlsyXTsKKysKKysJCQliYmJbM10gPSB2MjsKKysKKysKKysJCQliYmJbM10gPSBi YmJbMl07CisrCisrCisrCisrCQkJdmFyIGdnZyA9IG5ldyBHZW48VmFsPigpOworKwkJCWdnZ1sw XSA9IG5ldyBWYWwoKTsKKysKKysJCQl2YXIgZyA9IG5ldyBWYWwoKTsKKysJCQlnZ2dbMV0gPSB2 OworKworKwkJCXZhciBnMiA9IGdnZ1syXTsKKysKKysJCQlnZ2dbM10gPSB2MjsKKysKKysKKysJ CQlnZ2dbM10gPSBnZ2dbMl07CisrCQl9CisrCisrCQlwdWJsaWMgc3RhdGljIHJlZiBpbnQgQWRk MihyZWYgaW50IGEsIGludCBiKQorKwkJeworKwkJCXJldHVybiByZWYgYTsKKysJCX0KKysJfQor K30KK1wgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorZGlmZiAtLWdpdCBhL21jcy90ZXN0cy90 ZXN0LXJlZi0wOS5jcyBiL21jcy90ZXN0cy90ZXN0LXJlZi0wOS5jcworbmV3IGZpbGUgbW9kZSAx MDA2NDQKK2luZGV4IDAwMDAwMDAwMDAwLi41ZDBlODllNWMxYQorLS0tIC9kZXYvbnVsbAorKysr IGIvbWNzL3Rlc3RzL3Rlc3QtcmVmLTA5LmNzCitAQCAtMCwwICsxLDEyIEBACisrc3RydWN0IHJp Z2lkYm9keSB7IHB1YmxpYyBmbG9hdCB4OyB9CisrCisrY2xhc3MgUHJvZ3JhbQorK3sKKysJc3Rh dGljIHJpZ2lkYm9keSBhOworKwlzdGF0aWMgcmVmIHJpZ2lkYm9keSBwcm9wZXJ0eV9yZXR1cm5p bmdfc3RydWN0X2J5X3JlZiA9PiByZWYgYTsKKysKKysJc3RhdGljIHZvaWQgTWFpbigpCisrCXsK KysJCVN5c3RlbS5Db25zb2xlLldyaXRlTGluZSAocHJvcGVydHlfcmV0dXJuaW5nX3N0cnVjdF9i eV9yZWYueCk7CisrCX0KKyt9CitcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKK2RpZmYgLS1n aXQgYS9tY3MvdGVzdHMvdGVzdC1yZWYtMTAuY3MgYi9tY3MvdGVzdHMvdGVzdC1yZWYtMTAuY3MK K25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwMDAwMC4uODhlMjAxZDMxNzQKKy0t LSAvZGV2L251bGwKKysrKyBiL21jcy90ZXN0cy90ZXN0LXJlZi0xMC5jcworQEAgLTAsMCArMSwy NCBAQAorKy8vIENvbXBpbGVyIG9wdGlvbnM6IC1sYW5ndmVyc2lvbjpsYXRlc3QKKysKKyt1c2lu ZyBTeXN0ZW07CisrCisrcmVmIHN0cnVjdCBWYWx1ZVN0cmluZ0J1aWxkZXIKKyt7CisrCXB1Ymxp YyBvdmVycmlkZSBzdHJpbmcgVG9TdHJpbmcgKCkKKysJeworKwkJcmV0dXJuICJhYWEiOworKwl9 CisrfQorKworKworK2NsYXNzIFgKKyt7CisrCXB1YmxpYyBzdGF0aWMgaW50IE1haW4gKCkKKysJ eworKwkJdmFyIHMgPSBuZXcgVmFsdWVTdHJpbmdCdWlsZGVyICgpOworKwkJaWYgKHMuVG9TdHJp bmcgKCkgIT0gImFhYSIpCisrCQkJcmV0dXJuIDE7CisrCisrCQlyZXR1cm4gMDsKKysJfQorK30K K1wgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorZGlmZiAtLWdpdCBhL21jcy90ZXN0cy90ZXN0 LXR1cGxlLTA3LmNzIGIvbWNzL3Rlc3RzL3Rlc3QtdHVwbGUtMDcuY3MKK25ldyBmaWxlIG1vZGUg MTAwNjQ0CitpbmRleCAwMDAwMDAwMDAwMC4uY2M3Y2U1ODM3Y2UKKy0tLSAvZGV2L251bGwKKysr KyBiL21jcy90ZXN0cy90ZXN0LXR1cGxlLTA3LmNzCitAQCAtMCwwICsxLDE2IEBACisrdXNpbmcg U3lzdGVtOworK3VzaW5nIFN5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljOworKworKy8vIFBhcnNl ciB0ZXN0cworKworK2NsYXNzIFBhcnNlclRlc3QKKyt7CisrCUlFbnVtZXJhYmxlPChPYmplY3Qg dmVydGV4LCBpbnQgZGlzdGFuY2UpPiBUZXN0ICgpCisrCXsKKysJCXJldHVybiBudWxsOworKwl9 CisrCisrCXB1YmxpYyBzdGF0aWMgdm9pZCBNYWluICgpCisrCXsJCQorKwl9CisrfQorXCBObyBu ZXdsaW5lIGF0IGVuZCBvZiBmaWxlCitkaWZmIC0tZ2l0IGEvbWNzL3Rlc3RzL3Rlc3QtdHVwbGUt MDkuY3MgYi9tY3MvdGVzdHMvdGVzdC10dXBsZS0wOS5jcworbmV3IGZpbGUgbW9kZSAxMDA2NDQK K2luZGV4IDAwMDAwMDAwMDAwLi4zZjE1Y2FlNmNmMQorLS0tIC9kZXYvbnVsbAorKysrIGIvbWNz L3Rlc3RzL3Rlc3QtdHVwbGUtMDkuY3MKK0BAIC0wLDAgKzEsMTkgQEAKKyt1c2luZyBTeXN0ZW07 CisrCisrY2xhc3MgVHVwbGVEZWNvbnN0cnVjdGlvbkRlY2xhcmF0aW9uCisreworKwlwdWJsaWMg c3RhdGljIGludCBNYWluICgpCisrCXsKKysJCShzdHJpbmcgcywgbG9uZyBsKSA9IEdldFZhbHVl cyAoKTsKKysJCSh2YXIgdnMsIHZhciB2bCkgPSBHZXRWYWx1ZXMgKCk7CisrCQkob2JqZWN0IG8s IHZhciB2bDIpID0gR2V0VmFsdWVzICgpOworKwkJKHN0cmluZyBkcywgXykgPSBHZXRWYWx1ZXMg KCk7CisrCisrCQlyZXR1cm4gMDsKKysJfQorKworKwlzdGF0aWMgKHN0cmluZywgbG9uZykgR2V0 VmFsdWVzICgpCisrCXsKKysJCXJldHVybiAoImEiLCAzKTsKKysJfQorK30KK1wgTm8gbmV3bGlu ZSBhdCBlbmQgb2YgZmlsZQorZGlmZiAtLWdpdCBhL21jcy90ZXN0cy92ZXItaWwtbmV0XzRfeC54 bWwgYi9tY3MvdGVzdHMvdmVyLWlsLW5ldF80X3gueG1sCitpbmRleCBjMmM5ODEyMzMwNS4uNGRi YzcwNDJhOGEgMTAwNjQ0CistLS0gYS9tY3MvdGVzdHMvdmVyLWlsLW5ldF80X3gueG1sCisrKysg Yi9tY3MvdGVzdHMvdmVyLWlsLW5ldF80X3gueG1sCitAQCAtMTQ2NTksNiArMTQ2NTksOSBAQAor ICAgICAgIDxtZXRob2QgbmFtZT0iVm9pZCBUZXN0XzIyKEJvb2xlYW4pIiBhdHRycz0iMTI5Ij4K KyAgICAgICAgIDxzaXplPjI0PC9zaXplPgorICAgICAgIDwvbWV0aG9kPgorKyAgICAgIDxtZXRo b2QgbmFtZT0iVm9pZCBUZXN0XzIzKFN5c3RlbS5TdHJpbmcpIiBhdHRycz0iMTI5Ij4KKysgICAg ICAgIDxzaXplPjE2PC9zaXplPgorKyAgICAgIDwvbWV0aG9kPgorICAgICA8L3R5cGU+CisgICA8 L3Rlc3Q+CisgICA8dGVzdCBuYW1lPSJndGVzdC00MTAuY3MiPgorQEAgLTUyODA4LDYgKzUyODEx LDE5IEBACisgICAgICAgPC9tZXRob2Q+CisgICAgIDwvdHlwZT4KKyAgIDwvdGVzdD4KKysgIDx0 ZXN0IG5hbWU9InRlc3QtOTQ4LmNzIj4KKysgICAgPHR5cGUgbmFtZT0iWCI+CisrICAgICAgPG1l dGhvZCBuYW1lPSJWb2lkIE1haW4oKSIgYXR0cnM9IjE1MCI+CisrICAgICAgICA8c2l6ZT4xNjwv c2l6ZT4KKysgICAgICA8L21ldGhvZD4KKysgICAgICA8bWV0aG9kIG5hbWU9IlZvaWQgRm9vKCki IGF0dHJzPSIxMjkiPgorKyAgICAgICAgPHNpemU+Mjwvc2l6ZT4KKysgICAgICA8L21ldGhvZD4K KysgICAgICA8bWV0aG9kIG5hbWU9IlZvaWQgLmN0b3IoKSIgYXR0cnM9IjYyNzgiPgorKyAgICAg ICAgPHNpemU+Nzwvc2l6ZT4KKysgICAgICA8L21ldGhvZD4KKysgICAgPC90eXBlPgorKyAgPC90 ZXN0PgorICAgPHRlc3QgbmFtZT0idGVzdC05NS5jcyI+CisgICAgIDx0eXBlIG5hbWU9IlgiPgor ICAgICAgIDxtZXRob2QgbmFtZT0iSW50MzIgTWFpbigpIiBhdHRycz0iMTUwIj4KK0BAIC02Njg5 Myw2ICs2NjkwOSwxMTcgQEAKKyAgICAgICA8L21ldGhvZD4KKyAgICAgPC90eXBlPgorICAgPC90 ZXN0PgorKyAgPHRlc3QgbmFtZT0idGVzdC1hc3luYy05NC5jcyI+CisrICAgIDx0eXBlIG5hbWU9 Ik15VGFza2AxW1RdIj4KKysgICAgICA8bWV0aG9kIG5hbWU9IlZvaWQgLmN0b3IoKSIgYXR0cnM9 IjYyNzgiPgorKyAgICAgICAgPHNpemU+Nzwvc2l6ZT4KKysgICAgICA8L21ldGhvZD4KKysgICAg PC90eXBlPgorKyAgICA8dHlwZSBuYW1lPSJNeVRhc2siPgorKyAgICAgIDxtZXRob2QgbmFtZT0i Vm9pZCAuY3RvcigpIiBhdHRycz0iNjI3OCI+CisrICAgICAgICA8c2l6ZT43PC9zaXplPgorKyAg ICAgIDwvbWV0aG9kPgorKyAgICA8L3R5cGU+CisrICAgIDx0eXBlIG5hbWU9Ik15VGFza01ldGhv ZEJ1aWxkZXIiPgorKyAgICAgIDxtZXRob2QgbmFtZT0iTXlUYXNrTWV0aG9kQnVpbGRlciBDcmVh dGUoKSIgYXR0cnM9IjE1MCI+CisrICAgICAgICA8c2l6ZT4xMDwvc2l6ZT4KKysgICAgICA8L21l dGhvZD4KKysgICAgICA8bWV0aG9kIG5hbWU9Ik15VGFzayBnZXRfVGFzaygpIiBhdHRycz0iMjE4 MiI+CisrICAgICAgICA8c2l6ZT4xMDwvc2l6ZT4KKysgICAgICA8L21ldGhvZD4KKysgICAgICA8 bWV0aG9kIG5hbWU9IlZvaWQgU2V0RXhjZXB0aW9uKFN5c3RlbS5FeGNlcHRpb24pIiBhdHRycz0i MTM0Ij4KKysgICAgICAgIDxzaXplPjI8L3NpemU+CisrICAgICAgPC9tZXRob2Q+CisrICAgICAg PG1ldGhvZCBuYW1lPSJWb2lkIFNldFJlc3VsdCgpIiBhdHRycz0iMTM0Ij4KKysgICAgICAgIDxz aXplPjI8L3NpemU+CisrICAgICAgPC9tZXRob2Q+CisrICAgICAgPG1ldGhvZCBuYW1lPSJWb2lk IEF3YWl0T25Db21wbGV0ZWRbVEF3YWl0ZXIsVFN0YXRlTWFjaGluZV0oVEF3YWl0ZXIgQnlSZWYs IFRTdGF0ZU1hY2hpbmUgQnlSZWYpIiBhdHRycz0iMTM0Ij4KKysgICAgICAgIDxzaXplPjI8L3Np emU+CisrICAgICAgPC9tZXRob2Q+CisrICAgICAgPG1ldGhvZCBuYW1lPSJWb2lkIEF3YWl0VW5z YWZlT25Db21wbGV0ZWRbVEF3YWl0ZXIsVFN0YXRlTWFjaGluZV0oVEF3YWl0ZXIgQnlSZWYsIFRT dGF0ZU1hY2hpbmUgQnlSZWYpIiBhdHRycz0iMTM0Ij4KKysgICAgICAgIDxzaXplPjI8L3NpemU+ CisrICAgICAgPC9tZXRob2Q+CisrICAgICAgPG1ldGhvZCBuYW1lPSJWb2lkIFN0YXJ0W1RTdGF0 ZU1hY2hpbmVdKFRTdGF0ZU1hY2hpbmUgQnlSZWYpIiBhdHRycz0iMTM0Ij4KKysgICAgICAgIDxz aXplPjI8L3NpemU+CisrICAgICAgPC9tZXRob2Q+CisrICAgICAgPG1ldGhvZCBuYW1lPSJWb2lk IFNldFN0YXRlTWFjaGluZShTeXN0ZW0uUnVudGltZS5Db21waWxlclNlcnZpY2VzLklBc3luY1N0 YXRlTWFjaGluZSkiIGF0dHJzPSIxMzQiPgorKyAgICAgICAgPHNpemU+Mjwvc2l6ZT4KKysgICAg ICA8L21ldGhvZD4KKysgICAgICA8bWV0aG9kIG5hbWU9IlZvaWQgLmN0b3IoKSIgYXR0cnM9IjYy NzgiPgorKyAgICAgICAgPHNpemU+Nzwvc2l6ZT4KKysgICAgICA8L21ldGhvZD4KKysgICAgPC90 eXBlPgorKyAgICA8dHlwZSBuYW1lPSJNeVRhc2tNZXRob2RCdWlsZGVyYDFbVF0iPgorKyAgICAg IDxtZXRob2QgbmFtZT0iTXlUYXNrTWV0aG9kQnVpbGRlcmAxW1RdIENyZWF0ZSgpIiBhdHRycz0i MTUwIj4KKysgICAgICAgIDxzaXplPjEwPC9zaXplPgorKyAgICAgIDwvbWV0aG9kPgorKyAgICAg IDxtZXRob2QgbmFtZT0iTXlUYXNrYDFbVF0gZ2V0X1Rhc2soKSIgYXR0cnM9IjIxODIiPgorKyAg ICAgICAgPHNpemU+MTA8L3NpemU+CisrICAgICAgPC9tZXRob2Q+CisrICAgICAgPG1ldGhvZCBu YW1lPSJWb2lkIFNldEV4Y2VwdGlvbihTeXN0ZW0uRXhjZXB0aW9uKSIgYXR0cnM9IjEzNCI+Cisr ICAgICAgICA8c2l6ZT4yPC9zaXplPgorKyAgICAgIDwvbWV0aG9kPgorKyAgICAgIDxtZXRob2Qg bmFtZT0iVm9pZCBTZXRSZXN1bHQoVCkiIGF0dHJzPSIxMzQiPgorKyAgICAgICAgPHNpemU+Mjwv c2l6ZT4KKysgICAgICA8L21ldGhvZD4KKysgICAgICA8bWV0aG9kIG5hbWU9IlZvaWQgQXdhaXRP bkNvbXBsZXRlZFtUQXdhaXRlcixUU3RhdGVNYWNoaW5lXShUQXdhaXRlciBCeVJlZiwgVFN0YXRl TWFjaGluZSBCeVJlZikiIGF0dHJzPSIxMzQiPgorKyAgICAgICAgPHNpemU+Mjwvc2l6ZT4KKysg ICAgICA8L21ldGhvZD4KKysgICAgICA8bWV0aG9kIG5hbWU9IlZvaWQgQXdhaXRVbnNhZmVPbkNv bXBsZXRlZFtUQXdhaXRlcixUU3RhdGVNYWNoaW5lXShUQXdhaXRlciBCeVJlZiwgVFN0YXRlTWFj aGluZSBCeVJlZikiIGF0dHJzPSIxMzQiPgorKyAgICAgICAgPHNpemU+Mjwvc2l6ZT4KKysgICAg ICA8L21ldGhvZD4KKysgICAgICA8bWV0aG9kIG5hbWU9IlZvaWQgU3RhcnRbVFN0YXRlTWFjaGlu ZV0oVFN0YXRlTWFjaGluZSBCeVJlZikiIGF0dHJzPSIxMzQiPgorKyAgICAgICAgPHNpemU+Mjwv c2l6ZT4KKysgICAgICA8L21ldGhvZD4KKysgICAgICA8bWV0aG9kIG5hbWU9IlZvaWQgU2V0U3Rh dGVNYWNoaW5lKFN5c3RlbS5SdW50aW1lLkNvbXBpbGVyU2VydmljZXMuSUFzeW5jU3RhdGVNYWNo aW5lKSIgYXR0cnM9IjEzNCI+CisrICAgICAgICA8c2l6ZT4yPC9zaXplPgorKyAgICAgIDwvbWV0 aG9kPgorKyAgICAgIDxtZXRob2QgbmFtZT0iVm9pZCAuY3RvcigpIiBhdHRycz0iNjI3OCI+Cisr ICAgICAgICA8c2l6ZT43PC9zaXplPgorKyAgICAgIDwvbWV0aG9kPgorKyAgICA8L3R5cGU+Cisr ICAgIDx0eXBlIG5hbWU9IlgiPgorKyAgICAgIDxtZXRob2QgbmFtZT0iTXlUYXNrIFRlc3QoKSIg YXR0cnM9IjEzNCI+CisrICAgICAgICA8c2l6ZT4zMzwvc2l6ZT4KKysgICAgICA8L21ldGhvZD4K KysgICAgICA8bWV0aG9kIG5hbWU9Ik15VGFza2AxW1N5c3RlbS5JbnQzMl0gVGVzdDIoKSIgYXR0 cnM9IjEzNCI+CisrICAgICAgICA8c2l6ZT4zMzwvc2l6ZT4KKysgICAgICA8L21ldGhvZD4KKysg ICAgICA8bWV0aG9kIG5hbWU9IlN5c3RlbS5UaHJlYWRpbmcuVGFza3MuVmFsdWVUYXNrYDFbU3lz dGVtLlN0cmluZ10gVGVzdDMoKSIgYXR0cnM9IjEzNCI+CisrICAgICAgICA8c2l6ZT4zMzwvc2l6 ZT4KKysgICAgICA8L21ldGhvZD4KKysgICAgICA8bWV0aG9kIG5hbWU9IlZvaWQgTWFpbigpIiBh dHRycz0iMTUwIj4KKysgICAgICAgIDxzaXplPjIzPC9zaXplPgorKyAgICAgIDwvbWV0aG9kPgor KyAgICAgIDxtZXRob2QgbmFtZT0iVm9pZCAuY3RvcigpIiBhdHRycz0iNjI3OCI+CisrICAgICAg ICA8c2l6ZT43PC9zaXplPgorKyAgICAgIDwvbWV0aG9kPgorKyAgICA8L3R5cGU+CisrICAgIDx0 eXBlIG5hbWU9IlgrJmx0O1Rlc3QmZ3Q7Y19fYXN5bmMwIj4KKysgICAgICA8bWV0aG9kIG5hbWU9 IlZvaWQgTW92ZU5leHQoKSIgYXR0cnM9IjQ4NiI+CisrICAgICAgICA8c2l6ZT4xNTc8L3NpemU+ CisrICAgICAgPC9tZXRob2Q+CisrICAgICAgPG1ldGhvZCBuYW1lPSJWb2lkIFNldFN0YXRlTWFj aGluZShTeXN0ZW0uUnVudGltZS5Db21waWxlclNlcnZpY2VzLklBc3luY1N0YXRlTWFjaGluZSki IGF0dHJzPSI0ODYiPgorKyAgICAgICAgPHNpemU+MTM8L3NpemU+CisrICAgICAgPC9tZXRob2Q+ CisrICAgIDwvdHlwZT4KKysgICAgPHR5cGUgbmFtZT0iWCsmbHQ7VGVzdDImZ3Q7Y19fYXN5bmMx Ij4KKysgICAgICA8bWV0aG9kIG5hbWU9IlZvaWQgTW92ZU5leHQoKSIgYXR0cnM9IjQ4NiI+Cisr ICAgICAgICA8c2l6ZT4xNjU8L3NpemU+CisrICAgICAgPC9tZXRob2Q+CisrICAgICAgPG1ldGhv ZCBuYW1lPSJWb2lkIFNldFN0YXRlTWFjaGluZShTeXN0ZW0uUnVudGltZS5Db21waWxlclNlcnZp Y2VzLklBc3luY1N0YXRlTWFjaGluZSkiIGF0dHJzPSI0ODYiPgorKyAgICAgICAgPHNpemU+MTM8 L3NpemU+CisrICAgICAgPC9tZXRob2Q+CisrICAgIDwvdHlwZT4KKysgICAgPHR5cGUgbmFtZT0i WCsmbHQ7VGVzdDMmZ3Q7Y19fYXN5bmMyIj4KKysgICAgICA8bWV0aG9kIG5hbWU9IlZvaWQgTW92 ZU5leHQoKSIgYXR0cnM9IjQ4NiI+CisrICAgICAgICA8c2l6ZT4xNjk8L3NpemU+CisrICAgICAg PC9tZXRob2Q+CisrICAgICAgPG1ldGhvZCBuYW1lPSJWb2lkIFNldFN0YXRlTWFjaGluZShTeXN0 ZW0uUnVudGltZS5Db21waWxlclNlcnZpY2VzLklBc3luY1N0YXRlTWFjaGluZSkiIGF0dHJzPSI0 ODYiPgorKyAgICAgICAgPHNpemU+MTM8L3NpemU+CisrICAgICAgPC9tZXRob2Q+CisrICAgIDwv dHlwZT4KKysgIDwvdGVzdD4KKyAgIDx0ZXN0IG5hbWU9InRlc3QtY2xzLTAwLmNzIj4KKyAgICAg PHR5cGUgbmFtZT0iQ0xTQ0xhc3NfNiI+CisgICAgICAgPG1ldGhvZCBuYW1lPSJWb2lkIGFkZF9E aXNwb3NlZChEZWxlZ2F0ZSkiIGF0dHJzPSIyMTgyIj4KK0BAIC02ODUyNyw2ICs2ODY1NCw0NyBA QAorICAgICAgIDwvbWV0aG9kPgorICAgICA8L3R5cGU+CisgICA8L3Rlc3Q+CisrICA8dGVzdCBu YW1lPSJ0ZXN0LWRlZmF1bHQtMDEuY3MiPgorKyAgICA8dHlwZSBuYW1lPSJYIj4KKysgICAgICA8 bWV0aG9kIG5hbWU9IlZvaWQgTWFpbigpIiBhdHRycz0iMTUwIj4KKysgICAgICAgIDxzaXplPjUz PC9zaXplPgorKyAgICAgIDwvbWV0aG9kPgorKyAgICAgIDxtZXRob2QgbmFtZT0iSW50MzIgTTEo KSIgYXR0cnM9IjE0NSI+CisrICAgICAgICA8c2l6ZT4xMDwvc2l6ZT4KKysgICAgICA8L21ldGhv ZD4KKysgICAgICA8bWV0aG9kIG5hbWU9IlZvaWQgTTIoKSIgYXR0cnM9IjE0NSI+CisrICAgICAg ICA8c2l6ZT4zMTwvc2l6ZT4KKysgICAgICA8L21ldGhvZD4KKysgICAgICA8bWV0aG9kIG5hbWU9 IlZvaWQgTTMoSW50MzIpIiBhdHRycz0iMTQ1Ij4KKysgICAgICAgIDxzaXplPjI8L3NpemU+Cisr ICAgICAgPC9tZXRob2Q+CisrICAgICAgPG1ldGhvZCBuYW1lPSJTeXN0ZW0uRnVuY2AxW1N5c3Rl bS5JbnQzMl0gTTQoKSIgYXR0cnM9IjE0NSI+CisrICAgICAgICA8c2l6ZT4zODwvc2l6ZT4KKysg ICAgICA8L21ldGhvZD4KKysgICAgICA8bWV0aG9kIG5hbWU9IkludDMyICZsdDtNNCZndDttX18w KCkiIGF0dHJzPSIxNDUiPgorKyAgICAgICAgPHNpemU+OTwvc2l6ZT4KKysgICAgICA8L21ldGhv ZD4KKysgICAgPC90eXBlPgorKyAgPC90ZXN0PgorKyAgPHRlc3QgbmFtZT0idGVzdC1kZWZhdWx0 LTAyLmNzIj4KKysgICAgPHR5cGUgbmFtZT0iQyI+CisrICAgICAgPG1ldGhvZCBuYW1lPSJWb2lk IE1haW4oKSIgYXR0cnM9IjE0NSI+CisrICAgICAgICA8c2l6ZT4zNjwvc2l6ZT4KKysgICAgICA8 L21ldGhvZD4KKysgICAgICA8bWV0aG9kIG5hbWU9IlZvaWQgTVtUXShULCBUKSIgYXR0cnM9IjE0 NSI+CisrICAgICAgICA8c2l6ZT4yPC9zaXplPgorKyAgICAgIDwvbWV0aG9kPgorKyAgICAgIDxt ZXRob2QgbmFtZT0iVm9pZCBNMihTeXN0ZW0uT2JqZWN0W10pIiBhdHRycz0iMTQ1Ij4KKysgICAg ICAgIDxzaXplPjI8L3NpemU+CisrICAgICAgPC9tZXRob2Q+CisrICAgICAgPG1ldGhvZCBuYW1l PSJWb2lkIC5jdG9yKCkiIGF0dHJzPSI2Mjc4Ij4KKysgICAgICAgIDxzaXplPjc8L3NpemU+Cisr ICAgICAgPC9tZXRob2Q+CisrICAgICAgPG1ldGhvZCBuYW1lPSJCeXRlW10gVGVzdChTYDFbU3lz dGVtLkJ5dGVdKSIgYXR0cnM9IjE0NSI+CisrICAgICAgICA8c2l6ZT4xMDwvc2l6ZT4KKysgICAg ICA8L21ldGhvZD4KKysgICAgPC90eXBlPgorKyAgPC90ZXN0PgorICAgPHRlc3QgbmFtZT0idGVz dC1kaWN0aW5pdC0wMS5jcyI+CisgICAgIDx0eXBlIG5hbWU9IlByb2dyYW0iPgorICAgICAgIDxt ZXRob2QgbmFtZT0iSW50MzIgTWFpbigpIiBhdHRycz0iMTQ1Ij4KK0BAIC02ODYxMCw2ICs2ODc3 OCwzMCBAQAorICAgICAgIDwvbWV0aG9kPgorICAgICA8L3R5cGU+CisgICA8L3Rlc3Q+CisrICA8 dGVzdCBuYW1lPSJ0ZXN0LWRpc2NhcmRzLTAxLmNzIj4KKysgICAgPHR5cGUgbmFtZT0iWCI+Cisr ICAgICAgPG1ldGhvZCBuYW1lPSJWb2lkIE1haW4oKSIgYXR0cnM9IjE1MCI+CisrICAgICAgICA8 c2l6ZT42Mzwvc2l6ZT4KKysgICAgICA8L21ldGhvZD4KKysgICAgICA8bWV0aG9kIG5hbWU9IkJv b2xlYW4gVHJ5R2V0VmFsdWUoSW50MzIgQnlSZWYpIiBhdHRycz0iMTQ1Ij4KKysgICAgICAgIDxz aXplPjEzPC9zaXplPgorKyAgICAgIDwvbWV0aG9kPgorKyAgICAgIDxtZXRob2QgbmFtZT0iSW50 MzIgVGVzdFZhbHVlKCkiIGF0dHJzPSIxNDUiPgorKyAgICAgICAgPHNpemU+MTA8L3NpemU+Cisr ICAgICAgPC9tZXRob2Q+CisrICAgICAgPG1ldGhvZCBuYW1lPSJWb2lkIC5jdG9yKCkiIGF0dHJz PSI2Mjc4Ij4KKysgICAgICAgIDxzaXplPjc8L3NpemU+CisrICAgICAgPC9tZXRob2Q+CisrICAg IDwvdHlwZT4KKysgICAgPHR5cGUgbmFtZT0iWCsmbHQ7TWFpbiZndDtjX19Bbm9uU3RvcmV5MCI+ CisrICAgICAgPG1ldGhvZCBuYW1lPSJTeXN0ZW0uT2JqZWN0ICZsdDsmZ3Q7bV9fMCgpIiBhdHRy cz0iMTMxIj4KKysgICAgICAgIDxzaXplPjI1PC9zaXplPgorKyAgICAgIDwvbWV0aG9kPgorKyAg ICAgIDxtZXRob2QgbmFtZT0iVm9pZCAuY3RvcigpIiBhdHRycz0iNjI3OCI+CisrICAgICAgICA8 c2l6ZT43PC9zaXplPgorKyAgICAgIDwvbWV0aG9kPgorKyAgICA8L3R5cGU+CisrICA8L3Rlc3Q+ CisgICA8dGVzdCBuYW1lPSJ0ZXN0LWV4LWZpbHRlci0wMS5jcyI+CisgICAgIDx0eXBlIG5hbWU9 IlgiPgorICAgICAgIDxtZXRob2QgbmFtZT0iSW50MzIgTWFpbigpIiBhdHRycz0iMTUwIj4KK0BA IC03MDY4OSw2ICs3MDg4MSwxOSBAQAorICAgICAgIDwvbWV0aG9kPgorICAgICA8L3R5cGU+Cisg ICA8L3Rlc3Q+CisrICA8dGVzdCBuYW1lPSJ0ZXN0LW5hbWVkLTExLmNzIj4KKysgICAgPHR5cGUg bmFtZT0iWCI+CisrICAgICAgPG1ldGhvZCBuYW1lPSJWb2lkIE1haW4oKSIgYXR0cnM9IjE1MCI+ CisrICAgICAgICA8c2l6ZT4xMzwvc2l6ZT4KKysgICAgICA8L21ldGhvZD4KKysgICAgICA8bWV0 aG9kIG5hbWU9IlZvaWQgVGVzdChJbnQzMiwgU3lzdGVtLlN0cmluZykiIGF0dHJzPSIxNDUiPgor KyAgICAgICAgPHNpemU+Mjwvc2l6ZT4KKysgICAgICA8L21ldGhvZD4KKysgICAgICA8bWV0aG9k IG5hbWU9IlZvaWQgLmN0b3IoKSIgYXR0cnM9IjYyNzgiPgorKyAgICAgICAgPHNpemU+Nzwvc2l6 ZT4KKysgICAgICA8L21ldGhvZD4KKysgICAgPC90eXBlPgorKyAgPC90ZXN0PgorICAgPHRlc3Qg bmFtZT0idGVzdC1uYW1lb2YtMDEuY3MiPgorICAgICA8dHlwZSBuYW1lPSJYIj4KKyAgICAgICA8 bWV0aG9kIG5hbWU9IkludDMyIE1haW4oKSIgYXR0cnM9IjE1MCI+CitAQCAtNzI3NzgsNiArNzI5 ODMsNDkgQEAKKyAgICAgICA8L21ldGhvZD4KKyAgICAgPC90eXBlPgorICAgPC90ZXN0PgorKyAg PHRlc3QgbmFtZT0idGVzdC1yZWFkb25seS0wMi5jcyI+CisrICAgIDx0eXBlIG5hbWU9IkQiPgor KyAgICAgIDxtZXRob2QgbmFtZT0iSW50MzImYW1wOyBJbnZva2UoSW50MzIpIiBhdHRycz0iNDU0 Ij4KKysgICAgICAgIDxzaXplPjA8L3NpemU+CisrICAgICAgPC9tZXRob2Q+CisrICAgICAgPG1l dGhvZCBuYW1lPSJTeXN0ZW0uSUFzeW5jUmVzdWx0IEJlZ2luSW52b2tlKEludDMyLCBTeXN0ZW0u QXN5bmNDYWxsYmFjaywgU3lzdGVtLk9iamVjdCkiIGF0dHJzPSI0NTQiPgorKyAgICAgICAgPHNp emU+MDwvc2l6ZT4KKysgICAgICA8L21ldGhvZD4KKysgICAgICA8bWV0aG9kIG5hbWU9IkludDMy JmFtcDsgRW5kSW52b2tlKFN5c3RlbS5JQXN5bmNSZXN1bHQpIiBhdHRycz0iNDU0Ij4KKysgICAg ICAgIDxzaXplPjA8L3NpemU+CisrICAgICAgPC9tZXRob2Q+CisrICAgICAgPG1ldGhvZCBuYW1l PSJWb2lkIC5jdG9yKE9iamVjdCwgSW50UHRyKSIgYXR0cnM9IjYyNzgiPgorKyAgICAgICAgPHNp emU+MDwvc2l6ZT4KKysgICAgICA8L21ldGhvZD4KKysgICAgPC90eXBlPgorKyAgICA8dHlwZSBu YW1lPSJYIj4KKysgICAgICA8bWV0aG9kIG5hbWU9IlZvaWQgTWFpbigpIiBhdHRycz0iMTUwIj4K KysgICAgICAgIDxzaXplPjI8L3NpemU+CisrICAgICAgPC9tZXRob2Q+CisrICAgICAgPG1ldGhv ZCBuYW1lPSJTeXN0ZW0uR3VpZCZhbXA7IFRlc3RNZXRob2QoKSIgYXR0cnM9IjEyOSI+CisrICAg ICAgICA8c2l6ZT4xNTwvc2l6ZT4KKysgICAgICA8L21ldGhvZD4KKysgICAgICA8bWV0aG9kIG5h bWU9IlN5c3RlbS5HdWlkJmFtcDsgZ2V0X1Rlc3RQcm9wKCkiIGF0dHJzPSIyMTc3Ij4KKysgICAg ICAgIDxzaXplPjE3PC9zaXplPgorKyAgICAgIDwvbWV0aG9kPgorKyAgICAgIDxtZXRob2QgbmFt ZT0iVm9pZCAuY3RvcigpIiBhdHRycz0iNjI3OCI+CisrICAgICAgICA8c2l6ZT43PC9zaXplPgor KyAgICAgIDwvbWV0aG9kPgorKyAgICA8L3R5cGU+CisrICA8L3Rlc3Q+CisrICA8dGVzdCBuYW1l PSJ0ZXN0LXJlYWRvbmx5LTAzLmNzIj4KKysgICAgPHR5cGUgbmFtZT0iUyI+CisrICAgICAgPG1l dGhvZCBuYW1lPSJWb2lkIE1haW4oKSIgYXR0cnM9IjE1MCI+CisrICAgICAgICA8c2l6ZT4yPC9z aXplPgorKyAgICAgIDwvbWV0aG9kPgorKyAgICAgIDxtZXRob2QgbmFtZT0iVm9pZCAuY3RvcihJ bnQzMikiIGF0dHJzPSI2Mjc4Ij4KKysgICAgICAgIDxzaXplPjEzPC9zaXplPgorKyAgICAgIDwv bWV0aG9kPgorKyAgICAgIDxtZXRob2QgbmFtZT0iVm9pZCAuY2N0b3IoKSIgYXR0cnM9IjYyODki PgorKyAgICAgICAgPHNpemU+MTU8L3NpemU+CisrICAgICAgPC9tZXRob2Q+CisrICAgIDwvdHlw ZT4KKysgIDwvdGVzdD4KKyAgIDx0ZXN0IG5hbWU9InRlc3QtcmVmLTAxLmNzIj4KKyAgICAgPHR5 cGUgbmFtZT0iWCI+CisgICAgICAgPG1ldGhvZCBuYW1lPSJWb2lkIE1haW4oKSIgYXR0cnM9IjE1 MCI+CitAQCAtNzI5MDYsNiArNzMxNTQsOTUgQEAKKyAgICAgICA8L21ldGhvZD4KKyAgICAgPC90 eXBlPgorICAgPC90ZXN0PgorKyAgPHRlc3QgbmFtZT0idGVzdC1yZWYtMDcuY3MiPgorKyAgICA8 dHlwZSBuYW1lPSJUZXN0Ij4KKysgICAgICA8bWV0aG9kIG5hbWU9IlZvaWQgTWFpbigpIiBhdHRy cz0iMTUwIj4KKysgICAgICAgIDxzaXplPjE4PC9zaXplPgorKyAgICAgIDwvbWV0aG9kPgorKyAg ICAgIDxtZXRob2QgbmFtZT0iVGVzdCBNZXRob2QoKSIgYXR0cnM9IjEyOSI+CisrICAgICAgICA8 c2l6ZT4xODwvc2l6ZT4KKysgICAgICA8L21ldGhvZD4KKysgICAgPC90eXBlPgorKyAgICA8dHlw ZSBuYW1lPSJQIj4KKysgICAgICA8bWV0aG9kIG5hbWU9IlRlc3QgZ2V0X1NwYW4oKSIgYXR0cnM9 IjM1MjYiPgorKyAgICAgICAgPHNpemU+MDwvc2l6ZT4KKysgICAgICA8L21ldGhvZD4KKysgICAg ICA8bWV0aG9kIG5hbWU9IlZvaWQgLmN0b3IoKSIgYXR0cnM9IjYyNzYiPgorKyAgICAgICAgPHNp emU+Nzwvc2l6ZT4KKysgICAgICA8L21ldGhvZD4KKysgICAgPC90eXBlPgorKyAgPC90ZXN0Pgor KyAgPHRlc3QgbmFtZT0idGVzdC1yZWYtMDguY3MiPgorKyAgICA8dHlwZSBuYW1lPSJDbGFzc0xp YnJhcnkxLkMiPgorKyAgICAgIDxtZXRob2QgbmFtZT0iVm9pZCBNTSgpIiBhdHRycz0iMTI5Ij4K KysgICAgICAgIDxzaXplPjYwPC9zaXplPgorKyAgICAgIDwvbWV0aG9kPgorKyAgICAgIDxtZXRo b2QgbmFtZT0iVm9pZCBNYWluKCkiIGF0dHJzPSIxNTAiPgorKyAgICAgICAgPHNpemU+MjQ1PC9z aXplPgorKyAgICAgIDwvbWV0aG9kPgorKyAgICAgIDxtZXRob2QgbmFtZT0iSW50MzImYW1wOyBB ZGQyKEludDMyIEJ5UmVmLCBJbnQzMikiIGF0dHJzPSIxNTAiPgorKyAgICAgICAgPHNpemU+MTA8 L3NpemU+CisrICAgICAgPC9tZXRob2Q+CisrICAgICAgPG1ldGhvZCBuYW1lPSJWb2lkIC5jdG9y KCkiIGF0dHJzPSI2Mjc4Ij4KKysgICAgICAgIDxzaXplPjc8L3NpemU+CisrICAgICAgPC9tZXRo b2Q+CisrICAgICAgPG1ldGhvZCBuYW1lPSJWb2lkIC5jY3RvcigpIiBhdHRycz0iNjI4OSI+Cisr ICAgICAgICA8c2l6ZT4xMjwvc2l6ZT4KKysgICAgICA8L21ldGhvZD4KKysgICAgPC90eXBlPgor KyAgICA8dHlwZSBuYW1lPSJDbGFzc0xpYnJhcnkxLkMrQiI+CisrICAgICAgPG1ldGhvZCBuYW1l PSJJbnQzMiZhbXA7IGdldF9JdGVtKEludDMyKSIgYXR0cnM9IjIxODIiPgorKyAgICAgICAgPHNp emU+MTU8L3NpemU+CisrICAgICAgPC9tZXRob2Q+CisrICAgICAgPG1ldGhvZCBuYW1lPSJWb2lk IC5jdG9yKCkiIGF0dHJzPSI2Mjc4Ij4KKysgICAgICAgIDxzaXplPjc8L3NpemU+CisrICAgICAg PC9tZXRob2Q+CisrICAgIDwvdHlwZT4KKysgICAgPHR5cGUgbmFtZT0iQ2xhc3NMaWJyYXJ5MS5D K0dlbmAxW1RdIj4KKysgICAgICA8bWV0aG9kIG5hbWU9IlQmYW1wOyBnZXRfSXRlbShJbnQzMiki IGF0dHJzPSIyMTgyIj4KKysgICAgICAgIDxzaXplPjE1PC9zaXplPgorKyAgICAgIDwvbWV0aG9k PgorKyAgICAgIDxtZXRob2QgbmFtZT0iVm9pZCAuY3RvcigpIiBhdHRycz0iNjI3OCI+CisrICAg ICAgICA8c2l6ZT43PC9zaXplPgorKyAgICAgIDwvbWV0aG9kPgorKyAgICA8L3R5cGU+CisrICAg IDx0eXBlIG5hbWU9IkNsYXNzTGlicmFyeTEuQytCQiI+CisrICAgICAgPG1ldGhvZCBuYW1lPSJW YWwmYW1wOyBnZXRfSXRlbShJbnQzMikiIGF0dHJzPSIyMTgyIj4KKysgICAgICAgIDxzaXplPjE1 PC9zaXplPgorKyAgICAgIDwvbWV0aG9kPgorKyAgICAgIDxtZXRob2QgbmFtZT0iVm9pZCAuY3Rv cigpIiBhdHRycz0iNjI3OCI+CisrICAgICAgICA8c2l6ZT43PC9zaXplPgorKyAgICAgIDwvbWV0 aG9kPgorKyAgICA8L3R5cGU+CisrICA8L3Rlc3Q+CisrICA8dGVzdCBuYW1lPSJ0ZXN0LXJlZi0w OS5jcyI+CisrICAgIDx0eXBlIG5hbWU9IlByb2dyYW0iPgorKyAgICAgIDxtZXRob2QgbmFtZT0i cmlnaWRib2R5JmFtcDsgZ2V0X3Byb3BlcnR5X3JldHVybmluZ19zdHJ1Y3RfYnlfcmVmKCkiIGF0 dHJzPSIyMTkzIj4KKysgICAgICAgIDxzaXplPjEzPC9zaXplPgorKyAgICAgIDwvbWV0aG9kPgor KyAgICAgIDxtZXRob2QgbmFtZT0iVm9pZCBNYWluKCkiIGF0dHJzPSIxNDUiPgorKyAgICAgICAg PHNpemU+MTc8L3NpemU+CisrICAgICAgPC9tZXRob2Q+CisrICAgICAgPG1ldGhvZCBuYW1lPSJW b2lkIC5jdG9yKCkiIGF0dHJzPSI2Mjc4Ij4KKysgICAgICAgIDxzaXplPjc8L3NpemU+CisrICAg ICAgPC9tZXRob2Q+CisrICAgIDwvdHlwZT4KKysgIDwvdGVzdD4KKysgIDx0ZXN0IG5hbWU9InRl c3QtcmVmLTEwLmNzIj4KKysgICAgPHR5cGUgbmFtZT0iVmFsdWVTdHJpbmdCdWlsZGVyIj4KKysg ICAgICA8bWV0aG9kIG5hbWU9IlN5c3RlbS5TdHJpbmcgVG9TdHJpbmcoKSIgYXR0cnM9IjE5OCI+ CisrICAgICAgICA8c2l6ZT4xNDwvc2l6ZT4KKysgICAgICA8L21ldGhvZD4KKysgICAgPC90eXBl PgorKyAgICA8dHlwZSBuYW1lPSJYIj4KKysgICAgICA8bWV0aG9kIG5hbWU9IkludDMyIE1haW4o KSIgYXR0cnM9IjE1MCI+CisrICAgICAgICA8c2l6ZT40Nzwvc2l6ZT4KKysgICAgICA8L21ldGhv ZD4KKysgICAgICA8bWV0aG9kIG5hbWU9IlZvaWQgLmN0b3IoKSIgYXR0cnM9IjYyNzgiPgorKyAg ICAgICAgPHNpemU+Nzwvc2l6ZT4KKysgICAgICA8L21ldGhvZD4KKysgICAgPC90eXBlPgorKyAg PC90ZXN0PgorICAgPHRlc3QgbmFtZT0idGVzdC1zdGF0aWMtdXNpbmctMDEuY3MiPgorICAgICA8 dHlwZSBuYW1lPSJBLkIuWCI+CisgICAgICAgPG1ldGhvZCBuYW1lPSJJbnQzMiBUZXN0KCkiIGF0 dHJzPSIxNTAiPgorQEAgLTczMzc0LDYgKzczNzExLDU2IEBACisgICAgICAgPC9tZXRob2Q+Cisg ICAgIDwvdHlwZT4KKyAgIDwvdGVzdD4KKysgIDx0ZXN0IG5hbWU9InRlc3QtdHVwbGUtMDcuY3Mi PgorKyAgICA8dHlwZSBuYW1lPSJQYXJzZXJUZXN0Ij4KKysgICAgICA8bWV0aG9kIG5hbWU9IlN5 c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljLklFbnVtZXJhYmxlYDFbU3lzdGVtLlZhbHVlVHVwbGVg MltTeXN0ZW0uT2JqZWN0LFN5c3RlbS5JbnQzMl1dIFRlc3QoKSIgYXR0cnM9IjEyOSI+CisrICAg ICAgICA8c2l6ZT4xMDwvc2l6ZT4KKysgICAgICA8L21ldGhvZD4KKysgICAgICA8bWV0aG9kIG5h bWU9IlZvaWQgTWFpbigpIiBhdHRycz0iMTUwIj4KKysgICAgICAgIDxzaXplPjI8L3NpemU+Cisr ICAgICAgPC9tZXRob2Q+CisrICAgICAgPG1ldGhvZCBuYW1lPSJWb2lkIC5jdG9yKCkiIGF0dHJz PSI2Mjc4Ij4KKysgICAgICAgIDxzaXplPjc8L3NpemU+CisrICAgICAgPC9tZXRob2Q+CisrICAg IDwvdHlwZT4KKysgIDwvdGVzdD4KKysgIDx0ZXN0IG5hbWU9InRlc3QtdHVwbGUtMDguY3MiPgor KyAgICA8dHlwZSBuYW1lPSJYIj4KKysgICAgICA8bWV0aG9kIG5hbWU9IlZvaWQgTWFpbigpIiBh dHRycz0iMTUwIj4KKysgICAgICAgIDxzaXplPjE5PC9zaXplPgorKyAgICAgIDwvbWV0aG9kPgor KyAgICAgIDxtZXRob2QgbmFtZT0iU3lzdGVtLlRocmVhZGluZy5UYXNrcy5UYXNrIFRlc3QoKSIg YXR0cnM9IjEyOSI+CisrICAgICAgICA8c2l6ZT40MTwvc2l6ZT4KKysgICAgICA8L21ldGhvZD4K KysgICAgICA8bWV0aG9kIG5hbWU9IlN5c3RlbS5UaHJlYWRpbmcuVGFza3MuVGFza2AxW1N5c3Rl bS5WYWx1ZVR1cGxlYDJbU3lzdGVtLkludDMyLFN5c3RlbS5JbnQzMl1dIFdhaXRpbmcoKSIgYXR0 cnM9IjEyOSI+CisrICAgICAgICA8c2l6ZT4yMTwvc2l6ZT4KKysgICAgICA8L21ldGhvZD4KKysg ICAgICA8bWV0aG9kIG5hbWU9IlZvaWQgLmN0b3IoKSIgYXR0cnM9IjYyNzgiPgorKyAgICAgICAg PHNpemU+Nzwvc2l6ZT4KKysgICAgICA8L21ldGhvZD4KKysgICAgPC90eXBlPgorKyAgICA8dHlw ZSBuYW1lPSJYKyZsdDtUZXN0Jmd0O2NfX2FzeW5jMCI+CisrICAgICAgPG1ldGhvZCBuYW1lPSJW b2lkIE1vdmVOZXh0KCkiIGF0dHJzPSI0ODYiPgorKyAgICAgICAgPHNpemU+MjEyPC9zaXplPgor KyAgICAgIDwvbWV0aG9kPgorKyAgICAgIDxtZXRob2QgbmFtZT0iVm9pZCBTZXRTdGF0ZU1hY2hp bmUoU3lzdGVtLlJ1bnRpbWUuQ29tcGlsZXJTZXJ2aWNlcy5JQXN5bmNTdGF0ZU1hY2hpbmUpIiBh dHRycz0iNDg2Ij4KKysgICAgICAgIDxzaXplPjEzPC9zaXplPgorKyAgICAgIDwvbWV0aG9kPgor KyAgICA8L3R5cGU+CisrICA8L3Rlc3Q+CisrICA8dGVzdCBuYW1lPSJ0ZXN0LXR1cGxlLTA5LmNz Ij4KKysgICAgPHR5cGUgbmFtZT0iVHVwbGVEZWNvbnN0cnVjdGlvbkRlY2xhcmF0aW9uIj4KKysg ICAgICA8bWV0aG9kIG5hbWU9IkludDMyIE1haW4oKSIgYXR0cnM9IjE1MCI+CisrICAgICAgICA8 c2l6ZT45OTwvc2l6ZT4KKysgICAgICA8L21ldGhvZD4KKysgICAgICA8bWV0aG9kIG5hbWU9IlN5 c3RlbS5WYWx1ZVR1cGxlYDJbU3lzdGVtLlN0cmluZyxTeXN0ZW0uSW50NjRdIEdldFZhbHVlcygp IiBhdHRycz0iMTQ1Ij4KKysgICAgICAgIDxzaXplPjIxPC9zaXplPgorKyAgICAgIDwvbWV0aG9k PgorKyAgICAgIDxtZXRob2QgbmFtZT0iVm9pZCAuY3RvcigpIiBhdHRycz0iNjI3OCI+CisrICAg ICAgICA8c2l6ZT43PC9zaXplPgorKyAgICAgIDwvbWV0aG9kPgorKyAgICA8L3R5cGU+CisrICA8 L3Rlc3Q+CisgICA8dGVzdCBuYW1lPSJ0ZXN0LXZhci0wMS5jcyI+CisgICAgIDx0eXBlIG5hbWU9 IlRlc3QiPgorICAgICAgIDxtZXRob2QgbmFtZT0iSW50MzIgTWFpbigpIiBhdHRycz0iMTUwIj4K LS0gCjIuNDUuMgoK --b1=_an9yUQc81YewVJ071Mjh6ZcI5zllr0hgLHfHss8ka8A Content-Type: text/x-patch; name=0020-gnu-Add-libgdiplus.patch Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=0020-gnu-Add-libgdiplus.patch RnJvbSA0ZGJkNTljYmNlZGFmYjQwMWE5MzhhMzdjNzQ1MjIzZDY2MWE4ZDYzIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpNZXNzYWdlLUlEOiA8NGRiZDU5Y2JjZWRhZmI0MDFhOTM4YTM3Yzc0NTIy M2Q2NjFhOGQ2My4xNzMyNzA3Mjg4LmdpdC51bm11c2hAaGFzaGJhbmcuc2g+CkluLVJlcGx5LVRv OiA8M2Y4YWY2NWY3Mjg3MWQ2MWZhODVlNjkzOWY0NmNiOGRhYzE4NWM3MC4xNzMyNzA3Mjg4Lmdp dC51bm11c2hAaGFzaGJhbmcuc2g+ClJlZmVyZW5jZXM6IDwzZjhhZjY1ZjcyODcxZDYxZmE4NWU2 OTM5ZjQ2Y2I4ZGFjMTg1YzcwLjE3MzI3MDcyODguZ2l0LnVubXVzaEBoYXNoYmFuZy5zaD4KRnJv bTogdW5tdXNoIDx1bm11c2hAaGFzaGJhbmcuc2g+CkRhdGU6IFdlZCwgMjcgTm92IDIwMjQgMDA6 NTY6MDAKU3ViamVjdDogW1BBVENIIDIwLzIxXSBnbnU6IEFkZCBsaWJnZGlwbHVzLgoKKiBnbnUv cGFja2FnZXMvZG90bmV0LnNjbSAobGliZ2RpcGx1cyk6IE5ldyB2YXJpYWJsZS4KCkNoYW5nZS1J ZDogSTQ5MjI1NGMwOWZkNmM5YzhiMGJjNjMzZTFmOTU2NjViZmE5ZmU5NmEKLS0tCiBnbnUvcGFj a2FnZXMvZG90bmV0LnNjbSB8IDQ0ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrCiAxIGZpbGUgY2hhbmdlZCwgNDQgaW5zZXJ0aW9ucygrKQoKZGlmZiAtLWdpdCBhL2du dS9wYWNrYWdlcy9kb3RuZXQuc2NtIGIvZ251L3BhY2thZ2VzL2RvdG5ldC5zY20KaW5kZXggMzMw OWNlYzNmNS4uM2UyZWNhMTg3MSAxMDA2NDQKLS0tIGEvZ251L3BhY2thZ2VzL2RvdG5ldC5zY20K KysrIGIvZ251L3BhY2thZ2VzL2RvdG5ldC5zY20KQEAgLTE1OTEsMyArMTU5MSw0NyBAQCAoZGVm aW5lLXB1YmxpYyBtb25vLTUuMTAuMAogICAgICAgICAgICAgICAgICAgICAgICgoIkZhY2FkZXMv U3lzdGVtXFwuRGF0YVxcLkNvbW1vbl9SRUZTIDo9ICIgYWxsKQogICAgICAgICAgICAgICAgICAg ICAgICAoc3RyaW5nLWFwcGVuZCBhbGwgIlN5c3RlbSBTeXN0ZW0uWG1sICIpKSkKICAgICAgICAg ICAgICAgICAgICAgKGFwcGx5IGludm9rZSAibWFrZSIgIkNTQz1tY3MiIG1ha2UtZmxhZ3MpKSkp KSkpKSkpKQorCisoZGVmaW5lLXB1YmxpYyBsaWJnZGlwbHVzCisgIChwYWNrYWdlCisgICAgKG5h bWUgImxpYmdkaXBsdXMiKQorICAgICh2ZXJzaW9uICI2LjIiKQorICAgIChzb3VyY2UKKyAgICAg KG9yaWdpbgorICAgICAgIChtZXRob2QgZ2l0LWZldGNoKQorICAgICAgICh1cmkgKGdpdC1yZWZl cmVuY2UKKwkgICAgICh1cmwgImh0dHBzOi8vZ2l0aHViLmNvbS9tb25vL2xpYmdkaXBsdXMuZ2l0 IikKKwkgICAgIChjb21taXQgIjk0YTQ5ODc1NDg3ZTI5NjM3NmYyMDlmZTY0YjkyMWM2MDIwZjc0 YzAiKSkpCisgICAgICAgKGZpbGUtbmFtZSAoZ2l0LWZpbGUtbmFtZSBuYW1lIHZlcnNpb24pKQor ICAgICAgIChzaGEyNTYKKwkoYmFzZTMyCisJICIxZ3dtaHJkZHI4a2RsZnByanFjZDZncWl5OHA1 djhzbDkyMTVkYmQ5NDlqMWw3NnN6bDl2IikpCisgICAgICAgKG1vZHVsZXMgJygoZ3VpeCBidWls ZCB1dGlscykpKQorICAgICAgIChzbmlwcGV0ICN+KHN1YnN0aXR1dGUqICIuL01ha2VmaWxlLmFt IgorICAgICAgICAgICAgICAgICAgICAoKCJcXC4vdXBkYXRlX3N1Ym1vZHVsZXNcXC5zaCIpCisg ICAgICAgICAgICAgICAgICAgICAiOiIpKSkpKQorICAgIChidWlsZC1zeXN0ZW0gZ251LWJ1aWxk LXN5c3RlbSkKKyAgICAobmF0aXZlLWlucHV0cworICAgICAobGlzdCBhdXRvbWFrZQorICAgICAg ICAgICBhdXRvY29uZgorICAgICAgICAgICBnb29nbGV0ZXN0LTEuOAorICAgICAgICAgICBsaWJ0 b29sCisgICAgICAgICAgIHBrZy1jb25maWcKKyAgICAgICAgICAgd2hpY2gpKQorICAgIChpbnB1 dHMgKGxpc3QgY2Fpcm8KKyAgICAgICAgICAgICAgICAgIGZyZWV0eXBlCisgICAgICAgICAgICAg ICAgICBmb250Y29uZmlnCisgICAgICAgICAgICAgICAgICBnZXR0ZXh0LW1pbmltYWwKKyAgICAg ICAgICAgICAgICAgIGdpZmxpYgorICAgICAgICAgICAgICAgICAgZ2xpYgorICAgICAgICAgICAg ICAgICAgbGliZXhpZgorICAgICAgICAgICAgICAgICAgbGlianBlZy10dXJibworICAgICAgICAg ICAgICAgICAgbGlicG5nCisgICAgICAgICAgICAgICAgICBsaWJ0aWZmCisgICAgICAgICAgICAg ICAgICBsaWJ4MTEpKQorICAgIChzeW5vcHNpcyAiT3BlbiBTb3VyY2UgaW1wbGVtZW50YXRpb24g b2YgdGhlIEdESSsgQVBJIikKKyAgICAoZGVzY3JpcHRpb24gIkxpYmdkaXBsdXMgaXMgdGhlIE1v bm8gbGlicmFyeSB0aGF0IHByb3ZpZGVzIGEKK0dESSstY29tcGF0aWJsZSBBUEkgb24gbm9uLVdp bmRvd3Mgb3BlcmF0aW5nIHN5c3RlbXMuICBJdCB1c2VzIENhaXJvIHRvIGRvCittb3N0IG9mIHRo ZSBoZWF2eSBsaWZ0aW5nLiIpCisgICAgKGhvbWUtcGFnZSAiaHR0cHM6Ly9naXRodWIuY29tL21v bm8vbGliZ2RpcGx1cyIpCisgICAgKGxpY2Vuc2UgbGljZW5zZTpleHBhdCkpKQotLSAKMi40NS4y Cgo= --b1=_an9yUQc81YewVJ071Mjh6ZcI5zllr0hgLHfHss8ka8A Content-Type: text/x-patch; name=0021-gnu-Add-mono-6.12.0.patch Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=0021-gnu-Add-mono-6.12.0.patch RnJvbSAyODU4N2ExYzgyYzcxNGI2ZGYxYWJkNDY0ODA1ZjU1ZWEyODYxNDk2IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpNZXNzYWdlLUlEOiA8Mjg1ODdhMWM4MmM3MTRiNmRmMWFiZDQ2NDgwNWY1 NWVhMjg2MTQ5Ni4xNzMyNzA3Mjg4LmdpdC51bm11c2hAaGFzaGJhbmcuc2g+CkluLVJlcGx5LVRv OiA8M2Y4YWY2NWY3Mjg3MWQ2MWZhODVlNjkzOWY0NmNiOGRhYzE4NWM3MC4xNzMyNzA3Mjg4Lmdp dC51bm11c2hAaGFzaGJhbmcuc2g+ClJlZmVyZW5jZXM6IDwzZjhhZjY1ZjcyODcxZDYxZmE4NWU2 OTM5ZjQ2Y2I4ZGFjMTg1YzcwLjE3MzI3MDcyODguZ2l0LnVubXVzaEBoYXNoYmFuZy5zaD4KRnJv bTogdW5tdXNoIDx1bm11c2hAaGFzaGJhbmcuc2g+CkRhdGU6IFdlZCwgMjcgTm92IDIwMjQgMDE6 Mzc6NDAKU3ViamVjdDogW1BBVENIIDIxLzIxXSBnbnU6IEFkZCBtb25vLTYuMTIuMC4KClRoaXMg aW5jbHVkZXMgYSBwYXRjaCB0byBhZGQgc3VwcG9ydCBmb3IgYSA8cnVucGF0aD4gZWxlbWVudCB0 bwptb25vJ3MgKi5kbGwuY29uZmlnIGFuZCAqLmV4ZS5jb25maWcgZmlsZXMuICBTZWUgbW9uby02 LjEyLjAtYWRkLXJ1bnBhdGgucGF0Y2gKZm9yIGRldGFpbHMuCgoqIGdudS9wYWNrYWdlcy9kb3Ru ZXQuc2NtCiAgKG1vbm8tNi4xMi4wLWV4dGVybmFsLXJlcG8tc3BlY3MsIG1vbm8tNi4xMi4wKTog TmV3IHZhcmlhYmxlLgoqIGdudS9wYWNrYWdlcy9wYXRjaGVzL21vbm8tNi4xMi4wLXthZGQtcnVu cGF0aCxmaXgtQXNzZW1ibHlSZXNvbHZlcixmaXgtQ29uZGl0aW9uUGFyc2VyfS5wYXRjaDogTmV3 IHBhdGNoZXMuCiogZ251L2xvY2FsLm1rIChkaXN0X3BhdGNoX0RBVEEpOiBSZWdpc3RlciBuZXcg cGF0Y2hlcy4KCkNoYW5nZS1JZDogSTlkNWJkNWQzNjZjMzY4ZWIyMzU0ODM0MTE4MThjOTAzNzRi ZmM0ZDQKLS0tCiBnbnUvbG9jYWwubWsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg fCAgIDMgKwogZ251L3BhY2thZ2VzL2RvdG5ldC5zY20gICAgICAgICAgICAgICAgICAgICAgIHwg MTk0ICsrKysrKysrKysrKysrCiAuLi4vcGF0Y2hlcy9tb25vLTYuMTIuMC1hZGQtcnVucGF0aC5w YXRjaCAgICAgfCAxODUgKysrKysrKysrKysrKysKIC4uLi9tb25vLTYuMTIuMC1maXgtQXNzZW1i bHlSZXNvbHZlci5wYXRjaCAgICB8IDIzNiArKysrKysrKysrKysrKysrKysKIC4uLi9tb25vLTYu MTIuMC1maXgtQ29uZGl0aW9uUGFyc2VyLnBhdGNoICAgICB8ICA0NiArKysrCiA1IGZpbGVzIGNo YW5nZWQsIDY2NCBpbnNlcnRpb25zKCspCiBjcmVhdGUgbW9kZSAxMDA2NDQgZ251L3BhY2thZ2Vz L3BhdGNoZXMvbW9uby02LjEyLjAtYWRkLXJ1bnBhdGgucGF0Y2gKIGNyZWF0ZSBtb2RlIDEwMDY0 NCBnbnUvcGFja2FnZXMvcGF0Y2hlcy9tb25vLTYuMTIuMC1maXgtQXNzZW1ibHlSZXNvbHZlci5w YXRjaAogY3JlYXRlIG1vZGUgMTAwNjQ0IGdudS9wYWNrYWdlcy9wYXRjaGVzL21vbm8tNi4xMi4w LWZpeC1Db25kaXRpb25QYXJzZXIucGF0Y2gKCmRpZmYgLS1naXQgYS9nbnUvbG9jYWwubWsgYi9n bnUvbG9jYWwubWsKaW5kZXggNmIwZWJkZjJkNy4uNDk0MTRlZGYzYSAxMDA2NDQKLS0tIGEvZ251 L2xvY2FsLm1rCisrKyBiL2dudS9sb2NhbC5tawpAQCAtMTc3Miw2ICsxNzcyLDkgQEAgZGlzdF9w YXRjaF9EQVRBID0JCQkJCQlcCiAgICVEJS9wYWNrYWdlcy9wYXRjaGVzL21vbm8tNS40LjAtcGF0 Y2hlcy5wYXRjaAkJXAogICAlRCUvcGFja2FnZXMvcGF0Y2hlcy9tb25vLTUuOC4wLXBhdGNoZXMu cGF0Y2gJCVwKICAgJUQlL3BhY2thZ2VzL3BhdGNoZXMvbW9uby01LjEwLjAtbGF0ZXItbWNzLWNo YW5nZXMucGF0Y2gJXAorICAlRCUvcGFja2FnZXMvcGF0Y2hlcy9tb25vLTYuMTIuMC1hZGQtcnVu cGF0aC5wYXRjaAkJXAorICAlRCUvcGFja2FnZXMvcGF0Y2hlcy9tb25vLTYuMTIuMC1maXgtQXNz ZW1ibHlSZXNvbHZlci5wYXRjaAlcCisgICVEJS9wYWNrYWdlcy9wYXRjaGVzL21vbm8tNi4xMi4w LWZpeC1Db25kaXRpb25QYXJzZXIucGF0Y2gJXAogICAlRCUvcGFja2FnZXMvcGF0Y2hlcy9tb25v LW1jcy1wYXRjaGVzLWZyb20tNS4xMC4wLnBhdGNoCVwKICAgJUQlL3BhY2thZ2VzL3BhdGNoZXMv bW9zYWljYXRjaGVyLXVuYnVuZGxlLWh0c2xpYi5wYXRjaAlcCiAgICVEJS9wYWNrYWdlcy9wYXRj aGVzL21ycmVzY3VlLXN1cHBvcnQtbG92ZS0xMS5wYXRjaAkJXApkaWZmIC0tZ2l0IGEvZ251L3Bh Y2thZ2VzL2RvdG5ldC5zY20gYi9nbnUvcGFja2FnZXMvZG90bmV0LnNjbQppbmRleCAzZTJlY2Ex ODcxLi5hZjc3NjU1MmM4IDEwMDY0NAotLS0gYS9nbnUvcGFja2FnZXMvZG90bmV0LnNjbQorKysg Yi9nbnUvcGFja2FnZXMvZG90bmV0LnNjbQpAQCAtMTYzNSwzICsxNjM1LDE5NyBAQCAoZGVmaW5l LXB1YmxpYyBsaWJnZGlwbHVzCiBtb3N0IG9mIHRoZSBoZWF2eSBsaWZ0aW5nLiIpCiAgICAgKGhv bWUtcGFnZSAiaHR0cHM6Ly9naXRodWIuY29tL21vbm8vbGliZ2RpcGx1cyIpCiAgICAgKGxpY2Vu c2UgbGljZW5zZTpleHBhdCkpKQorCisoZGVmaW5lIG1vbm8tNi4xMi4wLWV4dGVybmFsLXJlcG8t c3BlY3MKKyAgJygoImFwaS1kb2MtdG9vbHMiICAgICAgICAgICAgICAgIjVkYTgxMjdhZjllNjhj OWQ1OGE5MGFhOWRlMjFmNTc0OTFkODEyNjEiCisgICAgICIwcnE4ZHhteTVhdjM2bmQyOThrNjBk OHMzODZ6aHFsdzYzeW4yeXdjMDQxNnhzZmxzY2c0IgorICAgICAjOnJlY3Vyc2l2ZT8gI3QpCisg ICAgKCJhcGktc25hcHNob3QiICAgICAgICAgICAgICAgICI4MDhlOGE5ZTRiZThkMzhlMDk3ZDJi MDkxOWNhYzM3YmMxOTU4NDRhIgorICAgICAiMWk1bWlnZHc2NDlibXhxaWk5OXEyaGQ2dmthMTF3 bGNwaGZybTk4a2I3cHByejRrNDAxYSIpCisgICAgKCJhc3BuZXR3ZWJzdGFjayIgICAgICAgICAg ICAgICJlNzdiMTJlNmNjNWVkMjYwYTk4NDQ3ZjYwOWU4ODczMzdlNDRlMjk5IgorICAgICAiMHJr czM0NHFyNGZtcDNmczEyNjRkMnFrbW0zNDhtOGQxa2pkN3o0bDk0aWlpcnduMWZxMSIpCisgICAg OzsgKCgiaHR0cHM6Ly9naXRodWIuY29tL1VuaXR5LVRlY2hub2xvZ2llcy9iZHdnYyIgImJkd2dj IikKKyAgICA7OyAgImEyN2VkZGI4MzdkNjEzY2I0Y2Y0MzY0MDVjMjNjZTM5ZWQxNmE4NmQiCisg ICAgOzsgICIiKQorICAgICgoInJlZmVyZW5jZS1hc3NlbWJsaWVzIiAiYmluYXJ5LXJlZmVyZW5j ZS1hc3NlbWJsaWVzIikKKyAgICAgImU2ODA0NmQ1MTA2YWEwMzQ5YzIzZjk1ODIxNDU2OTU1ZmMx NWI5NmIiCisgICAgICIxbXFwejI3NHFkaGw4NHk2eDhiYXpyZm1hamNmNnFhZ2lrczJnMGd5ZzRx eXF3Z3JwNDkwIikKKyAgICAoImJvY2tidWlsZCIgICAgICAgICAgICAgICAgICAgIjNiZDQ0ZjY3 ODRiODViMWVjZThiMDBiMTNkMTJjZjQxNmY1YTg3ZTciCisgICAgICIwejNkOHF5bGZ3bmxrbHBj dnNtc2d5NW4yNDhnY2ZmNXZtenFqemFsZmo3ZDFoN3ZjanhzIikKKyAgICAoImJvcmluZ3NzbCIg ICAgICAgICAgICAgICAgICAgIjI5NjEzN2NmOTg5Njg4YjAzZWQ4OWY3MmNkN2JmZDg2ZDQ3MDQ0 MWUiCisgICAgICIxMWdoZGF5ZmN2eXNuaDE2MTdiajQ3OGh4cmc3YjQzanBrN3ZnYWZtNmpiN3lr cHhsOGZhIikKKyAgICAoImNlY2lsIiAgICAgICAgICAgICAgICAgICAgICAgIjgwMjFmM2ZiZTc1 NzE1YTE3NjJlNzI1NTk0ZDhjMDBjY2UzNjc5ZDgiCisgICAgICIwajE5bHdiczMweTJ4ejhteWsw ZmJ4czRoYmFsMXA4dnFqbW5rdm4zMDF2MHh4YWN5bnhtIikKKyAgICAoKCJjZWNpbCIgImNlY2ls LWxlZ2FjeSIpICAgICAgIjMzZDUwYjg3NGZkNTI3MTE4YmMzNjFkODNkZTNkNDk0ZThiYjU1ZTEi CisgICAgICIxcDRobDE3OTZpYjI2eWt5ZjVzbmw2Y2owbHgwdjdtamgweHFoanc2cWRoNzUzbnNq eWhiIikKKyAgICAoImNvcmVmeCIgICAgICAgICAgICAgICAgICAgICAgImM0ZWVhYjlmYzJmYWEw MTk1YTgxMmU1NTJjZDczZWUyOThkMzkzODYiCisgICAgICIwMzUzMHBmNmRkZHFsaWh2YjgzbTl6 MzRiYXJrOG16cmZmbnJjbHE3MjZnbmRmZzR2cXM4IikKKyAgICAoImNvcmVydCIgICAgICAgICAg ICAgICAgICAgICAgIjExMTM2YWQ1NTc2NzQ4NTA2MzIyNmJlMDhjZmJkMzJlZDU3NGNhNDMiCisg ICAgICIxZzBxODNmZmYxMzIzN253c2ZjbWs3Zm16d3gwa3Y5M3pzcXF5YmNpZ3dpcDV4NmFuaThm IikKKyAgICAoImhlbGl4LWJpbmFyaWVzIiAgICAgICAgICAgICAgIjY0YjNhNjc2MzFhYzhhMDhm ZjgyZDYxMDg3Y2ZiZmM2NjRlYjRhZjgiCisgICAgICIxZjZra3BiemozYng5cDFoYjM2a3pqcTBw cGNrazRycG1qbnI4Mmh5cTd5MThmd2lrZmQ3IikKKyAgICAoImlrZGFzbSIgICAgICAgICAgICAg ICAgICAgICAgImYwZmQ2NmVhMDYzOTI5ZWY1ZDUxYWFmZGIxMDgzMjE2NDgzNWJiMGYiCisgICAg ICIwMzEzcHZtbWpoMDFoOWIzMDZqZDZjZDZmY2JuYnhhZ2xhajgxbTBsMGFjZjR5bjd6YjEwIikK KyAgICAoKCJpa3ZtLWZvcmsiICJpa3ZtIikgICAgICAgICAgIjA4MjY2YWM4YzBiNjIwY2M5Mjlm ZmFlYjFmMjNhYzM3NjI5Y2U4MjUiCisgICAgICIxZzB2MXY4bnZ4a3dxN3c5cXlxaGY5a2dteHEz cW02cnN3NGFsOHgwdzNkbWJneGpocWp2IikKKyAgICAoImlsbGlua2VyLXRlc3QtYXNzZXRzIiAg ICAgICAiZWM5ZWI1MWFmMmViMDdkYmU1MGEyNzI0ZGI4MjZiZjNiZmI5MzBhNiIKKyAgICAgIjFi NHZxNGpiZ25sNGx6ZmZnMDJuNXcxc3BwZzJrNmJma3MwMTUwcGo0MDNzYm5tbDg1Z2wiKQorICAg ICgibGlua2VyIiAgICAgICAgICAgICAgICAgICAgICAiZWQ0YTk0MTM0ODlhYTI5YTcwZTQxZjk0 YzNkYWM1NjIxMDk5ZjczNCIKKyAgICAgIjE2cmRwY2g5YW5hcm5oY3ppNDQxYTl6bmE0cno5M2p3 cGIzMXgwZHpyYjRqMDNjeGFqZzIiKQorICAgIDs7ICgoImh0dHBzOi8vZ2l0aHViLmNvbS9kb3Ru ZXQvbGx2bS1wcm9qZWN0IiAibGx2bS1wcm9qZWN0IikKKyAgICA7OyAgIjdkZmRlYTEyNjdmMGE0 MDk1NWUwMjU2N2RjYmNkMWJjYjk4N2U4MjUiCisgICAgOzsgICIiKQorICAgICgiTmV3dG9uc29m dC5Kc29uIiAgICAgICAgICAgICAiNDcxYzNlMDgwM2E5ZjQwYTBhY2M4YWVjZWIzMWRlNmZmOTNh NTJjNCIKKyAgICAgIjBkZ25nZDVocWs2eWhsZzQwa2FibjZxZG5rbm0zMnpjeDlxNmJtMnczMWNz bnNrNTk3OHMiKQorICAgICgoIk51R2V0LkJ1aWxkVGFza3MiICJudWdldC1idWlsZHRhc2tzIikK KyAgICAgIjk5NTU4NDc5NTc4YjFkNmFmMGY0NDNiYjQxMWJjMzUyMGZjYmFlNWMiCisgICAgICIx NDM0bTZ6OXNiN2J2a2k5YmE2aWlucXBtaDRhNGl5bGQ3Nmp6MTBxejA3c3lja2xmbHEzIikKKyAg ICAoKCJOVW5pdExpdGUiICJudW5pdC1saXRlIikgICAgImE5NzdjYTU3NTcyYzU0NWUxMDhiNTZl ZjMyYWEzZjdmZjgyODc2MTEiCisgICAgICIwMnp3ZGZwdzhwYXpsbHdicDRoa3pxd2ZxbDk4ZzQ4 NTRkaXlrcWRiOXdhMHZyYjh3NHNqIikKKyAgICA7OyAoInJvc2x5bi1iaW5hcmllcyIgICAgICAg ICAgICAgIjFjNjQ4MjQ3MGNkMjE5ZGNjNzUwMzI1OWEyMGYyNmExNzIzZjIwZWMiCisgICAgOzsg ICIiKQorICAgICgicngiICAgICAgICAgICAgICAgICAgICAgICAgICAiYjI5YTRiMGZkYTYwOWUw YWYzM2ZmNTRlZDEzNjUyYjZjY2YwZTA1ZSIKKyAgICAgIjFuMWp3aG1zYmtjdjJkODA2aW1tY3B6 a2I3MnJ6MDR4eTk4bXl3MzU1YTh3NWFoMjV5aXYiKQorICAgIDs7ICgieHVuaXQtYmluYXJpZXMi ICAgICAgICAgICAgICAiOGY2ZTYyZTFjMDE2ZGZiMTU0MjA4NTJlMjIwZTA3MDkxOTIzNzM0YSIK KyAgICA7OyAgIiIpCisgICAgKSkKKworKGRlZmluZS1wdWJsaWMgbW9uby02LjEyLjAKKyAgKHBh Y2thZ2UKKyAgICAoaW5oZXJpdCBtb25vLTUuMTAuMCkKKyAgICAodmVyc2lvbiAiNi4xMi4wLjIw NiIpCisgICAgKG5hbWUgIm1vbm8iKQorICAgIChzb3VyY2UgKG9yaWdpbgorICAgICAgICAgICAg ICAobWV0aG9kIGdpdC1mZXRjaCkKKyAgICAgICAgICAgICAgKHVyaQorICAgICAgICAgICAgICAg KGdpdC1yZWZlcmVuY2UKKyAgICAgICAgICAgICAgICAodXJsICJodHRwczovL2dpdGxhYi53aW5l aHEub3JnL21vbm8vbW9uby5naXQiKQorICAgICAgICAgICAgICAgIChjb21taXQgKHN0cmluZy1h cHBlbmQgIm1vbm8tIiAiNi4xMi4wLjIwNiIpKSkpCisgICAgICAgICAgICAgIChmaWxlLW5hbWUg KGdpdC1maWxlLW5hbWUgbmFtZSB2ZXJzaW9uKSkKKyAgICAgICAgICAgICAgKHNoYTI1NgorICAg ICAgICAgICAgICAgKGJhc2UzMgorICAgICAgICAgICAgICAgICIxY3c5djUzYmdiYzZ2N3htcDVp ajc2eTZpbmI2c3oxZzF6eDJqazgyNXJ4c2hxOTZhbHZrIikpCisgICAgICAgICAgICAgIChtb2R1 bGVzICcoKGd1aXggYnVpbGQgdXRpbHMpCisgICAgICAgICAgICAgICAgICAgICAgICAgKGljZS05 IHN0cmluZy1mdW4pKSkKKyAgICAgICAgICAgICAgKHNuaXBwZXQgI34oYmVnaW4KKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICMkKGFkZC1leHRlcm5hbC1yZXBvcworICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgbW9uby02LjEyLjAtZXh0ZXJuYWwtcmVwby1zcGVjcykKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICMkQHByZXBhcmUtbW9uby1zb3VyY2UtMCkpCisgICAgICAgICAg ICAgIChwYXRjaGVzCisgICAgICAgICAgICAgICAoc2VhcmNoLXBhdGNoZXMKKyAgICAgICAgICAg ICAgICAibW9uby02LjEyLjAtZml4LUNvbmRpdGlvblBhcnNlci5wYXRjaCIKKyAgICAgICAgICAg ICAgICAibW9uby02LjEyLjAtYWRkLXJ1bnBhdGgucGF0Y2giCisgICAgICAgICAgICAgICAgIm1v bm8tNi4xMi4wLWZpeC1Bc3NlbWJseVJlc29sdmVyLnBhdGNoIikpKSkKKyAgICAobmF0aXZlLWlu cHV0cyAobW9kaWZ5LWlucHV0cyAocGFja2FnZS1uYXRpdmUtaW5wdXRzIG1vbm8tNS4xMC4wKQor ICAgICAgICAgICAgICAgICAgICAgKHJlcGxhY2UgIm1vbm8iIG1vbm8tNS4xMC4wKQorICAgICAg ICAgICAgICAgICAgICAgKGFwcGVuZCAoZGVmYXVsdC1weXRob24pKSkpCisgICAgKGlucHV0cyAo bW9kaWZ5LWlucHV0cyAocGFja2FnZS1pbnB1dHMgbW9uby01LjEwLjApCisgICAgICAgICAgICAg IChhcHBlbmQgbGliZ2RpcGx1cykpKQorICAgIChhcmd1bWVudHMKKyAgICAgKHN1YnN0aXR1dGUt a2V5d29yZC1hcmd1bWVudHMgKHBhY2thZ2UtYXJndW1lbnRzIG1vbm8tNS4xMC4wKQorICAgICAg ICgoIzptYWtlLWZsYWdzIG1ha2UtZmxhZ3MgI34nKCkpCisgICAgICAgICN+KGFwcGVuZCAjJG1h a2UtZmxhZ3MKKyAgICAgICAgICAgICAgICAgIChsaXN0CisgICAgICAgICAgICAgICAgICAgKHN0 cmluZy1hcHBlbmQgIlBMQVRGT1JNX0RJU0FCTEVEX1RFU1RTPSIKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICA7OyBzZWdmYXVsdHMgKCEpLCByZWFzb24gdW5rbm93bgorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzYWZlaGFuZGxlLjIuZXhlIgorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIDs7IHVuY2xlYXIgd2h5IHRoZXNlIGZhaWwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYnVnLTEwODM0LmV4ZSIKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAiYnVnLTYwODQ4LmV4ZSIKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICA7OyB0aGVzZSBhcmUgdGVzdHMgb2YgbWljcm9zb2Z0CisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgOzsgdGVsZW1ldHJ5LiAgVGhleSBmYWlsIGJlY2F1 c2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7OyBtaWNyb3NvZnQgdGVsZW1l dHJ5IGlzIG9ubHkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7OyBlbmFibGVk IG9uIE9TWC4gIE5vIGlkZWEgd2h5CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg OzsgdGhlc2UgdGVzdHMgYXJlIHJ1biBieSBkZWZhdWx0LgorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICJtZXJwLWNyYXNoLXRlc3QuZXhlIgorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICJtZXJwLWpzb24tdmFsaWQuZXhlIikpKSkKKyAgICAgICAoKCM6cGhhc2Vz IHBoYXNlcyAjfiVzdGFuZGFyZC1waGFzZXMpCisgICAgICAgICN+KG1vZGlmeS1waGFzZXMgIyRw aGFzZXMKKyAgICAgICAgICAgIChkZWxldGUgJ3BhdGNoLXN1Yi1hdXRvZ2VuLnNoLXNoZWJhbmcp CisgICAgICAgICAgICA7OyBPdXIgNS4xMC4wIGNvbXBpbGVyIGhhcyBiZWVuIHJhdGhlciBzb3Vw ZWQgdXAuCisgICAgICAgICAgICAoYWRkLWFmdGVyICd1bnBhY2sgJ2Rpc2FibGUtcHJvZmlsZS12 ZXJzaW9uLWNoZWNrCisgICAgICAgICAgICAgIChsYW1iZGEgXworICAgICAgICAgICAgICAgIChz dWJzdGl0dXRlKiAibWNzL2J1aWxkL2NvbW1vbi9iYXNpYy1wcm9maWxlLWNoZWNrLmNzIgorICAg ICAgICAgICAgICAgICAgKCgibWluX21vbm9fdmVyc2lvbiA9IC4qIikKKyAgICAgICAgICAgICAg ICAgICAibWluX21vbm9fdmVyc2lvbiA9IG5ldyBWZXJzaW9uICgwLCAwKTtcbiIpKSkpCisgICAg ICAgICAgICAoYWRkLWFmdGVyICd1bnBhY2sgJ2Rpc2FibGUtYyMtOC4wLXRlc3RzCisgICAgICAg ICAgICAgIDs7IFRoZXNlIGFyZW4ndCBjb21waWxhYmxlIGJ5IG1jcworICAgICAgICAgICAgICAo bGFtYmRhIF8KKyAgICAgICAgICAgICAgICAoc3Vic3RpdHV0ZSogIm1vbm8vbWluaS9NYWtlZmls ZS5hbS5pbiIKKyAgICAgICAgICAgICAgICAgICgoIi1sYW5ndmVyc2lvbjo4XFwuMCIpCisgICAg ICAgICAgICAgICAgICAgIiIpKQorICAgICAgICAgICAgICAgIChzdWJzdGl0dXRlKiAibW9uby90 ZXN0cy9NYWtlZmlsZS5hbSIKKyAgICAgICAgICAgICAgICAgICgoIgkoZGltLWdlbmVyaWN8ZGlt LWlzc3VlLTE4OTE3fGludGVyZmFjZS0yfGRlbGVnYXRlMTh8Z2VuZXJpYy11bm1hbmFnZWQtY29u c3RyYWludHxhc3luYy1nZW5lcmljLWVudW0pXFwuY3MuKiIpCisgICAgICAgICAgICAgICAgICAg IiIpKSkpCisgICAgICAgICAgICAoYWRkLWFmdGVyICd1bnBhY2sgJ2Rpc2FibGUtdmVyaWZpY2F0 aW9uLWVycm9yCisgICAgICAgICAgICAgIChsYW1iZGEgXworICAgICAgICAgICAgICAgIDs7IEZv ciBzb21lIHJlYXNvbiB2ZXJpZmljYXRpb24gZmFpbHMgY29tcGxhaW5pbmcgYWJvdXQgYSBidW5j aAorICAgICAgICAgICAgICAgIDs7IG9mIG1pc3NpbmcgaWNhbGxzLgorICAgICAgICAgICAgICAg IChzdWJzdGl0dXRlKiAicnVudGltZS9NYWtlZmlsZS5hbSIKKyAgICAgICAgICAgICAgICAgICgo IgkgICAgZmk7IGRvbmU7IGRvbmU7IikKKyAgICAgICAgICAgICAgICAgICAiCSAgICBmaTsgZG9u ZTsgZG9uZTsgb2s9OjsiKSkpKQorICAgICAgICAgICAgOzsgVGhpcyByZXF1aXJlcyBiaW5hcnkg YmxvYnMgdG8gYmUgdXNlZCwgaXQgZG9lc24ndCBwcm92aWRlIGEKKyAgICAgICAgICAgIDs7IGNs ZWFyIHdheSB0byByZWdlbmVyYXRlIHRoZW0gYW5kIG5vIGNvcnJlc3BvbmRpbmcgc291cmNlIGlz CisgICAgICAgICAgICA7OyBsaW5rZWQsIHBsdXMgZnJvbSB3aGF0IGxpdHRsZSBJIGtub3cgb2Yg aXQgaXQgc291bmRzIGxpa2UgaXQncworICAgICAgICAgICAgOzsgbm90IHNvbWV0aGluZyB3ZSBu ZWVkIGF0IGFsbD8KKyAgICAgICAgICAgIChhZGQtYWZ0ZXIgJ3VucGFjayAnZGlzYWJsZS1oZWxp eC1jbGllbnQKKyAgICAgICAgICAgICAgKGxhbWJkYSBfCisgICAgICAgICAgICAgICAgKHN1YnN0 aXR1dGUqICJtY3MvdG9vbHMvTWFrZWZpbGUiCisgICAgICAgICAgICAgICAgICAoKCJtb25vLWhl bGl4LWNsaWVudCIpCisgICAgICAgICAgICAgICAgICAgIiIpKSkpCisgICAgICAgICAgICAocmVw bGFjZSAnYnVpbGQtcmVmZXJlbmNlLWFzc2VtYmxpZXMKKyAgICAgICAgICAgICAgKGxhbWJkYSog KCM6a2V5IG1ha2UtZmxhZ3MgIzphbGxvdy1vdGhlci1rZXlzKQorICAgICAgICAgICAgICAgIChs ZXQgKCh0b3AgKGdldGN3ZCkpKQorICAgICAgICAgICAgICAgICAgKHdpdGgtZGlyZWN0b3J5LWV4 Y3Vyc2lvbgorICAgICAgICAgICAgICAgICAgICAgICJleHRlcm5hbC9iaW5hcnktcmVmZXJlbmNl LWFzc2VtYmxpZXMiCisgICAgICAgICAgICAgICAgICAgIChzdWJzdGl0dXRlKiAoZmluZC1maWxl cyAiLiIgIl5NYWtlZmlsZSQiKQorICAgICAgICAgICAgICAgICAgICAgICgoIkNTQ19DT01NT05f QVJHUyA6PSAiIGFsbCkKKyAgICAgICAgICAgICAgICAgICAgICAgKHN0cmluZy1hcHBlbmQgYWxs ICItZGVsYXlzaWduKyAiKSkKKyAgICAgICAgICAgICAgICAgICAgICAoKCJJQk1cXC5EYXRhXFwu REIyX1JFRlMgOj0gIiBhbGwpCisgICAgICAgICAgICAgICAgICAgICAgIChzdHJpbmctYXBwZW5k IGFsbCAiU3lzdGVtLlhtbCAiKSkKKyAgICAgICAgICAgICAgICAgICAgICAoKCJNb25vXFwuRGF0 YVxcLlNxbGl0ZV9SRUZTIDo9ICIgYWxsKQorICAgICAgICAgICAgICAgICAgICAgICAoc3RyaW5n LWFwcGVuZCBhbGwgIlN5c3RlbS5YbWwgIikpCisgICAgICAgICAgICAgICAgICAgICAgKCgiU3lz dGVtXFwuRGF0YVxcLkRhdGFTZXRFeHRlbnNpb25zX1JFRlMgOj0gIiBhbGwpCisgICAgICAgICAg ICAgICAgICAgICAgIChzdHJpbmctYXBwZW5kIGFsbCAiU3lzdGVtLlhtbCAiKSkKKyAgICAgICAg ICAgICAgICAgICAgICAoKCJTeXN0ZW1cXC5EYXRhXFwuT3JhY2xlQ2xpZW50X1JFRlMgOj0gIiBh bGwpCisgICAgICAgICAgICAgICAgICAgICAgIChzdHJpbmctYXBwZW5kIGFsbCAiU3lzdGVtLlht bCAiKSkKKyAgICAgICAgICAgICAgICAgICAgICAoKCJTeXN0ZW1cXC5JZGVudGl0eU1vZGVsX1JF RlMgOj0gIiBhbGwpCisgICAgICAgICAgICAgICAgICAgICAgIChzdHJpbmctYXBwZW5kIGFsbCAi U3lzdGVtLkNvbmZpZ3VyYXRpb24gIikpCisgICAgICAgICAgICAgICAgICAgICAgKCgiU3lzdGVt XFwuRGVzaWduX1JFRlMgOj0gIiBhbGwpCisgICAgICAgICAgICAgICAgICAgICAgIChzdHJpbmct YXBwZW5kIGFsbCAiQWNjZXNzaWJpbGl0eSAiKSkKKyAgICAgICAgICAgICAgICAgICAgICAoKCJT eXN0ZW1cXC5XZWJcXC5FeHRlbnNpb25zXFwuRGVzaWduX1JFRlMgOj0gIiBhbGwpCisgICAgICAg ICAgICAgICAgICAgICAgIChzdHJpbmctYXBwZW5kIGFsbCAiU3lzdGVtLldpbmRvd3MuRm9ybXMg U3lzdGVtLldlYiAiKSkKKyAgICAgICAgICAgICAgICAgICAgICAoKCJTeXN0ZW1cXC5TZXJ2aWNl TW9kZWxcXC5Sb3V0aW5nX1JFRlMgOj0gIiBhbGwpCisgICAgICAgICAgICAgICAgICAgICAgIChz dHJpbmctYXBwZW5kIGFsbCAiU3lzdGVtLlhtbCAiKSkKKyAgICAgICAgICAgICAgICAgICAgICAo KCJTeXN0ZW1cXC5XZWJcXC5BYnN0cmFjdGlvbnNfUkVGUyA6PSAiIGFsbCkKKyAgICAgICAgICAg ICAgICAgICAgICAgKHN0cmluZy1hcHBlbmQgYWxsICJTeXN0ZW0gIikpCisgICAgICAgICAgICAg ICAgICAgICAgKCgiU3lzdGVtXFwuUmVhY3RpdmVcXC5XaW5kb3dzXFwuRm9ybXNfUkVGUyA6PSAi IGFsbCkKKyAgICAgICAgICAgICAgICAgICAgICAgKHN0cmluZy1hcHBlbmQgYWxsICJTeXN0ZW0g IikpCisgICAgICAgICAgICAgICAgICAgICAgKCgiU3lzdGVtXFwuV2luZG93c1xcLkZvcm1zXFwu RGF0YVZpc3VhbGl6YXRpb25fUkVGUyA6PSAiIGFsbCkKKyAgICAgICAgICAgICAgICAgICAgICAg KHN0cmluZy1hcHBlbmQgYWxsICJBY2Nlc3NpYmlsaXR5ICIpKQorICAgICAgICAgICAgICAgICAg ICAgICgoIkZhY2FkZXMvU3lzdGVtXFwuU2VydmljZU1vZGVsXFwuUHJpbWl0aXZlc19SRUZTIDo9 ICIgYWxsKQorICAgICAgICAgICAgICAgICAgICAgICAoc3RyaW5nLWFwcGVuZCBhbGwgIlN5c3Rl bS5YbWwgIikpCisgICAgICAgICAgICAgICAgICAgICAgKCgiRmFjYWRlcy9TeXN0ZW1cXC5EeW5h bWljXFwuUnVudGltZV9SRUZTIDo9ICIgYWxsKQorICAgICAgICAgICAgICAgICAgICAgICAoc3Ry aW5nLWFwcGVuZCBhbGwgIlN5c3RlbSAiKSkKKyAgICAgICAgICAgICAgICAgICAgICAoKCJGYWNh ZGVzL1N5c3RlbVxcLlhtbFxcLlhEb2N1bWVudF9SRUZTIDo9ICIgYWxsKQorICAgICAgICAgICAg ICAgICAgICAgICAoc3RyaW5nLWFwcGVuZCBhbGwgIlN5c3RlbS5YbWwgIikpCisgICAgICAgICAg ICAgICAgICAgICAgKCgiRmFjYWRlcy9TeXN0ZW1cXC5SdW50aW1lXFwuU2VyaWFsaXphdGlvbi5Y bWxfUkVGUyA6PSAiIGFsbCkKKyAgICAgICAgICAgICAgICAgICAgICAgKHN0cmluZy1hcHBlbmQg YWxsICJTeXN0ZW0uWG1sICIpKQorICAgICAgICAgICAgICAgICAgICAgICgoIkZhY2FkZXMvU3lz dGVtXFwuRGF0YVxcLkNvbW1vbl9SRUZTIDo9ICIgYWxsKQorICAgICAgICAgICAgICAgICAgICAg ICAoc3RyaW5nLWFwcGVuZCBhbGwgIlN5c3RlbSBTeXN0ZW0uWG1sICIpKSkKKyAgICAgICAgICAg ICAgICAgICAgKHN1YnN0aXR1dGUqICJidWlsZC9tb25vZHJvaWQvTWFrZWZpbGUiCisgICAgICAg ICAgICAgICAgICAgICAgKCgiRUNNQV9LRVkgOj0gXFwuXFwuL1xcLlxcLi9cXC5cXC4vXFwuXFwu L1xcLlxcLi9tb25vLyIpCisgICAgICAgICAgICAgICAgICAgICAgIDs7IGl0IHNob3VsZCBvbmx5 IGJlIDQgZGlyZWN0b3JpZXMgdXAsIGFuZCBpdCdzIGluCisgICAgICAgICAgICAgICAgICAgICAg IDs7IG1jcy8sIG5vdCBtb25vL21jcy8KKyAgICAgICAgICAgICAgICAgICAgICAgIkVDTUFfS0VZ IDo9IC4uLy4uLy4uLy4uLyIpKQorICAgICAgICAgICAgICAgICAgICAoYXBwbHkgaW52b2tlICJt YWtlIiAiQ1NDPW1jcyIgbWFrZS1mbGFncykpKSkpCisgICAgICAgICAgICAocmVwbGFjZSAnY2hl Y2sKKyAgICAgICAgICAgICAgKGxhbWJkYSogKCM6a2V5IHRlc3RzPyAobWFrZS1mbGFncyAnKCkp ICM6YWxsb3ctb3RoZXIta2V5cykKKyAgICAgICAgICAgICAgICAod2hlbiB0ZXN0cz8KKyAgICAg ICAgICAgICAgICAgIDs7IFRoZXJlIGFyZSBtb3JlIHRlc3RzIHRoYW4gdGhlc2UsIGJ1dCB0aGV5 IGRlcGVuZCBvbgorICAgICAgICAgICAgICAgICAgOzsgZXh0ZXJuYWwveHVuaXQtYmluYXJpZXMs IHNvIHdlIGxpbWl0IG91cnNlbHZlcyB0byB0aGUKKyAgICAgICAgICAgICAgICAgIDs7IHRlc3Rz IHRoYXQgZGViaWFuIHJ1bnMuCisgICAgICAgICAgICAgICAgICAod2l0aC1kaXJlY3RvcnktZXhj dXJzaW9uICJtb25vL21pbmkiCisgICAgICAgICAgICAgICAgICAgIChhcHBseSBpbnZva2UgIm1h a2UiICJjaGVjayIgbWFrZS1mbGFncykpCisgICAgICAgICAgICAgICAgICAod2l0aC1kaXJlY3Rv cnktZXhjdXJzaW9uICJtb25vL3Rlc3RzIgorICAgICAgICAgICAgICAgICAgICAoYXBwbHkgaW52 b2tlICJtYWtlIiAiY2hlY2siIG1ha2UtZmxhZ3MpKSkpKSkpKSkpKQpkaWZmIC0tZ2l0IGEvZ251 L3BhY2thZ2VzL3BhdGNoZXMvbW9uby02LjEyLjAtYWRkLXJ1bnBhdGgucGF0Y2ggYi9nbnUvcGFj a2FnZXMvcGF0Y2hlcy9tb25vLTYuMTIuMC1hZGQtcnVucGF0aC5wYXRjaApuZXcgZmlsZSBtb2Rl IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi4zMDYyYmQ2YTBkCi0tLSAvZGV2L251bGwKKysrIGIv Z251L3BhY2thZ2VzL3BhdGNoZXMvbW9uby02LjEyLjAtYWRkLXJ1bnBhdGgucGF0Y2gKQEAgLTAs MCArMSwxODUgQEAKK21vbm86IG1ldGFkYXRhOiBhZGQgPHJ1bnBhdGg+IGVsZW1lbnQgdG8gLmNv bmZpZyBmaWxlcy4KKworVGhpcyBuZXcgZWxlbWVudCBpcyBvZiB0aGUgZm9ybToKKworPHJ1bnBh dGggcGF0aD0iL3BhdGgxL3RvL2xpYnM6L3BhdGgyL3RvL2xpYnM6Li4uIi8+CisKKyh0aGUgOiB3 aWxsIGFjdHVhbGx5IGJlIHdoYXRldmVyIEdfU0VBUkNIUEFUSF9TRVBBUkFUT1JfUyBpcywgc28g bGlrZWx5IDsgb24KK3dpbmRvd3MgYW5kIDogZWxzZXdoZXJlKS4KKworKiBtb25vL21ldGFkYXRh L21ldGFkYXRhLWludGVybmFscy5oIChzdHJ1Y3QgX01vbm9JbWFnZSk6IG5ldyAncnVucGF0aCcg ZmllbGQuCisqIG1vbm8vbWV0YWRhdGEvbW9uby1jb25maWcuYyAocnVucGF0aF9pbml0LCBydW5w YXRoX3N0YXJ0LCBydW5wYXRoX2hhbmRsZXIpOgorICBuZXcgZnVuY3Rpb25zIGFuZCBwYXJzZXIg dXNpbmcgdGhlbSB0byBwb3B1bGF0ZSBydW5wYXRoIGZpZWxkIGZyb20gPHJ1bnBhdGg+CisgIGVs ZW1lbnQuCisgIChtb25vX2NvbmZpZ19pbml0KTogcmVnaXN0ZXIgcnVucGF0aF9oYW5kbGVyLgor KiBtb25vL21ldGFkYXRhL2Fzc2VtYmx5LmMgKG1vbm9fYXNzZW1ibHlfbG9hZF9mdWxsX2dhY19i YXNlX2RlZmF1bHQpOiBuZXcKKyAgJ3JlcXVlc3RpbmcnIHBhcmFtZXRlciwgdXNlIGl0IHRvIHNl YXJjaCB0aGUgcmVxdWVzdGluZyBhc3NlbWJseSdzIHJ1bnBhdGgKKyAgZmlyc3QuCisgIChtb25v X2Fzc2VtYmx5X3JlcXVlc3RfYnluYW1lX25vc2VhcmNoKTogdXNlIGl0LgorCisKK2RpZmYgLS1n aXQgYS9tb25vL21ldGFkYXRhL2Fzc2VtYmx5LmMgYi9tb25vL21ldGFkYXRhL2Fzc2VtYmx5LmMK K2luZGV4IGY5ZmVhYWNmMmMxLi44YzcxYWQwZWI5NSAxMDA2NDQKKy0tLSBhL21vbm8vbWV0YWRh dGEvYXNzZW1ibHkuYworKysrIGIvbW9uby9tZXRhZGF0YS9hc3NlbWJseS5jCitAQCAtMzc2LDcg KzM3Niw3IEBAIG1vbm9fYXNzZW1ibHlfaW52b2tlX3NlYXJjaF9ob29rX2ludGVybmFsIChNb25v QXNzZW1ibHlMb2FkQ29udGV4dCAqYWxjLCBNb25vQXNzCisgc3RhdGljIE1vbm9Bc3NlbWJseSoK KyBtb25vX2Fzc2VtYmx5X3JlcXVlc3RfYnluYW1lX25vc2VhcmNoIChNb25vQXNzZW1ibHlOYW1l ICphbmFtZSwgY29uc3QgTW9ub0Fzc2VtYmx5QnlOYW1lUmVxdWVzdCAqcmVxLCBNb25vSW1hZ2VP cGVuU3RhdHVzICpzdGF0dXMpOworIHN0YXRpYyBNb25vQXNzZW1ibHkqCistbW9ub19hc3NlbWJs eV9sb2FkX2Z1bGxfZ2FjX2Jhc2VfZGVmYXVsdCAoTW9ub0Fzc2VtYmx5TmFtZSAqYW5hbWUsIGNv bnN0IGNoYXIgKmJhc2VkaXIsIE1vbm9Bc3NlbWJseUxvYWRDb250ZXh0ICphbGMsIE1vbm9Bc3Nl bWJseUNvbnRleHRLaW5kIGFzbWN0eCwgTW9ub0ltYWdlT3BlblN0YXR1cyAqc3RhdHVzKTsKKytt b25vX2Fzc2VtYmx5X2xvYWRfZnVsbF9nYWNfYmFzZV9kZWZhdWx0IChNb25vQXNzZW1ibHlOYW1l ICphbmFtZSwgTW9ub0Fzc2VtYmx5ICpyZXF1ZXN0aW5nLCBjb25zdCBjaGFyICpiYXNlZGlyLCBN b25vQXNzZW1ibHlMb2FkQ29udGV4dCAqYWxjLCBNb25vQXNzZW1ibHlDb250ZXh0S2luZCBhc21j dHgsIE1vbm9JbWFnZU9wZW5TdGF0dXMgKnN0YXR1cyk7Cisgc3RhdGljIE1vbm9Bc3NlbWJseSoK KyBjaGFpbl9yZWRpcmVjdGlvbnNfbG9hZGZyb20gKE1vbm9Bc3NlbWJseUxvYWRDb250ZXh0ICph bGMsIE1vbm9JbWFnZSAqaW1hZ2UsIE1vbm9JbWFnZU9wZW5TdGF0dXMgKm91dF9zdGF0dXMpOwor IHN0YXRpYyBNb25vQXNzZW1ibHkqCitAQCAtNDY1NSw3ICs0NjU1LDcgQEAgbW9ub19hc3NlbWJs eV9yZXF1ZXN0X2J5bmFtZV9ub3NlYXJjaCAoTW9ub0Fzc2VtYmx5TmFtZSAqYW5hbWUsCisgCX0K KyAKKyAjaWZuZGVmIEVOQUJMRV9ORVRDT1JFCistCXJlc3VsdCA9IG1vbm9fYXNzZW1ibHlfbG9h ZF9mdWxsX2dhY19iYXNlX2RlZmF1bHQgKGFuYW1lLCByZXEtPmJhc2VkaXIsIHJlcS0+cmVxdWVz dC5hbGMsIHJlcS0+cmVxdWVzdC5hc21jdHgsIHN0YXR1cyk7CisrCXJlc3VsdCA9IG1vbm9fYXNz ZW1ibHlfbG9hZF9mdWxsX2dhY19iYXNlX2RlZmF1bHQgKGFuYW1lLCByZXEtPnJlcXVlc3Rpbmdf YXNzZW1ibHksIHJlcS0+YmFzZWRpciwgcmVxLT5yZXF1ZXN0LmFsYywgcmVxLT5yZXF1ZXN0LmFz bWN0eCwgc3RhdHVzKTsKKyAjZW5kaWYKKyAJcmV0dXJuIHJlc3VsdDsKKyB9CitAQCAtNDY2Nyw2 ICs0NjY3LDcgQEAgbW9ub19hc3NlbWJseV9yZXF1ZXN0X2J5bmFtZV9ub3NlYXJjaCAoTW9ub0Fz c2VtYmx5TmFtZSAqYW5hbWUsCisgICovCisgTW9ub0Fzc2VtYmx5KgorIG1vbm9fYXNzZW1ibHlf bG9hZF9mdWxsX2dhY19iYXNlX2RlZmF1bHQgKE1vbm9Bc3NlbWJseU5hbWUgKmFuYW1lLAorKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1vbm9Bc3NlbWJseSAqcmVx dWVzdGluZywKKyAJCQkJCSAgY29uc3QgY2hhciAqYmFzZWRpciwKKyAJCQkJCSAgTW9ub0Fzc2Vt Ymx5TG9hZENvbnRleHQgKmFsYywKKyAJCQkJCSAgTW9ub0Fzc2VtYmx5Q29udGV4dEtpbmQgYXNt Y3R4LAorQEAgLTQ3MTgsNiArNDcxOSwyMyBAQCBtb25vX2Fzc2VtYmx5X2xvYWRfZnVsbF9nYWNf YmFzZV9kZWZhdWx0IChNb25vQXNzZW1ibHlOYW1lICphbmFtZSwKKyAJCQlmaWxlbmFtZSA9IGdf c3RyY29uY2F0IChhbmFtZS0+bmFtZSwgZXh0LCAoY29uc3QgY2hhciopTlVMTCk7CisgCQl9Cisg CisrICAgICAgICAgICAgICAgIGlmIChyZXF1ZXN0aW5nCisrICAgICAgICAgICAgICAgICAgICAm JiByZXF1ZXN0aW5nLT5pbWFnZQorKyAgICAgICAgICAgICAgICAgICAgJiYgcmVxdWVzdGluZy0+ aW1hZ2UtPnJ1bnBhdGgpIHsKKysgICAgICAgICAgICAgICAgICAgIGNoYXIgKipydW5wYXRoID0g cmVxdWVzdGluZy0+aW1hZ2UtPnJ1bnBhdGg7CisrICAgICAgICAgICAgICAgICAgICBpbnQgajsK KysgICAgICAgICAgICAgICAgICAgIGZvciAoaiA9IDA7IHJ1bnBhdGhbal07IGorKykgeworKyAg ICAgICAgICAgICAgICAgICAgICAgIGZ1bGxwYXRoID0gZ19idWlsZF9maWxlbmFtZSAocnVucGF0 aFtqXSwgZmlsZW5hbWUsIE5VTEwpOworKyAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9 IG1vbm9fYXNzZW1ibHlfcmVxdWVzdF9vcGVuIChmdWxscGF0aCwgJnJlcSwgc3RhdHVzKTsKKysg ICAgICAgICAgICAgICAgICAgICAgICBnX2ZyZWUgKGZ1bGxwYXRoKTsKKysgICAgICAgICAgICAg ICAgICAgICAgICBpZiAocmVzdWx0KSB7CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJl c3VsdC0+aW5fZ2FjID0gRkFMU0U7CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdfZnJl ZSAoZmlsZW5hbWUpOworKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0 OworKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKysgICAgICAgICAgICAgICAgICAgIH0KKysg ICAgICAgICAgICAgICAgfQorKworICNpZm5kZWYgRElTQUJMRV9HQUMKKyAJCWNvbnN0IGdib29s ZWFuIHJlZm9ubHkgPSBhc21jdHggPT0gTU9OT19BU01DVFhfUkVGT05MWTsKKyAKK2RpZmYgLS1n aXQgYS9tb25vL21ldGFkYXRhL2ltYWdlLmMgYi9tb25vL21ldGFkYXRhL2ltYWdlLmMKK2luZGV4 IGUwYjg2ZGQzZDA5Li4xMmE4MDk0ZTRlMCAxMDA2NDQKKy0tLSBhL21vbm8vbWV0YWRhdGEvaW1h Z2UuYworKysrIGIvbW9uby9tZXRhZGF0YS9pbWFnZS5jCitAQCAtMjM2Myw2ICsyMzYzLDkgQEAg bW9ub19pbWFnZV9jbG9zZV9leGNlcHRfcG9vbHMgKE1vbm9JbWFnZSAqaW1hZ2UpCisgCisgCW1v bm9fbWV0YWRhdGFfY2xlYW5fZm9yX2ltYWdlIChpbWFnZSk7CisgCisrICAgICAgICBpZiAoaW1h Z2UtPnJ1bnBhdGgpCisrICAgICAgICAgICAgZ19zdHJmcmVldiAoaW1hZ2UtPnJ1bnBhdGgpOwor KworIAkvKgorIAkgKiBUaGUgY2FjaGVzIGluc2lkZSBhIE1vbm9JbWFnZSBtaWdodCByZWZlciB0 byBtZXRhZGF0YSB3aGljaCBpcyBzdG9yZWQgaW4gcmVmZXJlbmNlZCAKKyAJICogYXNzZW1ibGll cywgc28gd2UgY2FuJ3QgcmVsZWFzZSB0aGVzZSByZWZlcmVuY2VzIGluIG1vbm9fYXNzZW1ibHlf Y2xvc2UgKCkgc2luY2UgdGhlCitkaWZmIC0tZ2l0IGEvbW9uby9tZXRhZGF0YS9tZXRhZGF0YS1p bnRlcm5hbHMuaCBiL21vbm8vbWV0YWRhdGEvbWV0YWRhdGEtaW50ZXJuYWxzLmgKK2luZGV4IDkz ODhkNjliMGZkLi45M2Y0Yjg4MGM2MSAxMDA2NDQKKy0tLSBhL21vbm8vbWV0YWRhdGEvbWV0YWRh dGEtaW50ZXJuYWxzLmgKKysrKyBiL21vbm8vbWV0YWRhdGEvbWV0YWRhdGEtaW50ZXJuYWxzLmgK K0BAIC00MjMsNiArNDIzLDEyIEBAIHN0cnVjdCBfTW9ub0ltYWdlIHsKKyAJLyoqLworIAlNb25v VGFibGVJbmZvICAgICAgICB0YWJsZXMgW01PTk9fVEFCTEVfTlVNXTsKKyAKKysgICAgLyoKKysg ICAgICBTZWFyY2ggcGF0aCB0byBiZSB0cmllZCBmaXJzdCB3aGVuIGxvb2tpbmcgZm9yIGFzc2Vt YmxpZXMgcmVmZXJlbmNlZCBieQorKyAgICAgIHRoaXMgaW1hZ2UsIG9yIE5VTEwuIElzIGEgTlVM TC10ZXJtaW5hdGVkIHZlY3Rvci4KKysgICAgICovCisrICAgICAgICBjaGFyICAgICAgICAgICAg ICAgKipydW5wYXRoOworKworIAkvKgorIAkgKiByZWZlcmVuY2VzIGlzIGluaXRpYWxpemVkIG9u bHkgYnkgdXNpbmcgdGhlIG1vbm9fYXNzZW1ibHlfb3BlbgorIAkgKiBmdW5jdGlvbiwgYW5kIG5v dCBieSB1c2luZyB0aGUgbG93bGV2ZWwgbW9ub19pbWFnZV9vcGVuLgorZGlmZiAtLWdpdCBhL21v bm8vbWV0YWRhdGEvbW9uby1jb25maWcuYyBiL21vbm8vbWV0YWRhdGEvbW9uby1jb25maWcuYwor aW5kZXggZDk3M2RlNTNjOGMuLjg4ODhjN2I0ZmFjIDEwMDY0NAorLS0tIGEvbW9uby9tZXRhZGF0 YS9tb25vLWNvbmZpZy5jCisrKysgYi9tb25vL21ldGFkYXRhL21vbm8tY29uZmlnLmMKK0BAIC0y MSw2ICsyMSw3IEBACisgI2luY2x1ZGUgIm1vbm8vbWV0YWRhdGEvbWV0YWRhdGEtaW50ZXJuYWxz LmgiCisgI2luY2x1ZGUgIm1vbm8vbWV0YWRhdGEvb2JqZWN0LWludGVybmFscy5oIgorICNpbmNs dWRlICJtb25vL3V0aWxzL21vbm8tbG9nZ2VyLWludGVybmFscy5oIgorKyNpbmNsdWRlICJtb25v L3V0aWxzL21vbm8tcGF0aC5oIgorIAorICNpZiBkZWZpbmVkKFRBUkdFVF9QUzMpCisgI2RlZmlu ZSBDT05GSUdfT1MgIkNlbGxPUyIKK0BAIC00NjQsNiArNDY1LDU5IEBAIGFvdF9jYWNoZV9oYW5k bGVyID0geworIAlOVUxMLCAvKiBmaW5pc2ggKi8KKyB9OworIAorK3N0YXRpYyB2b2lkKgorK3J1 bnBhdGhfaW5pdCAoTW9ub0ltYWdlICphc3NlbWJseSkKKyt7CisrICAgIHJldHVybiBhc3NlbWJs eTsKKyt9CisrCisrc3RhdGljIHZvaWQKKytydW5wYXRoX3N0YXJ0IChncG9pbnRlciB1c2VyX2Rh dGEsCisrICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgICAgICAgICAqZWxlbWVudF9uYW1lLAor KyAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyICAgICAgICAqKmF0dHJpYnV0ZV9uYW1lcywKKysg ICAgICAgICAgICAgICBjb25zdCBnY2hhciAgICAgICAgKiphdHRyaWJ1dGVfdmFsdWVzKQorK3sK KysgICAgTW9ub0ltYWdlICphc3NlbWJseSA9IChNb25vSW1hZ2UgKikgdXNlcl9kYXRhOworKyAg ICBpbnQgaTsKKysKKysgICAgaWYgKHN0cmNtcCAoZWxlbWVudF9uYW1lLCAicnVucGF0aCIpICE9 IDApCisrICAgICAgICByZXR1cm47CisrCisrICAgIGZvciAoaSA9IDA7IGF0dHJpYnV0ZV9uYW1l c1tpXTsgaSsrKQorKyAgICAgICAgeworKyAgICAgICAgICAgIGlmKCFzdHJjbXAgKGF0dHJpYnV0 ZV9uYW1lcyBbaV0sICJwYXRoIikpCisrICAgICAgICAgICAgICAgIHsKKysgICAgICAgICAgICAg ICAgICAgIGNoYXIgKipzcGxpdHRlZCwgKipkZXN0OworKworKyAgICAgICAgICAgICAgICAgICAg c3BsaXR0ZWQgPSBnX3N0cnNwbGl0IChhdHRyaWJ1dGVfdmFsdWVzW2ldLAorKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHX1NFQVJDSFBBVEhfU0VQQVJBVE9SX1Ms CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwMDApOworKyAg ICAgICAgICAgICAgICAgICAgaWYgKGFzc2VtYmx5LT5ydW5wYXRoKQorKyAgICAgICAgICAgICAg ICAgICAgICAgIGdfc3RyZnJlZXYgKGFzc2VtYmx5LT5ydW5wYXRoKTsKKysgICAgICAgICAgICAg ICAgICAgIGFzc2VtYmx5LT5ydW5wYXRoID0gZGVzdCA9IHNwbGl0dGVkOworKyAgICAgICAgICAg ICAgICAgICAgd2hpbGUgKCpzcGxpdHRlZCkgeworKyAgICAgICAgICAgICAgICAgICAgICAgIGNo YXIgKnRtcCA9ICpzcGxpdHRlZDsKKysgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKnRtcCkK KysgICAgICAgICAgICAgICAgICAgICAgICAgICAgKmRlc3QrKyA9IG1vbm9fcGF0aF9jYW5vbmlj YWxpemUgKHRtcCk7CisrICAgICAgICAgICAgICAgICAgICAgICAgZ19mcmVlICh0bXApOworKyAg ICAgICAgICAgICAgICAgICAgICAgIHNwbGl0dGVkKys7CisrICAgICAgICAgICAgICAgICAgICB9 CisrICAgICAgICAgICAgICAgICAgICAqZGVzdCA9ICpzcGxpdHRlZDsKKysgICAgICAgICAgICAg ICAgICAgIGJyZWFrOworKyAgICAgICAgICAgICAgICB9CisrICAgICAgICB9CisrfQorKworK3N0 YXRpYyBjb25zdCBNb25vUGFyc2VIYW5kbGVyCisrcnVucGF0aF9oYW5kbGVyID0geworKyAgICAi cnVucGF0aCIsCisrICAgIHJ1bnBhdGhfaW5pdCwKKysgICAgcnVucGF0aF9zdGFydCwKKysgICAg TlVMTCwgLyogdGV4dCAqLworKyAgICBOVUxMLCAvKiBlbmQgKi8KKysgICAgTlVMTCwgLyogZmlu aXNoICovCisrfTsKKysKKyBzdGF0aWMgaW50IGluaXRlZCA9IDA7CisgCisgc3RhdGljIHZvaWQK K0BAIC00NzYsNiArNTMwLDcgQEAgbW9ub19jb25maWdfaW5pdCAodm9pZCkKKyAjZW5kaWYKKyAJ Z19oYXNoX3RhYmxlX2luc2VydCAoY29uZmlnX2hhbmRsZXJzLCAoZ3BvaW50ZXIpIGxlZ2FjeVVF UF9oYW5kbGVyLmVsZW1lbnRfbmFtZSwgKGdwb2ludGVyKSAmbGVnYWN5VUVQX2hhbmRsZXIpOwor IAlnX2hhc2hfdGFibGVfaW5zZXJ0IChjb25maWdfaGFuZGxlcnMsIChncG9pbnRlcikgYW90X2Nh Y2hlX2hhbmRsZXIuZWxlbWVudF9uYW1lLCAoZ3BvaW50ZXIpICZhb3RfY2FjaGVfaGFuZGxlcik7 CisrICAgICAgICBnX2hhc2hfdGFibGVfaW5zZXJ0IChjb25maWdfaGFuZGxlcnMsIChncG9pbnRl cikgcnVucGF0aF9oYW5kbGVyLmVsZW1lbnRfbmFtZSwgKGdwb2ludGVyKSAmcnVucGF0aF9oYW5k bGVyKTsKKyB9CisgCisgLyoqCmRpZmYgLS1naXQgYS9nbnUvcGFja2FnZXMvcGF0Y2hlcy9tb25v LTYuMTIuMC1maXgtQXNzZW1ibHlSZXNvbHZlci5wYXRjaCBiL2dudS9wYWNrYWdlcy9wYXRjaGVz L21vbm8tNi4xMi4wLWZpeC1Bc3NlbWJseVJlc29sdmVyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IDAwMDAwMDAwMDAuLjA1ZGI3YjljZGQKLS0tIC9kZXYvbnVsbAorKysgYi9nbnUv cGFja2FnZXMvcGF0Y2hlcy9tb25vLTYuMTIuMC1maXgtQXNzZW1ibHlSZXNvbHZlci5wYXRjaApA QCAtMCwwICsxLDIzNiBAQAorZGlmZiAtLWdpdCBhL21jcy9jbGFzcy9NaWNyb3NvZnQuQnVpbGQu VGFza3MvTWljcm9zb2Z0LkJ1aWxkLlRhc2tzL0Fzc2VtYmx5UmVzb2x2ZXIuY3MgYi9tY3MvY2xh c3MvTWljcm9zb2Z0LkJ1aWxkLlRhc2tzL01pY3Jvc29mdC5CdWlsZC5UYXNrcy9Bc3NlbWJseVJl c29sdmVyLmNzCitpbmRleCA1ZTBlYzQ4MDk1Ni4uOWRhZjlkNjkyMGIgMTAwNjQ0CistLS0gYS9t Y3MvY2xhc3MvTWljcm9zb2Z0LkJ1aWxkLlRhc2tzL01pY3Jvc29mdC5CdWlsZC5UYXNrcy9Bc3Nl bWJseVJlc29sdmVyLmNzCisrKysgYi9tY3MvY2xhc3MvTWljcm9zb2Z0LkJ1aWxkLlRhc2tzL01p Y3Jvc29mdC5CdWlsZC5UYXNrcy9Bc3NlbWJseVJlc29sdmVyLmNzCitAQCAtNjcsNTQgKzY3LDU2 IEBAIHB1YmxpYyB2b2lkIFJlc2V0U2VhcmNoTG9nZ2VyICgpCisgCQkJCXNlYXJjaF9sb2cuQ2xl YXIgKCk7CisgCQl9CisgCistCQlzdHJpbmcgR2V0R2FjUGF0aCAoKQorKwkJc3RyaW5nW10gR2V0 R2FjUGF0aHMgKCkKKyAJCXsKKyAJCQkvLyBOT1RFOiBjb2RlIGZyb20gbWNzL3Rvb2xzL2dhY3V0 aWwvZHJpdmVyLmNzCistCQkJUHJvcGVydHlJbmZvIGdhYyA9IHR5cGVvZiAoU3lzdGVtLkVudmly b25tZW50KS5HZXRQcm9wZXJ0eSAoIkdhY1BhdGgiLCBCaW5kaW5nRmxhZ3MuU3RhdGljIHwgQmlu ZGluZ0ZsYWdzLk5vblB1YmxpYyk7CisrCQkJUHJvcGVydHlJbmZvIGdhY3MgPSB0eXBlb2YgKFN5 c3RlbS5FbnZpcm9ubWVudCkuR2V0UHJvcGVydHkgKCJHYWNQYXRocyIsIEJpbmRpbmdGbGFncy5T dGF0aWMgfCBCaW5kaW5nRmxhZ3MuTm9uUHVibGljKTsKKyAKKy0JCQlpZiAoZ2FjID09IG51bGwp CisrCQkJaWYgKGdhY3MgPT0gbnVsbCkKKyAJCQkJcmV0dXJuIG51bGw7CisgCistCQkJTWV0aG9k SW5mbyBnZXRfZ2FjID0gZ2FjLkdldEdldE1ldGhvZCAodHJ1ZSk7CistCQkJcmV0dXJuIChzdHJp bmcpIGdldF9nYWMuSW52b2tlIChudWxsLCBudWxsKTsKKysJCQlNZXRob2RJbmZvIGdldF9nYWNz ID0gZ2Fjcy5HZXRHZXRNZXRob2QgKHRydWUpOworKwkJCXJldHVybiAoc3RyaW5nW10pIGdldF9n YWNzLkludm9rZSAobnVsbCwgbnVsbCk7CisgCQl9CisgCisgCQl2b2lkIEdhdGhlckdhY0Fzc2Vt YmxpZXMgKCkKKyAJCXsKKy0JCQlzdHJpbmcgZ2FjX3BhdGggPSBHZXRHYWNQYXRoICgpOworLQkJ CWlmIChnYWNfcGF0aCA9PSBudWxsKQorLQkJCQl0aHJvdyBuZXcgSW52YWxpZE9wZXJhdGlvbkV4 Y2VwdGlvbiAoIlhCdWlsZCBtdXN0IGJlIHJ1biBvbiBNb25vIHJ1bnRpbWUiKTsKKy0JCQlpZiAo IURpcmVjdG9yeS5FeGlzdHMgKGdhY19wYXRoKSkKKy0JCQkJcmV0dXJuOyAvLyBpbiBjYXNlIG1v bm8gaXNuJ3QgImluc3RhbGxlZCIuCistCistCQkJVmVyc2lvbiB2ZXJzaW9uOworLQkJCURpcmVj dG9yeUluZm8gdmVyc2lvbl9pbmZvLCBhc3NlbWJseV9pbmZvOworLQorLQkJCWZvcmVhY2ggKHN0 cmluZyBhc3NlbWJseV9uYW1lIGluIERpcmVjdG9yeS5HZXREaXJlY3RvcmllcyAoZ2FjX3BhdGgp KSB7CistCQkJCWFzc2VtYmx5X2luZm8gPSBuZXcgRGlyZWN0b3J5SW5mbyAoYXNzZW1ibHlfbmFt ZSk7CistCQkJCWZvcmVhY2ggKHN0cmluZyB2ZXJzaW9uX3Rva2VuIGluIERpcmVjdG9yeS5HZXRE aXJlY3RvcmllcyAoYXNzZW1ibHlfbmFtZSkpIHsKKy0JCQkJCWZvcmVhY2ggKHN0cmluZyBmaWxl IGluIERpcmVjdG9yeS5HZXRGaWxlcyAodmVyc2lvbl90b2tlbiwgIiouZGxsIikpIHsKKy0JCQkJ CQl2ZXJzaW9uX2luZm8gPSBuZXcgRGlyZWN0b3J5SW5mbyAodmVyc2lvbl90b2tlbik7CistCQkJ CQkJdmVyc2lvbiA9IG5ldyBWZXJzaW9uICh2ZXJzaW9uX2luZm8uTmFtZS5TcGxpdCAoCistCQkJ CQkJCW5ldyBjaGFyIFtdIHsnXyd9LCBTdHJpbmdTcGxpdE9wdGlvbnMuUmVtb3ZlRW1wdHlFbnRy aWVzKSBbMF0pOworLQorLQkJCQkJCURpY3Rpb25hcnk8VmVyc2lvbiwgc3RyaW5nPiBhc3NlbWJs aWVzQnlWZXJzaW9uID0gbmV3IERpY3Rpb25hcnkgPFZlcnNpb24sIHN0cmluZz4gKCk7CistCQkJ CQkJaWYgKCFnYWMuVHJ5R2V0VmFsdWUgKGFzc2VtYmx5X2luZm8uTmFtZSwgb3V0IGFzc2VtYmxp ZXNCeVZlcnNpb24pKSB7CistCQkJCQkJCWFzc2VtYmxpZXNCeVZlcnNpb24gPSBuZXcgRGljdGlv bmFyeSA8VmVyc2lvbiwgc3RyaW5nPiAoKTsKKy0JCQkJCQkJZ2FjLkFkZCAoYXNzZW1ibHlfaW5m by5OYW1lLCBhc3NlbWJsaWVzQnlWZXJzaW9uKTsKKy0JCQkJCQl9CistCistCQkJCQkJc3RyaW5n IGZvdW5kX2ZpbGU7CistCQkJCQkJaWYgKGFzc2VtYmxpZXNCeVZlcnNpb24uVHJ5R2V0VmFsdWUg KHZlcnNpb24sIG91dCBmb3VuZF9maWxlKSAmJgorLQkJCQkJCQlGaWxlLkdldExhc3RXcml0ZVRp bWUgKGZpbGUpIDw9IEZpbGUuR2V0TGFzdFdyaXRlVGltZSAoZm91bmRfZmlsZSkpCistCQkJCQkJ CQkvLyBEdXBsaWNhdGUgZm91bmQsIHRha2UgdGhlIG5ld2VyIGZpbGUKKy0JCQkJCQkJCWNvbnRp bnVlOworLQorLQkJCQkJCWFzc2VtYmxpZXNCeVZlcnNpb24gW3ZlcnNpb25dID0gZmlsZTsKKy0J CQkJCX0KKy0JCQkJfQorLQkJCX0KKy0JCX0KKysgICAgICAgICAgICBzdHJpbmdbXSBnYWNfcGF0 aHMgPSBHZXRHYWNQYXRocyAoKTsKKysgICAgICAgICAgICBpZiAoZ2FjX3BhdGhzID09IG51bGwp CisrICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkT3BlcmF0aW9uRXhjZXB0aW9uICgi WEJ1aWxkIG11c3QgYmUgcnVuIG9uIE1vbm8gcnVudGltZSIpOworKyAgICAgICAgICAgIGlmIChn YWNfcGF0aHMuTGVuZ3RoID09IDAgfHwgIURpcmVjdG9yeS5FeGlzdHMgKGdhY19wYXRoc1swXSkp CisrICAgICAgICAgICAgICAgIHJldHVybjsgLy8gaW4gY2FzZSBtb25vIGlzbid0ICJpbnN0YWxs ZWQiLgorKworKyAgICAgICAgICAgIFZlcnNpb24gdmVyc2lvbjsKKysgICAgICAgICAgICBEaXJl Y3RvcnlJbmZvIHZlcnNpb25faW5mbywgYXNzZW1ibHlfaW5mbzsKKysKKysgICAgICAgICAgICBm b3JlYWNoIChzdHJpbmcgZ2FjX3BhdGggaW4gZ2FjX3BhdGhzKSB7CisrICAgICAgICAgICAgICAg IGZvcmVhY2ggKHN0cmluZyBhc3NlbWJseV9uYW1lIGluIERpcmVjdG9yeS5HZXREaXJlY3Rvcmll cyAoZ2FjX3BhdGgpKSB7CisrICAgICAgICAgICAgICAgICAgICBhc3NlbWJseV9pbmZvID0gbmV3 IERpcmVjdG9yeUluZm8gKGFzc2VtYmx5X25hbWUpOworKyAgICAgICAgICAgICAgICAgICAgZm9y ZWFjaCAoc3RyaW5nIHZlcnNpb25fdG9rZW4gaW4gRGlyZWN0b3J5LkdldERpcmVjdG9yaWVzIChh c3NlbWJseV9uYW1lKSkgeworKyAgICAgICAgICAgICAgICAgICAgICAgIGZvcmVhY2ggKHN0cmlu ZyBmaWxlIGluIERpcmVjdG9yeS5HZXRGaWxlcyAodmVyc2lvbl90b2tlbiwgIiouZGxsIikpIHsK KysgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVyc2lvbl9pbmZvID0gbmV3IERpcmVjdG9y eUluZm8gKHZlcnNpb25fdG9rZW4pOworKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZXJz aW9uID0gbmV3IFZlcnNpb24gKHZlcnNpb25faW5mby5OYW1lLlNwbGl0ICgKKysgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IGNoYXIgW10g eydfJ30sIFN0cmluZ1NwbGl0T3B0aW9ucy5SZW1vdmVFbXB0eUVudHJpZXMpIFswXSk7CisrCisr ICAgICAgICAgICAgICAgICAgICAgICAgICAgIERpY3Rpb25hcnk8VmVyc2lvbiwgc3RyaW5nPiBh c3NlbWJsaWVzQnlWZXJzaW9uID0gbmV3IERpY3Rpb25hcnkgPFZlcnNpb24sIHN0cmluZz4gKCk7 CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZ2FjLlRyeUdldFZhbHVlIChhc3Nl bWJseV9pbmZvLk5hbWUsIG91dCBhc3NlbWJsaWVzQnlWZXJzaW9uKSkgeworKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgYXNzZW1ibGllc0J5VmVyc2lvbiA9IG5ldyBEaWN0aW9uYXJ5 IDxWZXJzaW9uLCBzdHJpbmc+ICgpOworKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Z2FjLkFkZCAoYXNzZW1ibHlfaW5mby5OYW1lLCBhc3NlbWJsaWVzQnlWZXJzaW9uKTsKKysgICAg ICAgICAgICAgICAgICAgICAgICAgICAgfQorKworKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICBzdHJpbmcgZm91bmRfZmlsZTsKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFz c2VtYmxpZXNCeVZlcnNpb24uVHJ5R2V0VmFsdWUgKHZlcnNpb24sIG91dCBmb3VuZF9maWxlKSAm JgorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmlsZS5HZXRMYXN0V3JpdGVUaW1l IChmaWxlKSA8PSBGaWxlLkdldExhc3RXcml0ZVRpbWUgKGZvdW5kX2ZpbGUpKQorKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgLy8gRHVwbGljYXRlIGZvdW5kLCB0YWtlIHRoZSBuZXdl ciBmaWxlCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKysKKysg ICAgICAgICAgICAgICAgICAgICAgICAgICAgYXNzZW1ibGllc0J5VmVyc2lvbiBbdmVyc2lvbl0g PSBmaWxlOworKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKysgICAgICAgICAgICAgICAgICAg IH0KKysgICAgICAgICAgICAgICAgfQorKyAgICAgICAgICAgIH0KKysgICAgICAgIH0KKyAKKyAJ CXB1YmxpYyBSZXNvbHZlZFJlZmVyZW5jZSBGaW5kSW5UYXJnZXRGcmFtZXdvcmsgKElUYXNrSXRl bSByZWZlcmVuY2UsIHN0cmluZyBmcmFtZXdvcmtfZGlyLCBib29sIHNwZWNpZmljX3ZlcnNpb24p CisgCQl7CitkaWZmIC0tZ2l0IGEvbWNzL2NsYXNzL2NvcmxpYi9TeXN0ZW0vRW52aXJvbm1lbnQu Y3MgYi9tY3MvY2xhc3MvY29ybGliL1N5c3RlbS9FbnZpcm9ubWVudC5jcworaW5kZXggZmQ5MzZh YjIxYTQuLmI1YTVjNzdjMWEzIDEwMDY0NAorLS0tIGEvbWNzL2NsYXNzL2NvcmxpYi9TeXN0ZW0v RW52aXJvbm1lbnQuY3MKKysrKyBiL21jcy9jbGFzcy9jb3JsaWIvU3lzdGVtL0Vudmlyb25tZW50 LmNzCitAQCAtOTg0LDkgKzk4NCwxOCBAQCBwcml2YXRlIHN0YXRpYyBzdHJpbmcgR2FjUGF0aCB7 CisgCQkJCXJldHVybiBQYXRoLkNvbWJpbmUgKFBhdGguQ29tYmluZSAoaW50ZXJuYWxHZXRHYWNQ YXRoICgpLCAibW9ubyIpLCAiZ2FjIik7CisgCQkJfQorIAkJfQorKworKyAgICAgICAgcHJpdmF0 ZSBzdGF0aWMgc3RyaW5nW10gR2FjUGF0aHMgeworKyAgICAgICAgICAgIGdldCB7CisrICAgICAg ICAgICAgICAgIHJldHVybiBpbnRlcm5hbEdldEdhY1BhdGhzICgpOworKyAgICAgICAgICAgIH0K KysgICAgICAgIH0KKyAjcHJhZ21hIHdhcm5pbmcgcmVzdG9yZSAxNjkKKyAJCVtNZXRob2RJbXBs QXR0cmlidXRlIChNZXRob2RJbXBsT3B0aW9ucy5JbnRlcm5hbENhbGwpXQorIAkJaW50ZXJuYWwg ZXh0ZXJuIHN0YXRpYyBzdHJpbmcgaW50ZXJuYWxHZXRHYWNQYXRoICgpOworKworKyAgICAgICAg W01ldGhvZEltcGxBdHRyaWJ1dGUgKE1ldGhvZEltcGxPcHRpb25zLkludGVybmFsQ2FsbCldCisr CQlpbnRlcm5hbCBleHRlcm4gc3RhdGljIHN0cmluZyBbXSBpbnRlcm5hbEdldEdhY1BhdGhzICgp OworICNlbmRpZgorIAkJW01ldGhvZEltcGxBdHRyaWJ1dGUgKE1ldGhvZEltcGxPcHRpb25zLklu dGVybmFsQ2FsbCldCisgCQlpbnRlcm5hbCBleHRlcm4gc3RhdGljIHN0cmluZyBbXSBHZXRMb2dp Y2FsRHJpdmVzSW50ZXJuYWwgKCk7CitkaWZmIC0tZ2l0IGEvbW9uby9tZXRhZGF0YS9hc3NlbWJs eS5jIGIvbW9uby9tZXRhZGF0YS9hc3NlbWJseS5jCitpbmRleCA4YzcxYWQwZWI5NS4uNzU5ZDVh ZWZiY2YgMTAwNjQ0CistLS0gYS9tb25vL21ldGFkYXRhL2Fzc2VtYmx5LmMKKysrKyBiL21vbm8v bWV0YWRhdGEvYXNzZW1ibHkuYworQEAgLTg1NCw2ICs4NTQsMTEgQEAgbW9ub19hc3NlbWJseV9n ZXRyb290ZGlyICh2b2lkKQorIAlyZXR1cm4gZGVmYXVsdF9wYXRoIFswXTsKKyB9CisgCisrY2hh ciAqKm1vbm9fYXNzZW1ibHlfZ2V0X2V4dHJhX2dhY19wYXRocygpCisreworKyAgICByZXR1cm4g ZXh0cmFfZ2FjX3BhdGhzOworK30KKysKKyAvKioKKyAgKiBtb25vX25hdGl2ZV9nZXRyb290ZGly OgorICAqIAorZGlmZiAtLWdpdCBhL21vbm8vbWV0YWRhdGEvYXNzZW1ibHkuaCBiL21vbm8vbWV0 YWRhdGEvYXNzZW1ibHkuaAoraW5kZXggZTljMDJlZTI2ZjUuLmU1ZjA2MGU4MjM4IDEwMDY0NAor LS0tIGEvbW9uby9tZXRhZGF0YS9hc3NlbWJseS5oCisrKysgYi9tb25vL21ldGFkYXRhL2Fzc2Vt Ymx5LmgKK0BAIC01MCw2ICs1MCw3IEBAIE1PTk9fQVBJIE1PTk9fUlRfRVhURVJOQUxfT05MWSBN b25vSW1hZ2UqICAgIG1vbm9fYXNzZW1ibHlfbG9hZF9tb2R1bGUgKE1vbm9Bc3NlCisgTU9OT19B UEkgdm9pZCAgICAgICAgICBtb25vX2Fzc2VtYmx5X2Nsb3NlICAgICAgKE1vbm9Bc3NlbWJseSAq YXNzZW1ibHkpOworIE1PTk9fQVBJIHZvaWQgICAgICAgICAgbW9ub19hc3NlbWJseV9zZXRyb290 ZGlyIChjb25zdCBjaGFyICpyb290X2Rpcik7CisgTU9OT19BUEkgTU9OT19DT05TVF9SRVRVUk4g Y2hhciAqbW9ub19hc3NlbWJseV9nZXRyb290ZGlyICh2b2lkKTsKKytNT05PX0FQSSBjaGFyICoq bW9ub19hc3NlbWJseV9nZXRfZXh0cmFfZ2FjX3BhdGhzICh2b2lkKTsKKyBNT05PX0FQSSBjaGFy ICAgICAgICAgKm1vbm9fbmF0aXZlX2dldHJvb3RkaXIgKHZvaWQpOworIE1PTk9fQVBJIHZvaWQJ ICAgICAgIG1vbm9fYXNzZW1ibHlfZm9yZWFjaCAgICAoTW9ub0Z1bmMgZnVuYywgdm9pZCogdXNl cl9kYXRhKTsKKyBNT05PX0FQSSB2b2lkICAgICAgICAgIG1vbm9fYXNzZW1ibHlfc2V0X21haW4g ICAoTW9ub0Fzc2VtYmx5ICphc3NlbWJseSk7CitkaWZmIC0tZ2l0IGEvbW9uby9tZXRhZGF0YS9p Y2FsbC1kZWNsLmggYi9tb25vL21ldGFkYXRhL2ljYWxsLWRlY2wuaAoraW5kZXggYTc3ZmNmMzg1 OTguLjNmMGYxNzU4ZWMyIDEwMDY0NAorLS0tIGEvbW9uby9tZXRhZGF0YS9pY2FsbC1kZWNsLmgK KysrKyBiL21vbm8vbWV0YWRhdGEvaWNhbGwtZGVjbC5oCitAQCAtMTUyLDYgKzE1Miw3IEBAIElD QUxMX0VYUE9SVCBnaW50MzIgdmVzX2ljYWxsX1N5c3RlbV9FbnZpcm9ubWVudF9nZXRfVGlja0Nv dW50ICh2b2lkKTsKKyAjaWYgRU5BQkxFX05FVENPUkUKKyBJQ0FMTF9FWFBPUlQgZ2ludDY0IHZl c19pY2FsbF9TeXN0ZW1fRW52aXJvbm1lbnRfZ2V0X1RpY2tDb3VudDY0ICh2b2lkKTsKKyAjZW5k aWYKKytJQ0FMTF9FWFBPUlQgTW9ub0FycmF5ICp2ZXNfaWNhbGxfU3lzdGVtX0Vudmlyb25tZW50 X0dldEdhY1BhdGhzICh2b2lkKTsKKyBJQ0FMTF9FWFBPUlQgZ2ludDY0IHZlc19pY2FsbF9TeXN0 ZW1fRGF0ZVRpbWVfR2V0U3lzdGVtVGltZUFzRmlsZVRpbWUgKHZvaWQpOworIElDQUxMX0VYUE9S VCBnaW50NjQgdmVzX2ljYWxsX1N5c3RlbV9EaWFnbm9zdGljc19Qcm9jZXNzX0dldFByb2Nlc3NE YXRhIChpbnQsIGdpbnQzMiwgTW9ub1Byb2Nlc3NFcnJvciopOworIElDQUxMX0VYUE9SVCBnaW50 NjQgdmVzX2ljYWxsX1N5c3RlbV9EaWFnbm9zdGljc19TdG9wd2F0Y2hfR2V0VGltZXN0YW1wICh2 b2lkKTsKK2RpZmYgLS1naXQgYS9tb25vL21ldGFkYXRhL2ljYWxsLWRlZi5oIGIvbW9uby9tZXRh ZGF0YS9pY2FsbC1kZWYuaAoraW5kZXggMGE0NDcyOTY3NGIuLjU5YzgwM2JhNDg4IDEwMDY0NAor LS0tIGEvbW9uby9tZXRhZGF0YS9pY2FsbC1kZWYuaAorKysrIGIvbW9uby9tZXRhZGF0YS9pY2Fs bC1kZWYuaAorQEAgLTMyNyw2ICszMjcsNyBAQCBIQU5ETEVTKEVOVl8xNmIsICJnZXRfYnVuZGxl ZF9tYWNoaW5lX2NvbmZpZyIsIHZlc19pY2FsbF9TeXN0ZW1fRW52aXJvbm1lbnRfZ2V0XworIEhB TkRMRVMoRU5WXzE2bSwgImludGVybmFsQnJvYWRjYXN0U2V0dGluZ0NoYW5nZSIsIHZlc19pY2Fs bF9TeXN0ZW1fRW52aXJvbm1lbnRfQnJvYWRjYXN0U2V0dGluZ0NoYW5nZSwgdm9pZCwgMCwgKCkp CisgSEFORExFUyhFTlZfMTcsICJpbnRlcm5hbEdldEVudmlyb25tZW50VmFyaWFibGVfbmF0aXZl IiwgdmVzX2ljYWxsX1N5c3RlbV9FbnZpcm9ubWVudF9HZXRFbnZpcm9ubWVudFZhcmlhYmxlX25h dGl2ZSwgTW9ub1N0cmluZywgMSwgKGNvbnN0X2NoYXJfcHRyKSkKKyBIQU5ETEVTKEVOVl8xOCwg ImludGVybmFsR2V0R2FjUGF0aCIsIHZlc19pY2FsbF9TeXN0ZW1fRW52aXJvbm1lbnRfR2V0R2Fj UGF0aCwgTW9ub1N0cmluZywgMCwgKCkpCisrTk9IQU5ETEVTKElDQUxMKEVOVl8xOF8xLCAiaW50 ZXJuYWxHZXRHYWNQYXRocyIsIHZlc19pY2FsbF9TeXN0ZW1fRW52aXJvbm1lbnRfR2V0R2FjUGF0 aHMpKQorIEhBTkRMRVMoRU5WXzE5LCAiaW50ZXJuYWxHZXRIb21lIiwgdmVzX2ljYWxsX1N5c3Rl bV9FbnZpcm9ubWVudF9JbnRlcm5hbEdldEhvbWUsIE1vbm9TdHJpbmcsIDAsICgpKQorIE5PSEFO RExFUyhJQ0FMTChFTlZfMjAsICJzZXRfRXhpdENvZGUiLCBtb25vX2Vudmlyb25tZW50X2V4aXRj b2RlX3NldCkpCisgSUNBTExfVFlQRShHQywgIlN5c3RlbS5HQyIsIEdDXzEwKQorZGlmZiAtLWdp dCBhL21vbm8vbWV0YWRhdGEvaWNhbGwuYyBiL21vbm8vbWV0YWRhdGEvaWNhbGwuYworaW5kZXgg NmQxNmI5YzM1NDAuLjFlNTkyYzMwZTI3IDEwMDY0NAorLS0tIGEvbW9uby9tZXRhZGF0YS9pY2Fs bC5jCisrKysgYi9tb25vL21ldGFkYXRhL2ljYWxsLmMKK0BAIC03NzgxLDYgKzc3ODEsNTYgQEAg dmVzX2ljYWxsX1N5c3RlbV9FbnZpcm9ubWVudF9HZXRHYWNQYXRoIChNb25vRXJyb3IgKmVycm9y KQorIH0KKyAjZW5kaWYKKyAKKytJQ0FMTF9FWFBPUlQgTW9ub0FycmF5ICoKKyt2ZXNfaWNhbGxf U3lzdGVtX0Vudmlyb25tZW50X0dldEdhY1BhdGhzICgpCisreworKyAgICBjaGFyICoqZXh0cmFf Z2FjX3BhdGhzID0gbW9ub19hc3NlbWJseV9nZXRfZXh0cmFfZ2FjX3BhdGhzKCk7CisrICAgIGNv bnN0IGNoYXIgKnJvb3RkaXIgPSBtb25vX2Fzc2VtYmx5X2dldHJvb3RkaXIgKCk7CisrICAgIGNo YXIgKiplOworKyAgICBpbnQgbjsKKysgICAgTW9ub0RvbWFpbiAqZG9tYWluOworKyAgICBNb25v QXJyYXkgKm91dDsKKysgICAgTW9ub1N0cmluZyAqc3RyOworKyAgICBnY2hhciAqdG1wOworKyAg ICBNb25vRXJyb3IgZXJyb3I7CisrICAgIG4gPSAwOworKyAgICBpZiAocm9vdGRpcikgbisrOwor KyAgICBpZiAoZXh0cmFfZ2FjX3BhdGhzKSB7CisrICAgICAgICBmb3IgKGUgPSBleHRyYV9nYWNf cGF0aHM7ICplICE9IDA7IGUrKyk7CisrICAgICAgICBuICs9IChlIC0gZXh0cmFfZ2FjX3BhdGhz KTsKKysgICAgfQorKworKyAgICBkb21haW4gPSBtb25vX2RvbWFpbl9nZXQgKCk7CisrICAgIG91 dCA9IG1vbm9fYXJyYXlfbmV3X2NoZWNrZWQgKGRvbWFpbiwgbW9ub19kZWZhdWx0cy5zdHJpbmdf Y2xhc3MsIG4sICZlcnJvcik7CisrCisrICAgIGlmIChtb25vX2Vycm9yX3NldF9wZW5kaW5nX2V4 Y2VwdGlvbiAoJmVycm9yKSkKKysgICAgICAgIHJldHVybiBOVUxMOworKworKyAgICBuID0gMDsK KysgICAgaWYgKHJvb3RkaXIpIHsKKysgICAgICAgIHRtcCA9IGdfYnVpbGRfcGF0aCAoR19ESVJf U0VQQVJBVE9SX1MsIHJvb3RkaXIsICJtb25vIiwgImdhYyIsIE5VTEwpOworKyAgICAgICAgc3Ry ID0gbW9ub19zdHJpbmdfbmV3X2NoZWNrZWQgKGRvbWFpbiwgdG1wLCAmZXJyb3IpOworKyAgICAg ICAgZ19mcmVlICh0bXApOworKyAgICAgICAgaWYgKG1vbm9fZXJyb3Jfc2V0X3BlbmRpbmdfZXhj ZXB0aW9uICgmZXJyb3IpKQorKyAgICAgICAgICAgIHJldHVybiBOVUxMOworKyAgICAgICAgbW9u b19hcnJheV9zZXRyZWZfaW50ZXJuYWwgKG91dCwgbiwgc3RyKTsKKysgICAgICAgIG4rKzsKKysg ICAgfQorKyAgICBpZiAoZXh0cmFfZ2FjX3BhdGhzKSB7CisrICAgICAgICBmb3IgKGUgPSBleHRy YV9nYWNfcGF0aHM7ICplICE9IDA7IGUrKykgeworKyAgICAgICAgICAgIHRtcCA9IGdfYnVpbGRf cGF0aCAoR19ESVJfU0VQQVJBVE9SX1MsICplLCAibGliIiwgIm1vbm8iLCAiZ2FjIiwgTlVMTCk7 CisrICAgICAgICAgICAgc3RyID0gbW9ub19zdHJpbmdfbmV3X2NoZWNrZWQgKGRvbWFpbiwgdG1w LCAmZXJyb3IpOworKyAgICAgICAgICAgIGdfZnJlZSAodG1wKTsKKysgICAgICAgICAgICBpZiAo bW9ub19lcnJvcl9zZXRfcGVuZGluZ19leGNlcHRpb24gKCZlcnJvcikpCisrICAgICAgICAgICAg ICAgIHJldHVybiBOVUxMOworKyAgICAgICAgICAgIG1vbm9fYXJyYXlfc2V0cmVmX2ludGVybmFs IChvdXQsIG4sIHN0cik7CisrICAgICAgICAgICAgbisrOworKyAgICAgICAgfQorKyAgICB9Cisr CisrICAgIHJldHVybiBvdXQ7CisrfQorKworICNpZm5kZWYgSE9TVF9XSU4zMgorIHN0YXRpYyBp bmxpbmUgTW9ub1N0cmluZ0hhbmRsZQorIG1vbm9faWNhbGxfZ2V0X3dpbmRvd3NfZm9sZGVyX3Bh dGggKGludCBmb2xkZXIsIE1vbm9FcnJvciAqZXJyb3IpCmRpZmYgLS1naXQgYS9nbnUvcGFja2Fn ZXMvcGF0Y2hlcy9tb25vLTYuMTIuMC1maXgtQ29uZGl0aW9uUGFyc2VyLnBhdGNoIGIvZ251L3Bh Y2thZ2VzL3BhdGNoZXMvbW9uby02LjEyLjAtZml4LUNvbmRpdGlvblBhcnNlci5wYXRjaApuZXcg ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi40ZWNkZTA3ZDQyCi0tLSAvZGV2L251 bGwKKysrIGIvZ251L3BhY2thZ2VzL3BhdGNoZXMvbW9uby02LjEyLjAtZml4LUNvbmRpdGlvblBh cnNlci5wYXRjaApAQCAtMCwwICsxLDQ2IEBACitkaWZmIC0tZ2l0IGEvbWNzL2NsYXNzL01pY3Jv c29mdC5CdWlsZC5FbmdpbmUvTWljcm9zb2Z0LkJ1aWxkLkJ1aWxkRW5naW5lL0NvbmRpdGlvblBh cnNlci5jcyBiL21jcy9jbGFzcy9NaWNyb3NvZnQuQnVpbGQuRW5naW5lL01pY3Jvc29mdC5CdWls ZC5CdWlsZEVuZ2luZS9Db25kaXRpb25QYXJzZXIuY3MKK2luZGV4IGI1ZTJlODA5YWU0Li43NTc0 OTJkMTVlNCAxMDA2NDQKKy0tLSBhL21jcy9jbGFzcy9NaWNyb3NvZnQuQnVpbGQuRW5naW5lL01p Y3Jvc29mdC5CdWlsZC5CdWlsZEVuZ2luZS9Db25kaXRpb25QYXJzZXIuY3MKKysrKyBiL21jcy9j bGFzcy9NaWNyb3NvZnQuQnVpbGQuRW5naW5lL01pY3Jvc29mdC5CdWlsZC5CdWlsZEVuZ2luZS9D b25kaXRpb25QYXJzZXIuY3MKK0BAIC0yMDUsMTkgKzIwNSwzMCBAQCBDb25kaXRpb25FeHByZXNz aW9uIFBhcnNlRnVuY3Rpb25FeHByZXNzaW9uIChzdHJpbmcgZnVuY3Rpb25fbmFtZSkKKyAJCXsK KyAJCQlMaXN0IDxDb25kaXRpb25GYWN0b3JFeHByZXNzaW9uPiBsaXN0ID0gbmV3IExpc3QgPENv bmRpdGlvbkZhY3RvckV4cHJlc3Npb24+ICgpOworIAkJCUNvbmRpdGlvbkZhY3RvckV4cHJlc3Np b24gZTsKKy0JCQkKKysKKysgICAgICAgICAgICAvKiBzdGFydHMgbG9va2luZyBhdCB0aGUgb3Bl biBwYXJlbiwgbW92ZSBwYXN0IGl0ICovCisrICAgICAgICAgICAgdG9rZW5pemVyLkdldE5leHRU b2tlbiAoKTsKKysgICAgICAgICAgICBpZiAodG9rZW5pemVyLlRva2VuLlR5cGUgPT0gVG9rZW5U eXBlLlJpZ2h0UGFyZW4pIHsKKysgICAgICAgICAgICAgICAgLyogbGVhdmUgdXMgbG9va2luZyBw YXN0IHRoZSBlbmQgb2YgdGhlIGFyZ3VtZW50IGxpc3QgKi8KKysgICAgICAgICAgICAgICAgdG9r ZW5pemVyLkdldE5leHRUb2tlbiAoKTsKKysgICAgICAgICAgICAgICAgcmV0dXJuIGxpc3Q7Cisr ICAgICAgICAgICAgfQorIAkJCXdoaWxlICh0cnVlKSB7CistCQkJCXRva2VuaXplci5HZXROZXh0 VG9rZW4gKCk7CistCQkJCWlmICh0b2tlbml6ZXIuVG9rZW4uVHlwZSA9PSBUb2tlblR5cGUuUmln aHRQYXJlbikgeworLQkJCQkJdG9rZW5pemVyLkdldE5leHRUb2tlbiAoKTsKKy0JCQkJCWJyZWFr OworLQkJCQl9CistCQkJCWlmICh0b2tlbml6ZXIuVG9rZW4uVHlwZSA9PSBUb2tlblR5cGUuQ29t bWEpCisrICAgICAgICAgICAgICAgIGUgPSAoQ29uZGl0aW9uRmFjdG9yRXhwcmVzc2lvbikgUGFy c2VGYWN0b3JFeHByZXNzaW9uICgpOworKyAgICAgICAgICAgICAgICBsaXN0LkFkZCAoZSk7Cisr ICAgICAgICAgICAgICAgIC8qIFBhcnNlRmFjdG9yRXhwcmVzc2lvbiBsZWF2ZXMgdXMgbG9va2lu ZyBhdCB3aGF0IGZvbGxvd3MgdGhlCisrICAgICAgICAgICAgICAgICAqIGV4cHJlc3Npb24gKi8K KysgICAgICAgICAgICAgICAgaWYgKHRva2VuaXplci5Ub2tlbi5UeXBlID09IFRva2VuVHlwZS5S aWdodFBhcmVuKSB7CisrICAgICAgICAgICAgICAgICAgICAvKiBsZWF2ZSB1cyBsb29raW5nIHBh c3QgdGhlIGVuZCBvZiB0aGUgYXJndW1lbnQgbGlzdCAqLworKyAgICAgICAgICAgICAgICAgICAg dG9rZW5pemVyLkdldE5leHRUb2tlbiAoKTsKKysgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor KyAgICAgICAgICAgICAgICB9CisrICAgICAgICAgICAgICAgIGlmICh0b2tlbml6ZXIuVG9rZW4u VHlwZSA9PSBUb2tlblR5cGUuQ29tbWEpIHsKKysgICAgICAgICAgICAgICAgICAgIHRva2VuaXpl ci5HZXROZXh0VG9rZW4gKCk7CisgCQkJCQljb250aW51ZTsKKy0JCQkJCQorLQkJCQl0b2tlbml6 ZXIuUHV0YmFjayAodG9rZW5pemVyLlRva2VuKTsKKy0JCQkJZSA9IChDb25kaXRpb25GYWN0b3JF eHByZXNzaW9uKSBQYXJzZUZhY3RvckV4cHJlc3Npb24gKCk7CistCQkJCWxpc3QuQWRkIChlKTsK KysgICAgICAgICAgICAgICAgfQorKworKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXhwcmVz c2lvblBhcnNlRXhjZXB0aW9uIChTdHJpbmcuRm9ybWF0ICgiVW5leHBlY3RlZCB0b2tlbiB7MH0g aW4gYXJndW1lbnQgbGlzdCB3aGlsZSBwYXJzaW5nIGNvbmRpdGlvbiBcInsxfVwiIiwgdG9rZW5p emVyLlRva2VuLCBjb25kaXRpb25TdHIpKTsKKyAJCQl9CisgCQkJCisgCQkJcmV0dXJuIGxpc3Q7 Ci0tIAoyLjQ1LjIKCg== --b1=_an9yUQc81YewVJ071Mjh6ZcI5zllr0hgLHfHss8ka8A Content-Type: text/x-patch; name=0019-gnu-Add-mono-5.10.0.patch Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=0019-gnu-Add-mono-5.10.0.patch RnJvbSBmMzNiYzg1ZDNlOTkyMDQzMzhhNjlhNTBhZjA0NWU3ZWI5NzdlZGE3IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpNZXNzYWdlLUlEOiA8ZjMzYmM4NWQzZTk5MjA0MzM4YTY5YTUwYWYwNDVl N2ViOTc3ZWRhNy4xNzMyNzA3Mjg4LmdpdC51bm11c2hAaGFzaGJhbmcuc2g+CkluLVJlcGx5LVRv OiA8M2Y4YWY2NWY3Mjg3MWQ2MWZhODVlNjkzOWY0NmNiOGRhYzE4NWM3MC4xNzMyNzA3Mjg4Lmdp dC51bm11c2hAaGFzaGJhbmcuc2g+ClJlZmVyZW5jZXM6IDwzZjhhZjY1ZjcyODcxZDYxZmE4NWU2 OTM5ZjQ2Y2I4ZGFjMTg1YzcwLjE3MzI3MDcyODguZ2l0LnVubXVzaEBoYXNoYmFuZy5zaD4KRnJv bTogdW5tdXNoIDx1bm11c2hAaGFzaGJhbmcuc2g+CkRhdGU6IFdlZCwgMjcgTm92IDIwMjQgMDA6 NTQ6MjgKU3ViamVjdDogW1BBVENIIDE5LzIxXSBnbnU6IEFkZCBtb25vLTUuMTAuMC4KCiogZ251 L3BhY2thZ2VzL2RvdG5ldC5zY20KICAobW9uby01LjEwLjAtZXh0ZXJuYWwtcmVwby1zcGVjcywg bW9uby01LjEwLjApOiBOZXcgdmFyaWFibGVzLgoqIGdudS9wYWNrYWdlcy9wYXRjaGVzL21vbm8t NS4xMC4wLWxhdGVyLW1jcy1jaGFuZ2VzLnBhdGNoOiBOZXcgcGF0Y2guCiogZ251L2xvY2FsLm1r IChkaXN0X3BhdGNoX0RBVEEpOiBSZWdpc3RlciBuZXcgcGF0Y2guCgpDaGFuZ2UtSWQ6IEljNWUx MjNjMmNkMTJmOWI3N2QwMTJjZDdkNzNmOWJlMGI1YTYwOGVjCi0tLQogZ251L2xvY2FsLm1rICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgMSArCiBnbnUvcGFja2FnZXMvZG90 bmV0LnNjbSAgICAgICAgICAgICAgICAgICAgICAgfCAgMTE5ICsKIC4uLi9tb25vLTUuMTAuMC1s YXRlci1tY3MtY2hhbmdlcy5wYXRjaCAgICAgICB8IDQ2MDEgKysrKysrKysrKysrKysrKysKIDMg ZmlsZXMgY2hhbmdlZCwgNDcyMSBpbnNlcnRpb25zKCspCiBjcmVhdGUgbW9kZSAxMDA2NDQgZ251 L3BhY2thZ2VzL3BhdGNoZXMvbW9uby01LjEwLjAtbGF0ZXItbWNzLWNoYW5nZXMucGF0Y2gKCmRp ZmYgLS1naXQgYS9nbnUvbG9jYWwubWsgYi9nbnUvbG9jYWwubWsKaW5kZXggN2UyNjQxNmU3OC4u NmIwZWJkZjJkNyAxMDA2NDQKLS0tIGEvZ251L2xvY2FsLm1rCisrKyBiL2dudS9sb2NhbC5tawpA QCAtMTc3MSw2ICsxNzcxLDcgQEAgZGlzdF9wYXRjaF9EQVRBID0JCQkJCQlcCiAgICVEJS9wYWNr YWdlcy9wYXRjaGVzL21vbm8tNC45LjAtZml4LXJ1bnRpbWVtZXRhZGF0YXZlcnNpb24ucGF0Y2gJ CVwKICAgJUQlL3BhY2thZ2VzL3BhdGNoZXMvbW9uby01LjQuMC1wYXRjaGVzLnBhdGNoCQlcCiAg ICVEJS9wYWNrYWdlcy9wYXRjaGVzL21vbm8tNS44LjAtcGF0Y2hlcy5wYXRjaAkJXAorICAlRCUv cGFja2FnZXMvcGF0Y2hlcy9tb25vLTUuMTAuMC1sYXRlci1tY3MtY2hhbmdlcy5wYXRjaAlcCiAg ICVEJS9wYWNrYWdlcy9wYXRjaGVzL21vbm8tbWNzLXBhdGNoZXMtZnJvbS01LjEwLjAucGF0Y2gJ XAogICAlRCUvcGFja2FnZXMvcGF0Y2hlcy9tb3NhaWNhdGNoZXItdW5idW5kbGUtaHRzbGliLnBh dGNoCVwKICAgJUQlL3BhY2thZ2VzL3BhdGNoZXMvbXJyZXNjdWUtc3VwcG9ydC1sb3ZlLTExLnBh dGNoCQlcCmRpZmYgLS1naXQgYS9nbnUvcGFja2FnZXMvZG90bmV0LnNjbSBiL2dudS9wYWNrYWdl cy9kb3RuZXQuc2NtCmluZGV4IDQzOWU5Nzc5YmIuLjMzMDljZWMzZjUgMTAwNjQ0Ci0tLSBhL2du dS9wYWNrYWdlcy9kb3RuZXQuc2NtCisrKyBiL2dudS9wYWNrYWdlcy9kb3RuZXQuc2NtCkBAIC0x NDcyLDMgKzE0NzIsMTIyIEBAIChkZWZpbmUtcHVibGljIG1vbm8tcHJlLTUuMTAuMAogICAgICAg ICAgICAgICAgICAoc2VhcmNoLXBhdGNoZXMgIm1vbm8tbWNzLXBhdGNoZXMtZnJvbS01LjEwLjAu cGF0Y2giKSkpKQogICAgICAgKG5hdGl2ZS1pbnB1dHMgKG1vZGlmeS1pbnB1dHMgKHBhY2thZ2Ut bmF0aXZlLWlucHV0cyBtb25vLTUuOC4wKQogICAgICAgICAgICAgICAgICAgICAgKHJlcGxhY2Ug Im1vbm8iIG1vbm8tNS44LjApKSkpKSkKKworKGRlZmluZSBtb25vLTUuMTAuMC1leHRlcm5hbC1y ZXBvLXNwZWNzCisgICcoKCJhcGktZG9jLXRvb2xzIiAgICAgICAgICAgICAgICJkMDNlODE5ODM4 YzYyNDFmOTJmOTA2NTVjYjQ0OGNjNDdjOWU4NzkxIgorICAgICAiMXJpa2k3OWYzaWczY3hpZ3Zp c3M4MWR6NjAxaG45MmExZ2lmZ2xtMG16amJzNzZzZjNmaiIKKyAgICAgIzpyZWN1cnNpdmU/ICN0 KQorICAgICgiYXBpLXNuYXBzaG90IiAgICAgICAgICAgICAgICAiZGE4YmI4YzdiOTcwMzgzY2Uy NmM5YjA5Y2UzNjg5ZDg0M2E2MjIyZSIKKyAgICAgIjAwa3h3MDl5aXJkaDBiemt2czB2M2g2Ymtk anY5ZDRnOWFnbjNiODY0MGF3dnB5bTN5cXciKQorICAgICgiYXNwbmV0d2Vic3RhY2siICAgICAg ICAgICAgICAiZTc3YjEyZTZjYzVlZDI2MGE5ODQ0N2Y2MDllODg3MzM3ZTQ0ZTI5OSIKKyAgICAg IjBya3MzNDRxcjRmbXAzZnMxMjY0ZDJxa21tMzQ4bThkMWtqZDd6NGw5NGlpaXJ3bjFmcTEiKQor ICAgICgoInJlZmVyZW5jZS1hc3NlbWJsaWVzIiAiYmluYXJ5LXJlZmVyZW5jZS1hc3NlbWJsaWVz IikKKyAgICAgImUwNDhmZTRhODhkMjM3ZDEwNWFlMDJmZTAzNjNhNjgyOTYwOTkzNjIiCisgICAg ICIwaTg3aTN4Njk0ZjRnOHMyZmxmbHYwYWg4OGJseGRzN2diaXlyd3Jtc2NxZGpzaWZoeTQ5IikK KyAgICAoImJvY2tidWlsZCIgICAgICAgICAgICAgICAgICAgIjE5MDhkNDNlYzYzMDU0NDE4OWJk MTE2MzBhNTllYzRlZjU3MWRiMjgiCisgICAgICIxaDEzbGdpYzJkd25iemM1OG5xaGpoYWduMGYx MDBubDVtaHpyeWpkbXlwZ3JmM2NyMWIzIikKKyAgICAoImJvcmluZ3NzbCIgICAgICAgICAgICAg ICAgICAgIjNlMDc3MGUxODgzNTcxNDcwODg2MGJhOWZlMWFmMDRhOTMyOTcxZmYiCisgICAgICIx MzlhMGdsOTFhNTJrMnI2bmE2aWFsemtxeWthajFyazg4empya2F6M3NkeHg3bm1tZzZ5IikKKyAg ICAoImNlY2lsIiAgICAgICAgICAgICAgICAgICAgICAgImRmZWUxMWU4MGQ1OWUxYTNkNmQ5Yzkx NGMzZjI3N2M3MjZiYWNlNTIiCisgICAgICIxeTJmNTl2OTg4eTJsbHFwcWkwemw5bHkwbGt5bTh6 dzBhNHZrYXY3Y3BwNm01bWtxMjA4IikKKyAgICAoKCJjZWNpbCIgImNlY2lsLWxlZ2FjeSIpICAg ICAgIjMzZDUwYjg3NGZkNTI3MTE4YmMzNjFkODNkZTNkNDk0ZThiYjU1ZTEiCisgICAgICIxcDRo bDE3OTZpYjI2eWt5ZjVzbmw2Y2owbHgwdjdtamgweHFoanc2cWRoNzUzbnNqeWhiIikKKyAgICAo ImNvcmVmeCIgICAgICAgICAgICAgICAgICAgICAgImUzMjdkMjg1NWVkNzRkYWM5NmY2ODQ3OTdl NDgyMDM0NTI5N2E2OTAiCisgICAgICIxMXBpbm5uOHp3ZjRoaTBnZmo5OGN5cWttaDd3cm1kNW1o Y2RtODRna2w5czJnMThpYXEwIikKKyAgICAoImNvcmVydCIgICAgICAgICAgICAgICAgICAgICAg ImFhNjRiMzc2YzFhMjIzOGIxYTc2OGUxNThkMWIxMWRhYzc3ZDcyMmEiCisgICAgICIxZ2c0bTQ5 czByeTV5eDk2ZHdqYXJ5N3IzOTV5cHp6ZzRzc3oxYWpsZDJ4NWc3Z2d2d2dnIikKKyAgICAoImlr ZGFzbSIgICAgICAgICAgICAgICAgICAgICAgIjQ2NWMwODE1NTU4ZmQ0M2MwMTEwZjhkMDBmYzE4 NmFjMDA0NGFjNmEiCisgICAgICIweGlyN3BjZ3EwNGhiN3M4Zzl3c3FkcnlwYjZsMjlyYWozaXo1 cmNxemRtMDA1Nms3NXcyIikKKyAgICAoKCJpa3ZtLWZvcmsiICJpa3ZtIikgICAgICAgICAgIjg0 N2UwNWZjZWQ1YzlhNDFmZjBmMjRmMWY5ZDQwZDVhOGE1NzcyYzEiCisgICAgICIxZmw5Ym0zbG16 ZjhpcXYzeDRpcWt6OWZjNTRtd2R2cnhpc3hnMm52d3djc2k0c2FmZnBpIikKKyAgICAoImxpbmtl ciIgICAgICAgICAgICAgICAgICAgICAgIjg0ZDM3NDI0Y2RlNmU2NmJiZjk5NzExMGE0ZGJkYmE3 ZTYwMDM4ZTkiCisgICAgICIwN2Zma2M5aWp6c2R2YmtyYzFmbjVzYjI1c2d4eWFiczU0a3p5Ymx3 a3pwYXJ3ajA0N3FyIikKKyAgICAoIk5ld3RvbnNvZnQuSnNvbiIgICAgICAgICAgICAgIjQ3MWMz ZTA4MDNhOWY0MGEwYWNjOGFlY2ViMzFkZTZmZjkzYTUyYzQiCisgICAgICIwZGduZ2Q1aHFrNnlo bGc0MGthYm42cWRua25tMzJ6Y3g5cTZibTJ3MzFjc25zazU5NzhzIikKKyAgICAoKCJOdUdldC5C dWlsZFRhc2tzIiAibnVnZXQtYnVpbGR0YXNrcyIpCisgICAgICJiMmMzMGJjODFiMmE3NzMzYTRl ZWIyNTJhNTVmNmI0ZDUwY2ZjM2ExIgorICAgICAiMDF2YWpyZng2eTEyZjUyNXhkaXdmYm45cXpt eW0yczY1cmJpcXB5OWQ5eHcwcG5xN2dibCIpCisgICAgKCgiTlVuaXRMaXRlIiAibnVuaXQtbGl0 ZSIpICAgICI3MGJiNzBiMGZmZDAxMDlhYWRhYTZlNGVhMTc4OTcyZDRmYjYzZWEzIgorICAgICAi MGxuN3JuMTk2MGNkd21mcWNzY3AyZDJuY3B3bmtuaHE5cmY4djUzYXk4ZzJjM2c2Z2g0cSIpCisg ICAgOzsgKCJyb3NseW4tYmluYXJpZXMiICAgICAgICAgICIwMGRhNTNjNDc0NjI1MDk4OGE5MjA1 NWVmM2FjNjUzY2NmODRmYzQwIgorICAgIDs7ICAiIikKKyAgICAoInJ4IiAgICAgICAgICAgICAg ICAgICAgICAgICAgImIyOWE0YjBmZGE2MDllMGFmMzNmZjU0ZWQxMzY1MmI2Y2NmMGUwNWUiCisg ICAgICIxbjFqd2htc2JrY3YyZDgwNmltbWNwemtiNzJyejA0eHk5OG15dzM1NWE4dzVhaDI1eWl2 IikKKyAgICA7OyAoInh1bml0LWJpbmFyaWVzIiAgICAgICAgICAgImM1YTkwN2JlMjVjMjAxY2Rh MzhiZWM5OWY2YzgyNTQ4YWIzZDliNWEiCisgICAgOzsgICIiKQorICAgICkpCisKKyhkZWZpbmUt cHVibGljIG1vbm8tNS4xMC4wCisgIChwYWNrYWdlCisgICAgKGluaGVyaXQgbW9uby1wcmUtNS4x MC4wKQorICAgICh2ZXJzaW9uICI1LjEwLjAuMTc5IikKKyAgICAobmFtZSAibW9ubyIpCisgICAg KHNvdXJjZSAob3JpZ2luCisgICAgICAgICAgICAgIChtZXRob2QgZ2l0LWZldGNoKQorICAgICAg ICAgICAgICAodXJpCisgICAgICAgICAgICAgICAoZ2l0LXJlZmVyZW5jZQorICAgICAgICAgICAg ICAgICh1cmwgImh0dHBzOi8vZ2l0bGFiLndpbmVocS5vcmcvbW9uby9tb25vLmdpdCIpCisgICAg ICAgICAgICAgICAgKGNvbW1pdCAibW9uby01LjEwLjAuMTc5IikpKQorICAgICAgICAgICAgICAo ZmlsZS1uYW1lIChnaXQtZmlsZS1uYW1lIG5hbWUgdmVyc2lvbikpCisgICAgICAgICAgICAgIChz aGEyNTYKKyAgICAgICAgICAgICAgIChiYXNlMzIKKyAgICAgICAgICAgICAgICAiMXp2aWIxNjR3 NG16cnNrMDZ5bTlteTAyMDhjY2RhbmphMmZ4Nng2bWx5aWIzNThoMzYyNiIpKQorICAgICAgICAg ICAgICAobW9kdWxlcyAnKChndWl4IGJ1aWxkIHV0aWxzKQorICAgICAgICAgICAgICAgICAgICAg ICAgIChpY2UtOSBzdHJpbmctZnVuKSkpCisgICAgICAgICAgICAgIChzbmlwcGV0ICN+KGJlZ2lu CisgICAgICAgICAgICAgICAgICAgICAgICAgICAjJChhZGQtZXh0ZXJuYWwtcmVwb3MKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIG1vbm8tNS4xMC4wLWV4dGVybmFsLXJlcG8tc3BlY3Mp CisgICAgICAgICAgICAgICAgICAgICAgICAgICAjJEBwcmVwYXJlLW1vbm8tc291cmNlLTApKQor ICAgICAgICAgICAgICAocGF0Y2hlcworICAgICAgICAgICAgICAgKHNlYXJjaC1wYXRjaGVzICJt b25vLTUuMTAuMC1sYXRlci1tY3MtY2hhbmdlcy5wYXRjaCIpKSkpCisgICAgKG5hdGl2ZS1pbnB1 dHMgKG1vZGlmeS1pbnB1dHMgKHBhY2thZ2UtbmF0aXZlLWlucHV0cyBtb25vLXByZS01LjEwLjAp CisgICAgICAgICAgICAgICAgICAgICAocmVwbGFjZSAibW9ubyIgbW9uby1wcmUtNS4xMC4wKQor ICAgICAgICAgICAgICAgICAgICAgKGFwcGVuZCAoZGVmYXVsdC1weXRob24pKSkpCisgICAgKGFy Z3VtZW50cworICAgICAoc3Vic3RpdHV0ZS1rZXl3b3JkLWFyZ3VtZW50cyAocGFja2FnZS1hcmd1 bWVudHMgbW9uby1wcmUtNS4xMC4wKQorICAgICAgICgoIzpwaGFzZXMgcGhhc2VzICN+JXN0YW5k YXJkLXBoYXNlcykKKyAgICAgICAgI34obW9kaWZ5LXBoYXNlcyAjJHBoYXNlcworICAgICAgICAg ICAgOzsgQnVpbGQgbm93IHJlbGllcyBvbiB0aGVzZSBiZWluZyBidWlsdCBiZWZvcmUgYW55IG1j cyBpcyBidWlsdDsKKyAgICAgICAgICAgIDs7IGhhdmUgdG8gdXNlIHRoZSBpbnB1dCBtY3MuCisg ICAgICAgICAgICAoZGVsZXRlICdidWlsZC1yZWZlcmVuY2UtYXNzZW1ibGllcykKKyAgICAgICAg ICAgIChhZGQtYmVmb3JlICdidWlsZCAnYnVpbGQtcmVmZXJlbmNlLWFzc2VtYmxpZXMKKyAgICAg ICAgICAgICAgKGxhbWJkYSogKCM6a2V5IG1ha2UtZmxhZ3MgIzphbGxvdy1vdGhlci1rZXlzKQor ICAgICAgICAgICAgICAgIChsZXQgKCh0b3AgKGdldGN3ZCkpKQorICAgICAgICAgICAgICAgICAg KHdpdGgtZGlyZWN0b3J5LWV4Y3Vyc2lvbgorICAgICAgICAgICAgICAgICAgICAgICJleHRlcm5h bC9iaW5hcnktcmVmZXJlbmNlLWFzc2VtYmxpZXMiCisgICAgICAgICAgICAgICAgICAgIChzdWJz dGl0dXRlKiAoZmluZC1maWxlcyAiLiIgIl5NYWtlZmlsZSQiKQorICAgICAgICAgICAgICAgICAg ICAgICgoIkNTQ19DT01NT05fQVJHUyA6PSAiIGFsbCkKKyAgICAgICAgICAgICAgICAgICAgICAg KHN0cmluZy1hcHBlbmQgYWxsICItZGVsYXlzaWduKyAiKSkKKyAgICAgICAgICAgICAgICAgICAg ICAoKCJJQk1cXC5EYXRhXFwuREIyX1JFRlMgOj0gIiBhbGwpCisgICAgICAgICAgICAgICAgICAg ICAgIChzdHJpbmctYXBwZW5kIGFsbCAiU3lzdGVtLlhtbCAiKSkKKyAgICAgICAgICAgICAgICAg ICAgICAoKCJNb25vXFwuRGF0YVxcLlNxbGl0ZV9SRUZTIDo9ICIgYWxsKQorICAgICAgICAgICAg ICAgICAgICAgICAoc3RyaW5nLWFwcGVuZCBhbGwgIlN5c3RlbS5YbWwgIikpCisgICAgICAgICAg ICAgICAgICAgICAgKCgiU3lzdGVtXFwuRGF0YVxcLkRhdGFTZXRFeHRlbnNpb25zX1JFRlMgOj0g IiBhbGwpCisgICAgICAgICAgICAgICAgICAgICAgIChzdHJpbmctYXBwZW5kIGFsbCAiU3lzdGVt LlhtbCAiKSkKKyAgICAgICAgICAgICAgICAgICAgICAoKCJTeXN0ZW1cXC5EYXRhXFwuT3JhY2xl Q2xpZW50X1JFRlMgOj0gIiBhbGwpCisgICAgICAgICAgICAgICAgICAgICAgIChzdHJpbmctYXBw ZW5kIGFsbCAiU3lzdGVtLlhtbCAiKSkKKyAgICAgICAgICAgICAgICAgICAgICAoKCJTeXN0ZW1c XC5JZGVudGl0eU1vZGVsX1JFRlMgOj0gIiBhbGwpCisgICAgICAgICAgICAgICAgICAgICAgIChz dHJpbmctYXBwZW5kIGFsbCAiU3lzdGVtLkNvbmZpZ3VyYXRpb24gIikpCisgICAgICAgICAgICAg ICAgICAgICAgKCgiU3lzdGVtXFwuRGVzaWduX1JFRlMgOj0gIiBhbGwpCisgICAgICAgICAgICAg ICAgICAgICAgIChzdHJpbmctYXBwZW5kIGFsbCAiQWNjZXNzaWJpbGl0eSAiKSkKKyAgICAgICAg ICAgICAgICAgICAgICAoKCJTeXN0ZW1cXC5XZWJcXC5FeHRlbnNpb25zXFwuRGVzaWduX1JFRlMg Oj0gIiBhbGwpCisgICAgICAgICAgICAgICAgICAgICAgIChzdHJpbmctYXBwZW5kIGFsbCAiU3lz dGVtLldpbmRvd3MuRm9ybXMgU3lzdGVtLldlYiAiKSkKKyAgICAgICAgICAgICAgICAgICAgICAo KCJTeXN0ZW1cXC5TZXJ2aWNlTW9kZWxcXC5Sb3V0aW5nX1JFRlMgOj0gIiBhbGwpCisgICAgICAg ICAgICAgICAgICAgICAgIChzdHJpbmctYXBwZW5kIGFsbCAiU3lzdGVtLlhtbCAiKSkKKyAgICAg ICAgICAgICAgICAgICAgICAoKCJTeXN0ZW1cXC5XZWJcXC5BYnN0cmFjdGlvbnNfUkVGUyA6PSAi IGFsbCkKKyAgICAgICAgICAgICAgICAgICAgICAgKHN0cmluZy1hcHBlbmQgYWxsICJTeXN0ZW0g IikpCisgICAgICAgICAgICAgICAgICAgICAgKCgiU3lzdGVtXFwuUmVhY3RpdmVcXC5XaW5kb3dz XFwuRm9ybXNfUkVGUyA6PSAiIGFsbCkKKyAgICAgICAgICAgICAgICAgICAgICAgKHN0cmluZy1h cHBlbmQgYWxsICJTeXN0ZW0gIikpCisgICAgICAgICAgICAgICAgICAgICAgKCgiU3lzdGVtXFwu V2luZG93c1xcLkZvcm1zXFwuRGF0YVZpc3VhbGl6YXRpb25fUkVGUyA6PSAiIGFsbCkKKyAgICAg ICAgICAgICAgICAgICAgICAgKHN0cmluZy1hcHBlbmQgYWxsICJBY2Nlc3NpYmlsaXR5ICIpKQor ICAgICAgICAgICAgICAgICAgICAgICgoIkZhY2FkZXMvU3lzdGVtXFwuU2VydmljZU1vZGVsXFwu UHJpbWl0aXZlc19SRUZTIDo9ICIgYWxsKQorICAgICAgICAgICAgICAgICAgICAgICAoc3RyaW5n LWFwcGVuZCBhbGwgIlN5c3RlbS5YbWwgIikpCisgICAgICAgICAgICAgICAgICAgICAgKCgiRmFj YWRlcy9TeXN0ZW1cXC5EeW5hbWljXFwuUnVudGltZV9SRUZTIDo9ICIgYWxsKQorICAgICAgICAg ICAgICAgICAgICAgICAoc3RyaW5nLWFwcGVuZCBhbGwgIlN5c3RlbSAiKSkKKyAgICAgICAgICAg ICAgICAgICAgICAoKCJGYWNhZGVzL1N5c3RlbVxcLlhtbFxcLlhEb2N1bWVudF9SRUZTIDo9ICIg YWxsKQorICAgICAgICAgICAgICAgICAgICAgICAoc3RyaW5nLWFwcGVuZCBhbGwgIlN5c3RlbS5Y bWwgIikpCisgICAgICAgICAgICAgICAgICAgICAgKCgiRmFjYWRlcy9TeXN0ZW1cXC5SdW50aW1l XFwuU2VyaWFsaXphdGlvbi5YbWxfUkVGUyA6PSAiIGFsbCkKKyAgICAgICAgICAgICAgICAgICAg ICAgKHN0cmluZy1hcHBlbmQgYWxsICJTeXN0ZW0uWG1sICIpKQorICAgICAgICAgICAgICAgICAg ICAgICgoIkZhY2FkZXMvU3lzdGVtXFwuRGF0YVxcLkNvbW1vbl9SRUZTIDo9ICIgYWxsKQorICAg ICAgICAgICAgICAgICAgICAgICAoc3RyaW5nLWFwcGVuZCBhbGwgIlN5c3RlbSBTeXN0ZW0uWG1s ICIpKSkKKyAgICAgICAgICAgICAgICAgICAgKGFwcGx5IGludm9rZSAibWFrZSIgIkNTQz1tY3Mi IG1ha2UtZmxhZ3MpKSkpKSkpKSkpKQpkaWZmIC0tZ2l0IGEvZ251L3BhY2thZ2VzL3BhdGNoZXMv bW9uby01LjEwLjAtbGF0ZXItbWNzLWNoYW5nZXMucGF0Y2ggYi9nbnUvcGFja2FnZXMvcGF0Y2hl cy9tb25vLTUuMTAuMC1sYXRlci1tY3MtY2hhbmdlcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0 NAppbmRleCAwMDAwMDAwMDAwLi5jNGUyMTFhOGEzCi0tLSAvZGV2L251bGwKKysrIGIvZ251L3Bh Y2thZ2VzL3BhdGNoZXMvbW9uby01LjEwLjAtbGF0ZXItbWNzLWNoYW5nZXMucGF0Y2gKQEAgLTAs MCArMSw0NjAxIEBACitUaGUgcmVzdWx0IG9mIGNoZXJyeS1waWNraW5nIGV2ZXJ5IGNvbW1pdCAo ZXhjZXB0IG9uZXMgdGhhdCBzZWVtZWQgdG8gbm90CithZmZlY3QgdGhlIGNvbXBpbGVyIGl0c2Vs ZikgZnJvbSBtb25vLTUuMTAuMC4xNzkgdG8gbW9uby02LjEyLjAuMjA2IHRoYXQKK3RvdWNoZWQg Li9tY3MvbWNzLgorCitNb25vIHNlZW1zIHRvIGNvbnNpc3RlbnRseSwgYWxtb3N0IGFzIGEgcnVs ZSwgZGVwZW5kIG9uIEMjIGZlYXR1cmVzIGJlZm9yZQordGhleSBpbXBsZW1lbnQgdGhlbS4gIFRo aXMgaXMgZXh0cmVtZWx5IGF3a3dhcmQgZm9yIGJ1aWxkaW5nIHVzaW5nIHByZXZpb3VzCit2ZXJz aW9ucywgc28gaG9wZWZ1bGx5IHRoaXMgd2lsbCBhbGxvdyB1cyB0byBqdW1wIHN0cmFpZ2h0IHRv IGEgaGlnaCB2ZXJzaW9uLgorCitJbmNsdWRlcyB0aGUgZm9sbG93aW5nIGNvbW1pdHMsIGluIG9y ZGVyIG9mIG1vc3QtcmVjZW50IHRvIGxlYXN0LXJlY2VudDoKKworYjM5MTE1ODliMzcKKzY3MDBk ZDIyMGZlCisyYTdkZmIyOGUwNworZWVhNmYxMWEzZTYKKzNmYzA0N2M2ZjNhCithYzY2NjZmNWIw YgorOTI3YjI3YmI5ZDgKKzRhYjI0ZDRjMDU5CithYTgzNmI0NmEyMworZWU3ZGNjZmIzMjAKKzIz NTEwZjI2OTE1CitkOWYyNjU0N2Q4OAorOWRjMWM4ODVhMGYKK2VmNTU4ZWFkODlhCisyY2I3OTA5 YjEzYworMDM5MGVhMmU3OGMKK2I0ZjY2NTliZGMwCitlOTJkNjA3MGVhZgorNGM1YjNmYmQ0ZjQK K2U2NTA3ZjJkYThhCis2NTZhNGIxMTIwYworOWJkMmZhNGNmMzMKK2JlMmQxYWVmZmUwCis0NTRh NzZjZmE0YQorNjBjMWVlNDU0ZDQKKzUzZjFlZjUwNmVhCitkMzQ4N2JmZWJiMworOTJmNmU1YjFh ODEKKworZGlmZiAtLWdpdCBhLy5naXRpZ25vcmUgYi8uZ2l0aWdub3JlCitpbmRleCBjNmVmMTlh ODQ5Yi4uYzM3ZDRmY2UzZjAgMTAwNjQ0CistLS0gYS8uZ2l0aWdub3JlCisrKysgYi8uZ2l0aWdu b3JlCitAQCAtNDAsNiArNDAsNyBAQCBBbmtoLk5vTG9hZAorICouZ3BTdGF0ZQorIC52c2NvZGUv CisgKi5leHAKKysudnMvCisgCisgIyBUb29saW5nCisgX1JlU2hhcnBlciovCitkaWZmIC0tZ2l0 IGEvbWNzL2NsYXNzL0NvbW1vbnMuWG1sLlJlbGF4bmcvTWFrZWZpbGUgYi9tY3MvY2xhc3MvQ29t bW9ucy5YbWwuUmVsYXhuZy9NYWtlZmlsZQoraW5kZXggMWZlYmFlNGViMWUuLmY5YjU3ZmVhMjY1 IDEwMDY0NAorLS0tIGEvbWNzL2NsYXNzL0NvbW1vbnMuWG1sLlJlbGF4bmcvTWFrZWZpbGUKKysr KyBiL21jcy9jbGFzcy9Db21tb25zLlhtbC5SZWxheG5nL01ha2VmaWxlCitAQCAtMjIsNyArMjIs NyBAQCBFWFRSQV9ESVNURklMRVMgPSBcCisgCSQoUkVTT1VSQ0VfRklMRVMpCisgCisgQ29tbW9u cy5YbWwuUmVsYXhuZy5SbmMvUm5jUGFyc2VyLmNzOiBDb21tb25zLlhtbC5SZWxheG5nLlJuYy9S bmNQYXJzZXIuamF5ICQodG9wZGlyKS9qYXkvc2tlbGV0b24uY3MKKy0JJCh0b3BkaXIpL2pheS9q YXkgLWN0diA8ICQodG9wZGlyKS9qYXkvc2tlbGV0b24uY3MgJChDVVJESVIpL0NvbW1vbnMuWG1s LlJlbGF4bmcuUm5jL1JuY1BhcnNlci5qYXkgPiBDb21tb25zLlhtbC5SZWxheG5nLlJuYy9SbmNQ YXJzZXIuY3MKKysJJCh0b3BkaXIpL2pheS9qYXkgLWN0diAtbyBDb21tb25zLlhtbC5SZWxheG5n LlJuYy9SbmNQYXJzZXIuY3MgJDwgPCAkKHRvcGRpcikvamF5L3NrZWxldG9uLmNzCisgCisgQlVJ TFRfU09VUkNFUyA9IENvbW1vbnMuWG1sLlJlbGF4bmcuUm5jL1JuY1BhcnNlci5jcworIAorZGlm ZiAtLWdpdCBhL21jcy9jbGFzcy9NaWNyb3NvZnQuQnVpbGQvTWFrZWZpbGUgYi9tY3MvY2xhc3Mv TWljcm9zb2Z0LkJ1aWxkL01ha2VmaWxlCitpbmRleCAyZGNiZWZkZjdmOS4uMWE3MTEwNjliMGIg MTAwNjQ0CistLS0gYS9tY3MvY2xhc3MvTWljcm9zb2Z0LkJ1aWxkL01ha2VmaWxlCisrKysgYi9t Y3MvY2xhc3MvTWljcm9zb2Z0LkJ1aWxkL01ha2VmaWxlCitAQCAtMjYsNyArMjYsNyBAQCBFWFRS QV9ESVNURklMRVMgPSBcCisgRVhQUl9QQVJTRVIgPSBNaWNyb3NvZnQuQnVpbGQuSW50ZXJuYWwv RXhwcmVzc2lvblBhcnNlcgorIAorICQoRVhQUl9QQVJTRVIpLmNzOiAkKEVYUFJfUEFSU0VSKS5q YXkgJCh0b3BkaXIpL2pheS9za2VsZXRvbi5jcworLQkoY2QgTWljcm9zb2Z0LkJ1aWxkLkludGVy bmFsOyAkKHRvcGRpcikvLi4vamF5L2pheSAtY3R2IDwgJCh0b3BkaXIpLy4uL2pheS9za2VsZXRv bi5jcyBFeHByZXNzaW9uUGFyc2VyLmpheSA+IEV4cHJlc3Npb25QYXJzZXIuY3MpCisrCShjZCBN aWNyb3NvZnQuQnVpbGQuSW50ZXJuYWw7ICQodG9wZGlyKS8uLi9qYXkvamF5IC1jdHYgLW8gRXhw cmVzc2lvblBhcnNlci5jcyBFeHByZXNzaW9uUGFyc2VyLmpheSA8ICQodG9wZGlyKS8uLi9qYXkv c2tlbGV0b24uY3MgKQorIAorIEJVSUxUX1NPVVJDRVMgPSAkKEVYUFJfUEFSU0VSKS5jcworIAor ZGlmZiAtLWdpdCBhL21jcy9jbGFzcy9Nb25vLkNTaGFycC9NYWtlZmlsZSBiL21jcy9jbGFzcy9N b25vLkNTaGFycC9NYWtlZmlsZQoraW5kZXggN2IxOTg2Yjc4ZTUuLjM2MTU1MzI4NTNkIDEwMDY0 NAorLS0tIGEvbWNzL2NsYXNzL01vbm8uQ1NoYXJwL01ha2VmaWxlCisrKysgYi9tY3MvY2xhc3Mv TW9uby5DU2hhcnAvTWFrZWZpbGUKK0BAIC0yNCw3ICsyNCw3IEBAIExJQl9NQ1NfRkxBR1MgKz0g JChSRUZFUkVOQ0VfU09VUkNFU19GTEFHUykKKyBCVUlMVF9TT1VSQ0VTID0gJChQUk9GSUxFKS1w YXJzZXIuY3MKKyAKKyAkKFBST0ZJTEUpLXBhcnNlci5jczogJCh0b3BkaXIpL21jcy9jcy1wYXJz ZXIuamF5ICQodG9wZGlyKS9qYXkvc2tlbGV0b24uY3MKKy0JJCh0b3BkaXIpL2pheS9qYXkgLWMg PCAkKHRvcGRpcikvamF5L3NrZWxldG9uLmNzICQ8ID4gJChQUk9GSUxFKS1qYXktdG1wLm91dCAm JiBtdiAkKFBST0ZJTEUpLWpheS10bXAub3V0ICRACisrCSQodG9wZGlyKS9qYXkvamF5IC1jIC1v ICQoUFJPRklMRSktamF5LXRtcC5vdXQgJDwgPCAkKHRvcGRpcikvamF5L3NrZWxldG9uLmNzICYm IG12ICQoUFJPRklMRSktamF5LXRtcC5vdXQgJEAKKyAKKyBpbmNsdWRlIC4uLy4uL2J1aWxkL2xp YnJhcnkubWFrZQorIAorZGlmZiAtLWdpdCBhL21jcy9jbGFzcy9Nb25vLlhtbC5FeHQvTWFrZWZp bGUgYi9tY3MvY2xhc3MvTW9uby5YbWwuRXh0L01ha2VmaWxlCitpbmRleCBkYzQ5ZjgxNmZlZS4u MTY0OTgyMTVhMzggMTAwNjQ0CistLS0gYS9tY3MvY2xhc3MvTW9uby5YbWwuRXh0L01ha2VmaWxl CisrKysgYi9tY3MvY2xhc3MvTW9uby5YbWwuRXh0L01ha2VmaWxlCitAQCAtMjksMTMgKzI5LDEz IEBAIE1vbm8uWG1sLlhQYXRoMi9YUXVlcnlQYXJzZXIuamF5OiBNb25vLlhtbC5YUGF0aDIvUGFy c2VyQmFzZS5qYXkgJChTS0VMRVRPTikKKyBNb25vLlhtbC5YUGF0aDIvWFBhdGgyUGFyc2VyLmNz OiBNb25vLlhtbC5YUGF0aDIvWFBhdGgyUGFyc2VyLmpheQorIAllY2hvICIjZGVmaW5lIFhQQVRI Ml9QQVJTRVIiID4gJEAKKyAJZWNobyAiI2lmIE5FVF8yXzAiID4+ICRACistCSQodG9wZGlyKS9q YXkvamF5IC1jdCA8ICQoU0tFTEVUT04pICQoQ1VSRElSKS8kPCA+PiRACisrCSQodG9wZGlyKS9q YXkvamF5IC1jdCAkKENVUkRJUikvJDwgPCAkKFNLRUxFVE9OKSA+PiRACisgCWVjaG8gIiNlbmRp ZiIgPj4gJEAKKyAKKyBNb25vLlhtbC5YUGF0aDIvWFF1ZXJ5UGFyc2VyLmNzOiBNb25vLlhtbC5Y UGF0aDIvWFF1ZXJ5UGFyc2VyLmpheSAkKFNLRUxFVE9OKQorIAllY2hvICIjZGVmaW5lIFhRVUVS WV9QQVJTRVIiID4gJEAKKyAJZWNobyAiI2lmIE5FVF8yXzAiID4+ICRACistCSQodG9wZGlyKS9q YXkvamF5IC1jdCA8ICQoU0tFTEVUT04pICQoQ1VSRElSKS8kPCA+PiRACisrCSQodG9wZGlyKS9q YXkvamF5IC1jdCAkKENVUkRJUikvJDwgPCAkKFNLRUxFVE9OKSA+PiRACisgCWVjaG8gIiNlbmRp ZiIgPj4gJEAKKyAKKyBNb25vLlhtbC5YUGF0aDIvWFBhdGgyVG9rZW5pemVyLmNzOiBNb25vLlht bC5YUGF0aDIvVG9rZW5pemVyQmFzZS5jcworZGlmZiAtLWdpdCBhL21jcy9jbGFzcy9jb3JsaWIv U3lzdGVtL1J1bnRpbWVBcmd1bWVudEhhbmRsZS5jcyBiL21jcy9jbGFzcy9jb3JsaWIvU3lzdGVt L1J1bnRpbWVBcmd1bWVudEhhbmRsZS5jcworaW5kZXggMjE2YzRlYTM5MjQuLmMxMGQzZjE3NGQx IDEwMDY0NAorLS0tIGEvbWNzL2NsYXNzL2NvcmxpYi9TeXN0ZW0vUnVudGltZUFyZ3VtZW50SGFu ZGxlLmNzCisrKysgYi9tY3MvY2xhc3MvY29ybGliL1N5c3RlbS9SdW50aW1lQXJndW1lbnRIYW5k bGUuY3MKK0BAIC0zMSwxMyArMzEsOSBAQAorIC8vIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBV U0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorIC8vCisgCistdXNpbmcgU3lz dGVtOworLXVzaW5nIFN5c3RlbS5SdW50aW1lLkludGVyb3BTZXJ2aWNlczsKKy0KKyBuYW1lc3Bh Y2UgU3lzdGVtCisgeworLQlbQ29tVmlzaWJsZSAodHJ1ZSldCistCXB1YmxpYyBzdHJ1Y3QgUnVu dGltZUFyZ3VtZW50SGFuZGxlCisrCXB1YmxpYyByZWYgc3RydWN0IFJ1bnRpbWVBcmd1bWVudEhh bmRsZQorIAl7CisgI3ByYWdtYSB3YXJuaW5nIGRpc2FibGUgNjQ5CisgCQlpbnRlcm5hbCBJbnRQ dHIgYXJnczsKK2RpZmYgLS1naXQgYS9tY3MvY2xhc3MvcmVmZXJlbmNlc291cmNlL21zY29ybGli L3N5c3RlbS90eXBlZHJlZmVyZW5jZS5jcyBiL21jcy9jbGFzcy9yZWZlcmVuY2Vzb3VyY2UvbXNj b3JsaWIvc3lzdGVtL3R5cGVkcmVmZXJlbmNlLmNzCitpbmRleCA4MGJlZjVhYjg1Mi4uYTMwNTQx ZjQzOTkgMTAwNjQ0CistLS0gYS9tY3MvY2xhc3MvcmVmZXJlbmNlc291cmNlL21zY29ybGliL3N5 c3RlbS90eXBlZHJlZmVyZW5jZS5jcworKysrIGIvbWNzL2NsYXNzL3JlZmVyZW5jZXNvdXJjZS9t c2NvcmxpYi9zeXN0ZW0vdHlwZWRyZWZlcmVuY2UuY3MKK0BAIC0xOSw3ICsxOSwxMSBAQCBuYW1l c3BhY2UgU3lzdGVtIHsKKyAgICAgW0NMU0NvbXBsaWFudChmYWxzZSldIAorICAgICBbU3lzdGVt LlJ1bnRpbWUuSW50ZXJvcFNlcnZpY2VzLkNvbVZpc2libGUodHJ1ZSldCisgICAgIFtTeXN0ZW0u UnVudGltZS5WZXJzaW9uaW5nLk5vblZlcnNpb25hYmxlXSAvLyBUaGlzIG9ubHkgYXBwbGllcyB0 byBmaWVsZCBsYXlvdXQKKy0gICAgcHVibGljIHN0cnVjdCBUeXBlZFJlZmVyZW5jZQorKyAgICBw dWJsaWMKKysjaWYgTU9OTworKyAgICByZWYKKysjZW5kaWYKKysgICAgc3RydWN0IFR5cGVkUmVm ZXJlbmNlCisgICAgIHsKKyAjaWYgTU9OTworICNwcmFnbWEgd2FybmluZyBkaXNhYmxlIDE2OQor ZGlmZiAtLWdpdCBhL21jcy9lcnJvcnMvY3MwMTUxLTQuY3MgYi9tY3MvZXJyb3JzL2NzMDE1MS00 LmNzCitpbmRleCAwZTQ1YjFhOTA0OS4uYzllMDU1ODllNGQgMTAwNjQ0CistLS0gYS9tY3MvZXJy b3JzL2NzMDE1MS00LmNzCisrKysgYi9tY3MvZXJyb3JzL2NzMDE1MS00LmNzCitAQCAtMSw1ICsx LDYgQEAKKyAvLyBDUzAxNTE6IEEgc3dpdGNoIGV4cHJlc3Npb24gb2YgdHlwZSBgUzE/JyBjYW5u b3QgYmUgY29udmVydGVkIHRvIGFuIGludGVncmFsIHR5cGUsIGJvb2wsIGNoYXIsIHN0cmluZywg ZW51bSBvciBudWxsYWJsZSB0eXBlCistLy8gTGluZTogMjQKKysvLyBMaW5lOiAyNQorKy8vIENv bXBpbGVyIG9wdGlvbnM6IC1sYW5ndmVyc2lvbjo1CisgCisgdXNpbmcgU3lzdGVtOworIAorZGlm ZiAtLWdpdCBhL21jcy9lcnJvcnMvY3MwMjczLTIuY3MgYi9tY3MvZXJyb3JzL2NzMDI3My0yLmNz CituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMDAwMDAuLmIwYmRiZWY5ZTc1Cist LS0gL2Rldi9udWxsCisrKysgYi9tY3MvZXJyb3JzL2NzMDI3My0yLmNzCitAQCAtMCwwICsxLDkg QEAKKysvLyBDUzAyNzM6IFRoZSBhY2Nlc3NpYmlsaXR5IG1vZGlmaWVyIG9mIHRoZSBgQy5TMi5z ZXQnIGFjY2Vzc29yIG11c3QgYmUgbW9yZSByZXN0cmljdGl2ZSB0aGFuIHRoZSBtb2RpZmllciBv ZiB0aGUgcHJvcGVydHkgb3IgaW5kZXhlciBgQy5TMicKKysvLyBMaW5lOiA3CisrLy8gQ29tcGls ZXIgb3B0aW9uczogLWxhbmd2ZXJzaW9uOjcuMgorKworKyBjbGFzcyBDCisrIHsKKysJcHJpdmF0 ZSBzdHJpbmcgUzIgeyBnZXQ7IHByaXZhdGUgcHJvdGVjdGVkIHNldDsgfQorKyB9CisrCitkaWZm IC0tZ2l0IGEvbWNzL2Vycm9ycy9jczAyODAuY3MgYi9tY3MvZXJyb3JzL2NzMDI4MC5jcworbmV3 IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAwMDAwLi42MmJlOGUzOTU4NQorLS0tIC9k ZXYvbnVsbAorKysrIGIvbWNzL2Vycm9ycy9jczAyODAuY3MKK0BAIC0wLDAgKzEsMjIgQEAKKysv LyBDUzAyODA6IGBDLkZpeGFibGUuR2V0UGlubmFibGVSZWZlcmVuY2UoaW50KScgaGFzIHRoZSB3 cm9uZyBzaWduYXR1cmUgdG8gYmUgdXNlZCBpbiBleHRlbnNpYmxlIGZpeGVkIHN0YXRlbWVudAor Ky8vIExpbmU6IDExCisrLy8gQ29tcGlsZXIgb3B0aW9uczogLXVuc2FmZSAtbGFuZ3ZlcnNpb246 bGF0ZXN0IC13YXJuYXNlcnJvcgorKworK3VzaW5nIFN5c3RlbTsKKysKKyt1bnNhZmUgY2xhc3Mg QworK3sKKysJcHVibGljIHN0YXRpYyB2b2lkIE1haW4gKCkKKysJeworKwkJZml4ZWQgKGludCog cCA9IG5ldyBGaXhhYmxlICgpKSB7CisrCQl9CisrCX0KKysKKysJc3RydWN0IEZpeGFibGUKKysJ eworKwkJcHVibGljIHJlZiBpbnQgR2V0UGlubmFibGVSZWZlcmVuY2UgKGludCBpID0gMSkKKysJ CXsKKysJCQl0aHJvdyBuZXcgTm90SW1wbGVtZW50ZWRFeGNlcHRpb24gKCk7CisrCQl9CisrCX0K Kyt9CitcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKK2RpZmYgLS1naXQgYS9tY3MvZXJyb3Jz L2NzMDgyNi05LmNzIGIvbWNzL2Vycm9ycy9jczA4MjYtOS5jcworZGVsZXRlZCBmaWxlIG1vZGUg MTAwNjQ0CitpbmRleCA0ZTA5ODk2OWI4Yy4uMDAwMDAwMDAwMDAKKy0tLSBhL21jcy9lcnJvcnMv Y3MwODI2LTkuY3MKKysrKyAvZGV2L251bGwKK0BAIC0xLDE2ICswLDAgQEAKKy0vLyBDUzA4MjY6 IFRoZSB0eXBlIG9mIGFuIGltcGxpY2l0bHkgdHlwZWQgYXJyYXkgY2Fubm90IGJlIGluZmVycmVk IGZyb20gdGhlIGluaXRpYWxpemVyLiBUcnkgc3BlY2lmeWluZyBhcnJheSB0eXBlIGV4cGxpY2l0 bHkKKy0vLyBMaW5lOiA4CistCistY2xhc3MgQworLXsKKy0Jc3RhdGljIHZvaWQgTWFpbigpCist CXsKKy0JCW9iamVjdCBvID0gMTsKKy0JCWR5bmFtaWMgZCA9IDE7CistCQkKKy0JCXZhciBhID0g bmV3W10geworLQkJCW5ldyB7IFggPSBvIH0sCistCQkJbmV3IHsgWCA9IGQgfQorLQkJfTsKKy0J fQorLX0KK2RpZmYgLS1naXQgYS9tY3MvZXJyb3JzL2NzMTAxMy0xLmNzIGIvbWNzL2Vycm9ycy9j czEwMTMtMS5jcworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAwMDAwLi4wMTgy N2RmNDk5NQorLS0tIC9kZXYvbnVsbAorKysrIGIvbWNzL2Vycm9ycy9jczEwMTMtMS5jcworQEAg LTAsMCArMSw4IEBACisrLy8gQ1MxMDEzOiBJbnZhbGlkIG51bWJlcgorKy8vIExpbmUgOiA2Cisr CisrY2xhc3MgWAorK3sKKysgICAgc3RhdGljIGludCBpID0gMGI7CisrICAgIHN0YXRpYyB2b2lk IE1haW4gKCkge30KKyt9CitcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKK2RpZmYgLS1naXQg YS9tY3MvZXJyb3JzL2NzMTAxMy0yLmNzIGIvbWNzL2Vycm9ycy9jczEwMTMtMi5jcworbmV3IGZp bGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAwMDAwLi5jODY4Y2IyYTc2OQorLS0tIC9kZXYv bnVsbAorKysrIGIvbWNzL2Vycm9ycy9jczEwMTMtMi5jcworQEAgLTAsMCArMSw3IEBACisrLy8g Q1MxMDEzOiBJbnZhbGlkIG51bWJlcgorKy8vIExpbmUgOiA2CisrCisrY2xhc3MgWAorK3sKKysg ICAgc3RhdGljIGludCBpID0gMHgwXzsKKyt9CitcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUK K2RpZmYgLS1naXQgYS9tY3MvZXJyb3JzL2NzMTAxMy0zLmNzIGIvbWNzL2Vycm9ycy9jczEwMTMt My5jcworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAwMDAwLi4zMTQ1YjFiYTU5 NgorLS0tIC9kZXYvbnVsbAorKysrIGIvbWNzL2Vycm9ycy9jczEwMTMtMy5jcworQEAgLTAsMCAr MSw3IEBACisrLy8gQ1MxMDEzOiBJbnZhbGlkIG51bWJlcgorKy8vIExpbmUgOiA2CisrCisrY2xh c3MgWAorK3sKKysgICAgc3RhdGljIGludCBpID0gMV87CisrfQorXCBObyBuZXdsaW5lIGF0IGVu ZCBvZiBmaWxlCitkaWZmIC0tZ2l0IGEvbWNzL2Vycm9ycy9jczEwMTMtNC5jcyBiL21jcy9lcnJv cnMvY3MxMDEzLTQuY3MKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwMDAwMC4u M2E1ZTc0NGZmNGYKKy0tLSAvZGV2L251bGwKKysrKyBiL21jcy9lcnJvcnMvY3MxMDEzLTQuY3MK K0BAIC0wLDAgKzEsNyBAQAorKy8vIENTMTAxMzogSW52YWxpZCBudW1iZXIKKysvLyBMaW5lIDog NgorKworK2NsYXNzIFgKKyt7CisrICAgIHN0YXRpYyBkb3VibGUgaSA9IDFfLjI7CisrfQorXCBO byBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCitkaWZmIC0tZ2l0IGEvbWNzL2Vycm9ycy9jczEwMTMt NS5jcyBiL21jcy9lcnJvcnMvY3MxMDEzLTUuY3MKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRl eCAwMDAwMDAwMDAwMC4uODA4Mjc0M2MwYjUKKy0tLSAvZGV2L251bGwKKysrKyBiL21jcy9lcnJv cnMvY3MxMDEzLTUuY3MKK0BAIC0wLDAgKzEsNyBAQAorKy8vIENTMTAxMzogSW52YWxpZCBudW1i ZXIKKysvLyBMaW5lIDogNgorKworK2NsYXNzIFgKKyt7CisrICAgIHN0YXRpYyBpbnQgaSA9IDFf ZTE7CisrfQorXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCitkaWZmIC0tZ2l0IGEvbWNzL2Vy cm9ycy9jczEwMTMtNi5jcyBiL21jcy9lcnJvcnMvY3MxMDEzLTYuY3MKK25ldyBmaWxlIG1vZGUg MTAwNjQ0CitpbmRleCAwMDAwMDAwMDAwMC4uZDJjZWEyYzcyZGQKKy0tLSAvZGV2L251bGwKKysr KyBiL21jcy9lcnJvcnMvY3MxMDEzLTYuY3MKK0BAIC0wLDAgKzEsNyBAQAorKy8vIENTMTAxMzog SW52YWxpZCBudW1iZXIKKysvLyBMaW5lIDogNgorKworK2NsYXNzIFgKKyt7CisrICAgIHN0YXRp YyBmbG9hdCBpID0gMV9mOworK30KK1wgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorZGlmZiAt LWdpdCBhL21jcy9lcnJvcnMvY3MxMDEzLTcuY3MgYi9tY3MvZXJyb3JzL2NzMTAxMy03LmNzCitu ZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMDAwMDAuLjgwMzBkNmVkMDk1CistLS0g L2Rldi9udWxsCisrKysgYi9tY3MvZXJyb3JzL2NzMTAxMy03LmNzCitAQCAtMCwwICsxLDcgQEAK KysvLyBDUzEwMTM6IEludmFsaWQgbnVtYmVyCisrLy8gTGluZSA6IDYKKysKKytjbGFzcyBYCisr eworKyAgICBzdGF0aWMgaW50IGkgPSAweF8xOworK30KK1wgTm8gbmV3bGluZSBhdCBlbmQgb2Yg ZmlsZQorZGlmZiAtLWdpdCBhL21jcy9lcnJvcnMvY3MxMDEzLTguY3MgYi9tY3MvZXJyb3JzL2Nz MTAxMy04LmNzCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMDAwMDAuLmQyNmM3 YWNhY2I3CistLS0gL2Rldi9udWxsCisrKysgYi9tY3MvZXJyb3JzL2NzMTAxMy04LmNzCitAQCAt MCwwICsxLDcgQEAKKysvLyBDUzEwMTM6IEludmFsaWQgbnVtYmVyCisrLy8gTGluZSA6IDYKKysK KytjbGFzcyBYCisreworKyAgICBzdGF0aWMgaW50IGkgPSAwYl8xOworK30KK1wgTm8gbmV3bGlu ZSBhdCBlbmQgb2YgZmlsZQorZGlmZiAtLWdpdCBhL21jcy9lcnJvcnMvY3MxMDIxLTQuY3MgYi9t Y3MvZXJyb3JzL2NzMTAyMS00LmNzCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAw MDAwMDAuLjc1YzJmZjcwMzYwCistLS0gL2Rldi9udWxsCisrKysgYi9tY3MvZXJyb3JzL2NzMTAy MS00LmNzCitAQCAtMCwwICsxLDggQEAKKysvLyBDUzEwMjE6IEludGVncmFsIGNvbnN0YW50IGlz IHRvbyBsYXJnZQorKy8vIExpbmU6IDYKKysKKytjbGFzcyBYIHsKKysJcHVibGljIHN0YXRpYyB2 b2lkIE1haW4oKSB7CisrCQlpbnQgaCA9IDBiMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEx MTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTE7CisrCX0KKyt9CitkaWZmIC0tZ2l0 IGEvbWNzL2Vycm9ycy9jczEwNjEtMTguY3MgYi9tY3MvZXJyb3JzL2NzMTA2MS0xOC5jcworbmV3 IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAwMDAwLi4zYWM4MmI3ZjJkMworLS0tIC9k ZXYvbnVsbAorKysrIGIvbWNzL2Vycm9ycy9jczEwNjEtMTguY3MKK0BAIC0wLDAgKzEsMTAgQEAK KysvLyBDUzEwNjE6IFR5cGUgYGludCcgZG9lcyBub3QgY29udGFpbiBhIGRlZmluaXRpb24gZm9y IGBfXzAnIGFuZCBubyBleHRlbnNpb24gbWV0aG9kIGBfXzAnIG9mIHR5cGUgYGludCcgY291bGQg YmUgZm91bmQuIEFyZSB5b3UgbWlzc2luZyBhbiBhc3NlbWJseSByZWZlcmVuY2U/CisrLy8gTGlu ZTogOAorKworK3N0YXRpYyBjbGFzcyBDCisreworKwlzdGF0aWMgdm9pZCBNYWluICgpCisrCXsK KysJCWludCBjID0gMC5fXzA7CisrCX0KKyt9CitcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUK K2RpZmYgLS1naXQgYS9tY3MvZXJyb3JzL2NzMTUyNS0yNy5jcyBiL21jcy9lcnJvcnMvY3MxNTI1 LTI3LmNzCitpbmRleCBkYzE4NDkzMTY2Ny4uZDRjMWYzMjZiZTIgMTAwNjQ0CistLS0gYS9tY3Mv ZXJyb3JzL2NzMTUyNS0yNy5jcworKysrIGIvbWNzL2Vycm9ycy9jczE1MjUtMjcuY3MKK0BAIC0x LDQgKzEsNCBAQAorLS8vIENTMTUyNTogVW5leHBlY3RlZCBzeW1ib2wgYGZlJywgZXhwZWN0aW5n IGBjbGFzcycsIGBkZWxlZ2F0ZScsIGBlbnVtJywgYGludGVyZmFjZScsIGBwYXJ0aWFsJywgb3Ig YHN0cnVjdCcKKysvLyBDUzE1MjU6IFVuZXhwZWN0ZWQgc3ltYm9sIGBmZScsIGV4cGVjdGluZyBg Y2xhc3MnLCBgZGVsZWdhdGUnLCBgZW51bScsIGBpbnRlcmZhY2UnLCBgcGFydGlhbCcsIGByZWYn LCBvciBgc3RydWN0JworIC8vIExpbmU6IDYKKyAKKyBuYW1lc3BhY2UgWAorZGlmZiAtLWdpdCBh L21jcy9lcnJvcnMvY3MxNTI1LTQzLmNzIGIvbWNzL2Vycm9ycy9jczE1MjUtNDMuY3MKK2luZGV4 IGQ4M2Q0ZDg0N2ZhLi4yNmY0NjZhMjUyOCAxMDA2NDQKKy0tLSBhL21jcy9lcnJvcnMvY3MxNTI1 LTQzLmNzCisrKysgYi9tY3MvZXJyb3JzL2NzMTUyNS00My5jcworQEAgLTEsNCArMSw0IEBACist Ly8gQ1MxNTI1OiBVbmV4cGVjdGVkIHN5bWJvbCBgKScsIGV4cGVjdGluZyBgKCcsIGBbJywgYG91 dCcsIGBwYXJhbXMnLCBgcmVmJywgYHRoaXMnLCBvciBgdHlwZScKKysvLyBDUzE1MjU6IFVuZXhw ZWN0ZWQgc3ltYm9sIGApJworIC8vIExpbmU6IDYKKyAKKyBjbGFzcyBUZXN0Q2xhc3MKK2RpZmYg LS1naXQgYS9tY3MvZXJyb3JzL2NzMTUyNy0yLmNzIGIvbWNzL2Vycm9ycy9jczE1MjctMi5jcwor aW5kZXggZDM4OTQ1ZjNjODkuLjAyNTZlZTJiMzU0IDEwMDY0NAorLS0tIGEvbWNzL2Vycm9ycy9j czE1MjctMi5jcworKysrIGIvbWNzL2Vycm9ycy9jczE1MjctMi5jcworQEAgLTEsNCArMSw0IEBA CistLy8gQ1MxNTI3OiBOYW1lc3BhY2UgZWxlbWVudHMgY2Fubm90IGJlIGV4cGxpY2l0bHkgZGVj bGFyZWQgYXMgcHJpdmF0ZSwgcHJvdGVjdGVkIG9yIHByb3RlY3RlZCBpbnRlcm5hbAorKy8vIENT MTUyNzogTmFtZXNwYWNlIGVsZW1lbnRzIGNhbm5vdCBiZSBleHBsaWNpdGx5IGRlY2xhcmVkIGFz IHByaXZhdGUsIHByb3RlY3RlZCwgcHJvdGVjdGVkIGludGVybmFsLCBvciBwcml2YXRlIHByb3Rl Y3RlZAorIC8vIExpbmU6IDQKKyAKKyBwcm90ZWN0ZWQgaW50ZXJmYWNlIElGb28geworZGlmZiAt LWdpdCBhL21jcy9lcnJvcnMvY3MxNTI3LTMuY3MgYi9tY3MvZXJyb3JzL2NzMTUyNy0zLmNzCitp bmRleCA3NjNjNzU5NThlZS4uNDY5ZDc0Y2JiOTkgMTAwNjQ0CistLS0gYS9tY3MvZXJyb3JzL2Nz MTUyNy0zLmNzCisrKysgYi9tY3MvZXJyb3JzL2NzMTUyNy0zLmNzCitAQCAtMSw0ICsxLDQgQEAK Ky0vLyBDUzE1Mjc6IE5hbWVzcGFjZSBlbGVtZW50cyBjYW5ub3QgYmUgZXhwbGljaXRseSBkZWNs YXJlZCBhcyBwcml2YXRlLCBwcm90ZWN0ZWQgb3IgcHJvdGVjdGVkIGludGVybmFsCisrLy8gQ1Mx NTI3OiBOYW1lc3BhY2UgZWxlbWVudHMgY2Fubm90IGJlIGV4cGxpY2l0bHkgZGVjbGFyZWQgYXMg cHJpdmF0ZSwgcHJvdGVjdGVkLCBwcm90ZWN0ZWQgaW50ZXJuYWwsIG9yIHByaXZhdGUgcHJvdGVj dGVkCisgLy8gTGluZTogNAorIAorIHByb3RlY3RlZCBpbnRlcm5hbCBlbnVtIEUgeworZGlmZiAt LWdpdCBhL21jcy9lcnJvcnMvY3MxNTI3LmNzIGIvbWNzL2Vycm9ycy9jczE1MjcuY3MKK2luZGV4 IDE4OWNjNDcyZjRjLi5lODQ3ZmQxNGUxMSAxMDA2NDQKKy0tLSBhL21jcy9lcnJvcnMvY3MxNTI3 LmNzCisrKysgYi9tY3MvZXJyb3JzL2NzMTUyNy5jcworQEAgLTEsNCArMSw1IEBACistLy8gQ1Mx NTI3OiBOYW1lc3BhY2UgZWxlbWVudHMgY2Fubm90IGJlIGV4cGxpY2l0bHkgZGVjbGFyZWQgYXMg cHJpdmF0ZSwgcHJvdGVjdGVkIG9yIHByb3RlY3RlZCBpbnRlcm5hbAorLS8vIExpbmU6CisrLy8g Q1MxNTI3OiBOYW1lc3BhY2UgZWxlbWVudHMgY2Fubm90IGJlIGV4cGxpY2l0bHkgZGVjbGFyZWQg YXMgcHJpdmF0ZSwgcHJvdGVjdGVkLCBwcm90ZWN0ZWQgaW50ZXJuYWwsIG9yIHByaXZhdGUgcHJv dGVjdGVkCisrLy8gTGluZTogNAorKworIHByaXZhdGUgY2xhc3MgWCB7CisgfQorZGlmZiAtLWdp dCBhL21jcy9lcnJvcnMvY3MxNjExLTIuY3MgYi9tY3MvZXJyb3JzL2NzMTYxMS0yLmNzCituZXcg ZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMDAwMDAuLjg4MjIzMTM3OGYwCistLS0gL2Rl di9udWxsCisrKysgYi9tY3MvZXJyb3JzL2NzMTYxMS0yLmNzCitAQCAtMCwwICsxLDggQEAKKysv LyBDUzE2MTE6IFRoZSBwYXJhbXMgcGFyYW1ldGVyIGNhbm5vdCBiZSBkZWNsYXJlZCBhcyByZWYs IG91dCBvciBpbgorKy8vIExpbmU6IDYKKysvLyBDb21waWxlciBvcHRpb25zOiAtbGFuZ3ZlcnNp b246bGF0ZXN0CisrCisrY2xhc3MgVGVzdAorK3sKKysgICAgcHVibGljIHN0YXRpYyB2b2lkIEVy cm9yIChwYXJhbXMgaW4gaW50IGFyZ3MpIHt9CisrfQorXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBm aWxlCitkaWZmIC0tZ2l0IGEvbWNzL2Vycm9ycy9jczE2MTEuY3MgYi9tY3MvZXJyb3JzL2NzMTYx MS5jcworaW5kZXggOGRmMTBmYWMwY2UuLjQ2OWUwODNlYzNjIDEwMDY0NAorLS0tIGEvbWNzL2Vy cm9ycy9jczE2MTEuY3MKKysrKyBiL21jcy9lcnJvcnMvY3MxNjExLmNzCitAQCAtMSw0ICsxLDQg QEAKKy0vLyBDUzE2MTE6IFRoZSBwYXJhbXMgcGFyYW1ldGVyIGNhbm5vdCBiZSBkZWNsYXJlZCBh cyByZWYgb3Igb3V0CisrLy8gQ1MxNjExOiBUaGUgcGFyYW1zIHBhcmFtZXRlciBjYW5ub3QgYmUg ZGVjbGFyZWQgYXMgcmVmLCBvdXQgb3IgaW4KKyAvLyBMaW5lOiA2CisgCisgY2xhc3MgVGVzdAor ZGlmZiAtLWdpdCBhL21jcy9lcnJvcnMvY3MxNjQ0LTYxLmNzIGIvbWNzL2Vycm9ycy9jczE2NDQt NjEuY3MKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwMDAwMC4uZDU4YmE2NGM3 ZWMKKy0tLSAvZGV2L251bGwKKysrKyBiL21jcy9lcnJvcnMvY3MxNjQ0LTYxLmNzCitAQCAtMCww ICsxLDExIEBACisrLy8gQ1MxNjQ0OiBGZWF0dXJlIGBkaWdpdCBzZXBhcmF0b3JzJyBjYW5ub3Qg YmUgdXNlZCBiZWNhdXNlIGl0IGlzIG5vdCBwYXJ0IG9mIHRoZSBDIyA2LjAgbGFuZ3VhZ2Ugc3Bl Y2lmaWNhdGlvbgorKy8vIExpbmU6IDkKKysvLyBDb21waWxlciBvcHRpb25zOiAtbGFuZ3ZlcnNp b246NgorKworK2NsYXNzIFgKKyt7CisrCWludCBUZXN0ICgpCisrCXsKKysJCXZhciBpID0gMV8w OworKwl9CisrfQorZGlmZiAtLWdpdCBhL21jcy9lcnJvcnMvY3MxNjQ0LTYyLmNzIGIvbWNzL2Vy cm9ycy9jczE2NDQtNjIuY3MKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwMDAw MC4uNWEyOTgzOTYxMGQKKy0tLSAvZGV2L251bGwKKysrKyBiL21jcy9lcnJvcnMvY3MxNjQ0LTYy LmNzCitAQCAtMCwwICsxLDEwIEBACisrLy8gQ1MxNjQ0OiBGZWF0dXJlIGBwcml2YXRlIHByb3Rl Y3RlZCcgY2Fubm90IGJlIHVzZWQgYmVjYXVzZSBpdCBpcyBub3QgcGFydCBvZiB0aGUgQyMgNi4w IGxhbmd1YWdlIHNwZWNpZmljYXRpb24KKysvLyBMaW5lOiA3CisrLy8gQ29tcGlsZXIgb3B0aW9u czogLWxhbmd2ZXJzaW9uOjYKKysKKytjbGFzcyBDCisreworKwlwcml2YXRlIHByb3RlY3RlZCBl bnVtIEUKKysJeworKwl9CisrfQorXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCitkaWZmIC0t Z2l0IGEvbWNzL2Vycm9ycy9jczE2NDQtNjMuY3MgYi9tY3MvZXJyb3JzL2NzMTY0NC02My5jcwor bmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAwMDAwLi5jZTYxZDVjZTA0NgorLS0t IC9kZXYvbnVsbAorKysrIGIvbWNzL2Vycm9ycy9jczE2NDQtNjMuY3MKK0BAIC0wLDAgKzEsMjIg QEAKKysvLyBDUzE2NDQ6IEZlYXR1cmUgYGV4dGVuc2libGUgZml4ZWQgc3RhdGVtZW50JyBjYW5u b3QgYmUgdXNlZCBiZWNhdXNlIGl0IGlzIG5vdCBwYXJ0IG9mIHRoZSBDIyA3LjIgbGFuZ3VhZ2Ug c3BlY2lmaWNhdGlvbiAKKysvLyBMaW5lOiAxMQorKy8vIENvbXBpbGVyIG9wdGlvbnM6IC11bnNh ZmUgLWxhbmd2ZXJzaW9uOjcuMgorKworK3VzaW5nIFN5c3RlbTsKKysKKyt1bnNhZmUgY2xhc3Mg QworK3sKKysJcHVibGljIHN0YXRpYyB2b2lkIE1haW4gKCkKKysJeworKwkJZml4ZWQgKGludCog cCA9IG5ldyBGaXhhYmxlICgpKSB7CisrCQl9CisrCX0KKysKKysJc3RydWN0IEZpeGFibGUKKysJ eworKwkJcHVibGljIHJlZiBpbnQgR2V0UGlubmFibGVSZWZlcmVuY2UgKCkKKysJCXsKKysJCQl0 aHJvdyBuZXcgTm90SW1wbGVtZW50ZWRFeGNlcHRpb24gKCk7CisrCQl9CisrCX0KKyt9CitcIE5v IG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKK2RpZmYgLS1naXQgYS9tY3MvZXJyb3JzL2NzMTY0NC02 NC5jcyBiL21jcy9lcnJvcnMvY3MxNjQ0LTY0LmNzCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5k ZXggMDAwMDAwMDAwMDAuLjg4OTE3YTBhNWQ1CistLS0gL2Rldi9udWxsCisrKysgYi9tY3MvZXJy b3JzL2NzMTY0NC02NC5jcworQEAgLTAsMCArMSwxMyBAQAorKy8vIENTMTY0NDogRmVhdHVyZSBg ZXhwcmVzc2lvbiBib2R5IHByb3BlcnR5IGFjY2Vzc29yJyBjYW5ub3QgYmUgdXNlZCBiZWNhdXNl IGl0IGlzIG5vdCBwYXJ0IG9mIHRoZSBDIyA2LjAgbGFuZ3VhZ2Ugc3BlY2lmaWNhdGlvbiAKKysv LyBMaW5lOiAxMQorKy8vIENvbXBpbGVyIG9wdGlvbnM6IC1sYW5ndmVyc2lvbjo2CisrCisrdXNp bmcgU3lzdGVtOworKworK2NsYXNzIEMKKyt7CisrCXB1YmxpYyBpbnQgSW50ZWdlcgorKwl7Cisr CQlnZXQgPT4gMDsKKysJfQorK30KK1wgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorZGlmZiAt LWdpdCBhL21jcy9lcnJvcnMvY3MxNjQ0LTY1LmNzIGIvbWNzL2Vycm9ycy9jczE2NDQtNjUuY3MK K25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwMDAwMC4uZGVhNjQ4Yjc4NDYKKy0t LSAvZGV2L251bGwKKysrKyBiL21jcy9lcnJvcnMvY3MxNjQ0LTY1LmNzCitAQCAtMCwwICsxLDEz IEBACisrLy8gQ1MxNjQ0OiBGZWF0dXJlIGBleHByZXNzaW9uIGJvZHkgcHJvcGVydHkgYWNjZXNz b3InIGNhbm5vdCBiZSB1c2VkIGJlY2F1c2UgaXQgaXMgbm90IHBhcnQgb2YgdGhlIEMjIDYuMCBs YW5ndWFnZSBzcGVjaWZpY2F0aW9uIAorKy8vIExpbmU6IDExCisrLy8gQ29tcGlsZXIgb3B0aW9u czogLWxhbmd2ZXJzaW9uOjYKKysKKyt1c2luZyBTeXN0ZW07CisrCisrY2xhc3MgQworK3sKKysJ cHVibGljIGludCB0aGlzW2ludCBpXQorKwl7CisrCQlnZXQgPT4gaTsKKysJfQorK30KK1wgTm8g bmV3bGluZSBhdCBlbmQgb2YgZmlsZQorZGlmZiAtLWdpdCBhL21jcy9lcnJvcnMvY3MxNjQ0LTY2 LmNzIGIvbWNzL2Vycm9ycy9jczE2NDQtNjYuY3MKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRl eCAwMDAwMDAwMDAwMC4uM2YzOTNiNTBkMzAKKy0tLSAvZGV2L251bGwKKysrKyBiL21jcy9lcnJv cnMvY3MxNjQ0LTY2LmNzCitAQCAtMCwwICsxLDE3IEBACisrLy8gQ1MxNjQ0OiBGZWF0dXJlIGBl eHByZXNzaW9uIGJvZHkgZXZlbnQgYWNjZXNzb3InIGNhbm5vdCBiZSB1c2VkIGJlY2F1c2UgaXQg aXMgbm90IHBhcnQgb2YgdGhlIEMjIDYuMCBsYW5ndWFnZSBzcGVjaWZpY2F0aW9uIAorKy8vIExp bmU6IDExCisrLy8gQ29tcGlsZXIgb3B0aW9uczogLWxhbmd2ZXJzaW9uOjYKKysKKyt1c2luZyBT eXN0ZW07CisrCisrY2xhc3MgQworK3sKKysJcHVibGljIGV2ZW50IEV2ZW50SGFuZGxlciBFdmVu dAorKwl7CisrCQlhZGQgPT4gSWdub3JlICgpOworKwl9CisrCisrCXN0YXRpYyB2b2lkIElnbm9y ZSAoKQorKwl7CisrCX0KKyt9CitcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKK2RpZmYgLS1n aXQgYS9tY3MvZXJyb3JzL2NzMTc2My0yLmNzIGIvbWNzL2Vycm9ycy9jczE3NjMtMi5jcworaW5k ZXggNzJmNTM3MDk0OWEuLjdlNGQwOTFmYzcyIDEwMDY0NAorLS0tIGEvbWNzL2Vycm9ycy9jczE3 NjMtMi5jcworKysrIGIvbWNzL2Vycm9ycy9jczE3NjMtMi5jcworQEAgLTEsNCArMSw0IEBACist Ly8gQ1MxNzYzOiBPcHRpb25hbCBwYXJhbWV0ZXIgYG8nIG9mIHR5cGUgYG9iamVjdCcgY2FuIG9u bHkgYmUgaW5pdGlhbGl6ZWQgd2l0aCBgbnVsbCcKKysvLyBDUzE3NjM6IE9wdGlvbmFsIHBhcmFt ZXRlciBgbycgb2YgdHlwZSBgb2JqZWN0JyBjYW4gb25seSBiZSBpbml0aWFsaXplZCB3aXRoIGRl ZmF1bHQgdmFsdWUKKyAvLyBMaW5lOiA2CisgCisgY2xhc3MgQworZGlmZiAtLWdpdCBhL21jcy9l cnJvcnMvY3MxNzYzLmNzIGIvbWNzL2Vycm9ycy9jczE3NjMuY3MKK2luZGV4IGQxMGE3YmYyYzIw Li4wM2I1ZjI4YTE5ZCAxMDA2NDQKKy0tLSBhL21jcy9lcnJvcnMvY3MxNzYzLmNzCisrKysgYi9t Y3MvZXJyb3JzL2NzMTc2My5jcworQEAgLTEsNCArMSw0IEBACistLy8gQ1MxNzYzOiBPcHRpb25h bCBwYXJhbWV0ZXIgYG8nIG9mIHR5cGUgYG9iamVjdCcgY2FuIG9ubHkgYmUgaW5pdGlhbGl6ZWQg d2l0aCBgbnVsbCcKKysvLyBDUzE3NjM6IE9wdGlvbmFsIHBhcmFtZXRlciBgbycgb2YgdHlwZSBg b2JqZWN0JyBjYW4gb25seSBiZSBpbml0aWFsaXplZCB3aXRoIGRlZmF1bHQgdmFsdWUKKyAvLyBM aW5lOiA2CisgCisgY2xhc3MgQworZGlmZiAtLWdpdCBhL21jcy9lcnJvcnMvY3M4MzI2LmNzIGIv bWNzL2Vycm9ycy9jczgzMjYuY3MKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAw MDAwMC4uZWZkM2E4NGZlYTcKKy0tLSAvZGV2L251bGwKKysrKyBiL21jcy9lcnJvcnMvY3M4MzI2 LmNzCitAQCAtMCwwICsxLDEzIEBACisrLy8gQ1M4MzI2OiBCb3RoIHJlZiBjb25kaXRpb25hbCBv cGVyYXRvcnMgbXVzdCBiZSByZWYgdmFsdWVzCisrLy8gTGluZTogMTEKKysKKytjbGFzcyBQcm9n cmFtCisreworKwlzdGF0aWMgaW50IHgsIHk7CisrCisrCXB1YmxpYyBzdGF0aWMgdm9pZCBNYWlu ICgpCisrCXsKKysJCWJvb2wgYiA9IGZhbHNlOworKwkJcmVmIGludCB0YXJnZXRCdWNrZXQgPSBy ZWYgYiA/IHggOiB5OworKwl9CisrfQorXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCitkaWZm IC0tZ2l0IGEvbWNzL2Vycm9ycy9jczgzMjcuY3MgYi9tY3MvZXJyb3JzL2NzODMyNy5jcworbmV3 IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAwMDAwLi44ZDBjY2Q4NmE3MAorLS0tIC9k ZXYvbnVsbAorKysrIGIvbWNzL2Vycm9ycy9jczgzMjcuY3MKK0BAIC0wLDAgKzEsMTQgQEAKKysv LyBDUzgzMjc6IFRoZSByZWYgY29uZGl0aW9uYWwgZXhwcmVzc2lvbiB0eXBlcyBgaW50JyBhbmQg YGJ5dGUnIGhhdmUgdG8gbWF0Y2gKKysvLyBMaW5lOiAxMgorKworK2NsYXNzIFByb2dyYW0KKyt7 CisrCXN0YXRpYyBpbnQgeDsKKysJc3RhdGljIGJ5dGUgeTsKKysKKysJcHVibGljIHN0YXRpYyB2 b2lkIE1haW4gKCkKKysJeworKwkJYm9vbCBiID0gZmFsc2U7CisrCQlyZWYgaW50IHRhcmdldEJ1 Y2tldCA9IHJlZiBiID8gcmVmIHggOiByZWYgeTsKKysJfQorK30KK1wgTm8gbmV3bGluZSBhdCBl bmQgb2YgZmlsZQorZGlmZiAtLWdpdCBhL21jcy9lcnJvcnMvY3MwNDI4LTIuY3MgYi9tY3MvZXJy b3JzL2NzODM4NS0yLmNzCitzaW1pbGFyaXR5IGluZGV4IDUwJQorcmVuYW1lIGZyb20gbWNzL2Vy cm9ycy9jczA0MjgtMi5jcworcmVuYW1lIHRvIG1jcy9lcnJvcnMvY3M4Mzg1LTIuY3MKK2luZGV4 IDVmNDY4ZmQ1MTlhLi5jYzc4NjBmYWE2MiAxMDA2NDQKKy0tLSBhL21jcy9lcnJvcnMvY3MwNDI4 LTIuY3MKKysrKyBiL21jcy9lcnJvcnMvY3M4Mzg1LTIuY3MKK0BAIC0xLDQgKzEsNCBAQAorLS8v IENTMDQyODogQ2Fubm90IGNvbnZlcnQgbWV0aG9kIGdyb3VwIGBNYWluJyB0byBub24tZGVsZWdh dGUgdHlwZSBgdm9pZConLiBDb25zaWRlciB1c2luZyBwYXJlbnRoZXNlcyB0byBpbnZva2UgdGhl IG1ldGhvZAorKy8vIENTODM4NTogVGhlIGdpdmVuIGV4cHJlc3Npb24gY2Fubm90IGJlIHVzZWQg aW4gYSBmaXhlZCBzdGF0ZW1lbnQKKyAvLyBMaW5lOiA5CisgLy8gQ29tcGlsZXIgb3B0aW9uczog LXVuc2FmZQorIAorZGlmZiAtLWdpdCBhL21jcy9lcnJvcnMvY3MwMjEzLTIuY3MgYi9tY3MvZXJy b3JzL2NzODM4NS5jcworc2ltaWxhcml0eSBpbmRleCA1NCUKK3JlbmFtZSBmcm9tIG1jcy9lcnJv cnMvY3MwMjEzLTIuY3MKK3JlbmFtZSB0byBtY3MvZXJyb3JzL2NzODM4NS5jcworaW5kZXggYWU3 MmU0Y2Q5YWEuLjVmYTlmNzk0Y2NmIDEwMDY0NAorLS0tIGEvbWNzL2Vycm9ycy9jczAyMTMtMi5j cworKysrIGIvbWNzL2Vycm9ycy9jczgzODUuY3MKK0BAIC0xLDQgKzEsNCBAQAorLS8vIENTMDIx MzogWW91IGNhbm5vdCB1c2UgdGhlIGZpeGVkIHN0YXRlbWVudCB0byB0YWtlIHRoZSBhZGRyZXNz IG9mIGFuIGFscmVhZHkgZml4ZWQgZXhwcmVzc2lvbgorKy8vIENTODM4NTogVGhlIGdpdmVuIGV4 cHJlc3Npb24gY2Fubm90IGJlIHVzZWQgaW4gYSBmaXhlZCBzdGF0ZW1lbnQKKyAvLyBMaW5lOiA5 CisgLy8gQ29tcGlsZXIgb3B0aW9uczogLXVuc2FmZQorIAorZGlmZiAtLWdpdCBhL21jcy9lcnJv cnMva25vd24taXNzdWVzLW5ldF80X3ggYi9tY3MvZXJyb3JzL2tub3duLWlzc3Vlcy1uZXRfNF94 CitpbmRleCBjOWVkOTMxNzM1MC4uNTQ5MDJlMDNlN2IgMTAwNjQ0CistLS0gYS9tY3MvZXJyb3Jz L2tub3duLWlzc3Vlcy1uZXRfNF94CisrKysgYi9tY3MvZXJyb3JzL2tub3duLWlzc3Vlcy1uZXRf NF94CitAQCAtMTQsNiArMTQsOSBAQAorICMgUGFyc2VyIHByb2JsZW1zCisgY3MwMDgwLmNzIAor IAorKyMgVW5kb2N1bWVudGVkIHN3aXRjaCBnb3Zlcm5pbmcgcnVsZXMKKytjczAxNTEtNC5jcyBO TyBFUlJPUgorKworICMgT3BlcmF0b3JzCisgY3MwNDU3LTIuY3MKKyBjczA0NTcuY3MKK2RpZmYg LS1naXQgYS9tY3MvaWxhc20vTWFrZWZpbGUgYi9tY3MvaWxhc20vTWFrZWZpbGUKK2luZGV4IDA5 MGQxY2MzMjMxLi40Y2ExMTU0NTc4MSAxMDA2NDQKKy0tLSBhL21jcy9pbGFzbS9NYWtlZmlsZQor KysrIGIvbWNzL2lsYXNtL01ha2VmaWxlCitAQCAtMTMsNyArMTMsNyBAQCBFWFRSQV9ESVNURklM RVMgPSBcCisgCSQod2lsZGNhcmQgdGVzdHMvKi5pbCkKKyAKKyBJTFBhcnNlci5jczogcGFyc2Vy L0lMUGFyc2VyLmpheSAkKHRvcGRpcikvamF5L3NrZWxldG9uLmNzCistCSQodG9wZGlyKS9qYXkv amF5IC1jdCA8ICQodG9wZGlyKS9qYXkvc2tlbGV0b24uY3MgJChDVVJESVIpLyQ8ID4kQAorKwkk KHRvcGRpcikvamF5L2pheSAtY3QgLW8gJEAgJChDVVJESVIpLyQ8IDwgJCh0b3BkaXIpL2pheS9z a2VsZXRvbi5jcworIAorIGluY2x1ZGUgLi4vYnVpbGQvZXhlY3V0YWJsZS5tYWtlCisgCitkaWZm IC0tZ2l0IGEvbWNzL2pheS9kZWZzLmggYi9tY3MvamF5L2RlZnMuaAoraW5kZXggMmFhZGU0OGRh YzIuLjNiZDNjNTg1OWNlIDEwMDY0NAorLS0tIGEvbWNzL2pheS9kZWZzLmgKKysrKyBiL21jcy9q YXkvZGVmcy5oCitAQCAtMjM2LDEyICsyMzYsMTQgQEAgZXh0ZXJuIGNoYXIgKmlucHV0X2ZpbGVf bmFtZTsKKyBleHRlcm4gY2hhciAqcHJvbG9nX2ZpbGVfbmFtZTsKKyBleHRlcm4gY2hhciAqbG9j YWxfZmlsZV9uYW1lOworIGV4dGVybiBjaGFyICp2ZXJib3NlX2ZpbGVfbmFtZTsKKytleHRlcm4g Y2hhciAqb3V0cHV0X2ZpbGVfbmFtZTsKKyAKKyBleHRlcm4gRklMRSAqYWN0aW9uX2ZpbGU7Cisg ZXh0ZXJuIEZJTEUgKmlucHV0X2ZpbGU7CisgZXh0ZXJuIEZJTEUgKnByb2xvZ19maWxlOworIGV4 dGVybiBGSUxFICpsb2NhbF9maWxlOworIGV4dGVybiBGSUxFICp2ZXJib3NlX2ZpbGU7CisrZXh0 ZXJuIEZJTEUgKm91dHB1dF9maWxlOworIAorIGV4dGVybiBpbnQgbml0ZW1zOworIGV4dGVybiBp bnQgbnJ1bGVzOworZGlmZiAtLWdpdCBhL21jcy9qYXkvbWFpbi5jIGIvbWNzL2pheS9tYWluLmMK K2luZGV4IGZjYWMyMThiMWRmLi43ZmI1ZTZjOGNjYiAxMDA2NDQKKy0tLSBhL21jcy9qYXkvbWFp bi5jCisrKysgYi9tY3MvamF5L21haW4uYworQEAgLTYzLDYgKzYzLDcgQEAgY2hhciAqaW5wdXRf ZmlsZV9uYW1lID0gIiI7CisgY2hhciAqcHJvbG9nX2ZpbGVfbmFtZTsKKyBjaGFyICpsb2NhbF9m aWxlX25hbWU7CisgY2hhciAqdmVyYm9zZV9maWxlX25hbWU7CisrY2hhciAqb3V0cHV0X2ZpbGVf bmFtZSA9IDA7CisgCisgRklMRSAqYWN0aW9uX2ZpbGU7CS8qICBhIHRlbXAgZmlsZSwgdXNlZCB0 byBzYXZlIGFjdGlvbnMgYXNzb2NpYXRlZCAgICAqLworIAkJCS8qICB3aXRoIHJ1bGVzIHVudGls IHRoZSBwYXJzZXIgaXMgd3JpdHRlbgkgICAgKi8KK0BAIC03MCw2ICs3MSw3IEBAIEZJTEUgKmlu cHV0X2ZpbGU7CS8qICB0aGUgaW5wdXQgZmlsZQkJCQkgICAgKi8KKyBGSUxFICpwcm9sb2dfZmls ZTsJLyogIHRlbXAgZmlsZXMsIHVzZWQgdG8gc2F2ZSB0ZXh0IHVudGlsIGFsbAkgICAgKi8KKyBG SUxFICpsb2NhbF9maWxlOwkvKiAgc3ltYm9scyBoYXZlIGJlZW4gZGVmaW5lZAkJCSAgICAqLwor IEZJTEUgKnZlcmJvc2VfZmlsZTsJLyogIHkub3V0cHV0CQkJCQkgICAgKi8KKytGSUxFICpvdXRw dXRfZmlsZTsgLyogZGVmYXVsdHMgdG8gc3Rkb3V0ICovCisgCisgaW50IG5pdGVtczsKKyBpbnQg bnJ1bGVzOworQEAgLTEwNiw2ICsxMDgsNyBAQCBpbnQgazsKKyAgICAgaWYgKGFjdGlvbl9maWxl KSB7IGZjbG9zZShhY3Rpb25fZmlsZSk7IHVubGluayhhY3Rpb25fZmlsZV9uYW1lKTsgfQorICAg ICBpZiAocHJvbG9nX2ZpbGUpIHsgZmNsb3NlKHByb2xvZ19maWxlKTsgdW5saW5rKHByb2xvZ19m aWxlX25hbWUpOyB9CisgICAgIGlmIChsb2NhbF9maWxlKSB7IGZjbG9zZShsb2NhbF9maWxlKTsg dW5saW5rKGxvY2FsX2ZpbGVfbmFtZSk7IH0KKysgICAgaWYgKG91dHB1dF9maWxlICYmIChvdXRw dXRfZmlsZSAhPSBzdGRvdXQpKSB7IGZjbG9zZShvdXRwdXRfZmlsZSk7IGlmIChrICE9IDApIHVu bGluayhvdXRwdXRfZmlsZV9uYW1lKTsgfQorICAgICBleGl0KGspOworIH0KKyAKK0BAIC0xMzcs NyArMTQwLDcgQEAgc2V0X3NpZ25hbHMoKQorIAorIHVzYWdlKCkKKyB7CistICAgIGZwcmludGYo c3RkZXJyLCAidXNhZ2U6ICVzIFstdHZjcF0gWy1iIGZpbGVfcHJlZml4XSBmaWxlbmFtZVxuIiwg bXluYW1lKTsKKysgICAgZnByaW50ZihzdGRlcnIsICJ1c2FnZTogJXMgWy10dmNwXSBbLWIgZmls ZV9wcmVmaXhdIFstbyBvdXRwdXRfZmlsZW5hbWVdIGlucHV0X2ZpbGVuYW1lXG4iLCBteW5hbWUp OworICAgICBleGl0KDEpOworIH0KKyAKK0BAIC0xNjcsOSArMTcwLDkgQEAgY2hhciAqYXJndltd OworIAkgICAgaWYgKGkgKyAxIDwgYXJnYykgdXNhZ2UoKTsKKyAJICAgIHJldHVybjsKKyAKKy0g ICAgICAgIGNhc2UgJy0nOgorLSAgICAgICAgICAgICsraTsKKy0gICAgICAgICAgICBnb3RvIG5v X21vcmVfb3B0aW9uczsKKysgICAgY2FzZSAnLSc6CisrICAgICAgICArK2k7CisrICAgICAgICBn b3RvIG5vX21vcmVfb3B0aW9uczsKKyAKKyAJY2FzZSAnYic6CisgCSAgICBpZiAoKisrcykKK0BA IC0xODAsMTMgKzE4MywyMiBAQCBjaGFyICphcmd2W107CisgCQl1c2FnZSgpOworIAkgICAgY29u dGludWU7CisgCistICAgICAgICBjYXNlICd0JzoKKy0gICAgICAgICAgICB0ZmxhZyA9IDE7Cist ICAgICAgICAgICAgYnJlYWs7CisrICAgIGNhc2UgJ28nOgorKyAgICAgICAgaWYgKCorK3MpCisr ICAgICAgICAgICAgb3V0cHV0X2ZpbGVfbmFtZSA9IHM7CisrICAgICAgICBlbHNlIGlmICgrK2kg PCBhcmdjKQorKyAgICAgICAgICAgIG91dHB1dF9maWxlX25hbWUgPSBhcmd2W2ldOworKyAgICAg ICAgZWxzZQorKyAgICAgICAgICAgIHVzYWdlKCk7CisrICAgICAgICBjb250aW51ZTsKKysKKysg ICAgY2FzZSAndCc6CisrICAgICAgICB0ZmxhZyA9IDE7CisrICAgICAgICBicmVhazsKKyAKKyAJ Y2FzZSAncCc6CistICAgICAgICAgICAgcHJpbnRfc2tlbF9kaXIgKCk7CistICAgICAgICAgICAg YnJlYWs7CisrICAgICAgICBwcmludF9za2VsX2RpciAoKTsKKysgICAgICAgIGJyZWFrOworIAor IAljYXNlICdjJzoKKyAJICAgIGNzaGFycCA9IDE7CitAQCAtMjE3LDEyICsyMjksMTIgQEAgY2hh ciAqYXJndltdOworIAkJdmZsYWcgPSAxOworIAkJYnJlYWs7CisgCistICAgICAgICAgICAgY2Fz ZSAncCc6CistICAgICAgICAgICAgICAgIHByaW50X3NrZWxfZGlyICgpOworLSAgICAgICAgICAg ICAgICBicmVhazsKKysgICAgICAgIGNhc2UgJ3AnOgorKyAgICAgICAgICAgIHByaW50X3NrZWxf ZGlyICgpOworKyAgICAgICAgICAgIGJyZWFrOworIAorLSAgICAgICAgICAgIGNhc2UgJ2MnOgor LQkJY3NoYXJwID0gMTsKKysgICAgICAgIGNhc2UgJ2MnOgorKwkJICAgIGNzaGFycCA9IDE7Cisg CSAgICAgICAgbGluZV9mb3JtYXQgPSAiI2xpbmUgJWQgXCIlc1wiXG4iOworICAgICAgICAgCWRl ZmF1bHRfbGluZV9mb3JtYXQgPSAiI2xpbmUgZGVmYXVsdFxuIjsKKyAKK0BAIC0zNTUsNiArMzY3 LDE3IEBAIG9wZW5fZmlsZXMoKQorIAlpZiAodmVyYm9zZV9maWxlID09IDApCisgCSAgICBvcGVu X2Vycm9yKHZlcmJvc2VfZmlsZV9uYW1lKTsKKyAgICAgfQorKworKyAgICBpZiAob3V0cHV0X2Zp bGUgPT0gMCkKKysgICAgeworKyAgICAgICAgaWYgKG91dHB1dF9maWxlX25hbWUgIT0gMCkgewor KyAgICAgICAgICAgIG91dHB1dF9maWxlID0gZm9wZW4ob3V0cHV0X2ZpbGVfbmFtZSwgInciKTsK KysgICAgICAgICAgICBpZiAob3V0cHV0X2ZpbGUgPT0gMCkKKysgICAgICAgICAgICAgICAgb3Bl bl9lcnJvcihvdXRwdXRfZmlsZV9uYW1lKTsKKysgICAgICAgIH0gZWxzZSB7CisrICAgICAgICAg ICAgb3V0cHV0X2ZpbGUgPSBzdGRvdXQ7CisrICAgICAgICB9CisrICAgIH0KKyB9CisgCisgCitk aWZmIC0tZ2l0IGEvbWNzL2pheS9vdXRwdXQuYyBiL21jcy9qYXkvb3V0cHV0LmMKK2luZGV4IGQx ZTJjMTRhMWIyLi5hYjliMjA0M2JlOSAxMDA2NDQKKy0tLSBhL21jcy9qYXkvb3V0cHV0LmMKKysr KyBiL21jcy9qYXkvb3V0cHV0LmMKK0BAIC03Myw3ICs3Myw3IEBAIG91dHB1dCAoKSB7CisgICAg ICAgZnByaW50ZihzdGRlcnIsICJqYXk6IGxpbmUgJWQgaXMgdG9vIGxvbmdcbiIsIGxubyksIGRv bmUoMSk7CisgICAgIHN3aXRjaCAoYnVmWzBdKSB7CisgICAgIGNhc2UgJyMnOgljb250aW51ZTsK Ky0gICAgY2FzZSAndCc6CWlmICghdGZsYWcpIGZwdXRzKCIvL3QiLCBzdGRvdXQpOworKyAgICBj YXNlICd0JzoJaWYgKCF0ZmxhZykgZnB1dHMoIi8vdCIsIG91dHB1dF9maWxlKTsKKyAgICAgY2Fz ZSAnLic6CWJyZWFrOworICAgICBkZWZhdWx0OgorICAgICAgIGNwID0gc3RydG9rKGJ1ZiwgIiBc dFxyXG4iKTsKK0BAIC05Myw3ICs5Myw3IEBAIG91dHB1dCAoKSB7CisgICAgICAgICAgIGZwcmlu dGYoc3RkZXJyLCAiamF5OiB1bmtub3duIGNhbGwgKCVzKSBpbiBsaW5lICVkXG4iLCBjcCwgbG5v KTsKKyAgICAgICBjb250aW51ZTsKKyAgICAgfQorLSAgICBmcHV0cyhidWYrMSwgc3Rkb3V0KSwg Kysgb3V0bGluZTsKKysgICAgZnB1dHMoYnVmKzEsIG91dHB1dF9maWxlKSwgKysgb3V0bGluZTsK KyAgIH0KKyAgIGZyZWVfcGFyc2VyKCk7CisgfQorQEAgLTEwMywxOSArMTAzLDE5IEBAIG91dHB1 dF9ydWxlX2RhdGEoKQorICAgICByZWdpc3RlciBpbnQgaTsKKyAgICAgcmVnaXN0ZXIgaW50IGo7 CisgCistCXByaW50ZigiLypcbiBBbGwgbW9yZSB0aGFuIDMgbGluZXMgbG9uZyBydWxlcyBhcmUg d3JhcHBlZCBpbnRvIGEgbWV0aG9kXG4qL1xuIik7CisrCWZwcmludGYob3V0cHV0X2ZpbGUsICIv KlxuIEFsbCBtb3JlIHRoYW4gMyBsaW5lcyBsb25nIHJ1bGVzIGFyZSB3cmFwcGVkIGludG8gYSBt ZXRob2RcbiovXG4iKTsKKyAKKyAgICAgZm9yIChpID0gMDsgaSA8IG5tZXRob2RzOyArK2kpCisg CXsKKy0JCXByaW50ZigiJXMiLCBtZXRob2RzW2ldKTsKKysJCWZwcmludGYob3V0cHV0X2ZpbGUs ICIlcyIsIG1ldGhvZHNbaV0pOworIAkJRlJFRShtZXRob2RzW2ldKTsKKy0JCXByaW50ZigiXG5c biIpOworKwkJZnByaW50ZihvdXRwdXRfZmlsZSwgIlxuXG4iKTsKKyAJfQorIAlGUkVFKG1ldGhv ZHMpOworIAorLQlwcmludGYoZGVmYXVsdF9saW5lX2Zvcm1hdCwgKytvdXRsaW5lICsgMSk7Cisr CWZwcmludGYob3V0cHV0X2ZpbGUsIGRlZmF1bHRfbGluZV9mb3JtYXQsICsrb3V0bGluZSArIDEp OworIAorLSAgICBwcmludGYoIiAgJXMgc3RhdGljICVzIHNob3J0IFtdIHl5TGhzICA9IHslMTZk LCIsCisrICAgIGZwcmludGYob3V0cHV0X2ZpbGUsICIgICVzIHN0YXRpYyAlcyBzaG9ydCBbXSB5 eUxocyAgPSB7JTE2ZCwiLAorIAkgICBjc2hhcnAgPyAiIiA6ICIgcHJvdGVjdGVkIiwKKyAJICAg Y3NoYXJwID8gInJlYWRvbmx5IiA6ICJmaW5hbCIsCisgCSAgICBzeW1ib2xfdmFsdWVbc3RhcnRf c3ltYm9sXSk7CitAQCAtMTI2LDE4ICsxMjYsMTggQEAgb3V0cHV0X3J1bGVfZGF0YSgpCisgCWlm IChqID49IDEwKQorIAl7CisgCSAgICArK291dGxpbmU7CistCSAgICBwdXRjaGFyKCdcbicpOwor KwkgICAgcHV0YygnXG4nLCBvdXRwdXRfZmlsZSk7CisgCSAgICBqID0gMTsKKyAJfQorICAgICAg ICAgZWxzZQorIAkgICAgKytqOworIAorLSAgICAgICAgcHJpbnRmKCIlNWQsIiwgc3ltYm9sX3Zh bHVlW3JsaHNbaV1dKTsKKysgICAgICAgIGZwcmludGYob3V0cHV0X2ZpbGUsICIlNWQsIiwgc3lt Ym9sX3ZhbHVlW3JsaHNbaV1dKTsKKyAgICAgfQorICAgICBvdXRsaW5lICs9IDI7CistICAgIHBy aW50ZigiXG4gIH07XG4iKTsKKysgICAgZnByaW50ZihvdXRwdXRfZmlsZSwgIlxuICB9O1xuIik7 CisgCistICAgIHByaW50ZigiICAlcyBzdGF0aWMgJXMgc2hvcnQgW10geXlMZW4gPSB7JTEyZCwi LAorKyAgICBmcHJpbnRmKG91dHB1dF9maWxlLCAiICAlcyBzdGF0aWMgJXMgc2hvcnQgW10geXlM ZW4gPSB7JTEyZCwiLAorIAkgICBjc2hhcnAgPyAiIiA6ICJwcm90ZWN0ZWQiLAorIAkgICBjc2hh cnAgPyAicmVhZG9ubHkiIDogImZpbmFsIiwKKyAJICAgMik7CitAQCAtMTQ4LDE2ICsxNDgsMTYg QEAgb3V0cHV0X3J1bGVfZGF0YSgpCisgCWlmIChqID49IDEwKQorIAl7CisgCSAgICArK291dGxp bmU7CistCSAgICBwdXRjaGFyKCdcbicpOworKwkgICAgcHV0YygnXG4nLCBvdXRwdXRfZmlsZSk7 CisgCSAgICBqID0gMTsKKyAJfQorIAllbHNlCisgCSAgaisrOworIAorLSAgICAgICAgcHJpbnRm KCIlNWQsIiwgcnJoc1tpICsgMV0gLSBycmhzW2ldIC0gMSk7CisrICAgICAgICBmcHJpbnRmKG91 dHB1dF9maWxlLCAiJTVkLCIsIHJyaHNbaSArIDFdIC0gcnJoc1tpXSAtIDEpOworICAgICB9Cisg ICAgIG91dGxpbmUgKz0gMjsKKy0gICAgcHJpbnRmKCJcbiAgfTtcbiIpOworKyAgICBmcHJpbnRm KG91dHB1dF9maWxlLCAiXG4gIH07XG4iKTsKKyB9CisgCisgCitAQCAtMTY1LDcgKzE2NSw3IEBA IG91dHB1dF95eWRlZnJlZCgpCisgeworICAgICByZWdpc3RlciBpbnQgaSwgajsKKyAKKy0gICAg cHJpbnRmKCIgICVzIHN0YXRpYyAlcyBzaG9ydCBbXSB5eURlZlJlZCA9IHslMTNkLCIsCisrICAg IGZwcmludGYob3V0cHV0X2ZpbGUsICIgICVzIHN0YXRpYyAlcyBzaG9ydCBbXSB5eURlZlJlZCA9 IHslMTNkLCIsCisgCSAgIGNzaGFycCA/ICIiIDogInByb3RlY3RlZCIsCisgCSAgIGNzaGFycCA/ ICJyZWFkb25seSIgOiAiZmluYWwiLAkgICAKKyAJICAgIChkZWZyZWRbMF0gPyBkZWZyZWRbMF0g LSAyIDogMCkpOworQEAgLTE3OCwxNSArMTc4LDE1IEBAIG91dHB1dF95eWRlZnJlZCgpCisgCWVs c2UKKyAJeworIAkgICAgKytvdXRsaW5lOworLQkgICAgcHV0Y2hhcignXG4nKTsKKysJICAgIHB1 dGMoJ1xuJywgb3V0cHV0X2ZpbGUpOworIAkgICAgaiA9IDE7CisgCX0KKyAKKy0JcHJpbnRmKCIl NWQsIiwgKGRlZnJlZFtpXSA/IGRlZnJlZFtpXSAtIDIgOiAwKSk7CisrCWZwcmludGYob3V0cHV0 X2ZpbGUsICIlNWQsIiwgKGRlZnJlZFtpXSA/IGRlZnJlZFtpXSAtIDIgOiAwKSk7CisgICAgIH0K KyAKKyAgICAgb3V0bGluZSArPSAyOworLSAgICBwcmludGYoIlxuICB9O1xuIik7CisrICAgIGZw cmludGYob3V0cHV0X2ZpbGUsICJcbiAgfTtcbiIpOworIH0KKyAKKyAKK0BAIC0zMDksNyArMzA5 LDcgQEAgZ290b19hY3Rpb25zKCkKKyAgICAgc3RhdGVfY291bnQgPSBORVcyKG5zdGF0ZXMsIHNo b3J0KTsKKyAKKyAgICAgayA9IGRlZmF1bHRfZ290byhzdGFydF9zeW1ib2wgKyAxKTsKKy0gICAg cHJpbnRmKCIgIHByb3RlY3RlZCBzdGF0aWMgJXMgc2hvcnQgW10geXlEZ290byAgPSB7JTE0ZCwi LCBjc2hhcnAgPyAicmVhZG9ubHkiIDogImZpbmFsIiwgayk7CisrICAgIGZwcmludGYob3V0cHV0 X2ZpbGUsICIgIHByb3RlY3RlZCBzdGF0aWMgJXMgc2hvcnQgW10geXlEZ290byAgPSB7JTE0ZCwi LCBjc2hhcnAgPyAicmVhZG9ubHkiIDogImZpbmFsIiwgayk7CisgICAgIHNhdmVfY29sdW1uKHN0 YXJ0X3N5bWJvbCArIDEsIGspOworIAorICAgICBqID0gMTA7CitAQCAtMzE4LDE5ICszMTgsMTkg QEAgZ290b19hY3Rpb25zKCkKKyAJaWYgKGogPj0gMTApCisgCXsKKyAJICAgICsrb3V0bGluZTsK Ky0JICAgIHB1dGNoYXIoJ1xuJyk7CisrCSAgICBwdXRjKCdcbicsIG91dHB1dF9maWxlKTsKKyAJ ICAgIGogPSAxOworIAl9CisgCWVsc2UKKyAJICAgICsrajsKKyAKKyAJayA9IGRlZmF1bHRfZ290 byhpKTsKKy0JcHJpbnRmKCIlNWQsIiwgayk7CisrCWZwcmludGYob3V0cHV0X2ZpbGUsICIlNWQs Iiwgayk7CisgCXNhdmVfY29sdW1uKGksIGspOworICAgICB9CisgCisgICAgIG91dGxpbmUgKz0g MjsKKy0gICAgcHJpbnRmKCJcbiAgfTtcbiIpOworKyAgICBmcHJpbnRmKG91dHB1dF9maWxlLCAi XG4gIH07XG4iKTsKKyAgICAgRlJFRShzdGF0ZV9jb3VudCk7CisgfQorIAorQEAgLTYzMyw3ICs2 MzMsNyBAQCBvdXRwdXRfYmFzZSgpCisgeworICAgICByZWdpc3RlciBpbnQgaSwgajsKKyAKKy0g ICAgcHJpbnRmKCIgIHByb3RlY3RlZCBzdGF0aWMgJXMgc2hvcnQgW10geXlTaW5kZXggPSB7JTEz ZCwiLCBjc2hhcnA/ICJyZWFkb25seSI6ImZpbmFsIiwgYmFzZVswXSk7CisrICAgIGZwcmludGYo b3V0cHV0X2ZpbGUsICIgIHByb3RlY3RlZCBzdGF0aWMgJXMgc2hvcnQgW10geXlTaW5kZXggPSB7 JTEzZCwiLCBjc2hhcnA/ICJyZWFkb25seSI6ImZpbmFsIiwgYmFzZVswXSk7CisgCisgICAgIGog PSAxMDsKKyAgICAgZm9yIChpID0gMTsgaSA8IG5zdGF0ZXM7IGkrKykKK0BAIC02NDEsMTcgKzY0 MSwxNyBAQCBvdXRwdXRfYmFzZSgpCisgCWlmIChqID49IDEwKQorIAl7CisgCSAgICArK291dGxp bmU7CistCSAgICBwdXRjaGFyKCdcbicpOworKwkgICAgcHV0YygnXG4nLCBvdXRwdXRfZmlsZSk7 CisgCSAgICBqID0gMTsKKyAJfQorIAllbHNlCisgCSAgICArK2o7CisgCistCXByaW50ZigiJTVk LCIsIGJhc2VbaV0pOworKwlmcHJpbnRmKG91dHB1dF9maWxlLCAiJTVkLCIsIGJhc2VbaV0pOwor ICAgICB9CisgCisgICAgIG91dGxpbmUgKz0gMjsKKy0gICAgcHJpbnRmKCJcbiAgfTtcbiAgcHJv dGVjdGVkIHN0YXRpYyAlcyBzaG9ydCBbXSB5eVJpbmRleCA9IHslMTNkLCIsCisrICAgIGZwcmlu dGYob3V0cHV0X2ZpbGUsICJcbiAgfTtcbiAgcHJvdGVjdGVkIHN0YXRpYyAlcyBzaG9ydCBbXSB5 eVJpbmRleCA9IHslMTNkLCIsCisgCSAgIGNzaGFycCA/ICJyZWFkb25seSIgOiAiZmluYWwiLAor IAkgICAgYmFzZVtuc3RhdGVzXSk7CisgCitAQCAtNjYxLDE3ICs2NjEsMTcgQEAgb3V0cHV0X2Jh c2UoKQorIAlpZiAoaiA+PSAxMCkKKyAJeworIAkgICAgKytvdXRsaW5lOworLQkgICAgcHV0Y2hh cignXG4nKTsKKysJICAgIHB1dGMoJ1xuJywgb3V0cHV0X2ZpbGUpOworIAkgICAgaiA9IDE7Cisg CX0KKyAJZWxzZQorIAkgICAgKytqOworIAorLQlwcmludGYoIiU1ZCwiLCBiYXNlW2ldKTsKKysJ ZnByaW50ZihvdXRwdXRfZmlsZSwgIiU1ZCwiLCBiYXNlW2ldKTsKKyAgICAgfQorIAorICAgICBv dXRsaW5lICs9IDI7CistICAgIHByaW50ZigiXG4gIH07XG4gIHByb3RlY3RlZCBzdGF0aWMgJXMg c2hvcnQgW10geXlHaW5kZXggPSB7JTEzZCwiLAorKyAgICBmcHJpbnRmKG91dHB1dF9maWxlLCAi XG4gIH07XG4gIHByb3RlY3RlZCBzdGF0aWMgJXMgc2hvcnQgW10geXlHaW5kZXggPSB7JTEzZCwi LAorIAkgICBjc2hhcnAgPyAicmVhZG9ubHkiIDogImZpbmFsIiwKKyAJICAgIGJhc2VbMipuc3Rh dGVzXSk7CisgCitAQCAtNjgxLDE3ICs2ODEsMTcgQEAgb3V0cHV0X2Jhc2UoKQorIAlpZiAoaiA+ PSAxMCkKKyAJeworIAkgICAgKytvdXRsaW5lOworLQkgICAgcHV0Y2hhcignXG4nKTsKKysJICAg IHB1dGMoJ1xuJywgb3V0cHV0X2ZpbGUpOworIAkgICAgaiA9IDE7CisgCX0KKyAJZWxzZQorIAkg ICAgKytqOworIAorLQlwcmludGYoIiU1ZCwiLCBiYXNlW2ldKTsKKysJZnByaW50ZihvdXRwdXRf ZmlsZSwgIiU1ZCwiLCBiYXNlW2ldKTsKKyAgICAgfQorIAorICAgICBvdXRsaW5lICs9IDI7Cist ICAgIHByaW50ZigiXG4gIH07XG4iKTsKKysgICAgZnByaW50ZihvdXRwdXRfZmlsZSwgIlxuICB9 O1xuIik7CisgICAgIEZSRUUoYmFzZSk7CisgfQorIAorQEAgLTcwMiw3ICs3MDIsNyBAQCBvdXRw dXRfdGFibGUoKQorICAgICByZWdpc3RlciBpbnQgaTsKKyAgICAgcmVnaXN0ZXIgaW50IGo7Cisg CistICAgIHByaW50ZigiICBwcm90ZWN0ZWQgc3RhdGljICVzIHNob3J0IFtdIHl5VGFibGUgPSB7 JTE0ZCwiLCBjc2hhcnAgPyAicmVhZG9ubHkiIDogImZpbmFsIiwgdGFibGVbMF0pOworKyAgICBm cHJpbnRmKG91dHB1dF9maWxlLCAiICBwcm90ZWN0ZWQgc3RhdGljICVzIHNob3J0IFtdIHl5VGFi bGUgPSB7JTE0ZCwiLCBjc2hhcnAgPyAicmVhZG9ubHkiIDogImZpbmFsIiwgdGFibGVbMF0pOwor IAorICAgICBqID0gMTA7CisgICAgIGZvciAoaSA9IDE7IGkgPD0gaGlnaDsgaSsrKQorQEAgLTcx MCwxNyArNzEwLDE3IEBAIG91dHB1dF90YWJsZSgpCisgCWlmIChqID49IDEwKQorIAl7CisgCSAg ICArK291dGxpbmU7CistCSAgICBwdXRjaGFyKCdcbicpOworKwkgICAgcHV0YygnXG4nLCBvdXRw dXRfZmlsZSk7CisgCSAgICBqID0gMTsKKyAJfQorIAllbHNlCisgCSAgICArK2o7CisgCistCXBy aW50ZigiJTVkLCIsIHRhYmxlW2ldKTsKKysJZnByaW50ZihvdXRwdXRfZmlsZSwgIiU1ZCwiLCB0 YWJsZVtpXSk7CisgICAgIH0KKyAKKyAgICAgb3V0bGluZSArPSAyOworLSAgICBwcmludGYoIlxu ICB9O1xuIik7CisrICAgIGZwcmludGYob3V0cHV0X2ZpbGUsICJcbiAgfTtcbiIpOworICAgICBG UkVFKHRhYmxlKTsKKyB9CisgCitAQCAtNzMxLDcgKzczMSw3IEBAIG91dHB1dF9jaGVjaygpCisg ICAgIHJlZ2lzdGVyIGludCBpOworICAgICByZWdpc3RlciBpbnQgajsKKyAKKy0gICAgcHJpbnRm KCIgIHByb3RlY3RlZCBzdGF0aWMgJXMgc2hvcnQgW10geXlDaGVjayA9IHslMTRkLCIsCisrICAg IGZwcmludGYob3V0cHV0X2ZpbGUsICIgIHByb3RlY3RlZCBzdGF0aWMgJXMgc2hvcnQgW10geXlD aGVjayA9IHslMTRkLCIsCisgCSAgIGNzaGFycCA/ICJyZWFkb25seSIgOiAiZmluYWwiLAorIAkg ICAgY2hlY2tbMF0pOworIAorQEAgLTc0MSwxNyArNzQxLDE3IEBAIG91dHB1dF9jaGVjaygpCisg CWlmIChqID49IDEwKQorIAl7CisgCSAgICArK291dGxpbmU7CistCSAgICBwdXRjaGFyKCdcbicp OworKwkgICAgcHV0YygnXG4nLCBvdXRwdXRfZmlsZSk7CisgCSAgICBqID0gMTsKKyAJfQorIAll bHNlCisgCSAgICArK2o7CisgCistCXByaW50ZigiJTVkLCIsIGNoZWNrW2ldKTsKKysJZnByaW50 ZihvdXRwdXRfZmlsZSwgIiU1ZCwiLCBjaGVja1tpXSk7CisgICAgIH0KKyAKKyAgICAgb3V0bGlu ZSArPSAyOworLSAgICBwcmludGYoIlxuICB9O1xuIik7CisrICAgIGZwcmludGYob3V0cHV0X2Zp bGUsICJcbiAgfTtcbiIpOworICAgICBGUkVFKGNoZWNrKTsKKyB9CisgCitAQCAtODAxLDMwICs4 MDEsMzAgQEAgY2hhciAqcHJlZml4OworIAlpZiAoaXNfQ19pZGVudGlmaWVyKHMpKQorIAl7Cisg CSAgICBpZiAocHJlZml4KQorLQkgICAgICAgIHByaW50ZigiICAlcyAiLCBwcmVmaXgpOworKwkg ICAgICAgIGZwcmludGYob3V0cHV0X2ZpbGUsICIgICVzICIsIHByZWZpeCk7CisgCSAgICBjID0g KnM7CisgCSAgICBpZiAoYyA9PSAnIicpCisgCSAgICB7CisgCQl3aGlsZSAoKGMgPSAqKytzKSAh PSAnIicpCisgCQl7CistCQkgICAgcHV0Y2hhcihjKTsKKysJCSAgICBwdXRjKGMsIG91dHB1dF9m aWxlKTsKKyAJCX0KKyAJICAgIH0KKyAJICAgIGVsc2UKKyAJICAgIHsKKyAJCWRvCisgCQl7Cist CQkgICAgcHV0Y2hhcihjKTsKKysJCSAgICBwdXRjKGMsIG91dHB1dF9maWxlKTsKKyAJCX0KKyAJ CXdoaWxlIChjID0gKisrcyk7CisgCSAgICB9CisgCSAgICArK291dGxpbmU7CistCSAgICBwcmlu dGYoIiA9ICVkJXNcbiIsIHN5bWJvbF92YWx1ZVtpXSwgY3NoYXJwID8gIjsiIDogIjsiKTsKKysJ ICAgIGZwcmludGYob3V0cHV0X2ZpbGUsICIgPSAlZCVzXG4iLCBzeW1ib2xfdmFsdWVbaV0sIGNz aGFycCA/ICI7IiA6ICI7Iik7CisgCX0KKyAgICAgfQorIAorICAgICArK291dGxpbmU7CistICAg IHByaW50ZigiICAlcyB5eUVycm9yQ29kZSA9ICVkJXNcbiIsIHByZWZpeCA/IHByZWZpeCA6ICIi LCBzeW1ib2xfdmFsdWVbMV0sIGNzaGFycCA/ICI7IiA6ICI7Iik7CisrICAgIGZwcmludGYob3V0 cHV0X2ZpbGUsICIgICVzIHl5RXJyb3JDb2RlID0gJWQlc1xuIiwgcHJlZml4ID8gcHJlZml4IDog IiIsIHN5bWJvbF92YWx1ZVsxXSwgY3NoYXJwID8gIjsiIDogIjsiKTsKKyB9CisgCisgCitAQCAt ODQyLDE0ICs4NDIsMTQgQEAgY2hhciAqbmFtZTsKKyAgICAgaWYgKChjID0gZ2V0YyhpbikpICE9 IEVPRikgeworICAgICAgIGlmIChjID09ICAnXG4nKQorIAkrK291dGxpbmU7CistICAgICAgcHV0 Y2hhcihjKTsKKysgICAgICBwdXRjKGMsIG91dHB1dF9maWxlKTsKKyAgICAgICB3aGlsZSAoKGMg PSBnZXRjKGluKSkgIT0gRU9GKQorICAgICAgIHsKKyAJaWYgKGMgPT0gJ1xuJykKKyAJICAgICsr b3V0bGluZTsKKy0gICAgCXB1dGNoYXIoYyk7CisrICAgIAlwdXRjKGMsIG91dHB1dF9maWxlKTsK KyAgICAgICB9CistICAgICAgcHJpbnRmKGRlZmF1bHRfbGluZV9mb3JtYXQsICsrb3V0bGluZSAr IDEpOworKyAgICAgIGZwcmludGYob3V0cHV0X2ZpbGUsIGRlZmF1bHRfbGluZV9mb3JtYXQsICsr b3V0bGluZSArIDEpOworICAgICB9CisgICAgIGZjbG9zZShpbik7CisgfQorQEAgLTg2Miw2NyAr ODYyLDY3IEBAIG91dHB1dF9kZWJ1ZygpCisgICAgIGNoYXIgKiBwcmVmaXggPSB0ZmxhZyA/ICIi IDogIi8vdCI7CisgCisgICAgICsrb3V0bGluZTsKKy0gICAgcHJpbnRmKCIgIHByb3RlY3RlZCAl cyBpbnQgeXlGaW5hbCA9ICVkO1xuIiwgY3NoYXJwID8gImNvbnN0IiA6ICJzdGF0aWMgZmluYWwi LCBmaW5hbF9zdGF0ZSk7CisrICAgIGZwcmludGYob3V0cHV0X2ZpbGUsICIgIHByb3RlY3RlZCAl cyBpbnQgeXlGaW5hbCA9ICVkO1xuIiwgY3NoYXJwID8gImNvbnN0IiA6ICJzdGF0aWMgZmluYWwi LCBmaW5hbF9zdGF0ZSk7CisgCisgICAgICAgKytvdXRsaW5lOworLQkgIHByaW50ZiAoIiVzIC8v IFB1dCB0aGlzIGFycmF5IGludG8gYSBzZXBhcmF0ZSBjbGFzcyBzbyBpdCBpcyBvbmx5IGluaXRp YWxpemVkIGlmIGRlYnVnZ2luZyBpcyBhY3R1YWxseSB1c2VkXG4iLCBwcmVmaXgpOworLQkgIHBy aW50ZiAoIiVzIC8vIFVzZSBNYXJzaGFsQnlSZWZPYmplY3QgdG8gZGlzYWJsZSBpbmxpbmluZ1xu IiwgcHJlZml4KTsKKy0JICBwcmludGYoIiVzIGNsYXNzIFlZUnVsZXMgJXMge1xuIiwgcHJlZml4 LCBjc2hhcnAgPyAiOiBNYXJzaGFsQnlSZWZPYmplY3QiIDogIiIpOworLSAgICAgIHByaW50Zigi JXMgIHB1YmxpYyBzdGF0aWMgJXMgc3RyaW5nIFtdIHl5UnVsZSA9IHtcbiIsIHByZWZpeCwgY3No YXJwID8gInJlYWRvbmx5IiA6ICJmaW5hbCIpOworKwkgIGZwcmludGYob3V0cHV0X2ZpbGUsICIl cyAvLyBQdXQgdGhpcyBhcnJheSBpbnRvIGEgc2VwYXJhdGUgY2xhc3Mgc28gaXQgaXMgb25seSBp bml0aWFsaXplZCBpZiBkZWJ1Z2dpbmcgaXMgYWN0dWFsbHkgdXNlZFxuIiwgcHJlZml4KTsKKysJ ICBmcHJpbnRmKG91dHB1dF9maWxlLCAiJXMgLy8gVXNlIE1hcnNoYWxCeVJlZk9iamVjdCB0byBk aXNhYmxlIGlubGluaW5nXG4iLCBwcmVmaXgpOworKwkgIGZwcmludGYob3V0cHV0X2ZpbGUsICIl cyBjbGFzcyBZWVJ1bGVzICVzIHtcbiIsIHByZWZpeCwgY3NoYXJwID8gIjogTWFyc2hhbEJ5UmVm T2JqZWN0IiA6ICIiKTsKKysgICAgICBmcHJpbnRmKG91dHB1dF9maWxlLCAiJXMgIHB1YmxpYyBz dGF0aWMgJXMgc3RyaW5nIFtdIHl5UnVsZSA9IHtcbiIsIHByZWZpeCwgY3NoYXJwID8gInJlYWRv bmx5IiA6ICJmaW5hbCIpOworICAgICAgIGZvciAoaSA9IDI7IGkgPCBucnVsZXM7ICsraSkKKyAg ICAgICB7CistCSAgcHJpbnRmKCIlcyAgICBcIiVzIDoiLCBwcmVmaXgsIHN5bWJvbF9uYW1lW3Js aHNbaV1dKTsKKysJICBmcHJpbnRmKG91dHB1dF9maWxlLCAiJXMgICAgXCIlcyA6IiwgcHJlZml4 LCBzeW1ib2xfbmFtZVtybGhzW2ldXSk7CisgCSAgZm9yIChqID0gcnJoc1tpXTsgcml0ZW1bal0g PiAwOyArK2opCisgCSAgeworIAkgICAgICBzID0gc3ltYm9sX25hbWVbcml0ZW1bal1dOworIAkg ICAgICBpZiAoc1swXSA9PSAnIicpCisgCSAgICAgIHsKKy0JCSAgcHJpbnRmKCIgXFxcIiIpOwor KwkJICBmcHJpbnRmKG91dHB1dF9maWxlLCAiIFxcXCIiKTsKKyAJCSAgd2hpbGUgKCorK3MgIT0g JyInKQorIAkJICB7CisgCQkgICAgICBpZiAoKnMgPT0gJ1xcJykKKyAJCSAgICAgIHsKKyAJCQkg IGlmIChzWzFdID09ICdcXCcpCistCQkJICAgICAgcHJpbnRmKCJcXFxcXFxcXCIpOworKwkJCSAg ICAgIGZwcmludGYob3V0cHV0X2ZpbGUsICJcXFxcXFxcXCIpOworIAkJCSAgZWxzZQorLQkJCSAg ICAgIHByaW50ZigiXFxcXCVjIiwgc1sxXSk7CisrCQkJICAgICAgZnByaW50ZihvdXRwdXRfZmls ZSwgIlxcXFwlYyIsIHNbMV0pOworIAkJCSAgKytzOworIAkJICAgICAgfQorIAkJICAgICAgZWxz ZQorLQkJCSAgcHV0Y2hhcigqcyk7CisrCQkJICBwdXRjKCpzLCBvdXRwdXRfZmlsZSk7CisgCQkg IH0KKy0JCSAgcHJpbnRmKCJcXFwiIik7CisrCQkgIGZwcmludGYob3V0cHV0X2ZpbGUsICJcXFwi Iik7CisgCSAgICAgIH0KKyAJICAgICAgZWxzZSBpZiAoc1swXSA9PSAnXCcnKQorIAkgICAgICB7 CisgCQkgIGlmIChzWzFdID09ICciJykKKy0JCSAgICAgIHByaW50ZigiICdcXFwiJyIpOworKwkJ ICAgICAgZnByaW50ZihvdXRwdXRfZmlsZSwgIiAnXFxcIiciKTsKKyAJCSAgZWxzZSBpZiAoc1sx XSA9PSAnXFwnKQorIAkJICB7CisgCQkgICAgICBpZiAoc1syXSA9PSAnXFwnKQorLQkJCSAgcHJp bnRmKCIgJ1xcXFxcXFxcIik7CisrCQkJICBmcHJpbnRmKG91dHB1dF9maWxlLCAiICdcXFxcXFxc XCIpOworIAkJICAgICAgZWxzZQorLQkJCSAgcHJpbnRmKCIgJ1xcXFwlYyIsIHNbMl0pOworKwkJ CSAgZnByaW50ZihvdXRwdXRfZmlsZSwgIiAnXFxcXCVjIiwgc1syXSk7CisgCQkgICAgICBzICs9 IDI7CisgCQkgICAgICB3aGlsZSAoKisrcyAhPSAnXCcnKQorLQkJCSAgcHV0Y2hhcigqcyk7Cist CQkgICAgICBwdXRjaGFyKCdcJycpOworKwkJCSAgcHV0Yygqcywgb3V0cHV0X2ZpbGUpOworKwkJ ICAgICAgcHV0YygnXCcnLCBvdXRwdXRfZmlsZSk7CisgCQkgIH0KKyAJCSAgZWxzZQorLQkJICAg ICAgcHJpbnRmKCIgJyVjJyIsIHNbMV0pOworKwkJICAgICAgZnByaW50ZihvdXRwdXRfZmlsZSwg IiAnJWMnIiwgc1sxXSk7CisgCSAgICAgIH0KKyAJICAgICAgZWxzZQorLQkJICBwcmludGYoIiAl cyIsIHMpOworKwkJICBmcHJpbnRmKG91dHB1dF9maWxlLCAiICVzIiwgcyk7CisgCSAgfQorIAkg ICsrb3V0bGluZTsKKy0JICBwcmludGYoIlwiLFxuIik7CisrCSAgZnByaW50ZihvdXRwdXRfZmls ZSwgIlwiLFxuIik7CisgICAgICAgfQorICAgICAgICsrIG91dGxpbmU7CistICAgICAgcHJpbnRm KCIlcyAgfTtcbiIsIHByZWZpeCk7CistCSAgcHJpbnRmICgiJXMgcHVibGljIHN0YXRpYyBzdHJp bmcgZ2V0UnVsZSAoaW50IGluZGV4KSB7XG4iLCBwcmVmaXgpOworLQkgIHByaW50ZiAoIiVzICAg IHJldHVybiB5eVJ1bGUgW2luZGV4XTtcbiIsIHByZWZpeCk7CistCSAgcHJpbnRmICgiJXMgfVxu IiwgcHJlZml4KTsKKy0JICBwcmludGYgKCIlc31cbiIsIHByZWZpeCk7CisrICAgICAgZnByaW50 ZihvdXRwdXRfZmlsZSwgIiVzICB9O1xuIiwgcHJlZml4KTsKKysJICBmcHJpbnRmKG91dHB1dF9m aWxlLCAiJXMgcHVibGljIHN0YXRpYyBzdHJpbmcgZ2V0UnVsZSAoaW50IGluZGV4KSB7XG4iLCBw cmVmaXgpOworKwkgIGZwcmludGYob3V0cHV0X2ZpbGUsICIlcyAgICByZXR1cm4geXlSdWxlIFtp bmRleF07XG4iLCBwcmVmaXgpOworKwkgIGZwcmludGYob3V0cHV0X2ZpbGUsICIlcyB9XG4iLCBw cmVmaXgpOworKwkgIGZwcmludGYob3V0cHV0X2ZpbGUsICIlc31cbiIsIHByZWZpeCk7CisgCisg ICAgIG1heCA9IDA7CisgICAgIGZvciAoaSA9IDI7IGkgPCBudG9rZW5zOyArK2kpCitAQCAtOTMx LDcgKzkzMSw3IEBAIG91dHB1dF9kZWJ1ZygpCisgCisgCS8qIG5lZWQgeXlOYW1lcyBmb3IgeXlF eHBlY3RpbmcoKSAqLworIAorLSAgICAgIHByaW50ZigiICBwcm90ZWN0ZWQgc3RhdGljICVzIHN0 cmluZyBbXSB5eU5hbWVzID0geyIsIGNzaGFycCA/ICJyZWFkb25seSIgOiAiZmluYWwiKTsKKysg ICAgICBmcHJpbnRmKG91dHB1dF9maWxlLCAiICBwcm90ZWN0ZWQgc3RhdGljICVzIHN0cmluZyBb XSB5eU5hbWVzID0geyIsIGNzaGFycCA/ICJyZWFkb25seSIgOiAiZmluYWwiKTsKKyAgICAgICBz eW1uYW0gPSAoY2hhciAqKikgTUFMTE9DKChtYXgrMSkqc2l6ZW9mKGNoYXIgKikpOworICAgICAg IGlmIChzeW1uYW0gPT0gMCkgbm9fc3BhY2UoKTsKKyAgIAorQEAgLTk0Myw3ICs5NDMsNyBAQCBv dXRwdXRfZGVidWcoKQorIAkgIHN5bW5hbVtzeW1ib2xfdmFsdWVbaV1dID0gc3ltYm9sX25hbWVb aV07CisgICAgICAgc3ltbmFtWzBdID0gImVuZC1vZi1maWxlIjsKKyAgIAorLSAgICAgIGogPSA3 MDsgZnB1dHMoIiAgICAiLCBzdGRvdXQpOworKyAgICAgIGogPSA3MDsgZnB1dHMoIiAgICAiLCBv dXRwdXRfZmlsZSk7CisgICAgICAgZm9yIChpID0gMDsgaSA8PSBtYXg7ICsraSkKKyAgICAgICB7 CisgCSAgaWYgKHMgPSBzeW1uYW1baV0pCitAQCAtOTY1LDI1ICs5NjUsMjUgQEAgb3V0cHV0X2Rl YnVnKCkKKyAJCSAgaWYgKGogPiA3MCkKKyAJCSAgeworIAkJICAgICAgKytvdXRsaW5lOworLQkJ ICAgICAgcHJpbnRmKCJcbiAgICAiKTsKKysJCSAgICAgIGZwcmludGYob3V0cHV0X2ZpbGUsICJc biAgICAiKTsKKyAJCSAgICAgIGogPSBrOworIAkJICB9CistCQkgIHByaW50ZigiXCJcXFwiIik7 CisrCQkgIGZwcmludGYob3V0cHV0X2ZpbGUsICJcIlxcXCIiKTsKKyAJCSAgcyA9IHN5bW5hbVtp XTsKKyAJCSAgd2hpbGUgKCorK3MgIT0gJyInKQorIAkJICB7CisgCQkgICAgICBpZiAoKnMgPT0g J1xcJykKKyAJCSAgICAgIHsKKy0JCQkgIHByaW50ZigiXFxcXCIpOworKwkJCSAgZnByaW50Zihv dXRwdXRfZmlsZSwgIlxcXFwiKTsKKyAJCQkgIGlmICgqKytzID09ICdcXCcpCistCQkJICAgICAg cHJpbnRmKCJcXFxcIik7CisrCQkJICAgICAgZnByaW50ZihvdXRwdXRfZmlsZSwgIlxcXFwiKTsK KyAJCQkgIGVsc2UKKy0JCQkgICAgICBwdXRjaGFyKCpzKTsKKysJCQkgICAgICBwdXRjKCpzLCBv dXRwdXRfZmlsZSk7CisgCQkgICAgICB9CisgCQkgICAgICBlbHNlCistCQkJICBwdXRjaGFyKCpz KTsKKysJCQkgIHB1dGMoKnMsIG91dHB1dF9maWxlKTsKKyAJCSAgfQorLQkJICBwcmludGYoIlxc XCJcIiwiKTsKKysJCSAgZnByaW50ZihvdXRwdXRfZmlsZSwgIlxcXCJcIiwiKTsKKyAJICAgICAg fQorIAkgICAgICBlbHNlIGlmIChzWzBdID09ICdcJycpCisgCSAgICAgIHsKK0BAIC05OTMsMTAg Kzk5MywxMCBAQCBvdXRwdXRfZGVidWcoKQorIAkJICAgICAgaWYgKGogPiA3MCkKKyAJCSAgICAg IHsKKyAJCQkgICsrb3V0bGluZTsKKy0JCSAgICAgIAkgIHByaW50ZigiXG4gICAgIik7CisrCQkg ICAgICAJICBmcHJpbnRmKG91dHB1dF9maWxlLCAiXG4gICAgIik7CisgCQkJICBqID0gNzsKKyAJ CSAgICAgIH0KKy0JCSAgICAgIHByaW50ZigiXCInXFxcIidcIiwiKTsKKysJCSAgICAgIGZwcmlu dGYob3V0cHV0X2ZpbGUsICJcIidcXFwiJ1wiLCIpOworIAkJICB9CisgCQkgIGVsc2UKKyAJCSAg eworQEAgLTEwMTUsMjUgKzEwMTUsMjUgQEAgb3V0cHV0X2RlYnVnKCkKKyAJCSAgICAgIGlmIChq ID4gNzApCisgCQkgICAgICB7CisgCQkJICArK291dGxpbmU7CistCQkgICAgICAJICBwcmludGYo IlxuICAgICIpOworKwkJICAgICAgCSAgZnByaW50ZihvdXRwdXRfZmlsZSwgIlxuICAgICIpOwor IAkJCSAgaiA9IGs7CisgCQkgICAgICB9CistCQkgICAgICBwcmludGYoIlwiJyIpOworKwkJICAg ICAgZnByaW50ZihvdXRwdXRfZmlsZSwgIlwiJyIpOworIAkJICAgICAgcyA9IHN5bW5hbVtpXTsK KyAJCSAgICAgIHdoaWxlICgqKytzICE9ICdcJycpCisgCQkgICAgICB7CisgCQkJICBpZiAoKnMg PT0gJ1xcJykKKyAJCQkgIHsKKy0JCQkgICAgICBwcmludGYoIlxcXFwiKTsKKysJCQkgICAgICBm cHJpbnRmKG91dHB1dF9maWxlLCAiXFxcXCIpOworIAkJCSAgICAgIGlmICgqKytzID09ICdcXCcp CistCQkJCSAgcHJpbnRmKCJcXFxcIik7CisrCQkJCSAgZnByaW50ZihvdXRwdXRfZmlsZSwgIlxc XFwiKTsKKyAJCQkgICAgICBlbHNlCistCQkJCSAgcHV0Y2hhcigqcyk7CisrCQkJCSAgcHV0Yygq cywgb3V0cHV0X2ZpbGUpOworIAkJCSAgfQorIAkJCSAgZWxzZQorLQkJCSAgICAgIHB1dGNoYXIo KnMpOworKwkJCSAgICAgIHB1dGMoKnMsIG91dHB1dF9maWxlKTsKKyAJCSAgICAgIH0KKy0JCSAg ICAgIHByaW50ZigiJ1wiLCIpOworKwkJICAgICAgZnByaW50ZihvdXRwdXRfZmlsZSwgIidcIiwi KTsKKyAJCSAgfQorIAkgICAgICB9CisgCSAgICAgIGVsc2UKK0BAIC0xMDQzLDEyICsxMDQzLDEy IEBAIG91dHB1dF9kZWJ1ZygpCisgCQkgIGlmIChqID4gNzApCisgCQkgIHsKKyAJCSAgICAgICsr b3V0bGluZTsKKy0JCSAgICAgIHByaW50ZigiXG4gICAgIik7CisrCQkgICAgICBmcHJpbnRmKG91 dHB1dF9maWxlLCAiXG4gICAgIik7CisgCQkgICAgICBqID0gazsKKyAJCSAgfQorLQkJICBwdXRj aGFyKCciJyk7CistCQkgIGRvIHsgcHV0Y2hhcigqcyk7IH0gd2hpbGUgKCorK3MpOworLQkJICBw cmludGYoIlwiLCIpOworKwkJICBwdXRjKCciJywgb3V0cHV0X2ZpbGUpOworKwkJICBkbyB7IHB1 dGMoKnMsIG91dHB1dF9maWxlKTsgfSB3aGlsZSAoKisrcyk7CisrCQkgIGZwcmludGYob3V0cHV0 X2ZpbGUsICJcIiwiKTsKKyAJICAgICAgfQorIAkgIH0KKyAJICBlbHNlCitAQCAtMTA1NywxNCAr MTA1NywxNCBAQCBvdXRwdXRfZGVidWcoKQorIAkgICAgICBpZiAoaiA+IDcwKQorIAkgICAgICB7 CisgCQkgICsrb3V0bGluZTsKKy0JCSAgcHJpbnRmKCJcbiAgICAiKTsKKysJCSAgZnByaW50Zihv dXRwdXRfZmlsZSwgIlxuICAgICIpOworIAkJICBqID0gNTsKKyAJICAgICAgfQorLQkgICAgICBw cmludGYoIm51bGwsIik7CisrCSAgICAgIGZwcmludGYob3V0cHV0X2ZpbGUsICJudWxsLCIpOwor IAkgIH0KKyAgICAgICB9CisgICAgICAgb3V0bGluZSArPSAyOworLSAgICAgIHByaW50ZigiXG4g IH07XG4iKTsKKysgICAgICBmcHJpbnRmKG91dHB1dF9maWxlLCAiXG4gIH07XG4iKTsKKyAgICAg ICBGUkVFKHN5bW5hbSk7CisgfQorIAorQEAgLTEwODQsMTkgKzEwODQsMTkgQEAgb3V0cHV0X3Ry YWlsaW5nX3RleHQoKQorIAlpZiAoKGMgPSBnZXRjKGluKSkgPT0gRU9GKQorIAkgICAgcmV0dXJu OworICAgICAgICAgKytvdXRsaW5lOworLQlwcmludGYobGluZV9mb3JtYXQsIGxpbmVubywgaW5w dXRfZmlsZV9uYW1lKTsKKysJZnByaW50ZihvdXRwdXRfZmlsZSwgbGluZV9mb3JtYXQsIGxpbmVu bywgaW5wdXRfZmlsZV9uYW1lKTsKKyAJaWYgKGMgPT0gJ1xuJykKKyAJICAgICsrb3V0bGluZTsK Ky0JcHV0Y2hhcihjKTsKKysJcHV0YyhjLCBvdXRwdXRfZmlsZSk7CisgCWxhc3QgPSBjOworICAg ICB9CisgICAgIGVsc2UKKyAgICAgeworIAkrK291dGxpbmU7CistCXByaW50ZihsaW5lX2Zvcm1h dCwgbGluZW5vLCBpbnB1dF9maWxlX25hbWUpOworLQlkbyB7IHB1dGNoYXIoYyk7IH0gd2hpbGUg KChjID0gKisrY3B0cikgIT0gJ1xuJyk7CisrCWZwcmludGYob3V0cHV0X2ZpbGUsIGxpbmVfZm9y bWF0LCBsaW5lbm8sIGlucHV0X2ZpbGVfbmFtZSk7CisrCWRvIHsgcHV0YyhjLCBvdXRwdXRfZmls ZSk7IH0gd2hpbGUgKChjID0gKisrY3B0cikgIT0gJ1xuJyk7CisgCSsrb3V0bGluZTsKKy0JcHV0 Y2hhcignXG4nKTsKKysJcHV0YygnXG4nLCBvdXRwdXRfZmlsZSk7CisgCWxhc3QgPSAnXG4nOwor ICAgICB9CisgCitAQCAtMTEwNCwxNiArMTEwNCwxNiBAQCBvdXRwdXRfdHJhaWxpbmdfdGV4dCgp CisgICAgIHsKKyAJaWYgKGMgPT0gJ1xuJykKKyAJICAgICsrb3V0bGluZTsKKy0JcHV0Y2hhcihj KTsKKysJcHV0YyhjLCBvdXRwdXRfZmlsZSk7CisgCWxhc3QgPSBjOworICAgICB9CisgCisgICAg IGlmIChsYXN0ICE9ICdcbicpCisgICAgIHsKKyAJKytvdXRsaW5lOworLQlwdXRjaGFyKCdcbicp OworKwlwdXRjKCdcbicsIG91dHB1dF9maWxlKTsKKyAgICAgfQorLSAgICBwcmludGYoZGVmYXVs dF9saW5lX2Zvcm1hdCwgKytvdXRsaW5lICsgMSk7CisrICAgIGZwcmludGYob3V0cHV0X2ZpbGUs IGRlZmF1bHRfbGluZV9mb3JtYXQsICsrb3V0bGluZSArIDEpOworIH0KKyAKKyAKK0BAIC0xMTMy LDIyICsxMTMyLDIyIEBAIG91dHB1dF9zZW1hbnRpY19hY3Rpb25zKCkKKyAgICAgbGFzdCA9IGM7 CisgICAgIGlmIChjID09ICdcbicpCisgCSsrb3V0bGluZTsKKy0gICAgcHV0Y2hhcihjKTsKKysg ICAgcHV0YyhjLCBvdXRwdXRfZmlsZSk7CisgICAgIHdoaWxlICgoYyA9IGdldGMoYWN0aW9uX2Zp bGUpKSAhPSBFT0YpCisgICAgIHsKKyAJaWYgKGMgPT0gJ1xuJykKKyAJICAgICsrb3V0bGluZTsK Ky0JcHV0Y2hhcihjKTsKKysJcHV0YyhjLCBvdXRwdXRfZmlsZSk7CisgCWxhc3QgPSBjOworICAg ICB9CisgCisgICAgIGlmIChsYXN0ICE9ICdcbicpCisgICAgIHsKKyAJKytvdXRsaW5lOworLQlw dXRjaGFyKCdcbicpOworKwlwdXRjKCdcbicsIG91dHB1dF9maWxlKTsKKyAgICAgfQorIAorLSAg ICBwcmludGYoZGVmYXVsdF9saW5lX2Zvcm1hdCwgKytvdXRsaW5lICsgMSk7CisrICAgIGZwcmlu dGYob3V0cHV0X2ZpbGUsIGRlZmF1bHRfbGluZV9mb3JtYXQsICsrb3V0bGluZSArIDEpOworIH0K KyAKKyAKK2RpZmYgLS1naXQgYS9tY3MvbWNzL01ha2VmaWxlIGIvbWNzL21jcy9NYWtlZmlsZQor aW5kZXggZGJkNzFhM2Q1ODEuLmRiZjA0MGFmZGQ2IDEwMDY0NAorLS0tIGEvbWNzL21jcy9NYWtl ZmlsZQorKysrIGIvbWNzL21jcy9NYWtlZmlsZQorQEAgLTMyLDcgKzMyLDcgQEAgQlVJTFRfU09V UkNFUyA9IGNzLXBhcnNlci5jcworIENMRUFOX0ZJTEVTICs9IHkub3V0cHV0CisgCisgJS1wYXJz ZXIuY3M6ICUtcGFyc2VyLmpheSAkKHRvcGRpcikvamF5L3NrZWxldG9uLmNzCistCSQodG9wZGly KS9qYXkvamF5ICQoSkFZX0ZMQUdTKSA8ICQodG9wZGlyKS9qYXkvc2tlbGV0b24uY3MgJDwgPiBq YXktdG1wLm91dCAmJiBtdiBqYXktdG1wLm91dCAkQAorKwkkKHRvcGRpcikvamF5L2pheSAkKEpB WV9GTEFHUykgLW8gamF5LXRtcC5vdXQgJDwgPCAkKHRvcGRpcikvamF5L3NrZWxldG9uLmNzICYm IG12IGpheS10bXAub3V0ICRACisgCisgS0VFUF9PVVRQVVRfRklMRV9DT1BZID0geWVzCisgCitk aWZmIC0tZ2l0IGEvbWNzL21jcy9hcmd1bWVudC5jcyBiL21jcy9tY3MvYXJndW1lbnQuY3MKK2lu ZGV4IDViMTAwM2RiYWRmLi40Yzc1ZTQxYTllNSAxMDA2NDQKKy0tLSBhL21jcy9tY3MvYXJndW1l bnQuY3MKKysrKyBiL21jcy9tY3MvYXJndW1lbnQuY3MKK0BAIC0zOCw2ICszOCw4IEBAIG5hbWVz cGFjZSBNb25vLkNTaGFycAorIAkJCS8vIENvbmRpdGlvbmFsIGluc3RhbmNlIGV4cHJlc3Npb24g aW5zZXJ0ZWQgYXMgdGhlIGZpcnN0IGFyZ3VtZW50CisgCQkJRXh0ZW5zaW9uVHlwZUNvbmRpdGlv bmFsQWNjZXNzID0gNSB8IENvbmRpdGlvbmFsQWNjZXNzRmxhZywKKyAKKysJCQlSZWFkb25seSA9 IDYsCisrCisgCQkJQ29uZGl0aW9uYWxBY2Nlc3NGbGFnID0gMSA8PCA3CisgCQl9CisgCitkaWZm IC0tZ2l0IGEvbWNzL21jcy9hc3NlbWJseS5jcyBiL21jcy9tY3MvYXNzZW1ibHkuY3MKK2luZGV4 IGFhNGM1NDMxN2EyLi45NmU0M2U3MGQ5OSAxMDA2NDQKKy0tLSBhL21jcy9tY3MvYXNzZW1ibHku Y3MKKysrKyBiL21jcy9tY3MvYXNzZW1ibHkuY3MKK0BAIC01NTQsNyArNTU0LDggQEAgbmFtZXNw YWNlIE1vbm8uQ1NoYXJwCisgCQkJCQkJaWYgKHByb3AgIT0gbnVsbCkgeworIAkJCQkJCQlBdHRy aWJ1dGVFbmNvZGVyIGVuY29kZXIgPSBuZXcgQXR0cmlidXRlRW5jb2RlciAoKTsKKyAJCQkJCQkJ ZW5jb2Rlci5FbmNvZGVOYW1lZFByb3BlcnR5QXJndW1lbnQgKHByb3AsIG5ldyBCb29sTGl0ZXJh bCAoQ29tcGlsZXIuQnVpbHRpblR5cGVzLCB0cnVlLCBMb2NhdGlvbi5OdWxsKSk7CistCQkJCQkJ CVNldEN1c3RvbUF0dHJpYnV0ZSAocGEuQ29uc3RydWN0b3IsIGVuY29kZXIuVG9BcnJheSAoKSk7 CisrCQkJCQkJCVNldEN1c3RvbUF0dHJpYnV0ZSAocGEuQ29uc3RydWN0b3IsIGVuY29kZXIuVG9B cnJheSAob3V0IHZhciByZWZlcmVuY2VzKSk7CisrCQkJCQkJCW1vZHVsZS5BZGRBc3NlbWJseVJl ZmVyZW5jZXMgKHJlZmVyZW5jZXMpOworIAkJCQkJCX0KKyAJCQkJCX0KKyAJCQkJfQorZGlmZiAt LWdpdCBhL21jcy9tY3MvYXR0cmlidXRlLmNzIGIvbWNzL21jcy9hdHRyaWJ1dGUuY3MKK2luZGV4 IDgzZDQwMzExOGFkLi5mYWYyY2ZhYTFkOCAxMDA2NDQKKy0tLSBhL21jcy9tY3MvYXR0cmlidXRl LmNzCisrKysgYi9tY3MvbWNzL2F0dHJpYnV0ZS5jcworQEAgLTEwNjQsOCArMTA2NCwxMCBAQCBu YW1lc3BhY2UgTW9uby5DU2hhcnAgeworIAkJCX0KKyAKKyAJCQlieXRlW10gY2RhdGE7CisrCQkJ TGlzdDxBc3NlbWJseT4gcmVmZXJlbmNlczsKKyAJCQlpZiAocG9zX2FyZ3MgPT0gbnVsbCAmJiBu YW1lZF92YWx1ZXMgPT0gbnVsbCkgeworIAkJCQljZGF0YSA9IEF0dHJpYnV0ZUVuY29kZXIuRW1w dHk7CisrCQkJCXJlZmVyZW5jZXMgPSBudWxsOworIAkJCX0gZWxzZSB7CisgCQkJCUF0dHJpYnV0 ZUVuY29kZXIgZW5jb2RlciA9IG5ldyBBdHRyaWJ1dGVFbmNvZGVyICgpOworIAorQEAgLTExMzgs NyArMTE0MCw3IEBAIG5hbWVzcGFjZSBNb25vLkNTaGFycCB7CisgCQkJCQllbmNvZGVyLkVuY29k ZUVtcHR5TmFtZWRBcmd1bWVudHMgKCk7CisgCQkJCX0KKyAKKy0JCQkJY2RhdGEgPSBlbmNvZGVy LlRvQXJyYXkgKCk7CisrCQkJCWNkYXRhID0gZW5jb2Rlci5Ub0FycmF5IChvdXQgcmVmZXJlbmNl cyk7CisgCQkJfQorIAorIAkJCWlmICghSXNDb25kaXRpb25hbGx5RXhjbHVkZWQgKGN0b3IuRGVj bGFyaW5nVHlwZSkpIHsKK0BAIC0xMTU3LDYgKzExNTksOCBAQCBuYW1lc3BhY2UgTW9uby5DU2hh cnAgeworIAkJCQkJRXJyb3JfQXR0cmlidXRlRW1pdEVycm9yIChlLk1lc3NhZ2UpOworIAkJCQkJ cmV0dXJuOworIAkJCQl9CisrCisrCQkJCWNvbnRleHQuTW9kdWxlLkFkZEFzc2VtYmx5UmVmZXJl bmNlcyAocmVmZXJlbmNlcyk7CisgCQkJfQorIAorIAkJCWlmICghdXNhZ2VfYXR0ci5BbGxvd011 bHRpcGxlICYmIGFsbEVtaXR0ZWQgIT0gbnVsbCkgeworQEAgLTE0MTUsNiArMTQxOSw3IEBAIG5h bWVzcGFjZSBNb25vLkNTaGFycCB7CisgCQlieXRlW10gYnVmZmVyOworIAkJaW50IHBvczsKKyAJ CWNvbnN0IHVzaG9ydCBWZXJzaW9uID0gMTsKKysJCUxpc3Q8QXNzZW1ibHk+IGltcG9ydHM7Cisg CisgCQlzdGF0aWMgQXR0cmlidXRlRW5jb2RlciAoKQorIAkJeworQEAgLTE1OTQsNyArMTU5OSwx NSBAQCBuYW1lc3BhY2UgTW9uby5DU2hhcnAgeworIAkJcHVibGljIHZvaWQgRW5jb2RlVHlwZU5h bWUgKFR5cGVTcGVjIHR5cGUpCisgCQl7CisgCQkJdmFyIG9sZF90eXBlID0gdHlwZS5HZXRNZXRh SW5mbyAoKTsKKy0JCQlFbmNvZGUgKHR5cGUuTWVtYmVyRGVmaW5pdGlvbi5Jc0ltcG9ydGVkID8g b2xkX3R5cGUuQXNzZW1ibHlRdWFsaWZpZWROYW1lIDogb2xkX3R5cGUuRnVsbE5hbWUpOworKwkJ CWlmICh0eXBlLk1lbWJlckRlZmluaXRpb24uSXNJbXBvcnRlZCkgeworKwkJCQlpZiAoaW1wb3J0 cyA9PSBudWxsKQorKwkJCQkJaW1wb3J0cyA9IG5ldyBMaXN0PEFzc2VtYmx5PiAoKTsKKysKKysJ CQkJaW1wb3J0cy5BZGQgKG9sZF90eXBlLkFzc2VtYmx5KTsKKysJCQkJRW5jb2RlIChvbGRfdHlw ZS5Bc3NlbWJseVF1YWxpZmllZE5hbWUpOworKwkJCX0gZWxzZSB7CisrCQkJCUVuY29kZSAob2xk X3R5cGUuRnVsbE5hbWUpOworKwkJCX0KKyAJCX0KKyAKKyAJCXB1YmxpYyB2b2lkIEVuY29kZVR5 cGVOYW1lIChUeXBlQ29udGFpbmVyIHR5cGUpCitAQCAtMTY3NSw4ICsxNjg4LDEwIEBAIG5hbWVz cGFjZSBNb25vLkNTaGFycCB7CisgCQkJRW5jb2RlICh2YWx1ZSk7CisgCQl9CisgCistCQlwdWJs aWMgYnl0ZVtdIFRvQXJyYXkgKCkKKysJCXB1YmxpYyBieXRlW10gVG9BcnJheSAob3V0IExpc3Q8 QXNzZW1ibHk+IGFzc2VtYmx5UmVmZXJlbmNlcykKKyAJCXsKKysJCQlhc3NlbWJseVJlZmVyZW5j ZXMgPSBpbXBvcnRzOworKworIAkJCWJ5dGVbXSBidWYgPSBuZXcgYnl0ZVtwb3NdOworIAkJCUFy cmF5LkNvcHkgKGJ1ZmZlciwgYnVmLCBwb3MpOworIAkJCXJldHVybiBidWY7CitAQCAtMTk5MCw3 ICsyMDA1LDggQEAgbmFtZXNwYWNlIE1vbm8uQ1NoYXJwIHsKKyAJCQllbmNvZGVyLkVuY29kZSAo KGludCkgc3RhdGUpOworIAkJCWVuY29kZXIuRW5jb2RlRW1wdHlOYW1lZEFyZ3VtZW50cyAoKTsK KyAKKy0JCQlidWlsZGVyLlNldEN1c3RvbUF0dHJpYnV0ZSAoKENvbnN0cnVjdG9ySW5mbykgY3Rv ci5HZXRNZXRhSW5mbyAoKSwgZW5jb2Rlci5Ub0FycmF5ICgpKTsKKysJCQlidWlsZGVyLlNldEN1 c3RvbUF0dHJpYnV0ZSAoKENvbnN0cnVjdG9ySW5mbykgY3Rvci5HZXRNZXRhSW5mbyAoKSwgZW5j b2Rlci5Ub0FycmF5IChvdXQgdmFyIHJlZmVyZW5jZXMpKTsKKysJCQltb2R1bGUuQWRkQXNzZW1i bHlSZWZlcmVuY2VzIChyZWZlcmVuY2VzKTsKKyAJCX0KKyAJfQorIAorQEAgLTIwMjQsNyArMjA0 MCw4IEBAIG5hbWVzcGFjZSBNb25vLkNTaGFycCB7CisgCQkJZW5jb2Rlci5FbmNvZGUgKChpbnQp IG1vZGVzKTsKKyAJCQllbmNvZGVyLkVuY29kZUVtcHR5TmFtZWRBcmd1bWVudHMgKCk7CisgCist CQkJYnVpbGRlci5TZXRDdXN0b21BdHRyaWJ1dGUgKChDb25zdHJ1Y3RvckluZm8pIGN0b3IuR2V0 TWV0YUluZm8gKCksIGVuY29kZXIuVG9BcnJheSAoKSk7CisrCQkJYnVpbGRlci5TZXRDdXN0b21B dHRyaWJ1dGUgKChDb25zdHJ1Y3RvckluZm8pIGN0b3IuR2V0TWV0YUluZm8gKCksIGVuY29kZXIu VG9BcnJheSAob3V0IHZhciByZWZlcmVuY2VzKSk7CisrCQkJbW9kdWxlLkFkZEFzc2VtYmx5UmVm ZXJlbmNlcyAocmVmZXJlbmNlcyk7CisgCQl9CisgCX0KKyAKK0BAIC0yMDUwLDcgKzIwNjcsOCBA QCBuYW1lc3BhY2UgTW9uby5DU2hhcnAgeworIAkJCWVuY29kZXIuRW5jb2RlICgodWludCkgYml0 c1swXSk7CisgCQkJZW5jb2Rlci5FbmNvZGVFbXB0eU5hbWVkQXJndW1lbnRzICgpOworIAorLQkJ CWJ1aWxkZXIuU2V0Q3VzdG9tQXR0cmlidXRlICgoQ29uc3RydWN0b3JJbmZvKSBjdG9yLkdldE1l dGFJbmZvICgpLCBlbmNvZGVyLlRvQXJyYXkgKCkpOworKwkJCWJ1aWxkZXIuU2V0Q3VzdG9tQXR0 cmlidXRlICgoQ29uc3RydWN0b3JJbmZvKSBjdG9yLkdldE1ldGFJbmZvICgpLCBlbmNvZGVyLlRv QXJyYXkgKG91dCB2YXIgcmVmZXJlbmNlcykpOworKwkJCW1vZHVsZS5BZGRBc3NlbWJseVJlZmVy ZW5jZXMgKHJlZmVyZW5jZXMpOworIAkJfQorIAorIAkJcHVibGljIHZvaWQgRW1pdEF0dHJpYnV0 ZSAoRmllbGRCdWlsZGVyIGJ1aWxkZXIsIGRlY2ltYWwgdmFsdWUsIExvY2F0aW9uIGxvYykKK0BA IC0yMDY4LDcgKzIwODYsOCBAQCBuYW1lc3BhY2UgTW9uby5DU2hhcnAgeworIAkJCWVuY29kZXIu RW5jb2RlICgodWludCkgYml0c1swXSk7CisgCQkJZW5jb2Rlci5FbmNvZGVFbXB0eU5hbWVkQXJn dW1lbnRzICgpOworIAorLQkJCWJ1aWxkZXIuU2V0Q3VzdG9tQXR0cmlidXRlICgoQ29uc3RydWN0 b3JJbmZvKSBjdG9yLkdldE1ldGFJbmZvICgpLCBlbmNvZGVyLlRvQXJyYXkgKCkpOworKwkJCWJ1 aWxkZXIuU2V0Q3VzdG9tQXR0cmlidXRlICgoQ29uc3RydWN0b3JJbmZvKSBjdG9yLkdldE1ldGFJ bmZvICgpLCBlbmNvZGVyLlRvQXJyYXkgKG91dCB2YXIgcmVmZXJlbmNlcykpOworKwkJCW1vZHVs ZS5BZGRBc3NlbWJseVJlZmVyZW5jZXMgKHJlZmVyZW5jZXMpOworIAkJfQorIAl9CisgCitAQCAt MjA5Miw3ICsyMTExLDggQEAgbmFtZXNwYWNlIE1vbm8uQ1NoYXJwIHsKKyAJCQllbmNvZGVyLkVu Y29kZVR5cGVOYW1lICh0eXBlKTsKKyAJCQllbmNvZGVyLkVuY29kZUVtcHR5TmFtZWRBcmd1bWVu dHMgKCk7CisgCistCQkJYnVpbGRlci5TZXRDdXN0b21BdHRyaWJ1dGUgKChDb25zdHJ1Y3Rvcklu Zm8pIGN0b3IuR2V0TWV0YUluZm8gKCksIGVuY29kZXIuVG9BcnJheSAoKSk7CisrCQkJYnVpbGRl ci5TZXRDdXN0b21BdHRyaWJ1dGUgKChDb25zdHJ1Y3RvckluZm8pIGN0b3IuR2V0TWV0YUluZm8g KCksIGVuY29kZXIuVG9BcnJheSAob3V0IHZhciByZWZlcmVuY2VzKSk7CisrCQkJbW9kdWxlLkFk ZEFzc2VtYmx5UmVmZXJlbmNlcyAocmVmZXJlbmNlcyk7CisgCQl9CisgCX0KKyAKK2RpZmYgLS1n aXQgYS9tY3MvbWNzL2NsYXNzLmNzIGIvbWNzL21jcy9jbGFzcy5jcworaW5kZXggNmIxYWRjMjk3 YTMuLmRjNjFmNmRjNjI3IDEwMDY0NAorLS0tIGEvbWNzL21jcy9jbGFzcy5jcworKysrIGIvbWNz L21jcy9jbGFzcy5jcworQEAgLTIxMTcsNyArMjExNyw4IEBAIG5hbWVzcGFjZSBNb25vLkNTaGFy cAorIAkJCWVuY29kZXIuRW5jb2RlIChHZXRBdHRyaWJ1dGVEZWZhdWx0TWVtYmVyICgpKTsKKyAJ CQllbmNvZGVyLkVuY29kZUVtcHR5TmFtZWRBcmd1bWVudHMgKCk7CisgCistCQkJVHlwZUJ1aWxk ZXIuU2V0Q3VzdG9tQXR0cmlidXRlICgoQ29uc3RydWN0b3JJbmZvKSBjdG9yLkdldE1ldGFJbmZv ICgpLCBlbmNvZGVyLlRvQXJyYXkgKCkpOworKwkJCVR5cGVCdWlsZGVyLlNldEN1c3RvbUF0dHJp YnV0ZSAoKENvbnN0cnVjdG9ySW5mbykgY3Rvci5HZXRNZXRhSW5mbyAoKSwgZW5jb2Rlci5Ub0Fy cmF5IChvdXQgdmFyIHJlZmVyZW5jZXMpKTsKKysJCQlNb2R1bGUuQWRkQXNzZW1ibHlSZWZlcmVu Y2VzIChyZWZlcmVuY2VzKTsKKyAJCX0KKyAKKyAJCXB1YmxpYyBvdmVycmlkZSB2b2lkIFZlcmlm eU1lbWJlcnMgKCkKK0BAIC0zOTYyLDcgKzM5NjMsMTAgQEAgbmFtZXNwYWNlIE1vbm8uQ1NoYXJw CisgCQkJCQlSZXBvcnQuRXJyb3IgKDQwMTMsIExvY2F0aW9uLAorIAkJCQkJCSJMb2NhbCB2YXJp YWJsZXMgb2YgdHlwZSBgezB9JyBjYW5ub3QgYmUgdXNlZCBpbnNpZGUgYW5vbnltb3VzIG1ldGhv ZHMsIGxhbWJkYSBleHByZXNzaW9ucyBvciBxdWVyeSBleHByZXNzaW9ucyIsCisgCQkJCQkJTWVt YmVyVHlwZS5HZXRTaWduYXR1cmVGb3JFcnJvciAoKSk7CistCQkJCX0gZWxzZSBpZiAoTWVtYmVy VHlwZS5Jc0J5UmVmTGlrZSkgeworKwkJCQl9IGVsc2UgaWYgKE1lbWJlclR5cGUuSXNTcGVjaWFs UnVudGltZVR5cGUpIHsKKysJCQkJCVJlcG9ydC5FcnJvciAoNjEwLCBMb2NhdGlvbiwKKysJCQkJ CQkiRmllbGQgb3IgcHJvcGVydHkgY2Fubm90IGJlIG9mIHR5cGUgYHswfSciLCBNZW1iZXJUeXBl LkdldFNpZ25hdHVyZUZvckVycm9yICgpKTsKKysJCQkJfSBlbHNlIHsKKyAJCQkJCWlmICgoTW9k RmxhZ3MgJiAoTW9kaWZpZXJzLkFCU1RSQUNUIHwgTW9kaWZpZXJzLkVYVEVSTikpICE9IDApCisg CQkJCQkJcmV0dXJuOworIAorQEAgLTM5NzUsOSArMzk3OSw2IEBAIG5hbWVzcGFjZSBNb25vLkNT aGFycAorIAkJCQkJUmVwb3J0LkVycm9yICg4MzQ1LCBMb2NhdGlvbiwKKyAJCQkJCQkiRmllbGQg b3IgYXV0by1pbXBsZW1lbnRlZCBwcm9wZXJ0eSBjYW5ub3QgYmUgb2YgdHlwZSBgezB9JyB1bmxl c3MgaXQgaXMgYW4gaW5zdGFuY2UgbWVtYmVyIG9mIGEgcmVmIHN0cnVjdCIsCisgCQkJCQkJTWVt YmVyVHlwZS5HZXRTaWduYXR1cmVGb3JFcnJvciAoKSk7CistCQkJCX0gZWxzZSB7CistCQkJCQlS ZXBvcnQuRXJyb3IgKDYxMCwgTG9jYXRpb24sIAorLQkJCQkJCSJGaWVsZCBvciBwcm9wZXJ0eSBj YW5ub3QgYmUgb2YgdHlwZSBgezB9JyIsIE1lbWJlclR5cGUuR2V0U2lnbmF0dXJlRm9yRXJyb3Ig KCkpOworIAkJCQl9CisgCQkJfQorIAkJfQorZGlmZiAtLWdpdCBhL21jcy9tY3MvY29udmVydC5j cyBiL21jcy9tY3MvY29udmVydC5jcworaW5kZXggYWUxNTNmYzQ5ZTguLjJjOGQyYTAyMDRjIDEw MDY0NAorLS0tIGEvbWNzL21jcy9jb252ZXJ0LmNzCisrKysgYi9tY3MvbWNzL2NvbnZlcnQuY3MK K0BAIC0xMjMyLDYgKzEyMzIsMTMgQEAgbmFtZXNwYWNlIE1vbm8uQ1NoYXJwIHsKKyAJCQkJCUZp bmRBcHBsaWNhYmxlVXNlckRlZmluZWRDb252ZXJzaW9uT3BlcmF0b3JzIChyYywgb3BlcmF0b3Jz LCBzb3VyY2VfdHlwZV9leHByLCB0YXJnZXRfdHlwZSwgcmVzdHIsIHJlZiBjYW5kaWRhdGVzKTsK KyAJCQkJfQorIAorKwkJCQlpZiAoc291cmNlX3R5cGVfZXhwciA9PSBzb3VyY2UgJiYgc291cmNl X3R5cGUuSXNOdWxsYWJsZVR5cGUpIHsKKysJCQkJCW9wZXJhdG9ycyA9IE1lbWJlckNhY2hlLkdl dFVzZXJPcGVyYXRvciAoc291cmNlX3R5cGUuVHlwZUFyZ3VtZW50cyBbMF0sIE9wZXJhdG9yLk9w VHlwZS5JbXBsaWNpdCwgZGVjbGFyZWRfb25seSk7CisrCQkJCQlpZiAob3BlcmF0b3JzICE9IG51 bGwpIHsKKysJCQkJCQlGaW5kQXBwbGljYWJsZVVzZXJEZWZpbmVkQ29udmVyc2lvbk9wZXJhdG9y cyAocmMsIG9wZXJhdG9ycywgc291cmNlX3R5cGVfZXhwciwgdGFyZ2V0X3R5cGUsIHJlc3RyLCBy ZWYgY2FuZGlkYXRlcyk7CisrCQkJCQl9CisrCQkJCX0KKysKKyAJCQkJaWYgKCFpbXBsaWNpdE9u bHkpIHsKKyAJCQkJCW9wZXJhdG9ycyA9IE1lbWJlckNhY2hlLkdldFVzZXJPcGVyYXRvciAoc291 cmNlX3R5cGUsIE9wZXJhdG9yLk9wVHlwZS5FeHBsaWNpdCwgZGVjbGFyZWRfb25seSk7CisgCQkJ CQlpZiAob3BlcmF0b3JzICE9IG51bGwpIHsKK2RpZmYgLS1naXQgYS9tY3MvbWNzL2NzLXBhcnNl ci5qYXkgYi9tY3MvbWNzL2NzLXBhcnNlci5qYXkKK2luZGV4IDRkNmZjYjQ0YzBkLi40Y2EzYmY3 NGYzZCAxMDA2NDQKKy0tLSBhL21jcy9tY3MvY3MtcGFyc2VyLmpheQorKysrIGIvbWNzL21jcy9j cy1wYXJzZXIuamF5CitAQCAtMzQsMTMgKzM0LDE2IEBAIG5hbWVzcGFjZSBNb25vLkNTaGFycAor IAkJCVBhcmFtcwk9IDEgPDwgNCwKKyAJCQlBcmdsaXN0CT0gMSA8PCA1LAorIAkJCURlZmF1bHRW YWx1ZSA9IDEgPDwgNiwKKysJCQlSZWFkT25seSA9IDEgPDwgNywKKyAJCQkKKy0JCQlBbGwgPSBS ZWYgfCBPdXQgfCBUaGlzIHwgUGFyYW1zIHwgQXJnbGlzdCB8IERlZmF1bHRWYWx1ZSwKKysJCQlB bGwgPSBSZWYgfCBPdXQgfCBUaGlzIHwgUGFyYW1zIHwgQXJnbGlzdCB8IERlZmF1bHRWYWx1ZSB8 IFJlYWRPbmx5LAorIAkJCVByaW1hcnlDb25zdHJ1Y3RvciA9IFJlZiB8IE91dCB8IFBhcmFtcyB8 IERlZmF1bHRWYWx1ZQorIAkJfQorIAkJCisgCQlzdGF0aWMgcmVhZG9ubHkgb2JqZWN0IE1vZGlm aWVyTm9uZSA9IDA7CistCQorKwkJc3RhdGljIHJlYWRvbmx5IG9iamVjdCBSZWZTdHJ1Y3RUb2tl biA9IG5ldyBvYmplY3QgKCk7CisrCQlzdGF0aWMgcmVhZG9ubHkgb2JqZWN0IFJlZlBhcnRpYWxT dHJ1Y3RUb2tlbiA9IG5ldyBvYmplY3QgKCk7CisrCisgCQlOYW1lc3BhY2VDb250YWluZXIgY3Vy cmVudF9uYW1lc3BhY2U7CisgCQlUeXBlQ29udGFpbmVyIGN1cnJlbnRfY29udGFpbmVyOworIAkJ VHlwZURlZmluaXRpb24gY3VycmVudF90eXBlOworQEAgLTMzOCw2ICszNDEsNyBAQCBuYW1lc3Bh Y2UgTW9uby5DU2hhcnAKKyAldG9rZW4gT1BFTl9CUkFDS0VUX0VYUFIKKyAldG9rZW4gT1BFTl9Q QVJFTlNfREVDT05TVFJVQ1QKKyAldG9rZW4gUkVGX1NUUlVDVAorKyV0b2tlbiBSRUZfUEFSVElB TAorIAorIC8vIE1ha2UgdGhlIHBhcnNlciBnbyBpbnRvIGV2YWwgbW9kZSBwYXJzaW5nIChzdGF0 ZW1lbnRzIGFuZCBjb21waWxhdGlvbiB1bml0cykuCisgJXRva2VuIEVWQUxfU1RBVEVNRU5UX1BB UlNFUgorQEAgLTY0OCw4ICs2NTIsOCBAQCBuYW1lc3BhY2Vfb3JfdHlwZV9kZWNsYXJhdGlvbgor IAkJCVR5cGVDb250YWluZXIgZHMgPSAoVHlwZUNvbnRhaW5lcikkMTsKKyAKKyAJCQlpZiAoKGRz Lk1vZEZsYWdzICYgKE1vZGlmaWVycy5QUklWQVRFIHwgTW9kaWZpZXJzLlBST1RFQ1RFRCkpICE9 IDApeworLQkJCQlyZXBvcnQuRXJyb3IgKDE1MjcsIGRzLkxvY2F0aW9uLCAKKy0JCQkJIk5hbWVz cGFjZSBlbGVtZW50cyBjYW5ub3QgYmUgZXhwbGljaXRseSBkZWNsYXJlZCBhcyBwcml2YXRlLCBw cm90ZWN0ZWQgb3IgcHJvdGVjdGVkIGludGVybmFsIik7CisrCQkJCXJlcG9ydC5FcnJvciAoMTUy NywgZHMuTG9jYXRpb24sCisrCQkJCSJOYW1lc3BhY2UgZWxlbWVudHMgY2Fubm90IGJlIGV4cGxp Y2l0bHkgZGVjbGFyZWQgYXMgcHJpdmF0ZSwgcHJvdGVjdGVkLCBwcm90ZWN0ZWQgaW50ZXJuYWws IG9yIHByaXZhdGUgcHJvdGVjdGVkIik7CisgCQkJfQorIAorIAkJCS8vIEhlcmUgaXMgYSB0cmlj aywgZm9yIGV4cGxpY2l0IGF0dHJpYnV0ZXMgd2UgZG9uJ3Qga25vdyB3aGVyZSB0aGV5IGJlbG9u ZyB0byB1bnRpbAorQEAgLTEwMjgsNyArMTAzMiwxNSBAQCBzdHJ1Y3Rfa2V5d29yZAorIAkJCUZl YXR1cmVJc05vdEF2YWlsYWJsZSAoR2V0TG9jYXRpb24gKCQxKSwgInJlZiBzdHJ1Y3RzIik7Cisg CQl9CisgCistCQkkJCA9IHRoaXM7CisrCQkkJCA9IFJlZlN0cnVjdFRva2VuOworKwkgIH0KKysJ fCBSRUZfUEFSVElBTCBTVFJVQ1QKKysJICB7CisrCQlpZiAobGFuZ192ZXJzaW9uIDwgTGFuZ3Vh Z2VWZXJzaW9uLlZfN18yKSB7CisrCQkJRmVhdHVyZUlzTm90QXZhaWxhYmxlIChHZXRMb2NhdGlv biAoJDEpLCAicmVmIHN0cnVjdHMiKTsKKysJCX0KKysKKysJCSQkID0gUmVmUGFydGlhbFN0cnVj dFRva2VuOworIAkgIH0KKyAJOworIAorQEAgLTEwNDMsOCArMTA1NSwxMyBAQCBzdHJ1Y3RfZGVj bGFyYXRpb24KKyAJCWlmICgobW9kcyAmIE1vZGlmaWVycy5SRUFET05MWSkgIT0gMCAmJiBsYW5n X3ZlcnNpb24gPCBMYW5ndWFnZVZlcnNpb24uVl83XzIpIHsKKyAJCQlGZWF0dXJlSXNOb3RBdmFp bGFibGUgKEdldExvY2F0aW9uICgkNCksICJyZWFkb25seSBzdHJ1Y3RzIik7CisgCQl9CistCQlp ZiAoJDQgIT0gbnVsbCkKKysJCWlmICgkNCAhPSBudWxsKSB7CisgCQkJbW9kcyB8PSBNb2RpZmll cnMuUkVGOworKwkJCWlmICgkNCA9PSBSZWZQYXJ0aWFsU3RydWN0VG9rZW4pIHsKKysJCQkJbW9k cyB8PSBNb2RpZmllcnMuUEFSVElBTDsKKysJCQkJJDMgPSAkNDsKKysJCQl9CisrCQl9CisgCisg CQlsZXhlci5Db25zdHJhaW50c1BhcnNpbmcgPSB0cnVlOworIAkJdmFsaWRfcGFyYW1fbW9kID0g UGFyYW1ldGVyTW9kaWZpZXJUeXBlLlByaW1hcnlDb25zdHJ1Y3RvcjsKK0BAIC0xNDY5LDcgKzE0 ODYsNyBAQCBtZXRob2RfaGVhZGVyCisgCSAgT1BFTl9QQVJFTlMKKyAJICB7CisgCQlsZXhlci5w YXJzaW5nX2dlbmVyaWNfZGVjbGFyYXRpb24gPSBmYWxzZTsKKy0JICAJdmFsaWRfcGFyYW1fbW9k ID0gUGFyYW1ldGVyTW9kaWZpZXJUeXBlLkFsbDsKKysJCXZhbGlkX3BhcmFtX21vZCA9IFBhcmFt ZXRlck1vZGlmaWVyVHlwZS5BbGw7CisgCSAgfQorIAkgIG9wdF9mb3JtYWxfcGFyYW1ldGVyX2xp c3QgQ0xPU0VfUEFSRU5TIAorIAkgIHsKK0BAIC0xNTY5LDcgKzE1ODYsNyBAQCBjb25zdHJ1Y3Rv cl9ib2R5CisgCSBleHByZXNzaW9uIFNFTUlDT0xPTgorIAkgeworIAkJbGV4ZXIucGFyc2luZ19i bG9jayA9IDA7CistCQljdXJyZW50X2Jsb2NrLkFkZFN0YXRlbWVudCAobmV3IENvbnRleHR1YWxS ZXR1cm4gKChFeHByZXNzaW9uKSAkMykpOworKwkJY3VycmVudF9ibG9jay5BZGRTdGF0ZW1lbnQg KENyZWF0ZUV4cHJlc3Npb25Cb2RpZWRTdGF0ZW1lbnQgKChFeHByZXNzaW9uKSAkMykpOworIAkJ dmFyIGIgPSBlbmRfYmxvY2sgKEdldExvY2F0aW9uICgkNCkpOworIAkJYi5Jc0NvbXBpbGVyR2Vu ZXJhdGVkID0gdHJ1ZTsKKyAJCSQkID0gYjsKK0BAIC0xNTkwLDcgKzE2MDcsNyBAQCBleHByZXNz aW9uX2Jsb2NrCisgCSBsYW1iZGFfYXJyb3dfZXhwcmVzc2lvbiBTRU1JQ09MT04KKyAJIHsKKyAJ CWxleGVyLnBhcnNpbmdfYmxvY2sgPSAwOworLQkJY3VycmVudF9ibG9jay5BZGRTdGF0ZW1lbnQg KG5ldyBDb250ZXh0dWFsUmV0dXJuICgoRXhwcmVzc2lvbikgJDMpKTsKKysJCWN1cnJlbnRfYmxv Y2suQWRkU3RhdGVtZW50IChDcmVhdGVFeHByZXNzaW9uQm9kaWVkU3RhdGVtZW50ICgoRXhwcmVz c2lvbikgJDMpKTsKKyAJCXZhciBiID0gZW5kX2Jsb2NrIChHZXRMb2NhdGlvbiAoJDQpKTsKKyAJ CWIuSXNDb21waWxlckdlbmVyYXRlZCA9IHRydWU7CisgCQkkJCA9IGI7CitAQCAtMTc5NCw3ICsx ODExLDkgQEAgcGFyYW1ldGVyX21vZGlmaWVycworICAgCQlQYXJhbWV0ZXIuTW9kaWZpZXIgbW9k ID0gKFBhcmFtZXRlci5Nb2RpZmllcikkMSB8IHAyOworICAgCQlpZiAoKChQYXJhbWV0ZXIuTW9k aWZpZXIpJDEgJiBwMikgPT0gcDIpIHsKKyAgIAkJCUVycm9yX0R1cGxpY2F0ZVBhcmFtZXRlck1v ZGlmaWVyIChsZXhlci5Mb2NhdGlvbiwgcDIpOworLSAgCQl9IGVsc2UgeworKwkJfSBlbHNlIGlm ICgobW9kICYgfihQYXJhbWV0ZXIuTW9kaWZpZXIuVGhpcyB8IFBhcmFtZXRlci5Nb2RpZmllci5S ZWFkT25seSkpID09IDApIHsKKysJCQkvLyBvaworKwkJfSBlbHNlIHsKKyAJICAJCXN3aXRjaCAo bW9kICYgflBhcmFtZXRlci5Nb2RpZmllci5UaGlzKSB7CisgICAJCQkJY2FzZSBQYXJhbWV0ZXIu TW9kaWZpZXIuUkVGOgorIAkJCQkJcmVwb3J0LkVycm9yICgxMTAxLCBsZXhlci5Mb2NhdGlvbiwg IlRoZSBwYXJhbWV0ZXIgbW9kaWZpZXJzIGB0aGlzJyBhbmQgYHJlZicgY2Fubm90IGJlIHVzZWQg YWx0b2dldGhlciIpOworQEAgLTE4MzYsNiArMTg1NSwxMyBAQCBwYXJhbWV0ZXJfbW9kaWZpZXIK KyAJICAJCQkKKyAJCSQkID0gUGFyYW1ldGVyLk1vZGlmaWVyLlRoaXM7CisgCSAgfQorKwl8IElO CisrCSAgeworKwkJaWYgKGxhbmdfdmVyc2lvbiA8IExhbmd1YWdlVmVyc2lvbi5WXzdfMikKKysJ CQlGZWF0dXJlSXNOb3RBdmFpbGFibGUgKEdldExvY2F0aW9uICgkMSksICJyZWFkb25seSByZWZl cmVuY2VzIik7CisrCisrCQkkJCA9IFBhcmFtZXRlci5Nb2RpZmllci5SZWFkT25seTsKKysJICB9 CisgCTsKKyAKKyBwYXJhbWV0ZXJfYXJyYXkKK0BAIC0xODcxLDcgKzE4OTcsNyBAQCBwYXJhbXNf bW9kaWZpZXIKKyAJCWlmICgobW9kICYgUGFyYW1ldGVyLk1vZGlmaWVyLlRoaXMpICE9IDApIHsK KyAJCQlyZXBvcnQuRXJyb3IgKDExMDQsIEdldExvY2F0aW9uICgkMSksICJUaGUgcGFyYW1ldGVy IG1vZGlmaWVycyBgdGhpcycgYW5kIGBwYXJhbXMnIGNhbm5vdCBiZSB1c2VkIGFsdG9nZXRoZXIi KTsKKyAJCX0gZWxzZSB7CistCQkJcmVwb3J0LkVycm9yICgxNjExLCBHZXRMb2NhdGlvbiAoJDEp LCAiVGhlIHBhcmFtcyBwYXJhbWV0ZXIgY2Fubm90IGJlIGRlY2xhcmVkIGFzIHJlZiBvciBvdXQi KTsKKysJCQlyZXBvcnQuRXJyb3IgKDE2MTEsIEdldExvY2F0aW9uICgkMSksICJUaGUgcGFyYW1z IHBhcmFtZXRlciBjYW5ub3QgYmUgZGVjbGFyZWQgYXMgcmVmLCBvdXQgb3IgaW4iKTsKKyAJCX0J ICAKKyAJICB9CisgCXwgUEFSQU1TIHBhcmFtc19tb2RpZmllcgorQEAgLTIwMDQsNyArMjAzMCw3 IEBAIGluZGV4ZXJfZGVjbGFyYXRpb24KKyAJOiBvcHRfYXR0cmlidXRlcyBvcHRfbW9kaWZpZXJz CisgCSAgcmVmX21lbWJlcl90eXBlIGluZGV4ZXJfZGVjbGFyYXRpb25fbmFtZSBPUEVOX0JSQUNL RVQKKyAJICB7CistCSAgCXZhbGlkX3BhcmFtX21vZCA9IFBhcmFtZXRlck1vZGlmaWVyVHlwZS5Q YXJhbXMgfCBQYXJhbWV0ZXJNb2RpZmllclR5cGUuRGVmYXVsdFZhbHVlOworKwkJdmFsaWRfcGFy YW1fbW9kID0gUGFyYW1ldGVyTW9kaWZpZXJUeXBlLlBhcmFtcyB8IFBhcmFtZXRlck1vZGlmaWVy VHlwZS5EZWZhdWx0VmFsdWUgfCBQYXJhbWV0ZXJNb2RpZmllclR5cGUuUmVhZE9ubHk7CisgCSAg fQorIAkgIG9wdF9mb3JtYWxfcGFyYW1ldGVyX2xpc3QgQ0xPU0VfQlJBQ0tFVCAKKyAJICB7CitA QCAtMjE4MSw2ICsyMjA3LDExIEBAIHNldF9hY2Nlc3Nvcl9kZWNsYXJhdGlvbgorIGFjY2Vzc29y X2JvZHkKKyAJOiBibG9jaworIAl8IGV4cHJlc3Npb25fYmxvY2sKKysJICB7CisrCQlpZiAobGFu Z192ZXJzaW9uIDwgTGFuZ3VhZ2VWZXJzaW9uLlZfNykgeworKwkJCUZlYXR1cmVJc05vdEF2YWls YWJsZSAoR2V0TG9jYXRpb24gKCQxKSwgImV4cHJlc3Npb24gYm9keSBwcm9wZXJ0eSBhY2Nlc3Nv ciIpOworKwkJfQorKwkgIH0KKyAJfCBTRU1JQ09MT04KKyAJICB7CisgCQkvLyBUT0RPOiBsYmFn CitAQCAtMjMzMSw3ICsyMzYyLDcgQEAgb3BlcmF0b3JfdHlwZQorIG9wZXJhdG9yX2RlY2xhcmF0 b3IKKyAJOiBvcGVyYXRvcl90eXBlIE9QRVJBVE9SIG92ZXJsb2FkYWJsZV9vcGVyYXRvciBPUEVO X1BBUkVOUworIAkgIHsKKy0JCXZhbGlkX3BhcmFtX21vZCA9IFBhcmFtZXRlck1vZGlmaWVyVHlw ZS5EZWZhdWx0VmFsdWU7CisrCQl2YWxpZF9wYXJhbV9tb2QgPSBQYXJhbWV0ZXJNb2RpZmllclR5 cGUuRGVmYXVsdFZhbHVlIHwgUGFyYW1ldGVyTW9kaWZpZXJUeXBlLlJlYWRPbmx5OworIAkJaWYg KChPcGVyYXRvci5PcFR5cGUpICQzID09IE9wZXJhdG9yLk9wVHlwZS5JcykKKyAJCQl2YWxpZF9w YXJhbV9tb2QgfD0gUGFyYW1ldGVyTW9kaWZpZXJUeXBlLk91dDsKKyAJICB9CitAQCAtMjQxOCw3 ICsyNDQ5LDcgQEAgb3ZlcmxvYWRhYmxlX29wZXJhdG9yCisgY29udmVyc2lvbl9vcGVyYXRvcl9k ZWNsYXJhdG9yCisgCTogSU1QTElDSVQgT1BFUkFUT1IgdHlwZSBPUEVOX1BBUkVOUworIAkgIHsK Ky0JCXZhbGlkX3BhcmFtX21vZCA9IFBhcmFtZXRlck1vZGlmaWVyVHlwZS5EZWZhdWx0VmFsdWU7 CisrCQl2YWxpZF9wYXJhbV9tb2QgPSBQYXJhbWV0ZXJNb2RpZmllclR5cGUuRGVmYXVsdFZhbHVl IHwgUGFyYW1ldGVyTW9kaWZpZXJUeXBlLlJlYWRPbmx5OworIAkgIH0KKyAJICBvcHRfZm9ybWFs X3BhcmFtZXRlcl9saXN0IENMT1NFX1BBUkVOUworIAkgIHsKK0BAIC0yNDQxLDcgKzI0NzIsNyBA QCBjb252ZXJzaW9uX29wZXJhdG9yX2RlY2xhcmF0b3IKKyAJICB9CisgCXwgRVhQTElDSVQgT1BF UkFUT1IgdHlwZSBPUEVOX1BBUkVOUworIAkgIHsKKy0JCXZhbGlkX3BhcmFtX21vZCA9IFBhcmFt ZXRlck1vZGlmaWVyVHlwZS5EZWZhdWx0VmFsdWU7CisrCQl2YWxpZF9wYXJhbV9tb2QgPSBQYXJh bWV0ZXJNb2RpZmllclR5cGUuRGVmYXVsdFZhbHVlIHwgUGFyYW1ldGVyTW9kaWZpZXJUeXBlLlJl YWRPbmx5OworIAkgIH0KKyAJICBvcHRfZm9ybWFsX3BhcmFtZXRlcl9saXN0IENMT1NFX1BBUkVO UworIAkgIHsKK0BAIC0yODUwLDYgKzI4ODEsMTEgQEAgZXZlbnRfYWNjZXNzb3JfYmxvY2sKKyAJ ICB9CisgCXwgYmxvY2sKKyAJfCBleHByZXNzaW9uX2Jsb2NrCisrCSAgeworKwkJaWYgKGxhbmdf dmVyc2lvbiA8IExhbmd1YWdlVmVyc2lvbi5WXzcpIHsKKysJCQlGZWF0dXJlSXNOb3RBdmFpbGFi bGUgKEdldExvY2F0aW9uICgkMSksICJleHByZXNzaW9uIGJvZHkgZXZlbnQgYWNjZXNzb3IiKTsK KysJCX0KKysJICB9CisgCTsKKyAKKyBhdHRyaWJ1dGVzX3dpdGhvdXRfbWVtYmVycworQEAgLTMw MTQsNyArMzA1MCw3IEBAIGRlbGVnYXRlX2RlY2xhcmF0aW9uCisgCSAgcmVmX21lbWJlcl90eXBl IHR5cGVfZGVjbGFyYXRpb25fbmFtZQorIAkgIE9QRU5fUEFSRU5TCisgCSAgeworLQkJdmFsaWRf cGFyYW1fbW9kID0gUGFyYW1ldGVyTW9kaWZpZXJUeXBlLlJlZiB8IFBhcmFtZXRlck1vZGlmaWVy VHlwZS5PdXQgfCBQYXJhbWV0ZXJNb2RpZmllclR5cGUuUGFyYW1zIHwgUGFyYW1ldGVyTW9kaWZp ZXJUeXBlLkRlZmF1bHRWYWx1ZTsKKysJCXZhbGlkX3BhcmFtX21vZCA9IFBhcmFtZXRlck1vZGlm aWVyVHlwZS5SZWYgfCBQYXJhbWV0ZXJNb2RpZmllclR5cGUuT3V0IHwgUGFyYW1ldGVyTW9kaWZp ZXJUeXBlLlBhcmFtcyB8IFBhcmFtZXRlck1vZGlmaWVyVHlwZS5EZWZhdWx0VmFsdWUgfCBQYXJh bWV0ZXJNb2RpZmllclR5cGUuUmVhZE9ubHk7CisgCSAgfQorIAkgIG9wdF9mb3JtYWxfcGFyYW1l dGVyX2xpc3QgQ0xPU0VfUEFSRU5TCisgCSAgeworQEAgLTM5MjcsNyArMzk2MywxNSBAQCBub25f c2ltcGxlX2FyZ3VtZW50CisgCSAgeworIAkJJCQgPSBuZXcgQXJndW1lbnQgKG5ldyBBcmdsaXN0 IChHZXRMb2NhdGlvbiAoJDEpKSk7CisgCQlsYmFnLkFkZExvY2F0aW9uICgkJCwgR2V0TG9jYXRp b24gKCQyKSwgR2V0TG9jYXRpb24gKCQzKSk7CistCSAgfQkgIAorKwkgIH0KKysJfCBJTiB2YXJp YWJsZV9yZWZlcmVuY2UKKysJICB7CisrCQlpZiAobGFuZ192ZXJzaW9uIDwgTGFuZ3VhZ2VWZXJz aW9uLlZfN18yKQorKwkJCUZlYXR1cmVJc05vdEF2YWlsYWJsZSAoR2V0TG9jYXRpb24gKCQxKSwg InJlYWRvbmx5IHJlZmVyZW5jZXMiKTsKKysKKysJCSQkID0gbmV3IEFyZ3VtZW50ICgoRXhwcmVz c2lvbikgJDIsIEFyZ3VtZW50LkFUeXBlLlJlYWRvbmx5KTsKKysJCWxiYWcuQWRkTG9jYXRpb24g KCQkLCBHZXRMb2NhdGlvbiAoJDEpKTsKKysJICB9CisgCTsKKyAKKyBvdXRfdmFyaWFibGVfZGVj bGFyYXRpb24KK0BAIC00NDA4LDcgKzQ0NTIsNyBAQCBvcHRfYW5vbnltb3VzX21ldGhvZF9zaWdu YXR1cmUKKyBhbm9ueW1vdXNfbWV0aG9kX3NpZ25hdHVyZQorIAk6IE9QRU5fUEFSRU5TCisgCSAg eworLQkgIAl2YWxpZF9wYXJhbV9tb2QgPSBQYXJhbWV0ZXJNb2RpZmllclR5cGUuUmVmIHwgUGFy YW1ldGVyTW9kaWZpZXJUeXBlLk91dDsKKysJCXZhbGlkX3BhcmFtX21vZCA9IFBhcmFtZXRlck1v ZGlmaWVyVHlwZS5SZWYgfCBQYXJhbWV0ZXJNb2RpZmllclR5cGUuT3V0IHwgUGFyYW1ldGVyTW9k aWZpZXJUeXBlLlJlYWRPbmx5OworIAkgIH0KKyAJICBvcHRfZm9ybWFsX3BhcmFtZXRlcl9saXN0 IENMT1NFX1BBUkVOUworIAkgIHsKK0BAIC01MDE0LDM2ICs1MDU4LDQ3IEBAIG51bGxfY29hbGVz Y2luZ19leHByZXNzaW9uCisgCSAgfQorIAk7CisgCisrCisrY29uZGl0aW9uYWxfb3Blcl9leHBy CisrCTogZXhwcmVzc2lvbgorKwl8IHN0YWNrYWxsb2NfZXhwcmVzc2lvbgorKwk7CisrCisgY29u ZGl0aW9uYWxfZXhwcmVzc2lvbgorIAk6IG51bGxfY29hbGVzY2luZ19leHByZXNzaW9uCistCXwg bnVsbF9jb2FsZXNjaW5nX2V4cHJlc3Npb24gSU5URVJSIGV4cHJlc3Npb24gQ09MT04gZXhwcmVz c2lvbgorKwl8IG51bGxfY29hbGVzY2luZ19leHByZXNzaW9uIElOVEVSUiBjb25kaXRpb25hbF9v cGVyX2V4cHIgQ09MT04gY29uZGl0aW9uYWxfb3Blcl9leHByCisgCSAgeworIAkJJCQgPSBuZXcg Q29uZGl0aW9uYWwgKG5ldyBCb29sZWFuRXhwcmVzc2lvbiAoKEV4cHJlc3Npb24pICQxKSwgKEV4 cHJlc3Npb24pICQzLCAoRXhwcmVzc2lvbikgJDUsIEdldExvY2F0aW9uICgkMikpOworIAkJbGJh Zy5BZGRMb2NhdGlvbiAoJCQsIEdldExvY2F0aW9uICgkNCkpOworIAkgIH0KKy0JfCBudWxsX2Nv YWxlc2NpbmdfZXhwcmVzc2lvbiBJTlRFUlIgZXhwcmVzc2lvbiBDT0xPTiBUSFJPVyBwcmVmaXhl ZF91bmFyeV9leHByZXNzaW9uCisrCXwgbnVsbF9jb2FsZXNjaW5nX2V4cHJlc3Npb24gSU5URVJS IGNvbmRpdGlvbmFsX29wZXJfZXhwciBDT0xPTiBUSFJPVyBwcmVmaXhlZF91bmFyeV9leHByZXNz aW9uCisgCSAgeworIAkJaWYgKGxhbmdfdmVyc2lvbiA8IExhbmd1YWdlVmVyc2lvbi5WXzcpCist CQkJRmVhdHVyZUlzTm90QXZhaWxhYmxlIChsZXhlci5Mb2NhdGlvbiwgInRocm93IGV4cHJlc3Np b24iKTsKKysJCQlGZWF0dXJlSXNOb3RBdmFpbGFibGUgKEdldExvY2F0aW9uICgkNSksICJ0aHJv dyBleHByZXNzaW9uIik7CisgCisgCQl2YXIgZXhwciA9IG5ldyBUaHJvd0V4cHJlc3Npb24gKChF eHByZXNzaW9uKSAkNiwgR2V0TG9jYXRpb24gKCQ1KSk7CisgCQkkJCA9IG5ldyBDb25kaXRpb25h bCAobmV3IEJvb2xlYW5FeHByZXNzaW9uICgoRXhwcmVzc2lvbikgJDEpLCAoRXhwcmVzc2lvbikg JDMsIGV4cHIsIEdldExvY2F0aW9uICgkMikpOworIAkJbGJhZy5BZGRMb2NhdGlvbiAoJCQsIEdl dExvY2F0aW9uICgkNCkpOworIAkgIH0KKy0JfCBudWxsX2NvYWxlc2NpbmdfZXhwcmVzc2lvbiBJ TlRFUlIgZXhwcmVzc2lvbiBlcnJvcgorKwl8IG51bGxfY29hbGVzY2luZ19leHByZXNzaW9uIElO VEVSUiByZWZlcmVuY2VfZXhwcmVzc2lvbiBDT0xPTiByZWZlcmVuY2VfZXhwcmVzc2lvbgorKwkg IHsKKysJCSQkID0gbmV3IENvbmRpdGlvbmFsIChuZXcgQm9vbGVhbkV4cHJlc3Npb24gKChFeHBy ZXNzaW9uKSAkMSksIChFeHByZXNzaW9uKSAkMywgKEV4cHJlc3Npb24pICQ1LCBHZXRMb2NhdGlv biAoJDIpKTsKKysJCWxiYWcuQWRkTG9jYXRpb24gKCQkLCBHZXRMb2NhdGlvbiAoJDQpKTsKKysJ ICB9CisrCXwgbnVsbF9jb2FsZXNjaW5nX2V4cHJlc3Npb24gSU5URVJSIGNvbmRpdGlvbmFsX29w ZXJfZXhwciBlcnJvcgorIAkgIHsKKyAJCUVycm9yX1N5bnRheEVycm9yICh5eVRva2VuKTsKKyAK KyAJCSQkID0gbmV3IENvbmRpdGlvbmFsIChuZXcgQm9vbGVhbkV4cHJlc3Npb24gKChFeHByZXNz aW9uKSAkMSksIChFeHByZXNzaW9uKSAkMywgbnVsbCwgR2V0TG9jYXRpb24gKCQyKSk7CisgCSAg fQorLQl8IG51bGxfY29hbGVzY2luZ19leHByZXNzaW9uIElOVEVSUiBleHByZXNzaW9uIENPTE9O IGVycm9yCisrCXwgbnVsbF9jb2FsZXNjaW5nX2V4cHJlc3Npb24gSU5URVJSIGNvbmRpdGlvbmFs X29wZXJfZXhwciBDT0xPTiBlcnJvcgorIAkgIHsKKyAJCUVycm9yX1N5bnRheEVycm9yICh5eVRv a2VuKTsKKyAKKyAJCSQkID0gbmV3IENvbmRpdGlvbmFsIChuZXcgQm9vbGVhbkV4cHJlc3Npb24g KChFeHByZXNzaW9uKSAkMSksIChFeHByZXNzaW9uKSAkMywgbnVsbCwgR2V0TG9jYXRpb24gKCQy KSk7CisgCQlsYmFnLkFkZExvY2F0aW9uICgkJCwgR2V0TG9jYXRpb24gKCQ0KSk7CisgCSAgfQor LQl8IG51bGxfY29hbGVzY2luZ19leHByZXNzaW9uIElOVEVSUiBleHByZXNzaW9uIENPTE9OIENM T1NFX0JSQUNFCisrCXwgbnVsbF9jb2FsZXNjaW5nX2V4cHJlc3Npb24gSU5URVJSIGNvbmRpdGlv bmFsX29wZXJfZXhwciBDT0xPTiBDTE9TRV9CUkFDRQorIAkgIHsKKyAJCUVycm9yX1N5bnRheEVy cm9yIChUb2tlbi5DTE9TRV9CUkFDRSk7CisgCitAQCAtNTMwOCw3ICs1MzYzLDcgQEAgbGFtYmRh X2V4cHJlc3Npb24KKyAJICB9CisgCXwgT1BFTl9QQVJFTlNfTEFNQkRBCisgCSAgeworLQkgIAl2 YWxpZF9wYXJhbV9tb2QgPSBQYXJhbWV0ZXJNb2RpZmllclR5cGUuUmVmIHwgUGFyYW1ldGVyTW9k aWZpZXJUeXBlLk91dDsKKysJCXZhbGlkX3BhcmFtX21vZCA9IFBhcmFtZXRlck1vZGlmaWVyVHlw ZS5SZWYgfCBQYXJhbWV0ZXJNb2RpZmllclR5cGUuT3V0IHwgUGFyYW1ldGVyTW9kaWZpZXJUeXBl LlJlYWRPbmx5OworIAkgIH0KKyAJICBvcHRfbGFtYmRhX3BhcmFtZXRlcl9saXN0IENMT1NFX1BB UkVOUyBBUlJPVyAKKyAJICB7CitAQCAtNTMyMiw3ICs1Mzc3LDcgQEAgbGFtYmRhX2V4cHJlc3Np b24KKyAJICB9CisgCXwgQVNZTkMgT1BFTl9QQVJFTlNfTEFNQkRBCisgCSAgeworLQkgIAl2YWxp ZF9wYXJhbV9tb2QgPSBQYXJhbWV0ZXJNb2RpZmllclR5cGUuUmVmIHwgUGFyYW1ldGVyTW9kaWZp ZXJUeXBlLk91dDsJICAKKysJCXZhbGlkX3BhcmFtX21vZCA9IFBhcmFtZXRlck1vZGlmaWVyVHlw ZS5SZWYgfCBQYXJhbWV0ZXJNb2RpZmllclR5cGUuT3V0IHwgUGFyYW1ldGVyTW9kaWZpZXJUeXBl LlJlYWRPbmx5OworIAkgIH0KKyAJICBvcHRfbGFtYmRhX3BhcmFtZXRlcl9saXN0IENMT1NFX1BB UkVOUyBBUlJPVyAKKyAJICB7CitAQCAtNTUyMiwxMCArNTU3NywxNyBAQCBtb2RpZmllcnMKKyAJ CWlmICgobTEgJiBtMikgIT0gMCkgeworIAkJCXJlcG9ydC5FcnJvciAoMTAwNCwgbGV4ZXIuTG9j YXRpb24gLSBNb2RpZmllcnNFeHRlbnNpb25zLk5hbWUgKG0yKS5MZW5ndGgsCisgCQkJCSJEdXBs aWNhdGUgYHswfScgbW9kaWZpZXIiLCBNb2RpZmllcnNFeHRlbnNpb25zLk5hbWUgKG0yKSk7Cist CQl9IGVsc2UgaWYgKChtMiAmIE1vZGlmaWVycy5BY2Nlc3NpYmlsaXR5TWFzaykgIT0gMCAmJiAo bTEgJiBNb2RpZmllcnMuQWNjZXNzaWJpbGl0eU1hc2spICE9IDAgJiYKKy0JCQkoKG0yIHwgbTEg JiBNb2RpZmllcnMuQWNjZXNzaWJpbGl0eU1hc2spICE9IChNb2RpZmllcnMuUFJPVEVDVEVEIHwg TW9kaWZpZXJzLklOVEVSTkFMKSkpIHsKKy0JCQlyZXBvcnQuRXJyb3IgKDEwNywgbGV4ZXIuTG9j YXRpb24gLSBNb2RpZmllcnNFeHRlbnNpb25zLk5hbWUgKG0yKS5MZW5ndGgsCistCQkJCSJNb3Jl IHRoYW4gb25lIHByb3RlY3Rpb24gbW9kaWZpZXIgc3BlY2lmaWVkIik7CisrCQl9IGVsc2UgaWYg KChtMiAmIE1vZGlmaWVycy5BY2Nlc3NpYmlsaXR5TWFzaykgIT0gMCAmJiAobTEgJiBNb2RpZmll cnMuQWNjZXNzaWJpbGl0eU1hc2spICE9IDApIHsKKysJCQl2YXIgYWNjZXNzaWJpbGl0eSA9ICht MiB8IG0xICYgTW9kaWZpZXJzLkFjY2Vzc2liaWxpdHlNYXNrKTsKKysKKysJCQlpZiAoYWNjZXNz aWJpbGl0eSA9PSAoTW9kaWZpZXJzLlBSSVZBVEUgfCBNb2RpZmllcnMuUFJPVEVDVEVEKSkgewor KwkJCQlpZiAobGFuZ192ZXJzaW9uIDwgTGFuZ3VhZ2VWZXJzaW9uLlZfN18yKSB7CisrCQkJCQlG ZWF0dXJlSXNOb3RBdmFpbGFibGUgKGxleGVyLkxvY2F0aW9uLCAicHJpdmF0ZSBwcm90ZWN0ZWQi KTsKKysJCQkJfQorKwkJCX0gZWxzZSBpZiAoYWNjZXNzaWJpbGl0eSAhPSAoTW9kaWZpZXJzLlBS T1RFQ1RFRCB8IE1vZGlmaWVycy5JTlRFUk5BTCkpIHsKKysJCQkJcmVwb3J0LkVycm9yICgxMDcs IGxleGVyLkxvY2F0aW9uIC0gTW9kaWZpZXJzRXh0ZW5zaW9ucy5OYW1lIChtMikuTGVuZ3RoLAor KwkJCQkJIk1vcmUgdGhhbiBvbmUgcHJvdGVjdGlvbiBtb2RpZmllciBzcGVjaWZpZWQiKTsKKysJ CQl9CisgCQl9CisgCQkKKyAJCSQkID0gbTEgfCBtMjsKK0BAIC02MjIzLDExICs2Mjg1LDI4IEBA IGJsb2NrX3ZhcmlhYmxlX2luaXRpYWxpemVyCisgCXwgU1RBQ0tBTExPQyBzaW1wbGVfdHlwZQor IAkgIHsKKyAJCXJlcG9ydC5FcnJvciAoMTU3NSwgR2V0TG9jYXRpb24gKCQxKSwgIkEgc3RhY2th bGxvYyBleHByZXNzaW9uIHJlcXVpcmVzIFtdIGFmdGVyIHR5cGUiKTsKKy0JCSQkID0gbmV3IFN0 YWNrQWxsb2MgKChFeHByZXNzaW9uKSAkMiwgbnVsbCwgR2V0TG9jYXRpb24gKCQxKSk7CQkKKysJ CSQkID0gbmV3IFN0YWNrQWxsb2MgKChFeHByZXNzaW9uKSAkMiwgbnVsbCwgR2V0TG9jYXRpb24g KCQxKSk7CisgCSAgfQorIAl8IHJlZmVyZW5jZV9leHByZXNzaW9uCisgCTsKKyAKKytzdGFja2Fs bG9jX2V4cHJlc3Npb24KKysJOiBTVEFDS0FMTE9DIHNpbXBsZV90eXBlIE9QRU5fQlJBQ0tFVF9F WFBSIGV4cHJlc3Npb24gQ0xPU0VfQlJBQ0tFVAorKwkgIHsKKysJCWlmIChsYW5nX3ZlcnNpb24g PCBMYW5ndWFnZVZlcnNpb24uVl83XzIpIHsKKysJCQlGZWF0dXJlSXNOb3RBdmFpbGFibGUgKEdl dExvY2F0aW9uICgkMSksICJyZWYgc3RydWN0cyIpOworKwkJfQorKworKwkJJCQgPSBuZXcgU3Bh blN0YWNrQWxsb2MgKChFeHByZXNzaW9uKSAkMiwgKEV4cHJlc3Npb24pICQ0LCBHZXRMb2NhdGlv biAoJDEpKTsKKysJCWxiYWcuQWRkTG9jYXRpb24gKCQkLCBHZXRMb2NhdGlvbiAoJDMpLCBHZXRM b2NhdGlvbiAoJDUpKTsKKysJICB9CisrCXwgU1RBQ0tBTExPQyBzaW1wbGVfdHlwZQorKwkgIHsK KysJCXJlcG9ydC5FcnJvciAoMTU3NSwgR2V0TG9jYXRpb24gKCQxKSwgIkEgc3RhY2thbGxvYyBl eHByZXNzaW9uIHJlcXVpcmVzIFtdIGFmdGVyIHR5cGUiKTsKKysJCSQkID0gbmV3IFN0YWNrQWxs b2MgKChFeHByZXNzaW9uKSAkMiwgbnVsbCwgR2V0TG9jYXRpb24gKCQxKSk7CisrCSAgfQorKwk7 CisrCisgcmVmZXJlbmNlX2V4cHJlc3Npb24KKyAJOiBSRUYgZXhwcmVzc2lvbgorIAkgIHsKK0BA IC03Njk5LDcgKzc3NzgsNyBAQCBkb2NfY3JlZgorIAkgIH0KKyAJfCBkb2NfdHlwZV9kZWNsYXJh dGlvbl9uYW1lIERPVCBUSElTIE9QRU5fQlJBQ0tFVAorIAkgIHsKKy0JCXZhbGlkX3BhcmFtX21v ZCA9IFBhcmFtZXRlck1vZGlmaWVyVHlwZS5SZWYgfCBQYXJhbWV0ZXJNb2RpZmllclR5cGUuT3V0 OworKwkJdmFsaWRfcGFyYW1fbW9kID0gUGFyYW1ldGVyTW9kaWZpZXJUeXBlLlJlZiB8IFBhcmFt ZXRlck1vZGlmaWVyVHlwZS5PdXQgfCBQYXJhbWV0ZXJNb2RpZmllclR5cGUuUmVhZE9ubHk7Cisg CSAgfQorIAkgIG9wdF9kb2NfcGFyYW1ldGVycyBDTE9TRV9CUkFDS0VUCisgCSAgeworQEAgLTc3 NDMsNyArNzgyMiw3IEBAIG9wdF9kb2NfbWV0aG9kX3NpZworIAk6IC8qIGVtcHR5ICovCisgCXwg T1BFTl9QQVJFTlMKKyAJICB7CistCQl2YWxpZF9wYXJhbV9tb2QgPSBQYXJhbWV0ZXJNb2RpZmll clR5cGUuUmVmIHwgUGFyYW1ldGVyTW9kaWZpZXJUeXBlLk91dDsKKysJCXZhbGlkX3BhcmFtX21v ZCA9IFBhcmFtZXRlck1vZGlmaWVyVHlwZS5SZWYgfCBQYXJhbWV0ZXJNb2RpZmllclR5cGUuT3V0 IHwgUGFyYW1ldGVyTW9kaWZpZXJUeXBlLlJlYWRPbmx5OworIAkgIH0KKyAJICBvcHRfZG9jX3Bh cmFtZXRlcnMgQ0xPU0VfUEFSRU5TCisgCSAgeworQEAgLTc5NTEsNiArODAzMCwxNCBAQCBzdGF0 aWMgYm9vbCBJc1VuYXJ5T3BlcmF0b3IgKE9wZXJhdG9yLk9wVHlwZSBvcCkKKyAJcmV0dXJuIGZh bHNlOworIH0KKyAKKytzdGF0aWMgU3RhdGVtZW50IENyZWF0ZUV4cHJlc3Npb25Cb2RpZWRTdGF0 ZW1lbnQgKEV4cHJlc3Npb24gZXhwcikKKyt7CisrCWlmIChleHByIGlzIFRocm93RXhwcmVzc2lv biB0ZSkKKysJCXJldHVybiBuZXcgU3RhdGVtZW50RXhwcmVzc2lvbiAodGUpOworKworKwlyZXR1 cm4gbmV3IENvbnRleHR1YWxSZXR1cm4gKGV4cHIpOworK30KKysKKyB2b2lkIHN5bnRheF9lcnJv ciAoTG9jYXRpb24gbCwgc3RyaW5nIG1zZykKKyB7CisgCXJlcG9ydC5FcnJvciAoMTAwMywgbCwg IlN5bnRheCBlcnJvciwgIiArIG1zZyk7CitAQCAtODQzMCw2ICs4NTE3LDggQEAgc3RhdGljIHN0 cmluZyBHZXRUb2tlbk5hbWUgKGludCB0b2tlbikKKyAJY2FzZSBUb2tlbi5SRUFET05MWToKKyAJ CXJldHVybiAicmVhZG9ubHkiOworIAljYXNlIFRva2VuLlJFRjoKKysJY2FzZSBUb2tlbi5SRUZf U1RSVUNUOgorKwljYXNlIFRva2VuLlJFRl9QQVJUSUFMOgorIAkJcmV0dXJuICJyZWYiOworIAlj YXNlIFRva2VuLlJFVFVSTjoKKyAJCXJldHVybiAicmV0dXJuIjsKK0BAIC04NDQ0LDcgKzg1MzMs NiBAQCBzdGF0aWMgc3RyaW5nIEdldFRva2VuTmFtZSAoaW50IHRva2VuKQorIAljYXNlIFRva2Vu LlNUQVRJQzoKKyAJCXJldHVybiAic3RhdGljIjsKKyAJY2FzZSBUb2tlbi5TVFJVQ1Q6CistCWNh c2UgVG9rZW4uUkVGX1NUUlVDVDoKKyAJCXJldHVybiAic3RydWN0IjsKKyAJY2FzZSBUb2tlbi5T V0lUQ0g6CisgCQlyZXR1cm4gInN3aXRjaCI7CitkaWZmIC0tZ2l0IGEvbWNzL21jcy9jcy10b2tl bml6ZXIuY3MgYi9tY3MvbWNzL2NzLXRva2VuaXplci5jcworaW5kZXggMzdlZGI1YzEyMjQuLmRi NWJhMWYxZjFiIDEwMDY0NAorLS0tIGEvbWNzL21jcy9jcy10b2tlbml6ZXIuY3MKKysrKyBiL21j cy9tY3MvY3MtdG9rZW5pemVyLmNzCitAQCAtODI1LDggKzgyNSw3IEBAIG5hbWVzcGFjZSBNb25v LkNTaGFycAorIAkJCQkJbmV4dF90b2tlbiA9PSBUb2tlbi5DTEFTUyB8fAorIAkJCQkJbmV4dF90 b2tlbiA9PSBUb2tlbi5TVFJVQ1QgfHwKKyAJCQkJCW5leHRfdG9rZW4gPT0gVG9rZW4uSU5URVJG QUNFIHx8CistCQkJCQluZXh0X3Rva2VuID09IFRva2VuLlZPSUQgfHwKKy0JCQkJCW5leHRfdG9r ZW4gPT0gVG9rZW4uUkVGX1NUUlVDVDsKKysJCQkJCW5leHRfdG9rZW4gPT0gVG9rZW4uVk9JRDsK KyAKKyAJCQkJUG9wUG9zaXRpb24gKCk7CisgCitAQCAtOTE2LDE0ICs5MTUsMjAgQEAgbmFtZXNw YWNlIE1vbm8uQ1NoYXJwCisgCisgCQkJCWJyZWFrOworIAkJCWNhc2UgVG9rZW4uUkVGOgorLQkJ CQlpZiAocGVla190b2tlbiAoKSA9PSBUb2tlbi5TVFJVQ1QpIHsKKysJCQkJdmFyIHBwID0gcGVl a190b2tlbiAoKTsKKysJCQkJc3dpdGNoIChwcCkgeworKwkJCQljYXNlIFRva2VuLlNUUlVDVDoK KyAJCQkJCXRva2VuICgpOworIAkJCQkJcmVzID0gVG9rZW4uUkVGX1NUUlVDVDsKKysJCQkJCWJy ZWFrOworKwkJCQljYXNlIFRva2VuLlBBUlRJQUw6CisrCQkJCQl0b2tlbiAoKTsKKysJCQkJCXJl cyA9IFRva2VuLlJFRl9QQVJUSUFMOworKwkJCQkJYnJlYWs7CisgCQkJCX0KKyAJCQkJYnJlYWs7 CisgCQkJfQorIAorLQorIAkJCXJldHVybiByZXM7CisgCQl9CisgCitAQCAtMTIxMiw2ICsxMjE3 LDcgQEAgbmFtZXNwYWNlIE1vbm8uQ1NoYXJwCisgCisgCQkJCWNhc2UgVG9rZW4uUkVGOgorIAkJ CQljYXNlIFRva2VuLk9VVDoKKysJCQkJY2FzZSBUb2tlbi5JTjoKKyAJCQkJCWNhbl9iZV90eXBl ID0gaXNfdHlwZSA9IGZhbHNlOworIAkJCQkJY29udGludWU7CisgCitAQCAtMTQwNiw2ICsxNDEy LDggQEAgbmFtZXNwYWNlIE1vbm8uQ1NoYXJwCisgCQkJY2FzZSBUb2tlbi5JTlRFUlBPTEFURURf U1RSSU5HOgorIAkJCWNhc2UgVG9rZW4uVEhST1c6CisgCQkJY2FzZSBUb2tlbi5ERUZBVUxUX0NP TE9OOgorKwkJCWNhc2UgVG9rZW4uUkVGOgorKwkJCWNhc2UgVG9rZW4uU1RBQ0tBTExPQzoKKyAJ CQkJbmV4dF90b2tlbiA9IFRva2VuLklOVEVSUjsKKyAJCQkJYnJlYWs7CisgCQkJCQorQEAgLTE1 NjcsMjggKzE1NzUsNTMgQEAgbmFtZXNwYWNlIE1vbm8uQ1NoYXJwCisgCQl7CisgCQkJaW50IGQ7 CisgCQkJYm9vbCBzZWVuX2RpZ2l0cyA9IGZhbHNlOworLQkJCQorLQkJCWlmIChjICE9IC0xKXsK KysJCQlib29sIGRpZ2l0X3NlcGFyYXRvciA9IGZhbHNlOworKwkJCWludCBwcmV2ID0gYzsKKysJ CQl2YXIgbG9jID0gTG9jYXRpb247CisrCisrCQkJaWYgKHByZXYgIT0gLTEpeworIAkJCQlpZiAo bnVtYmVyX3BvcyA9PSBNYXhOdW1iZXJMZW5ndGgpCisgCQkJCQlFcnJvcl9OdW1lcmljQ29uc3Rh bnRUb29Mb25nICgpOworLQkJCQludW1iZXJfYnVpbGRlciBbbnVtYmVyX3BvcysrXSA9IChjaGFy KSBjOworKwkJCQludW1iZXJfYnVpbGRlciBbbnVtYmVyX3BvcysrXSA9IChjaGFyKSBwcmV2Owor IAkJCX0KKy0JCQkKKysKKyAJCQkvLworIAkJCS8vIFdlIHVzZSBwZWVrX2NoYXIyLCBiZWNhdXNl IGRlY2ltYWxfZGlnaXRzIG5lZWRzIHRvIGRvIGEgCisgCQkJLy8gMi1jaGFyYWN0ZXIgbG9vay1h aGVhZCAoNS5Ub1N0cmluZyBmb3IgZXhhbXBsZSkuCisgCQkJLy8KKyAJCQl3aGlsZSAoKGQgPSBw ZWVrX2NoYXIyICgpKSAhPSAtMSl7CistCQkJCWlmIChkID49ICcwJyAmJiBkIDw9ICc5Jyl7Cisr CQkJCWlmIChkID49ICcwJyAmJiBkIDw9ICc5JykgeworIAkJCQkJaWYgKG51bWJlcl9wb3MgPT0g TWF4TnVtYmVyTGVuZ3RoKQorIAkJCQkJCUVycm9yX051bWVyaWNDb25zdGFudFRvb0xvbmcgKCk7 CistCQkJCQludW1iZXJfYnVpbGRlciBbbnVtYmVyX3BvcysrXSA9IChjaGFyKSBkOworLQkJCQkJ Z2V0X2NoYXIgKCk7CisrCQkJCQludW1iZXJfYnVpbGRlciBbbnVtYmVyX3BvcysrXSA9IChjaGFy KWQ7CisrCQkJCQlwcmV2ID0gZ2V0X2NoYXIgKCk7CisgCQkJCQlzZWVuX2RpZ2l0cyA9IHRydWU7 CistCQkJCX0gZWxzZQorLQkJCQkJYnJlYWs7CisrCQkJCQljb250aW51ZTsKKysJCQkJfSBlbHNl IGlmIChkID09ICdfJykgeworKwkJCQkJaWYgKCFkaWdpdF9zZXBhcmF0b3IpIHsKKysJCQkJCQlp ZiAoY29udGV4dC5TZXR0aW5ncy5WZXJzaW9uIDwgTGFuZ3VhZ2VWZXJzaW9uLlZfNykKKysJCQkJ CQkJUmVwb3J0LkZlYXR1cmVJc05vdEF2YWlsYWJsZSAoY29udGV4dCwgTG9jYXRpb24sICJkaWdp dCBzZXBhcmF0b3JzIik7CisrCisrCQkJCQkJZGlnaXRfc2VwYXJhdG9yID0gdHJ1ZTsKKysJCQkJ CX0KKysKKysJCQkJCWlmIChwcmV2ID09ICcuJykKKysJCQkJCQlicmVhazsKKysKKysJCQkJCWlm IChwcmV2ID09ICdlJyB8fCBwcmV2ID09ICdFJykKKysJCQkJCQlFcnJvcl9JbnZhbGlkTnVtYmVy ICgpOworKworKwkJCQkJcHJldiA9IGdldF9jaGFyKCk7CisrCQkJCQljb250aW51ZTsKKysJCQkJ fQorKworKwkJCQlicmVhazsKKyAJCQl9CisgCQkJCisrCQkJaWYgKHByZXYgPT0gJ18nKSB7Cisr CQkJCUVycm9yX0ludmFsaWROdW1iZXIgKCk7CisrCQkJfQorKworIAkJCXJldHVybiBzZWVuX2Rp Z2l0czsKKyAJCX0KKyAKK0BAIC0xNzE2LDkgKzE3NDksOCBAQCBuYW1lc3BhY2UgTW9uby5DU2hh cnAKKyAJCQl9IGNhdGNoIChPdmVyZmxvd0V4Y2VwdGlvbikgeworIAkJCQlFcnJvcl9OdW1lcmlj Q29uc3RhbnRUb29Mb25nICgpOworIAkJCQlyZXR1cm4gbmV3IEludExpdGVyYWwgKGNvbnRleHQu QnVpbHRpblR5cGVzLCAwLCBsb2MpOworLQkJCX0KKy0JCQljYXRjaCAoRm9ybWF0RXhjZXB0aW9u KSB7CistCQkJCVJlcG9ydC5FcnJvciAoMTAxMywgTG9jYXRpb24sICJJbnZhbGlkIG51bWJlciIp OworKwkJCX0gY2F0Y2ggKEZvcm1hdEV4Y2VwdGlvbikgeworKwkJCQlFcnJvcl9JbnZhbGlkTnVt YmVyICgpOworIAkJCQlyZXR1cm4gbmV3IEludExpdGVyYWwgKGNvbnRleHQuQnVpbHRpblR5cGVz LCAwLCBsb2MpOworIAkJCX0KKyAJCX0KK0BAIC0xNzU3LDE0ICsxNzg5LDQxIEBAIG5hbWVzcGFj ZSBNb25vLkNTaGFycAorIAkJeworIAkJCWludCBkOworIAkJCXVsb25nIHVsOworLQkJCQorLQkJ CWdldF9jaGFyICgpOworKwkJCWJvb2wgZGlnaXRfc2VwYXJhdG9yID0gZmFsc2U7CisrCQkJaW50 IHByZXYgPSBnZXRfY2hhciAoKTsKKysKKyAJCQl3aGlsZSAoKGQgPSBwZWVrX2NoYXIgKCkpICE9 IC0xKXsKKyAJCQkJaWYgKGlzX2hleCAoZCkpeworIAkJCQkJbnVtYmVyX2J1aWxkZXIgW251bWJl cl9wb3MrK10gPSAoY2hhcikgZDsKKyAJCQkJCWdldF9jaGFyICgpOworLQkJCQl9IGVsc2UKKy0J CQkJCWJyZWFrOworKworKwkJCQkJcHJldiA9IGQ7CisrCQkJCQljb250aW51ZTsKKysJCQkJfQor KworKwkJCQlpZiAoZCA9PSAnXycpIHsKKysJCQkJCWlmIChwcmV2ID09ICd4JyB8fCBwcmV2ID09 ICdYJykKKysJCQkJCQlFcnJvcl9JbnZhbGlkTnVtYmVyICgpOworKworKwkJCQkJZ2V0X2NoYXIg KCk7CisrCisrCQkJCQlpZiAoIWRpZ2l0X3NlcGFyYXRvcikgeworKwkJCQkJCWlmIChjb250ZXh0 LlNldHRpbmdzLlZlcnNpb24gPCBMYW5ndWFnZVZlcnNpb24uVl83KQorKwkJCQkJCQlSZXBvcnQu RmVhdHVyZUlzTm90QXZhaWxhYmxlIChjb250ZXh0LCBMb2NhdGlvbiwgImRpZ2l0IHNlcGFyYXRv cnMiKTsKKysKKysJCQkJCQlkaWdpdF9zZXBhcmF0b3IgPSB0cnVlOworKwkJCQkJfQorKworKwkJ CQkJcHJldiA9IGQ7CisrCQkJCQljb250aW51ZTsKKysJCQkJfQorKworKwkJCQlicmVhazsKKysJ CQl9CisrCisrCQkJaWYgKG51bWJlcl9wb3MgPT0gMCB8fCBwcmV2ID09ICdfJykgeworKwkJCQlF cnJvcl9JbnZhbGlkTnVtYmVyICgpOworKwkJCQlyZXR1cm4gbmV3IEludExpdGVyYWwgKGNvbnRl eHQuQnVpbHRpblR5cGVzLCAwLCBsb2MpOworIAkJCX0KKyAJCQkKKyAJCQlzdHJpbmcgcyA9IG5l dyBTdHJpbmcgKG51bWJlcl9idWlsZGVyLCAwLCBudW1iZXJfcG9zKTsKK0BAIC0xNzc5LDEzICsx ODM4LDY1IEBAIG5hbWVzcGFjZSBNb25vLkNTaGFycAorIAkJCX0gY2F0Y2ggKE92ZXJmbG93RXhj ZXB0aW9uKXsKKyAJCQkJRXJyb3JfTnVtZXJpY0NvbnN0YW50VG9vTG9uZyAoKTsKKyAJCQkJcmV0 dXJuIG5ldyBJbnRMaXRlcmFsIChjb250ZXh0LkJ1aWx0aW5UeXBlcywgMCwgbG9jKTsKKy0JCQl9 CistCQkJY2F0Y2ggKEZvcm1hdEV4Y2VwdGlvbikgeworLQkJCQlSZXBvcnQuRXJyb3IgKDEwMTMs IExvY2F0aW9uLCAiSW52YWxpZCBudW1iZXIiKTsKKysJCQl9IGNhdGNoIChGb3JtYXRFeGNlcHRp b24pIHsKKysJCQkJRXJyb3JfSW52YWxpZE51bWJlciAoKTsKKyAJCQkJcmV0dXJuIG5ldyBJbnRM aXRlcmFsIChjb250ZXh0LkJ1aWx0aW5UeXBlcywgMCwgbG9jKTsKKyAJCQl9CisgCQl9CisgCisr CQlJTGl0ZXJhbENvbnN0YW50IGhhbmRsZV9iaW5hcnkgKExvY2F0aW9uIGxvYykKKysJCXsKKysJ CQlpbnQgZDsKKysJCQl1bG9uZyB1bCA9IDA7CisrCQkJYm9vbCBkaWdpdF9zZXBhcmF0b3IgPSBm YWxzZTsKKysJCQlpbnQgZGlnaXRzID0gMDsKKysJCQlpbnQgcHJldiA9IGdldF9jaGFyICgpOwor KworKwkJCXdoaWxlICgoZCA9IHBlZWtfY2hhciAoKSkgIT0gLTEpeworKworKwkJCQlpZiAoZCA9 PSAnMCcgfHwgZCA9PSAnMScpIHsKKysJCQkJCXVsID0gKHVsIDw8IDEpOworKwkJCQkJZGlnaXRz Kys7CisrCQkJCQlpZiAoZCA9PSAnMScpCisrCQkJCQkJdWwgfD0gMTsKKysJCQkJCWdldF9jaGFy ICgpOworKwkJCQkJaWYgKGRpZ2l0cyA+IDY0KSB7CisrCQkJCQkJRXJyb3JfTnVtZXJpY0NvbnN0 YW50VG9vTG9uZyAoKTsKKysJCQkJCQlyZXR1cm4gbmV3IEludExpdGVyYWwgKGNvbnRleHQuQnVp bHRpblR5cGVzLCAwLCBsb2MpOworKwkJCQkJfQorKworKwkJCQkJcHJldiA9IGQ7CisrCQkJCQlj b250aW51ZTsKKysJCQkJfQorKworKwkJCQlpZiAoZCA9PSAnXycpIHsKKysJCQkJCWlmIChwcmV2 ID09ICdiJyB8fCBwcmV2ID09ICdCJykKKysJCQkJCQlFcnJvcl9JbnZhbGlkTnVtYmVyICgpOwor KworKwkJCQkJZ2V0X2NoYXIgKCk7CisrCisrCQkJCQlpZiAoIWRpZ2l0X3NlcGFyYXRvcikgewor KwkJCQkJCWlmIChjb250ZXh0LlNldHRpbmdzLlZlcnNpb24gPCBMYW5ndWFnZVZlcnNpb24uVl83 KQorKwkJCQkJCQlSZXBvcnQuRmVhdHVyZUlzTm90QXZhaWxhYmxlIChjb250ZXh0LCBMb2NhdGlv biwgImRpZ2l0IHNlcGFyYXRvcnMiKTsKKysJCQkJCQkKKysJCQkJCQlkaWdpdF9zZXBhcmF0b3Ig PSB0cnVlOworKwkJCQkJfQorKworKwkJCQkJcHJldiA9IGQ7CisrCQkJCQljb250aW51ZTsKKysJ CQkJfQorKwkJCQkgCisrCQkJCWJyZWFrOworKwkJCX0KKysKKysJCQlpZiAoZGlnaXRzID09IDAg fHwgcHJldiA9PSAnXycpIHsKKysJCQkJRXJyb3JfSW52YWxpZE51bWJlciAoKTsKKysJCQkJcmV0 dXJuIG5ldyBJbnRMaXRlcmFsIChjb250ZXh0LkJ1aWx0aW5UeXBlcywgMCwgbG9jKTsKKysJCQl9 CisrCisrCQkJcmV0dXJuIGludGVnZXJfdHlwZV9zdWZmaXggKHVsLCBwZWVrX2NoYXIgKCksIGxv Yyk7CisrCQl9CisrCQkKKyAJCS8vCisgCQkvLyBJbnZva2VkIGlmIHdlIGtub3cgd2UgaGF2ZSAu ZGlnaXRzIG9yIGRpZ2l0cworIAkJLy8KK0BAIC0xODE3LDcgKzE5MjgsMjAgQEAgbmFtZXNwYWNl IE1vbm8uQ1NoYXJwCisgCisgCQkJCQkJcmV0dXJuIFRva2VuLkxJVEVSQUw7CisgCQkJCQl9Cisr CisrCQkJCQlpZiAocGVlayA9PSAnYicgfHwgcGVlayA9PSAnQicpeworKwkJCQkJCWlmIChjb250 ZXh0LlNldHRpbmdzLlZlcnNpb24gPCBMYW5ndWFnZVZlcnNpb24uVl83KQorKwkJCQkJCQlSZXBv cnQuRmVhdHVyZUlzTm90QXZhaWxhYmxlIChjb250ZXh0LCBMb2NhdGlvbiwgImJpbmFyeSBsaXRl cmFscyIpOworKworKwkJCQkJCXZhbCA9IHJlcyA9IGhhbmRsZV9iaW5hcnkgKGxvYyk7CisrI2lm IEZVTExfQVNUCisrCQkJCQkJcmVzLlBhcnNlZFZhbHVlID0gcmVhZGVyLlJlYWRDaGFycyAocmVh ZF9zdGFydCwgcmVhZGVyLlBvc2l0aW9uIC0gMSk7CisrI2VuZGlmCisrCisrCQkJCQkJcmV0dXJu IFRva2VuLkxJVEVSQUw7CisrCQkJCQl9CisgCQkJCX0KKysKKyAJCQkJZGVjaW1hbF9kaWdpdHMg KGMpOworIAkJCQljID0gcGVla19jaGFyICgpOworIAkJCX0KK0BAIC0xODY5LDcgKzE5OTMsNyBA QCBuYW1lc3BhY2UgTW9uby5DU2hhcnAKKyAJCQkJCQlFcnJvcl9OdW1lcmljQ29uc3RhbnRUb29M b25nICgpOworIAkJCQkJbnVtYmVyX2J1aWxkZXIgW251bWJlcl9wb3MrK10gPSAnKyc7CisgCQkJ CX0KKy0JCQkJCQorKworIAkJCQlkZWNpbWFsX2RpZ2l0cyAoYyk7CisgCQkJCWMgPSBwZWVrX2No YXIgKCk7CisgCQkJfQorQEAgLTI5NDQsNiArMzA2OCwxMSBAQCBuYW1lc3BhY2UgTW9uby5DU2hh cnAKKyAJCXsKKyAJCQlSZXBvcnQuRXJyb3IgKDEwMjEsIExvY2F0aW9uLCAiSW50ZWdyYWwgY29u c3RhbnQgaXMgdG9vIGxhcmdlIik7CQkJCisgCQl9CisrCisrCQl2b2lkIEVycm9yX0ludmFsaWRO dW1iZXIgKCkKKysJCXsKKysJCQlSZXBvcnQuRXJyb3IgKDEwMTMsIExvY2F0aW9uLCAiSW52YWxp ZCBudW1iZXIiKTsKKysJCX0KKyAJCQorIAkJdm9pZCBFcnJvcl9JbnZhbGlkRGlyZWN0aXZlICgp CisgCQl7CitkaWZmIC0tZ2l0IGEvbWNzL21jcy9lY29yZS5jcyBiL21jcy9tY3MvZWNvcmUuY3MK K2luZGV4IDIwZWU5ZTczYjE5Li5kNTkyNmJmNGQxZiAxMDA2NDQKKy0tLSBhL21jcy9tY3MvZWNv cmUuY3MKKysrKyBiL21jcy9tY3MvZWNvcmUuY3MKK0BAIC0yNDEsNyArMjQxLDcgQEAgbmFtZXNw YWNlIE1vbm8uQ1NoYXJwIHsKKyAKKyAJCXByb3RlY3RlZCB2b2lkIENoZWNrRXhwcmVzc2lvblZh cmlhYmxlIChSZXNvbHZlQ29udGV4dCByYykKKyAJCXsKKy0JCQlpZiAocmMuSGFzQW55IChSZXNv bHZlQ29udGV4dC5PcHRpb25zLkJhc2VJbml0aWFsaXplciB8IFJlc29sdmVDb250ZXh0Lk9wdGlv bnMuRmllbGRJbml0aWFsaXplclNjb3BlKSkgeworKwkJCWlmIChyYy5IYXNBbnkgKFJlc29sdmVD b250ZXh0Lk9wdGlvbnMuQmFzZUluaXRpYWxpemVyIHwgUmVzb2x2ZUNvbnRleHQuT3B0aW9ucy5G aWVsZEluaXRpYWxpemVyU2NvcGUpICYmIHJjLkN1cnJlbnRBbm9ueW1vdXNNZXRob2QgPT0gbnVs bCkgeworIAkJCQlyYy5SZXBvcnQuRXJyb3IgKDgyMDAsIGxvYywgIk91dCB2YXJpYWJsZSBhbmQg cGF0dGVybiB2YXJpYWJsZSBkZWNsYXJhdGlvbnMgYXJlIG5vdCBhbGxvd2VkIHdpdGhpbiBjb25z dHJ1Y3RvciBpbml0aWFsaXplcnMsIGZpZWxkIGluaXRpYWxpemVycywgb3IgcHJvcGVydHkgaW5p dGlhbGl6ZXJzIik7CisgCQkJfSBlbHNlIGlmIChyYy5IYXNTZXQgKFJlc29sdmVDb250ZXh0Lk9w dGlvbnMuUXVlcnlDbGF1c2VTY29wZSkpIHsKKyAJCQkJcmMuUmVwb3J0LkVycm9yICg4MjAxLCBs b2MsICJPdXQgdmFyaWFibGUgYW5kIHBhdHRlcm4gdmFyaWFibGUgZGVjbGFyYXRpb25zIGFyZSBu b3QgYWxsb3dlZCB3aXRoaW4gYSBxdWVyeSBjbGF1c2UiKTsKK2RpZmYgLS1naXQgYS9tY3MvbWNz L2V4cHJlc3Npb24uY3MgYi9tY3MvbWNzL2V4cHJlc3Npb24uY3MKK2luZGV4IDUxOGNjYzhlZjQz Li44N2RiMTRhMGNlNyAxMDA2NDQKKy0tLSBhL21jcy9tY3MvZXhwcmVzc2lvbi5jcworKysrIGIv bWNzL21jcy9leHByZXNzaW9uLmNzCitAQCAtOTIwLDcgKzkyMCw3IEBAIG5hbWVzcGFjZSBNb25v LkNTaGFycAorIAorIAkJcHVibGljIG92ZXJyaWRlIGJvb2wgQ29udGFpbnNFbWl0V2l0aEF3YWl0 ICgpCisgCQl7CistCQkJdGhyb3cgbmV3IE5vdEltcGxlbWVudGVkRXhjZXB0aW9uICgpOworKwkJ CXJldHVybiBmYWxzZTsKKyAJCX0KKyAKKyAJCXB1YmxpYyBvdmVycmlkZSBFeHByZXNzaW9uIENy ZWF0ZUV4cHJlc3Npb25UcmVlIChSZXNvbHZlQ29udGV4dCBlYykKK0BAIC0yMDUxLDcgKzIwNTEs MTEgQEAgbmFtZXNwYWNlIE1vbm8uQ1NoYXJwCisgCisgCQkJCQkJaWYgKGQuQnVpbHRpblR5cGUg PT0gQnVpbHRpblR5cGVTcGVjLlR5cGUuRHluYW1pYykKKyAJCQkJCQkJcmV0dXJuIHRoaXM7Cist CQkJCQkJCisrCisrCQkJCQkJLy8gVE9ETzogUmVxdWlyZXMgY3VzdG9tIG9wdGltaXplZCB2ZXJz aW9uIHdpdGggdmFyaWFibGUgc3RvcmUKKysJCQkJCQlpZiAoVmFyaWFibGUgIT0gbnVsbCkKKysJ CQkJCQkJcmV0dXJuIHRoaXM7CisrCisgCQkJCQkJLy8KKyAJCQkJCQkvLyBUdXJuIGlzIGNoZWNr IGludG8gc2ltcGxlIG51bGwgY2hlY2sgZm9yIGltcGxpY2l0bHkgY29udmVydGlibGUgcmVmZXJl bmNlIHR5cGVzCisgCQkJCQkJLy8KK0BAIC0yNzU3LDYgKzI3NjEsMTIgQEAgbmFtZXNwYWNlIE1v bm8uQ1NoYXJwCisgCQkJfQorIAkJfQorIAorKwkJcHVibGljIG92ZXJyaWRlIGJvb2wgSXNOdWxs IHsKKysJCQlnZXQgeworKwkJCQlyZXR1cm4gVHlwZVNwZWMuSXNSZWZlcmVuY2VUeXBlICh0eXBl KTsKKysJCQl9CisrCQl9CisrCisgCQlwdWJsaWMgb3ZlcnJpZGUgYm9vbCBDb250YWluc0VtaXRX aXRoQXdhaXQgKCkKKyAJCXsKKyAJCQlyZXR1cm4gZmFsc2U7CitAQCAtNTY2OSw2ICs1Njc5LDEy IEBAIG5hbWVzcGFjZSBNb25vLkNTaGFycAorIAkJCQlDb252Q2FzdC5FbWl0IChlYywgZW51bV9j b252ZXJzaW9uKTsKKyAJCX0KKyAKKysJCXB1YmxpYyBvdmVycmlkZSB2b2lkIEVtaXRQcmVwYXJl IChFbWl0Q29udGV4dCBlYykKKysJCXsKKysJCQlMZWZ0LkVtaXRQcmVwYXJlIChlYyk7CisrCQkJ UmlnaHQuRW1pdFByZXBhcmUgKGVjKTsKKysJCX0KKysKKyAJCXB1YmxpYyBvdmVycmlkZSB2b2lk IEVtaXRTaWRlRWZmZWN0IChFbWl0Q29udGV4dCBlYykKKyAJCXsKKyAJCQlpZiAoKG9wZXIgJiBP cGVyYXRvci5Mb2dpY2FsTWFzaykgIT0gMCB8fAorQEAgLTYzODUsNyArNjQwMSw3IEBAIG5hbWVz cGFjZSBNb25vLkNTaGFycAorIAkJCQkJCQl9CisgCQkJCQkJfQorIAorLQkJCQkJCWlmIChjb252 X2ZhbHNlX2V4cHIgIT0gbnVsbCkgeworKwkJCQkJCWlmIChjb252X2ZhbHNlX2V4cHIgIT0gbnVs bCAmJiBmYWxzZV90eXBlICE9IEludGVybmFsVHlwZS5FcnJvclR5cGUgJiYgdHJ1ZV90eXBlICE9 IEludGVybmFsVHlwZS5FcnJvclR5cGUpIHsKKyAJCQkJCQkJZWMuUmVwb3J0LkVycm9yICgxNzIs IHRydWVfZXhwci5Mb2NhdGlvbiwKKyAJCQkJCQkJCSJUeXBlIG9mIGNvbmRpdGlvbmFsIGV4cHJl c3Npb24gY2Fubm90IGJlIGRldGVybWluZWQgYXMgYHswfScgYW5kIGB7MX0nIGNvbnZlcnQgaW1w bGljaXRseSB0byBlYWNoIG90aGVyIiwKKyAJCQkJCQkJCQl0cnVlX3R5cGUuR2V0U2lnbmF0dXJl Rm9yRXJyb3IgKCksIGZhbHNlX3R5cGUuR2V0U2lnbmF0dXJlRm9yRXJyb3IgKCkpOworQEAgLTYz OTgsNyArNjQxNCw3IEBAIG5hbWVzcGFjZSBNb25vLkNTaGFycAorIAkJCQl9IGVsc2UgaWYgKChj b252ID0gQ29udmVydC5JbXBsaWNpdENvbnZlcnNpb24gKGVjLCBmYWxzZV9leHByLCB0cnVlX3R5 cGUsIGxvYykpICE9IG51bGwpIHsKKyAJCQkJCWZhbHNlX2V4cHIgPSBjb252OworIAkJCQl9IGVs c2UgeworLQkJCQkJaWYgKGZhbHNlX3R5cGUgIT0gSW50ZXJuYWxUeXBlLkVycm9yVHlwZSkgewor KwkJCQkJaWYgKGZhbHNlX3R5cGUgIT0gSW50ZXJuYWxUeXBlLkVycm9yVHlwZSAmJiB0cnVlX3R5 cGUgIT0gSW50ZXJuYWxUeXBlLkVycm9yVHlwZSkgeworIAkJCQkJCWVjLlJlcG9ydC5FcnJvciAo MTczLCB0cnVlX2V4cHIuTG9jYXRpb24sCisgCQkJCQkJCSJUeXBlIG9mIGNvbmRpdGlvbmFsIGV4 cHJlc3Npb24gY2Fubm90IGJlIGRldGVybWluZWQgYmVjYXVzZSB0aGVyZSBpcyBubyBpbXBsaWNp dCBjb252ZXJzaW9uIGJldHdlZW4gYHswfScgYW5kIGB7MX0nIiwKKyAJCQkJCQkJdHJ1ZV90eXBl LkdldFNpZ25hdHVyZUZvckVycm9yICgpLCBmYWxzZV90eXBlLkdldFNpZ25hdHVyZUZvckVycm9y ICgpKTsKK0BAIC02NDI3LDYgKzY0NDMsMzAgQEAgbmFtZXNwYWNlIE1vbm8uQ1NoYXJwCisgCQkJ cmV0dXJuIHRoaXM7CisgCQl9CisgCisrCQlwdWJsaWMgb3ZlcnJpZGUgRXhwcmVzc2lvbiBEb1Jl c29sdmVMVmFsdWUgKFJlc29sdmVDb250ZXh0IHJjLCBFeHByZXNzaW9uIHJpZ2h0X3NpZGUpCisr CQl7CisrCQkJZXhwciA9IGV4cHIuUmVzb2x2ZSAocmMpOworKwkJCXRydWVfZXhwciA9IHRydWVf ZXhwci5SZXNvbHZlIChyYyk7CisrCQkJZmFsc2VfZXhwciA9IGZhbHNlX2V4cHIuUmVzb2x2ZSAo cmMpOworKworKwkJCWlmICh0cnVlX2V4cHIgPT0gbnVsbCB8fCBmYWxzZV9leHByID09IG51bGwg fHwgZXhwciA9PSBudWxsKQorKwkJCQlyZXR1cm4gbnVsbDsKKysJCQkKKysJCQlpZiAoISh0cnVl X2V4cHIgaXMgUmVmZXJlbmNlRXhwcmVzc2lvbiAmJiBmYWxzZV9leHByIGlzIFJlZmVyZW5jZUV4 cHJlc3Npb24pKSB7CisrCQkJCXJjLlJlcG9ydC5FcnJvciAoODMyNiwgZXhwci5Mb2NhdGlvbiwg IkJvdGggcmVmIGNvbmRpdGlvbmFsIG9wZXJhdG9ycyBtdXN0IGJlIHJlZiB2YWx1ZXMiKTsKKysJ CQkJcmV0dXJuIG51bGw7CisrCQkJfQorKworKwkJCWlmICghVHlwZVNwZWNDb21wYXJlci5Jc0Vx dWFsICh0cnVlX2V4cHIuVHlwZSwgZmFsc2VfZXhwci5UeXBlKSkgeworKwkJCQlyYy5SZXBvcnQu RXJyb3IgKDgzMjcsIHRydWVfZXhwci5Mb2NhdGlvbiwgIlRoZSByZWYgY29uZGl0aW9uYWwgZXhw cmVzc2lvbiB0eXBlcyBgezB9JyBhbmQgYHsxfScgaGF2ZSB0byBtYXRjaCIsCisrCQkJCSAgICAg ICAgICAgICAgICAgdHJ1ZV9leHByLlR5cGUuR2V0U2lnbmF0dXJlRm9yRXJyb3IgKCksIGZhbHNl X2V4cHIuVHlwZS5HZXRTaWduYXR1cmVGb3JFcnJvciAoKSk7IAorKwkJCX0KKysKKysJCQllY2xh c3MgPSBFeHByQ2xhc3MuVmFsdWU7CisrCQkJdHlwZSA9IHRydWVfZXhwci5UeXBlOworKwkJCXJl dHVybiB0aGlzOworKwkJfQorKworIAkJcHVibGljIG92ZXJyaWRlIHZvaWQgRW1pdCAoRW1pdENv bnRleHQgZWMpCisgCQl7CisgCQkJTGFiZWwgZmFsc2VfdGFyZ2V0ID0gZWMuRGVmaW5lTGFiZWwg KCk7CitAQCAtNjc3NCw3ICs2ODE0LDcgQEAgbmFtZXNwYWNlIE1vbm8uQ1NoYXJwCisgCQkJCQkJ IkNhbm5vdCB1c2UgZml4ZWQgdmFyaWFibGUgYHswfScgaW5zaWRlIGFuIGFub255bW91cyBtZXRo b2QsIGxhbWJkYSBleHByZXNzaW9uIG9yIHF1ZXJ5IGV4cHJlc3Npb24iLAorIAkJCQkJCUdldFNp Z25hdHVyZUZvckVycm9yICgpKTsKKyAJCQkJfSBlbHNlIGlmIChsb2NhbF9pbmZvLklzQnlSZWYg fHwgbG9jYWxfaW5mby5UeXBlLklzQnlSZWZMaWtlKSB7CistCQkJCQlpZiAoZWMuQ3VycmVudEFu b255bW91c01ldGhvZCBpcyBTdGF0ZU1hY2hpbmVJbml0aWFsaXplcikgeworKwkJCQkJaWYgKGxv Y2FsX2luZm8uVHlwZS5Jc1NwZWNpYWxSdW50aW1lVHlwZSB8fCBlYy5DdXJyZW50QW5vbnltb3Vz TWV0aG9kIGlzIFN0YXRlTWFjaGluZUluaXRpYWxpemVyKSB7CisgCQkJCQkJLy8gSXQncyByZXBv cnRlZCBsYXRlciBhcyA0MDEyLzQwMTMKKyAJCQkJCX0gZWxzZSB7CisgCQkJCQkJZWMuUmVwb3J0 LkVycm9yICg4MTc1LCBsb2MsCitAQCAtMTE4NzcsMTIgKzExOTE3LDE3IEBAIG5hbWVzcGFjZSBN b25vLkNTaGFycAorIAkJCWlmICghVHlwZU1hbmFnZXIuVmVyaWZ5VW5tYW5hZ2VkIChlYy5Nb2R1 bGUsIG90eXBlLCBsb2MpKQorIAkJCQlyZXR1cm4gbnVsbDsKKyAKKy0JCQl0eXBlID0gUG9pbnRl ckNvbnRhaW5lci5NYWtlVHlwZSAoZWMuTW9kdWxlLCBvdHlwZSk7CisrCQkJUmVzb2x2ZUV4cHJl c3Npb25UeXBlIChlYywgb3R5cGUpOworIAkJCWVjbGFzcyA9IEV4cHJDbGFzcy5WYWx1ZTsKKyAK KyAJCQlyZXR1cm4gdGhpczsKKyAJCX0KKyAKKysJCXByb3RlY3RlZCB2aXJ0dWFsIHZvaWQgUmVz b2x2ZUV4cHJlc3Npb25UeXBlIChSZXNvbHZlQ29udGV4dCByYywgVHlwZVNwZWMgZWxlbWVudFR5 cGUpCisrCQl7CisrCQkJdHlwZSA9IFBvaW50ZXJDb250YWluZXIuTWFrZVR5cGUgKHJjLk1vZHVs ZSwgZWxlbWVudFR5cGUpOworKwkJfQorKworIAkJcHVibGljIG92ZXJyaWRlIHZvaWQgRW1pdCAo RW1pdENvbnRleHQgZWMpCisgCQl7CisgCQkJaW50IHNpemUgPSBCdWlsdGluVHlwZVNwZWMuR2V0 U2l6ZSAob3R5cGUpOworQEAgLTExOTMxLDE0ICsxMTk3NiwzNiBAQCBuYW1lc3BhY2UgTW9uby5D U2hhcnAKKyAJCXB1YmxpYyBib29sIFJlc29sdmVTcGFuQ29udmVyc2lvbiAoUmVzb2x2ZUNvbnRl eHQgcmMsIFR5cGVTcGVjIHNwYW5UeXBlKQorIAkJeworIAkJCWN0b3IgPSBNZW1iZXJDYWNoZS5G aW5kTWVtYmVyIChzcGFuVHlwZSwgTWVtYmVyRmlsdGVyLkNvbnN0cnVjdG9yIChQYXJhbWV0ZXJz Q29tcGlsZWQuQ3JlYXRlRnVsbHlSZXNvbHZlZCAoUG9pbnRlckNvbnRhaW5lci5NYWtlVHlwZSAo cmMuTW9kdWxlLCByYy5Nb2R1bGUuQ29tcGlsZXIuQnVpbHRpblR5cGVzLlZvaWQpLCByYy5Nb2R1 bGUuQ29tcGlsZXIuQnVpbHRpblR5cGVzLkludCkpLCBCaW5kaW5nUmVzdHJpY3Rpb24uRGVjbGFy ZWRPbmx5KSBhcyBNZXRob2RTcGVjOworLQkJCWlmIChjdG9yID09IG51bGwpCisrCQkJaWYgKGN0 b3IgPT0gbnVsbCkgeworKwkJCQl0aGlzLnR5cGUgPSBJbnRlcm5hbFR5cGUuRXJyb3JUeXBlOwor IAkJCQlyZXR1cm4gZmFsc2U7CisrCQkJfQorIAkJCQorIAkJCXRoaXMudHlwZSA9IHNwYW5UeXBl OworIAkJCXJldHVybiB0cnVlOworIAkJfQorIAl9CisgCisrCWNsYXNzIFNwYW5TdGFja0FsbG9j IDogU3RhY2tBbGxvYworKwl7CisrCQlwdWJsaWMgU3BhblN0YWNrQWxsb2MgKEV4cHJlc3Npb24g dHlwZSwgRXhwcmVzc2lvbiBjb3VudCwgTG9jYXRpb24gbCkKKysJCQk6IGJhc2UgKHR5cGUsIGNv dW50LCBsKQorKwkJeworKwkJfQorKworKwkJcHJvdGVjdGVkIG92ZXJyaWRlIHZvaWQgUmVzb2x2 ZUV4cHJlc3Npb25UeXBlIChSZXNvbHZlQ29udGV4dCByYywgVHlwZVNwZWMgZWxlbWVudFR5cGUp CisrCQl7CisrCQkJdmFyIHNwYW4gPSByYy5Nb2R1bGUuUHJlZGVmaW5lZFR5cGVzLlNwYW5HZW5l cmljLlJlc29sdmUgKCk7CisrCQkJaWYgKHNwYW4gPT0gbnVsbCkgeworKwkJCQl0eXBlID0gSW50 ZXJuYWxUeXBlLkVycm9yVHlwZTsKKysJCQkJcmV0dXJuOworKwkJCX0KKysKKysJCQl0eXBlID0g c3Bhbi5NYWtlR2VuZXJpY1R5cGUgKHJjLCBuZXcgW10geyBlbGVtZW50VHlwZSB9KTsKKysJCQlS ZXNvbHZlU3BhbkNvbnZlcnNpb24gKHJjLCB0eXBlKTsKKysJCX0KKysJfQorKworIAkvLworIAkv LyBBbiBvYmplY3QgaW5pdGlhbGl6ZXIgZXhwcmVzc2lvbgorIAkvLworQEAgLTEzMDg1LDYgKzEz MTUyLDkgQEAgbmFtZXNwYWNlIE1vbm8uQ1NoYXJwCisgCQkJaWYgKGV4cHIgaXMgSUFzc2lnbk1l dGhvZCkKKyAJCQkJcmV0dXJuIHRydWU7CisgCisrCQkJaWYgKGV4cHIgaXMgQ29uZGl0aW9uYWwp CisrCQkJCXJldHVybiB0cnVlOworKworIAkJCXZhciBpbnZvY2F0aW9uID0gZXhwciBhcyBJbnZv Y2F0aW9uOworIAkJCWlmIChpbnZvY2F0aW9uPy5UeXBlLktpbmQgPT0gTWVtYmVyS2luZC5CeVJl ZikKKyAJCQkJcmV0dXJuIHRydWU7CitAQCAtMTMyMzIsNiArMTMzMDIsMTAgQEAgbmFtZXNwYWNl IE1vbm8uQ1NoYXJwCisgCQkJdGhpcy5sb2MgPSBsb2M7CisgCQl9CisgCisrCQlwcm90ZWN0ZWQg b3ZlcnJpZGUgdm9pZCBDbG9uZVRvIChDbG9uZUNvbnRleHQgY2xvbmVjdHgsIEV4cHJlc3Npb24g dCkKKysJCXsKKysJCX0KKysKKyAJCXB1YmxpYyBvdmVycmlkZSBFeHByZXNzaW9uIENyZWF0ZUV4 cHJlc3Npb25UcmVlIChSZXNvbHZlQ29udGV4dCBlYykKKyAJCXsKKyAJCQl0aHJvdyBuZXcgTm90 SW1wbGVtZW50ZWRFeGNlcHRpb24gKCk7CitkaWZmIC0tZ2l0IGEvbWNzL21jcy9maWVsZC5jcyBi L21jcy9tY3MvZmllbGQuY3MKK2luZGV4IDg2YmIwMjhkZWZjLi44YzY2NzMyODE0MyAxMDA2NDQK Ky0tLSBhL21jcy9tY3MvZmllbGQuY3MKKysrKyBiL21jcy9tY3MvZmllbGQuY3MKK0BAIC01NDIs NyArNTQyLDcgQEAgbmFtZXNwYWNlIE1vbm8uQ1NoYXJwCisgCQkJCX0KKyAJCQkpOworIAorLQkJ CWZpeGVkX2J1ZmZlcl90eXBlLlNldEN1c3RvbUF0dHJpYnV0ZSAoKENvbnN0cnVjdG9ySW5mbykg Y3Rvci5HZXRNZXRhSW5mbyAoKSwgZW5jb2Rlci5Ub0FycmF5ICgpKTsKKysJCQlmaXhlZF9idWZm ZXJfdHlwZS5TZXRDdXN0b21BdHRyaWJ1dGUgKChDb25zdHJ1Y3RvckluZm8pIGN0b3IuR2V0TWV0 YUluZm8gKCksIGVuY29kZXIuVG9BcnJheSAob3V0IF8pKTsKKyAjZW5kaWYKKyAJCQkvLworIAkJ CS8vIERvbid0IGVtaXQgRml4ZWRCdWZmZXJBdHRyaWJ1dGUgYXR0cmlidXRlIGZvciBwcml2YXRl IHR5cGVzCitAQCAtNTU5LDcgKzU1OSw4IEBAIG5hbWVzcGFjZSBNb25vLkNTaGFycAorIAkJCWVu Y29kZXIuRW5jb2RlIChidWZmZXJfc2l6ZSk7CisgCQkJZW5jb2Rlci5FbmNvZGVFbXB0eU5hbWVk QXJndW1lbnRzICgpOworIAorLQkJCUZpZWxkQnVpbGRlci5TZXRDdXN0b21BdHRyaWJ1dGUgKChD b25zdHJ1Y3RvckluZm8pIGN0b3IuR2V0TWV0YUluZm8gKCksIGVuY29kZXIuVG9BcnJheSAoKSk7 CisrCQkJRmllbGRCdWlsZGVyLlNldEN1c3RvbUF0dHJpYnV0ZSAoKENvbnN0cnVjdG9ySW5mbykg Y3Rvci5HZXRNZXRhSW5mbyAoKSwgZW5jb2Rlci5Ub0FycmF5IChvdXQgdmFyIHJlZmVyZW5jZXMp KTsKKysJCQlNb2R1bGUuQWRkQXNzZW1ibHlSZWZlcmVuY2VzIChyZWZlcmVuY2VzKTsKKyAJCX0K KyAJfQorIAorZGlmZiAtLWdpdCBhL21jcy9tY3MvZ2VuZXJpYy5jcyBiL21jcy9tY3MvZ2VuZXJp Yy5jcworaW5kZXggZWMyOTY1ZGY2M2IuLjBjNzAzMmIyMDg4IDEwMDY0NAorLS0tIGEvbWNzL21j cy9nZW5lcmljLmNzCisrKysgYi9tY3MvbWNzL2dlbmVyaWMuY3MKK0BAIC0zMzgxLDcgKzMzODEs NyBAQCBuYW1lc3BhY2UgTW9uby5DU2hhcnAgeworIAkJCQkJY29udGludWU7CisgCisgCQkJCXZh ciBib3VuZCA9IGNhbmRpZGF0ZXMgW2NpXTsKKy0JCQkJaWYgKGJvdW5kLlR5cGUgPT0gYmVzdF9j YW5kaWRhdGUpCisrCQkJCWlmIChUeXBlU3BlY0NvbXBhcmVyLklzRXF1YWwgKGJvdW5kLlR5cGUs IGJlc3RfY2FuZGlkYXRlKSkKKyAJCQkJCWNvbnRpbnVlOworIAorIAkJCQlpbnQgY2lpID0gMDsK K2RpZmYgLS1naXQgYS9tY3MvbWNzL21vZGlmaWVycy5jcyBiL21jcy9tY3MvbW9kaWZpZXJzLmNz CitpbmRleCA5MjZhYjVkMTg0OC4uMjFkZDUyYjNiMTQgMTAwNjQ0CistLS0gYS9tY3MvbWNzL21v ZGlmaWVycy5jcworKysrIGIvbWNzL21jcy9tb2RpZmllcnMuY3MKK0BAIC03NCw2ICs3NCw4IEBA IG5hbWVzcGFjZSBNb25vLkNTaGFycAorIAkJCQlyZXR1cm4gImludGVybmFsIjsKKyAJCQljYXNl IE1vZGlmaWVycy5QUklWQVRFOgorIAkJCQlyZXR1cm4gInByaXZhdGUiOworKwkJCWNhc2UgTW9k aWZpZXJzLlBSSVZBVEUgfCBNb2RpZmllcnMuUFJPVEVDVEVEOgorKwkJCQlyZXR1cm4gInByaXZh dGUgcHJvdGVjdGVkIjsKKyAJCQlkZWZhdWx0OgorIAkJCQl0aHJvdyBuZXcgTm90SW1wbGVtZW50 ZWRFeGNlcHRpb24gKG1vZC5Ub1N0cmluZyAoKSk7CisgCQkJfQorQEAgLTEyOSwxMiArMTMxLDE2 IEBAIG5hbWVzcGFjZSBNb25vLkNTaGFycAorIAkJCWlmICgobW9kQiAmIE1vZGlmaWVycy5QVUJM SUMpICE9IDApIHsKKyAJCQkJZmxhZ3MgPSBNb2RpZmllcnMuUFJPVEVDVEVEIHwgTW9kaWZpZXJz LklOVEVSTkFMIHwgTW9kaWZpZXJzLlBSSVZBVEU7CisgCQkJfSBlbHNlIGlmICgobW9kQiAmIE1v ZGlmaWVycy5QUk9URUNURUQpICE9IDApIHsKKy0JCQkJaWYgKChtb2RCICYgTW9kaWZpZXJzLklO VEVSTkFMKSAhPSAwKQorLQkJCQkJZmxhZ3MgPSBNb2RpZmllcnMuUFJPVEVDVEVEIHwgTW9kaWZp ZXJzLklOVEVSTkFMOworLQorLQkJCQlmbGFncyB8PSBNb2RpZmllcnMuUFJJVkFURTsKKy0JCQl9 IGVsc2UgaWYgKChtb2RCICYgTW9kaWZpZXJzLklOVEVSTkFMKSAhPSAwKQorKwkJCQlpZiAoKG1v ZEIgJiBNb2RpZmllcnMuSU5URVJOQUwpICE9IDApIHsKKysJCQkJCWZsYWdzID0gTW9kaWZpZXJz LlBST1RFQ1RFRCB8IE1vZGlmaWVycy5JTlRFUk5BTCB8IE1vZGlmaWVycy5QUklWQVRFOworKwkJ CQl9IGVsc2UgeworKwkJCQkJbW9kQSAmPSB+TW9kaWZpZXJzLlBST1RFQ1RFRDsKKysJCQkJCWZs YWdzID0gTW9kaWZpZXJzLlBSSVZBVEU7CisrCQkJCX0KKysJCQl9IGVsc2UgaWYgKChtb2RCICYg TW9kaWZpZXJzLklOVEVSTkFMKSAhPSAwKSB7CisrCQkJCW1vZEEgJj0gfk1vZGlmaWVycy5QUk9U RUNURUQ7CisgCQkJCWZsYWdzID0gTW9kaWZpZXJzLlBSSVZBVEU7CisrCQkJfQorIAorIAkJCXJl dHVybiBtb2RCICE9IG1vZEEgJiYgKG1vZEEgJiAofmZsYWdzKSkgPT0gMDsKKyAJCX0KK0BAIC0x NTEsNiArMTU3LDggQEAgbmFtZXNwYWNlIE1vbm8uQ1NoYXJwCisgCQkJfSBlbHNlIHsKKyAJCQkJ aWYgKChtb2RfZmxhZ3MgJiBNb2RpZmllcnMuUFVCTElDKSAhPSAwKQorIAkJCQkJdCA9IFR5cGVB dHRyaWJ1dGVzLk5lc3RlZFB1YmxpYzsKKysJCQkJZWxzZSBpZiAoKG1vZF9mbGFncyAmIChNb2Rp ZmllcnMuUFJPVEVDVEVEIHwgTW9kaWZpZXJzLlBSSVZBVEUpKSA9PSAoTW9kaWZpZXJzLlBST1RF Q1RFRCB8IE1vZGlmaWVycy5QUklWQVRFKSkKKysJCQkJCXQgPSBUeXBlQXR0cmlidXRlcy5OZXN0 ZWRGYW1BTkRBc3NlbTsKKyAJCQkJZWxzZSBpZiAoKG1vZF9mbGFncyAmIE1vZGlmaWVycy5QUklW QVRFKSAhPSAwKQorIAkJCQkJdCA9IFR5cGVBdHRyaWJ1dGVzLk5lc3RlZFByaXZhdGU7CisgCQkJ CWVsc2UgaWYgKChtb2RfZmxhZ3MgJiAoTW9kaWZpZXJzLlBST1RFQ1RFRCB8IE1vZGlmaWVycy5J TlRFUk5BTCkpID09IChNb2RpZmllcnMuUFJPVEVDVEVEIHwgTW9kaWZpZXJzLklOVEVSTkFMKSkK K0BAIC0xNzMsMTggKzE4MSwyNyBAQCBuYW1lc3BhY2UgTW9uby5DU2hhcnAKKyAJCXsKKyAJCQlG aWVsZEF0dHJpYnV0ZXMgZmEgPSAwOworIAorLQkJCWlmICgobW9kX2ZsYWdzICYgTW9kaWZpZXJz LlBVQkxJQykgIT0gMCkKKysJCQlzd2l0Y2ggKG1vZF9mbGFncyAmIE1vZGlmaWVycy5BY2Nlc3Np YmlsaXR5TWFzaykgeworKwkJCWNhc2UgTW9kaWZpZXJzLlBVQkxJQzoKKyAJCQkJZmEgfD0gRmll bGRBdHRyaWJ1dGVzLlB1YmxpYzsKKy0JCQlpZiAoKG1vZF9mbGFncyAmIE1vZGlmaWVycy5QUklW QVRFKSAhPSAwKQorKwkJCQlicmVhazsKKysJCQljYXNlIE1vZGlmaWVycy5QUklWQVRFOgorIAkJ CQlmYSB8PSBGaWVsZEF0dHJpYnV0ZXMuUHJpdmF0ZTsKKy0JCQlpZiAoKG1vZF9mbGFncyAmIE1v ZGlmaWVycy5QUk9URUNURUQpICE9IDApIHsKKy0JCQkJaWYgKChtb2RfZmxhZ3MgJiBNb2RpZmll cnMuSU5URVJOQUwpICE9IDApCistCQkJCQlmYSB8PSBGaWVsZEF0dHJpYnV0ZXMuRmFtT1JBc3Nl bTsKKy0JCQkJZWxzZSAKKy0JCQkJCWZhIHw9IEZpZWxkQXR0cmlidXRlcy5GYW1pbHk7CistCQkJ fSBlbHNlIHsKKy0JCQkJaWYgKChtb2RfZmxhZ3MgJiBNb2RpZmllcnMuSU5URVJOQUwpICE9IDAp CistCQkJCQlmYSB8PSBGaWVsZEF0dHJpYnV0ZXMuQXNzZW1ibHk7CisrCQkJCWJyZWFrOworKwkJ CWNhc2UgTW9kaWZpZXJzLlBST1RFQ1RFRCB8IE1vZGlmaWVycy5JTlRFUk5BTDoKKysJCQkJZmEg fD0gRmllbGRBdHRyaWJ1dGVzLkZhbU9SQXNzZW07CisrCQkJCWJyZWFrOworKwkJCWNhc2UgTW9k aWZpZXJzLlBST1RFQ1RFRDoKKysJCQkJZmEgfD0gRmllbGRBdHRyaWJ1dGVzLkZhbWlseTsKKysJ CQkJYnJlYWs7CisrCQkJY2FzZSBNb2RpZmllcnMuSU5URVJOQUw6CisrCQkJCWZhIHw9IEZpZWxk QXR0cmlidXRlcy5Bc3NlbWJseTsKKysJCQkJYnJlYWs7CisrCQkJY2FzZSBNb2RpZmllcnMuUFJJ VkFURSB8IE1vZGlmaWVycy5QUk9URUNURUQ6CisrCQkJCWZhIHw9IEZpZWxkQXR0cmlidXRlcy5G YW1BTkRBc3NlbTsKKysJCQkJYnJlYWs7CisrCQkJZGVmYXVsdDoKKysJCQkJdGhyb3cgbmV3IE5v dEltcGxlbWVudGVkRXhjZXB0aW9uIChtb2RfZmxhZ3MuVG9TdHJpbmcgKCkpOworIAkJCX0KKyAK KyAJCQlpZiAoKG1vZF9mbGFncyAmIE1vZGlmaWVycy5TVEFUSUMpICE9IDApCitAQCAtMjE1LDYg KzIzMiw5IEBAIG5hbWVzcGFjZSBNb25vLkNTaGFycAorIAkJCWNhc2UgTW9kaWZpZXJzLklOVEVS TkFMOgorIAkJCQltYSB8PSBNZXRob2RBdHRyaWJ1dGVzLkFzc2VtYmx5OworIAkJCQlicmVhazsK KysJCQljYXNlIE1vZGlmaWVycy5QUklWQVRFIHwgTW9kaWZpZXJzLlBST1RFQ1RFRDoKKysJCQkJ bWEgfD0gTWV0aG9kQXR0cmlidXRlcy5GYW1BTkRBc3NlbTsKKysJCQkJYnJlYWs7CisgCQkJZGVm YXVsdDoKKyAJCQkJdGhyb3cgbmV3IE5vdEltcGxlbWVudGVkRXhjZXB0aW9uIChtb2RfZmxhZ3Mu VG9TdHJpbmcgKCkpOworIAkJCX0KK2RpZmYgLS1naXQgYS9tY3MvbWNzL21vZHVsZS5jcyBiL21j cy9tY3MvbW9kdWxlLmNzCitpbmRleCAyMjkzZDgyNWIzNi4uNDY4MDQzM2JiMDEgMTAwNjQ0Cist LS0gYS9tY3MvbWNzL21vZHVsZS5jcworKysrIGIvbWNzL21jcy9tb2R1bGUuY3MKK0BAIC00ODAs NiArNDgwLDE4IEBAIG5hbWVzcGFjZSBNb25vLkNTaGFycAorIAkJCWF0dHJpYnV0ZXMuQWRkQXR0 cmlidXRlIChhdHRyKTsKKyAJCX0KKyAKKysJCXB1YmxpYyB2b2lkIEFkZEFzc2VtYmx5UmVmZXJl bmNlcyAoTGlzdDxBc3NlbWJseT4gbmFtZXMpCisrCQl7CisrCQkJaWYgKG5hbWVzID09IG51bGwp CisrCQkJCXJldHVybjsKKysKKysjaWYgU1RBVElDCisrCQkJZm9yZWFjaCAodmFyIG5hbWUgaW4g bmFtZXMpIHsKKysJCQkJQnVpbGRlci5fX0dldEFzc2VtYmx5VG9rZW4gKG5hbWUpOworKwkJCX0K KysjZW5kaWYKKysJCX0KKysKKyAJCXB1YmxpYyBvdmVycmlkZSB2b2lkIEFkZFR5cGVDb250YWlu ZXIgKFR5cGVDb250YWluZXIgdGMpCisgCQl7CisgCQkJQWRkVHlwZUNvbnRhaW5lck1lbWJlciAo dGMpOworZGlmZiAtLWdpdCBhL21jcy9tY3MvcGFyYW1ldGVyLmNzIGIvbWNzL21jcy9wYXJhbWV0 ZXIuY3MKK2luZGV4IGNjMTBlZWUxNjJiLi45NTg1MTQ3ODAxMCAxMDA2NDQKKy0tLSBhL21jcy9t Y3MvcGFyYW1ldGVyLmNzCisrKysgYi9tY3MvbWNzL3BhcmFtZXRlci5jcworQEAgLTIyMSwxMiAr MjIxLDEzIEBAIG5hbWVzcGFjZSBNb25vLkNTaGFycCB7CisgCQkJUkVGID0gMSA8PCAxLAorIAkJ CU9VVCA9IDEgPDwgMiwKKyAJCQlUaGlzID0gMSA8PCAzLAorLQkJCUNhbGxlck1lbWJlck5hbWUg PSAxIDw8IDQsCistCQkJQ2FsbGVyTGluZU51bWJlciA9IDEgPDwgNSwKKy0JCQlDYWxsZXJGaWxl UGF0aCA9IDEgPDwgNiwKKysJCQlSZWFkT25seSA9IDEgPDwgNCwKKysJCQlDYWxsZXJNZW1iZXJO YW1lID0gMSA8PCA1LAorKwkJCUNhbGxlckxpbmVOdW1iZXIgPSAxIDw8IDYsCisrCQkJQ2FsbGVy RmlsZVBhdGggPSAxIDw8IDcsCisgCisgCQkJUmVmT3V0TWFzayA9IFJFRiB8IE9VVCwKKy0JCQlN b2RpZmllck1hc2sgPSBQQVJBTVMgfCBSRUYgfCBPVVQgfCBUaGlzLAorKwkJCU1vZGlmaWVyTWFz ayA9IFBBUkFNUyB8IFJFRiB8IE9VVCB8IFRoaXMgfCBSZWFkT25seSwKKyAJCQlDYWxsZXJNYXNr ID0gQ2FsbGVyTWVtYmVyTmFtZSB8IENhbGxlckxpbmVOdW1iZXIgfCBDYWxsZXJGaWxlUGF0aAor IAkJfQorIAorQEAgLTE0NzQsOSArMTQ3NSw5IEBAIG5hbWVzcGFjZSBNb25vLkNTaGFycCB7Cisg CQkJCQl9CisgCQkJCX0KKyAKKy0JCQkJaWYgKCFleHByLklzTnVsbCAmJiBUeXBlU3BlYy5Jc1Jl ZmVyZW5jZVR5cGUgKHBhcmFtZXRlcl90eXBlKSAmJiBwYXJhbWV0ZXJfdHlwZS5CdWlsdGluVHlw ZSAhPSBCdWlsdGluVHlwZVNwZWMuVHlwZS5TdHJpbmcpIHsKKysJCQkJaWYgKCFyZXMuSXNOdWxs ICYmIFR5cGVTcGVjLklzUmVmZXJlbmNlVHlwZSAocGFyYW1ldGVyX3R5cGUpICYmIHBhcmFtZXRl cl90eXBlLkJ1aWx0aW5UeXBlICE9IEJ1aWx0aW5UeXBlU3BlYy5UeXBlLlN0cmluZykgeworIAkJ CQkJcmMuUmVwb3J0LkVycm9yICgxNzYzLCBMb2NhdGlvbiwKKy0JCQkJCQkiT3B0aW9uYWwgcGFy YW1ldGVyIGB7MH0nIG9mIHR5cGUgYHsxfScgY2FuIG9ubHkgYmUgaW5pdGlhbGl6ZWQgd2l0aCBg bnVsbCciLAorKwkJCQkJCSJPcHRpb25hbCBwYXJhbWV0ZXIgYHswfScgb2YgdHlwZSBgezF9JyBj YW4gb25seSBiZSBpbml0aWFsaXplZCB3aXRoIGRlZmF1bHQgdmFsdWUiLAorIAkJCQkJCXAuTmFt ZSwgcGFyYW1ldGVyX3R5cGUuR2V0U2lnbmF0dXJlRm9yRXJyb3IgKCkpOworIAorIAkJCQkJcmV0 dXJuOworZGlmZiAtLWdpdCBhL21jcy9tY3MvcmVwb3J0LmNzIGIvbWNzL21jcy9yZXBvcnQuY3MK K2luZGV4IGNjM2Q4MmIyNmUwLi41ZDY0YzhlNzY2ZSAxMDA2NDQKKy0tLSBhL21jcy9tY3MvcmVw b3J0LmNzCisrKysgYi9tY3MvbWNzL3JlcG9ydC5jcworQEAgLTQyLDcgKzQyLDcgQEAgbmFtZXNw YWNlIE1vbm8uQ1NoYXJwIHsKKyAJCXB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgaW50W10gQWxsV2Fy bmluZ3MgPSBuZXcgaW50W10geworIAkJCTI4LCA2NywgNzgsCisgCQkJMTA1LCAxMDgsIDEwOSwg MTE0LCAxNjIsIDE2NCwgMTY4LCAxNjksIDE4MywgMTg0LCAxOTcsCistCQkJMjE5LCAyNTEsIDI1 MiwgMjUzLCAyNzgsIDI4MiwKKysJCQkyMTksIDI1MSwgMjUyLCAyNTMsIDI3OCwgMjgwLCAyODIs CisgCQkJNDAyLCA0MTQsIDQxOSwgNDIwLCA0MjksIDQzNiwgNDM3LCA0NDAsIDQ1OCwgNDY0LCA0 NjUsIDQ2NywgNDY5LCA0NzIsIDQ3MywKKyAJCQk2MTIsIDYxOCwgNjI2LCA2MjgsIDY0MiwgNjQ5 LCA2NTIsIDY1NywgNjU4LCA2NTksIDY2MCwgNjYxLCA2NjUsIDY3MiwgNjc1LCA2OTMsCisgCQkJ NzI4LAorQEAgLTEwNyw2ICsxMDcsMTUgQEAgbmFtZXNwYWNlIE1vbm8uQ1NoYXJwIHsKKyAJCQlj YXNlIExhbmd1YWdlVmVyc2lvbi5WXzc6CisgCQkJCXZlcnNpb24gPSAiNy4wIjsKKyAJCQkJYnJl YWs7CisrCQkJY2FzZSBMYW5ndWFnZVZlcnNpb24uVl83XzE6CisrCQkJCXZlcnNpb24gPSAiNy4x IjsKKysJCQkJYnJlYWs7CisrCQkJY2FzZSBMYW5ndWFnZVZlcnNpb24uVl83XzI6CisrCQkJCXZl cnNpb24gPSAiNy4yIjsKKysJCQkJYnJlYWs7CisrCQkJY2FzZSBMYW5ndWFnZVZlcnNpb24uVl83 XzM6CisrCQkJCXZlcnNpb24gPSAiNy4zIjsKKysJCQkJYnJlYWs7CisgCQkJZGVmYXVsdDoKKyAJ CQkJdGhyb3cgbmV3IEludGVybmFsRXJyb3JFeGNlcHRpb24gKCJJbnZhbGlkIGZlYXR1cmUgdmVy c2lvbiIsIGNvbXBpbGVyLlNldHRpbmdzLlZlcnNpb24pOworIAkJCX0KK2RpZmYgLS1naXQgYS9t Y3MvbWNzL3NldHRpbmdzLmNzIGIvbWNzL21jcy9zZXR0aW5ncy5jcworaW5kZXggMzc2NjQxODdj NzEuLjk3NmM5YjY4MTI4IDEwMDY0NAorLS0tIGEvbWNzL21jcy9zZXR0aW5ncy5jcworKysrIGIv bWNzL21jcy9zZXR0aW5ncy5jcworQEAgLTMyLDEwICszMiwxMSBAQCBuYW1lc3BhY2UgTW9uby5D U2hhcnAgeworIAkJVl83ID0gNywKKyAJCVZfN18xID0gNzEsCisgCQlWXzdfMiA9IDcyLAorKwkJ Vl83XzMgPSA3MywKKyAJCUV4cGVyaW1lbnRhbCA9IDEwMCwKKyAKKyAJCURlZmF1bHQgPSBWXzcs CistCQlMYXRlc3QgPSBWXzdfMgorKwkJTGF0ZXN0ID0gVl83XzMKKyAJfQorIAorIAlwdWJsaWMg ZW51bSBSdW50aW1lVmVyc2lvbgorQEAgLTEyNzAsNiArMTI3MSw3IEBAIG5hbWVzcGFjZSBNb25v LkNTaGFycCB7CisgCQkJY2FzZSAiL2hpZ2hlbnRyb3B5dmErIjoKKyAJCQljYXNlICIvaGlnaGVu dHJvcHl2YS0iOgorIAkJCWNhc2UgIi9saW5rIjoKKysJCQljYXNlICIvc291cmNlbGluayI6Cisg CQkJY2FzZSAiL21vZHVsZWFzc2VtYmx5bmFtZSI6CisgCQkJY2FzZSAiL25vd2luMzJtYW5pZmVz dCI6CisgCQkJY2FzZSAiL3BkYiI6CitkaWZmIC0tZ2l0IGEvbWNzL21jcy9zdGF0ZW1lbnQuY3Mg Yi9tY3MvbWNzL3N0YXRlbWVudC5jcworaW5kZXggOWM1MTEyODU0OGYuLmM4Yjc3YzFhZGMxIDEw MDY0NAorLS0tIGEvbWNzL21jcy9zdGF0ZW1lbnQuY3MKKysrKyBiL21jcy9tY3Mvc3RhdGVtZW50 LmNzCitAQCAtOTI4LDggKzkyOCw3IEBAIG5hbWVzcGFjZSBNb25vLkNTaGFycCB7CisgCQlwdWJs aWMgb3ZlcnJpZGUgUmVhY2hhYmlsaXR5IE1hcmtSZWFjaGFibGUgKFJlYWNoYWJpbGl0eSByYykK KyAJCXsKKyAJCQliYXNlLk1hcmtSZWFjaGFibGUgKHJjKTsKKy0JCQlleHByLk1hcmtSZWFjaGFi bGUgKHJjKTsKKy0JCQlyZXR1cm4gcmM7CisrCQkJcmV0dXJuIGV4cHIuTWFya1JlYWNoYWJsZSAo cmMpOworIAkJfQorIAorIAkJcHVibGljIG92ZXJyaWRlIGJvb2wgUmVzb2x2ZSAoQmxvY2tDb250 ZXh0IGVjKQorQEAgLTI0MTksNiArMjQxOCw3IEBAIG5hbWVzcGFjZSBNb25vLkNTaGFycCB7Cisg CQkJSXNMb2NrZWQgPSAxIDw8IDgsCisgCQkJU3ltYm9sRmlsZUhpZGRlbiA9IDEgPDwgOSwKKyAJ CQlCeVJlZiA9IDEgPDwgMTAsCisrCQkJUG9pbnRlckJ5UmVmID0gMSA8PCAxMSwKKyAKKyAJCQlS ZWFkb25seU1hc2sgPSAxIDw8IDIwCisgCQl9CitAQCAtMjYwOSwyMCArMjYwOSwyMiBAQCBuYW1l c3BhY2UgTW9uby5DU2hhcnAgeworIAorIAkJCWlmIChJc0J5UmVmKSB7CisgCQkJCWJ1aWxkZXIg PSBlYy5EZWNsYXJlTG9jYWwgKFJlZmVyZW5jZUNvbnRhaW5lci5NYWtlVHlwZSAoZWMuTW9kdWxl LCBUeXBlKSwgSXNGaXhlZCk7CisrCQkJfSBlbHNlIGlmICgoZmxhZ3MgJiBGbGFncy5Qb2ludGVy QnlSZWYpICE9IDApIHsKKysJCQkJYnVpbGRlciA9IGVjLkRlY2xhcmVMb2NhbCAoUmVmZXJlbmNl Q29udGFpbmVyLk1ha2VUeXBlIChlYy5Nb2R1bGUsICgoUG9pbnRlckNvbnRhaW5lcikgVHlwZSku RWxlbWVudCksIElzRml4ZWQpOworIAkJCX0gZWxzZSB7CisgCQkJCS8vCisgCQkJCS8vIEFsbCBm aXhlZCB2YXJpYWJsZWQgYXJlIHBpbm5lZCwgYSBzbG90IGhhcyB0byBiZSBhbG9jYXRlZAorIAkJ CQkvLworLQkJCQlidWlsZGVyID0gZWMuRGVjbGFyZUxvY2FsKFR5cGUsIElzRml4ZWQpOworKwkJ CQlidWlsZGVyID0gZWMuRGVjbGFyZUxvY2FsIChUeXBlLCBJc0ZpeGVkKTsKKyAJCQl9CisgCisg CQkJaWYgKChmbGFncyAmIEZsYWdzLlN5bWJvbEZpbGVIaWRkZW4pID09IDApCisgCQkJCWVjLkRl ZmluZUxvY2FsVmFyaWFibGUgKG5hbWUsIGJ1aWxkZXIpOworIAkJfQorIAorLQkJcHVibGljIHN0 YXRpYyBMb2NhbFZhcmlhYmxlIENyZWF0ZUNvbXBpbGVyR2VuZXJhdGVkIChUeXBlU3BlYyB0eXBl LCBCbG9jayBibG9jaywgTG9jYXRpb24gbG9jLCBib29sIHdyaXRlVG9TeW1ib2xGaWxlID0gZmFs c2UpCisrCQlwdWJsaWMgc3RhdGljIExvY2FsVmFyaWFibGUgQ3JlYXRlQ29tcGlsZXJHZW5lcmF0 ZWQgKFR5cGVTcGVjIHR5cGUsIEJsb2NrIGJsb2NrLCBMb2NhdGlvbiBsb2MsIGJvb2wgd3JpdGVU b1N5bWJvbEZpbGUgPSBmYWxzZSwgRmxhZ3MgYWRkaXRpb25hbEZsYWdzID0gMCkKKyAJCXsKKy0J CQlMb2NhbFZhcmlhYmxlIGxpID0gbmV3IExvY2FsVmFyaWFibGUgKGJsb2NrLCBHZXRDb21waWxl ckdlbmVyYXRlZE5hbWUgKGJsb2NrKSwgRmxhZ3MuQ29tcGlsZXJHZW5lcmF0ZWQgfCBGbGFncy5V c2VkLCBsb2MpOworKwkJCUxvY2FsVmFyaWFibGUgbGkgPSBuZXcgTG9jYWxWYXJpYWJsZSAoYmxv Y2ssIEdldENvbXBpbGVyR2VuZXJhdGVkTmFtZSAoYmxvY2spLCBGbGFncy5Db21waWxlckdlbmVy YXRlZCB8IEZsYWdzLlVzZWQgfCBhZGRpdGlvbmFsRmxhZ3MsIGxvYyk7CisgCQkJaWYgKCF3cml0 ZVRvU3ltYm9sRmlsZSkKKyAJCQkJbGkuZmxhZ3MgfD0gRmxhZ3MuU3ltYm9sRmlsZUhpZGRlbjsK KyAJCQkKK0BAIC0yNzI1LDYgKzI3MjcsMTEgQEAgbmFtZXNwYWNlIE1vbm8uQ1NoYXJwIHsKKyAJ CQlmbGFncyB8PSBGbGFncy5Vc2VkOworIAkJfQorIAorKwkJcHVibGljIHZvaWQgU2V0SXNQb2lu dGVyQnlSZWYgKCkKKysJCXsKKysJCQlmbGFncyB8PSBGbGFncy5Qb2ludGVyQnlSZWY7CisrCQl9 CisrCisgCQlwdWJsaWMgdm9pZCBTZXRIYXNBZGRyZXNzVGFrZW4gKCkKKyAJCXsKKyAJCQlmbGFn cyB8PSAoRmxhZ3MuQWRkcmVzc1Rha2VuIHwgRmxhZ3MuVXNlZCk7CitAQCAtNjU2MiwxOCArNjU2 OSwyNiBAQCBuYW1lc3BhY2UgTW9uby5DU2hhcnAgeworIAorIAkJCQkvLyBUT0RPOiBTaG91bGQg dXNlIEJpbmFyeTo6QWRkCisgCQkJCXBpbm5lZF9zdHJpbmcuRW1pdCAoZWMpOworLQkJCQllYy5F bWl0IChPcENvZGVzLkNvbnZfSSk7CisrCQkJCWVjLkVtaXQgKE9wQ29kZXMuQ29udl9VKTsKKyAK KyAJCQkJdmFyIG0gPSBlYy5Nb2R1bGUuUHJlZGVmaW5lZE1lbWJlcnMuUnVudGltZUhlbHBlcnNP ZmZzZXRUb1N0cmluZ0RhdGEuUmVzb2x2ZSAobG9jKTsKKyAJCQkJaWYgKG0gPT0gbnVsbCkKKyAJ CQkJCXJldHVybjsKKyAKKysJCQkJdmFyIG51bGxfdmFsdWUgPSBlYy5EZWZpbmVMYWJlbCAoKTsK KysJCQkJdmkuRW1pdEFzc2lnbiAoZWMpOworKwkJCQl2aS5FbWl0IChlYyk7CisrCQkJCWVjLkVt aXQgKE9wQ29kZXMuQnJmYWxzZV9TLCBudWxsX3ZhbHVlKTsKKysKKysJCQkJdmkuRW1pdCAoZWMp OworIAkJCQlQcm9wZXJ0eUV4cHIgcGUgPSBuZXcgUHJvcGVydHlFeHByIChtLCBwaW5uZWRfc3Ry aW5nLkxvY2F0aW9uKTsKKyAJCQkJLy9wZS5JbnN0YW5jZUV4cHJlc3Npb24gPSBwaW5uZWRfc3Ry aW5nOworIAkJCQlwZS5SZXNvbHZlIChuZXcgUmVzb2x2ZUNvbnRleHQgKGVjLk1lbWJlckNvbnRl eHQpKS5FbWl0IChlYyk7CisgCisgCQkJCWVjLkVtaXQgKE9wQ29kZXMuQWRkKTsKKyAJCQkJdmku RW1pdEFzc2lnbiAoZWMpOworKworKwkJCQllYy5NYXJrTGFiZWwgKG51bGxfdmFsdWUpOworIAkJ CX0KKyAKKyAJCQlwdWJsaWMgb3ZlcnJpZGUgdm9pZCBFbWl0RXhpdCAoRW1pdENvbnRleHQgZWMp CitAQCAtNjY2MCwzMSArNjY3NSw5NCBAQCBuYW1lc3BhY2UgTW9uby5DU2hhcnAgeworIAkJCQkJ cmV0dXJuIG5ldyBFeHByZXNzaW9uRW1pdHRlciAocmVzLCBsaSk7CisgCQkJCX0KKyAKKy0JCQkJ Ym9vbCBhbHJlYWR5X2ZpeGVkID0gdHJ1ZTsKKy0KKyAJCQkJLy8KKyAJCQkJLy8gQ2FzZSA0OiAm IG9iamVjdC4KKyAJCQkJLy8KKyAJCQkJVW5hcnkgdSA9IHJlcyBhcyBVbmFyeTsKKyAJCQkJaWYg KHUgIT0gbnVsbCkgeworKwkJCQkJYm9vbCBhbHJlYWR5X2ZpeGVkID0gdHJ1ZTsKKysKKyAJCQkJ CWlmICh1Lk9wZXIgPT0gVW5hcnkuT3BlcmF0b3IuQWRkcmVzc09mKSB7CisgCQkJCQkJSVZhcmlh YmxlUmVmZXJlbmNlIHZyID0gdS5FeHByIGFzIElWYXJpYWJsZVJlZmVyZW5jZTsKKyAJCQkJCQlp ZiAodnIgPT0gbnVsbCB8fCAhdnIuSXNGaXhlZCkgeworIAkJCQkJCQlhbHJlYWR5X2ZpeGVkID0g ZmFsc2U7CisgCQkJCQkJfQorIAkJCQkJfQorLQkJCQl9IGVsc2UgaWYgKGluaXRpYWxpemVyIGlz IENhc3QpIHsKKysKKysJCQkJCWlmIChhbHJlYWR5X2ZpeGVkKSB7CisrCQkJCQkJYmMuUmVwb3J0 LkVycm9yICgyMTMsIGxvYywgIllvdSBjYW5ub3QgdXNlIHRoZSBmaXhlZCBzdGF0ZW1lbnQgdG8g dGFrZSB0aGUgYWRkcmVzcyBvZiBhbiBhbHJlYWR5IGZpeGVkIGV4cHJlc3Npb24iKTsKKysJCQkJ CQlyZXR1cm4gbnVsbDsKKysJCQkJCX0KKysKKysJCQkJCXJlcyA9IENvbnZlcnQuSW1wbGljaXRD b252ZXJzaW9uUmVxdWlyZWQgKGJjLCByZXMsIGxpLlR5cGUsIGxvYyk7CisrCQkJCQlyZXR1cm4g bmV3IEV4cHJlc3Npb25FbWl0dGVyIChyZXMsIGxpKTsKKysJCQkJfQorKworKwkJCQlpZiAoaW5p dGlhbGl6ZXIgaXMgQ2FzdCkgeworIAkJCQkJYmMuUmVwb3J0LkVycm9yICgyNTQsIGluaXRpYWxp emVyLkxvY2F0aW9uLCAiVGhlIHJpZ2h0IGhhbmQgc2lkZSBvZiBhIGZpeGVkIHN0YXRlbWVudCBh c3NpZ25tZW50IG1heSBub3QgYmUgYSBjYXN0IGV4cHJlc3Npb24iKTsKKyAJCQkJCXJldHVybiBu dWxsOworIAkJCQl9CisgCistCQkJCWlmIChhbHJlYWR5X2ZpeGVkKSB7CistCQkJCQliYy5SZXBv cnQuRXJyb3IgKDIxMywgbG9jLCAiWW91IGNhbm5vdCB1c2UgdGhlIGZpeGVkIHN0YXRlbWVudCB0 byB0YWtlIHRoZSBhZGRyZXNzIG9mIGFuIGFscmVhZHkgZml4ZWQgZXhwcmVzc2lvbiIpOworKwkJ CQkvLworKwkJCQkvLyBDYXNlIDU6IGJ5LXJlZiBHZXRQaW5uYWJsZVJlZmVyZW5jZSBtZXRob2Qg b24gdGhlIHJocyBleHByZXNzaW9uCisrCQkJCS8vCisrCQkJCXZhciBtZXRob2QgPSBHZXRQaW5u YWJsZVJlZmVyZW5jZSAoYmMsIHJlcyk7CisrCQkJCWlmIChtZXRob2QgPT0gbnVsbCkgeworKwkJ CQkJYmMuUmVwb3J0LkVycm9yICg4Mzg1LCBpbml0aWFsaXplci5Mb2NhdGlvbiwgIlRoZSBnaXZl biBleHByZXNzaW9uIGNhbm5vdCBiZSB1c2VkIGluIGEgZml4ZWQgc3RhdGVtZW50Iik7CisrCQkJ CQlyZXR1cm4gbnVsbDsKKysJCQkJfQorKworKwkJCQl2YXIgY29tcGlsZXIgPSBiYy5Nb2R1bGUu Q29tcGlsZXI7CisrCQkJCWlmIChjb21waWxlci5TZXR0aW5ncy5WZXJzaW9uIDwgTGFuZ3VhZ2VW ZXJzaW9uLlZfN18zKSB7CisrCQkJCQliYy5SZXBvcnQuRmVhdHVyZUlzTm90QXZhaWxhYmxlIChj b21waWxlciwgaW5pdGlhbGl6ZXIuTG9jYXRpb24sICJleHRlbnNpYmxlIGZpeGVkIHN0YXRlbWVu dCIpOworKwkJCQl9CisrCisrCQkJCW1ldGhvZC5JbnN0YW5jZUV4cHJlc3Npb24gPSByZXM7Cisr CQkJCXJlcyA9IG5ldyBJbnZvY2F0aW9uLlByZWRlZmluZWQgKG1ldGhvZCwgbnVsbCkuUmVzb2x2 ZUxWYWx1ZSAoYmMsIEVtcHR5RXhwcmVzc2lvbi5PdXRBY2Nlc3MpOworKwkJCQlpZiAocmVzID09 IG51bGwpCisrCQkJCQlyZXR1cm4gbnVsbDsKKysKKysJCQkJUmVmZXJlbmNlQ29udGFpbmVyIHJU eXBlID0gKFJlZmVyZW5jZUNvbnRhaW5lciltZXRob2QuQmVzdENhbmRpZGF0ZVJldHVyblR5cGU7 CisrCQkJCVBvaW50ZXJDb250YWluZXIgbFR5cGUgPSBsaS5UeXBlIGFzIFBvaW50ZXJDb250YWlu ZXI7CisrCQkJCWlmIChyVHlwZS5FbGVtZW50ICE9IGxUeXBlPy5FbGVtZW50KSB7CisrCQkJCQkv LyBDU0M6IFNob3VsZCBiZSBiZXR0ZXIgZXJyb3IgY29kZQorKwkJCQkJcmVzLkVycm9yX1ZhbHVl Q2Fubm90QmVDb252ZXJ0ZWQgKGJjLCBsVHlwZSwgZmFsc2UpOworKwkJCQkJcmV0dXJuIG51bGw7 CisgCQkJCX0KKyAKKy0JCQkJcmVzID0gQ29udmVydC5JbXBsaWNpdENvbnZlcnNpb25SZXF1aXJl ZCAoYmMsIHJlcywgbGkuVHlwZSwgbG9jKTsKKysJCQkJbGkuU2V0SXNQb2ludGVyQnlSZWYgKCk7 CisgCQkJCXJldHVybiBuZXcgRXhwcmVzc2lvbkVtaXR0ZXIgKHJlcywgbGkpOworIAkJCX0KKysK KysJCQlNZXRob2RHcm91cEV4cHIgR2V0UGlubmFibGVSZWZlcmVuY2UgKEJsb2NrQ29udGV4dCBi YywgRXhwcmVzc2lvbiBleHByKQorKwkJCXsKKysJCQkJVHlwZVNwZWMgdHlwZSA9IGV4cHIuVHlw ZTsKKysJCQkJdmFyIG1leHByID0gRXhwcmVzc2lvbi5NZW1iZXJMb29rdXAgKGJjLCBmYWxzZSwg dHlwZSwKKysJCQkJCSJHZXRQaW5uYWJsZVJlZmVyZW5jZSIsIDAsIEV4cHJlc3Npb24uTWVtYmVy TG9va3VwUmVzdHJpY3Rpb25zLkV4YWN0QXJpdHksIGxvYyk7CisrCisrCQkJCWlmIChtZXhwciA9 PSBudWxsKQorKwkJCQkJcmV0dXJuIG51bGw7CisrCisrCQkJCXZhciBtZyA9IG1leHByIGFzIE1l dGhvZEdyb3VwRXhwcjsKKysJCQkJaWYgKG1nID09IG51bGwpCisrCQkJCQlyZXR1cm4gbnVsbDsK KysKKysJCQkJbWcuSW5zdGFuY2VFeHByZXNzaW9uID0gZXhwcjsKKysKKysJCQkJLy8gVE9ETzog aGFuZGxlIGV4dGVuc2lvbiBtZXRob2RzCisrCQkJCUFyZ3VtZW50cyBhcmdzID0gbmV3IEFyZ3Vt ZW50cyAoMCk7CisrCQkJCW1nID0gbWcuT3ZlcmxvYWRSZXNvbHZlIChiYywgcmVmIGFyZ3MsIG51 bGwsIE92ZXJsb2FkUmVzb2x2ZXIuUmVzdHJpY3Rpb25zLk5vbmUpOworKworKwkJCQlpZiAobWcg PT0gbnVsbCB8fCBtZy5CZXN0Q2FuZGlkYXRlLklzU3RhdGljIHx8ICFtZy5CZXN0Q2FuZGlkYXRl LklzUHVibGljIHx8IG1nLkJlc3RDYW5kaWRhdGVSZXR1cm5UeXBlLktpbmQgIT0gTWVtYmVyS2lu ZC5CeVJlZiB8fCAhbWcuQmVzdENhbmRpZGF0ZS5QYXJhbWV0ZXJzLklzRW1wdHkpIHsKKysJCQkJ CWlmIChiYy5Nb2R1bGUuQ29tcGlsZXIuU2V0dGluZ3MuVmVyc2lvbiA+IExhbmd1YWdlVmVyc2lv bi5WXzdfMikgeworKwkJCQkJCWJjLlJlcG9ydC5XYXJuaW5nICgyODAsIDIsIGV4cHIuTG9jYXRp b24sICJgezB9JyBoYXMgdGhlIHdyb25nIHNpZ25hdHVyZSB0byBiZSB1c2VkIGluIGV4dGVuc2li bGUgZml4ZWQgc3RhdGVtZW50IiwgbWcuR2V0U2lnbmF0dXJlRm9yRXJyb3IgKCkpOworKwkJCQkJ fQorKworKwkJCQkJcmV0dXJuIG51bGw7CisrCQkJCX0KKysKKysJCQkJcmV0dXJuIG1nOworKwkJ CX0KKyAJCX0KKyAKKyAKK2RpZmYgLS1naXQgYS9tY3MvbWNzL3R1cGxlcy5jcyBiL21jcy9tY3Mv dHVwbGVzLmNzCitpbmRleCA5MDFlZmRjOTU0MS4uMGI1Njg1OTYxNWYgMTAwNjQ0CistLS0gYS9t Y3MvbWNzL3R1cGxlcy5jcworKysrIGIvbWNzL21jcy90dXBsZXMuY3MKK0BAIC0yNjcsNiArMjY3 LDExIEBAIG5hbWVzcGFjZSBNb25vLkNTaGFycAorIAkJCXRoaXMuTG9jYXRpb24gPSBleHByLkxv Y2F0aW9uOworIAkJfQorIAorKwkJcHVibGljIFR1cGxlTGl0ZXJhbEVsZW1lbnQgQ2xvbmUgKENs b25lQ29udGV4dCBjbG9uZWN0eCkKKysJCXsKKysJCQlyZXR1cm4gbmV3IFR1cGxlTGl0ZXJhbEVs ZW1lbnQgKE5hbWUsIEV4cHIuQ2xvbmUgKGNsb25lY3R4KSwgTG9jYXRpb24pOworKwkJfQorKwor IAkJcHVibGljIHN0cmluZyBOYW1lIHsgZ2V0OyBwcml2YXRlIHNldDsgfQorIAkJcHVibGljIEV4 cHJlc3Npb24gRXhwciB7IGdldDsgc2V0OyB9CisgCQlwdWJsaWMgTG9jYXRpb24gTG9jYXRpb24g eyBnZXQ7IHByaXZhdGUgc2V0OyB9CitAQCAtMjg4LDYgKzI5MywxNiBAQCBuYW1lc3BhY2UgTW9u by5DU2hhcnAKKyAJCQl9CisgCQl9CisgCisrCQlwcm90ZWN0ZWQgb3ZlcnJpZGUgdm9pZCBDbG9u ZVRvIChDbG9uZUNvbnRleHQgY2xvbmVjdHgsIEV4cHJlc3Npb24gdCkKKysJCXsKKysJCQl2YXIg Y2xvbmUgPSBuZXcgTGlzdDxUdXBsZUxpdGVyYWxFbGVtZW50PiAoZWxlbWVudHMuQ291bnQpOwor KwkJCWZvcmVhY2ggKHZhciB0ZSBpbiBlbGVtZW50cykKKysJCQkJY2xvbmUuQWRkICh0ZS5DbG9u ZSAoY2xvbmVjdHgpKTsKKysKKysJCQlUdXBsZUxpdGVyYWwgdGFyZ2V0ID0gKFR1cGxlTGl0ZXJh bCl0OworKwkJCXRhcmdldC5lbGVtZW50cyA9IGNsb25lOworKwkJfQorKworIAkJcHVibGljIHN0 YXRpYyBib29sIENvbnRhaW5zTm9UeXBlRWxlbWVudCAoVHlwZVNwZWMgdHlwZSkKKyAJCXsKKyAJ CQl2YXIgdGEgPSB0eXBlLlR5cGVBcmd1bWVudHM7CitAQCAtNDMyLDYgKzQ0Nyw3IEBAIG5hbWVz cGFjZSBNb25vLkNTaGFycAorIAl7CisgCQlFeHByZXNzaW9uIHNvdXJjZTsKKyAJCUxpc3Q8RXhw cmVzc2lvbj4gdGFyZ2V0RXhwcnM7CisrCQlMaXN0PEV4cHJlc3Npb24+IHRlbXBFeHByczsKKyAJ CUxpc3Q8QmxvY2tWYXJpYWJsZT4gdmFyaWFibGVzOworIAkJRXhwcmVzc2lvbiBpbnN0YW5jZTsK KyAKK0BAIC00NDAsNiArNDU2LDggQEAgbmFtZXNwYWNlIE1vbm8uQ1NoYXJwCisgCQkJdGhpcy5z b3VyY2UgPSBzb3VyY2U7CisgCQkJdGhpcy50YXJnZXRFeHBycyA9IHRhcmdldEV4cHJzOworIAkJ CXRoaXMubG9jID0gbG9jOworKworKwkJCXRlbXBFeHBycyA9IG5ldyBMaXN0PEV4cHJlc3Npb24+ ICgpOworIAkJfQorIAorIAkJcHVibGljIFR1cGxlRGVjb25zdHJ1Y3QgKExpc3Q8QmxvY2tWYXJp YWJsZT4gdmFyaWFibGVzLCBFeHByZXNzaW9uIHNvdXJjZSwgTG9jYXRpb24gbG9jKQorQEAgLTQ0 Nyw2ICs0NjUsOCBAQCBuYW1lc3BhY2UgTW9uby5DU2hhcnAKKyAJCQl0aGlzLnNvdXJjZSA9IHNv dXJjZTsKKyAJCQl0aGlzLnZhcmlhYmxlcyA9IHZhcmlhYmxlczsKKyAJCQl0aGlzLmxvYyA9IGxv YzsKKysKKysJCQl0ZW1wRXhwcnMgPSBuZXcgTGlzdDxFeHByZXNzaW9uPiAoKTsKKyAJCX0KKyAK KyAJCXB1YmxpYyBvdmVycmlkZSBFeHByZXNzaW9uIENyZWF0ZUV4cHJlc3Npb25UcmVlIChSZXNv bHZlQ29udGV4dCBlYykKK0BAIC00OTIsNiArNTEyLDE1IEBAIG5hbWVzcGFjZSBNb25vLkNTaGFy cAorIAkJCQkJaW5zdGFuY2UgPSBleHByX3ZhcmlhYmxlLkNyZWF0ZVJlZmVyZW5jZUV4cHJlc3Np b24gKHJjLCBsb2MpOworIAkJCQl9CisgCisrCQkJCXZhciBlbGVtZW50X3NyY3MgPSBuZXcgTGlz dDxFeHByZXNzaW9uPiAoKTsKKysJCQkJdmFyIHNyY19uYW1lcyA9IG5ldyBMaXN0PHN0cmluZz4g KCk7CisrCQkJCWZvciAoaW50IGkgPSAwOyBpIDwgdGFyZ2V0X2NvdW50OyArK2kpIHsKKysJCQkJ CXZhciBlbGVtZW50X3NyYyA9IHR1cGxlTGl0ZXJhbCA9PSBudWxsID8gbmV3IE1lbWJlckFjY2Vz cyAoaW5zdGFuY2UsIE5hbWVkVHVwbGVTcGVjLkdldEVsZW1lbnRQcm9wZXJ0eU5hbWUgKGkpKSA6 IHR1cGxlTGl0ZXJhbC5FbGVtZW50cyBbaV0uRXhwcjsKKysJCQkJCWVsZW1lbnRfc3Jjcy5BZGQg KGVsZW1lbnRfc3JjKTsKKysJCQkJCWlmIChlbGVtZW50X3NyYyBpcyBWYXJpYWJsZVJlZmVyZW5j ZSkKKysJCQkJCQlzcmNfbmFtZXMuQWRkICgoZWxlbWVudF9zcmMgYXMgVmFyaWFibGVSZWZlcmVu Y2UpPy5OYW1lKTsKKysJCQkJfQorKworIAkJCQlmb3IgKGludCBpID0gMDsgaSA8IHRhcmdldF9j b3VudDsgKytpKSB7CisgCQkJCQl2YXIgdGxlID0gc3JjX3R5cGUuVHlwZUFyZ3VtZW50cyBbaV07 CisgCitAQCAtNTIyLDggKzU1MSwxNyBAQCBuYW1lc3BhY2UgTW9uby5DU2hhcnAKKyAJCQkJCQl2 YXJpYWJsZS5QcmVwYXJlQXNzaWdubWVudEFuYWx5c2lzICgoQmxvY2tDb250ZXh0KXJjKTsKKyAJ CQkJCX0KKyAKKy0JCQkJCXZhciBlbGVtZW50X3NyYyA9IHR1cGxlTGl0ZXJhbCA9PSBudWxsID8g bmV3IE1lbWJlckFjY2VzcyAoaW5zdGFuY2UsIE5hbWVkVHVwbGVTcGVjLkdldEVsZW1lbnRQcm9w ZXJ0eU5hbWUgKGkpKSA6IHR1cGxlTGl0ZXJhbC5FbGVtZW50cyBbaV0uRXhwcjsKKy0JCQkJCXRh cmdldEV4cHJzIFtpXSA9IG5ldyBTaW1wbGVBc3NpZ24gKHRhcmdldEV4cHJzIFtpXSwgZWxlbWVu dF9zcmMpLlJlc29sdmUgKHJjKTsKKysJCQkJCXZhciBlbGVtZW50X3RhcmdldCA9ICh0YXJnZXRF eHBycyBbaV0gYXMgU2ltcGxlTmFtZSk/Lkxvb2t1cE5hbWVFeHByZXNzaW9uIChyYywgTWVtYmVy TG9va3VwUmVzdHJpY3Rpb25zLk5vbmUpOworKworKwkJCQkJaWYgKGVsZW1lbnRfdGFyZ2V0ICE9 IG51bGwgJiYgc3JjX25hbWVzLkNvbnRhaW5zICgoZWxlbWVudF90YXJnZXQgYXMgVmFyaWFibGVS ZWZlcmVuY2UpPy5OYW1lKSkgeworKwkJCQkJCXZhciB0ZW1wVHlwZSA9IGVsZW1lbnRfdGFyZ2V0 LlJlc29sdmUgKHJjKS5UeXBlOworKworKwkJCQkJCXZhciB0ZW1wID0gbmV3IExvY2FsVGVtcG9y YXJ5ICh0ZW1wVHlwZSk7CisrCQkJCQkJdGVtcEV4cHJzLkFkZCAobmV3IFNpbXBsZUFzc2lnbiAo dGVtcCwgZWxlbWVudF9zcmNzIFtpXSkuUmVzb2x2ZSAocmMpKTsKKysJCQkJCQl0YXJnZXRFeHBy cyBbaV0gPSBuZXcgU2ltcGxlQXNzaWduICh0YXJnZXRFeHBycyBbaV0sIHRlbXApLlJlc29sdmUg KHJjKTsKKysJCQkJCX0gZWxzZSB7CisrCQkJCQkJdGFyZ2V0RXhwcnMgW2ldID0gbmV3IFNpbXBs ZUFzc2lnbiAodGFyZ2V0RXhwcnMgW2ldLCBlbGVtZW50X3NyY3MgW2ldKS5SZXNvbHZlIChyYyk7 CisrCQkJCQl9CisgCQkJCX0KKyAKKyAJCQkJZWNsYXNzID0gRXhwckNsYXNzLlZhbHVlOworQEAg LTU1Nyw5ICs1OTUsMjQgQEAgbmFtZXNwYWNlIE1vbm8uQ1NoYXJwCisgCQkJaWYgKGluc3RhbmNl ICE9IG51bGwpCisgCQkJCSgoRXhwcmVzc2lvblN0YXRlbWVudClzb3VyY2UpLkVtaXRTdGF0ZW1l bnQgKGVjKTsKKyAKKy0JCQlmb3JlYWNoIChFeHByZXNzaW9uU3RhdGVtZW50IGV4cHIgaW4gdGFy Z2V0RXhwcnMpCisrCQkJZm9yZWFjaCAoRXhwcmVzc2lvblN0YXRlbWVudCBleHByIGluIHRlbXBF eHBycykgeworKwkJCQl2YXIgdGVtcCA9IChleHByIGFzIEFzc2lnbik/LlRhcmdldCBhcyBMb2Nh bFRlbXBvcmFyeTsKKysJCQkJaWYgKHRlbXAgPT0gbnVsbCkKKysJCQkJCWNvbnRpbnVlOworKwor KwkJCQl0ZW1wLkFkZHJlc3NPZiAoZWMsIEFkZHJlc3NPcC5Mb2FkU3RvcmUpOworKwkJCQllYy5F bWl0IChPcENvZGVzLkluaXRvYmosIHRlbXAuVHlwZSk7CisrCQkJCWV4cHIuRW1pdCAoZWMpOwor KwkJCX0KKysKKysJCQlmb3JlYWNoIChFeHByZXNzaW9uU3RhdGVtZW50IGV4cHIgaW4gdGFyZ2V0 RXhwcnMpIHsKKyAJCQkJZXhwci5FbWl0IChlYyk7CisgCisrCQkJCXZhciB0ZW1wID0gKGV4cHIg YXMgQXNzaWduKT8uU291cmNlIGFzIExvY2FsVGVtcG9yYXJ5OworKwkJCQlpZiAodGVtcCAhPSBu dWxsKQorKwkJCQkJdGVtcC5SZWxlYXNlIChlYyk7CisrCQkJfQorKworIAkJCXZhciBjdG9yID0g TWVtYmVyQ2FjaGUuRmluZE1lbWJlciAodHlwZSwgTWVtYmVyRmlsdGVyLkNvbnN0cnVjdG9yIChu dWxsKSwgQmluZGluZ1Jlc3RyaWN0aW9uLkRlY2xhcmVkT25seSB8IEJpbmRpbmdSZXN0cmljdGlv bi5JbnN0YW5jZU9ubHkpIGFzIE1ldGhvZFNwZWM7CisgCQkJZWMuRW1pdCAoT3BDb2Rlcy5OZXdv YmosIGN0b3IpOworIAkJfQorQEAgLTU3NCw5ICs2MjcsMjQgQEAgbmFtZXNwYWNlIE1vbm8uQ1No YXJwCisgCQkJCisgCQkJaWYgKGluc3RhbmNlICE9IG51bGwpCisgCQkJCSgoRXhwcmVzc2lvblN0 YXRlbWVudCkgc291cmNlKS5FbWl0U3RhdGVtZW50IChlYyk7CistCQkJCistCQkJZm9yZWFjaCAo RXhwcmVzc2lvblN0YXRlbWVudCBleHByIGluIHRhcmdldEV4cHJzKQorKworKwkJCWZvcmVhY2gg KEV4cHJlc3Npb25TdGF0ZW1lbnQgZXhwciBpbiB0ZW1wRXhwcnMpIHsKKysJCQkJdmFyIHRlbXAg PSAoZXhwciBhcyBBc3NpZ24pPy5UYXJnZXQgYXMgTG9jYWxUZW1wb3Jhcnk7CisrCQkJCWlmICh0 ZW1wID09IG51bGwpCisrCQkJCQljb250aW51ZTsKKysKKysJCQkJdGVtcC5BZGRyZXNzT2YgKGVj LCBBZGRyZXNzT3AuTG9hZFN0b3JlKTsKKysJCQkJZWMuRW1pdCAoT3BDb2Rlcy5Jbml0b2JqLCB0 ZW1wLlR5cGUpOworKwkJCQlleHByLkVtaXRTdGF0ZW1lbnQgKGVjKTsKKysJCQl9CisrCisrCQkJ Zm9yZWFjaCAoRXhwcmVzc2lvblN0YXRlbWVudCBleHByIGluIHRhcmdldEV4cHJzKSB7CisgCQkJ CWV4cHIuRW1pdFN0YXRlbWVudCAoZWMpOworKworKwkJCQl2YXIgdGVtcCA9IChleHByIGFzIEFz c2lnbik/LlNvdXJjZSBhcyBMb2NhbFRlbXBvcmFyeTsKKysJCQkJaWYgKHRlbXAgIT0gbnVsbCkK KysJCQkJCXRlbXAuUmVsZWFzZSAoZWMpOworKwkJCX0KKyAJCX0KKyAKKyAJCXB1YmxpYyB2b2lk IEVtaXQgKEVtaXRDb250ZXh0IGVjLCBib29sIGxlYXZlX2NvcHkpCitAQCAtNTk0LDYgKzY2Miw3 IEBAIG5hbWVzcGFjZSBNb25vLkNTaGFycAorIAorIAkJcHVibGljIG92ZXJyaWRlIHZvaWQgRmxv d0FuYWx5c2lzIChGbG93QW5hbHlzaXNDb250ZXh0IGZjKQorIAkJeworKwkJCXNvdXJjZS5GbG93 QW5hbHlzaXMgKGZjKTsKKyAJCQlmb3JlYWNoICh2YXIgZXhwciBpbiB0YXJnZXRFeHBycykKKyAJ CQkJZXhwci5GbG93QW5hbHlzaXMgKGZjKTsKKyAJCX0KK2RpZmYgLS1naXQgYS9tY3MvbnVuaXQy NC9DbGllbnRVdGlsaXRpZXMvdXRpbC9Bc3NlbWJseUluZm8uY3MgYi9tY3MvbnVuaXQyNC9DbGll bnRVdGlsaXRpZXMvdXRpbC9Bc3NlbWJseUluZm8uY3MKK2luZGV4IDkxOWNhMDdhY2UzLi42NDg5 YzFiMmE1OCAxMDA2NDQKKy0tLSBhL21jcy9udW5pdDI0L0NsaWVudFV0aWxpdGllcy91dGlsL0Fz c2VtYmx5SW5mby5jcworKysrIGIvbWNzL251bml0MjQvQ2xpZW50VXRpbGl0aWVzL3V0aWwvQXNz ZW1ibHlJbmZvLmNzCitAQCAtNSw3ICs1LDMgQEAKKyAvLyAqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorIA0KKyB1c2luZyBT eXN0ZW0uUmVmbGVjdGlvbjsNCistDQorLVthc3NlbWJseTogQXNzZW1ibHlEZWxheVNpZ24oZmFs c2UpXQ0KKy1bYXNzZW1ibHk6IEFzc2VtYmx5S2V5RmlsZSgiLi4vLi4vbnVuaXQuc25rIildDQor LVthc3NlbWJseTogQXNzZW1ibHlLZXlOYW1lKCIiKV0NCitkaWZmIC0tZ2l0IGEvbWNzL251bml0 MjQvQ29uc29sZVJ1bm5lci9udW5pdC1jb25zb2xlL0Fzc2VtYmx5SW5mby5jcyBiL21jcy9udW5p dDI0L0NvbnNvbGVSdW5uZXIvbnVuaXQtY29uc29sZS9Bc3NlbWJseUluZm8uY3MKK2luZGV4IDkx OWNhMDdhY2UzLi42NDg5YzFiMmE1OCAxMDA2NDQKKy0tLSBhL21jcy9udW5pdDI0L0NvbnNvbGVS dW5uZXIvbnVuaXQtY29uc29sZS9Bc3NlbWJseUluZm8uY3MKKysrKyBiL21jcy9udW5pdDI0L0Nv bnNvbGVSdW5uZXIvbnVuaXQtY29uc29sZS9Bc3NlbWJseUluZm8uY3MKK0BAIC01LDcgKzUsMyBA QAorIC8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioNCisgDQorIHVzaW5nIFN5c3RlbS5SZWZsZWN0aW9uOw0KKy0NCistW2Fz c2VtYmx5OiBBc3NlbWJseURlbGF5U2lnbihmYWxzZSldDQorLVthc3NlbWJseTogQXNzZW1ibHlL ZXlGaWxlKCIuLi8uLi9udW5pdC5zbmsiKV0NCistW2Fzc2VtYmx5OiBBc3NlbWJseUtleU5hbWUo IiIpXQ0KK2RpZmYgLS1naXQgYS9tY3MvbnVuaXQyNC9OVW5pdENvcmUvY29yZS9Bc3NlbWJseUlu Zm8uY3MgYi9tY3MvbnVuaXQyNC9OVW5pdENvcmUvY29yZS9Bc3NlbWJseUluZm8uY3MKK2luZGV4 IDc0NzAzMmM3ZTYzLi4yZjY2ZDgwMjIyYyAxMDA2NDQKKy0tLSBhL21jcy9udW5pdDI0L05Vbml0 Q29yZS9jb3JlL0Fzc2VtYmx5SW5mby5jcworKysrIGIvbWNzL251bml0MjQvTlVuaXRDb3JlL2Nv cmUvQXNzZW1ibHlJbmZvLmNzCitAQCAtNyw3ICs3LDMgQEAgdXNpbmcgU3lzdGVtOworIHVzaW5n IFN5c3RlbS5SZWZsZWN0aW9uOw0KKyANCisgW2Fzc2VtYmx5OiBDTFNDb21wbGlhbnQodHJ1ZSld DQorLQ0KKy1bYXNzZW1ibHk6IEFzc2VtYmx5RGVsYXlTaWduKGZhbHNlKV0NCistW2Fzc2VtYmx5 OiBBc3NlbWJseUtleUZpbGUoIi4uLy4uL251bml0LnNuayIpXQ0KKy1bYXNzZW1ibHk6IEFzc2Vt Ymx5S2V5TmFtZSgiIildDQorZGlmZiAtLWdpdCBhL21jcy9udW5pdDI0L05Vbml0Q29yZS9pbnRl cmZhY2VzL0Fzc2VtYmx5SW5mby5jcyBiL21jcy9udW5pdDI0L05Vbml0Q29yZS9pbnRlcmZhY2Vz L0Fzc2VtYmx5SW5mby5jcworaW5kZXggZmE4NjczMmIzZDMuLmVmZWFlY2YxOTg2IDEwMDY0NAor LS0tIGEvbWNzL251bml0MjQvTlVuaXRDb3JlL2ludGVyZmFjZXMvQXNzZW1ibHlJbmZvLmNzCisr KysgYi9tY3MvbnVuaXQyNC9OVW5pdENvcmUvaW50ZXJmYWNlcy9Bc3NlbWJseUluZm8uY3MKK0BA IC04LDcgKzgsMyBAQCB1c2luZyBTeXN0ZW07CisgdXNpbmcgU3lzdGVtLlJlZmxlY3Rpb247DQor IA0KKyBbYXNzZW1ibHk6IENMU0NvbXBsaWFudCh0cnVlKV0NCistDQorLVthc3NlbWJseTogQXNz ZW1ibHlEZWxheVNpZ24oZmFsc2UpXQ0KKy1bYXNzZW1ibHk6IEFzc2VtYmx5S2V5RmlsZSgiLi4v Li4vbnVuaXQuc25rIildDQorLVthc3NlbWJseTogQXNzZW1ibHlLZXlOYW1lKCIiKV0NCitkaWZm IC0tZ2l0IGEvbWNzL251bml0MjQvTlVuaXRFeHRlbnNpb25zL2NvcmUvQXNzZW1ibHlJbmZvLmNz IGIvbWNzL251bml0MjQvTlVuaXRFeHRlbnNpb25zL2NvcmUvQXNzZW1ibHlJbmZvLmNzCitpbmRl eCBmYTg2NzMyYjNkMy4uZWZlYWVjZjE5ODYgMTAwNjQ0CistLS0gYS9tY3MvbnVuaXQyNC9OVW5p dEV4dGVuc2lvbnMvY29yZS9Bc3NlbWJseUluZm8uY3MKKysrKyBiL21jcy9udW5pdDI0L05Vbml0 RXh0ZW5zaW9ucy9jb3JlL0Fzc2VtYmx5SW5mby5jcworQEAgLTgsNyArOCwzIEBAIHVzaW5nIFN5 c3RlbTsKKyB1c2luZyBTeXN0ZW0uUmVmbGVjdGlvbjsNCisgDQorIFthc3NlbWJseTogQ0xTQ29t cGxpYW50KHRydWUpXQ0KKy0NCistW2Fzc2VtYmx5OiBBc3NlbWJseURlbGF5U2lnbihmYWxzZSld DQorLVthc3NlbWJseTogQXNzZW1ibHlLZXlGaWxlKCIuLi8uLi9udW5pdC5zbmsiKV0NCistW2Fz c2VtYmx5OiBBc3NlbWJseUtleU5hbWUoIiIpXQ0KK2RpZmYgLS1naXQgYS9tY3MvbnVuaXQyNC9O VW5pdEV4dGVuc2lvbnMvZnJhbWV3b3JrL0Fzc2VtYmx5SW5mby5jcyBiL21jcy9udW5pdDI0L05V bml0RXh0ZW5zaW9ucy9mcmFtZXdvcmsvQXNzZW1ibHlJbmZvLmNzCitpbmRleCBhOTU1M2Y2OTFj ZC4uMmI0YjViZmIzNDAgMTAwNjQ0CistLS0gYS9tY3MvbnVuaXQyNC9OVW5pdEV4dGVuc2lvbnMv ZnJhbWV3b3JrL0Fzc2VtYmx5SW5mby5jcworKysrIGIvbWNzL251bml0MjQvTlVuaXRFeHRlbnNp b25zL2ZyYW1ld29yay9Bc3NlbWJseUluZm8uY3MKK0BAIC04LDcgKzgsMyBAQCB1c2luZyBTeXN0 ZW07CisgdXNpbmcgU3lzdGVtLlJlZmxlY3Rpb247DQorIA0KKyBbYXNzZW1ibHk6IENMU0NvbXBs aWFudCh0cnVlKV0NCistDQorLVthc3NlbWJseTogQXNzZW1ibHlEZWxheVNpZ24oZmFsc2UpXQ0K Ky1bYXNzZW1ibHk6IEFzc2VtYmx5S2V5RmlsZSgiLi4vLi4vbnVuaXQuc25rIildDQorLVthc3Nl bWJseTogQXNzZW1ibHlLZXlOYW1lKCIiKV0NCitkaWZmIC0tZ2l0IGEvbWNzL251bml0MjQvTlVu aXRGcmFtZXdvcmsvZnJhbWV3b3JrL0Fzc2VtYmx5SW5mby5jcyBiL21jcy9udW5pdDI0L05Vbml0 RnJhbWV3b3JrL2ZyYW1ld29yay9Bc3NlbWJseUluZm8uY3MKK2luZGV4IGZhODY3MzJiM2QzLi5l ZmVhZWNmMTk4NiAxMDA2NDQKKy0tLSBhL21jcy9udW5pdDI0L05Vbml0RnJhbWV3b3JrL2ZyYW1l d29yay9Bc3NlbWJseUluZm8uY3MKKysrKyBiL21jcy9udW5pdDI0L05Vbml0RnJhbWV3b3JrL2Zy YW1ld29yay9Bc3NlbWJseUluZm8uY3MKK0BAIC04LDcgKzgsMyBAQCB1c2luZyBTeXN0ZW07Cisg dXNpbmcgU3lzdGVtLlJlZmxlY3Rpb247DQorIA0KKyBbYXNzZW1ibHk6IENMU0NvbXBsaWFudCh0 cnVlKV0NCistDQorLVthc3NlbWJseTogQXNzZW1ibHlEZWxheVNpZ24oZmFsc2UpXQ0KKy1bYXNz ZW1ibHk6IEFzc2VtYmx5S2V5RmlsZSgiLi4vLi4vbnVuaXQuc25rIildDQorLVthc3NlbWJseTog QXNzZW1ibHlLZXlOYW1lKCIiKV0NCitkaWZmIC0tZ2l0IGEvbWNzL251bml0MjQvTlVuaXRNb2Nr cy9tb2Nrcy9Bc3NlbWJseUluZm8uY3MgYi9tY3MvbnVuaXQyNC9OVW5pdE1vY2tzL21vY2tzL0Fz c2VtYmx5SW5mby5jcworaW5kZXggNTk5YjA0Y2U0NTMuLmY4N2FlNjAyODEwIDEwMDY0NAorLS0t IGEvbWNzL251bml0MjQvTlVuaXRNb2Nrcy9tb2Nrcy9Bc3NlbWJseUluZm8uY3MKKysrKyBiL21j cy9udW5pdDI0L05Vbml0TW9ja3MvbW9ja3MvQXNzZW1ibHlJbmZvLmNzCitAQCAtNiw3ICs2LDMg QEAKKyANCisgdXNpbmcgU3lzdGVtOw0KKyB1c2luZyBTeXN0ZW0uUmVmbGVjdGlvbjsNCistDQor LVthc3NlbWJseTogQXNzZW1ibHlEZWxheVNpZ24oZmFsc2UpXQ0KKy1bYXNzZW1ibHk6IEFzc2Vt Ymx5S2V5RmlsZSgiLi4vLi4vbnVuaXQuc25rIildDQorLVthc3NlbWJseTogQXNzZW1ibHlLZXlO YW1lKCIiKV0NCitkaWZmIC0tZ2l0IGEvbWNzL3Rlc3RzL2R0ZXN0LTA2Ni5jcyBiL21jcy90ZXN0 cy9kdGVzdC0wNjYuY3MKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwMDAwMC4u ODkzZmI0MGRmZmEKKy0tLSAvZGV2L251bGwKKysrKyBiL21jcy90ZXN0cy9kdGVzdC0wNjYuY3MK K0BAIC0wLDAgKzEsMTMgQEAKKytjbGFzcyBDCisreworKwlzdGF0aWMgdm9pZCBNYWluKCkKKysJ eworKwkJb2JqZWN0IG8gPSAxOworKwkJZHluYW1pYyBkID0gMTsKKysJCQorKwkJdmFyIGEgPSBu ZXdbXSB7CisrCQkJbmV3IHsgWCA9IG8gfSwKKysJCQluZXcgeyBYID0gZCB9CisrCQl9OworKwl9 CisrfQorZGlmZiAtLWdpdCBhL21jcy90ZXN0cy9ndGVzdC02NDcuY3MgYi9tY3MvdGVzdHMvZ3Rl c3QtNjQ3LmNzCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMDAwMDAuLjRhYWU2 NDFmODVmCistLS0gL2Rldi9udWxsCisrKysgYi9tY3MvdGVzdHMvZ3Rlc3QtNjQ3LmNzCitAQCAt MCwwICsxLDM0IEBACisrdXNpbmcgU3lzdGVtOworKworK3B1YmxpYyBjbGFzcyBQcm9ncmFtCisr eworKwlwdWJsaWMgc3RhdGljIGludCBNYWluICgpCisrCXsKKysJCWludCBCID0gZGVmYXVsdCAo TXlTdHJ1Y3Q/KTsgCisrCQlpZiAoTXlTdHJ1Y3QuY291bnRlciAhPSAxKQorKwkJCXJldHVybiAx OworKworKwkJc3dpdGNoIChkZWZhdWx0IChNeVN0cnVjdD8pKSB7CisrCQkJY2FzZSAwOgorKwkJ CQlicmVhazsKKysJCQlkZWZhdWx0OgorKwkJCQlyZXR1cm4gMjsKKysJCX0KKysKKysJCWlmIChN eVN0cnVjdC5jb3VudGVyICE9IDIpCisrCQkJcmV0dXJuIDQ7CisrCisrCQlyZXR1cm4gMDsKKysJ fQorKworKwlwdWJsaWMgc3RydWN0IE15U3RydWN0CisrCXsKKysJCXB1YmxpYyBzdGF0aWMgaW50 IGNvdW50ZXI7CisrCisrCQlwdWJsaWMgc3RhdGljIGltcGxpY2l0IG9wZXJhdG9yIGludCAoTXlT dHJ1Y3Q/IHMpCisrCQl7CisrCQkJKytjb3VudGVyOworKwkJCXJldHVybiAwOworKwkJfQorKwl9 CisrfQorXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCitkaWZmIC0tZ2l0IGEvbWNzL3Rlc3Rz L3Rlc3QtOTI4LmNzIGIvbWNzL3Rlc3RzL3Rlc3QtOTI4LmNzCitpbmRleCA5MDE4MDEzNzk1Ny4u MjkwZWU0ZDFmYjMgMTAwNjQ0CistLS0gYS9tY3MvdGVzdHMvdGVzdC05MjguY3MKKysrKyBiL21j cy90ZXN0cy90ZXN0LTkyOC5jcworQEAgLTE1LDYgKzE1LDI0IEBAIHVuc2FmZSBjbGFzcyBQcm9n cmFtCisgCQl9CisgCX0KKyAKKysJcHVibGljIHN0YXRpYyBib29sIFN0cmluZ051bGwgKHN0cmlu ZyBzKQorKwl7CisrCQl1bnNhZmUgeworKwkJCWZpeGVkIChjaGFyICphID0gcykgeworKwkJCQly ZXR1cm4gYSA9PSBudWxsOworKwkJCX0KKysJCX0KKysJfQorKworKwlwdWJsaWMgc3RhdGljIGJv b2wgQXJyYXlOdWxsIChpbnRbXSBhKQorKwl7CisrCQl1bnNhZmUgeworKwkJCWZpeGVkIChpbnQg KmUgPSBhKSB7CisrCQkJCXJldHVybiBlID09IG51bGw7CisrCQkJfQorKwkJfQorKwl9CisrCisg CXB1YmxpYyBzdGF0aWMgaW50IE1haW4gKCkKKyAJeworIAkJVGVzdCAoKTsKK0BAIC0yNCw2ICs0 MiwxMiBAQCB1bnNhZmUgY2xhc3MgUHJvZ3JhbQorIAkJaWYgKGx2LklzUGlubmVkKQorIAkJCXJl dHVybiAxOworIAorKwkJaWYgKCFTdHJpbmdOdWxsIChudWxsKSkKKysJCQlyZXR1cm4gMTsKKysK KysJCWlmICghQXJyYXlOdWxsIChudWxsKSkKKysJCQlyZXR1cm4gMjsKKysKKyAJCXJldHVybiAw OworIAl9CisgfQorZGlmZiAtLWdpdCBhL21jcy90ZXN0cy90ZXN0LTk0OC5jcyBiL21jcy90ZXN0 cy90ZXN0LTk0OC5jcworaW5kZXggMzRiM2FiOWEwYzQuLjU2M2UzN2RjN2Q1IDEwMDY0NAorLS0t IGEvbWNzL3Rlc3RzL3Rlc3QtOTQ4LmNzCisrKysgYi9tY3MvdGVzdHMvdGVzdC05NDguY3MKK0BA IC0xLDQgKzEsNCBAQAorLS8vIENvbXBpbGVyIG9wdGlvbnM6IC1sYW5ndmVyc2lvbjo3LjIgLXVu c2FmZQorKy8vIENvbXBpbGVyIG9wdGlvbnM6IC1sYW5ndmVyc2lvbjo3LjIgL3Vuc2FmZQorIAor IHVzaW5nIFN5c3RlbTsKKyAKK0BAIC03LDEwICs3LDE2IEBAIGNsYXNzIFgKKyAJcHVibGljIHN0 YXRpYyB2b2lkIE1haW4gKCkKKyAJeworIAkJU3BhbjxpbnQ+IHN0YWNrU3BhbiA9IHN0YWNrYWxs b2MgaW50WzEwMF07CisrCisrCQlib29sIGIgPSBmYWxzZTsKKysKKysJCXZhciByMSA9ICFiID8g c3RhY2thbGxvYyBjaGFyWzFdIDogdGhyb3cgbnVsbDsKKysJCXZhciByMiA9IGIgPyB0aHJvdyBu dWxsIDogc3RhY2thbGxvYyBjaGFyWzFdOworKwkJdmFyIHIzID0gYiA/IHN0YWNrYWxsb2MgY2hh clsxXSA6IHN0YWNrYWxsb2MgY2hhclsyXTsKKyAJfQorIAorKwkvLyBEaXNhYmxlcyB2ZXJpZmll cgorIAl1bnNhZmUgdm9pZCBGb28gKCkKKyAJeworLQorIAl9CistfQorXCBObyBuZXdsaW5lIGF0 IGVuZCBvZiBmaWxlCisrfQorZGlmZiAtLWdpdCBhL21jcy90ZXN0cy90ZXN0LTk1MC5jcyBiL21j cy90ZXN0cy90ZXN0LTk1MC5jcworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAw MDAwLi5mZWY3NjRjODVjYworLS0tIC9kZXYvbnVsbAorKysrIGIvbWNzL3Rlc3RzL3Rlc3QtOTUw LmNzCitAQCAtMCwwICsxLDEyIEBACisrdXNpbmcgU3lzdGVtOworKworK3B1YmxpYyBjbGFzcyBC CisreworKwlwdWJsaWMgc3RhdGljIHZvaWQgTWFpbiAoKQorKwl7CisrCQlpbnQgYSA9IDFfMF8z OworKwkJZG91YmxlIGIgPSAwX18wZSsxXzE7CisrCQlpbnQgYyA9IDBiMF9fMV8wOworKwkJaW50 IGQgPSAweDBfX0ZfMDsKKysJfQorK30KK1wgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorZGlm ZiAtLWdpdCBhL21jcy90ZXN0cy90ZXN0LTk2MC5jcyBiL21jcy90ZXN0cy90ZXN0LTk2MC5jcwor bmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAwMDAwLi5hYzJhMWNhNzQzNQorLS0t IC9kZXYvbnVsbAorKysrIGIvbWNzL3Rlc3RzL3Rlc3QtOTYwLmNzCitAQCAtMCwwICsxLDIwIEBA CisrLy8gQ29tcGlsZXIgb3B0aW9uczogLWxhbmd2ZXJzaW9uOjcuMgorKworK3B1YmxpYyBjbGFz cyBCCisreworKwlwcml2YXRlIHByb3RlY3RlZCBlbnVtIEUKKysJeworKwl9CisrCisrCXB1Ymxp YyBpbnQgSW5kZXggeyBnZXQ7IHByb3RlY3RlZCBwcml2YXRlIHNldDsgfQorKworKwlpbnRlcm5h bCBzdHJpbmcgUzEgeyBnZXQ7IHByaXZhdGUgcHJvdGVjdGVkIHNldDsgfQorKworKwlwcm90ZWN0 ZWQgc3RyaW5nIFMyIHsgZ2V0OyBwcml2YXRlIHByb3RlY3RlZCBzZXQ7IH0KKysKKysJcHJpdmF0 ZSBwcm90ZWN0ZWQgaW50IGZpZWxkOworKworKwlwdWJsaWMgc3RhdGljIHZvaWQgTWFpbiAoKQor Kwl7CisrCX0KKyt9CitcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKK2RpZmYgLS1naXQgYS9t Y3MvdGVzdHMvdGVzdC05NjEuY3MgYi9tY3MvdGVzdHMvdGVzdC05NjEuY3MKK25ldyBmaWxlIG1v ZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwMDAwMC4uZWZlMTk2NzM4NzUKKy0tLSAvZGV2L251bGwK KysrKyBiL21jcy90ZXN0cy90ZXN0LTk2MS5jcworQEAgLTAsMCArMSwzNCBAQAorKy8vIENvbXBp bGVyIG9wdGlvbnM6IC1sYW5ndmVyc2lvbjpsYXRlc3QKKysKKyt1c2luZyBTeXN0ZW07CisrCisr cHVibGljIHN0YXRpYyBjbGFzcyBCIHsKKysJcHVibGljIHN0YXRpYyB2b2lkIE1haW4gKCkKKysJ eworKwkJaW50IGxvID0gMTsKKysJCUJhciAoaW4gbG8pOwkJCisrCX0KKysKKysJcHVibGljIHN0 YXRpYyB2b2lkIEJhciAoaW4gaW50IGFyZykKKysJeworKwl9CisrCisrCXN0YXRpYyB2b2lkIEZv byAodGhpcyBpbiBpbnQgc3JjKQorKwl7CisrCQlEIHAgPSAoaW4gaW50IGEpID0+IHt9OworKwl9 CisrCisrfQorKworK2RlbGVnYXRlIHZvaWQgRCAoaW4gaW50IGFyZyk7CisrCisrY2xhc3MgTQor K3sKKysJaW50IHRoaXNbaW4gaW50IGFdIHsgc2V0IHsgfSB9CisrCXB1YmxpYyBzdGF0aWMgaW1w bGljaXQgb3BlcmF0b3Igc3RyaW5nIChpbiBNIG0pID0+IG51bGw7CisrCXB1YmxpYyBNIChpbiBp bnQgYXJnKSB7IH0KKysKKysJcHVibGljIHZvaWQgVGVzdDIgKGluIGludCBhcmcpCisrCXsKKysJ fQorK30KK1wgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorZGlmZiAtLWdpdCBhL21jcy90ZXN0 cy90ZXN0LWFub24tMTIzLmNzIGIvbWNzL3Rlc3RzL3Rlc3QtYW5vbi0xMjMuY3MKK2luZGV4IDkx YzcyYjQ1YWZlLi40NWFhYjI3YzBhNSAxMDA2NDQKKy0tLSBhL21jcy90ZXN0cy90ZXN0LWFub24t MTIzLmNzCisrKysgYi9tY3MvdGVzdHMvdGVzdC1hbm9uLTEyMy5jcworQEAgLTEsMyArMSw0IEBA CisrLy8gQ29tcGlsZXIgb3B0aW9uczogLWxhbmd2ZXJzaW9uOmxhdGVzdAorIC8vIENsb25pbmcg dGVzdHMKKyAKKyB1c2luZyBTeXN0ZW07CitAQCAtMTAzLDcgKzEwNCwxMSBAQCBwdWJsaWMgY2xh c3MgQyA6IEIKKyAJCQlkZWZhdWx0OgorIAkJCQlicmVhazsKKyAJCQl9CistCQl9KTsJCQorKwkJ fSk7CisrCisrCQlUZXN0ICgoKSA9PiB7CisrCQkJY2hhciBjaCA9IGRlZmF1bHQ7CisrCQl9KTsK KyAJCQorIAkJdmFyIGMgPSBuZXcgQyAoKTsKKyAJCWMuSW5zdGFuY2VUZXN0cyAoKTsKK2RpZmYg LS1naXQgYS9tY3MvdGVzdHMvdGVzdC1iaW5hcnlsaXRlcmFsLmNzIGIvbWNzL3Rlc3RzL3Rlc3Qt YmluYXJ5bGl0ZXJhbC5jcworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAwMDAw Li4zZDljYzg5YmNiZAorLS0tIC9kZXYvbnVsbAorKysrIGIvbWNzL3Rlc3RzL3Rlc3QtYmluYXJ5 bGl0ZXJhbC5jcworQEAgLTAsMCArMSw1NyBAQAorKworK2NsYXNzIERlbW8geworKwlzdGF0aWMg aW50IE1haW4gKCkKKysJeworKwkJaWYgKDBiMSAhPSAxKQorKwkJCXJldHVybiAxOworKwkJdmFy IGhleDEgPSAweDEyM3VsOworKwkJdmFyIGJpbjEgID0gMGIxMDAxMDAwMTF1bDsKKysJCXZhciBi aW4xMSA9IDBiMTAwMTAwMDExbHU7CisrCQlpZiAoaGV4MSAhPSBiaW4xKQorKwkJCXJldHVybiAy OworKwkJaWYgKGhleDEgIT0gYmluMTEpCisrCQkJcmV0dXJuIDM7CisrCQlpZiAoaGV4MS5HZXRU eXBlICgpICE9IGJpbjEuR2V0VHlwZSAoKSkKKysJCQlyZXR1cm4gNDsKKysJCWlmIChoZXgxLkdl dFR5cGUgKCkgIT0gYmluMTEuR2V0VHlwZSAoKSkKKysJCQlyZXR1cm4gNTsKKysKKysJCXZhciBo ZXgyID0gMHg3RkZGRkZGRjsKKysJCXZhciBiaW4yID0gMGIxMTExMTExMTExMTExMTExMTExMTEx MTExMTExMTExOworKworKwkJaWYgKGhleDIgIT0gYmluMikKKysJCQlyZXR1cm4gNjsKKysJCWlm IChoZXgyLkdldFR5cGUgKCkgIT0gYmluMi5HZXRUeXBlICgpKQorKwkJCXJldHVybiA3OworKwor KwkJdmFyIGhleDMgPSAweEZGRkZGRkZGOworKwkJdmFyIGJpbjMgPSAwYjExMTExMTExMTExMTEx MTExMTExMTExMTExMTExMTExOworKwkJaWYgKGhleDMgIT0gYmluMykKKysJCQlyZXR1cm4gODsK KysJCWlmIChoZXgzLkdldFR5cGUgKCkgIT0gYmluMy5HZXRUeXBlICgpKQorKwkJCXJldHVybiA5 OworKworKwkJdmFyIGhleDQgPSAweEZGRkZGRkZGdTsKKysJCXZhciBiaW40ID0gMGIxMTExMTEx MTExMTExMTExMTExMTExMTExMTExMTExMXU7CisrCQlpZiAoaGV4NCAhPSBiaW40KQorKwkJCXJl dHVybiAxMDsKKysJCWlmIChoZXg0LkdldFR5cGUgKCkgIT0gYmluNC5HZXRUeXBlICgpKQorKwkJ CXJldHVybiAxMTsKKysKKysJCXZhciBoZXg1ID0gMHg3RkZGRkZGRkZGRkZGRkZGOworKwkJdmFy IGJpbjUgPSAwYjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEx MTExMTExMTExMTExMTExMTsKKysJCWlmIChoZXg1ICE9IGJpbjUpCisrCQkJcmV0dXJuIDEyOwor KwkJaWYgKGhleDUuR2V0VHlwZSAoKSAhPSBiaW41LkdldFR5cGUgKCkpCisrCQkJcmV0dXJuIDEz OworKworKwkJdmFyIGhleDYgPSAweEZGRkZGRkZGRkZGRkZGRkY7CisrCQl2YXIgYmluNiA9IDBi MTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEx MTExMTExMTsKKysJCWlmIChoZXg2ICE9IGJpbjYpCisrCQkJcmV0dXJuIDE0OworKwkJaWYgKGhl eDYuR2V0VHlwZSAoKSAhPSBiaW42LkdldFR5cGUgKCkpCisrCQkJcmV0dXJuIDE1OworKworKwkJ cmV0dXJuIDA7CisrCX0KKyt9CitcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKK2RpZmYgLS1n aXQgYS9tY3MvdGVzdHMvdGVzdC1kZWNsLWV4cHItMDUuY3MgYi9tY3MvdGVzdHMvdGVzdC1kZWNs LWV4cHItMDUuY3MKK2luZGV4IDczMGZkNDI3OGNhLi45MDdjZGUwYjhkNyAxMDA2NDQKKy0tLSBh L21jcy90ZXN0cy90ZXN0LWRlY2wtZXhwci0wNS5jcworKysrIGIvbWNzL3Rlc3RzL3Rlc3QtZGVj bC1leHByLTA1LmNzCitAQCAtNiw2ICs2LDExIEBAIGNsYXNzIFgKKyAJCXsKKyAJCQlhcmcgPSBz LlRvU3RyaW5nICgpOworIAkJfQorKworKwkJd2hpbGUgKHRydWUgJiYgQ2FsbCAob3V0IHN0cmlu ZyBzMikpCisrCQl7CisrCQkJYXJnID0gczIuVG9TdHJpbmcgKCk7CisrCQl9CisgCX0KKyAKKyAJ c3RhdGljIGJvb2wgQ2FsbCAob3V0IHN0cmluZyBzKQorZGlmZiAtLWdpdCBhL21jcy90ZXN0cy90 ZXN0LWRlY2wtZXhwci0wNi5jcyBiL21jcy90ZXN0cy90ZXN0LWRlY2wtZXhwci0wNi5jcworbmV3 IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAwMDAwLi45NzM0ZjJlYzJhNworLS0tIC9k ZXYvbnVsbAorKysrIGIvbWNzL3Rlc3RzL3Rlc3QtZGVjbC1leHByLTA2LmNzCitAQCAtMCwwICsx LDE3IEBACisrdXNpbmcgU3lzdGVtOworKworK3B1YmxpYyBjbGFzcyBDCisreworKwlGdW5jPGJv b2w+IGYgPSAoKSA9PiBGb28gKG91dCBpbnQgYXJnKTsKKysKKysJc3RhdGljIGJvb2wgRm9vIChv dXQgaW50IGFyZykKKysJeworKwkJYXJnID0gMjsKKysJCXJldHVybiBmYWxzZTsKKysJfQorKwor KwlwdWJsaWMgc3RhdGljIHZvaWQgTWFpbiAoKQorKwl7CisrCQluZXcgQyAoKTsKKysJfQorK30K K1wgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorZGlmZiAtLWdpdCBhL21jcy90ZXN0cy90ZXN0 LWRlZmF1bHQtMDEuY3MgYi9tY3MvdGVzdHMvdGVzdC1kZWZhdWx0LTAxLmNzCitpbmRleCA4MjNl MzNjNDUxYi4uMjhhZmY4MzBjZDkgMTAwNjQ0CistLS0gYS9tY3MvdGVzdHMvdGVzdC1kZWZhdWx0 LTAxLmNzCisrKysgYi9tY3MvdGVzdHMvdGVzdC1kZWZhdWx0LTAxLmNzCitAQCAtNDEsNyArNDEs MTEgQEAgc3RhdGljIGNsYXNzIFgKKyAJc3RhdGljIFN5c3RlbS5GdW5jPGludD4gTTQgKCkKKyAJ eworIAkJcmV0dXJuICgpID0+IGRlZmF1bHQ7CistCX0gCisrCX0KKysKKysJc3RhdGljIHZvaWQg Rm9vIChJSSBhID0gZGVmYXVsdCAoSUkpLCBJSSBiID0gZGVmYXVsdCwgSUkgYyA9IChJSSkgbnVs bCkKKysJeworKwl9CisgfQorIC8qCisgZW51bSBFCitAQCAtNDksNCArNTMsMTAgQEAgZW51bSBF CisgCUEgPSBkZWZhdWx0LAorIAlCID0gZGVmYXVsdCArIDEKKyB9CistKi8KK1wgTm8gbmV3bGlu ZSBhdCBlbmQgb2YgZmlsZQorKyovCisrCisrCisraW50ZXJmYWNlIElJCisreworKworK30KK1wg Tm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorZGlmZiAtLWdpdCBhL21jcy90ZXN0cy90ZXN0LWZp eGVkLTAxLmNzIGIvbWNzL3Rlc3RzL3Rlc3QtZml4ZWQtMDEuY3MKK25ldyBmaWxlIG1vZGUgMTAw NjQ0CitpbmRleCAwMDAwMDAwMDAwMC4uNDY4NGIwYzVhMDYKKy0tLSAvZGV2L251bGwKKysrKyBi L21jcy90ZXN0cy90ZXN0LWZpeGVkLTAxLmNzCitAQCAtMCwwICsxLDIwIEBACisrLy8gQ29tcGls ZXIgb3B0aW9uczogLXVuc2FmZSAtbGFuZ3ZlcnNpb246bGF0ZXN0CisrCisrdW5zYWZlIGNsYXNz IEMKKyt7CisrCXB1YmxpYyBzdGF0aWMgdm9pZCBNYWluICgpCisrCXsKKysJCWZpeGVkIChpbnQq IHAgPSBuZXcgRml4YWJsZSAoKSkgeworKwkJCVN5c3RlbS5Db25zb2xlLldyaXRlTGluZSAoKnAp OworKwkJCVN5c3RlbS5Db25zb2xlLldyaXRlTGluZSAocCBbMl0pOworKwkJfQorKwl9CisrCisr CXN0cnVjdCBGaXhhYmxlCisrCXsKKysJCXB1YmxpYyByZWYgaW50IEdldFBpbm5hYmxlUmVmZXJl bmNlICgpCisrCQl7CisrCQkJcmV0dXJuIHJlZiAobmV3IGludFtdIHsgMSwgMiwgMyB9KVswXTsK KysJCX0KKysJfQorK30KK1wgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorZGlmZiAtLWdpdCBh L21jcy90ZXN0cy90ZXN0LXBhdHRlcm4tMTMuY3MgYi9tY3MvdGVzdHMvdGVzdC1wYXR0ZXJuLTEz LmNzCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMDAwMDAuLjMxNWM3YTllNGJl CistLS0gL2Rldi9udWxsCisrKysgYi9tY3MvdGVzdHMvdGVzdC1wYXR0ZXJuLTEzLmNzCitAQCAt MCwwICsxLDE5IEBACisrdXNpbmcgU3lzdGVtOworKworK2NsYXNzIEMgOiBCCisreworKworK30K KysKKytwdWJsaWMgY2xhc3MgQgorK3sKKysJcHVibGljIHN0YXRpYyB2b2lkIE1haW4gKCkKKysJ eworKwkJQyBjID0gbmV3IEMgKCk7CisrCisrCQlpZiAoYyBpcyBCIGIpCisrCQl7CisrCQkJQ29u c29sZS5Xcml0ZUxpbmUgKGIgPT0gbnVsbCk7CisrCQl9CisrCX0KKyt9CitcIE5vIG5ld2xpbmUg YXQgZW5kIG9mIGZpbGUKK2RpZmYgLS1naXQgYS9tY3MvdGVzdHMvdGVzdC1yZWYtMDcuY3MgYi9t Y3MvdGVzdHMvdGVzdC1yZWYtMDcuY3MKK2luZGV4IDRhYTE2NTc5NzUyLi5mMTdjZmI0NDNiNSAx MDA2NDQKKy0tLSBhL21jcy90ZXN0cy90ZXN0LXJlZi0wNy5jcworKysrIGIvbWNzL3Rlc3RzL3Rl c3QtcmVmLTA3LmNzCitAQCAtMSw2ICsxLDYgQEAKKyAvLyBDb21waWxlciBvcHRpb25zOiAtbGFu Z3ZlcnNpb246bGF0ZXN0CisgCistcHVibGljIHJlYWRvbmx5IHBhcnRpYWwgcmVmIHN0cnVjdCBU ZXN0CisrcHVibGljIHJlYWRvbmx5IHJlZiBwYXJ0aWFsIHN0cnVjdCBUZXN0CisgeworIAlwdWJs aWMgc3RhdGljIHZvaWQgTWFpbiAoKQorIAl7CitAQCAtMTQsNiArMTQsMTEgQEAgcHVibGljIHJl YWRvbmx5IHBhcnRpYWwgcmVmIHN0cnVjdCBUZXN0CisgCX0KKyB9CisgCisrcmVmIHBhcnRpYWwg c3RydWN0IFRlc3QKKyt7CisrCisrfQorKworIHJlZiBzdHJ1Y3QgU2Vjb25kCisgeworIAlUZXN0 IGZpZWxkOworZGlmZiAtLWdpdCBhL21jcy90ZXN0cy90ZXN0LXJlZi0xMS5jcyBiL21jcy90ZXN0 cy90ZXN0LXJlZi0xMS5jcworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAwMDAw Li44ZDM5MmE3N2QwNworLS0tIC9kZXYvbnVsbAorKysrIGIvbWNzL3Rlc3RzL3Rlc3QtcmVmLTEx LmNzCitAQCAtMCwwICsxLDEzIEBACisrY2xhc3MgUHJvZ3JhbQorK3sKKysJc3RhdGljIGludCB4 OworKwlzdGF0aWMgaW50IHk7CisrCisrICAgIHB1YmxpYyBzdGF0aWMgaW50IE1haW4gKCkKKysg ICAgeworKyAgICAJYm9vbCBiID0gZmFsc2U7CisrICAgICAgICByZWYgaW50IHRhcmdldEJ1Y2tl dCA9IHJlZiBiID8gcmVmIHggOiByZWYgeTsKKysKKysgICAgICAgIHJldHVybiAwOworKyAgICB9 CisrfQorXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCitkaWZmIC0tZ2l0IGEvbWNzL3Rlc3Rz L3Rlc3QtcmVmLTEyLmNzIGIvbWNzL3Rlc3RzL3Rlc3QtcmVmLTEyLmNzCituZXcgZmlsZSBtb2Rl IDEwMDY0NAoraW5kZXggMDAwMDAwMDAwMDAuLjc4NmE0MTYyZjRmCistLS0gL2Rldi9udWxsCisr KysgYi9tY3MvdGVzdHMvdGVzdC1yZWYtMTIuY3MKK0BAIC0wLDAgKzEsMjIgQEAKKysvLyBDb21w aWxlciBvcHRpb25zOiAtdW5zYWZlCisrCisrdW5zYWZlIGNsYXNzIFgKKyt7CisrCXB1YmxpYyBz dGF0aWMgdm9pZCBNYWluICgpCisrCXsKKysJCXZvaWQqIHBvaW50ZXIgPSBudWxsOworKyAJCUJh ciAocmVmIEZvbyAocmVmICooYnl0ZSopcG9pbnRlcikpOworKwl9CisrCisrCXN0YXRpYyBpbnQg ZmllbGQ7CisrCisrCXN0YXRpYyByZWYgaW50IEZvbyAocmVmIGJ5dGUgYikKKysJeworKwkJcmV0 dXJuIHJlZiBmaWVsZDsKKysJfQorKworKwlzdGF0aWMgdm9pZCBCYXIgKHJlZiBpbnQgaSkKKysJ eworKworKwl9CisrfQorXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCitkaWZmIC0tZ2l0IGEv bWNzL3Rlc3RzL3Rlc3QtdHVwbGUtMDIuY3MgYi9tY3MvdGVzdHMvdGVzdC10dXBsZS0wMi5jcwor aW5kZXggYzA0OTI3NTk0NTIuLmFiNzIyNjQyYWViIDEwMDY0NAorLS0tIGEvbWNzL3Rlc3RzL3Rl c3QtdHVwbGUtMDIuY3MKKysrKyBiL21jcy90ZXN0cy90ZXN0LXR1cGxlLTAyLmNzCitAQCAtMjYs NiArMjYsMTEgQEAgY2xhc3MgVHVwbGVDb252ZXJzaW9ucworIAkJKHN0cmluZyB2MSwgb2JqZWN0 IHYyKSBiID0gKCJhIiwgImIiKTsKKyAKKyAJCShpbnQgdjEsIGxvbmcgdjIpPyB4ID0gbnVsbDsK KysKKysgICAgICAgIHZhciBhcnJheSA9IG5ldyBbXSB7CisrICAgICAgICAgICAgKG5hbWU6ICJB Iiwgb2Zmc2V0OiAwKSwKKysgICAgICAgICAgICAobmFtZTogIkIiLCBzaXplOiA0KQorKyAgICAg ICAgfTsJCQorIAl9CisgCisgCXN0YXRpYyB2b2lkIEZvbzxUPiAoVCBhcmcpCitkaWZmIC0tZ2l0 IGEvbWNzL3Rlc3RzL3Rlc3QtdHVwbGUtMDguY3MgYi9tY3MvdGVzdHMvdGVzdC10dXBsZS0wOC5j cworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAwMDAwLi5mZDMzNzViNGRmNgor LS0tIC9kZXYvbnVsbAorKysrIGIvbWNzL3Rlc3RzL3Rlc3QtdHVwbGUtMDguY3MKK0BAIC0wLDAg KzEsMjQgQEAKKyt1c2luZyBTeXN0ZW07CisrdXNpbmcgU3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVy aWM7CisrdXNpbmcgU3lzdGVtLlRocmVhZGluZy5UYXNrczsKKysKKytjbGFzcyBYCisreworKwlw dWJsaWMgc3RhdGljIHZvaWQgTWFpbiAoKQorKwl7CisrCQl2YXIgeCA9IG5ldyBYICgpOworKwkJ eC5UZXN0ICgpLldhaXQgKCk7CisrCX0KKysKKysJaW50IGEsIGI7CisrCisrCWFzeW5jIFRhc2sg VGVzdCAoKQorKwl7CisrCQkoYSwgYikgPSBhd2FpdCBXYWl0aW5nICgpOworKwl9CisrCisrCVRh c2s8KGludCwgaW50KT4gV2FpdGluZyAoKQorKwl7CisrCQlyZXR1cm4gVGFzay5Gcm9tUmVzdWx0 ICgoMSwgMykpOworKwl9CisrfQorXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCitkaWZmIC0t Z2l0IGEvbWNzL3Rlc3RzL3Rlc3QtdHVwbGUtMTAuY3MgYi9tY3MvdGVzdHMvdGVzdC10dXBsZS0x MC5jcworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAwMDAwLi44MmY0ZTAxZWMx ZgorLS0tIC9kZXYvbnVsbAorKysrIGIvbWNzL3Rlc3RzL3Rlc3QtdHVwbGUtMTAuY3MKK0BAIC0w LDAgKzEsOSBAQAorK3VzaW5nIFN5c3RlbS5MaW5xOworKworK2NsYXNzIFByb2dyYW0geworKyAg ICBwdWJsaWMgc3RhdGljIGludCBNYWluICgpCisrICAgIHsKKysgICAgICAgIHZhciBsID0gKGZy b20gZiBpbiAodHlwZW9mIChQcm9ncmFtKSkuR2V0RmllbGRzKCkgc2VsZWN0IChuYW1lOiBmLk5h bWUsIG9mZnNldDogMCkpLlRvTGlzdCgpOworKyAgICAgICAgcmV0dXJuIDA7CisrICAgIH0KKyt9 CitcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKK2RpZmYgLS1naXQgYS9tY3MvdGVzdHMvdGVz dC10dXBsZS0xMS5jcyBiL21jcy90ZXN0cy90ZXN0LXR1cGxlLTExLmNzCituZXcgZmlsZSBtb2Rl IDEwMDY0NAoraW5kZXggMDAwMDAwMDAwMDAuLmIyYWViMjQwMjZjCistLS0gL2Rldi9udWxsCisr KysgYi9tY3MvdGVzdHMvdGVzdC10dXBsZS0xMS5jcworQEAgLTAsMCArMSwyMCBAQAorK3VzaW5n IFN5c3RlbTsKKysKKytjbGFzcyBQcm9ncmFtCisreworKwlwdWJsaWMgc3RhdGljIGludCBNYWlu ICgpCisrCXsKKysJCWludCB4ID0gMTsKKysJCWludCB5ID0gMjsKKysKKysJCSh4LCB5KSA9ICh5 LCB4KTsKKysKKysJCWlmICh4ICE9IDIpCisrCQkJcmV0dXJuIDE7CisrCisrCQlpZiAoeSAhPSAx KQorKwkJCXJldHVybiAyOworKworKwkJcmV0dXJuIDA7CisrCX0KKyt9CitkaWZmIC0tZ2l0IGEv bWNzL3Rlc3RzL3Zlci1pbC1uZXRfNF94LnhtbCBiL21jcy90ZXN0cy92ZXItaWwtbmV0XzRfeC54 bWwKK2luZGV4IDRkYmM3MDQyYThhLi4yYmRlODI3MDMzOCAxMDA2NDQKKy0tLSBhL21jcy90ZXN0 cy92ZXItaWwtbmV0XzRfeC54bWwKKysrKyBiL21jcy90ZXN0cy92ZXItaWwtbmV0XzRfeC54bWwK K0BAIC0zMTY4LDYgKzMxNjgsMzMgQEAKKyAgICAgICA8L21ldGhvZD4KKyAgICAgPC90eXBlPgor ICAgPC90ZXN0PgorKyAgPHRlc3QgbmFtZT0iZHRlc3QtMDY2LmNzIj4KKysgICAgPHR5cGUgbmFt ZT0iQyI+CisrICAgICAgPG1ldGhvZCBuYW1lPSJWb2lkIE1haW4oKSIgYXR0cnM9IjE0NSI+Cisr ICAgICAgICA8c2l6ZT40MTwvc2l6ZT4KKysgICAgICA8L21ldGhvZD4KKysgICAgICA8bWV0aG9k IG5hbWU9IlZvaWQgLmN0b3IoKSIgYXR0cnM9IjYyNzgiPgorKyAgICAgICAgPHNpemU+Nzwvc2l6 ZT4KKysgICAgICA8L21ldGhvZD4KKysgICAgPC90eXBlPgorKyAgICA8dHlwZSBuYW1lPSImbHQ7 Jmd0O19fQW5vblR5cGUwYDFbJmx0O1gmZ3Q7X19UXSI+CisrICAgICAgPG1ldGhvZCBuYW1lPSIm bHQ7WCZndDtfX1QgZ2V0X1goKSIgYXR0cnM9IjIxODIiPgorKyAgICAgICAgPHNpemU+Nzwvc2l6 ZT4KKysgICAgICA8L21ldGhvZD4KKysgICAgICA8bWV0aG9kIG5hbWU9IkJvb2xlYW4gRXF1YWxz KFN5c3RlbS5PYmplY3QpIiBhdHRycz0iMTk4Ij4KKysgICAgICAgIDxzaXplPjM5PC9zaXplPgor KyAgICAgIDwvbWV0aG9kPgorKyAgICAgIDxtZXRob2QgbmFtZT0iSW50MzIgR2V0SGFzaENvZGUo KSIgYXR0cnM9IjE5OCI+CisrICAgICAgICA8c2l6ZT42Mzwvc2l6ZT4KKysgICAgICA8L21ldGhv ZD4KKysgICAgICA8bWV0aG9kIG5hbWU9IlN5c3RlbS5TdHJpbmcgVG9TdHJpbmcoKSIgYXR0cnM9 IjE5OCI+CisrICAgICAgICA8c2l6ZT42Nzwvc2l6ZT4KKysgICAgICA8L21ldGhvZD4KKysgICAg ICA8bWV0aG9kIG5hbWU9IlZvaWQgLmN0b3IoJmx0O1gmZ3Q7X19UKSIgYXR0cnM9IjYyNzgiPgor KyAgICAgICAgPHNpemU+MTQ8L3NpemU+CisrICAgICAgPC9tZXRob2Q+CisrICAgIDwvdHlwZT4K KysgIDwvdGVzdD4KKyAgIDx0ZXN0IG5hbWU9ImR0ZXN0LWFub250eXBlLTAxLmNzIj4KKyAgICAg PHR5cGUgbmFtZT0iQyI+CisgICAgICAgPG1ldGhvZCBuYW1lPSJWb2lkIE1haW4oKSIgYXR0cnM9 IjE1MCI+CitAQCAtMTEwNjQsNyArMTEwOTEsNyBAQAorICAgICA8L3R5cGU+CisgICAgIDx0eXBl IG5hbWU9IlgiPgorICAgICAgIDxtZXRob2QgbmFtZT0iSW50MzIgQmVlcihTeXN0ZW0uTnVsbGFi bGVgMVtJcmlzaFB1Yl0pIiBhdHRycz0iMTQ1Ij4KKy0gICAgICAgIDxzaXplPjcyPC9zaXplPgor KyAgICAgICAgPHNpemU+NjA8L3NpemU+CisgICAgICAgPC9tZXRob2Q+CisgICAgICAgPG1ldGhv ZCBuYW1lPSJJbnQzMiBUZXN0KFN5c3RlbS5OdWxsYWJsZWAxW1N5c3RlbS5JbnQzMl0pIiBhdHRy cz0iMTQ1Ij4KKyAgICAgICAgIDxzaXplPjYyPC9zaXplPgorQEAgLTE5NTA4LDcgKzE5NTM1LDcg QEAKKyAgICAgPC90eXBlPgorICAgICA8dHlwZSBuYW1lPSJDIj4KKyAgICAgICA8bWV0aG9kIG5h bWU9IkludDMyIE1haW4oKSIgYXR0cnM9IjE1MCI+CistICAgICAgICA8c2l6ZT4yNjc8L3NpemU+ CisrICAgICAgICA8c2l6ZT4yNTU8L3NpemU+CisgICAgICAgPC9tZXRob2Q+CisgICAgICAgPG1l dGhvZCBuYW1lPSJWb2lkIC5jdG9yKCkiIGF0dHJzPSI2Mjc4Ij4KKyAgICAgICAgIDxzaXplPjc8 L3NpemU+CitAQCAtMTk3NDIsNyArMTk3NjksNyBAQAorICAgPHRlc3QgbmFtZT0iZ3Rlc3QtNjI5 LmNzIj4KKyAgICAgPHR5cGUgbmFtZT0iUHJvZ3JhbSI+CisgICAgICAgPG1ldGhvZCBuYW1lPSJW b2lkIE1haW4oKSIgYXR0cnM9IjE1MCI+CistICAgICAgICA8c2l6ZT4xMTY8L3NpemU+CisrICAg ICAgICA8c2l6ZT4xMjE8L3NpemU+CisgICAgICAgPC9tZXRob2Q+CisgICAgICAgPG1ldGhvZCBu YW1lPSJWb2lkIC5jdG9yKCkiIGF0dHJzPSI2Mjc4Ij4KKyAgICAgICAgIDxzaXplPjc8L3NpemU+ CitAQCAtMjAxNDcsNiArMjAxNzQsMjEgQEAKKyAgICAgICA8L21ldGhvZD4KKyAgICAgPC90eXBl PgorICAgPC90ZXN0PgorKyAgPHRlc3QgbmFtZT0iZ3Rlc3QtNjQ3LmNzIj4KKysgICAgPHR5cGUg bmFtZT0iUHJvZ3JhbSI+CisrICAgICAgPG1ldGhvZCBuYW1lPSJJbnQzMiBNYWluKCkiIGF0dHJz PSIxNTAiPgorKyAgICAgICAgPHNpemU+OTk8L3NpemU+CisrICAgICAgPC9tZXRob2Q+CisrICAg ICAgPG1ldGhvZCBuYW1lPSJWb2lkIC5jdG9yKCkiIGF0dHJzPSI2Mjc4Ij4KKysgICAgICAgIDxz aXplPjc8L3NpemU+CisrICAgICAgPC9tZXRob2Q+CisrICAgIDwvdHlwZT4KKysgICAgPHR5cGUg bmFtZT0iUHJvZ3JhbStNeVN0cnVjdCI+CisrICAgICAgPG1ldGhvZCBuYW1lPSJJbnQzMiBvcF9J bXBsaWNpdChTeXN0ZW0uTnVsbGFibGVgMVtQcm9ncmFtK015U3RydWN0XSkiIGF0dHJzPSIyMTk4 Ij4KKysgICAgICAgIDxzaXplPjIyPC9zaXplPgorKyAgICAgIDwvbWV0aG9kPgorKyAgICA8L3R5 cGU+CisrICA8L3Rlc3Q+CisgICA8dGVzdCBuYW1lPSJndGVzdC1hbm9udHlwZS0wMS5jcyI+Cisg ICAgIDx0eXBlIG5hbWU9IlRlc3QiPgorICAgICAgIDxtZXRob2QgbmFtZT0iSW50MzIgTWFpbigp IiBhdHRycz0iMTUwIj4KK0BAIC00NzYwOSw3ICs0NzY1MSw3IEBACisgICAgICAgICA8c2l6ZT43 PC9zaXplPgorICAgICAgIDwvbWV0aG9kPgorICAgICAgIDxtZXRob2QgbmFtZT0iVm9pZCBDb3B5 VG8oSW50MzIsIENoYXJbXSwgSW50MzIsIEludDMyKSIgYXR0cnM9IjE0NSI+CistICAgICAgICA8 c2l6ZT43Mzwvc2l6ZT4KKysgICAgICAgIDxzaXplPjc4PC9zaXplPgorICAgICAgIDwvbWV0aG9k PgorICAgICA8L3R5cGU+CisgICA8L3Rlc3Q+CitAQCAtNTE0NjgsMTAgKzUxNTEwLDEwIEBACisg ICA8dGVzdCBuYW1lPSJ0ZXN0LTg4LmNzIj4KKyAgICAgPHR5cGUgbmFtZT0iWCI+CisgICAgICAg PG1ldGhvZCBuYW1lPSJWb2lkIGYoU3lzdGVtLlN0cmluZykiIGF0dHJzPSIxNDUiPgorLSAgICAg ICAgPHNpemU+MjA8L3NpemU+CisrICAgICAgICA8c2l6ZT4xMjwvc2l6ZT4KKyAgICAgICA8L21l dGhvZD4KKyAgICAgICA8bWV0aG9kIG5hbWU9IkludDMyIE1haW4oKSIgYXR0cnM9IjE1MCI+Cist ICAgICAgICA8c2l6ZT43MDwvc2l6ZT4KKysgICAgICAgIDxzaXplPjYyPC9zaXplPgorICAgICAg IDwvbWV0aG9kPgorICAgICAgIDxtZXRob2QgbmFtZT0iVm9pZCAuY3RvcigpIiBhdHRycz0iNjI3 OCI+CisgICAgICAgICA8c2l6ZT43PC9zaXplPgorQEAgLTUyMTQ4LDcgKzUyMTkwLDcgQEAKKyAg ICAgICAgIDxzaXplPjE0PC9zaXplPgorICAgICAgIDwvbWV0aG9kPgorICAgICAgIDxtZXRob2Qg bmFtZT0iVm9pZCBPdXRlcihTeXN0ZW0uU3RyaW5nKSIgYXR0cnM9IjE0NSI+CistICAgICAgICA8 c2l6ZT4yOTwvc2l6ZT4KKysgICAgICAgIDxzaXplPjM0PC9zaXplPgorICAgICAgIDwvbWV0aG9k PgorICAgICAgIDxtZXRob2QgbmFtZT0iVm9pZCBJbm5lcihDaGFyKiBCeVJlZiwgQ2hhciopIiBh dHRycz0iMTQ1Ij4KKyAgICAgICAgIDxzaXplPjEwPC9zaXplPgorQEAgLTUyMzU5LDEwICs1MjQw MSwxMCBAQAorICAgPHRlc3QgbmFtZT0idGVzdC05MjguY3MiPgorICAgICA8dHlwZSBuYW1lPSJQ cm9ncmFtIj4KKyAgICAgICA8bWV0aG9kIG5hbWU9IlZvaWQgVGVzdCgpIiBhdHRycz0iMTUwIj4K Ky0gICAgICAgIDxzaXplPjI1PC9zaXplPgorKyAgICAgICAgPHNpemU+MzA8L3NpemU+CisgICAg ICAgPC9tZXRob2Q+CisgICAgICAgPG1ldGhvZCBuYW1lPSJJbnQzMiBNYWluKCkiIGF0dHJzPSIx NTAiPgorLSAgICAgICAgPHNpemU+MTA1PC9zaXplPgorKyAgICAgICAgPHNpemU+MTQxPC9zaXpl PgorICAgICAgIDwvbWV0aG9kPgorICAgICAgIDxtZXRob2QgbmFtZT0iQm9vbGVhbiAmbHQ7TWFp biZndDttX18wKFN5c3RlbS5SZWZsZWN0aW9uLkxvY2FsVmFyaWFibGVJbmZvKSIgYXR0cnM9IjE0 NSI+CisgICAgICAgICA8c2l6ZT4yOTwvc2l6ZT4KK0BAIC01MjM3MCw2ICs1MjQxMiwxMiBAQAor ICAgICAgIDxtZXRob2QgbmFtZT0iVm9pZCAuY3RvcigpIiBhdHRycz0iNjI3OCI+CisgICAgICAg ICA8c2l6ZT43PC9zaXplPgorICAgICAgIDwvbWV0aG9kPgorKyAgICAgIDxtZXRob2QgbmFtZT0i Qm9vbGVhbiBTdHJpbmdOdWxsKFN5c3RlbS5TdHJpbmcpIiBhdHRycz0iMTUwIj4KKysgICAgICAg IDxzaXplPjMyPC9zaXplPgorKyAgICAgIDwvbWV0aG9kPgorKyAgICAgIDxtZXRob2QgbmFtZT0i Qm9vbGVhbiBBcnJheU51bGwoSW50MzJbXSkiIGF0dHJzPSIxNTAiPgorKyAgICAgICAgPHNpemU+ NDU8L3NpemU+CisrICAgICAgPC9tZXRob2Q+CisgICAgIDwvdHlwZT4KKyAgIDwvdGVzdD4KKyAg IDx0ZXN0IG5hbWU9InRlc3QtOTI5LmNzIj4KK0BAIC01MjgxNCw3ICs1Mjg2Miw3IEBACisgICA8 dGVzdCBuYW1lPSJ0ZXN0LTk0OC5jcyI+CisgICAgIDx0eXBlIG5hbWU9IlgiPgorICAgICAgIDxt ZXRob2QgbmFtZT0iVm9pZCBNYWluKCkiIGF0dHJzPSIxNTAiPgorLSAgICAgICAgPHNpemU+MTY8 L3NpemU+CisrICAgICAgICA8c2l6ZT4xMDM8L3NpemU+CisgICAgICAgPC9tZXRob2Q+CisgICAg ICAgPG1ldGhvZCBuYW1lPSJWb2lkIEZvbygpIiBhdHRycz0iMTI5Ij4KKyAgICAgICAgIDxzaXpl PjI8L3NpemU+CitAQCAtNTI4MzQsNiArNTI4ODIsMTYgQEAKKyAgICAgICA8L21ldGhvZD4KKyAg ICAgPC90eXBlPgorICAgPC90ZXN0PgorKyAgPHRlc3QgbmFtZT0idGVzdC05NTAuY3MiPgorKyAg ICA8dHlwZSBuYW1lPSJCIj4KKysgICAgICA8bWV0aG9kIG5hbWU9IlZvaWQgTWFpbigpIiBhdHRy cz0iMTUwIj4KKysgICAgICAgIDxzaXplPjIzPC9zaXplPgorKyAgICAgIDwvbWV0aG9kPgorKyAg ICAgIDxtZXRob2QgbmFtZT0iVm9pZCAuY3RvcigpIiBhdHRycz0iNjI3OCI+CisrICAgICAgICA8 c2l6ZT43PC9zaXplPgorKyAgICAgIDwvbWV0aG9kPgorKyAgICA8L3R5cGU+CisrICA8L3Rlc3Q+ CisgICA8dGVzdCBuYW1lPSJ0ZXN0LTk2LmNzIj4KKyAgICAgPHR5cGUgbmFtZT0iTjEuQSI+Cisg ICAgICAgPG1ldGhvZCBuYW1lPSJJbnQzMiBNYWluKCkiIGF0dHJzPSIxNTAiPgorQEAgLTUyODU4 LDYgKzUyOTE2LDgwIEBACisgICAgICAgPC9tZXRob2Q+CisgICAgIDwvdHlwZT4KKyAgIDwvdGVz dD4KKysgIDx0ZXN0IG5hbWU9InRlc3QtOTYwLmNzIj4KKysgICAgPHR5cGUgbmFtZT0iQiI+Cisr ICAgICAgPG1ldGhvZCBuYW1lPSJJbnQzMiBnZXRfSW5kZXgoKSIgYXR0cnM9IjIxODIiPgorKyAg ICAgICAgPHNpemU+MTQ8L3NpemU+CisrICAgICAgPC9tZXRob2Q+CisrICAgICAgPG1ldGhvZCBu YW1lPSJWb2lkIHNldF9JbmRleChJbnQzMikiIGF0dHJzPSIyMTc4Ij4KKysgICAgICAgIDxzaXpl Pjg8L3NpemU+CisrICAgICAgPC9tZXRob2Q+CisrICAgICAgPG1ldGhvZCBuYW1lPSJTeXN0ZW0u U3RyaW5nIGdldF9TMSgpIiBhdHRycz0iMjE3OSI+CisrICAgICAgICA8c2l6ZT4xNDwvc2l6ZT4K KysgICAgICA8L21ldGhvZD4KKysgICAgICA8bWV0aG9kIG5hbWU9IlZvaWQgc2V0X1MxKFN5c3Rl bS5TdHJpbmcpIiBhdHRycz0iMjE3OCI+CisrICAgICAgICA8c2l6ZT44PC9zaXplPgorKyAgICAg IDwvbWV0aG9kPgorKyAgICAgIDxtZXRob2QgbmFtZT0iU3lzdGVtLlN0cmluZyBnZXRfUzIoKSIg YXR0cnM9IjIxODAiPgorKyAgICAgICAgPHNpemU+MTQ8L3NpemU+CisrICAgICAgPC9tZXRob2Q+ CisrICAgICAgPG1ldGhvZCBuYW1lPSJWb2lkIHNldF9TMihTeXN0ZW0uU3RyaW5nKSIgYXR0cnM9 IjIxNzgiPgorKyAgICAgICAgPHNpemU+ODwvc2l6ZT4KKysgICAgICA8L21ldGhvZD4KKysgICAg ICA8bWV0aG9kIG5hbWU9IlZvaWQgTWFpbigpIiBhdHRycz0iMTUwIj4KKysgICAgICAgIDxzaXpl PjI8L3NpemU+CisrICAgICAgPC9tZXRob2Q+CisrICAgICAgPG1ldGhvZCBuYW1lPSJWb2lkIC5j dG9yKCkiIGF0dHJzPSI2Mjc4Ij4KKysgICAgICAgIDxzaXplPjc8L3NpemU+CisrICAgICAgPC9t ZXRob2Q+CisrICAgIDwvdHlwZT4KKysgIDwvdGVzdD4KKysgIDx0ZXN0IG5hbWU9InRlc3QtOTYx LmNzIj4KKysgICAgPHR5cGUgbmFtZT0iQiI+CisrICAgICAgPG1ldGhvZCBuYW1lPSJWb2lkIE1h aW4oKSIgYXR0cnM9IjE1MCI+CisrICAgICAgICA8c2l6ZT4xMDwvc2l6ZT4KKysgICAgICA8L21l dGhvZD4KKysgICAgICA8bWV0aG9kIG5hbWU9IlZvaWQgRm9vKEludDMyKSIgYXR0cnM9IjE0NSI+ CisrICAgICAgICA8c2l6ZT4zMjwvc2l6ZT4KKysgICAgICA8L21ldGhvZD4KKysgICAgICA8bWV0 aG9kIG5hbWU9IlZvaWQgJmx0O0ZvbyZndDttX18wKEludDMyKSIgYXR0cnM9IjE0NSI+CisrICAg ICAgICA8c2l6ZT4yPC9zaXplPgorKyAgICAgIDwvbWV0aG9kPgorKyAgICA8L3R5cGU+CisrICAg IDx0eXBlIG5hbWU9IkQiPgorKyAgICAgIDxtZXRob2QgbmFtZT0iVm9pZCBJbnZva2UoSW50MzIp IiBhdHRycz0iNDU0Ij4KKysgICAgICAgIDxzaXplPjA8L3NpemU+CisrICAgICAgPC9tZXRob2Q+ CisrICAgICAgPG1ldGhvZCBuYW1lPSJTeXN0ZW0uSUFzeW5jUmVzdWx0IEJlZ2luSW52b2tlKElu dDMyLCBTeXN0ZW0uQXN5bmNDYWxsYmFjaywgU3lzdGVtLk9iamVjdCkiIGF0dHJzPSI0NTQiPgor KyAgICAgICAgPHNpemU+MDwvc2l6ZT4KKysgICAgICA8L21ldGhvZD4KKysgICAgICA8bWV0aG9k IG5hbWU9IlZvaWQgRW5kSW52b2tlKFN5c3RlbS5JQXN5bmNSZXN1bHQpIiBhdHRycz0iNDU0Ij4K KysgICAgICAgIDxzaXplPjA8L3NpemU+CisrICAgICAgPC9tZXRob2Q+CisrICAgICAgPG1ldGhv ZCBuYW1lPSJWb2lkIC5jdG9yKE9iamVjdCwgSW50UHRyKSIgYXR0cnM9IjYyNzgiPgorKyAgICAg ICAgPHNpemU+MDwvc2l6ZT4KKysgICAgICA8L21ldGhvZD4KKysgICAgPC90eXBlPgorKyAgICA8 dHlwZSBuYW1lPSJNIj4KKysgICAgICA8bWV0aG9kIG5hbWU9IlZvaWQgc2V0X0l0ZW0oSW50MzIs IEludDMyKSIgYXR0cnM9IjIxNzciPgorKyAgICAgICAgPHNpemU+Mjwvc2l6ZT4KKysgICAgICA8 L21ldGhvZD4KKysgICAgICA8bWV0aG9kIG5hbWU9IlN5c3RlbS5TdHJpbmcgb3BfSW1wbGljaXQo TSkiIGF0dHJzPSIyMTk4Ij4KKysgICAgICAgIDxzaXplPjk8L3NpemU+CisrICAgICAgPC9tZXRo b2Q+CisrICAgICAgPG1ldGhvZCBuYW1lPSJWb2lkIFRlc3QyKEludDMyKSIgYXR0cnM9IjEzNCI+ CisrICAgICAgICA8c2l6ZT4yPC9zaXplPgorKyAgICAgIDwvbWV0aG9kPgorKyAgICAgIDxtZXRo b2QgbmFtZT0iVm9pZCAuY3RvcihJbnQzMikiIGF0dHJzPSI2Mjc4Ij4KKysgICAgICAgIDxzaXpl Pjg8L3NpemU+CisrICAgICAgPC9tZXRob2Q+CisrICAgIDwvdHlwZT4KKysgICAgPHR5cGUgbmFt ZT0iQiI+CisrICAgICAgPG1ldGhvZCBuYW1lPSJWb2lkIEJhcihJbnQzMikiIGF0dHJzPSIxNTAi PgorKyAgICAgICAgPHNpemU+Mjwvc2l6ZT4KKysgICAgICA8L21ldGhvZD4KKysgICAgPC90eXBl PgorKyAgPC90ZXN0PgorICAgPHRlc3QgbmFtZT0idGVzdC05Ny5jcyI+CisgICAgIDx0eXBlIG5h bWU9IlgiPgorICAgICAgIDxtZXRob2QgbmFtZT0iSW50MzIgTWFpbigpIiBhdHRycz0iMTUwIj4K K0BAIC01NDQ0OCw3ICs1NDU4MCw3IEBACisgICAgICAgICA8c2l6ZT4xOTwvc2l6ZT4KKyAgICAg ICA8L21ldGhvZD4KKyAgICAgICA8bWV0aG9kIG5hbWU9IlZvaWQgTWFpbigpIiBhdHRycz0iMTUw Ij4KKy0gICAgICAgIDxzaXplPjI0Nzwvc2l6ZT4KKysgICAgICAgIDxzaXplPjI4MTwvc2l6ZT4K KyAgICAgICA8L21ldGhvZD4KKyAgICAgICA8bWV0aG9kIG5hbWU9IlZvaWQgJmx0O0Jhc2VNJmd0 O19fQmFzZUNhbGxQcm94eTAoKSIgYXR0cnM9IjEyOSI+CisgICAgICAgICA8c2l6ZT43PC9zaXpl PgorQEAgLTU0NTE4LDYgKzU0NjUwLDkgQEAKKyAgICAgICA8bWV0aG9kIG5hbWU9IlZvaWQgJmx0 O01haW4mZ3Q7bV9fNShFKSIgYXR0cnM9IjE0NSI+CisgICAgICAgICA8c2l6ZT4zNTwvc2l6ZT4K KyAgICAgICA8L21ldGhvZD4KKysgICAgICA8bWV0aG9kIG5hbWU9IlZvaWQgJmx0O01haW4mZ3Q7 bV9fNigpIiBhdHRycz0iMTQ1Ij4KKysgICAgICAgIDxzaXplPjQ8L3NpemU+CisrICAgICAgPC9t ZXRob2Q+CisgICAgIDwvdHlwZT4KKyAgIDwvdGVzdD4KKyAgIDx0ZXN0IG5hbWU9InRlc3QtYW5v bi0xMjQuY3MiPgorQEAgLTY3MDIwLDYgKzY3MTU1LDE2IEBACisgICAgICAgPC9tZXRob2Q+Cisg ICAgIDwvdHlwZT4KKyAgIDwvdGVzdD4KKysgIDx0ZXN0IG5hbWU9InRlc3QtYmluYXJ5bGl0ZXJh bC5jcyI+CisrICAgIDx0eXBlIG5hbWU9IkRlbW8iPgorKyAgICAgIDxtZXRob2QgbmFtZT0iSW50 MzIgTWFpbigpIiBhdHRycz0iMTQ1Ij4KKysgICAgICAgIDxzaXplPjUwMzwvc2l6ZT4KKysgICAg ICA8L21ldGhvZD4KKysgICAgICA8bWV0aG9kIG5hbWU9IlZvaWQgLmN0b3IoKSIgYXR0cnM9IjYy NzgiPgorKyAgICAgICAgPHNpemU+Nzwvc2l6ZT4KKysgICAgICA8L21ldGhvZD4KKysgICAgPC90 eXBlPgorKyAgPC90ZXN0PgorICAgPHRlc3QgbmFtZT0idGVzdC1jbHMtMDAuY3MiPgorICAgICA8 dHlwZSBuYW1lPSJDTFNDTGFzc182Ij4KKyAgICAgICA8bWV0aG9kIG5hbWU9IlZvaWQgYWRkX0Rp c3Bvc2VkKERlbGVnYXRlKSIgYXR0cnM9IjIxODIiPgorQEAgLTY4NjQxLDcgKzY4Nzg2LDcgQEAK KyAgIDx0ZXN0IG5hbWU9InRlc3QtZGVjbC1leHByLTA1LmNzIj4KKyAgICAgPHR5cGUgbmFtZT0i WCI+CisgICAgICAgPG1ldGhvZCBuYW1lPSJWb2lkIFRlc3QoU3lzdGVtLlN0cmluZykiIGF0dHJz PSIxMjkiPgorLSAgICAgICAgPHNpemU+Mjk8L3NpemU+CisrICAgICAgICA8c2l6ZT42Mjwvc2l6 ZT4KKyAgICAgICA8L21ldGhvZD4KKyAgICAgICA8bWV0aG9kIG5hbWU9IkJvb2xlYW4gQ2FsbChT eXN0ZW0uU3RyaW5nIEJ5UmVmKSIgYXR0cnM9IjE0NSI+CisgICAgICAgICA8c2l6ZT4xNzwvc2l6 ZT4KK0BAIC02ODY1NCw2ICs2ODc5OSwyMiBAQAorICAgICAgIDwvbWV0aG9kPgorICAgICA8L3R5 cGU+CisgICA8L3Rlc3Q+CisrICA8dGVzdCBuYW1lPSJ0ZXN0LWRlY2wtZXhwci0wNi5jcyI+Cisr ICAgIDx0eXBlIG5hbWU9IkMiPgorKyAgICAgIDxtZXRob2QgbmFtZT0iQm9vbGVhbiBGb28oSW50 MzIgQnlSZWYpIiBhdHRycz0iMTQ1Ij4KKysgICAgICAgIDxzaXplPjEzPC9zaXplPgorKyAgICAg IDwvbWV0aG9kPgorKyAgICAgIDxtZXRob2QgbmFtZT0iVm9pZCBNYWluKCkiIGF0dHJzPSIxNTAi PgorKyAgICAgICAgPHNpemU+ODwvc2l6ZT4KKysgICAgICA8L21ldGhvZD4KKysgICAgICA8bWV0 aG9kIG5hbWU9IkJvb2xlYW4gJmx0O2YmZ3Q7bV9fMCgpIiBhdHRycz0iMTQ1Ij4KKysgICAgICAg IDxzaXplPjE1PC9zaXplPgorKyAgICAgIDwvbWV0aG9kPgorKyAgICAgIDxtZXRob2QgbmFtZT0i Vm9pZCAuY3RvcigpIiBhdHRycz0iNjI3OCI+CisrICAgICAgICA8c2l6ZT40Mjwvc2l6ZT4KKysg ICAgICA8L21ldGhvZD4KKysgICAgPC90eXBlPgorKyAgPC90ZXN0PgorICAgPHRlc3QgbmFtZT0i dGVzdC1kZWZhdWx0LTAxLmNzIj4KKyAgICAgPHR5cGUgbmFtZT0iWCI+CisgICAgICAgPG1ldGhv ZCBuYW1lPSJWb2lkIE1haW4oKSIgYXR0cnM9IjE1MCI+CitAQCAtNjg2NzQsNiArNjg4MzUsOSBA QAorICAgICAgIDxtZXRob2QgbmFtZT0iSW50MzIgJmx0O000Jmd0O21fXzAoKSIgYXR0cnM9IjE0 NSI+CisgICAgICAgICA8c2l6ZT45PC9zaXplPgorICAgICAgIDwvbWV0aG9kPgorKyAgICAgIDxt ZXRob2QgbmFtZT0iVm9pZCBGb28oSUksIElJLCBJSSkiIGF0dHJzPSIxNDUiPgorKyAgICAgICAg PHNpemU+Mjwvc2l6ZT4KKysgICAgICA8L21ldGhvZD4KKyAgICAgPC90eXBlPgorICAgPC90ZXN0 PgorICAgPHRlc3QgbmFtZT0idGVzdC1kZWZhdWx0LTAyLmNzIj4KK0BAIC02OTE1OCw2ICs2OTMy MiwyMSBAQAorICAgICAgIDwvbWV0aG9kPgorICAgICA8L3R5cGU+CisgICA8L3Rlc3Q+CisrICA8 dGVzdCBuYW1lPSJ0ZXN0LWZpeGVkLTAxLmNzIj4KKysgICAgPHR5cGUgbmFtZT0iQyI+CisrICAg ICAgPG1ldGhvZCBuYW1lPSJWb2lkIE1haW4oKSIgYXR0cnM9IjE1MCI+CisrICAgICAgICA8c2l6 ZT4zOTwvc2l6ZT4KKysgICAgICA8L21ldGhvZD4KKysgICAgICA8bWV0aG9kIG5hbWU9IlZvaWQg LmN0b3IoKSIgYXR0cnM9IjYyNzgiPgorKyAgICAgICAgPHNpemU+Nzwvc2l6ZT4KKysgICAgICA8 L21ldGhvZD4KKysgICAgPC90eXBlPgorKyAgICA8dHlwZSBuYW1lPSJDK0ZpeGFibGUiPgorKyAg ICAgIDxtZXRob2QgbmFtZT0iSW50MzImYW1wOyBHZXRQaW5uYWJsZVJlZmVyZW5jZSgpIiBhdHRy cz0iMTM0Ij4KKysgICAgICAgIDxzaXplPjMyPC9zaXplPgorKyAgICAgIDwvbWV0aG9kPgorKyAg ICA8L3R5cGU+CisrICA8L3Rlc3Q+CisgICA8dGVzdCBuYW1lPSJ0ZXN0LWludGVycG9sYXRpb24t MDEuY3MiPgorICAgICA8dHlwZSBuYW1lPSJUZXN0Ij4KKyAgICAgICA8bWV0aG9kIG5hbWU9Iklu dDMyIE1haW4oKSIgYXR0cnM9IjE1MCI+CitAQCAtNzI1NjQsNyArNzI3NDMsNyBAQAorICAgICA8 L3R5cGU+CisgICAgIDx0eXBlIG5hbWU9IlgrJmx0O1Rlc3QmZ3Q7Y19fSXRlcmF0b3IwIj4KKyAg ICAgICA8bWV0aG9kIG5hbWU9IkJvb2xlYW4gTW92ZU5leHQoKSIgYXR0cnM9IjQ4NiI+CistICAg ICAgICA8c2l6ZT4xODQ8L3NpemU+CisrICAgICAgICA8c2l6ZT4yMDY8L3NpemU+CisgICAgICAg PC9tZXRob2Q+CisgICAgICAgPG1ldGhvZCBuYW1lPSJJbnQzMiBTeXN0ZW0uQ29sbGVjdGlvbnMu R2VuZXJpYy5JRW51bWVyYXRvciZsdDtpbnQmZ3Q7LmdldF9DdXJyZW50KCkiIGF0dHJzPSIyNTI5 Ij4KKyAgICAgICAgIDxzaXplPjE0PC9zaXplPgorQEAgLTcyNzUwLDYgKzcyOTI5LDIxIEBACisg ICAgICAgPC9tZXRob2Q+CisgICAgIDwvdHlwZT4KKyAgIDwvdGVzdD4KKysgIDx0ZXN0IG5hbWU9 InRlc3QtcGF0dGVybi0xMy5jcyI+CisrICAgIDx0eXBlIG5hbWU9IkMiPgorKyAgICAgIDxtZXRo b2QgbmFtZT0iVm9pZCAuY3RvcigpIiBhdHRycz0iNjI3OCI+CisrICAgICAgICA8c2l6ZT43PC9z aXplPgorKyAgICAgIDwvbWV0aG9kPgorKyAgICA8L3R5cGU+CisrICAgIDx0eXBlIG5hbWU9IkIi PgorKyAgICAgIDxtZXRob2QgbmFtZT0iVm9pZCBNYWluKCkiIGF0dHJzPSIxNTAiPgorKyAgICAg ICAgPHNpemU+MzU8L3NpemU+CisrICAgICAgPC9tZXRob2Q+CisrICAgICAgPG1ldGhvZCBuYW1l PSJWb2lkIC5jdG9yKCkiIGF0dHJzPSI2Mjc4Ij4KKysgICAgICAgIDxzaXplPjc8L3NpemU+Cisr ICAgICAgPC9tZXRob2Q+CisrICAgIDwvdHlwZT4KKysgIDwvdGVzdD4KKyAgIDx0ZXN0IG5hbWU9 InRlc3QtcHJhZ21hLXVucmVjb2duaXplZC5jcyI+CisgICAgIDx0eXBlIG5hbWU9IkMiPgorICAg ICAgIDxtZXRob2QgbmFtZT0iVm9pZCBNYWluKCkiIGF0dHJzPSIxNTAiPgorQEAgLTczMTU1LDYg KzczMzQ5LDExIEBACisgICAgIDwvdHlwZT4KKyAgIDwvdGVzdD4KKyAgIDx0ZXN0IG5hbWU9InRl c3QtcmVmLTA3LmNzIj4KKysgICAgPHR5cGUgbmFtZT0iVGVzdE1haW4iPgorKyAgICAgIDxtZXRo b2QgbmFtZT0iVm9pZCBNYWluKCkiIGF0dHJzPSIxNTAiPgorKyAgICAgICAgPHNpemU+Njwvc2l6 ZT4KKysgICAgICA8L21ldGhvZD4KKysgICAgPC90eXBlPgorICAgICA8dHlwZSBuYW1lPSJUZXN0 Ij4KKyAgICAgICA8bWV0aG9kIG5hbWU9IlZvaWQgTWFpbigpIiBhdHRycz0iMTUwIj4KKyAgICAg ICAgIDxzaXplPjE4PC9zaXplPgorQEAgLTczMjQzLDYgKzczNDQyLDMyIEBACisgICAgICAgPC9t ZXRob2Q+CisgICAgIDwvdHlwZT4KKyAgIDwvdGVzdD4KKysgIDx0ZXN0IG5hbWU9InRlc3QtcmVm LTExLmNzIj4KKysgICAgPHR5cGUgbmFtZT0iUHJvZ3JhbSI+CisrICAgICAgPG1ldGhvZCBuYW1l PSJJbnQzMiBNYWluKCkiIGF0dHJzPSIxNTAiPgorKyAgICAgICAgPHNpemU+MzQ8L3NpemU+Cisr ICAgICAgPC9tZXRob2Q+CisrICAgICAgPG1ldGhvZCBuYW1lPSJWb2lkIC5jdG9yKCkiIGF0dHJz PSI2Mjc4Ij4KKysgICAgICAgIDxzaXplPjc8L3NpemU+CisrICAgICAgPC9tZXRob2Q+CisrICAg IDwvdHlwZT4KKysgIDwvdGVzdD4KKysgIDx0ZXN0IG5hbWU9InRlc3QtcmVmLTEyLmNzIj4KKysg ICAgPHR5cGUgbmFtZT0iWCI+CisrICAgICAgPG1ldGhvZCBuYW1lPSJWb2lkIE1haW4oKSIgYXR0 cnM9IjE1MCI+CisrICAgICAgICA8c2l6ZT4xNjwvc2l6ZT4KKysgICAgICA8L21ldGhvZD4KKysg ICAgICA8bWV0aG9kIG5hbWU9IkludDMyJmFtcDsgRm9vKEJ5dGUgQnlSZWYpIiBhdHRycz0iMTQ1 Ij4KKysgICAgICAgIDxzaXplPjE0PC9zaXplPgorKyAgICAgIDwvbWV0aG9kPgorKyAgICAgIDxt ZXRob2QgbmFtZT0iVm9pZCBCYXIoSW50MzIgQnlSZWYpIiBhdHRycz0iMTQ1Ij4KKysgICAgICAg IDxzaXplPjI8L3NpemU+CisrICAgICAgPC9tZXRob2Q+CisrICAgICAgPG1ldGhvZCBuYW1lPSJW b2lkIC5jdG9yKCkiIGF0dHJzPSI2Mjc4Ij4KKysgICAgICAgIDxzaXplPjc8L3NpemU+CisrICAg ICAgPC9tZXRob2Q+CisrICAgIDwvdHlwZT4KKysgIDwvdGVzdD4KKyAgIDx0ZXN0IG5hbWU9InRl c3Qtc3RhdGljLXVzaW5nLTAxLmNzIj4KKyAgICAgPHR5cGUgbmFtZT0iQS5CLlgiPgorICAgICAg IDxtZXRob2QgbmFtZT0iSW50MzIgVGVzdCgpIiBhdHRycz0iMTUwIj4KK0BAIC03MzQ4Miw3ICs3 MzcwNyw3IEBACisgICAgICAgICA8c2l6ZT4zMjwvc2l6ZT4KKyAgICAgICA8L21ldGhvZD4KKyAg ICAgICA8bWV0aG9kIG5hbWU9IkludDMyIFRlc3QoKSIgYXR0cnM9IjEzNCI+CistICAgICAgICA8 c2l6ZT4xMDwvc2l6ZT4KKysgICAgICAgIDxzaXplPjI8L3NpemU+CisgICAgICAgPC9tZXRob2Q+ CisgICAgICAgPG1ldGhvZCBuYW1lPSJTeXN0ZW0uT2JqZWN0IEZvbygpIiBhdHRycz0iMTI5Ij4K KyAgICAgICAgIDxzaXplPjEwPC9zaXplPgorQEAgLTczNDkxLDE2ICs3MzcxNiwxNiBAQAorICAg ICAgICAgPHNpemU+MjM8L3NpemU+CisgICAgICAgPC9tZXRob2Q+CisgICAgICAgPG1ldGhvZCBu YW1lPSJWb2lkIFRlc3QzKEludDMyIEJ5UmVmKSIgYXR0cnM9IjE0NSI+CistICAgICAgICA8c2l6 ZT4zPC9zaXplPgorKyAgICAgICAgPHNpemU+Mjwvc2l6ZT4KKyAgICAgICA8L21ldGhvZD4KKyAg ICAgICA8bWV0aG9kIG5hbWU9IkludDMyIGdldF9JdGVtKEludDMyKSIgYXR0cnM9IjIxNzciPgor LSAgICAgICAgPHNpemU+MTA8L3NpemU+CisrICAgICAgICA8c2l6ZT4yPC9zaXplPgorICAgICAg IDwvbWV0aG9kPgorICAgICAgIDxtZXRob2QgbmFtZT0iVm9pZCBhZGRfRXZlbnQoU3lzdGVtLkFj dGlvbikiIGF0dHJzPSIyMTgyIj4KKy0gICAgICAgIDxzaXplPjM8L3NpemU+CisrICAgICAgICA8 c2l6ZT4yPC9zaXplPgorICAgICAgIDwvbWV0aG9kPgorICAgICAgIDxtZXRob2QgbmFtZT0iVm9p ZCByZW1vdmVfRXZlbnQoU3lzdGVtLkFjdGlvbikiIGF0dHJzPSIyMTgyIj4KKy0gICAgICAgIDxz aXplPjM8L3NpemU+CisrICAgICAgICA8c2l6ZT4yPC9zaXplPgorICAgICAgIDwvbWV0aG9kPgor ICAgICAgIDxtZXRob2QgbmFtZT0iVm9pZCBUZXN0RXhwcl8xKEJvb2xlYW4pIiBhdHRycz0iMTI5 Ij4KKyAgICAgICAgIDxzaXplPjIxPC9zaXplPgorQEAgLTczNTI3LDcgKzczNzUyLDcgQEAKKyAg ICAgICAgIDxzaXplPjc8L3NpemU+CisgICAgICAgPC9tZXRob2Q+CisgICAgICAgPG1ldGhvZCBu YW1lPSJJbnQzMiBUZXN0RXhwcl82KEludDMyIEJ5UmVmKSIgYXR0cnM9IjE0NSI+CistICAgICAg ICA8c2l6ZT4xMDwvc2l6ZT4KKysgICAgICAgIDxzaXplPjI8L3NpemU+CisgICAgICAgPC9tZXRo b2Q+CisgICAgICAgPG1ldGhvZCBuYW1lPSJJbnQzMiBUZXN0RXhwcl83KEludDMyIEJ5UmVmKSIg YXR0cnM9IjEyOSI+CisgICAgICAgICA8c2l6ZT4xNTwvc2l6ZT4KK0BAIC03MzU2OSw3ICs3Mzc5 NCw3IEBACisgICA8dGVzdCBuYW1lPSJ0ZXN0LXR1cGxlLTAyLmNzIj4KKyAgICAgPHR5cGUgbmFt ZT0iVHVwbGVDb252ZXJzaW9ucyI+CisgICAgICAgPG1ldGhvZCBuYW1lPSJWb2lkIE1haW4oKSIg YXR0cnM9IjE1MCI+CistICAgICAgICA8c2l6ZT4zMTQ8L3NpemU+CisrICAgICAgICA8c2l6ZT4z Njg8L3NpemU+CisgICAgICAgPC9tZXRob2Q+CisgICAgICAgPG1ldGhvZCBuYW1lPSJWb2lkIEZv b1tUXShUKSIgYXR0cnM9IjE0NSI+CisgICAgICAgICA8c2l6ZT4yPC9zaXplPgorQEAgLTczNzYx LDYgKzczOTg2LDI5IEBACisgICAgICAgPC9tZXRob2Q+CisgICAgIDwvdHlwZT4KKyAgIDwvdGVz dD4KKysgIDx0ZXN0IG5hbWU9InRlc3QtdHVwbGUtMTAuY3MiPgorKyAgICA8dHlwZSBuYW1lPSJQ cm9ncmFtIj4KKysgICAgICA8bWV0aG9kIG5hbWU9IkludDMyIE1haW4oKSIgYXR0cnM9IjE1MCI+ CisrICAgICAgICA8c2l6ZT42NTwvc2l6ZT4KKysgICAgICA8L21ldGhvZD4KKysgICAgICA8bWV0 aG9kIG5hbWU9IlN5c3RlbS5WYWx1ZVR1cGxlYDJbU3lzdGVtLlN0cmluZyxTeXN0ZW0uSW50MzJd ICZsdDtNYWluJmd0O21fXzAoU3lzdGVtLlJlZmxlY3Rpb24uRmllbGRJbmZvKSIgYXR0cnM9IjE0 NSI+CisrICAgICAgICA8c2l6ZT4yMTwvc2l6ZT4KKysgICAgICA8L21ldGhvZD4KKysgICAgICA8 bWV0aG9kIG5hbWU9IlZvaWQgLmN0b3IoKSIgYXR0cnM9IjYyNzgiPgorKyAgICAgICAgPHNpemU+ Nzwvc2l6ZT4KKysgICAgICA8L21ldGhvZD4KKysgICAgPC90eXBlPgorKyAgPC90ZXN0PgorKyAg PHRlc3QgbmFtZT0idGVzdC10dXBsZS0xMS5jcyI+CisrICAgIDx0eXBlIG5hbWU9IlByb2dyYW0i PgorKyAgICAgIDxtZXRob2QgbmFtZT0iSW50MzIgTWFpbigpIiBhdHRycz0iMTUwIj4KKysgICAg ICAgIDxzaXplPjcwPC9zaXplPgorKyAgICAgIDwvbWV0aG9kPgorKyAgICAgIDxtZXRob2QgbmFt ZT0iVm9pZCAuY3RvcigpIiBhdHRycz0iNjI3OCI+CisrICAgICAgICA8c2l6ZT43PC9zaXplPgor KyAgICAgIDwvbWV0aG9kPgorKyAgICA8L3R5cGU+CisrICA8L3Rlc3Q+CisgICA8dGVzdCBuYW1l PSJ0ZXN0LXZhci0wMS5jcyI+CisgICAgIDx0eXBlIG5hbWU9IlRlc3QiPgorICAgICAgIDxtZXRo b2QgbmFtZT0iSW50MzIgTWFpbigpIiBhdHRycz0iMTUwIj4KK0BAIC03Mzg5Niw0ICs3NDE0NCw0 IEBACisgICAgICAgPC9tZXRob2Q+CisgICAgIDwvdHlwZT4KKyAgIDwvdGVzdD4KKy08L3Rlc3Rz PgorXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCisrPC90ZXN0cz4KK2RpZmYgLS1naXQgYS9t c3ZjL3NjcmlwdHMvU3lzdGVtLldlYi5wcmUgYi9tc3ZjL3NjcmlwdHMvU3lzdGVtLldlYi5wcmUK K2luZGV4IGMwNzFiZjQ1YmZkLi44ZjhkMjYyNTk3ZiAxMDA2NDQKKy0tLSBhL21zdmMvc2NyaXB0 cy9TeXN0ZW0uV2ViLnByZQorKysrIGIvbXN2Yy9zY3JpcHRzL1N5c3RlbS5XZWIucHJlCitAQCAt MSArMSBAQAorLUBNT05PQCAkKFByb2plY3REaXIpXC4uXGxpYlxuZXRfNF94XGN1bGV2ZWwuZXhl IC1vICQoUHJvamVjdERpcilcU3lzdGVtLldlYlxVcGxldmVsSGVscGVyLmNzICQoUHJvamVjdERp cilcVXBsZXZlbEhlbHBlckRlZmluaXRpb25zLnhtbAorK0BNT05PQCAkKFtNU0J1aWxkXTo6R2V0 RGlyZWN0b3J5TmFtZU9mRmlsZUFib3ZlKCQoVGFyZ2V0RGlyKSwgY3VsZXZlbC5leGUpKVxjdWxl dmVsLmV4ZSAtbyAkKFByb2plY3REaXIpXFN5c3RlbS5XZWJcVXBsZXZlbEhlbHBlci5jcyAkKFBy b2plY3REaXIpXFVwbGV2ZWxIZWxwZXJEZWZpbml0aW9ucy54bWwKK2RpZmYgLS1naXQgYS9tc3Zj L3NjcmlwdHMvY3Nwcm9qLnRtcGwgYi9tc3ZjL3NjcmlwdHMvY3Nwcm9qLnRtcGwKK2luZGV4IDY0 MmM5NTM3MzIxLi5jMThiNTFkMzM0ZSAxMDA2NDQKKy0tLSBhL21zdmMvc2NyaXB0cy9jc3Byb2ou dG1wbAorKysrIGIvbXN2Yy9zY3JpcHRzL2NzcHJvai50bXBsCitAQCAtMTcsNiArMTcsNyBAQAor ICAgICA8SW50ZXJtZWRpYXRlT3V0cHV0UGF0aD5vYmotQE9VVFBVVFNVRkZJWEA8L0ludGVybWVk aWF0ZU91dHB1dFBhdGg+DQorICAgICA8R2VuZXJhdGVUYXJnZXRGcmFtZXdvcmtBdHRyaWJ1dGU+ ZmFsc2U8L0dlbmVyYXRlVGFyZ2V0RnJhbWV3b3JrQXR0cmlidXRlPg0KKyAgICAgQE5PU1RETElC QA0KKysgICAgQE1FVEFEQVRBVkVSU0lPTkANCisgICAgIEBTVEFSVFVQT0JKRUNUQA0KKyAgICAg QE5PQ09ORklHQA0KKyAgICAgQEFMTE9XVU5TQUZFQA0KK2RpZmYgLS1naXQgYS9tc3ZjL3Njcmlw dHMvZ2VucHJvai5jcyBiL21zdmMvc2NyaXB0cy9nZW5wcm9qLmNzCitpbmRleCAzOTg3YWJiMjEy Yi4uMTQ0MDgwMGIyYjMgMTAwNjQ0CistLS0gYS9tc3ZjL3NjcmlwdHMvZ2VucHJvai5jcworKysr IGIvbXN2Yy9zY3JpcHRzL2dlbnByb2ouY3MKK0BAIC0yNywyNyArMjcsNDMgQEAgcHVibGljIGVu dW0gVGFyZ2V0IHsKKyAKKyBjbGFzcyBTbG5HZW5lcmF0b3IgeworIAlwdWJsaWMgc3RhdGljIHJl YWRvbmx5IHN0cmluZyBOZXdMaW5lID0gIlxyXG4iOyAvL0Vudmlyb25tZW50Lk5ld0xpbmU7IC8v ICJcbiI7IAorLQlwdWJsaWMgU2xuR2VuZXJhdG9yIChzdHJpbmcgZm9ybWF0VmVyc2lvbiA9ICIy MDEyIikKKysJcHVibGljIFNsbkdlbmVyYXRvciAoc3RyaW5nIHNsblZlcnNpb24pCisgCXsKKy0J CXN3aXRjaCAoZm9ybWF0VmVyc2lvbikgeworLQkJY2FzZSAiMjAwOCI6CistCQkJdGhpcy5oZWFk ZXIgPSBNYWtlSGVhZGVyICgiMTAuMDAiLCAiMjAwOCIpOworLQkJCWJyZWFrOworLQkJZGVmYXVs dDoKKy0JCQl0aGlzLmhlYWRlciA9IE1ha2VIZWFkZXIgKCIxMi4wMCIsICIyMDEyIik7CistCQkJ YnJlYWs7CistCQl9CisrCQlDb25zb2xlLldyaXRlTGluZSgiUmVxdWVzdGVkIHNsbiB2ZXJzaW9u IGlzIHswfSIsIHNsblZlcnNpb24pOworKwkJdGhpcy5oZWFkZXIgPSBNYWtlSGVhZGVyICgiMTIu MDAiLCAiMTUiLCAiMTUuMC4wLjAiKTsKKyAJfQorIAorLQljb25zdCBzdHJpbmcgcHJvamVjdF9z dGFydCA9ICJQcm9qZWN0KFwie3tGQUUwNEVDMC0zMDFGLTExRDMtQkY0Qi0wMEMwNEY3OUVGQkN9 fVwiKSA9IFwiezB9XCIsIFwiezF9XCIsIFwiezJ9XCIiOyAvLyBOb3RlOiBObyBuZWVkIHRvIGRv dWJsZSB1cCBvbiB7fSBhcm91bmQgezJ9CisrCWNvbnN0IHN0cmluZyBwcm9qZWN0X3N0YXJ0ID0g IlByb2plY3QoXCJ7MH1cIikgPSBcInsxfVwiLCBcInsyfVwiLCBcInszfVwiIjsgLy8gTm90ZTog Tm8gbmVlZCB0byBkb3VibGUgdXAgb24ge30gYXJvdW5kIHsyfQorIAljb25zdCBzdHJpbmcgcHJv amVjdF9lbmQgPSAiRW5kUHJvamVjdCI7CisgCisrCXB1YmxpYyBMaXN0PHN0cmluZz4gcHJvZmls ZXMgPSBuZXcgTGlzdDxzdHJpbmc+IHsKKysJCSJuZXRfNF94IiwKKysJCSJtb25vZHJvaWQiLAor KwkJIm1vbm90b3VjaCIsCisrCQkibW9ub3RvdWNoX3R2IiwKKysJCSJtb25vdG91Y2hfd2F0Y2gi LAorKwkJIm9yYmlzIiwKKysJCSJ1bnJlYWwiLAorKwkJIndhc20iLAorKwkJIndpbmFvdCIsCisr CQkieGFtbWFjIiwKKysJfTsKKysKKysJY29uc3Qgc3RyaW5nIGpheV92Y3hwcm9qX2d1aWQgPSAi ezVENDg1RDMyLTNCOUYtNDI4Ny1BQjI0LUM4REE1Qjg5RjUzN30iOworKwljb25zdCBzdHJpbmcg amF5X3Nsbl9ndWlkID0gIns4QkM5Q0VCOC04QjRBLTExRDAtOEQxMS0wMEEwQzkxQkM5NDJ9IjsK KysKKyAJcHVibGljIExpc3Q8TXNidWlsZEdlbmVyYXRvci5Wc0NzcHJvaj4gbGlicmFyaWVzID0g bmV3IExpc3Q8TXNidWlsZEdlbmVyYXRvci5Wc0NzcHJvaj4gKCk7CisgCXN0cmluZyBoZWFkZXI7 CisgCistCXN0cmluZyBNYWtlSGVhZGVyIChzdHJpbmcgZm9ybWF0VmVyc2lvbiwgc3RyaW5nIHll YXJUYWcpCisrCXN0cmluZyBNYWtlSGVhZGVyIChzdHJpbmcgZm9ybWF0VmVyc2lvbiwgc3RyaW5n IHllYXJUYWcsIHN0cmluZyBtaW5pbXVtVmVyc2lvbikKKyAJeworLQkJcmV0dXJuIHN0cmluZy5G b3JtYXQgKCJNaWNyb3NvZnQgVmlzdWFsIFN0dWRpbyBTb2x1dGlvbiBGaWxlLCBGb3JtYXQgVmVy c2lvbiB7MH0iICsgTmV3TGluZSArICIjIFZpc3VhbCBTdHVkaW8gezF9IiwgZm9ybWF0VmVyc2lv biwgeWVhclRhZyk7CisrCQlyZXR1cm4gc3RyaW5nLkZvcm1hdCAoCisrCQkJIk1pY3Jvc29mdCBW aXN1YWwgU3R1ZGlvIFNvbHV0aW9uIEZpbGUsIEZvcm1hdCBWZXJzaW9uIHswfSIgKyBOZXdMaW5l ICsgCisrCQkJIiMgVmlzdWFsIFN0dWRpbyB7MX0iICsgTmV3TGluZSArIAorKwkJCSJNaW5pbXVt VmlzdWFsU3R1ZGlvVmVyc2lvbiA9IHsyfSIsIAorKwkJCWZvcm1hdFZlcnNpb24sIHllYXJUYWcs CisrCQkJbWluaW11bVZlcnNpb24KKysJCSk7CisgCX0KKyAKKyAJcHVibGljIHZvaWQgQWRkIChN c2J1aWxkR2VuZXJhdG9yLlZzQ3Nwcm9qIHZzcHJvaikKK0BAIC01OSw2ICs3NSw0MCBAQCBjbGFz cyBTbG5HZW5lcmF0b3IgeworIAkJfQorIAl9CisgCisrCXByaXZhdGUgdm9pZCBXcml0ZVByb2pl Y3RSZWZlcmVuY2UgKFN0cmVhbVdyaXRlciBzbG4sIHN0cmluZyBwcmVmaXhHdWlkLCBzdHJpbmcg bGlicmFyeSwgc3RyaW5nIHJlbGF0aXZlUGF0aCwgc3RyaW5nIHByb2plY3RHdWlkLCBwYXJhbXMg c3RyaW5nW10gZGVwZW5kZW5jeUd1aWRzKQorKwl7CisrCQlzbG4uV3JpdGVMaW5lIChwcm9qZWN0 X3N0YXJ0LCBwcmVmaXhHdWlkLCBsaWJyYXJ5LCByZWxhdGl2ZVBhdGgsIHByb2plY3RHdWlkKTsK KysKKysJCWZvcmVhY2ggKHZhciBndWlkIGluIGRlcGVuZGVuY3lHdWlkcykgeworKyAgICAJCXNs bi5Xcml0ZUxpbmUgKCIgICAgUHJvamVjdFNlY3Rpb24oUHJvamVjdERlcGVuZGVuY2llcykgPSBw b3N0UHJvamVjdCIpOworKyAgICAJCXNsbi5Xcml0ZUxpbmUgKCIgICAgICAgIHswfSA9IHswfSIs IGd1aWQpOworKyAgICAJCXNsbi5Xcml0ZUxpbmUgKCIgICAgRW5kUHJvamVjdFNlY3Rpb24iKTsK KysJCX0KKysKKysJCXNsbi5Xcml0ZUxpbmUgKHByb2plY3RfZW5kKTsKKysJfQorKworKwlwcml2 YXRlIHZvaWQgV3JpdGVQcm9qZWN0UmVmZXJlbmNlIChTdHJlYW1Xcml0ZXIgc2xuLCBzdHJpbmcg c2xuRnVsbFBhdGgsIE1zYnVpbGRHZW5lcmF0b3IuVnNDc3Byb2ogcHJvaikKKysJeworKwkJdmFy IHVuaXhQcm9qRmlsZSA9IHByb2ouY3NQcm9qRmlsZW5hbWUuUmVwbGFjZSAoIlxcIiwgIi8iKTsK KysJCXZhciBmdWxsUHJvalBhdGggPSBQYXRoLkdldEZ1bGxQYXRoICh1bml4UHJvakZpbGUpOwor KwkJdmFyIHJlbGF0aXZlUGF0aCA9IE1zYnVpbGRHZW5lcmF0b3IuR2V0UmVsYXRpdmVQYXRoIChz bG5GdWxsUGF0aCwgZnVsbFByb2pQYXRoKTsKKysJCXZhciBkZXBlbmRlbmN5R3VpZHMgPSBuZXcg c3RyaW5nWzBdOworKwkJaWYgKHByb2oucHJlQnVpbGRFdmVudC5Db250YWlucyAoImpheSIpKQor KwkJCWRlcGVuZGVuY3lHdWlkcyA9IG5ldyBbXSB7IGpheV92Y3hwcm9qX2d1aWQgfTsKKysJCVdy aXRlUHJvamVjdFJlZmVyZW5jZShzbG4sICJ7RkFFMDRFQzAtMzAxRi0xMUQzLUJGNEItMDBDMDRG NzlFRkJDfSIsIHByb2oubGlicmFyeSwgcmVsYXRpdmVQYXRoLCBwcm9qLnByb2plY3RHdWlkLCBk ZXBlbmRlbmN5R3VpZHMpOworKwl9CisrCisrCXByaXZhdGUgdm9pZCBXcml0ZVByb2plY3RDb25m aWd1cmF0aW9uUGxhdGZvcm1zIChTdHJlYW1Xcml0ZXIgc2xuLCBzdHJpbmcgZ3VpZCwgc3RyaW5n IHBsYXRmb3JtVG9CdWlsZCkKKysJeworKwkJZm9yZWFjaCAodmFyIHByb2ZpbGUgaW4gcHJvZmls ZXMpIHsKKysJCQlzbG4uV3JpdGVMaW5lICgiXHRcdHswfS5EZWJ1Z3x7MX0uQWN0aXZlQ2ZnID0g RGVidWd8ezJ9IiwgZ3VpZCwgcHJvZmlsZSwgcGxhdGZvcm1Ub0J1aWxkKTsKKysJCQlzbG4uV3Jp dGVMaW5lICgiXHRcdHswfS5EZWJ1Z3x7MX0uQnVpbGQuMCA9IERlYnVnfHsyfSIsIGd1aWQsIHBy b2ZpbGUsIHBsYXRmb3JtVG9CdWlsZCk7CisrCQkJc2xuLldyaXRlTGluZSAoIlx0XHR7MH0uUmVs ZWFzZXx7MX0uQWN0aXZlQ2ZnID0gUmVsZWFzZXx7Mn0iLCBndWlkLCBwcm9maWxlLCBwbGF0Zm9y bVRvQnVpbGQpOworKwkJCXNsbi5Xcml0ZUxpbmUgKCJcdFx0ezB9LlJlbGVhc2V8ezF9LkJ1aWxk LjAgPSBSZWxlYXNlfHsyfSIsIGd1aWQsIHByb2ZpbGUsIHBsYXRmb3JtVG9CdWlsZCk7CisrCQl9 CisrCX0KKysKKyAJcHVibGljIHZvaWQgV3JpdGUgKHN0cmluZyBmaWxlbmFtZSkKKyAJeworIAkJ dmFyIGZ1bGxQYXRoID0gUGF0aC5HZXREaXJlY3RvcnlOYW1lIChmaWxlbmFtZSkgKyAiLyI7CitA QCAtNjYsMjcgKzExNiwzMiBAQCBjbGFzcyBTbG5HZW5lcmF0b3IgeworIAkJdXNpbmcgKHZhciBz bG4gPSBuZXcgU3RyZWFtV3JpdGVyIChmaWxlbmFtZSkpIHsKKyAJCQlzbG4uV3JpdGVMaW5lICgp OworIAkJCXNsbi5Xcml0ZUxpbmUgKGhlYWRlcik7CisrCisrCQkJLy8gTWFudWFsbHkgaW5zZXJ0 IGpheSdzIHZjeHByb2ouIFdlIGRlcGVuZCBvbiBqYXkuZXhlIHRvIHBlcmZvcm0gYnVpbGQgc3Rl cHMgbGF0ZXIuCisrCQkJV3JpdGVQcm9qZWN0UmVmZXJlbmNlIChzbG4sIGpheV9zbG5fZ3VpZCwg ImpheSIsICJtY3NcXGpheVxcamF5LnZjeHByb2oiLCBqYXlfdmN4cHJval9ndWlkKTsKKysKKyAJ CQlmb3JlYWNoICh2YXIgcHJvaiBpbiBsaWJyYXJpZXMpIHsKKy0JCQkJdmFyIHVuaXhQcm9qRmls ZSA9IHByb2ouY3NQcm9qRmlsZW5hbWUuUmVwbGFjZSAoIlxcIiwgIi8iKTsKKy0JCQkJdmFyIGZ1 bGxQcm9qUGF0aCA9IFBhdGguR2V0RnVsbFBhdGggKHVuaXhQcm9qRmlsZSk7CistCQkJCXNsbi5X cml0ZUxpbmUgKHByb2plY3Rfc3RhcnQsIHByb2oubGlicmFyeSwgTXNidWlsZEdlbmVyYXRvci5H ZXRSZWxhdGl2ZVBhdGggKGZ1bGxQYXRoLCBmdWxsUHJvalBhdGgpLCBwcm9qLnByb2plY3RHdWlk KTsKKy0JCQkJc2xuLldyaXRlTGluZSAocHJvamVjdF9lbmQpOworKwkJCQlXcml0ZVByb2plY3RS ZWZlcmVuY2UgKHNsbiwgZnVsbFBhdGgsIHByb2opOworIAkJCX0KKysKKyAJCQlzbG4uV3JpdGVM aW5lICgiR2xvYmFsIik7CisgCisgCQkJc2xuLldyaXRlTGluZSAoIlx0R2xvYmFsU2VjdGlvbihT b2x1dGlvbkNvbmZpZ3VyYXRpb25QbGF0Zm9ybXMpID0gcHJlU29sdXRpb24iKTsKKy0JCQlzbG4u V3JpdGVMaW5lICgiXHRcdERlYnVnfEFueSBDUFUgPSBEZWJ1Z3xBbnkgQ1BVIik7CistCQkJc2xu LldyaXRlTGluZSAoIlx0XHRSZWxlYXNlfEFueSBDUFUgPSBSZWxlYXNlfEFueSBDUFUiKTsKKysJ CQlmb3JlYWNoICh2YXIgcHJvZmlsZSBpbiBwcm9maWxlcykgeworKwkJCQlzbG4uV3JpdGVMaW5l ICgiXHRcdERlYnVnfHswfSA9IERlYnVnfHswfSIsIHByb2ZpbGUpOworKwkJCQlzbG4uV3JpdGVM aW5lICgiXHRcdFJlbGVhc2V8ezB9ID0gUmVsZWFzZXx7MH0iLCBwcm9maWxlKTsKKysJCQl9Cisg CQkJc2xuLldyaXRlTGluZSAoIlx0RW5kR2xvYmFsU2VjdGlvbiIpOworIAorIAkJCXNsbi5Xcml0 ZUxpbmUgKCJcdEdsb2JhbFNlY3Rpb24oUHJvamVjdENvbmZpZ3VyYXRpb25QbGF0Zm9ybXMpID0g cG9zdFNvbHV0aW9uIik7CisrCisrCQkJLy8gTWFudWFsbHkgaW5zZXJ0IGpheSdzIGNvbmZpZ3Vy YXRpb25zIGJlY2F1c2UgdGhleSBhcmUgZGlmZmVyZW50CisrCQkJV3JpdGVQcm9qZWN0Q29uZmln dXJhdGlvblBsYXRmb3JtcyAoc2xuLCBqYXlfdmN4cHJval9ndWlkLCAiV2luMzIiKTsKKysKKyAJ CQlmb3JlYWNoICh2YXIgcHJvaiBpbiBsaWJyYXJpZXMpIHsKKy0JCQkJdmFyIGd1aWQgPSBwcm9q LnByb2plY3RHdWlkOworLQkJCQlzbG4uV3JpdGVMaW5lICgiXHRcdHswfS5EZWJ1Z3xBbnkgQ1BV LkFjdGl2ZUNmZyA9IERlYnVnfEFueSBDUFUiLCBndWlkKTsKKy0JCQkJc2xuLldyaXRlTGluZSAo Ilx0XHR7MH0uRGVidWd8QW55IENQVS5CdWlsZC4wID0gRGVidWd8QW55IENQVSIsIGd1aWQpOwor LQkJCQlzbG4uV3JpdGVMaW5lICgiXHRcdHswfS5SZWxlYXNlfEFueSBDUFUuQWN0aXZlQ2ZnID0g UmVsZWFzZXxBbnkgQ1BVIiwgZ3VpZCk7CistCQkJCXNsbi5Xcml0ZUxpbmUgKCJcdFx0ezB9LlJl bGVhc2V8QW55IENQVS5CdWlsZC4wID0gUmVsZWFzZXxBbnkgQ1BVIiwgZ3VpZCk7CisrCQkJCVdy aXRlUHJvamVjdENvbmZpZ3VyYXRpb25QbGF0Zm9ybXMgKHNsbiwgcHJvai5wcm9qZWN0R3VpZCwg IkFueSBDUFUiKTsKKyAJCQl9CisrCisgCQkJc2xuLldyaXRlTGluZSAoIlx0RW5kR2xvYmFsU2Vj dGlvbiIpOworIAorIAkJCXNsbi5Xcml0ZUxpbmUgKCJcdEdsb2JhbFNlY3Rpb24oU29sdXRpb25Q cm9wZXJ0aWVzKSA9IHByZVNvbHV0aW9uIik7CitAQCAtNjM0LDYgKzY4OSw3IEBAIGNsYXNzIE1z YnVpbGRHZW5lcmF0b3IgeworIAkJcHVibGljIExpc3Q8VnNDc3Byb2o+IHByb2pSZWZlcmVuY2Vz ID0gbmV3IExpc3Q8VnNDc3Byb2o+ICgpOworIAkJcHVibGljIHN0cmluZyBsaWJyYXJ5OworIAkJ cHVibGljIE1zYnVpbGRHZW5lcmF0b3IgTXNidWlsZEdlbmVyYXRvcjsKKysJCXB1YmxpYyBzdHJp bmcgcHJlQnVpbGRFdmVudCwgcG9zdEJ1aWxkRXZlbnQ7CisgCX0KKyAKKyAJcHVibGljIFZzQ3Nw cm9qIENzcHJvajsKK0BAIC02ODIsNyArNzM4LDcgQEAgY2xhc3MgTXNidWlsZEdlbmVyYXRvciB7 CisgCQkJCWZ4X3ZlcnNpb24gPSAiNC4wIjsKKyAJCQkJcHJvZmlsZSA9ICJuZXRfNF8wIjsKKyAJ CQl9IGVsc2UgaWYgKHJlc3BvbnNlLkNvbnRhaW5zIChwcm9maWxlXzRfeCkpIHsKKy0JCQkJZnhf dmVyc2lvbiA9ICI0LjUiOworKwkJCQlmeF92ZXJzaW9uID0gIjQuNi4yIjsKKyAJCQkJcHJvZmls ZSA9ICJuZXRfNF94IjsKKyAJCQl9CisgCQl9CitAQCAtODgyLDYgKzkzOCwyNiBAQCBjbGFzcyBN c2J1aWxkR2VuZXJhdG9yIHsKKyAKKyAJCWJvb2wgYmFzaWNfb3JfYnVpbGQgPSAobGlicmFyeS5D b250YWlucyAoIi1iYXNpYyIpIHx8IGxpYnJhcnkuQ29udGFpbnMgKCItYnVpbGQiKSk7CisgCisr CQkvLyBJZiBhbiBFWEUgaXMgYnVpbHQgd2l0aCBub3N0ZGxpYiwgaXQgd29uJ3Qgd29yayB1bmxl c3MgcnVuIHdpdGggbW9uby5leGUuIFRoaXMgc3RvcHMgb3VyIGJ1aWxkIHN0ZXBzCisrCQkvLyAg ZnJvbSB3b3JraW5nIGluIHZpc3VhbCBzdHVkaW8gKGJlY2F1c2Ugd2UgYWxyZWFkeSByZXBsYWNl IEBNT05PQCB3aXRoICcnIG9uIFdpbmRvd3MuKQorKworKwkJaWYgKFRhcmdldCAhPSBUYXJnZXQu TGlicmFyeSkKKysJCQlTdGRMaWIgPSB0cnVlOworKworKwkJLy8gV2UgaGF2ZSBvdXIgdGFyZ2V0 IGZyYW1ld29yayBzZXQgdG8gNC41IGluIG1hbnkgcGxhY2VzIGJlY2F1c2UgYnJva2VuIHNjcmlw dHMgY2hlY2sgZm9yIGZpbGVzIHdpdGggNC41CisrCQkvLyAgaW4gdGhlIHBhdGgsIGV2ZW4gdGhv dWdoIHdlIGNvbXBpbGUgY29kZSB0aGF0IHVzZXMgNC42IGZlYXR1cmVzLiBTbyB3ZSBuZWVkIHRv IG1hbnVhbGx5IGZpeCB0aGF0IGhlcmUuCisrCisrCQlpZiAoZnhfdmVyc2lvbiA9PSAiNC41IikK KysJCQlmeF92ZXJzaW9uID0gIjQuNi4yIjsKKysKKysJCS8vIFRoZSBWUzIwMTcgc2lnbmluZyBz eXN0ZW0gZmFpbHMgdG8gc2lnbiB1c2luZyB0aGlzIGtleSBmb3Igc29tZSByZWFzb24sIHNvIGZv ciBub3csCisrCQkvLyAganVzdCBkaXNhYmxlIGNvZGUgc2lnbmluZyBmb3IgdGhlIG51bml0IGFz c2VtYmxpZXMuIEl0J3Mgbm90IGltcG9ydGFudC4KKysJCS8vIEknZCByYXRoZXIgZml4IHRoaXMg YnkgdXBkYXRpbmcgdGhlIG1ha2VmaWxlcyBidXQgaXQgc2VlbXMgdG8gYmUgaW1wb3NzaWJsZSB0 byBkaXNhYmxlCisrCQkvLyAgY29kZSBzaWduaW5nIGluIG91ciBtYWtlIHN5c3RlbS4uLgorKwor KwkJaWYgKFN0cm9uZ05hbWVLZXlGaWxlPy5Db250YWlucygibnVuaXQuc25rIikgPz8gZmFsc2Up CisrCQkJU3Ryb25nTmFtZUtleUZpbGUgPSBudWxsOworKworIAkJLy8KKyAJCS8vIFJlcGxhY2Ug dGhlIHRlbXBsYXRlIHZhbHVlcworIAkJLy8KK0BAIC04OTQsNiArOTcwLDkgQEAgY2xhc3MgTXNi dWlsZEdlbmVyYXRvciB7CisgCQkJCSIgICAgPEFzc2VtYmx5T3JpZ2luYXRvcktleUZpbGU+ezB9 PC9Bc3NlbWJseU9yaWdpbmF0b3JLZXlGaWxlPiIsCisgCQkJCVN0cm9uZ05hbWVLZXlGaWxlLCBT dHJvbmdOYW1lRGVsYXlTaWduID8gIiAgICA8RGVsYXlTaWduPnRydWU8L0RlbGF5U2lnbj4iICsg TmV3TGluZSA6ICIiKTsKKyAJCX0KKysKKysJCXN0cmluZyBhc3NlbWJseU5hbWUgPSBQYXRoLkdl dEZpbGVOYW1lV2l0aG91dEV4dGVuc2lvbiAob3V0cHV0X25hbWUpOworKworIAkJQ3Nwcm9qLm91 dHB1dCA9IHRlbXBsYXRlLgorIAkJCVJlcGxhY2UgKCJAT1VUUFVUVFlQRUAiLCBUYXJnZXQgPT0g VGFyZ2V0LkxpYnJhcnkgPyAiTGlicmFyeSIgOiAiRXhlIikuCisgCQkJUmVwbGFjZSAoIkBTSUdO QVRVUkVAIiwgc3Ryb25nTmFtZVNlY3Rpb24pLgorQEAgLTkwNiw3ICs5ODUsNyBAQCBjbGFzcyBN c2J1aWxkR2VuZXJhdG9yIHsKKyAJCQlSZXBsYWNlICgiQE5PQ09ORklHQCIsICI8Tm9Db25maWc+ IiArICghbG9hZF9kZWZhdWx0X2NvbmZpZykuVG9TdHJpbmcgKCkgKyAiPC9Ob0NvbmZpZz4iKS4K KyAJCQlSZXBsYWNlICgiQEFMTE9XVU5TQUZFQCIsIFVuc2FmZSA/ICI8QWxsb3dVbnNhZmVCbG9j a3M+dHJ1ZTwvQWxsb3dVbnNhZmVCbG9ja3M+IiA6ICIiKS4KKyAJCQlSZXBsYWNlICgiQEZYX1ZF UlNJT04iLCBmeF92ZXJzaW9uKS4KKy0JCQlSZXBsYWNlICgiQEFTU0VNQkxZTkFNRUAiLCBQYXRo LkdldEZpbGVOYW1lV2l0aG91dEV4dGVuc2lvbiAob3V0cHV0X25hbWUpKS4KKysJCQlSZXBsYWNl ICgiQEFTU0VNQkxZTkFNRUAiLCBhc3NlbWJseU5hbWUpLgorIAkJCVJlcGxhY2UgKCJAT1VUUFVU RElSQCIsIGJ1aWxkX291dHB1dF9kaXIpLgorIAkJCVJlcGxhY2UgKCJAT1VUUFVUU1VGRklYQCIs IFBhdGguR2V0RmlsZU5hbWUgKGJ1aWxkX291dHB1dF9kaXIpKS4KKyAJCQlSZXBsYWNlICgiQERF RklORUNPTlNUQU5UU0AiLCBkZWZpbmVzLlRvU3RyaW5nICgpKS4KK0BAIC05MjAsNyArOTk5LDEx IEBAIGNsYXNzIE1zYnVpbGRHZW5lcmF0b3IgeworIAkJCVJlcGxhY2UgKCJAQURESVRJT05BTExJ QlBBVEhTQCIsIFN0cmluZy5FbXB0eSkuCisgCQkJUmVwbGFjZSAoIkBSRVNPVVJDRVNAIiwgcmVz b3VyY2VzLlRvU3RyaW5nICgpKS4KKyAJCQlSZXBsYWNlICgiQE9QVElNSVpFQCIsIE9wdGltaXpl ID8gInRydWUiIDogImZhbHNlIikuCistCQkJUmVwbGFjZSAoIkBTT1VSQ0VTQCIsIHNvdXJjZXMu VG9TdHJpbmcgKCkpOworKwkJCVJlcGxhY2UgKCJAU09VUkNFU0AiLCBzb3VyY2VzLlRvU3RyaW5n ICgpKS4KKysJCQlSZXBsYWNlICgiQE1FVEFEQVRBVkVSU0lPTkAiLCBhc3NlbWJseU5hbWUgPT0g Im1zY29ybGliIiA/ICI8UnVudGltZU1ldGFkYXRhVmVyc2lvbj5Nb25vPC9SdW50aW1lTWV0YWRh dGFWZXJzaW9uPiIgOiAiIik7CisrCisrCQlDc3Byb2oucHJlQnVpbGRFdmVudCA9IHByZWJ1aWxk OworKwkJQ3Nwcm9qLnBvc3RCdWlsZEV2ZW50ID0gcG9zdGJ1aWxkOworIAorIAkJLy9Db25zb2xl LldyaXRlTGluZSAoIkdlbmVyYXRlZCB7MH0iLCBvZmlsZS5SZXBsYWNlICgiXFwiLCAiLyIpKTsK KyAJCXVzaW5nICh2YXIgbyA9IG5ldyBTdHJlYW1Xcml0ZXIgKGdlbmVyYXRlZFByb2pGaWxlKSkg eworQEAgLTkzOSwxNSArMTAyMiwxMyBAQCBjbGFzcyBNc2J1aWxkR2VuZXJhdG9yIHsKKyAJCWlm IChxICE9IC0xKQorIAkJCXRhcmdldCA9IHRhcmdldCArIExvYWQgKGxpYnJhcnkuU3Vic3RyaW5n ICgwLCBxKSArIHN1ZmZpeCk7CisgCistCQlpZiAodGFyZ2V0LkluZGV4T2YgKCJATU9OT0AiKSAh PSAtMSl7CistCQkJdGFyZ2V0X3VuaXggPSB0YXJnZXQuUmVwbGFjZSAoIkBNT05PQCIsICJtb25v IikuUmVwbGFjZSAoIkBDQVRAIiwgImNhdCIpOworLQkJCXRhcmdldF93aW5kb3dzID0gdGFyZ2V0 LlJlcGxhY2UgKCJATU9OT0AiLCAiIikuUmVwbGFjZSAoIkBDQVRAIiwgInR5cGUiKTsKKy0JCX0g ZWxzZSB7CistCQkJdGFyZ2V0X3VuaXggPSB0YXJnZXQuUmVwbGFjZSAoImpheS5leGUiLCAiamF5 Iik7CistCQkJdGFyZ2V0X3dpbmRvd3MgPSB0YXJnZXQ7CistCQl9CisrCQl0YXJnZXRfdW5peCA9 IHRhcmdldC5SZXBsYWNlICgiQE1PTk9AIiwgIm1vbm8iKS5SZXBsYWNlICgiQENBVEAiLCAiY2F0 Iik7CisrCQl0YXJnZXRfd2luZG93cyA9IHRhcmdldC5SZXBsYWNlICgiQE1PTk9AIiwgIiIpLlJl cGxhY2UgKCJAQ0FUQCIsICJ0eXBlIik7CisrCisrCQl0YXJnZXRfdW5peCA9IHRhcmdldF91bml4 LlJlcGxhY2UgKCJcXGpheVxcamF5LmV4ZSIsICJcXGpheVxcamF5XFxqYXkiKTsKKysKKyAJCXRh cmdldF91bml4ID0gdGFyZ2V0X3VuaXguUmVwbGFjZSAoIkBDT1BZQCIsICJjcCIpOworLQkJdGFy Z2V0X3dpbmRvd3MgPSB0YXJnZXRfdW5peC5SZXBsYWNlICgiQENPUFlAIiwgImNvcHkiKTsKKysJ CXRhcmdldF93aW5kb3dzID0gdGFyZ2V0X3dpbmRvd3MuUmVwbGFjZSAoIkBDT1BZQCIsICJjb3B5 Iik7CisgCisgCQl0YXJnZXRfdW5peCA9IHRhcmdldF91bml4LlJlcGxhY2UgKCJcciIsICIiKTsK KyAJCWNvbnN0IHN0cmluZyBjb25kaXRpb25fdW5peCAgICA9ICJDb25kaXRpb249XCIgJyQoT1Mp JyAhPSAnV2luZG93c19OVCcgXCIiOwotLSAKMi40NS4yCgo= --b1=_an9yUQc81YewVJ071Mjh6ZcI5zllr0hgLHfHss8ka8A-- From debbugs-submit-bounces@debbugs.gnu.org Thu Dec 05 01:23:06 2024 Received: (at 74609) by debbugs.gnu.org; 5 Dec 2024 06:23:06 +0000 Received: from localhost ([127.0.0.1]:37837 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1tJ5GT-0001Xl-Tn for submit@debbugs.gnu.org; Thu, 05 Dec 2024 01:23:06 -0500 Received: from mail-ed1-f42.google.com ([209.85.208.42]:46561) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1tJ5GS-0001Wo-9M for 74609@debbugs.gnu.org; Thu, 05 Dec 2024 01:23:05 -0500 Received: by mail-ed1-f42.google.com with SMTP id 4fb4d7f45d1cf-5d0ac27b412so597114a12.1 for <74609@debbugs.gnu.org>; Wed, 04 Dec 2024 22:23:04 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ieee.org; s=google; t=1733379718; x=1733984518; darn=debbugs.gnu.org; h=to:subject:message-id:date:from:mime-version:from:to:cc:subject :date:message-id:reply-to; bh=vHliNAn5s0Ln/4qyl88/+NKzi/PaQmN0pQAYgXLWq5w=; b=bBqBezeolx/+5VDyDj9a05crTFL4JpfiElDpcCa8cuLgNUVMBnv5HTmdXOUC+qFV/w XRe56e1rt8aASurZaM9+NQPeUmDJ7oZPpB9l96D2JP3iFssIxujMVQSmDUkJeHMwSAim /8wZdLysM8AxK53eryj0a69DY6JxhC/w4Psz0= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1733379718; x=1733984518; h=to:subject:message-id:date:from:mime-version:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=vHliNAn5s0Ln/4qyl88/+NKzi/PaQmN0pQAYgXLWq5w=; b=DiOnDarPn5NDPRbKLwynZXfClsEh+NnuvFAV5FSVNhnjZ/VW0mH5XP6UdbhJIqocB5 PUWzjp06gh/a6jsOXDYbt9CDgUcs0J4RiHF1Dkp1F28mhhslzP1JpInBpHmjt4Ety5uo UYgZsER7bdV9ai7dBi1eVeqIOobUnoGYWNUcjno0ig7mSjSjWyMzpYqjKp30d3zuBlQs 735HlEisdVWxMbY9ci8wkmncodEBYtq/K3MFkl0rwF/BnVUGm3Ml8LPeqCIPnpVRjMi1 bgUG70+njkapvRGRSolvzargFqMIG4XxZNtj7P+DR79R+8DVVx6VW+U/CQJVNGqlIx1Q IpaA== X-Gm-Message-State: AOJu0YxO5slXof9ZPO+Rxx8o6FVcAdFOtagMV6aWogmtRhzjiLf9ANJ2 cYGUbd504piRwE8zmJYGpYQbi3sbBOdEPGfS3kE8i4vdgeCGro7ZmAT4zcKaHyIF+Xy51Iwgm5p nXLEfcVrMblUgTTj+jAjhUyFT/Nqw3+virWrOMcRPB8qq6J4= X-Gm-Gg: ASbGnct53gqOy2q67OqOu/ZgSIlsR5syAmq0dthGazdXUmsqQVD+iqT5ZF0hncclnJq DTRG3hcI2xudKIT51nYgRTSdo5uLF2qdD X-Google-Smtp-Source: AGHT+IEXWg76Mmx9GcIfbtOHoBPluZXmIk5OS3YGCCDptxCUwTQCE7wkb4okzUnjdTofYl5utQlhuATEqIXCBjS3Esc= X-Received: by 2002:a05:6402:42c4:b0:5d0:bbfd:f3e4 with SMTP id 4fb4d7f45d1cf-5d10cb5bc76mr8448715a12.20.1733379718358; Wed, 04 Dec 2024 22:21:58 -0800 (PST) MIME-Version: 1.0 From: Aaron Covrig Date: Thu, 5 Dec 2024 01:21:48 -0500 Message-ID: Subject: [PATCH] Adding a fully-bootstrapped mono To: 74609@debbugs.gnu.org Content-Type: multipart/alternative; boundary="00000000000060229806287fead4" X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: 74609 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 (-) --00000000000060229806287fead4 Content-Type: text/plain; charset="UTF-8" Thank you for this unmush, that is quite the achievement. The whole C# and dotnet tooling flabbergasts me, but this definitely could help. I was a bit disappointed with the previous removal (but totally understand), hopefully this can be merged in as there are a few nice programs that are written in C# (but they also require dotnet...). v/r, Aaron --00000000000060229806287fead4 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
Thank you for this unmush, that is quite the achievement.= The whole C# and dotnet tooling flabbergasts me, but this definitely could= help. I was a bit disappointed with the previous removal (but totally unde= rstand), hopefully this can be merged in as there are a few nice programs t= hat are written in C# (but they also require dotnet...).
<= br>
v/r,

Aaron
--00000000000060229806287fead4-- From debbugs-submit-bounces@debbugs.gnu.org Thu Dec 05 17:07:36 2024 Received: (at 74609) by debbugs.gnu.org; 5 Dec 2024 22:07:36 +0000 Received: from localhost ([127.0.0.1]:41280 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1tJK0W-0006Hl-Hd for submit@debbugs.gnu.org; Thu, 05 Dec 2024 17:07:36 -0500 Received: from mail-108-mta11.mxroute.com ([136.175.108.11]:36443) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1tJK0T-0006Hc-KQ for 74609@debbugs.gnu.org; Thu, 05 Dec 2024 17:07:35 -0500 Received: from filter006.mxroute.com ([136.175.111.3] filter006.mxroute.com) (Authenticated sender: mN4UYu2MZsgR) by mail-108-mta11.mxroute.com (ZoneMTA) with ESMTPSA id 19398dd26210003e01.001 for <74609@debbugs.gnu.org> (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384); Thu, 05 Dec 2024 22:07:30 +0000 X-Zone-Loop: e920fb62934c06f6d6fb5d88e65ff1e7508c0e2d81e0 X-Originating-IP: [136.175.111.3] DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=freakingpenguin.com; s=x; h=Content-Type:MIME-Version:Message-ID:Date: References:In-Reply-To:Subject:Cc:To:From:Sender:Reply-To: Content-Transfer-Encoding:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Id: List-Help:List-Unsubscribe:List-Subscribe:List-Post:List-Owner:List-Archive; bh=Nr3LgdBgcRy1QONhztvdjoe9qHhhhr7Ho8Ul1v6j4xQ=; b=f4p5tc9OtuZfSAA1BOMnmsDqMF No/2fbbJqHzrtN2aj6I3qQPkT9HHEz2orW5B8hUi3TcL5O/iA+lpvX4LfLHV7lo2RodY9bMMsn1SL /2OaKJPTpI0bO4mdEsrCnCeN6eAoE4olzmJKwJFDgGKNWrhlqp2AVu/G6X6Wtsp13yKIQcoHuEHzo nSjFR3EijopnyH0ssG7L64VMFmpbOJqRGzySY//B1aek9I4QgrZPgAOtaM6lt5GWUwdt3VUZDHXKs RDs8XE7Exw7zKO0mHqyfKU29zlxafJ8X3g3hPuX0pjBwdMhRKlXffVGUDM7B3PcYaJieUFUA56xGl ZtePibuw==; From: Richard Sent To: unmush Subject: Re: [bug#74609] [PATCH] Adding a fully-bootstrapped mono In-Reply-To: (unmush@proton.me's message of "Fri, 29 Nov 2024 15:05:09 +0000") References: Date: Thu, 05 Dec 2024 17:07:18 -0500 Message-ID: <8734j1yeax.fsf@freakingpenguin.com> User-Agent: Gnus/5.13 (Gnus v5.13) MIME-Version: 1.0 Content-Type: text/plain X-Authenticated-Id: richard@freakingpenguin.com X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: 74609 Cc: 74609@debbugs.gnu.org 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 (-) Congratulations on the achievement! I want to thank you for your writeup. I found it very interesting! -- Take it easy, Richard Sent Making my computer weirder one commit at a time. From debbugs-submit-bounces@debbugs.gnu.org Fri Dec 13 02:47:28 2024 Received: (at 74609) by debbugs.gnu.org; 13 Dec 2024 07:47:28 +0000 Received: from localhost ([127.0.0.1]:41407 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1tM0OV-0006sH-Pc for submit@debbugs.gnu.org; Fri, 13 Dec 2024 02:47:28 -0500 Received: from eggs.gnu.org ([209.51.188.92]:41714) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1tM0OQ-0006rw-4o for 74609@debbugs.gnu.org; Fri, 13 Dec 2024 02:47:26 -0500 Received: from fencepost.gnu.org ([2001:470:142:3::e]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1tM0OA-0006Ea-IM; Fri, 13 Dec 2024 02:47:14 -0500 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org; s=fencepost-gnu-org; h=MIME-Version:Date:References:In-Reply-To:Subject:To: From; bh=mhlEZOsyj7q+4JCcMMf4dL+9mQqfhUJnbZxhXDxsrlA=; b=VpjdZmxWsUHjHPBPfxIw B+0iVGbGyBc68ByAX5D+BSV4y798Dde5dH9dCTvgFevbhnhI//PIvGIYZPCbq+Z9xnlmTvZu3huMg EMNgrbtFO3sbQsvPbab+P8xnD5WWaX+p5GJQqf1OsMKv9YPsKPTlYMRhR5Fbx4zYLLFSFk8wgQKcW WzSqICKhqYtSzw5DJg4vC09i/E4fsPjAas1SL2UmQ+eineO/c2xWUqlTR7FdexmSNXRaMZFqM427t WzehecLkcd4+d/oDrlLxIXDWgdl/AEb7rpe39RFUKaZxQD8maeWBnupI6rEIj2CHT0uLwqI5U9n6k gCWh5hrLBnm9pw==; From: =?utf-8?Q?Ludovic_Court=C3=A8s?= To: unmush Subject: Re: [bug#74609] [PATCH] Adding a fully-bootstrapped mono In-Reply-To: (unmush@proton.me's message of "Fri, 29 Nov 2024 15:05:09 +0000") References: Date: Fri, 13 Dec 2024 08:47:03 +0100 Message-ID: <87ttb83tzc.fsf@gnu.org> User-Agent: Gnus/5.13 (Gnus v5.13) MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable X-Spam-Score: -2.3 (--) X-Debbugs-Envelope-To: 74609 Cc: 74609@debbugs.gnu.org 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: -3.3 (---) Hi, unmush skribis: > We used to have a mono package, but it was removed due to includingbootst= rap binaries (among others). =C2=A0This patch series introduces a full, > 17-mono-package sequence that takes us from a mono-1.2.6 built fully > from source to mono-6.12.0 built fully from source, using only packages > that already have full bootstrap paths. =C2=A0I make no promise that this= is > the shortest or most optimal path, but it exists and I have verified it > works. > > As I've spent what is probably an unreasonable amount of time working > toward this, I thought I'd share some of my thoughts, experiences, and > commentary. =C2=A0Sorry in advance if it gets a bit rambly or lecture-ish. I join others in congratulating you! This is very impressive, and a great step forward. I=E2=80=99ll make time to review and apply those patches if nobody beats me= at it. Thank you! Ludo=E2=80=99. From debbugs-submit-bounces@debbugs.gnu.org Fri Dec 13 07:13:29 2024 Received: (at 74609) by debbugs.gnu.org; 13 Dec 2024 12:13:29 +0000 Received: from localhost ([127.0.0.1]:41891 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1tM4Xs-0002p1-6P for submit@debbugs.gnu.org; Fri, 13 Dec 2024 07:13:28 -0500 Received: from eggs.gnu.org ([209.51.188.92]:60330) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1tM4Xn-0002oh-1I for 74609@debbugs.gnu.org; Fri, 13 Dec 2024 07:13:22 -0500 Received: from fencepost.gnu.org ([2001:470:142:3::e]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1tM4Xh-0002FZ-Eu; Fri, 13 Dec 2024 07:13:13 -0500 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org; s=fencepost-gnu-org; h=MIME-Version:Date:References:In-Reply-To:Subject:To: From; bh=2FFgEwNPm/e69f6/7838RLDjJdHzcn1gk4ADQYwAMRU=; b=h5fOQSrhqLtJzs+EYEO5 oS7WYRMU7aPxlwnPHvULfw2KV/37oavfkDc8L5lt1hv211jgskkv0lCCbjoqNbZErLigzW/cf0O8a 12NoE06qsCcBlRfl/Y34BqaxZpBG2JY1Uo06rjDn3trF1fXadWCJLukcXuZ9UJN0c2EEHikErJV+V 0CA4QKuebqb+RR95GNOsXNTAB9ETJi/mmyGmkjhneujHX4oiolC4tE+kRKEidt07DvjY9kGnKnAUL 1v2RDzq36nGcMW4QPo13VHgp9UB1gi7TXvoh1nVt+V4MKkwwWPJG/GWNk1nZBYH5slUqeXKcirwr8 Nc6U+gwB6xEthQ==; From: Janneke Nieuwenhuizen To: unmush Subject: Re: [bug#74609] [PATCH] Adding a fully-bootstrapped mono In-Reply-To: <87ttb83tzc.fsf@gnu.org> ("Ludovic =?utf-8?Q?Court=C3=A8s=22'?= =?utf-8?Q?s?= message of "Fri, 13 Dec 2024 08:47:03 +0100") Organization: AvatarAcademy.nl References: <87ttb83tzc.fsf@gnu.org> X-Url: http://AvatarAcademy.nl Date: Fri, 13 Dec 2024 13:13:09 +0100 Message-ID: <87cyhvixwq.fsf@gnu.org> User-Agent: Gnus/5.13 (Gnus v5.13) MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable X-Spam-Score: -2.3 (--) X-Debbugs-Envelope-To: 74609 Cc: 74609@debbugs.gnu.org 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: -3.3 (---) Ludovic Court=C3=A8s writes: > unmush skribis: > >> We used to have a mono package, but it was removed due to >> includingbootstrap binaries (among others). =C2=A0This patch series >> introduces a full, >> 17-mono-package sequence that takes us from a mono-1.2.6 built fully >> from source to mono-6.12.0 built fully from source, using only packages >> that already have full bootstrap paths. =C2=A0I make no promise that thi= s is >> the shortest or most optimal path, but it exists and I have verified it >> works. >> >> As I've spent what is probably an unreasonable amount of time working >> toward this, I thought I'd share some of my thoughts, experiences, and >> commentary. =C2=A0Sorry in advance if it gets a bit rambly or lecture-is= h. > > I join others in congratulating you! This is very impressive, and a > great step forward. +1 Impressive, thank you! Greetings, Janneke --=20 Janneke Nieuwenhuizen | GNU LilyPond https://LilyPond.org Freelance IT https://www.JoyOfSource.com | Avatar=C2=AE https://AvatarAcade= my.com From debbugs-submit-bounces@debbugs.gnu.org Fri Dec 13 16:23:03 2024 Received: (at 74609) by debbugs.gnu.org; 13 Dec 2024 21:23:03 +0000 Received: from localhost ([127.0.0.1]:44404 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1tMD7m-0004vE-Rc for submit@debbugs.gnu.org; Fri, 13 Dec 2024 16:23:03 -0500 Received: from eggs.gnu.org ([209.51.188.92]:37986) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1tMD7h-0004uT-0A for 74609@debbugs.gnu.org; Fri, 13 Dec 2024 16:23:01 -0500 Received: from fencepost.gnu.org ([2001:470:142:3::e]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1tMD7a-0008Fp-5U; Fri, 13 Dec 2024 16:22:51 -0500 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org; s=fencepost-gnu-org; h=MIME-Version:Date:References:In-Reply-To:Subject:To: From; bh=ujNe1VW8bOXi8mgVMdFIjdWagCqhpZMBdaiUphaBTv0=; b=a04B3wSZK50MuE7kj8cG DVm5YHrpxJ5ST+7+R2CCI4v2MD26jrw/cmEGk6bll8yAgNAz8SrXFAkFa5XboCfEHzICdlMEdxbys mPkNensJorq6Fw/VKvBia2Wi795GtlBH09QygP+jZFPgn2Xp3HgVJMyJ4sHp+ONwMoA4tn5+492fh qg8kA0bQBehLVzMlNqfvoY5f0O3B1M5GL/wUfRVLfXZ0yU4w207WF4ps7e06IYjUx5kIRHp6s0NC8 LWTJC902yBRk3M+67oFrIxWHeS00qSdcSP+sfQ7vb3Q2/NwqKewLQkVuwBtDkUW3VZ9AfB6TfG4eX D2xRaCcJRjVR2Q==; From: =?utf-8?Q?Ludovic_Court=C3=A8s?= To: unmush Subject: Re: [bug#74609] [PATCH] Adding a fully-bootstrapped mono In-Reply-To: (unmush@proton.me's message of "Fri, 29 Nov 2024 15:05:09 +0000") References: Date: Fri, 13 Dec 2024 22:22:46 +0100 Message-ID: <87wmg3z3a1.fsf@gnu.org> User-Agent: Gnus/5.13 (Gnus v5.13) MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable X-Spam-Score: -2.3 (--) X-Debbugs-Envelope-To: 74609 Cc: 74609@debbugs.gnu.org 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: -3.3 (---) unmush skribis: > First, github dropped support for the git:// protocol in 2021, so > recursive clones won't work now. =C2=A0This means I have to explicitly li= st > out every submodule, its commit, and its sha256 hash, for every mono > version until they switched to using http or https. =C2=A0mono-2.11.4 has > only 4 submodules, but that doesn't last for long: by mono-4.9.0 it has > 14 submodules. =C2=A0A significant portion of these patches is just listi= ng > these submodules and their hashes. =C2=A0It's a bit annoying. As I read this, I realize that =E2=80=98git-fetch-with-fallback=E2=80=99 (u= sed by =E2=80=98git-fetch=E2=80=99 for origins) won=E2=80=99t actually fall back t= o Software Heritage for just submodules. It=E2=80=99s all or nothing. So the SWH fallback didn=E2=80=99t help you at all, right? In an ideal world, it would have kicked in automatically. Ludo=E2=80=99. From debbugs-submit-bounces@debbugs.gnu.org Mon Dec 16 12:28:15 2024 Received: (at 74609) by debbugs.gnu.org; 16 Dec 2024 17:28:15 +0000 Received: from localhost ([127.0.0.1]:55827 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1tNEtC-0006EH-Q9 for submit@debbugs.gnu.org; Mon, 16 Dec 2024 12:28:15 -0500 Received: from mail-wr1-f48.google.com ([209.85.221.48]:46339) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1tNEt9-0006Dz-3t for 74609@debbugs.gnu.org; Mon, 16 Dec 2024 12:28:13 -0500 Received: by mail-wr1-f48.google.com with SMTP id ffacd0b85a97d-3863c36a731so3156419f8f.1 for <74609@debbugs.gnu.org>; Mon, 16 Dec 2024 09:28:11 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1734370030; x=1734974830; darn=debbugs.gnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:sender:from:to:cc:subject:date :message-id:reply-to; bh=Eq6DlNTBkBeGzqhR2KEm6ybEYexjeyi/ehuvw6vVLWA=; b=DmYr8yaxp3Oii8oFjc6EQkegIedwjM+QEieC1gstsL6xXHp4s01v9KGKOUUihJI/6V Mba+8w3eVMa/AUWoef75VRL/17dFPL++5IsRdQ3AVwGKigFqEJ9hbd7jfUzk13qjmXaN 3OD6nWodZy3OAu487sVO4fLs34vqBl/ZZbNox0LzoizzT/MerPP+k9blKNUpceVpDrv6 rveUz5yOk2QarugYRFzK1O49/OBJV2EBz6w4F5W/DA7AYqNGUSxRikQAye835ypstBZ+ a3k8DDhPVCV6G2rKQr4ObH1WhlwNFXyFtk4C5BkYyEOVyrSsfziT5z2pG/e7WYnKrm8d AG5Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1734370030; x=1734974830; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:sender:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=Eq6DlNTBkBeGzqhR2KEm6ybEYexjeyi/ehuvw6vVLWA=; b=iIlXZSjVpUXq08EZNb4L8YGDuolFwItp7A7KiSFP3QWLYHDC/BqkXulbYRPtU5Uwg6 Vl+bgoLOm5x16eSYmLiWss9RJ2jKYS9v8FCQuI3qG8JjRWU9Vdr7KoMxXAWbTXr5HFu9 RCEOQnzUtHjdO1wEDpUxRg3j9DfZMo/iAbktRGGqk2bTvQdHhIlwxUZUVtAVwWlgCr+A Lyc9tyAuFLDWnrWEtXNA33836PPtj4fB3aeyZh3o7w6pTbrIIiBah0ZRQElX6a/0iM/H vHr9TKCZOsCvjgVlRoWZ8K9+flwhax9gHXYf5kjxHUf8hemDBubNKxGhjIAOwAfgxuZO xdlA== X-Gm-Message-State: AOJu0YxSwTqvJ3UaSuZtdGl1/THYQeY7B7yijyjuvOmWnQz2R69kOunw Z5T1Bc/5J7Pz5cH83NYe2DgBVx/9s6jFwHJbvKtaER6NXP4wfolZSlgGjheA X-Gm-Gg: ASbGncsFmkgPbJ0t57oYm9FifI8xJ197FV9igrqYha98fln6EOFer/kcKoh3+qxjZCM 8xxM4QG0yH/AqRZa62SETrisJH1Do0B9clLx+sWbT461aofH8X3L/uwZhi6WOYoKky/r5MY9PWi mbMOa0VbgfYJWVUgc1Ad5CFXqBwBAh/IHw5PGNqXyuscQmhYzkL58N0AGkxo/tqqRvJ/OuLiBaM KkXg3suN0feTxqs/YyxnUAbxxBMnTi+tHR6ewugDZQ8lUDktjvnQDA98QqZEw== X-Google-Smtp-Source: AGHT+IFSTBNWffOrFwik/1ccYcZLU2/AM5sK5yHupcOR+lAq62+qGvyCi3prHkXCYnotiLGQh2E9bw== X-Received: by 2002:a05:6000:719:b0:386:8ff:d20b with SMTP id ffacd0b85a97d-38880ada989mr10497536f8f.27.1734370029997; Mon, 16 Dec 2024 09:27:09 -0800 (PST) Received: from localhost ([31.210.180.118]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-388c801a87esm8635573f8f.59.2024.12.16.09.27.09 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 16 Dec 2024 09:27:09 -0800 (PST) From: Efraim Flashner To: 74609@debbugs.gnu.org Subject: [PATCH 01/21] gnu: Add treecc. Date: Mon, 16 Dec 2024 19:26:24 +0200 Message-ID: <75f990af622e4b5452923c0fc0d6fabf918dbb72.1734369314.git.efraim@flashner.co.il> X-Mailer: git-send-email 2.46.0 In-Reply-To: References: MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Spam-Score: 0.3 (/) X-Debbugs-Envelope-To: 74609 Cc: aaron.covrig.us@ieee.org, ludo@gnu.org, unmush , richard@freakingpenguin.com, unmush@proton.me, janneke@gnu.org 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: -0.7 (/) From: unmush * gnu/packages/dotnet.scm: New module. (treecc): New variable. * gnu/local.mk (GNU_SYSTEM_MODULES): Add new module. Change-Id: If3f36615774c872f3015510eb08ec53657e4edfb --- gnu/local.mk | 1 + gnu/packages/dotnet.scm | 62 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 63 insertions(+) create mode 100644 gnu/packages/dotnet.scm diff --git a/gnu/local.mk b/gnu/local.mk index ffb8eb6d297..94331c6064b 100644 --- a/gnu/local.mk +++ b/gnu/local.mk @@ -257,6 +257,7 @@ GNU_SYSTEM_MODULES = \ %D%/packages/docbook.scm \ %D%/packages/docker.scm \ %D%/packages/documentation.scm \ + %D%/packages/dotnet.scm \ %D%/packages/dpdk.scm \ %D%/packages/dvtm.scm \ %D%/packages/easyrpg.scm \ diff --git a/gnu/packages/dotnet.scm b/gnu/packages/dotnet.scm new file mode 100644 index 00000000000..e085b364e29 --- /dev/null +++ b/gnu/packages/dotnet.scm @@ -0,0 +1,62 @@ +(define-module (gnu packages dotnet) + #:use-module ((guix licenses) #:prefix license:) + #:use-module (gnu packages assembly) + #:use-module (gnu packages bison) + #:use-module (gnu packages check) + #:use-module (gnu packages cmake) + #:use-module (gnu packages compression) + #:use-module (gnu packages curl) + #:use-module (gnu packages flex) + #:use-module (gnu packages gettext) + #:use-module (gnu packages pkg-config) + #:use-module (gnu packages base) + #:use-module (gnu packages autotools) + #:use-module (gnu packages bdw-gc) + #:use-module (gnu packages fontutils) + #:use-module (gnu packages glib) + #:use-module (gnu packages icu4c) + #:use-module (gnu packages instrumentation) + #:use-module (gnu packages kerberos) + #:use-module (gnu packages libffi) + #:use-module (gnu packages linux) + #:use-module (gnu packages llvm) + #:use-module (gnu packages perl) + #:use-module (gnu packages photo) + #:use-module (gnu packages texinfo) + #:use-module (gnu packages tls) + #:use-module (gnu packages image) + #:use-module (gnu packages gtk) + #:use-module (gnu packages python) + #:use-module (gnu packages xml) + #:use-module (gnu packages xorg) + #:use-module (gnu packages version-control) + #:use-module (gnu packages) + #:use-module (guix modules) + #:use-module (guix packages) + #:use-module (guix download) + #:use-module (guix git-download) + #:use-module (guix gexp) + #:use-module (guix utils) + #:use-module (guix build-system gnu) + #:use-module (guix build-system python) + #:use-module (ice-9 match)) + +(define-public treecc + (package + (name "treecc") + (version "0.3.10") + (source (origin + (method url-fetch) + (uri (string-append + "https://download.savannah.gnu.org/releases/dotgnu-pnet/treecc-" + version ".tar.gz")) + (sha256 + (base32 + "1rzgnspg2xccdq3qsx0vi3j28h4qkrzbrjnhzvnny34fjfk217ay")))) + (build-system gnu-build-system) + (home-page "https://www.gnu.org/software/dotgnu") + (synopsis "Tree Compiler-Compiler") + (description "The treecc program is designed to assist in the development +of compilers and other language-based tools. It manages the generation of +code to handle abstract syntax trees and operations upon the trees.") + (license license:gpl2+))) -- Efraim Flashner אפרים פלשנר GPG key = A28B F40C 3E55 1372 662D 14F7 41AA E7DC CA3D 8351 Confidentiality cannot be guaranteed on emails sent or received unencrypted From debbugs-submit-bounces@debbugs.gnu.org Mon Dec 16 12:28:17 2024 Received: (at 74609) by debbugs.gnu.org; 16 Dec 2024 17:28:18 +0000 Received: from localhost ([127.0.0.1]:55829 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1tNEtF-0006ET-AW for submit@debbugs.gnu.org; Mon, 16 Dec 2024 12:28:17 -0500 Received: from mail-wr1-f41.google.com ([209.85.221.41]:48569) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1tNEtB-0006Dw-W4 for 74609@debbugs.gnu.org; Mon, 16 Dec 2024 12:28:14 -0500 Received: by mail-wr1-f41.google.com with SMTP id ffacd0b85a97d-38789e5b6a7so2292447f8f.1 for <74609@debbugs.gnu.org>; Mon, 16 Dec 2024 09:28:13 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1734370028; x=1734974828; darn=debbugs.gnu.org; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:sender:from:to:cc:subject:date:message-id:reply-to; bh=oq7Fdm9kJ1TvwSs3rJEr67z8+gafqNl2H+nzuy7v8Dc=; b=f1MitLUiHKn9Qo3vQDJOxgZ7YrjMzcqLkTlXuAdV0B4dLuEbv4X5sD1l//QXxV1hiv 23YEjwEtr0H79fAac3Apx2e+rjnL7nNjzrNFvYJO3SMmbHg0wCriIHB4cEl67KmYTATe RHxUN9xkv/K77J5HaAiHccQC4/DmaKVNNWvxf7z+/RxnBXagFGY66txx+Xy+4IBAa6rZ qWI4zS/GIkBoJ5eZ83iO2m4ouraPUAWyRPVyXJawthATDgxktTZV8AE+Z5XOP07keAyu jX/FScDVFS32D2X66twmdLQHkleE1TSV/7ObMRsT6e41b5pAQZ5aNxsvO6sMFAvpG+Ml 28cg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1734370028; x=1734974828; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:sender:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=oq7Fdm9kJ1TvwSs3rJEr67z8+gafqNl2H+nzuy7v8Dc=; b=RQaE3to8lgi89l+JZ2frdRyxOi+EgWTrO6tvNvaLzSnSuIN+rgvmLlL2jEXMbHy99L 7ooRFXW5by5llzzQoZwoja+N1Qj0rLbppDsPmk5f+ql37a6DbG7YpSUhrnOdl4BQUPty k0Hi0LdOxTmQf8WTGcA2y6D8ftJXUy/mi/NxGt9/wHuvSu9qaSzmDsFHq9Ni3iIJ1MVd MO65DzTPjYbPI3ZpzTxjAK7/e7T08vq8tzYwGZUbZWMBhppq3bAbDFMhVwjViXpVnSXR bbyTs1jw5shpfIh4/Gx0784Id2dMo9TOmZKcdwHX1ANPTCiAhol86b/pbOsDm3HmIOXi sYig== X-Gm-Message-State: AOJu0YyQmrhAw8u4um1eljz4APYY1SMjOwKaotCCaP0EZQNrsnPlqXO8 zklE2hGU8Ts+n5esVzrd4SIzvbeatU8mE8MEg5IPwjUiXQLjWJPqkzeI9aml X-Gm-Gg: ASbGncvNdJ6lLtRMf/gdSKz50XbuRJxytDvIp3mZ5t+YVjp58CRKtQPbDdpMdw2ZTdx 55qjTfWf1/8UpsTRmiXPZ1057ostn92C5QmEyCmkk+r3U5Hn9pQzp7PEld3F6BtUpJiozsHtkmq JN0gq9e0MSMCmzmQwiTlmop2V4Klxqs0ZvB5MNtj8E4KRM+el/SdiaJBDkGbhv6B+lBbg74bCWd zPCYhlYlM5bvhIHFzG2OHqR2NEaPVyNln6gJLQ4H/4asxCeRnb+n0D9eJubBg== X-Google-Smtp-Source: AGHT+IExqYyxkRo1Qzj+9+DtwNtRpevbKCI8M9zNa/sYWhrQ9xxr4hDAfKaddBH5xw5yMwRAWUTx/w== X-Received: by 2002:a05:6000:68e:b0:385:ec6e:e899 with SMTP id ffacd0b85a97d-3889ad4eff1mr11284025f8f.59.1734370027928; Mon, 16 Dec 2024 09:27:07 -0800 (PST) Received: from localhost ([31.210.180.118]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-388c80122b6sm8925502f8f.7.2024.12.16.09.27.06 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 16 Dec 2024 09:27:07 -0800 (PST) From: Efraim Flashner To: 74609@debbugs.gnu.org Subject: [PATCH 00/21] mono bootstrap Date: Mon, 16 Dec 2024 19:26:23 +0200 Message-ID: X-Mailer: git-send-email 2.46.0 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Spam-Score: 0.3 (/) X-Debbugs-Envelope-To: 74609 Cc: aaron.covrig.us@ieee.org, ludo@gnu.org, Efraim Flashner , richard@freakingpenguin.com, unmush@proton.me, janneke@gnu.org 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: -0.7 (/) It turns out the first 2 patches didn't apply cleanly, so I fixed that up and I'm sending them back to the list. A couple of things that I noticed: * mono-5.something doesn't have its patches apply cleanly * I was only able to build to mono-3.12 before I got a build failure on x86_64 * mono-1.2.6 doesn't have support for aarch64 or riscv64, and will probably need some patches (later) to add support. * libjit FTBFS on powerpc64le. I tried working around it but wasn't successful in when it came to using libjit. * The assembly included in libjit targets a too-early version of arm, so it is just broken completely on armhf and would probably do best with it being ripped out. unmush (21): gnu: Add treecc. gnu: Add pnet-git. gnu: Add pnetlib-git. gnu: Add mono-1.2.6. gnu: Add mono-1.9.1. gnu: Add mono-2.4.2. gnu: Add mono-2.6.4. gnu: Add mono-2.11.4. gnu: Add mono-3.0. gnu: Add mono-3.12.1. gnu: Add mono-4.9.0. gnu: Add mono-5.0.1. gnu: Add mono-5.1.0. gnu: Add mono-5.2.0. gnu: Add mono-5.4.0. gnu: Add mono-pre-5.8.0. gnu: Add mono-5.8.0. gnu: Add mono-pre-5.10.0. gnu: Add mono-5.10.0. gnu: Add libgdiplus. gnu: Add mono-6.12.0. gnu/local.mk | 21 + gnu/packages/dotnet.scm | 1830 +++++++ .../patches/corefx-mono-5.4.0-patches.patch | 915 ++++ .../corefx-mono-pre-5.8.0-patches.patch | 1349 +++++ .../patches/mono-1.2.6-bootstrap.patch | 585 +++ ...-1.9.1-add-MONO_CREATE_IMAGE_VERSION.patch | 14 + gnu/packages/patches/mono-1.9.1-fixes.patch | 59 + gnu/packages/patches/mono-2.11.4-fixes.patch | 36 + gnu/packages/patches/mono-2.4.2.3-fixes.patch | 59 + gnu/packages/patches/mono-2.6.4-fixes.patch | 49 + ...ono-4.9.0-fix-runtimemetadataversion.patch | 13 + .../mono-5.10.0-later-mcs-changes.patch | 4601 +++++++++++++++++ gnu/packages/patches/mono-5.4.0-patches.patch | 100 + gnu/packages/patches/mono-5.8.0-patches.patch | 60 + .../patches/mono-6.12.0-add-runpath.patch | 185 + .../mono-6.12.0-fix-AssemblyResolver.patch | 236 + .../mono-6.12.0-fix-ConditionParser.patch | 46 + .../mono-mcs-patches-from-5.10.0.patch | 4218 +++++++++++++++ .../patches/pnet-fix-line-number-info.patch | 13 + .../patches/pnet-fix-off-by-one.patch | 13 + .../patches/pnet-newer-libgc-fix.patch | 45 + .../patches/pnet-newer-texinfo-fix.patch | 13 + 22 files changed, 14460 insertions(+) create mode 100644 gnu/packages/dotnet.scm create mode 100644 gnu/packages/patches/corefx-mono-5.4.0-patches.patch create mode 100644 gnu/packages/patches/corefx-mono-pre-5.8.0-patches.patch create mode 100644 gnu/packages/patches/mono-1.2.6-bootstrap.patch create mode 100644 gnu/packages/patches/mono-1.9.1-add-MONO_CREATE_IMAGE_VERSION.patch create mode 100644 gnu/packages/patches/mono-1.9.1-fixes.patch create mode 100644 gnu/packages/patches/mono-2.11.4-fixes.patch create mode 100644 gnu/packages/patches/mono-2.4.2.3-fixes.patch create mode 100644 gnu/packages/patches/mono-2.6.4-fixes.patch create mode 100644 gnu/packages/patches/mono-4.9.0-fix-runtimemetadataversion.patch create mode 100644 gnu/packages/patches/mono-5.10.0-later-mcs-changes.patch create mode 100644 gnu/packages/patches/mono-5.4.0-patches.patch create mode 100644 gnu/packages/patches/mono-5.8.0-patches.patch create mode 100644 gnu/packages/patches/mono-6.12.0-add-runpath.patch create mode 100644 gnu/packages/patches/mono-6.12.0-fix-AssemblyResolver.patch create mode 100644 gnu/packages/patches/mono-6.12.0-fix-ConditionParser.patch create mode 100644 gnu/packages/patches/mono-mcs-patches-from-5.10.0.patch create mode 100644 gnu/packages/patches/pnet-fix-line-number-info.patch create mode 100644 gnu/packages/patches/pnet-fix-off-by-one.patch create mode 100644 gnu/packages/patches/pnet-newer-libgc-fix.patch create mode 100644 gnu/packages/patches/pnet-newer-texinfo-fix.patch base-commit: 6774c9e75a835e91e9b0e415c749e48e4f724e24 -- Efraim Flashner אפרים פלשנר GPG key = A28B F40C 3E55 1372 662D 14F7 41AA E7DC CA3D 8351 Confidentiality cannot be guaranteed on emails sent or received unencrypted From debbugs-submit-bounces@debbugs.gnu.org Mon Dec 16 12:28:22 2024 Received: (at 74609) by debbugs.gnu.org; 16 Dec 2024 17:28:22 +0000 Received: from localhost ([127.0.0.1]:55834 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1tNEtK-0006F0-06 for submit@debbugs.gnu.org; Mon, 16 Dec 2024 12:28:22 -0500 Received: from mail-wr1-f48.google.com ([209.85.221.48]:57823) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1tNEtH-0006Ee-Eb for 74609@debbugs.gnu.org; Mon, 16 Dec 2024 12:28:20 -0500 Received: by mail-wr1-f48.google.com with SMTP id ffacd0b85a97d-385df53e559so3655484f8f.3 for <74609@debbugs.gnu.org>; Mon, 16 Dec 2024 09:28:19 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1734370039; x=1734974839; darn=debbugs.gnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:sender:from:to:cc:subject:date :message-id:reply-to; bh=xzD+IGCEA04X9RKqAXpz/JIXIML6PGBckSTMc+6eg08=; b=U0mRZQ912FMhEyH4Oh3WzOrq/y7rwFTZONBVZBT8kn4nF57W/MRZSxGZJb+x6Fbae7 SDIYYYujHLbGBOJ2Jd1dUAWgV+gGzSskUSiRaPM+lJXFgYdrlR7i7/agxVEhIEDxmW3v 5vcaDfNjavE9cPtZgiPgF9Nh11FNBuP6iA/msHqTB+rfLCWpMgon4hs5UXmvWFi7cNJF ZiMb04WJFQHRXyzZ6qubXmGie/y3wiPYSRf7fhC6XHHeAXO44R89toecB5CtiEyLndTW kkxC3auUlycKTqyzFLsdcm3geq4yJlh+0+4SNstrhUHNQoqTw2RVqCdw0EDzXG83hJ1C 1vgA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1734370039; x=1734974839; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:sender:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=xzD+IGCEA04X9RKqAXpz/JIXIML6PGBckSTMc+6eg08=; b=LT/ckD8NGIaYubHMXzz4SxqO3Ky4cTmXD4Z8wBXODuGSciWwp7A5T658Ao500nVnjM z31i2fZIOPHBPntERAdO7ILn4OYFLGi8rY+7hUC+PFyY2YCTCVVHxzqXuyi1SOuWyFuK ozoa1sleh41ZwoHyKtN2tB6rcXpmnP2bKB7vpIBX08UfWRcu4zfgNBH9WviT6LvvUrR2 FmdWvXD60esm8eK9XZYqJAvHj0vSDqBh7wQRClxBSVa7vo+GlaZ+O4mBnJn3zpryi0Ci aMTn8M9lUQUemMIMnJ7oSWLuAFiiAY15hkNDCV7AeqtlxN1sWeqQ8g2n92mCGoP5OMKg 77fA== X-Gm-Message-State: AOJu0YxsC9af9/9AuXYU+16u8/Vt0HdP1e2JhqlKVqC5hf+clgDg8d4+ TEaZnpiQW0+Rov13RoF9VinLXM7GjcSnJ1JL+du8Rd9i3ODrNjdn8xAnVFI6 X-Gm-Gg: ASbGncvEww1nd6iAa3Q/f00kcxGX4/Jhhz3YiKJURO8mLhKxkbpVUdJvMjreMcm5lMW cfRfdMI9IwUUAxD670XZAGhYpwVTOokmWsRxCuELvgdhMqJdX7Usu+HWRYgI0TNo4qaMML4dDhe mLzj+ZwevOWiDPAvwqCWOTnsFlmHfC/EJQqnt43XJObK8WfMxRbKs13MREVWu2w1eRJ58B7KggR oQTGWj9VwqRxwdh8XDtO5ScA/ZUxCcowWJWP6sIc3cN7gYsDxwJ+Y+9DUo7tQ== X-Google-Smtp-Source: AGHT+IH0GUWfkOpv774hkZ1HqL5ebiSNH9p89TVWi8FmPjcsAdHdctAkmnj8zP+ooF66y3y/03Umaw== X-Received: by 2002:a05:6000:1f85:b0:385:f7d9:99f5 with SMTP id ffacd0b85a97d-3889ad354a0mr9687246f8f.51.1734370038724; Mon, 16 Dec 2024 09:27:18 -0800 (PST) Received: from localhost ([31.210.180.118]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-388c801acaesm8687386f8f.54.2024.12.16.09.27.18 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 16 Dec 2024 09:27:18 -0800 (PST) From: Efraim Flashner To: 74609@debbugs.gnu.org Subject: [PATCH 05/21] gnu: Add mono-1.9.1. Date: Mon, 16 Dec 2024 19:26:28 +0200 Message-ID: X-Mailer: git-send-email 2.46.0 In-Reply-To: References: MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Spam-Score: 0.3 (/) X-Debbugs-Envelope-To: 74609 Cc: aaron.covrig.us@ieee.org, ludo@gnu.org, unmush , richard@freakingpenguin.com, unmush@proton.me, janneke@gnu.org 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: -0.7 (/) From: unmush * gnu/packages/dotnet.scm (mono-1.9.1): New variable. * gnu/packages/patches/mono-1.9.1-add-MONO_CREATE_IMAGE_VERSION.patch: New patch. * gnu/packages/patches/mono-1.9.1-fixes.patch: New patch. * gnu/local.mk (dist_patch_DATA): register new patches. Change-Id: I19c16041fa4419a7c31ca510da6f33a03785f584 --- gnu/local.mk | 2 + gnu/packages/dotnet.scm | 60 +++++++++++++++++++ ...-1.9.1-add-MONO_CREATE_IMAGE_VERSION.patch | 14 +++++ gnu/packages/patches/mono-1.9.1-fixes.patch | 59 ++++++++++++++++++ 4 files changed, 135 insertions(+) create mode 100644 gnu/packages/patches/mono-1.9.1-add-MONO_CREATE_IMAGE_VERSION.patch create mode 100644 gnu/packages/patches/mono-1.9.1-fixes.patch diff --git a/gnu/local.mk b/gnu/local.mk index bd2d3e61df4..38e98386d20 100644 --- a/gnu/local.mk +++ b/gnu/local.mk @@ -1819,6 +1819,8 @@ dist_patch_DATA = \ %D%/packages/patches/module-init-tools-moduledir.patch \ %D%/packages/patches/monero-use-system-miniupnpc.patch \ %D%/packages/patches/mono-1.2.6-bootstrap.patch \ + %D%/packages/patches/mono-1.9.1-add-MONO_CREATE_IMAGE_VERSION.patch \ + %D%/packages/patches/mono-1.9.1-fixes.patch \ %D%/packages/patches/mosaicatcher-unbundle-htslib.patch \ %D%/packages/patches/mrrescue-support-love-11.patch \ %D%/packages/patches/mtools-mformat-uninitialized.patch \ diff --git a/gnu/packages/dotnet.scm b/gnu/packages/dotnet.scm index 2f93d4bbd00..3a3bcb3c940 100644 --- a/gnu/packages/dotnet.scm +++ b/gnu/packages/dotnet.scm @@ -361,3 +361,63 @@ (define-public mono-1.2.6 license:lgpl2.0+ ;; note: ./mcs/LICENSE.LGPL specifies no version ;; mcs/jay license:bsd-4)))) + +(define-public mono-1.9.1 + (package + (inherit mono-1.2.6) + (version "1.9.1") + (name "mono") + (source (origin + (method git-fetch) + (uri + (git-reference + (url "https://gitlab.winehq.org/mono/mono.git") + (commit (string-append "mono-" "1.9.1.1")))) + (file-name (git-file-name name version)) + (sha256 + (base32 + "0s1n3zdhc2alk9smxfdl1kjz7lz2p19gs0ks4hgr864jlmf13bws")) + (modules '((guix build utils) + (ice-9 string-fun))) + (snippet prepare-mono-source) + (patches + (search-patches + "mono-1.9.1-fixes.patch" + "mono-1.9.1-add-MONO_CREATE_IMAGE_VERSION.patch")))) + (native-inputs + (modify-inputs (package-native-inputs mono-1.2.6) + (delete "pnet-git") + (delete "pnetlib-git") + (prepend mono-1.2.6) + (append which) + ;; needed for tests + (append perl))) + (arguments + (substitute-keyword-arguments (package-arguments mono-1.2.6) + ((#:make-flags _ #f) + #~(list "CC=gcc" "V=1")) + ((#:phases phases #~%standard-phases) + #~(modify-phases #$phases + (add-before 'configure 'set-cflags + (lambda _ + ;; apparently can't be set via make flags in this version + (let ((original (getenv "CFLAGS"))) + (setenv "CFLAGS" (string-append (or original "") + (if original " " "") + "-DARG_MAX=500"))))) + (add-before 'configure 'set-create-image-version + (lambda _ + ;; pnet produces v2.x assemblies. Mono does this weird thing + ;; where it always produces assemblies of the same version as + ;; the runtime that is running it, which is based on the + ;; version of the assembly that it loaded, which is based on + ;; what it decided for the previous compiler... on and on all + ;; the way back to pnet. This breaks that chain, because + ;; otherwise it ends up compiling the initial mcs against .NET + ;; 2.0 libraries and then running with .NET 1.0 libraries. + (setenv "MONO_CREATE_IMAGE_VERSION" "v1.1.4322"))) + (add-after 'unpack 'patch-test-driver-shebang + (lambda _ + (patch-shebang "mono/tests/test-driver"))))) + ((#:tests? _ #f) #f) + ((#:parallel-tests? _ #f) #f))))) diff --git a/gnu/packages/patches/mono-1.9.1-add-MONO_CREATE_IMAGE_VERSION.patch b/gnu/packages/patches/mono-1.9.1-add-MONO_CREATE_IMAGE_VERSION.patch new file mode 100644 index 00000000000..1eef0548ca1 --- /dev/null +++ b/gnu/packages/patches/mono-1.9.1-add-MONO_CREATE_IMAGE_VERSION.patch @@ -0,0 +1,14 @@ +diff --git a/mono/metadata/reflection.c b/mono/metadata/reflection.c +index ce053b0ef49..7c51f20c4cf 100644 +--- a/mono/metadata/reflection.c ++++ b/mono/metadata/reflection.c +@@ -4336,6 +4336,9 @@ create_dynamic_mono_image (MonoDynamicAssembly *assembly, char *assembly_name, c + + const char *version = mono_get_runtime_info ()->runtime_version; + ++ char *env_ver = getenv("MONO_CREATE_IMAGE_VERSION"); ++ if (env_ver) version = env_ver; ++ + #if HAVE_BOEHM_GC + image = GC_MALLOC (sizeof (MonoDynamicImage)); + #else diff --git a/gnu/packages/patches/mono-1.9.1-fixes.patch b/gnu/packages/patches/mono-1.9.1-fixes.patch new file mode 100644 index 00000000000..16353ea741e --- /dev/null +++ b/gnu/packages/patches/mono-1.9.1-fixes.patch @@ -0,0 +1,59 @@ +diff --git a/data/mono.pc.in b/data/mono.pc.in +index 6da0960db2d..d43bb187218 100644 +--- a/data/mono.pc.in ++++ b/data/mono.pc.in +@@ -7,6 +7,6 @@ sysconfdir=@sysconfdir@ + Name: Mono + Description: Mono Runtime + Version: @VERSION@ +-Requires: glib-2.0 gthread-2.0 ++Requires: glib-2.0 gthread-2.0 bdw-gc + Libs: -L${libdir} @export_ldflags@ -lmono @libmono_ldflags@ + Cflags: -I${includedir} @libmono_cflags@ +diff --git a/mono-uninstalled.pc.in b/mono-uninstalled.pc.in +index 7fa3f12dc91..2a0734362fd 100644 +--- a/mono-uninstalled.pc.in ++++ b/mono-uninstalled.pc.in +@@ -1,6 +1,6 @@ + Name: Mono + Description: Mono Runtime + Version: @VERSION@ +-Requires: glib-2.0 gthread-2.0 ++Requires: glib-2.0 gthread-2.0 bdw-gc + Libs: -L@mono_build_root@/mono/mini/.libs @export_ldflags@ -lmono @libmono_ldflags@ + Cflags: -I@abs_top_srcdir@ -I@abs_top_srcdir@/mono @libmono_cflags@ +diff --git a/mono/metadata/Makefile.am b/mono/metadata/Makefile.am +index 2e480190c8c..90d0f619959 100644 +--- a/mono/metadata/Makefile.am ++++ b/mono/metadata/Makefile.am +@@ -157,7 +157,6 @@ libmonoruntimeinclude_HEADERS = \ + object.h \ + exception.h \ + profiler.h \ +- appdomain.h \ + mono-config.h \ + debug-helpers.h \ + mempool.h +diff --git a/mono/mini/driver.c b/mono/mini/driver.c +index ffa4b5e5e69..85a954960eb 100644 +--- a/mono/mini/driver.c ++++ b/mono/mini/driver.c +@@ -1033,6 +1033,7 @@ mono_main (int argc, char* argv[]) + #endif + if (!g_thread_supported ()) + g_thread_init (NULL); ++ GC_allow_register_threads(); + + if (mono_running_on_valgrind () && getenv ("MONO_VALGRIND_LEAK_CHECK")) { + GMemVTable mem_vtable; +diff --git a/runtime/Makefile.am b/runtime/Makefile.am +index e3a8a21e9e2..587b9f4aa79 100644 +--- a/runtime/Makefile.am ++++ b/runtime/Makefile.am +@@ -1,6 +1,3 @@ +-# hack to prevent 'check' from depending on 'all' +-AUTOMAKE_OPTIONS = cygnus +- + tmpinst = _tmpinst + + noinst_SCRIPTS = mono-wrapper monodis-wrapper semdel-wrapper -- Efraim Flashner אפרים פלשנר GPG key = A28B F40C 3E55 1372 662D 14F7 41AA E7DC CA3D 8351 Confidentiality cannot be guaranteed on emails sent or received unencrypted From debbugs-submit-bounces@debbugs.gnu.org Mon Dec 16 12:28:25 2024 Received: (at 74609) by debbugs.gnu.org; 16 Dec 2024 17:28:26 +0000 Received: from localhost ([127.0.0.1]:55837 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1tNEtM-0006FB-Ma for submit@debbugs.gnu.org; Mon, 16 Dec 2024 12:28:25 -0500 Received: from mail-wm1-f52.google.com ([209.85.128.52]:46105) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1tNEtG-0006E4-Ev for 74609@debbugs.gnu.org; Mon, 16 Dec 2024 12:28:20 -0500 Received: by mail-wm1-f52.google.com with SMTP id 5b1f17b1804b1-43622267b2eso46730805e9.0 for <74609@debbugs.gnu.org>; Mon, 16 Dec 2024 09:28:18 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1734370033; x=1734974833; darn=debbugs.gnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:sender:from:to:cc:subject:date :message-id:reply-to; bh=eS0zZ/0xDh/HTVjZ2uPaL3sYw0hzqNMEw++fk6MpCxM=; b=QQYFpXufifRILzeqqwgj7j5uDuoeaenuHmZvKtmvHztzTNUYM5OTB2k+IokiZ8tYfg 7kcdiBNI0junk3svS9pXqs70veDy1s/Zm9jZV9Z7YPYOq++1ZyNFFFFxfxywPDlKg2wm ZRUHwJ/iiheunpEiUa/4/tJo8kWRC3/9Jqeb6B8cELn8DqFdyT5J9OdBlYjN8GrzY79A 1KqAbhGyd8Whpm3l+Z/IZ+RZ7vky3Z1wkhXp81kit8XExvuJYJiTfbPC33iFwhis6EkZ cDWu1WMVl8DobpSu1/WPH415Jvo9znU8lhVFXk2703tNEFZ9HqgyLLTFmnMa7BANzxkT y7XA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1734370033; x=1734974833; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:sender:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=eS0zZ/0xDh/HTVjZ2uPaL3sYw0hzqNMEw++fk6MpCxM=; b=VvqJZhhEw7lQ805VLwelBU9+GPPDwBTvUwza59aj3/wm9JFKOFxRJ4SYFTv6qfX/Vg XSBSzbvfIWZpvd5vUVx8G5XiHnZyYH8u4gXj3Kb6bZUmVcSC+UU15Snx/125jt9bEuQk bl79r1oghIdw5F/vGDj6ls1do1RBtDOwV4haIxNiFhbSncqpGi5fy0NSOosD8K/NOtzI 3m8u2uPfMACzHMVAhQ5yS6/AmJ/7kHH2HXGV9evwo0TeVj1cI15Vf0N0f9SLxVRazd9r BD+NdJ4gTp7+D8tyJlDvAOFnWoJs6ar3Rhh4F+cP17mSRivX7zUuZ9VUui5v2IXYZvFn 5OFw== X-Gm-Message-State: AOJu0Yyp0viaE0FkwIHdNnw7MRknqrHmJKcql9ugdQnUVrIvapirYqoF 5xMM2TvcEROl7IH5ffHU+4Go+6QFBhNSHaX9WZ9JqVT2GKr4PBrNzrXUfxk2 X-Gm-Gg: ASbGncvJQAhrSQ6tZvmwmfQ1CZTlrl/rqqafBMUoiVJEMjdJGFka/wDsM3BMbMfI8kO cbS94FaLjmB2HjjXcsJTPW2ZaGlwXC1HAJ3OyR6JfTNljZyDw46ulpw3iygORzQ8fhsfGucTSgS K7sXuX11KEajS1lA4IxHLIwy0xbZF+0MtH+/kCWi0qGiicvb4Pc9upNt5aTT4vyuZ4uoliCuPEH nItWSdAgz7UrJBg/mMMEwd6iEfG8hc+/sQjOCwEIzMAE4P6qS6ZjoPcjn3Ebg== X-Google-Smtp-Source: AGHT+IEmnfPmOKY+Klq5dJQEznYV0Qt9ADGM2NFw8wx6nRkj5jQo4DqPHrKxPRoq4wIbCnZhrXdvuw== X-Received: by 2002:a05:600c:350c:b0:434:f297:8e78 with SMTP id 5b1f17b1804b1-4362aa15448mr118032625e9.7.1734370032318; Mon, 16 Dec 2024 09:27:12 -0800 (PST) Received: from localhost ([31.210.180.118]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-43636067436sm90945525e9.23.2024.12.16.09.27.11 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 16 Dec 2024 09:27:11 -0800 (PST) From: Efraim Flashner To: 74609@debbugs.gnu.org Subject: [PATCH 02/21] gnu: Add pnet-git. Date: Mon, 16 Dec 2024 19:26:25 +0200 Message-ID: X-Mailer: git-send-email 2.46.0 In-Reply-To: References: MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Spam-Score: 0.3 (/) X-Debbugs-Envelope-To: 74609 Cc: aaron.covrig.us@ieee.org, ludo@gnu.org, unmush , richard@freakingpenguin.com, unmush@proton.me, janneke@gnu.org 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: -0.7 (/) From: unmush * gnu/packages/dotnet.scm (pnet-git): New variable. * gnu/packages/patches/pnet-fix-line-number-info.patch: New patch. * gnu/packages/patches/pnet-fix-off-by-one.patch: New patch. * gnu/packages/patches/pnet-newer-libgc-fix.patch: New patch. * gnu/packages/patches/pnet-newer-texinfo-fix.patch: New patch. * gnu/local.mk (dist_patch_DATA): Register new patches. Change-Id: I751e97088e2b848078889b2033ebb4356d3cfe4b --- gnu/local.mk | 4 + gnu/packages/dotnet.scm | 99 +++++++++++++++++++ .../patches/pnet-fix-line-number-info.patch | 13 +++ .../patches/pnet-fix-off-by-one.patch | 13 +++ .../patches/pnet-newer-libgc-fix.patch | 45 +++++++++ .../patches/pnet-newer-texinfo-fix.patch | 13 +++ 6 files changed, 187 insertions(+) create mode 100644 gnu/packages/patches/pnet-fix-line-number-info.patch create mode 100644 gnu/packages/patches/pnet-fix-off-by-one.patch create mode 100644 gnu/packages/patches/pnet-newer-libgc-fix.patch create mode 100644 gnu/packages/patches/pnet-newer-texinfo-fix.patch diff --git a/gnu/local.mk b/gnu/local.mk index 94331c6064b..8fc98c8fd22 100644 --- a/gnu/local.mk +++ b/gnu/local.mk @@ -1929,6 +1929,10 @@ dist_patch_DATA = \ %D%/packages/patches/plasma-framework-fix-KF5PlasmaMacros.cmake.patch \ %D%/packages/patches/plasp-fix-normalization.patch \ %D%/packages/patches/plasp-include-iostream.patch \ + %D%/packages/patches/pnet-fix-line-number-info.patch \ + %D%/packages/patches/pnet-fix-off-by-one.patch \ + %D%/packages/patches/pnet-newer-libgc-fix.patch \ + %D%/packages/patches/pnet-newer-texinfo-fix.patch \ %D%/packages/patches/pocketfft-cpp-prefer-preprocessor-if.patch \ %D%/packages/patches/pokerth-boost.patch \ %D%/packages/patches/ppsspp-disable-upgrade-and-gold.patch \ diff --git a/gnu/packages/dotnet.scm b/gnu/packages/dotnet.scm index e085b364e29..cd8886c8398 100644 --- a/gnu/packages/dotnet.scm +++ b/gnu/packages/dotnet.scm @@ -60,3 +60,102 @@ (define-public treecc of compilers and other language-based tools. It manages the generation of code to handle abstract syntax trees and operations upon the trees.") (license license:gpl2+))) + +;; several improvements occurred past the 0.8.0 release that make it easier to +;; bootstrap mono +(define-public pnet-git + (let ((commit "3baf94734d8dc3fdabba68a8891e67a43ed6c4bd") + (version "0.8.0") + (revision "0")) + (package + (name "pnet-git") + (version (git-version version revision commit)) + (source (origin + (method git-fetch) + (uri (git-reference + (url "https://git.savannah.gnu.org/git/dotgnu-pnet/pnet.git") + (commit commit))) + (file-name (git-file-name name version)) + (sha256 + (base32 + "0vznvrgz8l0mpib1rz5v3clr7cn570vyp80f7f1jvzivnc1imzn6")) + (modules '((guix build utils))) + (snippet + #~(begin + (for-each delete-file-recursively '("libffi" "libgc")) + (for-each delete-file (filter file-exists? + '("compile" + "configure" + "config.guess" + "config.sub" + "depcomp" + "install-sh" + "ltconfig" + "ltcf-c.sh" + "ltmain.sh"))) + (for-each delete-file (find-files "." "Makefile(\\.in)?$")) + (for-each delete-file (find-files "." "_grammar\\.(c|h)$")) + (for-each delete-file (find-files "." "_scanner\\.(c|h)$")) + ;; Fix to not require bundled dependencies + (substitute* "configure.in" + (("GCLIBS='.*libgc.a'") "GCLIBS='-lgc'") + ;; AC_SEARCH_LIBJIT checks hardcoded header locations + (("search_libjit=true") + (string-append "search_libjit=false\n" + "JIT_LIBS=-ljit"))) + (substitute* "Makefile.am" + (("OPT_SUBDIRS \\+= lib.*") "")) + (substitute* "support/hb_gc.c" + (("#include .*/libgc/include/gc.h.") + "#include ") + (("#include .*/libgc/include/gc_typed.h.") + "#include ")) + (substitute* (list "codegen/Makefile.am" + "cscc/bf/Makefile.am" + "cscc/csharp/Makefile.am" + "cscc/c/Makefile.am" + "cscc/java/Makefile.am") + ;; Generated files aren't prerequisites + (("TREECC_OUTPUT =.*") "")) + (substitute* "cscc/csharp/cs_grammar.y" + (("YYLEX") "yylex()")) + (substitute* "cscc/common/cc_main.h" + (("CCPreProc CCPreProcessorStream;" all) + (string-append "extern " all))) + (substitute* "csdoc/scanner.c" + (("int\ttoken;" all) + (string-append "extern " all))) + (substitute* "doc/cvmdoc.py" + (("python1.5") "python")))) + (patches + (search-patches "pnet-newer-libgc-fix.patch" + "pnet-newer-texinfo-fix.patch" + "pnet-fix-line-number-info.patch" + "pnet-fix-off-by-one.patch")))) + (build-system gnu-build-system) + (native-inputs + (list autoconf + automake + bison + flex + libtool + libatomic-ops + python ; for cvmdoc.py + texinfo + treecc)) + (inputs + (list libgc libjit)) + (arguments + (list #:configure-flags #~(list "--with-jit") + #:make-flags #~(list "CFLAGS+=-Wno-pointer-to-int-cast"))) + (native-search-paths + (list (search-path-specification + (variable "CSCC_LIB_PATH") + (files (list "lib/cscc/lib"))))) + (home-page "http://www.gnu.org/software/dotgnu/html2.0/pnet.html") + (synopsis "Compiler for the C# programming language") + (description + "The goal of this project is to build a suite of free software tools +to build and execute .NET applications, including a C# compiler, +assembler, disassembler, and runtime engine.") + (license license:gpl2+)))) diff --git a/gnu/packages/patches/pnet-fix-line-number-info.patch b/gnu/packages/patches/pnet-fix-line-number-info.patch new file mode 100644 index 00000000000..9e5af849413 --- /dev/null +++ b/gnu/packages/patches/pnet-fix-line-number-info.patch @@ -0,0 +1,13 @@ +diff --git a/codegen/cg_coerce.c b/codegen/cg_coerce.c +index 92d2f59a..c90ad5e2 100644 +--- a/codegen/cg_coerce.c ++++ b/codegen/cg_coerce.c +@@ -1203,6 +1203,8 @@ int ILCoerce(ILGenInfo *info, ILNode *node, ILNode **parent, + != ILMachineType_Void) + { + *parent = ILNode_CastSimple_create(node, constType); ++ yysetfilename(*parent, yygetfilename(node)); ++ yysetlinenum(*parent, yygetlinenum(node)); + return 1; + } + else if(indirect && GetIndirectConvertRules(info,fromType,toType,0, diff --git a/gnu/packages/patches/pnet-fix-off-by-one.patch b/gnu/packages/patches/pnet-fix-off-by-one.patch new file mode 100644 index 00000000000..858d2266976 --- /dev/null +++ b/gnu/packages/patches/pnet-fix-off-by-one.patch @@ -0,0 +1,13 @@ +diff --git a/codegen/cg_genattr.c b/codegen/cg_genattr.c +index 535852da..c3acc0dc 100644 +--- a/codegen/cg_genattr.c ++++ b/codegen/cg_genattr.c +@@ -1532,7 +1532,7 @@ static int MarshalAsAttribute(ILGenInfo *info, + else + { + sizeParamIndex = attributeInfo->namedArgs[currentNamedArg].evalValue.un.i4Value; +- if(sizeParamIndex <= 0) ++ if(sizeParamIndex < 0) + { + CGErrorForNode(info, attributeInfo->namedArgs[currentNamedArg].node, + _("The size parameter index must be >= 0")); diff --git a/gnu/packages/patches/pnet-newer-libgc-fix.patch b/gnu/packages/patches/pnet-newer-libgc-fix.patch new file mode 100644 index 00000000000..1084b5a5bec --- /dev/null +++ b/gnu/packages/patches/pnet-newer-libgc-fix.patch @@ -0,0 +1,45 @@ +diff --git a/support/hb_gc.c b/support/hb_gc.c +index a5addb2d..41126963 100644 +--- a/support/hb_gc.c ++++ b/support/hb_gc.c +@@ -104,12 +104,6 @@ static volatile int _FinalizersRunningSynchronously = 0; + #define GC_TRACE(a, b) + #endif + +-/* +- * This is a internal global variable with the number of reclaimed bytes +- * after a garbage collection. +- */ +-extern GC_signed_word GC_bytes_found; +- + /* + * Main entry point for the finalizer thread. + */ +@@ -432,6 +426,7 @@ int ILGCFullCollection(int timeout) + { + int lastFinalizingCount; + int hasThreads; ++ struct GC_prof_stats_s stats; + + hasThreads = _ILHasThreads(); + +@@ -462,7 +457,8 @@ int ILGCFullCollection(int timeout) + GC_TRACE("Last finalizingCount = %i\n", lastFinalizingCount); + + GC_gcollect(); +- bytesCollected = GC_bytes_found; ++ GC_get_prof_stats(&stats, sizeof(stats)); ++ bytesCollected = stats.bytes_reclaimed_since_gc; + + GC_TRACE("GC: bytes collected = %i\n", bytesCollected); + +@@ -516,7 +512,8 @@ int ILGCFullCollection(int timeout) + GC_TRACE("Last finalizingCount = %i\n", lastFinalizingCount); + + GC_gcollect(); +- bytesCollected = GC_bytes_found; ++ GC_get_prof_stats(&stats, sizeof(stats)); ++ bytesCollected = stats.bytes_reclaimed_since_gc; + + GC_TRACE("GC: bytes collected = %i\n", bytesCollected); + diff --git a/gnu/packages/patches/pnet-newer-texinfo-fix.patch b/gnu/packages/patches/pnet-newer-texinfo-fix.patch new file mode 100644 index 00000000000..b57052eeeaa --- /dev/null +++ b/gnu/packages/patches/pnet-newer-texinfo-fix.patch @@ -0,0 +1,13 @@ +diff --git a/doc/pnettools.texi b/doc/pnettools.texi +index 916d90bb..cdbe05cf 100644 +--- a/doc/pnettools.texi ++++ b/doc/pnettools.texi +@@ -59,7 +59,7 @@ Copyright @copyright{} 2001, 2002, 2003 Southern Storm Software, Pty Ltd + @center @titlefont{Portable.NET Development Tools} + + @vskip 0pt plus 1fill +-@center{Copyright @copyright{} 2001, 2002, 2003 Southern Storm Software, Pty Ltd} ++@center Copyright @copyright{} 2001, 2002, 2003 Southern Storm Software, Pty Ltd + @end titlepage + + @c ----------------------------------------------------------------------- -- Efraim Flashner אפרים פלשנר GPG key = A28B F40C 3E55 1372 662D 14F7 41AA E7DC CA3D 8351 Confidentiality cannot be guaranteed on emails sent or received unencrypted From debbugs-submit-bounces@debbugs.gnu.org Mon Dec 16 12:28:26 2024 Received: (at 74609) by debbugs.gnu.org; 16 Dec 2024 17:28:26 +0000 Received: from localhost ([127.0.0.1]:55839 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1tNEtN-0006FK-Qe for submit@debbugs.gnu.org; Mon, 16 Dec 2024 12:28:26 -0500 Received: from mail-wm1-f54.google.com ([209.85.128.54]:47346) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1tNEtI-0006EI-9i for 74609@debbugs.gnu.org; Mon, 16 Dec 2024 12:28:21 -0500 Received: by mail-wm1-f54.google.com with SMTP id 5b1f17b1804b1-4361fe642ddso46629725e9.2 for <74609@debbugs.gnu.org>; Mon, 16 Dec 2024 09:28:20 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1734370035; x=1734974835; darn=debbugs.gnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:sender:from:to:cc:subject:date :message-id:reply-to; bh=096cJTemglKTUt+Ips/e/H9kF0RwxHB9Ttf+SXFbS4E=; b=XrjSy16TQi1u3D5KPTRotYiV18+JgoRHPYE3+fYLE/YWFn0dowALqt3yakweh6+Fkc xkwN/sssTKcRJBfCx/0BoCOo/fjREdp7Vr4oaP0DzmgKk72Lt1DY2Ga3Ry488KRSfEzf fJdlOSvFk3ot1+LiGIy2ElULxBkkZHl/HrYgDVjiaMa9yCwGnjXJnrlE4FJIxZFTeusW UugqHaw9zZlZu6eQDoRn93MJtE++7JY3wtWgcvtAzKegAtsOYPoJjgLt34ysa7vEcAmt qeb88H9vqe2rq2uqks92g3jm0ao6lYS4HnD+0j5P4LgJpCVzyd5W5J8WUmlYqj/paXwG xmqA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1734370035; x=1734974835; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:sender:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=096cJTemglKTUt+Ips/e/H9kF0RwxHB9Ttf+SXFbS4E=; b=p1a1FAdmX7P/0tWmURU7Hpo3p7JQUQ9NcZGLbcs3UlGYoHNfREy8vTsPLPjq+6peam L4pNd62uczXP6Z+wYoO+ScBlxsM3IZxtOTvLpF4HE8eqm6/lnzp4RP3tbwQbKdHLTpQK RGDeoX/L6OF47Dpz7B17Ia5w4lnW82D+vN4++HzCN8Eu99VNvBleH5wt/BmVcYAocLGu Q1ffIdFEdn9ElZaxKBjwa8CmoqbYJgcT6jthb14OVx2/8t10H8IRY4USr6tz/NhkwgHq +25BQ6EqY8T/4CYZ1wXeKQKgfD89F8N9/dCet2cRDQ5hlA6y071DV4T/ahPwL6Wbym8e D71A== X-Gm-Message-State: AOJu0YzZYIyyIgk8/hJ9kT+mgJQ02eeOFm0OfXrNbEhHnm2Y5jG4sss+ rCUMhmjvZr0kkgCMcVQGnlp1DyKb7HjkzzGacWt0CShF3n0XGJMPUjCEZJis X-Gm-Gg: ASbGncu0ITxH+4Gk7uOi0ElgUczWTEQFexLsMdaYZVV8PNIL8KnHdfsC1u3DAIa4rL0 gBFVqpQrR6bkeSyzFupGS1VLiQeABr80zlREwO5m3vxEZiw5JSa2kT9u4Yc3e0CAnw49pAcUQBm EBq19rBm/mLFpBaVRXtEIlon/+z0ZxsNaqsOUoOUroI9Vs2BM8684OsUuzb5nTF9G8Iu0Q2DLR2 7SDc4vGPXa1AtdLzxWPovwzRzJSZF2mTp730FFwdLC88ihUi/nhNurnlDr0TQ== X-Google-Smtp-Source: AGHT+IEUgNs0PXYWw1rLM2Go8LI5+lH4MYwYHFQimvGii544Uk+r44qijO6xhwA5YzpIekapulVcCw== X-Received: by 2002:a05:600c:1f1b:b0:434:fa73:a907 with SMTP id 5b1f17b1804b1-4362aa2f0abmr132247235e9.13.1734370034430; Mon, 16 Dec 2024 09:27:14 -0800 (PST) Received: from localhost ([31.210.180.118]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-4361ec75410sm154282465e9.1.2024.12.16.09.27.13 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 16 Dec 2024 09:27:13 -0800 (PST) From: Efraim Flashner To: 74609@debbugs.gnu.org Subject: [PATCH 03/21] gnu: Add pnetlib-git. Date: Mon, 16 Dec 2024 19:26:26 +0200 Message-ID: <9b24a9d4637274ec109c82eec483f56bb97a8fa9.1734369314.git.efraim@flashner.co.il> X-Mailer: git-send-email 2.46.0 In-Reply-To: References: MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Spam-Score: 0.3 (/) X-Debbugs-Envelope-To: 74609 Cc: aaron.covrig.us@ieee.org, ludo@gnu.org, unmush , richard@freakingpenguin.com, unmush@proton.me, janneke@gnu.org 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: -0.7 (/) From: unmush * gnu/packages/dotnet.scm (pnetlib-git): New variable. Change-Id: I3a041de181d96bfe9e447d72ddd9578e12db8014 --- gnu/packages/dotnet.scm | 57 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 57 insertions(+) diff --git a/gnu/packages/dotnet.scm b/gnu/packages/dotnet.scm index cd8886c8398..1a027854ced 100644 --- a/gnu/packages/dotnet.scm +++ b/gnu/packages/dotnet.scm @@ -159,3 +159,60 @@ (define-public pnet-git to build and execute .NET applications, including a C# compiler, assembler, disassembler, and runtime engine.") (license license:gpl2+)))) + +(define-public pnetlib-git + (let ((version "0.8.0") + (commit "c3c12b8b0c65f5482d03d6a4865f7670e98baf4c") + (revision "0")) + (package + (name "pnetlib-git") + (version (git-version version revision commit)) + (source (origin + (method git-fetch) + (uri (git-reference + (url + "https://git.savannah.gnu.org/git/dotgnu-pnet/pnetlib.git") + (commit commit))) + (file-name (git-file-name name version)) + (sha256 + (base32 + "04dikki3lr3m1cacirld90rpi95656b2y2mc5rkycb7s0yfdz1nk")) + (modules '((guix build utils))) + (snippet + #~(begin + (for-each delete-file (filter file-exists? + '("configure" + "config.guess" + "config.sub" + "install-sh" + "ltmain.sh"))) + (for-each delete-file (find-files "." "Makefile(\\.in)?$")) + (substitute* (find-files "tests" "^Makefile\\.am$") + (("TESTS_ENVIRONMENT.*") + (string-append + "LOG_COMPILER = $(SHELL)\n" + "AM_LOG_FLAGS = $(top_builddir)/tools/run_test.sh" + " $(top_builddir)"))) + (substitute* "tools/run_test.sh.in" + (("en_US") "en_US.utf8")) + (substitute* "tools/wrapper.sh.in" + (("exec .LN_S clrwrap ..1." all) + (string-append + "echo '#!@SHELL@' >> $1\n" + "echo exec $CLRWRAP" + " $(dirname $(dirname $1))" + "/lib/cscc/lib/$(basename $1).exe >> $1\n" + "chmod +x $1"))))))) + (build-system gnu-build-system) + (arguments + (list #:make-flags #~(list "CFLAGS+=-Wno-pointer-to-int-cast"))) + (native-inputs + (list autoconf automake libtool treecc)) + (inputs + (list pnet-git)) + (home-page "http://www.gnu.org/software/dotgnu/html2.0/pnet.html") + (synopsis "Libraries for the C# programming language") + (description + "DotGNU Portable.NET Library contains an implementation of the C# library, +for use with .NET-capable runtime engines and applications.") + (license license:gpl2+)))) -- Efraim Flashner אפרים פלשנר GPG key = A28B F40C 3E55 1372 662D 14F7 41AA E7DC CA3D 8351 Confidentiality cannot be guaranteed on emails sent or received unencrypted From debbugs-submit-bounces@debbugs.gnu.org Mon Dec 16 12:28:32 2024 Received: (at 74609) by debbugs.gnu.org; 16 Dec 2024 17:28:33 +0000 Received: from localhost ([127.0.0.1]:55844 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1tNEtS-0006Fo-Gf for submit@debbugs.gnu.org; Mon, 16 Dec 2024 12:28:32 -0500 Received: from mail-wm1-f43.google.com ([209.85.128.43]:59519) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1tNEtK-0006EU-Q0 for 74609@debbugs.gnu.org; Mon, 16 Dec 2024 12:28:25 -0500 Received: by mail-wm1-f43.google.com with SMTP id 5b1f17b1804b1-436202dd730so31549225e9.2 for <74609@debbugs.gnu.org>; Mon, 16 Dec 2024 09:28:22 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1734370037; x=1734974837; darn=debbugs.gnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:sender:from:to:cc:subject:date :message-id:reply-to; bh=KNZ8scw786ESgmoMjsnQZxE98UPRcCPXMtTGJNsxfBY=; b=bXYxmh6gPcqsjLWScwD6XOlknDNlcSFoSvFt+4zrvbSdUcWBJPax2B9gXFOX2llF2W X1sOGneSso7UEENKyI0te51vSLLH5iPWu9bGPjrgMq9JWpsQnxocu4w3D96ECLjSNfrb 3qnbvnj1N/2FNaBOO652obfjTNtA/++h32dzykfEbQ3jniVVxvGCNsKnhXLgT70wPpJj Rxlf2N9Y8HIywNKzD7440kXJZOyL2SLxjeHZVXtn8Wssa0XGdNMTYQx2fy/xZNB25dm5 ccX8cNFJD0S9LpKyQbdkF0mHbwO3mTbY+QyCWfRE8s+l37EQ/MHGsq5wkPyakewqUjEy WSqw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1734370037; x=1734974837; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:sender:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=KNZ8scw786ESgmoMjsnQZxE98UPRcCPXMtTGJNsxfBY=; b=gl1vui4067e5x/VnZStGkuT/BaRXmEupWQ1EUQvsjGSsgqza7YHNt/AQ0yFr/XO5Ol d0XzbO6hr8SNyecxv4zwGuPi1fEUoB/Yj0YciIWbnf9msY6LaSuKle8vm++oajfKH8lV x6tskcqAnJd46eYdcEhysucWfvowi6/hszEW27UHS4+n3MmNZe5YACTjdbWcVjiuCFLp fUckDF1aWB6XfdVacaSMgdPWlzm6spu3K97obfxZef0gMTKOOVL9RypU31kasy88dcNB MULnoMw+Rz3X5PgmHP8/FuyfeITlYFsmy7B34YSVtRlM44vKQ+fuy+fqAFqQZIa3XLiN J6kA== X-Gm-Message-State: AOJu0YwNNijeFqZiSs45V3jLkmZraMvqbEaO1ZF3WkIiyt66xEBdLsbM mEF5TrHUOTv9H27eLWGSgVtYzoKRyrt7iegV1fEYjYHA3ct4imwfyRSBB5ul X-Gm-Gg: ASbGncusH8NrruJj7s76rd1t2VOXPrYulI3tgi3P/m1qWnbmKWJOdqOsgxiSCtn/Da6 4uOdc5wUEbhbV5BuJhBjhd714lx9EPJ682K6MAwbkxsPvO7//pXa2LHkhsukIgS82V1W32rTLnd scSaWGQ6WRhCFw6Jnj7zUYiBXivVfC13MVkKFwvB+/QhwZC+pSBQMD+tuE69hREX6nYQmBiYqFT u5Rcy+srCvIDygjrjj0iqBjenm9rudKLihlx/0D0a61RUP8JGu/kW/rLuuM6g== X-Google-Smtp-Source: AGHT+IFOa8lTolzDX4FMS6D0Qn+z5mm2KHgykXgtG2jCz1PsnvpBgbJcKZqXQ3GkCMcyi7/Uv4Rbcg== X-Received: by 2002:a05:6000:1ac8:b0:386:3e48:f732 with SMTP id ffacd0b85a97d-38880acd52fmr11019926f8f.16.1734370036647; Mon, 16 Dec 2024 09:27:16 -0800 (PST) Received: from localhost ([31.210.180.118]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-388c8016275sm8618959f8f.24.2024.12.16.09.27.15 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 16 Dec 2024 09:27:16 -0800 (PST) From: Efraim Flashner To: 74609@debbugs.gnu.org Subject: [PATCH 04/21] gnu: Add mono-1.2.6. Date: Mon, 16 Dec 2024 19:26:27 +0200 Message-ID: <6a867624b7826756425f2fce8b8d77628b3d9fd4.1734369314.git.efraim@flashner.co.il> X-Mailer: git-send-email 2.46.0 In-Reply-To: References: MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Spam-Score: 1.0 (+) X-Debbugs-Envelope-To: 74609 Cc: aaron.covrig.us@ieee.org, ludo@gnu.org, unmush , richard@freakingpenguin.com, unmush@proton.me, janneke@gnu.org 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: -0.0 (/) From: unmush * gnu/packages/dotnet.scm (mono-1.2.6): New variable. * gnu/packages/patches/mono-1.2.6-bootstrap.patch: New patch. * gnu/local.mk (dist_patch_DATA): register it. Change-Id: I73765d921c28c473271a2038dfaa53cc7fdad3c5 --- gnu/local.mk | 1 + gnu/packages/dotnet.scm | 145 +++++ .../patches/mono-1.2.6-bootstrap.patch | 585 ++++++++++++++++++ 3 files changed, 731 insertions(+) create mode 100644 gnu/packages/patches/mono-1.2.6-bootstrap.patch diff --git a/gnu/local.mk b/gnu/local.mk index 8fc98c8fd22..bd2d3e61df4 100644 --- a/gnu/local.mk +++ b/gnu/local.mk @@ -1818,6 +1818,7 @@ dist_patch_DATA = \ %D%/packages/patches/mpg321-gcc-10.patch \ %D%/packages/patches/module-init-tools-moduledir.patch \ %D%/packages/patches/monero-use-system-miniupnpc.patch \ + %D%/packages/patches/mono-1.2.6-bootstrap.patch \ %D%/packages/patches/mosaicatcher-unbundle-htslib.patch \ %D%/packages/patches/mrrescue-support-love-11.patch \ %D%/packages/patches/mtools-mformat-uninitialized.patch \ diff --git a/gnu/packages/dotnet.scm b/gnu/packages/dotnet.scm index 1a027854ced..2f93d4bbd00 100644 --- a/gnu/packages/dotnet.scm +++ b/gnu/packages/dotnet.scm @@ -216,3 +216,148 @@ (define-public pnetlib-git "DotGNU Portable.NET Library contains an implementation of the C# library, for use with .NET-capable runtime engines and applications.") (license license:gpl2+)))) + +(define prepare-mono-source-0 + #~((false-if-exception + (delete-file "./configure")) + (false-if-exception + (delete-file-recursively "./libgc")) + ;; just to be sure + (for-each delete-file + (find-files "." + "\\.(dll|exe|DLL|EXE|so)$")) + ;; We deleted docs/AgilityPack.dll earlier (if it existed), and it's + ;; required for building the documentation, so skip building the + ;; documentation. According to docs/README, "the sources to this DLL + ;; live in GNOME CVS module beagle/Filters/AgilityPack". + (substitute* "./Makefile.am" + (("^(|DIST_|MOONLIGHT_|MONOTOUCH_)SUBDIRS =.*" all) + (string-replace-substring + (string-replace-substring + (string-replace-substring all " docs" "") + " $(libgc_dir)" "") + " libgc" ""))))) + +;; A lot of the fixes are shared between many versions, and it doesn't hurt to +;; apply them to versions before or after they are necessary, so just include +;; them all. +(define prepare-mono-source + #~(begin + #$@prepare-mono-source-0 + (substitute* (filter file-exists? + '("./configure.in" + "./configure.ac")) + (("int f = isinf \\(1\\);") + "int f = isinf (1.0);")) + ;; makedev is in now. Include + ;; it. + (substitute* "mono/io-layer/processes.c" + (("#ifdef HAVE_SYS_MKDEV_H") "#if 1") + (("sys/mkdev.h") "sys/sysmacros.h")) + (substitute* (filter file-exists? '("./mono/metadata/boehm-gc.c")) + (("GC_set_finalizer_notify_proc") + "GC_set_await_finalize_proc") + (("GC_toggleref_register_callback") + "GC_set_toggleref_func")) + (substitute* (filter file-exists? '("./mono/utils/mono-compiler.h")) + (("static __thread gpointer x MONO_TLS_FAST") + (string-append + "static __thread gpointer x" + " __attribute__((used))"))) + ;; Since the time the old mono versions were written at, gcc has started + ;; removing more things it thinks are unused (for example because they + ;; are only referenced in inline assembly of some sort). + (substitute* (filter file-exists? '("./mono/metadata/sgen-alloc.c")) + (("static __thread char \\*\\*tlab_next_addr") + (string-append + "static __thread char **tlab_next_addr" + " __attribute__((used))"))) + (substitute* (filter file-exists? '("mono/utils/mono-compiler.h")) + (("#define MONO_TLS_FAST ") + "#define MONO_TLS_FAST __attribute__((used)) ")))) + +(define-public mono-1.2.6 + (package + (version "1.2.6") + (name "mono") + (source (origin + (method url-fetch) + (uri (string-append + "http://download.mono-project.com/sources/mono/" + "mono" "-" version ".tar.bz2")) + (sha256 + (base32 "03sn7wyvrjkkkbrqajpmqifxfn83p30qprizpb3m6c5cdhwlzk14")) + (modules '((guix build utils) + (ice-9 string-fun))) + (snippet #~(begin + #$prepare-mono-source + (delete-file + "./mcs/class/System/System.Text.RegularExpressions/BaseMachine.cs") + ;; Can't patch a file with different line endings, + ;; so the patch creates a new one, and we overwrite + ;; the old one here. + (rename-file + "./mcs/class/System/System.Text.RegularExpressions/BaseMachine.cs-2" + "./mcs/class/System/System.Text.RegularExpressions/BaseMachine.cs"))) + (patches + (search-patches "mono-1.2.6-bootstrap.patch")))) + (build-system gnu-build-system) + (native-inputs + (list autoconf + automake + bison + libtool + pnet-git + pnetlib-git + pkg-config)) + (inputs + (list glib + libgc + libx11 + zlib)) + (arguments + (list + #:configure-flags #~(list "--with-gc=boehm") + #:make-flags #~(list (string-append "EXTERNAL_MCS=" + #+(this-package-native-input "pnet-git") + "/bin/cscc") + (string-append "EXTERNAL_RUNTIME=" + #+(this-package-native-input "pnet-git") + "/bin/ilrun") + "CFLAGS+=-DARG_MAX=500" + "CC=gcc" + "V=1") + ;; build fails nondeterministically without this + #:parallel-build? #f + #:phases + #~(modify-phases %standard-phases + (add-after 'unpack 'set-env + (lambda _ ;;* (#:key inputs #:allow-other-keys) + ;; all tests under mcs/class fail trying to access $HOME + (setenv "HOME" "/tmp") + ;; ZIP files have "DOS time" which starts in Jan 1980. + (setenv "SOURCE_DATE_EPOCH" "315532800")))) + ;; System.Object isn't marked as serializable because it causes issues + ;; with compiling with pnet (circular class reference between Object and + ;; SerializableAttribute), and this causes tests to fail + #:tests? #f)) + (native-search-paths + (list (search-path-specification + (variable "MONO_PATH") + (files (list "lib/mono"))))) + (synopsis "Compiler and libraries for the C# programming language") + (description "Mono is a compiler, vm, debugger and set of libraries for +C#, a C-style programming language from Microsoft that is very similar to +Java.") + (home-page "https://www.mono-project.com/") + ;; See ./LICENSE + (license (list + ;; most of mcs/tools, mono/man, most of mcs/class, tests by + ;; default, mono/eglib + license:x11 + ;; mcs/mcs, mcs/gmcs, some of mcs/tools + license:gpl1+ ;; note: ./mcs/LICENSE.GPL specifies no version + ;; mono/mono (the mono VM, I think they meant mono/mini) + license:lgpl2.0+ ;; note: ./mcs/LICENSE.LGPL specifies no version + ;; mcs/jay + license:bsd-4)))) diff --git a/gnu/packages/patches/mono-1.2.6-bootstrap.patch b/gnu/packages/patches/mono-1.2.6-bootstrap.patch new file mode 100644 index 00000000000..0f6efd4a034 --- /dev/null +++ b/gnu/packages/patches/mono-1.2.6-bootstrap.patch @@ -0,0 +1,585 @@ +diff --git a/mcs/class/System/System.Diagnostics/ICollectData.cs b/mcs/class/System/System.Diagnostics/ICollectData.cs +index c52f9871589..c66c1936d3d 100644 +--- a/mcs/class/System/System.Diagnostics/ICollectData.cs ++++ b/mcs/class/System/System.Diagnostics/ICollectData.cs +@@ -41,7 +41,7 @@ namespace System.Diagnostics + #endif + public interface ICollectData { + void CloseData (); +- [return: MarshalAs(UnmanagedType.I4)] ++ //[return: MarshalAs(UnmanagedType.I4)] + void CollectData ( + [In] [MarshalAs(UnmanagedType.I4)] int id, + [In] [MarshalAs(UnmanagedType.SysInt)] IntPtr valueName, +diff --git a/mcs/class/System/System.Diagnostics/LocalFileEventLog.cs b/mcs/class/System/System.Diagnostics/LocalFileEventLog.cs +index 280e6a97227..c41816dca24 100644 +--- a/mcs/class/System/System.Diagnostics/LocalFileEventLog.cs ++++ b/mcs/class/System/System.Diagnostics/LocalFileEventLog.cs +@@ -140,6 +140,30 @@ namespace System.Diagnostics + file_watcher.EnableRaisingEvents = false; + } + ++ void FileCreationWatcher(object o, FileSystemEventArgs e) ++ { ++ lock (this) { ++ if (_notifying) ++ return; ++ _notifying = true; ++ } ++ ++ // Process every new entry in one notification event. ++ try { ++ while (GetLatestIndex () > last_notification_index) { ++ try { ++ CoreEventLog.OnEntryWritten (GetEntry (last_notification_index++)); ++ } catch (Exception ex) { ++ // FIXME: find some proper way to output this error ++ Debug.WriteLine (ex); ++ } ++ } ++ } finally { ++ lock (this) ++ _notifying = false; ++ } ++ } ++ + public override void EnableNotification () + { + if (file_watcher == null) { +@@ -149,28 +173,7 @@ namespace System.Diagnostics + + file_watcher = new FileSystemWatcher (); + file_watcher.Path = logDir; +- file_watcher.Created += delegate (object o, FileSystemEventArgs e) { +- lock (this) { +- if (_notifying) +- return; +- _notifying = true; +- } +- +- // Process every new entry in one notification event. +- try { +- while (GetLatestIndex () > last_notification_index) { +- try { +- CoreEventLog.OnEntryWritten (GetEntry (last_notification_index++)); +- } catch (Exception ex) { +- // FIXME: find some proper way to output this error +- Debug.WriteLine (ex); +- } +- } +- } finally { +- lock (this) +- _notifying = false; +- } +- }; ++ file_watcher.Created += new FileSystemEventHandler(FileCreationWatcher); + } + last_notification_index = GetLatestIndex (); + file_watcher.EnableRaisingEvents = true; +diff --git a/mcs/class/System/System.IO/InotifyWatcher.cs b/mcs/class/System/System.IO/InotifyWatcher.cs +index d8e7acce3a7..7b0907eebc1 100644 +--- a/mcs/class/System/System.IO/InotifyWatcher.cs ++++ b/mcs/class/System/System.IO/InotifyWatcher.cs +@@ -423,19 +423,36 @@ namespace System.IO { + return 16 + len; + } + ++ class ThingEnumerator : IEnumerator, IEnumerable ++ { ++ object thing; ++ int j; ++ public ThingEnumerator(object thing) ++ { this.thing = thing; j = -1; } ++ ++ public IEnumerator GetEnumerator() { return this; } ++ public bool MoveNext() ++ { ++ if(thing == null) { return false; } ++ if(thing is ArrayList) ++ { ++ ArrayList list = (ArrayList) thing; ++ if(j+1 >= list.Count) { return false; } ++ j++; ++ return true; ++ } ++ if(j == -1) { j = 0; return true; } ++ return false; ++ } ++ public void Reset() { j = -1; } ++ public object Current ++ { get { if(thing is ArrayList) return ((ArrayList)thing)[j]; ++ return thing; }} ++ } ++ + static IEnumerable GetEnumerator (object source) + { +- if (source == null) +- yield break; +- +- if (source is InotifyData) +- yield return source; +- +- if (source is ArrayList) { +- ArrayList list = (ArrayList) source; +- for (int i = 0; i < list.Count; i++) +- yield return list [i]; +- } ++ return new ThingEnumerator(source); + } + + /* Interesting events: +diff --git a/mcs/class/System/System.Net/ServicePoint.cs b/mcs/class/System/System.Net/ServicePoint.cs +index a884d90f507..e1c73b098c2 100644 +--- a/mcs/class/System/System.Net/ServicePoint.cs ++++ b/mcs/class/System/System.Net/ServicePoint.cs +@@ -137,7 +137,7 @@ namespace System.Net + get { + return idleSince; + } +- internal set { ++ set { + lock (locker) + idleSince = value; + } +diff --git a/mcs/class/System/System.Text.RegularExpressions/BaseMachine.cs-2 b/mcs/class/System/System.Text.RegularExpressions/BaseMachine.cs-2 +new file mode 100644 +index 00000000000..a685e2679b7 +--- /dev/null ++++ b/mcs/class/System/System.Text.RegularExpressions/BaseMachine.cs-2 +@@ -0,0 +1,168 @@ ++// ++// BaseMachine.jvm.cs ++// ++// Author: ++// author: Dan Lewis (dlewis@gmx.co.uk) ++// (c) 2002 ++// Copyright (C) 2005 Novell, Inc (http://www.novell.com) ++// ++ ++// ++// Permission is hereby granted, free of charge, to any person obtaining ++// a copy of this software and associated documentation files (the ++// "Software"), to deal in the Software without restriction, including ++// without limitation the rights to use, copy, modify, merge, publish, ++// distribute, sublicense, and/or sell copies of the Software, and to ++// permit persons to whom the Software is furnished to do so, subject to ++// the following conditions: ++// ++// The above copyright notice and this permission notice shall be ++// included in all copies or substantial portions of the Software. ++// ++// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, ++// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF ++// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND ++// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE ++// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION ++// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION ++// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ++// ++ ++using System; ++using System.Collections; ++using System.Collections.Specialized; ++ ++namespace System.Text.RegularExpressions ++{ ++ abstract class BaseMachine : IMachine ++ { ++ internal delegate void MatchAppendEvaluator (Match match, StringBuilder sb); ++ ++ public virtual string Replace (Regex regex, string input, string replacement, int count, int startat) ++ { ++ ReplacementEvaluator ev = new ReplacementEvaluator (regex, replacement); ++ if (regex.RightToLeft) ++ return RTLReplace (regex, input, new MatchEvaluator (ev.Evaluate), count, startat); ++ else ++ return LTRReplace (regex, input, new MatchAppendEvaluator (ev.EvaluateAppend), count, startat); ++ } ++ ++ virtual public string [] Split (Regex regex, string input, int count, int startat) ++ { ++ ArrayList splits = new ArrayList (); ++ if (count == 0) ++ count = Int32.MaxValue; ++ ++ int ptr = startat; ++ Match m = null; ++ while (--count > 0) { ++ if (m != null) ++ m = m.NextMatch (); ++ else ++ m = regex.Match (input, ptr); ++ ++ if (!m.Success) ++ break; ++ ++ if (regex.RightToLeft) ++ splits.Add (input.Substring (m.Index + m.Length, ptr - m.Index - m.Length)); ++ else ++ splits.Add (input.Substring (ptr, m.Index - ptr)); ++ ++ int gcount = m.Groups.Count; ++ for (int gindex = 1; gindex < gcount; gindex++) { ++ Group grp = m.Groups [gindex]; ++ splits.Add (input.Substring (grp.Index, grp.Length)); ++ } ++ ++ if (regex.RightToLeft) ++ ptr = m.Index; ++ else ++ ptr = m.Index + m.Length; ++ ++ } ++ ++ if (regex.RightToLeft && ptr >= 0) ++ splits.Add (input.Substring (0, ptr)); ++ if (!regex.RightToLeft && ptr <= input.Length) ++ splits.Add (input.Substring (ptr)); ++ ++ return (string []) splits.ToArray (typeof (string)); ++ } ++ ++ virtual public Match Scan (Regex regex, string text, int start, int end) ++ { ++ throw new NotImplementedException ("Scan method must be implemented in derived classes"); ++ } ++ ++ virtual public string Result (string replacement, Match match) ++ { ++ return ReplacementEvaluator.Evaluate (replacement, match); ++ } ++ ++ internal static string LTRReplace (Regex regex, string input, MatchAppendEvaluator evaluator, int count, int startat) ++ { ++ Match m = regex.Match (input, startat); ++ if (!m.Success) ++ return input; ++ ++ StringBuilder result = new StringBuilder (); ++ int ptr = startat; ++ int counter = count; ++ ++ result.Append (input, 0, ptr); ++ ++ do { ++ if (count != -1) ++ if (counter-- <= 0) ++ break; ++ if (m.Index < ptr) ++ throw new SystemException ("how"); ++ result.Append (input, ptr, m.Index - ptr); ++ evaluator (m, result); ++ ++ ptr = m.Index + m.Length; ++ m = m.NextMatch (); ++ } while (m.Success); ++ ++ result.Append (input, ptr, input.Length - ptr); ++ ++ return result.ToString (); ++ } ++ ++ internal static string RTLReplace (Regex regex, string input, MatchEvaluator evaluator, int count, int startat) ++ { ++ Match m = regex.Match (input, startat); ++ if (!m.Success) ++ return input; ++ ++ int ptr = startat; ++ int counter = count; ++ StringCollection pieces = new StringCollection (); ++ pieces.Add (input.Substring (ptr)); ++ ++ do { ++ if (count != -1) ++ if (counter-- <= 0) ++ break; ++ if (m.Index + m.Length > ptr) ++ throw new SystemException ("how"); ++ pieces.Add (input.Substring (m.Index + m.Length, ptr - m.Index - m.Length)); ++ pieces.Add (evaluator (m)); ++ ++ ptr = m.Index; ++ m = m.NextMatch (); ++ } while (m.Success); ++ ++ StringBuilder result = new StringBuilder (); ++ ++ result.Append (input, 0, ptr); ++ for (int i = pieces.Count; i > 0; ) ++ result.Append (pieces [--i]); ++ ++ pieces.Clear (); ++ ++ return result.ToString (); ++ } ++ } ++} +diff --git a/mcs/class/corlib/System.Runtime.Remoting.Messaging/MethodCall.cs b/mcs/class/corlib/System.Runtime.Remoting.Messaging/MethodCall.cs +index 94069d1727e..042574178fa 100644 +--- a/mcs/class/corlib/System.Runtime.Remoting.Messaging/MethodCall.cs ++++ b/mcs/class/corlib/System.Runtime.Remoting.Messaging/MethodCall.cs +@@ -272,6 +272,10 @@ namespace System.Runtime.Remoting.Messaging { + set { _uri = value; } + } + ++ string IMethodMessage.Uri { ++ get { return Uri; } ++ } ++ + string IInternalMessage.Uri { + get { return Uri; } + set { Uri = value; } +diff --git a/mcs/class/corlib/System.Runtime.Remoting.Messaging/MethodResponse.cs b/mcs/class/corlib/System.Runtime.Remoting.Messaging/MethodResponse.cs +index 1b1eab014b3..575e7e37dee 100644 +--- a/mcs/class/corlib/System.Runtime.Remoting.Messaging/MethodResponse.cs ++++ b/mcs/class/corlib/System.Runtime.Remoting.Messaging/MethodResponse.cs +@@ -272,6 +272,10 @@ namespace System.Runtime.Remoting.Messaging { + } + } + ++ string IMethodMessage.Uri { ++ get { return Uri; } ++ } ++ + string IInternalMessage.Uri { + get { return Uri; } + set { Uri = value; } +diff --git a/mcs/class/corlib/System.Runtime.Remoting.Messaging/ReturnMessage.cs b/mcs/class/corlib/System.Runtime.Remoting.Messaging/ReturnMessage.cs +index aee39f5bb81..ec09b73c15d 100644 +--- a/mcs/class/corlib/System.Runtime.Remoting.Messaging/ReturnMessage.cs ++++ b/mcs/class/corlib/System.Runtime.Remoting.Messaging/ReturnMessage.cs +@@ -166,6 +166,10 @@ namespace System.Runtime.Remoting.Messaging + } + } + ++ string IMethodMessage.Uri { ++ get { return Uri; } ++ } ++ + string IInternalMessage.Uri { + get { return Uri; } + set { Uri = value; } +diff --git a/mcs/class/corlib/System/MulticastDelegate.cs b/mcs/class/corlib/System/MulticastDelegate.cs +index b36aff33492..cf9134a33b3 100644 +--- a/mcs/class/corlib/System/MulticastDelegate.cs ++++ b/mcs/class/corlib/System/MulticastDelegate.cs +@@ -262,16 +262,16 @@ namespace System + + public static bool operator == (MulticastDelegate a, MulticastDelegate b) + { +- if (a == null) +- return b == null; ++ if ((object)a == null) ++ return (object)b == null; + + return a.Equals (b); + } + + public static bool operator != (MulticastDelegate a, MulticastDelegate b) + { +- if (a == null) +- return b != null; ++ if ((object)a == null) ++ return (object)b != null; + + return !a.Equals (b); + } +diff --git a/mcs/class/corlib/System/Object.cs b/mcs/class/corlib/System/Object.cs +index 6b0a03d2a31..694cbd454e1 100644 +--- a/mcs/class/corlib/System/Object.cs ++++ b/mcs/class/corlib/System/Object.cs +@@ -40,7 +40,7 @@ using System.Runtime.ConstrainedExecution; + + namespace System { + +- [Serializable] ++ //[Serializable] + [ClassInterface (ClassInterfaceType.AutoDual)] + #if NET_2_0 + [ComVisible (true)] +@@ -47,6 +47,12 @@ + #endif + public class Object { + ++ // Default definition of the object finalizer. ++ #if NET_2_0 ++ [ReliabilityContractAttribute (Consistency.WillNotCorruptState, Cer.Success)] ++ #endif ++ protected virtual void Finalize() {} ++ + // + // Compares this object to the specified object. + // Returns true if they are equal, false otherwise. +@@ -80,16 +86,6 @@ namespace System { + { + } + +- // +- // Object destructor. +- // +-#if NET_2_0 +- [ReliabilityContractAttribute (Consistency.WillNotCorruptState, Cer.Success)] +-#endif +- ~Object () +- { +- } +- + // + // Returns a hashcode for this object. Each derived + // class should return a hash code that makes sense +diff --git a/mcs/mcs/codegen.cs b/mcs/mcs/codegen.cs +index c94a61772f4..8546d671ec6 100644 +--- a/mcs/mcs/codegen.cs ++++ b/mcs/mcs/codegen.cs +@@ -498,7 +498,7 @@ namespace Mono.CSharp { + + // utility helper for CheckExpr, UnCheckExpr, Checked and Unchecked statements + // it's public so that we can use a struct at the callsite +- public struct FlagsHandle : IDisposable ++ public class FlagsHandle : IDisposable + { + EmitContext ec; + readonly Flags invmask, oldval; +diff --git a/mcs/mcs/typemanager.cs b/mcs/mcs/typemanager.cs +index 1e173de89d2..58477af41a3 100644 +--- a/mcs/mcs/typemanager.cs ++++ b/mcs/mcs/typemanager.cs +@@ -629,18 +629,42 @@ namespace Mono.CSharp { + return CSharpName (GetFullName (t)); + } + ++ static bool StartsWithWord(string haystack, string check) ++ { ++ if(String.Compare(haystack, 0, check, 0, check.Length, false) != 0) ++ { return false; } ++ if(check.Length == haystack.Length) { return true; } ++ char c = haystack[check.Length]; ++ return !(Char.IsLetter(c) || Char.IsDigit(c)); ++ } ++ + public static string CSharpName (string name) + { + if (name.StartsWith (AnonymousTypeClass.ClassNamePrefix)) + return AnonymousTypeClass.SignatureForError; +- +- return Regex.Replace (name, +- @"^System\." + +- @"(Int32|UInt32|Int16|UInt16|Int64|UInt64|" + +- @"Single|Double|Char|Decimal|Byte|SByte|Object|" + +- @"Boolean|String|Void|Null)" + +- @"(\W+|\b)", +- new MatchEvaluator (CSharpNameMatch)).Replace ('+', '.'); ++ ++ int l = "System.".Length; ++ if(name.StartsWith("System.") && name.Length > l) ++ { ++ string s2 = name.Substring(l).ToLower(); ++ if(StartsWithWord(s2, "int32")) ++ return "int"; ++ if(StartsWithWord(s2, "uint32")) ++ return "uint"; ++ if(StartsWithWord(s2, "int16")) ++ return "short"; ++ if(StartsWithWord(s2, "uint16")) ++ return "ushort"; ++ if(StartsWithWord(s2, "int64")) ++ return "long"; ++ if(StartsWithWord(s2, "uint64")) ++ return "ulong"; ++ if(StartsWithWord(s2, "single")) ++ return "float"; ++ if(StartsWithWord(s2, "boolean")) ++ return "bool"; ++ } ++ return name; + } + + static public string CSharpName (Type[] types) +@@ -654,21 +678,6 @@ namespace Mono.CSharp { + return sb.ToString (); + } + +- static String CSharpNameMatch (Match match) +- { +- string s = match.Groups [1].Captures [0].Value; +- return s.ToLower (). +- Replace ("int32", "int"). +- Replace ("uint32", "uint"). +- Replace ("int16", "short"). +- Replace ("uint16", "ushort"). +- Replace ("int64", "long"). +- Replace ("uint64", "ulong"). +- Replace ("single", "float"). +- Replace ("boolean", "bool") +- + match.Groups [2].Captures [0].Value; +- } +- + // Used for error reporting to show symbolic name instead of underlying value + public static string CSharpEnumValue (Type t, object value) + { +diff --git a/mono/io-layer/processes.c b/mono/io-layer/processes.c +index cd6176cdda2..486087d3a1b 100644 +--- a/mono/io-layer/processes.c ++++ b/mono/io-layer/processes.c +@@ -15,6 +15,7 @@ + #include + #include + #include ++#include + #include + #include + #include +diff --git a/mono/metadata/Makefile.am b/mono/metadata/Makefile.am +index 6ff2368895b..b8ba66e8756 100644 +--- a/mono/metadata/Makefile.am ++++ b/mono/metadata/Makefile.am +@@ -154,7 +154,6 @@ libmonoruntimeinclude_HEADERS = \ + object.h \ + exception.h \ + profiler.h \ +- appdomain.h \ + mono-config.h \ + debug-helpers.h \ + mempool.h +diff --git a/mono/metadata/class.c b/mono/metadata/class.c +index f13f37632fe..128710337f4 100644 +--- a/mono/metadata/class.c ++++ b/mono/metadata/class.c +@@ -2695,10 +2695,10 @@ initialize_object_slots (MonoClass *class) + finalize_slot = i; + } + +- g_assert (ghc_slot > 0); ++ g_assert (ghc_slot >= 0); + default_ghc = class->vtable [ghc_slot]; + +- g_assert (finalize_slot > 0); ++ g_assert (finalize_slot >= 0); + default_finalize = class->vtable [finalize_slot]; + } + } +diff --git a/mono/metadata/object.c b/mono/metadata/object.c +index 2b6f4909b34..ef4c8fd8b44 100644 +--- a/mono/metadata/object.c ++++ b/mono/metadata/object.c +@@ -861,7 +861,7 @@ mono_class_compute_gc_descriptor (MonoClass *class) + mono_register_jit_icall (GC_local_gcj_fast_malloc, "GC_local_gcj_fast_malloc", mono_create_icall_signature ("object int ptr"), FALSE); + #endif + mono_register_jit_icall (GC_gcj_malloc, "GC_gcj_malloc", mono_create_icall_signature ("object int ptr"), FALSE); +- mono_register_jit_icall (GC_gcj_fast_malloc, "GC_gcj_fast_malloc", mono_create_icall_signature ("object int ptr"), FALSE); ++ mono_register_jit_icall (GC_gcj_malloc, "GC_gcj_fast_malloc", mono_create_icall_signature ("object int ptr"), FALSE); + #endif + gcj_inited = TRUE; + mono_loader_unlock (); +diff --git a/runtime/Makefile.am b/runtime/Makefile.am +index 779787b3ce3..b67957dcf16 100644 +--- a/runtime/Makefile.am ++++ b/runtime/Makefile.am +@@ -1,6 +1,3 @@ +-# hack to prevent 'check' from depending on 'all' +-AUTOMAKE_OPTIONS = cygnus +- + tmpinst = _tmpinst + + noinst_SCRIPTS = mono-wrapper monodis-wrapper semdel-wrapper -- Efraim Flashner אפרים פלשנר GPG key = A28B F40C 3E55 1372 662D 14F7 41AA E7DC CA3D 8351 Confidentiality cannot be guaranteed on emails sent or received unencrypted From debbugs-submit-bounces@debbugs.gnu.org Mon Dec 16 12:28:34 2024 Received: (at 74609) by debbugs.gnu.org; 16 Dec 2024 17:28:34 +0000 Received: from localhost ([127.0.0.1]:55848 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1tNEtU-0006G7-Rt for submit@debbugs.gnu.org; Mon, 16 Dec 2024 12:28:34 -0500 Received: from mail-wm1-f41.google.com ([209.85.128.41]:45187) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1tNEtO-0006Eu-Ig for 74609@debbugs.gnu.org; Mon, 16 Dec 2024 12:28:27 -0500 Received: by mail-wm1-f41.google.com with SMTP id 5b1f17b1804b1-435f8f29f8aso31616595e9.2 for <74609@debbugs.gnu.org>; Mon, 16 Dec 2024 09:28:26 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1734370041; x=1734974841; darn=debbugs.gnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:sender:from:to:cc:subject:date :message-id:reply-to; bh=1LRTpsnEjbxWhJgkweUq9QRwqVNZe2/R3tW0YJ0mmO4=; b=gp9i0OJVNq8FCAeKyGOjUAEI67q+Ca3u/p8AwXUUJ4Enz8cAtYN3F5iJ9sr0Idzvi8 KFRarM1qLvWf32vEhy2NJ180Q/4SIL5C/74E/ZZ9MHHdKuQMmeb7gkX1MvRYizoYmvTS LLqQBwWSMX/P5Ix9+ewkEQFMzGRBzMMkpg6wg8CSAllWCGGa3DnwtwmkjXrIKCcFfn9t NFM73TjHDfwNk0AmQJ7+cSRJUJAlUVpvvGMMaVxZIEJ25HRhX0FOb4snwWU5VJ6I/q2A SxQwTlH0Cl1+LHX7K4qcUXb4USII/BHHNUebaRuTAg7xGOPFZRT6harkwfretOFW7r5w +VQg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1734370041; x=1734974841; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:sender:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=1LRTpsnEjbxWhJgkweUq9QRwqVNZe2/R3tW0YJ0mmO4=; b=VAadv56EuhhIY9eGeGn37gDX8sZrBbyhyshE6bqvKeTNJwVpzPUuE9O3OoqszrS2iD r97MwB+OD3FMXHdhhqR131+uSdVuEWMJcQfNrzQiu8In6U/5+sglfJLfk6Qc5zhdBoHe MjezZHxlftaDtrAr5VcHIi/uSB0+o1owgMFOmOez0jQcxPOUdOZxXreFBQ5kD+shd1tv Q7JVzdoDyYb01/K1TXeBkUTfHwCnbgumPrgnJ0MH2OpvROxXlUaRmNItxaiNElrKVIBn CSl7KRXOuFAIQftweq6c/lGYPIqyTrpe99NkYY6dcLTkw9Hajv26ZKyjoUzaVehIXYZf LqpQ== X-Gm-Message-State: AOJu0YwLg2J14niyTi6peNKF8/MrUxP0fagCJ92/bKicO9LEv5Fu3Q3N /kv+zFg20uggkBNMvQWtv07Br1XglnGRslDd0J0Lu513er8wQEAO4JZ+SMUt X-Gm-Gg: ASbGncuTBd332ao418WMEA+LoZJ16grdyRFFs8Y1CDTYyM+ljQwIYCJfUXi234GacHP KxBARO4Jbalub6v8pb1AFWzPmZ6+cMsgwhXaVTOCLt5cLRtz31AiR0i6hXX1784N0z3Byg3YDAZ hOGRhXAi+eVQVaP7kzOL1gFi0+C91dLN7KHPycEt08cHZz4sw7m85hIerOGx8fXYvmCSvYxjZFY x5iWUNMuWyqLqcHJ3nRRX6kpHPdgC1Y27ctCy4p5aDLVzpahvPv8SG8X+g7oQ== X-Google-Smtp-Source: AGHT+IHAaMAQhy3SKnojaO49AiHPmR6xjl5peHuP2fdKPeL573/Nt/bIYUudywSCwxwyKP50QOqCsg== X-Received: by 2002:a5d:598c:0:b0:386:4a60:6650 with SMTP id ffacd0b85a97d-388da5add16mr311167f8f.42.1734370040724; Mon, 16 Dec 2024 09:27:20 -0800 (PST) Received: from localhost ([31.210.180.118]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-388c8012081sm8678600f8f.19.2024.12.16.09.27.20 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 16 Dec 2024 09:27:20 -0800 (PST) From: Efraim Flashner To: 74609@debbugs.gnu.org Subject: [PATCH 06/21] gnu: Add mono-2.4.2. Date: Mon, 16 Dec 2024 19:26:29 +0200 Message-ID: <8a4501f8b0ab760662cac843d78c9975b8040b82.1734369314.git.efraim@flashner.co.il> X-Mailer: git-send-email 2.46.0 In-Reply-To: References: MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Spam-Score: 0.3 (/) X-Debbugs-Envelope-To: 74609 Cc: aaron.covrig.us@ieee.org, ludo@gnu.org, unmush , richard@freakingpenguin.com, unmush@proton.me, janneke@gnu.org 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: -0.7 (/) From: unmush * gnu/packages/dotnet.scm (mono-2.4.2): New variable. * gnu/packages/patches/mono-2.4.2.3-fixes.patch: New patch. * gnu/local.mk (dist_patch_DATA): Register it. Change-Id: I14ff01d5fb3c3f23c83f8518990a79329490d3b9 --- gnu/local.mk | 1 + gnu/packages/dotnet.scm | 53 +++++++++++++++++ gnu/packages/patches/mono-2.4.2.3-fixes.patch | 59 +++++++++++++++++++ 3 files changed, 113 insertions(+) create mode 100644 gnu/packages/patches/mono-2.4.2.3-fixes.patch diff --git a/gnu/local.mk b/gnu/local.mk index 38e98386d20..a46dd1d1999 100644 --- a/gnu/local.mk +++ b/gnu/local.mk @@ -1821,6 +1821,7 @@ dist_patch_DATA = \ %D%/packages/patches/mono-1.2.6-bootstrap.patch \ %D%/packages/patches/mono-1.9.1-add-MONO_CREATE_IMAGE_VERSION.patch \ %D%/packages/patches/mono-1.9.1-fixes.patch \ + %D%/packages/patches/mono-2.4.2.3-fixes.patch \ %D%/packages/patches/mosaicatcher-unbundle-htslib.patch \ %D%/packages/patches/mrrescue-support-love-11.patch \ %D%/packages/patches/mtools-mformat-uninitialized.patch \ diff --git a/gnu/packages/dotnet.scm b/gnu/packages/dotnet.scm index 3a3bcb3c940..ab91f590992 100644 --- a/gnu/packages/dotnet.scm +++ b/gnu/packages/dotnet.scm @@ -421,3 +421,56 @@ (define-public mono-1.9.1 (patch-shebang "mono/tests/test-driver"))))) ((#:tests? _ #f) #f) ((#:parallel-tests? _ #f) #f))))) + +(define-public mono-2.4.2 + (package + (inherit mono-1.9.1) + (version "2.4.2.3") + (name "mono") + (source (origin + (method git-fetch) + (uri + (git-reference + (url "https://gitlab.winehq.org/mono/mono.git") + (commit (string-append "mono-" "2-4-2-3")))) + (file-name (git-file-name name version)) + (sha256 + (base32 + "0mnrk17rd9c5rh30dh82a39c9ak1ns998b41ivprvy7m068skpda")) + (modules '((guix build utils) + (ice-9 string-fun))) + (snippet prepare-mono-source) + (patches + (search-patches "mono-2.4.2.3-fixes.patch")))) + (native-inputs (modify-inputs (package-native-inputs mono-1.9.1) + (replace "mono" mono-1.9.1))) + (inputs (modify-inputs (package-inputs mono-1.9.1) + (append gettext-minimal))) + (arguments + (substitute-keyword-arguments (package-arguments mono-1.9.1) + ((#:tests? _ #f) + ;; When it tries building iltests.il in mono/mini, it gets: error + ;; CS0006: cannot find metadata file `TestDriver.dll'. It builds fine + ;; outside of the build environment, but later tests fail, and I can't + ;; be bothered to figure out what's causing ilasm to not find + ;; TestDriver.dll. + #f) + ((#:parallel-build? _) #t) + ((#:phases phases #~%standard-phases) + #~(modify-phases #$phases + (add-before 'bootstrap 'patch-sub-autogen.sh-shebang + (lambda _ + (patch-shebang "./eglib/autogen.sh"))))))) + (license (list + ;; most of mcs/tools, mono/man, most of mcs/class, tests by + ;; default, mono/eglib + ;; mcs/mcs, mcs/gmcs (dual-licensed GPL) + ;; samples + license:x11 + ;; mcs/mcs, mcs/gmcs (dual-licensed X11) + ;; some of mcs/tools + license:gpl1+ ;; note: ./mcs/LICENSE.GPL specifies no version + ;; mono/mono (the mono VM, I think they meant mono/mini) + license:lgpl2.0+ ;; note: ./mcs/LICENSE.LGPL specifies no version + ;; mcs/jay + license:bsd-4)))) diff --git a/gnu/packages/patches/mono-2.4.2.3-fixes.patch b/gnu/packages/patches/mono-2.4.2.3-fixes.patch new file mode 100644 index 00000000000..13cff774506 --- /dev/null +++ b/gnu/packages/patches/mono-2.4.2.3-fixes.patch @@ -0,0 +1,59 @@ +diff --git a/data/mono.pc.in b/data/mono.pc.in +index 6da0960db2d..d43bb187218 100644 +--- a/data/mono.pc.in ++++ b/data/mono.pc.in +@@ -7,6 +7,6 @@ sysconfdir=@sysconfdir@ + Name: Mono + Description: Mono Runtime + Version: @VERSION@ +-Requires: glib-2.0 gthread-2.0 ++Requires: glib-2.0 gthread-2.0 bdw-gc + Libs: -L${libdir} @export_ldflags@ -lmono @libmono_ldflags@ + Cflags: -I${includedir} @libmono_cflags@ +diff --git a/mono-uninstalled.pc.in b/mono-uninstalled.pc.in +index 7fa3f12dc91..2a0734362fd 100644 +--- a/mono-uninstalled.pc.in ++++ b/mono-uninstalled.pc.in +@@ -1,6 +1,6 @@ + Name: Mono + Description: Mono Runtime + Version: @VERSION@ +-Requires: glib-2.0 gthread-2.0 ++Requires: glib-2.0 gthread-2.0 bdw-gc + Libs: -L@mono_build_root@/mono/mini/.libs @export_ldflags@ -lmono @libmono_ldflags@ + Cflags: -I@abs_top_srcdir@ -I@abs_top_srcdir@/mono @libmono_cflags@ +diff --git a/mono/metadata/Makefile.am b/mono/metadata/Makefile.am +index 83f8532369b..3fca7fc13b9 100644 +--- a/mono/metadata/Makefile.am ++++ b/mono/metadata/Makefile.am +@@ -171,7 +171,6 @@ libmonoruntimeinclude_HEADERS = \ + object.h \ + exception.h \ + profiler.h \ +- appdomain.h \ + mono-config.h \ + debug-helpers.h \ + mempool.h +diff --git a/mono/mini/driver.c b/mono/mini/driver.c +index 48ca2d96899..9fb3512200b 100644 +--- a/mono/mini/driver.c ++++ b/mono/mini/driver.c +@@ -1236,6 +1236,7 @@ mono_main (int argc, char* argv[]) + #endif + if (!g_thread_supported ()) + g_thread_init (NULL); ++ GC_allow_register_threads(); + + if (mono_running_on_valgrind () && getenv ("MONO_VALGRIND_LEAK_CHECK")) { + GMemVTable mem_vtable; +diff --git a/runtime/Makefile.am b/runtime/Makefile.am +index 0e876e2a491..b9cd0a99d9e 100644 +--- a/runtime/Makefile.am ++++ b/runtime/Makefile.am +@@ -1,6 +1,3 @@ +-# hack to prevent 'check' from depending on 'all' +-AUTOMAKE_OPTIONS = cygnus +- + tmpinst = _tmpinst + + noinst_SCRIPTS = mono-wrapper monodis-wrapper -- Efraim Flashner אפרים פלשנר GPG key = A28B F40C 3E55 1372 662D 14F7 41AA E7DC CA3D 8351 Confidentiality cannot be guaranteed on emails sent or received unencrypted From debbugs-submit-bounces@debbugs.gnu.org Mon Dec 16 12:28:35 2024 Received: (at 74609) by debbugs.gnu.org; 16 Dec 2024 17:28:35 +0000 Received: from localhost ([127.0.0.1]:55852 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1tNEtW-0006GU-Ih for submit@debbugs.gnu.org; Mon, 16 Dec 2024 12:28:35 -0500 Received: from mail-wr1-f46.google.com ([209.85.221.46]:53331) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1tNEtQ-0006F9-Jl for 74609@debbugs.gnu.org; Mon, 16 Dec 2024 12:28:29 -0500 Received: by mail-wr1-f46.google.com with SMTP id ffacd0b85a97d-38633b5dbcfso4816346f8f.2 for <74609@debbugs.gnu.org>; Mon, 16 Dec 2024 09:28:28 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1734370043; x=1734974843; darn=debbugs.gnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:sender:from:to:cc:subject:date :message-id:reply-to; bh=Lyj804Kumg89zKoNnoPL6M7hyzm3jGfIRXvwYAekaKY=; b=bwZlvPLNa7iWew2OHmI1hqthue1ZrB6VxgXdAWTEntGCP2Kzf+HA1qt3wnsNHtdkIM X4rAO2iYSyrvfJZeQpNK31QNTVQLEXEDdr1RcVlIrsTMrlYNX6OylJA+4RtcK2VHJ57b Q7KZzCrfb5SMp8W8aHDsNcSkyWTbsLTkHsJvZvyFhdCm+AyQiffpqG4BGcJ/0berZrCy +yN2GZ9a9fU6/fOufJSfvtlf1aWaYEUYqdioYBRBnlkRv/fVH76/Ig7tg4iHW8rR6AOv AfYnwj+jgUVJTQcaGgtXF/jXwXIyn+BHtJjtQR5SrWzKRN2lGlb3rqInv15tNA1LwDw+ VauA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1734370043; x=1734974843; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:sender:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=Lyj804Kumg89zKoNnoPL6M7hyzm3jGfIRXvwYAekaKY=; b=L7Stn8wdsvKehINWIy7vZxcLju9uyt1RkfEb2SqjvBU60uyYE4uwD7kCdfpLGJNZZ+ vE8Ivn3iWWiLNMG7u4e7vLs4PYH4dy9zy0Ux57aUUyHCO1vmqc0HJhICN4i/7k0vajBK Wes2iv0xWmc81DyEFFXc7B330VApuok4Mp1v2x6Djd3GwFGMR6LwZTEuy6xCUyARvYBF d+PVEv6e4NVj/AlwTX83EoKr28hrhrrmO0yc3UX7YsEeeQvlPqzhs1fnyJBaYdFRV+yD opnwx+9uaDGt8FYKuUIzNvBYKSvNkNU1ALym4UrXdONuzTS4oauXN2y3K+5rd3Wb5LeI geRQ== X-Gm-Message-State: AOJu0YxrL5yK/Acm97Su+gSrovGjLIJpFbypLf/uWB4nj7HnRUPjQ0+L TNI0bus+PBKlCTHbhXoWXg1qQc5nsqQDxLbMRDjay35LQ1tmd4XRsirZRbNa X-Gm-Gg: ASbGnctT2qXF56szPrqqg7C2zYucYGMV34mhgNiYxn4QLOrPnRSy5VAvdAyJTDgAHnv WCBghwlVSwxi/xNIcubYWzPQ7MEvt2bykOOeGZuZf9iV/QCsZ0PgO00q+5WqaRJ0iUCX1V2FxHH fIGIjmorZ46KrPaQE5Zf1AucI2aKnVu2Gzifn2bM+HNaECyTjW7LYctImf6MF9YOd0qOJB0LZPA ir3arCELU79nUba73HfND2RzdtaA6xdZOlw5JHg9TLLj6g3o5b1ZkanB6cVZw== X-Google-Smtp-Source: AGHT+IEvmxmHcbSmXAX4nzZRq0zWqp8G8cABgBTvzoKp3EPZUV4coBfIaLtPbCwzcNChacixJ8Kuwg== X-Received: by 2002:a5d:5f50:0:b0:382:3959:f429 with SMTP id ffacd0b85a97d-38880ac5f31mr12786548f8f.5.1734370042867; Mon, 16 Dec 2024 09:27:22 -0800 (PST) Received: from localhost ([31.210.180.118]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-388c805d489sm8791902f8f.88.2024.12.16.09.27.22 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 16 Dec 2024 09:27:22 -0800 (PST) From: Efraim Flashner To: 74609@debbugs.gnu.org Subject: [PATCH 07/21] gnu: Add mono-2.6.4. Date: Mon, 16 Dec 2024 19:26:30 +0200 Message-ID: <1c712f7b2f262a06526dedffec28dbb2362c31de.1734369314.git.efraim@flashner.co.il> X-Mailer: git-send-email 2.46.0 In-Reply-To: References: MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Spam-Score: 0.3 (/) X-Debbugs-Envelope-To: 74609 Cc: aaron.covrig.us@ieee.org, ludo@gnu.org, unmush , richard@freakingpenguin.com, unmush@proton.me, janneke@gnu.org 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: -0.7 (/) From: unmush * gnu/dotnet.scm (mono-2.6.4): New variable. * gnu/packages/patches/mono-2.6.4-fixes.patch: New patch. * gnu/local.mk (dist_patch_DATA): Register it. Change-Id: I66e9bb2e12ca6f47b4cd827822db5bee93b64dfe --- gnu/local.mk | 1 + gnu/packages/dotnet.scm | 23 ++++++++++ gnu/packages/patches/mono-2.6.4-fixes.patch | 49 +++++++++++++++++++++ 3 files changed, 73 insertions(+) create mode 100644 gnu/packages/patches/mono-2.6.4-fixes.patch diff --git a/gnu/local.mk b/gnu/local.mk index a46dd1d1999..43ccab199dc 100644 --- a/gnu/local.mk +++ b/gnu/local.mk @@ -1822,6 +1822,7 @@ dist_patch_DATA = \ %D%/packages/patches/mono-1.9.1-add-MONO_CREATE_IMAGE_VERSION.patch \ %D%/packages/patches/mono-1.9.1-fixes.patch \ %D%/packages/patches/mono-2.4.2.3-fixes.patch \ + %D%/packages/patches/mono-2.6.4-fixes.patch \ %D%/packages/patches/mosaicatcher-unbundle-htslib.patch \ %D%/packages/patches/mrrescue-support-love-11.patch \ %D%/packages/patches/mtools-mformat-uninitialized.patch \ diff --git a/gnu/packages/dotnet.scm b/gnu/packages/dotnet.scm index ab91f590992..6304a38bb74 100644 --- a/gnu/packages/dotnet.scm +++ b/gnu/packages/dotnet.scm @@ -474,3 +474,26 @@ (define-public mono-2.4.2 license:lgpl2.0+ ;; note: ./mcs/LICENSE.LGPL specifies no version ;; mcs/jay license:bsd-4)))) + +(define-public mono-2.6.4 + (package + (inherit mono-2.4.2) + (version "2.6.4") + (name "mono") + (source (origin + (method git-fetch) + (uri + (git-reference + (url "https://gitlab.winehq.org/mono/mono.git") + (commit (string-append "mono-" "2.6.4")))) + (file-name (git-file-name name version)) + (sha256 + (base32 + "17977w45qh8jmfsl4bhi83si4fxd8s3x8b0pxnwdzjv3bqr54c85")) + (modules '((guix build utils) + (ice-9 string-fun))) + (snippet prepare-mono-source) + (patches + (search-patches "mono-2.6.4-fixes.patch")))) + (native-inputs (modify-inputs (package-native-inputs mono-2.4.2) + (replace "mono" mono-2.4.2))))) diff --git a/gnu/packages/patches/mono-2.6.4-fixes.patch b/gnu/packages/patches/mono-2.6.4-fixes.patch new file mode 100644 index 00000000000..e802c8bb7e4 --- /dev/null +++ b/gnu/packages/patches/mono-2.6.4-fixes.patch @@ -0,0 +1,49 @@ +diff --git a/data/mono.pc.in b/data/mono.pc.in +index 01e0a9e5d41..d43bb187218 100644 +--- a/data/mono.pc.in ++++ b/data/mono.pc.in +@@ -7,8 +7,6 @@ sysconfdir=@sysconfdir@ + Name: Mono + Description: Mono Runtime + Version: @VERSION@ +-## Commented out because SLE hides devel files in the SLE SDK, +-## which not all customers will have. +-#Requires: glib-2.0 gthread-2.0 ++Requires: glib-2.0 gthread-2.0 bdw-gc + Libs: -L${libdir} @export_ldflags@ -lmono @libmono_ldflags@ + Cflags: -I${includedir} @libmono_cflags@ +diff --git a/mono-uninstalled.pc.in b/mono-uninstalled.pc.in +index 7fa3f12dc91..2a0734362fd 100644 +--- a/mono-uninstalled.pc.in ++++ b/mono-uninstalled.pc.in +@@ -1,6 +1,6 @@ + Name: Mono + Description: Mono Runtime + Version: @VERSION@ +-Requires: glib-2.0 gthread-2.0 ++Requires: glib-2.0 gthread-2.0 bdw-gc + Libs: -L@mono_build_root@/mono/mini/.libs @export_ldflags@ -lmono @libmono_ldflags@ + Cflags: -I@abs_top_srcdir@ -I@abs_top_srcdir@/mono @libmono_cflags@ +diff --git a/mono/mini/driver.c b/mono/mini/driver.c +index c4e7f4ccdb3..bb705c0d1fc 100644 +--- a/mono/mini/driver.c ++++ b/mono/mini/driver.c +@@ -1302,6 +1302,7 @@ mono_main (int argc, char* argv[]) + #endif + if (!g_thread_supported ()) + g_thread_init (NULL); ++ GC_allow_register_threads(); + + if (mono_running_on_valgrind () && getenv ("MONO_VALGRIND_LEAK_CHECK")) { + GMemVTable mem_vtable; +diff --git a/runtime/Makefile.am b/runtime/Makefile.am +index da0c0e8671d..9d0deaf182f 100644 +--- a/runtime/Makefile.am ++++ b/runtime/Makefile.am +@@ -1,6 +1,3 @@ +-# hack to prevent 'check' from depending on 'all' +-AUTOMAKE_OPTIONS = cygnus +- + tmpinst = _tmpinst + + noinst_SCRIPTS = mono-wrapper monodis-wrapper -- Efraim Flashner אפרים פלשנר GPG key = A28B F40C 3E55 1372 662D 14F7 41AA E7DC CA3D 8351 Confidentiality cannot be guaranteed on emails sent or received unencrypted From debbugs-submit-bounces@debbugs.gnu.org Mon Dec 16 12:28:40 2024 Received: (at 74609) by debbugs.gnu.org; 16 Dec 2024 17:28:40 +0000 Received: from localhost ([127.0.0.1]:55854 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1tNEtb-0006Gn-Oq for submit@debbugs.gnu.org; Mon, 16 Dec 2024 12:28:40 -0500 Received: from mail-wr1-f45.google.com ([209.85.221.45]:58721) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1tNEtS-0006Fl-6p for 74609@debbugs.gnu.org; Mon, 16 Dec 2024 12:28:31 -0500 Received: by mail-wr1-f45.google.com with SMTP id ffacd0b85a97d-385e3621518so2177848f8f.1 for <74609@debbugs.gnu.org>; Mon, 16 Dec 2024 09:28:30 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1734370049; x=1734974849; darn=debbugs.gnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:sender:from:to:cc:subject:date :message-id:reply-to; bh=zLzB4uRydg78P7hSMrvzg4yjOrco2IFX7wtM+0Vm7p8=; b=nlWMMp5Hr5Q4lX99EpmVmu47QZEBCYkU+eG+94FPTSNCUtsvOt6CFpvZdmcepjfG6m W7kcwIrodNYnIMXBhb0OPKcOFBe7lefmyI/pQCY7w31S2wD/mg8vf/pzQE7bI+beBLpt xrhUgz8vqiyju5MA1+QBf585m/wHNanalVBnZEPgrMF3ucY4FCNY9x31AaC/rxsX+12O /5Pb8+pfO7HCSOHwucx7jKjJFlLWmOmQe/2A9rh4dZDBh4ldiKnAkafkbPYYX0TXrVYt D5UNDat+PFqdYTpFE0DpyK+fb4Ghfzn3cTPS2J6bpMJZWJ31DosmJdlAFaDN1yGb3yqN r/tA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1734370049; x=1734974849; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:sender:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=zLzB4uRydg78P7hSMrvzg4yjOrco2IFX7wtM+0Vm7p8=; b=VhUjF2nobFCyl66rsSd7mW9HgrtYOO9l8qiKhI0spCAYtzXUBl4o/j3K6RGMowuS4l T7SIYW6kZ959NCIu5wJGUrW8iMQyEetIIDByVh+mKNINayCAnNwmxA5c5MEY9GwyjKZJ SfTIYu/zH0LMrRhtsm+SR3Fpy2SCNET2QTsvdjOdPQ58RQt6uGJo9KkYGBBngiaI0iiw Tg82DJPi4k/Ka6BvBouASFJg2GEBWN5mvgEM3dT+Ww8lugPQAYHhAMmylx3ZTUPcxksA MKTiMyPzW4QH7UCiQTTHsMsttYK5RpuikwlWjwPoBVWdHyAqznUh5YNXxF5F4VmjqCOM gZfA== X-Gm-Message-State: AOJu0Yx+JAidX8afffN/Ioe0hOK3uOWBQviNEyavYMZ7nmDBGr/xM1oP vHcPH8KyumMmuBaX7jsKG+iEGGDwW2p5ief0V60hkt1eQ8diS2ermsJnBf3z X-Gm-Gg: ASbGncsJdxoaouj5FmCqMdi6wR00cppUz0HPx7/xHaMhhI6kMrH2bI6nc9Mhv4mh4Aa OITAFdR4O8NlHP91ULeRLtgdk9VoJfoeeXCcWuI6bfy8aVypY5A7a4GnoNKya8xokYvNJFAocTc keJCivSv2q4GOxgX5kr75BA6VCpojFnIwaspopiKgLwF30BwSZGF999J0TxZkgTp2auLGs/XNk2 e/ntPKnX7jsbHsg0OCIE4L7kOe7mNONrwmYjPOHbYcDpldP2bgl4licnSNAow== X-Google-Smtp-Source: AGHT+IH5pvWD2ZKEKlcVOsQGLOwY0oi3rnDLgVMTthJD/fiV58Muhu4m5/IoIK7yLmtQNFpTmOXsRw== X-Received: by 2002:a5d:64a1:0:b0:385:f092:e16 with SMTP id ffacd0b85a97d-3888e0c07aemr9719604f8f.55.1734370049281; Mon, 16 Dec 2024 09:27:29 -0800 (PST) Received: from localhost ([31.210.180.118]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-388c80613a9sm8669773f8f.101.2024.12.16.09.27.28 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 16 Dec 2024 09:27:28 -0800 (PST) From: Efraim Flashner To: 74609@debbugs.gnu.org Subject: [PATCH 10/21] gnu: Add mono-3.12.1. Date: Mon, 16 Dec 2024 19:26:33 +0200 Message-ID: X-Mailer: git-send-email 2.46.0 In-Reply-To: References: MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Spam-Score: 0.3 (/) X-Debbugs-Envelope-To: 74609 Cc: aaron.covrig.us@ieee.org, ludo@gnu.org, unmush , richard@freakingpenguin.com, unmush@proton.me, janneke@gnu.org 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: -0.7 (/) From: unmush * gnu/packages/dotnet.scm (mono-3.12.1-external-repo-specs, mono-3.12.1): New variables. Change-Id: Id5d13492163aabb845c47609f52287c5565497a4 --- gnu/packages/dotnet.scm | 52 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) diff --git a/gnu/packages/dotnet.scm b/gnu/packages/dotnet.scm index df40169dd37..4d79740d7bd 100644 --- a/gnu/packages/dotnet.scm +++ b/gnu/packages/dotnet.scm @@ -655,3 +655,55 @@ (define-public mono-3.0 license:asl2.0 ;; ./support, contains a copy of zlib license:zlib)))) + +(define mono-3.12.1-external-repo-specs + ;; format: ({reponame OR (reponame dir-name)} commit sha256) ... + '(("aspnetwebstack" "e77b12e6cc5ed260a98447f609e887337e44e299" + "0rks344qr4fmp3fs1264d2qkmm348m8d1kjd7z4l94iiirwn1fq1") + ("cecil" "33d50b874fd527118bc361d83de3d494e8bb55e1" + "1p4hl1796ib26ykyf5snl6cj0lx0v7mjh0xqhjw6qdh753nsjyhb") + ("entityframework" "a5faddeca2bee08636f1b7b3af8389bd4119f4cd" + "0b05pzf6qwdd92pbzym32nfmw8rq36820vdzakq1kykfmddjr9a7") + ("ikdasm" "7ded4decb9c39446be634d42a575fda9bc3d945c" + "0f3mbfizxmvr5njj123w0wn7sz85v5q2mzwijjql8w1095i0916l") + (("ikvm-fork" "ikvm") "22534de2098acbcf208f6b06836d122dab799e4b" + "1ivywy5sc594sl3bs9xrkna1dbhkp7v1mv79n96ydgq6zcs0698l") + ("Lucene.Net" "88fb67b07621dfed054d8d75fd50672fb26349df" + "1rfxqfz7hkp9rg5anvxlv6fna0xi0bnv1y8qbhf8x48l08yjb38k") + ("Newtonsoft.Json" "471c3e0803a9f40a0acc8aeceb31de6ff93a52c4" + "0dgngd5hqk6yhlg40kabn6qdnknm32zcx9q6bm2w31csnsk5978s") + ("rx" "00c1aadf149334c694d2a5096983a84cf46221b8" + "0ndam0qrnkb4gj21lapqgcy0mqw7s18viswsjyjyaaa4fgqw8kmq"))) + +(define-public mono-3.12.1 + (package + (inherit mono-3.0) + (version "3.12.1") + (name "mono") + (source (origin + (method git-fetch) + (uri + (git-reference + (url "https://gitlab.winehq.org/mono/mono.git") + (commit (string-append "mono-" "3.12.1")))) + (file-name (git-file-name name version)) + (sha256 + (base32 + "01sxrnfch61k8v7av7ccbmy3v37ky8yp8460j6ycnbyfa3305y0f")) + (modules '((guix build utils) + (ice-9 string-fun))) + (snippet #~(begin + #$(add-external-repos + mono-3.12.1-external-repo-specs) + #$prepare-mono-source)))) + (native-inputs (modify-inputs (package-native-inputs mono-3.0) + (replace "mono" mono-3.0))) + (arguments + (substitute-keyword-arguments (package-arguments mono-3.0) + ((#:phases phases #~%standard-phases) + #~(modify-phases #$phases + (add-after 'unpack 'set-TZ + (lambda _ + ;; for some reason a default is only used if this is empty, not + ;; if it is unset. + (setenv "TZ" ""))))))))) -- Efraim Flashner אפרים פלשנר GPG key = A28B F40C 3E55 1372 662D 14F7 41AA E7DC CA3D 8351 Confidentiality cannot be guaranteed on emails sent or received unencrypted From debbugs-submit-bounces@debbugs.gnu.org Mon Dec 16 12:28:41 2024 Received: (at 74609) by debbugs.gnu.org; 16 Dec 2024 17:28:41 +0000 Received: from localhost ([127.0.0.1]:55856 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1tNEtc-0006Gq-CC for submit@debbugs.gnu.org; Mon, 16 Dec 2024 12:28:41 -0500 Received: from mail-wr1-f41.google.com ([209.85.221.41]:44492) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1tNEtS-0006FH-M4 for 74609@debbugs.gnu.org; Mon, 16 Dec 2024 12:28:32 -0500 Received: by mail-wr1-f41.google.com with SMTP id ffacd0b85a97d-385d7f19f20so2223409f8f.1 for <74609@debbugs.gnu.org>; Mon, 16 Dec 2024 09:28:30 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1734370045; x=1734974845; darn=debbugs.gnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:sender:from:to:cc:subject:date :message-id:reply-to; bh=cm6aI9utkAyZOfPTZ/tCyh4LO6jyZLCG9w0GxUCiN+k=; b=eHL91NMAMUpXmrUh+qFTam1G4f8gXOrqbk8fSkvloHIDV/3nMr3cUgfnSW8ajCrkgq qxDOlBMwuu6mdC/WgD1+xRrC/04Cnj3pXddIBrKOxhCT5fZfZZV3VDaEMAHdSwrWC+RD 74Dv/PRIlyBR0CJCpUJ3jvP63oyd1XqcZds689UfLH6ZIxHUUe8p/yzTQyBSJ5a1SnSs GWADxoy67FpBztJMxZyT/dVmxWdgZ6USBHwf5m8dihQRsEb569D5ZCifPsE/9rzl2g3F VYygw2ambkiNw46oDbYQu7PNpoBbei4MmES+ItTAfyMxsJu5NSLQBH7t7AvWZi6qvFTP 6VWQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1734370045; x=1734974845; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:sender:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=cm6aI9utkAyZOfPTZ/tCyh4LO6jyZLCG9w0GxUCiN+k=; b=FuR2T67JRY4nIPskMnQ+26JrKfJbpEqmL4mk0zMDD1MWUx2arynbvueZ/v3hq19k+j hqlZBPzDHvFNbSwvswTB6X86QuA9sqOK8CEwuTAKSTMvIgNj7p/KsjmMaHW1iS8vsmN9 oxhjlUfgW3UzAU5YIhd6+yLK2Pa0AUKz70OkplRKP9vZZljmCSSJu0Ke2rVD3EFKnAFf f/+RfAk5T+1Wx0MQZEOw0yotxXzJxB6JPg2FjspNGplK8Jm06eXhjJXCvVvx2SgqlvCb ReBaKOtgIC8dFuGwfwG3ewWaSmqN1Gliyod+/CQoQ3VsZaKfY2XQSOIcYu/2epg8zhlN aRgQ== X-Gm-Message-State: AOJu0YwxrnVPgwRBiTJZgPGXVU6KSb5z95HijKim5nZGhGI2MLhvxxDf OynAxHu6ezS75iH7/8WxCA5gOUOadNBPdPRm3+p4hZRN0BJPPBk5VmHU9jK+ X-Gm-Gg: ASbGncv6dX5cygDeQW+dkC5zdlbUgT6iBPfb8g0S/ZnHquXwC37oOonbFWiXtHNbQxo mrdztnCs8YMhgXLZLSioRHAKvqL7HQEZ4XBZ2+ofq2lkcYbjMezzWuYGwS70xp2bL0TxiHKz9Al Mld5soosWU0J144MGFJRDBAwgsloa5IvkIgQKDsm+KA5EcRvTEhhdrZTLK5sQ9HJcBpXMxgRvns eT10XPbCzjCE6QaFymZlTFza9i0W7RR0kBDRhmg+/ZFoouzVPIpyKqkdJsC+A== X-Google-Smtp-Source: AGHT+IFGrgEMoJOmTPBO4AQWxDL6cT2CedCN/lQta45CSSmYEnTL/LGVtdVQiVqlC/n+HN5eOwVjQQ== X-Received: by 2002:a5d:64ac:0:b0:388:c61d:4400 with SMTP id ffacd0b85a97d-388da3a1314mr386620f8f.26.1734370044920; Mon, 16 Dec 2024 09:27:24 -0800 (PST) Received: from localhost ([31.210.180.118]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-388c8016bdfsm8794685f8f.43.2024.12.16.09.27.24 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 16 Dec 2024 09:27:24 -0800 (PST) From: Efraim Flashner To: 74609@debbugs.gnu.org Subject: [PATCH 08/21] gnu: Add mono-2.11.4. Date: Mon, 16 Dec 2024 19:26:31 +0200 Message-ID: <1ef3a73521e6f4b2eb400d6f5a4801cde1e203c9.1734369314.git.efraim@flashner.co.il> X-Mailer: git-send-email 2.46.0 In-Reply-To: References: MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Spam-Score: 0.3 (/) X-Debbugs-Envelope-To: 74609 Cc: aaron.covrig.us@ieee.org, ludo@gnu.org, unmush , richard@freakingpenguin.com, unmush@proton.me, janneke@gnu.org 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: -0.7 (/) From: unmush * gnu/packages/dotnet.scm (mono-2.11.4-external-repo-specs, mono-2.11.4): New variables. (add-external-repos): New procedure. * gnu/packages/patches/mono-2.11.4-fixes.patch: New patch. * gnu/local.mk (dist_patch_DATA): Register it. Change-Id: I7cb96af8b05a625cfe9ca9ab0f1132608c02ed31 --- gnu/local.mk | 1 + gnu/packages/dotnet.scm | 95 ++++++++++++++++++++ gnu/packages/patches/mono-2.11.4-fixes.patch | 36 ++++++++ 3 files changed, 132 insertions(+) create mode 100644 gnu/packages/patches/mono-2.11.4-fixes.patch diff --git a/gnu/local.mk b/gnu/local.mk index 43ccab199dc..8007ff19a7e 100644 --- a/gnu/local.mk +++ b/gnu/local.mk @@ -1823,6 +1823,7 @@ dist_patch_DATA = \ %D%/packages/patches/mono-1.9.1-fixes.patch \ %D%/packages/patches/mono-2.4.2.3-fixes.patch \ %D%/packages/patches/mono-2.6.4-fixes.patch \ + %D%/packages/patches/mono-2.11.4-fixes.patch \ %D%/packages/patches/mosaicatcher-unbundle-htslib.patch \ %D%/packages/patches/mrrescue-support-love-11.patch \ %D%/packages/patches/mtools-mformat-uninitialized.patch \ diff --git a/gnu/packages/dotnet.scm b/gnu/packages/dotnet.scm index 6304a38bb74..b7940d24706 100644 --- a/gnu/packages/dotnet.scm +++ b/gnu/packages/dotnet.scm @@ -497,3 +497,98 @@ (define-public mono-2.6.4 (search-patches "mono-2.6.4-fixes.patch")))) (native-inputs (modify-inputs (package-native-inputs mono-2.4.2) (replace "mono" mono-2.4.2))))) + +;; submodule checkouts use git://, which isn't supported by github anymore, so +;; we need to manually provide them instead of being able to use (recursive? +;; #t). Also try not to think too hard about the fact that some of these +;; submodules in later versions contain binary compiler blobs which mono +;; maintainers presumably used when creating the bootstrap binaries they +;; published. All fetched and updated over unauthenticated git://. + +(define mono-2.11.4-external-repo-specs + ;; format: ({reponame OR (reponame dir-name)} commit-hash origin-sha256) ... + ;; if reponame starts with https:// it is treated as the repository url, + ;; otherwise the name of a repository under https://github.com/mono/ + '(("aspnetwebstack" "1836deff6a2683b8a5b7dd78f2b591a10b47573e" + "0vqq45i8k6jylljarr09hqqiwjs8wn0lgjrl6bz72vxqpp0j344k") + ("cecil" "54e0a50464edbc254b39ea3c885ee91ada730705" + "007szbf5a14q838695lwdp7ap6rwzz3kzllgjfnibzlqipw3x2yk") + ("entityframework" "9baca562ee3a747a41870f45e749e4436b6aca26" + "0l8k04bykbrbk5q2pz8hzh8xy8y4ayz7j97fw0kyk3lrai89v5da") + ("Newtonsoft.Json" "471c3e0803a9f40a0acc8aeceb31de6ff93a52c4" + "0dgngd5hqk6yhlg40kabn6qdnknm32zcx9q6bm2w31csnsk5978s"))) + +(define (add-external-repos specs) + (define (reponame->url reponame) + (if (string-prefix? "https://" reponame) + reponame + (string-append "https://github.com/mono/" reponame))) + + (define* (external-repo-gexp reponame commit hash + #:key recursive? (patches '())) + (let ((short-commit (string-take commit 6)) + (reponame (if (pair? reponame) (car reponame) + reponame)) + (dir-name (if (pair? reponame) (cadr reponame) + reponame))) + #~(copy-recursively #+(origin + (method git-fetch) + (uri (git-reference + (url (reponame->url reponame)) + (commit commit) + (recursive? recursive?))) + (file-name + (git-file-name dir-name + short-commit)) + (sha256 (base32 hash)) + (patches (map search-patch patches))) + #$(string-append "./external/" dir-name)))) + + (define (spec->gexp spec) + (apply external-repo-gexp spec)) + + #~(begin + #+@(map spec->gexp specs))) + +(define-public mono-2.11.4 + (package + (inherit mono-2.6.4) + (version "2.11.4") + (name "mono") + (source (origin + (method git-fetch) + (uri + (git-reference + (url "https://gitlab.winehq.org/mono/mono.git") + (commit (string-append "mono-" "2.11.4")))) + (file-name (git-file-name name version)) + (sha256 + (base32 + "0y2bifi2avbjmfp80hjga2dyqip4b46zkvx6yfr9pa2hhm940rpx")) + (modules '((guix build utils) + (ice-9 string-fun))) + (snippet #~(begin + #$(add-external-repos + mono-2.11.4-external-repo-specs) + #$prepare-mono-source)) + (patches + (search-patches "mono-2.11.4-fixes.patch")))) + (build-system gnu-build-system) + (native-inputs (modify-inputs (package-native-inputs mono-2.6.4) + (replace "mono" mono-2.6.4))) + (license (list + ;; most of mcs/tools, mono/man, most of mcs/class, tests by + ;; default, mono/eglib, mono/metadata/sgen*, + ;; mono/arch/*/XXX-codegen.h + ;; mcs/mcs, mcs/gmcs (dual-licensed GPL) + ;; samples + license:x11 + ;; mcs/mcs, mcs/gmcs (dual-licensed X11) + ;; some of mcs/tools + license:gpl1+ ;; note: ./mcs/LICENSE.GPL specifies no version + ;; mono/mono (the mono VM, I think they meant mono/mini) + license:lgpl2.0+ ;; note: ./mcs/LICENSE.LGPL specifies no version + ;; mcs/jay + license:bsd-4 + ;; mcs/class/System.Core/System/TimeZoneInfo.Android.cs + license:asl2.0)))) diff --git a/gnu/packages/patches/mono-2.11.4-fixes.patch b/gnu/packages/patches/mono-2.11.4-fixes.patch new file mode 100644 index 00000000000..02a05f7977a --- /dev/null +++ b/gnu/packages/patches/mono-2.11.4-fixes.patch @@ -0,0 +1,36 @@ +diff --git a/configure.in b/configure.in +index 38cc6dc2925..4c608eb150f 100644 +--- a/configure.in ++++ b/configure.in +@@ -470,7 +470,7 @@ AC_CHECK_HEADERS(wchar.h) + AC_CHECK_HEADERS(ieeefp.h) + AC_MSG_CHECKING(for isinf) + AC_TRY_LINK([#include ], [ +- int f = isinf (1); ++ int f = isinf (1.0); + ], [ + AC_MSG_RESULT(yes) + AC_DEFINE(HAVE_ISINF, 1, [isinf available]) +diff --git a/mono/io-layer/processes.c b/mono/io-layer/processes.c +index 586b54715db..d27857aa092 100644 +--- a/mono/io-layer/processes.c ++++ b/mono/io-layer/processes.c +@@ -18,6 +18,7 @@ + #include + #include + #include ++#include + #include + #include + #include +diff --git a/runtime/Makefile.am b/runtime/Makefile.am +index 6957a287d38..2d071230a84 100644 +--- a/runtime/Makefile.am ++++ b/runtime/Makefile.am +@@ -1,6 +1,3 @@ +-# hack to prevent 'check' from depending on 'all' +-AUTOMAKE_OPTIONS = cygnus +- + tmpinst = _tmpinst + + noinst_SCRIPTS = mono-wrapper monodis-wrapper -- Efraim Flashner אפרים פלשנר GPG key = A28B F40C 3E55 1372 662D 14F7 41AA E7DC CA3D 8351 Confidentiality cannot be guaranteed on emails sent or received unencrypted From debbugs-submit-bounces@debbugs.gnu.org Mon Dec 16 12:28:42 2024 Received: (at 74609) by debbugs.gnu.org; 16 Dec 2024 17:28:42 +0000 Received: from localhost ([127.0.0.1]:55858 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1tNEtd-0006Gz-EG for submit@debbugs.gnu.org; Mon, 16 Dec 2024 12:28:42 -0500 Received: from mail-wm1-f48.google.com ([209.85.128.48]:53719) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1tNEtU-0006Fy-Db for 74609@debbugs.gnu.org; Mon, 16 Dec 2024 12:28:33 -0500 Received: by mail-wm1-f48.google.com with SMTP id 5b1f17b1804b1-4361f796586so49556135e9.3 for <74609@debbugs.gnu.org>; Mon, 16 Dec 2024 09:28:32 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1734370052; x=1734974852; darn=debbugs.gnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:sender:from:to:cc:subject:date :message-id:reply-to; bh=px4FouiHmCPlh0JIuRG9HkIN10PLKWAx/9Yn4KzTksY=; b=DDWkJlE5ZsVdjKeUTDJbJnnhusDp0Q9CP1M58ibf9qEL/8x8teI+L9Tg8dykCQzc9V U9cNv6BJKuFLME+qsT0J22KzV2oPbLdfB1F2E1Y0Y95aXq6lbszTRkseC71Mov0Jcy0s TYf+M0lRmrppwi37e/yX8UeFb2EL2dBWpoU49WtImI9+9OGjP8TfLAi5og8hdLaFLcg4 fAKNjQAWbAorQV0XOvbrQNF2LugUG14lL93+tZ5ETWiTiTyN35v8rHA7ev1g066qEvsf O0eh7daJu7jgm3+n2fN/JeJdQPwWHhV/IMmgseWO5SSZMNiSj/7wo6V1Q1g8iWTHz+7s aJLA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1734370052; x=1734974852; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:sender:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=px4FouiHmCPlh0JIuRG9HkIN10PLKWAx/9Yn4KzTksY=; b=jPTVBNzfsMzwOe4G7mIDO4o6/88ASeNWhn7/KkidGxWcLY0d2sDUd+CUMyjRae6aAx i3ps1n1V8emvZzsc+P+jdvKXWptjXrcFbIE+dyk+yHVUzRirP5a4cKSYo+ETiz9NoJZU /K7CP0e5qUkkGCVjEPe0NdSXcI9dQZFq4F2QgDoxRGqdwQxx6ZRoJG0ZKe+3UfyOFx9l cYUsEVF/e+/wUNgHzZEA1BuiCtzY6Dww0pAfMen9jroES4qdruCeQMkrRXb7UighHuei zT7gbNXvmEgBnmfxInHSTnddQqlU4l1TaevH+L7UoetfRhWDEU1Ho89iTc0HCXRJvnVC S6lw== X-Gm-Message-State: AOJu0Yw+7SuBdFIuFYoB1gvVZO88edgQK132/T8BRhfwedN5x+DnU48x NHTXzWWeS6JkX6hSnfD0Le3Heu58Qdo5KzTOTO5Xa7LAL9twWjdWIJR7s4oq X-Gm-Gg: ASbGnctSWqw0ZEq6zsCDORSK12GFC5cw1CzWrzDZaZghaQL8Bs98hmnCE9QhMHO6RBM zszl3DsN586adkcXSf2Id+X+jCr2yZNXEbxb8ysg+A4otO5D5gQt9i9P9nc2dAU6D/wMZWew+go jucn5GbpGxn0Xw6J7pBzsxPk1X0/wGPUf6UkIF67gyOUzwiadMX+20zVDUbFBZbNJAwFCnQw8ol mx7lyIOYpGoSg6XT8nUepG14a7OqXuVyPMVXWrf+kqSXXWVHrv7TpLNMZggUQ== X-Google-Smtp-Source: AGHT+IFOlYS5IJFfDTfQMJ2ex3xt8ohD9O16krRkuTqFlHkwHeRZ6RuAcaKS4wXNfQglA1oGIL0uhA== X-Received: by 2002:a05:600c:4511:b0:431:54f3:11ab with SMTP id 5b1f17b1804b1-4362aaa5d27mr119039275e9.33.1734370051423; Mon, 16 Dec 2024 09:27:31 -0800 (PST) Received: from localhost ([31.210.180.118]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-4363602b1a1sm91920655e9.10.2024.12.16.09.27.30 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 16 Dec 2024 09:27:30 -0800 (PST) From: Efraim Flashner To: 74609@debbugs.gnu.org Subject: [PATCH 11/21] gnu: Add mono-4.9.0. Date: Mon, 16 Dec 2024 19:26:34 +0200 Message-ID: <25a65ced1e0ff59aeb0b6a9db06cfc4e527f19d6.1734369314.git.efraim@flashner.co.il> X-Mailer: git-send-email 2.46.0 In-Reply-To: References: MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Spam-Score: 0.3 (/) X-Debbugs-Envelope-To: 74609 Cc: aaron.covrig.us@ieee.org, ludo@gnu.org, unmush , richard@freakingpenguin.com, unmush@proton.me, janneke@gnu.org 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: -0.7 (/) From: unmush * gnu/packages/dotnet.scm (mono-4.9.0): New variable. * gnu/packages/patches/mono-4.9.0-fix-runtimemetadataversion.patch: New patch. * gnu/local.mk (dist_patch_DATA): register it. Change-Id: Iea5926e79f7877aca718c1312c89bcc715b64d21 --- gnu/local.mk | 1 + gnu/packages/dotnet.scm | 129 ++++++++++++++++++ ...ono-4.9.0-fix-runtimemetadataversion.patch | 13 ++ 3 files changed, 143 insertions(+) create mode 100644 gnu/packages/patches/mono-4.9.0-fix-runtimemetadataversion.patch diff --git a/gnu/local.mk b/gnu/local.mk index 8007ff19a7e..5facc66932b 100644 --- a/gnu/local.mk +++ b/gnu/local.mk @@ -1824,6 +1824,7 @@ dist_patch_DATA = \ %D%/packages/patches/mono-2.4.2.3-fixes.patch \ %D%/packages/patches/mono-2.6.4-fixes.patch \ %D%/packages/patches/mono-2.11.4-fixes.patch \ + %D%/packages/patches/mono-4.9.0-fix-runtimemetadataversion.patch \ %D%/packages/patches/mosaicatcher-unbundle-htslib.patch \ %D%/packages/patches/mrrescue-support-love-11.patch \ %D%/packages/patches/mtools-mformat-uninitialized.patch \ diff --git a/gnu/packages/dotnet.scm b/gnu/packages/dotnet.scm index 4d79740d7bd..e658edf8649 100644 --- a/gnu/packages/dotnet.scm +++ b/gnu/packages/dotnet.scm @@ -707,3 +707,132 @@ (define-public mono-3.12.1 ;; for some reason a default is only used if this is empty, not ;; if it is unset. (setenv "TZ" ""))))))))) + +(define mono-4.9.0-external-repo-specs + ;; format: ({reponame OR (reponame dir-name)} commit sha256) ... + '(("aspnetwebstack" "e77b12e6cc5ed260a98447f609e887337e44e299" + "0rks344qr4fmp3fs1264d2qkmm348m8d1kjd7z4l94iiirwn1fq1") + ;; (("reference-assemblies" "binary-reference-assemblies") + ;; "6c77197318fe85dfddf75a1b344b9bf8d0007b0b" + ;; "11hbs952srjlsiyin76y2llm5rfjkwjc67ya1i3p0pw193zw14jk") + ;; According to github description this is a "custom" fork of boringssl + ("boringssl" "c06ac6b33d3e7442ad878488b9d1100127eff998" + "187zpi1rvh9i6jfccwzqq337rxxi1rgny6mjq79r08dlrh0lydzc") + ("buildtools" "9b6ee8686be55a983d886938165b6206cda50772" + "0sjw3swavcmijynmaxh647qpkjsbgihdr8lhkyzf8dsprhlq4fxd") + ("cecil" "2b39856e80d8513f70bc3241ed05325b0de679ae" + "0vvax32r6bnhvrcvis83gdrdqcgyxb704hz28g9q0wnay4knqxdm") + (("cecil" "cecil-legacy") "33d50b874fd527118bc361d83de3d494e8bb55e1" + "1p4hl1796ib26ykyf5snl6cj0lx0v7mjh0xqhjw6qdh753nsjyhb") + ;; ("debian-snapshot" "9342f8f052f81deaba789f030db23a88b4369724" + ;; "") + ("ikdasm" "e4deabf61c11999f200dcea6f6d6b42474cc2131" + "1frbf70y7n7l72j393avdiwk6153cvfwwpighkf2m46clqmq4han") + (("ikvm-fork" "ikvm") "367864ef810859ae3ce652864233b35f2dd5fdbe" + "0ig99kbma4s0mzb13nzsk1vm200ygfr11q6mzgh6jj46s2fc35px") + ("Lucene.Net.Light" "85978b7eb94738f516824341213d5e94060f5284" + "0d118i52m3a0vfjhfci81a2kc4qvnj23gs02hrvdrfpd1q92fyii") + ("Newtonsoft.Json" "471c3e0803a9f40a0acc8aeceb31de6ff93a52c4" + "0dgngd5hqk6yhlg40kabn6qdnknm32zcx9q6bm2w31csnsk5978s") + ("nuget-buildtasks" "04bdab55d8de9edcf628694cfd2001561e8f8e60" + "1nklxayxkdskg5wlfl44cndzqkl18v561rz03hwx7wbn5w89q775") + ("nunit-lite" "4bc79a6da1f0ee538560b7e4d0caff46d3c86e4f" + "085fpabjw47rn8hb5zw6wizsg2jrgdbj9rnlar9lrls40wig272q") + ("rx" "b29a4b0fda609e0af33ff54ed13652b6ccf0e05e" + "1n1jwhmsbkcv2d806immcpzkb72rz04xy98myw355a8w5ah25yiv"))) + +(define-public mono-4.9.0 + (package + (inherit mono-3.12.1) + (version "4.9.0") + (name "mono") + (source (origin + (method git-fetch) + (uri + (git-reference + (url "https://gitlab.winehq.org/mono/mono.git") + ;; some commit chosen after configure.ac was updated to make + ;; the version >= 4.9.0 + (commit "5a3736606e6243d2c84d4df2cf35c284214b8cc4"))) + (file-name (git-file-name name version)) + (sha256 + (base32 + "0vqkkqkaqwbii4hdzg0vffyy31fz1kmmsa67jyqwxdsvgpjszih3")) + (modules '((guix build utils) + (ice-9 string-fun))) + (snippet #~(begin + #$(add-external-repos + mono-4.9.0-external-repo-specs) + #$prepare-mono-source)) + (patches (search-patches + ;; Saves us an extra intermediate step + "mono-4.9.0-fix-runtimemetadataversion.patch")))) + (native-inputs (modify-inputs (package-native-inputs mono-3.12.1) + (replace "mono" mono-3.12.1) + (append tzdata-for-tests))) + (arguments + (substitute-keyword-arguments (package-arguments mono-3.12.1) + ((#:configure-flags _ #f) + ;; "External Boehm is no longer supported" - I VILL NOT use the + ;; bundled software! + #~(list "--with-sgen=yes" + "--disable-boehm" + "--with-csc=mcs")) + ((#:phases phases #~%standard-phases) + #~(modify-phases #$phases + (add-before 'configure 'set-TZDIR + (lambda* (#:key native-inputs inputs #:allow-other-keys) + (search-input-directory (or native-inputs inputs) + "share/zoneinfo"))) + (add-after 'unpack 'use-old-mono-libraries + ;; At this point in history mono had not, to my knowledge, + ;; deigned to grace us with the actual sources to the binaries + ;; shipped in external/binary-reference-assemblies, so just copy + ;; the libraries from an older mono for now I guess. + (lambda _ + (substitute* "./mcs/class/reference-assemblies/Makefile" + (("\\.\\./\\.\\./\\.\\./external/binary-reference-assemblies/v") + (string-append #$(this-package-native-input "mono") + "/lib/mono/"))))) + (add-after 'unpack 'disable-Microsoft.Build.Tasks-tests + (lambda _ + ;; These fail for unknown reasons + (substitute* "mcs/class/Microsoft.Build.Tasks/Makefile" + (("^include ../../build/library.make" all) + (string-append + all + "\nrun-test-recursive:\n\t@echo skipping tests\n"))))))))) + (license (list + ;; most of mcs/tools, mono/man, most of mcs/class, tests by + ;; default, mono/eglib, mono/metadata/sgen*, + ;; mono/arch/*/XXX-codegen.h + ;; mcs/mcs, mcs/gmcs (dual-licensed GPL) + ;; samples + license:x11 + ;; mcs/mcs, mcs/gmcs (dual-licensed X11) + ;; some of mcs/tools + license:gpl1+ ;; note: ./mcs/LICENSE.GPL specifies no version + ;; mono/mono (the mono VM, I think they meant mono/mini) + ;; mono/support (note: directory doesn't exist, probably meant + ;; ./support, but that contains a copy of zlib?) + license:lgpl2.0+ ;; note: ./mcs/LICENSE.LGPL specifies no version + ;; mcs/jay, mono/utils/memcheck.h + license:bsd-4 + ;; mono/utils/bsearch.c, mono/io-layer/wapi_glob.{h,c} + license:bsd-3 + ;; mono/utils/freebsd-{dwarf,elf_common,elf64,elf32}.h + license:bsd-2 + ;; mcs/class/System.Core/System/TimeZoneInfo.Android.cs + ;; mcs/class/RabbitMQ.Client (dual licensed mpl1.1) + license:asl2.0 + ;; ./support, contains a copy of zlib, incl. ./support/minizip + license:zlib + ;; mono/docs/HtmlAgilityPack, mcs/unit24 + license:ms-pl + ;; mcs/class/I18N/mklist.sh, mono/benchmark/{zipmark,logic}.cs + ;; mcs/class/{,Compat.}ICSharpCode.SharpZipLib + license:gpl2+ + ;; mcs/class/RabbitMQ.Client (dual licensed asl2.0) + license:mpl1.1 + ;; API Documentation + license:cc-by4.0)))) diff --git a/gnu/packages/patches/mono-4.9.0-fix-runtimemetadataversion.patch b/gnu/packages/patches/mono-4.9.0-fix-runtimemetadataversion.patch new file mode 100644 index 00000000000..ec5bad9ae12 --- /dev/null +++ b/gnu/packages/patches/mono-4.9.0-fix-runtimemetadataversion.patch @@ -0,0 +1,13 @@ +diff --git a/mcs/mcs/settings.cs b/mcs/mcs/settings.cs +index 1393bcd58f3..af5febe7cf6 100644 +--- a/mcs/mcs/settings.cs ++++ b/mcs/mcs/settings.cs +@@ -1197,7 +1197,7 @@ namespace Mono.CSharp { + } + return ParseResult.Success; + +- case "runtimemetadataversion": ++ case "/runtimemetadataversion": + if (value.Length == 0) { + Error_RequiresArgument (option); + return ParseResult.Error; -- Efraim Flashner אפרים פלשנר GPG key = A28B F40C 3E55 1372 662D 14F7 41AA E7DC CA3D 8351 Confidentiality cannot be guaranteed on emails sent or received unencrypted From debbugs-submit-bounces@debbugs.gnu.org Mon Dec 16 12:28:43 2024 Received: (at 74609) by debbugs.gnu.org; 16 Dec 2024 17:28:43 +0000 Received: from localhost ([127.0.0.1]:55861 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1tNEte-0006HE-K9 for submit@debbugs.gnu.org; Mon, 16 Dec 2024 12:28:43 -0500 Received: from mail-wm1-f46.google.com ([209.85.128.46]:59527) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1tNEtV-0006Fe-4s for 74609@debbugs.gnu.org; Mon, 16 Dec 2024 12:28:34 -0500 Received: by mail-wm1-f46.google.com with SMTP id 5b1f17b1804b1-436202dd730so31550305e9.2 for <74609@debbugs.gnu.org>; Mon, 16 Dec 2024 09:28:33 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1734370047; x=1734974847; darn=debbugs.gnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:sender:from:to:cc:subject:date :message-id:reply-to; bh=sd4Vc0+M7dIM4S7B2Eakx19YbBKpt8dPWsCkRu7hLYY=; b=h/6LU2VS04u8YGq6h+kgtnDkdTBmXseZZ+DN0Lz7TTr7IsuDVnRGGz6nCt92JC+1I0 03YCq01H2sxhVyIbsnG36XJhqd3TpaOaRYKHD80TRWc6lvZs1CeUHfLjex5SUMGmB4/5 tbER7tURConpMbR0YDaoE3kVEekyDn+aDItaLRAGA+QuIA+z31FyUuE0oo9kZIM1txRS dZFxQhA2uQFAH+YUedlvizMCR4aUA+vGIFzdb3EhkZwaEkp4EYQNFefq8QXjFP7ZY1Ok mQE/+J1JBkpdeyD3s+CqLqlY+g3a7cmBn8VghNG80H7m0H4d2I3EQ+GYE4oz3DjZXN8P Wj1Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1734370047; x=1734974847; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:sender:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=sd4Vc0+M7dIM4S7B2Eakx19YbBKpt8dPWsCkRu7hLYY=; b=rWY1nwpHI1m/AmivV4S4gA8hmhj08Wu2BU4yIx8Xq+pMSXnvY29g2WaUa1zVpPTI5b LRFi4pCslUjdx3HA53AHgGs0bsxeQmIxRvwg9diGEOk7f04lRRt3TTAAh+4Iu/eXGIMv iOMnazgExzGVnu2Ot8AgYZp6tUKE4zNtNAzb/Cj/aDkqaFP0moapSrtTZroCrHoH6vjf EmMrqVYrx7ZN+lJ3eZDknEKCMxtkgbYaiCAUnTyRUm+l0LD8+mIIXWdMwBGVIQ9KY384 3ZnluDZOn+V7VtpdsAXdoeUDr8xXSIQR7PTB1B+7i4VbdaLPGugByedX+1bQhp214Oyb K3vQ== X-Gm-Message-State: AOJu0YzhlnkW8EWdP7f8bnGLgDi/AKLvkTps8g8w4sK8Xaqmd0ytFZb0 wmYoG1lDQPNUwV2HWQVOlOkFtpGqt+zMPS9nnoGIiLti8ra6p14ECnraxCtM X-Gm-Gg: ASbGncvRScT5FnMWWH56g2tqaWZBpGF4Bv1V4iBVH6qTnNOMLc+p77lSrTenaslb3xl MiLfRqzEff4yQEeJrfLTyfqpNvSlYXT3SH/YaTQiYnAcQMA6HuMOLW0oONneb0+ivZn2oB4GMdt NnGE2NaidCprXjvEDJbVdKva+VfiZESry+lqBIxPARmQ1L69J3mO9NOERnaj03lf3mfl5OzmUv1 wjCKslpHU0/vC7qfq+hZBnODOUb1l+cqi2ttw2Tla4xorPNNG4p181SoMHU9A== X-Google-Smtp-Source: AGHT+IFjCPzfid862+7iQ0/w/1g3O96z2Pvul2OxVMxMmzXJe0bVh2S29qxyEEzeQj5RygViWQceQg== X-Received: by 2002:a05:6000:4610:b0:386:2ebe:7ae2 with SMTP id ffacd0b85a97d-3888e0b8d2bmr8730365f8f.45.1734370046974; Mon, 16 Dec 2024 09:27:26 -0800 (PST) Received: from localhost ([31.210.180.118]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-388c801626asm8742944f8f.29.2024.12.16.09.27.26 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 16 Dec 2024 09:27:26 -0800 (PST) From: Efraim Flashner To: 74609@debbugs.gnu.org Subject: [PATCH 09/21] gnu: Add mono-3.0. Date: Mon, 16 Dec 2024 19:26:32 +0200 Message-ID: X-Mailer: git-send-email 2.46.0 In-Reply-To: References: MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Spam-Score: 0.3 (/) X-Debbugs-Envelope-To: 74609 Cc: aaron.covrig.us@ieee.org, ludo@gnu.org, unmush , richard@freakingpenguin.com, unmush@proton.me, janneke@gnu.org 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: -0.7 (/) From: unmush * gnu/packages/dotnet.scm (mono-3.0.12-external-repo-specs, mono-3.0): New variables. Change-Id: I1f30041187c7d0cf6e45d56f6da9bb4a705202cf --- gnu/packages/dotnet.scm | 63 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 63 insertions(+) diff --git a/gnu/packages/dotnet.scm b/gnu/packages/dotnet.scm index b7940d24706..df40169dd37 100644 --- a/gnu/packages/dotnet.scm +++ b/gnu/packages/dotnet.scm @@ -592,3 +592,66 @@ (define-public mono-2.11.4 license:bsd-4 ;; mcs/class/System.Core/System/TimeZoneInfo.Android.cs license:asl2.0)))) + +(define mono-3.0.12-external-repo-specs + ;; format: ({reponame OR (reponame dir-name)} commit sha256) ... + ;; if reponame starts with https:// it is treated as the repository url, + ;; otherwise the name of a repository under https://github.com/mono/ + '(("aspnetwebstack" "e77b12e6cc5ed260a98447f609e887337e44e299" + "0rks344qr4fmp3fs1264d2qkmm348m8d1kjd7z4l94iiirwn1fq1") + ("cecil" "54e0a50464edbc254b39ea3c885ee91ada730705" + "007szbf5a14q838695lwdp7ap6rwzz3kzllgjfnibzlqipw3x2yk") + ("entityframework" "a5faddeca2bee08636f1b7b3af8389bd4119f4cd" + "0b05pzf6qwdd92pbzym32nfmw8rq36820vdzakq1kykfmddjr9a7") + (("ikvm-fork" "ikvm") "10b8312c8024111780ee382688cd4c8754b1f1ac" + "025wf9gjgfvrq42vgw91ahy3cmzcw094vx783dsp7gjdyd8q09nm") + ("Lucene.Net" "88fb67b07621dfed054d8d75fd50672fb26349df" + "1rfxqfz7hkp9rg5anvxlv6fna0xi0bnv1y8qbhf8x48l08yjb38k") + ("Newtonsoft.Json" "471c3e0803a9f40a0acc8aeceb31de6ff93a52c4" + "0dgngd5hqk6yhlg40kabn6qdnknm32zcx9q6bm2w31csnsk5978s") + ("rx" "17e8477b2cb8dd018d49a567526fe99fd2897857" + "0fyyy4jf0mma6kff6fvbvdcs5ra1bz4s063nvjjva9xlnv7sjvh4"))) + +(define-public mono-3.0 + (package + (inherit mono-2.11.4) + (version "3.0.12") + (name "mono") + (source (origin + (method git-fetch) + (uri + (git-reference + (url "https://gitlab.winehq.org/mono/mono.git") + (commit (string-append "mono-" "3.0.12")))) + (file-name (git-file-name name version)) + (sha256 + (base32 + "110f3hcfikk6bxbrgjas5dqldci9f24gvm3vdgn4j9j7xhlcx1lj")) + (modules '((guix build utils) + (ice-9 string-fun))) + (snippet #~(begin + #$(add-external-repos + mono-3.0.12-external-repo-specs) + #$prepare-mono-source)))) + (native-inputs (modify-inputs (package-native-inputs mono-2.11.4) + (replace "mono" mono-2.11.4))) + (license (list + ;; most of mcs/tools, mono/man, most of mcs/class, tests by + ;; default, mono/eglib, mono/metadata/sgen*, + ;; mono/arch/*/XXX-codegen.h + ;; mcs/mcs, mcs/gmcs (dual-licensed GPL) + ;; samples + license:x11 + ;; mcs/mcs, mcs/gmcs (dual-licensed X11) + ;; some of mcs/tools + license:gpl1+ ;; note: ./mcs/LICENSE.GPL specifies no version + ;; mono/mono (the mono VM, I think they meant mono/mini) + ;; mono/support (note: directory doesn't exist, probably meant + ;; ./support, but that contains a copy of zlib?) + license:lgpl2.0+ ;; note: ./mcs/LICENSE.LGPL specifies no version + ;; mcs/jay + license:bsd-4 + ;; mcs/class/System.Core/System/TimeZoneInfo.Android.cs + license:asl2.0 + ;; ./support, contains a copy of zlib + license:zlib)))) -- Efraim Flashner אפרים פלשנר GPG key = A28B F40C 3E55 1372 662D 14F7 41AA E7DC CA3D 8351 Confidentiality cannot be guaranteed on emails sent or received unencrypted From debbugs-submit-bounces@debbugs.gnu.org Mon Dec 16 12:28:44 2024 Received: (at 74609) by debbugs.gnu.org; 16 Dec 2024 17:28:44 +0000 Received: from localhost ([127.0.0.1]:55863 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1tNEtf-0006HP-H2 for submit@debbugs.gnu.org; Mon, 16 Dec 2024 12:28:44 -0500 Received: from mail-wm1-f49.google.com ([209.85.128.49]:57454) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1tNEtW-0006GN-DZ for 74609@debbugs.gnu.org; Mon, 16 Dec 2024 12:28:35 -0500 Received: by mail-wm1-f49.google.com with SMTP id 5b1f17b1804b1-4362f61757fso31859405e9.2 for <74609@debbugs.gnu.org>; Mon, 16 Dec 2024 09:28:34 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1734370054; x=1734974854; darn=debbugs.gnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:sender:from:to:cc:subject:date :message-id:reply-to; bh=hXN8vUIttydVUEhWxnQM0yas68bOVM4N1jvu4vu6uFU=; b=cdKxciKr6bSQNuV+SnCjjpcOPwNN6VO2+LNxkT8JZRnS85WgyksNOutxVikq9Erdh3 RCvaqPc9d5dPlnNqTe6PNo6c+lLx2BTfC6+FakJxiScJ31USrL32i3TSPwSXQKNKKcBJ I6zxuBJQ+2U2U8mRZdzLVXxYrSyQqtg0rLEKNfvQ3Euv5CxMDtRxo8Lfr4Y86dNSAXLa WNnL7SZY5Jb66HGwDApIF+Wi1DD295viCDYwLyxCZLJELqJK7kxOZSY1xLxw/MJpK1SX 8iVBRA99g6Mxyf2SVchLRxAyeHMJPbj0K8g600z6FqwO0c/C712eMzfQhQfJ3hDXGfou MQnw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1734370054; x=1734974854; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:sender:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=hXN8vUIttydVUEhWxnQM0yas68bOVM4N1jvu4vu6uFU=; b=iaeMC142w9FImaSXfLwegGyePKPZ007kdB4KpDo4iQdJ3l9nOso7d2tFUPyYyKjUdk A3smqSFTiQBmXy1DlFNIKK19jijSWeqRDoPY5kpv+EGk5iaVR12K7rCAU88cOCNgNgWr 1y8o1RPJDCzVz5aWb8DGzue4+OKYOC0WI/DLIt7pr2QcI8HV1VuQxSwVbi6/I6F6cUxY hjgFn9/23mwpdL1NU357PKXTu+gDWkbHrKMcZv5Vosa80zVnLMxD3mUB7jWRHOrA/L9Q Ow63H8cmdn54xrSLBR//fEx8/YCDv6XCJu1U4I87U4zCaaYAoKrW1IPM/iCNKwKnwG0o ZJ0A== X-Gm-Message-State: AOJu0Yw3xqW+N++OUwRQSUw6/hxk2mGDqSJUXcBiDra+BQs/COtZFfYW Kr1FqthlPszYEaCdY6gSxVsfjrjhvD5tAbEf6fRCmn9MLQYZlNdhO8k/Xn5l X-Gm-Gg: ASbGncta/dhxCT8FeNd5zFPZ7+CN1jujT9R/fJ+pP+HFBAkQz+oQxrg1MGBzTjBfCo4 1aNClhvvpNP3JXESVQR7FMrkCR0NuMGhFdD5ScvwtYo7Le93LrnSCCiEbBjs5GTey6NfQireCxC /gzWh7cbCe452hZOi6+l+uFjvtBbjRg9pe4f73sS/ZXIzdWHpNx51Dit/hKeX5LjzgLGGSIXicm MIBEcUaFLEIZYg1QOwYqskng+8784vJJEseg0xVZZpcShKj8/mRk879SumloA== X-Google-Smtp-Source: AGHT+IE3bz1lEfcuITEZcUa9QfT2QHt37Px3W0QqlkVUpmg8GPxXcBTQo/HNpNAw5Cyqd2uwOdxwGA== X-Received: by 2002:a05:600c:a4f:b0:435:21a1:b109 with SMTP id 5b1f17b1804b1-4362aa26d8dmr136979485e9.2.1734370053496; Mon, 16 Dec 2024 09:27:33 -0800 (PST) Received: from localhost ([31.210.180.118]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-436255531b1sm149541765e9.2.2024.12.16.09.27.32 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 16 Dec 2024 09:27:33 -0800 (PST) From: Efraim Flashner To: 74609@debbugs.gnu.org Subject: [PATCH 12/21] gnu: Add mono-5.0.1. Date: Mon, 16 Dec 2024 19:26:35 +0200 Message-ID: <3196ffc09aa6c8debefd48dbfbb7dde61518a39c.1734369314.git.efraim@flashner.co.il> X-Mailer: git-send-email 2.46.0 In-Reply-To: References: MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Spam-Score: 0.3 (/) X-Debbugs-Envelope-To: 74609 Cc: aaron.covrig.us@ieee.org, ludo@gnu.org, unmush , richard@freakingpenguin.com, unmush@proton.me, janneke@gnu.org 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: -0.7 (/) From: unmush * gnu/packages/dotnet.scm (mono-5.0.1-external-repo-specs, mono-5.0.1): New variables. Change-Id: I165ef8238c4adddcf92667c34dbb366f98d288bd --- gnu/packages/dotnet.scm | 133 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 133 insertions(+) diff --git a/gnu/packages/dotnet.scm b/gnu/packages/dotnet.scm index e658edf8649..5bebb3929c7 100644 --- a/gnu/packages/dotnet.scm +++ b/gnu/packages/dotnet.scm @@ -836,3 +836,136 @@ (define-public mono-4.9.0 license:mpl1.1 ;; API Documentation license:cc-by4.0)))) + +(define mono-5.0.1-external-repo-specs + '(("aspnetwebstack" "e77b12e6cc5ed260a98447f609e887337e44e299" + "0rks344qr4fmp3fs1264d2qkmm348m8d1kjd7z4l94iiirwn1fq1") + ;; snippet in the actual package will delete all dlls and exes, so this + ;; should be rebuilt from scratch. + (("reference-assemblies" "binary-reference-assemblies") + "febc100f0313f0dc9d75dd1bcea45e87134b5b55" + "0lpj911m2lq23r22dpy4i02fy4ykf27dx8fvqpxsxknysj2jl6y4") + ("bockbuild" "512ba41a94bec35ff0c395eb71a180fda23da95c" + "16m00la8svx8v07sxy4zxbpq0cbq7d3nzy53w8kqml8b18h5dabg") + ("boringssl" "c06ac6b33d3e7442ad878488b9d1100127eff998" + "187zpi1rvh9i6jfccwzqq337rxxi1rgny6mjq79r08dlrh0lydzc") + ("buildtools" "9b6ee8686be55a983d886938165b6206cda50772" + "0sjw3swavcmijynmaxh647qpkjsbgihdr8lhkyzf8dsprhlq4fxd") + ("cecil" "7801534de1bfed97c844821c3244e05fc7ffcfb8" + "0dmfyzkm57n3lbgllx6ffz4g84x1slkib9hb4cfp3nhz852qim7b") + (("cecil" "cecil-legacy") "33d50b874fd527118bc361d83de3d494e8bb55e1" + "1p4hl1796ib26ykyf5snl6cj0lx0v7mjh0xqhjw6qdh753nsjyhb") + ("corefx" "bd96ae5f1485ae8541fe476dfd944efde76bcd9c" + "0j51lc54dmwa4fzna2vjfj4pcd1lk1s5bp5dfix1aqcncyzivazi") + ("corert" "d87c966d80c1274373ddafe3375bf1730cd430ed" + "078v5ks7inm2g1hf96x19k42jnv1qhhh7r8jxrfc7jk4v4lgmqyf") + ("ikdasm" "e4deabf61c11999f200dcea6f6d6b42474cc2131" + "1frbf70y7n7l72j393avdiwk6153cvfwwpighkf2m46clqmq4han") + (("ikvm-fork" "ikvm") "367864ef810859ae3ce652864233b35f2dd5fdbe" + "0ig99kbma4s0mzb13nzsk1vm200ygfr11q6mzgh6jj46s2fc35px") + ("linker" "e4d9784ac37b9ebf4757175c92bc7a3ec9fd867a" + "0ga7br9lqdsycz22dndkbiwbd0c60ml6nl22xlsnjr7lwdccfjvl") + ("Lucene.Net.Light" "85978b7eb94738f516824341213d5e94060f5284" + "0d118i52m3a0vfjhfci81a2kc4qvnj23gs02hrvdrfpd1q92fyii") + ("Newtonsoft.Json" "471c3e0803a9f40a0acc8aeceb31de6ff93a52c4" + "0dgngd5hqk6yhlg40kabn6qdnknm32zcx9q6bm2w31csnsk5978s") + (("NuGet.BuildTasks" "nuget-buildtasks") + "8d307472ea214f2b59636431f771894dbcba7258" + "1h1frnj0x8k7b29ic4jisch0vlpmsmghjw554pz277f2nxaidljj") + (("NUnitLite" "nunit-lite") "690603bea98aae69fca9a65130d88591bc6cabee" + "1f845ysjzs3yd9gcyww66dnkx484z5fknb8l0xz74sjmxk2mngwc") + ;; ("roslyn-binaries" "0d4198b1299bcb019973749da4d47e90f15a1e46" + ;; "") + ("rx" "b29a4b0fda609e0af33ff54ed13652b6ccf0e05e" + "1n1jwhmsbkcv2d806immcpzkb72rz04xy98myw355a8w5ah25yiv"))) + +(define-public mono-5.0.1 + (package + (inherit mono-4.9.0) + (version "5.0.1") + (name "mono") + (source (origin + (method git-fetch) + (uri + (git-reference + (url "https://gitlab.winehq.org/mono/mono.git") + (commit "mono-5.0.1.1"))) + (file-name (git-file-name name version)) + (sha256 + (base32 + "05z9bddljp8xwsw7qw3f7bic8i202wrc60pjb9fn4igwfz9278n5")) + (modules '((guix build utils) + (ice-9 string-fun))) + (snippet #~(begin + #$(add-external-repos + mono-5.0.1-external-repo-specs) + #$@prepare-mono-source-0)))) + (native-inputs (modify-inputs (package-native-inputs mono-4.9.0) + (replace "mono" mono-4.9.0) + (append cmake-minimal))) + (arguments + (substitute-keyword-arguments (package-arguments mono-4.9.0) + ((#:make-flags _ #f) + ;; Build system is buggy here, it does some weird wildcard expansion + ;; that assumes there's only at most one file in a directory + #~(list "V=1" "SKIP_AOT=1")) + ((#:phases phases #~%standard-phases) + #~(modify-phases #$phases + (add-after 'unpack 'disable-roslyn-install + ;; For some reason there is no predefined way to persuade mono to + ;; not install the binary blobs it assumes are there. + (lambda _ + (substitute* "mcs/packages/Makefile" + (("^install-local:") + (string-append "install-local: + echo \"Skipping blob install\" + +unused0:"))))) + (delete 'use-old-mono-libraries) + (add-after 'build 'build-reference-assemblies + (lambda* (#:key make-flags #:allow-other-keys) + (let ((top (getcwd))) + (with-directory-excursion "external/binary-reference-assemblies" + ;; No clue why all these references are missing, just + ;; power through I guess. + (substitute* (find-files "." "^Makefile$") + (("CSC_COMMON_ARGS := " all) + (string-append all "-delaysign+ ")) + (("IBM\\.Data\\.DB2_REFS := " all) + (string-append all "System.Xml ")) + (("Mono\\.Data\\.Sqlite_REFS := " all) + (string-append all "System.Xml ")) + (("System\\.Data\\.DataSetExtensions_REFS := " all) + (string-append all "System.Xml ")) + (("System\\.Data\\.OracleClient_REFS := " all) + (string-append all "System.Xml ")) + (("System\\.IdentityModel_REFS := " all) + (string-append all "System.Configuration ")) + (("System\\.Design_REFS := " all) + (string-append all "Accessibility ")) + (("System\\.Web\\.Extensions\\.Design_REFS := " all) + (string-append all "System.Windows.Forms System.Web ")) + (("System\\.ServiceModel\\.Routing_REFS := " all) + (string-append all "System.Xml ")) + (("System\\.Web\\.Abstractions_REFS := " all) + (string-append all "System ")) + (("System\\.Reactive\\.Windows\\.Forms_REFS := " all) + (string-append all "System ")) + (("System\\.Windows\\.Forms\\.DataVisualization_REFS := " all) + (string-append all "Accessibility ")) + (("Facades/System\\.ServiceModel\\.Primitives_REFS := " all) + (string-append all "System.Xml ")) + (("Facades/System\\.Dynamic\\.Runtime_REFS := " all) + (string-append all "System ")) + (("Facades/System\\.Xml\\.XDocument_REFS := " all) + (string-append all "System.Xml ")) + (("Facades/System\\.Runtime\\.Serialization.Xml_REFS := " all) + (string-append all "System.Xml "))) + (apply invoke "make" + (string-append "CSC=MONO_PATH=" + top "/mcs/class/lib/build" + " " + top "/runtime/mono-wrapper" + " " + top "/mcs/class/lib/build/mcs.exe") + make-flags))))))))))) -- Efraim Flashner אפרים פלשנר GPG key = A28B F40C 3E55 1372 662D 14F7 41AA E7DC CA3D 8351 Confidentiality cannot be guaranteed on emails sent or received unencrypted From debbugs-submit-bounces@debbugs.gnu.org Mon Dec 16 12:28:53 2024 Received: (at 74609) by debbugs.gnu.org; 16 Dec 2024 17:28:53 +0000 Received: from localhost ([127.0.0.1]:55869 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1tNEto-0006IC-JC for submit@debbugs.gnu.org; Mon, 16 Dec 2024 12:28:53 -0500 Received: from mail-wm1-f51.google.com ([209.85.128.51]:61718) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1tNEtd-0006Gi-E6 for 74609@debbugs.gnu.org; Mon, 16 Dec 2024 12:28:42 -0500 Received: by mail-wm1-f51.google.com with SMTP id 5b1f17b1804b1-4361d5dcf5bso48110595e9.3 for <74609@debbugs.gnu.org>; Mon, 16 Dec 2024 09:28:41 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1734370056; x=1734974856; darn=debbugs.gnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:sender:from:to:cc:subject:date :message-id:reply-to; bh=uuz9IMvRuMnT8TPajDl1d+2VQVw/RJsXSjHUW6mSYGQ=; b=kcxEQSUpx7Jb0KcHa/3uxsBSA9fEj1SrlhF03iW4iWlsuPCHWOWhz5xCODCri2ihMK GseePgKOCajoa0WKQd85wh+P4sJlyZ6ar80Ip3nsdOJiPptV1L3Orh900nAzlTXS/Le6 +/02ttNAV23bnu1rS33xJ8IckPNdpxkQHbk+c654SKcJicHJDspLUeDWipRKcy6GMteF 4aC5nFpDBQ/0odTcFy38so9Q4JUl0m7p1Qw/qgmuULgzeno2MKR/uSOR+ntKpOaGkY8j 1HlQwiiGCfem5MfCUc7/KkZ6OC+xY4Bat91MXzZ85oQY2Vkr2mmRIB0RR6Q5vvjJyvDf w1bA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1734370056; x=1734974856; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:sender:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=uuz9IMvRuMnT8TPajDl1d+2VQVw/RJsXSjHUW6mSYGQ=; b=FNh9z/4Z7d4tndxT8o1loyKE8G3z+74GwEj6nuT+7CYxgkBhbOXNgSA18Bzk8DyB1j xkVPIQ9jRr3okiHHf4vrYgOPkgtFlCUvOB5jkbOAEWcc1ZM7fbkioz65xOYKFsZZmA61 2v0RvkCg4FkvazN+5moArrCocMil2HRyu1Zk+asHvHVklWeTX4v9z2hgsSTlszw2piLL QBvVDcZp2VNDVqdoDzz6QQr4cyClSyS+B+CRN4KxhQEShBf2PQpHE3h6hTHlwPDE6wvm VgJPb3vlT7WLtmnuRg12O4BUYPWBDX4MLDc+UPX55UPO0ZQkE69UKvFY2JZb3Kw2+sDz 6B0w== X-Gm-Message-State: AOJu0Yw75m7oQo9Dki6je8CYqccODtXDtoKeMMnuz0HAkSmdM1BD+Je8 bzF4me/GZfpDUr9C1Q4nOr5VoU6hgXMfvqF9XcNjnb1fs2veWVwA791gF357 X-Gm-Gg: ASbGncshdIeZj3OoQOG84bEzdtd50jvdOLZkHaGHdEMvd5eE2uMtLu1iXjQoDJ5TXEV v/b2da5drbtnuzYrFEdMiD4QrbeXSM770eDGpVNIg0l0hNoaPcwtCfO10ND5BDEG/gR2yoXMVMv +vJdZiR7VNLJYh5MTUHJdj5XClAaBwgDZLWvkQNHGJs3HWQ1kf/tg8d/CGXGP6e84qoSWzBf28Z /vrQqqMWpcdyy85FBwOP2GDfrB/EwGqo/m6D2PCmNFJhgMv5mVQyQgUCOjj3A== X-Google-Smtp-Source: AGHT+IH1BbEP38eKSsImH148S66Xq/0PfrASIqOuJDUh9oF6claRtaBD0z9XXq96dEurC/VgkTk7rA== X-Received: by 2002:a5d:64e9:0:b0:385:e1a8:e28e with SMTP id ffacd0b85a97d-38880ac2197mr11441379f8f.10.1734370055587; Mon, 16 Dec 2024 09:27:35 -0800 (PST) Received: from localhost ([31.210.180.118]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-388c8046c05sm8870321f8f.73.2024.12.16.09.27.34 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 16 Dec 2024 09:27:35 -0800 (PST) From: Efraim Flashner To: 74609@debbugs.gnu.org Subject: [PATCH 13/21] gnu: Add mono-5.1.0. Date: Mon, 16 Dec 2024 19:26:36 +0200 Message-ID: X-Mailer: git-send-email 2.46.0 In-Reply-To: References: MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Spam-Score: 0.3 (/) X-Debbugs-Envelope-To: 74609 Cc: aaron.covrig.us@ieee.org, ludo@gnu.org, unmush , richard@freakingpenguin.com, unmush@proton.me, janneke@gnu.org 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: -0.7 (/) From: unmush * gnu/packages/dotnet.scm (mono-5.1.0-external-repo-specs, mono-5.1.0): New variables. Change-Id: Ie58e20f75920ee0492e977c82a2e302311793946 --- gnu/packages/dotnet.scm | 68 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 68 insertions(+) diff --git a/gnu/packages/dotnet.scm b/gnu/packages/dotnet.scm index 5bebb3929c7..50961ee483a 100644 --- a/gnu/packages/dotnet.scm +++ b/gnu/packages/dotnet.scm @@ -969,3 +969,71 @@ (define-public mono-5.0.1 " " top "/mcs/class/lib/build/mcs.exe") make-flags))))))))))) + +(define mono-5.1.0-external-repo-specs + '(("aspnetwebstack" "e77b12e6cc5ed260a98447f609e887337e44e299" + "0rks344qr4fmp3fs1264d2qkmm348m8d1kjd7z4l94iiirwn1fq1") + (("reference-assemblies" "binary-reference-assemblies") + "febc100f0313f0dc9d75dd1bcea45e87134b5b55" + "0lpj911m2lq23r22dpy4i02fy4ykf27dx8fvqpxsxknysj2jl6y4") + ("bockbuild" "fd1d6c404d763c98b6f0e64e98ab65f92e808245" + "0l2n9863j5y20lp3fjcpbb0a9jcfk0kqmnzlsw20qchd05rjgyb0") + ("boringssl" "c06ac6b33d3e7442ad878488b9d1100127eff998" + "187zpi1rvh9i6jfccwzqq337rxxi1rgny6mjq79r08dlrh0lydzc") + ("buildtools" "b5cc6e6ab5f71f6c0be7b730058b426e92528479" + "0ldj5l4p4q8j9dhk0nifr3m0i64csvb56wlc2xd4zy80sfgmjn06") + ("cecil" "44bc86223530a07fa74ab87007cf264e53d63400" + "0smsa8i4709y1nky3hshj7ayxhjcc17wlnfdvhfay7ly5dxml84g") + (("cecil" "cecil-legacy") "33d50b874fd527118bc361d83de3d494e8bb55e1" + "1p4hl1796ib26ykyf5snl6cj0lx0v7mjh0xqhjw6qdh753nsjyhb") + ("corefx" "63c51e726292149b4868db71baa883e5ad173766" + "1406rbra83k6gw2dnnsfqcfwiy1h89y6lq64ma5rckmb5drb0ng9") + ("corert" "31eda261991f9f6c1add1686b6d3799f835b2978" + "0s0pd4m9070xlx238fdhqf2b3iyd2vzff3f0sxlyi8s0lhsrl8zv") + ("ikdasm" "88b67c42ca8b7d58141c176b46749819bfcef166" + "0b0b1dhg80r640n81iqawwkxi1k289n4zxjfj0ldd9rkvfxvlwaw") + (("ikvm-fork" "ikvm") "7c1e61bec8c069b2cc9e214c3094b147d76bbf82" + "0vmc5r4j76hkd4zis1769ppdl1h1l7z8cld0y4p1m64n86ghkzfn") + ("linker" "1bdcf6b7bfbe3b03fdaa76f6124d0d7374f08615" + "1xx6s8dcgcz803yvqgzhcgmj16c9s8vrvvl8k4y0xma5w51kn23k") + ("Lucene.Net.Light" "85978b7eb94738f516824341213d5e94060f5284" + "0d118i52m3a0vfjhfci81a2kc4qvnj23gs02hrvdrfpd1q92fyii") + ("Newtonsoft.Json" "471c3e0803a9f40a0acc8aeceb31de6ff93a52c4" + "0dgngd5hqk6yhlg40kabn6qdnknm32zcx9q6bm2w31csnsk5978s") + (("NuGet.BuildTasks" "nuget-buildtasks") + "04bdab55d8de9edcf628694cfd2001561e8f8e60" + "1nklxayxkdskg5wlfl44cndzqkl18v561rz03hwx7wbn5w89q775") + (("NUnitLite" "nunit-lite") "690603bea98aae69fca9a65130d88591bc6cabee" + "1f845ysjzs3yd9gcyww66dnkx484z5fknb8l0xz74sjmxk2mngwc") + ;; ("roslyn-binaries" "0d4198b1299bcb019973749da4d47e90f15a1e46" + ;; "") + ("rx" "b29a4b0fda609e0af33ff54ed13652b6ccf0e05e" + "1n1jwhmsbkcv2d806immcpzkb72rz04xy98myw355a8w5ah25yiv") + ;; ("xunit-binaries" "b8e20d265b368dd6252703d5afd038d0b028e388" + ;; "") + )) + +(define-public mono-5.1.0 + (package + (inherit mono-5.0.1) + (version "5.1.0") + (name "mono") + (source (origin + (method git-fetch) + (uri + (git-reference + (url "https://gitlab.winehq.org/mono/mono.git") + (commit + "6fafd08b507c56f11a2eb6570703a39e5bdc0a81"))) + (file-name (git-file-name name version)) + (sha256 + (base32 + "1sxq40nay5ghhmfbdln98iri19y0h7q36r3pqnxmxnm94livx2k5")) + (modules '((guix build utils) + (ice-9 string-fun))) + (snippet #~(begin + #$(add-external-repos + mono-5.1.0-external-repo-specs) + #$@prepare-mono-source-0)))) + (native-inputs (modify-inputs (package-native-inputs mono-5.0.1) + (replace "mono" mono-5.0.1))))) -- Efraim Flashner אפרים פלשנר GPG key = A28B F40C 3E55 1372 662D 14F7 41AA E7DC CA3D 8351 Confidentiality cannot be guaranteed on emails sent or received unencrypted From debbugs-submit-bounces@debbugs.gnu.org Mon Dec 16 12:28:53 2024 Received: (at 74609) by debbugs.gnu.org; 16 Dec 2024 17:28:53 +0000 Received: from localhost ([127.0.0.1]:55871 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1tNEtp-0006IE-47 for submit@debbugs.gnu.org; Mon, 16 Dec 2024 12:28:53 -0500 Received: from mail-wm1-f52.google.com ([209.85.128.52]:43298) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1tNEtf-0006Gl-Ib for 74609@debbugs.gnu.org; Mon, 16 Dec 2024 12:28:44 -0500 Received: by mail-wm1-f52.google.com with SMTP id 5b1f17b1804b1-43626213fffso25516395e9.1 for <74609@debbugs.gnu.org>; Mon, 16 Dec 2024 09:28:43 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1734370058; x=1734974858; darn=debbugs.gnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:sender:from:to:cc:subject:date :message-id:reply-to; bh=YVfD4rUSJVTsimqNalaAXoDf/N5cbdB8ABLEhNTtL8c=; b=F1shbdTTFVCL6MS3PRaBTFSp+WhScORF6OhzdlOcGu/2KwYhey0uTGGJkubXkJnGfR TystDi+G8mFHmK2YEW/u2+pRSCTRqin9YNvVRPY7aqVMKKJ0lw3SKCLnucf1BhOJcE1c gvkRqhlXBwMWbKbYSaEERz95IkWXjMVPEm52WP5ac12lrff7N8yrVEtylTBmob/+mE1q osNehPNyK1xw4c1zgVvb+p7tKT6JUqLr2PaOamcozeeTaqXy3u7hXaMPDv/8/inXeO2a kThdl6zzNr11GsSuzL+X/Vb/DFFkU2I9dphlBJckNp52dFc45ORNzLN8nE1f0NBEjEKS 5Q/g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1734370058; x=1734974858; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:sender:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=YVfD4rUSJVTsimqNalaAXoDf/N5cbdB8ABLEhNTtL8c=; b=wJDeB+yjYMWAbJFAmSQL/hzo2MZB1JOfO8h6EM9AjRcSfev1c7YfaiIhS8Q5ifZIAP Fz4I2XQJfH0wHk6Y73ixgl5e7AG4oz39ouXiqmnrGreOrxDWa05uT9purDPm778Tq4lI gmEdlkfqHhY4plf0FGHxLoodInamFALpdfzRQvxyi0N/LUem3jPlS5TR+nUu7quDaCuf /FReC9PrdwQTkwGUeqKijzARi9u8x4N71oVFBFbx2SUm3QGoHtU+CHDw0YgFd3klBPDr RC/Od6yT52Sm648qBUiojLUTVh2YUHgEDVpi9v/nnGNKHqET287ERSkuNTh8IiqTNaWv xpLQ== X-Gm-Message-State: AOJu0YyUBeLe5AUBuU2dp00LX4X7o5EGqWKWYVE3gVB8LpB79/a0T3z1 vgz5RmQfGv6m8+Gf3BxSFST8/L3MkrW+6QsM5JOpSSCpbMEZ9fh5JKg9Md8/ X-Gm-Gg: ASbGnctuYl9gdzo3zL0/nzjtOPPXQ3Ich27hJA04Z/+s4F8yM3hchUKS7hfcSJox9wj g05sraEVtNIrZVHMHyZcgaUuLlx+9J1D5Ov/5gNjjZwB1v6fR5y/hCu/NdZEBA7krTydZNazRgQ pqPJcfmx6P5hUKN0N7+r26Pq19dQAd96awAzSwfPOXEKCpGCckS4edIXZLOEm8OF7mHOfx4f5F4 FCg3KgWtFRXzwL8Q/OrW7QCzM46jGYhQXtN5xOEK6S0oE8uvb1mqtp/c3EN3w== X-Google-Smtp-Source: AGHT+IHQfBNz2EudcW510AcPRT0YD8teoE9V8W3uGxEtKbNeSdcUITtlhCT7VOEvxlyAzIySB8vA1w== X-Received: by 2002:a05:600c:4709:b0:435:1a2:262a with SMTP id 5b1f17b1804b1-43648131464mr1682615e9.3.1734370057845; Mon, 16 Dec 2024 09:27:37 -0800 (PST) Received: from localhost ([31.210.180.118]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-43625706c5fsm145839665e9.31.2024.12.16.09.27.36 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 16 Dec 2024 09:27:37 -0800 (PST) From: Efraim Flashner To: 74609@debbugs.gnu.org Subject: [PATCH 14/21] gnu: Add mono-5.2.0. Date: Mon, 16 Dec 2024 19:26:37 +0200 Message-ID: <7ead09b1f644a0eceb3b7a7d68a5211d13309698.1734369314.git.efraim@flashner.co.il> X-Mailer: git-send-email 2.46.0 In-Reply-To: References: MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Spam-Score: 0.3 (/) X-Debbugs-Envelope-To: 74609 Cc: aaron.covrig.us@ieee.org, ludo@gnu.org, unmush , richard@freakingpenguin.com, unmush@proton.me, janneke@gnu.org 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: -0.7 (/) From: unmush * gnu/packages/dotnet.scm (mono-5.2.0-external-repo-specs, mono-5.2.0): New variables. Change-Id: I089850bfd50f229af5a236bbc39ee9ae4787ef9f --- gnu/packages/dotnet.scm | 67 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 67 insertions(+) diff --git a/gnu/packages/dotnet.scm b/gnu/packages/dotnet.scm index 50961ee483a..cf391ed9200 100644 --- a/gnu/packages/dotnet.scm +++ b/gnu/packages/dotnet.scm @@ -1037,3 +1037,70 @@ (define-public mono-5.1.0 #$@prepare-mono-source-0)))) (native-inputs (modify-inputs (package-native-inputs mono-5.0.1) (replace "mono" mono-5.0.1))))) + +(define mono-5.2.0-external-repo-specs + '(("aspnetwebstack" "e77b12e6cc5ed260a98447f609e887337e44e299" + "0rks344qr4fmp3fs1264d2qkmm348m8d1kjd7z4l94iiirwn1fq1") + (("reference-assemblies" "binary-reference-assemblies") + "142cbeb62ffabf1dd9c1414d8dd76f93bcbed0c2" + "1wkd589hgb16m5zvmp9yb57agyyryaa1jj8vhl4w20i2hp22wad9") + ("bockbuild" "45aa142fa322f5b41051e7f40008f03346a1e119" + "1sjlgzh3hq251k729a1px707c1q2gnfayghgx1z5qyddnyaxna20") + ("boringssl" "3e0770e18835714708860ba9fe1af04a932971ff" + "139a0gl91a52k2r6na6ialzkqykaj1rk88zjrkaz3sdxx7nmmg6y") + ("buildtools" "b5cc6e6ab5f71f6c0be7b730058b426e92528479" + "0ldj5l4p4q8j9dhk0nifr3m0i64csvb56wlc2xd4zy80sfgmjn06") + ("cecil" "362e2bb00fa693d04c2d140a4cd313eb82c78d95" + "0bvaavlnldrja8ixb66bg33kz05950vm5sk4pz0k0zjgspfgpcvd") + (("cecil" "cecil-legacy") "33d50b874fd527118bc361d83de3d494e8bb55e1" + "1p4hl1796ib26ykyf5snl6cj0lx0v7mjh0xqhjw6qdh753nsjyhb") + ("corefx" "78360b22e71b70de1d8cc9588cb4ef0040449c31" + "1wrszafyar7q1cdfba68xd6b4d54p3iim2czmxblms1yw19ycqm7") + ("corert" "ed6296dfbb88d66f08601c013caee30c88c41afa" + "179q1aiq44bzdckg1xqm6iwyx835cp6161w5vgsfrgbw0p3kidxr") + ("ikdasm" "88b67c42ca8b7d58141c176b46749819bfcef166" + "0b0b1dhg80r640n81iqawwkxi1k289n4zxjfj0ldd9rkvfxvlwaw") + (("ikvm-fork" "ikvm") "7c1e61bec8c069b2cc9e214c3094b147d76bbf82" + "0vmc5r4j76hkd4zis1769ppdl1h1l7z8cld0y4p1m64n86ghkzfn") + ("linker" "c7450ca2669becddffdea7dcdcc06692e57989e1" + "0vd1vw6hqm1p127m6079p9n4xrckrf4iakvj41hnqfwws94w5mv1") + ("Lucene.Net.Light" "85978b7eb94738f516824341213d5e94060f5284" + "0d118i52m3a0vfjhfci81a2kc4qvnj23gs02hrvdrfpd1q92fyii") + ("Newtonsoft.Json" "471c3e0803a9f40a0acc8aeceb31de6ff93a52c4" + "0dgngd5hqk6yhlg40kabn6qdnknm32zcx9q6bm2w31csnsk5978s") + (("NuGet.BuildTasks" "nuget-buildtasks") + "8d307472ea214f2b59636431f771894dbcba7258" + "1h1frnj0x8k7b29ic4jisch0vlpmsmghjw554pz277f2nxaidljj") + (("NUnitLite" "nunit-lite") "690603bea98aae69fca9a65130d88591bc6cabee" + "1f845ysjzs3yd9gcyww66dnkx484z5fknb8l0xz74sjmxk2mngwc") + ;; ("roslyn-binaries" "dcb0a0534d5104eaf945d3d1f319dc33044b7bbe" + ;; "") + ("rx" "b29a4b0fda609e0af33ff54ed13652b6ccf0e05e" + "1n1jwhmsbkcv2d806immcpzkb72rz04xy98myw355a8w5ah25yiv") + ;; ("xunit-binaries" "b8e20d265b368dd6252703d5afd038d0b028e388" + ;; "") + )) + +(define-public mono-5.2.0 + (package + (inherit mono-5.1.0) + (version "5.2.0.224") + (name "mono") + (source (origin + (method git-fetch) + (uri + (git-reference + (url "https://gitlab.winehq.org/mono/mono.git") + (commit "mono-5.2.0.224"))) + (file-name (git-file-name name version)) + (sha256 + (base32 + "0zsgfqyjkpix05gvgvhqyyqcwcjp5xlvcyv471q32qf307dccbfa")) + (modules '((guix build utils) + (ice-9 string-fun))) + (snippet #~(begin + #$(add-external-repos + mono-5.2.0-external-repo-specs) + #$@prepare-mono-source-0)))) + (native-inputs (modify-inputs (package-native-inputs mono-5.1.0) + (replace "mono" mono-5.1.0))))) -- Efraim Flashner אפרים פלשנר GPG key = A28B F40C 3E55 1372 662D 14F7 41AA E7DC CA3D 8351 Confidentiality cannot be guaranteed on emails sent or received unencrypted From debbugs-submit-bounces@debbugs.gnu.org Mon Dec 16 12:28:58 2024 Received: (at 74609) by debbugs.gnu.org; 16 Dec 2024 17:28:58 +0000 Received: from localhost ([127.0.0.1]:55873 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1tNEtp-0006IN-L6 for submit@debbugs.gnu.org; Mon, 16 Dec 2024 12:28:57 -0500 Received: from mail-wr1-f48.google.com ([209.85.221.48]:56801) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1tNEtg-0006HX-9w for 74609@debbugs.gnu.org; Mon, 16 Dec 2024 12:28:49 -0500 Received: by mail-wr1-f48.google.com with SMTP id ffacd0b85a97d-385ddcfc97bso3684874f8f.1 for <74609@debbugs.gnu.org>; Mon, 16 Dec 2024 09:28:44 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1734370064; x=1734974864; darn=debbugs.gnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:sender:from:to:cc:subject:date :message-id:reply-to; bh=FJzf3Yu805ZxZjOLZlalAc92J1yXEvJu2+FSS76YD48=; b=NDEPElQJbREjX12eaZW5Endd0pVxgCD11KGo0+U7VH3Gk1JqqKqffNahJMWNlaOvhs 5KnoaCDBi/yxzvLlsRpk/PrwQUnfsJ2zKBZ464HLth+5aI2x8DbP2Tm4kSOvCF+7Rrdx Ag/9UTE1M0B+R4r4wDs2CdNSiF3FL/U3Q6eXdqC1kiW/26xAIlEoWer3JV1kBCcBBS5D VySPW7DHKNP/2BR0Xnl3MnB2jq7jqcnPb5HkT+CPc1dFXEm/NUpf9zlkif97kQqIh+eJ FbGD6vt5r2hfSBSTd+UX5+dNUQ18BNUMqS7Eh0FVucvdRt40EY+5Ht3LLbfbjUf3zkAo 2v8Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1734370064; x=1734974864; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:sender:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=FJzf3Yu805ZxZjOLZlalAc92J1yXEvJu2+FSS76YD48=; b=DFu553aNYNv2PrF2MuwhelfK5relRYiRGTLEFXS/VHSCSBQFOSAVZ4/7qRvwVU/si5 e8y8lkSZW/cKC1TB8dsj0ms4n8RKPiXSqu+8AnMmTodfznvNp7KjKO5xwCGBtXoP90nm 52VNgwTG5z3jF3Q44Yneq7PrvDXE+kZgQVPbdKCWWADgue1zjWEtGozfEKxoXiJD9/Gj s3q26gVBqqt8gaiXlf3W3TF2r1+7cCeF2AkdfISfZU/rrnSVX45SWdHxqU6XsLP/8xRG W7YVNlbRdeT4DjKGEtwfNF8zRf6ylfoddUyySMjLHFtph+UDMrKWUlLXtf0hvTRoQbv/ +Bpw== X-Gm-Message-State: AOJu0YyRprNQqWD21q6hhIkisAvMLD8mkHRAyYpkMAKLErRb094fd7Xx rtEZbVxyBa9mu3l4QdZAiykW8LwdXPPB2W6qRCNXmiz0SBApvfuYq4A9ArpR X-Gm-Gg: ASbGncsVagP6vyImav16G0dFqH/x26WrxjkzhkHuTDPvIhxSA2FFy5G3cOC375qlv5U 9u9IkzPy+QeBx1lCkmrygIg8xGzgLVRw8CrbsuGIzwNHnj4cUexHweJ7d6yRGvNl/2/R1mA7d2G NKo7XiuXbZ41Sgr0DMkpzZ6HLDdkm8a6W8VSg734KXCZ96z8N9HTSoduKcfPZIf+KWOoeOiNaCu 2ZN6U60Wz3zOpYLPJjiAOA+gLvHkl5FrjYwHaqQOzxd0Z1GpbUWsOnE1CVL6w== X-Google-Smtp-Source: AGHT+IFLjs1Sst3K48TSGDE7Z3/S98glYPxjA+GotnPAHRDmoPvXG0agPnxQVsCSmUVmGKd6y1P4BQ== X-Received: by 2002:a05:6000:4615:b0:386:2ebe:7ac3 with SMTP id ffacd0b85a97d-3889ad37d13mr11206367f8f.56.1734370063138; Mon, 16 Dec 2024 09:27:43 -0800 (PST) Received: from localhost ([31.210.180.118]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-388c801211dsm8688480f8f.17.2024.12.16.09.27.41 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 16 Dec 2024 09:27:42 -0800 (PST) From: Efraim Flashner To: 74609@debbugs.gnu.org Subject: [PATCH 16/21] gnu: Add mono-pre-5.8.0. Date: Mon, 16 Dec 2024 19:26:39 +0200 Message-ID: X-Mailer: git-send-email 2.46.0 In-Reply-To: References: MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Spam-Score: 0.3 (/) X-Debbugs-Envelope-To: 74609 Cc: aaron.covrig.us@ieee.org, ludo@gnu.org, unmush , richard@freakingpenguin.com, unmush@proton.me, janneke@gnu.org 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: -0.7 (/) From: unmush * gnu/packages/dotnet.scm (mono-pre-5.8.0-external-repo-specs, mono-pre-5.8.0): New variable. * gnu/packages/patches/corefx-mono-pre-5.8.0-patches.patch: New patch. * gnu/local.mk (dist_patch_DATA): Register new patch. Change-Id: Id573b051e01980867a07032f339fdb2829b2a413 --- gnu/local.mk | 1 + gnu/packages/dotnet.scm | 79 + .../corefx-mono-pre-5.8.0-patches.patch | 1349 +++++++++++++++++ 3 files changed, 1429 insertions(+) create mode 100644 gnu/packages/patches/corefx-mono-pre-5.8.0-patches.patch diff --git a/gnu/local.mk b/gnu/local.mk index aa129d89d58..788f3bb835a 100644 --- a/gnu/local.mk +++ b/gnu/local.mk @@ -1115,6 +1115,7 @@ dist_patch_DATA = \ %D%/packages/patches/cool-retro-term-wctype.patch \ %D%/packages/patches/coq-autosubst-1.8-remove-deprecated-files.patch \ %D%/packages/patches/corefx-mono-5.4.0-patches.patch \ + %D%/packages/patches/corefx-mono-pre-5.8.0-patches.patch \ %D%/packages/patches/coreutils-gnulib-tests.patch \ %D%/packages/patches/cppcheck-disable-char-signedness-test.patch \ %D%/packages/patches/cppdap-add-CPPDAP_USE_EXTERNAL_GTEST_PACKAGE.patch\ diff --git a/gnu/packages/dotnet.scm b/gnu/packages/dotnet.scm index b4355b048e2..7799f9b951a 100644 --- a/gnu/packages/dotnet.scm +++ b/gnu/packages/dotnet.scm @@ -1196,3 +1196,82 @@ (define-public mono-5.4.0 "mono-5.4.0-patches.patch")))) (native-inputs (modify-inputs (package-native-inputs mono-5.2.0) (replace "mono" mono-5.2.0))))) + +(define mono-pre-5.8.0-external-repo-specs + '(("api-doc-tools" "d03e819838c6241f92f90655cb448cc47c9e8791" + "1riki79f3ig3cxigviss81dz601hn92a1gifglm0mzjbs76sf3fj" + #:recursive? #t) + ("api-snapshot" "e790a9b77031ef1d8ebf093ef88840edea11ed73" + "1c4np2fqd9mpc1i1x8bsxnypacp58vkvgdwpnmvmlyjdvbj5ax6q") + ("aspnetwebstack" "e77b12e6cc5ed260a98447f609e887337e44e299" + "0rks344qr4fmp3fs1264d2qkmm348m8d1kjd7z4l94iiirwn1fq1") + (("reference-assemblies" "binary-reference-assemblies") + "142cbeb62ffabf1dd9c1414d8dd76f93bcbed0c2" + "1wkd589hgb16m5zvmp9yb57agyyryaa1jj8vhl4w20i2hp22wad9") + ("bockbuild" "b445017309aac741a26d8c51bb0636234084bf23" + "1jzhvavd1j0n7sy1waczgjv0kmrbr35gkzd76fhlmqvsy0sr9695") + ("boringssl" "3e0770e18835714708860ba9fe1af04a932971ff" + "139a0gl91a52k2r6na6ialzkqykaj1rk88zjrkaz3sdxx7nmmg6y") + ("cecil" "c76ba7b410447fa37093150cb7bc772cba28a0ae" + "0ydi7rn8ajqyvnj9agyn74llb4qgd9kgdcg3gajdfyb2klxx6za8") + (("cecil" "cecil-legacy") "33d50b874fd527118bc361d83de3d494e8bb55e1" + "1p4hl1796ib26ykyf5snl6cj0lx0v7mjh0xqhjw6qdh753nsjyhb") + ("corefx" "74ccd8aa00d7d271191ca3b9c4f818268dc36c28" + "0nm41qdpvj62r8bxnf92m7kimjm1i544ygdqz5a7pgc6zf99as6j" + #:patches ("corefx-mono-pre-5.8.0-patches.patch")) + ("corert" "48dba73801e804e89f00311da99d873f9c550278" + "1zw47jf4cwqmaixylisxi73xf6cap41bwf9vlmpxanzxaqklzsvk") + ("ikdasm" "3aef9cdd6013fc0620a1817f0b11d8fb90ed2e0f" + "078cai33x8c71969iwi7hmbqdfwpicpmam2ag3k2bklpva2vnszv") + (("ikvm-fork" "ikvm") "847e05fced5c9a41ff0f24f1f9d40d5a8a5772c1" + "1fl9bm3lmzf8iqv3x4iqkz9fc54mwdvrxisxg2nvwwcsi4saffpi") + ("linker" "21e445c26c69ac3a2e1441befa02d0bd105ff849" + "1hx3ik0sg70ysc2y8jdjxm2ljql0069i05i8fp1lakx7s7z7bywc") + ("Newtonsoft.Json" "471c3e0803a9f40a0acc8aeceb31de6ff93a52c4" + "0dgngd5hqk6yhlg40kabn6qdnknm32zcx9q6bm2w31csnsk5978s") + (("NuGet.BuildTasks" "nuget-buildtasks") + "8d307472ea214f2b59636431f771894dbcba7258" + "1h1frnj0x8k7b29ic4jisch0vlpmsmghjw554pz277f2nxaidljj") + (("NUnitLite" "nunit-lite") "690603bea98aae69fca9a65130d88591bc6cabee" + "1f845ysjzs3yd9gcyww66dnkx484z5fknb8l0xz74sjmxk2mngwc") + ;; ("roslyn-binaries" "80b86f340b7f6fb7afe84443214e1cbd7ff70620" + ;; "") + ("rx" "b29a4b0fda609e0af33ff54ed13652b6ccf0e05e" + "1n1jwhmsbkcv2d806immcpzkb72rz04xy98myw355a8w5ah25yiv") + ;; ("xunit-binaries" "d4433b0972f40cb3efaa3fbba52869bde5df8fa8" + ;; "") + )) + +(define-public mono-pre-5.8.0 + (let ((commit "d0f51b4e834042cfa593748ada942033b458cc40") + (version "5.4.0.201") + (revision "0")) + (package + (inherit mono-5.4.0) + (version (git-version version revision commit)) + (name "mono") + (source (origin + (method git-fetch) + (uri + (git-reference + (url "https://gitlab.winehq.org/mono/mono.git") + (commit commit))) + (file-name (git-file-name name version)) + (sha256 + (base32 + "0az5syk1nn9gd5imkbmpb13qm9q6ibr2d2ksdzpwsarkfyp4ic53")) + (modules '((guix build utils) + (ice-9 string-fun))) + (snippet #~(begin + #$(add-external-repos + mono-pre-5.8.0-external-repo-specs) + #$@prepare-mono-source-0)) + (patches + (search-patches "mono-5.4.0-patches.patch")))) + (native-inputs (modify-inputs (package-native-inputs mono-5.4.0) + (replace "mono" mono-5.4.0))) + (arguments + (substitute-keyword-arguments (package-arguments mono-5.4.0) + ((#:phases phases #~%standard-phases) + #~(modify-phases #$phases + (delete 'patch-sub-autogen.sh-shebang)))))))) diff --git a/gnu/packages/patches/corefx-mono-pre-5.8.0-patches.patch b/gnu/packages/patches/corefx-mono-pre-5.8.0-patches.patch new file mode 100644 index 00000000000..04dcc6c5a50 --- /dev/null +++ b/gnu/packages/patches/corefx-mono-pre-5.8.0-patches.patch @@ -0,0 +1,1349 @@ +diff --git a/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/ExpressionTreeCallRewriter.cs b/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/ExpressionTreeCallRewriter.cs +index aa8afa5a1b..3a2518246a 100644 +--- a/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/ExpressionTreeCallRewriter.cs ++++ b/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/ExpressionTreeCallRewriter.cs +@@ -246,8 +246,9 @@ namespace Microsoft.CSharp.RuntimeBinder + ExprArrayInit arrinit; + + ExprList list = (ExprList)pExpr.OptionalArguments; +- if (list.OptionalNextListNode is ExprList next) ++ if (list.OptionalNextListNode is ExprList) + { ++ ExprList next = (ExprList)list.OptionalNextListNode; + methinfo = (ExprMethodInfo)next.OptionalElement; + arrinit = (ExprArrayInit)next.OptionalNextListNode; + } +@@ -382,8 +383,9 @@ namespace Microsoft.CSharp.RuntimeBinder + Expr nextNode = list.OptionalNextListNode; + ExprPropertyInfo propinfo; + ExprArrayInit arguments; +- if (nextNode is ExprList nextList) ++ if (nextNode is ExprList) + { ++ ExprList nextList = (ExprList)list.OptionalNextListNode; + propinfo = nextList.OptionalElement as ExprPropertyInfo; + arguments = nextList.OptionalNextListNode as ExprArrayInit; + } +@@ -553,8 +555,9 @@ namespace Microsoft.CSharp.RuntimeBinder + list = (ExprList)list.OptionalNextListNode; + MethodInfo methodInfo; + bool bIsLifted = false; +- if (list.OptionalNextListNode is ExprList next) ++ if (list.OptionalNextListNode is ExprList) + { ++ ExprList next = (ExprList)list.OptionalNextListNode; + ExprConstant isLifted = (ExprConstant)next.OptionalElement; + Debug.Assert(isLifted != null); + bIsLifted = isLifted.Val.Int32Val == 1; +@@ -677,8 +680,9 @@ namespace Microsoft.CSharp.RuntimeBinder + + private Expression GetExpression(Expr pExpr) + { +- if (pExpr is ExprWrap wrap) ++ if (pExpr is ExprWrap) + { ++ ExprWrap wrap = (ExprWrap) pExpr; + return _DictionaryOfParameters[(ExprCall)wrap.OptionalExpression]; + } + else if (pExpr is ExprConstant) +@@ -875,20 +879,24 @@ namespace Microsoft.CSharp.RuntimeBinder + { + for (;;) + { +- if (pExpr is ExprCast cast) ++ if (pExpr is ExprCast) + { ++ ExprCast cast = (ExprCast) pExpr; + pExpr = cast.Argument; + } +- else if (pExpr is ExprTypeOf typeOf) ++ else if (pExpr is ExprTypeOf) + { ++ ExprTypeOf typeOf = (ExprTypeOf) pExpr; + return typeOf.SourceType.Type.AssociatedSystemType; + } +- else if (pExpr is ExprMethodInfo methodInfo) ++ else if (pExpr is ExprMethodInfo) + { ++ ExprMethodInfo methodInfo = (ExprMethodInfo) pExpr; + return GetMethodInfoFromExpr(methodInfo); + } +- else if (pExpr is ExprConstant constant) ++ else if (pExpr is ExprConstant) + { ++ ExprConstant constant = (ExprConstant) pExpr; + ConstVal val = constant.Val; + CType underlyingType = pExpr.Type; + object objval; +@@ -954,8 +962,9 @@ namespace Microsoft.CSharp.RuntimeBinder + + return pExpr.Type.isEnumType() ? Enum.ToObject(pExpr.Type.AssociatedSystemType, objval) : objval; + } +- else if (pExpr is ExprZeroInit zeroInit) ++ else if (pExpr is ExprZeroInit) + { ++ ExprZeroInit zeroInit = (ExprZeroInit) pExpr; + if ((pExpr = zeroInit.OptionalArgument) == null) + { + return Activator.CreateInstance(zeroInit.Type.AssociatedSystemType); +@@ -981,8 +990,9 @@ namespace Microsoft.CSharp.RuntimeBinder + Expr p = list; + while (list != null) + { +- if (list is ExprList pList) ++ if (list is ExprList) + { ++ ExprList pList = (ExprList) list; + p = pList.OptionalElement; + list = pList.OptionalNextListNode; + } +diff --git a/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/RuntimeBinder.cs b/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/RuntimeBinder.cs +index a623bfc0bf..4a742156b9 100644 +--- a/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/RuntimeBinder.cs ++++ b/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/RuntimeBinder.cs +@@ -189,7 +189,8 @@ namespace Microsoft.CSharp.RuntimeBinder + LocalVariableSymbol[] locals = PopulateLocalScope(payload, pScope, arguments, parameters); + + // (1.5) - Check to see if we need to defer. +- if (DeferBinding(payload, arguments, args, locals, out DynamicMetaObject o)) ++ DynamicMetaObject o; ++ if (DeferBinding(payload, arguments, args, locals, out o)) + { + deferredBinding = o; + return null; +@@ -1030,8 +1031,9 @@ namespace Microsoft.CSharp.RuntimeBinder + + private static void CheckForConditionalMethodError(Expr pExpr) + { +- if (pExpr is ExprCall call) ++ if (pExpr is ExprCall) + { ++ ExprCall call = (ExprCall)pExpr; + // This mimics the behavior of the native CompilerSymbolLoader in GetConditionalSymbols. Override + // methods cannot have the conditional attribute, but implicitly acquire it from their slot. + +@@ -1064,8 +1066,9 @@ namespace Microsoft.CSharp.RuntimeBinder + ExprMemberGroup memgroup; + TypeArray typeArgs; + +- if (pResult is ExprCall call) ++ if (pResult is ExprCall) + { ++ ExprCall call = (ExprCall) pResult; + type = call.MethWithInst.Ats; + methprop = call.MethWithInst.Meth(); + memgroup = call.MemberGroup; +@@ -1132,12 +1135,15 @@ namespace Microsoft.CSharp.RuntimeBinder + + private Expr StripNamedArgument(Expr pArg) + { +- if (pArg is ExprNamedArgumentSpecification named) ++ if (pArg is ExprNamedArgumentSpecification) + { ++ ExprNamedArgumentSpecification named = ++ (ExprNamedArgumentSpecification) pArg; + pArg = named.Value; + } +- else if (pArg is ExprArrayInit init) ++ else if (pArg is ExprArrayInit) + { ++ ExprArrayInit init = (ExprArrayInit) pArg; + init.OptionalArguments = StripNamedArguments(init.OptionalArguments); + } + +@@ -1146,14 +1152,16 @@ namespace Microsoft.CSharp.RuntimeBinder + + private Expr StripNamedArguments(Expr pArg) + { +- if (pArg is ExprList list) ++ if (pArg is ExprList) + { ++ ExprList list = (ExprList) pArg; + for(;;) + { + list.OptionalElement = StripNamedArgument(list.OptionalElement); + +- if (list.OptionalNextListNode is ExprList next) ++ if (list.OptionalNextListNode is ExprList) + { ++ ExprList next = (ExprList)list.OptionalNextListNode; + list = next; + } + else +diff --git a/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Binding/Better.cs b/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Binding/Better.cs +index cebfcd94e1..179ac21620 100644 +--- a/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Binding/Better.cs ++++ b/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Binding/Better.cs +@@ -157,8 +157,9 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics + // We then go over the specified arguments and put the type for any named argument in the right position in the array. + for (int iParam = 0; iParam < args.carg; iParam++) + { +- if (prgexpr[iParam] is ExprNamedArgumentSpecification named) ++ if (prgexpr[iParam] is ExprNamedArgumentSpecification) + { ++ ExprNamedArgumentSpecification named = (ExprNamedArgumentSpecification)prgexpr[iParam]; + // We find the index of the type of the argument in the method parameter list and store that in a temp + int index = FindName(methProp.ParameterNames, named.Name); + CType tempType = pta[index]; +diff --git a/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Binding/ErrorReporting.cs b/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Binding/ErrorReporting.cs +index c406af43de..0ea81ef21c 100644 +--- a/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Binding/ErrorReporting.cs ++++ b/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Binding/ErrorReporting.cs +@@ -76,22 +76,25 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics + { + Debug.Assert(expr != null); + +- if (expr is ExprLocal local && local.IsOK) ++ if (expr is ExprLocal && ((ExprLocal)expr).IsOK) + { ++ ExprLocal local = (ExprLocal)expr; + ReportLocalError(local.Local, kind, isNested); + return true; + } + + Expr pObject = null; + +- if (expr is ExprProperty prop) ++ if (expr is ExprProperty) + { ++ ExprProperty prop = (ExprProperty)expr; + // We've already reported read-only-property errors. + Debug.Assert(prop.MethWithTypeSet != null); + pObject = prop.MemberGroup.OptionalObject; + } +- else if (expr is ExprField field) ++ else if (expr is ExprField) + { ++ ExprField field = (ExprField)expr; + if (field.FieldWithType.Field().isReadOnly) + { + ReportReadOnlyError(field, kind, isNested); +@@ -105,8 +108,9 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics + + if (pObject != null && pObject.Type.isStructOrEnum()) + { +- if (pObject is IExprWithArgs withArgs) ++ if (pObject is IExprWithArgs) + { ++ IExprWithArgs withArgs = (IExprWithArgs)pObject; + // assigning to RHS of method or property getter returning a value-type on the stack or + // passing RHS of method or property getter returning a value-type on the stack, as ref or out + ErrorContext.Error(ErrorCode.ERR_ReturnNotLValue, withArgs.GetSymWithType()); +diff --git a/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Conversion.cs b/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Conversion.cs +index 2756538770..99adf488b3 100644 +--- a/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Conversion.cs ++++ b/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Conversion.cs +@@ -382,9 +382,10 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics + FUNDTYPE ftSrc = expr.Type.fundType(); + FUNDTYPE ftDest = dest.fundType(); + +- if (expr is ExprConstant constant && constant.IsOK && ++ if (expr is ExprConstant && ((ExprConstant)expr).IsOK && + expr.Type.isSimpleType() && dest.isSimpleType()) + { ++ ExprConstant constant = (ExprConstant) expr; + if ((ftSrc == FUNDTYPE.FT_I4 && (ftDest <= FUNDTYPE.FT_LASTNONLONG || ftDest == FUNDTYPE.FT_U8)) || + (ftSrc == FUNDTYPE.FT_I8 && ftDest == FUNDTYPE.FT_U8)) + { +@@ -412,8 +413,9 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics + ErrorContext.Error(dest is TypeParameterType ? ErrorCode.ERR_TypeVarCantBeNull : ErrorCode.ERR_ValueCantBeNull, dest); + } + +- else if (expr is ExprMemberGroup memGrp) ++ else if (expr is ExprMemberGroup) + { ++ ExprMemberGroup memGrp = (ExprMemberGroup) expr; + BindGrpConversion(memGrp, dest, true); + } + else if (canCast(expr.Type, dest, flags)) +@@ -546,8 +548,9 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics + { + ErrorContext.Error(ErrorCode.ERR_ValueCantBeNull, dest); + } +- else if (expr is ExprMemberGroup memGrp) ++ else if (expr is ExprMemberGroup) + { ++ ExprMemberGroup memGrp = (ExprMemberGroup)expr; + BindGrpConversion(memGrp, dest, true); + } + else +@@ -1387,8 +1390,9 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics + for (;;) + { + Debug.Assert(pExpr != null); +- if (pExpr is ExprCall call) ++ if (pExpr is ExprCall) + { ++ ExprCall call = (ExprCall)pExpr; + switch (call.NullableCallLiftKind) + { + case NullableCallLiftKind.NotLifted: +@@ -1402,8 +1406,9 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics + continue; + } + } +- else if (pExpr is ExprUserDefinedConversion udc) ++ else if (pExpr is ExprUserDefinedConversion) + { ++ ExprUserDefinedConversion udc = (ExprUserDefinedConversion)pExpr; + pExpr = udc.UserDefinedCall; + continue; + } +diff --git a/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/EXPRExtensions.cs b/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/EXPRExtensions.cs +index 075ed23a11..6408df4c36 100644 +--- a/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/EXPRExtensions.cs ++++ b/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/EXPRExtensions.cs +@@ -33,8 +33,9 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics + Expr exprCur = expr; + while (exprCur != null) + { +- if (exprCur is ExprList list) ++ if (exprCur is ExprList) + { ++ ExprList list = (ExprList)exprCur; + yield return list.OptionalElement; + exprCur = list.OptionalNextListNode; + } +@@ -61,12 +62,12 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics + } + public static bool isNull(this Expr expr) + { +- return expr is ExprConstant constant && constant.IsOK && (expr.Type.fundType() == FUNDTYPE.FT_REF) && constant.Val.IsNullRef; ++ return expr is ExprConstant && ((ExprConstant)expr).IsOK && (expr.Type.fundType() == FUNDTYPE.FT_REF) && ((ExprConstant)expr).Val.IsNullRef; + } + + public static bool IsZero(this Expr expr) + { +- return expr is ExprConstant constant && constant.IsOK && constant.IsZero; ++ return expr is ExprConstant && ((ExprConstant)expr).IsOK && ((ExprConstant)expr).IsZero; + } + + private static Expr GetSeqVal(this Expr expr) +diff --git a/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/ExplicitConversion.cs b/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/ExplicitConversion.cs +index b55cf07078..9afeaac622 100644 +--- a/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/ExplicitConversion.cs ++++ b/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/ExplicitConversion.cs +@@ -207,8 +207,9 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics + VSFAIL("BindExplicitConversion failed unexpectedly"); + return false; + } +- if (_exprDest is ExprUserDefinedConversion udc) ++ if (_exprDest is ExprUserDefinedConversion) + { ++ ExprUserDefinedConversion udc = (ExprUserDefinedConversion)_exprDest; + udc.Argument = _exprSrc; + } + } +diff --git a/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/ExprFactory.cs b/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/ExprFactory.cs +index 159f157f43..4a0e3cb479 100644 +--- a/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/ExprFactory.cs ++++ b/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/ExprFactory.cs +@@ -17,33 +17,33 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics + Debug.Assert(globalSymbolContext != null); + _globalSymbolContext = globalSymbolContext; + } +- private TypeManager Types => _globalSymbolContext.GetTypes(); ++ private TypeManager Types { get { return _globalSymbolContext.GetTypes(); } } + +- private BSYMMGR GlobalSymbols => _globalSymbolContext.GetGlobalSymbols(); ++ private BSYMMGR GlobalSymbols { get { return _globalSymbolContext.GetGlobalSymbols(); } } + +- public ExprCall CreateCall(EXPRFLAG flags, CType type, Expr arguments, ExprMemberGroup memberGroup, MethWithInst method) => +- new ExprCall(type, flags, arguments, memberGroup, method); ++ public ExprCall CreateCall(EXPRFLAG flags, CType type, Expr arguments, ExprMemberGroup memberGroup, MethWithInst method) ++ { return new ExprCall(type, flags, arguments, memberGroup, method); } + +- public ExprField CreateField(CType type, Expr optionalObject, FieldWithType field, bool isLValue) => +- new ExprField(type, optionalObject, field, isLValue); ++ public ExprField CreateField(CType type, Expr optionalObject, FieldWithType field, bool isLValue) ++ { return new ExprField(type, optionalObject, field, isLValue); } + +- public ExprFuncPtr CreateFunctionPointer(EXPRFLAG flags, CType type, Expr obj, MethWithInst method) => +- new ExprFuncPtr(type, flags, obj, method); ++ public ExprFuncPtr CreateFunctionPointer(EXPRFLAG flags, CType type, Expr obj, MethWithInst method) ++ { return new ExprFuncPtr(type, flags, obj, method); } + +- public ExprArrayInit CreateArrayInit(CType type, Expr arguments, Expr argumentDimensions, int[] dimSizes, int dimSize) => +- new ExprArrayInit(type, arguments, argumentDimensions, dimSizes, dimSize); ++ public ExprArrayInit CreateArrayInit(CType type, Expr arguments, Expr argumentDimensions, int[] dimSizes, int dimSize) ++ { return new ExprArrayInit(type, arguments, argumentDimensions, dimSizes, dimSize); } + +- public ExprProperty CreateProperty(CType type, Expr optionalObject) => +- CreateProperty(type, null, null, CreateMemGroup(optionalObject, new MethPropWithInst()), null, null); ++ public ExprProperty CreateProperty(CType type, Expr optionalObject) ++ { return CreateProperty(type, null, null, CreateMemGroup(optionalObject, new MethPropWithInst()), null, null); } + +- public ExprProperty CreateProperty(CType type, Expr optionalObjectThrough, Expr arguments, ExprMemberGroup memberGroup, PropWithType property, MethWithType setMethod) => +- new ExprProperty(type, optionalObjectThrough, arguments, memberGroup, property, setMethod); ++ public ExprProperty CreateProperty(CType type, Expr optionalObjectThrough, Expr arguments, ExprMemberGroup memberGroup, PropWithType property, MethWithType setMethod) ++ { return new ExprProperty(type, optionalObjectThrough, arguments, memberGroup, property, setMethod); } + +- public ExprEvent CreateEvent(CType type, Expr optionalObject, EventWithType eventWithType) => +- new ExprEvent(type, optionalObject, eventWithType); ++ public ExprEvent CreateEvent(CType type, Expr optionalObject, EventWithType eventWithType) ++ { return new ExprEvent(type, optionalObject, eventWithType); } + +- public ExprMemberGroup CreateMemGroup(EXPRFLAG flags, Name name, TypeArray typeArgs, SYMKIND symKind, CType parentType, MethodOrPropertySymbol memberSymbol, Expr obj, CMemberLookupResults memberLookupResults) => +- new ExprMemberGroup(Types.GetMethGrpType(), flags, name, typeArgs, symKind, parentType, memberSymbol, obj, memberLookupResults); ++ public ExprMemberGroup CreateMemGroup(EXPRFLAG flags, Name name, TypeArray typeArgs, SYMKIND symKind, CType parentType, MethodOrPropertySymbol memberSymbol, Expr obj, CMemberLookupResults memberLookupResults) ++ { return new ExprMemberGroup(Types.GetMethGrpType(), flags, name, typeArgs, symKind, parentType, memberSymbol, obj, memberLookupResults); } + + public ExprMemberGroup CreateMemGroup(Expr obj, MethPropWithInst method) + { +@@ -57,25 +57,25 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics + obj, new CMemberLookupResults(GlobalSymbols.AllocParams(1, new[] {type}), name)); + } + +- public ExprUserDefinedConversion CreateUserDefinedConversion(Expr arg, Expr call, MethWithInst method) => +- new ExprUserDefinedConversion(arg, call, method); ++ public ExprUserDefinedConversion CreateUserDefinedConversion(Expr arg, Expr call, MethWithInst method) ++ { return new ExprUserDefinedConversion(arg, call, method); } + + public ExprCast CreateCast(CType type, Expr argument) => CreateCast(0, CreateClass(type), argument); + +- public ExprCast CreateCast(EXPRFLAG flags, ExprClass type, Expr argument) => new ExprCast(flags, type, argument); ++ public ExprCast CreateCast(EXPRFLAG flags, ExprClass type, Expr argument) { return new ExprCast(flags, type, argument); } + +- public ExprReturn CreateReturn(Expr optionalObject) => new ExprReturn(optionalObject); ++ public ExprReturn CreateReturn(Expr optionalObject) { return new ExprReturn(optionalObject); } + +- public ExprLocal CreateLocal(LocalVariableSymbol local) => new ExprLocal(local); ++ public ExprLocal CreateLocal(LocalVariableSymbol local) { return new ExprLocal(local); } + +- public ExprBoundLambda CreateAnonymousMethod(AggregateType delegateType, Scope argumentScope) => +- new ExprBoundLambda(delegateType, argumentScope); ++ public ExprBoundLambda CreateAnonymousMethod(AggregateType delegateType, Scope argumentScope) ++ { return new ExprBoundLambda(delegateType, argumentScope); } + +- public ExprHoistedLocalExpr CreateHoistedLocalInExpression() => +- new ExprHoistedLocalExpr(Types.GetOptPredefAgg(PredefinedType.PT_EXPRESSION).getThisType()); ++ public ExprHoistedLocalExpr CreateHoistedLocalInExpression() ++ { return new ExprHoistedLocalExpr(Types.GetOptPredefAgg(PredefinedType.PT_EXPRESSION).getThisType()); } + +- public ExprMethodInfo CreateMethodInfo(MethPropWithInst mwi) => +- CreateMethodInfo(mwi.Meth(), mwi.GetType(), mwi.TypeArgs); ++ public ExprMethodInfo CreateMethodInfo(MethPropWithInst mwi) ++ { return CreateMethodInfo(mwi.Meth(), mwi.GetType(), mwi.TypeArgs); } + + public ExprMethodInfo CreateMethodInfo(MethodSymbol method, AggregateType methodType, TypeArray methodParameters) + { +@@ -84,19 +84,19 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics + method, methodType, methodParameters); + } + +- public ExprPropertyInfo CreatePropertyInfo(PropertySymbol prop, AggregateType propertyType) => +- new ExprPropertyInfo(Types.GetOptPredefAgg(PredefinedType.PT_PROPERTYINFO).getThisType(), prop, propertyType); ++ public ExprPropertyInfo CreatePropertyInfo(PropertySymbol prop, AggregateType propertyType) ++ { return new ExprPropertyInfo(Types.GetOptPredefAgg(PredefinedType.PT_PROPERTYINFO).getThisType(), prop, propertyType); } + +- public ExprFieldInfo CreateFieldInfo(FieldSymbol field, AggregateType fieldType) => +- new ExprFieldInfo(field, fieldType, Types.GetOptPredefAgg(PredefinedType.PT_FIELDINFO).getThisType()); ++ public ExprFieldInfo CreateFieldInfo(FieldSymbol field, AggregateType fieldType) ++ { return new ExprFieldInfo(field, fieldType, Types.GetOptPredefAgg(PredefinedType.PT_FIELDINFO).getThisType()); } + +- private ExprTypeOf CreateTypeOf(ExprClass sourceType) => +- new ExprTypeOf(Types.GetReqPredefAgg(PredefinedType.PT_TYPE).getThisType(), sourceType); ++ private ExprTypeOf CreateTypeOf(ExprClass sourceType) ++ { return new ExprTypeOf(Types.GetReqPredefAgg(PredefinedType.PT_TYPE).getThisType(), sourceType); } + +- public ExprTypeOf CreateTypeOf(CType sourceType) => CreateTypeOf(CreateClass(sourceType)); ++ public ExprTypeOf CreateTypeOf(CType sourceType) { return CreateTypeOf(CreateClass(sourceType)); } + +- public ExprUserLogicalOp CreateUserLogOp(CType type, Expr trueFalseCall, ExprCall operatorCall) => +- new ExprUserLogicalOp(type, trueFalseCall, operatorCall); ++ public ExprUserLogicalOp CreateUserLogOp(CType type, Expr trueFalseCall, ExprCall operatorCall) ++ { return new ExprUserLogicalOp(type, trueFalseCall, operatorCall); } + + public ExprUserLogicalOp CreateUserLogOpError(CType type, Expr trueFalseCall, ExprCall operatorCall) + { +@@ -105,16 +105,16 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics + return rval; + } + +- public ExprConcat CreateConcat(Expr first, Expr second) => new ExprConcat(first, second); ++ public ExprConcat CreateConcat(Expr first, Expr second) { return new ExprConcat(first, second); } + +- public ExprConstant CreateStringConstant(string str) => +- CreateConstant(Types.GetReqPredefAgg(PredefinedType.PT_STRING).getThisType(), ConstVal.Get(str)); ++ public ExprConstant CreateStringConstant(string str) ++ { return CreateConstant(Types.GetReqPredefAgg(PredefinedType.PT_STRING).getThisType(), ConstVal.Get(str)); } + +- public ExprMultiGet CreateMultiGet(EXPRFLAG flags, CType type, ExprMulti multi) => +- new ExprMultiGet(type, flags, multi); ++ public ExprMultiGet CreateMultiGet(EXPRFLAG flags, CType type, ExprMulti multi) ++ { return new ExprMultiGet(type, flags, multi); } + +- public ExprMulti CreateMulti(EXPRFLAG flags, CType type, Expr left, Expr op) => +- new ExprMulti(type, flags, left, op); ++ public ExprMulti CreateMulti(EXPRFLAG flags, CType type, Expr left, Expr op) ++ { return new ExprMulti(type, flags, left, op); } + + //////////////////////////////////////////////////////////////////////////////// + // +@@ -124,7 +124,7 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics + // + // This returns a null for reference types and an EXPRZEROINIT for all others. + +- public Expr CreateZeroInit(CType type) => CreateZeroInit(CreateClass(type), null, false); ++ public Expr CreateZeroInit(CType type) { return CreateZeroInit(CreateClass(type), null, false); } + + private Expr CreateZeroInit(ExprClass typeExpr, Expr originalConstructorCall, bool isConstructor) + { +@@ -187,15 +187,15 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics + return new ExprZeroInit(type, originalConstructorCall, isConstructor, isError); + } + +- public ExprConstant CreateConstant(CType type, ConstVal constVal) => new ExprConstant(type, constVal); ++ public ExprConstant CreateConstant(CType type, ConstVal constVal) { return new ExprConstant(type, constVal); } + +- public ExprConstant CreateIntegerConstant(int x) => +- CreateConstant(Types.GetReqPredefAgg(PredefinedType.PT_INT).getThisType(), ConstVal.Get(x)); ++ public ExprConstant CreateIntegerConstant(int x) ++ { return CreateConstant(Types.GetReqPredefAgg(PredefinedType.PT_INT).getThisType(), ConstVal.Get(x)); } + +- public ExprConstant CreateBoolConstant(bool b) => +- CreateConstant(Types.GetReqPredefAgg(PredefinedType.PT_BOOL).getThisType(), ConstVal.Get(b)); ++ public ExprConstant CreateBoolConstant(bool b) ++ { return CreateConstant(Types.GetReqPredefAgg(PredefinedType.PT_BOOL).getThisType(), ConstVal.Get(b)); } + +- public ExprBlock CreateBlock(ExprStatement pOptionalStatements) => new ExprBlock(pOptionalStatements); ++ public ExprBlock CreateBlock(ExprStatement pOptionalStatements) { return new ExprBlock(pOptionalStatements); } + + public ExprArrayIndex CreateArrayIndex(Expr array, Expr index) + { +@@ -212,11 +212,11 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics + return new ExprArrayIndex(type, array, index); + } + +- public ExprBinOp CreateBinop(ExpressionKind exprKind, CType type, Expr left, Expr right) => +- new ExprBinOp(exprKind, type, left, right); ++ public ExprBinOp CreateBinop(ExpressionKind exprKind, CType type, Expr left, Expr right) ++ { return new ExprBinOp(exprKind, type, left, right); } + +- public ExprUnaryOp CreateUnaryOp(ExpressionKind exprKind, CType type, Expr operand) => +- new ExprUnaryOp(exprKind, type, operand); ++ public ExprUnaryOp CreateUnaryOp(ExpressionKind exprKind, CType type, Expr operand) ++ { return new ExprUnaryOp(exprKind, type, operand); } + + public ExprOperator CreateOperator(ExpressionKind exprKind, CType type, Expr arg1, Expr arg2) + { +@@ -228,12 +228,12 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics + } + + +- public ExprBinOp CreateUserDefinedBinop(ExpressionKind exprKind, CType type, Expr left, Expr right, Expr call, MethPropWithInst userMethod) => +- new ExprBinOp(exprKind, type, left, right, call, userMethod); ++ public ExprBinOp CreateUserDefinedBinop(ExpressionKind exprKind, CType type, Expr left, Expr right, Expr call, MethPropWithInst userMethod) ++ { return new ExprBinOp(exprKind, type, left, right, call, userMethod); } + + // The call may be lifted, but we do not mark the outer binop as lifted. +- public ExprUnaryOp CreateUserDefinedUnaryOperator(ExpressionKind exprKind, CType type, Expr operand, ExprCall call, MethPropWithInst userMethod) => +- new ExprUnaryOp(exprKind, type, operand, call, userMethod); ++ public ExprUnaryOp CreateUserDefinedUnaryOperator(ExpressionKind exprKind, CType type, Expr operand, ExprCall call, MethPropWithInst userMethod) ++ { return new ExprUnaryOp(exprKind, type, operand, call, userMethod); } + + public ExprUnaryOp CreateNeg(EXPRFLAG flags, Expr operand) + { +@@ -246,23 +246,22 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics + //////////////////////////////////////////////////////////////////////////////// + // Create a node that evaluates the first, evaluates the second, results in the second. + +- public ExprBinOp CreateSequence(Expr first, Expr second) => +- CreateBinop(ExpressionKind.Sequence, second.Type, first, second); ++ public ExprBinOp CreateSequence(Expr first, Expr second) ++ { return CreateBinop(ExpressionKind.Sequence, second.Type, first, second); } + + //////////////////////////////////////////////////////////////////////////////// + // Create a node that evaluates the first, evaluates the second, results in the first. + +- public ExprBinOp CreateReverseSequence(Expr first, Expr second) => +- CreateBinop(ExpressionKind.SequenceReverse, first.Type, first, second); ++ public ExprBinOp CreateReverseSequence(Expr first, Expr second) ++ { return CreateBinop(ExpressionKind.SequenceReverse, first.Type, first, second); } + +- public ExprAssignment CreateAssignment(Expr left, Expr right) => new ExprAssignment(left, right); ++ public ExprAssignment CreateAssignment(Expr left, Expr right) { return new ExprAssignment(left, right); } + + //////////////////////////////////////////////////////////////////////////////// + +- public ExprNamedArgumentSpecification CreateNamedArgumentSpecification(Name name, Expr value) => +- new ExprNamedArgumentSpecification(name, value); ++ public ExprNamedArgumentSpecification CreateNamedArgumentSpecification(Name name, Expr value) { return new ExprNamedArgumentSpecification(name, value); } + +- public ExprWrap CreateWrap(Expr expression) => new ExprWrap(expression); ++ public ExprWrap CreateWrap(Expr expression) { return new ExprWrap(expression); } + + public ExprBinOp CreateSave(ExprWrap wrap) + { +@@ -272,7 +271,7 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics + return expr; + } + +- public ExprConstant CreateNull() => CreateConstant(Types.GetNullType(), default(ConstVal)); ++ public ExprConstant CreateNull() { return CreateConstant(Types.GetNullType(), default(ConstVal)); } + + public void AppendItemToList( + Expr newItem, +@@ -306,14 +305,13 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics + last = list.OptionalNextListNode; + } + +- public ExprList CreateList(Expr op1, Expr op2) => new ExprList(op1, op2); ++ public ExprList CreateList(Expr op1, Expr op2) { return new ExprList(op1, op2); } + +- public ExprList CreateList(Expr op1, Expr op2, Expr op3) => CreateList(op1, CreateList(op2, op3)); ++ public ExprList CreateList(Expr op1, Expr op2, Expr op3) { return CreateList(op1, CreateList(op2, op3)); } + +- public ExprList CreateList(Expr op1, Expr op2, Expr op3, Expr op4) => +- CreateList(op1, CreateList(op2, CreateList(op3, op4))); ++ public ExprList CreateList(Expr op1, Expr op2, Expr op3, Expr op4) { return CreateList(op1, CreateList(op2, CreateList(op3, op4))); } + +- public ExprClass CreateClass(CType type) => new ExprClass(type); ++ public ExprClass CreateClass(CType type) { return new ExprClass(type); } + } + } + +diff --git a/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/ExpressionBinder.cs b/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/ExpressionBinder.cs +index ee75e7b38e..bd7c52f87e 100644 +--- a/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/ExpressionBinder.cs ++++ b/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/ExpressionBinder.cs +@@ -601,10 +601,11 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics + // Check if we have a compile time constant. If we do, create a constant for it and set the + // original tree to the cast. + +- if (exprConst is ExprConstant constant && exprFlags == 0 && ++ if (exprConst is ExprConstant && exprFlags == 0 && + exprSrc.Type.fundType() == typeDest.fundType() && +- (!exprSrc.Type.isPredefType(PredefinedType.PT_STRING) || constant.Val.IsNullRef)) ++ (!exprSrc.Type.isPredefType(PredefinedType.PT_STRING) || ((ExprConstant)exprConst).Val.IsNullRef)) + { ++ ExprConstant constant = (ExprConstant)exprConst; + ExprConstant expr = GetExprFactory().CreateConstant(typeDest, constant.Val); + pexprDest = expr; + return; +@@ -1191,8 +1192,9 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics + while (list != null) + { + Expr arg; +- if (list is ExprList next) ++ if (list is ExprList) + { ++ ExprList next = (ExprList)list; + arg = next.OptionalElement; + list = next.OptionalNextListNode; + } +@@ -1265,8 +1267,9 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics + + private Expr UnwrapExpression(Expr pExpression) + { +- while (pExpression is ExprWrap wrap) ++ while (pExpression is ExprWrap) + { ++ ExprWrap wrap = (ExprWrap)pExpression; + Expr wrapped = wrap.OptionalExpression; + if (wrapped == null) + { +@@ -1344,8 +1347,9 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics + return false; + if (expr.isLvalue()) + { +- if (expr is ExprProperty prop) ++ if (expr is ExprProperty) + { ++ ExprProperty prop = (ExprProperty)expr; + CheckLvalueProp(prop); + } + markFieldAssigned(expr); +@@ -1570,9 +1574,10 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics + + // If we're invoking code on a struct-valued field, mark the struct as assigned (to + // avoid warning CS0649). +- if (pObject is ExprField field && !field.FieldWithType.Field().isAssigned && !swt.Sym.IsFieldSymbol() && ++ if (pObject is ExprField && !((ExprField)pObject).FieldWithType.Field().isAssigned && !swt.Sym.IsFieldSymbol() && + typeObj.isStructType() && !typeObj.isPredefined()) + { ++ ExprField field = (ExprField) pObject; + field.FieldWithType.Field().isAssigned = true; + } + +@@ -1779,8 +1784,9 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics + + Expr argument = indir; + Expr rval; +- if (argument is ExprNamedArgumentSpecification named) ++ if (argument is ExprNamedArgumentSpecification) + { ++ ExprNamedArgumentSpecification named = (ExprNamedArgumentSpecification)argument; + int index = 0; + // If we're named, look for the type of the matching name. + foreach (Name i in mostDerivedMethod.ParameterNames) +@@ -1918,8 +1924,9 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics + Expr expr = it.Current(); + count++; + +- if (expr is ExprNamedArgumentSpecification named) ++ if (expr is ExprNamedArgumentSpecification) + { ++ ExprNamedArgumentSpecification named = (ExprNamedArgumentSpecification)expr; + named.Value = tryConvert(named.Value, elementType); + } + else +@@ -1941,8 +1948,9 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics + + private void markFieldAssigned(Expr expr) + { +- if (0 != (expr.Flags & EXPRFLAG.EXF_LVALUE) && expr is ExprField field) ++ if (0 != (expr.Flags & EXPRFLAG.EXF_LVALUE) && expr is ExprField) + { ++ ExprField field = (ExprField) expr; + FieldSymbol symbol; + do + { +@@ -2009,8 +2017,9 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics + for (Expr list = args; list != null; iarg++) + { + Expr arg; +- if (list is ExprList next) ++ if (list is ExprList) + { ++ ExprList next = (ExprList)list; + arg = next.OptionalElement; + list = next.OptionalNextListNode; + } +@@ -2364,8 +2373,9 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics + { + Expr arg; + +- if (list is ExprList next) ++ if (list is ExprList) + { ++ ExprList next = (ExprList)list; + arg = next.OptionalElement; + list = next.OptionalNextListNode; + } +diff --git a/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/GroupToArgsBinder.cs b/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/GroupToArgsBinder.cs +index 25a8d40341..d17de3977d 100644 +--- a/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/GroupToArgsBinder.cs ++++ b/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/GroupToArgsBinder.cs +@@ -510,7 +510,7 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics + // then let us through. + if (methprop.isParamArray && + index < pArguments.carg && +- pArguments.prgexpr[index] is ExprArrayInit arrayInit && arrayInit.GeneratedForParamArray) ++ pArguments.prgexpr[index] is ExprArrayInit && ((ExprArrayInit)pArguments.prgexpr[index]).GeneratedForParamArray) + { + paramArrayArgument = pArguments.prgexpr[index]; + } +@@ -518,7 +518,7 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics + // Positional. + if (index < pArguments.carg && + !(pArguments.prgexpr[index] is ExprNamedArgumentSpecification) && +- !(pArguments.prgexpr[index] is ExprArrayInit arrayInitPos && arrayInitPos.GeneratedForParamArray)) ++ !(pArguments.prgexpr[index] is ExprArrayInit && ((ExprArrayInit)pArguments.prgexpr[index]).GeneratedForParamArray)) + { + pExprArguments[index] = pArguments.prgexpr[index++]; + continue; +@@ -839,7 +839,7 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics + for (int i = 0; i < pArguments.carg; i++) + { + Expr expr = prgexpr[i]; +- if (expr is ExprNamedArgumentSpecification named && named.Name == pName) ++ if (expr is ExprNamedArgumentSpecification && ((ExprNamedArgumentSpecification)expr).Name == pName) + { + return expr; + } +@@ -861,7 +861,8 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics + HashSet names = new HashSet(); + for (int i = 0; i < _pArguments.carg; i++) + { +- if (!(_pArguments.prgexpr[i] is ExprNamedArgumentSpecification named)) ++ ExprNamedArgumentSpecification named; ++ if (!(_pArguments.prgexpr[i] is ExprNamedArgumentSpecification)) + { + if (!currentPosition.IsEmpty()) + { +@@ -869,6 +870,7 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics + } + continue; + } ++ named = (ExprNamedArgumentSpecification) _pArguments.prgexpr[i]; + + Name name = named.Name; + if (!methprop.ParameterNames.Contains(name)) +@@ -1080,8 +1082,9 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics + Expr pArgument = _pArguments.prgexpr[ivar]; + + // If we have a named argument, strip it to do the conversion. +- if (pArgument is ExprNamedArgumentSpecification named) ++ if (pArgument is ExprNamedArgumentSpecification) + { ++ ExprNamedArgumentSpecification named = (ExprNamedArgumentSpecification)pArgument; + pArgument = named.Value; + } + +diff --git a/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/ImplicitConversion.cs b/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/ImplicitConversion.cs +index c9eb5ae21d..cde533d750 100644 +--- a/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/ImplicitConversion.cs ++++ b/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/ImplicitConversion.cs +@@ -172,8 +172,9 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics + VSFAIL("Bad type symbol kind"); + break; + case TypeKind.TK_MethodGroupType: +- if (_exprSrc is ExprMemberGroup memGrp) ++ if (_exprSrc is ExprMemberGroup) + { ++ ExprMemberGroup memGrp = (ExprMemberGroup)_exprSrc; + ExprCall outExpr; + bool retVal = _binder.BindGrpConversion(memGrp, _typeDest, _needsExprDest, out outExpr, false); + _exprDest = outExpr; +@@ -737,10 +738,10 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics + // * A constant-expression of type long can be converted to type ulong, provided the value of + // the constant-expression is not negative. + // Note: Don't use GetConst here since the conversion only applies to bona-fide compile time constants. +- if (_exprSrc is ExprConstant constant && _exprSrc.IsOK && ++ if (_exprSrc is ExprConstant && _exprSrc.IsOK && + ((ptSrc == PredefinedType.PT_INT && ptDest != PredefinedType.PT_BOOL && ptDest != PredefinedType.PT_CHAR) || + (ptSrc == PredefinedType.PT_LONG && ptDest == PredefinedType.PT_ULONG)) && +- isConstantInRange(constant, _typeDest)) ++ isConstantInRange(((ExprConstant)_exprSrc), _typeDest)) + { + // Special case (CLR 6.1.6): if integral constant is in range, the conversion is a legal implicit conversion. + convertKind = ConvKind.Implicit; +diff --git a/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/MethodTypeInferrer.cs b/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/MethodTypeInferrer.cs +index 52d354ac53..f43684690d 100644 +--- a/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/MethodTypeInferrer.cs ++++ b/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/MethodTypeInferrer.cs +@@ -1063,10 +1063,11 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics + // SPEC: yields a single method with return CType U then a lower-bound + // SPEC: inference is made from U to Tb. + +- if (!(pSource is ExprMemberGroup memGrp)) ++ if (!(pSource is ExprMemberGroup)) + { + return false; + } ++ ExprMemberGroup memGrp = (ExprMemberGroup)pSource; + pType = pType.GetDelegateTypeOfPossibleExpression(); + if (!pType.isDelegateType()) + { +diff --git a/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Nullable.cs b/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Nullable.cs +index b23fc44509..7dbe8227ca 100644 +--- a/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Nullable.cs ++++ b/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Nullable.cs +@@ -29,8 +29,9 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics + { + Debug.Assert(expr != null); + +- if (expr is ExprCall pCall && pCall.MemberGroup.OptionalObject == null) ++ if (expr is ExprCall && ((ExprCall)expr).MemberGroup.OptionalObject == null) + { ++ ExprCall pCall = (ExprCall)expr; + MethodSymbol meth = pCall.MethWithInst.Meth(); + if (meth != null && meth.IsNullableConstructor()) + { +@@ -45,7 +46,8 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics + + public static Expr StripNullableConstructor(Expr pExpr) + { +- while (IsNullableConstructor(pExpr, out ExprCall call)) ++ ExprCall call; ++ while (IsNullableConstructor(pExpr, out call)) + { + pExpr = call.OptionalArguments; + Debug.Assert(pExpr != null && !(pExpr is ExprList)); +@@ -60,7 +62,8 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics + Debug.Assert(exprSrc != null && exprSrc.Type.IsNullableType()); + + // For new T?(x), the answer is x. +- if (IsNullableConstructor(exprSrc, out ExprCall call)) ++ ExprCall call; ++ if (IsNullableConstructor(exprSrc, out call)) + { + var args = call.OptionalArguments; + Debug.Assert(args != null && !(args is ExprList)); +diff --git a/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/ExpressionIterator.cs b/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/ExpressionIterator.cs +index 96ee032422..9397543de6 100644 +--- a/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/ExpressionIterator.cs ++++ b/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/ExpressionIterator.cs +@@ -83,8 +83,9 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics + _pList = null; + _pCurrent = null; + } +- else if (pExpr is ExprList pList) ++ else if (pExpr is ExprList) + { ++ ExprList pList = (ExprList)pExpr; + _pList = pList; + _pCurrent = pList.OptionalElement; + } +diff --git a/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/Visitors/ExprVisitorBase.cs b/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/Visitors/ExprVisitorBase.cs +index 2abac4cecc..84bc0e1d4c 100644 +--- a/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/Visitors/ExprVisitorBase.cs ++++ b/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/Visitors/ExprVisitorBase.cs +@@ -21,8 +21,9 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics + return pResult; + } + +- if (pExpr is ExprStatement statement) ++ if (pExpr is ExprStatement) + { ++ ExprStatement statement = (ExprStatement)pExpr; + return CacheExprMapping(pExpr, DispatchStatementList(statement)); + } + +@@ -275,11 +276,13 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics + return; + } + +- if (!(nextNode is ExprList next)) ++ ExprList next; ++ if (!(nextNode is ExprList)) + { + list.OptionalNextListNode = Visit(nextNode); + return; + } ++ next = (ExprList)nextNode; + + list = next; + } +diff --git a/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/Visitors/ExpressionTreeRewriter.cs b/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/Visitors/ExpressionTreeRewriter.cs +index 96075b6d38..e0581fd14e 100644 +--- a/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/Visitors/ExpressionTreeRewriter.cs ++++ b/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/Visitors/ExpressionTreeRewriter.cs +@@ -50,8 +50,9 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics + // For assignments, we either have a member assignment or an indexed assignment. + //Debug.Assert(assignment.GetLHS().isPROP() || assignment.GetLHS().isFIELD() || assignment.GetLHS().isARRAYINDEX() || assignment.GetLHS().isLOCAL()); + Expr lhs; +- if (assignment.LHS is ExprProperty prop) ++ if (assignment.LHS is ExprProperty) + { ++ ExprProperty prop = (ExprProperty)assignment.LHS; + if (prop.OptionalArguments== null) + { + // Regular property. +@@ -304,8 +305,9 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics + // can handle in the general case all implicit boxing conversions. Right now it + // requires that all arguments to a call that need to be boxed be explicitly boxed. + +- if (pObject != null && pObject is ExprCast cast && cast.IsBoxingCast) ++ if (pObject != null && pObject is ExprCast && ((ExprCast)pObject).IsBoxingCast) + { ++ ExprCast cast = (ExprCast) pObject; + pObject = cast.Argument; + } + pObject = Visit(pObject); +@@ -576,8 +578,9 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics + if (udcall != null) + { + Debug.Assert(udcall.Kind == ExpressionKind.Call || udcall.Kind == ExpressionKind.UserLogicalOp); +- if (udcall is ExprCall ascall) ++ if (udcall is ExprCall) + { ++ ExprCall ascall = (ExprCall)udcall; + ExprList args = (ExprList)ascall.OptionalArguments; + Debug.Assert(args.OptionalNextListNode.Kind != ExpressionKind.List); + p1 = args.OptionalElement; +@@ -708,8 +711,9 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics + ExprBlock body = anonmeth.OptionalBody; + + // The most likely case: +- if (body.OptionalStatements is ExprReturn ret) ++ if (body.OptionalStatements is ExprReturn) + { ++ ExprReturn ret = (ExprReturn)body.OptionalStatements; + Debug.Assert(ret.OptionalObject != null); + return Visit(ret.OptionalObject); + } +@@ -831,8 +835,9 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics + Expr pUDConversion = call?.PConversions; + if (pUDConversion != null) + { +- if (pUDConversion is ExprCall convCall) ++ if (pUDConversion is ExprCall) + { ++ ExprCall convCall = (ExprCall)pUDConversion; + Expr pUDConversionArgument = convCall.OptionalArguments; + if (IsNullableValueAccess(pUDConversionArgument, pArgument)) + { +@@ -1174,23 +1179,25 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics + private bool IsNullableValueAccess(Expr pExpr, Expr pObject) + { + Debug.Assert(pExpr != null); +- return pExpr is ExprProperty prop && prop.MemberGroup.OptionalObject == pObject && pObject.Type.IsNullableType(); ++ return pExpr is ExprProperty && ((ExprProperty)pExpr).MemberGroup.OptionalObject == pObject && pObject.Type.IsNullableType(); + } + + private bool IsDelegateConstructorCall(Expr pExpr) + { + Debug.Assert(pExpr != null); +- if (!(pExpr is ExprCall pCall)) ++ ExprCall pCall; ++ if (!(pExpr is ExprCall)) + { + return false; + } ++ pCall = (ExprCall)pExpr; + + return pCall.MethWithInst.Meth() != null && + pCall.MethWithInst.Meth().IsConstructor() && + pCall.Type.isDelegateType() && + pCall.OptionalArguments != null && +- pCall.OptionalArguments is ExprList list && +- list.OptionalNextListNode.Kind == ExpressionKind.FunctionPointer; ++ (pCall.OptionalArguments is ExprList) && ++ ((ExprList)pCall.OptionalArguments).OptionalNextListNode.Kind == ExpressionKind.FunctionPointer; + } + private static bool isEnumToDecimalConversion(CType argtype, CType desttype) + { +diff --git a/src/System.Collections/src/System/Collections/Generic/SortedSet.TreeSubSet.cs b/src/System.Collections/src/System/Collections/Generic/SortedSet.TreeSubSet.cs +index 4eb817c0af..671636f428 100644 +--- a/src/System.Collections/src/System/Collections/Generic/SortedSet.TreeSubSet.cs ++++ b/src/System.Collections/src/System/Collections/Generic/SortedSet.TreeSubSet.cs +@@ -352,7 +352,10 @@ namespace System.Collections.Generic + throw new PlatformNotSupportedException(); + } + +- protected override void OnDeserialization(Object sender) => throw new PlatformNotSupportedException(); ++ protected override void OnDeserialization(Object sender) ++ { ++ throw new PlatformNotSupportedException(); ++ } + } + } + } +diff --git a/src/System.Drawing.Common/src/System/Drawing/Brush.cs b/src/System.Drawing.Common/src/System/Drawing/Brush.cs +index 089069ed64..b202ef7736 100644 +--- a/src/System.Drawing.Common/src/System/Drawing/Brush.cs ++++ b/src/System.Drawing.Common/src/System/Drawing/Brush.cs +@@ -62,6 +62,6 @@ namespace System.Drawing + } + } + +- ~Brush() => Dispose(false); ++ ~Brush() { Dispose(false); } + } + } +diff --git a/src/System.Drawing.Common/src/System/Drawing/Design/CategoryNameCollection.cs b/src/System.Drawing.Common/src/System/Drawing/Design/CategoryNameCollection.cs +index 065498c3ad..fcc4f8b2b6 100644 +--- a/src/System.Drawing.Common/src/System/Drawing/Design/CategoryNameCollection.cs ++++ b/src/System.Drawing.Common/src/System/Drawing/Design/CategoryNameCollection.cs +@@ -16,34 +16,34 @@ namespace System.Drawing.Design + /// Initializes a new instance of based on another + /// . + /// +- public CategoryNameCollection(CategoryNameCollection value) => InnerList.AddRange(value); ++ public CategoryNameCollection(CategoryNameCollection value) { InnerList.AddRange(value); } + + /// + /// Initializes a new instance of containing any array of + /// objects. + /// +- public CategoryNameCollection(string[] value) => InnerList.AddRange(value); ++ public CategoryNameCollection(string[] value) { InnerList.AddRange(value); } + + /// + /// Represents the entry at the specified index of the . + /// +- public string this[int index] => ((string)(InnerList[index])); ++ public string this[int index] { get { return ((string)(InnerList[index])); } } + + /// + /// Gets a value indicating whether the contains the specified + /// . + /// +- public bool Contains(string value) => InnerList.Contains(value); ++ public bool Contains(string value) { return InnerList.Contains(value); } + + /// + /// Copies the values to a one-dimensional instance + /// at the specified index. + /// +- public void CopyTo(string[] array, int index) => InnerList.CopyTo(array, index); ++ public void CopyTo(string[] array, int index) { InnerList.CopyTo(array, index); } + + /// + /// Returns the index of a in the . + /// +- public int IndexOf(string value) => InnerList.IndexOf(value); ++ public int IndexOf(string value) { return InnerList.IndexOf(value); } + } + } +diff --git a/src/System.Drawing.Common/src/System/Drawing/Drawing2D/CustomLineCap.cs b/src/System.Drawing.Common/src/System/Drawing/Drawing2D/CustomLineCap.cs +index 152474117d..d9769778c7 100644 +--- a/src/System.Drawing.Common/src/System/Drawing/Drawing2D/CustomLineCap.cs ++++ b/src/System.Drawing.Common/src/System/Drawing/Drawing2D/CustomLineCap.cs +@@ -38,7 +38,7 @@ namespace System.Drawing.Drawing2D + SetNativeLineCap(nativeLineCap); + } + +- internal CustomLineCap(IntPtr nativeLineCap) => SetNativeLineCap(nativeLineCap); ++ internal CustomLineCap(IntPtr nativeLineCap) { SetNativeLineCap(nativeLineCap); } + + internal void SetNativeLineCap(IntPtr handle) + { +@@ -72,7 +72,7 @@ namespace System.Drawing.Drawing2D + _disposed = true; + } + +- ~CustomLineCap() => Dispose(false); ++ ~CustomLineCap() { Dispose(false); } + + public object Clone() + { +diff --git a/src/System.Drawing.Common/src/System/Drawing/Drawing2D/GraphicsPathIterator.cs b/src/System.Drawing.Common/src/System/Drawing/Drawing2D/GraphicsPathIterator.cs +index cb9c34c62a..3b552f1baf 100644 +--- a/src/System.Drawing.Common/src/System/Drawing/Drawing2D/GraphicsPathIterator.cs ++++ b/src/System.Drawing.Common/src/System/Drawing/Drawing2D/GraphicsPathIterator.cs +@@ -58,7 +58,7 @@ namespace System.Drawing.Drawing2D + } + } + +- ~GraphicsPathIterator() => Dispose(false); ++ ~GraphicsPathIterator() { Dispose(false); } + + public int NextSubpath(out int startIndex, out int endIndex, out bool isClosed) + { +diff --git a/src/System.Drawing.Common/src/System/Drawing/Drawing2D/GraphicsState.cs b/src/System.Drawing.Common/src/System/Drawing/Drawing2D/GraphicsState.cs +index c7d086756e..61de948b2d 100644 +--- a/src/System.Drawing.Common/src/System/Drawing/Drawing2D/GraphicsState.cs ++++ b/src/System.Drawing.Common/src/System/Drawing/Drawing2D/GraphicsState.cs +@@ -8,7 +8,7 @@ namespace System.Drawing.Drawing2D + { + internal int nativeState; + +- internal GraphicsState(int nativeState) => this.nativeState = nativeState; ++ internal GraphicsState(int nativeState) { this.nativeState = nativeState; } + } + } + +diff --git a/src/System.Drawing.Common/src/System/Drawing/Drawing2D/RegionData.cs b/src/System.Drawing.Common/src/System/Drawing/Drawing2D/RegionData.cs +index 596b8622eb..dfa2446c87 100644 +--- a/src/System.Drawing.Common/src/System/Drawing/Drawing2D/RegionData.cs ++++ b/src/System.Drawing.Common/src/System/Drawing/Drawing2D/RegionData.cs +@@ -6,7 +6,7 @@ namespace System.Drawing.Drawing2D + { + public sealed class RegionData + { +- internal RegionData(byte[] data) => Data = data; ++ internal RegionData(byte[] data) { Data = data; } + + public byte[] Data { get; set; } + } +diff --git a/src/System.Drawing.Common/src/System/Drawing/Text/FontCollection.cs b/src/System.Drawing.Common/src/System/Drawing/Text/FontCollection.cs +index df2ac5c8c2..a451dc621d 100644 +--- a/src/System.Drawing.Common/src/System/Drawing/Text/FontCollection.cs ++++ b/src/System.Drawing.Common/src/System/Drawing/Text/FontCollection.cs +@@ -14,7 +14,7 @@ namespace System.Drawing.Text + { + internal IntPtr _nativeFontCollection; + +- internal FontCollection() => _nativeFontCollection = IntPtr.Zero; ++ internal FontCollection() { _nativeFontCollection = IntPtr.Zero; } + + /// + /// Disposes of this +@@ -58,6 +58,6 @@ namespace System.Drawing.Text + } + } + +- ~FontCollection() => Dispose(false); ++ ~FontCollection() { Dispose(false); } + } + } +diff --git a/src/System.Linq.Expressions/src/System/Dynamic/Utils/TypeExtensions.cs b/src/System.Linq.Expressions/src/System/Dynamic/Utils/TypeExtensions.cs +index c45caba093..ef9a25203d 100644 +--- a/src/System.Linq.Expressions/src/System/Dynamic/Utils/TypeExtensions.cs ++++ b/src/System.Linq.Expressions/src/System/Dynamic/Utils/TypeExtensions.cs +@@ -65,7 +65,8 @@ namespace System.Dynamic.Utils + internal static ParameterInfo[] GetParametersCached(this MethodBase method) + { + CacheDict pic = s_paramInfoCache; +- if (!pic.TryGetValue(method, out ParameterInfo[] pis)) ++ ParameterInfo[] pis; ++ if (!pic.TryGetValue(method, out pis)) + { + pis = method.GetParameters(); + +diff --git a/src/System.Linq.Expressions/src/System/Linq/Expressions/Compiler/LambdaCompiler.Expressions.cs b/src/System.Linq.Expressions/src/System/Linq/Expressions/Compiler/LambdaCompiler.Expressions.cs +index d8b1c61f74..8cefbd4f19 100644 +--- a/src/System.Linq.Expressions/src/System/Linq/Expressions/Compiler/LambdaCompiler.Expressions.cs ++++ b/src/System.Linq.Expressions/src/System/Linq/Expressions/Compiler/LambdaCompiler.Expressions.cs +@@ -952,8 +952,9 @@ namespace System.Linq.Expressions.Compiler + private void EmitMemberAssignment(MemberAssignment binding, Type objectType) + { + EmitExpression(binding.Expression); +- if (binding.Member is FieldInfo fi) ++ if (binding.Member is FieldInfo) + { ++ FieldInfo fi = (FieldInfo)binding.Member; + _ilg.Emit(OpCodes.Stfld, fi); + } + else +@@ -1097,7 +1098,7 @@ namespace System.Linq.Expressions.Compiler + private static Type GetMemberType(MemberInfo member) + { + Debug.Assert(member is FieldInfo || member is PropertyInfo); +- return member is FieldInfo fi ? fi.FieldType : (member as PropertyInfo).PropertyType; ++ return member is FieldInfo ? ((FieldInfo)member).FieldType : (member as PropertyInfo).PropertyType; + } + + #endregion +diff --git a/src/System.Linq.Expressions/src/System/Linq/Expressions/MemberAssignment.cs b/src/System.Linq.Expressions/src/System/Linq/Expressions/MemberAssignment.cs +index 475a6c63cc..0787b10186 100644 +--- a/src/System.Linq.Expressions/src/System/Linq/Expressions/MemberAssignment.cs ++++ b/src/System.Linq.Expressions/src/System/Linq/Expressions/MemberAssignment.cs +@@ -93,23 +93,23 @@ namespace System.Linq.Expressions + + // Null paramName as there are two paths here with different parameter names at the API + TypeUtils.ValidateType(decType, null); +- switch (member) ++ if (member is PropertyInfo) + { +- case PropertyInfo pi: +- if (!pi.CanWrite) +- { +- throw Error.PropertyDoesNotHaveSetter(pi, nameof(member)); +- } +- +- memberType = pi.PropertyType; +- break; +- +- case FieldInfo fi: +- memberType = fi.FieldType; +- break; +- +- default: +- throw Error.ArgumentMustBeFieldInfoOrPropertyInfo(nameof(member)); ++ PropertyInfo pi = (PropertyInfo) member; ++ if (!pi.CanWrite) ++ { ++ throw Error.PropertyDoesNotHaveSetter(pi, nameof(member)); ++ } ++ memberType = pi.PropertyType; ++ } ++ else if (member is FieldInfo) ++ { ++ FieldInfo fi = (FieldInfo) member; ++ memberType = fi.FieldType; ++ } ++ else ++ { ++ throw Error.ArgumentMustBeFieldInfoOrPropertyInfo(nameof(member)); + } + } + } +diff --git a/src/System.Linq.Expressions/src/System/Linq/Expressions/MemberBinding.cs b/src/System.Linq.Expressions/src/System/Linq/Expressions/MemberBinding.cs +index c1c5884618..43c0698f90 100644 +--- a/src/System.Linq.Expressions/src/System/Linq/Expressions/MemberBinding.cs ++++ b/src/System.Linq.Expressions/src/System/Linq/Expressions/MemberBinding.cs +@@ -61,6 +61,9 @@ namespace System.Linq.Expressions + return ExpressionStringBuilder.MemberBindingToString(this); + } + +- internal virtual void ValidateAsDefinedHere(int index) => throw Error.UnknownBindingType(index); ++ internal virtual void ValidateAsDefinedHere(int index) ++ { ++ throw Error.UnknownBindingType(index); ++ } + } + } +diff --git a/src/System.Linq.Expressions/src/System/Linq/Expressions/MemberMemberBinding.cs b/src/System.Linq.Expressions/src/System/Linq/Expressions/MemberMemberBinding.cs +index f3981a2b1f..75dd7141da 100644 +--- a/src/System.Linq.Expressions/src/System/Linq/Expressions/MemberMemberBinding.cs ++++ b/src/System.Linq.Expressions/src/System/Linq/Expressions/MemberMemberBinding.cs +@@ -127,23 +127,24 @@ namespace System.Linq.Expressions + + // Null paramName as there are several paths here with different parameter names at the API + TypeUtils.ValidateType(decType, null, allowByRef: true, allowPointer: true); +- switch (member) ++ if (member is PropertyInfo) + { +- case PropertyInfo pi: +- if (!pi.CanRead) +- { +- throw Error.PropertyDoesNotHaveGetter(pi, nameof(member)); +- } +- +- memberType = pi.PropertyType; +- break; +- +- case FieldInfo fi: +- memberType = fi.FieldType; +- break; ++ PropertyInfo pi = (PropertyInfo)member; ++ if (!pi.CanRead) ++ { ++ throw Error.PropertyDoesNotHaveGetter(pi, nameof(member)); ++ } + +- default: +- throw Error.ArgumentMustBeFieldInfoOrPropertyInfo(nameof(member)); ++ memberType = pi.PropertyType; ++ } ++ else if (member is FieldInfo) ++ { ++ FieldInfo fi = (FieldInfo)member; ++ memberType = fi.FieldType; ++ } ++ else ++ { ++ throw Error.ArgumentMustBeFieldInfoOrPropertyInfo(nameof(member)); + } + } + +diff --git a/src/System.Linq/src/System/Linq/Reverse.cs b/src/System.Linq/src/System/Linq/Reverse.cs +index e68a4f42ee..a6352779b0 100644 +--- a/src/System.Linq/src/System/Linq/Reverse.cs ++++ b/src/System.Linq/src/System/Linq/Reverse.cs +@@ -103,19 +103,24 @@ namespace System.Linq + { + if (onlyIfCheap) + { +- switch (_source) ++ if (_source is IIListProvider) + { +- case IIListProvider listProv: +- return listProv.GetCount(onlyIfCheap: true); +- +- case ICollection colT: +- return colT.Count; +- +- case ICollection col: +- return col.Count; +- +- default: +- return -1; ++ IIListProvider listProv = (IIListProvider)_source; ++ return listProv.GetCount(onlyIfCheap: true); ++ } ++ else if (_source is ICollection) ++ { ++ ICollection colT = (ICollection) _source; ++ return colT.Count; ++ } ++ else if (_source is ICollection) ++ { ++ ICollection col = (ICollection) _source; ++ return col.Count; ++ } ++ else ++ { ++ return -1; + } + } + +diff --git a/src/System.Net.HttpListener/src/System/Net/WebSockets/HttpListenerWebSocketContext.cs b/src/System.Net.HttpListener/src/System/Net/WebSockets/HttpListenerWebSocketContext.cs +index 5321578946..ff54677027 100644 +--- a/src/System.Net.HttpListener/src/System/Net/WebSockets/HttpListenerWebSocketContext.cs ++++ b/src/System.Net.HttpListener/src/System/Net/WebSockets/HttpListenerWebSocketContext.cs +@@ -94,8 +94,9 @@ namespace System.Net.WebSockets + if (!(user is WindowsPrincipal)) + { + // AuthenticationSchemes.Basic. +- if (user.Identity is HttpListenerBasicIdentity basicIdentity) ++ if (user.Identity is HttpListenerBasicIdentity) + { ++ HttpListenerBasicIdentity basicIdentity = (HttpListenerBasicIdentity)user.Identity; + return new GenericPrincipal(new HttpListenerBasicIdentity(basicIdentity.Name, basicIdentity.Password), null); + } + } -- Efraim Flashner אפרים פלשנר GPG key = A28B F40C 3E55 1372 662D 14F7 41AA E7DC CA3D 8351 Confidentiality cannot be guaranteed on emails sent or received unencrypted From debbugs-submit-bounces@debbugs.gnu.org Mon Dec 16 12:29:01 2024 Received: (at 74609) by debbugs.gnu.org; 16 Dec 2024 17:29:01 +0000 Received: from localhost ([127.0.0.1]:55875 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1tNEtu-0006J1-1t for submit@debbugs.gnu.org; Mon, 16 Dec 2024 12:29:01 -0500 Received: from mail-wr1-f43.google.com ([209.85.221.43]:59642) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1tNEti-0006Gx-Ih for 74609@debbugs.gnu.org; Mon, 16 Dec 2024 12:28:50 -0500 Received: by mail-wr1-f43.google.com with SMTP id ffacd0b85a97d-3862df95f92so2206215f8f.2 for <74609@debbugs.gnu.org>; Mon, 16 Dec 2024 09:28:46 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1734370061; x=1734974861; darn=debbugs.gnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:sender:from:to:cc:subject:date :message-id:reply-to; bh=kRg6cW6spJeAIRtdLIwCOJj9QI7t0vE4Cxb0gRNL3Pg=; b=f/yoOYugFrD9OI06QVKenmDYfSRwggXyd3xRkn2pNw/3nfBpStlh5Kvp7Otf8jR+Ow chti+OzGJgafU9dbW0OZEQaIiyA1kah0nDp+VPRG8M3mCFhzU2NOyvTOj47XMvcSzwdw Yw72ZVlLaWpxEcYdmyzKrcSe+c6Bd9SfkkOEr4qgldXuofj91PFf6mediV80v3y7ooBs kKLfU+Aod6hUjKtfpS22D0ipSKBqFjqwQ1hUpetW3btyR019try2N/Zspl5+TVCnUw3x ZePtStrvQS5Q4lvzxx2b43WspI71NlkaUqxobfpbFr9hvH3eQUjBYe5HHFuw+WO1s3t7 LKUQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1734370061; x=1734974861; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:sender:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=kRg6cW6spJeAIRtdLIwCOJj9QI7t0vE4Cxb0gRNL3Pg=; b=m1QGDrRZDa5W/22TTY3q3+ZEfvpY8WV6GWwp4A9QuQjEhy8Z0pGmIJpiaMF8beLAgi mXOsHDFagwYd7Ci08mzfRPz59hrCNnMLyD9Czw23eEj8vlaJxjUQdz2HEmFglPPaMytI VOFDaSZhCeLt89PpysoeZpk5E6Cd+TEa+RKjB1LvbG4ihc7GwrRdxboreiqSdIvdin2i V5pkwddZKJpMyV7uFXenSmEvPwWSl7pcp3bewlgOcMb80YnbPU31ffswyWRCkFw9e4xW OmTGW9Tk7sQ7sVpjVDZK0SS5X0Au5gzEWPmXUzRrQw6cI30PYRcLaY2rZ90Q6oMmeF7o CnZg== X-Gm-Message-State: AOJu0YxIKe9uo6ssknUxFffkqQIV2DxBFvKRqmV8iPRgmrrrzook2Sk2 lcdEBUR2+ODsubu7lIhxSlAJN5byYm38TPpzCjcrED9Idc4gFnGtsO9R6g9Q X-Gm-Gg: ASbGnctQfAueIPtRitL3NhdorQVMHPcIA0gBEhHNrujgggYt+lfGx3qVTX57puumtVk 301E+pzpXi+Lc/PgGCA8/iI/OY7l46Vop/f1W7W0UnzSCj6n5f7h3gS+fZGP35tcKWyBzA/0S8a /EJPd3eLXehcm7P1vmdOXYsIhAsWdnXYSHW6HuH77CitolbY4ANNYbVDXNmxAHW/Bnwxs0FR7DI haHNhQAH4ICbwsKBQGx2yW0bY/8zSOG+euti+pGQcnxQ3huNuh5BLfxMQFHeQ== X-Google-Smtp-Source: AGHT+IH4V7M4Ujobay/G9LuW/nOWDC9ALcwpvaZzlccN5fXCtLIjwq4vF7+7zp89Y5MCnqU9s5qEOQ== X-Received: by 2002:a05:6000:1567:b0:385:f7d2:7e9b with SMTP id ffacd0b85a97d-38880adaaa2mr9535521f8f.30.1734370060540; Mon, 16 Dec 2024 09:27:40 -0800 (PST) Received: from localhost ([31.210.180.118]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-388c806b84esm8669384f8f.108.2024.12.16.09.27.39 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 16 Dec 2024 09:27:39 -0800 (PST) From: Efraim Flashner To: 74609@debbugs.gnu.org Subject: [PATCH 15/21] gnu: Add mono-5.4.0. Date: Mon, 16 Dec 2024 19:26:38 +0200 Message-ID: <50408f814cf6fa20cfed8c9b5e6f11fc2aa941a4.1734369314.git.efraim@flashner.co.il> X-Mailer: git-send-email 2.46.0 In-Reply-To: References: MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Spam-Score: 0.3 (/) X-Debbugs-Envelope-To: 74609 Cc: aaron.covrig.us@ieee.org, ludo@gnu.org, unmush , richard@freakingpenguin.com, unmush@proton.me, janneke@gnu.org 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: -0.7 (/) From: unmush * gnu/packages/dotnet.scm (mono-5.4.0-external-repo-specs, mono-5.4.0): New variables. * gnu/packages/patches/corefx-mono-5.4.0-patches.patch: New patch. * gnu/packages/patches/mono-5.4.0-patches.patch: New patch. * gnu/local.mk (dist_patch_DATA): Register new patches. Change-Id: I1510c8ac13db60e5beab8033be3efc483e984ec0 --- gnu/local.mk | 2 + gnu/packages/dotnet.scm | 92 ++ .../patches/corefx-mono-5.4.0-patches.patch | 915 ++++++++++++++++++ gnu/packages/patches/mono-5.4.0-patches.patch | 100 ++ 4 files changed, 1109 insertions(+) create mode 100644 gnu/packages/patches/corefx-mono-5.4.0-patches.patch create mode 100644 gnu/packages/patches/mono-5.4.0-patches.patch diff --git a/gnu/local.mk b/gnu/local.mk index 5facc66932b..aa129d89d58 100644 --- a/gnu/local.mk +++ b/gnu/local.mk @@ -1114,6 +1114,7 @@ dist_patch_DATA = \ %D%/packages/patches/converseen-hide-non-free-pointers.patch \ %D%/packages/patches/cool-retro-term-wctype.patch \ %D%/packages/patches/coq-autosubst-1.8-remove-deprecated-files.patch \ + %D%/packages/patches/corefx-mono-5.4.0-patches.patch \ %D%/packages/patches/coreutils-gnulib-tests.patch \ %D%/packages/patches/cppcheck-disable-char-signedness-test.patch \ %D%/packages/patches/cppdap-add-CPPDAP_USE_EXTERNAL_GTEST_PACKAGE.patch\ @@ -1825,6 +1826,7 @@ dist_patch_DATA = \ %D%/packages/patches/mono-2.6.4-fixes.patch \ %D%/packages/patches/mono-2.11.4-fixes.patch \ %D%/packages/patches/mono-4.9.0-fix-runtimemetadataversion.patch \ + %D%/packages/patches/mono-5.4.0-patches.patch \ %D%/packages/patches/mosaicatcher-unbundle-htslib.patch \ %D%/packages/patches/mrrescue-support-love-11.patch \ %D%/packages/patches/mtools-mformat-uninitialized.patch \ diff --git a/gnu/packages/dotnet.scm b/gnu/packages/dotnet.scm index cf391ed9200..b4355b048e2 100644 --- a/gnu/packages/dotnet.scm +++ b/gnu/packages/dotnet.scm @@ -1104,3 +1104,95 @@ (define-public mono-5.2.0 #$@prepare-mono-source-0)))) (native-inputs (modify-inputs (package-native-inputs mono-5.1.0) (replace "mono" mono-5.1.0))))) + +(define mono-5.4.0-external-repo-specs + '(("aspnetwebstack" "e77b12e6cc5ed260a98447f609e887337e44e299" + "0rks344qr4fmp3fs1264d2qkmm348m8d1kjd7z4l94iiirwn1fq1") + ("api-doc-tools" "d03e819838c6241f92f90655cb448cc47c9e8791" + "1riki79f3ig3cxigviss81dz601hn92a1gifglm0mzjbs76sf3fj" + #:recursive? #t) + ("api-snapshot" "b09033be33ab25113743151c644c831158c54042" + "0z67iqd1brib6ni36pklrp7rlxyhri5nk3px37fm1aacgrnsk7ck") + (("reference-assemblies" "binary-reference-assemblies") + "142cbeb62ffabf1dd9c1414d8dd76f93bcbed0c2" + "1wkd589hgb16m5zvmp9yb57agyyryaa1jj8vhl4w20i2hp22wad9") + ("bockbuild" "0efdb371e6d79abc54c0e3bb3689fa1646f4394e" + "10qr1m2wa3zb2i3j16i0cq49higjm451bhlqhqd4rlisqn0w8nrv") + ("boringssl" "3e0770e18835714708860ba9fe1af04a932971ff" + "139a0gl91a52k2r6na6ialzkqykaj1rk88zjrkaz3sdxx7nmmg6y") + ("cecil" "c0eb983dac62519d3ae93a689312076aacecb723" + "02i3pwpaf6q00pklfmwxhz0lgp83854dyqnvf4c1ys07cs8y1pdk") + (("cecil" "cecil-legacy") "33d50b874fd527118bc361d83de3d494e8bb55e1" + "1p4hl1796ib26ykyf5snl6cj0lx0v7mjh0xqhjw6qdh753nsjyhb") + ("corefx" "9ad53d674e31327abcc60f35c14387700f50cc68" + "0ap4g2fj8wsar4xvbc6dkd2l67qalxlcw5laplq3an5nvj2ld65w" + #:patches ("corefx-mono-5.4.0-patches.patch")) + ("corert" "48dba73801e804e89f00311da99d873f9c550278" + "1zw47jf4cwqmaixylisxi73xf6cap41bwf9vlmpxanzxaqklzsvk") + ("ikdasm" "1d7d43603791e0236b56d076578657bee44fef6b" + "1kw8ykkad55qhapg6jbvqim7vainqlpz8469flm083lpz7pks3sg") + (("ikvm-fork" "ikvm") "847e05fced5c9a41ff0f24f1f9d40d5a8a5772c1" + "1fl9bm3lmzf8iqv3x4iqkz9fc54mwdvrxisxg2nvwwcsi4saffpi") + ("linker" "99354bf5c13b8055209cb082cddc50c8047ab088" + "05zlajnqf83xfvn2whh9nql6j85sq12aw26sqmyqz7zcpml171mj") + ("Newtonsoft.Json" "471c3e0803a9f40a0acc8aeceb31de6ff93a52c4" + "0dgngd5hqk6yhlg40kabn6qdnknm32zcx9q6bm2w31csnsk5978s") + (("NuGet.BuildTasks" "nuget-buildtasks") + "b58ba4282377bcefd48abdc2d62ce6330e079abe" + "1say03fnqkjsx97zacany3sa5j4mhfk827hkwp23ib02q18f7lvp") + (("NUnitLite" "nunit-lite") "690603bea98aae69fca9a65130d88591bc6cabee" + "1f845ysjzs3yd9gcyww66dnkx484z5fknb8l0xz74sjmxk2mngwc") + ;; ("roslyn-binaries" "1904c7d0682a878e2d25b4d49f3475d12fbb9cc6" + ;; "") + ("rx" "b29a4b0fda609e0af33ff54ed13652b6ccf0e05e" + "1n1jwhmsbkcv2d806immcpzkb72rz04xy98myw355a8w5ah25yiv") + ;; ("xunit-binaries" "d4433b0972f40cb3efaa3fbba52869bde5df8fa8" + ;; "") + )) + +(define-public mono-5.4.0 + (package + (inherit mono-5.2.0) + (version "5.4.0.212") + (name "mono") + (source (origin + (method git-fetch) + (uri + (git-reference + (url "https://gitlab.winehq.org/mono/mono.git") + (commit + ;; 5.4.0.135 and before have a bug that makes mono not + ;; self-hosting (fails to compile self, example error: + ;; System.Data.SqlClient/SqlTransaction.cs(39,22): error + ;; CS0738: `System.Data.SqlClient.SqlTransaction' does not + ;; implement interface member + ;; `System.Data.IDbTransaction.Connection.get' and the best + ;; implementing candidate + ;; `System.Data.SqlClient.SqlTransaction.Connection.get' + ;; return type `System.Data.SqlClient.SqlConnection' does not + ;; match interface member return type + ;; `System.Data.IDbConnection' + + ;; Note: in above example, SqlConnection implements + ;; IDbConnection. My understanding is that for this to + ;; compile properly, we need covariant return types, which is + ;; a C# 9.0 feature, but somehow the same code has been + ;; compiled just fine by previous versions of mono, and is + ;; compiled fine by this version, but not specific 5.4.0.XXX + ;; versions. + "mono-5.4.0.212"))) + (file-name (git-file-name name version)) + (sha256 + (base32 + "0gx3fxz1wlq5fkj7iphv32vg9m78ia74m9pgn9rab4fyq2k9an2y")) + (modules '((guix build utils) + (ice-9 string-fun))) + (snippet #~(begin + #$(add-external-repos + mono-5.4.0-external-repo-specs) + #$@prepare-mono-source-0)) + (patches + (search-patches + "mono-5.4.0-patches.patch")))) + (native-inputs (modify-inputs (package-native-inputs mono-5.2.0) + (replace "mono" mono-5.2.0))))) diff --git a/gnu/packages/patches/corefx-mono-5.4.0-patches.patch b/gnu/packages/patches/corefx-mono-5.4.0-patches.patch new file mode 100644 index 00000000000..034d769ebce --- /dev/null +++ b/gnu/packages/patches/corefx-mono-5.4.0-patches.patch @@ -0,0 +1,915 @@ +diff --git a/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/ExpressionTreeCallRewriter.cs b/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/ExpressionTreeCallRewriter.cs +index aa8afa5a1b..3a2518246a 100644 +--- a/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/ExpressionTreeCallRewriter.cs ++++ b/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/ExpressionTreeCallRewriter.cs +@@ -246,8 +246,9 @@ namespace Microsoft.CSharp.RuntimeBinder + ExprArrayInit arrinit; + + ExprList list = (ExprList)pExpr.OptionalArguments; +- if (list.OptionalNextListNode is ExprList next) ++ if (list.OptionalNextListNode is ExprList) + { ++ ExprList next = (ExprList)list.OptionalNextListNode; + methinfo = (ExprMethodInfo)next.OptionalElement; + arrinit = (ExprArrayInit)next.OptionalNextListNode; + } +@@ -382,8 +383,9 @@ namespace Microsoft.CSharp.RuntimeBinder + Expr nextNode = list.OptionalNextListNode; + ExprPropertyInfo propinfo; + ExprArrayInit arguments; +- if (nextNode is ExprList nextList) ++ if (nextNode is ExprList) + { ++ ExprList nextList = (ExprList)list.OptionalNextListNode; + propinfo = nextList.OptionalElement as ExprPropertyInfo; + arguments = nextList.OptionalNextListNode as ExprArrayInit; + } +@@ -553,8 +555,9 @@ namespace Microsoft.CSharp.RuntimeBinder + list = (ExprList)list.OptionalNextListNode; + MethodInfo methodInfo; + bool bIsLifted = false; +- if (list.OptionalNextListNode is ExprList next) ++ if (list.OptionalNextListNode is ExprList) + { ++ ExprList next = (ExprList)list.OptionalNextListNode; + ExprConstant isLifted = (ExprConstant)next.OptionalElement; + Debug.Assert(isLifted != null); + bIsLifted = isLifted.Val.Int32Val == 1; +@@ -677,8 +680,9 @@ namespace Microsoft.CSharp.RuntimeBinder + + private Expression GetExpression(Expr pExpr) + { +- if (pExpr is ExprWrap wrap) ++ if (pExpr is ExprWrap) + { ++ ExprWrap wrap = (ExprWrap) pExpr; + return _DictionaryOfParameters[(ExprCall)wrap.OptionalExpression]; + } + else if (pExpr is ExprConstant) +@@ -875,20 +879,24 @@ namespace Microsoft.CSharp.RuntimeBinder + { + for (;;) + { +- if (pExpr is ExprCast cast) ++ if (pExpr is ExprCast) + { ++ ExprCast cast = (ExprCast) pExpr; + pExpr = cast.Argument; + } +- else if (pExpr is ExprTypeOf typeOf) ++ else if (pExpr is ExprTypeOf) + { ++ ExprTypeOf typeOf = (ExprTypeOf) pExpr; + return typeOf.SourceType.Type.AssociatedSystemType; + } +- else if (pExpr is ExprMethodInfo methodInfo) ++ else if (pExpr is ExprMethodInfo) + { ++ ExprMethodInfo methodInfo = (ExprMethodInfo) pExpr; + return GetMethodInfoFromExpr(methodInfo); + } +- else if (pExpr is ExprConstant constant) ++ else if (pExpr is ExprConstant) + { ++ ExprConstant constant = (ExprConstant) pExpr; + ConstVal val = constant.Val; + CType underlyingType = pExpr.Type; + object objval; +@@ -954,8 +962,9 @@ namespace Microsoft.CSharp.RuntimeBinder + + return pExpr.Type.isEnumType() ? Enum.ToObject(pExpr.Type.AssociatedSystemType, objval) : objval; + } +- else if (pExpr is ExprZeroInit zeroInit) ++ else if (pExpr is ExprZeroInit) + { ++ ExprZeroInit zeroInit = (ExprZeroInit) pExpr; + if ((pExpr = zeroInit.OptionalArgument) == null) + { + return Activator.CreateInstance(zeroInit.Type.AssociatedSystemType); +@@ -981,8 +990,9 @@ namespace Microsoft.CSharp.RuntimeBinder + Expr p = list; + while (list != null) + { +- if (list is ExprList pList) ++ if (list is ExprList) + { ++ ExprList pList = (ExprList) list; + p = pList.OptionalElement; + list = pList.OptionalNextListNode; + } +diff --git a/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/RuntimeBinder.cs b/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/RuntimeBinder.cs +index 6dc888c6ef..89f881f668 100644 +--- a/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/RuntimeBinder.cs ++++ b/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/RuntimeBinder.cs +@@ -195,7 +195,8 @@ namespace Microsoft.CSharp.RuntimeBinder + LocalVariableSymbol[] locals = PopulateLocalScope(payload, pScope, arguments, parameters); + + // (1.5) - Check to see if we need to defer. +- if (DeferBinding(payload, arguments, args, locals, out DynamicMetaObject o)) ++ DynamicMetaObject o; ++ if (DeferBinding(payload, arguments, args, locals, out o)) + { + deferredBinding = o; + return null; +@@ -1053,8 +1054,9 @@ namespace Microsoft.CSharp.RuntimeBinder + + private static void CheckForConditionalMethodError(Expr pExpr) + { +- if (pExpr is ExprCall call) ++ if (pExpr is ExprCall) + { ++ ExprCall call = (ExprCall)pExpr; + // This mimics the behavior of the native CompilerSymbolLoader in GetConditionalSymbols. Override + // methods cannot have the conditional attribute, but implicitly acquire it from their slot. + +@@ -1087,8 +1089,9 @@ namespace Microsoft.CSharp.RuntimeBinder + ExprMemberGroup memgroup; + TypeArray typeArgs; + +- if (pResult is ExprCall call) ++ if (pResult is ExprCall) + { ++ ExprCall call = (ExprCall) pResult; + type = call.MethWithInst.Ats; + methprop = call.MethWithInst.Meth(); + memgroup = call.MemberGroup; +@@ -1155,12 +1158,15 @@ namespace Microsoft.CSharp.RuntimeBinder + + private Expr StripNamedArgument(Expr pArg) + { +- if (pArg is ExprNamedArgumentSpecification named) ++ if (pArg is ExprNamedArgumentSpecification) + { ++ ExprNamedArgumentSpecification named = ++ (ExprNamedArgumentSpecification) pArg; + pArg = named.Value; + } +- else if (pArg is ExprArrayInit init) ++ else if (pArg is ExprArrayInit) + { ++ ExprArrayInit init = (ExprArrayInit) pArg; + init.OptionalArguments = StripNamedArguments(init.OptionalArguments); + } + +@@ -1169,14 +1175,16 @@ namespace Microsoft.CSharp.RuntimeBinder + + private Expr StripNamedArguments(Expr pArg) + { +- if (pArg is ExprList list) ++ if (pArg is ExprList) + { ++ ExprList list = (ExprList) pArg; + for(;;) + { + list.OptionalElement = StripNamedArgument(list.OptionalElement); + +- if (list.OptionalNextListNode is ExprList next) ++ if (list.OptionalNextListNode is ExprList) + { ++ ExprList next = (ExprList)list.OptionalNextListNode; + list = next; + } + else +diff --git a/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Binding/Better.cs b/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Binding/Better.cs +index cebfcd94e1..179ac21620 100644 +--- a/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Binding/Better.cs ++++ b/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Binding/Better.cs +@@ -157,8 +157,9 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics + // We then go over the specified arguments and put the type for any named argument in the right position in the array. + for (int iParam = 0; iParam < args.carg; iParam++) + { +- if (prgexpr[iParam] is ExprNamedArgumentSpecification named) ++ if (prgexpr[iParam] is ExprNamedArgumentSpecification) + { ++ ExprNamedArgumentSpecification named = (ExprNamedArgumentSpecification)prgexpr[iParam]; + // We find the index of the type of the argument in the method parameter list and store that in a temp + int index = FindName(methProp.ParameterNames, named.Name); + CType tempType = pta[index]; +diff --git a/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Binding/ErrorReporting.cs b/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Binding/ErrorReporting.cs +index c406af43de..0ea81ef21c 100644 +--- a/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Binding/ErrorReporting.cs ++++ b/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Binding/ErrorReporting.cs +@@ -76,22 +76,25 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics + { + Debug.Assert(expr != null); + +- if (expr is ExprLocal local && local.IsOK) ++ if (expr is ExprLocal && ((ExprLocal)expr).IsOK) + { ++ ExprLocal local = (ExprLocal)expr; + ReportLocalError(local.Local, kind, isNested); + return true; + } + + Expr pObject = null; + +- if (expr is ExprProperty prop) ++ if (expr is ExprProperty) + { ++ ExprProperty prop = (ExprProperty)expr; + // We've already reported read-only-property errors. + Debug.Assert(prop.MethWithTypeSet != null); + pObject = prop.MemberGroup.OptionalObject; + } +- else if (expr is ExprField field) ++ else if (expr is ExprField) + { ++ ExprField field = (ExprField)expr; + if (field.FieldWithType.Field().isReadOnly) + { + ReportReadOnlyError(field, kind, isNested); +@@ -105,8 +108,9 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics + + if (pObject != null && pObject.Type.isStructOrEnum()) + { +- if (pObject is IExprWithArgs withArgs) ++ if (pObject is IExprWithArgs) + { ++ IExprWithArgs withArgs = (IExprWithArgs)pObject; + // assigning to RHS of method or property getter returning a value-type on the stack or + // passing RHS of method or property getter returning a value-type on the stack, as ref or out + ErrorContext.Error(ErrorCode.ERR_ReturnNotLValue, withArgs.GetSymWithType()); +diff --git a/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Conversion.cs b/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Conversion.cs +index bb62a926b5..873feff72f 100644 +--- a/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Conversion.cs ++++ b/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Conversion.cs +@@ -391,9 +391,10 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics + FUNDTYPE ftSrc = expr.Type.fundType(); + FUNDTYPE ftDest = dest.fundType(); + +- if (expr is ExprConstant constant && constant.IsOK && ++ if (expr is ExprConstant && ((ExprConstant)expr).IsOK && + expr.Type.isSimpleType() && dest.isSimpleType()) + { ++ ExprConstant constant = (ExprConstant) expr; + if ((ftSrc == FUNDTYPE.FT_I4 && (ftDest <= FUNDTYPE.FT_LASTNONLONG || ftDest == FUNDTYPE.FT_U8)) || + (ftSrc == FUNDTYPE.FT_I8 && ftDest == FUNDTYPE.FT_U8)) + { +@@ -421,8 +422,9 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics + ErrorContext.Error(dest is TypeParameterType ? ErrorCode.ERR_TypeVarCantBeNull : ErrorCode.ERR_ValueCantBeNull, dest); + } + +- else if (expr is ExprMemberGroup memGrp) ++ else if (expr is ExprMemberGroup) + { ++ ExprMemberGroup memGrp = (ExprMemberGroup) expr; + BindGrpConversion(memGrp, dest, true); + } + else if (!TypeManager.TypeContainsAnonymousTypes(dest) && canCast(expr.Type, dest, flags)) +@@ -555,8 +557,9 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics + { + ErrorContext.Error(ErrorCode.ERR_ValueCantBeNull, dest); + } +- else if (expr is ExprMemberGroup memGrp) ++ else if (expr is ExprMemberGroup) + { ++ ExprMemberGroup memGrp = (ExprMemberGroup)expr; + BindGrpConversion(memGrp, dest, true); + } + else +@@ -1396,8 +1399,9 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics + for (;;) + { + Debug.Assert(pExpr != null); +- if (pExpr is ExprCall call) ++ if (pExpr is ExprCall) + { ++ ExprCall call = (ExprCall)pExpr; + switch (call.NullableCallLiftKind) + { + case NullableCallLiftKind.NotLifted: +@@ -1411,8 +1415,9 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics + continue; + } + } +- else if (pExpr is ExprUserDefinedConversion udc) ++ else if (pExpr is ExprUserDefinedConversion) + { ++ ExprUserDefinedConversion udc = (ExprUserDefinedConversion)pExpr; + pExpr = udc.UserDefinedCall; + continue; + } +diff --git a/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/EXPRExtensions.cs b/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/EXPRExtensions.cs +index 075ed23a11..6408df4c36 100644 +--- a/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/EXPRExtensions.cs ++++ b/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/EXPRExtensions.cs +@@ -33,8 +33,9 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics + Expr exprCur = expr; + while (exprCur != null) + { +- if (exprCur is ExprList list) ++ if (exprCur is ExprList) + { ++ ExprList list = (ExprList)exprCur; + yield return list.OptionalElement; + exprCur = list.OptionalNextListNode; + } +@@ -61,12 +62,12 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics + } + public static bool isNull(this Expr expr) + { +- return expr is ExprConstant constant && constant.IsOK && (expr.Type.fundType() == FUNDTYPE.FT_REF) && constant.Val.IsNullRef; ++ return expr is ExprConstant && ((ExprConstant)expr).IsOK && (expr.Type.fundType() == FUNDTYPE.FT_REF) && ((ExprConstant)expr).Val.IsNullRef; + } + + public static bool IsZero(this Expr expr) + { +- return expr is ExprConstant constant && constant.IsOK && constant.IsZero; ++ return expr is ExprConstant && ((ExprConstant)expr).IsOK && ((ExprConstant)expr).IsZero; + } + + private static Expr GetSeqVal(this Expr expr) +diff --git a/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/ExplicitConversion.cs b/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/ExplicitConversion.cs +index 6ea8879c40..137e950e76 100644 +--- a/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/ExplicitConversion.cs ++++ b/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/ExplicitConversion.cs +@@ -207,8 +207,9 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics + VSFAIL("BindExplicitConversion failed unexpectedly"); + return false; + } +- if (_exprDest is ExprUserDefinedConversion udc) ++ if (_exprDest is ExprUserDefinedConversion) + { ++ ExprUserDefinedConversion udc = (ExprUserDefinedConversion)_exprDest; + udc.Argument = _exprSrc; + } + } +diff --git a/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/ExprFactory.cs b/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/ExprFactory.cs +index 99ee57626a..ec0d29d6f3 100644 +--- a/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/ExprFactory.cs ++++ b/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/ExprFactory.cs +@@ -265,8 +265,9 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics + ExprUserLogicalOp rval = new ExprUserLogicalOp(pType); + Expr leftChild = ((ExprList)pCallOp.OptionalArguments).OptionalElement; + Debug.Assert(leftChild != null); +- if (leftChild is ExprWrap wrap) ++ if (leftChild is ExprWrap) + { ++ ExprWrap wrap = (ExprWrap)leftChild; + // In the EE case, we don't create WRAPEXPRs. + leftChild = wrap.OptionalExpression; + Debug.Assert(leftChild != null); +diff --git a/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/ExpressionBinder.cs b/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/ExpressionBinder.cs +index 60a1661eac..dc04fa1657 100644 +--- a/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/ExpressionBinder.cs ++++ b/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/ExpressionBinder.cs +@@ -601,10 +601,11 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics + // Check if we have a compile time constant. If we do, create a constant for it and set the + // original tree to the cast. + +- if (exprConst is ExprConstant constant && exprFlags == 0 && ++ if (exprConst is ExprConstant && exprFlags == 0 && + exprSrc.Type.fundType() == typeDest.fundType() && +- (!exprSrc.Type.isPredefType(PredefinedType.PT_STRING) || constant.Val.IsNullRef)) ++ (!exprSrc.Type.isPredefType(PredefinedType.PT_STRING) || ((ExprConstant)exprConst).Val.IsNullRef)) + { ++ ExprConstant constant = (ExprConstant)exprConst; + ExprConstant expr = GetExprFactory().CreateConstant(typeDest, constant.Val); + pexprDest = expr; + return; +@@ -1191,8 +1192,9 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics + while (list != null) + { + Expr arg; +- if (list is ExprList next) ++ if (list is ExprList) + { ++ ExprList next = (ExprList)list; + arg = next.OptionalElement; + list = next.OptionalNextListNode; + } +@@ -1265,8 +1267,9 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics + + private Expr UnwrapExpression(Expr pExpression) + { +- while (pExpression is ExprWrap wrap) ++ while (pExpression is ExprWrap) + { ++ ExprWrap wrap = (ExprWrap)pExpression; + Expr wrapped = wrap.OptionalExpression; + if (wrapped == null) + { +@@ -1344,8 +1347,9 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics + return false; + if (expr.isLvalue()) + { +- if (expr is ExprProperty prop) ++ if (expr is ExprProperty) + { ++ ExprProperty prop = (ExprProperty)expr; + CheckLvalueProp(prop); + } + markFieldAssigned(expr); +@@ -1571,9 +1575,10 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics + + // If we're invoking code on a struct-valued field, mark the struct as assigned (to + // avoid warning CS0649). +- if (pObject is ExprField field && !field.FieldWithType.Field().isAssigned && !swt.Sym.IsFieldSymbol() && ++ if (pObject is ExprField && !((ExprField)pObject).FieldWithType.Field().isAssigned && !swt.Sym.IsFieldSymbol() && + typeObj.isStructType() && !typeObj.isPredefined()) + { ++ ExprField field = (ExprField) pObject; + field.FieldWithType.Field().isAssigned = true; + } + +@@ -1786,8 +1791,9 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics + + Expr argument = indir; + Expr rval; +- if (argument is ExprNamedArgumentSpecification named) ++ if (argument is ExprNamedArgumentSpecification) + { ++ ExprNamedArgumentSpecification named = (ExprNamedArgumentSpecification)argument; + int index = 0; + // If we're named, look for the type of the matching name. + foreach (Name i in mostDerivedMethod.ParameterNames) +@@ -1928,8 +1934,9 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics + Expr expr = it.Current(); + count++; + +- if (expr is ExprNamedArgumentSpecification named) ++ if (expr is ExprNamedArgumentSpecification) + { ++ ExprNamedArgumentSpecification named = (ExprNamedArgumentSpecification)expr; + named.Value = tryConvert(named.Value, elementType); + } + else +@@ -1951,8 +1958,9 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics + + private void markFieldAssigned(Expr expr) + { +- if (0 != (expr.Flags & EXPRFLAG.EXF_LVALUE) && expr is ExprField field) ++ if (0 != (expr.Flags & EXPRFLAG.EXF_LVALUE) && expr is ExprField) + { ++ ExprField field = (ExprField) expr; + FieldSymbol symbol; + do + { +@@ -2019,8 +2027,9 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics + for (Expr list = args; list != null; iarg++) + { + Expr arg; +- if (list is ExprList next) ++ if (list is ExprList) + { ++ ExprList next = (ExprList)list; + arg = next.OptionalElement; + list = next.OptionalNextListNode; + } +@@ -2374,8 +2383,9 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics + { + Expr arg; + +- if (list is ExprList next) ++ if (list is ExprList) + { ++ ExprList next = (ExprList)list; + arg = next.OptionalElement; + list = next.OptionalNextListNode; + } +diff --git a/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/GroupToArgsBinder.cs b/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/GroupToArgsBinder.cs +index 7708f197ae..b75ac340be 100644 +--- a/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/GroupToArgsBinder.cs ++++ b/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/GroupToArgsBinder.cs +@@ -510,7 +510,7 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics + // then let us through. + if (methprop.isParamArray && + index < pArguments.carg && +- pArguments.prgexpr[index] is ExprArrayInit arrayInit && arrayInit.GeneratedForParamArray) ++ pArguments.prgexpr[index] is ExprArrayInit && ((ExprArrayInit)pArguments.prgexpr[index]).GeneratedForParamArray) + { + paramArrayArgument = pArguments.prgexpr[index]; + } +@@ -518,7 +518,7 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics + // Positional. + if (index < pArguments.carg && + !(pArguments.prgexpr[index] is ExprNamedArgumentSpecification) && +- !(pArguments.prgexpr[index] is ExprArrayInit arrayInitPos && arrayInitPos.GeneratedForParamArray)) ++ !(pArguments.prgexpr[index] is ExprArrayInit && ((ExprArrayInit)pArguments.prgexpr[index]).GeneratedForParamArray)) + { + pExprArguments[index] = pArguments.prgexpr[index++]; + continue; +@@ -839,7 +839,7 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics + for (int i = 0; i < pArguments.carg; i++) + { + Expr expr = prgexpr[i]; +- if (expr is ExprNamedArgumentSpecification named && named.Name == pName) ++ if (expr is ExprNamedArgumentSpecification && ((ExprNamedArgumentSpecification)expr).Name == pName) + { + return expr; + } +@@ -861,7 +861,8 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics + HashSet names = new HashSet(); + for (int i = 0; i < _pArguments.carg; i++) + { +- if (!(_pArguments.prgexpr[i] is ExprNamedArgumentSpecification named)) ++ ExprNamedArgumentSpecification named; ++ if (!(_pArguments.prgexpr[i] is ExprNamedArgumentSpecification)) + { + if (!currentPosition.IsEmpty()) + { +@@ -869,6 +870,7 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics + } + continue; + } ++ named = (ExprNamedArgumentSpecification) _pArguments.prgexpr[i]; + + Name name = named.Name; + if (!methprop.ParameterNames.Contains(name)) +@@ -1080,8 +1082,9 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics + Expr pArgument = _pArguments.prgexpr[ivar]; + + // If we have a named argument, strip it to do the conversion. +- if (pArgument is ExprNamedArgumentSpecification named) ++ if (pArgument is ExprNamedArgumentSpecification) + { ++ ExprNamedArgumentSpecification named = (ExprNamedArgumentSpecification)pArgument; + pArgument = named.Value; + } + +diff --git a/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/ImplicitConversion.cs b/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/ImplicitConversion.cs +index f1a0159e53..fdbd1dd426 100644 +--- a/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/ImplicitConversion.cs ++++ b/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/ImplicitConversion.cs +@@ -172,8 +172,9 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics + VSFAIL("Bad type symbol kind"); + break; + case TypeKind.TK_MethodGroupType: +- if (_exprSrc is ExprMemberGroup memGrp) ++ if (_exprSrc is ExprMemberGroup) + { ++ ExprMemberGroup memGrp = (ExprMemberGroup)_exprSrc; + ExprCall outExpr; + bool retVal = _binder.BindGrpConversion(memGrp, _typeDest, _needsExprDest, out outExpr, false); + _exprDest = outExpr; +@@ -744,10 +745,10 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics + // * A constant-expression of type long can be converted to type ulong, provided the value of + // the constant-expression is not negative. + // Note: Don't use GetConst here since the conversion only applies to bona-fide compile time constants. +- if (_exprSrc is ExprConstant constant && _exprSrc.IsOK && ++ if (_exprSrc is ExprConstant && _exprSrc.IsOK && + ((ptSrc == PredefinedType.PT_INT && ptDest != PredefinedType.PT_BOOL && ptDest != PredefinedType.PT_CHAR) || + (ptSrc == PredefinedType.PT_LONG && ptDest == PredefinedType.PT_ULONG)) && +- isConstantInRange(constant, _typeDest)) ++ isConstantInRange(((ExprConstant)_exprSrc), _typeDest)) + { + // Special case (CLR 6.1.6): if integral constant is in range, the conversion is a legal implicit conversion. + convertKind = ConvKind.Implicit; +diff --git a/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/MethodTypeInferrer.cs b/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/MethodTypeInferrer.cs +index 589b9c96d0..2559ca5c85 100644 +--- a/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/MethodTypeInferrer.cs ++++ b/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/MethodTypeInferrer.cs +@@ -1064,10 +1064,11 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics + // SPEC: yields a single method with return CType U then a lower-bound + // SPEC: inference is made from U to Tb. + +- if (!(pSource is ExprMemberGroup memGrp)) ++ if (!(pSource is ExprMemberGroup)) + { + return false; + } ++ ExprMemberGroup memGrp = (ExprMemberGroup)pSource; + pType = pType.GetDelegateTypeOfPossibleExpression(); + if (!pType.isDelegateType()) + { +diff --git a/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Nullable.cs b/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Nullable.cs +index 19dbea7e2f..1d258f2d67 100644 +--- a/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Nullable.cs ++++ b/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Nullable.cs +@@ -29,8 +29,9 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics + { + Debug.Assert(expr != null); + +- if (expr is ExprCall pCall && pCall.MemberGroup.OptionalObject == null) ++ if (expr is ExprCall && ((ExprCall)expr).MemberGroup.OptionalObject == null) + { ++ ExprCall pCall = (ExprCall)expr; + MethodSymbol meth = pCall.MethWithInst.Meth(); + if (meth != null && meth.IsNullableConstructor()) + { +@@ -45,7 +46,8 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics + + public static Expr StripNullableConstructor(Expr pExpr) + { +- while (IsNullableConstructor(pExpr, out ExprCall call)) ++ ExprCall call; ++ while (IsNullableConstructor(pExpr, out call)) + { + pExpr = call.OptionalArguments; + Debug.Assert(pExpr != null && !(pExpr is ExprList)); +@@ -60,7 +62,8 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics + Debug.Assert(exprSrc != null && exprSrc.Type.IsNullableType()); + + // For new T?(x), the answer is x. +- if (IsNullableConstructor(exprSrc, out ExprCall call)) ++ ExprCall call; ++ if (IsNullableConstructor(exprSrc, out call)) + { + var args = call.OptionalArguments; + Debug.Assert(args != null && !(args is ExprList)); +diff --git a/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/ExpressionIterator.cs b/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/ExpressionIterator.cs +index 96ee032422..9397543de6 100644 +--- a/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/ExpressionIterator.cs ++++ b/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/ExpressionIterator.cs +@@ -83,8 +83,9 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics + _pList = null; + _pCurrent = null; + } +- else if (pExpr is ExprList pList) ++ else if (pExpr is ExprList) + { ++ ExprList pList = (ExprList)pExpr; + _pList = pList; + _pCurrent = pList.OptionalElement; + } +diff --git a/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/Visitors/ExprVisitorBase.cs b/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/Visitors/ExprVisitorBase.cs +index e2ce8e88f5..ded4d0b216 100644 +--- a/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/Visitors/ExprVisitorBase.cs ++++ b/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/Visitors/ExprVisitorBase.cs +@@ -21,8 +21,9 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics + return pResult; + } + +- if (pExpr is ExprStatement statement) ++ if (pExpr is ExprStatement) + { ++ ExprStatement statement = (ExprStatement)pExpr; + return CacheExprMapping(pExpr, DispatchStatementList(statement)); + } + +@@ -279,11 +280,13 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics + return; + } + +- if (!(nextNode is ExprList next)) ++ ExprList next; ++ if (!(nextNode is ExprList)) + { + list.OptionalNextListNode = Visit(nextNode); + return; + } ++ next = (ExprList)nextNode; + + list = next; + } +diff --git a/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/Visitors/ExpressionTreeRewriter.cs b/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/Visitors/ExpressionTreeRewriter.cs +index 8a841ee5d9..cb40a59f6d 100644 +--- a/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/Visitors/ExpressionTreeRewriter.cs ++++ b/src/Microsoft.CSharp/src/Microsoft/CSharp/RuntimeBinder/Semantics/Tree/Visitors/ExpressionTreeRewriter.cs +@@ -54,8 +54,9 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics + // For assignments, we either have a member assignment or an indexed assignment. + //Debug.Assert(assignment.GetLHS().isPROP() || assignment.GetLHS().isFIELD() || assignment.GetLHS().isARRAYINDEX() || assignment.GetLHS().isLOCAL()); + Expr lhs; +- if (assignment.LHS is ExprProperty prop) ++ if (assignment.LHS is ExprProperty) + { ++ ExprProperty prop = (ExprProperty)assignment.LHS; + if (prop.OptionalArguments== null) + { + // Regular property. +@@ -318,8 +319,9 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics + // can handle in the general case all implicit boxing conversions. Right now it + // requires that all arguments to a call that need to be boxed be explicitly boxed. + +- if (pObject != null && pObject is ExprCast cast && cast.IsBoxingCast) ++ if (pObject != null && pObject is ExprCast && ((ExprCast)pObject).IsBoxingCast) + { ++ ExprCast cast = (ExprCast) pObject; + pObject = cast.Argument; + } + pObject = Visit(pObject); +@@ -597,8 +599,9 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics + if (udcall != null) + { + Debug.Assert(udcall.Kind == ExpressionKind.Call || udcall.Kind == ExpressionKind.UserLogicalOp); +- if (udcall is ExprCall ascall) ++ if (udcall is ExprCall) + { ++ ExprCall ascall = (ExprCall)udcall; + ExprList args = (ExprList)ascall.OptionalArguments; + Debug.Assert(args.OptionalNextListNode.Kind != ExpressionKind.List); + p1 = args.OptionalElement; +@@ -731,8 +734,9 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics + ExprBlock body = anonmeth.OptionalBody; + + // The most likely case: +- if (body.OptionalStatements is ExprReturn ret) ++ if (body.OptionalStatements is ExprReturn) + { ++ ExprReturn ret = (ExprReturn)body.OptionalStatements; + Debug.Assert(ret.OptionalObject != null); + return Visit(ret.OptionalObject); + } +@@ -854,8 +858,9 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics + Expr pUDConversion = call?.PConversions; + if (pUDConversion != null) + { +- if (pUDConversion is ExprCall convCall) ++ if (pUDConversion is ExprCall) + { ++ ExprCall convCall = (ExprCall)pUDConversion; + Expr pUDConversionArgument = convCall.OptionalArguments; + if (IsNullableValueAccess(pUDConversionArgument, pArgument)) + { +@@ -1238,23 +1243,25 @@ namespace Microsoft.CSharp.RuntimeBinder.Semantics + private bool IsNullableValueAccess(Expr pExpr, Expr pObject) + { + Debug.Assert(pExpr != null); +- return pExpr is ExprProperty prop && prop.MemberGroup.OptionalObject == pObject && pObject.Type.IsNullableType(); ++ return pExpr is ExprProperty && ((ExprProperty)pExpr).MemberGroup.OptionalObject == pObject && pObject.Type.IsNullableType(); + } + + private bool IsDelegateConstructorCall(Expr pExpr) + { + Debug.Assert(pExpr != null); +- if (!(pExpr is ExprCall pCall)) ++ ExprCall pCall; ++ if (!(pExpr is ExprCall)) + { + return false; + } ++ pCall = (ExprCall)pExpr; + + return pCall.MethWithInst.Meth() != null && + pCall.MethWithInst.Meth().IsConstructor() && + pCall.Type.isDelegateType() && + pCall.OptionalArguments != null && +- pCall.OptionalArguments is ExprList list && +- list.OptionalNextListNode.Kind == ExpressionKind.FunctionPointer; ++ (pCall.OptionalArguments is ExprList) && ++ ((ExprList)pCall.OptionalArguments).OptionalNextListNode.Kind == ExpressionKind.FunctionPointer; + } + private static bool isEnumToDecimalConversion(CType argtype, CType desttype) + { +diff --git a/src/System.Collections/src/System/Collections/Generic/SortedSet.TreeSubSet.cs b/src/System.Collections/src/System/Collections/Generic/SortedSet.TreeSubSet.cs +index 4eb817c0af..671636f428 100644 +--- a/src/System.Collections/src/System/Collections/Generic/SortedSet.TreeSubSet.cs ++++ b/src/System.Collections/src/System/Collections/Generic/SortedSet.TreeSubSet.cs +@@ -352,7 +352,10 @@ namespace System.Collections.Generic + throw new PlatformNotSupportedException(); + } + +- protected override void OnDeserialization(Object sender) => throw new PlatformNotSupportedException(); ++ protected override void OnDeserialization(Object sender) ++ { ++ throw new PlatformNotSupportedException(); ++ } + } + } + } +diff --git a/src/System.Linq.Expressions/src/System/Dynamic/Utils/TypeExtensions.cs b/src/System.Linq.Expressions/src/System/Dynamic/Utils/TypeExtensions.cs +index c45caba093..ef9a25203d 100644 +--- a/src/System.Linq.Expressions/src/System/Dynamic/Utils/TypeExtensions.cs ++++ b/src/System.Linq.Expressions/src/System/Dynamic/Utils/TypeExtensions.cs +@@ -65,7 +65,8 @@ namespace System.Dynamic.Utils + internal static ParameterInfo[] GetParametersCached(this MethodBase method) + { + CacheDict pic = s_paramInfoCache; +- if (!pic.TryGetValue(method, out ParameterInfo[] pis)) ++ ParameterInfo[] pis; ++ if (!pic.TryGetValue(method, out pis)) + { + pis = method.GetParameters(); + +diff --git a/src/System.Linq.Expressions/src/System/Linq/Expressions/Compiler/LambdaCompiler.Expressions.cs b/src/System.Linq.Expressions/src/System/Linq/Expressions/Compiler/LambdaCompiler.Expressions.cs +index d8b1c61f74..8cefbd4f19 100644 +--- a/src/System.Linq.Expressions/src/System/Linq/Expressions/Compiler/LambdaCompiler.Expressions.cs ++++ b/src/System.Linq.Expressions/src/System/Linq/Expressions/Compiler/LambdaCompiler.Expressions.cs +@@ -952,8 +952,9 @@ namespace System.Linq.Expressions.Compiler + private void EmitMemberAssignment(MemberAssignment binding, Type objectType) + { + EmitExpression(binding.Expression); +- if (binding.Member is FieldInfo fi) ++ if (binding.Member is FieldInfo) + { ++ FieldInfo fi = (FieldInfo)binding.Member; + _ilg.Emit(OpCodes.Stfld, fi); + } + else +@@ -1097,7 +1098,7 @@ namespace System.Linq.Expressions.Compiler + private static Type GetMemberType(MemberInfo member) + { + Debug.Assert(member is FieldInfo || member is PropertyInfo); +- return member is FieldInfo fi ? fi.FieldType : (member as PropertyInfo).PropertyType; ++ return member is FieldInfo ? ((FieldInfo)member).FieldType : (member as PropertyInfo).PropertyType; + } + + #endregion +diff --git a/src/System.Linq.Expressions/src/System/Linq/Expressions/MemberAssignment.cs b/src/System.Linq.Expressions/src/System/Linq/Expressions/MemberAssignment.cs +index 475a6c63cc..0787b10186 100644 +--- a/src/System.Linq.Expressions/src/System/Linq/Expressions/MemberAssignment.cs ++++ b/src/System.Linq.Expressions/src/System/Linq/Expressions/MemberAssignment.cs +@@ -93,23 +93,23 @@ namespace System.Linq.Expressions + + // Null paramName as there are two paths here with different parameter names at the API + TypeUtils.ValidateType(decType, null); +- switch (member) ++ if (member is PropertyInfo) + { +- case PropertyInfo pi: +- if (!pi.CanWrite) +- { +- throw Error.PropertyDoesNotHaveSetter(pi, nameof(member)); +- } +- +- memberType = pi.PropertyType; +- break; +- +- case FieldInfo fi: +- memberType = fi.FieldType; +- break; +- +- default: +- throw Error.ArgumentMustBeFieldInfoOrPropertyInfo(nameof(member)); ++ PropertyInfo pi = (PropertyInfo) member; ++ if (!pi.CanWrite) ++ { ++ throw Error.PropertyDoesNotHaveSetter(pi, nameof(member)); ++ } ++ memberType = pi.PropertyType; ++ } ++ else if (member is FieldInfo) ++ { ++ FieldInfo fi = (FieldInfo) member; ++ memberType = fi.FieldType; ++ } ++ else ++ { ++ throw Error.ArgumentMustBeFieldInfoOrPropertyInfo(nameof(member)); + } + } + } +diff --git a/src/System.Linq.Expressions/src/System/Linq/Expressions/MemberBinding.cs b/src/System.Linq.Expressions/src/System/Linq/Expressions/MemberBinding.cs +index c1c5884618..43c0698f90 100644 +--- a/src/System.Linq.Expressions/src/System/Linq/Expressions/MemberBinding.cs ++++ b/src/System.Linq.Expressions/src/System/Linq/Expressions/MemberBinding.cs +@@ -61,6 +61,9 @@ namespace System.Linq.Expressions + return ExpressionStringBuilder.MemberBindingToString(this); + } + +- internal virtual void ValidateAsDefinedHere(int index) => throw Error.UnknownBindingType(index); ++ internal virtual void ValidateAsDefinedHere(int index) ++ { ++ throw Error.UnknownBindingType(index); ++ } + } + } +diff --git a/src/System.Linq.Expressions/src/System/Linq/Expressions/MemberMemberBinding.cs b/src/System.Linq.Expressions/src/System/Linq/Expressions/MemberMemberBinding.cs +index f3981a2b1f..75dd7141da 100644 +--- a/src/System.Linq.Expressions/src/System/Linq/Expressions/MemberMemberBinding.cs ++++ b/src/System.Linq.Expressions/src/System/Linq/Expressions/MemberMemberBinding.cs +@@ -127,23 +127,24 @@ namespace System.Linq.Expressions + + // Null paramName as there are several paths here with different parameter names at the API + TypeUtils.ValidateType(decType, null, allowByRef: true, allowPointer: true); +- switch (member) ++ if (member is PropertyInfo) + { +- case PropertyInfo pi: +- if (!pi.CanRead) +- { +- throw Error.PropertyDoesNotHaveGetter(pi, nameof(member)); +- } +- +- memberType = pi.PropertyType; +- break; +- +- case FieldInfo fi: +- memberType = fi.FieldType; +- break; ++ PropertyInfo pi = (PropertyInfo)member; ++ if (!pi.CanRead) ++ { ++ throw Error.PropertyDoesNotHaveGetter(pi, nameof(member)); ++ } + +- default: +- throw Error.ArgumentMustBeFieldInfoOrPropertyInfo(nameof(member)); ++ memberType = pi.PropertyType; ++ } ++ else if (member is FieldInfo) ++ { ++ FieldInfo fi = (FieldInfo)member; ++ memberType = fi.FieldType; ++ } ++ else ++ { ++ throw Error.ArgumentMustBeFieldInfoOrPropertyInfo(nameof(member)); + } + } + +diff --git a/src/System.Net.HttpListener/src/System/Net/WebSockets/HttpListenerWebSocketContext.cs b/src/System.Net.HttpListener/src/System/Net/WebSockets/HttpListenerWebSocketContext.cs +index 5321578946..ff54677027 100644 +--- a/src/System.Net.HttpListener/src/System/Net/WebSockets/HttpListenerWebSocketContext.cs ++++ b/src/System.Net.HttpListener/src/System/Net/WebSockets/HttpListenerWebSocketContext.cs +@@ -94,8 +94,9 @@ namespace System.Net.WebSockets + if (!(user is WindowsPrincipal)) + { + // AuthenticationSchemes.Basic. +- if (user.Identity is HttpListenerBasicIdentity basicIdentity) ++ if (user.Identity is HttpListenerBasicIdentity) + { ++ HttpListenerBasicIdentity basicIdentity = (HttpListenerBasicIdentity)user.Identity; + return new GenericPrincipal(new HttpListenerBasicIdentity(basicIdentity.Name, basicIdentity.Password), null); + } + } diff --git a/gnu/packages/patches/mono-5.4.0-patches.patch b/gnu/packages/patches/mono-5.4.0-patches.patch new file mode 100644 index 00000000000..007a6b847c6 --- /dev/null +++ b/gnu/packages/patches/mono-5.4.0-patches.patch @@ -0,0 +1,100 @@ +diff --git a/mcs/class/System/Mono.Net.Security/AsyncProtocolRequest.cs b/mcs/class/System/Mono.Net.Security/AsyncProtocolRequest.cs +index 3c537a7e427..59beb19255f 100644 +--- a/mcs/class/System/Mono.Net.Security/AsyncProtocolRequest.cs ++++ b/mcs/class/System/Mono.Net.Security/AsyncProtocolRequest.cs +@@ -316,7 +316,9 @@ namespace Mono.Net.Security + { + Debug ("ProcessRead - read user: {0} {1}", this, status); + +- var (ret, wantMore) = Parent.ProcessRead (UserBuffer); ++ System.ValueTuple t0 = Parent.ProcessRead (UserBuffer); ++ var ret = t0.Item1; ++ var wantMore = t0.Item2; + + Debug ("ProcessRead - read user done: {0} - {1} {2}", this, ret, wantMore); + +@@ -355,7 +357,9 @@ namespace Mono.Net.Security + return AsyncOperationStatus.Complete; + } + +- var (ret, wantMore) = Parent.ProcessWrite (UserBuffer); ++ System.ValueTuple t0 = Parent.ProcessWrite (UserBuffer); ++ var ret = t0.Item1; ++ var wantMore = t0.Item2; + + Debug ("ProcessWrite - write user done: {0} - {1} {2}", this, ret, wantMore); + +diff --git a/mcs/class/System/Mono.Net.Security/MobileAuthenticatedStream.cs b/mcs/class/System/Mono.Net.Security/MobileAuthenticatedStream.cs +index 2b380a1ae6c..66e45bc1f1d 100644 +--- a/mcs/class/System/Mono.Net.Security/MobileAuthenticatedStream.cs ++++ b/mcs/class/System/Mono.Net.Security/MobileAuthenticatedStream.cs +@@ -403,8 +403,10 @@ namespace Mono.Net.Security + asyncReadRequest != null ? "async" : "", + readBuffer != null ? readBuffer.ToString () : ""); + var asyncRequest = asyncHandshakeRequest ?? asyncReadRequest; +- var (ret, wantMore) = InternalRead (asyncRequest, readBuffer, buffer, offset, size); +- outWantMore = wantMore; ++ System.ValueTuple t0 = InternalRead (asyncRequest, readBuffer, buffer, offset, size); ++ var ret = t0.Item1; ++ var wantMore = t0.Item2; ++ outWantMore = wantMore; + return ret; + } catch (Exception ex) { + Debug ("InternalRead failed: {0}", ex); +@@ -414,7 +416,7 @@ namespace Mono.Net.Security + } + } + +- (int, bool) InternalRead (AsyncProtocolRequest asyncRequest, BufferOffsetSize internalBuffer, byte[] buffer, int offset, int size) ++ System.ValueTuple InternalRead (AsyncProtocolRequest asyncRequest, BufferOffsetSize internalBuffer, byte[] buffer, int offset, int size) + { + if (asyncRequest == null) + throw new InvalidOperationException (); +@@ -436,7 +438,7 @@ namespace Mono.Net.Security + Debug ("InternalRead #1: {0} {1} {2}", internalBuffer.Offset, internalBuffer.TotalBytes, size); + internalBuffer.Offset = internalBuffer.Size = 0; + asyncRequest.RequestRead (size); +- return (0, true); ++ return new ValueTuple(0, true); + } + + /* +@@ -451,7 +453,7 @@ namespace Mono.Net.Security + Buffer.BlockCopy (internalBuffer.Buffer, internalBuffer.Offset, buffer, offset, len); + internalBuffer.Offset += len; + internalBuffer.Size -= len; +- return (len, !internalBuffer.Complete && len < size); ++ return new ValueTuple(len, !internalBuffer.Complete && len < size); + } + + /* +@@ -620,21 +622,23 @@ namespace Mono.Net.Security + } + } + +- internal (int, bool) ProcessRead (BufferOffsetSize userBuffer) ++ internal System.ValueTuple ProcessRead (BufferOffsetSize userBuffer) + { + lock (ioLock) { + // This operates on the internal buffer and will never block. +- var ret = xobileTlsContext.Read (userBuffer.Buffer, userBuffer.Offset, userBuffer.Size, out bool wantMore); +- return (ret, wantMore); ++ bool wantMore; ++ var ret = xobileTlsContext.Read (userBuffer.Buffer, userBuffer.Offset, userBuffer.Size, out wantMore); ++ return new System.ValueTuple(ret, wantMore); + } + } + +- internal (int, bool) ProcessWrite (BufferOffsetSize userBuffer) ++ internal System.ValueTuple ProcessWrite (BufferOffsetSize userBuffer) + { + lock (ioLock) { + // This operates on the internal buffer and will never block. +- var ret = xobileTlsContext.Write (userBuffer.Buffer, userBuffer.Offset, userBuffer.Size, out bool wantMore); +- return (ret, wantMore); ++ bool wantMore; ++ var ret = xobileTlsContext.Write (userBuffer.Buffer, userBuffer.Offset, userBuffer.Size, out wantMore); ++ return new System.ValueTuple(ret, wantMore); + } + } + -- Efraim Flashner אפרים פלשנר GPG key = A28B F40C 3E55 1372 662D 14F7 41AA E7DC CA3D 8351 Confidentiality cannot be guaranteed on emails sent or received unencrypted From debbugs-submit-bounces@debbugs.gnu.org Mon Dec 16 12:29:06 2024 Received: (at 74609) by debbugs.gnu.org; 16 Dec 2024 17:29:07 +0000 Received: from localhost ([127.0.0.1]:55882 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1tNEu0-0006Ju-Ls for submit@debbugs.gnu.org; Mon, 16 Dec 2024 12:29:06 -0500 Received: from mail-wm1-f43.google.com ([209.85.128.43]:55616) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1tNEtn-0006Hl-4R for 74609@debbugs.gnu.org; Mon, 16 Dec 2024 12:28:52 -0500 Received: by mail-wm1-f43.google.com with SMTP id 5b1f17b1804b1-4361dc6322fso28856445e9.3 for <74609@debbugs.gnu.org>; Mon, 16 Dec 2024 09:28:51 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1734370065; x=1734974865; darn=debbugs.gnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:sender:from:to:cc:subject:date :message-id:reply-to; bh=YjikGg/6fXCa8j7BFRdVC+FFo8oNH5WmWT8jiICWye8=; b=Cnk8m79vI+OEYmNP90ty10Tk9FOBvxdTXqpgIy/lwRM3cwW4To1NqqrFNlf5kOAvJV lT/MVi/sm4Md60IG/Jf2ep7UmQuU1VJ5z8dX9Zl0AyMEJJ2kWhgLapO2TpLFKVIxDWWo GT8vJW143udVelKJsaFvUnGy0Pft7uvgW1llLsd1wEMPJZH7M8PI+wai+vBSb2XMZqJ0 ppvp/T7M/rrcE6mw1HKBMH6uD59iuX0eXvWB7i/VG79L4TlKjNMBGKpF1OfUJLESbvsg fwpx5QemDBz9s34WaPb355r5U2Cb9izIITicq6s6dz6i7qzAUNGWozzqGHFr1xV9IAMF S+cw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1734370065; x=1734974865; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:sender:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=YjikGg/6fXCa8j7BFRdVC+FFo8oNH5WmWT8jiICWye8=; b=l4xvws1ieA0frqjQ/TSrZ+jv5g+FiomZNda+BP4bkcbMLO12lFMXY0U6EhsoUk/0ab 1DwumAefFxfhLKPJgbUjpaTG0/LOolUsrBVL3+E+JRTTyQ/uLWw9sCYabWMMFaYRXspF dFVLsCd/kucOPOOyj6Bh+1yG7BLoJEiTufpgg4KPYbhZTHYYJGK1SG63VmBeJmpS/hu1 3ATHyDg+p68oid3QQ07vXhj4zguHIzlWE+Eg4ZXGH0djgilehHkhfwDI22+FpZ9alqdo zkrQrX2So/a+1P4JLgyVLOWM9/ghiA2SL0H/pXB+Kfa+4Prj8TKWM03gEVZQTtml2THo c24g== X-Gm-Message-State: AOJu0Ywsc9dGmlRxyy3K0zjSk2vKtS/Lk5r4o7zw3eKhh5DHIJ+7jTtf eyo+sFaT8wWVVaMZ15Dn7fLJXi3aietp3GSPecGSGypadwjqhhd96O5Qw3I6 X-Gm-Gg: ASbGncvVEFEnMhODXSPGOkBysjG/TLEr7t+BUAfe4TVv4DgS9yqwMLA4w0qU+rvu4rt KNV0XaQsoSk0HEMwejxLEy/ZdweExq1Y3PPbGYQyEpCIj/Pan7Iu07Yvk1YZqvJ78xA2bLLYGQc kXV6BrRcAGqK77h2gGUemZGlK4/u7m3XArPhMmqItjmSAjgd54pnBXRRN9wLz0p/MWSe6PKzr0L gYy7425F9eg32cCKCENgS5BSjwcVaPCzT3zwkXKvlhlgiN+41qPjyb05jpyHg== X-Google-Smtp-Source: AGHT+IHmejVFGWF5g8dolBgkX+Vt9RjlIXe9CvBKNGx0k0dJT3sou3DrirJlUpHXCOFRzEpjx2wOqg== X-Received: by 2002:a05:6000:188f:b0:386:5b2:a9d9 with SMTP id ffacd0b85a97d-3888e0c04aemr10585186f8f.53.1734370065281; Mon, 16 Dec 2024 09:27:45 -0800 (PST) Received: from localhost ([31.210.180.118]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-388c8049facsm8867328f8f.79.2024.12.16.09.27.44 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 16 Dec 2024 09:27:44 -0800 (PST) From: Efraim Flashner To: 74609@debbugs.gnu.org Subject: [PATCH 17/21] gnu: Add mono-5.8.0. Date: Mon, 16 Dec 2024 19:26:40 +0200 Message-ID: <6bb9968172b788d893ce204e2c8ac9c4a9142b39.1734369314.git.efraim@flashner.co.il> X-Mailer: git-send-email 2.46.0 In-Reply-To: References: MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Spam-Score: 0.3 (/) X-Debbugs-Envelope-To: 74609 Cc: aaron.covrig.us@ieee.org, ludo@gnu.org, unmush , richard@freakingpenguin.com, unmush@proton.me, janneke@gnu.org 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: -0.7 (/) From: unmush * gnu/packages/dotnet.scm (mono-5.8.0-external-repo-specs, mono-5.8.0): New variables. * gnu/packages/patches/mono-5.8.0-patches.patch: New patch. * gnu/local.mk (dist_patch_DATA): Register new patch. Change-Id: Iea71bf52d67a182f7543adaba44409dbf6c3c0e2 --- gnu/local.mk | 1 + gnu/packages/dotnet.scm | 123 ++++++++++++++++++ gnu/packages/patches/mono-5.8.0-patches.patch | 60 +++++++++ 3 files changed, 184 insertions(+) create mode 100644 gnu/packages/patches/mono-5.8.0-patches.patch diff --git a/gnu/local.mk b/gnu/local.mk index 788f3bb835a..2b1a6f7c782 100644 --- a/gnu/local.mk +++ b/gnu/local.mk @@ -1828,6 +1828,7 @@ dist_patch_DATA = \ %D%/packages/patches/mono-2.11.4-fixes.patch \ %D%/packages/patches/mono-4.9.0-fix-runtimemetadataversion.patch \ %D%/packages/patches/mono-5.4.0-patches.patch \ + %D%/packages/patches/mono-5.8.0-patches.patch \ %D%/packages/patches/mosaicatcher-unbundle-htslib.patch \ %D%/packages/patches/mrrescue-support-love-11.patch \ %D%/packages/patches/mtools-mformat-uninitialized.patch \ diff --git a/gnu/packages/dotnet.scm b/gnu/packages/dotnet.scm index 7799f9b951a..82fc2033707 100644 --- a/gnu/packages/dotnet.scm +++ b/gnu/packages/dotnet.scm @@ -1275,3 +1275,126 @@ (define-public mono-pre-5.8.0 ((#:phases phases #~%standard-phases) #~(modify-phases #$phases (delete 'patch-sub-autogen.sh-shebang)))))))) + +(define mono-5.8.0-external-repo-specs + '(("api-doc-tools" "d03e819838c6241f92f90655cb448cc47c9e8791" + "1riki79f3ig3cxigviss81dz601hn92a1gifglm0mzjbs76sf3fj" + #:recursive? #t) + ("api-snapshot" "6668c80a9499218c0b8cc41f48a9e242587df756" + "0vbwbwa1hr4jlj7283w8bk3v5i8s43h8413r2pkh4hf38b2rks7d") + ("aspnetwebstack" "e77b12e6cc5ed260a98447f609e887337e44e299" + "0rks344qr4fmp3fs1264d2qkmm348m8d1kjd7z4l94iiirwn1fq1") + (("reference-assemblies" "binary-reference-assemblies") + "e048fe4a88d237d105ae02fe0363a68296099362" + "0i87i3x694f4g8s2flflv0ah88blxds7gbiyrwrmscqdjsifhy49") + ("bockbuild" "cb4545409dafe16dfe86c7d8e6548a69c369e2a2" + "0svdfv61d6ppwd4zgki129r9prf75fnsqihna253zfwfpzpingx7") + ("boringssl" "3e0770e18835714708860ba9fe1af04a932971ff" + "139a0gl91a52k2r6na6ialzkqykaj1rk88zjrkaz3sdxx7nmmg6y") + ("cecil" "76ffcdabae660e9586273c9b40db180a0dc8d4c8" + "0f3bsfri28pxmnb0m6074bnmmjgsr7cjixv9fhnp6aimhvy4l5p4") + (("cecil" "cecil-legacy") "33d50b874fd527118bc361d83de3d494e8bb55e1" + "1p4hl1796ib26ykyf5snl6cj0lx0v7mjh0xqhjw6qdh753nsjyhb") + ("corefx" "b965d1f8b5281712c4400ef28ed97670ffd4880d" + "0r9hr0bs3j3agqi2pq4n1km9jfycaqvxf6756y7r5l3ykqsd6wsr") + ("corert" "48dba73801e804e89f00311da99d873f9c550278" + "1zw47jf4cwqmaixylisxi73xf6cap41bwf9vlmpxanzxaqklzsvk") + ("ikdasm" "465c0815558fd43c0110f8d00fc186ac0044ac6a" + "0xir7pcgq04hb7s8g9wsqdrypb6l29raj3iz5rcqzdm0056k75w2") + (("ikvm-fork" "ikvm") "847e05fced5c9a41ff0f24f1f9d40d5a8a5772c1" + "1fl9bm3lmzf8iqv3x4iqkz9fc54mwdvrxisxg2nvwwcsi4saffpi") + ("linker" "c62335c350f3902ff0459112f7efc8b926f4f15d" + "015191sdw9i7vnhlsycv65pw8nnfpkd65k11jw1y9bikb4x3aj8x") + ("Newtonsoft.Json" "471c3e0803a9f40a0acc8aeceb31de6ff93a52c4" + "0dgngd5hqk6yhlg40kabn6qdnknm32zcx9q6bm2w31csnsk5978s") + (("NuGet.BuildTasks" "nuget-buildtasks") + "b2c30bc81b2a7733a4eeb252a55f6b4d50cfc3a1" + "01vajrfx6y12f525xdiwfbn9qzmym2s65rbiqpy9d9xw0pnq7gbl") + (("NUnitLite" "nunit-lite") "764656cdafdb3acd25df8cb52a4e0ea14760fccd" + "0pc7lk3p916is8cn4ngaqvjlmlzv3vvjpyksy4pvb3qb5iiaw0vq") + ;; ("roslyn-binaries" "e484c75e2edd3c3f1870a2468a71a56220cf1f7f" + ;; "") + ("rx" "b29a4b0fda609e0af33ff54ed13652b6ccf0e05e" + "1n1jwhmsbkcv2d806immcpzkb72rz04xy98myw355a8w5ah25yiv") + ;; ("xunit-binaries" "d4433b0972f40cb3efaa3fbba52869bde5df8fa8" + ;; "") + )) + +(define-public mono-5.8.0 + (package + (inherit mono-pre-5.8.0) + (version "5.8.0.129") + (name "mono") + (source (origin + (method git-fetch) + (uri + (git-reference + (url "https://gitlab.winehq.org/mono/mono.git") + (commit "mono-5.8.0.129"))) + (file-name (git-file-name name version)) + (sha256 + (base32 + "0130vd33yzp4w7570qw9xjq2g7b2xmacjbpkmzrpbhy8as5hy4z6")) + (modules '((guix build utils) + (ice-9 string-fun))) + (snippet #~(begin + #$(add-external-repos + mono-5.8.0-external-repo-specs) + #$@prepare-mono-source-0)) + (patches + (search-patches "mono-5.8.0-patches.patch")))) + (native-inputs (modify-inputs (package-native-inputs mono-pre-5.8.0) + (replace "mono" mono-pre-5.8.0))) + (arguments + (substitute-keyword-arguments (package-arguments mono-pre-5.8.0) + ((#:phases phases #~%standard-phases) + #~(modify-phases #$phases + (replace 'build-reference-assemblies + ;; More references need updating this time... + (lambda* (#:key make-flags #:allow-other-keys) + (let ((top (getcwd))) + (with-directory-excursion + "external/binary-reference-assemblies" + (substitute* (find-files "." "^Makefile$") + (("CSC_COMMON_ARGS := " all) + (string-append all "-delaysign+ ")) + (("IBM\\.Data\\.DB2_REFS := " all) + (string-append all "System.Xml ")) + (("Mono\\.Data\\.Sqlite_REFS := " all) + (string-append all "System.Xml ")) + (("System\\.Data\\.DataSetExtensions_REFS := " all) + (string-append all "System.Xml ")) + (("System\\.Data\\.OracleClient_REFS := " all) + (string-append all "System.Xml ")) + (("System\\.IdentityModel_REFS := " all) + (string-append all "System.Configuration ")) + (("System\\.Design_REFS := " all) + (string-append all "Accessibility ")) + (("System\\.Web\\.Extensions\\.Design_REFS := " all) + (string-append all "System.Windows.Forms System.Web ")) + (("System\\.ServiceModel\\.Routing_REFS := " all) + (string-append all "System.Xml ")) + (("System\\.Web\\.Abstractions_REFS := " all) + (string-append all "System ")) + (("System\\.Reactive\\.Windows\\.Forms_REFS := " all) + (string-append all "System ")) + (("System\\.Windows\\.Forms\\.DataVisualization_REFS := " all) + (string-append all "Accessibility ")) + (("Facades/System\\.ServiceModel\\.Primitives_REFS := " all) + (string-append all "System.Xml ")) + (("Facades/System\\.Dynamic\\.Runtime_REFS := " all) + (string-append all "System ")) + (("Facades/System\\.Xml\\.XDocument_REFS := " all) + (string-append all "System.Xml ")) + (("Facades/System\\.Runtime\\.Serialization.Xml_REFS := " all) + (string-append all "System.Xml ")) + (("Facades/System\\.Data\\.Common_REFS := " all) + (string-append all "System System.Xml "))) + (apply invoke "make" + (string-append "CSC=MONO_PATH=" + top "/mcs/class/lib/build" + " " + top "/runtime/mono-wrapper" + " " + top "/mcs/class/lib/build/mcs.exe") + make-flags))))))))))) diff --git a/gnu/packages/patches/mono-5.8.0-patches.patch b/gnu/packages/patches/mono-5.8.0-patches.patch new file mode 100644 index 00000000000..f73c51d92f5 --- /dev/null +++ b/gnu/packages/patches/mono-5.8.0-patches.patch @@ -0,0 +1,60 @@ +diff --git a/mcs/class/System/Mono.AppleTls/AppleTlsContext.cs b/mcs/class/System/Mono.AppleTls/AppleTlsContext.cs +index 0cc69e47648..51ded713ba6 100644 +--- a/mcs/class/System/Mono.AppleTls/AppleTlsContext.cs ++++ b/mcs/class/System/Mono.AppleTls/AppleTlsContext.cs +@@ -775,7 +775,7 @@ namespace Mono.AppleTls + [DllImport (SecurityLibrary)] + extern unsafe static /* OSStatus */ SslStatus SSLRead (/* SSLContextRef */ IntPtr context, /* const void* */ byte* data, /* size_t */ IntPtr dataLength, /* size_t* */ out IntPtr processed); + +- public override unsafe (int ret, bool wantMore) Read (byte[] buffer, int offset, int count) ++ public override unsafe System.ValueTuple Read (byte[] buffer, int offset, int count) + { + if (Interlocked.Exchange (ref pendingIO, 1) == 1) + throw new InvalidOperationException (); +@@ -816,7 +816,7 @@ namespace Mono.AppleTls + [DllImport (SecurityLibrary)] + extern unsafe static /* OSStatus */ SslStatus SSLWrite (/* SSLContextRef */ IntPtr context, /* const void* */ byte* data, /* size_t */ IntPtr dataLength, /* size_t* */ out IntPtr processed); + +- public override unsafe (int ret, bool wantMore) Write (byte[] buffer, int offset, int count) ++ public override unsafe System.ValueTuple Write (byte[] buffer, int offset, int count) + { + if (Interlocked.Exchange (ref pendingIO, 1) == 1) + throw new InvalidOperationException (); +diff --git a/mcs/class/System/Mono.Btls/MonoBtlsContext.cs b/mcs/class/System/Mono.Btls/MonoBtlsContext.cs +index 559db4aca5d..b70239c5163 100644 +--- a/mcs/class/System/Mono.Btls/MonoBtlsContext.cs ++++ b/mcs/class/System/Mono.Btls/MonoBtlsContext.cs +@@ -300,7 +300,7 @@ namespace Mono.Btls + throw new NotImplementedException (); + } + +- public override (int ret, bool wantMore) Read (byte[] buffer, int offset, int size) ++ public override System.ValueTuple Read (byte[] buffer, int offset, int size) + { + Debug ("Read: {0} {1} {2}", buffer.Length, offset, size); + +@@ -329,7 +329,7 @@ namespace Mono.Btls + } + } + +- public override (int ret, bool wantMore) Write (byte[] buffer, int offset, int size) ++ public override System.ValueTuple Write (byte[] buffer, int offset, int size) + { + Debug ("Write: {0} {1} {2}", buffer.Length, offset, size); + +diff --git a/mcs/class/System/Mono.Net.Security/MobileTlsContext.cs b/mcs/class/System/Mono.Net.Security/MobileTlsContext.cs +index 74410976a85..46f0eb59b9c 100644 +--- a/mcs/class/System/Mono.Net.Security/MobileTlsContext.cs ++++ b/mcs/class/System/Mono.Net.Security/MobileTlsContext.cs +@@ -165,9 +165,9 @@ namespace Mono.Net.Security + + public abstract void Flush (); + +- public abstract (int ret, bool wantMore) Read (byte[] buffer, int offset, int count); ++ public abstract System.ValueTuple Read (byte[] buffer, int offset, int count); + +- public abstract (int ret, bool wantMore) Write (byte[] buffer, int offset, int count); ++ public abstract System.ValueTuple Write (byte[] buffer, int offset, int count); + + public abstract void Shutdown (); + -- Efraim Flashner אפרים פלשנר GPG key = A28B F40C 3E55 1372 662D 14F7 41AA E7DC CA3D 8351 Confidentiality cannot be guaranteed on emails sent or received unencrypted From debbugs-submit-bounces@debbugs.gnu.org Mon Dec 16 12:29:07 2024 Received: (at 74609) by debbugs.gnu.org; 16 Dec 2024 17:29:07 +0000 Received: from localhost ([127.0.0.1]:55885 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1tNEu2-0006KI-P2 for submit@debbugs.gnu.org; Mon, 16 Dec 2024 12:29:06 -0500 Received: from mail-wr1-f48.google.com ([209.85.221.48]:44509) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1tNEtp-0006IS-Si for 74609@debbugs.gnu.org; Mon, 16 Dec 2024 12:28:54 -0500 Received: by mail-wr1-f48.google.com with SMTP id ffacd0b85a97d-385d7f19f20so2223665f8f.1 for <74609@debbugs.gnu.org>; Mon, 16 Dec 2024 09:28:53 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1734370073; x=1734974873; darn=debbugs.gnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:sender:from:to:cc:subject:date :message-id:reply-to; bh=VDf/8UkXc+p3GKMqepoIH4k81RMdyKX8NFGV4C0gtew=; b=Rs4e3ebrMZ5FvY7FRZvGiY1tf9IIkjM6MvKvCP0ptW6tlss+jFRMfy0akY+CJ0Shw6 E1k4T81sylnSSO1MZteNsliaB2cMoIo7YLBR80cN1lUGUh5WOpnKIagKMBi2R6rbtw7A OOyMF2I8Q+6Qy2hj5yjbCo1/JTutwSd4xLXfm/Ktdhjkn1A4UfzQVSUd67wchPBGRqsi PjW25HHoMShXrZH6HIS2HSuXgHWuJOmt8RT8RyXsD58fWvTwa721SkHcy7fg114mU+YA HN4Gqe0RmVr+ZPZGQw8SPqsXgSthiUrjIxLk+i16tJ0jXkFs6nbKzuP1aO1CQHFn+lcy U1Qg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1734370073; x=1734974873; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:sender:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=VDf/8UkXc+p3GKMqepoIH4k81RMdyKX8NFGV4C0gtew=; b=rRnf7ma8zRN8cGTeyM8+CM1Yez03OeH/4+D2tSxSSHke3JzA0F9cHtSylubHuDntx1 0CsLbyyBMwGJ5I4dzY7fLGvzSUJfcpOAofnZWzv//B/OeS8sNLZlIL99FO1x/Ki4LWyF YrJCAYcL4S3MWqMgINLOkLceB17cNErmpFaQ7C4uebiY942cvDu8MnH2qqsJJwx4/+UA Oy3lMSvMzbrv66Kk8RPhFUs5AeFMmbOL1kd3FhLV5gTfdoKIjQ3cTDQU74Ahj01LLnpd ylaaJRmK/jNdJrXdv12To2eiJ5dXpr1lExwCW5EwuqJq7tvrmJOfC1Tv+7wbbuYxn2QA rIwQ== X-Gm-Message-State: AOJu0Yw3LO5RskPSSs5LL5z7AM+u5CWwTN6txW+HZ0Ec8V8jHVBffpM+ tOBPNs1ZPLpD25fNqU2KmcKIAbB6CSwqfd9/NXSEv46X9HvjHCYCkKPgGaJB X-Gm-Gg: ASbGncu2NBolPgrFxrBfzCOTGtcWGvJGuczv5Eu2mTpmlAstttxdcZVrXuIGEqJ2IJT FSjE8GmSeaTWptimMBorIG9cefJ+oofqL+UUJwnDzWGZsRsvK1uVojBiLQ7GBGPnWTlYzDJ27qx 8sV1TOOiKqYIGklZDsoTaKE7xeoBUZ8CL84hLFbVhkEG8BqjbUSvQPd8sK1z5pFsNVnb0+Tyw3b rPoiabGe6PHq14S2a71dRFYRTPDPx3EvYCbyeeFbo57v/hRIETTX3dku1d+GA== X-Google-Smtp-Source: AGHT+IHUpk+rQBVQKDosBM2O8XMtNiFbEt06YyNtcBWB7swJJRMsTlI8W3GOPPp3K6QFZ1wkRBwrPg== X-Received: by 2002:adf:e190:0:b0:385:ec89:2f07 with SMTP id ffacd0b85a97d-388da3aec66mr441953f8f.32.1734370072325; Mon, 16 Dec 2024 09:27:52 -0800 (PST) Received: from localhost ([31.210.180.118]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-388c806b84esm8669799f8f.108.2024.12.16.09.27.50 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 16 Dec 2024 09:27:51 -0800 (PST) From: Efraim Flashner To: 74609@debbugs.gnu.org Subject: [PATCH 19/21] gnu: Add mono-5.10.0. Date: Mon, 16 Dec 2024 19:26:42 +0200 Message-ID: <923e7eea2cf4aeada71c8dc11d3734dacf27b397.1734369315.git.efraim@flashner.co.il> X-Mailer: git-send-email 2.46.0 In-Reply-To: References: MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Debbugs-Envelope-To: 74609 Cc: aaron.covrig.us@ieee.org, ludo@gnu.org, unmush , richard@freakingpenguin.com, unmush@proton.me, janneke@gnu.org 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" From: unmush * gnu/packages/dotnet.scm (mono-5.10.0-external-repo-specs, mono-5.10.0): New variables. * gnu/packages/patches/mono-5.10.0-later-mcs-changes.patch: New patch. * gnu/local.mk (dist_patch_DATA): Register new patch. Change-Id: Ic5e123c2cd12f9b77d012cd7d73f9be0b5a608ec --- gnu/local.mk | 1 + gnu/packages/dotnet.scm | 119 + .../mono-5.10.0-later-mcs-changes.patch | 4601 +++++++++++++++++ 3 files changed, 4721 insertions(+) create mode 100644 gnu/packages/patches/mono-5.10.0-later-mcs-changes.patch diff --git a/gnu/local.mk b/gnu/local.mk index c58bfe73cdb..35a2d7e55a7 100644 --- a/gnu/local.mk +++ b/gnu/local.mk @@ -1829,6 +1829,7 @@ dist_patch_DATA = \ %D%/packages/patches/mono-4.9.0-fix-runtimemetadataversion.patch \ %D%/packages/patches/mono-5.4.0-patches.patch \ %D%/packages/patches/mono-5.8.0-patches.patch \ + %D%/packages/patches/mono-5.10.0-later-mcs-changes.patch \ %D%/packages/patches/mono-mcs-patches-from-5.10.0.patch \ %D%/packages/patches/mosaicatcher-unbundle-htslib.patch \ %D%/packages/patches/mrrescue-support-love-11.patch \ diff --git a/gnu/packages/dotnet.scm b/gnu/packages/dotnet.scm index 414e955340f..fc5585ecc7e 100644 --- a/gnu/packages/dotnet.scm +++ b/gnu/packages/dotnet.scm @@ -1471,3 +1471,122 @@ (define-public mono-pre-5.10.0 (search-patches "mono-mcs-patches-from-5.10.0.patch")))) (native-inputs (modify-inputs (package-native-inputs mono-5.8.0) (replace "mono" mono-5.8.0)))))) + +(define mono-5.10.0-external-repo-specs + '(("api-doc-tools" "d03e819838c6241f92f90655cb448cc47c9e8791" + "1riki79f3ig3cxigviss81dz601hn92a1gifglm0mzjbs76sf3fj" + #:recursive? #t) + ("api-snapshot" "da8bb8c7b970383ce26c9b09ce3689d843a6222e" + "00kxw09yirdh0bzkvs0v3h6bkdjv9d4g9agn3b8640awvpym3yqw") + ("aspnetwebstack" "e77b12e6cc5ed260a98447f609e887337e44e299" + "0rks344qr4fmp3fs1264d2qkmm348m8d1kjd7z4l94iiirwn1fq1") + (("reference-assemblies" "binary-reference-assemblies") + "e048fe4a88d237d105ae02fe0363a68296099362" + "0i87i3x694f4g8s2flflv0ah88blxds7gbiyrwrmscqdjsifhy49") + ("bockbuild" "1908d43ec630544189bd11630a59ec4ef571db28" + "1h13lgic2dwnbzc58nqhjhagn0f100nl5mhzryjdmypgrf3cr1b3") + ("boringssl" "3e0770e18835714708860ba9fe1af04a932971ff" + "139a0gl91a52k2r6na6ialzkqykaj1rk88zjrkaz3sdxx7nmmg6y") + ("cecil" "dfee11e80d59e1a3d6d9c914c3f277c726bace52" + "1y2f59v988y2llqpqi0zl9ly0lkym8zw0a4vkav7cpp6m5mkq208") + (("cecil" "cecil-legacy") "33d50b874fd527118bc361d83de3d494e8bb55e1" + "1p4hl1796ib26ykyf5snl6cj0lx0v7mjh0xqhjw6qdh753nsjyhb") + ("corefx" "e327d2855ed74dac96f684797e4820345297a690" + "11pinnn8zwf4hi0gfj98cyqkmh7wrmd5mhcdm84gkl9s2g18iaq0") + ("corert" "aa64b376c1a2238b1a768e158d1b11dac77d722a" + "1gg4m49s0ry5yx96dwjary7r395ypzzg4ssz1ajld2x5g7ggvwgg") + ("ikdasm" "465c0815558fd43c0110f8d00fc186ac0044ac6a" + "0xir7pcgq04hb7s8g9wsqdrypb6l29raj3iz5rcqzdm0056k75w2") + (("ikvm-fork" "ikvm") "847e05fced5c9a41ff0f24f1f9d40d5a8a5772c1" + "1fl9bm3lmzf8iqv3x4iqkz9fc54mwdvrxisxg2nvwwcsi4saffpi") + ("linker" "84d37424cde6e66bbf997110a4dbdba7e60038e9" + "07ffkc9ijzsdvbkrc1fn5sb25sgxyabs54kzyblwkzparwj047qr") + ("Newtonsoft.Json" "471c3e0803a9f40a0acc8aeceb31de6ff93a52c4" + "0dgngd5hqk6yhlg40kabn6qdnknm32zcx9q6bm2w31csnsk5978s") + (("NuGet.BuildTasks" "nuget-buildtasks") + "b2c30bc81b2a7733a4eeb252a55f6b4d50cfc3a1" + "01vajrfx6y12f525xdiwfbn9qzmym2s65rbiqpy9d9xw0pnq7gbl") + (("NUnitLite" "nunit-lite") "70bb70b0ffd0109aadaa6e4ea178972d4fb63ea3" + "0ln7rn1960cdwmfqcscp2d2ncpwnknhq9rf8v53ay8g2c3g6gh4q") + ;; ("roslyn-binaries" "00da53c4746250988a92055ef3ac653ccf84fc40" + ;; "") + ("rx" "b29a4b0fda609e0af33ff54ed13652b6ccf0e05e" + "1n1jwhmsbkcv2d806immcpzkb72rz04xy98myw355a8w5ah25yiv") + ;; ("xunit-binaries" "c5a907be25c201cda38bec99f6c82548ab3d9b5a" + ;; "") + )) + +(define-public mono-5.10.0 + (package + (inherit mono-pre-5.10.0) + (version "5.10.0.179") + (name "mono") + (source (origin + (method git-fetch) + (uri + (git-reference + (url "https://gitlab.winehq.org/mono/mono.git") + (commit "mono-5.10.0.179"))) + (file-name (git-file-name name version)) + (sha256 + (base32 + "1zvib164w4mzrsk06ym9my0208ccdanja2fx6x6mlyib358h3626")) + (modules '((guix build utils) + (ice-9 string-fun))) + (snippet #~(begin + #$(add-external-repos + mono-5.10.0-external-repo-specs) + #$@prepare-mono-source-0)) + (patches + (search-patches "mono-5.10.0-later-mcs-changes.patch")))) + (native-inputs (modify-inputs (package-native-inputs mono-pre-5.10.0) + (replace "mono" mono-pre-5.10.0) + (append (default-python)))) + (arguments + (substitute-keyword-arguments (package-arguments mono-pre-5.10.0) + ((#:phases phases #~%standard-phases) + #~(modify-phases #$phases + ;; Build now relies on these being built before any mcs is built; + ;; have to use the input mcs. + (delete 'build-reference-assemblies) + (add-before 'build 'build-reference-assemblies + (lambda* (#:key make-flags #:allow-other-keys) + (let ((top (getcwd))) + (with-directory-excursion + "external/binary-reference-assemblies" + (substitute* (find-files "." "^Makefile$") + (("CSC_COMMON_ARGS := " all) + (string-append all "-delaysign+ ")) + (("IBM\\.Data\\.DB2_REFS := " all) + (string-append all "System.Xml ")) + (("Mono\\.Data\\.Sqlite_REFS := " all) + (string-append all "System.Xml ")) + (("System\\.Data\\.DataSetExtensions_REFS := " all) + (string-append all "System.Xml ")) + (("System\\.Data\\.OracleClient_REFS := " all) + (string-append all "System.Xml ")) + (("System\\.IdentityModel_REFS := " all) + (string-append all "System.Configuration ")) + (("System\\.Design_REFS := " all) + (string-append all "Accessibility ")) + (("System\\.Web\\.Extensions\\.Design_REFS := " all) + (string-append all "System.Windows.Forms System.Web ")) + (("System\\.ServiceModel\\.Routing_REFS := " all) + (string-append all "System.Xml ")) + (("System\\.Web\\.Abstractions_REFS := " all) + (string-append all "System ")) + (("System\\.Reactive\\.Windows\\.Forms_REFS := " all) + (string-append all "System ")) + (("System\\.Windows\\.Forms\\.DataVisualization_REFS := " all) + (string-append all "Accessibility ")) + (("Facades/System\\.ServiceModel\\.Primitives_REFS := " all) + (string-append all "System.Xml ")) + (("Facades/System\\.Dynamic\\.Runtime_REFS := " all) + (string-append all "System ")) + (("Facades/System\\.Xml\\.XDocument_REFS := " all) + (string-append all "System.Xml ")) + (("Facades/System\\.Runtime\\.Serialization.Xml_REFS := " all) + (string-append all "System.Xml ")) + (("Facades/System\\.Data\\.Common_REFS := " all) + (string-append all "System System.Xml "))) + (apply invoke "make" "CSC=mcs" make-flags))))))))))) diff --git a/gnu/packages/patches/mono-5.10.0-later-mcs-changes.patch b/gnu/packages/patches/mono-5.10.0-later-mcs-changes.patch new file mode 100644 index 00000000000..d8f5991f482 --- /dev/null +++ b/gnu/packages/patches/mono-5.10.0-later-mcs-changes.patch @@ -0,0 +1,4601 @@ +The result of cherry-picking every commit (except ones that seemed to not +affect the compiler itself) from mono-5.10.0.179 to mono-6.12.0.206 that +touched ./mcs/mcs. + +Mono seems to consistently, almost as a rule, depend on C# features before +they implement them. This is extremely awkward for building using previous +versions, so hopefully this will allow us to jump straight to a high version. + +Includes the following commits, in order of most-recent to least-recent: + +b3911589b37 +6700dd220fe +2a7dfb28e07 +eea6f11a3e6 +3fc047c6f3a +ac6666f5b0b +927b27bb9d8 +4ab24d4c059 +aa836b46a23 +ee7dccfb320 +23510f26915 +d9f26547d88 +9dc1c885a0f +ef558ead89a +2cb7909b13c +0390ea2e78c +b4f6659bdc0 +e92d6070eaf +4c5b3fbd4f4 +e6507f2da8a +656a4b1120c +9bd2fa4cf33 +be2d1aeffe0 +454a76cfa4a +60c1ee454d4 +53f1ef506ea +d3487bfebb3 +92f6e5b1a81 + +diff --git a/.gitignore b/.gitignore +index c6ef19a849b..c37d4fce3f0 100644 +--- a/.gitignore ++++ b/.gitignore +@@ -40,6 +40,7 @@ Ankh.NoLoad + *.gpState + .vscode/ + *.exp ++.vs/ + + # Tooling + _ReSharper*/ +diff --git a/mcs/class/Commons.Xml.Relaxng/Makefile b/mcs/class/Commons.Xml.Relaxng/Makefile +index 1febae4eb1e..f9b57fea265 100644 +--- a/mcs/class/Commons.Xml.Relaxng/Makefile ++++ b/mcs/class/Commons.Xml.Relaxng/Makefile +@@ -22,7 +22,7 @@ EXTRA_DISTFILES = \ + $(RESOURCE_FILES) + + Commons.Xml.Relaxng.Rnc/RncParser.cs: Commons.Xml.Relaxng.Rnc/RncParser.jay $(topdir)/jay/skeleton.cs +- $(topdir)/jay/jay -ctv < $(topdir)/jay/skeleton.cs $(CURDIR)/Commons.Xml.Relaxng.Rnc/RncParser.jay > Commons.Xml.Relaxng.Rnc/RncParser.cs ++ $(topdir)/jay/jay -ctv -o Commons.Xml.Relaxng.Rnc/RncParser.cs $< < $(topdir)/jay/skeleton.cs + + BUILT_SOURCES = Commons.Xml.Relaxng.Rnc/RncParser.cs + +diff --git a/mcs/class/Microsoft.Build/Makefile b/mcs/class/Microsoft.Build/Makefile +index 2dcbefdf7f9..1a711069b0b 100644 +--- a/mcs/class/Microsoft.Build/Makefile ++++ b/mcs/class/Microsoft.Build/Makefile +@@ -26,7 +26,7 @@ EXTRA_DISTFILES = \ + EXPR_PARSER = Microsoft.Build.Internal/ExpressionParser + + $(EXPR_PARSER).cs: $(EXPR_PARSER).jay $(topdir)/jay/skeleton.cs +- (cd Microsoft.Build.Internal; $(topdir)/../jay/jay -ctv < $(topdir)/../jay/skeleton.cs ExpressionParser.jay > ExpressionParser.cs) ++ (cd Microsoft.Build.Internal; $(topdir)/../jay/jay -ctv -o ExpressionParser.cs ExpressionParser.jay < $(topdir)/../jay/skeleton.cs ) + + BUILT_SOURCES = $(EXPR_PARSER).cs + +diff --git a/mcs/class/Mono.CSharp/Makefile b/mcs/class/Mono.CSharp/Makefile +index 7b1986b78e5..3615532853d 100644 +--- a/mcs/class/Mono.CSharp/Makefile ++++ b/mcs/class/Mono.CSharp/Makefile +@@ -24,7 +24,7 @@ LIB_MCS_FLAGS += $(REFERENCE_SOURCES_FLAGS) + BUILT_SOURCES = $(PROFILE)-parser.cs + + $(PROFILE)-parser.cs: $(topdir)/mcs/cs-parser.jay $(topdir)/jay/skeleton.cs +- $(topdir)/jay/jay -c < $(topdir)/jay/skeleton.cs $< > $(PROFILE)-jay-tmp.out && mv $(PROFILE)-jay-tmp.out $@ ++ $(topdir)/jay/jay -c -o $(PROFILE)-jay-tmp.out $< < $(topdir)/jay/skeleton.cs && mv $(PROFILE)-jay-tmp.out $@ + + include ../../build/library.make + +diff --git a/mcs/class/Mono.Xml.Ext/Makefile b/mcs/class/Mono.Xml.Ext/Makefile +index dc49f816fee..16498215a38 100644 +--- a/mcs/class/Mono.Xml.Ext/Makefile ++++ b/mcs/class/Mono.Xml.Ext/Makefile +@@ -29,13 +29,13 @@ Mono.Xml.XPath2/XQueryParser.jay: Mono.Xml.XPath2/ParserBase.jay $(SKELETON) + Mono.Xml.XPath2/XPath2Parser.cs: Mono.Xml.XPath2/XPath2Parser.jay + echo "#define XPATH2_PARSER" > $@ + echo "#if NET_2_0" >> $@ +- $(topdir)/jay/jay -ct < $(SKELETON) $(CURDIR)/$< >>$@ ++ $(topdir)/jay/jay -ct $(CURDIR)/$< < $(SKELETON) >>$@ + echo "#endif" >> $@ + + Mono.Xml.XPath2/XQueryParser.cs: Mono.Xml.XPath2/XQueryParser.jay $(SKELETON) + echo "#define XQUERY_PARSER" > $@ + echo "#if NET_2_0" >> $@ +- $(topdir)/jay/jay -ct < $(SKELETON) $(CURDIR)/$< >>$@ ++ $(topdir)/jay/jay -ct $(CURDIR)/$< < $(SKELETON) >>$@ + echo "#endif" >> $@ + + Mono.Xml.XPath2/XPath2Tokenizer.cs: Mono.Xml.XPath2/TokenizerBase.cs +diff --git a/mcs/class/corlib/System/RuntimeArgumentHandle.cs b/mcs/class/corlib/System/RuntimeArgumentHandle.cs +index 216c4ea3924..c10d3f174d1 100644 +--- a/mcs/class/corlib/System/RuntimeArgumentHandle.cs ++++ b/mcs/class/corlib/System/RuntimeArgumentHandle.cs +@@ -31,13 +31,9 @@ + // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + // + +-using System; +-using System.Runtime.InteropServices; +- + namespace System + { +- [ComVisible (true)] +- public struct RuntimeArgumentHandle ++ public ref struct RuntimeArgumentHandle + { + #pragma warning disable 649 + internal IntPtr args; +diff --git a/mcs/class/referencesource/mscorlib/system/typedreference.cs b/mcs/class/referencesource/mscorlib/system/typedreference.cs +index 80bef5ab852..a30541f4399 100644 +--- a/mcs/class/referencesource/mscorlib/system/typedreference.cs ++++ b/mcs/class/referencesource/mscorlib/system/typedreference.cs +@@ -19,7 +19,11 @@ namespace System { + [CLSCompliant(false)] + [System.Runtime.InteropServices.ComVisible(true)] + [System.Runtime.Versioning.NonVersionable] // This only applies to field layout +- public struct TypedReference ++ public ++#if MONO ++ ref ++#endif ++ struct TypedReference + { + #if MONO + #pragma warning disable 169 +diff --git a/mcs/errors/cs0151-4.cs b/mcs/errors/cs0151-4.cs +index 0e45b1a9049..c9e05589e4d 100644 +--- a/mcs/errors/cs0151-4.cs ++++ b/mcs/errors/cs0151-4.cs +@@ -1,5 +1,6 @@ + // CS0151: A switch expression of type `S1?' cannot be converted to an integral type, bool, char, string, enum or nullable type +-// Line: 24 ++// Line: 25 ++// Compiler options: -langversion:5 + + using System; + +diff --git a/mcs/errors/cs0273-2.cs b/mcs/errors/cs0273-2.cs +new file mode 100644 +index 00000000000..b0bdbef9e75 +--- /dev/null ++++ b/mcs/errors/cs0273-2.cs +@@ -0,0 +1,9 @@ ++// CS0273: The accessibility modifier of the `C.S2.set' accessor must be more restrictive than the modifier of the property or indexer `C.S2' ++// Line: 7 ++// Compiler options: -langversion:7.2 ++ ++ class C ++ { ++ private string S2 { get; private protected set; } ++ } ++ +diff --git a/mcs/errors/cs0280.cs b/mcs/errors/cs0280.cs +new file mode 100644 +index 00000000000..62be8e39585 +--- /dev/null ++++ b/mcs/errors/cs0280.cs +@@ -0,0 +1,22 @@ ++// CS0280: `C.Fixable.GetPinnableReference(int)' has the wrong signature to be used in extensible fixed statement ++// Line: 11 ++// Compiler options: -unsafe -langversion:latest -warnaserror ++ ++using System; ++ ++unsafe class C ++{ ++ public static void Main () ++ { ++ fixed (int* p = new Fixable ()) { ++ } ++ } ++ ++ struct Fixable ++ { ++ public ref int GetPinnableReference (int i = 1) ++ { ++ throw new NotImplementedException (); ++ } ++ } ++} +\ No newline at end of file +diff --git a/mcs/errors/cs0826-9.cs b/mcs/errors/cs0826-9.cs +deleted file mode 100644 +index 4e098969b8c..00000000000 +--- a/mcs/errors/cs0826-9.cs ++++ /dev/null +@@ -1,16 +0,0 @@ +-// CS0826: The type of an implicitly typed array cannot be inferred from the initializer. Try specifying array type explicitly +-// Line: 8 +- +-class C +-{ +- static void Main() +- { +- object o = 1; +- dynamic d = 1; +- +- var a = new[] { +- new { X = o }, +- new { X = d } +- }; +- } +-} +diff --git a/mcs/errors/cs1013-1.cs b/mcs/errors/cs1013-1.cs +new file mode 100644 +index 00000000000..01827df4995 +--- /dev/null ++++ b/mcs/errors/cs1013-1.cs +@@ -0,0 +1,8 @@ ++// CS1013: Invalid number ++// Line : 6 ++ ++class X ++{ ++ static int i = 0b; ++ static void Main () {} ++} +\ No newline at end of file +diff --git a/mcs/errors/cs1013-2.cs b/mcs/errors/cs1013-2.cs +new file mode 100644 +index 00000000000..c868cb2a769 +--- /dev/null ++++ b/mcs/errors/cs1013-2.cs +@@ -0,0 +1,7 @@ ++// CS1013: Invalid number ++// Line : 6 ++ ++class X ++{ ++ static int i = 0x0_; ++} +\ No newline at end of file +diff --git a/mcs/errors/cs1013-3.cs b/mcs/errors/cs1013-3.cs +new file mode 100644 +index 00000000000..3145b1ba596 +--- /dev/null ++++ b/mcs/errors/cs1013-3.cs +@@ -0,0 +1,7 @@ ++// CS1013: Invalid number ++// Line : 6 ++ ++class X ++{ ++ static int i = 1_; ++} +\ No newline at end of file +diff --git a/mcs/errors/cs1013-4.cs b/mcs/errors/cs1013-4.cs +new file mode 100644 +index 00000000000..3a5e744ff4f +--- /dev/null ++++ b/mcs/errors/cs1013-4.cs +@@ -0,0 +1,7 @@ ++// CS1013: Invalid number ++// Line : 6 ++ ++class X ++{ ++ static double i = 1_.2; ++} +\ No newline at end of file +diff --git a/mcs/errors/cs1013-5.cs b/mcs/errors/cs1013-5.cs +new file mode 100644 +index 00000000000..8082743c0b5 +--- /dev/null ++++ b/mcs/errors/cs1013-5.cs +@@ -0,0 +1,7 @@ ++// CS1013: Invalid number ++// Line : 6 ++ ++class X ++{ ++ static int i = 1_e1; ++} +\ No newline at end of file +diff --git a/mcs/errors/cs1013-6.cs b/mcs/errors/cs1013-6.cs +new file mode 100644 +index 00000000000..d2cea2c72dd +--- /dev/null ++++ b/mcs/errors/cs1013-6.cs +@@ -0,0 +1,7 @@ ++// CS1013: Invalid number ++// Line : 6 ++ ++class X ++{ ++ static float i = 1_f; ++} +\ No newline at end of file +diff --git a/mcs/errors/cs1013-7.cs b/mcs/errors/cs1013-7.cs +new file mode 100644 +index 00000000000..8030d6ed095 +--- /dev/null ++++ b/mcs/errors/cs1013-7.cs +@@ -0,0 +1,7 @@ ++// CS1013: Invalid number ++// Line : 6 ++ ++class X ++{ ++ static int i = 0x_1; ++} +\ No newline at end of file +diff --git a/mcs/errors/cs1013-8.cs b/mcs/errors/cs1013-8.cs +new file mode 100644 +index 00000000000..d26c7acacb7 +--- /dev/null ++++ b/mcs/errors/cs1013-8.cs +@@ -0,0 +1,7 @@ ++// CS1013: Invalid number ++// Line : 6 ++ ++class X ++{ ++ static int i = 0b_1; ++} +\ No newline at end of file +diff --git a/mcs/errors/cs1021-4.cs b/mcs/errors/cs1021-4.cs +new file mode 100644 +index 00000000000..75c2ff70360 +--- /dev/null ++++ b/mcs/errors/cs1021-4.cs +@@ -0,0 +1,8 @@ ++// CS1021: Integral constant is too large ++// Line: 6 ++ ++class X { ++ public static void Main() { ++ int h = 0b11111111111111111111111111111111111111111111111111111111111111111; ++ } ++} +diff --git a/mcs/errors/cs1061-18.cs b/mcs/errors/cs1061-18.cs +new file mode 100644 +index 00000000000..3ac82b7f2d3 +--- /dev/null ++++ b/mcs/errors/cs1061-18.cs +@@ -0,0 +1,10 @@ ++// CS1061: Type `int' does not contain a definition for `__0' and no extension method `__0' of type `int' could be found. Are you missing an assembly reference? ++// Line: 8 ++ ++static class C ++{ ++ static void Main () ++ { ++ int c = 0.__0; ++ } ++} +\ No newline at end of file +diff --git a/mcs/errors/cs1525-27.cs b/mcs/errors/cs1525-27.cs +index dc184931667..d4c1f326be2 100644 +--- a/mcs/errors/cs1525-27.cs ++++ b/mcs/errors/cs1525-27.cs +@@ -1,4 +1,4 @@ +-// CS1525: Unexpected symbol `fe', expecting `class', `delegate', `enum', `interface', `partial', or `struct' ++// CS1525: Unexpected symbol `fe', expecting `class', `delegate', `enum', `interface', `partial', `ref', or `struct' + // Line: 6 + + namespace X +diff --git a/mcs/errors/cs1525-43.cs b/mcs/errors/cs1525-43.cs +index d83d4d847fa..26f466a2528 100644 +--- a/mcs/errors/cs1525-43.cs ++++ b/mcs/errors/cs1525-43.cs +@@ -1,4 +1,4 @@ +-// CS1525: Unexpected symbol `)', expecting `(', `[', `out', `params', `ref', `this', or `type' ++// CS1525: Unexpected symbol `)' + // Line: 6 + + class TestClass +diff --git a/mcs/errors/cs1527-2.cs b/mcs/errors/cs1527-2.cs +index d38945f3c89..0256ee2b354 100644 +--- a/mcs/errors/cs1527-2.cs ++++ b/mcs/errors/cs1527-2.cs +@@ -1,4 +1,4 @@ +-// CS1527: Namespace elements cannot be explicitly declared as private, protected or protected internal ++// CS1527: Namespace elements cannot be explicitly declared as private, protected, protected internal, or private protected + // Line: 4 + + protected interface IFoo { +diff --git a/mcs/errors/cs1527-3.cs b/mcs/errors/cs1527-3.cs +index 763c75958ee..469d74cbb99 100644 +--- a/mcs/errors/cs1527-3.cs ++++ b/mcs/errors/cs1527-3.cs +@@ -1,4 +1,4 @@ +-// CS1527: Namespace elements cannot be explicitly declared as private, protected or protected internal ++// CS1527: Namespace elements cannot be explicitly declared as private, protected, protected internal, or private protected + // Line: 4 + + protected internal enum E { +diff --git a/mcs/errors/cs1527.cs b/mcs/errors/cs1527.cs +index 189cc472f4c..e847fd14e11 100644 +--- a/mcs/errors/cs1527.cs ++++ b/mcs/errors/cs1527.cs +@@ -1,4 +1,5 @@ +-// CS1527: Namespace elements cannot be explicitly declared as private, protected or protected internal +-// Line: ++// CS1527: Namespace elements cannot be explicitly declared as private, protected, protected internal, or private protected ++// Line: 4 ++ + private class X { + } +diff --git a/mcs/errors/cs1611-2.cs b/mcs/errors/cs1611-2.cs +new file mode 100644 +index 00000000000..882231378f0 +--- /dev/null ++++ b/mcs/errors/cs1611-2.cs +@@ -0,0 +1,8 @@ ++// CS1611: The params parameter cannot be declared as ref, out or in ++// Line: 6 ++// Compiler options: -langversion:latest ++ ++class Test ++{ ++ public static void Error (params in int args) {} ++} +\ No newline at end of file +diff --git a/mcs/errors/cs1611.cs b/mcs/errors/cs1611.cs +index 8df10fac0ce..469e083ec3c 100644 +--- a/mcs/errors/cs1611.cs ++++ b/mcs/errors/cs1611.cs +@@ -1,4 +1,4 @@ +-// CS1611: The params parameter cannot be declared as ref or out ++// CS1611: The params parameter cannot be declared as ref, out or in + // Line: 6 + + class Test +diff --git a/mcs/errors/cs1644-61.cs b/mcs/errors/cs1644-61.cs +new file mode 100644 +index 00000000000..d58ba64c7ec +--- /dev/null ++++ b/mcs/errors/cs1644-61.cs +@@ -0,0 +1,11 @@ ++// CS1644: Feature `digit separators' cannot be used because it is not part of the C# 6.0 language specification ++// Line: 9 ++// Compiler options: -langversion:6 ++ ++class X ++{ ++ int Test () ++ { ++ var i = 1_0; ++ } ++} +diff --git a/mcs/errors/cs1644-62.cs b/mcs/errors/cs1644-62.cs +new file mode 100644 +index 00000000000..5a29839610d +--- /dev/null ++++ b/mcs/errors/cs1644-62.cs +@@ -0,0 +1,10 @@ ++// CS1644: Feature `private protected' cannot be used because it is not part of the C# 6.0 language specification ++// Line: 7 ++// Compiler options: -langversion:6 ++ ++class C ++{ ++ private protected enum E ++ { ++ } ++} +\ No newline at end of file +diff --git a/mcs/errors/cs1644-63.cs b/mcs/errors/cs1644-63.cs +new file mode 100644 +index 00000000000..ce61d5ce046 +--- /dev/null ++++ b/mcs/errors/cs1644-63.cs +@@ -0,0 +1,22 @@ ++// CS1644: Feature `extensible fixed statement' cannot be used because it is not part of the C# 7.2 language specification ++// Line: 11 ++// Compiler options: -unsafe -langversion:7.2 ++ ++using System; ++ ++unsafe class C ++{ ++ public static void Main () ++ { ++ fixed (int* p = new Fixable ()) { ++ } ++ } ++ ++ struct Fixable ++ { ++ public ref int GetPinnableReference () ++ { ++ throw new NotImplementedException (); ++ } ++ } ++} +\ No newline at end of file +diff --git a/mcs/errors/cs1644-64.cs b/mcs/errors/cs1644-64.cs +new file mode 100644 +index 00000000000..88917a0a5d5 +--- /dev/null ++++ b/mcs/errors/cs1644-64.cs +@@ -0,0 +1,13 @@ ++// CS1644: Feature `expression body property accessor' cannot be used because it is not part of the C# 6.0 language specification ++// Line: 11 ++// Compiler options: -langversion:6 ++ ++using System; ++ ++class C ++{ ++ public int Integer ++ { ++ get => 0; ++ } ++} +\ No newline at end of file +diff --git a/mcs/errors/cs1644-65.cs b/mcs/errors/cs1644-65.cs +new file mode 100644 +index 00000000000..dea648b7846 +--- /dev/null ++++ b/mcs/errors/cs1644-65.cs +@@ -0,0 +1,13 @@ ++// CS1644: Feature `expression body property accessor' cannot be used because it is not part of the C# 6.0 language specification ++// Line: 11 ++// Compiler options: -langversion:6 ++ ++using System; ++ ++class C ++{ ++ public int this[int i] ++ { ++ get => i; ++ } ++} +\ No newline at end of file +diff --git a/mcs/errors/cs1644-66.cs b/mcs/errors/cs1644-66.cs +new file mode 100644 +index 00000000000..3f393b50d30 +--- /dev/null ++++ b/mcs/errors/cs1644-66.cs +@@ -0,0 +1,17 @@ ++// CS1644: Feature `expression body event accessor' cannot be used because it is not part of the C# 6.0 language specification ++// Line: 11 ++// Compiler options: -langversion:6 ++ ++using System; ++ ++class C ++{ ++ public event EventHandler Event ++ { ++ add => Ignore (); ++ } ++ ++ static void Ignore () ++ { ++ } ++} +\ No newline at end of file +diff --git a/mcs/errors/cs1763-2.cs b/mcs/errors/cs1763-2.cs +index 72f5370949a..7e4d091fc72 100644 +--- a/mcs/errors/cs1763-2.cs ++++ b/mcs/errors/cs1763-2.cs +@@ -1,4 +1,4 @@ +-// CS1763: Optional parameter `o' of type `object' can only be initialized with `null' ++// CS1763: Optional parameter `o' of type `object' can only be initialized with default value + // Line: 6 + + class C +diff --git a/mcs/errors/cs1763.cs b/mcs/errors/cs1763.cs +index d10a7bf2c20..03b5f28a19d 100644 +--- a/mcs/errors/cs1763.cs ++++ b/mcs/errors/cs1763.cs +@@ -1,4 +1,4 @@ +-// CS1763: Optional parameter `o' of type `object' can only be initialized with `null' ++// CS1763: Optional parameter `o' of type `object' can only be initialized with default value + // Line: 6 + + class C +diff --git a/mcs/errors/cs8326.cs b/mcs/errors/cs8326.cs +new file mode 100644 +index 00000000000..efd3a84fea7 +--- /dev/null ++++ b/mcs/errors/cs8326.cs +@@ -0,0 +1,13 @@ ++// CS8326: Both ref conditional operators must be ref values ++// Line: 11 ++ ++class Program ++{ ++ static int x, y; ++ ++ public static void Main () ++ { ++ bool b = false; ++ ref int targetBucket = ref b ? x : y; ++ } ++} +\ No newline at end of file +diff --git a/mcs/errors/cs8327.cs b/mcs/errors/cs8327.cs +new file mode 100644 +index 00000000000..8d0ccd86a70 +--- /dev/null ++++ b/mcs/errors/cs8327.cs +@@ -0,0 +1,14 @@ ++// CS8327: The ref conditional expression types `int' and `byte' have to match ++// Line: 12 ++ ++class Program ++{ ++ static int x; ++ static byte y; ++ ++ public static void Main () ++ { ++ bool b = false; ++ ref int targetBucket = ref b ? ref x : ref y; ++ } ++} +\ No newline at end of file +diff --git a/mcs/errors/cs0428-2.cs b/mcs/errors/cs8385-2.cs +similarity index 50% +rename from mcs/errors/cs0428-2.cs +rename to mcs/errors/cs8385-2.cs +index 5f468fd519a..cc7860faa62 100644 +--- a/mcs/errors/cs0428-2.cs ++++ b/mcs/errors/cs8385-2.cs +@@ -1,4 +1,4 @@ +-// CS0428: Cannot convert method group `Main' to non-delegate type `void*'. Consider using parentheses to invoke the method ++// CS8385: The given expression cannot be used in a fixed statement + // Line: 9 + // Compiler options: -unsafe + +diff --git a/mcs/errors/cs0213-2.cs b/mcs/errors/cs8385.cs +similarity index 54% +rename from mcs/errors/cs0213-2.cs +rename to mcs/errors/cs8385.cs +index ae72e4cd9aa..5fa9f794ccf 100644 +--- a/mcs/errors/cs0213-2.cs ++++ b/mcs/errors/cs8385.cs +@@ -1,4 +1,4 @@ +-// CS0213: You cannot use the fixed statement to take the address of an already fixed expression ++// CS8385: The given expression cannot be used in a fixed statement + // Line: 9 + // Compiler options: -unsafe + +diff --git a/mcs/errors/known-issues-net_4_x b/mcs/errors/known-issues-net_4_x +index c9ed9317350..54902e03e7b 100644 +--- a/mcs/errors/known-issues-net_4_x ++++ b/mcs/errors/known-issues-net_4_x +@@ -14,6 +14,9 @@ + # Parser problems + cs0080.cs + ++# Undocumented switch governing rules ++cs0151-4.cs NO ERROR ++ + # Operators + cs0457-2.cs + cs0457.cs +diff --git a/mcs/ilasm/Makefile b/mcs/ilasm/Makefile +index 090d1cc3231..4ca11545781 100644 +--- a/mcs/ilasm/Makefile ++++ b/mcs/ilasm/Makefile +@@ -13,7 +13,7 @@ EXTRA_DISTFILES = \ + $(wildcard tests/*.il) + + ILParser.cs: parser/ILParser.jay $(topdir)/jay/skeleton.cs +- $(topdir)/jay/jay -ct < $(topdir)/jay/skeleton.cs $(CURDIR)/$< >$@ ++ $(topdir)/jay/jay -ct -o $@ $(CURDIR)/$< < $(topdir)/jay/skeleton.cs + + include ../build/executable.make + +diff --git a/mcs/jay/defs.h b/mcs/jay/defs.h +index 2aade48dac2..3bd3c5859ce 100644 +--- a/mcs/jay/defs.h ++++ b/mcs/jay/defs.h +@@ -236,12 +236,14 @@ extern char *input_file_name; + extern char *prolog_file_name; + extern char *local_file_name; + extern char *verbose_file_name; ++extern char *output_file_name; + + extern FILE *action_file; + extern FILE *input_file; + extern FILE *prolog_file; + extern FILE *local_file; + extern FILE *verbose_file; ++extern FILE *output_file; + + extern int nitems; + extern int nrules; +diff --git a/mcs/jay/main.c b/mcs/jay/main.c +index fcac218b1df..7fb5e6c8ccb 100644 +--- a/mcs/jay/main.c ++++ b/mcs/jay/main.c +@@ -63,6 +63,7 @@ char *input_file_name = ""; + char *prolog_file_name; + char *local_file_name; + char *verbose_file_name; ++char *output_file_name = 0; + + FILE *action_file; /* a temp file, used to save actions associated */ + /* with rules until the parser is written */ +@@ -70,6 +71,7 @@ FILE *input_file; /* the input file */ + FILE *prolog_file; /* temp files, used to save text until all */ + FILE *local_file; /* symbols have been defined */ + FILE *verbose_file; /* y.output */ ++FILE *output_file; /* defaults to stdout */ + + int nitems; + int nrules; +@@ -106,6 +108,7 @@ int k; + if (action_file) { fclose(action_file); unlink(action_file_name); } + if (prolog_file) { fclose(prolog_file); unlink(prolog_file_name); } + if (local_file) { fclose(local_file); unlink(local_file_name); } ++ if (output_file && (output_file != stdout)) { fclose(output_file); if (k != 0) unlink(output_file_name); } + exit(k); + } + +@@ -137,7 +140,7 @@ set_signals() + + usage() + { +- fprintf(stderr, "usage: %s [-tvcp] [-b file_prefix] filename\n", myname); ++ fprintf(stderr, "usage: %s [-tvcp] [-b file_prefix] [-o output_filename] input_filename\n", myname); + exit(1); + } + +@@ -167,9 +170,9 @@ char *argv[]; + if (i + 1 < argc) usage(); + return; + +- case '-': +- ++i; +- goto no_more_options; ++ case '-': ++ ++i; ++ goto no_more_options; + + case 'b': + if (*++s) +@@ -180,13 +183,22 @@ char *argv[]; + usage(); + continue; + +- case 't': +- tflag = 1; +- break; ++ case 'o': ++ if (*++s) ++ output_file_name = s; ++ else if (++i < argc) ++ output_file_name = argv[i]; ++ else ++ usage(); ++ continue; ++ ++ case 't': ++ tflag = 1; ++ break; + + case 'p': +- print_skel_dir (); +- break; ++ print_skel_dir (); ++ break; + + case 'c': + csharp = 1; +@@ -217,12 +229,12 @@ char *argv[]; + vflag = 1; + break; + +- case 'p': +- print_skel_dir (); +- break; ++ case 'p': ++ print_skel_dir (); ++ break; + +- case 'c': +- csharp = 1; ++ case 'c': ++ csharp = 1; + line_format = "#line %d \"%s\"\n"; + default_line_format = "#line default\n"; + +@@ -355,6 +367,17 @@ open_files() + if (verbose_file == 0) + open_error(verbose_file_name); + } ++ ++ if (output_file == 0) ++ { ++ if (output_file_name != 0) { ++ output_file = fopen(output_file_name, "w"); ++ if (output_file == 0) ++ open_error(output_file_name); ++ } else { ++ output_file = stdout; ++ } ++ } + } + + +diff --git a/mcs/jay/output.c b/mcs/jay/output.c +index d1e2c14a1b2..ab9b2043be9 100644 +--- a/mcs/jay/output.c ++++ b/mcs/jay/output.c +@@ -73,7 +73,7 @@ output () { + fprintf(stderr, "jay: line %d is too long\n", lno), done(1); + switch (buf[0]) { + case '#': continue; +- case 't': if (!tflag) fputs("//t", stdout); ++ case 't': if (!tflag) fputs("//t", output_file); + case '.': break; + default: + cp = strtok(buf, " \t\r\n"); +@@ -93,7 +93,7 @@ output () { + fprintf(stderr, "jay: unknown call (%s) in line %d\n", cp, lno); + continue; + } +- fputs(buf+1, stdout), ++ outline; ++ fputs(buf+1, output_file), ++ outline; + } + free_parser(); + } +@@ -103,19 +103,19 @@ output_rule_data() + register int i; + register int j; + +- printf("/*\n All more than 3 lines long rules are wrapped into a method\n*/\n"); ++ fprintf(output_file, "/*\n All more than 3 lines long rules are wrapped into a method\n*/\n"); + + for (i = 0; i < nmethods; ++i) + { +- printf("%s", methods[i]); ++ fprintf(output_file, "%s", methods[i]); + FREE(methods[i]); +- printf("\n\n"); ++ fprintf(output_file, "\n\n"); + } + FREE(methods); + +- printf(default_line_format, ++outline + 1); ++ fprintf(output_file, default_line_format, ++outline + 1); + +- printf(" %s static %s short [] yyLhs = {%16d,", ++ fprintf(output_file, " %s static %s short [] yyLhs = {%16d,", + csharp ? "" : " protected", + csharp ? "readonly" : "final", + symbol_value[start_symbol]); +@@ -126,18 +126,18 @@ output_rule_data() + if (j >= 10) + { + ++outline; +- putchar('\n'); ++ putc('\n', output_file); + j = 1; + } + else + ++j; + +- printf("%5d,", symbol_value[rlhs[i]]); ++ fprintf(output_file, "%5d,", symbol_value[rlhs[i]]); + } + outline += 2; +- printf("\n };\n"); ++ fprintf(output_file, "\n };\n"); + +- printf(" %s static %s short [] yyLen = {%12d,", ++ fprintf(output_file, " %s static %s short [] yyLen = {%12d,", + csharp ? "" : "protected", + csharp ? "readonly" : "final", + 2); +@@ -148,16 +148,16 @@ output_rule_data() + if (j >= 10) + { + ++outline; +- putchar('\n'); ++ putc('\n', output_file); + j = 1; + } + else + j++; + +- printf("%5d,", rrhs[i + 1] - rrhs[i] - 1); ++ fprintf(output_file, "%5d,", rrhs[i + 1] - rrhs[i] - 1); + } + outline += 2; +- printf("\n };\n"); ++ fprintf(output_file, "\n };\n"); + } + + +@@ -165,7 +165,7 @@ output_yydefred() + { + register int i, j; + +- printf(" %s static %s short [] yyDefRed = {%13d,", ++ fprintf(output_file, " %s static %s short [] yyDefRed = {%13d,", + csharp ? "" : "protected", + csharp ? "readonly" : "final", + (defred[0] ? defred[0] - 2 : 0)); +@@ -178,15 +178,15 @@ output_yydefred() + else + { + ++outline; +- putchar('\n'); ++ putc('\n', output_file); + j = 1; + } + +- printf("%5d,", (defred[i] ? defred[i] - 2 : 0)); ++ fprintf(output_file, "%5d,", (defred[i] ? defred[i] - 2 : 0)); + } + + outline += 2; +- printf("\n };\n"); ++ fprintf(output_file, "\n };\n"); + } + + +@@ -309,7 +309,7 @@ goto_actions() + state_count = NEW2(nstates, short); + + k = default_goto(start_symbol + 1); +- printf(" protected static %s short [] yyDgoto = {%14d,", csharp ? "readonly" : "final", k); ++ fprintf(output_file, " protected static %s short [] yyDgoto = {%14d,", csharp ? "readonly" : "final", k); + save_column(start_symbol + 1, k); + + j = 10; +@@ -318,19 +318,19 @@ goto_actions() + if (j >= 10) + { + ++outline; +- putchar('\n'); ++ putc('\n', output_file); + j = 1; + } + else + ++j; + + k = default_goto(i); +- printf("%5d,", k); ++ fprintf(output_file, "%5d,", k); + save_column(i, k); + } + + outline += 2; +- printf("\n };\n"); ++ fprintf(output_file, "\n };\n"); + FREE(state_count); + } + +@@ -633,7 +633,7 @@ output_base() + { + register int i, j; + +- printf(" protected static %s short [] yySindex = {%13d,", csharp? "readonly":"final", base[0]); ++ fprintf(output_file, " protected static %s short [] yySindex = {%13d,", csharp? "readonly":"final", base[0]); + + j = 10; + for (i = 1; i < nstates; i++) +@@ -641,17 +641,17 @@ output_base() + if (j >= 10) + { + ++outline; +- putchar('\n'); ++ putc('\n', output_file); + j = 1; + } + else + ++j; + +- printf("%5d,", base[i]); ++ fprintf(output_file, "%5d,", base[i]); + } + + outline += 2; +- printf("\n };\n protected static %s short [] yyRindex = {%13d,", ++ fprintf(output_file, "\n };\n protected static %s short [] yyRindex = {%13d,", + csharp ? "readonly" : "final", + base[nstates]); + +@@ -661,17 +661,17 @@ output_base() + if (j >= 10) + { + ++outline; +- putchar('\n'); ++ putc('\n', output_file); + j = 1; + } + else + ++j; + +- printf("%5d,", base[i]); ++ fprintf(output_file, "%5d,", base[i]); + } + + outline += 2; +- printf("\n };\n protected static %s short [] yyGindex = {%13d,", ++ fprintf(output_file, "\n };\n protected static %s short [] yyGindex = {%13d,", + csharp ? "readonly" : "final", + base[2*nstates]); + +@@ -681,17 +681,17 @@ output_base() + if (j >= 10) + { + ++outline; +- putchar('\n'); ++ putc('\n', output_file); + j = 1; + } + else + ++j; + +- printf("%5d,", base[i]); ++ fprintf(output_file, "%5d,", base[i]); + } + + outline += 2; +- printf("\n };\n"); ++ fprintf(output_file, "\n };\n"); + FREE(base); + } + +@@ -702,7 +702,7 @@ output_table() + register int i; + register int j; + +- printf(" protected static %s short [] yyTable = {%14d,", csharp ? "readonly" : "final", table[0]); ++ fprintf(output_file, " protected static %s short [] yyTable = {%14d,", csharp ? "readonly" : "final", table[0]); + + j = 10; + for (i = 1; i <= high; i++) +@@ -710,17 +710,17 @@ output_table() + if (j >= 10) + { + ++outline; +- putchar('\n'); ++ putc('\n', output_file); + j = 1; + } + else + ++j; + +- printf("%5d,", table[i]); ++ fprintf(output_file, "%5d,", table[i]); + } + + outline += 2; +- printf("\n };\n"); ++ fprintf(output_file, "\n };\n"); + FREE(table); + } + +@@ -731,7 +731,7 @@ output_check() + register int i; + register int j; + +- printf(" protected static %s short [] yyCheck = {%14d,", ++ fprintf(output_file, " protected static %s short [] yyCheck = {%14d,", + csharp ? "readonly" : "final", + check[0]); + +@@ -741,17 +741,17 @@ output_check() + if (j >= 10) + { + ++outline; +- putchar('\n'); ++ putc('\n', output_file); + j = 1; + } + else + ++j; + +- printf("%5d,", check[i]); ++ fprintf(output_file, "%5d,", check[i]); + } + + outline += 2; +- printf("\n };\n"); ++ fprintf(output_file, "\n };\n"); + FREE(check); + } + +@@ -801,30 +801,30 @@ char *prefix; + if (is_C_identifier(s)) + { + if (prefix) +- printf(" %s ", prefix); ++ fprintf(output_file, " %s ", prefix); + c = *s; + if (c == '"') + { + while ((c = *++s) != '"') + { +- putchar(c); ++ putc(c, output_file); + } + } + else + { + do + { +- putchar(c); ++ putc(c, output_file); + } + while (c = *++s); + } + ++outline; +- printf(" = %d%s\n", symbol_value[i], csharp ? ";" : ";"); ++ fprintf(output_file, " = %d%s\n", symbol_value[i], csharp ? ";" : ";"); + } + } + + ++outline; +- printf(" %s yyErrorCode = %d%s\n", prefix ? prefix : "", symbol_value[1], csharp ? ";" : ";"); ++ fprintf(output_file, " %s yyErrorCode = %d%s\n", prefix ? prefix : "", symbol_value[1], csharp ? ";" : ";"); + } + + +@@ -842,14 +842,14 @@ char *name; + if ((c = getc(in)) != EOF) { + if (c == '\n') + ++outline; +- putchar(c); ++ putc(c, output_file); + while ((c = getc(in)) != EOF) + { + if (c == '\n') + ++outline; +- putchar(c); ++ putc(c, output_file); + } +- printf(default_line_format, ++outline + 1); ++ fprintf(output_file, default_line_format, ++outline + 1); + } + fclose(in); + } +@@ -862,67 +862,67 @@ output_debug() + char * prefix = tflag ? "" : "//t"; + + ++outline; +- printf(" protected %s int yyFinal = %d;\n", csharp ? "const" : "static final", final_state); ++ fprintf(output_file, " protected %s int yyFinal = %d;\n", csharp ? "const" : "static final", final_state); + + ++outline; +- printf ("%s // Put this array into a separate class so it is only initialized if debugging is actually used\n", prefix); +- printf ("%s // Use MarshalByRefObject to disable inlining\n", prefix); +- printf("%s class YYRules %s {\n", prefix, csharp ? ": MarshalByRefObject" : ""); +- printf("%s public static %s string [] yyRule = {\n", prefix, csharp ? "readonly" : "final"); ++ fprintf(output_file, "%s // Put this array into a separate class so it is only initialized if debugging is actually used\n", prefix); ++ fprintf(output_file, "%s // Use MarshalByRefObject to disable inlining\n", prefix); ++ fprintf(output_file, "%s class YYRules %s {\n", prefix, csharp ? ": MarshalByRefObject" : ""); ++ fprintf(output_file, "%s public static %s string [] yyRule = {\n", prefix, csharp ? "readonly" : "final"); + for (i = 2; i < nrules; ++i) + { +- printf("%s \"%s :", prefix, symbol_name[rlhs[i]]); ++ fprintf(output_file, "%s \"%s :", prefix, symbol_name[rlhs[i]]); + for (j = rrhs[i]; ritem[j] > 0; ++j) + { + s = symbol_name[ritem[j]]; + if (s[0] == '"') + { +- printf(" \\\""); ++ fprintf(output_file, " \\\""); + while (*++s != '"') + { + if (*s == '\\') + { + if (s[1] == '\\') +- printf("\\\\\\\\"); ++ fprintf(output_file, "\\\\\\\\"); + else +- printf("\\\\%c", s[1]); ++ fprintf(output_file, "\\\\%c", s[1]); + ++s; + } + else +- putchar(*s); ++ putc(*s, output_file); + } +- printf("\\\""); ++ fprintf(output_file, "\\\""); + } + else if (s[0] == '\'') + { + if (s[1] == '"') +- printf(" '\\\"'"); ++ fprintf(output_file, " '\\\"'"); + else if (s[1] == '\\') + { + if (s[2] == '\\') +- printf(" '\\\\\\\\"); ++ fprintf(output_file, " '\\\\\\\\"); + else +- printf(" '\\\\%c", s[2]); ++ fprintf(output_file, " '\\\\%c", s[2]); + s += 2; + while (*++s != '\'') +- putchar(*s); +- putchar('\''); ++ putc(*s, output_file); ++ putc('\'', output_file); + } + else +- printf(" '%c'", s[1]); ++ fprintf(output_file, " '%c'", s[1]); + } + else +- printf(" %s", s); ++ fprintf(output_file, " %s", s); + } + ++outline; +- printf("\",\n"); ++ fprintf(output_file, "\",\n"); + } + ++ outline; +- printf("%s };\n", prefix); +- printf ("%s public static string getRule (int index) {\n", prefix); +- printf ("%s return yyRule [index];\n", prefix); +- printf ("%s }\n", prefix); +- printf ("%s}\n", prefix); ++ fprintf(output_file, "%s };\n", prefix); ++ fprintf(output_file, "%s public static string getRule (int index) {\n", prefix); ++ fprintf(output_file, "%s return yyRule [index];\n", prefix); ++ fprintf(output_file, "%s }\n", prefix); ++ fprintf(output_file, "%s}\n", prefix); + + max = 0; + for (i = 2; i < ntokens; ++i) +@@ -931,7 +931,7 @@ output_debug() + + /* need yyNames for yyExpecting() */ + +- printf(" protected static %s string [] yyNames = {", csharp ? "readonly" : "final"); ++ fprintf(output_file, " protected static %s string [] yyNames = {", csharp ? "readonly" : "final"); + symnam = (char **) MALLOC((max+1)*sizeof(char *)); + if (symnam == 0) no_space(); + +@@ -943,7 +943,7 @@ output_debug() + symnam[symbol_value[i]] = symbol_name[i]; + symnam[0] = "end-of-file"; + +- j = 70; fputs(" ", stdout); ++ j = 70; fputs(" ", output_file); + for (i = 0; i <= max; ++i) + { + if (s = symnam[i]) +@@ -965,25 +965,25 @@ output_debug() + if (j > 70) + { + ++outline; +- printf("\n "); ++ fprintf(output_file, "\n "); + j = k; + } +- printf("\"\\\""); ++ fprintf(output_file, "\"\\\""); + s = symnam[i]; + while (*++s != '"') + { + if (*s == '\\') + { +- printf("\\\\"); ++ fprintf(output_file, "\\\\"); + if (*++s == '\\') +- printf("\\\\"); ++ fprintf(output_file, "\\\\"); + else +- putchar(*s); ++ putc(*s, output_file); + } + else +- putchar(*s); ++ putc(*s, output_file); + } +- printf("\\\"\","); ++ fprintf(output_file, "\\\"\","); + } + else if (s[0] == '\'') + { +@@ -993,10 +993,10 @@ output_debug() + if (j > 70) + { + ++outline; +- printf("\n "); ++ fprintf(output_file, "\n "); + j = 7; + } +- printf("\"'\\\"'\","); ++ fprintf(output_file, "\"'\\\"'\","); + } + else + { +@@ -1015,25 +1015,25 @@ output_debug() + if (j > 70) + { + ++outline; +- printf("\n "); ++ fprintf(output_file, "\n "); + j = k; + } +- printf("\"'"); ++ fprintf(output_file, "\"'"); + s = symnam[i]; + while (*++s != '\'') + { + if (*s == '\\') + { +- printf("\\\\"); ++ fprintf(output_file, "\\\\"); + if (*++s == '\\') +- printf("\\\\"); ++ fprintf(output_file, "\\\\"); + else +- putchar(*s); ++ putc(*s, output_file); + } + else +- putchar(*s); ++ putc(*s, output_file); + } +- printf("'\","); ++ fprintf(output_file, "'\","); + } + } + else +@@ -1043,12 +1043,12 @@ output_debug() + if (j > 70) + { + ++outline; +- printf("\n "); ++ fprintf(output_file, "\n "); + j = k; + } +- putchar('"'); +- do { putchar(*s); } while (*++s); +- printf("\","); ++ putc('"', output_file); ++ do { putc(*s, output_file); } while (*++s); ++ fprintf(output_file, "\","); + } + } + else +@@ -1057,14 +1057,14 @@ output_debug() + if (j > 70) + { + ++outline; +- printf("\n "); ++ fprintf(output_file, "\n "); + j = 5; + } +- printf("null,"); ++ fprintf(output_file, "null,"); + } + } + outline += 2; +- printf("\n };\n"); ++ fprintf(output_file, "\n };\n"); + FREE(symnam); + } + +@@ -1084,19 +1084,19 @@ output_trailing_text() + if ((c = getc(in)) == EOF) + return; + ++outline; +- printf(line_format, lineno, input_file_name); ++ fprintf(output_file, line_format, lineno, input_file_name); + if (c == '\n') + ++outline; +- putchar(c); ++ putc(c, output_file); + last = c; + } + else + { + ++outline; +- printf(line_format, lineno, input_file_name); +- do { putchar(c); } while ((c = *++cptr) != '\n'); ++ fprintf(output_file, line_format, lineno, input_file_name); ++ do { putc(c, output_file); } while ((c = *++cptr) != '\n'); + ++outline; +- putchar('\n'); ++ putc('\n', output_file); + last = '\n'; + } + +@@ -1104,16 +1104,16 @@ output_trailing_text() + { + if (c == '\n') + ++outline; +- putchar(c); ++ putc(c, output_file); + last = c; + } + + if (last != '\n') + { + ++outline; +- putchar('\n'); ++ putc('\n', output_file); + } +- printf(default_line_format, ++outline + 1); ++ fprintf(output_file, default_line_format, ++outline + 1); + } + + +@@ -1132,22 +1132,22 @@ output_semantic_actions() + last = c; + if (c == '\n') + ++outline; +- putchar(c); ++ putc(c, output_file); + while ((c = getc(action_file)) != EOF) + { + if (c == '\n') + ++outline; +- putchar(c); ++ putc(c, output_file); + last = c; + } + + if (last != '\n') + { + ++outline; +- putchar('\n'); ++ putc('\n', output_file); + } + +- printf(default_line_format, ++outline + 1); ++ fprintf(output_file, default_line_format, ++outline + 1); + } + + +diff --git a/mcs/mcs/Makefile b/mcs/mcs/Makefile +index dbd71a3d581..dbf040afdd6 100644 +--- a/mcs/mcs/Makefile ++++ b/mcs/mcs/Makefile +@@ -32,7 +32,7 @@ BUILT_SOURCES = cs-parser.cs + CLEAN_FILES += y.output + + %-parser.cs: %-parser.jay $(topdir)/jay/skeleton.cs +- $(topdir)/jay/jay $(JAY_FLAGS) < $(topdir)/jay/skeleton.cs $< > jay-tmp.out && mv jay-tmp.out $@ ++ $(topdir)/jay/jay $(JAY_FLAGS) -o jay-tmp.out $< < $(topdir)/jay/skeleton.cs && mv jay-tmp.out $@ + + KEEP_OUTPUT_FILE_COPY = yes + +diff --git a/mcs/mcs/argument.cs b/mcs/mcs/argument.cs +index 5b1003dbadf..4c75e41a9e5 100644 +--- a/mcs/mcs/argument.cs ++++ b/mcs/mcs/argument.cs +@@ -38,6 +38,8 @@ namespace Mono.CSharp + // Conditional instance expression inserted as the first argument + ExtensionTypeConditionalAccess = 5 | ConditionalAccessFlag, + ++ Readonly = 6, ++ + ConditionalAccessFlag = 1 << 7 + } + +diff --git a/mcs/mcs/assembly.cs b/mcs/mcs/assembly.cs +index aa4c54317a2..96e43e70d99 100644 +--- a/mcs/mcs/assembly.cs ++++ b/mcs/mcs/assembly.cs +@@ -554,7 +554,8 @@ namespace Mono.CSharp + if (prop != null) { + AttributeEncoder encoder = new AttributeEncoder (); + encoder.EncodeNamedPropertyArgument (prop, new BoolLiteral (Compiler.BuiltinTypes, true, Location.Null)); +- SetCustomAttribute (pa.Constructor, encoder.ToArray ()); ++ SetCustomAttribute (pa.Constructor, encoder.ToArray (out var references)); ++ module.AddAssemblyReferences (references); + } + } + } +diff --git a/mcs/mcs/attribute.cs b/mcs/mcs/attribute.cs +index 83d403118ad..faf2cfaa1d8 100644 +--- a/mcs/mcs/attribute.cs ++++ b/mcs/mcs/attribute.cs +@@ -1064,8 +1064,10 @@ namespace Mono.CSharp { + } + + byte[] cdata; ++ List references; + if (pos_args == null && named_values == null) { + cdata = AttributeEncoder.Empty; ++ references = null; + } else { + AttributeEncoder encoder = new AttributeEncoder (); + +@@ -1138,7 +1140,7 @@ namespace Mono.CSharp { + encoder.EncodeEmptyNamedArguments (); + } + +- cdata = encoder.ToArray (); ++ cdata = encoder.ToArray (out references); + } + + if (!IsConditionallyExcluded (ctor.DeclaringType)) { +@@ -1157,6 +1159,8 @@ namespace Mono.CSharp { + Error_AttributeEmitError (e.Message); + return; + } ++ ++ context.Module.AddAssemblyReferences (references); + } + + if (!usage_attr.AllowMultiple && allEmitted != null) { +@@ -1415,6 +1419,7 @@ namespace Mono.CSharp { + byte[] buffer; + int pos; + const ushort Version = 1; ++ List imports; + + static AttributeEncoder () + { +@@ -1594,7 +1599,15 @@ namespace Mono.CSharp { + public void EncodeTypeName (TypeSpec type) + { + var old_type = type.GetMetaInfo (); +- Encode (type.MemberDefinition.IsImported ? old_type.AssemblyQualifiedName : old_type.FullName); ++ if (type.MemberDefinition.IsImported) { ++ if (imports == null) ++ imports = new List (); ++ ++ imports.Add (old_type.Assembly); ++ Encode (old_type.AssemblyQualifiedName); ++ } else { ++ Encode (old_type.FullName); ++ } + } + + public void EncodeTypeName (TypeContainer type) +@@ -1675,8 +1688,10 @@ namespace Mono.CSharp { + Encode (value); + } + +- public byte[] ToArray () ++ public byte[] ToArray (out List assemblyReferences) + { ++ assemblyReferences = imports; ++ + byte[] buf = new byte[pos]; + Array.Copy (buffer, buf, pos); + return buf; +@@ -1990,7 +2005,8 @@ namespace Mono.CSharp { + encoder.Encode ((int) state); + encoder.EncodeEmptyNamedArguments (); + +- builder.SetCustomAttribute ((ConstructorInfo) ctor.GetMetaInfo (), encoder.ToArray ()); ++ builder.SetCustomAttribute ((ConstructorInfo) ctor.GetMetaInfo (), encoder.ToArray (out var references)); ++ module.AddAssemblyReferences (references); + } + } + +@@ -2024,7 +2040,8 @@ namespace Mono.CSharp { + encoder.Encode ((int) modes); + encoder.EncodeEmptyNamedArguments (); + +- builder.SetCustomAttribute ((ConstructorInfo) ctor.GetMetaInfo (), encoder.ToArray ()); ++ builder.SetCustomAttribute ((ConstructorInfo) ctor.GetMetaInfo (), encoder.ToArray (out var references)); ++ module.AddAssemblyReferences (references); + } + } + +@@ -2050,7 +2067,8 @@ namespace Mono.CSharp { + encoder.Encode ((uint) bits[0]); + encoder.EncodeEmptyNamedArguments (); + +- builder.SetCustomAttribute ((ConstructorInfo) ctor.GetMetaInfo (), encoder.ToArray ()); ++ builder.SetCustomAttribute ((ConstructorInfo) ctor.GetMetaInfo (), encoder.ToArray (out var references)); ++ module.AddAssemblyReferences (references); + } + + public void EmitAttribute (FieldBuilder builder, decimal value, Location loc) +@@ -2068,7 +2086,8 @@ namespace Mono.CSharp { + encoder.Encode ((uint) bits[0]); + encoder.EncodeEmptyNamedArguments (); + +- builder.SetCustomAttribute ((ConstructorInfo) ctor.GetMetaInfo (), encoder.ToArray ()); ++ builder.SetCustomAttribute ((ConstructorInfo) ctor.GetMetaInfo (), encoder.ToArray (out var references)); ++ module.AddAssemblyReferences (references); + } + } + +@@ -2092,7 +2111,8 @@ namespace Mono.CSharp { + encoder.EncodeTypeName (type); + encoder.EncodeEmptyNamedArguments (); + +- builder.SetCustomAttribute ((ConstructorInfo) ctor.GetMetaInfo (), encoder.ToArray ()); ++ builder.SetCustomAttribute ((ConstructorInfo) ctor.GetMetaInfo (), encoder.ToArray (out var references)); ++ module.AddAssemblyReferences (references); + } + } + +diff --git a/mcs/mcs/class.cs b/mcs/mcs/class.cs +index 6b1adc297a3..dc61f6dc627 100644 +--- a/mcs/mcs/class.cs ++++ b/mcs/mcs/class.cs +@@ -2117,7 +2117,8 @@ namespace Mono.CSharp + encoder.Encode (GetAttributeDefaultMember ()); + encoder.EncodeEmptyNamedArguments (); + +- TypeBuilder.SetCustomAttribute ((ConstructorInfo) ctor.GetMetaInfo (), encoder.ToArray ()); ++ TypeBuilder.SetCustomAttribute ((ConstructorInfo) ctor.GetMetaInfo (), encoder.ToArray (out var references)); ++ Module.AddAssemblyReferences (references); + } + + public override void VerifyMembers () +@@ -3962,7 +3963,10 @@ namespace Mono.CSharp + Report.Error (4013, Location, + "Local variables of type `{0}' cannot be used inside anonymous methods, lambda expressions or query expressions", + MemberType.GetSignatureForError ()); +- } else if (MemberType.IsByRefLike) { ++ } else if (MemberType.IsSpecialRuntimeType) { ++ Report.Error (610, Location, ++ "Field or property cannot be of type `{0}'", MemberType.GetSignatureForError ()); ++ } else { + if ((ModFlags & (Modifiers.ABSTRACT | Modifiers.EXTERN)) != 0) + return; + +@@ -3975,9 +3979,6 @@ namespace Mono.CSharp + Report.Error (8345, Location, + "Field or auto-implemented property cannot be of type `{0}' unless it is an instance member of a ref struct", + MemberType.GetSignatureForError ()); +- } else { +- Report.Error (610, Location, +- "Field or property cannot be of type `{0}'", MemberType.GetSignatureForError ()); + } + } + } +diff --git a/mcs/mcs/convert.cs b/mcs/mcs/convert.cs +index ae153fc49e8..2c8d2a0204c 100644 +--- a/mcs/mcs/convert.cs ++++ b/mcs/mcs/convert.cs +@@ -1232,6 +1232,13 @@ namespace Mono.CSharp { + FindApplicableUserDefinedConversionOperators (rc, operators, source_type_expr, target_type, restr, ref candidates); + } + ++ if (source_type_expr == source && source_type.IsNullableType) { ++ operators = MemberCache.GetUserOperator (source_type.TypeArguments [0], Operator.OpType.Implicit, declared_only); ++ if (operators != null) { ++ FindApplicableUserDefinedConversionOperators (rc, operators, source_type_expr, target_type, restr, ref candidates); ++ } ++ } ++ + if (!implicitOnly) { + operators = MemberCache.GetUserOperator (source_type, Operator.OpType.Explicit, declared_only); + if (operators != null) { +diff --git a/mcs/mcs/cs-parser.jay b/mcs/mcs/cs-parser.jay +index 4d6fcb44c0d..4ca3bf74f3d 100644 +--- a/mcs/mcs/cs-parser.jay ++++ b/mcs/mcs/cs-parser.jay +@@ -34,13 +34,16 @@ namespace Mono.CSharp + Params = 1 << 4, + Arglist = 1 << 5, + DefaultValue = 1 << 6, ++ ReadOnly = 1 << 7, + +- All = Ref | Out | This | Params | Arglist | DefaultValue, ++ All = Ref | Out | This | Params | Arglist | DefaultValue | ReadOnly, + PrimaryConstructor = Ref | Out | Params | DefaultValue + } + + static readonly object ModifierNone = 0; +- ++ static readonly object RefStructToken = new object (); ++ static readonly object RefPartialStructToken = new object (); ++ + NamespaceContainer current_namespace; + TypeContainer current_container; + TypeDefinition current_type; +@@ -338,6 +341,7 @@ namespace Mono.CSharp + %token OPEN_BRACKET_EXPR + %token OPEN_PARENS_DECONSTRUCT + %token REF_STRUCT ++%token REF_PARTIAL + + // Make the parser go into eval mode parsing (statements and compilation units). + %token EVAL_STATEMENT_PARSER +@@ -648,8 +652,8 @@ namespace_or_type_declaration + TypeContainer ds = (TypeContainer)$1; + + if ((ds.ModFlags & (Modifiers.PRIVATE | Modifiers.PROTECTED)) != 0){ +- report.Error (1527, ds.Location, +- "Namespace elements cannot be explicitly declared as private, protected or protected internal"); ++ report.Error (1527, ds.Location, ++ "Namespace elements cannot be explicitly declared as private, protected, protected internal, or private protected"); + } + + // Here is a trick, for explicit attributes we don't know where they belong to until +@@ -1028,7 +1032,15 @@ struct_keyword + FeatureIsNotAvailable (GetLocation ($1), "ref structs"); + } + +- $$ = this; ++ $$ = RefStructToken; ++ } ++ | REF_PARTIAL STRUCT ++ { ++ if (lang_version < LanguageVersion.V_7_2) { ++ FeatureIsNotAvailable (GetLocation ($1), "ref structs"); ++ } ++ ++ $$ = RefPartialStructToken; + } + ; + +@@ -1043,8 +1055,13 @@ struct_declaration + if ((mods & Modifiers.READONLY) != 0 && lang_version < LanguageVersion.V_7_2) { + FeatureIsNotAvailable (GetLocation ($4), "readonly structs"); + } +- if ($4 != null) ++ if ($4 != null) { + mods |= Modifiers.REF; ++ if ($4 == RefPartialStructToken) { ++ mods |= Modifiers.PARTIAL; ++ $3 = $4; ++ } ++ } + + lexer.ConstraintsParsing = true; + valid_param_mod = ParameterModifierType.PrimaryConstructor; +@@ -1469,7 +1486,7 @@ method_header + OPEN_PARENS + { + lexer.parsing_generic_declaration = false; +- valid_param_mod = ParameterModifierType.All; ++ valid_param_mod = ParameterModifierType.All; + } + opt_formal_parameter_list CLOSE_PARENS + { +@@ -1569,7 +1586,7 @@ constructor_body + expression SEMICOLON + { + lexer.parsing_block = 0; +- current_block.AddStatement (new ContextualReturn ((Expression) $3)); ++ current_block.AddStatement (CreateExpressionBodiedStatement ((Expression) $3)); + var b = end_block (GetLocation ($4)); + b.IsCompilerGenerated = true; + $$ = b; +@@ -1590,7 +1607,7 @@ expression_block + lambda_arrow_expression SEMICOLON + { + lexer.parsing_block = 0; +- current_block.AddStatement (new ContextualReturn ((Expression) $3)); ++ current_block.AddStatement (CreateExpressionBodiedStatement ((Expression) $3)); + var b = end_block (GetLocation ($4)); + b.IsCompilerGenerated = true; + $$ = b; +@@ -1794,7 +1811,9 @@ parameter_modifiers + Parameter.Modifier mod = (Parameter.Modifier)$1 | p2; + if (((Parameter.Modifier)$1 & p2) == p2) { + Error_DuplicateParameterModifier (lexer.Location, p2); +- } else { ++ } else if ((mod & ~(Parameter.Modifier.This | Parameter.Modifier.ReadOnly)) == 0) { ++ // ok ++ } else { + switch (mod & ~Parameter.Modifier.This) { + case Parameter.Modifier.REF: + report.Error (1101, lexer.Location, "The parameter modifiers `this' and `ref' cannot be used altogether"); +@@ -1836,6 +1855,13 @@ parameter_modifier + + $$ = Parameter.Modifier.This; + } ++ | IN ++ { ++ if (lang_version < LanguageVersion.V_7_2) ++ FeatureIsNotAvailable (GetLocation ($1), "readonly references"); ++ ++ $$ = Parameter.Modifier.ReadOnly; ++ } + ; + + parameter_array +@@ -1871,7 +1897,7 @@ params_modifier + if ((mod & Parameter.Modifier.This) != 0) { + report.Error (1104, GetLocation ($1), "The parameter modifiers `this' and `params' cannot be used altogether"); + } else { +- report.Error (1611, GetLocation ($1), "The params parameter cannot be declared as ref or out"); ++ report.Error (1611, GetLocation ($1), "The params parameter cannot be declared as ref, out or in"); + } + } + | PARAMS params_modifier +@@ -2004,7 +2030,7 @@ indexer_declaration + : opt_attributes opt_modifiers + ref_member_type indexer_declaration_name OPEN_BRACKET + { +- valid_param_mod = ParameterModifierType.Params | ParameterModifierType.DefaultValue; ++ valid_param_mod = ParameterModifierType.Params | ParameterModifierType.DefaultValue | ParameterModifierType.ReadOnly; + } + opt_formal_parameter_list CLOSE_BRACKET + { +@@ -2181,6 +2207,11 @@ set_accessor_declaration + accessor_body + : block + | expression_block ++ { ++ if (lang_version < LanguageVersion.V_7) { ++ FeatureIsNotAvailable (GetLocation ($1), "expression body property accessor"); ++ } ++ } + | SEMICOLON + { + // TODO: lbag +@@ -2331,7 +2362,7 @@ operator_type + operator_declarator + : operator_type OPERATOR overloadable_operator OPEN_PARENS + { +- valid_param_mod = ParameterModifierType.DefaultValue; ++ valid_param_mod = ParameterModifierType.DefaultValue | ParameterModifierType.ReadOnly; + if ((Operator.OpType) $3 == Operator.OpType.Is) + valid_param_mod |= ParameterModifierType.Out; + } +@@ -2418,7 +2449,7 @@ overloadable_operator + conversion_operator_declarator + : IMPLICIT OPERATOR type OPEN_PARENS + { +- valid_param_mod = ParameterModifierType.DefaultValue; ++ valid_param_mod = ParameterModifierType.DefaultValue | ParameterModifierType.ReadOnly; + } + opt_formal_parameter_list CLOSE_PARENS + { +@@ -2441,7 +2472,7 @@ conversion_operator_declarator + } + | EXPLICIT OPERATOR type OPEN_PARENS + { +- valid_param_mod = ParameterModifierType.DefaultValue; ++ valid_param_mod = ParameterModifierType.DefaultValue | ParameterModifierType.ReadOnly; + } + opt_formal_parameter_list CLOSE_PARENS + { +@@ -2850,6 +2881,11 @@ event_accessor_block + } + | block + | expression_block ++ { ++ if (lang_version < LanguageVersion.V_7) { ++ FeatureIsNotAvailable (GetLocation ($1), "expression body event accessor"); ++ } ++ } + ; + + attributes_without_members +@@ -3014,7 +3050,7 @@ delegate_declaration + ref_member_type type_declaration_name + OPEN_PARENS + { +- valid_param_mod = ParameterModifierType.Ref | ParameterModifierType.Out | ParameterModifierType.Params | ParameterModifierType.DefaultValue; ++ valid_param_mod = ParameterModifierType.Ref | ParameterModifierType.Out | ParameterModifierType.Params | ParameterModifierType.DefaultValue | ParameterModifierType.ReadOnly; + } + opt_formal_parameter_list CLOSE_PARENS + { +@@ -3927,7 +3963,15 @@ non_simple_argument + { + $$ = new Argument (new Arglist (GetLocation ($1))); + lbag.AddLocation ($$, GetLocation ($2), GetLocation ($3)); +- } ++ } ++ | IN variable_reference ++ { ++ if (lang_version < LanguageVersion.V_7_2) ++ FeatureIsNotAvailable (GetLocation ($1), "readonly references"); ++ ++ $$ = new Argument ((Expression) $2, Argument.AType.Readonly); ++ lbag.AddLocation ($$, GetLocation ($1)); ++ } + ; + + out_variable_declaration +@@ -4408,7 +4452,7 @@ opt_anonymous_method_signature + anonymous_method_signature + : OPEN_PARENS + { +- valid_param_mod = ParameterModifierType.Ref | ParameterModifierType.Out; ++ valid_param_mod = ParameterModifierType.Ref | ParameterModifierType.Out | ParameterModifierType.ReadOnly; + } + opt_formal_parameter_list CLOSE_PARENS + { +@@ -5014,36 +5058,47 @@ null_coalescing_expression + } + ; + ++ ++conditional_oper_expr ++ : expression ++ | stackalloc_expression ++ ; ++ + conditional_expression + : null_coalescing_expression +- | null_coalescing_expression INTERR expression COLON expression ++ | null_coalescing_expression INTERR conditional_oper_expr COLON conditional_oper_expr + { + $$ = new Conditional (new BooleanExpression ((Expression) $1), (Expression) $3, (Expression) $5, GetLocation ($2)); + lbag.AddLocation ($$, GetLocation ($4)); + } +- | null_coalescing_expression INTERR expression COLON THROW prefixed_unary_expression ++ | null_coalescing_expression INTERR conditional_oper_expr COLON THROW prefixed_unary_expression + { + if (lang_version < LanguageVersion.V_7) +- FeatureIsNotAvailable (lexer.Location, "throw expression"); ++ FeatureIsNotAvailable (GetLocation ($5), "throw expression"); + + var expr = new ThrowExpression ((Expression) $6, GetLocation ($5)); + $$ = new Conditional (new BooleanExpression ((Expression) $1), (Expression) $3, expr, GetLocation ($2)); + lbag.AddLocation ($$, GetLocation ($4)); + } +- | null_coalescing_expression INTERR expression error ++ | null_coalescing_expression INTERR reference_expression COLON reference_expression ++ { ++ $$ = new Conditional (new BooleanExpression ((Expression) $1), (Expression) $3, (Expression) $5, GetLocation ($2)); ++ lbag.AddLocation ($$, GetLocation ($4)); ++ } ++ | null_coalescing_expression INTERR conditional_oper_expr error + { + Error_SyntaxError (yyToken); + + $$ = new Conditional (new BooleanExpression ((Expression) $1), (Expression) $3, null, GetLocation ($2)); + } +- | null_coalescing_expression INTERR expression COLON error ++ | null_coalescing_expression INTERR conditional_oper_expr COLON error + { + Error_SyntaxError (yyToken); + + $$ = new Conditional (new BooleanExpression ((Expression) $1), (Expression) $3, null, GetLocation ($2)); + lbag.AddLocation ($$, GetLocation ($4)); + } +- | null_coalescing_expression INTERR expression COLON CLOSE_BRACE ++ | null_coalescing_expression INTERR conditional_oper_expr COLON CLOSE_BRACE + { + Error_SyntaxError (Token.CLOSE_BRACE); + +@@ -5308,7 +5363,7 @@ lambda_expression + } + | OPEN_PARENS_LAMBDA + { +- valid_param_mod = ParameterModifierType.Ref | ParameterModifierType.Out; ++ valid_param_mod = ParameterModifierType.Ref | ParameterModifierType.Out | ParameterModifierType.ReadOnly; + } + opt_lambda_parameter_list CLOSE_PARENS ARROW + { +@@ -5322,7 +5377,7 @@ lambda_expression + } + | ASYNC OPEN_PARENS_LAMBDA + { +- valid_param_mod = ParameterModifierType.Ref | ParameterModifierType.Out; ++ valid_param_mod = ParameterModifierType.Ref | ParameterModifierType.Out | ParameterModifierType.ReadOnly; + } + opt_lambda_parameter_list CLOSE_PARENS ARROW + { +@@ -5522,10 +5577,17 @@ modifiers + if ((m1 & m2) != 0) { + report.Error (1004, lexer.Location - ModifiersExtensions.Name (m2).Length, + "Duplicate `{0}' modifier", ModifiersExtensions.Name (m2)); +- } else if ((m2 & Modifiers.AccessibilityMask) != 0 && (m1 & Modifiers.AccessibilityMask) != 0 && +- ((m2 | m1 & Modifiers.AccessibilityMask) != (Modifiers.PROTECTED | Modifiers.INTERNAL))) { +- report.Error (107, lexer.Location - ModifiersExtensions.Name (m2).Length, +- "More than one protection modifier specified"); ++ } else if ((m2 & Modifiers.AccessibilityMask) != 0 && (m1 & Modifiers.AccessibilityMask) != 0) { ++ var accessibility = (m2 | m1 & Modifiers.AccessibilityMask); ++ ++ if (accessibility == (Modifiers.PRIVATE | Modifiers.PROTECTED)) { ++ if (lang_version < LanguageVersion.V_7_2) { ++ FeatureIsNotAvailable (lexer.Location, "private protected"); ++ } ++ } else if (accessibility != (Modifiers.PROTECTED | Modifiers.INTERNAL)) { ++ report.Error (107, lexer.Location - ModifiersExtensions.Name (m2).Length, ++ "More than one protection modifier specified"); ++ } + } + + $$ = m1 | m2; +@@ -6223,11 +6285,28 @@ block_variable_initializer + | STACKALLOC simple_type + { + report.Error (1575, GetLocation ($1), "A stackalloc expression requires [] after type"); +- $$ = new StackAlloc ((Expression) $2, null, GetLocation ($1)); ++ $$ = new StackAlloc ((Expression) $2, null, GetLocation ($1)); + } + | reference_expression + ; + ++stackalloc_expression ++ : STACKALLOC simple_type OPEN_BRACKET_EXPR expression CLOSE_BRACKET ++ { ++ if (lang_version < LanguageVersion.V_7_2) { ++ FeatureIsNotAvailable (GetLocation ($1), "ref structs"); ++ } ++ ++ $$ = new SpanStackAlloc ((Expression) $2, (Expression) $4, GetLocation ($1)); ++ lbag.AddLocation ($$, GetLocation ($3), GetLocation ($5)); ++ } ++ | STACKALLOC simple_type ++ { ++ report.Error (1575, GetLocation ($1), "A stackalloc expression requires [] after type"); ++ $$ = new StackAlloc ((Expression) $2, null, GetLocation ($1)); ++ } ++ ; ++ + reference_expression + : REF expression + { +@@ -7699,7 +7778,7 @@ doc_cref + } + | doc_type_declaration_name DOT THIS OPEN_BRACKET + { +- valid_param_mod = ParameterModifierType.Ref | ParameterModifierType.Out; ++ valid_param_mod = ParameterModifierType.Ref | ParameterModifierType.Out | ParameterModifierType.ReadOnly; + } + opt_doc_parameters CLOSE_BRACKET + { +@@ -7743,7 +7822,7 @@ opt_doc_method_sig + : /* empty */ + | OPEN_PARENS + { +- valid_param_mod = ParameterModifierType.Ref | ParameterModifierType.Out; ++ valid_param_mod = ParameterModifierType.Ref | ParameterModifierType.Out | ParameterModifierType.ReadOnly; + } + opt_doc_parameters CLOSE_PARENS + { +@@ -7951,6 +8030,14 @@ static bool IsUnaryOperator (Operator.OpType op) + return false; + } + ++static Statement CreateExpressionBodiedStatement (Expression expr) ++{ ++ if (expr is ThrowExpression te) ++ return new StatementExpression (te); ++ ++ return new ContextualReturn (expr); ++} ++ + void syntax_error (Location l, string msg) + { + report.Error (1003, l, "Syntax error, " + msg); +@@ -8430,6 +8517,8 @@ static string GetTokenName (int token) + case Token.READONLY: + return "readonly"; + case Token.REF: ++ case Token.REF_STRUCT: ++ case Token.REF_PARTIAL: + return "ref"; + case Token.RETURN: + return "return"; +@@ -8444,7 +8533,6 @@ static string GetTokenName (int token) + case Token.STATIC: + return "static"; + case Token.STRUCT: +- case Token.REF_STRUCT: + return "struct"; + case Token.SWITCH: + return "switch"; +diff --git a/mcs/mcs/cs-tokenizer.cs b/mcs/mcs/cs-tokenizer.cs +index 37edb5c1224..db5ba1f1f1b 100644 +--- a/mcs/mcs/cs-tokenizer.cs ++++ b/mcs/mcs/cs-tokenizer.cs +@@ -825,8 +825,7 @@ namespace Mono.CSharp + next_token == Token.CLASS || + next_token == Token.STRUCT || + next_token == Token.INTERFACE || +- next_token == Token.VOID || +- next_token == Token.REF_STRUCT; ++ next_token == Token.VOID; + + PopPosition (); + +@@ -916,14 +915,20 @@ namespace Mono.CSharp + + break; + case Token.REF: +- if (peek_token () == Token.STRUCT) { ++ var pp = peek_token (); ++ switch (pp) { ++ case Token.STRUCT: + token (); + res = Token.REF_STRUCT; ++ break; ++ case Token.PARTIAL: ++ token (); ++ res = Token.REF_PARTIAL; ++ break; + } + break; + } + +- + return res; + } + +@@ -1212,6 +1217,7 @@ namespace Mono.CSharp + + case Token.REF: + case Token.OUT: ++ case Token.IN: + can_be_type = is_type = false; + continue; + +@@ -1406,6 +1412,8 @@ namespace Mono.CSharp + case Token.INTERPOLATED_STRING: + case Token.THROW: + case Token.DEFAULT_COLON: ++ case Token.REF: ++ case Token.STACKALLOC: + next_token = Token.INTERR; + break; + +@@ -1567,28 +1575,53 @@ namespace Mono.CSharp + { + int d; + bool seen_digits = false; +- +- if (c != -1){ ++ bool digit_separator = false; ++ int prev = c; ++ var loc = Location; ++ ++ if (prev != -1){ + if (number_pos == MaxNumberLength) + Error_NumericConstantTooLong (); +- number_builder [number_pos++] = (char) c; ++ number_builder [number_pos++] = (char) prev; + } +- ++ + // + // We use peek_char2, because decimal_digits needs to do a + // 2-character look-ahead (5.ToString for example). + // + while ((d = peek_char2 ()) != -1){ +- if (d >= '0' && d <= '9'){ ++ if (d >= '0' && d <= '9') { + if (number_pos == MaxNumberLength) + Error_NumericConstantTooLong (); +- number_builder [number_pos++] = (char) d; +- get_char (); ++ number_builder [number_pos++] = (char)d; ++ prev = get_char (); + seen_digits = true; +- } else +- break; ++ continue; ++ } else if (d == '_') { ++ if (!digit_separator) { ++ if (context.Settings.Version < LanguageVersion.V_7) ++ Report.FeatureIsNotAvailable (context, Location, "digit separators"); ++ ++ digit_separator = true; ++ } ++ ++ if (prev == '.') ++ break; ++ ++ if (prev == 'e' || prev == 'E') ++ Error_InvalidNumber (); ++ ++ prev = get_char(); ++ continue; ++ } ++ ++ break; + } + ++ if (prev == '_') { ++ Error_InvalidNumber (); ++ } ++ + return seen_digits; + } + +@@ -1716,9 +1749,8 @@ namespace Mono.CSharp + } catch (OverflowException) { + Error_NumericConstantTooLong (); + return new IntLiteral (context.BuiltinTypes, 0, loc); +- } +- catch (FormatException) { +- Report.Error (1013, Location, "Invalid number"); ++ } catch (FormatException) { ++ Error_InvalidNumber (); + return new IntLiteral (context.BuiltinTypes, 0, loc); + } + } +@@ -1757,14 +1789,41 @@ namespace Mono.CSharp + { + int d; + ulong ul; +- +- get_char (); ++ bool digit_separator = false; ++ int prev = get_char (); ++ + while ((d = peek_char ()) != -1){ + if (is_hex (d)){ + number_builder [number_pos++] = (char) d; + get_char (); +- } else +- break; ++ ++ prev = d; ++ continue; ++ } ++ ++ if (d == '_') { ++ if (prev == 'x' || prev == 'X') ++ Error_InvalidNumber (); ++ ++ get_char (); ++ ++ if (!digit_separator) { ++ if (context.Settings.Version < LanguageVersion.V_7) ++ Report.FeatureIsNotAvailable (context, Location, "digit separators"); ++ ++ digit_separator = true; ++ } ++ ++ prev = d; ++ continue; ++ } ++ ++ break; ++ } ++ ++ if (number_pos == 0 || prev == '_') { ++ Error_InvalidNumber (); ++ return new IntLiteral (context.BuiltinTypes, 0, loc); + } + + string s = new String (number_builder, 0, number_pos); +@@ -1779,13 +1838,65 @@ namespace Mono.CSharp + } catch (OverflowException){ + Error_NumericConstantTooLong (); + return new IntLiteral (context.BuiltinTypes, 0, loc); +- } +- catch (FormatException) { +- Report.Error (1013, Location, "Invalid number"); ++ } catch (FormatException) { ++ Error_InvalidNumber (); + return new IntLiteral (context.BuiltinTypes, 0, loc); + } + } + ++ ILiteralConstant handle_binary (Location loc) ++ { ++ int d; ++ ulong ul = 0; ++ bool digit_separator = false; ++ int digits = 0; ++ int prev = get_char (); ++ ++ while ((d = peek_char ()) != -1){ ++ ++ if (d == '0' || d == '1') { ++ ul = (ul << 1); ++ digits++; ++ if (d == '1') ++ ul |= 1; ++ get_char (); ++ if (digits > 64) { ++ Error_NumericConstantTooLong (); ++ return new IntLiteral (context.BuiltinTypes, 0, loc); ++ } ++ ++ prev = d; ++ continue; ++ } ++ ++ if (d == '_') { ++ if (prev == 'b' || prev == 'B') ++ Error_InvalidNumber (); ++ ++ get_char (); ++ ++ if (!digit_separator) { ++ if (context.Settings.Version < LanguageVersion.V_7) ++ Report.FeatureIsNotAvailable (context, Location, "digit separators"); ++ ++ digit_separator = true; ++ } ++ ++ prev = d; ++ continue; ++ } ++ ++ break; ++ } ++ ++ if (digits == 0 || prev == '_') { ++ Error_InvalidNumber (); ++ return new IntLiteral (context.BuiltinTypes, 0, loc); ++ } ++ ++ return integer_type_suffix (ul, peek_char (), loc); ++ } ++ + // + // Invoked if we know we have .digits or digits + // +@@ -1817,7 +1928,20 @@ namespace Mono.CSharp + + return Token.LITERAL; + } ++ ++ if (peek == 'b' || peek == 'B'){ ++ if (context.Settings.Version < LanguageVersion.V_7) ++ Report.FeatureIsNotAvailable (context, Location, "binary literals"); ++ ++ val = res = handle_binary (loc); ++#if FULL_AST ++ res.ParsedValue = reader.ReadChars (read_start, reader.Position - 1); ++#endif ++ ++ return Token.LITERAL; ++ } + } ++ + decimal_digits (c); + c = peek_char (); + } +@@ -1869,7 +1993,7 @@ namespace Mono.CSharp + Error_NumericConstantTooLong (); + number_builder [number_pos++] = '+'; + } +- ++ + decimal_digits (c); + c = peek_char (); + } +@@ -2944,6 +3068,11 @@ namespace Mono.CSharp + { + Report.Error (1021, Location, "Integral constant is too large"); + } ++ ++ void Error_InvalidNumber () ++ { ++ Report.Error (1013, Location, "Invalid number"); ++ } + + void Error_InvalidDirective () + { +diff --git a/mcs/mcs/ecore.cs b/mcs/mcs/ecore.cs +index 20ee9e73b19..d5926bf4d1f 100644 +--- a/mcs/mcs/ecore.cs ++++ b/mcs/mcs/ecore.cs +@@ -241,7 +241,7 @@ namespace Mono.CSharp { + + protected void CheckExpressionVariable (ResolveContext rc) + { +- if (rc.HasAny (ResolveContext.Options.BaseInitializer | ResolveContext.Options.FieldInitializerScope)) { ++ if (rc.HasAny (ResolveContext.Options.BaseInitializer | ResolveContext.Options.FieldInitializerScope) && rc.CurrentAnonymousMethod == null) { + rc.Report.Error (8200, loc, "Out variable and pattern variable declarations are not allowed within constructor initializers, field initializers, or property initializers"); + } else if (rc.HasSet (ResolveContext.Options.QueryClauseScope)) { + rc.Report.Error (8201, loc, "Out variable and pattern variable declarations are not allowed within a query clause"); +diff --git a/mcs/mcs/expression.cs b/mcs/mcs/expression.cs +index 518ccc8ef43..87db14a0ce7 100644 +--- a/mcs/mcs/expression.cs ++++ b/mcs/mcs/expression.cs +@@ -920,7 +920,7 @@ namespace Mono.CSharp + + public override bool ContainsEmitWithAwait () + { +- throw new NotImplementedException (); ++ return false; + } + + public override Expression CreateExpressionTree (ResolveContext ec) +@@ -2051,7 +2051,11 @@ namespace Mono.CSharp + + if (d.BuiltinType == BuiltinTypeSpec.Type.Dynamic) + return this; +- ++ ++ // TODO: Requires custom optimized version with variable store ++ if (Variable != null) ++ return this; ++ + // + // Turn is check into simple null check for implicitly convertible reference types + // +@@ -2757,6 +2761,12 @@ namespace Mono.CSharp + } + } + ++ public override bool IsNull { ++ get { ++ return TypeSpec.IsReferenceType (type); ++ } ++ } ++ + public override bool ContainsEmitWithAwait () + { + return false; +@@ -5669,6 +5679,12 @@ namespace Mono.CSharp + ConvCast.Emit (ec, enum_conversion); + } + ++ public override void EmitPrepare (EmitContext ec) ++ { ++ Left.EmitPrepare (ec); ++ Right.EmitPrepare (ec); ++ } ++ + public override void EmitSideEffect (EmitContext ec) + { + if ((oper & Operator.LogicalMask) != 0 || +@@ -6385,7 +6401,7 @@ namespace Mono.CSharp + } + } + +- if (conv_false_expr != null) { ++ if (conv_false_expr != null && false_type != InternalType.ErrorType && true_type != InternalType.ErrorType) { + ec.Report.Error (172, true_expr.Location, + "Type of conditional expression cannot be determined as `{0}' and `{1}' convert implicitly to each other", + true_type.GetSignatureForError (), false_type.GetSignatureForError ()); +@@ -6398,7 +6414,7 @@ namespace Mono.CSharp + } else if ((conv = Convert.ImplicitConversion (ec, false_expr, true_type, loc)) != null) { + false_expr = conv; + } else { +- if (false_type != InternalType.ErrorType) { ++ if (false_type != InternalType.ErrorType && true_type != InternalType.ErrorType) { + ec.Report.Error (173, true_expr.Location, + "Type of conditional expression cannot be determined because there is no implicit conversion between `{0}' and `{1}'", + true_type.GetSignatureForError (), false_type.GetSignatureForError ()); +@@ -6427,6 +6443,30 @@ namespace Mono.CSharp + return this; + } + ++ public override Expression DoResolveLValue (ResolveContext rc, Expression right_side) ++ { ++ expr = expr.Resolve (rc); ++ true_expr = true_expr.Resolve (rc); ++ false_expr = false_expr.Resolve (rc); ++ ++ if (true_expr == null || false_expr == null || expr == null) ++ return null; ++ ++ if (!(true_expr is ReferenceExpression && false_expr is ReferenceExpression)) { ++ rc.Report.Error (8326, expr.Location, "Both ref conditional operators must be ref values"); ++ return null; ++ } ++ ++ if (!TypeSpecComparer.IsEqual (true_expr.Type, false_expr.Type)) { ++ rc.Report.Error (8327, true_expr.Location, "The ref conditional expression types `{0}' and `{1}' have to match", ++ true_expr.Type.GetSignatureForError (), false_expr.Type.GetSignatureForError ()); ++ } ++ ++ eclass = ExprClass.Value; ++ type = true_expr.Type; ++ return this; ++ } ++ + public override void Emit (EmitContext ec) + { + Label false_target = ec.DefineLabel (); +@@ -6774,7 +6814,7 @@ namespace Mono.CSharp + "Cannot use fixed variable `{0}' inside an anonymous method, lambda expression or query expression", + GetSignatureForError ()); + } else if (local_info.IsByRef || local_info.Type.IsByRefLike) { +- if (ec.CurrentAnonymousMethod is StateMachineInitializer) { ++ if (local_info.Type.IsSpecialRuntimeType || ec.CurrentAnonymousMethod is StateMachineInitializer) { + // It's reported later as 4012/4013 + } else { + ec.Report.Error (8175, loc, +@@ -11877,12 +11917,17 @@ namespace Mono.CSharp + if (!TypeManager.VerifyUnmanaged (ec.Module, otype, loc)) + return null; + +- type = PointerContainer.MakeType (ec.Module, otype); ++ ResolveExpressionType (ec, otype); + eclass = ExprClass.Value; + + return this; + } + ++ protected virtual void ResolveExpressionType (ResolveContext rc, TypeSpec elementType) ++ { ++ type = PointerContainer.MakeType (rc.Module, elementType); ++ } ++ + public override void Emit (EmitContext ec) + { + int size = BuiltinTypeSpec.GetSize (otype); +@@ -11931,14 +11976,36 @@ namespace Mono.CSharp + public bool ResolveSpanConversion (ResolveContext rc, TypeSpec spanType) + { + ctor = MemberCache.FindMember (spanType, MemberFilter.Constructor (ParametersCompiled.CreateFullyResolved (PointerContainer.MakeType (rc.Module, rc.Module.Compiler.BuiltinTypes.Void), rc.Module.Compiler.BuiltinTypes.Int)), BindingRestriction.DeclaredOnly) as MethodSpec; +- if (ctor == null) ++ if (ctor == null) { ++ this.type = InternalType.ErrorType; + return false; ++ } + + this.type = spanType; + return true; + } + } + ++ class SpanStackAlloc : StackAlloc ++ { ++ public SpanStackAlloc (Expression type, Expression count, Location l) ++ : base (type, count, l) ++ { ++ } ++ ++ protected override void ResolveExpressionType (ResolveContext rc, TypeSpec elementType) ++ { ++ var span = rc.Module.PredefinedTypes.SpanGeneric.Resolve (); ++ if (span == null) { ++ type = InternalType.ErrorType; ++ return; ++ } ++ ++ type = span.MakeGenericType (rc, new [] { elementType }); ++ ResolveSpanConversion (rc, type); ++ } ++ } ++ + // + // An object initializer expression + // +@@ -13085,6 +13152,9 @@ namespace Mono.CSharp + if (expr is IAssignMethod) + return true; + ++ if (expr is Conditional) ++ return true; ++ + var invocation = expr as Invocation; + if (invocation?.Type.Kind == MemberKind.ByRef) + return true; +@@ -13232,6 +13302,10 @@ namespace Mono.CSharp + this.loc = loc; + } + ++ protected override void CloneTo (CloneContext clonectx, Expression t) ++ { ++ } ++ + public override Expression CreateExpressionTree (ResolveContext ec) + { + throw new NotImplementedException (); +diff --git a/mcs/mcs/field.cs b/mcs/mcs/field.cs +index 86bb028defc..8c667328143 100644 +--- a/mcs/mcs/field.cs ++++ b/mcs/mcs/field.cs +@@ -542,7 +542,7 @@ namespace Mono.CSharp + } + ); + +- fixed_buffer_type.SetCustomAttribute ((ConstructorInfo) ctor.GetMetaInfo (), encoder.ToArray ()); ++ fixed_buffer_type.SetCustomAttribute ((ConstructorInfo) ctor.GetMetaInfo (), encoder.ToArray (out _)); + #endif + // + // Don't emit FixedBufferAttribute attribute for private types +@@ -559,7 +559,8 @@ namespace Mono.CSharp + encoder.Encode (buffer_size); + encoder.EncodeEmptyNamedArguments (); + +- FieldBuilder.SetCustomAttribute ((ConstructorInfo) ctor.GetMetaInfo (), encoder.ToArray ()); ++ FieldBuilder.SetCustomAttribute ((ConstructorInfo) ctor.GetMetaInfo (), encoder.ToArray (out var references)); ++ Module.AddAssemblyReferences (references); + } + } + +diff --git a/mcs/mcs/generic.cs b/mcs/mcs/generic.cs +index ec2965df63b..0c7032b2088 100644 +--- a/mcs/mcs/generic.cs ++++ b/mcs/mcs/generic.cs +@@ -3381,7 +3381,7 @@ namespace Mono.CSharp { + continue; + + var bound = candidates [ci]; +- if (bound.Type == best_candidate) ++ if (TypeSpecComparer.IsEqual (bound.Type, best_candidate)) + continue; + + int cii = 0; +diff --git a/mcs/mcs/modifiers.cs b/mcs/mcs/modifiers.cs +index 926ab5d1848..21dd52b3b14 100644 +--- a/mcs/mcs/modifiers.cs ++++ b/mcs/mcs/modifiers.cs +@@ -74,6 +74,8 @@ namespace Mono.CSharp + return "internal"; + case Modifiers.PRIVATE: + return "private"; ++ case Modifiers.PRIVATE | Modifiers.PROTECTED: ++ return "private protected"; + default: + throw new NotImplementedException (mod.ToString ()); + } +@@ -129,12 +131,16 @@ namespace Mono.CSharp + if ((modB & Modifiers.PUBLIC) != 0) { + flags = Modifiers.PROTECTED | Modifiers.INTERNAL | Modifiers.PRIVATE; + } else if ((modB & Modifiers.PROTECTED) != 0) { +- if ((modB & Modifiers.INTERNAL) != 0) +- flags = Modifiers.PROTECTED | Modifiers.INTERNAL; +- +- flags |= Modifiers.PRIVATE; +- } else if ((modB & Modifiers.INTERNAL) != 0) ++ if ((modB & Modifiers.INTERNAL) != 0) { ++ flags = Modifiers.PROTECTED | Modifiers.INTERNAL | Modifiers.PRIVATE; ++ } else { ++ modA &= ~Modifiers.PROTECTED; ++ flags = Modifiers.PRIVATE; ++ } ++ } else if ((modB & Modifiers.INTERNAL) != 0) { ++ modA &= ~Modifiers.PROTECTED; + flags = Modifiers.PRIVATE; ++ } + + return modB != modA && (modA & (~flags)) == 0; + } +@@ -151,6 +157,8 @@ namespace Mono.CSharp + } else { + if ((mod_flags & Modifiers.PUBLIC) != 0) + t = TypeAttributes.NestedPublic; ++ else if ((mod_flags & (Modifiers.PROTECTED | Modifiers.PRIVATE)) == (Modifiers.PROTECTED | Modifiers.PRIVATE)) ++ t = TypeAttributes.NestedFamANDAssem; + else if ((mod_flags & Modifiers.PRIVATE) != 0) + t = TypeAttributes.NestedPrivate; + else if ((mod_flags & (Modifiers.PROTECTED | Modifiers.INTERNAL)) == (Modifiers.PROTECTED | Modifiers.INTERNAL)) +@@ -173,18 +181,27 @@ namespace Mono.CSharp + { + FieldAttributes fa = 0; + +- if ((mod_flags & Modifiers.PUBLIC) != 0) ++ switch (mod_flags & Modifiers.AccessibilityMask) { ++ case Modifiers.PUBLIC: + fa |= FieldAttributes.Public; +- if ((mod_flags & Modifiers.PRIVATE) != 0) ++ break; ++ case Modifiers.PRIVATE: + fa |= FieldAttributes.Private; +- if ((mod_flags & Modifiers.PROTECTED) != 0) { +- if ((mod_flags & Modifiers.INTERNAL) != 0) +- fa |= FieldAttributes.FamORAssem; +- else +- fa |= FieldAttributes.Family; +- } else { +- if ((mod_flags & Modifiers.INTERNAL) != 0) +- fa |= FieldAttributes.Assembly; ++ break; ++ case Modifiers.PROTECTED | Modifiers.INTERNAL: ++ fa |= FieldAttributes.FamORAssem; ++ break; ++ case Modifiers.PROTECTED: ++ fa |= FieldAttributes.Family; ++ break; ++ case Modifiers.INTERNAL: ++ fa |= FieldAttributes.Assembly; ++ break; ++ case Modifiers.PRIVATE | Modifiers.PROTECTED: ++ fa |= FieldAttributes.FamANDAssem; ++ break; ++ default: ++ throw new NotImplementedException (mod_flags.ToString ()); + } + + if ((mod_flags & Modifiers.STATIC) != 0) +@@ -215,6 +232,9 @@ namespace Mono.CSharp + case Modifiers.INTERNAL: + ma |= MethodAttributes.Assembly; + break; ++ case Modifiers.PRIVATE | Modifiers.PROTECTED: ++ ma |= MethodAttributes.FamANDAssem; ++ break; + default: + throw new NotImplementedException (mod_flags.ToString ()); + } +diff --git a/mcs/mcs/module.cs b/mcs/mcs/module.cs +index 2293d825b36..4680433bb01 100644 +--- a/mcs/mcs/module.cs ++++ b/mcs/mcs/module.cs +@@ -480,6 +480,18 @@ namespace Mono.CSharp + attributes.AddAttribute (attr); + } + ++ public void AddAssemblyReferences (List names) ++ { ++ if (names == null) ++ return; ++ ++#if STATIC ++ foreach (var name in names) { ++ Builder.__GetAssemblyToken (name); ++ } ++#endif ++ } ++ + public override void AddTypeContainer (TypeContainer tc) + { + AddTypeContainerMember (tc); +diff --git a/mcs/mcs/parameter.cs b/mcs/mcs/parameter.cs +index cc10eee162b..95851478010 100644 +--- a/mcs/mcs/parameter.cs ++++ b/mcs/mcs/parameter.cs +@@ -221,12 +221,13 @@ namespace Mono.CSharp { + REF = 1 << 1, + OUT = 1 << 2, + This = 1 << 3, +- CallerMemberName = 1 << 4, +- CallerLineNumber = 1 << 5, +- CallerFilePath = 1 << 6, ++ ReadOnly = 1 << 4, ++ CallerMemberName = 1 << 5, ++ CallerLineNumber = 1 << 6, ++ CallerFilePath = 1 << 7, + + RefOutMask = REF | OUT, +- ModifierMask = PARAMS | REF | OUT | This, ++ ModifierMask = PARAMS | REF | OUT | This | ReadOnly, + CallerMask = CallerMemberName | CallerLineNumber | CallerFilePath + } + +@@ -1474,9 +1475,9 @@ namespace Mono.CSharp { + } + } + +- if (!expr.IsNull && TypeSpec.IsReferenceType (parameter_type) && parameter_type.BuiltinType != BuiltinTypeSpec.Type.String) { ++ if (!res.IsNull && TypeSpec.IsReferenceType (parameter_type) && parameter_type.BuiltinType != BuiltinTypeSpec.Type.String) { + rc.Report.Error (1763, Location, +- "Optional parameter `{0}' of type `{1}' can only be initialized with `null'", ++ "Optional parameter `{0}' of type `{1}' can only be initialized with default value", + p.Name, parameter_type.GetSignatureForError ()); + + return; +diff --git a/mcs/mcs/report.cs b/mcs/mcs/report.cs +index cc3d82b26e0..5d64c8e766e 100644 +--- a/mcs/mcs/report.cs ++++ b/mcs/mcs/report.cs +@@ -42,7 +42,7 @@ namespace Mono.CSharp { + public static readonly int[] AllWarnings = new int[] { + 28, 67, 78, + 105, 108, 109, 114, 162, 164, 168, 169, 183, 184, 197, +- 219, 251, 252, 253, 278, 282, ++ 219, 251, 252, 253, 278, 280, 282, + 402, 414, 419, 420, 429, 436, 437, 440, 458, 464, 465, 467, 469, 472, 473, + 612, 618, 626, 628, 642, 649, 652, 657, 658, 659, 660, 661, 665, 672, 675, 693, + 728, +@@ -107,6 +107,15 @@ namespace Mono.CSharp { + case LanguageVersion.V_7: + version = "7.0"; + break; ++ case LanguageVersion.V_7_1: ++ version = "7.1"; ++ break; ++ case LanguageVersion.V_7_2: ++ version = "7.2"; ++ break; ++ case LanguageVersion.V_7_3: ++ version = "7.3"; ++ break; + default: + throw new InternalErrorException ("Invalid feature version", compiler.Settings.Version); + } +diff --git a/mcs/mcs/settings.cs b/mcs/mcs/settings.cs +index 37664187c71..976c9b68128 100644 +--- a/mcs/mcs/settings.cs ++++ b/mcs/mcs/settings.cs +@@ -32,10 +32,11 @@ namespace Mono.CSharp { + V_7 = 7, + V_7_1 = 71, + V_7_2 = 72, ++ V_7_3 = 73, + Experimental = 100, + + Default = V_7, +- Latest = V_7_2 ++ Latest = V_7_3 + } + + public enum RuntimeVersion +@@ -1270,6 +1271,7 @@ namespace Mono.CSharp { + case "/highentropyva+": + case "/highentropyva-": + case "/link": ++ case "/sourcelink": + case "/moduleassemblyname": + case "/nowin32manifest": + case "/pdb": +diff --git a/mcs/mcs/statement.cs b/mcs/mcs/statement.cs +index 9c51128548f..c8b77c1adc1 100644 +--- a/mcs/mcs/statement.cs ++++ b/mcs/mcs/statement.cs +@@ -928,8 +928,7 @@ namespace Mono.CSharp { + public override Reachability MarkReachable (Reachability rc) + { + base.MarkReachable (rc); +- expr.MarkReachable (rc); +- return rc; ++ return expr.MarkReachable (rc); + } + + public override bool Resolve (BlockContext ec) +@@ -2419,6 +2418,7 @@ namespace Mono.CSharp { + IsLocked = 1 << 8, + SymbolFileHidden = 1 << 9, + ByRef = 1 << 10, ++ PointerByRef = 1 << 11, + + ReadonlyMask = 1 << 20 + } +@@ -2609,20 +2609,22 @@ namespace Mono.CSharp { + + if (IsByRef) { + builder = ec.DeclareLocal (ReferenceContainer.MakeType (ec.Module, Type), IsFixed); ++ } else if ((flags & Flags.PointerByRef) != 0) { ++ builder = ec.DeclareLocal (ReferenceContainer.MakeType (ec.Module, ((PointerContainer) Type).Element), IsFixed); + } else { + // + // All fixed variabled are pinned, a slot has to be alocated + // +- builder = ec.DeclareLocal(Type, IsFixed); ++ builder = ec.DeclareLocal (Type, IsFixed); + } + + if ((flags & Flags.SymbolFileHidden) == 0) + ec.DefineLocalVariable (name, builder); + } + +- public static LocalVariable CreateCompilerGenerated (TypeSpec type, Block block, Location loc, bool writeToSymbolFile = false) ++ public static LocalVariable CreateCompilerGenerated (TypeSpec type, Block block, Location loc, bool writeToSymbolFile = false, Flags additionalFlags = 0) + { +- LocalVariable li = new LocalVariable (block, GetCompilerGeneratedName (block), Flags.CompilerGenerated | Flags.Used, loc); ++ LocalVariable li = new LocalVariable (block, GetCompilerGeneratedName (block), Flags.CompilerGenerated | Flags.Used | additionalFlags, loc); + if (!writeToSymbolFile) + li.flags |= Flags.SymbolFileHidden; + +@@ -2725,6 +2727,11 @@ namespace Mono.CSharp { + flags |= Flags.Used; + } + ++ public void SetIsPointerByRef () ++ { ++ flags |= Flags.PointerByRef; ++ } ++ + public void SetHasAddressTaken () + { + flags |= (Flags.AddressTaken | Flags.Used); +@@ -6562,18 +6569,26 @@ namespace Mono.CSharp { + + // TODO: Should use Binary::Add + pinned_string.Emit (ec); +- ec.Emit (OpCodes.Conv_I); ++ ec.Emit (OpCodes.Conv_U); + + var m = ec.Module.PredefinedMembers.RuntimeHelpersOffsetToStringData.Resolve (loc); + if (m == null) + return; + ++ var null_value = ec.DefineLabel (); ++ vi.EmitAssign (ec); ++ vi.Emit (ec); ++ ec.Emit (OpCodes.Brfalse_S, null_value); ++ ++ vi.Emit (ec); + PropertyExpr pe = new PropertyExpr (m, pinned_string.Location); + //pe.InstanceExpression = pinned_string; + pe.Resolve (new ResolveContext (ec.MemberContext)).Emit (ec); + + ec.Emit (OpCodes.Add); + vi.EmitAssign (ec); ++ ++ ec.MarkLabel (null_value); + } + + public override void EmitExit (EmitContext ec) +@@ -6660,31 +6675,94 @@ namespace Mono.CSharp { + return new ExpressionEmitter (res, li); + } + +- bool already_fixed = true; +- + // + // Case 4: & object. + // + Unary u = res as Unary; + if (u != null) { ++ bool already_fixed = true; ++ + if (u.Oper == Unary.Operator.AddressOf) { + IVariableReference vr = u.Expr as IVariableReference; + if (vr == null || !vr.IsFixed) { + already_fixed = false; + } + } +- } else if (initializer is Cast) { ++ ++ if (already_fixed) { ++ bc.Report.Error (213, loc, "You cannot use the fixed statement to take the address of an already fixed expression"); ++ return null; ++ } ++ ++ res = Convert.ImplicitConversionRequired (bc, res, li.Type, loc); ++ return new ExpressionEmitter (res, li); ++ } ++ ++ if (initializer is Cast) { + bc.Report.Error (254, initializer.Location, "The right hand side of a fixed statement assignment may not be a cast expression"); + return null; + } + +- if (already_fixed) { +- bc.Report.Error (213, loc, "You cannot use the fixed statement to take the address of an already fixed expression"); ++ // ++ // Case 5: by-ref GetPinnableReference method on the rhs expression ++ // ++ var method = GetPinnableReference (bc, res); ++ if (method == null) { ++ bc.Report.Error (8385, initializer.Location, "The given expression cannot be used in a fixed statement"); ++ return null; ++ } ++ ++ var compiler = bc.Module.Compiler; ++ if (compiler.Settings.Version < LanguageVersion.V_7_3) { ++ bc.Report.FeatureIsNotAvailable (compiler, initializer.Location, "extensible fixed statement"); ++ } ++ ++ method.InstanceExpression = res; ++ res = new Invocation.Predefined (method, null).ResolveLValue (bc, EmptyExpression.OutAccess); ++ if (res == null) ++ return null; ++ ++ ReferenceContainer rType = (ReferenceContainer)method.BestCandidateReturnType; ++ PointerContainer lType = li.Type as PointerContainer; ++ if (rType.Element != lType?.Element) { ++ // CSC: Should be better error code ++ res.Error_ValueCannotBeConverted (bc, lType, false); ++ return null; + } + +- res = Convert.ImplicitConversionRequired (bc, res, li.Type, loc); ++ li.SetIsPointerByRef (); + return new ExpressionEmitter (res, li); + } ++ ++ MethodGroupExpr GetPinnableReference (BlockContext bc, Expression expr) ++ { ++ TypeSpec type = expr.Type; ++ var mexpr = Expression.MemberLookup (bc, false, type, ++ "GetPinnableReference", 0, Expression.MemberLookupRestrictions.ExactArity, loc); ++ ++ if (mexpr == null) ++ return null; ++ ++ var mg = mexpr as MethodGroupExpr; ++ if (mg == null) ++ return null; ++ ++ mg.InstanceExpression = expr; ++ ++ // TODO: handle extension methods ++ Arguments args = new Arguments (0); ++ mg = mg.OverloadResolve (bc, ref args, null, OverloadResolver.Restrictions.None); ++ ++ if (mg == null || mg.BestCandidate.IsStatic || !mg.BestCandidate.IsPublic || mg.BestCandidateReturnType.Kind != MemberKind.ByRef || !mg.BestCandidate.Parameters.IsEmpty) { ++ if (bc.Module.Compiler.Settings.Version > LanguageVersion.V_7_2) { ++ bc.Report.Warning (280, 2, expr.Location, "`{0}' has the wrong signature to be used in extensible fixed statement", mg.GetSignatureForError ()); ++ } ++ ++ return null; ++ } ++ ++ return mg; ++ } + } + + +diff --git a/mcs/mcs/tuples.cs b/mcs/mcs/tuples.cs +index 901efdc9541..0b56859615f 100644 +--- a/mcs/mcs/tuples.cs ++++ b/mcs/mcs/tuples.cs +@@ -267,6 +267,11 @@ namespace Mono.CSharp + this.Location = expr.Location; + } + ++ public TupleLiteralElement Clone (CloneContext clonectx) ++ { ++ return new TupleLiteralElement (Name, Expr.Clone (clonectx), Location); ++ } ++ + public string Name { get; private set; } + public Expression Expr { get; set; } + public Location Location { get; private set; } +@@ -288,6 +293,16 @@ namespace Mono.CSharp + } + } + ++ protected override void CloneTo (CloneContext clonectx, Expression t) ++ { ++ var clone = new List (elements.Count); ++ foreach (var te in elements) ++ clone.Add (te.Clone (clonectx)); ++ ++ TupleLiteral target = (TupleLiteral)t; ++ target.elements = clone; ++ } ++ + public static bool ContainsNoTypeElement (TypeSpec type) + { + var ta = type.TypeArguments; +@@ -432,6 +447,7 @@ namespace Mono.CSharp + { + Expression source; + List targetExprs; ++ List tempExprs; + List variables; + Expression instance; + +@@ -440,6 +456,8 @@ namespace Mono.CSharp + this.source = source; + this.targetExprs = targetExprs; + this.loc = loc; ++ ++ tempExprs = new List (); + } + + public TupleDeconstruct (List variables, Expression source, Location loc) +@@ -447,6 +465,8 @@ namespace Mono.CSharp + this.source = source; + this.variables = variables; + this.loc = loc; ++ ++ tempExprs = new List (); + } + + public override Expression CreateExpressionTree (ResolveContext ec) +@@ -492,6 +512,15 @@ namespace Mono.CSharp + instance = expr_variable.CreateReferenceExpression (rc, loc); + } + ++ var element_srcs = new List (); ++ var src_names = new List (); ++ for (int i = 0; i < target_count; ++i) { ++ var element_src = tupleLiteral == null ? new MemberAccess (instance, NamedTupleSpec.GetElementPropertyName (i)) : tupleLiteral.Elements [i].Expr; ++ element_srcs.Add (element_src); ++ if (element_src is VariableReference) ++ src_names.Add ((element_src as VariableReference)?.Name); ++ } ++ + for (int i = 0; i < target_count; ++i) { + var tle = src_type.TypeArguments [i]; + +@@ -522,8 +551,17 @@ namespace Mono.CSharp + variable.PrepareAssignmentAnalysis ((BlockContext)rc); + } + +- var element_src = tupleLiteral == null ? new MemberAccess (instance, NamedTupleSpec.GetElementPropertyName (i)) : tupleLiteral.Elements [i].Expr; +- targetExprs [i] = new SimpleAssign (targetExprs [i], element_src).Resolve (rc); ++ var element_target = (targetExprs [i] as SimpleName)?.LookupNameExpression (rc, MemberLookupRestrictions.None); ++ ++ if (element_target != null && src_names.Contains ((element_target as VariableReference)?.Name)) { ++ var tempType = element_target.Resolve (rc).Type; ++ ++ var temp = new LocalTemporary (tempType); ++ tempExprs.Add (new SimpleAssign (temp, element_srcs [i]).Resolve (rc)); ++ targetExprs [i] = new SimpleAssign (targetExprs [i], temp).Resolve (rc); ++ } else { ++ targetExprs [i] = new SimpleAssign (targetExprs [i], element_srcs [i]).Resolve (rc); ++ } + } + + eclass = ExprClass.Value; +@@ -557,9 +595,24 @@ namespace Mono.CSharp + if (instance != null) + ((ExpressionStatement)source).EmitStatement (ec); + +- foreach (ExpressionStatement expr in targetExprs) ++ foreach (ExpressionStatement expr in tempExprs) { ++ var temp = (expr as Assign)?.Target as LocalTemporary; ++ if (temp == null) ++ continue; ++ ++ temp.AddressOf (ec, AddressOp.LoadStore); ++ ec.Emit (OpCodes.Initobj, temp.Type); ++ expr.Emit (ec); ++ } ++ ++ foreach (ExpressionStatement expr in targetExprs) { + expr.Emit (ec); + ++ var temp = (expr as Assign)?.Source as LocalTemporary; ++ if (temp != null) ++ temp.Release (ec); ++ } ++ + var ctor = MemberCache.FindMember (type, MemberFilter.Constructor (null), BindingRestriction.DeclaredOnly | BindingRestriction.InstanceOnly) as MethodSpec; + ec.Emit (OpCodes.Newobj, ctor); + } +@@ -574,9 +627,24 @@ namespace Mono.CSharp + + if (instance != null) + ((ExpressionStatement) source).EmitStatement (ec); +- +- foreach (ExpressionStatement expr in targetExprs) ++ ++ foreach (ExpressionStatement expr in tempExprs) { ++ var temp = (expr as Assign)?.Target as LocalTemporary; ++ if (temp == null) ++ continue; ++ ++ temp.AddressOf (ec, AddressOp.LoadStore); ++ ec.Emit (OpCodes.Initobj, temp.Type); ++ expr.EmitStatement (ec); ++ } ++ ++ foreach (ExpressionStatement expr in targetExprs) { + expr.EmitStatement (ec); ++ ++ var temp = (expr as Assign)?.Source as LocalTemporary; ++ if (temp != null) ++ temp.Release (ec); ++ } + } + + public void Emit (EmitContext ec, bool leave_copy) +@@ -594,6 +662,7 @@ namespace Mono.CSharp + + public override void FlowAnalysis (FlowAnalysisContext fc) + { ++ source.FlowAnalysis (fc); + foreach (var expr in targetExprs) + expr.FlowAnalysis (fc); + } +diff --git a/mcs/nunit24/ClientUtilities/util/AssemblyInfo.cs b/mcs/nunit24/ClientUtilities/util/AssemblyInfo.cs +index 919ca07ace3..6489c1b2a58 100644 +--- a/mcs/nunit24/ClientUtilities/util/AssemblyInfo.cs ++++ b/mcs/nunit24/ClientUtilities/util/AssemblyInfo.cs +@@ -5,7 +5,3 @@ + // **************************************************************** + + using System.Reflection; +- +-[assembly: AssemblyDelaySign(false)] +-[assembly: AssemblyKeyFile("../../nunit.snk")] +-[assembly: AssemblyKeyName("")] +diff --git a/mcs/nunit24/ConsoleRunner/nunit-console/AssemblyInfo.cs b/mcs/nunit24/ConsoleRunner/nunit-console/AssemblyInfo.cs +index 919ca07ace3..6489c1b2a58 100644 +--- a/mcs/nunit24/ConsoleRunner/nunit-console/AssemblyInfo.cs ++++ b/mcs/nunit24/ConsoleRunner/nunit-console/AssemblyInfo.cs +@@ -5,7 +5,3 @@ + // **************************************************************** + + using System.Reflection; +- +-[assembly: AssemblyDelaySign(false)] +-[assembly: AssemblyKeyFile("../../nunit.snk")] +-[assembly: AssemblyKeyName("")] +diff --git a/mcs/nunit24/NUnitCore/core/AssemblyInfo.cs b/mcs/nunit24/NUnitCore/core/AssemblyInfo.cs +index 747032c7e63..2f66d80222c 100644 +--- a/mcs/nunit24/NUnitCore/core/AssemblyInfo.cs ++++ b/mcs/nunit24/NUnitCore/core/AssemblyInfo.cs +@@ -7,7 +7,3 @@ using System; + using System.Reflection; + + [assembly: CLSCompliant(true)] +- +-[assembly: AssemblyDelaySign(false)] +-[assembly: AssemblyKeyFile("../../nunit.snk")] +-[assembly: AssemblyKeyName("")] +diff --git a/mcs/nunit24/NUnitCore/interfaces/AssemblyInfo.cs b/mcs/nunit24/NUnitCore/interfaces/AssemblyInfo.cs +index fa86732b3d3..efeaecf1986 100644 +--- a/mcs/nunit24/NUnitCore/interfaces/AssemblyInfo.cs ++++ b/mcs/nunit24/NUnitCore/interfaces/AssemblyInfo.cs +@@ -8,7 +8,3 @@ using System; + using System.Reflection; + + [assembly: CLSCompliant(true)] +- +-[assembly: AssemblyDelaySign(false)] +-[assembly: AssemblyKeyFile("../../nunit.snk")] +-[assembly: AssemblyKeyName("")] +diff --git a/mcs/nunit24/NUnitExtensions/core/AssemblyInfo.cs b/mcs/nunit24/NUnitExtensions/core/AssemblyInfo.cs +index fa86732b3d3..efeaecf1986 100644 +--- a/mcs/nunit24/NUnitExtensions/core/AssemblyInfo.cs ++++ b/mcs/nunit24/NUnitExtensions/core/AssemblyInfo.cs +@@ -8,7 +8,3 @@ using System; + using System.Reflection; + + [assembly: CLSCompliant(true)] +- +-[assembly: AssemblyDelaySign(false)] +-[assembly: AssemblyKeyFile("../../nunit.snk")] +-[assembly: AssemblyKeyName("")] +diff --git a/mcs/nunit24/NUnitExtensions/framework/AssemblyInfo.cs b/mcs/nunit24/NUnitExtensions/framework/AssemblyInfo.cs +index a9553f691cd..2b4b5bfb340 100644 +--- a/mcs/nunit24/NUnitExtensions/framework/AssemblyInfo.cs ++++ b/mcs/nunit24/NUnitExtensions/framework/AssemblyInfo.cs +@@ -8,7 +8,3 @@ using System; + using System.Reflection; + + [assembly: CLSCompliant(true)] +- +-[assembly: AssemblyDelaySign(false)] +-[assembly: AssemblyKeyFile("../../nunit.snk")] +-[assembly: AssemblyKeyName("")] +diff --git a/mcs/nunit24/NUnitFramework/framework/AssemblyInfo.cs b/mcs/nunit24/NUnitFramework/framework/AssemblyInfo.cs +index fa86732b3d3..efeaecf1986 100644 +--- a/mcs/nunit24/NUnitFramework/framework/AssemblyInfo.cs ++++ b/mcs/nunit24/NUnitFramework/framework/AssemblyInfo.cs +@@ -8,7 +8,3 @@ using System; + using System.Reflection; + + [assembly: CLSCompliant(true)] +- +-[assembly: AssemblyDelaySign(false)] +-[assembly: AssemblyKeyFile("../../nunit.snk")] +-[assembly: AssemblyKeyName("")] +diff --git a/mcs/nunit24/NUnitMocks/mocks/AssemblyInfo.cs b/mcs/nunit24/NUnitMocks/mocks/AssemblyInfo.cs +index 599b04ce453..f87ae602810 100644 +--- a/mcs/nunit24/NUnitMocks/mocks/AssemblyInfo.cs ++++ b/mcs/nunit24/NUnitMocks/mocks/AssemblyInfo.cs +@@ -6,7 +6,3 @@ + + using System; + using System.Reflection; +- +-[assembly: AssemblyDelaySign(false)] +-[assembly: AssemblyKeyFile("../../nunit.snk")] +-[assembly: AssemblyKeyName("")] +diff --git a/mcs/tests/dtest-066.cs b/mcs/tests/dtest-066.cs +new file mode 100644 +index 00000000000..893fb40dffa +--- /dev/null ++++ b/mcs/tests/dtest-066.cs +@@ -0,0 +1,13 @@ ++class C ++{ ++ static void Main() ++ { ++ object o = 1; ++ dynamic d = 1; ++ ++ var a = new[] { ++ new { X = o }, ++ new { X = d } ++ }; ++ } ++} +diff --git a/mcs/tests/gtest-647.cs b/mcs/tests/gtest-647.cs +new file mode 100644 +index 00000000000..4aae641f85f +--- /dev/null ++++ b/mcs/tests/gtest-647.cs +@@ -0,0 +1,34 @@ ++using System; ++ ++public class Program ++{ ++ public static int Main () ++ { ++ int B = default (MyStruct?); ++ if (MyStruct.counter != 1) ++ return 1; ++ ++ switch (default (MyStruct?)) { ++ case 0: ++ break; ++ default: ++ return 2; ++ } ++ ++ if (MyStruct.counter != 2) ++ return 4; ++ ++ return 0; ++ } ++ ++ public struct MyStruct ++ { ++ public static int counter; ++ ++ public static implicit operator int (MyStruct? s) ++ { ++ ++counter; ++ return 0; ++ } ++ } ++} +\ No newline at end of file +diff --git a/mcs/tests/test-928.cs b/mcs/tests/test-928.cs +index 90180137957..290ee4d1fb3 100644 +--- a/mcs/tests/test-928.cs ++++ b/mcs/tests/test-928.cs +@@ -15,6 +15,24 @@ unsafe class Program + } + } + ++ public static bool StringNull (string s) ++ { ++ unsafe { ++ fixed (char *a = s) { ++ return a == null; ++ } ++ } ++ } ++ ++ public static bool ArrayNull (int[] a) ++ { ++ unsafe { ++ fixed (int *e = a) { ++ return e == null; ++ } ++ } ++ } ++ + public static int Main () + { + Test (); +@@ -24,6 +42,12 @@ unsafe class Program + if (lv.IsPinned) + return 1; + ++ if (!StringNull (null)) ++ return 1; ++ ++ if (!ArrayNull (null)) ++ return 2; ++ + return 0; + } + } +diff --git a/mcs/tests/test-948.cs b/mcs/tests/test-948.cs +index 34b3ab9a0c4..563e37dc7d5 100644 +--- a/mcs/tests/test-948.cs ++++ b/mcs/tests/test-948.cs +@@ -1,4 +1,4 @@ +-// Compiler options: -langversion:7.2 -unsafe ++// Compiler options: -langversion:7.2 /unsafe + + using System; + +@@ -7,10 +7,16 @@ class X + public static void Main () + { + Span stackSpan = stackalloc int[100]; ++ ++ bool b = false; ++ ++ var r1 = !b ? stackalloc char[1] : throw null; ++ var r2 = b ? throw null : stackalloc char[1]; ++ var r3 = b ? stackalloc char[1] : stackalloc char[2]; + } + ++ // Disables verifier + unsafe void Foo () + { +- + } +-} +\ No newline at end of file ++} +diff --git a/mcs/tests/test-950.cs b/mcs/tests/test-950.cs +new file mode 100644 +index 00000000000..fef764c85cc +--- /dev/null ++++ b/mcs/tests/test-950.cs +@@ -0,0 +1,12 @@ ++using System; ++ ++public class B ++{ ++ public static void Main () ++ { ++ int a = 1_0_3; ++ double b = 0__0e+1_1; ++ int c = 0b0__1_0; ++ int d = 0x0__F_0; ++ } ++} +\ No newline at end of file +diff --git a/mcs/tests/test-960.cs b/mcs/tests/test-960.cs +new file mode 100644 +index 00000000000..ac2a1ca7435 +--- /dev/null ++++ b/mcs/tests/test-960.cs +@@ -0,0 +1,20 @@ ++// Compiler options: -langversion:7.2 ++ ++public class B ++{ ++ private protected enum E ++ { ++ } ++ ++ public int Index { get; protected private set; } ++ ++ internal string S1 { get; private protected set; } ++ ++ protected string S2 { get; private protected set; } ++ ++ private protected int field; ++ ++ public static void Main () ++ { ++ } ++} +\ No newline at end of file +diff --git a/mcs/tests/test-961.cs b/mcs/tests/test-961.cs +new file mode 100644 +index 00000000000..efe19673875 +--- /dev/null ++++ b/mcs/tests/test-961.cs +@@ -0,0 +1,34 @@ ++// Compiler options: -langversion:latest ++ ++using System; ++ ++public static class B { ++ public static void Main () ++ { ++ int lo = 1; ++ Bar (in lo); ++ } ++ ++ public static void Bar (in int arg) ++ { ++ } ++ ++ static void Foo (this in int src) ++ { ++ D p = (in int a) => {}; ++ } ++ ++} ++ ++delegate void D (in int arg); ++ ++class M ++{ ++ int this[in int a] { set { } } ++ public static implicit operator string (in M m) => null; ++ public M (in int arg) { } ++ ++ public void Test2 (in int arg) ++ { ++ } ++} +\ No newline at end of file +diff --git a/mcs/tests/test-anon-123.cs b/mcs/tests/test-anon-123.cs +index 91c72b45afe..45aab27c0a5 100644 +--- a/mcs/tests/test-anon-123.cs ++++ b/mcs/tests/test-anon-123.cs +@@ -1,3 +1,4 @@ ++// Compiler options: -langversion:latest + // Cloning tests + + using System; +@@ -103,7 +104,11 @@ public class C : B + default: + break; + } +- }); ++ }); ++ ++ Test (() => { ++ char ch = default; ++ }); + + var c = new C (); + c.InstanceTests (); +diff --git a/mcs/tests/test-binaryliteral.cs b/mcs/tests/test-binaryliteral.cs +new file mode 100644 +index 00000000000..3d9cc89bcbd +--- /dev/null ++++ b/mcs/tests/test-binaryliteral.cs +@@ -0,0 +1,57 @@ ++ ++class Demo { ++ static int Main () ++ { ++ if (0b1 != 1) ++ return 1; ++ var hex1 = 0x123ul; ++ var bin1 = 0b100100011ul; ++ var bin11 = 0b100100011lu; ++ if (hex1 != bin1) ++ return 2; ++ if (hex1 != bin11) ++ return 3; ++ if (hex1.GetType () != bin1.GetType ()) ++ return 4; ++ if (hex1.GetType () != bin11.GetType ()) ++ return 5; ++ ++ var hex2 = 0x7FFFFFFF; ++ var bin2 = 0b1111111111111111111111111111111; ++ ++ if (hex2 != bin2) ++ return 6; ++ if (hex2.GetType () != bin2.GetType ()) ++ return 7; ++ ++ var hex3 = 0xFFFFFFFF; ++ var bin3 = 0b11111111111111111111111111111111; ++ if (hex3 != bin3) ++ return 8; ++ if (hex3.GetType () != bin3.GetType ()) ++ return 9; ++ ++ var hex4 = 0xFFFFFFFFu; ++ var bin4 = 0b11111111111111111111111111111111u; ++ if (hex4 != bin4) ++ return 10; ++ if (hex4.GetType () != bin4.GetType ()) ++ return 11; ++ ++ var hex5 = 0x7FFFFFFFFFFFFFFF; ++ var bin5 = 0b111111111111111111111111111111111111111111111111111111111111111; ++ if (hex5 != bin5) ++ return 12; ++ if (hex5.GetType () != bin5.GetType ()) ++ return 13; ++ ++ var hex6 = 0xFFFFFFFFFFFFFFFF; ++ var bin6 = 0b1111111111111111111111111111111111111111111111111111111111111111; ++ if (hex6 != bin6) ++ return 14; ++ if (hex6.GetType () != bin6.GetType ()) ++ return 15; ++ ++ return 0; ++ } ++} +\ No newline at end of file +diff --git a/mcs/tests/test-decl-expr-05.cs b/mcs/tests/test-decl-expr-05.cs +index 730fd4278ca..907cde0b8d7 100644 +--- a/mcs/tests/test-decl-expr-05.cs ++++ b/mcs/tests/test-decl-expr-05.cs +@@ -6,6 +6,11 @@ class X + { + arg = s.ToString (); + } ++ ++ while (true && Call (out string s2)) ++ { ++ arg = s2.ToString (); ++ } + } + + static bool Call (out string s) +diff --git a/mcs/tests/test-decl-expr-06.cs b/mcs/tests/test-decl-expr-06.cs +new file mode 100644 +index 00000000000..9734f2ec2a7 +--- /dev/null ++++ b/mcs/tests/test-decl-expr-06.cs +@@ -0,0 +1,17 @@ ++using System; ++ ++public class C ++{ ++ Func f = () => Foo (out int arg); ++ ++ static bool Foo (out int arg) ++ { ++ arg = 2; ++ return false; ++ } ++ ++ public static void Main () ++ { ++ new C (); ++ } ++} +\ No newline at end of file +diff --git a/mcs/tests/test-default-01.cs b/mcs/tests/test-default-01.cs +index 823e33c451b..28aff830cd9 100644 +--- a/mcs/tests/test-default-01.cs ++++ b/mcs/tests/test-default-01.cs +@@ -41,7 +41,11 @@ static class X + static System.Func M4 () + { + return () => default; +- } ++ } ++ ++ static void Foo (II a = default (II), II b = default, II c = (II) null) ++ { ++ } + } + /* + enum E +@@ -49,4 +53,10 @@ enum E + A = default, + B = default + 1 + } +-*/ +\ No newline at end of file ++*/ ++ ++ ++interface II ++{ ++ ++} +\ No newline at end of file +diff --git a/mcs/tests/test-fixed-01.cs b/mcs/tests/test-fixed-01.cs +new file mode 100644 +index 00000000000..4684b0c5a06 +--- /dev/null ++++ b/mcs/tests/test-fixed-01.cs +@@ -0,0 +1,20 @@ ++// Compiler options: -unsafe -langversion:latest ++ ++unsafe class C ++{ ++ public static void Main () ++ { ++ fixed (int* p = new Fixable ()) { ++ System.Console.WriteLine (*p); ++ System.Console.WriteLine (p [2]); ++ } ++ } ++ ++ struct Fixable ++ { ++ public ref int GetPinnableReference () ++ { ++ return ref (new int[] { 1, 2, 3 })[0]; ++ } ++ } ++} +\ No newline at end of file +diff --git a/mcs/tests/test-pattern-13.cs b/mcs/tests/test-pattern-13.cs +new file mode 100644 +index 00000000000..315c7a9e4be +--- /dev/null ++++ b/mcs/tests/test-pattern-13.cs +@@ -0,0 +1,19 @@ ++using System; ++ ++class C : B ++{ ++ ++} ++ ++public class B ++{ ++ public static void Main () ++ { ++ C c = new C (); ++ ++ if (c is B b) ++ { ++ Console.WriteLine (b == null); ++ } ++ } ++} +\ No newline at end of file +diff --git a/mcs/tests/test-ref-07.cs b/mcs/tests/test-ref-07.cs +index 4aa16579752..f17cfb443b5 100644 +--- a/mcs/tests/test-ref-07.cs ++++ b/mcs/tests/test-ref-07.cs +@@ -1,6 +1,6 @@ + // Compiler options: -langversion:latest + +-public readonly partial ref struct Test ++public readonly ref partial struct Test + { + public static void Main () + { +@@ -14,6 +14,11 @@ public readonly partial ref struct Test + } + } + ++ref partial struct Test ++{ ++ ++} ++ + ref struct Second + { + Test field; +diff --git a/mcs/tests/test-ref-11.cs b/mcs/tests/test-ref-11.cs +new file mode 100644 +index 00000000000..8d392a77d07 +--- /dev/null ++++ b/mcs/tests/test-ref-11.cs +@@ -0,0 +1,13 @@ ++class Program ++{ ++ static int x; ++ static int y; ++ ++ public static int Main () ++ { ++ bool b = false; ++ ref int targetBucket = ref b ? ref x : ref y; ++ ++ return 0; ++ } ++} +\ No newline at end of file +diff --git a/mcs/tests/test-ref-12.cs b/mcs/tests/test-ref-12.cs +new file mode 100644 +index 00000000000..786a4162f4f +--- /dev/null ++++ b/mcs/tests/test-ref-12.cs +@@ -0,0 +1,22 @@ ++// Compiler options: -unsafe ++ ++unsafe class X ++{ ++ public static void Main () ++ { ++ void* pointer = null; ++ Bar (ref Foo (ref *(byte*)pointer)); ++ } ++ ++ static int field; ++ ++ static ref int Foo (ref byte b) ++ { ++ return ref field; ++ } ++ ++ static void Bar (ref int i) ++ { ++ ++ } ++} +\ No newline at end of file +diff --git a/mcs/tests/test-tuple-02.cs b/mcs/tests/test-tuple-02.cs +index c0492759452..ab722642aeb 100644 +--- a/mcs/tests/test-tuple-02.cs ++++ b/mcs/tests/test-tuple-02.cs +@@ -26,6 +26,11 @@ class TupleConversions + (string v1, object v2) b = ("a", "b"); + + (int v1, long v2)? x = null; ++ ++ var array = new [] { ++ (name: "A", offset: 0), ++ (name: "B", size: 4) ++ }; + } + + static void Foo (T arg) +diff --git a/mcs/tests/test-tuple-08.cs b/mcs/tests/test-tuple-08.cs +new file mode 100644 +index 00000000000..fd3375b4df6 +--- /dev/null ++++ b/mcs/tests/test-tuple-08.cs +@@ -0,0 +1,24 @@ ++using System; ++using System.Collections.Generic; ++using System.Threading.Tasks; ++ ++class X ++{ ++ public static void Main () ++ { ++ var x = new X (); ++ x.Test ().Wait (); ++ } ++ ++ int a, b; ++ ++ async Task Test () ++ { ++ (a, b) = await Waiting (); ++ } ++ ++ Task<(int, int)> Waiting () ++ { ++ return Task.FromResult ((1, 3)); ++ } ++} +\ No newline at end of file +diff --git a/mcs/tests/test-tuple-10.cs b/mcs/tests/test-tuple-10.cs +new file mode 100644 +index 00000000000..82f4e01ec1f +--- /dev/null ++++ b/mcs/tests/test-tuple-10.cs +@@ -0,0 +1,9 @@ ++using System.Linq; ++ ++class Program { ++ public static int Main () ++ { ++ var l = (from f in (typeof (Program)).GetFields() select (name: f.Name, offset: 0)).ToList(); ++ return 0; ++ } ++} +\ No newline at end of file +diff --git a/mcs/tests/test-tuple-11.cs b/mcs/tests/test-tuple-11.cs +new file mode 100644 +index 00000000000..b2aeb24026c +--- /dev/null ++++ b/mcs/tests/test-tuple-11.cs +@@ -0,0 +1,20 @@ ++using System; ++ ++class Program ++{ ++ public static int Main () ++ { ++ int x = 1; ++ int y = 2; ++ ++ (x, y) = (y, x); ++ ++ if (x != 2) ++ return 1; ++ ++ if (y != 1) ++ return 2; ++ ++ return 0; ++ } ++} +diff --git a/mcs/tests/ver-il-net_4_x.xml b/mcs/tests/ver-il-net_4_x.xml +index 4dbc7042a8a..2bde8270338 100644 +--- a/mcs/tests/ver-il-net_4_x.xml ++++ b/mcs/tests/ver-il-net_4_x.xml +@@ -3168,6 +3168,33 @@ + + + ++ ++ ++ ++ 41 ++ ++ ++ 7 ++ ++ ++ ++ ++ 7 ++ ++ ++ 39 ++ ++ ++ 63 ++ ++ ++ 67 ++ ++ ++ 14 ++ ++ ++ + + + +@@ -11064,7 +11091,7 @@ + + + +- 72 ++ 60 + + + 62 +@@ -19508,7 +19535,7 @@ + + + +- 267 ++ 255 + + + 7 +@@ -19742,7 +19769,7 @@ + + + +- 116 ++ 121 + + + 7 +@@ -20147,6 +20174,21 @@ + + + ++ ++ ++ ++ 99 ++ ++ ++ 7 ++ ++ ++ ++ ++ 22 ++ ++ ++ + + + +@@ -47609,7 +47651,7 @@ + 7 + + +- 73 ++ 78 + + + +@@ -51468,10 +51510,10 @@ + + + +- 20 ++ 12 + + +- 70 ++ 62 + + + 7 +@@ -52148,7 +52190,7 @@ + 14 + + +- 29 ++ 34 + + + 10 +@@ -52359,10 +52401,10 @@ + + + +- 25 ++ 30 + + +- 105 ++ 141 + + + 29 +@@ -52370,6 +52412,12 @@ + + 7 + ++ ++ 32 ++ ++ ++ 45 ++ + + + +@@ -52814,7 +52862,7 @@ + + + +- 16 ++ 103 + + + 2 +@@ -52834,6 +52882,16 @@ + + + ++ ++ ++ ++ 23 ++ ++ ++ 7 ++ ++ ++ + + + +@@ -52858,6 +52916,80 @@ + + + ++ ++ ++ ++ 14 ++ ++ ++ 8 ++ ++ ++ 14 ++ ++ ++ 8 ++ ++ ++ 14 ++ ++ ++ 8 ++ ++ ++ 2 ++ ++ ++ 7 ++ ++ ++ ++ ++ ++ ++ 10 ++ ++ ++ 32 ++ ++ ++ 2 ++ ++ ++ ++ ++ 0 ++ ++ ++ 0 ++ ++ ++ 0 ++ ++ ++ 0 ++ ++ ++ ++ ++ 2 ++ ++ ++ 9 ++ ++ ++ 2 ++ ++ ++ 8 ++ ++ ++ ++ ++ 2 ++ ++ ++ + + + +@@ -54448,7 +54580,7 @@ + 19 + + +- 247 ++ 281 + + + 7 +@@ -54518,6 +54650,9 @@ + + 35 + ++ ++ 4 ++ + + + +@@ -67020,6 +67155,16 @@ + + + ++ ++ ++ ++ 503 ++ ++ ++ 7 ++ ++ ++ + + + +@@ -68641,7 +68786,7 @@ + + + +- 29 ++ 62 + + + 17 +@@ -68654,6 +68799,22 @@ + + + ++ ++ ++ ++ 13 ++ ++ ++ 8 ++ ++ ++ 15 ++ ++ ++ 42 ++ ++ ++ + + + +@@ -68674,6 +68835,9 @@ + + 9 + ++ ++ 2 ++ + + + +@@ -69158,6 +69322,21 @@ + + + ++ ++ ++ ++ 39 ++ ++ ++ 7 ++ ++ ++ ++ ++ 32 ++ ++ ++ + + + +@@ -72564,7 +72743,7 @@ + + + +- 184 ++ 206 + + + 14 +@@ -72750,6 +72929,21 @@ + + + ++ ++ ++ ++ 7 ++ ++ ++ ++ ++ 35 ++ ++ ++ 7 ++ ++ ++ + + + +@@ -73155,6 +73349,11 @@ + + + ++ ++ ++ 6 ++ ++ + + + 18 +@@ -73243,6 +73442,32 @@ + + + ++ ++ ++ ++ 34 ++ ++ ++ 7 ++ ++ ++ ++ ++ ++ ++ 16 ++ ++ ++ 14 ++ ++ ++ 2 ++ ++ ++ 7 ++ ++ ++ + + + +@@ -73482,7 +73707,7 @@ + 32 + + +- 10 ++ 2 + + + 10 +@@ -73491,16 +73716,16 @@ + 23 + + +- 3 ++ 2 + + +- 10 ++ 2 + + +- 3 ++ 2 + + +- 3 ++ 2 + + + 21 +@@ -73527,7 +73752,7 @@ + 7 + + +- 10 ++ 2 + + + 15 +@@ -73569,7 +73794,7 @@ + + + +- 314 ++ 368 + + + 2 +@@ -73761,6 +73986,29 @@ + + + ++ ++ ++ ++ 65 ++ ++ ++ 21 ++ ++ ++ 7 ++ ++ ++ ++ ++ ++ ++ 70 ++ ++ ++ 7 ++ ++ ++ + + + +@@ -73896,4 +74144,4 @@ + + + +- +\ No newline at end of file ++ +diff --git a/msvc/scripts/System.Web.pre b/msvc/scripts/System.Web.pre +index c071bf45bfd..8f8d262597f 100644 +--- a/msvc/scripts/System.Web.pre ++++ b/msvc/scripts/System.Web.pre +@@ -1 +1 @@ +-@MONO@ $(ProjectDir)\..\lib\net_4_x\culevel.exe -o $(ProjectDir)\System.Web\UplevelHelper.cs $(ProjectDir)\UplevelHelperDefinitions.xml ++@MONO@ $([MSBuild]::GetDirectoryNameOfFileAbove($(TargetDir), culevel.exe))\culevel.exe -o $(ProjectDir)\System.Web\UplevelHelper.cs $(ProjectDir)\UplevelHelperDefinitions.xml +diff --git a/msvc/scripts/csproj.tmpl b/msvc/scripts/csproj.tmpl +index 642c9537321..c18b51d334e 100644 +--- a/msvc/scripts/csproj.tmpl ++++ b/msvc/scripts/csproj.tmpl +@@ -17,6 +17,7 @@ + obj-@OUTPUTSUFFIX@ + false + @NOSTDLIB@ ++ @METADATAVERSION@ + @STARTUPOBJECT@ + @NOCONFIG@ + @ALLOWUNSAFE@ +diff --git a/msvc/scripts/genproj.cs b/msvc/scripts/genproj.cs +index 3987abb212b..1440800b2b3 100644 +--- a/msvc/scripts/genproj.cs ++++ b/msvc/scripts/genproj.cs +@@ -27,27 +27,43 @@ public enum Target { + + class SlnGenerator { + public static readonly string NewLine = "\r\n"; //Environment.NewLine; // "\n"; +- public SlnGenerator (string formatVersion = "2012") ++ public SlnGenerator (string slnVersion) + { +- switch (formatVersion) { +- case "2008": +- this.header = MakeHeader ("10.00", "2008"); +- break; +- default: +- this.header = MakeHeader ("12.00", "2012"); +- break; +- } ++ Console.WriteLine("Requested sln version is {0}", slnVersion); ++ this.header = MakeHeader ("12.00", "15", "15.0.0.0"); + } + +- const string project_start = "Project(\"{{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}}\") = \"{0}\", \"{1}\", \"{2}\""; // Note: No need to double up on {} around {2} ++ const string project_start = "Project(\"{0}\") = \"{1}\", \"{2}\", \"{3}\""; // Note: No need to double up on {} around {2} + const string project_end = "EndProject"; + ++ public List profiles = new List { ++ "net_4_x", ++ "monodroid", ++ "monotouch", ++ "monotouch_tv", ++ "monotouch_watch", ++ "orbis", ++ "unreal", ++ "wasm", ++ "winaot", ++ "xammac", ++ }; ++ ++ const string jay_vcxproj_guid = "{5D485D32-3B9F-4287-AB24-C8DA5B89F537}"; ++ const string jay_sln_guid = "{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}"; ++ + public List libraries = new List (); + string header; + +- string MakeHeader (string formatVersion, string yearTag) ++ string MakeHeader (string formatVersion, string yearTag, string minimumVersion) + { +- return string.Format ("Microsoft Visual Studio Solution File, Format Version {0}" + NewLine + "# Visual Studio {1}", formatVersion, yearTag); ++ return string.Format ( ++ "Microsoft Visual Studio Solution File, Format Version {0}" + NewLine + ++ "# Visual Studio {1}" + NewLine + ++ "MinimumVisualStudioVersion = {2}", ++ formatVersion, yearTag, ++ minimumVersion ++ ); + } + + public void Add (MsbuildGenerator.VsCsproj vsproj) +@@ -59,6 +75,40 @@ class SlnGenerator { + } + } + ++ private void WriteProjectReference (StreamWriter sln, string prefixGuid, string library, string relativePath, string projectGuid, params string[] dependencyGuids) ++ { ++ sln.WriteLine (project_start, prefixGuid, library, relativePath, projectGuid); ++ ++ foreach (var guid in dependencyGuids) { ++ sln.WriteLine (" ProjectSection(ProjectDependencies) = postProject"); ++ sln.WriteLine (" {0} = {0}", guid); ++ sln.WriteLine (" EndProjectSection"); ++ } ++ ++ sln.WriteLine (project_end); ++ } ++ ++ private void WriteProjectReference (StreamWriter sln, string slnFullPath, MsbuildGenerator.VsCsproj proj) ++ { ++ var unixProjFile = proj.csProjFilename.Replace ("\\", "/"); ++ var fullProjPath = Path.GetFullPath (unixProjFile); ++ var relativePath = MsbuildGenerator.GetRelativePath (slnFullPath, fullProjPath); ++ var dependencyGuids = new string[0]; ++ if (proj.preBuildEvent.Contains ("jay")) ++ dependencyGuids = new [] { jay_vcxproj_guid }; ++ WriteProjectReference(sln, "{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}", proj.library, relativePath, proj.projectGuid, dependencyGuids); ++ } ++ ++ private void WriteProjectConfigurationPlatforms (StreamWriter sln, string guid, string platformToBuild) ++ { ++ foreach (var profile in profiles) { ++ sln.WriteLine ("\t\t{0}.Debug|{1}.ActiveCfg = Debug|{2}", guid, profile, platformToBuild); ++ sln.WriteLine ("\t\t{0}.Debug|{1}.Build.0 = Debug|{2}", guid, profile, platformToBuild); ++ sln.WriteLine ("\t\t{0}.Release|{1}.ActiveCfg = Release|{2}", guid, profile, platformToBuild); ++ sln.WriteLine ("\t\t{0}.Release|{1}.Build.0 = Release|{2}", guid, profile, platformToBuild); ++ } ++ } ++ + public void Write (string filename) + { + var fullPath = Path.GetDirectoryName (filename) + "/"; +@@ -66,27 +116,32 @@ class SlnGenerator { + using (var sln = new StreamWriter (filename)) { + sln.WriteLine (); + sln.WriteLine (header); ++ ++ // Manually insert jay's vcxproj. We depend on jay.exe to perform build steps later. ++ WriteProjectReference (sln, jay_sln_guid, "jay", "mcs\\jay\\jay.vcxproj", jay_vcxproj_guid); ++ + foreach (var proj in libraries) { +- var unixProjFile = proj.csProjFilename.Replace ("\\", "/"); +- var fullProjPath = Path.GetFullPath (unixProjFile); +- sln.WriteLine (project_start, proj.library, MsbuildGenerator.GetRelativePath (fullPath, fullProjPath), proj.projectGuid); +- sln.WriteLine (project_end); ++ WriteProjectReference (sln, fullPath, proj); + } ++ + sln.WriteLine ("Global"); + + sln.WriteLine ("\tGlobalSection(SolutionConfigurationPlatforms) = preSolution"); +- sln.WriteLine ("\t\tDebug|Any CPU = Debug|Any CPU"); +- sln.WriteLine ("\t\tRelease|Any CPU = Release|Any CPU"); ++ foreach (var profile in profiles) { ++ sln.WriteLine ("\t\tDebug|{0} = Debug|{0}", profile); ++ sln.WriteLine ("\t\tRelease|{0} = Release|{0}", profile); ++ } + sln.WriteLine ("\tEndGlobalSection"); + + sln.WriteLine ("\tGlobalSection(ProjectConfigurationPlatforms) = postSolution"); ++ ++ // Manually insert jay's configurations because they are different ++ WriteProjectConfigurationPlatforms (sln, jay_vcxproj_guid, "Win32"); ++ + foreach (var proj in libraries) { +- var guid = proj.projectGuid; +- sln.WriteLine ("\t\t{0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU", guid); +- sln.WriteLine ("\t\t{0}.Debug|Any CPU.Build.0 = Debug|Any CPU", guid); +- sln.WriteLine ("\t\t{0}.Release|Any CPU.ActiveCfg = Release|Any CPU", guid); +- sln.WriteLine ("\t\t{0}.Release|Any CPU.Build.0 = Release|Any CPU", guid); ++ WriteProjectConfigurationPlatforms (sln, proj.projectGuid, "Any CPU"); + } ++ + sln.WriteLine ("\tEndGlobalSection"); + + sln.WriteLine ("\tGlobalSection(SolutionProperties) = preSolution"); +@@ -634,6 +689,7 @@ class MsbuildGenerator { + public List projReferences = new List (); + public string library; + public MsbuildGenerator MsbuildGenerator; ++ public string preBuildEvent, postBuildEvent; + } + + public VsCsproj Csproj; +@@ -682,7 +738,7 @@ class MsbuildGenerator { + fx_version = "4.0"; + profile = "net_4_0"; + } else if (response.Contains (profile_4_x)) { +- fx_version = "4.5"; ++ fx_version = "4.6.2"; + profile = "net_4_x"; + } + } +@@ -882,6 +938,26 @@ class MsbuildGenerator { + + bool basic_or_build = (library.Contains ("-basic") || library.Contains ("-build")); + ++ // If an EXE is built with nostdlib, it won't work unless run with mono.exe. This stops our build steps ++ // from working in visual studio (because we already replace @MONO@ with '' on Windows.) ++ ++ if (Target != Target.Library) ++ StdLib = true; ++ ++ // We have our target framework set to 4.5 in many places because broken scripts check for files with 4.5 ++ // in the path, even though we compile code that uses 4.6 features. So we need to manually fix that here. ++ ++ if (fx_version == "4.5") ++ fx_version = "4.6.2"; ++ ++ // The VS2017 signing system fails to sign using this key for some reason, so for now, ++ // just disable code signing for the nunit assemblies. It's not important. ++ // I'd rather fix this by updating the makefiles but it seems to be impossible to disable ++ // code signing in our make system... ++ ++ if (StrongNameKeyFile?.Contains("nunit.snk") ?? false) ++ StrongNameKeyFile = null; ++ + // + // Replace the template values + // +@@ -894,6 +970,9 @@ class MsbuildGenerator { + " {0}", + StrongNameKeyFile, StrongNameDelaySign ? " true" + NewLine : ""); + } ++ ++ string assemblyName = Path.GetFileNameWithoutExtension (output_name); ++ + Csproj.output = template. + Replace ("@OUTPUTTYPE@", Target == Target.Library ? "Library" : "Exe"). + Replace ("@SIGNATURE@", strongNameSection). +@@ -906,7 +985,7 @@ class MsbuildGenerator { + Replace ("@NOCONFIG@", "" + (!load_default_config).ToString () + ""). + Replace ("@ALLOWUNSAFE@", Unsafe ? "true" : ""). + Replace ("@FX_VERSION", fx_version). +- Replace ("@ASSEMBLYNAME@", Path.GetFileNameWithoutExtension (output_name)). ++ Replace ("@ASSEMBLYNAME@", assemblyName). + Replace ("@OUTPUTDIR@", build_output_dir). + Replace ("@OUTPUTSUFFIX@", Path.GetFileName (build_output_dir)). + Replace ("@DEFINECONSTANTS@", defines.ToString ()). +@@ -920,7 +999,11 @@ class MsbuildGenerator { + Replace ("@ADDITIONALLIBPATHS@", String.Empty). + Replace ("@RESOURCES@", resources.ToString ()). + Replace ("@OPTIMIZE@", Optimize ? "true" : "false"). +- Replace ("@SOURCES@", sources.ToString ()); ++ Replace ("@SOURCES@", sources.ToString ()). ++ Replace ("@METADATAVERSION@", assemblyName == "mscorlib" ? "Mono" : ""); ++ ++ Csproj.preBuildEvent = prebuild; ++ Csproj.postBuildEvent = postbuild; + + //Console.WriteLine ("Generated {0}", ofile.Replace ("\\", "/")); + using (var o = new StreamWriter (generatedProjFile)) { +@@ -939,15 +1022,13 @@ class MsbuildGenerator { + if (q != -1) + target = target + Load (library.Substring (0, q) + suffix); + +- if (target.IndexOf ("@MONO@") != -1){ +- target_unix = target.Replace ("@MONO@", "mono").Replace ("@CAT@", "cat"); +- target_windows = target.Replace ("@MONO@", "").Replace ("@CAT@", "type"); +- } else { +- target_unix = target.Replace ("jay.exe", "jay"); +- target_windows = target; +- } ++ target_unix = target.Replace ("@MONO@", "mono").Replace ("@CAT@", "cat"); ++ target_windows = target.Replace ("@MONO@", "").Replace ("@CAT@", "type"); ++ ++ target_unix = target_unix.Replace ("\\jay\\jay.exe", "\\jay\\jay\\jay"); ++ + target_unix = target_unix.Replace ("@COPY@", "cp"); +- target_windows = target_unix.Replace ("@COPY@", "copy"); ++ target_windows = target_windows.Replace ("@COPY@", "copy"); + + target_unix = target_unix.Replace ("\r", ""); + const string condition_unix = "Condition=\" '$(OS)' != 'Windows_NT' \""; -- Efraim Flashner אפרים פלשנר GPG key = A28B F40C 3E55 1372 662D 14F7 41AA E7DC CA3D 8351 Confidentiality cannot be guaranteed on emails sent or received unencrypted From debbugs-submit-bounces@debbugs.gnu.org Mon Dec 16 12:29:07 2024 Received: (at 74609) by debbugs.gnu.org; 16 Dec 2024 17:29:07 +0000 Received: from localhost ([127.0.0.1]:55886 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1tNEu2-0006KT-Uc for submit@debbugs.gnu.org; Mon, 16 Dec 2024 12:29:07 -0500 Received: from mail-wm1-f47.google.com ([209.85.128.47]:44294) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1tNEtr-0006Hw-Ag for 74609@debbugs.gnu.org; Mon, 16 Dec 2024 12:28:55 -0500 Received: by mail-wm1-f47.google.com with SMTP id 5b1f17b1804b1-43618283d48so31648075e9.1 for <74609@debbugs.gnu.org>; Mon, 16 Dec 2024 09:28:55 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1734370070; x=1734974870; darn=debbugs.gnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:sender:from:to:cc:subject:date :message-id:reply-to; bh=9dinxwyM7fxuG73TubZown8CgOMBHHrG798MIcPk5IM=; b=P8e2ld2JW9LR095VhdNoYnqESDHR6BtWb0b5BzVMNY7eOyepMPQVFiVvEu1bae9mTG c7+l1q+JUjTZtwZKcGe4TuqOs+hVkxI2142QT0YfBUVKcmFWrYe7Nq9y3v/kdNX1lgZR 4RyNozfzIomFx1TnKBhferXiGZQwsXcpgRIG/+DXHZYxvHXp4SzDYkItwxk+/HZmpzWO 5D5fcb6xf91zbg30G2xky0D+y3MAN9arJNXgfQVzUuAVO7xS6gOeQnc1MM7AP6WIYb6C nJseZtYbMBfcan46EBbthBSRL4Dq6sFG/pm3SKpJkCEOzc5k1pw6mlRE4ugGSaQ7LaG7 GsJg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1734370070; x=1734974870; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:sender:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=9dinxwyM7fxuG73TubZown8CgOMBHHrG798MIcPk5IM=; b=nluKr+oY8FawNpQJ1QcymgGE2ZMv0rvEd2ZpBk6gF8NQsI5tCb004hkupJ7REJtr7L 7i4WVdgdvcY63fAOQ18SUBXJt1AdHWZkqc9ww23hWrFqCtc6gzrUPq97/sgKqE42RqtI tWeXA6DbvQPNmJz8BiHZHepWkv3jHxXaNLtbg5pJIdVhDTGf3rJCrB4TVbsdiZ+pSGlH JMdXFamzKH+qYSecqaQIF8c4lPYu9odqpKPxU8BbmjE1Xo9aDb16CsIE8S6QgAc4HprS FAYY36dlw38o78HV8fWJB4KQx0aB786ccGA/5Ra/onkXZU0+ISLirgEGLwVGbtVPoDSh oDBw== X-Gm-Message-State: AOJu0YyLdHezBtwELpRYm8R6oQgwnx4wYBQzkmXyejkKPIpqxRku256W dCE82e0hiK3uJjpThv1Hf8cHG6RZvEofkSQIDreOo9JQMHZVjMfTr2Jl1Rr/ X-Gm-Gg: ASbGncsWvxwwSk5hSbAUsZCNzHBElc8ZJZOPJZ8GyuF/qhVK3PfsLZ1HlKxp+29VBx3 EFNTurP/R25NxlVfiaaBj1gA2ZZfgeNw5Tg3zp4TnW+ViRoz99zSTL5TxFskkQK+ipgmMgmO42J vtI5+AjCIf6BxThn1KneupEt/IeFJnarqWleJjqrhdk47Izn8qEY+xhRutg8Sm+bheutmR6ByXu TOkaihSPmJvmbdZKink9qR8jb7yY5qq9RIhOGU99i945eTLr+wAWaSLK/zrcQ== X-Google-Smtp-Source: AGHT+IFq350YnnwiF69sUjO03Z212W+YbGeW0dR0yJOAh2hNMCx+BtCx2m4T1tpigOU9Uje+VLShaA== X-Received: by 2002:a05:600c:198a:b0:434:fe3c:c67c with SMTP id 5b1f17b1804b1-436476cd473mr4628855e9.26.1734370068612; Mon, 16 Dec 2024 09:27:48 -0800 (PST) Received: from localhost ([31.210.180.118]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-4363602dc58sm90019535e9.17.2024.12.16.09.27.46 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 16 Dec 2024 09:27:47 -0800 (PST) From: Efraim Flashner To: 74609@debbugs.gnu.org Subject: [PATCH 18/21] gnu: Add mono-pre-5.10.0. Date: Mon, 16 Dec 2024 19:26:41 +0200 Message-ID: <3cbfc5b25a94ed1a917791c8f79b692b6c78b2b2.1734369314.git.efraim@flashner.co.il> X-Mailer: git-send-email 2.46.0 In-Reply-To: References: MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Debbugs-Envelope-To: 74609 Cc: aaron.covrig.us@ieee.org, ludo@gnu.org, unmush , richard@freakingpenguin.com, unmush@proton.me, janneke@gnu.org 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" From: unmush * gnu/packages/dotnet.scm (mono-pre-5.10.0-external-repo-specs, mono-pre-5.10.0): New variables. * gnu/packages/patches/mono-mcs-patches-from-5.10.0.patch: New patch. * gnu/local.mk (dist_patch_DATA): Register new patch. Change-Id: Ie78dce071032b6743b6e4c2eb58e43bc89e6a1d1 --- gnu/local.mk | 1 + gnu/packages/dotnet.scm | 73 + .../mono-mcs-patches-from-5.10.0.patch | 4218 +++++++++++++++++ 3 files changed, 4292 insertions(+) create mode 100644 gnu/packages/patches/mono-mcs-patches-from-5.10.0.patch diff --git a/gnu/local.mk b/gnu/local.mk index 2b1a6f7c782..c58bfe73cdb 100644 --- a/gnu/local.mk +++ b/gnu/local.mk @@ -1829,6 +1829,7 @@ dist_patch_DATA = \ %D%/packages/patches/mono-4.9.0-fix-runtimemetadataversion.patch \ %D%/packages/patches/mono-5.4.0-patches.patch \ %D%/packages/patches/mono-5.8.0-patches.patch \ + %D%/packages/patches/mono-mcs-patches-from-5.10.0.patch \ %D%/packages/patches/mosaicatcher-unbundle-htslib.patch \ %D%/packages/patches/mrrescue-support-love-11.patch \ %D%/packages/patches/mtools-mformat-uninitialized.patch \ diff --git a/gnu/packages/dotnet.scm b/gnu/packages/dotnet.scm index 82fc2033707..414e955340f 100644 --- a/gnu/packages/dotnet.scm +++ b/gnu/packages/dotnet.scm @@ -1398,3 +1398,76 @@ (define-public mono-5.8.0 " " top "/mcs/class/lib/build/mcs.exe") make-flags))))))))))) + +(define mono-pre-5.10.0-external-repo-specs + '(("api-doc-tools" "d03e819838c6241f92f90655cb448cc47c9e8791" + "1riki79f3ig3cxigviss81dz601hn92a1gifglm0mzjbs76sf3fj" + #:recursive? #t) + ("api-snapshot" "627333cae84f02a36ee9ca605c96dac4557d9f35" + "0p9c6brxiwx38yvaf55jd0l1mxfj3b5ah0xas2hv6frkz80yrqdl") + ("aspnetwebstack" "e77b12e6cc5ed260a98447f609e887337e44e299" + "0rks344qr4fmp3fs1264d2qkmm348m8d1kjd7z4l94iiirwn1fq1") + (("reference-assemblies" "binary-reference-assemblies") + "9c5cc7f051a0bba2e41341a5baebfc4d2c2133ef" + "14bfn1qvni8gyfxjwmvykyjjy3j5ng4fnbljdadi9dm4b9al0wg1") + ("bockbuild" "29022af5d8a94651b2eece93f910559b254ec3f0" + "0lclc1smmrj6xw32dll073mxw4ddiixv9arv02yw3w5h135ay7w4") + ("boringssl" "3e0770e18835714708860ba9fe1af04a932971ff" + "139a0gl91a52k2r6na6ialzkqykaj1rk88zjrkaz3sdxx7nmmg6y") + ("cecil" "bc11f472954694ebd92ae4956f110c1036a7c2e0" + "122nnp5pcnw18pj6amnqkqxlrmapd4vy9xs65hd0bqyqjh56bwnd") + (("cecil" "cecil-legacy") "33d50b874fd527118bc361d83de3d494e8bb55e1" + "1p4hl1796ib26ykyf5snl6cj0lx0v7mjh0xqhjw6qdh753nsjyhb") + ("corefx" "cb1b049c95227465c1791b857cb5ba86385d9f29" + "1pr0qjlgxf63zs1g80gqd6x3qhlgb0wlcc8zm8z8am5aywrvgb53") + ("corert" "48dba73801e804e89f00311da99d873f9c550278" + "1zw47jf4cwqmaixylisxi73xf6cap41bwf9vlmpxanzxaqklzsvk") + ("ikdasm" "465c0815558fd43c0110f8d00fc186ac0044ac6a" + "0xir7pcgq04hb7s8g9wsqdrypb6l29raj3iz5rcqzdm0056k75w2") + (("ikvm-fork" "ikvm") "847e05fced5c9a41ff0f24f1f9d40d5a8a5772c1" + "1fl9bm3lmzf8iqv3x4iqkz9fc54mwdvrxisxg2nvwwcsi4saffpi") + ("linker" "99354bf5c13b8055209cb082cddc50c8047ab088" + "05zlajnqf83xfvn2whh9nql6j85sq12aw26sqmyqz7zcpml171mj") + ("Newtonsoft.Json" "471c3e0803a9f40a0acc8aeceb31de6ff93a52c4" + "0dgngd5hqk6yhlg40kabn6qdnknm32zcx9q6bm2w31csnsk5978s") + (("NuGet.BuildTasks" "nuget-buildtasks") + "b58ba4282377bcefd48abdc2d62ce6330e079abe" + "1say03fnqkjsx97zacany3sa5j4mhfk827hkwp23ib02q18f7lvp") + (("NUnitLite" "nunit-lite") "764656cdafdb3acd25df8cb52a4e0ea14760fccd" + "0pc7lk3p916is8cn4ngaqvjlmlzv3vvjpyksy4pvb3qb5iiaw0vq") + ;; ("roslyn-binaries" "1904c7d0682a878e2d25b4d49f3475d12fbb9cc6" + ;; "") + ("rx" "b29a4b0fda609e0af33ff54ed13652b6ccf0e05e" + "1n1jwhmsbkcv2d806immcpzkb72rz04xy98myw355a8w5ah25yiv") + ;; ("xunit-binaries" "d4433b0972f40cb3efaa3fbba52869bde5df8fa8" + ;; "") + )) + +(define-public mono-pre-5.10.0 + (let ((commit "3e9d7d6e9cf8dc33eb29c497c350a1cd7df3a057") + (version "5.8.0.129") + (revision "0")) + (package + (inherit mono-5.8.0) + (version (git-version version revision commit)) + (name "mono") + (source (origin + (method git-fetch) + (uri + (git-reference + (url "https://gitlab.winehq.org/mono/mono.git") + (commit commit))) + (file-name (git-file-name name version)) + (sha256 + (base32 + "0m8i0zgzh0fgb3ssy95v9czk1c0rl76q0jj7834s5fjnkdj8l4jb")) + (modules '((guix build utils) + (ice-9 string-fun))) + (snippet #~(begin + #$(add-external-repos + mono-pre-5.10.0-external-repo-specs) + #$@prepare-mono-source-0)) + (patches + (search-patches "mono-mcs-patches-from-5.10.0.patch")))) + (native-inputs (modify-inputs (package-native-inputs mono-5.8.0) + (replace "mono" mono-5.8.0)))))) diff --git a/gnu/packages/patches/mono-mcs-patches-from-5.10.0.patch b/gnu/packages/patches/mono-mcs-patches-from-5.10.0.patch new file mode 100644 index 00000000000..41dfed7df7f --- /dev/null +++ b/gnu/packages/patches/mono-mcs-patches-from-5.10.0.patch @@ -0,0 +1,4218 @@ +Includes the following commits: +6f5bfe5cf5a +3812d1c13fc +a80f3d0d87c +b2f051f0b19 +2a202a8478b +4d7d1606d73 +d9970305731 +94e80fc8d7f +0b9280083a9 +07d1e5f36a5 +5f279f14aa2 +889421f3bef +f4c0fd3dc11 +71df5c63b46 +d6e5bf16782 +207f5c2cd6d +c512752a416 +9aca8d5fe4b +diff --git a/mcs/class/Mono.CSharp/Test/Evaluator/TypesTest.cs b/mcs/class/Mono.CSharp/Test/Evaluator/TypesTest.cs +index 97f9e047e6d..f8bf63455de 100644 +--- a/mcs/class/Mono.CSharp/Test/Evaluator/TypesTest.cs ++++ b/mcs/class/Mono.CSharp/Test/Evaluator/TypesTest.cs +@@ -131,5 +131,17 @@ namespace MonoTests.EvaluatorTest + { + Evaluator.Run ("public class TestClass { private TestEnum _te; public string Get() { return _te.ToString(); } } public enum TestEnum { First, Second }"); + } ++ ++ [Test] ++ public void EnumTypeWithOrderDependency () ++ { ++ Evaluator.Run ("public class TestClass { public enum TestEnum { Val1, Val2, Val3 } public TestEnum test; public TestClass() { test = TestEnum.Val3; } }"); ++ object res = Evaluator.Evaluate ("new TestClass()"); ++ ++ var fields = res.GetType ().GetFields (); ++ foreach (var field in fields) { ++ Console.WriteLine ($"{field.Name} = {field.MemberType}"); ++ } ++ } + } + } +\ No newline at end of file +diff --git a/mcs/errors/cs0023-30.cs b/mcs/errors/cs0023-30.cs +new file mode 100644 +index 00000000000..fc19cc24e3e +--- /dev/null ++++ b/mcs/errors/cs0023-30.cs +@@ -0,0 +1,11 @@ ++// CS0023: The `is' operator cannot be applied to operand of type `default' ++// Line: 9 ++// Compiler options: -langversion:latest ++ ++class C ++{ ++ static void Main () ++ { ++ bool d = default is C; ++ } ++} +\ No newline at end of file +diff --git a/mcs/errors/cs0029-39.cs b/mcs/errors/cs0029-39.cs +new file mode 100644 +index 00000000000..0ed200036dc +--- /dev/null ++++ b/mcs/errors/cs0029-39.cs +@@ -0,0 +1,15 @@ ++// CS0029: Cannot implicitly convert type `S' to `object' ++// Line: 13 ++// Compiler options: -langversion:latest ++ ++public ref struct S ++{ ++} ++ ++class Test ++{ ++ public static void Main () ++ { ++ object o = new S (); ++ } ++} +\ No newline at end of file +diff --git a/mcs/errors/cs0029-40.cs b/mcs/errors/cs0029-40.cs +new file mode 100644 +index 00000000000..6d9167c31fa +--- /dev/null ++++ b/mcs/errors/cs0029-40.cs +@@ -0,0 +1,19 @@ ++// CS0029: Cannot implicitly convert type `S' to `System.ValueType' ++// Line: 16 ++// Compiler options: -langversion:latest ++ ++using System; ++ ++public ref struct S ++{ ++} ++ ++class Test ++{ ++ public static void Main () ++ { ++ var s = default (S); ++ ValueType s2 = s; ++ var res = default (S).ToString (); ++ } ++} +\ No newline at end of file +diff --git a/mcs/errors/cs0029-41.cs b/mcs/errors/cs0029-41.cs +new file mode 100644 +index 00000000000..1a65f52f737 +--- /dev/null ++++ b/mcs/errors/cs0029-41.cs +@@ -0,0 +1,12 @@ ++// CS0029: Cannot implicitly convert type `System.TypedReference' to `object' ++// Line: 10 ++ ++using System; ++ ++class Test ++{ ++ public static void Main () ++ { ++ var res = default (TypedReference).ToString (); ++ } ++} +\ No newline at end of file +diff --git a/mcs/errors/cs0029-42.cs b/mcs/errors/cs0029-42.cs +new file mode 100644 +index 00000000000..c7671000c76 +--- /dev/null ++++ b/mcs/errors/cs0029-42.cs +@@ -0,0 +1,10 @@ ++// CS0029: Cannot implicitly convert type `string' to `int' ++// Line: 8 ++ ++class C ++{ ++ void Exists (int _) ++ { ++ _ = "2"; ++ } ++} +\ No newline at end of file +diff --git a/mcs/errors/cs0030-17.cs b/mcs/errors/cs0030-17.cs +new file mode 100644 +index 00000000000..b72b8bf71e5 +--- /dev/null ++++ b/mcs/errors/cs0030-17.cs +@@ -0,0 +1,15 @@ ++// CS0030: Cannot convert type `object' to `S' ++// Line: 13 ++// Compiler options: -langversion:latest ++ ++ref struct S ++{ ++} ++ ++class X ++{ ++ public static void Foo (object o) ++ { ++ var res = (S) o; ++ } ++} +\ No newline at end of file +diff --git a/mcs/errors/cs0103-18.cs b/mcs/errors/cs0103-18.cs +new file mode 100644 +index 00000000000..8cec755d23d +--- /dev/null ++++ b/mcs/errors/cs0103-18.cs +@@ -0,0 +1,10 @@ ++// CS0103: The name `_' does not exist in the current context ++// Line: 8 ++ ++class C ++{ ++ void Test () ++ { ++ _.ToString (); ++ } ++} +\ No newline at end of file +diff --git a/mcs/errors/cs0123-10.cs b/mcs/errors/cs0123-10.cs +new file mode 100644 +index 00000000000..43d5e5d6368 +--- /dev/null ++++ b/mcs/errors/cs0123-10.cs +@@ -0,0 +1,18 @@ ++// CS0123: A method or delegate `object.ToString()' parameters do not match delegate `System.Func()' parameters ++// Line: 16 ++// Compiler options: -langversion:latest ++ ++using System; ++ ++public ref struct S ++{ ++} ++ ++class Test ++{ ++ public static void Main () ++ { ++ var s = new S (); ++ Func f = s.ToString; ++ } ++} +\ No newline at end of file +diff --git a/mcs/errors/cs0123-11.cs b/mcs/errors/cs0123-11.cs +new file mode 100644 +index 00000000000..427b628c159 +--- /dev/null ++++ b/mcs/errors/cs0123-11.cs +@@ -0,0 +1,12 @@ ++// CS0123: A method or delegate `object.ToString()' parameters do not match delegate `System.Func()' parameters ++// Line: 16 ++ ++using System; ++ ++class Test ++{ ++ public static void Main () ++ { ++ Func f = default (TypedReference).ToString; ++ } ++} +\ No newline at end of file +diff --git a/mcs/errors/cs0133-2.cs b/mcs/errors/cs0133-2.cs +index b7a37182d73..48488876f7e 100644 +--- a/mcs/errors/cs0133-2.cs ++++ b/mcs/errors/cs0133-2.cs +@@ -1,4 +1,4 @@ +-// CS0133: The expression being assigned to `c' must be constant ++// CS0133: The expression being assigned to `c' must be a constant or default value + // Line: 10 + + class C +diff --git a/mcs/errors/cs0133-3.cs b/mcs/errors/cs0133-3.cs +index caae3bde68c..2f7dac6880d 100644 +--- a/mcs/errors/cs0133-3.cs ++++ b/mcs/errors/cs0133-3.cs +@@ -1,5 +1,5 @@ +-// CS0133: The expression being assigned to `Foo' must be constant +-// Line: 12 ++// CS0133: The expression being assigned to `Foo' must be a constant or default value ++// Line: 8 + + class T + { +diff --git a/mcs/errors/cs0133-4.cs b/mcs/errors/cs0133-4.cs +index 41fe639b446..54162d544ca 100644 +--- a/mcs/errors/cs0133-4.cs ++++ b/mcs/errors/cs0133-4.cs +@@ -1,4 +1,4 @@ +-// CS0133: The expression being assigned to `S.pathName' must be constant ++// CS0133: The expression being assigned to `S.pathName' must be a constant or default value + // Line: 12 + // Compiler options: -unsafe + +diff --git a/mcs/errors/cs0133-5.cs b/mcs/errors/cs0133-5.cs +index a49f265c690..32e6bfdf416 100644 +--- a/mcs/errors/cs0133-5.cs ++++ b/mcs/errors/cs0133-5.cs +@@ -1,4 +1,4 @@ +-// CS0133: The expression being assigned to `b' must be constant ++// CS0133: The expression being assigned to `b' must be a constant or default value + // Line: 8 + + class X +diff --git a/mcs/errors/cs0133-6.cs b/mcs/errors/cs0133-6.cs +index a523169cdbd..28448dd6de8 100644 +--- a/mcs/errors/cs0133-6.cs ++++ b/mcs/errors/cs0133-6.cs +@@ -1,4 +1,4 @@ +-// CS0133: The expression being assigned to `o' must be constant ++// CS0133: The expression being assigned to `o' must be a constant or default value + // Line: 8 + + class X +diff --git a/mcs/errors/cs0133-7.cs b/mcs/errors/cs0133-7.cs +index 10d82d9fe5e..024bc148229 100644 +--- a/mcs/errors/cs0133-7.cs ++++ b/mcs/errors/cs0133-7.cs +@@ -1,4 +1,4 @@ +-// CS0133: The expression being assigned to `o' must be constant ++// CS0133: The expression being assigned to `o' must be a constant or default value + // Line: 8 + + class X +diff --git a/mcs/errors/cs0133.cs b/mcs/errors/cs0133.cs +index 094194deabb..f0dda9ee3cb 100644 +--- a/mcs/errors/cs0133.cs ++++ b/mcs/errors/cs0133.cs +@@ -1,5 +1,6 @@ +-// CS0133: The expression being assigned to `x' must be constant +-// Line: 6 ++// CS0133: The expression being assigned to `x' must be a constant or default value ++// Line: 7 ++ + class X { + X (int arg) + { +diff --git a/mcs/errors/cs0306-4.cs b/mcs/errors/cs0306-4.cs +new file mode 100644 +index 00000000000..4653512e55b +--- /dev/null ++++ b/mcs/errors/cs0306-4.cs +@@ -0,0 +1,15 @@ ++// CS0306: The type `S' may not be used as a type argument ++// Line: 13 ++// Compiler options: -langversion:latest ++ ++public ref struct S ++{ ++} ++ ++class Test ++{ ++ public static void Foo () ++ { ++ Test local; ++ } ++} +\ No newline at end of file +diff --git a/mcs/errors/cs0611-3.cs b/mcs/errors/cs0611-3.cs +new file mode 100644 +index 00000000000..6eda773dd24 +--- /dev/null ++++ b/mcs/errors/cs0611-3.cs +@@ -0,0 +1,15 @@ ++// CS0611: Array elements cannot be of type `S' ++// Line: 13 ++// Compiler options: -langversion:latest ++ ++public ref struct S ++{ ++} ++ ++class Test ++{ ++ public static void Main () ++ { ++ var x = new S[0]; ++ } ++} +\ No newline at end of file +diff --git a/mcs/errors/cs0815-9.cs b/mcs/errors/cs0815-9.cs +new file mode 100644 +index 00000000000..f54703349be +--- /dev/null ++++ b/mcs/errors/cs0815-9.cs +@@ -0,0 +1,11 @@ ++// CS0815: An implicitly typed local variable declaration cannot be initialized with `default' ++// Line: 9 ++// Compiler options: -langversion:latest ++ ++static class X ++{ ++ public static void Main () ++ { ++ var x = default; ++ } ++} +\ No newline at end of file +diff --git a/mcs/errors/cs1502-11.cs b/mcs/errors/cs1502-11.cs +deleted file mode 100644 +index 82dcb3a2c17..00000000000 +--- a/mcs/errors/cs1502-11.cs ++++ /dev/null +@@ -1,11 +0,0 @@ +-// CS1502: The best overloaded method match for `string.String(char*)' has some invalid arguments +-// Line: 8 +- +-class C +-{ +- static string Prop { +- get { +- return new string ("s"); +- } +- } +-} +diff --git a/mcs/errors/cs1599-2.cs b/mcs/errors/cs1599-2.cs +index 941ff6bb0d6..28aa05b2ed3 100644 +--- a/mcs/errors/cs1599-2.cs ++++ b/mcs/errors/cs1599-2.cs +@@ -1,4 +1,4 @@ +-// CS1599: Method or delegate cannot return type `System.ArgIterator' ++// CS1599: The return type of `System.ArgIterator' is not allowed + // Line: 8 + + using System; +diff --git a/mcs/errors/cs1599-3.cs b/mcs/errors/cs1599-3.cs +index e4869dcaf70..9d378099d82 100644 +--- a/mcs/errors/cs1599-3.cs ++++ b/mcs/errors/cs1599-3.cs +@@ -1,4 +1,4 @@ +-// CS1599: Method or delegate cannot return type `System.ArgIterator' ++// CS1599: The return type of `System.ArgIterator' is not allowed + // Line: 8 + + using System; +diff --git a/mcs/errors/cs1599-4.cs b/mcs/errors/cs1599-4.cs +new file mode 100644 +index 00000000000..358eee59a13 +--- /dev/null ++++ b/mcs/errors/cs1599-4.cs +@@ -0,0 +1,12 @@ ++// CS1599: The return type of `System.TypedReference' is not allowed ++// Line: 8 ++ ++using System; ++ ++public class Program ++{ ++ public static TypedReference operator + (int a, Program b) ++ { ++ throw new ApplicationException (); ++ } ++} +\ No newline at end of file +diff --git a/mcs/errors/cs1599.cs b/mcs/errors/cs1599.cs +index 5cef32d7f97..871d9fb3e7a 100644 +--- a/mcs/errors/cs1599.cs ++++ b/mcs/errors/cs1599.cs +@@ -1,4 +1,4 @@ +-// CS1599: Method or delegate cannot return type `System.TypedReference' ++// CS1599: The return type of `System.TypedReference' is not allowed + // Line: 8 + + using System; +diff --git a/mcs/errors/cs1644-57.cs b/mcs/errors/cs1644-57.cs +new file mode 100644 +index 00000000000..7ee98373080 +--- /dev/null ++++ b/mcs/errors/cs1644-57.cs +@@ -0,0 +1,7 @@ ++// CS1644: Feature `ref structs' cannot be used because it is not part of the C# 7.0 language specification ++// Line: 5 ++// Compiler options: -langversion:7 ++ ++ref struct S ++{ ++} +\ No newline at end of file +diff --git a/mcs/errors/cs1644-58.cs b/mcs/errors/cs1644-58.cs +new file mode 100644 +index 00000000000..e994cf338bd +--- /dev/null ++++ b/mcs/errors/cs1644-58.cs +@@ -0,0 +1,8 @@ ++// CS1644: Feature `default literal' cannot be used because it is not part of the C# 7.0 language specification ++// Line: 7 ++// Compiler options: -langversion:7 ++ ++class X ++{ ++ int i = default; ++} +diff --git a/mcs/errors/cs1644-59.cs b/mcs/errors/cs1644-59.cs +new file mode 100644 +index 00000000000..2f8aed6b958 +--- /dev/null ++++ b/mcs/errors/cs1644-59.cs +@@ -0,0 +1,13 @@ ++// CS1644: Feature `readonly references' cannot be used because it is not part of the C# 7.0 language specification ++// Line: 9 ++// Compiler options: -langversion:7 ++ ++class X ++{ ++ int i; ++ ++ ref readonly int Test () ++ { ++ return ref i; ++ } ++} +diff --git a/mcs/errors/cs1644-60.cs b/mcs/errors/cs1644-60.cs +new file mode 100644 +index 00000000000..ca9547bc561 +--- /dev/null ++++ b/mcs/errors/cs1644-60.cs +@@ -0,0 +1,11 @@ ++// CS1644: Feature `discards' cannot be used because it is not part of the C# 6.0 language specification ++// Line: 9 ++// Compiler options: -langversion:6 ++ ++class X ++{ ++ int Test () ++ { ++ _ = 2; ++ } ++} +diff --git a/mcs/errors/cs1738-2.cs b/mcs/errors/cs1738-2.cs +index f59221f4c7a..44b3f6d1b14 100644 +--- a/mcs/errors/cs1738-2.cs ++++ b/mcs/errors/cs1738-2.cs +@@ -1,4 +1,4 @@ +-// CS1738: Named arguments must appear after the positional arguments ++// CS1738: Named arguments must appear after the positional arguments when using language version older than 7.2 + // Line: 13 + + using System; +diff --git a/mcs/errors/cs1738-3.cs b/mcs/errors/cs1738-3.cs +index 53c4efc3553..901ac0e5d59 100644 +--- a/mcs/errors/cs1738-3.cs ++++ b/mcs/errors/cs1738-3.cs +@@ -1,4 +1,4 @@ +-// CS1738: Named arguments must appear after the positional arguments ++// CS1738: Named arguments must appear after the positional arguments when using language version older than 7.2 + // Line: 14 + + class C +diff --git a/mcs/errors/cs1738.cs b/mcs/errors/cs1738.cs +index dab9a61160b..537bc17b917 100644 +--- a/mcs/errors/cs1738.cs ++++ b/mcs/errors/cs1738.cs +@@ -1,4 +1,4 @@ +-// CS1738: Named arguments must appear after the positional arguments ++// CS1738: Named arguments must appear after the positional arguments when using language version older than 7.2 + // Line: 12 + + class C +diff --git a/mcs/errors/cs1983.cs b/mcs/errors/cs1983.cs +index a2ef6c150d6..76d2db4e677 100644 +--- a/mcs/errors/cs1983.cs ++++ b/mcs/errors/cs1983.cs +@@ -1,4 +1,4 @@ +-// CS1983: The return type of an async method must be void, Task, or Task ++// CS1983: The return type of an async method must be void or task type + // Line: 6 + + class C +diff --git a/mcs/errors/cs4012-3.cs b/mcs/errors/cs4012-3.cs +new file mode 100644 +index 00000000000..fb3d1dc276f +--- /dev/null ++++ b/mcs/errors/cs4012-3.cs +@@ -0,0 +1,19 @@ ++// CS4012: Parameters or local variables of type `S' cannot be declared in async methods or iterators ++// Line: 16 ++// Compiler options: -langversion:latest ++ ++using System; ++using System.Threading.Tasks; ++ ++public ref struct S ++{ ++} ++ ++class C ++{ ++ public async void Test () ++ { ++ var tr = new S (); ++ await Task.Factory.StartNew (() => 6); ++ } ++} +\ No newline at end of file +diff --git a/mcs/errors/cs8175-2.cs b/mcs/errors/cs8175-2.cs +new file mode 100644 +index 00000000000..27c4babf8bf +--- /dev/null ++++ b/mcs/errors/cs8175-2.cs +@@ -0,0 +1,19 @@ ++// CS8175: Cannot use by-reference variable `s' inside an anonymous method, lambda expression, or query expression ++// Line: 17 ++// Compiler options: -langversion:latest ++ ++using System; ++ ++public ref struct S ++{ ++} ++ ++class Test ++{ ++ public static void Main () ++ { ++ var s = new S (); ++ ++ Action a = () => Console.WriteLine (s); ++ } ++} +\ No newline at end of file +diff --git a/mcs/errors/cs8183.cs b/mcs/errors/cs8183.cs +new file mode 100644 +index 00000000000..f9e9004b737 +--- /dev/null ++++ b/mcs/errors/cs8183.cs +@@ -0,0 +1,11 @@ ++// CS8183: Cannot infer the type of implicitly-typed discard ++// Line: 9 ++// Compiler options: -langversion:7.2 ++ ++class X ++{ ++ public static void Main () ++ { ++ _ = default; ++ } ++} +\ No newline at end of file +diff --git a/mcs/errors/cs8184.cs b/mcs/errors/cs8184.cs +new file mode 100644 +index 00000000000..19a4685d7bd +--- /dev/null ++++ b/mcs/errors/cs8184.cs +@@ -0,0 +1,10 @@ ++// CS8184: A deconstruction cannot mix declarations and expressions on the left-hand-side ++// Line: 8 ++ ++class X ++{ ++ public static void Main () ++ { ++ (int a, b) = (1, 2); ++ } ++} +\ No newline at end of file +diff --git a/mcs/errors/cs8207.cs b/mcs/errors/cs8207.cs +new file mode 100644 +index 00000000000..31090948b45 +--- /dev/null ++++ b/mcs/errors/cs8207.cs +@@ -0,0 +1,19 @@ ++// CS8207: An expression tree cannot contain a discard ++// Line: 11 ++ ++using System; ++using System.Linq.Expressions; ++ ++class X ++{ ++ void Test () ++ { ++ Expression> e = () => TryGetValue (out _); ++ } ++ ++ bool TryGetValue (out int arg) ++ { ++ arg = 3; ++ return true; ++ } ++} +diff --git a/mcs/errors/cs8209.cs b/mcs/errors/cs8209.cs +new file mode 100644 +index 00000000000..3a46a206c8e +--- /dev/null ++++ b/mcs/errors/cs8209.cs +@@ -0,0 +1,10 @@ ++// CS8209: Cannot assign void to a discard ++// Line: 8 ++ ++class C ++{ ++ public static void Main () ++ { ++ _ = Main (); ++ } ++} +\ No newline at end of file +diff --git a/mcs/errors/cs8310.cs b/mcs/errors/cs8310.cs +new file mode 100644 +index 00000000000..134624c03b7 +--- /dev/null ++++ b/mcs/errors/cs8310.cs +@@ -0,0 +1,11 @@ ++// CS8310: Operator `+' cannot be applied to operand `default' ++// Line: 9 ++// Compiler options: -langversion:latest ++ ++class C ++{ ++ static void Main () ++ { ++ int h = 1 + default; ++ } ++} +\ No newline at end of file +diff --git a/mcs/errors/cs8311.cs b/mcs/errors/cs8311.cs +new file mode 100644 +index 00000000000..5b35229442d +--- /dev/null ++++ b/mcs/errors/cs8311.cs +@@ -0,0 +1,12 @@ ++// CS8311: Cannot use a default literal as an argument to a dynamically dispatched operation ++// Line: 10 ++// Compiler options: -langversion:latest ++ ++class C ++{ ++ static void Main () ++ { ++ dynamic d = null; ++ d.M2 (default); ++ } ++} +\ No newline at end of file +diff --git a/mcs/errors/cs8312.cs b/mcs/errors/cs8312.cs +new file mode 100644 +index 00000000000..d2ad3f52f02 +--- /dev/null ++++ b/mcs/errors/cs8312.cs +@@ -0,0 +1,12 @@ ++// CS8312: Use of default literal is not valid in this context ++// Line: 9 ++// Compiler options: -langversion:latest ++ ++class C ++{ ++ static void Main () ++ { ++ foreach (var x in default) { ++ } ++ } ++} +\ No newline at end of file +diff --git a/mcs/errors/cs8315.cs b/mcs/errors/cs8315.cs +new file mode 100644 +index 00000000000..c40bf8613b4 +--- /dev/null ++++ b/mcs/errors/cs8315.cs +@@ -0,0 +1,11 @@ ++// CS8315: Operator `==' is ambiguous on operands `default' and `default' ++// Line: 9 ++// Compiler options: -langversion:latest ++ ++class C ++{ ++ static void Main () ++ { ++ bool d = default == default; ++ } ++} +\ No newline at end of file +diff --git a/mcs/errors/cs8323.cs b/mcs/errors/cs8323.cs +new file mode 100644 +index 00000000000..c6c9309ec0d +--- /dev/null ++++ b/mcs/errors/cs8323.cs +@@ -0,0 +1,15 @@ ++// CS8323: Named argument `str' is used out of position but is followed by positional argument ++// Line: 9 ++// Compiler options: -langversion:7.2 ++ ++class X ++{ ++ public static void Main () ++ { ++ Test (str: "", ""); ++ } ++ ++ static void Test (int arg, string str) ++ { ++ } ++} +\ No newline at end of file +diff --git a/mcs/errors/cs8324.cs b/mcs/errors/cs8324.cs +new file mode 100644 +index 00000000000..8a0be1aefb9 +--- /dev/null ++++ b/mcs/errors/cs8324.cs +@@ -0,0 +1,12 @@ ++// CS8324: Named argument specifications must appear after all fixed arguments have been specified in a dynamic invocation ++// Line: 10 ++// Compiler options: -langversion:7.2 ++ ++class C ++{ ++ void M () ++ { ++ dynamic d = new object (); ++ d.M (arg: 1, ""); ++ } ++} +\ No newline at end of file +diff --git a/mcs/errors/cs8343.cs b/mcs/errors/cs8343.cs +new file mode 100644 +index 00000000000..b6aa8e83a09 +--- /dev/null ++++ b/mcs/errors/cs8343.cs +@@ -0,0 +1,12 @@ ++// CS8343: `S': ref structs cannot implement interfaces ++// Line: 7 ++// Compiler options: -langversion:latest ++ ++using System; ++ ++public ref struct S : IDisposable ++{ ++ public void Dispose () ++ { ++ } ++} +diff --git a/mcs/errors/cs8345-2.cs b/mcs/errors/cs8345-2.cs +new file mode 100644 +index 00000000000..3f6137b1b56 +--- /dev/null ++++ b/mcs/errors/cs8345-2.cs +@@ -0,0 +1,12 @@ ++// CS8345: Field or auto-implemented property cannot be of type `S' unless it is an instance member of a ref struct ++// Line: 11 ++// Compiler options: -langversion:latest ++ ++public ref struct S ++{ ++} ++ ++ref struct Test ++{ ++ static S field; ++} +\ No newline at end of file +diff --git a/mcs/errors/cs8345.cs b/mcs/errors/cs8345.cs +new file mode 100644 +index 00000000000..0b5bd05518f +--- /dev/null ++++ b/mcs/errors/cs8345.cs +@@ -0,0 +1,12 @@ ++// CS8345: Field or auto-implemented property cannot be of type `S' unless it is an instance member of a ref struct ++// Line: 11 ++// Compiler options: -langversion:latest ++ ++public ref struct S ++{ ++} ++ ++struct Test ++{ ++ S field; ++} +\ No newline at end of file +diff --git a/mcs/errors/cs8346.cs b/mcs/errors/cs8346.cs +new file mode 100644 +index 00000000000..58e22a2ae7f +--- /dev/null ++++ b/mcs/errors/cs8346.cs +@@ -0,0 +1,13 @@ ++// CS8346: Cannot convert a stackalloc expression of type `byte' to type `System.Span' ++// Line: 11 ++// Compiler options: -langversion:7.2 ++ ++using System; ++ ++class X ++{ ++ public static void Main () ++ { ++ Span stackSpan = stackalloc byte[1]; ++ } ++} +\ No newline at end of file +diff --git a/mcs/mcs/argument.cs b/mcs/mcs/argument.cs +index 8421b4dfbfc..5b1003dbadf 100644 +--- a/mcs/mcs/argument.cs ++++ b/mcs/mcs/argument.cs +@@ -106,11 +106,6 @@ namespace Mono.CSharp + + public virtual Expression CreateExpressionTree (ResolveContext rc) + { +- if (Type.Kind == MemberKind.ByRef) { +- rc.Report.Error (8153, Expr.Location, "An expression tree lambda cannot contain a call to a method, property, or indexer that returns by reference"); +- return null; +- } +- + if (ArgType == AType.Default) + rc.Report.Error (854, Expr.Location, "An expression tree cannot contain an invocation which uses optional parameter"); + +diff --git a/mcs/mcs/assign.cs b/mcs/mcs/assign.cs +index a07c8c0ef39..596623feae4 100644 +--- a/mcs/mcs/assign.cs ++++ b/mcs/mcs/assign.cs +@@ -391,9 +391,21 @@ namespace Mono.CSharp { + return System.Linq.Expressions.Expression.Assign (target_object, source_object); + } + +- protected virtual Expression ResolveConversions (ResolveContext ec) ++ protected virtual Expression ResolveConversions (ResolveContext rc) + { +- source = Convert.ImplicitConversionRequired (ec, source, target.Type, source.Location); ++ var ttype = target.Type; ++ var stackAlloc = source as StackAlloc; ++ if (stackAlloc != null && ttype.Arity == 1 && ttype.GetDefinition () == rc.Module.PredefinedTypes.SpanGeneric.TypeSpec && ++ rc.Module.Compiler.Settings.Version >= LanguageVersion.V_7_2) { ++ ++ var etype = ttype.TypeArguments [0]; ++ var stype = ((PointerContainer)source.Type).Element; ++ if (etype == stype && stackAlloc.ResolveSpanConversion (rc, ttype)) { ++ return this; ++ } ++ } ++ ++ source = Convert.ImplicitConversionRequired (rc, source, ttype, source.Location); + if (source == null) + return null; + +diff --git a/mcs/mcs/async.cs b/mcs/mcs/async.cs +index fd6499346e8..643aed5e568 100644 +--- a/mcs/mcs/async.cs ++++ b/mcs/mcs/async.cs +@@ -628,58 +628,112 @@ namespace Mono.CSharp + + protected override bool DoDefineMembers () + { +- PredefinedType builder_type; +- PredefinedMember bf; +- PredefinedMember bs; +- PredefinedMember sr; +- PredefinedMember se; +- PredefinedMember sm; ++ TypeSpec bt; + bool has_task_return_type = false; +- var pred_members = Module.PredefinedMembers; ++ var istate_machine = Module.PredefinedTypes.IAsyncStateMachine; ++ MethodSpec set_statemachine; + +- if (return_type.Kind == MemberKind.Void) { +- builder_type = Module.PredefinedTypes.AsyncVoidMethodBuilder; +- bf = pred_members.AsyncVoidMethodBuilderCreate; +- bs = pred_members.AsyncVoidMethodBuilderStart; +- sr = pred_members.AsyncVoidMethodBuilderSetResult; +- se = pred_members.AsyncVoidMethodBuilderSetException; +- sm = pred_members.AsyncVoidMethodBuilderSetStateMachine; +- } else if (return_type == Module.PredefinedTypes.Task.TypeSpec) { +- builder_type = Module.PredefinedTypes.AsyncTaskMethodBuilder; +- bf = pred_members.AsyncTaskMethodBuilderCreate; +- bs = pred_members.AsyncTaskMethodBuilderStart; +- sr = pred_members.AsyncTaskMethodBuilderSetResult; +- se = pred_members.AsyncTaskMethodBuilderSetException; +- sm = pred_members.AsyncTaskMethodBuilderSetStateMachine; +- task = pred_members.AsyncTaskMethodBuilderTask.Get (); ++ if (return_type.IsCustomTaskType ()) { ++ // ++ // TODO: Would be nice to cache all this on per-type basis ++ // ++ var btypes = Compiler.BuiltinTypes; ++ bt = return_type.MemberDefinition.GetAsyncMethodBuilder (); ++ TypeSpec bt_inflated; ++ if (return_type.IsGeneric) { ++ bt_inflated = bt.MakeGenericType (Module, bt.MemberDefinition.TypeParameters); ++ } else { ++ bt_inflated = bt; ++ } ++ ++ var set_result_sign = MemberFilter.Method ("SetResult", 0, ParametersCompiled.CreateFullyResolved (bt.MemberDefinition.TypeParameters), btypes.Void); ++ set_result = new PredefinedMember (Module, bt, set_result_sign).Resolve (Location); ++ ++ var set_exception_sign = MemberFilter.Method ("SetException", 0, ParametersCompiled.CreateFullyResolved (btypes.Exception), btypes.Void); ++ set_exception = new PredefinedMember (Module, bt, set_exception_sign).Resolve (Location); ++ ++ var builder_factory_sign = MemberFilter.Method ("Create", 0, ParametersCompiled.EmptyReadOnlyParameters, bt_inflated); ++ builder_factory = new PredefinedMember (Module, bt, builder_factory_sign).Resolve (Location); ++ if (builder_factory?.IsStatic == false) ++ throw new NotImplementedException ("report better error message"); ++ ++ var builder_start_sign = MemberFilter.Method ("Start", 1, new ParametersImported ( ++ new [] { ++ new ParameterData (null, Parameter.Modifier.REF), ++ }, ++ new [] { ++ new TypeParameterSpec (0, null, SpecialConstraint.None, Variance.None, null), ++ }, false), ++ btypes.Void); ++ builder_start = new PredefinedMember (Module, bt, builder_start_sign).Resolve (Location); ++ ++ if (!istate_machine.Define ()) ++ return false; ++ ++ var set_statemachine_sign = MemberFilter.Method ("SetStateMachine", 0, ParametersCompiled.CreateFullyResolved (istate_machine.TypeSpec), btypes.Void); ++ set_statemachine = new PredefinedMember (Module, bt, set_statemachine_sign).Resolve (Location); ; ++ ++ var task_sign = MemberFilter.Property ("Task", return_type.MemberDefinition as TypeSpec); ++ task = new PredefinedMember (Module, bt, task_sign).Resolve (Location); ++ ++ if (set_result == null || set_exception == null || builder_factory == null || builder_start == null || set_statemachine == null || task == null || ++ !Module.PredefinedTypes.INotifyCompletion.Define ()) { ++ return false; ++ } ++ ++ has_task_return_type = return_type.IsGeneric; + } else { +- builder_type = Module.PredefinedTypes.AsyncTaskMethodBuilderGeneric; +- bf = pred_members.AsyncTaskMethodBuilderGenericCreate; +- bs = pred_members.AsyncTaskMethodBuilderGenericStart; +- sr = pred_members.AsyncTaskMethodBuilderGenericSetResult; +- se = pred_members.AsyncTaskMethodBuilderGenericSetException; +- sm = pred_members.AsyncTaskMethodBuilderGenericSetStateMachine; +- task = pred_members.AsyncTaskMethodBuilderGenericTask.Get (); +- has_task_return_type = true; +- } ++ PredefinedType builder_type; ++ PredefinedMember bf; ++ PredefinedMember bs; ++ PredefinedMember sr; ++ PredefinedMember se; ++ PredefinedMember sm; ++ var pred_members = Module.PredefinedMembers; ++ ++ if (return_type.Kind == MemberKind.Void) { ++ builder_type = Module.PredefinedTypes.AsyncVoidMethodBuilder; ++ bf = pred_members.AsyncVoidMethodBuilderCreate; ++ bs = pred_members.AsyncVoidMethodBuilderStart; ++ sr = pred_members.AsyncVoidMethodBuilderSetResult; ++ se = pred_members.AsyncVoidMethodBuilderSetException; ++ sm = pred_members.AsyncVoidMethodBuilderSetStateMachine; ++ } else if (return_type == Module.PredefinedTypes.Task.TypeSpec) { ++ builder_type = Module.PredefinedTypes.AsyncTaskMethodBuilder; ++ bf = pred_members.AsyncTaskMethodBuilderCreate; ++ bs = pred_members.AsyncTaskMethodBuilderStart; ++ sr = pred_members.AsyncTaskMethodBuilderSetResult; ++ se = pred_members.AsyncTaskMethodBuilderSetException; ++ sm = pred_members.AsyncTaskMethodBuilderSetStateMachine; ++ task = pred_members.AsyncTaskMethodBuilderTask.Get (); ++ } else { ++ builder_type = Module.PredefinedTypes.AsyncTaskMethodBuilderGeneric; ++ bf = pred_members.AsyncTaskMethodBuilderGenericCreate; ++ bs = pred_members.AsyncTaskMethodBuilderGenericStart; ++ sr = pred_members.AsyncTaskMethodBuilderGenericSetResult; ++ se = pred_members.AsyncTaskMethodBuilderGenericSetException; ++ sm = pred_members.AsyncTaskMethodBuilderGenericSetStateMachine; ++ task = pred_members.AsyncTaskMethodBuilderGenericTask.Get (); ++ has_task_return_type = true; ++ } + +- set_result = sr.Get (); +- set_exception = se.Get (); +- builder_factory = bf.Get (); +- builder_start = bs.Get (); ++ set_result = sr.Get (); ++ set_exception = se.Get (); ++ builder_factory = bf.Get (); ++ builder_start = bs.Get (); + +- var istate_machine = Module.PredefinedTypes.IAsyncStateMachine; +- var set_statemachine = sm.Get (); +- +- if (!builder_type.Define () || !istate_machine.Define () || set_result == null || builder_factory == null || +- set_exception == null || set_statemachine == null || builder_start == null || +- !Module.PredefinedTypes.INotifyCompletion.Define ()) { +- Report.Error (1993, Location, +- "Cannot find compiler required types for asynchronous functions support. Are you targeting the wrong framework version?"); +- return base.DoDefineMembers (); +- } ++ set_statemachine = sm.Get (); ++ ++ if (!builder_type.Define () || !istate_machine.Define () || set_result == null || builder_factory == null || ++ set_exception == null || set_statemachine == null || builder_start == null || ++ !Module.PredefinedTypes.INotifyCompletion.Define ()) { ++ Report.Error (1993, Location, ++ "Cannot find compiler required types for asynchronous functions support. Are you targeting the wrong framework version?"); ++ return base.DoDefineMembers (); ++ } + +- var bt = builder_type.TypeSpec; ++ bt = builder_type.TypeSpec; ++ } + + // + // Inflate generic Task types +@@ -825,9 +879,26 @@ namespace Mono.CSharp + predefined = unsafeVersion ? pm.AsyncVoidMethodBuilderOnCompletedUnsafe : pm.AsyncVoidMethodBuilderOnCompleted; + } else if (return_type == Module.PredefinedTypes.Task.TypeSpec) { + predefined = unsafeVersion ? pm.AsyncTaskMethodBuilderOnCompletedUnsafe : pm.AsyncTaskMethodBuilderOnCompleted; +- } else { ++ } else if (return_type.IsGenericTask) { + predefined = unsafeVersion ? pm.AsyncTaskMethodBuilderGenericOnCompletedUnsafe : pm.AsyncTaskMethodBuilderGenericOnCompleted; + has_task_return_type = true; ++ } else { ++ var parameters = new ParametersImported ( ++ new [] { ++ new ParameterData (null, Parameter.Modifier.REF), ++ new ParameterData (null, Parameter.Modifier.REF) ++ }, ++ new [] { ++ new TypeParameterSpec (0, null, SpecialConstraint.None, Variance.None, null), ++ new TypeParameterSpec (1, null, SpecialConstraint.None, Variance.None, null) ++ }, false); ++ ++ var on_completed_sign = unsafeVersion ? ++ MemberFilter.Method ("AwaitUnsafeOnCompleted", 2, parameters, Compiler.BuiltinTypes.Void) : ++ MemberFilter.Method ("AwaitOnCompleted", 2, parameters, Compiler.BuiltinTypes.Void); ++ ++ predefined = new PredefinedMember (Module, return_type.MemberDefinition.GetAsyncMethodBuilder (), on_completed_sign); ++ has_task_return_type = return_type.IsGeneric; + } + + var on_completed = predefined.Resolve (Location); +@@ -887,11 +958,14 @@ namespace Mono.CSharp + // stateMachine.$builder.Start<{storey-type}>(ref stateMachine); + // + instance.AddressOf (ec, AddressOp.Store); +- ec.Emit (OpCodes.Ldflda, builder_field); ++ ++ bool struct_builder = builder.MemberType.IsStruct; ++ ++ ec.Emit (struct_builder ? OpCodes.Ldflda : OpCodes.Ldfld, builder_field); + if (Task != null) + ec.Emit (OpCodes.Dup); + instance.AddressOf (ec, AddressOp.Store); +- ec.Emit (OpCodes.Call, builder_start.MakeGenericMethod (Module, instance.Type)); ++ ec.Emit (struct_builder ? OpCodes.Call : OpCodes.Callvirt, builder_start.MakeGenericMethod (Module, instance.Type)); + + // + // Emits return stateMachine.$builder.Task; +@@ -1029,4 +1103,20 @@ namespace Mono.CSharp + EmitAssign (ec, new NullConstant (type, loc), false, false); + } + } ++ ++ static class TypeSpecAsyncExtensions ++ { ++ public static bool IsCustomTaskType (this TypeSpec type) ++ { ++ // LAMESPEC: Arity is not mentioned ++ if (type.Arity > 1) ++ return false; ++ ++ var amb = type.MemberDefinition.GetAsyncMethodBuilder (); ++ if (amb == null) ++ return false; ++ ++ return amb.Arity == type.Arity; ++ } ++ } + } +diff --git a/mcs/mcs/attribute.cs b/mcs/mcs/attribute.cs +index 3ff2d68ccb5..83d403118ad 100644 +--- a/mcs/mcs/attribute.cs ++++ b/mcs/mcs/attribute.cs +@@ -789,6 +789,17 @@ namespace Mono.CSharp { + return ((BoolConstant) pos_args[0].Expr).Value; + } + ++ public TypeSpec GetAsyncMethodBuilderValue () ++ { ++ if (!arg_resolved) ++ Resolve (); ++ ++ if (resolve_error) ++ return null; ++ ++ return GetArgumentType (); ++ } ++ + public TypeSpec GetCoClassAttributeValue () + { + if (!arg_resolved) +@@ -1754,9 +1765,11 @@ namespace Mono.CSharp { + + // New in .NET 4.7 + public readonly PredefinedTupleElementNamesAttribute TupleElementNames; ++ public readonly PredefinedAttribute AsyncMethodBuilder; + + // New in .NET 4.7.1 + public readonly PredefinedAttribute IsReadOnly; ++ public readonly PredefinedAttribute IsByRefLike; + + // + // Optional types which are used as types and for member lookup +@@ -1837,8 +1850,10 @@ namespace Mono.CSharp { + CallerLineNumberAttribute = new PredefinedAttribute (module, "System.Runtime.CompilerServices", "CallerLineNumberAttribute"); + CallerFilePathAttribute = new PredefinedAttribute (module, "System.Runtime.CompilerServices", "CallerFilePathAttribute"); + ++ AsyncMethodBuilder = new PredefinedAttribute (module, "System.Runtime.CompilerServices", "AsyncMethodBuilderAttribute"); + TupleElementNames = new PredefinedTupleElementNamesAttribute (module, "System.Runtime.CompilerServices", "TupleElementNamesAttribute"); + IsReadOnly = new PredefinedAttribute (module, "System.Runtime.CompilerServices", "IsReadOnlyAttribute"); ++ IsByRefLike = new PredefinedAttribute (module, "System.Runtime.CompilerServices", "IsByRefLikeAttribute"); + + // TODO: Should define only attributes which are used for comparison + const System.Reflection.BindingFlags all_fields = System.Reflection.BindingFlags.Public | +diff --git a/mcs/mcs/class.cs b/mcs/mcs/class.cs +index 9afb32c6fe5..6b1adc297a3 100644 +--- a/mcs/mcs/class.cs ++++ b/mcs/mcs/class.cs +@@ -224,6 +224,24 @@ namespace Mono.CSharp + } + } + ++ public void CloseContainerEarlyForReflectionEmit () ++ { ++ if (containers != null) { ++ foreach (TypeContainer tc in containers) { ++ // ++ // SRE requires due to internal checks that any field of enum type is ++ // baked. We close all enum types before closing any other types to ++ // workaround this limitation ++ // ++ if (tc.Kind == MemberKind.Enum) { ++ tc.CloseContainer (); ++ } else { ++ tc.CloseContainerEarlyForReflectionEmit (); ++ } ++ } ++ } ++ } ++ + public virtual void CreateMetadataName (StringBuilder sb) + { + if (Parent != null && Parent.MemberName != null) +@@ -1102,6 +1120,18 @@ namespace Mono.CSharp + member.GenerateDocComment (builder); + } + ++ public TypeSpec GetAsyncMethodBuilder () ++ { ++ if (OptAttributes == null) ++ return null; ++ ++ Attribute a = OptAttributes.Search (Module.PredefinedAttributes.AsyncMethodBuilder); ++ if (a == null) ++ return null; ++ ++ return a.GetAsyncMethodBuilderValue (); ++ } ++ + public TypeSpec GetAttributeCoClass () + { + if (OptAttributes == null) +@@ -2171,7 +2201,7 @@ namespace Mono.CSharp + + public override void Emit () + { +- if (Interfaces != null) { ++ if (Interfaces != null && (ModFlags & Modifiers.PRIVATE) == 0) { + foreach (var iface in Interfaces) { + if (iface.HasNamedTupleElement) { + throw new NotImplementedException ("named tuples for .interfaceimpl"); +@@ -3023,7 +3053,8 @@ namespace Mono.CSharp + Modifiers.INTERNAL | + Modifiers.UNSAFE | + Modifiers.PRIVATE | +- Modifiers.READONLY; ++ Modifiers.READONLY | ++ Modifiers.REF; + + public Struct (TypeContainer parent, MemberName name, Modifiers mod, Attributes attrs) + : base (parent, name, attrs, MemberKind.Struct) +@@ -3139,6 +3170,9 @@ namespace Mono.CSharp + if ((ModFlags & Modifiers.READONLY) != 0) + Module.PredefinedAttributes.IsReadOnly.EmitAttribute (TypeBuilder); + ++ if ((ModFlags & Modifiers.REF) != 0) ++ Module.PredefinedAttributes.IsByRefLike.EmitAttribute (TypeBuilder); ++ + CheckStructCycles (); + + base.Emit (); +@@ -3213,6 +3247,10 @@ namespace Mono.CSharp + protected override TypeSpec[] ResolveBaseTypes (out FullNamedExpression base_class) + { + var ifaces = base.ResolveBaseTypes (out base_class); ++ if (ifaces != null && (ModFlags & Modifiers.REF) != 0) { ++ Report.Error (8343, Location, "`{0}': ref structs cannot implement interfaces", GetSignatureForError ()); ++ } ++ + base_type = Compiler.BuiltinTypes.ValueType; + return ifaces; + } +@@ -3915,7 +3953,7 @@ namespace Mono.CSharp + + protected void IsTypePermitted () + { +- if (MemberType.IsSpecialRuntimeType) { ++ if (MemberType.IsSpecialRuntimeType || MemberType.IsByRefLike) { + if (Parent is StateMachine) { + Report.Error (4012, Location, + "Parameters or local variables of type `{0}' cannot be declared in async methods or iterators", +@@ -3924,6 +3962,19 @@ namespace Mono.CSharp + Report.Error (4013, Location, + "Local variables of type `{0}' cannot be used inside anonymous methods, lambda expressions or query expressions", + MemberType.GetSignatureForError ()); ++ } else if (MemberType.IsByRefLike) { ++ if ((ModFlags & (Modifiers.ABSTRACT | Modifiers.EXTERN)) != 0) ++ return; ++ ++ if ((ModFlags & Modifiers.AutoProperty) == 0 && this is Property) ++ return; ++ ++ if ((ModFlags & Modifiers.STATIC) == 0 && (Parent.ModFlags & Modifiers.REF) != 0) ++ return; ++ ++ Report.Error (8345, Location, ++ "Field or auto-implemented property cannot be of type `{0}' unless it is an instance member of a ref struct", ++ MemberType.GetSignatureForError ()); + } else { + Report.Error (610, Location, + "Field or property cannot be of type `{0}'", MemberType.GetSignatureForError ()); +diff --git a/mcs/mcs/const.cs b/mcs/mcs/const.cs +index 046aec24c1b..658f15ec57a 100644 +--- a/mcs/mcs/const.cs ++++ b/mcs/mcs/const.cs +@@ -206,7 +206,9 @@ namespace Mono.CSharp { + c = field.ConvertInitializer (rc, c); + + if (c == null) { +- if (TypeSpec.IsReferenceType (field.MemberType)) ++ if (expr is DefaultLiteralExpression) { ++ // It's handled bellow in New.Constantify ++ } else if (TypeSpec.IsReferenceType (field.MemberType)) + Error_ConstantCanBeInitializedWithNullOnly (rc, field.MemberType, expr.Location, GetSignatureForError ()); + else if (!(expr is Constant)) + Error_ExpressionMustBeConstant (rc, expr.Location, GetSignatureForError ()); +diff --git a/mcs/mcs/convert.cs b/mcs/mcs/convert.cs +index b11477c1043..ae153fc49e8 100644 +--- a/mcs/mcs/convert.cs ++++ b/mcs/mcs/convert.cs +@@ -392,6 +392,9 @@ namespace Mono.CSharp { + if (!TypeSpec.IsValueType (expr_type)) + return null; + ++ if (expr_type.IsByRefLike) ++ return null; ++ + return expr == null ? EmptyExpression.Null : new BoxedCast (expr, target_type); + + case BuiltinTypeSpec.Type.Enum: +@@ -816,7 +819,7 @@ namespace Mono.CSharp { + if (expr_type == target_type) + return true; + +- if (expr_type == InternalType.ThrowExpr) ++ if (expr_type == InternalType.ThrowExpr || expr_type == InternalType.DefaultType) + return target_type.Kind != MemberKind.InternalCompilerType; + + if (target_type.IsNullableType) +@@ -1478,6 +1481,10 @@ namespace Mono.CSharp { + return target_type.Kind == MemberKind.InternalCompilerType ? null : EmptyCast.Create (expr, target_type); + } + ++ if (expr_type == InternalType.DefaultType) { ++ return new DefaultValueExpression (new TypeExpression (target_type, expr.Location), expr.Location).Resolve (ec); ++ } ++ + if (target_type.IsNullableType) + return ImplicitNulableConversion (ec, expr, target_type); + +@@ -1967,7 +1974,7 @@ namespace Mono.CSharp { + // From object or dynamic to any reference type or value type (unboxing) + // + if (source_type.BuiltinType == BuiltinTypeSpec.Type.Object || source_type.BuiltinType == BuiltinTypeSpec.Type.Dynamic) { +- if (target_type.IsPointer) ++ if (target_type.IsPointer || target_type.IsByRefLike) + return null; + + return +diff --git a/mcs/mcs/cs-parser.jay b/mcs/mcs/cs-parser.jay +index 2868d2fd8f6..4d6fcb44c0d 100644 +--- a/mcs/mcs/cs-parser.jay ++++ b/mcs/mcs/cs-parser.jay +@@ -169,7 +169,8 @@ namespace Mono.CSharp + %token CONST + %token CONTINUE + %token DECIMAL +-%token DEFAULT ++%token DEFAULT ++%token DEFAULT_VALUE + %token DELEGATE + %token DO + %token DOUBLE +@@ -336,6 +337,7 @@ namespace Mono.CSharp + %token DEFAULT_COLON + %token OPEN_BRACKET_EXPR + %token OPEN_PARENS_DECONSTRUCT ++%token REF_STRUCT + + // Make the parser go into eval mode parsing (statements and compilation units). + %token EVAL_STATEMENT_PARSER +@@ -863,7 +865,7 @@ attribute_arguments + } + + Arguments args = ((Arguments) o [0]); +- if (args.Count > 0 && !($3 is NamedArgument) && args [args.Count - 1] is NamedArgument) ++ if (lang_version < LanguageVersion.V_7_2 && args.Count > 0 && !($3 is NamedArgument) && args [args.Count - 1] is NamedArgument) + Error_NamedArgumentExpected ((NamedArgument) args [args.Count - 1]); + + args.Add ((Argument) $3); +@@ -1015,17 +1017,34 @@ primary_constructor_body + } + ; + ++struct_keyword ++ : STRUCT ++ { ++ $$ = null; ++ } ++ | REF_STRUCT ++ { ++ if (lang_version < LanguageVersion.V_7_2) { ++ FeatureIsNotAvailable (GetLocation ($1), "ref structs"); ++ } ++ ++ $$ = this; ++ } ++ ; ++ + struct_declaration + : opt_attributes + opt_modifiers + opt_partial +- STRUCT ++ struct_keyword + type_declaration_name + { + var mods = (Modifiers) $2; + if ((mods & Modifiers.READONLY) != 0 && lang_version < LanguageVersion.V_7_2) { + FeatureIsNotAvailable (GetLocation ($4), "readonly structs"); + } ++ if ($4 != null) ++ mods |= Modifiers.REF; + + lexer.ConstraintsParsing = true; + valid_param_mod = ParameterModifierType.PrimaryConstructor; +@@ -1071,7 +1090,7 @@ struct_declaration + } + $$ = pop_current_class (); + } +- | opt_attributes opt_modifiers opt_partial STRUCT error ++ | opt_attributes opt_modifiers opt_partial struct_keyword error + { + Error_SyntaxError (yyToken); + } +@@ -1384,6 +1403,18 @@ ref_member_type + + $$ = new ReferenceTypeExpr ((FullNamedExpression) $3, GetLocation ($1)); + } ++ | REF READONLY ++ { ++ lexer.parsing_generic_declaration = true; ++ } ++ type ++ { ++ if (lang_version < LanguageVersion.V_7_2) { ++ FeatureIsNotAvailable (GetLocation ($2), "readonly references"); ++ } ++ ++ $$ = new ReferenceTypeExpr ((FullNamedExpression) $4, true, GetLocation ($1)); ++ } + ; + + method_header +@@ -3448,6 +3479,7 @@ primary_expression + | anonymous_method_expression + | undocumented_expressions + | interpolated_string ++ | default_literal + ; + + type_name_expression +@@ -3824,7 +3856,7 @@ argument_list + | argument_list COMMA argument + { + Arguments list = (Arguments) $1; +- if (list [list.Count - 1] is NamedArgument) ++ if (lang_version < LanguageVersion.V_7_2 && list [list.Count - 1] is NamedArgument) + Error_NamedArgumentExpected ((NamedArgument) list [list.Count - 1]); + + list.Add ((Argument) $3); +@@ -3969,7 +4001,7 @@ expression_list_arguments + | expression_list_arguments COMMA expression_list_argument + { + Arguments args = (Arguments) $1; +- if (args [args.Count - 1] is NamedArgument && !($3 is NamedArgument)) ++ if (lang_version < LanguageVersion.V_7_2 && args [args.Count - 1] is NamedArgument && !($3 is NamedArgument)) + Error_NamedArgumentExpected ((NamedArgument) args [args.Count - 1]); + + args.Add ((Argument) $3); +@@ -4386,7 +4418,7 @@ anonymous_method_signature + ; + + default_value_expression +- : DEFAULT open_parens_any type CLOSE_PARENS ++ : DEFAULT_VALUE open_parens_any type CLOSE_PARENS + { + if (lang_version < LanguageVersion.ISO_2) + FeatureIsNotAvailable (GetLocation ($1), "default value expression"); +@@ -4396,6 +4428,16 @@ default_value_expression + } + ; + ++default_literal ++ : DEFAULT ++ { ++ if (lang_version < LanguageVersion.V_7_1) ++ FeatureIsNotAvailable (GetLocation ($1), "default literal"); ++ ++ $$ = new DefaultLiteralExpression (GetLocation ($1)); ++ } ++ ; ++ + unary_expression + : primary_expression + | BANG prefixed_unary_expression +@@ -4750,7 +4792,7 @@ pattern_list + | pattern_list COMMA pattern_argument + { + Arguments args = (Arguments) $1; +- if (args [args.Count - 1] is NamedArgument && !($3 is NamedArgument)) ++ if (lang_version < LanguageVersion.V_7_2 && args [args.Count - 1] is NamedArgument && !($3 is NamedArgument)) + Error_NamedArgumentExpected ((NamedArgument) args [args.Count - 1]); + + args.Add ((Argument) $3); +@@ -5067,17 +5109,25 @@ assignment_expression + $$ = new CompoundAssign (Binary.Operator.ExclusiveOr, (Expression) $1, (Expression) $3); + lbag.AddLocation ($$, GetLocation ($2)); + } +- | OPEN_PARENS_DECONSTRUCT deconstruct_exprs CLOSE_PARENS ASSIGN expression ++ | OPEN_PARENS_DECONSTRUCT deconstruct_assignment CLOSE_PARENS ASSIGN expression + { + if (lang_version < LanguageVersion.V_7) + FeatureIsNotAvailable (GetLocation ($1), "tuples"); + +- var exprs = (List) $2; ++ var exprs = (List) $2; ++ $$ = new TupleDeconstruct (exprs, (Expression) $5, GetLocation ($4)); ++ } ++ | OPEN_PARENS_DECONSTRUCT deconstruct_declaration CLOSE_PARENS ASSIGN expression ++ { ++ if (lang_version < LanguageVersion.V_7) ++ FeatureIsNotAvailable (GetLocation ($1), "tuples"); ++ ++ var exprs = (List) $2; + $$ = new TupleDeconstruct (exprs, (Expression) $5, GetLocation ($4)); + } + ; + +-deconstruct_exprs ++deconstruct_assignment + : expression COMMA expression + { + $$ = new List () { +@@ -5085,7 +5135,7 @@ deconstruct_exprs + (Expression) $3 + }; + } +- | deconstruct_exprs COMMA expression ++ | deconstruct_assignment COMMA expression + { + var src = (List) $1; + src.Add ((Expression) $3); +@@ -5093,6 +5143,43 @@ deconstruct_exprs + } + ; + ++deconstruct_declaration ++ : variable_type identifier_inside_body ++ { ++ var lt = (LocatedToken) $2; ++ var li = new LocalVariable (current_block, lt.Value, lt.Location); ++ current_block.AddLocalName (li); ++ $$ = new List (2) { ++ new BlockVariable ((FullNamedExpression) $1, li) ++ }; ++ } ++ | deconstruct_declaration COMMA variable_type identifier_inside_body ++ { ++ var lt = (LocatedToken) $4; ++ var li = new LocalVariable (current_block, lt.Value, lt.Location); ++ current_block.AddLocalName (li); ++ ++ var src = (List) $1; ++ src.Add (new BlockVariable ((FullNamedExpression) $3, li)); ++ $$ = src; ++ } ++ | deconstruct_declaration COMMA identifier_inside_body ++ { ++ var lt = (LocatedToken) $3; ++ var li = new LocalVariable (current_block, lt.Value, lt.Location); ++ ++ if (lt.Value != "_") { ++ report.Error (8184, lt.Location, "A deconstruction cannot mix declarations and expressions on the left-hand-side"); ++ } else { ++ li.Type = InternalType.Discard; ++ } ++ ++ var src = (List) $1; ++ src.Add (new BlockVariable (new TypeExpression (li.Type, lt.Location), li)); ++ $$ = src; ++ } ++ ; ++ + lambda_parameter_list + : lambda_parameter + { +@@ -6008,6 +6095,28 @@ block_variable_declaration + lbag.AddLocation ($$, GetLocation ($7)); + } + } ++ | REF READONLY variable_type identifier_inside_body ++ { ++ if (lang_version < LanguageVersion.V_7_2) { ++ FeatureIsNotAvailable (GetLocation ($2), "readonly references"); ++ } ++ ++ var lt = (LocatedToken) $4; ++ var li = new LocalVariable (current_block, lt.Value, LocalVariable.Flags.ByRef | LocalVariable.Flags.ReadonlyMask, lt.Location); ++ current_block.AddLocalName (li); ++ current_variable = new BlockVariable ((FullNamedExpression) $3, li); ++ } ++ opt_local_variable_initializer opt_variable_declarators SEMICOLON ++ { ++ $$ = current_variable; ++ current_variable = null; ++ if ($6 != null) { ++ lbag.AddLocation ($$, PopLocation (), GetLocation ($8)); ++ } else { ++ report.Error (8174, GetLocation ($3), "A declaration of a by-reference variable must have an initializer"); ++ lbag.AddLocation ($$, GetLocation ($8)); ++ } ++ } + ; + + opt_local_variable_initializer +@@ -7731,7 +7840,7 @@ void Warning_EmptyStatement (Location loc) + + void Error_NamedArgumentExpected (NamedArgument a) + { +- report.Error (1738, a.Location, "Named arguments must appear after the positional arguments"); ++ report.Error (1738, a.Location, "Named arguments must appear after the positional arguments when using language version older than 7.2"); + } + + void Error_MissingInitializer (Location loc) +@@ -8255,6 +8364,7 @@ static string GetTokenName (int token) + case Token.CONTINUE: + return "continue"; + case Token.DEFAULT: ++ case Token.DEFAULT_VALUE: + return "default"; + case Token.DELEGATE: + return "delegate"; +@@ -8334,6 +8444,7 @@ static string GetTokenName (int token) + case Token.STATIC: + return "static"; + case Token.STRUCT: ++ case Token.REF_STRUCT: + return "struct"; + case Token.SWITCH: + return "switch"; +diff --git a/mcs/mcs/cs-tokenizer.cs b/mcs/mcs/cs-tokenizer.cs +index d6d00d31400..37edb5c1224 100644 +--- a/mcs/mcs/cs-tokenizer.cs ++++ b/mcs/mcs/cs-tokenizer.cs +@@ -716,9 +716,18 @@ namespace Mono.CSharp + res = Token.EXTERN_ALIAS; + break; + case Token.DEFAULT: +- if (peek_token () == Token.COLON) { +- token (); +- res = Token.DEFAULT_COLON; ++ switch (peek_token ()) { ++ case Token.COLON: ++ // Special case: foo == null ? default : 1; ++ if (current_token != Token.INTERR) { ++ token (); ++ res = Token.DEFAULT_COLON; ++ } ++ break; ++ case Token.OPEN_PARENS: ++ case Token.OPEN_PARENS_CAST: ++ res = Token.DEFAULT_VALUE; ++ break; + } + break; + case Token.WHEN: +@@ -812,10 +821,12 @@ namespace Mono.CSharp + PushPosition (); + + next_token = token (); +- bool ok = (next_token == Token.CLASS) || +- (next_token == Token.STRUCT) || +- (next_token == Token.INTERFACE) || +- (next_token == Token.VOID); ++ bool ok = ++ next_token == Token.CLASS || ++ next_token == Token.STRUCT || ++ next_token == Token.INTERFACE || ++ next_token == Token.VOID || ++ next_token == Token.REF_STRUCT; + + PopPosition (); + +@@ -903,6 +914,12 @@ namespace Mono.CSharp + break; + } + ++ break; ++ case Token.REF: ++ if (peek_token () == Token.STRUCT) { ++ token (); ++ res = Token.REF_STRUCT; ++ } + break; + } + +@@ -1094,6 +1111,7 @@ namespace Mono.CSharp + case Token.UNCHECKED: + case Token.UNSAFE: + case Token.DEFAULT: ++ case Token.DEFAULT_VALUE: + case Token.AWAIT: + + // +@@ -1273,14 +1291,21 @@ namespace Mono.CSharp + + return false; + case Token.OPEN_PARENS: +- if (!parsing_generic_declaration) +- return false; +- ++ int parens_count = 1; + while (true) { + switch (token ()) { + case Token.COMMA: + // tuple declaration after < +- return true; ++ if (parens_count == 1) ++ return true; ++ continue; ++ case Token.OPEN_PARENS: ++ ++parens_count; ++ continue; ++ case Token.CLOSE_PARENS: ++ if (--parens_count <= 0) ++ return false; ++ continue; + case Token.OP_GENERICS_GT: + case Token.EOF: + return false; +@@ -1380,6 +1405,7 @@ namespace Mono.CSharp + case Token.NEW: + case Token.INTERPOLATED_STRING: + case Token.THROW: ++ case Token.DEFAULT_COLON: + next_token = Token.INTERR; + break; + +@@ -3502,6 +3528,7 @@ namespace Mono.CSharp + case Token.SWITCH: + case Token.USING: + case Token.DEFAULT: ++ case Token.DEFAULT_VALUE: + case Token.DELEGATE: + case Token.OP_GENERICS_GT: + case Token.REFVALUE: +@@ -3963,26 +3990,29 @@ namespace Mono.CSharp + { + int d; + +- // Save current position and parse next token. +- PushPosition (); +- int generic_dimension = 0; +- if (parse_less_than (ref generic_dimension)) { +- if (parsing_generic_declaration && (parsing_generic_declaration_doc || token () != Token.DOT)) { +- d = Token.OP_GENERICS_LT_DECL; +- } else { +- if (generic_dimension > 0) { +- val = generic_dimension; +- DiscardPosition (); +- return Token.GENERIC_DIMENSION; +- } ++ if (current_token != Token.OPERATOR) { ++ // Save current position and parse next token. ++ PushPosition (); ++ int generic_dimension = 0; ++ if (parse_less_than (ref generic_dimension)) { ++ if (parsing_generic_declaration && (parsing_generic_declaration_doc || token () != Token.DOT)) { ++ d = Token.OP_GENERICS_LT_DECL; ++ } else { ++ if (generic_dimension > 0) { ++ val = generic_dimension; ++ DiscardPosition (); ++ return Token.GENERIC_DIMENSION; ++ } + +- d = Token.OP_GENERICS_LT; ++ d = Token.OP_GENERICS_LT; ++ } ++ PopPosition (); ++ return d; + } ++ + PopPosition (); +- return d; + } + +- PopPosition (); + parsing_generic_less_than = 0; + + d = peek_char (); +diff --git a/mcs/mcs/delegate.cs b/mcs/mcs/delegate.cs +index 80eb7e265f1..52cee8f3455 100644 +--- a/mcs/mcs/delegate.cs ++++ b/mcs/mcs/delegate.cs +@@ -188,8 +188,8 @@ namespace Mono.CSharp { + + CheckProtectedModifier (); + +- if (Compiler.Settings.StdLib && ret_type.IsSpecialRuntimeType) { +- Method.Error1599 (Location, ret_type, Report); ++ if (ret_type.IsSpecialRuntimeType && Compiler.Settings.StdLib) { ++ Method.Error_ReturnTypeCantBeRefAny (Location, ret_type, Report); + return false; + } + +@@ -338,6 +338,8 @@ namespace Mono.CSharp { + Module.PredefinedAttributes.Dynamic.EmitAttribute (CreateReturnBuilder ().Builder); + } else if (rtype.HasDynamicElement) { + Module.PredefinedAttributes.Dynamic.EmitAttribute (CreateReturnBuilder ().Builder, rtype, Location); ++ } else if (rtype is ReadOnlyReferenceContainer) { ++ Module.PredefinedAttributes.IsReadOnly.EmitAttribute (CreateReturnBuilder ().Builder); + } + + if (rtype.HasNamedTupleElement) { +@@ -603,8 +605,14 @@ namespace Mono.CSharp { + } + + var expr = method_group.InstanceExpression; +- if (expr != null && (expr.Type.IsGenericParameter || !TypeSpec.IsReferenceType (expr.Type))) ++ if (expr != null && (expr.Type.IsGenericParameter || !TypeSpec.IsReferenceType (expr.Type))) { ++ if (expr.Type.IsByRefLike || expr.Type.IsSpecialRuntimeType) { ++ // CSC: Should be better error code ++ Error_ConversionFailed (ec, delegate_method, null); ++ } ++ + method_group.InstanceExpression = new BoxedCast (expr, ec.BuiltinTypes.Object); ++ } + + eclass = ExprClass.Value; + return this; +diff --git a/mcs/mcs/dynamic.cs b/mcs/mcs/dynamic.cs +index fd4662b2fed..f8314b2f3cd 100644 +--- a/mcs/mcs/dynamic.cs ++++ b/mcs/mcs/dynamic.cs +@@ -279,11 +279,19 @@ namespace Mono.CSharp + + protected bool DoResolveCore (ResolveContext rc) + { ++ int i = 0; + foreach (var arg in arguments) { + if (arg.Type == InternalType.VarOutType) { + // Should be special error message about dynamic dispatch + rc.Report.Error (8197, arg.Expr.Location, "Cannot infer the type of implicitly-typed out variable `{0}'", ((DeclarationExpression) arg.Expr).Variable.Name); ++ } else if (arg.Type == InternalType.DefaultType) { ++ rc.Report.Error (8311, arg.Expr.Location, "Cannot use a default literal as an argument to a dynamically dispatched operation"); + } ++ ++ // Forced limitation because Microsoft.CSharp needs to catch up ++ if (i > 0 && arguments [i - 1] is NamedArgument && !(arguments [i] is NamedArgument)) ++ rc.Report.Error (8324, loc, "Named argument specifications must appear after all fixed arguments have been specified in a dynamic invocation"); ++ ++i; + } + + if (rc.CurrentTypeParameters != null && rc.CurrentTypeParameters[0].IsMethodTypeParameter) +diff --git a/mcs/mcs/ecore.cs b/mcs/mcs/ecore.cs +index 34ff9a30dab..20ee9e73b19 100644 +--- a/mcs/mcs/ecore.cs ++++ b/mcs/mcs/ecore.cs +@@ -255,7 +255,7 @@ namespace Mono.CSharp { + + public void Error_ExpressionMustBeConstant (ResolveContext rc, Location loc, string e_name) + { +- rc.Report.Error (133, loc, "The expression being assigned to `{0}' must be constant", e_name); ++ rc.Report.Error (133, loc, "The expression being assigned to `{0}' must be a constant or default value", e_name); + } + + public void Error_ConstantCanBeInitializedWithNullOnly (ResolveContext rc, TypeSpec type, Location loc, string name) +@@ -2957,6 +2957,13 @@ namespace Mono.CSharp { + if ((restrictions & MemberLookupRestrictions.NameOfExcluded) == 0 && Name == "nameof") + return new NameOf (this); + ++ if ((restrictions & MemberLookupRestrictions.ReadAccess) == 0 && Name == "_") { ++ if (rc.Module.Compiler.Settings.Version < LanguageVersion.V_7) ++ rc.Report.FeatureIsNotAvailable (rc.Module.Compiler, loc, "discards"); ++ ++ return new Discard (loc).Resolve (rc); ++ } ++ + if (errorMode) { + if (variable_found) { + rc.Report.Error (841, loc, "A local variable `{0}' cannot be used before it is declared", Name); +@@ -4029,6 +4036,13 @@ namespace Mono.CSharp { + return Methods.First ().GetSignatureForError (); + } + ++ static MethodSpec CandidateDevirtualization (TypeSpec type, MethodSpec method) ++ { ++ // Assumes no generics get involved ++ var filter = new MemberFilter (method.Name, method.Arity, MemberKind.Method, method.Parameters, null); ++ return MemberCache.FindMember (type, filter, BindingRestriction.InstanceOnly | BindingRestriction.OverrideOnly | BindingRestriction.DeclaredOnly) as MethodSpec; ++ } ++ + public override Expression CreateExpressionTree (ResolveContext ec) + { + if (best_candidate == null) { +@@ -4177,6 +4191,22 @@ namespace Mono.CSharp { + } + + InstanceExpression.Resolve (ec, ResolveFlags.VariableOrValue | ResolveFlags.MethodGroup | ResolveFlags.Type); ++ ++ var expr_type = InstanceExpression.Type; ++ if ((expr_type.IsByRefLike || expr_type.IsSpecialRuntimeType) && best_candidate.DeclaringType != expr_type) { ++ MethodSpec devirt = null; ++ if ((best_candidate.Modifiers & (Modifiers.VIRTUAL | Modifiers.ABSTRACT | Modifiers.OVERRIDE)) != 0) { ++ devirt = CandidateDevirtualization (expr_type, best_candidate); ++ } ++ ++ if (devirt == null) { ++ // CSC: Should be better error message ++ ec.Report.Error (29, InstanceExpression.Location, "Cannot implicitly convert type `{0}' to `{1}'", ++ InstanceExpression.Type.GetSignatureForError (), best_candidate.DeclaringType.GetSignatureForError ()); ++ } else { ++ best_candidate = devirt; ++ } ++ } + } + } + +@@ -5419,7 +5449,7 @@ namespace Mono.CSharp { + } + + if (arg_type != parameter) { +- if (arg_type == InternalType.VarOutType) ++ if (arg_type == InternalType.VarOutType || arg_type == InternalType.Discard) + return 0; + + var ref_arg_type = arg_type as ReferenceContainer; +@@ -6028,6 +6058,11 @@ namespace Mono.CSharp { + continue; + } + ++ if (arg_type == InternalType.Discard) { ++ a.Expr.Type = pt; ++ continue; ++ } ++ + var ref_arg_type = arg_type as ReferenceContainer; + if (ref_arg_type != null) { + if (ref_arg_type.Element != pt) +@@ -6061,9 +6096,15 @@ namespace Mono.CSharp { + else + ec.Report.SymbolRelatedToPreviousError (member); + +- ec.Report.Error (1744, na.Location, +- "Named argument `{0}' cannot be used for a parameter which has positional argument specified", +- na.Name); ++ if (name_index > a_idx) { ++ ec.Report.Error (8323, na.Location, ++ "Named argument `{0}' is used out of position but is followed by positional argument", ++ na.Name); ++ } else { ++ ec.Report.Error (1744, na.Location, ++ "Named argument `{0}' cannot be used for a parameter which has positional argument specified", ++ na.Name); ++ } + } + } + +@@ -7350,6 +7391,9 @@ namespace Mono.CSharp { + if (!ResolveGetter (ec)) + return null; + ++ if (type.Kind == MemberKind.ByRef) ++ return ByRefDereference.Create (this).Resolve (ec); ++ + return this; + } + +@@ -7359,12 +7403,11 @@ namespace Mono.CSharp { + Error_NullPropagatingLValue (rc); + + if (right_side == EmptyExpression.OutAccess) { +- if (best_candidate?.MemberType.Kind == MemberKind.ByRef) { +- if (Arguments?.ContainsEmitWithAwait () == true) { +- rc.Report.Error (8178, loc, "`await' cannot be used in an expression containing a call to `{0}' because it returns by reference", +- GetSignatureForError ()); +- } ++ if (OverloadResolve (rc, null) == null) ++ return null; + ++ if (best_candidate?.MemberType.Kind == MemberKind.ByRef) { ++ getter = CandidateToBaseOverride (rc, best_candidate.Get); + return this; + } + +@@ -7396,7 +7439,7 @@ namespace Mono.CSharp { + + if (best_candidate.MemberType.Kind == MemberKind.ByRef) { + getter = CandidateToBaseOverride (rc, best_candidate.Get); +- return ByRefDereference.Create(this).Resolve(rc); ++ return ByRefDereference.Create (this).Resolve (rc); + } + + rc.Report.Error (200, loc, "Property or indexer `{0}' cannot be assigned to (it is read-only)", +diff --git a/mcs/mcs/eval.cs b/mcs/mcs/eval.cs +index 60e0c6d64a0..075697bb1df 100644 +--- a/mcs/mcs/eval.cs ++++ b/mcs/mcs/eval.cs +@@ -788,6 +788,7 @@ namespace Mono.CSharp + return null; + } + ++ module.CloseContainerEarlyForReflectionEmit (); + module.CloseContainer (); + if (host != null) + host.CloseContainer (); +diff --git a/mcs/mcs/expression.cs b/mcs/mcs/expression.cs +index 732ee3ee934..518ccc8ef43 100644 +--- a/mcs/mcs/expression.cs ++++ b/mcs/mcs/expression.cs +@@ -1220,6 +1220,7 @@ namespace Mono.CSharp + expr = expr.ResolveLValue (ec, expr); + } else { + ec.Report.Error (1059, loc, "The operand of an increment or decrement operator must be a variable, property or indexer"); ++ return null; + } + + // +@@ -1477,6 +1478,11 @@ namespace Mono.CSharp + return null; + } + ++ if (expr.Type == InternalType.DefaultType) { ++ Error_OperatorCannotBeApplied (rc, loc, OperatorName, expr.Type); ++ return null; ++ } ++ + return this; + } + +@@ -4304,9 +4310,32 @@ namespace Mono.CSharp + CheckOutOfRangeComparison (ec, rc, left.Type); + } + +- if (left.Type.BuiltinType == BuiltinTypeSpec.Type.Dynamic || right.Type.BuiltinType == BuiltinTypeSpec.Type.Dynamic) ++ var ltype = left.Type; ++ var rtype = right.Type; ++ if (ltype.BuiltinType == BuiltinTypeSpec.Type.Dynamic || rtype.BuiltinType == BuiltinTypeSpec.Type.Dynamic) + return DoResolveDynamic (ec); + ++ // ++ // Only default with == and != is explicitly allowed ++ // ++ if (ltype == InternalType.DefaultType || rtype == InternalType.DefaultType) { ++ if ((Oper & Operator.EqualityMask) == 0) { ++ ec.Report.Error (8310, loc, "Operator `{0}' cannot be applied to operand `default'", OperName (Oper)); ++ return null; ++ } ++ ++ if (ltype == rtype) { ++ ec.Report.Error (8315, loc, "Operator `{0}' is ambiguous on operands `default' and `default'", OperName (Oper)); ++ return null; ++ } ++ ++ if (rtype == InternalType.DefaultType) { ++ right = new DefaultValueExpression (new TypeExpression (ltype, right.Location), right.Location).Resolve (ec); ++ } else { ++ left = new DefaultValueExpression (new TypeExpression (rtype, left.Location), left.Location).Resolve (ec); ++ } ++ } ++ + return DoResolveCore (ec, left, right); + } + +@@ -6744,10 +6773,14 @@ namespace Mono.CSharp + ec.Report.Error (1764, loc, + "Cannot use fixed variable `{0}' inside an anonymous method, lambda expression or query expression", + GetSignatureForError ()); +- } else if (local_info.IsByRef) { +- ec.Report.Error (8175, loc, +- "Cannot use by-reference variable `{0}' inside an anonymous method, lambda expression, or query expression", +- GetSignatureForError ()); ++ } else if (local_info.IsByRef || local_info.Type.IsByRefLike) { ++ if (ec.CurrentAnonymousMethod is StateMachineInitializer) { ++ // It's reported later as 4012/4013 ++ } else { ++ ec.Report.Error (8175, loc, ++ "Cannot use by-reference variable `{0}' inside an anonymous method, lambda expression, or query expression", ++ GetSignatureForError ()); ++ } + } + + if (ec.IsVariableCapturingRequired) { +@@ -6783,7 +6816,9 @@ namespace Mono.CSharp + local_info.SetIsUsed (); + + if (local_info.IsReadonly && !ec.HasAny (ResolveContext.Options.FieldInitializerScope | ResolveContext.Options.UsingInitializerScope)) { +- if (rhs == EmptyExpression.LValueMemberAccess) { ++ if (local_info.IsByRef) { ++ // OK because it cannot be reassigned ++ } else if (rhs == EmptyExpression.LValueMemberAccess) { + // CS1654 already reported + } else { + int code; +@@ -7175,8 +7210,7 @@ namespace Mono.CSharp + { + var sn = expr as SimpleName; + if (sn != null && sn.Name == "var" && sn.Arity == 0 && arguments?.Count > 1) { +- var targets = new List (arguments.Count); +- var variables = new List (arguments.Count); ++ var variables = new List (arguments.Count); + foreach (var arg in arguments) { + var arg_sn = arg.Expr as SimpleName; + if (arg_sn == null || arg_sn.Arity != 0) { +@@ -7186,12 +7220,10 @@ namespace Mono.CSharp + + var lv = new LocalVariable (rc.CurrentBlock, arg_sn.Name, arg.Expr.Location); + rc.CurrentBlock.AddLocalName (lv); +- variables.Add (lv); +- +- targets.Add (new LocalVariableReference (lv, arg_sn.Location)); ++ variables.Add (new BlockVariable (new VarExpr (lv.Location), lv)); + } + +- var res = new TupleDeconstruct (targets, variables, right_side, loc); ++ var res = new TupleDeconstruct (variables, right_side, loc); + return res.Resolve (rc); + } + +@@ -7306,15 +7338,8 @@ namespace Mono.CSharp + + eclass = ExprClass.Value; + +- if (type.Kind == MemberKind.ByRef) { +- if (rhs == null && arguments?.ContainsEmitWithAwait () == true) { +- ec.Report.Error (8178, loc, "`await' cannot be used in an expression containing a call to `{0}' because it returns by reference", +- GetSignatureForError ()); +- } +- +- if (rhs != EmptyExpression.OutAccess) +- return ByRefDereference.Create (this).Resolve (ec); +- } ++ if (type.Kind == MemberKind.ByRef && rhs != EmptyExpression.OutAccess) ++ return ByRefDereference.Create (this).Resolve (ec); + + return this; + } +@@ -9034,7 +9059,7 @@ namespace Mono.CSharp + if (eclass == ExprClass.Unresolved) + ResolveBase (ec); + +- if (type.IsClass || type.IsReadOnly) { ++ if (type.IsClass || (type.IsReadOnly && !ec.HasSet (ResolveContext.Options.ConstructorScope))) { + if (right_side == EmptyExpression.UnaryAddress) + ec.Report.Error (459, loc, "Cannot take the address of `this' because it is read-only"); + else if (right_side == EmptyExpression.OutAccess) +@@ -9908,7 +9933,7 @@ namespace Mono.CSharp + public static bool IsValidDotExpression (TypeSpec type) + { + const MemberKind dot_kinds = MemberKind.Class | MemberKind.Struct | MemberKind.Delegate | MemberKind.Enum | +- MemberKind.Interface | MemberKind.TypeParameter | MemberKind.ArrayType; ++ MemberKind.Interface | MemberKind.TypeParameter | MemberKind.ArrayType | MemberKind.ByRef; + + return (type.Kind & dot_kinds) != 0 || type.BuiltinType == BuiltinTypeSpec.Type.Dynamic; + } +@@ -11614,7 +11639,7 @@ namespace Mono.CSharp + } + + if (single_spec != null && single_spec.Dimension > 0) { +- if (type.IsSpecialRuntimeType) { ++ if (type.IsSpecialRuntimeType || type.IsByRefLike) { + ec.Module.Compiler.Report.Error (611, loc, "Array elements cannot be of type `{0}'", type.GetSignatureForError ()); + } else if (type.IsStatic) { + ec.Module.Compiler.Report.SymbolRelatedToPreviousError (type); +@@ -11650,6 +11675,13 @@ namespace Mono.CSharp + class ReferenceTypeExpr : TypeExpr + { + FullNamedExpression element; ++ readonly bool readOnly; ++ ++ public ReferenceTypeExpr (FullNamedExpression element, bool readOnly, Location loc) ++ : this (element, loc) ++ { ++ this.readOnly = readOnly; ++ } + + public ReferenceTypeExpr (FullNamedExpression element, Location loc) + { +@@ -11664,14 +11696,17 @@ namespace Mono.CSharp + return null; + + eclass = ExprClass.Type; +- type = ReferenceContainer.MakeType (mc.Module, type); ++ type = readOnly ? ++ ReadOnlyReferenceContainer.MakeType (mc.Module, type) : ++ ReferenceContainer.MakeType (mc.Module, type); + + return type; + } + + public override string GetSignatureForError () + { +- return "ref " + element.GetSignatureForError (); ++ var prefix = readOnly ? "ref " : "ref readonly "; ++ return prefix + element.GetSignatureForError (); + } + + public override object Accept (StructuralVisitor visitor) +@@ -11783,6 +11818,7 @@ namespace Mono.CSharp + TypeSpec otype; + Expression texpr; + Expression count; ++ MethodSpec ctor; + + public StackAlloc (Expression type, Expression count, Location l) + { +@@ -11852,6 +11888,11 @@ namespace Mono.CSharp + int size = BuiltinTypeSpec.GetSize (otype); + + count.Emit (ec); ++ bool count_on_stack = false; ++ if (ctor != null && !ExpressionAnalyzer.IsInexpensiveLoad (count)) { ++ ec.Emit (OpCodes.Dup); ++ count_on_stack = true; ++ } + + if (size == 0) + ec.Emit (OpCodes.Sizeof, otype); +@@ -11860,6 +11901,19 @@ namespace Mono.CSharp + + ec.Emit (OpCodes.Mul_Ovf_Un); + ec.Emit (OpCodes.Localloc); ++ ++ if (ctor != null) { ++ if (!count_on_stack) ++ count.Emit (ec); ++ ec.Emit (OpCodes.Newobj, ctor); ++ } ++ } ++ ++ public override void Error_ValueCannotBeConverted (ResolveContext rc, TypeSpec target, bool expl) ++ { ++ var etype = ((PointerContainer)type).Element; ++ rc.Report.Error (8346, loc, "Cannot convert a stackalloc expression of type `{0}' to type `{1}'", ++ etype.GetSignatureForError (), target.GetSignatureForError ()); + } + + protected override void CloneTo (CloneContext clonectx, Expression t) +@@ -11873,6 +11927,16 @@ namespace Mono.CSharp + { + return visitor.Visit (this); + } ++ ++ public bool ResolveSpanConversion (ResolveContext rc, TypeSpec spanType) ++ { ++ ctor = MemberCache.FindMember (spanType, MemberFilter.Constructor (ParametersCompiled.CreateFullyResolved (PointerContainer.MakeType (rc.Module, rc.Module.Compiler.BuiltinTypes.Void), rc.Module.Compiler.BuiltinTypes.Int)), BindingRestriction.DeclaredOnly) as MethodSpec; ++ if (ctor == null) ++ return false; ++ ++ this.type = spanType; ++ return true; ++ } + } + + // +@@ -13093,6 +13157,12 @@ namespace Mono.CSharp + expr.Emit (ec); + } + ++ public override Expression CreateExpressionTree (ResolveContext rc) ++ { ++ rc.Report.Error (8153, Location, "An expression tree lambda cannot contain a call to a method, property, or indexer that returns by reference"); ++ return null; ++ } ++ + public void Emit (EmitContext ec, bool leave_copy) + { + Emit (ec); +@@ -13133,6 +13203,11 @@ namespace Mono.CSharp + + public override Expression DoResolveLValue (ResolveContext rc, Expression right_side) + { ++ if (expr.ContainsEmitWithAwait ()) { ++ rc.Report.Error (8178, loc, "`await' cannot be used in an expression containing a call to `{0}' because it returns by reference", ++ expr.GetSignatureForError ()); ++ } ++ + return DoResolve (rc); + } + +@@ -13149,4 +13224,98 @@ namespace Mono.CSharp + return visitor.Visit (this); + } + } ++ ++ class DefaultLiteralExpression : Expression ++ { ++ public DefaultLiteralExpression (Location loc) ++ { ++ this.loc = loc; ++ } ++ ++ public override Expression CreateExpressionTree (ResolveContext ec) ++ { ++ throw new NotImplementedException (); ++ } ++ ++ protected override Expression DoResolve (ResolveContext rc) ++ { ++ type = InternalType.DefaultType; ++ eclass = ExprClass.Value; ++ return this; ++ } ++ ++ public override void Emit (EmitContext ec) ++ { ++ throw new NotSupportedException (); ++ } ++ } ++ ++ class Discard : Expression, IAssignMethod, IMemoryLocation ++ { ++ public Discard (Location loc) ++ { ++ this.loc = loc; ++ } ++ ++ public override Expression CreateExpressionTree (ResolveContext rc) ++ { ++ rc.Report.Error (8207, loc, "An expression tree cannot contain a discard"); ++ return null; ++ } ++ ++ protected override Expression DoResolve (ResolveContext rc) ++ { ++ type = InternalType.Discard; ++ eclass = ExprClass.Variable; ++ return this; ++ } ++ ++ public override Expression DoResolveLValue (ResolveContext rc, Expression right_side) ++ { ++ if (right_side.Type == InternalType.DefaultType) { ++ rc.Report.Error (8183, loc, "Cannot infer the type of implicitly-typed discard"); ++ type = InternalType.ErrorType; ++ return this; ++ } ++ ++ if (right_side.Type.Kind == MemberKind.Void) { ++ rc.Report.Error (8209, loc, "Cannot assign void to a discard"); ++ type = InternalType.ErrorType; ++ return this; ++ } ++ ++ if (right_side != EmptyExpression.OutAccess) { ++ type = right_side.Type; ++ } ++ ++ return this; ++ } ++ ++ public override void Emit (EmitContext ec) ++ { ++ throw new NotImplementedException (); ++ } ++ ++ public void Emit (EmitContext ec, bool leave_copy) ++ { ++ throw new NotImplementedException (); ++ } ++ ++ public void EmitAssign (EmitContext ec, Expression source, bool leave_copy, bool isCompound) ++ { ++ if (leave_copy) ++ source.Emit (ec); ++ else ++ source.EmitSideEffect (ec); ++ } ++ ++ public void AddressOf (EmitContext ec, AddressOp mode) ++ { ++ var temp = ec.GetTemporaryLocal (type); ++ ec.Emit (OpCodes.Ldloca, temp); ++ ++ // TODO: Should free it on next statement but don't have mechanism for that yet ++ // ec.FreeTemporaryLocal (temp, type); ++ } ++ } + } +diff --git a/mcs/mcs/generic.cs b/mcs/mcs/generic.cs +index 625cd0c773f..ec2965df63b 100644 +--- a/mcs/mcs/generic.cs ++++ b/mcs/mcs/generic.cs +@@ -693,6 +693,11 @@ namespace Mono.CSharp { + GetSignatureForError (), mc.GetSignatureForError (), input_variance, gtype_variance, parameters); + } + ++ public TypeSpec GetAsyncMethodBuilder () ++ { ++ return null; ++ } ++ + public TypeSpec GetAttributeCoClass () + { + return null; +@@ -2292,7 +2297,7 @@ namespace Mono.CSharp { + ok = false; + } + +- if (te.IsPointer || te.IsSpecialRuntimeType) { ++ if (te.IsPointer || te.IsSpecialRuntimeType || te.IsByRefLike) { + ec.Module.Compiler.Report.Error (306, args[i].Location, + "The type `{0}' may not be used as a type argument", + te.GetSignatureForError ()); +@@ -3102,7 +3107,7 @@ namespace Mono.CSharp { + // + // Some types cannot be used as type arguments + // +- if ((bound.Type.Kind == MemberKind.Void && !voidAllowed) || bound.Type.IsPointer || bound.Type.IsSpecialRuntimeType || ++ if ((bound.Type.Kind == MemberKind.Void && !voidAllowed) || bound.Type.IsPointer || bound.Type.IsSpecialRuntimeType || bound.Type.IsByRefLike || + bound.Type == InternalType.MethodGroup || bound.Type == InternalType.AnonymousMethod || bound.Type == InternalType.VarOutType || + bound.Type == InternalType.ThrowExpr) + return; +@@ -3110,6 +3115,9 @@ namespace Mono.CSharp { + if (bound.Type.IsTupleType && TupleLiteral.ContainsNoTypeElement (bound.Type)) + return; + ++ if (bound.Type == InternalType.DefaultType) ++ return; ++ + var a = bounds [index]; + if (a == null) { + a = new List (2); +diff --git a/mcs/mcs/import.cs b/mcs/mcs/import.cs +index 1cddf7c01f4..f7c4fd74b08 100644 +--- a/mcs/mcs/import.cs ++++ b/mcs/mcs/import.cs +@@ -975,6 +975,10 @@ namespace Mono.CSharp + mod |= Modifiers.READONLY; + } + ++ if (HasAttribute (CustomAttributeData.GetCustomAttributes (type), "IsByRefLikeAttribute", CompilerServicesNamespace)) { ++ mod |= Modifiers.REF; ++ } ++ + break; + } + } +@@ -1401,6 +1405,7 @@ namespace Mono.CSharp + public string DefaultIndexerName; + public bool? CLSAttributeValue; + public TypeSpec CoClass; ++ public TypeSpec AsyncMethodBuilder; + + static bool HasMissingType (ConstructorInfo ctor) + { +@@ -1522,6 +1527,20 @@ namespace Mono.CSharp + bag.CoClass = importer.ImportType ((MetaType) a.ConstructorArguments[0].Value); + continue; + } ++ ++ if (name == "AsyncMethodBuilderAttribute") { ++ if (dt.Namespace != "System.Runtime.CompilerServices") ++ continue; ++ ++ if (HasMissingType (a.Constructor)) ++ continue; ++ ++ if (bag == null) ++ bag = new AttributesBag (); ++ ++ bag.AsyncMethodBuilder = importer.ImportType ((MetaType)a.ConstructorArguments [0].Value); ++ continue; ++ } + } + } + +@@ -2129,6 +2148,14 @@ namespace Mono.CSharp + } + } + ++ public TypeSpec GetAsyncMethodBuilder () ++ { ++ if (cattrs == null) ++ ReadAttributes (); ++ ++ return cattrs.AsyncMethodBuilder; ++ } ++ + public TypeSpec GetAttributeCoClass () + { + if (cattrs == null) +@@ -2445,6 +2472,11 @@ namespace Mono.CSharp + + #endregion + ++ public TypeSpec GetAsyncMethodBuilder () ++ { ++ return null; ++ } ++ + public TypeSpec GetAttributeCoClass () + { + return null; +diff --git a/mcs/mcs/membercache.cs b/mcs/mcs/membercache.cs +index eebf71b844b..ca05d2d7afc 100644 +--- a/mcs/mcs/membercache.cs ++++ b/mcs/mcs/membercache.cs +@@ -309,7 +309,6 @@ namespace Mono.CSharp { + // + if (!BuiltinTypeSpec.IsPrimitiveType (dt) || dt.BuiltinType == BuiltinTypeSpec.Type.Char) { + switch (dt.BuiltinType) { +- case BuiltinTypeSpec.Type.String: + case BuiltinTypeSpec.Type.Delegate: + case BuiltinTypeSpec.Type.MulticastDelegate: + break; +@@ -317,6 +316,9 @@ namespace Mono.CSharp { + if (name == Operator.GetMetadataName (Operator.OpType.Implicit) || name == Operator.GetMetadataName (Operator.OpType.Explicit)) { + state |= StateFlags.HasConversionOperator; + } else { ++ if (dt.BuiltinType == BuiltinTypeSpec.Type.String) ++ break; ++ + state |= StateFlags.HasUserOperator; + } + +diff --git a/mcs/mcs/method.cs b/mcs/mcs/method.cs +index ccd4898e91c..1fca10dd6d0 100644 +--- a/mcs/mcs/method.cs ++++ b/mcs/mcs/method.cs +@@ -701,6 +701,10 @@ namespace Mono.CSharp { + if (MemberType.IsStatic) { + Error_StaticReturnType (); + } ++ ++ if (MemberType.IsSpecialRuntimeType && Compiler.Settings.StdLib) { ++ Error_ReturnTypeCantBeRefAny (Location, ReturnType, Report); ++ } + } + + public override void Emit () +@@ -716,6 +720,8 @@ namespace Mono.CSharp { + Module.PredefinedAttributes.Dynamic.EmitAttribute (CreateReturnBuilder ().Builder); + } else if (ReturnType.HasDynamicElement) { + Module.PredefinedAttributes.Dynamic.EmitAttribute (CreateReturnBuilder ().Builder, ReturnType, Location); ++ } else if (ReturnType is ReadOnlyReferenceContainer) { ++ Module.PredefinedAttributes.IsReadOnly.EmitAttribute (CreateReturnBuilder ().Builder); + } + + if (ReturnType.HasNamedTupleElement) { +@@ -764,6 +770,11 @@ namespace Mono.CSharp { + GetSignatureForError ()); + } + ++ public static void Error_ReturnTypeCantBeRefAny (Location loc, TypeSpec t, Report Report) ++ { ++ Report.Error (1599, loc, "The return type of `{0}' is not allowed", t.GetSignatureForError ()); ++ } ++ + public bool IsPartialDefinition { + get { + return (ModFlags & Modifiers.PARTIAL) != 0 && Block == null; +@@ -1231,11 +1242,6 @@ namespace Mono.CSharp { + "Introducing `Finalize' method can interfere with destructor invocation. Did you intend to declare a destructor?"); + } + +- if (Compiler.Settings.StdLib && ReturnType.IsSpecialRuntimeType) { +- Error1599 (Location, ReturnType, Report); +- return false; +- } +- + if (CurrentTypeParameters == null) { + if (base_method != null && !IsExplicitImpl) { + if (parameters.Count == 1 && ParameterTypes[0].BuiltinType == BuiltinTypeSpec.Type.Object && MemberName.Name == "Equals") +@@ -1261,8 +1267,9 @@ namespace Mono.CSharp { + if ((ModFlags & Modifiers.ASYNC) != 0) { + if (ReturnType.Kind != MemberKind.Void && + ReturnType != Module.PredefinedTypes.Task.TypeSpec && +- !ReturnType.IsGenericTask) { +- Report.Error (1983, Location, "The return type of an async method must be void, Task, or Task"); ++ !ReturnType.IsGenericTask && ++ !ReturnType.IsCustomTaskType ()) { ++ Report.Error (1983, Location, "The return type of an async method must be void or task type"); + } + + block = (ToplevelBlock) block.ConvertToAsyncTask (this, Parent.PartialContainer, parameters, ReturnType, null, Location); +@@ -1396,11 +1403,6 @@ namespace Mono.CSharp { + return base.EnableOverloadChecks (overload); + } + +- public static void Error1599 (Location loc, TypeSpec t, Report Report) +- { +- Report.Error (1599, loc, "Method or delegate cannot return type `{0}'", t.GetSignatureForError ()); +- } +- + protected override bool ResolveMemberType () + { + if (CurrentTypeParameters != null) { +@@ -2467,6 +2469,8 @@ namespace Mono.CSharp { + Module.PredefinedAttributes.Dynamic.EmitAttribute (CreateReturnBuilder ().Builder); + } else if (ReturnType.HasDynamicElement) { + Module.PredefinedAttributes.Dynamic.EmitAttribute (CreateReturnBuilder ().Builder, ReturnType, Location); ++ } else if (ReturnType is ReadOnlyReferenceContainer) { ++ Module.PredefinedAttributes.IsReadOnly.EmitAttribute (CreateReturnBuilder ().Builder); + } + + if (ReturnType.HasNamedTupleElement) { +diff --git a/mcs/mcs/modifiers.cs b/mcs/mcs/modifiers.cs +index bfae5985a03..926ab5d1848 100644 +--- a/mcs/mcs/modifiers.cs ++++ b/mcs/mcs/modifiers.cs +@@ -53,6 +53,7 @@ namespace Mono.CSharp + DEBUGGER_HIDDEN = 0x400000, + DEBUGGER_STEP_THROUGH = 0x800000, + AutoProperty = 0x1000000, ++ REF = 0x2000000, + + AccessibilityMask = PUBLIC | PROTECTED | INTERNAL | PRIVATE, + AllowedExplicitImplFlags = UNSAFE | EXTERN, +diff --git a/mcs/mcs/module.cs b/mcs/mcs/module.cs +index 00afac6c604..2293d825b36 100644 +--- a/mcs/mcs/module.cs ++++ b/mcs/mcs/module.cs +@@ -265,6 +265,7 @@ namespace Mono.CSharp + readonly Dictionary array_types; + readonly Dictionary pointer_types; + readonly Dictionary reference_types; ++ readonly Dictionary readonly_reference_types; + readonly Dictionary attrs_cache; + readonly Dictionary awaiters; + readonly Dictionary type_info_cache; +@@ -301,6 +302,7 @@ namespace Mono.CSharp + array_types = new Dictionary (); + pointer_types = new Dictionary (); + reference_types = new Dictionary (); ++ readonly_reference_types = new Dictionary (); + attrs_cache = new Dictionary (); + awaiters = new Dictionary (); + type_info_cache = new Dictionary (); +@@ -427,6 +429,12 @@ namespace Mono.CSharp + } + } + ++ internal Dictionary ReadonlyReferenceTypesCache { ++ get { ++ return readonly_reference_types; ++ } ++ } ++ + internal Dictionary TypeInfoCache { + get { + return type_info_cache; +diff --git a/mcs/mcs/parameter.cs b/mcs/mcs/parameter.cs +index 2bd2a498a91..cc10eee162b 100644 +--- a/mcs/mcs/parameter.cs ++++ b/mcs/mcs/parameter.cs +@@ -1447,7 +1447,7 @@ namespace Mono.CSharp { + + expr = Child; + +- if (!(expr is Constant || expr is DefaultValueExpression || (expr is New && ((New) expr).IsGeneratedStructConstructor))) { ++ if (!(expr is Constant || expr is DefaultValueExpression || expr is DefaultLiteralExpression || (expr is New && ((New) expr).IsGeneratedStructConstructor))) { + if (!(expr is ErrorExpression)) { + rc.Report.Error (1736, Location, + "The expression being assigned to optional parameter `{0}' must be a constant or default value", +diff --git a/mcs/mcs/statement.cs b/mcs/mcs/statement.cs +index 58ba2795e4b..9c51128548f 100644 +--- a/mcs/mcs/statement.cs ++++ b/mcs/mcs/statement.cs +@@ -1160,7 +1160,8 @@ namespace Mono.CSharp { + // + if (ec.CurrentAnonymousMethod is AsyncInitializer) { + var storey = (AsyncTaskStorey) ec.CurrentAnonymousMethod.Storey; +- if (storey.ReturnType == ec.Module.PredefinedTypes.Task.TypeSpec) { ++ var s_return_type = storey.ReturnType; ++ if (s_return_type == ec.Module.PredefinedTypes.Task.TypeSpec) { + // + // Extra trick not to emit ret/leave inside awaiter body + // +@@ -1168,8 +1169,8 @@ namespace Mono.CSharp { + return true; + } + +- if (storey.ReturnType.IsGenericTask) +- block_return_type = storey.ReturnType.TypeArguments[0]; ++ if (s_return_type.IsGenericTask || (s_return_type.Arity == 1 && s_return_type.IsCustomTaskType ())) ++ block_return_type = s_return_type.TypeArguments[0]; + } + + if (ec.CurrentIterator != null) { +@@ -1220,7 +1221,7 @@ namespace Mono.CSharp { + return false; + } + +- if (!async_type.IsGenericTask) { ++ if (!async_type.IsGeneric) { + if (this is ContextualReturn) + return true; + +@@ -2368,7 +2369,12 @@ namespace Mono.CSharp { + if (initializer == null) + return null; + +- var c = initializer as Constant; ++ Constant c; ++ if (initializer.Type == InternalType.DefaultType) ++ c = New.Constantify (li.Type, initializer.Location); ++ else ++ c = initializer as Constant; ++ + if (c == null) { + initializer.Error_ExpressionMustBeConstant (bc, initializer.Location, li.Name); + return null; +@@ -2407,14 +2413,14 @@ namespace Mono.CSharp { + AddressTaken = 1 << 2, + CompilerGenerated = 1 << 3, + Constant = 1 << 4, +- ForeachVariable = 1 << 5, +- FixedVariable = 1 << 6, +- UsingVariable = 1 << 7, ++ ForeachVariable = 1 << 5 | ReadonlyMask, ++ FixedVariable = 1 << 6 | ReadonlyMask, ++ UsingVariable = 1 << 7 | ReadonlyMask, + IsLocked = 1 << 8, + SymbolFileHidden = 1 << 9, + ByRef = 1 << 10, + +- ReadonlyMask = ForeachVariable | FixedVariable | UsingVariable ++ ReadonlyMask = 1 << 20 + } + + TypeSpec type; +@@ -2534,7 +2540,7 @@ namespace Mono.CSharp { + + public bool IsFixed { + get { +- return (flags & Flags.FixedVariable) != 0; ++ return (flags & Flags.FixedVariable) == Flags.FixedVariable; + } + set { + flags = value ? flags | Flags.FixedVariable : flags & ~Flags.FixedVariable; +@@ -2672,7 +2678,7 @@ namespace Mono.CSharp { + + public string GetReadOnlyContext () + { +- switch (flags & Flags.ReadonlyMask) { ++ switch (flags & (Flags.ForeachVariable | Flags.FixedVariable | Flags.UsingVariable)) { + case Flags.FixedVariable: + return "fixed variable"; + case Flags.ForeachVariable: +@@ -8191,7 +8197,9 @@ namespace Mono.CSharp { + } + + if (iface_candidate == null) { +- if (expr.Type != InternalType.ErrorType) { ++ if (expr.Type == InternalType.DefaultType) { ++ rc.Report.Error (8312, loc, "Use of default literal is not valid in this context"); ++ } else if (expr.Type != InternalType.ErrorType) { + rc.Report.Error (1579, loc, + "foreach statement cannot operate on variables of type `{0}' because it does not contain a definition for `{1}' or is inaccessible", + expr.Type.GetSignatureForError (), "GetEnumerator"); +diff --git a/mcs/mcs/tuples.cs b/mcs/mcs/tuples.cs +index bb7faf734df..901efdc9541 100644 +--- a/mcs/mcs/tuples.cs ++++ b/mcs/mcs/tuples.cs +@@ -432,7 +432,7 @@ namespace Mono.CSharp + { + Expression source; + List targetExprs; +- List variablesToInfer; ++ List variables; + Expression instance; + + public TupleDeconstruct (List targetExprs, Expression source, Location loc) +@@ -442,10 +442,11 @@ namespace Mono.CSharp + this.loc = loc; + } + +- public TupleDeconstruct (List targetExprs, List variables, Expression source, Location loc) +- : this (targetExprs, source, loc) ++ public TupleDeconstruct (List variables, Expression source, Location loc) + { +- this.variablesToInfer = variables; ++ this.source = source; ++ this.variables = variables; ++ this.loc = loc; + } + + public override Expression CreateExpressionTree (ResolveContext ec) +@@ -469,9 +470,18 @@ namespace Mono.CSharp + var src_type = src.Type; + + if (src_type.IsTupleType) { +- if (src_type.Arity != targetExprs.Count) { ++ int target_count; ++ ++ if (targetExprs == null) { ++ target_count = variables.Count; ++ targetExprs = new List (target_count); ++ } else { ++ target_count = targetExprs.Count; ++ } ++ ++ if (src_type.Arity != target_count) { + rc.Report.Error (8132, loc, "Cannot deconstruct a tuple of `{0}' elements into `{1}' variables", +- src_type.Arity.ToString (), targetExprs.Count.ToString ()); ++ src_type.Arity.ToString (CultureInfo.InvariantCulture), target_count.ToString (CultureInfo.InvariantCulture)); + return null; + } + +@@ -482,27 +492,44 @@ namespace Mono.CSharp + instance = expr_variable.CreateReferenceExpression (rc, loc); + } + +- for (int i = 0; i < targetExprs.Count; ++i) { ++ for (int i = 0; i < target_count; ++i) { + var tle = src_type.TypeArguments [i]; + +- var lv = variablesToInfer? [i]; +- if (lv != null) { +- if (InternalType.HasNoType (tle)) { +- rc.Report.Error (8130, Location, "Cannot infer the type of implicitly-typed deconstruction variable `{0}'", lv.Name); +- lv.Type = InternalType.ErrorType; ++ if (variables != null) { ++ var variable = variables [i].Variable; ++ ++ if (variable.Type == InternalType.Discard) { ++ variables [i] = null; ++ targetExprs.Add (EmptyExpressionStatement.Instance); + continue; + } + +- lv.Type = tle; +- lv.PrepareAssignmentAnalysis ((BlockContext) rc); +- } ++ var variable_type = variables [i].TypeExpression; ++ ++ targetExprs.Add (new LocalVariableReference (variable, variable.Location)); ++ ++ if (variable_type is VarExpr) { ++ if (InternalType.HasNoType (tle)) { ++ rc.Report.Error (8130, Location, "Cannot infer the type of implicitly-typed deconstruction variable `{0}'", variable.Name); ++ tle = InternalType.ErrorType; ++ } + ++ variable.Type = tle; ++ } else { ++ variable.Type = variable_type.ResolveAsType (rc); ++ } ++ ++ variable.PrepareAssignmentAnalysis ((BlockContext)rc); ++ } + + var element_src = tupleLiteral == null ? new MemberAccess (instance, NamedTupleSpec.GetElementPropertyName (i)) : tupleLiteral.Elements [i].Expr; + targetExprs [i] = new SimpleAssign (targetExprs [i], element_src).Resolve (rc); + } + + eclass = ExprClass.Value; ++ ++ // TODO: The type is same only if there is no target element conversion ++ // var res = (/*byte*/ b, /*short*/ s) = (2, 4); + type = src.Type; + return this; + } +@@ -527,11 +554,24 @@ namespace Mono.CSharp + + public override void Emit (EmitContext ec) + { +- throw new NotImplementedException (); ++ if (instance != null) ++ ((ExpressionStatement)source).EmitStatement (ec); ++ ++ foreach (ExpressionStatement expr in targetExprs) ++ expr.Emit (ec); ++ ++ var ctor = MemberCache.FindMember (type, MemberFilter.Constructor (null), BindingRestriction.DeclaredOnly | BindingRestriction.InstanceOnly) as MethodSpec; ++ ec.Emit (OpCodes.Newobj, ctor); + } + + public override void EmitStatement (EmitContext ec) + { ++ if (variables != null) { ++ foreach (var lv in variables) { ++ lv?.Variable.CreateBuilder (ec); ++ } ++ } ++ + if (instance != null) + ((ExpressionStatement) source).EmitStatement (ec); + +@@ -549,9 +589,6 @@ namespace Mono.CSharp + if (leave_copy) + throw new NotImplementedException (); + +- foreach (var lv in variablesToInfer) +- lv.CreateBuilder (ec); +- + EmitStatement (ec); + } + +@@ -563,11 +600,11 @@ namespace Mono.CSharp + + public void SetGeneratedFieldAssigned (FlowAnalysisContext fc) + { +- if (variablesToInfer == null) ++ if (variables == null) + return; + +- foreach (var lv in variablesToInfer) +- fc.SetVariableAssigned (lv.VariableInfo); ++ foreach (var lv in variables) ++ fc.SetVariableAssigned (lv.Variable.VariableInfo); + } + } + } +\ No newline at end of file +diff --git a/mcs/mcs/typemanager.cs b/mcs/mcs/typemanager.cs +index b6aff14e1c0..7a16cda2774 100644 +--- a/mcs/mcs/typemanager.cs ++++ b/mcs/mcs/typemanager.cs +@@ -242,6 +242,7 @@ namespace Mono.CSharp + + // C# 7.0 + public readonly PredefinedType[] Tuples; ++ public readonly PredefinedType SpanGeneric; + + public PredefinedTypes (ModuleContainer module) + { +@@ -301,6 +302,8 @@ namespace Mono.CSharp + FormattableString = new PredefinedType (module, MemberKind.Class, "System", "FormattableString"); + FormattableStringFactory = new PredefinedType (module, MemberKind.Class, "System.Runtime.CompilerServices", "FormattableStringFactory"); + ++ SpanGeneric = new PredefinedType (module, MemberKind.Struct, "System", "Span", 1); ++ + // + // Define types which are used for comparison. It does not matter + // if they don't exist as no error report is needed +@@ -348,6 +351,8 @@ namespace Mono.CSharp + if (pt.Define ()) + pt.TypeSpec.IsTupleType = true; + } ++ ++ SpanGeneric.Define (); + } + } + +@@ -430,6 +435,7 @@ namespace Mono.CSharp + ArrayEmpty = new PredefinedMember (module, types.Array, + MemberFilter.Method ("Empty", 1, ParametersCompiled.EmptyReadOnlyParameters, null)); + ++ // TODO: Must me static + AsyncTaskMethodBuilderCreate = new PredefinedMember (module, types.AsyncTaskMethodBuilder, + MemberFilter.Method ("Create", 0, ParametersCompiled.EmptyReadOnlyParameters, types.AsyncTaskMethodBuilder.TypeSpec)); + +@@ -485,6 +491,7 @@ namespace Mono.CSharp + AsyncTaskMethodBuilderTask = new PredefinedMember (module, types.AsyncTaskMethodBuilder, + MemberFilter.Property ("Task", null)); + ++ // TODO: Must me static + AsyncTaskMethodBuilderGenericCreate = new PredefinedMember (module, types.AsyncTaskMethodBuilderGeneric, + MemberFilter.Method ("Create", 0, ParametersCompiled.EmptyReadOnlyParameters, types.AsyncVoidMethodBuilder.TypeSpec)); + +@@ -542,6 +549,7 @@ namespace Mono.CSharp + AsyncTaskMethodBuilderGenericTask = new PredefinedMember (module, types.AsyncTaskMethodBuilderGeneric, + MemberFilter.Property ("Task", null)); + ++ // TODO: Must me static + AsyncVoidMethodBuilderCreate = new PredefinedMember (module, types.AsyncVoidMethodBuilder, + MemberFilter.Method ("Create", 0, ParametersCompiled.EmptyReadOnlyParameters, types.AsyncVoidMethodBuilder.TypeSpec)); + +@@ -1006,9 +1014,6 @@ namespace Mono.CSharp + + public T Resolve (Location loc) + { +- if (member != null) +- return member; +- + if (Get () != null) + return member; + +diff --git a/mcs/mcs/typespec.cs b/mcs/mcs/typespec.cs +index d14e1ead3e3..a58a0fe5178 100644 +--- a/mcs/mcs/typespec.cs ++++ b/mcs/mcs/typespec.cs +@@ -225,6 +225,8 @@ namespace Mono.CSharp + } + } + ++ public bool IsByRefLike => (modifiers & Modifiers.REF) != 0; ++ + // + // Returns true for instances of System.Threading.Tasks.Task + // +@@ -1452,6 +1454,7 @@ namespace Mono.CSharp + int TypeParametersCount { get; } + TypeParameterSpec[] TypeParameters { get; } + ++ TypeSpec GetAsyncMethodBuilder (); + TypeSpec GetAttributeCoClass (); + string GetAttributeDefaultMember (); + AttributeUsageAttribute GetAttributeUsage (PredefinedAttribute pa); +@@ -1461,6 +1464,29 @@ namespace Mono.CSharp + + class InternalType : TypeSpec, ITypeDefinition + { ++ sealed class InternalTypeAssembly : IAssemblyDefinition ++ { ++ public static readonly InternalTypeAssembly Instance = new InternalTypeAssembly (); ++ ++ public string FullName => throw new NotImplementedException (); ++ ++ public bool IsCLSCompliant => false; ++ ++ public bool IsMissing => false; ++ ++ public string Name => throw new NotImplementedException (); ++ ++ public byte [] GetPublicKeyToken () ++ { ++ throw new NotImplementedException (); ++ } ++ ++ public bool IsFriendAssemblyTo (IAssemblyDefinition assembly) ++ { ++ return false; ++ } ++ } ++ + public static readonly InternalType AnonymousMethod = new InternalType ("anonymous method"); + public static readonly InternalType Arglist = new InternalType ("__arglist"); + public static readonly InternalType MethodGroup = new InternalType ("method group"); +@@ -1470,6 +1496,8 @@ namespace Mono.CSharp + public static readonly InternalType ErrorType = new InternalType (""); + public static readonly InternalType VarOutType = new InternalType ("var out"); + public static readonly InternalType ThrowExpr = new InternalType ("throw expression"); ++ public static readonly InternalType DefaultType = new InternalType ("default"); ++ public static readonly InternalType Discard = new InternalType ("discard"); + + readonly string name; + +@@ -1494,7 +1522,7 @@ namespace Mono.CSharp + + IAssemblyDefinition ITypeDefinition.DeclaringAssembly { + get { +- throw new NotImplementedException (); ++ return InternalTypeAssembly.Instance; + } + } + +@@ -1561,6 +1589,11 @@ namespace Mono.CSharp + + #region ITypeDefinition Members + ++ TypeSpec ITypeDefinition.GetAsyncMethodBuilder () ++ { ++ return null; ++ } ++ + TypeSpec ITypeDefinition.GetAttributeCoClass () + { + return null; +@@ -1614,7 +1647,7 @@ namespace Mono.CSharp + + public static bool HasNoType (TypeSpec type) + { +- return type == AnonymousMethod || type == MethodGroup || type == NullLiteral || type == ThrowExpr; ++ return type == AnonymousMethod || type == MethodGroup || type == NullLiteral || type == ThrowExpr || type == DefaultType; + } + } + +@@ -1749,6 +1782,11 @@ namespace Mono.CSharp + } + } + ++ public TypeSpec GetAsyncMethodBuilder () ++ { ++ return null; ++ } ++ + public TypeSpec GetAttributeCoClass () + { + return Element.MemberDefinition.GetAttributeCoClass (); +@@ -1996,9 +2034,10 @@ namespace Mono.CSharp + [System.Diagnostics.DebuggerDisplay("{DisplayDebugInfo()}")] + class ReferenceContainer : ElementTypeSpec + { +- ReferenceContainer (TypeSpec element) ++ protected ReferenceContainer (TypeSpec element) + : base (MemberKind.ByRef, element, null) + { ++ cache = null; + } + + public override IList Interfaces { +@@ -2039,6 +2078,39 @@ namespace Mono.CSharp + + return pc; + } ++ ++ protected override void InitializeMemberCache(bool onlyTypes) ++ { ++ cache = Element.MemberCache; ++ } ++ } ++ ++ [System.Diagnostics.DebuggerDisplay ("{DisplayDebugInfo()}")] ++ class ReadOnlyReferenceContainer : ReferenceContainer ++ { ++ public ReadOnlyReferenceContainer (TypeSpec element) ++ : base (element) ++ { ++ } ++ ++ string DisplayDebugInfo () ++ { ++ return "ref readonly " + GetSignatureForError (); ++ } ++ ++ public new static ReferenceContainer MakeType (ModuleContainer module, TypeSpec element) ++ { ++ if (element.Kind == MemberKind.ByRef) ++ throw new ArgumentException (); ++ ++ ReadOnlyReferenceContainer pc; ++ if (!module.ReadonlyReferenceTypesCache.TryGetValue (element, out pc)) { ++ pc = new ReadOnlyReferenceContainer (element); ++ module.ReadonlyReferenceTypesCache.Add (element, pc); ++ } ++ ++ return pc; ++ } + } + + class PointerContainer : ElementTypeSpec +diff --git a/mcs/tests/gtest-409.cs b/mcs/tests/gtest-409.cs +index 8db59d7e48d..606ae3685d1 100644 +--- a/mcs/tests/gtest-409.cs ++++ b/mcs/tests/gtest-409.cs +@@ -1,3 +1,4 @@ ++// Compiler options: -langversion:latest + using System; + + // +@@ -175,6 +176,11 @@ public class ConditionalParsing + var x = args ?.2f : -.2f; + } + ++ void Test_23 (string args) ++ { ++ var x = args == null ? default : 1; ++ } ++ + static void Helper (T arg) + { + } +diff --git a/mcs/tests/test-948.cs b/mcs/tests/test-948.cs +new file mode 100644 +index 00000000000..34b3ab9a0c4 +--- /dev/null ++++ b/mcs/tests/test-948.cs +@@ -0,0 +1,16 @@ ++// Compiler options: -langversion:7.2 -unsafe ++ ++using System; ++ ++class X ++{ ++ public static void Main () ++ { ++ Span stackSpan = stackalloc int[100]; ++ } ++ ++ unsafe void Foo () ++ { ++ ++ } ++} +\ No newline at end of file +diff --git a/mcs/tests/test-async-94.cs b/mcs/tests/test-async-94.cs +new file mode 100644 +index 00000000000..ce9a30409bb +--- /dev/null ++++ b/mcs/tests/test-async-94.cs +@@ -0,0 +1,127 @@ ++using System; ++using System.Threading.Tasks; ++using System.Runtime.CompilerServices; ++ ++[AsyncMethodBuilder (typeof(MyTaskMethodBuilder<>))] ++class MyTask ++{ ++} ++ ++[AsyncMethodBuilder (typeof(MyTaskMethodBuilder))] ++class MyTask ++{ ++} ++ ++class MyTaskMethodBuilder ++{ ++ public static MyTaskMethodBuilder Create() ++ { ++ return null; ++ } ++ ++ public MyTask Task { ++ get { ++ return null; ++ } ++ } ++ ++ public void SetException (Exception exception) ++ { ++ ++ } ++ ++ public void SetResult () ++ { ++ ++ } ++ ++ public void AwaitOnCompleted (ref TAwaiter awaiter, ref TStateMachine stateMachine) where TAwaiter : INotifyCompletion where TStateMachine : IAsyncStateMachine ++ { ++ ++ } ++ ++ public void AwaitUnsafeOnCompleted (ref TAwaiter awaiter, ref TStateMachine stateMachine) where TAwaiter : ICriticalNotifyCompletion where TStateMachine : IAsyncStateMachine ++ { ++ ++ } ++ ++ public void Start (ref TStateMachine stateMachine) where TStateMachine : IAsyncStateMachine ++ { ++ ++ } ++ ++ public void SetStateMachine (IAsyncStateMachine stateMachine) ++ { ++ ++ } ++} ++ ++class MyTaskMethodBuilder ++{ ++ public static MyTaskMethodBuilder Create() ++ { ++ return null; ++ } ++ ++ public MyTask Task { ++ get { ++ return null; ++ } ++ } ++ ++ public void SetException (Exception exception) ++ { ++ ++ } ++ ++ public void SetResult (T result) ++ { ++ ++ } ++ ++ public void AwaitOnCompleted (ref TAwaiter awaiter, ref TStateMachine stateMachine) where TAwaiter : INotifyCompletion where TStateMachine : IAsyncStateMachine ++ { ++ ++ } ++ ++ public void AwaitUnsafeOnCompleted (ref TAwaiter awaiter, ref TStateMachine stateMachine) where TAwaiter : ICriticalNotifyCompletion where TStateMachine : IAsyncStateMachine ++ { ++ ++ } ++ ++ public void Start (ref TStateMachine stateMachine) where TStateMachine : IAsyncStateMachine ++ { ++ ++ } ++ ++ public void SetStateMachine (IAsyncStateMachine stateMachine) ++ { ++ ++ } ++} ++ ++class X ++{ ++ public async MyTask Test () ++ { ++ await Task.Delay (1); ++ } ++ ++ public async MyTask Test2 () ++ { ++ await Task.Delay (1); ++ return 2; ++ } ++ ++ public async ValueTask Test3 () ++ { ++ await Task.Delay (1); ++ return "as"; ++ } ++ ++ public static void Main () ++ { ++ var x = new X (); ++ var r1 = x.Test3 ().Result; ++ } ++} +\ No newline at end of file +diff --git a/mcs/tests/test-default-01.cs b/mcs/tests/test-default-01.cs +new file mode 100644 +index 00000000000..823e33c451b +--- /dev/null ++++ b/mcs/tests/test-default-01.cs +@@ -0,0 +1,52 @@ ++// Compiler options: -langversion:latest ++ ++static class X ++{ ++ const int c1 = default; ++ const int c2 = default (int); ++ ++ public static void Main () ++ { ++ int a = default; ++ var b = (int) default; ++ const int c = default; ++ var d = new[] { 1, default }; ++ dynamic e = default; ++ int f = checked (default); ++ (int a, int b) g = (1, default); ++ var h = 1 != default; ++ var i = default == M4 (); ++ } ++ ++ static int M1 () ++ { ++ return default; ++ } ++ ++ static void M2 () ++ { ++ try { ++ throw new System.Exception (); ++ } catch (System.Exception) when (default) { ++ } ++ ++ if (default) { ++ } ++ } ++ ++ static void M3 (int x = default) ++ { ++ } ++ ++ static System.Func M4 () ++ { ++ return () => default; ++ } ++} ++/* ++enum E ++{ ++ A = default, ++ B = default + 1 ++} ++*/ +\ No newline at end of file +diff --git a/mcs/tests/test-default-02.cs b/mcs/tests/test-default-02.cs +new file mode 100644 +index 00000000000..0039782e5f2 +--- /dev/null ++++ b/mcs/tests/test-default-02.cs +@@ -0,0 +1,33 @@ ++// Compiler options: -langversion:latest ++ ++class C ++{ ++ static void Main() ++ { ++ M (default, 1); ++ ++ M2 (default); ++ M2 (null); ++ ++ var res = Test (default); ++ } ++ ++ ++ static void M (T x, T y) ++ { ++ } ++ ++ static void M2 (params object[] x) ++ { ++ } ++ ++ static byte[] Test (S x) ++ { ++ return null; ++ } ++} ++ ++struct S ++{ ++ ++} +\ No newline at end of file +diff --git a/mcs/tests/test-discards-01.cs b/mcs/tests/test-discards-01.cs +new file mode 100644 +index 00000000000..54cf29779c6 +--- /dev/null ++++ b/mcs/tests/test-discards-01.cs +@@ -0,0 +1,36 @@ ++using System; ++ ++class X ++{ ++ public static void Main () ++ { ++ string s = null; ++ ++ _ = 1; ++ { ++ char _ = '4'; ++ } ++ ++ _ = TestValue (); ++ ++ _ = _ = s; ++ ++ byte k1; ++ var s1 = (k1, _) = (1, s); ++ ++ Func l1 = () => _ = (_, _) = (1, s); ++ ++ TryGetValue (out _); ++ } ++ ++ static bool TryGetValue (out int arg) ++ { ++ arg = 3; ++ return true; ++ } ++ ++ static int TestValue () ++ { ++ return 4; ++ } ++} +\ No newline at end of file +diff --git a/mcs/tests/test-named-11.cs b/mcs/tests/test-named-11.cs +new file mode 100644 +index 00000000000..a01d2883b9c +--- /dev/null ++++ b/mcs/tests/test-named-11.cs +@@ -0,0 +1,13 @@ ++// Compiler options: -langversion:7.2 ++ ++class X ++{ ++ public static void Main () ++ { ++ Test (arg: 1, ""); ++ } ++ ++ static void Test (int arg, string str) ++ { ++ } ++} +\ No newline at end of file +diff --git a/mcs/tests/test-readonly-02.cs b/mcs/tests/test-readonly-02.cs +new file mode 100644 +index 00000000000..231b8cd8fda +--- /dev/null ++++ b/mcs/tests/test-readonly-02.cs +@@ -0,0 +1,27 @@ ++// Compiler options: -langversion:latest ++using System; ++ ++public delegate ref readonly int D (int x); ++ ++class X ++{ ++ public static void Main () ++ { ++ ++ } ++ ++ Guid g; ++ ++ ref readonly Guid TestMethod () ++ { ++ return ref g; ++ } ++ ++ ref readonly Guid TestProp { ++ get { ++ ref readonly var rg = ref g; ++ return ref rg; ++ } ++ } ++ ++} +\ No newline at end of file +diff --git a/mcs/tests/test-readonly-03.cs b/mcs/tests/test-readonly-03.cs +new file mode 100644 +index 00000000000..14cb958b41a +--- /dev/null ++++ b/mcs/tests/test-readonly-03.cs +@@ -0,0 +1,16 @@ ++// Compiler options: -langversion:latest ++using System; ++ ++readonly struct S ++{ ++ static S shared = new S (); ++ ++ public S (int arg) ++ { ++ this = shared; ++ } ++ ++ public static void Main () ++ { ++ } ++} +\ No newline at end of file +diff --git a/mcs/tests/test-ref-07.cs b/mcs/tests/test-ref-07.cs +new file mode 100644 +index 00000000000..4aa16579752 +--- /dev/null ++++ b/mcs/tests/test-ref-07.cs +@@ -0,0 +1,30 @@ ++// Compiler options: -langversion:latest ++ ++public readonly partial ref struct Test ++{ ++ public static void Main () ++ { ++ var m = new Test (); ++ m.Method (); ++ } ++ ++ Test Method () ++ { ++ return new Test (); ++ } ++} ++ ++ref struct Second ++{ ++ Test field; ++} ++ ++public abstract class P ++{ ++ public abstract Test Span { get; } ++} ++ ++public interface II ++{ ++ Test Span { get; } ++} +diff --git a/mcs/tests/test-ref-08.cs b/mcs/tests/test-ref-08.cs +new file mode 100644 +index 00000000000..f4ff50f4c5c +--- /dev/null ++++ b/mcs/tests/test-ref-08.cs +@@ -0,0 +1,101 @@ ++using System; ++ ++namespace ClassLibrary1 ++{ ++ public class C ++ { ++ ++ class B ++ { ++ int v; ++ public ref int this[int index] ++ { ++ get ++ { ++ return ref v; ++ } ++ } ++ } ++ ++ ++ class Gen where T : struct ++ { ++ T v; ++ public ref T this[int index] ++ { ++ get ++ { ++ return ref v; ++ } ++ } ++ } ++ ++ struct Val ++ { ++ } ++ ++ class BB ++ { ++ Val v; ++ public ref Val this[int index] ++ { ++ get ++ { ++ return ref v; ++ } ++ } ++ } ++ ++ void MM () ++ { ++ var bbb = new BB(); ++ Val v1 = bbb[0]; ++ bbb[1] = v1; ++ ++ ref Val v2 = ref bbb[2]; ++ bbb[2] = v2; ++ } ++ ++ static int[] a = new int[1]; ++ public static void Main() ++ { ++ var bb = new B(); ++ int b = 1; ++ bb[0] = b; ++ a[0] = Add2(ref b, 2); ++ ++ var bbb = new BB(); ++ bbb[0] = new Val(); ++ ++ var v = new Val(); ++ bbb[1] = v; ++ ++ var v2 = bbb[2]; ++ ++ bbb[3] = v2; ++ ++ ++ bbb[3] = bbb[2]; ++ ++ ++ ++ var ggg = new Gen(); ++ ggg[0] = new Val(); ++ ++ var g = new Val(); ++ ggg[1] = v; ++ ++ var g2 = ggg[2]; ++ ++ ggg[3] = v2; ++ ++ ++ ggg[3] = ggg[2]; ++ } ++ ++ public static ref int Add2(ref int a, int b) ++ { ++ return ref a; ++ } ++ } ++} +\ No newline at end of file +diff --git a/mcs/tests/test-ref-09.cs b/mcs/tests/test-ref-09.cs +new file mode 100644 +index 00000000000..5d0e89e5c1a +--- /dev/null ++++ b/mcs/tests/test-ref-09.cs +@@ -0,0 +1,12 @@ ++struct rigidbody { public float x; } ++ ++class Program ++{ ++ static rigidbody a; ++ static ref rigidbody property_returning_struct_by_ref => ref a; ++ ++ static void Main() ++ { ++ System.Console.WriteLine (property_returning_struct_by_ref.x); ++ } ++} +\ No newline at end of file +diff --git a/mcs/tests/test-ref-10.cs b/mcs/tests/test-ref-10.cs +new file mode 100644 +index 00000000000..88e201d3174 +--- /dev/null ++++ b/mcs/tests/test-ref-10.cs +@@ -0,0 +1,24 @@ ++// Compiler options: -langversion:latest ++ ++using System; ++ ++ref struct ValueStringBuilder ++{ ++ public override string ToString () ++ { ++ return "aaa"; ++ } ++} ++ ++ ++class X ++{ ++ public static int Main () ++ { ++ var s = new ValueStringBuilder (); ++ if (s.ToString () != "aaa") ++ return 1; ++ ++ return 0; ++ } ++} +\ No newline at end of file +diff --git a/mcs/tests/test-tuple-07.cs b/mcs/tests/test-tuple-07.cs +new file mode 100644 +index 00000000000..cc7ce5837ce +--- /dev/null ++++ b/mcs/tests/test-tuple-07.cs +@@ -0,0 +1,16 @@ ++using System; ++using System.Collections.Generic; ++ ++// Parser tests ++ ++class ParserTest ++{ ++ IEnumerable<(Object vertex, int distance)> Test () ++ { ++ return null; ++ } ++ ++ public static void Main () ++ { ++ } ++} +\ No newline at end of file +diff --git a/mcs/tests/test-tuple-09.cs b/mcs/tests/test-tuple-09.cs +new file mode 100644 +index 00000000000..3f15cae6cf1 +--- /dev/null ++++ b/mcs/tests/test-tuple-09.cs +@@ -0,0 +1,19 @@ ++using System; ++ ++class TupleDeconstructionDeclaration ++{ ++ public static int Main () ++ { ++ (string s, long l) = GetValues (); ++ (var vs, var vl) = GetValues (); ++ (object o, var vl2) = GetValues (); ++ (string ds, _) = GetValues (); ++ ++ return 0; ++ } ++ ++ static (string, long) GetValues () ++ { ++ return ("a", 3); ++ } ++} +\ No newline at end of file +diff --git a/mcs/tests/ver-il-net_4_x.xml b/mcs/tests/ver-il-net_4_x.xml +index c2c98123305..4dbc7042a8a 100644 +--- a/mcs/tests/ver-il-net_4_x.xml ++++ b/mcs/tests/ver-il-net_4_x.xml +@@ -14659,6 +14659,9 @@ + + 24 + ++ ++ 16 ++ + + + +@@ -52808,6 +52811,19 @@ + + + ++ ++ ++ ++ 16 ++ ++ ++ 2 ++ ++ ++ 7 ++ ++ ++ + + + +@@ -66893,6 +66909,117 @@ + + + ++ ++ ++ ++ 7 ++ ++ ++ ++ ++ 7 ++ ++ ++ ++ ++ 10 ++ ++ ++ 10 ++ ++ ++ 2 ++ ++ ++ 2 ++ ++ ++ 2 ++ ++ ++ 2 ++ ++ ++ 2 ++ ++ ++ 2 ++ ++ ++ 7 ++ ++ ++ ++ ++ 10 ++ ++ ++ 10 ++ ++ ++ 2 ++ ++ ++ 2 ++ ++ ++ 2 ++ ++ ++ 2 ++ ++ ++ 2 ++ ++ ++ 2 ++ ++ ++ 7 ++ ++ ++ ++ ++ 33 ++ ++ ++ 33 ++ ++ ++ 33 ++ ++ ++ 23 ++ ++ ++ 7 ++ ++ ++ ++ ++ 157 ++ ++ ++ 13 ++ ++ ++ ++ ++ 165 ++ ++ ++ 13 ++ ++ ++ ++ ++ 169 ++ ++ ++ 13 ++ ++ ++ + + + +@@ -68527,6 +68654,47 @@ + + + ++ ++ ++ ++ 53 ++ ++ ++ 10 ++ ++ ++ 31 ++ ++ ++ 2 ++ ++ ++ 38 ++ ++ ++ 9 ++ ++ ++ ++ ++ ++ ++ 36 ++ ++ ++ 2 ++ ++ ++ 2 ++ ++ ++ 7 ++ ++ ++ 10 ++ ++ ++ + + + +@@ -68610,6 +68778,30 @@ + + + ++ ++ ++ ++ 63 ++ ++ ++ 13 ++ ++ ++ 10 ++ ++ ++ 7 ++ ++ ++ ++ ++ 25 ++ ++ ++ 7 ++ ++ ++ + + + +@@ -70689,6 +70881,19 @@ + + + ++ ++ ++ ++ 13 ++ ++ ++ 2 ++ ++ ++ 7 ++ ++ ++ + + + +@@ -72778,6 +72983,49 @@ + + + ++ ++ ++ ++ 0 ++ ++ ++ 0 ++ ++ ++ 0 ++ ++ ++ 0 ++ ++ ++ ++ ++ 2 ++ ++ ++ 15 ++ ++ ++ 17 ++ ++ ++ 7 ++ ++ ++ ++ ++ ++ ++ 2 ++ ++ ++ 13 ++ ++ ++ 15 ++ ++ ++ + + + +@@ -72906,6 +73154,95 @@ + + + ++ ++ ++ ++ 18 ++ ++ ++ 18 ++ ++ ++ ++ ++ 0 ++ ++ ++ 7 ++ ++ ++ ++ ++ ++ ++ 60 ++ ++ ++ 245 ++ ++ ++ 10 ++ ++ ++ 7 ++ ++ ++ 12 ++ ++ ++ ++ ++ 15 ++ ++ ++ 7 ++ ++ ++ ++ ++ 15 ++ ++ ++ 7 ++ ++ ++ ++ ++ 15 ++ ++ ++ 7 ++ ++ ++ ++ ++ ++ ++ 13 ++ ++ ++ 17 ++ ++ ++ 7 ++ ++ ++ ++ ++ ++ ++ 14 ++ ++ ++ ++ ++ 47 ++ ++ ++ 7 ++ ++ ++ + + + +@@ -73374,6 +73711,56 @@ + + + ++ ++ ++ ++ 10 ++ ++ ++ 2 ++ ++ ++ 7 ++ ++ ++ ++ ++ ++ ++ 19 ++ ++ ++ 41 ++ ++ ++ 21 ++ ++ ++ 7 ++ ++ ++ ++ ++ 212 ++ ++ ++ 13 ++ ++ ++ ++ ++ ++ ++ 99 ++ ++ ++ 21 ++ ++ ++ 7 ++ ++ ++ + + + -- Efraim Flashner אפרים פלשנר GPG key = A28B F40C 3E55 1372 662D 14F7 41AA E7DC CA3D 8351 Confidentiality cannot be guaranteed on emails sent or received unencrypted From debbugs-submit-bounces@debbugs.gnu.org Mon Dec 16 12:29:08 2024 Received: (at 74609) by debbugs.gnu.org; 16 Dec 2024 17:29:08 +0000 Received: from localhost ([127.0.0.1]:55888 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1tNEu3-0006Kb-5X for submit@debbugs.gnu.org; Mon, 16 Dec 2024 12:29:08 -0500 Received: from mail-wr1-f43.google.com ([209.85.221.43]:42249) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1tNEtw-0006If-9J for 74609@debbugs.gnu.org; Mon, 16 Dec 2024 12:29:01 -0500 Received: by mail-wr1-f43.google.com with SMTP id ffacd0b85a97d-3862b364538so2512669f8f.1 for <74609@debbugs.gnu.org>; Mon, 16 Dec 2024 09:29:00 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1734370075; x=1734974875; darn=debbugs.gnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:sender:from:to:cc:subject:date :message-id:reply-to; bh=OYKC8JLScjx3bugoCM5IwQxgg8PZTeiH6B0bF7tiVbk=; b=Ksq85n18By97IOQpkqqVr1abARUKcSJPt5n0qeE6k3GqJkk7jD3HtNcvsOUTpbE94A DoYBBRVfxSi/g8Aj82e5uaaYhCE6Z98o9WVaRFGsdmm5sdABuj8giUBV1Z/sNz5XL9CU y38bI7CxGVQVGwtcTIa3SG6I+hxLumjh2D0QoXy1ACxIT0xxuq67mCrFnaBCvTBdduNG VJDeuDn+um6hxX7TFF+zNMVZW3jK8X8wh7JyOjCC1Tr1wKvfbRqeBRYw8pzo4UhPIZCJ CSBEkVasGEhdhcHAe7CYLdCU8IMmPVGbMgPPdXnudNULKUihb9SY9BlGHeycpVUnIkLC WWQQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1734370075; x=1734974875; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:sender:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=OYKC8JLScjx3bugoCM5IwQxgg8PZTeiH6B0bF7tiVbk=; b=IckT2Qc2Vf1tgi/GKXOwcZJs9Mlim8js/5XITkVM+WkqqgDVNlle5ABRrXKADoaSyE jo1EL9CdUUmtdz8hQRTV/bk5Onk6z+nTeDJ2KyVdXlGbg1fPnyqYc5qEL8DAYnOoSsKq pHrcRO13IKOzt+8u25jDsP6XiZMQqMQMptdHHEJWLCXJbH1kf+jmxoO22dLyWTIPjztH h3nTpicl5tmx/Zs8b0BVVs3TOrgNS4R3DQedLARS6DQwMbUST1MFo7YuYwDF3Frtbcc/ lfC6uyZOBEU8clgd15V0YgWYW5L19RJjsWZuybm85JaJ00q+yOM3nWZuyOhY6Jg/XQ1K SIXg== X-Gm-Message-State: AOJu0YzKpCtiNjOCCBbjxUx3KUS0V4iVuimMrg6Xia4udVCieyXdWuL4 8LAB5essM1ndU/HnIrXs5kNM8WW+VVCE/a8YHiy2AYuRsuh7ZaTtysjxG+A7 X-Gm-Gg: ASbGncvLSPKXz/d2/5HdPS4sGtse1//0yiB9jE9BuB9+TdInUlFd5x3mFdCfJGBenba q6BP7DJWW1Gh5r/mNxTzMdEjnmVsws+zCUPB86LQmkILeReIIBWOlixIl1jP6a3Rqf3kQMCUySg 9fvuX0SUMhaKhZqnUO+TyiAjAr4TcthOgHT8L9yuhoWpOnIRJ0H4jQd7lWFajmOsdN6QjDWda49 8icmlBoGsCu1QqkmSnpk9ySbHWHWMwnQvI3zHKIi2zlelgzKoAUd0FaKzsjSw== X-Google-Smtp-Source: AGHT+IEZACog37dFUNmlXrw1lKdzv4Aef/YPuCoAhPD0kS3aXABIN3Sj/z3uL8e6z6KbuI1w9PO+7A== X-Received: by 2002:a05:6000:1f89:b0:385:e8e7:d09a with SMTP id ffacd0b85a97d-388db22663cmr171278f8f.2.1734370074653; Mon, 16 Dec 2024 09:27:54 -0800 (PST) Received: from localhost ([31.210.180.118]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-388c801af46sm8677316f8f.61.2024.12.16.09.27.53 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 16 Dec 2024 09:27:54 -0800 (PST) From: Efraim Flashner To: 74609@debbugs.gnu.org Subject: [PATCH 20/21] gnu: Add libgdiplus. Date: Mon, 16 Dec 2024 19:26:43 +0200 Message-ID: <0c79983d4bb80c1ce3f577af0f85e6a414440c53.1734369315.git.efraim@flashner.co.il> X-Mailer: git-send-email 2.46.0 In-Reply-To: References: MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Spam-Score: 0.3 (/) X-Debbugs-Envelope-To: 74609 Cc: aaron.covrig.us@ieee.org, ludo@gnu.org, unmush , richard@freakingpenguin.com, unmush@proton.me, janneke@gnu.org 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: -0.7 (/) From: unmush * gnu/packages/dotnet.scm (libgdiplus): New variable. Change-Id: I492254c09fd6c9c8b0bc633e1f95665bfa9fe96a --- gnu/packages/dotnet.scm | 44 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) diff --git a/gnu/packages/dotnet.scm b/gnu/packages/dotnet.scm index fc5585ecc7e..03e18e29c6d 100644 --- a/gnu/packages/dotnet.scm +++ b/gnu/packages/dotnet.scm @@ -1590,3 +1590,47 @@ (define-public mono-5.10.0 (("Facades/System\\.Data\\.Common_REFS := " all) (string-append all "System System.Xml "))) (apply invoke "make" "CSC=mcs" make-flags))))))))))) + +(define-public libgdiplus + (package + (name "libgdiplus") + (version "6.2") + (source + (origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/mono/libgdiplus.git") + (commit "94a49875487e296376f209fe64b921c6020f74c0"))) + (file-name (git-file-name name version)) + (sha256 + (base32 + "1gwmhrddr8kdlfprjqcd6gqiy8p5v8sl9215dbd949j1l76szl9v")) + (modules '((guix build utils))) + (snippet #~(substitute* "./Makefile.am" + (("\\./update_submodules\\.sh") + ":"))))) + (build-system gnu-build-system) + (native-inputs + (list automake + autoconf + googletest-1.8 + libtool + pkg-config + which)) + (inputs (list cairo + freetype + fontconfig + gettext-minimal + giflib + glib + libexif + libjpeg-turbo + libpng + libtiff + libx11)) + (synopsis "Open Source implementation of the GDI+ API") + (description "Libgdiplus is the Mono library that provides a +GDI+-compatible API on non-Windows operating systems. It uses Cairo to do +most of the heavy lifting.") + (home-page "https://github.com/mono/libgdiplus") + (license license:expat))) -- Efraim Flashner אפרים פלשנר GPG key = A28B F40C 3E55 1372 662D 14F7 41AA E7DC CA3D 8351 Confidentiality cannot be guaranteed on emails sent or received unencrypted From debbugs-submit-bounces@debbugs.gnu.org Mon Dec 16 12:29:22 2024 Received: (at 74609) by debbugs.gnu.org; 16 Dec 2024 17:29:22 +0000 Received: from localhost ([127.0.0.1]:55906 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1tNEuE-0006NI-F7 for submit@debbugs.gnu.org; Mon, 16 Dec 2024 12:29:22 -0500 Received: from mail-wr1-f42.google.com ([209.85.221.42]:55358) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1tNEty-0006Iu-T5 for 74609@debbugs.gnu.org; Mon, 16 Dec 2024 12:29:06 -0500 Received: by mail-wr1-f42.google.com with SMTP id ffacd0b85a97d-37ed3bd6114so2161263f8f.2 for <74609@debbugs.gnu.org>; Mon, 16 Dec 2024 09:29:02 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1734370077; x=1734974877; darn=debbugs.gnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:sender:from:to:cc:subject:date :message-id:reply-to; bh=PR8STIUu+9lg4sFlh4Qi528LQr7kAmK0SOlNFdizcco=; b=Nv4/MB20JFamb0DlqX7+FmVItE74JMdExpT3LgPc7BWnjJvdT/EXzKfQ0kSIcccyAI g27E/7eHb946WrtijtCZhH1RKmFjkVDGG1H8byxiudFxBnhocRJFupRFTJJMBwsnNf3f BnECg7bA1VsP3G6P+6Vd+19FUF9fUmRG4MBx8kS+6woGJIbwMyMD67+jDtNPPx4iW8mH Yykwa9U8fYpM9gRl7eUJU2zBTIATPB7AarUrUy7LXLV9WDO/vMLmIVnvghOs6DM+UPdx y2b7ajLxQ/w6DY2JV5yw9XJO73XMdT6XXv523bnBF768TOHmQvQtFLgCiT15aZq1n3kn 7iuQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1734370077; x=1734974877; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:sender:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=PR8STIUu+9lg4sFlh4Qi528LQr7kAmK0SOlNFdizcco=; b=G4n2PX1Jw/z42YrTg0MJZiSl267bTyQ2rloVF7ABdw3ZUBMFrhyjY+27QCBLfSoM9I Z5ltYEGCXAvtXo+ls5HbkfN6IMikMV71c1HauRMOMxep/hvWy4Ar6yOgG/eHVfWyCJXW OB1Cz3Wot0aJ1LmKWvKfZDbEQW0t68rrmOwnm0othAEW5h2u88x47h2kMeC/Gyl87u9F Uk9K5RHR8yqZEyeTQirfddXLo95c6iyvbNOrmhtTDy7+m4lC0QxtB8N+NdmS5b4L064y 85NPw5sxhsycKdS/urfzdb08e9eL/VnSYV6pxaQ2wPmGAM2O2ODFf1gXrxBn5ey6JU1r iZsw== X-Gm-Message-State: AOJu0Ywr5UMo/dIkmz0lTlSaXT7NmrFAwC3+lVxT076EFIYiV6gwrNYt EFoxGxJ5HkC9okOpFnopfWqSfo9l96nilADXk8V+64gPHRC2j24CKhrsaOml X-Gm-Gg: ASbGncuTEIxvxt/NApCn7zt/UwbnSk0AtZRVgh1AUBGDL0KkOhVuDlw0bWk8NSSZtMh INZNlC4szhJacser1F8DM4vORU4Mnk0ildb4RFQijvyNtOr5QfNWSC/ji0bYxXJ2dlJ2bJsnMac Q/302bOM/8TMqXBVVjpk1lbPOoOYrQFRw2ME3I2ihnXczu13SmYO3vNRR9uQdi9CGWGYiws2gxh hji8RDjOTU2MgI2QSTqSJVfRIrXQv8TM5PaB+KK13YMqtUjpRlBpjU48VafBw== X-Google-Smtp-Source: AGHT+IFnnswhDduT1O4ivnDl3Soi6RoMGXBqnBiccKVA6rRsdpT/lgJ3bkHfawtgZT9Gp8VB1qMk6w== X-Received: by 2002:a05:6000:71a:b0:385:e17a:ce6f with SMTP id ffacd0b85a97d-38880acce62mr11377409f8f.24.1734370076847; Mon, 16 Dec 2024 09:27:56 -0800 (PST) Received: from localhost ([31.210.180.118]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-436362b64a5sm92378445e9.29.2024.12.16.09.27.55 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 16 Dec 2024 09:27:56 -0800 (PST) From: Efraim Flashner To: 74609@debbugs.gnu.org Subject: [PATCH 21/21] gnu: Add mono-6.12.0. Date: Mon, 16 Dec 2024 19:26:44 +0200 Message-ID: <83835bd9c18faf25c98fbf2d57429026f6b7e03c.1734369315.git.efraim@flashner.co.il> X-Mailer: git-send-email 2.46.0 In-Reply-To: References: MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Spam-Score: 0.3 (/) X-Debbugs-Envelope-To: 74609 Cc: aaron.covrig.us@ieee.org, ludo@gnu.org, unmush , richard@freakingpenguin.com, unmush@proton.me, janneke@gnu.org 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: -0.7 (/) From: unmush This includes a patch to add support for a element to mono's *.dll.config and *.exe.config files. See mono-6.12.0-add-runpath.patch for details. * gnu/packages/dotnet.scm (mono-6.12.0-external-repo-specs, mono-6.12.0): New variable. * gnu/packages/patches/mono-6.12.0-{add-runpath,fix-AssemblyResolver,fix-ConditionParser}.patch: New patches. * gnu/local.mk (dist_patch_DATA): Register new patches. Change-Id: I9d5bd5d366c368eb235483411818c90374bfc4d4 --- gnu/local.mk | 3 + gnu/packages/dotnet.scm | 194 ++++++++++++++ .../patches/mono-6.12.0-add-runpath.patch | 185 ++++++++++++++ .../mono-6.12.0-fix-AssemblyResolver.patch | 236 ++++++++++++++++++ .../mono-6.12.0-fix-ConditionParser.patch | 46 ++++ 5 files changed, 664 insertions(+) create mode 100644 gnu/packages/patches/mono-6.12.0-add-runpath.patch create mode 100644 gnu/packages/patches/mono-6.12.0-fix-AssemblyResolver.patch create mode 100644 gnu/packages/patches/mono-6.12.0-fix-ConditionParser.patch diff --git a/gnu/local.mk b/gnu/local.mk index 35a2d7e55a7..8722c2a33d9 100644 --- a/gnu/local.mk +++ b/gnu/local.mk @@ -1830,6 +1830,9 @@ dist_patch_DATA = \ %D%/packages/patches/mono-5.4.0-patches.patch \ %D%/packages/patches/mono-5.8.0-patches.patch \ %D%/packages/patches/mono-5.10.0-later-mcs-changes.patch \ + %D%/packages/patches/mono-6.12.0-add-runpath.patch \ + %D%/packages/patches/mono-6.12.0-fix-AssemblyResolver.patch \ + %D%/packages/patches/mono-6.12.0-fix-ConditionParser.patch \ %D%/packages/patches/mono-mcs-patches-from-5.10.0.patch \ %D%/packages/patches/mosaicatcher-unbundle-htslib.patch \ %D%/packages/patches/mrrescue-support-love-11.patch \ diff --git a/gnu/packages/dotnet.scm b/gnu/packages/dotnet.scm index 03e18e29c6d..22dcf88adb4 100644 --- a/gnu/packages/dotnet.scm +++ b/gnu/packages/dotnet.scm @@ -1634,3 +1634,197 @@ (define-public libgdiplus most of the heavy lifting.") (home-page "https://github.com/mono/libgdiplus") (license license:expat))) + +(define mono-6.12.0-external-repo-specs + '(("api-doc-tools" "5da8127af9e68c9d58a90aa9de21f57491d81261" + "0rq8dxmy5av36nd298k60d8s386zhqlw63yn2ywc0416xsflscg4" + #:recursive? #t) + ("api-snapshot" "808e8a9e4be8d38e097d2b0919cac37bc195844a" + "1i5migdw649bmxqii99q2hd6vka11wlcphfrm98kb7pprz4k401a") + ("aspnetwebstack" "e77b12e6cc5ed260a98447f609e887337e44e299" + "0rks344qr4fmp3fs1264d2qkmm348m8d1kjd7z4l94iiirwn1fq1") + ;; (("https://github.com/Unity-Technologies/bdwgc" "bdwgc") + ;; "a27eddb837d613cb4cf436405c23ce39ed16a86d" + ;; "") + (("reference-assemblies" "binary-reference-assemblies") + "e68046d5106aa0349c23f95821456955fc15b96b" + "1mqpz274qdhl84y6x8bazrfmajcf6qagiks2g0gyg4qyqwgrp490") + ("bockbuild" "3bd44f6784b85b1ece8b00b13d12cf416f5a87e7" + "0z3d8qylfwnlklpcvsmsgy5n248gcff5vmzqjzalfj7d1h7vcjxs") + ("boringssl" "296137cf989688b03ed89f72cd7bfd86d470441e" + "11ghdayfcvysnh1617bj478hxrg7b43jpk7vgafm6jb7ykpxl8fa") + ("cecil" "8021f3fbe75715a1762e725594d8c00cce3679d8" + "0j19lwbs30y2xz8myk0fbxs4hbal1p8vqjmnkvn301v0xxacynxm") + (("cecil" "cecil-legacy") "33d50b874fd527118bc361d83de3d494e8bb55e1" + "1p4hl1796ib26ykyf5snl6cj0lx0v7mjh0xqhjw6qdh753nsjyhb") + ("corefx" "c4eeab9fc2faa0195a812e552cd73ee298d39386" + "03530pf6dddqlihvb83m9z34bark8mzrffnrclq726gndfg4vqs8") + ("corert" "11136ad55767485063226be08cfbd32ed574ca43" + "1g0q83fff13237nwsfcmk7fmzwx0kv93zsqqybcigwip5x6ani8f") + ("helix-binaries" "64b3a67631ac8a08ff82d61087cfbfc664eb4af8" + "1f6kkpbzj3bx9p1hb36kzjq0ppckk4rpmjnr82hyq7y18fwikfd7") + ("ikdasm" "f0fd66ea063929ef5d51aafdb10832164835bb0f" + "0313pvmmjh01h9b306jd6cd6fcbnbxaglaj81m0l0acf4yn7zb10") + (("ikvm-fork" "ikvm") "08266ac8c0b620cc929ffaeb1f23ac37629ce825" + "1g0v1v8nvxkwq7w9qyqhf9kgmxq3qm6rsw4al8x0w3dmbgxjhqjv") + ("illinker-test-assets" "ec9eb51af2eb07dbe50a2724db826bf3bfb930a6" + "1b4vq4jbgnl4lzffg02n5w1sppg2k6bfks0150pj403sbnml85gl") + ("linker" "ed4a9413489aa29a70e41f94c3dac5621099f734" + "16rdpch9anarnhczi441a9zna4rz93jwpb31x0dzrb4j03cxajg2") + ;; (("https://github.com/dotnet/llvm-project" "llvm-project") + ;; "7dfdea1267f0a40955e02567dcbcd1bcb987e825" + ;; "") + ("Newtonsoft.Json" "471c3e0803a9f40a0acc8aeceb31de6ff93a52c4" + "0dgngd5hqk6yhlg40kabn6qdnknm32zcx9q6bm2w31csnsk5978s") + (("NuGet.BuildTasks" "nuget-buildtasks") + "99558479578b1d6af0f443bb411bc3520fcbae5c" + "1434m6z9sb7bvki9ba6iinqpmh4a4iyld76jz10qz07sycklflq3") + (("NUnitLite" "nunit-lite") "a977ca57572c545e108b56ef32aa3f7ff8287611" + "02zwdfpw8pazllwbp4hkzqwfql98g4854diykqdb9wa0vrb8w4sj") + ;; ("roslyn-binaries" "1c6482470cd219dcc7503259a20f26a1723f20ec" + ;; "") + ("rx" "b29a4b0fda609e0af33ff54ed13652b6ccf0e05e" + "1n1jwhmsbkcv2d806immcpzkb72rz04xy98myw355a8w5ah25yiv") + ;; ("xunit-binaries" "8f6e62e1c016dfb15420852e220e07091923734a" + ;; "") + )) + +(define-public mono-6.12.0 + (package + (inherit mono-5.10.0) + (version "6.12.0.206") + (name "mono") + (source (origin + (method git-fetch) + (uri + (git-reference + (url "https://gitlab.winehq.org/mono/mono.git") + (commit (string-append "mono-" "6.12.0.206")))) + (file-name (git-file-name name version)) + (sha256 + (base32 + "1cw9v53bgbc6v7xmp5ij76y6inb6sz1g1zx2jk825rxshq96alvk")) + (modules '((guix build utils) + (ice-9 string-fun))) + (snippet #~(begin + #$(add-external-repos + mono-6.12.0-external-repo-specs) + #$@prepare-mono-source-0)) + (patches + (search-patches + "mono-6.12.0-fix-ConditionParser.patch" + "mono-6.12.0-add-runpath.patch" + "mono-6.12.0-fix-AssemblyResolver.patch")))) + (native-inputs (modify-inputs (package-native-inputs mono-5.10.0) + (replace "mono" mono-5.10.0) + (append (default-python)))) + (inputs (modify-inputs (package-inputs mono-5.10.0) + (append libgdiplus))) + (arguments + (substitute-keyword-arguments (package-arguments mono-5.10.0) + ((#:make-flags make-flags #~'()) + #~(append #$make-flags + (list + (string-append "PLATFORM_DISABLED_TESTS=" + ;; segfaults (!), reason unknown + "safehandle.2.exe" + ;; unclear why these fail + "bug-10834.exe" + "bug-60848.exe" + ;; these are tests of microsoft + ;; telemetry. They fail because + ;; microsoft telemetry is only + ;; enabled on OSX. No idea why + ;; these tests are run by default. + "merp-crash-test.exe" + "merp-json-valid.exe")))) + ((#:phases phases #~%standard-phases) + #~(modify-phases #$phases + (delete 'patch-sub-autogen.sh-shebang) + ;; Our 5.10.0 compiler has been rather souped up. + (add-after 'unpack 'disable-profile-version-check + (lambda _ + (substitute* "mcs/build/common/basic-profile-check.cs" + (("min_mono_version = .*") + "min_mono_version = new Version (0, 0);\n")))) + (add-after 'unpack 'disable-c#-8.0-tests + ;; These aren't compilable by mcs + (lambda _ + (substitute* "mono/mini/Makefile.am.in" + (("-langversion:8\\.0") + "")) + (substitute* "mono/tests/Makefile.am" + ((" (dim-generic|dim-issue-18917|interface-2|delegate18|generic-unmanaged-constraint|async-generic-enum)\\.cs.*") + "")))) + (add-after 'unpack 'disable-verification-error + (lambda _ + ;; For some reason verification fails complaining about a bunch + ;; of missing icalls. + (substitute* "runtime/Makefile.am" + ((" fi; done; done;") + " fi; done; done; ok=:;")))) + ;; This requires binary blobs to be used, it doesn't provide a + ;; clear way to regenerate them and no corresponding source is + ;; linked, plus from what little I know of it it sounds like it's + ;; not something we need at all? + (add-after 'unpack 'disable-helix-client + (lambda _ + (substitute* "mcs/tools/Makefile" + (("mono-helix-client") + "")))) + (replace 'build-reference-assemblies + (lambda* (#:key make-flags #:allow-other-keys) + (let ((top (getcwd))) + (with-directory-excursion + "external/binary-reference-assemblies" + (substitute* (find-files "." "^Makefile$") + (("CSC_COMMON_ARGS := " all) + (string-append all "-delaysign+ ")) + (("IBM\\.Data\\.DB2_REFS := " all) + (string-append all "System.Xml ")) + (("Mono\\.Data\\.Sqlite_REFS := " all) + (string-append all "System.Xml ")) + (("System\\.Data\\.DataSetExtensions_REFS := " all) + (string-append all "System.Xml ")) + (("System\\.Data\\.OracleClient_REFS := " all) + (string-append all "System.Xml ")) + (("System\\.IdentityModel_REFS := " all) + (string-append all "System.Configuration ")) + (("System\\.Design_REFS := " all) + (string-append all "Accessibility ")) + (("System\\.Web\\.Extensions\\.Design_REFS := " all) + (string-append all "System.Windows.Forms System.Web ")) + (("System\\.ServiceModel\\.Routing_REFS := " all) + (string-append all "System.Xml ")) + (("System\\.Web\\.Abstractions_REFS := " all) + (string-append all "System ")) + (("System\\.Reactive\\.Windows\\.Forms_REFS := " all) + (string-append all "System ")) + (("System\\.Windows\\.Forms\\.DataVisualization_REFS := " all) + (string-append all "Accessibility ")) + (("Facades/System\\.ServiceModel\\.Primitives_REFS := " all) + (string-append all "System.Xml ")) + (("Facades/System\\.Dynamic\\.Runtime_REFS := " all) + (string-append all "System ")) + (("Facades/System\\.Xml\\.XDocument_REFS := " all) + (string-append all "System.Xml ")) + (("Facades/System\\.Runtime\\.Serialization.Xml_REFS := " all) + (string-append all "System.Xml ")) + (("Facades/System\\.Data\\.Common_REFS := " all) + (string-append all "System System.Xml "))) + (substitute* "build/monodroid/Makefile" + (("ECMA_KEY := \\.\\./\\.\\./\\.\\./\\.\\./\\.\\./mono/") + ;; it should only be 4 directories up, and it's in + ;; mcs/, not mono/mcs/ + "ECMA_KEY := ../../../../")) + (apply invoke "make" "CSC=mcs" make-flags))))) + (replace 'check + (lambda* (#:key tests? (make-flags '()) #:allow-other-keys) + (when tests? + ;; There are more tests than these, but they depend on + ;; external/xunit-binaries, so we limit ourselves to the + ;; tests that debian runs. + (with-directory-excursion "mono/mini" + (apply invoke "make" "check" make-flags)) + (with-directory-excursion "mono/tests" + (apply invoke "make" "check" make-flags))))))))))) diff --git a/gnu/packages/patches/mono-6.12.0-add-runpath.patch b/gnu/packages/patches/mono-6.12.0-add-runpath.patch new file mode 100644 index 00000000000..3062bd6a0de --- /dev/null +++ b/gnu/packages/patches/mono-6.12.0-add-runpath.patch @@ -0,0 +1,185 @@ +mono: metadata: add element to .config files. + +This new element is of the form: + + + +(the : will actually be whatever G_SEARCHPATH_SEPARATOR_S is, so likely ; on +windows and : elsewhere). + +* mono/metadata/metadata-internals.h (struct _MonoImage): new 'runpath' field. +* mono/metadata/mono-config.c (runpath_init, runpath_start, runpath_handler): + new functions and parser using them to populate runpath field from + element. + (mono_config_init): register runpath_handler. +* mono/metadata/assembly.c (mono_assembly_load_full_gac_base_default): new + 'requesting' parameter, use it to search the requesting assembly's runpath + first. + (mono_assembly_request_byname_nosearch): use it. + + +diff --git a/mono/metadata/assembly.c b/mono/metadata/assembly.c +index f9feaacf2c1..8c71ad0eb95 100644 +--- a/mono/metadata/assembly.c ++++ b/mono/metadata/assembly.c +@@ -376,7 +376,7 @@ mono_assembly_invoke_search_hook_internal (MonoAssemblyLoadContext *alc, MonoAss + static MonoAssembly* + mono_assembly_request_byname_nosearch (MonoAssemblyName *aname, const MonoAssemblyByNameRequest *req, MonoImageOpenStatus *status); + static MonoAssembly* +-mono_assembly_load_full_gac_base_default (MonoAssemblyName *aname, const char *basedir, MonoAssemblyLoadContext *alc, MonoAssemblyContextKind asmctx, MonoImageOpenStatus *status); ++mono_assembly_load_full_gac_base_default (MonoAssemblyName *aname, MonoAssembly *requesting, const char *basedir, MonoAssemblyLoadContext *alc, MonoAssemblyContextKind asmctx, MonoImageOpenStatus *status); + static MonoAssembly* + chain_redirections_loadfrom (MonoAssemblyLoadContext *alc, MonoImage *image, MonoImageOpenStatus *out_status); + static MonoAssembly* +@@ -4655,7 +4655,7 @@ mono_assembly_request_byname_nosearch (MonoAssemblyName *aname, + } + + #ifndef ENABLE_NETCORE +- result = mono_assembly_load_full_gac_base_default (aname, req->basedir, req->request.alc, req->request.asmctx, status); ++ result = mono_assembly_load_full_gac_base_default (aname, req->requesting_assembly, req->basedir, req->request.alc, req->request.asmctx, status); + #endif + return result; + } +@@ -4667,6 +4667,7 @@ mono_assembly_request_byname_nosearch (MonoAssemblyName *aname, + */ + MonoAssembly* + mono_assembly_load_full_gac_base_default (MonoAssemblyName *aname, ++ MonoAssembly *requesting, + const char *basedir, + MonoAssemblyLoadContext *alc, + MonoAssemblyContextKind asmctx, +@@ -4718,6 +4719,23 @@ mono_assembly_load_full_gac_base_default (MonoAssemblyName *aname, + filename = g_strconcat (aname->name, ext, (const char*)NULL); + } + ++ if (requesting ++ && requesting->image ++ && requesting->image->runpath) { ++ char **runpath = requesting->image->runpath; ++ int j; ++ for (j = 0; runpath[j]; j++) { ++ fullpath = g_build_filename (runpath[j], filename, NULL); ++ result = mono_assembly_request_open (fullpath, &req, status); ++ g_free (fullpath); ++ if (result) { ++ result->in_gac = FALSE; ++ g_free (filename); ++ return result; ++ } ++ } ++ } ++ + #ifndef DISABLE_GAC + const gboolean refonly = asmctx == MONO_ASMCTX_REFONLY; + +diff --git a/mono/metadata/image.c b/mono/metadata/image.c +index e0b86dd3d09..12a8094e4e0 100644 +--- a/mono/metadata/image.c ++++ b/mono/metadata/image.c +@@ -2363,6 +2363,9 @@ mono_image_close_except_pools (MonoImage *image) + + mono_metadata_clean_for_image (image); + ++ if (image->runpath) ++ g_strfreev (image->runpath); ++ + /* + * The caches inside a MonoImage might refer to metadata which is stored in referenced + * assemblies, so we can't release these references in mono_assembly_close () since the +diff --git a/mono/metadata/metadata-internals.h b/mono/metadata/metadata-internals.h +index 9388d69b0fd..93f4b880c61 100644 +--- a/mono/metadata/metadata-internals.h ++++ b/mono/metadata/metadata-internals.h +@@ -423,6 +423,12 @@ struct _MonoImage { + /**/ + MonoTableInfo tables [MONO_TABLE_NUM]; + ++ /* ++ Search path to be tried first when looking for assemblies referenced by ++ this image, or NULL. Is a NULL-terminated vector. ++ */ ++ char **runpath; ++ + /* + * references is initialized only by using the mono_assembly_open + * function, and not by using the lowlevel mono_image_open. +diff --git a/mono/metadata/mono-config.c b/mono/metadata/mono-config.c +index d973de53c8c..8888c7b4fac 100644 +--- a/mono/metadata/mono-config.c ++++ b/mono/metadata/mono-config.c +@@ -21,6 +21,7 @@ + #include "mono/metadata/metadata-internals.h" + #include "mono/metadata/object-internals.h" + #include "mono/utils/mono-logger-internals.h" ++#include "mono/utils/mono-path.h" + + #if defined(TARGET_PS3) + #define CONFIG_OS "CellOS" +@@ -464,6 +465,59 @@ aot_cache_handler = { + NULL, /* finish */ + }; + ++static void* ++runpath_init (MonoImage *assembly) ++{ ++ return assembly; ++} ++ ++static void ++runpath_start (gpointer user_data, ++ const gchar *element_name, ++ const gchar **attribute_names, ++ const gchar **attribute_values) ++{ ++ MonoImage *assembly = (MonoImage *) user_data; ++ int i; ++ ++ if (strcmp (element_name, "runpath") != 0) ++ return; ++ ++ for (i = 0; attribute_names[i]; i++) ++ { ++ if(!strcmp (attribute_names [i], "path")) ++ { ++ char **splitted, **dest; ++ ++ splitted = g_strsplit (attribute_values[i], ++ G_SEARCHPATH_SEPARATOR_S, ++ 1000); ++ if (assembly->runpath) ++ g_strfreev (assembly->runpath); ++ assembly->runpath = dest = splitted; ++ while (*splitted) { ++ char *tmp = *splitted; ++ if (*tmp) ++ *dest++ = mono_path_canonicalize (tmp); ++ g_free (tmp); ++ splitted++; ++ } ++ *dest = *splitted; ++ break; ++ } ++ } ++} ++ ++static const MonoParseHandler ++runpath_handler = { ++ "runpath", ++ runpath_init, ++ runpath_start, ++ NULL, /* text */ ++ NULL, /* end */ ++ NULL, /* finish */ ++}; ++ + static int inited = 0; + + static void +@@ -476,6 +530,7 @@ mono_config_init (void) + #endif + g_hash_table_insert (config_handlers, (gpointer) legacyUEP_handler.element_name, (gpointer) &legacyUEP_handler); + g_hash_table_insert (config_handlers, (gpointer) aot_cache_handler.element_name, (gpointer) &aot_cache_handler); ++ g_hash_table_insert (config_handlers, (gpointer) runpath_handler.element_name, (gpointer) &runpath_handler); + } + + /** diff --git a/gnu/packages/patches/mono-6.12.0-fix-AssemblyResolver.patch b/gnu/packages/patches/mono-6.12.0-fix-AssemblyResolver.patch new file mode 100644 index 00000000000..05db7b9cdd3 --- /dev/null +++ b/gnu/packages/patches/mono-6.12.0-fix-AssemblyResolver.patch @@ -0,0 +1,236 @@ +diff --git a/mcs/class/Microsoft.Build.Tasks/Microsoft.Build.Tasks/AssemblyResolver.cs b/mcs/class/Microsoft.Build.Tasks/Microsoft.Build.Tasks/AssemblyResolver.cs +index 5e0ec480956..9daf9d6920b 100644 +--- a/mcs/class/Microsoft.Build.Tasks/Microsoft.Build.Tasks/AssemblyResolver.cs ++++ b/mcs/class/Microsoft.Build.Tasks/Microsoft.Build.Tasks/AssemblyResolver.cs +@@ -67,54 +67,56 @@ public void ResetSearchLogger () + search_log.Clear (); + } + +- string GetGacPath () ++ string[] GetGacPaths () + { + // NOTE: code from mcs/tools/gacutil/driver.cs +- PropertyInfo gac = typeof (System.Environment).GetProperty ("GacPath", BindingFlags.Static | BindingFlags.NonPublic); ++ PropertyInfo gacs = typeof (System.Environment).GetProperty ("GacPaths", BindingFlags.Static | BindingFlags.NonPublic); + +- if (gac == null) ++ if (gacs == null) + return null; + +- MethodInfo get_gac = gac.GetGetMethod (true); +- return (string) get_gac.Invoke (null, null); ++ MethodInfo get_gacs = gacs.GetGetMethod (true); ++ return (string[]) get_gacs.Invoke (null, null); + } + + void GatherGacAssemblies () + { +- string gac_path = GetGacPath (); +- if (gac_path == null) +- throw new InvalidOperationException ("XBuild must be run on Mono runtime"); +- if (!Directory.Exists (gac_path)) +- return; // in case mono isn't "installed". +- +- Version version; +- DirectoryInfo version_info, assembly_info; +- +- foreach (string assembly_name in Directory.GetDirectories (gac_path)) { +- assembly_info = new DirectoryInfo (assembly_name); +- foreach (string version_token in Directory.GetDirectories (assembly_name)) { +- foreach (string file in Directory.GetFiles (version_token, "*.dll")) { +- version_info = new DirectoryInfo (version_token); +- version = new Version (version_info.Name.Split ( +- new char [] {'_'}, StringSplitOptions.RemoveEmptyEntries) [0]); +- +- Dictionary assembliesByVersion = new Dictionary (); +- if (!gac.TryGetValue (assembly_info.Name, out assembliesByVersion)) { +- assembliesByVersion = new Dictionary (); +- gac.Add (assembly_info.Name, assembliesByVersion); +- } +- +- string found_file; +- if (assembliesByVersion.TryGetValue (version, out found_file) && +- File.GetLastWriteTime (file) <= File.GetLastWriteTime (found_file)) +- // Duplicate found, take the newer file +- continue; +- +- assembliesByVersion [version] = file; +- } +- } +- } +- } ++ string[] gac_paths = GetGacPaths (); ++ if (gac_paths == null) ++ throw new InvalidOperationException ("XBuild must be run on Mono runtime"); ++ if (gac_paths.Length == 0 || !Directory.Exists (gac_paths[0])) ++ return; // in case mono isn't "installed". ++ ++ Version version; ++ DirectoryInfo version_info, assembly_info; ++ ++ foreach (string gac_path in gac_paths) { ++ foreach (string assembly_name in Directory.GetDirectories (gac_path)) { ++ assembly_info = new DirectoryInfo (assembly_name); ++ foreach (string version_token in Directory.GetDirectories (assembly_name)) { ++ foreach (string file in Directory.GetFiles (version_token, "*.dll")) { ++ version_info = new DirectoryInfo (version_token); ++ version = new Version (version_info.Name.Split ( ++ new char [] {'_'}, StringSplitOptions.RemoveEmptyEntries) [0]); ++ ++ Dictionary assembliesByVersion = new Dictionary (); ++ if (!gac.TryGetValue (assembly_info.Name, out assembliesByVersion)) { ++ assembliesByVersion = new Dictionary (); ++ gac.Add (assembly_info.Name, assembliesByVersion); ++ } ++ ++ string found_file; ++ if (assembliesByVersion.TryGetValue (version, out found_file) && ++ File.GetLastWriteTime (file) <= File.GetLastWriteTime (found_file)) ++ // Duplicate found, take the newer file ++ continue; ++ ++ assembliesByVersion [version] = file; ++ } ++ } ++ } ++ } ++ } + + public ResolvedReference FindInTargetFramework (ITaskItem reference, string framework_dir, bool specific_version) + { +diff --git a/mcs/class/corlib/System/Environment.cs b/mcs/class/corlib/System/Environment.cs +index fd936ab21a4..b5a5c77c1a3 100644 +--- a/mcs/class/corlib/System/Environment.cs ++++ b/mcs/class/corlib/System/Environment.cs +@@ -984,9 +984,18 @@ private static string GacPath { + return Path.Combine (Path.Combine (internalGetGacPath (), "mono"), "gac"); + } + } ++ ++ private static string[] GacPaths { ++ get { ++ return internalGetGacPaths (); ++ } ++ } + #pragma warning restore 169 + [MethodImplAttribute (MethodImplOptions.InternalCall)] + internal extern static string internalGetGacPath (); ++ ++ [MethodImplAttribute (MethodImplOptions.InternalCall)] ++ internal extern static string [] internalGetGacPaths (); + #endif + [MethodImplAttribute (MethodImplOptions.InternalCall)] + internal extern static string [] GetLogicalDrivesInternal (); +diff --git a/mono/metadata/assembly.c b/mono/metadata/assembly.c +index 8c71ad0eb95..759d5aefbcf 100644 +--- a/mono/metadata/assembly.c ++++ b/mono/metadata/assembly.c +@@ -854,6 +854,11 @@ mono_assembly_getrootdir (void) + return default_path [0]; + } + ++char **mono_assembly_get_extra_gac_paths() ++{ ++ return extra_gac_paths; ++} ++ + /** + * mono_native_getrootdir: + * +diff --git a/mono/metadata/assembly.h b/mono/metadata/assembly.h +index e9c02ee26f5..e5f060e8238 100644 +--- a/mono/metadata/assembly.h ++++ b/mono/metadata/assembly.h +@@ -50,6 +50,7 @@ MONO_API MONO_RT_EXTERNAL_ONLY MonoImage* mono_assembly_load_module (MonoAsse + MONO_API void mono_assembly_close (MonoAssembly *assembly); + MONO_API void mono_assembly_setrootdir (const char *root_dir); + MONO_API MONO_CONST_RETURN char *mono_assembly_getrootdir (void); ++MONO_API char **mono_assembly_get_extra_gac_paths (void); + MONO_API char *mono_native_getrootdir (void); + MONO_API void mono_assembly_foreach (MonoFunc func, void* user_data); + MONO_API void mono_assembly_set_main (MonoAssembly *assembly); +diff --git a/mono/metadata/icall-decl.h b/mono/metadata/icall-decl.h +index a77fcf38598..3f0f1758ec2 100644 +--- a/mono/metadata/icall-decl.h ++++ b/mono/metadata/icall-decl.h +@@ -152,6 +152,7 @@ ICALL_EXPORT gint32 ves_icall_System_Environment_get_TickCount (void); + #if ENABLE_NETCORE + ICALL_EXPORT gint64 ves_icall_System_Environment_get_TickCount64 (void); + #endif ++ICALL_EXPORT MonoArray *ves_icall_System_Environment_GetGacPaths (void); + ICALL_EXPORT gint64 ves_icall_System_DateTime_GetSystemTimeAsFileTime (void); + ICALL_EXPORT gint64 ves_icall_System_Diagnostics_Process_GetProcessData (int, gint32, MonoProcessError*); + ICALL_EXPORT gint64 ves_icall_System_Diagnostics_Stopwatch_GetTimestamp (void); +diff --git a/mono/metadata/icall-def.h b/mono/metadata/icall-def.h +index 0a44729674b..59c803ba488 100644 +--- a/mono/metadata/icall-def.h ++++ b/mono/metadata/icall-def.h +@@ -327,6 +327,7 @@ HANDLES(ENV_16b, "get_bundled_machine_config", ves_icall_System_Environment_get_ + HANDLES(ENV_16m, "internalBroadcastSettingChange", ves_icall_System_Environment_BroadcastSettingChange, void, 0, ()) + HANDLES(ENV_17, "internalGetEnvironmentVariable_native", ves_icall_System_Environment_GetEnvironmentVariable_native, MonoString, 1, (const_char_ptr)) + HANDLES(ENV_18, "internalGetGacPath", ves_icall_System_Environment_GetGacPath, MonoString, 0, ()) ++NOHANDLES(ICALL(ENV_18_1, "internalGetGacPaths", ves_icall_System_Environment_GetGacPaths)) + HANDLES(ENV_19, "internalGetHome", ves_icall_System_Environment_InternalGetHome, MonoString, 0, ()) + NOHANDLES(ICALL(ENV_20, "set_ExitCode", mono_environment_exitcode_set)) + ICALL_TYPE(GC, "System.GC", GC_10) +diff --git a/mono/metadata/icall.c b/mono/metadata/icall.c +index 6d16b9c3540..1e592c30e27 100644 +--- a/mono/metadata/icall.c ++++ b/mono/metadata/icall.c +@@ -7781,6 +7781,56 @@ ves_icall_System_Environment_GetGacPath (MonoError *error) + } + #endif + ++ICALL_EXPORT MonoArray * ++ves_icall_System_Environment_GetGacPaths () ++{ ++ char **extra_gac_paths = mono_assembly_get_extra_gac_paths(); ++ const char *rootdir = mono_assembly_getrootdir (); ++ char **e; ++ int n; ++ MonoDomain *domain; ++ MonoArray *out; ++ MonoString *str; ++ gchar *tmp; ++ MonoError error; ++ n = 0; ++ if (rootdir) n++; ++ if (extra_gac_paths) { ++ for (e = extra_gac_paths; *e != 0; e++); ++ n += (e - extra_gac_paths); ++ } ++ ++ domain = mono_domain_get (); ++ out = mono_array_new_checked (domain, mono_defaults.string_class, n, &error); ++ ++ if (mono_error_set_pending_exception (&error)) ++ return NULL; ++ ++ n = 0; ++ if (rootdir) { ++ tmp = g_build_path (G_DIR_SEPARATOR_S, rootdir, "mono", "gac", NULL); ++ str = mono_string_new_checked (domain, tmp, &error); ++ g_free (tmp); ++ if (mono_error_set_pending_exception (&error)) ++ return NULL; ++ mono_array_setref_internal (out, n, str); ++ n++; ++ } ++ if (extra_gac_paths) { ++ for (e = extra_gac_paths; *e != 0; e++) { ++ tmp = g_build_path (G_DIR_SEPARATOR_S, *e, "lib", "mono", "gac", NULL); ++ str = mono_string_new_checked (domain, tmp, &error); ++ g_free (tmp); ++ if (mono_error_set_pending_exception (&error)) ++ return NULL; ++ mono_array_setref_internal (out, n, str); ++ n++; ++ } ++ } ++ ++ return out; ++} ++ + #ifndef HOST_WIN32 + static inline MonoStringHandle + mono_icall_get_windows_folder_path (int folder, MonoError *error) diff --git a/gnu/packages/patches/mono-6.12.0-fix-ConditionParser.patch b/gnu/packages/patches/mono-6.12.0-fix-ConditionParser.patch new file mode 100644 index 00000000000..4ecde07d426 --- /dev/null +++ b/gnu/packages/patches/mono-6.12.0-fix-ConditionParser.patch @@ -0,0 +1,46 @@ +diff --git a/mcs/class/Microsoft.Build.Engine/Microsoft.Build.BuildEngine/ConditionParser.cs b/mcs/class/Microsoft.Build.Engine/Microsoft.Build.BuildEngine/ConditionParser.cs +index b5e2e809ae4..757492d15e4 100644 +--- a/mcs/class/Microsoft.Build.Engine/Microsoft.Build.BuildEngine/ConditionParser.cs ++++ b/mcs/class/Microsoft.Build.Engine/Microsoft.Build.BuildEngine/ConditionParser.cs +@@ -205,19 +205,30 @@ ConditionExpression ParseFunctionExpression (string function_name) + { + List list = new List (); + ConditionFactorExpression e; +- ++ ++ /* starts looking at the open paren, move past it */ ++ tokenizer.GetNextToken (); ++ if (tokenizer.Token.Type == TokenType.RightParen) { ++ /* leave us looking past the end of the argument list */ ++ tokenizer.GetNextToken (); ++ return list; ++ } + while (true) { +- tokenizer.GetNextToken (); +- if (tokenizer.Token.Type == TokenType.RightParen) { +- tokenizer.GetNextToken (); +- break; +- } +- if (tokenizer.Token.Type == TokenType.Comma) ++ e = (ConditionFactorExpression) ParseFactorExpression (); ++ list.Add (e); ++ /* ParseFactorExpression leaves us looking at what follows the ++ * expression */ ++ if (tokenizer.Token.Type == TokenType.RightParen) { ++ /* leave us looking past the end of the argument list */ ++ tokenizer.GetNextToken (); ++ break; ++ } ++ if (tokenizer.Token.Type == TokenType.Comma) { ++ tokenizer.GetNextToken (); + continue; +- +- tokenizer.Putback (tokenizer.Token); +- e = (ConditionFactorExpression) ParseFactorExpression (); +- list.Add (e); ++ } ++ ++ throw new ExpressionParseException (String.Format ("Unexpected token {0} in argument list while parsing condition \"{1}\"", tokenizer.Token, conditionStr)); + } + + return list; -- Efraim Flashner אפרים פלשנר GPG key = A28B F40C 3E55 1372 662D 14F7 41AA E7DC CA3D 8351 Confidentiality cannot be guaranteed on emails sent or received unencrypted From debbugs-submit-bounces@debbugs.gnu.org Mon Dec 16 20:38:15 2024 Received: (at control) by debbugs.gnu.org; 17 Dec 2024 01:38:15 +0000 Received: from localhost ([127.0.0.1]:56869 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1tNMXP-00076e-AF for submit@debbugs.gnu.org; Mon, 16 Dec 2024 20:38:15 -0500 Received: from layka.disroot.org ([178.21.23.139]:40298) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1tNMXM-00076U-Ac for control@debbugs.gnu.org; Mon, 16 Dec 2024 20:38:13 -0500 Received: from mail01.disroot.lan (localhost [127.0.0.1]) by disroot.org (Postfix) with ESMTP id 146D324D05 for ; Tue, 17 Dec 2024 02:38:11 +0100 (CET) X-Virus-Scanned: SPAM Filter at disroot.org Received: from layka.disroot.org ([127.0.0.1]) by localhost (disroot.org [127.0.0.1]) (amavis, port 10024) with ESMTP id ZatRjpFUQS9I for ; Tue, 17 Dec 2024 02:38:10 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=disroot.org; s=mail; t=1734399490; bh=nKORLY6An5Ib+DiCp2pqAGVhKWaXxLSESzQXhry4slg=; h=Date:To:From:Subject; b=l+ERJqT3SqCPw6z3231Z1vKrSkF1UgJSdq65Y36PjIwEzFVwJ6CWViWJVC2I0EQlb nmQZ1JhMk+0SY+SYWD9qU6MKsoIWSPqfSnvbjumDL7NtK18nPnnq4+a/KxBUUpBcV/ BHZq/40pwLbvZP5W+yIDyjg9yqP/KbDGPsPR0he76zEmHE1+qmNBPsjplIXu1ubsM9 RUZCbNgFfTT3RUslwQ3SKqOz/x8Aid3CzyCfnvXV71ZUPTZ1Pt3JVch9uric2lU9RI X23KZ+bVjciYONwljWy2RVnz73YsvV88tvKe/x5KtTnjRmQ4S8sOoURMpeslyvA7+r qNFrfnbnSxNpA== Message-ID: <0179582a-16f6-4380-79ba-96c253751af2@disroot.org> Date: Tue, 17 Dec 2024 09:37:56 +0800 MIME-Version: 1.0 Content-Language: en-US To: control@debbugs.gnu.org From: Adam Faiz Subject: Merge old C# bootstrapping effort with the newest one Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: control 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 (-) merge 57625 74609 thankyou From debbugs-submit-bounces@debbugs.gnu.org Fri Dec 20 02:56:02 2024 Received: (at 74609) by debbugs.gnu.org; 20 Dec 2024 07:56:02 +0000 Received: from localhost ([127.0.0.1]:41508 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1tOXre-0001Wj-8n for submit@debbugs.gnu.org; Fri, 20 Dec 2024 02:56:02 -0500 Received: from mail-43166.protonmail.ch ([185.70.43.166]:51901) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1tOVJb-00023d-43 for 74609@debbugs.gnu.org; Fri, 20 Dec 2024 00:12:44 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=proton.me; s=qsx45qqp4nblrfbshgwlk6lsoy.protonmail; t=1734671553; x=1734930753; bh=p0EERgoZvihfU+43ktPHBOioGhmGOfniqgNNzku7r78=; h=Date:To:From:Subject:Message-ID:Feedback-ID:From:To:Cc:Date: Subject:Reply-To:Feedback-ID:Message-ID:BIMI-Selector: List-Unsubscribe:List-Unsubscribe-Post; b=IEi6/UJ5D89rBdCS7TV04fT6wfGSMfJ6/eOxPCLI8xpO6yuvK1tQaGYW1s0SZCakq mvUxcOGR4tCfBVqGLFg+LX/zCu6RMskSjCPtO1bUVUWjpNyJkNvTHKnB1BVlTIgpPv XxZS4smQHEirHCqwfneLJ0LVcnieXmglRUAUannjfNb5glQ8HiKxPqG54jOa8lqANc Q5gWHlINHtJIlY2SaXGp4PoyQv8W5oBvWLEuKb6sLyBPWz31HaHz+sCZZmhwydveBJ Kk1LymQBKtbA9U4oHoNVQtHqPAErnlH29CRCn64eGkMpXbhPeFdkzSs2XeE+jxraKg pxCw1P6FdgEbQ== Date: Fri, 20 Dec 2024 05:12:29 +0000 To: "74609@debbugs.gnu.org" <74609@debbugs.gnu.org> From: unmush Subject: V2 series Message-ID: <2Zx39DgdkCBWdzQR1QSV4eAxPs98sBBj43GTHCUKL3lvKNunS5hQwqkEpvrKSg1W-hlzxdx5RNwlrn5_ILHPHYidzwx_8oCkmzzXxyk6y8M=@proton.me> Feedback-ID: 126986417:user:proton X-Pm-Message-ID: e1ff180d8310700c169dcbfe21e7967019bbe4b9 MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="b1=_sUWWoGLuiCwxqVBZd1XkAit8Hrc2P4iMkhdKhObgTww" X-Debbugs-Envelope-To: 74609 X-Mailman-Approved-At: Fri, 20 Dec 2024 02:56:01 -0500 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" --b1=_sUWWoGLuiCwxqVBZd1XkAit8Hrc2P4iMkhdKhObgTww Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Efraim writes: > It turns out the first 2 patches didn't apply cleanly, so I fixed that > up and I'm sending them back to the list. It turns out that git wants to do a full 3-way merge when applying patches,= and I formatted the patches from my local repository which has a bunch of extra commits in it that touch gnu/local.mk, so the generated patch referenced a = file hash that didn't exist upstream. > A couple of things that I noticed: >=20 > * mono-5.something doesn't have its patches apply cleanly mono-5.10's patches didn't apply cleanly because some of the mono sources b= eing patched used CRLF line endings, and git normalized those in the patch-containing-the-patch. This time around I've tried first running "git config core.autocrlf false", hopefully that fixes it. Note that you'll nee= d to pass '--keep-cr' to 'git am'. > * I was only able to build to mono-3.12 before I got a build failure on > x86_64 After some discussion in #guix we discovered that the cause for this was th= at parallel builds weren't properly supported. I didn't encounter these failu= res very much on my own system because I used --keep-failed, which disabled offloading so that they were built on my rather weak 4-core system. I have since tested without --keep-failed and found consistent built failures= with '#:parallel-build? #t' all the way up to and including mono-5.10.0, so I've passed '#:parallel-build? #f' to all of those. I have, however, added `"-j" (number->string (parallel-job-count))' to the build-reference-assemblies phase, since that phase takes quite a long time = and doesn't seem to have any trouble with parallel builds. > * mono-1.2.6 doesn't have support for aarch64 or riscv64, and will > probably need some patches (later) to add support. Old versions of mono do technically have an interpreter, but by mono-1.2.6 = it's already bitrotted to the point of not working (it's not only missing severa= l includes, it also refers to nonexistent fields and procedures that seem to = have been since renamed). They eventually fully deleted the interpreter in 2014= in commit 6bee6a7b18978aa6ce977b8b0f9ce19cf962f36b, only to later revive it in= 2017 (https://www.mono-project.com/news/2017/11/13/mono-interpreter/). So even = if we fixed up mono 1.2.6's interpreter, we'd need to also get it working for eac= h version up to 2017 in order to achieve a fully portable bootstrap path. One alternative option could be some variety of frankenmono: either trying = to backport 2017's interpreter to older versions of mono, or trying to run an = old mono compiler / class library with a newer mono runtime. Mono's class libr= ary depends on runtime-specific icalls, which may have changed over time in a non-backwards-compatible way, which could hinder the latter attempt. The implementation of those icalls, additionally, is probably going to depend o= n code that is also depended on by the interpreter, so replacing runtime inte= rnals to more easily suit the backported interpreter may also require updating th= ose, which could hinder the former attempt. Another possibility would be trying to use pnet's ilrun for mono versions u= p to 2017, but this would run in to the same issues with runtime-specific icalls= , so either mono's class library would need to be adjusted to be able to use pne= t's icalls, or mono's icalls would have to be ported to pnet's ilrun, or mcs wo= uld have to be adjusted to not depend on anything mono-specific (if it doesn't already). That last possibility may be one of the most interesting, as compilers usua= lly don't need many fancy runtime features (they are after all a very basic bat= ch input-output process that usually solely touches files), and this would effectively strip every intermediate mono build down to just building mcs. Additionally, if the build could be stripped down to just building mcs= , we wouldn't need to support the new features used by the class library, which = would allow us to make much bigger jumps between versions. The sheer amount of w= ork saved may end up more than making up for ilrun's lower performance. > * libjit FTBFS on powerpc64le. I tried working around it but wasn't > successful in when it came to using libjit. > * The assembly included in libjit targets a too-early version of arm, so > it is just broken completely on armhf and would probably do best with it > being ripped out. libjit is the one component of Portable.NET that outlived its parent projec= t, and it's been updated as recently as 2020. It's supposed to fall back to interpreting on architectures it doesn't support, so it could be that the o= nly changes that need to be made are to refine its detection process. In the meantime, I've adjusted pnet-git to not use libjit on all non-x86 platforms= , instead using pnet's own Converted Virtual Machine (CVM) interpreter. This= was buggy when using its "unroller" functionality, which requires a small amoun= t of platform-specific code anyway, so I disabled that. This also caused a subt= le change in pnetlib-git's test suite, so that a test that previously failed i= s now properly reported as failing, so I disabled that (it failed due to requirin= g libx11 and an X server, and due to no provision being made for it to find a= .so produced by pnetlib that interfaces with libx11). A V2 series is attached. Note: the full series in one message was rejected= by debbugs moderators, but presumably made it through to the other CC'ed r= ecipients. I'm splitting it across some more messages in the hope that it = will go through that way. There should be 21 patches in total. --b1=_sUWWoGLuiCwxqVBZd1XkAit8Hrc2P4iMkhdKhObgTww Content-Type: text/x-patch; name=v2-0001-gnu-add-treecc.patch Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=v2-0001-gnu-add-treecc.patch RnJvbSBmOGIwNTYwNjUxM2YyZGYxYTNkMDg1ZjkwYmRkOTUzYzhlMjAyYWU5IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiB1bm11c2ggPHVubXVzaEBoYXNoYmFuZy5zaD4KRGF0ZTogVHVl LCAyNiBOb3YgMjAyNCAxMjoxMzozMgpTdWJqZWN0OiBbUEFUQ0ggdjIgMDEvMjFdIGdudTogYWRk IHRyZWVjYy4KCiogZ251L3BhY2thZ2VzL2RvdG5ldC5zY206IG5ldyBtb2R1bGUuCiAgKHRyZWVj Yyk6IG5ldyBwYWNrYWdlLgoqIGdudS9sb2NhbC5tayAoR05VX1NZU1RFTV9NT0RVTEVTKTogYWRk IG5ldyBtb2R1bGUuCi0tLQogZ251L2xvY2FsLm1rICAgICAgICAgICAgfCAgMSArCiBnbnUvcGFj a2FnZXMvZG90bmV0LnNjbSB8IDYyICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrCiAyIGZpbGVzIGNoYW5nZWQsIDYzIGluc2VydGlvbnMoKykKIGNyZWF0ZSBtb2RlIDEw MDY0NCBnbnUvcGFja2FnZXMvZG90bmV0LnNjbQoKZGlmZiAtLWdpdCBhL2dudS9sb2NhbC5tayBi L2dudS9sb2NhbC5tawppbmRleCBmYmU5ZGZiYjBlZi4uOWViZTQ5Y2E4NjQgMTAwNjQ0Ci0tLSBh L2dudS9sb2NhbC5taworKysgYi9nbnUvbG9jYWwubWsKQEAgLTI0Myw2ICsyNDMsNyBAQCBHTlVf U1lTVEVNX01PRFVMRVMgPQkJCQlcCiAgICVEJS9wYWNrYWdlcy9kaGFsbC5zY20JCQlcCiAgICVE JS9wYWNrYWdlcy9kaWNvLnNjbQkJCQlcCiAgICVEJS9wYWNrYWdlcy9kaWN0ZC5zY20JCQlcCisg ICVEJS9wYWNrYWdlcy9kb3RuZXQuc2NtCQkJXAogICAlRCUvcGFja2FnZXMvZGljdGlvbmFyaWVz LnNjbQkJCVwKICAgJUQlL3BhY2thZ2VzL2RpZmZvc2NvcGUuc2NtCQkJXAogICAlRCUvcGFja2Fn ZXMvZGlnZXN0LnNjbQkJCVwKZGlmZiAtLWdpdCBhL2dudS9wYWNrYWdlcy9kb3RuZXQuc2NtIGIv Z251L3BhY2thZ2VzL2RvdG5ldC5zY20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw MDAwMDAuLjMwODRlMWNmM2E1Ci0tLSAvZGV2L251bGwKKysrIGIvZ251L3BhY2thZ2VzL2RvdG5l dC5zY20KQEAgLTAsMCArMSw2MiBAQAorKGRlZmluZS1tb2R1bGUgKGdudSBwYWNrYWdlcyBkb3Ru ZXQpCisgICM6dXNlLW1vZHVsZSAoKGd1aXggbGljZW5zZXMpICM6cHJlZml4IGxpY2Vuc2U6KQor ICAjOnVzZS1tb2R1bGUgKGdudSBwYWNrYWdlcyBhc3NlbWJseSkKKyAgIzp1c2UtbW9kdWxlIChn bnUgcGFja2FnZXMgYmlzb24pCisgICM6dXNlLW1vZHVsZSAoZ251IHBhY2thZ2VzIGNoZWNrKQor ICAjOnVzZS1tb2R1bGUgKGdudSBwYWNrYWdlcyBjbWFrZSkKKyAgIzp1c2UtbW9kdWxlIChnbnUg cGFja2FnZXMgY29tcHJlc3Npb24pCisgICM6dXNlLW1vZHVsZSAoZ251IHBhY2thZ2VzIGN1cmwp CisgICM6dXNlLW1vZHVsZSAoZ251IHBhY2thZ2VzIGZsZXgpCisgICM6dXNlLW1vZHVsZSAoZ251 IHBhY2thZ2VzIGdldHRleHQpCisgICM6dXNlLW1vZHVsZSAoZ251IHBhY2thZ2VzIHBrZy1jb25m aWcpCisgICM6dXNlLW1vZHVsZSAoZ251IHBhY2thZ2VzIGJhc2UpCisgICM6dXNlLW1vZHVsZSAo Z251IHBhY2thZ2VzIGF1dG90b29scykKKyAgIzp1c2UtbW9kdWxlIChnbnUgcGFja2FnZXMgYmR3 LWdjKQorICAjOnVzZS1tb2R1bGUgKGdudSBwYWNrYWdlcyBmb250dXRpbHMpCisgICM6dXNlLW1v ZHVsZSAoZ251IHBhY2thZ2VzIGdsaWIpCisgICM6dXNlLW1vZHVsZSAoZ251IHBhY2thZ2VzIGlj dTRjKQorICAjOnVzZS1tb2R1bGUgKGdudSBwYWNrYWdlcyBpbnN0cnVtZW50YXRpb24pCisgICM6 dXNlLW1vZHVsZSAoZ251IHBhY2thZ2VzIGtlcmJlcm9zKQorICAjOnVzZS1tb2R1bGUgKGdudSBw YWNrYWdlcyBsaWJmZmkpCisgICM6dXNlLW1vZHVsZSAoZ251IHBhY2thZ2VzIGxpbnV4KQorICAj OnVzZS1tb2R1bGUgKGdudSBwYWNrYWdlcyBsbHZtKQorICAjOnVzZS1tb2R1bGUgKGdudSBwYWNr YWdlcyBwZXJsKQorICAjOnVzZS1tb2R1bGUgKGdudSBwYWNrYWdlcyBwaG90bykKKyAgIzp1c2Ut bW9kdWxlIChnbnUgcGFja2FnZXMgdGV4aW5mbykKKyAgIzp1c2UtbW9kdWxlIChnbnUgcGFja2Fn ZXMgdGxzKQorICAjOnVzZS1tb2R1bGUgKGdudSBwYWNrYWdlcyBpbWFnZSkKKyAgIzp1c2UtbW9k dWxlIChnbnUgcGFja2FnZXMgZ3RrKQorICAjOnVzZS1tb2R1bGUgKGdudSBwYWNrYWdlcyBweXRo b24pCisgICM6dXNlLW1vZHVsZSAoZ251IHBhY2thZ2VzIHhtbCkKKyAgIzp1c2UtbW9kdWxlIChn bnUgcGFja2FnZXMgeG9yZykKKyAgIzp1c2UtbW9kdWxlIChnbnUgcGFja2FnZXMgdmVyc2lvbi1j b250cm9sKQorICAjOnVzZS1tb2R1bGUgKGdudSBwYWNrYWdlcykKKyAgIzp1c2UtbW9kdWxlIChn dWl4IG1vZHVsZXMpCisgICM6dXNlLW1vZHVsZSAoZ3VpeCBwYWNrYWdlcykKKyAgIzp1c2UtbW9k dWxlIChndWl4IGRvd25sb2FkKQorICAjOnVzZS1tb2R1bGUgKGd1aXggZ2l0LWRvd25sb2FkKQor ICAjOnVzZS1tb2R1bGUgKGd1aXggZ2V4cCkKKyAgIzp1c2UtbW9kdWxlIChndWl4IHV0aWxzKQor ICAjOnVzZS1tb2R1bGUgKGd1aXggYnVpbGQtc3lzdGVtIGdudSkKKyAgIzp1c2UtbW9kdWxlIChn dWl4IGJ1aWxkLXN5c3RlbSBweXRob24pCisgICM6dXNlLW1vZHVsZSAoaWNlLTkgbWF0Y2gpKQor CisoZGVmaW5lLXB1YmxpYyB0cmVlY2MKKyAgKHBhY2thZ2UKKyAgICAobmFtZSAidHJlZWNjIikK KyAgICAodmVyc2lvbiAiMC4zLjEwIikKKyAgICAoc291cmNlIChvcmlnaW4KKyAgICAgICAgICAg ICAgKG1ldGhvZCB1cmwtZmV0Y2gpCisgICAgICAgICAgICAgICh1cmkgKHN0cmluZy1hcHBlbmQK KyAgICAgICAgICAgICAgICAgICAgImh0dHBzOi8vZG93bmxvYWQuc2F2YW5uYWguZ251Lm9yZy9y ZWxlYXNlcy9kb3RnbnUtcG5ldC90cmVlY2MtIgorICAgICAgICAgICAgICAgICAgICB2ZXJzaW9u ICIudGFyLmd6IikpCisgICAgICAgICAgICAgIChzaGEyNTYKKyAgICAgICAgICAgICAgIChiYXNl MzIKKyAgICAgICAgICAgICAgICAiMXJ6Z25zcGcyeGNjZHEzcXN4MHZpM2oyOGg0cWtyemJyam5o enZubnkzNGZqZmsyMTdheSIpKSkpCisgICAgKGJ1aWxkLXN5c3RlbSBnbnUtYnVpbGQtc3lzdGVt KQorICAgIChob21lLXBhZ2UgImh0dHBzOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvZG90Z251IikK KyAgICAoc3lub3BzaXMgIlRyZWUgQ29tcGlsZXItQ29tcGlsZXIuIikKKyAgICAoZGVzY3JpcHRp b24gIlRoZSB0cmVlY2MgcHJvZ3JhbSBpcyBkZXNpZ25lZCB0byBhc3Npc3QgaW4gdGhlIGRldmVs b3BtZW50CitvZiBjb21waWxlcnMgYW5kIG90aGVyIGxhbmd1YWdlLWJhc2VkIHRvb2xzLiAgSXQg bWFuYWdlcyB0aGUgZ2VuZXJhdGlvbiBvZgorY29kZSB0byBoYW5kbGUgYWJzdHJhY3Qgc3ludGF4 IHRyZWVzIGFuZCBvcGVyYXRpb25zIHVwb24gdGhlIHRyZWVzLiIpCisgICAgKGxpY2Vuc2UgbGlj ZW5zZTpncGwyKykpKQotLSAKMi40NS4yCgo= --b1=_sUWWoGLuiCwxqVBZd1XkAit8Hrc2P4iMkhdKhObgTww Content-Type: text/x-patch; name=v2-0003-gnu-Add-pnetlib-git.patch Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=v2-0003-gnu-Add-pnetlib-git.patch RnJvbSA3ZmQzZWIxOTEzMGQ2MDA3NWUyNGMxYzJiMGJkMDM2NzM4NmQ1MGJhIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiB1bm11c2ggPHVubXVzaEBoYXNoYmFuZy5zaD4KRGF0ZTogVHVl LCAyNiBOb3YgMjAyNCAxMjo1MzoyMwpTdWJqZWN0OiBbUEFUQ0ggdjIgMDMvMjFdIGdudTogQWRk IHBuZXRsaWItZ2l0LgoKKiBnbnUvcGFja2FnZXMvZG90bmV0LnNjbSAocG5ldGxpYi1naXQpOiBO ZXcgdmFyaWFibGUuCgotLS0KIGdudS9wYWNrYWdlcy9kb3RuZXQuc2NtIHwgODEgKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKIDEgZmlsZSBjaGFuZ2VkLCA4MSBpbnNl cnRpb25zKCspCgpkaWZmIC0tZ2l0IGEvZ251L3BhY2thZ2VzL2RvdG5ldC5zY20gYi9nbnUvcGFj a2FnZXMvZG90bmV0LnNjbQppbmRleCBmZDBkNzFiZmU2OS4uOWQ5Y2M1NDIxYjAgMTAwNjQ0Ci0t LSBhL2dudS9wYWNrYWdlcy9kb3RuZXQuc2NtCisrKyBiL2dudS9wYWNrYWdlcy9kb3RuZXQuc2Nt CkBAIC0xODQsMyArMTg0LDg0IEBAIChkZWZpbmUtcHVibGljIHBuZXQtZ2l0CiB0byBidWlsZCBh bmQgZXhlY3V0ZSAuTkVUIGFwcGxpY2F0aW9ucywgaW5jbHVkaW5nIGEgQyMgY29tcGlsZXIsCiBh c3NlbWJsZXIsIGRpc2Fzc2VtYmxlciwgYW5kIHJ1bnRpbWUgZW5naW5lLiIpCiAgICAgICAobGlj ZW5zZSBsaWNlbnNlOmdwbDIrKSkpKQorCisoZGVmaW5lLXB1YmxpYyBwbmV0bGliLWdpdAorICAo bGV0ICgodmVyc2lvbiAiMC44LjAiKQorICAgICAgICAoY29tbWl0ICJjM2MxMmI4YjBjNjVmNTQ4 MmQwM2Q2YTQ4NjVmNzY3MGU5OGJhZjRjIikKKyAgICAgICAgKHJldmlzaW9uICIwIikpCisgICAg KHBhY2thZ2UKKyAgICAgIChuYW1lICJwbmV0bGliLWdpdCIpCisgICAgICAodmVyc2lvbiAoZ2l0 LXZlcnNpb24gdmVyc2lvbiByZXZpc2lvbiBjb21taXQpKQorICAgICAgKHNvdXJjZSAob3JpZ2lu CisgICAgICAgICAgICAgICAgKG1ldGhvZCBnaXQtZmV0Y2gpCisgICAgICAgICAgICAgICAgKHVy aSAoZ2l0LXJlZmVyZW5jZQorICAgICAgICAgICAgICAgICAgICAgICh1cmwKKyAgICAgICAgICAg ICAgICAgICAgICAgImh0dHBzOi8vZ2l0LnNhdmFubmFoLmdudS5vcmcvZ2l0L2RvdGdudS1wbmV0 L3BuZXRsaWIuZ2l0IikKKyAgICAgICAgICAgICAgICAgICAgICAoY29tbWl0IGNvbW1pdCkpKQor ICAgICAgICAgICAgICAgIChmaWxlLW5hbWUgKGdpdC1maWxlLW5hbWUgbmFtZSB2ZXJzaW9uKSkK KyAgICAgICAgICAgICAgICAoc2hhMjU2CisgICAgICAgICAgICAgICAgIChiYXNlMzIKKyAgICAg ICAgICAgICAgICAgICIwNGRpa2tpM2xyM20xY2FjaXJsZDkwcnBpOTU2NTZiMnkybWM1cmt5Y2I3 czB5ZmR6MW5rIikpCisgICAgICAgICAgICAgICAgKG1vZHVsZXMgJygoZ3VpeCBidWlsZCB1dGls cykpKQorICAgICAgICAgICAgICAgIChzbmlwcGV0CisgICAgICAgICAgICAgICAgICN+KGJlZ2lu CisgICAgICAgICAgICAgICAgICAgICAoZm9yLWVhY2ggZGVsZXRlLWZpbGUgKGZpbHRlciBmaWxl LWV4aXN0cz8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICcoImNvbmZpZ3VyZSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgImNvbmZpZy5ndWVzcyIKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvbmZpZy5zdWIiCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbnN0YWxsLXNoIgorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibHRtYWluLnNo IikpKQorICAgICAgICAgICAgICAgICAgICAgKGZvci1lYWNoIGRlbGV0ZS1maWxlIChmaW5kLWZp bGVzICIuIiAiTWFrZWZpbGUoXFwuaW4pPyQiKSkKKyAgICAgICAgICAgICAgICAgICAgIChzdWJz dGl0dXRlKiAoZmluZC1maWxlcyAidGVzdHMiICJeTWFrZWZpbGVcXC5hbSQiKQorICAgICAgICAg ICAgICAgICAgICAgICAoKCJURVNUU19FTlZJUk9OTUVOVC4qIikKKyAgICAgICAgICAgICAgICAg ICAgICAgIChzdHJpbmctYXBwZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgIkxPR19DT01Q SUxFUiA9ICQoU0hFTEwpXG4iCisgICAgICAgICAgICAgICAgICAgICAgICAgIkFNX0xPR19GTEFH UyA9ICQodG9wX2J1aWxkZGlyKS90b29scy9ydW5fdGVzdC5zaCIKKyAgICAgICAgICAgICAgICAg ICAgICAgICAiICQodG9wX2J1aWxkZGlyKSIpKSkKKyAgICAgICAgICAgICAgICAgICAgIChzdWJz dGl0dXRlKiAidG9vbHMvcnVuX3Rlc3Quc2guaW4iCisgICAgICAgICAgICAgICAgICAgICAgICgo ImVuX1VTIikgImVuX1VTLnV0ZjgiKSkKKyAgICAgICAgICAgICAgICAgICAgIChzdWJzdGl0dXRl KiAidG9vbHMvd3JhcHBlci5zaC5pbiIKKyAgICAgICAgICAgICAgICAgICAgICAgKCgiZXhlYyAu TE5fUyBjbHJ3cmFwIC4uMS4iIGFsbCkKKyAgICAgICAgICAgICAgICAgICAgICAgIChzdHJpbmct YXBwZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgImVjaG8gJyMhQFNIRUxMQCcgPj4gJDFc biIKKyAgICAgICAgICAgICAgICAgICAgICAgICAiZWNobyBleGVjICRDTFJXUkFQIgorICAgICAg ICAgICAgICAgICAgICAgICAgICIgJChkaXJuYW1lICQoZGlybmFtZSAkMSkpIgorICAgICAgICAg ICAgICAgICAgICAgICAgICIvbGliL2NzY2MvbGliLyQoYmFzZW5hbWUgJDEpLmV4ZSA+PiAkMVxu IgorICAgICAgICAgICAgICAgICAgICAgICAgICJjaG1vZCAreCAkMSIpKSkpKSkpCisgICAgICAo YnVpbGQtc3lzdGVtIGdudS1idWlsZC1zeXN0ZW0pCisgICAgICAoYXJndW1lbnRzCisgICAgICAg KGxpc3QKKyAgICAgICAgIzptYWtlLWZsYWdzICN+KGxpc3QgIkNGTEFHUys9LVduby1wb2ludGVy LXRvLWludC1jYXN0IikKKyAgICAgICAgIzpwaGFzZXMKKyAgICAgICAgI34obW9kaWZ5LXBoYXNl cyAlc3RhbmRhcmQtcGhhc2VzCisgICAgICAgICAgICAoYWRkLWFmdGVyICd1bnBhY2sgJ2Rpc2Fi bGUteDExLXRlc3RzCisgICAgICAgICAgICAgIChsYW1iZGEgXworICAgICAgICAgICAgICAgIChz dWJzdGl0dXRlKiAidGVzdHMvTWFrZWZpbGUuYW0iCisgICAgICAgICAgICAgICAgICA7OyBUaGlz IGFjdHVhbGx5IGFsd2F5cyBmYWlscywgZm9yIGEgbnVtYmVyIG9mCisgICAgICAgICAgICAgICAg ICA7OyByZWFzb25zOgorICAgICAgICAgICAgICAgICAgOzsgMS4gV2UgaGF2ZSBubyBsaWJ4MTEg cHJlc2VudCwgbm9yIGRvIHdlIGhhdmUgYW4gWCBkaXNwbGF5CisgICAgICAgICAgICAgICAgICA7 OyAgICBwcmVzZW50LiAgVGhpcyB3aWxsIGNhdXNlIGxpYlhzaGFycFN1cHBvcnQuc28gdG8gYmUK KyAgICAgICAgICAgICAgICAgIDs7ICAgIGJ1aWx0IHdpdGggb25seSBzaGltcyB0aGF0IGZhaWwg YXQgcnVudGltZS4KKyAgICAgICAgICAgICAgICAgIDs7IDIuIE5vIG1lY2hhbmlzbSBpcyBwcm92 aWRlZCBmb3IKKyAgICAgICAgICAgICAgICAgIDs7ICAgIHRlc3RzL1N5c3RlbS5XaW5kb3dzLkZv cm1zL1Rlc3RGb3Jtcy5kbGwgdG8gZmluZAorICAgICAgICAgICAgICAgICAgOzsgICAgbGliWHNo YXJwU3VwcG9ydC5zbywgd2hpY2ggc2VlbXMgdG8gc2l0IGF0CisgICAgICAgICAgICAgICAgICA7 OyAgICBYc2hhcnAvLmxpYnMvbGliWHNoYXJwU3VwcG9ydC5zby4KKyAgICAgICAgICAgICAgICAg IDs7IFdpdGggYSBsaWJqaXQgcG5ldCwKKyAgICAgICAgICAgICAgICAgIDs7IFN5c3RlbS5EcmF3 aW5nLlRvb2xraXQuVG9vbGtpdEhhbmRsZXIuQ3JlYXRlRGVmYXVsdFRvb2xraXQKKyAgICAgICAg ICAgICAgICAgIDs7IHRocm93cyBBcmd1bWVudE51bGxFeGNlcHRpb24gd2hlbiBpbnZva2luZyBB c3NlbWJseS5Mb2FkLAorICAgICAgICAgICAgICAgICAgOzsgd2hpbGUgYSBjdm0gcG5ldCBpbnN0 ZWFkIHN1Y2NlZWRzIHRlbXBvcmFyaWx5LCBidXQgdGhlbgorICAgICAgICAgICAgICAgICAgOzsg ZmFpbHMgd2hlbiBpbnZva2luZworICAgICAgICAgICAgICAgICAgOzsgU3lzdGVtLkRyYXdpbmcu VG9vbGtpdC5EcmF3aW5nVG9vbGtpdC4uY3Rvci4gIEZvciBzb21lCisgICAgICAgICAgICAgICAg ICA7OyByZWFzb24gdGhpcyByZXN1bHRzIGluIGNzdW5pdCBwYXNzaW5nIHRoZSBmb3JtZXIgYW5k CisgICAgICAgICAgICAgICAgICA7OyBmYWlsaW5nIHRoZSBsYXR0ZXIuCisgICAgICAgICAgICAg ICAgICAoKCJTeXN0ZW1cXC5XaW5kb3dzXFwuRm9ybXMiKSAiIikpKSkpKSkKKyAgICAgIChuYXRp dmUtaW5wdXRzCisgICAgICAgKGxpc3QgYXV0b2NvbmYgYXV0b21ha2UgbGlidG9vbCB0cmVlY2Mp KQorICAgICAgKGlucHV0cworICAgICAgIChsaXN0IHBuZXQtZ2l0KSkKKyAgICAgIChob21lLXBh Z2UgImh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9kb3RnbnUvaHRtbDIuMC9wbmV0Lmh0bWwi KQorICAgICAgKHN5bm9wc2lzICJMaWJyYXJpZXMgZm9yIHRoZSBDIyBwcm9ncmFtbWluZyBsYW5n dWFnZSIpCisgICAgICAoZGVzY3JpcHRpb24KKyAgICAgICAiRG90R05VIFBvcnRhYmxlLk5FVCBM aWJyYXJ5IGNvbnRhaW5zIGFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBDIyBsaWJyYXJ5LAorZm9y IHVzZSB3aXRoIC5ORVQtY2FwYWJsZSBydW50aW1lIGVuZ2luZXMgYW5kIGFwcGxpY2F0aW9ucy4i KQorICAgICAgKGxpY2Vuc2UgbGljZW5zZTpncGwyKykpKSkKLS0gCjIuNDUuMgoK --b1=_sUWWoGLuiCwxqVBZd1XkAit8Hrc2P4iMkhdKhObgTww Content-Type: text/x-patch; name=v2-0002-gnu-Add-pnet-git.patch Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=v2-0002-gnu-Add-pnet-git.patch RnJvbSAyOTU0MzYwYTlhMWQ3OTdhNzIxNjgxODFhYzM3MmQwYzNkNWMzODlmIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiB1bm11c2ggPHVubXVzaEBoYXNoYmFuZy5zaD4KRGF0ZTogVHVl LCAyNiBOb3YgMjAyNCAxMjo0NDo1NgpTdWJqZWN0OiBbUEFUQ0ggdjIgMDIvMjFdIGdudTogQWRk IHBuZXQtZ2l0LgoKKiBnbnUvcGFja2FnZXMvZG90bmV0LnNjbSAocG5ldC1naXQpOiBOZXcgdmFy aWFibGUuCiogZ251L3BhY2thZ2VzL3BhdGNoZXMvcG5ldC1maXgtbGluZS1udW1iZXItaW5mby5w YXRjaDogbmV3IHBhdGNoLgoqIGdudS9wYWNrYWdlcy9wYXRjaGVzL3BuZXQtZml4LW9mZi1ieS1v bmUucGF0Y2g6IG5ldyBwYXRjaC4KKiBnbnUvcGFja2FnZXMvcGF0Y2hlcy9wbmV0LW5ld2VyLWxp YmdjLWZpeC5wYXRjaDogbmV3IHBhdGNoLgoqIGdudS9wYWNrYWdlcy9wYXRjaGVzL3BuZXQtbmV3 ZXItdGV4aW5mby1maXgucGF0Y2g6IG5ldyBwYXRjaC4KKiBnbnUvbG9jYWwubWsgKGRpc3RfcGF0 Y2hfREFUQSk6IHJlZ2lzdGVyIG5ldyBwYXRjaGVzLgoKLS0tCiBnbnUvbG9jYWwubWsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDQgKwogZ251L3BhY2thZ2VzL2RvdG5ldC5z Y20gICAgICAgICAgICAgICAgICAgICAgIHwgMTI0ICsrKysrKysrKysrKysrKysrKwogLi4uL3Bh dGNoZXMvcG5ldC1maXgtbGluZS1udW1iZXItaW5mby5wYXRjaCAgIHwgIDEzICsrCiAuLi4vcGF0 Y2hlcy9wbmV0LWZpeC1vZmYtYnktb25lLnBhdGNoICAgICAgICAgfCAgMTMgKysKIC4uLi9wYXRj aGVzL3BuZXQtbmV3ZXItbGliZ2MtZml4LnBhdGNoICAgICAgICB8ICA0NSArKysrKysrCiAuLi4v cGF0Y2hlcy9wbmV0LW5ld2VyLXRleGluZm8tZml4LnBhdGNoICAgICAgfCAgMTMgKysKIDYgZmls ZXMgY2hhbmdlZCwgMjEyIGluc2VydGlvbnMoKykKIGNyZWF0ZSBtb2RlIDEwMDY0NCBnbnUvcGFj a2FnZXMvcGF0Y2hlcy9wbmV0LWZpeC1saW5lLW51bWJlci1pbmZvLnBhdGNoCiBjcmVhdGUgbW9k ZSAxMDA2NDQgZ251L3BhY2thZ2VzL3BhdGNoZXMvcG5ldC1maXgtb2ZmLWJ5LW9uZS5wYXRjaAog Y3JlYXRlIG1vZGUgMTAwNjQ0IGdudS9wYWNrYWdlcy9wYXRjaGVzL3BuZXQtbmV3ZXItbGliZ2Mt Zml4LnBhdGNoCiBjcmVhdGUgbW9kZSAxMDA2NDQgZ251L3BhY2thZ2VzL3BhdGNoZXMvcG5ldC1u ZXdlci10ZXhpbmZvLWZpeC5wYXRjaAoKZGlmZiAtLWdpdCBhL2dudS9sb2NhbC5tayBiL2dudS9s b2NhbC5tawppbmRleCA5ZWJlNDljYTg2NC4uMGUyZDdiZmExMzcgMTAwNjQ0Ci0tLSBhL2dudS9s b2NhbC5taworKysgYi9nbnUvbG9jYWwubWsKQEAgLTE5MjMsNiArMTkyMywxMCBAQCBkaXN0X3Bh dGNoX0RBVEEgPQkJCQkJCVwKICAgJUQlL3BhY2thZ2VzL3BhdGNoZXMvb3duY2xvdWQtZGlzYWJs ZS11cGRhdGVjaGVjay5wYXRjaAlcCiAgICVEJS9wYWNrYWdlcy9wYXRjaGVzL3A3emlwLUNWRS0y MDE2LTkyOTYucGF0Y2gJCVwKICAgJUQlL3BhY2thZ2VzL3BhdGNoZXMvcDd6aXAtQ1ZFLTIwMTct MTc5NjkucGF0Y2gJCVwKKyAgJUQlL3BhY2thZ2VzL3BhdGNoZXMvcG5ldC1maXgtbGluZS1udW1i ZXItaW5mby5wYXRjaAkJXAorICAlRCUvcGFja2FnZXMvcGF0Y2hlcy9wbmV0LWZpeC1vZmYtYnkt b25lLnBhdGNoCQlcCisgICVEJS9wYWNrYWdlcy9wYXRjaGVzL3BuZXQtbmV3ZXItbGliZ2MtZml4 LnBhdGNoCQlcCisgICVEJS9wYWNrYWdlcy9wYXRjaGVzL3BuZXQtbmV3ZXItdGV4aW5mby1maXgu cGF0Y2gJCVwKICAgJUQlL3BhY2thZ2VzL3BhdGNoZXMvcDd6aXAtZml4LWJ1aWxkLXdpdGgtZ2Nj LTExLnBhdGNoCVwKICAgJUQlL3BhY2thZ2VzL3BhdGNoZXMvcDd6aXAtcmVtb3ZlLXVudXNlZC1j b2RlLnBhdGNoCQlcCiAgICVEJS9wYWNrYWdlcy9wYXRjaGVzL3BhbS1rcmI1LUNWRS0yMDIwLTEw NTk1LnBhdGNoCQlcCmRpZmYgLS1naXQgYS9nbnUvcGFja2FnZXMvZG90bmV0LnNjbSBiL2dudS9w YWNrYWdlcy9kb3RuZXQuc2NtCmluZGV4IDMwODRlMWNmM2E1Li5mZDBkNzFiZmU2OSAxMDA2NDQK LS0tIGEvZ251L3BhY2thZ2VzL2RvdG5ldC5zY20KKysrIGIvZ251L3BhY2thZ2VzL2RvdG5ldC5z Y20KQEAgLTYwLDMgKzYwLDEyNyBAQCAoZGVmaW5lLXB1YmxpYyB0cmVlY2MKIG9mIGNvbXBpbGVy cyBhbmQgb3RoZXIgbGFuZ3VhZ2UtYmFzZWQgdG9vbHMuICBJdCBtYW5hZ2VzIHRoZSBnZW5lcmF0 aW9uIG9mCiBjb2RlIHRvIGhhbmRsZSBhYnN0cmFjdCBzeW50YXggdHJlZXMgYW5kIG9wZXJhdGlv bnMgdXBvbiB0aGUgdHJlZXMuIikKICAgICAobGljZW5zZSBsaWNlbnNlOmdwbDIrKSkpCisKKzs7 IHNldmVyYWwgaW1wcm92ZW1lbnRzIG9jY3VycmVkIHBhc3QgdGhlIDAuOC4wIHJlbGVhc2UgdGhh dCBtYWtlIGl0IGVhc2llciB0bworOzsgYm9vdHN0cmFwIG1vbm8KKyhkZWZpbmUtcHVibGljIHBu ZXQtZ2l0CisgIChsZXQgKChjb21taXQgIjNiYWY5NDczNGQ4ZGMzZmRhYmJhNjhhODg5MWU2N2E0 M2VkNmM0YmQiKQorICAgICAgICAodmVyc2lvbiAiMC44LjAiKQorICAgICAgICAocmV2aXNpb24g IjAiKQorICAgICAgICAobGliaml0LXN1cHBvcnRlZD8KKyAgICAgICAgIChsYW1iZGEgKCkKKyAg ICAgICAgICAgOzsgVE9ETzogYWNjdXJhdGVseSBkZXRlcm1pbmUgd2hpY2ggcGxhdGZvcm1zIGFy ZQorICAgICAgICAgICA7OyBhbmQgYXJlbid0IHN1cHBvcnRlZCBieSBsaWJqaXQsIHRoZW4gdXNl OgorICAgICAgICAgICA7OworICAgICAgICAgICA7OyAoc3VwcG9ydGVkLXBhY2thZ2U/IGxpYmpp dAorICAgICAgICAgICA7OyAgICAgICAgICAgICAgICAgICAgIChvciAoJWN1cnJlbnQtdGFyZ2V0 LXN5c3RlbSkKKyAgICAgICAgICAgOzsgICAgICAgICAgICAgICAgICAgICAgICAgKCVjdXJyZW50 LXN5c3RlbSkpKQorICAgICAgICAgICAodGFyZ2V0LXg4Nj8pKSkpCisgICAgKHBhY2thZ2UKKyAg ICAgIChuYW1lICJwbmV0LWdpdCIpCisgICAgICAodmVyc2lvbiAoZ2l0LXZlcnNpb24gdmVyc2lv biByZXZpc2lvbiBjb21taXQpKQorICAgICAgKHNvdXJjZSAob3JpZ2luCisgICAgICAgICAgICAg ICAgKG1ldGhvZCBnaXQtZmV0Y2gpCisgICAgICAgICAgICAgICAgKHVyaSAoZ2l0LXJlZmVyZW5j ZQorICAgICAgICAgICAgICAgICAgICAgICh1cmwgImh0dHBzOi8vZ2l0LnNhdmFubmFoLmdudS5v cmcvZ2l0L2RvdGdudS1wbmV0L3BuZXQuZ2l0IikKKyAgICAgICAgICAgICAgICAgICAgICAoY29t bWl0IGNvbW1pdCkpKQorICAgICAgICAgICAgICAgIChmaWxlLW5hbWUgKGdpdC1maWxlLW5hbWUg bmFtZSB2ZXJzaW9uKSkKKyAgICAgICAgICAgICAgICAoc2hhMjU2CisgICAgICAgICAgICAgICAg IChiYXNlMzIKKyAgICAgICAgICAgICAgICAgICIwdnpudnJnejhsMG1waWIxcno1djNjbHI3Y241 NzB2eXA4MGY3ZjFqdnppdm5jMWltem42IikpCisgICAgICAgICAgICAgICAgKG1vZHVsZXMgJygo Z3VpeCBidWlsZCB1dGlscykpKQorICAgICAgICAgICAgICAgIChzbmlwcGV0CisgICAgICAgICAg ICAgICAgICN+KGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAoZm9yLWVhY2ggZGVsZXRlLWZp bGUtcmVjdXJzaXZlbHkgJygibGliZmZpIiAibGliZ2MiKSkKKyAgICAgICAgICAgICAgICAgICAg IChmb3ItZWFjaCBkZWxldGUtZmlsZSAoZmlsdGVyIGZpbGUtZXhpc3RzPworICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJygiY29tcGlsZSIKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvbmZpZ3Vy ZSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ImNvbmZpZy5ndWVzcyIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgImNvbmZpZy5zdWIiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICJkZXBjb21wIgorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW5zdGFsbC1zaCIKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImx0Y29uZmlnIgorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibHRjZi1jLnNo IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi bHRtYWluLnNoIikpKQorICAgICAgICAgICAgICAgICAgICAgKGZvci1lYWNoIGRlbGV0ZS1maWxl IChmaW5kLWZpbGVzICIuIiAiTWFrZWZpbGUoXFwuaW4pPyQiKSkKKyAgICAgICAgICAgICAgICAg ICAgIChmb3ItZWFjaCBkZWxldGUtZmlsZSAoZmluZC1maWxlcyAiLiIgIl9ncmFtbWFyXFwuKGN8 aCkkIikpCisgICAgICAgICAgICAgICAgICAgICAoZm9yLWVhY2ggZGVsZXRlLWZpbGUgKGZpbmQt ZmlsZXMgIi4iICJfc2Nhbm5lclxcLihjfGgpJCIpKQorICAgICAgICAgICAgICAgICAgICAgOzsg Rml4IHRvIG5vdCByZXF1aXJlIGJ1bmRsZWQgZGVwZW5kZW5jaWVzCisgICAgICAgICAgICAgICAg ICAgICAoc3Vic3RpdHV0ZSogImNvbmZpZ3VyZS5pbiIKKyAgICAgICAgICAgICAgICAgICAgICAg KCgiR0NMSUJTPScuKmxpYmdjLmEnIikgIkdDTElCUz0nLWxnYyciKQorICAgICAgICAgICAgICAg ICAgICAgICA7OyBBQ19TRUFSQ0hfTElCSklUIGNoZWNrcyBoYXJkY29kZWQgaGVhZGVyIGxvY2F0 aW9ucworICAgICAgICAgICAgICAgICAgICAgICAoKCJzZWFyY2hfbGliaml0PXRydWUiKQorICAg ICAgICAgICAgICAgICAgICAgICAgKHN0cmluZy1hcHBlbmQgInNlYXJjaF9saWJqaXQ9ZmFsc2Vc biIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJKSVRfTElCUz0tbGpp dCIpKSkKKyAgICAgICAgICAgICAgICAgICAgIChzdWJzdGl0dXRlKiAiTWFrZWZpbGUuYW0iCisg ICAgICAgICAgICAgICAgICAgICAgICgoIk9QVF9TVUJESVJTIFxcKz0gbGliLioiKSAiIikpCisg ICAgICAgICAgICAgICAgICAgICAoc3Vic3RpdHV0ZSogInN1cHBvcnQvaGJfZ2MuYyIKKyAgICAg ICAgICAgICAgICAgICAgICAgKCgiI2luY2x1ZGUgLiovbGliZ2MvaW5jbHVkZS9nYy5oLiIpCisg ICAgICAgICAgICAgICAgICAgICAgICAiI2luY2x1ZGUgPGdjLmg+IikKKyAgICAgICAgICAgICAg ICAgICAgICAgKCgiI2luY2x1ZGUgLiovbGliZ2MvaW5jbHVkZS9nY190eXBlZC5oLiIpCisgICAg ICAgICAgICAgICAgICAgICAgICAiI2luY2x1ZGUgPGdjL2djX3R5cGVkLmg+IikpCisgICAgICAg ICAgICAgICAgICAgICAoc3Vic3RpdHV0ZSogKGxpc3QgImNvZGVnZW4vTWFrZWZpbGUuYW0iCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNzY2MvYmYvTWFrZWZpbGUu YW0iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNzY2MvY3NoYXJw L01ha2VmaWxlLmFtIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJj c2NjL2MvTWFrZWZpbGUuYW0iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgImNzY2MvamF2YS9NYWtlZmlsZS5hbSIpCisgICAgICAgICAgICAgICAgICAgICAgIDs7IEdl bmVyYXRlZCBmaWxlcyBhcmVuJ3QgcHJlcmVxdWlzaXRlcworICAgICAgICAgICAgICAgICAgICAg ICAoKCJUUkVFQ0NfT1VUUFVUID0uKiIpICIiKSkKKyAgICAgICAgICAgICAgICAgICAgIChzdWJz dGl0dXRlKiAiY3NjYy9jc2hhcnAvY3NfZ3JhbW1hci55IgorICAgICAgICAgICAgICAgICAgICAg ICAoKCJZWUxFWCIpICJ5eWxleCgpIikpCisgICAgICAgICAgICAgICAgICAgICAoc3Vic3RpdHV0 ZSogImNzY2MvY29tbW9uL2NjX21haW4uaCIKKyAgICAgICAgICAgICAgICAgICAgICAgKCgiQ0NQ cmVQcm9jIENDUHJlUHJvY2Vzc29yU3RyZWFtOyIgYWxsKQorICAgICAgICAgICAgICAgICAgICAg ICAgKHN0cmluZy1hcHBlbmQgImV4dGVybiAiIGFsbCkpKQorICAgICAgICAgICAgICAgICAgICAg KHN1YnN0aXR1dGUqICJjc2RvYy9zY2FubmVyLmMiCisgICAgICAgICAgICAgICAgICAgICAgICgo ImludFx0dG9rZW47IiBhbGwpCisgICAgICAgICAgICAgICAgICAgICAgICAoc3RyaW5nLWFwcGVu ZCAiZXh0ZXJuICIgYWxsKSkpCisgICAgICAgICAgICAgICAgICAgICAoc3Vic3RpdHV0ZSogImRv Yy9jdm1kb2MucHkiCisgICAgICAgICAgICAgICAgICAgICAgICgoInB5dGhvbjEuNSIpCisgICAg ICAgICAgICAgICAgICAgICAgICAicHl0aG9uMyIpKQorICAgICAgICAgICAgICAgICAgICAgKHN1 YnN0aXR1dGUqICJwcm9maWxlcy9mdWxsIgorICAgICAgICAgICAgICAgICAgICAgICA7OyBJZiB0 aGlzIGlzIGxlZnQgdW5tb2RpZmllZCwgaXQgY2F1c2VzIGEgc2VnZmF1bHQgaW4KKyAgICAgICAg ICAgICAgICAgICAgICAgOzsgcG5ldGxpYidzIHRlc3RzLiAgVW5yb2xsZXJzIGFyZSBzb21ld2hh dAorICAgICAgICAgICAgICAgICAgICAgICA7OyBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgYW55d2F5 LCBhbmQgaXQgd2lsbCBmYWxsIGJhY2sKKyAgICAgICAgICAgICAgICAgICAgICAgOzsgdG8gdXNp bmcgR05VIEMncyBsYWJlbHMtYXMtdmFsdWVzIGZlYXR1cmUgKGl0IGNhbiBiZQorICAgICAgICAg ICAgICAgICAgICAgICA7OyBtYWRlIHRvIGZ1cnRoZXIgZmFsbCBiYWNrIHRvIGZ1bGx5CisgICAg ICAgICAgICAgICAgICAgICAgIDs7IHN0YW5kYXJkcy1wb3J0YWJsZSBpbnRlcnByZXRlciBpbXBs ZW1lbnRhdGlvbnMpLgorICAgICAgICAgICAgICAgICAgICAgICAoKCJJTF9DT05GSUdfVU5ST0xM PXkiKQorICAgICAgICAgICAgICAgICAgICAgICAgIklMX0NPTkZJR19VTlJPTEw9biIpKSkpCisg ICAgICAgICAgICAgICAgKHBhdGNoZXMKKyAgICAgICAgICAgICAgICAgKHNlYXJjaC1wYXRjaGVz ICJwbmV0LW5ld2VyLWxpYmdjLWZpeC5wYXRjaCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICJwbmV0LW5ld2VyLXRleGluZm8tZml4LnBhdGNoIgorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgInBuZXQtZml4LWxpbmUtbnVtYmVyLWluZm8ucGF0Y2giCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAicG5ldC1maXgtb2ZmLWJ5LW9uZS5wYXRjaCIpKSkp CisgICAgICAoYnVpbGQtc3lzdGVtIGdudS1idWlsZC1zeXN0ZW0pCisgICAgICAobmF0aXZlLWlu cHV0cworICAgICAgIChsaXN0IGF1dG9jb25mCisgICAgICAgICAgICAgYXV0b21ha2UKKyAgICAg ICAgICAgICBiaXNvbgorICAgICAgICAgICAgIGZsZXgKKyAgICAgICAgICAgICBsaWJ0b29sCisg ICAgICAgICAgICAgbGliYXRvbWljLW9wcworICAgICAgICAgICAgIChkZWZhdWx0LXB5dGhvbikg OzsgZm9yIGN2bWRvYy5weQorICAgICAgICAgICAgIHRleGluZm8KKyAgICAgICAgICAgICB0cmVl Y2MpKQorICAgICAgKGlucHV0cworICAgICAgIChjb25zKiBsaWJnYworICAgICAgICAgICAgICBs aWJmZmkKKyAgICAgICAgICAgICAgKGlmIChsaWJqaXQtc3VwcG9ydGVkPykKKyAgICAgICAgICAg ICAgICAgIChsaXN0IGxpYmppdCkKKyAgICAgICAgICAgICAgICAgICcoKSkpKQorICAgICAgKGFy Z3VtZW50cworICAgICAgIChhcHBlbmQgKGlmIChsaWJqaXQtc3VwcG9ydGVkPykKKyAgICAgICAg ICAgICAgICAgICAobGlzdCAjOmNvbmZpZ3VyZS1mbGFncyAjfihsaXN0ICItLXdpdGgtaml0Iikp CisgICAgICAgICAgICAgICAgICAgJygpKQorICAgICAgICAgICAgICAgKGxpc3QgIzptYWtlLWZs YWdzICN+KGxpc3QgIkNGTEFHUys9LVduby1wb2ludGVyLXRvLWludC1jYXN0IikpKSkKKyAgICAg IChuYXRpdmUtc2VhcmNoLXBhdGhzCisgICAgICAgKGxpc3QgKHNlYXJjaC1wYXRoLXNwZWNpZmlj YXRpb24KKyAgICAgICAgICAgICAgKHZhcmlhYmxlICJDU0NDX0xJQl9QQVRIIikKKyAgICAgICAg ICAgICAgKGZpbGVzIChsaXN0ICJsaWIvY3NjYy9saWIiKSkpKSkKKyAgICAgIChob21lLXBhZ2Ug Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9kb3RnbnUvaHRtbDIuMC9wbmV0Lmh0bWwiKQor ICAgICAgKHN5bm9wc2lzICJDb21waWxlciBmb3IgdGhlIEMjIHByb2dyYW1taW5nIGxhbmd1YWdl IikKKyAgICAgIChkZXNjcmlwdGlvbgorICAgICAgICJUaGUgZ29hbCBvZiB0aGlzIHByb2plY3Qg aXMgdG8gYnVpbGQgYSBzdWl0ZSBvZiBmcmVlIHNvZnR3YXJlIHRvb2xzCit0byBidWlsZCBhbmQg ZXhlY3V0ZSAuTkVUIGFwcGxpY2F0aW9ucywgaW5jbHVkaW5nIGEgQyMgY29tcGlsZXIsCithc3Nl bWJsZXIsIGRpc2Fzc2VtYmxlciwgYW5kIHJ1bnRpbWUgZW5naW5lLiIpCisgICAgICAobGljZW5z ZSBsaWNlbnNlOmdwbDIrKSkpKQpkaWZmIC0tZ2l0IGEvZ251L3BhY2thZ2VzL3BhdGNoZXMvcG5l dC1maXgtbGluZS1udW1iZXItaW5mby5wYXRjaCBiL2dudS9wYWNrYWdlcy9wYXRjaGVzL3BuZXQt Zml4LWxpbmUtbnVtYmVyLWluZm8ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw MDAwMDAwMDAuLjllNWFmODQ5NDEzCi0tLSAvZGV2L251bGwKKysrIGIvZ251L3BhY2thZ2VzL3Bh dGNoZXMvcG5ldC1maXgtbGluZS1udW1iZXItaW5mby5wYXRjaApAQCAtMCwwICsxLDEzIEBACitk aWZmIC0tZ2l0IGEvY29kZWdlbi9jZ19jb2VyY2UuYyBiL2NvZGVnZW4vY2dfY29lcmNlLmMKK2lu ZGV4IDkyZDJmNTlhLi5jOTBhZDVlMiAxMDA2NDQKKy0tLSBhL2NvZGVnZW4vY2dfY29lcmNlLmMK KysrKyBiL2NvZGVnZW4vY2dfY29lcmNlLmMKK0BAIC0xMjAzLDYgKzEyMDMsOCBAQCBpbnQgSUxD b2VyY2UoSUxHZW5JbmZvICppbmZvLCBJTE5vZGUgKm5vZGUsIElMTm9kZSAqKnBhcmVudCwKKyAJ CQkJCSE9IElMTWFjaGluZVR5cGVfVm9pZCkKKyAJeworIAkJKnBhcmVudCA9IElMTm9kZV9DYXN0 U2ltcGxlX2NyZWF0ZShub2RlLCBjb25zdFR5cGUpOworKyAgICAgICAgICAgICAgICB5eXNldGZp bGVuYW1lKCpwYXJlbnQsIHl5Z2V0ZmlsZW5hbWUobm9kZSkpOworKwkJeXlzZXRsaW5lbnVtKCpw YXJlbnQsIHl5Z2V0bGluZW51bShub2RlKSk7CisgCQlyZXR1cm4gMTsKKyAJfQorIAllbHNlIGlm KGluZGlyZWN0ICYmIEdldEluZGlyZWN0Q29udmVydFJ1bGVzKGluZm8sZnJvbVR5cGUsdG9UeXBl LDAsIApkaWZmIC0tZ2l0IGEvZ251L3BhY2thZ2VzL3BhdGNoZXMvcG5ldC1maXgtb2ZmLWJ5LW9u ZS5wYXRjaCBiL2dudS9wYWNrYWdlcy9wYXRjaGVzL3BuZXQtZml4LW9mZi1ieS1vbmUucGF0Y2gK bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjg1OGQyMjY2OTc2Ci0tLSAv ZGV2L251bGwKKysrIGIvZ251L3BhY2thZ2VzL3BhdGNoZXMvcG5ldC1maXgtb2ZmLWJ5LW9uZS5w YXRjaApAQCAtMCwwICsxLDEzIEBACitkaWZmIC0tZ2l0IGEvY29kZWdlbi9jZ19nZW5hdHRyLmMg Yi9jb2RlZ2VuL2NnX2dlbmF0dHIuYworaW5kZXggNTM1ODUyZGEuLmMzYWNjMGRjIDEwMDY0NAor LS0tIGEvY29kZWdlbi9jZ19nZW5hdHRyLmMKKysrKyBiL2NvZGVnZW4vY2dfZ2VuYXR0ci5jCitA QCAtMTUzMiw3ICsxNTMyLDcgQEAgc3RhdGljIGludCBNYXJzaGFsQXNBdHRyaWJ1dGUoSUxHZW5J bmZvICppbmZvLAorIAkJCWVsc2UKKyAJCQl7CisgCQkJCXNpemVQYXJhbUluZGV4ID0gYXR0cmli dXRlSW5mby0+bmFtZWRBcmdzW2N1cnJlbnROYW1lZEFyZ10uZXZhbFZhbHVlLnVuLmk0VmFsdWU7 CistCQkJCWlmKHNpemVQYXJhbUluZGV4IDw9IDApCisrCQkJCWlmKHNpemVQYXJhbUluZGV4IDwg MCkKKyAJCQkJeworIAkJCQkJQ0dFcnJvckZvck5vZGUoaW5mbywgYXR0cmlidXRlSW5mby0+bmFt ZWRBcmdzW2N1cnJlbnROYW1lZEFyZ10ubm9kZSwKKyAJCQkJCQlfKCJUaGUgc2l6ZSBwYXJhbWV0 ZXIgaW5kZXggbXVzdCBiZSA+PSAwIikpOwpkaWZmIC0tZ2l0IGEvZ251L3BhY2thZ2VzL3BhdGNo ZXMvcG5ldC1uZXdlci1saWJnYy1maXgucGF0Y2ggYi9nbnUvcGFja2FnZXMvcGF0Y2hlcy9wbmV0 LW5ld2VyLWxpYmdjLWZpeC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw MDAwMC4uMTA4NGI1YTViZWMKLS0tIC9kZXYvbnVsbAorKysgYi9nbnUvcGFja2FnZXMvcGF0Y2hl cy9wbmV0LW5ld2VyLWxpYmdjLWZpeC5wYXRjaApAQCAtMCwwICsxLDQ1IEBACitkaWZmIC0tZ2l0 IGEvc3VwcG9ydC9oYl9nYy5jIGIvc3VwcG9ydC9oYl9nYy5jCitpbmRleCBhNWFkZGIyZC4uNDEx MjY5NjMgMTAwNjQ0CistLS0gYS9zdXBwb3J0L2hiX2djLmMKKysrKyBiL3N1cHBvcnQvaGJfZ2Mu YworQEAgLTEwNCwxMiArMTA0LDYgQEAgc3RhdGljIHZvbGF0aWxlIGludCBfRmluYWxpemVyc1J1 bm5pbmdTeW5jaHJvbm91c2x5ID0gMDsKKyAJI2RlZmluZSBHQ19UUkFDRShhLCBiKQorICNlbmRp ZgorIAorLS8qCistICogVGhpcyBpcyBhIGludGVybmFsIGdsb2JhbCB2YXJpYWJsZSB3aXRoIHRo ZSBudW1iZXIgb2YgcmVjbGFpbWVkIGJ5dGVzCistICogYWZ0ZXIgYSBnYXJiYWdlIGNvbGxlY3Rp b24uCistICovCistZXh0ZXJuIEdDX3NpZ25lZF93b3JkIEdDX2J5dGVzX2ZvdW5kOworLQorIC8q CisgICoJTWFpbiBlbnRyeSBwb2ludCBmb3IgdGhlIGZpbmFsaXplciB0aHJlYWQuCisgICovCitA QCAtNDMyLDYgKzQyNiw3IEBAIGludCBJTEdDRnVsbENvbGxlY3Rpb24oaW50IHRpbWVvdXQpCisg eworIAlpbnQgbGFzdEZpbmFsaXppbmdDb3VudDsKKyAJaW50IGhhc1RocmVhZHM7CisrICAgICAg IHN0cnVjdCBHQ19wcm9mX3N0YXRzX3Mgc3RhdHM7CisgCisgCWhhc1RocmVhZHMgPSBfSUxIYXNU aHJlYWRzKCk7CisgCitAQCAtNDYyLDcgKzQ1Nyw4IEBAIGludCBJTEdDRnVsbENvbGxlY3Rpb24o aW50IHRpbWVvdXQpCisgCQkJR0NfVFJBQ0UoIkxhc3QgZmluYWxpemluZ0NvdW50ID0gJWlcbiIs IGxhc3RGaW5hbGl6aW5nQ291bnQpOworIAorIAkJCUdDX2djb2xsZWN0KCk7CistCQkJYnl0ZXND b2xsZWN0ZWQgPSBHQ19ieXRlc19mb3VuZDsKKysgICAgICAgICAgICAgICAgICAgICAgIEdDX2dl dF9wcm9mX3N0YXRzKCZzdGF0cywgc2l6ZW9mKHN0YXRzKSk7CisrCQkJYnl0ZXNDb2xsZWN0ZWQg PSBzdGF0cy5ieXRlc19yZWNsYWltZWRfc2luY2VfZ2M7CisgCisgCQkJR0NfVFJBQ0UoIkdDOiBi eXRlcyBjb2xsZWN0ZWQgPSAgJWlcbiIsIGJ5dGVzQ29sbGVjdGVkKTsKKyAKK0BAIC01MTYsNyAr NTEyLDggQEAgaW50IElMR0NGdWxsQ29sbGVjdGlvbihpbnQgdGltZW91dCkKKyAJCQlHQ19UUkFD RSgiTGFzdCBmaW5hbGl6aW5nQ291bnQgPSAlaVxuIiwgbGFzdEZpbmFsaXppbmdDb3VudCk7Cisg CisgCQkJR0NfZ2NvbGxlY3QoKTsKKy0JCQlieXRlc0NvbGxlY3RlZCA9IEdDX2J5dGVzX2ZvdW5k OworKyAgICAgICAgICAgICAgICAgICAgICAgR0NfZ2V0X3Byb2Zfc3RhdHMoJnN0YXRzLCBzaXpl b2Yoc3RhdHMpKTsKKysJCQlieXRlc0NvbGxlY3RlZCA9IHN0YXRzLmJ5dGVzX3JlY2xhaW1lZF9z aW5jZV9nYzsKKyAKKyAJCQlHQ19UUkFDRSgiR0M6IGJ5dGVzIGNvbGxlY3RlZCA9ICAlaVxuIiwg Ynl0ZXNDb2xsZWN0ZWQpOworIApkaWZmIC0tZ2l0IGEvZ251L3BhY2thZ2VzL3BhdGNoZXMvcG5l dC1uZXdlci10ZXhpbmZvLWZpeC5wYXRjaCBiL2dudS9wYWNrYWdlcy9wYXRjaGVzL3BuZXQtbmV3 ZXItdGV4aW5mby1maXgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw MDAuLmI1NzA1MmVlZWFhCi0tLSAvZGV2L251bGwKKysrIGIvZ251L3BhY2thZ2VzL3BhdGNoZXMv cG5ldC1uZXdlci10ZXhpbmZvLWZpeC5wYXRjaApAQCAtMCwwICsxLDEzIEBACitkaWZmIC0tZ2l0 IGEvZG9jL3BuZXR0b29scy50ZXhpIGIvZG9jL3BuZXR0b29scy50ZXhpCitpbmRleCA5MTZkOTBi Yi4uY2RiZTA1Y2YgMTAwNjQ0CistLS0gYS9kb2MvcG5ldHRvb2xzLnRleGkKKysrKyBiL2RvYy9w bmV0dG9vbHMudGV4aQorQEAgLTU5LDcgKzU5LDcgQEAgQ29weXJpZ2h0IEBjb3B5cmlnaHR7fSAy MDAxLCAyMDAyLCAyMDAzIFNvdXRoZXJuIFN0b3JtIFNvZnR3YXJlLCBQdHkgTHRkCisgQGNlbnRl ciBAdGl0bGVmb250e1BvcnRhYmxlLk5FVCBEZXZlbG9wbWVudCBUb29sc30KKyAKKyBAdnNraXAg MHB0IHBsdXMgMWZpbGwKKy1AY2VudGVye0NvcHlyaWdodCBAY29weXJpZ2h0e30gMjAwMSwgMjAw MiwgMjAwMyBTb3V0aGVybiBTdG9ybSBTb2Z0d2FyZSwgUHR5IEx0ZH0KKytAY2VudGVyIENvcHly aWdodCBAY29weXJpZ2h0e30gMjAwMSwgMjAwMiwgMjAwMyBTb3V0aGVybiBTdG9ybSBTb2Z0d2Fy ZSwgUHR5IEx0ZAorIEBlbmQgdGl0bGVwYWdlCisgCisgQGMgLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS0gCjIu NDUuMgoK --b1=_sUWWoGLuiCwxqVBZd1XkAit8Hrc2P4iMkhdKhObgTww Content-Type: text/x-patch; name=v2-0007-gnu-Add-mono-2.6.4.patch Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=v2-0007-gnu-Add-mono-2.6.4.patch RnJvbSBmMTNmZjUwMmY4ODdkMzE2N2MyZjQ4MmMyYjg1MTg4MWMxNzU0N2U0IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiB1bm11c2ggPHVubXVzaEBoYXNoYmFuZy5zaD4KRGF0ZTogVHVl LCAyNiBOb3YgMjAyNCAxMzowNDoxMwpTdWJqZWN0OiBbUEFUQ0ggdjIgMDcvMjFdIGdudTogQWRk IG1vbm8tMi42LjQuCgoqIGdudS9kb3RuZXQuc2NtIChtb25vLTIuNi40KTogTmV3IHZhcmlhYmxl LgoqIGdudS9wYWNrYWdlcy9wYXRjaGVzL21vbm8tMi42LjQtZml4ZXMucGF0Y2g6IE5ldyBwYXRj aC4KKiBnbnUvbG9jYWwubWsgKGRpc3RfcGF0Y2hfREFUQSk6IFJlZ2lzdGVyIGl0LgoKLS0tCiBn bnUvbG9jYWwubWsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDEgKwogZ251L3Bh Y2thZ2VzL2RvdG5ldC5zY20gICAgICAgICAgICAgICAgICAgICB8IDIzICsrKysrKysrKysKIGdu dS9wYWNrYWdlcy9wYXRjaGVzL21vbm8tMi42LjQtZml4ZXMucGF0Y2ggfCA0OSArKysrKysrKysr KysrKysrKysrKysKIDMgZmlsZXMgY2hhbmdlZCwgNzMgaW5zZXJ0aW9ucygrKQogY3JlYXRlIG1v ZGUgMTAwNjQ0IGdudS9wYWNrYWdlcy9wYXRjaGVzL21vbm8tMi42LjQtZml4ZXMucGF0Y2gKCmRp ZmYgLS1naXQgYS9nbnUvbG9jYWwubWsgYi9nbnUvbG9jYWwubWsKaW5kZXggZmE5OTY5NmUzMzgu Ljk5ZTEwNmRmOGZjIDEwMDY0NAotLS0gYS9nbnUvbG9jYWwubWsKKysrIGIvZ251L2xvY2FsLm1r CkBAIC0xODI3LDYgKzE4MjcsNyBAQCBkaXN0X3BhdGNoX0RBVEEgPQkJCQkJCVwKICAgJUQlL3Bh Y2thZ2VzL3BhdGNoZXMvbW9uby0xLjkuMS1hZGQtTU9OT19DUkVBVEVfSU1BR0VfVkVSU0lPTi5w YXRjaAkJXAogICAlRCUvcGFja2FnZXMvcGF0Y2hlcy9tb25vLTEuOS4xLWZpeGVzLnBhdGNoCQkJ XAogICAlRCUvcGFja2FnZXMvcGF0Y2hlcy9tb25vLTIuNC4yLjMtZml4ZXMucGF0Y2gJCQlcCisg ICVEJS9wYWNrYWdlcy9wYXRjaGVzL21vbm8tMi42LjQtZml4ZXMucGF0Y2gJCQlcCiAgICVEJS9w YWNrYWdlcy9wYXRjaGVzL21vc2FpY2F0Y2hlci11bmJ1bmRsZS1odHNsaWIucGF0Y2gJXAogICAl RCUvcGFja2FnZXMvcGF0Y2hlcy9tcnJlc2N1ZS1zdXBwb3J0LWxvdmUtMTEucGF0Y2gJCVwKICAg JUQlL3BhY2thZ2VzL3BhdGNoZXMvbXRvb2xzLW1mb3JtYXQtdW5pbml0aWFsaXplZC5wYXRjaAlc CmRpZmYgLS1naXQgYS9nbnUvcGFja2FnZXMvZG90bmV0LnNjbSBiL2dudS9wYWNrYWdlcy9kb3Ru ZXQuc2NtCmluZGV4IGFjNGRmYjY3YzRjLi44MmJlZTU1YWE5MCAxMDA2NDQKLS0tIGEvZ251L3Bh Y2thZ2VzL2RvdG5ldC5zY20KKysrIGIvZ251L3BhY2thZ2VzL2RvdG5ldC5zY20KQEAgLTUyMiwz ICs1MjIsMjYgQEAgKGRlZmluZS1wdWJsaWMgbW9uby0yLjQuMgogICAgICAgICAgICAgICBsaWNl bnNlOmxncGwyLjArIDs7IG5vdGU6IC4vbWNzL0xJQ0VOU0UuTEdQTCBzcGVjaWZpZXMgbm8gdmVy c2lvbgogICAgICAgICAgICAgICA7OyBtY3MvamF5CiAgICAgICAgICAgICAgIGxpY2Vuc2U6YnNk LTQpKSkpCisKKyhkZWZpbmUtcHVibGljIG1vbm8tMi42LjQKKyAgKHBhY2thZ2UKKyAgICAoaW5o ZXJpdCBtb25vLTIuNC4yKQorICAgICh2ZXJzaW9uICIyLjYuNCIpCisgICAgKG5hbWUgIm1vbm8i KQorICAgIChzb3VyY2UgKG9yaWdpbgorICAgICAgICAgICAgICAobWV0aG9kIGdpdC1mZXRjaCkK KyAgICAgICAgICAgICAgKHVyaQorICAgICAgICAgICAgICAgKGdpdC1yZWZlcmVuY2UKKyAgICAg ICAgICAgICAgICAodXJsICJodHRwczovL2dpdGxhYi53aW5laHEub3JnL21vbm8vbW9uby5naXQi KQorICAgICAgICAgICAgICAgIChjb21taXQgKHN0cmluZy1hcHBlbmQgIm1vbm8tIiAiMi42LjQi KSkpKQorICAgICAgICAgICAgICAoZmlsZS1uYW1lIChnaXQtZmlsZS1uYW1lIG5hbWUgdmVyc2lv bikpCisgICAgICAgICAgICAgIChzaGEyNTYKKyAgICAgICAgICAgICAgIChiYXNlMzIKKyAgICAg ICAgICAgICAgICAiMTc5Nzd3NDVxaDhqbWZzbDRiaGk4M3NpNGZ4ZDhzM3g4YjBweG53ZHpqdjNi cXI1NGM4NSIpKQorICAgICAgICAgICAgICAobW9kdWxlcyAnKChndWl4IGJ1aWxkIHV0aWxzKQor ICAgICAgICAgICAgICAgICAgICAgICAgIChpY2UtOSBzdHJpbmctZnVuKSkpCisgICAgICAgICAg ICAgIChzbmlwcGV0IHByZXBhcmUtbW9uby1zb3VyY2UpCisgICAgICAgICAgICAgIChwYXRjaGVz CisgICAgICAgICAgICAgICAoc2VhcmNoLXBhdGNoZXMgIm1vbm8tMi42LjQtZml4ZXMucGF0Y2gi KSkpKQorICAgIChuYXRpdmUtaW5wdXRzIChtb2RpZnktaW5wdXRzIChwYWNrYWdlLW5hdGl2ZS1p bnB1dHMgbW9uby0yLjQuMikKKyAgICAgICAgICAgICAgICAgICAgIChyZXBsYWNlICJtb25vIiBt b25vLTIuNC4yKSkpKSkKZGlmZiAtLWdpdCBhL2dudS9wYWNrYWdlcy9wYXRjaGVzL21vbm8tMi42 LjQtZml4ZXMucGF0Y2ggYi9nbnUvcGFja2FnZXMvcGF0Y2hlcy9tb25vLTIuNi40LWZpeGVzLnBh dGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5lODAyYzhiYjdlNAot LS0gL2Rldi9udWxsCisrKyBiL2dudS9wYWNrYWdlcy9wYXRjaGVzL21vbm8tMi42LjQtZml4ZXMu cGF0Y2gKQEAgLTAsMCArMSw0OSBAQAorZGlmZiAtLWdpdCBhL2RhdGEvbW9uby5wYy5pbiBiL2Rh dGEvbW9uby5wYy5pbgoraW5kZXggMDFlMGE5ZTVkNDEuLmQ0M2JiMTg3MjE4IDEwMDY0NAorLS0t IGEvZGF0YS9tb25vLnBjLmluCisrKysgYi9kYXRhL21vbm8ucGMuaW4KK0BAIC03LDggKzcsNiBA QCBzeXNjb25mZGlyPUBzeXNjb25mZGlyQAorIE5hbWU6IE1vbm8KKyBEZXNjcmlwdGlvbjogTW9u byBSdW50aW1lCisgVmVyc2lvbjogQFZFUlNJT05ACistIyMgQ29tbWVudGVkIG91dCBiZWNhdXNl IFNMRSBoaWRlcyBkZXZlbCBmaWxlcyBpbiB0aGUgU0xFIFNESywKKy0jIyB3aGljaCBub3QgYWxs IGN1c3RvbWVycyB3aWxsIGhhdmUuCistI1JlcXVpcmVzOiBnbGliLTIuMCBndGhyZWFkLTIuMAor K1JlcXVpcmVzOiBnbGliLTIuMCBndGhyZWFkLTIuMCBiZHctZ2MKKyBMaWJzOiAtTCR7bGliZGly fSBAZXhwb3J0X2xkZmxhZ3NAIC1sbW9ubyBAbGlibW9ub19sZGZsYWdzQAorIENmbGFnczogLUkk e2luY2x1ZGVkaXJ9IEBsaWJtb25vX2NmbGFnc0AKK2RpZmYgLS1naXQgYS9tb25vLXVuaW5zdGFs bGVkLnBjLmluIGIvbW9uby11bmluc3RhbGxlZC5wYy5pbgoraW5kZXggN2ZhM2YxMmRjOTEuLjJh MDczNDM2MmZkIDEwMDY0NAorLS0tIGEvbW9uby11bmluc3RhbGxlZC5wYy5pbgorKysrIGIvbW9u by11bmluc3RhbGxlZC5wYy5pbgorQEAgLTEsNiArMSw2IEBACisgTmFtZTogTW9ubworIERlc2Ny aXB0aW9uOiBNb25vIFJ1bnRpbWUKKyBWZXJzaW9uOiBAVkVSU0lPTkAKKy1SZXF1aXJlczogZ2xp Yi0yLjAgZ3RocmVhZC0yLjAKKytSZXF1aXJlczogZ2xpYi0yLjAgZ3RocmVhZC0yLjAgYmR3LWdj CisgTGliczogLUxAbW9ub19idWlsZF9yb290QC9tb25vL21pbmkvLmxpYnMgQGV4cG9ydF9sZGZs YWdzQCAtbG1vbm8gQGxpYm1vbm9fbGRmbGFnc0AKKyBDZmxhZ3M6IC1JQGFic190b3Bfc3JjZGly QCAtSUBhYnNfdG9wX3NyY2RpckAvbW9ubyBAbGlibW9ub19jZmxhZ3NACitkaWZmIC0tZ2l0IGEv bW9uby9taW5pL2RyaXZlci5jIGIvbW9uby9taW5pL2RyaXZlci5jCitpbmRleCBjNGU3ZjRjY2Ri My4uYmI3MDVjMGQxZmMgMTAwNjQ0CistLS0gYS9tb25vL21pbmkvZHJpdmVyLmMKKysrKyBiL21v bm8vbWluaS9kcml2ZXIuYworQEAgLTEzMDIsNiArMTMwMiw3IEBAIG1vbm9fbWFpbiAoaW50IGFy Z2MsIGNoYXIqIGFyZ3ZbXSkKKyAjZW5kaWYKKyAJaWYgKCFnX3RocmVhZF9zdXBwb3J0ZWQgKCkp CisgCQlnX3RocmVhZF9pbml0IChOVUxMKTsKKysgICAgICAgIEdDX2FsbG93X3JlZ2lzdGVyX3Ro cmVhZHMoKTsKKyAKKyAJaWYgKG1vbm9fcnVubmluZ19vbl92YWxncmluZCAoKSAmJiBnZXRlbnYg KCJNT05PX1ZBTEdSSU5EX0xFQUtfQ0hFQ0siKSkgeworIAkJR01lbVZUYWJsZSBtZW1fdnRhYmxl OworZGlmZiAtLWdpdCBhL3J1bnRpbWUvTWFrZWZpbGUuYW0gYi9ydW50aW1lL01ha2VmaWxlLmFt CitpbmRleCBkYTBjMGU4NjcxZC4uOWQwZGVhZjE4MmYgMTAwNjQ0CistLS0gYS9ydW50aW1lL01h a2VmaWxlLmFtCisrKysgYi9ydW50aW1lL01ha2VmaWxlLmFtCitAQCAtMSw2ICsxLDMgQEAKKy0j IGhhY2sgdG8gcHJldmVudCAnY2hlY2snIGZyb20gZGVwZW5kaW5nIG9uICdhbGwnCistQVVUT01B S0VfT1BUSU9OUyA9IGN5Z251cworLQorIHRtcGluc3QgPSBfdG1waW5zdAorIAorIG5vaW5zdF9T Q1JJUFRTID0gbW9uby13cmFwcGVyIG1vbm9kaXMtd3JhcHBlcgotLSAKMi40NS4yCgo= --b1=_sUWWoGLuiCwxqVBZd1XkAit8Hrc2P4iMkhdKhObgTww Content-Type: text/x-patch; name=v2-0004-gnu-Add-mono-1.2.6.patch Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=v2-0004-gnu-Add-mono-1.2.6.patch RnJvbSBmYTFmZWI1MTQ3Yjg1YzE3YmUwZjZiMzY1MmVlYzNmNDY2NzQyNWU0IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiB1bm11c2ggPHVubXVzaEBoYXNoYmFuZy5zaD4KRGF0ZTogVHVl LCAyNiBOb3YgMjAyNCAxMjo1NTo1NwpTdWJqZWN0OiBbUEFUQ0ggdjIgMDQvMjFdIGdudTogQWRk IG1vbm8tMS4yLjYuCgoqIGdudS9wYWNrYWdlcy9kb3RuZXQuc2NtIChtb25vLTEuMi42KTogTmV3 IHZhcmlhYmxlLgoqIGdudS9wYWNrYWdlcy9wYXRjaGVzL21vbm8tMS4yLjYtYm9vdHN0cmFwLnBh dGNoOiBOZXcgcGF0Y2guCiogZ251L2xvY2FsLm1rIChkaXN0X3BhdGNoX0RBVEEpOiByZWdpc3Rl ciBpdC4KCi0tLQogZ251L2xvY2FsLm1rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHwgICAxICsKIGdudS9wYWNrYWdlcy9kb3RuZXQuc2NtICAgICAgICAgICAgICAgICAgICAgICB8 IDE0NSArKysrKwogLi4uL3BhdGNoZXMvbW9uby0xLjIuNi1ib290c3RyYXAucGF0Y2ggICAgICAg IHwgNTg1ICsrKysrKysrKysrKysrKysrKwogMyBmaWxlcyBjaGFuZ2VkLCA3MzEgaW5zZXJ0aW9u cygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGdudS9wYWNrYWdlcy9wYXRjaGVzL21vbm8tMS4yLjYt Ym9vdHN0cmFwLnBhdGNoCgpkaWZmIC0tZ2l0IGEvZ251L2xvY2FsLm1rIGIvZ251L2xvY2FsLm1r CmluZGV4IDBlMmQ3YmZhMTM3Li41NGYwMWJhMDVhOSAxMDA2NDQKLS0tIGEvZ251L2xvY2FsLm1r CisrKyBiL2dudS9sb2NhbC5tawpAQCAtMTgyMyw2ICsxODIzLDcgQEAgZGlzdF9wYXRjaF9EQVRB ID0JCQkJCQlcCiAgICVEJS9wYWNrYWdlcy9wYXRjaGVzL21wZzMyMS1nY2MtMTAucGF0Y2gJCQlc CiAgICVEJS9wYWNrYWdlcy9wYXRjaGVzL21vZHVsZS1pbml0LXRvb2xzLW1vZHVsZWRpci5wYXRj aAlcCiAgICVEJS9wYWNrYWdlcy9wYXRjaGVzL21vbmVyby11c2Utc3lzdGVtLW1pbml1cG5wYy5w YXRjaAkJCVwKKyAgJUQlL3BhY2thZ2VzL3BhdGNoZXMvbW9uby0xLjIuNi1ib290c3RyYXAucGF0 Y2gJCVwKICAgJUQlL3BhY2thZ2VzL3BhdGNoZXMvbW9zYWljYXRjaGVyLXVuYnVuZGxlLWh0c2xp Yi5wYXRjaAlcCiAgICVEJS9wYWNrYWdlcy9wYXRjaGVzL21ycmVzY3VlLXN1cHBvcnQtbG92ZS0x MS5wYXRjaAkJXAogICAlRCUvcGFja2FnZXMvcGF0Y2hlcy9tdG9vbHMtbWZvcm1hdC11bmluaXRp YWxpemVkLnBhdGNoCVwKZGlmZiAtLWdpdCBhL2dudS9wYWNrYWdlcy9kb3RuZXQuc2NtIGIvZ251 L3BhY2thZ2VzL2RvdG5ldC5zY20KaW5kZXggOWQ5Y2M1NDIxYjAuLjA5Mzg2NTA4MGJiIDEwMDY0 NAotLS0gYS9nbnUvcGFja2FnZXMvZG90bmV0LnNjbQorKysgYi9nbnUvcGFja2FnZXMvZG90bmV0 LnNjbQpAQCAtMjY1LDMgKzI2NSwxNDggQEAgKGRlZmluZS1wdWJsaWMgcG5ldGxpYi1naXQKICAg ICAgICAiRG90R05VIFBvcnRhYmxlLk5FVCBMaWJyYXJ5IGNvbnRhaW5zIGFuIGltcGxlbWVudGF0 aW9uIG9mIHRoZSBDIyBsaWJyYXJ5LAogZm9yIHVzZSB3aXRoIC5ORVQtY2FwYWJsZSBydW50aW1l IGVuZ2luZXMgYW5kIGFwcGxpY2F0aW9ucy4iKQogICAgICAgKGxpY2Vuc2UgbGljZW5zZTpncGwy KykpKSkKKworKGRlZmluZSBwcmVwYXJlLW1vbm8tc291cmNlLTAKKyAgI34oKGZhbHNlLWlmLWV4 Y2VwdGlvbgorICAgICAgKGRlbGV0ZS1maWxlICIuL2NvbmZpZ3VyZSIpKQorICAgICAoZmFsc2Ut aWYtZXhjZXB0aW9uCisgICAgICAoZGVsZXRlLWZpbGUtcmVjdXJzaXZlbHkgIi4vbGliZ2MiKSkK KyAgICAgOzsganVzdCB0byBiZSBzdXJlCisgICAgIChmb3ItZWFjaCBkZWxldGUtZmlsZQorICAg ICAgICAgICAgICAgKGZpbmQtZmlsZXMgIi4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAi XFwuKGRsbHxleGV8RExMfEVYRXxzbykkIikpCisgICAgIDs7IFdlIGRlbGV0ZWQgZG9jcy9BZ2ls aXR5UGFjay5kbGwgZWFybGllciAoaWYgaXQgZXhpc3RlZCksIGFuZCBpdCdzCisgICAgIDs7IHJl cXVpcmVkIGZvciBidWlsZGluZyB0aGUgZG9jdW1lbnRhdGlvbiwgc28gc2tpcCBidWlsZGluZyB0 aGUKKyAgICAgOzsgZG9jdW1lbnRhdGlvbi4gIEFjY29yZGluZyB0byBkb2NzL1JFQURNRSwgInRo ZSBzb3VyY2VzIHRvIHRoaXMgRExMCisgICAgIDs7IGxpdmUgaW4gR05PTUUgQ1ZTIG1vZHVsZSBi ZWFnbGUvRmlsdGVycy9BZ2lsaXR5UGFjayIuCisgICAgIChzdWJzdGl0dXRlKiAiLi9NYWtlZmls ZS5hbSIKKyAgICAgICAoKCJeKHxESVNUX3xNT09OTElHSFRffE1PTk9UT1VDSF8pU1VCRElSUyA9 LioiIGFsbCkKKyAgICAgICAgKHN0cmluZy1yZXBsYWNlLXN1YnN0cmluZworICAgICAgICAgKHN0 cmluZy1yZXBsYWNlLXN1YnN0cmluZworICAgICAgICAgIChzdHJpbmctcmVwbGFjZS1zdWJzdHJp bmcgYWxsICIgZG9jcyIgIiIpCisgICAgICAgICAgIiAkKGxpYmdjX2RpcikiICIiKQorICAgICAg ICAgIiBsaWJnYyIgIiIpKSkpKQorCis7OyBBIGxvdCBvZiB0aGUgZml4ZXMgYXJlIHNoYXJlZCBi ZXR3ZWVuIG1hbnkgdmVyc2lvbnMsIGFuZCBpdCBkb2Vzbid0IGh1cnQgdG8KKzs7IGFwcGx5IHRo ZW0gdG8gdmVyc2lvbnMgYmVmb3JlIG9yIGFmdGVyIHRoZXkgYXJlIG5lY2Vzc2FyeSwgc28ganVz dCBpbmNsdWRlCis7OyB0aGVtIGFsbC4KKyhkZWZpbmUgcHJlcGFyZS1tb25vLXNvdXJjZQorICAj fihiZWdpbgorICAgICAgIyRAcHJlcGFyZS1tb25vLXNvdXJjZS0wCisgICAgICAoc3Vic3RpdHV0 ZSogKGZpbHRlciBmaWxlLWV4aXN0cz8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICcoIi4v Y29uZmlndXJlLmluIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLi9jb25maWd1cmUu YWMiKSkKKyAgICAgICAgKCgiaW50IGYgPSBpc2luZiBcXCgxXFwpOyIpCisgICAgICAgICAiaW50 IGYgPSBpc2luZiAoMS4wKTsiKSkKKyAgICAgIDs7IG1ha2VkZXYgaXMgaW4gPHN5cy9zeXNtYWNy b3MuaD4gbm93LiAgSW5jbHVkZQorICAgICAgOzsgaXQuCisgICAgICAoc3Vic3RpdHV0ZSogIm1v bm8vaW8tbGF5ZXIvcHJvY2Vzc2VzLmMiCisgICAgICAgICgoIiNpZmRlZiBIQVZFX1NZU19NS0RF Vl9IIikgIiNpZiAxIikKKyAgICAgICAgKCgic3lzL21rZGV2LmgiKSAic3lzL3N5c21hY3Jvcy5o IikpCisgICAgICAoc3Vic3RpdHV0ZSogKGZpbHRlciBmaWxlLWV4aXN0cz8gJygiLi9tb25vL21l dGFkYXRhL2JvZWhtLWdjLmMiKSkKKyAgICAgICAgKCgiR0Nfc2V0X2ZpbmFsaXplcl9ub3RpZnlf cHJvYyIpCisgICAgICAgICAiR0Nfc2V0X2F3YWl0X2ZpbmFsaXplX3Byb2MiKQorICAgICAgICAo KCJHQ190b2dnbGVyZWZfcmVnaXN0ZXJfY2FsbGJhY2siKQorICAgICAgICAgIkdDX3NldF90b2dn bGVyZWZfZnVuYyIpKQorICAgICAgKHN1YnN0aXR1dGUqIChmaWx0ZXIgZmlsZS1leGlzdHM/ICco Ii4vbW9uby91dGlscy9tb25vLWNvbXBpbGVyLmgiKSkKKyAgICAgICAgKCgic3RhdGljIF9fdGhy ZWFkIGdwb2ludGVyIHggTU9OT19UTFNfRkFTVCIpCisgICAgICAgICAoc3RyaW5nLWFwcGVuZAor ICAgICAgICAgICJzdGF0aWMgX190aHJlYWQgZ3BvaW50ZXIgeCIKKyAgICAgICAgICAiIF9fYXR0 cmlidXRlX18oKHVzZWQpKSIpKSkKKyAgICAgIDs7IFNpbmNlIHRoZSB0aW1lIHRoZSBvbGQgbW9u byB2ZXJzaW9ucyB3ZXJlIHdyaXR0ZW4gYXQsIGdjYyBoYXMgc3RhcnRlZAorICAgICAgOzsgcmVt b3ZpbmcgbW9yZSB0aGluZ3MgaXQgdGhpbmtzIGFyZSB1bnVzZWQgKGZvciBleGFtcGxlIGJlY2F1 c2UgdGhleQorICAgICAgOzsgYXJlIG9ubHkgcmVmZXJlbmNlZCBpbiBpbmxpbmUgYXNzZW1ibHkg b2Ygc29tZSBzb3J0KS4KKyAgICAgIChzdWJzdGl0dXRlKiAoZmlsdGVyIGZpbGUtZXhpc3RzPyAn KCIuL21vbm8vbWV0YWRhdGEvc2dlbi1hbGxvYy5jIikpCisgICAgICAgICgoInN0YXRpYyBfX3Ro cmVhZCBjaGFyIFxcKlxcKnRsYWJfbmV4dF9hZGRyIikKKyAgICAgICAgIChzdHJpbmctYXBwZW5k CisgICAgICAgICAgInN0YXRpYyBfX3RocmVhZCBjaGFyICoqdGxhYl9uZXh0X2FkZHIiCisgICAg ICAgICAgIiBfX2F0dHJpYnV0ZV9fKCh1c2VkKSkiKSkpCisgICAgICAoc3Vic3RpdHV0ZSogKGZp bHRlciBmaWxlLWV4aXN0cz8gJygibW9uby91dGlscy9tb25vLWNvbXBpbGVyLmgiKSkKKyAgICAg ICAgKCgiI2RlZmluZSBNT05PX1RMU19GQVNUICIpCisgICAgICAgICAiI2RlZmluZSBNT05PX1RM U19GQVNUIF9fYXR0cmlidXRlX18oKHVzZWQpKSAiKSkpKQorCisoZGVmaW5lLXB1YmxpYyBtb25v LTEuMi42CisgIChwYWNrYWdlCisgICAgKHZlcnNpb24gIjEuMi42IikKKyAgICAobmFtZSAibW9u byIpCisgICAgKHNvdXJjZSAob3JpZ2luCisgICAgICAgICAgICAgIChtZXRob2QgdXJsLWZldGNo KQorICAgICAgICAgICAgICAodXJpIChzdHJpbmctYXBwZW5kCisgICAgICAgICAgICAgICAgICAg ICJodHRwOi8vZG93bmxvYWQubW9uby1wcm9qZWN0LmNvbS9zb3VyY2VzL21vbm8vIgorICAgICAg ICAgICAgICAgICAgICAibW9ubyIgIi0iIHZlcnNpb24gIi50YXIuYnoyIikpCisgICAgICAgICAg ICAgIChzaGEyNTYKKyAgICAgICAgICAgICAgIChiYXNlMzIgIjAzc243d3l2cmpra2ticnFhanBt cWlmeGZuODNwMzBxcHJpenBiM202YzVjZGh3bHprMTQiKSkKKyAgICAgICAgICAgICAgKG1vZHVs ZXMgJygoZ3VpeCBidWlsZCB1dGlscykKKyAgICAgICAgICAgICAgICAgICAgICAgICAoaWNlLTkg c3RyaW5nLWZ1bikpKQorICAgICAgICAgICAgICAoc25pcHBldCAjfihiZWdpbgorICAgICAgICAg ICAgICAgICAgICAgICAgICAgIyRwcmVwYXJlLW1vbm8tc291cmNlCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAoZGVsZXRlLWZpbGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLi9t Y3MvY2xhc3MvU3lzdGVtL1N5c3RlbS5UZXh0LlJlZ3VsYXJFeHByZXNzaW9ucy9CYXNlTWFjaGlu ZS5jcyIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICA7OyBDYW4ndCBwYXRjaCBhIGZpbGUg d2l0aCBkaWZmZXJlbnQgbGluZSBlbmRpbmdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg Ozsgc28gdGhlIHBhdGNoIGNyZWF0ZXMgYSBuZXcgb25lLCBhbmQgd2Ugb3ZlcndyaXRlCisgICAg ICAgICAgICAgICAgICAgICAgICAgICA7OyB0aGUgb2xkIG9uZSBoZXJlLgorICAgICAgICAgICAg ICAgICAgICAgICAgICAgKHJlbmFtZS1maWxlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg Ii4vbWNzL2NsYXNzL1N5c3RlbS9TeXN0ZW0uVGV4dC5SZWd1bGFyRXhwcmVzc2lvbnMvQmFzZU1h Y2hpbmUuY3MtMiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLi9tY3MvY2xhc3MvU3lz dGVtL1N5c3RlbS5UZXh0LlJlZ3VsYXJFeHByZXNzaW9ucy9CYXNlTWFjaGluZS5jcyIpKSkKKyAg ICAgICAgICAgICAgKHBhdGNoZXMKKyAgICAgICAgICAgICAgIChzZWFyY2gtcGF0Y2hlcyAibW9u by0xLjIuNi1ib290c3RyYXAucGF0Y2giKSkpKQorICAgIChidWlsZC1zeXN0ZW0gZ251LWJ1aWxk LXN5c3RlbSkKKyAgICAobmF0aXZlLWlucHV0cworICAgICAobGlzdCBhdXRvY29uZgorICAgICAg ICAgICBhdXRvbWFrZQorICAgICAgICAgICBiaXNvbgorICAgICAgICAgICBsaWJ0b29sCisgICAg ICAgICAgIHBuZXQtZ2l0CisgICAgICAgICAgIHBuZXRsaWItZ2l0CisgICAgICAgICAgIHBrZy1j b25maWcpKQorICAgIChpbnB1dHMKKyAgICAgKGxpc3QgZ2xpYgorICAgICAgICAgICBsaWJnYwor ICAgICAgICAgICBsaWJ4MTEKKyAgICAgICAgICAgemxpYikpCisgICAgKGFyZ3VtZW50cworICAg ICAobGlzdAorICAgICAgIzpjb25maWd1cmUtZmxhZ3MgI34obGlzdCAiLS13aXRoLWdjPWJvZWht IikKKyAgICAgICM6bWFrZS1mbGFncyAjfihsaXN0IChzdHJpbmctYXBwZW5kICJFWFRFUk5BTF9N Q1M9IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIysodGhpcy1w YWNrYWdlLW5hdGl2ZS1pbnB1dCAicG5ldC1naXQiKQorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIi9iaW4vY3NjYyIpCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAoc3RyaW5nLWFwcGVuZCAiRVhURVJOQUxfUlVOVElNRT0iCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAjKyh0aGlzLXBhY2thZ2UtbmF0aXZlLWlucHV0ICJwbmV0 LWdpdCIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiL2Jpbi9p bHJ1biIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAiQ0ZMQUdTKz0tREFSR19NQVg9NTAw IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIkNDPWdjYyIKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICJWPTEiKQorICAgICAgOzsgYnVpbGQgZmFpbHMgbm9uZGV0ZXJtaW5pc3RpY2Fs bHkgd2l0aG91dCB0aGlzCisgICAgICAjOnBhcmFsbGVsLWJ1aWxkPyAjZgorICAgICAgIzpwaGFz ZXMKKyAgICAgICN+KG1vZGlmeS1waGFzZXMgJXN0YW5kYXJkLXBoYXNlcworICAgICAgICAgIChh ZGQtYWZ0ZXIgJ3VucGFjayAnc2V0LWVudgorICAgICAgICAgICAgKGxhbWJkYSBfIDs7KiAoIzpr ZXkgaW5wdXRzICM6YWxsb3ctb3RoZXIta2V5cykKKyAgICAgICAgICAgICAgOzsgYWxsIHRlc3Rz IHVuZGVyIG1jcy9jbGFzcyBmYWlsIHRyeWluZyB0byBhY2Nlc3MgJEhPTUUKKyAgICAgICAgICAg ICAgKHNldGVudiAiSE9NRSIgIi90bXAiKQorICAgICAgICAgICAgICA7OyBaSVAgZmlsZXMgaGF2 ZSAiRE9TIHRpbWUiIHdoaWNoIHN0YXJ0cyBpbiBKYW4gMTk4MC4KKyAgICAgICAgICAgICAgKHNl dGVudiAiU09VUkNFX0RBVEVfRVBPQ0giICIzMTU1MzI4MDAiKSkpKQorICAgICAgOzsgU3lzdGVt Lk9iamVjdCBpc24ndCBtYXJrZWQgYXMgc2VyaWFsaXphYmxlIGJlY2F1c2UgaXQgY2F1c2VzIGlz c3VlcworICAgICAgOzsgd2l0aCBjb21waWxpbmcgd2l0aCBwbmV0IChjaXJjdWxhciBjbGFzcyBy ZWZlcmVuY2UgYmV0d2VlbiBPYmplY3QgYW5kCisgICAgICA7OyBTZXJpYWxpemFibGVBdHRyaWJ1 dGUpLCBhbmQgdGhpcyBjYXVzZXMgdGVzdHMgdG8gZmFpbAorICAgICAgIzp0ZXN0cz8gI2YpKQor ICAgIChuYXRpdmUtc2VhcmNoLXBhdGhzCisgICAgIChsaXN0IChzZWFyY2gtcGF0aC1zcGVjaWZp Y2F0aW9uCisgICAgICAgICAgICAodmFyaWFibGUgIk1PTk9fUEFUSCIpCisgICAgICAgICAgICAo ZmlsZXMgKGxpc3QgImxpYi9tb25vIikpKSkpCisgICAgKHN5bm9wc2lzICJDb21waWxlciBhbmQg bGlicmFyaWVzIGZvciB0aGUgQyMgcHJvZ3JhbW1pbmcgbGFuZ3VhZ2UiKQorICAgIChkZXNjcmlw dGlvbiAiTW9ubyBpcyBhIGNvbXBpbGVyLCB2bSwgZGVidWdnZXIgYW5kIHNldCBvZiBsaWJyYXJp ZXMgZm9yCitDIywgYSBDLXN0eWxlIHByb2dyYW1taW5nIGxhbmd1YWdlIGZyb20gTWljcm9zb2Z0 IHRoYXQgaXMgdmVyeSBzaW1pbGFyIHRvCitKYXZhLiIpCisgICAgKGhvbWUtcGFnZSAiaHR0cHM6 Ly93d3cubW9uby1wcm9qZWN0LmNvbS8iKQorICAgIDs7IFNlZSAuL0xJQ0VOU0UKKyAgICAobGlj ZW5zZSAobGlzdAorICAgICAgICAgICAgICA7OyBtb3N0IG9mIG1jcy90b29scywgbW9uby9tYW4s IG1vc3Qgb2YgbWNzL2NsYXNzLCB0ZXN0cyBieQorICAgICAgICAgICAgICA7OyBkZWZhdWx0LCBt b25vL2VnbGliCisgICAgICAgICAgICAgIGxpY2Vuc2U6eDExCisgICAgICAgICAgICAgIDs7IG1j cy9tY3MsIG1jcy9nbWNzLCBzb21lIG9mIG1jcy90b29scworICAgICAgICAgICAgICBsaWNlbnNl OmdwbDErIDs7IG5vdGU6IC4vbWNzL0xJQ0VOU0UuR1BMIHNwZWNpZmllcyBubyB2ZXJzaW9uCisg ICAgICAgICAgICAgIDs7IG1vbm8vbW9ubyAodGhlIG1vbm8gVk0sIEkgdGhpbmsgdGhleSBtZWFu dCBtb25vL21pbmkpCisgICAgICAgICAgICAgIGxpY2Vuc2U6bGdwbDIuMCsgOzsgbm90ZTogLi9t Y3MvTElDRU5TRS5MR1BMIHNwZWNpZmllcyBubyB2ZXJzaW9uCisgICAgICAgICAgICAgIDs7IG1j cy9qYXkKKyAgICAgICAgICAgICAgbGljZW5zZTpic2QtNCkpKSkKZGlmZiAtLWdpdCBhL2dudS9w YWNrYWdlcy9wYXRjaGVzL21vbm8tMS4yLjYtYm9vdHN0cmFwLnBhdGNoIGIvZ251L3BhY2thZ2Vz L3BhdGNoZXMvbW9uby0xLjIuNi1ib290c3RyYXAucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQK aW5kZXggMDAwMDAwMDAwMDAuLjBmNmVmZDRhMDM0Ci0tLSAvZGV2L251bGwKKysrIGIvZ251L3Bh Y2thZ2VzL3BhdGNoZXMvbW9uby0xLjIuNi1ib290c3RyYXAucGF0Y2gKQEAgLTAsMCArMSw1ODUg QEAKK2RpZmYgLS1naXQgYS9tY3MvY2xhc3MvU3lzdGVtL1N5c3RlbS5EaWFnbm9zdGljcy9JQ29s bGVjdERhdGEuY3MgYi9tY3MvY2xhc3MvU3lzdGVtL1N5c3RlbS5EaWFnbm9zdGljcy9JQ29sbGVj dERhdGEuY3MKK2luZGV4IGM1MmY5ODcxNTg5Li5jNjZjMTkzNmQzZCAxMDA2NDQKKy0tLSBhL21j cy9jbGFzcy9TeXN0ZW0vU3lzdGVtLkRpYWdub3N0aWNzL0lDb2xsZWN0RGF0YS5jcworKysrIGIv bWNzL2NsYXNzL1N5c3RlbS9TeXN0ZW0uRGlhZ25vc3RpY3MvSUNvbGxlY3REYXRhLmNzCitAQCAt NDEsNyArNDEsNyBAQCBuYW1lc3BhY2UgU3lzdGVtLkRpYWdub3N0aWNzCisgI2VuZGlmCisgCXB1 YmxpYyBpbnRlcmZhY2UgSUNvbGxlY3REYXRhIHsKKyAJCXZvaWQgQ2xvc2VEYXRhICgpOworLQkJ W3JldHVybjogTWFyc2hhbEFzKFVubWFuYWdlZFR5cGUuSTQpXQorKwkJLy9bcmV0dXJuOiBNYXJz aGFsQXMoVW5tYW5hZ2VkVHlwZS5JNCldCisgCQl2b2lkIENvbGxlY3REYXRhICgKKyAJCQlbSW5d IFtNYXJzaGFsQXMoVW5tYW5hZ2VkVHlwZS5JNCldIGludCBpZCwgCisgCQkJW0luXSBbTWFyc2hh bEFzKFVubWFuYWdlZFR5cGUuU3lzSW50KV0gSW50UHRyIHZhbHVlTmFtZSwgCitkaWZmIC0tZ2l0 IGEvbWNzL2NsYXNzL1N5c3RlbS9TeXN0ZW0uRGlhZ25vc3RpY3MvTG9jYWxGaWxlRXZlbnRMb2cu Y3MgYi9tY3MvY2xhc3MvU3lzdGVtL1N5c3RlbS5EaWFnbm9zdGljcy9Mb2NhbEZpbGVFdmVudExv Zy5jcworaW5kZXggMjgwZTZhOTcyMjcuLmM0MTgxNmRjYTI0IDEwMDY0NAorLS0tIGEvbWNzL2Ns YXNzL1N5c3RlbS9TeXN0ZW0uRGlhZ25vc3RpY3MvTG9jYWxGaWxlRXZlbnRMb2cuY3MKKysrKyBi L21jcy9jbGFzcy9TeXN0ZW0vU3lzdGVtLkRpYWdub3N0aWNzL0xvY2FsRmlsZUV2ZW50TG9nLmNz CitAQCAtMTQwLDYgKzE0MCwzMCBAQCBuYW1lc3BhY2UgU3lzdGVtLkRpYWdub3N0aWNzCisgCQkJ ZmlsZV93YXRjaGVyLkVuYWJsZVJhaXNpbmdFdmVudHMgPSBmYWxzZTsKKyAJCX0KKyAKKysgICAg ICAgIHZvaWQgRmlsZUNyZWF0aW9uV2F0Y2hlcihvYmplY3QgbywgRmlsZVN5c3RlbUV2ZW50QXJn cyBlKQorKyAgICAgICAgeworKyAgICAgICAgICAgIGxvY2sgKHRoaXMpIHsKKysgICAgICAgICAg ICAgICAgaWYgKF9ub3RpZnlpbmcpCisrICAgICAgICAgICAgICAgICAgICByZXR1cm47CisrICAg ICAgICAgICAgICAgIF9ub3RpZnlpbmcgPSB0cnVlOworKyAgICAgICAgICAgIH0KKysKKysgICAg ICAgICAgICAvLyBQcm9jZXNzIGV2ZXJ5IG5ldyBlbnRyeSBpbiBvbmUgbm90aWZpY2F0aW9uIGV2 ZW50LgorKyAgICAgICAgICAgIHRyeSB7CisrICAgICAgICAgICAgICAgIHdoaWxlIChHZXRMYXRl c3RJbmRleCAoKSA+IGxhc3Rfbm90aWZpY2F0aW9uX2luZGV4KSB7CisrICAgICAgICAgICAgICAg ICAgICB0cnkgeworKyAgICAgICAgICAgICAgICAgICAgICAgIENvcmVFdmVudExvZy5PbkVudHJ5 V3JpdHRlbiAoR2V0RW50cnkgKGxhc3Rfbm90aWZpY2F0aW9uX2luZGV4KyspKTsKKysgICAgICAg ICAgICAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgeworKyAgICAgICAgICAgICAgICAg ICAgICAgIC8vIEZJWE1FOiBmaW5kIHNvbWUgcHJvcGVyIHdheSB0byBvdXRwdXQgdGhpcyBlcnJv cgorKyAgICAgICAgICAgICAgICAgICAgICAgIERlYnVnLldyaXRlTGluZSAoZXgpOworKyAgICAg ICAgICAgICAgICAgICAgfQorKyAgICAgICAgICAgICAgICB9CisrICAgICAgICAgICAgICAgIH0g ZmluYWxseSB7CisrICAgICAgICAgICAgICAgIGxvY2sgKHRoaXMpCisrICAgICAgICAgICAgICAg ICAgICBfbm90aWZ5aW5nID0gZmFsc2U7CisrICAgICAgICAgICAgfQorKyAgICAgICAgfQorKwor IAkJcHVibGljIG92ZXJyaWRlIHZvaWQgRW5hYmxlTm90aWZpY2F0aW9uICgpCisgCQl7CisgCQkJ aWYgKGZpbGVfd2F0Y2hlciA9PSBudWxsKSB7CitAQCAtMTQ5LDI4ICsxNzMsNyBAQCBuYW1lc3Bh Y2UgU3lzdGVtLkRpYWdub3N0aWNzCisgCisgCQkJCWZpbGVfd2F0Y2hlciA9IG5ldyBGaWxlU3lz dGVtV2F0Y2hlciAoKTsKKyAJCQkJZmlsZV93YXRjaGVyLlBhdGggPSBsb2dEaXI7CistCQkJCWZp bGVfd2F0Y2hlci5DcmVhdGVkICs9IGRlbGVnYXRlIChvYmplY3QgbywgRmlsZVN5c3RlbUV2ZW50 QXJncyBlKSB7CistCQkJCQlsb2NrICh0aGlzKSB7CistCQkJCQkJaWYgKF9ub3RpZnlpbmcpCist CQkJCQkJCXJldHVybjsKKy0JCQkJCQlfbm90aWZ5aW5nID0gdHJ1ZTsKKy0JCQkJCX0KKy0KKy0J CQkJCS8vIFByb2Nlc3MgZXZlcnkgbmV3IGVudHJ5IGluIG9uZSBub3RpZmljYXRpb24gZXZlbnQu CistCQkJCQl0cnkgeworLQkJCQkJCXdoaWxlIChHZXRMYXRlc3RJbmRleCAoKSA+IGxhc3Rfbm90 aWZpY2F0aW9uX2luZGV4KSB7CistCQkJCQkJCXRyeSB7CistCQkJCQkJCQlDb3JlRXZlbnRMb2cu T25FbnRyeVdyaXR0ZW4gKEdldEVudHJ5IChsYXN0X25vdGlmaWNhdGlvbl9pbmRleCsrKSk7Cist CQkJCQkJCX0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgeworLQkJCQkJCQkJLy8gRklYTUU6IGZpbmQg c29tZSBwcm9wZXIgd2F5IHRvIG91dHB1dCB0aGlzIGVycm9yCistCQkJCQkJCQlEZWJ1Zy5Xcml0 ZUxpbmUgKGV4KTsKKy0JCQkJCQkJfQorLQkJCQkJCX0KKy0JCQkJCX0gZmluYWxseSB7CistCQkJ CQkJbG9jayAodGhpcykKKy0JCQkJCQkJX25vdGlmeWluZyA9IGZhbHNlOworLQkJCQkJfQorLQkJ CQl9OworKwkJCQlmaWxlX3dhdGNoZXIuQ3JlYXRlZCArPSBuZXcgRmlsZVN5c3RlbUV2ZW50SGFu ZGxlcihGaWxlQ3JlYXRpb25XYXRjaGVyKTsKKyAJCQl9CisgCQkJbGFzdF9ub3RpZmljYXRpb25f aW5kZXggPSBHZXRMYXRlc3RJbmRleCAoKTsKKyAJCQlmaWxlX3dhdGNoZXIuRW5hYmxlUmFpc2lu Z0V2ZW50cyA9IHRydWU7CitkaWZmIC0tZ2l0IGEvbWNzL2NsYXNzL1N5c3RlbS9TeXN0ZW0uSU8v SW5vdGlmeVdhdGNoZXIuY3MgYi9tY3MvY2xhc3MvU3lzdGVtL1N5c3RlbS5JTy9Jbm90aWZ5V2F0 Y2hlci5jcworaW5kZXggZDhlN2FjY2UzYTcuLjdiMDkwN2VlYmMxIDEwMDY0NAorLS0tIGEvbWNz L2NsYXNzL1N5c3RlbS9TeXN0ZW0uSU8vSW5vdGlmeVdhdGNoZXIuY3MKKysrKyBiL21jcy9jbGFz cy9TeXN0ZW0vU3lzdGVtLklPL0lub3RpZnlXYXRjaGVyLmNzCitAQCAtNDIzLDE5ICs0MjMsMzYg QEAgbmFtZXNwYWNlIFN5c3RlbS5JTyB7CisgCQkJcmV0dXJuIDE2ICsgbGVuOworIAkJfQorIAor KyAgICAgICAgY2xhc3MgVGhpbmdFbnVtZXJhdG9yIDogSUVudW1lcmF0b3IsIElFbnVtZXJhYmxl CisrICAgICAgICB7CisrICAgICAgICAgICAgb2JqZWN0IHRoaW5nOworKyAgICAgICAgICAgIGlu dCBqOworKyAgICAgICAgICAgIHB1YmxpYyBUaGluZ0VudW1lcmF0b3Iob2JqZWN0IHRoaW5nKQor KyAgICAgICAgICAgIHsgdGhpcy50aGluZyA9IHRoaW5nOyBqID0gLTE7IH0KKysKKysgICAgICAg ICAgICBwdWJsaWMgSUVudW1lcmF0b3IgR2V0RW51bWVyYXRvcigpIHsgcmV0dXJuIHRoaXM7IH0K KysgICAgICAgICAgICBwdWJsaWMgYm9vbCBNb3ZlTmV4dCgpCisrICAgICAgICAgICAgeworKyAg ICAgICAgICAgICAgICBpZih0aGluZyA9PSBudWxsKSB7IHJldHVybiBmYWxzZTsgfQorKyAgICAg ICAgICAgICAgICBpZih0aGluZyBpcyBBcnJheUxpc3QpCisrICAgICAgICAgICAgICAgIHsKKysg ICAgICAgICAgICAgICAgICAgIEFycmF5TGlzdCBsaXN0ID0gKEFycmF5TGlzdCkgdGhpbmc7Cisr ICAgICAgICAgICAgICAgICAgICBpZihqKzEgPj0gbGlzdC5Db3VudCkgeyByZXR1cm4gZmFsc2U7 IH0KKysgICAgICAgICAgICAgICAgICAgIGorKzsKKysgICAgICAgICAgICAgICAgICAgIHJldHVy biB0cnVlOworKyAgICAgICAgICAgICAgICB9CisrICAgICAgICAgICAgICAgIGlmKGogPT0gLTEp IHsgaiA9IDA7IHJldHVybiB0cnVlOyB9CisrICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK KysgICAgICAgICAgICB9CisrICAgICAgICAgICAgcHVibGljIHZvaWQgUmVzZXQoKSB7IGogPSAt MTsgfQorKyAgICAgICAgICAgIHB1YmxpYyBvYmplY3QgQ3VycmVudAorKyAgICAgICAgICAgIHsg Z2V0IHsgaWYodGhpbmcgaXMgQXJyYXlMaXN0KSByZXR1cm4gKChBcnJheUxpc3QpdGhpbmcpW2pd OworKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaW5nOyB9fQorKyAgICAgICAgfQorKwor IAkJc3RhdGljIElFbnVtZXJhYmxlIEdldEVudW1lcmF0b3IgKG9iamVjdCBzb3VyY2UpCisgCQl7 CistCQkJaWYgKHNvdXJjZSA9PSBudWxsKQorLQkJCQl5aWVsZCBicmVhazsKKy0KKy0JCQlpZiAo c291cmNlIGlzIElub3RpZnlEYXRhKQorLQkJCQl5aWVsZCByZXR1cm4gc291cmNlOworLQorLQkJ CWlmIChzb3VyY2UgaXMgQXJyYXlMaXN0KSB7CistCQkJCUFycmF5TGlzdCBsaXN0ID0gKEFycmF5 TGlzdCkgc291cmNlOworLQkJCQlmb3IgKGludCBpID0gMDsgaSA8IGxpc3QuQ291bnQ7IGkrKykK Ky0JCQkJCXlpZWxkIHJldHVybiBsaXN0IFtpXTsKKy0JCQl9CisrCQkJcmV0dXJuIG5ldyBUaGlu Z0VudW1lcmF0b3Ioc291cmNlKTsKKyAJCX0KKyAKKyAJCS8qIEludGVyZXN0aW5nIGV2ZW50czoK K2RpZmYgLS1naXQgYS9tY3MvY2xhc3MvU3lzdGVtL1N5c3RlbS5OZXQvU2VydmljZVBvaW50LmNz IGIvbWNzL2NsYXNzL1N5c3RlbS9TeXN0ZW0uTmV0L1NlcnZpY2VQb2ludC5jcworaW5kZXggYTg4 NGQ5MGY1MDcuLmUxYzczYjA5OGMyIDEwMDY0NAorLS0tIGEvbWNzL2NsYXNzL1N5c3RlbS9TeXN0 ZW0uTmV0L1NlcnZpY2VQb2ludC5jcworKysrIGIvbWNzL2NsYXNzL1N5c3RlbS9TeXN0ZW0uTmV0 L1NlcnZpY2VQb2ludC5jcworQEAgLTEzNyw3ICsxMzcsNyBAQCBuYW1lc3BhY2UgU3lzdGVtLk5l dAorIAkJCWdldCB7CisgCQkJCXJldHVybiBpZGxlU2luY2U7CisgCQkJfQorLQkJCWludGVybmFs IHNldCB7CisrCQkJc2V0IHsKKyAJCQkJbG9jayAobG9ja2VyKQorIAkJCQkJaWRsZVNpbmNlID0g dmFsdWU7CisgCQkJfQorZGlmZiAtLWdpdCBhL21jcy9jbGFzcy9TeXN0ZW0vU3lzdGVtLlRleHQu UmVndWxhckV4cHJlc3Npb25zL0Jhc2VNYWNoaW5lLmNzLTIgYi9tY3MvY2xhc3MvU3lzdGVtL1N5 c3RlbS5UZXh0LlJlZ3VsYXJFeHByZXNzaW9ucy9CYXNlTWFjaGluZS5jcy0yCituZXcgZmlsZSBt b2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMDAwMDAuLmE2ODVlMjY3OWI3CistLS0gL2Rldi9udWxs CisrKysgYi9tY3MvY2xhc3MvU3lzdGVtL1N5c3RlbS5UZXh0LlJlZ3VsYXJFeHByZXNzaW9ucy9C YXNlTWFjaGluZS5jcy0yCitAQCAtMCwwICsxLDE2OCBAQAorKy8vCisrLy8gQmFzZU1hY2hpbmUu anZtLmNzCisrLy8KKysvLyBBdXRob3I6CisrLy8gYXV0aG9yOglEYW4gTGV3aXMgKGRsZXdpc0Bn bXguY28udWspCisrLy8JCShjKSAyMDAyCisrLy8gQ29weXJpZ2h0IChDKSAyMDA1IE5vdmVsbCwg SW5jIChodHRwOi8vd3d3Lm5vdmVsbC5jb20pCisrLy8KKysKKysvLworKy8vIFBlcm1pc3Npb24g aXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmlu ZworKy8vIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRp b24gZmlsZXMgKHRoZQorKy8vICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3 aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcKKysvLyB3aXRob3V0IGxpbWl0YXRpb24gdGhl IHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsCisrLy8gZGlzdHJp YnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5k IHRvCisrLy8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVk IHRvIGRvIHNvLCBzdWJqZWN0IHRvCisrLy8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorKy8v CisrLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3Rp Y2Ugc2hhbGwgYmUKKysvLyBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBv cnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKysvLworKy8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURF RCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorKy8vIEVYUFJFU1MgT1Ig SU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgor Ky8vIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5E CisrLy8gTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBD T1BZUklHSFQgSE9MREVSUyBCRQorKy8vIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9S IE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04KKysvLyBPRiBDT05UUkFDVCwg VE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04K KysvLyBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRI RSBTT0ZUV0FSRS4KKysvLworKworK3VzaW5nIFN5c3RlbTsKKyt1c2luZyBTeXN0ZW0uQ29sbGVj dGlvbnM7CisrdXNpbmcgU3lzdGVtLkNvbGxlY3Rpb25zLlNwZWNpYWxpemVkOworKworK25hbWVz cGFjZSBTeXN0ZW0uVGV4dC5SZWd1bGFyRXhwcmVzc2lvbnMKKyt7CisrCWFic3RyYWN0IGNsYXNz IEJhc2VNYWNoaW5lIDogSU1hY2hpbmUKKysJeworKwkJaW50ZXJuYWwgZGVsZWdhdGUgdm9pZCBN YXRjaEFwcGVuZEV2YWx1YXRvciAoTWF0Y2ggbWF0Y2gsIFN0cmluZ0J1aWxkZXIgc2IpOworKwor KwkJcHVibGljIHZpcnR1YWwgc3RyaW5nIFJlcGxhY2UgKFJlZ2V4IHJlZ2V4LCBzdHJpbmcgaW5w dXQsIHN0cmluZyByZXBsYWNlbWVudCwgaW50IGNvdW50LCBpbnQgc3RhcnRhdCkKKysJCXsKKysJ CQlSZXBsYWNlbWVudEV2YWx1YXRvciBldiA9IG5ldyBSZXBsYWNlbWVudEV2YWx1YXRvciAocmVn ZXgsIHJlcGxhY2VtZW50KTsKKysJCQlpZiAocmVnZXguUmlnaHRUb0xlZnQpCisrCQkJCXJldHVy biBSVExSZXBsYWNlIChyZWdleCwgaW5wdXQsIG5ldyBNYXRjaEV2YWx1YXRvciAoZXYuRXZhbHVh dGUpLCBjb3VudCwgc3RhcnRhdCk7CisrCQkJZWxzZQorKwkJCQlyZXR1cm4gTFRSUmVwbGFjZSAo cmVnZXgsIGlucHV0LCBuZXcgTWF0Y2hBcHBlbmRFdmFsdWF0b3IgKGV2LkV2YWx1YXRlQXBwZW5k KSwgY291bnQsIHN0YXJ0YXQpOworKwkJfQorKworKwkJdmlydHVhbCBwdWJsaWMgc3RyaW5nIFtd IFNwbGl0IChSZWdleCByZWdleCwgc3RyaW5nIGlucHV0LCBpbnQgY291bnQsIGludCBzdGFydGF0 KQorKwkJeworKwkJCUFycmF5TGlzdCBzcGxpdHMgPSBuZXcgQXJyYXlMaXN0ICgpOworKwkJCWlm IChjb3VudCA9PSAwKQorKwkJCQljb3VudCA9IEludDMyLk1heFZhbHVlOworKworKwkJCWludCBw dHIgPSBzdGFydGF0OworKwkJCU1hdGNoIG0gPSBudWxsOworKwkJCXdoaWxlICgtLWNvdW50ID4g MCkgeworKwkJCQlpZiAobSAhPSBudWxsKQorKwkJCQkJbSA9IG0uTmV4dE1hdGNoICgpOworKwkJ CQllbHNlCisrCQkJCQltID0gcmVnZXguTWF0Y2ggKGlucHV0LCBwdHIpOworKworKwkJCQlpZiAo IW0uU3VjY2VzcykKKysJCQkJCWJyZWFrOworKworKwkJCQlpZiAocmVnZXguUmlnaHRUb0xlZnQp CisrCQkJCQlzcGxpdHMuQWRkIChpbnB1dC5TdWJzdHJpbmcgKG0uSW5kZXggKyBtLkxlbmd0aCwg cHRyIC0gbS5JbmRleCAtIG0uTGVuZ3RoKSk7CisrCQkJCWVsc2UKKysJCQkJCXNwbGl0cy5BZGQg KGlucHV0LlN1YnN0cmluZyAocHRyLCBtLkluZGV4IC0gcHRyKSk7CisrCisrCQkJCWludCBnY291 bnQgPSBtLkdyb3Vwcy5Db3VudDsKKysJCQkJZm9yIChpbnQgZ2luZGV4ID0gMTsgZ2luZGV4IDwg Z2NvdW50OyBnaW5kZXgrKykgeworKwkJCQkJR3JvdXAgZ3JwID0gbS5Hcm91cHMgW2dpbmRleF07 CisrCQkJCQlzcGxpdHMuQWRkIChpbnB1dC5TdWJzdHJpbmcgKGdycC5JbmRleCwgZ3JwLkxlbmd0 aCkpOworKwkJCQl9CisrCisrCQkJCWlmIChyZWdleC5SaWdodFRvTGVmdCkKKysJCQkJCXB0ciA9 IG0uSW5kZXg7CisrCQkJCWVsc2UKKysJCQkJCXB0ciA9IG0uSW5kZXggKyBtLkxlbmd0aDsKKysK KysJCQl9CisrCisrCQkJaWYgKHJlZ2V4LlJpZ2h0VG9MZWZ0ICYmIHB0ciA+PSAwKQorKwkJCQlz cGxpdHMuQWRkIChpbnB1dC5TdWJzdHJpbmcgKDAsIHB0cikpOworKwkJCWlmICghcmVnZXguUmln aHRUb0xlZnQgJiYgcHRyIDw9IGlucHV0Lkxlbmd0aCkKKysJCQkJc3BsaXRzLkFkZCAoaW5wdXQu U3Vic3RyaW5nIChwdHIpKTsKKysKKysJCQlyZXR1cm4gKHN0cmluZyBbXSkgc3BsaXRzLlRvQXJy YXkgKHR5cGVvZiAoc3RyaW5nKSk7CisrCQl9CisrCisrCQl2aXJ0dWFsIHB1YmxpYyBNYXRjaCBT Y2FuIChSZWdleCByZWdleCwgc3RyaW5nIHRleHQsIGludCBzdGFydCwgaW50IGVuZCkKKysJCXsK KysJCQl0aHJvdyBuZXcgTm90SW1wbGVtZW50ZWRFeGNlcHRpb24gKCJTY2FuIG1ldGhvZCBtdXN0 IGJlIGltcGxlbWVudGVkIGluIGRlcml2ZWQgY2xhc3NlcyIpOworKwkJfQorKworKwkJdmlydHVh bCBwdWJsaWMgc3RyaW5nIFJlc3VsdCAoc3RyaW5nIHJlcGxhY2VtZW50LCBNYXRjaCBtYXRjaCkK KysJCXsKKysJCQlyZXR1cm4gUmVwbGFjZW1lbnRFdmFsdWF0b3IuRXZhbHVhdGUgKHJlcGxhY2Vt ZW50LCBtYXRjaCk7CisrCQl9CisrCisrCQlpbnRlcm5hbCBzdGF0aWMgc3RyaW5nIExUUlJlcGxh Y2UgKFJlZ2V4IHJlZ2V4LCBzdHJpbmcgaW5wdXQsIE1hdGNoQXBwZW5kRXZhbHVhdG9yIGV2YWx1 YXRvciwgaW50IGNvdW50LCBpbnQgc3RhcnRhdCkKKysJCXsKKysJCQlNYXRjaCBtID0gcmVnZXgu TWF0Y2ggKGlucHV0LCBzdGFydGF0KTsKKysJCQlpZiAoIW0uU3VjY2VzcykKKysJCQkJcmV0dXJu IGlucHV0OworKworKwkJCVN0cmluZ0J1aWxkZXIgcmVzdWx0ID0gbmV3IFN0cmluZ0J1aWxkZXIg KCk7CisrCQkJaW50IHB0ciA9IHN0YXJ0YXQ7CisrCQkJaW50IGNvdW50ZXIgPSBjb3VudDsKKysK KysJCQlyZXN1bHQuQXBwZW5kIChpbnB1dCwgMCwgcHRyKTsKKysKKysJCQlkbyB7CisrCQkJCWlm IChjb3VudCAhPSAtMSkKKysJCQkJCWlmIChjb3VudGVyLS0gPD0gMCkKKysJCQkJCQlicmVhazsK KysJCQkJaWYgKG0uSW5kZXggPCBwdHIpCisrCQkJCQl0aHJvdyBuZXcgU3lzdGVtRXhjZXB0aW9u ICgiaG93Iik7CisrCQkJCXJlc3VsdC5BcHBlbmQgKGlucHV0LCBwdHIsIG0uSW5kZXggLSBwdHIp OworKwkJCQlldmFsdWF0b3IgKG0sIHJlc3VsdCk7CisrCisrCQkJCXB0ciA9IG0uSW5kZXggKyBt Lkxlbmd0aDsKKysJCQkJbSA9IG0uTmV4dE1hdGNoICgpOworKwkJCX0gd2hpbGUgKG0uU3VjY2Vz cyk7CisrCisrCQkJcmVzdWx0LkFwcGVuZCAoaW5wdXQsIHB0ciwgaW5wdXQuTGVuZ3RoIC0gcHRy KTsKKysKKysJCQlyZXR1cm4gcmVzdWx0LlRvU3RyaW5nICgpOworKwkJfQorKworKwkJaW50ZXJu YWwgc3RhdGljIHN0cmluZyBSVExSZXBsYWNlIChSZWdleCByZWdleCwgc3RyaW5nIGlucHV0LCBN YXRjaEV2YWx1YXRvciBldmFsdWF0b3IsIGludCBjb3VudCwgaW50IHN0YXJ0YXQpCisrCQl7Cisr CQkJTWF0Y2ggbSA9IHJlZ2V4Lk1hdGNoIChpbnB1dCwgc3RhcnRhdCk7CisrCQkJaWYgKCFtLlN1 Y2Nlc3MpCisrCQkJCXJldHVybiBpbnB1dDsKKysKKysJCQlpbnQgcHRyID0gc3RhcnRhdDsKKysJ CQlpbnQgY291bnRlciA9IGNvdW50OworKwkJCVN0cmluZ0NvbGxlY3Rpb24gcGllY2VzID0gbmV3 IFN0cmluZ0NvbGxlY3Rpb24gKCk7CisrCQkJcGllY2VzLkFkZCAoaW5wdXQuU3Vic3RyaW5nIChw dHIpKTsKKysKKysJCQlkbyB7CisrCQkJCWlmIChjb3VudCAhPSAtMSkKKysJCQkJCWlmIChjb3Vu dGVyLS0gPD0gMCkKKysJCQkJCQlicmVhazsKKysJCQkJaWYgKG0uSW5kZXggKyBtLkxlbmd0aCA+ IHB0cikKKysJCQkJCXRocm93IG5ldyBTeXN0ZW1FeGNlcHRpb24gKCJob3ciKTsKKysJCQkJcGll Y2VzLkFkZCAoaW5wdXQuU3Vic3RyaW5nIChtLkluZGV4ICsgbS5MZW5ndGgsIHB0ciAtIG0uSW5k ZXggLSBtLkxlbmd0aCkpOworKwkJCQlwaWVjZXMuQWRkIChldmFsdWF0b3IgKG0pKTsKKysKKysJ CQkJcHRyID0gbS5JbmRleDsKKysJCQkJbSA9IG0uTmV4dE1hdGNoICgpOworKwkJCX0gd2hpbGUg KG0uU3VjY2Vzcyk7CisrCisrCQkJU3RyaW5nQnVpbGRlciByZXN1bHQgPSBuZXcgU3RyaW5nQnVp bGRlciAoKTsKKysKKysJCQlyZXN1bHQuQXBwZW5kIChpbnB1dCwgMCwgcHRyKTsKKysJCQlmb3Ig KGludCBpID0gcGllY2VzLkNvdW50OyBpID4gMDsgKQorKwkJCQlyZXN1bHQuQXBwZW5kIChwaWVj ZXMgWy0taV0pOworKworKwkJCXBpZWNlcy5DbGVhciAoKTsKKysKKysJCQlyZXR1cm4gcmVzdWx0 LlRvU3RyaW5nICgpOworKwkJfQorKwl9CisrfQorZGlmZiAtLWdpdCBhL21jcy9jbGFzcy9jb3Js aWIvU3lzdGVtLlJ1bnRpbWUuUmVtb3RpbmcuTWVzc2FnaW5nL01ldGhvZENhbGwuY3MgYi9tY3Mv Y2xhc3MvY29ybGliL1N5c3RlbS5SdW50aW1lLlJlbW90aW5nLk1lc3NhZ2luZy9NZXRob2RDYWxs LmNzCitpbmRleCA5NDA2OWQxNzI3ZS4uMDQyNTc0MTc4ZmEgMTAwNjQ0CistLS0gYS9tY3MvY2xh c3MvY29ybGliL1N5c3RlbS5SdW50aW1lLlJlbW90aW5nLk1lc3NhZ2luZy9NZXRob2RDYWxsLmNz CisrKysgYi9tY3MvY2xhc3MvY29ybGliL1N5c3RlbS5SdW50aW1lLlJlbW90aW5nLk1lc3NhZ2lu Zy9NZXRob2RDYWxsLmNzCitAQCAtMjcyLDYgKzI3MiwxMCBAQCBuYW1lc3BhY2UgU3lzdGVtLlJ1 bnRpbWUuUmVtb3RpbmcuTWVzc2FnaW5nIHsKKyAJCQlzZXQgeyBfdXJpID0gdmFsdWU7IH0KKyAJ CX0KKyAKKysgICAgICAgIHN0cmluZyBJTWV0aG9kTWVzc2FnZS5VcmkgeworKwkJCWdldCB7IHJl dHVybiBVcmk7IH0KKysJCX0KKysKKyAJCXN0cmluZyBJSW50ZXJuYWxNZXNzYWdlLlVyaSB7Cisg CQkJZ2V0IHsgcmV0dXJuIFVyaTsgfQorIAkJCXNldCB7IFVyaSA9IHZhbHVlOyB9CitkaWZmIC0t Z2l0IGEvbWNzL2NsYXNzL2NvcmxpYi9TeXN0ZW0uUnVudGltZS5SZW1vdGluZy5NZXNzYWdpbmcv TWV0aG9kUmVzcG9uc2UuY3MgYi9tY3MvY2xhc3MvY29ybGliL1N5c3RlbS5SdW50aW1lLlJlbW90 aW5nLk1lc3NhZ2luZy9NZXRob2RSZXNwb25zZS5jcworaW5kZXggMWIxZWFiMDE0YjMuLjU3NWU3 ZTM3ZGVlIDEwMDY0NAorLS0tIGEvbWNzL2NsYXNzL2NvcmxpYi9TeXN0ZW0uUnVudGltZS5SZW1v dGluZy5NZXNzYWdpbmcvTWV0aG9kUmVzcG9uc2UuY3MKKysrKyBiL21jcy9jbGFzcy9jb3JsaWIv U3lzdGVtLlJ1bnRpbWUuUmVtb3RpbmcuTWVzc2FnaW5nL01ldGhvZFJlc3BvbnNlLmNzCitAQCAt MjcyLDYgKzI3MiwxMCBAQCBuYW1lc3BhY2UgU3lzdGVtLlJ1bnRpbWUuUmVtb3RpbmcuTWVzc2Fn aW5nIHsKKyAJCQl9CisgCQl9CisgCisrICAgICAgICBzdHJpbmcgSU1ldGhvZE1lc3NhZ2UuVXJp IHsKKysJCQlnZXQgeyByZXR1cm4gVXJpOyB9CisrCQl9CisrCisgCQlzdHJpbmcgSUludGVybmFs TWVzc2FnZS5VcmkgeworIAkJCWdldCB7IHJldHVybiBVcmk7IH0KKyAJCQlzZXQgeyBVcmkgPSB2 YWx1ZTsgfQorZGlmZiAtLWdpdCBhL21jcy9jbGFzcy9jb3JsaWIvU3lzdGVtLlJ1bnRpbWUuUmVt b3RpbmcuTWVzc2FnaW5nL1JldHVybk1lc3NhZ2UuY3MgYi9tY3MvY2xhc3MvY29ybGliL1N5c3Rl bS5SdW50aW1lLlJlbW90aW5nLk1lc3NhZ2luZy9SZXR1cm5NZXNzYWdlLmNzCitpbmRleCBhZWUz OWY1YmI4MS4uZWMwOWI3M2MxNWQgMTAwNjQ0CistLS0gYS9tY3MvY2xhc3MvY29ybGliL1N5c3Rl bS5SdW50aW1lLlJlbW90aW5nLk1lc3NhZ2luZy9SZXR1cm5NZXNzYWdlLmNzCisrKysgYi9tY3Mv Y2xhc3MvY29ybGliL1N5c3RlbS5SdW50aW1lLlJlbW90aW5nLk1lc3NhZ2luZy9SZXR1cm5NZXNz YWdlLmNzCitAQCAtMTY2LDYgKzE2NiwxMCBAQCBuYW1lc3BhY2UgU3lzdGVtLlJ1bnRpbWUuUmVt b3RpbmcuTWVzc2FnaW5nCisgCQkJfQorIAkJfQorIAorKyAgICAgICAgc3RyaW5nIElNZXRob2RN ZXNzYWdlLlVyaSB7CisrCQkJZ2V0IHsgcmV0dXJuIFVyaTsgfQorKwkJfQorKworIAkJc3RyaW5n IElJbnRlcm5hbE1lc3NhZ2UuVXJpIHsKKyAJCQlnZXQgeyByZXR1cm4gVXJpOyB9CisgCQkJc2V0 IHsgVXJpID0gdmFsdWU7IH0KK2RpZmYgLS1naXQgYS9tY3MvY2xhc3MvY29ybGliL1N5c3RlbS9N dWx0aWNhc3REZWxlZ2F0ZS5jcyBiL21jcy9jbGFzcy9jb3JsaWIvU3lzdGVtL011bHRpY2FzdERl bGVnYXRlLmNzCitpbmRleCBiMzZhZmYzMzQ5Mi4uY2Y5MTM0YTMzYjMgMTAwNjQ0CistLS0gYS9t Y3MvY2xhc3MvY29ybGliL1N5c3RlbS9NdWx0aWNhc3REZWxlZ2F0ZS5jcworKysrIGIvbWNzL2Ns YXNzL2NvcmxpYi9TeXN0ZW0vTXVsdGljYXN0RGVsZWdhdGUuY3MKK0BAIC0yNjIsMTYgKzI2Miwx NiBAQCBuYW1lc3BhY2UgU3lzdGVtCisgCisgCQlwdWJsaWMgc3RhdGljIGJvb2wgb3BlcmF0b3Ig PT0gKE11bHRpY2FzdERlbGVnYXRlIGEsIE11bHRpY2FzdERlbGVnYXRlIGIpCisgCQl7CistCQkJ aWYgKGEgPT0gbnVsbCkKKy0JCSAgICAJCXJldHVybiBiID09IG51bGw7CisrCQkJaWYgKChvYmpl Y3QpYSA9PSBudWxsKQorKyAgICAgICAgICAgICAgICByZXR1cm4gKG9iamVjdCliID09IG51bGw7 CisgCQkgICAgCQkKKyAJCQlyZXR1cm4gYS5FcXVhbHMgKGIpOworIAkJfQorIAkJCisgCQlwdWJs aWMgc3RhdGljIGJvb2wgb3BlcmF0b3IgIT0gKE11bHRpY2FzdERlbGVnYXRlIGEsIE11bHRpY2Fz dERlbGVnYXRlIGIpCisgCQl7CistCQkJaWYgKGEgPT0gbnVsbCkKKy0JCQkJcmV0dXJuIGIgIT0g bnVsbDsKKysJCQlpZiAoKG9iamVjdClhID09IG51bGwpCisrCQkJCXJldHVybiAob2JqZWN0KWIg IT0gbnVsbDsKKyAJCSAgICAJCisgCQkJcmV0dXJuICFhLkVxdWFscyAoYik7CisgCQl9CitkaWZm IC0tZ2l0IGEvbWNzL2NsYXNzL2NvcmxpYi9TeXN0ZW0vT2JqZWN0LmNzIGIvbWNzL2NsYXNzL2Nv cmxpYi9TeXN0ZW0vT2JqZWN0LmNzCitpbmRleCA2YjBhMDNkMmEzMS4uNjk0Y2JkNDU0ZTEgMTAw NjQ0CistLS0gYS9tY3MvY2xhc3MvY29ybGliL1N5c3RlbS9PYmplY3QuY3MKKysrKyBiL21jcy9j bGFzcy9jb3JsaWIvU3lzdGVtL09iamVjdC5jcworQEAgLTQwLDcgKzQwLDcgQEAgdXNpbmcgU3lz dGVtLlJ1bnRpbWUuQ29uc3RyYWluZWRFeGVjdXRpb247CisgCisgbmFtZXNwYWNlIFN5c3RlbSB7 CisgCistCVtTZXJpYWxpemFibGVdCisrCS8vW1NlcmlhbGl6YWJsZV0KKyAJW0NsYXNzSW50ZXJm YWNlIChDbGFzc0ludGVyZmFjZVR5cGUuQXV0b0R1YWwpXQorICNpZiBORVRfMl8wCisgCVtDb21W aXNpYmxlICh0cnVlKV0KK0BAIC00Nyw2ICs0NywxMiBAQAorICNlbmRpZgorIAlwdWJsaWMgY2xh c3MgT2JqZWN0IHsKKyAKKysgICAgICAgIC8vIERlZmF1bHQgZGVmaW5pdGlvbiBvZiB0aGUgb2Jq ZWN0IGZpbmFsaXplci4KKysgICAgICAgICNpZiBORVRfMl8wCisrCQlbUmVsaWFiaWxpdHlDb250 cmFjdEF0dHJpYnV0ZSAoQ29uc2lzdGVuY3kuV2lsbE5vdENvcnJ1cHRTdGF0ZSwgQ2VyLlN1Y2Nl c3MpXQorKyAgICAgICAgI2VuZGlmCisrICAgICAgICBwcm90ZWN0ZWQgdmlydHVhbCB2b2lkIEZp bmFsaXplKCkge30KKysKKyAJCS8vIDxzdW1tYXJ5PgorIAkJLy8gICBDb21wYXJlcyB0aGlzIG9i amVjdCB0byB0aGUgc3BlY2lmaWVkIG9iamVjdC4KKyAJCS8vICAgUmV0dXJucyB0cnVlIGlmIHRo ZXkgYXJlIGVxdWFsLCBmYWxzZSBvdGhlcndpc2UuCitAQCAtODAsMTYgKzg2LDYgQEAgbmFtZXNw YWNlIFN5c3RlbSB7CisgCQl7CisgCQl9CisgCistCQkvLyA8c3VtbWFyeT4KKy0JCS8vICAgT2Jq ZWN0IGRlc3RydWN0b3IuIAorLQkJLy8gPC9zdW1tYXJ5PgorLSNpZiBORVRfMl8wCistCQlbUmVs aWFiaWxpdHlDb250cmFjdEF0dHJpYnV0ZSAoQ29uc2lzdGVuY3kuV2lsbE5vdENvcnJ1cHRTdGF0 ZSwgQ2VyLlN1Y2Nlc3MpXQorLSNlbmRpZgorLQkJfk9iamVjdCAoKQorLQkJeworLQkJfQorLQor IAkJLy8gPHN1bW1hcnk+CisgCQkvLyAgIFJldHVybnMgYSBoYXNoY29kZSBmb3IgdGhpcyBvYmpl Y3QuICBFYWNoIGRlcml2ZWQKKyAJCS8vICAgY2xhc3Mgc2hvdWxkIHJldHVybiBhIGhhc2ggY29k ZSB0aGF0IG1ha2VzIHNlbnNlCitkaWZmIC0tZ2l0IGEvbWNzL21jcy9jb2RlZ2VuLmNzIGIvbWNz L21jcy9jb2RlZ2VuLmNzCitpbmRleCBjOTRhNjE3NzJmNC4uODU0NmQ2NzFlYzYgMTAwNjQ0Cist LS0gYS9tY3MvbWNzL2NvZGVnZW4uY3MKKysrKyBiL21jcy9tY3MvY29kZWdlbi5jcworQEAgLTQ5 OCw3ICs0OTgsNyBAQCBuYW1lc3BhY2UgTW9uby5DU2hhcnAgeworIAorIAkJLy8gdXRpbGl0eSBo ZWxwZXIgZm9yIENoZWNrRXhwciwgVW5DaGVja0V4cHIsIENoZWNrZWQgYW5kIFVuY2hlY2tlZCBz dGF0ZW1lbnRzCisgCQkvLyBpdCdzIHB1YmxpYyBzbyB0aGF0IHdlIGNhbiB1c2UgYSBzdHJ1Y3Qg YXQgdGhlIGNhbGxzaXRlCistCQlwdWJsaWMgc3RydWN0IEZsYWdzSGFuZGxlIDogSURpc3Bvc2Fi bGUKKysJCXB1YmxpYyBjbGFzcyBGbGFnc0hhbmRsZSA6IElEaXNwb3NhYmxlCisgCQl7CisgCQkJ RW1pdENvbnRleHQgZWM7CisgCQkJcmVhZG9ubHkgRmxhZ3MgaW52bWFzaywgb2xkdmFsOworZGlm ZiAtLWdpdCBhL21jcy9tY3MvdHlwZW1hbmFnZXIuY3MgYi9tY3MvbWNzL3R5cGVtYW5hZ2VyLmNz CitpbmRleCAxZTE3M2RlODlkMi4uNTg0NzdhZjQxYTMgMTAwNjQ0CistLS0gYS9tY3MvbWNzL3R5 cGVtYW5hZ2VyLmNzCisrKysgYi9tY3MvbWNzL3R5cGVtYW5hZ2VyLmNzCitAQCAtNjI5LDE4ICs2 MjksNDIgQEAgbmFtZXNwYWNlIE1vbm8uQ1NoYXJwIHsKKyAJCXJldHVybiBDU2hhcnBOYW1lIChH ZXRGdWxsTmFtZSAodCkpOworICAgICB9CisgCisrICAgIHN0YXRpYyBib29sIFN0YXJ0c1dpdGhX b3JkKHN0cmluZyBoYXlzdGFjaywgc3RyaW5nIGNoZWNrKQorKyAgICB7CisrICAgICAgICBpZihT dHJpbmcuQ29tcGFyZShoYXlzdGFjaywgMCwgY2hlY2ssIDAsIGNoZWNrLkxlbmd0aCwgZmFsc2Up ICE9IDApCisrICAgICAgICB7IHJldHVybiBmYWxzZTsgfQorKyAgICAgICAgaWYoY2hlY2suTGVu Z3RoID09IGhheXN0YWNrLkxlbmd0aCkgeyByZXR1cm4gdHJ1ZTsgfQorKyAgICAgICAgY2hhciBj ID0gaGF5c3RhY2tbY2hlY2suTGVuZ3RoXTsKKysgICAgICAgIHJldHVybiAhKENoYXIuSXNMZXR0 ZXIoYykgfHwgQ2hhci5Jc0RpZ2l0KGMpKTsKKysgICAgfQorKyAgICAgICAgCisgCXB1YmxpYyBz dGF0aWMgc3RyaW5nIENTaGFycE5hbWUgKHN0cmluZyBuYW1lKQorIAl7CisgCQlpZiAobmFtZS5T dGFydHNXaXRoIChBbm9ueW1vdXNUeXBlQ2xhc3MuQ2xhc3NOYW1lUHJlZml4KSkKKyAJCQkJcmV0 dXJuIEFub255bW91c1R5cGVDbGFzcy5TaWduYXR1cmVGb3JFcnJvcjsKKy0JCQkKKy0JCXJldHVy biBSZWdleC5SZXBsYWNlIChuYW1lLAorLQkJCUAiXlN5c3RlbVwuIiArCistCQkJQCIoSW50MzJ8 VUludDMyfEludDE2fFVJbnQxNnxJbnQ2NHxVSW50NjR8IiArCistCQkJQCJTaW5nbGV8RG91Ymxl fENoYXJ8RGVjaW1hbHxCeXRlfFNCeXRlfE9iamVjdHwiICsKKy0JCQlAIkJvb2xlYW58U3RyaW5n fFZvaWR8TnVsbCkiICsKKy0JCQlAIihcVyt8XGIpIiwKKy0JCQluZXcgTWF0Y2hFdmFsdWF0b3Ig KENTaGFycE5hbWVNYXRjaCkpLlJlcGxhY2UgKCcrJywgJy4nKTsKKysKKysgICAgICAgIGludCBs ID0gIlN5c3RlbS4iLkxlbmd0aDsKKysgICAgICAgIGlmKG5hbWUuU3RhcnRzV2l0aCgiU3lzdGVt LiIpICYmIG5hbWUuTGVuZ3RoID4gbCkKKysgICAgICAgIHsKKysgICAgICAgICAgICBzdHJpbmcg czIgPSBuYW1lLlN1YnN0cmluZyhsKS5Ub0xvd2VyKCk7CisrICAgICAgICAgICAgaWYoU3RhcnRz V2l0aFdvcmQoczIsICJpbnQzMiIpKQorKyAgICAgICAgICAgICAgICByZXR1cm4gImludCI7Cisr ICAgICAgICAgICAgaWYoU3RhcnRzV2l0aFdvcmQoczIsICJ1aW50MzIiKSkKKysgICAgICAgICAg ICAgICAgcmV0dXJuICJ1aW50IjsKKysgICAgICAgICAgICBpZihTdGFydHNXaXRoV29yZChzMiwg ImludDE2IikpCisrICAgICAgICAgICAgICAgIHJldHVybiAic2hvcnQiOworKyAgICAgICAgICAg IGlmKFN0YXJ0c1dpdGhXb3JkKHMyLCAidWludDE2IikpCisrICAgICAgICAgICAgICAgIHJldHVy biAidXNob3J0IjsKKysgICAgICAgICAgICBpZihTdGFydHNXaXRoV29yZChzMiwgImludDY0Iikp CisrICAgICAgICAgICAgICAgIHJldHVybiAibG9uZyI7CisrICAgICAgICAgICAgaWYoU3RhcnRz V2l0aFdvcmQoczIsICJ1aW50NjQiKSkKKysgICAgICAgICAgICAgICAgcmV0dXJuICJ1bG9uZyI7 CisrICAgICAgICAgICAgaWYoU3RhcnRzV2l0aFdvcmQoczIsICJzaW5nbGUiKSkKKysgICAgICAg ICAgICAgICAgcmV0dXJuICJmbG9hdCI7CisrICAgICAgICAgICAgaWYoU3RhcnRzV2l0aFdvcmQo czIsICJib29sZWFuIikpCisrICAgICAgICAgICAgICAgIHJldHVybiAiYm9vbCI7CisrICAgICAg ICB9CisrICAgICAgICByZXR1cm4gbmFtZTsKKyAJfQorIAorIAlzdGF0aWMgcHVibGljIHN0cmlu ZyBDU2hhcnBOYW1lIChUeXBlW10gdHlwZXMpCitAQCAtNjU0LDIxICs2NzgsNiBAQCBuYW1lc3Bh Y2UgTW9uby5DU2hhcnAgeworIAkJcmV0dXJuIHNiLlRvU3RyaW5nICgpOworIAl9CisgCQorLQlz dGF0aWMgU3RyaW5nIENTaGFycE5hbWVNYXRjaCAoTWF0Y2ggbWF0Y2gpIAorLQl7CistCQlzdHJp bmcgcyA9IG1hdGNoLkdyb3VwcyBbMV0uQ2FwdHVyZXMgWzBdLlZhbHVlOworLQkJcmV0dXJuIHMu VG9Mb3dlciAoKS4KKy0JCVJlcGxhY2UgKCJpbnQzMiIsICJpbnQiKS4KKy0JCVJlcGxhY2UgKCJ1 aW50MzIiLCAidWludCIpLgorLQkJUmVwbGFjZSAoImludDE2IiwgInNob3J0IikuCistCQlSZXBs YWNlICgidWludDE2IiwgInVzaG9ydCIpLgorLQkJUmVwbGFjZSAoImludDY0IiwgImxvbmciKS4K Ky0JCVJlcGxhY2UgKCJ1aW50NjQiLCAidWxvbmciKS4KKy0JCVJlcGxhY2UgKCJzaW5nbGUiLCAi ZmxvYXQiKS4KKy0JCVJlcGxhY2UgKCJib29sZWFuIiwgImJvb2wiKQorLQkJKyBtYXRjaC5Hcm91 cHMgWzJdLkNhcHR1cmVzIFswXS5WYWx1ZTsKKy0JfQorLQorIAkvLyBVc2VkIGZvciBlcnJvciBy ZXBvcnRpbmcgdG8gc2hvdyBzeW1ib2xpYyBuYW1lIGluc3RlYWQgb2YgdW5kZXJseWluZyB2YWx1 ZQorIAlwdWJsaWMgc3RhdGljIHN0cmluZyBDU2hhcnBFbnVtVmFsdWUgKFR5cGUgdCwgb2JqZWN0 IHZhbHVlKQorIAl7CitkaWZmIC0tZ2l0IGEvbW9uby9pby1sYXllci9wcm9jZXNzZXMuYyBiL21v bm8vaW8tbGF5ZXIvcHJvY2Vzc2VzLmMKK2luZGV4IGNkNjE3NmNkZGEyLi40ODYwODdkM2ExYiAx MDA2NDQKKy0tLSBhL21vbm8vaW8tbGF5ZXIvcHJvY2Vzc2VzLmMKKysrKyBiL21vbm8vaW8tbGF5 ZXIvcHJvY2Vzc2VzLmMKK0BAIC0xNSw2ICsxNSw3IEBACisgI2luY2x1ZGUgPHN5cy90aW1lLmg+ CisgI2luY2x1ZGUgPGVycm5vLmg+CisgI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorKyNpbmNsdWRl IDxzeXMvc3lzbWFjcm9zLmg+CisgI2luY2x1ZGUgPHVuaXN0ZC5oPgorICNpbmNsdWRlIDxzaWdu YWwuaD4KKyAjaW5jbHVkZSA8c3lzL3dhaXQuaD4KK2RpZmYgLS1naXQgYS9tb25vL21ldGFkYXRh L01ha2VmaWxlLmFtIGIvbW9uby9tZXRhZGF0YS9NYWtlZmlsZS5hbQoraW5kZXggNmZmMjM2ODg5 NWIuLmI4YmE2NmU4NzU2IDEwMDY0NAorLS0tIGEvbW9uby9tZXRhZGF0YS9NYWtlZmlsZS5hbQor KysrIGIvbW9uby9tZXRhZGF0YS9NYWtlZmlsZS5hbQorQEAgLTE1NCw3ICsxNTQsNiBAQCBsaWJt b25vcnVudGltZWluY2x1ZGVfSEVBREVSUyA9IFwKKyAJb2JqZWN0LmgJXAorIAlleGNlcHRpb24u aAlcCisgCXByb2ZpbGVyLmgJXAorLQlhcHBkb21haW4uaAlcCisgCW1vbm8tY29uZmlnLmgJXAor IAlkZWJ1Zy1oZWxwZXJzLmgJXAorIAltZW1wb29sLmgKK2RpZmYgLS1naXQgYS9tb25vL21ldGFk YXRhL2NsYXNzLmMgYi9tb25vL21ldGFkYXRhL2NsYXNzLmMKK2luZGV4IGYxM2YzNzYzMmZlLi4x Mjg3MTAzMzdmNCAxMDA2NDQKKy0tLSBhL21vbm8vbWV0YWRhdGEvY2xhc3MuYworKysrIGIvbW9u by9tZXRhZGF0YS9jbGFzcy5jCitAQCAtMjY5NSwxMCArMjY5NSwxMCBAQCBpbml0aWFsaXplX29i amVjdF9zbG90cyAoTW9ub0NsYXNzICpjbGFzcykKKyAJCQkJZmluYWxpemVfc2xvdCA9IGk7Cisg CQl9CisgCistCQlnX2Fzc2VydCAoZ2hjX3Nsb3QgPiAwKTsKKysJCWdfYXNzZXJ0IChnaGNfc2xv dCA+PSAwKTsKKyAJCWRlZmF1bHRfZ2hjID0gY2xhc3MtPnZ0YWJsZSBbZ2hjX3Nsb3RdOworIAor LQkJZ19hc3NlcnQgKGZpbmFsaXplX3Nsb3QgPiAwKTsKKysJCWdfYXNzZXJ0IChmaW5hbGl6ZV9z bG90ID49IDApOworIAkJZGVmYXVsdF9maW5hbGl6ZSA9IGNsYXNzLT52dGFibGUgW2ZpbmFsaXpl X3Nsb3RdOworIAl9CisgfQorZGlmZiAtLWdpdCBhL21vbm8vbWV0YWRhdGEvb2JqZWN0LmMgYi9t b25vL21ldGFkYXRhL29iamVjdC5jCitpbmRleCAyYjZmNDkwOWIzNC4uZWY0YzhmZDhiNDQgMTAw NjQ0CistLS0gYS9tb25vL21ldGFkYXRhL29iamVjdC5jCisrKysgYi9tb25vL21ldGFkYXRhL29i amVjdC5jCitAQCAtODYxLDcgKzg2MSw3IEBAIG1vbm9fY2xhc3NfY29tcHV0ZV9nY19kZXNjcmlw dG9yIChNb25vQ2xhc3MgKmNsYXNzKQorIAkJbW9ub19yZWdpc3Rlcl9qaXRfaWNhbGwgKEdDX2xv Y2FsX2djal9mYXN0X21hbGxvYywgIkdDX2xvY2FsX2djal9mYXN0X21hbGxvYyIsIG1vbm9fY3Jl YXRlX2ljYWxsX3NpZ25hdHVyZSAoIm9iamVjdCBpbnQgcHRyIiksIEZBTFNFKTsKKyAjZW5kaWYK KyAJCW1vbm9fcmVnaXN0ZXJfaml0X2ljYWxsIChHQ19nY2pfbWFsbG9jLCAiR0NfZ2NqX21hbGxv YyIsIG1vbm9fY3JlYXRlX2ljYWxsX3NpZ25hdHVyZSAoIm9iamVjdCBpbnQgcHRyIiksIEZBTFNF KTsKKy0JCW1vbm9fcmVnaXN0ZXJfaml0X2ljYWxsIChHQ19nY2pfZmFzdF9tYWxsb2MsICJHQ19n Y2pfZmFzdF9tYWxsb2MiLCBtb25vX2NyZWF0ZV9pY2FsbF9zaWduYXR1cmUgKCJvYmplY3QgaW50 IHB0ciIpLCBGQUxTRSk7CisrCQltb25vX3JlZ2lzdGVyX2ppdF9pY2FsbCAoR0NfZ2NqX21hbGxv YywgIkdDX2djal9mYXN0X21hbGxvYyIsIG1vbm9fY3JlYXRlX2ljYWxsX3NpZ25hdHVyZSAoIm9i amVjdCBpbnQgcHRyIiksIEZBTFNFKTsKKyAjZW5kaWYKKyAJCWdjal9pbml0ZWQgPSBUUlVFOwor IAkJbW9ub19sb2FkZXJfdW5sb2NrICgpOworZGlmZiAtLWdpdCBhL3J1bnRpbWUvTWFrZWZpbGUu YW0gYi9ydW50aW1lL01ha2VmaWxlLmFtCitpbmRleCA3Nzk3ODdiM2NlMy4uYjY3OTU3ZGNmMTYg MTAwNjQ0CistLS0gYS9ydW50aW1lL01ha2VmaWxlLmFtCisrKysgYi9ydW50aW1lL01ha2VmaWxl LmFtCitAQCAtMSw2ICsxLDMgQEAKKy0jIGhhY2sgdG8gcHJldmVudCAnY2hlY2snIGZyb20gZGVw ZW5kaW5nIG9uICdhbGwnCistQVVUT01BS0VfT1BUSU9OUyA9IGN5Z251cworLQorIHRtcGluc3Qg PSBfdG1waW5zdAorIAorIG5vaW5zdF9TQ1JJUFRTID0gbW9uby13cmFwcGVyIG1vbm9kaXMtd3Jh cHBlciBzZW1kZWwtd3JhcHBlcgotLSAKMi40NS4yCgo= --b1=_sUWWoGLuiCwxqVBZd1XkAit8Hrc2P4iMkhdKhObgTww Content-Type: text/x-patch; name=v2-0006-gnu-Add-mono-2.4.2.patch Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=v2-0006-gnu-Add-mono-2.4.2.patch RnJvbSA0ODQ4MDEwMDBiYmViNzk4MTE2ZDg3OTIzZGJhNTQzYTI0YmY0YjA2IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiB1bm11c2ggPHVubXVzaEBoYXNoYmFuZy5zaD4KRGF0ZTogVHVl LCAyNiBOb3YgMjAyNCAxMzowMjozMQpTdWJqZWN0OiBbUEFUQ0ggdjIgMDYvMjFdIGdudTogQWRk IG1vbm8tMi40LjIuCgoqIGdudS9wYWNrYWdlcy9kb3RuZXQuc2NtIChtb25vLTIuNC4yKTogTmV3 IHZhcmlhYmxlLgoqIGdudS9wYWNrYWdlcy9wYXRjaGVzL21vbm8tMi40LjIuMy1maXhlcy5wYXRj aDogTmV3IHBhdGNoLgoqIGdudS9sb2NhbC5tayAoZGlzdF9wYXRjaF9EQVRBKTogUmVnaXN0ZXIg aXQuCgotLS0KIGdudS9sb2NhbC5tayAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8 ICAxICsKIGdudS9wYWNrYWdlcy9kb3RuZXQuc2NtICAgICAgICAgICAgICAgICAgICAgICB8IDUy ICsrKysrKysrKysrKysrKysKIGdudS9wYWNrYWdlcy9wYXRjaGVzL21vbm8tMi40LjIuMy1maXhl cy5wYXRjaCB8IDU5ICsrKysrKysrKysrKysrKysrKysKIDMgZmlsZXMgY2hhbmdlZCwgMTEyIGlu c2VydGlvbnMoKykKIGNyZWF0ZSBtb2RlIDEwMDY0NCBnbnUvcGFja2FnZXMvcGF0Y2hlcy9tb25v LTIuNC4yLjMtZml4ZXMucGF0Y2gKCmRpZmYgLS1naXQgYS9nbnUvbG9jYWwubWsgYi9nbnUvbG9j YWwubWsKaW5kZXggYjdmYTY4YmQ2NzcuLmZhOTk2OTZlMzM4IDEwMDY0NAotLS0gYS9nbnUvbG9j YWwubWsKKysrIGIvZ251L2xvY2FsLm1rCkBAIC0xODI2LDYgKzE4MjYsNyBAQCBkaXN0X3BhdGNo X0RBVEEgPQkJCQkJCVwKICAgJUQlL3BhY2thZ2VzL3BhdGNoZXMvbW9uby0xLjIuNi1ib290c3Ry YXAucGF0Y2gJCVwKICAgJUQlL3BhY2thZ2VzL3BhdGNoZXMvbW9uby0xLjkuMS1hZGQtTU9OT19D UkVBVEVfSU1BR0VfVkVSU0lPTi5wYXRjaAkJXAogICAlRCUvcGFja2FnZXMvcGF0Y2hlcy9tb25v LTEuOS4xLWZpeGVzLnBhdGNoCQkJXAorICAlRCUvcGFja2FnZXMvcGF0Y2hlcy9tb25vLTIuNC4y LjMtZml4ZXMucGF0Y2gJCQlcCiAgICVEJS9wYWNrYWdlcy9wYXRjaGVzL21vc2FpY2F0Y2hlci11 bmJ1bmRsZS1odHNsaWIucGF0Y2gJXAogICAlRCUvcGFja2FnZXMvcGF0Y2hlcy9tcnJlc2N1ZS1z dXBwb3J0LWxvdmUtMTEucGF0Y2gJCVwKICAgJUQlL3BhY2thZ2VzL3BhdGNoZXMvbXRvb2xzLW1m b3JtYXQtdW5pbml0aWFsaXplZC5wYXRjaAlcCmRpZmYgLS1naXQgYS9nbnUvcGFja2FnZXMvZG90 bmV0LnNjbSBiL2dudS9wYWNrYWdlcy9kb3RuZXQuc2NtCmluZGV4IDk5NTExYTA3YTk5Li5hYzRk ZmI2N2M0YyAxMDA2NDQKLS0tIGEvZ251L3BhY2thZ2VzL2RvdG5ldC5zY20KKysrIGIvZ251L3Bh Y2thZ2VzL2RvdG5ldC5zY20KQEAgLTQ3MCwzICs0NzAsNTUgQEAgKGRlZmluZS1wdWJsaWMgbW9u by0xLjkuMQogICAgICAgICAgICAgICAgIChwYXRjaC1zaGViYW5nICJtb25vL3Rlc3RzL3Rlc3Qt ZHJpdmVyIikpKSkpCiAgICAgICAgKCgjOnRlc3RzPyBfICNmKSAjZikKICAgICAgICAoKCM6cGFy YWxsZWwtdGVzdHM/IF8gI2YpICNmKSkpKSkKKworKGRlZmluZS1wdWJsaWMgbW9uby0yLjQuMgor ICAocGFja2FnZQorICAgIChpbmhlcml0IG1vbm8tMS45LjEpCisgICAgKHZlcnNpb24gIjIuNC4y LjMiKQorICAgIChuYW1lICJtb25vIikKKyAgICAoc291cmNlIChvcmlnaW4KKyAgICAgICAgICAg ICAgKG1ldGhvZCBnaXQtZmV0Y2gpCisgICAgICAgICAgICAgICh1cmkKKyAgICAgICAgICAgICAg IChnaXQtcmVmZXJlbmNlCisgICAgICAgICAgICAgICAgKHVybCAiaHR0cHM6Ly9naXRsYWIud2lu ZWhxLm9yZy9tb25vL21vbm8uZ2l0IikKKyAgICAgICAgICAgICAgICAoY29tbWl0IChzdHJpbmct YXBwZW5kICJtb25vLSIgIjItNC0yLTMiKSkpKQorICAgICAgICAgICAgICAoZmlsZS1uYW1lIChn aXQtZmlsZS1uYW1lIG5hbWUgdmVyc2lvbikpCisgICAgICAgICAgICAgIChzaGEyNTYKKyAgICAg ICAgICAgICAgIChiYXNlMzIKKyAgICAgICAgICAgICAgICAiMG1ucmsxN3JkOWM1cmgzMGRoODJh MzljOWFrMW5zOTk4YjQxaXZwcnZ5N20wNjhza3BkYSIpKQorICAgICAgICAgICAgICAobW9kdWxl cyAnKChndWl4IGJ1aWxkIHV0aWxzKQorICAgICAgICAgICAgICAgICAgICAgICAgIChpY2UtOSBz dHJpbmctZnVuKSkpCisgICAgICAgICAgICAgIChzbmlwcGV0IHByZXBhcmUtbW9uby1zb3VyY2Up CisgICAgICAgICAgICAgIChwYXRjaGVzCisgICAgICAgICAgICAgICAoc2VhcmNoLXBhdGNoZXMg Im1vbm8tMi40LjIuMy1maXhlcy5wYXRjaCIpKSkpCisgICAgKG5hdGl2ZS1pbnB1dHMgKG1vZGlm eS1pbnB1dHMgKHBhY2thZ2UtbmF0aXZlLWlucHV0cyBtb25vLTEuOS4xKQorICAgICAgICAgICAg ICAgICAgICAgKHJlcGxhY2UgIm1vbm8iIG1vbm8tMS45LjEpKSkKKyAgICAoaW5wdXRzIChtb2Rp ZnktaW5wdXRzIChwYWNrYWdlLWlucHV0cyBtb25vLTEuOS4xKQorICAgICAgICAgICAgICAoYXBw ZW5kIGdldHRleHQtbWluaW1hbCkpKQorICAgIChhcmd1bWVudHMKKyAgICAgKHN1YnN0aXR1dGUt a2V5d29yZC1hcmd1bWVudHMgKHBhY2thZ2UtYXJndW1lbnRzIG1vbm8tMS45LjEpCisgICAgICAg KCgjOnRlc3RzPyBfICNmKQorICAgICAgICA7OyBXaGVuIGl0IHRyaWVzIGJ1aWxkaW5nIGlsdGVz dHMuaWwgaW4gbW9uby9taW5pLCBpdCBnZXRzOiBlcnJvcgorICAgICAgICA7OyBDUzAwMDY6IGNh bm5vdCBmaW5kIG1ldGFkYXRhIGZpbGUgYFRlc3REcml2ZXIuZGxsJy4gIEl0IGJ1aWxkcyBmaW5l CisgICAgICAgIDs7IG91dHNpZGUgb2YgdGhlIGJ1aWxkIGVudmlyb25tZW50LCBidXQgbGF0ZXIg dGVzdHMgZmFpbCwgYW5kIEkgY2FuJ3QKKyAgICAgICAgOzsgYmUgYm90aGVyZWQgdG8gZmlndXJl IG91dCB3aGF0J3MgY2F1c2luZyBpbGFzbSB0byBub3QgZmluZAorICAgICAgICA7OyBUZXN0RHJp dmVyLmRsbC4KKyAgICAgICAgI2YpCisgICAgICAgKCgjOnBoYXNlcyBwaGFzZXMgI34lc3RhbmRh cmQtcGhhc2VzKQorICAgICAgICAjfihtb2RpZnktcGhhc2VzICMkcGhhc2VzCisgICAgICAgICAg ICAoYWRkLWJlZm9yZSAnYm9vdHN0cmFwICdwYXRjaC1zdWItYXV0b2dlbi5zaC1zaGViYW5nCisg ICAgICAgICAgICAgIChsYW1iZGEgXworICAgICAgICAgICAgICAgIChwYXRjaC1zaGViYW5nICIu L2VnbGliL2F1dG9nZW4uc2giKSkpKSkpKQorICAgIChsaWNlbnNlIChsaXN0CisgICAgICAgICAg ICAgIDs7IG1vc3Qgb2YgbWNzL3Rvb2xzLCBtb25vL21hbiwgbW9zdCBvZiBtY3MvY2xhc3MsIHRl c3RzIGJ5CisgICAgICAgICAgICAgIDs7IGRlZmF1bHQsIG1vbm8vZWdsaWIKKyAgICAgICAgICAg ICAgOzsgbWNzL21jcywgbWNzL2dtY3MgKGR1YWwtbGljZW5zZWQgR1BMKQorICAgICAgICAgICAg ICA7OyBzYW1wbGVzCisgICAgICAgICAgICAgIGxpY2Vuc2U6eDExCisgICAgICAgICAgICAgIDs7 IG1jcy9tY3MsIG1jcy9nbWNzIChkdWFsLWxpY2Vuc2VkIFgxMSkKKyAgICAgICAgICAgICAgOzsg c29tZSBvZiBtY3MvdG9vbHMKKyAgICAgICAgICAgICAgbGljZW5zZTpncGwxKyA7OyBub3RlOiAu L21jcy9MSUNFTlNFLkdQTCBzcGVjaWZpZXMgbm8gdmVyc2lvbgorICAgICAgICAgICAgICA7OyBt b25vL21vbm8gKHRoZSBtb25vIFZNLCBJIHRoaW5rIHRoZXkgbWVhbnQgbW9uby9taW5pKQorICAg ICAgICAgICAgICBsaWNlbnNlOmxncGwyLjArIDs7IG5vdGU6IC4vbWNzL0xJQ0VOU0UuTEdQTCBz cGVjaWZpZXMgbm8gdmVyc2lvbgorICAgICAgICAgICAgICA7OyBtY3MvamF5CisgICAgICAgICAg ICAgIGxpY2Vuc2U6YnNkLTQpKSkpCmRpZmYgLS1naXQgYS9nbnUvcGFja2FnZXMvcGF0Y2hlcy9t b25vLTIuNC4yLjMtZml4ZXMucGF0Y2ggYi9nbnUvcGFja2FnZXMvcGF0Y2hlcy9tb25vLTIuNC4y LjMtZml4ZXMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjEz Y2ZmNzc0NTA2Ci0tLSAvZGV2L251bGwKKysrIGIvZ251L3BhY2thZ2VzL3BhdGNoZXMvbW9uby0y LjQuMi4zLWZpeGVzLnBhdGNoCkBAIC0wLDAgKzEsNTkgQEAKK2RpZmYgLS1naXQgYS9kYXRhL21v bm8ucGMuaW4gYi9kYXRhL21vbm8ucGMuaW4KK2luZGV4IDZkYTA5NjBkYjJkLi5kNDNiYjE4NzIx OCAxMDA2NDQKKy0tLSBhL2RhdGEvbW9uby5wYy5pbgorKysrIGIvZGF0YS9tb25vLnBjLmluCitA QCAtNyw2ICs3LDYgQEAgc3lzY29uZmRpcj1Ac3lzY29uZmRpckAKKyBOYW1lOiBNb25vCisgRGVz Y3JpcHRpb246IE1vbm8gUnVudGltZQorIFZlcnNpb246IEBWRVJTSU9OQAorLVJlcXVpcmVzOiBn bGliLTIuMCBndGhyZWFkLTIuMAorK1JlcXVpcmVzOiBnbGliLTIuMCBndGhyZWFkLTIuMCBiZHct Z2MKKyBMaWJzOiAtTCR7bGliZGlyfSBAZXhwb3J0X2xkZmxhZ3NAIC1sbW9ubyBAbGlibW9ub19s ZGZsYWdzQAorIENmbGFnczogLUkke2luY2x1ZGVkaXJ9IEBsaWJtb25vX2NmbGFnc0AKK2RpZmYg LS1naXQgYS9tb25vLXVuaW5zdGFsbGVkLnBjLmluIGIvbW9uby11bmluc3RhbGxlZC5wYy5pbgor aW5kZXggN2ZhM2YxMmRjOTEuLjJhMDczNDM2MmZkIDEwMDY0NAorLS0tIGEvbW9uby11bmluc3Rh bGxlZC5wYy5pbgorKysrIGIvbW9uby11bmluc3RhbGxlZC5wYy5pbgorQEAgLTEsNiArMSw2IEBA CisgTmFtZTogTW9ubworIERlc2NyaXB0aW9uOiBNb25vIFJ1bnRpbWUKKyBWZXJzaW9uOiBAVkVS U0lPTkAKKy1SZXF1aXJlczogZ2xpYi0yLjAgZ3RocmVhZC0yLjAKKytSZXF1aXJlczogZ2xpYi0y LjAgZ3RocmVhZC0yLjAgYmR3LWdjCisgTGliczogLUxAbW9ub19idWlsZF9yb290QC9tb25vL21p bmkvLmxpYnMgQGV4cG9ydF9sZGZsYWdzQCAtbG1vbm8gQGxpYm1vbm9fbGRmbGFnc0AKKyBDZmxh Z3M6IC1JQGFic190b3Bfc3JjZGlyQCAtSUBhYnNfdG9wX3NyY2RpckAvbW9ubyBAbGlibW9ub19j ZmxhZ3NACitkaWZmIC0tZ2l0IGEvbW9uby9tZXRhZGF0YS9NYWtlZmlsZS5hbSBiL21vbm8vbWV0 YWRhdGEvTWFrZWZpbGUuYW0KK2luZGV4IDgzZjg1MzIzNjliLi4zZmNhN2ZjMTNiOSAxMDA2NDQK Ky0tLSBhL21vbm8vbWV0YWRhdGEvTWFrZWZpbGUuYW0KKysrKyBiL21vbm8vbWV0YWRhdGEvTWFr ZWZpbGUuYW0KK0BAIC0xNzEsNyArMTcxLDYgQEAgbGlibW9ub3J1bnRpbWVpbmNsdWRlX0hFQURF UlMgPSBcCisgCW9iamVjdC5oCVwKKyAJZXhjZXB0aW9uLmgJXAorIAlwcm9maWxlci5oCVwKKy0J YXBwZG9tYWluLmgJXAorIAltb25vLWNvbmZpZy5oCVwKKyAJZGVidWctaGVscGVycy5oCVwKKyAJ bWVtcG9vbC5oCitkaWZmIC0tZ2l0IGEvbW9uby9taW5pL2RyaXZlci5jIGIvbW9uby9taW5pL2Ry aXZlci5jCitpbmRleCA0OGNhMmQ5Njg5OS4uOWZiMzUxMjIwMGIgMTAwNjQ0CistLS0gYS9tb25v L21pbmkvZHJpdmVyLmMKKysrKyBiL21vbm8vbWluaS9kcml2ZXIuYworQEAgLTEyMzYsNiArMTIz Niw3IEBAIG1vbm9fbWFpbiAoaW50IGFyZ2MsIGNoYXIqIGFyZ3ZbXSkKKyAjZW5kaWYKKyAJaWYg KCFnX3RocmVhZF9zdXBwb3J0ZWQgKCkpCisgCQlnX3RocmVhZF9pbml0IChOVUxMKTsKKysgICAg ICAgIEdDX2FsbG93X3JlZ2lzdGVyX3RocmVhZHMoKTsKKyAKKyAJaWYgKG1vbm9fcnVubmluZ19v bl92YWxncmluZCAoKSAmJiBnZXRlbnYgKCJNT05PX1ZBTEdSSU5EX0xFQUtfQ0hFQ0siKSkgewor IAkJR01lbVZUYWJsZSBtZW1fdnRhYmxlOworZGlmZiAtLWdpdCBhL3J1bnRpbWUvTWFrZWZpbGUu YW0gYi9ydW50aW1lL01ha2VmaWxlLmFtCitpbmRleCAwZTg3NmUyYTQ5MS4uYjljZDBhOTlkOWUg MTAwNjQ0CistLS0gYS9ydW50aW1lL01ha2VmaWxlLmFtCisrKysgYi9ydW50aW1lL01ha2VmaWxl LmFtCitAQCAtMSw2ICsxLDMgQEAKKy0jIGhhY2sgdG8gcHJldmVudCAnY2hlY2snIGZyb20gZGVw ZW5kaW5nIG9uICdhbGwnCistQVVUT01BS0VfT1BUSU9OUyA9IGN5Z251cworLQorIHRtcGluc3Qg PSBfdG1waW5zdAorIAorIG5vaW5zdF9TQ1JJUFRTID0gbW9uby13cmFwcGVyIG1vbm9kaXMtd3Jh cHBlcgotLSAKMi40NS4yCgo= --b1=_sUWWoGLuiCwxqVBZd1XkAit8Hrc2P4iMkhdKhObgTww Content-Type: text/x-patch; name=v2-0005-gnu-Add-mono-1.9.1.patch Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=v2-0005-gnu-Add-mono-1.9.1.patch RnJvbSAyNDQxY2UyYzM4ODljMDMxZGE5Njk5YWYxOGRlZTY2NDhhMDYzYWZmIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiB1bm11c2ggPHVubXVzaEBoYXNoYmFuZy5zaD4KRGF0ZTogVHVl LCAyNiBOb3YgMjAyNCAxMjo1OTo0OQpTdWJqZWN0OiBbUEFUQ0ggdjIgMDUvMjFdIGdudTogQWRk IG1vbm8tMS45LjEuCgoqIGdudS9wYWNrYWdlcy9kb3RuZXQuc2NtIChtb25vLTEuOS4xKTogTmV3 IHZhcmlhYmxlLgoqIGdudS9wYWNrYWdlcy9wYXRjaGVzL21vbm8tMS45LjEtYWRkLU1PTk9fQ1JF QVRFX0lNQUdFX1ZFUlNJT04ucGF0Y2g6CiAgTmV3IHBhdGNoLgoqIGdudS9wYWNrYWdlcy9wYXRj aGVzL21vbm8tMS45LjEtZml4ZXMucGF0Y2g6IE5ldyBwYXRjaC4KKiBnbnUvbG9jYWwubWsgKGRp c3RfcGF0Y2hfREFUQSk6IHJlZ2lzdGVyIG5ldyBwYXRjaGVzLgoKLS0tCiBnbnUvbG9jYWwubWsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgMiArCiBnbnUvcGFja2FnZXMvZG90 bmV0LnNjbSAgICAgICAgICAgICAgICAgICAgICAgfCA2MCArKysrKysrKysrKysrKysrKysrCiAu Li4tMS45LjEtYWRkLU1PTk9fQ1JFQVRFX0lNQUdFX1ZFUlNJT04ucGF0Y2ggfCAxNCArKysrKwog Z251L3BhY2thZ2VzL3BhdGNoZXMvbW9uby0xLjkuMS1maXhlcy5wYXRjaCAgIHwgNTkgKysrKysr KysrKysrKysrKysrCiA0IGZpbGVzIGNoYW5nZWQsIDEzNSBpbnNlcnRpb25zKCspCiBjcmVhdGUg bW9kZSAxMDA2NDQgZ251L3BhY2thZ2VzL3BhdGNoZXMvbW9uby0xLjkuMS1hZGQtTU9OT19DUkVB VEVfSU1BR0VfVkVSU0lPTi5wYXRjaAogY3JlYXRlIG1vZGUgMTAwNjQ0IGdudS9wYWNrYWdlcy9w YXRjaGVzL21vbm8tMS45LjEtZml4ZXMucGF0Y2gKCmRpZmYgLS1naXQgYS9nbnUvbG9jYWwubWsg Yi9nbnUvbG9jYWwubWsKaW5kZXggNTRmMDFiYTA1YTkuLmI3ZmE2OGJkNjc3IDEwMDY0NAotLS0g YS9nbnUvbG9jYWwubWsKKysrIGIvZ251L2xvY2FsLm1rCkBAIC0xODI0LDYgKzE4MjQsOCBAQCBk aXN0X3BhdGNoX0RBVEEgPQkJCQkJCVwKICAgJUQlL3BhY2thZ2VzL3BhdGNoZXMvbW9kdWxlLWlu aXQtdG9vbHMtbW9kdWxlZGlyLnBhdGNoCVwKICAgJUQlL3BhY2thZ2VzL3BhdGNoZXMvbW9uZXJv LXVzZS1zeXN0ZW0tbWluaXVwbnBjLnBhdGNoCQkJXAogICAlRCUvcGFja2FnZXMvcGF0Y2hlcy9t b25vLTEuMi42LWJvb3RzdHJhcC5wYXRjaAkJXAorICAlRCUvcGFja2FnZXMvcGF0Y2hlcy9tb25v LTEuOS4xLWFkZC1NT05PX0NSRUFURV9JTUFHRV9WRVJTSU9OLnBhdGNoCQlcCisgICVEJS9wYWNr YWdlcy9wYXRjaGVzL21vbm8tMS45LjEtZml4ZXMucGF0Y2gJCQlcCiAgICVEJS9wYWNrYWdlcy9w YXRjaGVzL21vc2FpY2F0Y2hlci11bmJ1bmRsZS1odHNsaWIucGF0Y2gJXAogICAlRCUvcGFja2Fn ZXMvcGF0Y2hlcy9tcnJlc2N1ZS1zdXBwb3J0LWxvdmUtMTEucGF0Y2gJCVwKICAgJUQlL3BhY2th Z2VzL3BhdGNoZXMvbXRvb2xzLW1mb3JtYXQtdW5pbml0aWFsaXplZC5wYXRjaAlcCmRpZmYgLS1n aXQgYS9nbnUvcGFja2FnZXMvZG90bmV0LnNjbSBiL2dudS9wYWNrYWdlcy9kb3RuZXQuc2NtCmlu ZGV4IDA5Mzg2NTA4MGJiLi45OTUxMWEwN2E5OSAxMDA2NDQKLS0tIGEvZ251L3BhY2thZ2VzL2Rv dG5ldC5zY20KKysrIGIvZ251L3BhY2thZ2VzL2RvdG5ldC5zY20KQEAgLTQxMCwzICs0MTAsNjMg QEAgKGRlZmluZS1wdWJsaWMgbW9uby0xLjIuNgogICAgICAgICAgICAgICBsaWNlbnNlOmxncGwy LjArIDs7IG5vdGU6IC4vbWNzL0xJQ0VOU0UuTEdQTCBzcGVjaWZpZXMgbm8gdmVyc2lvbgogICAg ICAgICAgICAgICA7OyBtY3MvamF5CiAgICAgICAgICAgICAgIGxpY2Vuc2U6YnNkLTQpKSkpCisK KyhkZWZpbmUtcHVibGljIG1vbm8tMS45LjEKKyAgKHBhY2thZ2UKKyAgICAoaW5oZXJpdCBtb25v LTEuMi42KQorICAgICh2ZXJzaW9uICIxLjkuMSIpCisgICAgKG5hbWUgIm1vbm8iKQorICAgIChz b3VyY2UgKG9yaWdpbgorICAgICAgICAgICAgICAobWV0aG9kIGdpdC1mZXRjaCkKKyAgICAgICAg ICAgICAgKHVyaQorICAgICAgICAgICAgICAgKGdpdC1yZWZlcmVuY2UKKyAgICAgICAgICAgICAg ICAodXJsICJodHRwczovL2dpdGxhYi53aW5laHEub3JnL21vbm8vbW9uby5naXQiKQorICAgICAg ICAgICAgICAgIChjb21taXQgKHN0cmluZy1hcHBlbmQgIm1vbm8tIiAiMS45LjEuMSIpKSkpCisg ICAgICAgICAgICAgIChmaWxlLW5hbWUgKGdpdC1maWxlLW5hbWUgbmFtZSB2ZXJzaW9uKSkKKyAg ICAgICAgICAgICAgKHNoYTI1NgorICAgICAgICAgICAgICAgKGJhc2UzMgorICAgICAgICAgICAg ICAgICIwczFuM3pkaGMyYWxrOXNteGZkbDFrano3bHoycDE5Z3Mwa3M0aGdyODY0amxtZjEzYndz IikpCisgICAgICAgICAgICAgIChtb2R1bGVzICcoKGd1aXggYnVpbGQgdXRpbHMpCisgICAgICAg ICAgICAgICAgICAgICAgICAgKGljZS05IHN0cmluZy1mdW4pKSkKKyAgICAgICAgICAgICAgKHNu aXBwZXQgcHJlcGFyZS1tb25vLXNvdXJjZSkKKyAgICAgICAgICAgICAgKHBhdGNoZXMKKyAgICAg ICAgICAgICAgIChzZWFyY2gtcGF0Y2hlcworICAgICAgICAgICAgICAgICJtb25vLTEuOS4xLWZp eGVzLnBhdGNoIgorICAgICAgICAgICAgICAgICJtb25vLTEuOS4xLWFkZC1NT05PX0NSRUFURV9J TUFHRV9WRVJTSU9OLnBhdGNoIikpKSkKKyAgICAobmF0aXZlLWlucHV0cworICAgICAobW9kaWZ5 LWlucHV0cyAocGFja2FnZS1uYXRpdmUtaW5wdXRzIG1vbm8tMS4yLjYpCisgICAgICAgKGRlbGV0 ZSAicG5ldC1naXQiKQorICAgICAgIChkZWxldGUgInBuZXRsaWItZ2l0IikKKyAgICAgICAocHJl cGVuZCBtb25vLTEuMi42KQorICAgICAgIChhcHBlbmQgd2hpY2gpCisgICAgICAgOzsgbmVlZGVk IGZvciB0ZXN0cworICAgICAgIChhcHBlbmQgcGVybCkpKQorICAgIChhcmd1bWVudHMKKyAgICAg KHN1YnN0aXR1dGUta2V5d29yZC1hcmd1bWVudHMgKHBhY2thZ2UtYXJndW1lbnRzIG1vbm8tMS4y LjYpCisgICAgICAgKCgjOm1ha2UtZmxhZ3MgXyAjZikKKyAgICAgICAgI34obGlzdCAiQ0M9Z2Nj IiAiVj0xIikpCisgICAgICAgKCgjOnBoYXNlcyBwaGFzZXMgI34lc3RhbmRhcmQtcGhhc2VzKQor ICAgICAgICAjfihtb2RpZnktcGhhc2VzICMkcGhhc2VzCisgICAgICAgICAgICAoYWRkLWJlZm9y ZSAnY29uZmlndXJlICdzZXQtY2ZsYWdzCisgICAgICAgICAgICAgIChsYW1iZGEgXworICAgICAg ICAgICAgICAgIDs7IGFwcGFyZW50bHkgY2FuJ3QgYmUgc2V0IHZpYSBtYWtlIGZsYWdzIGluIHRo aXMgdmVyc2lvbgorICAgICAgICAgICAgICAgIChsZXQgKChvcmlnaW5hbCAoZ2V0ZW52ICJDRkxB R1MiKSkpCisgICAgICAgICAgICAgICAgICAoc2V0ZW52ICJDRkxBR1MiIChzdHJpbmctYXBwZW5k IChvciBvcmlnaW5hbCAiIikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgKGlmIG9yaWdpbmFsICIgIiAiIikKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIi1EQVJHX01BWD01MDAiKSkpKSkKKyAgICAgICAg ICAgIChhZGQtYmVmb3JlICdjb25maWd1cmUgJ3NldC1jcmVhdGUtaW1hZ2UtdmVyc2lvbgorICAg ICAgICAgICAgICAobGFtYmRhIF8KKyAgICAgICAgICAgICAgICA7OyBwbmV0IHByb2R1Y2VzIHYy LnggYXNzZW1ibGllcy4gIE1vbm8gZG9lcyB0aGlzIHdlaXJkIHRoaW5nCisgICAgICAgICAgICAg ICAgOzsgd2hlcmUgaXQgYWx3YXlzIHByb2R1Y2VzIGFzc2VtYmxpZXMgb2YgdGhlIHNhbWUgdmVy c2lvbiBhcworICAgICAgICAgICAgICAgIDs7IHRoZSBydW50aW1lIHRoYXQgaXMgcnVubmluZyBp dCwgd2hpY2ggaXMgYmFzZWQgb24gdGhlCisgICAgICAgICAgICAgICAgOzsgdmVyc2lvbiBvZiB0 aGUgYXNzZW1ibHkgdGhhdCBpdCBsb2FkZWQsIHdoaWNoIGlzIGJhc2VkIG9uCisgICAgICAgICAg ICAgICAgOzsgd2hhdCBpdCBkZWNpZGVkIGZvciB0aGUgcHJldmlvdXMgY29tcGlsZXIuLi4gb24g YW5kIG9uIGFsbAorICAgICAgICAgICAgICAgIDs7IHRoZSB3YXkgYmFjayB0byBwbmV0LiAgVGhp cyBicmVha3MgdGhhdCBjaGFpbiwgYmVjYXVzZQorICAgICAgICAgICAgICAgIDs7IG90aGVyd2lz ZSBpdCBlbmRzIHVwIGNvbXBpbGluZyB0aGUgaW5pdGlhbCBtY3MgYWdhaW5zdCAuTkVUCisgICAg ICAgICAgICAgICAgOzsgMi4wIGxpYnJhcmllcyBhbmQgdGhlbiBydW5uaW5nIHdpdGggLk5FVCAx LjAgbGlicmFyaWVzLgorICAgICAgICAgICAgICAgIChzZXRlbnYgIk1PTk9fQ1JFQVRFX0lNQUdF X1ZFUlNJT04iICJ2MS4xLjQzMjIiKSkpCisgICAgICAgICAgICAoYWRkLWFmdGVyICd1bnBhY2sg J3BhdGNoLXRlc3QtZHJpdmVyLXNoZWJhbmcKKyAgICAgICAgICAgICAgKGxhbWJkYSBfCisgICAg ICAgICAgICAgICAgKHBhdGNoLXNoZWJhbmcgIm1vbm8vdGVzdHMvdGVzdC1kcml2ZXIiKSkpKSkK KyAgICAgICAoKCM6dGVzdHM/IF8gI2YpICNmKQorICAgICAgICgoIzpwYXJhbGxlbC10ZXN0cz8g XyAjZikgI2YpKSkpKQpkaWZmIC0tZ2l0IGEvZ251L3BhY2thZ2VzL3BhdGNoZXMvbW9uby0xLjku MS1hZGQtTU9OT19DUkVBVEVfSU1BR0VfVkVSU0lPTi5wYXRjaCBiL2dudS9wYWNrYWdlcy9wYXRj aGVzL21vbm8tMS45LjEtYWRkLU1PTk9fQ1JFQVRFX0lNQUdFX1ZFUlNJT04ucGF0Y2gKbmV3IGZp bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjFlZWYwNTQ4Y2ExCi0tLSAvZGV2L251 bGwKKysrIGIvZ251L3BhY2thZ2VzL3BhdGNoZXMvbW9uby0xLjkuMS1hZGQtTU9OT19DUkVBVEVf SU1BR0VfVkVSU0lPTi5wYXRjaApAQCAtMCwwICsxLDE0IEBACitkaWZmIC0tZ2l0IGEvbW9uby9t ZXRhZGF0YS9yZWZsZWN0aW9uLmMgYi9tb25vL21ldGFkYXRhL3JlZmxlY3Rpb24uYworaW5kZXgg Y2UwNTNiMGVmNDkuLjdjNTFmMjBjNGNmIDEwMDY0NAorLS0tIGEvbW9uby9tZXRhZGF0YS9yZWZs ZWN0aW9uLmMKKysrKyBiL21vbm8vbWV0YWRhdGEvcmVmbGVjdGlvbi5jCitAQCAtNDMzNiw2ICs0 MzM2LDkgQEAgY3JlYXRlX2R5bmFtaWNfbW9ub19pbWFnZSAoTW9ub0R5bmFtaWNBc3NlbWJseSAq YXNzZW1ibHksIGNoYXIgKmFzc2VtYmx5X25hbWUsIGMKKyAKKyAJY29uc3QgY2hhciAqdmVyc2lv biA9IG1vbm9fZ2V0X3J1bnRpbWVfaW5mbyAoKS0+cnVudGltZV92ZXJzaW9uOworIAorKyAgICAg ICAgY2hhciAqZW52X3ZlciA9IGdldGVudigiTU9OT19DUkVBVEVfSU1BR0VfVkVSU0lPTiIpOwor KyAgICAgICAgaWYgKGVudl92ZXIpIHZlcnNpb24gPSBlbnZfdmVyOworKworICNpZiBIQVZFX0JP RUhNX0dDCisgCWltYWdlID0gR0NfTUFMTE9DIChzaXplb2YgKE1vbm9EeW5hbWljSW1hZ2UpKTsK KyAjZWxzZQpkaWZmIC0tZ2l0IGEvZ251L3BhY2thZ2VzL3BhdGNoZXMvbW9uby0xLjkuMS1maXhl cy5wYXRjaCBiL2dudS9wYWNrYWdlcy9wYXRjaGVzL21vbm8tMS45LjEtZml4ZXMucGF0Y2gKbmV3 IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjE2MzUzZWE3NDFlCi0tLSAvZGV2 L251bGwKKysrIGIvZ251L3BhY2thZ2VzL3BhdGNoZXMvbW9uby0xLjkuMS1maXhlcy5wYXRjaApA QCAtMCwwICsxLDU5IEBACitkaWZmIC0tZ2l0IGEvZGF0YS9tb25vLnBjLmluIGIvZGF0YS9tb25v LnBjLmluCitpbmRleCA2ZGEwOTYwZGIyZC4uZDQzYmIxODcyMTggMTAwNjQ0CistLS0gYS9kYXRh L21vbm8ucGMuaW4KKysrKyBiL2RhdGEvbW9uby5wYy5pbgorQEAgLTcsNiArNyw2IEBAIHN5c2Nv bmZkaXI9QHN5c2NvbmZkaXJACisgTmFtZTogTW9ubworIERlc2NyaXB0aW9uOiBNb25vIFJ1bnRp bWUKKyBWZXJzaW9uOiBAVkVSU0lPTkAKKy1SZXF1aXJlczogZ2xpYi0yLjAgZ3RocmVhZC0yLjAK KytSZXF1aXJlczogZ2xpYi0yLjAgZ3RocmVhZC0yLjAgYmR3LWdjCisgTGliczogLUwke2xpYmRp cn0gQGV4cG9ydF9sZGZsYWdzQCAtbG1vbm8gQGxpYm1vbm9fbGRmbGFnc0AKKyBDZmxhZ3M6IC1J JHtpbmNsdWRlZGlyfSBAbGlibW9ub19jZmxhZ3NACitkaWZmIC0tZ2l0IGEvbW9uby11bmluc3Rh bGxlZC5wYy5pbiBiL21vbm8tdW5pbnN0YWxsZWQucGMuaW4KK2luZGV4IDdmYTNmMTJkYzkxLi4y YTA3MzQzNjJmZCAxMDA2NDQKKy0tLSBhL21vbm8tdW5pbnN0YWxsZWQucGMuaW4KKysrKyBiL21v bm8tdW5pbnN0YWxsZWQucGMuaW4KK0BAIC0xLDYgKzEsNiBAQAorIE5hbWU6IE1vbm8KKyBEZXNj cmlwdGlvbjogTW9ubyBSdW50aW1lCisgVmVyc2lvbjogQFZFUlNJT05ACistUmVxdWlyZXM6IGds aWItMi4wIGd0aHJlYWQtMi4wCisrUmVxdWlyZXM6IGdsaWItMi4wIGd0aHJlYWQtMi4wIGJkdy1n YworIExpYnM6IC1MQG1vbm9fYnVpbGRfcm9vdEAvbW9uby9taW5pLy5saWJzIEBleHBvcnRfbGRm bGFnc0AgLWxtb25vIEBsaWJtb25vX2xkZmxhZ3NACisgQ2ZsYWdzOiAtSUBhYnNfdG9wX3NyY2Rp ckAgLUlAYWJzX3RvcF9zcmNkaXJAL21vbm8gQGxpYm1vbm9fY2ZsYWdzQAorZGlmZiAtLWdpdCBh L21vbm8vbWV0YWRhdGEvTWFrZWZpbGUuYW0gYi9tb25vL21ldGFkYXRhL01ha2VmaWxlLmFtCitp bmRleCAyZTQ4MDE5MGM4Yy4uOTBkMGY2MTk5NTkgMTAwNjQ0CistLS0gYS9tb25vL21ldGFkYXRh L01ha2VmaWxlLmFtCisrKysgYi9tb25vL21ldGFkYXRhL01ha2VmaWxlLmFtCitAQCAtMTU3LDcg KzE1Nyw2IEBAIGxpYm1vbm9ydW50aW1laW5jbHVkZV9IRUFERVJTID0gXAorIAlvYmplY3QuaAlc CisgCWV4Y2VwdGlvbi5oCVwKKyAJcHJvZmlsZXIuaAlcCistCWFwcGRvbWFpbi5oCVwKKyAJbW9u by1jb25maWcuaAlcCisgCWRlYnVnLWhlbHBlcnMuaAlcCisgCW1lbXBvb2wuaAorZGlmZiAtLWdp dCBhL21vbm8vbWluaS9kcml2ZXIuYyBiL21vbm8vbWluaS9kcml2ZXIuYworaW5kZXggZmZhNGI1 ZTVlNjkuLjg1YTk1NDk2MGViIDEwMDY0NAorLS0tIGEvbW9uby9taW5pL2RyaXZlci5jCisrKysg Yi9tb25vL21pbmkvZHJpdmVyLmMKK0BAIC0xMDMzLDYgKzEwMzMsNyBAQCBtb25vX21haW4gKGlu dCBhcmdjLCBjaGFyKiBhcmd2W10pCisgI2VuZGlmCisgCWlmICghZ190aHJlYWRfc3VwcG9ydGVk ICgpKQorIAkJZ190aHJlYWRfaW5pdCAoTlVMTCk7CisrICAgICAgICBHQ19hbGxvd19yZWdpc3Rl cl90aHJlYWRzKCk7CisgCisgCWlmIChtb25vX3J1bm5pbmdfb25fdmFsZ3JpbmQgKCkgJiYgZ2V0 ZW52ICgiTU9OT19WQUxHUklORF9MRUFLX0NIRUNLIikpIHsKKyAJCUdNZW1WVGFibGUgbWVtX3Z0 YWJsZTsKK2RpZmYgLS1naXQgYS9ydW50aW1lL01ha2VmaWxlLmFtIGIvcnVudGltZS9NYWtlZmls ZS5hbQoraW5kZXggZTNhOGEyMWU5ZTIuLjU4N2I5ZjRhYTc5IDEwMDY0NAorLS0tIGEvcnVudGlt ZS9NYWtlZmlsZS5hbQorKysrIGIvcnVudGltZS9NYWtlZmlsZS5hbQorQEAgLTEsNiArMSwzIEBA CistIyBoYWNrIHRvIHByZXZlbnQgJ2NoZWNrJyBmcm9tIGRlcGVuZGluZyBvbiAnYWxsJworLUFV VE9NQUtFX09QVElPTlMgPSBjeWdudXMKKy0KKyB0bXBpbnN0ID0gX3RtcGluc3QKKyAKKyBub2lu c3RfU0NSSVBUUyA9IG1vbm8td3JhcHBlciBtb25vZGlzLXdyYXBwZXIgc2VtZGVsLXdyYXBwZXIK LS0gCjIuNDUuMgoK --b1=_sUWWoGLuiCwxqVBZd1XkAit8Hrc2P4iMkhdKhObgTww Content-Type: text/x-patch; name=v2-0009-gnu-Add-mono-3.0.patch Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=v2-0009-gnu-Add-mono-3.0.patch RnJvbSA0MDE3MTI1YWU0NWFlYWY0Mzg4OTQ0YzQxMTkyZDE5ODllN2QyNWFjIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiB1bm11c2ggPHVubXVzaEBoYXNoYmFuZy5zaD4KRGF0ZTogVHVl LCAyNiBOb3YgMjAyNCAxMzoxMzo0MApTdWJqZWN0OiBbUEFUQ0ggdjIgMDkvMjFdIGdudTogQWRk IG1vbm8tMy4wLgoKKiBnbnUvcGFja2FnZXMvZG90bmV0LnNjbQogIChtb25vLTMuMC4xMi1leHRl cm5hbC1yZXBvLXNwZWNzLCBtb25vLTMuMCk6IE5ldyB2YXJpYWJsZXMuCgotLS0KIGdudS9wYWNr YWdlcy9kb3RuZXQuc2NtIHwgNjMgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysKIDEgZmlsZSBjaGFuZ2VkLCA2MyBpbnNlcnRpb25zKCspCgpkaWZmIC0tZ2l0IGEvZ251 L3BhY2thZ2VzL2RvdG5ldC5zY20gYi9nbnUvcGFja2FnZXMvZG90bmV0LnNjbQppbmRleCBmOTc1 NjdkYzI5Zi4uMWRkODI3MDNiOTEgMTAwNjQ0Ci0tLSBhL2dudS9wYWNrYWdlcy9kb3RuZXQuc2Nt CisrKyBiL2dudS9wYWNrYWdlcy9kb3RuZXQuc2NtCkBAIC02NDAsMyArNjQwLDY2IEBAIChkZWZp bmUtcHVibGljIG1vbm8tMi4xMS40CiAgICAgICAgICAgICAgIGxpY2Vuc2U6YnNkLTQKICAgICAg ICAgICAgICAgOzsgbWNzL2NsYXNzL1N5c3RlbS5Db3JlL1N5c3RlbS9UaW1lWm9uZUluZm8uQW5k cm9pZC5jcwogICAgICAgICAgICAgICBsaWNlbnNlOmFzbDIuMCkpKSkKKworKGRlZmluZSBtb25v LTMuMC4xMi1leHRlcm5hbC1yZXBvLXNwZWNzCisgIDs7IGZvcm1hdDogKHtyZXBvbmFtZSBPUiAo cmVwb25hbWUgZGlyLW5hbWUpfSBjb21taXQgc2hhMjU2KSAuLi4KKyAgOzsgaWYgcmVwb25hbWUg c3RhcnRzIHdpdGggaHR0cHM6Ly8gaXQgaXMgdHJlYXRlZCBhcyB0aGUgcmVwb3NpdG9yeSB1cmws CisgIDs7IG90aGVyd2lzZSB0aGUgbmFtZSBvZiBhIHJlcG9zaXRvcnkgdW5kZXIgaHR0cHM6Ly9n aXRodWIuY29tL21vbm8vCisgICcoKCJhc3BuZXR3ZWJzdGFjayIgICAgICAgICAgICAgICAiZTc3 YjEyZTZjYzVlZDI2MGE5ODQ0N2Y2MDllODg3MzM3ZTQ0ZTI5OSIKKyAgICAgIjBya3MzNDRxcjRm bXAzZnMxMjY0ZDJxa21tMzQ4bThkMWtqZDd6NGw5NGlpaXJ3bjFmcTEiKQorICAgICgiY2VjaWwi ICAgICAgICAgICAgICAgICAgICAgICAgIjU0ZTBhNTA0NjRlZGJjMjU0YjM5ZWEzYzg4NWVlOTFh ZGE3MzA3MDUiCisgICAgICIwMDdzemJmNWExNHE4Mzg2OTVsd2RwN2FwNnJ3enoza3psbGdqZm5p YnpscWlwdzN4MnlrIikKKyAgICAoImVudGl0eWZyYW1ld29yayIgICAgICAgICAgICAgICJhNWZh ZGRlY2EyYmVlMDg2MzZmMWI3YjNhZjgzODliZDQxMTlmNGNkIgorICAgICAiMGIwNXB6ZjZxd2Rk OTJwYnp5bTMybmZtdzhycTM2ODIwdmR6YWtxMWt5a2ZtZGRqcjlhNyIpCisgICAgKCgiaWt2bS1m b3JrIiAiaWt2bSIpICAgICAgICAgICAiMTBiODMxMmM4MDI0MTExNzgwZWUzODI2ODhjZDRjODc1 NGIxZjFhYyIKKyAgICAgIjAyNXdmOWdqZ2Z2cnE0MnZndzkxYWh5M2NtemN3MDk0dng3ODNkc3A3 Z2pkeWQ4cTA5bm0iKQorICAgICgiTHVjZW5lLk5ldCIgICAgICAgICAgICAgICAgICAgIjg4ZmI2 N2IwNzYyMWRmZWQwNTRkOGQ3NWZkNTA2NzJmYjI2MzQ5ZGYiCisgICAgICIxcmZ4cWZ6N2hrcDly ZzVhbnZ4bHY2Zm5hMHhpMGJudjF5OHFiaGY4eDQ4bDA4eWpiMzhrIikKKyAgICAoIk5ld3RvbnNv ZnQuSnNvbiIgICAgICAgICAgICAgICI0NzFjM2UwODAzYTlmNDBhMGFjYzhhZWNlYjMxZGU2ZmY5 M2E1MmM0IgorICAgICAiMGRnbmdkNWhxazZ5aGxnNDBrYWJuNnFkbmtubTMyemN4OXE2Ym0ydzMx Y3Nuc2s1OTc4cyIpCisgICAgKCJyeCIgICAgICAgICAgICAgICAgICAgICAgICAgICAiMTdlODQ3 N2IyY2I4ZGQwMThkNDlhNTY3NTI2ZmU5OWZkMjg5Nzg1NyIKKyAgICAgIjBmeXl5NGpmMG1tYTZr ZmY2ZnZidmRjczVyYTFiejRzMDYzbnZqanZhOXhsbnY3c2p2aDQiKSkpCisKKyhkZWZpbmUtcHVi bGljIG1vbm8tMy4wCisgIChwYWNrYWdlCisgICAgKGluaGVyaXQgbW9uby0yLjExLjQpCisgICAg KHZlcnNpb24gIjMuMC4xMiIpCisgICAgKG5hbWUgIm1vbm8iKQorICAgIChzb3VyY2UgKG9yaWdp bgorICAgICAgICAgICAgICAobWV0aG9kIGdpdC1mZXRjaCkKKyAgICAgICAgICAgICAgKHVyaQor ICAgICAgICAgICAgICAgKGdpdC1yZWZlcmVuY2UKKyAgICAgICAgICAgICAgICAodXJsICJodHRw czovL2dpdGxhYi53aW5laHEub3JnL21vbm8vbW9uby5naXQiKQorICAgICAgICAgICAgICAgIChj b21taXQgKHN0cmluZy1hcHBlbmQgIm1vbm8tIiAiMy4wLjEyIikpKSkKKyAgICAgICAgICAgICAg KGZpbGUtbmFtZSAoZ2l0LWZpbGUtbmFtZSBuYW1lIHZlcnNpb24pKQorICAgICAgICAgICAgICAo c2hhMjU2CisgICAgICAgICAgICAgICAoYmFzZTMyCisgICAgICAgICAgICAgICAgIjExMGYzaGNm aWtrNmJ4YnJnamFzNWRxbGRjaTlmMjRndm0zdmRnbjRqOWo3eGhsY3gxbGoiKSkKKyAgICAgICAg ICAgICAgKG1vZHVsZXMgJygoZ3VpeCBidWlsZCB1dGlscykKKyAgICAgICAgICAgICAgICAgICAg ICAgICAoaWNlLTkgc3RyaW5nLWZ1bikpKQorICAgICAgICAgICAgICAoc25pcHBldCAjfihiZWdp bgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIyQoYWRkLWV4dGVybmFsLXJlcG9zCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBtb25vLTMuMC4xMi1leHRlcm5hbC1yZXBvLXNwZWNz KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIyRwcmVwYXJlLW1vbm8tc291cmNlKSkpKQor ICAgIChuYXRpdmUtaW5wdXRzIChtb2RpZnktaW5wdXRzIChwYWNrYWdlLW5hdGl2ZS1pbnB1dHMg bW9uby0yLjExLjQpCisgICAgICAgICAgICAgICAgICAgICAocmVwbGFjZSAibW9ubyIgbW9uby0y LjExLjQpKSkKKyAgICAobGljZW5zZSAobGlzdAorICAgICAgICAgICAgICA7OyBtb3N0IG9mIG1j cy90b29scywgbW9uby9tYW4sIG1vc3Qgb2YgbWNzL2NsYXNzLCB0ZXN0cyBieQorICAgICAgICAg ICAgICA7OyBkZWZhdWx0LCBtb25vL2VnbGliLCBtb25vL21ldGFkYXRhL3NnZW4qLAorICAgICAg ICAgICAgICA7OyBtb25vL2FyY2gvKi9YWFgtY29kZWdlbi5oCisgICAgICAgICAgICAgIDs7IG1j cy9tY3MsIG1jcy9nbWNzIChkdWFsLWxpY2Vuc2VkIEdQTCkKKyAgICAgICAgICAgICAgOzsgc2Ft cGxlcworICAgICAgICAgICAgICBsaWNlbnNlOngxMQorICAgICAgICAgICAgICA7OyBtY3MvbWNz LCBtY3MvZ21jcyAoZHVhbC1saWNlbnNlZCBYMTEpCisgICAgICAgICAgICAgIDs7IHNvbWUgb2Yg bWNzL3Rvb2xzCisgICAgICAgICAgICAgIGxpY2Vuc2U6Z3BsMSsgOzsgbm90ZTogLi9tY3MvTElD RU5TRS5HUEwgc3BlY2lmaWVzIG5vIHZlcnNpb24KKyAgICAgICAgICAgICAgOzsgbW9uby9tb25v ICh0aGUgbW9ubyBWTSwgSSB0aGluayB0aGV5IG1lYW50IG1vbm8vbWluaSkKKyAgICAgICAgICAg ICAgOzsgbW9uby9zdXBwb3J0IChub3RlOiBkaXJlY3RvcnkgZG9lc24ndCBleGlzdCwgcHJvYmFi bHkgbWVhbnQKKyAgICAgICAgICAgICAgOzsgLi9zdXBwb3J0LCBidXQgdGhhdCBjb250YWlucyBh IGNvcHkgb2YgemxpYj8pCisgICAgICAgICAgICAgIGxpY2Vuc2U6bGdwbDIuMCsgOzsgbm90ZTog Li9tY3MvTElDRU5TRS5MR1BMIHNwZWNpZmllcyBubyB2ZXJzaW9uCisgICAgICAgICAgICAgIDs7 IG1jcy9qYXkKKyAgICAgICAgICAgICAgbGljZW5zZTpic2QtNAorICAgICAgICAgICAgICA7OyBt Y3MvY2xhc3MvU3lzdGVtLkNvcmUvU3lzdGVtL1RpbWVab25lSW5mby5BbmRyb2lkLmNzCisgICAg ICAgICAgICAgIGxpY2Vuc2U6YXNsMi4wCisgICAgICAgICAgICAgIDs7IC4vc3VwcG9ydCwgY29u dGFpbnMgYSBjb3B5IG9mIHpsaWIKKyAgICAgICAgICAgICAgbGljZW5zZTp6bGliKSkpKQotLSAK Mi40NS4yCgo= --b1=_sUWWoGLuiCwxqVBZd1XkAit8Hrc2P4iMkhdKhObgTww Content-Type: text/x-patch; name=v2-0010-gnu-Add-mono-3.12.1.patch Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=v2-0010-gnu-Add-mono-3.12.1.patch RnJvbSBlNmYyNTVjOWUxMTk5YTY5ZWM3ODBlZjI4ZTk4N2RiODhkMTE3MzIwIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiB1bm11c2ggPHVubXVzaEBoYXNoYmFuZy5zaD4KRGF0ZTogVHVl LCAyNiBOb3YgMjAyNCAxMzoxNDozNQpTdWJqZWN0OiBbUEFUQ0ggdjIgMTAvMjFdIGdudTogQWRk IG1vbm8tMy4xMi4xLgoKKiBnbnUvcGFja2FnZXMvZG90bmV0LnNjbQogIChtb25vLTMuMTIuMS1l eHRlcm5hbC1yZXBvLXNwZWNzLCBtb25vLTMuMTIuMSk6IE5ldyB2YXJpYWJsZXMuCgotLS0KIGdu dS9wYWNrYWdlcy9kb3RuZXQuc2NtIHwgNTIgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysKIDEgZmlsZSBjaGFuZ2VkLCA1MiBpbnNlcnRpb25zKCspCgpkaWZmIC0tZ2l0 IGEvZ251L3BhY2thZ2VzL2RvdG5ldC5zY20gYi9nbnUvcGFja2FnZXMvZG90bmV0LnNjbQppbmRl eCAxZGQ4MjcwM2I5MS4uNTM3NWVjNDEyZTMgMTAwNjQ0Ci0tLSBhL2dudS9wYWNrYWdlcy9kb3Ru ZXQuc2NtCisrKyBiL2dudS9wYWNrYWdlcy9kb3RuZXQuc2NtCkBAIC03MDMsMyArNzAzLDU1IEBA IChkZWZpbmUtcHVibGljIG1vbm8tMy4wCiAgICAgICAgICAgICAgIGxpY2Vuc2U6YXNsMi4wCiAg ICAgICAgICAgICAgIDs7IC4vc3VwcG9ydCwgY29udGFpbnMgYSBjb3B5IG9mIHpsaWIKICAgICAg ICAgICAgICAgbGljZW5zZTp6bGliKSkpKQorCisoZGVmaW5lIG1vbm8tMy4xMi4xLWV4dGVybmFs LXJlcG8tc3BlY3MKKyAgOzsgZm9ybWF0OiAoe3JlcG9uYW1lIE9SIChyZXBvbmFtZSBkaXItbmFt ZSl9IGNvbW1pdCBzaGEyNTYpIC4uLgorICAnKCgiYXNwbmV0d2Vic3RhY2siICAgICAgICAgICAg ICAgImU3N2IxMmU2Y2M1ZWQyNjBhOTg0NDdmNjA5ZTg4NzMzN2U0NGUyOTkiCisgICAgICIwcmtz MzQ0cXI0Zm1wM2ZzMTI2NGQycWttbTM0OG04ZDFramQ3ejRsOTRpaWlyd24xZnExIikKKyAgICAo ImNlY2lsIiAgICAgICAgICAgICAgICAgICAgICAgICIzM2Q1MGI4NzRmZDUyNzExOGJjMzYxZDgz ZGUzZDQ5NGU4YmI1NWUxIgorICAgICAiMXA0aGwxNzk2aWIyNnlreWY1c25sNmNqMGx4MHY3bWpo MHhxaGp3NnFkaDc1M25zanloYiIpCisgICAgKCJlbnRpdHlmcmFtZXdvcmsiICAgICAgICAgICAg ICAiYTVmYWRkZWNhMmJlZTA4NjM2ZjFiN2IzYWY4Mzg5YmQ0MTE5ZjRjZCIKKyAgICAgIjBiMDVw emY2cXdkZDkycGJ6eW0zMm5mbXc4cnEzNjgyMHZkemFrcTFreWtmbWRkanI5YTciKQorICAgICgi aWtkYXNtIiAgICAgICAgICAgICAgICAgICAgICAgIjdkZWQ0ZGVjYjljMzk0NDZiZTYzNGQ0MmE1 NzVmZGE5YmMzZDk0NWMiCisgICAgICIwZjNtYmZpenhtdnI1bmpqMTIzdzB3bjdzejg1djVxMm16 d2lqanFsOHcxMDk1aTA5MTZsIikKKyAgICAoKCJpa3ZtLWZvcmsiICJpa3ZtIikgICAgICAgICAg ICIyMjUzNGRlMjA5OGFjYmNmMjA4ZjZiMDY4MzZkMTIyZGFiNzk5ZTRiIgorICAgICAiMWl2eXd5 NXNjNTk0c2wzYnM5eHJrbmExZGJoa3A3djFtdjc5bjk2eWRncTZ6Y3MwNjk4bCIpCisgICAgKCJM dWNlbmUuTmV0IiAgICAgICAgICAgICAgICAgICAiODhmYjY3YjA3NjIxZGZlZDA1NGQ4ZDc1ZmQ1 MDY3MmZiMjYzNDlkZiIKKyAgICAgIjFyZnhxZno3aGtwOXJnNWFudnhsdjZmbmEweGkwYm52MXk4 cWJoZjh4NDhsMDh5amIzOGsiKQorICAgICgiTmV3dG9uc29mdC5Kc29uIiAgICAgICAgICAgICAg IjQ3MWMzZTA4MDNhOWY0MGEwYWNjOGFlY2ViMzFkZTZmZjkzYTUyYzQiCisgICAgICIwZGduZ2Q1 aHFrNnlobGc0MGthYm42cWRua25tMzJ6Y3g5cTZibTJ3MzFjc25zazU5NzhzIikKKyAgICAoInJ4 IiAgICAgICAgICAgICAgICAgICAgICAgICAgICIwMGMxYWFkZjE0OTMzNGM2OTRkMmE1MDk2OTgz YTg0Y2Y0NjIyMWI4IgorICAgICAiMG5kYW0wcXJua2I0Z2oyMWxhcHFnY3kwbXF3N3MxOHZpc3dz anlqeWFhYTRmZ3F3OGttcSIpKSkKKworKGRlZmluZS1wdWJsaWMgbW9uby0zLjEyLjEKKyAgKHBh Y2thZ2UKKyAgICAoaW5oZXJpdCBtb25vLTMuMCkKKyAgICAodmVyc2lvbiAiMy4xMi4xIikKKyAg ICAobmFtZSAibW9ubyIpCisgICAgKHNvdXJjZSAob3JpZ2luCisgICAgICAgICAgICAgIChtZXRo b2QgZ2l0LWZldGNoKQorICAgICAgICAgICAgICAodXJpCisgICAgICAgICAgICAgICAoZ2l0LXJl ZmVyZW5jZQorICAgICAgICAgICAgICAgICh1cmwgImh0dHBzOi8vZ2l0bGFiLndpbmVocS5vcmcv bW9uby9tb25vLmdpdCIpCisgICAgICAgICAgICAgICAgKGNvbW1pdCAoc3RyaW5nLWFwcGVuZCAi bW9uby0iICIzLjEyLjEiKSkpKQorICAgICAgICAgICAgICAoZmlsZS1uYW1lIChnaXQtZmlsZS1u YW1lIG5hbWUgdmVyc2lvbikpCisgICAgICAgICAgICAgIChzaGEyNTYKKyAgICAgICAgICAgICAg IChiYXNlMzIKKyAgICAgICAgICAgICAgICAiMDFzeHJuZmNoNjFrOHY3YXY3Y2NibXkzdjM3a3k4 eXA4NDYwajZ5Y25ieWZhMzMwNXkwZiIpKQorICAgICAgICAgICAgICAobW9kdWxlcyAnKChndWl4 IGJ1aWxkIHV0aWxzKQorICAgICAgICAgICAgICAgICAgICAgICAgIChpY2UtOSBzdHJpbmctZnVu KSkpCisgICAgICAgICAgICAgIChzbmlwcGV0ICN+KGJlZ2luCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAjJChhZGQtZXh0ZXJuYWwtcmVwb3MKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIG1vbm8tMy4xMi4xLWV4dGVybmFsLXJlcG8tc3BlY3MpCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAjJHByZXBhcmUtbW9uby1zb3VyY2UpKSkpCisgICAgKG5hdGl2ZS1pbnB1dHMgKG1v ZGlmeS1pbnB1dHMgKHBhY2thZ2UtbmF0aXZlLWlucHV0cyBtb25vLTMuMCkKKyAgICAgICAgICAg ICAgICAgICAgIChyZXBsYWNlICJtb25vIiBtb25vLTMuMCkpKQorICAgIChhcmd1bWVudHMKKyAg ICAgKHN1YnN0aXR1dGUta2V5d29yZC1hcmd1bWVudHMgKHBhY2thZ2UtYXJndW1lbnRzIG1vbm8t My4wKQorICAgICAgICgoIzpwaGFzZXMgcGhhc2VzICN+JXN0YW5kYXJkLXBoYXNlcykKKyAgICAg ICAgI34obW9kaWZ5LXBoYXNlcyAjJHBoYXNlcworICAgICAgICAgICAgKGFkZC1hZnRlciAndW5w YWNrICdzZXQtVFoKKyAgICAgICAgICAgICAgKGxhbWJkYSBfCisgICAgICAgICAgICAgICAgOzsg Zm9yIHNvbWUgcmVhc29uIGEgZGVmYXVsdCBpcyBvbmx5IHVzZWQgaWYgdGhpcyBpcyBlbXB0eSwg bm90CisgICAgICAgICAgICAgICAgOzsgaWYgaXQgaXMgdW5zZXQuCisgICAgICAgICAgICAgICAg KHNldGVudiAiVFoiICIiKSkpKSkpKSkpCi0tIAoyLjQ1LjIKCg== --b1=_sUWWoGLuiCwxqVBZd1XkAit8Hrc2P4iMkhdKhObgTww Content-Type: text/x-patch; name=v2-0008-gnu-Add-mono-2.11.4.patch Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=v2-0008-gnu-Add-mono-2.11.4.patch RnJvbSA0Nzk2NGY3ZDZkMWFjNDVmYzMwMWIxNWI3ZWViZmQzMzgxOTZhM2ZhIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiB1bm11c2ggPHVubXVzaEBoYXNoYmFuZy5zaD4KRGF0ZTogVHVl LCAyNiBOb3YgMjAyNCAxMzoxMjoxMQpTdWJqZWN0OiBbUEFUQ0ggdjIgMDgvMjFdIGdudTogQWRk IG1vbm8tMi4xMS40LgoKKiBnbnUvcGFja2FnZXMvZG90bmV0LnNjbQogIChtb25vLTIuMTEuNC1l eHRlcm5hbC1yZXBvLXNwZWNzLCBtb25vLTIuMTEuNCk6IE5ldyB2YXJpYWJsZXMuCiAgKGFkZC1l eHRlcm5hbC1yZXBvcyk6IE5ldyBwcm9jZWR1cmUuCiogZ251L3BhY2thZ2VzL3BhdGNoZXMvbW9u by0yLjExLjQtZml4ZXMucGF0Y2g6IE5ldyBwYXRjaC4KKiBnbnUvbG9jYWwubWsgKGRpc3RfcGF0 Y2hfREFUQSk6IFJlZ2lzdGVyIGl0LgoKLS0tCiBnbnUvbG9jYWwubWsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICB8ICAxICsKIGdudS9wYWNrYWdlcy9kb3RuZXQuc2NtICAgICAgICAg ICAgICAgICAgICAgIHwgOTUgKysrKysrKysrKysrKysrKysrKysKIGdudS9wYWNrYWdlcy9wYXRj aGVzL21vbm8tMi4xMS40LWZpeGVzLnBhdGNoIHwgMzYgKysrKysrKysKIDMgZmlsZXMgY2hhbmdl ZCwgMTMyIGluc2VydGlvbnMoKykKIGNyZWF0ZSBtb2RlIDEwMDY0NCBnbnUvcGFja2FnZXMvcGF0 Y2hlcy9tb25vLTIuMTEuNC1maXhlcy5wYXRjaAoKZGlmZiAtLWdpdCBhL2dudS9sb2NhbC5tayBi L2dudS9sb2NhbC5tawppbmRleCA5OWUxMDZkZjhmYy4uOGFlYjQ1MzZmNTEgMTAwNjQ0Ci0tLSBh L2dudS9sb2NhbC5taworKysgYi9nbnUvbG9jYWwubWsKQEAgLTE4MjgsNiArMTgyOCw3IEBAIGRp c3RfcGF0Y2hfREFUQSA9CQkJCQkJXAogICAlRCUvcGFja2FnZXMvcGF0Y2hlcy9tb25vLTEuOS4x LWZpeGVzLnBhdGNoCQkJXAogICAlRCUvcGFja2FnZXMvcGF0Y2hlcy9tb25vLTIuNC4yLjMtZml4 ZXMucGF0Y2gJCQlcCiAgICVEJS9wYWNrYWdlcy9wYXRjaGVzL21vbm8tMi42LjQtZml4ZXMucGF0 Y2gJCQlcCisgICVEJS9wYWNrYWdlcy9wYXRjaGVzL21vbm8tMi4xMS40LWZpeGVzLnBhdGNoCQkJ XAogICAlRCUvcGFja2FnZXMvcGF0Y2hlcy9tb3NhaWNhdGNoZXItdW5idW5kbGUtaHRzbGliLnBh dGNoCVwKICAgJUQlL3BhY2thZ2VzL3BhdGNoZXMvbXJyZXNjdWUtc3VwcG9ydC1sb3ZlLTExLnBh dGNoCQlcCiAgICVEJS9wYWNrYWdlcy9wYXRjaGVzL210b29scy1tZm9ybWF0LXVuaW5pdGlhbGl6 ZWQucGF0Y2gJXApkaWZmIC0tZ2l0IGEvZ251L3BhY2thZ2VzL2RvdG5ldC5zY20gYi9nbnUvcGFj a2FnZXMvZG90bmV0LnNjbQppbmRleCA4MmJlZTU1YWE5MC4uZjk3NTY3ZGMyOWYgMTAwNjQ0Ci0t LSBhL2dudS9wYWNrYWdlcy9kb3RuZXQuc2NtCisrKyBiL2dudS9wYWNrYWdlcy9kb3RuZXQuc2Nt CkBAIC01NDUsMyArNTQ1LDk4IEBAIChkZWZpbmUtcHVibGljIG1vbm8tMi42LjQKICAgICAgICAg ICAgICAgIChzZWFyY2gtcGF0Y2hlcyAibW9uby0yLjYuNC1maXhlcy5wYXRjaCIpKSkpCiAgICAg KG5hdGl2ZS1pbnB1dHMgKG1vZGlmeS1pbnB1dHMgKHBhY2thZ2UtbmF0aXZlLWlucHV0cyBtb25v LTIuNC4yKQogICAgICAgICAgICAgICAgICAgICAgKHJlcGxhY2UgIm1vbm8iIG1vbm8tMi40LjIp KSkpKQorCis7OyBzdWJtb2R1bGUgY2hlY2tvdXRzIHVzZSBnaXQ6Ly8sIHdoaWNoIGlzbid0IHN1 cHBvcnRlZCBieSBnaXRodWIgYW55bW9yZSwgc28KKzs7IHdlIG5lZWQgdG8gbWFudWFsbHkgcHJv dmlkZSB0aGVtIGluc3RlYWQgb2YgYmVpbmcgYWJsZSB0byB1c2UgKHJlY3Vyc2l2ZT8KKzs7ICN0 KS4gIEFsc28gdHJ5IG5vdCB0byB0aGluayB0b28gaGFyZCBhYm91dCB0aGUgZmFjdCB0aGF0IHNv bWUgb2YgdGhlc2UKKzs7IHN1Ym1vZHVsZXMgaW4gbGF0ZXIgdmVyc2lvbnMgY29udGFpbiBiaW5h cnkgY29tcGlsZXIgYmxvYnMgd2hpY2ggbW9ubworOzsgbWFpbnRhaW5lcnMgcHJlc3VtYWJseSB1 c2VkIHdoZW4gY3JlYXRpbmcgdGhlIGJvb3RzdHJhcCBiaW5hcmllcyB0aGV5Cis7OyBwdWJsaXNo ZWQuICBBbGwgZmV0Y2hlZCBhbmQgdXBkYXRlZCBvdmVyIHVuYXV0aGVudGljYXRlZCBnaXQ6Ly8u CisKKyhkZWZpbmUgbW9uby0yLjExLjQtZXh0ZXJuYWwtcmVwby1zcGVjcworICA7OyBmb3JtYXQ6 ICh7cmVwb25hbWUgT1IgKHJlcG9uYW1lIGRpci1uYW1lKX0gY29tbWl0LWhhc2ggb3JpZ2luLXNo YTI1NikgLi4uCisgIDs7IGlmIHJlcG9uYW1lIHN0YXJ0cyB3aXRoIGh0dHBzOi8vIGl0IGlzIHRy ZWF0ZWQgYXMgdGhlIHJlcG9zaXRvcnkgdXJsLAorICA7OyBvdGhlcndpc2UgdGhlIG5hbWUgb2Yg YSByZXBvc2l0b3J5IHVuZGVyIGh0dHBzOi8vZ2l0aHViLmNvbS9tb25vLworICAnKCgiYXNwbmV0 d2Vic3RhY2siICAgICAgICAgICAgICAgIjE4MzZkZWZmNmEyNjgzYjhhNWI3ZGQ3OGYyYjU5MWEx MGI0NzU3M2UiCisgICAgICIwdnFxNDVpOGs2anlsbGphcnIwOWhxcWl3anM4d24wbGdqcmw2Yno3 MnZ4cXBwMGozNDRrIikKKyAgICAoImNlY2lsIiAgICAgICAgICAgICAgICAgICAgICAgICI1NGUw YTUwNDY0ZWRiYzI1NGIzOWVhM2M4ODVlZTkxYWRhNzMwNzA1IgorICAgICAiMDA3c3piZjVhMTRx ODM4Njk1bHdkcDdhcDZyd3p6M2t6bGxnamZuaWJ6bHFpcHczeDJ5ayIpCisgICAgKCJlbnRpdHlm cmFtZXdvcmsiICAgICAgICAgICAgICAiOWJhY2E1NjJlZTNhNzQ3YTQxODcwZjQ1ZTc0OWU0NDM2 YjZhY2EyNiIKKyAgICAgIjBsOGswNGJ5a2JyYms1cTJwejhoemg4eHk4eTRheXo3ajk3Zncwa3lr M2xyYWk4OXY1ZGEiKQorICAgICgiTmV3dG9uc29mdC5Kc29uIiAgICAgICAgICAgICAgIjQ3MWMz ZTA4MDNhOWY0MGEwYWNjOGFlY2ViMzFkZTZmZjkzYTUyYzQiCisgICAgICIwZGduZ2Q1aHFrNnlo bGc0MGthYm42cWRua25tMzJ6Y3g5cTZibTJ3MzFjc25zazU5NzhzIikpKQorCisoZGVmaW5lIChh ZGQtZXh0ZXJuYWwtcmVwb3Mgc3BlY3MpCisgIChkZWZpbmUgKHJlcG9uYW1lLT51cmwgcmVwb25h bWUpCisgICAgKGlmIChzdHJpbmctcHJlZml4PyAiaHR0cHM6Ly8iIHJlcG9uYW1lKQorICAgICAg ICByZXBvbmFtZQorICAgICAgICAoc3RyaW5nLWFwcGVuZCAiaHR0cHM6Ly9naXRodWIuY29tL21v bm8vIiByZXBvbmFtZSkpKQorCisgIChkZWZpbmUqIChleHRlcm5hbC1yZXBvLWdleHAgcmVwb25h bWUgY29tbWl0IGhhc2gKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjOmtleSByZWN1 cnNpdmU/IChwYXRjaGVzICcoKSkpCisgICAgKGxldCAoKHNob3J0LWNvbW1pdCAoc3RyaW5nLXRh a2UgY29tbWl0IDYpKQorICAgICAgICAgIChyZXBvbmFtZSAoaWYgKHBhaXI/IHJlcG9uYW1lKSAo Y2FyIHJlcG9uYW1lKQorICAgICAgICAgICAgICAgICAgICAgICAgcmVwb25hbWUpKQorICAgICAg ICAgIChkaXItbmFtZSAoaWYgKHBhaXI/IHJlcG9uYW1lKSAoY2FkciByZXBvbmFtZSkKKyAgICAg ICAgICAgICAgICAgICAgICAgIHJlcG9uYW1lKSkpCisgICAgICAjfihjb3B5LXJlY3Vyc2l2ZWx5 ICMrKG9yaWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1ldGhvZCBnaXQtZmV0 Y2gpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodXJpIChnaXQtcmVmZXJlbmNlCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodXJsIChyZXBvbmFtZS0+dXJsIHJl cG9uYW1lKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb21taXQgY29t bWl0KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHJlY3Vyc2l2ZT8gcmVj dXJzaXZlPykpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGZpbGUtbmFtZQorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIChnaXQtZmlsZS1uYW1lIGRpci1uYW1lCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvcnQtY29tbWl0KSkK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzaGEyNTYgKGJhc2UzMiBoYXNoKSkKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwYXRjaGVzIChtYXAgc2VhcmNoLXBhdGNoIHBh dGNoZXMpKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIyQoc3RyaW5nLWFwcGVuZCAiLi9l eHRlcm5hbC8iIGRpci1uYW1lKSkpKQorCisgIChkZWZpbmUgKHNwZWMtPmdleHAgc3BlYykKKyAg ICAoYXBwbHkgZXh0ZXJuYWwtcmVwby1nZXhwIHNwZWMpKQorCisgICN+KGJlZ2luCisgICAgICAj K0AobWFwIHNwZWMtPmdleHAgc3BlY3MpKSkKKworKGRlZmluZS1wdWJsaWMgbW9uby0yLjExLjQK KyAgKHBhY2thZ2UKKyAgICAoaW5oZXJpdCBtb25vLTIuNi40KQorICAgICh2ZXJzaW9uICIyLjEx LjQiKQorICAgIChuYW1lICJtb25vIikKKyAgICAoc291cmNlIChvcmlnaW4KKyAgICAgICAgICAg ICAgKG1ldGhvZCBnaXQtZmV0Y2gpCisgICAgICAgICAgICAgICh1cmkKKyAgICAgICAgICAgICAg IChnaXQtcmVmZXJlbmNlCisgICAgICAgICAgICAgICAgKHVybCAiaHR0cHM6Ly9naXRsYWIud2lu ZWhxLm9yZy9tb25vL21vbm8uZ2l0IikKKyAgICAgICAgICAgICAgICAoY29tbWl0IChzdHJpbmct YXBwZW5kICJtb25vLSIgIjIuMTEuNCIpKSkpCisgICAgICAgICAgICAgIChmaWxlLW5hbWUgKGdp dC1maWxlLW5hbWUgbmFtZSB2ZXJzaW9uKSkKKyAgICAgICAgICAgICAgKHNoYTI1NgorICAgICAg ICAgICAgICAgKGJhc2UzMgorICAgICAgICAgICAgICAgICIweTJiaWZpMmF2YmptZnA4MGhqZ2Ey ZHlxaXA0YjQ2emt2eDZ5ZnI5cGEyaGhtOTQwcnB4IikpCisgICAgICAgICAgICAgIChtb2R1bGVz ICcoKGd1aXggYnVpbGQgdXRpbHMpCisgICAgICAgICAgICAgICAgICAgICAgICAgKGljZS05IHN0 cmluZy1mdW4pKSkKKyAgICAgICAgICAgICAgKHNuaXBwZXQgI34oYmVnaW4KKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICMkKGFkZC1leHRlcm5hbC1yZXBvcworICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgbW9uby0yLjExLjQtZXh0ZXJuYWwtcmVwby1zcGVjcykKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICMkcHJlcGFyZS1tb25vLXNvdXJjZSkpCisgICAgICAgICAgICAgIChw YXRjaGVzCisgICAgICAgICAgICAgICAoc2VhcmNoLXBhdGNoZXMgIm1vbm8tMi4xMS40LWZpeGVz LnBhdGNoIikpKSkKKyAgICAoYnVpbGQtc3lzdGVtIGdudS1idWlsZC1zeXN0ZW0pCisgICAgKG5h dGl2ZS1pbnB1dHMgKG1vZGlmeS1pbnB1dHMgKHBhY2thZ2UtbmF0aXZlLWlucHV0cyBtb25vLTIu Ni40KQorICAgICAgICAgICAgICAgICAgICAgKHJlcGxhY2UgIm1vbm8iIG1vbm8tMi42LjQpKSkK KyAgICAobGljZW5zZSAobGlzdAorICAgICAgICAgICAgICA7OyBtb3N0IG9mIG1jcy90b29scywg bW9uby9tYW4sIG1vc3Qgb2YgbWNzL2NsYXNzLCB0ZXN0cyBieQorICAgICAgICAgICAgICA7OyBk ZWZhdWx0LCBtb25vL2VnbGliLCBtb25vL21ldGFkYXRhL3NnZW4qLAorICAgICAgICAgICAgICA7 OyBtb25vL2FyY2gvKi9YWFgtY29kZWdlbi5oCisgICAgICAgICAgICAgIDs7IG1jcy9tY3MsIG1j cy9nbWNzIChkdWFsLWxpY2Vuc2VkIEdQTCkKKyAgICAgICAgICAgICAgOzsgc2FtcGxlcworICAg ICAgICAgICAgICBsaWNlbnNlOngxMQorICAgICAgICAgICAgICA7OyBtY3MvbWNzLCBtY3MvZ21j cyAoZHVhbC1saWNlbnNlZCBYMTEpCisgICAgICAgICAgICAgIDs7IHNvbWUgb2YgbWNzL3Rvb2xz CisgICAgICAgICAgICAgIGxpY2Vuc2U6Z3BsMSsgOzsgbm90ZTogLi9tY3MvTElDRU5TRS5HUEwg c3BlY2lmaWVzIG5vIHZlcnNpb24KKyAgICAgICAgICAgICAgOzsgbW9uby9tb25vICh0aGUgbW9u byBWTSwgSSB0aGluayB0aGV5IG1lYW50IG1vbm8vbWluaSkKKyAgICAgICAgICAgICAgbGljZW5z ZTpsZ3BsMi4wKyA7OyBub3RlOiAuL21jcy9MSUNFTlNFLkxHUEwgc3BlY2lmaWVzIG5vIHZlcnNp b24KKyAgICAgICAgICAgICAgOzsgbWNzL2pheQorICAgICAgICAgICAgICBsaWNlbnNlOmJzZC00 CisgICAgICAgICAgICAgIDs7IG1jcy9jbGFzcy9TeXN0ZW0uQ29yZS9TeXN0ZW0vVGltZVpvbmVJ bmZvLkFuZHJvaWQuY3MKKyAgICAgICAgICAgICAgbGljZW5zZTphc2wyLjApKSkpCmRpZmYgLS1n aXQgYS9nbnUvcGFja2FnZXMvcGF0Y2hlcy9tb25vLTIuMTEuNC1maXhlcy5wYXRjaCBiL2dudS9w YWNrYWdlcy9wYXRjaGVzL21vbm8tMi4xMS40LWZpeGVzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4wMmEwNWY3OTc3YQotLS0gL2Rldi9udWxsCisrKyBiL2du dS9wYWNrYWdlcy9wYXRjaGVzL21vbm8tMi4xMS40LWZpeGVzLnBhdGNoCkBAIC0wLDAgKzEsMzYg QEAKK2RpZmYgLS1naXQgYS9jb25maWd1cmUuaW4gYi9jb25maWd1cmUuaW4KK2luZGV4IDM4Y2M2 ZGMyOTI1Li40YzYwOGViMTUwZiAxMDA2NDQKKy0tLSBhL2NvbmZpZ3VyZS5pbgorKysrIGIvY29u ZmlndXJlLmluCitAQCAtNDcwLDcgKzQ3MCw3IEBAIEFDX0NIRUNLX0hFQURFUlMod2NoYXIuaCkK KyBBQ19DSEVDS19IRUFERVJTKGllZWVmcC5oKQorIEFDX01TR19DSEVDS0lORyhmb3IgaXNpbmYp CisgQUNfVFJZX0xJTksoWyNpbmNsdWRlIDxtYXRoLmg+XSwgWworLQlpbnQgZiA9IGlzaW5mICgx KTsKKysJaW50IGYgPSBpc2luZiAoMS4wKTsKKyBdLCBbCisgCUFDX01TR19SRVNVTFQoeWVzKQor IAlBQ19ERUZJTkUoSEFWRV9JU0lORiwgMSwgW2lzaW5mIGF2YWlsYWJsZV0pCitkaWZmIC0tZ2l0 IGEvbW9uby9pby1sYXllci9wcm9jZXNzZXMuYyBiL21vbm8vaW8tbGF5ZXIvcHJvY2Vzc2VzLmMK K2luZGV4IDU4NmI1NDcxNWRiLi5kMjc4NTdhYTA5MiAxMDA2NDQKKy0tLSBhL21vbm8vaW8tbGF5 ZXIvcHJvY2Vzc2VzLmMKKysrKyBiL21vbm8vaW8tbGF5ZXIvcHJvY2Vzc2VzLmMKK0BAIC0xOCw2 ICsxOCw3IEBACisgI2luY2x1ZGUgPGVycm5vLmg+CisgI2luY2x1ZGUgPHN5cy90eXBlcy5oPgor ICNpbmNsdWRlIDxzeXMvc3RhdC5oPgorKyNpbmNsdWRlIDxzeXMvc3lzbWFjcm9zLmg+CisgI2lu Y2x1ZGUgPHVuaXN0ZC5oPgorICNpbmNsdWRlIDxzaWduYWwuaD4KKyAjaW5jbHVkZSA8c3lzL3dh aXQuaD4KK2RpZmYgLS1naXQgYS9ydW50aW1lL01ha2VmaWxlLmFtIGIvcnVudGltZS9NYWtlZmls ZS5hbQoraW5kZXggNjk1N2EyODdkMzguLjJkMDcxMjMwYTg0IDEwMDY0NAorLS0tIGEvcnVudGlt ZS9NYWtlZmlsZS5hbQorKysrIGIvcnVudGltZS9NYWtlZmlsZS5hbQorQEAgLTEsNiArMSwzIEBA CistIyBoYWNrIHRvIHByZXZlbnQgJ2NoZWNrJyBmcm9tIGRlcGVuZGluZyBvbiAnYWxsJworLUFV VE9NQUtFX09QVElPTlMgPSBjeWdudXMKKy0KKyB0bXBpbnN0ID0gX3RtcGluc3QKKyAKKyBub2lu c3RfU0NSSVBUUyA9IG1vbm8td3JhcHBlciBtb25vZGlzLXdyYXBwZXIKLS0gCjIuNDUuMgoK --b1=_sUWWoGLuiCwxqVBZd1XkAit8Hrc2P4iMkhdKhObgTww-- From debbugs-submit-bounces@debbugs.gnu.org Fri Dec 20 02:56:07 2024 Received: (at 74609) by debbugs.gnu.org; 20 Dec 2024 07:56:07 +0000 Received: from localhost ([127.0.0.1]:41509 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1tOXrj-0001X8-Dz for submit@debbugs.gnu.org; Fri, 20 Dec 2024 02:56:07 -0500 Received: from mail-4325.protonmail.ch ([185.70.43.25]:13849) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1tOVKt-00025h-Mg for 74609@debbugs.gnu.org; Fri, 20 Dec 2024 00:14:04 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=proton.me; s=3qpem6dpbjgsrjbs7k7i6vwsfe.protonmail; t=1734671631; x=1734930831; bh=x+DlNk1+plEXGLFdlEXRZFEq5zAypsQVJ0CjzVeC0j8=; h=Date:To:From:Subject:Message-ID:Feedback-ID:From:To:Cc:Date: Subject:Reply-To:Feedback-ID:Message-ID:BIMI-Selector: List-Unsubscribe:List-Unsubscribe-Post; b=TAYogZAoFUwpjqXFKWXpZy88+wjMGBxCYjj4hoV7npG0hO/eAxmjszvmjIb7pwrsg Or4Lflvj3qva9kAhbSdVpxRT9t8CkhQfZpYFZG2cbYeelO3YRoOxsxDwv2eQ6ZbBnZ tGWmQhUObWGn4J1FT/wihNika2L5uZ4KFvPO55BWr+kTaJD/OwkU596ZDsYZfef4k4 BDG7oo1K4JAyApNNqW7lPp57TeFD5hjDivGtod+4k6MzaIzwUZtMVwitIAP3RH0DGH 2Pde+iljxZ2Vb3cC51XrOPVGhJ04G0ankcXdoN3kMEJg9TcGJ6GvgRsDazbbdXUv64 t/V15AcDzd2nQ== Date: Fri, 20 Dec 2024 05:13:45 +0000 To: "74609@debbugs.gnu.org" <74609@debbugs.gnu.org> From: unmush Subject: V2 series part 2 Message-ID: Feedback-ID: 126986417:user:proton X-Pm-Message-ID: e4aca61a1c97e973ecd832714068e5ce39163ddb MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="b1=_tnCtFHx6yIKuYDXqbApeYGjbdIBbQ4owcmVz3FJkVmc" X-Debbugs-Envelope-To: 74609 X-Mailman-Approved-At: Fri, 20 Dec 2024 02:56:06 -0500 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" --b1=_tnCtFHx6yIKuYDXqbApeYGjbdIBbQ4owcmVz3FJkVmc Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Here are the remaining patches --b1=_tnCtFHx6yIKuYDXqbApeYGjbdIBbQ4owcmVz3FJkVmc Content-Type: text/x-patch; name=v2-0011-gnu-Add-mono-4.9.0.patch Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=v2-0011-gnu-Add-mono-4.9.0.patch RnJvbSBhZjExM2Q2Yzk4ZTAyODU2NzgzZTliMmI2MWI5NjM3N2FkYzNmNDk1IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiB1bm11c2ggPHVubXVzaEBoYXNoYmFuZy5zaD4KRGF0ZTogVHVl LCAyNiBOb3YgMjAyNCAxMzoyNTowMApTdWJqZWN0OiBbUEFUQ0ggdjIgMTEvMjFdIGdudTogQWRk IG1vbm8tNC45LjAuCgoqIGdudS9wYWNrYWdlcy9kb3RuZXQuc2NtIChtb25vLTQuOS4wKTogTmV3 IHZhcmlhYmxlLgoqIGdudS9wYWNrYWdlcy9wYXRjaGVzL21vbm8tNC45LjAtZml4LXJ1bnRpbWVt ZXRhZGF0YXZlcnNpb24ucGF0Y2g6IE5ldyBwYXRjaC4KKiBnbnUvbG9jYWwubWsgKGRpc3RfcGF0 Y2hfREFUQSk6IHJlZ2lzdGVyIGl0LgoKLS0tCiBnbnUvbG9jYWwubWsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgfCAgIDEgKwogZ251L3BhY2thZ2VzL2RvdG5ldC5zY20gICAgICAg ICAgICAgICAgICAgICAgIHwgMTI5ICsrKysrKysrKysrKysrKysrKwogLi4ub25vLTQuOS4wLWZp eC1ydW50aW1lbWV0YWRhdGF2ZXJzaW9uLnBhdGNoIHwgIDEzICsrCiAzIGZpbGVzIGNoYW5nZWQs IDE0MyBpbnNlcnRpb25zKCspCiBjcmVhdGUgbW9kZSAxMDA2NDQgZ251L3BhY2thZ2VzL3BhdGNo ZXMvbW9uby00LjkuMC1maXgtcnVudGltZW1ldGFkYXRhdmVyc2lvbi5wYXRjaAoKZGlmZiAtLWdp dCBhL2dudS9sb2NhbC5tayBiL2dudS9sb2NhbC5tawppbmRleCA4YWViNDUzNmY1MS4uNjU3OTlh YzVlMTggMTAwNjQ0Ci0tLSBhL2dudS9sb2NhbC5taworKysgYi9nbnUvbG9jYWwubWsKQEAgLTE4 MjksNiArMTgyOSw3IEBAIGRpc3RfcGF0Y2hfREFUQSA9CQkJCQkJXAogICAlRCUvcGFja2FnZXMv cGF0Y2hlcy9tb25vLTIuNC4yLjMtZml4ZXMucGF0Y2gJCQlcCiAgICVEJS9wYWNrYWdlcy9wYXRj aGVzL21vbm8tMi42LjQtZml4ZXMucGF0Y2gJCQlcCiAgICVEJS9wYWNrYWdlcy9wYXRjaGVzL21v bm8tMi4xMS40LWZpeGVzLnBhdGNoCQkJXAorICAlRCUvcGFja2FnZXMvcGF0Y2hlcy9tb25vLTQu OS4wLWZpeC1ydW50aW1lbWV0YWRhdGF2ZXJzaW9uLnBhdGNoCQlcCiAgICVEJS9wYWNrYWdlcy9w YXRjaGVzL21vc2FpY2F0Y2hlci11bmJ1bmRsZS1odHNsaWIucGF0Y2gJXAogICAlRCUvcGFja2Fn ZXMvcGF0Y2hlcy9tcnJlc2N1ZS1zdXBwb3J0LWxvdmUtMTEucGF0Y2gJCVwKICAgJUQlL3BhY2th Z2VzL3BhdGNoZXMvbXRvb2xzLW1mb3JtYXQtdW5pbml0aWFsaXplZC5wYXRjaAlcCmRpZmYgLS1n aXQgYS9nbnUvcGFja2FnZXMvZG90bmV0LnNjbSBiL2dudS9wYWNrYWdlcy9kb3RuZXQuc2NtCmlu ZGV4IDUzNzVlYzQxMmUzLi4wMzNiOWQ5ZWM5ZiAxMDA2NDQKLS0tIGEvZ251L3BhY2thZ2VzL2Rv dG5ldC5zY20KKysrIGIvZ251L3BhY2thZ2VzL2RvdG5ldC5zY20KQEAgLTc1NSwzICs3NTUsMTMy IEBAIChkZWZpbmUtcHVibGljIG1vbm8tMy4xMi4xCiAgICAgICAgICAgICAgICAgOzsgZm9yIHNv bWUgcmVhc29uIGEgZGVmYXVsdCBpcyBvbmx5IHVzZWQgaWYgdGhpcyBpcyBlbXB0eSwgbm90CiAg ICAgICAgICAgICAgICAgOzsgaWYgaXQgaXMgdW5zZXQuCiAgICAgICAgICAgICAgICAgKHNldGVu diAiVFoiICIiKSkpKSkpKSkpCisKKyhkZWZpbmUgbW9uby00LjkuMC1leHRlcm5hbC1yZXBvLXNw ZWNzCisgIDs7IGZvcm1hdDogKHtyZXBvbmFtZSBPUiAocmVwb25hbWUgZGlyLW5hbWUpfSBjb21t aXQgc2hhMjU2KSAuLi4KKyAgJygoImFzcG5ldHdlYnN0YWNrIiAgICAgICAgICAgICAgICJlNzdi MTJlNmNjNWVkMjYwYTk4NDQ3ZjYwOWU4ODczMzdlNDRlMjk5IgorICAgICAiMHJrczM0NHFyNGZt cDNmczEyNjRkMnFrbW0zNDhtOGQxa2pkN3o0bDk0aWlpcnduMWZxMSIpCisgICAgOzsgKCgicmVm ZXJlbmNlLWFzc2VtYmxpZXMiICJiaW5hcnktcmVmZXJlbmNlLWFzc2VtYmxpZXMiKQorICAgIDs7 ICAiNmM3NzE5NzMxOGZlODVkZmRkZjc1YTFiMzQ0YjliZjhkMDAwN2IwYiIKKyAgICA7OyAgIjEx aGJzOTUyc3JqbHNpeWluNzZ5MmxsbTVyZmprd2pjNjd5YTFpM3AwcHcxOTN6dzE0amsiKQorICAg IDs7IEFjY29yZGluZyB0byBnaXRodWIgZGVzY3JpcHRpb24gdGhpcyBpcyBhICJjdXN0b20iIGZv cmsgb2YgYm9yaW5nc3NsCisgICAgKCJib3Jpbmdzc2wiICAgICAgICAgICAgICAgICAgICAiYzA2 YWM2YjMzZDNlNzQ0MmFkODc4NDg4YjlkMTEwMDEyN2VmZjk5OCIKKyAgICAgIjE4N3pwaTFydmg5 aTZqZmNjd3pxcTMzN3J4eGkxcmdueTZtanE3OXIwOGRscmgwbHlkemMiKQorICAgICgiYnVpbGR0 b29scyIgICAgICAgICAgICAgICAgICAgIjliNmVlODY4NmJlNTVhOTgzZDg4NjkzODE2NWI2MjA2 Y2RhNTA3NzIiCisgICAgICIwc2p3M3N3YXZjbWlqeW5tYXhoNjQ3cXBranNiZ2loZHI4bGhreXpm OGRzcHJobHE0ZnhkIikKKyAgICAoImNlY2lsIiAgICAgICAgICAgICAgICAgICAgICAgICIyYjM5 ODU2ZTgwZDg1MTNmNzBiYzMyNDFlZDA1MzI1YjBkZTY3OWFlIgorICAgICAiMHZ2YXgzMnI2Ym5o dnJjdmlzODNnZHJkcWNneXhiNzA0aHoyOGc5cTB3bmF5NGtucXhkbSIpCisgICAgKCgiY2VjaWwi ICJjZWNpbC1sZWdhY3kiKSAgICAgICAiMzNkNTBiODc0ZmQ1MjcxMThiYzM2MWQ4M2RlM2Q0OTRl OGJiNTVlMSIKKyAgICAgIjFwNGhsMTc5NmliMjZ5a3lmNXNubDZjajBseDB2N21qaDB4cWhqdzZx ZGg3NTNuc2p5aGIiKQorICAgIDs7ICgiZGViaWFuLXNuYXBzaG90IiAgICAgICAgICAgICAgIjkz NDJmOGYwNTJmODFkZWFiYTc4OWYwMzBkYjIzYTg4YjQzNjk3MjQiCisgICAgOzsgICIiKQorICAg ICgiaWtkYXNtIiAgICAgICAgICAgICAgICAgICAgICAgImU0ZGVhYmY2MWMxMTk5OWYyMDBkY2Vh NmY2ZDZiNDI0NzRjYzIxMzEiCisgICAgICIxZnJiZjcweTduN2w3MmozOTNhdmRpd2s2MTUzY3Zm d3dwaWdoa2YybTQ2Y2xxbXE0aGFuIikKKyAgICAoKCJpa3ZtLWZvcmsiICJpa3ZtIikgICAgICAg ICAgICIzNjc4NjRlZjgxMDg1OWFlM2NlNjUyODY0MjMzYjM1ZjJkZDVmZGJlIgorICAgICAiMGln OTlrYm1hNHMwbXpiMTNuenNrMXZtMjAweWdmcjExcTZtemdoNmpqNDZzMmZjMzVweCIpCisgICAg KCJMdWNlbmUuTmV0LkxpZ2h0IiAgICAgICAgICAgICAiODU5NzhiN2ViOTQ3MzhmNTE2ODI0MzQx MjEzZDVlOTQwNjBmNTI4NCIKKyAgICAgIjBkMTE4aTUybTNhMHZmamhmY2k4MWEya2M0cXZuajIz Z3MwMmhydmRyZnBkMXE5MmZ5aWkiKQorICAgICgiTmV3dG9uc29mdC5Kc29uIiAgICAgICAgICAg ICAgIjQ3MWMzZTA4MDNhOWY0MGEwYWNjOGFlY2ViMzFkZTZmZjkzYTUyYzQiCisgICAgICIwZGdu Z2Q1aHFrNnlobGc0MGthYm42cWRua25tMzJ6Y3g5cTZibTJ3MzFjc25zazU5NzhzIikKKyAgICAo Im51Z2V0LWJ1aWxkdGFza3MiICAgICAgICAgICAgICIwNGJkYWI1NWQ4ZGU5ZWRjZjYyODY5NGNm ZDIwMDE1NjFlOGY4ZTYwIgorICAgICAiMW5rbHhheXhrZHNrZzV3bGZsNDRjbmR6cWtsMTh2NTYx cnowM2h3eDd3Ym41dzg5cTc3NSIpCisgICAgKCJudW5pdC1saXRlIiAgICAgICAgICAgICAgICAg ICAiNGJjNzlhNmRhMWYwZWU1Mzg1NjBiN2U0ZDBjYWZmNDZkM2M4NmU0ZiIKKyAgICAgIjA4NWZw YWJqdzQ3cm44aGI1enc2d2l6c2cyanJnZGJqOXJubGFyOWxybHM0MHdpZzI3MnEiKQorICAgICgi cngiICAgICAgICAgICAgICAgICAgICAgICAgICAgImIyOWE0YjBmZGE2MDllMGFmMzNmZjU0ZWQx MzY1MmI2Y2NmMGUwNWUiCisgICAgICIxbjFqd2htc2JrY3YyZDgwNmltbWNwemtiNzJyejA0eHk5 OG15dzM1NWE4dzVhaDI1eWl2IikpKQorCisoZGVmaW5lLXB1YmxpYyBtb25vLTQuOS4wCisgIChw YWNrYWdlCisgICAgKGluaGVyaXQgbW9uby0zLjEyLjEpCisgICAgKHZlcnNpb24gIjQuOS4wIikK KyAgICAobmFtZSAibW9ubyIpCisgICAgKHNvdXJjZSAob3JpZ2luCisgICAgICAgICAgICAgICht ZXRob2QgZ2l0LWZldGNoKQorICAgICAgICAgICAgICAodXJpCisgICAgICAgICAgICAgICAoZ2l0 LXJlZmVyZW5jZQorICAgICAgICAgICAgICAgICh1cmwgImh0dHBzOi8vZ2l0bGFiLndpbmVocS5v cmcvbW9uby9tb25vLmdpdCIpCisgICAgICAgICAgICAgICAgOzsgc29tZSBjb21taXQgY2hvc2Vu IGFmdGVyIGNvbmZpZ3VyZS5hYyB3YXMgdXBkYXRlZCB0byBtYWtlCisgICAgICAgICAgICAgICAg OzsgdGhlIHZlcnNpb24gPj0gNC45LjAKKyAgICAgICAgICAgICAgICAoY29tbWl0ICI1YTM3MzY2 MDZlNjI0M2QyYzg0ZDRkZjJjZjM1YzI4NDIxNGI4Y2M0IikpKQorICAgICAgICAgICAgICAoZmls ZS1uYW1lIChnaXQtZmlsZS1uYW1lIG5hbWUgdmVyc2lvbikpCisgICAgICAgICAgICAgIChzaGEy NTYKKyAgICAgICAgICAgICAgIChiYXNlMzIKKyAgICAgICAgICAgICAgICAiMHZxa2txa2Fxd2Jp aTRoZHpnMHZmZnl5MzFmejFrbW1zYTY3anlxd3hkc3ZncGpzemloMyIpKQorICAgICAgICAgICAg ICAobW9kdWxlcyAnKChndWl4IGJ1aWxkIHV0aWxzKQorICAgICAgICAgICAgICAgICAgICAgICAg IChpY2UtOSBzdHJpbmctZnVuKSkpCisgICAgICAgICAgICAgIChzbmlwcGV0ICN+KGJlZ2luCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAjJChhZGQtZXh0ZXJuYWwtcmVwb3MKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIG1vbm8tNC45LjAtZXh0ZXJuYWwtcmVwby1zcGVjcykKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICMkcHJlcGFyZS1tb25vLXNvdXJjZSkpCisgICAgICAg ICAgICAgIChwYXRjaGVzIChzZWFyY2gtcGF0Y2hlcworICAgICAgICAgICAgICAgICAgICAgICAg OzsgU2F2ZXMgdXMgYW4gZXh0cmEgaW50ZXJtZWRpYXRlIHN0ZXAKKyAgICAgICAgICAgICAgICAg ICAgICAgICJtb25vLTQuOS4wLWZpeC1ydW50aW1lbWV0YWRhdGF2ZXJzaW9uLnBhdGNoIikpKSkK KyAgICAobmF0aXZlLWlucHV0cyAobW9kaWZ5LWlucHV0cyAocGFja2FnZS1uYXRpdmUtaW5wdXRz IG1vbm8tMy4xMi4xKQorICAgICAgICAgICAgICAgICAgICAgKHJlcGxhY2UgIm1vbm8iIG1vbm8t My4xMi4xKQorICAgICAgICAgICAgICAgICAgICAgKGFwcGVuZCB0emRhdGEtZm9yLXRlc3RzKSkp CisgICAgKGFyZ3VtZW50cworICAgICAoc3Vic3RpdHV0ZS1rZXl3b3JkLWFyZ3VtZW50cyAocGFj a2FnZS1hcmd1bWVudHMgbW9uby0zLjEyLjEpCisgICAgICAgKCgjOmNvbmZpZ3VyZS1mbGFncyBf ICNmKQorICAgICAgICA7OyAiRXh0ZXJuYWwgQm9laG0gaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZCIg LSBJIFZJTEwgTk9UIHVzZSB0aGUKKyAgICAgICAgOzsgYnVuZGxlZCBzb2Z0d2FyZSEKKyAgICAg ICAgI34obGlzdCAiLS13aXRoLXNnZW49eWVzIgorICAgICAgICAgICAgICAgICItLWRpc2FibGUt Ym9laG0iCisgICAgICAgICAgICAgICAgIi0td2l0aC1jc2M9bWNzIikpCisgICAgICAgKCgjOnBo YXNlcyBwaGFzZXMgI34lc3RhbmRhcmQtcGhhc2VzKQorICAgICAgICAjfihtb2RpZnktcGhhc2Vz ICMkcGhhc2VzCisgICAgICAgICAgICAoYWRkLWJlZm9yZSAnY29uZmlndXJlICdzZXQtVFpESVIK KyAgICAgICAgICAgICAgKGxhbWJkYSogKCM6a2V5IG5hdGl2ZS1pbnB1dHMgaW5wdXRzICM6YWxs b3ctb3RoZXIta2V5cykKKyAgICAgICAgICAgICAgICAoc2VhcmNoLWlucHV0LWRpcmVjdG9yeSAo b3IgbmF0aXZlLWlucHV0cyBpbnB1dHMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgInNoYXJlL3pvbmVpbmZvIikpKQorICAgICAgICAgICAgKGFkZC1hZnRlciAndW5w YWNrICd1c2Utb2xkLW1vbm8tbGlicmFyaWVzCisgICAgICAgICAgICAgIDs7IEF0IHRoaXMgcG9p bnQgaW4gaGlzdG9yeSBtb25vIGhhZCBub3QsIHRvIG15IGtub3dsZWRnZSwKKyAgICAgICAgICAg ICAgOzsgZGVpZ25lZCB0byBncmFjZSB1cyB3aXRoIHRoZSBhY3R1YWwgc291cmNlcyB0byB0aGUg YmluYXJpZXMKKyAgICAgICAgICAgICAgOzsgc2hpcHBlZCBpbiBleHRlcm5hbC9iaW5hcnktcmVm ZXJlbmNlLWFzc2VtYmxpZXMsIHNvIGp1c3QgY29weQorICAgICAgICAgICAgICA7OyB0aGUgbGli cmFyaWVzIGZyb20gYW4gb2xkZXIgbW9ubyBmb3Igbm93IEkgZ3Vlc3MuCisgICAgICAgICAgICAg IChsYW1iZGEgXworICAgICAgICAgICAgICAgIChzdWJzdGl0dXRlKiAiLi9tY3MvY2xhc3MvcmVm ZXJlbmNlLWFzc2VtYmxpZXMvTWFrZWZpbGUiCisgICAgICAgICAgICAgICAgICAoKCJcXC5cXC4v XFwuXFwuL1xcLlxcLi9leHRlcm5hbC9iaW5hcnktcmVmZXJlbmNlLWFzc2VtYmxpZXMvdiIpCisg ICAgICAgICAgICAgICAgICAgKHN0cmluZy1hcHBlbmQgIyQodGhpcy1wYWNrYWdlLW5hdGl2ZS1p bnB1dCAibW9ubyIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi9saWIvbW9u by8iKSkpKSkKKyAgICAgICAgICAgIChhZGQtYWZ0ZXIgJ3VucGFjayAnZGlzYWJsZS1NaWNyb3Nv ZnQuQnVpbGQuVGFza3MtdGVzdHMKKyAgICAgICAgICAgICAgKGxhbWJkYSBfCisgICAgICAgICAg ICAgICAgOzsgVGhlc2UgZmFpbCBmb3IgdW5rbm93biByZWFzb25zCisgICAgICAgICAgICAgICAg KHN1YnN0aXR1dGUqICJtY3MvY2xhc3MvTWljcm9zb2Z0LkJ1aWxkLlRhc2tzL01ha2VmaWxlIgor ICAgICAgICAgICAgICAgICAgKCgiXmluY2x1ZGUgLi4vLi4vYnVpbGQvbGlicmFyeS5tYWtlIiBh bGwpCisgICAgICAgICAgICAgICAgICAgKHN0cmluZy1hcHBlbmQKKyAgICAgICAgICAgICAgICAg ICAgYWxsCisgICAgICAgICAgICAgICAgICAgICJcbnJ1bi10ZXN0LXJlY3Vyc2l2ZTpcblx0QGVj aG8gc2tpcHBpbmcgdGVzdHNcbiIpKSkpKSkpKSkKKyAgICAobGljZW5zZSAobGlzdAorICAgICAg ICAgICAgICA7OyBtb3N0IG9mIG1jcy90b29scywgbW9uby9tYW4sIG1vc3Qgb2YgbWNzL2NsYXNz LCB0ZXN0cyBieQorICAgICAgICAgICAgICA7OyBkZWZhdWx0LCBtb25vL2VnbGliLCBtb25vL21l dGFkYXRhL3NnZW4qLAorICAgICAgICAgICAgICA7OyBtb25vL2FyY2gvKi9YWFgtY29kZWdlbi5o CisgICAgICAgICAgICAgIDs7IG1jcy9tY3MsIG1jcy9nbWNzIChkdWFsLWxpY2Vuc2VkIEdQTCkK KyAgICAgICAgICAgICAgOzsgc2FtcGxlcworICAgICAgICAgICAgICBsaWNlbnNlOngxMQorICAg ICAgICAgICAgICA7OyBtY3MvbWNzLCBtY3MvZ21jcyAoZHVhbC1saWNlbnNlZCBYMTEpCisgICAg ICAgICAgICAgIDs7IHNvbWUgb2YgbWNzL3Rvb2xzCisgICAgICAgICAgICAgIGxpY2Vuc2U6Z3Bs MSsgOzsgbm90ZTogLi9tY3MvTElDRU5TRS5HUEwgc3BlY2lmaWVzIG5vIHZlcnNpb24KKyAgICAg ICAgICAgICAgOzsgbW9uby9tb25vICh0aGUgbW9ubyBWTSwgSSB0aGluayB0aGV5IG1lYW50IG1v bm8vbWluaSkKKyAgICAgICAgICAgICAgOzsgbW9uby9zdXBwb3J0IChub3RlOiBkaXJlY3Rvcnkg ZG9lc24ndCBleGlzdCwgcHJvYmFibHkgbWVhbnQKKyAgICAgICAgICAgICAgOzsgLi9zdXBwb3J0 LCBidXQgdGhhdCBjb250YWlucyBhIGNvcHkgb2YgemxpYj8pCisgICAgICAgICAgICAgIGxpY2Vu c2U6bGdwbDIuMCsgOzsgbm90ZTogLi9tY3MvTElDRU5TRS5MR1BMIHNwZWNpZmllcyBubyB2ZXJz aW9uCisgICAgICAgICAgICAgIDs7IG1jcy9qYXksIG1vbm8vdXRpbHMvbWVtY2hlY2suaAorICAg ICAgICAgICAgICBsaWNlbnNlOmJzZC00CisgICAgICAgICAgICAgIDs7IG1vbm8vdXRpbHMvYnNl YXJjaC5jLCBtb25vL2lvLWxheWVyL3dhcGlfZ2xvYi57aCxjfQorICAgICAgICAgICAgICBsaWNl bnNlOmJzZC0zCisgICAgICAgICAgICAgIDs7IG1vbm8vdXRpbHMvZnJlZWJzZC17ZHdhcmYsZWxm X2NvbW1vbixlbGY2NCxlbGYzMn0uaAorICAgICAgICAgICAgICBsaWNlbnNlOmJzZC0yCisgICAg ICAgICAgICAgIDs7IG1jcy9jbGFzcy9TeXN0ZW0uQ29yZS9TeXN0ZW0vVGltZVpvbmVJbmZvLkFu ZHJvaWQuY3MKKyAgICAgICAgICAgICAgOzsgbWNzL2NsYXNzL1JhYmJpdE1RLkNsaWVudCAoZHVh bCBsaWNlbnNlZCBtcGwxLjEpCisgICAgICAgICAgICAgIGxpY2Vuc2U6YXNsMi4wCisgICAgICAg ICAgICAgIDs7IC4vc3VwcG9ydCwgY29udGFpbnMgYSBjb3B5IG9mIHpsaWIsIGluY2wuIC4vc3Vw cG9ydC9taW5pemlwCisgICAgICAgICAgICAgIGxpY2Vuc2U6emxpYgorICAgICAgICAgICAgICA7 OyBtb25vL2RvY3MvSHRtbEFnaWxpdHlQYWNrLCBtY3MvdW5pdDI0CisgICAgICAgICAgICAgIGxp Y2Vuc2U6bXMtcGwKKyAgICAgICAgICAgICAgOzsgbWNzL2NsYXNzL0kxOE4vbWtsaXN0LnNoLCBt b25vL2JlbmNobWFyay97emlwbWFyayxsb2dpY30uY3MKKyAgICAgICAgICAgICAgOzsgbWNzL2Ns YXNzL3ssQ29tcGF0Ln1JQ1NoYXJwQ29kZS5TaGFycFppcExpYgorICAgICAgICAgICAgICBsaWNl bnNlOmdwbDIrCisgICAgICAgICAgICAgIDs7IG1jcy9jbGFzcy9SYWJiaXRNUS5DbGllbnQgKGR1 YWwgbGljZW5zZWQgYXNsMi4wKQorICAgICAgICAgICAgICBsaWNlbnNlOm1wbDEuMQorICAgICAg ICAgICAgICA7OyBBUEkgRG9jdW1lbnRhdGlvbgorICAgICAgICAgICAgICBsaWNlbnNlOmNjLWJ5 NC4wKSkpKQpkaWZmIC0tZ2l0IGEvZ251L3BhY2thZ2VzL3BhdGNoZXMvbW9uby00LjkuMC1maXgt cnVudGltZW1ldGFkYXRhdmVyc2lvbi5wYXRjaCBiL2dudS9wYWNrYWdlcy9wYXRjaGVzL21vbm8t NC45LjAtZml4LXJ1bnRpbWVtZXRhZGF0YXZlcnNpb24ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggMDAwMDAwMDAwMDAuLmVjNWJhZDlhZTEyCi0tLSAvZGV2L251bGwKKysrIGIvZ251 L3BhY2thZ2VzL3BhdGNoZXMvbW9uby00LjkuMC1maXgtcnVudGltZW1ldGFkYXRhdmVyc2lvbi5w YXRjaApAQCAtMCwwICsxLDEzIEBACitkaWZmIC0tZ2l0IGEvbWNzL21jcy9zZXR0aW5ncy5jcyBi L21jcy9tY3Mvc2V0dGluZ3MuY3MKK2luZGV4IDEzOTNiY2Q1OGYzLi5hZjVmZWJlN2NmNiAxMDA2 NDQKKy0tLSBhL21jcy9tY3Mvc2V0dGluZ3MuY3MKKysrKyBiL21jcy9tY3Mvc2V0dGluZ3MuY3MK K0BAIC0xMTk3LDcgKzExOTcsNyBAQCBuYW1lc3BhY2UgTW9uby5DU2hhcnAgeworIAkJCQl9Cisg CQkJCXJldHVybiBQYXJzZVJlc3VsdC5TdWNjZXNzOworIAorLQkJCWNhc2UgInJ1bnRpbWVtZXRh ZGF0YXZlcnNpb24iOgorKwkJCWNhc2UgIi9ydW50aW1lbWV0YWRhdGF2ZXJzaW9uIjoKKyAJCQkJ aWYgKHZhbHVlLkxlbmd0aCA9PSAwKSB7CisgCQkJCQlFcnJvcl9SZXF1aXJlc0FyZ3VtZW50IChv cHRpb24pOworIAkJCQkJcmV0dXJuIFBhcnNlUmVzdWx0LkVycm9yOwotLSAKMi40NS4yCgo= --b1=_tnCtFHx6yIKuYDXqbApeYGjbdIBbQ4owcmVz3FJkVmc Content-Type: text/x-patch; name=v2-0012-gnu-Add-mono-5.0.1.patch Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=v2-0012-gnu-Add-mono-5.0.1.patch RnJvbSAxM2Y1NDE3MjQzMzJmMWU0MWM2YjUxNjkwY2MyY2M3ODQwNzllYjA5IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiB1bm11c2ggPHVubXVzaEBoYXNoYmFuZy5zaD4KRGF0ZTogVHVl LCAyNiBOb3YgMjAyNCAxMzoyNzoxNwpTdWJqZWN0OiBbUEFUQ0ggdjIgMTIvMjFdIGdudTogQWRk IG1vbm8tNS4wLjEuCgoqIGdudS9wYWNrYWdlcy9kb3RuZXQuc2NtCiAgKG1vbm8tNS4wLjEtZXh0 ZXJuYWwtcmVwby1zcGVjcywgbW9uby01LjAuMSk6IE5ldyB2YXJpYWJsZXMuCi0tLQogZ251L3Bh Y2thZ2VzL2RvdG5ldC5zY20gfCAxNDAgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKwogMSBmaWxlIGNoYW5nZWQsIDE0MCBpbnNlcnRpb25zKCspCgpkaWZmIC0tZ2l0IGEv Z251L3BhY2thZ2VzL2RvdG5ldC5zY20gYi9nbnUvcGFja2FnZXMvZG90bmV0LnNjbQppbmRleCAw MzNiOWQ5ZWM5Zi4uZmFmYzEwNjgyMmIgMTAwNjQ0Ci0tLSBhL2dudS9wYWNrYWdlcy9kb3RuZXQu c2NtCisrKyBiL2dudS9wYWNrYWdlcy9kb3RuZXQuc2NtCkBAIC04ODQsMyArODg0LDE0MyBAQCAo ZGVmaW5lLXB1YmxpYyBtb25vLTQuOS4wCiAgICAgICAgICAgICAgIGxpY2Vuc2U6bXBsMS4xCiAg ICAgICAgICAgICAgIDs7IEFQSSBEb2N1bWVudGF0aW9uCiAgICAgICAgICAgICAgIGxpY2Vuc2U6 Y2MtYnk0LjApKSkpCisKKyhkZWZpbmUgbW9uby01LjAuMS1leHRlcm5hbC1yZXBvLXNwZWNzCisg ICcoKCJhc3BuZXR3ZWJzdGFjayIgICAgICAgICAgICAgICJlNzdiMTJlNmNjNWVkMjYwYTk4NDQ3 ZjYwOWU4ODczMzdlNDRlMjk5IgorICAgICAiMHJrczM0NHFyNGZtcDNmczEyNjRkMnFrbW0zNDht OGQxa2pkN3o0bDk0aWlpcnduMWZxMSIpCisgICAgOzsgc25pcHBldCBpbiB0aGUgYWN0dWFsIHBh Y2thZ2Ugd2lsbCBkZWxldGUgYWxsIGRsbHMgYW5kIGV4ZXMsIHNvIHRoaXMKKyAgICA7OyBzaG91 bGQgYmUgcmVidWlsdCBmcm9tIHNjcmF0Y2guCisgICAgKCgicmVmZXJlbmNlLWFzc2VtYmxpZXMi ICJiaW5hcnktcmVmZXJlbmNlLWFzc2VtYmxpZXMiKQorICAgICAiZmViYzEwMGYwMzEzZjBkYzlk NzVkZDFiY2VhNDVlODcxMzRiNWI1NSIKKyAgICAgIjBscGo5MTFtMmxxMjNyMjJkcHk0aTAyZnk0 eWtmMjdkeDhmdnFweHN4a255c2oyamw2eTQiKQorICAgICgiYm9ja2J1aWxkIiAgICAgICAgICAg ICAgICAgICAiNTEyYmE0MWE5NGJlYzM1ZmYwYzM5NWViNzFhMTgwZmRhMjNkYTk1YyIKKyAgICAg IjE2bTAwbGE4c3Z4OHYwN3N4eTR6eGJwcTBjYnE3ZDNuenk1M3c4a3FtbDhiMThoNWRhYmciKQor ICAgICgiYm9yaW5nc3NsIiAgICAgICAgICAgICAgICAgICAiYzA2YWM2YjMzZDNlNzQ0MmFkODc4 NDg4YjlkMTEwMDEyN2VmZjk5OCIKKyAgICAgIjE4N3pwaTFydmg5aTZqZmNjd3pxcTMzN3J4eGkx cmdueTZtanE3OXIwOGRscmgwbHlkemMiKQorICAgICgiYnVpbGR0b29scyIgICAgICAgICAgICAg ICAgICAiOWI2ZWU4Njg2YmU1NWE5ODNkODg2OTM4MTY1YjYyMDZjZGE1MDc3MiIKKyAgICAgIjBz anczc3dhdmNtaWp5bm1heGg2NDdxcGtqc2JnaWhkcjhsaGt5emY4ZHNwcmhscTRmeGQiKQorICAg ICgiY2VjaWwiICAgICAgICAgICAgICAgICAgICAgICAiNzgwMTUzNGRlMWJmZWQ5N2M4NDQ4MjFj MzI0NGUwNWZjN2ZmY2ZiOCIKKyAgICAgIjBkbWZ5emttNTduM2xiZ2xseDZmZno0Zzg0eDFzbGtp YjloYjRjZnAzbmh6ODUycWltN2IiKQorICAgICgoImNlY2lsIiAiY2VjaWwtbGVnYWN5IikgICAg ICAiMzNkNTBiODc0ZmQ1MjcxMThiYzM2MWQ4M2RlM2Q0OTRlOGJiNTVlMSIKKyAgICAgIjFwNGhs MTc5NmliMjZ5a3lmNXNubDZjajBseDB2N21qaDB4cWhqdzZxZGg3NTNuc2p5aGIiKQorICAgICgi Y29yZWZ4IiAgICAgICAgICAgICAgICAgICAgICAiYmQ5NmFlNWYxNDg1YWU4NTQxZmU0NzZkZmQ5 NDRlZmRlNzZiY2Q5YyIKKyAgICAgIjBqNTFsYzU0ZG13YTRmem5hMnZqZmo0cGNkMWxrMXM1YnA1 ZGZpeDFhcWNuY3l6aXZhemkiKQorICAgICgiY29yZXJ0IiAgICAgICAgICAgICAgICAgICAgICAi ZDg3Yzk2NmQ4MGMxMjc0MzczZGRhZmUzMzc1YmYxNzMwY2Q0MzBlZCIKKyAgICAgIjA3OHY1a3M3 aW5tMmcxaGY5NngxOWs0MmpudjFxaGhoN3I4anhyZmM3ams0djRsZ21xeWYiKQorICAgICgiaWtk YXNtIiAgICAgICAgICAgICAgICAgICAgICAiZTRkZWFiZjYxYzExOTk5ZjIwMGRjZWE2ZjZkNmI0 MjQ3NGNjMjEzMSIKKyAgICAgIjFmcmJmNzB5N243bDcyajM5M2F2ZGl3azYxNTNjdmZ3d3BpZ2hr ZjJtNDZjbHFtcTRoYW4iKQorICAgICgoImlrdm0tZm9yayIgImlrdm0iKSAgICAgICAgICAiMzY3 ODY0ZWY4MTA4NTlhZTNjZTY1Mjg2NDIzM2IzNWYyZGQ1ZmRiZSIKKyAgICAgIjBpZzk5a2JtYTRz MG16YjEzbnpzazF2bTIwMHlnZnIxMXE2bXpnaDZqajQ2czJmYzM1cHgiKQorICAgICgibGlua2Vy IiAgICAgICAgICAgICAgICAgICAgICAiZTRkOTc4NGFjMzdiOWViZjQ3NTcxNzVjOTJiYzdhM2Vj OWZkODY3YSIKKyAgICAgIjBnYTdicjlscWRzeWN6MjJkbmRrYml3YmQwYzYwbWw2bmwyMnhsc25q cjdsd2RjY2ZqdmwiKQorICAgICgiTHVjZW5lLk5ldC5MaWdodCIgICAgICAgICAgICAiODU5Nzhi N2ViOTQ3MzhmNTE2ODI0MzQxMjEzZDVlOTQwNjBmNTI4NCIKKyAgICAgIjBkMTE4aTUybTNhMHZm amhmY2k4MWEya2M0cXZuajIzZ3MwMmhydmRyZnBkMXE5MmZ5aWkiKQorICAgICgiTmV3dG9uc29m dC5Kc29uIiAgICAgICAgICAgICAiNDcxYzNlMDgwM2E5ZjQwYTBhY2M4YWVjZWIzMWRlNmZmOTNh NTJjNCIKKyAgICAgIjBkZ25nZDVocWs2eWhsZzQwa2FibjZxZG5rbm0zMnpjeDlxNmJtMnczMWNz bnNrNTk3OHMiKQorICAgICgoIk51R2V0LkJ1aWxkVGFza3MiICJudWdldC1idWlsZHRhc2tzIikK KyAgICAgIjhkMzA3NDcyZWEyMTRmMmI1OTYzNjQzMWY3NzE4OTRkYmNiYTcyNTgiCisgICAgICIx aDFmcm5qMHg4azdiMjlpYzRqaXNjaDB2bHBtc21naGp3NTU0cHoyNzdmMm54YWlkbGpqIikKKyAg ICAoKCJOVW5pdExpdGUiICJudW5pdC1saXRlIikgICAgIjY5MDYwM2JlYTk4YWFlNjlmY2E5YTY1 MTMwZDg4NTkxYmM2Y2FiZWUiCisgICAgICIxZjg0NXlzanpzM3lkOWdjeXd3NjZkbmt4NDg0ejVm a25iOGwweHo3NHNqbXhrMm1uZ3djIikKKyAgICA7OyAoInJvc2x5bi1iaW5hcmllcyIgICAgICAg ICAgIjBkNDE5OGIxMjk5YmNiMDE5OTczNzQ5ZGE0ZDQ3ZTkwZjE1YTFlNDYiCisgICAgOzsgICIi KQorICAgICgicngiICAgICAgICAgICAgICAgICAgICAgICAgICAiYjI5YTRiMGZkYTYwOWUwYWYz M2ZmNTRlZDEzNjUyYjZjY2YwZTA1ZSIKKyAgICAgIjFuMWp3aG1zYmtjdjJkODA2aW1tY3B6a2I3 MnJ6MDR4eTk4bXl3MzU1YTh3NWFoMjV5aXYiKSkpCisKKyhkZWZpbmUtcHVibGljIG1vbm8tNS4w LjEKKyAgKHBhY2thZ2UKKyAgICAoaW5oZXJpdCBtb25vLTQuOS4wKQorICAgICh2ZXJzaW9uICI1 LjAuMSIpCisgICAgKG5hbWUgIm1vbm8iKQorICAgIChzb3VyY2UgKG9yaWdpbgorICAgICAgICAg ICAgICAobWV0aG9kIGdpdC1mZXRjaCkKKyAgICAgICAgICAgICAgKHVyaQorICAgICAgICAgICAg ICAgKGdpdC1yZWZlcmVuY2UKKyAgICAgICAgICAgICAgICAodXJsICJodHRwczovL2dpdGxhYi53 aW5laHEub3JnL21vbm8vbW9uby5naXQiKQorICAgICAgICAgICAgICAgIChjb21taXQgIm1vbm8t NS4wLjEuMSIpKSkKKyAgICAgICAgICAgICAgKGZpbGUtbmFtZSAoZ2l0LWZpbGUtbmFtZSBuYW1l IHZlcnNpb24pKQorICAgICAgICAgICAgICAoc2hhMjU2CisgICAgICAgICAgICAgICAoYmFzZTMy CisgICAgICAgICAgICAgICAgIjA1ejliZGRsanA4eHdzdzdxdzNmN2JpYzhpMjAyd3JjNjBwamI5 Zm40aWd3Zno5Mjc4bjUiKSkKKyAgICAgICAgICAgICAgKG1vZHVsZXMgJygoZ3VpeCBidWlsZCB1 dGlscykKKyAgICAgICAgICAgICAgICAgICAgICAgICAoaWNlLTkgc3RyaW5nLWZ1bikpKQorICAg ICAgICAgICAgICAoc25pcHBldCAjfihiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAg IyQoYWRkLWV4dGVybmFsLXJlcG9zCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb25v LTUuMC4xLWV4dGVybmFsLXJlcG8tc3BlY3MpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAj JEBwcmVwYXJlLW1vbm8tc291cmNlLTApKSkpCisgICAgKG5hdGl2ZS1pbnB1dHMgKG1vZGlmeS1p bnB1dHMgKHBhY2thZ2UtbmF0aXZlLWlucHV0cyBtb25vLTQuOS4wKQorICAgICAgICAgICAgICAg ICAgICAgKHJlcGxhY2UgIm1vbm8iIG1vbm8tNC45LjApCisgICAgICAgICAgICAgICAgICAgICAo YXBwZW5kIGNtYWtlLW1pbmltYWwpKSkKKyAgICAoYXJndW1lbnRzCisgICAgIChzdWJzdGl0dXRl LWtleXdvcmQtYXJndW1lbnRzIChwYWNrYWdlLWFyZ3VtZW50cyBtb25vLTQuOS4wKQorICAgICAg ICgoIzptYWtlLWZsYWdzIF8gI2YpCisgICAgICAgIDs7IEJ1aWxkIHN5c3RlbSBpcyBidWdneSBo ZXJlLCBpdCBkb2VzIHNvbWUgd2VpcmQgd2lsZGNhcmQgZXhwYW5zaW9uCisgICAgICAgIDs7IHRo YXQgYXNzdW1lcyB0aGVyZSdzIG9ubHkgYXQgbW9zdCBvbmUgZmlsZSBpbiBhIGRpcmVjdG9yeQor ICAgICAgICAjfihsaXN0ICJWPTEiICJTS0lQX0FPVD0xIikpCisgICAgICAgKCgjOnBoYXNlcyBw aGFzZXMgI34lc3RhbmRhcmQtcGhhc2VzKQorICAgICAgICAjfihtb2RpZnktcGhhc2VzICMkcGhh c2VzCisgICAgICAgICAgICAoYWRkLWFmdGVyICd1bnBhY2sgJ2Rpc2FibGUtcm9zbHluLWluc3Rh bGwKKyAgICAgICAgICAgICAgOzsgRm9yIHNvbWUgcmVhc29uIHRoZXJlIGlzIG5vIHByZWRlZmlu ZWQgd2F5IHRvIHBlcnN1YWRlIG1vbm8gdG8KKyAgICAgICAgICAgICAgOzsgbm90IGluc3RhbGwg dGhlIGJpbmFyeSBibG9icyBpdCBhc3N1bWVzIGFyZSB0aGVyZS4KKyAgICAgICAgICAgICAgKGxh bWJkYSBfCisgICAgICAgICAgICAgICAgKHN1YnN0aXR1dGUqICJtY3MvcGFja2FnZXMvTWFrZWZp bGUiCisgICAgICAgICAgICAgICAgICAoKCJeaW5zdGFsbC1sb2NhbDoiKQorICAgICAgICAgICAg ICAgICAgIChzdHJpbmctYXBwZW5kICJpbnN0YWxsLWxvY2FsOgorCWVjaG8gXCJTa2lwcGluZyBi bG9iIGluc3RhbGxcIgorCit1bnVzZWQwOiIpKSkpKQorICAgICAgICAgICAgKGRlbGV0ZSAndXNl LW9sZC1tb25vLWxpYnJhcmllcykKKyAgICAgICAgICAgIChhZGQtYWZ0ZXIgJ2J1aWxkICdidWls ZC1yZWZlcmVuY2UtYXNzZW1ibGllcworICAgICAgICAgICAgICAobGFtYmRhKiAoIzprZXkgbWFr ZS1mbGFncyBwYXJhbGxlbC1idWlsZD8gIzphbGxvdy1vdGhlci1rZXlzKQorICAgICAgICAgICAg ICAgIChsZXQgKCh0b3AgKGdldGN3ZCkpCisgICAgICAgICAgICAgICAgICAgICAgOzsgcGFyYWxs ZWwtYnVpbGQ/IG5lZWRzIHRvIGJlIGZhbHNlIGZvciBtb25vJ3MgYnVpbGQKKyAgICAgICAgICAg ICAgICAgICAgICA7OyBwaGFzZSwgYnV0IGl0IHNob3VsZCB3b3JrIGhlcmUuCisgICAgICAgICAg ICAgICAgICAgICAgKHBhcmFsbGVsLWJ1aWxkPyAjdCkpCisgICAgICAgICAgICAgICAgICAod2l0 aC1kaXJlY3RvcnktZXhjdXJzaW9uICJleHRlcm5hbC9iaW5hcnktcmVmZXJlbmNlLWFzc2VtYmxp ZXMiCisgICAgICAgICAgICAgICAgICAgIDs7IE5vIGNsdWUgd2h5IGFsbCB0aGVzZSByZWZlcmVu Y2VzIGFyZSBtaXNzaW5nLCBqdXN0CisgICAgICAgICAgICAgICAgICAgIDs7IHBvd2VyIHRocm91 Z2ggSSBndWVzcy4KKyAgICAgICAgICAgICAgICAgICAgKHN1YnN0aXR1dGUqIChmaW5kLWZpbGVz ICIuIiAiXk1ha2VmaWxlJCIpCisgICAgICAgICAgICAgICAgICAgICAgKCgiQ1NDX0NPTU1PTl9B UkdTIDo9ICIgYWxsKQorICAgICAgICAgICAgICAgICAgICAgICAoc3RyaW5nLWFwcGVuZCBhbGwg Ii1kZWxheXNpZ24rICIpKQorICAgICAgICAgICAgICAgICAgICAgICgoIklCTVxcLkRhdGFcXC5E QjJfUkVGUyA6PSAiIGFsbCkKKyAgICAgICAgICAgICAgICAgICAgICAgKHN0cmluZy1hcHBlbmQg YWxsICJTeXN0ZW0uWG1sICIpKQorICAgICAgICAgICAgICAgICAgICAgICgoIk1vbm9cXC5EYXRh XFwuU3FsaXRlX1JFRlMgOj0gIiBhbGwpCisgICAgICAgICAgICAgICAgICAgICAgIChzdHJpbmct YXBwZW5kIGFsbCAiU3lzdGVtLlhtbCAiKSkKKyAgICAgICAgICAgICAgICAgICAgICAoKCJTeXN0 ZW1cXC5EYXRhXFwuRGF0YVNldEV4dGVuc2lvbnNfUkVGUyA6PSAiIGFsbCkKKyAgICAgICAgICAg ICAgICAgICAgICAgKHN0cmluZy1hcHBlbmQgYWxsICJTeXN0ZW0uWG1sICIpKQorICAgICAgICAg ICAgICAgICAgICAgICgoIlN5c3RlbVxcLkRhdGFcXC5PcmFjbGVDbGllbnRfUkVGUyA6PSAiIGFs bCkKKyAgICAgICAgICAgICAgICAgICAgICAgKHN0cmluZy1hcHBlbmQgYWxsICJTeXN0ZW0uWG1s ICIpKQorICAgICAgICAgICAgICAgICAgICAgICgoIlN5c3RlbVxcLklkZW50aXR5TW9kZWxfUkVG UyA6PSAiIGFsbCkKKyAgICAgICAgICAgICAgICAgICAgICAgKHN0cmluZy1hcHBlbmQgYWxsICJT eXN0ZW0uQ29uZmlndXJhdGlvbiAiKSkKKyAgICAgICAgICAgICAgICAgICAgICAoKCJTeXN0ZW1c XC5EZXNpZ25fUkVGUyA6PSAiIGFsbCkKKyAgICAgICAgICAgICAgICAgICAgICAgKHN0cmluZy1h cHBlbmQgYWxsICJBY2Nlc3NpYmlsaXR5ICIpKQorICAgICAgICAgICAgICAgICAgICAgICgoIlN5 c3RlbVxcLldlYlxcLkV4dGVuc2lvbnNcXC5EZXNpZ25fUkVGUyA6PSAiIGFsbCkKKyAgICAgICAg ICAgICAgICAgICAgICAgKHN0cmluZy1hcHBlbmQgYWxsICJTeXN0ZW0uV2luZG93cy5Gb3JtcyBT eXN0ZW0uV2ViICIpKQorICAgICAgICAgICAgICAgICAgICAgICgoIlN5c3RlbVxcLlNlcnZpY2VN b2RlbFxcLlJvdXRpbmdfUkVGUyA6PSAiIGFsbCkKKyAgICAgICAgICAgICAgICAgICAgICAgKHN0 cmluZy1hcHBlbmQgYWxsICJTeXN0ZW0uWG1sICIpKQorICAgICAgICAgICAgICAgICAgICAgICgo IlN5c3RlbVxcLldlYlxcLkFic3RyYWN0aW9uc19SRUZTIDo9ICIgYWxsKQorICAgICAgICAgICAg ICAgICAgICAgICAoc3RyaW5nLWFwcGVuZCBhbGwgIlN5c3RlbSAiKSkKKyAgICAgICAgICAgICAg ICAgICAgICAoKCJTeXN0ZW1cXC5SZWFjdGl2ZVxcLldpbmRvd3NcXC5Gb3Jtc19SRUZTIDo9ICIg YWxsKQorICAgICAgICAgICAgICAgICAgICAgICAoc3RyaW5nLWFwcGVuZCBhbGwgIlN5c3RlbSAi KSkKKyAgICAgICAgICAgICAgICAgICAgICAoKCJTeXN0ZW1cXC5XaW5kb3dzXFwuRm9ybXNcXC5E YXRhVmlzdWFsaXphdGlvbl9SRUZTIDo9ICIgYWxsKQorICAgICAgICAgICAgICAgICAgICAgICAo c3RyaW5nLWFwcGVuZCBhbGwgIkFjY2Vzc2liaWxpdHkgIikpCisgICAgICAgICAgICAgICAgICAg ICAgKCgiRmFjYWRlcy9TeXN0ZW1cXC5TZXJ2aWNlTW9kZWxcXC5QcmltaXRpdmVzX1JFRlMgOj0g IiBhbGwpCisgICAgICAgICAgICAgICAgICAgICAgIChzdHJpbmctYXBwZW5kIGFsbCAiU3lzdGVt LlhtbCAiKSkKKyAgICAgICAgICAgICAgICAgICAgICAoKCJGYWNhZGVzL1N5c3RlbVxcLkR5bmFt aWNcXC5SdW50aW1lX1JFRlMgOj0gIiBhbGwpCisgICAgICAgICAgICAgICAgICAgICAgIChzdHJp bmctYXBwZW5kIGFsbCAiU3lzdGVtICIpKQorICAgICAgICAgICAgICAgICAgICAgICgoIkZhY2Fk ZXMvU3lzdGVtXFwuWG1sXFwuWERvY3VtZW50X1JFRlMgOj0gIiBhbGwpCisgICAgICAgICAgICAg ICAgICAgICAgIChzdHJpbmctYXBwZW5kIGFsbCAiU3lzdGVtLlhtbCAiKSkKKyAgICAgICAgICAg ICAgICAgICAgICAoKCJGYWNhZGVzL1N5c3RlbVxcLlJ1bnRpbWVcXC5TZXJpYWxpemF0aW9uLlht bF9SRUZTIDo9ICIgYWxsKQorICAgICAgICAgICAgICAgICAgICAgICAoc3RyaW5nLWFwcGVuZCBh bGwgIlN5c3RlbS5YbWwgIikpKQorICAgICAgICAgICAgICAgICAgICAoYXBwbHkgaW52b2tlICJt YWtlIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgYCgsQChpZiBwYXJhbGxlbC1idWlsZD8K KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYCgiLWoiICwobnVtYmVyLT5zdHJp bmcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHBhcmFsbGVs LWpvYi1jb3VudCkpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnKCkpCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICwoc3RyaW5nLWFwcGVuZCAiQ1NDPU1PTk9fUEFU SD0iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b3AgIi9t Y3MvY2xhc3MvbGliL2J1aWxkIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIiAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICB0b3AgIi9ydW50aW1lL21vbm8td3JhcHBlciIKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICIgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgdG9wICIvbWNzL2NsYXNzL2xpYi9idWlsZC9tY3MuZXhlIikKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgLEBtYWtlLWZsYWdzKSkpKSkpKSkpKSkpCi0tIAoyLjQ1LjIK Cg== --b1=_tnCtFHx6yIKuYDXqbApeYGjbdIBbQ4owcmVz3FJkVmc Content-Type: text/x-patch; name=v2-0014-gnu-Add-mono-5.2.0.patch Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=v2-0014-gnu-Add-mono-5.2.0.patch RnJvbSA2YzNhYWQ3MGJhNjU3NmZjNjEyOTY3ZTY4YTBkZjRjZGNjNWYzYWNjIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiB1bm11c2ggPHVubXVzaEBoYXNoYmFuZy5zaD4KRGF0ZTogVHVl LCAyNiBOb3YgMjAyNCAxMzozMzozOApTdWJqZWN0OiBbUEFUQ0ggdjIgMTQvMjFdIGdudTogQWRk IG1vbm8tNS4yLjAuCgoqIGdudS9wYWNrYWdlcy9kb3RuZXQuc2NtCiAgKG1vbm8tNS4yLjAtZXh0 ZXJuYWwtcmVwby1zcGVjcywgbW9uby01LjIuMCk6IE5ldyB2YXJpYWJsZXMuCgotLS0KIGdudS9w YWNrYWdlcy9kb3RuZXQuc2NtIHwgNjcgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysKIDEgZmlsZSBjaGFuZ2VkLCA2NyBpbnNlcnRpb25zKCspCgpkaWZmIC0tZ2l0IGEv Z251L3BhY2thZ2VzL2RvdG5ldC5zY20gYi9nbnUvcGFja2FnZXMvZG90bmV0LnNjbQppbmRleCBl NzBhNmYwZTU1Zi4uYmYxNDE0MzY4YjMgMTAwNjQ0Ci0tLSBhL2dudS9wYWNrYWdlcy9kb3RuZXQu c2NtCisrKyBiL2dudS9wYWNrYWdlcy9kb3RuZXQuc2NtCkBAIC0xMDkyLDMgKzEwOTIsNzAgQEAg KGRlZmluZS1wdWJsaWMgbW9uby01LjEuMAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIyRA cHJlcGFyZS1tb25vLXNvdXJjZS0wKSkpKQogICAgIChuYXRpdmUtaW5wdXRzIChtb2RpZnktaW5w dXRzIChwYWNrYWdlLW5hdGl2ZS1pbnB1dHMgbW9uby01LjAuMSkKICAgICAgICAgICAgICAgICAg ICAgIChyZXBsYWNlICJtb25vIiBtb25vLTUuMC4xKSkpKSkKKworKGRlZmluZSBtb25vLTUuMi4w LWV4dGVybmFsLXJlcG8tc3BlY3MKKyAgJygoImFzcG5ldHdlYnN0YWNrIiAgICAgICAgICAgICAg ImU3N2IxMmU2Y2M1ZWQyNjBhOTg0NDdmNjA5ZTg4NzMzN2U0NGUyOTkiCisgICAgICIwcmtzMzQ0 cXI0Zm1wM2ZzMTI2NGQycWttbTM0OG04ZDFramQ3ejRsOTRpaWlyd24xZnExIikKKyAgICAoKCJy ZWZlcmVuY2UtYXNzZW1ibGllcyIgImJpbmFyeS1yZWZlcmVuY2UtYXNzZW1ibGllcyIpCisgICAg ICIxNDJjYmViNjJmZmFiZjFkZDljMTQxNGQ4ZGQ3NmY5M2JjYmVkMGMyIgorICAgICAiMXdrZDU4 OWhnYjE2bTV6dm1wOXliNTdhZ3l5cnlhYTFqajh2aGw0dzIwaTJocDIyd2FkOSIpCisgICAgKCJi b2NrYnVpbGQiICAgICAgICAgICAgICAgICAgICI0NWFhMTQyZmEzMjJmNWI0MTA1MWU3ZjQwMDA4 ZjAzMzQ2YTFlMTE5IgorICAgICAiMXNqbGd6aDNocTI1MWs3MjlhMXB4NzA3YzFxMmduZmF5Z2hn eDF6NXF5ZGRueWF4bmEyMCIpCisgICAgKCJib3Jpbmdzc2wiICAgICAgICAgICAgICAgICAgICIz ZTA3NzBlMTg4MzU3MTQ3MDg4NjBiYTlmZTFhZjA0YTkzMjk3MWZmIgorICAgICAiMTM5YTBnbDkx YTUyazJyNm5hNmlhbHprcXlrYWoxcms4OHpqcmthejNzZHh4N25tbWc2eSIpCisgICAgKCJidWls ZHRvb2xzIiAgICAgICAgICAgICAgICAgICJiNWNjNmU2YWI1ZjcxZjZjMGJlN2I3MzAwNThiNDI2 ZTkyNTI4NDc5IgorICAgICAiMGxkajVsNHA0cThqOWRoazBuaWZyM20waTY0Y3N2YjU2d2xjMnhk NHp5ODBzZmdtam4wNiIpCisgICAgKCJjZWNpbCIgICAgICAgICAgICAgICAgICAgICAgICIzNjJl MmJiMDBmYTY5M2QwNGMyZDE0MGE0Y2QzMTNlYjgyYzc4ZDk1IgorICAgICAiMGJ2YWF2bG5sZHJq YThpeGI2NmJnMzNrejA1OTUwdm01c2s0cHowazB6amdzcGZncGN2ZCIpCisgICAgKCgiY2VjaWwi ICJjZWNpbC1sZWdhY3kiKSAgICAgICIzM2Q1MGI4NzRmZDUyNzExOGJjMzYxZDgzZGUzZDQ5NGU4 YmI1NWUxIgorICAgICAiMXA0aGwxNzk2aWIyNnlreWY1c25sNmNqMGx4MHY3bWpoMHhxaGp3NnFk aDc1M25zanloYiIpCisgICAgKCJjb3JlZngiICAgICAgICAgICAgICAgICAgICAgICI3ODM2MGIy MmU3MWI3MGRlMWQ4Y2M5NTg4Y2I0ZWYwMDQwNDQ5YzMxIgorICAgICAiMXdyc3phZnlhcjdxMWNk ZmJhNjh4ZDZiNGQ1NHAzaWltMmN6bXhibG1zMXl3MTl5Y3FtNyIpCisgICAgKCJjb3JlcnQiICAg ICAgICAgICAgICAgICAgICAgICJlZDYyOTZkZmJiODhkNjZmMDg2MDFjMDEzY2FlZTMwYzg4YzQx YWZhIgorICAgICAiMTc5cTFhaXE0NGJ6ZGNrZzF4cW02aXd5eDgzNWNwNjE2MXc1dmdzZnJnYncw cDNraWR4ciIpCisgICAgKCJpa2Rhc20iICAgICAgICAgICAgICAgICAgICAgICI4OGI2N2M0MmNh OGI3ZDU4MTQxYzE3NmI0Njc0OTgxOWJmY2VmMTY2IgorICAgICAiMGIwYjFkaGc4MHI2NDBuODFp cWF3d2t4aTFrMjg5bjR6eGpmajBsZGQ5cmt2Znh2bHdhdyIpCisgICAgKCgiaWt2bS1mb3JrIiAi aWt2bSIpICAgICAgICAgICI3YzFlNjFiZWM4YzA2OWIyY2M5ZTIxNGMzMDk0YjE0N2Q3NmJiZjgy IgorICAgICAiMHZtYzVyNGo3NmhrZDR6aXMxNzY5cHBkbDFoMWw3ejhjbGQweTRwMW02NG44Nmdo a3pmbiIpCisgICAgKCJsaW5rZXIiICAgICAgICAgICAgICAgICAgICAgICJjNzQ1MGNhMjY2OWJl Y2RkZmZkZWE3ZGNkY2MwNjY5MmU1Nzk4OWUxIgorICAgICAiMHZkMXZ3NmhxbTFwMTI3bTYwNzlw OW40eHJja3JmNGlha3ZqNDFobnFmd3dzOTR3NW12MSIpCisgICAgKCJMdWNlbmUuTmV0LkxpZ2h0 IiAgICAgICAgICAgICI4NTk3OGI3ZWI5NDczOGY1MTY4MjQzNDEyMTNkNWU5NDA2MGY1Mjg0Igor ICAgICAiMGQxMThpNTJtM2EwdmZqaGZjaTgxYTJrYzRxdm5qMjNnczAyaHJ2ZHJmcGQxcTkyZnlp aSIpCisgICAgKCJOZXd0b25zb2Z0Lkpzb24iICAgICAgICAgICAgICI0NzFjM2UwODAzYTlmNDBh MGFjYzhhZWNlYjMxZGU2ZmY5M2E1MmM0IgorICAgICAiMGRnbmdkNWhxazZ5aGxnNDBrYWJuNnFk bmtubTMyemN4OXE2Ym0ydzMxY3Nuc2s1OTc4cyIpCisgICAgKCgiTnVHZXQuQnVpbGRUYXNrcyIg Im51Z2V0LWJ1aWxkdGFza3MiKQorICAgICAiOGQzMDc0NzJlYTIxNGYyYjU5NjM2NDMxZjc3MTg5 NGRiY2JhNzI1OCIKKyAgICAgIjFoMWZybmoweDhrN2IyOWljNGppc2NoMHZscG1zbWdoanc1NTRw ejI3N2YybnhhaWRsamoiKQorICAgICgoIk5Vbml0TGl0ZSIgIm51bml0LWxpdGUiKSAgICAiNjkw NjAzYmVhOThhYWU2OWZjYTlhNjUxMzBkODg1OTFiYzZjYWJlZSIKKyAgICAgIjFmODQ1eXNqenMz eWQ5Z2N5d3c2NmRua3g0ODR6NWZrbmI4bDB4ejc0c2pteGsybW5nd2MiKQorICAgIDs7ICgicm9z bHluLWJpbmFyaWVzIiAgICAgICAgICAiZGNiMGEwNTM0ZDUxMDRlYWY5NDVkM2QxZjMxOWRjMzMw NDRiN2JiZSIKKyAgICA7OyAgIiIpCisgICAgKCJyeCIgICAgICAgICAgICAgICAgICAgICAgICAg ICJiMjlhNGIwZmRhNjA5ZTBhZjMzZmY1NGVkMTM2NTJiNmNjZjBlMDVlIgorICAgICAiMW4xando bXNia2N2MmQ4MDZpbW1jcHprYjcycnowNHh5OThteXczNTVhOHc1YWgyNXlpdiIpCisgICAgOzsg KCJ4dW5pdC1iaW5hcmllcyIgICAgICAgICAgICJiOGUyMGQyNjViMzY4ZGQ2MjUyNzAzZDVhZmQw MzhkMGIwMjhlMzg4IgorICAgIDs7ICAiIikKKyAgICApKQorCisoZGVmaW5lLXB1YmxpYyBtb25v LTUuMi4wCisgIChwYWNrYWdlCisgICAgKGluaGVyaXQgbW9uby01LjEuMCkKKyAgICAodmVyc2lv biAiNS4yLjAuMjI0IikKKyAgICAobmFtZSAibW9ubyIpCisgICAgKHNvdXJjZSAob3JpZ2luCisg ICAgICAgICAgICAgIChtZXRob2QgZ2l0LWZldGNoKQorICAgICAgICAgICAgICAodXJpCisgICAg ICAgICAgICAgICAoZ2l0LXJlZmVyZW5jZQorICAgICAgICAgICAgICAgICh1cmwgImh0dHBzOi8v Z2l0bGFiLndpbmVocS5vcmcvbW9uby9tb25vLmdpdCIpCisgICAgICAgICAgICAgICAgKGNvbW1p dCAibW9uby01LjIuMC4yMjQiKSkpCisgICAgICAgICAgICAgIChmaWxlLW5hbWUgKGdpdC1maWxl LW5hbWUgbmFtZSB2ZXJzaW9uKSkKKyAgICAgICAgICAgICAgKHNoYTI1NgorICAgICAgICAgICAg ICAgKGJhc2UzMgorICAgICAgICAgICAgICAgICIwenNnZnF5amtwaXgwNWd2Z3ZocXl5cWN3Y2pw NXhsdmN5djQ3MXEzMnFmMzA3ZGNjYmZhIikpCisgICAgICAgICAgICAgIChtb2R1bGVzICcoKGd1 aXggYnVpbGQgdXRpbHMpCisgICAgICAgICAgICAgICAgICAgICAgICAgKGljZS05IHN0cmluZy1m dW4pKSkKKyAgICAgICAgICAgICAgKHNuaXBwZXQgI34oYmVnaW4KKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICMkKGFkZC1leHRlcm5hbC1yZXBvcworICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgbW9uby01LjIuMC1leHRlcm5hbC1yZXBvLXNwZWNzKQorICAgICAgICAgICAgICAgICAg ICAgICAgICAgIyRAcHJlcGFyZS1tb25vLXNvdXJjZS0wKSkpKQorICAgIChuYXRpdmUtaW5wdXRz IChtb2RpZnktaW5wdXRzIChwYWNrYWdlLW5hdGl2ZS1pbnB1dHMgbW9uby01LjEuMCkKKyAgICAg ICAgICAgICAgICAgICAgIChyZXBsYWNlICJtb25vIiBtb25vLTUuMS4wKSkpKSkKLS0gCjIuNDUu MgoK --b1=_tnCtFHx6yIKuYDXqbApeYGjbdIBbQ4owcmVz3FJkVmc Content-Type: text/x-patch; name=v2-0017-gnu-Add-mono-5.8.0.patch Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=v2-0017-gnu-Add-mono-5.8.0.patch RnJvbSAwNjZhNDAzNWNlMjg1ZThmN2ZiMzA1NzdiMzE0M2E5MjFhNTI2Nzk3IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiB1bm11c2ggPHVubXVzaEBoYXNoYmFuZy5zaD4KRGF0ZTogV2Vk LCAyNyBOb3YgMjAyNCAwMDo0NzowOQpTdWJqZWN0OiBbUEFUQ0ggdjIgMTcvMjFdIGdudTogQWRk IG1vbm8tNS44LjAuCgoqIGdudS9wYWNrYWdlcy9kb3RuZXQuc2NtCiAgKG1vbm8tNS44LjAtZXh0 ZXJuYWwtcmVwby1zcGVjcywgbW9uby01LjguMCk6IE5ldyB2YXJpYWJsZXMuCiogZ251L3BhY2th Z2VzL3BhdGNoZXMvbW9uby01LjguMC1wYXRjaGVzLnBhdGNoOiBOZXcgcGF0Y2guCiogZ251L2xv Y2FsLm1rIChkaXN0X3BhdGNoX0RBVEEpOiBSZWdpc3RlciBuZXcgcGF0Y2guCi0tLQogZ251L2xv Y2FsLm1rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAxICsKIGdudS9wYWNr YWdlcy9kb3RuZXQuc2NtICAgICAgICAgICAgICAgICAgICAgICB8IDEzMCArKysrKysrKysrKysr KysrKysKIGdudS9wYWNrYWdlcy9wYXRjaGVzL21vbm8tNS44LjAtcGF0Y2hlcy5wYXRjaCB8ICA2 MCArKysrKysrKwogMyBmaWxlcyBjaGFuZ2VkLCAxOTEgaW5zZXJ0aW9ucygrKQogY3JlYXRlIG1v ZGUgMTAwNjQ0IGdudS9wYWNrYWdlcy9wYXRjaGVzL21vbm8tNS44LjAtcGF0Y2hlcy5wYXRjaAoK ZGlmZiAtLWdpdCBhL2dudS9sb2NhbC5tayBiL2dudS9sb2NhbC5tawppbmRleCAyYTVjZWNhZWZl NC4uNzEwZDZkMGE1NjggMTAwNjQ0Ci0tLSBhL2dudS9sb2NhbC5taworKysgYi9nbnUvbG9jYWwu bWsKQEAgLTE4MzMsNiArMTgzMyw3IEBAIGRpc3RfcGF0Y2hfREFUQSA9CQkJCQkJXAogICAlRCUv cGFja2FnZXMvcGF0Y2hlcy9tb25vLTIuMTEuNC1maXhlcy5wYXRjaAkJCVwKICAgJUQlL3BhY2th Z2VzL3BhdGNoZXMvbW9uby00LjkuMC1maXgtcnVudGltZW1ldGFkYXRhdmVyc2lvbi5wYXRjaAkJ XAogICAlRCUvcGFja2FnZXMvcGF0Y2hlcy9tb25vLTUuNC4wLXBhdGNoZXMucGF0Y2gJCVwKKyAg JUQlL3BhY2thZ2VzL3BhdGNoZXMvbW9uby01LjguMC1wYXRjaGVzLnBhdGNoCQlcCiAgICVEJS9w YWNrYWdlcy9wYXRjaGVzL21vc2FpY2F0Y2hlci11bmJ1bmRsZS1odHNsaWIucGF0Y2gJXAogICAl RCUvcGFja2FnZXMvcGF0Y2hlcy9tcnJlc2N1ZS1zdXBwb3J0LWxvdmUtMTEucGF0Y2gJCVwKICAg JUQlL3BhY2thZ2VzL3BhdGNoZXMvbXRvb2xzLW1mb3JtYXQtdW5pbml0aWFsaXplZC5wYXRjaAlc CmRpZmYgLS1naXQgYS9nbnUvcGFja2FnZXMvZG90bmV0LnNjbSBiL2dudS9wYWNrYWdlcy9kb3Ru ZXQuc2NtCmluZGV4IDA5MGRiMWU4ZThlLi4wOGYxMDg2YTVjMCAxMDA2NDQKLS0tIGEvZ251L3Bh Y2thZ2VzL2RvdG5ldC5zY20KKysrIGIvZ251L3BhY2thZ2VzL2RvdG5ldC5zY20KQEAgLTEzMzAs MyArMTMzMCwxMzMgQEAgKGRlZmluZS1wdWJsaWMgbW9uby1wcmUtNS44LjAKICAgICAgICAgICgo IzpwaGFzZXMgcGhhc2VzICN+JXN0YW5kYXJkLXBoYXNlcykKICAgICAgICAgICAjfihtb2RpZnkt cGhhc2VzICMkcGhhc2VzCiAgICAgICAgICAgICAgIChkZWxldGUgJ3BhdGNoLXN1Yi1hdXRvZ2Vu LnNoLXNoZWJhbmcpKSkpKSkpKQorCisoZGVmaW5lIG1vbm8tNS44LjAtZXh0ZXJuYWwtcmVwby1z cGVjcworICAnKCgiYXBpLWRvYy10b29scyIgICAgICAgICAgICAgICAiZDAzZTgxOTgzOGM2MjQx ZjkyZjkwNjU1Y2I0NDhjYzQ3YzllODc5MSIKKyAgICAgIjFyaWtpNzlmM2lnM2N4aWd2aXNzODFk ejYwMWhuOTJhMWdpZmdsbTBtempiczc2c2YzZmoiCisgICAgICM6cmVjdXJzaXZlPyAjdCkKKyAg ICAoImFwaS1zbmFwc2hvdCIgICAgICAgICAgICAgICAgIjY2NjhjODBhOTQ5OTIxOGMwYjhjYzQx ZjQ4YTllMjQyNTg3ZGY3NTYiCisgICAgICIwdmJ3YndhMWhyNGpsajcyODN3OGJrM3Y1aThzNDNo ODQxM3IycGtoNGhmMzhiMnJrczdkIikKKyAgICAoImFzcG5ldHdlYnN0YWNrIiAgICAgICAgICAg ICAgImU3N2IxMmU2Y2M1ZWQyNjBhOTg0NDdmNjA5ZTg4NzMzN2U0NGUyOTkiCisgICAgICIwcmtz MzQ0cXI0Zm1wM2ZzMTI2NGQycWttbTM0OG04ZDFramQ3ejRsOTRpaWlyd24xZnExIikKKyAgICAo KCJyZWZlcmVuY2UtYXNzZW1ibGllcyIgImJpbmFyeS1yZWZlcmVuY2UtYXNzZW1ibGllcyIpCisg ICAgICJlMDQ4ZmU0YTg4ZDIzN2QxMDVhZTAyZmUwMzYzYTY4Mjk2MDk5MzYyIgorICAgICAiMGk4 N2kzeDY5NGY0ZzhzMmZsZmx2MGFoODhibHhkczdnYml5cndybXNjcWRqc2lmaHk0OSIpCisgICAg KCJib2NrYnVpbGQiICAgICAgICAgICAgICAgICAgICJjYjQ1NDU0MDlkYWZlMTZkZmU4NmM3ZDhl NjU0OGE2OWMzNjllMmEyIgorICAgICAiMHN2ZGZ2NjFkNnBwd2Q0emdraTEyOXI5cHJmNzVmbnNx aWhuYTI1M3pmd2ZwenBpbmd4NyIpCisgICAgKCJib3Jpbmdzc2wiICAgICAgICAgICAgICAgICAg ICIzZTA3NzBlMTg4MzU3MTQ3MDg4NjBiYTlmZTFhZjA0YTkzMjk3MWZmIgorICAgICAiMTM5YTBn bDkxYTUyazJyNm5hNmlhbHprcXlrYWoxcms4OHpqcmthejNzZHh4N25tbWc2eSIpCisgICAgKCJj ZWNpbCIgICAgICAgICAgICAgICAgICAgICAgICI3NmZmY2RhYmFlNjYwZTk1ODYyNzNjOWI0MGRi MTgwYTBkYzhkNGM4IgorICAgICAiMGYzYnNmcmkyOHB4bW5iMG02MDc0Ym5tbWpnc3I3Y2ppeHY5 ZmhucDZhaW1odnk0bDVwNCIpCisgICAgKCgiY2VjaWwiICJjZWNpbC1sZWdhY3kiKSAgICAgICIz M2Q1MGI4NzRmZDUyNzExOGJjMzYxZDgzZGUzZDQ5NGU4YmI1NWUxIgorICAgICAiMXA0aGwxNzk2 aWIyNnlreWY1c25sNmNqMGx4MHY3bWpoMHhxaGp3NnFkaDc1M25zanloYiIpCisgICAgKCJjb3Jl ZngiICAgICAgICAgICAgICAgICAgICAgICJiOTY1ZDFmOGI1MjgxNzEyYzQ0MDBlZjI4ZWQ5NzY3 MGZmZDQ4ODBkIgorICAgICAiMHI5aHIwYnMzajNhZ3FpMnBxNG4xa205amZ5Y2FxdnhmNjc1Nnk3 cjVsM3lrcXNkNndzciIpCisgICAgKCJjb3JlcnQiICAgICAgICAgICAgICAgICAgICAgICI0OGRi YTczODAxZTgwNGU4OWYwMDMxMWRhOTlkODczZjljNTUwMjc4IgorICAgICAiMXp3NDdqZjRjd3Ft YWl4eWxpc3hpNzN4ZjZjYXA0MWJ3Zjl2bG1weGFuenhhcWtsenN2ayIpCisgICAgKCJpa2Rhc20i ICAgICAgICAgICAgICAgICAgICAgICI0NjVjMDgxNTU1OGZkNDNjMDExMGY4ZDAwZmMxODZhYzAw NDRhYzZhIgorICAgICAiMHhpcjdwY2dxMDRoYjdzOGc5d3NxZHJ5cGI2bDI5cmFqM2l6NXJjcXpk bTAwNTZrNzV3MiIpCisgICAgKCgiaWt2bS1mb3JrIiAiaWt2bSIpICAgICAgICAgICI4NDdlMDVm Y2VkNWM5YTQxZmYwZjI0ZjFmOWQ0MGQ1YThhNTc3MmMxIgorICAgICAiMWZsOWJtM2xtemY4aXF2 M3g0aXFrejlmYzU0bXdkdnJ4aXN4ZzJudnd3Y3NpNHNhZmZwaSIpCisgICAgKCJsaW5rZXIiICAg ICAgICAgICAgICAgICAgICAgICJjNjIzMzVjMzUwZjM5MDJmZjA0NTkxMTJmN2VmYzhiOTI2ZjRm MTVkIgorICAgICAiMDE1MTkxc2R3OWk3dm5obHN5Y3Y2NXB3OG5uZnBrZDY1azExancxeTliaWti NHgzYWo4eCIpCisgICAgKCJOZXd0b25zb2Z0Lkpzb24iICAgICAgICAgICAgICI0NzFjM2UwODAz YTlmNDBhMGFjYzhhZWNlYjMxZGU2ZmY5M2E1MmM0IgorICAgICAiMGRnbmdkNWhxazZ5aGxnNDBr YWJuNnFkbmtubTMyemN4OXE2Ym0ydzMxY3Nuc2s1OTc4cyIpCisgICAgKCgiTnVHZXQuQnVpbGRU YXNrcyIgIm51Z2V0LWJ1aWxkdGFza3MiKQorICAgICAiYjJjMzBiYzgxYjJhNzczM2E0ZWViMjUy YTU1ZjZiNGQ1MGNmYzNhMSIKKyAgICAgIjAxdmFqcmZ4NnkxMmY1MjV4ZGl3ZmJuOXF6bXltMnM2 NXJiaXFweTlkOXh3MHBucTdnYmwiKQorICAgICgoIk5Vbml0TGl0ZSIgIm51bml0LWxpdGUiKSAg ICAiNzY0NjU2Y2RhZmRiM2FjZDI1ZGY4Y2I1MmE0ZTBlYTE0NzYwZmNjZCIKKyAgICAgIjBwYzds azNwOTE2aXM4Y240bmdhcXZqbG1senYzdnZqcHlrc3k0cHZiM3FiNWlpYXcwdnEiKQorICAgIDs7 ICgicm9zbHluLWJpbmFyaWVzIiAgICAgICAgICAiZTQ4NGM3NWUyZWRkM2MzZjE4NzBhMjQ2OGE3 MWE1NjIyMGNmMWY3ZiIKKyAgICA7OyAgIiIpCisgICAgKCJyeCIgICAgICAgICAgICAgICAgICAg ICAgICAgICJiMjlhNGIwZmRhNjA5ZTBhZjMzZmY1NGVkMTM2NTJiNmNjZjBlMDVlIgorICAgICAi MW4xandobXNia2N2MmQ4MDZpbW1jcHprYjcycnowNHh5OThteXczNTVhOHc1YWgyNXlpdiIpCisg ICAgOzsgKCJ4dW5pdC1iaW5hcmllcyIgICAgICAgICAgICJkNDQzM2IwOTcyZjQwY2IzZWZhYTNm YmJhNTI4NjliZGU1ZGY4ZmE4IgorICAgIDs7ICAiIikKKyAgICApKQorCisoZGVmaW5lLXB1Ymxp YyBtb25vLTUuOC4wCisgIChwYWNrYWdlCisgICAgKGluaGVyaXQgbW9uby1wcmUtNS44LjApCisg ICAgKHZlcnNpb24gIjUuOC4wLjEyOSIpCisgICAgKG5hbWUgIm1vbm8iKQorICAgIChzb3VyY2Ug KG9yaWdpbgorICAgICAgICAgICAgICAobWV0aG9kIGdpdC1mZXRjaCkKKyAgICAgICAgICAgICAg KHVyaQorICAgICAgICAgICAgICAgKGdpdC1yZWZlcmVuY2UKKyAgICAgICAgICAgICAgICAodXJs ICJodHRwczovL2dpdGxhYi53aW5laHEub3JnL21vbm8vbW9uby5naXQiKQorICAgICAgICAgICAg ICAgIChjb21taXQgIm1vbm8tNS44LjAuMTI5IikpKQorICAgICAgICAgICAgICAoZmlsZS1uYW1l IChnaXQtZmlsZS1uYW1lIG5hbWUgdmVyc2lvbikpCisgICAgICAgICAgICAgIChzaGEyNTYKKyAg ICAgICAgICAgICAgIChiYXNlMzIKKyAgICAgICAgICAgICAgICAiMDEzMHZkMzN5enA0dzc1NzBx dzl4anEyZzdiMnhtYWNqYnBrbXpycGJoeThhczVoeTR6NiIpKQorICAgICAgICAgICAgICAobW9k dWxlcyAnKChndWl4IGJ1aWxkIHV0aWxzKQorICAgICAgICAgICAgICAgICAgICAgICAgIChpY2Ut OSBzdHJpbmctZnVuKSkpCisgICAgICAgICAgICAgIChzbmlwcGV0ICN+KGJlZ2luCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAjJChhZGQtZXh0ZXJuYWwtcmVwb3MKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIG1vbm8tNS44LjAtZXh0ZXJuYWwtcmVwby1zcGVjcykKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICMkQHByZXBhcmUtbW9uby1zb3VyY2UtMCkpCisgICAgICAgICAg ICAgIChwYXRjaGVzCisgICAgICAgICAgICAgICAoc2VhcmNoLXBhdGNoZXMgIm1vbm8tNS44LjAt cGF0Y2hlcy5wYXRjaCIpKSkpCisgICAgKG5hdGl2ZS1pbnB1dHMgKG1vZGlmeS1pbnB1dHMgKHBh Y2thZ2UtbmF0aXZlLWlucHV0cyBtb25vLXByZS01LjguMCkKKyAgICAgICAgICAgICAgICAgICAg IChyZXBsYWNlICJtb25vIiBtb25vLXByZS01LjguMCkpKQorICAgIChhcmd1bWVudHMKKyAgICAg KHN1YnN0aXR1dGUta2V5d29yZC1hcmd1bWVudHMgKHBhY2thZ2UtYXJndW1lbnRzIG1vbm8tcHJl LTUuOC4wKQorICAgICAgICgoIzpwaGFzZXMgcGhhc2VzICN+JXN0YW5kYXJkLXBoYXNlcykKKyAg ICAgICAgI34obW9kaWZ5LXBoYXNlcyAjJHBoYXNlcworICAgICAgICAgICAgKHJlcGxhY2UgJ2J1 aWxkLXJlZmVyZW5jZS1hc3NlbWJsaWVzCisgICAgICAgICAgICAgIDs7IE1vcmUgcmVmZXJlbmNl cyBuZWVkIHVwZGF0aW5nIHRoaXMgdGltZS4uLgorICAgICAgICAgICAgICAobGFtYmRhKiAoIzpr ZXkgbWFrZS1mbGFncyBwYXJhbGxlbC1idWlsZD8gIzphbGxvdy1vdGhlci1rZXlzKQorICAgICAg ICAgICAgICAgIChsZXQgKCh0b3AgKGdldGN3ZCkpCisgICAgICAgICAgICAgICAgICAgICAgOzsg cGFyYWxsZWwtYnVpbGQ/IG5lZWRzIHRvIGJlIGZhbHNlIGZvciBtb25vJ3MgYnVpbGQKKyAgICAg ICAgICAgICAgICAgICAgICA7OyBwaGFzZSwgYnV0IGl0IHNob3VsZCB3b3JrIGhlcmUuCisgICAg ICAgICAgICAgICAgICAgICAgKHBhcmFsbGVsLWJ1aWxkPyAjdCkpCisgICAgICAgICAgICAgICAg ICAod2l0aC1kaXJlY3RvcnktZXhjdXJzaW9uCisgICAgICAgICAgICAgICAgICAgICAgImV4dGVy bmFsL2JpbmFyeS1yZWZlcmVuY2UtYXNzZW1ibGllcyIKKyAgICAgICAgICAgICAgICAgICAgKHN1 YnN0aXR1dGUqIChmaW5kLWZpbGVzICIuIiAiXk1ha2VmaWxlJCIpCisgICAgICAgICAgICAgICAg ICAgICAgKCgiQ1NDX0NPTU1PTl9BUkdTIDo9ICIgYWxsKQorICAgICAgICAgICAgICAgICAgICAg ICAoc3RyaW5nLWFwcGVuZCBhbGwgIi1kZWxheXNpZ24rICIpKQorICAgICAgICAgICAgICAgICAg ICAgICgoIklCTVxcLkRhdGFcXC5EQjJfUkVGUyA6PSAiIGFsbCkKKyAgICAgICAgICAgICAgICAg ICAgICAgKHN0cmluZy1hcHBlbmQgYWxsICJTeXN0ZW0uWG1sICIpKQorICAgICAgICAgICAgICAg ICAgICAgICgoIk1vbm9cXC5EYXRhXFwuU3FsaXRlX1JFRlMgOj0gIiBhbGwpCisgICAgICAgICAg ICAgICAgICAgICAgIChzdHJpbmctYXBwZW5kIGFsbCAiU3lzdGVtLlhtbCAiKSkKKyAgICAgICAg ICAgICAgICAgICAgICAoKCJTeXN0ZW1cXC5EYXRhXFwuRGF0YVNldEV4dGVuc2lvbnNfUkVGUyA6 PSAiIGFsbCkKKyAgICAgICAgICAgICAgICAgICAgICAgKHN0cmluZy1hcHBlbmQgYWxsICJTeXN0 ZW0uWG1sICIpKQorICAgICAgICAgICAgICAgICAgICAgICgoIlN5c3RlbVxcLkRhdGFcXC5PcmFj bGVDbGllbnRfUkVGUyA6PSAiIGFsbCkKKyAgICAgICAgICAgICAgICAgICAgICAgKHN0cmluZy1h cHBlbmQgYWxsICJTeXN0ZW0uWG1sICIpKQorICAgICAgICAgICAgICAgICAgICAgICgoIlN5c3Rl bVxcLklkZW50aXR5TW9kZWxfUkVGUyA6PSAiIGFsbCkKKyAgICAgICAgICAgICAgICAgICAgICAg KHN0cmluZy1hcHBlbmQgYWxsICJTeXN0ZW0uQ29uZmlndXJhdGlvbiAiKSkKKyAgICAgICAgICAg ICAgICAgICAgICAoKCJTeXN0ZW1cXC5EZXNpZ25fUkVGUyA6PSAiIGFsbCkKKyAgICAgICAgICAg ICAgICAgICAgICAgKHN0cmluZy1hcHBlbmQgYWxsICJBY2Nlc3NpYmlsaXR5ICIpKQorICAgICAg ICAgICAgICAgICAgICAgICgoIlN5c3RlbVxcLldlYlxcLkV4dGVuc2lvbnNcXC5EZXNpZ25fUkVG UyA6PSAiIGFsbCkKKyAgICAgICAgICAgICAgICAgICAgICAgKHN0cmluZy1hcHBlbmQgYWxsICJT eXN0ZW0uV2luZG93cy5Gb3JtcyBTeXN0ZW0uV2ViICIpKQorICAgICAgICAgICAgICAgICAgICAg ICgoIlN5c3RlbVxcLlNlcnZpY2VNb2RlbFxcLlJvdXRpbmdfUkVGUyA6PSAiIGFsbCkKKyAgICAg ICAgICAgICAgICAgICAgICAgKHN0cmluZy1hcHBlbmQgYWxsICJTeXN0ZW0uWG1sICIpKQorICAg ICAgICAgICAgICAgICAgICAgICgoIlN5c3RlbVxcLldlYlxcLkFic3RyYWN0aW9uc19SRUZTIDo9 ICIgYWxsKQorICAgICAgICAgICAgICAgICAgICAgICAoc3RyaW5nLWFwcGVuZCBhbGwgIlN5c3Rl bSAiKSkKKyAgICAgICAgICAgICAgICAgICAgICAoKCJTeXN0ZW1cXC5SZWFjdGl2ZVxcLldpbmRv d3NcXC5Gb3Jtc19SRUZTIDo9ICIgYWxsKQorICAgICAgICAgICAgICAgICAgICAgICAoc3RyaW5n LWFwcGVuZCBhbGwgIlN5c3RlbSAiKSkKKyAgICAgICAgICAgICAgICAgICAgICAoKCJTeXN0ZW1c XC5XaW5kb3dzXFwuRm9ybXNcXC5EYXRhVmlzdWFsaXphdGlvbl9SRUZTIDo9ICIgYWxsKQorICAg ICAgICAgICAgICAgICAgICAgICAoc3RyaW5nLWFwcGVuZCBhbGwgIkFjY2Vzc2liaWxpdHkgIikp CisgICAgICAgICAgICAgICAgICAgICAgKCgiRmFjYWRlcy9TeXN0ZW1cXC5TZXJ2aWNlTW9kZWxc XC5QcmltaXRpdmVzX1JFRlMgOj0gIiBhbGwpCisgICAgICAgICAgICAgICAgICAgICAgIChzdHJp bmctYXBwZW5kIGFsbCAiU3lzdGVtLlhtbCAiKSkKKyAgICAgICAgICAgICAgICAgICAgICAoKCJG YWNhZGVzL1N5c3RlbVxcLkR5bmFtaWNcXC5SdW50aW1lX1JFRlMgOj0gIiBhbGwpCisgICAgICAg ICAgICAgICAgICAgICAgIChzdHJpbmctYXBwZW5kIGFsbCAiU3lzdGVtICIpKQorICAgICAgICAg ICAgICAgICAgICAgICgoIkZhY2FkZXMvU3lzdGVtXFwuWG1sXFwuWERvY3VtZW50X1JFRlMgOj0g IiBhbGwpCisgICAgICAgICAgICAgICAgICAgICAgIChzdHJpbmctYXBwZW5kIGFsbCAiU3lzdGVt LlhtbCAiKSkKKyAgICAgICAgICAgICAgICAgICAgICAoKCJGYWNhZGVzL1N5c3RlbVxcLlJ1bnRp bWVcXC5TZXJpYWxpemF0aW9uLlhtbF9SRUZTIDo9ICIgYWxsKQorICAgICAgICAgICAgICAgICAg ICAgICAoc3RyaW5nLWFwcGVuZCBhbGwgIlN5c3RlbS5YbWwgIikpCisgICAgICAgICAgICAgICAg ICAgICAgKCgiRmFjYWRlcy9TeXN0ZW1cXC5EYXRhXFwuQ29tbW9uX1JFRlMgOj0gIiBhbGwpCisg ICAgICAgICAgICAgICAgICAgICAgIChzdHJpbmctYXBwZW5kIGFsbCAiU3lzdGVtIFN5c3RlbS5Y bWwgIikpKQorICAgICAgICAgICAgICAgICAgICAoYXBwbHkgaW52b2tlICJtYWtlIgorICAgICAg ICAgICAgICAgICAgICAgICAgICAgYCgsQChpZiBwYXJhbGxlbC1idWlsZD8KKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgYCgiLWoiICwobnVtYmVyLT5zdHJpbmcKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHBhcmFsbGVsLWpvYi1jb3VudCkp KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnKCkpCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICwoc3RyaW5nLWFwcGVuZCAiQ1NDPU1PTk9fUEFUSD0iCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b3AgIi9tY3MvY2xhc3MvbGli L2J1aWxkIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAi CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b3AgIi9ydW50 aW1lL21vbm8td3JhcHBlciIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICIgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg dG9wICIvbWNzL2NsYXNzL2xpYi9idWlsZC9tY3MuZXhlIikKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgLEBtYWtlLWZsYWdzKSkpKSkpKSkpKSkpCmRpZmYgLS1naXQgYS9nbnUvcGFja2Fn ZXMvcGF0Y2hlcy9tb25vLTUuOC4wLXBhdGNoZXMucGF0Y2ggYi9nbnUvcGFja2FnZXMvcGF0Y2hl cy9tb25vLTUuOC4wLXBhdGNoZXMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw MDAwMDAwMDAuLmY3M2M1MWQ5MmY1Ci0tLSAvZGV2L251bGwKKysrIGIvZ251L3BhY2thZ2VzL3Bh dGNoZXMvbW9uby01LjguMC1wYXRjaGVzLnBhdGNoCkBAIC0wLDAgKzEsNjAgQEAKK2RpZmYgLS1n aXQgYS9tY3MvY2xhc3MvU3lzdGVtL01vbm8uQXBwbGVUbHMvQXBwbGVUbHNDb250ZXh0LmNzIGIv bWNzL2NsYXNzL1N5c3RlbS9Nb25vLkFwcGxlVGxzL0FwcGxlVGxzQ29udGV4dC5jcworaW5kZXgg MGNjNjllNDc2NDguLjUxZGVkNzEzYmE2IDEwMDY0NAorLS0tIGEvbWNzL2NsYXNzL1N5c3RlbS9N b25vLkFwcGxlVGxzL0FwcGxlVGxzQ29udGV4dC5jcworKysrIGIvbWNzL2NsYXNzL1N5c3RlbS9N b25vLkFwcGxlVGxzL0FwcGxlVGxzQ29udGV4dC5jcworQEAgLTc3NSw3ICs3NzUsNyBAQCBuYW1l c3BhY2UgTW9uby5BcHBsZVRscworIAkJW0RsbEltcG9ydCAoU2VjdXJpdHlMaWJyYXJ5KV0KKyAJ CWV4dGVybiB1bnNhZmUgc3RhdGljIC8qIE9TU3RhdHVzICovIFNzbFN0YXR1cyBTU0xSZWFkICgv KiBTU0xDb250ZXh0UmVmICovIEludFB0ciBjb250ZXh0LCAvKiBjb25zdCB2b2lkKiAqLyBieXRl KiBkYXRhLCAvKiBzaXplX3QgKi8gSW50UHRyIGRhdGFMZW5ndGgsIC8qIHNpemVfdCogKi8gb3V0 IEludFB0ciBwcm9jZXNzZWQpOworIAorLQkJcHVibGljIG92ZXJyaWRlIHVuc2FmZSAoaW50IHJl dCwgYm9vbCB3YW50TW9yZSkgUmVhZCAoYnl0ZVtdIGJ1ZmZlciwgaW50IG9mZnNldCwgaW50IGNv dW50KQorKwkJcHVibGljIG92ZXJyaWRlIHVuc2FmZSBTeXN0ZW0uVmFsdWVUdXBsZTxpbnQsIGJv b2w+IFJlYWQgKGJ5dGVbXSBidWZmZXIsIGludCBvZmZzZXQsIGludCBjb3VudCkKKyAJCXsKKyAJ CQlpZiAoSW50ZXJsb2NrZWQuRXhjaGFuZ2UgKHJlZiBwZW5kaW5nSU8sIDEpID09IDEpCisgCQkJ CXRocm93IG5ldyBJbnZhbGlkT3BlcmF0aW9uRXhjZXB0aW9uICgpOworQEAgLTgxNiw3ICs4MTYs NyBAQCBuYW1lc3BhY2UgTW9uby5BcHBsZVRscworIAkJW0RsbEltcG9ydCAoU2VjdXJpdHlMaWJy YXJ5KV0KKyAJCWV4dGVybiB1bnNhZmUgc3RhdGljIC8qIE9TU3RhdHVzICovIFNzbFN0YXR1cyBT U0xXcml0ZSAoLyogU1NMQ29udGV4dFJlZiAqLyBJbnRQdHIgY29udGV4dCwgLyogY29uc3Qgdm9p ZCogKi8gYnl0ZSogZGF0YSwgLyogc2l6ZV90ICovIEludFB0ciBkYXRhTGVuZ3RoLCAvKiBzaXpl X3QqICovIG91dCBJbnRQdHIgcHJvY2Vzc2VkKTsKKyAKKy0JCXB1YmxpYyBvdmVycmlkZSB1bnNh ZmUgKGludCByZXQsIGJvb2wgd2FudE1vcmUpIFdyaXRlIChieXRlW10gYnVmZmVyLCBpbnQgb2Zm c2V0LCBpbnQgY291bnQpCisrCQlwdWJsaWMgb3ZlcnJpZGUgdW5zYWZlIFN5c3RlbS5WYWx1ZVR1 cGxlPGludCwgYm9vbD4gV3JpdGUgKGJ5dGVbXSBidWZmZXIsIGludCBvZmZzZXQsIGludCBjb3Vu dCkKKyAJCXsKKyAJCQlpZiAoSW50ZXJsb2NrZWQuRXhjaGFuZ2UgKHJlZiBwZW5kaW5nSU8sIDEp ID09IDEpCisgCQkJCXRocm93IG5ldyBJbnZhbGlkT3BlcmF0aW9uRXhjZXB0aW9uICgpOworZGlm ZiAtLWdpdCBhL21jcy9jbGFzcy9TeXN0ZW0vTW9uby5CdGxzL01vbm9CdGxzQ29udGV4dC5jcyBi L21jcy9jbGFzcy9TeXN0ZW0vTW9uby5CdGxzL01vbm9CdGxzQ29udGV4dC5jcworaW5kZXggNTU5 ZGI0YWNhNWQuLmI3MDIzOWM1MTYzIDEwMDY0NAorLS0tIGEvbWNzL2NsYXNzL1N5c3RlbS9Nb25v LkJ0bHMvTW9ub0J0bHNDb250ZXh0LmNzCisrKysgYi9tY3MvY2xhc3MvU3lzdGVtL01vbm8uQnRs cy9Nb25vQnRsc0NvbnRleHQuY3MKK0BAIC0zMDAsNyArMzAwLDcgQEAgbmFtZXNwYWNlIE1vbm8u QnRscworIAkJCXRocm93IG5ldyBOb3RJbXBsZW1lbnRlZEV4Y2VwdGlvbiAoKTsKKyAJCX0KKyAK Ky0JCXB1YmxpYyBvdmVycmlkZSAoaW50IHJldCwgYm9vbCB3YW50TW9yZSkgUmVhZCAoYnl0ZVtd IGJ1ZmZlciwgaW50IG9mZnNldCwgaW50IHNpemUpCisrCQlwdWJsaWMgb3ZlcnJpZGUgU3lzdGVt LlZhbHVlVHVwbGU8aW50LCBib29sPiBSZWFkIChieXRlW10gYnVmZmVyLCBpbnQgb2Zmc2V0LCBp bnQgc2l6ZSkKKyAJCXsKKyAJCQlEZWJ1ZyAoIlJlYWQ6IHswfSB7MX0gezJ9IiwgYnVmZmVyLkxl bmd0aCwgb2Zmc2V0LCBzaXplKTsKKyAKK0BAIC0zMjksNyArMzI5LDcgQEAgbmFtZXNwYWNlIE1v bm8uQnRscworIAkJCX0KKyAJCX0KKyAKKy0JCXB1YmxpYyBvdmVycmlkZSAoaW50IHJldCwgYm9v bCB3YW50TW9yZSkgV3JpdGUgKGJ5dGVbXSBidWZmZXIsIGludCBvZmZzZXQsIGludCBzaXplKQor KwkJcHVibGljIG92ZXJyaWRlIFN5c3RlbS5WYWx1ZVR1cGxlPGludCwgYm9vbD4gV3JpdGUgKGJ5 dGVbXSBidWZmZXIsIGludCBvZmZzZXQsIGludCBzaXplKQorIAkJeworIAkJCURlYnVnICgiV3Jp dGU6IHswfSB7MX0gezJ9IiwgYnVmZmVyLkxlbmd0aCwgb2Zmc2V0LCBzaXplKTsKKyAKK2RpZmYg LS1naXQgYS9tY3MvY2xhc3MvU3lzdGVtL01vbm8uTmV0LlNlY3VyaXR5L01vYmlsZVRsc0NvbnRl eHQuY3MgYi9tY3MvY2xhc3MvU3lzdGVtL01vbm8uTmV0LlNlY3VyaXR5L01vYmlsZVRsc0NvbnRl eHQuY3MKK2luZGV4IDc0NDEwOTc2YTg1Li40NmYwZWI1OWI5YyAxMDA2NDQKKy0tLSBhL21jcy9j bGFzcy9TeXN0ZW0vTW9uby5OZXQuU2VjdXJpdHkvTW9iaWxlVGxzQ29udGV4dC5jcworKysrIGIv bWNzL2NsYXNzL1N5c3RlbS9Nb25vLk5ldC5TZWN1cml0eS9Nb2JpbGVUbHNDb250ZXh0LmNzCitA QCAtMTY1LDkgKzE2NSw5IEBAIG5hbWVzcGFjZSBNb25vLk5ldC5TZWN1cml0eQorIAorIAkJcHVi bGljIGFic3RyYWN0IHZvaWQgRmx1c2ggKCk7CisgCistCQlwdWJsaWMgYWJzdHJhY3QgKGludCBy ZXQsIGJvb2wgd2FudE1vcmUpIFJlYWQgKGJ5dGVbXSBidWZmZXIsIGludCBvZmZzZXQsIGludCBj b3VudCk7CisrCQlwdWJsaWMgYWJzdHJhY3QgU3lzdGVtLlZhbHVlVHVwbGU8aW50LCBib29sPiBS ZWFkIChieXRlW10gYnVmZmVyLCBpbnQgb2Zmc2V0LCBpbnQgY291bnQpOworIAorLQkJcHVibGlj IGFic3RyYWN0IChpbnQgcmV0LCBib29sIHdhbnRNb3JlKSBXcml0ZSAoYnl0ZVtdIGJ1ZmZlciwg aW50IG9mZnNldCwgaW50IGNvdW50KTsKKysJCXB1YmxpYyBhYnN0cmFjdCBTeXN0ZW0uVmFsdWVU dXBsZTxpbnQsIGJvb2w+IFdyaXRlIChieXRlW10gYnVmZmVyLCBpbnQgb2Zmc2V0LCBpbnQgY291 bnQpOworIAorIAkJcHVibGljIGFic3RyYWN0IHZvaWQgU2h1dGRvd24gKCk7CisgCi0tIAoyLjQ1 LjIKCg== --b1=_tnCtFHx6yIKuYDXqbApeYGjbdIBbQ4owcmVz3FJkVmc Content-Type: text/x-patch; name=v2-0013-gnu-Add-mono-5.1.0.patch Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=v2-0013-gnu-Add-mono-5.1.0.patch RnJvbSBiMTZkMzcyMDM4YjY3ZjQzYmU4ZTU2NWIxYzQzNTExMTY3MDE4YTZmIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiB1bm11c2ggPHVubXVzaEBoYXNoYmFuZy5zaD4KRGF0ZTogVHVl LCAyNiBOb3YgMjAyNCAxMzoyOTozMQpTdWJqZWN0OiBbUEFUQ0ggdjIgMTMvMjFdIGdudTogQWRk IG1vbm8tNS4xLjAuCgoqIGdudS9wYWNrYWdlcy9kb3RuZXQuc2NtCiAgKG1vbm8tNS4xLjAtZXh0 ZXJuYWwtcmVwby1zcGVjcywgbW9uby01LjEuMCk6IE5ldyB2YXJpYWJsZXMuCi0tLQogZ251L3Bh Y2thZ2VzL2RvdG5ldC5zY20gfCA2OCArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKwogMSBmaWxlIGNoYW5nZWQsIDY4IGluc2VydGlvbnMoKykKCmRpZmYgLS1naXQgYS9n bnUvcGFja2FnZXMvZG90bmV0LnNjbSBiL2dudS9wYWNrYWdlcy9kb3RuZXQuc2NtCmluZGV4IGZh ZmMxMDY4MjJiLi5lNzBhNmYwZTU1ZiAxMDA2NDQKLS0tIGEvZ251L3BhY2thZ2VzL2RvdG5ldC5z Y20KKysrIGIvZ251L3BhY2thZ2VzL2RvdG5ldC5zY20KQEAgLTEwMjQsMyArMTAyNCw3MSBAQCAo ZGVmaW5lLXB1YmxpYyBtb25vLTUuMC4xCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAiICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHRvcCAiL21jcy9jbGFzcy9saWIvYnVpbGQvbWNzLmV4ZSIpCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICxAbWFrZS1mbGFncykpKSkpKSkpKSkpKQorCisoZGVmaW5lIG1vbm8t NS4xLjAtZXh0ZXJuYWwtcmVwby1zcGVjcworICAnKCgiYXNwbmV0d2Vic3RhY2siICAgICAgICAg ICAgICAiZTc3YjEyZTZjYzVlZDI2MGE5ODQ0N2Y2MDllODg3MzM3ZTQ0ZTI5OSIKKyAgICAgIjBy a3MzNDRxcjRmbXAzZnMxMjY0ZDJxa21tMzQ4bThkMWtqZDd6NGw5NGlpaXJ3bjFmcTEiKQorICAg ICgoInJlZmVyZW5jZS1hc3NlbWJsaWVzIiAiYmluYXJ5LXJlZmVyZW5jZS1hc3NlbWJsaWVzIikK KyAgICAgImZlYmMxMDBmMDMxM2YwZGM5ZDc1ZGQxYmNlYTQ1ZTg3MTM0YjViNTUiCisgICAgICIw bHBqOTExbTJscTIzcjIyZHB5NGkwMmZ5NHlrZjI3ZHg4ZnZxcHhzeGtueXNqMmpsNnk0IikKKyAg ICAoImJvY2tidWlsZCIgICAgICAgICAgICAgICAgICAgImZkMWQ2YzQwNGQ3NjNjOThiNmYwZTY0 ZTk4YWI2NWY5MmU4MDgyNDUiCisgICAgICIwbDJuOTg2M2o1eTIwbHAzZmpjcGJiMGE5amNmazBr cW1uemxzdzIwcWNoZDA1cmpneWIwIikKKyAgICAoImJvcmluZ3NzbCIgICAgICAgICAgICAgICAg ICAgImMwNmFjNmIzM2QzZTc0NDJhZDg3ODQ4OGI5ZDExMDAxMjdlZmY5OTgiCisgICAgICIxODd6 cGkxcnZoOWk2amZjY3d6cXEzMzdyeHhpMXJnbnk2bWpxNzlyMDhkbHJoMGx5ZHpjIikKKyAgICAo ImJ1aWxkdG9vbHMiICAgICAgICAgICAgICAgICAgImI1Y2M2ZTZhYjVmNzFmNmMwYmU3YjczMDA1 OGI0MjZlOTI1Mjg0NzkiCisgICAgICIwbGRqNWw0cDRxOGo5ZGhrMG5pZnIzbTBpNjRjc3ZiNTZ3 bGMyeGQ0enk4MHNmZ21qbjA2IikKKyAgICAoImNlY2lsIiAgICAgICAgICAgICAgICAgICAgICAg IjQ0YmM4NjIyMzUzMGEwN2ZhNzRhYjg3MDA3Y2YyNjRlNTNkNjM0MDAiCisgICAgICIwc21zYThp NDcwOXkxbmt5M2hzaGo3YXl4aGpjYzE3d2xuZmR2aGZheTdseTVkeG1sODRnIikKKyAgICAoKCJj ZWNpbCIgImNlY2lsLWxlZ2FjeSIpICAgICAgIjMzZDUwYjg3NGZkNTI3MTE4YmMzNjFkODNkZTNk NDk0ZThiYjU1ZTEiCisgICAgICIxcDRobDE3OTZpYjI2eWt5ZjVzbmw2Y2owbHgwdjdtamgweHFo anc2cWRoNzUzbnNqeWhiIikKKyAgICAoImNvcmVmeCIgICAgICAgICAgICAgICAgICAgICAgIjYz YzUxZTcyNjI5MjE0OWI0ODY4ZGI3MWJhYTg4M2U1YWQxNzM3NjYiCisgICAgICIxNDA2cmJyYTgz azZndzJkbm5zZnFjZndpeTFoODl5NmxxNjRtYTVyY2ttYjVkcmIwbmc5IikKKyAgICAoImNvcmVy dCIgICAgICAgICAgICAgICAgICAgICAgIjMxZWRhMjYxOTkxZjlmNmMxYWRkMTY4NmI2ZDM3OTlm ODM1YjI5NzgiCisgICAgICIwczBwZDRtOTA3MHhseDIzOGZkaHFmMmIzaXlkMnZ6ZmYzZjBzeGx5 aThzMGxoc3JsOHp2IikKKyAgICAoImlrZGFzbSIgICAgICAgICAgICAgICAgICAgICAgIjg4YjY3 YzQyY2E4YjdkNTgxNDFjMTc2YjQ2NzQ5ODE5YmZjZWYxNjYiCisgICAgICIwYjBiMWRoZzgwcjY0 MG44MWlxYXd3a3hpMWsyODluNHp4amZqMGxkZDlya3ZmeHZsd2F3IikKKyAgICAoKCJpa3ZtLWZv cmsiICJpa3ZtIikgICAgICAgICAgIjdjMWU2MWJlYzhjMDY5YjJjYzllMjE0YzMwOTRiMTQ3ZDc2 YmJmODIiCisgICAgICIwdm1jNXI0ajc2aGtkNHppczE3NjlwcGRsMWgxbDd6OGNsZDB5NHAxbTY0 bjg2Z2hremZuIikKKyAgICAoImxpbmtlciIgICAgICAgICAgICAgICAgICAgICAgIjFiZGNmNmI3 YmZiZTNiMDNmZGFhNzZmNjEyNGQwZDczNzRmMDg2MTUiCisgICAgICIxeHg2czhkY2djejgwM3l2 cWd6aGNnbWoxNmM5czh2cnZ2bDhrNHkweG1hNXc1MWtuMjNrIikKKyAgICAoIkx1Y2VuZS5OZXQu TGlnaHQiICAgICAgICAgICAgIjg1OTc4YjdlYjk0NzM4ZjUxNjgyNDM0MTIxM2Q1ZTk0MDYwZjUy ODQiCisgICAgICIwZDExOGk1Mm0zYTB2ZmpoZmNpODFhMmtjNHF2bmoyM2dzMDJocnZkcmZwZDFx OTJmeWlpIikKKyAgICAoIk5ld3RvbnNvZnQuSnNvbiIgICAgICAgICAgICAgIjQ3MWMzZTA4MDNh OWY0MGEwYWNjOGFlY2ViMzFkZTZmZjkzYTUyYzQiCisgICAgICIwZGduZ2Q1aHFrNnlobGc0MGth Ym42cWRua25tMzJ6Y3g5cTZibTJ3MzFjc25zazU5NzhzIikKKyAgICAoKCJOdUdldC5CdWlsZFRh c2tzIiAibnVnZXQtYnVpbGR0YXNrcyIpCisgICAgICIwNGJkYWI1NWQ4ZGU5ZWRjZjYyODY5NGNm ZDIwMDE1NjFlOGY4ZTYwIgorICAgICAiMW5rbHhheXhrZHNrZzV3bGZsNDRjbmR6cWtsMTh2NTYx cnowM2h3eDd3Ym41dzg5cTc3NSIpCisgICAgKCgiTlVuaXRMaXRlIiAibnVuaXQtbGl0ZSIpICAg ICI2OTA2MDNiZWE5OGFhZTY5ZmNhOWE2NTEzMGQ4ODU5MWJjNmNhYmVlIgorICAgICAiMWY4NDV5 c2p6czN5ZDlnY3l3dzY2ZG5reDQ4NHo1ZmtuYjhsMHh6NzRzam14azJtbmd3YyIpCisgICAgOzsg KCJyb3NseW4tYmluYXJpZXMiICAgICAgICAgICIwZDQxOThiMTI5OWJjYjAxOTk3Mzc0OWRhNGQ0 N2U5MGYxNWExZTQ2IgorICAgIDs7ICAiIikKKyAgICAoInJ4IiAgICAgICAgICAgICAgICAgICAg ICAgICAgImIyOWE0YjBmZGE2MDllMGFmMzNmZjU0ZWQxMzY1MmI2Y2NmMGUwNWUiCisgICAgICIx bjFqd2htc2JrY3YyZDgwNmltbWNwemtiNzJyejA0eHk5OG15dzM1NWE4dzVhaDI1eWl2IikKKyAg ICA7OyAoInh1bml0LWJpbmFyaWVzIiAgICAgICAgICAgImI4ZTIwZDI2NWIzNjhkZDYyNTI3MDNk NWFmZDAzOGQwYjAyOGUzODgiCisgICAgOzsgICIiKQorICAgICkpCisKKyhkZWZpbmUtcHVibGlj IG1vbm8tNS4xLjAKKyAgKHBhY2thZ2UKKyAgICAoaW5oZXJpdCBtb25vLTUuMC4xKQorICAgICh2 ZXJzaW9uICI1LjEuMCIpCisgICAgKG5hbWUgIm1vbm8iKQorICAgIChzb3VyY2UgKG9yaWdpbgor ICAgICAgICAgICAgICAobWV0aG9kIGdpdC1mZXRjaCkKKyAgICAgICAgICAgICAgKHVyaQorICAg ICAgICAgICAgICAgKGdpdC1yZWZlcmVuY2UKKyAgICAgICAgICAgICAgICAodXJsICJodHRwczov L2dpdGxhYi53aW5laHEub3JnL21vbm8vbW9uby5naXQiKQorICAgICAgICAgICAgICAgIChjb21t aXQKKyAgICAgICAgICAgICAgICAgIjZmYWZkMDhiNTA3YzU2ZjExYTJlYjY1NzA3MDNhMzllNWJk YzBhODEiKSkpCisgICAgICAgICAgICAgIChmaWxlLW5hbWUgKGdpdC1maWxlLW5hbWUgbmFtZSB2 ZXJzaW9uKSkKKyAgICAgICAgICAgICAgKHNoYTI1NgorICAgICAgICAgICAgICAgKGJhc2UzMgor ICAgICAgICAgICAgICAgICIxc3hxNDBuYXk1Z2hobWZiZGxuOThpcmkxOXkwaDdxMzZyM3Bxbnht eG5tOTRsaXZ4Mms1IikpCisgICAgICAgICAgICAgIChtb2R1bGVzICcoKGd1aXggYnVpbGQgdXRp bHMpCisgICAgICAgICAgICAgICAgICAgICAgICAgKGljZS05IHN0cmluZy1mdW4pKSkKKyAgICAg ICAgICAgICAgKHNuaXBwZXQgI34oYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICMk KGFkZC1leHRlcm5hbC1yZXBvcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9uby01 LjEuMC1leHRlcm5hbC1yZXBvLXNwZWNzKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIyRA cHJlcGFyZS1tb25vLXNvdXJjZS0wKSkpKQorICAgIChuYXRpdmUtaW5wdXRzIChtb2RpZnktaW5w dXRzIChwYWNrYWdlLW5hdGl2ZS1pbnB1dHMgbW9uby01LjAuMSkKKyAgICAgICAgICAgICAgICAg ICAgIChyZXBsYWNlICJtb25vIiBtb25vLTUuMC4xKSkpKSkKLS0gCjIuNDUuMgoK --b1=_tnCtFHx6yIKuYDXqbApeYGjbdIBbQ4owcmVz3FJkVmc Content-Type: text/x-patch; name=v2-0020-gnu-Add-libgdiplus.patch Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=v2-0020-gnu-Add-libgdiplus.patch RnJvbSA5YTFkYTUwZTNhYmM3MzYyNDA4M2RjOGY4MjdhYTNlYjhmOWNiNDBmIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiB1bm11c2ggPHVubXVzaEBoYXNoYmFuZy5zaD4KRGF0ZTogV2Vk LCAyNyBOb3YgMjAyNCAwMDo1NjowMApTdWJqZWN0OiBbUEFUQ0ggdjIgMjAvMjFdIGdudTogQWRk IGxpYmdkaXBsdXMuCgoqIGdudS9wYWNrYWdlcy9kb3RuZXQuc2NtIChsaWJnZGlwbHVzKTogTmV3 IHZhcmlhYmxlLgotLS0KIGdudS9wYWNrYWdlcy9kb3RuZXQuc2NtIHwgNDQgKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysKIDEgZmlsZSBjaGFuZ2VkLCA0NCBpbnNlcnRp b25zKCspCgpkaWZmIC0tZ2l0IGEvZ251L3BhY2thZ2VzL2RvdG5ldC5zY20gYi9nbnUvcGFja2Fn ZXMvZG90bmV0LnNjbQppbmRleCAzMjFiNzEyMzZkOC4uOWMzOGE4M2NjNjQgMTAwNjQ0Ci0tLSBh L2dudS9wYWNrYWdlcy9kb3RuZXQuc2NtCisrKyBiL2dudS9wYWNrYWdlcy9kb3RuZXQuc2NtCkBA IC0xNjYxLDMgKzE2NjEsNDcgQEAgKGRlZmluZS1wdWJsaWMgbW9uby01LjEwLjAKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgJygpKQogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAiQ1NDPW1jcyIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLEBtYWtlLWZsYWdz KSkpKSkpKSkpKSkpCisKKyhkZWZpbmUtcHVibGljIGxpYmdkaXBsdXMKKyAgKHBhY2thZ2UKKyAg ICAobmFtZSAibGliZ2RpcGx1cyIpCisgICAgKHZlcnNpb24gIjYuMiIpCisgICAgKHNvdXJjZQor ICAgICAob3JpZ2luCisgICAgICAgKG1ldGhvZCBnaXQtZmV0Y2gpCisgICAgICAgKHVyaSAoZ2l0 LXJlZmVyZW5jZQorCSAgICAgKHVybCAiaHR0cHM6Ly9naXRodWIuY29tL21vbm8vbGliZ2RpcGx1 cy5naXQiKQorCSAgICAgKGNvbW1pdCAiOTRhNDk4NzU0ODdlMjk2Mzc2ZjIwOWZlNjRiOTIxYzYw MjBmNzRjMCIpKSkKKyAgICAgICAoZmlsZS1uYW1lIChnaXQtZmlsZS1uYW1lIG5hbWUgdmVyc2lv bikpCisgICAgICAgKHNoYTI1NgorCShiYXNlMzIKKwkgIjFnd21ocmRkcjhrZGxmcHJqcWNkNmdx aXk4cDV2OHNsOTIxNWRiZDk0OWoxbDc2c3psOXYiKSkKKyAgICAgICAobW9kdWxlcyAnKChndWl4 IGJ1aWxkIHV0aWxzKSkpCisgICAgICAgKHNuaXBwZXQgI34oc3Vic3RpdHV0ZSogIi4vTWFrZWZp bGUuYW0iCisgICAgICAgICAgICAgICAgICAgICgoIlxcLi91cGRhdGVfc3VibW9kdWxlc1xcLnNo IikKKyAgICAgICAgICAgICAgICAgICAgICI6IikpKSkpCisgICAgKGJ1aWxkLXN5c3RlbSBnbnUt YnVpbGQtc3lzdGVtKQorICAgIChuYXRpdmUtaW5wdXRzCisgICAgIChsaXN0IGF1dG9tYWtlCisg ICAgICAgICAgIGF1dG9jb25mCisgICAgICAgICAgIGdvb2dsZXRlc3QtMS44CisgICAgICAgICAg IGxpYnRvb2wKKyAgICAgICAgICAgcGtnLWNvbmZpZworICAgICAgICAgICB3aGljaCkpCisgICAg KGlucHV0cyAobGlzdCBjYWlybworICAgICAgICAgICAgICAgICAgZnJlZXR5cGUKKyAgICAgICAg ICAgICAgICAgIGZvbnRjb25maWcKKyAgICAgICAgICAgICAgICAgIGdldHRleHQtbWluaW1hbAor ICAgICAgICAgICAgICAgICAgZ2lmbGliCisgICAgICAgICAgICAgICAgICBnbGliCisgICAgICAg ICAgICAgICAgICBsaWJleGlmCisgICAgICAgICAgICAgICAgICBsaWJqcGVnLXR1cmJvCisgICAg ICAgICAgICAgICAgICBsaWJwbmcKKyAgICAgICAgICAgICAgICAgIGxpYnRpZmYKKyAgICAgICAg ICAgICAgICAgIGxpYngxMSkpCisgICAgKHN5bm9wc2lzICJPcGVuIFNvdXJjZSBpbXBsZW1lbnRh dGlvbiBvZiB0aGUgR0RJKyBBUEkiKQorICAgIChkZXNjcmlwdGlvbiAiTGliZ2RpcGx1cyBpcyB0 aGUgTW9ubyBsaWJyYXJ5IHRoYXQgcHJvdmlkZXMgYQorR0RJKy1jb21wYXRpYmxlIEFQSSBvbiBu b24tV2luZG93cyBvcGVyYXRpbmcgc3lzdGVtcy4gIEl0IHVzZXMgQ2Fpcm8gdG8gZG8KK21vc3Qg b2YgdGhlIGhlYXZ5IGxpZnRpbmcuIikKKyAgICAoaG9tZS1wYWdlICJodHRwczovL2dpdGh1Yi5j b20vbW9uby9saWJnZGlwbHVzIikKKyAgICAobGljZW5zZSBsaWNlbnNlOmV4cGF0KSkpCi0tIAoy LjQ1LjIKCg== --b1=_tnCtFHx6yIKuYDXqbApeYGjbdIBbQ4owcmVz3FJkVmc Content-Type: text/x-patch; name=v2-0016-gnu-Add-mono-pre-5.8.0.patch Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=v2-0016-gnu-Add-mono-pre-5.8.0.patch RnJvbSAyZTMxYjZkZDRmOTc2MGUxY2E3MDgwYzZkNTk2OGRiZGU3ZmU3ZWFhIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiB1bm11c2ggPHVubXVzaEBoYXNoYmFuZy5zaD4KRGF0ZTogVHVl LCAyNiBOb3YgMjAyNCAxMzo0MjozOQpTdWJqZWN0OiBbUEFUQ0ggdjIgMTYvMjFdIGdudTogQWRk IG1vbm8tcHJlLTUuOC4wLgoKKiBnbnUvcGFja2FnZXMvZG90bmV0LnNjbQogIChtb25vLXByZS01 LjguMC1leHRlcm5hbC1yZXBvLXNwZWNzLCBtb25vLXByZS01LjguMCk6IE5ldyB2YXJpYWJsZS4K KiBnbnUvcGFja2FnZXMvcGF0Y2hlcy9jb3JlZngtbW9uby1wcmUtNS44LjAtcGF0Y2hlcy5wYXRj aDogTmV3IHBhdGNoLgoqIGdudS9sb2NhbC5tayAoZGlzdF9wYXRjaF9EQVRBKTogUmVnaXN0ZXIg bmV3IHBhdGNoLgoKLS0tCiBnbnUvbG9jYWwubWsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgfCAgICAxICsKIGdudS9wYWNrYWdlcy9kb3RuZXQuc2NtICAgICAgICAgICAgICAgICAg ICAgICB8ICAgNzkgKwogLi4uL2NvcmVmeC1tb25vLXByZS01LjguMC1wYXRjaGVzLnBhdGNoICAg ICAgIHwgMTM0OSArKysrKysrKysrKysrKysrKwogMyBmaWxlcyBjaGFuZ2VkLCAxNDI5IGluc2Vy dGlvbnMoKykKIGNyZWF0ZSBtb2RlIDEwMDY0NCBnbnUvcGFja2FnZXMvcGF0Y2hlcy9jb3JlZngt bW9uby1wcmUtNS44LjAtcGF0Y2hlcy5wYXRjaAoKZGlmZiAtLWdpdCBhL2dudS9sb2NhbC5tayBi L2dudS9sb2NhbC5tawppbmRleCBiMTEwOGY3OWU0ZS4uMmE1Y2VjYWVmZTQgMTAwNjQ0Ci0tLSBh L2dudS9sb2NhbC5taworKysgYi9nbnUvbG9jYWwubWsKQEAgLTExMTgsNiArMTExOCw3IEBAIGRp c3RfcGF0Y2hfREFUQSA9CQkJCQkJXAogICAlRCUvcGFja2FnZXMvcGF0Y2hlcy9jb29sLXJldHJv LXRlcm0td2N0eXBlLnBhdGNoCQlcCiAgICVEJS9wYWNrYWdlcy9wYXRjaGVzL2NvcS1hdXRvc3Vi c3QtMS44LXJlbW92ZS1kZXByZWNhdGVkLWZpbGVzLnBhdGNoCQlcCiAgICVEJS9wYWNrYWdlcy9w YXRjaGVzL2NvcmVmeC1tb25vLTUuNC4wLXBhdGNoZXMucGF0Y2gJCVwKKyAgJUQlL3BhY2thZ2Vz L3BhdGNoZXMvY29yZWZ4LW1vbm8tcHJlLTUuOC4wLXBhdGNoZXMucGF0Y2gJXAogICAlRCUvcGFj a2FnZXMvcGF0Y2hlcy9jb3JldXRpbHMtZ251bGliLXRlc3RzLnBhdGNoCQlcCiAgICVEJS9wYWNr YWdlcy9wYXRjaGVzL2NwcGNoZWNrLWRpc2FibGUtY2hhci1zaWduZWRuZXNzLXRlc3QucGF0Y2gJ XAogICAlRCUvcGFja2FnZXMvcGF0Y2hlcy9jcHBkYXAtYWRkLUNQUERBUF9VU0VfRVhURVJOQUxf R1RFU1RfUEFDS0FHRS5wYXRjaFwKZGlmZiAtLWdpdCBhL2dudS9wYWNrYWdlcy9kb3RuZXQuc2Nt IGIvZ251L3BhY2thZ2VzL2RvdG5ldC5zY20KaW5kZXggOTQ3NTYyMzdlMjQuLjA5MGRiMWU4ZThl IDEwMDY0NAotLS0gYS9nbnUvcGFja2FnZXMvZG90bmV0LnNjbQorKysgYi9nbnUvcGFja2FnZXMv ZG90bmV0LnNjbQpAQCAtMTI1MSwzICsxMjUxLDgyIEBAIChkZWZpbmUtcHVibGljIG1vbm8tNS40 LjAKICAgICAgICAgICAgICAgICAibW9uby01LjQuMC1wYXRjaGVzLnBhdGNoIikpKSkKICAgICAo bmF0aXZlLWlucHV0cyAobW9kaWZ5LWlucHV0cyAocGFja2FnZS1uYXRpdmUtaW5wdXRzIG1vbm8t NS4yLjApCiAgICAgICAgICAgICAgICAgICAgICAocmVwbGFjZSAibW9ubyIgbW9uby01LjIuMCkp KSkpCisKKyhkZWZpbmUgbW9uby1wcmUtNS44LjAtZXh0ZXJuYWwtcmVwby1zcGVjcworICAnKCgi YXBpLWRvYy10b29scyIgICAgICAgICAgICAgICAiZDAzZTgxOTgzOGM2MjQxZjkyZjkwNjU1Y2I0 NDhjYzQ3YzllODc5MSIKKyAgICAgIjFyaWtpNzlmM2lnM2N4aWd2aXNzODFkejYwMWhuOTJhMWdp ZmdsbTBtempiczc2c2YzZmoiCisgICAgICM6cmVjdXJzaXZlPyAjdCkKKyAgICAoImFwaS1zbmFw c2hvdCIgICAgICAgICAgICAgICAgImU3OTBhOWI3NzAzMWVmMWQ4ZWJmMDkzZWY4ODg0MGVkZWEx MWVkNzMiCisgICAgICIxYzRucDJmcWQ5bXBjMWkxeDhic3hueXBhY3A1OHZrdmdkd3BubXZtbHlq ZHZiajVheDZxIikKKyAgICAoImFzcG5ldHdlYnN0YWNrIiAgICAgICAgICAgICAgImU3N2IxMmU2 Y2M1ZWQyNjBhOTg0NDdmNjA5ZTg4NzMzN2U0NGUyOTkiCisgICAgICIwcmtzMzQ0cXI0Zm1wM2Zz MTI2NGQycWttbTM0OG04ZDFramQ3ejRsOTRpaWlyd24xZnExIikKKyAgICAoKCJyZWZlcmVuY2Ut YXNzZW1ibGllcyIgImJpbmFyeS1yZWZlcmVuY2UtYXNzZW1ibGllcyIpCisgICAgICIxNDJjYmVi NjJmZmFiZjFkZDljMTQxNGQ4ZGQ3NmY5M2JjYmVkMGMyIgorICAgICAiMXdrZDU4OWhnYjE2bTV6 dm1wOXliNTdhZ3l5cnlhYTFqajh2aGw0dzIwaTJocDIyd2FkOSIpCisgICAgKCJib2NrYnVpbGQi ICAgICAgICAgICAgICAgICAgICJiNDQ1MDE3MzA5YWFjNzQxYTI2ZDhjNTFiYjA2MzYyMzQwODRi ZjIzIgorICAgICAiMWp6aHZhdmQxajBuN3N5MXdhY3pnanYwa21yYnIzNWdremQ3NmZobG1xdnN5 MHNyOTY5NSIpCisgICAgKCJib3Jpbmdzc2wiICAgICAgICAgICAgICAgICAgICIzZTA3NzBlMTg4 MzU3MTQ3MDg4NjBiYTlmZTFhZjA0YTkzMjk3MWZmIgorICAgICAiMTM5YTBnbDkxYTUyazJyNm5h NmlhbHprcXlrYWoxcms4OHpqcmthejNzZHh4N25tbWc2eSIpCisgICAgKCJjZWNpbCIgICAgICAg ICAgICAgICAgICAgICAgICJjNzZiYTdiNDEwNDQ3ZmEzNzA5MzE1MGNiN2JjNzcyY2JhMjhhMGFl IgorICAgICAiMHlkaTdybjhhanF5dm5qOWFneW43NGxsYjRxZ2Q5a2dkY2czZ2FqZGZ5YjJrbHh4 NnphOCIpCisgICAgKCgiY2VjaWwiICJjZWNpbC1sZWdhY3kiKSAgICAgICIzM2Q1MGI4NzRmZDUy NzExOGJjMzYxZDgzZGUzZDQ5NGU4YmI1NWUxIgorICAgICAiMXA0aGwxNzk2aWIyNnlreWY1c25s NmNqMGx4MHY3bWpoMHhxaGp3NnFkaDc1M25zanloYiIpCisgICAgKCJjb3JlZngiICAgICAgICAg ICAgICAgICAgICAgICI3NGNjZDhhYTAwZDdkMjcxMTkxY2EzYjljNGY4MTgyNjhkYzM2YzI4Igor ICAgICAiMG5tNDFxZHB2ajYycjhieG5mOTJtN2tpbWptMWk1NDR5Z2RxejVhN3BnYzZ6Zjk5YXM2 aiIKKyAgICAgIzpwYXRjaGVzICgiY29yZWZ4LW1vbm8tcHJlLTUuOC4wLXBhdGNoZXMucGF0Y2gi KSkKKyAgICAoImNvcmVydCIgICAgICAgICAgICAgICAgICAgICAgIjQ4ZGJhNzM4MDFlODA0ZTg5 ZjAwMzExZGE5OWQ4NzNmOWM1NTAyNzgiCisgICAgICIxenc0N2pmNGN3cW1haXh5bGlzeGk3M3hm NmNhcDQxYndmOXZsbXB4YW56eGFxa2x6c3ZrIikKKyAgICAoImlrZGFzbSIgICAgICAgICAgICAg ICAgICAgICAgIjNhZWY5Y2RkNjAxM2ZjMDYyMGExODE3ZjBiMTFkOGZiOTBlZDJlMGYiCisgICAg ICIwNzhjYWkzM3g4YzcxOTY5aXdpN2htYnFkZndwaWNwbWFtMmFnM2syYmtscHZhMnZuc3p2IikK KyAgICAoKCJpa3ZtLWZvcmsiICJpa3ZtIikgICAgICAgICAgIjg0N2UwNWZjZWQ1YzlhNDFmZjBm MjRmMWY5ZDQwZDVhOGE1NzcyYzEiCisgICAgICIxZmw5Ym0zbG16ZjhpcXYzeDRpcWt6OWZjNTRt d2R2cnhpc3hnMm52d3djc2k0c2FmZnBpIikKKyAgICAoImxpbmtlciIgICAgICAgICAgICAgICAg ICAgICAgIjIxZTQ0NWMyNmM2OWFjM2EyZTE0NDFiZWZhMDJkMGJkMTA1ZmY4NDkiCisgICAgICIx aHgzaWswc2c3MHlzYzJ5OGpkanhtMmxqcWwwMDY5aTA1aThmcDFsYWt4N3M3ejdieXdjIikKKyAg ICAoIk5ld3RvbnNvZnQuSnNvbiIgICAgICAgICAgICAgIjQ3MWMzZTA4MDNhOWY0MGEwYWNjOGFl Y2ViMzFkZTZmZjkzYTUyYzQiCisgICAgICIwZGduZ2Q1aHFrNnlobGc0MGthYm42cWRua25tMzJ6 Y3g5cTZibTJ3MzFjc25zazU5NzhzIikKKyAgICAoKCJOdUdldC5CdWlsZFRhc2tzIiAibnVnZXQt YnVpbGR0YXNrcyIpCisgICAgICI4ZDMwNzQ3MmVhMjE0ZjJiNTk2MzY0MzFmNzcxODk0ZGJjYmE3 MjU4IgorICAgICAiMWgxZnJuajB4OGs3YjI5aWM0amlzY2gwdmxwbXNtZ2hqdzU1NHB6Mjc3ZjJu eGFpZGxqaiIpCisgICAgKCgiTlVuaXRMaXRlIiAibnVuaXQtbGl0ZSIpICAgICI2OTA2MDNiZWE5 OGFhZTY5ZmNhOWE2NTEzMGQ4ODU5MWJjNmNhYmVlIgorICAgICAiMWY4NDV5c2p6czN5ZDlnY3l3 dzY2ZG5reDQ4NHo1ZmtuYjhsMHh6NzRzam14azJtbmd3YyIpCisgICAgOzsgKCJyb3NseW4tYmlu YXJpZXMiICAgICAgICAgICI4MGI4NmYzNDBiN2Y2ZmI3YWZlODQ0NDMyMTRlMWNiZDdmZjcwNjIw IgorICAgIDs7ICAiIikKKyAgICAoInJ4IiAgICAgICAgICAgICAgICAgICAgICAgICAgImIyOWE0 YjBmZGE2MDllMGFmMzNmZjU0ZWQxMzY1MmI2Y2NmMGUwNWUiCisgICAgICIxbjFqd2htc2JrY3Yy ZDgwNmltbWNwemtiNzJyejA0eHk5OG15dzM1NWE4dzVhaDI1eWl2IikKKyAgICA7OyAoInh1bml0 LWJpbmFyaWVzIiAgICAgICAgICAgImQ0NDMzYjA5NzJmNDBjYjNlZmFhM2ZiYmE1Mjg2OWJkZTVk ZjhmYTgiCisgICAgOzsgICIiKQorICAgICkpCisKKyhkZWZpbmUtcHVibGljIG1vbm8tcHJlLTUu OC4wCisgIChsZXQgKChjb21taXQgImQwZjUxYjRlODM0MDQyY2ZhNTkzNzQ4YWRhOTQyMDMzYjQ1 OGNjNDAiKQorICAgICAgICAodmVyc2lvbiAiNS40LjAuMjAxIikKKyAgICAgICAgKHJldmlzaW9u ICIwIikpCisgICAgKHBhY2thZ2UKKyAgICAgIChpbmhlcml0IG1vbm8tNS40LjApCisgICAgICAo dmVyc2lvbiAoZ2l0LXZlcnNpb24gdmVyc2lvbiByZXZpc2lvbiBjb21taXQpKQorICAgICAgKG5h bWUgIm1vbm8iKQorICAgICAgKHNvdXJjZSAob3JpZ2luCisgICAgICAgICAgICAgICAgKG1ldGhv ZCBnaXQtZmV0Y2gpCisgICAgICAgICAgICAgICAgKHVyaQorICAgICAgICAgICAgICAgICAoZ2l0 LXJlZmVyZW5jZQorICAgICAgICAgICAgICAgICAgKHVybCAiaHR0cHM6Ly9naXRsYWIud2luZWhx Lm9yZy9tb25vL21vbm8uZ2l0IikKKyAgICAgICAgICAgICAgICAgIChjb21taXQgY29tbWl0KSkp CisgICAgICAgICAgICAgICAgKGZpbGUtbmFtZSAoZ2l0LWZpbGUtbmFtZSBuYW1lIHZlcnNpb24p KQorICAgICAgICAgICAgICAgIChzaGEyNTYKKyAgICAgICAgICAgICAgICAgKGJhc2UzMgorICAg ICAgICAgICAgICAgICAgIjBhejVzeWsxbm45Z2Q1aW1rYm1wYjEzcW05cTZpYnIyZDJrc2R6cHdz YXJrZnlwNGljNTMiKSkKKyAgICAgICAgICAgICAgICAobW9kdWxlcyAnKChndWl4IGJ1aWxkIHV0 aWxzKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgKGljZS05IHN0cmluZy1mdW4pKSkKKyAg ICAgICAgICAgICAgICAoc25pcHBldCAjfihiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAjJChhZGQtZXh0ZXJuYWwtcmVwb3MKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgbW9uby1wcmUtNS44LjAtZXh0ZXJuYWwtcmVwby1zcGVjcykKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIyRAcHJlcGFyZS1tb25vLXNvdXJjZS0wKSkKKyAgICAgICAgICAgICAgICAo cGF0Y2hlcworICAgICAgICAgICAgICAgICAoc2VhcmNoLXBhdGNoZXMgIm1vbm8tNS40LjAtcGF0 Y2hlcy5wYXRjaCIpKSkpCisgICAgICAobmF0aXZlLWlucHV0cyAobW9kaWZ5LWlucHV0cyAocGFj a2FnZS1uYXRpdmUtaW5wdXRzIG1vbm8tNS40LjApCisgICAgICAgICAgICAgICAgICAgICAgIChy ZXBsYWNlICJtb25vIiBtb25vLTUuNC4wKSkpCisgICAgICAoYXJndW1lbnRzCisgICAgICAgKHN1 YnN0aXR1dGUta2V5d29yZC1hcmd1bWVudHMgKHBhY2thZ2UtYXJndW1lbnRzIG1vbm8tNS40LjAp CisgICAgICAgICAoKCM6cGhhc2VzIHBoYXNlcyAjfiVzdGFuZGFyZC1waGFzZXMpCisgICAgICAg ICAgI34obW9kaWZ5LXBoYXNlcyAjJHBoYXNlcworICAgICAgICAgICAgICAoZGVsZXRlICdwYXRj aC1zdWItYXV0b2dlbi5zaC1zaGViYW5nKSkpKSkpKSkKZGlmZiAtLWdpdCBhL2dudS9wYWNrYWdl cy9wYXRjaGVzL2NvcmVmeC1tb25vLXByZS01LjguMC1wYXRjaGVzLnBhdGNoIGIvZ251L3BhY2th Z2VzL3BhdGNoZXMvY29yZWZ4LW1vbm8tcHJlLTUuOC4wLXBhdGNoZXMucGF0Y2gKbmV3IGZpbGUg bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjA0ZGNjNmM1YTUwCi0tLSAvZGV2L251bGwK KysrIGIvZ251L3BhY2thZ2VzL3BhdGNoZXMvY29yZWZ4LW1vbm8tcHJlLTUuOC4wLXBhdGNoZXMu cGF0Y2gKQEAgLTAsMCArMSwxMzQ5IEBACitkaWZmIC0tZ2l0IGEvc3JjL01pY3Jvc29mdC5DU2hh cnAvc3JjL01pY3Jvc29mdC9DU2hhcnAvUnVudGltZUJpbmRlci9FeHByZXNzaW9uVHJlZUNhbGxS ZXdyaXRlci5jcyBiL3NyYy9NaWNyb3NvZnQuQ1NoYXJwL3NyYy9NaWNyb3NvZnQvQ1NoYXJwL1J1 bnRpbWVCaW5kZXIvRXhwcmVzc2lvblRyZWVDYWxsUmV3cml0ZXIuY3MKK2luZGV4IGFhOGFmYTVh MWIuLjNhMjUxODI0NmEgMTAwNjQ0CistLS0gYS9zcmMvTWljcm9zb2Z0LkNTaGFycC9zcmMvTWlj cm9zb2Z0L0NTaGFycC9SdW50aW1lQmluZGVyL0V4cHJlc3Npb25UcmVlQ2FsbFJld3JpdGVyLmNz CisrKysgYi9zcmMvTWljcm9zb2Z0LkNTaGFycC9zcmMvTWljcm9zb2Z0L0NTaGFycC9SdW50aW1l QmluZGVyL0V4cHJlc3Npb25UcmVlQ2FsbFJld3JpdGVyLmNzCitAQCAtMjQ2LDggKzI0Niw5IEBA IG5hbWVzcGFjZSBNaWNyb3NvZnQuQ1NoYXJwLlJ1bnRpbWVCaW5kZXIKKyAgICAgICAgICAgICBF eHByQXJyYXlJbml0IGFycmluaXQ7CisgCisgICAgICAgICAgICAgRXhwckxpc3QgbGlzdCA9IChF eHByTGlzdClwRXhwci5PcHRpb25hbEFyZ3VtZW50czsKKy0gICAgICAgICAgICBpZiAobGlzdC5P cHRpb25hbE5leHRMaXN0Tm9kZSBpcyBFeHByTGlzdCBuZXh0KQorKyAgICAgICAgICAgIGlmIChs aXN0Lk9wdGlvbmFsTmV4dExpc3ROb2RlIGlzIEV4cHJMaXN0KQorICAgICAgICAgICAgIHsKKysg ICAgICAgICAgICAgICAgRXhwckxpc3QgbmV4dCA9IChFeHByTGlzdClsaXN0Lk9wdGlvbmFsTmV4 dExpc3ROb2RlOworICAgICAgICAgICAgICAgICBtZXRoaW5mbyA9IChFeHByTWV0aG9kSW5mbylu ZXh0Lk9wdGlvbmFsRWxlbWVudDsKKyAgICAgICAgICAgICAgICAgYXJyaW5pdCA9IChFeHByQXJy YXlJbml0KW5leHQuT3B0aW9uYWxOZXh0TGlzdE5vZGU7CisgICAgICAgICAgICAgfQorQEAgLTM4 Miw4ICszODMsOSBAQCBuYW1lc3BhY2UgTWljcm9zb2Z0LkNTaGFycC5SdW50aW1lQmluZGVyCisg ICAgICAgICAgICAgRXhwciBuZXh0Tm9kZSA9IGxpc3QuT3B0aW9uYWxOZXh0TGlzdE5vZGU7Cisg ICAgICAgICAgICAgRXhwclByb3BlcnR5SW5mbyBwcm9waW5mbzsKKyAgICAgICAgICAgICBFeHBy QXJyYXlJbml0IGFyZ3VtZW50czsKKy0gICAgICAgICAgICBpZiAobmV4dE5vZGUgaXMgRXhwckxp c3QgbmV4dExpc3QpCisrICAgICAgICAgICAgaWYgKG5leHROb2RlIGlzIEV4cHJMaXN0KQorICAg ICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgRXhwckxpc3QgbmV4dExpc3QgPSAoRXhwckxp c3QpbGlzdC5PcHRpb25hbE5leHRMaXN0Tm9kZTsKKyAgICAgICAgICAgICAgICAgcHJvcGluZm8g PSBuZXh0TGlzdC5PcHRpb25hbEVsZW1lbnQgYXMgRXhwclByb3BlcnR5SW5mbzsKKyAgICAgICAg ICAgICAgICAgYXJndW1lbnRzID0gbmV4dExpc3QuT3B0aW9uYWxOZXh0TGlzdE5vZGUgYXMgRXhw ckFycmF5SW5pdDsKKyAgICAgICAgICAgICB9CitAQCAtNTUzLDggKzU1NSw5IEBAIG5hbWVzcGFj ZSBNaWNyb3NvZnQuQ1NoYXJwLlJ1bnRpbWVCaW5kZXIKKyAgICAgICAgICAgICBsaXN0ID0gKEV4 cHJMaXN0KWxpc3QuT3B0aW9uYWxOZXh0TGlzdE5vZGU7CisgICAgICAgICAgICAgTWV0aG9kSW5m byBtZXRob2RJbmZvOworICAgICAgICAgICAgIGJvb2wgYklzTGlmdGVkID0gZmFsc2U7CistICAg ICAgICAgICAgaWYgKGxpc3QuT3B0aW9uYWxOZXh0TGlzdE5vZGUgaXMgRXhwckxpc3QgbmV4dCkK KysgICAgICAgICAgICBpZiAobGlzdC5PcHRpb25hbE5leHRMaXN0Tm9kZSBpcyBFeHByTGlzdCkK KyAgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgIEV4cHJMaXN0IG5leHQgPSAoRXhwckxp c3QpbGlzdC5PcHRpb25hbE5leHRMaXN0Tm9kZTsKKyAgICAgICAgICAgICAgICAgRXhwckNvbnN0 YW50IGlzTGlmdGVkID0gKEV4cHJDb25zdGFudCluZXh0Lk9wdGlvbmFsRWxlbWVudDsKKyAgICAg ICAgICAgICAgICAgRGVidWcuQXNzZXJ0KGlzTGlmdGVkICE9IG51bGwpOworICAgICAgICAgICAg ICAgICBiSXNMaWZ0ZWQgPSBpc0xpZnRlZC5WYWwuSW50MzJWYWwgPT0gMTsKK0BAIC02NzcsOCAr NjgwLDkgQEAgbmFtZXNwYWNlIE1pY3Jvc29mdC5DU2hhcnAuUnVudGltZUJpbmRlcgorIAorICAg ICAgICAgcHJpdmF0ZSBFeHByZXNzaW9uIEdldEV4cHJlc3Npb24oRXhwciBwRXhwcikKKyAgICAg ICAgIHsKKy0gICAgICAgICAgICBpZiAocEV4cHIgaXMgRXhwcldyYXAgd3JhcCkKKysgICAgICAg ICAgICBpZiAocEV4cHIgaXMgRXhwcldyYXApCisgICAgICAgICAgICAgeworKyAgICAgICAgICAg ICAgICBFeHByV3JhcCB3cmFwID0gKEV4cHJXcmFwKSBwRXhwcjsKKyAgICAgICAgICAgICAgICAg cmV0dXJuIF9EaWN0aW9uYXJ5T2ZQYXJhbWV0ZXJzWyhFeHByQ2FsbCl3cmFwLk9wdGlvbmFsRXhw cmVzc2lvbl07CisgICAgICAgICAgICAgfQorICAgICAgICAgICAgIGVsc2UgaWYgKHBFeHByIGlz IEV4cHJDb25zdGFudCkKK0BAIC04NzUsMjAgKzg3OSwyNCBAQCBuYW1lc3BhY2UgTWljcm9zb2Z0 LkNTaGFycC5SdW50aW1lQmluZGVyCisgICAgICAgICB7CisgICAgICAgICAgICAgZm9yICg7OykK KyAgICAgICAgICAgICB7CistICAgICAgICAgICAgICAgIGlmIChwRXhwciBpcyBFeHByQ2FzdCBj YXN0KQorKyAgICAgICAgICAgICAgICBpZiAocEV4cHIgaXMgRXhwckNhc3QpCisgICAgICAgICAg ICAgICAgIHsKKysgICAgICAgICAgICAgICAgICAgIEV4cHJDYXN0IGNhc3QgPSAoRXhwckNhc3Qp IHBFeHByOworICAgICAgICAgICAgICAgICAgICAgcEV4cHIgPSBjYXN0LkFyZ3VtZW50OworICAg ICAgICAgICAgICAgICB9CistICAgICAgICAgICAgICAgIGVsc2UgaWYgKHBFeHByIGlzIEV4cHJU eXBlT2YgdHlwZU9mKQorKyAgICAgICAgICAgICAgICBlbHNlIGlmIChwRXhwciBpcyBFeHByVHlw ZU9mKQorICAgICAgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgICAgICBFeHByVHlwZU9m IHR5cGVPZiA9IChFeHByVHlwZU9mKSBwRXhwcjsKKyAgICAgICAgICAgICAgICAgICAgIHJldHVy biB0eXBlT2YuU291cmNlVHlwZS5UeXBlLkFzc29jaWF0ZWRTeXN0ZW1UeXBlOworICAgICAgICAg ICAgICAgICB9CistICAgICAgICAgICAgICAgIGVsc2UgaWYgKHBFeHByIGlzIEV4cHJNZXRob2RJ bmZvIG1ldGhvZEluZm8pCisrICAgICAgICAgICAgICAgIGVsc2UgaWYgKHBFeHByIGlzIEV4cHJN ZXRob2RJbmZvKQorICAgICAgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgICAgICBFeHBy TWV0aG9kSW5mbyBtZXRob2RJbmZvID0gKEV4cHJNZXRob2RJbmZvKSBwRXhwcjsKKyAgICAgICAg ICAgICAgICAgICAgIHJldHVybiBHZXRNZXRob2RJbmZvRnJvbUV4cHIobWV0aG9kSW5mbyk7Cisg ICAgICAgICAgICAgICAgIH0KKy0gICAgICAgICAgICAgICAgZWxzZSBpZiAocEV4cHIgaXMgRXhw ckNvbnN0YW50IGNvbnN0YW50KQorKyAgICAgICAgICAgICAgICBlbHNlIGlmIChwRXhwciBpcyBF eHByQ29uc3RhbnQpCisgICAgICAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgICAgIEV4 cHJDb25zdGFudCBjb25zdGFudCA9IChFeHByQ29uc3RhbnQpIHBFeHByOworICAgICAgICAgICAg ICAgICAgICAgQ29uc3RWYWwgdmFsID0gY29uc3RhbnQuVmFsOworICAgICAgICAgICAgICAgICAg ICAgQ1R5cGUgdW5kZXJseWluZ1R5cGUgPSBwRXhwci5UeXBlOworICAgICAgICAgICAgICAgICAg ICAgb2JqZWN0IG9ianZhbDsKK0BAIC05NTQsOCArOTYyLDkgQEAgbmFtZXNwYWNlIE1pY3Jvc29m dC5DU2hhcnAuUnVudGltZUJpbmRlcgorIAorICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBF eHByLlR5cGUuaXNFbnVtVHlwZSgpID8gRW51bS5Ub09iamVjdChwRXhwci5UeXBlLkFzc29jaWF0 ZWRTeXN0ZW1UeXBlLCBvYmp2YWwpIDogb2JqdmFsOworICAgICAgICAgICAgICAgICB9CistICAg ICAgICAgICAgICAgIGVsc2UgaWYgKHBFeHByIGlzIEV4cHJaZXJvSW5pdCB6ZXJvSW5pdCkKKysg ICAgICAgICAgICAgICAgZWxzZSBpZiAocEV4cHIgaXMgRXhwclplcm9Jbml0KQorICAgICAgICAg ICAgICAgICB7CisrICAgICAgICAgICAgICAgICAgICBFeHByWmVyb0luaXQgemVyb0luaXQgPSAo RXhwclplcm9Jbml0KSBwRXhwcjsKKyAgICAgICAgICAgICAgICAgICAgIGlmICgocEV4cHIgPSB6 ZXJvSW5pdC5PcHRpb25hbEFyZ3VtZW50KSA9PSBudWxsKQorICAgICAgICAgICAgICAgICAgICAg eworICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBBY3RpdmF0b3IuQ3JlYXRlSW5zdGFu Y2UoemVyb0luaXQuVHlwZS5Bc3NvY2lhdGVkU3lzdGVtVHlwZSk7CitAQCAtOTgxLDggKzk5MCw5 IEBAIG5hbWVzcGFjZSBNaWNyb3NvZnQuQ1NoYXJwLlJ1bnRpbWVCaW5kZXIKKyAgICAgICAgICAg ICAgICAgRXhwciBwID0gbGlzdDsKKyAgICAgICAgICAgICAgICAgd2hpbGUgKGxpc3QgIT0gbnVs bCkKKyAgICAgICAgICAgICAgICAgeworLSAgICAgICAgICAgICAgICAgICAgaWYgKGxpc3QgaXMg RXhwckxpc3QgcExpc3QpCisrICAgICAgICAgICAgICAgICAgICBpZiAobGlzdCBpcyBFeHByTGlz dCkKKyAgICAgICAgICAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgICAgICAgICBFeHBy TGlzdCBwTGlzdCA9IChFeHByTGlzdCkgbGlzdDsKKyAgICAgICAgICAgICAgICAgICAgICAgICBw ID0gcExpc3QuT3B0aW9uYWxFbGVtZW50OworICAgICAgICAgICAgICAgICAgICAgICAgIGxpc3Qg PSBwTGlzdC5PcHRpb25hbE5leHRMaXN0Tm9kZTsKKyAgICAgICAgICAgICAgICAgICAgIH0KK2Rp ZmYgLS1naXQgYS9zcmMvTWljcm9zb2Z0LkNTaGFycC9zcmMvTWljcm9zb2Z0L0NTaGFycC9SdW50 aW1lQmluZGVyL1J1bnRpbWVCaW5kZXIuY3MgYi9zcmMvTWljcm9zb2Z0LkNTaGFycC9zcmMvTWlj cm9zb2Z0L0NTaGFycC9SdW50aW1lQmluZGVyL1J1bnRpbWVCaW5kZXIuY3MKK2luZGV4IGE2MjNi ZmMwYmYuLjRhNzQyMTU2YjkgMTAwNjQ0CistLS0gYS9zcmMvTWljcm9zb2Z0LkNTaGFycC9zcmMv TWljcm9zb2Z0L0NTaGFycC9SdW50aW1lQmluZGVyL1J1bnRpbWVCaW5kZXIuY3MKKysrKyBiL3Ny Yy9NaWNyb3NvZnQuQ1NoYXJwL3NyYy9NaWNyb3NvZnQvQ1NoYXJwL1J1bnRpbWVCaW5kZXIvUnVu dGltZUJpbmRlci5jcworQEAgLTE4OSw3ICsxODksOCBAQCBuYW1lc3BhY2UgTWljcm9zb2Z0LkNT aGFycC5SdW50aW1lQmluZGVyCisgICAgICAgICAgICAgTG9jYWxWYXJpYWJsZVN5bWJvbFtdIGxv Y2FscyA9IFBvcHVsYXRlTG9jYWxTY29wZShwYXlsb2FkLCBwU2NvcGUsIGFyZ3VtZW50cywgcGFy YW1ldGVycyk7CisgCisgICAgICAgICAgICAgLy8gKDEuNSkgLSBDaGVjayB0byBzZWUgaWYgd2Ug bmVlZCB0byBkZWZlci4KKy0gICAgICAgICAgICBpZiAoRGVmZXJCaW5kaW5nKHBheWxvYWQsIGFy Z3VtZW50cywgYXJncywgbG9jYWxzLCBvdXQgRHluYW1pY01ldGFPYmplY3QgbykpCisrICAgICAg ICAgICAgRHluYW1pY01ldGFPYmplY3QgbzsKKysgICAgICAgICAgICBpZiAoRGVmZXJCaW5kaW5n KHBheWxvYWQsIGFyZ3VtZW50cywgYXJncywgbG9jYWxzLCBvdXQgbykpCisgICAgICAgICAgICAg eworICAgICAgICAgICAgICAgICBkZWZlcnJlZEJpbmRpbmcgPSBvOworICAgICAgICAgICAgICAg ICByZXR1cm4gbnVsbDsKK0BAIC0xMDMwLDggKzEwMzEsOSBAQCBuYW1lc3BhY2UgTWljcm9zb2Z0 LkNTaGFycC5SdW50aW1lQmluZGVyCisgCisgICAgICAgICBwcml2YXRlIHN0YXRpYyB2b2lkIENo ZWNrRm9yQ29uZGl0aW9uYWxNZXRob2RFcnJvcihFeHByIHBFeHByKQorICAgICAgICAgeworLSAg ICAgICAgICAgIGlmIChwRXhwciBpcyBFeHByQ2FsbCBjYWxsKQorKyAgICAgICAgICAgIGlmIChw RXhwciBpcyBFeHByQ2FsbCkKKyAgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgIEV4cHJD YWxsIGNhbGwgPSAoRXhwckNhbGwpcEV4cHI7CisgICAgICAgICAgICAgICAgIC8vIFRoaXMgbWlt aWNzIHRoZSBiZWhhdmlvciBvZiB0aGUgbmF0aXZlIENvbXBpbGVyU3ltYm9sTG9hZGVyIGluIEdl dENvbmRpdGlvbmFsU3ltYm9scy4gT3ZlcnJpZGUKKyAgICAgICAgICAgICAgICAgLy8gbWV0aG9k cyBjYW5ub3QgaGF2ZSB0aGUgY29uZGl0aW9uYWwgYXR0cmlidXRlLCBidXQgaW1wbGljaXRseSBh Y3F1aXJlIGl0IGZyb20gdGhlaXIgc2xvdC4KKyAKK0BAIC0xMDY0LDggKzEwNjYsOSBAQCBuYW1l c3BhY2UgTWljcm9zb2Z0LkNTaGFycC5SdW50aW1lQmluZGVyCisgICAgICAgICAgICAgRXhwck1l bWJlckdyb3VwIG1lbWdyb3VwOworICAgICAgICAgICAgIFR5cGVBcnJheSB0eXBlQXJnczsKKyAK Ky0gICAgICAgICAgICBpZiAocFJlc3VsdCBpcyBFeHByQ2FsbCBjYWxsKQorKyAgICAgICAgICAg IGlmIChwUmVzdWx0IGlzIEV4cHJDYWxsKQorICAgICAgICAgICAgIHsKKysgICAgICAgICAgICAg ICAgRXhwckNhbGwgY2FsbCA9IChFeHByQ2FsbCkgcFJlc3VsdDsKKyAgICAgICAgICAgICAgICAg dHlwZSA9IGNhbGwuTWV0aFdpdGhJbnN0LkF0czsKKyAgICAgICAgICAgICAgICAgbWV0aHByb3Ag PSBjYWxsLk1ldGhXaXRoSW5zdC5NZXRoKCk7CisgICAgICAgICAgICAgICAgIG1lbWdyb3VwID0g Y2FsbC5NZW1iZXJHcm91cDsKK0BAIC0xMTMyLDEyICsxMTM1LDE1IEBAIG5hbWVzcGFjZSBNaWNy b3NvZnQuQ1NoYXJwLlJ1bnRpbWVCaW5kZXIKKyAKKyAgICAgICAgIHByaXZhdGUgRXhwciBTdHJp cE5hbWVkQXJndW1lbnQoRXhwciBwQXJnKQorICAgICAgICAgeworLSAgICAgICAgICAgIGlmIChw QXJnIGlzIEV4cHJOYW1lZEFyZ3VtZW50U3BlY2lmaWNhdGlvbiBuYW1lZCkKKysgICAgICAgICAg ICBpZiAocEFyZyBpcyBFeHByTmFtZWRBcmd1bWVudFNwZWNpZmljYXRpb24pCisgICAgICAgICAg ICAgeworKyAgICAgICAgICAgICAgICBFeHByTmFtZWRBcmd1bWVudFNwZWNpZmljYXRpb24gbmFt ZWQgPQorKyAgICAgICAgICAgICAgICAgICAgKEV4cHJOYW1lZEFyZ3VtZW50U3BlY2lmaWNhdGlv bikgcEFyZzsKKyAgICAgICAgICAgICAgICAgcEFyZyA9IG5hbWVkLlZhbHVlOworICAgICAgICAg ICAgIH0KKy0gICAgICAgICAgICBlbHNlIGlmIChwQXJnIGlzIEV4cHJBcnJheUluaXQgaW5pdCkK KysgICAgICAgICAgICBlbHNlIGlmIChwQXJnIGlzIEV4cHJBcnJheUluaXQpCisgICAgICAgICAg ICAgeworKyAgICAgICAgICAgICAgICBFeHByQXJyYXlJbml0IGluaXQgPSAoRXhwckFycmF5SW5p dCkgcEFyZzsKKyAgICAgICAgICAgICAgICAgaW5pdC5PcHRpb25hbEFyZ3VtZW50cyA9IFN0cmlw TmFtZWRBcmd1bWVudHMoaW5pdC5PcHRpb25hbEFyZ3VtZW50cyk7CisgICAgICAgICAgICAgfQor IAorQEAgLTExNDYsMTQgKzExNTIsMTYgQEAgbmFtZXNwYWNlIE1pY3Jvc29mdC5DU2hhcnAuUnVu dGltZUJpbmRlcgorIAorICAgICAgICAgcHJpdmF0ZSBFeHByIFN0cmlwTmFtZWRBcmd1bWVudHMo RXhwciBwQXJnKQorICAgICAgICAgeworLSAgICAgICAgICAgIGlmIChwQXJnIGlzIEV4cHJMaXN0 IGxpc3QpCisrICAgICAgICAgICAgaWYgKHBBcmcgaXMgRXhwckxpc3QpCisgICAgICAgICAgICAg eworKyAgICAgICAgICAgICAgICBFeHByTGlzdCBsaXN0ID0gKEV4cHJMaXN0KSBwQXJnOworICAg ICAgICAgICAgICAgICBmb3IoOzspCisgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg ICAgICAgIGxpc3QuT3B0aW9uYWxFbGVtZW50ID0gU3RyaXBOYW1lZEFyZ3VtZW50KGxpc3QuT3B0 aW9uYWxFbGVtZW50KTsKKyAKKy0gICAgICAgICAgICAgICAgICAgIGlmIChsaXN0Lk9wdGlvbmFs TmV4dExpc3ROb2RlIGlzIEV4cHJMaXN0IG5leHQpCisrICAgICAgICAgICAgICAgICAgICBpZiAo bGlzdC5PcHRpb25hbE5leHRMaXN0Tm9kZSBpcyBFeHByTGlzdCkKKyAgICAgICAgICAgICAgICAg ICAgIHsKKysgICAgICAgICAgICAgICAgICAgICAgICBFeHByTGlzdCBuZXh0ID0gKEV4cHJMaXN0 KWxpc3QuT3B0aW9uYWxOZXh0TGlzdE5vZGU7CisgICAgICAgICAgICAgICAgICAgICAgICAgbGlz dCA9IG5leHQ7CisgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICBl bHNlCitkaWZmIC0tZ2l0IGEvc3JjL01pY3Jvc29mdC5DU2hhcnAvc3JjL01pY3Jvc29mdC9DU2hh cnAvUnVudGltZUJpbmRlci9TZW1hbnRpY3MvQmluZGluZy9CZXR0ZXIuY3MgYi9zcmMvTWljcm9z b2Z0LkNTaGFycC9zcmMvTWljcm9zb2Z0L0NTaGFycC9SdW50aW1lQmluZGVyL1NlbWFudGljcy9C aW5kaW5nL0JldHRlci5jcworaW5kZXggY2ViZmNkOTRlMS4uMTc5YWMyMTYyMCAxMDA2NDQKKy0t LSBhL3NyYy9NaWNyb3NvZnQuQ1NoYXJwL3NyYy9NaWNyb3NvZnQvQ1NoYXJwL1J1bnRpbWVCaW5k ZXIvU2VtYW50aWNzL0JpbmRpbmcvQmV0dGVyLmNzCisrKysgYi9zcmMvTWljcm9zb2Z0LkNTaGFy cC9zcmMvTWljcm9zb2Z0L0NTaGFycC9SdW50aW1lQmluZGVyL1NlbWFudGljcy9CaW5kaW5nL0Jl dHRlci5jcworQEAgLTE1Nyw4ICsxNTcsOSBAQCBuYW1lc3BhY2UgTWljcm9zb2Z0LkNTaGFycC5S dW50aW1lQmluZGVyLlNlbWFudGljcworICAgICAgICAgICAgIC8vIFdlIHRoZW4gZ28gb3ZlciB0 aGUgc3BlY2lmaWVkIGFyZ3VtZW50cyBhbmQgcHV0IHRoZSB0eXBlIGZvciBhbnkgbmFtZWQgYXJn dW1lbnQgaW4gdGhlIHJpZ2h0IHBvc2l0aW9uIGluIHRoZSBhcnJheS4KKyAgICAgICAgICAgICBm b3IgKGludCBpUGFyYW0gPSAwOyBpUGFyYW0gPCBhcmdzLmNhcmc7IGlQYXJhbSsrKQorICAgICAg ICAgICAgIHsKKy0gICAgICAgICAgICAgICAgaWYgKHByZ2V4cHJbaVBhcmFtXSBpcyBFeHByTmFt ZWRBcmd1bWVudFNwZWNpZmljYXRpb24gbmFtZWQpCisrICAgICAgICAgICAgICAgIGlmIChwcmdl eHByW2lQYXJhbV0gaXMgRXhwck5hbWVkQXJndW1lbnRTcGVjaWZpY2F0aW9uKQorICAgICAgICAg ICAgICAgICB7CisrICAgICAgICAgICAgICAgICAgICBFeHByTmFtZWRBcmd1bWVudFNwZWNpZmlj YXRpb24gbmFtZWQgPSAoRXhwck5hbWVkQXJndW1lbnRTcGVjaWZpY2F0aW9uKXByZ2V4cHJbaVBh cmFtXTsKKyAgICAgICAgICAgICAgICAgICAgIC8vIFdlIGZpbmQgdGhlIGluZGV4IG9mIHRoZSB0 eXBlIG9mIHRoZSBhcmd1bWVudCBpbiB0aGUgbWV0aG9kIHBhcmFtZXRlciBsaXN0IGFuZCBzdG9y ZSB0aGF0IGluIGEgdGVtcAorICAgICAgICAgICAgICAgICAgICAgaW50IGluZGV4ID0gRmluZE5h bWUobWV0aFByb3AuUGFyYW1ldGVyTmFtZXMsIG5hbWVkLk5hbWUpOworICAgICAgICAgICAgICAg ICAgICAgQ1R5cGUgdGVtcFR5cGUgPSBwdGFbaW5kZXhdOworZGlmZiAtLWdpdCBhL3NyYy9NaWNy b3NvZnQuQ1NoYXJwL3NyYy9NaWNyb3NvZnQvQ1NoYXJwL1J1bnRpbWVCaW5kZXIvU2VtYW50aWNz L0JpbmRpbmcvRXJyb3JSZXBvcnRpbmcuY3MgYi9zcmMvTWljcm9zb2Z0LkNTaGFycC9zcmMvTWlj cm9zb2Z0L0NTaGFycC9SdW50aW1lQmluZGVyL1NlbWFudGljcy9CaW5kaW5nL0Vycm9yUmVwb3J0 aW5nLmNzCitpbmRleCBjNDA2YWY0M2RlLi4wZWE4MWVmMjFjIDEwMDY0NAorLS0tIGEvc3JjL01p Y3Jvc29mdC5DU2hhcnAvc3JjL01pY3Jvc29mdC9DU2hhcnAvUnVudGltZUJpbmRlci9TZW1hbnRp Y3MvQmluZGluZy9FcnJvclJlcG9ydGluZy5jcworKysrIGIvc3JjL01pY3Jvc29mdC5DU2hhcnAv c3JjL01pY3Jvc29mdC9DU2hhcnAvUnVudGltZUJpbmRlci9TZW1hbnRpY3MvQmluZGluZy9FcnJv clJlcG9ydGluZy5jcworQEAgLTc2LDIyICs3NiwyNSBAQCBuYW1lc3BhY2UgTWljcm9zb2Z0LkNT aGFycC5SdW50aW1lQmluZGVyLlNlbWFudGljcworICAgICAgICAgICAgIHsKKyAgICAgICAgICAg ICAgICAgRGVidWcuQXNzZXJ0KGV4cHIgIT0gbnVsbCk7CisgCistICAgICAgICAgICAgICAgIGlm IChleHByIGlzIEV4cHJMb2NhbCBsb2NhbCAmJiBsb2NhbC5Jc09LKQorKyAgICAgICAgICAgICAg ICBpZiAoZXhwciBpcyBFeHByTG9jYWwgJiYgKChFeHByTG9jYWwpZXhwcikuSXNPSykKKyAgICAg ICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICAgICAgRXhwckxvY2FsIGxvY2FsID0gKEV4 cHJMb2NhbClleHByOworICAgICAgICAgICAgICAgICAgICAgUmVwb3J0TG9jYWxFcnJvcihsb2Nh bC5Mb2NhbCwga2luZCwgaXNOZXN0ZWQpOworICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRy dWU7CisgICAgICAgICAgICAgICAgIH0KKyAKKyAgICAgICAgICAgICAgICAgRXhwciBwT2JqZWN0 ID0gbnVsbDsKKyAKKy0gICAgICAgICAgICAgICAgaWYgKGV4cHIgaXMgRXhwclByb3BlcnR5IHBy b3ApCisrICAgICAgICAgICAgICAgIGlmIChleHByIGlzIEV4cHJQcm9wZXJ0eSkKKyAgICAgICAg ICAgICAgICAgeworKyAgICAgICAgICAgICAgICAgICAgRXhwclByb3BlcnR5IHByb3AgPSAoRXhw clByb3BlcnR5KWV4cHI7CisgICAgICAgICAgICAgICAgICAgICAvLyBXZSd2ZSBhbHJlYWR5IHJl cG9ydGVkIHJlYWQtb25seS1wcm9wZXJ0eSBlcnJvcnMuCisgICAgICAgICAgICAgICAgICAgICBE ZWJ1Zy5Bc3NlcnQocHJvcC5NZXRoV2l0aFR5cGVTZXQgIT0gbnVsbCk7CisgICAgICAgICAgICAg ICAgICAgICBwT2JqZWN0ID0gcHJvcC5NZW1iZXJHcm91cC5PcHRpb25hbE9iamVjdDsKKyAgICAg ICAgICAgICAgICAgfQorLSAgICAgICAgICAgICAgICBlbHNlIGlmIChleHByIGlzIEV4cHJGaWVs ZCBmaWVsZCkKKysgICAgICAgICAgICAgICAgZWxzZSBpZiAoZXhwciBpcyBFeHByRmllbGQpCisg ICAgICAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgICAgIEV4cHJGaWVsZCBmaWVsZCA9 IChFeHByRmllbGQpZXhwcjsKKyAgICAgICAgICAgICAgICAgICAgIGlmIChmaWVsZC5GaWVsZFdp dGhUeXBlLkZpZWxkKCkuaXNSZWFkT25seSkKKyAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAg ICAgICAgICAgICAgICAgICAgICBSZXBvcnRSZWFkT25seUVycm9yKGZpZWxkLCBraW5kLCBpc05l c3RlZCk7CitAQCAtMTA1LDggKzEwOCw5IEBAIG5hbWVzcGFjZSBNaWNyb3NvZnQuQ1NoYXJwLlJ1 bnRpbWVCaW5kZXIuU2VtYW50aWNzCisgCisgICAgICAgICAgICAgICAgIGlmIChwT2JqZWN0ICE9 IG51bGwgJiYgcE9iamVjdC5UeXBlLmlzU3RydWN0T3JFbnVtKCkpCisgICAgICAgICAgICAgICAg IHsKKy0gICAgICAgICAgICAgICAgICAgIGlmIChwT2JqZWN0IGlzIElFeHByV2l0aEFyZ3Mgd2l0 aEFyZ3MpCisrICAgICAgICAgICAgICAgICAgICBpZiAocE9iamVjdCBpcyBJRXhwcldpdGhBcmdz KQorICAgICAgICAgICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICAgICAgICAgIElFeHBy V2l0aEFyZ3Mgd2l0aEFyZ3MgPSAoSUV4cHJXaXRoQXJncylwT2JqZWN0OworICAgICAgICAgICAg ICAgICAgICAgICAgIC8vIGFzc2lnbmluZyB0byBSSFMgb2YgbWV0aG9kIG9yIHByb3BlcnR5IGdl dHRlciByZXR1cm5pbmcgYSB2YWx1ZS10eXBlIG9uIHRoZSBzdGFjayBvcgorICAgICAgICAgICAg ICAgICAgICAgICAgIC8vIHBhc3NpbmcgUkhTIG9mIG1ldGhvZCBvciBwcm9wZXJ0eSBnZXR0ZXIg cmV0dXJuaW5nIGEgdmFsdWUtdHlwZSBvbiB0aGUgc3RhY2ssIGFzIHJlZiBvciBvdXQKKyAgICAg ICAgICAgICAgICAgICAgICAgICBFcnJvckNvbnRleHQuRXJyb3IoRXJyb3JDb2RlLkVSUl9SZXR1 cm5Ob3RMVmFsdWUsIHdpdGhBcmdzLkdldFN5bVdpdGhUeXBlKCkpOworZGlmZiAtLWdpdCBhL3Ny Yy9NaWNyb3NvZnQuQ1NoYXJwL3NyYy9NaWNyb3NvZnQvQ1NoYXJwL1J1bnRpbWVCaW5kZXIvU2Vt YW50aWNzL0NvbnZlcnNpb24uY3MgYi9zcmMvTWljcm9zb2Z0LkNTaGFycC9zcmMvTWljcm9zb2Z0 L0NTaGFycC9SdW50aW1lQmluZGVyL1NlbWFudGljcy9Db252ZXJzaW9uLmNzCitpbmRleCAyNzU2 NTM4NzcwLi45OWFkZjQ4OGIzIDEwMDY0NAorLS0tIGEvc3JjL01pY3Jvc29mdC5DU2hhcnAvc3Jj L01pY3Jvc29mdC9DU2hhcnAvUnVudGltZUJpbmRlci9TZW1hbnRpY3MvQ29udmVyc2lvbi5jcwor KysrIGIvc3JjL01pY3Jvc29mdC5DU2hhcnAvc3JjL01pY3Jvc29mdC9DU2hhcnAvUnVudGltZUJp bmRlci9TZW1hbnRpY3MvQ29udmVyc2lvbi5jcworQEAgLTM4Miw5ICszODIsMTAgQEAgbmFtZXNw YWNlIE1pY3Jvc29mdC5DU2hhcnAuUnVudGltZUJpbmRlci5TZW1hbnRpY3MKKyAgICAgICAgICAg ICAgICAgRlVORFRZUEUgZnRTcmMgPSBleHByLlR5cGUuZnVuZFR5cGUoKTsKKyAgICAgICAgICAg ICAgICAgRlVORFRZUEUgZnREZXN0ID0gZGVzdC5mdW5kVHlwZSgpOworIAorLSAgICAgICAgICAg ICAgICBpZiAoZXhwciBpcyBFeHByQ29uc3RhbnQgY29uc3RhbnQgJiYgY29uc3RhbnQuSXNPSyAm JgorKyAgICAgICAgICAgICAgICBpZiAoZXhwciBpcyBFeHByQ29uc3RhbnQgJiYgKChFeHByQ29u c3RhbnQpZXhwcikuSXNPSyAmJgorICAgICAgICAgICAgICAgICAgICAgZXhwci5UeXBlLmlzU2lt cGxlVHlwZSgpICYmIGRlc3QuaXNTaW1wbGVUeXBlKCkpCisgICAgICAgICAgICAgICAgIHsKKysg ICAgICAgICAgICAgICAgICAgIEV4cHJDb25zdGFudCBjb25zdGFudCA9IChFeHByQ29uc3RhbnQp IGV4cHI7CisgICAgICAgICAgICAgICAgICAgICBpZiAoKGZ0U3JjID09IEZVTkRUWVBFLkZUX0k0 ICYmIChmdERlc3QgPD0gRlVORFRZUEUuRlRfTEFTVE5PTkxPTkcgfHwgZnREZXN0ID09IEZVTkRU WVBFLkZUX1U4KSkgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAoZnRTcmMgPT0gRlVORFRZ UEUuRlRfSTggJiYgZnREZXN0ID09IEZVTkRUWVBFLkZUX1U4KSkKKyAgICAgICAgICAgICAgICAg ICAgIHsKK0BAIC00MTIsOCArNDEzLDkgQEAgbmFtZXNwYWNlIE1pY3Jvc29mdC5DU2hhcnAuUnVu dGltZUJpbmRlci5TZW1hbnRpY3MKKyAgICAgICAgICAgICAgICAgICAgIEVycm9yQ29udGV4dC5F cnJvcihkZXN0IGlzIFR5cGVQYXJhbWV0ZXJUeXBlID8gRXJyb3JDb2RlLkVSUl9UeXBlVmFyQ2Fu dEJlTnVsbCA6IEVycm9yQ29kZS5FUlJfVmFsdWVDYW50QmVOdWxsLCBkZXN0KTsKKyAgICAgICAg ICAgICAgICAgfQorIAorLSAgICAgICAgICAgICAgICBlbHNlIGlmIChleHByIGlzIEV4cHJNZW1i ZXJHcm91cCBtZW1HcnApCisrICAgICAgICAgICAgICAgIGVsc2UgaWYgKGV4cHIgaXMgRXhwck1l bWJlckdyb3VwKQorICAgICAgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgICAgICBFeHBy TWVtYmVyR3JvdXAgbWVtR3JwID0gKEV4cHJNZW1iZXJHcm91cCkgZXhwcjsKKyAgICAgICAgICAg ICAgICAgICAgIEJpbmRHcnBDb252ZXJzaW9uKG1lbUdycCwgZGVzdCwgdHJ1ZSk7CisgICAgICAg ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgZWxzZSBpZiAoY2FuQ2FzdChleHByLlR5cGUs IGRlc3QsIGZsYWdzKSkKK0BAIC01NDYsOCArNTQ4LDkgQEAgbmFtZXNwYWNlIE1pY3Jvc29mdC5D U2hhcnAuUnVudGltZUJpbmRlci5TZW1hbnRpY3MKKyAgICAgICAgICAgICAgICAgICAgIHsKKyAg ICAgICAgICAgICAgICAgICAgICAgICBFcnJvckNvbnRleHQuRXJyb3IoRXJyb3JDb2RlLkVSUl9W YWx1ZUNhbnRCZU51bGwsIGRlc3QpOworICAgICAgICAgICAgICAgICAgICAgfQorLSAgICAgICAg ICAgICAgICAgICAgZWxzZSBpZiAoZXhwciBpcyBFeHByTWVtYmVyR3JvdXAgbWVtR3JwKQorKyAg ICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoZXhwciBpcyBFeHByTWVtYmVyR3JvdXApCisgICAg ICAgICAgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgICAgICAgICAgRXhwck1lbWJlckdy b3VwIG1lbUdycCA9IChFeHByTWVtYmVyR3JvdXApZXhwcjsKKyAgICAgICAgICAgICAgICAgICAg ICAgICBCaW5kR3JwQ29udmVyc2lvbihtZW1HcnAsIGRlc3QsIHRydWUpOworICAgICAgICAgICAg ICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgZWxzZQorQEAgLTEzODcsOCArMTM5MCw5 IEBAIG5hbWVzcGFjZSBNaWNyb3NvZnQuQ1NoYXJwLlJ1bnRpbWVCaW5kZXIuU2VtYW50aWNzCisg ICAgICAgICAgICAgZm9yICg7OykKKyAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIERl YnVnLkFzc2VydChwRXhwciAhPSBudWxsKTsKKy0gICAgICAgICAgICAgICAgaWYgKHBFeHByIGlz IEV4cHJDYWxsIGNhbGwpCisrICAgICAgICAgICAgICAgIGlmIChwRXhwciBpcyBFeHByQ2FsbCkK KyAgICAgICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICAgICAgRXhwckNhbGwgY2FsbCA9 IChFeHByQ2FsbClwRXhwcjsKKyAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoY2FsbC5OdWxs YWJsZUNhbGxMaWZ0S2luZCkKKyAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg ICAgICAgICAgICBjYXNlIE51bGxhYmxlQ2FsbExpZnRLaW5kLk5vdExpZnRlZDoKK0BAIC0xNDAy LDggKzE0MDYsOSBAQCBuYW1lc3BhY2UgTWljcm9zb2Z0LkNTaGFycC5SdW50aW1lQmluZGVyLlNl bWFudGljcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAg ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgfQorLSAgICAgICAgICAgICAgICBlbHNl IGlmIChwRXhwciBpcyBFeHByVXNlckRlZmluZWRDb252ZXJzaW9uIHVkYykKKysgICAgICAgICAg ICAgICAgZWxzZSBpZiAocEV4cHIgaXMgRXhwclVzZXJEZWZpbmVkQ29udmVyc2lvbikKKyAgICAg ICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICAgICAgRXhwclVzZXJEZWZpbmVkQ29udmVy c2lvbiB1ZGMgPSAoRXhwclVzZXJEZWZpbmVkQ29udmVyc2lvbilwRXhwcjsKKyAgICAgICAgICAg ICAgICAgICAgIHBFeHByID0gdWRjLlVzZXJEZWZpbmVkQ2FsbDsKKyAgICAgICAgICAgICAgICAg ICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICB9CitkaWZmIC0tZ2l0IGEvc3JjL01pY3Jv c29mdC5DU2hhcnAvc3JjL01pY3Jvc29mdC9DU2hhcnAvUnVudGltZUJpbmRlci9TZW1hbnRpY3Mv RVhQUkV4dGVuc2lvbnMuY3MgYi9zcmMvTWljcm9zb2Z0LkNTaGFycC9zcmMvTWljcm9zb2Z0L0NT aGFycC9SdW50aW1lQmluZGVyL1NlbWFudGljcy9FWFBSRXh0ZW5zaW9ucy5jcworaW5kZXggMDc1 ZWQyM2ExMS4uNjQwOGRmNGMzNiAxMDA2NDQKKy0tLSBhL3NyYy9NaWNyb3NvZnQuQ1NoYXJwL3Ny Yy9NaWNyb3NvZnQvQ1NoYXJwL1J1bnRpbWVCaW5kZXIvU2VtYW50aWNzL0VYUFJFeHRlbnNpb25z LmNzCisrKysgYi9zcmMvTWljcm9zb2Z0LkNTaGFycC9zcmMvTWljcm9zb2Z0L0NTaGFycC9SdW50 aW1lQmluZGVyL1NlbWFudGljcy9FWFBSRXh0ZW5zaW9ucy5jcworQEAgLTMzLDggKzMzLDkgQEAg bmFtZXNwYWNlIE1pY3Jvc29mdC5DU2hhcnAuUnVudGltZUJpbmRlci5TZW1hbnRpY3MKKyAgICAg ICAgICAgICBFeHByIGV4cHJDdXIgPSBleHByOworICAgICAgICAgICAgIHdoaWxlIChleHByQ3Vy ICE9IG51bGwpCisgICAgICAgICAgICAgeworLSAgICAgICAgICAgICAgICBpZiAoZXhwckN1ciBp cyBFeHByTGlzdCBsaXN0KQorKyAgICAgICAgICAgICAgICBpZiAoZXhwckN1ciBpcyBFeHByTGlz dCkKKyAgICAgICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICAgICAgRXhwckxpc3QgbGlz dCA9IChFeHByTGlzdClleHByQ3VyOworICAgICAgICAgICAgICAgICAgICAgeWllbGQgcmV0dXJu IGxpc3QuT3B0aW9uYWxFbGVtZW50OworICAgICAgICAgICAgICAgICAgICAgZXhwckN1ciA9IGxp c3QuT3B0aW9uYWxOZXh0TGlzdE5vZGU7CisgICAgICAgICAgICAgICAgIH0KK0BAIC02MSwxMiAr NjIsMTIgQEAgbmFtZXNwYWNlIE1pY3Jvc29mdC5DU2hhcnAuUnVudGltZUJpbmRlci5TZW1hbnRp Y3MKKyAgICAgICAgIH0KKyAgICAgICAgIHB1YmxpYyBzdGF0aWMgYm9vbCBpc051bGwodGhpcyBF eHByIGV4cHIpCisgICAgICAgICB7CistICAgICAgICAgICAgcmV0dXJuIGV4cHIgaXMgRXhwckNv bnN0YW50IGNvbnN0YW50ICYmIGNvbnN0YW50LklzT0sgJiYgKGV4cHIuVHlwZS5mdW5kVHlwZSgp ID09IEZVTkRUWVBFLkZUX1JFRikgJiYgY29uc3RhbnQuVmFsLklzTnVsbFJlZjsKKysgICAgICAg ICAgICByZXR1cm4gZXhwciBpcyBFeHByQ29uc3RhbnQgJiYgKChFeHByQ29uc3RhbnQpZXhwciku SXNPSyAmJiAoZXhwci5UeXBlLmZ1bmRUeXBlKCkgPT0gRlVORFRZUEUuRlRfUkVGKSAmJiAoKEV4 cHJDb25zdGFudClleHByKS5WYWwuSXNOdWxsUmVmOworICAgICAgICAgfQorIAorICAgICAgICAg cHVibGljIHN0YXRpYyBib29sIElzWmVybyh0aGlzIEV4cHIgZXhwcikKKyAgICAgICAgIHsKKy0g ICAgICAgICAgICByZXR1cm4gZXhwciBpcyBFeHByQ29uc3RhbnQgY29uc3RhbnQgJiYgY29uc3Rh bnQuSXNPSyAmJiBjb25zdGFudC5Jc1plcm87CisrICAgICAgICAgICAgcmV0dXJuIGV4cHIgaXMg RXhwckNvbnN0YW50ICYmICgoRXhwckNvbnN0YW50KWV4cHIpLklzT0sgJiYgKChFeHByQ29uc3Rh bnQpZXhwcikuSXNaZXJvOworICAgICAgICAgfQorIAorICAgICAgICAgcHJpdmF0ZSBzdGF0aWMg RXhwciBHZXRTZXFWYWwodGhpcyBFeHByIGV4cHIpCitkaWZmIC0tZ2l0IGEvc3JjL01pY3Jvc29m dC5DU2hhcnAvc3JjL01pY3Jvc29mdC9DU2hhcnAvUnVudGltZUJpbmRlci9TZW1hbnRpY3MvRXhw bGljaXRDb252ZXJzaW9uLmNzIGIvc3JjL01pY3Jvc29mdC5DU2hhcnAvc3JjL01pY3Jvc29mdC9D U2hhcnAvUnVudGltZUJpbmRlci9TZW1hbnRpY3MvRXhwbGljaXRDb252ZXJzaW9uLmNzCitpbmRl eCBiNTVjZjA3MDc4Li45YWZlYWFjNjIyIDEwMDY0NAorLS0tIGEvc3JjL01pY3Jvc29mdC5DU2hh cnAvc3JjL01pY3Jvc29mdC9DU2hhcnAvUnVudGltZUJpbmRlci9TZW1hbnRpY3MvRXhwbGljaXRD b252ZXJzaW9uLmNzCisrKysgYi9zcmMvTWljcm9zb2Z0LkNTaGFycC9zcmMvTWljcm9zb2Z0L0NT aGFycC9SdW50aW1lQmluZGVyL1NlbWFudGljcy9FeHBsaWNpdENvbnZlcnNpb24uY3MKK0BAIC0y MDcsOCArMjA3LDkgQEAgbmFtZXNwYWNlIE1pY3Jvc29mdC5DU2hhcnAuUnVudGltZUJpbmRlci5T ZW1hbnRpY3MKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVlNGQUlMKCJCaW5kRXhwbGlj aXRDb252ZXJzaW9uIGZhaWxlZCB1bmV4cGVjdGVkbHkiKTsKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgICAgICAgICAgIH0KKy0gICAg ICAgICAgICAgICAgICAgICAgICBpZiAoX2V4cHJEZXN0IGlzIEV4cHJVc2VyRGVmaW5lZENvbnZl cnNpb24gdWRjKQorKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfZXhwckRlc3QgaXMgRXhw clVzZXJEZWZpbmVkQ29udmVyc2lvbikKKyAgICAgICAgICAgICAgICAgICAgICAgICB7CisrICAg ICAgICAgICAgICAgICAgICAgICAgICAgIEV4cHJVc2VyRGVmaW5lZENvbnZlcnNpb24gdWRjID0g KEV4cHJVc2VyRGVmaW5lZENvbnZlcnNpb24pX2V4cHJEZXN0OworICAgICAgICAgICAgICAgICAg ICAgICAgICAgICB1ZGMuQXJndW1lbnQgPSBfZXhwclNyYzsKKyAgICAgICAgICAgICAgICAgICAg ICAgICB9CisgICAgICAgICAgICAgICAgICAgICB9CitkaWZmIC0tZ2l0IGEvc3JjL01pY3Jvc29m dC5DU2hhcnAvc3JjL01pY3Jvc29mdC9DU2hhcnAvUnVudGltZUJpbmRlci9TZW1hbnRpY3MvRXhw ckZhY3RvcnkuY3MgYi9zcmMvTWljcm9zb2Z0LkNTaGFycC9zcmMvTWljcm9zb2Z0L0NTaGFycC9S dW50aW1lQmluZGVyL1NlbWFudGljcy9FeHByRmFjdG9yeS5jcworaW5kZXggMTU5ZjE1N2Y0My4u NGEwZTNjYjQ3OSAxMDA2NDQKKy0tLSBhL3NyYy9NaWNyb3NvZnQuQ1NoYXJwL3NyYy9NaWNyb3Nv ZnQvQ1NoYXJwL1J1bnRpbWVCaW5kZXIvU2VtYW50aWNzL0V4cHJGYWN0b3J5LmNzCisrKysgYi9z cmMvTWljcm9zb2Z0LkNTaGFycC9zcmMvTWljcm9zb2Z0L0NTaGFycC9SdW50aW1lQmluZGVyL1Nl bWFudGljcy9FeHByRmFjdG9yeS5jcworQEAgLTE3LDMzICsxNywzMyBAQCBuYW1lc3BhY2UgTWlj cm9zb2Z0LkNTaGFycC5SdW50aW1lQmluZGVyLlNlbWFudGljcworICAgICAgICAgICAgIERlYnVn LkFzc2VydChnbG9iYWxTeW1ib2xDb250ZXh0ICE9IG51bGwpOworICAgICAgICAgICAgIF9nbG9i YWxTeW1ib2xDb250ZXh0ID0gZ2xvYmFsU3ltYm9sQ29udGV4dDsKKyAgICAgICAgIH0KKy0gICAg ICAgIHByaXZhdGUgVHlwZU1hbmFnZXIgVHlwZXMgPT4gX2dsb2JhbFN5bWJvbENvbnRleHQuR2V0 VHlwZXMoKTsKKysgICAgICAgIHByaXZhdGUgVHlwZU1hbmFnZXIgVHlwZXMgeyBnZXQgeyByZXR1 cm4gX2dsb2JhbFN5bWJvbENvbnRleHQuR2V0VHlwZXMoKTsgfSB9CisgCistICAgICAgICBwcml2 YXRlIEJTWU1NR1IgR2xvYmFsU3ltYm9scyA9PiBfZ2xvYmFsU3ltYm9sQ29udGV4dC5HZXRHbG9i YWxTeW1ib2xzKCk7CisrICAgICAgICBwcml2YXRlIEJTWU1NR1IgR2xvYmFsU3ltYm9scyB7IGdl dCB7IHJldHVybiBfZ2xvYmFsU3ltYm9sQ29udGV4dC5HZXRHbG9iYWxTeW1ib2xzKCk7IH0gfQor IAorLSAgICAgICAgcHVibGljIEV4cHJDYWxsIENyZWF0ZUNhbGwoRVhQUkZMQUcgZmxhZ3MsIENU eXBlIHR5cGUsIEV4cHIgYXJndW1lbnRzLCBFeHByTWVtYmVyR3JvdXAgbWVtYmVyR3JvdXAsIE1l dGhXaXRoSW5zdCBtZXRob2QpID0+IAorLSAgICAgICAgICAgIG5ldyBFeHByQ2FsbCh0eXBlLCBm bGFncywgYXJndW1lbnRzLCBtZW1iZXJHcm91cCwgbWV0aG9kKTsKKysgICAgICAgIHB1YmxpYyBF eHByQ2FsbCBDcmVhdGVDYWxsKEVYUFJGTEFHIGZsYWdzLCBDVHlwZSB0eXBlLCBFeHByIGFyZ3Vt ZW50cywgRXhwck1lbWJlckdyb3VwIG1lbWJlckdyb3VwLCBNZXRoV2l0aEluc3QgbWV0aG9kKSAK KysgICAgICAgIHsgcmV0dXJuIG5ldyBFeHByQ2FsbCh0eXBlLCBmbGFncywgYXJndW1lbnRzLCBt ZW1iZXJHcm91cCwgbWV0aG9kKTsgfQorIAorLSAgICAgICAgcHVibGljIEV4cHJGaWVsZCBDcmVh dGVGaWVsZChDVHlwZSB0eXBlLCBFeHByIG9wdGlvbmFsT2JqZWN0LCBGaWVsZFdpdGhUeXBlIGZp ZWxkLCBib29sIGlzTFZhbHVlKSA9PiAKKy0gICAgICAgICAgICBuZXcgRXhwckZpZWxkKHR5cGUs IG9wdGlvbmFsT2JqZWN0LCBmaWVsZCwgaXNMVmFsdWUpOworKyAgICAgICAgcHVibGljIEV4cHJG aWVsZCBDcmVhdGVGaWVsZChDVHlwZSB0eXBlLCBFeHByIG9wdGlvbmFsT2JqZWN0LCBGaWVsZFdp dGhUeXBlIGZpZWxkLCBib29sIGlzTFZhbHVlKSAKKysgICAgICAgIHsgcmV0dXJuIG5ldyBFeHBy RmllbGQodHlwZSwgb3B0aW9uYWxPYmplY3QsIGZpZWxkLCBpc0xWYWx1ZSk7IH0KKyAKKy0gICAg ICAgIHB1YmxpYyBFeHByRnVuY1B0ciBDcmVhdGVGdW5jdGlvblBvaW50ZXIoRVhQUkZMQUcgZmxh Z3MsIENUeXBlIHR5cGUsIEV4cHIgb2JqLCBNZXRoV2l0aEluc3QgbWV0aG9kKSA9PiAKKy0gICAg ICAgICAgICBuZXcgRXhwckZ1bmNQdHIodHlwZSwgZmxhZ3MsIG9iaiwgbWV0aG9kKTsKKysgICAg ICAgIHB1YmxpYyBFeHByRnVuY1B0ciBDcmVhdGVGdW5jdGlvblBvaW50ZXIoRVhQUkZMQUcgZmxh Z3MsIENUeXBlIHR5cGUsIEV4cHIgb2JqLCBNZXRoV2l0aEluc3QgbWV0aG9kKQorKyAgICAgICAg eyByZXR1cm4gbmV3IEV4cHJGdW5jUHRyKHR5cGUsIGZsYWdzLCBvYmosIG1ldGhvZCk7IH0KKyAK Ky0gICAgICAgIHB1YmxpYyBFeHByQXJyYXlJbml0IENyZWF0ZUFycmF5SW5pdChDVHlwZSB0eXBl LCBFeHByIGFyZ3VtZW50cywgRXhwciBhcmd1bWVudERpbWVuc2lvbnMsIGludFtdIGRpbVNpemVz LCBpbnQgZGltU2l6ZSkgPT4gCistICAgICAgICAgICAgbmV3IEV4cHJBcnJheUluaXQodHlwZSwg YXJndW1lbnRzLCBhcmd1bWVudERpbWVuc2lvbnMsIGRpbVNpemVzLCBkaW1TaXplKTsKKysgICAg ICAgIHB1YmxpYyBFeHByQXJyYXlJbml0IENyZWF0ZUFycmF5SW5pdChDVHlwZSB0eXBlLCBFeHBy IGFyZ3VtZW50cywgRXhwciBhcmd1bWVudERpbWVuc2lvbnMsIGludFtdIGRpbVNpemVzLCBpbnQg ZGltU2l6ZSkKKysgICAgICAgIHsgcmV0dXJuIG5ldyBFeHByQXJyYXlJbml0KHR5cGUsIGFyZ3Vt ZW50cywgYXJndW1lbnREaW1lbnNpb25zLCBkaW1TaXplcywgZGltU2l6ZSk7IH0KKyAKKy0gICAg ICAgIHB1YmxpYyBFeHByUHJvcGVydHkgQ3JlYXRlUHJvcGVydHkoQ1R5cGUgdHlwZSwgRXhwciBv cHRpb25hbE9iamVjdCkgPT4gCistICAgICAgICAgICAgQ3JlYXRlUHJvcGVydHkodHlwZSwgbnVs bCwgbnVsbCwgQ3JlYXRlTWVtR3JvdXAob3B0aW9uYWxPYmplY3QsIG5ldyBNZXRoUHJvcFdpdGhJ bnN0KCkpLCBudWxsLCBudWxsKTsKKysgICAgICAgIHB1YmxpYyBFeHByUHJvcGVydHkgQ3JlYXRl UHJvcGVydHkoQ1R5cGUgdHlwZSwgRXhwciBvcHRpb25hbE9iamVjdCkKKysgICAgICAgIHsgcmV0 dXJuIENyZWF0ZVByb3BlcnR5KHR5cGUsIG51bGwsIG51bGwsIENyZWF0ZU1lbUdyb3VwKG9wdGlv bmFsT2JqZWN0LCBuZXcgTWV0aFByb3BXaXRoSW5zdCgpKSwgbnVsbCwgbnVsbCk7IH0KKyAKKy0g ICAgICAgIHB1YmxpYyBFeHByUHJvcGVydHkgQ3JlYXRlUHJvcGVydHkoQ1R5cGUgdHlwZSwgRXhw ciBvcHRpb25hbE9iamVjdFRocm91Z2gsIEV4cHIgYXJndW1lbnRzLCBFeHByTWVtYmVyR3JvdXAg bWVtYmVyR3JvdXAsIFByb3BXaXRoVHlwZSBwcm9wZXJ0eSwgTWV0aFdpdGhUeXBlIHNldE1ldGhv ZCkgPT4gCistICAgICAgICAgICAgbmV3IEV4cHJQcm9wZXJ0eSh0eXBlLCBvcHRpb25hbE9iamVj dFRocm91Z2gsIGFyZ3VtZW50cywgbWVtYmVyR3JvdXAsIHByb3BlcnR5LCBzZXRNZXRob2QpOwor KyAgICAgICAgcHVibGljIEV4cHJQcm9wZXJ0eSBDcmVhdGVQcm9wZXJ0eShDVHlwZSB0eXBlLCBF eHByIG9wdGlvbmFsT2JqZWN0VGhyb3VnaCwgRXhwciBhcmd1bWVudHMsIEV4cHJNZW1iZXJHcm91 cCBtZW1iZXJHcm91cCwgUHJvcFdpdGhUeXBlIHByb3BlcnR5LCBNZXRoV2l0aFR5cGUgc2V0TWV0 aG9kKQorKyAgICAgICAgeyByZXR1cm4gbmV3IEV4cHJQcm9wZXJ0eSh0eXBlLCBvcHRpb25hbE9i amVjdFRocm91Z2gsIGFyZ3VtZW50cywgbWVtYmVyR3JvdXAsIHByb3BlcnR5LCBzZXRNZXRob2Qp OyB9CisgCistICAgICAgICBwdWJsaWMgRXhwckV2ZW50IENyZWF0ZUV2ZW50KENUeXBlIHR5cGUs IEV4cHIgb3B0aW9uYWxPYmplY3QsIEV2ZW50V2l0aFR5cGUgZXZlbnRXaXRoVHlwZSkgPT4gCist ICAgICAgICAgICAgbmV3IEV4cHJFdmVudCh0eXBlLCBvcHRpb25hbE9iamVjdCwgZXZlbnRXaXRo VHlwZSk7CisrICAgICAgICBwdWJsaWMgRXhwckV2ZW50IENyZWF0ZUV2ZW50KENUeXBlIHR5cGUs IEV4cHIgb3B0aW9uYWxPYmplY3QsIEV2ZW50V2l0aFR5cGUgZXZlbnRXaXRoVHlwZSkgIAorKyAg ICAgICAgeyByZXR1cm4gbmV3IEV4cHJFdmVudCh0eXBlLCBvcHRpb25hbE9iamVjdCwgZXZlbnRX aXRoVHlwZSk7IH0KKyAKKy0gICAgICAgIHB1YmxpYyBFeHByTWVtYmVyR3JvdXAgQ3JlYXRlTWVt R3JvdXAoRVhQUkZMQUcgZmxhZ3MsIE5hbWUgbmFtZSwgVHlwZUFycmF5IHR5cGVBcmdzLCBTWU1L SU5EIHN5bUtpbmQsIENUeXBlIHBhcmVudFR5cGUsIE1ldGhvZE9yUHJvcGVydHlTeW1ib2wgbWVt YmVyU3ltYm9sLCBFeHByIG9iaiwgQ01lbWJlckxvb2t1cFJlc3VsdHMgbWVtYmVyTG9va3VwUmVz dWx0cykgPT4gCistICAgICAgICAgICAgbmV3IEV4cHJNZW1iZXJHcm91cChUeXBlcy5HZXRNZXRo R3JwVHlwZSgpLCBmbGFncywgbmFtZSwgdHlwZUFyZ3MsIHN5bUtpbmQsIHBhcmVudFR5cGUsIG1l bWJlclN5bWJvbCwgb2JqLCBtZW1iZXJMb29rdXBSZXN1bHRzKTsKKysgICAgICAgIHB1YmxpYyBF eHByTWVtYmVyR3JvdXAgQ3JlYXRlTWVtR3JvdXAoRVhQUkZMQUcgZmxhZ3MsIE5hbWUgbmFtZSwg VHlwZUFycmF5IHR5cGVBcmdzLCBTWU1LSU5EIHN5bUtpbmQsIENUeXBlIHBhcmVudFR5cGUsIE1l dGhvZE9yUHJvcGVydHlTeW1ib2wgbWVtYmVyU3ltYm9sLCBFeHByIG9iaiwgQ01lbWJlckxvb2t1 cFJlc3VsdHMgbWVtYmVyTG9va3VwUmVzdWx0cykKKysgICAgICAgIHsgcmV0dXJuIG5ldyBFeHBy TWVtYmVyR3JvdXAoVHlwZXMuR2V0TWV0aEdycFR5cGUoKSwgZmxhZ3MsIG5hbWUsIHR5cGVBcmdz LCBzeW1LaW5kLCBwYXJlbnRUeXBlLCBtZW1iZXJTeW1ib2wsIG9iaiwgbWVtYmVyTG9va3VwUmVz dWx0cyk7IH0KKyAKKyAgICAgICAgIHB1YmxpYyBFeHByTWVtYmVyR3JvdXAgQ3JlYXRlTWVtR3Jv dXAoRXhwciBvYmosIE1ldGhQcm9wV2l0aEluc3QgbWV0aG9kKQorICAgICAgICAgeworQEAgLTU3 LDI1ICs1NywyNSBAQCBuYW1lc3BhY2UgTWljcm9zb2Z0LkNTaGFycC5SdW50aW1lQmluZGVyLlNl bWFudGljcworICAgICAgICAgICAgICAgICBvYmosIG5ldyBDTWVtYmVyTG9va3VwUmVzdWx0cyhH bG9iYWxTeW1ib2xzLkFsbG9jUGFyYW1zKDEsIG5ld1tdIHt0eXBlfSksIG5hbWUpKTsKKyAgICAg ICAgIH0KKyAKKy0gICAgICAgIHB1YmxpYyBFeHByVXNlckRlZmluZWRDb252ZXJzaW9uIENyZWF0 ZVVzZXJEZWZpbmVkQ29udmVyc2lvbihFeHByIGFyZywgRXhwciBjYWxsLCBNZXRoV2l0aEluc3Qg bWV0aG9kKSA9PiAKKy0gICAgICAgICAgICBuZXcgRXhwclVzZXJEZWZpbmVkQ29udmVyc2lvbihh cmcsIGNhbGwsIG1ldGhvZCk7CisrICAgICAgICBwdWJsaWMgRXhwclVzZXJEZWZpbmVkQ29udmVy c2lvbiBDcmVhdGVVc2VyRGVmaW5lZENvbnZlcnNpb24oRXhwciBhcmcsIEV4cHIgY2FsbCwgTWV0 aFdpdGhJbnN0IG1ldGhvZCkKKysgICAgICAgIHsgcmV0dXJuIG5ldyBFeHByVXNlckRlZmluZWRD b252ZXJzaW9uKGFyZywgY2FsbCwgbWV0aG9kKTsgfQorIAorICAgICAgICAgcHVibGljIEV4cHJD YXN0IENyZWF0ZUNhc3QoQ1R5cGUgdHlwZSwgRXhwciBhcmd1bWVudCkgPT4gQ3JlYXRlQ2FzdCgw LCBDcmVhdGVDbGFzcyh0eXBlKSwgYXJndW1lbnQpOworIAorLSAgICAgICAgcHVibGljIEV4cHJD YXN0IENyZWF0ZUNhc3QoRVhQUkZMQUcgZmxhZ3MsIEV4cHJDbGFzcyB0eXBlLCBFeHByIGFyZ3Vt ZW50KSA9PiBuZXcgRXhwckNhc3QoZmxhZ3MsIHR5cGUsIGFyZ3VtZW50KTsKKysgICAgICAgIHB1 YmxpYyBFeHByQ2FzdCBDcmVhdGVDYXN0KEVYUFJGTEFHIGZsYWdzLCBFeHByQ2xhc3MgdHlwZSwg RXhwciBhcmd1bWVudCkgeyByZXR1cm4gbmV3IEV4cHJDYXN0KGZsYWdzLCB0eXBlLCBhcmd1bWVu dCk7IH0KKyAKKy0gICAgICAgIHB1YmxpYyBFeHByUmV0dXJuIENyZWF0ZVJldHVybihFeHByIG9w dGlvbmFsT2JqZWN0KSA9PiBuZXcgRXhwclJldHVybihvcHRpb25hbE9iamVjdCk7CisrICAgICAg ICBwdWJsaWMgRXhwclJldHVybiBDcmVhdGVSZXR1cm4oRXhwciBvcHRpb25hbE9iamVjdCkgeyBy ZXR1cm4gbmV3IEV4cHJSZXR1cm4ob3B0aW9uYWxPYmplY3QpOyB9CisgCistICAgICAgICBwdWJs aWMgRXhwckxvY2FsIENyZWF0ZUxvY2FsKExvY2FsVmFyaWFibGVTeW1ib2wgbG9jYWwpID0+IG5l dyBFeHByTG9jYWwobG9jYWwpOworKyAgICAgICAgcHVibGljIEV4cHJMb2NhbCBDcmVhdGVMb2Nh bChMb2NhbFZhcmlhYmxlU3ltYm9sIGxvY2FsKSB7IHJldHVybiBuZXcgRXhwckxvY2FsKGxvY2Fs KTsgfQorIAorLSAgICAgICAgcHVibGljIEV4cHJCb3VuZExhbWJkYSBDcmVhdGVBbm9ueW1vdXNN ZXRob2QoQWdncmVnYXRlVHlwZSBkZWxlZ2F0ZVR5cGUsIFNjb3BlIGFyZ3VtZW50U2NvcGUpID0+ IAorLSAgICAgICAgICAgIG5ldyBFeHByQm91bmRMYW1iZGEoZGVsZWdhdGVUeXBlLCBhcmd1bWVu dFNjb3BlKTsKKysgICAgICAgIHB1YmxpYyBFeHByQm91bmRMYW1iZGEgQ3JlYXRlQW5vbnltb3Vz TWV0aG9kKEFnZ3JlZ2F0ZVR5cGUgZGVsZWdhdGVUeXBlLCBTY29wZSBhcmd1bWVudFNjb3BlKQor KyAgICAgICAgeyByZXR1cm4gbmV3IEV4cHJCb3VuZExhbWJkYShkZWxlZ2F0ZVR5cGUsIGFyZ3Vt ZW50U2NvcGUpOyB9CisgCistICAgICAgICBwdWJsaWMgRXhwckhvaXN0ZWRMb2NhbEV4cHIgQ3Jl YXRlSG9pc3RlZExvY2FsSW5FeHByZXNzaW9uKCkgPT4gCistICAgICAgICAgICAgbmV3IEV4cHJI b2lzdGVkTG9jYWxFeHByKFR5cGVzLkdldE9wdFByZWRlZkFnZyhQcmVkZWZpbmVkVHlwZS5QVF9F WFBSRVNTSU9OKS5nZXRUaGlzVHlwZSgpKTsKKysgICAgICAgIHB1YmxpYyBFeHBySG9pc3RlZExv Y2FsRXhwciBDcmVhdGVIb2lzdGVkTG9jYWxJbkV4cHJlc3Npb24oKQorKyAgICAgICAgeyByZXR1 cm4gbmV3IEV4cHJIb2lzdGVkTG9jYWxFeHByKFR5cGVzLkdldE9wdFByZWRlZkFnZyhQcmVkZWZp bmVkVHlwZS5QVF9FWFBSRVNTSU9OKS5nZXRUaGlzVHlwZSgpKTsgfQorIAorLSAgICAgICAgcHVi bGljIEV4cHJNZXRob2RJbmZvIENyZWF0ZU1ldGhvZEluZm8oTWV0aFByb3BXaXRoSW5zdCBtd2kp ID0+IAorLSAgICAgICAgICAgIENyZWF0ZU1ldGhvZEluZm8obXdpLk1ldGgoKSwgbXdpLkdldFR5 cGUoKSwgbXdpLlR5cGVBcmdzKTsKKysgICAgICAgIHB1YmxpYyBFeHByTWV0aG9kSW5mbyBDcmVh dGVNZXRob2RJbmZvKE1ldGhQcm9wV2l0aEluc3QgbXdpKQorKyAgICAgICAgeyByZXR1cm4gQ3Jl YXRlTWV0aG9kSW5mbyhtd2kuTWV0aCgpLCBtd2kuR2V0VHlwZSgpLCBtd2kuVHlwZUFyZ3MpOyB9 CisgCisgICAgICAgICBwdWJsaWMgRXhwck1ldGhvZEluZm8gQ3JlYXRlTWV0aG9kSW5mbyhNZXRo b2RTeW1ib2wgbWV0aG9kLCBBZ2dyZWdhdGVUeXBlIG1ldGhvZFR5cGUsIFR5cGVBcnJheSBtZXRo b2RQYXJhbWV0ZXJzKQorICAgICAgICAgeworQEAgLTg0LDE5ICs4NCwxOSBAQCBuYW1lc3BhY2Ug TWljcm9zb2Z0LkNTaGFycC5SdW50aW1lQmluZGVyLlNlbWFudGljcworICAgICAgICAgICAgICAg ICBtZXRob2QsIG1ldGhvZFR5cGUsIG1ldGhvZFBhcmFtZXRlcnMpOworICAgICAgICAgfQorIAor LSAgICAgICAgcHVibGljIEV4cHJQcm9wZXJ0eUluZm8gQ3JlYXRlUHJvcGVydHlJbmZvKFByb3Bl cnR5U3ltYm9sIHByb3AsIEFnZ3JlZ2F0ZVR5cGUgcHJvcGVydHlUeXBlKSA9PiAKKy0gICAgICAg ICAgICBuZXcgRXhwclByb3BlcnR5SW5mbyhUeXBlcy5HZXRPcHRQcmVkZWZBZ2coUHJlZGVmaW5l ZFR5cGUuUFRfUFJPUEVSVFlJTkZPKS5nZXRUaGlzVHlwZSgpLCBwcm9wLCBwcm9wZXJ0eVR5cGUp OworKyAgICAgICAgcHVibGljIEV4cHJQcm9wZXJ0eUluZm8gQ3JlYXRlUHJvcGVydHlJbmZvKFBy b3BlcnR5U3ltYm9sIHByb3AsIEFnZ3JlZ2F0ZVR5cGUgcHJvcGVydHlUeXBlKQorKyAgICAgICAg eyByZXR1cm4gbmV3IEV4cHJQcm9wZXJ0eUluZm8oVHlwZXMuR2V0T3B0UHJlZGVmQWdnKFByZWRl ZmluZWRUeXBlLlBUX1BST1BFUlRZSU5GTykuZ2V0VGhpc1R5cGUoKSwgcHJvcCwgcHJvcGVydHlU eXBlKTsgfQorIAorLSAgICAgICAgcHVibGljIEV4cHJGaWVsZEluZm8gQ3JlYXRlRmllbGRJbmZv KEZpZWxkU3ltYm9sIGZpZWxkLCBBZ2dyZWdhdGVUeXBlIGZpZWxkVHlwZSkgPT4gCistICAgICAg ICAgICAgbmV3IEV4cHJGaWVsZEluZm8oZmllbGQsIGZpZWxkVHlwZSwgVHlwZXMuR2V0T3B0UHJl ZGVmQWdnKFByZWRlZmluZWRUeXBlLlBUX0ZJRUxESU5GTykuZ2V0VGhpc1R5cGUoKSk7CisrICAg ICAgICBwdWJsaWMgRXhwckZpZWxkSW5mbyBDcmVhdGVGaWVsZEluZm8oRmllbGRTeW1ib2wgZmll bGQsIEFnZ3JlZ2F0ZVR5cGUgZmllbGRUeXBlKQorKyAgICAgICAgeyByZXR1cm4gbmV3IEV4cHJG aWVsZEluZm8oZmllbGQsIGZpZWxkVHlwZSwgVHlwZXMuR2V0T3B0UHJlZGVmQWdnKFByZWRlZmlu ZWRUeXBlLlBUX0ZJRUxESU5GTykuZ2V0VGhpc1R5cGUoKSk7IH0KKyAKKy0gICAgICAgIHByaXZh dGUgRXhwclR5cGVPZiBDcmVhdGVUeXBlT2YoRXhwckNsYXNzIHNvdXJjZVR5cGUpID0+IAorLSAg ICAgICAgICAgIG5ldyBFeHByVHlwZU9mKFR5cGVzLkdldFJlcVByZWRlZkFnZyhQcmVkZWZpbmVk VHlwZS5QVF9UWVBFKS5nZXRUaGlzVHlwZSgpLCBzb3VyY2VUeXBlKTsKKysgICAgICAgIHByaXZh dGUgRXhwclR5cGVPZiBDcmVhdGVUeXBlT2YoRXhwckNsYXNzIHNvdXJjZVR5cGUpCisrICAgICAg ICB7IHJldHVybiBuZXcgRXhwclR5cGVPZihUeXBlcy5HZXRSZXFQcmVkZWZBZ2coUHJlZGVmaW5l ZFR5cGUuUFRfVFlQRSkuZ2V0VGhpc1R5cGUoKSwgc291cmNlVHlwZSk7IH0KKyAKKy0gICAgICAg IHB1YmxpYyBFeHByVHlwZU9mIENyZWF0ZVR5cGVPZihDVHlwZSBzb3VyY2VUeXBlKSA9PiBDcmVh dGVUeXBlT2YoQ3JlYXRlQ2xhc3Moc291cmNlVHlwZSkpOworKyAgICAgICAgcHVibGljIEV4cHJU eXBlT2YgQ3JlYXRlVHlwZU9mKENUeXBlIHNvdXJjZVR5cGUpIHsgcmV0dXJuIENyZWF0ZVR5cGVP ZihDcmVhdGVDbGFzcyhzb3VyY2VUeXBlKSk7IH0KKyAKKy0gICAgICAgIHB1YmxpYyBFeHByVXNl ckxvZ2ljYWxPcCBDcmVhdGVVc2VyTG9nT3AoQ1R5cGUgdHlwZSwgRXhwciB0cnVlRmFsc2VDYWxs LCBFeHByQ2FsbCBvcGVyYXRvckNhbGwpID0+IAorLSAgICAgICAgICAgIG5ldyBFeHByVXNlckxv Z2ljYWxPcCh0eXBlLCB0cnVlRmFsc2VDYWxsLCBvcGVyYXRvckNhbGwpOworKyAgICAgICAgcHVi bGljIEV4cHJVc2VyTG9naWNhbE9wIENyZWF0ZVVzZXJMb2dPcChDVHlwZSB0eXBlLCBFeHByIHRy dWVGYWxzZUNhbGwsIEV4cHJDYWxsIG9wZXJhdG9yQ2FsbCkKKysgICAgICAgIHsgcmV0dXJuIG5l dyBFeHByVXNlckxvZ2ljYWxPcCh0eXBlLCB0cnVlRmFsc2VDYWxsLCBvcGVyYXRvckNhbGwpOyB9 CisgCisgICAgICAgICBwdWJsaWMgRXhwclVzZXJMb2dpY2FsT3AgQ3JlYXRlVXNlckxvZ09wRXJy b3IoQ1R5cGUgdHlwZSwgRXhwciB0cnVlRmFsc2VDYWxsLCBFeHByQ2FsbCBvcGVyYXRvckNhbGwp CisgICAgICAgICB7CitAQCAtMTA1LDE2ICsxMDUsMTYgQEAgbmFtZXNwYWNlIE1pY3Jvc29mdC5D U2hhcnAuUnVudGltZUJpbmRlci5TZW1hbnRpY3MKKyAgICAgICAgICAgICByZXR1cm4gcnZhbDsK KyAgICAgICAgIH0KKyAKKy0gICAgICAgIHB1YmxpYyBFeHByQ29uY2F0IENyZWF0ZUNvbmNhdChF eHByIGZpcnN0LCBFeHByIHNlY29uZCkgPT4gbmV3IEV4cHJDb25jYXQoZmlyc3QsIHNlY29uZCk7 CisrICAgICAgICBwdWJsaWMgRXhwckNvbmNhdCBDcmVhdGVDb25jYXQoRXhwciBmaXJzdCwgRXhw ciBzZWNvbmQpIHsgcmV0dXJuIG5ldyBFeHByQ29uY2F0KGZpcnN0LCBzZWNvbmQpOyB9CisgCist ICAgICAgICBwdWJsaWMgRXhwckNvbnN0YW50IENyZWF0ZVN0cmluZ0NvbnN0YW50KHN0cmluZyBz dHIpID0+IAorLSAgICAgICAgICAgIENyZWF0ZUNvbnN0YW50KFR5cGVzLkdldFJlcVByZWRlZkFn ZyhQcmVkZWZpbmVkVHlwZS5QVF9TVFJJTkcpLmdldFRoaXNUeXBlKCksIENvbnN0VmFsLkdldChz dHIpKTsKKysgICAgICAgIHB1YmxpYyBFeHByQ29uc3RhbnQgQ3JlYXRlU3RyaW5nQ29uc3RhbnQo c3RyaW5nIHN0cikKKysgICAgICAgIHsgcmV0dXJuIENyZWF0ZUNvbnN0YW50KFR5cGVzLkdldFJl cVByZWRlZkFnZyhQcmVkZWZpbmVkVHlwZS5QVF9TVFJJTkcpLmdldFRoaXNUeXBlKCksIENvbnN0 VmFsLkdldChzdHIpKTsgfQorIAorLSAgICAgICAgcHVibGljIEV4cHJNdWx0aUdldCBDcmVhdGVN dWx0aUdldChFWFBSRkxBRyBmbGFncywgQ1R5cGUgdHlwZSwgRXhwck11bHRpIG11bHRpKSA9PiAK Ky0gICAgICAgICAgICBuZXcgRXhwck11bHRpR2V0KHR5cGUsIGZsYWdzLCBtdWx0aSk7CisrICAg ICAgICBwdWJsaWMgRXhwck11bHRpR2V0IENyZWF0ZU11bHRpR2V0KEVYUFJGTEFHIGZsYWdzLCBD VHlwZSB0eXBlLCBFeHByTXVsdGkgbXVsdGkpCisrICAgICAgICB7IHJldHVybiBuZXcgRXhwck11 bHRpR2V0KHR5cGUsIGZsYWdzLCBtdWx0aSk7IH0KKyAKKy0gICAgICAgIHB1YmxpYyBFeHByTXVs dGkgQ3JlYXRlTXVsdGkoRVhQUkZMQUcgZmxhZ3MsIENUeXBlIHR5cGUsIEV4cHIgbGVmdCwgRXhw ciBvcCkgPT4gCistICAgICAgICAgICAgbmV3IEV4cHJNdWx0aSh0eXBlLCBmbGFncywgbGVmdCwg b3ApOworKyAgICAgICAgcHVibGljIEV4cHJNdWx0aSBDcmVhdGVNdWx0aShFWFBSRkxBRyBmbGFn cywgQ1R5cGUgdHlwZSwgRXhwciBsZWZ0LCBFeHByIG9wKQorKyAgICAgICAgeyByZXR1cm4gbmV3 IEV4cHJNdWx0aSh0eXBlLCBmbGFncywgbGVmdCwgb3ApOyB9CisgCisgICAgICAgICAvLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLworICAgICAgICAgLy8KK0BAIC0xMjQsNyArMTI0LDcgQEAgbmFtZXNw YWNlIE1pY3Jvc29mdC5DU2hhcnAuUnVudGltZUJpbmRlci5TZW1hbnRpY3MKKyAgICAgICAgIC8v CisgICAgICAgICAvLyBUaGlzIHJldHVybnMgYSBudWxsIGZvciByZWZlcmVuY2UgdHlwZXMgYW5k IGFuIEVYUFJaRVJPSU5JVCBmb3IgYWxsIG90aGVycy4KKyAKKy0gICAgICAgIHB1YmxpYyBFeHBy IENyZWF0ZVplcm9Jbml0KENUeXBlIHR5cGUpID0+IENyZWF0ZVplcm9Jbml0KENyZWF0ZUNsYXNz KHR5cGUpLCBudWxsLCBmYWxzZSk7CisrICAgICAgICBwdWJsaWMgRXhwciBDcmVhdGVaZXJvSW5p dChDVHlwZSB0eXBlKSB7IHJldHVybiBDcmVhdGVaZXJvSW5pdChDcmVhdGVDbGFzcyh0eXBlKSwg bnVsbCwgZmFsc2UpOyB9CisgCisgICAgICAgICBwcml2YXRlIEV4cHIgQ3JlYXRlWmVyb0luaXQo RXhwckNsYXNzIHR5cGVFeHByLCBFeHByIG9yaWdpbmFsQ29uc3RydWN0b3JDYWxsLCBib29sIGlz Q29uc3RydWN0b3IpCisgICAgICAgICB7CitAQCAtMTg3LDE1ICsxODcsMTUgQEAgbmFtZXNwYWNl IE1pY3Jvc29mdC5DU2hhcnAuUnVudGltZUJpbmRlci5TZW1hbnRpY3MKKyAgICAgICAgICAgICBy ZXR1cm4gbmV3IEV4cHJaZXJvSW5pdCh0eXBlLCBvcmlnaW5hbENvbnN0cnVjdG9yQ2FsbCwgaXND b25zdHJ1Y3RvciwgaXNFcnJvcik7CisgICAgICAgICB9CisgCistICAgICAgICBwdWJsaWMgRXhw ckNvbnN0YW50IENyZWF0ZUNvbnN0YW50KENUeXBlIHR5cGUsIENvbnN0VmFsIGNvbnN0VmFsKSA9 PiBuZXcgRXhwckNvbnN0YW50KHR5cGUsIGNvbnN0VmFsKTsKKysgICAgICAgIHB1YmxpYyBFeHBy Q29uc3RhbnQgQ3JlYXRlQ29uc3RhbnQoQ1R5cGUgdHlwZSwgQ29uc3RWYWwgY29uc3RWYWwpIHsg cmV0dXJuIG5ldyBFeHByQ29uc3RhbnQodHlwZSwgY29uc3RWYWwpOyB9CisgCistICAgICAgICBw dWJsaWMgRXhwckNvbnN0YW50IENyZWF0ZUludGVnZXJDb25zdGFudChpbnQgeCkgPT4KKy0gICAg ICAgICAgICBDcmVhdGVDb25zdGFudChUeXBlcy5HZXRSZXFQcmVkZWZBZ2coUHJlZGVmaW5lZFR5 cGUuUFRfSU5UKS5nZXRUaGlzVHlwZSgpLCBDb25zdFZhbC5HZXQoeCkpOworKyAgICAgICAgcHVi bGljIEV4cHJDb25zdGFudCBDcmVhdGVJbnRlZ2VyQ29uc3RhbnQoaW50IHgpCisrICAgICAgICB7 IHJldHVybiBDcmVhdGVDb25zdGFudChUeXBlcy5HZXRSZXFQcmVkZWZBZ2coUHJlZGVmaW5lZFR5 cGUuUFRfSU5UKS5nZXRUaGlzVHlwZSgpLCBDb25zdFZhbC5HZXQoeCkpOyB9CisgCistICAgICAg ICBwdWJsaWMgRXhwckNvbnN0YW50IENyZWF0ZUJvb2xDb25zdGFudChib29sIGIpID0+IAorLSAg ICAgICAgICAgIENyZWF0ZUNvbnN0YW50KFR5cGVzLkdldFJlcVByZWRlZkFnZyhQcmVkZWZpbmVk VHlwZS5QVF9CT09MKS5nZXRUaGlzVHlwZSgpLCBDb25zdFZhbC5HZXQoYikpOworKyAgICAgICAg cHVibGljIEV4cHJDb25zdGFudCBDcmVhdGVCb29sQ29uc3RhbnQoYm9vbCBiKQorKyAgICAgICAg eyByZXR1cm4gQ3JlYXRlQ29uc3RhbnQoVHlwZXMuR2V0UmVxUHJlZGVmQWdnKFByZWRlZmluZWRU eXBlLlBUX0JPT0wpLmdldFRoaXNUeXBlKCksIENvbnN0VmFsLkdldChiKSk7IH0KKyAKKy0gICAg ICAgIHB1YmxpYyBFeHByQmxvY2sgQ3JlYXRlQmxvY2soRXhwclN0YXRlbWVudCBwT3B0aW9uYWxT dGF0ZW1lbnRzKSA9PiBuZXcgRXhwckJsb2NrKHBPcHRpb25hbFN0YXRlbWVudHMpOworKyAgICAg ICAgcHVibGljIEV4cHJCbG9jayBDcmVhdGVCbG9jayhFeHByU3RhdGVtZW50IHBPcHRpb25hbFN0 YXRlbWVudHMpIHsgcmV0dXJuIG5ldyBFeHByQmxvY2socE9wdGlvbmFsU3RhdGVtZW50cyk7IH0K KyAKKyAgICAgICAgIHB1YmxpYyBFeHByQXJyYXlJbmRleCBDcmVhdGVBcnJheUluZGV4KEV4cHIg YXJyYXksIEV4cHIgaW5kZXgpCisgICAgICAgICB7CitAQCAtMjEyLDExICsyMTIsMTEgQEAgbmFt ZXNwYWNlIE1pY3Jvc29mdC5DU2hhcnAuUnVudGltZUJpbmRlci5TZW1hbnRpY3MKKyAgICAgICAg ICAgICByZXR1cm4gbmV3IEV4cHJBcnJheUluZGV4KHR5cGUsIGFycmF5LCBpbmRleCk7CisgICAg ICAgICB9CisgCistICAgICAgICBwdWJsaWMgRXhwckJpbk9wIENyZWF0ZUJpbm9wKEV4cHJlc3Np b25LaW5kIGV4cHJLaW5kLCBDVHlwZSB0eXBlLCBFeHByIGxlZnQsIEV4cHIgcmlnaHQpID0+IAor LSAgICAgICAgICAgIG5ldyBFeHByQmluT3AoZXhwcktpbmQsIHR5cGUsIGxlZnQsIHJpZ2h0KTsK KysgICAgICAgIHB1YmxpYyBFeHByQmluT3AgQ3JlYXRlQmlub3AoRXhwcmVzc2lvbktpbmQgZXhw cktpbmQsIENUeXBlIHR5cGUsIEV4cHIgbGVmdCwgRXhwciByaWdodCkgCisrICAgICAgICB7IHJl dHVybiBuZXcgRXhwckJpbk9wKGV4cHJLaW5kLCB0eXBlLCBsZWZ0LCByaWdodCk7IH0KKyAKKy0g ICAgICAgIHB1YmxpYyBFeHByVW5hcnlPcCBDcmVhdGVVbmFyeU9wKEV4cHJlc3Npb25LaW5kIGV4 cHJLaW5kLCBDVHlwZSB0eXBlLCBFeHByIG9wZXJhbmQpID0+IAorLSAgICAgICAgICAgIG5ldyBF eHByVW5hcnlPcChleHByS2luZCwgdHlwZSwgb3BlcmFuZCk7CisrICAgICAgICBwdWJsaWMgRXhw clVuYXJ5T3AgQ3JlYXRlVW5hcnlPcChFeHByZXNzaW9uS2luZCBleHByS2luZCwgQ1R5cGUgdHlw ZSwgRXhwciBvcGVyYW5kKQorKyAgICAgICAgeyByZXR1cm4gbmV3IEV4cHJVbmFyeU9wKGV4cHJL aW5kLCB0eXBlLCBvcGVyYW5kKTsgfQorIAorICAgICAgICAgcHVibGljIEV4cHJPcGVyYXRvciBD cmVhdGVPcGVyYXRvcihFeHByZXNzaW9uS2luZCBleHByS2luZCwgQ1R5cGUgdHlwZSwgRXhwciBh cmcxLCBFeHByIGFyZzIpCisgICAgICAgICB7CitAQCAtMjI4LDEyICsyMjgsMTIgQEAgbmFtZXNw YWNlIE1pY3Jvc29mdC5DU2hhcnAuUnVudGltZUJpbmRlci5TZW1hbnRpY3MKKyAgICAgICAgIH0K KyAKKyAKKy0gICAgICAgIHB1YmxpYyBFeHByQmluT3AgQ3JlYXRlVXNlckRlZmluZWRCaW5vcChF eHByZXNzaW9uS2luZCBleHByS2luZCwgQ1R5cGUgdHlwZSwgRXhwciBsZWZ0LCBFeHByIHJpZ2h0 LCBFeHByIGNhbGwsIE1ldGhQcm9wV2l0aEluc3QgdXNlck1ldGhvZCkgPT4gCistICAgICAgICAg ICAgbmV3IEV4cHJCaW5PcChleHByS2luZCwgdHlwZSwgbGVmdCwgcmlnaHQsIGNhbGwsIHVzZXJN ZXRob2QpOworKyAgICAgICAgcHVibGljIEV4cHJCaW5PcCBDcmVhdGVVc2VyRGVmaW5lZEJpbm9w KEV4cHJlc3Npb25LaW5kIGV4cHJLaW5kLCBDVHlwZSB0eXBlLCBFeHByIGxlZnQsIEV4cHIgcmln aHQsIEV4cHIgY2FsbCwgTWV0aFByb3BXaXRoSW5zdCB1c2VyTWV0aG9kKQorKyAgICAgICAgeyBy ZXR1cm4gbmV3IEV4cHJCaW5PcChleHByS2luZCwgdHlwZSwgbGVmdCwgcmlnaHQsIGNhbGwsIHVz ZXJNZXRob2QpOyB9CisgCisgICAgICAgICAvLyBUaGUgY2FsbCBtYXkgYmUgbGlmdGVkLCBidXQg d2UgZG8gbm90IG1hcmsgdGhlIG91dGVyIGJpbm9wIGFzIGxpZnRlZC4KKy0gICAgICAgIHB1Ymxp YyBFeHByVW5hcnlPcCBDcmVhdGVVc2VyRGVmaW5lZFVuYXJ5T3BlcmF0b3IoRXhwcmVzc2lvbktp bmQgZXhwcktpbmQsIENUeXBlIHR5cGUsIEV4cHIgb3BlcmFuZCwgRXhwckNhbGwgY2FsbCwgTWV0 aFByb3BXaXRoSW5zdCB1c2VyTWV0aG9kKSA9PiAKKy0gICAgICAgICAgICBuZXcgRXhwclVuYXJ5 T3AoZXhwcktpbmQsIHR5cGUsIG9wZXJhbmQsIGNhbGwsIHVzZXJNZXRob2QpOworKyAgICAgICAg cHVibGljIEV4cHJVbmFyeU9wIENyZWF0ZVVzZXJEZWZpbmVkVW5hcnlPcGVyYXRvcihFeHByZXNz aW9uS2luZCBleHByS2luZCwgQ1R5cGUgdHlwZSwgRXhwciBvcGVyYW5kLCBFeHByQ2FsbCBjYWxs LCBNZXRoUHJvcFdpdGhJbnN0IHVzZXJNZXRob2QpCisrICAgICAgICB7IHJldHVybiBuZXcgRXhw clVuYXJ5T3AoZXhwcktpbmQsIHR5cGUsIG9wZXJhbmQsIGNhbGwsIHVzZXJNZXRob2QpOyB9Cisg CisgICAgICAgICBwdWJsaWMgRXhwclVuYXJ5T3AgQ3JlYXRlTmVnKEVYUFJGTEFHIGZsYWdzLCBF eHByIG9wZXJhbmQpCisgICAgICAgICB7CitAQCAtMjQ2LDIzICsyNDYsMjIgQEAgbmFtZXNwYWNl IE1pY3Jvc29mdC5DU2hhcnAuUnVudGltZUJpbmRlci5TZW1hbnRpY3MKKyAgICAgICAgIC8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vCisgICAgICAgICAvLyBDcmVhdGUgYSBub2RlIHRoYXQgZXZhbHVh dGVzIHRoZSBmaXJzdCwgZXZhbHVhdGVzIHRoZSBzZWNvbmQsIHJlc3VsdHMgaW4gdGhlIHNlY29u ZC4KKyAKKy0gICAgICAgIHB1YmxpYyBFeHByQmluT3AgQ3JlYXRlU2VxdWVuY2UoRXhwciBmaXJz dCwgRXhwciBzZWNvbmQpID0+CistICAgICAgICAgICAgQ3JlYXRlQmlub3AoRXhwcmVzc2lvbktp bmQuU2VxdWVuY2UsIHNlY29uZC5UeXBlLCBmaXJzdCwgc2Vjb25kKTsKKysgICAgICAgIHB1Ymxp YyBFeHByQmluT3AgQ3JlYXRlU2VxdWVuY2UoRXhwciBmaXJzdCwgRXhwciBzZWNvbmQpCisrICAg ICAgICB7IHJldHVybiBDcmVhdGVCaW5vcChFeHByZXNzaW9uS2luZC5TZXF1ZW5jZSwgc2Vjb25k LlR5cGUsIGZpcnN0LCBzZWNvbmQpOyB9CisgCisgICAgICAgICAvLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLworICAgICAgICAgLy8gQ3JlYXRlIGEgbm9kZSB0aGF0IGV2YWx1YXRlcyB0aGUgZmlyc3Qs IGV2YWx1YXRlcyB0aGUgc2Vjb25kLCByZXN1bHRzIGluIHRoZSBmaXJzdC4KKyAKKy0gICAgICAg IHB1YmxpYyBFeHByQmluT3AgQ3JlYXRlUmV2ZXJzZVNlcXVlbmNlKEV4cHIgZmlyc3QsIEV4cHIg c2Vjb25kKSA9PgorLSAgICAgICAgICAgIENyZWF0ZUJpbm9wKEV4cHJlc3Npb25LaW5kLlNlcXVl bmNlUmV2ZXJzZSwgZmlyc3QuVHlwZSwgZmlyc3QsIHNlY29uZCk7CisrICAgICAgICBwdWJsaWMg RXhwckJpbk9wIENyZWF0ZVJldmVyc2VTZXF1ZW5jZShFeHByIGZpcnN0LCBFeHByIHNlY29uZCkK KysgICAgICAgIHsgcmV0dXJuIENyZWF0ZUJpbm9wKEV4cHJlc3Npb25LaW5kLlNlcXVlbmNlUmV2 ZXJzZSwgZmlyc3QuVHlwZSwgZmlyc3QsIHNlY29uZCk7IH0KKyAKKy0gICAgICAgIHB1YmxpYyBF eHByQXNzaWdubWVudCBDcmVhdGVBc3NpZ25tZW50KEV4cHIgbGVmdCwgRXhwciByaWdodCkgPT4g bmV3IEV4cHJBc3NpZ25tZW50KGxlZnQsIHJpZ2h0KTsKKysgICAgICAgIHB1YmxpYyBFeHByQXNz aWdubWVudCBDcmVhdGVBc3NpZ25tZW50KEV4cHIgbGVmdCwgRXhwciByaWdodCkgeyByZXR1cm4g bmV3IEV4cHJBc3NpZ25tZW50KGxlZnQsIHJpZ2h0KTsgfQorIAorICAgICAgICAgLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8KKyAKKy0gICAgICAgIHB1YmxpYyBFeHByTmFtZWRBcmd1bWVudFNwZWNp ZmljYXRpb24gQ3JlYXRlTmFtZWRBcmd1bWVudFNwZWNpZmljYXRpb24oTmFtZSBuYW1lLCBFeHBy IHZhbHVlKSA9PgorLSAgICAgICAgICAgIG5ldyBFeHByTmFtZWRBcmd1bWVudFNwZWNpZmljYXRp b24obmFtZSwgdmFsdWUpOworKyAgICAgICAgcHVibGljIEV4cHJOYW1lZEFyZ3VtZW50U3BlY2lm aWNhdGlvbiBDcmVhdGVOYW1lZEFyZ3VtZW50U3BlY2lmaWNhdGlvbihOYW1lIG5hbWUsIEV4cHIg dmFsdWUpIHsgcmV0dXJuIG5ldyBFeHByTmFtZWRBcmd1bWVudFNwZWNpZmljYXRpb24obmFtZSwg dmFsdWUpOyB9CisgCistICAgICAgICBwdWJsaWMgRXhwcldyYXAgQ3JlYXRlV3JhcChFeHByIGV4 cHJlc3Npb24pID0+IG5ldyBFeHByV3JhcChleHByZXNzaW9uKTsKKysgICAgICAgIHB1YmxpYyBF eHByV3JhcCBDcmVhdGVXcmFwKEV4cHIgZXhwcmVzc2lvbikgeyByZXR1cm4gbmV3IEV4cHJXcmFw KGV4cHJlc3Npb24pOyB9CisgCisgICAgICAgICBwdWJsaWMgRXhwckJpbk9wIENyZWF0ZVNhdmUo RXhwcldyYXAgd3JhcCkKKyAgICAgICAgIHsKK0BAIC0yNzIsNyArMjcxLDcgQEAgbmFtZXNwYWNl IE1pY3Jvc29mdC5DU2hhcnAuUnVudGltZUJpbmRlci5TZW1hbnRpY3MKKyAgICAgICAgICAgICBy ZXR1cm4gZXhwcjsKKyAgICAgICAgIH0KKyAKKy0gICAgICAgIHB1YmxpYyBFeHByQ29uc3RhbnQg Q3JlYXRlTnVsbCgpID0+IENyZWF0ZUNvbnN0YW50KFR5cGVzLkdldE51bGxUeXBlKCksIGRlZmF1 bHQoQ29uc3RWYWwpKTsKKysgICAgICAgIHB1YmxpYyBFeHByQ29uc3RhbnQgQ3JlYXRlTnVsbCgp IHsgcmV0dXJuIENyZWF0ZUNvbnN0YW50KFR5cGVzLkdldE51bGxUeXBlKCksIGRlZmF1bHQoQ29u c3RWYWwpKTsgfQorIAorICAgICAgICAgcHVibGljIHZvaWQgQXBwZW5kSXRlbVRvTGlzdCgKKyAg ICAgICAgICAgICBFeHByIG5ld0l0ZW0sCitAQCAtMzA2LDE0ICszMDUsMTMgQEAgbmFtZXNwYWNl IE1pY3Jvc29mdC5DU2hhcnAuUnVudGltZUJpbmRlci5TZW1hbnRpY3MKKyAgICAgICAgICAgICBs YXN0ID0gbGlzdC5PcHRpb25hbE5leHRMaXN0Tm9kZTsKKyAgICAgICAgIH0KKyAKKy0gICAgICAg IHB1YmxpYyBFeHByTGlzdCBDcmVhdGVMaXN0KEV4cHIgb3AxLCBFeHByIG9wMikgPT4gbmV3IEV4 cHJMaXN0KG9wMSwgb3AyKTsKKysgICAgICAgIHB1YmxpYyBFeHByTGlzdCBDcmVhdGVMaXN0KEV4 cHIgb3AxLCBFeHByIG9wMikgeyByZXR1cm4gbmV3IEV4cHJMaXN0KG9wMSwgb3AyKTsgfQorIAor LSAgICAgICAgcHVibGljIEV4cHJMaXN0IENyZWF0ZUxpc3QoRXhwciBvcDEsIEV4cHIgb3AyLCBF eHByIG9wMykgPT4gQ3JlYXRlTGlzdChvcDEsIENyZWF0ZUxpc3Qob3AyLCBvcDMpKTsKKysgICAg ICAgIHB1YmxpYyBFeHByTGlzdCBDcmVhdGVMaXN0KEV4cHIgb3AxLCBFeHByIG9wMiwgRXhwciBv cDMpIHsgcmV0dXJuIENyZWF0ZUxpc3Qob3AxLCBDcmVhdGVMaXN0KG9wMiwgb3AzKSk7IH0KKyAK Ky0gICAgICAgIHB1YmxpYyBFeHByTGlzdCBDcmVhdGVMaXN0KEV4cHIgb3AxLCBFeHByIG9wMiwg RXhwciBvcDMsIEV4cHIgb3A0KSA9PgorLSAgICAgICAgICAgIENyZWF0ZUxpc3Qob3AxLCBDcmVh dGVMaXN0KG9wMiwgQ3JlYXRlTGlzdChvcDMsIG9wNCkpKTsKKysgICAgICAgIHB1YmxpYyBFeHBy TGlzdCBDcmVhdGVMaXN0KEV4cHIgb3AxLCBFeHByIG9wMiwgRXhwciBvcDMsIEV4cHIgb3A0KSB7 IHJldHVybiBDcmVhdGVMaXN0KG9wMSwgQ3JlYXRlTGlzdChvcDIsIENyZWF0ZUxpc3Qob3AzLCBv cDQpKSk7IH0KKyAKKy0gICAgICAgIHB1YmxpYyBFeHByQ2xhc3MgQ3JlYXRlQ2xhc3MoQ1R5cGUg dHlwZSkgPT4gbmV3IEV4cHJDbGFzcyh0eXBlKTsKKysgICAgICAgIHB1YmxpYyBFeHByQ2xhc3Mg Q3JlYXRlQ2xhc3MoQ1R5cGUgdHlwZSkgeyByZXR1cm4gbmV3IEV4cHJDbGFzcyh0eXBlKTsgfQor ICAgICB9CisgfQorIAorZGlmZiAtLWdpdCBhL3NyYy9NaWNyb3NvZnQuQ1NoYXJwL3NyYy9NaWNy b3NvZnQvQ1NoYXJwL1J1bnRpbWVCaW5kZXIvU2VtYW50aWNzL0V4cHJlc3Npb25CaW5kZXIuY3Mg Yi9zcmMvTWljcm9zb2Z0LkNTaGFycC9zcmMvTWljcm9zb2Z0L0NTaGFycC9SdW50aW1lQmluZGVy L1NlbWFudGljcy9FeHByZXNzaW9uQmluZGVyLmNzCitpbmRleCBlZTc1ZTdiMzhlLi5iZDdjNTJm ODdlIDEwMDY0NAorLS0tIGEvc3JjL01pY3Jvc29mdC5DU2hhcnAvc3JjL01pY3Jvc29mdC9DU2hh cnAvUnVudGltZUJpbmRlci9TZW1hbnRpY3MvRXhwcmVzc2lvbkJpbmRlci5jcworKysrIGIvc3Jj L01pY3Jvc29mdC5DU2hhcnAvc3JjL01pY3Jvc29mdC9DU2hhcnAvUnVudGltZUJpbmRlci9TZW1h bnRpY3MvRXhwcmVzc2lvbkJpbmRlci5jcworQEAgLTYwMSwxMCArNjAxLDExIEBAIG5hbWVzcGFj ZSBNaWNyb3NvZnQuQ1NoYXJwLlJ1bnRpbWVCaW5kZXIuU2VtYW50aWNzCisgICAgICAgICAgICAg Ly8gQ2hlY2sgaWYgd2UgaGF2ZSBhIGNvbXBpbGUgdGltZSBjb25zdGFudC4gSWYgd2UgZG8sIGNy ZWF0ZSBhIGNvbnN0YW50IGZvciBpdCBhbmQgc2V0IHRoZQorICAgICAgICAgICAgIC8vIG9yaWdp bmFsIHRyZWUgdG8gdGhlIGNhc3QuCisgCistICAgICAgICAgICAgaWYgKGV4cHJDb25zdCBpcyBF eHByQ29uc3RhbnQgY29uc3RhbnQgJiYgZXhwckZsYWdzID09IDAgJiYKKysgICAgICAgICAgICBp ZiAoZXhwckNvbnN0IGlzIEV4cHJDb25zdGFudCAmJiBleHByRmxhZ3MgPT0gMCAmJgorICAgICAg ICAgICAgICAgICBleHByU3JjLlR5cGUuZnVuZFR5cGUoKSA9PSB0eXBlRGVzdC5mdW5kVHlwZSgp ICYmCistICAgICAgICAgICAgICAgICghZXhwclNyYy5UeXBlLmlzUHJlZGVmVHlwZShQcmVkZWZp bmVkVHlwZS5QVF9TVFJJTkcpIHx8IGNvbnN0YW50LlZhbC5Jc051bGxSZWYpKQorKyAgICAgICAg ICAgICAgICAoIWV4cHJTcmMuVHlwZS5pc1ByZWRlZlR5cGUoUHJlZGVmaW5lZFR5cGUuUFRfU1RS SU5HKSB8fCAoKEV4cHJDb25zdGFudClleHByQ29uc3QpLlZhbC5Jc051bGxSZWYpKQorICAgICAg ICAgICAgIHsKKysgICAgICAgICAgICAgICAgRXhwckNvbnN0YW50IGNvbnN0YW50ID0gKEV4cHJD b25zdGFudClleHByQ29uc3Q7CisgICAgICAgICAgICAgICAgIEV4cHJDb25zdGFudCBleHByID0g R2V0RXhwckZhY3RvcnkoKS5DcmVhdGVDb25zdGFudCh0eXBlRGVzdCwgY29uc3RhbnQuVmFsKTsK KyAgICAgICAgICAgICAgICAgcGV4cHJEZXN0ID0gZXhwcjsKKyAgICAgICAgICAgICAgICAgcmV0 dXJuOworQEAgLTExOTEsOCArMTE5Miw5IEBAIG5hbWVzcGFjZSBNaWNyb3NvZnQuQ1NoYXJwLlJ1 bnRpbWVCaW5kZXIuU2VtYW50aWNzCisgICAgICAgICAgICAgd2hpbGUgKGxpc3QgIT0gbnVsbCkK KyAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIEV4cHIgYXJnOworLSAgICAgICAgICAg ICAgICBpZiAobGlzdCBpcyBFeHByTGlzdCBuZXh0KQorKyAgICAgICAgICAgICAgICBpZiAobGlz dCBpcyBFeHByTGlzdCkKKyAgICAgICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICAgICAg RXhwckxpc3QgbmV4dCA9IChFeHByTGlzdClsaXN0OworICAgICAgICAgICAgICAgICAgICAgYXJn ID0gbmV4dC5PcHRpb25hbEVsZW1lbnQ7CisgICAgICAgICAgICAgICAgICAgICBsaXN0ID0gbmV4 dC5PcHRpb25hbE5leHRMaXN0Tm9kZTsKKyAgICAgICAgICAgICAgICAgfQorQEAgLTEyNjUsOCAr MTI2Nyw5IEBAIG5hbWVzcGFjZSBNaWNyb3NvZnQuQ1NoYXJwLlJ1bnRpbWVCaW5kZXIuU2VtYW50 aWNzCisgCisgICAgICAgICBwcml2YXRlIEV4cHIgVW53cmFwRXhwcmVzc2lvbihFeHByIHBFeHBy ZXNzaW9uKQorICAgICAgICAgeworLSAgICAgICAgICAgIHdoaWxlIChwRXhwcmVzc2lvbiBpcyBF eHByV3JhcCB3cmFwKQorKyAgICAgICAgICAgIHdoaWxlIChwRXhwcmVzc2lvbiBpcyBFeHByV3Jh cCkKKyAgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgIEV4cHJXcmFwIHdyYXAgPSAoRXhw cldyYXApcEV4cHJlc3Npb247CisgICAgICAgICAgICAgICAgIEV4cHIgd3JhcHBlZCA9IHdyYXAu T3B0aW9uYWxFeHByZXNzaW9uOworICAgICAgICAgICAgICAgICBpZiAod3JhcHBlZCA9PSBudWxs KQorICAgICAgICAgICAgICAgICB7CitAQCAtMTM0NCw4ICsxMzQ3LDkgQEAgbmFtZXNwYWNlIE1p Y3Jvc29mdC5DU2hhcnAuUnVudGltZUJpbmRlci5TZW1hbnRpY3MKKyAgICAgICAgICAgICAgICAg cmV0dXJuIGZhbHNlOworICAgICAgICAgICAgIGlmIChleHByLmlzTHZhbHVlKCkpCisgICAgICAg ICAgICAgeworLSAgICAgICAgICAgICAgICBpZiAoZXhwciBpcyBFeHByUHJvcGVydHkgcHJvcCkK KysgICAgICAgICAgICAgICAgaWYgKGV4cHIgaXMgRXhwclByb3BlcnR5KQorICAgICAgICAgICAg ICAgICB7CisrICAgICAgICAgICAgICAgICAgICBFeHByUHJvcGVydHkgcHJvcCA9IChFeHByUHJv cGVydHkpZXhwcjsKKyAgICAgICAgICAgICAgICAgICAgIENoZWNrTHZhbHVlUHJvcChwcm9wKTsK KyAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICBtYXJrRmllbGRBc3NpZ25lZChl eHByKTsKK0BAIC0xNTcwLDkgKzE1NzQsMTAgQEAgbmFtZXNwYWNlIE1pY3Jvc29mdC5DU2hhcnAu UnVudGltZUJpbmRlci5TZW1hbnRpY3MKKyAKKyAgICAgICAgICAgICAgICAgLy8gSWYgd2UncmUg aW52b2tpbmcgY29kZSBvbiBhIHN0cnVjdC12YWx1ZWQgZmllbGQsIG1hcmsgdGhlIHN0cnVjdCBh cyBhc3NpZ25lZCAodG8KKyAgICAgICAgICAgICAgICAgLy8gYXZvaWQgd2FybmluZyBDUzA2NDkp LgorLSAgICAgICAgICAgICAgICBpZiAocE9iamVjdCBpcyBFeHByRmllbGQgZmllbGQgJiYgIWZp ZWxkLkZpZWxkV2l0aFR5cGUuRmllbGQoKS5pc0Fzc2lnbmVkICYmICFzd3QuU3ltLklzRmllbGRT eW1ib2woKSAmJgorKyAgICAgICAgICAgICAgICBpZiAocE9iamVjdCBpcyBFeHByRmllbGQgJiYg ISgoRXhwckZpZWxkKXBPYmplY3QpLkZpZWxkV2l0aFR5cGUuRmllbGQoKS5pc0Fzc2lnbmVkICYm ICFzd3QuU3ltLklzRmllbGRTeW1ib2woKSAmJgorICAgICAgICAgICAgICAgICAgICAgdHlwZU9i ai5pc1N0cnVjdFR5cGUoKSAmJiAhdHlwZU9iai5pc1ByZWRlZmluZWQoKSkKKyAgICAgICAgICAg ICAgICAgeworKyAgICAgICAgICAgICAgICAgICAgRXhwckZpZWxkIGZpZWxkID0gKEV4cHJGaWVs ZCkgcE9iamVjdDsKKyAgICAgICAgICAgICAgICAgICAgIGZpZWxkLkZpZWxkV2l0aFR5cGUuRmll bGQoKS5pc0Fzc2lnbmVkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgfQorIAorQEAgLTE3Nzks OCArMTc4NCw5IEBAIG5hbWVzcGFjZSBNaWNyb3NvZnQuQ1NoYXJwLlJ1bnRpbWVCaW5kZXIuU2Vt YW50aWNzCisgCisgICAgICAgICAgICAgICAgICAgICBFeHByIGFyZ3VtZW50ID0gaW5kaXI7Cisg ICAgICAgICAgICAgICAgICAgICBFeHByIHJ2YWw7CistICAgICAgICAgICAgICAgICAgICBpZiAo YXJndW1lbnQgaXMgRXhwck5hbWVkQXJndW1lbnRTcGVjaWZpY2F0aW9uIG5hbWVkKQorKyAgICAg ICAgICAgICAgICAgICAgaWYgKGFyZ3VtZW50IGlzIEV4cHJOYW1lZEFyZ3VtZW50U3BlY2lmaWNh dGlvbikKKyAgICAgICAgICAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgICAgICAgICBF eHByTmFtZWRBcmd1bWVudFNwZWNpZmljYXRpb24gbmFtZWQgPSAoRXhwck5hbWVkQXJndW1lbnRT cGVjaWZpY2F0aW9uKWFyZ3VtZW50OworICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbmRl eCA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgLy8gSWYgd2UncmUgbmFtZWQsIGxvb2sg Zm9yIHRoZSB0eXBlIG9mIHRoZSBtYXRjaGluZyBuYW1lLgorICAgICAgICAgICAgICAgICAgICAg ICAgIGZvcmVhY2ggKE5hbWUgaSBpbiBtb3N0RGVyaXZlZE1ldGhvZC5QYXJhbWV0ZXJOYW1lcykK K0BAIC0xOTE4LDggKzE5MjQsOSBAQCBuYW1lc3BhY2UgTWljcm9zb2Z0LkNTaGFycC5SdW50aW1l QmluZGVyLlNlbWFudGljcworICAgICAgICAgICAgICAgICAgICAgRXhwciBleHByID0gaXQuQ3Vy cmVudCgpOworICAgICAgICAgICAgICAgICAgICAgY291bnQrKzsKKyAKKy0gICAgICAgICAgICAg ICAgICAgIGlmIChleHByIGlzIEV4cHJOYW1lZEFyZ3VtZW50U3BlY2lmaWNhdGlvbiBuYW1lZCkK KysgICAgICAgICAgICAgICAgICAgIGlmIChleHByIGlzIEV4cHJOYW1lZEFyZ3VtZW50U3BlY2lm aWNhdGlvbikKKyAgICAgICAgICAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgICAgICAg ICBFeHByTmFtZWRBcmd1bWVudFNwZWNpZmljYXRpb24gbmFtZWQgPSAoRXhwck5hbWVkQXJndW1l bnRTcGVjaWZpY2F0aW9uKWV4cHI7CisgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZWQuVmFs dWUgPSB0cnlDb252ZXJ0KG5hbWVkLlZhbHVlLCBlbGVtZW50VHlwZSk7CisgICAgICAgICAgICAg ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICBlbHNlCitAQCAtMTk0MSw4ICsxOTQ4LDkg QEAgbmFtZXNwYWNlIE1pY3Jvc29mdC5DU2hhcnAuUnVudGltZUJpbmRlci5TZW1hbnRpY3MKKyAK KyAgICAgICAgIHByaXZhdGUgdm9pZCBtYXJrRmllbGRBc3NpZ25lZChFeHByIGV4cHIpCisgICAg ICAgICB7CistICAgICAgICAgICAgaWYgKDAgIT0gKGV4cHIuRmxhZ3MgJiBFWFBSRkxBRy5FWEZf TFZBTFVFKSAmJiBleHByIGlzIEV4cHJGaWVsZCBmaWVsZCkKKysgICAgICAgICAgICBpZiAoMCAh PSAoZXhwci5GbGFncyAmIEVYUFJGTEFHLkVYRl9MVkFMVUUpICYmIGV4cHIgaXMgRXhwckZpZWxk KQorICAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgRXhwckZpZWxkIGZpZWxkID0gKEV4 cHJGaWVsZCkgZXhwcjsKKyAgICAgICAgICAgICAgICAgRmllbGRTeW1ib2wgc3ltYm9sOworICAg ICAgICAgICAgICAgICBkbworICAgICAgICAgICAgICAgICB7CitAQCAtMjAwOSw4ICsyMDE3LDkg QEAgbmFtZXNwYWNlIE1pY3Jvc29mdC5DU2hhcnAuUnVudGltZUJpbmRlci5TZW1hbnRpY3MKKyAg ICAgICAgICAgICBmb3IgKEV4cHIgbGlzdCA9IGFyZ3M7IGxpc3QgIT0gbnVsbDsgaWFyZysrKQor ICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgRXhwciBhcmc7CistICAgICAgICAgICAg ICAgIGlmIChsaXN0IGlzIEV4cHJMaXN0IG5leHQpCisrICAgICAgICAgICAgICAgIGlmIChsaXN0 IGlzIEV4cHJMaXN0KQorICAgICAgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgICAgICBF eHByTGlzdCBuZXh0ID0gKEV4cHJMaXN0KWxpc3Q7CisgICAgICAgICAgICAgICAgICAgICBhcmcg PSBuZXh0Lk9wdGlvbmFsRWxlbWVudDsKKyAgICAgICAgICAgICAgICAgICAgIGxpc3QgPSBuZXh0 Lk9wdGlvbmFsTmV4dExpc3ROb2RlOworICAgICAgICAgICAgICAgICB9CitAQCAtMjM2NCw4ICsy MzczLDkgQEAgbmFtZXNwYWNlIE1pY3Jvc29mdC5DU2hhcnAuUnVudGltZUJpbmRlci5TZW1hbnRp Y3MKKyAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIEV4cHIgYXJnOworIAorLSAgICAg ICAgICAgICAgICBpZiAobGlzdCBpcyBFeHByTGlzdCBuZXh0KQorKyAgICAgICAgICAgICAgICBp ZiAobGlzdCBpcyBFeHByTGlzdCkKKyAgICAgICAgICAgICAgICAgeworKyAgICAgICAgICAgICAg ICAgICAgRXhwckxpc3QgbmV4dCA9IChFeHByTGlzdClsaXN0OworICAgICAgICAgICAgICAgICAg ICAgYXJnID0gbmV4dC5PcHRpb25hbEVsZW1lbnQ7CisgICAgICAgICAgICAgICAgICAgICBsaXN0 ID0gbmV4dC5PcHRpb25hbE5leHRMaXN0Tm9kZTsKKyAgICAgICAgICAgICAgICAgfQorZGlmZiAt LWdpdCBhL3NyYy9NaWNyb3NvZnQuQ1NoYXJwL3NyYy9NaWNyb3NvZnQvQ1NoYXJwL1J1bnRpbWVC aW5kZXIvU2VtYW50aWNzL0dyb3VwVG9BcmdzQmluZGVyLmNzIGIvc3JjL01pY3Jvc29mdC5DU2hh cnAvc3JjL01pY3Jvc29mdC9DU2hhcnAvUnVudGltZUJpbmRlci9TZW1hbnRpY3MvR3JvdXBUb0Fy Z3NCaW5kZXIuY3MKK2luZGV4IDI1YThkNDAzNDEuLmQxN2RlMzk3N2QgMTAwNjQ0CistLS0gYS9z cmMvTWljcm9zb2Z0LkNTaGFycC9zcmMvTWljcm9zb2Z0L0NTaGFycC9SdW50aW1lQmluZGVyL1Nl bWFudGljcy9Hcm91cFRvQXJnc0JpbmRlci5jcworKysrIGIvc3JjL01pY3Jvc29mdC5DU2hhcnAv c3JjL01pY3Jvc29mdC9DU2hhcnAvUnVudGltZUJpbmRlci9TZW1hbnRpY3MvR3JvdXBUb0FyZ3NC aW5kZXIuY3MKK0BAIC01MTAsNyArNTEwLDcgQEAgbmFtZXNwYWNlIE1pY3Jvc29mdC5DU2hhcnAu UnVudGltZUJpbmRlci5TZW1hbnRpY3MKKyAgICAgICAgICAgICAgICAgICAgIC8vIHRoZW4gbGV0 IHVzIHRocm91Z2guCisgICAgICAgICAgICAgICAgICAgICBpZiAobWV0aHByb3AuaXNQYXJhbUFy cmF5ICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXggPCBwQXJndW1lbnRzLmNhcmcg JiYKKy0gICAgICAgICAgICAgICAgICAgICAgICBwQXJndW1lbnRzLnByZ2V4cHJbaW5kZXhdIGlz IEV4cHJBcnJheUluaXQgYXJyYXlJbml0ICYmIGFycmF5SW5pdC5HZW5lcmF0ZWRGb3JQYXJhbUFy cmF5KQorKyAgICAgICAgICAgICAgICAgICAgICAgIHBBcmd1bWVudHMucHJnZXhwcltpbmRleF0g aXMgRXhwckFycmF5SW5pdCAmJiAoKEV4cHJBcnJheUluaXQpcEFyZ3VtZW50cy5wcmdleHByW2lu ZGV4XSkuR2VuZXJhdGVkRm9yUGFyYW1BcnJheSkKKyAgICAgICAgICAgICAgICAgICAgIHsKKyAg ICAgICAgICAgICAgICAgICAgICAgICBwYXJhbUFycmF5QXJndW1lbnQgPSBwQXJndW1lbnRzLnBy Z2V4cHJbaW5kZXhdOworICAgICAgICAgICAgICAgICAgICAgfQorQEAgLTUxOCw3ICs1MTgsNyBA QCBuYW1lc3BhY2UgTWljcm9zb2Z0LkNTaGFycC5SdW50aW1lQmluZGVyLlNlbWFudGljcworICAg ICAgICAgICAgICAgICAgICAgLy8gUG9zaXRpb25hbC4KKyAgICAgICAgICAgICAgICAgICAgIGlm IChpbmRleCA8IHBBcmd1bWVudHMuY2FyZyAmJgorICAgICAgICAgICAgICAgICAgICAgICAgICEo cEFyZ3VtZW50cy5wcmdleHByW2luZGV4XSBpcyBFeHByTmFtZWRBcmd1bWVudFNwZWNpZmljYXRp b24pICYmCistICAgICAgICAgICAgICAgICAgICAgICAgIShwQXJndW1lbnRzLnByZ2V4cHJbaW5k ZXhdIGlzIEV4cHJBcnJheUluaXQgYXJyYXlJbml0UG9zICYmIGFycmF5SW5pdFBvcy5HZW5lcmF0 ZWRGb3JQYXJhbUFycmF5KSkKKysgICAgICAgICAgICAgICAgICAgICAgICAhKHBBcmd1bWVudHMu cHJnZXhwcltpbmRleF0gaXMgRXhwckFycmF5SW5pdCAmJiAoKEV4cHJBcnJheUluaXQpcEFyZ3Vt ZW50cy5wcmdleHByW2luZGV4XSkuR2VuZXJhdGVkRm9yUGFyYW1BcnJheSkpCisgICAgICAgICAg ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgcEV4cHJBcmd1bWVudHNbaW5k ZXhdID0gcEFyZ3VtZW50cy5wcmdleHByW2luZGV4KytdOworICAgICAgICAgICAgICAgICAgICAg ICAgIGNvbnRpbnVlOworQEAgLTgzOSw3ICs4MzksNyBAQCBuYW1lc3BhY2UgTWljcm9zb2Z0LkNT aGFycC5SdW50aW1lQmluZGVyLlNlbWFudGljcworICAgICAgICAgICAgICAgICBmb3IgKGludCBp ID0gMDsgaSA8IHBBcmd1bWVudHMuY2FyZzsgaSsrKQorICAgICAgICAgICAgICAgICB7CisgICAg ICAgICAgICAgICAgICAgICBFeHByIGV4cHIgPSBwcmdleHByW2ldOworLSAgICAgICAgICAgICAg ICAgICAgaWYgKGV4cHIgaXMgRXhwck5hbWVkQXJndW1lbnRTcGVjaWZpY2F0aW9uIG5hbWVkICYm IG5hbWVkLk5hbWUgPT0gcE5hbWUpCisrICAgICAgICAgICAgICAgICAgICBpZiAoZXhwciBpcyBF eHByTmFtZWRBcmd1bWVudFNwZWNpZmljYXRpb24gJiYgKChFeHByTmFtZWRBcmd1bWVudFNwZWNp ZmljYXRpb24pZXhwcikuTmFtZSA9PSBwTmFtZSkKKyAgICAgICAgICAgICAgICAgICAgIHsKKyAg ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXhwcjsKKyAgICAgICAgICAgICAgICAgICAg IH0KK0BAIC04NjEsNyArODYxLDggQEAgbmFtZXNwYWNlIE1pY3Jvc29mdC5DU2hhcnAuUnVudGlt ZUJpbmRlci5TZW1hbnRpY3MKKyAgICAgICAgICAgICAgICAgSGFzaFNldDxOYW1lPiBuYW1lcyA9 IG5ldyBIYXNoU2V0PE5hbWU+KCk7CisgICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBp IDwgX3BBcmd1bWVudHMuY2FyZzsgaSsrKQorICAgICAgICAgICAgICAgICB7CistICAgICAgICAg ICAgICAgICAgICBpZiAoIShfcEFyZ3VtZW50cy5wcmdleHByW2ldIGlzIEV4cHJOYW1lZEFyZ3Vt ZW50U3BlY2lmaWNhdGlvbiBuYW1lZCkpCisrICAgICAgICAgICAgICAgICAgICBFeHByTmFtZWRB cmd1bWVudFNwZWNpZmljYXRpb24gbmFtZWQ7CisrICAgICAgICAgICAgICAgICAgICBpZiAoIShf cEFyZ3VtZW50cy5wcmdleHByW2ldIGlzIEV4cHJOYW1lZEFyZ3VtZW50U3BlY2lmaWNhdGlvbikp CisgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFj dXJyZW50UG9zaXRpb24uSXNFbXB0eSgpKQorICAgICAgICAgICAgICAgICAgICAgICAgIHsKK0BA IC04NjksNiArODcwLDcgQEAgbmFtZXNwYWNlIE1pY3Jvc29mdC5DU2hhcnAuUnVudGltZUJpbmRl ci5TZW1hbnRpY3MKKyAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg ICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgICAgICB9CisrICAgICAgICAgICAg ICAgICAgICBuYW1lZCA9IChFeHByTmFtZWRBcmd1bWVudFNwZWNpZmljYXRpb24pIF9wQXJndW1l bnRzLnByZ2V4cHJbaV07CisgCisgICAgICAgICAgICAgICAgICAgICBOYW1lIG5hbWUgPSBuYW1l ZC5OYW1lOworICAgICAgICAgICAgICAgICAgICAgaWYgKCFtZXRocHJvcC5QYXJhbWV0ZXJOYW1l cy5Db250YWlucyhuYW1lKSkKK0BAIC0xMDgwLDggKzEwODIsOSBAQCBuYW1lc3BhY2UgTWljcm9z b2Z0LkNTaGFycC5SdW50aW1lQmluZGVyLlNlbWFudGljcworICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBFeHByIHBBcmd1bWVudCA9IF9wQXJndW1lbnRzLnByZ2V4cHJbaXZhcl07CisgCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIElmIHdlIGhhdmUgYSBuYW1lZCBhcmd1bWVu dCwgc3RyaXAgaXQgdG8gZG8gdGhlIGNvbnZlcnNpb24uCistICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGlmIChwQXJndW1lbnQgaXMgRXhwck5hbWVkQXJndW1lbnRTcGVjaWZpY2F0aW9uIG5h bWVkKQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocEFyZ3VtZW50IGlzIEV4cHJO YW1lZEFyZ3VtZW50U3BlY2lmaWNhdGlvbikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg eworKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRXhwck5hbWVkQXJndW1lbnRTcGVj aWZpY2F0aW9uIG5hbWVkID0gKEV4cHJOYW1lZEFyZ3VtZW50U3BlY2lmaWNhdGlvbilwQXJndW1l bnQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwQXJndW1lbnQgPSBuYW1lZC5W YWx1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorIAorZGlmZiAtLWdpdCBhL3Ny Yy9NaWNyb3NvZnQuQ1NoYXJwL3NyYy9NaWNyb3NvZnQvQ1NoYXJwL1J1bnRpbWVCaW5kZXIvU2Vt YW50aWNzL0ltcGxpY2l0Q29udmVyc2lvbi5jcyBiL3NyYy9NaWNyb3NvZnQuQ1NoYXJwL3NyYy9N aWNyb3NvZnQvQ1NoYXJwL1J1bnRpbWVCaW5kZXIvU2VtYW50aWNzL0ltcGxpY2l0Q29udmVyc2lv bi5jcworaW5kZXggYzllYjVhZTIxZC4uY2RlNTMzZDc1MCAxMDA2NDQKKy0tLSBhL3NyYy9NaWNy b3NvZnQuQ1NoYXJwL3NyYy9NaWNyb3NvZnQvQ1NoYXJwL1J1bnRpbWVCaW5kZXIvU2VtYW50aWNz L0ltcGxpY2l0Q29udmVyc2lvbi5jcworKysrIGIvc3JjL01pY3Jvc29mdC5DU2hhcnAvc3JjL01p Y3Jvc29mdC9DU2hhcnAvUnVudGltZUJpbmRlci9TZW1hbnRpY3MvSW1wbGljaXRDb252ZXJzaW9u LmNzCitAQCAtMTcyLDggKzE3Miw5IEBAIG5hbWVzcGFjZSBNaWNyb3NvZnQuQ1NoYXJwLlJ1bnRp bWVCaW5kZXIuU2VtYW50aWNzCisgICAgICAgICAgICAgICAgICAgICAgICAgVlNGQUlMKCJCYWQg dHlwZSBzeW1ib2wga2luZCIpOworICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg ICAgICAgICAgICAgICAgICAgY2FzZSBUeXBlS2luZC5US19NZXRob2RHcm91cFR5cGU6CistICAg ICAgICAgICAgICAgICAgICAgICAgaWYgKF9leHByU3JjIGlzIEV4cHJNZW1iZXJHcm91cCBtZW1H cnApCisrICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF9leHByU3JjIGlzIEV4cHJNZW1iZXJH cm91cCkKKyAgICAgICAgICAgICAgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgICAgICAg ICAgICAgIEV4cHJNZW1iZXJHcm91cCBtZW1HcnAgPSAoRXhwck1lbWJlckdyb3VwKV9leHByU3Jj OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFeHByQ2FsbCBvdXRFeHByOworICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBib29sIHJldFZhbCA9IF9iaW5kZXIuQmluZEdycENvbnZl cnNpb24obWVtR3JwLCBfdHlwZURlc3QsIF9uZWVkc0V4cHJEZXN0LCBvdXQgb3V0RXhwciwgZmFs c2UpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfZXhwckRlc3QgPSBvdXRFeHByOwor QEAgLTczNywxMCArNzM4LDEwIEBAIG5hbWVzcGFjZSBNaWNyb3NvZnQuQ1NoYXJwLlJ1bnRpbWVC aW5kZXIuU2VtYW50aWNzCisgICAgICAgICAgICAgICAgIC8vICogICBBIGNvbnN0YW50LWV4cHJl c3Npb24gb2YgdHlwZSBsb25nIGNhbiBiZSBjb252ZXJ0ZWQgdG8gdHlwZSB1bG9uZywgcHJvdmlk ZWQgdGhlIHZhbHVlIG9mCisgICAgICAgICAgICAgICAgIC8vICAgICB0aGUgY29uc3RhbnQtZXhw cmVzc2lvbiBpcyBub3QgbmVnYXRpdmUuCisgICAgICAgICAgICAgICAgIC8vIE5vdGU6IERvbid0 IHVzZSBHZXRDb25zdCBoZXJlIHNpbmNlIHRoZSBjb252ZXJzaW9uIG9ubHkgYXBwbGllcyB0byBi b25hLWZpZGUgY29tcGlsZSB0aW1lIGNvbnN0YW50cy4KKy0gICAgICAgICAgICAgICAgaWYgKF9l eHByU3JjIGlzIEV4cHJDb25zdGFudCBjb25zdGFudCAmJiBfZXhwclNyYy5Jc09LICYmCisrICAg ICAgICAgICAgICAgIGlmIChfZXhwclNyYyBpcyBFeHByQ29uc3RhbnQgJiYgX2V4cHJTcmMuSXNP SyAmJgorICAgICAgICAgICAgICAgICAgICAgKChwdFNyYyA9PSBQcmVkZWZpbmVkVHlwZS5QVF9J TlQgJiYgcHREZXN0ICE9IFByZWRlZmluZWRUeXBlLlBUX0JPT0wgJiYgcHREZXN0ICE9IFByZWRl ZmluZWRUeXBlLlBUX0NIQVIpIHx8CisgICAgICAgICAgICAgICAgICAgICAocHRTcmMgPT0gUHJl ZGVmaW5lZFR5cGUuUFRfTE9ORyAmJiBwdERlc3QgPT0gUHJlZGVmaW5lZFR5cGUuUFRfVUxPTkcp KSAmJgorLSAgICAgICAgICAgICAgICAgICAgaXNDb25zdGFudEluUmFuZ2UoY29uc3RhbnQsIF90 eXBlRGVzdCkpCisrICAgICAgICAgICAgICAgICAgICBpc0NvbnN0YW50SW5SYW5nZSgoKEV4cHJD b25zdGFudClfZXhwclNyYyksIF90eXBlRGVzdCkpCisgICAgICAgICAgICAgICAgIHsKKyAgICAg ICAgICAgICAgICAgICAgIC8vIFNwZWNpYWwgY2FzZSAoQ0xSIDYuMS42KTogaWYgaW50ZWdyYWwg Y29uc3RhbnQgaXMgaW4gcmFuZ2UsIHRoZSBjb252ZXJzaW9uIGlzIGEgbGVnYWwgaW1wbGljaXQg Y29udmVyc2lvbi4KKyAgICAgICAgICAgICAgICAgICAgIGNvbnZlcnRLaW5kID0gQ29udktpbmQu SW1wbGljaXQ7CitkaWZmIC0tZ2l0IGEvc3JjL01pY3Jvc29mdC5DU2hhcnAvc3JjL01pY3Jvc29m dC9DU2hhcnAvUnVudGltZUJpbmRlci9TZW1hbnRpY3MvTWV0aG9kVHlwZUluZmVycmVyLmNzIGIv c3JjL01pY3Jvc29mdC5DU2hhcnAvc3JjL01pY3Jvc29mdC9DU2hhcnAvUnVudGltZUJpbmRlci9T ZW1hbnRpY3MvTWV0aG9kVHlwZUluZmVycmVyLmNzCitpbmRleCA1MmQzNTRhYzUzLi5mNDM2ODQ2 OTBkIDEwMDY0NAorLS0tIGEvc3JjL01pY3Jvc29mdC5DU2hhcnAvc3JjL01pY3Jvc29mdC9DU2hh cnAvUnVudGltZUJpbmRlci9TZW1hbnRpY3MvTWV0aG9kVHlwZUluZmVycmVyLmNzCisrKysgYi9z cmMvTWljcm9zb2Z0LkNTaGFycC9zcmMvTWljcm9zb2Z0L0NTaGFycC9SdW50aW1lQmluZGVyL1Nl bWFudGljcy9NZXRob2RUeXBlSW5mZXJyZXIuY3MKK0BAIC0xMDYzLDEwICsxMDYzLDExIEBAIG5h bWVzcGFjZSBNaWNyb3NvZnQuQ1NoYXJwLlJ1bnRpbWVCaW5kZXIuU2VtYW50aWNzCisgICAgICAg ICAgICAgLy8gU1BFQzogICB5aWVsZHMgYSBzaW5nbGUgbWV0aG9kIHdpdGggcmV0dXJuIENUeXBl IFUgdGhlbiBhIGxvd2VyLWJvdW5kCisgICAgICAgICAgICAgLy8gU1BFQzogICBpbmZlcmVuY2Ug aXMgbWFkZSBmcm9tIFUgdG8gVGIuCisgCistICAgICAgICAgICAgaWYgKCEocFNvdXJjZSBpcyBF eHByTWVtYmVyR3JvdXAgbWVtR3JwKSkKKysgICAgICAgICAgICBpZiAoIShwU291cmNlIGlzIEV4 cHJNZW1iZXJHcm91cCkpCisgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICByZXR1cm4g ZmFsc2U7CisgICAgICAgICAgICAgfQorKyAgICAgICAgICAgIEV4cHJNZW1iZXJHcm91cCBtZW1H cnAgPSAoRXhwck1lbWJlckdyb3VwKXBTb3VyY2U7CisgICAgICAgICAgICAgcFR5cGUgPSBwVHlw ZS5HZXREZWxlZ2F0ZVR5cGVPZlBvc3NpYmxlRXhwcmVzc2lvbigpOworICAgICAgICAgICAgIGlm ICghcFR5cGUuaXNEZWxlZ2F0ZVR5cGUoKSkKKyAgICAgICAgICAgICB7CitkaWZmIC0tZ2l0IGEv c3JjL01pY3Jvc29mdC5DU2hhcnAvc3JjL01pY3Jvc29mdC9DU2hhcnAvUnVudGltZUJpbmRlci9T ZW1hbnRpY3MvTnVsbGFibGUuY3MgYi9zcmMvTWljcm9zb2Z0LkNTaGFycC9zcmMvTWljcm9zb2Z0 L0NTaGFycC9SdW50aW1lQmluZGVyL1NlbWFudGljcy9OdWxsYWJsZS5jcworaW5kZXggYjIzZmM0 NDUwOS4uN2RiZTgyMjdjYSAxMDA2NDQKKy0tLSBhL3NyYy9NaWNyb3NvZnQuQ1NoYXJwL3NyYy9N aWNyb3NvZnQvQ1NoYXJwL1J1bnRpbWVCaW5kZXIvU2VtYW50aWNzL051bGxhYmxlLmNzCisrKysg Yi9zcmMvTWljcm9zb2Z0LkNTaGFycC9zcmMvTWljcm9zb2Z0L0NTaGFycC9SdW50aW1lQmluZGVy L1NlbWFudGljcy9OdWxsYWJsZS5jcworQEAgLTI5LDggKzI5LDkgQEAgbmFtZXNwYWNlIE1pY3Jv c29mdC5DU2hhcnAuUnVudGltZUJpbmRlci5TZW1hbnRpY3MKKyAgICAgICAgIHsKKyAgICAgICAg ICAgICBEZWJ1Zy5Bc3NlcnQoZXhwciAhPSBudWxsKTsKKyAKKy0gICAgICAgICAgICBpZiAoZXhw ciBpcyBFeHByQ2FsbCBwQ2FsbCAmJiBwQ2FsbC5NZW1iZXJHcm91cC5PcHRpb25hbE9iamVjdCA9 PSBudWxsKQorKyAgICAgICAgICAgIGlmIChleHByIGlzIEV4cHJDYWxsICYmICgoRXhwckNhbGwp ZXhwcikuTWVtYmVyR3JvdXAuT3B0aW9uYWxPYmplY3QgPT0gbnVsbCkKKyAgICAgICAgICAgICB7 CisrICAgICAgICAgICAgICAgIEV4cHJDYWxsIHBDYWxsID0gKEV4cHJDYWxsKWV4cHI7CisgICAg ICAgICAgICAgICAgIE1ldGhvZFN5bWJvbCBtZXRoID0gcENhbGwuTWV0aFdpdGhJbnN0Lk1ldGgo KTsKKyAgICAgICAgICAgICAgICAgaWYgKG1ldGggIT0gbnVsbCAmJiBtZXRoLklzTnVsbGFibGVD b25zdHJ1Y3RvcigpKQorICAgICAgICAgICAgICAgICB7CitAQCAtNDUsNyArNDYsOCBAQCBuYW1l c3BhY2UgTWljcm9zb2Z0LkNTaGFycC5SdW50aW1lQmluZGVyLlNlbWFudGljcworIAorICAgICAg ICAgcHVibGljIHN0YXRpYyBFeHByIFN0cmlwTnVsbGFibGVDb25zdHJ1Y3RvcihFeHByIHBFeHBy KQorICAgICAgICAgeworLSAgICAgICAgICAgIHdoaWxlIChJc051bGxhYmxlQ29uc3RydWN0b3Io cEV4cHIsIG91dCBFeHByQ2FsbCBjYWxsKSkKKysgICAgICAgICAgICBFeHByQ2FsbCBjYWxsOwor KyAgICAgICAgICAgIHdoaWxlIChJc051bGxhYmxlQ29uc3RydWN0b3IocEV4cHIsIG91dCBjYWxs KSkKKyAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIHBFeHByID0gY2FsbC5PcHRpb25h bEFyZ3VtZW50czsKKyAgICAgICAgICAgICAgICAgRGVidWcuQXNzZXJ0KHBFeHByICE9IG51bGwg JiYgIShwRXhwciBpcyBFeHByTGlzdCkpOworQEAgLTYwLDcgKzYyLDggQEAgbmFtZXNwYWNlIE1p Y3Jvc29mdC5DU2hhcnAuUnVudGltZUJpbmRlci5TZW1hbnRpY3MKKyAgICAgICAgICAgICBEZWJ1 Zy5Bc3NlcnQoZXhwclNyYyAhPSBudWxsICYmIGV4cHJTcmMuVHlwZS5Jc051bGxhYmxlVHlwZSgp KTsKKyAKKyAgICAgICAgICAgICAvLyBGb3IgbmV3IFQ/KHgpLCB0aGUgYW5zd2VyIGlzIHguCist ICAgICAgICAgICAgaWYgKElzTnVsbGFibGVDb25zdHJ1Y3RvcihleHByU3JjLCBvdXQgRXhwckNh bGwgY2FsbCkpCisrICAgICAgICAgICAgRXhwckNhbGwgY2FsbDsKKysgICAgICAgICAgICBpZiAo SXNOdWxsYWJsZUNvbnN0cnVjdG9yKGV4cHJTcmMsIG91dCBjYWxsKSkKKyAgICAgICAgICAgICB7 CisgICAgICAgICAgICAgICAgIHZhciBhcmdzID0gY2FsbC5PcHRpb25hbEFyZ3VtZW50czsKKyAg ICAgICAgICAgICAgICAgRGVidWcuQXNzZXJ0KGFyZ3MgIT0gbnVsbCAmJiAhKGFyZ3MgaXMgRXhw ckxpc3QpKTsKK2RpZmYgLS1naXQgYS9zcmMvTWljcm9zb2Z0LkNTaGFycC9zcmMvTWljcm9zb2Z0 L0NTaGFycC9SdW50aW1lQmluZGVyL1NlbWFudGljcy9UcmVlL0V4cHJlc3Npb25JdGVyYXRvci5j cyBiL3NyYy9NaWNyb3NvZnQuQ1NoYXJwL3NyYy9NaWNyb3NvZnQvQ1NoYXJwL1J1bnRpbWVCaW5k ZXIvU2VtYW50aWNzL1RyZWUvRXhwcmVzc2lvbkl0ZXJhdG9yLmNzCitpbmRleCA5NmVlMDMyNDIy Li45Mzk3NTQzZGU2IDEwMDY0NAorLS0tIGEvc3JjL01pY3Jvc29mdC5DU2hhcnAvc3JjL01pY3Jv c29mdC9DU2hhcnAvUnVudGltZUJpbmRlci9TZW1hbnRpY3MvVHJlZS9FeHByZXNzaW9uSXRlcmF0 b3IuY3MKKysrKyBiL3NyYy9NaWNyb3NvZnQuQ1NoYXJwL3NyYy9NaWNyb3NvZnQvQ1NoYXJwL1J1 bnRpbWVCaW5kZXIvU2VtYW50aWNzL1RyZWUvRXhwcmVzc2lvbkl0ZXJhdG9yLmNzCitAQCAtODMs OCArODMsOSBAQCBuYW1lc3BhY2UgTWljcm9zb2Z0LkNTaGFycC5SdW50aW1lQmluZGVyLlNlbWFu dGljcworICAgICAgICAgICAgICAgICBfcExpc3QgPSBudWxsOworICAgICAgICAgICAgICAgICBf cEN1cnJlbnQgPSBudWxsOworICAgICAgICAgICAgIH0KKy0gICAgICAgICAgICBlbHNlIGlmIChw RXhwciBpcyBFeHByTGlzdCBwTGlzdCkKKysgICAgICAgICAgICBlbHNlIGlmIChwRXhwciBpcyBF eHByTGlzdCkKKyAgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgIEV4cHJMaXN0IHBMaXN0 ID0gKEV4cHJMaXN0KXBFeHByOworICAgICAgICAgICAgICAgICBfcExpc3QgPSBwTGlzdDsKKyAg ICAgICAgICAgICAgICAgX3BDdXJyZW50ID0gcExpc3QuT3B0aW9uYWxFbGVtZW50OworICAgICAg ICAgICAgIH0KK2RpZmYgLS1naXQgYS9zcmMvTWljcm9zb2Z0LkNTaGFycC9zcmMvTWljcm9zb2Z0 L0NTaGFycC9SdW50aW1lQmluZGVyL1NlbWFudGljcy9UcmVlL1Zpc2l0b3JzL0V4cHJWaXNpdG9y QmFzZS5jcyBiL3NyYy9NaWNyb3NvZnQuQ1NoYXJwL3NyYy9NaWNyb3NvZnQvQ1NoYXJwL1J1bnRp bWVCaW5kZXIvU2VtYW50aWNzL1RyZWUvVmlzaXRvcnMvRXhwclZpc2l0b3JCYXNlLmNzCitpbmRl eCAyYWJhYzRjZWNjLi44NGJjMGUxZDRjIDEwMDY0NAorLS0tIGEvc3JjL01pY3Jvc29mdC5DU2hh cnAvc3JjL01pY3Jvc29mdC9DU2hhcnAvUnVudGltZUJpbmRlci9TZW1hbnRpY3MvVHJlZS9WaXNp dG9ycy9FeHByVmlzaXRvckJhc2UuY3MKKysrKyBiL3NyYy9NaWNyb3NvZnQuQ1NoYXJwL3NyYy9N aWNyb3NvZnQvQ1NoYXJwL1J1bnRpbWVCaW5kZXIvU2VtYW50aWNzL1RyZWUvVmlzaXRvcnMvRXhw clZpc2l0b3JCYXNlLmNzCitAQCAtMjEsOCArMjEsOSBAQCBuYW1lc3BhY2UgTWljcm9zb2Z0LkNT aGFycC5SdW50aW1lQmluZGVyLlNlbWFudGljcworICAgICAgICAgICAgICAgICByZXR1cm4gcFJl c3VsdDsKKyAgICAgICAgICAgICB9CisgCistICAgICAgICAgICAgaWYgKHBFeHByIGlzIEV4cHJT dGF0ZW1lbnQgc3RhdGVtZW50KQorKyAgICAgICAgICAgIGlmIChwRXhwciBpcyBFeHByU3RhdGVt ZW50KQorICAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgRXhwclN0YXRlbWVudCBzdGF0 ZW1lbnQgPSAoRXhwclN0YXRlbWVudClwRXhwcjsKKyAgICAgICAgICAgICAgICAgcmV0dXJuIENh Y2hlRXhwck1hcHBpbmcocEV4cHIsIERpc3BhdGNoU3RhdGVtZW50TGlzdChzdGF0ZW1lbnQpKTsK KyAgICAgICAgICAgICB9CisgCitAQCAtMjc1LDExICsyNzYsMTMgQEAgbmFtZXNwYWNlIE1pY3Jv c29mdC5DU2hhcnAuUnVudGltZUJpbmRlci5TZW1hbnRpY3MKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAKKy0gICAgICAg ICAgICAgICAgICAgICAgICBpZiAoIShuZXh0Tm9kZSBpcyBFeHByTGlzdCBuZXh0KSkKKysgICAg ICAgICAgICAgICAgICAgICAgICBFeHByTGlzdCBuZXh0OworKyAgICAgICAgICAgICAgICAgICAg ICAgIGlmICghKG5leHROb2RlIGlzIEV4cHJMaXN0KSkKKyAgICAgICAgICAgICAgICAgICAgICAg ICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpc3QuT3B0aW9uYWxOZXh0TGlzdE5v ZGUgPSBWaXNpdChuZXh0Tm9kZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy bjsKKyAgICAgICAgICAgICAgICAgICAgICAgICB9CisrICAgICAgICAgICAgICAgICAgICAgICAg bmV4dCA9IChFeHByTGlzdCluZXh0Tm9kZTsKKyAKKyAgICAgICAgICAgICAgICAgICAgICAgICBs aXN0ID0gbmV4dDsKKyAgICAgICAgICAgICAgICAgICAgIH0KK2RpZmYgLS1naXQgYS9zcmMvTWlj cm9zb2Z0LkNTaGFycC9zcmMvTWljcm9zb2Z0L0NTaGFycC9SdW50aW1lQmluZGVyL1NlbWFudGlj cy9UcmVlL1Zpc2l0b3JzL0V4cHJlc3Npb25UcmVlUmV3cml0ZXIuY3MgYi9zcmMvTWljcm9zb2Z0 LkNTaGFycC9zcmMvTWljcm9zb2Z0L0NTaGFycC9SdW50aW1lQmluZGVyL1NlbWFudGljcy9UcmVl L1Zpc2l0b3JzL0V4cHJlc3Npb25UcmVlUmV3cml0ZXIuY3MKK2luZGV4IDk2MDc1YjZkMzguLmUw NTgxZmQxNGUgMTAwNjQ0CistLS0gYS9zcmMvTWljcm9zb2Z0LkNTaGFycC9zcmMvTWljcm9zb2Z0 L0NTaGFycC9SdW50aW1lQmluZGVyL1NlbWFudGljcy9UcmVlL1Zpc2l0b3JzL0V4cHJlc3Npb25U cmVlUmV3cml0ZXIuY3MKKysrKyBiL3NyYy9NaWNyb3NvZnQuQ1NoYXJwL3NyYy9NaWNyb3NvZnQv Q1NoYXJwL1J1bnRpbWVCaW5kZXIvU2VtYW50aWNzL1RyZWUvVmlzaXRvcnMvRXhwcmVzc2lvblRy ZWVSZXdyaXRlci5jcworQEAgLTUwLDggKzUwLDkgQEAgbmFtZXNwYWNlIE1pY3Jvc29mdC5DU2hh cnAuUnVudGltZUJpbmRlci5TZW1hbnRpY3MKKyAgICAgICAgICAgICAvLyBGb3IgYXNzaWdubWVu dHMsIHdlIGVpdGhlciBoYXZlIGEgbWVtYmVyIGFzc2lnbm1lbnQgb3IgYW4gaW5kZXhlZCBhc3Np Z25tZW50LgorICAgICAgICAgICAgIC8vRGVidWcuQXNzZXJ0KGFzc2lnbm1lbnQuR2V0TEhTKCku aXNQUk9QKCkgfHwgYXNzaWdubWVudC5HZXRMSFMoKS5pc0ZJRUxEKCkgfHwgYXNzaWdubWVudC5H ZXRMSFMoKS5pc0FSUkFZSU5ERVgoKSB8fCBhc3NpZ25tZW50LkdldExIUygpLmlzTE9DQUwoKSk7 CisgICAgICAgICAgICAgRXhwciBsaHM7CistICAgICAgICAgICAgaWYgKGFzc2lnbm1lbnQuTEhT IGlzIEV4cHJQcm9wZXJ0eSBwcm9wKQorKyAgICAgICAgICAgIGlmIChhc3NpZ25tZW50LkxIUyBp cyBFeHByUHJvcGVydHkpCisgICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICBFeHByUHJv cGVydHkgcHJvcCA9IChFeHByUHJvcGVydHkpYXNzaWdubWVudC5MSFM7CisgICAgICAgICAgICAg ICAgIGlmIChwcm9wLk9wdGlvbmFsQXJndW1lbnRzPT0gbnVsbCkKKyAgICAgICAgICAgICAgICAg eworICAgICAgICAgICAgICAgICAgICAgLy8gUmVndWxhciBwcm9wZXJ0eS4KK0BAIC0zMDQsOCAr MzA1LDkgQEAgbmFtZXNwYWNlIE1pY3Jvc29mdC5DU2hhcnAuUnVudGltZUJpbmRlci5TZW1hbnRp Y3MKKyAgICAgICAgICAgICAgICAgLy8gY2FuIGhhbmRsZSBpbiB0aGUgZ2VuZXJhbCBjYXNlIGFs bCBpbXBsaWNpdCBib3hpbmcgY29udmVyc2lvbnMuIFJpZ2h0IG5vdyBpdCAKKyAgICAgICAgICAg ICAgICAgLy8gcmVxdWlyZXMgdGhhdCBhbGwgYXJndW1lbnRzIHRvIGEgY2FsbCB0aGF0IG5lZWQg dG8gYmUgYm94ZWQgYmUgZXhwbGljaXRseSBib3hlZC4KKyAKKy0gICAgICAgICAgICAgICAgaWYg KHBPYmplY3QgIT0gbnVsbCAmJiBwT2JqZWN0IGlzIEV4cHJDYXN0IGNhc3QgJiYgY2FzdC5Jc0Jv eGluZ0Nhc3QpCisrICAgICAgICAgICAgICAgIGlmIChwT2JqZWN0ICE9IG51bGwgJiYgcE9iamVj dCBpcyBFeHByQ2FzdCAmJiAoKEV4cHJDYXN0KXBPYmplY3QpLklzQm94aW5nQ2FzdCkKKyAgICAg ICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICAgICAgRXhwckNhc3QgY2FzdCA9IChFeHBy Q2FzdCkgcE9iamVjdDsKKyAgICAgICAgICAgICAgICAgICAgIHBPYmplY3QgPSBjYXN0LkFyZ3Vt ZW50OworICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgIHBPYmplY3QgPSBWaXNp dChwT2JqZWN0KTsKK0BAIC01NzYsOCArNTc4LDkgQEAgbmFtZXNwYWNlIE1pY3Jvc29mdC5DU2hh cnAuUnVudGltZUJpbmRlci5TZW1hbnRpY3MKKyAgICAgICAgICAgICBpZiAodWRjYWxsICE9IG51 bGwpCisgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICBEZWJ1Zy5Bc3NlcnQodWRjYWxs LktpbmQgPT0gRXhwcmVzc2lvbktpbmQuQ2FsbCB8fCB1ZGNhbGwuS2luZCA9PSBFeHByZXNzaW9u S2luZC5Vc2VyTG9naWNhbE9wKTsKKy0gICAgICAgICAgICAgICAgaWYgKHVkY2FsbCBpcyBFeHBy Q2FsbCBhc2NhbGwpCisrICAgICAgICAgICAgICAgIGlmICh1ZGNhbGwgaXMgRXhwckNhbGwpCisg ICAgICAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgICAgIEV4cHJDYWxsIGFzY2FsbCA9 IChFeHByQ2FsbCl1ZGNhbGw7CisgICAgICAgICAgICAgICAgICAgICBFeHByTGlzdCBhcmdzID0g KEV4cHJMaXN0KWFzY2FsbC5PcHRpb25hbEFyZ3VtZW50czsKKyAgICAgICAgICAgICAgICAgICAg IERlYnVnLkFzc2VydChhcmdzLk9wdGlvbmFsTmV4dExpc3ROb2RlLktpbmQgIT0gRXhwcmVzc2lv bktpbmQuTGlzdCk7CisgICAgICAgICAgICAgICAgICAgICBwMSA9IGFyZ3MuT3B0aW9uYWxFbGVt ZW50OworQEAgLTcwOCw4ICs3MTEsOSBAQCBuYW1lc3BhY2UgTWljcm9zb2Z0LkNTaGFycC5SdW50 aW1lQmluZGVyLlNlbWFudGljcworICAgICAgICAgICAgIEV4cHJCbG9jayBib2R5ID0gYW5vbm1l dGguT3B0aW9uYWxCb2R5OworIAorICAgICAgICAgICAgIC8vIFRoZSBtb3N0IGxpa2VseSBjYXNl OgorLSAgICAgICAgICAgIGlmIChib2R5Lk9wdGlvbmFsU3RhdGVtZW50cyBpcyBFeHByUmV0dXJu IHJldCkKKysgICAgICAgICAgICBpZiAoYm9keS5PcHRpb25hbFN0YXRlbWVudHMgaXMgRXhwclJl dHVybikKKyAgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgIEV4cHJSZXR1cm4gcmV0ID0g KEV4cHJSZXR1cm4pYm9keS5PcHRpb25hbFN0YXRlbWVudHM7CisgICAgICAgICAgICAgICAgIERl YnVnLkFzc2VydChyZXQuT3B0aW9uYWxPYmplY3QgIT0gbnVsbCk7CisgICAgICAgICAgICAgICAg IHJldHVybiBWaXNpdChyZXQuT3B0aW9uYWxPYmplY3QpOworICAgICAgICAgICAgIH0KK0BAIC04 MzEsOCArODM1LDkgQEAgbmFtZXNwYWNlIE1pY3Jvc29mdC5DU2hhcnAuUnVudGltZUJpbmRlci5T ZW1hbnRpY3MKKyAgICAgICAgICAgICAgICAgRXhwciBwVURDb252ZXJzaW9uID0gY2FsbD8uUENv bnZlcnNpb25zOworICAgICAgICAgICAgICAgICBpZiAocFVEQ29udmVyc2lvbiAhPSBudWxsKQor ICAgICAgICAgICAgICAgICB7CistICAgICAgICAgICAgICAgICAgICBpZiAocFVEQ29udmVyc2lv biBpcyBFeHByQ2FsbCBjb252Q2FsbCkKKysgICAgICAgICAgICAgICAgICAgIGlmIChwVURDb252 ZXJzaW9uIGlzIEV4cHJDYWxsKQorICAgICAgICAgICAgICAgICAgICAgeworKyAgICAgICAgICAg ICAgICAgICAgICAgIEV4cHJDYWxsIGNvbnZDYWxsID0gKEV4cHJDYWxsKXBVRENvbnZlcnNpb247 CisgICAgICAgICAgICAgICAgICAgICAgICAgRXhwciBwVURDb252ZXJzaW9uQXJndW1lbnQgPSBj b252Q2FsbC5PcHRpb25hbEFyZ3VtZW50czsKKyAgICAgICAgICAgICAgICAgICAgICAgICBpZiAo SXNOdWxsYWJsZVZhbHVlQWNjZXNzKHBVRENvbnZlcnNpb25Bcmd1bWVudCwgcEFyZ3VtZW50KSkK KyAgICAgICAgICAgICAgICAgICAgICAgICB7CitAQCAtMTE3NCwyMyArMTE3OSwyNSBAQCBuYW1l c3BhY2UgTWljcm9zb2Z0LkNTaGFycC5SdW50aW1lQmluZGVyLlNlbWFudGljcworICAgICAgICAg cHJpdmF0ZSBib29sIElzTnVsbGFibGVWYWx1ZUFjY2VzcyhFeHByIHBFeHByLCBFeHByIHBPYmpl Y3QpCisgICAgICAgICB7CisgICAgICAgICAgICAgRGVidWcuQXNzZXJ0KHBFeHByICE9IG51bGwp OworLSAgICAgICAgICAgIHJldHVybiBwRXhwciBpcyBFeHByUHJvcGVydHkgcHJvcCAmJiBwcm9w Lk1lbWJlckdyb3VwLk9wdGlvbmFsT2JqZWN0ID09IHBPYmplY3QgJiYgcE9iamVjdC5UeXBlLklz TnVsbGFibGVUeXBlKCk7CisrICAgICAgICAgICAgcmV0dXJuIHBFeHByIGlzIEV4cHJQcm9wZXJ0 eSAmJiAoKEV4cHJQcm9wZXJ0eSlwRXhwcikuTWVtYmVyR3JvdXAuT3B0aW9uYWxPYmplY3QgPT0g cE9iamVjdCAmJiBwT2JqZWN0LlR5cGUuSXNOdWxsYWJsZVR5cGUoKTsKKyAgICAgICAgIH0KKyAK KyAgICAgICAgIHByaXZhdGUgYm9vbCBJc0RlbGVnYXRlQ29uc3RydWN0b3JDYWxsKEV4cHIgcEV4 cHIpCisgICAgICAgICB7CisgICAgICAgICAgICAgRGVidWcuQXNzZXJ0KHBFeHByICE9IG51bGwp OworLSAgICAgICAgICAgIGlmICghKHBFeHByIGlzIEV4cHJDYWxsIHBDYWxsKSkKKysgICAgICAg ICAgICBFeHByQ2FsbCBwQ2FsbDsKKysgICAgICAgICAgICBpZiAoIShwRXhwciBpcyBFeHByQ2Fs bCkpCisgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg ICAgICAgICAgfQorKyAgICAgICAgICAgIHBDYWxsID0gKEV4cHJDYWxsKXBFeHByOworIAorICAg ICAgICAgICAgIHJldHVybiBwQ2FsbC5NZXRoV2l0aEluc3QuTWV0aCgpICE9IG51bGwgJiYKKyAg ICAgICAgICAgICAgICAgcENhbGwuTWV0aFdpdGhJbnN0Lk1ldGgoKS5Jc0NvbnN0cnVjdG9yKCkg JiYKKyAgICAgICAgICAgICAgICAgcENhbGwuVHlwZS5pc0RlbGVnYXRlVHlwZSgpICYmCisgICAg ICAgICAgICAgICAgIHBDYWxsLk9wdGlvbmFsQXJndW1lbnRzICE9IG51bGwgJiYKKy0gICAgICAg ICAgICAgICAgcENhbGwuT3B0aW9uYWxBcmd1bWVudHMgaXMgRXhwckxpc3QgbGlzdCAmJgorLSAg ICAgICAgICAgICAgICBsaXN0Lk9wdGlvbmFsTmV4dExpc3ROb2RlLktpbmQgPT0gRXhwcmVzc2lv bktpbmQuRnVuY3Rpb25Qb2ludGVyOworKyAgICAgICAgICAgICAgICAocENhbGwuT3B0aW9uYWxB cmd1bWVudHMgaXMgRXhwckxpc3QpICYmCisrICAgICAgICAgICAgICAgICgoRXhwckxpc3QpcENh bGwuT3B0aW9uYWxBcmd1bWVudHMpLk9wdGlvbmFsTmV4dExpc3ROb2RlLktpbmQgPT0gRXhwcmVz c2lvbktpbmQuRnVuY3Rpb25Qb2ludGVyOworICAgICAgICAgfQorICAgICAgICAgcHJpdmF0ZSBz dGF0aWMgYm9vbCBpc0VudW1Ub0RlY2ltYWxDb252ZXJzaW9uKENUeXBlIGFyZ3R5cGUsIENUeXBl IGRlc3R0eXBlKQorICAgICAgICAgeworZGlmZiAtLWdpdCBhL3NyYy9TeXN0ZW0uQ29sbGVjdGlv bnMvc3JjL1N5c3RlbS9Db2xsZWN0aW9ucy9HZW5lcmljL1NvcnRlZFNldC5UcmVlU3ViU2V0LmNz IGIvc3JjL1N5c3RlbS5Db2xsZWN0aW9ucy9zcmMvU3lzdGVtL0NvbGxlY3Rpb25zL0dlbmVyaWMv U29ydGVkU2V0LlRyZWVTdWJTZXQuY3MKK2luZGV4IDRlYjgxN2MwYWYuLjY3MTYzNmY0MjggMTAw NjQ0CistLS0gYS9zcmMvU3lzdGVtLkNvbGxlY3Rpb25zL3NyYy9TeXN0ZW0vQ29sbGVjdGlvbnMv R2VuZXJpYy9Tb3J0ZWRTZXQuVHJlZVN1YlNldC5jcworKysrIGIvc3JjL1N5c3RlbS5Db2xsZWN0 aW9ucy9zcmMvU3lzdGVtL0NvbGxlY3Rpb25zL0dlbmVyaWMvU29ydGVkU2V0LlRyZWVTdWJTZXQu Y3MKK0BAIC0zNTIsNyArMzUyLDEwIEBAIG5hbWVzcGFjZSBTeXN0ZW0uQ29sbGVjdGlvbnMuR2Vu ZXJpYworICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUGxhdGZvcm1Ob3RTdXBwb3J0ZWRFeGNl cHRpb24oKTsKKyAgICAgICAgICAgICB9CisgCistICAgICAgICAgICAgcHJvdGVjdGVkIG92ZXJy aWRlIHZvaWQgT25EZXNlcmlhbGl6YXRpb24oT2JqZWN0IHNlbmRlcikgPT4gdGhyb3cgbmV3IFBs YXRmb3JtTm90U3VwcG9ydGVkRXhjZXB0aW9uKCk7CisrICAgICAgICAgICAgcHJvdGVjdGVkIG92 ZXJyaWRlIHZvaWQgT25EZXNlcmlhbGl6YXRpb24oT2JqZWN0IHNlbmRlcikKKysgICAgICAgICAg ICB7CisrICAgICAgICAgICAgICAgIHRocm93IG5ldyBQbGF0Zm9ybU5vdFN1cHBvcnRlZEV4Y2Vw dGlvbigpOworKyAgICAgICAgICAgIH0KKyAgICAgICAgIH0KKyAgICAgfQorIH0KK2RpZmYgLS1n aXQgYS9zcmMvU3lzdGVtLkRyYXdpbmcuQ29tbW9uL3NyYy9TeXN0ZW0vRHJhd2luZy9CcnVzaC5j cyBiL3NyYy9TeXN0ZW0uRHJhd2luZy5Db21tb24vc3JjL1N5c3RlbS9EcmF3aW5nL0JydXNoLmNz CitpbmRleCAwODkwNjllZDY0Li5iMjAyZWY3NzM2IDEwMDY0NAorLS0tIGEvc3JjL1N5c3RlbS5E cmF3aW5nLkNvbW1vbi9zcmMvU3lzdGVtL0RyYXdpbmcvQnJ1c2guY3MKKysrKyBiL3NyYy9TeXN0 ZW0uRHJhd2luZy5Db21tb24vc3JjL1N5c3RlbS9EcmF3aW5nL0JydXNoLmNzCitAQCAtNjIsNiAr NjIsNiBAQCBuYW1lc3BhY2UgU3lzdGVtLkRyYXdpbmcKKyAgICAgICAgICAgICB9CisgICAgICAg ICB9CisgCistICAgICAgICB+QnJ1c2goKSA9PiBEaXNwb3NlKGZhbHNlKTsKKysgICAgICAgIH5C cnVzaCgpIHsgRGlzcG9zZShmYWxzZSk7IH0KKyAgICAgfQorIH0KK2RpZmYgLS1naXQgYS9zcmMv U3lzdGVtLkRyYXdpbmcuQ29tbW9uL3NyYy9TeXN0ZW0vRHJhd2luZy9EZXNpZ24vQ2F0ZWdvcnlO YW1lQ29sbGVjdGlvbi5jcyBiL3NyYy9TeXN0ZW0uRHJhd2luZy5Db21tb24vc3JjL1N5c3RlbS9E cmF3aW5nL0Rlc2lnbi9DYXRlZ29yeU5hbWVDb2xsZWN0aW9uLmNzCitpbmRleCAwNjU0OThjM2Fk Li5mY2M0ZjhiMmI2IDEwMDY0NAorLS0tIGEvc3JjL1N5c3RlbS5EcmF3aW5nLkNvbW1vbi9zcmMv U3lzdGVtL0RyYXdpbmcvRGVzaWduL0NhdGVnb3J5TmFtZUNvbGxlY3Rpb24uY3MKKysrKyBiL3Ny Yy9TeXN0ZW0uRHJhd2luZy5Db21tb24vc3JjL1N5c3RlbS9EcmF3aW5nL0Rlc2lnbi9DYXRlZ29y eU5hbWVDb2xsZWN0aW9uLmNzCitAQCAtMTYsMzQgKzE2LDM0IEBAIG5hbWVzcGFjZSBTeXN0ZW0u RHJhd2luZy5EZXNpZ24KKyAgICAgICAgIC8vLyBJbml0aWFsaXplcyBhIG5ldyBpbnN0YW5jZSBv ZiA8c2VlIGNyZWY9J0NhdGVnb3J5TmFtZUNvbGxlY3Rpb24nLz4gYmFzZWQgb24gYW5vdGhlcgor ICAgICAgICAgLy8vIDxzZWUgY3JlZj0nQ2F0ZWdvcnlOYW1lQ29sbGVjdGlvbicvPi4KKyAgICAg ICAgIC8vLyA8L3N1bW1hcnk+CistICAgICAgICBwdWJsaWMgQ2F0ZWdvcnlOYW1lQ29sbGVjdGlv bihDYXRlZ29yeU5hbWVDb2xsZWN0aW9uIHZhbHVlKSA9PiBJbm5lckxpc3QuQWRkUmFuZ2UodmFs dWUpOworKyAgICAgICAgcHVibGljIENhdGVnb3J5TmFtZUNvbGxlY3Rpb24oQ2F0ZWdvcnlOYW1l Q29sbGVjdGlvbiB2YWx1ZSkgeyBJbm5lckxpc3QuQWRkUmFuZ2UodmFsdWUpOyB9CisgCisgICAg ICAgICAvLy8gPHN1bW1hcnk+CisgICAgICAgICAvLy8gSW5pdGlhbGl6ZXMgYSBuZXcgaW5zdGFu Y2Ugb2YgPHNlZSBjcmVmPSdDYXRlZ29yeU5hbWVDb2xsZWN0aW9uJy8+IGNvbnRhaW5pbmcgYW55 IGFycmF5IG9mCisgICAgICAgICAvLy8gPHNlZSBjcmVmPSdzdHJpbmcnLz4gb2JqZWN0cy4KKyAg ICAgICAgIC8vLyA8L3N1bW1hcnk+CistICAgICAgICBwdWJsaWMgQ2F0ZWdvcnlOYW1lQ29sbGVj dGlvbihzdHJpbmdbXSB2YWx1ZSkgPT4gSW5uZXJMaXN0LkFkZFJhbmdlKHZhbHVlKTsKKysgICAg ICAgIHB1YmxpYyBDYXRlZ29yeU5hbWVDb2xsZWN0aW9uKHN0cmluZ1tdIHZhbHVlKSB7IElubmVy TGlzdC5BZGRSYW5nZSh2YWx1ZSk7IH0KKyAKKyAgICAgICAgIC8vLyA8c3VtbWFyeT4KKyAgICAg ICAgIC8vLyBSZXByZXNlbnRzIHRoZSBlbnRyeSBhdCB0aGUgc3BlY2lmaWVkIGluZGV4IG9mIHRo ZSA8c2VlIGNyZWY9J3N0cmluZycvPi4KKyAgICAgICAgIC8vLyA8L3N1bW1hcnk+CistICAgICAg ICBwdWJsaWMgc3RyaW5nIHRoaXNbaW50IGluZGV4XSA9PiAoKHN0cmluZykoSW5uZXJMaXN0W2lu ZGV4XSkpOworKyAgICAgICAgcHVibGljIHN0cmluZyB0aGlzW2ludCBpbmRleF0geyBnZXQgeyBy ZXR1cm4gKChzdHJpbmcpKElubmVyTGlzdFtpbmRleF0pKTsgfSB9CisgCisgICAgICAgICAvLy8g PHN1bW1hcnk+CisgICAgICAgICAvLy8gR2V0cyBhIHZhbHVlIGluZGljYXRpbmcgd2hldGhlciB0 aGUgIDxzZWUgY3JlZj0nQ2F0ZWdvcnlOYW1lQ29sbGVjdGlvbicvPiBjb250YWlucyB0aGUgc3Bl Y2lmaWVkCisgICAgICAgICAvLy8gPHNlZSBjcmVmPSdzdHJpbmcnLz4uCisgICAgICAgICAvLy8g PC9zdW1tYXJ5PgorLSAgICAgICAgcHVibGljIGJvb2wgQ29udGFpbnMoc3RyaW5nIHZhbHVlKSA9 PiBJbm5lckxpc3QuQ29udGFpbnModmFsdWUpOworKyAgICAgICAgcHVibGljIGJvb2wgQ29udGFp bnMoc3RyaW5nIHZhbHVlKSB7IHJldHVybiBJbm5lckxpc3QuQ29udGFpbnModmFsdWUpOyB9Cisg CisgICAgICAgICAvLy8gPHN1bW1hcnk+CisgICAgICAgICAvLy8gQ29waWVzIHRoZSA8c2VlIGNy ZWY9J0NhdGVnb3J5TmFtZUNvbGxlY3Rpb24nLz4gdmFsdWVzIHRvIGEgb25lLWRpbWVuc2lvbmFs IDxzZWUgY3JlZj0nQXJyYXknLz4gaW5zdGFuY2UKKyAgICAgICAgIC8vLyBhdCB0aGUgc3BlY2lm aWVkIGluZGV4LgorICAgICAgICAgLy8vIDwvc3VtbWFyeT4KKy0gICAgICAgIHB1YmxpYyB2b2lk IENvcHlUbyhzdHJpbmdbXSBhcnJheSwgaW50IGluZGV4KSA9PiBJbm5lckxpc3QuQ29weVRvKGFy cmF5LCBpbmRleCk7CisrICAgICAgICBwdWJsaWMgdm9pZCBDb3B5VG8oc3RyaW5nW10gYXJyYXks IGludCBpbmRleCkgeyBJbm5lckxpc3QuQ29weVRvKGFycmF5LCBpbmRleCk7IH0KKyAKKyAgICAg ICAgIC8vLyA8c3VtbWFyeT4KKyAgICAgICAgIC8vLyBSZXR1cm5zIHRoZSBpbmRleCBvZiBhIDxz ZWUgY3JlZj0nc3RyaW5nJy8+IGluICB0aGUgPHNlZSBjcmVmPSdDYXRlZ29yeU5hbWVDb2xsZWN0 aW9uJy8+IC4KKyAgICAgICAgIC8vLyA8L3N1bW1hcnk+CistICAgICAgICBwdWJsaWMgaW50IElu ZGV4T2Yoc3RyaW5nIHZhbHVlKSA9PiBJbm5lckxpc3QuSW5kZXhPZih2YWx1ZSk7CisrICAgICAg ICBwdWJsaWMgaW50IEluZGV4T2Yoc3RyaW5nIHZhbHVlKSB7IHJldHVybiBJbm5lckxpc3QuSW5k ZXhPZih2YWx1ZSk7IH0KKyAgICAgfQorIH0KK2RpZmYgLS1naXQgYS9zcmMvU3lzdGVtLkRyYXdp bmcuQ29tbW9uL3NyYy9TeXN0ZW0vRHJhd2luZy9EcmF3aW5nMkQvQ3VzdG9tTGluZUNhcC5jcyBi L3NyYy9TeXN0ZW0uRHJhd2luZy5Db21tb24vc3JjL1N5c3RlbS9EcmF3aW5nL0RyYXdpbmcyRC9D dXN0b21MaW5lQ2FwLmNzCitpbmRleCAxNTI0NzQxMTdkLi5kOTc2OTc3OGM3IDEwMDY0NAorLS0t IGEvc3JjL1N5c3RlbS5EcmF3aW5nLkNvbW1vbi9zcmMvU3lzdGVtL0RyYXdpbmcvRHJhd2luZzJE L0N1c3RvbUxpbmVDYXAuY3MKKysrKyBiL3NyYy9TeXN0ZW0uRHJhd2luZy5Db21tb24vc3JjL1N5 c3RlbS9EcmF3aW5nL0RyYXdpbmcyRC9DdXN0b21MaW5lQ2FwLmNzCitAQCAtMzgsNyArMzgsNyBA QCBuYW1lc3BhY2UgU3lzdGVtLkRyYXdpbmcuRHJhd2luZzJECisgICAgICAgICAgICAgU2V0TmF0 aXZlTGluZUNhcChuYXRpdmVMaW5lQ2FwKTsKKyAgICAgICAgIH0KKyAKKy0gICAgICAgIGludGVy bmFsIEN1c3RvbUxpbmVDYXAoSW50UHRyIG5hdGl2ZUxpbmVDYXApID0+IFNldE5hdGl2ZUxpbmVD YXAobmF0aXZlTGluZUNhcCk7CisrICAgICAgICBpbnRlcm5hbCBDdXN0b21MaW5lQ2FwKEludFB0 ciBuYXRpdmVMaW5lQ2FwKSB7IFNldE5hdGl2ZUxpbmVDYXAobmF0aXZlTGluZUNhcCk7IH0KKyAK KyAgICAgICAgIGludGVybmFsIHZvaWQgU2V0TmF0aXZlTGluZUNhcChJbnRQdHIgaGFuZGxlKQor ICAgICAgICAgeworQEAgLTcyLDcgKzcyLDcgQEAgbmFtZXNwYWNlIFN5c3RlbS5EcmF3aW5nLkRy YXdpbmcyRAorICAgICAgICAgICAgIF9kaXNwb3NlZCA9IHRydWU7CisgICAgICAgICB9CisgCist ICAgICAgICB+Q3VzdG9tTGluZUNhcCgpID0+IERpc3Bvc2UoZmFsc2UpOworKyAgICAgICAgfkN1 c3RvbUxpbmVDYXAoKSB7IERpc3Bvc2UoZmFsc2UpOyB9CisgCisgICAgICAgICBwdWJsaWMgb2Jq ZWN0IENsb25lKCkKKyAgICAgICAgIHsKK2RpZmYgLS1naXQgYS9zcmMvU3lzdGVtLkRyYXdpbmcu Q29tbW9uL3NyYy9TeXN0ZW0vRHJhd2luZy9EcmF3aW5nMkQvR3JhcGhpY3NQYXRoSXRlcmF0b3Iu Y3MgYi9zcmMvU3lzdGVtLkRyYXdpbmcuQ29tbW9uL3NyYy9TeXN0ZW0vRHJhd2luZy9EcmF3aW5n MkQvR3JhcGhpY3NQYXRoSXRlcmF0b3IuY3MKK2luZGV4IGNiOWMzNGM2MmEuLjNiNTUyZjFiYWYg MTAwNjQ0CistLS0gYS9zcmMvU3lzdGVtLkRyYXdpbmcuQ29tbW9uL3NyYy9TeXN0ZW0vRHJhd2lu Zy9EcmF3aW5nMkQvR3JhcGhpY3NQYXRoSXRlcmF0b3IuY3MKKysrKyBiL3NyYy9TeXN0ZW0uRHJh d2luZy5Db21tb24vc3JjL1N5c3RlbS9EcmF3aW5nL0RyYXdpbmcyRC9HcmFwaGljc1BhdGhJdGVy YXRvci5jcworQEAgLTU4LDcgKzU4LDcgQEAgbmFtZXNwYWNlIFN5c3RlbS5EcmF3aW5nLkRyYXdp bmcyRAorICAgICAgICAgICAgIH0KKyAgICAgICAgIH0KKyAKKy0gICAgICAgIH5HcmFwaGljc1Bh dGhJdGVyYXRvcigpID0+IERpc3Bvc2UoZmFsc2UpOworKyAgICAgICAgfkdyYXBoaWNzUGF0aEl0 ZXJhdG9yKCkgeyBEaXNwb3NlKGZhbHNlKTsgfQorIAorICAgICAgICAgcHVibGljIGludCBOZXh0 U3VicGF0aChvdXQgaW50IHN0YXJ0SW5kZXgsIG91dCBpbnQgZW5kSW5kZXgsIG91dCBib29sIGlz Q2xvc2VkKQorICAgICAgICAgeworZGlmZiAtLWdpdCBhL3NyYy9TeXN0ZW0uRHJhd2luZy5Db21t b24vc3JjL1N5c3RlbS9EcmF3aW5nL0RyYXdpbmcyRC9HcmFwaGljc1N0YXRlLmNzIGIvc3JjL1N5 c3RlbS5EcmF3aW5nLkNvbW1vbi9zcmMvU3lzdGVtL0RyYXdpbmcvRHJhd2luZzJEL0dyYXBoaWNz U3RhdGUuY3MKK2luZGV4IGM3ZDA4Njc1NmUuLjYxZGU5NDhiMmQgMTAwNjQ0CistLS0gYS9zcmMv U3lzdGVtLkRyYXdpbmcuQ29tbW9uL3NyYy9TeXN0ZW0vRHJhd2luZy9EcmF3aW5nMkQvR3JhcGhp Y3NTdGF0ZS5jcworKysrIGIvc3JjL1N5c3RlbS5EcmF3aW5nLkNvbW1vbi9zcmMvU3lzdGVtL0Ry YXdpbmcvRHJhd2luZzJEL0dyYXBoaWNzU3RhdGUuY3MKK0BAIC04LDcgKzgsNyBAQCBuYW1lc3Bh Y2UgU3lzdGVtLkRyYXdpbmcuRHJhd2luZzJECisgICAgIHsKKyAgICAgICAgIGludGVybmFsIGlu dCBuYXRpdmVTdGF0ZTsKKyAKKy0gICAgICAgIGludGVybmFsIEdyYXBoaWNzU3RhdGUoaW50IG5h dGl2ZVN0YXRlKSA9PiB0aGlzLm5hdGl2ZVN0YXRlID0gbmF0aXZlU3RhdGU7CisrICAgICAgICBp bnRlcm5hbCBHcmFwaGljc1N0YXRlKGludCBuYXRpdmVTdGF0ZSkgeyB0aGlzLm5hdGl2ZVN0YXRl ID0gbmF0aXZlU3RhdGU7IH0KKyAgICAgfQorIH0KKyAKK2RpZmYgLS1naXQgYS9zcmMvU3lzdGVt LkRyYXdpbmcuQ29tbW9uL3NyYy9TeXN0ZW0vRHJhd2luZy9EcmF3aW5nMkQvUmVnaW9uRGF0YS5j cyBiL3NyYy9TeXN0ZW0uRHJhd2luZy5Db21tb24vc3JjL1N5c3RlbS9EcmF3aW5nL0RyYXdpbmcy RC9SZWdpb25EYXRhLmNzCitpbmRleCA1OTZiODYyMmViLi5kZmEyNDQ2Yzg3IDEwMDY0NAorLS0t IGEvc3JjL1N5c3RlbS5EcmF3aW5nLkNvbW1vbi9zcmMvU3lzdGVtL0RyYXdpbmcvRHJhd2luZzJE L1JlZ2lvbkRhdGEuY3MKKysrKyBiL3NyYy9TeXN0ZW0uRHJhd2luZy5Db21tb24vc3JjL1N5c3Rl bS9EcmF3aW5nL0RyYXdpbmcyRC9SZWdpb25EYXRhLmNzCitAQCAtNiw3ICs2LDcgQEAgbmFtZXNw YWNlIFN5c3RlbS5EcmF3aW5nLkRyYXdpbmcyRAorIHsKKyAgICAgcHVibGljIHNlYWxlZCBjbGFz cyBSZWdpb25EYXRhCisgICAgIHsKKy0gICAgICAgIGludGVybmFsIFJlZ2lvbkRhdGEoYnl0ZVtd IGRhdGEpID0+IERhdGEgPSBkYXRhOworKyAgICAgICAgaW50ZXJuYWwgUmVnaW9uRGF0YShieXRl W10gZGF0YSkgeyBEYXRhID0gZGF0YTsgfQorIAorICAgICAgICAgcHVibGljIGJ5dGVbXSBEYXRh IHsgZ2V0OyBzZXQ7IH0KKyAgICAgfQorZGlmZiAtLWdpdCBhL3NyYy9TeXN0ZW0uRHJhd2luZy5D b21tb24vc3JjL1N5c3RlbS9EcmF3aW5nL1RleHQvRm9udENvbGxlY3Rpb24uY3MgYi9zcmMvU3lz dGVtLkRyYXdpbmcuQ29tbW9uL3NyYy9TeXN0ZW0vRHJhd2luZy9UZXh0L0ZvbnRDb2xsZWN0aW9u LmNzCitpbmRleCBkZjJhYzVjOGMyLi5hNDUxZGM2MjFkIDEwMDY0NAorLS0tIGEvc3JjL1N5c3Rl bS5EcmF3aW5nLkNvbW1vbi9zcmMvU3lzdGVtL0RyYXdpbmcvVGV4dC9Gb250Q29sbGVjdGlvbi5j cworKysrIGIvc3JjL1N5c3RlbS5EcmF3aW5nLkNvbW1vbi9zcmMvU3lzdGVtL0RyYXdpbmcvVGV4 dC9Gb250Q29sbGVjdGlvbi5jcworQEAgLTE0LDcgKzE0LDcgQEAgbmFtZXNwYWNlIFN5c3RlbS5E cmF3aW5nLlRleHQKKyAgICAgeworICAgICAgICAgaW50ZXJuYWwgSW50UHRyIF9uYXRpdmVGb250 Q29sbGVjdGlvbjsKKyAKKy0gICAgICAgIGludGVybmFsIEZvbnRDb2xsZWN0aW9uKCkgPT4gX25h dGl2ZUZvbnRDb2xsZWN0aW9uID0gSW50UHRyLlplcm87CisrICAgICAgICBpbnRlcm5hbCBGb250 Q29sbGVjdGlvbigpIHsgX25hdGl2ZUZvbnRDb2xsZWN0aW9uID0gSW50UHRyLlplcm87IH0KKyAK KyAgICAgICAgIC8vLyA8c3VtbWFyeT4KKyAgICAgICAgIC8vLyBEaXNwb3NlcyBvZiB0aGlzIDxz ZWUgY3JlZj0nU3lzdGVtLkRyYXdpbmcuVGV4dC5Gb250Q29sbGVjdGlvbicvPgorQEAgLTU4LDYg KzU4LDYgQEAgbmFtZXNwYWNlIFN5c3RlbS5EcmF3aW5nLlRleHQKKyAgICAgICAgICAgICB9Cisg ICAgICAgICB9CisgCistICAgICAgICB+Rm9udENvbGxlY3Rpb24oKSA9PiBEaXNwb3NlKGZhbHNl KTsKKysgICAgICAgIH5Gb250Q29sbGVjdGlvbigpIHsgRGlzcG9zZShmYWxzZSk7IH0KKyAgICAg fQorIH0KK2RpZmYgLS1naXQgYS9zcmMvU3lzdGVtLkxpbnEuRXhwcmVzc2lvbnMvc3JjL1N5c3Rl bS9EeW5hbWljL1V0aWxzL1R5cGVFeHRlbnNpb25zLmNzIGIvc3JjL1N5c3RlbS5MaW5xLkV4cHJl c3Npb25zL3NyYy9TeXN0ZW0vRHluYW1pYy9VdGlscy9UeXBlRXh0ZW5zaW9ucy5jcworaW5kZXgg YzQ1Y2FiYTA5My4uZWY5YTI1MjAzZCAxMDA2NDQKKy0tLSBhL3NyYy9TeXN0ZW0uTGlucS5FeHBy ZXNzaW9ucy9zcmMvU3lzdGVtL0R5bmFtaWMvVXRpbHMvVHlwZUV4dGVuc2lvbnMuY3MKKysrKyBi L3NyYy9TeXN0ZW0uTGlucS5FeHByZXNzaW9ucy9zcmMvU3lzdGVtL0R5bmFtaWMvVXRpbHMvVHlw ZUV4dGVuc2lvbnMuY3MKK0BAIC02NSw3ICs2NSw4IEBAIG5hbWVzcGFjZSBTeXN0ZW0uRHluYW1p Yy5VdGlscworICAgICAgICAgaW50ZXJuYWwgc3RhdGljIFBhcmFtZXRlckluZm9bXSBHZXRQYXJh bWV0ZXJzQ2FjaGVkKHRoaXMgTWV0aG9kQmFzZSBtZXRob2QpCisgICAgICAgICB7CisgICAgICAg ICAgICAgQ2FjaGVEaWN0PE1ldGhvZEJhc2UsIFBhcmFtZXRlckluZm9bXT4gcGljID0gc19wYXJh bUluZm9DYWNoZTsKKy0gICAgICAgICAgICBpZiAoIXBpYy5UcnlHZXRWYWx1ZShtZXRob2QsIG91 dCBQYXJhbWV0ZXJJbmZvW10gcGlzKSkKKysgICAgICAgICAgICBQYXJhbWV0ZXJJbmZvW10gcGlz OworKyAgICAgICAgICAgIGlmICghcGljLlRyeUdldFZhbHVlKG1ldGhvZCwgb3V0IHBpcykpCisg ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICBwaXMgPSBtZXRob2QuR2V0UGFyYW1ldGVy cygpOworIAorZGlmZiAtLWdpdCBhL3NyYy9TeXN0ZW0uTGlucS5FeHByZXNzaW9ucy9zcmMvU3lz dGVtL0xpbnEvRXhwcmVzc2lvbnMvQ29tcGlsZXIvTGFtYmRhQ29tcGlsZXIuRXhwcmVzc2lvbnMu Y3MgYi9zcmMvU3lzdGVtLkxpbnEuRXhwcmVzc2lvbnMvc3JjL1N5c3RlbS9MaW5xL0V4cHJlc3Np b25zL0NvbXBpbGVyL0xhbWJkYUNvbXBpbGVyLkV4cHJlc3Npb25zLmNzCitpbmRleCBkOGIxYzYx Zjc0Li44Y2VmYmQ0ZjE5IDEwMDY0NAorLS0tIGEvc3JjL1N5c3RlbS5MaW5xLkV4cHJlc3Npb25z L3NyYy9TeXN0ZW0vTGlucS9FeHByZXNzaW9ucy9Db21waWxlci9MYW1iZGFDb21waWxlci5FeHBy ZXNzaW9ucy5jcworKysrIGIvc3JjL1N5c3RlbS5MaW5xLkV4cHJlc3Npb25zL3NyYy9TeXN0ZW0v TGlucS9FeHByZXNzaW9ucy9Db21waWxlci9MYW1iZGFDb21waWxlci5FeHByZXNzaW9ucy5jcwor QEAgLTk1Miw4ICs5NTIsOSBAQCBuYW1lc3BhY2UgU3lzdGVtLkxpbnEuRXhwcmVzc2lvbnMuQ29t cGlsZXIKKyAgICAgICAgIHByaXZhdGUgdm9pZCBFbWl0TWVtYmVyQXNzaWdubWVudChNZW1iZXJB c3NpZ25tZW50IGJpbmRpbmcsIFR5cGUgb2JqZWN0VHlwZSkKKyAgICAgICAgIHsKKyAgICAgICAg ICAgICBFbWl0RXhwcmVzc2lvbihiaW5kaW5nLkV4cHJlc3Npb24pOworLSAgICAgICAgICAgIGlm IChiaW5kaW5nLk1lbWJlciBpcyBGaWVsZEluZm8gZmkpCisrICAgICAgICAgICAgaWYgKGJpbmRp bmcuTWVtYmVyIGlzIEZpZWxkSW5mbykKKyAgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAg IEZpZWxkSW5mbyBmaSA9IChGaWVsZEluZm8pYmluZGluZy5NZW1iZXI7CisgICAgICAgICAgICAg ICAgIF9pbGcuRW1pdChPcENvZGVzLlN0ZmxkLCBmaSk7CisgICAgICAgICAgICAgfQorICAgICAg ICAgICAgIGVsc2UKK0BAIC0xMDk3LDcgKzEwOTgsNyBAQCBuYW1lc3BhY2UgU3lzdGVtLkxpbnEu RXhwcmVzc2lvbnMuQ29tcGlsZXIKKyAgICAgICAgIHByaXZhdGUgc3RhdGljIFR5cGUgR2V0TWVt YmVyVHlwZShNZW1iZXJJbmZvIG1lbWJlcikKKyAgICAgICAgIHsKKyAgICAgICAgICAgICBEZWJ1 Zy5Bc3NlcnQobWVtYmVyIGlzIEZpZWxkSW5mbyB8fCBtZW1iZXIgaXMgUHJvcGVydHlJbmZvKTsK Ky0gICAgICAgICAgICByZXR1cm4gbWVtYmVyIGlzIEZpZWxkSW5mbyBmaSA/IGZpLkZpZWxkVHlw ZSA6IChtZW1iZXIgYXMgUHJvcGVydHlJbmZvKS5Qcm9wZXJ0eVR5cGU7CisrICAgICAgICAgICAg cmV0dXJuIG1lbWJlciBpcyBGaWVsZEluZm8gPyAoKEZpZWxkSW5mbyltZW1iZXIpLkZpZWxkVHlw ZSA6IChtZW1iZXIgYXMgUHJvcGVydHlJbmZvKS5Qcm9wZXJ0eVR5cGU7CisgICAgICAgICB9Cisg CisgICAgICAgICAjZW5kcmVnaW9uCitkaWZmIC0tZ2l0IGEvc3JjL1N5c3RlbS5MaW5xLkV4cHJl c3Npb25zL3NyYy9TeXN0ZW0vTGlucS9FeHByZXNzaW9ucy9NZW1iZXJBc3NpZ25tZW50LmNzIGIv c3JjL1N5c3RlbS5MaW5xLkV4cHJlc3Npb25zL3NyYy9TeXN0ZW0vTGlucS9FeHByZXNzaW9ucy9N ZW1iZXJBc3NpZ25tZW50LmNzCitpbmRleCA0NzVhNmM2M2NjLi4wNzg3YjEwMTg2IDEwMDY0NAor LS0tIGEvc3JjL1N5c3RlbS5MaW5xLkV4cHJlc3Npb25zL3NyYy9TeXN0ZW0vTGlucS9FeHByZXNz aW9ucy9NZW1iZXJBc3NpZ25tZW50LmNzCisrKysgYi9zcmMvU3lzdGVtLkxpbnEuRXhwcmVzc2lv bnMvc3JjL1N5c3RlbS9MaW5xL0V4cHJlc3Npb25zL01lbWJlckFzc2lnbm1lbnQuY3MKK0BAIC05 MywyMyArOTMsMjMgQEAgbmFtZXNwYWNlIFN5c3RlbS5MaW5xLkV4cHJlc3Npb25zCisgCisgICAg ICAgICAgICAgLy8gTnVsbCBwYXJhbU5hbWUgYXMgdGhlcmUgYXJlIHR3byBwYXRocyBoZXJlIHdp dGggZGlmZmVyZW50IHBhcmFtZXRlciBuYW1lcyBhdCB0aGUgQVBJCisgICAgICAgICAgICAgVHlw ZVV0aWxzLlZhbGlkYXRlVHlwZShkZWNUeXBlLCBudWxsKTsKKy0gICAgICAgICAgICBzd2l0Y2gg KG1lbWJlcikKKysgICAgICAgICAgICBpZiAobWVtYmVyIGlzIFByb3BlcnR5SW5mbykKKyAgICAg ICAgICAgICB7CistICAgICAgICAgICAgICAgIGNhc2UgUHJvcGVydHlJbmZvIHBpOgorLSAgICAg ICAgICAgICAgICAgICAgaWYgKCFwaS5DYW5Xcml0ZSkKKy0gICAgICAgICAgICAgICAgICAgIHsK Ky0gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBFcnJvci5Qcm9wZXJ0eURvZXNOb3RIYXZl U2V0dGVyKHBpLCBuYW1lb2YobWVtYmVyKSk7CistICAgICAgICAgICAgICAgICAgICB9CistCist ICAgICAgICAgICAgICAgICAgICBtZW1iZXJUeXBlID0gcGkuUHJvcGVydHlUeXBlOworLSAgICAg ICAgICAgICAgICAgICAgYnJlYWs7CistCistICAgICAgICAgICAgICAgIGNhc2UgRmllbGRJbmZv IGZpOgorLSAgICAgICAgICAgICAgICAgICAgbWVtYmVyVHlwZSA9IGZpLkZpZWxkVHlwZTsKKy0g ICAgICAgICAgICAgICAgICAgIGJyZWFrOworLQorLSAgICAgICAgICAgICAgICBkZWZhdWx0Ogor LSAgICAgICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IuQXJndW1lbnRNdXN0QmVGaWVsZEluZm9P clByb3BlcnR5SW5mbyhuYW1lb2YobWVtYmVyKSk7CisrICAgICAgICAgICAgICAgIFByb3BlcnR5 SW5mbyBwaSA9IChQcm9wZXJ0eUluZm8pIG1lbWJlcjsKKysgICAgICAgICAgICAgICAgaWYgKCFw aS5DYW5Xcml0ZSkKKysgICAgICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICAgICAgdGhy b3cgRXJyb3IuUHJvcGVydHlEb2VzTm90SGF2ZVNldHRlcihwaSwgbmFtZW9mKG1lbWJlcikpOwor KyAgICAgICAgICAgICAgICB9CisrICAgICAgICAgICAgICAgIG1lbWJlclR5cGUgPSBwaS5Qcm9w ZXJ0eVR5cGU7CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgIGVsc2UgaWYgKG1lbWJlciBp cyBGaWVsZEluZm8pCisrICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICBGaWVsZEluZm8g ZmkgPSAoRmllbGRJbmZvKSBtZW1iZXI7CisrICAgICAgICAgICAgICAgIG1lbWJlclR5cGUgPSBm aS5GaWVsZFR5cGU7CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgIGVsc2UKKysgICAgICAg ICAgICB7CisrICAgICAgICAgICAgICAgIHRocm93IEVycm9yLkFyZ3VtZW50TXVzdEJlRmllbGRJ bmZvT3JQcm9wZXJ0eUluZm8obmFtZW9mKG1lbWJlcikpOworICAgICAgICAgICAgIH0KKyAgICAg ICAgIH0KKyAgICAgfQorZGlmZiAtLWdpdCBhL3NyYy9TeXN0ZW0uTGlucS5FeHByZXNzaW9ucy9z cmMvU3lzdGVtL0xpbnEvRXhwcmVzc2lvbnMvTWVtYmVyQmluZGluZy5jcyBiL3NyYy9TeXN0ZW0u TGlucS5FeHByZXNzaW9ucy9zcmMvU3lzdGVtL0xpbnEvRXhwcmVzc2lvbnMvTWVtYmVyQmluZGlu Zy5jcworaW5kZXggYzFjNTg4NDYxOC4uNDNjMDY5OGY5MCAxMDA2NDQKKy0tLSBhL3NyYy9TeXN0 ZW0uTGlucS5FeHByZXNzaW9ucy9zcmMvU3lzdGVtL0xpbnEvRXhwcmVzc2lvbnMvTWVtYmVyQmlu ZGluZy5jcworKysrIGIvc3JjL1N5c3RlbS5MaW5xLkV4cHJlc3Npb25zL3NyYy9TeXN0ZW0vTGlu cS9FeHByZXNzaW9ucy9NZW1iZXJCaW5kaW5nLmNzCitAQCAtNjEsNiArNjEsOSBAQCBuYW1lc3Bh Y2UgU3lzdGVtLkxpbnEuRXhwcmVzc2lvbnMKKyAgICAgICAgICAgICByZXR1cm4gRXhwcmVzc2lv blN0cmluZ0J1aWxkZXIuTWVtYmVyQmluZGluZ1RvU3RyaW5nKHRoaXMpOworICAgICAgICAgfQor IAorLSAgICAgICAgaW50ZXJuYWwgdmlydHVhbCB2b2lkIFZhbGlkYXRlQXNEZWZpbmVkSGVyZShp bnQgaW5kZXgpID0+IHRocm93IEVycm9yLlVua25vd25CaW5kaW5nVHlwZShpbmRleCk7CisrICAg ICAgICBpbnRlcm5hbCB2aXJ0dWFsIHZvaWQgVmFsaWRhdGVBc0RlZmluZWRIZXJlKGludCBpbmRl eCkKKysgICAgICAgIHsKKysgICAgICAgICAgICB0aHJvdyBFcnJvci5Vbmtub3duQmluZGluZ1R5 cGUoaW5kZXgpOworKyAgICAgICAgfQorICAgICB9CisgfQorZGlmZiAtLWdpdCBhL3NyYy9TeXN0 ZW0uTGlucS5FeHByZXNzaW9ucy9zcmMvU3lzdGVtL0xpbnEvRXhwcmVzc2lvbnMvTWVtYmVyTWVt YmVyQmluZGluZy5jcyBiL3NyYy9TeXN0ZW0uTGlucS5FeHByZXNzaW9ucy9zcmMvU3lzdGVtL0xp bnEvRXhwcmVzc2lvbnMvTWVtYmVyTWVtYmVyQmluZGluZy5jcworaW5kZXggZjM5ODFhMmIxZi4u NzVkZDcxNDFkYSAxMDA2NDQKKy0tLSBhL3NyYy9TeXN0ZW0uTGlucS5FeHByZXNzaW9ucy9zcmMv U3lzdGVtL0xpbnEvRXhwcmVzc2lvbnMvTWVtYmVyTWVtYmVyQmluZGluZy5jcworKysrIGIvc3Jj L1N5c3RlbS5MaW5xLkV4cHJlc3Npb25zL3NyYy9TeXN0ZW0vTGlucS9FeHByZXNzaW9ucy9NZW1i ZXJNZW1iZXJCaW5kaW5nLmNzCitAQCAtMTI3LDIzICsxMjcsMjQgQEAgbmFtZXNwYWNlIFN5c3Rl bS5MaW5xLkV4cHJlc3Npb25zCisgCisgICAgICAgICAgICAgLy8gTnVsbCBwYXJhbU5hbWUgYXMg dGhlcmUgYXJlIHNldmVyYWwgcGF0aHMgaGVyZSB3aXRoIGRpZmZlcmVudCBwYXJhbWV0ZXIgbmFt ZXMgYXQgdGhlIEFQSQorICAgICAgICAgICAgIFR5cGVVdGlscy5WYWxpZGF0ZVR5cGUoZGVjVHlw ZSwgbnVsbCwgYWxsb3dCeVJlZjogdHJ1ZSwgYWxsb3dQb2ludGVyOiB0cnVlKTsKKy0gICAgICAg ICAgICBzd2l0Y2ggKG1lbWJlcikKKysgICAgICAgICAgICBpZiAobWVtYmVyIGlzIFByb3BlcnR5 SW5mbykKKyAgICAgICAgICAgICB7CistICAgICAgICAgICAgICAgIGNhc2UgUHJvcGVydHlJbmZv IHBpOgorLSAgICAgICAgICAgICAgICAgICAgaWYgKCFwaS5DYW5SZWFkKQorLSAgICAgICAgICAg ICAgICAgICAgeworLSAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IEVycm9yLlByb3BlcnR5 RG9lc05vdEhhdmVHZXR0ZXIocGksIG5hbWVvZihtZW1iZXIpKTsKKy0gICAgICAgICAgICAgICAg ICAgIH0KKy0KKy0gICAgICAgICAgICAgICAgICAgIG1lbWJlclR5cGUgPSBwaS5Qcm9wZXJ0eVR5 cGU7CistICAgICAgICAgICAgICAgICAgICBicmVhazsKKy0KKy0gICAgICAgICAgICAgICAgY2Fz ZSBGaWVsZEluZm8gZmk6CistICAgICAgICAgICAgICAgICAgICBtZW1iZXJUeXBlID0gZmkuRmll bGRUeXBlOworLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisrICAgICAgICAgICAgICAgIFBy b3BlcnR5SW5mbyBwaSA9IChQcm9wZXJ0eUluZm8pbWVtYmVyOworKyAgICAgICAgICAgICAgICBp ZiAoIXBpLkNhblJlYWQpCisrICAgICAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgICAg IHRocm93IEVycm9yLlByb3BlcnR5RG9lc05vdEhhdmVHZXR0ZXIocGksIG5hbWVvZihtZW1iZXIp KTsKKysgICAgICAgICAgICAgICAgfQorIAorLSAgICAgICAgICAgICAgICBkZWZhdWx0OgorLSAg ICAgICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IuQXJndW1lbnRNdXN0QmVGaWVsZEluZm9PclBy b3BlcnR5SW5mbyhuYW1lb2YobWVtYmVyKSk7CisrICAgICAgICAgICAgICAgIG1lbWJlclR5cGUg PSBwaS5Qcm9wZXJ0eVR5cGU7CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgIGVsc2UgaWYg KG1lbWJlciBpcyBGaWVsZEluZm8pCisrICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICBG aWVsZEluZm8gZmkgPSAoRmllbGRJbmZvKW1lbWJlcjsKKysgICAgICAgICAgICAgICAgbWVtYmVy VHlwZSA9IGZpLkZpZWxkVHlwZTsKKysgICAgICAgICAgICB9CisrICAgICAgICAgICAgZWxzZQor KyAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IuQXJndW1lbnRNdXN0 QmVGaWVsZEluZm9PclByb3BlcnR5SW5mbyhuYW1lb2YobWVtYmVyKSk7CisgICAgICAgICAgICAg fQorICAgICAgICAgfQorIAorZGlmZiAtLWdpdCBhL3NyYy9TeXN0ZW0uTGlucS9zcmMvU3lzdGVt L0xpbnEvUmV2ZXJzZS5jcyBiL3NyYy9TeXN0ZW0uTGlucS9zcmMvU3lzdGVtL0xpbnEvUmV2ZXJz ZS5jcworaW5kZXggZTY4YTRmNDJlZS4uYTYzNTI3NzliMCAxMDA2NDQKKy0tLSBhL3NyYy9TeXN0 ZW0uTGlucS9zcmMvU3lzdGVtL0xpbnEvUmV2ZXJzZS5jcworKysrIGIvc3JjL1N5c3RlbS5MaW5x L3NyYy9TeXN0ZW0vTGlucS9SZXZlcnNlLmNzCitAQCAtMTAzLDE5ICsxMDMsMjQgQEAgbmFtZXNw YWNlIFN5c3RlbS5MaW5xCisgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICBpZiAob25s eUlmQ2hlYXApCisgICAgICAgICAgICAgICAgIHsKKy0gICAgICAgICAgICAgICAgICAgIHN3aXRj aCAoX3NvdXJjZSkKKysgICAgICAgICAgICAgICAgICAgIGlmIChfc291cmNlIGlzIElJTGlzdFBy b3ZpZGVyPFRTb3VyY2U+KQorICAgICAgICAgICAgICAgICAgICAgeworLSAgICAgICAgICAgICAg ICAgICAgICAgIGNhc2UgSUlMaXN0UHJvdmlkZXI8VFNvdXJjZT4gbGlzdFByb3Y6CistICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBsaXN0UHJvdi5HZXRDb3VudChvbmx5SWZDaGVh cDogdHJ1ZSk7CistCistICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBJQ29sbGVjdGlvbjxU U291cmNlPiBjb2xUOgorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29sVC5D b3VudDsKKy0KKy0gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIElDb2xsZWN0aW9uIGNvbDoK Ky0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbC5Db3VudDsKKy0KKy0gICAg ICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgorLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICByZXR1cm4gLTE7CisrICAgICAgICAgICAgICAgICAgICAgICAgSUlMaXN0UHJvdmlkZXI8VFNv dXJjZT4gbGlzdFByb3YgPSAoSUlMaXN0UHJvdmlkZXI8VFNvdXJjZT4pX3NvdXJjZTsKKysgICAg ICAgICAgICAgICAgICAgICAgICByZXR1cm4gbGlzdFByb3YuR2V0Q291bnQob25seUlmQ2hlYXA6 IHRydWUpOworKyAgICAgICAgICAgICAgICAgICAgfQorKyAgICAgICAgICAgICAgICAgICAgZWxz ZSBpZiAoX3NvdXJjZSBpcyBJQ29sbGVjdGlvbjxUU291cmNlPikKKysgICAgICAgICAgICAgICAg ICAgIHsKKysgICAgICAgICAgICAgICAgICAgICAgICBJQ29sbGVjdGlvbjxUU291cmNlPiBjb2xU ID0gKElDb2xsZWN0aW9uPFRTb3VyY2U+KSBfc291cmNlOworKyAgICAgICAgICAgICAgICAgICAg ICAgIHJldHVybiBjb2xULkNvdW50OworKyAgICAgICAgICAgICAgICAgICAgfQorKyAgICAgICAg ICAgICAgICAgICAgZWxzZSBpZiAoX3NvdXJjZSBpcyBJQ29sbGVjdGlvbikKKysgICAgICAgICAg ICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgICAgICAgICBJQ29sbGVjdGlvbiBjb2wgPSAo SUNvbGxlY3Rpb24pIF9zb3VyY2U7CisrICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNv bC5Db3VudDsKKysgICAgICAgICAgICAgICAgICAgIH0KKysgICAgICAgICAgICAgICAgICAgIGVs c2UKKysgICAgICAgICAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgICAgICAgICByZXR1 cm4gLTE7CisgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgIH0KKyAKK2Rp ZmYgLS1naXQgYS9zcmMvU3lzdGVtLk5ldC5IdHRwTGlzdGVuZXIvc3JjL1N5c3RlbS9OZXQvV2Vi U29ja2V0cy9IdHRwTGlzdGVuZXJXZWJTb2NrZXRDb250ZXh0LmNzIGIvc3JjL1N5c3RlbS5OZXQu SHR0cExpc3RlbmVyL3NyYy9TeXN0ZW0vTmV0L1dlYlNvY2tldHMvSHR0cExpc3RlbmVyV2ViU29j a2V0Q29udGV4dC5jcworaW5kZXggNTMyMTU3ODk0Ni4uZmY1NDY3NzAyNyAxMDA2NDQKKy0tLSBh L3NyYy9TeXN0ZW0uTmV0Lkh0dHBMaXN0ZW5lci9zcmMvU3lzdGVtL05ldC9XZWJTb2NrZXRzL0h0 dHBMaXN0ZW5lcldlYlNvY2tldENvbnRleHQuY3MKKysrKyBiL3NyYy9TeXN0ZW0uTmV0Lkh0dHBM aXN0ZW5lci9zcmMvU3lzdGVtL05ldC9XZWJTb2NrZXRzL0h0dHBMaXN0ZW5lcldlYlNvY2tldENv bnRleHQuY3MKK0BAIC05NCw4ICs5NCw5IEBAIG5hbWVzcGFjZSBTeXN0ZW0uTmV0LldlYlNvY2tl dHMKKyAgICAgICAgICAgICAgICAgaWYgKCEodXNlciBpcyBXaW5kb3dzUHJpbmNpcGFsKSkKKyAg ICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgLy8gQXV0aGVudGljYXRpb25T Y2hlbWVzLkJhc2ljLgorLSAgICAgICAgICAgICAgICAgICAgaWYgKHVzZXIuSWRlbnRpdHkgaXMg SHR0cExpc3RlbmVyQmFzaWNJZGVudGl0eSBiYXNpY0lkZW50aXR5KQorKyAgICAgICAgICAgICAg ICAgICAgaWYgKHVzZXIuSWRlbnRpdHkgaXMgSHR0cExpc3RlbmVyQmFzaWNJZGVudGl0eSkKKyAg ICAgICAgICAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgICAgICAgICBIdHRwTGlzdGVu ZXJCYXNpY0lkZW50aXR5IGJhc2ljSWRlbnRpdHkgPSAoSHR0cExpc3RlbmVyQmFzaWNJZGVudGl0 eSl1c2VyLklkZW50aXR5OworICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgR2Vu ZXJpY1ByaW5jaXBhbChuZXcgSHR0cExpc3RlbmVyQmFzaWNJZGVudGl0eShiYXNpY0lkZW50aXR5 Lk5hbWUsIGJhc2ljSWRlbnRpdHkuUGFzc3dvcmQpLCBudWxsKTsKKyAgICAgICAgICAgICAgICAg ICAgIH0KKyAgICAgICAgICAgICAgICAgfQotLSAKMi40NS4yCgo= --b1=_tnCtFHx6yIKuYDXqbApeYGjbdIBbQ4owcmVz3FJkVmc Content-Type: text/x-patch; name=v2-0021-gnu-Add-mono-6.12.0.patch Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=v2-0021-gnu-Add-mono-6.12.0.patch RnJvbSA1NzEyMjIwZTA3ZDcyNzk4YzJlYjhiZTI2ZTQwMjVhNzc2MjA1MWMwIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiB1bm11c2ggPHVubXVzaEBoYXNoYmFuZy5zaD4KRGF0ZTogV2Vk LCAyNyBOb3YgMjAyNCAwMTozNzo0MApTdWJqZWN0OiBbUEFUQ0ggdjIgMjEvMjFdIGdudTogQWRk IG1vbm8tNi4xMi4wLgoKVGhpcyBpbmNsdWRlcyBhIHBhdGNoIHRvIGFkZCBzdXBwb3J0IGZvciBh IDxydW5wYXRoPiBlbGVtZW50IHRvCm1vbm8ncyAqLmRsbC5jb25maWcgYW5kICouZXhlLmNvbmZp ZyBmaWxlcy4gIFNlZSBtb25vLTYuMTIuMC1hZGQtcnVucGF0aC5wYXRjaApmb3IgZGV0YWlscy4K CiogZ251L3BhY2thZ2VzL2RvdG5ldC5zY20KICAobW9uby02LjEyLjAtZXh0ZXJuYWwtcmVwby1z cGVjcywgbW9uby02LjEyLjApOiBOZXcgdmFyaWFibGUuCiogZ251L3BhY2thZ2VzL3BhdGNoZXMv bW9uby02LjEyLjAte2FkZC1ydW5wYXRoLGZpeC1Bc3NlbWJseVJlc29sdmVyLGZpeC1Db25kaXRp b25QYXJzZXJ9LnBhdGNoOiBOZXcgcGF0Y2hlcy4KKiBnbnUvbG9jYWwubWsgKGRpc3RfcGF0Y2hf REFUQSk6IFJlZ2lzdGVyIG5ldyBwYXRjaGVzLgoKLS0tCiBnbnUvbG9jYWwubWsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDMgKwogZ251L3BhY2thZ2VzL2RvdG5ldC5zY20g ICAgICAgICAgICAgICAgICAgICAgIHwgMTk3ICsrKysrKysrKysrKysrKwogLi4uL3BhdGNoZXMv bW9uby02LjEyLjAtYWRkLXJ1bnBhdGgucGF0Y2ggICAgIHwgMTg1ICsrKysrKysrKysrKysrCiAu Li4vbW9uby02LjEyLjAtZml4LUFzc2VtYmx5UmVzb2x2ZXIucGF0Y2ggICAgfCAyMzYgKysrKysr KysrKysrKysrKysrCiAuLi4vbW9uby02LjEyLjAtZml4LUNvbmRpdGlvblBhcnNlci5wYXRjaCAg ICAgfCAgNDYgKysrKwogNSBmaWxlcyBjaGFuZ2VkLCA2NjcgaW5zZXJ0aW9ucygrKQogY3JlYXRl IG1vZGUgMTAwNjQ0IGdudS9wYWNrYWdlcy9wYXRjaGVzL21vbm8tNi4xMi4wLWFkZC1ydW5wYXRo LnBhdGNoCiBjcmVhdGUgbW9kZSAxMDA2NDQgZ251L3BhY2thZ2VzL3BhdGNoZXMvbW9uby02LjEy LjAtZml4LUFzc2VtYmx5UmVzb2x2ZXIucGF0Y2gKIGNyZWF0ZSBtb2RlIDEwMDY0NCBnbnUvcGFj a2FnZXMvcGF0Y2hlcy9tb25vLTYuMTIuMC1maXgtQ29uZGl0aW9uUGFyc2VyLnBhdGNoCgpkaWZm IC0tZ2l0IGEvZ251L2xvY2FsLm1rIGIvZ251L2xvY2FsLm1rCmluZGV4IDA0Y2Y4ZGM1NzhlLi42 MzBiYWM3ZTk1ZCAxMDA2NDQKLS0tIGEvZ251L2xvY2FsLm1rCisrKyBiL2dudS9sb2NhbC5tawpA QCAtMTgzNSw2ICsxODM1LDkgQEAgZGlzdF9wYXRjaF9EQVRBID0JCQkJCQlcCiAgICVEJS9wYWNr YWdlcy9wYXRjaGVzL21vbm8tNS40LjAtcGF0Y2hlcy5wYXRjaAkJXAogICAlRCUvcGFja2FnZXMv cGF0Y2hlcy9tb25vLTUuOC4wLXBhdGNoZXMucGF0Y2gJCVwKICAgJUQlL3BhY2thZ2VzL3BhdGNo ZXMvbW9uby01LjEwLjAtbGF0ZXItbWNzLWNoYW5nZXMucGF0Y2gJXAorICAlRCUvcGFja2FnZXMv cGF0Y2hlcy9tb25vLTYuMTIuMC1hZGQtcnVucGF0aC5wYXRjaAkJXAorICAlRCUvcGFja2FnZXMv cGF0Y2hlcy9tb25vLTYuMTIuMC1maXgtQXNzZW1ibHlSZXNvbHZlci5wYXRjaAlcCisgICVEJS9w YWNrYWdlcy9wYXRjaGVzL21vbm8tNi4xMi4wLWZpeC1Db25kaXRpb25QYXJzZXIucGF0Y2gJXAog ICAlRCUvcGFja2FnZXMvcGF0Y2hlcy9tb25vLW1jcy1wYXRjaGVzLWZyb20tNS4xMC4wLnBhdGNo CVwKICAgJUQlL3BhY2thZ2VzL3BhdGNoZXMvbW9zYWljYXRjaGVyLXVuYnVuZGxlLWh0c2xpYi5w YXRjaAlcCiAgICVEJS9wYWNrYWdlcy9wYXRjaGVzL21ycmVzY3VlLXN1cHBvcnQtbG92ZS0xMS5w YXRjaAkJXApkaWZmIC0tZ2l0IGEvZ251L3BhY2thZ2VzL2RvdG5ldC5zY20gYi9nbnUvcGFja2Fn ZXMvZG90bmV0LnNjbQppbmRleCA5YzM4YTgzY2M2NC4uNzU5ZDM0YmExOTUgMTAwNjQ0Ci0tLSBh L2dudS9wYWNrYWdlcy9kb3RuZXQuc2NtCisrKyBiL2dudS9wYWNrYWdlcy9kb3RuZXQuc2NtCkBA IC0xNzA1LDMgKzE3MDUsMjAwIEBAIChkZWZpbmUtcHVibGljIGxpYmdkaXBsdXMKIG1vc3Qgb2Yg dGhlIGhlYXZ5IGxpZnRpbmcuIikKICAgICAoaG9tZS1wYWdlICJodHRwczovL2dpdGh1Yi5jb20v bW9uby9saWJnZGlwbHVzIikKICAgICAobGljZW5zZSBsaWNlbnNlOmV4cGF0KSkpCisKKyhkZWZp bmUgbW9uby02LjEyLjAtZXh0ZXJuYWwtcmVwby1zcGVjcworICAnKCgiYXBpLWRvYy10b29scyIg ICAgICAgICAgICAgICAiNWRhODEyN2FmOWU2OGM5ZDU4YTkwYWE5ZGUyMWY1NzQ5MWQ4MTI2MSIK KyAgICAgIjBycThkeG15NWF2MzZuZDI5OGs2MGQ4czM4NnpocWx3NjN5bjJ5d2MwNDE2eHNmbHNj ZzQiCisgICAgICM6cmVjdXJzaXZlPyAjdCkKKyAgICAoImFwaS1zbmFwc2hvdCIgICAgICAgICAg ICAgICAgIjgwOGU4YTllNGJlOGQzOGUwOTdkMmIwOTE5Y2FjMzdiYzE5NTg0NGEiCisgICAgICIx aTVtaWdkdzY0OWJteHFpaTk5cTJoZDZ2a2ExMXdsY3BoZnJtOThrYjdwcHJ6NGs0MDFhIikKKyAg ICAoImFzcG5ldHdlYnN0YWNrIiAgICAgICAgICAgICAgImU3N2IxMmU2Y2M1ZWQyNjBhOTg0NDdm NjA5ZTg4NzMzN2U0NGUyOTkiCisgICAgICIwcmtzMzQ0cXI0Zm1wM2ZzMTI2NGQycWttbTM0OG04 ZDFramQ3ejRsOTRpaWlyd24xZnExIikKKyAgICA7OyAoKCJodHRwczovL2dpdGh1Yi5jb20vVW5p dHktVGVjaG5vbG9naWVzL2Jkd2djIiAiYmR3Z2MiKQorICAgIDs7ICAiYTI3ZWRkYjgzN2Q2MTNj YjRjZjQzNjQwNWMyM2NlMzllZDE2YTg2ZCIKKyAgICA7OyAgIiIpCisgICAgKCgicmVmZXJlbmNl LWFzc2VtYmxpZXMiICJiaW5hcnktcmVmZXJlbmNlLWFzc2VtYmxpZXMiKQorICAgICAiZTY4MDQ2 ZDUxMDZhYTAzNDljMjNmOTU4MjE0NTY5NTVmYzE1Yjk2YiIKKyAgICAgIjFtcXB6Mjc0cWRobDg0 eTZ4OGJhenJmbWFqY2Y2cWFnaWtzMmcwZ3lnNHF5cXdncnA0OTAiKQorICAgICgiYm9ja2J1aWxk IiAgICAgICAgICAgICAgICAgICAiM2JkNDRmNjc4NGI4NWIxZWNlOGIwMGIxM2QxMmNmNDE2ZjVh ODdlNyIKKyAgICAgIjB6M2Q4cXlsZndubGtscGN2c21zZ3k1bjI0OGdjZmY1dm16cWp6YWxmajdk MWg3dmNqeHMiKQorICAgICgiYm9yaW5nc3NsIiAgICAgICAgICAgICAgICAgICAiMjk2MTM3Y2Y5 ODk2ODhiMDNlZDg5ZjcyY2Q3YmZkODZkNDcwNDQxZSIKKyAgICAgIjExZ2hkYXlmY3Z5c25oMTYx N2JqNDc4aHhyZzdiNDNqcGs3dmdhZm02amI3eWtweGw4ZmEiKQorICAgICgiY2VjaWwiICAgICAg ICAgICAgICAgICAgICAgICAiODAyMWYzZmJlNzU3MTVhMTc2MmU3MjU1OTRkOGMwMGNjZTM2Nzlk OCIKKyAgICAgIjBqMTlsd2JzMzB5Mnh6OG15azBmYnhzNGhiYWwxcDh2cWptbmt2bjMwMXYweHhh Y3lueG0iKQorICAgICgoImNlY2lsIiAiY2VjaWwtbGVnYWN5IikgICAgICAiMzNkNTBiODc0ZmQ1 MjcxMThiYzM2MWQ4M2RlM2Q0OTRlOGJiNTVlMSIKKyAgICAgIjFwNGhsMTc5NmliMjZ5a3lmNXNu bDZjajBseDB2N21qaDB4cWhqdzZxZGg3NTNuc2p5aGIiKQorICAgICgiY29yZWZ4IiAgICAgICAg ICAgICAgICAgICAgICAiYzRlZWFiOWZjMmZhYTAxOTVhODEyZTU1MmNkNzNlZTI5OGQzOTM4NiIK KyAgICAgIjAzNTMwcGY2ZGRkcWxpaHZiODNtOXozNGJhcms4bXpyZmZucmNscTcyNmduZGZnNHZx czgiKQorICAgICgiY29yZXJ0IiAgICAgICAgICAgICAgICAgICAgICAiMTExMzZhZDU1NzY3NDg1 MDYzMjI2YmUwOGNmYmQzMmVkNTc0Y2E0MyIKKyAgICAgIjFnMHE4M2ZmZjEzMjM3bndzZmNtazdm bXp3eDBrdjkzenNxcXliY2lnd2lwNXg2YW5pOGYiKQorICAgICgiaGVsaXgtYmluYXJpZXMiICAg ICAgICAgICAgICAiNjRiM2E2NzYzMWFjOGEwOGZmODJkNjEwODdjZmJmYzY2NGViNGFmOCIKKyAg ICAgIjFmNmtrcGJ6ajNieDlwMWhiMzZrempxMHBwY2trNHJwbWpucjgyaHlxN3kxOGZ3aWtmZDci KQorICAgICgiaWtkYXNtIiAgICAgICAgICAgICAgICAgICAgICAiZjBmZDY2ZWEwNjM5MjllZjVk NTFhYWZkYjEwODMyMTY0ODM1YmIwZiIKKyAgICAgIjAzMTNwdm1tamgwMWg5YjMwNmpkNmNkNmZj Ym5ieGFnbGFqODFtMGwwYWNmNHluN3piMTAiKQorICAgICgoImlrdm0tZm9yayIgImlrdm0iKSAg ICAgICAgICAiMDgyNjZhYzhjMGI2MjBjYzkyOWZmYWViMWYyM2FjMzc2MjljZTgyNSIKKyAgICAg IjFnMHYxdjhudnhrd3E3dzlxeXFoZjlrZ214cTNxbTZyc3c0YWw4eDB3M2RtYmd4amhxanYiKQor ICAgICgiaWxsaW5rZXItdGVzdC1hc3NldHMiICAgICAgICJlYzllYjUxYWYyZWIwN2RiZTUwYTI3 MjRkYjgyNmJmM2JmYjkzMGE2IgorICAgICAiMWI0dnE0amJnbmw0bHpmZmcwMm41dzFzcHBnMms2 YmZrczAxNTBwajQwM3Nibm1sODVnbCIpCisgICAgKCJsaW5rZXIiICAgICAgICAgICAgICAgICAg ICAgICJlZDRhOTQxMzQ4OWFhMjlhNzBlNDFmOTRjM2RhYzU2MjEwOTlmNzM0IgorICAgICAiMTZy ZHBjaDlhbmFybmhjemk0NDFhOXpuYTRyejkzandwYjMxeDBkenJiNGowM2N4YWpnMiIpCisgICAg OzsgKCgiaHR0cHM6Ly9naXRodWIuY29tL2RvdG5ldC9sbHZtLXByb2plY3QiICJsbHZtLXByb2pl Y3QiKQorICAgIDs7ICAiN2RmZGVhMTI2N2YwYTQwOTU1ZTAyNTY3ZGNiY2QxYmNiOTg3ZTgyNSIK KyAgICA7OyAgIiIpCisgICAgKCJOZXd0b25zb2Z0Lkpzb24iICAgICAgICAgICAgICI0NzFjM2Uw ODAzYTlmNDBhMGFjYzhhZWNlYjMxZGU2ZmY5M2E1MmM0IgorICAgICAiMGRnbmdkNWhxazZ5aGxn NDBrYWJuNnFkbmtubTMyemN4OXE2Ym0ydzMxY3Nuc2s1OTc4cyIpCisgICAgKCgiTnVHZXQuQnVp bGRUYXNrcyIgIm51Z2V0LWJ1aWxkdGFza3MiKQorICAgICAiOTk1NTg0Nzk1NzhiMWQ2YWYwZjQ0 M2JiNDExYmMzNTIwZmNiYWU1YyIKKyAgICAgIjE0MzRtNno5c2I3YnZraTliYTZpaW5xcG1oNGE0 aXlsZDc2anoxMHF6MDdzeWNrbGZscTMiKQorICAgICgoIk5Vbml0TGl0ZSIgIm51bml0LWxpdGUi KSAgICAiYTk3N2NhNTc1NzJjNTQ1ZTEwOGI1NmVmMzJhYTNmN2ZmODI4NzYxMSIKKyAgICAgIjAy endkZnB3OHBhemxsd2JwNGhrenF3ZnFsOThnNDg1NGRpeWtxZGI5d2EwdnJiOHc0c2oiKQorICAg IDs7ICgicm9zbHluLWJpbmFyaWVzIiAgICAgICAgICAgICAiMWM2NDgyNDcwY2QyMTlkY2M3NTAz MjU5YTIwZjI2YTE3MjNmMjBlYyIKKyAgICA7OyAgIiIpCisgICAgKCJyeCIgICAgICAgICAgICAg ICAgICAgICAgICAgICJiMjlhNGIwZmRhNjA5ZTBhZjMzZmY1NGVkMTM2NTJiNmNjZjBlMDVlIgor ICAgICAiMW4xandobXNia2N2MmQ4MDZpbW1jcHprYjcycnowNHh5OThteXczNTVhOHc1YWgyNXlp diIpCisgICAgOzsgKCJ4dW5pdC1iaW5hcmllcyIgICAgICAgICAgICAgICI4ZjZlNjJlMWMwMTZk ZmIxNTQyMDg1MmUyMjBlMDcwOTE5MjM3MzRhIgorICAgIDs7ICAiIikKKyAgICApKQorCisoZGVm aW5lLXB1YmxpYyBtb25vLTYuMTIuMAorICAocGFja2FnZQorICAgIChpbmhlcml0IG1vbm8tNS4x MC4wKQorICAgICh2ZXJzaW9uICI2LjEyLjAuMjA2IikKKyAgICAobmFtZSAibW9ubyIpCisgICAg KHNvdXJjZSAob3JpZ2luCisgICAgICAgICAgICAgIChtZXRob2QgZ2l0LWZldGNoKQorICAgICAg ICAgICAgICAodXJpCisgICAgICAgICAgICAgICAoZ2l0LXJlZmVyZW5jZQorICAgICAgICAgICAg ICAgICh1cmwgImh0dHBzOi8vZ2l0bGFiLndpbmVocS5vcmcvbW9uby9tb25vLmdpdCIpCisgICAg ICAgICAgICAgICAgKGNvbW1pdCAoc3RyaW5nLWFwcGVuZCAibW9uby0iICI2LjEyLjAuMjA2Iikp KSkKKyAgICAgICAgICAgICAgKGZpbGUtbmFtZSAoZ2l0LWZpbGUtbmFtZSBuYW1lIHZlcnNpb24p KQorICAgICAgICAgICAgICAoc2hhMjU2CisgICAgICAgICAgICAgICAoYmFzZTMyCisgICAgICAg ICAgICAgICAgIjFjdzl2NTNiZ2JjNnY3eG1wNWlqNzZ5NmluYjZzejFnMXp4MmprODI1cnhzaHE5 NmFsdmsiKSkKKyAgICAgICAgICAgICAgKG1vZHVsZXMgJygoZ3VpeCBidWlsZCB1dGlscykKKyAg ICAgICAgICAgICAgICAgICAgICAgICAoaWNlLTkgc3RyaW5nLWZ1bikpKQorICAgICAgICAgICAg ICAoc25pcHBldCAjfihiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIyQoYWRkLWV4 dGVybmFsLXJlcG9zCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb25vLTYuMTIuMC1l eHRlcm5hbC1yZXBvLXNwZWNzKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIyRAcHJlcGFy ZS1tb25vLXNvdXJjZS0wKSkKKyAgICAgICAgICAgICAgKHBhdGNoZXMKKyAgICAgICAgICAgICAg IChzZWFyY2gtcGF0Y2hlcworICAgICAgICAgICAgICAgICJtb25vLTYuMTIuMC1maXgtQ29uZGl0 aW9uUGFyc2VyLnBhdGNoIgorICAgICAgICAgICAgICAgICJtb25vLTYuMTIuMC1hZGQtcnVucGF0 aC5wYXRjaCIKKyAgICAgICAgICAgICAgICAibW9uby02LjEyLjAtZml4LUFzc2VtYmx5UmVzb2x2 ZXIucGF0Y2giKSkpKQorICAgIChuYXRpdmUtaW5wdXRzIChtb2RpZnktaW5wdXRzIChwYWNrYWdl LW5hdGl2ZS1pbnB1dHMgbW9uby01LjEwLjApCisgICAgICAgICAgICAgICAgICAgICAocmVwbGFj ZSAibW9ubyIgbW9uby01LjEwLjApCisgICAgICAgICAgICAgICAgICAgICAoYXBwZW5kIChkZWZh dWx0LXB5dGhvbikpKSkKKyAgICAoaW5wdXRzIChtb2RpZnktaW5wdXRzIChwYWNrYWdlLWlucHV0 cyBtb25vLTUuMTAuMCkKKyAgICAgICAgICAgICAgKGFwcGVuZCBsaWJnZGlwbHVzKSkpCisgICAg KGFyZ3VtZW50cworICAgICAoc3Vic3RpdHV0ZS1rZXl3b3JkLWFyZ3VtZW50cyAocGFja2FnZS1h cmd1bWVudHMgbW9uby01LjEwLjApCisgICAgICAgKCgjOnBhcmFsbGVsLWJ1aWxkPyBfKSAjdCkK KyAgICAgICAoKCM6bWFrZS1mbGFncyBtYWtlLWZsYWdzICN+JygpKQorICAgICAgICAjfihhcHBl bmQgIyRtYWtlLWZsYWdzCisgICAgICAgICAgICAgICAgICAobGlzdAorICAgICAgICAgICAgICAg ICAgIChzdHJpbmctYXBwZW5kICJQTEFURk9STV9ESVNBQkxFRF9URVNUUz0iCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgOzsgc2VnZmF1bHRzICghKSwgcmVhc29uIHVua25vd24K KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2FmZWhhbmRsZS4yLmV4ZSIKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7OyB1bmNsZWFyIHdoeSB0aGVzZSBmYWls CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImJ1Zy0xMDgzNC5leGUiCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImJ1Zy02MDg0OC5leGUiCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgOzsgdGhlc2UgYXJlIHRlc3RzIG9mIG1pY3Jvc29mdAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDs7IHRlbGVtZXRyeS4gIFRoZXkgZmFp bCBiZWNhdXNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOzsgbWljcm9zb2Z0 IHRlbGVtZXRyeSBpcyBvbmx5CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOzsg ZW5hYmxlZCBvbiBPU1guICBObyBpZGVhIHdoeQorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIDs7IHRoZXNlIHRlc3RzIGFyZSBydW4gYnkgZGVmYXVsdC4KKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAibWVycC1jcmFzaC10ZXN0LmV4ZSIKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAibWVycC1qc29uLXZhbGlkLmV4ZSIpKSkpCisgICAgICAgKCgj OnBoYXNlcyBwaGFzZXMgI34lc3RhbmRhcmQtcGhhc2VzKQorICAgICAgICAjfihtb2RpZnktcGhh c2VzICMkcGhhc2VzCisgICAgICAgICAgICAoZGVsZXRlICdwYXRjaC1zdWItYXV0b2dlbi5zaC1z aGViYW5nKQorICAgICAgICAgICAgOzsgT3VyIDUuMTAuMCBjb21waWxlciBoYXMgYmVlbiByYXRo ZXIgc291cGVkIHVwLgorICAgICAgICAgICAgKGFkZC1hZnRlciAndW5wYWNrICdkaXNhYmxlLXBy b2ZpbGUtdmVyc2lvbi1jaGVjaworICAgICAgICAgICAgICAobGFtYmRhIF8KKyAgICAgICAgICAg ICAgICAoc3Vic3RpdHV0ZSogIm1jcy9idWlsZC9jb21tb24vYmFzaWMtcHJvZmlsZS1jaGVjay5j cyIKKyAgICAgICAgICAgICAgICAgICgoIm1pbl9tb25vX3ZlcnNpb24gPSAuKiIpCisgICAgICAg ICAgICAgICAgICAgIm1pbl9tb25vX3ZlcnNpb24gPSBuZXcgVmVyc2lvbiAoMCwgMCk7XG4iKSkp KQorICAgICAgICAgICAgKGFkZC1hZnRlciAndW5wYWNrICdkaXNhYmxlLWMjLTguMC10ZXN0cwor ICAgICAgICAgICAgICA7OyBUaGVzZSBhcmVuJ3QgY29tcGlsYWJsZSBieSBtY3MKKyAgICAgICAg ICAgICAgKGxhbWJkYSBfCisgICAgICAgICAgICAgICAgKHN1YnN0aXR1dGUqICJtb25vL21pbmkv TWFrZWZpbGUuYW0uaW4iCisgICAgICAgICAgICAgICAgICAoKCItbGFuZ3ZlcnNpb246OFxcLjAi KQorICAgICAgICAgICAgICAgICAgICIiKSkKKyAgICAgICAgICAgICAgICAoc3Vic3RpdHV0ZSog Im1vbm8vdGVzdHMvTWFrZWZpbGUuYW0iCisgICAgICAgICAgICAgICAgICAoKCIJKGRpbS1nZW5l cmljfGRpbS1pc3N1ZS0xODkxN3xpbnRlcmZhY2UtMnxkZWxlZ2F0ZTE4fGdlbmVyaWMtdW5tYW5h Z2VkLWNvbnN0cmFpbnR8YXN5bmMtZ2VuZXJpYy1lbnVtKVxcLmNzLioiKQorICAgICAgICAgICAg ICAgICAgICIiKSkpKQorICAgICAgICAgICAgKGFkZC1hZnRlciAndW5wYWNrICdkaXNhYmxlLXZl cmlmaWNhdGlvbi1lcnJvcgorICAgICAgICAgICAgICAobGFtYmRhIF8KKyAgICAgICAgICAgICAg ICA7OyBGb3Igc29tZSByZWFzb24gdmVyaWZpY2F0aW9uIGZhaWxzIGNvbXBsYWluaW5nIGFib3V0 IGEgYnVuY2gKKyAgICAgICAgICAgICAgICA7OyBvZiBtaXNzaW5nIGljYWxscy4KKyAgICAgICAg ICAgICAgICAoc3Vic3RpdHV0ZSogInJ1bnRpbWUvTWFrZWZpbGUuYW0iCisgICAgICAgICAgICAg ICAgICAoKCIJICAgIGZpOyBkb25lOyBkb25lOyIpCisgICAgICAgICAgICAgICAgICAgIgkgICAg Zmk7IGRvbmU7IGRvbmU7IG9rPTo7IikpKSkKKyAgICAgICAgICAgIDs7IFRoaXMgcmVxdWlyZXMg YmluYXJ5IGJsb2JzIHRvIGJlIHVzZWQsIGl0IGRvZXNuJ3QgcHJvdmlkZSBhCisgICAgICAgICAg ICA7OyBjbGVhciB3YXkgdG8gcmVnZW5lcmF0ZSB0aGVtIGFuZCBubyBjb3JyZXNwb25kaW5nIHNv dXJjZSBpcworICAgICAgICAgICAgOzsgbGlua2VkLCBwbHVzIGZyb20gd2hhdCBsaXR0bGUgSSBr bm93IG9mIGl0IGl0IHNvdW5kcyBsaWtlIGl0J3MKKyAgICAgICAgICAgIDs7IG5vdCBzb21ldGhp bmcgd2UgbmVlZCBhdCBhbGw/CisgICAgICAgICAgICAoYWRkLWFmdGVyICd1bnBhY2sgJ2Rpc2Fi bGUtaGVsaXgtY2xpZW50CisgICAgICAgICAgICAgIChsYW1iZGEgXworICAgICAgICAgICAgICAg IChzdWJzdGl0dXRlKiAibWNzL3Rvb2xzL01ha2VmaWxlIgorICAgICAgICAgICAgICAgICAgKCgi bW9uby1oZWxpeC1jbGllbnQiKQorICAgICAgICAgICAgICAgICAgICIiKSkpKQorICAgICAgICAg ICAgKHJlcGxhY2UgJ2J1aWxkLXJlZmVyZW5jZS1hc3NlbWJsaWVzCisgICAgICAgICAgICAgIChs YW1iZGEqICgjOmtleSBtYWtlLWZsYWdzICM6YWxsb3ctb3RoZXIta2V5cykKKyAgICAgICAgICAg ICAgICAobGV0ICgodG9wIChnZXRjd2QpKSkKKyAgICAgICAgICAgICAgICAgICh3aXRoLWRpcmVj dG9yeS1leGN1cnNpb24KKyAgICAgICAgICAgICAgICAgICAgICAiZXh0ZXJuYWwvYmluYXJ5LXJl ZmVyZW5jZS1hc3NlbWJsaWVzIgorICAgICAgICAgICAgICAgICAgICAoc3Vic3RpdHV0ZSogKGZp bmQtZmlsZXMgIi4iICJeTWFrZWZpbGUkIikKKyAgICAgICAgICAgICAgICAgICAgICAoKCJDU0Nf Q09NTU9OX0FSR1MgOj0gIiBhbGwpCisgICAgICAgICAgICAgICAgICAgICAgIChzdHJpbmctYXBw ZW5kIGFsbCAiLWRlbGF5c2lnbisgIikpCisgICAgICAgICAgICAgICAgICAgICAgKCgiSUJNXFwu RGF0YVxcLkRCMl9SRUZTIDo9ICIgYWxsKQorICAgICAgICAgICAgICAgICAgICAgICAoc3RyaW5n LWFwcGVuZCBhbGwgIlN5c3RlbS5YbWwgIikpCisgICAgICAgICAgICAgICAgICAgICAgKCgiTW9u b1xcLkRhdGFcXC5TcWxpdGVfUkVGUyA6PSAiIGFsbCkKKyAgICAgICAgICAgICAgICAgICAgICAg KHN0cmluZy1hcHBlbmQgYWxsICJTeXN0ZW0uWG1sICIpKQorICAgICAgICAgICAgICAgICAgICAg ICgoIlN5c3RlbVxcLkRhdGFcXC5EYXRhU2V0RXh0ZW5zaW9uc19SRUZTIDo9ICIgYWxsKQorICAg ICAgICAgICAgICAgICAgICAgICAoc3RyaW5nLWFwcGVuZCBhbGwgIlN5c3RlbS5YbWwgIikpCisg ICAgICAgICAgICAgICAgICAgICAgKCgiU3lzdGVtXFwuRGF0YVxcLk9yYWNsZUNsaWVudF9SRUZT IDo9ICIgYWxsKQorICAgICAgICAgICAgICAgICAgICAgICAoc3RyaW5nLWFwcGVuZCBhbGwgIlN5 c3RlbS5YbWwgIikpCisgICAgICAgICAgICAgICAgICAgICAgKCgiU3lzdGVtXFwuSWRlbnRpdHlN b2RlbF9SRUZTIDo9ICIgYWxsKQorICAgICAgICAgICAgICAgICAgICAgICAoc3RyaW5nLWFwcGVu ZCBhbGwgIlN5c3RlbS5Db25maWd1cmF0aW9uICIpKQorICAgICAgICAgICAgICAgICAgICAgICgo IlN5c3RlbVxcLkRlc2lnbl9SRUZTIDo9ICIgYWxsKQorICAgICAgICAgICAgICAgICAgICAgICAo c3RyaW5nLWFwcGVuZCBhbGwgIkFjY2Vzc2liaWxpdHkgIikpCisgICAgICAgICAgICAgICAgICAg ICAgKCgiU3lzdGVtXFwuV2ViXFwuRXh0ZW5zaW9uc1xcLkRlc2lnbl9SRUZTIDo9ICIgYWxsKQor ICAgICAgICAgICAgICAgICAgICAgICAoc3RyaW5nLWFwcGVuZCBhbGwgIlN5c3RlbS5XaW5kb3dz LkZvcm1zIFN5c3RlbS5XZWIgIikpCisgICAgICAgICAgICAgICAgICAgICAgKCgiU3lzdGVtXFwu U2VydmljZU1vZGVsXFwuUm91dGluZ19SRUZTIDo9ICIgYWxsKQorICAgICAgICAgICAgICAgICAg ICAgICAoc3RyaW5nLWFwcGVuZCBhbGwgIlN5c3RlbS5YbWwgIikpCisgICAgICAgICAgICAgICAg ICAgICAgKCgiU3lzdGVtXFwuV2ViXFwuQWJzdHJhY3Rpb25zX1JFRlMgOj0gIiBhbGwpCisgICAg ICAgICAgICAgICAgICAgICAgIChzdHJpbmctYXBwZW5kIGFsbCAiU3lzdGVtICIpKQorICAgICAg ICAgICAgICAgICAgICAgICgoIlN5c3RlbVxcLlJlYWN0aXZlXFwuV2luZG93c1xcLkZvcm1zX1JF RlMgOj0gIiBhbGwpCisgICAgICAgICAgICAgICAgICAgICAgIChzdHJpbmctYXBwZW5kIGFsbCAi U3lzdGVtICIpKQorICAgICAgICAgICAgICAgICAgICAgICgoIlN5c3RlbVxcLldpbmRvd3NcXC5G b3Jtc1xcLkRhdGFWaXN1YWxpemF0aW9uX1JFRlMgOj0gIiBhbGwpCisgICAgICAgICAgICAgICAg ICAgICAgIChzdHJpbmctYXBwZW5kIGFsbCAiQWNjZXNzaWJpbGl0eSAiKSkKKyAgICAgICAgICAg ICAgICAgICAgICAoKCJGYWNhZGVzL1N5c3RlbVxcLlNlcnZpY2VNb2RlbFxcLlByaW1pdGl2ZXNf UkVGUyA6PSAiIGFsbCkKKyAgICAgICAgICAgICAgICAgICAgICAgKHN0cmluZy1hcHBlbmQgYWxs ICJTeXN0ZW0uWG1sICIpKQorICAgICAgICAgICAgICAgICAgICAgICgoIkZhY2FkZXMvU3lzdGVt XFwuRHluYW1pY1xcLlJ1bnRpbWVfUkVGUyA6PSAiIGFsbCkKKyAgICAgICAgICAgICAgICAgICAg ICAgKHN0cmluZy1hcHBlbmQgYWxsICJTeXN0ZW0gIikpCisgICAgICAgICAgICAgICAgICAgICAg KCgiRmFjYWRlcy9TeXN0ZW1cXC5YbWxcXC5YRG9jdW1lbnRfUkVGUyA6PSAiIGFsbCkKKyAgICAg ICAgICAgICAgICAgICAgICAgKHN0cmluZy1hcHBlbmQgYWxsICJTeXN0ZW0uWG1sICIpKQorICAg ICAgICAgICAgICAgICAgICAgICgoIkZhY2FkZXMvU3lzdGVtXFwuUnVudGltZVxcLlNlcmlhbGl6 YXRpb24uWG1sX1JFRlMgOj0gIiBhbGwpCisgICAgICAgICAgICAgICAgICAgICAgIChzdHJpbmct YXBwZW5kIGFsbCAiU3lzdGVtLlhtbCAiKSkKKyAgICAgICAgICAgICAgICAgICAgICAoKCJGYWNh ZGVzL1N5c3RlbVxcLkRhdGFcXC5Db21tb25fUkVGUyA6PSAiIGFsbCkKKyAgICAgICAgICAgICAg ICAgICAgICAgKHN0cmluZy1hcHBlbmQgYWxsICJTeXN0ZW0gU3lzdGVtLlhtbCAiKSkpCisgICAg ICAgICAgICAgICAgICAgIChzdWJzdGl0dXRlKiAiYnVpbGQvbW9ub2Ryb2lkL01ha2VmaWxlIgor ICAgICAgICAgICAgICAgICAgICAgICgoIkVDTUFfS0VZIDo9IFxcLlxcLi9cXC5cXC4vXFwuXFwu L1xcLlxcLi9cXC5cXC4vbW9uby8iKQorICAgICAgICAgICAgICAgICAgICAgICA7OyBpdCBzaG91 bGQgb25seSBiZSA0IGRpcmVjdG9yaWVzIHVwLCBhbmQgaXQncyBpbgorICAgICAgICAgICAgICAg ICAgICAgICA7OyBtY3MvLCBub3QgbW9uby9tY3MvCisgICAgICAgICAgICAgICAgICAgICAgICJF Q01BX0tFWSA6PSAuLi8uLi8uLi8uLi8iKSkKKyAgICAgICAgICAgICAgICAgICAgKGFwcGx5IGlu dm9rZSAibWFrZSIgIi1qIiAobnVtYmVyLT5zdHJpbmcKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgKHBhcmFsbGVsLWpvYi1jb3VudCkpCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAiQ1NDPW1jcyIgbWFrZS1mbGFncykpKSkpCisgICAgICAgICAgICAo cmVwbGFjZSAnY2hlY2sKKyAgICAgICAgICAgICAgKGxhbWJkYSogKCM6a2V5IHRlc3RzPyAobWFr ZS1mbGFncyAnKCkpICM6YWxsb3ctb3RoZXIta2V5cykKKyAgICAgICAgICAgICAgICAod2hlbiB0 ZXN0cz8KKyAgICAgICAgICAgICAgICAgIDs7IFRoZXJlIGFyZSBtb3JlIHRlc3RzIHRoYW4gdGhl c2UsIGJ1dCB0aGV5IGRlcGVuZCBvbgorICAgICAgICAgICAgICAgICAgOzsgZXh0ZXJuYWwveHVu aXQtYmluYXJpZXMsIHNvIHdlIGxpbWl0IG91cnNlbHZlcyB0byB0aGUKKyAgICAgICAgICAgICAg ICAgIDs7IHRlc3RzIHRoYXQgZGViaWFuIHJ1bnMuCisgICAgICAgICAgICAgICAgICAod2l0aC1k aXJlY3RvcnktZXhjdXJzaW9uICJtb25vL21pbmkiCisgICAgICAgICAgICAgICAgICAgIChhcHBs eSBpbnZva2UgIm1ha2UiICJjaGVjayIgbWFrZS1mbGFncykpCisgICAgICAgICAgICAgICAgICAo d2l0aC1kaXJlY3RvcnktZXhjdXJzaW9uICJtb25vL3Rlc3RzIgorICAgICAgICAgICAgICAgICAg ICAoYXBwbHkgaW52b2tlICJtYWtlIiAiY2hlY2siIG1ha2UtZmxhZ3MpKSkpKSkpKSkpKQpkaWZm IC0tZ2l0IGEvZ251L3BhY2thZ2VzL3BhdGNoZXMvbW9uby02LjEyLjAtYWRkLXJ1bnBhdGgucGF0 Y2ggYi9nbnUvcGFja2FnZXMvcGF0Y2hlcy9tb25vLTYuMTIuMC1hZGQtcnVucGF0aC5wYXRjaApu ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uMzA2MmJkNmEwZGUKLS0tIC9k ZXYvbnVsbAorKysgYi9nbnUvcGFja2FnZXMvcGF0Y2hlcy9tb25vLTYuMTIuMC1hZGQtcnVucGF0 aC5wYXRjaApAQCAtMCwwICsxLDE4NSBAQAorbW9ubzogbWV0YWRhdGE6IGFkZCA8cnVucGF0aD4g ZWxlbWVudCB0byAuY29uZmlnIGZpbGVzLgorCitUaGlzIG5ldyBlbGVtZW50IGlzIG9mIHRoZSBm b3JtOgorCis8cnVucGF0aCBwYXRoPSIvcGF0aDEvdG8vbGliczovcGF0aDIvdG8vbGliczouLi4i Lz4KKworKHRoZSA6IHdpbGwgYWN0dWFsbHkgYmUgd2hhdGV2ZXIgR19TRUFSQ0hQQVRIX1NFUEFS QVRPUl9TIGlzLCBzbyBsaWtlbHkgOyBvbgord2luZG93cyBhbmQgOiBlbHNld2hlcmUpLgorCisq IG1vbm8vbWV0YWRhdGEvbWV0YWRhdGEtaW50ZXJuYWxzLmggKHN0cnVjdCBfTW9ub0ltYWdlKTog bmV3ICdydW5wYXRoJyBmaWVsZC4KKyogbW9uby9tZXRhZGF0YS9tb25vLWNvbmZpZy5jIChydW5w YXRoX2luaXQsIHJ1bnBhdGhfc3RhcnQsIHJ1bnBhdGhfaGFuZGxlcik6CisgIG5ldyBmdW5jdGlv bnMgYW5kIHBhcnNlciB1c2luZyB0aGVtIHRvIHBvcHVsYXRlIHJ1bnBhdGggZmllbGQgZnJvbSA8 cnVucGF0aD4KKyAgZWxlbWVudC4KKyAgKG1vbm9fY29uZmlnX2luaXQpOiByZWdpc3RlciBydW5w YXRoX2hhbmRsZXIuCisqIG1vbm8vbWV0YWRhdGEvYXNzZW1ibHkuYyAobW9ub19hc3NlbWJseV9s b2FkX2Z1bGxfZ2FjX2Jhc2VfZGVmYXVsdCk6IG5ldworICAncmVxdWVzdGluZycgcGFyYW1ldGVy LCB1c2UgaXQgdG8gc2VhcmNoIHRoZSByZXF1ZXN0aW5nIGFzc2VtYmx5J3MgcnVucGF0aAorICBm aXJzdC4KKyAgKG1vbm9fYXNzZW1ibHlfcmVxdWVzdF9ieW5hbWVfbm9zZWFyY2gpOiB1c2UgaXQu CisKKworZGlmZiAtLWdpdCBhL21vbm8vbWV0YWRhdGEvYXNzZW1ibHkuYyBiL21vbm8vbWV0YWRh dGEvYXNzZW1ibHkuYworaW5kZXggZjlmZWFhY2YyYzEuLjhjNzFhZDBlYjk1IDEwMDY0NAorLS0t IGEvbW9uby9tZXRhZGF0YS9hc3NlbWJseS5jCisrKysgYi9tb25vL21ldGFkYXRhL2Fzc2VtYmx5 LmMKK0BAIC0zNzYsNyArMzc2LDcgQEAgbW9ub19hc3NlbWJseV9pbnZva2Vfc2VhcmNoX2hvb2tf aW50ZXJuYWwgKE1vbm9Bc3NlbWJseUxvYWRDb250ZXh0ICphbGMsIE1vbm9Bc3MKKyBzdGF0aWMg TW9ub0Fzc2VtYmx5KgorIG1vbm9fYXNzZW1ibHlfcmVxdWVzdF9ieW5hbWVfbm9zZWFyY2ggKE1v bm9Bc3NlbWJseU5hbWUgKmFuYW1lLCBjb25zdCBNb25vQXNzZW1ibHlCeU5hbWVSZXF1ZXN0ICpy ZXEsIE1vbm9JbWFnZU9wZW5TdGF0dXMgKnN0YXR1cyk7Cisgc3RhdGljIE1vbm9Bc3NlbWJseSoK Ky1tb25vX2Fzc2VtYmx5X2xvYWRfZnVsbF9nYWNfYmFzZV9kZWZhdWx0IChNb25vQXNzZW1ibHlO YW1lICphbmFtZSwgY29uc3QgY2hhciAqYmFzZWRpciwgTW9ub0Fzc2VtYmx5TG9hZENvbnRleHQg KmFsYywgTW9ub0Fzc2VtYmx5Q29udGV4dEtpbmQgYXNtY3R4LCBNb25vSW1hZ2VPcGVuU3RhdHVz ICpzdGF0dXMpOworK21vbm9fYXNzZW1ibHlfbG9hZF9mdWxsX2dhY19iYXNlX2RlZmF1bHQgKE1v bm9Bc3NlbWJseU5hbWUgKmFuYW1lLCBNb25vQXNzZW1ibHkgKnJlcXVlc3RpbmcsIGNvbnN0IGNo YXIgKmJhc2VkaXIsIE1vbm9Bc3NlbWJseUxvYWRDb250ZXh0ICphbGMsIE1vbm9Bc3NlbWJseUNv bnRleHRLaW5kIGFzbWN0eCwgTW9ub0ltYWdlT3BlblN0YXR1cyAqc3RhdHVzKTsKKyBzdGF0aWMg TW9ub0Fzc2VtYmx5KgorIGNoYWluX3JlZGlyZWN0aW9uc19sb2FkZnJvbSAoTW9ub0Fzc2VtYmx5 TG9hZENvbnRleHQgKmFsYywgTW9ub0ltYWdlICppbWFnZSwgTW9ub0ltYWdlT3BlblN0YXR1cyAq b3V0X3N0YXR1cyk7Cisgc3RhdGljIE1vbm9Bc3NlbWJseSoKK0BAIC00NjU1LDcgKzQ2NTUsNyBA QCBtb25vX2Fzc2VtYmx5X3JlcXVlc3RfYnluYW1lX25vc2VhcmNoIChNb25vQXNzZW1ibHlOYW1l ICphbmFtZSwKKyAJfQorIAorICNpZm5kZWYgRU5BQkxFX05FVENPUkUKKy0JcmVzdWx0ID0gbW9u b19hc3NlbWJseV9sb2FkX2Z1bGxfZ2FjX2Jhc2VfZGVmYXVsdCAoYW5hbWUsIHJlcS0+YmFzZWRp ciwgcmVxLT5yZXF1ZXN0LmFsYywgcmVxLT5yZXF1ZXN0LmFzbWN0eCwgc3RhdHVzKTsKKysJcmVz dWx0ID0gbW9ub19hc3NlbWJseV9sb2FkX2Z1bGxfZ2FjX2Jhc2VfZGVmYXVsdCAoYW5hbWUsIHJl cS0+cmVxdWVzdGluZ19hc3NlbWJseSwgcmVxLT5iYXNlZGlyLCByZXEtPnJlcXVlc3QuYWxjLCBy ZXEtPnJlcXVlc3QuYXNtY3R4LCBzdGF0dXMpOworICNlbmRpZgorIAlyZXR1cm4gcmVzdWx0Owor IH0KK0BAIC00NjY3LDYgKzQ2NjcsNyBAQCBtb25vX2Fzc2VtYmx5X3JlcXVlc3RfYnluYW1lX25v c2VhcmNoIChNb25vQXNzZW1ibHlOYW1lICphbmFtZSwKKyAgKi8KKyBNb25vQXNzZW1ibHkqCisg bW9ub19hc3NlbWJseV9sb2FkX2Z1bGxfZ2FjX2Jhc2VfZGVmYXVsdCAoTW9ub0Fzc2VtYmx5TmFt ZSAqYW5hbWUsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTW9u b0Fzc2VtYmx5ICpyZXF1ZXN0aW5nLAorIAkJCQkJICBjb25zdCBjaGFyICpiYXNlZGlyLAorIAkJ CQkJICBNb25vQXNzZW1ibHlMb2FkQ29udGV4dCAqYWxjLAorIAkJCQkJICBNb25vQXNzZW1ibHlD b250ZXh0S2luZCBhc21jdHgsCitAQCAtNDcxOCw2ICs0NzE5LDIzIEBAIG1vbm9fYXNzZW1ibHlf bG9hZF9mdWxsX2dhY19iYXNlX2RlZmF1bHQgKE1vbm9Bc3NlbWJseU5hbWUgKmFuYW1lLAorIAkJ CWZpbGVuYW1lID0gZ19zdHJjb25jYXQgKGFuYW1lLT5uYW1lLCBleHQsIChjb25zdCBjaGFyKilO VUxMKTsKKyAJCX0KKyAKKysgICAgICAgICAgICAgICAgaWYgKHJlcXVlc3RpbmcKKysgICAgICAg ICAgICAgICAgICAgICYmIHJlcXVlc3RpbmctPmltYWdlCisrICAgICAgICAgICAgICAgICAgICAm JiByZXF1ZXN0aW5nLT5pbWFnZS0+cnVucGF0aCkgeworKyAgICAgICAgICAgICAgICAgICAgY2hh ciAqKnJ1bnBhdGggPSByZXF1ZXN0aW5nLT5pbWFnZS0+cnVucGF0aDsKKysgICAgICAgICAgICAg ICAgICAgIGludCBqOworKyAgICAgICAgICAgICAgICAgICAgZm9yIChqID0gMDsgcnVucGF0aFtq XTsgaisrKSB7CisrICAgICAgICAgICAgICAgICAgICAgICAgZnVsbHBhdGggPSBnX2J1aWxkX2Zp bGVuYW1lIChydW5wYXRoW2pdLCBmaWxlbmFtZSwgTlVMTCk7CisrICAgICAgICAgICAgICAgICAg ICAgICAgcmVzdWx0ID0gbW9ub19hc3NlbWJseV9yZXF1ZXN0X29wZW4gKGZ1bGxwYXRoLCAmcmVx LCBzdGF0dXMpOworKyAgICAgICAgICAgICAgICAgICAgICAgIGdfZnJlZSAoZnVsbHBhdGgpOwor KyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQpIHsKKysgICAgICAgICAgICAgICAg ICAgICAgICAgICAgcmVzdWx0LT5pbl9nYWMgPSBGQUxTRTsKKysgICAgICAgICAgICAgICAgICAg ICAgICAgICAgZ19mcmVlIChmaWxlbmFtZSk7CisrICAgICAgICAgICAgICAgICAgICAgICAgICAg IHJldHVybiByZXN1bHQ7CisrICAgICAgICAgICAgICAgICAgICAgICAgfQorKyAgICAgICAgICAg ICAgICAgICAgfQorKyAgICAgICAgICAgICAgICB9CisrCisgI2lmbmRlZiBESVNBQkxFX0dBQwor IAkJY29uc3QgZ2Jvb2xlYW4gcmVmb25seSA9IGFzbWN0eCA9PSBNT05PX0FTTUNUWF9SRUZPTkxZ OworIAorZGlmZiAtLWdpdCBhL21vbm8vbWV0YWRhdGEvaW1hZ2UuYyBiL21vbm8vbWV0YWRhdGEv aW1hZ2UuYworaW5kZXggZTBiODZkZDNkMDkuLjEyYTgwOTRlNGUwIDEwMDY0NAorLS0tIGEvbW9u by9tZXRhZGF0YS9pbWFnZS5jCisrKysgYi9tb25vL21ldGFkYXRhL2ltYWdlLmMKK0BAIC0yMzYz LDYgKzIzNjMsOSBAQCBtb25vX2ltYWdlX2Nsb3NlX2V4Y2VwdF9wb29scyAoTW9ub0ltYWdlICpp bWFnZSkKKyAKKyAJbW9ub19tZXRhZGF0YV9jbGVhbl9mb3JfaW1hZ2UgKGltYWdlKTsKKyAKKysg ICAgICAgIGlmIChpbWFnZS0+cnVucGF0aCkKKysgICAgICAgICAgICBnX3N0cmZyZWV2IChpbWFn ZS0+cnVucGF0aCk7CisrCisgCS8qCisgCSAqIFRoZSBjYWNoZXMgaW5zaWRlIGEgTW9ub0ltYWdl IG1pZ2h0IHJlZmVyIHRvIG1ldGFkYXRhIHdoaWNoIGlzIHN0b3JlZCBpbiByZWZlcmVuY2VkIAor IAkgKiBhc3NlbWJsaWVzLCBzbyB3ZSBjYW4ndCByZWxlYXNlIHRoZXNlIHJlZmVyZW5jZXMgaW4g bW9ub19hc3NlbWJseV9jbG9zZSAoKSBzaW5jZSB0aGUKK2RpZmYgLS1naXQgYS9tb25vL21ldGFk YXRhL21ldGFkYXRhLWludGVybmFscy5oIGIvbW9uby9tZXRhZGF0YS9tZXRhZGF0YS1pbnRlcm5h bHMuaAoraW5kZXggOTM4OGQ2OWIwZmQuLjkzZjRiODgwYzYxIDEwMDY0NAorLS0tIGEvbW9uby9t ZXRhZGF0YS9tZXRhZGF0YS1pbnRlcm5hbHMuaAorKysrIGIvbW9uby9tZXRhZGF0YS9tZXRhZGF0 YS1pbnRlcm5hbHMuaAorQEAgLTQyMyw2ICs0MjMsMTIgQEAgc3RydWN0IF9Nb25vSW1hZ2Ugewor IAkvKiovCisgCU1vbm9UYWJsZUluZm8gICAgICAgIHRhYmxlcyBbTU9OT19UQUJMRV9OVU1dOwor IAorKyAgICAvKgorKyAgICAgIFNlYXJjaCBwYXRoIHRvIGJlIHRyaWVkIGZpcnN0IHdoZW4gbG9v a2luZyBmb3IgYXNzZW1ibGllcyByZWZlcmVuY2VkIGJ5CisrICAgICAgdGhpcyBpbWFnZSwgb3Ig TlVMTC4gSXMgYSBOVUxMLXRlcm1pbmF0ZWQgdmVjdG9yLgorKyAgICAgKi8KKysgICAgICAgIGNo YXIgICAgICAgICAgICAgICAqKnJ1bnBhdGg7CisrCisgCS8qCisgCSAqIHJlZmVyZW5jZXMgaXMg aW5pdGlhbGl6ZWQgb25seSBieSB1c2luZyB0aGUgbW9ub19hc3NlbWJseV9vcGVuCisgCSAqIGZ1 bmN0aW9uLCBhbmQgbm90IGJ5IHVzaW5nIHRoZSBsb3dsZXZlbCBtb25vX2ltYWdlX29wZW4uCitk aWZmIC0tZ2l0IGEvbW9uby9tZXRhZGF0YS9tb25vLWNvbmZpZy5jIGIvbW9uby9tZXRhZGF0YS9t b25vLWNvbmZpZy5jCitpbmRleCBkOTczZGU1M2M4Yy4uODg4OGM3YjRmYWMgMTAwNjQ0CistLS0g YS9tb25vL21ldGFkYXRhL21vbm8tY29uZmlnLmMKKysrKyBiL21vbm8vbWV0YWRhdGEvbW9uby1j b25maWcuYworQEAgLTIxLDYgKzIxLDcgQEAKKyAjaW5jbHVkZSAibW9uby9tZXRhZGF0YS9tZXRh ZGF0YS1pbnRlcm5hbHMuaCIKKyAjaW5jbHVkZSAibW9uby9tZXRhZGF0YS9vYmplY3QtaW50ZXJu YWxzLmgiCisgI2luY2x1ZGUgIm1vbm8vdXRpbHMvbW9uby1sb2dnZXItaW50ZXJuYWxzLmgiCisr I2luY2x1ZGUgIm1vbm8vdXRpbHMvbW9uby1wYXRoLmgiCisgCisgI2lmIGRlZmluZWQoVEFSR0VU X1BTMykKKyAjZGVmaW5lIENPTkZJR19PUyAiQ2VsbE9TIgorQEAgLTQ2NCw2ICs0NjUsNTkgQEAg YW90X2NhY2hlX2hhbmRsZXIgPSB7CisgCU5VTEwsIC8qIGZpbmlzaCAqLworIH07CisgCisrc3Rh dGljIHZvaWQqCisrcnVucGF0aF9pbml0IChNb25vSW1hZ2UgKmFzc2VtYmx5KQorK3sKKysgICAg cmV0dXJuIGFzc2VtYmx5OworK30KKysKKytzdGF0aWMgdm9pZAorK3J1bnBhdGhfc3RhcnQgKGdw b2ludGVyIHVzZXJfZGF0YSwKKysgICAgICAgICAgICAgICBjb25zdCBnY2hhciAgICAgICAgICpl bGVtZW50X25hbWUsCisrICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgICAgICAgICoqYXR0cmli dXRlX25hbWVzLAorKyAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyICAgICAgICAqKmF0dHJpYnV0 ZV92YWx1ZXMpCisreworKyAgICBNb25vSW1hZ2UgKmFzc2VtYmx5ID0gKE1vbm9JbWFnZSAqKSB1 c2VyX2RhdGE7CisrICAgIGludCBpOworKworKyAgICBpZiAoc3RyY21wIChlbGVtZW50X25hbWUs ICJydW5wYXRoIikgIT0gMCkKKysgICAgICAgIHJldHVybjsKKysKKysgICAgZm9yIChpID0gMDsg YXR0cmlidXRlX25hbWVzW2ldOyBpKyspCisrICAgICAgICB7CisrICAgICAgICAgICAgaWYoIXN0 cmNtcCAoYXR0cmlidXRlX25hbWVzIFtpXSwgInBhdGgiKSkKKysgICAgICAgICAgICAgICAgewor KyAgICAgICAgICAgICAgICAgICAgY2hhciAqKnNwbGl0dGVkLCAqKmRlc3Q7CisrCisrICAgICAg ICAgICAgICAgICAgICBzcGxpdHRlZCA9IGdfc3Ryc3BsaXQgKGF0dHJpYnV0ZV92YWx1ZXNbaV0s CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdfU0VBUkNIUEFU SF9TRVBBUkFUT1JfUywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgMTAwMCk7CisrICAgICAgICAgICAgICAgICAgICBpZiAoYXNzZW1ibHktPnJ1bnBhdGgpCisr ICAgICAgICAgICAgICAgICAgICAgICAgZ19zdHJmcmVldiAoYXNzZW1ibHktPnJ1bnBhdGgpOwor KyAgICAgICAgICAgICAgICAgICAgYXNzZW1ibHktPnJ1bnBhdGggPSBkZXN0ID0gc3BsaXR0ZWQ7 CisrICAgICAgICAgICAgICAgICAgICB3aGlsZSAoKnNwbGl0dGVkKSB7CisrICAgICAgICAgICAg ICAgICAgICAgICAgY2hhciAqdG1wID0gKnNwbGl0dGVkOworKyAgICAgICAgICAgICAgICAgICAg ICAgIGlmICgqdG1wKQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAqZGVzdCsrID0gbW9u b19wYXRoX2Nhbm9uaWNhbGl6ZSAodG1wKTsKKysgICAgICAgICAgICAgICAgICAgICAgICBnX2Zy ZWUgKHRtcCk7CisrICAgICAgICAgICAgICAgICAgICAgICAgc3BsaXR0ZWQrKzsKKysgICAgICAg ICAgICAgICAgICAgIH0KKysgICAgICAgICAgICAgICAgICAgICpkZXN0ID0gKnNwbGl0dGVkOwor KyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisrICAgICAgICAgICAgICAgIH0KKysgICAgICAg IH0KKyt9CisrCisrc3RhdGljIGNvbnN0IE1vbm9QYXJzZUhhbmRsZXIKKytydW5wYXRoX2hhbmRs ZXIgPSB7CisrICAgICJydW5wYXRoIiwKKysgICAgcnVucGF0aF9pbml0LAorKyAgICBydW5wYXRo X3N0YXJ0LAorKyAgICBOVUxMLCAvKiB0ZXh0ICovCisrICAgIE5VTEwsIC8qIGVuZCAqLworKyAg ICBOVUxMLCAvKiBmaW5pc2ggKi8KKyt9OworKworIHN0YXRpYyBpbnQgaW5pdGVkID0gMDsKKyAK KyBzdGF0aWMgdm9pZAorQEAgLTQ3Niw2ICs1MzAsNyBAQCBtb25vX2NvbmZpZ19pbml0ICh2b2lk KQorICNlbmRpZgorIAlnX2hhc2hfdGFibGVfaW5zZXJ0IChjb25maWdfaGFuZGxlcnMsIChncG9p bnRlcikgbGVnYWN5VUVQX2hhbmRsZXIuZWxlbWVudF9uYW1lLCAoZ3BvaW50ZXIpICZsZWdhY3lV RVBfaGFuZGxlcik7CisgCWdfaGFzaF90YWJsZV9pbnNlcnQgKGNvbmZpZ19oYW5kbGVycywgKGdw b2ludGVyKSBhb3RfY2FjaGVfaGFuZGxlci5lbGVtZW50X25hbWUsIChncG9pbnRlcikgJmFvdF9j YWNoZV9oYW5kbGVyKTsKKysgICAgICAgIGdfaGFzaF90YWJsZV9pbnNlcnQgKGNvbmZpZ19oYW5k bGVycywgKGdwb2ludGVyKSBydW5wYXRoX2hhbmRsZXIuZWxlbWVudF9uYW1lLCAoZ3BvaW50ZXIp ICZydW5wYXRoX2hhbmRsZXIpOworIH0KKyAKKyAvKioKZGlmZiAtLWdpdCBhL2dudS9wYWNrYWdl cy9wYXRjaGVzL21vbm8tNi4xMi4wLWZpeC1Bc3NlbWJseVJlc29sdmVyLnBhdGNoIGIvZ251L3Bh Y2thZ2VzL3BhdGNoZXMvbW9uby02LjEyLjAtZml4LUFzc2VtYmx5UmVzb2x2ZXIucGF0Y2gKbmV3 IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjA1ZGI3YjljZGQzCi0tLSAvZGV2 L251bGwKKysrIGIvZ251L3BhY2thZ2VzL3BhdGNoZXMvbW9uby02LjEyLjAtZml4LUFzc2VtYmx5 UmVzb2x2ZXIucGF0Y2gKQEAgLTAsMCArMSwyMzYgQEAKK2RpZmYgLS1naXQgYS9tY3MvY2xhc3Mv TWljcm9zb2Z0LkJ1aWxkLlRhc2tzL01pY3Jvc29mdC5CdWlsZC5UYXNrcy9Bc3NlbWJseVJlc29s dmVyLmNzIGIvbWNzL2NsYXNzL01pY3Jvc29mdC5CdWlsZC5UYXNrcy9NaWNyb3NvZnQuQnVpbGQu VGFza3MvQXNzZW1ibHlSZXNvbHZlci5jcworaW5kZXggNWUwZWM0ODA5NTYuLjlkYWY5ZDY5MjBi IDEwMDY0NAorLS0tIGEvbWNzL2NsYXNzL01pY3Jvc29mdC5CdWlsZC5UYXNrcy9NaWNyb3NvZnQu QnVpbGQuVGFza3MvQXNzZW1ibHlSZXNvbHZlci5jcworKysrIGIvbWNzL2NsYXNzL01pY3Jvc29m dC5CdWlsZC5UYXNrcy9NaWNyb3NvZnQuQnVpbGQuVGFza3MvQXNzZW1ibHlSZXNvbHZlci5jcwor QEAgLTY3LDU0ICs2Nyw1NiBAQCBwdWJsaWMgdm9pZCBSZXNldFNlYXJjaExvZ2dlciAoKQorIAkJ CQlzZWFyY2hfbG9nLkNsZWFyICgpOworIAkJfQorIAorLQkJc3RyaW5nIEdldEdhY1BhdGggKCkK KysJCXN0cmluZ1tdIEdldEdhY1BhdGhzICgpCisgCQl7CisgCQkJLy8gTk9URTogY29kZSBmcm9t IG1jcy90b29scy9nYWN1dGlsL2RyaXZlci5jcworLQkJCVByb3BlcnR5SW5mbyBnYWMgPSB0eXBl b2YgKFN5c3RlbS5FbnZpcm9ubWVudCkuR2V0UHJvcGVydHkgKCJHYWNQYXRoIiwgQmluZGluZ0Zs YWdzLlN0YXRpYyB8IEJpbmRpbmdGbGFncy5Ob25QdWJsaWMpOworKwkJCVByb3BlcnR5SW5mbyBn YWNzID0gdHlwZW9mIChTeXN0ZW0uRW52aXJvbm1lbnQpLkdldFByb3BlcnR5ICgiR2FjUGF0aHMi LCBCaW5kaW5nRmxhZ3MuU3RhdGljIHwgQmluZGluZ0ZsYWdzLk5vblB1YmxpYyk7CisgCistCQkJ aWYgKGdhYyA9PSBudWxsKQorKwkJCWlmIChnYWNzID09IG51bGwpCisgCQkJCXJldHVybiBudWxs OworIAorLQkJCU1ldGhvZEluZm8gZ2V0X2dhYyA9IGdhYy5HZXRHZXRNZXRob2QgKHRydWUpOwor LQkJCXJldHVybiAoc3RyaW5nKSBnZXRfZ2FjLkludm9rZSAobnVsbCwgbnVsbCk7CisrCQkJTWV0 aG9kSW5mbyBnZXRfZ2FjcyA9IGdhY3MuR2V0R2V0TWV0aG9kICh0cnVlKTsKKysJCQlyZXR1cm4g KHN0cmluZ1tdKSBnZXRfZ2Fjcy5JbnZva2UgKG51bGwsIG51bGwpOworIAkJfQorIAorIAkJdm9p ZCBHYXRoZXJHYWNBc3NlbWJsaWVzICgpCisgCQl7CistCQkJc3RyaW5nIGdhY19wYXRoID0gR2V0 R2FjUGF0aCAoKTsKKy0JCQlpZiAoZ2FjX3BhdGggPT0gbnVsbCkKKy0JCQkJdGhyb3cgbmV3IElu dmFsaWRPcGVyYXRpb25FeGNlcHRpb24gKCJYQnVpbGQgbXVzdCBiZSBydW4gb24gTW9ubyBydW50 aW1lIik7CistCQkJaWYgKCFEaXJlY3RvcnkuRXhpc3RzIChnYWNfcGF0aCkpCistCQkJCXJldHVy bjsgLy8gaW4gY2FzZSBtb25vIGlzbid0ICJpbnN0YWxsZWQiLgorLQorLQkJCVZlcnNpb24gdmVy c2lvbjsKKy0JCQlEaXJlY3RvcnlJbmZvIHZlcnNpb25faW5mbywgYXNzZW1ibHlfaW5mbzsKKy0K Ky0JCQlmb3JlYWNoIChzdHJpbmcgYXNzZW1ibHlfbmFtZSBpbiBEaXJlY3RvcnkuR2V0RGlyZWN0 b3JpZXMgKGdhY19wYXRoKSkgeworLQkJCQlhc3NlbWJseV9pbmZvID0gbmV3IERpcmVjdG9yeUlu Zm8gKGFzc2VtYmx5X25hbWUpOworLQkJCQlmb3JlYWNoIChzdHJpbmcgdmVyc2lvbl90b2tlbiBp biBEaXJlY3RvcnkuR2V0RGlyZWN0b3JpZXMgKGFzc2VtYmx5X25hbWUpKSB7CistCQkJCQlmb3Jl YWNoIChzdHJpbmcgZmlsZSBpbiBEaXJlY3RvcnkuR2V0RmlsZXMgKHZlcnNpb25fdG9rZW4sICIq LmRsbCIpKSB7CistCQkJCQkJdmVyc2lvbl9pbmZvID0gbmV3IERpcmVjdG9yeUluZm8gKHZlcnNp b25fdG9rZW4pOworLQkJCQkJCXZlcnNpb24gPSBuZXcgVmVyc2lvbiAodmVyc2lvbl9pbmZvLk5h bWUuU3BsaXQgKAorLQkJCQkJCQluZXcgY2hhciBbXSB7J18nfSwgU3RyaW5nU3BsaXRPcHRpb25z LlJlbW92ZUVtcHR5RW50cmllcykgWzBdKTsKKy0KKy0JCQkJCQlEaWN0aW9uYXJ5PFZlcnNpb24s IHN0cmluZz4gYXNzZW1ibGllc0J5VmVyc2lvbiA9IG5ldyBEaWN0aW9uYXJ5IDxWZXJzaW9uLCBz dHJpbmc+ICgpOworLQkJCQkJCWlmICghZ2FjLlRyeUdldFZhbHVlIChhc3NlbWJseV9pbmZvLk5h bWUsIG91dCBhc3NlbWJsaWVzQnlWZXJzaW9uKSkgeworLQkJCQkJCQlhc3NlbWJsaWVzQnlWZXJz aW9uID0gbmV3IERpY3Rpb25hcnkgPFZlcnNpb24sIHN0cmluZz4gKCk7CistCQkJCQkJCWdhYy5B ZGQgKGFzc2VtYmx5X2luZm8uTmFtZSwgYXNzZW1ibGllc0J5VmVyc2lvbik7CistCQkJCQkJfQor LQorLQkJCQkJCXN0cmluZyBmb3VuZF9maWxlOworLQkJCQkJCWlmIChhc3NlbWJsaWVzQnlWZXJz aW9uLlRyeUdldFZhbHVlICh2ZXJzaW9uLCBvdXQgZm91bmRfZmlsZSkgJiYKKy0JCQkJCQkJRmls ZS5HZXRMYXN0V3JpdGVUaW1lIChmaWxlKSA8PSBGaWxlLkdldExhc3RXcml0ZVRpbWUgKGZvdW5k X2ZpbGUpKQorLQkJCQkJCQkJLy8gRHVwbGljYXRlIGZvdW5kLCB0YWtlIHRoZSBuZXdlciBmaWxl CistCQkJCQkJCQljb250aW51ZTsKKy0KKy0JCQkJCQlhc3NlbWJsaWVzQnlWZXJzaW9uIFt2ZXJz aW9uXSA9IGZpbGU7CistCQkJCQl9CistCQkJCX0KKy0JCQl9CistCQl9CisrICAgICAgICAgICAg c3RyaW5nW10gZ2FjX3BhdGhzID0gR2V0R2FjUGF0aHMgKCk7CisrICAgICAgICAgICAgaWYgKGdh Y19wYXRocyA9PSBudWxsKQorKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZE9wZXJh dGlvbkV4Y2VwdGlvbiAoIlhCdWlsZCBtdXN0IGJlIHJ1biBvbiBNb25vIHJ1bnRpbWUiKTsKKysg ICAgICAgICAgICBpZiAoZ2FjX3BhdGhzLkxlbmd0aCA9PSAwIHx8ICFEaXJlY3RvcnkuRXhpc3Rz IChnYWNfcGF0aHNbMF0pKQorKyAgICAgICAgICAgICAgICByZXR1cm47IC8vIGluIGNhc2UgbW9u byBpc24ndCAiaW5zdGFsbGVkIi4KKysKKysgICAgICAgICAgICBWZXJzaW9uIHZlcnNpb247Cisr ICAgICAgICAgICAgRGlyZWN0b3J5SW5mbyB2ZXJzaW9uX2luZm8sIGFzc2VtYmx5X2luZm87Cisr CisrICAgICAgICAgICAgZm9yZWFjaCAoc3RyaW5nIGdhY19wYXRoIGluIGdhY19wYXRocykgewor KyAgICAgICAgICAgICAgICBmb3JlYWNoIChzdHJpbmcgYXNzZW1ibHlfbmFtZSBpbiBEaXJlY3Rv cnkuR2V0RGlyZWN0b3JpZXMgKGdhY19wYXRoKSkgeworKyAgICAgICAgICAgICAgICAgICAgYXNz ZW1ibHlfaW5mbyA9IG5ldyBEaXJlY3RvcnlJbmZvIChhc3NlbWJseV9uYW1lKTsKKysgICAgICAg ICAgICAgICAgICAgIGZvcmVhY2ggKHN0cmluZyB2ZXJzaW9uX3Rva2VuIGluIERpcmVjdG9yeS5H ZXREaXJlY3RvcmllcyAoYXNzZW1ibHlfbmFtZSkpIHsKKysgICAgICAgICAgICAgICAgICAgICAg ICBmb3JlYWNoIChzdHJpbmcgZmlsZSBpbiBEaXJlY3RvcnkuR2V0RmlsZXMgKHZlcnNpb25fdG9r ZW4sICIqLmRsbCIpKSB7CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlcnNpb25faW5m byA9IG5ldyBEaXJlY3RvcnlJbmZvICh2ZXJzaW9uX3Rva2VuKTsKKysgICAgICAgICAgICAgICAg ICAgICAgICAgICAgdmVyc2lvbiA9IG5ldyBWZXJzaW9uICh2ZXJzaW9uX2luZm8uTmFtZS5TcGxp dCAoCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIG5ldyBjaGFyIFtdIHsnXyd9LCBTdHJpbmdTcGxpdE9wdGlvbnMuUmVtb3ZlRW1wdHlFbnRy aWVzKSBbMF0pOworKworKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBEaWN0aW9uYXJ5PFZl cnNpb24sIHN0cmluZz4gYXNzZW1ibGllc0J5VmVyc2lvbiA9IG5ldyBEaWN0aW9uYXJ5IDxWZXJz aW9uLCBzdHJpbmc+ICgpOworKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWdhYy5U cnlHZXRWYWx1ZSAoYXNzZW1ibHlfaW5mby5OYW1lLCBvdXQgYXNzZW1ibGllc0J5VmVyc2lvbikp IHsKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VtYmxpZXNCeVZlcnNpb24g PSBuZXcgRGljdGlvbmFyeSA8VmVyc2lvbiwgc3RyaW5nPiAoKTsKKysgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGdhYy5BZGQgKGFzc2VtYmx5X2luZm8uTmFtZSwgYXNzZW1ibGllc0J5 VmVyc2lvbik7CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKysKKysgICAgICAgICAg ICAgICAgICAgICAgICAgICAgc3RyaW5nIGZvdW5kX2ZpbGU7CisrICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGlmIChhc3NlbWJsaWVzQnlWZXJzaW9uLlRyeUdldFZhbHVlICh2ZXJzaW9uLCBv dXQgZm91bmRfZmlsZSkgJiYKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpbGUu R2V0TGFzdFdyaXRlVGltZSAoZmlsZSkgPD0gRmlsZS5HZXRMYXN0V3JpdGVUaW1lIChmb3VuZF9m aWxlKSkKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIER1cGxpY2F0ZSBmb3Vu ZCwgdGFrZSB0aGUgbmV3ZXIgZmlsZQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Y29udGludWU7CisrCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VtYmxpZXNCeVZl cnNpb24gW3ZlcnNpb25dID0gZmlsZTsKKysgICAgICAgICAgICAgICAgICAgICAgICB9CisrICAg ICAgICAgICAgICAgICAgICB9CisrICAgICAgICAgICAgICAgIH0KKysgICAgICAgICAgICB9Cisr ICAgICAgICB9CisgCisgCQlwdWJsaWMgUmVzb2x2ZWRSZWZlcmVuY2UgRmluZEluVGFyZ2V0RnJh bWV3b3JrIChJVGFza0l0ZW0gcmVmZXJlbmNlLCBzdHJpbmcgZnJhbWV3b3JrX2RpciwgYm9vbCBz cGVjaWZpY192ZXJzaW9uKQorIAkJeworZGlmZiAtLWdpdCBhL21jcy9jbGFzcy9jb3JsaWIvU3lz dGVtL0Vudmlyb25tZW50LmNzIGIvbWNzL2NsYXNzL2NvcmxpYi9TeXN0ZW0vRW52aXJvbm1lbnQu Y3MKK2luZGV4IGZkOTM2YWIyMWE0Li5iNWE1Yzc3YzFhMyAxMDA2NDQKKy0tLSBhL21jcy9jbGFz cy9jb3JsaWIvU3lzdGVtL0Vudmlyb25tZW50LmNzCisrKysgYi9tY3MvY2xhc3MvY29ybGliL1N5 c3RlbS9FbnZpcm9ubWVudC5jcworQEAgLTk4NCw5ICs5ODQsMTggQEAgcHJpdmF0ZSBzdGF0aWMg c3RyaW5nIEdhY1BhdGggeworIAkJCQlyZXR1cm4gUGF0aC5Db21iaW5lIChQYXRoLkNvbWJpbmUg KGludGVybmFsR2V0R2FjUGF0aCAoKSwgIm1vbm8iKSwgImdhYyIpOworIAkJCX0KKyAJCX0KKysK KysgICAgICAgIHByaXZhdGUgc3RhdGljIHN0cmluZ1tdIEdhY1BhdGhzIHsKKysgICAgICAgICAg ICBnZXQgeworKyAgICAgICAgICAgICAgICByZXR1cm4gaW50ZXJuYWxHZXRHYWNQYXRocyAoKTsK KysgICAgICAgICAgICB9CisrICAgICAgICB9CisgI3ByYWdtYSB3YXJuaW5nIHJlc3RvcmUgMTY5 CisgCQlbTWV0aG9kSW1wbEF0dHJpYnV0ZSAoTWV0aG9kSW1wbE9wdGlvbnMuSW50ZXJuYWxDYWxs KV0KKyAJCWludGVybmFsIGV4dGVybiBzdGF0aWMgc3RyaW5nIGludGVybmFsR2V0R2FjUGF0aCAo KTsKKysKKysgICAgICAgIFtNZXRob2RJbXBsQXR0cmlidXRlIChNZXRob2RJbXBsT3B0aW9ucy5J bnRlcm5hbENhbGwpXQorKwkJaW50ZXJuYWwgZXh0ZXJuIHN0YXRpYyBzdHJpbmcgW10gaW50ZXJu YWxHZXRHYWNQYXRocyAoKTsKKyAjZW5kaWYKKyAJCVtNZXRob2RJbXBsQXR0cmlidXRlIChNZXRo b2RJbXBsT3B0aW9ucy5JbnRlcm5hbENhbGwpXQorIAkJaW50ZXJuYWwgZXh0ZXJuIHN0YXRpYyBz dHJpbmcgW10gR2V0TG9naWNhbERyaXZlc0ludGVybmFsICgpOworZGlmZiAtLWdpdCBhL21vbm8v bWV0YWRhdGEvYXNzZW1ibHkuYyBiL21vbm8vbWV0YWRhdGEvYXNzZW1ibHkuYworaW5kZXggOGM3 MWFkMGViOTUuLjc1OWQ1YWVmYmNmIDEwMDY0NAorLS0tIGEvbW9uby9tZXRhZGF0YS9hc3NlbWJs eS5jCisrKysgYi9tb25vL21ldGFkYXRhL2Fzc2VtYmx5LmMKK0BAIC04NTQsNiArODU0LDExIEBA IG1vbm9fYXNzZW1ibHlfZ2V0cm9vdGRpciAodm9pZCkKKyAJcmV0dXJuIGRlZmF1bHRfcGF0aCBb MF07CisgfQorIAorK2NoYXIgKiptb25vX2Fzc2VtYmx5X2dldF9leHRyYV9nYWNfcGF0aHMoKQor K3sKKysgICAgcmV0dXJuIGV4dHJhX2dhY19wYXRoczsKKyt9CisrCisgLyoqCisgICogbW9ub19u YXRpdmVfZ2V0cm9vdGRpcjoKKyAgKiAKK2RpZmYgLS1naXQgYS9tb25vL21ldGFkYXRhL2Fzc2Vt Ymx5LmggYi9tb25vL21ldGFkYXRhL2Fzc2VtYmx5LmgKK2luZGV4IGU5YzAyZWUyNmY1Li5lNWYw NjBlODIzOCAxMDA2NDQKKy0tLSBhL21vbm8vbWV0YWRhdGEvYXNzZW1ibHkuaAorKysrIGIvbW9u by9tZXRhZGF0YS9hc3NlbWJseS5oCitAQCAtNTAsNiArNTAsNyBAQCBNT05PX0FQSSBNT05PX1JU X0VYVEVSTkFMX09OTFkgTW9ub0ltYWdlKiAgICBtb25vX2Fzc2VtYmx5X2xvYWRfbW9kdWxlIChN b25vQXNzZQorIE1PTk9fQVBJIHZvaWQgICAgICAgICAgbW9ub19hc3NlbWJseV9jbG9zZSAgICAg IChNb25vQXNzZW1ibHkgKmFzc2VtYmx5KTsKKyBNT05PX0FQSSB2b2lkICAgICAgICAgIG1vbm9f YXNzZW1ibHlfc2V0cm9vdGRpciAoY29uc3QgY2hhciAqcm9vdF9kaXIpOworIE1PTk9fQVBJIE1P Tk9fQ09OU1RfUkVUVVJOIGNoYXIgKm1vbm9fYXNzZW1ibHlfZ2V0cm9vdGRpciAodm9pZCk7Cisr TU9OT19BUEkgY2hhciAqKm1vbm9fYXNzZW1ibHlfZ2V0X2V4dHJhX2dhY19wYXRocyAodm9pZCk7 CisgTU9OT19BUEkgY2hhciAgICAgICAgICptb25vX25hdGl2ZV9nZXRyb290ZGlyICh2b2lkKTsK KyBNT05PX0FQSSB2b2lkCSAgICAgICBtb25vX2Fzc2VtYmx5X2ZvcmVhY2ggICAgKE1vbm9GdW5j IGZ1bmMsIHZvaWQqIHVzZXJfZGF0YSk7CisgTU9OT19BUEkgdm9pZCAgICAgICAgICBtb25vX2Fz c2VtYmx5X3NldF9tYWluICAgKE1vbm9Bc3NlbWJseSAqYXNzZW1ibHkpOworZGlmZiAtLWdpdCBh L21vbm8vbWV0YWRhdGEvaWNhbGwtZGVjbC5oIGIvbW9uby9tZXRhZGF0YS9pY2FsbC1kZWNsLmgK K2luZGV4IGE3N2ZjZjM4NTk4Li4zZjBmMTc1OGVjMiAxMDA2NDQKKy0tLSBhL21vbm8vbWV0YWRh dGEvaWNhbGwtZGVjbC5oCisrKysgYi9tb25vL21ldGFkYXRhL2ljYWxsLWRlY2wuaAorQEAgLTE1 Miw2ICsxNTIsNyBAQCBJQ0FMTF9FWFBPUlQgZ2ludDMyIHZlc19pY2FsbF9TeXN0ZW1fRW52aXJv bm1lbnRfZ2V0X1RpY2tDb3VudCAodm9pZCk7CisgI2lmIEVOQUJMRV9ORVRDT1JFCisgSUNBTExf RVhQT1JUIGdpbnQ2NCB2ZXNfaWNhbGxfU3lzdGVtX0Vudmlyb25tZW50X2dldF9UaWNrQ291bnQ2 NCAodm9pZCk7CisgI2VuZGlmCisrSUNBTExfRVhQT1JUIE1vbm9BcnJheSAqdmVzX2ljYWxsX1N5 c3RlbV9FbnZpcm9ubWVudF9HZXRHYWNQYXRocyAodm9pZCk7CisgSUNBTExfRVhQT1JUIGdpbnQ2 NCB2ZXNfaWNhbGxfU3lzdGVtX0RhdGVUaW1lX0dldFN5c3RlbVRpbWVBc0ZpbGVUaW1lICh2b2lk KTsKKyBJQ0FMTF9FWFBPUlQgZ2ludDY0IHZlc19pY2FsbF9TeXN0ZW1fRGlhZ25vc3RpY3NfUHJv Y2Vzc19HZXRQcm9jZXNzRGF0YSAoaW50LCBnaW50MzIsIE1vbm9Qcm9jZXNzRXJyb3IqKTsKKyBJ Q0FMTF9FWFBPUlQgZ2ludDY0IHZlc19pY2FsbF9TeXN0ZW1fRGlhZ25vc3RpY3NfU3RvcHdhdGNo X0dldFRpbWVzdGFtcCAodm9pZCk7CitkaWZmIC0tZ2l0IGEvbW9uby9tZXRhZGF0YS9pY2FsbC1k ZWYuaCBiL21vbm8vbWV0YWRhdGEvaWNhbGwtZGVmLmgKK2luZGV4IDBhNDQ3Mjk2NzRiLi41OWM4 MDNiYTQ4OCAxMDA2NDQKKy0tLSBhL21vbm8vbWV0YWRhdGEvaWNhbGwtZGVmLmgKKysrKyBiL21v bm8vbWV0YWRhdGEvaWNhbGwtZGVmLmgKK0BAIC0zMjcsNiArMzI3LDcgQEAgSEFORExFUyhFTlZf MTZiLCAiZ2V0X2J1bmRsZWRfbWFjaGluZV9jb25maWciLCB2ZXNfaWNhbGxfU3lzdGVtX0Vudmly b25tZW50X2dldF8KKyBIQU5ETEVTKEVOVl8xNm0sICJpbnRlcm5hbEJyb2FkY2FzdFNldHRpbmdD aGFuZ2UiLCB2ZXNfaWNhbGxfU3lzdGVtX0Vudmlyb25tZW50X0Jyb2FkY2FzdFNldHRpbmdDaGFu Z2UsIHZvaWQsIDAsICgpKQorIEhBTkRMRVMoRU5WXzE3LCAiaW50ZXJuYWxHZXRFbnZpcm9ubWVu dFZhcmlhYmxlX25hdGl2ZSIsIHZlc19pY2FsbF9TeXN0ZW1fRW52aXJvbm1lbnRfR2V0RW52aXJv bm1lbnRWYXJpYWJsZV9uYXRpdmUsIE1vbm9TdHJpbmcsIDEsIChjb25zdF9jaGFyX3B0cikpCisg SEFORExFUyhFTlZfMTgsICJpbnRlcm5hbEdldEdhY1BhdGgiLCB2ZXNfaWNhbGxfU3lzdGVtX0Vu dmlyb25tZW50X0dldEdhY1BhdGgsIE1vbm9TdHJpbmcsIDAsICgpKQorK05PSEFORExFUyhJQ0FM TChFTlZfMThfMSwgImludGVybmFsR2V0R2FjUGF0aHMiLCB2ZXNfaWNhbGxfU3lzdGVtX0Vudmly b25tZW50X0dldEdhY1BhdGhzKSkKKyBIQU5ETEVTKEVOVl8xOSwgImludGVybmFsR2V0SG9tZSIs IHZlc19pY2FsbF9TeXN0ZW1fRW52aXJvbm1lbnRfSW50ZXJuYWxHZXRIb21lLCBNb25vU3RyaW5n LCAwLCAoKSkKKyBOT0hBTkRMRVMoSUNBTEwoRU5WXzIwLCAic2V0X0V4aXRDb2RlIiwgbW9ub19l bnZpcm9ubWVudF9leGl0Y29kZV9zZXQpKQorIElDQUxMX1RZUEUoR0MsICJTeXN0ZW0uR0MiLCBH Q18xMCkKK2RpZmYgLS1naXQgYS9tb25vL21ldGFkYXRhL2ljYWxsLmMgYi9tb25vL21ldGFkYXRh L2ljYWxsLmMKK2luZGV4IDZkMTZiOWMzNTQwLi4xZTU5MmMzMGUyNyAxMDA2NDQKKy0tLSBhL21v bm8vbWV0YWRhdGEvaWNhbGwuYworKysrIGIvbW9uby9tZXRhZGF0YS9pY2FsbC5jCitAQCAtNzc4 MSw2ICs3NzgxLDU2IEBAIHZlc19pY2FsbF9TeXN0ZW1fRW52aXJvbm1lbnRfR2V0R2FjUGF0aCAo TW9ub0Vycm9yICplcnJvcikKKyB9CisgI2VuZGlmCisgCisrSUNBTExfRVhQT1JUIE1vbm9BcnJh eSAqCisrdmVzX2ljYWxsX1N5c3RlbV9FbnZpcm9ubWVudF9HZXRHYWNQYXRocyAoKQorK3sKKysg ICAgY2hhciAqKmV4dHJhX2dhY19wYXRocyA9IG1vbm9fYXNzZW1ibHlfZ2V0X2V4dHJhX2dhY19w YXRocygpOworKyAgICBjb25zdCBjaGFyICpyb290ZGlyID0gbW9ub19hc3NlbWJseV9nZXRyb290 ZGlyICgpOworKyAgICBjaGFyICoqZTsKKysgICAgaW50IG47CisrICAgIE1vbm9Eb21haW4gKmRv bWFpbjsKKysgICAgTW9ub0FycmF5ICpvdXQ7CisrICAgIE1vbm9TdHJpbmcgKnN0cjsKKysgICAg Z2NoYXIgKnRtcDsKKysgICAgTW9ub0Vycm9yIGVycm9yOworKyAgICBuID0gMDsKKysgICAgaWYg KHJvb3RkaXIpIG4rKzsKKysgICAgaWYgKGV4dHJhX2dhY19wYXRocykgeworKyAgICAgICAgZm9y IChlID0gZXh0cmFfZ2FjX3BhdGhzOyAqZSAhPSAwOyBlKyspOworKyAgICAgICAgbiArPSAoZSAt IGV4dHJhX2dhY19wYXRocyk7CisrICAgIH0KKysKKysgICAgZG9tYWluID0gbW9ub19kb21haW5f Z2V0ICgpOworKyAgICBvdXQgPSBtb25vX2FycmF5X25ld19jaGVja2VkIChkb21haW4sIG1vbm9f ZGVmYXVsdHMuc3RyaW5nX2NsYXNzLCBuLCAmZXJyb3IpOworKworKyAgICBpZiAobW9ub19lcnJv cl9zZXRfcGVuZGluZ19leGNlcHRpb24gKCZlcnJvcikpCisrICAgICAgICByZXR1cm4gTlVMTDsK KysKKysgICAgbiA9IDA7CisrICAgIGlmIChyb290ZGlyKSB7CisrICAgICAgICB0bXAgPSBnX2J1 aWxkX3BhdGggKEdfRElSX1NFUEFSQVRPUl9TLCByb290ZGlyLCAibW9ubyIsICJnYWMiLCBOVUxM KTsKKysgICAgICAgIHN0ciA9IG1vbm9fc3RyaW5nX25ld19jaGVja2VkIChkb21haW4sIHRtcCwg JmVycm9yKTsKKysgICAgICAgIGdfZnJlZSAodG1wKTsKKysgICAgICAgIGlmIChtb25vX2Vycm9y X3NldF9wZW5kaW5nX2V4Y2VwdGlvbiAoJmVycm9yKSkKKysgICAgICAgICAgICByZXR1cm4gTlVM TDsKKysgICAgICAgIG1vbm9fYXJyYXlfc2V0cmVmX2ludGVybmFsIChvdXQsIG4sIHN0cik7Cisr ICAgICAgICBuKys7CisrICAgIH0KKysgICAgaWYgKGV4dHJhX2dhY19wYXRocykgeworKyAgICAg ICAgZm9yIChlID0gZXh0cmFfZ2FjX3BhdGhzOyAqZSAhPSAwOyBlKyspIHsKKysgICAgICAgICAg ICB0bXAgPSBnX2J1aWxkX3BhdGggKEdfRElSX1NFUEFSQVRPUl9TLCAqZSwgImxpYiIsICJtb25v IiwgImdhYyIsIE5VTEwpOworKyAgICAgICAgICAgIHN0ciA9IG1vbm9fc3RyaW5nX25ld19jaGVj a2VkIChkb21haW4sIHRtcCwgJmVycm9yKTsKKysgICAgICAgICAgICBnX2ZyZWUgKHRtcCk7Cisr ICAgICAgICAgICAgaWYgKG1vbm9fZXJyb3Jfc2V0X3BlbmRpbmdfZXhjZXB0aW9uICgmZXJyb3Ip KQorKyAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKysgICAgICAgICAgICBtb25vX2FycmF5 X3NldHJlZl9pbnRlcm5hbCAob3V0LCBuLCBzdHIpOworKyAgICAgICAgICAgIG4rKzsKKysgICAg ICAgIH0KKysgICAgfQorKworKyAgICByZXR1cm4gb3V0OworK30KKysKKyAjaWZuZGVmIEhPU1Rf V0lOMzIKKyBzdGF0aWMgaW5saW5lIE1vbm9TdHJpbmdIYW5kbGUKKyBtb25vX2ljYWxsX2dldF93 aW5kb3dzX2ZvbGRlcl9wYXRoIChpbnQgZm9sZGVyLCBNb25vRXJyb3IgKmVycm9yKQpkaWZmIC0t Z2l0IGEvZ251L3BhY2thZ2VzL3BhdGNoZXMvbW9uby02LjEyLjAtZml4LUNvbmRpdGlvblBhcnNl ci5wYXRjaCBiL2dudS9wYWNrYWdlcy9wYXRjaGVzL21vbm8tNi4xMi4wLWZpeC1Db25kaXRpb25Q YXJzZXIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjRlY2Rl MDdkNDI2Ci0tLSAvZGV2L251bGwKKysrIGIvZ251L3BhY2thZ2VzL3BhdGNoZXMvbW9uby02LjEy LjAtZml4LUNvbmRpdGlvblBhcnNlci5wYXRjaApAQCAtMCwwICsxLDQ2IEBACitkaWZmIC0tZ2l0 IGEvbWNzL2NsYXNzL01pY3Jvc29mdC5CdWlsZC5FbmdpbmUvTWljcm9zb2Z0LkJ1aWxkLkJ1aWxk RW5naW5lL0NvbmRpdGlvblBhcnNlci5jcyBiL21jcy9jbGFzcy9NaWNyb3NvZnQuQnVpbGQuRW5n aW5lL01pY3Jvc29mdC5CdWlsZC5CdWlsZEVuZ2luZS9Db25kaXRpb25QYXJzZXIuY3MKK2luZGV4 IGI1ZTJlODA5YWU0Li43NTc0OTJkMTVlNCAxMDA2NDQKKy0tLSBhL21jcy9jbGFzcy9NaWNyb3Nv ZnQuQnVpbGQuRW5naW5lL01pY3Jvc29mdC5CdWlsZC5CdWlsZEVuZ2luZS9Db25kaXRpb25QYXJz ZXIuY3MKKysrKyBiL21jcy9jbGFzcy9NaWNyb3NvZnQuQnVpbGQuRW5naW5lL01pY3Jvc29mdC5C dWlsZC5CdWlsZEVuZ2luZS9Db25kaXRpb25QYXJzZXIuY3MKK0BAIC0yMDUsMTkgKzIwNSwzMCBA QCBDb25kaXRpb25FeHByZXNzaW9uIFBhcnNlRnVuY3Rpb25FeHByZXNzaW9uIChzdHJpbmcgZnVu Y3Rpb25fbmFtZSkKKyAJCXsKKyAJCQlMaXN0IDxDb25kaXRpb25GYWN0b3JFeHByZXNzaW9uPiBs aXN0ID0gbmV3IExpc3QgPENvbmRpdGlvbkZhY3RvckV4cHJlc3Npb24+ICgpOworIAkJCUNvbmRp dGlvbkZhY3RvckV4cHJlc3Npb24gZTsKKy0JCQkKKysKKysgICAgICAgICAgICAvKiBzdGFydHMg bG9va2luZyBhdCB0aGUgb3BlbiBwYXJlbiwgbW92ZSBwYXN0IGl0ICovCisrICAgICAgICAgICAg dG9rZW5pemVyLkdldE5leHRUb2tlbiAoKTsKKysgICAgICAgICAgICBpZiAodG9rZW5pemVyLlRv a2VuLlR5cGUgPT0gVG9rZW5UeXBlLlJpZ2h0UGFyZW4pIHsKKysgICAgICAgICAgICAgICAgLyog bGVhdmUgdXMgbG9va2luZyBwYXN0IHRoZSBlbmQgb2YgdGhlIGFyZ3VtZW50IGxpc3QgKi8KKysg ICAgICAgICAgICAgICAgdG9rZW5pemVyLkdldE5leHRUb2tlbiAoKTsKKysgICAgICAgICAgICAg ICAgcmV0dXJuIGxpc3Q7CisrICAgICAgICAgICAgfQorIAkJCXdoaWxlICh0cnVlKSB7CistCQkJ CXRva2VuaXplci5HZXROZXh0VG9rZW4gKCk7CistCQkJCWlmICh0b2tlbml6ZXIuVG9rZW4uVHlw ZSA9PSBUb2tlblR5cGUuUmlnaHRQYXJlbikgeworLQkJCQkJdG9rZW5pemVyLkdldE5leHRUb2tl biAoKTsKKy0JCQkJCWJyZWFrOworLQkJCQl9CistCQkJCWlmICh0b2tlbml6ZXIuVG9rZW4uVHlw ZSA9PSBUb2tlblR5cGUuQ29tbWEpCisrICAgICAgICAgICAgICAgIGUgPSAoQ29uZGl0aW9uRmFj dG9yRXhwcmVzc2lvbikgUGFyc2VGYWN0b3JFeHByZXNzaW9uICgpOworKyAgICAgICAgICAgICAg ICBsaXN0LkFkZCAoZSk7CisrICAgICAgICAgICAgICAgIC8qIFBhcnNlRmFjdG9yRXhwcmVzc2lv biBsZWF2ZXMgdXMgbG9va2luZyBhdCB3aGF0IGZvbGxvd3MgdGhlCisrICAgICAgICAgICAgICAg ICAqIGV4cHJlc3Npb24gKi8KKysgICAgICAgICAgICAgICAgaWYgKHRva2VuaXplci5Ub2tlbi5U eXBlID09IFRva2VuVHlwZS5SaWdodFBhcmVuKSB7CisrICAgICAgICAgICAgICAgICAgICAvKiBs ZWF2ZSB1cyBsb29raW5nIHBhc3QgdGhlIGVuZCBvZiB0aGUgYXJndW1lbnQgbGlzdCAqLworKyAg ICAgICAgICAgICAgICAgICAgdG9rZW5pemVyLkdldE5leHRUb2tlbiAoKTsKKysgICAgICAgICAg ICAgICAgICAgIGJyZWFrOworKyAgICAgICAgICAgICAgICB9CisrICAgICAgICAgICAgICAgIGlm ICh0b2tlbml6ZXIuVG9rZW4uVHlwZSA9PSBUb2tlblR5cGUuQ29tbWEpIHsKKysgICAgICAgICAg ICAgICAgICAgIHRva2VuaXplci5HZXROZXh0VG9rZW4gKCk7CisgCQkJCQljb250aW51ZTsKKy0J CQkJCQorLQkJCQl0b2tlbml6ZXIuUHV0YmFjayAodG9rZW5pemVyLlRva2VuKTsKKy0JCQkJZSA9 IChDb25kaXRpb25GYWN0b3JFeHByZXNzaW9uKSBQYXJzZUZhY3RvckV4cHJlc3Npb24gKCk7Cist CQkJCWxpc3QuQWRkIChlKTsKKysgICAgICAgICAgICAgICAgfQorKworKyAgICAgICAgICAgICAg ICB0aHJvdyBuZXcgRXhwcmVzc2lvblBhcnNlRXhjZXB0aW9uIChTdHJpbmcuRm9ybWF0ICgiVW5l eHBlY3RlZCB0b2tlbiB7MH0gaW4gYXJndW1lbnQgbGlzdCB3aGlsZSBwYXJzaW5nIGNvbmRpdGlv biBcInsxfVwiIiwgdG9rZW5pemVyLlRva2VuLCBjb25kaXRpb25TdHIpKTsKKyAJCQl9CisgCQkJ CisgCQkJcmV0dXJuIGxpc3Q7Ci0tIAoyLjQ1LjIKCg== --b1=_tnCtFHx6yIKuYDXqbApeYGjbdIBbQ4owcmVz3FJkVmc Content-Type: text/x-patch; name=v2-0018-gnu-Add-mono-pre-5.10.0.patch Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=v2-0018-gnu-Add-mono-pre-5.10.0.patch RnJvbSA3Yjg4YjBhMmIyNDUwN2FhMjdkZWU1ZmZhYWZhZDVkY2Q1YzAxZGZkIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiB1bm11c2ggPHVubXVzaEBoYXNoYmFuZy5zaD4KRGF0ZTogV2Vk LCAyNyBOb3YgMjAyNCAwMDo1MjowNQpTdWJqZWN0OiBbUEFUQ0ggdjIgMTgvMjFdIGdudTogQWRk IG1vbm8tcHJlLTUuMTAuMC4KCiogZ251L3BhY2thZ2VzL2RvdG5ldC5zY20KICAobW9uby1wcmUt NS4xMC4wLWV4dGVybmFsLXJlcG8tc3BlY3MsIG1vbm8tcHJlLTUuMTAuMCk6IE5ldyB2YXJpYWJs ZXMuCiogZ251L3BhY2thZ2VzL3BhdGNoZXMvbW9uby1tY3MtcGF0Y2hlcy1mcm9tLTUuMTAuMC5w YXRjaDogTmV3IHBhdGNoLgoqIGdudS9sb2NhbC5tayAoZGlzdF9wYXRjaF9EQVRBKTogUmVnaXN0 ZXIgbmV3IHBhdGNoLgotLS0KIGdudS9sb2NhbC5tayAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICB8ICAgIDEgKwogZ251L3BhY2thZ2VzL2RvdG5ldC5zY20gICAgICAgICAgICAgICAg ICAgICAgIHwgICA3MyArCiAuLi4vbW9uby1tY3MtcGF0Y2hlcy1mcm9tLTUuMTAuMC5wYXRjaCAg ICAgICAgfCA0MjE4ICsrKysrKysrKysrKysrKysrCiAzIGZpbGVzIGNoYW5nZWQsIDQyOTIgaW5z ZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGdudS9wYWNrYWdlcy9wYXRjaGVzL21vbm8t bWNzLXBhdGNoZXMtZnJvbS01LjEwLjAucGF0Y2gKCmRpZmYgLS1naXQgYS9nbnUvbG9jYWwubWsg Yi9nbnUvbG9jYWwubWsKaW5kZXggNzEwZDZkMGE1NjguLmNiMDk0NTAyODQwIDEwMDY0NAotLS0g YS9nbnUvbG9jYWwubWsKKysrIGIvZ251L2xvY2FsLm1rCkBAIC0xODM0LDYgKzE4MzQsNyBAQCBk aXN0X3BhdGNoX0RBVEEgPQkJCQkJCVwKICAgJUQlL3BhY2thZ2VzL3BhdGNoZXMvbW9uby00Ljku MC1maXgtcnVudGltZW1ldGFkYXRhdmVyc2lvbi5wYXRjaAkJXAogICAlRCUvcGFja2FnZXMvcGF0 Y2hlcy9tb25vLTUuNC4wLXBhdGNoZXMucGF0Y2gJCVwKICAgJUQlL3BhY2thZ2VzL3BhdGNoZXMv bW9uby01LjguMC1wYXRjaGVzLnBhdGNoCQlcCisgICVEJS9wYWNrYWdlcy9wYXRjaGVzL21vbm8t bWNzLXBhdGNoZXMtZnJvbS01LjEwLjAucGF0Y2gJXAogICAlRCUvcGFja2FnZXMvcGF0Y2hlcy9t b3NhaWNhdGNoZXItdW5idW5kbGUtaHRzbGliLnBhdGNoCVwKICAgJUQlL3BhY2thZ2VzL3BhdGNo ZXMvbXJyZXNjdWUtc3VwcG9ydC1sb3ZlLTExLnBhdGNoCQlcCiAgICVEJS9wYWNrYWdlcy9wYXRj aGVzL210b29scy1tZm9ybWF0LXVuaW5pdGlhbGl6ZWQucGF0Y2gJXApkaWZmIC0tZ2l0IGEvZ251 L3BhY2thZ2VzL2RvdG5ldC5zY20gYi9nbnUvcGFja2FnZXMvZG90bmV0LnNjbQppbmRleCAwOGYx MDg2YTVjMC4uZmEwNTg5ZTYyZDggMTAwNjQ0Ci0tLSBhL2dudS9wYWNrYWdlcy9kb3RuZXQuc2Nt CisrKyBiL2dudS9wYWNrYWdlcy9kb3RuZXQuc2NtCkBAIC0xNDYwLDMgKzE0NjAsNzYgQEAgKGRl ZmluZS1wdWJsaWMgbW9uby01LjguMAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIiAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB0b3AgIi9tY3MvY2xhc3MvbGliL2J1aWxkL21jcy5leGUiKQogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAsQG1ha2UtZmxhZ3MpKSkpKSkpKSkpKSkKKworKGRlZmluZSBtb25vLXBy ZS01LjEwLjAtZXh0ZXJuYWwtcmVwby1zcGVjcworICAnKCgiYXBpLWRvYy10b29scyIgICAgICAg ICAgICAgICAiZDAzZTgxOTgzOGM2MjQxZjkyZjkwNjU1Y2I0NDhjYzQ3YzllODc5MSIKKyAgICAg IjFyaWtpNzlmM2lnM2N4aWd2aXNzODFkejYwMWhuOTJhMWdpZmdsbTBtempiczc2c2YzZmoiCisg ICAgICM6cmVjdXJzaXZlPyAjdCkKKyAgICAoImFwaS1zbmFwc2hvdCIgICAgICAgICAgICAgICAg IjYyNzMzM2NhZTg0ZjAyYTM2ZWU5Y2E2MDVjOTZkYWM0NTU3ZDlmMzUiCisgICAgICIwcDljNmJy eGl3eDM4eXZhZjU1amQwbDFteGZqM2I1YWgweGFzMmh2NmZya3o4MHlycWRsIikKKyAgICAoImFz cG5ldHdlYnN0YWNrIiAgICAgICAgICAgICAgImU3N2IxMmU2Y2M1ZWQyNjBhOTg0NDdmNjA5ZTg4 NzMzN2U0NGUyOTkiCisgICAgICIwcmtzMzQ0cXI0Zm1wM2ZzMTI2NGQycWttbTM0OG04ZDFramQ3 ejRsOTRpaWlyd24xZnExIikKKyAgICAoKCJyZWZlcmVuY2UtYXNzZW1ibGllcyIgImJpbmFyeS1y ZWZlcmVuY2UtYXNzZW1ibGllcyIpCisgICAgICI5YzVjYzdmMDUxYTBiYmEyZTQxMzQxYTViYWVi ZmM0ZDJjMjEzM2VmIgorICAgICAiMTRiZm4xcXZuaThneWZ4andtdnlreWpqeTNqNW5nNGZuYmxq ZGFkaTlkbTRiOWFsMHdnMSIpCisgICAgKCJib2NrYnVpbGQiICAgICAgICAgICAgICAgICAgICIy OTAyMmFmNWQ4YTk0NjUxYjJlZWNlOTNmOTEwNTU5YjI1NGVjM2YwIgorICAgICAiMGxjbGMxc21t cmo2eHczMmRsbDA3M214dzRkZGlpeHY5YXJ2MDJ5dzN3NWgxMzVheTd3NCIpCisgICAgKCJib3Jp bmdzc2wiICAgICAgICAgICAgICAgICAgICIzZTA3NzBlMTg4MzU3MTQ3MDg4NjBiYTlmZTFhZjA0 YTkzMjk3MWZmIgorICAgICAiMTM5YTBnbDkxYTUyazJyNm5hNmlhbHprcXlrYWoxcms4OHpqcmth ejNzZHh4N25tbWc2eSIpCisgICAgKCJjZWNpbCIgICAgICAgICAgICAgICAgICAgICAgICJiYzEx ZjQ3Mjk1NDY5NGViZDkyYWU0OTU2ZjExMGMxMDM2YTdjMmUwIgorICAgICAiMTIybm5wNXBjbncx OHBqNmFtbnFrcXhscm1hcGQ0dnk5eHM2NWhkMGJxeXFqaDU2YnduZCIpCisgICAgKCgiY2VjaWwi ICJjZWNpbC1sZWdhY3kiKSAgICAgICIzM2Q1MGI4NzRmZDUyNzExOGJjMzYxZDgzZGUzZDQ5NGU4 YmI1NWUxIgorICAgICAiMXA0aGwxNzk2aWIyNnlreWY1c25sNmNqMGx4MHY3bWpoMHhxaGp3NnFk aDc1M25zanloYiIpCisgICAgKCJjb3JlZngiICAgICAgICAgICAgICAgICAgICAgICJjYjFiMDQ5 Yzk1MjI3NDY1YzE3OTFiODU3Y2I1YmE4NjM4NWQ5ZjI5IgorICAgICAiMXByMHFqbGd4ZjYzenMx ZzgwZ3FkNngzcWhsZ2Iwd2xjYzh6bTh6OGFtNWF5d3J2Z2I1MyIpCisgICAgKCJjb3JlcnQiICAg ICAgICAgICAgICAgICAgICAgICI0OGRiYTczODAxZTgwNGU4OWYwMDMxMWRhOTlkODczZjljNTUw Mjc4IgorICAgICAiMXp3NDdqZjRjd3FtYWl4eWxpc3hpNzN4ZjZjYXA0MWJ3Zjl2bG1weGFuenhh cWtsenN2ayIpCisgICAgKCJpa2Rhc20iICAgICAgICAgICAgICAgICAgICAgICI0NjVjMDgxNTU1 OGZkNDNjMDExMGY4ZDAwZmMxODZhYzAwNDRhYzZhIgorICAgICAiMHhpcjdwY2dxMDRoYjdzOGc5 d3NxZHJ5cGI2bDI5cmFqM2l6NXJjcXpkbTAwNTZrNzV3MiIpCisgICAgKCgiaWt2bS1mb3JrIiAi aWt2bSIpICAgICAgICAgICI4NDdlMDVmY2VkNWM5YTQxZmYwZjI0ZjFmOWQ0MGQ1YThhNTc3MmMx IgorICAgICAiMWZsOWJtM2xtemY4aXF2M3g0aXFrejlmYzU0bXdkdnJ4aXN4ZzJudnd3Y3NpNHNh ZmZwaSIpCisgICAgKCJsaW5rZXIiICAgICAgICAgICAgICAgICAgICAgICI5OTM1NGJmNWMxM2I4 MDU1MjA5Y2IwODJjZGRjNTBjODA0N2FiMDg4IgorICAgICAiMDV6bGFqbnFmODN4ZnZuMndoaDlu cWw2ajg1c3ExMmF3MjZzcW15cXo3emNwbWwxNzFtaiIpCisgICAgKCJOZXd0b25zb2Z0Lkpzb24i ICAgICAgICAgICAgICI0NzFjM2UwODAzYTlmNDBhMGFjYzhhZWNlYjMxZGU2ZmY5M2E1MmM0Igor ICAgICAiMGRnbmdkNWhxazZ5aGxnNDBrYWJuNnFkbmtubTMyemN4OXE2Ym0ydzMxY3Nuc2s1OTc4 cyIpCisgICAgKCgiTnVHZXQuQnVpbGRUYXNrcyIgIm51Z2V0LWJ1aWxkdGFza3MiKQorICAgICAi YjU4YmE0MjgyMzc3YmNlZmQ0OGFiZGMyZDYyY2U2MzMwZTA3OWFiZSIKKyAgICAgIjFzYXkwM2Zu cWtqc3g5N3phY2FueTNzYTVqNG1oZms4Mjdoa3dwMjNpYjAycTE4ZjdsdnAiKQorICAgICgoIk5V bml0TGl0ZSIgIm51bml0LWxpdGUiKSAgICAiNzY0NjU2Y2RhZmRiM2FjZDI1ZGY4Y2I1MmE0ZTBl YTE0NzYwZmNjZCIKKyAgICAgIjBwYzdsazNwOTE2aXM4Y240bmdhcXZqbG1senYzdnZqcHlrc3k0 cHZiM3FiNWlpYXcwdnEiKQorICAgIDs7ICgicm9zbHluLWJpbmFyaWVzIiAgICAgICAgICAiMTkw NGM3ZDA2ODJhODc4ZTJkMjViNGQ0OWYzNDc1ZDEyZmJiOWNjNiIKKyAgICA7OyAgIiIpCisgICAg KCJyeCIgICAgICAgICAgICAgICAgICAgICAgICAgICJiMjlhNGIwZmRhNjA5ZTBhZjMzZmY1NGVk MTM2NTJiNmNjZjBlMDVlIgorICAgICAiMW4xandobXNia2N2MmQ4MDZpbW1jcHprYjcycnowNHh5 OThteXczNTVhOHc1YWgyNXlpdiIpCisgICAgOzsgKCJ4dW5pdC1iaW5hcmllcyIgICAgICAgICAg ICJkNDQzM2IwOTcyZjQwY2IzZWZhYTNmYmJhNTI4NjliZGU1ZGY4ZmE4IgorICAgIDs7ICAiIikK KyAgICApKQorCisoZGVmaW5lLXB1YmxpYyBtb25vLXByZS01LjEwLjAKKyAgKGxldCAoKGNvbW1p dCAiM2U5ZDdkNmU5Y2Y4ZGMzM2ViMjljNDk3YzM1MGExY2Q3ZGYzYTA1NyIpCisgICAgICAgICh2 ZXJzaW9uICI1LjguMC4xMjkiKQorICAgICAgICAocmV2aXNpb24gIjAiKSkKKyAgICAocGFja2Fn ZQorICAgICAgKGluaGVyaXQgbW9uby01LjguMCkKKyAgICAgICh2ZXJzaW9uIChnaXQtdmVyc2lv biB2ZXJzaW9uIHJldmlzaW9uIGNvbW1pdCkpCisgICAgICAobmFtZSAibW9ubyIpCisgICAgICAo c291cmNlIChvcmlnaW4KKyAgICAgICAgICAgICAgICAobWV0aG9kIGdpdC1mZXRjaCkKKyAgICAg ICAgICAgICAgICAodXJpCisgICAgICAgICAgICAgICAgIChnaXQtcmVmZXJlbmNlCisgICAgICAg ICAgICAgICAgICAodXJsICJodHRwczovL2dpdGxhYi53aW5laHEub3JnL21vbm8vbW9uby5naXQi KQorICAgICAgICAgICAgICAgICAgKGNvbW1pdCBjb21taXQpKSkKKyAgICAgICAgICAgICAgICAo ZmlsZS1uYW1lIChnaXQtZmlsZS1uYW1lIG5hbWUgdmVyc2lvbikpCisgICAgICAgICAgICAgICAg KHNoYTI1NgorICAgICAgICAgICAgICAgICAoYmFzZTMyCisgICAgICAgICAgICAgICAgICAiMG04 aTB6Z3poMGZnYjNzc3k5NXY5Y3prMWMwcmw3NnEwamo3ODM0czVmam5rZGo4bDRqYiIpKQorICAg ICAgICAgICAgICAgIChtb2R1bGVzICcoKGd1aXggYnVpbGQgdXRpbHMpCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAoaWNlLTkgc3RyaW5nLWZ1bikpKQorICAgICAgICAgICAgICAgIChzbmlw cGV0ICN+KGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMkKGFkZC1leHRlcm5h bC1yZXBvcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb25vLXByZS01LjEwLjAt ZXh0ZXJuYWwtcmVwby1zcGVjcykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyRAcHJl cGFyZS1tb25vLXNvdXJjZS0wKSkKKyAgICAgICAgICAgICAgICAocGF0Y2hlcworICAgICAgICAg ICAgICAgICAoc2VhcmNoLXBhdGNoZXMgIm1vbm8tbWNzLXBhdGNoZXMtZnJvbS01LjEwLjAucGF0 Y2giKSkpKQorICAgICAgKG5hdGl2ZS1pbnB1dHMgKG1vZGlmeS1pbnB1dHMgKHBhY2thZ2UtbmF0 aXZlLWlucHV0cyBtb25vLTUuOC4wKQorICAgICAgICAgICAgICAgICAgICAgICAocmVwbGFjZSAi bW9ubyIgbW9uby01LjguMCkpKSkpKQpkaWZmIC0tZ2l0IGEvZ251L3BhY2thZ2VzL3BhdGNoZXMv bW9uby1tY3MtcGF0Y2hlcy1mcm9tLTUuMTAuMC5wYXRjaCBiL2dudS9wYWNrYWdlcy9wYXRjaGVz L21vbm8tbWNzLXBhdGNoZXMtZnJvbS01LjEwLjAucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQK aW5kZXggMDAwMDAwMDAwMDAuLjQxZGZlZDdkZjdmCi0tLSAvZGV2L251bGwKKysrIGIvZ251L3Bh Y2thZ2VzL3BhdGNoZXMvbW9uby1tY3MtcGF0Y2hlcy1mcm9tLTUuMTAuMC5wYXRjaApAQCAtMCww ICsxLDQyMTggQEAKK0luY2x1ZGVzIHRoZSBmb2xsb3dpbmcgY29tbWl0czoKKzZmNWJmZTVjZjVh CiszODEyZDFjMTNmYworYTgwZjNkMGQ4N2MKK2IyZjA1MWYwYjE5CisyYTIwMmE4NDc4YgorNGQ3 ZDE2MDZkNzMKK2Q5OTcwMzA1NzMxCis5NGU4MGZjOGQ3ZgorMGI5MjgwMDgzYTkKKzA3ZDFlNWYz NmE1Cis1ZjI3OWYxNGFhMgorODg5NDIxZjNiZWYKK2Y0YzBmZDNkYzExCis3MWRmNWM2M2I0Ngor ZDZlNWJmMTY3ODIKKzIwN2Y1YzJjZDZkCitjNTEyNzUyYTQxNgorOWFjYThkNWZlNGIKK2RpZmYg LS1naXQgYS9tY3MvY2xhc3MvTW9uby5DU2hhcnAvVGVzdC9FdmFsdWF0b3IvVHlwZXNUZXN0LmNz IGIvbWNzL2NsYXNzL01vbm8uQ1NoYXJwL1Rlc3QvRXZhbHVhdG9yL1R5cGVzVGVzdC5jcworaW5k ZXggOTdmOWUwNDdlNmQuLmY4YmY2MzQ1NWRlIDEwMDY0NAorLS0tIGEvbWNzL2NsYXNzL01vbm8u Q1NoYXJwL1Rlc3QvRXZhbHVhdG9yL1R5cGVzVGVzdC5jcworKysrIGIvbWNzL2NsYXNzL01vbm8u Q1NoYXJwL1Rlc3QvRXZhbHVhdG9yL1R5cGVzVGVzdC5jcworQEAgLTEzMSw1ICsxMzEsMTcgQEAg bmFtZXNwYWNlIE1vbm9UZXN0cy5FdmFsdWF0b3JUZXN0CisgCQl7CisgCQkJRXZhbHVhdG9yLlJ1 biAoInB1YmxpYyBjbGFzcyBUZXN0Q2xhc3MgeyBwcml2YXRlIFRlc3RFbnVtIF90ZTsgcHVibGlj IHN0cmluZyBHZXQoKSB7IHJldHVybiBfdGUuVG9TdHJpbmcoKTsgfSB9IHB1YmxpYyBlbnVtIFRl c3RFbnVtIHsgRmlyc3QsIFNlY29uZCB9Iik7CisgCQl9CisrCisrCQlbVGVzdF0KKysJCXB1Ymxp YyB2b2lkIEVudW1UeXBlV2l0aE9yZGVyRGVwZW5kZW5jeSAoKQorKwkJeworKwkJCUV2YWx1YXRv ci5SdW4gKCJwdWJsaWMgY2xhc3MgVGVzdENsYXNzIHsgcHVibGljIGVudW0gVGVzdEVudW0geyBW YWwxLCBWYWwyLCBWYWwzIH0gcHVibGljIFRlc3RFbnVtIHRlc3Q7IHB1YmxpYyBUZXN0Q2xhc3Mo KSB7IHRlc3QgPSBUZXN0RW51bS5WYWwzOyB9IH0iKTsKKysJCQlvYmplY3QgcmVzID0gRXZhbHVh dG9yLkV2YWx1YXRlICgibmV3IFRlc3RDbGFzcygpIik7CisrCisrCQkJdmFyIGZpZWxkcyA9IHJl cy5HZXRUeXBlICgpLkdldEZpZWxkcyAoKTsKKysJCQlmb3JlYWNoICh2YXIgZmllbGQgaW4gZmll bGRzKSB7CisrCQkJCUNvbnNvbGUuV3JpdGVMaW5lICgkIntmaWVsZC5OYW1lfSA9IHtmaWVsZC5N ZW1iZXJUeXBlfSIpOworKwkJCX0KKysJCX0KKyAJfQorIH0KK1wgTm8gbmV3bGluZSBhdCBlbmQg b2YgZmlsZQorZGlmZiAtLWdpdCBhL21jcy9lcnJvcnMvY3MwMDIzLTMwLmNzIGIvbWNzL2Vycm9y cy9jczAwMjMtMzAuY3MKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwMDAwMC4u ZmMxOWNjMjRlM2UKKy0tLSAvZGV2L251bGwKKysrKyBiL21jcy9lcnJvcnMvY3MwMDIzLTMwLmNz CitAQCAtMCwwICsxLDExIEBACisrLy8gQ1MwMDIzOiBUaGUgYGlzJyBvcGVyYXRvciBjYW5ub3Qg YmUgYXBwbGllZCB0byBvcGVyYW5kIG9mIHR5cGUgYGRlZmF1bHQnCisrLy8gTGluZTogOQorKy8v IENvbXBpbGVyIG9wdGlvbnM6IC1sYW5ndmVyc2lvbjpsYXRlc3QKKysKKytjbGFzcyBDCisrewor KwlzdGF0aWMgdm9pZCBNYWluICgpCisrCXsKKysJCWJvb2wgZCA9IGRlZmF1bHQgaXMgQzsKKysJ fQorK30KK1wgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorZGlmZiAtLWdpdCBhL21jcy9lcnJv cnMvY3MwMDI5LTM5LmNzIGIvbWNzL2Vycm9ycy9jczAwMjktMzkuY3MKK25ldyBmaWxlIG1vZGUg MTAwNjQ0CitpbmRleCAwMDAwMDAwMDAwMC4uMGVkMjAwMDM2ZGMKKy0tLSAvZGV2L251bGwKKysr KyBiL21jcy9lcnJvcnMvY3MwMDI5LTM5LmNzCitAQCAtMCwwICsxLDE1IEBACisrLy8gQ1MwMDI5 OiBDYW5ub3QgaW1wbGljaXRseSBjb252ZXJ0IHR5cGUgYFMnIHRvIGBvYmplY3QnCisrLy8gTGlu ZTogMTMKKysvLyBDb21waWxlciBvcHRpb25zOiAtbGFuZ3ZlcnNpb246bGF0ZXN0CisrCisrcHVi bGljIHJlZiBzdHJ1Y3QgUworK3sKKyt9CisrCisrY2xhc3MgVGVzdAorK3sKKysJcHVibGljIHN0 YXRpYyB2b2lkIE1haW4gKCkKKysJeworKwkJb2JqZWN0IG8gPSBuZXcgUyAoKTsKKysJfQorK30K K1wgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorZGlmZiAtLWdpdCBhL21jcy9lcnJvcnMvY3Mw MDI5LTQwLmNzIGIvbWNzL2Vycm9ycy9jczAwMjktNDAuY3MKK25ldyBmaWxlIG1vZGUgMTAwNjQ0 CitpbmRleCAwMDAwMDAwMDAwMC4uNmQ5MTY3YzMxZmEKKy0tLSAvZGV2L251bGwKKysrKyBiL21j cy9lcnJvcnMvY3MwMDI5LTQwLmNzCitAQCAtMCwwICsxLDE5IEBACisrLy8gQ1MwMDI5OiBDYW5u b3QgaW1wbGljaXRseSBjb252ZXJ0IHR5cGUgYFMnIHRvIGBTeXN0ZW0uVmFsdWVUeXBlJworKy8v IExpbmU6IDE2CisrLy8gQ29tcGlsZXIgb3B0aW9uczogLWxhbmd2ZXJzaW9uOmxhdGVzdAorKwor K3VzaW5nIFN5c3RlbTsKKysKKytwdWJsaWMgcmVmIHN0cnVjdCBTCisreworK30KKysKKytjbGFz cyBUZXN0CisreworKwlwdWJsaWMgc3RhdGljIHZvaWQgTWFpbiAoKQorKwl7CisrCQl2YXIgcyA9 IGRlZmF1bHQgKFMpOworKwkJVmFsdWVUeXBlIHMyID0gczsKKysJCXZhciByZXMgPSBkZWZhdWx0 IChTKS5Ub1N0cmluZyAoKTsKKysJfQorK30KK1wgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQor ZGlmZiAtLWdpdCBhL21jcy9lcnJvcnMvY3MwMDI5LTQxLmNzIGIvbWNzL2Vycm9ycy9jczAwMjkt NDEuY3MKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwMDAwMC4uMWE2NWY1MmY3 MzcKKy0tLSAvZGV2L251bGwKKysrKyBiL21jcy9lcnJvcnMvY3MwMDI5LTQxLmNzCitAQCAtMCww ICsxLDEyIEBACisrLy8gQ1MwMDI5OiBDYW5ub3QgaW1wbGljaXRseSBjb252ZXJ0IHR5cGUgYFN5 c3RlbS5UeXBlZFJlZmVyZW5jZScgdG8gYG9iamVjdCcKKysvLyBMaW5lOiAxMAorKworK3VzaW5n IFN5c3RlbTsKKysKKytjbGFzcyBUZXN0CisreworKwlwdWJsaWMgc3RhdGljIHZvaWQgTWFpbiAo KQorKwl7CisrCQl2YXIgcmVzID0gZGVmYXVsdCAoVHlwZWRSZWZlcmVuY2UpLlRvU3RyaW5nICgp OworKwl9CisrfQorXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCitkaWZmIC0tZ2l0IGEvbWNz L2Vycm9ycy9jczAwMjktNDIuY3MgYi9tY3MvZXJyb3JzL2NzMDAyOS00Mi5jcworbmV3IGZpbGUg bW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAwMDAwLi5jNzY3MTAwMGM3NgorLS0tIC9kZXYvbnVs bAorKysrIGIvbWNzL2Vycm9ycy9jczAwMjktNDIuY3MKK0BAIC0wLDAgKzEsMTAgQEAKKysvLyBD UzAwMjk6IENhbm5vdCBpbXBsaWNpdGx5IGNvbnZlcnQgdHlwZSBgc3RyaW5nJyB0byBgaW50Jwor Ky8vIExpbmU6IDgKKysKKytjbGFzcyBDCisreworKwl2b2lkIEV4aXN0cyAoaW50IF8pCisrCXsK KysJCV8gPSAiMiI7CisrCX0JCisrfQorXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCitkaWZm IC0tZ2l0IGEvbWNzL2Vycm9ycy9jczAwMzAtMTcuY3MgYi9tY3MvZXJyb3JzL2NzMDAzMC0xNy5j cworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAwMDAwLi5iNzJiOGJmNzFlNQor LS0tIC9kZXYvbnVsbAorKysrIGIvbWNzL2Vycm9ycy9jczAwMzAtMTcuY3MKK0BAIC0wLDAgKzEs MTUgQEAKKysvLyBDUzAwMzA6IENhbm5vdCBjb252ZXJ0IHR5cGUgYG9iamVjdCcgdG8gYFMnCisr Ly8gTGluZTogMTMKKysvLyBDb21waWxlciBvcHRpb25zOiAtbGFuZ3ZlcnNpb246bGF0ZXN0Cisr CisrcmVmIHN0cnVjdCBTCisreworK30KKysKKytjbGFzcyBYCisreworKwlwdWJsaWMgc3RhdGlj IHZvaWQgRm9vIChvYmplY3QgbykKKysJeworKwkJdmFyIHJlcyA9IChTKSBvOworKwl9CisrfQor XCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCitkaWZmIC0tZ2l0IGEvbWNzL2Vycm9ycy9jczAx MDMtMTguY3MgYi9tY3MvZXJyb3JzL2NzMDEwMy0xOC5jcworbmV3IGZpbGUgbW9kZSAxMDA2NDQK K2luZGV4IDAwMDAwMDAwMDAwLi44Y2VjNzU1ZDIzZAorLS0tIC9kZXYvbnVsbAorKysrIGIvbWNz L2Vycm9ycy9jczAxMDMtMTguY3MKK0BAIC0wLDAgKzEsMTAgQEAKKysvLyBDUzAxMDM6IFRoZSBu YW1lIGBfJyBkb2VzIG5vdCBleGlzdCBpbiB0aGUgY3VycmVudCBjb250ZXh0CisrLy8gTGluZTog OAorKworK2NsYXNzIEMKKyt7CisrCXZvaWQgVGVzdCAoKQorKwl7CisrCQlfLlRvU3RyaW5nICgp OworKwl9CisrfQorXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCitkaWZmIC0tZ2l0IGEvbWNz L2Vycm9ycy9jczAxMjMtMTAuY3MgYi9tY3MvZXJyb3JzL2NzMDEyMy0xMC5jcworbmV3IGZpbGUg bW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAwMDAwLi40M2Q1ZTVkNjM2OAorLS0tIC9kZXYvbnVs bAorKysrIGIvbWNzL2Vycm9ycy9jczAxMjMtMTAuY3MKK0BAIC0wLDAgKzEsMTggQEAKKysvLyBD UzAxMjM6IEEgbWV0aG9kIG9yIGRlbGVnYXRlIGBvYmplY3QuVG9TdHJpbmcoKScgcGFyYW1ldGVy cyBkbyBub3QgbWF0Y2ggZGVsZWdhdGUgYFN5c3RlbS5GdW5jPHN0cmluZz4oKScgcGFyYW1ldGVy cworKy8vIExpbmU6IDE2CisrLy8gQ29tcGlsZXIgb3B0aW9uczogLWxhbmd2ZXJzaW9uOmxhdGVz dAorKworK3VzaW5nIFN5c3RlbTsKKysKKytwdWJsaWMgcmVmIHN0cnVjdCBTCisreworK30KKysK KytjbGFzcyBUZXN0CisreworKwlwdWJsaWMgc3RhdGljIHZvaWQgTWFpbiAoKQorKwl7CisrCQl2 YXIgcyA9IG5ldyBTICgpOworKwkJRnVuYzxzdHJpbmc+IGYgPSBzLlRvU3RyaW5nOworKwl9Cisr fQorXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCitkaWZmIC0tZ2l0IGEvbWNzL2Vycm9ycy9j czAxMjMtMTEuY3MgYi9tY3MvZXJyb3JzL2NzMDEyMy0xMS5jcworbmV3IGZpbGUgbW9kZSAxMDA2 NDQKK2luZGV4IDAwMDAwMDAwMDAwLi40MjdiNjI4YzE1OQorLS0tIC9kZXYvbnVsbAorKysrIGIv bWNzL2Vycm9ycy9jczAxMjMtMTEuY3MKK0BAIC0wLDAgKzEsMTIgQEAKKysvLyBDUzAxMjM6IEEg bWV0aG9kIG9yIGRlbGVnYXRlIGBvYmplY3QuVG9TdHJpbmcoKScgcGFyYW1ldGVycyBkbyBub3Qg bWF0Y2ggZGVsZWdhdGUgYFN5c3RlbS5GdW5jPHN0cmluZz4oKScgcGFyYW1ldGVycworKy8vIExp bmU6IDE2CisrCisrdXNpbmcgU3lzdGVtOworKworK2NsYXNzIFRlc3QKKyt7CisrCXB1YmxpYyBz dGF0aWMgdm9pZCBNYWluICgpCisrCXsKKysJCUZ1bmM8c3RyaW5nPiBmID0gZGVmYXVsdCAoVHlw ZWRSZWZlcmVuY2UpLlRvU3RyaW5nOworKwl9CisrfQorXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBm aWxlCitkaWZmIC0tZ2l0IGEvbWNzL2Vycm9ycy9jczAxMzMtMi5jcyBiL21jcy9lcnJvcnMvY3Mw MTMzLTIuY3MKK2luZGV4IGI3YTM3MTgyZDczLi40ODQ4ODg3NmY3ZSAxMDA2NDQKKy0tLSBhL21j cy9lcnJvcnMvY3MwMTMzLTIuY3MKKysrKyBiL21jcy9lcnJvcnMvY3MwMTMzLTIuY3MKK0BAIC0x LDQgKzEsNCBAQAorLS8vIENTMDEzMzogVGhlIGV4cHJlc3Npb24gYmVpbmcgYXNzaWduZWQgdG8g YGMnIG11c3QgYmUgY29uc3RhbnQKKysvLyBDUzAxMzM6IFRoZSBleHByZXNzaW9uIGJlaW5nIGFz c2lnbmVkIHRvIGBjJyBtdXN0IGJlIGEgY29uc3RhbnQgb3IgZGVmYXVsdCB2YWx1ZQorIC8vIExp bmU6IDEwCisgCisgY2xhc3MgQworZGlmZiAtLWdpdCBhL21jcy9lcnJvcnMvY3MwMTMzLTMuY3Mg Yi9tY3MvZXJyb3JzL2NzMDEzMy0zLmNzCitpbmRleCBjYWFlM2JkZTY4Yy4uMmY3ZGFjNjg4MGQg MTAwNjQ0CistLS0gYS9tY3MvZXJyb3JzL2NzMDEzMy0zLmNzCisrKysgYi9tY3MvZXJyb3JzL2Nz MDEzMy0zLmNzCitAQCAtMSw1ICsxLDUgQEAKKy0vLyBDUzAxMzM6IFRoZSBleHByZXNzaW9uIGJl aW5nIGFzc2lnbmVkIHRvIGBGb28nIG11c3QgYmUgY29uc3RhbnQKKy0vLyBMaW5lOiAxMgorKy8v IENTMDEzMzogVGhlIGV4cHJlc3Npb24gYmVpbmcgYXNzaWduZWQgdG8gYEZvbycgbXVzdCBiZSBh IGNvbnN0YW50IG9yIGRlZmF1bHQgdmFsdWUKKysvLyBMaW5lOiA4CisgCisgY2xhc3MgVAorIHsK K2RpZmYgLS1naXQgYS9tY3MvZXJyb3JzL2NzMDEzMy00LmNzIGIvbWNzL2Vycm9ycy9jczAxMzMt NC5jcworaW5kZXggNDFmZTYzOWI0NDYuLjU0MTYyZDU0NGNhIDEwMDY0NAorLS0tIGEvbWNzL2Vy cm9ycy9jczAxMzMtNC5jcworKysrIGIvbWNzL2Vycm9ycy9jczAxMzMtNC5jcworQEAgLTEsNCAr MSw0IEBACistLy8gQ1MwMTMzOiBUaGUgZXhwcmVzc2lvbiBiZWluZyBhc3NpZ25lZCB0byBgUy5w YXRoTmFtZScgbXVzdCBiZSBjb25zdGFudAorKy8vIENTMDEzMzogVGhlIGV4cHJlc3Npb24gYmVp bmcgYXNzaWduZWQgdG8gYFMucGF0aE5hbWUnIG11c3QgYmUgYSBjb25zdGFudCBvciBkZWZhdWx0 IHZhbHVlCisgLy8gTGluZTogMTIKKyAvLyBDb21waWxlciBvcHRpb25zOiAtdW5zYWZlCisgCitk aWZmIC0tZ2l0IGEvbWNzL2Vycm9ycy9jczAxMzMtNS5jcyBiL21jcy9lcnJvcnMvY3MwMTMzLTUu Y3MKK2luZGV4IGE0OWYyNjVjNjkwLi4zMmU2YmZkZjQxNiAxMDA2NDQKKy0tLSBhL21jcy9lcnJv cnMvY3MwMTMzLTUuY3MKKysrKyBiL21jcy9lcnJvcnMvY3MwMTMzLTUuY3MKK0BAIC0xLDQgKzEs NCBAQAorLS8vIENTMDEzMzogVGhlIGV4cHJlc3Npb24gYmVpbmcgYXNzaWduZWQgdG8gYGInIG11 c3QgYmUgY29uc3RhbnQKKysvLyBDUzAxMzM6IFRoZSBleHByZXNzaW9uIGJlaW5nIGFzc2lnbmVk IHRvIGBiJyBtdXN0IGJlIGEgY29uc3RhbnQgb3IgZGVmYXVsdCB2YWx1ZQorIC8vIExpbmU6IDgK KyAKKyBjbGFzcyBYCitkaWZmIC0tZ2l0IGEvbWNzL2Vycm9ycy9jczAxMzMtNi5jcyBiL21jcy9l cnJvcnMvY3MwMTMzLTYuY3MKK2luZGV4IGE1MjMxNjljZGJkLi4yODQ0OGRkNmRlOCAxMDA2NDQK Ky0tLSBhL21jcy9lcnJvcnMvY3MwMTMzLTYuY3MKKysrKyBiL21jcy9lcnJvcnMvY3MwMTMzLTYu Y3MKK0BAIC0xLDQgKzEsNCBAQAorLS8vIENTMDEzMzogVGhlIGV4cHJlc3Npb24gYmVpbmcgYXNz aWduZWQgdG8gYG8nIG11c3QgYmUgY29uc3RhbnQKKysvLyBDUzAxMzM6IFRoZSBleHByZXNzaW9u IGJlaW5nIGFzc2lnbmVkIHRvIGBvJyBtdXN0IGJlIGEgY29uc3RhbnQgb3IgZGVmYXVsdCB2YWx1 ZQorIC8vIExpbmU6IDgKKyAKKyBjbGFzcyBYCitkaWZmIC0tZ2l0IGEvbWNzL2Vycm9ycy9jczAx MzMtNy5jcyBiL21jcy9lcnJvcnMvY3MwMTMzLTcuY3MKK2luZGV4IDEwZDgyZDlmZTVlLi4wMjRi YzE0ODIyOSAxMDA2NDQKKy0tLSBhL21jcy9lcnJvcnMvY3MwMTMzLTcuY3MKKysrKyBiL21jcy9l cnJvcnMvY3MwMTMzLTcuY3MKK0BAIC0xLDQgKzEsNCBAQAorLS8vIENTMDEzMzogVGhlIGV4cHJl c3Npb24gYmVpbmcgYXNzaWduZWQgdG8gYG8nIG11c3QgYmUgY29uc3RhbnQKKysvLyBDUzAxMzM6 IFRoZSBleHByZXNzaW9uIGJlaW5nIGFzc2lnbmVkIHRvIGBvJyBtdXN0IGJlIGEgY29uc3RhbnQg b3IgZGVmYXVsdCB2YWx1ZQorIC8vIExpbmU6IDgKKyAKKyBjbGFzcyBYCitkaWZmIC0tZ2l0IGEv bWNzL2Vycm9ycy9jczAxMzMuY3MgYi9tY3MvZXJyb3JzL2NzMDEzMy5jcworaW5kZXggMDk0MTk0 ZGVhYmIuLmYwZGRhOWVlM2NiIDEwMDY0NAorLS0tIGEvbWNzL2Vycm9ycy9jczAxMzMuY3MKKysr KyBiL21jcy9lcnJvcnMvY3MwMTMzLmNzCitAQCAtMSw1ICsxLDYgQEAKKy0vLyBDUzAxMzM6IFRo ZSBleHByZXNzaW9uIGJlaW5nIGFzc2lnbmVkIHRvIGB4JyBtdXN0IGJlIGNvbnN0YW50CistLy8g TGluZTogNgorKy8vIENTMDEzMzogVGhlIGV4cHJlc3Npb24gYmVpbmcgYXNzaWduZWQgdG8gYHgn IG11c3QgYmUgYSBjb25zdGFudCBvciBkZWZhdWx0IHZhbHVlCisrLy8gTGluZTogNworKworIGNs YXNzIFggeworIAlYIChpbnQgYXJnKQorIAl7CitkaWZmIC0tZ2l0IGEvbWNzL2Vycm9ycy9jczAz MDYtNC5jcyBiL21jcy9lcnJvcnMvY3MwMzA2LTQuY3MKK25ldyBmaWxlIG1vZGUgMTAwNjQ0Citp bmRleCAwMDAwMDAwMDAwMC4uNDY1MzUxMmU1NWIKKy0tLSAvZGV2L251bGwKKysrKyBiL21jcy9l cnJvcnMvY3MwMzA2LTQuY3MKK0BAIC0wLDAgKzEsMTUgQEAKKysvLyBDUzAzMDY6IFRoZSB0eXBl IGBTJyBtYXkgbm90IGJlIHVzZWQgYXMgYSB0eXBlIGFyZ3VtZW50CisrLy8gTGluZTogMTMKKysv LyBDb21waWxlciBvcHRpb25zOiAtbGFuZ3ZlcnNpb246bGF0ZXN0CisrCisrcHVibGljIHJlZiBz dHJ1Y3QgUworK3sKKyt9CisrCisrY2xhc3MgVGVzdDxUPgorK3sKKysJcHVibGljIHN0YXRpYyB2 b2lkIEZvbyAoKQorKwl7CisrCQlUZXN0PFM+IGxvY2FsOworKwl9CisrfQorXCBObyBuZXdsaW5l IGF0IGVuZCBvZiBmaWxlCitkaWZmIC0tZ2l0IGEvbWNzL2Vycm9ycy9jczA2MTEtMy5jcyBiL21j cy9lcnJvcnMvY3MwNjExLTMuY3MKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAw MDAwMC4uNmVkYTc3M2RkMjQKKy0tLSAvZGV2L251bGwKKysrKyBiL21jcy9lcnJvcnMvY3MwNjEx LTMuY3MKK0BAIC0wLDAgKzEsMTUgQEAKKysvLyBDUzA2MTE6IEFycmF5IGVsZW1lbnRzIGNhbm5v dCBiZSBvZiB0eXBlIGBTJworKy8vIExpbmU6IDEzCisrLy8gQ29tcGlsZXIgb3B0aW9uczogLWxh bmd2ZXJzaW9uOmxhdGVzdAorKworK3B1YmxpYyByZWYgc3RydWN0IFMKKyt7CisrfQorKworK2Ns YXNzIFRlc3QKKyt7CisrCXB1YmxpYyBzdGF0aWMgdm9pZCBNYWluICgpCisrCXsKKysJCXZhciB4 ID0gbmV3IFNbMF07CisrCX0KKyt9CitcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKK2RpZmYg LS1naXQgYS9tY3MvZXJyb3JzL2NzMDgxNS05LmNzIGIvbWNzL2Vycm9ycy9jczA4MTUtOS5jcwor bmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAwMDAwLi5mNTQ3MDMzNDliZQorLS0t IC9kZXYvbnVsbAorKysrIGIvbWNzL2Vycm9ycy9jczA4MTUtOS5jcworQEAgLTAsMCArMSwxMSBA QAorKy8vIENTMDgxNTogQW4gaW1wbGljaXRseSB0eXBlZCBsb2NhbCB2YXJpYWJsZSBkZWNsYXJh dGlvbiBjYW5ub3QgYmUgaW5pdGlhbGl6ZWQgd2l0aCBgZGVmYXVsdCcKKysvLyBMaW5lOiA5Cisr Ly8gQ29tcGlsZXIgb3B0aW9uczogLWxhbmd2ZXJzaW9uOmxhdGVzdAorKworK3N0YXRpYyBjbGFz cyBYCisreworKwlwdWJsaWMgc3RhdGljIHZvaWQgTWFpbiAoKQorKwl7CisrCQl2YXIgeCA9IGRl ZmF1bHQ7CisrCX0KKyt9CitcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKK2RpZmYgLS1naXQg YS9tY3MvZXJyb3JzL2NzMTUwMi0xMS5jcyBiL21jcy9lcnJvcnMvY3MxNTAyLTExLmNzCitkZWxl dGVkIGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDgyZGNiM2EyYzE3Li4wMDAwMDAwMDAwMAorLS0t IGEvbWNzL2Vycm9ycy9jczE1MDItMTEuY3MKKysrKyAvZGV2L251bGwKK0BAIC0xLDExICswLDAg QEAKKy0vLyBDUzE1MDI6IFRoZSBiZXN0IG92ZXJsb2FkZWQgbWV0aG9kIG1hdGNoIGZvciBgc3Ry aW5nLlN0cmluZyhjaGFyKiknIGhhcyBzb21lIGludmFsaWQgYXJndW1lbnRzCistLy8gTGluZTog OAorLQorLWNsYXNzIEMKKy17CistCXN0YXRpYyBzdHJpbmcgUHJvcCB7CistCQlnZXQgeworLQkJ CXJldHVybiBuZXcgc3RyaW5nICgicyIpOworLQkJfQorLSAgICB9CistfQorZGlmZiAtLWdpdCBh L21jcy9lcnJvcnMvY3MxNTk5LTIuY3MgYi9tY3MvZXJyb3JzL2NzMTU5OS0yLmNzCitpbmRleCA5 NDFmZjZiYjBkNi4uMjhhYTA1YjJlZDMgMTAwNjQ0CistLS0gYS9tY3MvZXJyb3JzL2NzMTU5OS0y LmNzCisrKysgYi9tY3MvZXJyb3JzL2NzMTU5OS0yLmNzCitAQCAtMSw0ICsxLDQgQEAKKy0vLyBD UzE1OTk6IE1ldGhvZCBvciBkZWxlZ2F0ZSBjYW5ub3QgcmV0dXJuIHR5cGUgYFN5c3RlbS5BcmdJ dGVyYXRvcicKKysvLyBDUzE1OTk6IFRoZSByZXR1cm4gdHlwZSBvZiBgU3lzdGVtLkFyZ0l0ZXJh dG9yJyBpcyBub3QgYWxsb3dlZAorIC8vIExpbmU6IDgKKyAKKyB1c2luZyBTeXN0ZW07CitkaWZm IC0tZ2l0IGEvbWNzL2Vycm9ycy9jczE1OTktMy5jcyBiL21jcy9lcnJvcnMvY3MxNTk5LTMuY3MK K2luZGV4IGU0ODY5ZGNhZjcwLi45ZDM3ODA5OWQ4MiAxMDA2NDQKKy0tLSBhL21jcy9lcnJvcnMv Y3MxNTk5LTMuY3MKKysrKyBiL21jcy9lcnJvcnMvY3MxNTk5LTMuY3MKK0BAIC0xLDQgKzEsNCBA QAorLS8vIENTMTU5OTogTWV0aG9kIG9yIGRlbGVnYXRlIGNhbm5vdCByZXR1cm4gdHlwZSBgU3lz dGVtLkFyZ0l0ZXJhdG9yJworKy8vIENTMTU5OTogVGhlIHJldHVybiB0eXBlIG9mIGBTeXN0ZW0u QXJnSXRlcmF0b3InIGlzIG5vdCBhbGxvd2VkCisgLy8gTGluZTogOAorIAorIHVzaW5nIFN5c3Rl bTsKK2RpZmYgLS1naXQgYS9tY3MvZXJyb3JzL2NzMTU5OS00LmNzIGIvbWNzL2Vycm9ycy9jczE1 OTktNC5jcworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAwMDAwLi4zNThlZWU1 OWExMworLS0tIC9kZXYvbnVsbAorKysrIGIvbWNzL2Vycm9ycy9jczE1OTktNC5jcworQEAgLTAs MCArMSwxMiBAQAorKy8vIENTMTU5OTogVGhlIHJldHVybiB0eXBlIG9mIGBTeXN0ZW0uVHlwZWRS ZWZlcmVuY2UnIGlzIG5vdCBhbGxvd2VkCisrLy8gTGluZTogOAorKworK3VzaW5nIFN5c3RlbTsK KysKKytwdWJsaWMgY2xhc3MgUHJvZ3JhbQorK3sKKysgICAgcHVibGljIHN0YXRpYyBUeXBlZFJl ZmVyZW5jZSBvcGVyYXRvciArIChpbnQgYSwgUHJvZ3JhbSBiKQorKyAgICB7CisrICAgIAl0aHJv dyBuZXcgQXBwbGljYXRpb25FeGNlcHRpb24gKCk7CisrICAgIH0KKyt9CitcIE5vIG5ld2xpbmUg YXQgZW5kIG9mIGZpbGUKK2RpZmYgLS1naXQgYS9tY3MvZXJyb3JzL2NzMTU5OS5jcyBiL21jcy9l cnJvcnMvY3MxNTk5LmNzCitpbmRleCA1Y2VmMzJkN2Y5Ny4uODcxZDlmYjNlN2EgMTAwNjQ0Cist LS0gYS9tY3MvZXJyb3JzL2NzMTU5OS5jcworKysrIGIvbWNzL2Vycm9ycy9jczE1OTkuY3MKK0BA IC0xLDQgKzEsNCBAQAorLS8vIENTMTU5OTogTWV0aG9kIG9yIGRlbGVnYXRlIGNhbm5vdCByZXR1 cm4gdHlwZSBgU3lzdGVtLlR5cGVkUmVmZXJlbmNlJworKy8vIENTMTU5OTogVGhlIHJldHVybiB0 eXBlIG9mIGBTeXN0ZW0uVHlwZWRSZWZlcmVuY2UnIGlzIG5vdCBhbGxvd2VkCisgLy8gTGluZTog OAorIAorIHVzaW5nIFN5c3RlbTsKK2RpZmYgLS1naXQgYS9tY3MvZXJyb3JzL2NzMTY0NC01Ny5j cyBiL21jcy9lcnJvcnMvY3MxNjQ0LTU3LmNzCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXgg MDAwMDAwMDAwMDAuLjdlZTk4MzczMDgwCistLS0gL2Rldi9udWxsCisrKysgYi9tY3MvZXJyb3Jz L2NzMTY0NC01Ny5jcworQEAgLTAsMCArMSw3IEBACisrLy8gQ1MxNjQ0OiBGZWF0dXJlIGByZWYg c3RydWN0cycgY2Fubm90IGJlIHVzZWQgYmVjYXVzZSBpdCBpcyBub3QgcGFydCBvZiB0aGUgQyMg Ny4wIGxhbmd1YWdlIHNwZWNpZmljYXRpb24KKysvLyBMaW5lOiA1CisrLy8gQ29tcGlsZXIgb3B0 aW9uczogLWxhbmd2ZXJzaW9uOjcKKysKKytyZWYgc3RydWN0IFMKKyt7CisrfQorXCBObyBuZXds aW5lIGF0IGVuZCBvZiBmaWxlCitkaWZmIC0tZ2l0IGEvbWNzL2Vycm9ycy9jczE2NDQtNTguY3Mg Yi9tY3MvZXJyb3JzL2NzMTY0NC01OC5jcworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAw MDAwMDAwMDAwLi5lOTk0Y2YzMzhiZAorLS0tIC9kZXYvbnVsbAorKysrIGIvbWNzL2Vycm9ycy9j czE2NDQtNTguY3MKK0BAIC0wLDAgKzEsOCBAQAorKy8vIENTMTY0NDogRmVhdHVyZSBgZGVmYXVs dCBsaXRlcmFsJyBjYW5ub3QgYmUgdXNlZCBiZWNhdXNlIGl0IGlzIG5vdCBwYXJ0IG9mIHRoZSBD IyA3LjAgbGFuZ3VhZ2Ugc3BlY2lmaWNhdGlvbgorKy8vIExpbmU6IDcKKysvLyBDb21waWxlciBv cHRpb25zOiAtbGFuZ3ZlcnNpb246NworKworK2NsYXNzIFgKKyt7CisrCWludCBpID0gZGVmYXVs dDsKKyt9CitkaWZmIC0tZ2l0IGEvbWNzL2Vycm9ycy9jczE2NDQtNTkuY3MgYi9tY3MvZXJyb3Jz L2NzMTY0NC01OS5jcworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAwMDAwLi4y ZjhhZWQ2Yjk1OAorLS0tIC9kZXYvbnVsbAorKysrIGIvbWNzL2Vycm9ycy9jczE2NDQtNTkuY3MK K0BAIC0wLDAgKzEsMTMgQEAKKysvLyBDUzE2NDQ6IEZlYXR1cmUgYHJlYWRvbmx5IHJlZmVyZW5j ZXMnIGNhbm5vdCBiZSB1c2VkIGJlY2F1c2UgaXQgaXMgbm90IHBhcnQgb2YgdGhlIEMjIDcuMCBs YW5ndWFnZSBzcGVjaWZpY2F0aW9uCisrLy8gTGluZTogOQorKy8vIENvbXBpbGVyIG9wdGlvbnM6 IC1sYW5ndmVyc2lvbjo3CisrCisrY2xhc3MgWAorK3sKKysJaW50IGk7CisrCisrCXJlZiByZWFk b25seSBpbnQgVGVzdCAoKQorKwl7CisrCQlyZXR1cm4gcmVmIGk7CisrCX0KKyt9CitkaWZmIC0t Z2l0IGEvbWNzL2Vycm9ycy9jczE2NDQtNjAuY3MgYi9tY3MvZXJyb3JzL2NzMTY0NC02MC5jcwor bmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAwMDAwLi5jYTk1NDdiYzU2MQorLS0t IC9kZXYvbnVsbAorKysrIGIvbWNzL2Vycm9ycy9jczE2NDQtNjAuY3MKK0BAIC0wLDAgKzEsMTEg QEAKKysvLyBDUzE2NDQ6IEZlYXR1cmUgYGRpc2NhcmRzJyBjYW5ub3QgYmUgdXNlZCBiZWNhdXNl IGl0IGlzIG5vdCBwYXJ0IG9mIHRoZSBDIyA2LjAgbGFuZ3VhZ2Ugc3BlY2lmaWNhdGlvbgorKy8v IExpbmU6IDkKKysvLyBDb21waWxlciBvcHRpb25zOiAtbGFuZ3ZlcnNpb246NgorKworK2NsYXNz IFgKKyt7CisrCWludCBUZXN0ICgpCisrCXsKKysJCV8gPSAyOworKwl9CisrfQorZGlmZiAtLWdp dCBhL21jcy9lcnJvcnMvY3MxNzM4LTIuY3MgYi9tY3MvZXJyb3JzL2NzMTczOC0yLmNzCitpbmRl eCBmNTkyMjFmNGM3YS4uNDRiM2Y2ZDFiMTQgMTAwNjQ0CistLS0gYS9tY3MvZXJyb3JzL2NzMTcz OC0yLmNzCisrKysgYi9tY3MvZXJyb3JzL2NzMTczOC0yLmNzCitAQCAtMSw0ICsxLDQgQEAKKy0v LyBDUzE3Mzg6IE5hbWVkIGFyZ3VtZW50cyBtdXN0IGFwcGVhciBhZnRlciB0aGUgcG9zaXRpb25h bCBhcmd1bWVudHMKKysvLyBDUzE3Mzg6IE5hbWVkIGFyZ3VtZW50cyBtdXN0IGFwcGVhciBhZnRl ciB0aGUgcG9zaXRpb25hbCBhcmd1bWVudHMgd2hlbiB1c2luZyBsYW5ndWFnZSB2ZXJzaW9uIG9s ZGVyIHRoYW4gNy4yCisgLy8gTGluZTogMTMKKyAKKyB1c2luZyBTeXN0ZW07CitkaWZmIC0tZ2l0 IGEvbWNzL2Vycm9ycy9jczE3MzgtMy5jcyBiL21jcy9lcnJvcnMvY3MxNzM4LTMuY3MKK2luZGV4 IDUzYzRlZmMzNTUzLi45MDFhYzBlNWQ1OSAxMDA2NDQKKy0tLSBhL21jcy9lcnJvcnMvY3MxNzM4 LTMuY3MKKysrKyBiL21jcy9lcnJvcnMvY3MxNzM4LTMuY3MKK0BAIC0xLDQgKzEsNCBAQAorLS8v IENTMTczODogTmFtZWQgYXJndW1lbnRzIG11c3QgYXBwZWFyIGFmdGVyIHRoZSBwb3NpdGlvbmFs IGFyZ3VtZW50cworKy8vIENTMTczODogTmFtZWQgYXJndW1lbnRzIG11c3QgYXBwZWFyIGFmdGVy IHRoZSBwb3NpdGlvbmFsIGFyZ3VtZW50cyB3aGVuIHVzaW5nIGxhbmd1YWdlIHZlcnNpb24gb2xk ZXIgdGhhbiA3LjIKKyAvLyBMaW5lOiAxNAorIAorIGNsYXNzIEMKK2RpZmYgLS1naXQgYS9tY3Mv ZXJyb3JzL2NzMTczOC5jcyBiL21jcy9lcnJvcnMvY3MxNzM4LmNzCitpbmRleCBkYWI5YTYxMTYw Yi4uNTM3YmMxN2I5MTcgMTAwNjQ0CistLS0gYS9tY3MvZXJyb3JzL2NzMTczOC5jcworKysrIGIv bWNzL2Vycm9ycy9jczE3MzguY3MKK0BAIC0xLDQgKzEsNCBAQAorLS8vIENTMTczODogTmFtZWQg YXJndW1lbnRzIG11c3QgYXBwZWFyIGFmdGVyIHRoZSBwb3NpdGlvbmFsIGFyZ3VtZW50cworKy8v IENTMTczODogTmFtZWQgYXJndW1lbnRzIG11c3QgYXBwZWFyIGFmdGVyIHRoZSBwb3NpdGlvbmFs IGFyZ3VtZW50cyB3aGVuIHVzaW5nIGxhbmd1YWdlIHZlcnNpb24gb2xkZXIgdGhhbiA3LjIKKyAv LyBMaW5lOiAxMgorIAorIGNsYXNzIEMKK2RpZmYgLS1naXQgYS9tY3MvZXJyb3JzL2NzMTk4My5j cyBiL21jcy9lcnJvcnMvY3MxOTgzLmNzCitpbmRleCBhMmVmNmMxNTBkNi4uNzZkMmRiNGU2Nzcg MTAwNjQ0CistLS0gYS9tY3MvZXJyb3JzL2NzMTk4My5jcworKysrIGIvbWNzL2Vycm9ycy9jczE5 ODMuY3MKK0BAIC0xLDQgKzEsNCBAQAorLS8vIENTMTk4MzogVGhlIHJldHVybiB0eXBlIG9mIGFu IGFzeW5jIG1ldGhvZCBtdXN0IGJlIHZvaWQsIFRhc2ssIG9yIFRhc2s8VD4KKysvLyBDUzE5ODM6 IFRoZSByZXR1cm4gdHlwZSBvZiBhbiBhc3luYyBtZXRob2QgbXVzdCBiZSB2b2lkIG9yIHRhc2sg dHlwZQorIC8vIExpbmU6IDYKKyAKKyBjbGFzcyBDCitkaWZmIC0tZ2l0IGEvbWNzL2Vycm9ycy9j czQwMTItMy5jcyBiL21jcy9lcnJvcnMvY3M0MDEyLTMuY3MKK25ldyBmaWxlIG1vZGUgMTAwNjQ0 CitpbmRleCAwMDAwMDAwMDAwMC4uZmIzZDFkYzI3NmYKKy0tLSAvZGV2L251bGwKKysrKyBiL21j cy9lcnJvcnMvY3M0MDEyLTMuY3MKK0BAIC0wLDAgKzEsMTkgQEAKKysvLyBDUzQwMTI6IFBhcmFt ZXRlcnMgb3IgbG9jYWwgdmFyaWFibGVzIG9mIHR5cGUgYFMnIGNhbm5vdCBiZSBkZWNsYXJlZCBp biBhc3luYyBtZXRob2RzIG9yIGl0ZXJhdG9ycworKy8vIExpbmU6IDE2CisrLy8gQ29tcGlsZXIg b3B0aW9uczogLWxhbmd2ZXJzaW9uOmxhdGVzdAorKworK3VzaW5nIFN5c3RlbTsKKyt1c2luZyBT eXN0ZW0uVGhyZWFkaW5nLlRhc2tzOworKworK3B1YmxpYyByZWYgc3RydWN0IFMKKyt7CisrfQor KworK2NsYXNzIEMKKyt7CisrCXB1YmxpYyBhc3luYyB2b2lkIFRlc3QgKCkKKysJeworKwkJdmFy IHRyID0gbmV3IFMgKCk7CisrCQlhd2FpdCBUYXNrLkZhY3RvcnkuU3RhcnROZXcgKCgpID0+IDYp OworKwl9CisrfQorXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCitkaWZmIC0tZ2l0IGEvbWNz L2Vycm9ycy9jczgxNzUtMi5jcyBiL21jcy9lcnJvcnMvY3M4MTc1LTIuY3MKK25ldyBmaWxlIG1v ZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwMDAwMC4uMjdjNGJhYmY4YmYKKy0tLSAvZGV2L251bGwK KysrKyBiL21jcy9lcnJvcnMvY3M4MTc1LTIuY3MKK0BAIC0wLDAgKzEsMTkgQEAKKysvLyBDUzgx NzU6IENhbm5vdCB1c2UgYnktcmVmZXJlbmNlIHZhcmlhYmxlIGBzJyBpbnNpZGUgYW4gYW5vbnlt b3VzIG1ldGhvZCwgbGFtYmRhIGV4cHJlc3Npb24sIG9yIHF1ZXJ5IGV4cHJlc3Npb24KKysvLyBM aW5lOiAxNworKy8vIENvbXBpbGVyIG9wdGlvbnM6IC1sYW5ndmVyc2lvbjpsYXRlc3QKKysKKyt1 c2luZyBTeXN0ZW07CisrCisrcHVibGljIHJlZiBzdHJ1Y3QgUworK3sKKyt9CisrCisrY2xhc3Mg VGVzdAorK3sKKysJcHVibGljIHN0YXRpYyB2b2lkIE1haW4gKCkKKysJeworKwkJdmFyIHMgPSBu ZXcgUyAoKTsKKysKKysJCUFjdGlvbiBhID0gKCkgPT4gQ29uc29sZS5Xcml0ZUxpbmUgKHMpOwor Kwl9CisrfQorXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCitkaWZmIC0tZ2l0IGEvbWNzL2Vy cm9ycy9jczgxODMuY3MgYi9tY3MvZXJyb3JzL2NzODE4My5jcworbmV3IGZpbGUgbW9kZSAxMDA2 NDQKK2luZGV4IDAwMDAwMDAwMDAwLi5mOWU5MDA0YjczNworLS0tIC9kZXYvbnVsbAorKysrIGIv bWNzL2Vycm9ycy9jczgxODMuY3MKK0BAIC0wLDAgKzEsMTEgQEAKKysvLyBDUzgxODM6IENhbm5v dCBpbmZlciB0aGUgdHlwZSBvZiBpbXBsaWNpdGx5LXR5cGVkIGRpc2NhcmQKKysvLyBMaW5lOiA5 CisrLy8gQ29tcGlsZXIgb3B0aW9uczogLWxhbmd2ZXJzaW9uOjcuMgorKworK2NsYXNzIFgKKyt7 CisrCXB1YmxpYyBzdGF0aWMgdm9pZCBNYWluICgpCisrCXsKKysJCV8gPSBkZWZhdWx0OworKwl9 CisrfQorXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCitkaWZmIC0tZ2l0IGEvbWNzL2Vycm9y cy9jczgxODQuY3MgYi9tY3MvZXJyb3JzL2NzODE4NC5jcworbmV3IGZpbGUgbW9kZSAxMDA2NDQK K2luZGV4IDAwMDAwMDAwMDAwLi4xOWE0Njg1ZDdiZAorLS0tIC9kZXYvbnVsbAorKysrIGIvbWNz L2Vycm9ycy9jczgxODQuY3MKK0BAIC0wLDAgKzEsMTAgQEAKKysvLyBDUzgxODQ6IEEgZGVjb25z dHJ1Y3Rpb24gY2Fubm90IG1peCBkZWNsYXJhdGlvbnMgYW5kIGV4cHJlc3Npb25zIG9uIHRoZSBs ZWZ0LWhhbmQtc2lkZQorKy8vIExpbmU6IDgKKysKKytjbGFzcyBYCisreworKwlwdWJsaWMgc3Rh dGljIHZvaWQgTWFpbiAoKQorKwl7CisrCQkoaW50IGEsIGIpID0gKDEsIDIpOworKwl9CisrfQor XCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCitkaWZmIC0tZ2l0IGEvbWNzL2Vycm9ycy9jczgy MDcuY3MgYi9tY3MvZXJyb3JzL2NzODIwNy5jcworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4 IDAwMDAwMDAwMDAwLi4zMTA5MDk0OGI0NQorLS0tIC9kZXYvbnVsbAorKysrIGIvbWNzL2Vycm9y cy9jczgyMDcuY3MKK0BAIC0wLDAgKzEsMTkgQEAKKysvLyBDUzgyMDc6IEFuIGV4cHJlc3Npb24g dHJlZSBjYW5ub3QgY29udGFpbiBhIGRpc2NhcmQKKysvLyBMaW5lOiAxMQorKworK3VzaW5nIFN5 c3RlbTsKKyt1c2luZyBTeXN0ZW0uTGlucS5FeHByZXNzaW9uczsKKysKKytjbGFzcyBYCisrewor Kwl2b2lkIFRlc3QgKCkKKysJeworKwkJRXhwcmVzc2lvbjxGdW5jPGJvb2w+PiBlID0gKCkgPT4g VHJ5R2V0VmFsdWUgKG91dCBfKTsKKysJfQorKworKwlib29sIFRyeUdldFZhbHVlIChvdXQgaW50 IGFyZykKKysJeworKwkJYXJnID0gMzsKKysJCXJldHVybiB0cnVlOworKwl9CisrfQorZGlmZiAt LWdpdCBhL21jcy9lcnJvcnMvY3M4MjA5LmNzIGIvbWNzL2Vycm9ycy9jczgyMDkuY3MKK25ldyBm aWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwMDAwMC4uM2E0NmEyMDZjOGUKKy0tLSAvZGV2 L251bGwKKysrKyBiL21jcy9lcnJvcnMvY3M4MjA5LmNzCitAQCAtMCwwICsxLDEwIEBACisrLy8g Q1M4MjA5OiBDYW5ub3QgYXNzaWduIHZvaWQgdG8gYSBkaXNjYXJkCisrLy8gTGluZTogOAorKwor K2NsYXNzIEMKKyt7CisrCXB1YmxpYyBzdGF0aWMgdm9pZCBNYWluICgpCisrCXsKKysJCV8gPSBN YWluICgpOworKwl9CisrfQorXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCitkaWZmIC0tZ2l0 IGEvbWNzL2Vycm9ycy9jczgzMTAuY3MgYi9tY3MvZXJyb3JzL2NzODMxMC5jcworbmV3IGZpbGUg bW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAwMDAwLi4xMzQ2MjRjMDNiNworLS0tIC9kZXYvbnVs bAorKysrIGIvbWNzL2Vycm9ycy9jczgzMTAuY3MKK0BAIC0wLDAgKzEsMTEgQEAKKysvLyBDUzgz MTA6IE9wZXJhdG9yIGArJyBjYW5ub3QgYmUgYXBwbGllZCB0byBvcGVyYW5kIGBkZWZhdWx0Jwor Ky8vIExpbmU6IDkKKysvLyBDb21waWxlciBvcHRpb25zOiAtbGFuZ3ZlcnNpb246bGF0ZXN0Cisr CisrY2xhc3MgQworK3sKKysJc3RhdGljIHZvaWQgTWFpbiAoKQorKwl7CisrCQlpbnQgaCA9IDEg KyBkZWZhdWx0OworKwl9CisrfQorXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCitkaWZmIC0t Z2l0IGEvbWNzL2Vycm9ycy9jczgzMTEuY3MgYi9tY3MvZXJyb3JzL2NzODMxMS5jcworbmV3IGZp bGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAwMDAwLi41YjM1MjI5NDQyZAorLS0tIC9kZXYv bnVsbAorKysrIGIvbWNzL2Vycm9ycy9jczgzMTEuY3MKK0BAIC0wLDAgKzEsMTIgQEAKKysvLyBD UzgzMTE6IENhbm5vdCB1c2UgYSBkZWZhdWx0IGxpdGVyYWwgYXMgYW4gYXJndW1lbnQgdG8gYSBk eW5hbWljYWxseSBkaXNwYXRjaGVkIG9wZXJhdGlvbgorKy8vIExpbmU6IDEwCisrLy8gQ29tcGls ZXIgb3B0aW9uczogLWxhbmd2ZXJzaW9uOmxhdGVzdAorKworK2NsYXNzIEMKKyt7CisrICAgIHN0 YXRpYyB2b2lkIE1haW4gKCkKKysgICAgeworKyAgICAgICAgZHluYW1pYyBkID0gbnVsbDsKKysg ICAgICAgIGQuTTIgKGRlZmF1bHQpOworKyAgICB9CisrfQorXCBObyBuZXdsaW5lIGF0IGVuZCBv ZiBmaWxlCitkaWZmIC0tZ2l0IGEvbWNzL2Vycm9ycy9jczgzMTIuY3MgYi9tY3MvZXJyb3JzL2Nz ODMxMi5jcworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAwMDAwLi5kMmFkM2Y1 MmYwMgorLS0tIC9kZXYvbnVsbAorKysrIGIvbWNzL2Vycm9ycy9jczgzMTIuY3MKK0BAIC0wLDAg KzEsMTIgQEAKKysvLyBDUzgzMTI6IFVzZSBvZiBkZWZhdWx0IGxpdGVyYWwgaXMgbm90IHZhbGlk IGluIHRoaXMgY29udGV4dAorKy8vIExpbmU6IDkKKysvLyBDb21waWxlciBvcHRpb25zOiAtbGFu Z3ZlcnNpb246bGF0ZXN0CisrCisrY2xhc3MgQworK3sKKysJc3RhdGljIHZvaWQgTWFpbiAoKQor Kwl7CisrCQlmb3JlYWNoICh2YXIgeCBpbiBkZWZhdWx0KSB7CisrCQl9CisrCX0KKyt9CitcIE5v IG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKK2RpZmYgLS1naXQgYS9tY3MvZXJyb3JzL2NzODMxNS5j cyBiL21jcy9lcnJvcnMvY3M4MzE1LmNzCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAw MDAwMDAwMDAuLmM0MGJmODYxM2I0CistLS0gL2Rldi9udWxsCisrKysgYi9tY3MvZXJyb3JzL2Nz ODMxNS5jcworQEAgLTAsMCArMSwxMSBAQAorKy8vIENTODMxNTogT3BlcmF0b3IgYD09JyBpcyBh bWJpZ3VvdXMgb24gb3BlcmFuZHMgYGRlZmF1bHQnIGFuZCBgZGVmYXVsdCcKKysvLyBMaW5lOiA5 CisrLy8gQ29tcGlsZXIgb3B0aW9uczogLWxhbmd2ZXJzaW9uOmxhdGVzdAorKworK2NsYXNzIEMK Kyt7CisrCXN0YXRpYyB2b2lkIE1haW4gKCkKKysJeworKwkJYm9vbCBkID0gZGVmYXVsdCA9PSBk ZWZhdWx0OworKwl9CisrfQorXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCitkaWZmIC0tZ2l0 IGEvbWNzL2Vycm9ycy9jczgzMjMuY3MgYi9tY3MvZXJyb3JzL2NzODMyMy5jcworbmV3IGZpbGUg bW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAwMDAwLi5jNmM5MzA5ZWMwZAorLS0tIC9kZXYvbnVs bAorKysrIGIvbWNzL2Vycm9ycy9jczgzMjMuY3MKK0BAIC0wLDAgKzEsMTUgQEAKKysvLyBDUzgz MjM6IE5hbWVkIGFyZ3VtZW50IGBzdHInIGlzIHVzZWQgb3V0IG9mIHBvc2l0aW9uIGJ1dCBpcyBm b2xsb3dlZCBieSBwb3NpdGlvbmFsIGFyZ3VtZW50CisrLy8gTGluZTogOQorKy8vIENvbXBpbGVy IG9wdGlvbnM6IC1sYW5ndmVyc2lvbjo3LjIKKysKKytjbGFzcyBYCisreworKwlwdWJsaWMgc3Rh dGljIHZvaWQgTWFpbiAoKQorKwl7CisrCQlUZXN0IChzdHI6ICIiLCAiIik7CisrCX0KKysKKysJ c3RhdGljIHZvaWQgVGVzdCAoaW50IGFyZywgc3RyaW5nIHN0cikKKysJeworKwl9CisrfQorXCBO byBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCitkaWZmIC0tZ2l0IGEvbWNzL2Vycm9ycy9jczgzMjQu Y3MgYi9tY3MvZXJyb3JzL2NzODMyNC5jcworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAw MDAwMDAwMDAwLi44YTBiZTFhZWZiOQorLS0tIC9kZXYvbnVsbAorKysrIGIvbWNzL2Vycm9ycy9j czgzMjQuY3MKK0BAIC0wLDAgKzEsMTIgQEAKKysvLyBDUzgzMjQ6IE5hbWVkIGFyZ3VtZW50IHNw ZWNpZmljYXRpb25zIG11c3QgYXBwZWFyIGFmdGVyIGFsbCBmaXhlZCBhcmd1bWVudHMgaGF2ZSBi ZWVuIHNwZWNpZmllZCBpbiBhIGR5bmFtaWMgaW52b2NhdGlvbgorKy8vIExpbmU6IDEwCisrLy8g Q29tcGlsZXIgb3B0aW9uczogLWxhbmd2ZXJzaW9uOjcuMgorKworK2NsYXNzIEMKKyt7CisrCXZv aWQgTSAoKQorKwl7CisrCQlkeW5hbWljIGQgPSBuZXcgb2JqZWN0ICgpOworKwkJZC5NIChhcmc6 IDEsICIiKTsKKysJfQorK30KK1wgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorZGlmZiAtLWdp dCBhL21jcy9lcnJvcnMvY3M4MzQzLmNzIGIvbWNzL2Vycm9ycy9jczgzNDMuY3MKK25ldyBmaWxl IG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwMDAwMC4uYjZhYThlODNhMDkKKy0tLSAvZGV2L251 bGwKKysrKyBiL21jcy9lcnJvcnMvY3M4MzQzLmNzCitAQCAtMCwwICsxLDEyIEBACisrLy8gQ1M4 MzQzOiBgUyc6IHJlZiBzdHJ1Y3RzIGNhbm5vdCBpbXBsZW1lbnQgaW50ZXJmYWNlcworKy8vIExp bmU6IDcKKysvLyBDb21waWxlciBvcHRpb25zOiAtbGFuZ3ZlcnNpb246bGF0ZXN0CisrCisrdXNp bmcgU3lzdGVtOworKworK3B1YmxpYyByZWYgc3RydWN0IFMgOiBJRGlzcG9zYWJsZQorK3sKKysJ cHVibGljIHZvaWQgRGlzcG9zZSAoKQorKwl7CQkJCisrCX0KKyt9CitkaWZmIC0tZ2l0IGEvbWNz L2Vycm9ycy9jczgzNDUtMi5jcyBiL21jcy9lcnJvcnMvY3M4MzQ1LTIuY3MKK25ldyBmaWxlIG1v ZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwMDAwMC4uM2Y2MTM3YjFiNTYKKy0tLSAvZGV2L251bGwK KysrKyBiL21jcy9lcnJvcnMvY3M4MzQ1LTIuY3MKK0BAIC0wLDAgKzEsMTIgQEAKKysvLyBDUzgz NDU6IEZpZWxkIG9yIGF1dG8taW1wbGVtZW50ZWQgcHJvcGVydHkgY2Fubm90IGJlIG9mIHR5cGUg YFMnIHVubGVzcyBpdCBpcyBhbiBpbnN0YW5jZSBtZW1iZXIgb2YgYSByZWYgc3RydWN0CisrLy8g TGluZTogMTEKKysvLyBDb21waWxlciBvcHRpb25zOiAtbGFuZ3ZlcnNpb246bGF0ZXN0CisrCisr cHVibGljIHJlZiBzdHJ1Y3QgUworK3sKKyt9CisrCisrcmVmIHN0cnVjdCBUZXN0CisreworKwlz dGF0aWMgUyBmaWVsZDsKKyt9CitcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKK2RpZmYgLS1n aXQgYS9tY3MvZXJyb3JzL2NzODM0NS5jcyBiL21jcy9lcnJvcnMvY3M4MzQ1LmNzCituZXcgZmls ZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMDAwMDAuLjBiNWJkMDU1MThmCistLS0gL2Rldi9u dWxsCisrKysgYi9tY3MvZXJyb3JzL2NzODM0NS5jcworQEAgLTAsMCArMSwxMiBAQAorKy8vIENT ODM0NTogRmllbGQgb3IgYXV0by1pbXBsZW1lbnRlZCBwcm9wZXJ0eSBjYW5ub3QgYmUgb2YgdHlw ZSBgUycgdW5sZXNzIGl0IGlzIGFuIGluc3RhbmNlIG1lbWJlciBvZiBhIHJlZiBzdHJ1Y3QKKysv LyBMaW5lOiAxMQorKy8vIENvbXBpbGVyIG9wdGlvbnM6IC1sYW5ndmVyc2lvbjpsYXRlc3QKKysK KytwdWJsaWMgcmVmIHN0cnVjdCBTCisreworK30KKysKKytzdHJ1Y3QgVGVzdAorK3sKKysJUyBm aWVsZDsKKyt9CitcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKK2RpZmYgLS1naXQgYS9tY3Mv ZXJyb3JzL2NzODM0Ni5jcyBiL21jcy9lcnJvcnMvY3M4MzQ2LmNzCituZXcgZmlsZSBtb2RlIDEw MDY0NAoraW5kZXggMDAwMDAwMDAwMDAuLjU4ZTIyYTJhZTdmCistLS0gL2Rldi9udWxsCisrKysg Yi9tY3MvZXJyb3JzL2NzODM0Ni5jcworQEAgLTAsMCArMSwxMyBAQAorKy8vIENTODM0NjogQ2Fu bm90IGNvbnZlcnQgYSBzdGFja2FsbG9jIGV4cHJlc3Npb24gb2YgdHlwZSBgYnl0ZScgdG8gdHlw ZSBgU3lzdGVtLlNwYW48aW50PicKKysvLyBMaW5lOiAxMQorKy8vIENvbXBpbGVyIG9wdGlvbnM6 IC1sYW5ndmVyc2lvbjo3LjIKKysKKyt1c2luZyBTeXN0ZW07CisrCisrY2xhc3MgWAorK3sKKysJ cHVibGljIHN0YXRpYyB2b2lkIE1haW4gKCkKKysJeworKwkJU3BhbjxpbnQ+IHN0YWNrU3BhbiA9 IHN0YWNrYWxsb2MgYnl0ZVsxXTsKKysJfQorK30KK1wgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmls ZQorZGlmZiAtLWdpdCBhL21jcy9tY3MvYXJndW1lbnQuY3MgYi9tY3MvbWNzL2FyZ3VtZW50LmNz CitpbmRleCA4NDIxYjRkZmJmYy4uNWIxMDAzZGJhZGYgMTAwNjQ0CistLS0gYS9tY3MvbWNzL2Fy Z3VtZW50LmNzCisrKysgYi9tY3MvbWNzL2FyZ3VtZW50LmNzCitAQCAtMTA2LDExICsxMDYsNiBA QCBuYW1lc3BhY2UgTW9uby5DU2hhcnAKKyAKKyAJCXB1YmxpYyB2aXJ0dWFsIEV4cHJlc3Npb24g Q3JlYXRlRXhwcmVzc2lvblRyZWUgKFJlc29sdmVDb250ZXh0IHJjKQorIAkJeworLQkJCWlmIChU eXBlLktpbmQgPT0gTWVtYmVyS2luZC5CeVJlZikgeworLQkJCQlyYy5SZXBvcnQuRXJyb3IgKDgx NTMsIEV4cHIuTG9jYXRpb24sICJBbiBleHByZXNzaW9uIHRyZWUgbGFtYmRhIGNhbm5vdCBjb250 YWluIGEgY2FsbCB0byBhIG1ldGhvZCwgcHJvcGVydHksIG9yIGluZGV4ZXIgdGhhdCByZXR1cm5z IGJ5IHJlZmVyZW5jZSIpOworLQkJCQlyZXR1cm4gbnVsbDsKKy0JCQl9CistCisgCQkJaWYgKEFy Z1R5cGUgPT0gQVR5cGUuRGVmYXVsdCkKKyAJCQkJcmMuUmVwb3J0LkVycm9yICg4NTQsIEV4cHIu TG9jYXRpb24sICJBbiBleHByZXNzaW9uIHRyZWUgY2Fubm90IGNvbnRhaW4gYW4gaW52b2NhdGlv biB3aGljaCB1c2VzIG9wdGlvbmFsIHBhcmFtZXRlciIpOworIAorZGlmZiAtLWdpdCBhL21jcy9t Y3MvYXNzaWduLmNzIGIvbWNzL21jcy9hc3NpZ24uY3MKK2luZGV4IGEwN2M4YzBlZjM5Li41OTY2 MjNmZWFlNCAxMDA2NDQKKy0tLSBhL21jcy9tY3MvYXNzaWduLmNzCisrKysgYi9tY3MvbWNzL2Fz c2lnbi5jcworQEAgLTM5MSw5ICszOTEsMjEgQEAgbmFtZXNwYWNlIE1vbm8uQ1NoYXJwIHsKKyAJ CQlyZXR1cm4gU3lzdGVtLkxpbnEuRXhwcmVzc2lvbnMuRXhwcmVzc2lvbi5Bc3NpZ24gKHRhcmdl dF9vYmplY3QsIHNvdXJjZV9vYmplY3QpOworIAkJfQorIAorLQkJcHJvdGVjdGVkIHZpcnR1YWwg RXhwcmVzc2lvbiBSZXNvbHZlQ29udmVyc2lvbnMgKFJlc29sdmVDb250ZXh0IGVjKQorKwkJcHJv dGVjdGVkIHZpcnR1YWwgRXhwcmVzc2lvbiBSZXNvbHZlQ29udmVyc2lvbnMgKFJlc29sdmVDb250 ZXh0IHJjKQorIAkJeworLQkJCXNvdXJjZSA9IENvbnZlcnQuSW1wbGljaXRDb252ZXJzaW9uUmVx dWlyZWQgKGVjLCBzb3VyY2UsIHRhcmdldC5UeXBlLCBzb3VyY2UuTG9jYXRpb24pOworKwkJCXZh ciB0dHlwZSA9IHRhcmdldC5UeXBlOworKwkJCXZhciBzdGFja0FsbG9jID0gc291cmNlIGFzIFN0 YWNrQWxsb2M7CisrCQkJaWYgKHN0YWNrQWxsb2MgIT0gbnVsbCAmJiB0dHlwZS5Bcml0eSA9PSAx ICYmIHR0eXBlLkdldERlZmluaXRpb24gKCkgPT0gcmMuTW9kdWxlLlByZWRlZmluZWRUeXBlcy5T cGFuR2VuZXJpYy5UeXBlU3BlYyAmJgorKwkJCSAgICByYy5Nb2R1bGUuQ29tcGlsZXIuU2V0dGlu Z3MuVmVyc2lvbiA+PSBMYW5ndWFnZVZlcnNpb24uVl83XzIpIHsKKysKKysJCQkJdmFyIGV0eXBl ID0gdHR5cGUuVHlwZUFyZ3VtZW50cyBbMF07CisrCQkJCXZhciBzdHlwZSA9ICgoUG9pbnRlckNv bnRhaW5lcilzb3VyY2UuVHlwZSkuRWxlbWVudDsKKysJCQkJaWYgKGV0eXBlID09IHN0eXBlICYm IHN0YWNrQWxsb2MuUmVzb2x2ZVNwYW5Db252ZXJzaW9uIChyYywgdHR5cGUpKSB7CisrCQkJCQly ZXR1cm4gdGhpczsKKysJCQkJfQorKwkJCX0KKysKKysJCQlzb3VyY2UgPSBDb252ZXJ0LkltcGxp Y2l0Q29udmVyc2lvblJlcXVpcmVkIChyYywgc291cmNlLCB0dHlwZSwgc291cmNlLkxvY2F0aW9u KTsKKyAJCQlpZiAoc291cmNlID09IG51bGwpCisgCQkJCXJldHVybiBudWxsOworIAorZGlmZiAt LWdpdCBhL21jcy9tY3MvYXN5bmMuY3MgYi9tY3MvbWNzL2FzeW5jLmNzCitpbmRleCBmZDY0OTkz NDZlOC4uNjQzYWVkNWU1NjggMTAwNjQ0CistLS0gYS9tY3MvbWNzL2FzeW5jLmNzCisrKysgYi9t Y3MvbWNzL2FzeW5jLmNzCitAQCAtNjI4LDU4ICs2MjgsMTEyIEBAIG5hbWVzcGFjZSBNb25vLkNT aGFycAorIAorIAkJcHJvdGVjdGVkIG92ZXJyaWRlIGJvb2wgRG9EZWZpbmVNZW1iZXJzICgpCisg CQl7CistCQkJUHJlZGVmaW5lZFR5cGUgYnVpbGRlcl90eXBlOworLQkJCVByZWRlZmluZWRNZW1i ZXI8TWV0aG9kU3BlYz4gYmY7CistCQkJUHJlZGVmaW5lZE1lbWJlcjxNZXRob2RTcGVjPiBiczsK Ky0JCQlQcmVkZWZpbmVkTWVtYmVyPE1ldGhvZFNwZWM+IHNyOworLQkJCVByZWRlZmluZWRNZW1i ZXI8TWV0aG9kU3BlYz4gc2U7CistCQkJUHJlZGVmaW5lZE1lbWJlcjxNZXRob2RTcGVjPiBzbTsK KysJCQlUeXBlU3BlYyBidDsKKyAJCQlib29sIGhhc190YXNrX3JldHVybl90eXBlID0gZmFsc2U7 CistCQkJdmFyIHByZWRfbWVtYmVycyA9IE1vZHVsZS5QcmVkZWZpbmVkTWVtYmVyczsKKysJCQl2 YXIgaXN0YXRlX21hY2hpbmUgPSBNb2R1bGUuUHJlZGVmaW5lZFR5cGVzLklBc3luY1N0YXRlTWFj aGluZTsKKysJCQlNZXRob2RTcGVjIHNldF9zdGF0ZW1hY2hpbmU7CisgCistCQkJaWYgKHJldHVy bl90eXBlLktpbmQgPT0gTWVtYmVyS2luZC5Wb2lkKSB7CistCQkJCWJ1aWxkZXJfdHlwZSA9IE1v ZHVsZS5QcmVkZWZpbmVkVHlwZXMuQXN5bmNWb2lkTWV0aG9kQnVpbGRlcjsKKy0JCQkJYmYgPSBw cmVkX21lbWJlcnMuQXN5bmNWb2lkTWV0aG9kQnVpbGRlckNyZWF0ZTsKKy0JCQkJYnMgPSBwcmVk X21lbWJlcnMuQXN5bmNWb2lkTWV0aG9kQnVpbGRlclN0YXJ0OworLQkJCQlzciA9IHByZWRfbWVt YmVycy5Bc3luY1ZvaWRNZXRob2RCdWlsZGVyU2V0UmVzdWx0OworLQkJCQlzZSA9IHByZWRfbWVt YmVycy5Bc3luY1ZvaWRNZXRob2RCdWlsZGVyU2V0RXhjZXB0aW9uOworLQkJCQlzbSA9IHByZWRf bWVtYmVycy5Bc3luY1ZvaWRNZXRob2RCdWlsZGVyU2V0U3RhdGVNYWNoaW5lOworLQkJCX0gZWxz ZSBpZiAocmV0dXJuX3R5cGUgPT0gTW9kdWxlLlByZWRlZmluZWRUeXBlcy5UYXNrLlR5cGVTcGVj KSB7CistCQkJCWJ1aWxkZXJfdHlwZSA9IE1vZHVsZS5QcmVkZWZpbmVkVHlwZXMuQXN5bmNUYXNr TWV0aG9kQnVpbGRlcjsKKy0JCQkJYmYgPSBwcmVkX21lbWJlcnMuQXN5bmNUYXNrTWV0aG9kQnVp bGRlckNyZWF0ZTsKKy0JCQkJYnMgPSBwcmVkX21lbWJlcnMuQXN5bmNUYXNrTWV0aG9kQnVpbGRl clN0YXJ0OworLQkJCQlzciA9IHByZWRfbWVtYmVycy5Bc3luY1Rhc2tNZXRob2RCdWlsZGVyU2V0 UmVzdWx0OworLQkJCQlzZSA9IHByZWRfbWVtYmVycy5Bc3luY1Rhc2tNZXRob2RCdWlsZGVyU2V0 RXhjZXB0aW9uOworLQkJCQlzbSA9IHByZWRfbWVtYmVycy5Bc3luY1Rhc2tNZXRob2RCdWlsZGVy U2V0U3RhdGVNYWNoaW5lOworLQkJCQl0YXNrID0gcHJlZF9tZW1iZXJzLkFzeW5jVGFza01ldGhv ZEJ1aWxkZXJUYXNrLkdldCAoKTsKKysJCQlpZiAocmV0dXJuX3R5cGUuSXNDdXN0b21UYXNrVHlw ZSAoKSkgeworKwkJCQkvLworKwkJCQkvLyBUT0RPOiBXb3VsZCBiZSBuaWNlIHRvIGNhY2hlIGFs bCB0aGlzIG9uIHBlci10eXBlIGJhc2lzCisrCQkJCS8vCisrCQkJCXZhciBidHlwZXMgPSBDb21w aWxlci5CdWlsdGluVHlwZXM7CisrCQkJCWJ0ID0gcmV0dXJuX3R5cGUuTWVtYmVyRGVmaW5pdGlv bi5HZXRBc3luY01ldGhvZEJ1aWxkZXIgKCk7CisrCQkJCVR5cGVTcGVjIGJ0X2luZmxhdGVkOwor KwkJCQlpZiAocmV0dXJuX3R5cGUuSXNHZW5lcmljKSB7CisrCQkJCQlidF9pbmZsYXRlZCA9IGJ0 Lk1ha2VHZW5lcmljVHlwZSAoTW9kdWxlLCBidC5NZW1iZXJEZWZpbml0aW9uLlR5cGVQYXJhbWV0 ZXJzKTsKKysJCQkJfSBlbHNlIHsKKysJCQkJCWJ0X2luZmxhdGVkID0gYnQ7CisrCQkJCX0KKysK KysJCQkJdmFyIHNldF9yZXN1bHRfc2lnbiA9IE1lbWJlckZpbHRlci5NZXRob2QgKCJTZXRSZXN1 bHQiLCAwLCBQYXJhbWV0ZXJzQ29tcGlsZWQuQ3JlYXRlRnVsbHlSZXNvbHZlZCAoYnQuTWVtYmVy RGVmaW5pdGlvbi5UeXBlUGFyYW1ldGVycyksIGJ0eXBlcy5Wb2lkKTsKKysJCQkJc2V0X3Jlc3Vs dCA9IG5ldyBQcmVkZWZpbmVkTWVtYmVyPE1ldGhvZFNwZWM+IChNb2R1bGUsIGJ0LCBzZXRfcmVz dWx0X3NpZ24pLlJlc29sdmUgKExvY2F0aW9uKTsKKysKKysJCQkJdmFyIHNldF9leGNlcHRpb25f c2lnbiA9IE1lbWJlckZpbHRlci5NZXRob2QgKCJTZXRFeGNlcHRpb24iLCAwLCBQYXJhbWV0ZXJz Q29tcGlsZWQuQ3JlYXRlRnVsbHlSZXNvbHZlZCAoYnR5cGVzLkV4Y2VwdGlvbiksIGJ0eXBlcy5W b2lkKTsKKysJCQkJc2V0X2V4Y2VwdGlvbiA9IG5ldyBQcmVkZWZpbmVkTWVtYmVyPE1ldGhvZFNw ZWM+IChNb2R1bGUsIGJ0LCBzZXRfZXhjZXB0aW9uX3NpZ24pLlJlc29sdmUgKExvY2F0aW9uKTsK KysKKysJCQkJdmFyIGJ1aWxkZXJfZmFjdG9yeV9zaWduID0gTWVtYmVyRmlsdGVyLk1ldGhvZCAo IkNyZWF0ZSIsIDAsIFBhcmFtZXRlcnNDb21waWxlZC5FbXB0eVJlYWRPbmx5UGFyYW1ldGVycywg YnRfaW5mbGF0ZWQpOworKwkJCQlidWlsZGVyX2ZhY3RvcnkgPSBuZXcgUHJlZGVmaW5lZE1lbWJl cjxNZXRob2RTcGVjPiAoTW9kdWxlLCBidCwgYnVpbGRlcl9mYWN0b3J5X3NpZ24pLlJlc29sdmUg KExvY2F0aW9uKTsKKysJCQkJaWYgKGJ1aWxkZXJfZmFjdG9yeT8uSXNTdGF0aWMgPT0gZmFsc2Up CisrCQkJCQl0aHJvdyBuZXcgTm90SW1wbGVtZW50ZWRFeGNlcHRpb24gKCJyZXBvcnQgYmV0dGVy IGVycm9yIG1lc3NhZ2UiKTsKKysKKysJCQkJdmFyIGJ1aWxkZXJfc3RhcnRfc2lnbiA9IE1lbWJl ckZpbHRlci5NZXRob2QgKCJTdGFydCIsIDEsIG5ldyBQYXJhbWV0ZXJzSW1wb3J0ZWQgKAorKwkJ CQkJCW5ldyBbXSB7CisrCQkJCQkJCQluZXcgUGFyYW1ldGVyRGF0YSAobnVsbCwgUGFyYW1ldGVy Lk1vZGlmaWVyLlJFRiksCisrCQkJCQkJCX0sCisrCQkJCQkJbmV3IFtdIHsKKysJCQkJCQkJCW5l dyBUeXBlUGFyYW1ldGVyU3BlYyAoMCwgbnVsbCwgU3BlY2lhbENvbnN0cmFpbnQuTm9uZSwgVmFy aWFuY2UuTm9uZSwgbnVsbCksCisrCQkJCQkJCX0sIGZhbHNlKSwKKysJCQkJCWJ0eXBlcy5Wb2lk KTsKKysJCQkJYnVpbGRlcl9zdGFydCA9IG5ldyBQcmVkZWZpbmVkTWVtYmVyPE1ldGhvZFNwZWM+ IChNb2R1bGUsIGJ0LCBidWlsZGVyX3N0YXJ0X3NpZ24pLlJlc29sdmUgKExvY2F0aW9uKTsKKysK KysJCQkJaWYgKCFpc3RhdGVfbWFjaGluZS5EZWZpbmUgKCkpCisrCQkJCQlyZXR1cm4gZmFsc2U7 CisrCisrCQkJCXZhciBzZXRfc3RhdGVtYWNoaW5lX3NpZ24gPSBNZW1iZXJGaWx0ZXIuTWV0aG9k ICgiU2V0U3RhdGVNYWNoaW5lIiwgMCwgUGFyYW1ldGVyc0NvbXBpbGVkLkNyZWF0ZUZ1bGx5UmVz b2x2ZWQgKGlzdGF0ZV9tYWNoaW5lLlR5cGVTcGVjKSwgYnR5cGVzLlZvaWQpOworKwkJCQlzZXRf c3RhdGVtYWNoaW5lID0gbmV3IFByZWRlZmluZWRNZW1iZXI8TWV0aG9kU3BlYz4gKE1vZHVsZSwg YnQsIHNldF9zdGF0ZW1hY2hpbmVfc2lnbikuUmVzb2x2ZSAoTG9jYXRpb24pOyA7CisrCisrCQkJ CXZhciB0YXNrX3NpZ24gPSBNZW1iZXJGaWx0ZXIuUHJvcGVydHkgKCJUYXNrIiwgcmV0dXJuX3R5 cGUuTWVtYmVyRGVmaW5pdGlvbiBhcyBUeXBlU3BlYyk7CisrCQkJCXRhc2sgPSBuZXcgUHJlZGVm aW5lZE1lbWJlcjxQcm9wZXJ0eVNwZWM+IChNb2R1bGUsIGJ0LCB0YXNrX3NpZ24pLlJlc29sdmUg KExvY2F0aW9uKTsKKysKKysJCQkJaWYgKHNldF9yZXN1bHQgPT0gbnVsbCB8fCBzZXRfZXhjZXB0 aW9uID09IG51bGwgfHwgYnVpbGRlcl9mYWN0b3J5ID09IG51bGwgfHwgYnVpbGRlcl9zdGFydCA9 PSBudWxsIHx8IHNldF9zdGF0ZW1hY2hpbmUgPT0gbnVsbCB8fCB0YXNrID09IG51bGwgfHwKKysJ CQkJCSFNb2R1bGUuUHJlZGVmaW5lZFR5cGVzLklOb3RpZnlDb21wbGV0aW9uLkRlZmluZSAoKSkg eworKwkJCQkJcmV0dXJuIGZhbHNlOworKwkJCQl9CisrCisrCQkJCWhhc190YXNrX3JldHVybl90 eXBlID0gcmV0dXJuX3R5cGUuSXNHZW5lcmljOworIAkJCX0gZWxzZSB7CistCQkJCWJ1aWxkZXJf dHlwZSA9IE1vZHVsZS5QcmVkZWZpbmVkVHlwZXMuQXN5bmNUYXNrTWV0aG9kQnVpbGRlckdlbmVy aWM7CistCQkJCWJmID0gcHJlZF9tZW1iZXJzLkFzeW5jVGFza01ldGhvZEJ1aWxkZXJHZW5lcmlj Q3JlYXRlOworLQkJCQlicyA9IHByZWRfbWVtYmVycy5Bc3luY1Rhc2tNZXRob2RCdWlsZGVyR2Vu ZXJpY1N0YXJ0OworLQkJCQlzciA9IHByZWRfbWVtYmVycy5Bc3luY1Rhc2tNZXRob2RCdWlsZGVy R2VuZXJpY1NldFJlc3VsdDsKKy0JCQkJc2UgPSBwcmVkX21lbWJlcnMuQXN5bmNUYXNrTWV0aG9k QnVpbGRlckdlbmVyaWNTZXRFeGNlcHRpb247CistCQkJCXNtID0gcHJlZF9tZW1iZXJzLkFzeW5j VGFza01ldGhvZEJ1aWxkZXJHZW5lcmljU2V0U3RhdGVNYWNoaW5lOworLQkJCQl0YXNrID0gcHJl ZF9tZW1iZXJzLkFzeW5jVGFza01ldGhvZEJ1aWxkZXJHZW5lcmljVGFzay5HZXQgKCk7CistCQkJ CWhhc190YXNrX3JldHVybl90eXBlID0gdHJ1ZTsKKy0JCQl9CisrCQkJCVByZWRlZmluZWRUeXBl IGJ1aWxkZXJfdHlwZTsKKysJCQkJUHJlZGVmaW5lZE1lbWJlcjxNZXRob2RTcGVjPiBiZjsKKysJ CQkJUHJlZGVmaW5lZE1lbWJlcjxNZXRob2RTcGVjPiBiczsKKysJCQkJUHJlZGVmaW5lZE1lbWJl cjxNZXRob2RTcGVjPiBzcjsKKysJCQkJUHJlZGVmaW5lZE1lbWJlcjxNZXRob2RTcGVjPiBzZTsK KysJCQkJUHJlZGVmaW5lZE1lbWJlcjxNZXRob2RTcGVjPiBzbTsKKysJCQkJdmFyIHByZWRfbWVt YmVycyA9IE1vZHVsZS5QcmVkZWZpbmVkTWVtYmVyczsKKysKKysJCQkJaWYgKHJldHVybl90eXBl LktpbmQgPT0gTWVtYmVyS2luZC5Wb2lkKSB7CisrCQkJCQlidWlsZGVyX3R5cGUgPSBNb2R1bGUu UHJlZGVmaW5lZFR5cGVzLkFzeW5jVm9pZE1ldGhvZEJ1aWxkZXI7CisrCQkJCQliZiA9IHByZWRf bWVtYmVycy5Bc3luY1ZvaWRNZXRob2RCdWlsZGVyQ3JlYXRlOworKwkJCQkJYnMgPSBwcmVkX21l bWJlcnMuQXN5bmNWb2lkTWV0aG9kQnVpbGRlclN0YXJ0OworKwkJCQkJc3IgPSBwcmVkX21lbWJl cnMuQXN5bmNWb2lkTWV0aG9kQnVpbGRlclNldFJlc3VsdDsKKysJCQkJCXNlID0gcHJlZF9tZW1i ZXJzLkFzeW5jVm9pZE1ldGhvZEJ1aWxkZXJTZXRFeGNlcHRpb247CisrCQkJCQlzbSA9IHByZWRf bWVtYmVycy5Bc3luY1ZvaWRNZXRob2RCdWlsZGVyU2V0U3RhdGVNYWNoaW5lOworKwkJCQl9IGVs c2UgaWYgKHJldHVybl90eXBlID09IE1vZHVsZS5QcmVkZWZpbmVkVHlwZXMuVGFzay5UeXBlU3Bl YykgeworKwkJCQkJYnVpbGRlcl90eXBlID0gTW9kdWxlLlByZWRlZmluZWRUeXBlcy5Bc3luY1Rh c2tNZXRob2RCdWlsZGVyOworKwkJCQkJYmYgPSBwcmVkX21lbWJlcnMuQXN5bmNUYXNrTWV0aG9k QnVpbGRlckNyZWF0ZTsKKysJCQkJCWJzID0gcHJlZF9tZW1iZXJzLkFzeW5jVGFza01ldGhvZEJ1 aWxkZXJTdGFydDsKKysJCQkJCXNyID0gcHJlZF9tZW1iZXJzLkFzeW5jVGFza01ldGhvZEJ1aWxk ZXJTZXRSZXN1bHQ7CisrCQkJCQlzZSA9IHByZWRfbWVtYmVycy5Bc3luY1Rhc2tNZXRob2RCdWls ZGVyU2V0RXhjZXB0aW9uOworKwkJCQkJc20gPSBwcmVkX21lbWJlcnMuQXN5bmNUYXNrTWV0aG9k QnVpbGRlclNldFN0YXRlTWFjaGluZTsKKysJCQkJCXRhc2sgPSBwcmVkX21lbWJlcnMuQXN5bmNU YXNrTWV0aG9kQnVpbGRlclRhc2suR2V0ICgpOworKwkJCQl9IGVsc2UgeworKwkJCQkJYnVpbGRl cl90eXBlID0gTW9kdWxlLlByZWRlZmluZWRUeXBlcy5Bc3luY1Rhc2tNZXRob2RCdWlsZGVyR2Vu ZXJpYzsKKysJCQkJCWJmID0gcHJlZF9tZW1iZXJzLkFzeW5jVGFza01ldGhvZEJ1aWxkZXJHZW5l cmljQ3JlYXRlOworKwkJCQkJYnMgPSBwcmVkX21lbWJlcnMuQXN5bmNUYXNrTWV0aG9kQnVpbGRl ckdlbmVyaWNTdGFydDsKKysJCQkJCXNyID0gcHJlZF9tZW1iZXJzLkFzeW5jVGFza01ldGhvZEJ1 aWxkZXJHZW5lcmljU2V0UmVzdWx0OworKwkJCQkJc2UgPSBwcmVkX21lbWJlcnMuQXN5bmNUYXNr TWV0aG9kQnVpbGRlckdlbmVyaWNTZXRFeGNlcHRpb247CisrCQkJCQlzbSA9IHByZWRfbWVtYmVy cy5Bc3luY1Rhc2tNZXRob2RCdWlsZGVyR2VuZXJpY1NldFN0YXRlTWFjaGluZTsKKysJCQkJCXRh c2sgPSBwcmVkX21lbWJlcnMuQXN5bmNUYXNrTWV0aG9kQnVpbGRlckdlbmVyaWNUYXNrLkdldCAo KTsKKysJCQkJCWhhc190YXNrX3JldHVybl90eXBlID0gdHJ1ZTsKKysJCQkJfQorIAorLQkJCXNl dF9yZXN1bHQgPSBzci5HZXQgKCk7CistCQkJc2V0X2V4Y2VwdGlvbiA9IHNlLkdldCAoKTsKKy0J CQlidWlsZGVyX2ZhY3RvcnkgPSBiZi5HZXQgKCk7CistCQkJYnVpbGRlcl9zdGFydCA9IGJzLkdl dCAoKTsKKysJCQkJc2V0X3Jlc3VsdCA9IHNyLkdldCAoKTsKKysJCQkJc2V0X2V4Y2VwdGlvbiA9 IHNlLkdldCAoKTsKKysJCQkJYnVpbGRlcl9mYWN0b3J5ID0gYmYuR2V0ICgpOworKwkJCQlidWls ZGVyX3N0YXJ0ID0gYnMuR2V0ICgpOworIAorLQkJCXZhciBpc3RhdGVfbWFjaGluZSA9IE1vZHVs ZS5QcmVkZWZpbmVkVHlwZXMuSUFzeW5jU3RhdGVNYWNoaW5lOworLQkJCXZhciBzZXRfc3RhdGVt YWNoaW5lID0gc20uR2V0ICgpOworLQorLQkJCWlmICghYnVpbGRlcl90eXBlLkRlZmluZSAoKSB8 fCAhaXN0YXRlX21hY2hpbmUuRGVmaW5lICgpIHx8IHNldF9yZXN1bHQgPT0gbnVsbCB8fCBidWls ZGVyX2ZhY3RvcnkgPT0gbnVsbCB8fAorLQkJCQlzZXRfZXhjZXB0aW9uID09IG51bGwgfHwgc2V0 X3N0YXRlbWFjaGluZSA9PSBudWxsIHx8IGJ1aWxkZXJfc3RhcnQgPT0gbnVsbCB8fAorLQkJCQkh TW9kdWxlLlByZWRlZmluZWRUeXBlcy5JTm90aWZ5Q29tcGxldGlvbi5EZWZpbmUgKCkpIHsKKy0J CQkJUmVwb3J0LkVycm9yICgxOTkzLCBMb2NhdGlvbiwKKy0JCQkJCSJDYW5ub3QgZmluZCBjb21w aWxlciByZXF1aXJlZCB0eXBlcyBmb3IgYXN5bmNocm9ub3VzIGZ1bmN0aW9ucyBzdXBwb3J0LiBB cmUgeW91IHRhcmdldGluZyB0aGUgd3JvbmcgZnJhbWV3b3JrIHZlcnNpb24/Iik7CistCQkJCXJl dHVybiBiYXNlLkRvRGVmaW5lTWVtYmVycyAoKTsKKy0JCQl9CisrCQkJCXNldF9zdGF0ZW1hY2hp bmUgPSBzbS5HZXQgKCk7CisrCisrCQkJCWlmICghYnVpbGRlcl90eXBlLkRlZmluZSAoKSB8fCAh aXN0YXRlX21hY2hpbmUuRGVmaW5lICgpIHx8IHNldF9yZXN1bHQgPT0gbnVsbCB8fCBidWlsZGVy X2ZhY3RvcnkgPT0gbnVsbCB8fAorKwkJCQkJc2V0X2V4Y2VwdGlvbiA9PSBudWxsIHx8IHNldF9z dGF0ZW1hY2hpbmUgPT0gbnVsbCB8fCBidWlsZGVyX3N0YXJ0ID09IG51bGwgfHwKKysJCQkJCSFN b2R1bGUuUHJlZGVmaW5lZFR5cGVzLklOb3RpZnlDb21wbGV0aW9uLkRlZmluZSAoKSkgeworKwkJ CQkJUmVwb3J0LkVycm9yICgxOTkzLCBMb2NhdGlvbiwKKysJCQkJCQkiQ2Fubm90IGZpbmQgY29t cGlsZXIgcmVxdWlyZWQgdHlwZXMgZm9yIGFzeW5jaHJvbm91cyBmdW5jdGlvbnMgc3VwcG9ydC4g QXJlIHlvdSB0YXJnZXRpbmcgdGhlIHdyb25nIGZyYW1ld29yayB2ZXJzaW9uPyIpOworKwkJCQkJ cmV0dXJuIGJhc2UuRG9EZWZpbmVNZW1iZXJzICgpOworKwkJCQl9CisgCistCQkJdmFyIGJ0ID0g YnVpbGRlcl90eXBlLlR5cGVTcGVjOworKwkJCQlidCA9IGJ1aWxkZXJfdHlwZS5UeXBlU3BlYzsK KysJCQl9CisgCisgCQkJLy8KKyAJCQkvLyBJbmZsYXRlIGdlbmVyaWMgVGFzayB0eXBlcworQEAg LTgyNSw5ICs4NzksMjYgQEAgbmFtZXNwYWNlIE1vbm8uQ1NoYXJwCisgCQkJCXByZWRlZmluZWQg PSB1bnNhZmVWZXJzaW9uID8gcG0uQXN5bmNWb2lkTWV0aG9kQnVpbGRlck9uQ29tcGxldGVkVW5z YWZlIDogcG0uQXN5bmNWb2lkTWV0aG9kQnVpbGRlck9uQ29tcGxldGVkOworIAkJCX0gZWxzZSBp ZiAocmV0dXJuX3R5cGUgPT0gTW9kdWxlLlByZWRlZmluZWRUeXBlcy5UYXNrLlR5cGVTcGVjKSB7 CisgCQkJCXByZWRlZmluZWQgPSB1bnNhZmVWZXJzaW9uID8gcG0uQXN5bmNUYXNrTWV0aG9kQnVp bGRlck9uQ29tcGxldGVkVW5zYWZlIDogcG0uQXN5bmNUYXNrTWV0aG9kQnVpbGRlck9uQ29tcGxl dGVkOworLQkJCX0gZWxzZSB7CisrCQkJfSBlbHNlIGlmIChyZXR1cm5fdHlwZS5Jc0dlbmVyaWNU YXNrKSB7CisgCQkJCXByZWRlZmluZWQgPSB1bnNhZmVWZXJzaW9uID8gcG0uQXN5bmNUYXNrTWV0 aG9kQnVpbGRlckdlbmVyaWNPbkNvbXBsZXRlZFVuc2FmZSA6IHBtLkFzeW5jVGFza01ldGhvZEJ1 aWxkZXJHZW5lcmljT25Db21wbGV0ZWQ7CisgCQkJCWhhc190YXNrX3JldHVybl90eXBlID0gdHJ1 ZTsKKysJCQl9IGVsc2UgeworKwkJCQl2YXIgcGFyYW1ldGVycyA9IG5ldyBQYXJhbWV0ZXJzSW1w b3J0ZWQgKAorKwkJCQkJbmV3IFtdIHsKKysJCQkJCQkJCW5ldyBQYXJhbWV0ZXJEYXRhIChudWxs LCBQYXJhbWV0ZXIuTW9kaWZpZXIuUkVGKSwKKysJCQkJCQkJCW5ldyBQYXJhbWV0ZXJEYXRhIChu dWxsLCBQYXJhbWV0ZXIuTW9kaWZpZXIuUkVGKQorKwkJCQkJCX0sCisrCQkJCQluZXcgW10gewor KwkJCQkJCQkJbmV3IFR5cGVQYXJhbWV0ZXJTcGVjICgwLCBudWxsLCBTcGVjaWFsQ29uc3RyYWlu dC5Ob25lLCBWYXJpYW5jZS5Ob25lLCBudWxsKSwKKysJCQkJCQkJCW5ldyBUeXBlUGFyYW1ldGVy U3BlYyAoMSwgbnVsbCwgU3BlY2lhbENvbnN0cmFpbnQuTm9uZSwgVmFyaWFuY2UuTm9uZSwgbnVs bCkKKysJCQkJCX0sIGZhbHNlKTsKKysKKysJCQkJdmFyIG9uX2NvbXBsZXRlZF9zaWduID0gdW5z YWZlVmVyc2lvbiA/CisrCQkJCQlNZW1iZXJGaWx0ZXIuTWV0aG9kICgiQXdhaXRVbnNhZmVPbkNv bXBsZXRlZCIsIDIsIHBhcmFtZXRlcnMsIENvbXBpbGVyLkJ1aWx0aW5UeXBlcy5Wb2lkKSA6Cisr CQkJCSAgICBNZW1iZXJGaWx0ZXIuTWV0aG9kICgiQXdhaXRPbkNvbXBsZXRlZCIsIDIsIHBhcmFt ZXRlcnMsIENvbXBpbGVyLkJ1aWx0aW5UeXBlcy5Wb2lkKTsKKysJCQkJCisrCQkJCXByZWRlZmlu ZWQgPSBuZXcgUHJlZGVmaW5lZE1lbWJlcjxNZXRob2RTcGVjPiAoTW9kdWxlLCByZXR1cm5fdHlw ZS5NZW1iZXJEZWZpbml0aW9uLkdldEFzeW5jTWV0aG9kQnVpbGRlciAoKSwgb25fY29tcGxldGVk X3NpZ24pOworKwkJCQloYXNfdGFza19yZXR1cm5fdHlwZSA9IHJldHVybl90eXBlLklzR2VuZXJp YzsKKyAJCQl9CisgCisgCQkJdmFyIG9uX2NvbXBsZXRlZCA9IHByZWRlZmluZWQuUmVzb2x2ZSAo TG9jYXRpb24pOworQEAgLTg4NywxMSArOTU4LDE0IEBAIG5hbWVzcGFjZSBNb25vLkNTaGFycAor IAkJCS8vIHN0YXRlTWFjaGluZS4kYnVpbGRlci5TdGFydDx7c3RvcmV5LXR5cGV9PihyZWYgc3Rh dGVNYWNoaW5lKTsKKyAJCQkvLworIAkJCWluc3RhbmNlLkFkZHJlc3NPZiAoZWMsIEFkZHJlc3NP cC5TdG9yZSk7CistCQkJZWMuRW1pdCAoT3BDb2Rlcy5MZGZsZGEsIGJ1aWxkZXJfZmllbGQpOwor KworKwkJCWJvb2wgc3RydWN0X2J1aWxkZXIgPSBidWlsZGVyLk1lbWJlclR5cGUuSXNTdHJ1Y3Q7 CisrCisrCQkJZWMuRW1pdCAoc3RydWN0X2J1aWxkZXIgPyBPcENvZGVzLkxkZmxkYSA6IE9wQ29k ZXMuTGRmbGQsIGJ1aWxkZXJfZmllbGQpOworIAkJCWlmIChUYXNrICE9IG51bGwpCisgCQkJCWVj LkVtaXQgKE9wQ29kZXMuRHVwKTsKKyAJCQlpbnN0YW5jZS5BZGRyZXNzT2YgKGVjLCBBZGRyZXNz T3AuU3RvcmUpOworLQkJCWVjLkVtaXQgKE9wQ29kZXMuQ2FsbCwgYnVpbGRlcl9zdGFydC5NYWtl R2VuZXJpY01ldGhvZCAoTW9kdWxlLCBpbnN0YW5jZS5UeXBlKSk7CisrCQkJZWMuRW1pdCAoc3Ry dWN0X2J1aWxkZXIgPyBPcENvZGVzLkNhbGwgOiBPcENvZGVzLkNhbGx2aXJ0LCBidWlsZGVyX3N0 YXJ0Lk1ha2VHZW5lcmljTWV0aG9kIChNb2R1bGUsIGluc3RhbmNlLlR5cGUpKTsKKyAKKyAJCQkv LworIAkJCS8vIEVtaXRzIHJldHVybiBzdGF0ZU1hY2hpbmUuJGJ1aWxkZXIuVGFzazsKK0BAIC0x MDI5LDQgKzExMDMsMjAgQEAgbmFtZXNwYWNlIE1vbm8uQ1NoYXJwCisgCQkJRW1pdEFzc2lnbiAo ZWMsIG5ldyBOdWxsQ29uc3RhbnQgKHR5cGUsIGxvYyksIGZhbHNlLCBmYWxzZSk7CisgCQl9Cisg CX0KKysKKysJc3RhdGljIGNsYXNzIFR5cGVTcGVjQXN5bmNFeHRlbnNpb25zCisrCXsKKysJCXB1 YmxpYyBzdGF0aWMgYm9vbCBJc0N1c3RvbVRhc2tUeXBlICh0aGlzIFR5cGVTcGVjIHR5cGUpCisr CQl7CisrCQkJLy8gTEFNRVNQRUM6IEFyaXR5IGlzIG5vdCBtZW50aW9uZWQKKysJCQlpZiAodHlw ZS5Bcml0eSA+IDEpCisrCQkJCXJldHVybiBmYWxzZTsKKysJCQkKKysJCQl2YXIgYW1iID0gdHlw ZS5NZW1iZXJEZWZpbml0aW9uLkdldEFzeW5jTWV0aG9kQnVpbGRlciAoKTsKKysJCQlpZiAoYW1i ID09IG51bGwpCisrCQkJCXJldHVybiBmYWxzZTsKKysKKysJCQlyZXR1cm4gYW1iLkFyaXR5ID09 IHR5cGUuQXJpdHk7CisrCQl9CisrCX0KKyB9CitkaWZmIC0tZ2l0IGEvbWNzL21jcy9hdHRyaWJ1 dGUuY3MgYi9tY3MvbWNzL2F0dHJpYnV0ZS5jcworaW5kZXggM2ZmMmQ2OGNjYjUuLjgzZDQwMzEx OGFkIDEwMDY0NAorLS0tIGEvbWNzL21jcy9hdHRyaWJ1dGUuY3MKKysrKyBiL21jcy9tY3MvYXR0 cmlidXRlLmNzCitAQCAtNzg5LDYgKzc4OSwxNyBAQCBuYW1lc3BhY2UgTW9uby5DU2hhcnAgewor IAkJCXJldHVybiAoKEJvb2xDb25zdGFudCkgcG9zX2FyZ3NbMF0uRXhwcikuVmFsdWU7CisgCQl9 CisgCisrCQlwdWJsaWMgVHlwZVNwZWMgR2V0QXN5bmNNZXRob2RCdWlsZGVyVmFsdWUgKCkKKysJ CXsKKysJCQlpZiAoIWFyZ19yZXNvbHZlZCkKKysJCQkJUmVzb2x2ZSAoKTsKKysKKysJCQlpZiAo cmVzb2x2ZV9lcnJvcikKKysJCQkJcmV0dXJuIG51bGw7CisrCisrCQkJcmV0dXJuIEdldEFyZ3Vt ZW50VHlwZSAoKTsKKysJCX0KKysKKyAJCXB1YmxpYyBUeXBlU3BlYyBHZXRDb0NsYXNzQXR0cmli dXRlVmFsdWUgKCkKKyAJCXsKKyAJCQlpZiAoIWFyZ19yZXNvbHZlZCkKK0BAIC0xNzU0LDkgKzE3 NjUsMTEgQEAgbmFtZXNwYWNlIE1vbm8uQ1NoYXJwIHsKKyAKKyAJCS8vIE5ldyBpbiAuTkVUIDQu NworIAkJcHVibGljIHJlYWRvbmx5IFByZWRlZmluZWRUdXBsZUVsZW1lbnROYW1lc0F0dHJpYnV0 ZSBUdXBsZUVsZW1lbnROYW1lczsKKysJCXB1YmxpYyByZWFkb25seSBQcmVkZWZpbmVkQXR0cmli dXRlIEFzeW5jTWV0aG9kQnVpbGRlcjsKKyAKKyAJCS8vIE5ldyBpbiAuTkVUIDQuNy4xCisgCQlw dWJsaWMgcmVhZG9ubHkgUHJlZGVmaW5lZEF0dHJpYnV0ZSBJc1JlYWRPbmx5OworKwkJcHVibGlj IHJlYWRvbmx5IFByZWRlZmluZWRBdHRyaWJ1dGUgSXNCeVJlZkxpa2U7CisgCisgCQkvLworIAkJ Ly8gT3B0aW9uYWwgdHlwZXMgd2hpY2ggYXJlIHVzZWQgYXMgdHlwZXMgYW5kIGZvciBtZW1iZXIg bG9va3VwCitAQCAtMTgzNyw4ICsxODUwLDEwIEBAIG5hbWVzcGFjZSBNb25vLkNTaGFycCB7Cisg CQkJQ2FsbGVyTGluZU51bWJlckF0dHJpYnV0ZSA9IG5ldyBQcmVkZWZpbmVkQXR0cmlidXRlICht b2R1bGUsICJTeXN0ZW0uUnVudGltZS5Db21waWxlclNlcnZpY2VzIiwgIkNhbGxlckxpbmVOdW1i ZXJBdHRyaWJ1dGUiKTsKKyAJCQlDYWxsZXJGaWxlUGF0aEF0dHJpYnV0ZSA9IG5ldyBQcmVkZWZp bmVkQXR0cmlidXRlIChtb2R1bGUsICJTeXN0ZW0uUnVudGltZS5Db21waWxlclNlcnZpY2VzIiwg IkNhbGxlckZpbGVQYXRoQXR0cmlidXRlIik7CisgCisrCQkJQXN5bmNNZXRob2RCdWlsZGVyID0g bmV3IFByZWRlZmluZWRBdHRyaWJ1dGUgKG1vZHVsZSwgIlN5c3RlbS5SdW50aW1lLkNvbXBpbGVy U2VydmljZXMiLCAiQXN5bmNNZXRob2RCdWlsZGVyQXR0cmlidXRlIik7CisgCQkJVHVwbGVFbGVt ZW50TmFtZXMgPSBuZXcgUHJlZGVmaW5lZFR1cGxlRWxlbWVudE5hbWVzQXR0cmlidXRlIChtb2R1 bGUsICJTeXN0ZW0uUnVudGltZS5Db21waWxlclNlcnZpY2VzIiwgIlR1cGxlRWxlbWVudE5hbWVz QXR0cmlidXRlIik7CisgCQkJSXNSZWFkT25seSA9IG5ldyBQcmVkZWZpbmVkQXR0cmlidXRlICht b2R1bGUsICJTeXN0ZW0uUnVudGltZS5Db21waWxlclNlcnZpY2VzIiwgIklzUmVhZE9ubHlBdHRy aWJ1dGUiKTsKKysJCQlJc0J5UmVmTGlrZSA9IG5ldyBQcmVkZWZpbmVkQXR0cmlidXRlIChtb2R1 bGUsICJTeXN0ZW0uUnVudGltZS5Db21waWxlclNlcnZpY2VzIiwgIklzQnlSZWZMaWtlQXR0cmli dXRlIik7CisgCisgCQkJLy8gVE9ETzogU2hvdWxkIGRlZmluZSBvbmx5IGF0dHJpYnV0ZXMgd2hp Y2ggYXJlIHVzZWQgZm9yIGNvbXBhcmlzb24KKyAJCQljb25zdCBTeXN0ZW0uUmVmbGVjdGlvbi5C aW5kaW5nRmxhZ3MgYWxsX2ZpZWxkcyA9IFN5c3RlbS5SZWZsZWN0aW9uLkJpbmRpbmdGbGFncy5Q dWJsaWMgfAorZGlmZiAtLWdpdCBhL21jcy9tY3MvY2xhc3MuY3MgYi9tY3MvbWNzL2NsYXNzLmNz CitpbmRleCA5YWZiMzJjNmZlNS4uNmIxYWRjMjk3YTMgMTAwNjQ0CistLS0gYS9tY3MvbWNzL2Ns YXNzLmNzCisrKysgYi9tY3MvbWNzL2NsYXNzLmNzCitAQCAtMjI0LDYgKzIyNCwyNCBAQCBuYW1l c3BhY2UgTW9uby5DU2hhcnAKKyAJCQl9CisgCQl9CisgCisrCQlwdWJsaWMgdm9pZCBDbG9zZUNv bnRhaW5lckVhcmx5Rm9yUmVmbGVjdGlvbkVtaXQgKCkKKysJCXsKKysJCQlpZiAoY29udGFpbmVy cyAhPSBudWxsKSB7CisrCQkJCWZvcmVhY2ggKFR5cGVDb250YWluZXIgdGMgaW4gY29udGFpbmVy cykgeworKwkJCQkJLy8KKysJCQkJCS8vIFNSRSByZXF1aXJlcyBkdWUgdG8gaW50ZXJuYWwgY2hl Y2tzIHRoYXQgYW55IGZpZWxkIG9mIGVudW0gdHlwZSBpcworKwkJCQkJLy8gYmFrZWQuIFdlIGNs b3NlIGFsbCBlbnVtIHR5cGVzIGJlZm9yZSBjbG9zaW5nIGFueSBvdGhlciB0eXBlcyB0bworKwkJ CQkJLy8gd29ya2Fyb3VuZCB0aGlzIGxpbWl0YXRpb24KKysJCQkJCS8vCisrCQkJCQlpZiAodGMu S2luZCA9PSBNZW1iZXJLaW5kLkVudW0pIHsKKysJCQkJCQl0Yy5DbG9zZUNvbnRhaW5lciAoKTsK KysJCQkJCX0gZWxzZSB7CisrCQkJCQkJdGMuQ2xvc2VDb250YWluZXJFYXJseUZvclJlZmxlY3Rp b25FbWl0ICgpOworKwkJCQkJfQorKwkJCQl9CisrCQkJfQorKwkJfQorKworIAkJcHVibGljIHZp cnR1YWwgdm9pZCBDcmVhdGVNZXRhZGF0YU5hbWUgKFN0cmluZ0J1aWxkZXIgc2IpCisgCQl7Cisg CQkJaWYgKFBhcmVudCAhPSBudWxsICYmIFBhcmVudC5NZW1iZXJOYW1lICE9IG51bGwpCitAQCAt MTEwMiw2ICsxMTIwLDE4IEBAIG5hbWVzcGFjZSBNb25vLkNTaGFycAorIAkJCQltZW1iZXIuR2Vu ZXJhdGVEb2NDb21tZW50IChidWlsZGVyKTsKKyAJCX0KKyAKKysJCXB1YmxpYyBUeXBlU3BlYyBH ZXRBc3luY01ldGhvZEJ1aWxkZXIgKCkKKysJCXsKKysJCQlpZiAoT3B0QXR0cmlidXRlcyA9PSBu dWxsKQorKwkJCQlyZXR1cm4gbnVsbDsKKysKKysJCQlBdHRyaWJ1dGUgYSA9IE9wdEF0dHJpYnV0 ZXMuU2VhcmNoIChNb2R1bGUuUHJlZGVmaW5lZEF0dHJpYnV0ZXMuQXN5bmNNZXRob2RCdWlsZGVy KTsKKysJCQlpZiAoYSA9PSBudWxsKQorKwkJCQlyZXR1cm4gbnVsbDsKKysKKysJCQlyZXR1cm4g YS5HZXRBc3luY01ldGhvZEJ1aWxkZXJWYWx1ZSAoKTsKKysJCX0KKysKKyAJCXB1YmxpYyBUeXBl U3BlYyBHZXRBdHRyaWJ1dGVDb0NsYXNzICgpCisgCQl7CisgCQkJaWYgKE9wdEF0dHJpYnV0ZXMg PT0gbnVsbCkKK0BAIC0yMTcxLDcgKzIyMDEsNyBAQCBuYW1lc3BhY2UgTW9uby5DU2hhcnAKKyAK KyAJCXB1YmxpYyBvdmVycmlkZSB2b2lkIEVtaXQgKCkKKyAJCXsKKy0JCQlpZiAoSW50ZXJmYWNl cyAhPSBudWxsKSB7CisrCQkJaWYgKEludGVyZmFjZXMgIT0gbnVsbCAmJiAoTW9kRmxhZ3MgJiBN b2RpZmllcnMuUFJJVkFURSkgPT0gMCkgeworIAkJCQlmb3JlYWNoICh2YXIgaWZhY2UgaW4gSW50 ZXJmYWNlcykgeworIAkJCQkJaWYgKGlmYWNlLkhhc05hbWVkVHVwbGVFbGVtZW50KSB7CisgCQkJ CQkJdGhyb3cgbmV3IE5vdEltcGxlbWVudGVkRXhjZXB0aW9uICgibmFtZWQgdHVwbGVzIGZvciAu aW50ZXJmYWNlaW1wbCIpOworQEAgLTMwMjMsNyArMzA1Myw4IEBAIG5hbWVzcGFjZSBNb25vLkNT aGFycAorIAkJCU1vZGlmaWVycy5JTlRFUk5BTCAgfAorIAkJCU1vZGlmaWVycy5VTlNBRkUgICAg fAorIAkJCU1vZGlmaWVycy5QUklWQVRFICAgfAorLQkJCU1vZGlmaWVycy5SRUFET05MWTsKKysJ CQlNb2RpZmllcnMuUkVBRE9OTFkgIHwKKysJCQlNb2RpZmllcnMuUkVGOworIAorIAkJcHVibGlj IFN0cnVjdCAoVHlwZUNvbnRhaW5lciBwYXJlbnQsIE1lbWJlck5hbWUgbmFtZSwgTW9kaWZpZXJz IG1vZCwgQXR0cmlidXRlcyBhdHRycykKKyAJCQk6IGJhc2UgKHBhcmVudCwgbmFtZSwgYXR0cnMs IE1lbWJlcktpbmQuU3RydWN0KQorQEAgLTMxMzksNiArMzE3MCw5IEBAIG5hbWVzcGFjZSBNb25v LkNTaGFycAorIAkJCWlmICgoTW9kRmxhZ3MgJiBNb2RpZmllcnMuUkVBRE9OTFkpICE9IDApCisg CQkJCU1vZHVsZS5QcmVkZWZpbmVkQXR0cmlidXRlcy5Jc1JlYWRPbmx5LkVtaXRBdHRyaWJ1dGUg KFR5cGVCdWlsZGVyKTsKKyAKKysJCQlpZiAoKE1vZEZsYWdzICYgTW9kaWZpZXJzLlJFRikgIT0g MCkKKysJCQkJTW9kdWxlLlByZWRlZmluZWRBdHRyaWJ1dGVzLklzQnlSZWZMaWtlLkVtaXRBdHRy aWJ1dGUgKFR5cGVCdWlsZGVyKTsKKysKKyAJCQlDaGVja1N0cnVjdEN5Y2xlcyAoKTsKKyAKKyAJ CQliYXNlLkVtaXQgKCk7CitAQCAtMzIxMyw2ICszMjQ3LDEwIEBAIG5hbWVzcGFjZSBNb25vLkNT aGFycAorIAkJcHJvdGVjdGVkIG92ZXJyaWRlIFR5cGVTcGVjW10gUmVzb2x2ZUJhc2VUeXBlcyAo b3V0IEZ1bGxOYW1lZEV4cHJlc3Npb24gYmFzZV9jbGFzcykKKyAJCXsKKyAJCQl2YXIgaWZhY2Vz ID0gYmFzZS5SZXNvbHZlQmFzZVR5cGVzIChvdXQgYmFzZV9jbGFzcyk7CisrCQkJaWYgKGlmYWNl cyAhPSBudWxsICYmIChNb2RGbGFncyAmIE1vZGlmaWVycy5SRUYpICE9IDApIHsKKysJCQkJUmVw b3J0LkVycm9yICg4MzQzLCBMb2NhdGlvbiwgImB7MH0nOiByZWYgc3RydWN0cyBjYW5ub3QgaW1w bGVtZW50IGludGVyZmFjZXMiLCBHZXRTaWduYXR1cmVGb3JFcnJvciAoKSk7CisrCQkJfQorKwor IAkJCWJhc2VfdHlwZSA9IENvbXBpbGVyLkJ1aWx0aW5UeXBlcy5WYWx1ZVR5cGU7CisgCQkJcmV0 dXJuIGlmYWNlczsKKyAJCX0KK0BAIC0zOTE1LDcgKzM5NTMsNyBAQCBuYW1lc3BhY2UgTW9uby5D U2hhcnAKKyAKKyAJCXByb3RlY3RlZCB2b2lkIElzVHlwZVBlcm1pdHRlZCAoKQorIAkJeworLQkJ CWlmIChNZW1iZXJUeXBlLklzU3BlY2lhbFJ1bnRpbWVUeXBlKSB7CisrCQkJaWYgKE1lbWJlclR5 cGUuSXNTcGVjaWFsUnVudGltZVR5cGUgfHwgTWVtYmVyVHlwZS5Jc0J5UmVmTGlrZSkgeworIAkJ CQlpZiAoUGFyZW50IGlzIFN0YXRlTWFjaGluZSkgeworIAkJCQkJUmVwb3J0LkVycm9yICg0MDEy LCBMb2NhdGlvbiwKKyAJCQkJCQkiUGFyYW1ldGVycyBvciBsb2NhbCB2YXJpYWJsZXMgb2YgdHlw ZSBgezB9JyBjYW5ub3QgYmUgZGVjbGFyZWQgaW4gYXN5bmMgbWV0aG9kcyBvciBpdGVyYXRvcnMi LAorQEAgLTM5MjQsNiArMzk2MiwxOSBAQCBuYW1lc3BhY2UgTW9uby5DU2hhcnAKKyAJCQkJCVJl cG9ydC5FcnJvciAoNDAxMywgTG9jYXRpb24sCisgCQkJCQkJIkxvY2FsIHZhcmlhYmxlcyBvZiB0 eXBlIGB7MH0nIGNhbm5vdCBiZSB1c2VkIGluc2lkZSBhbm9ueW1vdXMgbWV0aG9kcywgbGFtYmRh IGV4cHJlc3Npb25zIG9yIHF1ZXJ5IGV4cHJlc3Npb25zIiwKKyAJCQkJCQlNZW1iZXJUeXBlLkdl dFNpZ25hdHVyZUZvckVycm9yICgpKTsKKysJCQkJfSBlbHNlIGlmIChNZW1iZXJUeXBlLklzQnlS ZWZMaWtlKSB7CisrCQkJCQlpZiAoKE1vZEZsYWdzICYgKE1vZGlmaWVycy5BQlNUUkFDVCB8IE1v ZGlmaWVycy5FWFRFUk4pKSAhPSAwKQorKwkJCQkJCXJldHVybjsKKysKKysJCQkJCWlmICgoTW9k RmxhZ3MgJiBNb2RpZmllcnMuQXV0b1Byb3BlcnR5KSA9PSAwICYmIHRoaXMgaXMgUHJvcGVydHkp CisrCQkJCQkJcmV0dXJuOworKworKwkJCQkJaWYgKChNb2RGbGFncyAmIE1vZGlmaWVycy5TVEFU SUMpID09IDAgJiYgKFBhcmVudC5Nb2RGbGFncyAmIE1vZGlmaWVycy5SRUYpICE9IDApCisrCQkJ CQkJcmV0dXJuOworKworKwkJCQkJUmVwb3J0LkVycm9yICg4MzQ1LCBMb2NhdGlvbiwKKysJCQkJ CQkiRmllbGQgb3IgYXV0by1pbXBsZW1lbnRlZCBwcm9wZXJ0eSBjYW5ub3QgYmUgb2YgdHlwZSBg ezB9JyB1bmxlc3MgaXQgaXMgYW4gaW5zdGFuY2UgbWVtYmVyIG9mIGEgcmVmIHN0cnVjdCIsCisr CQkJCQkJTWVtYmVyVHlwZS5HZXRTaWduYXR1cmVGb3JFcnJvciAoKSk7CisgCQkJCX0gZWxzZSB7 CisgCQkJCQlSZXBvcnQuRXJyb3IgKDYxMCwgTG9jYXRpb24sIAorIAkJCQkJCSJGaWVsZCBvciBw cm9wZXJ0eSBjYW5ub3QgYmUgb2YgdHlwZSBgezB9JyIsIE1lbWJlclR5cGUuR2V0U2lnbmF0dXJl Rm9yRXJyb3IgKCkpOworZGlmZiAtLWdpdCBhL21jcy9tY3MvY29uc3QuY3MgYi9tY3MvbWNzL2Nv bnN0LmNzCitpbmRleCAwNDZhZWMyNGMxYi4uNjU4ZjE1ZWM1N2EgMTAwNjQ0CistLS0gYS9tY3Mv bWNzL2NvbnN0LmNzCisrKysgYi9tY3MvbWNzL2NvbnN0LmNzCitAQCAtMjA2LDcgKzIwNiw5IEBA IG5hbWVzcGFjZSBNb25vLkNTaGFycCB7CisgCQkJCQljID0gZmllbGQuQ29udmVydEluaXRpYWxp emVyIChyYywgYyk7CisgCisgCQkJCWlmIChjID09IG51bGwpIHsKKy0JCQkJCWlmIChUeXBlU3Bl Yy5Jc1JlZmVyZW5jZVR5cGUgKGZpZWxkLk1lbWJlclR5cGUpKQorKwkJCQkJaWYgKGV4cHIgaXMg RGVmYXVsdExpdGVyYWxFeHByZXNzaW9uKSB7CisrCQkJCQkJLy8gSXQncyBoYW5kbGVkIGJlbGxv dyBpbiBOZXcuQ29uc3RhbnRpZnkKKysJCQkJCX0gZWxzZSBpZiAoVHlwZVNwZWMuSXNSZWZlcmVu Y2VUeXBlIChmaWVsZC5NZW1iZXJUeXBlKSkKKyAJCQkJCQlFcnJvcl9Db25zdGFudENhbkJlSW5p dGlhbGl6ZWRXaXRoTnVsbE9ubHkgKHJjLCBmaWVsZC5NZW1iZXJUeXBlLCBleHByLkxvY2F0aW9u LCBHZXRTaWduYXR1cmVGb3JFcnJvciAoKSk7CisgCQkJCQllbHNlIGlmICghKGV4cHIgaXMgQ29u c3RhbnQpKQorIAkJCQkJCUVycm9yX0V4cHJlc3Npb25NdXN0QmVDb25zdGFudCAocmMsIGV4cHIu TG9jYXRpb24sIEdldFNpZ25hdHVyZUZvckVycm9yICgpKTsKK2RpZmYgLS1naXQgYS9tY3MvbWNz L2NvbnZlcnQuY3MgYi9tY3MvbWNzL2NvbnZlcnQuY3MKK2luZGV4IGIxMTQ3N2MxMDQzLi5hZTE1 M2ZjNDllOCAxMDA2NDQKKy0tLSBhL21jcy9tY3MvY29udmVydC5jcworKysrIGIvbWNzL21jcy9j b252ZXJ0LmNzCitAQCAtMzkyLDYgKzM5Miw5IEBAIG5hbWVzcGFjZSBNb25vLkNTaGFycCB7Cisg CQkJCWlmICghVHlwZVNwZWMuSXNWYWx1ZVR5cGUgKGV4cHJfdHlwZSkpCisgCQkJCQlyZXR1cm4g bnVsbDsKKyAKKysJCQkJaWYgKGV4cHJfdHlwZS5Jc0J5UmVmTGlrZSkKKysJCQkJCXJldHVybiBu dWxsOworKworIAkJCQlyZXR1cm4gZXhwciA9PSBudWxsID8gRW1wdHlFeHByZXNzaW9uLk51bGwg OiBuZXcgQm94ZWRDYXN0IChleHByLCB0YXJnZXRfdHlwZSk7CisgCisgCQkJY2FzZSBCdWlsdGlu VHlwZVNwZWMuVHlwZS5FbnVtOgorQEAgLTgxNiw3ICs4MTksNyBAQCBuYW1lc3BhY2UgTW9uby5D U2hhcnAgeworIAkJCWlmIChleHByX3R5cGUgPT0gdGFyZ2V0X3R5cGUpCisgCQkJCXJldHVybiB0 cnVlOworIAorLQkJCWlmIChleHByX3R5cGUgPT0gSW50ZXJuYWxUeXBlLlRocm93RXhwcikKKysJ CQlpZiAoZXhwcl90eXBlID09IEludGVybmFsVHlwZS5UaHJvd0V4cHIgfHwgZXhwcl90eXBlID09 IEludGVybmFsVHlwZS5EZWZhdWx0VHlwZSkKKyAJCQkJcmV0dXJuIHRhcmdldF90eXBlLktpbmQg IT0gTWVtYmVyS2luZC5JbnRlcm5hbENvbXBpbGVyVHlwZTsKKyAKKyAJCQlpZiAodGFyZ2V0X3R5 cGUuSXNOdWxsYWJsZVR5cGUpCitAQCAtMTQ3OCw2ICsxNDgxLDEwIEBAIG5hbWVzcGFjZSBNb25v LkNTaGFycCB7CisgCQkJCXJldHVybiB0YXJnZXRfdHlwZS5LaW5kID09IE1lbWJlcktpbmQuSW50 ZXJuYWxDb21waWxlclR5cGUgPyBudWxsIDogRW1wdHlDYXN0LkNyZWF0ZSAoZXhwciwgdGFyZ2V0 X3R5cGUpOworIAkJCX0KKyAKKysJCQlpZiAoZXhwcl90eXBlID09IEludGVybmFsVHlwZS5EZWZh dWx0VHlwZSkgeworKwkJCQlyZXR1cm4gbmV3IERlZmF1bHRWYWx1ZUV4cHJlc3Npb24gKG5ldyBU eXBlRXhwcmVzc2lvbiAodGFyZ2V0X3R5cGUsIGV4cHIuTG9jYXRpb24pLCBleHByLkxvY2F0aW9u KS5SZXNvbHZlIChlYyk7CisrCQkJfQorKworIAkJCWlmICh0YXJnZXRfdHlwZS5Jc051bGxhYmxl VHlwZSkKKyAJCQkJcmV0dXJuIEltcGxpY2l0TnVsYWJsZUNvbnZlcnNpb24gKGVjLCBleHByLCB0 YXJnZXRfdHlwZSk7CisgCitAQCAtMTk2Nyw3ICsxOTc0LDcgQEAgbmFtZXNwYWNlIE1vbm8uQ1No YXJwIHsKKyAJCQkvLyBGcm9tIG9iamVjdCBvciBkeW5hbWljIHRvIGFueSByZWZlcmVuY2UgdHlw ZSBvciB2YWx1ZSB0eXBlICh1bmJveGluZykKKyAJCQkvLworIAkJCWlmIChzb3VyY2VfdHlwZS5C dWlsdGluVHlwZSA9PSBCdWlsdGluVHlwZVNwZWMuVHlwZS5PYmplY3QgfHwgc291cmNlX3R5cGUu QnVpbHRpblR5cGUgPT0gQnVpbHRpblR5cGVTcGVjLlR5cGUuRHluYW1pYykgeworLQkJCQlpZiAo dGFyZ2V0X3R5cGUuSXNQb2ludGVyKQorKwkJCQlpZiAodGFyZ2V0X3R5cGUuSXNQb2ludGVyIHx8 IHRhcmdldF90eXBlLklzQnlSZWZMaWtlKQorIAkJCQkJcmV0dXJuIG51bGw7CisgCisgCQkJCXJl dHVybgorZGlmZiAtLWdpdCBhL21jcy9tY3MvY3MtcGFyc2VyLmpheSBiL21jcy9tY3MvY3MtcGFy c2VyLmpheQoraW5kZXggMjg2OGQyZmQ4ZjYuLjRkNmZjYjQ0YzBkIDEwMDY0NAorLS0tIGEvbWNz L21jcy9jcy1wYXJzZXIuamF5CisrKysgYi9tY3MvbWNzL2NzLXBhcnNlci5qYXkKK0BAIC0xNjks NyArMTY5LDggQEAgbmFtZXNwYWNlIE1vbm8uQ1NoYXJwCisgJXRva2VuIENPTlNUCQorICV0b2tl biBDT05USU5VRQkKKyAldG9rZW4gREVDSU1BTAkKKy0ldG9rZW4gREVGQVVMVAkKKysldG9rZW4g REVGQVVMVAorKyV0b2tlbiBERUZBVUxUX1ZBTFVFCisgJXRva2VuIERFTEVHQVRFCQorICV0b2tl biBETwkKKyAldG9rZW4gRE9VQkxFCQorQEAgLTMzNiw2ICszMzcsNyBAQCBuYW1lc3BhY2UgTW9u by5DU2hhcnAKKyAldG9rZW4gREVGQVVMVF9DT0xPTgorICV0b2tlbiBPUEVOX0JSQUNLRVRfRVhQ UgorICV0b2tlbiBPUEVOX1BBUkVOU19ERUNPTlNUUlVDVAorKyV0b2tlbiBSRUZfU1RSVUNUCisg CisgLy8gTWFrZSB0aGUgcGFyc2VyIGdvIGludG8gZXZhbCBtb2RlIHBhcnNpbmcgKHN0YXRlbWVu dHMgYW5kIGNvbXBpbGF0aW9uIHVuaXRzKS4KKyAldG9rZW4gRVZBTF9TVEFURU1FTlRfUEFSU0VS CitAQCAtODYzLDcgKzg2NSw3IEBAIGF0dHJpYnV0ZV9hcmd1bWVudHMKKyAJCX0KKyAJCQorIAkJ QXJndW1lbnRzIGFyZ3MgPSAoKEFyZ3VtZW50cykgbyBbMF0pOworLQkJaWYgKGFyZ3MuQ291bnQg PiAwICYmICEoJDMgaXMgTmFtZWRBcmd1bWVudCkgJiYgYXJncyBbYXJncy5Db3VudCAtIDFdIGlz IE5hbWVkQXJndW1lbnQpCisrCQlpZiAobGFuZ192ZXJzaW9uIDwgTGFuZ3VhZ2VWZXJzaW9uLlZf N18yICYmIGFyZ3MuQ291bnQgPiAwICYmICEoJDMgaXMgTmFtZWRBcmd1bWVudCkgJiYgYXJncyBb YXJncy5Db3VudCAtIDFdIGlzIE5hbWVkQXJndW1lbnQpCisgCQkJRXJyb3JfTmFtZWRBcmd1bWVu dEV4cGVjdGVkICgoTmFtZWRBcmd1bWVudCkgYXJncyBbYXJncy5Db3VudCAtIDFdKTsKKyAJCQor IAkJYXJncy5BZGQgKChBcmd1bWVudCkgJDMpOworQEAgLTEwMTUsMTcgKzEwMTcsMzQgQEAgcHJp bWFyeV9jb25zdHJ1Y3Rvcl9ib2R5CisgCSAgfQorIAk7CisgCisrc3RydWN0X2tleXdvcmQKKysJ OiBTVFJVQ1QKKysJICB7CisrCQkkJCA9IG51bGw7CisrCSAgfQorKwl8IFJFRl9TVFJVQ1QKKysJ ICB7CisrCQlpZiAobGFuZ192ZXJzaW9uIDwgTGFuZ3VhZ2VWZXJzaW9uLlZfN18yKSB7CisrCQkJ RmVhdHVyZUlzTm90QXZhaWxhYmxlIChHZXRMb2NhdGlvbiAoJDEpLCAicmVmIHN0cnVjdHMiKTsK KysJCX0KKysKKysJCSQkID0gdGhpczsKKysJICB9CisrCTsKKysKKyBzdHJ1Y3RfZGVjbGFyYXRp b24KKyAJOiBvcHRfYXR0cmlidXRlcworIAkgIG9wdF9tb2RpZmllcnMKKyAJICBvcHRfcGFydGlh bAorLQkgIFNUUlVDVAorKwkgIHN0cnVjdF9rZXl3b3JkCisgCSAgdHlwZV9kZWNsYXJhdGlvbl9u YW1lCisgCSAgeworIAkJdmFyIG1vZHMgPSAoTW9kaWZpZXJzKSAkMjsKKyAJCWlmICgobW9kcyAm IE1vZGlmaWVycy5SRUFET05MWSkgIT0gMCAmJiBsYW5nX3ZlcnNpb24gPCBMYW5ndWFnZVZlcnNp b24uVl83XzIpIHsKKyAJCQlGZWF0dXJlSXNOb3RBdmFpbGFibGUgKEdldExvY2F0aW9uICgkNCks ICJyZWFkb25seSBzdHJ1Y3RzIik7CisgCQl9CisrCQlpZiAoJDQgIT0gbnVsbCkKKysJCQltb2Rz IHw9IE1vZGlmaWVycy5SRUY7CisgCisgCQlsZXhlci5Db25zdHJhaW50c1BhcnNpbmcgPSB0cnVl OworIAkJdmFsaWRfcGFyYW1fbW9kID0gUGFyYW1ldGVyTW9kaWZpZXJUeXBlLlByaW1hcnlDb25z dHJ1Y3RvcjsKK0BAIC0xMDcxLDcgKzEwOTAsNyBAQCBzdHJ1Y3RfZGVjbGFyYXRpb24KKyAJCX0K KyAJCSQkID0gcG9wX2N1cnJlbnRfY2xhc3MgKCk7CisgCSAgfQorLQl8IG9wdF9hdHRyaWJ1dGVz IG9wdF9tb2RpZmllcnMgb3B0X3BhcnRpYWwgU1RSVUNUIGVycm9yCisrCXwgb3B0X2F0dHJpYnV0 ZXMgb3B0X21vZGlmaWVycyBvcHRfcGFydGlhbCBzdHJ1Y3Rfa2V5d29yZCBlcnJvcgorIAkgIHsK KyAJCUVycm9yX1N5bnRheEVycm9yICh5eVRva2VuKTsKKyAJICB9CitAQCAtMTM4NCw2ICsxNDAz LDE4IEBAIHJlZl9tZW1iZXJfdHlwZQorIAorIAkJJCQgPSBuZXcgUmVmZXJlbmNlVHlwZUV4cHIg KChGdWxsTmFtZWRFeHByZXNzaW9uKSAkMywgR2V0TG9jYXRpb24gKCQxKSk7CisgCSAgfQorKwl8 IFJFRiBSRUFET05MWQorKwkgIHsKKysJCWxleGVyLnBhcnNpbmdfZ2VuZXJpY19kZWNsYXJhdGlv biA9IHRydWU7CisrCSAgfQorKwkgIHR5cGUKKysJICB7CisrCQlpZiAobGFuZ192ZXJzaW9uIDwg TGFuZ3VhZ2VWZXJzaW9uLlZfN18yKSB7CisrCQkJRmVhdHVyZUlzTm90QXZhaWxhYmxlIChHZXRM b2NhdGlvbiAoJDIpLCAicmVhZG9ubHkgcmVmZXJlbmNlcyIpOworKwkJfQorKworKwkJJCQgPSBu ZXcgUmVmZXJlbmNlVHlwZUV4cHIgKChGdWxsTmFtZWRFeHByZXNzaW9uKSAkNCwgdHJ1ZSwgR2V0 TG9jYXRpb24gKCQxKSk7CisrCSAgfQorIAk7CisgCisgbWV0aG9kX2hlYWRlcgorQEAgLTM0NDgs NiArMzQ3OSw3IEBAIHByaW1hcnlfZXhwcmVzc2lvbgorIAl8IGFub255bW91c19tZXRob2RfZXhw cmVzc2lvbgorIAl8IHVuZG9jdW1lbnRlZF9leHByZXNzaW9ucworIAl8IGludGVycG9sYXRlZF9z dHJpbmcKKysJfCBkZWZhdWx0X2xpdGVyYWwKKyAJOworIAorIHR5cGVfbmFtZV9leHByZXNzaW9u CitAQCAtMzgyNCw3ICszODU2LDcgQEAgYXJndW1lbnRfbGlzdAorIAl8IGFyZ3VtZW50X2xpc3Qg Q09NTUEgYXJndW1lbnQKKyAJICB7CisgCQlBcmd1bWVudHMgbGlzdCA9IChBcmd1bWVudHMpICQx OworLQkJaWYgKGxpc3QgW2xpc3QuQ291bnQgLSAxXSBpcyBOYW1lZEFyZ3VtZW50KQorKwkJaWYg KGxhbmdfdmVyc2lvbiA8IExhbmd1YWdlVmVyc2lvbi5WXzdfMiAmJiBsaXN0IFtsaXN0LkNvdW50 IC0gMV0gaXMgTmFtZWRBcmd1bWVudCkKKyAJCQlFcnJvcl9OYW1lZEFyZ3VtZW50RXhwZWN0ZWQg KChOYW1lZEFyZ3VtZW50KSBsaXN0IFtsaXN0LkNvdW50IC0gMV0pOworIAkJCisgCQlsaXN0LkFk ZCAoKEFyZ3VtZW50KSAkMyk7CitAQCAtMzk2OSw3ICs0MDAxLDcgQEAgZXhwcmVzc2lvbl9saXN0 X2FyZ3VtZW50cworIAl8IGV4cHJlc3Npb25fbGlzdF9hcmd1bWVudHMgQ09NTUEgZXhwcmVzc2lv bl9saXN0X2FyZ3VtZW50CisgCSAgeworIAkJQXJndW1lbnRzIGFyZ3MgPSAoQXJndW1lbnRzKSAk MTsKKy0JCWlmIChhcmdzIFthcmdzLkNvdW50IC0gMV0gaXMgTmFtZWRBcmd1bWVudCAmJiAhKCQz IGlzIE5hbWVkQXJndW1lbnQpKQorKwkJaWYgKGxhbmdfdmVyc2lvbiA8IExhbmd1YWdlVmVyc2lv bi5WXzdfMiAmJiBhcmdzIFthcmdzLkNvdW50IC0gMV0gaXMgTmFtZWRBcmd1bWVudCAmJiAhKCQz IGlzIE5hbWVkQXJndW1lbnQpKQorIAkJCUVycm9yX05hbWVkQXJndW1lbnRFeHBlY3RlZCAoKE5h bWVkQXJndW1lbnQpIGFyZ3MgW2FyZ3MuQ291bnQgLSAxXSk7CisgCSAgCisgCQlhcmdzLkFkZCAo KEFyZ3VtZW50KSAkMyk7CitAQCAtNDM4Niw3ICs0NDE4LDcgQEAgYW5vbnltb3VzX21ldGhvZF9z aWduYXR1cmUKKyAJOworIAorIGRlZmF1bHRfdmFsdWVfZXhwcmVzc2lvbgorLQk6IERFRkFVTFQg b3Blbl9wYXJlbnNfYW55IHR5cGUgQ0xPU0VfUEFSRU5TCisrCTogREVGQVVMVF9WQUxVRSBvcGVu X3BhcmVuc19hbnkgdHlwZSBDTE9TRV9QQVJFTlMKKyAJICB7CisgCQlpZiAobGFuZ192ZXJzaW9u IDwgTGFuZ3VhZ2VWZXJzaW9uLklTT18yKQorIAkJCUZlYXR1cmVJc05vdEF2YWlsYWJsZSAoR2V0 TG9jYXRpb24gKCQxKSwgImRlZmF1bHQgdmFsdWUgZXhwcmVzc2lvbiIpOworQEAgLTQzOTYsNiAr NDQyOCwxNiBAQCBkZWZhdWx0X3ZhbHVlX2V4cHJlc3Npb24KKyAJICB9CisgCTsKKyAKKytkZWZh dWx0X2xpdGVyYWwKKysJOiBERUZBVUxUCisrCSAgeworKwkJaWYgKGxhbmdfdmVyc2lvbiA8IExh bmd1YWdlVmVyc2lvbi5WXzdfMSkKKysJCQlGZWF0dXJlSXNOb3RBdmFpbGFibGUgKEdldExvY2F0 aW9uICgkMSksICJkZWZhdWx0IGxpdGVyYWwiKTsKKysKKysJCSQkID0gbmV3IERlZmF1bHRMaXRl cmFsRXhwcmVzc2lvbiAoR2V0TG9jYXRpb24gKCQxKSk7CisrCSAgfQorKwk7CisrCisgdW5hcnlf ZXhwcmVzc2lvbgorIAk6IHByaW1hcnlfZXhwcmVzc2lvbgorIAl8IEJBTkcgcHJlZml4ZWRfdW5h cnlfZXhwcmVzc2lvbgorQEAgLTQ3NTAsNyArNDc5Miw3IEBAIHBhdHRlcm5fbGlzdAorIAl8IHBh dHRlcm5fbGlzdCBDT01NQSBwYXR0ZXJuX2FyZ3VtZW50CisgCSAgeworIAkJQXJndW1lbnRzIGFy Z3MgPSAoQXJndW1lbnRzKSAkMTsKKy0JCWlmIChhcmdzIFthcmdzLkNvdW50IC0gMV0gaXMgTmFt ZWRBcmd1bWVudCAmJiAhKCQzIGlzIE5hbWVkQXJndW1lbnQpKQorKwkJaWYgKGxhbmdfdmVyc2lv biA8IExhbmd1YWdlVmVyc2lvbi5WXzdfMiAmJiBhcmdzIFthcmdzLkNvdW50IC0gMV0gaXMgTmFt ZWRBcmd1bWVudCAmJiAhKCQzIGlzIE5hbWVkQXJndW1lbnQpKQorIAkJCUVycm9yX05hbWVkQXJn dW1lbnRFeHBlY3RlZCAoKE5hbWVkQXJndW1lbnQpIGFyZ3MgW2FyZ3MuQ291bnQgLSAxXSk7Cisg CisgCQlhcmdzLkFkZCAoKEFyZ3VtZW50KSAkMyk7CitAQCAtNTA2NywxNyArNTEwOSwyNSBAQCBh c3NpZ25tZW50X2V4cHJlc3Npb24KKyAJCSQkID0gbmV3IENvbXBvdW5kQXNzaWduIChCaW5hcnku T3BlcmF0b3IuRXhjbHVzaXZlT3IsIChFeHByZXNzaW9uKSAkMSwgKEV4cHJlc3Npb24pICQzKTsK KyAJCWxiYWcuQWRkTG9jYXRpb24gKCQkLCBHZXRMb2NhdGlvbiAoJDIpKTsKKyAJICB9CistCXwg T1BFTl9QQVJFTlNfREVDT05TVFJVQ1QgZGVjb25zdHJ1Y3RfZXhwcnMgQ0xPU0VfUEFSRU5TIEFT U0lHTiBleHByZXNzaW9uCisrCXwgT1BFTl9QQVJFTlNfREVDT05TVFJVQ1QgZGVjb25zdHJ1Y3Rf YXNzaWdubWVudCBDTE9TRV9QQVJFTlMgQVNTSUdOIGV4cHJlc3Npb24KKyAJICB7CisgCQlpZiAo bGFuZ192ZXJzaW9uIDwgTGFuZ3VhZ2VWZXJzaW9uLlZfNykKKyAJCQlGZWF0dXJlSXNOb3RBdmFp bGFibGUgKEdldExvY2F0aW9uICgkMSksICJ0dXBsZXMiKTsKKyAKKy0JICAJdmFyIGV4cHJzID0g KExpc3Q8RXhwcmVzc2lvbj4pICQyOworKwkJdmFyIGV4cHJzID0gKExpc3Q8RXhwcmVzc2lvbj4p ICQyOworKwkJJCQgPSBuZXcgVHVwbGVEZWNvbnN0cnVjdCAoZXhwcnMsIChFeHByZXNzaW9uKSAk NSwgR2V0TG9jYXRpb24gKCQ0KSk7CisrCSAgfQorKwl8IE9QRU5fUEFSRU5TX0RFQ09OU1RSVUNU IGRlY29uc3RydWN0X2RlY2xhcmF0aW9uIENMT1NFX1BBUkVOUyBBU1NJR04gZXhwcmVzc2lvbgor KwkgIHsKKysJCWlmIChsYW5nX3ZlcnNpb24gPCBMYW5ndWFnZVZlcnNpb24uVl83KQorKwkJCUZl YXR1cmVJc05vdEF2YWlsYWJsZSAoR2V0TG9jYXRpb24gKCQxKSwgInR1cGxlcyIpOworKworKwkJ dmFyIGV4cHJzID0gKExpc3Q8QmxvY2tWYXJpYWJsZT4pICQyOworIAkJJCQgPSBuZXcgVHVwbGVE ZWNvbnN0cnVjdCAoZXhwcnMsIChFeHByZXNzaW9uKSAkNSwgR2V0TG9jYXRpb24gKCQ0KSk7Cisg CSAgfQorIAk7CisgCistZGVjb25zdHJ1Y3RfZXhwcnMKKytkZWNvbnN0cnVjdF9hc3NpZ25tZW50 CisgCTogZXhwcmVzc2lvbiBDT01NQSBleHByZXNzaW9uCisgCSAgeworIAkJJCQgPSBuZXcgTGlz dDxFeHByZXNzaW9uPiAoKSB7CitAQCAtNTA4NSw3ICs1MTM1LDcgQEAgZGVjb25zdHJ1Y3RfZXhw cnMKKyAJCQkoRXhwcmVzc2lvbikgJDMKKyAJICAJfTsKKyAJICB9CistCXwgZGVjb25zdHJ1Y3Rf ZXhwcnMgQ09NTUEgZXhwcmVzc2lvbgorKwl8IGRlY29uc3RydWN0X2Fzc2lnbm1lbnQgQ09NTUEg ZXhwcmVzc2lvbgorIAkgIHsKKyAJCXZhciBzcmMgPSAoTGlzdDxFeHByZXNzaW9uPikgJDE7Cisg CQlzcmMuQWRkICgoRXhwcmVzc2lvbikgJDMpOworQEAgLTUwOTMsNiArNTE0Myw0MyBAQCBkZWNv bnN0cnVjdF9leHBycworIAkgIH0KKyAJOworIAorK2RlY29uc3RydWN0X2RlY2xhcmF0aW9uCisr CTogdmFyaWFibGVfdHlwZSBpZGVudGlmaWVyX2luc2lkZV9ib2R5CisrCSAgeworKwkJdmFyIGx0 ID0gKExvY2F0ZWRUb2tlbikgJDI7CisrCQl2YXIgbGkgPSBuZXcgTG9jYWxWYXJpYWJsZSAoY3Vy cmVudF9ibG9jaywgbHQuVmFsdWUsIGx0LkxvY2F0aW9uKTsKKysJCWN1cnJlbnRfYmxvY2suQWRk TG9jYWxOYW1lIChsaSk7CisrCQkkJCA9IG5ldyBMaXN0PEJsb2NrVmFyaWFibGU+ICgyKSB7Cisr CQkJbmV3IEJsb2NrVmFyaWFibGUgKChGdWxsTmFtZWRFeHByZXNzaW9uKSAkMSwgbGkpCisrCQl9 OworKwkgIH0KKysJfCBkZWNvbnN0cnVjdF9kZWNsYXJhdGlvbiBDT01NQSB2YXJpYWJsZV90eXBl IGlkZW50aWZpZXJfaW5zaWRlX2JvZHkKKysJICB7CisrCQl2YXIgbHQgPSAoTG9jYXRlZFRva2Vu KSAkNDsKKysJCXZhciBsaSA9IG5ldyBMb2NhbFZhcmlhYmxlIChjdXJyZW50X2Jsb2NrLCBsdC5W YWx1ZSwgbHQuTG9jYXRpb24pOworKwkJY3VycmVudF9ibG9jay5BZGRMb2NhbE5hbWUgKGxpKTsK KysKKysJCXZhciBzcmMgPSAoTGlzdDxCbG9ja1ZhcmlhYmxlPikgJDE7CisrCQlzcmMuQWRkIChu ZXcgQmxvY2tWYXJpYWJsZSAoKEZ1bGxOYW1lZEV4cHJlc3Npb24pICQzLCBsaSkpOworKwkJJCQg PSBzcmM7CisrCSAgfQorKwl8IGRlY29uc3RydWN0X2RlY2xhcmF0aW9uIENPTU1BIGlkZW50aWZp ZXJfaW5zaWRlX2JvZHkKKysJICB7CisrCQl2YXIgbHQgPSAoTG9jYXRlZFRva2VuKSAkMzsKKysJ CXZhciBsaSA9IG5ldyBMb2NhbFZhcmlhYmxlIChjdXJyZW50X2Jsb2NrLCBsdC5WYWx1ZSwgbHQu TG9jYXRpb24pOworKworKwkJaWYgKGx0LlZhbHVlICE9ICJfIikgeworKwkJCXJlcG9ydC5FcnJv ciAoODE4NCwgbHQuTG9jYXRpb24sICJBIGRlY29uc3RydWN0aW9uIGNhbm5vdCBtaXggZGVjbGFy YXRpb25zIGFuZCBleHByZXNzaW9ucyBvbiB0aGUgbGVmdC1oYW5kLXNpZGUiKTsKKysJCX0gZWxz ZSB7CisrCQkJbGkuVHlwZSA9IEludGVybmFsVHlwZS5EaXNjYXJkOworKwkJfQorKworKwkJdmFy IHNyYyA9IChMaXN0PEJsb2NrVmFyaWFibGU+KSAkMTsKKysJCXNyYy5BZGQgKG5ldyBCbG9ja1Zh cmlhYmxlIChuZXcgVHlwZUV4cHJlc3Npb24gKGxpLlR5cGUsIGx0LkxvY2F0aW9uKSwgbGkpKTsK KysJCSQkID0gc3JjOworKwkgIH0KKysJOworKworIGxhbWJkYV9wYXJhbWV0ZXJfbGlzdAorIAk6 IGxhbWJkYV9wYXJhbWV0ZXIKKyAJICB7CitAQCAtNjAwOCw2ICs2MDk1LDI4IEBAIGJsb2NrX3Zh cmlhYmxlX2RlY2xhcmF0aW9uCisgCQkJbGJhZy5BZGRMb2NhdGlvbiAoJCQsIEdldExvY2F0aW9u ICgkNykpOworIAkJfQorIAkgIH0KKysJfCBSRUYgUkVBRE9OTFkgdmFyaWFibGVfdHlwZSBpZGVu dGlmaWVyX2luc2lkZV9ib2R5CisrCSAgeworKwkJaWYgKGxhbmdfdmVyc2lvbiA8IExhbmd1YWdl VmVyc2lvbi5WXzdfMikgeworKwkJCUZlYXR1cmVJc05vdEF2YWlsYWJsZSAoR2V0TG9jYXRpb24g KCQyKSwgInJlYWRvbmx5IHJlZmVyZW5jZXMiKTsKKysJCX0KKysKKysJCXZhciBsdCA9IChMb2Nh dGVkVG9rZW4pICQ0OworKwkJdmFyIGxpID0gbmV3IExvY2FsVmFyaWFibGUgKGN1cnJlbnRfYmxv Y2ssIGx0LlZhbHVlLCBMb2NhbFZhcmlhYmxlLkZsYWdzLkJ5UmVmIHwgTG9jYWxWYXJpYWJsZS5G bGFncy5SZWFkb25seU1hc2ssIGx0LkxvY2F0aW9uKTsKKysJCWN1cnJlbnRfYmxvY2suQWRkTG9j YWxOYW1lIChsaSk7CisrCQljdXJyZW50X3ZhcmlhYmxlID0gbmV3IEJsb2NrVmFyaWFibGUgKChG dWxsTmFtZWRFeHByZXNzaW9uKSAkMywgbGkpOworKwkgIH0KKysJICBvcHRfbG9jYWxfdmFyaWFi bGVfaW5pdGlhbGl6ZXIgb3B0X3ZhcmlhYmxlX2RlY2xhcmF0b3JzIFNFTUlDT0xPTgorKwkgIHsK KysJCSQkID0gY3VycmVudF92YXJpYWJsZTsKKysJCWN1cnJlbnRfdmFyaWFibGUgPSBudWxsOwor KwkJaWYgKCQ2ICE9IG51bGwpIHsKKysJCQlsYmFnLkFkZExvY2F0aW9uICgkJCwgUG9wTG9jYXRp b24gKCksIEdldExvY2F0aW9uICgkOCkpOworKwkJfSBlbHNlIHsKKysJCQlyZXBvcnQuRXJyb3Ig KDgxNzQsIEdldExvY2F0aW9uICgkMyksICJBIGRlY2xhcmF0aW9uIG9mIGEgYnktcmVmZXJlbmNl IHZhcmlhYmxlIG11c3QgaGF2ZSBhbiBpbml0aWFsaXplciIpOworKwkJCWxiYWcuQWRkTG9jYXRp b24gKCQkLCBHZXRMb2NhdGlvbiAoJDgpKTsKKysJCX0KKysJICB9CisgCTsKKyAKKyBvcHRfbG9j YWxfdmFyaWFibGVfaW5pdGlhbGl6ZXIKK0BAIC03NzMxLDcgKzc4NDAsNyBAQCB2b2lkIFdhcm5p bmdfRW1wdHlTdGF0ZW1lbnQgKExvY2F0aW9uIGxvYykKKyAKKyB2b2lkIEVycm9yX05hbWVkQXJn dW1lbnRFeHBlY3RlZCAoTmFtZWRBcmd1bWVudCBhKQorIHsKKy0JcmVwb3J0LkVycm9yICgxNzM4 LCBhLkxvY2F0aW9uLCAiTmFtZWQgYXJndW1lbnRzIG11c3QgYXBwZWFyIGFmdGVyIHRoZSBwb3Np dGlvbmFsIGFyZ3VtZW50cyIpOworKwlyZXBvcnQuRXJyb3IgKDE3MzgsIGEuTG9jYXRpb24sICJO YW1lZCBhcmd1bWVudHMgbXVzdCBhcHBlYXIgYWZ0ZXIgdGhlIHBvc2l0aW9uYWwgYXJndW1lbnRz IHdoZW4gdXNpbmcgbGFuZ3VhZ2UgdmVyc2lvbiBvbGRlciB0aGFuIDcuMiIpOworIH0KKyAKKyB2 b2lkIEVycm9yX01pc3NpbmdJbml0aWFsaXplciAoTG9jYXRpb24gbG9jKQorQEAgLTgyNTUsNiAr ODM2NCw3IEBAIHN0YXRpYyBzdHJpbmcgR2V0VG9rZW5OYW1lIChpbnQgdG9rZW4pCisgCWNhc2Ug VG9rZW4uQ09OVElOVUU6CisgCQlyZXR1cm4gImNvbnRpbnVlIjsKKyAJY2FzZSBUb2tlbi5ERUZB VUxUOgorKwljYXNlIFRva2VuLkRFRkFVTFRfVkFMVUU6CisgCQlyZXR1cm4gImRlZmF1bHQiOwor IAljYXNlIFRva2VuLkRFTEVHQVRFOgorIAkJcmV0dXJuICJkZWxlZ2F0ZSI7CitAQCAtODMzNCw2 ICs4NDQ0LDcgQEAgc3RhdGljIHN0cmluZyBHZXRUb2tlbk5hbWUgKGludCB0b2tlbikKKyAJY2Fz ZSBUb2tlbi5TVEFUSUM6CisgCQlyZXR1cm4gInN0YXRpYyI7CisgCWNhc2UgVG9rZW4uU1RSVUNU OgorKwljYXNlIFRva2VuLlJFRl9TVFJVQ1Q6CisgCQlyZXR1cm4gInN0cnVjdCI7CisgCWNhc2Ug VG9rZW4uU1dJVENIOgorIAkJcmV0dXJuICJzd2l0Y2giOworZGlmZiAtLWdpdCBhL21jcy9tY3Mv Y3MtdG9rZW5pemVyLmNzIGIvbWNzL21jcy9jcy10b2tlbml6ZXIuY3MKK2luZGV4IGQ2ZDAwZDMx NDAwLi4zN2VkYjVjMTIyNCAxMDA2NDQKKy0tLSBhL21jcy9tY3MvY3MtdG9rZW5pemVyLmNzCisr KysgYi9tY3MvbWNzL2NzLXRva2VuaXplci5jcworQEAgLTcxNiw5ICs3MTYsMTggQEAgbmFtZXNw YWNlIE1vbm8uQ1NoYXJwCisgCQkJCQlyZXMgPSBUb2tlbi5FWFRFUk5fQUxJQVM7CisgCQkJCWJy ZWFrOworIAkJCWNhc2UgVG9rZW4uREVGQVVMVDoKKy0JCQkJaWYgKHBlZWtfdG9rZW4gKCkgPT0g VG9rZW4uQ09MT04pIHsKKy0JCQkJCXRva2VuICgpOworLQkJCQkJcmVzID0gVG9rZW4uREVGQVVM VF9DT0xPTjsKKysJCQkJc3dpdGNoIChwZWVrX3Rva2VuICgpKSB7CisrCQkJCWNhc2UgVG9rZW4u Q09MT046CisrCQkJCQkvLyBTcGVjaWFsIGNhc2U6IGZvbyA9PSBudWxsID8gZGVmYXVsdCA6IDE7 CisrCQkJCQlpZiAoY3VycmVudF90b2tlbiAhPSBUb2tlbi5JTlRFUlIpIHsKKysJCQkJCQl0b2tl biAoKTsKKysJCQkJCQlyZXMgPSBUb2tlbi5ERUZBVUxUX0NPTE9OOworKwkJCQkJfQorKwkJCQkJ YnJlYWs7CisrCQkJCWNhc2UgVG9rZW4uT1BFTl9QQVJFTlM6CisrCQkJCWNhc2UgVG9rZW4uT1BF Tl9QQVJFTlNfQ0FTVDoKKysJCQkJCXJlcyA9IFRva2VuLkRFRkFVTFRfVkFMVUU7CisrCQkJCQli cmVhazsKKyAJCQkJfQorIAkJCQlicmVhazsKKyAJCQljYXNlIFRva2VuLldIRU46CitAQCAtODEy LDEwICs4MjEsMTIgQEAgbmFtZXNwYWNlIE1vbm8uQ1NoYXJwCisgCQkJCVB1c2hQb3NpdGlvbiAo KTsKKyAKKyAJCQkJbmV4dF90b2tlbiA9IHRva2VuICgpOworLQkJCQlib29sIG9rID0gKG5leHRf dG9rZW4gPT0gVG9rZW4uQ0xBU1MpIHx8CistCQkJCQkobmV4dF90b2tlbiA9PSBUb2tlbi5TVFJV Q1QpIHx8CistCQkJCQkobmV4dF90b2tlbiA9PSBUb2tlbi5JTlRFUkZBQ0UpIHx8CistCQkJCQko bmV4dF90b2tlbiA9PSBUb2tlbi5WT0lEKTsKKysJCQkJYm9vbCBvayA9CisrCQkJCQluZXh0X3Rv a2VuID09IFRva2VuLkNMQVNTIHx8CisrCQkJCQluZXh0X3Rva2VuID09IFRva2VuLlNUUlVDVCB8 fAorKwkJCQkJbmV4dF90b2tlbiA9PSBUb2tlbi5JTlRFUkZBQ0UgfHwKKysJCQkJCW5leHRfdG9r ZW4gPT0gVG9rZW4uVk9JRCB8fAorKwkJCQkJbmV4dF90b2tlbiA9PSBUb2tlbi5SRUZfU1RSVUNU OworIAorIAkJCQlQb3BQb3NpdGlvbiAoKTsKKyAKK0BAIC05MDMsNiArOTE0LDEyIEBAIG5hbWVz cGFjZSBNb25vLkNTaGFycAorIAkJCQkJYnJlYWs7CisgCQkJCX0KKyAKKysJCQkJYnJlYWs7Cisr CQkJY2FzZSBUb2tlbi5SRUY6CisrCQkJCWlmIChwZWVrX3Rva2VuICgpID09IFRva2VuLlNUUlVD VCkgeworKwkJCQkJdG9rZW4gKCk7CisrCQkJCQlyZXMgPSBUb2tlbi5SRUZfU1RSVUNUOworKwkJ CQl9CisgCQkJCWJyZWFrOworIAkJCX0KKyAKK0BAIC0xMDk0LDYgKzExMTEsNyBAQCBuYW1lc3Bh Y2UgTW9uby5DU2hhcnAKKyAJCQkJCQljYXNlIFRva2VuLlVOQ0hFQ0tFRDoKKyAJCQkJCQljYXNl IFRva2VuLlVOU0FGRToKKyAJCQkJCQljYXNlIFRva2VuLkRFRkFVTFQ6CisrCQkJCQkJY2FzZSBU b2tlbi5ERUZBVUxUX1ZBTFVFOgorIAkJCQkJCWNhc2UgVG9rZW4uQVdBSVQ6CisgCisgCQkJCQkJ Ly8KK0BAIC0xMjczLDE0ICsxMjkxLDIxIEBAIG5hbWVzcGFjZSBNb25vLkNTaGFycAorIAorIAkJ CQlyZXR1cm4gZmFsc2U7CisgCQkJY2FzZSBUb2tlbi5PUEVOX1BBUkVOUzoKKy0JCQkJaWYgKCFw YXJzaW5nX2dlbmVyaWNfZGVjbGFyYXRpb24pCistCQkJCQlyZXR1cm4gZmFsc2U7CistCQkJCQor KwkJCQlpbnQgcGFyZW5zX2NvdW50ID0gMTsKKyAJCQkJd2hpbGUgKHRydWUpIHsKKyAJCQkJCXN3 aXRjaCAodG9rZW4gKCkpIHsKKyAJCQkJCWNhc2UgVG9rZW4uQ09NTUE6CisgCQkJCQkJLy8gdHVw bGUgZGVjbGFyYXRpb24gYWZ0ZXIgPAorLQkJCQkJCXJldHVybiB0cnVlOworKwkJCQkJCWlmIChw YXJlbnNfY291bnQgPT0gMSkKKysJCQkJCQkJcmV0dXJuIHRydWU7CisrCQkJCQkJY29udGludWU7 CisrCQkJCQljYXNlIFRva2VuLk9QRU5fUEFSRU5TOgorKwkJCQkJCSsrcGFyZW5zX2NvdW50Owor KwkJCQkJCWNvbnRpbnVlOworKwkJCQkJY2FzZSBUb2tlbi5DTE9TRV9QQVJFTlM6CisrCQkJCQkJ aWYgKC0tcGFyZW5zX2NvdW50IDw9IDApCisrCQkJCQkJCXJldHVybiBmYWxzZTsKKysJCQkJCQlj b250aW51ZTsKKyAJCQkJCWNhc2UgVG9rZW4uT1BfR0VORVJJQ1NfR1Q6CisgCQkJCQljYXNlIFRv a2VuLkVPRjoKKyAJCQkJCQlyZXR1cm4gZmFsc2U7CitAQCAtMTM4MCw2ICsxNDA1LDcgQEAgbmFt ZXNwYWNlIE1vbm8uQ1NoYXJwCisgCQkJY2FzZSBUb2tlbi5ORVc6CisgCQkJY2FzZSBUb2tlbi5J TlRFUlBPTEFURURfU1RSSU5HOgorIAkJCWNhc2UgVG9rZW4uVEhST1c6CisrCQkJY2FzZSBUb2tl bi5ERUZBVUxUX0NPTE9OOgorIAkJCQluZXh0X3Rva2VuID0gVG9rZW4uSU5URVJSOworIAkJCQli cmVhazsKKyAJCQkJCitAQCAtMzUwMiw2ICszNTI4LDcgQEAgbmFtZXNwYWNlIE1vbm8uQ1NoYXJw CisgCQkJCQkJY2FzZSBUb2tlbi5TV0lUQ0g6CisgCQkJCQkJY2FzZSBUb2tlbi5VU0lORzoKKyAJ CQkJCQljYXNlIFRva2VuLkRFRkFVTFQ6CisrCQkJCQkJY2FzZSBUb2tlbi5ERUZBVUxUX1ZBTFVF OgorIAkJCQkJCWNhc2UgVG9rZW4uREVMRUdBVEU6CisgCQkJCQkJY2FzZSBUb2tlbi5PUF9HRU5F UklDU19HVDoKKyAJCQkJCQljYXNlIFRva2VuLlJFRlZBTFVFOgorQEAgLTM5NjMsMjYgKzM5OTAs MjkgQEAgbmFtZXNwYWNlIE1vbm8uQ1NoYXJwCisgCQl7CisgCQkJaW50IGQ7CisgCistCQkJLy8g U2F2ZSBjdXJyZW50IHBvc2l0aW9uIGFuZCBwYXJzZSBuZXh0IHRva2VuLgorLQkJCVB1c2hQb3Np dGlvbiAoKTsKKy0JCQlpbnQgZ2VuZXJpY19kaW1lbnNpb24gPSAwOworLQkJCWlmIChwYXJzZV9s ZXNzX3RoYW4gKHJlZiBnZW5lcmljX2RpbWVuc2lvbikpIHsKKy0JCQkJaWYgKHBhcnNpbmdfZ2Vu ZXJpY19kZWNsYXJhdGlvbiAmJiAocGFyc2luZ19nZW5lcmljX2RlY2xhcmF0aW9uX2RvYyB8fCB0 b2tlbiAoKSAhPSBUb2tlbi5ET1QpKSB7CistCQkJCQlkID0gVG9rZW4uT1BfR0VORVJJQ1NfTFRf REVDTDsKKy0JCQkJfSBlbHNlIHsKKy0JCQkJCWlmIChnZW5lcmljX2RpbWVuc2lvbiA+IDApIHsK Ky0JCQkJCQl2YWwgPSBnZW5lcmljX2RpbWVuc2lvbjsKKy0JCQkJCQlEaXNjYXJkUG9zaXRpb24g KCk7CistCQkJCQkJcmV0dXJuIFRva2VuLkdFTkVSSUNfRElNRU5TSU9OOworLQkJCQkJfQorKwkJ CWlmIChjdXJyZW50X3Rva2VuICE9IFRva2VuLk9QRVJBVE9SKSB7CisrCQkJCS8vIFNhdmUgY3Vy cmVudCBwb3NpdGlvbiBhbmQgcGFyc2UgbmV4dCB0b2tlbi4KKysJCQkJUHVzaFBvc2l0aW9uICgp OworKwkJCQlpbnQgZ2VuZXJpY19kaW1lbnNpb24gPSAwOworKwkJCQlpZiAocGFyc2VfbGVzc190 aGFuIChyZWYgZ2VuZXJpY19kaW1lbnNpb24pKSB7CisrCQkJCQlpZiAocGFyc2luZ19nZW5lcmlj X2RlY2xhcmF0aW9uICYmIChwYXJzaW5nX2dlbmVyaWNfZGVjbGFyYXRpb25fZG9jIHx8IHRva2Vu ICgpICE9IFRva2VuLkRPVCkpIHsKKysJCQkJCQlkID0gVG9rZW4uT1BfR0VORVJJQ1NfTFRfREVD TDsKKysJCQkJCX0gZWxzZSB7CisrCQkJCQkJaWYgKGdlbmVyaWNfZGltZW5zaW9uID4gMCkgewor KwkJCQkJCQl2YWwgPSBnZW5lcmljX2RpbWVuc2lvbjsKKysJCQkJCQkJRGlzY2FyZFBvc2l0aW9u ICgpOworKwkJCQkJCQlyZXR1cm4gVG9rZW4uR0VORVJJQ19ESU1FTlNJT047CisrCQkJCQkJfQor IAorLQkJCQkJZCA9IFRva2VuLk9QX0dFTkVSSUNTX0xUOworKwkJCQkJCWQgPSBUb2tlbi5PUF9H RU5FUklDU19MVDsKKysJCQkJCX0KKysJCQkJCVBvcFBvc2l0aW9uICgpOworKwkJCQkJcmV0dXJu IGQ7CisgCQkJCX0KKysKKyAJCQkJUG9wUG9zaXRpb24gKCk7CistCQkJCXJldHVybiBkOworIAkJ CX0KKyAKKy0JCQlQb3BQb3NpdGlvbiAoKTsKKyAJCQlwYXJzaW5nX2dlbmVyaWNfbGVzc190aGFu ID0gMDsKKyAKKyAJCQlkID0gcGVla19jaGFyICgpOworZGlmZiAtLWdpdCBhL21jcy9tY3MvZGVs ZWdhdGUuY3MgYi9tY3MvbWNzL2RlbGVnYXRlLmNzCitpbmRleCA4MGViN2UyNjVmMS4uNTJjZWU4 ZjM0NTUgMTAwNjQ0CistLS0gYS9tY3MvbWNzL2RlbGVnYXRlLmNzCisrKysgYi9tY3MvbWNzL2Rl bGVnYXRlLmNzCitAQCAtMTg4LDggKzE4OCw4IEBAIG5hbWVzcGFjZSBNb25vLkNTaGFycCB7Cisg CisgCQkJQ2hlY2tQcm90ZWN0ZWRNb2RpZmllciAoKTsKKyAKKy0JCQlpZiAoQ29tcGlsZXIuU2V0 dGluZ3MuU3RkTGliICYmIHJldF90eXBlLklzU3BlY2lhbFJ1bnRpbWVUeXBlKSB7CistCQkJCU1l dGhvZC5FcnJvcjE1OTkgKExvY2F0aW9uLCByZXRfdHlwZSwgUmVwb3J0KTsKKysJCQlpZiAocmV0 X3R5cGUuSXNTcGVjaWFsUnVudGltZVR5cGUgJiYgQ29tcGlsZXIuU2V0dGluZ3MuU3RkTGliKSB7 CisrCQkJCU1ldGhvZC5FcnJvcl9SZXR1cm5UeXBlQ2FudEJlUmVmQW55IChMb2NhdGlvbiwgcmV0 X3R5cGUsIFJlcG9ydCk7CisgCQkJCXJldHVybiBmYWxzZTsKKyAJCQl9CisgCitAQCAtMzM4LDYg KzMzOCw4IEBAIG5hbWVzcGFjZSBNb25vLkNTaGFycCB7CisgCQkJCQlNb2R1bGUuUHJlZGVmaW5l ZEF0dHJpYnV0ZXMuRHluYW1pYy5FbWl0QXR0cmlidXRlIChDcmVhdGVSZXR1cm5CdWlsZGVyICgp LkJ1aWxkZXIpOworIAkJCQl9IGVsc2UgaWYgKHJ0eXBlLkhhc0R5bmFtaWNFbGVtZW50KSB7Cisg CQkJCQlNb2R1bGUuUHJlZGVmaW5lZEF0dHJpYnV0ZXMuRHluYW1pYy5FbWl0QXR0cmlidXRlIChD cmVhdGVSZXR1cm5CdWlsZGVyICgpLkJ1aWxkZXIsIHJ0eXBlLCBMb2NhdGlvbik7CisrCQkJCX0g ZWxzZSBpZiAocnR5cGUgaXMgUmVhZE9ubHlSZWZlcmVuY2VDb250YWluZXIpIHsKKysJCQkJCU1v ZHVsZS5QcmVkZWZpbmVkQXR0cmlidXRlcy5Jc1JlYWRPbmx5LkVtaXRBdHRyaWJ1dGUgKENyZWF0 ZVJldHVybkJ1aWxkZXIgKCkuQnVpbGRlcik7CisgCQkJCX0KKyAKKyAJCQkJaWYgKHJ0eXBlLkhh c05hbWVkVHVwbGVFbGVtZW50KSB7CitAQCAtNjAzLDggKzYwNSwxNCBAQCBuYW1lc3BhY2UgTW9u by5DU2hhcnAgeworIAkJCX0KKyAKKyAJCQl2YXIgZXhwciA9IG1ldGhvZF9ncm91cC5JbnN0YW5j ZUV4cHJlc3Npb247CistCQkJaWYgKGV4cHIgIT0gbnVsbCAmJiAoZXhwci5UeXBlLklzR2VuZXJp Y1BhcmFtZXRlciB8fCAhVHlwZVNwZWMuSXNSZWZlcmVuY2VUeXBlIChleHByLlR5cGUpKSkKKysJ CQlpZiAoZXhwciAhPSBudWxsICYmIChleHByLlR5cGUuSXNHZW5lcmljUGFyYW1ldGVyIHx8ICFU eXBlU3BlYy5Jc1JlZmVyZW5jZVR5cGUgKGV4cHIuVHlwZSkpKSB7CisrCQkJCWlmIChleHByLlR5 cGUuSXNCeVJlZkxpa2UgfHwgZXhwci5UeXBlLklzU3BlY2lhbFJ1bnRpbWVUeXBlKSB7CisrCQkJ CQkvLyBDU0M6IFNob3VsZCBiZSBiZXR0ZXIgZXJyb3IgY29kZQorKwkJCQkJRXJyb3JfQ29udmVy c2lvbkZhaWxlZCAoZWMsIGRlbGVnYXRlX21ldGhvZCwgbnVsbCk7CisrCQkJCX0KKysKKyAJCQkJ bWV0aG9kX2dyb3VwLkluc3RhbmNlRXhwcmVzc2lvbiA9IG5ldyBCb3hlZENhc3QgKGV4cHIsIGVj LkJ1aWx0aW5UeXBlcy5PYmplY3QpOworKwkJCX0KKyAKKyAJCQllY2xhc3MgPSBFeHByQ2xhc3Mu VmFsdWU7CisgCQkJcmV0dXJuIHRoaXM7CitkaWZmIC0tZ2l0IGEvbWNzL21jcy9keW5hbWljLmNz IGIvbWNzL21jcy9keW5hbWljLmNzCitpbmRleCBmZDQ2NjJiMmZlZC4uZjgzMTRiMmYzY2QgMTAw NjQ0CistLS0gYS9tY3MvbWNzL2R5bmFtaWMuY3MKKysrKyBiL21jcy9tY3MvZHluYW1pYy5jcwor QEAgLTI3OSwxMSArMjc5LDE5IEBAIG5hbWVzcGFjZSBNb25vLkNTaGFycAorIAorIAkJcHJvdGVj dGVkIGJvb2wgRG9SZXNvbHZlQ29yZSAoUmVzb2x2ZUNvbnRleHQgcmMpCisgCQl7CisrCQkJaW50 IGkgPSAwOworIAkJCWZvcmVhY2ggKHZhciBhcmcgaW4gYXJndW1lbnRzKSB7CisgCQkJCWlmIChh cmcuVHlwZSA9PSBJbnRlcm5hbFR5cGUuVmFyT3V0VHlwZSkgeworIAkJCQkJLy8gU2hvdWxkIGJl IHNwZWNpYWwgZXJyb3IgbWVzc2FnZSBhYm91dCBkeW5hbWljIGRpc3BhdGNoCisgCQkJCQlyYy5S ZXBvcnQuRXJyb3IgKDgxOTcsIGFyZy5FeHByLkxvY2F0aW9uLCAiQ2Fubm90IGluZmVyIHRoZSB0 eXBlIG9mIGltcGxpY2l0bHktdHlwZWQgb3V0IHZhcmlhYmxlIGB7MH0nIiwgKChEZWNsYXJhdGlv bkV4cHJlc3Npb24pIGFyZy5FeHByKS5WYXJpYWJsZS5OYW1lKTsKKysJCQkJfSBlbHNlIGlmIChh cmcuVHlwZSA9PSBJbnRlcm5hbFR5cGUuRGVmYXVsdFR5cGUpIHsKKysJCQkJCXJjLlJlcG9ydC5F cnJvciAoODMxMSwgYXJnLkV4cHIuTG9jYXRpb24sICJDYW5ub3QgdXNlIGEgZGVmYXVsdCBsaXRl cmFsIGFzIGFuIGFyZ3VtZW50IHRvIGEgZHluYW1pY2FsbHkgZGlzcGF0Y2hlZCBvcGVyYXRpb24i KTsKKyAJCQkJfQorKworKwkJCQkvLyBGb3JjZWQgbGltaXRhdGlvbiBiZWNhdXNlIE1pY3Jvc29m dC5DU2hhcnAgbmVlZHMgdG8gY2F0Y2ggdXAKKysJCQkJaWYgKGkgPiAwICYmIGFyZ3VtZW50cyBb aSAtIDFdIGlzIE5hbWVkQXJndW1lbnQgJiYgIShhcmd1bWVudHMgW2ldIGlzIE5hbWVkQXJndW1l bnQpKQorKwkJCQkJcmMuUmVwb3J0LkVycm9yICg4MzI0LCBsb2MsICJOYW1lZCBhcmd1bWVudCBz cGVjaWZpY2F0aW9ucyBtdXN0IGFwcGVhciBhZnRlciBhbGwgZml4ZWQgYXJndW1lbnRzIGhhdmUg YmVlbiBzcGVjaWZpZWQgaW4gYSBkeW5hbWljIGludm9jYXRpb24iKTsKKysJCQkJKytpOworIAkJ CX0KKyAKKyAJCQlpZiAocmMuQ3VycmVudFR5cGVQYXJhbWV0ZXJzICE9IG51bGwgJiYgcmMuQ3Vy cmVudFR5cGVQYXJhbWV0ZXJzWzBdLklzTWV0aG9kVHlwZVBhcmFtZXRlcikKK2RpZmYgLS1naXQg YS9tY3MvbWNzL2Vjb3JlLmNzIGIvbWNzL21jcy9lY29yZS5jcworaW5kZXggMzRmZjlhMzBkYWIu LjIwZWU5ZTczYjE5IDEwMDY0NAorLS0tIGEvbWNzL21jcy9lY29yZS5jcworKysrIGIvbWNzL21j cy9lY29yZS5jcworQEAgLTI1NSw3ICsyNTUsNyBAQCBuYW1lc3BhY2UgTW9uby5DU2hhcnAgewor IAorIAkJcHVibGljIHZvaWQgRXJyb3JfRXhwcmVzc2lvbk11c3RCZUNvbnN0YW50IChSZXNvbHZl Q29udGV4dCByYywgTG9jYXRpb24gbG9jLCBzdHJpbmcgZV9uYW1lKQorIAkJeworLQkJCXJjLlJl cG9ydC5FcnJvciAoMTMzLCBsb2MsICJUaGUgZXhwcmVzc2lvbiBiZWluZyBhc3NpZ25lZCB0byBg ezB9JyBtdXN0IGJlIGNvbnN0YW50IiwgZV9uYW1lKTsKKysJCQlyYy5SZXBvcnQuRXJyb3IgKDEz MywgbG9jLCAiVGhlIGV4cHJlc3Npb24gYmVpbmcgYXNzaWduZWQgdG8gYHswfScgbXVzdCBiZSBh IGNvbnN0YW50IG9yIGRlZmF1bHQgdmFsdWUiLCBlX25hbWUpOworIAkJfQorIAorIAkJcHVibGlj IHZvaWQgRXJyb3JfQ29uc3RhbnRDYW5CZUluaXRpYWxpemVkV2l0aE51bGxPbmx5IChSZXNvbHZl Q29udGV4dCByYywgVHlwZVNwZWMgdHlwZSwgTG9jYXRpb24gbG9jLCBzdHJpbmcgbmFtZSkKK0BA IC0yOTU3LDYgKzI5NTcsMTMgQEAgbmFtZXNwYWNlIE1vbm8uQ1NoYXJwIHsKKyAJCQkJaWYgKChy ZXN0cmljdGlvbnMgJiBNZW1iZXJMb29rdXBSZXN0cmljdGlvbnMuTmFtZU9mRXhjbHVkZWQpID09 IDAgJiYgTmFtZSA9PSAibmFtZW9mIikKKyAJCQkJCXJldHVybiBuZXcgTmFtZU9mICh0aGlzKTsK KyAKKysJCQkJaWYgKChyZXN0cmljdGlvbnMgJiBNZW1iZXJMb29rdXBSZXN0cmljdGlvbnMuUmVh ZEFjY2VzcykgPT0gMCAmJiBOYW1lID09ICJfIikgeworKwkJCQkJaWYgKHJjLk1vZHVsZS5Db21w aWxlci5TZXR0aW5ncy5WZXJzaW9uIDwgTGFuZ3VhZ2VWZXJzaW9uLlZfNykKKysJCQkJCQlyYy5S ZXBvcnQuRmVhdHVyZUlzTm90QXZhaWxhYmxlIChyYy5Nb2R1bGUuQ29tcGlsZXIsIGxvYywgImRp c2NhcmRzIik7CisrCisrCQkJCQlyZXR1cm4gbmV3IERpc2NhcmQgKGxvYykuUmVzb2x2ZSAocmMp OworKwkJCQl9CisrCisgCQkJCWlmIChlcnJvck1vZGUpIHsKKyAJCQkJCWlmICh2YXJpYWJsZV9m b3VuZCkgeworIAkJCQkJCXJjLlJlcG9ydC5FcnJvciAoODQxLCBsb2MsICJBIGxvY2FsIHZhcmlh YmxlIGB7MH0nIGNhbm5vdCBiZSB1c2VkIGJlZm9yZSBpdCBpcyBkZWNsYXJlZCIsIE5hbWUpOwor QEAgLTQwMjksNiArNDAzNiwxMyBAQCBuYW1lc3BhY2UgTW9uby5DU2hhcnAgeworIAkJCXJldHVy biBNZXRob2RzLkZpcnN0ICgpLkdldFNpZ25hdHVyZUZvckVycm9yICgpOworIAkJfQorIAorKwkJ c3RhdGljIE1ldGhvZFNwZWMgQ2FuZGlkYXRlRGV2aXJ0dWFsaXphdGlvbiAoVHlwZVNwZWMgdHlw ZSwgTWV0aG9kU3BlYyBtZXRob2QpCisrCQl7CisrCQkJLy8gQXNzdW1lcyBubyBnZW5lcmljcyBn ZXQgaW52b2x2ZWQKKysJCQl2YXIgZmlsdGVyID0gbmV3IE1lbWJlckZpbHRlciAobWV0aG9kLk5h bWUsIG1ldGhvZC5Bcml0eSwgTWVtYmVyS2luZC5NZXRob2QsIG1ldGhvZC5QYXJhbWV0ZXJzLCBu dWxsKTsKKysJCQlyZXR1cm4gTWVtYmVyQ2FjaGUuRmluZE1lbWJlciAodHlwZSwgZmlsdGVyLCBC aW5kaW5nUmVzdHJpY3Rpb24uSW5zdGFuY2VPbmx5IHwgQmluZGluZ1Jlc3RyaWN0aW9uLk92ZXJy aWRlT25seSB8IEJpbmRpbmdSZXN0cmljdGlvbi5EZWNsYXJlZE9ubHkpIGFzIE1ldGhvZFNwZWM7 CisrCQl9CisrCisgCQlwdWJsaWMgb3ZlcnJpZGUgRXhwcmVzc2lvbiBDcmVhdGVFeHByZXNzaW9u VHJlZSAoUmVzb2x2ZUNvbnRleHQgZWMpCisgCQl7CisgCQkJaWYgKGJlc3RfY2FuZGlkYXRlID09 IG51bGwpIHsKK0BAIC00MTc3LDYgKzQxOTEsMjIgQEAgbmFtZXNwYWNlIE1vbm8uQ1NoYXJwIHsK KyAJCQkJCQl9CisgCisgCQkJCQkJSW5zdGFuY2VFeHByZXNzaW9uLlJlc29sdmUgKGVjLCBSZXNv bHZlRmxhZ3MuVmFyaWFibGVPclZhbHVlIHwgUmVzb2x2ZUZsYWdzLk1ldGhvZEdyb3VwIHwgUmVz b2x2ZUZsYWdzLlR5cGUpOworKworKwkJCQkJCXZhciBleHByX3R5cGUgPSBJbnN0YW5jZUV4cHJl c3Npb24uVHlwZTsKKysJCQkJCQlpZiAoKGV4cHJfdHlwZS5Jc0J5UmVmTGlrZSB8fCBleHByX3R5 cGUuSXNTcGVjaWFsUnVudGltZVR5cGUpICYmIGJlc3RfY2FuZGlkYXRlLkRlY2xhcmluZ1R5cGUg IT0gZXhwcl90eXBlKSB7CisrCQkJCQkJCU1ldGhvZFNwZWMgZGV2aXJ0ID0gbnVsbDsKKysJCQkJ CQkJaWYgKChiZXN0X2NhbmRpZGF0ZS5Nb2RpZmllcnMgJiAoTW9kaWZpZXJzLlZJUlRVQUwgfCBN b2RpZmllcnMuQUJTVFJBQ1QgfCBNb2RpZmllcnMuT1ZFUlJJREUpKSAhPSAwKSB7CisrCQkJCQkJ CQlkZXZpcnQgPSBDYW5kaWRhdGVEZXZpcnR1YWxpemF0aW9uIChleHByX3R5cGUsIGJlc3RfY2Fu ZGlkYXRlKTsKKysJCQkJCQkJfQorKworKwkJCQkJCQlpZiAoZGV2aXJ0ID09IG51bGwpIHsKKysJ CQkJCQkJCS8vIENTQzogU2hvdWxkIGJlIGJldHRlciBlcnJvciBtZXNzYWdlCisrCQkJCQkJCQll Yy5SZXBvcnQuRXJyb3IgKDI5LCBJbnN0YW5jZUV4cHJlc3Npb24uTG9jYXRpb24sICJDYW5ub3Qg aW1wbGljaXRseSBjb252ZXJ0IHR5cGUgYHswfScgdG8gYHsxfSciLAorKwkJCQkJCQkJCQkJCSBJ bnN0YW5jZUV4cHJlc3Npb24uVHlwZS5HZXRTaWduYXR1cmVGb3JFcnJvciAoKSwgYmVzdF9jYW5k aWRhdGUuRGVjbGFyaW5nVHlwZS5HZXRTaWduYXR1cmVGb3JFcnJvciAoKSk7CisrCQkJCQkJCX0g ZWxzZSB7CisrCQkJCQkJCQliZXN0X2NhbmRpZGF0ZSA9IGRldmlydDsKKysJCQkJCQkJfQorKwkJ CQkJCX0KKyAJCQkJCX0KKyAJCQkJfQorIAorQEAgLTU0MTksNyArNTQ0OSw3IEBAIG5hbWVzcGFj ZSBNb25vLkNTaGFycCB7CisgCQkJCX0KKyAKKyAJCQkJaWYgKGFyZ190eXBlICE9IHBhcmFtZXRl cikgeworLQkJCQkJaWYgKGFyZ190eXBlID09IEludGVybmFsVHlwZS5WYXJPdXRUeXBlKQorKwkJ CQkJaWYgKGFyZ190eXBlID09IEludGVybmFsVHlwZS5WYXJPdXRUeXBlIHx8IGFyZ190eXBlID09 IEludGVybmFsVHlwZS5EaXNjYXJkKQorIAkJCQkJCXJldHVybiAwOworIAorIAkJCQkJdmFyIHJl Zl9hcmdfdHlwZSA9IGFyZ190eXBlIGFzIFJlZmVyZW5jZUNvbnRhaW5lcjsKK0BAIC02MDI4LDYg KzYwNTgsMTEgQEAgbmFtZXNwYWNlIE1vbm8uQ1NoYXJwIHsKKyAJCQkJCQljb250aW51ZTsKKyAJ CQkJCX0KKyAKKysJCQkJCWlmIChhcmdfdHlwZSA9PSBJbnRlcm5hbFR5cGUuRGlzY2FyZCkgewor KwkJCQkJCWEuRXhwci5UeXBlID0gcHQ7CisrCQkJCQkJY29udGludWU7CisrCQkJCQl9CisrCisg CQkJCQl2YXIgcmVmX2FyZ190eXBlID0gYXJnX3R5cGUgYXMgUmVmZXJlbmNlQ29udGFpbmVyOwor IAkJCQkJaWYgKHJlZl9hcmdfdHlwZSAhPSBudWxsKSB7CisgCQkJCQkJaWYgKHJlZl9hcmdfdHlw ZS5FbGVtZW50ICE9IHB0KQorQEAgLTYwNjEsOSArNjA5NiwxNSBAQCBuYW1lc3BhY2UgTW9uby5D U2hhcnAgeworIAkJCQkJCWVsc2UKKyAJCQkJCQkJZWMuUmVwb3J0LlN5bWJvbFJlbGF0ZWRUb1By ZXZpb3VzRXJyb3IgKG1lbWJlcik7CisgCistCQkJCQkJZWMuUmVwb3J0LkVycm9yICgxNzQ0LCBu YS5Mb2NhdGlvbiwKKy0JCQkJCQkJIk5hbWVkIGFyZ3VtZW50IGB7MH0nIGNhbm5vdCBiZSB1c2Vk IGZvciBhIHBhcmFtZXRlciB3aGljaCBoYXMgcG9zaXRpb25hbCBhcmd1bWVudCBzcGVjaWZpZWQi LAorLQkJCQkJCQluYS5OYW1lKTsKKysJCQkJCQlpZiAobmFtZV9pbmRleCA+IGFfaWR4KSB7Cisr CQkJCQkJCWVjLlJlcG9ydC5FcnJvciAoODMyMywgbmEuTG9jYXRpb24sCisrCQkJCQkJCQkiTmFt ZWQgYXJndW1lbnQgYHswfScgaXMgdXNlZCBvdXQgb2YgcG9zaXRpb24gYnV0IGlzIGZvbGxvd2Vk IGJ5IHBvc2l0aW9uYWwgYXJndW1lbnQiLAorKwkJCQkJCQkJbmEuTmFtZSk7CisrCQkJCQkJfSBl bHNlIHsKKysJCQkJCQkJZWMuUmVwb3J0LkVycm9yICgxNzQ0LCBuYS5Mb2NhdGlvbiwKKysJCQkJ CQkJCSJOYW1lZCBhcmd1bWVudCBgezB9JyBjYW5ub3QgYmUgdXNlZCBmb3IgYSBwYXJhbWV0ZXIg d2hpY2ggaGFzIHBvc2l0aW9uYWwgYXJndW1lbnQgc3BlY2lmaWVkIiwKKysJCQkJCQkJCW5hLk5h bWUpOworKwkJCQkJCX0KKyAJCQkJCX0KKyAJCQkJfQorIAkJCQkKK0BAIC03MzUwLDYgKzczOTEs OSBAQCBuYW1lc3BhY2UgTW9uby5DU2hhcnAgeworIAkJCWlmICghUmVzb2x2ZUdldHRlciAoZWMp KQorIAkJCQlyZXR1cm4gbnVsbDsKKyAKKysJCQlpZiAodHlwZS5LaW5kID09IE1lbWJlcktpbmQu QnlSZWYpCisrCQkJCXJldHVybiBCeVJlZkRlcmVmZXJlbmNlLkNyZWF0ZSAodGhpcykuUmVzb2x2 ZSAoZWMpOworKworIAkJCXJldHVybiB0aGlzOworIAkJfQorIAorQEAgLTczNTksMTIgKzc0MDMs MTEgQEAgbmFtZXNwYWNlIE1vbm8uQ1NoYXJwIHsKKyAJCQkJRXJyb3JfTnVsbFByb3BhZ2F0aW5n TFZhbHVlIChyYyk7CisgCisgCQkJaWYgKHJpZ2h0X3NpZGUgPT0gRW1wdHlFeHByZXNzaW9uLk91 dEFjY2VzcykgeworLQkJCQlpZiAoYmVzdF9jYW5kaWRhdGU/Lk1lbWJlclR5cGUuS2luZCA9PSBN ZW1iZXJLaW5kLkJ5UmVmKSB7CistCQkJCQlpZiAoQXJndW1lbnRzPy5Db250YWluc0VtaXRXaXRo QXdhaXQgKCkgPT0gdHJ1ZSkgeworLQkJCQkJCXJjLlJlcG9ydC5FcnJvciAoODE3OCwgbG9jLCAi YGF3YWl0JyBjYW5ub3QgYmUgdXNlZCBpbiBhbiBleHByZXNzaW9uIGNvbnRhaW5pbmcgYSBjYWxs IHRvIGB7MH0nIGJlY2F1c2UgaXQgcmV0dXJucyBieSByZWZlcmVuY2UiLAorLQkJCQkJCQlHZXRT aWduYXR1cmVGb3JFcnJvciAoKSk7CistCQkJCQl9CisrCQkJCWlmIChPdmVybG9hZFJlc29sdmUg KHJjLCBudWxsKSA9PSBudWxsKQorKwkJCQkJcmV0dXJuIG51bGw7CisgCisrCQkJCWlmIChiZXN0 X2NhbmRpZGF0ZT8uTWVtYmVyVHlwZS5LaW5kID09IE1lbWJlcktpbmQuQnlSZWYpIHsKKysJCQkJ CWdldHRlciA9IENhbmRpZGF0ZVRvQmFzZU92ZXJyaWRlIChyYywgYmVzdF9jYW5kaWRhdGUuR2V0 KTsKKyAJCQkJCXJldHVybiB0aGlzOworIAkJCQl9CisgCitAQCAtNzM5Niw3ICs3NDM5LDcgQEAg bmFtZXNwYWNlIE1vbm8uQ1NoYXJwIHsKKyAKKyAJCQkJaWYgKGJlc3RfY2FuZGlkYXRlLk1lbWJl clR5cGUuS2luZCA9PSBNZW1iZXJLaW5kLkJ5UmVmKSB7CisgCQkJCQlnZXR0ZXIgPSBDYW5kaWRh dGVUb0Jhc2VPdmVycmlkZSAocmMsIGJlc3RfY2FuZGlkYXRlLkdldCk7CistCQkJCQlyZXR1cm4g QnlSZWZEZXJlZmVyZW5jZS5DcmVhdGUodGhpcykuUmVzb2x2ZShyYyk7CisrCQkJCQlyZXR1cm4g QnlSZWZEZXJlZmVyZW5jZS5DcmVhdGUgKHRoaXMpLlJlc29sdmUgKHJjKTsKKyAJCQkJfQorIAor IAkJCQlyYy5SZXBvcnQuRXJyb3IgKDIwMCwgbG9jLCAiUHJvcGVydHkgb3IgaW5kZXhlciBgezB9 JyBjYW5ub3QgYmUgYXNzaWduZWQgdG8gKGl0IGlzIHJlYWQtb25seSkiLAorZGlmZiAtLWdpdCBh L21jcy9tY3MvZXZhbC5jcyBiL21jcy9tY3MvZXZhbC5jcworaW5kZXggNjBlMGM2ZDY0YTAuLjA3 NTY5N2JiMWRmIDEwMDY0NAorLS0tIGEvbWNzL21jcy9ldmFsLmNzCisrKysgYi9tY3MvbWNzL2V2 YWwuY3MKK0BAIC03ODgsNiArNzg4LDcgQEAgbmFtZXNwYWNlIE1vbm8uQ1NoYXJwCisgCQkJCXJl dHVybiBudWxsOworIAkJCX0KKyAKKysJCQltb2R1bGUuQ2xvc2VDb250YWluZXJFYXJseUZvclJl ZmxlY3Rpb25FbWl0ICgpOworIAkJCW1vZHVsZS5DbG9zZUNvbnRhaW5lciAoKTsKKyAJCQlpZiAo aG9zdCAhPSBudWxsKQorIAkJCQlob3N0LkNsb3NlQ29udGFpbmVyICgpOworZGlmZiAtLWdpdCBh L21jcy9tY3MvZXhwcmVzc2lvbi5jcyBiL21jcy9tY3MvZXhwcmVzc2lvbi5jcworaW5kZXggNzMy ZWUzZWU5MzQuLjUxOGNjYzhlZjQzIDEwMDY0NAorLS0tIGEvbWNzL21jcy9leHByZXNzaW9uLmNz CisrKysgYi9tY3MvbWNzL2V4cHJlc3Npb24uY3MKK0BAIC0xMjIwLDYgKzEyMjAsNyBAQCBuYW1l c3BhY2UgTW9uby5DU2hhcnAKKyAJCQkJZXhwciA9IGV4cHIuUmVzb2x2ZUxWYWx1ZSAoZWMsIGV4 cHIpOworIAkJCX0gZWxzZSB7CisgCQkJCWVjLlJlcG9ydC5FcnJvciAoMTA1OSwgbG9jLCAiVGhl IG9wZXJhbmQgb2YgYW4gaW5jcmVtZW50IG9yIGRlY3JlbWVudCBvcGVyYXRvciBtdXN0IGJlIGEg dmFyaWFibGUsIHByb3BlcnR5IG9yIGluZGV4ZXIiKTsKKysJCQkJcmV0dXJuIG51bGw7CisgCQkJ fQorIAorIAkJCS8vCitAQCAtMTQ3Nyw2ICsxNDc4LDExIEBAIG5hbWVzcGFjZSBNb25vLkNTaGFy cAorIAkJCQlyZXR1cm4gbnVsbDsKKyAJCQl9CisgCisrCQkJaWYgKGV4cHIuVHlwZSA9PSBJbnRl cm5hbFR5cGUuRGVmYXVsdFR5cGUpIHsKKysJCQkJRXJyb3JfT3BlcmF0b3JDYW5ub3RCZUFwcGxp ZWQgKHJjLCBsb2MsIE9wZXJhdG9yTmFtZSwgZXhwci5UeXBlKTsKKysJCQkJcmV0dXJuIG51bGw7 CisrCQkJfQorKworIAkJCXJldHVybiB0aGlzOworIAkJfQorIAorQEAgLTQzMDQsOSArNDMxMCwz MiBAQCBuYW1lc3BhY2UgTW9uby5DU2hhcnAKKyAJCQkJQ2hlY2tPdXRPZlJhbmdlQ29tcGFyaXNv biAoZWMsIHJjLCBsZWZ0LlR5cGUpOworIAkJCX0KKyAKKy0JCQlpZiAobGVmdC5UeXBlLkJ1aWx0 aW5UeXBlID09IEJ1aWx0aW5UeXBlU3BlYy5UeXBlLkR5bmFtaWMgfHwgcmlnaHQuVHlwZS5CdWls dGluVHlwZSA9PSBCdWlsdGluVHlwZVNwZWMuVHlwZS5EeW5hbWljKQorKwkJCXZhciBsdHlwZSA9 IGxlZnQuVHlwZTsKKysJCQl2YXIgcnR5cGUgPSByaWdodC5UeXBlOworKwkJCWlmIChsdHlwZS5C dWlsdGluVHlwZSA9PSBCdWlsdGluVHlwZVNwZWMuVHlwZS5EeW5hbWljIHx8IHJ0eXBlLkJ1aWx0 aW5UeXBlID09IEJ1aWx0aW5UeXBlU3BlYy5UeXBlLkR5bmFtaWMpCisgCQkJCXJldHVybiBEb1Jl c29sdmVEeW5hbWljIChlYyk7CisgCisrCQkJLy8KKysJCQkvLyBPbmx5IGRlZmF1bHQgd2l0aCA9 PSBhbmQgIT0gaXMgZXhwbGljaXRseSBhbGxvd2VkCisrCQkJLy8KKysJCQlpZiAobHR5cGUgPT0g SW50ZXJuYWxUeXBlLkRlZmF1bHRUeXBlIHx8IHJ0eXBlID09IEludGVybmFsVHlwZS5EZWZhdWx0 VHlwZSkgeworKwkJCQlpZiAoKE9wZXIgJiBPcGVyYXRvci5FcXVhbGl0eU1hc2spID09IDApIHsK KysJCQkJCWVjLlJlcG9ydC5FcnJvciAoODMxMCwgbG9jLCAiT3BlcmF0b3IgYHswfScgY2Fubm90 IGJlIGFwcGxpZWQgdG8gb3BlcmFuZCBgZGVmYXVsdCciLCBPcGVyTmFtZSAoT3BlcikpOworKwkJ CQkJcmV0dXJuIG51bGw7CisrCQkJCX0KKysKKysJCQkJaWYgKGx0eXBlID09IHJ0eXBlKSB7Cisr CQkJCQllYy5SZXBvcnQuRXJyb3IgKDgzMTUsIGxvYywgIk9wZXJhdG9yIGB7MH0nIGlzIGFtYmln dW91cyBvbiBvcGVyYW5kcyBgZGVmYXVsdCcgYW5kIGBkZWZhdWx0JyIsIE9wZXJOYW1lIChPcGVy KSk7CisrCQkJCQlyZXR1cm4gbnVsbDsKKysJCQkJfQorKworKwkJCQlpZiAocnR5cGUgPT0gSW50 ZXJuYWxUeXBlLkRlZmF1bHRUeXBlKSB7CisrCQkJCQlyaWdodCA9IG5ldyBEZWZhdWx0VmFsdWVF eHByZXNzaW9uIChuZXcgVHlwZUV4cHJlc3Npb24gKGx0eXBlLCByaWdodC5Mb2NhdGlvbiksIHJp Z2h0LkxvY2F0aW9uKS5SZXNvbHZlIChlYyk7CisrCQkJCX0gZWxzZSB7CisrCQkJCQlsZWZ0ID0g bmV3IERlZmF1bHRWYWx1ZUV4cHJlc3Npb24gKG5ldyBUeXBlRXhwcmVzc2lvbiAocnR5cGUsIGxl ZnQuTG9jYXRpb24pLCBsZWZ0LkxvY2F0aW9uKS5SZXNvbHZlIChlYyk7CisrCQkJCX0KKysJCQl9 CisrCisgCQkJcmV0dXJuIERvUmVzb2x2ZUNvcmUgKGVjLCBsZWZ0LCByaWdodCk7CisgCQl9Cisg CitAQCAtNjc0NCwxMCArNjc3MywxNCBAQCBuYW1lc3BhY2UgTW9uby5DU2hhcnAKKyAJCQkJCWVj LlJlcG9ydC5FcnJvciAoMTc2NCwgbG9jLAorIAkJCQkJCSJDYW5ub3QgdXNlIGZpeGVkIHZhcmlh YmxlIGB7MH0nIGluc2lkZSBhbiBhbm9ueW1vdXMgbWV0aG9kLCBsYW1iZGEgZXhwcmVzc2lvbiBv ciBxdWVyeSBleHByZXNzaW9uIiwKKyAJCQkJCQlHZXRTaWduYXR1cmVGb3JFcnJvciAoKSk7Cist CQkJCX0gZWxzZSBpZiAobG9jYWxfaW5mby5Jc0J5UmVmKSB7CistCQkJCQllYy5SZXBvcnQuRXJy b3IgKDgxNzUsIGxvYywKKy0JCQkJCQkiQ2Fubm90IHVzZSBieS1yZWZlcmVuY2UgdmFyaWFibGUg YHswfScgaW5zaWRlIGFuIGFub255bW91cyBtZXRob2QsIGxhbWJkYSBleHByZXNzaW9uLCBvciBx dWVyeSBleHByZXNzaW9uIiwKKy0JCQkJCQlHZXRTaWduYXR1cmVGb3JFcnJvciAoKSk7CisrCQkJ CX0gZWxzZSBpZiAobG9jYWxfaW5mby5Jc0J5UmVmIHx8IGxvY2FsX2luZm8uVHlwZS5Jc0J5UmVm TGlrZSkgeworKwkJCQkJaWYgKGVjLkN1cnJlbnRBbm9ueW1vdXNNZXRob2QgaXMgU3RhdGVNYWNo aW5lSW5pdGlhbGl6ZXIpIHsKKysJCQkJCQkvLyBJdCdzIHJlcG9ydGVkIGxhdGVyIGFzIDQwMTIv NDAxMworKwkJCQkJfSBlbHNlIHsKKysJCQkJCQllYy5SZXBvcnQuRXJyb3IgKDgxNzUsIGxvYywK KysJCQkJCQkJIkNhbm5vdCB1c2UgYnktcmVmZXJlbmNlIHZhcmlhYmxlIGB7MH0nIGluc2lkZSBh biBhbm9ueW1vdXMgbWV0aG9kLCBsYW1iZGEgZXhwcmVzc2lvbiwgb3IgcXVlcnkgZXhwcmVzc2lv biIsCisrCQkJCQkJCUdldFNpZ25hdHVyZUZvckVycm9yICgpKTsKKysJCQkJCX0KKyAJCQkJfQor IAorIAkJCQlpZiAoZWMuSXNWYXJpYWJsZUNhcHR1cmluZ1JlcXVpcmVkKSB7CitAQCAtNjc4Myw3 ICs2ODE2LDkgQEAgbmFtZXNwYWNlIE1vbm8uQ1NoYXJwCisgCQkJCWxvY2FsX2luZm8uU2V0SXNV c2VkICgpOworIAorIAkJCWlmIChsb2NhbF9pbmZvLklzUmVhZG9ubHkgJiYgIWVjLkhhc0FueSAo UmVzb2x2ZUNvbnRleHQuT3B0aW9ucy5GaWVsZEluaXRpYWxpemVyU2NvcGUgfCBSZXNvbHZlQ29u dGV4dC5PcHRpb25zLlVzaW5nSW5pdGlhbGl6ZXJTY29wZSkpIHsKKy0JCQkJaWYgKHJocyA9PSBF bXB0eUV4cHJlc3Npb24uTFZhbHVlTWVtYmVyQWNjZXNzKSB7CisrCQkJCWlmIChsb2NhbF9pbmZv LklzQnlSZWYpIHsKKysJCQkJCS8vIE9LIGJlY2F1c2UgaXQgY2Fubm90IGJlIHJlYXNzaWduZWQK KysJCQkJfSBlbHNlIGlmIChyaHMgPT0gRW1wdHlFeHByZXNzaW9uLkxWYWx1ZU1lbWJlckFjY2Vz cykgeworIAkJCQkJLy8gQ1MxNjU0IGFscmVhZHkgcmVwb3J0ZWQKKyAJCQkJfSBlbHNlIHsKKyAJ CQkJCWludCBjb2RlOworQEAgLTcxNzUsOCArNzIxMCw3IEBAIG5hbWVzcGFjZSBNb25vLkNTaGFy cAorIAkJeworIAkJCXZhciBzbiA9IGV4cHIgYXMgU2ltcGxlTmFtZTsKKyAJCQlpZiAoc24gIT0g bnVsbCAmJiBzbi5OYW1lID09ICJ2YXIiICYmIHNuLkFyaXR5ID09IDAgJiYgYXJndW1lbnRzPy5D b3VudCA+IDEpIHsKKy0JCQkJdmFyIHRhcmdldHMgPSBuZXcgTGlzdDxFeHByZXNzaW9uPiAoYXJn dW1lbnRzLkNvdW50KTsKKy0JCQkJdmFyIHZhcmlhYmxlcyA9IG5ldyBMaXN0PExvY2FsVmFyaWFi bGU+IChhcmd1bWVudHMuQ291bnQpOworKwkJCQl2YXIgdmFyaWFibGVzID0gbmV3IExpc3Q8Qmxv Y2tWYXJpYWJsZT4gKGFyZ3VtZW50cy5Db3VudCk7CisgCQkJCWZvcmVhY2ggKHZhciBhcmcgaW4g YXJndW1lbnRzKSB7CisgCQkJCQl2YXIgYXJnX3NuID0gYXJnLkV4cHIgYXMgU2ltcGxlTmFtZTsK KyAJCQkJCWlmIChhcmdfc24gPT0gbnVsbCB8fCBhcmdfc24uQXJpdHkgIT0gMCkgeworQEAgLTcx ODYsMTIgKzcyMjAsMTAgQEAgbmFtZXNwYWNlIE1vbm8uQ1NoYXJwCisgCisgCQkJCQl2YXIgbHYg PSBuZXcgTG9jYWxWYXJpYWJsZSAocmMuQ3VycmVudEJsb2NrLCBhcmdfc24uTmFtZSwgYXJnLkV4 cHIuTG9jYXRpb24pOworIAkJCQkJcmMuQ3VycmVudEJsb2NrLkFkZExvY2FsTmFtZSAobHYpOwor LQkJCQkJdmFyaWFibGVzLkFkZCAobHYpOworLQorLQkJCQkJdGFyZ2V0cy5BZGQgKG5ldyBMb2Nh bFZhcmlhYmxlUmVmZXJlbmNlIChsdiwgYXJnX3NuLkxvY2F0aW9uKSk7CisrCQkJCQl2YXJpYWJs ZXMuQWRkIChuZXcgQmxvY2tWYXJpYWJsZSAobmV3IFZhckV4cHIgKGx2LkxvY2F0aW9uKSwgbHYp KTsKKyAJCQkJfQorIAorLQkJCQl2YXIgcmVzID0gbmV3IFR1cGxlRGVjb25zdHJ1Y3QgKHRhcmdl dHMsIHZhcmlhYmxlcywgcmlnaHRfc2lkZSwgbG9jKTsKKysJCQkJdmFyIHJlcyA9IG5ldyBUdXBs ZURlY29uc3RydWN0ICh2YXJpYWJsZXMsIHJpZ2h0X3NpZGUsIGxvYyk7CisgCQkJCXJldHVybiBy ZXMuUmVzb2x2ZSAocmMpOworIAkJCX0KKyAKK0BAIC03MzA2LDE1ICs3MzM4LDggQEAgbmFtZXNw YWNlIE1vbm8uQ1NoYXJwCisgCQkJCisgCQkJZWNsYXNzID0gRXhwckNsYXNzLlZhbHVlOworIAor LQkJCWlmICh0eXBlLktpbmQgPT0gTWVtYmVyS2luZC5CeVJlZikgeworLQkJCQlpZiAocmhzID09 IG51bGwgJiYgYXJndW1lbnRzPy5Db250YWluc0VtaXRXaXRoQXdhaXQgKCkgPT0gdHJ1ZSkgewor LQkJCQkJZWMuUmVwb3J0LkVycm9yICg4MTc4LCBsb2MsICJgYXdhaXQnIGNhbm5vdCBiZSB1c2Vk IGluIGFuIGV4cHJlc3Npb24gY29udGFpbmluZyBhIGNhbGwgdG8gYHswfScgYmVjYXVzZSBpdCBy ZXR1cm5zIGJ5IHJlZmVyZW5jZSIsCistCQkJCQkJR2V0U2lnbmF0dXJlRm9yRXJyb3IgKCkpOwor LQkJCQl9CistCistCQkJCWlmIChyaHMgIT0gRW1wdHlFeHByZXNzaW9uLk91dEFjY2VzcykKKy0J CQkJCXJldHVybiBCeVJlZkRlcmVmZXJlbmNlLkNyZWF0ZSAodGhpcykuUmVzb2x2ZSAoZWMpOwor LQkJCX0KKysJCQlpZiAodHlwZS5LaW5kID09IE1lbWJlcktpbmQuQnlSZWYgJiYgcmhzICE9IEVt cHR5RXhwcmVzc2lvbi5PdXRBY2Nlc3MpCisrCQkJCXJldHVybiBCeVJlZkRlcmVmZXJlbmNlLkNy ZWF0ZSAodGhpcykuUmVzb2x2ZSAoZWMpOworIAorIAkJCXJldHVybiB0aGlzOworIAkJfQorQEAg LTkwMzQsNyArOTA1OSw3IEBAIG5hbWVzcGFjZSBNb25vLkNTaGFycAorIAkJCWlmIChlY2xhc3Mg PT0gRXhwckNsYXNzLlVucmVzb2x2ZWQpCisgCQkJCVJlc29sdmVCYXNlIChlYyk7CisgCistCQkJ aWYgKHR5cGUuSXNDbGFzcyB8fCB0eXBlLklzUmVhZE9ubHkpIHsKKysJCQlpZiAodHlwZS5Jc0Ns YXNzIHx8ICh0eXBlLklzUmVhZE9ubHkgJiYgIWVjLkhhc1NldCAoUmVzb2x2ZUNvbnRleHQuT3B0 aW9ucy5Db25zdHJ1Y3RvclNjb3BlKSkpIHsKKyAJCQkJaWYgKHJpZ2h0X3NpZGUgPT0gRW1wdHlF eHByZXNzaW9uLlVuYXJ5QWRkcmVzcykKKyAJCQkJCWVjLlJlcG9ydC5FcnJvciAoNDU5LCBsb2Ms ICJDYW5ub3QgdGFrZSB0aGUgYWRkcmVzcyBvZiBgdGhpcycgYmVjYXVzZSBpdCBpcyByZWFkLW9u bHkiKTsKKyAJCQkJZWxzZSBpZiAocmlnaHRfc2lkZSA9PSBFbXB0eUV4cHJlc3Npb24uT3V0QWNj ZXNzKQorQEAgLTk5MDgsNyArOTkzMyw3IEBAIG5hbWVzcGFjZSBNb25vLkNTaGFycAorIAkJcHVi bGljIHN0YXRpYyBib29sIElzVmFsaWREb3RFeHByZXNzaW9uIChUeXBlU3BlYyB0eXBlKQorIAkJ eworIAkJCWNvbnN0IE1lbWJlcktpbmQgZG90X2tpbmRzID0gTWVtYmVyS2luZC5DbGFzcyB8IE1l bWJlcktpbmQuU3RydWN0IHwgTWVtYmVyS2luZC5EZWxlZ2F0ZSB8IE1lbWJlcktpbmQuRW51bSB8 CistCQkJCU1lbWJlcktpbmQuSW50ZXJmYWNlIHwgTWVtYmVyS2luZC5UeXBlUGFyYW1ldGVyIHwg TWVtYmVyS2luZC5BcnJheVR5cGU7CisrCQkJCU1lbWJlcktpbmQuSW50ZXJmYWNlIHwgTWVtYmVy S2luZC5UeXBlUGFyYW1ldGVyIHwgTWVtYmVyS2luZC5BcnJheVR5cGUgIHwgTWVtYmVyS2luZC5C eVJlZjsKKyAKKyAJCQlyZXR1cm4gKHR5cGUuS2luZCAmIGRvdF9raW5kcykgIT0gMCB8fCB0eXBl LkJ1aWx0aW5UeXBlID09IEJ1aWx0aW5UeXBlU3BlYy5UeXBlLkR5bmFtaWM7CisgCQl9CitAQCAt MTE2MTQsNyArMTE2MzksNyBAQCBuYW1lc3BhY2UgTW9uby5DU2hhcnAKKyAJCQl9CisgCisgCQkJ aWYgKHNpbmdsZV9zcGVjICE9IG51bGwgJiYgc2luZ2xlX3NwZWMuRGltZW5zaW9uID4gMCkgewor LQkJCQlpZiAodHlwZS5Jc1NwZWNpYWxSdW50aW1lVHlwZSkgeworKwkJCQlpZiAodHlwZS5Jc1Nw ZWNpYWxSdW50aW1lVHlwZSB8fCB0eXBlLklzQnlSZWZMaWtlKSB7CisgCQkJCQllYy5Nb2R1bGUu Q29tcGlsZXIuUmVwb3J0LkVycm9yICg2MTEsIGxvYywgIkFycmF5IGVsZW1lbnRzIGNhbm5vdCBi ZSBvZiB0eXBlIGB7MH0nIiwgdHlwZS5HZXRTaWduYXR1cmVGb3JFcnJvciAoKSk7CisgCQkJCX0g ZWxzZSBpZiAodHlwZS5Jc1N0YXRpYykgeworIAkJCQkJZWMuTW9kdWxlLkNvbXBpbGVyLlJlcG9y dC5TeW1ib2xSZWxhdGVkVG9QcmV2aW91c0Vycm9yICh0eXBlKTsKK0BAIC0xMTY1MCw2ICsxMTY3 NSwxMyBAQCBuYW1lc3BhY2UgTW9uby5DU2hhcnAKKyAJY2xhc3MgUmVmZXJlbmNlVHlwZUV4cHIg OiBUeXBlRXhwcgorIAl7CisgCQlGdWxsTmFtZWRFeHByZXNzaW9uIGVsZW1lbnQ7CisrCQlyZWFk b25seSBib29sIHJlYWRPbmx5OworKworKwkJcHVibGljIFJlZmVyZW5jZVR5cGVFeHByIChGdWxs TmFtZWRFeHByZXNzaW9uIGVsZW1lbnQsIGJvb2wgcmVhZE9ubHksIExvY2F0aW9uIGxvYykKKysJ CQk6IHRoaXMgKGVsZW1lbnQsIGxvYykKKysJCXsKKysJCQl0aGlzLnJlYWRPbmx5ID0gcmVhZE9u bHk7CisrCQl9CisgCisgCQlwdWJsaWMgUmVmZXJlbmNlVHlwZUV4cHIgKEZ1bGxOYW1lZEV4cHJl c3Npb24gZWxlbWVudCwgTG9jYXRpb24gbG9jKQorIAkJeworQEAgLTExNjY0LDE0ICsxMTY5Niwx NyBAQCBuYW1lc3BhY2UgTW9uby5DU2hhcnAKKyAJCQkJcmV0dXJuIG51bGw7CisgCisgCQkJZWNs YXNzID0gRXhwckNsYXNzLlR5cGU7CistCQkJdHlwZSA9IFJlZmVyZW5jZUNvbnRhaW5lci5NYWtl VHlwZSAobWMuTW9kdWxlLCB0eXBlKTsKKysJCQl0eXBlID0gcmVhZE9ubHkgPworKwkJCQlSZWFk T25seVJlZmVyZW5jZUNvbnRhaW5lci5NYWtlVHlwZSAobWMuTW9kdWxlLCB0eXBlKSA6CisrCQkJ CVJlZmVyZW5jZUNvbnRhaW5lci5NYWtlVHlwZSAobWMuTW9kdWxlLCB0eXBlKTsKKyAKKyAJCQly ZXR1cm4gdHlwZTsKKyAJCX0KKyAKKyAJCXB1YmxpYyBvdmVycmlkZSBzdHJpbmcgR2V0U2lnbmF0 dXJlRm9yRXJyb3IgKCkKKyAJCXsKKy0JCQlyZXR1cm4gInJlZiAiICsgZWxlbWVudC5HZXRTaWdu YXR1cmVGb3JFcnJvciAoKTsKKysJCQl2YXIgcHJlZml4ID0gcmVhZE9ubHkgPyAicmVmICIgOiAi cmVmIHJlYWRvbmx5ICI7CisrCQkJcmV0dXJuIHByZWZpeCArIGVsZW1lbnQuR2V0U2lnbmF0dXJl Rm9yRXJyb3IgKCk7CisgCQl9CisgCisgCQlwdWJsaWMgb3ZlcnJpZGUgb2JqZWN0IEFjY2VwdCAo U3RydWN0dXJhbFZpc2l0b3IgdmlzaXRvcikKK0BAIC0xMTc4Myw2ICsxMTgxOCw3IEBAIG5hbWVz cGFjZSBNb25vLkNTaGFycAorIAkJVHlwZVNwZWMgb3R5cGU7CisgCQlFeHByZXNzaW9uIHRleHBy OworIAkJRXhwcmVzc2lvbiBjb3VudDsKKysJCU1ldGhvZFNwZWMgY3RvcjsKKyAJCQorIAkJcHVi bGljIFN0YWNrQWxsb2MgKEV4cHJlc3Npb24gdHlwZSwgRXhwcmVzc2lvbiBjb3VudCwgTG9jYXRp b24gbCkKKyAJCXsKK0BAIC0xMTg1Miw2ICsxMTg4OCwxMSBAQCBuYW1lc3BhY2UgTW9uby5DU2hh cnAKKyAJCQlpbnQgc2l6ZSA9IEJ1aWx0aW5UeXBlU3BlYy5HZXRTaXplIChvdHlwZSk7CisgCisg CQkJY291bnQuRW1pdCAoZWMpOworKwkJCWJvb2wgY291bnRfb25fc3RhY2sgPSBmYWxzZTsKKysJ CQlpZiAoY3RvciAhPSBudWxsICYmICFFeHByZXNzaW9uQW5hbHl6ZXIuSXNJbmV4cGVuc2l2ZUxv YWQgKGNvdW50KSkgeworKwkJCQllYy5FbWl0IChPcENvZGVzLkR1cCk7CisrCQkJCWNvdW50X29u X3N0YWNrID0gdHJ1ZTsKKysJCQl9CisgCisgCQkJaWYgKHNpemUgPT0gMCkKKyAJCQkJZWMuRW1p dCAoT3BDb2Rlcy5TaXplb2YsIG90eXBlKTsKK0BAIC0xMTg2MCw2ICsxMTkwMSwxOSBAQCBuYW1l c3BhY2UgTW9uby5DU2hhcnAKKyAKKyAJCQllYy5FbWl0IChPcENvZGVzLk11bF9PdmZfVW4pOwor IAkJCWVjLkVtaXQgKE9wQ29kZXMuTG9jYWxsb2MpOworKworKwkJCWlmIChjdG9yICE9IG51bGwp IHsKKysJCQkJaWYgKCFjb3VudF9vbl9zdGFjaykKKysJCQkJCWNvdW50LkVtaXQgKGVjKTsKKysJ CQkJZWMuRW1pdCAoT3BDb2Rlcy5OZXdvYmosIGN0b3IpOworKwkJCX0KKysJCX0KKysKKysJCXB1 YmxpYyBvdmVycmlkZSB2b2lkIEVycm9yX1ZhbHVlQ2Fubm90QmVDb252ZXJ0ZWQgKFJlc29sdmVD b250ZXh0IHJjLCBUeXBlU3BlYyB0YXJnZXQsIGJvb2wgZXhwbCkKKysJCXsKKysJCQl2YXIgZXR5 cGUgPSAoKFBvaW50ZXJDb250YWluZXIpdHlwZSkuRWxlbWVudDsKKysJCQlyYy5SZXBvcnQuRXJy b3IgKDgzNDYsIGxvYywgIkNhbm5vdCBjb252ZXJ0IGEgc3RhY2thbGxvYyBleHByZXNzaW9uIG9m IHR5cGUgYHswfScgdG8gdHlwZSBgezF9JyIsCisrCQkJICAgICAgICAgICAgICAgICBldHlwZS5H ZXRTaWduYXR1cmVGb3JFcnJvciAoKSwgdGFyZ2V0LkdldFNpZ25hdHVyZUZvckVycm9yICgpKTsK KyAJCX0KKyAKKyAJCXByb3RlY3RlZCBvdmVycmlkZSB2b2lkIENsb25lVG8gKENsb25lQ29udGV4 dCBjbG9uZWN0eCwgRXhwcmVzc2lvbiB0KQorQEAgLTExODczLDYgKzExOTI3LDE2IEBAIG5hbWVz cGFjZSBNb25vLkNTaGFycAorIAkJeworIAkJCXJldHVybiB2aXNpdG9yLlZpc2l0ICh0aGlzKTsK KyAJCX0KKysKKysJCXB1YmxpYyBib29sIFJlc29sdmVTcGFuQ29udmVyc2lvbiAoUmVzb2x2ZUNv bnRleHQgcmMsIFR5cGVTcGVjIHNwYW5UeXBlKQorKwkJeworKwkJCWN0b3IgPSBNZW1iZXJDYWNo ZS5GaW5kTWVtYmVyIChzcGFuVHlwZSwgTWVtYmVyRmlsdGVyLkNvbnN0cnVjdG9yIChQYXJhbWV0 ZXJzQ29tcGlsZWQuQ3JlYXRlRnVsbHlSZXNvbHZlZCAoUG9pbnRlckNvbnRhaW5lci5NYWtlVHlw ZSAocmMuTW9kdWxlLCByYy5Nb2R1bGUuQ29tcGlsZXIuQnVpbHRpblR5cGVzLlZvaWQpLCByYy5N b2R1bGUuQ29tcGlsZXIuQnVpbHRpblR5cGVzLkludCkpLCBCaW5kaW5nUmVzdHJpY3Rpb24uRGVj bGFyZWRPbmx5KSBhcyBNZXRob2RTcGVjOworKwkJCWlmIChjdG9yID09IG51bGwpCisrCQkJCXJl dHVybiBmYWxzZTsKKysJCQkKKysJCQl0aGlzLnR5cGUgPSBzcGFuVHlwZTsKKysJCQlyZXR1cm4g dHJ1ZTsKKysJCX0KKyAJfQorIAorIAkvLworQEAgLTEzMDkzLDYgKzEzMTU3LDEyIEBAIG5hbWVz cGFjZSBNb25vLkNTaGFycAorIAkJCWV4cHIuRW1pdCAoZWMpOworIAkJfQorIAorKwkJcHVibGlj IG92ZXJyaWRlIEV4cHJlc3Npb24gQ3JlYXRlRXhwcmVzc2lvblRyZWUgKFJlc29sdmVDb250ZXh0 IHJjKQorKwkJeworKwkJCXJjLlJlcG9ydC5FcnJvciAoODE1MywgTG9jYXRpb24sICJBbiBleHBy ZXNzaW9uIHRyZWUgbGFtYmRhIGNhbm5vdCBjb250YWluIGEgY2FsbCB0byBhIG1ldGhvZCwgcHJv cGVydHksIG9yIGluZGV4ZXIgdGhhdCByZXR1cm5zIGJ5IHJlZmVyZW5jZSIpOworKwkJCXJldHVy biBudWxsOworKwkJfQorKworIAkJcHVibGljIHZvaWQgRW1pdCAoRW1pdENvbnRleHQgZWMsIGJv b2wgbGVhdmVfY29weSkKKyAJCXsKKyAJCQlFbWl0IChlYyk7CitAQCAtMTMxMzMsNiArMTMyMDMs MTEgQEAgbmFtZXNwYWNlIE1vbm8uQ1NoYXJwCisgCisgCQlwdWJsaWMgb3ZlcnJpZGUgRXhwcmVz c2lvbiBEb1Jlc29sdmVMVmFsdWUgKFJlc29sdmVDb250ZXh0IHJjLCBFeHByZXNzaW9uIHJpZ2h0 X3NpZGUpCisgCQl7CisrCQkJaWYgKGV4cHIuQ29udGFpbnNFbWl0V2l0aEF3YWl0ICgpKSB7Cisr CQkJCXJjLlJlcG9ydC5FcnJvciAoODE3OCwgbG9jLCAiYGF3YWl0JyBjYW5ub3QgYmUgdXNlZCBp biBhbiBleHByZXNzaW9uIGNvbnRhaW5pbmcgYSBjYWxsIHRvIGB7MH0nIGJlY2F1c2UgaXQgcmV0 dXJucyBieSByZWZlcmVuY2UiLAorKwkJCQkJZXhwci5HZXRTaWduYXR1cmVGb3JFcnJvciAoKSk7 CisrCQkJfQorKworIAkJCXJldHVybiBEb1Jlc29sdmUgKHJjKTsKKyAJCX0KKyAKK0BAIC0xMzE0 OSw0ICsxMzIyNCw5OCBAQCBuYW1lc3BhY2UgTW9uby5DU2hhcnAKKyAJCQlyZXR1cm4gdmlzaXRv ci5WaXNpdCAodGhpcyk7CisgCQl9CisgCX0KKysKKysJY2xhc3MgRGVmYXVsdExpdGVyYWxFeHBy ZXNzaW9uIDogRXhwcmVzc2lvbgorKwl7CisrCQlwdWJsaWMgRGVmYXVsdExpdGVyYWxFeHByZXNz aW9uIChMb2NhdGlvbiBsb2MpCisrCQl7CisrCQkJdGhpcy5sb2MgPSBsb2M7CisrCQl9CisrCisr CQlwdWJsaWMgb3ZlcnJpZGUgRXhwcmVzc2lvbiBDcmVhdGVFeHByZXNzaW9uVHJlZSAoUmVzb2x2 ZUNvbnRleHQgZWMpCisrCQl7CisrCQkJdGhyb3cgbmV3IE5vdEltcGxlbWVudGVkRXhjZXB0aW9u ICgpOworKwkJfQorKworKwkJcHJvdGVjdGVkIG92ZXJyaWRlIEV4cHJlc3Npb24gRG9SZXNvbHZl IChSZXNvbHZlQ29udGV4dCByYykKKysJCXsKKysJCQl0eXBlID0gSW50ZXJuYWxUeXBlLkRlZmF1 bHRUeXBlOworKwkJCWVjbGFzcyA9IEV4cHJDbGFzcy5WYWx1ZTsKKysJCQlyZXR1cm4gdGhpczsK KysJCX0KKysKKysJCXB1YmxpYyBvdmVycmlkZSB2b2lkIEVtaXQgKEVtaXRDb250ZXh0IGVjKQor KwkJeworKwkJCXRocm93IG5ldyBOb3RTdXBwb3J0ZWRFeGNlcHRpb24gKCk7CisrCQl9CisrCX0K KysKKysJY2xhc3MgRGlzY2FyZCA6IEV4cHJlc3Npb24sIElBc3NpZ25NZXRob2QsIElNZW1vcnlM b2NhdGlvbgorKwl7CisrCQlwdWJsaWMgRGlzY2FyZCAoTG9jYXRpb24gbG9jKQorKwkJeworKwkJ CXRoaXMubG9jID0gbG9jOworKwkJfQorKworKwkJcHVibGljIG92ZXJyaWRlIEV4cHJlc3Npb24g Q3JlYXRlRXhwcmVzc2lvblRyZWUgKFJlc29sdmVDb250ZXh0IHJjKQorKwkJeworKwkJCXJjLlJl cG9ydC5FcnJvciAoODIwNywgbG9jLCAiQW4gZXhwcmVzc2lvbiB0cmVlIGNhbm5vdCBjb250YWlu IGEgZGlzY2FyZCIpOworKwkJCXJldHVybiBudWxsOworKwkJfQorKworKwkJcHJvdGVjdGVkIG92 ZXJyaWRlIEV4cHJlc3Npb24gRG9SZXNvbHZlIChSZXNvbHZlQ29udGV4dCByYykKKysJCXsKKysJ CQl0eXBlID0gSW50ZXJuYWxUeXBlLkRpc2NhcmQ7CisrCQkJZWNsYXNzID0gRXhwckNsYXNzLlZh cmlhYmxlOworKwkJCXJldHVybiB0aGlzOworKwkJfQorKworKwkJcHVibGljIG92ZXJyaWRlIEV4 cHJlc3Npb24gRG9SZXNvbHZlTFZhbHVlIChSZXNvbHZlQ29udGV4dCByYywgRXhwcmVzc2lvbiBy aWdodF9zaWRlKQorKwkJeworKwkJCWlmIChyaWdodF9zaWRlLlR5cGUgPT0gSW50ZXJuYWxUeXBl LkRlZmF1bHRUeXBlKSB7CisrCQkJCXJjLlJlcG9ydC5FcnJvciAoODE4MywgbG9jLCAiQ2Fubm90 IGluZmVyIHRoZSB0eXBlIG9mIGltcGxpY2l0bHktdHlwZWQgZGlzY2FyZCIpOworKwkJCQl0eXBl ID0gSW50ZXJuYWxUeXBlLkVycm9yVHlwZTsKKysJCQkJcmV0dXJuIHRoaXM7CisrCQkJfQorKwor KwkJCWlmIChyaWdodF9zaWRlLlR5cGUuS2luZCA9PSBNZW1iZXJLaW5kLlZvaWQpIHsKKysJCQkJ cmMuUmVwb3J0LkVycm9yICg4MjA5LCBsb2MsICJDYW5ub3QgYXNzaWduIHZvaWQgdG8gYSBkaXNj YXJkIik7CisrCQkJCXR5cGUgPSBJbnRlcm5hbFR5cGUuRXJyb3JUeXBlOworKwkJCQlyZXR1cm4g dGhpczsKKysJCQl9CisrCisrCQkJaWYgKHJpZ2h0X3NpZGUgIT0gRW1wdHlFeHByZXNzaW9uLk91 dEFjY2VzcykgeworKwkJCQl0eXBlID0gcmlnaHRfc2lkZS5UeXBlOworKwkJCX0KKysKKysJCQly ZXR1cm4gdGhpczsKKysJCX0KKysKKysJCXB1YmxpYyBvdmVycmlkZSB2b2lkIEVtaXQgKEVtaXRD b250ZXh0IGVjKQorKwkJeworKwkJCXRocm93IG5ldyBOb3RJbXBsZW1lbnRlZEV4Y2VwdGlvbiAo KTsKKysJCX0KKysKKysJCXB1YmxpYyB2b2lkIEVtaXQgKEVtaXRDb250ZXh0IGVjLCBib29sIGxl YXZlX2NvcHkpCisrCQl7CisrCQkJdGhyb3cgbmV3IE5vdEltcGxlbWVudGVkRXhjZXB0aW9uICgp OworKwkJfQorKworKwkJcHVibGljIHZvaWQgRW1pdEFzc2lnbiAoRW1pdENvbnRleHQgZWMsIEV4 cHJlc3Npb24gc291cmNlLCBib29sIGxlYXZlX2NvcHksIGJvb2wgaXNDb21wb3VuZCkKKysJCXsK KysJCQlpZiAobGVhdmVfY29weSkKKysJCQkJc291cmNlLkVtaXQgKGVjKTsKKysJCQllbHNlCisr CQkJCXNvdXJjZS5FbWl0U2lkZUVmZmVjdCAoZWMpOworKwkJfQorKworKwkJcHVibGljIHZvaWQg QWRkcmVzc09mIChFbWl0Q29udGV4dCBlYywgQWRkcmVzc09wIG1vZGUpCisrCQl7CisrCQkJdmFy IHRlbXAgPSBlYy5HZXRUZW1wb3JhcnlMb2NhbCAodHlwZSk7CisrCQkJZWMuRW1pdCAoT3BDb2Rl cy5MZGxvY2EsIHRlbXApOworKworKwkJCS8vIFRPRE86IFNob3VsZCBmcmVlIGl0IG9uIG5leHQg c3RhdGVtZW50IGJ1dCBkb24ndCBoYXZlIG1lY2hhbmlzbSBmb3IgdGhhdCB5ZXQKKysJCQkvLyBl Yy5GcmVlVGVtcG9yYXJ5TG9jYWwgKHRlbXAsIHR5cGUpOworKwkJfQorKwl9CisgfQorZGlmZiAt LWdpdCBhL21jcy9tY3MvZ2VuZXJpYy5jcyBiL21jcy9tY3MvZ2VuZXJpYy5jcworaW5kZXggNjI1 Y2QwYzc3M2YuLmVjMjk2NWRmNjNiIDEwMDY0NAorLS0tIGEvbWNzL21jcy9nZW5lcmljLmNzCisr KysgYi9tY3MvbWNzL2dlbmVyaWMuY3MKK0BAIC02OTMsNiArNjkzLDExIEBAIG5hbWVzcGFjZSBN b25vLkNTaGFycCB7CisgCQkJCQlHZXRTaWduYXR1cmVGb3JFcnJvciAoKSwgbWMuR2V0U2lnbmF0 dXJlRm9yRXJyb3IgKCksIGlucHV0X3ZhcmlhbmNlLCBndHlwZV92YXJpYW5jZSwgcGFyYW1ldGVy cyk7CisgCQl9CisgCisrCQlwdWJsaWMgVHlwZVNwZWMgR2V0QXN5bmNNZXRob2RCdWlsZGVyICgp CisrCQl7CisrCQkJcmV0dXJuIG51bGw7CisrCQl9CisrCisgCQlwdWJsaWMgVHlwZVNwZWMgR2V0 QXR0cmlidXRlQ29DbGFzcyAoKQorIAkJeworIAkJCXJldHVybiBudWxsOworQEAgLTIyOTIsNyAr MjI5Nyw3IEBAIG5hbWVzcGFjZSBNb25vLkNTaGFycCB7CisgCQkJCQlvayA9IGZhbHNlOworIAkJ CQl9CisgCistCQkJCWlmICh0ZS5Jc1BvaW50ZXIgfHwgdGUuSXNTcGVjaWFsUnVudGltZVR5cGUp IHsKKysJCQkJaWYgKHRlLklzUG9pbnRlciB8fCB0ZS5Jc1NwZWNpYWxSdW50aW1lVHlwZSB8fCB0 ZS5Jc0J5UmVmTGlrZSkgeworIAkJCQkJZWMuTW9kdWxlLkNvbXBpbGVyLlJlcG9ydC5FcnJvciAo MzA2LCBhcmdzW2ldLkxvY2F0aW9uLAorIAkJCQkJCSJUaGUgdHlwZSBgezB9JyBtYXkgbm90IGJl IHVzZWQgYXMgYSB0eXBlIGFyZ3VtZW50IiwKKyAJCQkJCQl0ZS5HZXRTaWduYXR1cmVGb3JFcnJv ciAoKSk7CitAQCAtMzEwMiw3ICszMTA3LDcgQEAgbmFtZXNwYWNlIE1vbm8uQ1NoYXJwIHsKKyAJ CQkvLworIAkJCS8vIFNvbWUgdHlwZXMgY2Fubm90IGJlIHVzZWQgYXMgdHlwZSBhcmd1bWVudHMK KyAJCQkvLworLQkJCWlmICgoYm91bmQuVHlwZS5LaW5kID09IE1lbWJlcktpbmQuVm9pZCAmJiAh dm9pZEFsbG93ZWQpIHx8IGJvdW5kLlR5cGUuSXNQb2ludGVyIHx8IGJvdW5kLlR5cGUuSXNTcGVj aWFsUnVudGltZVR5cGUgfHwKKysJCQlpZiAoKGJvdW5kLlR5cGUuS2luZCA9PSBNZW1iZXJLaW5k LlZvaWQgJiYgIXZvaWRBbGxvd2VkKSB8fCBib3VuZC5UeXBlLklzUG9pbnRlciB8fCBib3VuZC5U eXBlLklzU3BlY2lhbFJ1bnRpbWVUeXBlIHx8IGJvdW5kLlR5cGUuSXNCeVJlZkxpa2UgfHwKKyAJ CQkgICAgYm91bmQuVHlwZSA9PSBJbnRlcm5hbFR5cGUuTWV0aG9kR3JvdXAgfHwgYm91bmQuVHlw ZSA9PSBJbnRlcm5hbFR5cGUuQW5vbnltb3VzTWV0aG9kIHx8IGJvdW5kLlR5cGUgPT0gSW50ZXJu YWxUeXBlLlZhck91dFR5cGUgfHwKKyAJCQkgICAgYm91bmQuVHlwZSA9PSBJbnRlcm5hbFR5cGUu VGhyb3dFeHByKQorIAkJCQlyZXR1cm47CitAQCAtMzExMCw2ICszMTE1LDkgQEAgbmFtZXNwYWNl IE1vbm8uQ1NoYXJwIHsKKyAJCQlpZiAoYm91bmQuVHlwZS5Jc1R1cGxlVHlwZSAmJiBUdXBsZUxp dGVyYWwuQ29udGFpbnNOb1R5cGVFbGVtZW50IChib3VuZC5UeXBlKSkKKyAJCQkJcmV0dXJuOwor IAorKwkJCWlmIChib3VuZC5UeXBlID09IEludGVybmFsVHlwZS5EZWZhdWx0VHlwZSkKKysJCQkJ cmV0dXJuOworKworIAkJCXZhciBhID0gYm91bmRzIFtpbmRleF07CisgCQkJaWYgKGEgPT0gbnVs bCkgeworIAkJCQlhID0gbmV3IExpc3Q8Qm91bmRJbmZvPiAoMik7CitkaWZmIC0tZ2l0IGEvbWNz L21jcy9pbXBvcnQuY3MgYi9tY3MvbWNzL2ltcG9ydC5jcworaW5kZXggMWNkZGY3YzAxZjQuLmY3 YzRmZDc0YjA4IDEwMDY0NAorLS0tIGEvbWNzL21jcy9pbXBvcnQuY3MKKysrKyBiL21jcy9tY3Mv aW1wb3J0LmNzCitAQCAtOTc1LDYgKzk3NSwxMCBAQCBuYW1lc3BhY2UgTW9uby5DU2hhcnAKKyAJ CQkJCQltb2QgfD0gTW9kaWZpZXJzLlJFQURPTkxZOworIAkJCQkJfQorIAorKwkJCQkJaWYgKEhh c0F0dHJpYnV0ZSAoQ3VzdG9tQXR0cmlidXRlRGF0YS5HZXRDdXN0b21BdHRyaWJ1dGVzICh0eXBl KSwgIklzQnlSZWZMaWtlQXR0cmlidXRlIiwgQ29tcGlsZXJTZXJ2aWNlc05hbWVzcGFjZSkpIHsK KysJCQkJCQltb2QgfD0gTW9kaWZpZXJzLlJFRjsKKysJCQkJCX0KKysKKyAJCQkJCWJyZWFrOwor IAkJCQl9CisgCQkJfQorQEAgLTE0MDEsNiArMTQwNSw3IEBAIG5hbWVzcGFjZSBNb25vLkNTaGFy cAorIAkJCXB1YmxpYyBzdHJpbmcgRGVmYXVsdEluZGV4ZXJOYW1lOworIAkJCXB1YmxpYyBib29s PyBDTFNBdHRyaWJ1dGVWYWx1ZTsKKyAJCQlwdWJsaWMgVHlwZVNwZWMgQ29DbGFzczsKKysJCQlw dWJsaWMgVHlwZVNwZWMgQXN5bmNNZXRob2RCdWlsZGVyOworIAorIAkJCXN0YXRpYyBib29sIEhh c01pc3NpbmdUeXBlIChDb25zdHJ1Y3RvckluZm8gY3RvcikKKyAJCQl7CitAQCAtMTUyMiw2ICsx NTI3LDIwIEBAIG5hbWVzcGFjZSBNb25vLkNTaGFycAorIAkJCQkJCQliYWcuQ29DbGFzcyA9IGlt cG9ydGVyLkltcG9ydFR5cGUgKChNZXRhVHlwZSkgYS5Db25zdHJ1Y3RvckFyZ3VtZW50c1swXS5W YWx1ZSk7CisgCQkJCQkJCWNvbnRpbnVlOworIAkJCQkJCX0KKysKKysJCQkJCQlpZiAobmFtZSA9 PSAiQXN5bmNNZXRob2RCdWlsZGVyQXR0cmlidXRlIikgeworKwkJCQkJCQlpZiAoZHQuTmFtZXNw YWNlICE9ICJTeXN0ZW0uUnVudGltZS5Db21waWxlclNlcnZpY2VzIikKKysJCQkJCQkJCWNvbnRp bnVlOworKworKwkJCQkJCQlpZiAoSGFzTWlzc2luZ1R5cGUgKGEuQ29uc3RydWN0b3IpKQorKwkJ CQkJCQkJY29udGludWU7CisrCisrCQkJCQkJCWlmIChiYWcgPT0gbnVsbCkKKysJCQkJCQkJCWJh ZyA9IG5ldyBBdHRyaWJ1dGVzQmFnICgpOworKworKwkJCQkJCQliYWcuQXN5bmNNZXRob2RCdWls ZGVyID0gaW1wb3J0ZXIuSW1wb3J0VHlwZSAoKE1ldGFUeXBlKWEuQ29uc3RydWN0b3JBcmd1bWVu dHMgWzBdLlZhbHVlKTsKKysJCQkJCQkJY29udGludWU7CisrCQkJCQkJfQorIAkJCQkJfQorIAkJ CQl9CisgCitAQCAtMjEyOSw2ICsyMTQ4LDE0IEBAIG5hbWVzcGFjZSBNb25vLkNTaGFycAorIAkJ CX0KKyAJCX0KKyAKKysJCXB1YmxpYyBUeXBlU3BlYyBHZXRBc3luY01ldGhvZEJ1aWxkZXIgKCkK KysJCXsKKysJCQlpZiAoY2F0dHJzID09IG51bGwpCisrCQkJCVJlYWRBdHRyaWJ1dGVzICgpOwor KworKwkJCXJldHVybiBjYXR0cnMuQXN5bmNNZXRob2RCdWlsZGVyOworKwkJfQorKworIAkJcHVi bGljIFR5cGVTcGVjIEdldEF0dHJpYnV0ZUNvQ2xhc3MgKCkKKyAJCXsKKyAJCQlpZiAoY2F0dHJz ID09IG51bGwpCitAQCAtMjQ0NSw2ICsyNDcyLDExIEBAIG5hbWVzcGFjZSBNb25vLkNTaGFycAor IAorIAkJI2VuZHJlZ2lvbgorIAorKwkJcHVibGljIFR5cGVTcGVjIEdldEFzeW5jTWV0aG9kQnVp bGRlciAoKQorKwkJeworKwkJCXJldHVybiBudWxsOworKwkJfQorKworIAkJcHVibGljIFR5cGVT cGVjIEdldEF0dHJpYnV0ZUNvQ2xhc3MgKCkKKyAJCXsKKyAJCQlyZXR1cm4gbnVsbDsKK2RpZmYg LS1naXQgYS9tY3MvbWNzL21lbWJlcmNhY2hlLmNzIGIvbWNzL21jcy9tZW1iZXJjYWNoZS5jcwor aW5kZXggZWViZjcxYjg0NGIuLmNhMDVkMmQ3YWZjIDEwMDY0NAorLS0tIGEvbWNzL21jcy9tZW1i ZXJjYWNoZS5jcworKysrIGIvbWNzL21jcy9tZW1iZXJjYWNoZS5jcworQEAgLTMwOSw3ICszMDks NiBAQCBuYW1lc3BhY2UgTW9uby5DU2hhcnAgeworIAkJCQkvLworIAkJCQlpZiAoIUJ1aWx0aW5U eXBlU3BlYy5Jc1ByaW1pdGl2ZVR5cGUgKGR0KSB8fCBkdC5CdWlsdGluVHlwZSA9PSBCdWlsdGlu VHlwZVNwZWMuVHlwZS5DaGFyKSB7CisgCQkJCQlzd2l0Y2ggKGR0LkJ1aWx0aW5UeXBlKSB7Cist CQkJCQljYXNlIEJ1aWx0aW5UeXBlU3BlYy5UeXBlLlN0cmluZzoKKyAJCQkJCWNhc2UgQnVpbHRp blR5cGVTcGVjLlR5cGUuRGVsZWdhdGU6CisgCQkJCQljYXNlIEJ1aWx0aW5UeXBlU3BlYy5UeXBl Lk11bHRpY2FzdERlbGVnYXRlOgorIAkJCQkJCWJyZWFrOworQEAgLTMxNyw2ICszMTYsOSBAQCBu YW1lc3BhY2UgTW9uby5DU2hhcnAgeworIAkJCQkJCWlmIChuYW1lID09IE9wZXJhdG9yLkdldE1l dGFkYXRhTmFtZSAoT3BlcmF0b3IuT3BUeXBlLkltcGxpY2l0KSB8fCBuYW1lID09IE9wZXJhdG9y LkdldE1ldGFkYXRhTmFtZSAoT3BlcmF0b3IuT3BUeXBlLkV4cGxpY2l0KSkgeworIAkJCQkJCQlz dGF0ZSB8PSBTdGF0ZUZsYWdzLkhhc0NvbnZlcnNpb25PcGVyYXRvcjsKKyAJCQkJCQl9IGVsc2Ug eworKwkJCQkJCQlpZiAoZHQuQnVpbHRpblR5cGUgPT0gQnVpbHRpblR5cGVTcGVjLlR5cGUuU3Ry aW5nKQorKwkJCQkJCQkJYnJlYWs7CisrCisgCQkJCQkJCXN0YXRlIHw9IFN0YXRlRmxhZ3MuSGFz VXNlck9wZXJhdG9yOworIAkJCQkJCX0KKyAKK2RpZmYgLS1naXQgYS9tY3MvbWNzL21ldGhvZC5j cyBiL21jcy9tY3MvbWV0aG9kLmNzCitpbmRleCBjY2Q0ODk4ZTkxYy4uMWZjYTEwZGQ2ZDAgMTAw NjQ0CistLS0gYS9tY3MvbWNzL21ldGhvZC5jcworKysrIGIvbWNzL21jcy9tZXRob2QuY3MKK0BA IC03MDEsNiArNzAxLDEwIEBAIG5hbWVzcGFjZSBNb25vLkNTaGFycCB7CisgCQkJaWYgKE1lbWJl clR5cGUuSXNTdGF0aWMpIHsKKyAJCQkJRXJyb3JfU3RhdGljUmV0dXJuVHlwZSAoKTsKKyAJCQl9 CisrCisrCQkJaWYgKE1lbWJlclR5cGUuSXNTcGVjaWFsUnVudGltZVR5cGUgJiYgQ29tcGlsZXIu U2V0dGluZ3MuU3RkTGliKSB7CisrCQkJCUVycm9yX1JldHVyblR5cGVDYW50QmVSZWZBbnkgKExv Y2F0aW9uLCBSZXR1cm5UeXBlLCBSZXBvcnQpOworKwkJCX0KKyAJCX0KKyAKKyAJCXB1YmxpYyBv dmVycmlkZSB2b2lkIEVtaXQgKCkKK0BAIC03MTYsNiArNzIwLDggQEAgbmFtZXNwYWNlIE1vbm8u Q1NoYXJwIHsKKyAJCQkJTW9kdWxlLlByZWRlZmluZWRBdHRyaWJ1dGVzLkR5bmFtaWMuRW1pdEF0 dHJpYnV0ZSAoQ3JlYXRlUmV0dXJuQnVpbGRlciAoKS5CdWlsZGVyKTsKKyAJCQl9IGVsc2UgaWYg KFJldHVyblR5cGUuSGFzRHluYW1pY0VsZW1lbnQpIHsKKyAJCQkJTW9kdWxlLlByZWRlZmluZWRB dHRyaWJ1dGVzLkR5bmFtaWMuRW1pdEF0dHJpYnV0ZSAoQ3JlYXRlUmV0dXJuQnVpbGRlciAoKS5C dWlsZGVyLCBSZXR1cm5UeXBlLCBMb2NhdGlvbik7CisrCQkJfSBlbHNlIGlmIChSZXR1cm5UeXBl IGlzIFJlYWRPbmx5UmVmZXJlbmNlQ29udGFpbmVyKSB7CisrCQkJCU1vZHVsZS5QcmVkZWZpbmVk QXR0cmlidXRlcy5Jc1JlYWRPbmx5LkVtaXRBdHRyaWJ1dGUgKENyZWF0ZVJldHVybkJ1aWxkZXIg KCkuQnVpbGRlcik7CisgCQkJfQorIAorIAkJCWlmIChSZXR1cm5UeXBlLkhhc05hbWVkVHVwbGVF bGVtZW50KSB7CitAQCAtNzY0LDYgKzc3MCwxMSBAQCBuYW1lc3BhY2UgTW9uby5DU2hhcnAgewor IAkJCQlHZXRTaWduYXR1cmVGb3JFcnJvciAoKSk7CisgCQl9CisgCisrCQlwdWJsaWMgc3RhdGlj IHZvaWQgRXJyb3JfUmV0dXJuVHlwZUNhbnRCZVJlZkFueSAoTG9jYXRpb24gbG9jLCBUeXBlU3Bl YyB0LCBSZXBvcnQgUmVwb3J0KQorKwkJeworKwkJCVJlcG9ydC5FcnJvciAoMTU5OSwgbG9jLCAi VGhlIHJldHVybiB0eXBlIG9mIGB7MH0nIGlzIG5vdCBhbGxvd2VkIiwgdC5HZXRTaWduYXR1cmVG b3JFcnJvciAoKSk7CisrCQl9CisrCisgCQlwdWJsaWMgYm9vbCBJc1BhcnRpYWxEZWZpbml0aW9u IHsKKyAJCQlnZXQgeworIAkJCQlyZXR1cm4gKE1vZEZsYWdzICYgTW9kaWZpZXJzLlBBUlRJQUwp ICE9IDAgJiYgQmxvY2sgPT0gbnVsbDsKK0BAIC0xMjMxLDExICsxMjQyLDYgQEAgbmFtZXNwYWNl IE1vbm8uQ1NoYXJwIHsKKyAJCQkJCSJJbnRyb2R1Y2luZyBgRmluYWxpemUnIG1ldGhvZCBjYW4g aW50ZXJmZXJlIHdpdGggZGVzdHJ1Y3RvciBpbnZvY2F0aW9uLiBEaWQgeW91IGludGVuZCB0byBk ZWNsYXJlIGEgZGVzdHJ1Y3Rvcj8iKTsKKyAJCQl9CisgCistCQkJaWYgKENvbXBpbGVyLlNldHRp bmdzLlN0ZExpYiAmJiBSZXR1cm5UeXBlLklzU3BlY2lhbFJ1bnRpbWVUeXBlKSB7CistCQkJCUVy cm9yMTU5OSAoTG9jYXRpb24sIFJldHVyblR5cGUsIFJlcG9ydCk7CistCQkJCXJldHVybiBmYWxz ZTsKKy0JCQl9CistCisgCQkJaWYgKEN1cnJlbnRUeXBlUGFyYW1ldGVycyA9PSBudWxsKSB7Cisg CQkJCWlmIChiYXNlX21ldGhvZCAhPSBudWxsICYmICFJc0V4cGxpY2l0SW1wbCkgeworIAkJCQkJ aWYgKHBhcmFtZXRlcnMuQ291bnQgPT0gMSAmJiBQYXJhbWV0ZXJUeXBlc1swXS5CdWlsdGluVHlw ZSA9PSBCdWlsdGluVHlwZVNwZWMuVHlwZS5PYmplY3QgJiYgTWVtYmVyTmFtZS5OYW1lID09ICJF cXVhbHMiKQorQEAgLTEyNjEsOCArMTI2Nyw5IEBAIG5hbWVzcGFjZSBNb25vLkNTaGFycCB7Cisg CQkJCWlmICgoTW9kRmxhZ3MgJiBNb2RpZmllcnMuQVNZTkMpICE9IDApIHsKKyAJCQkJCWlmIChS ZXR1cm5UeXBlLktpbmQgIT0gTWVtYmVyS2luZC5Wb2lkICYmCisgCQkJCQkJUmV0dXJuVHlwZSAh PSBNb2R1bGUuUHJlZGVmaW5lZFR5cGVzLlRhc2suVHlwZVNwZWMgJiYKKy0JCQkJCQkhUmV0dXJu VHlwZS5Jc0dlbmVyaWNUYXNrKSB7CistCQkJCQkJUmVwb3J0LkVycm9yICgxOTgzLCBMb2NhdGlv biwgIlRoZSByZXR1cm4gdHlwZSBvZiBhbiBhc3luYyBtZXRob2QgbXVzdCBiZSB2b2lkLCBUYXNr LCBvciBUYXNrPFQ+Iik7CisrCQkJCQkJIVJldHVyblR5cGUuSXNHZW5lcmljVGFzayAmJgorKwkJ CQkJICAgICFSZXR1cm5UeXBlLklzQ3VzdG9tVGFza1R5cGUgKCkpIHsKKysJCQkJCQlSZXBvcnQu RXJyb3IgKDE5ODMsIExvY2F0aW9uLCAiVGhlIHJldHVybiB0eXBlIG9mIGFuIGFzeW5jIG1ldGhv ZCBtdXN0IGJlIHZvaWQgb3IgdGFzayB0eXBlIik7CisgCQkJCQl9CisgCisgCQkJCQlibG9jayA9 IChUb3BsZXZlbEJsb2NrKSBibG9jay5Db252ZXJ0VG9Bc3luY1Rhc2sgKHRoaXMsIFBhcmVudC5Q YXJ0aWFsQ29udGFpbmVyLCBwYXJhbWV0ZXJzLCBSZXR1cm5UeXBlLCBudWxsLCBMb2NhdGlvbik7 CitAQCAtMTM5NiwxMSArMTQwMyw2IEBAIG5hbWVzcGFjZSBNb25vLkNTaGFycCB7CisgCQkJcmV0 dXJuIGJhc2UuRW5hYmxlT3ZlcmxvYWRDaGVja3MgKG92ZXJsb2FkKTsKKyAJCX0KKyAKKy0JCXB1 YmxpYyBzdGF0aWMgdm9pZCBFcnJvcjE1OTkgKExvY2F0aW9uIGxvYywgVHlwZVNwZWMgdCwgUmVw b3J0IFJlcG9ydCkKKy0JCXsKKy0JCQlSZXBvcnQuRXJyb3IgKDE1OTksIGxvYywgIk1ldGhvZCBv ciBkZWxlZ2F0ZSBjYW5ub3QgcmV0dXJuIHR5cGUgYHswfSciLCB0LkdldFNpZ25hdHVyZUZvckVy cm9yICgpKTsKKy0JCX0KKy0KKyAJCXByb3RlY3RlZCBvdmVycmlkZSBib29sIFJlc29sdmVNZW1i ZXJUeXBlICgpCisgCQl7CisgCQkJaWYgKEN1cnJlbnRUeXBlUGFyYW1ldGVycyAhPSBudWxsKSB7 CitAQCAtMjQ2Nyw2ICsyNDY5LDggQEAgbmFtZXNwYWNlIE1vbm8uQ1NoYXJwIHsKKyAJCQkJTW9k dWxlLlByZWRlZmluZWRBdHRyaWJ1dGVzLkR5bmFtaWMuRW1pdEF0dHJpYnV0ZSAoQ3JlYXRlUmV0 dXJuQnVpbGRlciAoKS5CdWlsZGVyKTsKKyAJCQl9IGVsc2UgaWYgKFJldHVyblR5cGUuSGFzRHlu YW1pY0VsZW1lbnQpIHsKKyAJCQkJTW9kdWxlLlByZWRlZmluZWRBdHRyaWJ1dGVzLkR5bmFtaWMu RW1pdEF0dHJpYnV0ZSAoQ3JlYXRlUmV0dXJuQnVpbGRlciAoKS5CdWlsZGVyLCBSZXR1cm5UeXBl LCBMb2NhdGlvbik7CisrCQkJfSBlbHNlIGlmIChSZXR1cm5UeXBlIGlzIFJlYWRPbmx5UmVmZXJl bmNlQ29udGFpbmVyKSB7CisrCQkJCU1vZHVsZS5QcmVkZWZpbmVkQXR0cmlidXRlcy5Jc1JlYWRP bmx5LkVtaXRBdHRyaWJ1dGUgKENyZWF0ZVJldHVybkJ1aWxkZXIgKCkuQnVpbGRlcik7CisgCQkJ fQorIAorIAkJCWlmIChSZXR1cm5UeXBlLkhhc05hbWVkVHVwbGVFbGVtZW50KSB7CitkaWZmIC0t Z2l0IGEvbWNzL21jcy9tb2RpZmllcnMuY3MgYi9tY3MvbWNzL21vZGlmaWVycy5jcworaW5kZXgg YmZhZTU5ODVhMDMuLjkyNmFiNWQxODQ4IDEwMDY0NAorLS0tIGEvbWNzL21jcy9tb2RpZmllcnMu Y3MKKysrKyBiL21jcy9tY3MvbW9kaWZpZXJzLmNzCitAQCAtNTMsNiArNTMsNyBAQCBuYW1lc3Bh Y2UgTW9uby5DU2hhcnAKKyAJCURFQlVHR0VSX0hJRERFTgkJCT0gMHg0MDAwMDAsCisgCQlERUJV R0dFUl9TVEVQX1RIUk9VR0gJPSAweDgwMDAwMCwKKyAJCUF1dG9Qcm9wZXJ0eQkJCT0gMHgxMDAw MDAwLAorKwkJUkVGICAgICAgICAgICAgICAgICAgICAgPSAweDIwMDAwMDAsCisgCisgCQlBY2Nl c3NpYmlsaXR5TWFzayA9IFBVQkxJQyB8IFBST1RFQ1RFRCB8IElOVEVSTkFMIHwgUFJJVkFURSwK KyAJCUFsbG93ZWRFeHBsaWNpdEltcGxGbGFncyA9IFVOU0FGRSB8IEVYVEVSTiwKK2RpZmYgLS1n aXQgYS9tY3MvbWNzL21vZHVsZS5jcyBiL21jcy9tY3MvbW9kdWxlLmNzCitpbmRleCAwMGFmYWM2 YzYwNC4uMjI5M2Q4MjViMzYgMTAwNjQ0CistLS0gYS9tY3MvbWNzL21vZHVsZS5jcworKysrIGIv bWNzL21jcy9tb2R1bGUuY3MKK0BAIC0yNjUsNiArMjY1LDcgQEAgbmFtZXNwYWNlIE1vbm8uQ1No YXJwCisgCQlyZWFkb25seSBEaWN0aW9uYXJ5PEFycmF5Q29udGFpbmVyLlR5cGVSYW5rUGFpciwg QXJyYXlDb250YWluZXI+IGFycmF5X3R5cGVzOworIAkJcmVhZG9ubHkgRGljdGlvbmFyeTxUeXBl U3BlYywgUG9pbnRlckNvbnRhaW5lcj4gcG9pbnRlcl90eXBlczsKKyAJCXJlYWRvbmx5IERpY3Rp b25hcnk8VHlwZVNwZWMsIFJlZmVyZW5jZUNvbnRhaW5lcj4gcmVmZXJlbmNlX3R5cGVzOworKwkJ cmVhZG9ubHkgRGljdGlvbmFyeTxUeXBlU3BlYywgUmVhZE9ubHlSZWZlcmVuY2VDb250YWluZXI+ IHJlYWRvbmx5X3JlZmVyZW5jZV90eXBlczsKKyAJCXJlYWRvbmx5IERpY3Rpb25hcnk8VHlwZVNw ZWMsIE1ldGhvZFNwZWM+IGF0dHJzX2NhY2hlOworIAkJcmVhZG9ubHkgRGljdGlvbmFyeTxUeXBl U3BlYywgQXdhaXRlckRlZmluaXRpb24+IGF3YWl0ZXJzOworIAkJcmVhZG9ubHkgRGljdGlvbmFy eTxUeXBlU3BlYywgVHlwZUluZm8+IHR5cGVfaW5mb19jYWNoZTsKK0BAIC0zMDEsNiArMzAyLDcg QEAgbmFtZXNwYWNlIE1vbm8uQ1NoYXJwCisgCQkJYXJyYXlfdHlwZXMgPSBuZXcgRGljdGlvbmFy eTxBcnJheUNvbnRhaW5lci5UeXBlUmFua1BhaXIsIEFycmF5Q29udGFpbmVyPiAoKTsKKyAJCQlw b2ludGVyX3R5cGVzID0gbmV3IERpY3Rpb25hcnk8VHlwZVNwZWMsIFBvaW50ZXJDb250YWluZXI+ ICgpOworIAkJCXJlZmVyZW5jZV90eXBlcyA9IG5ldyBEaWN0aW9uYXJ5PFR5cGVTcGVjLCBSZWZl cmVuY2VDb250YWluZXI+ICgpOworKwkJCXJlYWRvbmx5X3JlZmVyZW5jZV90eXBlcyA9IG5ldyBE aWN0aW9uYXJ5PFR5cGVTcGVjLCBSZWFkT25seVJlZmVyZW5jZUNvbnRhaW5lcj4gKCk7CisgCQkJ YXR0cnNfY2FjaGUgPSBuZXcgRGljdGlvbmFyeTxUeXBlU3BlYywgTWV0aG9kU3BlYz4gKCk7Cisg CQkJYXdhaXRlcnMgPSBuZXcgRGljdGlvbmFyeTxUeXBlU3BlYywgQXdhaXRlckRlZmluaXRpb24+ ICgpOworIAkJCXR5cGVfaW5mb19jYWNoZSA9IG5ldyBEaWN0aW9uYXJ5PFR5cGVTcGVjLCBUeXBl SW5mbz4gKCk7CitAQCAtNDI3LDYgKzQyOSwxMiBAQCBuYW1lc3BhY2UgTW9uby5DU2hhcnAKKyAJ CQl9CisgCQl9CisgCisrCQlpbnRlcm5hbCBEaWN0aW9uYXJ5PFR5cGVTcGVjLCBSZWFkT25seVJl ZmVyZW5jZUNvbnRhaW5lcj4gUmVhZG9ubHlSZWZlcmVuY2VUeXBlc0NhY2hlIHsKKysJCQlnZXQg eworKwkJCQlyZXR1cm4gcmVhZG9ubHlfcmVmZXJlbmNlX3R5cGVzOworKwkJCX0KKysJCX0KKysK KyAJCWludGVybmFsIERpY3Rpb25hcnk8VHlwZVNwZWMsIFR5cGVJbmZvPiBUeXBlSW5mb0NhY2hl IHsKKyAJCQlnZXQgeworIAkJCQlyZXR1cm4gdHlwZV9pbmZvX2NhY2hlOworZGlmZiAtLWdpdCBh L21jcy9tY3MvcGFyYW1ldGVyLmNzIGIvbWNzL21jcy9wYXJhbWV0ZXIuY3MKK2luZGV4IDJiZDJh NDk4YTkxLi5jYzEwZWVlMTYyYiAxMDA2NDQKKy0tLSBhL21jcy9tY3MvcGFyYW1ldGVyLmNzCisr KysgYi9tY3MvbWNzL3BhcmFtZXRlci5jcworQEAgLTE0NDcsNyArMTQ0Nyw3IEBAIG5hbWVzcGFj ZSBNb25vLkNTaGFycCB7CisgCisgCQkJZXhwciA9IENoaWxkOworIAorLQkJCWlmICghKGV4cHIg aXMgQ29uc3RhbnQgfHwgZXhwciBpcyBEZWZhdWx0VmFsdWVFeHByZXNzaW9uIHx8IChleHByIGlz IE5ldyAmJiAoKE5ldykgZXhwcikuSXNHZW5lcmF0ZWRTdHJ1Y3RDb25zdHJ1Y3RvcikpKSB7Cisr CQkJaWYgKCEoZXhwciBpcyBDb25zdGFudCB8fCBleHByIGlzIERlZmF1bHRWYWx1ZUV4cHJlc3Np b24gfHwgZXhwciBpcyBEZWZhdWx0TGl0ZXJhbEV4cHJlc3Npb24gfHwgKGV4cHIgaXMgTmV3ICYm ICgoTmV3KSBleHByKS5Jc0dlbmVyYXRlZFN0cnVjdENvbnN0cnVjdG9yKSkpIHsKKyAJCQkJaWYg KCEoZXhwciBpcyBFcnJvckV4cHJlc3Npb24pKSB7CisgCQkJCQlyYy5SZXBvcnQuRXJyb3IgKDE3 MzYsIExvY2F0aW9uLAorIAkJCQkJCSJUaGUgZXhwcmVzc2lvbiBiZWluZyBhc3NpZ25lZCB0byBv cHRpb25hbCBwYXJhbWV0ZXIgYHswfScgbXVzdCBiZSBhIGNvbnN0YW50IG9yIGRlZmF1bHQgdmFs dWUiLAorZGlmZiAtLWdpdCBhL21jcy9tY3Mvc3RhdGVtZW50LmNzIGIvbWNzL21jcy9zdGF0ZW1l bnQuY3MKK2luZGV4IDU4YmEyNzk1ZTRiLi45YzUxMTI4NTQ4ZiAxMDA2NDQKKy0tLSBhL21jcy9t Y3Mvc3RhdGVtZW50LmNzCisrKysgYi9tY3MvbWNzL3N0YXRlbWVudC5jcworQEAgLTExNjAsNyAr MTE2MCw4IEBAIG5hbWVzcGFjZSBNb25vLkNTaGFycCB7CisgCQkJCS8vCisgCQkJCWlmIChlYy5D dXJyZW50QW5vbnltb3VzTWV0aG9kIGlzIEFzeW5jSW5pdGlhbGl6ZXIpIHsKKyAJCQkJCXZhciBz dG9yZXkgPSAoQXN5bmNUYXNrU3RvcmV5KSBlYy5DdXJyZW50QW5vbnltb3VzTWV0aG9kLlN0b3Jl eTsKKy0JCQkJCWlmIChzdG9yZXkuUmV0dXJuVHlwZSA9PSBlYy5Nb2R1bGUuUHJlZGVmaW5lZFR5 cGVzLlRhc2suVHlwZVNwZWMpIHsKKysJCQkJCXZhciBzX3JldHVybl90eXBlID0gc3RvcmV5LlJl dHVyblR5cGU7CisrCQkJCQlpZiAoc19yZXR1cm5fdHlwZSA9PSBlYy5Nb2R1bGUuUHJlZGVmaW5l ZFR5cGVzLlRhc2suVHlwZVNwZWMpIHsKKyAJCQkJCQkvLworIAkJCQkJCS8vIEV4dHJhIHRyaWNr IG5vdCB0byBlbWl0IHJldC9sZWF2ZSBpbnNpZGUgYXdhaXRlciBib2R5CisgCQkJCQkJLy8KK0BA IC0xMTY4LDggKzExNjksOCBAQCBuYW1lc3BhY2UgTW9uby5DU2hhcnAgeworIAkJCQkJCXJldHVy biB0cnVlOworIAkJCQkJfQorIAorLQkJCQkJaWYgKHN0b3JleS5SZXR1cm5UeXBlLklzR2VuZXJp Y1Rhc2spCistCQkJCQkJYmxvY2tfcmV0dXJuX3R5cGUgPSBzdG9yZXkuUmV0dXJuVHlwZS5UeXBl QXJndW1lbnRzWzBdOworKwkJCQkJaWYgKHNfcmV0dXJuX3R5cGUuSXNHZW5lcmljVGFzayB8fCAo c19yZXR1cm5fdHlwZS5Bcml0eSA9PSAxICYmIHNfcmV0dXJuX3R5cGUuSXNDdXN0b21UYXNrVHlw ZSAoKSkpCisrCQkJCQkgICAgYmxvY2tfcmV0dXJuX3R5cGUgPSBzX3JldHVybl90eXBlLlR5cGVB cmd1bWVudHNbMF07CisgCQkJCX0KKyAKKyAJCQkJaWYgKGVjLkN1cnJlbnRJdGVyYXRvciAhPSBu dWxsKSB7CitAQCAtMTIyMCw3ICsxMjIxLDcgQEAgbmFtZXNwYWNlIE1vbm8uQ1NoYXJwIHsKKyAJ CQkJCQkJcmV0dXJuIGZhbHNlOworIAkJCQkJCX0KKyAKKy0JCQkJCQlpZiAoIWFzeW5jX3R5cGUu SXNHZW5lcmljVGFzaykgeworKwkJCQkJCWlmICghYXN5bmNfdHlwZS5Jc0dlbmVyaWMpIHsKKyAJ CQkJCQkJaWYgKHRoaXMgaXMgQ29udGV4dHVhbFJldHVybikKKyAJCQkJCQkJCXJldHVybiB0cnVl OworIAorQEAgLTIzNjgsNyArMjM2OSwxMiBAQCBuYW1lc3BhY2UgTW9uby5DU2hhcnAgeworIAkJ CWlmIChpbml0aWFsaXplciA9PSBudWxsKQorIAkJCQlyZXR1cm4gbnVsbDsKKyAKKy0JCQl2YXIg YyA9IGluaXRpYWxpemVyIGFzIENvbnN0YW50OworKwkJCUNvbnN0YW50IGM7CisrCQkJaWYgKGlu aXRpYWxpemVyLlR5cGUgPT0gSW50ZXJuYWxUeXBlLkRlZmF1bHRUeXBlKQorKwkJCQljID0gTmV3 LkNvbnN0YW50aWZ5IChsaS5UeXBlLCBpbml0aWFsaXplci5Mb2NhdGlvbik7CisrCQkJZWxzZQor KwkJCQljID0gaW5pdGlhbGl6ZXIgYXMgQ29uc3RhbnQ7CisrCisgCQkJaWYgKGMgPT0gbnVsbCkg eworIAkJCQlpbml0aWFsaXplci5FcnJvcl9FeHByZXNzaW9uTXVzdEJlQ29uc3RhbnQgKGJjLCBp bml0aWFsaXplci5Mb2NhdGlvbiwgbGkuTmFtZSk7CisgCQkJCXJldHVybiBudWxsOworQEAgLTI0 MDcsMTQgKzI0MTMsMTQgQEAgbmFtZXNwYWNlIE1vbm8uQ1NoYXJwIHsKKyAJCQlBZGRyZXNzVGFr ZW4gPSAxIDw8IDIsCisgCQkJQ29tcGlsZXJHZW5lcmF0ZWQgPSAxIDw8IDMsCisgCQkJQ29uc3Rh bnQgPSAxIDw8IDQsCistCQkJRm9yZWFjaFZhcmlhYmxlID0gMSA8PCA1LAorLQkJCUZpeGVkVmFy aWFibGUgPSAxIDw8IDYsCistCQkJVXNpbmdWYXJpYWJsZSA9IDEgPDwgNywKKysJCQlGb3JlYWNo VmFyaWFibGUgPSAxIDw8IDUgfCBSZWFkb25seU1hc2ssCisrCQkJRml4ZWRWYXJpYWJsZSA9IDEg PDwgNiB8IFJlYWRvbmx5TWFzaywKKysJCQlVc2luZ1ZhcmlhYmxlID0gMSA8PCA3IHwgUmVhZG9u bHlNYXNrLAorIAkJCUlzTG9ja2VkID0gMSA8PCA4LAorIAkJCVN5bWJvbEZpbGVIaWRkZW4gPSAx IDw8IDksCisgCQkJQnlSZWYgPSAxIDw8IDEwLAorIAorLQkJCVJlYWRvbmx5TWFzayA9IEZvcmVh Y2hWYXJpYWJsZSB8IEZpeGVkVmFyaWFibGUgfCBVc2luZ1ZhcmlhYmxlCisrCQkJUmVhZG9ubHlN YXNrID0gMSA8PCAyMAorIAkJfQorIAorIAkJVHlwZVNwZWMgdHlwZTsKK0BAIC0yNTM0LDcgKzI1 NDAsNyBAQCBuYW1lc3BhY2UgTW9uby5DU2hhcnAgeworIAorIAkJcHVibGljIGJvb2wgSXNGaXhl ZCB7CisgCQkJZ2V0IHsKKy0JCQkJcmV0dXJuIChmbGFncyAmIEZsYWdzLkZpeGVkVmFyaWFibGUp ICE9IDA7CisrCQkJCXJldHVybiAoZmxhZ3MgJiBGbGFncy5GaXhlZFZhcmlhYmxlKSA9PSBGbGFn cy5GaXhlZFZhcmlhYmxlOworIAkJCX0KKyAJCQlzZXQgeworIAkJCQlmbGFncyA9IHZhbHVlID8g ZmxhZ3MgfCBGbGFncy5GaXhlZFZhcmlhYmxlIDogZmxhZ3MgJiB+RmxhZ3MuRml4ZWRWYXJpYWJs ZTsKK0BAIC0yNjcyLDcgKzI2NzgsNyBAQCBuYW1lc3BhY2UgTW9uby5DU2hhcnAgeworIAorIAkJ cHVibGljIHN0cmluZyBHZXRSZWFkT25seUNvbnRleHQgKCkKKyAJCXsKKy0JCQlzd2l0Y2ggKGZs YWdzICYgRmxhZ3MuUmVhZG9ubHlNYXNrKSB7CisrCQkJc3dpdGNoIChmbGFncyAmIChGbGFncy5G b3JlYWNoVmFyaWFibGUgfCBGbGFncy5GaXhlZFZhcmlhYmxlIHwgRmxhZ3MuVXNpbmdWYXJpYWJs ZSkpIHsKKyAJCQljYXNlIEZsYWdzLkZpeGVkVmFyaWFibGU6CisgCQkJCXJldHVybiAiZml4ZWQg dmFyaWFibGUiOworIAkJCWNhc2UgRmxhZ3MuRm9yZWFjaFZhcmlhYmxlOgorQEAgLTgxOTEsNyAr ODE5Nyw5IEBAIG5hbWVzcGFjZSBNb25vLkNTaGFycCB7CisgCQkJCX0KKyAKKyAJCQkJaWYgKGlm YWNlX2NhbmRpZGF0ZSA9PSBudWxsKSB7CistCQkJCQlpZiAoZXhwci5UeXBlICE9IEludGVybmFs VHlwZS5FcnJvclR5cGUpIHsKKysJCQkJCWlmIChleHByLlR5cGUgPT0gSW50ZXJuYWxUeXBlLkRl ZmF1bHRUeXBlKSB7CisrCQkJCQkJcmMuUmVwb3J0LkVycm9yICg4MzEyLCBsb2MsICJVc2Ugb2Yg ZGVmYXVsdCBsaXRlcmFsIGlzIG5vdCB2YWxpZCBpbiB0aGlzIGNvbnRleHQiKTsKKysJCQkJCX0g ZWxzZSBpZiAoZXhwci5UeXBlICE9IEludGVybmFsVHlwZS5FcnJvclR5cGUpIHsKKyAJCQkJCQly Yy5SZXBvcnQuRXJyb3IgKDE1NzksIGxvYywKKyAJCQkJCQkJImZvcmVhY2ggc3RhdGVtZW50IGNh bm5vdCBvcGVyYXRlIG9uIHZhcmlhYmxlcyBvZiB0eXBlIGB7MH0nIGJlY2F1c2UgaXQgZG9lcyBu b3QgY29udGFpbiBhIGRlZmluaXRpb24gZm9yIGB7MX0nIG9yIGlzIGluYWNjZXNzaWJsZSIsCisg CQkJCQkJCWV4cHIuVHlwZS5HZXRTaWduYXR1cmVGb3JFcnJvciAoKSwgIkdldEVudW1lcmF0b3Ii KTsKK2RpZmYgLS1naXQgYS9tY3MvbWNzL3R1cGxlcy5jcyBiL21jcy9tY3MvdHVwbGVzLmNzCitp bmRleCBiYjdmYWY3MzRkZi4uOTAxZWZkYzk1NDEgMTAwNjQ0CistLS0gYS9tY3MvbWNzL3R1cGxl cy5jcworKysrIGIvbWNzL21jcy90dXBsZXMuY3MKK0BAIC00MzIsNyArNDMyLDcgQEAgbmFtZXNw YWNlIE1vbm8uQ1NoYXJwCisgCXsKKyAJCUV4cHJlc3Npb24gc291cmNlOworIAkJTGlzdDxFeHBy ZXNzaW9uPiB0YXJnZXRFeHByczsKKy0JCUxpc3Q8TG9jYWxWYXJpYWJsZT4gdmFyaWFibGVzVG9J bmZlcjsKKysJCUxpc3Q8QmxvY2tWYXJpYWJsZT4gdmFyaWFibGVzOworIAkJRXhwcmVzc2lvbiBp bnN0YW5jZTsKKyAKKyAJCXB1YmxpYyBUdXBsZURlY29uc3RydWN0IChMaXN0PEV4cHJlc3Npb24+ IHRhcmdldEV4cHJzLCBFeHByZXNzaW9uIHNvdXJjZSwgTG9jYXRpb24gbG9jKQorQEAgLTQ0Miwx MCArNDQyLDExIEBAIG5hbWVzcGFjZSBNb25vLkNTaGFycAorIAkJCXRoaXMubG9jID0gbG9jOwor IAkJfQorIAorLQkJcHVibGljIFR1cGxlRGVjb25zdHJ1Y3QgKExpc3Q8RXhwcmVzc2lvbj4gdGFy Z2V0RXhwcnMsIExpc3Q8TG9jYWxWYXJpYWJsZT4gdmFyaWFibGVzLCBFeHByZXNzaW9uIHNvdXJj ZSwgTG9jYXRpb24gbG9jKQorLQkJCTogdGhpcyAodGFyZ2V0RXhwcnMsIHNvdXJjZSwgbG9jKQor KwkJcHVibGljIFR1cGxlRGVjb25zdHJ1Y3QgKExpc3Q8QmxvY2tWYXJpYWJsZT4gdmFyaWFibGVz LCBFeHByZXNzaW9uIHNvdXJjZSwgTG9jYXRpb24gbG9jKQorIAkJeworLQkJCXRoaXMudmFyaWFi bGVzVG9JbmZlciA9IHZhcmlhYmxlczsKKysJCQl0aGlzLnNvdXJjZSA9IHNvdXJjZTsKKysJCQl0 aGlzLnZhcmlhYmxlcyA9IHZhcmlhYmxlczsKKysJCQl0aGlzLmxvYyA9IGxvYzsKKyAJCX0KKyAK KyAJCXB1YmxpYyBvdmVycmlkZSBFeHByZXNzaW9uIENyZWF0ZUV4cHJlc3Npb25UcmVlIChSZXNv bHZlQ29udGV4dCBlYykKK0BAIC00NjksOSArNDcwLDE4IEBAIG5hbWVzcGFjZSBNb25vLkNTaGFy cAorIAkJCXZhciBzcmNfdHlwZSA9IHNyYy5UeXBlOworIAorIAkJCWlmIChzcmNfdHlwZS5Jc1R1 cGxlVHlwZSkgeworLQkJCQlpZiAoc3JjX3R5cGUuQXJpdHkgIT0gdGFyZ2V0RXhwcnMuQ291bnQp IHsKKysJCQkJaW50IHRhcmdldF9jb3VudDsKKysKKysJCQkJaWYgKHRhcmdldEV4cHJzID09IG51 bGwpIHsKKysJCQkJCXRhcmdldF9jb3VudCA9IHZhcmlhYmxlcy5Db3VudDsKKysJCQkJCXRhcmdl dEV4cHJzID0gbmV3IExpc3Q8RXhwcmVzc2lvbj4gKHRhcmdldF9jb3VudCk7CisrCQkJCX0gZWxz ZSB7CisrCQkJCQl0YXJnZXRfY291bnQgPSB0YXJnZXRFeHBycy5Db3VudDsKKysJCQkJfQorKwor KwkJCQlpZiAoc3JjX3R5cGUuQXJpdHkgIT0gdGFyZ2V0X2NvdW50KSB7CisgCQkJCQlyYy5SZXBv cnQuRXJyb3IgKDgxMzIsIGxvYywgIkNhbm5vdCBkZWNvbnN0cnVjdCBhIHR1cGxlIG9mIGB7MH0n IGVsZW1lbnRzIGludG8gYHsxfScgdmFyaWFibGVzIiwKKy0JCQkJCQlzcmNfdHlwZS5Bcml0eS5U b1N0cmluZyAoKSwgdGFyZ2V0RXhwcnMuQ291bnQuVG9TdHJpbmcgKCkpOworKwkJCQkJCXNyY190 eXBlLkFyaXR5LlRvU3RyaW5nIChDdWx0dXJlSW5mby5JbnZhcmlhbnRDdWx0dXJlKSwgdGFyZ2V0 X2NvdW50LlRvU3RyaW5nIChDdWx0dXJlSW5mby5JbnZhcmlhbnRDdWx0dXJlKSk7CisgCQkJCQly ZXR1cm4gbnVsbDsKKyAJCQkJfQorIAorQEAgLTQ4MiwyNyArNDkyLDQ0IEBAIG5hbWVzcGFjZSBN b25vLkNTaGFycAorIAkJCQkJaW5zdGFuY2UgPSBleHByX3ZhcmlhYmxlLkNyZWF0ZVJlZmVyZW5j ZUV4cHJlc3Npb24gKHJjLCBsb2MpOworIAkJCQl9CisgCistCQkJCWZvciAoaW50IGkgPSAwOyBp IDwgdGFyZ2V0RXhwcnMuQ291bnQ7ICsraSkgeworKwkJCQlmb3IgKGludCBpID0gMDsgaSA8IHRh cmdldF9jb3VudDsgKytpKSB7CisgCQkJCQl2YXIgdGxlID0gc3JjX3R5cGUuVHlwZUFyZ3VtZW50 cyBbaV07CisgCistCQkJCQl2YXIgbHYgPSB2YXJpYWJsZXNUb0luZmVyPyBbaV07CistCQkJCQlp ZiAobHYgIT0gbnVsbCkgeworLQkJCQkJCWlmIChJbnRlcm5hbFR5cGUuSGFzTm9UeXBlICh0bGUp KSB7CistCQkJCQkJCXJjLlJlcG9ydC5FcnJvciAoODEzMCwgTG9jYXRpb24sICJDYW5ub3QgaW5m ZXIgdGhlIHR5cGUgb2YgaW1wbGljaXRseS10eXBlZCBkZWNvbnN0cnVjdGlvbiB2YXJpYWJsZSBg ezB9JyIsIGx2Lk5hbWUpOworLQkJCQkJCQlsdi5UeXBlID0gSW50ZXJuYWxUeXBlLkVycm9yVHlw ZTsKKysJCQkJCWlmICh2YXJpYWJsZXMgIT0gbnVsbCkgeworKwkJCQkJCXZhciB2YXJpYWJsZSA9 IHZhcmlhYmxlcyBbaV0uVmFyaWFibGU7CisrCisrCQkJCQkJaWYgKHZhcmlhYmxlLlR5cGUgPT0g SW50ZXJuYWxUeXBlLkRpc2NhcmQpIHsKKysJCQkJCQkJdmFyaWFibGVzIFtpXSA9IG51bGw7Cisr CQkJCQkJCXRhcmdldEV4cHJzLkFkZCAoRW1wdHlFeHByZXNzaW9uU3RhdGVtZW50Lkluc3RhbmNl KTsKKyAJCQkJCQkJY29udGludWU7CisgCQkJCQkJfQorIAorLQkJCQkJCWx2LlR5cGUgPSB0bGU7 CistCQkJCQkJbHYuUHJlcGFyZUFzc2lnbm1lbnRBbmFseXNpcyAoKEJsb2NrQ29udGV4dCkgcmMp OworLQkJCQkJfQorKwkJCQkJCXZhciB2YXJpYWJsZV90eXBlID0gdmFyaWFibGVzIFtpXS5UeXBl RXhwcmVzc2lvbjsKKysKKysJCQkJCQl0YXJnZXRFeHBycy5BZGQgKG5ldyBMb2NhbFZhcmlhYmxl UmVmZXJlbmNlICh2YXJpYWJsZSwgdmFyaWFibGUuTG9jYXRpb24pKTsKKysKKysJCQkJCQlpZiAo dmFyaWFibGVfdHlwZSBpcyBWYXJFeHByKSB7CisrCQkJCQkJCWlmIChJbnRlcm5hbFR5cGUuSGFz Tm9UeXBlICh0bGUpKSB7CisrCQkJCQkJCQlyYy5SZXBvcnQuRXJyb3IgKDgxMzAsIExvY2F0aW9u LCAiQ2Fubm90IGluZmVyIHRoZSB0eXBlIG9mIGltcGxpY2l0bHktdHlwZWQgZGVjb25zdHJ1Y3Rp b24gdmFyaWFibGUgYHswfSciLCB2YXJpYWJsZS5OYW1lKTsKKysJCQkJCQkJCXRsZSA9IEludGVy bmFsVHlwZS5FcnJvclR5cGU7CisrCQkJCQkJCX0KKyAKKysJCQkJCQkJdmFyaWFibGUuVHlwZSA9 IHRsZTsKKysJCQkJCQl9IGVsc2UgeworKwkJCQkJCQl2YXJpYWJsZS5UeXBlID0gdmFyaWFibGVf dHlwZS5SZXNvbHZlQXNUeXBlIChyYyk7CisrCQkJCQkJfQorKworKwkJCQkJCXZhcmlhYmxlLlBy ZXBhcmVBc3NpZ25tZW50QW5hbHlzaXMgKChCbG9ja0NvbnRleHQpcmMpOworKwkJCQkJfQorIAor IAkJCQkJdmFyIGVsZW1lbnRfc3JjID0gdHVwbGVMaXRlcmFsID09IG51bGwgPyBuZXcgTWVtYmVy QWNjZXNzIChpbnN0YW5jZSwgTmFtZWRUdXBsZVNwZWMuR2V0RWxlbWVudFByb3BlcnR5TmFtZSAo aSkpIDogdHVwbGVMaXRlcmFsLkVsZW1lbnRzIFtpXS5FeHByOworIAkJCQkJdGFyZ2V0RXhwcnMg W2ldID0gbmV3IFNpbXBsZUFzc2lnbiAodGFyZ2V0RXhwcnMgW2ldLCBlbGVtZW50X3NyYykuUmVz b2x2ZSAocmMpOworIAkJCQl9CisgCisgCQkJCWVjbGFzcyA9IEV4cHJDbGFzcy5WYWx1ZTsKKysK KysJCQkJLy8gVE9ETzogVGhlIHR5cGUgaXMgc2FtZSBvbmx5IGlmIHRoZXJlIGlzIG5vIHRhcmdl dCBlbGVtZW50IGNvbnZlcnNpb24KKysJCQkJLy8gdmFyIHJlcyA9ICgvKmJ5dGUqLyBiLCAvKnNo b3J0Ki8gcykgPSAoMiwgNCk7CisgCQkJCXR5cGUgPSBzcmMuVHlwZTsKKyAJCQkJcmV0dXJuIHRo aXM7CisgCQkJfQorQEAgLTUyNywxMSArNTU0LDI0IEBAIG5hbWVzcGFjZSBNb25vLkNTaGFycAor IAorIAkJcHVibGljIG92ZXJyaWRlIHZvaWQgRW1pdCAoRW1pdENvbnRleHQgZWMpCisgCQl7Cist CQkJdGhyb3cgbmV3IE5vdEltcGxlbWVudGVkRXhjZXB0aW9uICgpOworKwkJCWlmIChpbnN0YW5j ZSAhPSBudWxsKQorKwkJCQkoKEV4cHJlc3Npb25TdGF0ZW1lbnQpc291cmNlKS5FbWl0U3RhdGVt ZW50IChlYyk7CisrCisrCQkJZm9yZWFjaCAoRXhwcmVzc2lvblN0YXRlbWVudCBleHByIGluIHRh cmdldEV4cHJzKQorKwkJCQlleHByLkVtaXQgKGVjKTsKKysKKysJCQl2YXIgY3RvciA9IE1lbWJl ckNhY2hlLkZpbmRNZW1iZXIgKHR5cGUsIE1lbWJlckZpbHRlci5Db25zdHJ1Y3RvciAobnVsbCks IEJpbmRpbmdSZXN0cmljdGlvbi5EZWNsYXJlZE9ubHkgfCBCaW5kaW5nUmVzdHJpY3Rpb24uSW5z dGFuY2VPbmx5KSBhcyBNZXRob2RTcGVjOworKwkJCWVjLkVtaXQgKE9wQ29kZXMuTmV3b2JqLCBj dG9yKTsKKyAJCX0KKyAKKyAJCXB1YmxpYyBvdmVycmlkZSB2b2lkIEVtaXRTdGF0ZW1lbnQgKEVt aXRDb250ZXh0IGVjKQorIAkJeworKwkJCWlmICh2YXJpYWJsZXMgIT0gbnVsbCkgeworKwkJCQlm b3JlYWNoICh2YXIgbHYgaW4gdmFyaWFibGVzKSB7CisrCQkJCQlsdj8uVmFyaWFibGUuQ3JlYXRl QnVpbGRlciAoZWMpOworKwkJCQl9CisrCQkJfQorKwkJCQorIAkJCWlmIChpbnN0YW5jZSAhPSBu dWxsKQorIAkJCQkoKEV4cHJlc3Npb25TdGF0ZW1lbnQpIHNvdXJjZSkuRW1pdFN0YXRlbWVudCAo ZWMpOworIAkJCQorQEAgLTU0OSw5ICs1ODksNiBAQCBuYW1lc3BhY2UgTW9uby5DU2hhcnAKKyAJ CQlpZiAobGVhdmVfY29weSkKKyAJCQkJdGhyb3cgbmV3IE5vdEltcGxlbWVudGVkRXhjZXB0aW9u ICgpOworIAorLQkJCWZvcmVhY2ggKHZhciBsdiBpbiB2YXJpYWJsZXNUb0luZmVyKQorLQkJCQls di5DcmVhdGVCdWlsZGVyIChlYyk7CistCisgCQkJRW1pdFN0YXRlbWVudCAoZWMpOworIAkJfQor IAorQEAgLTU2MywxMSArNjAwLDExIEBAIG5hbWVzcGFjZSBNb25vLkNTaGFycAorIAorIAkJcHVi bGljIHZvaWQgU2V0R2VuZXJhdGVkRmllbGRBc3NpZ25lZCAoRmxvd0FuYWx5c2lzQ29udGV4dCBm YykKKyAJCXsKKy0JCQlpZiAodmFyaWFibGVzVG9JbmZlciA9PSBudWxsKQorKwkJCWlmICh2YXJp YWJsZXMgPT0gbnVsbCkKKyAJCQkJcmV0dXJuOworIAorLQkJCWZvcmVhY2ggKHZhciBsdiBpbiB2 YXJpYWJsZXNUb0luZmVyKQorLQkJCQlmYy5TZXRWYXJpYWJsZUFzc2lnbmVkIChsdi5WYXJpYWJs ZUluZm8pOworKwkJCWZvcmVhY2ggKHZhciBsdiBpbiB2YXJpYWJsZXMpCisrCQkJCWZjLlNldFZh cmlhYmxlQXNzaWduZWQgKGx2LlZhcmlhYmxlLlZhcmlhYmxlSW5mbyk7CisgCQl9CisgCX0KKyB9 CitcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKK2RpZmYgLS1naXQgYS9tY3MvbWNzL3R5cGVt YW5hZ2VyLmNzIGIvbWNzL21jcy90eXBlbWFuYWdlci5jcworaW5kZXggYjZhZmYxNGUxYzAuLjdh MTZjZGEyNzc0IDEwMDY0NAorLS0tIGEvbWNzL21jcy90eXBlbWFuYWdlci5jcworKysrIGIvbWNz L21jcy90eXBlbWFuYWdlci5jcworQEAgLTI0Miw2ICsyNDIsNyBAQCBuYW1lc3BhY2UgTW9uby5D U2hhcnAKKyAKKyAJCS8vIEMjIDcuMAorIAkJcHVibGljIHJlYWRvbmx5IFByZWRlZmluZWRUeXBl W10gVHVwbGVzOworKwkJcHVibGljIHJlYWRvbmx5IFByZWRlZmluZWRUeXBlIFNwYW5HZW5lcmlj OworIAorIAkJcHVibGljIFByZWRlZmluZWRUeXBlcyAoTW9kdWxlQ29udGFpbmVyIG1vZHVsZSkK KyAJCXsKK0BAIC0zMDEsNiArMzAyLDggQEAgbmFtZXNwYWNlIE1vbm8uQ1NoYXJwCisgCQkJRm9y bWF0dGFibGVTdHJpbmcgPSBuZXcgUHJlZGVmaW5lZFR5cGUgKG1vZHVsZSwgTWVtYmVyS2luZC5D bGFzcywgIlN5c3RlbSIsICJGb3JtYXR0YWJsZVN0cmluZyIpOworIAkJCUZvcm1hdHRhYmxlU3Ry aW5nRmFjdG9yeSA9IG5ldyBQcmVkZWZpbmVkVHlwZSAobW9kdWxlLCBNZW1iZXJLaW5kLkNsYXNz LCAiU3lzdGVtLlJ1bnRpbWUuQ29tcGlsZXJTZXJ2aWNlcyIsICJGb3JtYXR0YWJsZVN0cmluZ0Zh Y3RvcnkiKTsKKyAKKysJCQlTcGFuR2VuZXJpYyA9IG5ldyBQcmVkZWZpbmVkVHlwZSAobW9kdWxl LCBNZW1iZXJLaW5kLlN0cnVjdCwgIlN5c3RlbSIsICJTcGFuIiwgMSk7CisrCisgCQkJLy8KKyAJ CQkvLyBEZWZpbmUgdHlwZXMgd2hpY2ggYXJlIHVzZWQgZm9yIGNvbXBhcmlzb24uIEl0IGRvZXMg bm90IG1hdHRlcgorIAkJCS8vIGlmIHRoZXkgZG9uJ3QgZXhpc3QgYXMgbm8gZXJyb3IgcmVwb3J0 IGlzIG5lZWRlZAorQEAgLTM0OCw2ICszNTEsOCBAQCBuYW1lc3BhY2UgTW9uby5DU2hhcnAKKyAJ CQkJaWYgKHB0LkRlZmluZSAoKSkKKyAJCQkJCXB0LlR5cGVTcGVjLklzVHVwbGVUeXBlID0gdHJ1 ZTsKKyAJCQl9CisrCisrCQkJU3BhbkdlbmVyaWMuRGVmaW5lICgpOworIAkJfQorIAl9CisgCitA QCAtNDMwLDYgKzQzNSw3IEBAIG5hbWVzcGFjZSBNb25vLkNTaGFycAorIAkJCUFycmF5RW1wdHkg PSBuZXcgUHJlZGVmaW5lZE1lbWJlcjxNZXRob2RTcGVjPiAobW9kdWxlLCB0eXBlcy5BcnJheSwK KyAJCQkJTWVtYmVyRmlsdGVyLk1ldGhvZCAoIkVtcHR5IiwgMSwgUGFyYW1ldGVyc0NvbXBpbGVk LkVtcHR5UmVhZE9ubHlQYXJhbWV0ZXJzLCBudWxsKSk7CisgCisrCQkJLy8gVE9ETzogTXVzdCBt ZSBzdGF0aWMKKyAJCQlBc3luY1Rhc2tNZXRob2RCdWlsZGVyQ3JlYXRlID0gbmV3IFByZWRlZmlu ZWRNZW1iZXI8TWV0aG9kU3BlYz4gKG1vZHVsZSwgdHlwZXMuQXN5bmNUYXNrTWV0aG9kQnVpbGRl ciwKKyAJCQkJTWVtYmVyRmlsdGVyLk1ldGhvZCAoIkNyZWF0ZSIsIDAsIFBhcmFtZXRlcnNDb21w aWxlZC5FbXB0eVJlYWRPbmx5UGFyYW1ldGVycywgdHlwZXMuQXN5bmNUYXNrTWV0aG9kQnVpbGRl ci5UeXBlU3BlYykpOworIAorQEAgLTQ4NSw2ICs0OTEsNyBAQCBuYW1lc3BhY2UgTW9uby5DU2hh cnAKKyAJCQlBc3luY1Rhc2tNZXRob2RCdWlsZGVyVGFzayA9IG5ldyBQcmVkZWZpbmVkTWVtYmVy PFByb3BlcnR5U3BlYz4gKG1vZHVsZSwgdHlwZXMuQXN5bmNUYXNrTWV0aG9kQnVpbGRlciwKKyAJ CQkJTWVtYmVyRmlsdGVyLlByb3BlcnR5ICgiVGFzayIsIG51bGwpKTsKKyAKKysJCQkvLyBUT0RP OiBNdXN0IG1lIHN0YXRpYworIAkJCUFzeW5jVGFza01ldGhvZEJ1aWxkZXJHZW5lcmljQ3JlYXRl ID0gbmV3IFByZWRlZmluZWRNZW1iZXI8TWV0aG9kU3BlYz4gKG1vZHVsZSwgdHlwZXMuQXN5bmNU YXNrTWV0aG9kQnVpbGRlckdlbmVyaWMsCisgCQkJCU1lbWJlckZpbHRlci5NZXRob2QgKCJDcmVh dGUiLCAwLCBQYXJhbWV0ZXJzQ29tcGlsZWQuRW1wdHlSZWFkT25seVBhcmFtZXRlcnMsIHR5cGVz LkFzeW5jVm9pZE1ldGhvZEJ1aWxkZXIuVHlwZVNwZWMpKTsKKyAKK0BAIC01NDIsNiArNTQ5LDcg QEAgbmFtZXNwYWNlIE1vbm8uQ1NoYXJwCisgCQkJQXN5bmNUYXNrTWV0aG9kQnVpbGRlckdlbmVy aWNUYXNrID0gbmV3IFByZWRlZmluZWRNZW1iZXI8UHJvcGVydHlTcGVjPiAobW9kdWxlLCB0eXBl cy5Bc3luY1Rhc2tNZXRob2RCdWlsZGVyR2VuZXJpYywKKyAJCQkJTWVtYmVyRmlsdGVyLlByb3Bl cnR5ICgiVGFzayIsIG51bGwpKTsKKyAKKysJCQkvLyBUT0RPOiBNdXN0IG1lIHN0YXRpYworIAkJ CUFzeW5jVm9pZE1ldGhvZEJ1aWxkZXJDcmVhdGUgPSBuZXcgUHJlZGVmaW5lZE1lbWJlcjxNZXRo b2RTcGVjPiAobW9kdWxlLCB0eXBlcy5Bc3luY1ZvaWRNZXRob2RCdWlsZGVyLAorIAkJCQlNZW1i ZXJGaWx0ZXIuTWV0aG9kICgiQ3JlYXRlIiwgMCwgUGFyYW1ldGVyc0NvbXBpbGVkLkVtcHR5UmVh ZE9ubHlQYXJhbWV0ZXJzLCB0eXBlcy5Bc3luY1ZvaWRNZXRob2RCdWlsZGVyLlR5cGVTcGVjKSk7 CisgCitAQCAtMTAwNiw5ICsxMDE0LDYgQEAgbmFtZXNwYWNlIE1vbm8uQ1NoYXJwCisgCisgCQlw dWJsaWMgVCBSZXNvbHZlIChMb2NhdGlvbiBsb2MpCisgCQl7CistCQkJaWYgKG1lbWJlciAhPSBu dWxsKQorLQkJCQlyZXR1cm4gbWVtYmVyOworLQorIAkJCWlmIChHZXQgKCkgIT0gbnVsbCkKKyAJ CQkJcmV0dXJuIG1lbWJlcjsKKyAKK2RpZmYgLS1naXQgYS9tY3MvbWNzL3R5cGVzcGVjLmNzIGIv bWNzL21jcy90eXBlc3BlYy5jcworaW5kZXggZDE0ZTFlYWQzZTMuLmE1OGEwZmU1MTc4IDEwMDY0 NAorLS0tIGEvbWNzL21jcy90eXBlc3BlYy5jcworKysrIGIvbWNzL21jcy90eXBlc3BlYy5jcwor QEAgLTIyNSw2ICsyMjUsOCBAQCBuYW1lc3BhY2UgTW9uby5DU2hhcnAKKyAJCQl9CisgCQl9Cisg CisrCQlwdWJsaWMgYm9vbCBJc0J5UmVmTGlrZSA9PiAobW9kaWZpZXJzICYgTW9kaWZpZXJzLlJF RikgIT0gMDsKKysKKyAJCS8vCisgCQkvLyBSZXR1cm5zIHRydWUgZm9yIGluc3RhbmNlcyBvZiBT eXN0ZW0uVGhyZWFkaW5nLlRhc2tzLlRhc2s8VD4KKyAJCS8vCitAQCAtMTQ1Miw2ICsxNDU0LDcg QEAgbmFtZXNwYWNlIE1vbm8uQ1NoYXJwCisgCQlpbnQgVHlwZVBhcmFtZXRlcnNDb3VudCB7IGdl dDsgfQorIAkJVHlwZVBhcmFtZXRlclNwZWNbXSBUeXBlUGFyYW1ldGVycyB7IGdldDsgfQorIAor KwkJVHlwZVNwZWMgR2V0QXN5bmNNZXRob2RCdWlsZGVyICgpOworIAkJVHlwZVNwZWMgR2V0QXR0 cmlidXRlQ29DbGFzcyAoKTsKKyAJCXN0cmluZyBHZXRBdHRyaWJ1dGVEZWZhdWx0TWVtYmVyICgp OworIAkJQXR0cmlidXRlVXNhZ2VBdHRyaWJ1dGUgR2V0QXR0cmlidXRlVXNhZ2UgKFByZWRlZmlu ZWRBdHRyaWJ1dGUgcGEpOworQEAgLTE0NjEsNiArMTQ2NCwyOSBAQCBuYW1lc3BhY2UgTW9uby5D U2hhcnAKKyAKKyAJY2xhc3MgSW50ZXJuYWxUeXBlIDogVHlwZVNwZWMsIElUeXBlRGVmaW5pdGlv bgorIAl7CisrCQlzZWFsZWQgY2xhc3MgSW50ZXJuYWxUeXBlQXNzZW1ibHkgOiBJQXNzZW1ibHlE ZWZpbml0aW9uCisrCQl7CisrCQkJcHVibGljIHN0YXRpYyByZWFkb25seSBJbnRlcm5hbFR5cGVB c3NlbWJseSBJbnN0YW5jZSA9IG5ldyBJbnRlcm5hbFR5cGVBc3NlbWJseSAoKTsKKysKKysJCQlw dWJsaWMgc3RyaW5nIEZ1bGxOYW1lID0+IHRocm93IG5ldyBOb3RJbXBsZW1lbnRlZEV4Y2VwdGlv biAoKTsKKysKKysJCQlwdWJsaWMgYm9vbCBJc0NMU0NvbXBsaWFudCA9PiBmYWxzZTsKKysKKysJ CQlwdWJsaWMgYm9vbCBJc01pc3NpbmcgPT4gZmFsc2U7CisrCisrCQkJcHVibGljIHN0cmluZyBO YW1lID0+IHRocm93IG5ldyBOb3RJbXBsZW1lbnRlZEV4Y2VwdGlvbiAoKTsKKysKKysJCQlwdWJs aWMgYnl0ZSBbXSBHZXRQdWJsaWNLZXlUb2tlbiAoKQorKwkJCXsKKysJCQkJdGhyb3cgbmV3IE5v dEltcGxlbWVudGVkRXhjZXB0aW9uICgpOworKwkJCX0KKysKKysJCQlwdWJsaWMgYm9vbCBJc0Zy aWVuZEFzc2VtYmx5VG8gKElBc3NlbWJseURlZmluaXRpb24gYXNzZW1ibHkpCisrCQkJeworKwkJ CQlyZXR1cm4gZmFsc2U7CisrCQkJfQorKwkJfQorKworIAkJcHVibGljIHN0YXRpYyByZWFkb25s eSBJbnRlcm5hbFR5cGUgQW5vbnltb3VzTWV0aG9kID0gbmV3IEludGVybmFsVHlwZSAoImFub255 bW91cyBtZXRob2QiKTsKKyAJCXB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgSW50ZXJuYWxUeXBlIEFy Z2xpc3QgPSBuZXcgSW50ZXJuYWxUeXBlICgiX19hcmdsaXN0Iik7CisgCQlwdWJsaWMgc3RhdGlj IHJlYWRvbmx5IEludGVybmFsVHlwZSBNZXRob2RHcm91cCA9IG5ldyBJbnRlcm5hbFR5cGUgKCJt ZXRob2QgZ3JvdXAiKTsKK0BAIC0xNDcwLDYgKzE0OTYsOCBAQCBuYW1lc3BhY2UgTW9uby5DU2hh cnAKKyAJCXB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgSW50ZXJuYWxUeXBlIEVycm9yVHlwZSA9IG5l dyBJbnRlcm5hbFR5cGUgKCI8ZXJyb3I+Iik7CisgCQlwdWJsaWMgc3RhdGljIHJlYWRvbmx5IElu dGVybmFsVHlwZSBWYXJPdXRUeXBlID0gbmV3IEludGVybmFsVHlwZSAoInZhciBvdXQiKTsKKyAJ CXB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgSW50ZXJuYWxUeXBlIFRocm93RXhwciA9IG5ldyBJbnRl cm5hbFR5cGUgKCJ0aHJvdyBleHByZXNzaW9uIik7CisrCQlwdWJsaWMgc3RhdGljIHJlYWRvbmx5 IEludGVybmFsVHlwZSBEZWZhdWx0VHlwZSA9IG5ldyBJbnRlcm5hbFR5cGUgKCJkZWZhdWx0Iik7 CisrCQlwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEludGVybmFsVHlwZSBEaXNjYXJkID0gbmV3IElu dGVybmFsVHlwZSAoImRpc2NhcmQiKTsKKyAKKyAJCXJlYWRvbmx5IHN0cmluZyBuYW1lOworIAor QEAgLTE0OTQsNyArMTUyMiw3IEBAIG5hbWVzcGFjZSBNb25vLkNTaGFycAorIAorIAkJSUFzc2Vt Ymx5RGVmaW5pdGlvbiBJVHlwZURlZmluaXRpb24uRGVjbGFyaW5nQXNzZW1ibHkgeworIAkJCWdl dCB7CistCQkJCXRocm93IG5ldyBOb3RJbXBsZW1lbnRlZEV4Y2VwdGlvbiAoKTsKKysJCQkJcmV0 dXJuIEludGVybmFsVHlwZUFzc2VtYmx5Lkluc3RhbmNlOworIAkJCX0KKyAJCX0KKyAKK0BAIC0x NTYxLDYgKzE1ODksMTEgQEAgbmFtZXNwYWNlIE1vbm8uQ1NoYXJwCisgCisgCQkjcmVnaW9uIElU eXBlRGVmaW5pdGlvbiBNZW1iZXJzCisgCisrCQlUeXBlU3BlYyBJVHlwZURlZmluaXRpb24uR2V0 QXN5bmNNZXRob2RCdWlsZGVyICgpCisrCQl7CisrCQkJcmV0dXJuIG51bGw7CisrCQl9CisrCisg CQlUeXBlU3BlYyBJVHlwZURlZmluaXRpb24uR2V0QXR0cmlidXRlQ29DbGFzcyAoKQorIAkJewor IAkJCXJldHVybiBudWxsOworQEAgLTE2MTQsNyArMTY0Nyw3IEBAIG5hbWVzcGFjZSBNb25vLkNT aGFycAorIAorIAkJcHVibGljIHN0YXRpYyBib29sIEhhc05vVHlwZSAoVHlwZVNwZWMgdHlwZSkK KyAJCXsKKy0JCQlyZXR1cm4gdHlwZSA9PSBBbm9ueW1vdXNNZXRob2QgfHwgdHlwZSA9PSBNZXRo b2RHcm91cCB8fCB0eXBlID09IE51bGxMaXRlcmFsIHx8IHR5cGUgPT0gVGhyb3dFeHByOworKwkJ CXJldHVybiB0eXBlID09IEFub255bW91c01ldGhvZCB8fCB0eXBlID09IE1ldGhvZEdyb3VwIHx8 IHR5cGUgPT0gTnVsbExpdGVyYWwgfHwgdHlwZSA9PSBUaHJvd0V4cHIgfHwgdHlwZSA9PSBEZWZh dWx0VHlwZTsKKyAJCX0KKyAJfQorIAorQEAgLTE3NDksNiArMTc4MiwxMSBAQCBuYW1lc3BhY2Ug TW9uby5DU2hhcnAKKyAJCQl9CisgCQl9CisgCisrCQlwdWJsaWMgVHlwZVNwZWMgR2V0QXN5bmNN ZXRob2RCdWlsZGVyICgpCisrCQl7CisrCQkJcmV0dXJuIG51bGw7CisrCQl9CisrCisgCQlwdWJs aWMgVHlwZVNwZWMgR2V0QXR0cmlidXRlQ29DbGFzcyAoKQorIAkJeworIAkJCXJldHVybiBFbGVt ZW50Lk1lbWJlckRlZmluaXRpb24uR2V0QXR0cmlidXRlQ29DbGFzcyAoKTsKK0BAIC0xOTk2LDkg KzIwMzQsMTAgQEAgbmFtZXNwYWNlIE1vbm8uQ1NoYXJwCisgCVtTeXN0ZW0uRGlhZ25vc3RpY3Mu RGVidWdnZXJEaXNwbGF5KCJ7RGlzcGxheURlYnVnSW5mbygpfSIpXQorIAljbGFzcyBSZWZlcmVu Y2VDb250YWluZXIgOiBFbGVtZW50VHlwZVNwZWMKKyAJeworLQkJUmVmZXJlbmNlQ29udGFpbmVy IChUeXBlU3BlYyBlbGVtZW50KQorKwkJcHJvdGVjdGVkIFJlZmVyZW5jZUNvbnRhaW5lciAoVHlw ZVNwZWMgZWxlbWVudCkKKyAJCQk6IGJhc2UgKE1lbWJlcktpbmQuQnlSZWYsIGVsZW1lbnQsIG51 bGwpCisgCQl7CisrCQkJY2FjaGUgPSBudWxsOworIAkJfQorIAorIAkJcHVibGljIG92ZXJyaWRl IElMaXN0PFR5cGVTcGVjPiBJbnRlcmZhY2VzIHsKK0BAIC0yMDM5LDYgKzIwNzgsMzkgQEAgbmFt ZXNwYWNlIE1vbm8uQ1NoYXJwCisgCisgCQkJcmV0dXJuIHBjOworIAkJfQorKworKwkJcHJvdGVj dGVkIG92ZXJyaWRlIHZvaWQgSW5pdGlhbGl6ZU1lbWJlckNhY2hlKGJvb2wgb25seVR5cGVzKQor KwkJeworKwkJCWNhY2hlID0gRWxlbWVudC5NZW1iZXJDYWNoZTsKKysJCX0KKysJfQorKworKwlb U3lzdGVtLkRpYWdub3N0aWNzLkRlYnVnZ2VyRGlzcGxheSAoIntEaXNwbGF5RGVidWdJbmZvKCl9 IildCisrCWNsYXNzIFJlYWRPbmx5UmVmZXJlbmNlQ29udGFpbmVyIDogUmVmZXJlbmNlQ29udGFp bmVyCisrCXsKKysJCXB1YmxpYyBSZWFkT25seVJlZmVyZW5jZUNvbnRhaW5lciAoVHlwZVNwZWMg ZWxlbWVudCkKKysJCQk6IGJhc2UgKGVsZW1lbnQpCisrCQl7CisrCQl9CisrCisrCQlzdHJpbmcg RGlzcGxheURlYnVnSW5mbyAoKQorKwkJeworKwkJCXJldHVybiAicmVmIHJlYWRvbmx5ICIgKyBH ZXRTaWduYXR1cmVGb3JFcnJvciAoKTsKKysJCX0KKysKKysJCXB1YmxpYyBuZXcgc3RhdGljIFJl ZmVyZW5jZUNvbnRhaW5lciBNYWtlVHlwZSAoTW9kdWxlQ29udGFpbmVyIG1vZHVsZSwgVHlwZVNw ZWMgZWxlbWVudCkKKysJCXsKKysJCQlpZiAoZWxlbWVudC5LaW5kID09IE1lbWJlcktpbmQuQnlS ZWYpCisrCQkJCXRocm93IG5ldyBBcmd1bWVudEV4Y2VwdGlvbiAoKTsKKysKKysJCQlSZWFkT25s eVJlZmVyZW5jZUNvbnRhaW5lciBwYzsKKysJCQlpZiAoIW1vZHVsZS5SZWFkb25seVJlZmVyZW5j ZVR5cGVzQ2FjaGUuVHJ5R2V0VmFsdWUgKGVsZW1lbnQsIG91dCBwYykpIHsKKysJCQkJcGMgPSBu ZXcgUmVhZE9ubHlSZWZlcmVuY2VDb250YWluZXIgKGVsZW1lbnQpOworKwkJCQltb2R1bGUuUmVh ZG9ubHlSZWZlcmVuY2VUeXBlc0NhY2hlLkFkZCAoZWxlbWVudCwgcGMpOworKwkJCX0KKysKKysJ CQlyZXR1cm4gcGM7CisrCQl9CisgCX0KKyAKKyAJY2xhc3MgUG9pbnRlckNvbnRhaW5lciA6IEVs ZW1lbnRUeXBlU3BlYworZGlmZiAtLWdpdCBhL21jcy90ZXN0cy9ndGVzdC00MDkuY3MgYi9tY3Mv dGVzdHMvZ3Rlc3QtNDA5LmNzCitpbmRleCA4ZGI1OWQ3ZTQ4ZC4uNjA2YWUzNjg1ZDEgMTAwNjQ0 CistLS0gYS9tY3MvdGVzdHMvZ3Rlc3QtNDA5LmNzCisrKysgYi9tY3MvdGVzdHMvZ3Rlc3QtNDA5 LmNzCitAQCAtMSwzICsxLDQgQEAKKysvLyBDb21waWxlciBvcHRpb25zOiAtbGFuZ3ZlcnNpb246 bGF0ZXN0CisgdXNpbmcgU3lzdGVtOworIAorIC8vCitAQCAtMTc1LDYgKzE3NiwxMSBAQCBwdWJs aWMgY2xhc3MgQ29uZGl0aW9uYWxQYXJzaW5nCisgCQl2YXIgeCA9IGFyZ3MgPy4yZiA6IC0uMmY7 CisgCX0KKyAKKysJdm9pZCBUZXN0XzIzIChzdHJpbmcgYXJncykKKysJeworKwkJdmFyIHggPSBh cmdzID09IG51bGwgPyBkZWZhdWx0IDogMTsKKysJfQorKworIAlzdGF0aWMgdm9pZCBIZWxwZXI8 VD4gKFQgYXJnKQorIAl7CisgCX0KK2RpZmYgLS1naXQgYS9tY3MvdGVzdHMvdGVzdC05NDguY3Mg Yi9tY3MvdGVzdHMvdGVzdC05NDguY3MKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAw MDAwMDAwMC4uMzRiM2FiOWEwYzQKKy0tLSAvZGV2L251bGwKKysrKyBiL21jcy90ZXN0cy90ZXN0 LTk0OC5jcworQEAgLTAsMCArMSwxNiBAQAorKy8vIENvbXBpbGVyIG9wdGlvbnM6IC1sYW5ndmVy c2lvbjo3LjIgLXVuc2FmZQorKworK3VzaW5nIFN5c3RlbTsKKysKKytjbGFzcyBYCisreworKwlw dWJsaWMgc3RhdGljIHZvaWQgTWFpbiAoKQorKwl7CisrCQlTcGFuPGludD4gc3RhY2tTcGFuID0g c3RhY2thbGxvYyBpbnRbMTAwXTsKKysJfQorKworKwl1bnNhZmUgdm9pZCBGb28gKCkKKysJewor KworKwl9CisrfQorXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCitkaWZmIC0tZ2l0IGEvbWNz L3Rlc3RzL3Rlc3QtYXN5bmMtOTQuY3MgYi9tY3MvdGVzdHMvdGVzdC1hc3luYy05NC5jcworbmV3 IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAwMDAwLi5jZTlhMzA0MDliYgorLS0tIC9k ZXYvbnVsbAorKysrIGIvbWNzL3Rlc3RzL3Rlc3QtYXN5bmMtOTQuY3MKK0BAIC0wLDAgKzEsMTI3 IEBACisrdXNpbmcgU3lzdGVtOworK3VzaW5nIFN5c3RlbS5UaHJlYWRpbmcuVGFza3M7CisrdXNp bmcgU3lzdGVtLlJ1bnRpbWUuQ29tcGlsZXJTZXJ2aWNlczsKKysKKytbQXN5bmNNZXRob2RCdWls ZGVyICh0eXBlb2YoTXlUYXNrTWV0aG9kQnVpbGRlcjw+KSldCisrY2xhc3MgTXlUYXNrPFQ+Cisr eworK30KKysKKytbQXN5bmNNZXRob2RCdWlsZGVyICh0eXBlb2YoTXlUYXNrTWV0aG9kQnVpbGRl cikpXQorK2NsYXNzIE15VGFzaworK3sKKyt9CisrCisrY2xhc3MgTXlUYXNrTWV0aG9kQnVpbGRl cgorK3sKKysJcHVibGljIHN0YXRpYyBNeVRhc2tNZXRob2RCdWlsZGVyIENyZWF0ZSgpCisrCXsK KysJCXJldHVybiBudWxsOworKwl9CisrCisrCXB1YmxpYyBNeVRhc2sgVGFzayB7CisrCQlnZXQg eworKwkJCXJldHVybiBudWxsOworKwkJfQorKwl9CisrCisrCXB1YmxpYyB2b2lkIFNldEV4Y2Vw dGlvbiAoRXhjZXB0aW9uIGV4Y2VwdGlvbikKKysJeworKworKwl9CisrCisrCXB1YmxpYyB2b2lk IFNldFJlc3VsdCAoKQorKwl7CisrCisrCX0KKysKKysJcHVibGljIHZvaWQgQXdhaXRPbkNvbXBs ZXRlZDxUQXdhaXRlciwgVFN0YXRlTWFjaGluZT4gKHJlZiBUQXdhaXRlciBhd2FpdGVyLCByZWYg VFN0YXRlTWFjaGluZSBzdGF0ZU1hY2hpbmUpIHdoZXJlIFRBd2FpdGVyIDogSU5vdGlmeUNvbXBs ZXRpb24gd2hlcmUgVFN0YXRlTWFjaGluZSA6IElBc3luY1N0YXRlTWFjaGluZQorKwl7CisrCisr CX0KKysKKysJcHVibGljIHZvaWQgQXdhaXRVbnNhZmVPbkNvbXBsZXRlZDxUQXdhaXRlciwgVFN0 YXRlTWFjaGluZT4gKHJlZiBUQXdhaXRlciBhd2FpdGVyLCByZWYgVFN0YXRlTWFjaGluZSBzdGF0 ZU1hY2hpbmUpIHdoZXJlIFRBd2FpdGVyIDogSUNyaXRpY2FsTm90aWZ5Q29tcGxldGlvbiB3aGVy ZSBUU3RhdGVNYWNoaW5lIDogSUFzeW5jU3RhdGVNYWNoaW5lCisrCXsKKysKKysJfQorKworKwlw dWJsaWMgdm9pZCBTdGFydDxUU3RhdGVNYWNoaW5lPiAocmVmIFRTdGF0ZU1hY2hpbmUgc3RhdGVN YWNoaW5lKSB3aGVyZSBUU3RhdGVNYWNoaW5lIDogSUFzeW5jU3RhdGVNYWNoaW5lCisrCXsKKysK KysJfQorKworKwlwdWJsaWMgdm9pZCBTZXRTdGF0ZU1hY2hpbmUgKElBc3luY1N0YXRlTWFjaGlu ZSBzdGF0ZU1hY2hpbmUpCisrCXsKKysKKysJfQkKKyt9CisrCisrY2xhc3MgTXlUYXNrTWV0aG9k QnVpbGRlcjxUPgorK3sKKysJcHVibGljIHN0YXRpYyBNeVRhc2tNZXRob2RCdWlsZGVyPFQ+IENy ZWF0ZSgpCisrCXsKKysJCXJldHVybiBudWxsOworKwl9CisrCisrCXB1YmxpYyBNeVRhc2s8VD4g VGFzayB7CisrCQlnZXQgeworKwkJCXJldHVybiBudWxsOworKwkJfQorKwl9CisrCisrCXB1Ymxp YyB2b2lkIFNldEV4Y2VwdGlvbiAoRXhjZXB0aW9uIGV4Y2VwdGlvbikKKysJeworKworKwl9Cisr CisrCXB1YmxpYyB2b2lkIFNldFJlc3VsdCAoVCByZXN1bHQpCisrCXsKKysKKysJfQorKworKwlw dWJsaWMgdm9pZCBBd2FpdE9uQ29tcGxldGVkPFRBd2FpdGVyLCBUU3RhdGVNYWNoaW5lPiAocmVm IFRBd2FpdGVyIGF3YWl0ZXIsIHJlZiBUU3RhdGVNYWNoaW5lIHN0YXRlTWFjaGluZSkgd2hlcmUg VEF3YWl0ZXIgOiBJTm90aWZ5Q29tcGxldGlvbiB3aGVyZSBUU3RhdGVNYWNoaW5lIDogSUFzeW5j U3RhdGVNYWNoaW5lCisrCXsKKysKKysJfQorKworKwlwdWJsaWMgdm9pZCBBd2FpdFVuc2FmZU9u Q29tcGxldGVkPFRBd2FpdGVyLCBUU3RhdGVNYWNoaW5lPiAocmVmIFRBd2FpdGVyIGF3YWl0ZXIs IHJlZiBUU3RhdGVNYWNoaW5lIHN0YXRlTWFjaGluZSkgd2hlcmUgVEF3YWl0ZXIgOiBJQ3JpdGlj YWxOb3RpZnlDb21wbGV0aW9uIHdoZXJlIFRTdGF0ZU1hY2hpbmUgOiBJQXN5bmNTdGF0ZU1hY2hp bmUKKysJeworKworKwl9CisrCisrCXB1YmxpYyB2b2lkIFN0YXJ0PFRTdGF0ZU1hY2hpbmU+IChy ZWYgVFN0YXRlTWFjaGluZSBzdGF0ZU1hY2hpbmUpIHdoZXJlIFRTdGF0ZU1hY2hpbmUgOiBJQXN5 bmNTdGF0ZU1hY2hpbmUKKysJeworKworKwl9CisrCisrCXB1YmxpYyB2b2lkIFNldFN0YXRlTWFj aGluZSAoSUFzeW5jU3RhdGVNYWNoaW5lIHN0YXRlTWFjaGluZSkKKysJeworKworKwl9CisrfQor KworK2NsYXNzIFgKKyt7CisrCXB1YmxpYyBhc3luYyBNeVRhc2sgVGVzdCAoKQorKwl7CisrCQlh d2FpdCBUYXNrLkRlbGF5ICgxKTsKKysJfQorKworKwlwdWJsaWMgYXN5bmMgTXlUYXNrPGludD4g VGVzdDIgKCkKKysJeworKwkJYXdhaXQgVGFzay5EZWxheSAoMSk7CisrCQlyZXR1cm4gMjsKKysJ fQorKworKwlwdWJsaWMgYXN5bmMgVmFsdWVUYXNrPHN0cmluZz4gVGVzdDMgKCkKKysJeworKwkJ YXdhaXQgVGFzay5EZWxheSAoMSk7CisrCQlyZXR1cm4gImFzIjsKKysJfQkKKysKKysJcHVibGlj IHN0YXRpYyB2b2lkIE1haW4gKCkKKysJeworKwkJdmFyIHggPSBuZXcgWCAoKTsKKysJCXZhciBy MSA9IHguVGVzdDMgKCkuUmVzdWx0OworKwl9CisrfQorXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBm aWxlCitkaWZmIC0tZ2l0IGEvbWNzL3Rlc3RzL3Rlc3QtZGVmYXVsdC0wMS5jcyBiL21jcy90ZXN0 cy90ZXN0LWRlZmF1bHQtMDEuY3MKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAw MDAwMC4uODIzZTMzYzQ1MWIKKy0tLSAvZGV2L251bGwKKysrKyBiL21jcy90ZXN0cy90ZXN0LWRl ZmF1bHQtMDEuY3MKK0BAIC0wLDAgKzEsNTIgQEAKKysvLyBDb21waWxlciBvcHRpb25zOiAtbGFu Z3ZlcnNpb246bGF0ZXN0CisrCisrc3RhdGljIGNsYXNzIFgKKyt7CisrCWNvbnN0IGludCBjMSA9 IGRlZmF1bHQ7CisrCWNvbnN0IGludCBjMiA9IGRlZmF1bHQgKGludCk7CisrCisrCXB1YmxpYyBz dGF0aWMgdm9pZCBNYWluICgpCisrCXsKKysJCWludCBhID0gZGVmYXVsdDsKKysJCXZhciBiID0g KGludCkgZGVmYXVsdDsKKysJCWNvbnN0IGludCBjID0gZGVmYXVsdDsKKysJCXZhciBkID0gbmV3 W10geyAxLCBkZWZhdWx0IH07CisrCQlkeW5hbWljIGUgPSBkZWZhdWx0OworKwkJaW50IGYgPSBj aGVja2VkIChkZWZhdWx0KTsKKysJCShpbnQgYSwgaW50IGIpIGcgPSAoMSwgZGVmYXVsdCk7Cisr CQl2YXIgaCA9IDEgIT0gZGVmYXVsdDsKKysJCXZhciBpID0gZGVmYXVsdCA9PSBNNCAoKTsKKysJ fQorKworKwlzdGF0aWMgaW50IE0xICgpCisrCXsKKysJCXJldHVybiBkZWZhdWx0OworKwl9Cisr CisrCXN0YXRpYyB2b2lkIE0yICgpCisrCXsKKysJCXRyeSB7CisrCQkJdGhyb3cgbmV3IFN5c3Rl bS5FeGNlcHRpb24gKCk7CisrCQl9IGNhdGNoIChTeXN0ZW0uRXhjZXB0aW9uKSB3aGVuIChkZWZh dWx0KSB7CisrCQl9CisrCisrCQlpZiAoZGVmYXVsdCkgewkJCQorKwkJfQorKwl9CisrCisrCXN0 YXRpYyB2b2lkIE0zIChpbnQgeCA9IGRlZmF1bHQpCisrCXsKKysJfQorKworKwlzdGF0aWMgU3lz dGVtLkZ1bmM8aW50PiBNNCAoKQorKwl7CisrCQlyZXR1cm4gKCkgPT4gZGVmYXVsdDsKKysJfSAK Kyt9CisrLyoKKytlbnVtIEUKKyt7CisrCUEgPSBkZWZhdWx0LAorKwlCID0gZGVmYXVsdCArIDEK Kyt9CisrKi8KK1wgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorZGlmZiAtLWdpdCBhL21jcy90 ZXN0cy90ZXN0LWRlZmF1bHQtMDIuY3MgYi9tY3MvdGVzdHMvdGVzdC1kZWZhdWx0LTAyLmNzCitu ZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMDAwMDAuLjAwMzk3ODJlNWYyCistLS0g L2Rldi9udWxsCisrKysgYi9tY3MvdGVzdHMvdGVzdC1kZWZhdWx0LTAyLmNzCitAQCAtMCwwICsx LDMzIEBACisrLy8gQ29tcGlsZXIgb3B0aW9uczogLWxhbmd2ZXJzaW9uOmxhdGVzdAorKworK2Ns YXNzIEMKKyt7CisrCXN0YXRpYyB2b2lkIE1haW4oKQorKwl7CisrCQlNIChkZWZhdWx0LCAxKTsK KysKKysJCU0yIChkZWZhdWx0KTsKKysJCU0yIChudWxsKTsKKysKKysJCXZhciByZXMgPSBUZXN0 IChkZWZhdWx0KTsKKysJfQorKworKworKwlzdGF0aWMgdm9pZCBNPFQ+IChUIHgsIFQgeSkKKysJ eworKwl9CisrCisrCXN0YXRpYyB2b2lkIE0yIChwYXJhbXMgb2JqZWN0W10geCkKKysJeyAgICAg ICAgCisrCX0KKysKKysJc3RhdGljIGJ5dGVbXSBUZXN0IChTPGJ5dGU+IHgpCisrCXsKKysJCXJl dHVybiBudWxsOworKwl9CisrfQorKworK3N0cnVjdCBTPFQ+CisreworKworK30KK1wgTm8gbmV3 bGluZSBhdCBlbmQgb2YgZmlsZQorZGlmZiAtLWdpdCBhL21jcy90ZXN0cy90ZXN0LWRpc2NhcmRz LTAxLmNzIGIvbWNzL3Rlc3RzL3Rlc3QtZGlzY2FyZHMtMDEuY3MKK25ldyBmaWxlIG1vZGUgMTAw NjQ0CitpbmRleCAwMDAwMDAwMDAwMC4uNTRjZjI5Nzc5YzYKKy0tLSAvZGV2L251bGwKKysrKyBi L21jcy90ZXN0cy90ZXN0LWRpc2NhcmRzLTAxLmNzCitAQCAtMCwwICsxLDM2IEBACisrdXNpbmcg U3lzdGVtOworKworK2NsYXNzIFgKKyt7CisrCXB1YmxpYyBzdGF0aWMgdm9pZCBNYWluICgpCisr CXsKKysJCXN0cmluZyBzID0gbnVsbDsKKysKKysJCV8gPSAxOworKwkJeworKwkJCWNoYXIgXyA9 ICc0JzsKKysJCX0KKysKKysJCV8gPSBUZXN0VmFsdWUgKCk7CisrCisrCQlfID0gXyA9IHM7Cisr CisrCQlieXRlIGsxOworKwkJdmFyIHMxID0gKGsxLCBfKSA9ICgxLCBzKTsKKysKKysJCUZ1bmM8 b2JqZWN0PiBsMSA9ICgpID0+IF8gPSAoXywgXykgPSAoMSwgcyk7CisrCisrCQlUcnlHZXRWYWx1 ZSAob3V0IF8pOworKwl9CisrCisrCXN0YXRpYyBib29sIFRyeUdldFZhbHVlIChvdXQgaW50IGFy ZykKKysJeworKwkJYXJnID0gMzsKKysJCXJldHVybiB0cnVlOworKwl9CisrCisrCXN0YXRpYyBp bnQgVGVzdFZhbHVlICgpCisrCXsKKysJCXJldHVybiA0OworKwl9CisrfQorXCBObyBuZXdsaW5l IGF0IGVuZCBvZiBmaWxlCitkaWZmIC0tZ2l0IGEvbWNzL3Rlc3RzL3Rlc3QtbmFtZWQtMTEuY3Mg Yi9tY3MvdGVzdHMvdGVzdC1uYW1lZC0xMS5jcworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4 IDAwMDAwMDAwMDAwLi5hMDFkMjg4M2I5YworLS0tIC9kZXYvbnVsbAorKysrIGIvbWNzL3Rlc3Rz L3Rlc3QtbmFtZWQtMTEuY3MKK0BAIC0wLDAgKzEsMTMgQEAKKysvLyBDb21waWxlciBvcHRpb25z OiAtbGFuZ3ZlcnNpb246Ny4yCisrCisrY2xhc3MgWAorK3sKKysJcHVibGljIHN0YXRpYyB2b2lk IE1haW4gKCkKKysJeworKwkJVGVzdCAoYXJnOiAxLCAiIik7CisrCX0KKysKKysJc3RhdGljIHZv aWQgVGVzdCAoaW50IGFyZywgc3RyaW5nIHN0cikKKysJeworKwl9CisrfQorXCBObyBuZXdsaW5l IGF0IGVuZCBvZiBmaWxlCitkaWZmIC0tZ2l0IGEvbWNzL3Rlc3RzL3Rlc3QtcmVhZG9ubHktMDIu Y3MgYi9tY3MvdGVzdHMvdGVzdC1yZWFkb25seS0wMi5jcworbmV3IGZpbGUgbW9kZSAxMDA2NDQK K2luZGV4IDAwMDAwMDAwMDAwLi4yMzFiOGNkOGZkYQorLS0tIC9kZXYvbnVsbAorKysrIGIvbWNz L3Rlc3RzL3Rlc3QtcmVhZG9ubHktMDIuY3MKK0BAIC0wLDAgKzEsMjcgQEAKKysvLyBDb21waWxl ciBvcHRpb25zOiAtbGFuZ3ZlcnNpb246bGF0ZXN0CisrdXNpbmcgU3lzdGVtOworKworK3B1Ymxp YyBkZWxlZ2F0ZSByZWYgcmVhZG9ubHkgaW50IEQgKGludCB4KTsKKysKKytjbGFzcyBYCisrewor KwlwdWJsaWMgc3RhdGljIHZvaWQgTWFpbiAoKQorKwl7CisrCisrCX0KKysKKysJR3VpZCBnOwor KworKwlyZWYgcmVhZG9ubHkgR3VpZCBUZXN0TWV0aG9kICgpCisrCXsKKysJCXJldHVybiByZWYg ZzsKKysJfQorKworKwlyZWYgcmVhZG9ubHkgR3VpZCBUZXN0UHJvcCB7CisrCQlnZXQgeworKwkJ CXJlZiByZWFkb25seSB2YXIgcmcgPSByZWYgZzsKKysJCQlyZXR1cm4gcmVmIHJnOworKwkJfQor Kwl9CQorKworK30KK1wgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorZGlmZiAtLWdpdCBhL21j cy90ZXN0cy90ZXN0LXJlYWRvbmx5LTAzLmNzIGIvbWNzL3Rlc3RzL3Rlc3QtcmVhZG9ubHktMDMu Y3MKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwMDAwMC4uMTRjYjk1OGI0MWEK Ky0tLSAvZGV2L251bGwKKysrKyBiL21jcy90ZXN0cy90ZXN0LXJlYWRvbmx5LTAzLmNzCitAQCAt MCwwICsxLDE2IEBACisrLy8gQ29tcGlsZXIgb3B0aW9uczogLWxhbmd2ZXJzaW9uOmxhdGVzdAor K3VzaW5nIFN5c3RlbTsKKysKKytyZWFkb25seSBzdHJ1Y3QgUworK3sKKysJc3RhdGljIFMgc2hh cmVkID0gbmV3IFMgKCk7CisrCisrCXB1YmxpYyBTIChpbnQgYXJnKQorKwl7CisrCQl0aGlzID0g c2hhcmVkOworKwl9CisrCisrCXB1YmxpYyBzdGF0aWMgdm9pZCBNYWluICgpCisrCXsKKysJfQor K30KK1wgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorZGlmZiAtLWdpdCBhL21jcy90ZXN0cy90 ZXN0LXJlZi0wNy5jcyBiL21jcy90ZXN0cy90ZXN0LXJlZi0wNy5jcworbmV3IGZpbGUgbW9kZSAx MDA2NDQKK2luZGV4IDAwMDAwMDAwMDAwLi40YWExNjU3OTc1MgorLS0tIC9kZXYvbnVsbAorKysr IGIvbWNzL3Rlc3RzL3Rlc3QtcmVmLTA3LmNzCitAQCAtMCwwICsxLDMwIEBACisrLy8gQ29tcGls ZXIgb3B0aW9uczogLWxhbmd2ZXJzaW9uOmxhdGVzdAorKworK3B1YmxpYyByZWFkb25seSBwYXJ0 aWFsIHJlZiBzdHJ1Y3QgVGVzdAorK3sKKysJcHVibGljIHN0YXRpYyB2b2lkIE1haW4gKCkKKysJ eworKwkJdmFyIG0gPSBuZXcgVGVzdCAoKTsKKysJCW0uTWV0aG9kICgpOworKwl9CisrCisrCVRl c3QgTWV0aG9kICgpCisrCXsKKysJCXJldHVybiBuZXcgVGVzdCAoKTsKKysJfQorK30KKysKKyty ZWYgc3RydWN0IFNlY29uZAorK3sKKysJVGVzdCBmaWVsZDsKKyt9CisrCisrcHVibGljIGFic3Ry YWN0IGNsYXNzIFAKKyt7CisrCXB1YmxpYyBhYnN0cmFjdCBUZXN0IFNwYW4geyBnZXQ7IH0KKyt9 CisrCisrcHVibGljIGludGVyZmFjZSBJSQorK3sKKysJVGVzdCBTcGFuIHsgZ2V0OyB9CisrfQor ZGlmZiAtLWdpdCBhL21jcy90ZXN0cy90ZXN0LXJlZi0wOC5jcyBiL21jcy90ZXN0cy90ZXN0LXJl Zi0wOC5jcworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAwMDAwLi5mNGZmNTBm NGM1YworLS0tIC9kZXYvbnVsbAorKysrIGIvbWNzL3Rlc3RzL3Rlc3QtcmVmLTA4LmNzCitAQCAt MCwwICsxLDEwMSBAQAorK3VzaW5nIFN5c3RlbTsKKysKKytuYW1lc3BhY2UgQ2xhc3NMaWJyYXJ5 MQorK3sKKysJcHVibGljIGNsYXNzIEMKKysJeworKworKwkJY2xhc3MgQgorKwkJeworKwkJCWlu dCB2OworKwkJCXB1YmxpYyByZWYgaW50IHRoaXNbaW50IGluZGV4XQorKwkJCXsKKysJCQkJZ2V0 CisrCQkJCXsKKysJCQkJCXJldHVybiByZWYgdjsKKysJCQkJfQorKwkJCX0KKysJCX0KKysKKysK KysJCWNsYXNzIEdlbjxUPiB3aGVyZSBUIDogc3RydWN0CisrCQl7CisrCQkJVCB2OworKwkJCXB1 YmxpYyByZWYgVCB0aGlzW2ludCBpbmRleF0KKysJCQl7CisrCQkJCWdldAorKwkJCQl7CisrCQkJ CQlyZXR1cm4gcmVmIHY7CisrCQkJCX0KKysJCQl9CisrCQl9CisrCisrCQlzdHJ1Y3QgVmFsCisr CQl7CisrCQl9CisrCisrCQljbGFzcyBCQgorKwkJeworKwkJCVZhbCB2OworKwkJCXB1YmxpYyBy ZWYgVmFsIHRoaXNbaW50IGluZGV4XQorKwkJCXsKKysJCQkJZ2V0CisrCQkJCXsKKysJCQkJCXJl dHVybiByZWYgdjsKKysJCQkJfQorKwkJCX0KKysJCX0KKysKKysJCXZvaWQgTU0gKCkKKysJCXsK KysJCQl2YXIgYmJiID0gbmV3IEJCKCk7CisrCQkJVmFsIHYxID0gYmJiWzBdOworKwkJCWJiYlsx XSA9IHYxOworKworKwkJCXJlZiBWYWwgdjIgPSByZWYgYmJiWzJdOworKwkJCWJiYlsyXSA9IHYy OworKwkJfQorKworKwkJc3RhdGljIGludFtdIGEgPSBuZXcgaW50WzFdOworKwkJcHVibGljIHN0 YXRpYyB2b2lkIE1haW4oKQorKwkJeworKwkJCXZhciBiYiA9IG5ldyBCKCk7CisrCQkJaW50IGIg PSAxOworKwkJCWJiWzBdID0gYjsKKysJCQlhWzBdID0gQWRkMihyZWYgYiwgMik7CisrCisrCQkJ dmFyIGJiYiA9IG5ldyBCQigpOworKwkJCWJiYlswXSA9IG5ldyBWYWwoKTsKKysKKysJCQl2YXIg diA9IG5ldyBWYWwoKTsKKysJCQliYmJbMV0gPSB2OworKworKwkJCXZhciB2MiA9IGJiYlsyXTsK KysKKysJCQliYmJbM10gPSB2MjsKKysKKysKKysJCQliYmJbM10gPSBiYmJbMl07CisrCisrCisr CisrCQkJdmFyIGdnZyA9IG5ldyBHZW48VmFsPigpOworKwkJCWdnZ1swXSA9IG5ldyBWYWwoKTsK KysKKysJCQl2YXIgZyA9IG5ldyBWYWwoKTsKKysJCQlnZ2dbMV0gPSB2OworKworKwkJCXZhciBn MiA9IGdnZ1syXTsKKysKKysJCQlnZ2dbM10gPSB2MjsKKysKKysKKysJCQlnZ2dbM10gPSBnZ2db Ml07CisrCQl9CisrCisrCQlwdWJsaWMgc3RhdGljIHJlZiBpbnQgQWRkMihyZWYgaW50IGEsIGlu dCBiKQorKwkJeworKwkJCXJldHVybiByZWYgYTsKKysJCX0KKysJfQorK30KK1wgTm8gbmV3bGlu ZSBhdCBlbmQgb2YgZmlsZQorZGlmZiAtLWdpdCBhL21jcy90ZXN0cy90ZXN0LXJlZi0wOS5jcyBi L21jcy90ZXN0cy90ZXN0LXJlZi0wOS5jcworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAw MDAwMDAwMDAwLi41ZDBlODllNWMxYQorLS0tIC9kZXYvbnVsbAorKysrIGIvbWNzL3Rlc3RzL3Rl c3QtcmVmLTA5LmNzCitAQCAtMCwwICsxLDEyIEBACisrc3RydWN0IHJpZ2lkYm9keSB7IHB1Ymxp YyBmbG9hdCB4OyB9CisrCisrY2xhc3MgUHJvZ3JhbQorK3sKKysJc3RhdGljIHJpZ2lkYm9keSBh OworKwlzdGF0aWMgcmVmIHJpZ2lkYm9keSBwcm9wZXJ0eV9yZXR1cm5pbmdfc3RydWN0X2J5X3Jl ZiA9PiByZWYgYTsKKysKKysJc3RhdGljIHZvaWQgTWFpbigpCisrCXsKKysJCVN5c3RlbS5Db25z b2xlLldyaXRlTGluZSAocHJvcGVydHlfcmV0dXJuaW5nX3N0cnVjdF9ieV9yZWYueCk7CisrCX0K Kyt9CitcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKK2RpZmYgLS1naXQgYS9tY3MvdGVzdHMv dGVzdC1yZWYtMTAuY3MgYi9tY3MvdGVzdHMvdGVzdC1yZWYtMTAuY3MKK25ldyBmaWxlIG1vZGUg MTAwNjQ0CitpbmRleCAwMDAwMDAwMDAwMC4uODhlMjAxZDMxNzQKKy0tLSAvZGV2L251bGwKKysr KyBiL21jcy90ZXN0cy90ZXN0LXJlZi0xMC5jcworQEAgLTAsMCArMSwyNCBAQAorKy8vIENvbXBp bGVyIG9wdGlvbnM6IC1sYW5ndmVyc2lvbjpsYXRlc3QKKysKKyt1c2luZyBTeXN0ZW07CisrCisr cmVmIHN0cnVjdCBWYWx1ZVN0cmluZ0J1aWxkZXIKKyt7CisrCXB1YmxpYyBvdmVycmlkZSBzdHJp bmcgVG9TdHJpbmcgKCkKKysJeworKwkJcmV0dXJuICJhYWEiOworKwl9CisrfQorKworKworK2Ns YXNzIFgKKyt7CisrCXB1YmxpYyBzdGF0aWMgaW50IE1haW4gKCkKKysJeworKwkJdmFyIHMgPSBu ZXcgVmFsdWVTdHJpbmdCdWlsZGVyICgpOworKwkJaWYgKHMuVG9TdHJpbmcgKCkgIT0gImFhYSIp CisrCQkJcmV0dXJuIDE7CisrCisrCQlyZXR1cm4gMDsKKysJfQorK30KK1wgTm8gbmV3bGluZSBh dCBlbmQgb2YgZmlsZQorZGlmZiAtLWdpdCBhL21jcy90ZXN0cy90ZXN0LXR1cGxlLTA3LmNzIGIv bWNzL3Rlc3RzL3Rlc3QtdHVwbGUtMDcuY3MKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAw MDAwMDAwMDAwMC4uY2M3Y2U1ODM3Y2UKKy0tLSAvZGV2L251bGwKKysrKyBiL21jcy90ZXN0cy90 ZXN0LXR1cGxlLTA3LmNzCitAQCAtMCwwICsxLDE2IEBACisrdXNpbmcgU3lzdGVtOworK3VzaW5n IFN5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljOworKworKy8vIFBhcnNlciB0ZXN0cworKworK2Ns YXNzIFBhcnNlclRlc3QKKyt7CisrCUlFbnVtZXJhYmxlPChPYmplY3QgdmVydGV4LCBpbnQgZGlz dGFuY2UpPiBUZXN0ICgpCisrCXsKKysJCXJldHVybiBudWxsOworKwl9CisrCisrCXB1YmxpYyBz dGF0aWMgdm9pZCBNYWluICgpCisrCXsJCQorKwl9CisrfQorXCBObyBuZXdsaW5lIGF0IGVuZCBv ZiBmaWxlCitkaWZmIC0tZ2l0IGEvbWNzL3Rlc3RzL3Rlc3QtdHVwbGUtMDkuY3MgYi9tY3MvdGVz dHMvdGVzdC10dXBsZS0wOS5jcworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAw MDAwLi4zZjE1Y2FlNmNmMQorLS0tIC9kZXYvbnVsbAorKysrIGIvbWNzL3Rlc3RzL3Rlc3QtdHVw bGUtMDkuY3MKK0BAIC0wLDAgKzEsMTkgQEAKKyt1c2luZyBTeXN0ZW07CisrCisrY2xhc3MgVHVw bGVEZWNvbnN0cnVjdGlvbkRlY2xhcmF0aW9uCisreworKwlwdWJsaWMgc3RhdGljIGludCBNYWlu ICgpCisrCXsKKysJCShzdHJpbmcgcywgbG9uZyBsKSA9IEdldFZhbHVlcyAoKTsKKysJCSh2YXIg dnMsIHZhciB2bCkgPSBHZXRWYWx1ZXMgKCk7CisrCQkob2JqZWN0IG8sIHZhciB2bDIpID0gR2V0 VmFsdWVzICgpOworKwkJKHN0cmluZyBkcywgXykgPSBHZXRWYWx1ZXMgKCk7CisrCisrCQlyZXR1 cm4gMDsKKysJfQorKworKwlzdGF0aWMgKHN0cmluZywgbG9uZykgR2V0VmFsdWVzICgpCisrCXsK KysJCXJldHVybiAoImEiLCAzKTsKKysJfQorK30KK1wgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmls ZQorZGlmZiAtLWdpdCBhL21jcy90ZXN0cy92ZXItaWwtbmV0XzRfeC54bWwgYi9tY3MvdGVzdHMv dmVyLWlsLW5ldF80X3gueG1sCitpbmRleCBjMmM5ODEyMzMwNS4uNGRiYzcwNDJhOGEgMTAwNjQ0 CistLS0gYS9tY3MvdGVzdHMvdmVyLWlsLW5ldF80X3gueG1sCisrKysgYi9tY3MvdGVzdHMvdmVy LWlsLW5ldF80X3gueG1sCitAQCAtMTQ2NTksNiArMTQ2NTksOSBAQAorICAgICAgIDxtZXRob2Qg bmFtZT0iVm9pZCBUZXN0XzIyKEJvb2xlYW4pIiBhdHRycz0iMTI5Ij4KKyAgICAgICAgIDxzaXpl PjI0PC9zaXplPgorICAgICAgIDwvbWV0aG9kPgorKyAgICAgIDxtZXRob2QgbmFtZT0iVm9pZCBU ZXN0XzIzKFN5c3RlbS5TdHJpbmcpIiBhdHRycz0iMTI5Ij4KKysgICAgICAgIDxzaXplPjE2PC9z aXplPgorKyAgICAgIDwvbWV0aG9kPgorICAgICA8L3R5cGU+CisgICA8L3Rlc3Q+CisgICA8dGVz dCBuYW1lPSJndGVzdC00MTAuY3MiPgorQEAgLTUyODA4LDYgKzUyODExLDE5IEBACisgICAgICAg PC9tZXRob2Q+CisgICAgIDwvdHlwZT4KKyAgIDwvdGVzdD4KKysgIDx0ZXN0IG5hbWU9InRlc3Qt OTQ4LmNzIj4KKysgICAgPHR5cGUgbmFtZT0iWCI+CisrICAgICAgPG1ldGhvZCBuYW1lPSJWb2lk IE1haW4oKSIgYXR0cnM9IjE1MCI+CisrICAgICAgICA8c2l6ZT4xNjwvc2l6ZT4KKysgICAgICA8 L21ldGhvZD4KKysgICAgICA8bWV0aG9kIG5hbWU9IlZvaWQgRm9vKCkiIGF0dHJzPSIxMjkiPgor KyAgICAgICAgPHNpemU+Mjwvc2l6ZT4KKysgICAgICA8L21ldGhvZD4KKysgICAgICA8bWV0aG9k IG5hbWU9IlZvaWQgLmN0b3IoKSIgYXR0cnM9IjYyNzgiPgorKyAgICAgICAgPHNpemU+Nzwvc2l6 ZT4KKysgICAgICA8L21ldGhvZD4KKysgICAgPC90eXBlPgorKyAgPC90ZXN0PgorICAgPHRlc3Qg bmFtZT0idGVzdC05NS5jcyI+CisgICAgIDx0eXBlIG5hbWU9IlgiPgorICAgICAgIDxtZXRob2Qg bmFtZT0iSW50MzIgTWFpbigpIiBhdHRycz0iMTUwIj4KK0BAIC02Njg5Myw2ICs2NjkwOSwxMTcg QEAKKyAgICAgICA8L21ldGhvZD4KKyAgICAgPC90eXBlPgorICAgPC90ZXN0PgorKyAgPHRlc3Qg bmFtZT0idGVzdC1hc3luYy05NC5jcyI+CisrICAgIDx0eXBlIG5hbWU9Ik15VGFza2AxW1RdIj4K KysgICAgICA8bWV0aG9kIG5hbWU9IlZvaWQgLmN0b3IoKSIgYXR0cnM9IjYyNzgiPgorKyAgICAg ICAgPHNpemU+Nzwvc2l6ZT4KKysgICAgICA8L21ldGhvZD4KKysgICAgPC90eXBlPgorKyAgICA8 dHlwZSBuYW1lPSJNeVRhc2siPgorKyAgICAgIDxtZXRob2QgbmFtZT0iVm9pZCAuY3RvcigpIiBh dHRycz0iNjI3OCI+CisrICAgICAgICA8c2l6ZT43PC9zaXplPgorKyAgICAgIDwvbWV0aG9kPgor KyAgICA8L3R5cGU+CisrICAgIDx0eXBlIG5hbWU9Ik15VGFza01ldGhvZEJ1aWxkZXIiPgorKyAg ICAgIDxtZXRob2QgbmFtZT0iTXlUYXNrTWV0aG9kQnVpbGRlciBDcmVhdGUoKSIgYXR0cnM9IjE1 MCI+CisrICAgICAgICA8c2l6ZT4xMDwvc2l6ZT4KKysgICAgICA8L21ldGhvZD4KKysgICAgICA8 bWV0aG9kIG5hbWU9Ik15VGFzayBnZXRfVGFzaygpIiBhdHRycz0iMjE4MiI+CisrICAgICAgICA8 c2l6ZT4xMDwvc2l6ZT4KKysgICAgICA8L21ldGhvZD4KKysgICAgICA8bWV0aG9kIG5hbWU9IlZv aWQgU2V0RXhjZXB0aW9uKFN5c3RlbS5FeGNlcHRpb24pIiBhdHRycz0iMTM0Ij4KKysgICAgICAg IDxzaXplPjI8L3NpemU+CisrICAgICAgPC9tZXRob2Q+CisrICAgICAgPG1ldGhvZCBuYW1lPSJW b2lkIFNldFJlc3VsdCgpIiBhdHRycz0iMTM0Ij4KKysgICAgICAgIDxzaXplPjI8L3NpemU+Cisr ICAgICAgPC9tZXRob2Q+CisrICAgICAgPG1ldGhvZCBuYW1lPSJWb2lkIEF3YWl0T25Db21wbGV0 ZWRbVEF3YWl0ZXIsVFN0YXRlTWFjaGluZV0oVEF3YWl0ZXIgQnlSZWYsIFRTdGF0ZU1hY2hpbmUg QnlSZWYpIiBhdHRycz0iMTM0Ij4KKysgICAgICAgIDxzaXplPjI8L3NpemU+CisrICAgICAgPC9t ZXRob2Q+CisrICAgICAgPG1ldGhvZCBuYW1lPSJWb2lkIEF3YWl0VW5zYWZlT25Db21wbGV0ZWRb VEF3YWl0ZXIsVFN0YXRlTWFjaGluZV0oVEF3YWl0ZXIgQnlSZWYsIFRTdGF0ZU1hY2hpbmUgQnlS ZWYpIiBhdHRycz0iMTM0Ij4KKysgICAgICAgIDxzaXplPjI8L3NpemU+CisrICAgICAgPC9tZXRo b2Q+CisrICAgICAgPG1ldGhvZCBuYW1lPSJWb2lkIFN0YXJ0W1RTdGF0ZU1hY2hpbmVdKFRTdGF0 ZU1hY2hpbmUgQnlSZWYpIiBhdHRycz0iMTM0Ij4KKysgICAgICAgIDxzaXplPjI8L3NpemU+Cisr ICAgICAgPC9tZXRob2Q+CisrICAgICAgPG1ldGhvZCBuYW1lPSJWb2lkIFNldFN0YXRlTWFjaGlu ZShTeXN0ZW0uUnVudGltZS5Db21waWxlclNlcnZpY2VzLklBc3luY1N0YXRlTWFjaGluZSkiIGF0 dHJzPSIxMzQiPgorKyAgICAgICAgPHNpemU+Mjwvc2l6ZT4KKysgICAgICA8L21ldGhvZD4KKysg ICAgICA8bWV0aG9kIG5hbWU9IlZvaWQgLmN0b3IoKSIgYXR0cnM9IjYyNzgiPgorKyAgICAgICAg PHNpemU+Nzwvc2l6ZT4KKysgICAgICA8L21ldGhvZD4KKysgICAgPC90eXBlPgorKyAgICA8dHlw ZSBuYW1lPSJNeVRhc2tNZXRob2RCdWlsZGVyYDFbVF0iPgorKyAgICAgIDxtZXRob2QgbmFtZT0i TXlUYXNrTWV0aG9kQnVpbGRlcmAxW1RdIENyZWF0ZSgpIiBhdHRycz0iMTUwIj4KKysgICAgICAg IDxzaXplPjEwPC9zaXplPgorKyAgICAgIDwvbWV0aG9kPgorKyAgICAgIDxtZXRob2QgbmFtZT0i TXlUYXNrYDFbVF0gZ2V0X1Rhc2soKSIgYXR0cnM9IjIxODIiPgorKyAgICAgICAgPHNpemU+MTA8 L3NpemU+CisrICAgICAgPC9tZXRob2Q+CisrICAgICAgPG1ldGhvZCBuYW1lPSJWb2lkIFNldEV4 Y2VwdGlvbihTeXN0ZW0uRXhjZXB0aW9uKSIgYXR0cnM9IjEzNCI+CisrICAgICAgICA8c2l6ZT4y PC9zaXplPgorKyAgICAgIDwvbWV0aG9kPgorKyAgICAgIDxtZXRob2QgbmFtZT0iVm9pZCBTZXRS ZXN1bHQoVCkiIGF0dHJzPSIxMzQiPgorKyAgICAgICAgPHNpemU+Mjwvc2l6ZT4KKysgICAgICA8 L21ldGhvZD4KKysgICAgICA8bWV0aG9kIG5hbWU9IlZvaWQgQXdhaXRPbkNvbXBsZXRlZFtUQXdh aXRlcixUU3RhdGVNYWNoaW5lXShUQXdhaXRlciBCeVJlZiwgVFN0YXRlTWFjaGluZSBCeVJlZiki IGF0dHJzPSIxMzQiPgorKyAgICAgICAgPHNpemU+Mjwvc2l6ZT4KKysgICAgICA8L21ldGhvZD4K KysgICAgICA8bWV0aG9kIG5hbWU9IlZvaWQgQXdhaXRVbnNhZmVPbkNvbXBsZXRlZFtUQXdhaXRl cixUU3RhdGVNYWNoaW5lXShUQXdhaXRlciBCeVJlZiwgVFN0YXRlTWFjaGluZSBCeVJlZikiIGF0 dHJzPSIxMzQiPgorKyAgICAgICAgPHNpemU+Mjwvc2l6ZT4KKysgICAgICA8L21ldGhvZD4KKysg ICAgICA8bWV0aG9kIG5hbWU9IlZvaWQgU3RhcnRbVFN0YXRlTWFjaGluZV0oVFN0YXRlTWFjaGlu ZSBCeVJlZikiIGF0dHJzPSIxMzQiPgorKyAgICAgICAgPHNpemU+Mjwvc2l6ZT4KKysgICAgICA8 L21ldGhvZD4KKysgICAgICA8bWV0aG9kIG5hbWU9IlZvaWQgU2V0U3RhdGVNYWNoaW5lKFN5c3Rl bS5SdW50aW1lLkNvbXBpbGVyU2VydmljZXMuSUFzeW5jU3RhdGVNYWNoaW5lKSIgYXR0cnM9IjEz NCI+CisrICAgICAgICA8c2l6ZT4yPC9zaXplPgorKyAgICAgIDwvbWV0aG9kPgorKyAgICAgIDxt ZXRob2QgbmFtZT0iVm9pZCAuY3RvcigpIiBhdHRycz0iNjI3OCI+CisrICAgICAgICA8c2l6ZT43 PC9zaXplPgorKyAgICAgIDwvbWV0aG9kPgorKyAgICA8L3R5cGU+CisrICAgIDx0eXBlIG5hbWU9 IlgiPgorKyAgICAgIDxtZXRob2QgbmFtZT0iTXlUYXNrIFRlc3QoKSIgYXR0cnM9IjEzNCI+Cisr ICAgICAgICA8c2l6ZT4zMzwvc2l6ZT4KKysgICAgICA8L21ldGhvZD4KKysgICAgICA8bWV0aG9k IG5hbWU9Ik15VGFza2AxW1N5c3RlbS5JbnQzMl0gVGVzdDIoKSIgYXR0cnM9IjEzNCI+CisrICAg ICAgICA8c2l6ZT4zMzwvc2l6ZT4KKysgICAgICA8L21ldGhvZD4KKysgICAgICA8bWV0aG9kIG5h bWU9IlN5c3RlbS5UaHJlYWRpbmcuVGFza3MuVmFsdWVUYXNrYDFbU3lzdGVtLlN0cmluZ10gVGVz dDMoKSIgYXR0cnM9IjEzNCI+CisrICAgICAgICA8c2l6ZT4zMzwvc2l6ZT4KKysgICAgICA8L21l dGhvZD4KKysgICAgICA8bWV0aG9kIG5hbWU9IlZvaWQgTWFpbigpIiBhdHRycz0iMTUwIj4KKysg ICAgICAgIDxzaXplPjIzPC9zaXplPgorKyAgICAgIDwvbWV0aG9kPgorKyAgICAgIDxtZXRob2Qg bmFtZT0iVm9pZCAuY3RvcigpIiBhdHRycz0iNjI3OCI+CisrICAgICAgICA8c2l6ZT43PC9zaXpl PgorKyAgICAgIDwvbWV0aG9kPgorKyAgICA8L3R5cGU+CisrICAgIDx0eXBlIG5hbWU9IlgrJmx0 O1Rlc3QmZ3Q7Y19fYXN5bmMwIj4KKysgICAgICA8bWV0aG9kIG5hbWU9IlZvaWQgTW92ZU5leHQo KSIgYXR0cnM9IjQ4NiI+CisrICAgICAgICA8c2l6ZT4xNTc8L3NpemU+CisrICAgICAgPC9tZXRo b2Q+CisrICAgICAgPG1ldGhvZCBuYW1lPSJWb2lkIFNldFN0YXRlTWFjaGluZShTeXN0ZW0uUnVu dGltZS5Db21waWxlclNlcnZpY2VzLklBc3luY1N0YXRlTWFjaGluZSkiIGF0dHJzPSI0ODYiPgor KyAgICAgICAgPHNpemU+MTM8L3NpemU+CisrICAgICAgPC9tZXRob2Q+CisrICAgIDwvdHlwZT4K KysgICAgPHR5cGUgbmFtZT0iWCsmbHQ7VGVzdDImZ3Q7Y19fYXN5bmMxIj4KKysgICAgICA8bWV0 aG9kIG5hbWU9IlZvaWQgTW92ZU5leHQoKSIgYXR0cnM9IjQ4NiI+CisrICAgICAgICA8c2l6ZT4x NjU8L3NpemU+CisrICAgICAgPC9tZXRob2Q+CisrICAgICAgPG1ldGhvZCBuYW1lPSJWb2lkIFNl dFN0YXRlTWFjaGluZShTeXN0ZW0uUnVudGltZS5Db21waWxlclNlcnZpY2VzLklBc3luY1N0YXRl TWFjaGluZSkiIGF0dHJzPSI0ODYiPgorKyAgICAgICAgPHNpemU+MTM8L3NpemU+CisrICAgICAg PC9tZXRob2Q+CisrICAgIDwvdHlwZT4KKysgICAgPHR5cGUgbmFtZT0iWCsmbHQ7VGVzdDMmZ3Q7 Y19fYXN5bmMyIj4KKysgICAgICA8bWV0aG9kIG5hbWU9IlZvaWQgTW92ZU5leHQoKSIgYXR0cnM9 IjQ4NiI+CisrICAgICAgICA8c2l6ZT4xNjk8L3NpemU+CisrICAgICAgPC9tZXRob2Q+CisrICAg ICAgPG1ldGhvZCBuYW1lPSJWb2lkIFNldFN0YXRlTWFjaGluZShTeXN0ZW0uUnVudGltZS5Db21w aWxlclNlcnZpY2VzLklBc3luY1N0YXRlTWFjaGluZSkiIGF0dHJzPSI0ODYiPgorKyAgICAgICAg PHNpemU+MTM8L3NpemU+CisrICAgICAgPC9tZXRob2Q+CisrICAgIDwvdHlwZT4KKysgIDwvdGVz dD4KKyAgIDx0ZXN0IG5hbWU9InRlc3QtY2xzLTAwLmNzIj4KKyAgICAgPHR5cGUgbmFtZT0iQ0xT Q0xhc3NfNiI+CisgICAgICAgPG1ldGhvZCBuYW1lPSJWb2lkIGFkZF9EaXNwb3NlZChEZWxlZ2F0 ZSkiIGF0dHJzPSIyMTgyIj4KK0BAIC02ODUyNyw2ICs2ODY1NCw0NyBAQAorICAgICAgIDwvbWV0 aG9kPgorICAgICA8L3R5cGU+CisgICA8L3Rlc3Q+CisrICA8dGVzdCBuYW1lPSJ0ZXN0LWRlZmF1 bHQtMDEuY3MiPgorKyAgICA8dHlwZSBuYW1lPSJYIj4KKysgICAgICA8bWV0aG9kIG5hbWU9IlZv aWQgTWFpbigpIiBhdHRycz0iMTUwIj4KKysgICAgICAgIDxzaXplPjUzPC9zaXplPgorKyAgICAg IDwvbWV0aG9kPgorKyAgICAgIDxtZXRob2QgbmFtZT0iSW50MzIgTTEoKSIgYXR0cnM9IjE0NSI+ CisrICAgICAgICA8c2l6ZT4xMDwvc2l6ZT4KKysgICAgICA8L21ldGhvZD4KKysgICAgICA8bWV0 aG9kIG5hbWU9IlZvaWQgTTIoKSIgYXR0cnM9IjE0NSI+CisrICAgICAgICA8c2l6ZT4zMTwvc2l6 ZT4KKysgICAgICA8L21ldGhvZD4KKysgICAgICA8bWV0aG9kIG5hbWU9IlZvaWQgTTMoSW50MzIp IiBhdHRycz0iMTQ1Ij4KKysgICAgICAgIDxzaXplPjI8L3NpemU+CisrICAgICAgPC9tZXRob2Q+ CisrICAgICAgPG1ldGhvZCBuYW1lPSJTeXN0ZW0uRnVuY2AxW1N5c3RlbS5JbnQzMl0gTTQoKSIg YXR0cnM9IjE0NSI+CisrICAgICAgICA8c2l6ZT4zODwvc2l6ZT4KKysgICAgICA8L21ldGhvZD4K KysgICAgICA8bWV0aG9kIG5hbWU9IkludDMyICZsdDtNNCZndDttX18wKCkiIGF0dHJzPSIxNDUi PgorKyAgICAgICAgPHNpemU+OTwvc2l6ZT4KKysgICAgICA8L21ldGhvZD4KKysgICAgPC90eXBl PgorKyAgPC90ZXN0PgorKyAgPHRlc3QgbmFtZT0idGVzdC1kZWZhdWx0LTAyLmNzIj4KKysgICAg PHR5cGUgbmFtZT0iQyI+CisrICAgICAgPG1ldGhvZCBuYW1lPSJWb2lkIE1haW4oKSIgYXR0cnM9 IjE0NSI+CisrICAgICAgICA8c2l6ZT4zNjwvc2l6ZT4KKysgICAgICA8L21ldGhvZD4KKysgICAg ICA8bWV0aG9kIG5hbWU9IlZvaWQgTVtUXShULCBUKSIgYXR0cnM9IjE0NSI+CisrICAgICAgICA8 c2l6ZT4yPC9zaXplPgorKyAgICAgIDwvbWV0aG9kPgorKyAgICAgIDxtZXRob2QgbmFtZT0iVm9p ZCBNMihTeXN0ZW0uT2JqZWN0W10pIiBhdHRycz0iMTQ1Ij4KKysgICAgICAgIDxzaXplPjI8L3Np emU+CisrICAgICAgPC9tZXRob2Q+CisrICAgICAgPG1ldGhvZCBuYW1lPSJWb2lkIC5jdG9yKCki IGF0dHJzPSI2Mjc4Ij4KKysgICAgICAgIDxzaXplPjc8L3NpemU+CisrICAgICAgPC9tZXRob2Q+ CisrICAgICAgPG1ldGhvZCBuYW1lPSJCeXRlW10gVGVzdChTYDFbU3lzdGVtLkJ5dGVdKSIgYXR0 cnM9IjE0NSI+CisrICAgICAgICA8c2l6ZT4xMDwvc2l6ZT4KKysgICAgICA8L21ldGhvZD4KKysg ICAgPC90eXBlPgorKyAgPC90ZXN0PgorICAgPHRlc3QgbmFtZT0idGVzdC1kaWN0aW5pdC0wMS5j cyI+CisgICAgIDx0eXBlIG5hbWU9IlByb2dyYW0iPgorICAgICAgIDxtZXRob2QgbmFtZT0iSW50 MzIgTWFpbigpIiBhdHRycz0iMTQ1Ij4KK0BAIC02ODYxMCw2ICs2ODc3OCwzMCBAQAorICAgICAg IDwvbWV0aG9kPgorICAgICA8L3R5cGU+CisgICA8L3Rlc3Q+CisrICA8dGVzdCBuYW1lPSJ0ZXN0 LWRpc2NhcmRzLTAxLmNzIj4KKysgICAgPHR5cGUgbmFtZT0iWCI+CisrICAgICAgPG1ldGhvZCBu YW1lPSJWb2lkIE1haW4oKSIgYXR0cnM9IjE1MCI+CisrICAgICAgICA8c2l6ZT42Mzwvc2l6ZT4K KysgICAgICA8L21ldGhvZD4KKysgICAgICA8bWV0aG9kIG5hbWU9IkJvb2xlYW4gVHJ5R2V0VmFs dWUoSW50MzIgQnlSZWYpIiBhdHRycz0iMTQ1Ij4KKysgICAgICAgIDxzaXplPjEzPC9zaXplPgor KyAgICAgIDwvbWV0aG9kPgorKyAgICAgIDxtZXRob2QgbmFtZT0iSW50MzIgVGVzdFZhbHVlKCki IGF0dHJzPSIxNDUiPgorKyAgICAgICAgPHNpemU+MTA8L3NpemU+CisrICAgICAgPC9tZXRob2Q+ CisrICAgICAgPG1ldGhvZCBuYW1lPSJWb2lkIC5jdG9yKCkiIGF0dHJzPSI2Mjc4Ij4KKysgICAg ICAgIDxzaXplPjc8L3NpemU+CisrICAgICAgPC9tZXRob2Q+CisrICAgIDwvdHlwZT4KKysgICAg PHR5cGUgbmFtZT0iWCsmbHQ7TWFpbiZndDtjX19Bbm9uU3RvcmV5MCI+CisrICAgICAgPG1ldGhv ZCBuYW1lPSJTeXN0ZW0uT2JqZWN0ICZsdDsmZ3Q7bV9fMCgpIiBhdHRycz0iMTMxIj4KKysgICAg ICAgIDxzaXplPjI1PC9zaXplPgorKyAgICAgIDwvbWV0aG9kPgorKyAgICAgIDxtZXRob2QgbmFt ZT0iVm9pZCAuY3RvcigpIiBhdHRycz0iNjI3OCI+CisrICAgICAgICA8c2l6ZT43PC9zaXplPgor KyAgICAgIDwvbWV0aG9kPgorKyAgICA8L3R5cGU+CisrICA8L3Rlc3Q+CisgICA8dGVzdCBuYW1l PSJ0ZXN0LWV4LWZpbHRlci0wMS5jcyI+CisgICAgIDx0eXBlIG5hbWU9IlgiPgorICAgICAgIDxt ZXRob2QgbmFtZT0iSW50MzIgTWFpbigpIiBhdHRycz0iMTUwIj4KK0BAIC03MDY4OSw2ICs3MDg4 MSwxOSBAQAorICAgICAgIDwvbWV0aG9kPgorICAgICA8L3R5cGU+CisgICA8L3Rlc3Q+CisrICA8 dGVzdCBuYW1lPSJ0ZXN0LW5hbWVkLTExLmNzIj4KKysgICAgPHR5cGUgbmFtZT0iWCI+CisrICAg ICAgPG1ldGhvZCBuYW1lPSJWb2lkIE1haW4oKSIgYXR0cnM9IjE1MCI+CisrICAgICAgICA8c2l6 ZT4xMzwvc2l6ZT4KKysgICAgICA8L21ldGhvZD4KKysgICAgICA8bWV0aG9kIG5hbWU9IlZvaWQg VGVzdChJbnQzMiwgU3lzdGVtLlN0cmluZykiIGF0dHJzPSIxNDUiPgorKyAgICAgICAgPHNpemU+ Mjwvc2l6ZT4KKysgICAgICA8L21ldGhvZD4KKysgICAgICA8bWV0aG9kIG5hbWU9IlZvaWQgLmN0 b3IoKSIgYXR0cnM9IjYyNzgiPgorKyAgICAgICAgPHNpemU+Nzwvc2l6ZT4KKysgICAgICA8L21l dGhvZD4KKysgICAgPC90eXBlPgorKyAgPC90ZXN0PgorICAgPHRlc3QgbmFtZT0idGVzdC1uYW1l b2YtMDEuY3MiPgorICAgICA8dHlwZSBuYW1lPSJYIj4KKyAgICAgICA8bWV0aG9kIG5hbWU9Iklu dDMyIE1haW4oKSIgYXR0cnM9IjE1MCI+CitAQCAtNzI3NzgsNiArNzI5ODMsNDkgQEAKKyAgICAg ICA8L21ldGhvZD4KKyAgICAgPC90eXBlPgorICAgPC90ZXN0PgorKyAgPHRlc3QgbmFtZT0idGVz dC1yZWFkb25seS0wMi5jcyI+CisrICAgIDx0eXBlIG5hbWU9IkQiPgorKyAgICAgIDxtZXRob2Qg bmFtZT0iSW50MzImYW1wOyBJbnZva2UoSW50MzIpIiBhdHRycz0iNDU0Ij4KKysgICAgICAgIDxz aXplPjA8L3NpemU+CisrICAgICAgPC9tZXRob2Q+CisrICAgICAgPG1ldGhvZCBuYW1lPSJTeXN0 ZW0uSUFzeW5jUmVzdWx0IEJlZ2luSW52b2tlKEludDMyLCBTeXN0ZW0uQXN5bmNDYWxsYmFjaywg U3lzdGVtLk9iamVjdCkiIGF0dHJzPSI0NTQiPgorKyAgICAgICAgPHNpemU+MDwvc2l6ZT4KKysg ICAgICA8L21ldGhvZD4KKysgICAgICA8bWV0aG9kIG5hbWU9IkludDMyJmFtcDsgRW5kSW52b2tl KFN5c3RlbS5JQXN5bmNSZXN1bHQpIiBhdHRycz0iNDU0Ij4KKysgICAgICAgIDxzaXplPjA8L3Np emU+CisrICAgICAgPC9tZXRob2Q+CisrICAgICAgPG1ldGhvZCBuYW1lPSJWb2lkIC5jdG9yKE9i amVjdCwgSW50UHRyKSIgYXR0cnM9IjYyNzgiPgorKyAgICAgICAgPHNpemU+MDwvc2l6ZT4KKysg ICAgICA8L21ldGhvZD4KKysgICAgPC90eXBlPgorKyAgICA8dHlwZSBuYW1lPSJYIj4KKysgICAg ICA8bWV0aG9kIG5hbWU9IlZvaWQgTWFpbigpIiBhdHRycz0iMTUwIj4KKysgICAgICAgIDxzaXpl PjI8L3NpemU+CisrICAgICAgPC9tZXRob2Q+CisrICAgICAgPG1ldGhvZCBuYW1lPSJTeXN0ZW0u R3VpZCZhbXA7IFRlc3RNZXRob2QoKSIgYXR0cnM9IjEyOSI+CisrICAgICAgICA8c2l6ZT4xNTwv c2l6ZT4KKysgICAgICA8L21ldGhvZD4KKysgICAgICA8bWV0aG9kIG5hbWU9IlN5c3RlbS5HdWlk JmFtcDsgZ2V0X1Rlc3RQcm9wKCkiIGF0dHJzPSIyMTc3Ij4KKysgICAgICAgIDxzaXplPjE3PC9z aXplPgorKyAgICAgIDwvbWV0aG9kPgorKyAgICAgIDxtZXRob2QgbmFtZT0iVm9pZCAuY3Rvcigp IiBhdHRycz0iNjI3OCI+CisrICAgICAgICA8c2l6ZT43PC9zaXplPgorKyAgICAgIDwvbWV0aG9k PgorKyAgICA8L3R5cGU+CisrICA8L3Rlc3Q+CisrICA8dGVzdCBuYW1lPSJ0ZXN0LXJlYWRvbmx5 LTAzLmNzIj4KKysgICAgPHR5cGUgbmFtZT0iUyI+CisrICAgICAgPG1ldGhvZCBuYW1lPSJWb2lk IE1haW4oKSIgYXR0cnM9IjE1MCI+CisrICAgICAgICA8c2l6ZT4yPC9zaXplPgorKyAgICAgIDwv bWV0aG9kPgorKyAgICAgIDxtZXRob2QgbmFtZT0iVm9pZCAuY3RvcihJbnQzMikiIGF0dHJzPSI2 Mjc4Ij4KKysgICAgICAgIDxzaXplPjEzPC9zaXplPgorKyAgICAgIDwvbWV0aG9kPgorKyAgICAg IDxtZXRob2QgbmFtZT0iVm9pZCAuY2N0b3IoKSIgYXR0cnM9IjYyODkiPgorKyAgICAgICAgPHNp emU+MTU8L3NpemU+CisrICAgICAgPC9tZXRob2Q+CisrICAgIDwvdHlwZT4KKysgIDwvdGVzdD4K KyAgIDx0ZXN0IG5hbWU9InRlc3QtcmVmLTAxLmNzIj4KKyAgICAgPHR5cGUgbmFtZT0iWCI+Cisg ICAgICAgPG1ldGhvZCBuYW1lPSJWb2lkIE1haW4oKSIgYXR0cnM9IjE1MCI+CitAQCAtNzI5MDYs NiArNzMxNTQsOTUgQEAKKyAgICAgICA8L21ldGhvZD4KKyAgICAgPC90eXBlPgorICAgPC90ZXN0 PgorKyAgPHRlc3QgbmFtZT0idGVzdC1yZWYtMDcuY3MiPgorKyAgICA8dHlwZSBuYW1lPSJUZXN0 Ij4KKysgICAgICA8bWV0aG9kIG5hbWU9IlZvaWQgTWFpbigpIiBhdHRycz0iMTUwIj4KKysgICAg ICAgIDxzaXplPjE4PC9zaXplPgorKyAgICAgIDwvbWV0aG9kPgorKyAgICAgIDxtZXRob2QgbmFt ZT0iVGVzdCBNZXRob2QoKSIgYXR0cnM9IjEyOSI+CisrICAgICAgICA8c2l6ZT4xODwvc2l6ZT4K KysgICAgICA8L21ldGhvZD4KKysgICAgPC90eXBlPgorKyAgICA8dHlwZSBuYW1lPSJQIj4KKysg ICAgICA8bWV0aG9kIG5hbWU9IlRlc3QgZ2V0X1NwYW4oKSIgYXR0cnM9IjM1MjYiPgorKyAgICAg ICAgPHNpemU+MDwvc2l6ZT4KKysgICAgICA8L21ldGhvZD4KKysgICAgICA8bWV0aG9kIG5hbWU9 IlZvaWQgLmN0b3IoKSIgYXR0cnM9IjYyNzYiPgorKyAgICAgICAgPHNpemU+Nzwvc2l6ZT4KKysg ICAgICA8L21ldGhvZD4KKysgICAgPC90eXBlPgorKyAgPC90ZXN0PgorKyAgPHRlc3QgbmFtZT0i dGVzdC1yZWYtMDguY3MiPgorKyAgICA8dHlwZSBuYW1lPSJDbGFzc0xpYnJhcnkxLkMiPgorKyAg ICAgIDxtZXRob2QgbmFtZT0iVm9pZCBNTSgpIiBhdHRycz0iMTI5Ij4KKysgICAgICAgIDxzaXpl PjYwPC9zaXplPgorKyAgICAgIDwvbWV0aG9kPgorKyAgICAgIDxtZXRob2QgbmFtZT0iVm9pZCBN YWluKCkiIGF0dHJzPSIxNTAiPgorKyAgICAgICAgPHNpemU+MjQ1PC9zaXplPgorKyAgICAgIDwv bWV0aG9kPgorKyAgICAgIDxtZXRob2QgbmFtZT0iSW50MzImYW1wOyBBZGQyKEludDMyIEJ5UmVm LCBJbnQzMikiIGF0dHJzPSIxNTAiPgorKyAgICAgICAgPHNpemU+MTA8L3NpemU+CisrICAgICAg PC9tZXRob2Q+CisrICAgICAgPG1ldGhvZCBuYW1lPSJWb2lkIC5jdG9yKCkiIGF0dHJzPSI2Mjc4 Ij4KKysgICAgICAgIDxzaXplPjc8L3NpemU+CisrICAgICAgPC9tZXRob2Q+CisrICAgICAgPG1l dGhvZCBuYW1lPSJWb2lkIC5jY3RvcigpIiBhdHRycz0iNjI4OSI+CisrICAgICAgICA8c2l6ZT4x Mjwvc2l6ZT4KKysgICAgICA8L21ldGhvZD4KKysgICAgPC90eXBlPgorKyAgICA8dHlwZSBuYW1l PSJDbGFzc0xpYnJhcnkxLkMrQiI+CisrICAgICAgPG1ldGhvZCBuYW1lPSJJbnQzMiZhbXA7IGdl dF9JdGVtKEludDMyKSIgYXR0cnM9IjIxODIiPgorKyAgICAgICAgPHNpemU+MTU8L3NpemU+Cisr ICAgICAgPC9tZXRob2Q+CisrICAgICAgPG1ldGhvZCBuYW1lPSJWb2lkIC5jdG9yKCkiIGF0dHJz PSI2Mjc4Ij4KKysgICAgICAgIDxzaXplPjc8L3NpemU+CisrICAgICAgPC9tZXRob2Q+CisrICAg IDwvdHlwZT4KKysgICAgPHR5cGUgbmFtZT0iQ2xhc3NMaWJyYXJ5MS5DK0dlbmAxW1RdIj4KKysg ICAgICA8bWV0aG9kIG5hbWU9IlQmYW1wOyBnZXRfSXRlbShJbnQzMikiIGF0dHJzPSIyMTgyIj4K KysgICAgICAgIDxzaXplPjE1PC9zaXplPgorKyAgICAgIDwvbWV0aG9kPgorKyAgICAgIDxtZXRo b2QgbmFtZT0iVm9pZCAuY3RvcigpIiBhdHRycz0iNjI3OCI+CisrICAgICAgICA8c2l6ZT43PC9z aXplPgorKyAgICAgIDwvbWV0aG9kPgorKyAgICA8L3R5cGU+CisrICAgIDx0eXBlIG5hbWU9IkNs YXNzTGlicmFyeTEuQytCQiI+CisrICAgICAgPG1ldGhvZCBuYW1lPSJWYWwmYW1wOyBnZXRfSXRl bShJbnQzMikiIGF0dHJzPSIyMTgyIj4KKysgICAgICAgIDxzaXplPjE1PC9zaXplPgorKyAgICAg IDwvbWV0aG9kPgorKyAgICAgIDxtZXRob2QgbmFtZT0iVm9pZCAuY3RvcigpIiBhdHRycz0iNjI3 OCI+CisrICAgICAgICA8c2l6ZT43PC9zaXplPgorKyAgICAgIDwvbWV0aG9kPgorKyAgICA8L3R5 cGU+CisrICA8L3Rlc3Q+CisrICA8dGVzdCBuYW1lPSJ0ZXN0LXJlZi0wOS5jcyI+CisrICAgIDx0 eXBlIG5hbWU9IlByb2dyYW0iPgorKyAgICAgIDxtZXRob2QgbmFtZT0icmlnaWRib2R5JmFtcDsg Z2V0X3Byb3BlcnR5X3JldHVybmluZ19zdHJ1Y3RfYnlfcmVmKCkiIGF0dHJzPSIyMTkzIj4KKysg ICAgICAgIDxzaXplPjEzPC9zaXplPgorKyAgICAgIDwvbWV0aG9kPgorKyAgICAgIDxtZXRob2Qg bmFtZT0iVm9pZCBNYWluKCkiIGF0dHJzPSIxNDUiPgorKyAgICAgICAgPHNpemU+MTc8L3NpemU+ CisrICAgICAgPC9tZXRob2Q+CisrICAgICAgPG1ldGhvZCBuYW1lPSJWb2lkIC5jdG9yKCkiIGF0 dHJzPSI2Mjc4Ij4KKysgICAgICAgIDxzaXplPjc8L3NpemU+CisrICAgICAgPC9tZXRob2Q+Cisr ICAgIDwvdHlwZT4KKysgIDwvdGVzdD4KKysgIDx0ZXN0IG5hbWU9InRlc3QtcmVmLTEwLmNzIj4K KysgICAgPHR5cGUgbmFtZT0iVmFsdWVTdHJpbmdCdWlsZGVyIj4KKysgICAgICA8bWV0aG9kIG5h bWU9IlN5c3RlbS5TdHJpbmcgVG9TdHJpbmcoKSIgYXR0cnM9IjE5OCI+CisrICAgICAgICA8c2l6 ZT4xNDwvc2l6ZT4KKysgICAgICA8L21ldGhvZD4KKysgICAgPC90eXBlPgorKyAgICA8dHlwZSBu YW1lPSJYIj4KKysgICAgICA8bWV0aG9kIG5hbWU9IkludDMyIE1haW4oKSIgYXR0cnM9IjE1MCI+ CisrICAgICAgICA8c2l6ZT40Nzwvc2l6ZT4KKysgICAgICA8L21ldGhvZD4KKysgICAgICA8bWV0 aG9kIG5hbWU9IlZvaWQgLmN0b3IoKSIgYXR0cnM9IjYyNzgiPgorKyAgICAgICAgPHNpemU+Nzwv c2l6ZT4KKysgICAgICA8L21ldGhvZD4KKysgICAgPC90eXBlPgorKyAgPC90ZXN0PgorICAgPHRl c3QgbmFtZT0idGVzdC1zdGF0aWMtdXNpbmctMDEuY3MiPgorICAgICA8dHlwZSBuYW1lPSJBLkIu WCI+CisgICAgICAgPG1ldGhvZCBuYW1lPSJJbnQzMiBUZXN0KCkiIGF0dHJzPSIxNTAiPgorQEAg LTczMzc0LDYgKzczNzExLDU2IEBACisgICAgICAgPC9tZXRob2Q+CisgICAgIDwvdHlwZT4KKyAg IDwvdGVzdD4KKysgIDx0ZXN0IG5hbWU9InRlc3QtdHVwbGUtMDcuY3MiPgorKyAgICA8dHlwZSBu YW1lPSJQYXJzZXJUZXN0Ij4KKysgICAgICA8bWV0aG9kIG5hbWU9IlN5c3RlbS5Db2xsZWN0aW9u cy5HZW5lcmljLklFbnVtZXJhYmxlYDFbU3lzdGVtLlZhbHVlVHVwbGVgMltTeXN0ZW0uT2JqZWN0 LFN5c3RlbS5JbnQzMl1dIFRlc3QoKSIgYXR0cnM9IjEyOSI+CisrICAgICAgICA8c2l6ZT4xMDwv c2l6ZT4KKysgICAgICA8L21ldGhvZD4KKysgICAgICA8bWV0aG9kIG5hbWU9IlZvaWQgTWFpbigp IiBhdHRycz0iMTUwIj4KKysgICAgICAgIDxzaXplPjI8L3NpemU+CisrICAgICAgPC9tZXRob2Q+ CisrICAgICAgPG1ldGhvZCBuYW1lPSJWb2lkIC5jdG9yKCkiIGF0dHJzPSI2Mjc4Ij4KKysgICAg ICAgIDxzaXplPjc8L3NpemU+CisrICAgICAgPC9tZXRob2Q+CisrICAgIDwvdHlwZT4KKysgIDwv dGVzdD4KKysgIDx0ZXN0IG5hbWU9InRlc3QtdHVwbGUtMDguY3MiPgorKyAgICA8dHlwZSBuYW1l PSJYIj4KKysgICAgICA8bWV0aG9kIG5hbWU9IlZvaWQgTWFpbigpIiBhdHRycz0iMTUwIj4KKysg ICAgICAgIDxzaXplPjE5PC9zaXplPgorKyAgICAgIDwvbWV0aG9kPgorKyAgICAgIDxtZXRob2Qg bmFtZT0iU3lzdGVtLlRocmVhZGluZy5UYXNrcy5UYXNrIFRlc3QoKSIgYXR0cnM9IjEyOSI+Cisr ICAgICAgICA8c2l6ZT40MTwvc2l6ZT4KKysgICAgICA8L21ldGhvZD4KKysgICAgICA8bWV0aG9k IG5hbWU9IlN5c3RlbS5UaHJlYWRpbmcuVGFza3MuVGFza2AxW1N5c3RlbS5WYWx1ZVR1cGxlYDJb U3lzdGVtLkludDMyLFN5c3RlbS5JbnQzMl1dIFdhaXRpbmcoKSIgYXR0cnM9IjEyOSI+CisrICAg ICAgICA8c2l6ZT4yMTwvc2l6ZT4KKysgICAgICA8L21ldGhvZD4KKysgICAgICA8bWV0aG9kIG5h bWU9IlZvaWQgLmN0b3IoKSIgYXR0cnM9IjYyNzgiPgorKyAgICAgICAgPHNpemU+Nzwvc2l6ZT4K KysgICAgICA8L21ldGhvZD4KKysgICAgPC90eXBlPgorKyAgICA8dHlwZSBuYW1lPSJYKyZsdDtU ZXN0Jmd0O2NfX2FzeW5jMCI+CisrICAgICAgPG1ldGhvZCBuYW1lPSJWb2lkIE1vdmVOZXh0KCki IGF0dHJzPSI0ODYiPgorKyAgICAgICAgPHNpemU+MjEyPC9zaXplPgorKyAgICAgIDwvbWV0aG9k PgorKyAgICAgIDxtZXRob2QgbmFtZT0iVm9pZCBTZXRTdGF0ZU1hY2hpbmUoU3lzdGVtLlJ1bnRp bWUuQ29tcGlsZXJTZXJ2aWNlcy5JQXN5bmNTdGF0ZU1hY2hpbmUpIiBhdHRycz0iNDg2Ij4KKysg ICAgICAgIDxzaXplPjEzPC9zaXplPgorKyAgICAgIDwvbWV0aG9kPgorKyAgICA8L3R5cGU+Cisr ICA8L3Rlc3Q+CisrICA8dGVzdCBuYW1lPSJ0ZXN0LXR1cGxlLTA5LmNzIj4KKysgICAgPHR5cGUg bmFtZT0iVHVwbGVEZWNvbnN0cnVjdGlvbkRlY2xhcmF0aW9uIj4KKysgICAgICA8bWV0aG9kIG5h bWU9IkludDMyIE1haW4oKSIgYXR0cnM9IjE1MCI+CisrICAgICAgICA8c2l6ZT45OTwvc2l6ZT4K KysgICAgICA8L21ldGhvZD4KKysgICAgICA8bWV0aG9kIG5hbWU9IlN5c3RlbS5WYWx1ZVR1cGxl YDJbU3lzdGVtLlN0cmluZyxTeXN0ZW0uSW50NjRdIEdldFZhbHVlcygpIiBhdHRycz0iMTQ1Ij4K KysgICAgICAgIDxzaXplPjIxPC9zaXplPgorKyAgICAgIDwvbWV0aG9kPgorKyAgICAgIDxtZXRo b2QgbmFtZT0iVm9pZCAuY3RvcigpIiBhdHRycz0iNjI3OCI+CisrICAgICAgICA8c2l6ZT43PC9z aXplPgorKyAgICAgIDwvbWV0aG9kPgorKyAgICA8L3R5cGU+CisrICA8L3Rlc3Q+CisgICA8dGVz dCBuYW1lPSJ0ZXN0LXZhci0wMS5jcyI+CisgICAgIDx0eXBlIG5hbWU9IlRlc3QiPgorICAgICAg IDxtZXRob2QgbmFtZT0iSW50MzIgTWFpbigpIiBhdHRycz0iMTUwIj4KLS0gCjIuNDUuMgoK --b1=_tnCtFHx6yIKuYDXqbApeYGjbdIBbQ4owcmVz3FJkVmc Content-Type: text/x-patch; name=v2-0015-gnu-Add-mono-5.4.0.patch Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=v2-0015-gnu-Add-mono-5.4.0.patch RnJvbSAzZDMyNzc0Y2NlNzk3MzgxMzMyYzhlOTRmZmYxYTc5NzU5N2UxOTY2IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiB1bm11c2ggPHVubXVzaEBoYXNoYmFuZy5zaD4KRGF0ZTogVHVl LCAyNiBOb3YgMjAyNCAxMzozNjo0NgpTdWJqZWN0OiBbUEFUQ0ggdjIgMTUvMjFdIGdudTogQWRk IG1vbm8tNS40LjAuCgoqIGdudS9wYWNrYWdlcy9kb3RuZXQuc2NtCiAgKG1vbm8tNS40LjAtZXh0 ZXJuYWwtcmVwby1zcGVjcywgbW9uby01LjQuMCk6IE5ldyB2YXJpYWJsZXMuCiogZ251L3BhY2th Z2VzL3BhdGNoZXMvY29yZWZ4LW1vbm8tNS40LjAtcGF0Y2hlcy5wYXRjaDogTmV3IHBhdGNoLgoq IGdudS9wYWNrYWdlcy9wYXRjaGVzL21vbm8tNS40LjAtcGF0Y2hlcy5wYXRjaDogTmV3IHBhdGNo LgoqIGdudS9sb2NhbC5tayAoZGlzdF9wYXRjaF9EQVRBKTogUmVnaXN0ZXIgbmV3IHBhdGNoZXMu CgotLS0KIGdudS9sb2NhbC5tayAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAg MiArCiBnbnUvcGFja2FnZXMvZG90bmV0LnNjbSAgICAgICAgICAgICAgICAgICAgICAgfCAgOTIg KysKIC4uLi9wYXRjaGVzL2NvcmVmeC1tb25vLTUuNC4wLXBhdGNoZXMucGF0Y2ggICB8IDkxNSAr KysrKysrKysrKysrKysrKysKIGdudS9wYWNrYWdlcy9wYXRjaGVzL21vbm8tNS40LjAtcGF0Y2hl cy5wYXRjaCB8IDEwMCArKwogNCBmaWxlcyBjaGFuZ2VkLCAxMTA5IGluc2VydGlvbnMoKykKIGNy ZWF0ZSBtb2RlIDEwMDY0NCBnbnUvcGFja2FnZXMvcGF0Y2hlcy9jb3JlZngtbW9uby01LjQuMC1w YXRjaGVzLnBhdGNoCiBjcmVhdGUgbW9kZSAxMDA2NDQgZ251L3BhY2thZ2VzL3BhdGNoZXMvbW9u by01LjQuMC1wYXRjaGVzLnBhdGNoCgpkaWZmIC0tZ2l0IGEvZ251L2xvY2FsLm1rIGIvZ251L2xv Y2FsLm1rCmluZGV4IDY1Nzk5YWM1ZTE4Li5iMTEwOGY3OWU0ZSAxMDA2NDQKLS0tIGEvZ251L2xv Y2FsLm1rCisrKyBiL2dudS9sb2NhbC5tawpAQCAtMTExNyw2ICsxMTE3LDcgQEAgZGlzdF9wYXRj aF9EQVRBID0JCQkJCQlcCiAgICVEJS9wYWNrYWdlcy9wYXRjaGVzL2NvbnZlcnNlZW4taGlkZS1u b24tZnJlZS1wb2ludGVycy5wYXRjaAlcCiAgICVEJS9wYWNrYWdlcy9wYXRjaGVzL2Nvb2wtcmV0 cm8tdGVybS13Y3R5cGUucGF0Y2gJCVwKICAgJUQlL3BhY2thZ2VzL3BhdGNoZXMvY29xLWF1dG9z dWJzdC0xLjgtcmVtb3ZlLWRlcHJlY2F0ZWQtZmlsZXMucGF0Y2gJCVwKKyAgJUQlL3BhY2thZ2Vz L3BhdGNoZXMvY29yZWZ4LW1vbm8tNS40LjAtcGF0Y2hlcy5wYXRjaAkJXAogICAlRCUvcGFja2Fn ZXMvcGF0Y2hlcy9jb3JldXRpbHMtZ251bGliLXRlc3RzLnBhdGNoCQlcCiAgICVEJS9wYWNrYWdl cy9wYXRjaGVzL2NwcGNoZWNrLWRpc2FibGUtY2hhci1zaWduZWRuZXNzLXRlc3QucGF0Y2gJXAog ICAlRCUvcGFja2FnZXMvcGF0Y2hlcy9jcHBkYXAtYWRkLUNQUERBUF9VU0VfRVhURVJOQUxfR1RF U1RfUEFDS0FHRS5wYXRjaFwKQEAgLTE4MzAsNiArMTgzMSw3IEBAIGRpc3RfcGF0Y2hfREFUQSA9 CQkJCQkJXAogICAlRCUvcGFja2FnZXMvcGF0Y2hlcy9tb25vLTIuNi40LWZpeGVzLnBhdGNoCQkJ XAogICAlRCUvcGFja2FnZXMvcGF0Y2hlcy9tb25vLTIuMTEuNC1maXhlcy5wYXRjaAkJCVwKICAg JUQlL3BhY2thZ2VzL3BhdGNoZXMvbW9uby00LjkuMC1maXgtcnVudGltZW1ldGFkYXRhdmVyc2lv bi5wYXRjaAkJXAorICAlRCUvcGFja2FnZXMvcGF0Y2hlcy9tb25vLTUuNC4wLXBhdGNoZXMucGF0 Y2gJCVwKICAgJUQlL3BhY2thZ2VzL3BhdGNoZXMvbW9zYWljYXRjaGVyLXVuYnVuZGxlLWh0c2xp Yi5wYXRjaAlcCiAgICVEJS9wYWNrYWdlcy9wYXRjaGVzL21ycmVzY3VlLXN1cHBvcnQtbG92ZS0x MS5wYXRjaAkJXAogICAlRCUvcGFja2FnZXMvcGF0Y2hlcy9tdG9vbHMtbWZvcm1hdC11bmluaXRp YWxpemVkLnBhdGNoCVwKZGlmZiAtLWdpdCBhL2dudS9wYWNrYWdlcy9kb3RuZXQuc2NtIGIvZ251 L3BhY2thZ2VzL2RvdG5ldC5zY20KaW5kZXggYmYxNDE0MzY4YjMuLjk0NzU2MjM3ZTI0IDEwMDY0 NAotLS0gYS9nbnUvcGFja2FnZXMvZG90bmV0LnNjbQorKysgYi9nbnUvcGFja2FnZXMvZG90bmV0 LnNjbQpAQCAtMTE1OSwzICsxMTU5LDk1IEBAIChkZWZpbmUtcHVibGljIG1vbm8tNS4yLjAKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICMkQHByZXBhcmUtbW9uby1zb3VyY2UtMCkpKSkKICAg ICAobmF0aXZlLWlucHV0cyAobW9kaWZ5LWlucHV0cyAocGFja2FnZS1uYXRpdmUtaW5wdXRzIG1v bm8tNS4xLjApCiAgICAgICAgICAgICAgICAgICAgICAocmVwbGFjZSAibW9ubyIgbW9uby01LjEu MCkpKSkpCisKKyhkZWZpbmUgbW9uby01LjQuMC1leHRlcm5hbC1yZXBvLXNwZWNzCisgICcoKCJh c3BuZXR3ZWJzdGFjayIgICAgICAgICAgICAgICJlNzdiMTJlNmNjNWVkMjYwYTk4NDQ3ZjYwOWU4 ODczMzdlNDRlMjk5IgorICAgICAiMHJrczM0NHFyNGZtcDNmczEyNjRkMnFrbW0zNDhtOGQxa2pk N3o0bDk0aWlpcnduMWZxMSIpCisgICAgKCJhcGktZG9jLXRvb2xzIiAgICAgICAgICAgICAgICJk MDNlODE5ODM4YzYyNDFmOTJmOTA2NTVjYjQ0OGNjNDdjOWU4NzkxIgorICAgICAiMXJpa2k3OWYz aWczY3hpZ3Zpc3M4MWR6NjAxaG45MmExZ2lmZ2xtMG16amJzNzZzZjNmaiIKKyAgICAgIzpyZWN1 cnNpdmU/ICN0KQorICAgICgiYXBpLXNuYXBzaG90IiAgICAgICAgICAgICAgICAiYjA5MDMzYmUz M2FiMjUxMTM3NDMxNTFjNjQ0YzgzMTE1OGM1NDA0MiIKKyAgICAgIjB6NjdpcWQxYnJpYjZuaTM2 cGtscnA3cmx4eWhyaTVuazNweDM3Zm0xYWFjZ3Juc2s3Y2siKQorICAgICgoInJlZmVyZW5jZS1h c3NlbWJsaWVzIiAiYmluYXJ5LXJlZmVyZW5jZS1hc3NlbWJsaWVzIikKKyAgICAgIjE0MmNiZWI2 MmZmYWJmMWRkOWMxNDE0ZDhkZDc2ZjkzYmNiZWQwYzIiCisgICAgICIxd2tkNTg5aGdiMTZtNXp2 bXA5eWI1N2FneXlyeWFhMWpqOHZobDR3MjBpMmhwMjJ3YWQ5IikKKyAgICAoImJvY2tidWlsZCIg ICAgICAgICAgICAgICAgICAgIjBlZmRiMzcxZTZkNzlhYmM1NGMwZTNiYjM2ODlmYTE2NDZmNDM5 NGUiCisgICAgICIxMHFyMW0yd2EzemIyaTNqMTZpMGNxNDloaWdqbTQ1MWJobHFocWQ0cmxpc3Fu MHc4bnJ2IikKKyAgICAoImJvcmluZ3NzbCIgICAgICAgICAgICAgICAgICAgIjNlMDc3MGUxODgz NTcxNDcwODg2MGJhOWZlMWFmMDRhOTMyOTcxZmYiCisgICAgICIxMzlhMGdsOTFhNTJrMnI2bmE2 aWFsemtxeWthajFyazg4empya2F6M3NkeHg3bm1tZzZ5IikKKyAgICAoImNlY2lsIiAgICAgICAg ICAgICAgICAgICAgICAgImMwZWI5ODNkYWM2MjUxOWQzYWU5M2E2ODkzMTIwNzZhYWNlY2I3MjMi CisgICAgICIwMmkzcHdwYWY2cTAwcGtsZm13eGh6MGxncDgzODU0ZHlxbnZmNGMxeXMwN2NzOHkx cGRrIikKKyAgICAoKCJjZWNpbCIgImNlY2lsLWxlZ2FjeSIpICAgICAgIjMzZDUwYjg3NGZkNTI3 MTE4YmMzNjFkODNkZTNkNDk0ZThiYjU1ZTEiCisgICAgICIxcDRobDE3OTZpYjI2eWt5ZjVzbmw2 Y2owbHgwdjdtamgweHFoanc2cWRoNzUzbnNqeWhiIikKKyAgICAoImNvcmVmeCIgICAgICAgICAg ICAgICAgICAgICAgIjlhZDUzZDY3NGUzMTMyN2FiY2M2MGYzNWMxNDM4NzcwMGY1MGNjNjgiCisg ICAgICIwYXA0ZzJmajh3c2FyNHh2YmM2ZGtkMmw2N3FhbHhsY3c1bGFwbHEzYW41bnZqMmxkNjV3 IgorICAgICAjOnBhdGNoZXMgKCJjb3JlZngtbW9uby01LjQuMC1wYXRjaGVzLnBhdGNoIikpCisg ICAgKCJjb3JlcnQiICAgICAgICAgICAgICAgICAgICAgICI0OGRiYTczODAxZTgwNGU4OWYwMDMx MWRhOTlkODczZjljNTUwMjc4IgorICAgICAiMXp3NDdqZjRjd3FtYWl4eWxpc3hpNzN4ZjZjYXA0 MWJ3Zjl2bG1weGFuenhhcWtsenN2ayIpCisgICAgKCJpa2Rhc20iICAgICAgICAgICAgICAgICAg ICAgICIxZDdkNDM2MDM3OTFlMDIzNmI1NmQwNzY1Nzg2NTdiZWU0NGZlZjZiIgorICAgICAiMWt3 OHlra2FkNTVxaGFwZzZqYnZxaW03dmFpbnFscHo4NDY5ZmxtMDgzbHB6N3BrczNzZyIpCisgICAg KCgiaWt2bS1mb3JrIiAiaWt2bSIpICAgICAgICAgICI4NDdlMDVmY2VkNWM5YTQxZmYwZjI0ZjFm OWQ0MGQ1YThhNTc3MmMxIgorICAgICAiMWZsOWJtM2xtemY4aXF2M3g0aXFrejlmYzU0bXdkdnJ4 aXN4ZzJudnd3Y3NpNHNhZmZwaSIpCisgICAgKCJsaW5rZXIiICAgICAgICAgICAgICAgICAgICAg ICI5OTM1NGJmNWMxM2I4MDU1MjA5Y2IwODJjZGRjNTBjODA0N2FiMDg4IgorICAgICAiMDV6bGFq bnFmODN4ZnZuMndoaDlucWw2ajg1c3ExMmF3MjZzcW15cXo3emNwbWwxNzFtaiIpCisgICAgKCJO ZXd0b25zb2Z0Lkpzb24iICAgICAgICAgICAgICI0NzFjM2UwODAzYTlmNDBhMGFjYzhhZWNlYjMx ZGU2ZmY5M2E1MmM0IgorICAgICAiMGRnbmdkNWhxazZ5aGxnNDBrYWJuNnFkbmtubTMyemN4OXE2 Ym0ydzMxY3Nuc2s1OTc4cyIpCisgICAgKCgiTnVHZXQuQnVpbGRUYXNrcyIgIm51Z2V0LWJ1aWxk dGFza3MiKQorICAgICAiYjU4YmE0MjgyMzc3YmNlZmQ0OGFiZGMyZDYyY2U2MzMwZTA3OWFiZSIK KyAgICAgIjFzYXkwM2ZucWtqc3g5N3phY2FueTNzYTVqNG1oZms4Mjdoa3dwMjNpYjAycTE4Zjds dnAiKQorICAgICgoIk5Vbml0TGl0ZSIgIm51bml0LWxpdGUiKSAgICAiNjkwNjAzYmVhOThhYWU2 OWZjYTlhNjUxMzBkODg1OTFiYzZjYWJlZSIKKyAgICAgIjFmODQ1eXNqenMzeWQ5Z2N5d3c2NmRu a3g0ODR6NWZrbmI4bDB4ejc0c2pteGsybW5nd2MiKQorICAgIDs7ICgicm9zbHluLWJpbmFyaWVz IiAgICAgICAgICAiMTkwNGM3ZDA2ODJhODc4ZTJkMjViNGQ0OWYzNDc1ZDEyZmJiOWNjNiIKKyAg ICA7OyAgIiIpCisgICAgKCJyeCIgICAgICAgICAgICAgICAgICAgICAgICAgICJiMjlhNGIwZmRh NjA5ZTBhZjMzZmY1NGVkMTM2NTJiNmNjZjBlMDVlIgorICAgICAiMW4xandobXNia2N2MmQ4MDZp bW1jcHprYjcycnowNHh5OThteXczNTVhOHc1YWgyNXlpdiIpCisgICAgOzsgKCJ4dW5pdC1iaW5h cmllcyIgICAgICAgICAgICJkNDQzM2IwOTcyZjQwY2IzZWZhYTNmYmJhNTI4NjliZGU1ZGY4ZmE4 IgorICAgIDs7ICAiIikKKyAgICApKQorCisoZGVmaW5lLXB1YmxpYyBtb25vLTUuNC4wCisgIChw YWNrYWdlCisgICAgKGluaGVyaXQgbW9uby01LjIuMCkKKyAgICAodmVyc2lvbiAiNS40LjAuMjEy IikKKyAgICAobmFtZSAibW9ubyIpCisgICAgKHNvdXJjZSAob3JpZ2luCisgICAgICAgICAgICAg IChtZXRob2QgZ2l0LWZldGNoKQorICAgICAgICAgICAgICAodXJpCisgICAgICAgICAgICAgICAo Z2l0LXJlZmVyZW5jZQorICAgICAgICAgICAgICAgICh1cmwgImh0dHBzOi8vZ2l0bGFiLndpbmVo cS5vcmcvbW9uby9tb25vLmdpdCIpCisgICAgICAgICAgICAgICAgKGNvbW1pdAorICAgICAgICAg ICAgICAgICA7OyA1LjQuMC4xMzUgYW5kIGJlZm9yZSBoYXZlIGEgYnVnIHRoYXQgbWFrZXMgbW9u byBub3QKKyAgICAgICAgICAgICAgICAgOzsgc2VsZi1ob3N0aW5nIChmYWlscyB0byBjb21waWxl IHNlbGYsIGV4YW1wbGUgZXJyb3I6CisgICAgICAgICAgICAgICAgIDs7IFN5c3RlbS5EYXRhLlNx bENsaWVudC9TcWxUcmFuc2FjdGlvbi5jcygzOSwyMik6IGVycm9yCisgICAgICAgICAgICAgICAg IDs7IENTMDczODogYFN5c3RlbS5EYXRhLlNxbENsaWVudC5TcWxUcmFuc2FjdGlvbicgZG9lcyBu b3QKKyAgICAgICAgICAgICAgICAgOzsgaW1wbGVtZW50IGludGVyZmFjZSBtZW1iZXIKKyAgICAg ICAgICAgICAgICAgOzsgYFN5c3RlbS5EYXRhLklEYlRyYW5zYWN0aW9uLkNvbm5lY3Rpb24uZ2V0 JyBhbmQgdGhlIGJlc3QKKyAgICAgICAgICAgICAgICAgOzsgaW1wbGVtZW50aW5nIGNhbmRpZGF0 ZQorICAgICAgICAgICAgICAgICA7OyBgU3lzdGVtLkRhdGEuU3FsQ2xpZW50LlNxbFRyYW5zYWN0 aW9uLkNvbm5lY3Rpb24uZ2V0JworICAgICAgICAgICAgICAgICA7OyByZXR1cm4gdHlwZSBgU3lz dGVtLkRhdGEuU3FsQ2xpZW50LlNxbENvbm5lY3Rpb24nIGRvZXMgbm90CisgICAgICAgICAgICAg ICAgIDs7IG1hdGNoIGludGVyZmFjZSBtZW1iZXIgcmV0dXJuIHR5cGUKKyAgICAgICAgICAgICAg ICAgOzsgYFN5c3RlbS5EYXRhLklEYkNvbm5lY3Rpb24nCisKKyAgICAgICAgICAgICAgICAgOzsg Tm90ZTogaW4gYWJvdmUgZXhhbXBsZSwgU3FsQ29ubmVjdGlvbiBpbXBsZW1lbnRzCisgICAgICAg ICAgICAgICAgIDs7IElEYkNvbm5lY3Rpb24uICBNeSB1bmRlcnN0YW5kaW5nIGlzIHRoYXQgZm9y IHRoaXMgdG8KKyAgICAgICAgICAgICAgICAgOzsgY29tcGlsZSBwcm9wZXJseSwgd2UgbmVlZCBj b3ZhcmlhbnQgcmV0dXJuIHR5cGVzLCB3aGljaCBpcworICAgICAgICAgICAgICAgICA7OyBhIEMj IDkuMCBmZWF0dXJlLCBidXQgc29tZWhvdyB0aGUgc2FtZSBjb2RlIGhhcyBiZWVuCisgICAgICAg ICAgICAgICAgIDs7IGNvbXBpbGVkIGp1c3QgZmluZSBieSBwcmV2aW91cyB2ZXJzaW9ucyBvZiBt b25vLCBhbmQgaXMKKyAgICAgICAgICAgICAgICAgOzsgY29tcGlsZWQgZmluZSBieSB0aGlzIHZl cnNpb24sIGJ1dCBub3Qgc3BlY2lmaWMgNS40LjAuWFhYCisgICAgICAgICAgICAgICAgIDs7IHZl cnNpb25zLgorICAgICAgICAgICAgICAgICAibW9uby01LjQuMC4yMTIiKSkpCisgICAgICAgICAg ICAgIChmaWxlLW5hbWUgKGdpdC1maWxlLW5hbWUgbmFtZSB2ZXJzaW9uKSkKKyAgICAgICAgICAg ICAgKHNoYTI1NgorICAgICAgICAgICAgICAgKGJhc2UzMgorICAgICAgICAgICAgICAgICIwZ3gz Znh6MXdscTVma2o3aXBodjMydmc5bTc4aWE3NG05cGduOXJhYjRmeXEyazlhbjJ5IikpCisgICAg ICAgICAgICAgIChtb2R1bGVzICcoKGd1aXggYnVpbGQgdXRpbHMpCisgICAgICAgICAgICAgICAg ICAgICAgICAgKGljZS05IHN0cmluZy1mdW4pKSkKKyAgICAgICAgICAgICAgKHNuaXBwZXQgI34o YmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICMkKGFkZC1leHRlcm5hbC1yZXBvcwor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9uby01LjQuMC1leHRlcm5hbC1yZXBvLXNw ZWNzKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIyRAcHJlcGFyZS1tb25vLXNvdXJjZS0w KSkKKyAgICAgICAgICAgICAgKHBhdGNoZXMKKyAgICAgICAgICAgICAgIChzZWFyY2gtcGF0Y2hl cworICAgICAgICAgICAgICAgICJtb25vLTUuNC4wLXBhdGNoZXMucGF0Y2giKSkpKQorICAgIChu YXRpdmUtaW5wdXRzIChtb2RpZnktaW5wdXRzIChwYWNrYWdlLW5hdGl2ZS1pbnB1dHMgbW9uby01 LjIuMCkKKyAgICAgICAgICAgICAgICAgICAgIChyZXBsYWNlICJtb25vIiBtb25vLTUuMi4wKSkp KSkKZGlmZiAtLWdpdCBhL2dudS9wYWNrYWdlcy9wYXRjaGVzL2NvcmVmeC1tb25vLTUuNC4wLXBh dGNoZXMucGF0Y2ggYi9nbnUvcGFja2FnZXMvcGF0Y2hlcy9jb3JlZngtbW9uby01LjQuMC1wYXRj aGVzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4wMzRkNzY5 ZWJjZQotLS0gL2Rldi9udWxsCisrKyBiL2dudS9wYWNrYWdlcy9wYXRjaGVzL2NvcmVmeC1tb25v LTUuNC4wLXBhdGNoZXMucGF0Y2gKQEAgLTAsMCArMSw5MTUgQEAKK2RpZmYgLS1naXQgYS9zcmMv TWljcm9zb2Z0LkNTaGFycC9zcmMvTWljcm9zb2Z0L0NTaGFycC9SdW50aW1lQmluZGVyL0V4cHJl c3Npb25UcmVlQ2FsbFJld3JpdGVyLmNzIGIvc3JjL01pY3Jvc29mdC5DU2hhcnAvc3JjL01pY3Jv c29mdC9DU2hhcnAvUnVudGltZUJpbmRlci9FeHByZXNzaW9uVHJlZUNhbGxSZXdyaXRlci5jcwor aW5kZXggYWE4YWZhNWExYi4uM2EyNTE4MjQ2YSAxMDA2NDQKKy0tLSBhL3NyYy9NaWNyb3NvZnQu Q1NoYXJwL3NyYy9NaWNyb3NvZnQvQ1NoYXJwL1J1bnRpbWVCaW5kZXIvRXhwcmVzc2lvblRyZWVD YWxsUmV3cml0ZXIuY3MKKysrKyBiL3NyYy9NaWNyb3NvZnQuQ1NoYXJwL3NyYy9NaWNyb3NvZnQv Q1NoYXJwL1J1bnRpbWVCaW5kZXIvRXhwcmVzc2lvblRyZWVDYWxsUmV3cml0ZXIuY3MKK0BAIC0y NDYsOCArMjQ2LDkgQEAgbmFtZXNwYWNlIE1pY3Jvc29mdC5DU2hhcnAuUnVudGltZUJpbmRlcgor ICAgICAgICAgICAgIEV4cHJBcnJheUluaXQgYXJyaW5pdDsKKyAKKyAgICAgICAgICAgICBFeHBy TGlzdCBsaXN0ID0gKEV4cHJMaXN0KXBFeHByLk9wdGlvbmFsQXJndW1lbnRzOworLSAgICAgICAg ICAgIGlmIChsaXN0Lk9wdGlvbmFsTmV4dExpc3ROb2RlIGlzIEV4cHJMaXN0IG5leHQpCisrICAg ICAgICAgICAgaWYgKGxpc3QuT3B0aW9uYWxOZXh0TGlzdE5vZGUgaXMgRXhwckxpc3QpCisgICAg ICAgICAgICAgeworKyAgICAgICAgICAgICAgICBFeHByTGlzdCBuZXh0ID0gKEV4cHJMaXN0KWxp c3QuT3B0aW9uYWxOZXh0TGlzdE5vZGU7CisgICAgICAgICAgICAgICAgIG1ldGhpbmZvID0gKEV4 cHJNZXRob2RJbmZvKW5leHQuT3B0aW9uYWxFbGVtZW50OworICAgICAgICAgICAgICAgICBhcnJp bml0ID0gKEV4cHJBcnJheUluaXQpbmV4dC5PcHRpb25hbE5leHRMaXN0Tm9kZTsKKyAgICAgICAg ICAgICB9CitAQCAtMzgyLDggKzM4Myw5IEBAIG5hbWVzcGFjZSBNaWNyb3NvZnQuQ1NoYXJwLlJ1 bnRpbWVCaW5kZXIKKyAgICAgICAgICAgICBFeHByIG5leHROb2RlID0gbGlzdC5PcHRpb25hbE5l eHRMaXN0Tm9kZTsKKyAgICAgICAgICAgICBFeHByUHJvcGVydHlJbmZvIHByb3BpbmZvOworICAg ICAgICAgICAgIEV4cHJBcnJheUluaXQgYXJndW1lbnRzOworLSAgICAgICAgICAgIGlmIChuZXh0 Tm9kZSBpcyBFeHByTGlzdCBuZXh0TGlzdCkKKysgICAgICAgICAgICBpZiAobmV4dE5vZGUgaXMg RXhwckxpc3QpCisgICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICBFeHByTGlzdCBuZXh0 TGlzdCA9IChFeHByTGlzdClsaXN0Lk9wdGlvbmFsTmV4dExpc3ROb2RlOworICAgICAgICAgICAg ICAgICBwcm9waW5mbyA9IG5leHRMaXN0Lk9wdGlvbmFsRWxlbWVudCBhcyBFeHByUHJvcGVydHlJ bmZvOworICAgICAgICAgICAgICAgICBhcmd1bWVudHMgPSBuZXh0TGlzdC5PcHRpb25hbE5leHRM aXN0Tm9kZSBhcyBFeHByQXJyYXlJbml0OworICAgICAgICAgICAgIH0KK0BAIC01NTMsOCArNTU1 LDkgQEAgbmFtZXNwYWNlIE1pY3Jvc29mdC5DU2hhcnAuUnVudGltZUJpbmRlcgorICAgICAgICAg ICAgIGxpc3QgPSAoRXhwckxpc3QpbGlzdC5PcHRpb25hbE5leHRMaXN0Tm9kZTsKKyAgICAgICAg ICAgICBNZXRob2RJbmZvIG1ldGhvZEluZm87CisgICAgICAgICAgICAgYm9vbCBiSXNMaWZ0ZWQg PSBmYWxzZTsKKy0gICAgICAgICAgICBpZiAobGlzdC5PcHRpb25hbE5leHRMaXN0Tm9kZSBpcyBF eHByTGlzdCBuZXh0KQorKyAgICAgICAgICAgIGlmIChsaXN0Lk9wdGlvbmFsTmV4dExpc3ROb2Rl IGlzIEV4cHJMaXN0KQorICAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgRXhwckxpc3Qg bmV4dCA9IChFeHByTGlzdClsaXN0Lk9wdGlvbmFsTmV4dExpc3ROb2RlOworICAgICAgICAgICAg ICAgICBFeHByQ29uc3RhbnQgaXNMaWZ0ZWQgPSAoRXhwckNvbnN0YW50KW5leHQuT3B0aW9uYWxF bGVtZW50OworICAgICAgICAgICAgICAgICBEZWJ1Zy5Bc3NlcnQoaXNMaWZ0ZWQgIT0gbnVsbCk7 CisgICAgICAgICAgICAgICAgIGJJc0xpZnRlZCA9IGlzTGlmdGVkLlZhbC5JbnQzMlZhbCA9PSAx OworQEAgLTY3Nyw4ICs2ODAsOSBAQCBuYW1lc3BhY2UgTWljcm9zb2Z0LkNTaGFycC5SdW50aW1l QmluZGVyCisgCisgICAgICAgICBwcml2YXRlIEV4cHJlc3Npb24gR2V0RXhwcmVzc2lvbihFeHBy IHBFeHByKQorICAgICAgICAgeworLSAgICAgICAgICAgIGlmIChwRXhwciBpcyBFeHByV3JhcCB3 cmFwKQorKyAgICAgICAgICAgIGlmIChwRXhwciBpcyBFeHByV3JhcCkKKyAgICAgICAgICAgICB7 CisrICAgICAgICAgICAgICAgIEV4cHJXcmFwIHdyYXAgPSAoRXhwcldyYXApIHBFeHByOworICAg ICAgICAgICAgICAgICByZXR1cm4gX0RpY3Rpb25hcnlPZlBhcmFtZXRlcnNbKEV4cHJDYWxsKXdy YXAuT3B0aW9uYWxFeHByZXNzaW9uXTsKKyAgICAgICAgICAgICB9CisgICAgICAgICAgICAgZWxz ZSBpZiAocEV4cHIgaXMgRXhwckNvbnN0YW50KQorQEAgLTg3NSwyMCArODc5LDI0IEBAIG5hbWVz cGFjZSBNaWNyb3NvZnQuQ1NoYXJwLlJ1bnRpbWVCaW5kZXIKKyAgICAgICAgIHsKKyAgICAgICAg ICAgICBmb3IgKDs7KQorICAgICAgICAgICAgIHsKKy0gICAgICAgICAgICAgICAgaWYgKHBFeHBy IGlzIEV4cHJDYXN0IGNhc3QpCisrICAgICAgICAgICAgICAgIGlmIChwRXhwciBpcyBFeHByQ2Fz dCkKKyAgICAgICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICAgICAgRXhwckNhc3QgY2Fz dCA9IChFeHByQ2FzdCkgcEV4cHI7CisgICAgICAgICAgICAgICAgICAgICBwRXhwciA9IGNhc3Qu QXJndW1lbnQ7CisgICAgICAgICAgICAgICAgIH0KKy0gICAgICAgICAgICAgICAgZWxzZSBpZiAo cEV4cHIgaXMgRXhwclR5cGVPZiB0eXBlT2YpCisrICAgICAgICAgICAgICAgIGVsc2UgaWYgKHBF eHByIGlzIEV4cHJUeXBlT2YpCisgICAgICAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAg ICAgIEV4cHJUeXBlT2YgdHlwZU9mID0gKEV4cHJUeXBlT2YpIHBFeHByOworICAgICAgICAgICAg ICAgICAgICAgcmV0dXJuIHR5cGVPZi5Tb3VyY2VUeXBlLlR5cGUuQXNzb2NpYXRlZFN5c3RlbVR5 cGU7CisgICAgICAgICAgICAgICAgIH0KKy0gICAgICAgICAgICAgICAgZWxzZSBpZiAocEV4cHIg aXMgRXhwck1ldGhvZEluZm8gbWV0aG9kSW5mbykKKysgICAgICAgICAgICAgICAgZWxzZSBpZiAo cEV4cHIgaXMgRXhwck1ldGhvZEluZm8pCisgICAgICAgICAgICAgICAgIHsKKysgICAgICAgICAg ICAgICAgICAgIEV4cHJNZXRob2RJbmZvIG1ldGhvZEluZm8gPSAoRXhwck1ldGhvZEluZm8pIHBF eHByOworICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdldE1ldGhvZEluZm9Gcm9tRXhwciht ZXRob2RJbmZvKTsKKyAgICAgICAgICAgICAgICAgfQorLSAgICAgICAgICAgICAgICBlbHNlIGlm IChwRXhwciBpcyBFeHByQ29uc3RhbnQgY29uc3RhbnQpCisrICAgICAgICAgICAgICAgIGVsc2Ug aWYgKHBFeHByIGlzIEV4cHJDb25zdGFudCkKKyAgICAgICAgICAgICAgICAgeworKyAgICAgICAg ICAgICAgICAgICAgRXhwckNvbnN0YW50IGNvbnN0YW50ID0gKEV4cHJDb25zdGFudCkgcEV4cHI7 CisgICAgICAgICAgICAgICAgICAgICBDb25zdFZhbCB2YWwgPSBjb25zdGFudC5WYWw7CisgICAg ICAgICAgICAgICAgICAgICBDVHlwZSB1bmRlcmx5aW5nVHlwZSA9IHBFeHByLlR5cGU7CisgICAg ICAgICAgICAgICAgICAgICBvYmplY3Qgb2JqdmFsOworQEAgLTk1NCw4ICs5NjIsOSBAQCBuYW1l c3BhY2UgTWljcm9zb2Z0LkNTaGFycC5SdW50aW1lQmluZGVyCisgCisgICAgICAgICAgICAgICAg ICAgICByZXR1cm4gcEV4cHIuVHlwZS5pc0VudW1UeXBlKCkgPyBFbnVtLlRvT2JqZWN0KHBFeHBy LlR5cGUuQXNzb2NpYXRlZFN5c3RlbVR5cGUsIG9ianZhbCkgOiBvYmp2YWw7CisgICAgICAgICAg ICAgICAgIH0KKy0gICAgICAgICAgICAgICAgZWxzZSBpZiAocEV4cHIgaXMgRXhwclplcm9Jbml0 IHplcm9Jbml0KQorKyAgICAgICAgICAgICAgICBlbHNlIGlmIChwRXhwciBpcyBFeHByWmVyb0lu aXQpCisgICAgICAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgICAgIEV4cHJaZXJvSW5p dCB6ZXJvSW5pdCA9IChFeHByWmVyb0luaXQpIHBFeHByOworICAgICAgICAgICAgICAgICAgICAg aWYgKChwRXhwciA9IHplcm9Jbml0Lk9wdGlvbmFsQXJndW1lbnQpID09IG51bGwpCisgICAgICAg ICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEFjdGl2YXRv ci5DcmVhdGVJbnN0YW5jZSh6ZXJvSW5pdC5UeXBlLkFzc29jaWF0ZWRTeXN0ZW1UeXBlKTsKK0BA IC05ODEsOCArOTkwLDkgQEAgbmFtZXNwYWNlIE1pY3Jvc29mdC5DU2hhcnAuUnVudGltZUJpbmRl cgorICAgICAgICAgICAgICAgICBFeHByIHAgPSBsaXN0OworICAgICAgICAgICAgICAgICB3aGls ZSAobGlzdCAhPSBudWxsKQorICAgICAgICAgICAgICAgICB7CistICAgICAgICAgICAgICAgICAg ICBpZiAobGlzdCBpcyBFeHByTGlzdCBwTGlzdCkKKysgICAgICAgICAgICAgICAgICAgIGlmIChs aXN0IGlzIEV4cHJMaXN0KQorICAgICAgICAgICAgICAgICAgICAgeworKyAgICAgICAgICAgICAg ICAgICAgICAgIEV4cHJMaXN0IHBMaXN0ID0gKEV4cHJMaXN0KSBsaXN0OworICAgICAgICAgICAg ICAgICAgICAgICAgIHAgPSBwTGlzdC5PcHRpb25hbEVsZW1lbnQ7CisgICAgICAgICAgICAgICAg ICAgICAgICAgbGlzdCA9IHBMaXN0Lk9wdGlvbmFsTmV4dExpc3ROb2RlOworICAgICAgICAgICAg ICAgICAgICAgfQorZGlmZiAtLWdpdCBhL3NyYy9NaWNyb3NvZnQuQ1NoYXJwL3NyYy9NaWNyb3Nv ZnQvQ1NoYXJwL1J1bnRpbWVCaW5kZXIvUnVudGltZUJpbmRlci5jcyBiL3NyYy9NaWNyb3NvZnQu Q1NoYXJwL3NyYy9NaWNyb3NvZnQvQ1NoYXJwL1J1bnRpbWVCaW5kZXIvUnVudGltZUJpbmRlci5j cworaW5kZXggNmRjODg4YzZlZi4uODlmODgxZjY2OCAxMDA2NDQKKy0tLSBhL3NyYy9NaWNyb3Nv ZnQuQ1NoYXJwL3NyYy9NaWNyb3NvZnQvQ1NoYXJwL1J1bnRpbWVCaW5kZXIvUnVudGltZUJpbmRl ci5jcworKysrIGIvc3JjL01pY3Jvc29mdC5DU2hhcnAvc3JjL01pY3Jvc29mdC9DU2hhcnAvUnVu dGltZUJpbmRlci9SdW50aW1lQmluZGVyLmNzCitAQCAtMTk1LDcgKzE5NSw4IEBAIG5hbWVzcGFj ZSBNaWNyb3NvZnQuQ1NoYXJwLlJ1bnRpbWVCaW5kZXIKKyAgICAgICAgICAgICBMb2NhbFZhcmlh YmxlU3ltYm9sW10gbG9jYWxzID0gUG9wdWxhdGVMb2NhbFNjb3BlKHBheWxvYWQsIHBTY29wZSwg YXJndW1lbnRzLCBwYXJhbWV0ZXJzKTsKKyAKKyAgICAgICAgICAgICAvLyAoMS41KSAtIENoZWNr IHRvIHNlZSBpZiB3ZSBuZWVkIHRvIGRlZmVyLgorLSAgICAgICAgICAgIGlmIChEZWZlckJpbmRp bmcocGF5bG9hZCwgYXJndW1lbnRzLCBhcmdzLCBsb2NhbHMsIG91dCBEeW5hbWljTWV0YU9iamVj dCBvKSkKKysgICAgICAgICAgICBEeW5hbWljTWV0YU9iamVjdCBvOworKyAgICAgICAgICAgIGlm IChEZWZlckJpbmRpbmcocGF5bG9hZCwgYXJndW1lbnRzLCBhcmdzLCBsb2NhbHMsIG91dCBvKSkK KyAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIGRlZmVycmVkQmluZGluZyA9IG87Cisg ICAgICAgICAgICAgICAgIHJldHVybiBudWxsOworQEAgLTEwNTMsOCArMTA1NCw5IEBAIG5hbWVz cGFjZSBNaWNyb3NvZnQuQ1NoYXJwLlJ1bnRpbWVCaW5kZXIKKyAKKyAgICAgICAgIHByaXZhdGUg c3RhdGljIHZvaWQgQ2hlY2tGb3JDb25kaXRpb25hbE1ldGhvZEVycm9yKEV4cHIgcEV4cHIpCisg ICAgICAgICB7CistICAgICAgICAgICAgaWYgKHBFeHByIGlzIEV4cHJDYWxsIGNhbGwpCisrICAg ICAgICAgICAgaWYgKHBFeHByIGlzIEV4cHJDYWxsKQorICAgICAgICAgICAgIHsKKysgICAgICAg ICAgICAgICAgRXhwckNhbGwgY2FsbCA9IChFeHByQ2FsbClwRXhwcjsKKyAgICAgICAgICAgICAg ICAgLy8gVGhpcyBtaW1pY3MgdGhlIGJlaGF2aW9yIG9mIHRoZSBuYXRpdmUgQ29tcGlsZXJTeW1i b2xMb2FkZXIgaW4gR2V0Q29uZGl0aW9uYWxTeW1ib2xzLiBPdmVycmlkZQorICAgICAgICAgICAg ICAgICAvLyBtZXRob2RzIGNhbm5vdCBoYXZlIHRoZSBjb25kaXRpb25hbCBhdHRyaWJ1dGUsIGJ1 dCBpbXBsaWNpdGx5IGFjcXVpcmUgaXQgZnJvbSB0aGVpciBzbG90LgorIAorQEAgLTEwODcsOCAr MTA4OSw5IEBAIG5hbWVzcGFjZSBNaWNyb3NvZnQuQ1NoYXJwLlJ1bnRpbWVCaW5kZXIKKyAgICAg ICAgICAgICBFeHByTWVtYmVyR3JvdXAgbWVtZ3JvdXA7CisgICAgICAgICAgICAgVHlwZUFycmF5 IHR5cGVBcmdzOworIAorLSAgICAgICAgICAgIGlmIChwUmVzdWx0IGlzIEV4cHJDYWxsIGNhbGwp CisrICAgICAgICAgICAgaWYgKHBSZXN1bHQgaXMgRXhwckNhbGwpCisgICAgICAgICAgICAgewor KyAgICAgICAgICAgICAgICBFeHByQ2FsbCBjYWxsID0gKEV4cHJDYWxsKSBwUmVzdWx0OworICAg ICAgICAgICAgICAgICB0eXBlID0gY2FsbC5NZXRoV2l0aEluc3QuQXRzOworICAgICAgICAgICAg ICAgICBtZXRocHJvcCA9IGNhbGwuTWV0aFdpdGhJbnN0Lk1ldGgoKTsKKyAgICAgICAgICAgICAg ICAgbWVtZ3JvdXAgPSBjYWxsLk1lbWJlckdyb3VwOworQEAgLTExNTUsMTIgKzExNTgsMTUgQEAg bmFtZXNwYWNlIE1pY3Jvc29mdC5DU2hhcnAuUnVudGltZUJpbmRlcgorIAorICAgICAgICAgcHJp dmF0ZSBFeHByIFN0cmlwTmFtZWRBcmd1bWVudChFeHByIHBBcmcpCisgICAgICAgICB7CistICAg ICAgICAgICAgaWYgKHBBcmcgaXMgRXhwck5hbWVkQXJndW1lbnRTcGVjaWZpY2F0aW9uIG5hbWVk KQorKyAgICAgICAgICAgIGlmIChwQXJnIGlzIEV4cHJOYW1lZEFyZ3VtZW50U3BlY2lmaWNhdGlv bikKKyAgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgIEV4cHJOYW1lZEFyZ3VtZW50U3Bl Y2lmaWNhdGlvbiBuYW1lZCA9CisrICAgICAgICAgICAgICAgICAgICAoRXhwck5hbWVkQXJndW1l bnRTcGVjaWZpY2F0aW9uKSBwQXJnOworICAgICAgICAgICAgICAgICBwQXJnID0gbmFtZWQuVmFs dWU7CisgICAgICAgICAgICAgfQorLSAgICAgICAgICAgIGVsc2UgaWYgKHBBcmcgaXMgRXhwckFy cmF5SW5pdCBpbml0KQorKyAgICAgICAgICAgIGVsc2UgaWYgKHBBcmcgaXMgRXhwckFycmF5SW5p dCkKKyAgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgIEV4cHJBcnJheUluaXQgaW5pdCA9 IChFeHByQXJyYXlJbml0KSBwQXJnOworICAgICAgICAgICAgICAgICBpbml0Lk9wdGlvbmFsQXJn dW1lbnRzID0gU3RyaXBOYW1lZEFyZ3VtZW50cyhpbml0Lk9wdGlvbmFsQXJndW1lbnRzKTsKKyAg ICAgICAgICAgICB9CisgCitAQCAtMTE2OSwxNCArMTE3NSwxNiBAQCBuYW1lc3BhY2UgTWljcm9z b2Z0LkNTaGFycC5SdW50aW1lQmluZGVyCisgCisgICAgICAgICBwcml2YXRlIEV4cHIgU3RyaXBO YW1lZEFyZ3VtZW50cyhFeHByIHBBcmcpCisgICAgICAgICB7CistICAgICAgICAgICAgaWYgKHBB cmcgaXMgRXhwckxpc3QgbGlzdCkKKysgICAgICAgICAgICBpZiAocEFyZyBpcyBFeHByTGlzdCkK KyAgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgIEV4cHJMaXN0IGxpc3QgPSAoRXhwckxp c3QpIHBBcmc7CisgICAgICAgICAgICAgICAgIGZvcig7OykKKyAgICAgICAgICAgICAgICAgewor ICAgICAgICAgICAgICAgICAgICAgbGlzdC5PcHRpb25hbEVsZW1lbnQgPSBTdHJpcE5hbWVkQXJn dW1lbnQobGlzdC5PcHRpb25hbEVsZW1lbnQpOworIAorLSAgICAgICAgICAgICAgICAgICAgaWYg KGxpc3QuT3B0aW9uYWxOZXh0TGlzdE5vZGUgaXMgRXhwckxpc3QgbmV4dCkKKysgICAgICAgICAg ICAgICAgICAgIGlmIChsaXN0Lk9wdGlvbmFsTmV4dExpc3ROb2RlIGlzIEV4cHJMaXN0KQorICAg ICAgICAgICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICAgICAgICAgIEV4cHJMaXN0IG5l eHQgPSAoRXhwckxpc3QpbGlzdC5PcHRpb25hbE5leHRMaXN0Tm9kZTsKKyAgICAgICAgICAgICAg ICAgICAgICAgICBsaXN0ID0gbmV4dDsKKyAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg ICAgICAgICAgICAgIGVsc2UKK2RpZmYgLS1naXQgYS9zcmMvTWljcm9zb2Z0LkNTaGFycC9zcmMv TWljcm9zb2Z0L0NTaGFycC9SdW50aW1lQmluZGVyL1NlbWFudGljcy9CaW5kaW5nL0JldHRlci5j cyBiL3NyYy9NaWNyb3NvZnQuQ1NoYXJwL3NyYy9NaWNyb3NvZnQvQ1NoYXJwL1J1bnRpbWVCaW5k ZXIvU2VtYW50aWNzL0JpbmRpbmcvQmV0dGVyLmNzCitpbmRleCBjZWJmY2Q5NGUxLi4xNzlhYzIx NjIwIDEwMDY0NAorLS0tIGEvc3JjL01pY3Jvc29mdC5DU2hhcnAvc3JjL01pY3Jvc29mdC9DU2hh cnAvUnVudGltZUJpbmRlci9TZW1hbnRpY3MvQmluZGluZy9CZXR0ZXIuY3MKKysrKyBiL3NyYy9N aWNyb3NvZnQuQ1NoYXJwL3NyYy9NaWNyb3NvZnQvQ1NoYXJwL1J1bnRpbWVCaW5kZXIvU2VtYW50 aWNzL0JpbmRpbmcvQmV0dGVyLmNzCitAQCAtMTU3LDggKzE1Nyw5IEBAIG5hbWVzcGFjZSBNaWNy b3NvZnQuQ1NoYXJwLlJ1bnRpbWVCaW5kZXIuU2VtYW50aWNzCisgICAgICAgICAgICAgLy8gV2Ug dGhlbiBnbyBvdmVyIHRoZSBzcGVjaWZpZWQgYXJndW1lbnRzIGFuZCBwdXQgdGhlIHR5cGUgZm9y IGFueSBuYW1lZCBhcmd1bWVudCBpbiB0aGUgcmlnaHQgcG9zaXRpb24gaW4gdGhlIGFycmF5Lgor ICAgICAgICAgICAgIGZvciAoaW50IGlQYXJhbSA9IDA7IGlQYXJhbSA8IGFyZ3MuY2FyZzsgaVBh cmFtKyspCisgICAgICAgICAgICAgeworLSAgICAgICAgICAgICAgICBpZiAocHJnZXhwcltpUGFy YW1dIGlzIEV4cHJOYW1lZEFyZ3VtZW50U3BlY2lmaWNhdGlvbiBuYW1lZCkKKysgICAgICAgICAg ICAgICAgaWYgKHByZ2V4cHJbaVBhcmFtXSBpcyBFeHByTmFtZWRBcmd1bWVudFNwZWNpZmljYXRp b24pCisgICAgICAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgICAgIEV4cHJOYW1lZEFy Z3VtZW50U3BlY2lmaWNhdGlvbiBuYW1lZCA9IChFeHByTmFtZWRBcmd1bWVudFNwZWNpZmljYXRp b24pcHJnZXhwcltpUGFyYW1dOworICAgICAgICAgICAgICAgICAgICAgLy8gV2UgZmluZCB0aGUg aW5kZXggb2YgdGhlIHR5cGUgb2YgdGhlIGFyZ3VtZW50IGluIHRoZSBtZXRob2QgcGFyYW1ldGVy IGxpc3QgYW5kIHN0b3JlIHRoYXQgaW4gYSB0ZW1wCisgICAgICAgICAgICAgICAgICAgICBpbnQg aW5kZXggPSBGaW5kTmFtZShtZXRoUHJvcC5QYXJhbWV0ZXJOYW1lcywgbmFtZWQuTmFtZSk7Cisg ICAgICAgICAgICAgICAgICAgICBDVHlwZSB0ZW1wVHlwZSA9IHB0YVtpbmRleF07CitkaWZmIC0t Z2l0IGEvc3JjL01pY3Jvc29mdC5DU2hhcnAvc3JjL01pY3Jvc29mdC9DU2hhcnAvUnVudGltZUJp bmRlci9TZW1hbnRpY3MvQmluZGluZy9FcnJvclJlcG9ydGluZy5jcyBiL3NyYy9NaWNyb3NvZnQu Q1NoYXJwL3NyYy9NaWNyb3NvZnQvQ1NoYXJwL1J1bnRpbWVCaW5kZXIvU2VtYW50aWNzL0JpbmRp bmcvRXJyb3JSZXBvcnRpbmcuY3MKK2luZGV4IGM0MDZhZjQzZGUuLjBlYTgxZWYyMWMgMTAwNjQ0 CistLS0gYS9zcmMvTWljcm9zb2Z0LkNTaGFycC9zcmMvTWljcm9zb2Z0L0NTaGFycC9SdW50aW1l QmluZGVyL1NlbWFudGljcy9CaW5kaW5nL0Vycm9yUmVwb3J0aW5nLmNzCisrKysgYi9zcmMvTWlj cm9zb2Z0LkNTaGFycC9zcmMvTWljcm9zb2Z0L0NTaGFycC9SdW50aW1lQmluZGVyL1NlbWFudGlj cy9CaW5kaW5nL0Vycm9yUmVwb3J0aW5nLmNzCitAQCAtNzYsMjIgKzc2LDI1IEBAIG5hbWVzcGFj ZSBNaWNyb3NvZnQuQ1NoYXJwLlJ1bnRpbWVCaW5kZXIuU2VtYW50aWNzCisgICAgICAgICAgICAg eworICAgICAgICAgICAgICAgICBEZWJ1Zy5Bc3NlcnQoZXhwciAhPSBudWxsKTsKKyAKKy0gICAg ICAgICAgICAgICAgaWYgKGV4cHIgaXMgRXhwckxvY2FsIGxvY2FsICYmIGxvY2FsLklzT0spCisr ICAgICAgICAgICAgICAgIGlmIChleHByIGlzIEV4cHJMb2NhbCAmJiAoKEV4cHJMb2NhbClleHBy KS5Jc09LKQorICAgICAgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgICAgICBFeHByTG9j YWwgbG9jYWwgPSAoRXhwckxvY2FsKWV4cHI7CisgICAgICAgICAgICAgICAgICAgICBSZXBvcnRM b2NhbEVycm9yKGxvY2FsLkxvY2FsLCBraW5kLCBpc05lc3RlZCk7CisgICAgICAgICAgICAgICAg ICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgfQorIAorICAgICAgICAgICAgICAg ICBFeHByIHBPYmplY3QgPSBudWxsOworIAorLSAgICAgICAgICAgICAgICBpZiAoZXhwciBpcyBF eHByUHJvcGVydHkgcHJvcCkKKysgICAgICAgICAgICAgICAgaWYgKGV4cHIgaXMgRXhwclByb3Bl cnR5KQorICAgICAgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgICAgICBFeHByUHJvcGVy dHkgcHJvcCA9IChFeHByUHJvcGVydHkpZXhwcjsKKyAgICAgICAgICAgICAgICAgICAgIC8vIFdl J3ZlIGFscmVhZHkgcmVwb3J0ZWQgcmVhZC1vbmx5LXByb3BlcnR5IGVycm9ycy4KKyAgICAgICAg ICAgICAgICAgICAgIERlYnVnLkFzc2VydChwcm9wLk1ldGhXaXRoVHlwZVNldCAhPSBudWxsKTsK KyAgICAgICAgICAgICAgICAgICAgIHBPYmplY3QgPSBwcm9wLk1lbWJlckdyb3VwLk9wdGlvbmFs T2JqZWN0OworICAgICAgICAgICAgICAgICB9CistICAgICAgICAgICAgICAgIGVsc2UgaWYgKGV4 cHIgaXMgRXhwckZpZWxkIGZpZWxkKQorKyAgICAgICAgICAgICAgICBlbHNlIGlmIChleHByIGlz IEV4cHJGaWVsZCkKKyAgICAgICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICAgICAgRXhw ckZpZWxkIGZpZWxkID0gKEV4cHJGaWVsZClleHByOworICAgICAgICAgICAgICAgICAgICAgaWYg KGZpZWxkLkZpZWxkV2l0aFR5cGUuRmllbGQoKS5pc1JlYWRPbmx5KQorICAgICAgICAgICAgICAg ICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgIFJlcG9ydFJlYWRPbmx5RXJyb3IoZmll bGQsIGtpbmQsIGlzTmVzdGVkKTsKK0BAIC0xMDUsOCArMTA4LDkgQEAgbmFtZXNwYWNlIE1pY3Jv c29mdC5DU2hhcnAuUnVudGltZUJpbmRlci5TZW1hbnRpY3MKKyAKKyAgICAgICAgICAgICAgICAg aWYgKHBPYmplY3QgIT0gbnVsbCAmJiBwT2JqZWN0LlR5cGUuaXNTdHJ1Y3RPckVudW0oKSkKKyAg ICAgICAgICAgICAgICAgeworLSAgICAgICAgICAgICAgICAgICAgaWYgKHBPYmplY3QgaXMgSUV4 cHJXaXRoQXJncyB3aXRoQXJncykKKysgICAgICAgICAgICAgICAgICAgIGlmIChwT2JqZWN0IGlz IElFeHByV2l0aEFyZ3MpCisgICAgICAgICAgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAg ICAgICAgICAgSUV4cHJXaXRoQXJncyB3aXRoQXJncyA9IChJRXhwcldpdGhBcmdzKXBPYmplY3Q7 CisgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYXNzaWduaW5nIHRvIFJIUyBvZiBtZXRob2Qg b3IgcHJvcGVydHkgZ2V0dGVyIHJldHVybmluZyBhIHZhbHVlLXR5cGUgb24gdGhlIHN0YWNrIG9y CisgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcGFzc2luZyBSSFMgb2YgbWV0aG9kIG9yIHBy b3BlcnR5IGdldHRlciByZXR1cm5pbmcgYSB2YWx1ZS10eXBlIG9uIHRoZSBzdGFjaywgYXMgcmVm IG9yIG91dAorICAgICAgICAgICAgICAgICAgICAgICAgIEVycm9yQ29udGV4dC5FcnJvcihFcnJv ckNvZGUuRVJSX1JldHVybk5vdExWYWx1ZSwgd2l0aEFyZ3MuR2V0U3ltV2l0aFR5cGUoKSk7Citk aWZmIC0tZ2l0IGEvc3JjL01pY3Jvc29mdC5DU2hhcnAvc3JjL01pY3Jvc29mdC9DU2hhcnAvUnVu dGltZUJpbmRlci9TZW1hbnRpY3MvQ29udmVyc2lvbi5jcyBiL3NyYy9NaWNyb3NvZnQuQ1NoYXJw L3NyYy9NaWNyb3NvZnQvQ1NoYXJwL1J1bnRpbWVCaW5kZXIvU2VtYW50aWNzL0NvbnZlcnNpb24u Y3MKK2luZGV4IGJiNjJhOTI2YjUuLjg3M2ZlZmY3MmYgMTAwNjQ0CistLS0gYS9zcmMvTWljcm9z b2Z0LkNTaGFycC9zcmMvTWljcm9zb2Z0L0NTaGFycC9SdW50aW1lQmluZGVyL1NlbWFudGljcy9D b252ZXJzaW9uLmNzCisrKysgYi9zcmMvTWljcm9zb2Z0LkNTaGFycC9zcmMvTWljcm9zb2Z0L0NT aGFycC9SdW50aW1lQmluZGVyL1NlbWFudGljcy9Db252ZXJzaW9uLmNzCitAQCAtMzkxLDkgKzM5 MSwxMCBAQCBuYW1lc3BhY2UgTWljcm9zb2Z0LkNTaGFycC5SdW50aW1lQmluZGVyLlNlbWFudGlj cworICAgICAgICAgICAgICAgICBGVU5EVFlQRSBmdFNyYyA9IGV4cHIuVHlwZS5mdW5kVHlwZSgp OworICAgICAgICAgICAgICAgICBGVU5EVFlQRSBmdERlc3QgPSBkZXN0LmZ1bmRUeXBlKCk7Cisg CistICAgICAgICAgICAgICAgIGlmIChleHByIGlzIEV4cHJDb25zdGFudCBjb25zdGFudCAmJiBj b25zdGFudC5Jc09LICYmCisrICAgICAgICAgICAgICAgIGlmIChleHByIGlzIEV4cHJDb25zdGFu dCAmJiAoKEV4cHJDb25zdGFudClleHByKS5Jc09LICYmCisgICAgICAgICAgICAgICAgICAgICBl eHByLlR5cGUuaXNTaW1wbGVUeXBlKCkgJiYgZGVzdC5pc1NpbXBsZVR5cGUoKSkKKyAgICAgICAg ICAgICAgICAgeworKyAgICAgICAgICAgICAgICAgICAgRXhwckNvbnN0YW50IGNvbnN0YW50ID0g KEV4cHJDb25zdGFudCkgZXhwcjsKKyAgICAgICAgICAgICAgICAgICAgIGlmICgoZnRTcmMgPT0g RlVORFRZUEUuRlRfSTQgJiYgKGZ0RGVzdCA8PSBGVU5EVFlQRS5GVF9MQVNUTk9OTE9ORyB8fCBm dERlc3QgPT0gRlVORFRZUEUuRlRfVTgpKSB8fAorICAgICAgICAgICAgICAgICAgICAgICAgIChm dFNyYyA9PSBGVU5EVFlQRS5GVF9JOCAmJiBmdERlc3QgPT0gRlVORFRZUEUuRlRfVTgpKQorICAg ICAgICAgICAgICAgICAgICAgeworQEAgLTQyMSw4ICs0MjIsOSBAQCBuYW1lc3BhY2UgTWljcm9z b2Z0LkNTaGFycC5SdW50aW1lQmluZGVyLlNlbWFudGljcworICAgICAgICAgICAgICAgICAgICAg RXJyb3JDb250ZXh0LkVycm9yKGRlc3QgaXMgVHlwZVBhcmFtZXRlclR5cGUgPyBFcnJvckNvZGUu RVJSX1R5cGVWYXJDYW50QmVOdWxsIDogRXJyb3JDb2RlLkVSUl9WYWx1ZUNhbnRCZU51bGwsIGRl c3QpOworICAgICAgICAgICAgICAgICB9CisgCistICAgICAgICAgICAgICAgIGVsc2UgaWYgKGV4 cHIgaXMgRXhwck1lbWJlckdyb3VwIG1lbUdycCkKKysgICAgICAgICAgICAgICAgZWxzZSBpZiAo ZXhwciBpcyBFeHByTWVtYmVyR3JvdXApCisgICAgICAgICAgICAgICAgIHsKKysgICAgICAgICAg ICAgICAgICAgIEV4cHJNZW1iZXJHcm91cCBtZW1HcnAgPSAoRXhwck1lbWJlckdyb3VwKSBleHBy OworICAgICAgICAgICAgICAgICAgICAgQmluZEdycENvbnZlcnNpb24obWVtR3JwLCBkZXN0LCB0 cnVlKTsKKyAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICBlbHNlIGlmICghVHlw ZU1hbmFnZXIuVHlwZUNvbnRhaW5zQW5vbnltb3VzVHlwZXMoZGVzdCkgJiYgY2FuQ2FzdChleHBy LlR5cGUsIGRlc3QsIGZsYWdzKSkKK0BAIC01NTUsOCArNTU3LDkgQEAgbmFtZXNwYWNlIE1pY3Jv c29mdC5DU2hhcnAuUnVudGltZUJpbmRlci5TZW1hbnRpY3MKKyAgICAgICAgICAgICAgICAgICAg IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICBFcnJvckNvbnRleHQuRXJyb3IoRXJyb3JDb2Rl LkVSUl9WYWx1ZUNhbnRCZU51bGwsIGRlc3QpOworICAgICAgICAgICAgICAgICAgICAgfQorLSAg ICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoZXhwciBpcyBFeHByTWVtYmVyR3JvdXAgbWVtR3Jw KQorKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoZXhwciBpcyBFeHByTWVtYmVyR3JvdXAp CisgICAgICAgICAgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgICAgICAgICAgRXhwck1l bWJlckdyb3VwIG1lbUdycCA9IChFeHByTWVtYmVyR3JvdXApZXhwcjsKKyAgICAgICAgICAgICAg ICAgICAgICAgICBCaW5kR3JwQ29udmVyc2lvbihtZW1HcnAsIGRlc3QsIHRydWUpOworICAgICAg ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgZWxzZQorQEAgLTEzOTYsOCAr MTM5OSw5IEBAIG5hbWVzcGFjZSBNaWNyb3NvZnQuQ1NoYXJwLlJ1bnRpbWVCaW5kZXIuU2VtYW50 aWNzCisgICAgICAgICAgICAgZm9yICg7OykKKyAgICAgICAgICAgICB7CisgICAgICAgICAgICAg ICAgIERlYnVnLkFzc2VydChwRXhwciAhPSBudWxsKTsKKy0gICAgICAgICAgICAgICAgaWYgKHBF eHByIGlzIEV4cHJDYWxsIGNhbGwpCisrICAgICAgICAgICAgICAgIGlmIChwRXhwciBpcyBFeHBy Q2FsbCkKKyAgICAgICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICAgICAgRXhwckNhbGwg Y2FsbCA9IChFeHByQ2FsbClwRXhwcjsKKyAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoY2Fs bC5OdWxsYWJsZUNhbGxMaWZ0S2luZCkKKyAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAg ICAgICAgICAgICAgICAgICBjYXNlIE51bGxhYmxlQ2FsbExpZnRLaW5kLk5vdExpZnRlZDoKK0BA IC0xNDExLDggKzE0MTUsOSBAQCBuYW1lc3BhY2UgTWljcm9zb2Z0LkNTaGFycC5SdW50aW1lQmlu ZGVyLlNlbWFudGljcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAg ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgfQorLSAgICAgICAgICAgICAg ICBlbHNlIGlmIChwRXhwciBpcyBFeHByVXNlckRlZmluZWRDb252ZXJzaW9uIHVkYykKKysgICAg ICAgICAgICAgICAgZWxzZSBpZiAocEV4cHIgaXMgRXhwclVzZXJEZWZpbmVkQ29udmVyc2lvbikK KyAgICAgICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICAgICAgRXhwclVzZXJEZWZpbmVk Q29udmVyc2lvbiB1ZGMgPSAoRXhwclVzZXJEZWZpbmVkQ29udmVyc2lvbilwRXhwcjsKKyAgICAg ICAgICAgICAgICAgICAgIHBFeHByID0gdWRjLlVzZXJEZWZpbmVkQ2FsbDsKKyAgICAgICAgICAg ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICB9CitkaWZmIC0tZ2l0IGEvc3Jj L01pY3Jvc29mdC5DU2hhcnAvc3JjL01pY3Jvc29mdC9DU2hhcnAvUnVudGltZUJpbmRlci9TZW1h bnRpY3MvRVhQUkV4dGVuc2lvbnMuY3MgYi9zcmMvTWljcm9zb2Z0LkNTaGFycC9zcmMvTWljcm9z b2Z0L0NTaGFycC9SdW50aW1lQmluZGVyL1NlbWFudGljcy9FWFBSRXh0ZW5zaW9ucy5jcworaW5k ZXggMDc1ZWQyM2ExMS4uNjQwOGRmNGMzNiAxMDA2NDQKKy0tLSBhL3NyYy9NaWNyb3NvZnQuQ1No YXJwL3NyYy9NaWNyb3NvZnQvQ1NoYXJwL1J1bnRpbWVCaW5kZXIvU2VtYW50aWNzL0VYUFJFeHRl bnNpb25zLmNzCisrKysgYi9zcmMvTWljcm9zb2Z0LkNTaGFycC9zcmMvTWljcm9zb2Z0L0NTaGFy cC9SdW50aW1lQmluZGVyL1NlbWFudGljcy9FWFBSRXh0ZW5zaW9ucy5jcworQEAgLTMzLDggKzMz LDkgQEAgbmFtZXNwYWNlIE1pY3Jvc29mdC5DU2hhcnAuUnVudGltZUJpbmRlci5TZW1hbnRpY3MK KyAgICAgICAgICAgICBFeHByIGV4cHJDdXIgPSBleHByOworICAgICAgICAgICAgIHdoaWxlIChl eHByQ3VyICE9IG51bGwpCisgICAgICAgICAgICAgeworLSAgICAgICAgICAgICAgICBpZiAoZXhw ckN1ciBpcyBFeHByTGlzdCBsaXN0KQorKyAgICAgICAgICAgICAgICBpZiAoZXhwckN1ciBpcyBF eHByTGlzdCkKKyAgICAgICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICAgICAgRXhwckxp c3QgbGlzdCA9IChFeHByTGlzdClleHByQ3VyOworICAgICAgICAgICAgICAgICAgICAgeWllbGQg cmV0dXJuIGxpc3QuT3B0aW9uYWxFbGVtZW50OworICAgICAgICAgICAgICAgICAgICAgZXhwckN1 ciA9IGxpc3QuT3B0aW9uYWxOZXh0TGlzdE5vZGU7CisgICAgICAgICAgICAgICAgIH0KK0BAIC02 MSwxMiArNjIsMTIgQEAgbmFtZXNwYWNlIE1pY3Jvc29mdC5DU2hhcnAuUnVudGltZUJpbmRlci5T ZW1hbnRpY3MKKyAgICAgICAgIH0KKyAgICAgICAgIHB1YmxpYyBzdGF0aWMgYm9vbCBpc051bGwo dGhpcyBFeHByIGV4cHIpCisgICAgICAgICB7CistICAgICAgICAgICAgcmV0dXJuIGV4cHIgaXMg RXhwckNvbnN0YW50IGNvbnN0YW50ICYmIGNvbnN0YW50LklzT0sgJiYgKGV4cHIuVHlwZS5mdW5k VHlwZSgpID09IEZVTkRUWVBFLkZUX1JFRikgJiYgY29uc3RhbnQuVmFsLklzTnVsbFJlZjsKKysg ICAgICAgICAgICByZXR1cm4gZXhwciBpcyBFeHByQ29uc3RhbnQgJiYgKChFeHByQ29uc3RhbnQp ZXhwcikuSXNPSyAmJiAoZXhwci5UeXBlLmZ1bmRUeXBlKCkgPT0gRlVORFRZUEUuRlRfUkVGKSAm JiAoKEV4cHJDb25zdGFudClleHByKS5WYWwuSXNOdWxsUmVmOworICAgICAgICAgfQorIAorICAg ICAgICAgcHVibGljIHN0YXRpYyBib29sIElzWmVybyh0aGlzIEV4cHIgZXhwcikKKyAgICAgICAg IHsKKy0gICAgICAgICAgICByZXR1cm4gZXhwciBpcyBFeHByQ29uc3RhbnQgY29uc3RhbnQgJiYg Y29uc3RhbnQuSXNPSyAmJiBjb25zdGFudC5Jc1plcm87CisrICAgICAgICAgICAgcmV0dXJuIGV4 cHIgaXMgRXhwckNvbnN0YW50ICYmICgoRXhwckNvbnN0YW50KWV4cHIpLklzT0sgJiYgKChFeHBy Q29uc3RhbnQpZXhwcikuSXNaZXJvOworICAgICAgICAgfQorIAorICAgICAgICAgcHJpdmF0ZSBz dGF0aWMgRXhwciBHZXRTZXFWYWwodGhpcyBFeHByIGV4cHIpCitkaWZmIC0tZ2l0IGEvc3JjL01p Y3Jvc29mdC5DU2hhcnAvc3JjL01pY3Jvc29mdC9DU2hhcnAvUnVudGltZUJpbmRlci9TZW1hbnRp Y3MvRXhwbGljaXRDb252ZXJzaW9uLmNzIGIvc3JjL01pY3Jvc29mdC5DU2hhcnAvc3JjL01pY3Jv c29mdC9DU2hhcnAvUnVudGltZUJpbmRlci9TZW1hbnRpY3MvRXhwbGljaXRDb252ZXJzaW9uLmNz CitpbmRleCA2ZWE4ODc5YzQwLi4xMzdlOTUwZTc2IDEwMDY0NAorLS0tIGEvc3JjL01pY3Jvc29m dC5DU2hhcnAvc3JjL01pY3Jvc29mdC9DU2hhcnAvUnVudGltZUJpbmRlci9TZW1hbnRpY3MvRXhw bGljaXRDb252ZXJzaW9uLmNzCisrKysgYi9zcmMvTWljcm9zb2Z0LkNTaGFycC9zcmMvTWljcm9z b2Z0L0NTaGFycC9SdW50aW1lQmluZGVyL1NlbWFudGljcy9FeHBsaWNpdENvbnZlcnNpb24uY3MK K0BAIC0yMDcsOCArMjA3LDkgQEAgbmFtZXNwYWNlIE1pY3Jvc29mdC5DU2hhcnAuUnVudGltZUJp bmRlci5TZW1hbnRpY3MKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVlNGQUlMKCJCaW5k RXhwbGljaXRDb252ZXJzaW9uIGZhaWxlZCB1bmV4cGVjdGVkbHkiKTsKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgICAgICAgICAgIH0K Ky0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoX2V4cHJEZXN0IGlzIEV4cHJVc2VyRGVmaW5l ZENvbnZlcnNpb24gdWRjKQorKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfZXhwckRlc3Qg aXMgRXhwclVzZXJEZWZpbmVkQ29udmVyc2lvbikKKyAgICAgICAgICAgICAgICAgICAgICAgICB7 CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIEV4cHJVc2VyRGVmaW5lZENvbnZlcnNpb24g dWRjID0gKEV4cHJVc2VyRGVmaW5lZENvbnZlcnNpb24pX2V4cHJEZXN0OworICAgICAgICAgICAg ICAgICAgICAgICAgICAgICB1ZGMuQXJndW1lbnQgPSBfZXhwclNyYzsKKyAgICAgICAgICAgICAg ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICB9CitkaWZmIC0tZ2l0IGEvc3JjL01p Y3Jvc29mdC5DU2hhcnAvc3JjL01pY3Jvc29mdC9DU2hhcnAvUnVudGltZUJpbmRlci9TZW1hbnRp Y3MvRXhwckZhY3RvcnkuY3MgYi9zcmMvTWljcm9zb2Z0LkNTaGFycC9zcmMvTWljcm9zb2Z0L0NT aGFycC9SdW50aW1lQmluZGVyL1NlbWFudGljcy9FeHByRmFjdG9yeS5jcworaW5kZXggOTllZTU3 NjI2YS4uZWMwZDI5ZDZmMyAxMDA2NDQKKy0tLSBhL3NyYy9NaWNyb3NvZnQuQ1NoYXJwL3NyYy9N aWNyb3NvZnQvQ1NoYXJwL1J1bnRpbWVCaW5kZXIvU2VtYW50aWNzL0V4cHJGYWN0b3J5LmNzCisr KysgYi9zcmMvTWljcm9zb2Z0LkNTaGFycC9zcmMvTWljcm9zb2Z0L0NTaGFycC9SdW50aW1lQmlu ZGVyL1NlbWFudGljcy9FeHByRmFjdG9yeS5jcworQEAgLTI2NSw4ICsyNjUsOSBAQCBuYW1lc3Bh Y2UgTWljcm9zb2Z0LkNTaGFycC5SdW50aW1lQmluZGVyLlNlbWFudGljcworICAgICAgICAgICAg IEV4cHJVc2VyTG9naWNhbE9wIHJ2YWwgPSBuZXcgRXhwclVzZXJMb2dpY2FsT3AocFR5cGUpOwor ICAgICAgICAgICAgIEV4cHIgbGVmdENoaWxkID0gKChFeHByTGlzdClwQ2FsbE9wLk9wdGlvbmFs QXJndW1lbnRzKS5PcHRpb25hbEVsZW1lbnQ7CisgICAgICAgICAgICAgRGVidWcuQXNzZXJ0KGxl ZnRDaGlsZCAhPSBudWxsKTsKKy0gICAgICAgICAgICBpZiAobGVmdENoaWxkIGlzIEV4cHJXcmFw IHdyYXApCisrICAgICAgICAgICAgaWYgKGxlZnRDaGlsZCBpcyBFeHByV3JhcCkKKyAgICAgICAg ICAgICB7CisrICAgICAgICAgICAgICAgIEV4cHJXcmFwIHdyYXAgPSAoRXhwcldyYXApbGVmdENo aWxkOworICAgICAgICAgICAgICAgICAvLyBJbiB0aGUgRUUgY2FzZSwgd2UgZG9uJ3QgY3JlYXRl IFdSQVBFWFBScy4KKyAgICAgICAgICAgICAgICAgbGVmdENoaWxkID0gd3JhcC5PcHRpb25hbEV4 cHJlc3Npb247CisgICAgICAgICAgICAgICAgIERlYnVnLkFzc2VydChsZWZ0Q2hpbGQgIT0gbnVs bCk7CitkaWZmIC0tZ2l0IGEvc3JjL01pY3Jvc29mdC5DU2hhcnAvc3JjL01pY3Jvc29mdC9DU2hh cnAvUnVudGltZUJpbmRlci9TZW1hbnRpY3MvRXhwcmVzc2lvbkJpbmRlci5jcyBiL3NyYy9NaWNy b3NvZnQuQ1NoYXJwL3NyYy9NaWNyb3NvZnQvQ1NoYXJwL1J1bnRpbWVCaW5kZXIvU2VtYW50aWNz L0V4cHJlc3Npb25CaW5kZXIuY3MKK2luZGV4IDYwYTE2NjFlYWMuLmRjMDRmYTE2NTcgMTAwNjQ0 CistLS0gYS9zcmMvTWljcm9zb2Z0LkNTaGFycC9zcmMvTWljcm9zb2Z0L0NTaGFycC9SdW50aW1l QmluZGVyL1NlbWFudGljcy9FeHByZXNzaW9uQmluZGVyLmNzCisrKysgYi9zcmMvTWljcm9zb2Z0 LkNTaGFycC9zcmMvTWljcm9zb2Z0L0NTaGFycC9SdW50aW1lQmluZGVyL1NlbWFudGljcy9FeHBy ZXNzaW9uQmluZGVyLmNzCitAQCAtNjAxLDEwICs2MDEsMTEgQEAgbmFtZXNwYWNlIE1pY3Jvc29m dC5DU2hhcnAuUnVudGltZUJpbmRlci5TZW1hbnRpY3MKKyAgICAgICAgICAgICAvLyBDaGVjayBp ZiB3ZSBoYXZlIGEgY29tcGlsZSB0aW1lIGNvbnN0YW50LiBJZiB3ZSBkbywgY3JlYXRlIGEgY29u c3RhbnQgZm9yIGl0IGFuZCBzZXQgdGhlCisgICAgICAgICAgICAgLy8gb3JpZ2luYWwgdHJlZSB0 byB0aGUgY2FzdC4KKyAKKy0gICAgICAgICAgICBpZiAoZXhwckNvbnN0IGlzIEV4cHJDb25zdGFu dCBjb25zdGFudCAmJiBleHByRmxhZ3MgPT0gMCAmJgorKyAgICAgICAgICAgIGlmIChleHByQ29u c3QgaXMgRXhwckNvbnN0YW50ICYmIGV4cHJGbGFncyA9PSAwICYmCisgICAgICAgICAgICAgICAg IGV4cHJTcmMuVHlwZS5mdW5kVHlwZSgpID09IHR5cGVEZXN0LmZ1bmRUeXBlKCkgJiYKKy0gICAg ICAgICAgICAgICAgKCFleHByU3JjLlR5cGUuaXNQcmVkZWZUeXBlKFByZWRlZmluZWRUeXBlLlBU X1NUUklORykgfHwgY29uc3RhbnQuVmFsLklzTnVsbFJlZikpCisrICAgICAgICAgICAgICAgICgh ZXhwclNyYy5UeXBlLmlzUHJlZGVmVHlwZShQcmVkZWZpbmVkVHlwZS5QVF9TVFJJTkcpIHx8ICgo RXhwckNvbnN0YW50KWV4cHJDb25zdCkuVmFsLklzTnVsbFJlZikpCisgICAgICAgICAgICAgewor KyAgICAgICAgICAgICAgICBFeHByQ29uc3RhbnQgY29uc3RhbnQgPSAoRXhwckNvbnN0YW50KWV4 cHJDb25zdDsKKyAgICAgICAgICAgICAgICAgRXhwckNvbnN0YW50IGV4cHIgPSBHZXRFeHByRmFj dG9yeSgpLkNyZWF0ZUNvbnN0YW50KHR5cGVEZXN0LCBjb25zdGFudC5WYWwpOworICAgICAgICAg ICAgICAgICBwZXhwckRlc3QgPSBleHByOworICAgICAgICAgICAgICAgICByZXR1cm47CitAQCAt MTE5MSw4ICsxMTkyLDkgQEAgbmFtZXNwYWNlIE1pY3Jvc29mdC5DU2hhcnAuUnVudGltZUJpbmRl ci5TZW1hbnRpY3MKKyAgICAgICAgICAgICB3aGlsZSAobGlzdCAhPSBudWxsKQorICAgICAgICAg ICAgIHsKKyAgICAgICAgICAgICAgICAgRXhwciBhcmc7CistICAgICAgICAgICAgICAgIGlmIChs aXN0IGlzIEV4cHJMaXN0IG5leHQpCisrICAgICAgICAgICAgICAgIGlmIChsaXN0IGlzIEV4cHJM aXN0KQorICAgICAgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgICAgICBFeHByTGlzdCBu ZXh0ID0gKEV4cHJMaXN0KWxpc3Q7CisgICAgICAgICAgICAgICAgICAgICBhcmcgPSBuZXh0Lk9w dGlvbmFsRWxlbWVudDsKKyAgICAgICAgICAgICAgICAgICAgIGxpc3QgPSBuZXh0Lk9wdGlvbmFs TmV4dExpc3ROb2RlOworICAgICAgICAgICAgICAgICB9CitAQCAtMTI2NSw4ICsxMjY3LDkgQEAg bmFtZXNwYWNlIE1pY3Jvc29mdC5DU2hhcnAuUnVudGltZUJpbmRlci5TZW1hbnRpY3MKKyAKKyAg ICAgICAgIHByaXZhdGUgRXhwciBVbndyYXBFeHByZXNzaW9uKEV4cHIgcEV4cHJlc3Npb24pCisg ICAgICAgICB7CistICAgICAgICAgICAgd2hpbGUgKHBFeHByZXNzaW9uIGlzIEV4cHJXcmFwIHdy YXApCisrICAgICAgICAgICAgd2hpbGUgKHBFeHByZXNzaW9uIGlzIEV4cHJXcmFwKQorICAgICAg ICAgICAgIHsKKysgICAgICAgICAgICAgICAgRXhwcldyYXAgd3JhcCA9IChFeHByV3JhcClwRXhw cmVzc2lvbjsKKyAgICAgICAgICAgICAgICAgRXhwciB3cmFwcGVkID0gd3JhcC5PcHRpb25hbEV4 cHJlc3Npb247CisgICAgICAgICAgICAgICAgIGlmICh3cmFwcGVkID09IG51bGwpCisgICAgICAg ICAgICAgICAgIHsKK0BAIC0xMzQ0LDggKzEzNDcsOSBAQCBuYW1lc3BhY2UgTWljcm9zb2Z0LkNT aGFycC5SdW50aW1lQmluZGVyLlNlbWFudGljcworICAgICAgICAgICAgICAgICByZXR1cm4gZmFs c2U7CisgICAgICAgICAgICAgaWYgKGV4cHIuaXNMdmFsdWUoKSkKKyAgICAgICAgICAgICB7Cist ICAgICAgICAgICAgICAgIGlmIChleHByIGlzIEV4cHJQcm9wZXJ0eSBwcm9wKQorKyAgICAgICAg ICAgICAgICBpZiAoZXhwciBpcyBFeHByUHJvcGVydHkpCisgICAgICAgICAgICAgICAgIHsKKysg ICAgICAgICAgICAgICAgICAgIEV4cHJQcm9wZXJ0eSBwcm9wID0gKEV4cHJQcm9wZXJ0eSlleHBy OworICAgICAgICAgICAgICAgICAgICAgQ2hlY2tMdmFsdWVQcm9wKHByb3ApOworICAgICAgICAg ICAgICAgICB9CisgICAgICAgICAgICAgICAgIG1hcmtGaWVsZEFzc2lnbmVkKGV4cHIpOworQEAg LTE1NzEsOSArMTU3NSwxMCBAQCBuYW1lc3BhY2UgTWljcm9zb2Z0LkNTaGFycC5SdW50aW1lQmlu ZGVyLlNlbWFudGljcworIAorICAgICAgICAgICAgICAgICAvLyBJZiB3ZSdyZSBpbnZva2luZyBj b2RlIG9uIGEgc3RydWN0LXZhbHVlZCBmaWVsZCwgbWFyayB0aGUgc3RydWN0IGFzIGFzc2lnbmVk ICh0bworICAgICAgICAgICAgICAgICAvLyBhdm9pZCB3YXJuaW5nIENTMDY0OSkuCistICAgICAg ICAgICAgICAgIGlmIChwT2JqZWN0IGlzIEV4cHJGaWVsZCBmaWVsZCAmJiAhZmllbGQuRmllbGRX aXRoVHlwZS5GaWVsZCgpLmlzQXNzaWduZWQgJiYgIXN3dC5TeW0uSXNGaWVsZFN5bWJvbCgpICYm CisrICAgICAgICAgICAgICAgIGlmIChwT2JqZWN0IGlzIEV4cHJGaWVsZCAmJiAhKChFeHByRmll bGQpcE9iamVjdCkuRmllbGRXaXRoVHlwZS5GaWVsZCgpLmlzQXNzaWduZWQgJiYgIXN3dC5TeW0u SXNGaWVsZFN5bWJvbCgpICYmCisgICAgICAgICAgICAgICAgICAgICB0eXBlT2JqLmlzU3RydWN0 VHlwZSgpICYmICF0eXBlT2JqLmlzUHJlZGVmaW5lZCgpKQorICAgICAgICAgICAgICAgICB7Cisr ICAgICAgICAgICAgICAgICAgICBFeHByRmllbGQgZmllbGQgPSAoRXhwckZpZWxkKSBwT2JqZWN0 OworICAgICAgICAgICAgICAgICAgICAgZmllbGQuRmllbGRXaXRoVHlwZS5GaWVsZCgpLmlzQXNz aWduZWQgPSB0cnVlOworICAgICAgICAgICAgICAgICB9CisgCitAQCAtMTc4Niw4ICsxNzkxLDkg QEAgbmFtZXNwYWNlIE1pY3Jvc29mdC5DU2hhcnAuUnVudGltZUJpbmRlci5TZW1hbnRpY3MKKyAK KyAgICAgICAgICAgICAgICAgICAgIEV4cHIgYXJndW1lbnQgPSBpbmRpcjsKKyAgICAgICAgICAg ICAgICAgICAgIEV4cHIgcnZhbDsKKy0gICAgICAgICAgICAgICAgICAgIGlmIChhcmd1bWVudCBp cyBFeHByTmFtZWRBcmd1bWVudFNwZWNpZmljYXRpb24gbmFtZWQpCisrICAgICAgICAgICAgICAg ICAgICBpZiAoYXJndW1lbnQgaXMgRXhwck5hbWVkQXJndW1lbnRTcGVjaWZpY2F0aW9uKQorICAg ICAgICAgICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICAgICAgICAgIEV4cHJOYW1lZEFy Z3VtZW50U3BlY2lmaWNhdGlvbiBuYW1lZCA9IChFeHByTmFtZWRBcmd1bWVudFNwZWNpZmljYXRp b24pYXJndW1lbnQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGluZGV4ID0gMDsKKyAg ICAgICAgICAgICAgICAgICAgICAgICAvLyBJZiB3ZSdyZSBuYW1lZCwgbG9vayBmb3IgdGhlIHR5 cGUgb2YgdGhlIG1hdGNoaW5nIG5hbWUuCisgICAgICAgICAgICAgICAgICAgICAgICAgZm9yZWFj aCAoTmFtZSBpIGluIG1vc3REZXJpdmVkTWV0aG9kLlBhcmFtZXRlck5hbWVzKQorQEAgLTE5Mjgs OCArMTkzNCw5IEBAIG5hbWVzcGFjZSBNaWNyb3NvZnQuQ1NoYXJwLlJ1bnRpbWVCaW5kZXIuU2Vt YW50aWNzCisgICAgICAgICAgICAgICAgICAgICBFeHByIGV4cHIgPSBpdC5DdXJyZW50KCk7Cisg ICAgICAgICAgICAgICAgICAgICBjb3VudCsrOworIAorLSAgICAgICAgICAgICAgICAgICAgaWYg KGV4cHIgaXMgRXhwck5hbWVkQXJndW1lbnRTcGVjaWZpY2F0aW9uIG5hbWVkKQorKyAgICAgICAg ICAgICAgICAgICAgaWYgKGV4cHIgaXMgRXhwck5hbWVkQXJndW1lbnRTcGVjaWZpY2F0aW9uKQor ICAgICAgICAgICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICAgICAgICAgIEV4cHJOYW1l ZEFyZ3VtZW50U3BlY2lmaWNhdGlvbiBuYW1lZCA9IChFeHByTmFtZWRBcmd1bWVudFNwZWNpZmlj YXRpb24pZXhwcjsKKyAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lZC5WYWx1ZSA9IHRyeUNv bnZlcnQobmFtZWQuVmFsdWUsIGVsZW1lbnRUeXBlKTsKKyAgICAgICAgICAgICAgICAgICAgIH0K KyAgICAgICAgICAgICAgICAgICAgIGVsc2UKK0BAIC0xOTUxLDggKzE5NTgsOSBAQCBuYW1lc3Bh Y2UgTWljcm9zb2Z0LkNTaGFycC5SdW50aW1lQmluZGVyLlNlbWFudGljcworIAorICAgICAgICAg cHJpdmF0ZSB2b2lkIG1hcmtGaWVsZEFzc2lnbmVkKEV4cHIgZXhwcikKKyAgICAgICAgIHsKKy0g ICAgICAgICAgICBpZiAoMCAhPSAoZXhwci5GbGFncyAmIEVYUFJGTEFHLkVYRl9MVkFMVUUpICYm IGV4cHIgaXMgRXhwckZpZWxkIGZpZWxkKQorKyAgICAgICAgICAgIGlmICgwICE9IChleHByLkZs YWdzICYgRVhQUkZMQUcuRVhGX0xWQUxVRSkgJiYgZXhwciBpcyBFeHByRmllbGQpCisgICAgICAg ICAgICAgeworKyAgICAgICAgICAgICAgICBFeHByRmllbGQgZmllbGQgPSAoRXhwckZpZWxkKSBl eHByOworICAgICAgICAgICAgICAgICBGaWVsZFN5bWJvbCBzeW1ib2w7CisgICAgICAgICAgICAg ICAgIGRvCisgICAgICAgICAgICAgICAgIHsKK0BAIC0yMDE5LDggKzIwMjcsOSBAQCBuYW1lc3Bh Y2UgTWljcm9zb2Z0LkNTaGFycC5SdW50aW1lQmluZGVyLlNlbWFudGljcworICAgICAgICAgICAg IGZvciAoRXhwciBsaXN0ID0gYXJnczsgbGlzdCAhPSBudWxsOyBpYXJnKyspCisgICAgICAgICAg ICAgeworICAgICAgICAgICAgICAgICBFeHByIGFyZzsKKy0gICAgICAgICAgICAgICAgaWYgKGxp c3QgaXMgRXhwckxpc3QgbmV4dCkKKysgICAgICAgICAgICAgICAgaWYgKGxpc3QgaXMgRXhwckxp c3QpCisgICAgICAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgICAgIEV4cHJMaXN0IG5l eHQgPSAoRXhwckxpc3QpbGlzdDsKKyAgICAgICAgICAgICAgICAgICAgIGFyZyA9IG5leHQuT3B0 aW9uYWxFbGVtZW50OworICAgICAgICAgICAgICAgICAgICAgbGlzdCA9IG5leHQuT3B0aW9uYWxO ZXh0TGlzdE5vZGU7CisgICAgICAgICAgICAgICAgIH0KK0BAIC0yMzc0LDggKzIzODMsOSBAQCBu YW1lc3BhY2UgTWljcm9zb2Z0LkNTaGFycC5SdW50aW1lQmluZGVyLlNlbWFudGljcworICAgICAg ICAgICAgIHsKKyAgICAgICAgICAgICAgICAgRXhwciBhcmc7CisgCistICAgICAgICAgICAgICAg IGlmIChsaXN0IGlzIEV4cHJMaXN0IG5leHQpCisrICAgICAgICAgICAgICAgIGlmIChsaXN0IGlz IEV4cHJMaXN0KQorICAgICAgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgICAgICBFeHBy TGlzdCBuZXh0ID0gKEV4cHJMaXN0KWxpc3Q7CisgICAgICAgICAgICAgICAgICAgICBhcmcgPSBu ZXh0Lk9wdGlvbmFsRWxlbWVudDsKKyAgICAgICAgICAgICAgICAgICAgIGxpc3QgPSBuZXh0Lk9w dGlvbmFsTmV4dExpc3ROb2RlOworICAgICAgICAgICAgICAgICB9CitkaWZmIC0tZ2l0IGEvc3Jj L01pY3Jvc29mdC5DU2hhcnAvc3JjL01pY3Jvc29mdC9DU2hhcnAvUnVudGltZUJpbmRlci9TZW1h bnRpY3MvR3JvdXBUb0FyZ3NCaW5kZXIuY3MgYi9zcmMvTWljcm9zb2Z0LkNTaGFycC9zcmMvTWlj cm9zb2Z0L0NTaGFycC9SdW50aW1lQmluZGVyL1NlbWFudGljcy9Hcm91cFRvQXJnc0JpbmRlci5j cworaW5kZXggNzcwOGYxOTdhZS4uYjc1YWMzNDBiZSAxMDA2NDQKKy0tLSBhL3NyYy9NaWNyb3Nv ZnQuQ1NoYXJwL3NyYy9NaWNyb3NvZnQvQ1NoYXJwL1J1bnRpbWVCaW5kZXIvU2VtYW50aWNzL0dy b3VwVG9BcmdzQmluZGVyLmNzCisrKysgYi9zcmMvTWljcm9zb2Z0LkNTaGFycC9zcmMvTWljcm9z b2Z0L0NTaGFycC9SdW50aW1lQmluZGVyL1NlbWFudGljcy9Hcm91cFRvQXJnc0JpbmRlci5jcwor QEAgLTUxMCw3ICs1MTAsNyBAQCBuYW1lc3BhY2UgTWljcm9zb2Z0LkNTaGFycC5SdW50aW1lQmlu ZGVyLlNlbWFudGljcworICAgICAgICAgICAgICAgICAgICAgLy8gdGhlbiBsZXQgdXMgdGhyb3Vn aC4KKyAgICAgICAgICAgICAgICAgICAgIGlmIChtZXRocHJvcC5pc1BhcmFtQXJyYXkgJiYKKyAg ICAgICAgICAgICAgICAgICAgICAgICBpbmRleCA8IHBBcmd1bWVudHMuY2FyZyAmJgorLSAgICAg ICAgICAgICAgICAgICAgICAgIHBBcmd1bWVudHMucHJnZXhwcltpbmRleF0gaXMgRXhwckFycmF5 SW5pdCBhcnJheUluaXQgJiYgYXJyYXlJbml0LkdlbmVyYXRlZEZvclBhcmFtQXJyYXkpCisrICAg ICAgICAgICAgICAgICAgICAgICAgcEFyZ3VtZW50cy5wcmdleHByW2luZGV4XSBpcyBFeHByQXJy YXlJbml0ICYmICgoRXhwckFycmF5SW5pdClwQXJndW1lbnRzLnByZ2V4cHJbaW5kZXhdKS5HZW5l cmF0ZWRGb3JQYXJhbUFycmF5KQorICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAg ICAgICAgICAgICAgIHBhcmFtQXJyYXlBcmd1bWVudCA9IHBBcmd1bWVudHMucHJnZXhwcltpbmRl eF07CisgICAgICAgICAgICAgICAgICAgICB9CitAQCAtNTE4LDcgKzUxOCw3IEBAIG5hbWVzcGFj ZSBNaWNyb3NvZnQuQ1NoYXJwLlJ1bnRpbWVCaW5kZXIuU2VtYW50aWNzCisgICAgICAgICAgICAg ICAgICAgICAvLyBQb3NpdGlvbmFsLgorICAgICAgICAgICAgICAgICAgICAgaWYgKGluZGV4IDwg cEFyZ3VtZW50cy5jYXJnICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgIShwQXJndW1lbnRz LnByZ2V4cHJbaW5kZXhdIGlzIEV4cHJOYW1lZEFyZ3VtZW50U3BlY2lmaWNhdGlvbikgJiYKKy0g ICAgICAgICAgICAgICAgICAgICAgICAhKHBBcmd1bWVudHMucHJnZXhwcltpbmRleF0gaXMgRXhw ckFycmF5SW5pdCBhcnJheUluaXRQb3MgJiYgYXJyYXlJbml0UG9zLkdlbmVyYXRlZEZvclBhcmFt QXJyYXkpKQorKyAgICAgICAgICAgICAgICAgICAgICAgICEocEFyZ3VtZW50cy5wcmdleHByW2lu ZGV4XSBpcyBFeHByQXJyYXlJbml0ICYmICgoRXhwckFycmF5SW5pdClwQXJndW1lbnRzLnByZ2V4 cHJbaW5kZXhdKS5HZW5lcmF0ZWRGb3JQYXJhbUFycmF5KSkKKyAgICAgICAgICAgICAgICAgICAg IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICBwRXhwckFyZ3VtZW50c1tpbmRleF0gPSBwQXJn dW1lbnRzLnByZ2V4cHJbaW5kZXgrK107CisgICAgICAgICAgICAgICAgICAgICAgICAgY29udGlu dWU7CitAQCAtODM5LDcgKzgzOSw3IEBAIG5hbWVzcGFjZSBNaWNyb3NvZnQuQ1NoYXJwLlJ1bnRp bWVCaW5kZXIuU2VtYW50aWNzCisgICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwg cEFyZ3VtZW50cy5jYXJnOyBpKyspCisgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg ICAgICAgIEV4cHIgZXhwciA9IHByZ2V4cHJbaV07CistICAgICAgICAgICAgICAgICAgICBpZiAo ZXhwciBpcyBFeHByTmFtZWRBcmd1bWVudFNwZWNpZmljYXRpb24gbmFtZWQgJiYgbmFtZWQuTmFt ZSA9PSBwTmFtZSkKKysgICAgICAgICAgICAgICAgICAgIGlmIChleHByIGlzIEV4cHJOYW1lZEFy Z3VtZW50U3BlY2lmaWNhdGlvbiAmJiAoKEV4cHJOYW1lZEFyZ3VtZW50U3BlY2lmaWNhdGlvbill eHByKS5OYW1lID09IHBOYW1lKQorICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAg ICAgICAgICAgICAgIHJldHVybiBleHByOworICAgICAgICAgICAgICAgICAgICAgfQorQEAgLTg2 MSw3ICs4NjEsOCBAQCBuYW1lc3BhY2UgTWljcm9zb2Z0LkNTaGFycC5SdW50aW1lQmluZGVyLlNl bWFudGljcworICAgICAgICAgICAgICAgICBIYXNoU2V0PE5hbWU+IG5hbWVzID0gbmV3IEhhc2hT ZXQ8TmFtZT4oKTsKKyAgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBfcEFyZ3Vt ZW50cy5jYXJnOyBpKyspCisgICAgICAgICAgICAgICAgIHsKKy0gICAgICAgICAgICAgICAgICAg IGlmICghKF9wQXJndW1lbnRzLnByZ2V4cHJbaV0gaXMgRXhwck5hbWVkQXJndW1lbnRTcGVjaWZp Y2F0aW9uIG5hbWVkKSkKKysgICAgICAgICAgICAgICAgICAgIEV4cHJOYW1lZEFyZ3VtZW50U3Bl Y2lmaWNhdGlvbiBuYW1lZDsKKysgICAgICAgICAgICAgICAgICAgIGlmICghKF9wQXJndW1lbnRz LnByZ2V4cHJbaV0gaXMgRXhwck5hbWVkQXJndW1lbnRTcGVjaWZpY2F0aW9uKSkKKyAgICAgICAg ICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWN1cnJlbnRQb3Np dGlvbi5Jc0VtcHR5KCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgeworQEAgLTg2OSw2ICs4 NzAsNyBAQCBuYW1lc3BhY2UgTWljcm9zb2Z0LkNTaGFycC5SdW50aW1lQmluZGVyLlNlbWFudGlj cworICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICBj b250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgIH0KKysgICAgICAgICAgICAgICAgICAgIG5h bWVkID0gKEV4cHJOYW1lZEFyZ3VtZW50U3BlY2lmaWNhdGlvbikgX3BBcmd1bWVudHMucHJnZXhw cltpXTsKKyAKKyAgICAgICAgICAgICAgICAgICAgIE5hbWUgbmFtZSA9IG5hbWVkLk5hbWU7Cisg ICAgICAgICAgICAgICAgICAgICBpZiAoIW1ldGhwcm9wLlBhcmFtZXRlck5hbWVzLkNvbnRhaW5z KG5hbWUpKQorQEAgLTEwODAsOCArMTA4Miw5IEBAIG5hbWVzcGFjZSBNaWNyb3NvZnQuQ1NoYXJw LlJ1bnRpbWVCaW5kZXIuU2VtYW50aWNzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEV4 cHIgcEFyZ3VtZW50ID0gX3BBcmd1bWVudHMucHJnZXhwcltpdmFyXTsKKyAKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgLy8gSWYgd2UgaGF2ZSBhIG5hbWVkIGFyZ3VtZW50LCBzdHJpcCBp dCB0byBkbyB0aGUgY29udmVyc2lvbi4KKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYg KHBBcmd1bWVudCBpcyBFeHByTmFtZWRBcmd1bWVudFNwZWNpZmljYXRpb24gbmFtZWQpCisrICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwQXJndW1lbnQgaXMgRXhwck5hbWVkQXJndW1l bnRTcGVjaWZpY2F0aW9uKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisrICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBFeHByTmFtZWRBcmd1bWVudFNwZWNpZmljYXRpb24g bmFtZWQgPSAoRXhwck5hbWVkQXJndW1lbnRTcGVjaWZpY2F0aW9uKXBBcmd1bWVudDsKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBBcmd1bWVudCA9IG5hbWVkLlZhbHVlOworICAg ICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgCitkaWZmIC0tZ2l0IGEvc3JjL01pY3Jvc29m dC5DU2hhcnAvc3JjL01pY3Jvc29mdC9DU2hhcnAvUnVudGltZUJpbmRlci9TZW1hbnRpY3MvSW1w bGljaXRDb252ZXJzaW9uLmNzIGIvc3JjL01pY3Jvc29mdC5DU2hhcnAvc3JjL01pY3Jvc29mdC9D U2hhcnAvUnVudGltZUJpbmRlci9TZW1hbnRpY3MvSW1wbGljaXRDb252ZXJzaW9uLmNzCitpbmRl eCBmMWEwMTU5ZTUzLi5mZGJkMWRkNDI2IDEwMDY0NAorLS0tIGEvc3JjL01pY3Jvc29mdC5DU2hh cnAvc3JjL01pY3Jvc29mdC9DU2hhcnAvUnVudGltZUJpbmRlci9TZW1hbnRpY3MvSW1wbGljaXRD b252ZXJzaW9uLmNzCisrKysgYi9zcmMvTWljcm9zb2Z0LkNTaGFycC9zcmMvTWljcm9zb2Z0L0NT aGFycC9SdW50aW1lQmluZGVyL1NlbWFudGljcy9JbXBsaWNpdENvbnZlcnNpb24uY3MKK0BAIC0x NzIsOCArMTcyLDkgQEAgbmFtZXNwYWNlIE1pY3Jvc29mdC5DU2hhcnAuUnVudGltZUJpbmRlci5T ZW1hbnRpY3MKKyAgICAgICAgICAgICAgICAgICAgICAgICBWU0ZBSUwoIkJhZCB0eXBlIHN5bWJv bCBraW5kIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg ICAgICAgICBjYXNlIFR5cGVLaW5kLlRLX01ldGhvZEdyb3VwVHlwZToKKy0gICAgICAgICAgICAg ICAgICAgICAgICBpZiAoX2V4cHJTcmMgaXMgRXhwck1lbWJlckdyb3VwIG1lbUdycCkKKysgICAg ICAgICAgICAgICAgICAgICAgICBpZiAoX2V4cHJTcmMgaXMgRXhwck1lbWJlckdyb3VwKQorICAg ICAgICAgICAgICAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgRXhw ck1lbWJlckdyb3VwIG1lbUdycCA9IChFeHByTWVtYmVyR3JvdXApX2V4cHJTcmM7CisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIEV4cHJDYWxsIG91dEV4cHI7CisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGJvb2wgcmV0VmFsID0gX2JpbmRlci5CaW5kR3JwQ29udmVyc2lvbihtZW1H cnAsIF90eXBlRGVzdCwgX25lZWRzRXhwckRlc3QsIG91dCBvdXRFeHByLCBmYWxzZSk7CisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIF9leHByRGVzdCA9IG91dEV4cHI7CitAQCAtNzQ0LDEw ICs3NDUsMTAgQEAgbmFtZXNwYWNlIE1pY3Jvc29mdC5DU2hhcnAuUnVudGltZUJpbmRlci5TZW1h bnRpY3MKKyAgICAgICAgICAgICAgICAgLy8gKiAgIEEgY29uc3RhbnQtZXhwcmVzc2lvbiBvZiB0 eXBlIGxvbmcgY2FuIGJlIGNvbnZlcnRlZCB0byB0eXBlIHVsb25nLCBwcm92aWRlZCB0aGUgdmFs dWUgb2YKKyAgICAgICAgICAgICAgICAgLy8gICAgIHRoZSBjb25zdGFudC1leHByZXNzaW9uIGlz IG5vdCBuZWdhdGl2ZS4KKyAgICAgICAgICAgICAgICAgLy8gTm90ZTogRG9uJ3QgdXNlIEdldENv bnN0IGhlcmUgc2luY2UgdGhlIGNvbnZlcnNpb24gb25seSBhcHBsaWVzIHRvIGJvbmEtZmlkZSBj b21waWxlIHRpbWUgY29uc3RhbnRzLgorLSAgICAgICAgICAgICAgICBpZiAoX2V4cHJTcmMgaXMg RXhwckNvbnN0YW50IGNvbnN0YW50ICYmIF9leHByU3JjLklzT0sgJiYKKysgICAgICAgICAgICAg ICAgaWYgKF9leHByU3JjIGlzIEV4cHJDb25zdGFudCAmJiBfZXhwclNyYy5Jc09LICYmCisgICAg ICAgICAgICAgICAgICAgICAoKHB0U3JjID09IFByZWRlZmluZWRUeXBlLlBUX0lOVCAmJiBwdERl c3QgIT0gUHJlZGVmaW5lZFR5cGUuUFRfQk9PTCAmJiBwdERlc3QgIT0gUHJlZGVmaW5lZFR5cGUu UFRfQ0hBUikgfHwKKyAgICAgICAgICAgICAgICAgICAgIChwdFNyYyA9PSBQcmVkZWZpbmVkVHlw ZS5QVF9MT05HICYmIHB0RGVzdCA9PSBQcmVkZWZpbmVkVHlwZS5QVF9VTE9ORykpICYmCistICAg ICAgICAgICAgICAgICAgICBpc0NvbnN0YW50SW5SYW5nZShjb25zdGFudCwgX3R5cGVEZXN0KSkK KysgICAgICAgICAgICAgICAgICAgIGlzQ29uc3RhbnRJblJhbmdlKCgoRXhwckNvbnN0YW50KV9l eHByU3JjKSwgX3R5cGVEZXN0KSkKKyAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAg ICAgICAgLy8gU3BlY2lhbCBjYXNlIChDTFIgNi4xLjYpOiBpZiBpbnRlZ3JhbCBjb25zdGFudCBp cyBpbiByYW5nZSwgdGhlIGNvbnZlcnNpb24gaXMgYSBsZWdhbCBpbXBsaWNpdCBjb252ZXJzaW9u LgorICAgICAgICAgICAgICAgICAgICAgY29udmVydEtpbmQgPSBDb252S2luZC5JbXBsaWNpdDsK K2RpZmYgLS1naXQgYS9zcmMvTWljcm9zb2Z0LkNTaGFycC9zcmMvTWljcm9zb2Z0L0NTaGFycC9S dW50aW1lQmluZGVyL1NlbWFudGljcy9NZXRob2RUeXBlSW5mZXJyZXIuY3MgYi9zcmMvTWljcm9z b2Z0LkNTaGFycC9zcmMvTWljcm9zb2Z0L0NTaGFycC9SdW50aW1lQmluZGVyL1NlbWFudGljcy9N ZXRob2RUeXBlSW5mZXJyZXIuY3MKK2luZGV4IDU4OWI5Yzk2ZDAuLjI1NTljYTVjODUgMTAwNjQ0 CistLS0gYS9zcmMvTWljcm9zb2Z0LkNTaGFycC9zcmMvTWljcm9zb2Z0L0NTaGFycC9SdW50aW1l QmluZGVyL1NlbWFudGljcy9NZXRob2RUeXBlSW5mZXJyZXIuY3MKKysrKyBiL3NyYy9NaWNyb3Nv ZnQuQ1NoYXJwL3NyYy9NaWNyb3NvZnQvQ1NoYXJwL1J1bnRpbWVCaW5kZXIvU2VtYW50aWNzL01l dGhvZFR5cGVJbmZlcnJlci5jcworQEAgLTEwNjQsMTAgKzEwNjQsMTEgQEAgbmFtZXNwYWNlIE1p Y3Jvc29mdC5DU2hhcnAuUnVudGltZUJpbmRlci5TZW1hbnRpY3MKKyAgICAgICAgICAgICAvLyBT UEVDOiAgIHlpZWxkcyBhIHNpbmdsZSBtZXRob2Qgd2l0aCByZXR1cm4gQ1R5cGUgVSB0aGVuIGEg bG93ZXItYm91bmQKKyAgICAgICAgICAgICAvLyBTUEVDOiAgIGluZmVyZW5jZSBpcyBtYWRlIGZy b20gVSB0byBUYi4KKyAKKy0gICAgICAgICAgICBpZiAoIShwU291cmNlIGlzIEV4cHJNZW1iZXJH cm91cCBtZW1HcnApKQorKyAgICAgICAgICAgIGlmICghKHBTb3VyY2UgaXMgRXhwck1lbWJlckdy b3VwKSkKKyAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg ICAgICAgICAgICB9CisrICAgICAgICAgICAgRXhwck1lbWJlckdyb3VwIG1lbUdycCA9IChFeHBy TWVtYmVyR3JvdXApcFNvdXJjZTsKKyAgICAgICAgICAgICBwVHlwZSA9IHBUeXBlLkdldERlbGVn YXRlVHlwZU9mUG9zc2libGVFeHByZXNzaW9uKCk7CisgICAgICAgICAgICAgaWYgKCFwVHlwZS5p c0RlbGVnYXRlVHlwZSgpKQorICAgICAgICAgICAgIHsKK2RpZmYgLS1naXQgYS9zcmMvTWljcm9z b2Z0LkNTaGFycC9zcmMvTWljcm9zb2Z0L0NTaGFycC9SdW50aW1lQmluZGVyL1NlbWFudGljcy9O dWxsYWJsZS5jcyBiL3NyYy9NaWNyb3NvZnQuQ1NoYXJwL3NyYy9NaWNyb3NvZnQvQ1NoYXJwL1J1 bnRpbWVCaW5kZXIvU2VtYW50aWNzL051bGxhYmxlLmNzCitpbmRleCAxOWRiZWE3ZTJmLi4xZDI1 OGYyZDY3IDEwMDY0NAorLS0tIGEvc3JjL01pY3Jvc29mdC5DU2hhcnAvc3JjL01pY3Jvc29mdC9D U2hhcnAvUnVudGltZUJpbmRlci9TZW1hbnRpY3MvTnVsbGFibGUuY3MKKysrKyBiL3NyYy9NaWNy b3NvZnQuQ1NoYXJwL3NyYy9NaWNyb3NvZnQvQ1NoYXJwL1J1bnRpbWVCaW5kZXIvU2VtYW50aWNz L051bGxhYmxlLmNzCitAQCAtMjksOCArMjksOSBAQCBuYW1lc3BhY2UgTWljcm9zb2Z0LkNTaGFy cC5SdW50aW1lQmluZGVyLlNlbWFudGljcworICAgICAgICAgeworICAgICAgICAgICAgIERlYnVn LkFzc2VydChleHByICE9IG51bGwpOworIAorLSAgICAgICAgICAgIGlmIChleHByIGlzIEV4cHJD YWxsIHBDYWxsICYmIHBDYWxsLk1lbWJlckdyb3VwLk9wdGlvbmFsT2JqZWN0ID09IG51bGwpCisr ICAgICAgICAgICAgaWYgKGV4cHIgaXMgRXhwckNhbGwgJiYgKChFeHByQ2FsbClleHByKS5NZW1i ZXJHcm91cC5PcHRpb25hbE9iamVjdCA9PSBudWxsKQorICAgICAgICAgICAgIHsKKysgICAgICAg ICAgICAgICAgRXhwckNhbGwgcENhbGwgPSAoRXhwckNhbGwpZXhwcjsKKyAgICAgICAgICAgICAg ICAgTWV0aG9kU3ltYm9sIG1ldGggPSBwQ2FsbC5NZXRoV2l0aEluc3QuTWV0aCgpOworICAgICAg ICAgICAgICAgICBpZiAobWV0aCAhPSBudWxsICYmIG1ldGguSXNOdWxsYWJsZUNvbnN0cnVjdG9y KCkpCisgICAgICAgICAgICAgICAgIHsKK0BAIC00NSw3ICs0Niw4IEBAIG5hbWVzcGFjZSBNaWNy b3NvZnQuQ1NoYXJwLlJ1bnRpbWVCaW5kZXIuU2VtYW50aWNzCisgCisgICAgICAgICBwdWJsaWMg c3RhdGljIEV4cHIgU3RyaXBOdWxsYWJsZUNvbnN0cnVjdG9yKEV4cHIgcEV4cHIpCisgICAgICAg ICB7CistICAgICAgICAgICAgd2hpbGUgKElzTnVsbGFibGVDb25zdHJ1Y3RvcihwRXhwciwgb3V0 IEV4cHJDYWxsIGNhbGwpKQorKyAgICAgICAgICAgIEV4cHJDYWxsIGNhbGw7CisrICAgICAgICAg ICAgd2hpbGUgKElzTnVsbGFibGVDb25zdHJ1Y3RvcihwRXhwciwgb3V0IGNhbGwpKQorICAgICAg ICAgICAgIHsKKyAgICAgICAgICAgICAgICAgcEV4cHIgPSBjYWxsLk9wdGlvbmFsQXJndW1lbnRz OworICAgICAgICAgICAgICAgICBEZWJ1Zy5Bc3NlcnQocEV4cHIgIT0gbnVsbCAmJiAhKHBFeHBy IGlzIEV4cHJMaXN0KSk7CitAQCAtNjAsNyArNjIsOCBAQCBuYW1lc3BhY2UgTWljcm9zb2Z0LkNT aGFycC5SdW50aW1lQmluZGVyLlNlbWFudGljcworICAgICAgICAgICAgIERlYnVnLkFzc2VydChl eHByU3JjICE9IG51bGwgJiYgZXhwclNyYy5UeXBlLklzTnVsbGFibGVUeXBlKCkpOworIAorICAg ICAgICAgICAgIC8vIEZvciBuZXcgVD8oeCksIHRoZSBhbnN3ZXIgaXMgeC4KKy0gICAgICAgICAg ICBpZiAoSXNOdWxsYWJsZUNvbnN0cnVjdG9yKGV4cHJTcmMsIG91dCBFeHByQ2FsbCBjYWxsKSkK KysgICAgICAgICAgICBFeHByQ2FsbCBjYWxsOworKyAgICAgICAgICAgIGlmIChJc051bGxhYmxl Q29uc3RydWN0b3IoZXhwclNyYywgb3V0IGNhbGwpKQorICAgICAgICAgICAgIHsKKyAgICAgICAg ICAgICAgICAgdmFyIGFyZ3MgPSBjYWxsLk9wdGlvbmFsQXJndW1lbnRzOworICAgICAgICAgICAg ICAgICBEZWJ1Zy5Bc3NlcnQoYXJncyAhPSBudWxsICYmICEoYXJncyBpcyBFeHByTGlzdCkpOwor ZGlmZiAtLWdpdCBhL3NyYy9NaWNyb3NvZnQuQ1NoYXJwL3NyYy9NaWNyb3NvZnQvQ1NoYXJwL1J1 bnRpbWVCaW5kZXIvU2VtYW50aWNzL1RyZWUvRXhwcmVzc2lvbkl0ZXJhdG9yLmNzIGIvc3JjL01p Y3Jvc29mdC5DU2hhcnAvc3JjL01pY3Jvc29mdC9DU2hhcnAvUnVudGltZUJpbmRlci9TZW1hbnRp Y3MvVHJlZS9FeHByZXNzaW9uSXRlcmF0b3IuY3MKK2luZGV4IDk2ZWUwMzI0MjIuLjkzOTc1NDNk ZTYgMTAwNjQ0CistLS0gYS9zcmMvTWljcm9zb2Z0LkNTaGFycC9zcmMvTWljcm9zb2Z0L0NTaGFy cC9SdW50aW1lQmluZGVyL1NlbWFudGljcy9UcmVlL0V4cHJlc3Npb25JdGVyYXRvci5jcworKysr IGIvc3JjL01pY3Jvc29mdC5DU2hhcnAvc3JjL01pY3Jvc29mdC9DU2hhcnAvUnVudGltZUJpbmRl ci9TZW1hbnRpY3MvVHJlZS9FeHByZXNzaW9uSXRlcmF0b3IuY3MKK0BAIC04Myw4ICs4Myw5IEBA IG5hbWVzcGFjZSBNaWNyb3NvZnQuQ1NoYXJwLlJ1bnRpbWVCaW5kZXIuU2VtYW50aWNzCisgICAg ICAgICAgICAgICAgIF9wTGlzdCA9IG51bGw7CisgICAgICAgICAgICAgICAgIF9wQ3VycmVudCA9 IG51bGw7CisgICAgICAgICAgICAgfQorLSAgICAgICAgICAgIGVsc2UgaWYgKHBFeHByIGlzIEV4 cHJMaXN0IHBMaXN0KQorKyAgICAgICAgICAgIGVsc2UgaWYgKHBFeHByIGlzIEV4cHJMaXN0KQor ICAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgRXhwckxpc3QgcExpc3QgPSAoRXhwckxp c3QpcEV4cHI7CisgICAgICAgICAgICAgICAgIF9wTGlzdCA9IHBMaXN0OworICAgICAgICAgICAg ICAgICBfcEN1cnJlbnQgPSBwTGlzdC5PcHRpb25hbEVsZW1lbnQ7CisgICAgICAgICAgICAgfQor ZGlmZiAtLWdpdCBhL3NyYy9NaWNyb3NvZnQuQ1NoYXJwL3NyYy9NaWNyb3NvZnQvQ1NoYXJwL1J1 bnRpbWVCaW5kZXIvU2VtYW50aWNzL1RyZWUvVmlzaXRvcnMvRXhwclZpc2l0b3JCYXNlLmNzIGIv c3JjL01pY3Jvc29mdC5DU2hhcnAvc3JjL01pY3Jvc29mdC9DU2hhcnAvUnVudGltZUJpbmRlci9T ZW1hbnRpY3MvVHJlZS9WaXNpdG9ycy9FeHByVmlzaXRvckJhc2UuY3MKK2luZGV4IGUyY2U4ZTg4 ZjUuLmRlZDRkMGIyMTYgMTAwNjQ0CistLS0gYS9zcmMvTWljcm9zb2Z0LkNTaGFycC9zcmMvTWlj cm9zb2Z0L0NTaGFycC9SdW50aW1lQmluZGVyL1NlbWFudGljcy9UcmVlL1Zpc2l0b3JzL0V4cHJW aXNpdG9yQmFzZS5jcworKysrIGIvc3JjL01pY3Jvc29mdC5DU2hhcnAvc3JjL01pY3Jvc29mdC9D U2hhcnAvUnVudGltZUJpbmRlci9TZW1hbnRpY3MvVHJlZS9WaXNpdG9ycy9FeHByVmlzaXRvckJh c2UuY3MKK0BAIC0yMSw4ICsyMSw5IEBAIG5hbWVzcGFjZSBNaWNyb3NvZnQuQ1NoYXJwLlJ1bnRp bWVCaW5kZXIuU2VtYW50aWNzCisgICAgICAgICAgICAgICAgIHJldHVybiBwUmVzdWx0OworICAg ICAgICAgICAgIH0KKyAKKy0gICAgICAgICAgICBpZiAocEV4cHIgaXMgRXhwclN0YXRlbWVudCBz dGF0ZW1lbnQpCisrICAgICAgICAgICAgaWYgKHBFeHByIGlzIEV4cHJTdGF0ZW1lbnQpCisgICAg ICAgICAgICAgeworKyAgICAgICAgICAgICAgICBFeHByU3RhdGVtZW50IHN0YXRlbWVudCA9IChF eHByU3RhdGVtZW50KXBFeHByOworICAgICAgICAgICAgICAgICByZXR1cm4gQ2FjaGVFeHByTWFw cGluZyhwRXhwciwgRGlzcGF0Y2hTdGF0ZW1lbnRMaXN0KHN0YXRlbWVudCkpOworICAgICAgICAg ICAgIH0KKyAKK0BAIC0yNzksMTEgKzI4MCwxMyBAQCBuYW1lc3BhY2UgTWljcm9zb2Z0LkNTaGFy cC5SdW50aW1lQmluZGVyLlNlbWFudGljcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICBy ZXR1cm47CisgICAgICAgICAgICAgICAgICAgICAgICAgfQorIAorLSAgICAgICAgICAgICAgICAg ICAgICAgIGlmICghKG5leHROb2RlIGlzIEV4cHJMaXN0IG5leHQpKQorKyAgICAgICAgICAgICAg ICAgICAgICAgIEV4cHJMaXN0IG5leHQ7CisrICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEo bmV4dE5vZGUgaXMgRXhwckxpc3QpKQorICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgbGlzdC5PcHRpb25hbE5leHRMaXN0Tm9kZSA9IFZpc2l0 KG5leHROb2RlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAg ICAgICAgICAgICAgICAgICAgIH0KKysgICAgICAgICAgICAgICAgICAgICAgICBuZXh0ID0gKEV4 cHJMaXN0KW5leHROb2RlOworIAorICAgICAgICAgICAgICAgICAgICAgICAgIGxpc3QgPSBuZXh0 OworICAgICAgICAgICAgICAgICAgICAgfQorZGlmZiAtLWdpdCBhL3NyYy9NaWNyb3NvZnQuQ1No YXJwL3NyYy9NaWNyb3NvZnQvQ1NoYXJwL1J1bnRpbWVCaW5kZXIvU2VtYW50aWNzL1RyZWUvVmlz aXRvcnMvRXhwcmVzc2lvblRyZWVSZXdyaXRlci5jcyBiL3NyYy9NaWNyb3NvZnQuQ1NoYXJwL3Ny Yy9NaWNyb3NvZnQvQ1NoYXJwL1J1bnRpbWVCaW5kZXIvU2VtYW50aWNzL1RyZWUvVmlzaXRvcnMv RXhwcmVzc2lvblRyZWVSZXdyaXRlci5jcworaW5kZXggOGE4NDFlZTVkOS4uY2I0MGE1OWY2ZCAx MDA2NDQKKy0tLSBhL3NyYy9NaWNyb3NvZnQuQ1NoYXJwL3NyYy9NaWNyb3NvZnQvQ1NoYXJwL1J1 bnRpbWVCaW5kZXIvU2VtYW50aWNzL1RyZWUvVmlzaXRvcnMvRXhwcmVzc2lvblRyZWVSZXdyaXRl ci5jcworKysrIGIvc3JjL01pY3Jvc29mdC5DU2hhcnAvc3JjL01pY3Jvc29mdC9DU2hhcnAvUnVu dGltZUJpbmRlci9TZW1hbnRpY3MvVHJlZS9WaXNpdG9ycy9FeHByZXNzaW9uVHJlZVJld3JpdGVy LmNzCitAQCAtNTQsOCArNTQsOSBAQCBuYW1lc3BhY2UgTWljcm9zb2Z0LkNTaGFycC5SdW50aW1l QmluZGVyLlNlbWFudGljcworICAgICAgICAgICAgIC8vIEZvciBhc3NpZ25tZW50cywgd2UgZWl0 aGVyIGhhdmUgYSBtZW1iZXIgYXNzaWdubWVudCBvciBhbiBpbmRleGVkIGFzc2lnbm1lbnQuCisg ICAgICAgICAgICAgLy9EZWJ1Zy5Bc3NlcnQoYXNzaWdubWVudC5HZXRMSFMoKS5pc1BST1AoKSB8 fCBhc3NpZ25tZW50LkdldExIUygpLmlzRklFTEQoKSB8fCBhc3NpZ25tZW50LkdldExIUygpLmlz QVJSQVlJTkRFWCgpIHx8IGFzc2lnbm1lbnQuR2V0TEhTKCkuaXNMT0NBTCgpKTsKKyAgICAgICAg ICAgICBFeHByIGxoczsKKy0gICAgICAgICAgICBpZiAoYXNzaWdubWVudC5MSFMgaXMgRXhwclBy b3BlcnR5IHByb3ApCisrICAgICAgICAgICAgaWYgKGFzc2lnbm1lbnQuTEhTIGlzIEV4cHJQcm9w ZXJ0eSkKKyAgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgIEV4cHJQcm9wZXJ0eSBwcm9w ID0gKEV4cHJQcm9wZXJ0eSlhc3NpZ25tZW50LkxIUzsKKyAgICAgICAgICAgICAgICAgaWYgKHBy b3AuT3B0aW9uYWxBcmd1bWVudHM9PSBudWxsKQorICAgICAgICAgICAgICAgICB7CisgICAgICAg ICAgICAgICAgICAgICAvLyBSZWd1bGFyIHByb3BlcnR5LgorQEAgLTMxOCw4ICszMTksOSBAQCBu YW1lc3BhY2UgTWljcm9zb2Z0LkNTaGFycC5SdW50aW1lQmluZGVyLlNlbWFudGljcworICAgICAg ICAgICAgICAgICAvLyBjYW4gaGFuZGxlIGluIHRoZSBnZW5lcmFsIGNhc2UgYWxsIGltcGxpY2l0 IGJveGluZyBjb252ZXJzaW9ucy4gUmlnaHQgbm93IGl0IAorICAgICAgICAgICAgICAgICAvLyBy ZXF1aXJlcyB0aGF0IGFsbCBhcmd1bWVudHMgdG8gYSBjYWxsIHRoYXQgbmVlZCB0byBiZSBib3hl ZCBiZSBleHBsaWNpdGx5IGJveGVkLgorIAorLSAgICAgICAgICAgICAgICBpZiAocE9iamVjdCAh PSBudWxsICYmIHBPYmplY3QgaXMgRXhwckNhc3QgY2FzdCAmJiBjYXN0LklzQm94aW5nQ2FzdCkK KysgICAgICAgICAgICAgICAgaWYgKHBPYmplY3QgIT0gbnVsbCAmJiBwT2JqZWN0IGlzIEV4cHJD YXN0ICYmICgoRXhwckNhc3QpcE9iamVjdCkuSXNCb3hpbmdDYXN0KQorICAgICAgICAgICAgICAg ICB7CisrICAgICAgICAgICAgICAgICAgICBFeHByQ2FzdCBjYXN0ID0gKEV4cHJDYXN0KSBwT2Jq ZWN0OworICAgICAgICAgICAgICAgICAgICAgcE9iamVjdCA9IGNhc3QuQXJndW1lbnQ7CisgICAg ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgcE9iamVjdCA9IFZpc2l0KHBPYmplY3Qp OworQEAgLTU5Nyw4ICs1OTksOSBAQCBuYW1lc3BhY2UgTWljcm9zb2Z0LkNTaGFycC5SdW50aW1l QmluZGVyLlNlbWFudGljcworICAgICAgICAgICAgIGlmICh1ZGNhbGwgIT0gbnVsbCkKKyAgICAg ICAgICAgICB7CisgICAgICAgICAgICAgICAgIERlYnVnLkFzc2VydCh1ZGNhbGwuS2luZCA9PSBF eHByZXNzaW9uS2luZC5DYWxsIHx8IHVkY2FsbC5LaW5kID09IEV4cHJlc3Npb25LaW5kLlVzZXJM b2dpY2FsT3ApOworLSAgICAgICAgICAgICAgICBpZiAodWRjYWxsIGlzIEV4cHJDYWxsIGFzY2Fs bCkKKysgICAgICAgICAgICAgICAgaWYgKHVkY2FsbCBpcyBFeHByQ2FsbCkKKyAgICAgICAgICAg ICAgICAgeworKyAgICAgICAgICAgICAgICAgICAgRXhwckNhbGwgYXNjYWxsID0gKEV4cHJDYWxs KXVkY2FsbDsKKyAgICAgICAgICAgICAgICAgICAgIEV4cHJMaXN0IGFyZ3MgPSAoRXhwckxpc3Qp YXNjYWxsLk9wdGlvbmFsQXJndW1lbnRzOworICAgICAgICAgICAgICAgICAgICAgRGVidWcuQXNz ZXJ0KGFyZ3MuT3B0aW9uYWxOZXh0TGlzdE5vZGUuS2luZCAhPSBFeHByZXNzaW9uS2luZC5MaXN0 KTsKKyAgICAgICAgICAgICAgICAgICAgIHAxID0gYXJncy5PcHRpb25hbEVsZW1lbnQ7CitAQCAt NzMxLDggKzczNCw5IEBAIG5hbWVzcGFjZSBNaWNyb3NvZnQuQ1NoYXJwLlJ1bnRpbWVCaW5kZXIu U2VtYW50aWNzCisgICAgICAgICAgICAgRXhwckJsb2NrIGJvZHkgPSBhbm9ubWV0aC5PcHRpb25h bEJvZHk7CisgCisgICAgICAgICAgICAgLy8gVGhlIG1vc3QgbGlrZWx5IGNhc2U6CistICAgICAg ICAgICAgaWYgKGJvZHkuT3B0aW9uYWxTdGF0ZW1lbnRzIGlzIEV4cHJSZXR1cm4gcmV0KQorKyAg ICAgICAgICAgIGlmIChib2R5Lk9wdGlvbmFsU3RhdGVtZW50cyBpcyBFeHByUmV0dXJuKQorICAg ICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgRXhwclJldHVybiByZXQgPSAoRXhwclJldHVy bilib2R5Lk9wdGlvbmFsU3RhdGVtZW50czsKKyAgICAgICAgICAgICAgICAgRGVidWcuQXNzZXJ0 KHJldC5PcHRpb25hbE9iamVjdCAhPSBudWxsKTsKKyAgICAgICAgICAgICAgICAgcmV0dXJuIFZp c2l0KHJldC5PcHRpb25hbE9iamVjdCk7CisgICAgICAgICAgICAgfQorQEAgLTg1NCw4ICs4NTgs OSBAQCBuYW1lc3BhY2UgTWljcm9zb2Z0LkNTaGFycC5SdW50aW1lQmluZGVyLlNlbWFudGljcwor ICAgICAgICAgICAgICAgICBFeHByIHBVRENvbnZlcnNpb24gPSBjYWxsPy5QQ29udmVyc2lvbnM7 CisgICAgICAgICAgICAgICAgIGlmIChwVURDb252ZXJzaW9uICE9IG51bGwpCisgICAgICAgICAg ICAgICAgIHsKKy0gICAgICAgICAgICAgICAgICAgIGlmIChwVURDb252ZXJzaW9uIGlzIEV4cHJD YWxsIGNvbnZDYWxsKQorKyAgICAgICAgICAgICAgICAgICAgaWYgKHBVRENvbnZlcnNpb24gaXMg RXhwckNhbGwpCisgICAgICAgICAgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgICAgICAg ICAgRXhwckNhbGwgY29udkNhbGwgPSAoRXhwckNhbGwpcFVEQ29udmVyc2lvbjsKKyAgICAgICAg ICAgICAgICAgICAgICAgICBFeHByIHBVRENvbnZlcnNpb25Bcmd1bWVudCA9IGNvbnZDYWxsLk9w dGlvbmFsQXJndW1lbnRzOworICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChJc051bGxhYmxl VmFsdWVBY2Nlc3MocFVEQ29udmVyc2lvbkFyZ3VtZW50LCBwQXJndW1lbnQpKQorICAgICAgICAg ICAgICAgICAgICAgICAgIHsKK0BAIC0xMjM4LDIzICsxMjQzLDI1IEBAIG5hbWVzcGFjZSBNaWNy b3NvZnQuQ1NoYXJwLlJ1bnRpbWVCaW5kZXIuU2VtYW50aWNzCisgICAgICAgICBwcml2YXRlIGJv b2wgSXNOdWxsYWJsZVZhbHVlQWNjZXNzKEV4cHIgcEV4cHIsIEV4cHIgcE9iamVjdCkKKyAgICAg ICAgIHsKKyAgICAgICAgICAgICBEZWJ1Zy5Bc3NlcnQocEV4cHIgIT0gbnVsbCk7CistICAgICAg ICAgICAgcmV0dXJuIHBFeHByIGlzIEV4cHJQcm9wZXJ0eSBwcm9wICYmIHByb3AuTWVtYmVyR3Jv dXAuT3B0aW9uYWxPYmplY3QgPT0gcE9iamVjdCAmJiBwT2JqZWN0LlR5cGUuSXNOdWxsYWJsZVR5 cGUoKTsKKysgICAgICAgICAgICByZXR1cm4gcEV4cHIgaXMgRXhwclByb3BlcnR5ICYmICgoRXhw clByb3BlcnR5KXBFeHByKS5NZW1iZXJHcm91cC5PcHRpb25hbE9iamVjdCA9PSBwT2JqZWN0ICYm IHBPYmplY3QuVHlwZS5Jc051bGxhYmxlVHlwZSgpOworICAgICAgICAgfQorIAorICAgICAgICAg cHJpdmF0ZSBib29sIElzRGVsZWdhdGVDb25zdHJ1Y3RvckNhbGwoRXhwciBwRXhwcikKKyAgICAg ICAgIHsKKyAgICAgICAgICAgICBEZWJ1Zy5Bc3NlcnQocEV4cHIgIT0gbnVsbCk7CistICAgICAg ICAgICAgaWYgKCEocEV4cHIgaXMgRXhwckNhbGwgcENhbGwpKQorKyAgICAgICAgICAgIEV4cHJD YWxsIHBDYWxsOworKyAgICAgICAgICAgIGlmICghKHBFeHByIGlzIEV4cHJDYWxsKSkKKyAgICAg ICAgICAgICB7CisgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICB9 CisrICAgICAgICAgICAgcENhbGwgPSAoRXhwckNhbGwpcEV4cHI7CisgCisgICAgICAgICAgICAg cmV0dXJuIHBDYWxsLk1ldGhXaXRoSW5zdC5NZXRoKCkgIT0gbnVsbCAmJgorICAgICAgICAgICAg ICAgICBwQ2FsbC5NZXRoV2l0aEluc3QuTWV0aCgpLklzQ29uc3RydWN0b3IoKSAmJgorICAgICAg ICAgICAgICAgICBwQ2FsbC5UeXBlLmlzRGVsZWdhdGVUeXBlKCkgJiYKKyAgICAgICAgICAgICAg ICAgcENhbGwuT3B0aW9uYWxBcmd1bWVudHMgIT0gbnVsbCAmJgorLSAgICAgICAgICAgICAgICBw Q2FsbC5PcHRpb25hbEFyZ3VtZW50cyBpcyBFeHByTGlzdCBsaXN0ICYmCistICAgICAgICAgICAg ICAgIGxpc3QuT3B0aW9uYWxOZXh0TGlzdE5vZGUuS2luZCA9PSBFeHByZXNzaW9uS2luZC5GdW5j dGlvblBvaW50ZXI7CisrICAgICAgICAgICAgICAgIChwQ2FsbC5PcHRpb25hbEFyZ3VtZW50cyBp cyBFeHByTGlzdCkgJiYKKysgICAgICAgICAgICAgICAgKChFeHByTGlzdClwQ2FsbC5PcHRpb25h bEFyZ3VtZW50cykuT3B0aW9uYWxOZXh0TGlzdE5vZGUuS2luZCA9PSBFeHByZXNzaW9uS2luZC5G dW5jdGlvblBvaW50ZXI7CisgICAgICAgICB9CisgICAgICAgICBwcml2YXRlIHN0YXRpYyBib29s IGlzRW51bVRvRGVjaW1hbENvbnZlcnNpb24oQ1R5cGUgYXJndHlwZSwgQ1R5cGUgZGVzdHR5cGUp CisgICAgICAgICB7CitkaWZmIC0tZ2l0IGEvc3JjL1N5c3RlbS5Db2xsZWN0aW9ucy9zcmMvU3lz dGVtL0NvbGxlY3Rpb25zL0dlbmVyaWMvU29ydGVkU2V0LlRyZWVTdWJTZXQuY3MgYi9zcmMvU3lz dGVtLkNvbGxlY3Rpb25zL3NyYy9TeXN0ZW0vQ29sbGVjdGlvbnMvR2VuZXJpYy9Tb3J0ZWRTZXQu VHJlZVN1YlNldC5jcworaW5kZXggNGViODE3YzBhZi4uNjcxNjM2ZjQyOCAxMDA2NDQKKy0tLSBh L3NyYy9TeXN0ZW0uQ29sbGVjdGlvbnMvc3JjL1N5c3RlbS9Db2xsZWN0aW9ucy9HZW5lcmljL1Nv cnRlZFNldC5UcmVlU3ViU2V0LmNzCisrKysgYi9zcmMvU3lzdGVtLkNvbGxlY3Rpb25zL3NyYy9T eXN0ZW0vQ29sbGVjdGlvbnMvR2VuZXJpYy9Tb3J0ZWRTZXQuVHJlZVN1YlNldC5jcworQEAgLTM1 Miw3ICszNTIsMTAgQEAgbmFtZXNwYWNlIFN5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljCisgICAg ICAgICAgICAgICAgIHRocm93IG5ldyBQbGF0Zm9ybU5vdFN1cHBvcnRlZEV4Y2VwdGlvbigpOwor ICAgICAgICAgICAgIH0KKyAKKy0gICAgICAgICAgICBwcm90ZWN0ZWQgb3ZlcnJpZGUgdm9pZCBP bkRlc2VyaWFsaXphdGlvbihPYmplY3Qgc2VuZGVyKSA9PiB0aHJvdyBuZXcgUGxhdGZvcm1Ob3RT dXBwb3J0ZWRFeGNlcHRpb24oKTsKKysgICAgICAgICAgICBwcm90ZWN0ZWQgb3ZlcnJpZGUgdm9p ZCBPbkRlc2VyaWFsaXphdGlvbihPYmplY3Qgc2VuZGVyKQorKyAgICAgICAgICAgIHsKKysgICAg ICAgICAgICAgICAgdGhyb3cgbmV3IFBsYXRmb3JtTm90U3VwcG9ydGVkRXhjZXB0aW9uKCk7Cisr ICAgICAgICAgICAgfQorICAgICAgICAgfQorICAgICB9CisgfQorZGlmZiAtLWdpdCBhL3NyYy9T eXN0ZW0uTGlucS5FeHByZXNzaW9ucy9zcmMvU3lzdGVtL0R5bmFtaWMvVXRpbHMvVHlwZUV4dGVu c2lvbnMuY3MgYi9zcmMvU3lzdGVtLkxpbnEuRXhwcmVzc2lvbnMvc3JjL1N5c3RlbS9EeW5hbWlj L1V0aWxzL1R5cGVFeHRlbnNpb25zLmNzCitpbmRleCBjNDVjYWJhMDkzLi5lZjlhMjUyMDNkIDEw MDY0NAorLS0tIGEvc3JjL1N5c3RlbS5MaW5xLkV4cHJlc3Npb25zL3NyYy9TeXN0ZW0vRHluYW1p Yy9VdGlscy9UeXBlRXh0ZW5zaW9ucy5jcworKysrIGIvc3JjL1N5c3RlbS5MaW5xLkV4cHJlc3Np b25zL3NyYy9TeXN0ZW0vRHluYW1pYy9VdGlscy9UeXBlRXh0ZW5zaW9ucy5jcworQEAgLTY1LDcg KzY1LDggQEAgbmFtZXNwYWNlIFN5c3RlbS5EeW5hbWljLlV0aWxzCisgICAgICAgICBpbnRlcm5h bCBzdGF0aWMgUGFyYW1ldGVySW5mb1tdIEdldFBhcmFtZXRlcnNDYWNoZWQodGhpcyBNZXRob2RC YXNlIG1ldGhvZCkKKyAgICAgICAgIHsKKyAgICAgICAgICAgICBDYWNoZURpY3Q8TWV0aG9kQmFz ZSwgUGFyYW1ldGVySW5mb1tdPiBwaWMgPSBzX3BhcmFtSW5mb0NhY2hlOworLSAgICAgICAgICAg IGlmICghcGljLlRyeUdldFZhbHVlKG1ldGhvZCwgb3V0IFBhcmFtZXRlckluZm9bXSBwaXMpKQor KyAgICAgICAgICAgIFBhcmFtZXRlckluZm9bXSBwaXM7CisrICAgICAgICAgICAgaWYgKCFwaWMu VHJ5R2V0VmFsdWUobWV0aG9kLCBvdXQgcGlzKSkKKyAgICAgICAgICAgICB7CisgICAgICAgICAg ICAgICAgIHBpcyA9IG1ldGhvZC5HZXRQYXJhbWV0ZXJzKCk7CisgCitkaWZmIC0tZ2l0IGEvc3Jj L1N5c3RlbS5MaW5xLkV4cHJlc3Npb25zL3NyYy9TeXN0ZW0vTGlucS9FeHByZXNzaW9ucy9Db21w aWxlci9MYW1iZGFDb21waWxlci5FeHByZXNzaW9ucy5jcyBiL3NyYy9TeXN0ZW0uTGlucS5FeHBy ZXNzaW9ucy9zcmMvU3lzdGVtL0xpbnEvRXhwcmVzc2lvbnMvQ29tcGlsZXIvTGFtYmRhQ29tcGls ZXIuRXhwcmVzc2lvbnMuY3MKK2luZGV4IGQ4YjFjNjFmNzQuLjhjZWZiZDRmMTkgMTAwNjQ0Cist LS0gYS9zcmMvU3lzdGVtLkxpbnEuRXhwcmVzc2lvbnMvc3JjL1N5c3RlbS9MaW5xL0V4cHJlc3Np b25zL0NvbXBpbGVyL0xhbWJkYUNvbXBpbGVyLkV4cHJlc3Npb25zLmNzCisrKysgYi9zcmMvU3lz dGVtLkxpbnEuRXhwcmVzc2lvbnMvc3JjL1N5c3RlbS9MaW5xL0V4cHJlc3Npb25zL0NvbXBpbGVy L0xhbWJkYUNvbXBpbGVyLkV4cHJlc3Npb25zLmNzCitAQCAtOTUyLDggKzk1Miw5IEBAIG5hbWVz cGFjZSBTeXN0ZW0uTGlucS5FeHByZXNzaW9ucy5Db21waWxlcgorICAgICAgICAgcHJpdmF0ZSB2 b2lkIEVtaXRNZW1iZXJBc3NpZ25tZW50KE1lbWJlckFzc2lnbm1lbnQgYmluZGluZywgVHlwZSBv YmplY3RUeXBlKQorICAgICAgICAgeworICAgICAgICAgICAgIEVtaXRFeHByZXNzaW9uKGJpbmRp bmcuRXhwcmVzc2lvbik7CistICAgICAgICAgICAgaWYgKGJpbmRpbmcuTWVtYmVyIGlzIEZpZWxk SW5mbyBmaSkKKysgICAgICAgICAgICBpZiAoYmluZGluZy5NZW1iZXIgaXMgRmllbGRJbmZvKQor ICAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgRmllbGRJbmZvIGZpID0gKEZpZWxkSW5m byliaW5kaW5nLk1lbWJlcjsKKyAgICAgICAgICAgICAgICAgX2lsZy5FbWl0KE9wQ29kZXMuU3Rm bGQsIGZpKTsKKyAgICAgICAgICAgICB9CisgICAgICAgICAgICAgZWxzZQorQEAgLTEwOTcsNyAr MTA5OCw3IEBAIG5hbWVzcGFjZSBTeXN0ZW0uTGlucS5FeHByZXNzaW9ucy5Db21waWxlcgorICAg ICAgICAgcHJpdmF0ZSBzdGF0aWMgVHlwZSBHZXRNZW1iZXJUeXBlKE1lbWJlckluZm8gbWVtYmVy KQorICAgICAgICAgeworICAgICAgICAgICAgIERlYnVnLkFzc2VydChtZW1iZXIgaXMgRmllbGRJ bmZvIHx8IG1lbWJlciBpcyBQcm9wZXJ0eUluZm8pOworLSAgICAgICAgICAgIHJldHVybiBtZW1i ZXIgaXMgRmllbGRJbmZvIGZpID8gZmkuRmllbGRUeXBlIDogKG1lbWJlciBhcyBQcm9wZXJ0eUlu Zm8pLlByb3BlcnR5VHlwZTsKKysgICAgICAgICAgICByZXR1cm4gbWVtYmVyIGlzIEZpZWxkSW5m byA/ICgoRmllbGRJbmZvKW1lbWJlcikuRmllbGRUeXBlIDogKG1lbWJlciBhcyBQcm9wZXJ0eUlu Zm8pLlByb3BlcnR5VHlwZTsKKyAgICAgICAgIH0KKyAKKyAgICAgICAgICNlbmRyZWdpb24KK2Rp ZmYgLS1naXQgYS9zcmMvU3lzdGVtLkxpbnEuRXhwcmVzc2lvbnMvc3JjL1N5c3RlbS9MaW5xL0V4 cHJlc3Npb25zL01lbWJlckFzc2lnbm1lbnQuY3MgYi9zcmMvU3lzdGVtLkxpbnEuRXhwcmVzc2lv bnMvc3JjL1N5c3RlbS9MaW5xL0V4cHJlc3Npb25zL01lbWJlckFzc2lnbm1lbnQuY3MKK2luZGV4 IDQ3NWE2YzYzY2MuLjA3ODdiMTAxODYgMTAwNjQ0CistLS0gYS9zcmMvU3lzdGVtLkxpbnEuRXhw cmVzc2lvbnMvc3JjL1N5c3RlbS9MaW5xL0V4cHJlc3Npb25zL01lbWJlckFzc2lnbm1lbnQuY3MK KysrKyBiL3NyYy9TeXN0ZW0uTGlucS5FeHByZXNzaW9ucy9zcmMvU3lzdGVtL0xpbnEvRXhwcmVz c2lvbnMvTWVtYmVyQXNzaWdubWVudC5jcworQEAgLTkzLDIzICs5MywyMyBAQCBuYW1lc3BhY2Ug U3lzdGVtLkxpbnEuRXhwcmVzc2lvbnMKKyAKKyAgICAgICAgICAgICAvLyBOdWxsIHBhcmFtTmFt ZSBhcyB0aGVyZSBhcmUgdHdvIHBhdGhzIGhlcmUgd2l0aCBkaWZmZXJlbnQgcGFyYW1ldGVyIG5h bWVzIGF0IHRoZSBBUEkKKyAgICAgICAgICAgICBUeXBlVXRpbHMuVmFsaWRhdGVUeXBlKGRlY1R5 cGUsIG51bGwpOworLSAgICAgICAgICAgIHN3aXRjaCAobWVtYmVyKQorKyAgICAgICAgICAgIGlm IChtZW1iZXIgaXMgUHJvcGVydHlJbmZvKQorICAgICAgICAgICAgIHsKKy0gICAgICAgICAgICAg ICAgY2FzZSBQcm9wZXJ0eUluZm8gcGk6CistICAgICAgICAgICAgICAgICAgICBpZiAoIXBpLkNh bldyaXRlKQorLSAgICAgICAgICAgICAgICAgICAgeworLSAgICAgICAgICAgICAgICAgICAgICAg IHRocm93IEVycm9yLlByb3BlcnR5RG9lc05vdEhhdmVTZXR0ZXIocGksIG5hbWVvZihtZW1iZXIp KTsKKy0gICAgICAgICAgICAgICAgICAgIH0KKy0KKy0gICAgICAgICAgICAgICAgICAgIG1lbWJl clR5cGUgPSBwaS5Qcm9wZXJ0eVR5cGU7CistICAgICAgICAgICAgICAgICAgICBicmVhazsKKy0K Ky0gICAgICAgICAgICAgICAgY2FzZSBGaWVsZEluZm8gZmk6CistICAgICAgICAgICAgICAgICAg ICBtZW1iZXJUeXBlID0gZmkuRmllbGRUeXBlOworLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7 CistCistICAgICAgICAgICAgICAgIGRlZmF1bHQ6CistICAgICAgICAgICAgICAgICAgICB0aHJv dyBFcnJvci5Bcmd1bWVudE11c3RCZUZpZWxkSW5mb09yUHJvcGVydHlJbmZvKG5hbWVvZihtZW1i ZXIpKTsKKysgICAgICAgICAgICAgICAgUHJvcGVydHlJbmZvIHBpID0gKFByb3BlcnR5SW5mbykg bWVtYmVyOworKyAgICAgICAgICAgICAgICBpZiAoIXBpLkNhbldyaXRlKQorKyAgICAgICAgICAg ICAgICB7CisrICAgICAgICAgICAgICAgICAgICB0aHJvdyBFcnJvci5Qcm9wZXJ0eURvZXNOb3RI YXZlU2V0dGVyKHBpLCBuYW1lb2YobWVtYmVyKSk7CisrICAgICAgICAgICAgICAgIH0KKysgICAg ICAgICAgICAgICAgbWVtYmVyVHlwZSA9IHBpLlByb3BlcnR5VHlwZTsKKysgICAgICAgICAgICB9 CisrICAgICAgICAgICAgZWxzZSBpZiAobWVtYmVyIGlzIEZpZWxkSW5mbykKKysgICAgICAgICAg ICB7CisrICAgICAgICAgICAgICAgIEZpZWxkSW5mbyBmaSA9IChGaWVsZEluZm8pIG1lbWJlcjsK KysgICAgICAgICAgICAgICAgbWVtYmVyVHlwZSA9IGZpLkZpZWxkVHlwZTsKKysgICAgICAgICAg ICB9CisrICAgICAgICAgICAgZWxzZQorKyAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAg dGhyb3cgRXJyb3IuQXJndW1lbnRNdXN0QmVGaWVsZEluZm9PclByb3BlcnR5SW5mbyhuYW1lb2Yo bWVtYmVyKSk7CisgICAgICAgICAgICAgfQorICAgICAgICAgfQorICAgICB9CitkaWZmIC0tZ2l0 IGEvc3JjL1N5c3RlbS5MaW5xLkV4cHJlc3Npb25zL3NyYy9TeXN0ZW0vTGlucS9FeHByZXNzaW9u cy9NZW1iZXJCaW5kaW5nLmNzIGIvc3JjL1N5c3RlbS5MaW5xLkV4cHJlc3Npb25zL3NyYy9TeXN0 ZW0vTGlucS9FeHByZXNzaW9ucy9NZW1iZXJCaW5kaW5nLmNzCitpbmRleCBjMWM1ODg0NjE4Li40 M2MwNjk4ZjkwIDEwMDY0NAorLS0tIGEvc3JjL1N5c3RlbS5MaW5xLkV4cHJlc3Npb25zL3NyYy9T eXN0ZW0vTGlucS9FeHByZXNzaW9ucy9NZW1iZXJCaW5kaW5nLmNzCisrKysgYi9zcmMvU3lzdGVt LkxpbnEuRXhwcmVzc2lvbnMvc3JjL1N5c3RlbS9MaW5xL0V4cHJlc3Npb25zL01lbWJlckJpbmRp bmcuY3MKK0BAIC02MSw2ICs2MSw5IEBAIG5hbWVzcGFjZSBTeXN0ZW0uTGlucS5FeHByZXNzaW9u cworICAgICAgICAgICAgIHJldHVybiBFeHByZXNzaW9uU3RyaW5nQnVpbGRlci5NZW1iZXJCaW5k aW5nVG9TdHJpbmcodGhpcyk7CisgICAgICAgICB9CisgCistICAgICAgICBpbnRlcm5hbCB2aXJ0 dWFsIHZvaWQgVmFsaWRhdGVBc0RlZmluZWRIZXJlKGludCBpbmRleCkgPT4gdGhyb3cgRXJyb3Iu VW5rbm93bkJpbmRpbmdUeXBlKGluZGV4KTsKKysgICAgICAgIGludGVybmFsIHZpcnR1YWwgdm9p ZCBWYWxpZGF0ZUFzRGVmaW5lZEhlcmUoaW50IGluZGV4KQorKyAgICAgICAgeworKyAgICAgICAg ICAgIHRocm93IEVycm9yLlVua25vd25CaW5kaW5nVHlwZShpbmRleCk7CisrICAgICAgICB9Cisg ICAgIH0KKyB9CitkaWZmIC0tZ2l0IGEvc3JjL1N5c3RlbS5MaW5xLkV4cHJlc3Npb25zL3NyYy9T eXN0ZW0vTGlucS9FeHByZXNzaW9ucy9NZW1iZXJNZW1iZXJCaW5kaW5nLmNzIGIvc3JjL1N5c3Rl bS5MaW5xLkV4cHJlc3Npb25zL3NyYy9TeXN0ZW0vTGlucS9FeHByZXNzaW9ucy9NZW1iZXJNZW1i ZXJCaW5kaW5nLmNzCitpbmRleCBmMzk4MWEyYjFmLi43NWRkNzE0MWRhIDEwMDY0NAorLS0tIGEv c3JjL1N5c3RlbS5MaW5xLkV4cHJlc3Npb25zL3NyYy9TeXN0ZW0vTGlucS9FeHByZXNzaW9ucy9N ZW1iZXJNZW1iZXJCaW5kaW5nLmNzCisrKysgYi9zcmMvU3lzdGVtLkxpbnEuRXhwcmVzc2lvbnMv c3JjL1N5c3RlbS9MaW5xL0V4cHJlc3Npb25zL01lbWJlck1lbWJlckJpbmRpbmcuY3MKK0BAIC0x MjcsMjMgKzEyNywyNCBAQCBuYW1lc3BhY2UgU3lzdGVtLkxpbnEuRXhwcmVzc2lvbnMKKyAKKyAg ICAgICAgICAgICAvLyBOdWxsIHBhcmFtTmFtZSBhcyB0aGVyZSBhcmUgc2V2ZXJhbCBwYXRocyBo ZXJlIHdpdGggZGlmZmVyZW50IHBhcmFtZXRlciBuYW1lcyBhdCB0aGUgQVBJCisgICAgICAgICAg ICAgVHlwZVV0aWxzLlZhbGlkYXRlVHlwZShkZWNUeXBlLCBudWxsLCBhbGxvd0J5UmVmOiB0cnVl LCBhbGxvd1BvaW50ZXI6IHRydWUpOworLSAgICAgICAgICAgIHN3aXRjaCAobWVtYmVyKQorKyAg ICAgICAgICAgIGlmIChtZW1iZXIgaXMgUHJvcGVydHlJbmZvKQorICAgICAgICAgICAgIHsKKy0g ICAgICAgICAgICAgICAgY2FzZSBQcm9wZXJ0eUluZm8gcGk6CistICAgICAgICAgICAgICAgICAg ICBpZiAoIXBpLkNhblJlYWQpCistICAgICAgICAgICAgICAgICAgICB7CistICAgICAgICAgICAg ICAgICAgICAgICAgdGhyb3cgRXJyb3IuUHJvcGVydHlEb2VzTm90SGF2ZUdldHRlcihwaSwgbmFt ZW9mKG1lbWJlcikpOworLSAgICAgICAgICAgICAgICAgICAgfQorLQorLSAgICAgICAgICAgICAg ICAgICAgbWVtYmVyVHlwZSA9IHBpLlByb3BlcnR5VHlwZTsKKy0gICAgICAgICAgICAgICAgICAg IGJyZWFrOworLQorLSAgICAgICAgICAgICAgICBjYXNlIEZpZWxkSW5mbyBmaToKKy0gICAgICAg ICAgICAgICAgICAgIG1lbWJlclR5cGUgPSBmaS5GaWVsZFR5cGU7CistICAgICAgICAgICAgICAg ICAgICBicmVhazsKKysgICAgICAgICAgICAgICAgUHJvcGVydHlJbmZvIHBpID0gKFByb3BlcnR5 SW5mbyltZW1iZXI7CisrICAgICAgICAgICAgICAgIGlmICghcGkuQ2FuUmVhZCkKKysgICAgICAg ICAgICAgICAgeworKyAgICAgICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IuUHJvcGVydHlEb2Vz Tm90SGF2ZUdldHRlcihwaSwgbmFtZW9mKG1lbWJlcikpOworKyAgICAgICAgICAgICAgICB9Cisg CistICAgICAgICAgICAgICAgIGRlZmF1bHQ6CistICAgICAgICAgICAgICAgICAgICB0aHJvdyBF cnJvci5Bcmd1bWVudE11c3RCZUZpZWxkSW5mb09yUHJvcGVydHlJbmZvKG5hbWVvZihtZW1iZXIp KTsKKysgICAgICAgICAgICAgICAgbWVtYmVyVHlwZSA9IHBpLlByb3BlcnR5VHlwZTsKKysgICAg ICAgICAgICB9CisrICAgICAgICAgICAgZWxzZSBpZiAobWVtYmVyIGlzIEZpZWxkSW5mbykKKysg ICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgIEZpZWxkSW5mbyBmaSA9IChGaWVsZEluZm8p bWVtYmVyOworKyAgICAgICAgICAgICAgICBtZW1iZXJUeXBlID0gZmkuRmllbGRUeXBlOworKyAg ICAgICAgICAgIH0KKysgICAgICAgICAgICBlbHNlCisrICAgICAgICAgICAgeworKyAgICAgICAg ICAgICAgICB0aHJvdyBFcnJvci5Bcmd1bWVudE11c3RCZUZpZWxkSW5mb09yUHJvcGVydHlJbmZv KG5hbWVvZihtZW1iZXIpKTsKKyAgICAgICAgICAgICB9CisgICAgICAgICB9CisgCitkaWZmIC0t Z2l0IGEvc3JjL1N5c3RlbS5OZXQuSHR0cExpc3RlbmVyL3NyYy9TeXN0ZW0vTmV0L1dlYlNvY2tl dHMvSHR0cExpc3RlbmVyV2ViU29ja2V0Q29udGV4dC5jcyBiL3NyYy9TeXN0ZW0uTmV0Lkh0dHBM aXN0ZW5lci9zcmMvU3lzdGVtL05ldC9XZWJTb2NrZXRzL0h0dHBMaXN0ZW5lcldlYlNvY2tldENv bnRleHQuY3MKK2luZGV4IDUzMjE1Nzg5NDYuLmZmNTQ2NzcwMjcgMTAwNjQ0CistLS0gYS9zcmMv U3lzdGVtLk5ldC5IdHRwTGlzdGVuZXIvc3JjL1N5c3RlbS9OZXQvV2ViU29ja2V0cy9IdHRwTGlz dGVuZXJXZWJTb2NrZXRDb250ZXh0LmNzCisrKysgYi9zcmMvU3lzdGVtLk5ldC5IdHRwTGlzdGVu ZXIvc3JjL1N5c3RlbS9OZXQvV2ViU29ja2V0cy9IdHRwTGlzdGVuZXJXZWJTb2NrZXRDb250ZXh0 LmNzCitAQCAtOTQsOCArOTQsOSBAQCBuYW1lc3BhY2UgU3lzdGVtLk5ldC5XZWJTb2NrZXRzCisg ICAgICAgICAgICAgICAgIGlmICghKHVzZXIgaXMgV2luZG93c1ByaW5jaXBhbCkpCisgICAgICAg ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgIC8vIEF1dGhlbnRpY2F0aW9uU2NoZW1l cy5CYXNpYy4KKy0gICAgICAgICAgICAgICAgICAgIGlmICh1c2VyLklkZW50aXR5IGlzIEh0dHBM aXN0ZW5lckJhc2ljSWRlbnRpdHkgYmFzaWNJZGVudGl0eSkKKysgICAgICAgICAgICAgICAgICAg IGlmICh1c2VyLklkZW50aXR5IGlzIEh0dHBMaXN0ZW5lckJhc2ljSWRlbnRpdHkpCisgICAgICAg ICAgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgICAgICAgICAgSHR0cExpc3RlbmVyQmFz aWNJZGVudGl0eSBiYXNpY0lkZW50aXR5ID0gKEh0dHBMaXN0ZW5lckJhc2ljSWRlbnRpdHkpdXNl ci5JZGVudGl0eTsKKyAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEdlbmVyaWNQ cmluY2lwYWwobmV3IEh0dHBMaXN0ZW5lckJhc2ljSWRlbnRpdHkoYmFzaWNJZGVudGl0eS5OYW1l LCBiYXNpY0lkZW50aXR5LlBhc3N3b3JkKSwgbnVsbCk7CisgICAgICAgICAgICAgICAgICAgICB9 CisgICAgICAgICAgICAgICAgIH0KZGlmZiAtLWdpdCBhL2dudS9wYWNrYWdlcy9wYXRjaGVzL21v bm8tNS40LjAtcGF0Y2hlcy5wYXRjaCBiL2dudS9wYWNrYWdlcy9wYXRjaGVzL21vbm8tNS40LjAt cGF0Y2hlcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uMDA3 YTZiODQ3YzYKLS0tIC9kZXYvbnVsbAorKysgYi9nbnUvcGFja2FnZXMvcGF0Y2hlcy9tb25vLTUu NC4wLXBhdGNoZXMucGF0Y2gKQEAgLTAsMCArMSwxMDAgQEAKK2RpZmYgLS1naXQgYS9tY3MvY2xh c3MvU3lzdGVtL01vbm8uTmV0LlNlY3VyaXR5L0FzeW5jUHJvdG9jb2xSZXF1ZXN0LmNzIGIvbWNz L2NsYXNzL1N5c3RlbS9Nb25vLk5ldC5TZWN1cml0eS9Bc3luY1Byb3RvY29sUmVxdWVzdC5jcwor aW5kZXggM2M1MzdhN2U0MjcuLjU5YmViMTkyNTVmIDEwMDY0NAorLS0tIGEvbWNzL2NsYXNzL1N5 c3RlbS9Nb25vLk5ldC5TZWN1cml0eS9Bc3luY1Byb3RvY29sUmVxdWVzdC5jcworKysrIGIvbWNz L2NsYXNzL1N5c3RlbS9Nb25vLk5ldC5TZWN1cml0eS9Bc3luY1Byb3RvY29sUmVxdWVzdC5jcwor QEAgLTMxNiw3ICszMTYsOSBAQCBuYW1lc3BhY2UgTW9uby5OZXQuU2VjdXJpdHkKKyAJCXsKKyAJ CQlEZWJ1ZyAoIlByb2Nlc3NSZWFkIC0gcmVhZCB1c2VyOiB7MH0gezF9IiwgdGhpcywgc3RhdHVz KTsKKyAKKy0JCQl2YXIgKHJldCwgd2FudE1vcmUpID0gUGFyZW50LlByb2Nlc3NSZWFkIChVc2Vy QnVmZmVyKTsKKysgICAgICAgICAgICBTeXN0ZW0uVmFsdWVUdXBsZTxpbnQsIGJvb2w+IHQwID0g UGFyZW50LlByb2Nlc3NSZWFkIChVc2VyQnVmZmVyKTsKKysgICAgICAgICAgICB2YXIgcmV0ID0g dDAuSXRlbTE7CisrICAgICAgICAgICAgdmFyIHdhbnRNb3JlID0gdDAuSXRlbTI7CisgCisgCQkJ RGVidWcgKCJQcm9jZXNzUmVhZCAtIHJlYWQgdXNlciBkb25lOiB7MH0gLSB7MX0gezJ9IiwgdGhp cywgcmV0LCB3YW50TW9yZSk7CisgCitAQCAtMzU1LDcgKzM1Nyw5IEBAIG5hbWVzcGFjZSBNb25v Lk5ldC5TZWN1cml0eQorIAkJCQlyZXR1cm4gQXN5bmNPcGVyYXRpb25TdGF0dXMuQ29tcGxldGU7 CisgCQkJfQorIAorLQkJCXZhciAocmV0LCB3YW50TW9yZSkgPSBQYXJlbnQuUHJvY2Vzc1dyaXRl IChVc2VyQnVmZmVyKTsKKysgICAgICAgICAgICBTeXN0ZW0uVmFsdWVUdXBsZTxpbnQsIGJvb2w+ IHQwID0gUGFyZW50LlByb2Nlc3NXcml0ZSAoVXNlckJ1ZmZlcik7CisrICAgICAgICAgICAgdmFy IHJldCA9IHQwLkl0ZW0xOworKyAgICAgICAgICAgIHZhciB3YW50TW9yZSA9IHQwLkl0ZW0yOwor IAorIAkJCURlYnVnICgiUHJvY2Vzc1dyaXRlIC0gd3JpdGUgdXNlciBkb25lOiB7MH0gLSB7MX0g ezJ9IiwgdGhpcywgcmV0LCB3YW50TW9yZSk7CisgCitkaWZmIC0tZ2l0IGEvbWNzL2NsYXNzL1N5 c3RlbS9Nb25vLk5ldC5TZWN1cml0eS9Nb2JpbGVBdXRoZW50aWNhdGVkU3RyZWFtLmNzIGIvbWNz L2NsYXNzL1N5c3RlbS9Nb25vLk5ldC5TZWN1cml0eS9Nb2JpbGVBdXRoZW50aWNhdGVkU3RyZWFt LmNzCitpbmRleCAyYjM4MGExYWU2Yy4uNjZlNDViYzFmMWQgMTAwNjQ0CistLS0gYS9tY3MvY2xh c3MvU3lzdGVtL01vbm8uTmV0LlNlY3VyaXR5L01vYmlsZUF1dGhlbnRpY2F0ZWRTdHJlYW0uY3MK KysrKyBiL21jcy9jbGFzcy9TeXN0ZW0vTW9uby5OZXQuU2VjdXJpdHkvTW9iaWxlQXV0aGVudGlj YXRlZFN0cmVhbS5jcworQEAgLTQwMyw4ICs0MDMsMTAgQEAgbmFtZXNwYWNlIE1vbm8uTmV0LlNl Y3VyaXR5CisgCQkJCSAgICAgICBhc3luY1JlYWRSZXF1ZXN0ICE9IG51bGwgPyAiYXN5bmMiIDog IiIsCisgCQkJCSAgICAgICByZWFkQnVmZmVyICE9IG51bGwgPyByZWFkQnVmZmVyLlRvU3RyaW5n ICgpIDogIiIpOworIAkJCQl2YXIgYXN5bmNSZXF1ZXN0ID0gYXN5bmNIYW5kc2hha2VSZXF1ZXN0 ID8/IGFzeW5jUmVhZFJlcXVlc3Q7CistCQkJCXZhciAocmV0LCB3YW50TW9yZSkgPSBJbnRlcm5h bFJlYWQgKGFzeW5jUmVxdWVzdCwgcmVhZEJ1ZmZlciwgYnVmZmVyLCBvZmZzZXQsIHNpemUpOwor LQkJCQlvdXRXYW50TW9yZSA9IHdhbnRNb3JlOworKyAgICAgICAgICAgICAgICBTeXN0ZW0uVmFs dWVUdXBsZTxpbnQsIGJvb2w+IHQwID0gSW50ZXJuYWxSZWFkIChhc3luY1JlcXVlc3QsIHJlYWRC dWZmZXIsIGJ1ZmZlciwgb2Zmc2V0LCBzaXplKTsKKysgICAgICAgICAgICAgICAgdmFyIHJldCA9 IHQwLkl0ZW0xOworKyAgICAgICAgICAgICAgICB2YXIgd2FudE1vcmUgPSB0MC5JdGVtMjsKKysg ICAgICAgICAgICAgICAgb3V0V2FudE1vcmUgPSB3YW50TW9yZTsKKyAJCQkJcmV0dXJuIHJldDsK KyAJCQl9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKKyAJCQkJRGVidWcgKCJJbnRlcm5hbFJlYWQg ZmFpbGVkOiB7MH0iLCBleCk7CitAQCAtNDE0LDcgKzQxNiw3IEBAIG5hbWVzcGFjZSBNb25vLk5l dC5TZWN1cml0eQorIAkJCX0KKyAJCX0KKyAKKy0JCShpbnQsIGJvb2wpIEludGVybmFsUmVhZCAo QXN5bmNQcm90b2NvbFJlcXVlc3QgYXN5bmNSZXF1ZXN0LCBCdWZmZXJPZmZzZXRTaXplIGludGVy bmFsQnVmZmVyLCBieXRlW10gYnVmZmVyLCBpbnQgb2Zmc2V0LCBpbnQgc2l6ZSkKKysJCVN5c3Rl bS5WYWx1ZVR1cGxlPGludCwgYm9vbD4gSW50ZXJuYWxSZWFkIChBc3luY1Byb3RvY29sUmVxdWVz dCBhc3luY1JlcXVlc3QsIEJ1ZmZlck9mZnNldFNpemUgaW50ZXJuYWxCdWZmZXIsIGJ5dGVbXSBi dWZmZXIsIGludCBvZmZzZXQsIGludCBzaXplKQorIAkJeworIAkJCWlmIChhc3luY1JlcXVlc3Qg PT0gbnVsbCkKKyAJCQkJdGhyb3cgbmV3IEludmFsaWRPcGVyYXRpb25FeGNlcHRpb24gKCk7CitA QCAtNDM2LDcgKzQzOCw3IEBAIG5hbWVzcGFjZSBNb25vLk5ldC5TZWN1cml0eQorIAkJCQlEZWJ1 ZyAoIkludGVybmFsUmVhZCAjMTogezB9IHsxfSB7Mn0iLCBpbnRlcm5hbEJ1ZmZlci5PZmZzZXQs IGludGVybmFsQnVmZmVyLlRvdGFsQnl0ZXMsIHNpemUpOworIAkJCQlpbnRlcm5hbEJ1ZmZlci5P ZmZzZXQgPSBpbnRlcm5hbEJ1ZmZlci5TaXplID0gMDsKKyAJCQkJYXN5bmNSZXF1ZXN0LlJlcXVl c3RSZWFkIChzaXplKTsKKy0JCQkJcmV0dXJuICgwLCB0cnVlKTsKKysJCQkJcmV0dXJuIG5ldyBW YWx1ZVR1cGxlPGludCwgYm9vbD4oMCwgdHJ1ZSk7CisgCQkJfQorIAorIAkJCS8qCitAQCAtNDUx LDcgKzQ1Myw3IEBAIG5hbWVzcGFjZSBNb25vLk5ldC5TZWN1cml0eQorIAkJCUJ1ZmZlci5CbG9j a0NvcHkgKGludGVybmFsQnVmZmVyLkJ1ZmZlciwgaW50ZXJuYWxCdWZmZXIuT2Zmc2V0LCBidWZm ZXIsIG9mZnNldCwgbGVuKTsKKyAJCQlpbnRlcm5hbEJ1ZmZlci5PZmZzZXQgKz0gbGVuOworIAkJ CWludGVybmFsQnVmZmVyLlNpemUgLT0gbGVuOworLQkJCXJldHVybiAobGVuLCAhaW50ZXJuYWxC dWZmZXIuQ29tcGxldGUgJiYgbGVuIDwgc2l6ZSk7CisrCQkJcmV0dXJuIG5ldyBWYWx1ZVR1cGxl PGludCwgYm9vbD4obGVuLCAhaW50ZXJuYWxCdWZmZXIuQ29tcGxldGUgJiYgbGVuIDwgc2l6ZSk7 CisgCQl9CisgCisgCQkvKgorQEAgLTYyMCwyMSArNjIyLDIzIEBAIG5hbWVzcGFjZSBNb25vLk5l dC5TZWN1cml0eQorIAkJCX0KKyAJCX0KKyAKKy0JCWludGVybmFsIChpbnQsIGJvb2wpIFByb2Nl c3NSZWFkIChCdWZmZXJPZmZzZXRTaXplIHVzZXJCdWZmZXIpCisrCQlpbnRlcm5hbCBTeXN0ZW0u VmFsdWVUdXBsZTxpbnQsIGJvb2w+IFByb2Nlc3NSZWFkIChCdWZmZXJPZmZzZXRTaXplIHVzZXJC dWZmZXIpCisgCQl7CisgCQkJbG9jayAoaW9Mb2NrKSB7CisgCQkJCS8vIFRoaXMgb3BlcmF0ZXMg b24gdGhlIGludGVybmFsIGJ1ZmZlciBhbmQgd2lsbCBuZXZlciBibG9jay4KKy0JCQkJdmFyIHJl dCA9IHhvYmlsZVRsc0NvbnRleHQuUmVhZCAodXNlckJ1ZmZlci5CdWZmZXIsIHVzZXJCdWZmZXIu T2Zmc2V0LCB1c2VyQnVmZmVyLlNpemUsIG91dCBib29sIHdhbnRNb3JlKTsKKy0JCQkJcmV0dXJu IChyZXQsIHdhbnRNb3JlKTsKKysgICAgICAgICAgICAgICAgYm9vbCB3YW50TW9yZTsKKysJCQkJ dmFyIHJldCA9IHhvYmlsZVRsc0NvbnRleHQuUmVhZCAodXNlckJ1ZmZlci5CdWZmZXIsIHVzZXJC dWZmZXIuT2Zmc2V0LCB1c2VyQnVmZmVyLlNpemUsIG91dCB3YW50TW9yZSk7CisrCQkJCXJldHVy biBuZXcgU3lzdGVtLlZhbHVlVHVwbGU8aW50LCBib29sPihyZXQsIHdhbnRNb3JlKTsKKyAJCQl9 CisgCQl9CisgCistCQlpbnRlcm5hbCAoaW50LCBib29sKSBQcm9jZXNzV3JpdGUgKEJ1ZmZlck9m ZnNldFNpemUgdXNlckJ1ZmZlcikKKysJCWludGVybmFsIFN5c3RlbS5WYWx1ZVR1cGxlPGludCwg Ym9vbD4gUHJvY2Vzc1dyaXRlIChCdWZmZXJPZmZzZXRTaXplIHVzZXJCdWZmZXIpCisgCQl7Cisg CQkJbG9jayAoaW9Mb2NrKSB7CisgCQkJCS8vIFRoaXMgb3BlcmF0ZXMgb24gdGhlIGludGVybmFs IGJ1ZmZlciBhbmQgd2lsbCBuZXZlciBibG9jay4KKy0JCQkJdmFyIHJldCA9IHhvYmlsZVRsc0Nv bnRleHQuV3JpdGUgKHVzZXJCdWZmZXIuQnVmZmVyLCB1c2VyQnVmZmVyLk9mZnNldCwgdXNlckJ1 ZmZlci5TaXplLCBvdXQgYm9vbCB3YW50TW9yZSk7CistCQkJCXJldHVybiAocmV0LCB3YW50TW9y ZSk7CisrICAgICAgICAgICAgICAgIGJvb2wgd2FudE1vcmU7CisrCQkJCXZhciByZXQgPSB4b2Jp bGVUbHNDb250ZXh0LldyaXRlICh1c2VyQnVmZmVyLkJ1ZmZlciwgdXNlckJ1ZmZlci5PZmZzZXQs IHVzZXJCdWZmZXIuU2l6ZSwgb3V0IHdhbnRNb3JlKTsKKysJCQkJcmV0dXJuIG5ldyBTeXN0ZW0u VmFsdWVUdXBsZTxpbnQsIGJvb2w+KHJldCwgd2FudE1vcmUpOworIAkJCX0KKyAJCX0KKyAKLS0g CjIuNDUuMgoK --b1=_tnCtFHx6yIKuYDXqbApeYGjbdIBbQ4owcmVz3FJkVmc Content-Type: text/x-patch; name=v2-0019-gnu-Add-mono-5.10.0.patch Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=v2-0019-gnu-Add-mono-5.10.0.patch RnJvbSBkYjdhODQwOGU3N2JlY2EwN2I5MmNiOGJjMGVjNDQxZmExNjViNDE2IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiB1bm11c2ggPHVubXVzaEBoYXNoYmFuZy5zaD4KRGF0ZTogV2Vk LCAyNyBOb3YgMjAyNCAwMDo1NDoyOApTdWJqZWN0OiBbUEFUQ0ggdjIgMTkvMjFdIGdudTogQWRk IG1vbm8tNS4xMC4wLgoKKiBnbnUvcGFja2FnZXMvZG90bmV0LnNjbQogIChtb25vLTUuMTAuMC1l eHRlcm5hbC1yZXBvLXNwZWNzLCBtb25vLTUuMTAuMCk6IE5ldyB2YXJpYWJsZXMuCiogZ251L3Bh Y2thZ2VzL3BhdGNoZXMvbW9uby01LjEwLjAtbGF0ZXItbWNzLWNoYW5nZXMucGF0Y2g6IE5ldyBw YXRjaC4KKiBnbnUvbG9jYWwubWsgKGRpc3RfcGF0Y2hfREFUQSk6IFJlZ2lzdGVyIG5ldyBwYXRj aC4KLS0tCiBnbnUvbG9jYWwubWsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAg ICAxICsKIGdudS9wYWNrYWdlcy9kb3RuZXQuc2NtICAgICAgICAgICAgICAgICAgICAgICB8ICAx MjggKwogLi4uL21vbm8tNS4xMC4wLWxhdGVyLW1jcy1jaGFuZ2VzLnBhdGNoICAgICAgIHwgNDYw MSArKysrKysrKysrKysrKysrKwogMyBmaWxlcyBjaGFuZ2VkLCA0NzMwIGluc2VydGlvbnMoKykK IGNyZWF0ZSBtb2RlIDEwMDY0NCBnbnUvcGFja2FnZXMvcGF0Y2hlcy9tb25vLTUuMTAuMC1sYXRl ci1tY3MtY2hhbmdlcy5wYXRjaAoKZGlmZiAtLWdpdCBhL2dudS9sb2NhbC5tayBiL2dudS9sb2Nh bC5tawppbmRleCBjYjA5NDUwMjg0MC4uMDRjZjhkYzU3OGUgMTAwNjQ0Ci0tLSBhL2dudS9sb2Nh bC5taworKysgYi9nbnUvbG9jYWwubWsKQEAgLTE4MzQsNiArMTgzNCw3IEBAIGRpc3RfcGF0Y2hf REFUQSA9CQkJCQkJXAogICAlRCUvcGFja2FnZXMvcGF0Y2hlcy9tb25vLTQuOS4wLWZpeC1ydW50 aW1lbWV0YWRhdGF2ZXJzaW9uLnBhdGNoCQlcCiAgICVEJS9wYWNrYWdlcy9wYXRjaGVzL21vbm8t NS40LjAtcGF0Y2hlcy5wYXRjaAkJXAogICAlRCUvcGFja2FnZXMvcGF0Y2hlcy9tb25vLTUuOC4w LXBhdGNoZXMucGF0Y2gJCVwKKyAgJUQlL3BhY2thZ2VzL3BhdGNoZXMvbW9uby01LjEwLjAtbGF0 ZXItbWNzLWNoYW5nZXMucGF0Y2gJXAogICAlRCUvcGFja2FnZXMvcGF0Y2hlcy9tb25vLW1jcy1w YXRjaGVzLWZyb20tNS4xMC4wLnBhdGNoCVwKICAgJUQlL3BhY2thZ2VzL3BhdGNoZXMvbW9zYWlj YXRjaGVyLXVuYnVuZGxlLWh0c2xpYi5wYXRjaAlcCiAgICVEJS9wYWNrYWdlcy9wYXRjaGVzL21y cmVzY3VlLXN1cHBvcnQtbG92ZS0xMS5wYXRjaAkJXApkaWZmIC0tZ2l0IGEvZ251L3BhY2thZ2Vz L2RvdG5ldC5zY20gYi9nbnUvcGFja2FnZXMvZG90bmV0LnNjbQppbmRleCBmYTA1ODllNjJkOC4u MzIxYjcxMjM2ZDggMTAwNjQ0Ci0tLSBhL2dudS9wYWNrYWdlcy9kb3RuZXQuc2NtCisrKyBiL2du dS9wYWNrYWdlcy9kb3RuZXQuc2NtCkBAIC0xNTMzLDMgKzE1MzMsMTMxIEBAIChkZWZpbmUtcHVi bGljIG1vbm8tcHJlLTUuMTAuMAogICAgICAgICAgICAgICAgICAoc2VhcmNoLXBhdGNoZXMgIm1v bm8tbWNzLXBhdGNoZXMtZnJvbS01LjEwLjAucGF0Y2giKSkpKQogICAgICAgKG5hdGl2ZS1pbnB1 dHMgKG1vZGlmeS1pbnB1dHMgKHBhY2thZ2UtbmF0aXZlLWlucHV0cyBtb25vLTUuOC4wKQogICAg ICAgICAgICAgICAgICAgICAgICAocmVwbGFjZSAibW9ubyIgbW9uby01LjguMCkpKSkpKQorCiso ZGVmaW5lIG1vbm8tNS4xMC4wLWV4dGVybmFsLXJlcG8tc3BlY3MKKyAgJygoImFwaS1kb2MtdG9v bHMiICAgICAgICAgICAgICAgImQwM2U4MTk4MzhjNjI0MWY5MmY5MDY1NWNiNDQ4Y2M0N2M5ZTg3 OTEiCisgICAgICIxcmlraTc5ZjNpZzNjeGlndmlzczgxZHo2MDFobjkyYTFnaWZnbG0wbXpqYnM3 NnNmM2ZqIgorICAgICAjOnJlY3Vyc2l2ZT8gI3QpCisgICAgKCJhcGktc25hcHNob3QiICAgICAg ICAgICAgICAgICJkYThiYjhjN2I5NzAzODNjZTI2YzliMDljZTM2ODlkODQzYTYyMjJlIgorICAg ICAiMDBreHcwOXlpcmRoMGJ6a3ZzMHYzaDZia2RqdjlkNGc5YWduM2I4NjQwYXd2cHltM3lxdyIp CisgICAgKCJhc3BuZXR3ZWJzdGFjayIgICAgICAgICAgICAgICJlNzdiMTJlNmNjNWVkMjYwYTk4 NDQ3ZjYwOWU4ODczMzdlNDRlMjk5IgorICAgICAiMHJrczM0NHFyNGZtcDNmczEyNjRkMnFrbW0z NDhtOGQxa2pkN3o0bDk0aWlpcnduMWZxMSIpCisgICAgKCgicmVmZXJlbmNlLWFzc2VtYmxpZXMi ICJiaW5hcnktcmVmZXJlbmNlLWFzc2VtYmxpZXMiKQorICAgICAiZTA0OGZlNGE4OGQyMzdkMTA1 YWUwMmZlMDM2M2E2ODI5NjA5OTM2MiIKKyAgICAgIjBpODdpM3g2OTRmNGc4czJmbGZsdjBhaDg4 Ymx4ZHM3Z2JpeXJ3cm1zY3FkanNpZmh5NDkiKQorICAgICgiYm9ja2J1aWxkIiAgICAgICAgICAg ICAgICAgICAiMTkwOGQ0M2VjNjMwNTQ0MTg5YmQxMTYzMGE1OWVjNGVmNTcxZGIyOCIKKyAgICAg IjFoMTNsZ2ljMmR3bmJ6YzU4bnFoamhhZ24wZjEwMG5sNW1oenJ5amRteXBncmYzY3IxYjMiKQor ICAgICgiYm9yaW5nc3NsIiAgICAgICAgICAgICAgICAgICAiM2UwNzcwZTE4ODM1NzE0NzA4ODYw YmE5ZmUxYWYwNGE5MzI5NzFmZiIKKyAgICAgIjEzOWEwZ2w5MWE1MmsycjZuYTZpYWx6a3F5a2Fq MXJrODh6anJrYXozc2R4eDdubW1nNnkiKQorICAgICgiY2VjaWwiICAgICAgICAgICAgICAgICAg ICAgICAiZGZlZTExZTgwZDU5ZTFhM2Q2ZDljOTE0YzNmMjc3YzcyNmJhY2U1MiIKKyAgICAgIjF5 MmY1OXY5ODh5MmxscXBxaTB6bDlseTBsa3ltOHp3MGE0dmthdjdjcHA2bTVta3EyMDgiKQorICAg ICgoImNlY2lsIiAiY2VjaWwtbGVnYWN5IikgICAgICAiMzNkNTBiODc0ZmQ1MjcxMThiYzM2MWQ4 M2RlM2Q0OTRlOGJiNTVlMSIKKyAgICAgIjFwNGhsMTc5NmliMjZ5a3lmNXNubDZjajBseDB2N21q aDB4cWhqdzZxZGg3NTNuc2p5aGIiKQorICAgICgiY29yZWZ4IiAgICAgICAgICAgICAgICAgICAg ICAiZTMyN2QyODU1ZWQ3NGRhYzk2ZjY4NDc5N2U0ODIwMzQ1Mjk3YTY5MCIKKyAgICAgIjExcGlu bm44endmNGhpMGdmajk4Y3lxa21oN3dybWQ1bWhjZG04NGdrbDlzMmcxOGlhcTAiKQorICAgICgi Y29yZXJ0IiAgICAgICAgICAgICAgICAgICAgICAiYWE2NGIzNzZjMWEyMjM4YjFhNzY4ZTE1OGQx YjExZGFjNzdkNzIyYSIKKyAgICAgIjFnZzRtNDlzMHJ5NXl4OTZkd2phcnk3cjM5NXlwenpnNHNz ejFhamxkMng1ZzdnZ3Z3Z2ciKQorICAgICgiaWtkYXNtIiAgICAgICAgICAgICAgICAgICAgICAi NDY1YzA4MTU1NThmZDQzYzAxMTBmOGQwMGZjMTg2YWMwMDQ0YWM2YSIKKyAgICAgIjB4aXI3cGNn cTA0aGI3czhnOXdzcWRyeXBiNmwyOXJhajNpejVyY3F6ZG0wMDU2azc1dzIiKQorICAgICgoImlr dm0tZm9yayIgImlrdm0iKSAgICAgICAgICAiODQ3ZTA1ZmNlZDVjOWE0MWZmMGYyNGYxZjlkNDBk NWE4YTU3NzJjMSIKKyAgICAgIjFmbDlibTNsbXpmOGlxdjN4NGlxa3o5ZmM1NG13ZHZyeGlzeGcy bnZ3d2NzaTRzYWZmcGkiKQorICAgICgibGlua2VyIiAgICAgICAgICAgICAgICAgICAgICAiODRk Mzc0MjRjZGU2ZTY2YmJmOTk3MTEwYTRkYmRiYTdlNjAwMzhlOSIKKyAgICAgIjA3ZmZrYzlpanpz ZHZia3JjMWZuNXNiMjVzZ3h5YWJzNTRrenlibHdrenBhcndqMDQ3cXIiKQorICAgICgiTmV3dG9u c29mdC5Kc29uIiAgICAgICAgICAgICAiNDcxYzNlMDgwM2E5ZjQwYTBhY2M4YWVjZWIzMWRlNmZm OTNhNTJjNCIKKyAgICAgIjBkZ25nZDVocWs2eWhsZzQwa2FibjZxZG5rbm0zMnpjeDlxNmJtMncz MWNzbnNrNTk3OHMiKQorICAgICgoIk51R2V0LkJ1aWxkVGFza3MiICJudWdldC1idWlsZHRhc2tz IikKKyAgICAgImIyYzMwYmM4MWIyYTc3MzNhNGVlYjI1MmE1NWY2YjRkNTBjZmMzYTEiCisgICAg ICIwMXZhanJmeDZ5MTJmNTI1eGRpd2Zibjlxem15bTJzNjVyYmlxcHk5ZDl4dzBwbnE3Z2JsIikK KyAgICAoKCJOVW5pdExpdGUiICJudW5pdC1saXRlIikgICAgIjcwYmI3MGIwZmZkMDEwOWFhZGFh NmU0ZWExNzg5NzJkNGZiNjNlYTMiCisgICAgICIwbG43cm4xOTYwY2R3bWZxY3NjcDJkMm5jcHdu a25ocTlyZjh2NTNheThnMmMzZzZnaDRxIikKKyAgICA7OyAoInJvc2x5bi1iaW5hcmllcyIgICAg ICAgICAgIjAwZGE1M2M0NzQ2MjUwOTg4YTkyMDU1ZWYzYWM2NTNjY2Y4NGZjNDAiCisgICAgOzsg ICIiKQorICAgICgicngiICAgICAgICAgICAgICAgICAgICAgICAgICAiYjI5YTRiMGZkYTYwOWUw YWYzM2ZmNTRlZDEzNjUyYjZjY2YwZTA1ZSIKKyAgICAgIjFuMWp3aG1zYmtjdjJkODA2aW1tY3B6 a2I3MnJ6MDR4eTk4bXl3MzU1YTh3NWFoMjV5aXYiKQorICAgIDs7ICgieHVuaXQtYmluYXJpZXMi ICAgICAgICAgICAiYzVhOTA3YmUyNWMyMDFjZGEzOGJlYzk5ZjZjODI1NDhhYjNkOWI1YSIKKyAg ICA7OyAgIiIpCisgICAgKSkKKworKGRlZmluZS1wdWJsaWMgbW9uby01LjEwLjAKKyAgKHBhY2th Z2UKKyAgICAoaW5oZXJpdCBtb25vLXByZS01LjEwLjApCisgICAgKHZlcnNpb24gIjUuMTAuMC4x NzkiKQorICAgIChuYW1lICJtb25vIikKKyAgICAoc291cmNlIChvcmlnaW4KKyAgICAgICAgICAg ICAgKG1ldGhvZCBnaXQtZmV0Y2gpCisgICAgICAgICAgICAgICh1cmkKKyAgICAgICAgICAgICAg IChnaXQtcmVmZXJlbmNlCisgICAgICAgICAgICAgICAgKHVybCAiaHR0cHM6Ly9naXRsYWIud2lu ZWhxLm9yZy9tb25vL21vbm8uZ2l0IikKKyAgICAgICAgICAgICAgICAoY29tbWl0ICJtb25vLTUu MTAuMC4xNzkiKSkpCisgICAgICAgICAgICAgIChmaWxlLW5hbWUgKGdpdC1maWxlLW5hbWUgbmFt ZSB2ZXJzaW9uKSkKKyAgICAgICAgICAgICAgKHNoYTI1NgorICAgICAgICAgICAgICAgKGJhc2Uz MgorICAgICAgICAgICAgICAgICIxenZpYjE2NHc0bXpyc2swNnltOW15MDIwOGNjZGFuamEyZng2 eDZtbHlpYjM1OGgzNjI2IikpCisgICAgICAgICAgICAgIChtb2R1bGVzICcoKGd1aXggYnVpbGQg dXRpbHMpCisgICAgICAgICAgICAgICAgICAgICAgICAgKGljZS05IHN0cmluZy1mdW4pKSkKKyAg ICAgICAgICAgICAgKHNuaXBwZXQgI34oYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICMkKGFkZC1leHRlcm5hbC1yZXBvcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9u by01LjEwLjAtZXh0ZXJuYWwtcmVwby1zcGVjcykKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICMkQHByZXBhcmUtbW9uby1zb3VyY2UtMCkpCisgICAgICAgICAgICAgIChwYXRjaGVzCisgICAg ICAgICAgICAgICAoc2VhcmNoLXBhdGNoZXMgIm1vbm8tNS4xMC4wLWxhdGVyLW1jcy1jaGFuZ2Vz LnBhdGNoIikpKSkKKyAgICAobmF0aXZlLWlucHV0cyAobW9kaWZ5LWlucHV0cyAocGFja2FnZS1u YXRpdmUtaW5wdXRzIG1vbm8tcHJlLTUuMTAuMCkKKyAgICAgICAgICAgICAgICAgICAgIChyZXBs YWNlICJtb25vIiBtb25vLXByZS01LjEwLjApCisgICAgICAgICAgICAgICAgICAgICAoYXBwZW5k IChkZWZhdWx0LXB5dGhvbikpKSkKKyAgICAoYXJndW1lbnRzCisgICAgIChzdWJzdGl0dXRlLWtl eXdvcmQtYXJndW1lbnRzIChwYWNrYWdlLWFyZ3VtZW50cyBtb25vLXByZS01LjEwLjApCisgICAg ICAgKCgjOnBoYXNlcyBwaGFzZXMgI34lc3RhbmRhcmQtcGhhc2VzKQorICAgICAgICAjfihtb2Rp ZnktcGhhc2VzICMkcGhhc2VzCisgICAgICAgICAgICA7OyBCdWlsZCBub3cgcmVsaWVzIG9uIHRo ZXNlIGJlaW5nIGJ1aWx0IGJlZm9yZSBhbnkgbWNzIGlzIGJ1aWx0OworICAgICAgICAgICAgOzsg aGF2ZSB0byB1c2UgdGhlIGlucHV0IG1jcy4KKyAgICAgICAgICAgIChkZWxldGUgJ2J1aWxkLXJl ZmVyZW5jZS1hc3NlbWJsaWVzKQorICAgICAgICAgICAgKGFkZC1iZWZvcmUgJ2J1aWxkICdidWls ZC1yZWZlcmVuY2UtYXNzZW1ibGllcworICAgICAgICAgICAgICAobGFtYmRhKiAoIzprZXkgbWFr ZS1mbGFncyBwYXJhbGxlbC1idWlsZD8gIzphbGxvdy1vdGhlci1rZXlzKQorICAgICAgICAgICAg ICAgIChsZXQgKCh0b3AgKGdldGN3ZCkpCisgICAgICAgICAgICAgICAgICAgICAgOzsgcGFyYWxs ZWwtYnVpbGQ/IG5lZWRzIHRvIGJlIGZhbHNlIGZvciBtb25vJ3MgYnVpbGQKKyAgICAgICAgICAg ICAgICAgICAgICA7OyBwaGFzZSwgYnV0IGl0IHNob3VsZCB3b3JrIGhlcmUuCisgICAgICAgICAg ICAgICAgICAgICAgKHBhcmFsbGVsLWJ1aWxkPyAjdCkpCisgICAgICAgICAgICAgICAgICAod2l0 aC1kaXJlY3RvcnktZXhjdXJzaW9uCisgICAgICAgICAgICAgICAgICAgICAgImV4dGVybmFsL2Jp bmFyeS1yZWZlcmVuY2UtYXNzZW1ibGllcyIKKyAgICAgICAgICAgICAgICAgICAgKHN1YnN0aXR1 dGUqIChmaW5kLWZpbGVzICIuIiAiXk1ha2VmaWxlJCIpCisgICAgICAgICAgICAgICAgICAgICAg KCgiQ1NDX0NPTU1PTl9BUkdTIDo9ICIgYWxsKQorICAgICAgICAgICAgICAgICAgICAgICAoc3Ry aW5nLWFwcGVuZCBhbGwgIi1kZWxheXNpZ24rICIpKQorICAgICAgICAgICAgICAgICAgICAgICgo IklCTVxcLkRhdGFcXC5EQjJfUkVGUyA6PSAiIGFsbCkKKyAgICAgICAgICAgICAgICAgICAgICAg KHN0cmluZy1hcHBlbmQgYWxsICJTeXN0ZW0uWG1sICIpKQorICAgICAgICAgICAgICAgICAgICAg ICgoIk1vbm9cXC5EYXRhXFwuU3FsaXRlX1JFRlMgOj0gIiBhbGwpCisgICAgICAgICAgICAgICAg ICAgICAgIChzdHJpbmctYXBwZW5kIGFsbCAiU3lzdGVtLlhtbCAiKSkKKyAgICAgICAgICAgICAg ICAgICAgICAoKCJTeXN0ZW1cXC5EYXRhXFwuRGF0YVNldEV4dGVuc2lvbnNfUkVGUyA6PSAiIGFs bCkKKyAgICAgICAgICAgICAgICAgICAgICAgKHN0cmluZy1hcHBlbmQgYWxsICJTeXN0ZW0uWG1s ICIpKQorICAgICAgICAgICAgICAgICAgICAgICgoIlN5c3RlbVxcLkRhdGFcXC5PcmFjbGVDbGll bnRfUkVGUyA6PSAiIGFsbCkKKyAgICAgICAgICAgICAgICAgICAgICAgKHN0cmluZy1hcHBlbmQg YWxsICJTeXN0ZW0uWG1sICIpKQorICAgICAgICAgICAgICAgICAgICAgICgoIlN5c3RlbVxcLklk ZW50aXR5TW9kZWxfUkVGUyA6PSAiIGFsbCkKKyAgICAgICAgICAgICAgICAgICAgICAgKHN0cmlu Zy1hcHBlbmQgYWxsICJTeXN0ZW0uQ29uZmlndXJhdGlvbiAiKSkKKyAgICAgICAgICAgICAgICAg ICAgICAoKCJTeXN0ZW1cXC5EZXNpZ25fUkVGUyA6PSAiIGFsbCkKKyAgICAgICAgICAgICAgICAg ICAgICAgKHN0cmluZy1hcHBlbmQgYWxsICJBY2Nlc3NpYmlsaXR5ICIpKQorICAgICAgICAgICAg ICAgICAgICAgICgoIlN5c3RlbVxcLldlYlxcLkV4dGVuc2lvbnNcXC5EZXNpZ25fUkVGUyA6PSAi IGFsbCkKKyAgICAgICAgICAgICAgICAgICAgICAgKHN0cmluZy1hcHBlbmQgYWxsICJTeXN0ZW0u V2luZG93cy5Gb3JtcyBTeXN0ZW0uV2ViICIpKQorICAgICAgICAgICAgICAgICAgICAgICgoIlN5 c3RlbVxcLlNlcnZpY2VNb2RlbFxcLlJvdXRpbmdfUkVGUyA6PSAiIGFsbCkKKyAgICAgICAgICAg ICAgICAgICAgICAgKHN0cmluZy1hcHBlbmQgYWxsICJTeXN0ZW0uWG1sICIpKQorICAgICAgICAg ICAgICAgICAgICAgICgoIlN5c3RlbVxcLldlYlxcLkFic3RyYWN0aW9uc19SRUZTIDo9ICIgYWxs KQorICAgICAgICAgICAgICAgICAgICAgICAoc3RyaW5nLWFwcGVuZCBhbGwgIlN5c3RlbSAiKSkK KyAgICAgICAgICAgICAgICAgICAgICAoKCJTeXN0ZW1cXC5SZWFjdGl2ZVxcLldpbmRvd3NcXC5G b3Jtc19SRUZTIDo9ICIgYWxsKQorICAgICAgICAgICAgICAgICAgICAgICAoc3RyaW5nLWFwcGVu ZCBhbGwgIlN5c3RlbSAiKSkKKyAgICAgICAgICAgICAgICAgICAgICAoKCJTeXN0ZW1cXC5XaW5k b3dzXFwuRm9ybXNcXC5EYXRhVmlzdWFsaXphdGlvbl9SRUZTIDo9ICIgYWxsKQorICAgICAgICAg ICAgICAgICAgICAgICAoc3RyaW5nLWFwcGVuZCBhbGwgIkFjY2Vzc2liaWxpdHkgIikpCisgICAg ICAgICAgICAgICAgICAgICAgKCgiRmFjYWRlcy9TeXN0ZW1cXC5TZXJ2aWNlTW9kZWxcXC5Qcmlt aXRpdmVzX1JFRlMgOj0gIiBhbGwpCisgICAgICAgICAgICAgICAgICAgICAgIChzdHJpbmctYXBw ZW5kIGFsbCAiU3lzdGVtLlhtbCAiKSkKKyAgICAgICAgICAgICAgICAgICAgICAoKCJGYWNhZGVz L1N5c3RlbVxcLkR5bmFtaWNcXC5SdW50aW1lX1JFRlMgOj0gIiBhbGwpCisgICAgICAgICAgICAg ICAgICAgICAgIChzdHJpbmctYXBwZW5kIGFsbCAiU3lzdGVtICIpKQorICAgICAgICAgICAgICAg ICAgICAgICgoIkZhY2FkZXMvU3lzdGVtXFwuWG1sXFwuWERvY3VtZW50X1JFRlMgOj0gIiBhbGwp CisgICAgICAgICAgICAgICAgICAgICAgIChzdHJpbmctYXBwZW5kIGFsbCAiU3lzdGVtLlhtbCAi KSkKKyAgICAgICAgICAgICAgICAgICAgICAoKCJGYWNhZGVzL1N5c3RlbVxcLlJ1bnRpbWVcXC5T ZXJpYWxpemF0aW9uLlhtbF9SRUZTIDo9ICIgYWxsKQorICAgICAgICAgICAgICAgICAgICAgICAo c3RyaW5nLWFwcGVuZCBhbGwgIlN5c3RlbS5YbWwgIikpCisgICAgICAgICAgICAgICAgICAgICAg KCgiRmFjYWRlcy9TeXN0ZW1cXC5EYXRhXFwuQ29tbW9uX1JFRlMgOj0gIiBhbGwpCisgICAgICAg ICAgICAgICAgICAgICAgIChzdHJpbmctYXBwZW5kIGFsbCAiU3lzdGVtIFN5c3RlbS5YbWwgIikp KQorICAgICAgICAgICAgICAgICAgICAoYXBwbHkgaW52b2tlICJtYWtlIgorICAgICAgICAgICAg ICAgICAgICAgICAgICAgYCgsQChpZiBwYXJhbGxlbC1idWlsZD8KKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgYCgiLWoiICwobnVtYmVyLT5zdHJpbmcKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHBhcmFsbGVsLWpvYi1jb3VudCkpKQorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnKCkpCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICJDU0M9bWNzIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsQG1ha2Ut ZmxhZ3MpKSkpKSkpKSkpKSkKZGlmZiAtLWdpdCBhL2dudS9wYWNrYWdlcy9wYXRjaGVzL21vbm8t NS4xMC4wLWxhdGVyLW1jcy1jaGFuZ2VzLnBhdGNoIGIvZ251L3BhY2thZ2VzL3BhdGNoZXMvbW9u by01LjEwLjAtbGF0ZXItbWNzLWNoYW5nZXMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k ZXggMDAwMDAwMDAwMDAuLmM0ZTIxMWE4YTMyCi0tLSAvZGV2L251bGwKKysrIGIvZ251L3BhY2th Z2VzL3BhdGNoZXMvbW9uby01LjEwLjAtbGF0ZXItbWNzLWNoYW5nZXMucGF0Y2gKQEAgLTAsMCAr MSw0NjAxIEBACitUaGUgcmVzdWx0IG9mIGNoZXJyeS1waWNraW5nIGV2ZXJ5IGNvbW1pdCAoZXhj ZXB0IG9uZXMgdGhhdCBzZWVtZWQgdG8gbm90CithZmZlY3QgdGhlIGNvbXBpbGVyIGl0c2VsZikg ZnJvbSBtb25vLTUuMTAuMC4xNzkgdG8gbW9uby02LjEyLjAuMjA2IHRoYXQKK3RvdWNoZWQgLi9t Y3MvbWNzLgorCitNb25vIHNlZW1zIHRvIGNvbnNpc3RlbnRseSwgYWxtb3N0IGFzIGEgcnVsZSwg ZGVwZW5kIG9uIEMjIGZlYXR1cmVzIGJlZm9yZQordGhleSBpbXBsZW1lbnQgdGhlbS4gIFRoaXMg aXMgZXh0cmVtZWx5IGF3a3dhcmQgZm9yIGJ1aWxkaW5nIHVzaW5nIHByZXZpb3VzCit2ZXJzaW9u cywgc28gaG9wZWZ1bGx5IHRoaXMgd2lsbCBhbGxvdyB1cyB0byBqdW1wIHN0cmFpZ2h0IHRvIGEg aGlnaCB2ZXJzaW9uLgorCitJbmNsdWRlcyB0aGUgZm9sbG93aW5nIGNvbW1pdHMsIGluIG9yZGVy IG9mIG1vc3QtcmVjZW50IHRvIGxlYXN0LXJlY2VudDoKKworYjM5MTE1ODliMzcKKzY3MDBkZDIy MGZlCisyYTdkZmIyOGUwNworZWVhNmYxMWEzZTYKKzNmYzA0N2M2ZjNhCithYzY2NjZmNWIwYgor OTI3YjI3YmI5ZDgKKzRhYjI0ZDRjMDU5CithYTgzNmI0NmEyMworZWU3ZGNjZmIzMjAKKzIzNTEw ZjI2OTE1CitkOWYyNjU0N2Q4OAorOWRjMWM4ODVhMGYKK2VmNTU4ZWFkODlhCisyY2I3OTA5YjEz YworMDM5MGVhMmU3OGMKK2I0ZjY2NTliZGMwCitlOTJkNjA3MGVhZgorNGM1YjNmYmQ0ZjQKK2U2 NTA3ZjJkYThhCis2NTZhNGIxMTIwYworOWJkMmZhNGNmMzMKK2JlMmQxYWVmZmUwCis0NTRhNzZj ZmE0YQorNjBjMWVlNDU0ZDQKKzUzZjFlZjUwNmVhCitkMzQ4N2JmZWJiMworOTJmNmU1YjFhODEK KworZGlmZiAtLWdpdCBhLy5naXRpZ25vcmUgYi8uZ2l0aWdub3JlCitpbmRleCBjNmVmMTlhODQ5 Yi4uYzM3ZDRmY2UzZjAgMTAwNjQ0CistLS0gYS8uZ2l0aWdub3JlCisrKysgYi8uZ2l0aWdub3Jl CitAQCAtNDAsNiArNDAsNyBAQCBBbmtoLk5vTG9hZAorICouZ3BTdGF0ZQorIC52c2NvZGUvCisg Ki5leHAKKysudnMvCisgCisgIyBUb29saW5nCisgX1JlU2hhcnBlciovCitkaWZmIC0tZ2l0IGEv bWNzL2NsYXNzL0NvbW1vbnMuWG1sLlJlbGF4bmcvTWFrZWZpbGUgYi9tY3MvY2xhc3MvQ29tbW9u cy5YbWwuUmVsYXhuZy9NYWtlZmlsZQoraW5kZXggMWZlYmFlNGViMWUuLmY5YjU3ZmVhMjY1IDEw MDY0NAorLS0tIGEvbWNzL2NsYXNzL0NvbW1vbnMuWG1sLlJlbGF4bmcvTWFrZWZpbGUKKysrKyBi L21jcy9jbGFzcy9Db21tb25zLlhtbC5SZWxheG5nL01ha2VmaWxlCitAQCAtMjIsNyArMjIsNyBA QCBFWFRSQV9ESVNURklMRVMgPSBcCisgCSQoUkVTT1VSQ0VfRklMRVMpCisgCisgQ29tbW9ucy5Y bWwuUmVsYXhuZy5SbmMvUm5jUGFyc2VyLmNzOiBDb21tb25zLlhtbC5SZWxheG5nLlJuYy9SbmNQ YXJzZXIuamF5ICQodG9wZGlyKS9qYXkvc2tlbGV0b24uY3MKKy0JJCh0b3BkaXIpL2pheS9qYXkg LWN0diA8ICQodG9wZGlyKS9qYXkvc2tlbGV0b24uY3MgJChDVVJESVIpL0NvbW1vbnMuWG1sLlJl bGF4bmcuUm5jL1JuY1BhcnNlci5qYXkgPiBDb21tb25zLlhtbC5SZWxheG5nLlJuYy9SbmNQYXJz ZXIuY3MKKysJJCh0b3BkaXIpL2pheS9qYXkgLWN0diAtbyBDb21tb25zLlhtbC5SZWxheG5nLlJu Yy9SbmNQYXJzZXIuY3MgJDwgPCAkKHRvcGRpcikvamF5L3NrZWxldG9uLmNzCisgCisgQlVJTFRf U09VUkNFUyA9IENvbW1vbnMuWG1sLlJlbGF4bmcuUm5jL1JuY1BhcnNlci5jcworIAorZGlmZiAt LWdpdCBhL21jcy9jbGFzcy9NaWNyb3NvZnQuQnVpbGQvTWFrZWZpbGUgYi9tY3MvY2xhc3MvTWlj cm9zb2Z0LkJ1aWxkL01ha2VmaWxlCitpbmRleCAyZGNiZWZkZjdmOS4uMWE3MTEwNjliMGIgMTAw NjQ0CistLS0gYS9tY3MvY2xhc3MvTWljcm9zb2Z0LkJ1aWxkL01ha2VmaWxlCisrKysgYi9tY3Mv Y2xhc3MvTWljcm9zb2Z0LkJ1aWxkL01ha2VmaWxlCitAQCAtMjYsNyArMjYsNyBAQCBFWFRSQV9E SVNURklMRVMgPSBcCisgRVhQUl9QQVJTRVIgPSBNaWNyb3NvZnQuQnVpbGQuSW50ZXJuYWwvRXhw cmVzc2lvblBhcnNlcgorIAorICQoRVhQUl9QQVJTRVIpLmNzOiAkKEVYUFJfUEFSU0VSKS5qYXkg JCh0b3BkaXIpL2pheS9za2VsZXRvbi5jcworLQkoY2QgTWljcm9zb2Z0LkJ1aWxkLkludGVybmFs OyAkKHRvcGRpcikvLi4vamF5L2pheSAtY3R2IDwgJCh0b3BkaXIpLy4uL2pheS9za2VsZXRvbi5j cyBFeHByZXNzaW9uUGFyc2VyLmpheSA+IEV4cHJlc3Npb25QYXJzZXIuY3MpCisrCShjZCBNaWNy b3NvZnQuQnVpbGQuSW50ZXJuYWw7ICQodG9wZGlyKS8uLi9qYXkvamF5IC1jdHYgLW8gRXhwcmVz c2lvblBhcnNlci5jcyBFeHByZXNzaW9uUGFyc2VyLmpheSA8ICQodG9wZGlyKS8uLi9qYXkvc2tl bGV0b24uY3MgKQorIAorIEJVSUxUX1NPVVJDRVMgPSAkKEVYUFJfUEFSU0VSKS5jcworIAorZGlm ZiAtLWdpdCBhL21jcy9jbGFzcy9Nb25vLkNTaGFycC9NYWtlZmlsZSBiL21jcy9jbGFzcy9Nb25v LkNTaGFycC9NYWtlZmlsZQoraW5kZXggN2IxOTg2Yjc4ZTUuLjM2MTU1MzI4NTNkIDEwMDY0NAor LS0tIGEvbWNzL2NsYXNzL01vbm8uQ1NoYXJwL01ha2VmaWxlCisrKysgYi9tY3MvY2xhc3MvTW9u by5DU2hhcnAvTWFrZWZpbGUKK0BAIC0yNCw3ICsyNCw3IEBAIExJQl9NQ1NfRkxBR1MgKz0gJChS RUZFUkVOQ0VfU09VUkNFU19GTEFHUykKKyBCVUlMVF9TT1VSQ0VTID0gJChQUk9GSUxFKS1wYXJz ZXIuY3MKKyAKKyAkKFBST0ZJTEUpLXBhcnNlci5jczogJCh0b3BkaXIpL21jcy9jcy1wYXJzZXIu amF5ICQodG9wZGlyKS9qYXkvc2tlbGV0b24uY3MKKy0JJCh0b3BkaXIpL2pheS9qYXkgLWMgPCAk KHRvcGRpcikvamF5L3NrZWxldG9uLmNzICQ8ID4gJChQUk9GSUxFKS1qYXktdG1wLm91dCAmJiBt diAkKFBST0ZJTEUpLWpheS10bXAub3V0ICRACisrCSQodG9wZGlyKS9qYXkvamF5IC1jIC1vICQo UFJPRklMRSktamF5LXRtcC5vdXQgJDwgPCAkKHRvcGRpcikvamF5L3NrZWxldG9uLmNzICYmIG12 ICQoUFJPRklMRSktamF5LXRtcC5vdXQgJEAKKyAKKyBpbmNsdWRlIC4uLy4uL2J1aWxkL2xpYnJh cnkubWFrZQorIAorZGlmZiAtLWdpdCBhL21jcy9jbGFzcy9Nb25vLlhtbC5FeHQvTWFrZWZpbGUg Yi9tY3MvY2xhc3MvTW9uby5YbWwuRXh0L01ha2VmaWxlCitpbmRleCBkYzQ5ZjgxNmZlZS4uMTY0 OTgyMTVhMzggMTAwNjQ0CistLS0gYS9tY3MvY2xhc3MvTW9uby5YbWwuRXh0L01ha2VmaWxlCisr KysgYi9tY3MvY2xhc3MvTW9uby5YbWwuRXh0L01ha2VmaWxlCitAQCAtMjksMTMgKzI5LDEzIEBA IE1vbm8uWG1sLlhQYXRoMi9YUXVlcnlQYXJzZXIuamF5OiBNb25vLlhtbC5YUGF0aDIvUGFyc2Vy QmFzZS5qYXkgJChTS0VMRVRPTikKKyBNb25vLlhtbC5YUGF0aDIvWFBhdGgyUGFyc2VyLmNzOiBN b25vLlhtbC5YUGF0aDIvWFBhdGgyUGFyc2VyLmpheQorIAllY2hvICIjZGVmaW5lIFhQQVRIMl9Q QVJTRVIiID4gJEAKKyAJZWNobyAiI2lmIE5FVF8yXzAiID4+ICRACistCSQodG9wZGlyKS9qYXkv amF5IC1jdCA8ICQoU0tFTEVUT04pICQoQ1VSRElSKS8kPCA+PiRACisrCSQodG9wZGlyKS9qYXkv amF5IC1jdCAkKENVUkRJUikvJDwgPCAkKFNLRUxFVE9OKSA+PiRACisgCWVjaG8gIiNlbmRpZiIg Pj4gJEAKKyAKKyBNb25vLlhtbC5YUGF0aDIvWFF1ZXJ5UGFyc2VyLmNzOiBNb25vLlhtbC5YUGF0 aDIvWFF1ZXJ5UGFyc2VyLmpheSAkKFNLRUxFVE9OKQorIAllY2hvICIjZGVmaW5lIFhRVUVSWV9Q QVJTRVIiID4gJEAKKyAJZWNobyAiI2lmIE5FVF8yXzAiID4+ICRACistCSQodG9wZGlyKS9qYXkv amF5IC1jdCA8ICQoU0tFTEVUT04pICQoQ1VSRElSKS8kPCA+PiRACisrCSQodG9wZGlyKS9qYXkv amF5IC1jdCAkKENVUkRJUikvJDwgPCAkKFNLRUxFVE9OKSA+PiRACisgCWVjaG8gIiNlbmRpZiIg Pj4gJEAKKyAKKyBNb25vLlhtbC5YUGF0aDIvWFBhdGgyVG9rZW5pemVyLmNzOiBNb25vLlhtbC5Y UGF0aDIvVG9rZW5pemVyQmFzZS5jcworZGlmZiAtLWdpdCBhL21jcy9jbGFzcy9jb3JsaWIvU3lz dGVtL1J1bnRpbWVBcmd1bWVudEhhbmRsZS5jcyBiL21jcy9jbGFzcy9jb3JsaWIvU3lzdGVtL1J1 bnRpbWVBcmd1bWVudEhhbmRsZS5jcworaW5kZXggMjE2YzRlYTM5MjQuLmMxMGQzZjE3NGQxIDEw MDY0NAorLS0tIGEvbWNzL2NsYXNzL2NvcmxpYi9TeXN0ZW0vUnVudGltZUFyZ3VtZW50SGFuZGxl LmNzCisrKysgYi9tY3MvY2xhc3MvY29ybGliL1N5c3RlbS9SdW50aW1lQXJndW1lbnRIYW5kbGUu Y3MKK0BAIC0zMSwxMyArMzEsOSBAQAorIC8vIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0Ug T1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorIC8vCisgCistdXNpbmcgU3lzdGVt OworLXVzaW5nIFN5c3RlbS5SdW50aW1lLkludGVyb3BTZXJ2aWNlczsKKy0KKyBuYW1lc3BhY2Ug U3lzdGVtCisgeworLQlbQ29tVmlzaWJsZSAodHJ1ZSldCistCXB1YmxpYyBzdHJ1Y3QgUnVudGlt ZUFyZ3VtZW50SGFuZGxlCisrCXB1YmxpYyByZWYgc3RydWN0IFJ1bnRpbWVBcmd1bWVudEhhbmRs ZQorIAl7CisgI3ByYWdtYSB3YXJuaW5nIGRpc2FibGUgNjQ5CisgCQlpbnRlcm5hbCBJbnRQdHIg YXJnczsKK2RpZmYgLS1naXQgYS9tY3MvY2xhc3MvcmVmZXJlbmNlc291cmNlL21zY29ybGliL3N5 c3RlbS90eXBlZHJlZmVyZW5jZS5jcyBiL21jcy9jbGFzcy9yZWZlcmVuY2Vzb3VyY2UvbXNjb3Js aWIvc3lzdGVtL3R5cGVkcmVmZXJlbmNlLmNzCitpbmRleCA4MGJlZjVhYjg1Mi4uYTMwNTQxZjQz OTkgMTAwNjQ0CistLS0gYS9tY3MvY2xhc3MvcmVmZXJlbmNlc291cmNlL21zY29ybGliL3N5c3Rl bS90eXBlZHJlZmVyZW5jZS5jcworKysrIGIvbWNzL2NsYXNzL3JlZmVyZW5jZXNvdXJjZS9tc2Nv cmxpYi9zeXN0ZW0vdHlwZWRyZWZlcmVuY2UuY3MKK0BAIC0xOSw3ICsxOSwxMSBAQCBuYW1lc3Bh Y2UgU3lzdGVtIHsKKyAgICAgW0NMU0NvbXBsaWFudChmYWxzZSldIAorICAgICBbU3lzdGVtLlJ1 bnRpbWUuSW50ZXJvcFNlcnZpY2VzLkNvbVZpc2libGUodHJ1ZSldCisgICAgIFtTeXN0ZW0uUnVu dGltZS5WZXJzaW9uaW5nLk5vblZlcnNpb25hYmxlXSAvLyBUaGlzIG9ubHkgYXBwbGllcyB0byBm aWVsZCBsYXlvdXQKKy0gICAgcHVibGljIHN0cnVjdCBUeXBlZFJlZmVyZW5jZQorKyAgICBwdWJs aWMKKysjaWYgTU9OTworKyAgICByZWYKKysjZW5kaWYKKysgICAgc3RydWN0IFR5cGVkUmVmZXJl bmNlCisgICAgIHsKKyAjaWYgTU9OTworICNwcmFnbWEgd2FybmluZyBkaXNhYmxlIDE2OQorZGlm ZiAtLWdpdCBhL21jcy9lcnJvcnMvY3MwMTUxLTQuY3MgYi9tY3MvZXJyb3JzL2NzMDE1MS00LmNz CitpbmRleCAwZTQ1YjFhOTA0OS4uYzllMDU1ODllNGQgMTAwNjQ0CistLS0gYS9tY3MvZXJyb3Jz L2NzMDE1MS00LmNzCisrKysgYi9tY3MvZXJyb3JzL2NzMDE1MS00LmNzCitAQCAtMSw1ICsxLDYg QEAKKyAvLyBDUzAxNTE6IEEgc3dpdGNoIGV4cHJlc3Npb24gb2YgdHlwZSBgUzE/JyBjYW5ub3Qg YmUgY29udmVydGVkIHRvIGFuIGludGVncmFsIHR5cGUsIGJvb2wsIGNoYXIsIHN0cmluZywgZW51 bSBvciBudWxsYWJsZSB0eXBlCistLy8gTGluZTogMjQKKysvLyBMaW5lOiAyNQorKy8vIENvbXBp bGVyIG9wdGlvbnM6IC1sYW5ndmVyc2lvbjo1CisgCisgdXNpbmcgU3lzdGVtOworIAorZGlmZiAt LWdpdCBhL21jcy9lcnJvcnMvY3MwMjczLTIuY3MgYi9tY3MvZXJyb3JzL2NzMDI3My0yLmNzCitu ZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMDAwMDAuLmIwYmRiZWY5ZTc1CistLS0g L2Rldi9udWxsCisrKysgYi9tY3MvZXJyb3JzL2NzMDI3My0yLmNzCitAQCAtMCwwICsxLDkgQEAK KysvLyBDUzAyNzM6IFRoZSBhY2Nlc3NpYmlsaXR5IG1vZGlmaWVyIG9mIHRoZSBgQy5TMi5zZXQn IGFjY2Vzc29yIG11c3QgYmUgbW9yZSByZXN0cmljdGl2ZSB0aGFuIHRoZSBtb2RpZmllciBvZiB0 aGUgcHJvcGVydHkgb3IgaW5kZXhlciBgQy5TMicKKysvLyBMaW5lOiA3CisrLy8gQ29tcGlsZXIg b3B0aW9uczogLWxhbmd2ZXJzaW9uOjcuMgorKworKyBjbGFzcyBDCisrIHsKKysJcHJpdmF0ZSBz dHJpbmcgUzIgeyBnZXQ7IHByaXZhdGUgcHJvdGVjdGVkIHNldDsgfQorKyB9CisrCitkaWZmIC0t Z2l0IGEvbWNzL2Vycm9ycy9jczAyODAuY3MgYi9tY3MvZXJyb3JzL2NzMDI4MC5jcworbmV3IGZp bGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAwMDAwLi42MmJlOGUzOTU4NQorLS0tIC9kZXYv bnVsbAorKysrIGIvbWNzL2Vycm9ycy9jczAyODAuY3MKK0BAIC0wLDAgKzEsMjIgQEAKKysvLyBD UzAyODA6IGBDLkZpeGFibGUuR2V0UGlubmFibGVSZWZlcmVuY2UoaW50KScgaGFzIHRoZSB3cm9u ZyBzaWduYXR1cmUgdG8gYmUgdXNlZCBpbiBleHRlbnNpYmxlIGZpeGVkIHN0YXRlbWVudAorKy8v IExpbmU6IDExCisrLy8gQ29tcGlsZXIgb3B0aW9uczogLXVuc2FmZSAtbGFuZ3ZlcnNpb246bGF0 ZXN0IC13YXJuYXNlcnJvcgorKworK3VzaW5nIFN5c3RlbTsKKysKKyt1bnNhZmUgY2xhc3MgQwor K3sKKysJcHVibGljIHN0YXRpYyB2b2lkIE1haW4gKCkKKysJeworKwkJZml4ZWQgKGludCogcCA9 IG5ldyBGaXhhYmxlICgpKSB7CisrCQl9CisrCX0KKysKKysJc3RydWN0IEZpeGFibGUKKysJewor KwkJcHVibGljIHJlZiBpbnQgR2V0UGlubmFibGVSZWZlcmVuY2UgKGludCBpID0gMSkKKysJCXsK KysJCQl0aHJvdyBuZXcgTm90SW1wbGVtZW50ZWRFeGNlcHRpb24gKCk7CisrCQl9CisrCX0KKyt9 CitcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKK2RpZmYgLS1naXQgYS9tY3MvZXJyb3JzL2Nz MDgyNi05LmNzIGIvbWNzL2Vycm9ycy9jczA4MjYtOS5jcworZGVsZXRlZCBmaWxlIG1vZGUgMTAw NjQ0CitpbmRleCA0ZTA5ODk2OWI4Yy4uMDAwMDAwMDAwMDAKKy0tLSBhL21jcy9lcnJvcnMvY3Mw ODI2LTkuY3MKKysrKyAvZGV2L251bGwKK0BAIC0xLDE2ICswLDAgQEAKKy0vLyBDUzA4MjY6IFRo ZSB0eXBlIG9mIGFuIGltcGxpY2l0bHkgdHlwZWQgYXJyYXkgY2Fubm90IGJlIGluZmVycmVkIGZy b20gdGhlIGluaXRpYWxpemVyLiBUcnkgc3BlY2lmeWluZyBhcnJheSB0eXBlIGV4cGxpY2l0bHkK Ky0vLyBMaW5lOiA4CistCistY2xhc3MgQworLXsKKy0Jc3RhdGljIHZvaWQgTWFpbigpCistCXsK Ky0JCW9iamVjdCBvID0gMTsKKy0JCWR5bmFtaWMgZCA9IDE7CistCQkKKy0JCXZhciBhID0gbmV3 W10geworLQkJCW5ldyB7IFggPSBvIH0sCistCQkJbmV3IHsgWCA9IGQgfQorLQkJfTsKKy0JfQor LX0KK2RpZmYgLS1naXQgYS9tY3MvZXJyb3JzL2NzMTAxMy0xLmNzIGIvbWNzL2Vycm9ycy9jczEw MTMtMS5jcworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAwMDAwLi4wMTgyN2Rm NDk5NQorLS0tIC9kZXYvbnVsbAorKysrIGIvbWNzL2Vycm9ycy9jczEwMTMtMS5jcworQEAgLTAs MCArMSw4IEBACisrLy8gQ1MxMDEzOiBJbnZhbGlkIG51bWJlcgorKy8vIExpbmUgOiA2CisrCisr Y2xhc3MgWAorK3sKKysgICAgc3RhdGljIGludCBpID0gMGI7CisrICAgIHN0YXRpYyB2b2lkIE1h aW4gKCkge30KKyt9CitcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKK2RpZmYgLS1naXQgYS9t Y3MvZXJyb3JzL2NzMTAxMy0yLmNzIGIvbWNzL2Vycm9ycy9jczEwMTMtMi5jcworbmV3IGZpbGUg bW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAwMDAwLi5jODY4Y2IyYTc2OQorLS0tIC9kZXYvbnVs bAorKysrIGIvbWNzL2Vycm9ycy9jczEwMTMtMi5jcworQEAgLTAsMCArMSw3IEBACisrLy8gQ1Mx MDEzOiBJbnZhbGlkIG51bWJlcgorKy8vIExpbmUgOiA2CisrCisrY2xhc3MgWAorK3sKKysgICAg c3RhdGljIGludCBpID0gMHgwXzsKKyt9CitcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKK2Rp ZmYgLS1naXQgYS9tY3MvZXJyb3JzL2NzMTAxMy0zLmNzIGIvbWNzL2Vycm9ycy9jczEwMTMtMy5j cworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAwMDAwLi4zMTQ1YjFiYTU5Ngor LS0tIC9kZXYvbnVsbAorKysrIGIvbWNzL2Vycm9ycy9jczEwMTMtMy5jcworQEAgLTAsMCArMSw3 IEBACisrLy8gQ1MxMDEzOiBJbnZhbGlkIG51bWJlcgorKy8vIExpbmUgOiA2CisrCisrY2xhc3Mg WAorK3sKKysgICAgc3RhdGljIGludCBpID0gMV87CisrfQorXCBObyBuZXdsaW5lIGF0IGVuZCBv ZiBmaWxlCitkaWZmIC0tZ2l0IGEvbWNzL2Vycm9ycy9jczEwMTMtNC5jcyBiL21jcy9lcnJvcnMv Y3MxMDEzLTQuY3MKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwMDAwMC4uM2E1 ZTc0NGZmNGYKKy0tLSAvZGV2L251bGwKKysrKyBiL21jcy9lcnJvcnMvY3MxMDEzLTQuY3MKK0BA IC0wLDAgKzEsNyBAQAorKy8vIENTMTAxMzogSW52YWxpZCBudW1iZXIKKysvLyBMaW5lIDogNgor KworK2NsYXNzIFgKKyt7CisrICAgIHN0YXRpYyBkb3VibGUgaSA9IDFfLjI7CisrfQorXCBObyBu ZXdsaW5lIGF0IGVuZCBvZiBmaWxlCitkaWZmIC0tZ2l0IGEvbWNzL2Vycm9ycy9jczEwMTMtNS5j cyBiL21jcy9lcnJvcnMvY3MxMDEzLTUuY3MKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAw MDAwMDAwMDAwMC4uODA4Mjc0M2MwYjUKKy0tLSAvZGV2L251bGwKKysrKyBiL21jcy9lcnJvcnMv Y3MxMDEzLTUuY3MKK0BAIC0wLDAgKzEsNyBAQAorKy8vIENTMTAxMzogSW52YWxpZCBudW1iZXIK KysvLyBMaW5lIDogNgorKworK2NsYXNzIFgKKyt7CisrICAgIHN0YXRpYyBpbnQgaSA9IDFfZTE7 CisrfQorXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCitkaWZmIC0tZ2l0IGEvbWNzL2Vycm9y cy9jczEwMTMtNi5jcyBiL21jcy9lcnJvcnMvY3MxMDEzLTYuY3MKK25ldyBmaWxlIG1vZGUgMTAw NjQ0CitpbmRleCAwMDAwMDAwMDAwMC4uZDJjZWEyYzcyZGQKKy0tLSAvZGV2L251bGwKKysrKyBi L21jcy9lcnJvcnMvY3MxMDEzLTYuY3MKK0BAIC0wLDAgKzEsNyBAQAorKy8vIENTMTAxMzogSW52 YWxpZCBudW1iZXIKKysvLyBMaW5lIDogNgorKworK2NsYXNzIFgKKyt7CisrICAgIHN0YXRpYyBm bG9hdCBpID0gMV9mOworK30KK1wgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorZGlmZiAtLWdp dCBhL21jcy9lcnJvcnMvY3MxMDEzLTcuY3MgYi9tY3MvZXJyb3JzL2NzMTAxMy03LmNzCituZXcg ZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMDAwMDAuLjgwMzBkNmVkMDk1CistLS0gL2Rl di9udWxsCisrKysgYi9tY3MvZXJyb3JzL2NzMTAxMy03LmNzCitAQCAtMCwwICsxLDcgQEAKKysv LyBDUzEwMTM6IEludmFsaWQgbnVtYmVyCisrLy8gTGluZSA6IDYKKysKKytjbGFzcyBYCisrewor KyAgICBzdGF0aWMgaW50IGkgPSAweF8xOworK30KK1wgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmls ZQorZGlmZiAtLWdpdCBhL21jcy9lcnJvcnMvY3MxMDEzLTguY3MgYi9tY3MvZXJyb3JzL2NzMTAx My04LmNzCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMDAwMDAuLmQyNmM3YWNh Y2I3CistLS0gL2Rldi9udWxsCisrKysgYi9tY3MvZXJyb3JzL2NzMTAxMy04LmNzCitAQCAtMCww ICsxLDcgQEAKKysvLyBDUzEwMTM6IEludmFsaWQgbnVtYmVyCisrLy8gTGluZSA6IDYKKysKKytj bGFzcyBYCisreworKyAgICBzdGF0aWMgaW50IGkgPSAwYl8xOworK30KK1wgTm8gbmV3bGluZSBh dCBlbmQgb2YgZmlsZQorZGlmZiAtLWdpdCBhL21jcy9lcnJvcnMvY3MxMDIxLTQuY3MgYi9tY3Mv ZXJyb3JzL2NzMTAyMS00LmNzCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMDAw MDAuLjc1YzJmZjcwMzYwCistLS0gL2Rldi9udWxsCisrKysgYi9tY3MvZXJyb3JzL2NzMTAyMS00 LmNzCitAQCAtMCwwICsxLDggQEAKKysvLyBDUzEwMjE6IEludGVncmFsIGNvbnN0YW50IGlzIHRv byBsYXJnZQorKy8vIExpbmU6IDYKKysKKytjbGFzcyBYIHsKKysJcHVibGljIHN0YXRpYyB2b2lk IE1haW4oKSB7CisrCQlpbnQgaCA9IDBiMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEx MTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTE7CisrCX0KKyt9CitkaWZmIC0tZ2l0IGEv bWNzL2Vycm9ycy9jczEwNjEtMTguY3MgYi9tY3MvZXJyb3JzL2NzMTA2MS0xOC5jcworbmV3IGZp bGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAwMDAwLi4zYWM4MmI3ZjJkMworLS0tIC9kZXYv bnVsbAorKysrIGIvbWNzL2Vycm9ycy9jczEwNjEtMTguY3MKK0BAIC0wLDAgKzEsMTAgQEAKKysv LyBDUzEwNjE6IFR5cGUgYGludCcgZG9lcyBub3QgY29udGFpbiBhIGRlZmluaXRpb24gZm9yIGBf XzAnIGFuZCBubyBleHRlbnNpb24gbWV0aG9kIGBfXzAnIG9mIHR5cGUgYGludCcgY291bGQgYmUg Zm91bmQuIEFyZSB5b3UgbWlzc2luZyBhbiBhc3NlbWJseSByZWZlcmVuY2U/CisrLy8gTGluZTog OAorKworK3N0YXRpYyBjbGFzcyBDCisreworKwlzdGF0aWMgdm9pZCBNYWluICgpCisrCXsKKysJ CWludCBjID0gMC5fXzA7CisrCX0KKyt9CitcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKK2Rp ZmYgLS1naXQgYS9tY3MvZXJyb3JzL2NzMTUyNS0yNy5jcyBiL21jcy9lcnJvcnMvY3MxNTI1LTI3 LmNzCitpbmRleCBkYzE4NDkzMTY2Ny4uZDRjMWYzMjZiZTIgMTAwNjQ0CistLS0gYS9tY3MvZXJy b3JzL2NzMTUyNS0yNy5jcworKysrIGIvbWNzL2Vycm9ycy9jczE1MjUtMjcuY3MKK0BAIC0xLDQg KzEsNCBAQAorLS8vIENTMTUyNTogVW5leHBlY3RlZCBzeW1ib2wgYGZlJywgZXhwZWN0aW5nIGBj bGFzcycsIGBkZWxlZ2F0ZScsIGBlbnVtJywgYGludGVyZmFjZScsIGBwYXJ0aWFsJywgb3IgYHN0 cnVjdCcKKysvLyBDUzE1MjU6IFVuZXhwZWN0ZWQgc3ltYm9sIGBmZScsIGV4cGVjdGluZyBgY2xh c3MnLCBgZGVsZWdhdGUnLCBgZW51bScsIGBpbnRlcmZhY2UnLCBgcGFydGlhbCcsIGByZWYnLCBv ciBgc3RydWN0JworIC8vIExpbmU6IDYKKyAKKyBuYW1lc3BhY2UgWAorZGlmZiAtLWdpdCBhL21j cy9lcnJvcnMvY3MxNTI1LTQzLmNzIGIvbWNzL2Vycm9ycy9jczE1MjUtNDMuY3MKK2luZGV4IGQ4 M2Q0ZDg0N2ZhLi4yNmY0NjZhMjUyOCAxMDA2NDQKKy0tLSBhL21jcy9lcnJvcnMvY3MxNTI1LTQz LmNzCisrKysgYi9tY3MvZXJyb3JzL2NzMTUyNS00My5jcworQEAgLTEsNCArMSw0IEBACistLy8g Q1MxNTI1OiBVbmV4cGVjdGVkIHN5bWJvbCBgKScsIGV4cGVjdGluZyBgKCcsIGBbJywgYG91dCcs IGBwYXJhbXMnLCBgcmVmJywgYHRoaXMnLCBvciBgdHlwZScKKysvLyBDUzE1MjU6IFVuZXhwZWN0 ZWQgc3ltYm9sIGApJworIC8vIExpbmU6IDYKKyAKKyBjbGFzcyBUZXN0Q2xhc3MKK2RpZmYgLS1n aXQgYS9tY3MvZXJyb3JzL2NzMTUyNy0yLmNzIGIvbWNzL2Vycm9ycy9jczE1MjctMi5jcworaW5k ZXggZDM4OTQ1ZjNjODkuLjAyNTZlZTJiMzU0IDEwMDY0NAorLS0tIGEvbWNzL2Vycm9ycy9jczE1 MjctMi5jcworKysrIGIvbWNzL2Vycm9ycy9jczE1MjctMi5jcworQEAgLTEsNCArMSw0IEBACist Ly8gQ1MxNTI3OiBOYW1lc3BhY2UgZWxlbWVudHMgY2Fubm90IGJlIGV4cGxpY2l0bHkgZGVjbGFy ZWQgYXMgcHJpdmF0ZSwgcHJvdGVjdGVkIG9yIHByb3RlY3RlZCBpbnRlcm5hbAorKy8vIENTMTUy NzogTmFtZXNwYWNlIGVsZW1lbnRzIGNhbm5vdCBiZSBleHBsaWNpdGx5IGRlY2xhcmVkIGFzIHBy aXZhdGUsIHByb3RlY3RlZCwgcHJvdGVjdGVkIGludGVybmFsLCBvciBwcml2YXRlIHByb3RlY3Rl ZAorIC8vIExpbmU6IDQKKyAKKyBwcm90ZWN0ZWQgaW50ZXJmYWNlIElGb28geworZGlmZiAtLWdp dCBhL21jcy9lcnJvcnMvY3MxNTI3LTMuY3MgYi9tY3MvZXJyb3JzL2NzMTUyNy0zLmNzCitpbmRl eCA3NjNjNzU5NThlZS4uNDY5ZDc0Y2JiOTkgMTAwNjQ0CistLS0gYS9tY3MvZXJyb3JzL2NzMTUy Ny0zLmNzCisrKysgYi9tY3MvZXJyb3JzL2NzMTUyNy0zLmNzCitAQCAtMSw0ICsxLDQgQEAKKy0v LyBDUzE1Mjc6IE5hbWVzcGFjZSBlbGVtZW50cyBjYW5ub3QgYmUgZXhwbGljaXRseSBkZWNsYXJl ZCBhcyBwcml2YXRlLCBwcm90ZWN0ZWQgb3IgcHJvdGVjdGVkIGludGVybmFsCisrLy8gQ1MxNTI3 OiBOYW1lc3BhY2UgZWxlbWVudHMgY2Fubm90IGJlIGV4cGxpY2l0bHkgZGVjbGFyZWQgYXMgcHJp dmF0ZSwgcHJvdGVjdGVkLCBwcm90ZWN0ZWQgaW50ZXJuYWwsIG9yIHByaXZhdGUgcHJvdGVjdGVk CisgLy8gTGluZTogNAorIAorIHByb3RlY3RlZCBpbnRlcm5hbCBlbnVtIEUgeworZGlmZiAtLWdp dCBhL21jcy9lcnJvcnMvY3MxNTI3LmNzIGIvbWNzL2Vycm9ycy9jczE1MjcuY3MKK2luZGV4IDE4 OWNjNDcyZjRjLi5lODQ3ZmQxNGUxMSAxMDA2NDQKKy0tLSBhL21jcy9lcnJvcnMvY3MxNTI3LmNz CisrKysgYi9tY3MvZXJyb3JzL2NzMTUyNy5jcworQEAgLTEsNCArMSw1IEBACistLy8gQ1MxNTI3 OiBOYW1lc3BhY2UgZWxlbWVudHMgY2Fubm90IGJlIGV4cGxpY2l0bHkgZGVjbGFyZWQgYXMgcHJp dmF0ZSwgcHJvdGVjdGVkIG9yIHByb3RlY3RlZCBpbnRlcm5hbAorLS8vIExpbmU6CisrLy8gQ1Mx NTI3OiBOYW1lc3BhY2UgZWxlbWVudHMgY2Fubm90IGJlIGV4cGxpY2l0bHkgZGVjbGFyZWQgYXMg cHJpdmF0ZSwgcHJvdGVjdGVkLCBwcm90ZWN0ZWQgaW50ZXJuYWwsIG9yIHByaXZhdGUgcHJvdGVj dGVkCisrLy8gTGluZTogNAorKworIHByaXZhdGUgY2xhc3MgWCB7CisgfQorZGlmZiAtLWdpdCBh L21jcy9lcnJvcnMvY3MxNjExLTIuY3MgYi9tY3MvZXJyb3JzL2NzMTYxMS0yLmNzCituZXcgZmls ZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMDAwMDAuLjg4MjIzMTM3OGYwCistLS0gL2Rldi9u dWxsCisrKysgYi9tY3MvZXJyb3JzL2NzMTYxMS0yLmNzCitAQCAtMCwwICsxLDggQEAKKysvLyBD UzE2MTE6IFRoZSBwYXJhbXMgcGFyYW1ldGVyIGNhbm5vdCBiZSBkZWNsYXJlZCBhcyByZWYsIG91 dCBvciBpbgorKy8vIExpbmU6IDYKKysvLyBDb21waWxlciBvcHRpb25zOiAtbGFuZ3ZlcnNpb246 bGF0ZXN0CisrCisrY2xhc3MgVGVzdAorK3sKKysgICAgcHVibGljIHN0YXRpYyB2b2lkIEVycm9y IChwYXJhbXMgaW4gaW50IGFyZ3MpIHt9CisrfQorXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxl CitkaWZmIC0tZ2l0IGEvbWNzL2Vycm9ycy9jczE2MTEuY3MgYi9tY3MvZXJyb3JzL2NzMTYxMS5j cworaW5kZXggOGRmMTBmYWMwY2UuLjQ2OWUwODNlYzNjIDEwMDY0NAorLS0tIGEvbWNzL2Vycm9y cy9jczE2MTEuY3MKKysrKyBiL21jcy9lcnJvcnMvY3MxNjExLmNzCitAQCAtMSw0ICsxLDQgQEAK Ky0vLyBDUzE2MTE6IFRoZSBwYXJhbXMgcGFyYW1ldGVyIGNhbm5vdCBiZSBkZWNsYXJlZCBhcyBy ZWYgb3Igb3V0CisrLy8gQ1MxNjExOiBUaGUgcGFyYW1zIHBhcmFtZXRlciBjYW5ub3QgYmUgZGVj bGFyZWQgYXMgcmVmLCBvdXQgb3IgaW4KKyAvLyBMaW5lOiA2CisgCisgY2xhc3MgVGVzdAorZGlm ZiAtLWdpdCBhL21jcy9lcnJvcnMvY3MxNjQ0LTYxLmNzIGIvbWNzL2Vycm9ycy9jczE2NDQtNjEu Y3MKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwMDAwMC4uZDU4YmE2NGM3ZWMK Ky0tLSAvZGV2L251bGwKKysrKyBiL21jcy9lcnJvcnMvY3MxNjQ0LTYxLmNzCitAQCAtMCwwICsx LDExIEBACisrLy8gQ1MxNjQ0OiBGZWF0dXJlIGBkaWdpdCBzZXBhcmF0b3JzJyBjYW5ub3QgYmUg dXNlZCBiZWNhdXNlIGl0IGlzIG5vdCBwYXJ0IG9mIHRoZSBDIyA2LjAgbGFuZ3VhZ2Ugc3BlY2lm aWNhdGlvbgorKy8vIExpbmU6IDkKKysvLyBDb21waWxlciBvcHRpb25zOiAtbGFuZ3ZlcnNpb246 NgorKworK2NsYXNzIFgKKyt7CisrCWludCBUZXN0ICgpCisrCXsKKysJCXZhciBpID0gMV8wOwor Kwl9CisrfQorZGlmZiAtLWdpdCBhL21jcy9lcnJvcnMvY3MxNjQ0LTYyLmNzIGIvbWNzL2Vycm9y cy9jczE2NDQtNjIuY3MKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwMDAwMC4u NWEyOTgzOTYxMGQKKy0tLSAvZGV2L251bGwKKysrKyBiL21jcy9lcnJvcnMvY3MxNjQ0LTYyLmNz CitAQCAtMCwwICsxLDEwIEBACisrLy8gQ1MxNjQ0OiBGZWF0dXJlIGBwcml2YXRlIHByb3RlY3Rl ZCcgY2Fubm90IGJlIHVzZWQgYmVjYXVzZSBpdCBpcyBub3QgcGFydCBvZiB0aGUgQyMgNi4wIGxh bmd1YWdlIHNwZWNpZmljYXRpb24KKysvLyBMaW5lOiA3CisrLy8gQ29tcGlsZXIgb3B0aW9uczog LWxhbmd2ZXJzaW9uOjYKKysKKytjbGFzcyBDCisreworKwlwcml2YXRlIHByb3RlY3RlZCBlbnVt IEUKKysJeworKwl9CisrfQorXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCitkaWZmIC0tZ2l0 IGEvbWNzL2Vycm9ycy9jczE2NDQtNjMuY3MgYi9tY3MvZXJyb3JzL2NzMTY0NC02My5jcworbmV3 IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAwMDAwLi5jZTYxZDVjZTA0NgorLS0tIC9k ZXYvbnVsbAorKysrIGIvbWNzL2Vycm9ycy9jczE2NDQtNjMuY3MKK0BAIC0wLDAgKzEsMjIgQEAK KysvLyBDUzE2NDQ6IEZlYXR1cmUgYGV4dGVuc2libGUgZml4ZWQgc3RhdGVtZW50JyBjYW5ub3Qg YmUgdXNlZCBiZWNhdXNlIGl0IGlzIG5vdCBwYXJ0IG9mIHRoZSBDIyA3LjIgbGFuZ3VhZ2Ugc3Bl Y2lmaWNhdGlvbiAKKysvLyBMaW5lOiAxMQorKy8vIENvbXBpbGVyIG9wdGlvbnM6IC11bnNhZmUg LWxhbmd2ZXJzaW9uOjcuMgorKworK3VzaW5nIFN5c3RlbTsKKysKKyt1bnNhZmUgY2xhc3MgQwor K3sKKysJcHVibGljIHN0YXRpYyB2b2lkIE1haW4gKCkKKysJeworKwkJZml4ZWQgKGludCogcCA9 IG5ldyBGaXhhYmxlICgpKSB7CisrCQl9CisrCX0KKysKKysJc3RydWN0IEZpeGFibGUKKysJewor KwkJcHVibGljIHJlZiBpbnQgR2V0UGlubmFibGVSZWZlcmVuY2UgKCkKKysJCXsKKysJCQl0aHJv dyBuZXcgTm90SW1wbGVtZW50ZWRFeGNlcHRpb24gKCk7CisrCQl9CisrCX0KKyt9CitcIE5vIG5l d2xpbmUgYXQgZW5kIG9mIGZpbGUKK2RpZmYgLS1naXQgYS9tY3MvZXJyb3JzL2NzMTY0NC02NC5j cyBiL21jcy9lcnJvcnMvY3MxNjQ0LTY0LmNzCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXgg MDAwMDAwMDAwMDAuLjg4OTE3YTBhNWQ1CistLS0gL2Rldi9udWxsCisrKysgYi9tY3MvZXJyb3Jz L2NzMTY0NC02NC5jcworQEAgLTAsMCArMSwxMyBAQAorKy8vIENTMTY0NDogRmVhdHVyZSBgZXhw cmVzc2lvbiBib2R5IHByb3BlcnR5IGFjY2Vzc29yJyBjYW5ub3QgYmUgdXNlZCBiZWNhdXNlIGl0 IGlzIG5vdCBwYXJ0IG9mIHRoZSBDIyA2LjAgbGFuZ3VhZ2Ugc3BlY2lmaWNhdGlvbiAKKysvLyBM aW5lOiAxMQorKy8vIENvbXBpbGVyIG9wdGlvbnM6IC1sYW5ndmVyc2lvbjo2CisrCisrdXNpbmcg U3lzdGVtOworKworK2NsYXNzIEMKKyt7CisrCXB1YmxpYyBpbnQgSW50ZWdlcgorKwl7CisrCQln ZXQgPT4gMDsKKysJfQorK30KK1wgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorZGlmZiAtLWdp dCBhL21jcy9lcnJvcnMvY3MxNjQ0LTY1LmNzIGIvbWNzL2Vycm9ycy9jczE2NDQtNjUuY3MKK25l dyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwMDAwMC4uZGVhNjQ4Yjc4NDYKKy0tLSAv ZGV2L251bGwKKysrKyBiL21jcy9lcnJvcnMvY3MxNjQ0LTY1LmNzCitAQCAtMCwwICsxLDEzIEBA CisrLy8gQ1MxNjQ0OiBGZWF0dXJlIGBleHByZXNzaW9uIGJvZHkgcHJvcGVydHkgYWNjZXNzb3In IGNhbm5vdCBiZSB1c2VkIGJlY2F1c2UgaXQgaXMgbm90IHBhcnQgb2YgdGhlIEMjIDYuMCBsYW5n dWFnZSBzcGVjaWZpY2F0aW9uIAorKy8vIExpbmU6IDExCisrLy8gQ29tcGlsZXIgb3B0aW9uczog LWxhbmd2ZXJzaW9uOjYKKysKKyt1c2luZyBTeXN0ZW07CisrCisrY2xhc3MgQworK3sKKysJcHVi bGljIGludCB0aGlzW2ludCBpXQorKwl7CisrCQlnZXQgPT4gaTsKKysJfQorK30KK1wgTm8gbmV3 bGluZSBhdCBlbmQgb2YgZmlsZQorZGlmZiAtLWdpdCBhL21jcy9lcnJvcnMvY3MxNjQ0LTY2LmNz IGIvbWNzL2Vycm9ycy9jczE2NDQtNjYuY3MKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAw MDAwMDAwMDAwMC4uM2YzOTNiNTBkMzAKKy0tLSAvZGV2L251bGwKKysrKyBiL21jcy9lcnJvcnMv Y3MxNjQ0LTY2LmNzCitAQCAtMCwwICsxLDE3IEBACisrLy8gQ1MxNjQ0OiBGZWF0dXJlIGBleHBy ZXNzaW9uIGJvZHkgZXZlbnQgYWNjZXNzb3InIGNhbm5vdCBiZSB1c2VkIGJlY2F1c2UgaXQgaXMg bm90IHBhcnQgb2YgdGhlIEMjIDYuMCBsYW5ndWFnZSBzcGVjaWZpY2F0aW9uIAorKy8vIExpbmU6 IDExCisrLy8gQ29tcGlsZXIgb3B0aW9uczogLWxhbmd2ZXJzaW9uOjYKKysKKyt1c2luZyBTeXN0 ZW07CisrCisrY2xhc3MgQworK3sKKysJcHVibGljIGV2ZW50IEV2ZW50SGFuZGxlciBFdmVudAor Kwl7CisrCQlhZGQgPT4gSWdub3JlICgpOworKwl9CisrCisrCXN0YXRpYyB2b2lkIElnbm9yZSAo KQorKwl7CisrCX0KKyt9CitcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKK2RpZmYgLS1naXQg YS9tY3MvZXJyb3JzL2NzMTc2My0yLmNzIGIvbWNzL2Vycm9ycy9jczE3NjMtMi5jcworaW5kZXgg NzJmNTM3MDk0OWEuLjdlNGQwOTFmYzcyIDEwMDY0NAorLS0tIGEvbWNzL2Vycm9ycy9jczE3NjMt Mi5jcworKysrIGIvbWNzL2Vycm9ycy9jczE3NjMtMi5jcworQEAgLTEsNCArMSw0IEBACistLy8g Q1MxNzYzOiBPcHRpb25hbCBwYXJhbWV0ZXIgYG8nIG9mIHR5cGUgYG9iamVjdCcgY2FuIG9ubHkg YmUgaW5pdGlhbGl6ZWQgd2l0aCBgbnVsbCcKKysvLyBDUzE3NjM6IE9wdGlvbmFsIHBhcmFtZXRl ciBgbycgb2YgdHlwZSBgb2JqZWN0JyBjYW4gb25seSBiZSBpbml0aWFsaXplZCB3aXRoIGRlZmF1 bHQgdmFsdWUKKyAvLyBMaW5lOiA2CisgCisgY2xhc3MgQworZGlmZiAtLWdpdCBhL21jcy9lcnJv cnMvY3MxNzYzLmNzIGIvbWNzL2Vycm9ycy9jczE3NjMuY3MKK2luZGV4IGQxMGE3YmYyYzIwLi4w M2I1ZjI4YTE5ZCAxMDA2NDQKKy0tLSBhL21jcy9lcnJvcnMvY3MxNzYzLmNzCisrKysgYi9tY3Mv ZXJyb3JzL2NzMTc2My5jcworQEAgLTEsNCArMSw0IEBACistLy8gQ1MxNzYzOiBPcHRpb25hbCBw YXJhbWV0ZXIgYG8nIG9mIHR5cGUgYG9iamVjdCcgY2FuIG9ubHkgYmUgaW5pdGlhbGl6ZWQgd2l0 aCBgbnVsbCcKKysvLyBDUzE3NjM6IE9wdGlvbmFsIHBhcmFtZXRlciBgbycgb2YgdHlwZSBgb2Jq ZWN0JyBjYW4gb25seSBiZSBpbml0aWFsaXplZCB3aXRoIGRlZmF1bHQgdmFsdWUKKyAvLyBMaW5l OiA2CisgCisgY2xhc3MgQworZGlmZiAtLWdpdCBhL21jcy9lcnJvcnMvY3M4MzI2LmNzIGIvbWNz L2Vycm9ycy9jczgzMjYuY3MKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwMDAw MC4uZWZkM2E4NGZlYTcKKy0tLSAvZGV2L251bGwKKysrKyBiL21jcy9lcnJvcnMvY3M4MzI2LmNz CitAQCAtMCwwICsxLDEzIEBACisrLy8gQ1M4MzI2OiBCb3RoIHJlZiBjb25kaXRpb25hbCBvcGVy YXRvcnMgbXVzdCBiZSByZWYgdmFsdWVzCisrLy8gTGluZTogMTEKKysKKytjbGFzcyBQcm9ncmFt CisreworKwlzdGF0aWMgaW50IHgsIHk7CisrCisrCXB1YmxpYyBzdGF0aWMgdm9pZCBNYWluICgp CisrCXsKKysJCWJvb2wgYiA9IGZhbHNlOworKwkJcmVmIGludCB0YXJnZXRCdWNrZXQgPSByZWYg YiA/IHggOiB5OworKwl9CisrfQorXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCitkaWZmIC0t Z2l0IGEvbWNzL2Vycm9ycy9jczgzMjcuY3MgYi9tY3MvZXJyb3JzL2NzODMyNy5jcworbmV3IGZp bGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAwMDAwLi44ZDBjY2Q4NmE3MAorLS0tIC9kZXYv bnVsbAorKysrIGIvbWNzL2Vycm9ycy9jczgzMjcuY3MKK0BAIC0wLDAgKzEsMTQgQEAKKysvLyBD UzgzMjc6IFRoZSByZWYgY29uZGl0aW9uYWwgZXhwcmVzc2lvbiB0eXBlcyBgaW50JyBhbmQgYGJ5 dGUnIGhhdmUgdG8gbWF0Y2gKKysvLyBMaW5lOiAxMgorKworK2NsYXNzIFByb2dyYW0KKyt7Cisr CXN0YXRpYyBpbnQgeDsKKysJc3RhdGljIGJ5dGUgeTsKKysKKysJcHVibGljIHN0YXRpYyB2b2lk IE1haW4gKCkKKysJeworKwkJYm9vbCBiID0gZmFsc2U7CisrCQlyZWYgaW50IHRhcmdldEJ1Y2tl dCA9IHJlZiBiID8gcmVmIHggOiByZWYgeTsKKysJfQorK30KK1wgTm8gbmV3bGluZSBhdCBlbmQg b2YgZmlsZQorZGlmZiAtLWdpdCBhL21jcy9lcnJvcnMvY3MwNDI4LTIuY3MgYi9tY3MvZXJyb3Jz L2NzODM4NS0yLmNzCitzaW1pbGFyaXR5IGluZGV4IDUwJQorcmVuYW1lIGZyb20gbWNzL2Vycm9y cy9jczA0MjgtMi5jcworcmVuYW1lIHRvIG1jcy9lcnJvcnMvY3M4Mzg1LTIuY3MKK2luZGV4IDVm NDY4ZmQ1MTlhLi5jYzc4NjBmYWE2MiAxMDA2NDQKKy0tLSBhL21jcy9lcnJvcnMvY3MwNDI4LTIu Y3MKKysrKyBiL21jcy9lcnJvcnMvY3M4Mzg1LTIuY3MKK0BAIC0xLDQgKzEsNCBAQAorLS8vIENT MDQyODogQ2Fubm90IGNvbnZlcnQgbWV0aG9kIGdyb3VwIGBNYWluJyB0byBub24tZGVsZWdhdGUg dHlwZSBgdm9pZConLiBDb25zaWRlciB1c2luZyBwYXJlbnRoZXNlcyB0byBpbnZva2UgdGhlIG1l dGhvZAorKy8vIENTODM4NTogVGhlIGdpdmVuIGV4cHJlc3Npb24gY2Fubm90IGJlIHVzZWQgaW4g YSBmaXhlZCBzdGF0ZW1lbnQKKyAvLyBMaW5lOiA5CisgLy8gQ29tcGlsZXIgb3B0aW9uczogLXVu c2FmZQorIAorZGlmZiAtLWdpdCBhL21jcy9lcnJvcnMvY3MwMjEzLTIuY3MgYi9tY3MvZXJyb3Jz L2NzODM4NS5jcworc2ltaWxhcml0eSBpbmRleCA1NCUKK3JlbmFtZSBmcm9tIG1jcy9lcnJvcnMv Y3MwMjEzLTIuY3MKK3JlbmFtZSB0byBtY3MvZXJyb3JzL2NzODM4NS5jcworaW5kZXggYWU3MmU0 Y2Q5YWEuLjVmYTlmNzk0Y2NmIDEwMDY0NAorLS0tIGEvbWNzL2Vycm9ycy9jczAyMTMtMi5jcwor KysrIGIvbWNzL2Vycm9ycy9jczgzODUuY3MKK0BAIC0xLDQgKzEsNCBAQAorLS8vIENTMDIxMzog WW91IGNhbm5vdCB1c2UgdGhlIGZpeGVkIHN0YXRlbWVudCB0byB0YWtlIHRoZSBhZGRyZXNzIG9m IGFuIGFscmVhZHkgZml4ZWQgZXhwcmVzc2lvbgorKy8vIENTODM4NTogVGhlIGdpdmVuIGV4cHJl c3Npb24gY2Fubm90IGJlIHVzZWQgaW4gYSBmaXhlZCBzdGF0ZW1lbnQKKyAvLyBMaW5lOiA5Cisg Ly8gQ29tcGlsZXIgb3B0aW9uczogLXVuc2FmZQorIAorZGlmZiAtLWdpdCBhL21jcy9lcnJvcnMv a25vd24taXNzdWVzLW5ldF80X3ggYi9tY3MvZXJyb3JzL2tub3duLWlzc3Vlcy1uZXRfNF94Citp bmRleCBjOWVkOTMxNzM1MC4uNTQ5MDJlMDNlN2IgMTAwNjQ0CistLS0gYS9tY3MvZXJyb3JzL2tu b3duLWlzc3Vlcy1uZXRfNF94CisrKysgYi9tY3MvZXJyb3JzL2tub3duLWlzc3Vlcy1uZXRfNF94 CitAQCAtMTQsNiArMTQsOSBAQAorICMgUGFyc2VyIHByb2JsZW1zCisgY3MwMDgwLmNzIAorIAor KyMgVW5kb2N1bWVudGVkIHN3aXRjaCBnb3Zlcm5pbmcgcnVsZXMKKytjczAxNTEtNC5jcyBOTyBF UlJPUgorKworICMgT3BlcmF0b3JzCisgY3MwNDU3LTIuY3MKKyBjczA0NTcuY3MKK2RpZmYgLS1n aXQgYS9tY3MvaWxhc20vTWFrZWZpbGUgYi9tY3MvaWxhc20vTWFrZWZpbGUKK2luZGV4IDA5MGQx Y2MzMjMxLi40Y2ExMTU0NTc4MSAxMDA2NDQKKy0tLSBhL21jcy9pbGFzbS9NYWtlZmlsZQorKysr IGIvbWNzL2lsYXNtL01ha2VmaWxlCitAQCAtMTMsNyArMTMsNyBAQCBFWFRSQV9ESVNURklMRVMg PSBcCisgCSQod2lsZGNhcmQgdGVzdHMvKi5pbCkKKyAKKyBJTFBhcnNlci5jczogcGFyc2VyL0lM UGFyc2VyLmpheSAkKHRvcGRpcikvamF5L3NrZWxldG9uLmNzCistCSQodG9wZGlyKS9qYXkvamF5 IC1jdCA8ICQodG9wZGlyKS9qYXkvc2tlbGV0b24uY3MgJChDVVJESVIpLyQ8ID4kQAorKwkkKHRv cGRpcikvamF5L2pheSAtY3QgLW8gJEAgJChDVVJESVIpLyQ8IDwgJCh0b3BkaXIpL2pheS9za2Vs ZXRvbi5jcworIAorIGluY2x1ZGUgLi4vYnVpbGQvZXhlY3V0YWJsZS5tYWtlCisgCitkaWZmIC0t Z2l0IGEvbWNzL2pheS9kZWZzLmggYi9tY3MvamF5L2RlZnMuaAoraW5kZXggMmFhZGU0OGRhYzIu LjNiZDNjNTg1OWNlIDEwMDY0NAorLS0tIGEvbWNzL2pheS9kZWZzLmgKKysrKyBiL21jcy9qYXkv ZGVmcy5oCitAQCAtMjM2LDEyICsyMzYsMTQgQEAgZXh0ZXJuIGNoYXIgKmlucHV0X2ZpbGVfbmFt ZTsKKyBleHRlcm4gY2hhciAqcHJvbG9nX2ZpbGVfbmFtZTsKKyBleHRlcm4gY2hhciAqbG9jYWxf ZmlsZV9uYW1lOworIGV4dGVybiBjaGFyICp2ZXJib3NlX2ZpbGVfbmFtZTsKKytleHRlcm4gY2hh ciAqb3V0cHV0X2ZpbGVfbmFtZTsKKyAKKyBleHRlcm4gRklMRSAqYWN0aW9uX2ZpbGU7CisgZXh0 ZXJuIEZJTEUgKmlucHV0X2ZpbGU7CisgZXh0ZXJuIEZJTEUgKnByb2xvZ19maWxlOworIGV4dGVy biBGSUxFICpsb2NhbF9maWxlOworIGV4dGVybiBGSUxFICp2ZXJib3NlX2ZpbGU7CisrZXh0ZXJu IEZJTEUgKm91dHB1dF9maWxlOworIAorIGV4dGVybiBpbnQgbml0ZW1zOworIGV4dGVybiBpbnQg bnJ1bGVzOworZGlmZiAtLWdpdCBhL21jcy9qYXkvbWFpbi5jIGIvbWNzL2pheS9tYWluLmMKK2lu ZGV4IGZjYWMyMThiMWRmLi43ZmI1ZTZjOGNjYiAxMDA2NDQKKy0tLSBhL21jcy9qYXkvbWFpbi5j CisrKysgYi9tY3MvamF5L21haW4uYworQEAgLTYzLDYgKzYzLDcgQEAgY2hhciAqaW5wdXRfZmls ZV9uYW1lID0gIiI7CisgY2hhciAqcHJvbG9nX2ZpbGVfbmFtZTsKKyBjaGFyICpsb2NhbF9maWxl X25hbWU7CisgY2hhciAqdmVyYm9zZV9maWxlX25hbWU7CisrY2hhciAqb3V0cHV0X2ZpbGVfbmFt ZSA9IDA7CisgCisgRklMRSAqYWN0aW9uX2ZpbGU7CS8qICBhIHRlbXAgZmlsZSwgdXNlZCB0byBz YXZlIGFjdGlvbnMgYXNzb2NpYXRlZCAgICAqLworIAkJCS8qICB3aXRoIHJ1bGVzIHVudGlsIHRo ZSBwYXJzZXIgaXMgd3JpdHRlbgkgICAgKi8KK0BAIC03MCw2ICs3MSw3IEBAIEZJTEUgKmlucHV0 X2ZpbGU7CS8qICB0aGUgaW5wdXQgZmlsZQkJCQkgICAgKi8KKyBGSUxFICpwcm9sb2dfZmlsZTsJ LyogIHRlbXAgZmlsZXMsIHVzZWQgdG8gc2F2ZSB0ZXh0IHVudGlsIGFsbAkgICAgKi8KKyBGSUxF ICpsb2NhbF9maWxlOwkvKiAgc3ltYm9scyBoYXZlIGJlZW4gZGVmaW5lZAkJCSAgICAqLworIEZJ TEUgKnZlcmJvc2VfZmlsZTsJLyogIHkub3V0cHV0CQkJCQkgICAgKi8KKytGSUxFICpvdXRwdXRf ZmlsZTsgLyogZGVmYXVsdHMgdG8gc3Rkb3V0ICovCisgCisgaW50IG5pdGVtczsKKyBpbnQgbnJ1 bGVzOworQEAgLTEwNiw2ICsxMDgsNyBAQCBpbnQgazsKKyAgICAgaWYgKGFjdGlvbl9maWxlKSB7 IGZjbG9zZShhY3Rpb25fZmlsZSk7IHVubGluayhhY3Rpb25fZmlsZV9uYW1lKTsgfQorICAgICBp ZiAocHJvbG9nX2ZpbGUpIHsgZmNsb3NlKHByb2xvZ19maWxlKTsgdW5saW5rKHByb2xvZ19maWxl X25hbWUpOyB9CisgICAgIGlmIChsb2NhbF9maWxlKSB7IGZjbG9zZShsb2NhbF9maWxlKTsgdW5s aW5rKGxvY2FsX2ZpbGVfbmFtZSk7IH0KKysgICAgaWYgKG91dHB1dF9maWxlICYmIChvdXRwdXRf ZmlsZSAhPSBzdGRvdXQpKSB7IGZjbG9zZShvdXRwdXRfZmlsZSk7IGlmIChrICE9IDApIHVubGlu ayhvdXRwdXRfZmlsZV9uYW1lKTsgfQorICAgICBleGl0KGspOworIH0KKyAKK0BAIC0xMzcsNyAr MTQwLDcgQEAgc2V0X3NpZ25hbHMoKQorIAorIHVzYWdlKCkKKyB7CistICAgIGZwcmludGYoc3Rk ZXJyLCAidXNhZ2U6ICVzIFstdHZjcF0gWy1iIGZpbGVfcHJlZml4XSBmaWxlbmFtZVxuIiwgbXlu YW1lKTsKKysgICAgZnByaW50ZihzdGRlcnIsICJ1c2FnZTogJXMgWy10dmNwXSBbLWIgZmlsZV9w cmVmaXhdIFstbyBvdXRwdXRfZmlsZW5hbWVdIGlucHV0X2ZpbGVuYW1lXG4iLCBteW5hbWUpOwor ICAgICBleGl0KDEpOworIH0KKyAKK0BAIC0xNjcsOSArMTcwLDkgQEAgY2hhciAqYXJndltdOwor IAkgICAgaWYgKGkgKyAxIDwgYXJnYykgdXNhZ2UoKTsKKyAJICAgIHJldHVybjsKKyAKKy0gICAg ICAgIGNhc2UgJy0nOgorLSAgICAgICAgICAgICsraTsKKy0gICAgICAgICAgICBnb3RvIG5vX21v cmVfb3B0aW9uczsKKysgICAgY2FzZSAnLSc6CisrICAgICAgICArK2k7CisrICAgICAgICBnb3Rv IG5vX21vcmVfb3B0aW9uczsKKyAKKyAJY2FzZSAnYic6CisgCSAgICBpZiAoKisrcykKK0BAIC0x ODAsMTMgKzE4MywyMiBAQCBjaGFyICphcmd2W107CisgCQl1c2FnZSgpOworIAkgICAgY29udGlu dWU7CisgCistICAgICAgICBjYXNlICd0JzoKKy0gICAgICAgICAgICB0ZmxhZyA9IDE7CistICAg ICAgICAgICAgYnJlYWs7CisrICAgIGNhc2UgJ28nOgorKyAgICAgICAgaWYgKCorK3MpCisrICAg ICAgICAgICAgb3V0cHV0X2ZpbGVfbmFtZSA9IHM7CisrICAgICAgICBlbHNlIGlmICgrK2kgPCBh cmdjKQorKyAgICAgICAgICAgIG91dHB1dF9maWxlX25hbWUgPSBhcmd2W2ldOworKyAgICAgICAg ZWxzZQorKyAgICAgICAgICAgIHVzYWdlKCk7CisrICAgICAgICBjb250aW51ZTsKKysKKysgICAg Y2FzZSAndCc6CisrICAgICAgICB0ZmxhZyA9IDE7CisrICAgICAgICBicmVhazsKKyAKKyAJY2Fz ZSAncCc6CistICAgICAgICAgICAgcHJpbnRfc2tlbF9kaXIgKCk7CistICAgICAgICAgICAgYnJl YWs7CisrICAgICAgICBwcmludF9za2VsX2RpciAoKTsKKysgICAgICAgIGJyZWFrOworIAorIAlj YXNlICdjJzoKKyAJICAgIGNzaGFycCA9IDE7CitAQCAtMjE3LDEyICsyMjksMTIgQEAgY2hhciAq YXJndltdOworIAkJdmZsYWcgPSAxOworIAkJYnJlYWs7CisgCistICAgICAgICAgICAgY2FzZSAn cCc6CistICAgICAgICAgICAgICAgIHByaW50X3NrZWxfZGlyICgpOworLSAgICAgICAgICAgICAg ICBicmVhazsKKysgICAgICAgIGNhc2UgJ3AnOgorKyAgICAgICAgICAgIHByaW50X3NrZWxfZGly ICgpOworKyAgICAgICAgICAgIGJyZWFrOworIAorLSAgICAgICAgICAgIGNhc2UgJ2MnOgorLQkJ Y3NoYXJwID0gMTsKKysgICAgICAgIGNhc2UgJ2MnOgorKwkJICAgIGNzaGFycCA9IDE7CisgCSAg ICAgICAgbGluZV9mb3JtYXQgPSAiI2xpbmUgJWQgXCIlc1wiXG4iOworICAgICAgICAgCWRlZmF1 bHRfbGluZV9mb3JtYXQgPSAiI2xpbmUgZGVmYXVsdFxuIjsKKyAKK0BAIC0zNTUsNiArMzY3LDE3 IEBAIG9wZW5fZmlsZXMoKQorIAlpZiAodmVyYm9zZV9maWxlID09IDApCisgCSAgICBvcGVuX2Vy cm9yKHZlcmJvc2VfZmlsZV9uYW1lKTsKKyAgICAgfQorKworKyAgICBpZiAob3V0cHV0X2ZpbGUg PT0gMCkKKysgICAgeworKyAgICAgICAgaWYgKG91dHB1dF9maWxlX25hbWUgIT0gMCkgeworKyAg ICAgICAgICAgIG91dHB1dF9maWxlID0gZm9wZW4ob3V0cHV0X2ZpbGVfbmFtZSwgInciKTsKKysg ICAgICAgICAgICBpZiAob3V0cHV0X2ZpbGUgPT0gMCkKKysgICAgICAgICAgICAgICAgb3Blbl9l cnJvcihvdXRwdXRfZmlsZV9uYW1lKTsKKysgICAgICAgIH0gZWxzZSB7CisrICAgICAgICAgICAg b3V0cHV0X2ZpbGUgPSBzdGRvdXQ7CisrICAgICAgICB9CisrICAgIH0KKyB9CisgCisgCitkaWZm IC0tZ2l0IGEvbWNzL2pheS9vdXRwdXQuYyBiL21jcy9qYXkvb3V0cHV0LmMKK2luZGV4IGQxZTJj MTRhMWIyLi5hYjliMjA0M2JlOSAxMDA2NDQKKy0tLSBhL21jcy9qYXkvb3V0cHV0LmMKKysrKyBi L21jcy9qYXkvb3V0cHV0LmMKK0BAIC03Myw3ICs3Myw3IEBAIG91dHB1dCAoKSB7CisgICAgICAg ZnByaW50ZihzdGRlcnIsICJqYXk6IGxpbmUgJWQgaXMgdG9vIGxvbmdcbiIsIGxubyksIGRvbmUo MSk7CisgICAgIHN3aXRjaCAoYnVmWzBdKSB7CisgICAgIGNhc2UgJyMnOgljb250aW51ZTsKKy0g ICAgY2FzZSAndCc6CWlmICghdGZsYWcpIGZwdXRzKCIvL3QiLCBzdGRvdXQpOworKyAgICBjYXNl ICd0JzoJaWYgKCF0ZmxhZykgZnB1dHMoIi8vdCIsIG91dHB1dF9maWxlKTsKKyAgICAgY2FzZSAn Lic6CWJyZWFrOworICAgICBkZWZhdWx0OgorICAgICAgIGNwID0gc3RydG9rKGJ1ZiwgIiBcdFxy XG4iKTsKK0BAIC05Myw3ICs5Myw3IEBAIG91dHB1dCAoKSB7CisgICAgICAgICAgIGZwcmludGYo c3RkZXJyLCAiamF5OiB1bmtub3duIGNhbGwgKCVzKSBpbiBsaW5lICVkXG4iLCBjcCwgbG5vKTsK KyAgICAgICBjb250aW51ZTsKKyAgICAgfQorLSAgICBmcHV0cyhidWYrMSwgc3Rkb3V0KSwgKysg b3V0bGluZTsKKysgICAgZnB1dHMoYnVmKzEsIG91dHB1dF9maWxlKSwgKysgb3V0bGluZTsKKyAg IH0KKyAgIGZyZWVfcGFyc2VyKCk7CisgfQorQEAgLTEwMywxOSArMTAzLDE5IEBAIG91dHB1dF9y dWxlX2RhdGEoKQorICAgICByZWdpc3RlciBpbnQgaTsKKyAgICAgcmVnaXN0ZXIgaW50IGo7Cisg CistCXByaW50ZigiLypcbiBBbGwgbW9yZSB0aGFuIDMgbGluZXMgbG9uZyBydWxlcyBhcmUgd3Jh cHBlZCBpbnRvIGEgbWV0aG9kXG4qL1xuIik7CisrCWZwcmludGYob3V0cHV0X2ZpbGUsICIvKlxu IEFsbCBtb3JlIHRoYW4gMyBsaW5lcyBsb25nIHJ1bGVzIGFyZSB3cmFwcGVkIGludG8gYSBtZXRo b2RcbiovXG4iKTsKKyAKKyAgICAgZm9yIChpID0gMDsgaSA8IG5tZXRob2RzOyArK2kpCisgCXsK Ky0JCXByaW50ZigiJXMiLCBtZXRob2RzW2ldKTsKKysJCWZwcmludGYob3V0cHV0X2ZpbGUsICIl cyIsIG1ldGhvZHNbaV0pOworIAkJRlJFRShtZXRob2RzW2ldKTsKKy0JCXByaW50ZigiXG5cbiIp OworKwkJZnByaW50ZihvdXRwdXRfZmlsZSwgIlxuXG4iKTsKKyAJfQorIAlGUkVFKG1ldGhvZHMp OworIAorLQlwcmludGYoZGVmYXVsdF9saW5lX2Zvcm1hdCwgKytvdXRsaW5lICsgMSk7CisrCWZw cmludGYob3V0cHV0X2ZpbGUsIGRlZmF1bHRfbGluZV9mb3JtYXQsICsrb3V0bGluZSArIDEpOwor IAorLSAgICBwcmludGYoIiAgJXMgc3RhdGljICVzIHNob3J0IFtdIHl5TGhzICA9IHslMTZkLCIs CisrICAgIGZwcmludGYob3V0cHV0X2ZpbGUsICIgICVzIHN0YXRpYyAlcyBzaG9ydCBbXSB5eUxo cyAgPSB7JTE2ZCwiLAorIAkgICBjc2hhcnAgPyAiIiA6ICIgcHJvdGVjdGVkIiwKKyAJICAgY3No YXJwID8gInJlYWRvbmx5IiA6ICJmaW5hbCIsCisgCSAgICBzeW1ib2xfdmFsdWVbc3RhcnRfc3lt Ym9sXSk7CitAQCAtMTI2LDE4ICsxMjYsMTggQEAgb3V0cHV0X3J1bGVfZGF0YSgpCisgCWlmIChq ID49IDEwKQorIAl7CisgCSAgICArK291dGxpbmU7CistCSAgICBwdXRjaGFyKCdcbicpOworKwkg ICAgcHV0YygnXG4nLCBvdXRwdXRfZmlsZSk7CisgCSAgICBqID0gMTsKKyAJfQorICAgICAgICAg ZWxzZQorIAkgICAgKytqOworIAorLSAgICAgICAgcHJpbnRmKCIlNWQsIiwgc3ltYm9sX3ZhbHVl W3JsaHNbaV1dKTsKKysgICAgICAgIGZwcmludGYob3V0cHV0X2ZpbGUsICIlNWQsIiwgc3ltYm9s X3ZhbHVlW3JsaHNbaV1dKTsKKyAgICAgfQorICAgICBvdXRsaW5lICs9IDI7CistICAgIHByaW50 ZigiXG4gIH07XG4iKTsKKysgICAgZnByaW50ZihvdXRwdXRfZmlsZSwgIlxuICB9O1xuIik7Cisg CistICAgIHByaW50ZigiICAlcyBzdGF0aWMgJXMgc2hvcnQgW10geXlMZW4gPSB7JTEyZCwiLAor KyAgICBmcHJpbnRmKG91dHB1dF9maWxlLCAiICAlcyBzdGF0aWMgJXMgc2hvcnQgW10geXlMZW4g PSB7JTEyZCwiLAorIAkgICBjc2hhcnAgPyAiIiA6ICJwcm90ZWN0ZWQiLAorIAkgICBjc2hhcnAg PyAicmVhZG9ubHkiIDogImZpbmFsIiwKKyAJICAgMik7CitAQCAtMTQ4LDE2ICsxNDgsMTYgQEAg b3V0cHV0X3J1bGVfZGF0YSgpCisgCWlmIChqID49IDEwKQorIAl7CisgCSAgICArK291dGxpbmU7 CistCSAgICBwdXRjaGFyKCdcbicpOworKwkgICAgcHV0YygnXG4nLCBvdXRwdXRfZmlsZSk7Cisg CSAgICBqID0gMTsKKyAJfQorIAllbHNlCisgCSAgaisrOworIAorLSAgICAgICAgcHJpbnRmKCIl NWQsIiwgcnJoc1tpICsgMV0gLSBycmhzW2ldIC0gMSk7CisrICAgICAgICBmcHJpbnRmKG91dHB1 dF9maWxlLCAiJTVkLCIsIHJyaHNbaSArIDFdIC0gcnJoc1tpXSAtIDEpOworICAgICB9CisgICAg IG91dGxpbmUgKz0gMjsKKy0gICAgcHJpbnRmKCJcbiAgfTtcbiIpOworKyAgICBmcHJpbnRmKG91 dHB1dF9maWxlLCAiXG4gIH07XG4iKTsKKyB9CisgCisgCitAQCAtMTY1LDcgKzE2NSw3IEBAIG91 dHB1dF95eWRlZnJlZCgpCisgeworICAgICByZWdpc3RlciBpbnQgaSwgajsKKyAKKy0gICAgcHJp bnRmKCIgICVzIHN0YXRpYyAlcyBzaG9ydCBbXSB5eURlZlJlZCA9IHslMTNkLCIsCisrICAgIGZw cmludGYob3V0cHV0X2ZpbGUsICIgICVzIHN0YXRpYyAlcyBzaG9ydCBbXSB5eURlZlJlZCA9IHsl MTNkLCIsCisgCSAgIGNzaGFycCA/ICIiIDogInByb3RlY3RlZCIsCisgCSAgIGNzaGFycCA/ICJy ZWFkb25seSIgOiAiZmluYWwiLAkgICAKKyAJICAgIChkZWZyZWRbMF0gPyBkZWZyZWRbMF0gLSAy IDogMCkpOworQEAgLTE3OCwxNSArMTc4LDE1IEBAIG91dHB1dF95eWRlZnJlZCgpCisgCWVsc2UK KyAJeworIAkgICAgKytvdXRsaW5lOworLQkgICAgcHV0Y2hhcignXG4nKTsKKysJICAgIHB1dGMo J1xuJywgb3V0cHV0X2ZpbGUpOworIAkgICAgaiA9IDE7CisgCX0KKyAKKy0JcHJpbnRmKCIlNWQs IiwgKGRlZnJlZFtpXSA/IGRlZnJlZFtpXSAtIDIgOiAwKSk7CisrCWZwcmludGYob3V0cHV0X2Zp bGUsICIlNWQsIiwgKGRlZnJlZFtpXSA/IGRlZnJlZFtpXSAtIDIgOiAwKSk7CisgICAgIH0KKyAK KyAgICAgb3V0bGluZSArPSAyOworLSAgICBwcmludGYoIlxuICB9O1xuIik7CisrICAgIGZwcmlu dGYob3V0cHV0X2ZpbGUsICJcbiAgfTtcbiIpOworIH0KKyAKKyAKK0BAIC0zMDksNyArMzA5LDcg QEAgZ290b19hY3Rpb25zKCkKKyAgICAgc3RhdGVfY291bnQgPSBORVcyKG5zdGF0ZXMsIHNob3J0 KTsKKyAKKyAgICAgayA9IGRlZmF1bHRfZ290byhzdGFydF9zeW1ib2wgKyAxKTsKKy0gICAgcHJp bnRmKCIgIHByb3RlY3RlZCBzdGF0aWMgJXMgc2hvcnQgW10geXlEZ290byAgPSB7JTE0ZCwiLCBj c2hhcnAgPyAicmVhZG9ubHkiIDogImZpbmFsIiwgayk7CisrICAgIGZwcmludGYob3V0cHV0X2Zp bGUsICIgIHByb3RlY3RlZCBzdGF0aWMgJXMgc2hvcnQgW10geXlEZ290byAgPSB7JTE0ZCwiLCBj c2hhcnAgPyAicmVhZG9ubHkiIDogImZpbmFsIiwgayk7CisgICAgIHNhdmVfY29sdW1uKHN0YXJ0 X3N5bWJvbCArIDEsIGspOworIAorICAgICBqID0gMTA7CitAQCAtMzE4LDE5ICszMTgsMTkgQEAg Z290b19hY3Rpb25zKCkKKyAJaWYgKGogPj0gMTApCisgCXsKKyAJICAgICsrb3V0bGluZTsKKy0J ICAgIHB1dGNoYXIoJ1xuJyk7CisrCSAgICBwdXRjKCdcbicsIG91dHB1dF9maWxlKTsKKyAJICAg IGogPSAxOworIAl9CisgCWVsc2UKKyAJICAgICsrajsKKyAKKyAJayA9IGRlZmF1bHRfZ290byhp KTsKKy0JcHJpbnRmKCIlNWQsIiwgayk7CisrCWZwcmludGYob3V0cHV0X2ZpbGUsICIlNWQsIiwg ayk7CisgCXNhdmVfY29sdW1uKGksIGspOworICAgICB9CisgCisgICAgIG91dGxpbmUgKz0gMjsK Ky0gICAgcHJpbnRmKCJcbiAgfTtcbiIpOworKyAgICBmcHJpbnRmKG91dHB1dF9maWxlLCAiXG4g IH07XG4iKTsKKyAgICAgRlJFRShzdGF0ZV9jb3VudCk7CisgfQorIAorQEAgLTYzMyw3ICs2MzMs NyBAQCBvdXRwdXRfYmFzZSgpCisgeworICAgICByZWdpc3RlciBpbnQgaSwgajsKKyAKKy0gICAg cHJpbnRmKCIgIHByb3RlY3RlZCBzdGF0aWMgJXMgc2hvcnQgW10geXlTaW5kZXggPSB7JTEzZCwi LCBjc2hhcnA/ICJyZWFkb25seSI6ImZpbmFsIiwgYmFzZVswXSk7CisrICAgIGZwcmludGYob3V0 cHV0X2ZpbGUsICIgIHByb3RlY3RlZCBzdGF0aWMgJXMgc2hvcnQgW10geXlTaW5kZXggPSB7JTEz ZCwiLCBjc2hhcnA/ICJyZWFkb25seSI6ImZpbmFsIiwgYmFzZVswXSk7CisgCisgICAgIGogPSAx MDsKKyAgICAgZm9yIChpID0gMTsgaSA8IG5zdGF0ZXM7IGkrKykKK0BAIC02NDEsMTcgKzY0MSwx NyBAQCBvdXRwdXRfYmFzZSgpCisgCWlmIChqID49IDEwKQorIAl7CisgCSAgICArK291dGxpbmU7 CistCSAgICBwdXRjaGFyKCdcbicpOworKwkgICAgcHV0YygnXG4nLCBvdXRwdXRfZmlsZSk7Cisg CSAgICBqID0gMTsKKyAJfQorIAllbHNlCisgCSAgICArK2o7CisgCistCXByaW50ZigiJTVkLCIs IGJhc2VbaV0pOworKwlmcHJpbnRmKG91dHB1dF9maWxlLCAiJTVkLCIsIGJhc2VbaV0pOworICAg ICB9CisgCisgICAgIG91dGxpbmUgKz0gMjsKKy0gICAgcHJpbnRmKCJcbiAgfTtcbiAgcHJvdGVj dGVkIHN0YXRpYyAlcyBzaG9ydCBbXSB5eVJpbmRleCA9IHslMTNkLCIsCisrICAgIGZwcmludGYo b3V0cHV0X2ZpbGUsICJcbiAgfTtcbiAgcHJvdGVjdGVkIHN0YXRpYyAlcyBzaG9ydCBbXSB5eVJp bmRleCA9IHslMTNkLCIsCisgCSAgIGNzaGFycCA/ICJyZWFkb25seSIgOiAiZmluYWwiLAorIAkg ICAgYmFzZVtuc3RhdGVzXSk7CisgCitAQCAtNjYxLDE3ICs2NjEsMTcgQEAgb3V0cHV0X2Jhc2Uo KQorIAlpZiAoaiA+PSAxMCkKKyAJeworIAkgICAgKytvdXRsaW5lOworLQkgICAgcHV0Y2hhcign XG4nKTsKKysJICAgIHB1dGMoJ1xuJywgb3V0cHV0X2ZpbGUpOworIAkgICAgaiA9IDE7CisgCX0K KyAJZWxzZQorIAkgICAgKytqOworIAorLQlwcmludGYoIiU1ZCwiLCBiYXNlW2ldKTsKKysJZnBy aW50ZihvdXRwdXRfZmlsZSwgIiU1ZCwiLCBiYXNlW2ldKTsKKyAgICAgfQorIAorICAgICBvdXRs aW5lICs9IDI7CistICAgIHByaW50ZigiXG4gIH07XG4gIHByb3RlY3RlZCBzdGF0aWMgJXMgc2hv cnQgW10geXlHaW5kZXggPSB7JTEzZCwiLAorKyAgICBmcHJpbnRmKG91dHB1dF9maWxlLCAiXG4g IH07XG4gIHByb3RlY3RlZCBzdGF0aWMgJXMgc2hvcnQgW10geXlHaW5kZXggPSB7JTEzZCwiLAor IAkgICBjc2hhcnAgPyAicmVhZG9ubHkiIDogImZpbmFsIiwKKyAJICAgIGJhc2VbMipuc3RhdGVz XSk7CisgCitAQCAtNjgxLDE3ICs2ODEsMTcgQEAgb3V0cHV0X2Jhc2UoKQorIAlpZiAoaiA+PSAx MCkKKyAJeworIAkgICAgKytvdXRsaW5lOworLQkgICAgcHV0Y2hhcignXG4nKTsKKysJICAgIHB1 dGMoJ1xuJywgb3V0cHV0X2ZpbGUpOworIAkgICAgaiA9IDE7CisgCX0KKyAJZWxzZQorIAkgICAg KytqOworIAorLQlwcmludGYoIiU1ZCwiLCBiYXNlW2ldKTsKKysJZnByaW50ZihvdXRwdXRfZmls ZSwgIiU1ZCwiLCBiYXNlW2ldKTsKKyAgICAgfQorIAorICAgICBvdXRsaW5lICs9IDI7CistICAg IHByaW50ZigiXG4gIH07XG4iKTsKKysgICAgZnByaW50ZihvdXRwdXRfZmlsZSwgIlxuICB9O1xu Iik7CisgICAgIEZSRUUoYmFzZSk7CisgfQorIAorQEAgLTcwMiw3ICs3MDIsNyBAQCBvdXRwdXRf dGFibGUoKQorICAgICByZWdpc3RlciBpbnQgaTsKKyAgICAgcmVnaXN0ZXIgaW50IGo7CisgCist ICAgIHByaW50ZigiICBwcm90ZWN0ZWQgc3RhdGljICVzIHNob3J0IFtdIHl5VGFibGUgPSB7JTE0 ZCwiLCBjc2hhcnAgPyAicmVhZG9ubHkiIDogImZpbmFsIiwgdGFibGVbMF0pOworKyAgICBmcHJp bnRmKG91dHB1dF9maWxlLCAiICBwcm90ZWN0ZWQgc3RhdGljICVzIHNob3J0IFtdIHl5VGFibGUg PSB7JTE0ZCwiLCBjc2hhcnAgPyAicmVhZG9ubHkiIDogImZpbmFsIiwgdGFibGVbMF0pOworIAor ICAgICBqID0gMTA7CisgICAgIGZvciAoaSA9IDE7IGkgPD0gaGlnaDsgaSsrKQorQEAgLTcxMCwx NyArNzEwLDE3IEBAIG91dHB1dF90YWJsZSgpCisgCWlmIChqID49IDEwKQorIAl7CisgCSAgICAr K291dGxpbmU7CistCSAgICBwdXRjaGFyKCdcbicpOworKwkgICAgcHV0YygnXG4nLCBvdXRwdXRf ZmlsZSk7CisgCSAgICBqID0gMTsKKyAJfQorIAllbHNlCisgCSAgICArK2o7CisgCistCXByaW50 ZigiJTVkLCIsIHRhYmxlW2ldKTsKKysJZnByaW50ZihvdXRwdXRfZmlsZSwgIiU1ZCwiLCB0YWJs ZVtpXSk7CisgICAgIH0KKyAKKyAgICAgb3V0bGluZSArPSAyOworLSAgICBwcmludGYoIlxuICB9 O1xuIik7CisrICAgIGZwcmludGYob3V0cHV0X2ZpbGUsICJcbiAgfTtcbiIpOworICAgICBGUkVF KHRhYmxlKTsKKyB9CisgCitAQCAtNzMxLDcgKzczMSw3IEBAIG91dHB1dF9jaGVjaygpCisgICAg IHJlZ2lzdGVyIGludCBpOworICAgICByZWdpc3RlciBpbnQgajsKKyAKKy0gICAgcHJpbnRmKCIg IHByb3RlY3RlZCBzdGF0aWMgJXMgc2hvcnQgW10geXlDaGVjayA9IHslMTRkLCIsCisrICAgIGZw cmludGYob3V0cHV0X2ZpbGUsICIgIHByb3RlY3RlZCBzdGF0aWMgJXMgc2hvcnQgW10geXlDaGVj ayA9IHslMTRkLCIsCisgCSAgIGNzaGFycCA/ICJyZWFkb25seSIgOiAiZmluYWwiLAorIAkgICAg Y2hlY2tbMF0pOworIAorQEAgLTc0MSwxNyArNzQxLDE3IEBAIG91dHB1dF9jaGVjaygpCisgCWlm IChqID49IDEwKQorIAl7CisgCSAgICArK291dGxpbmU7CistCSAgICBwdXRjaGFyKCdcbicpOwor KwkgICAgcHV0YygnXG4nLCBvdXRwdXRfZmlsZSk7CisgCSAgICBqID0gMTsKKyAJfQorIAllbHNl CisgCSAgICArK2o7CisgCistCXByaW50ZigiJTVkLCIsIGNoZWNrW2ldKTsKKysJZnByaW50Zihv dXRwdXRfZmlsZSwgIiU1ZCwiLCBjaGVja1tpXSk7CisgICAgIH0KKyAKKyAgICAgb3V0bGluZSAr PSAyOworLSAgICBwcmludGYoIlxuICB9O1xuIik7CisrICAgIGZwcmludGYob3V0cHV0X2ZpbGUs ICJcbiAgfTtcbiIpOworICAgICBGUkVFKGNoZWNrKTsKKyB9CisgCitAQCAtODAxLDMwICs4MDEs MzAgQEAgY2hhciAqcHJlZml4OworIAlpZiAoaXNfQ19pZGVudGlmaWVyKHMpKQorIAl7CisgCSAg ICBpZiAocHJlZml4KQorLQkgICAgICAgIHByaW50ZigiICAlcyAiLCBwcmVmaXgpOworKwkgICAg ICAgIGZwcmludGYob3V0cHV0X2ZpbGUsICIgICVzICIsIHByZWZpeCk7CisgCSAgICBjID0gKnM7 CisgCSAgICBpZiAoYyA9PSAnIicpCisgCSAgICB7CisgCQl3aGlsZSAoKGMgPSAqKytzKSAhPSAn IicpCisgCQl7CistCQkgICAgcHV0Y2hhcihjKTsKKysJCSAgICBwdXRjKGMsIG91dHB1dF9maWxl KTsKKyAJCX0KKyAJICAgIH0KKyAJICAgIGVsc2UKKyAJICAgIHsKKyAJCWRvCisgCQl7CistCQkg ICAgcHV0Y2hhcihjKTsKKysJCSAgICBwdXRjKGMsIG91dHB1dF9maWxlKTsKKyAJCX0KKyAJCXdo aWxlIChjID0gKisrcyk7CisgCSAgICB9CisgCSAgICArK291dGxpbmU7CistCSAgICBwcmludGYo IiA9ICVkJXNcbiIsIHN5bWJvbF92YWx1ZVtpXSwgY3NoYXJwID8gIjsiIDogIjsiKTsKKysJICAg IGZwcmludGYob3V0cHV0X2ZpbGUsICIgPSAlZCVzXG4iLCBzeW1ib2xfdmFsdWVbaV0sIGNzaGFy cCA/ICI7IiA6ICI7Iik7CisgCX0KKyAgICAgfQorIAorICAgICArK291dGxpbmU7CistICAgIHBy aW50ZigiICAlcyB5eUVycm9yQ29kZSA9ICVkJXNcbiIsIHByZWZpeCA/IHByZWZpeCA6ICIiLCBz eW1ib2xfdmFsdWVbMV0sIGNzaGFycCA/ICI7IiA6ICI7Iik7CisrICAgIGZwcmludGYob3V0cHV0 X2ZpbGUsICIgICVzIHl5RXJyb3JDb2RlID0gJWQlc1xuIiwgcHJlZml4ID8gcHJlZml4IDogIiIs IHN5bWJvbF92YWx1ZVsxXSwgY3NoYXJwID8gIjsiIDogIjsiKTsKKyB9CisgCisgCitAQCAtODQy LDE0ICs4NDIsMTQgQEAgY2hhciAqbmFtZTsKKyAgICAgaWYgKChjID0gZ2V0YyhpbikpICE9IEVP RikgeworICAgICAgIGlmIChjID09ICAnXG4nKQorIAkrK291dGxpbmU7CistICAgICAgcHV0Y2hh cihjKTsKKysgICAgICBwdXRjKGMsIG91dHB1dF9maWxlKTsKKyAgICAgICB3aGlsZSAoKGMgPSBn ZXRjKGluKSkgIT0gRU9GKQorICAgICAgIHsKKyAJaWYgKGMgPT0gJ1xuJykKKyAJICAgICsrb3V0 bGluZTsKKy0gICAgCXB1dGNoYXIoYyk7CisrICAgIAlwdXRjKGMsIG91dHB1dF9maWxlKTsKKyAg ICAgICB9CistICAgICAgcHJpbnRmKGRlZmF1bHRfbGluZV9mb3JtYXQsICsrb3V0bGluZSArIDEp OworKyAgICAgIGZwcmludGYob3V0cHV0X2ZpbGUsIGRlZmF1bHRfbGluZV9mb3JtYXQsICsrb3V0 bGluZSArIDEpOworICAgICB9CisgICAgIGZjbG9zZShpbik7CisgfQorQEAgLTg2Miw2NyArODYy LDY3IEBAIG91dHB1dF9kZWJ1ZygpCisgICAgIGNoYXIgKiBwcmVmaXggPSB0ZmxhZyA/ICIiIDog Ii8vdCI7CisgCisgICAgICsrb3V0bGluZTsKKy0gICAgcHJpbnRmKCIgIHByb3RlY3RlZCAlcyBp bnQgeXlGaW5hbCA9ICVkO1xuIiwgY3NoYXJwID8gImNvbnN0IiA6ICJzdGF0aWMgZmluYWwiLCBm aW5hbF9zdGF0ZSk7CisrICAgIGZwcmludGYob3V0cHV0X2ZpbGUsICIgIHByb3RlY3RlZCAlcyBp bnQgeXlGaW5hbCA9ICVkO1xuIiwgY3NoYXJwID8gImNvbnN0IiA6ICJzdGF0aWMgZmluYWwiLCBm aW5hbF9zdGF0ZSk7CisgCisgICAgICAgKytvdXRsaW5lOworLQkgIHByaW50ZiAoIiVzIC8vIFB1 dCB0aGlzIGFycmF5IGludG8gYSBzZXBhcmF0ZSBjbGFzcyBzbyBpdCBpcyBvbmx5IGluaXRpYWxp emVkIGlmIGRlYnVnZ2luZyBpcyBhY3R1YWxseSB1c2VkXG4iLCBwcmVmaXgpOworLQkgIHByaW50 ZiAoIiVzIC8vIFVzZSBNYXJzaGFsQnlSZWZPYmplY3QgdG8gZGlzYWJsZSBpbmxpbmluZ1xuIiwg cHJlZml4KTsKKy0JICBwcmludGYoIiVzIGNsYXNzIFlZUnVsZXMgJXMge1xuIiwgcHJlZml4LCBj c2hhcnAgPyAiOiBNYXJzaGFsQnlSZWZPYmplY3QiIDogIiIpOworLSAgICAgIHByaW50ZigiJXMg IHB1YmxpYyBzdGF0aWMgJXMgc3RyaW5nIFtdIHl5UnVsZSA9IHtcbiIsIHByZWZpeCwgY3NoYXJw ID8gInJlYWRvbmx5IiA6ICJmaW5hbCIpOworKwkgIGZwcmludGYob3V0cHV0X2ZpbGUsICIlcyAv LyBQdXQgdGhpcyBhcnJheSBpbnRvIGEgc2VwYXJhdGUgY2xhc3Mgc28gaXQgaXMgb25seSBpbml0 aWFsaXplZCBpZiBkZWJ1Z2dpbmcgaXMgYWN0dWFsbHkgdXNlZFxuIiwgcHJlZml4KTsKKysJICBm cHJpbnRmKG91dHB1dF9maWxlLCAiJXMgLy8gVXNlIE1hcnNoYWxCeVJlZk9iamVjdCB0byBkaXNh YmxlIGlubGluaW5nXG4iLCBwcmVmaXgpOworKwkgIGZwcmludGYob3V0cHV0X2ZpbGUsICIlcyBj bGFzcyBZWVJ1bGVzICVzIHtcbiIsIHByZWZpeCwgY3NoYXJwID8gIjogTWFyc2hhbEJ5UmVmT2Jq ZWN0IiA6ICIiKTsKKysgICAgICBmcHJpbnRmKG91dHB1dF9maWxlLCAiJXMgIHB1YmxpYyBzdGF0 aWMgJXMgc3RyaW5nIFtdIHl5UnVsZSA9IHtcbiIsIHByZWZpeCwgY3NoYXJwID8gInJlYWRvbmx5 IiA6ICJmaW5hbCIpOworICAgICAgIGZvciAoaSA9IDI7IGkgPCBucnVsZXM7ICsraSkKKyAgICAg ICB7CistCSAgcHJpbnRmKCIlcyAgICBcIiVzIDoiLCBwcmVmaXgsIHN5bWJvbF9uYW1lW3JsaHNb aV1dKTsKKysJICBmcHJpbnRmKG91dHB1dF9maWxlLCAiJXMgICAgXCIlcyA6IiwgcHJlZml4LCBz eW1ib2xfbmFtZVtybGhzW2ldXSk7CisgCSAgZm9yIChqID0gcnJoc1tpXTsgcml0ZW1bal0gPiAw OyArK2opCisgCSAgeworIAkgICAgICBzID0gc3ltYm9sX25hbWVbcml0ZW1bal1dOworIAkgICAg ICBpZiAoc1swXSA9PSAnIicpCisgCSAgICAgIHsKKy0JCSAgcHJpbnRmKCIgXFxcIiIpOworKwkJ ICBmcHJpbnRmKG91dHB1dF9maWxlLCAiIFxcXCIiKTsKKyAJCSAgd2hpbGUgKCorK3MgIT0gJyIn KQorIAkJICB7CisgCQkgICAgICBpZiAoKnMgPT0gJ1xcJykKKyAJCSAgICAgIHsKKyAJCQkgIGlm IChzWzFdID09ICdcXCcpCistCQkJICAgICAgcHJpbnRmKCJcXFxcXFxcXCIpOworKwkJCSAgICAg IGZwcmludGYob3V0cHV0X2ZpbGUsICJcXFxcXFxcXCIpOworIAkJCSAgZWxzZQorLQkJCSAgICAg IHByaW50ZigiXFxcXCVjIiwgc1sxXSk7CisrCQkJICAgICAgZnByaW50ZihvdXRwdXRfZmlsZSwg IlxcXFwlYyIsIHNbMV0pOworIAkJCSAgKytzOworIAkJICAgICAgfQorIAkJICAgICAgZWxzZQor LQkJCSAgcHV0Y2hhcigqcyk7CisrCQkJICBwdXRjKCpzLCBvdXRwdXRfZmlsZSk7CisgCQkgIH0K Ky0JCSAgcHJpbnRmKCJcXFwiIik7CisrCQkgIGZwcmludGYob3V0cHV0X2ZpbGUsICJcXFwiIik7 CisgCSAgICAgIH0KKyAJICAgICAgZWxzZSBpZiAoc1swXSA9PSAnXCcnKQorIAkgICAgICB7Cisg CQkgIGlmIChzWzFdID09ICciJykKKy0JCSAgICAgIHByaW50ZigiICdcXFwiJyIpOworKwkJICAg ICAgZnByaW50ZihvdXRwdXRfZmlsZSwgIiAnXFxcIiciKTsKKyAJCSAgZWxzZSBpZiAoc1sxXSA9 PSAnXFwnKQorIAkJICB7CisgCQkgICAgICBpZiAoc1syXSA9PSAnXFwnKQorLQkJCSAgcHJpbnRm KCIgJ1xcXFxcXFxcIik7CisrCQkJICBmcHJpbnRmKG91dHB1dF9maWxlLCAiICdcXFxcXFxcXCIp OworIAkJICAgICAgZWxzZQorLQkJCSAgcHJpbnRmKCIgJ1xcXFwlYyIsIHNbMl0pOworKwkJCSAg ZnByaW50ZihvdXRwdXRfZmlsZSwgIiAnXFxcXCVjIiwgc1syXSk7CisgCQkgICAgICBzICs9IDI7 CisgCQkgICAgICB3aGlsZSAoKisrcyAhPSAnXCcnKQorLQkJCSAgcHV0Y2hhcigqcyk7CistCQkg ICAgICBwdXRjaGFyKCdcJycpOworKwkJCSAgcHV0Yygqcywgb3V0cHV0X2ZpbGUpOworKwkJICAg ICAgcHV0YygnXCcnLCBvdXRwdXRfZmlsZSk7CisgCQkgIH0KKyAJCSAgZWxzZQorLQkJICAgICAg cHJpbnRmKCIgJyVjJyIsIHNbMV0pOworKwkJICAgICAgZnByaW50ZihvdXRwdXRfZmlsZSwgIiAn JWMnIiwgc1sxXSk7CisgCSAgICAgIH0KKyAJICAgICAgZWxzZQorLQkJICBwcmludGYoIiAlcyIs IHMpOworKwkJICBmcHJpbnRmKG91dHB1dF9maWxlLCAiICVzIiwgcyk7CisgCSAgfQorIAkgICsr b3V0bGluZTsKKy0JICBwcmludGYoIlwiLFxuIik7CisrCSAgZnByaW50ZihvdXRwdXRfZmlsZSwg IlwiLFxuIik7CisgICAgICAgfQorICAgICAgICsrIG91dGxpbmU7CistICAgICAgcHJpbnRmKCIl cyAgfTtcbiIsIHByZWZpeCk7CistCSAgcHJpbnRmICgiJXMgcHVibGljIHN0YXRpYyBzdHJpbmcg Z2V0UnVsZSAoaW50IGluZGV4KSB7XG4iLCBwcmVmaXgpOworLQkgIHByaW50ZiAoIiVzICAgIHJl dHVybiB5eVJ1bGUgW2luZGV4XTtcbiIsIHByZWZpeCk7CistCSAgcHJpbnRmICgiJXMgfVxuIiwg cHJlZml4KTsKKy0JICBwcmludGYgKCIlc31cbiIsIHByZWZpeCk7CisrICAgICAgZnByaW50Zihv dXRwdXRfZmlsZSwgIiVzICB9O1xuIiwgcHJlZml4KTsKKysJICBmcHJpbnRmKG91dHB1dF9maWxl LCAiJXMgcHVibGljIHN0YXRpYyBzdHJpbmcgZ2V0UnVsZSAoaW50IGluZGV4KSB7XG4iLCBwcmVm aXgpOworKwkgIGZwcmludGYob3V0cHV0X2ZpbGUsICIlcyAgICByZXR1cm4geXlSdWxlIFtpbmRl eF07XG4iLCBwcmVmaXgpOworKwkgIGZwcmludGYob3V0cHV0X2ZpbGUsICIlcyB9XG4iLCBwcmVm aXgpOworKwkgIGZwcmludGYob3V0cHV0X2ZpbGUsICIlc31cbiIsIHByZWZpeCk7CisgCisgICAg IG1heCA9IDA7CisgICAgIGZvciAoaSA9IDI7IGkgPCBudG9rZW5zOyArK2kpCitAQCAtOTMxLDcg KzkzMSw3IEBAIG91dHB1dF9kZWJ1ZygpCisgCisgCS8qIG5lZWQgeXlOYW1lcyBmb3IgeXlFeHBl Y3RpbmcoKSAqLworIAorLSAgICAgIHByaW50ZigiICBwcm90ZWN0ZWQgc3RhdGljICVzIHN0cmlu ZyBbXSB5eU5hbWVzID0geyIsIGNzaGFycCA/ICJyZWFkb25seSIgOiAiZmluYWwiKTsKKysgICAg ICBmcHJpbnRmKG91dHB1dF9maWxlLCAiICBwcm90ZWN0ZWQgc3RhdGljICVzIHN0cmluZyBbXSB5 eU5hbWVzID0geyIsIGNzaGFycCA/ICJyZWFkb25seSIgOiAiZmluYWwiKTsKKyAgICAgICBzeW1u YW0gPSAoY2hhciAqKikgTUFMTE9DKChtYXgrMSkqc2l6ZW9mKGNoYXIgKikpOworICAgICAgIGlm IChzeW1uYW0gPT0gMCkgbm9fc3BhY2UoKTsKKyAgIAorQEAgLTk0Myw3ICs5NDMsNyBAQCBvdXRw dXRfZGVidWcoKQorIAkgIHN5bW5hbVtzeW1ib2xfdmFsdWVbaV1dID0gc3ltYm9sX25hbWVbaV07 CisgICAgICAgc3ltbmFtWzBdID0gImVuZC1vZi1maWxlIjsKKyAgIAorLSAgICAgIGogPSA3MDsg ZnB1dHMoIiAgICAiLCBzdGRvdXQpOworKyAgICAgIGogPSA3MDsgZnB1dHMoIiAgICAiLCBvdXRw dXRfZmlsZSk7CisgICAgICAgZm9yIChpID0gMDsgaSA8PSBtYXg7ICsraSkKKyAgICAgICB7Cisg CSAgaWYgKHMgPSBzeW1uYW1baV0pCitAQCAtOTY1LDI1ICs5NjUsMjUgQEAgb3V0cHV0X2RlYnVn KCkKKyAJCSAgaWYgKGogPiA3MCkKKyAJCSAgeworIAkJICAgICAgKytvdXRsaW5lOworLQkJICAg ICAgcHJpbnRmKCJcbiAgICAiKTsKKysJCSAgICAgIGZwcmludGYob3V0cHV0X2ZpbGUsICJcbiAg ICAiKTsKKyAJCSAgICAgIGogPSBrOworIAkJICB9CistCQkgIHByaW50ZigiXCJcXFwiIik7Cisr CQkgIGZwcmludGYob3V0cHV0X2ZpbGUsICJcIlxcXCIiKTsKKyAJCSAgcyA9IHN5bW5hbVtpXTsK KyAJCSAgd2hpbGUgKCorK3MgIT0gJyInKQorIAkJICB7CisgCQkgICAgICBpZiAoKnMgPT0gJ1xc JykKKyAJCSAgICAgIHsKKy0JCQkgIHByaW50ZigiXFxcXCIpOworKwkJCSAgZnByaW50ZihvdXRw dXRfZmlsZSwgIlxcXFwiKTsKKyAJCQkgIGlmICgqKytzID09ICdcXCcpCistCQkJICAgICAgcHJp bnRmKCJcXFxcIik7CisrCQkJICAgICAgZnByaW50ZihvdXRwdXRfZmlsZSwgIlxcXFwiKTsKKyAJ CQkgIGVsc2UKKy0JCQkgICAgICBwdXRjaGFyKCpzKTsKKysJCQkgICAgICBwdXRjKCpzLCBvdXRw dXRfZmlsZSk7CisgCQkgICAgICB9CisgCQkgICAgICBlbHNlCistCQkJICBwdXRjaGFyKCpzKTsK KysJCQkgIHB1dGMoKnMsIG91dHB1dF9maWxlKTsKKyAJCSAgfQorLQkJICBwcmludGYoIlxcXCJc IiwiKTsKKysJCSAgZnByaW50ZihvdXRwdXRfZmlsZSwgIlxcXCJcIiwiKTsKKyAJICAgICAgfQor IAkgICAgICBlbHNlIGlmIChzWzBdID09ICdcJycpCisgCSAgICAgIHsKK0BAIC05OTMsMTAgKzk5 MywxMCBAQCBvdXRwdXRfZGVidWcoKQorIAkJICAgICAgaWYgKGogPiA3MCkKKyAJCSAgICAgIHsK KyAJCQkgICsrb3V0bGluZTsKKy0JCSAgICAgIAkgIHByaW50ZigiXG4gICAgIik7CisrCQkgICAg ICAJICBmcHJpbnRmKG91dHB1dF9maWxlLCAiXG4gICAgIik7CisgCQkJICBqID0gNzsKKyAJCSAg ICAgIH0KKy0JCSAgICAgIHByaW50ZigiXCInXFxcIidcIiwiKTsKKysJCSAgICAgIGZwcmludGYo b3V0cHV0X2ZpbGUsICJcIidcXFwiJ1wiLCIpOworIAkJICB9CisgCQkgIGVsc2UKKyAJCSAgewor QEAgLTEwMTUsMjUgKzEwMTUsMjUgQEAgb3V0cHV0X2RlYnVnKCkKKyAJCSAgICAgIGlmIChqID4g NzApCisgCQkgICAgICB7CisgCQkJICArK291dGxpbmU7CistCQkgICAgICAJICBwcmludGYoIlxu ICAgICIpOworKwkJICAgICAgCSAgZnByaW50ZihvdXRwdXRfZmlsZSwgIlxuICAgICIpOworIAkJ CSAgaiA9IGs7CisgCQkgICAgICB9CistCQkgICAgICBwcmludGYoIlwiJyIpOworKwkJICAgICAg ZnByaW50ZihvdXRwdXRfZmlsZSwgIlwiJyIpOworIAkJICAgICAgcyA9IHN5bW5hbVtpXTsKKyAJ CSAgICAgIHdoaWxlICgqKytzICE9ICdcJycpCisgCQkgICAgICB7CisgCQkJICBpZiAoKnMgPT0g J1xcJykKKyAJCQkgIHsKKy0JCQkgICAgICBwcmludGYoIlxcXFwiKTsKKysJCQkgICAgICBmcHJp bnRmKG91dHB1dF9maWxlLCAiXFxcXCIpOworIAkJCSAgICAgIGlmICgqKytzID09ICdcXCcpCist CQkJCSAgcHJpbnRmKCJcXFxcIik7CisrCQkJCSAgZnByaW50ZihvdXRwdXRfZmlsZSwgIlxcXFwi KTsKKyAJCQkgICAgICBlbHNlCistCQkJCSAgcHV0Y2hhcigqcyk7CisrCQkJCSAgcHV0Yygqcywg b3V0cHV0X2ZpbGUpOworIAkJCSAgfQorIAkJCSAgZWxzZQorLQkJCSAgICAgIHB1dGNoYXIoKnMp OworKwkJCSAgICAgIHB1dGMoKnMsIG91dHB1dF9maWxlKTsKKyAJCSAgICAgIH0KKy0JCSAgICAg IHByaW50ZigiJ1wiLCIpOworKwkJICAgICAgZnByaW50ZihvdXRwdXRfZmlsZSwgIidcIiwiKTsK KyAJCSAgfQorIAkgICAgICB9CisgCSAgICAgIGVsc2UKK0BAIC0xMDQzLDEyICsxMDQzLDEyIEBA IG91dHB1dF9kZWJ1ZygpCisgCQkgIGlmIChqID4gNzApCisgCQkgIHsKKyAJCSAgICAgICsrb3V0 bGluZTsKKy0JCSAgICAgIHByaW50ZigiXG4gICAgIik7CisrCQkgICAgICBmcHJpbnRmKG91dHB1 dF9maWxlLCAiXG4gICAgIik7CisgCQkgICAgICBqID0gazsKKyAJCSAgfQorLQkJICBwdXRjaGFy KCciJyk7CistCQkgIGRvIHsgcHV0Y2hhcigqcyk7IH0gd2hpbGUgKCorK3MpOworLQkJICBwcmlu dGYoIlwiLCIpOworKwkJICBwdXRjKCciJywgb3V0cHV0X2ZpbGUpOworKwkJICBkbyB7IHB1dGMo KnMsIG91dHB1dF9maWxlKTsgfSB3aGlsZSAoKisrcyk7CisrCQkgIGZwcmludGYob3V0cHV0X2Zp bGUsICJcIiwiKTsKKyAJICAgICAgfQorIAkgIH0KKyAJICBlbHNlCitAQCAtMTA1NywxNCArMTA1 NywxNCBAQCBvdXRwdXRfZGVidWcoKQorIAkgICAgICBpZiAoaiA+IDcwKQorIAkgICAgICB7Cisg CQkgICsrb3V0bGluZTsKKy0JCSAgcHJpbnRmKCJcbiAgICAiKTsKKysJCSAgZnByaW50ZihvdXRw dXRfZmlsZSwgIlxuICAgICIpOworIAkJICBqID0gNTsKKyAJICAgICAgfQorLQkgICAgICBwcmlu dGYoIm51bGwsIik7CisrCSAgICAgIGZwcmludGYob3V0cHV0X2ZpbGUsICJudWxsLCIpOworIAkg IH0KKyAgICAgICB9CisgICAgICAgb3V0bGluZSArPSAyOworLSAgICAgIHByaW50ZigiXG4gIH07 XG4iKTsKKysgICAgICBmcHJpbnRmKG91dHB1dF9maWxlLCAiXG4gIH07XG4iKTsKKyAgICAgICBG UkVFKHN5bW5hbSk7CisgfQorIAorQEAgLTEwODQsMTkgKzEwODQsMTkgQEAgb3V0cHV0X3RyYWls aW5nX3RleHQoKQorIAlpZiAoKGMgPSBnZXRjKGluKSkgPT0gRU9GKQorIAkgICAgcmV0dXJuOwor ICAgICAgICAgKytvdXRsaW5lOworLQlwcmludGYobGluZV9mb3JtYXQsIGxpbmVubywgaW5wdXRf ZmlsZV9uYW1lKTsKKysJZnByaW50ZihvdXRwdXRfZmlsZSwgbGluZV9mb3JtYXQsIGxpbmVubywg aW5wdXRfZmlsZV9uYW1lKTsKKyAJaWYgKGMgPT0gJ1xuJykKKyAJICAgICsrb3V0bGluZTsKKy0J cHV0Y2hhcihjKTsKKysJcHV0YyhjLCBvdXRwdXRfZmlsZSk7CisgCWxhc3QgPSBjOworICAgICB9 CisgICAgIGVsc2UKKyAgICAgeworIAkrK291dGxpbmU7CistCXByaW50ZihsaW5lX2Zvcm1hdCwg bGluZW5vLCBpbnB1dF9maWxlX25hbWUpOworLQlkbyB7IHB1dGNoYXIoYyk7IH0gd2hpbGUgKChj ID0gKisrY3B0cikgIT0gJ1xuJyk7CisrCWZwcmludGYob3V0cHV0X2ZpbGUsIGxpbmVfZm9ybWF0 LCBsaW5lbm8sIGlucHV0X2ZpbGVfbmFtZSk7CisrCWRvIHsgcHV0YyhjLCBvdXRwdXRfZmlsZSk7 IH0gd2hpbGUgKChjID0gKisrY3B0cikgIT0gJ1xuJyk7CisgCSsrb3V0bGluZTsKKy0JcHV0Y2hh cignXG4nKTsKKysJcHV0YygnXG4nLCBvdXRwdXRfZmlsZSk7CisgCWxhc3QgPSAnXG4nOworICAg ICB9CisgCitAQCAtMTEwNCwxNiArMTEwNCwxNiBAQCBvdXRwdXRfdHJhaWxpbmdfdGV4dCgpCisg ICAgIHsKKyAJaWYgKGMgPT0gJ1xuJykKKyAJICAgICsrb3V0bGluZTsKKy0JcHV0Y2hhcihjKTsK KysJcHV0YyhjLCBvdXRwdXRfZmlsZSk7CisgCWxhc3QgPSBjOworICAgICB9CisgCisgICAgIGlm IChsYXN0ICE9ICdcbicpCisgICAgIHsKKyAJKytvdXRsaW5lOworLQlwdXRjaGFyKCdcbicpOwor KwlwdXRjKCdcbicsIG91dHB1dF9maWxlKTsKKyAgICAgfQorLSAgICBwcmludGYoZGVmYXVsdF9s aW5lX2Zvcm1hdCwgKytvdXRsaW5lICsgMSk7CisrICAgIGZwcmludGYob3V0cHV0X2ZpbGUsIGRl ZmF1bHRfbGluZV9mb3JtYXQsICsrb3V0bGluZSArIDEpOworIH0KKyAKKyAKK0BAIC0xMTMyLDIy ICsxMTMyLDIyIEBAIG91dHB1dF9zZW1hbnRpY19hY3Rpb25zKCkKKyAgICAgbGFzdCA9IGM7Cisg ICAgIGlmIChjID09ICdcbicpCisgCSsrb3V0bGluZTsKKy0gICAgcHV0Y2hhcihjKTsKKysgICAg cHV0YyhjLCBvdXRwdXRfZmlsZSk7CisgICAgIHdoaWxlICgoYyA9IGdldGMoYWN0aW9uX2ZpbGUp KSAhPSBFT0YpCisgICAgIHsKKyAJaWYgKGMgPT0gJ1xuJykKKyAJICAgICsrb3V0bGluZTsKKy0J cHV0Y2hhcihjKTsKKysJcHV0YyhjLCBvdXRwdXRfZmlsZSk7CisgCWxhc3QgPSBjOworICAgICB9 CisgCisgICAgIGlmIChsYXN0ICE9ICdcbicpCisgICAgIHsKKyAJKytvdXRsaW5lOworLQlwdXRj aGFyKCdcbicpOworKwlwdXRjKCdcbicsIG91dHB1dF9maWxlKTsKKyAgICAgfQorIAorLSAgICBw cmludGYoZGVmYXVsdF9saW5lX2Zvcm1hdCwgKytvdXRsaW5lICsgMSk7CisrICAgIGZwcmludGYo b3V0cHV0X2ZpbGUsIGRlZmF1bHRfbGluZV9mb3JtYXQsICsrb3V0bGluZSArIDEpOworIH0KKyAK KyAKK2RpZmYgLS1naXQgYS9tY3MvbWNzL01ha2VmaWxlIGIvbWNzL21jcy9NYWtlZmlsZQoraW5k ZXggZGJkNzFhM2Q1ODEuLmRiZjA0MGFmZGQ2IDEwMDY0NAorLS0tIGEvbWNzL21jcy9NYWtlZmls ZQorKysrIGIvbWNzL21jcy9NYWtlZmlsZQorQEAgLTMyLDcgKzMyLDcgQEAgQlVJTFRfU09VUkNF UyA9IGNzLXBhcnNlci5jcworIENMRUFOX0ZJTEVTICs9IHkub3V0cHV0CisgCisgJS1wYXJzZXIu Y3M6ICUtcGFyc2VyLmpheSAkKHRvcGRpcikvamF5L3NrZWxldG9uLmNzCistCSQodG9wZGlyKS9q YXkvamF5ICQoSkFZX0ZMQUdTKSA8ICQodG9wZGlyKS9qYXkvc2tlbGV0b24uY3MgJDwgPiBqYXkt dG1wLm91dCAmJiBtdiBqYXktdG1wLm91dCAkQAorKwkkKHRvcGRpcikvamF5L2pheSAkKEpBWV9G TEFHUykgLW8gamF5LXRtcC5vdXQgJDwgPCAkKHRvcGRpcikvamF5L3NrZWxldG9uLmNzICYmIG12 IGpheS10bXAub3V0ICRACisgCisgS0VFUF9PVVRQVVRfRklMRV9DT1BZID0geWVzCisgCitkaWZm IC0tZ2l0IGEvbWNzL21jcy9hcmd1bWVudC5jcyBiL21jcy9tY3MvYXJndW1lbnQuY3MKK2luZGV4 IDViMTAwM2RiYWRmLi40Yzc1ZTQxYTllNSAxMDA2NDQKKy0tLSBhL21jcy9tY3MvYXJndW1lbnQu Y3MKKysrKyBiL21jcy9tY3MvYXJndW1lbnQuY3MKK0BAIC0zOCw2ICszOCw4IEBAIG5hbWVzcGFj ZSBNb25vLkNTaGFycAorIAkJCS8vIENvbmRpdGlvbmFsIGluc3RhbmNlIGV4cHJlc3Npb24gaW5z ZXJ0ZWQgYXMgdGhlIGZpcnN0IGFyZ3VtZW50CisgCQkJRXh0ZW5zaW9uVHlwZUNvbmRpdGlvbmFs QWNjZXNzID0gNSB8IENvbmRpdGlvbmFsQWNjZXNzRmxhZywKKyAKKysJCQlSZWFkb25seSA9IDYs CisrCisgCQkJQ29uZGl0aW9uYWxBY2Nlc3NGbGFnID0gMSA8PCA3CisgCQl9CisgCitkaWZmIC0t Z2l0IGEvbWNzL21jcy9hc3NlbWJseS5jcyBiL21jcy9tY3MvYXNzZW1ibHkuY3MKK2luZGV4IGFh NGM1NDMxN2EyLi45NmU0M2U3MGQ5OSAxMDA2NDQKKy0tLSBhL21jcy9tY3MvYXNzZW1ibHkuY3MK KysrKyBiL21jcy9tY3MvYXNzZW1ibHkuY3MKK0BAIC01NTQsNyArNTU0LDggQEAgbmFtZXNwYWNl IE1vbm8uQ1NoYXJwCisgCQkJCQkJaWYgKHByb3AgIT0gbnVsbCkgeworIAkJCQkJCQlBdHRyaWJ1 dGVFbmNvZGVyIGVuY29kZXIgPSBuZXcgQXR0cmlidXRlRW5jb2RlciAoKTsKKyAJCQkJCQkJZW5j b2Rlci5FbmNvZGVOYW1lZFByb3BlcnR5QXJndW1lbnQgKHByb3AsIG5ldyBCb29sTGl0ZXJhbCAo Q29tcGlsZXIuQnVpbHRpblR5cGVzLCB0cnVlLCBMb2NhdGlvbi5OdWxsKSk7CistCQkJCQkJCVNl dEN1c3RvbUF0dHJpYnV0ZSAocGEuQ29uc3RydWN0b3IsIGVuY29kZXIuVG9BcnJheSAoKSk7Cisr CQkJCQkJCVNldEN1c3RvbUF0dHJpYnV0ZSAocGEuQ29uc3RydWN0b3IsIGVuY29kZXIuVG9BcnJh eSAob3V0IHZhciByZWZlcmVuY2VzKSk7CisrCQkJCQkJCW1vZHVsZS5BZGRBc3NlbWJseVJlZmVy ZW5jZXMgKHJlZmVyZW5jZXMpOworIAkJCQkJCX0KKyAJCQkJCX0KKyAJCQkJfQorZGlmZiAtLWdp dCBhL21jcy9tY3MvYXR0cmlidXRlLmNzIGIvbWNzL21jcy9hdHRyaWJ1dGUuY3MKK2luZGV4IDgz ZDQwMzExOGFkLi5mYWYyY2ZhYTFkOCAxMDA2NDQKKy0tLSBhL21jcy9tY3MvYXR0cmlidXRlLmNz CisrKysgYi9tY3MvbWNzL2F0dHJpYnV0ZS5jcworQEAgLTEwNjQsOCArMTA2NCwxMCBAQCBuYW1l c3BhY2UgTW9uby5DU2hhcnAgeworIAkJCX0KKyAKKyAJCQlieXRlW10gY2RhdGE7CisrCQkJTGlz dDxBc3NlbWJseT4gcmVmZXJlbmNlczsKKyAJCQlpZiAocG9zX2FyZ3MgPT0gbnVsbCAmJiBuYW1l ZF92YWx1ZXMgPT0gbnVsbCkgeworIAkJCQljZGF0YSA9IEF0dHJpYnV0ZUVuY29kZXIuRW1wdHk7 CisrCQkJCXJlZmVyZW5jZXMgPSBudWxsOworIAkJCX0gZWxzZSB7CisgCQkJCUF0dHJpYnV0ZUVu Y29kZXIgZW5jb2RlciA9IG5ldyBBdHRyaWJ1dGVFbmNvZGVyICgpOworIAorQEAgLTExMzgsNyAr MTE0MCw3IEBAIG5hbWVzcGFjZSBNb25vLkNTaGFycCB7CisgCQkJCQllbmNvZGVyLkVuY29kZUVt cHR5TmFtZWRBcmd1bWVudHMgKCk7CisgCQkJCX0KKyAKKy0JCQkJY2RhdGEgPSBlbmNvZGVyLlRv QXJyYXkgKCk7CisrCQkJCWNkYXRhID0gZW5jb2Rlci5Ub0FycmF5IChvdXQgcmVmZXJlbmNlcyk7 CisgCQkJfQorIAorIAkJCWlmICghSXNDb25kaXRpb25hbGx5RXhjbHVkZWQgKGN0b3IuRGVjbGFy aW5nVHlwZSkpIHsKK0BAIC0xMTU3LDYgKzExNTksOCBAQCBuYW1lc3BhY2UgTW9uby5DU2hhcnAg eworIAkJCQkJRXJyb3JfQXR0cmlidXRlRW1pdEVycm9yIChlLk1lc3NhZ2UpOworIAkJCQkJcmV0 dXJuOworIAkJCQl9CisrCisrCQkJCWNvbnRleHQuTW9kdWxlLkFkZEFzc2VtYmx5UmVmZXJlbmNl cyAocmVmZXJlbmNlcyk7CisgCQkJfQorIAorIAkJCWlmICghdXNhZ2VfYXR0ci5BbGxvd011bHRp cGxlICYmIGFsbEVtaXR0ZWQgIT0gbnVsbCkgeworQEAgLTE0MTUsNiArMTQxOSw3IEBAIG5hbWVz cGFjZSBNb25vLkNTaGFycCB7CisgCQlieXRlW10gYnVmZmVyOworIAkJaW50IHBvczsKKyAJCWNv bnN0IHVzaG9ydCBWZXJzaW9uID0gMTsKKysJCUxpc3Q8QXNzZW1ibHk+IGltcG9ydHM7CisgCisg CQlzdGF0aWMgQXR0cmlidXRlRW5jb2RlciAoKQorIAkJeworQEAgLTE1OTQsNyArMTU5OSwxNSBA QCBuYW1lc3BhY2UgTW9uby5DU2hhcnAgeworIAkJcHVibGljIHZvaWQgRW5jb2RlVHlwZU5hbWUg KFR5cGVTcGVjIHR5cGUpCisgCQl7CisgCQkJdmFyIG9sZF90eXBlID0gdHlwZS5HZXRNZXRhSW5m byAoKTsKKy0JCQlFbmNvZGUgKHR5cGUuTWVtYmVyRGVmaW5pdGlvbi5Jc0ltcG9ydGVkID8gb2xk X3R5cGUuQXNzZW1ibHlRdWFsaWZpZWROYW1lIDogb2xkX3R5cGUuRnVsbE5hbWUpOworKwkJCWlm ICh0eXBlLk1lbWJlckRlZmluaXRpb24uSXNJbXBvcnRlZCkgeworKwkJCQlpZiAoaW1wb3J0cyA9 PSBudWxsKQorKwkJCQkJaW1wb3J0cyA9IG5ldyBMaXN0PEFzc2VtYmx5PiAoKTsKKysKKysJCQkJ aW1wb3J0cy5BZGQgKG9sZF90eXBlLkFzc2VtYmx5KTsKKysJCQkJRW5jb2RlIChvbGRfdHlwZS5B c3NlbWJseVF1YWxpZmllZE5hbWUpOworKwkJCX0gZWxzZSB7CisrCQkJCUVuY29kZSAob2xkX3R5 cGUuRnVsbE5hbWUpOworKwkJCX0KKyAJCX0KKyAKKyAJCXB1YmxpYyB2b2lkIEVuY29kZVR5cGVO YW1lIChUeXBlQ29udGFpbmVyIHR5cGUpCitAQCAtMTY3NSw4ICsxNjg4LDEwIEBAIG5hbWVzcGFj ZSBNb25vLkNTaGFycCB7CisgCQkJRW5jb2RlICh2YWx1ZSk7CisgCQl9CisgCistCQlwdWJsaWMg Ynl0ZVtdIFRvQXJyYXkgKCkKKysJCXB1YmxpYyBieXRlW10gVG9BcnJheSAob3V0IExpc3Q8QXNz ZW1ibHk+IGFzc2VtYmx5UmVmZXJlbmNlcykKKyAJCXsKKysJCQlhc3NlbWJseVJlZmVyZW5jZXMg PSBpbXBvcnRzOworKworIAkJCWJ5dGVbXSBidWYgPSBuZXcgYnl0ZVtwb3NdOworIAkJCUFycmF5 LkNvcHkgKGJ1ZmZlciwgYnVmLCBwb3MpOworIAkJCXJldHVybiBidWY7CitAQCAtMTk5MCw3ICsy MDA1LDggQEAgbmFtZXNwYWNlIE1vbm8uQ1NoYXJwIHsKKyAJCQllbmNvZGVyLkVuY29kZSAoKGlu dCkgc3RhdGUpOworIAkJCWVuY29kZXIuRW5jb2RlRW1wdHlOYW1lZEFyZ3VtZW50cyAoKTsKKyAK Ky0JCQlidWlsZGVyLlNldEN1c3RvbUF0dHJpYnV0ZSAoKENvbnN0cnVjdG9ySW5mbykgY3Rvci5H ZXRNZXRhSW5mbyAoKSwgZW5jb2Rlci5Ub0FycmF5ICgpKTsKKysJCQlidWlsZGVyLlNldEN1c3Rv bUF0dHJpYnV0ZSAoKENvbnN0cnVjdG9ySW5mbykgY3Rvci5HZXRNZXRhSW5mbyAoKSwgZW5jb2Rl ci5Ub0FycmF5IChvdXQgdmFyIHJlZmVyZW5jZXMpKTsKKysJCQltb2R1bGUuQWRkQXNzZW1ibHlS ZWZlcmVuY2VzIChyZWZlcmVuY2VzKTsKKyAJCX0KKyAJfQorIAorQEAgLTIwMjQsNyArMjA0MCw4 IEBAIG5hbWVzcGFjZSBNb25vLkNTaGFycCB7CisgCQkJZW5jb2Rlci5FbmNvZGUgKChpbnQpIG1v ZGVzKTsKKyAJCQllbmNvZGVyLkVuY29kZUVtcHR5TmFtZWRBcmd1bWVudHMgKCk7CisgCistCQkJ YnVpbGRlci5TZXRDdXN0b21BdHRyaWJ1dGUgKChDb25zdHJ1Y3RvckluZm8pIGN0b3IuR2V0TWV0 YUluZm8gKCksIGVuY29kZXIuVG9BcnJheSAoKSk7CisrCQkJYnVpbGRlci5TZXRDdXN0b21BdHRy aWJ1dGUgKChDb25zdHJ1Y3RvckluZm8pIGN0b3IuR2V0TWV0YUluZm8gKCksIGVuY29kZXIuVG9B cnJheSAob3V0IHZhciByZWZlcmVuY2VzKSk7CisrCQkJbW9kdWxlLkFkZEFzc2VtYmx5UmVmZXJl bmNlcyAocmVmZXJlbmNlcyk7CisgCQl9CisgCX0KKyAKK0BAIC0yMDUwLDcgKzIwNjcsOCBAQCBu YW1lc3BhY2UgTW9uby5DU2hhcnAgeworIAkJCWVuY29kZXIuRW5jb2RlICgodWludCkgYml0c1sw XSk7CisgCQkJZW5jb2Rlci5FbmNvZGVFbXB0eU5hbWVkQXJndW1lbnRzICgpOworIAorLQkJCWJ1 aWxkZXIuU2V0Q3VzdG9tQXR0cmlidXRlICgoQ29uc3RydWN0b3JJbmZvKSBjdG9yLkdldE1ldGFJ bmZvICgpLCBlbmNvZGVyLlRvQXJyYXkgKCkpOworKwkJCWJ1aWxkZXIuU2V0Q3VzdG9tQXR0cmli dXRlICgoQ29uc3RydWN0b3JJbmZvKSBjdG9yLkdldE1ldGFJbmZvICgpLCBlbmNvZGVyLlRvQXJy YXkgKG91dCB2YXIgcmVmZXJlbmNlcykpOworKwkJCW1vZHVsZS5BZGRBc3NlbWJseVJlZmVyZW5j ZXMgKHJlZmVyZW5jZXMpOworIAkJfQorIAorIAkJcHVibGljIHZvaWQgRW1pdEF0dHJpYnV0ZSAo RmllbGRCdWlsZGVyIGJ1aWxkZXIsIGRlY2ltYWwgdmFsdWUsIExvY2F0aW9uIGxvYykKK0BAIC0y MDY4LDcgKzIwODYsOCBAQCBuYW1lc3BhY2UgTW9uby5DU2hhcnAgeworIAkJCWVuY29kZXIuRW5j b2RlICgodWludCkgYml0c1swXSk7CisgCQkJZW5jb2Rlci5FbmNvZGVFbXB0eU5hbWVkQXJndW1l bnRzICgpOworIAorLQkJCWJ1aWxkZXIuU2V0Q3VzdG9tQXR0cmlidXRlICgoQ29uc3RydWN0b3JJ bmZvKSBjdG9yLkdldE1ldGFJbmZvICgpLCBlbmNvZGVyLlRvQXJyYXkgKCkpOworKwkJCWJ1aWxk ZXIuU2V0Q3VzdG9tQXR0cmlidXRlICgoQ29uc3RydWN0b3JJbmZvKSBjdG9yLkdldE1ldGFJbmZv ICgpLCBlbmNvZGVyLlRvQXJyYXkgKG91dCB2YXIgcmVmZXJlbmNlcykpOworKwkJCW1vZHVsZS5B ZGRBc3NlbWJseVJlZmVyZW5jZXMgKHJlZmVyZW5jZXMpOworIAkJfQorIAl9CisgCitAQCAtMjA5 Miw3ICsyMTExLDggQEAgbmFtZXNwYWNlIE1vbm8uQ1NoYXJwIHsKKyAJCQllbmNvZGVyLkVuY29k ZVR5cGVOYW1lICh0eXBlKTsKKyAJCQllbmNvZGVyLkVuY29kZUVtcHR5TmFtZWRBcmd1bWVudHMg KCk7CisgCistCQkJYnVpbGRlci5TZXRDdXN0b21BdHRyaWJ1dGUgKChDb25zdHJ1Y3RvckluZm8p IGN0b3IuR2V0TWV0YUluZm8gKCksIGVuY29kZXIuVG9BcnJheSAoKSk7CisrCQkJYnVpbGRlci5T ZXRDdXN0b21BdHRyaWJ1dGUgKChDb25zdHJ1Y3RvckluZm8pIGN0b3IuR2V0TWV0YUluZm8gKCks IGVuY29kZXIuVG9BcnJheSAob3V0IHZhciByZWZlcmVuY2VzKSk7CisrCQkJbW9kdWxlLkFkZEFz c2VtYmx5UmVmZXJlbmNlcyAocmVmZXJlbmNlcyk7CisgCQl9CisgCX0KKyAKK2RpZmYgLS1naXQg YS9tY3MvbWNzL2NsYXNzLmNzIGIvbWNzL21jcy9jbGFzcy5jcworaW5kZXggNmIxYWRjMjk3YTMu LmRjNjFmNmRjNjI3IDEwMDY0NAorLS0tIGEvbWNzL21jcy9jbGFzcy5jcworKysrIGIvbWNzL21j cy9jbGFzcy5jcworQEAgLTIxMTcsNyArMjExNyw4IEBAIG5hbWVzcGFjZSBNb25vLkNTaGFycAor IAkJCWVuY29kZXIuRW5jb2RlIChHZXRBdHRyaWJ1dGVEZWZhdWx0TWVtYmVyICgpKTsKKyAJCQll bmNvZGVyLkVuY29kZUVtcHR5TmFtZWRBcmd1bWVudHMgKCk7CisgCistCQkJVHlwZUJ1aWxkZXIu U2V0Q3VzdG9tQXR0cmlidXRlICgoQ29uc3RydWN0b3JJbmZvKSBjdG9yLkdldE1ldGFJbmZvICgp LCBlbmNvZGVyLlRvQXJyYXkgKCkpOworKwkJCVR5cGVCdWlsZGVyLlNldEN1c3RvbUF0dHJpYnV0 ZSAoKENvbnN0cnVjdG9ySW5mbykgY3Rvci5HZXRNZXRhSW5mbyAoKSwgZW5jb2Rlci5Ub0FycmF5 IChvdXQgdmFyIHJlZmVyZW5jZXMpKTsKKysJCQlNb2R1bGUuQWRkQXNzZW1ibHlSZWZlcmVuY2Vz IChyZWZlcmVuY2VzKTsKKyAJCX0KKyAKKyAJCXB1YmxpYyBvdmVycmlkZSB2b2lkIFZlcmlmeU1l bWJlcnMgKCkKK0BAIC0zOTYyLDcgKzM5NjMsMTAgQEAgbmFtZXNwYWNlIE1vbm8uQ1NoYXJwCisg CQkJCQlSZXBvcnQuRXJyb3IgKDQwMTMsIExvY2F0aW9uLAorIAkJCQkJCSJMb2NhbCB2YXJpYWJs ZXMgb2YgdHlwZSBgezB9JyBjYW5ub3QgYmUgdXNlZCBpbnNpZGUgYW5vbnltb3VzIG1ldGhvZHMs IGxhbWJkYSBleHByZXNzaW9ucyBvciBxdWVyeSBleHByZXNzaW9ucyIsCisgCQkJCQkJTWVtYmVy VHlwZS5HZXRTaWduYXR1cmVGb3JFcnJvciAoKSk7CistCQkJCX0gZWxzZSBpZiAoTWVtYmVyVHlw ZS5Jc0J5UmVmTGlrZSkgeworKwkJCQl9IGVsc2UgaWYgKE1lbWJlclR5cGUuSXNTcGVjaWFsUnVu dGltZVR5cGUpIHsKKysJCQkJCVJlcG9ydC5FcnJvciAoNjEwLCBMb2NhdGlvbiwKKysJCQkJCQki RmllbGQgb3IgcHJvcGVydHkgY2Fubm90IGJlIG9mIHR5cGUgYHswfSciLCBNZW1iZXJUeXBlLkdl dFNpZ25hdHVyZUZvckVycm9yICgpKTsKKysJCQkJfSBlbHNlIHsKKyAJCQkJCWlmICgoTW9kRmxh Z3MgJiAoTW9kaWZpZXJzLkFCU1RSQUNUIHwgTW9kaWZpZXJzLkVYVEVSTikpICE9IDApCisgCQkJ CQkJcmV0dXJuOworIAorQEAgLTM5NzUsOSArMzk3OSw2IEBAIG5hbWVzcGFjZSBNb25vLkNTaGFy cAorIAkJCQkJUmVwb3J0LkVycm9yICg4MzQ1LCBMb2NhdGlvbiwKKyAJCQkJCQkiRmllbGQgb3Ig YXV0by1pbXBsZW1lbnRlZCBwcm9wZXJ0eSBjYW5ub3QgYmUgb2YgdHlwZSBgezB9JyB1bmxlc3Mg aXQgaXMgYW4gaW5zdGFuY2UgbWVtYmVyIG9mIGEgcmVmIHN0cnVjdCIsCisgCQkJCQkJTWVtYmVy VHlwZS5HZXRTaWduYXR1cmVGb3JFcnJvciAoKSk7CistCQkJCX0gZWxzZSB7CistCQkJCQlSZXBv cnQuRXJyb3IgKDYxMCwgTG9jYXRpb24sIAorLQkJCQkJCSJGaWVsZCBvciBwcm9wZXJ0eSBjYW5u b3QgYmUgb2YgdHlwZSBgezB9JyIsIE1lbWJlclR5cGUuR2V0U2lnbmF0dXJlRm9yRXJyb3IgKCkp OworIAkJCQl9CisgCQkJfQorIAkJfQorZGlmZiAtLWdpdCBhL21jcy9tY3MvY29udmVydC5jcyBi L21jcy9tY3MvY29udmVydC5jcworaW5kZXggYWUxNTNmYzQ5ZTguLjJjOGQyYTAyMDRjIDEwMDY0 NAorLS0tIGEvbWNzL21jcy9jb252ZXJ0LmNzCisrKysgYi9tY3MvbWNzL2NvbnZlcnQuY3MKK0BA IC0xMjMyLDYgKzEyMzIsMTMgQEAgbmFtZXNwYWNlIE1vbm8uQ1NoYXJwIHsKKyAJCQkJCUZpbmRB cHBsaWNhYmxlVXNlckRlZmluZWRDb252ZXJzaW9uT3BlcmF0b3JzIChyYywgb3BlcmF0b3JzLCBz b3VyY2VfdHlwZV9leHByLCB0YXJnZXRfdHlwZSwgcmVzdHIsIHJlZiBjYW5kaWRhdGVzKTsKKyAJ CQkJfQorIAorKwkJCQlpZiAoc291cmNlX3R5cGVfZXhwciA9PSBzb3VyY2UgJiYgc291cmNlX3R5 cGUuSXNOdWxsYWJsZVR5cGUpIHsKKysJCQkJCW9wZXJhdG9ycyA9IE1lbWJlckNhY2hlLkdldFVz ZXJPcGVyYXRvciAoc291cmNlX3R5cGUuVHlwZUFyZ3VtZW50cyBbMF0sIE9wZXJhdG9yLk9wVHlw ZS5JbXBsaWNpdCwgZGVjbGFyZWRfb25seSk7CisrCQkJCQlpZiAob3BlcmF0b3JzICE9IG51bGwp IHsKKysJCQkJCQlGaW5kQXBwbGljYWJsZVVzZXJEZWZpbmVkQ29udmVyc2lvbk9wZXJhdG9ycyAo cmMsIG9wZXJhdG9ycywgc291cmNlX3R5cGVfZXhwciwgdGFyZ2V0X3R5cGUsIHJlc3RyLCByZWYg Y2FuZGlkYXRlcyk7CisrCQkJCQl9CisrCQkJCX0KKysKKyAJCQkJaWYgKCFpbXBsaWNpdE9ubHkp IHsKKyAJCQkJCW9wZXJhdG9ycyA9IE1lbWJlckNhY2hlLkdldFVzZXJPcGVyYXRvciAoc291cmNl X3R5cGUsIE9wZXJhdG9yLk9wVHlwZS5FeHBsaWNpdCwgZGVjbGFyZWRfb25seSk7CisgCQkJCQlp ZiAob3BlcmF0b3JzICE9IG51bGwpIHsKK2RpZmYgLS1naXQgYS9tY3MvbWNzL2NzLXBhcnNlci5q YXkgYi9tY3MvbWNzL2NzLXBhcnNlci5qYXkKK2luZGV4IDRkNmZjYjQ0YzBkLi40Y2EzYmY3NGYz ZCAxMDA2NDQKKy0tLSBhL21jcy9tY3MvY3MtcGFyc2VyLmpheQorKysrIGIvbWNzL21jcy9jcy1w YXJzZXIuamF5CitAQCAtMzQsMTMgKzM0LDE2IEBAIG5hbWVzcGFjZSBNb25vLkNTaGFycAorIAkJ CVBhcmFtcwk9IDEgPDwgNCwKKyAJCQlBcmdsaXN0CT0gMSA8PCA1LAorIAkJCURlZmF1bHRWYWx1 ZSA9IDEgPDwgNiwKKysJCQlSZWFkT25seSA9IDEgPDwgNywKKyAJCQkKKy0JCQlBbGwgPSBSZWYg fCBPdXQgfCBUaGlzIHwgUGFyYW1zIHwgQXJnbGlzdCB8IERlZmF1bHRWYWx1ZSwKKysJCQlBbGwg PSBSZWYgfCBPdXQgfCBUaGlzIHwgUGFyYW1zIHwgQXJnbGlzdCB8IERlZmF1bHRWYWx1ZSB8IFJl YWRPbmx5LAorIAkJCVByaW1hcnlDb25zdHJ1Y3RvciA9IFJlZiB8IE91dCB8IFBhcmFtcyB8IERl ZmF1bHRWYWx1ZQorIAkJfQorIAkJCisgCQlzdGF0aWMgcmVhZG9ubHkgb2JqZWN0IE1vZGlmaWVy Tm9uZSA9IDA7CistCQorKwkJc3RhdGljIHJlYWRvbmx5IG9iamVjdCBSZWZTdHJ1Y3RUb2tlbiA9 IG5ldyBvYmplY3QgKCk7CisrCQlzdGF0aWMgcmVhZG9ubHkgb2JqZWN0IFJlZlBhcnRpYWxTdHJ1 Y3RUb2tlbiA9IG5ldyBvYmplY3QgKCk7CisrCisgCQlOYW1lc3BhY2VDb250YWluZXIgY3VycmVu dF9uYW1lc3BhY2U7CisgCQlUeXBlQ29udGFpbmVyIGN1cnJlbnRfY29udGFpbmVyOworIAkJVHlw ZURlZmluaXRpb24gY3VycmVudF90eXBlOworQEAgLTMzOCw2ICszNDEsNyBAQCBuYW1lc3BhY2Ug TW9uby5DU2hhcnAKKyAldG9rZW4gT1BFTl9CUkFDS0VUX0VYUFIKKyAldG9rZW4gT1BFTl9QQVJF TlNfREVDT05TVFJVQ1QKKyAldG9rZW4gUkVGX1NUUlVDVAorKyV0b2tlbiBSRUZfUEFSVElBTAor IAorIC8vIE1ha2UgdGhlIHBhcnNlciBnbyBpbnRvIGV2YWwgbW9kZSBwYXJzaW5nIChzdGF0ZW1l bnRzIGFuZCBjb21waWxhdGlvbiB1bml0cykuCisgJXRva2VuIEVWQUxfU1RBVEVNRU5UX1BBUlNF UgorQEAgLTY0OCw4ICs2NTIsOCBAQCBuYW1lc3BhY2Vfb3JfdHlwZV9kZWNsYXJhdGlvbgorIAkJ CVR5cGVDb250YWluZXIgZHMgPSAoVHlwZUNvbnRhaW5lcikkMTsKKyAKKyAJCQlpZiAoKGRzLk1v ZEZsYWdzICYgKE1vZGlmaWVycy5QUklWQVRFIHwgTW9kaWZpZXJzLlBST1RFQ1RFRCkpICE9IDAp eworLQkJCQlyZXBvcnQuRXJyb3IgKDE1MjcsIGRzLkxvY2F0aW9uLCAKKy0JCQkJIk5hbWVzcGFj ZSBlbGVtZW50cyBjYW5ub3QgYmUgZXhwbGljaXRseSBkZWNsYXJlZCBhcyBwcml2YXRlLCBwcm90 ZWN0ZWQgb3IgcHJvdGVjdGVkIGludGVybmFsIik7CisrCQkJCXJlcG9ydC5FcnJvciAoMTUyNywg ZHMuTG9jYXRpb24sCisrCQkJCSJOYW1lc3BhY2UgZWxlbWVudHMgY2Fubm90IGJlIGV4cGxpY2l0 bHkgZGVjbGFyZWQgYXMgcHJpdmF0ZSwgcHJvdGVjdGVkLCBwcm90ZWN0ZWQgaW50ZXJuYWwsIG9y IHByaXZhdGUgcHJvdGVjdGVkIik7CisgCQkJfQorIAorIAkJCS8vIEhlcmUgaXMgYSB0cmljaywg Zm9yIGV4cGxpY2l0IGF0dHJpYnV0ZXMgd2UgZG9uJ3Qga25vdyB3aGVyZSB0aGV5IGJlbG9uZyB0 byB1bnRpbAorQEAgLTEwMjgsNyArMTAzMiwxNSBAQCBzdHJ1Y3Rfa2V5d29yZAorIAkJCUZlYXR1 cmVJc05vdEF2YWlsYWJsZSAoR2V0TG9jYXRpb24gKCQxKSwgInJlZiBzdHJ1Y3RzIik7CisgCQl9 CisgCistCQkkJCA9IHRoaXM7CisrCQkkJCA9IFJlZlN0cnVjdFRva2VuOworKwkgIH0KKysJfCBS RUZfUEFSVElBTCBTVFJVQ1QKKysJICB7CisrCQlpZiAobGFuZ192ZXJzaW9uIDwgTGFuZ3VhZ2VW ZXJzaW9uLlZfN18yKSB7CisrCQkJRmVhdHVyZUlzTm90QXZhaWxhYmxlIChHZXRMb2NhdGlvbiAo JDEpLCAicmVmIHN0cnVjdHMiKTsKKysJCX0KKysKKysJCSQkID0gUmVmUGFydGlhbFN0cnVjdFRv a2VuOworIAkgIH0KKyAJOworIAorQEAgLTEwNDMsOCArMTA1NSwxMyBAQCBzdHJ1Y3RfZGVjbGFy YXRpb24KKyAJCWlmICgobW9kcyAmIE1vZGlmaWVycy5SRUFET05MWSkgIT0gMCAmJiBsYW5nX3Zl cnNpb24gPCBMYW5ndWFnZVZlcnNpb24uVl83XzIpIHsKKyAJCQlGZWF0dXJlSXNOb3RBdmFpbGFi bGUgKEdldExvY2F0aW9uICgkNCksICJyZWFkb25seSBzdHJ1Y3RzIik7CisgCQl9CistCQlpZiAo JDQgIT0gbnVsbCkKKysJCWlmICgkNCAhPSBudWxsKSB7CisgCQkJbW9kcyB8PSBNb2RpZmllcnMu UkVGOworKwkJCWlmICgkNCA9PSBSZWZQYXJ0aWFsU3RydWN0VG9rZW4pIHsKKysJCQkJbW9kcyB8 PSBNb2RpZmllcnMuUEFSVElBTDsKKysJCQkJJDMgPSAkNDsKKysJCQl9CisrCQl9CisgCisgCQls ZXhlci5Db25zdHJhaW50c1BhcnNpbmcgPSB0cnVlOworIAkJdmFsaWRfcGFyYW1fbW9kID0gUGFy YW1ldGVyTW9kaWZpZXJUeXBlLlByaW1hcnlDb25zdHJ1Y3RvcjsKK0BAIC0xNDY5LDcgKzE0ODYs NyBAQCBtZXRob2RfaGVhZGVyCisgCSAgT1BFTl9QQVJFTlMKKyAJICB7CisgCQlsZXhlci5wYXJz aW5nX2dlbmVyaWNfZGVjbGFyYXRpb24gPSBmYWxzZTsKKy0JICAJdmFsaWRfcGFyYW1fbW9kID0g UGFyYW1ldGVyTW9kaWZpZXJUeXBlLkFsbDsKKysJCXZhbGlkX3BhcmFtX21vZCA9IFBhcmFtZXRl ck1vZGlmaWVyVHlwZS5BbGw7CisgCSAgfQorIAkgIG9wdF9mb3JtYWxfcGFyYW1ldGVyX2xpc3Qg Q0xPU0VfUEFSRU5TIAorIAkgIHsKK0BAIC0xNTY5LDcgKzE1ODYsNyBAQCBjb25zdHJ1Y3Rvcl9i b2R5CisgCSBleHByZXNzaW9uIFNFTUlDT0xPTgorIAkgeworIAkJbGV4ZXIucGFyc2luZ19ibG9j ayA9IDA7CistCQljdXJyZW50X2Jsb2NrLkFkZFN0YXRlbWVudCAobmV3IENvbnRleHR1YWxSZXR1 cm4gKChFeHByZXNzaW9uKSAkMykpOworKwkJY3VycmVudF9ibG9jay5BZGRTdGF0ZW1lbnQgKENy ZWF0ZUV4cHJlc3Npb25Cb2RpZWRTdGF0ZW1lbnQgKChFeHByZXNzaW9uKSAkMykpOworIAkJdmFy IGIgPSBlbmRfYmxvY2sgKEdldExvY2F0aW9uICgkNCkpOworIAkJYi5Jc0NvbXBpbGVyR2VuZXJh dGVkID0gdHJ1ZTsKKyAJCSQkID0gYjsKK0BAIC0xNTkwLDcgKzE2MDcsNyBAQCBleHByZXNzaW9u X2Jsb2NrCisgCSBsYW1iZGFfYXJyb3dfZXhwcmVzc2lvbiBTRU1JQ09MT04KKyAJIHsKKyAJCWxl eGVyLnBhcnNpbmdfYmxvY2sgPSAwOworLQkJY3VycmVudF9ibG9jay5BZGRTdGF0ZW1lbnQgKG5l dyBDb250ZXh0dWFsUmV0dXJuICgoRXhwcmVzc2lvbikgJDMpKTsKKysJCWN1cnJlbnRfYmxvY2su QWRkU3RhdGVtZW50IChDcmVhdGVFeHByZXNzaW9uQm9kaWVkU3RhdGVtZW50ICgoRXhwcmVzc2lv bikgJDMpKTsKKyAJCXZhciBiID0gZW5kX2Jsb2NrIChHZXRMb2NhdGlvbiAoJDQpKTsKKyAJCWIu SXNDb21waWxlckdlbmVyYXRlZCA9IHRydWU7CisgCQkkJCA9IGI7CitAQCAtMTc5NCw3ICsxODEx LDkgQEAgcGFyYW1ldGVyX21vZGlmaWVycworICAgCQlQYXJhbWV0ZXIuTW9kaWZpZXIgbW9kID0g KFBhcmFtZXRlci5Nb2RpZmllcikkMSB8IHAyOworICAgCQlpZiAoKChQYXJhbWV0ZXIuTW9kaWZp ZXIpJDEgJiBwMikgPT0gcDIpIHsKKyAgIAkJCUVycm9yX0R1cGxpY2F0ZVBhcmFtZXRlck1vZGlm aWVyIChsZXhlci5Mb2NhdGlvbiwgcDIpOworLSAgCQl9IGVsc2UgeworKwkJfSBlbHNlIGlmICgo bW9kICYgfihQYXJhbWV0ZXIuTW9kaWZpZXIuVGhpcyB8IFBhcmFtZXRlci5Nb2RpZmllci5SZWFk T25seSkpID09IDApIHsKKysJCQkvLyBvaworKwkJfSBlbHNlIHsKKyAJICAJCXN3aXRjaCAobW9k ICYgflBhcmFtZXRlci5Nb2RpZmllci5UaGlzKSB7CisgICAJCQkJY2FzZSBQYXJhbWV0ZXIuTW9k aWZpZXIuUkVGOgorIAkJCQkJcmVwb3J0LkVycm9yICgxMTAxLCBsZXhlci5Mb2NhdGlvbiwgIlRo ZSBwYXJhbWV0ZXIgbW9kaWZpZXJzIGB0aGlzJyBhbmQgYHJlZicgY2Fubm90IGJlIHVzZWQgYWx0 b2dldGhlciIpOworQEAgLTE4MzYsNiArMTg1NSwxMyBAQCBwYXJhbWV0ZXJfbW9kaWZpZXIKKyAJ ICAJCQkKKyAJCSQkID0gUGFyYW1ldGVyLk1vZGlmaWVyLlRoaXM7CisgCSAgfQorKwl8IElOCisr CSAgeworKwkJaWYgKGxhbmdfdmVyc2lvbiA8IExhbmd1YWdlVmVyc2lvbi5WXzdfMikKKysJCQlG ZWF0dXJlSXNOb3RBdmFpbGFibGUgKEdldExvY2F0aW9uICgkMSksICJyZWFkb25seSByZWZlcmVu Y2VzIik7CisrCisrCQkkJCA9IFBhcmFtZXRlci5Nb2RpZmllci5SZWFkT25seTsKKysJICB9Cisg CTsKKyAKKyBwYXJhbWV0ZXJfYXJyYXkKK0BAIC0xODcxLDcgKzE4OTcsNyBAQCBwYXJhbXNfbW9k aWZpZXIKKyAJCWlmICgobW9kICYgUGFyYW1ldGVyLk1vZGlmaWVyLlRoaXMpICE9IDApIHsKKyAJ CQlyZXBvcnQuRXJyb3IgKDExMDQsIEdldExvY2F0aW9uICgkMSksICJUaGUgcGFyYW1ldGVyIG1v ZGlmaWVycyBgdGhpcycgYW5kIGBwYXJhbXMnIGNhbm5vdCBiZSB1c2VkIGFsdG9nZXRoZXIiKTsK KyAJCX0gZWxzZSB7CistCQkJcmVwb3J0LkVycm9yICgxNjExLCBHZXRMb2NhdGlvbiAoJDEpLCAi VGhlIHBhcmFtcyBwYXJhbWV0ZXIgY2Fubm90IGJlIGRlY2xhcmVkIGFzIHJlZiBvciBvdXQiKTsK KysJCQlyZXBvcnQuRXJyb3IgKDE2MTEsIEdldExvY2F0aW9uICgkMSksICJUaGUgcGFyYW1zIHBh cmFtZXRlciBjYW5ub3QgYmUgZGVjbGFyZWQgYXMgcmVmLCBvdXQgb3IgaW4iKTsKKyAJCX0JICAK KyAJICB9CisgCXwgUEFSQU1TIHBhcmFtc19tb2RpZmllcgorQEAgLTIwMDQsNyArMjAzMCw3IEBA IGluZGV4ZXJfZGVjbGFyYXRpb24KKyAJOiBvcHRfYXR0cmlidXRlcyBvcHRfbW9kaWZpZXJzCisg CSAgcmVmX21lbWJlcl90eXBlIGluZGV4ZXJfZGVjbGFyYXRpb25fbmFtZSBPUEVOX0JSQUNLRVQK KyAJICB7CistCSAgCXZhbGlkX3BhcmFtX21vZCA9IFBhcmFtZXRlck1vZGlmaWVyVHlwZS5QYXJh bXMgfCBQYXJhbWV0ZXJNb2RpZmllclR5cGUuRGVmYXVsdFZhbHVlOworKwkJdmFsaWRfcGFyYW1f bW9kID0gUGFyYW1ldGVyTW9kaWZpZXJUeXBlLlBhcmFtcyB8IFBhcmFtZXRlck1vZGlmaWVyVHlw ZS5EZWZhdWx0VmFsdWUgfCBQYXJhbWV0ZXJNb2RpZmllclR5cGUuUmVhZE9ubHk7CisgCSAgfQor IAkgIG9wdF9mb3JtYWxfcGFyYW1ldGVyX2xpc3QgQ0xPU0VfQlJBQ0tFVCAKKyAJICB7CitAQCAt MjE4MSw2ICsyMjA3LDExIEBAIHNldF9hY2Nlc3Nvcl9kZWNsYXJhdGlvbgorIGFjY2Vzc29yX2Jv ZHkKKyAJOiBibG9jaworIAl8IGV4cHJlc3Npb25fYmxvY2sKKysJICB7CisrCQlpZiAobGFuZ192 ZXJzaW9uIDwgTGFuZ3VhZ2VWZXJzaW9uLlZfNykgeworKwkJCUZlYXR1cmVJc05vdEF2YWlsYWJs ZSAoR2V0TG9jYXRpb24gKCQxKSwgImV4cHJlc3Npb24gYm9keSBwcm9wZXJ0eSBhY2Nlc3NvciIp OworKwkJfQorKwkgIH0KKyAJfCBTRU1JQ09MT04KKyAJICB7CisgCQkvLyBUT0RPOiBsYmFnCitA QCAtMjMzMSw3ICsyMzYyLDcgQEAgb3BlcmF0b3JfdHlwZQorIG9wZXJhdG9yX2RlY2xhcmF0b3IK KyAJOiBvcGVyYXRvcl90eXBlIE9QRVJBVE9SIG92ZXJsb2FkYWJsZV9vcGVyYXRvciBPUEVOX1BB UkVOUworIAkgIHsKKy0JCXZhbGlkX3BhcmFtX21vZCA9IFBhcmFtZXRlck1vZGlmaWVyVHlwZS5E ZWZhdWx0VmFsdWU7CisrCQl2YWxpZF9wYXJhbV9tb2QgPSBQYXJhbWV0ZXJNb2RpZmllclR5cGUu RGVmYXVsdFZhbHVlIHwgUGFyYW1ldGVyTW9kaWZpZXJUeXBlLlJlYWRPbmx5OworIAkJaWYgKChP cGVyYXRvci5PcFR5cGUpICQzID09IE9wZXJhdG9yLk9wVHlwZS5JcykKKyAJCQl2YWxpZF9wYXJh bV9tb2QgfD0gUGFyYW1ldGVyTW9kaWZpZXJUeXBlLk91dDsKKyAJICB9CitAQCAtMjQxOCw3ICsy NDQ5LDcgQEAgb3ZlcmxvYWRhYmxlX29wZXJhdG9yCisgY29udmVyc2lvbl9vcGVyYXRvcl9kZWNs YXJhdG9yCisgCTogSU1QTElDSVQgT1BFUkFUT1IgdHlwZSBPUEVOX1BBUkVOUworIAkgIHsKKy0J CXZhbGlkX3BhcmFtX21vZCA9IFBhcmFtZXRlck1vZGlmaWVyVHlwZS5EZWZhdWx0VmFsdWU7Cisr CQl2YWxpZF9wYXJhbV9tb2QgPSBQYXJhbWV0ZXJNb2RpZmllclR5cGUuRGVmYXVsdFZhbHVlIHwg UGFyYW1ldGVyTW9kaWZpZXJUeXBlLlJlYWRPbmx5OworIAkgIH0KKyAJICBvcHRfZm9ybWFsX3Bh cmFtZXRlcl9saXN0IENMT1NFX1BBUkVOUworIAkgIHsKK0BAIC0yNDQxLDcgKzI0NzIsNyBAQCBj b252ZXJzaW9uX29wZXJhdG9yX2RlY2xhcmF0b3IKKyAJICB9CisgCXwgRVhQTElDSVQgT1BFUkFU T1IgdHlwZSBPUEVOX1BBUkVOUworIAkgIHsKKy0JCXZhbGlkX3BhcmFtX21vZCA9IFBhcmFtZXRl ck1vZGlmaWVyVHlwZS5EZWZhdWx0VmFsdWU7CisrCQl2YWxpZF9wYXJhbV9tb2QgPSBQYXJhbWV0 ZXJNb2RpZmllclR5cGUuRGVmYXVsdFZhbHVlIHwgUGFyYW1ldGVyTW9kaWZpZXJUeXBlLlJlYWRP bmx5OworIAkgIH0KKyAJICBvcHRfZm9ybWFsX3BhcmFtZXRlcl9saXN0IENMT1NFX1BBUkVOUwor IAkgIHsKK0BAIC0yODUwLDYgKzI4ODEsMTEgQEAgZXZlbnRfYWNjZXNzb3JfYmxvY2sKKyAJICB9 CisgCXwgYmxvY2sKKyAJfCBleHByZXNzaW9uX2Jsb2NrCisrCSAgeworKwkJaWYgKGxhbmdfdmVy c2lvbiA8IExhbmd1YWdlVmVyc2lvbi5WXzcpIHsKKysJCQlGZWF0dXJlSXNOb3RBdmFpbGFibGUg KEdldExvY2F0aW9uICgkMSksICJleHByZXNzaW9uIGJvZHkgZXZlbnQgYWNjZXNzb3IiKTsKKysJ CX0KKysJICB9CisgCTsKKyAKKyBhdHRyaWJ1dGVzX3dpdGhvdXRfbWVtYmVycworQEAgLTMwMTQs NyArMzA1MCw3IEBAIGRlbGVnYXRlX2RlY2xhcmF0aW9uCisgCSAgcmVmX21lbWJlcl90eXBlIHR5 cGVfZGVjbGFyYXRpb25fbmFtZQorIAkgIE9QRU5fUEFSRU5TCisgCSAgeworLQkJdmFsaWRfcGFy YW1fbW9kID0gUGFyYW1ldGVyTW9kaWZpZXJUeXBlLlJlZiB8IFBhcmFtZXRlck1vZGlmaWVyVHlw ZS5PdXQgfCBQYXJhbWV0ZXJNb2RpZmllclR5cGUuUGFyYW1zIHwgUGFyYW1ldGVyTW9kaWZpZXJU eXBlLkRlZmF1bHRWYWx1ZTsKKysJCXZhbGlkX3BhcmFtX21vZCA9IFBhcmFtZXRlck1vZGlmaWVy VHlwZS5SZWYgfCBQYXJhbWV0ZXJNb2RpZmllclR5cGUuT3V0IHwgUGFyYW1ldGVyTW9kaWZpZXJU eXBlLlBhcmFtcyB8IFBhcmFtZXRlck1vZGlmaWVyVHlwZS5EZWZhdWx0VmFsdWUgfCBQYXJhbWV0 ZXJNb2RpZmllclR5cGUuUmVhZE9ubHk7CisgCSAgfQorIAkgIG9wdF9mb3JtYWxfcGFyYW1ldGVy X2xpc3QgQ0xPU0VfUEFSRU5TCisgCSAgeworQEAgLTM5MjcsNyArMzk2MywxNSBAQCBub25fc2lt cGxlX2FyZ3VtZW50CisgCSAgeworIAkJJCQgPSBuZXcgQXJndW1lbnQgKG5ldyBBcmdsaXN0IChH ZXRMb2NhdGlvbiAoJDEpKSk7CisgCQlsYmFnLkFkZExvY2F0aW9uICgkJCwgR2V0TG9jYXRpb24g KCQyKSwgR2V0TG9jYXRpb24gKCQzKSk7CistCSAgfQkgIAorKwkgIH0KKysJfCBJTiB2YXJpYWJs ZV9yZWZlcmVuY2UKKysJICB7CisrCQlpZiAobGFuZ192ZXJzaW9uIDwgTGFuZ3VhZ2VWZXJzaW9u LlZfN18yKQorKwkJCUZlYXR1cmVJc05vdEF2YWlsYWJsZSAoR2V0TG9jYXRpb24gKCQxKSwgInJl YWRvbmx5IHJlZmVyZW5jZXMiKTsKKysKKysJCSQkID0gbmV3IEFyZ3VtZW50ICgoRXhwcmVzc2lv bikgJDIsIEFyZ3VtZW50LkFUeXBlLlJlYWRvbmx5KTsKKysJCWxiYWcuQWRkTG9jYXRpb24gKCQk LCBHZXRMb2NhdGlvbiAoJDEpKTsKKysJICB9CisgCTsKKyAKKyBvdXRfdmFyaWFibGVfZGVjbGFy YXRpb24KK0BAIC00NDA4LDcgKzQ0NTIsNyBAQCBvcHRfYW5vbnltb3VzX21ldGhvZF9zaWduYXR1 cmUKKyBhbm9ueW1vdXNfbWV0aG9kX3NpZ25hdHVyZQorIAk6IE9QRU5fUEFSRU5TCisgCSAgewor LQkgIAl2YWxpZF9wYXJhbV9tb2QgPSBQYXJhbWV0ZXJNb2RpZmllclR5cGUuUmVmIHwgUGFyYW1l dGVyTW9kaWZpZXJUeXBlLk91dDsKKysJCXZhbGlkX3BhcmFtX21vZCA9IFBhcmFtZXRlck1vZGlm aWVyVHlwZS5SZWYgfCBQYXJhbWV0ZXJNb2RpZmllclR5cGUuT3V0IHwgUGFyYW1ldGVyTW9kaWZp ZXJUeXBlLlJlYWRPbmx5OworIAkgIH0KKyAJICBvcHRfZm9ybWFsX3BhcmFtZXRlcl9saXN0IENM T1NFX1BBUkVOUworIAkgIHsKK0BAIC01MDE0LDM2ICs1MDU4LDQ3IEBAIG51bGxfY29hbGVzY2lu Z19leHByZXNzaW9uCisgCSAgfQorIAk7CisgCisrCisrY29uZGl0aW9uYWxfb3Blcl9leHByCisr CTogZXhwcmVzc2lvbgorKwl8IHN0YWNrYWxsb2NfZXhwcmVzc2lvbgorKwk7CisrCisgY29uZGl0 aW9uYWxfZXhwcmVzc2lvbgorIAk6IG51bGxfY29hbGVzY2luZ19leHByZXNzaW9uCistCXwgbnVs bF9jb2FsZXNjaW5nX2V4cHJlc3Npb24gSU5URVJSIGV4cHJlc3Npb24gQ09MT04gZXhwcmVzc2lv bgorKwl8IG51bGxfY29hbGVzY2luZ19leHByZXNzaW9uIElOVEVSUiBjb25kaXRpb25hbF9vcGVy X2V4cHIgQ09MT04gY29uZGl0aW9uYWxfb3Blcl9leHByCisgCSAgeworIAkJJCQgPSBuZXcgQ29u ZGl0aW9uYWwgKG5ldyBCb29sZWFuRXhwcmVzc2lvbiAoKEV4cHJlc3Npb24pICQxKSwgKEV4cHJl c3Npb24pICQzLCAoRXhwcmVzc2lvbikgJDUsIEdldExvY2F0aW9uICgkMikpOworIAkJbGJhZy5B ZGRMb2NhdGlvbiAoJCQsIEdldExvY2F0aW9uICgkNCkpOworIAkgIH0KKy0JfCBudWxsX2NvYWxl c2NpbmdfZXhwcmVzc2lvbiBJTlRFUlIgZXhwcmVzc2lvbiBDT0xPTiBUSFJPVyBwcmVmaXhlZF91 bmFyeV9leHByZXNzaW9uCisrCXwgbnVsbF9jb2FsZXNjaW5nX2V4cHJlc3Npb24gSU5URVJSIGNv bmRpdGlvbmFsX29wZXJfZXhwciBDT0xPTiBUSFJPVyBwcmVmaXhlZF91bmFyeV9leHByZXNzaW9u CisgCSAgeworIAkJaWYgKGxhbmdfdmVyc2lvbiA8IExhbmd1YWdlVmVyc2lvbi5WXzcpCistCQkJ RmVhdHVyZUlzTm90QXZhaWxhYmxlIChsZXhlci5Mb2NhdGlvbiwgInRocm93IGV4cHJlc3Npb24i KTsKKysJCQlGZWF0dXJlSXNOb3RBdmFpbGFibGUgKEdldExvY2F0aW9uICgkNSksICJ0aHJvdyBl eHByZXNzaW9uIik7CisgCisgCQl2YXIgZXhwciA9IG5ldyBUaHJvd0V4cHJlc3Npb24gKChFeHBy ZXNzaW9uKSAkNiwgR2V0TG9jYXRpb24gKCQ1KSk7CisgCQkkJCA9IG5ldyBDb25kaXRpb25hbCAo bmV3IEJvb2xlYW5FeHByZXNzaW9uICgoRXhwcmVzc2lvbikgJDEpLCAoRXhwcmVzc2lvbikgJDMs IGV4cHIsIEdldExvY2F0aW9uICgkMikpOworIAkJbGJhZy5BZGRMb2NhdGlvbiAoJCQsIEdldExv Y2F0aW9uICgkNCkpOworIAkgIH0KKy0JfCBudWxsX2NvYWxlc2NpbmdfZXhwcmVzc2lvbiBJTlRF UlIgZXhwcmVzc2lvbiBlcnJvcgorKwl8IG51bGxfY29hbGVzY2luZ19leHByZXNzaW9uIElOVEVS UiByZWZlcmVuY2VfZXhwcmVzc2lvbiBDT0xPTiByZWZlcmVuY2VfZXhwcmVzc2lvbgorKwkgIHsK KysJCSQkID0gbmV3IENvbmRpdGlvbmFsIChuZXcgQm9vbGVhbkV4cHJlc3Npb24gKChFeHByZXNz aW9uKSAkMSksIChFeHByZXNzaW9uKSAkMywgKEV4cHJlc3Npb24pICQ1LCBHZXRMb2NhdGlvbiAo JDIpKTsKKysJCWxiYWcuQWRkTG9jYXRpb24gKCQkLCBHZXRMb2NhdGlvbiAoJDQpKTsKKysJICB9 CisrCXwgbnVsbF9jb2FsZXNjaW5nX2V4cHJlc3Npb24gSU5URVJSIGNvbmRpdGlvbmFsX29wZXJf ZXhwciBlcnJvcgorIAkgIHsKKyAJCUVycm9yX1N5bnRheEVycm9yICh5eVRva2VuKTsKKyAKKyAJ CSQkID0gbmV3IENvbmRpdGlvbmFsIChuZXcgQm9vbGVhbkV4cHJlc3Npb24gKChFeHByZXNzaW9u KSAkMSksIChFeHByZXNzaW9uKSAkMywgbnVsbCwgR2V0TG9jYXRpb24gKCQyKSk7CisgCSAgfQor LQl8IG51bGxfY29hbGVzY2luZ19leHByZXNzaW9uIElOVEVSUiBleHByZXNzaW9uIENPTE9OIGVy cm9yCisrCXwgbnVsbF9jb2FsZXNjaW5nX2V4cHJlc3Npb24gSU5URVJSIGNvbmRpdGlvbmFsX29w ZXJfZXhwciBDT0xPTiBlcnJvcgorIAkgIHsKKyAJCUVycm9yX1N5bnRheEVycm9yICh5eVRva2Vu KTsKKyAKKyAJCSQkID0gbmV3IENvbmRpdGlvbmFsIChuZXcgQm9vbGVhbkV4cHJlc3Npb24gKChF eHByZXNzaW9uKSAkMSksIChFeHByZXNzaW9uKSAkMywgbnVsbCwgR2V0TG9jYXRpb24gKCQyKSk7 CisgCQlsYmFnLkFkZExvY2F0aW9uICgkJCwgR2V0TG9jYXRpb24gKCQ0KSk7CisgCSAgfQorLQl8 IG51bGxfY29hbGVzY2luZ19leHByZXNzaW9uIElOVEVSUiBleHByZXNzaW9uIENPTE9OIENMT1NF X0JSQUNFCisrCXwgbnVsbF9jb2FsZXNjaW5nX2V4cHJlc3Npb24gSU5URVJSIGNvbmRpdGlvbmFs X29wZXJfZXhwciBDT0xPTiBDTE9TRV9CUkFDRQorIAkgIHsKKyAJCUVycm9yX1N5bnRheEVycm9y IChUb2tlbi5DTE9TRV9CUkFDRSk7CisgCitAQCAtNTMwOCw3ICs1MzYzLDcgQEAgbGFtYmRhX2V4 cHJlc3Npb24KKyAJICB9CisgCXwgT1BFTl9QQVJFTlNfTEFNQkRBCisgCSAgeworLQkgIAl2YWxp ZF9wYXJhbV9tb2QgPSBQYXJhbWV0ZXJNb2RpZmllclR5cGUuUmVmIHwgUGFyYW1ldGVyTW9kaWZp ZXJUeXBlLk91dDsKKysJCXZhbGlkX3BhcmFtX21vZCA9IFBhcmFtZXRlck1vZGlmaWVyVHlwZS5S ZWYgfCBQYXJhbWV0ZXJNb2RpZmllclR5cGUuT3V0IHwgUGFyYW1ldGVyTW9kaWZpZXJUeXBlLlJl YWRPbmx5OworIAkgIH0KKyAJICBvcHRfbGFtYmRhX3BhcmFtZXRlcl9saXN0IENMT1NFX1BBUkVO UyBBUlJPVyAKKyAJICB7CitAQCAtNTMyMiw3ICs1Mzc3LDcgQEAgbGFtYmRhX2V4cHJlc3Npb24K KyAJICB9CisgCXwgQVNZTkMgT1BFTl9QQVJFTlNfTEFNQkRBCisgCSAgeworLQkgIAl2YWxpZF9w YXJhbV9tb2QgPSBQYXJhbWV0ZXJNb2RpZmllclR5cGUuUmVmIHwgUGFyYW1ldGVyTW9kaWZpZXJU eXBlLk91dDsJICAKKysJCXZhbGlkX3BhcmFtX21vZCA9IFBhcmFtZXRlck1vZGlmaWVyVHlwZS5S ZWYgfCBQYXJhbWV0ZXJNb2RpZmllclR5cGUuT3V0IHwgUGFyYW1ldGVyTW9kaWZpZXJUeXBlLlJl YWRPbmx5OworIAkgIH0KKyAJICBvcHRfbGFtYmRhX3BhcmFtZXRlcl9saXN0IENMT1NFX1BBUkVO UyBBUlJPVyAKKyAJICB7CitAQCAtNTUyMiwxMCArNTU3NywxNyBAQCBtb2RpZmllcnMKKyAJCWlm ICgobTEgJiBtMikgIT0gMCkgeworIAkJCXJlcG9ydC5FcnJvciAoMTAwNCwgbGV4ZXIuTG9jYXRp b24gLSBNb2RpZmllcnNFeHRlbnNpb25zLk5hbWUgKG0yKS5MZW5ndGgsCisgCQkJCSJEdXBsaWNh dGUgYHswfScgbW9kaWZpZXIiLCBNb2RpZmllcnNFeHRlbnNpb25zLk5hbWUgKG0yKSk7CistCQl9 IGVsc2UgaWYgKChtMiAmIE1vZGlmaWVycy5BY2Nlc3NpYmlsaXR5TWFzaykgIT0gMCAmJiAobTEg JiBNb2RpZmllcnMuQWNjZXNzaWJpbGl0eU1hc2spICE9IDAgJiYKKy0JCQkoKG0yIHwgbTEgJiBN b2RpZmllcnMuQWNjZXNzaWJpbGl0eU1hc2spICE9IChNb2RpZmllcnMuUFJPVEVDVEVEIHwgTW9k aWZpZXJzLklOVEVSTkFMKSkpIHsKKy0JCQlyZXBvcnQuRXJyb3IgKDEwNywgbGV4ZXIuTG9jYXRp b24gLSBNb2RpZmllcnNFeHRlbnNpb25zLk5hbWUgKG0yKS5MZW5ndGgsCistCQkJCSJNb3JlIHRo YW4gb25lIHByb3RlY3Rpb24gbW9kaWZpZXIgc3BlY2lmaWVkIik7CisrCQl9IGVsc2UgaWYgKCht MiAmIE1vZGlmaWVycy5BY2Nlc3NpYmlsaXR5TWFzaykgIT0gMCAmJiAobTEgJiBNb2RpZmllcnMu QWNjZXNzaWJpbGl0eU1hc2spICE9IDApIHsKKysJCQl2YXIgYWNjZXNzaWJpbGl0eSA9IChtMiB8 IG0xICYgTW9kaWZpZXJzLkFjY2Vzc2liaWxpdHlNYXNrKTsKKysKKysJCQlpZiAoYWNjZXNzaWJp bGl0eSA9PSAoTW9kaWZpZXJzLlBSSVZBVEUgfCBNb2RpZmllcnMuUFJPVEVDVEVEKSkgeworKwkJ CQlpZiAobGFuZ192ZXJzaW9uIDwgTGFuZ3VhZ2VWZXJzaW9uLlZfN18yKSB7CisrCQkJCQlGZWF0 dXJlSXNOb3RBdmFpbGFibGUgKGxleGVyLkxvY2F0aW9uLCAicHJpdmF0ZSBwcm90ZWN0ZWQiKTsK KysJCQkJfQorKwkJCX0gZWxzZSBpZiAoYWNjZXNzaWJpbGl0eSAhPSAoTW9kaWZpZXJzLlBST1RF Q1RFRCB8IE1vZGlmaWVycy5JTlRFUk5BTCkpIHsKKysJCQkJcmVwb3J0LkVycm9yICgxMDcsIGxl eGVyLkxvY2F0aW9uIC0gTW9kaWZpZXJzRXh0ZW5zaW9ucy5OYW1lIChtMikuTGVuZ3RoLAorKwkJ CQkJIk1vcmUgdGhhbiBvbmUgcHJvdGVjdGlvbiBtb2RpZmllciBzcGVjaWZpZWQiKTsKKysJCQl9 CisgCQl9CisgCQkKKyAJCSQkID0gbTEgfCBtMjsKK0BAIC02MjIzLDExICs2Mjg1LDI4IEBAIGJs b2NrX3ZhcmlhYmxlX2luaXRpYWxpemVyCisgCXwgU1RBQ0tBTExPQyBzaW1wbGVfdHlwZQorIAkg IHsKKyAJCXJlcG9ydC5FcnJvciAoMTU3NSwgR2V0TG9jYXRpb24gKCQxKSwgIkEgc3RhY2thbGxv YyBleHByZXNzaW9uIHJlcXVpcmVzIFtdIGFmdGVyIHR5cGUiKTsKKy0JCSQkID0gbmV3IFN0YWNr QWxsb2MgKChFeHByZXNzaW9uKSAkMiwgbnVsbCwgR2V0TG9jYXRpb24gKCQxKSk7CQkKKysJCSQk ID0gbmV3IFN0YWNrQWxsb2MgKChFeHByZXNzaW9uKSAkMiwgbnVsbCwgR2V0TG9jYXRpb24gKCQx KSk7CisgCSAgfQorIAl8IHJlZmVyZW5jZV9leHByZXNzaW9uCisgCTsKKyAKKytzdGFja2FsbG9j X2V4cHJlc3Npb24KKysJOiBTVEFDS0FMTE9DIHNpbXBsZV90eXBlIE9QRU5fQlJBQ0tFVF9FWFBS IGV4cHJlc3Npb24gQ0xPU0VfQlJBQ0tFVAorKwkgIHsKKysJCWlmIChsYW5nX3ZlcnNpb24gPCBM YW5ndWFnZVZlcnNpb24uVl83XzIpIHsKKysJCQlGZWF0dXJlSXNOb3RBdmFpbGFibGUgKEdldExv Y2F0aW9uICgkMSksICJyZWYgc3RydWN0cyIpOworKwkJfQorKworKwkJJCQgPSBuZXcgU3BhblN0 YWNrQWxsb2MgKChFeHByZXNzaW9uKSAkMiwgKEV4cHJlc3Npb24pICQ0LCBHZXRMb2NhdGlvbiAo JDEpKTsKKysJCWxiYWcuQWRkTG9jYXRpb24gKCQkLCBHZXRMb2NhdGlvbiAoJDMpLCBHZXRMb2Nh dGlvbiAoJDUpKTsKKysJICB9CisrCXwgU1RBQ0tBTExPQyBzaW1wbGVfdHlwZQorKwkgIHsKKysJ CXJlcG9ydC5FcnJvciAoMTU3NSwgR2V0TG9jYXRpb24gKCQxKSwgIkEgc3RhY2thbGxvYyBleHBy ZXNzaW9uIHJlcXVpcmVzIFtdIGFmdGVyIHR5cGUiKTsKKysJCSQkID0gbmV3IFN0YWNrQWxsb2Mg KChFeHByZXNzaW9uKSAkMiwgbnVsbCwgR2V0TG9jYXRpb24gKCQxKSk7CisrCSAgfQorKwk7Cisr CisgcmVmZXJlbmNlX2V4cHJlc3Npb24KKyAJOiBSRUYgZXhwcmVzc2lvbgorIAkgIHsKK0BAIC03 Njk5LDcgKzc3NzgsNyBAQCBkb2NfY3JlZgorIAkgIH0KKyAJfCBkb2NfdHlwZV9kZWNsYXJhdGlv bl9uYW1lIERPVCBUSElTIE9QRU5fQlJBQ0tFVAorIAkgIHsKKy0JCXZhbGlkX3BhcmFtX21vZCA9 IFBhcmFtZXRlck1vZGlmaWVyVHlwZS5SZWYgfCBQYXJhbWV0ZXJNb2RpZmllclR5cGUuT3V0Owor KwkJdmFsaWRfcGFyYW1fbW9kID0gUGFyYW1ldGVyTW9kaWZpZXJUeXBlLlJlZiB8IFBhcmFtZXRl ck1vZGlmaWVyVHlwZS5PdXQgfCBQYXJhbWV0ZXJNb2RpZmllclR5cGUuUmVhZE9ubHk7CisgCSAg fQorIAkgIG9wdF9kb2NfcGFyYW1ldGVycyBDTE9TRV9CUkFDS0VUCisgCSAgeworQEAgLTc3NDMs NyArNzgyMiw3IEBAIG9wdF9kb2NfbWV0aG9kX3NpZworIAk6IC8qIGVtcHR5ICovCisgCXwgT1BF Tl9QQVJFTlMKKyAJICB7CistCQl2YWxpZF9wYXJhbV9tb2QgPSBQYXJhbWV0ZXJNb2RpZmllclR5 cGUuUmVmIHwgUGFyYW1ldGVyTW9kaWZpZXJUeXBlLk91dDsKKysJCXZhbGlkX3BhcmFtX21vZCA9 IFBhcmFtZXRlck1vZGlmaWVyVHlwZS5SZWYgfCBQYXJhbWV0ZXJNb2RpZmllclR5cGUuT3V0IHwg UGFyYW1ldGVyTW9kaWZpZXJUeXBlLlJlYWRPbmx5OworIAkgIH0KKyAJICBvcHRfZG9jX3BhcmFt ZXRlcnMgQ0xPU0VfUEFSRU5TCisgCSAgeworQEAgLTc5NTEsNiArODAzMCwxNCBAQCBzdGF0aWMg Ym9vbCBJc1VuYXJ5T3BlcmF0b3IgKE9wZXJhdG9yLk9wVHlwZSBvcCkKKyAJcmV0dXJuIGZhbHNl OworIH0KKyAKKytzdGF0aWMgU3RhdGVtZW50IENyZWF0ZUV4cHJlc3Npb25Cb2RpZWRTdGF0ZW1l bnQgKEV4cHJlc3Npb24gZXhwcikKKyt7CisrCWlmIChleHByIGlzIFRocm93RXhwcmVzc2lvbiB0 ZSkKKysJCXJldHVybiBuZXcgU3RhdGVtZW50RXhwcmVzc2lvbiAodGUpOworKworKwlyZXR1cm4g bmV3IENvbnRleHR1YWxSZXR1cm4gKGV4cHIpOworK30KKysKKyB2b2lkIHN5bnRheF9lcnJvciAo TG9jYXRpb24gbCwgc3RyaW5nIG1zZykKKyB7CisgCXJlcG9ydC5FcnJvciAoMTAwMywgbCwgIlN5 bnRheCBlcnJvciwgIiArIG1zZyk7CitAQCAtODQzMCw2ICs4NTE3LDggQEAgc3RhdGljIHN0cmlu ZyBHZXRUb2tlbk5hbWUgKGludCB0b2tlbikKKyAJY2FzZSBUb2tlbi5SRUFET05MWToKKyAJCXJl dHVybiAicmVhZG9ubHkiOworIAljYXNlIFRva2VuLlJFRjoKKysJY2FzZSBUb2tlbi5SRUZfU1RS VUNUOgorKwljYXNlIFRva2VuLlJFRl9QQVJUSUFMOgorIAkJcmV0dXJuICJyZWYiOworIAljYXNl IFRva2VuLlJFVFVSTjoKKyAJCXJldHVybiAicmV0dXJuIjsKK0BAIC04NDQ0LDcgKzg1MzMsNiBA QCBzdGF0aWMgc3RyaW5nIEdldFRva2VuTmFtZSAoaW50IHRva2VuKQorIAljYXNlIFRva2VuLlNU QVRJQzoKKyAJCXJldHVybiAic3RhdGljIjsKKyAJY2FzZSBUb2tlbi5TVFJVQ1Q6CistCWNhc2Ug VG9rZW4uUkVGX1NUUlVDVDoKKyAJCXJldHVybiAic3RydWN0IjsKKyAJY2FzZSBUb2tlbi5TV0lU Q0g6CisgCQlyZXR1cm4gInN3aXRjaCI7CitkaWZmIC0tZ2l0IGEvbWNzL21jcy9jcy10b2tlbml6 ZXIuY3MgYi9tY3MvbWNzL2NzLXRva2VuaXplci5jcworaW5kZXggMzdlZGI1YzEyMjQuLmRiNWJh MWYxZjFiIDEwMDY0NAorLS0tIGEvbWNzL21jcy9jcy10b2tlbml6ZXIuY3MKKysrKyBiL21jcy9t Y3MvY3MtdG9rZW5pemVyLmNzCitAQCAtODI1LDggKzgyNSw3IEBAIG5hbWVzcGFjZSBNb25vLkNT aGFycAorIAkJCQkJbmV4dF90b2tlbiA9PSBUb2tlbi5DTEFTUyB8fAorIAkJCQkJbmV4dF90b2tl biA9PSBUb2tlbi5TVFJVQ1QgfHwKKyAJCQkJCW5leHRfdG9rZW4gPT0gVG9rZW4uSU5URVJGQUNF IHx8CistCQkJCQluZXh0X3Rva2VuID09IFRva2VuLlZPSUQgfHwKKy0JCQkJCW5leHRfdG9rZW4g PT0gVG9rZW4uUkVGX1NUUlVDVDsKKysJCQkJCW5leHRfdG9rZW4gPT0gVG9rZW4uVk9JRDsKKyAK KyAJCQkJUG9wUG9zaXRpb24gKCk7CisgCitAQCAtOTE2LDE0ICs5MTUsMjAgQEAgbmFtZXNwYWNl IE1vbm8uQ1NoYXJwCisgCisgCQkJCWJyZWFrOworIAkJCWNhc2UgVG9rZW4uUkVGOgorLQkJCQlp ZiAocGVla190b2tlbiAoKSA9PSBUb2tlbi5TVFJVQ1QpIHsKKysJCQkJdmFyIHBwID0gcGVla190 b2tlbiAoKTsKKysJCQkJc3dpdGNoIChwcCkgeworKwkJCQljYXNlIFRva2VuLlNUUlVDVDoKKyAJ CQkJCXRva2VuICgpOworIAkJCQkJcmVzID0gVG9rZW4uUkVGX1NUUlVDVDsKKysJCQkJCWJyZWFr OworKwkJCQljYXNlIFRva2VuLlBBUlRJQUw6CisrCQkJCQl0b2tlbiAoKTsKKysJCQkJCXJlcyA9 IFRva2VuLlJFRl9QQVJUSUFMOworKwkJCQkJYnJlYWs7CisgCQkJCX0KKyAJCQkJYnJlYWs7Cisg CQkJfQorIAorLQorIAkJCXJldHVybiByZXM7CisgCQl9CisgCitAQCAtMTIxMiw2ICsxMjE3LDcg QEAgbmFtZXNwYWNlIE1vbm8uQ1NoYXJwCisgCisgCQkJCWNhc2UgVG9rZW4uUkVGOgorIAkJCQlj YXNlIFRva2VuLk9VVDoKKysJCQkJY2FzZSBUb2tlbi5JTjoKKyAJCQkJCWNhbl9iZV90eXBlID0g aXNfdHlwZSA9IGZhbHNlOworIAkJCQkJY29udGludWU7CisgCitAQCAtMTQwNiw2ICsxNDEyLDgg QEAgbmFtZXNwYWNlIE1vbm8uQ1NoYXJwCisgCQkJY2FzZSBUb2tlbi5JTlRFUlBPTEFURURfU1RS SU5HOgorIAkJCWNhc2UgVG9rZW4uVEhST1c6CisgCQkJY2FzZSBUb2tlbi5ERUZBVUxUX0NPTE9O OgorKwkJCWNhc2UgVG9rZW4uUkVGOgorKwkJCWNhc2UgVG9rZW4uU1RBQ0tBTExPQzoKKyAJCQkJ bmV4dF90b2tlbiA9IFRva2VuLklOVEVSUjsKKyAJCQkJYnJlYWs7CisgCQkJCQorQEAgLTE1Njcs MjggKzE1NzUsNTMgQEAgbmFtZXNwYWNlIE1vbm8uQ1NoYXJwCisgCQl7CisgCQkJaW50IGQ7Cisg CQkJYm9vbCBzZWVuX2RpZ2l0cyA9IGZhbHNlOworLQkJCQorLQkJCWlmIChjICE9IC0xKXsKKysJ CQlib29sIGRpZ2l0X3NlcGFyYXRvciA9IGZhbHNlOworKwkJCWludCBwcmV2ID0gYzsKKysJCQl2 YXIgbG9jID0gTG9jYXRpb247CisrCisrCQkJaWYgKHByZXYgIT0gLTEpeworIAkJCQlpZiAobnVt YmVyX3BvcyA9PSBNYXhOdW1iZXJMZW5ndGgpCisgCQkJCQlFcnJvcl9OdW1lcmljQ29uc3RhbnRU b29Mb25nICgpOworLQkJCQludW1iZXJfYnVpbGRlciBbbnVtYmVyX3BvcysrXSA9IChjaGFyKSBj OworKwkJCQludW1iZXJfYnVpbGRlciBbbnVtYmVyX3BvcysrXSA9IChjaGFyKSBwcmV2OworIAkJ CX0KKy0JCQkKKysKKyAJCQkvLworIAkJCS8vIFdlIHVzZSBwZWVrX2NoYXIyLCBiZWNhdXNlIGRl Y2ltYWxfZGlnaXRzIG5lZWRzIHRvIGRvIGEgCisgCQkJLy8gMi1jaGFyYWN0ZXIgbG9vay1haGVh ZCAoNS5Ub1N0cmluZyBmb3IgZXhhbXBsZSkuCisgCQkJLy8KKyAJCQl3aGlsZSAoKGQgPSBwZWVr X2NoYXIyICgpKSAhPSAtMSl7CistCQkJCWlmIChkID49ICcwJyAmJiBkIDw9ICc5Jyl7CisrCQkJ CWlmIChkID49ICcwJyAmJiBkIDw9ICc5JykgeworIAkJCQkJaWYgKG51bWJlcl9wb3MgPT0gTWF4 TnVtYmVyTGVuZ3RoKQorIAkJCQkJCUVycm9yX051bWVyaWNDb25zdGFudFRvb0xvbmcgKCk7Cist CQkJCQludW1iZXJfYnVpbGRlciBbbnVtYmVyX3BvcysrXSA9IChjaGFyKSBkOworLQkJCQkJZ2V0 X2NoYXIgKCk7CisrCQkJCQludW1iZXJfYnVpbGRlciBbbnVtYmVyX3BvcysrXSA9IChjaGFyKWQ7 CisrCQkJCQlwcmV2ID0gZ2V0X2NoYXIgKCk7CisgCQkJCQlzZWVuX2RpZ2l0cyA9IHRydWU7Cist CQkJCX0gZWxzZQorLQkJCQkJYnJlYWs7CisrCQkJCQljb250aW51ZTsKKysJCQkJfSBlbHNlIGlm IChkID09ICdfJykgeworKwkJCQkJaWYgKCFkaWdpdF9zZXBhcmF0b3IpIHsKKysJCQkJCQlpZiAo Y29udGV4dC5TZXR0aW5ncy5WZXJzaW9uIDwgTGFuZ3VhZ2VWZXJzaW9uLlZfNykKKysJCQkJCQkJ UmVwb3J0LkZlYXR1cmVJc05vdEF2YWlsYWJsZSAoY29udGV4dCwgTG9jYXRpb24sICJkaWdpdCBz ZXBhcmF0b3JzIik7CisrCisrCQkJCQkJZGlnaXRfc2VwYXJhdG9yID0gdHJ1ZTsKKysJCQkJCX0K KysKKysJCQkJCWlmIChwcmV2ID09ICcuJykKKysJCQkJCQlicmVhazsKKysKKysJCQkJCWlmIChw cmV2ID09ICdlJyB8fCBwcmV2ID09ICdFJykKKysJCQkJCQlFcnJvcl9JbnZhbGlkTnVtYmVyICgp OworKworKwkJCQkJcHJldiA9IGdldF9jaGFyKCk7CisrCQkJCQljb250aW51ZTsKKysJCQkJfQor KworKwkJCQlicmVhazsKKyAJCQl9CisgCQkJCisrCQkJaWYgKHByZXYgPT0gJ18nKSB7CisrCQkJ CUVycm9yX0ludmFsaWROdW1iZXIgKCk7CisrCQkJfQorKworIAkJCXJldHVybiBzZWVuX2RpZ2l0 czsKKyAJCX0KKyAKK0BAIC0xNzE2LDkgKzE3NDksOCBAQCBuYW1lc3BhY2UgTW9uby5DU2hhcnAK KyAJCQl9IGNhdGNoIChPdmVyZmxvd0V4Y2VwdGlvbikgeworIAkJCQlFcnJvcl9OdW1lcmljQ29u c3RhbnRUb29Mb25nICgpOworIAkJCQlyZXR1cm4gbmV3IEludExpdGVyYWwgKGNvbnRleHQuQnVp bHRpblR5cGVzLCAwLCBsb2MpOworLQkJCX0KKy0JCQljYXRjaCAoRm9ybWF0RXhjZXB0aW9uKSB7 CistCQkJCVJlcG9ydC5FcnJvciAoMTAxMywgTG9jYXRpb24sICJJbnZhbGlkIG51bWJlciIpOwor KwkJCX0gY2F0Y2ggKEZvcm1hdEV4Y2VwdGlvbikgeworKwkJCQlFcnJvcl9JbnZhbGlkTnVtYmVy ICgpOworIAkJCQlyZXR1cm4gbmV3IEludExpdGVyYWwgKGNvbnRleHQuQnVpbHRpblR5cGVzLCAw LCBsb2MpOworIAkJCX0KKyAJCX0KK0BAIC0xNzU3LDE0ICsxNzg5LDQxIEBAIG5hbWVzcGFjZSBN b25vLkNTaGFycAorIAkJeworIAkJCWludCBkOworIAkJCXVsb25nIHVsOworLQkJCQorLQkJCWdl dF9jaGFyICgpOworKwkJCWJvb2wgZGlnaXRfc2VwYXJhdG9yID0gZmFsc2U7CisrCQkJaW50IHBy ZXYgPSBnZXRfY2hhciAoKTsKKysKKyAJCQl3aGlsZSAoKGQgPSBwZWVrX2NoYXIgKCkpICE9IC0x KXsKKyAJCQkJaWYgKGlzX2hleCAoZCkpeworIAkJCQkJbnVtYmVyX2J1aWxkZXIgW251bWJlcl9w b3MrK10gPSAoY2hhcikgZDsKKyAJCQkJCWdldF9jaGFyICgpOworLQkJCQl9IGVsc2UKKy0JCQkJ CWJyZWFrOworKworKwkJCQkJcHJldiA9IGQ7CisrCQkJCQljb250aW51ZTsKKysJCQkJfQorKwor KwkJCQlpZiAoZCA9PSAnXycpIHsKKysJCQkJCWlmIChwcmV2ID09ICd4JyB8fCBwcmV2ID09ICdY JykKKysJCQkJCQlFcnJvcl9JbnZhbGlkTnVtYmVyICgpOworKworKwkJCQkJZ2V0X2NoYXIgKCk7 CisrCisrCQkJCQlpZiAoIWRpZ2l0X3NlcGFyYXRvcikgeworKwkJCQkJCWlmIChjb250ZXh0LlNl dHRpbmdzLlZlcnNpb24gPCBMYW5ndWFnZVZlcnNpb24uVl83KQorKwkJCQkJCQlSZXBvcnQuRmVh dHVyZUlzTm90QXZhaWxhYmxlIChjb250ZXh0LCBMb2NhdGlvbiwgImRpZ2l0IHNlcGFyYXRvcnMi KTsKKysKKysJCQkJCQlkaWdpdF9zZXBhcmF0b3IgPSB0cnVlOworKwkJCQkJfQorKworKwkJCQkJ cHJldiA9IGQ7CisrCQkJCQljb250aW51ZTsKKysJCQkJfQorKworKwkJCQlicmVhazsKKysJCQl9 CisrCisrCQkJaWYgKG51bWJlcl9wb3MgPT0gMCB8fCBwcmV2ID09ICdfJykgeworKwkJCQlFcnJv cl9JbnZhbGlkTnVtYmVyICgpOworKwkJCQlyZXR1cm4gbmV3IEludExpdGVyYWwgKGNvbnRleHQu QnVpbHRpblR5cGVzLCAwLCBsb2MpOworIAkJCX0KKyAJCQkKKyAJCQlzdHJpbmcgcyA9IG5ldyBT dHJpbmcgKG51bWJlcl9idWlsZGVyLCAwLCBudW1iZXJfcG9zKTsKK0BAIC0xNzc5LDEzICsxODM4 LDY1IEBAIG5hbWVzcGFjZSBNb25vLkNTaGFycAorIAkJCX0gY2F0Y2ggKE92ZXJmbG93RXhjZXB0 aW9uKXsKKyAJCQkJRXJyb3JfTnVtZXJpY0NvbnN0YW50VG9vTG9uZyAoKTsKKyAJCQkJcmV0dXJu IG5ldyBJbnRMaXRlcmFsIChjb250ZXh0LkJ1aWx0aW5UeXBlcywgMCwgbG9jKTsKKy0JCQl9Cist CQkJY2F0Y2ggKEZvcm1hdEV4Y2VwdGlvbikgeworLQkJCQlSZXBvcnQuRXJyb3IgKDEwMTMsIExv Y2F0aW9uLCAiSW52YWxpZCBudW1iZXIiKTsKKysJCQl9IGNhdGNoIChGb3JtYXRFeGNlcHRpb24p IHsKKysJCQkJRXJyb3JfSW52YWxpZE51bWJlciAoKTsKKyAJCQkJcmV0dXJuIG5ldyBJbnRMaXRl cmFsIChjb250ZXh0LkJ1aWx0aW5UeXBlcywgMCwgbG9jKTsKKyAJCQl9CisgCQl9CisgCisrCQlJ TGl0ZXJhbENvbnN0YW50IGhhbmRsZV9iaW5hcnkgKExvY2F0aW9uIGxvYykKKysJCXsKKysJCQlp bnQgZDsKKysJCQl1bG9uZyB1bCA9IDA7CisrCQkJYm9vbCBkaWdpdF9zZXBhcmF0b3IgPSBmYWxz ZTsKKysJCQlpbnQgZGlnaXRzID0gMDsKKysJCQlpbnQgcHJldiA9IGdldF9jaGFyICgpOworKwor KwkJCXdoaWxlICgoZCA9IHBlZWtfY2hhciAoKSkgIT0gLTEpeworKworKwkJCQlpZiAoZCA9PSAn MCcgfHwgZCA9PSAnMScpIHsKKysJCQkJCXVsID0gKHVsIDw8IDEpOworKwkJCQkJZGlnaXRzKys7 CisrCQkJCQlpZiAoZCA9PSAnMScpCisrCQkJCQkJdWwgfD0gMTsKKysJCQkJCWdldF9jaGFyICgp OworKwkJCQkJaWYgKGRpZ2l0cyA+IDY0KSB7CisrCQkJCQkJRXJyb3JfTnVtZXJpY0NvbnN0YW50 VG9vTG9uZyAoKTsKKysJCQkJCQlyZXR1cm4gbmV3IEludExpdGVyYWwgKGNvbnRleHQuQnVpbHRp blR5cGVzLCAwLCBsb2MpOworKwkJCQkJfQorKworKwkJCQkJcHJldiA9IGQ7CisrCQkJCQljb250 aW51ZTsKKysJCQkJfQorKworKwkJCQlpZiAoZCA9PSAnXycpIHsKKysJCQkJCWlmIChwcmV2ID09 ICdiJyB8fCBwcmV2ID09ICdCJykKKysJCQkJCQlFcnJvcl9JbnZhbGlkTnVtYmVyICgpOworKwor KwkJCQkJZ2V0X2NoYXIgKCk7CisrCisrCQkJCQlpZiAoIWRpZ2l0X3NlcGFyYXRvcikgeworKwkJ CQkJCWlmIChjb250ZXh0LlNldHRpbmdzLlZlcnNpb24gPCBMYW5ndWFnZVZlcnNpb24uVl83KQor KwkJCQkJCQlSZXBvcnQuRmVhdHVyZUlzTm90QXZhaWxhYmxlIChjb250ZXh0LCBMb2NhdGlvbiwg ImRpZ2l0IHNlcGFyYXRvcnMiKTsKKysJCQkJCQkKKysJCQkJCQlkaWdpdF9zZXBhcmF0b3IgPSB0 cnVlOworKwkJCQkJfQorKworKwkJCQkJcHJldiA9IGQ7CisrCQkJCQljb250aW51ZTsKKysJCQkJ fQorKwkJCQkgCisrCQkJCWJyZWFrOworKwkJCX0KKysKKysJCQlpZiAoZGlnaXRzID09IDAgfHwg cHJldiA9PSAnXycpIHsKKysJCQkJRXJyb3JfSW52YWxpZE51bWJlciAoKTsKKysJCQkJcmV0dXJu IG5ldyBJbnRMaXRlcmFsIChjb250ZXh0LkJ1aWx0aW5UeXBlcywgMCwgbG9jKTsKKysJCQl9Cisr CisrCQkJcmV0dXJuIGludGVnZXJfdHlwZV9zdWZmaXggKHVsLCBwZWVrX2NoYXIgKCksIGxvYyk7 CisrCQl9CisrCQkKKyAJCS8vCisgCQkvLyBJbnZva2VkIGlmIHdlIGtub3cgd2UgaGF2ZSAuZGln aXRzIG9yIGRpZ2l0cworIAkJLy8KK0BAIC0xODE3LDcgKzE5MjgsMjAgQEAgbmFtZXNwYWNlIE1v bm8uQ1NoYXJwCisgCisgCQkJCQkJcmV0dXJuIFRva2VuLkxJVEVSQUw7CisgCQkJCQl9CisrCisr CQkJCQlpZiAocGVlayA9PSAnYicgfHwgcGVlayA9PSAnQicpeworKwkJCQkJCWlmIChjb250ZXh0 LlNldHRpbmdzLlZlcnNpb24gPCBMYW5ndWFnZVZlcnNpb24uVl83KQorKwkJCQkJCQlSZXBvcnQu RmVhdHVyZUlzTm90QXZhaWxhYmxlIChjb250ZXh0LCBMb2NhdGlvbiwgImJpbmFyeSBsaXRlcmFs cyIpOworKworKwkJCQkJCXZhbCA9IHJlcyA9IGhhbmRsZV9iaW5hcnkgKGxvYyk7CisrI2lmIEZV TExfQVNUCisrCQkJCQkJcmVzLlBhcnNlZFZhbHVlID0gcmVhZGVyLlJlYWRDaGFycyAocmVhZF9z dGFydCwgcmVhZGVyLlBvc2l0aW9uIC0gMSk7CisrI2VuZGlmCisrCisrCQkJCQkJcmV0dXJuIFRv a2VuLkxJVEVSQUw7CisrCQkJCQl9CisgCQkJCX0KKysKKyAJCQkJZGVjaW1hbF9kaWdpdHMgKGMp OworIAkJCQljID0gcGVla19jaGFyICgpOworIAkJCX0KK0BAIC0xODY5LDcgKzE5OTMsNyBAQCBu YW1lc3BhY2UgTW9uby5DU2hhcnAKKyAJCQkJCQlFcnJvcl9OdW1lcmljQ29uc3RhbnRUb29Mb25n ICgpOworIAkJCQkJbnVtYmVyX2J1aWxkZXIgW251bWJlcl9wb3MrK10gPSAnKyc7CisgCQkJCX0K Ky0JCQkJCQorKworIAkJCQlkZWNpbWFsX2RpZ2l0cyAoYyk7CisgCQkJCWMgPSBwZWVrX2NoYXIg KCk7CisgCQkJfQorQEAgLTI5NDQsNiArMzA2OCwxMSBAQCBuYW1lc3BhY2UgTW9uby5DU2hhcnAK KyAJCXsKKyAJCQlSZXBvcnQuRXJyb3IgKDEwMjEsIExvY2F0aW9uLCAiSW50ZWdyYWwgY29uc3Rh bnQgaXMgdG9vIGxhcmdlIik7CQkJCisgCQl9CisrCisrCQl2b2lkIEVycm9yX0ludmFsaWROdW1i ZXIgKCkKKysJCXsKKysJCQlSZXBvcnQuRXJyb3IgKDEwMTMsIExvY2F0aW9uLCAiSW52YWxpZCBu dW1iZXIiKTsKKysJCX0KKyAJCQorIAkJdm9pZCBFcnJvcl9JbnZhbGlkRGlyZWN0aXZlICgpCisg CQl7CitkaWZmIC0tZ2l0IGEvbWNzL21jcy9lY29yZS5jcyBiL21jcy9tY3MvZWNvcmUuY3MKK2lu ZGV4IDIwZWU5ZTczYjE5Li5kNTkyNmJmNGQxZiAxMDA2NDQKKy0tLSBhL21jcy9tY3MvZWNvcmUu Y3MKKysrKyBiL21jcy9tY3MvZWNvcmUuY3MKK0BAIC0yNDEsNyArMjQxLDcgQEAgbmFtZXNwYWNl IE1vbm8uQ1NoYXJwIHsKKyAKKyAJCXByb3RlY3RlZCB2b2lkIENoZWNrRXhwcmVzc2lvblZhcmlh YmxlIChSZXNvbHZlQ29udGV4dCByYykKKyAJCXsKKy0JCQlpZiAocmMuSGFzQW55IChSZXNvbHZl Q29udGV4dC5PcHRpb25zLkJhc2VJbml0aWFsaXplciB8IFJlc29sdmVDb250ZXh0Lk9wdGlvbnMu RmllbGRJbml0aWFsaXplclNjb3BlKSkgeworKwkJCWlmIChyYy5IYXNBbnkgKFJlc29sdmVDb250 ZXh0Lk9wdGlvbnMuQmFzZUluaXRpYWxpemVyIHwgUmVzb2x2ZUNvbnRleHQuT3B0aW9ucy5GaWVs ZEluaXRpYWxpemVyU2NvcGUpICYmIHJjLkN1cnJlbnRBbm9ueW1vdXNNZXRob2QgPT0gbnVsbCkg eworIAkJCQlyYy5SZXBvcnQuRXJyb3IgKDgyMDAsIGxvYywgIk91dCB2YXJpYWJsZSBhbmQgcGF0 dGVybiB2YXJpYWJsZSBkZWNsYXJhdGlvbnMgYXJlIG5vdCBhbGxvd2VkIHdpdGhpbiBjb25zdHJ1 Y3RvciBpbml0aWFsaXplcnMsIGZpZWxkIGluaXRpYWxpemVycywgb3IgcHJvcGVydHkgaW5pdGlh bGl6ZXJzIik7CisgCQkJfSBlbHNlIGlmIChyYy5IYXNTZXQgKFJlc29sdmVDb250ZXh0Lk9wdGlv bnMuUXVlcnlDbGF1c2VTY29wZSkpIHsKKyAJCQkJcmMuUmVwb3J0LkVycm9yICg4MjAxLCBsb2Ms ICJPdXQgdmFyaWFibGUgYW5kIHBhdHRlcm4gdmFyaWFibGUgZGVjbGFyYXRpb25zIGFyZSBub3Qg YWxsb3dlZCB3aXRoaW4gYSBxdWVyeSBjbGF1c2UiKTsKK2RpZmYgLS1naXQgYS9tY3MvbWNzL2V4 cHJlc3Npb24uY3MgYi9tY3MvbWNzL2V4cHJlc3Npb24uY3MKK2luZGV4IDUxOGNjYzhlZjQzLi44 N2RiMTRhMGNlNyAxMDA2NDQKKy0tLSBhL21jcy9tY3MvZXhwcmVzc2lvbi5jcworKysrIGIvbWNz L21jcy9leHByZXNzaW9uLmNzCitAQCAtOTIwLDcgKzkyMCw3IEBAIG5hbWVzcGFjZSBNb25vLkNT aGFycAorIAorIAkJcHVibGljIG92ZXJyaWRlIGJvb2wgQ29udGFpbnNFbWl0V2l0aEF3YWl0ICgp CisgCQl7CistCQkJdGhyb3cgbmV3IE5vdEltcGxlbWVudGVkRXhjZXB0aW9uICgpOworKwkJCXJl dHVybiBmYWxzZTsKKyAJCX0KKyAKKyAJCXB1YmxpYyBvdmVycmlkZSBFeHByZXNzaW9uIENyZWF0 ZUV4cHJlc3Npb25UcmVlIChSZXNvbHZlQ29udGV4dCBlYykKK0BAIC0yMDUxLDcgKzIwNTEsMTEg QEAgbmFtZXNwYWNlIE1vbm8uQ1NoYXJwCisgCisgCQkJCQkJaWYgKGQuQnVpbHRpblR5cGUgPT0g QnVpbHRpblR5cGVTcGVjLlR5cGUuRHluYW1pYykKKyAJCQkJCQkJcmV0dXJuIHRoaXM7CistCQkJ CQkJCisrCisrCQkJCQkJLy8gVE9ETzogUmVxdWlyZXMgY3VzdG9tIG9wdGltaXplZCB2ZXJzaW9u IHdpdGggdmFyaWFibGUgc3RvcmUKKysJCQkJCQlpZiAoVmFyaWFibGUgIT0gbnVsbCkKKysJCQkJ CQkJcmV0dXJuIHRoaXM7CisrCisgCQkJCQkJLy8KKyAJCQkJCQkvLyBUdXJuIGlzIGNoZWNrIGlu dG8gc2ltcGxlIG51bGwgY2hlY2sgZm9yIGltcGxpY2l0bHkgY29udmVydGlibGUgcmVmZXJlbmNl IHR5cGVzCisgCQkJCQkJLy8KK0BAIC0yNzU3LDYgKzI3NjEsMTIgQEAgbmFtZXNwYWNlIE1vbm8u Q1NoYXJwCisgCQkJfQorIAkJfQorIAorKwkJcHVibGljIG92ZXJyaWRlIGJvb2wgSXNOdWxsIHsK KysJCQlnZXQgeworKwkJCQlyZXR1cm4gVHlwZVNwZWMuSXNSZWZlcmVuY2VUeXBlICh0eXBlKTsK KysJCQl9CisrCQl9CisrCisgCQlwdWJsaWMgb3ZlcnJpZGUgYm9vbCBDb250YWluc0VtaXRXaXRo QXdhaXQgKCkKKyAJCXsKKyAJCQlyZXR1cm4gZmFsc2U7CitAQCAtNTY2OSw2ICs1Njc5LDEyIEBA IG5hbWVzcGFjZSBNb25vLkNTaGFycAorIAkJCQlDb252Q2FzdC5FbWl0IChlYywgZW51bV9jb252 ZXJzaW9uKTsKKyAJCX0KKyAKKysJCXB1YmxpYyBvdmVycmlkZSB2b2lkIEVtaXRQcmVwYXJlIChF bWl0Q29udGV4dCBlYykKKysJCXsKKysJCQlMZWZ0LkVtaXRQcmVwYXJlIChlYyk7CisrCQkJUmln aHQuRW1pdFByZXBhcmUgKGVjKTsKKysJCX0KKysKKyAJCXB1YmxpYyBvdmVycmlkZSB2b2lkIEVt aXRTaWRlRWZmZWN0IChFbWl0Q29udGV4dCBlYykKKyAJCXsKKyAJCQlpZiAoKG9wZXIgJiBPcGVy YXRvci5Mb2dpY2FsTWFzaykgIT0gMCB8fAorQEAgLTYzODUsNyArNjQwMSw3IEBAIG5hbWVzcGFj ZSBNb25vLkNTaGFycAorIAkJCQkJCQl9CisgCQkJCQkJfQorIAorLQkJCQkJCWlmIChjb252X2Zh bHNlX2V4cHIgIT0gbnVsbCkgeworKwkJCQkJCWlmIChjb252X2ZhbHNlX2V4cHIgIT0gbnVsbCAm JiBmYWxzZV90eXBlICE9IEludGVybmFsVHlwZS5FcnJvclR5cGUgJiYgdHJ1ZV90eXBlICE9IElu dGVybmFsVHlwZS5FcnJvclR5cGUpIHsKKyAJCQkJCQkJZWMuUmVwb3J0LkVycm9yICgxNzIsIHRy dWVfZXhwci5Mb2NhdGlvbiwKKyAJCQkJCQkJCSJUeXBlIG9mIGNvbmRpdGlvbmFsIGV4cHJlc3Np b24gY2Fubm90IGJlIGRldGVybWluZWQgYXMgYHswfScgYW5kIGB7MX0nIGNvbnZlcnQgaW1wbGlj aXRseSB0byBlYWNoIG90aGVyIiwKKyAJCQkJCQkJCQl0cnVlX3R5cGUuR2V0U2lnbmF0dXJlRm9y RXJyb3IgKCksIGZhbHNlX3R5cGUuR2V0U2lnbmF0dXJlRm9yRXJyb3IgKCkpOworQEAgLTYzOTgs NyArNjQxNCw3IEBAIG5hbWVzcGFjZSBNb25vLkNTaGFycAorIAkJCQl9IGVsc2UgaWYgKChjb252 ID0gQ29udmVydC5JbXBsaWNpdENvbnZlcnNpb24gKGVjLCBmYWxzZV9leHByLCB0cnVlX3R5cGUs IGxvYykpICE9IG51bGwpIHsKKyAJCQkJCWZhbHNlX2V4cHIgPSBjb252OworIAkJCQl9IGVsc2Ug eworLQkJCQkJaWYgKGZhbHNlX3R5cGUgIT0gSW50ZXJuYWxUeXBlLkVycm9yVHlwZSkgeworKwkJ CQkJaWYgKGZhbHNlX3R5cGUgIT0gSW50ZXJuYWxUeXBlLkVycm9yVHlwZSAmJiB0cnVlX3R5cGUg IT0gSW50ZXJuYWxUeXBlLkVycm9yVHlwZSkgeworIAkJCQkJCWVjLlJlcG9ydC5FcnJvciAoMTcz LCB0cnVlX2V4cHIuTG9jYXRpb24sCisgCQkJCQkJCSJUeXBlIG9mIGNvbmRpdGlvbmFsIGV4cHJl c3Npb24gY2Fubm90IGJlIGRldGVybWluZWQgYmVjYXVzZSB0aGVyZSBpcyBubyBpbXBsaWNpdCBj b252ZXJzaW9uIGJldHdlZW4gYHswfScgYW5kIGB7MX0nIiwKKyAJCQkJCQkJdHJ1ZV90eXBlLkdl dFNpZ25hdHVyZUZvckVycm9yICgpLCBmYWxzZV90eXBlLkdldFNpZ25hdHVyZUZvckVycm9yICgp KTsKK0BAIC02NDI3LDYgKzY0NDMsMzAgQEAgbmFtZXNwYWNlIE1vbm8uQ1NoYXJwCisgCQkJcmV0 dXJuIHRoaXM7CisgCQl9CisgCisrCQlwdWJsaWMgb3ZlcnJpZGUgRXhwcmVzc2lvbiBEb1Jlc29s dmVMVmFsdWUgKFJlc29sdmVDb250ZXh0IHJjLCBFeHByZXNzaW9uIHJpZ2h0X3NpZGUpCisrCQl7 CisrCQkJZXhwciA9IGV4cHIuUmVzb2x2ZSAocmMpOworKwkJCXRydWVfZXhwciA9IHRydWVfZXhw ci5SZXNvbHZlIChyYyk7CisrCQkJZmFsc2VfZXhwciA9IGZhbHNlX2V4cHIuUmVzb2x2ZSAocmMp OworKworKwkJCWlmICh0cnVlX2V4cHIgPT0gbnVsbCB8fCBmYWxzZV9leHByID09IG51bGwgfHwg ZXhwciA9PSBudWxsKQorKwkJCQlyZXR1cm4gbnVsbDsKKysJCQkKKysJCQlpZiAoISh0cnVlX2V4 cHIgaXMgUmVmZXJlbmNlRXhwcmVzc2lvbiAmJiBmYWxzZV9leHByIGlzIFJlZmVyZW5jZUV4cHJl c3Npb24pKSB7CisrCQkJCXJjLlJlcG9ydC5FcnJvciAoODMyNiwgZXhwci5Mb2NhdGlvbiwgIkJv dGggcmVmIGNvbmRpdGlvbmFsIG9wZXJhdG9ycyBtdXN0IGJlIHJlZiB2YWx1ZXMiKTsKKysJCQkJ cmV0dXJuIG51bGw7CisrCQkJfQorKworKwkJCWlmICghVHlwZVNwZWNDb21wYXJlci5Jc0VxdWFs ICh0cnVlX2V4cHIuVHlwZSwgZmFsc2VfZXhwci5UeXBlKSkgeworKwkJCQlyYy5SZXBvcnQuRXJy b3IgKDgzMjcsIHRydWVfZXhwci5Mb2NhdGlvbiwgIlRoZSByZWYgY29uZGl0aW9uYWwgZXhwcmVz c2lvbiB0eXBlcyBgezB9JyBhbmQgYHsxfScgaGF2ZSB0byBtYXRjaCIsCisrCQkJCSAgICAgICAg ICAgICAgICAgdHJ1ZV9leHByLlR5cGUuR2V0U2lnbmF0dXJlRm9yRXJyb3IgKCksIGZhbHNlX2V4 cHIuVHlwZS5HZXRTaWduYXR1cmVGb3JFcnJvciAoKSk7IAorKwkJCX0KKysKKysJCQllY2xhc3Mg PSBFeHByQ2xhc3MuVmFsdWU7CisrCQkJdHlwZSA9IHRydWVfZXhwci5UeXBlOworKwkJCXJldHVy biB0aGlzOworKwkJfQorKworIAkJcHVibGljIG92ZXJyaWRlIHZvaWQgRW1pdCAoRW1pdENvbnRl eHQgZWMpCisgCQl7CisgCQkJTGFiZWwgZmFsc2VfdGFyZ2V0ID0gZWMuRGVmaW5lTGFiZWwgKCk7 CitAQCAtNjc3NCw3ICs2ODE0LDcgQEAgbmFtZXNwYWNlIE1vbm8uQ1NoYXJwCisgCQkJCQkJIkNh bm5vdCB1c2UgZml4ZWQgdmFyaWFibGUgYHswfScgaW5zaWRlIGFuIGFub255bW91cyBtZXRob2Qs IGxhbWJkYSBleHByZXNzaW9uIG9yIHF1ZXJ5IGV4cHJlc3Npb24iLAorIAkJCQkJCUdldFNpZ25h dHVyZUZvckVycm9yICgpKTsKKyAJCQkJfSBlbHNlIGlmIChsb2NhbF9pbmZvLklzQnlSZWYgfHwg bG9jYWxfaW5mby5UeXBlLklzQnlSZWZMaWtlKSB7CistCQkJCQlpZiAoZWMuQ3VycmVudEFub255 bW91c01ldGhvZCBpcyBTdGF0ZU1hY2hpbmVJbml0aWFsaXplcikgeworKwkJCQkJaWYgKGxvY2Fs X2luZm8uVHlwZS5Jc1NwZWNpYWxSdW50aW1lVHlwZSB8fCBlYy5DdXJyZW50QW5vbnltb3VzTWV0 aG9kIGlzIFN0YXRlTWFjaGluZUluaXRpYWxpemVyKSB7CisgCQkJCQkJLy8gSXQncyByZXBvcnRl ZCBsYXRlciBhcyA0MDEyLzQwMTMKKyAJCQkJCX0gZWxzZSB7CisgCQkJCQkJZWMuUmVwb3J0LkVy cm9yICg4MTc1LCBsb2MsCitAQCAtMTE4NzcsMTIgKzExOTE3LDE3IEBAIG5hbWVzcGFjZSBNb25v LkNTaGFycAorIAkJCWlmICghVHlwZU1hbmFnZXIuVmVyaWZ5VW5tYW5hZ2VkIChlYy5Nb2R1bGUs IG90eXBlLCBsb2MpKQorIAkJCQlyZXR1cm4gbnVsbDsKKyAKKy0JCQl0eXBlID0gUG9pbnRlckNv bnRhaW5lci5NYWtlVHlwZSAoZWMuTW9kdWxlLCBvdHlwZSk7CisrCQkJUmVzb2x2ZUV4cHJlc3Np b25UeXBlIChlYywgb3R5cGUpOworIAkJCWVjbGFzcyA9IEV4cHJDbGFzcy5WYWx1ZTsKKyAKKyAJ CQlyZXR1cm4gdGhpczsKKyAJCX0KKyAKKysJCXByb3RlY3RlZCB2aXJ0dWFsIHZvaWQgUmVzb2x2 ZUV4cHJlc3Npb25UeXBlIChSZXNvbHZlQ29udGV4dCByYywgVHlwZVNwZWMgZWxlbWVudFR5cGUp CisrCQl7CisrCQkJdHlwZSA9IFBvaW50ZXJDb250YWluZXIuTWFrZVR5cGUgKHJjLk1vZHVsZSwg ZWxlbWVudFR5cGUpOworKwkJfQorKworIAkJcHVibGljIG92ZXJyaWRlIHZvaWQgRW1pdCAoRW1p dENvbnRleHQgZWMpCisgCQl7CisgCQkJaW50IHNpemUgPSBCdWlsdGluVHlwZVNwZWMuR2V0U2l6 ZSAob3R5cGUpOworQEAgLTExOTMxLDE0ICsxMTk3NiwzNiBAQCBuYW1lc3BhY2UgTW9uby5DU2hh cnAKKyAJCXB1YmxpYyBib29sIFJlc29sdmVTcGFuQ29udmVyc2lvbiAoUmVzb2x2ZUNvbnRleHQg cmMsIFR5cGVTcGVjIHNwYW5UeXBlKQorIAkJeworIAkJCWN0b3IgPSBNZW1iZXJDYWNoZS5GaW5k TWVtYmVyIChzcGFuVHlwZSwgTWVtYmVyRmlsdGVyLkNvbnN0cnVjdG9yIChQYXJhbWV0ZXJzQ29t cGlsZWQuQ3JlYXRlRnVsbHlSZXNvbHZlZCAoUG9pbnRlckNvbnRhaW5lci5NYWtlVHlwZSAocmMu TW9kdWxlLCByYy5Nb2R1bGUuQ29tcGlsZXIuQnVpbHRpblR5cGVzLlZvaWQpLCByYy5Nb2R1bGUu Q29tcGlsZXIuQnVpbHRpblR5cGVzLkludCkpLCBCaW5kaW5nUmVzdHJpY3Rpb24uRGVjbGFyZWRP bmx5KSBhcyBNZXRob2RTcGVjOworLQkJCWlmIChjdG9yID09IG51bGwpCisrCQkJaWYgKGN0b3Ig PT0gbnVsbCkgeworKwkJCQl0aGlzLnR5cGUgPSBJbnRlcm5hbFR5cGUuRXJyb3JUeXBlOworIAkJ CQlyZXR1cm4gZmFsc2U7CisrCQkJfQorIAkJCQorIAkJCXRoaXMudHlwZSA9IHNwYW5UeXBlOwor IAkJCXJldHVybiB0cnVlOworIAkJfQorIAl9CisgCisrCWNsYXNzIFNwYW5TdGFja0FsbG9jIDog U3RhY2tBbGxvYworKwl7CisrCQlwdWJsaWMgU3BhblN0YWNrQWxsb2MgKEV4cHJlc3Npb24gdHlw ZSwgRXhwcmVzc2lvbiBjb3VudCwgTG9jYXRpb24gbCkKKysJCQk6IGJhc2UgKHR5cGUsIGNvdW50 LCBsKQorKwkJeworKwkJfQorKworKwkJcHJvdGVjdGVkIG92ZXJyaWRlIHZvaWQgUmVzb2x2ZUV4 cHJlc3Npb25UeXBlIChSZXNvbHZlQ29udGV4dCByYywgVHlwZVNwZWMgZWxlbWVudFR5cGUpCisr CQl7CisrCQkJdmFyIHNwYW4gPSByYy5Nb2R1bGUuUHJlZGVmaW5lZFR5cGVzLlNwYW5HZW5lcmlj LlJlc29sdmUgKCk7CisrCQkJaWYgKHNwYW4gPT0gbnVsbCkgeworKwkJCQl0eXBlID0gSW50ZXJu YWxUeXBlLkVycm9yVHlwZTsKKysJCQkJcmV0dXJuOworKwkJCX0KKysKKysJCQl0eXBlID0gc3Bh bi5NYWtlR2VuZXJpY1R5cGUgKHJjLCBuZXcgW10geyBlbGVtZW50VHlwZSB9KTsKKysJCQlSZXNv bHZlU3BhbkNvbnZlcnNpb24gKHJjLCB0eXBlKTsKKysJCX0KKysJfQorKworIAkvLworIAkvLyBB biBvYmplY3QgaW5pdGlhbGl6ZXIgZXhwcmVzc2lvbgorIAkvLworQEAgLTEzMDg1LDYgKzEzMTUy LDkgQEAgbmFtZXNwYWNlIE1vbm8uQ1NoYXJwCisgCQkJaWYgKGV4cHIgaXMgSUFzc2lnbk1ldGhv ZCkKKyAJCQkJcmV0dXJuIHRydWU7CisgCisrCQkJaWYgKGV4cHIgaXMgQ29uZGl0aW9uYWwpCisr CQkJCXJldHVybiB0cnVlOworKworIAkJCXZhciBpbnZvY2F0aW9uID0gZXhwciBhcyBJbnZvY2F0 aW9uOworIAkJCWlmIChpbnZvY2F0aW9uPy5UeXBlLktpbmQgPT0gTWVtYmVyS2luZC5CeVJlZikK KyAJCQkJcmV0dXJuIHRydWU7CitAQCAtMTMyMzIsNiArMTMzMDIsMTAgQEAgbmFtZXNwYWNlIE1v bm8uQ1NoYXJwCisgCQkJdGhpcy5sb2MgPSBsb2M7CisgCQl9CisgCisrCQlwcm90ZWN0ZWQgb3Zl cnJpZGUgdm9pZCBDbG9uZVRvIChDbG9uZUNvbnRleHQgY2xvbmVjdHgsIEV4cHJlc3Npb24gdCkK KysJCXsKKysJCX0KKysKKyAJCXB1YmxpYyBvdmVycmlkZSBFeHByZXNzaW9uIENyZWF0ZUV4cHJl c3Npb25UcmVlIChSZXNvbHZlQ29udGV4dCBlYykKKyAJCXsKKyAJCQl0aHJvdyBuZXcgTm90SW1w bGVtZW50ZWRFeGNlcHRpb24gKCk7CitkaWZmIC0tZ2l0IGEvbWNzL21jcy9maWVsZC5jcyBiL21j cy9tY3MvZmllbGQuY3MKK2luZGV4IDg2YmIwMjhkZWZjLi44YzY2NzMyODE0MyAxMDA2NDQKKy0t LSBhL21jcy9tY3MvZmllbGQuY3MKKysrKyBiL21jcy9tY3MvZmllbGQuY3MKK0BAIC01NDIsNyAr NTQyLDcgQEAgbmFtZXNwYWNlIE1vbm8uQ1NoYXJwCisgCQkJCX0KKyAJCQkpOworIAorLQkJCWZp eGVkX2J1ZmZlcl90eXBlLlNldEN1c3RvbUF0dHJpYnV0ZSAoKENvbnN0cnVjdG9ySW5mbykgY3Rv ci5HZXRNZXRhSW5mbyAoKSwgZW5jb2Rlci5Ub0FycmF5ICgpKTsKKysJCQlmaXhlZF9idWZmZXJf dHlwZS5TZXRDdXN0b21BdHRyaWJ1dGUgKChDb25zdHJ1Y3RvckluZm8pIGN0b3IuR2V0TWV0YUlu Zm8gKCksIGVuY29kZXIuVG9BcnJheSAob3V0IF8pKTsKKyAjZW5kaWYKKyAJCQkvLworIAkJCS8v IERvbid0IGVtaXQgRml4ZWRCdWZmZXJBdHRyaWJ1dGUgYXR0cmlidXRlIGZvciBwcml2YXRlIHR5 cGVzCitAQCAtNTU5LDcgKzU1OSw4IEBAIG5hbWVzcGFjZSBNb25vLkNTaGFycAorIAkJCWVuY29k ZXIuRW5jb2RlIChidWZmZXJfc2l6ZSk7CisgCQkJZW5jb2Rlci5FbmNvZGVFbXB0eU5hbWVkQXJn dW1lbnRzICgpOworIAorLQkJCUZpZWxkQnVpbGRlci5TZXRDdXN0b21BdHRyaWJ1dGUgKChDb25z dHJ1Y3RvckluZm8pIGN0b3IuR2V0TWV0YUluZm8gKCksIGVuY29kZXIuVG9BcnJheSAoKSk7Cisr CQkJRmllbGRCdWlsZGVyLlNldEN1c3RvbUF0dHJpYnV0ZSAoKENvbnN0cnVjdG9ySW5mbykgY3Rv ci5HZXRNZXRhSW5mbyAoKSwgZW5jb2Rlci5Ub0FycmF5IChvdXQgdmFyIHJlZmVyZW5jZXMpKTsK KysJCQlNb2R1bGUuQWRkQXNzZW1ibHlSZWZlcmVuY2VzIChyZWZlcmVuY2VzKTsKKyAJCX0KKyAJ fQorIAorZGlmZiAtLWdpdCBhL21jcy9tY3MvZ2VuZXJpYy5jcyBiL21jcy9tY3MvZ2VuZXJpYy5j cworaW5kZXggZWMyOTY1ZGY2M2IuLjBjNzAzMmIyMDg4IDEwMDY0NAorLS0tIGEvbWNzL21jcy9n ZW5lcmljLmNzCisrKysgYi9tY3MvbWNzL2dlbmVyaWMuY3MKK0BAIC0zMzgxLDcgKzMzODEsNyBA QCBuYW1lc3BhY2UgTW9uby5DU2hhcnAgeworIAkJCQkJY29udGludWU7CisgCisgCQkJCXZhciBi b3VuZCA9IGNhbmRpZGF0ZXMgW2NpXTsKKy0JCQkJaWYgKGJvdW5kLlR5cGUgPT0gYmVzdF9jYW5k aWRhdGUpCisrCQkJCWlmIChUeXBlU3BlY0NvbXBhcmVyLklzRXF1YWwgKGJvdW5kLlR5cGUsIGJl c3RfY2FuZGlkYXRlKSkKKyAJCQkJCWNvbnRpbnVlOworIAorIAkJCQlpbnQgY2lpID0gMDsKK2Rp ZmYgLS1naXQgYS9tY3MvbWNzL21vZGlmaWVycy5jcyBiL21jcy9tY3MvbW9kaWZpZXJzLmNzCitp bmRleCA5MjZhYjVkMTg0OC4uMjFkZDUyYjNiMTQgMTAwNjQ0CistLS0gYS9tY3MvbWNzL21vZGlm aWVycy5jcworKysrIGIvbWNzL21jcy9tb2RpZmllcnMuY3MKK0BAIC03NCw2ICs3NCw4IEBAIG5h bWVzcGFjZSBNb25vLkNTaGFycAorIAkJCQlyZXR1cm4gImludGVybmFsIjsKKyAJCQljYXNlIE1v ZGlmaWVycy5QUklWQVRFOgorIAkJCQlyZXR1cm4gInByaXZhdGUiOworKwkJCWNhc2UgTW9kaWZp ZXJzLlBSSVZBVEUgfCBNb2RpZmllcnMuUFJPVEVDVEVEOgorKwkJCQlyZXR1cm4gInByaXZhdGUg cHJvdGVjdGVkIjsKKyAJCQlkZWZhdWx0OgorIAkJCQl0aHJvdyBuZXcgTm90SW1wbGVtZW50ZWRF eGNlcHRpb24gKG1vZC5Ub1N0cmluZyAoKSk7CisgCQkJfQorQEAgLTEyOSwxMiArMTMxLDE2IEBA IG5hbWVzcGFjZSBNb25vLkNTaGFycAorIAkJCWlmICgobW9kQiAmIE1vZGlmaWVycy5QVUJMSUMp ICE9IDApIHsKKyAJCQkJZmxhZ3MgPSBNb2RpZmllcnMuUFJPVEVDVEVEIHwgTW9kaWZpZXJzLklO VEVSTkFMIHwgTW9kaWZpZXJzLlBSSVZBVEU7CisgCQkJfSBlbHNlIGlmICgobW9kQiAmIE1vZGlm aWVycy5QUk9URUNURUQpICE9IDApIHsKKy0JCQkJaWYgKChtb2RCICYgTW9kaWZpZXJzLklOVEVS TkFMKSAhPSAwKQorLQkJCQkJZmxhZ3MgPSBNb2RpZmllcnMuUFJPVEVDVEVEIHwgTW9kaWZpZXJz LklOVEVSTkFMOworLQorLQkJCQlmbGFncyB8PSBNb2RpZmllcnMuUFJJVkFURTsKKy0JCQl9IGVs c2UgaWYgKChtb2RCICYgTW9kaWZpZXJzLklOVEVSTkFMKSAhPSAwKQorKwkJCQlpZiAoKG1vZEIg JiBNb2RpZmllcnMuSU5URVJOQUwpICE9IDApIHsKKysJCQkJCWZsYWdzID0gTW9kaWZpZXJzLlBS T1RFQ1RFRCB8IE1vZGlmaWVycy5JTlRFUk5BTCB8IE1vZGlmaWVycy5QUklWQVRFOworKwkJCQl9 IGVsc2UgeworKwkJCQkJbW9kQSAmPSB+TW9kaWZpZXJzLlBST1RFQ1RFRDsKKysJCQkJCWZsYWdz ID0gTW9kaWZpZXJzLlBSSVZBVEU7CisrCQkJCX0KKysJCQl9IGVsc2UgaWYgKChtb2RCICYgTW9k aWZpZXJzLklOVEVSTkFMKSAhPSAwKSB7CisrCQkJCW1vZEEgJj0gfk1vZGlmaWVycy5QUk9URUNU RUQ7CisgCQkJCWZsYWdzID0gTW9kaWZpZXJzLlBSSVZBVEU7CisrCQkJfQorIAorIAkJCXJldHVy biBtb2RCICE9IG1vZEEgJiYgKG1vZEEgJiAofmZsYWdzKSkgPT0gMDsKKyAJCX0KK0BAIC0xNTEs NiArMTU3LDggQEAgbmFtZXNwYWNlIE1vbm8uQ1NoYXJwCisgCQkJfSBlbHNlIHsKKyAJCQkJaWYg KChtb2RfZmxhZ3MgJiBNb2RpZmllcnMuUFVCTElDKSAhPSAwKQorIAkJCQkJdCA9IFR5cGVBdHRy aWJ1dGVzLk5lc3RlZFB1YmxpYzsKKysJCQkJZWxzZSBpZiAoKG1vZF9mbGFncyAmIChNb2RpZmll cnMuUFJPVEVDVEVEIHwgTW9kaWZpZXJzLlBSSVZBVEUpKSA9PSAoTW9kaWZpZXJzLlBST1RFQ1RF RCB8IE1vZGlmaWVycy5QUklWQVRFKSkKKysJCQkJCXQgPSBUeXBlQXR0cmlidXRlcy5OZXN0ZWRG YW1BTkRBc3NlbTsKKyAJCQkJZWxzZSBpZiAoKG1vZF9mbGFncyAmIE1vZGlmaWVycy5QUklWQVRF KSAhPSAwKQorIAkJCQkJdCA9IFR5cGVBdHRyaWJ1dGVzLk5lc3RlZFByaXZhdGU7CisgCQkJCWVs c2UgaWYgKChtb2RfZmxhZ3MgJiAoTW9kaWZpZXJzLlBST1RFQ1RFRCB8IE1vZGlmaWVycy5JTlRF Uk5BTCkpID09IChNb2RpZmllcnMuUFJPVEVDVEVEIHwgTW9kaWZpZXJzLklOVEVSTkFMKSkKK0BA IC0xNzMsMTggKzE4MSwyNyBAQCBuYW1lc3BhY2UgTW9uby5DU2hhcnAKKyAJCXsKKyAJCQlGaWVs ZEF0dHJpYnV0ZXMgZmEgPSAwOworIAorLQkJCWlmICgobW9kX2ZsYWdzICYgTW9kaWZpZXJzLlBV QkxJQykgIT0gMCkKKysJCQlzd2l0Y2ggKG1vZF9mbGFncyAmIE1vZGlmaWVycy5BY2Nlc3NpYmls aXR5TWFzaykgeworKwkJCWNhc2UgTW9kaWZpZXJzLlBVQkxJQzoKKyAJCQkJZmEgfD0gRmllbGRB dHRyaWJ1dGVzLlB1YmxpYzsKKy0JCQlpZiAoKG1vZF9mbGFncyAmIE1vZGlmaWVycy5QUklWQVRF KSAhPSAwKQorKwkJCQlicmVhazsKKysJCQljYXNlIE1vZGlmaWVycy5QUklWQVRFOgorIAkJCQlm YSB8PSBGaWVsZEF0dHJpYnV0ZXMuUHJpdmF0ZTsKKy0JCQlpZiAoKG1vZF9mbGFncyAmIE1vZGlm aWVycy5QUk9URUNURUQpICE9IDApIHsKKy0JCQkJaWYgKChtb2RfZmxhZ3MgJiBNb2RpZmllcnMu SU5URVJOQUwpICE9IDApCistCQkJCQlmYSB8PSBGaWVsZEF0dHJpYnV0ZXMuRmFtT1JBc3NlbTsK Ky0JCQkJZWxzZSAKKy0JCQkJCWZhIHw9IEZpZWxkQXR0cmlidXRlcy5GYW1pbHk7CistCQkJfSBl bHNlIHsKKy0JCQkJaWYgKChtb2RfZmxhZ3MgJiBNb2RpZmllcnMuSU5URVJOQUwpICE9IDApCist CQkJCQlmYSB8PSBGaWVsZEF0dHJpYnV0ZXMuQXNzZW1ibHk7CisrCQkJCWJyZWFrOworKwkJCWNh c2UgTW9kaWZpZXJzLlBST1RFQ1RFRCB8IE1vZGlmaWVycy5JTlRFUk5BTDoKKysJCQkJZmEgfD0g RmllbGRBdHRyaWJ1dGVzLkZhbU9SQXNzZW07CisrCQkJCWJyZWFrOworKwkJCWNhc2UgTW9kaWZp ZXJzLlBST1RFQ1RFRDoKKysJCQkJZmEgfD0gRmllbGRBdHRyaWJ1dGVzLkZhbWlseTsKKysJCQkJ YnJlYWs7CisrCQkJY2FzZSBNb2RpZmllcnMuSU5URVJOQUw6CisrCQkJCWZhIHw9IEZpZWxkQXR0 cmlidXRlcy5Bc3NlbWJseTsKKysJCQkJYnJlYWs7CisrCQkJY2FzZSBNb2RpZmllcnMuUFJJVkFU RSB8IE1vZGlmaWVycy5QUk9URUNURUQ6CisrCQkJCWZhIHw9IEZpZWxkQXR0cmlidXRlcy5GYW1B TkRBc3NlbTsKKysJCQkJYnJlYWs7CisrCQkJZGVmYXVsdDoKKysJCQkJdGhyb3cgbmV3IE5vdElt cGxlbWVudGVkRXhjZXB0aW9uIChtb2RfZmxhZ3MuVG9TdHJpbmcgKCkpOworIAkJCX0KKyAKKyAJ CQlpZiAoKG1vZF9mbGFncyAmIE1vZGlmaWVycy5TVEFUSUMpICE9IDApCitAQCAtMjE1LDYgKzIz Miw5IEBAIG5hbWVzcGFjZSBNb25vLkNTaGFycAorIAkJCWNhc2UgTW9kaWZpZXJzLklOVEVSTkFM OgorIAkJCQltYSB8PSBNZXRob2RBdHRyaWJ1dGVzLkFzc2VtYmx5OworIAkJCQlicmVhazsKKysJ CQljYXNlIE1vZGlmaWVycy5QUklWQVRFIHwgTW9kaWZpZXJzLlBST1RFQ1RFRDoKKysJCQkJbWEg fD0gTWV0aG9kQXR0cmlidXRlcy5GYW1BTkRBc3NlbTsKKysJCQkJYnJlYWs7CisgCQkJZGVmYXVs dDoKKyAJCQkJdGhyb3cgbmV3IE5vdEltcGxlbWVudGVkRXhjZXB0aW9uIChtb2RfZmxhZ3MuVG9T dHJpbmcgKCkpOworIAkJCX0KK2RpZmYgLS1naXQgYS9tY3MvbWNzL21vZHVsZS5jcyBiL21jcy9t Y3MvbW9kdWxlLmNzCitpbmRleCAyMjkzZDgyNWIzNi4uNDY4MDQzM2JiMDEgMTAwNjQ0CistLS0g YS9tY3MvbWNzL21vZHVsZS5jcworKysrIGIvbWNzL21jcy9tb2R1bGUuY3MKK0BAIC00ODAsNiAr NDgwLDE4IEBAIG5hbWVzcGFjZSBNb25vLkNTaGFycAorIAkJCWF0dHJpYnV0ZXMuQWRkQXR0cmli dXRlIChhdHRyKTsKKyAJCX0KKyAKKysJCXB1YmxpYyB2b2lkIEFkZEFzc2VtYmx5UmVmZXJlbmNl cyAoTGlzdDxBc3NlbWJseT4gbmFtZXMpCisrCQl7CisrCQkJaWYgKG5hbWVzID09IG51bGwpCisr CQkJCXJldHVybjsKKysKKysjaWYgU1RBVElDCisrCQkJZm9yZWFjaCAodmFyIG5hbWUgaW4gbmFt ZXMpIHsKKysJCQkJQnVpbGRlci5fX0dldEFzc2VtYmx5VG9rZW4gKG5hbWUpOworKwkJCX0KKysj ZW5kaWYKKysJCX0KKysKKyAJCXB1YmxpYyBvdmVycmlkZSB2b2lkIEFkZFR5cGVDb250YWluZXIg KFR5cGVDb250YWluZXIgdGMpCisgCQl7CisgCQkJQWRkVHlwZUNvbnRhaW5lck1lbWJlciAodGMp OworZGlmZiAtLWdpdCBhL21jcy9tY3MvcGFyYW1ldGVyLmNzIGIvbWNzL21jcy9wYXJhbWV0ZXIu Y3MKK2luZGV4IGNjMTBlZWUxNjJiLi45NTg1MTQ3ODAxMCAxMDA2NDQKKy0tLSBhL21jcy9tY3Mv cGFyYW1ldGVyLmNzCisrKysgYi9tY3MvbWNzL3BhcmFtZXRlci5jcworQEAgLTIyMSwxMiArMjIx LDEzIEBAIG5hbWVzcGFjZSBNb25vLkNTaGFycCB7CisgCQkJUkVGID0gMSA8PCAxLAorIAkJCU9V VCA9IDEgPDwgMiwKKyAJCQlUaGlzID0gMSA8PCAzLAorLQkJCUNhbGxlck1lbWJlck5hbWUgPSAx IDw8IDQsCistCQkJQ2FsbGVyTGluZU51bWJlciA9IDEgPDwgNSwKKy0JCQlDYWxsZXJGaWxlUGF0 aCA9IDEgPDwgNiwKKysJCQlSZWFkT25seSA9IDEgPDwgNCwKKysJCQlDYWxsZXJNZW1iZXJOYW1l ID0gMSA8PCA1LAorKwkJCUNhbGxlckxpbmVOdW1iZXIgPSAxIDw8IDYsCisrCQkJQ2FsbGVyRmls ZVBhdGggPSAxIDw8IDcsCisgCisgCQkJUmVmT3V0TWFzayA9IFJFRiB8IE9VVCwKKy0JCQlNb2Rp Zmllck1hc2sgPSBQQVJBTVMgfCBSRUYgfCBPVVQgfCBUaGlzLAorKwkJCU1vZGlmaWVyTWFzayA9 IFBBUkFNUyB8IFJFRiB8IE9VVCB8IFRoaXMgfCBSZWFkT25seSwKKyAJCQlDYWxsZXJNYXNrID0g Q2FsbGVyTWVtYmVyTmFtZSB8IENhbGxlckxpbmVOdW1iZXIgfCBDYWxsZXJGaWxlUGF0aAorIAkJ fQorIAorQEAgLTE0NzQsOSArMTQ3NSw5IEBAIG5hbWVzcGFjZSBNb25vLkNTaGFycCB7CisgCQkJ CQl9CisgCQkJCX0KKyAKKy0JCQkJaWYgKCFleHByLklzTnVsbCAmJiBUeXBlU3BlYy5Jc1JlZmVy ZW5jZVR5cGUgKHBhcmFtZXRlcl90eXBlKSAmJiBwYXJhbWV0ZXJfdHlwZS5CdWlsdGluVHlwZSAh PSBCdWlsdGluVHlwZVNwZWMuVHlwZS5TdHJpbmcpIHsKKysJCQkJaWYgKCFyZXMuSXNOdWxsICYm IFR5cGVTcGVjLklzUmVmZXJlbmNlVHlwZSAocGFyYW1ldGVyX3R5cGUpICYmIHBhcmFtZXRlcl90 eXBlLkJ1aWx0aW5UeXBlICE9IEJ1aWx0aW5UeXBlU3BlYy5UeXBlLlN0cmluZykgeworIAkJCQkJ cmMuUmVwb3J0LkVycm9yICgxNzYzLCBMb2NhdGlvbiwKKy0JCQkJCQkiT3B0aW9uYWwgcGFyYW1l dGVyIGB7MH0nIG9mIHR5cGUgYHsxfScgY2FuIG9ubHkgYmUgaW5pdGlhbGl6ZWQgd2l0aCBgbnVs bCciLAorKwkJCQkJCSJPcHRpb25hbCBwYXJhbWV0ZXIgYHswfScgb2YgdHlwZSBgezF9JyBjYW4g b25seSBiZSBpbml0aWFsaXplZCB3aXRoIGRlZmF1bHQgdmFsdWUiLAorIAkJCQkJCXAuTmFtZSwg cGFyYW1ldGVyX3R5cGUuR2V0U2lnbmF0dXJlRm9yRXJyb3IgKCkpOworIAorIAkJCQkJcmV0dXJu OworZGlmZiAtLWdpdCBhL21jcy9tY3MvcmVwb3J0LmNzIGIvbWNzL21jcy9yZXBvcnQuY3MKK2lu ZGV4IGNjM2Q4MmIyNmUwLi41ZDY0YzhlNzY2ZSAxMDA2NDQKKy0tLSBhL21jcy9tY3MvcmVwb3J0 LmNzCisrKysgYi9tY3MvbWNzL3JlcG9ydC5jcworQEAgLTQyLDcgKzQyLDcgQEAgbmFtZXNwYWNl IE1vbm8uQ1NoYXJwIHsKKyAJCXB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgaW50W10gQWxsV2Fybmlu Z3MgPSBuZXcgaW50W10geworIAkJCTI4LCA2NywgNzgsCisgCQkJMTA1LCAxMDgsIDEwOSwgMTE0 LCAxNjIsIDE2NCwgMTY4LCAxNjksIDE4MywgMTg0LCAxOTcsCistCQkJMjE5LCAyNTEsIDI1Miwg MjUzLCAyNzgsIDI4MiwKKysJCQkyMTksIDI1MSwgMjUyLCAyNTMsIDI3OCwgMjgwLCAyODIsCisg CQkJNDAyLCA0MTQsIDQxOSwgNDIwLCA0MjksIDQzNiwgNDM3LCA0NDAsIDQ1OCwgNDY0LCA0NjUs IDQ2NywgNDY5LCA0NzIsIDQ3MywKKyAJCQk2MTIsIDYxOCwgNjI2LCA2MjgsIDY0MiwgNjQ5LCA2 NTIsIDY1NywgNjU4LCA2NTksIDY2MCwgNjYxLCA2NjUsIDY3MiwgNjc1LCA2OTMsCisgCQkJNzI4 LAorQEAgLTEwNyw2ICsxMDcsMTUgQEAgbmFtZXNwYWNlIE1vbm8uQ1NoYXJwIHsKKyAJCQljYXNl IExhbmd1YWdlVmVyc2lvbi5WXzc6CisgCQkJCXZlcnNpb24gPSAiNy4wIjsKKyAJCQkJYnJlYWs7 CisrCQkJY2FzZSBMYW5ndWFnZVZlcnNpb24uVl83XzE6CisrCQkJCXZlcnNpb24gPSAiNy4xIjsK KysJCQkJYnJlYWs7CisrCQkJY2FzZSBMYW5ndWFnZVZlcnNpb24uVl83XzI6CisrCQkJCXZlcnNp b24gPSAiNy4yIjsKKysJCQkJYnJlYWs7CisrCQkJY2FzZSBMYW5ndWFnZVZlcnNpb24uVl83XzM6 CisrCQkJCXZlcnNpb24gPSAiNy4zIjsKKysJCQkJYnJlYWs7CisgCQkJZGVmYXVsdDoKKyAJCQkJ dGhyb3cgbmV3IEludGVybmFsRXJyb3JFeGNlcHRpb24gKCJJbnZhbGlkIGZlYXR1cmUgdmVyc2lv biIsIGNvbXBpbGVyLlNldHRpbmdzLlZlcnNpb24pOworIAkJCX0KK2RpZmYgLS1naXQgYS9tY3Mv bWNzL3NldHRpbmdzLmNzIGIvbWNzL21jcy9zZXR0aW5ncy5jcworaW5kZXggMzc2NjQxODdjNzEu Ljk3NmM5YjY4MTI4IDEwMDY0NAorLS0tIGEvbWNzL21jcy9zZXR0aW5ncy5jcworKysrIGIvbWNz L21jcy9zZXR0aW5ncy5jcworQEAgLTMyLDEwICszMiwxMSBAQCBuYW1lc3BhY2UgTW9uby5DU2hh cnAgeworIAkJVl83ID0gNywKKyAJCVZfN18xID0gNzEsCisgCQlWXzdfMiA9IDcyLAorKwkJVl83 XzMgPSA3MywKKyAJCUV4cGVyaW1lbnRhbCA9IDEwMCwKKyAKKyAJCURlZmF1bHQgPSBWXzcsCist CQlMYXRlc3QgPSBWXzdfMgorKwkJTGF0ZXN0ID0gVl83XzMKKyAJfQorIAorIAlwdWJsaWMgZW51 bSBSdW50aW1lVmVyc2lvbgorQEAgLTEyNzAsNiArMTI3MSw3IEBAIG5hbWVzcGFjZSBNb25vLkNT aGFycCB7CisgCQkJY2FzZSAiL2hpZ2hlbnRyb3B5dmErIjoKKyAJCQljYXNlICIvaGlnaGVudHJv cHl2YS0iOgorIAkJCWNhc2UgIi9saW5rIjoKKysJCQljYXNlICIvc291cmNlbGluayI6CisgCQkJ Y2FzZSAiL21vZHVsZWFzc2VtYmx5bmFtZSI6CisgCQkJY2FzZSAiL25vd2luMzJtYW5pZmVzdCI6 CisgCQkJY2FzZSAiL3BkYiI6CitkaWZmIC0tZ2l0IGEvbWNzL21jcy9zdGF0ZW1lbnQuY3MgYi9t Y3MvbWNzL3N0YXRlbWVudC5jcworaW5kZXggOWM1MTEyODU0OGYuLmM4Yjc3YzFhZGMxIDEwMDY0 NAorLS0tIGEvbWNzL21jcy9zdGF0ZW1lbnQuY3MKKysrKyBiL21jcy9tY3Mvc3RhdGVtZW50LmNz CitAQCAtOTI4LDggKzkyOCw3IEBAIG5hbWVzcGFjZSBNb25vLkNTaGFycCB7CisgCQlwdWJsaWMg b3ZlcnJpZGUgUmVhY2hhYmlsaXR5IE1hcmtSZWFjaGFibGUgKFJlYWNoYWJpbGl0eSByYykKKyAJ CXsKKyAJCQliYXNlLk1hcmtSZWFjaGFibGUgKHJjKTsKKy0JCQlleHByLk1hcmtSZWFjaGFibGUg KHJjKTsKKy0JCQlyZXR1cm4gcmM7CisrCQkJcmV0dXJuIGV4cHIuTWFya1JlYWNoYWJsZSAocmMp OworIAkJfQorIAorIAkJcHVibGljIG92ZXJyaWRlIGJvb2wgUmVzb2x2ZSAoQmxvY2tDb250ZXh0 IGVjKQorQEAgLTI0MTksNiArMjQxOCw3IEBAIG5hbWVzcGFjZSBNb25vLkNTaGFycCB7CisgCQkJ SXNMb2NrZWQgPSAxIDw8IDgsCisgCQkJU3ltYm9sRmlsZUhpZGRlbiA9IDEgPDwgOSwKKyAJCQlC eVJlZiA9IDEgPDwgMTAsCisrCQkJUG9pbnRlckJ5UmVmID0gMSA8PCAxMSwKKyAKKyAJCQlSZWFk b25seU1hc2sgPSAxIDw8IDIwCisgCQl9CitAQCAtMjYwOSwyMCArMjYwOSwyMiBAQCBuYW1lc3Bh Y2UgTW9uby5DU2hhcnAgeworIAorIAkJCWlmIChJc0J5UmVmKSB7CisgCQkJCWJ1aWxkZXIgPSBl Yy5EZWNsYXJlTG9jYWwgKFJlZmVyZW5jZUNvbnRhaW5lci5NYWtlVHlwZSAoZWMuTW9kdWxlLCBU eXBlKSwgSXNGaXhlZCk7CisrCQkJfSBlbHNlIGlmICgoZmxhZ3MgJiBGbGFncy5Qb2ludGVyQnlS ZWYpICE9IDApIHsKKysJCQkJYnVpbGRlciA9IGVjLkRlY2xhcmVMb2NhbCAoUmVmZXJlbmNlQ29u dGFpbmVyLk1ha2VUeXBlIChlYy5Nb2R1bGUsICgoUG9pbnRlckNvbnRhaW5lcikgVHlwZSkuRWxl bWVudCksIElzRml4ZWQpOworIAkJCX0gZWxzZSB7CisgCQkJCS8vCisgCQkJCS8vIEFsbCBmaXhl ZCB2YXJpYWJsZWQgYXJlIHBpbm5lZCwgYSBzbG90IGhhcyB0byBiZSBhbG9jYXRlZAorIAkJCQkv LworLQkJCQlidWlsZGVyID0gZWMuRGVjbGFyZUxvY2FsKFR5cGUsIElzRml4ZWQpOworKwkJCQli dWlsZGVyID0gZWMuRGVjbGFyZUxvY2FsIChUeXBlLCBJc0ZpeGVkKTsKKyAJCQl9CisgCisgCQkJ aWYgKChmbGFncyAmIEZsYWdzLlN5bWJvbEZpbGVIaWRkZW4pID09IDApCisgCQkJCWVjLkRlZmlu ZUxvY2FsVmFyaWFibGUgKG5hbWUsIGJ1aWxkZXIpOworIAkJfQorIAorLQkJcHVibGljIHN0YXRp YyBMb2NhbFZhcmlhYmxlIENyZWF0ZUNvbXBpbGVyR2VuZXJhdGVkIChUeXBlU3BlYyB0eXBlLCBC bG9jayBibG9jaywgTG9jYXRpb24gbG9jLCBib29sIHdyaXRlVG9TeW1ib2xGaWxlID0gZmFsc2Up CisrCQlwdWJsaWMgc3RhdGljIExvY2FsVmFyaWFibGUgQ3JlYXRlQ29tcGlsZXJHZW5lcmF0ZWQg KFR5cGVTcGVjIHR5cGUsIEJsb2NrIGJsb2NrLCBMb2NhdGlvbiBsb2MsIGJvb2wgd3JpdGVUb1N5 bWJvbEZpbGUgPSBmYWxzZSwgRmxhZ3MgYWRkaXRpb25hbEZsYWdzID0gMCkKKyAJCXsKKy0JCQlM b2NhbFZhcmlhYmxlIGxpID0gbmV3IExvY2FsVmFyaWFibGUgKGJsb2NrLCBHZXRDb21waWxlckdl bmVyYXRlZE5hbWUgKGJsb2NrKSwgRmxhZ3MuQ29tcGlsZXJHZW5lcmF0ZWQgfCBGbGFncy5Vc2Vk LCBsb2MpOworKwkJCUxvY2FsVmFyaWFibGUgbGkgPSBuZXcgTG9jYWxWYXJpYWJsZSAoYmxvY2ss IEdldENvbXBpbGVyR2VuZXJhdGVkTmFtZSAoYmxvY2spLCBGbGFncy5Db21waWxlckdlbmVyYXRl ZCB8IEZsYWdzLlVzZWQgfCBhZGRpdGlvbmFsRmxhZ3MsIGxvYyk7CisgCQkJaWYgKCF3cml0ZVRv U3ltYm9sRmlsZSkKKyAJCQkJbGkuZmxhZ3MgfD0gRmxhZ3MuU3ltYm9sRmlsZUhpZGRlbjsKKyAJ CQkKK0BAIC0yNzI1LDYgKzI3MjcsMTEgQEAgbmFtZXNwYWNlIE1vbm8uQ1NoYXJwIHsKKyAJCQlm bGFncyB8PSBGbGFncy5Vc2VkOworIAkJfQorIAorKwkJcHVibGljIHZvaWQgU2V0SXNQb2ludGVy QnlSZWYgKCkKKysJCXsKKysJCQlmbGFncyB8PSBGbGFncy5Qb2ludGVyQnlSZWY7CisrCQl9Cisr CisgCQlwdWJsaWMgdm9pZCBTZXRIYXNBZGRyZXNzVGFrZW4gKCkKKyAJCXsKKyAJCQlmbGFncyB8 PSAoRmxhZ3MuQWRkcmVzc1Rha2VuIHwgRmxhZ3MuVXNlZCk7CitAQCAtNjU2MiwxOCArNjU2OSwy NiBAQCBuYW1lc3BhY2UgTW9uby5DU2hhcnAgeworIAorIAkJCQkvLyBUT0RPOiBTaG91bGQgdXNl IEJpbmFyeTo6QWRkCisgCQkJCXBpbm5lZF9zdHJpbmcuRW1pdCAoZWMpOworLQkJCQllYy5FbWl0 IChPcENvZGVzLkNvbnZfSSk7CisrCQkJCWVjLkVtaXQgKE9wQ29kZXMuQ29udl9VKTsKKyAKKyAJ CQkJdmFyIG0gPSBlYy5Nb2R1bGUuUHJlZGVmaW5lZE1lbWJlcnMuUnVudGltZUhlbHBlcnNPZmZz ZXRUb1N0cmluZ0RhdGEuUmVzb2x2ZSAobG9jKTsKKyAJCQkJaWYgKG0gPT0gbnVsbCkKKyAJCQkJ CXJldHVybjsKKyAKKysJCQkJdmFyIG51bGxfdmFsdWUgPSBlYy5EZWZpbmVMYWJlbCAoKTsKKysJ CQkJdmkuRW1pdEFzc2lnbiAoZWMpOworKwkJCQl2aS5FbWl0IChlYyk7CisrCQkJCWVjLkVtaXQg KE9wQ29kZXMuQnJmYWxzZV9TLCBudWxsX3ZhbHVlKTsKKysKKysJCQkJdmkuRW1pdCAoZWMpOwor IAkJCQlQcm9wZXJ0eUV4cHIgcGUgPSBuZXcgUHJvcGVydHlFeHByIChtLCBwaW5uZWRfc3RyaW5n LkxvY2F0aW9uKTsKKyAJCQkJLy9wZS5JbnN0YW5jZUV4cHJlc3Npb24gPSBwaW5uZWRfc3RyaW5n OworIAkJCQlwZS5SZXNvbHZlIChuZXcgUmVzb2x2ZUNvbnRleHQgKGVjLk1lbWJlckNvbnRleHQp KS5FbWl0IChlYyk7CisgCisgCQkJCWVjLkVtaXQgKE9wQ29kZXMuQWRkKTsKKyAJCQkJdmkuRW1p dEFzc2lnbiAoZWMpOworKworKwkJCQllYy5NYXJrTGFiZWwgKG51bGxfdmFsdWUpOworIAkJCX0K KyAKKyAJCQlwdWJsaWMgb3ZlcnJpZGUgdm9pZCBFbWl0RXhpdCAoRW1pdENvbnRleHQgZWMpCitA QCAtNjY2MCwzMSArNjY3NSw5NCBAQCBuYW1lc3BhY2UgTW9uby5DU2hhcnAgeworIAkJCQkJcmV0 dXJuIG5ldyBFeHByZXNzaW9uRW1pdHRlciAocmVzLCBsaSk7CisgCQkJCX0KKyAKKy0JCQkJYm9v bCBhbHJlYWR5X2ZpeGVkID0gdHJ1ZTsKKy0KKyAJCQkJLy8KKyAJCQkJLy8gQ2FzZSA0OiAmIG9i amVjdC4KKyAJCQkJLy8KKyAJCQkJVW5hcnkgdSA9IHJlcyBhcyBVbmFyeTsKKyAJCQkJaWYgKHUg IT0gbnVsbCkgeworKwkJCQkJYm9vbCBhbHJlYWR5X2ZpeGVkID0gdHJ1ZTsKKysKKyAJCQkJCWlm ICh1Lk9wZXIgPT0gVW5hcnkuT3BlcmF0b3IuQWRkcmVzc09mKSB7CisgCQkJCQkJSVZhcmlhYmxl UmVmZXJlbmNlIHZyID0gdS5FeHByIGFzIElWYXJpYWJsZVJlZmVyZW5jZTsKKyAJCQkJCQlpZiAo dnIgPT0gbnVsbCB8fCAhdnIuSXNGaXhlZCkgeworIAkJCQkJCQlhbHJlYWR5X2ZpeGVkID0gZmFs c2U7CisgCQkJCQkJfQorIAkJCQkJfQorLQkJCQl9IGVsc2UgaWYgKGluaXRpYWxpemVyIGlzIENh c3QpIHsKKysKKysJCQkJCWlmIChhbHJlYWR5X2ZpeGVkKSB7CisrCQkJCQkJYmMuUmVwb3J0LkVy cm9yICgyMTMsIGxvYywgIllvdSBjYW5ub3QgdXNlIHRoZSBmaXhlZCBzdGF0ZW1lbnQgdG8gdGFr ZSB0aGUgYWRkcmVzcyBvZiBhbiBhbHJlYWR5IGZpeGVkIGV4cHJlc3Npb24iKTsKKysJCQkJCQly ZXR1cm4gbnVsbDsKKysJCQkJCX0KKysKKysJCQkJCXJlcyA9IENvbnZlcnQuSW1wbGljaXRDb252 ZXJzaW9uUmVxdWlyZWQgKGJjLCByZXMsIGxpLlR5cGUsIGxvYyk7CisrCQkJCQlyZXR1cm4gbmV3 IEV4cHJlc3Npb25FbWl0dGVyIChyZXMsIGxpKTsKKysJCQkJfQorKworKwkJCQlpZiAoaW5pdGlh bGl6ZXIgaXMgQ2FzdCkgeworIAkJCQkJYmMuUmVwb3J0LkVycm9yICgyNTQsIGluaXRpYWxpemVy LkxvY2F0aW9uLCAiVGhlIHJpZ2h0IGhhbmQgc2lkZSBvZiBhIGZpeGVkIHN0YXRlbWVudCBhc3Np Z25tZW50IG1heSBub3QgYmUgYSBjYXN0IGV4cHJlc3Npb24iKTsKKyAJCQkJCXJldHVybiBudWxs OworIAkJCQl9CisgCistCQkJCWlmIChhbHJlYWR5X2ZpeGVkKSB7CistCQkJCQliYy5SZXBvcnQu RXJyb3IgKDIxMywgbG9jLCAiWW91IGNhbm5vdCB1c2UgdGhlIGZpeGVkIHN0YXRlbWVudCB0byB0 YWtlIHRoZSBhZGRyZXNzIG9mIGFuIGFscmVhZHkgZml4ZWQgZXhwcmVzc2lvbiIpOworKwkJCQkv LworKwkJCQkvLyBDYXNlIDU6IGJ5LXJlZiBHZXRQaW5uYWJsZVJlZmVyZW5jZSBtZXRob2Qgb24g dGhlIHJocyBleHByZXNzaW9uCisrCQkJCS8vCisrCQkJCXZhciBtZXRob2QgPSBHZXRQaW5uYWJs ZVJlZmVyZW5jZSAoYmMsIHJlcyk7CisrCQkJCWlmIChtZXRob2QgPT0gbnVsbCkgeworKwkJCQkJ YmMuUmVwb3J0LkVycm9yICg4Mzg1LCBpbml0aWFsaXplci5Mb2NhdGlvbiwgIlRoZSBnaXZlbiBl eHByZXNzaW9uIGNhbm5vdCBiZSB1c2VkIGluIGEgZml4ZWQgc3RhdGVtZW50Iik7CisrCQkJCQly ZXR1cm4gbnVsbDsKKysJCQkJfQorKworKwkJCQl2YXIgY29tcGlsZXIgPSBiYy5Nb2R1bGUuQ29t cGlsZXI7CisrCQkJCWlmIChjb21waWxlci5TZXR0aW5ncy5WZXJzaW9uIDwgTGFuZ3VhZ2VWZXJz aW9uLlZfN18zKSB7CisrCQkJCQliYy5SZXBvcnQuRmVhdHVyZUlzTm90QXZhaWxhYmxlIChjb21w aWxlciwgaW5pdGlhbGl6ZXIuTG9jYXRpb24sICJleHRlbnNpYmxlIGZpeGVkIHN0YXRlbWVudCIp OworKwkJCQl9CisrCisrCQkJCW1ldGhvZC5JbnN0YW5jZUV4cHJlc3Npb24gPSByZXM7CisrCQkJ CXJlcyA9IG5ldyBJbnZvY2F0aW9uLlByZWRlZmluZWQgKG1ldGhvZCwgbnVsbCkuUmVzb2x2ZUxW YWx1ZSAoYmMsIEVtcHR5RXhwcmVzc2lvbi5PdXRBY2Nlc3MpOworKwkJCQlpZiAocmVzID09IG51 bGwpCisrCQkJCQlyZXR1cm4gbnVsbDsKKysKKysJCQkJUmVmZXJlbmNlQ29udGFpbmVyIHJUeXBl ID0gKFJlZmVyZW5jZUNvbnRhaW5lciltZXRob2QuQmVzdENhbmRpZGF0ZVJldHVyblR5cGU7Cisr CQkJCVBvaW50ZXJDb250YWluZXIgbFR5cGUgPSBsaS5UeXBlIGFzIFBvaW50ZXJDb250YWluZXI7 CisrCQkJCWlmIChyVHlwZS5FbGVtZW50ICE9IGxUeXBlPy5FbGVtZW50KSB7CisrCQkJCQkvLyBD U0M6IFNob3VsZCBiZSBiZXR0ZXIgZXJyb3IgY29kZQorKwkJCQkJcmVzLkVycm9yX1ZhbHVlQ2Fu bm90QmVDb252ZXJ0ZWQgKGJjLCBsVHlwZSwgZmFsc2UpOworKwkJCQkJcmV0dXJuIG51bGw7Cisg CQkJCX0KKyAKKy0JCQkJcmVzID0gQ29udmVydC5JbXBsaWNpdENvbnZlcnNpb25SZXF1aXJlZCAo YmMsIHJlcywgbGkuVHlwZSwgbG9jKTsKKysJCQkJbGkuU2V0SXNQb2ludGVyQnlSZWYgKCk7Cisg CQkJCXJldHVybiBuZXcgRXhwcmVzc2lvbkVtaXR0ZXIgKHJlcywgbGkpOworIAkJCX0KKysKKysJ CQlNZXRob2RHcm91cEV4cHIgR2V0UGlubmFibGVSZWZlcmVuY2UgKEJsb2NrQ29udGV4dCBiYywg RXhwcmVzc2lvbiBleHByKQorKwkJCXsKKysJCQkJVHlwZVNwZWMgdHlwZSA9IGV4cHIuVHlwZTsK KysJCQkJdmFyIG1leHByID0gRXhwcmVzc2lvbi5NZW1iZXJMb29rdXAgKGJjLCBmYWxzZSwgdHlw ZSwKKysJCQkJCSJHZXRQaW5uYWJsZVJlZmVyZW5jZSIsIDAsIEV4cHJlc3Npb24uTWVtYmVyTG9v a3VwUmVzdHJpY3Rpb25zLkV4YWN0QXJpdHksIGxvYyk7CisrCisrCQkJCWlmIChtZXhwciA9PSBu dWxsKQorKwkJCQkJcmV0dXJuIG51bGw7CisrCisrCQkJCXZhciBtZyA9IG1leHByIGFzIE1ldGhv ZEdyb3VwRXhwcjsKKysJCQkJaWYgKG1nID09IG51bGwpCisrCQkJCQlyZXR1cm4gbnVsbDsKKysK KysJCQkJbWcuSW5zdGFuY2VFeHByZXNzaW9uID0gZXhwcjsKKysKKysJCQkJLy8gVE9ETzogaGFu ZGxlIGV4dGVuc2lvbiBtZXRob2RzCisrCQkJCUFyZ3VtZW50cyBhcmdzID0gbmV3IEFyZ3VtZW50 cyAoMCk7CisrCQkJCW1nID0gbWcuT3ZlcmxvYWRSZXNvbHZlIChiYywgcmVmIGFyZ3MsIG51bGws IE92ZXJsb2FkUmVzb2x2ZXIuUmVzdHJpY3Rpb25zLk5vbmUpOworKworKwkJCQlpZiAobWcgPT0g bnVsbCB8fCBtZy5CZXN0Q2FuZGlkYXRlLklzU3RhdGljIHx8ICFtZy5CZXN0Q2FuZGlkYXRlLklz UHVibGljIHx8IG1nLkJlc3RDYW5kaWRhdGVSZXR1cm5UeXBlLktpbmQgIT0gTWVtYmVyS2luZC5C eVJlZiB8fCAhbWcuQmVzdENhbmRpZGF0ZS5QYXJhbWV0ZXJzLklzRW1wdHkpIHsKKysJCQkJCWlm IChiYy5Nb2R1bGUuQ29tcGlsZXIuU2V0dGluZ3MuVmVyc2lvbiA+IExhbmd1YWdlVmVyc2lvbi5W XzdfMikgeworKwkJCQkJCWJjLlJlcG9ydC5XYXJuaW5nICgyODAsIDIsIGV4cHIuTG9jYXRpb24s ICJgezB9JyBoYXMgdGhlIHdyb25nIHNpZ25hdHVyZSB0byBiZSB1c2VkIGluIGV4dGVuc2libGUg Zml4ZWQgc3RhdGVtZW50IiwgbWcuR2V0U2lnbmF0dXJlRm9yRXJyb3IgKCkpOworKwkJCQkJfQor KworKwkJCQkJcmV0dXJuIG51bGw7CisrCQkJCX0KKysKKysJCQkJcmV0dXJuIG1nOworKwkJCX0K KyAJCX0KKyAKKyAKK2RpZmYgLS1naXQgYS9tY3MvbWNzL3R1cGxlcy5jcyBiL21jcy9tY3MvdHVw bGVzLmNzCitpbmRleCA5MDFlZmRjOTU0MS4uMGI1Njg1OTYxNWYgMTAwNjQ0CistLS0gYS9tY3Mv bWNzL3R1cGxlcy5jcworKysrIGIvbWNzL21jcy90dXBsZXMuY3MKK0BAIC0yNjcsNiArMjY3LDEx IEBAIG5hbWVzcGFjZSBNb25vLkNTaGFycAorIAkJCXRoaXMuTG9jYXRpb24gPSBleHByLkxvY2F0 aW9uOworIAkJfQorIAorKwkJcHVibGljIFR1cGxlTGl0ZXJhbEVsZW1lbnQgQ2xvbmUgKENsb25l Q29udGV4dCBjbG9uZWN0eCkKKysJCXsKKysJCQlyZXR1cm4gbmV3IFR1cGxlTGl0ZXJhbEVsZW1l bnQgKE5hbWUsIEV4cHIuQ2xvbmUgKGNsb25lY3R4KSwgTG9jYXRpb24pOworKwkJfQorKworIAkJ cHVibGljIHN0cmluZyBOYW1lIHsgZ2V0OyBwcml2YXRlIHNldDsgfQorIAkJcHVibGljIEV4cHJl c3Npb24gRXhwciB7IGdldDsgc2V0OyB9CisgCQlwdWJsaWMgTG9jYXRpb24gTG9jYXRpb24geyBn ZXQ7IHByaXZhdGUgc2V0OyB9CitAQCAtMjg4LDYgKzI5MywxNiBAQCBuYW1lc3BhY2UgTW9uby5D U2hhcnAKKyAJCQl9CisgCQl9CisgCisrCQlwcm90ZWN0ZWQgb3ZlcnJpZGUgdm9pZCBDbG9uZVRv IChDbG9uZUNvbnRleHQgY2xvbmVjdHgsIEV4cHJlc3Npb24gdCkKKysJCXsKKysJCQl2YXIgY2xv bmUgPSBuZXcgTGlzdDxUdXBsZUxpdGVyYWxFbGVtZW50PiAoZWxlbWVudHMuQ291bnQpOworKwkJ CWZvcmVhY2ggKHZhciB0ZSBpbiBlbGVtZW50cykKKysJCQkJY2xvbmUuQWRkICh0ZS5DbG9uZSAo Y2xvbmVjdHgpKTsKKysKKysJCQlUdXBsZUxpdGVyYWwgdGFyZ2V0ID0gKFR1cGxlTGl0ZXJhbCl0 OworKwkJCXRhcmdldC5lbGVtZW50cyA9IGNsb25lOworKwkJfQorKworIAkJcHVibGljIHN0YXRp YyBib29sIENvbnRhaW5zTm9UeXBlRWxlbWVudCAoVHlwZVNwZWMgdHlwZSkKKyAJCXsKKyAJCQl2 YXIgdGEgPSB0eXBlLlR5cGVBcmd1bWVudHM7CitAQCAtNDMyLDYgKzQ0Nyw3IEBAIG5hbWVzcGFj ZSBNb25vLkNTaGFycAorIAl7CisgCQlFeHByZXNzaW9uIHNvdXJjZTsKKyAJCUxpc3Q8RXhwcmVz c2lvbj4gdGFyZ2V0RXhwcnM7CisrCQlMaXN0PEV4cHJlc3Npb24+IHRlbXBFeHByczsKKyAJCUxp c3Q8QmxvY2tWYXJpYWJsZT4gdmFyaWFibGVzOworIAkJRXhwcmVzc2lvbiBpbnN0YW5jZTsKKyAK K0BAIC00NDAsNiArNDU2LDggQEAgbmFtZXNwYWNlIE1vbm8uQ1NoYXJwCisgCQkJdGhpcy5zb3Vy Y2UgPSBzb3VyY2U7CisgCQkJdGhpcy50YXJnZXRFeHBycyA9IHRhcmdldEV4cHJzOworIAkJCXRo aXMubG9jID0gbG9jOworKworKwkJCXRlbXBFeHBycyA9IG5ldyBMaXN0PEV4cHJlc3Npb24+ICgp OworIAkJfQorIAorIAkJcHVibGljIFR1cGxlRGVjb25zdHJ1Y3QgKExpc3Q8QmxvY2tWYXJpYWJs ZT4gdmFyaWFibGVzLCBFeHByZXNzaW9uIHNvdXJjZSwgTG9jYXRpb24gbG9jKQorQEAgLTQ0Nyw2 ICs0NjUsOCBAQCBuYW1lc3BhY2UgTW9uby5DU2hhcnAKKyAJCQl0aGlzLnNvdXJjZSA9IHNvdXJj ZTsKKyAJCQl0aGlzLnZhcmlhYmxlcyA9IHZhcmlhYmxlczsKKyAJCQl0aGlzLmxvYyA9IGxvYzsK KysKKysJCQl0ZW1wRXhwcnMgPSBuZXcgTGlzdDxFeHByZXNzaW9uPiAoKTsKKyAJCX0KKyAKKyAJ CXB1YmxpYyBvdmVycmlkZSBFeHByZXNzaW9uIENyZWF0ZUV4cHJlc3Npb25UcmVlIChSZXNvbHZl Q29udGV4dCBlYykKK0BAIC00OTIsNiArNTEyLDE1IEBAIG5hbWVzcGFjZSBNb25vLkNTaGFycAor IAkJCQkJaW5zdGFuY2UgPSBleHByX3ZhcmlhYmxlLkNyZWF0ZVJlZmVyZW5jZUV4cHJlc3Npb24g KHJjLCBsb2MpOworIAkJCQl9CisgCisrCQkJCXZhciBlbGVtZW50X3NyY3MgPSBuZXcgTGlzdDxF eHByZXNzaW9uPiAoKTsKKysJCQkJdmFyIHNyY19uYW1lcyA9IG5ldyBMaXN0PHN0cmluZz4gKCk7 CisrCQkJCWZvciAoaW50IGkgPSAwOyBpIDwgdGFyZ2V0X2NvdW50OyArK2kpIHsKKysJCQkJCXZh ciBlbGVtZW50X3NyYyA9IHR1cGxlTGl0ZXJhbCA9PSBudWxsID8gbmV3IE1lbWJlckFjY2VzcyAo aW5zdGFuY2UsIE5hbWVkVHVwbGVTcGVjLkdldEVsZW1lbnRQcm9wZXJ0eU5hbWUgKGkpKSA6IHR1 cGxlTGl0ZXJhbC5FbGVtZW50cyBbaV0uRXhwcjsKKysJCQkJCWVsZW1lbnRfc3Jjcy5BZGQgKGVs ZW1lbnRfc3JjKTsKKysJCQkJCWlmIChlbGVtZW50X3NyYyBpcyBWYXJpYWJsZVJlZmVyZW5jZSkK KysJCQkJCQlzcmNfbmFtZXMuQWRkICgoZWxlbWVudF9zcmMgYXMgVmFyaWFibGVSZWZlcmVuY2Up Py5OYW1lKTsKKysJCQkJfQorKworIAkJCQlmb3IgKGludCBpID0gMDsgaSA8IHRhcmdldF9jb3Vu dDsgKytpKSB7CisgCQkJCQl2YXIgdGxlID0gc3JjX3R5cGUuVHlwZUFyZ3VtZW50cyBbaV07Cisg CitAQCAtNTIyLDggKzU1MSwxNyBAQCBuYW1lc3BhY2UgTW9uby5DU2hhcnAKKyAJCQkJCQl2YXJp YWJsZS5QcmVwYXJlQXNzaWdubWVudEFuYWx5c2lzICgoQmxvY2tDb250ZXh0KXJjKTsKKyAJCQkJ CX0KKyAKKy0JCQkJCXZhciBlbGVtZW50X3NyYyA9IHR1cGxlTGl0ZXJhbCA9PSBudWxsID8gbmV3 IE1lbWJlckFjY2VzcyAoaW5zdGFuY2UsIE5hbWVkVHVwbGVTcGVjLkdldEVsZW1lbnRQcm9wZXJ0 eU5hbWUgKGkpKSA6IHR1cGxlTGl0ZXJhbC5FbGVtZW50cyBbaV0uRXhwcjsKKy0JCQkJCXRhcmdl dEV4cHJzIFtpXSA9IG5ldyBTaW1wbGVBc3NpZ24gKHRhcmdldEV4cHJzIFtpXSwgZWxlbWVudF9z cmMpLlJlc29sdmUgKHJjKTsKKysJCQkJCXZhciBlbGVtZW50X3RhcmdldCA9ICh0YXJnZXRFeHBy cyBbaV0gYXMgU2ltcGxlTmFtZSk/Lkxvb2t1cE5hbWVFeHByZXNzaW9uIChyYywgTWVtYmVyTG9v a3VwUmVzdHJpY3Rpb25zLk5vbmUpOworKworKwkJCQkJaWYgKGVsZW1lbnRfdGFyZ2V0ICE9IG51 bGwgJiYgc3JjX25hbWVzLkNvbnRhaW5zICgoZWxlbWVudF90YXJnZXQgYXMgVmFyaWFibGVSZWZl cmVuY2UpPy5OYW1lKSkgeworKwkJCQkJCXZhciB0ZW1wVHlwZSA9IGVsZW1lbnRfdGFyZ2V0LlJl c29sdmUgKHJjKS5UeXBlOworKworKwkJCQkJCXZhciB0ZW1wID0gbmV3IExvY2FsVGVtcG9yYXJ5 ICh0ZW1wVHlwZSk7CisrCQkJCQkJdGVtcEV4cHJzLkFkZCAobmV3IFNpbXBsZUFzc2lnbiAodGVt cCwgZWxlbWVudF9zcmNzIFtpXSkuUmVzb2x2ZSAocmMpKTsKKysJCQkJCQl0YXJnZXRFeHBycyBb aV0gPSBuZXcgU2ltcGxlQXNzaWduICh0YXJnZXRFeHBycyBbaV0sIHRlbXApLlJlc29sdmUgKHJj KTsKKysJCQkJCX0gZWxzZSB7CisrCQkJCQkJdGFyZ2V0RXhwcnMgW2ldID0gbmV3IFNpbXBsZUFz c2lnbiAodGFyZ2V0RXhwcnMgW2ldLCBlbGVtZW50X3NyY3MgW2ldKS5SZXNvbHZlIChyYyk7Cisr CQkJCQl9CisgCQkJCX0KKyAKKyAJCQkJZWNsYXNzID0gRXhwckNsYXNzLlZhbHVlOworQEAgLTU1 Nyw5ICs1OTUsMjQgQEAgbmFtZXNwYWNlIE1vbm8uQ1NoYXJwCisgCQkJaWYgKGluc3RhbmNlICE9 IG51bGwpCisgCQkJCSgoRXhwcmVzc2lvblN0YXRlbWVudClzb3VyY2UpLkVtaXRTdGF0ZW1lbnQg KGVjKTsKKyAKKy0JCQlmb3JlYWNoIChFeHByZXNzaW9uU3RhdGVtZW50IGV4cHIgaW4gdGFyZ2V0 RXhwcnMpCisrCQkJZm9yZWFjaCAoRXhwcmVzc2lvblN0YXRlbWVudCBleHByIGluIHRlbXBFeHBy cykgeworKwkJCQl2YXIgdGVtcCA9IChleHByIGFzIEFzc2lnbik/LlRhcmdldCBhcyBMb2NhbFRl bXBvcmFyeTsKKysJCQkJaWYgKHRlbXAgPT0gbnVsbCkKKysJCQkJCWNvbnRpbnVlOworKworKwkJ CQl0ZW1wLkFkZHJlc3NPZiAoZWMsIEFkZHJlc3NPcC5Mb2FkU3RvcmUpOworKwkJCQllYy5FbWl0 IChPcENvZGVzLkluaXRvYmosIHRlbXAuVHlwZSk7CisrCQkJCWV4cHIuRW1pdCAoZWMpOworKwkJ CX0KKysKKysJCQlmb3JlYWNoIChFeHByZXNzaW9uU3RhdGVtZW50IGV4cHIgaW4gdGFyZ2V0RXhw cnMpIHsKKyAJCQkJZXhwci5FbWl0IChlYyk7CisgCisrCQkJCXZhciB0ZW1wID0gKGV4cHIgYXMg QXNzaWduKT8uU291cmNlIGFzIExvY2FsVGVtcG9yYXJ5OworKwkJCQlpZiAodGVtcCAhPSBudWxs KQorKwkJCQkJdGVtcC5SZWxlYXNlIChlYyk7CisrCQkJfQorKworIAkJCXZhciBjdG9yID0gTWVt YmVyQ2FjaGUuRmluZE1lbWJlciAodHlwZSwgTWVtYmVyRmlsdGVyLkNvbnN0cnVjdG9yIChudWxs KSwgQmluZGluZ1Jlc3RyaWN0aW9uLkRlY2xhcmVkT25seSB8IEJpbmRpbmdSZXN0cmljdGlvbi5J bnN0YW5jZU9ubHkpIGFzIE1ldGhvZFNwZWM7CisgCQkJZWMuRW1pdCAoT3BDb2Rlcy5OZXdvYmos IGN0b3IpOworIAkJfQorQEAgLTU3NCw5ICs2MjcsMjQgQEAgbmFtZXNwYWNlIE1vbm8uQ1NoYXJw CisgCQkJCisgCQkJaWYgKGluc3RhbmNlICE9IG51bGwpCisgCQkJCSgoRXhwcmVzc2lvblN0YXRl bWVudCkgc291cmNlKS5FbWl0U3RhdGVtZW50IChlYyk7CistCQkJCistCQkJZm9yZWFjaCAoRXhw cmVzc2lvblN0YXRlbWVudCBleHByIGluIHRhcmdldEV4cHJzKQorKworKwkJCWZvcmVhY2ggKEV4 cHJlc3Npb25TdGF0ZW1lbnQgZXhwciBpbiB0ZW1wRXhwcnMpIHsKKysJCQkJdmFyIHRlbXAgPSAo ZXhwciBhcyBBc3NpZ24pPy5UYXJnZXQgYXMgTG9jYWxUZW1wb3Jhcnk7CisrCQkJCWlmICh0ZW1w ID09IG51bGwpCisrCQkJCQljb250aW51ZTsKKysKKysJCQkJdGVtcC5BZGRyZXNzT2YgKGVjLCBB ZGRyZXNzT3AuTG9hZFN0b3JlKTsKKysJCQkJZWMuRW1pdCAoT3BDb2Rlcy5Jbml0b2JqLCB0ZW1w LlR5cGUpOworKwkJCQlleHByLkVtaXRTdGF0ZW1lbnQgKGVjKTsKKysJCQl9CisrCisrCQkJZm9y ZWFjaCAoRXhwcmVzc2lvblN0YXRlbWVudCBleHByIGluIHRhcmdldEV4cHJzKSB7CisgCQkJCWV4 cHIuRW1pdFN0YXRlbWVudCAoZWMpOworKworKwkJCQl2YXIgdGVtcCA9IChleHByIGFzIEFzc2ln bik/LlNvdXJjZSBhcyBMb2NhbFRlbXBvcmFyeTsKKysJCQkJaWYgKHRlbXAgIT0gbnVsbCkKKysJ CQkJCXRlbXAuUmVsZWFzZSAoZWMpOworKwkJCX0KKyAJCX0KKyAKKyAJCXB1YmxpYyB2b2lkIEVt aXQgKEVtaXRDb250ZXh0IGVjLCBib29sIGxlYXZlX2NvcHkpCitAQCAtNTk0LDYgKzY2Miw3IEBA IG5hbWVzcGFjZSBNb25vLkNTaGFycAorIAorIAkJcHVibGljIG92ZXJyaWRlIHZvaWQgRmxvd0Fu YWx5c2lzIChGbG93QW5hbHlzaXNDb250ZXh0IGZjKQorIAkJeworKwkJCXNvdXJjZS5GbG93QW5h bHlzaXMgKGZjKTsKKyAJCQlmb3JlYWNoICh2YXIgZXhwciBpbiB0YXJnZXRFeHBycykKKyAJCQkJ ZXhwci5GbG93QW5hbHlzaXMgKGZjKTsKKyAJCX0KK2RpZmYgLS1naXQgYS9tY3MvbnVuaXQyNC9D bGllbnRVdGlsaXRpZXMvdXRpbC9Bc3NlbWJseUluZm8uY3MgYi9tY3MvbnVuaXQyNC9DbGllbnRV dGlsaXRpZXMvdXRpbC9Bc3NlbWJseUluZm8uY3MKK2luZGV4IDkxOWNhMDdhY2UzLi42NDg5YzFi MmE1OCAxMDA2NDQKKy0tLSBhL21jcy9udW5pdDI0L0NsaWVudFV0aWxpdGllcy91dGlsL0Fzc2Vt Ymx5SW5mby5jcworKysrIGIvbWNzL251bml0MjQvQ2xpZW50VXRpbGl0aWVzL3V0aWwvQXNzZW1i bHlJbmZvLmNzCitAQCAtNSw3ICs1LDMgQEAKKyAvLyAqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorIA0KKyB1c2luZyBTeXN0 ZW0uUmVmbGVjdGlvbjsNCistDQorLVthc3NlbWJseTogQXNzZW1ibHlEZWxheVNpZ24oZmFsc2Up XQ0KKy1bYXNzZW1ibHk6IEFzc2VtYmx5S2V5RmlsZSgiLi4vLi4vbnVuaXQuc25rIildDQorLVth c3NlbWJseTogQXNzZW1ibHlLZXlOYW1lKCIiKV0NCitkaWZmIC0tZ2l0IGEvbWNzL251bml0MjQv Q29uc29sZVJ1bm5lci9udW5pdC1jb25zb2xlL0Fzc2VtYmx5SW5mby5jcyBiL21jcy9udW5pdDI0 L0NvbnNvbGVSdW5uZXIvbnVuaXQtY29uc29sZS9Bc3NlbWJseUluZm8uY3MKK2luZGV4IDkxOWNh MDdhY2UzLi42NDg5YzFiMmE1OCAxMDA2NDQKKy0tLSBhL21jcy9udW5pdDI0L0NvbnNvbGVSdW5u ZXIvbnVuaXQtY29uc29sZS9Bc3NlbWJseUluZm8uY3MKKysrKyBiL21jcy9udW5pdDI0L0NvbnNv bGVSdW5uZXIvbnVuaXQtY29uc29sZS9Bc3NlbWJseUluZm8uY3MKK0BAIC01LDcgKzUsMyBAQAor IC8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioNCisgDQorIHVzaW5nIFN5c3RlbS5SZWZsZWN0aW9uOw0KKy0NCistW2Fzc2Vt Ymx5OiBBc3NlbWJseURlbGF5U2lnbihmYWxzZSldDQorLVthc3NlbWJseTogQXNzZW1ibHlLZXlG aWxlKCIuLi8uLi9udW5pdC5zbmsiKV0NCistW2Fzc2VtYmx5OiBBc3NlbWJseUtleU5hbWUoIiIp XQ0KK2RpZmYgLS1naXQgYS9tY3MvbnVuaXQyNC9OVW5pdENvcmUvY29yZS9Bc3NlbWJseUluZm8u Y3MgYi9tY3MvbnVuaXQyNC9OVW5pdENvcmUvY29yZS9Bc3NlbWJseUluZm8uY3MKK2luZGV4IDc0 NzAzMmM3ZTYzLi4yZjY2ZDgwMjIyYyAxMDA2NDQKKy0tLSBhL21jcy9udW5pdDI0L05Vbml0Q29y ZS9jb3JlL0Fzc2VtYmx5SW5mby5jcworKysrIGIvbWNzL251bml0MjQvTlVuaXRDb3JlL2NvcmUv QXNzZW1ibHlJbmZvLmNzCitAQCAtNyw3ICs3LDMgQEAgdXNpbmcgU3lzdGVtOworIHVzaW5nIFN5 c3RlbS5SZWZsZWN0aW9uOw0KKyANCisgW2Fzc2VtYmx5OiBDTFNDb21wbGlhbnQodHJ1ZSldDQor LQ0KKy1bYXNzZW1ibHk6IEFzc2VtYmx5RGVsYXlTaWduKGZhbHNlKV0NCistW2Fzc2VtYmx5OiBB c3NlbWJseUtleUZpbGUoIi4uLy4uL251bml0LnNuayIpXQ0KKy1bYXNzZW1ibHk6IEFzc2VtYmx5 S2V5TmFtZSgiIildDQorZGlmZiAtLWdpdCBhL21jcy9udW5pdDI0L05Vbml0Q29yZS9pbnRlcmZh Y2VzL0Fzc2VtYmx5SW5mby5jcyBiL21jcy9udW5pdDI0L05Vbml0Q29yZS9pbnRlcmZhY2VzL0Fz c2VtYmx5SW5mby5jcworaW5kZXggZmE4NjczMmIzZDMuLmVmZWFlY2YxOTg2IDEwMDY0NAorLS0t IGEvbWNzL251bml0MjQvTlVuaXRDb3JlL2ludGVyZmFjZXMvQXNzZW1ibHlJbmZvLmNzCisrKysg Yi9tY3MvbnVuaXQyNC9OVW5pdENvcmUvaW50ZXJmYWNlcy9Bc3NlbWJseUluZm8uY3MKK0BAIC04 LDcgKzgsMyBAQCB1c2luZyBTeXN0ZW07CisgdXNpbmcgU3lzdGVtLlJlZmxlY3Rpb247DQorIA0K KyBbYXNzZW1ibHk6IENMU0NvbXBsaWFudCh0cnVlKV0NCistDQorLVthc3NlbWJseTogQXNzZW1i bHlEZWxheVNpZ24oZmFsc2UpXQ0KKy1bYXNzZW1ibHk6IEFzc2VtYmx5S2V5RmlsZSgiLi4vLi4v bnVuaXQuc25rIildDQorLVthc3NlbWJseTogQXNzZW1ibHlLZXlOYW1lKCIiKV0NCitkaWZmIC0t Z2l0IGEvbWNzL251bml0MjQvTlVuaXRFeHRlbnNpb25zL2NvcmUvQXNzZW1ibHlJbmZvLmNzIGIv bWNzL251bml0MjQvTlVuaXRFeHRlbnNpb25zL2NvcmUvQXNzZW1ibHlJbmZvLmNzCitpbmRleCBm YTg2NzMyYjNkMy4uZWZlYWVjZjE5ODYgMTAwNjQ0CistLS0gYS9tY3MvbnVuaXQyNC9OVW5pdEV4 dGVuc2lvbnMvY29yZS9Bc3NlbWJseUluZm8uY3MKKysrKyBiL21jcy9udW5pdDI0L05Vbml0RXh0 ZW5zaW9ucy9jb3JlL0Fzc2VtYmx5SW5mby5jcworQEAgLTgsNyArOCwzIEBAIHVzaW5nIFN5c3Rl bTsKKyB1c2luZyBTeXN0ZW0uUmVmbGVjdGlvbjsNCisgDQorIFthc3NlbWJseTogQ0xTQ29tcGxp YW50KHRydWUpXQ0KKy0NCistW2Fzc2VtYmx5OiBBc3NlbWJseURlbGF5U2lnbihmYWxzZSldDQor LVthc3NlbWJseTogQXNzZW1ibHlLZXlGaWxlKCIuLi8uLi9udW5pdC5zbmsiKV0NCistW2Fzc2Vt Ymx5OiBBc3NlbWJseUtleU5hbWUoIiIpXQ0KK2RpZmYgLS1naXQgYS9tY3MvbnVuaXQyNC9OVW5p dEV4dGVuc2lvbnMvZnJhbWV3b3JrL0Fzc2VtYmx5SW5mby5jcyBiL21jcy9udW5pdDI0L05Vbml0 RXh0ZW5zaW9ucy9mcmFtZXdvcmsvQXNzZW1ibHlJbmZvLmNzCitpbmRleCBhOTU1M2Y2OTFjZC4u MmI0YjViZmIzNDAgMTAwNjQ0CistLS0gYS9tY3MvbnVuaXQyNC9OVW5pdEV4dGVuc2lvbnMvZnJh bWV3b3JrL0Fzc2VtYmx5SW5mby5jcworKysrIGIvbWNzL251bml0MjQvTlVuaXRFeHRlbnNpb25z L2ZyYW1ld29yay9Bc3NlbWJseUluZm8uY3MKK0BAIC04LDcgKzgsMyBAQCB1c2luZyBTeXN0ZW07 CisgdXNpbmcgU3lzdGVtLlJlZmxlY3Rpb247DQorIA0KKyBbYXNzZW1ibHk6IENMU0NvbXBsaWFu dCh0cnVlKV0NCistDQorLVthc3NlbWJseTogQXNzZW1ibHlEZWxheVNpZ24oZmFsc2UpXQ0KKy1b YXNzZW1ibHk6IEFzc2VtYmx5S2V5RmlsZSgiLi4vLi4vbnVuaXQuc25rIildDQorLVthc3NlbWJs eTogQXNzZW1ibHlLZXlOYW1lKCIiKV0NCitkaWZmIC0tZ2l0IGEvbWNzL251bml0MjQvTlVuaXRG cmFtZXdvcmsvZnJhbWV3b3JrL0Fzc2VtYmx5SW5mby5jcyBiL21jcy9udW5pdDI0L05Vbml0RnJh bWV3b3JrL2ZyYW1ld29yay9Bc3NlbWJseUluZm8uY3MKK2luZGV4IGZhODY3MzJiM2QzLi5lZmVh ZWNmMTk4NiAxMDA2NDQKKy0tLSBhL21jcy9udW5pdDI0L05Vbml0RnJhbWV3b3JrL2ZyYW1ld29y ay9Bc3NlbWJseUluZm8uY3MKKysrKyBiL21jcy9udW5pdDI0L05Vbml0RnJhbWV3b3JrL2ZyYW1l d29yay9Bc3NlbWJseUluZm8uY3MKK0BAIC04LDcgKzgsMyBAQCB1c2luZyBTeXN0ZW07CisgdXNp bmcgU3lzdGVtLlJlZmxlY3Rpb247DQorIA0KKyBbYXNzZW1ibHk6IENMU0NvbXBsaWFudCh0cnVl KV0NCistDQorLVthc3NlbWJseTogQXNzZW1ibHlEZWxheVNpZ24oZmFsc2UpXQ0KKy1bYXNzZW1i bHk6IEFzc2VtYmx5S2V5RmlsZSgiLi4vLi4vbnVuaXQuc25rIildDQorLVthc3NlbWJseTogQXNz ZW1ibHlLZXlOYW1lKCIiKV0NCitkaWZmIC0tZ2l0IGEvbWNzL251bml0MjQvTlVuaXRNb2Nrcy9t b2Nrcy9Bc3NlbWJseUluZm8uY3MgYi9tY3MvbnVuaXQyNC9OVW5pdE1vY2tzL21vY2tzL0Fzc2Vt Ymx5SW5mby5jcworaW5kZXggNTk5YjA0Y2U0NTMuLmY4N2FlNjAyODEwIDEwMDY0NAorLS0tIGEv bWNzL251bml0MjQvTlVuaXRNb2Nrcy9tb2Nrcy9Bc3NlbWJseUluZm8uY3MKKysrKyBiL21jcy9u dW5pdDI0L05Vbml0TW9ja3MvbW9ja3MvQXNzZW1ibHlJbmZvLmNzCitAQCAtNiw3ICs2LDMgQEAK KyANCisgdXNpbmcgU3lzdGVtOw0KKyB1c2luZyBTeXN0ZW0uUmVmbGVjdGlvbjsNCistDQorLVth c3NlbWJseTogQXNzZW1ibHlEZWxheVNpZ24oZmFsc2UpXQ0KKy1bYXNzZW1ibHk6IEFzc2VtYmx5 S2V5RmlsZSgiLi4vLi4vbnVuaXQuc25rIildDQorLVthc3NlbWJseTogQXNzZW1ibHlLZXlOYW1l KCIiKV0NCitkaWZmIC0tZ2l0IGEvbWNzL3Rlc3RzL2R0ZXN0LTA2Ni5jcyBiL21jcy90ZXN0cy9k dGVzdC0wNjYuY3MKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwMDAwMC4uODkz ZmI0MGRmZmEKKy0tLSAvZGV2L251bGwKKysrKyBiL21jcy90ZXN0cy9kdGVzdC0wNjYuY3MKK0BA IC0wLDAgKzEsMTMgQEAKKytjbGFzcyBDCisreworKwlzdGF0aWMgdm9pZCBNYWluKCkKKysJewor KwkJb2JqZWN0IG8gPSAxOworKwkJZHluYW1pYyBkID0gMTsKKysJCQorKwkJdmFyIGEgPSBuZXdb XSB7CisrCQkJbmV3IHsgWCA9IG8gfSwKKysJCQluZXcgeyBYID0gZCB9CisrCQl9OworKwl9Cisr fQorZGlmZiAtLWdpdCBhL21jcy90ZXN0cy9ndGVzdC02NDcuY3MgYi9tY3MvdGVzdHMvZ3Rlc3Qt NjQ3LmNzCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMDAwMDAuLjRhYWU2NDFm ODVmCistLS0gL2Rldi9udWxsCisrKysgYi9tY3MvdGVzdHMvZ3Rlc3QtNjQ3LmNzCitAQCAtMCww ICsxLDM0IEBACisrdXNpbmcgU3lzdGVtOworKworK3B1YmxpYyBjbGFzcyBQcm9ncmFtCisrewor KwlwdWJsaWMgc3RhdGljIGludCBNYWluICgpCisrCXsKKysJCWludCBCID0gZGVmYXVsdCAoTXlT dHJ1Y3Q/KTsgCisrCQlpZiAoTXlTdHJ1Y3QuY291bnRlciAhPSAxKQorKwkJCXJldHVybiAxOwor KworKwkJc3dpdGNoIChkZWZhdWx0IChNeVN0cnVjdD8pKSB7CisrCQkJY2FzZSAwOgorKwkJCQli cmVhazsKKysJCQlkZWZhdWx0OgorKwkJCQlyZXR1cm4gMjsKKysJCX0KKysKKysJCWlmIChNeVN0 cnVjdC5jb3VudGVyICE9IDIpCisrCQkJcmV0dXJuIDQ7CisrCisrCQlyZXR1cm4gMDsKKysJfQor KworKwlwdWJsaWMgc3RydWN0IE15U3RydWN0CisrCXsKKysJCXB1YmxpYyBzdGF0aWMgaW50IGNv dW50ZXI7CisrCisrCQlwdWJsaWMgc3RhdGljIGltcGxpY2l0IG9wZXJhdG9yIGludCAoTXlTdHJ1 Y3Q/IHMpCisrCQl7CisrCQkJKytjb3VudGVyOworKwkJCXJldHVybiAwOworKwkJfQorKwl9Cisr fQorXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCitkaWZmIC0tZ2l0IGEvbWNzL3Rlc3RzL3Rl c3QtOTI4LmNzIGIvbWNzL3Rlc3RzL3Rlc3QtOTI4LmNzCitpbmRleCA5MDE4MDEzNzk1Ny4uMjkw ZWU0ZDFmYjMgMTAwNjQ0CistLS0gYS9tY3MvdGVzdHMvdGVzdC05MjguY3MKKysrKyBiL21jcy90 ZXN0cy90ZXN0LTkyOC5jcworQEAgLTE1LDYgKzE1LDI0IEBAIHVuc2FmZSBjbGFzcyBQcm9ncmFt CisgCQl9CisgCX0KKyAKKysJcHVibGljIHN0YXRpYyBib29sIFN0cmluZ051bGwgKHN0cmluZyBz KQorKwl7CisrCQl1bnNhZmUgeworKwkJCWZpeGVkIChjaGFyICphID0gcykgeworKwkJCQlyZXR1 cm4gYSA9PSBudWxsOworKwkJCX0KKysJCX0KKysJfQorKworKwlwdWJsaWMgc3RhdGljIGJvb2wg QXJyYXlOdWxsIChpbnRbXSBhKQorKwl7CisrCQl1bnNhZmUgeworKwkJCWZpeGVkIChpbnQgKmUg PSBhKSB7CisrCQkJCXJldHVybiBlID09IG51bGw7CisrCQkJfQorKwkJfQorKwl9CisrCisgCXB1 YmxpYyBzdGF0aWMgaW50IE1haW4gKCkKKyAJeworIAkJVGVzdCAoKTsKK0BAIC0yNCw2ICs0Miwx MiBAQCB1bnNhZmUgY2xhc3MgUHJvZ3JhbQorIAkJaWYgKGx2LklzUGlubmVkKQorIAkJCXJldHVy biAxOworIAorKwkJaWYgKCFTdHJpbmdOdWxsIChudWxsKSkKKysJCQlyZXR1cm4gMTsKKysKKysJ CWlmICghQXJyYXlOdWxsIChudWxsKSkKKysJCQlyZXR1cm4gMjsKKysKKyAJCXJldHVybiAwOwor IAl9CisgfQorZGlmZiAtLWdpdCBhL21jcy90ZXN0cy90ZXN0LTk0OC5jcyBiL21jcy90ZXN0cy90 ZXN0LTk0OC5jcworaW5kZXggMzRiM2FiOWEwYzQuLjU2M2UzN2RjN2Q1IDEwMDY0NAorLS0tIGEv bWNzL3Rlc3RzL3Rlc3QtOTQ4LmNzCisrKysgYi9tY3MvdGVzdHMvdGVzdC05NDguY3MKK0BAIC0x LDQgKzEsNCBAQAorLS8vIENvbXBpbGVyIG9wdGlvbnM6IC1sYW5ndmVyc2lvbjo3LjIgLXVuc2Fm ZQorKy8vIENvbXBpbGVyIG9wdGlvbnM6IC1sYW5ndmVyc2lvbjo3LjIgL3Vuc2FmZQorIAorIHVz aW5nIFN5c3RlbTsKKyAKK0BAIC03LDEwICs3LDE2IEBAIGNsYXNzIFgKKyAJcHVibGljIHN0YXRp YyB2b2lkIE1haW4gKCkKKyAJeworIAkJU3BhbjxpbnQ+IHN0YWNrU3BhbiA9IHN0YWNrYWxsb2Mg aW50WzEwMF07CisrCisrCQlib29sIGIgPSBmYWxzZTsKKysKKysJCXZhciByMSA9ICFiID8gc3Rh Y2thbGxvYyBjaGFyWzFdIDogdGhyb3cgbnVsbDsKKysJCXZhciByMiA9IGIgPyB0aHJvdyBudWxs IDogc3RhY2thbGxvYyBjaGFyWzFdOworKwkJdmFyIHIzID0gYiA/IHN0YWNrYWxsb2MgY2hhclsx XSA6IHN0YWNrYWxsb2MgY2hhclsyXTsKKyAJfQorIAorKwkvLyBEaXNhYmxlcyB2ZXJpZmllcgor IAl1bnNhZmUgdm9pZCBGb28gKCkKKyAJeworLQorIAl9CistfQorXCBObyBuZXdsaW5lIGF0IGVu ZCBvZiBmaWxlCisrfQorZGlmZiAtLWdpdCBhL21jcy90ZXN0cy90ZXN0LTk1MC5jcyBiL21jcy90 ZXN0cy90ZXN0LTk1MC5jcworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAwMDAw Li5mZWY3NjRjODVjYworLS0tIC9kZXYvbnVsbAorKysrIGIvbWNzL3Rlc3RzL3Rlc3QtOTUwLmNz CitAQCAtMCwwICsxLDEyIEBACisrdXNpbmcgU3lzdGVtOworKworK3B1YmxpYyBjbGFzcyBCCisr eworKwlwdWJsaWMgc3RhdGljIHZvaWQgTWFpbiAoKQorKwl7CisrCQlpbnQgYSA9IDFfMF8zOwor KwkJZG91YmxlIGIgPSAwX18wZSsxXzE7CisrCQlpbnQgYyA9IDBiMF9fMV8wOworKwkJaW50IGQg PSAweDBfX0ZfMDsKKysJfQorK30KK1wgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorZGlmZiAt LWdpdCBhL21jcy90ZXN0cy90ZXN0LTk2MC5jcyBiL21jcy90ZXN0cy90ZXN0LTk2MC5jcworbmV3 IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAwMDAwLi5hYzJhMWNhNzQzNQorLS0tIC9k ZXYvbnVsbAorKysrIGIvbWNzL3Rlc3RzL3Rlc3QtOTYwLmNzCitAQCAtMCwwICsxLDIwIEBACisr Ly8gQ29tcGlsZXIgb3B0aW9uczogLWxhbmd2ZXJzaW9uOjcuMgorKworK3B1YmxpYyBjbGFzcyBC CisreworKwlwcml2YXRlIHByb3RlY3RlZCBlbnVtIEUKKysJeworKwl9CisrCisrCXB1YmxpYyBp bnQgSW5kZXggeyBnZXQ7IHByb3RlY3RlZCBwcml2YXRlIHNldDsgfQorKworKwlpbnRlcm5hbCBz dHJpbmcgUzEgeyBnZXQ7IHByaXZhdGUgcHJvdGVjdGVkIHNldDsgfQorKworKwlwcm90ZWN0ZWQg c3RyaW5nIFMyIHsgZ2V0OyBwcml2YXRlIHByb3RlY3RlZCBzZXQ7IH0KKysKKysJcHJpdmF0ZSBw cm90ZWN0ZWQgaW50IGZpZWxkOworKworKwlwdWJsaWMgc3RhdGljIHZvaWQgTWFpbiAoKQorKwl7 CisrCX0KKyt9CitcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKK2RpZmYgLS1naXQgYS9tY3Mv dGVzdHMvdGVzdC05NjEuY3MgYi9tY3MvdGVzdHMvdGVzdC05NjEuY3MKK25ldyBmaWxlIG1vZGUg MTAwNjQ0CitpbmRleCAwMDAwMDAwMDAwMC4uZWZlMTk2NzM4NzUKKy0tLSAvZGV2L251bGwKKysr KyBiL21jcy90ZXN0cy90ZXN0LTk2MS5jcworQEAgLTAsMCArMSwzNCBAQAorKy8vIENvbXBpbGVy IG9wdGlvbnM6IC1sYW5ndmVyc2lvbjpsYXRlc3QKKysKKyt1c2luZyBTeXN0ZW07CisrCisrcHVi bGljIHN0YXRpYyBjbGFzcyBCIHsKKysJcHVibGljIHN0YXRpYyB2b2lkIE1haW4gKCkKKysJewor KwkJaW50IGxvID0gMTsKKysJCUJhciAoaW4gbG8pOwkJCisrCX0KKysKKysJcHVibGljIHN0YXRp YyB2b2lkIEJhciAoaW4gaW50IGFyZykKKysJeworKwl9CisrCisrCXN0YXRpYyB2b2lkIEZvbyAo dGhpcyBpbiBpbnQgc3JjKQorKwl7CisrCQlEIHAgPSAoaW4gaW50IGEpID0+IHt9OworKwl9Cisr CisrfQorKworK2RlbGVnYXRlIHZvaWQgRCAoaW4gaW50IGFyZyk7CisrCisrY2xhc3MgTQorK3sK KysJaW50IHRoaXNbaW4gaW50IGFdIHsgc2V0IHsgfSB9CisrCXB1YmxpYyBzdGF0aWMgaW1wbGlj aXQgb3BlcmF0b3Igc3RyaW5nIChpbiBNIG0pID0+IG51bGw7CisrCXB1YmxpYyBNIChpbiBpbnQg YXJnKSB7IH0KKysKKysJcHVibGljIHZvaWQgVGVzdDIgKGluIGludCBhcmcpCisrCXsKKysJfQor K30KK1wgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorZGlmZiAtLWdpdCBhL21jcy90ZXN0cy90 ZXN0LWFub24tMTIzLmNzIGIvbWNzL3Rlc3RzL3Rlc3QtYW5vbi0xMjMuY3MKK2luZGV4IDkxYzcy YjQ1YWZlLi40NWFhYjI3YzBhNSAxMDA2NDQKKy0tLSBhL21jcy90ZXN0cy90ZXN0LWFub24tMTIz LmNzCisrKysgYi9tY3MvdGVzdHMvdGVzdC1hbm9uLTEyMy5jcworQEAgLTEsMyArMSw0IEBACisr Ly8gQ29tcGlsZXIgb3B0aW9uczogLWxhbmd2ZXJzaW9uOmxhdGVzdAorIC8vIENsb25pbmcgdGVz dHMKKyAKKyB1c2luZyBTeXN0ZW07CitAQCAtMTAzLDcgKzEwNCwxMSBAQCBwdWJsaWMgY2xhc3Mg QyA6IEIKKyAJCQlkZWZhdWx0OgorIAkJCQlicmVhazsKKyAJCQl9CistCQl9KTsJCQorKwkJfSk7 CisrCisrCQlUZXN0ICgoKSA9PiB7CisrCQkJY2hhciBjaCA9IGRlZmF1bHQ7CisrCQl9KTsKKyAJ CQorIAkJdmFyIGMgPSBuZXcgQyAoKTsKKyAJCWMuSW5zdGFuY2VUZXN0cyAoKTsKK2RpZmYgLS1n aXQgYS9tY3MvdGVzdHMvdGVzdC1iaW5hcnlsaXRlcmFsLmNzIGIvbWNzL3Rlc3RzL3Rlc3QtYmlu YXJ5bGl0ZXJhbC5jcworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAwMDAwLi4z ZDljYzg5YmNiZAorLS0tIC9kZXYvbnVsbAorKysrIGIvbWNzL3Rlc3RzL3Rlc3QtYmluYXJ5bGl0 ZXJhbC5jcworQEAgLTAsMCArMSw1NyBAQAorKworK2NsYXNzIERlbW8geworKwlzdGF0aWMgaW50 IE1haW4gKCkKKysJeworKwkJaWYgKDBiMSAhPSAxKQorKwkJCXJldHVybiAxOworKwkJdmFyIGhl eDEgPSAweDEyM3VsOworKwkJdmFyIGJpbjEgID0gMGIxMDAxMDAwMTF1bDsKKysJCXZhciBiaW4x MSA9IDBiMTAwMTAwMDExbHU7CisrCQlpZiAoaGV4MSAhPSBiaW4xKQorKwkJCXJldHVybiAyOwor KwkJaWYgKGhleDEgIT0gYmluMTEpCisrCQkJcmV0dXJuIDM7CisrCQlpZiAoaGV4MS5HZXRUeXBl ICgpICE9IGJpbjEuR2V0VHlwZSAoKSkKKysJCQlyZXR1cm4gNDsKKysJCWlmIChoZXgxLkdldFR5 cGUgKCkgIT0gYmluMTEuR2V0VHlwZSAoKSkKKysJCQlyZXR1cm4gNTsKKysKKysJCXZhciBoZXgy ID0gMHg3RkZGRkZGRjsKKysJCXZhciBiaW4yID0gMGIxMTExMTExMTExMTExMTExMTExMTExMTEx MTExMTExOworKworKwkJaWYgKGhleDIgIT0gYmluMikKKysJCQlyZXR1cm4gNjsKKysJCWlmICho ZXgyLkdldFR5cGUgKCkgIT0gYmluMi5HZXRUeXBlICgpKQorKwkJCXJldHVybiA3OworKworKwkJ dmFyIGhleDMgPSAweEZGRkZGRkZGOworKwkJdmFyIGJpbjMgPSAwYjExMTExMTExMTExMTExMTEx MTExMTExMTExMTExMTExOworKwkJaWYgKGhleDMgIT0gYmluMykKKysJCQlyZXR1cm4gODsKKysJ CWlmIChoZXgzLkdldFR5cGUgKCkgIT0gYmluMy5HZXRUeXBlICgpKQorKwkJCXJldHVybiA5Owor KworKwkJdmFyIGhleDQgPSAweEZGRkZGRkZGdTsKKysJCXZhciBiaW40ID0gMGIxMTExMTExMTEx MTExMTExMTExMTExMTExMTExMTExMXU7CisrCQlpZiAoaGV4NCAhPSBiaW40KQorKwkJCXJldHVy biAxMDsKKysJCWlmIChoZXg0LkdldFR5cGUgKCkgIT0gYmluNC5HZXRUeXBlICgpKQorKwkJCXJl dHVybiAxMTsKKysKKysJCXZhciBoZXg1ID0gMHg3RkZGRkZGRkZGRkZGRkZGOworKwkJdmFyIGJp bjUgPSAwYjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEx MTExMTExMTExMTExMTsKKysJCWlmIChoZXg1ICE9IGJpbjUpCisrCQkJcmV0dXJuIDEyOworKwkJ aWYgKGhleDUuR2V0VHlwZSAoKSAhPSBiaW41LkdldFR5cGUgKCkpCisrCQkJcmV0dXJuIDEzOwor KworKwkJdmFyIGhleDYgPSAweEZGRkZGRkZGRkZGRkZGRkY7CisrCQl2YXIgYmluNiA9IDBiMTEx MTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEx MTExMTsKKysJCWlmIChoZXg2ICE9IGJpbjYpCisrCQkJcmV0dXJuIDE0OworKwkJaWYgKGhleDYu R2V0VHlwZSAoKSAhPSBiaW42LkdldFR5cGUgKCkpCisrCQkJcmV0dXJuIDE1OworKworKwkJcmV0 dXJuIDA7CisrCX0KKyt9CitcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKK2RpZmYgLS1naXQg YS9tY3MvdGVzdHMvdGVzdC1kZWNsLWV4cHItMDUuY3MgYi9tY3MvdGVzdHMvdGVzdC1kZWNsLWV4 cHItMDUuY3MKK2luZGV4IDczMGZkNDI3OGNhLi45MDdjZGUwYjhkNyAxMDA2NDQKKy0tLSBhL21j cy90ZXN0cy90ZXN0LWRlY2wtZXhwci0wNS5jcworKysrIGIvbWNzL3Rlc3RzL3Rlc3QtZGVjbC1l eHByLTA1LmNzCitAQCAtNiw2ICs2LDExIEBAIGNsYXNzIFgKKyAJCXsKKyAJCQlhcmcgPSBzLlRv U3RyaW5nICgpOworIAkJfQorKworKwkJd2hpbGUgKHRydWUgJiYgQ2FsbCAob3V0IHN0cmluZyBz MikpCisrCQl7CisrCQkJYXJnID0gczIuVG9TdHJpbmcgKCk7CisrCQl9CisgCX0KKyAKKyAJc3Rh dGljIGJvb2wgQ2FsbCAob3V0IHN0cmluZyBzKQorZGlmZiAtLWdpdCBhL21jcy90ZXN0cy90ZXN0 LWRlY2wtZXhwci0wNi5jcyBiL21jcy90ZXN0cy90ZXN0LWRlY2wtZXhwci0wNi5jcworbmV3IGZp bGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAwMDAwLi45NzM0ZjJlYzJhNworLS0tIC9kZXYv bnVsbAorKysrIGIvbWNzL3Rlc3RzL3Rlc3QtZGVjbC1leHByLTA2LmNzCitAQCAtMCwwICsxLDE3 IEBACisrdXNpbmcgU3lzdGVtOworKworK3B1YmxpYyBjbGFzcyBDCisreworKwlGdW5jPGJvb2w+ IGYgPSAoKSA9PiBGb28gKG91dCBpbnQgYXJnKTsKKysKKysJc3RhdGljIGJvb2wgRm9vIChvdXQg aW50IGFyZykKKysJeworKwkJYXJnID0gMjsKKysJCXJldHVybiBmYWxzZTsKKysJfQorKworKwlw dWJsaWMgc3RhdGljIHZvaWQgTWFpbiAoKQorKwl7CisrCQluZXcgQyAoKTsKKysJfQorK30KK1wg Tm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorZGlmZiAtLWdpdCBhL21jcy90ZXN0cy90ZXN0LWRl ZmF1bHQtMDEuY3MgYi9tY3MvdGVzdHMvdGVzdC1kZWZhdWx0LTAxLmNzCitpbmRleCA4MjNlMzNj NDUxYi4uMjhhZmY4MzBjZDkgMTAwNjQ0CistLS0gYS9tY3MvdGVzdHMvdGVzdC1kZWZhdWx0LTAx LmNzCisrKysgYi9tY3MvdGVzdHMvdGVzdC1kZWZhdWx0LTAxLmNzCitAQCAtNDEsNyArNDEsMTEg QEAgc3RhdGljIGNsYXNzIFgKKyAJc3RhdGljIFN5c3RlbS5GdW5jPGludD4gTTQgKCkKKyAJewor IAkJcmV0dXJuICgpID0+IGRlZmF1bHQ7CistCX0gCisrCX0KKysKKysJc3RhdGljIHZvaWQgRm9v IChJSSBhID0gZGVmYXVsdCAoSUkpLCBJSSBiID0gZGVmYXVsdCwgSUkgYyA9IChJSSkgbnVsbCkK KysJeworKwl9CisgfQorIC8qCisgZW51bSBFCitAQCAtNDksNCArNTMsMTAgQEAgZW51bSBFCisg CUEgPSBkZWZhdWx0LAorIAlCID0gZGVmYXVsdCArIDEKKyB9CistKi8KK1wgTm8gbmV3bGluZSBh dCBlbmQgb2YgZmlsZQorKyovCisrCisrCisraW50ZXJmYWNlIElJCisreworKworK30KK1wgTm8g bmV3bGluZSBhdCBlbmQgb2YgZmlsZQorZGlmZiAtLWdpdCBhL21jcy90ZXN0cy90ZXN0LWZpeGVk LTAxLmNzIGIvbWNzL3Rlc3RzL3Rlc3QtZml4ZWQtMDEuY3MKK25ldyBmaWxlIG1vZGUgMTAwNjQ0 CitpbmRleCAwMDAwMDAwMDAwMC4uNDY4NGIwYzVhMDYKKy0tLSAvZGV2L251bGwKKysrKyBiL21j cy90ZXN0cy90ZXN0LWZpeGVkLTAxLmNzCitAQCAtMCwwICsxLDIwIEBACisrLy8gQ29tcGlsZXIg b3B0aW9uczogLXVuc2FmZSAtbGFuZ3ZlcnNpb246bGF0ZXN0CisrCisrdW5zYWZlIGNsYXNzIEMK Kyt7CisrCXB1YmxpYyBzdGF0aWMgdm9pZCBNYWluICgpCisrCXsKKysJCWZpeGVkIChpbnQqIHAg PSBuZXcgRml4YWJsZSAoKSkgeworKwkJCVN5c3RlbS5Db25zb2xlLldyaXRlTGluZSAoKnApOwor KwkJCVN5c3RlbS5Db25zb2xlLldyaXRlTGluZSAocCBbMl0pOworKwkJfQorKwl9CisrCisrCXN0 cnVjdCBGaXhhYmxlCisrCXsKKysJCXB1YmxpYyByZWYgaW50IEdldFBpbm5hYmxlUmVmZXJlbmNl ICgpCisrCQl7CisrCQkJcmV0dXJuIHJlZiAobmV3IGludFtdIHsgMSwgMiwgMyB9KVswXTsKKysJ CX0KKysJfQorK30KK1wgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorZGlmZiAtLWdpdCBhL21j cy90ZXN0cy90ZXN0LXBhdHRlcm4tMTMuY3MgYi9tY3MvdGVzdHMvdGVzdC1wYXR0ZXJuLTEzLmNz CituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMDAwMDAuLjMxNWM3YTllNGJlCist LS0gL2Rldi9udWxsCisrKysgYi9tY3MvdGVzdHMvdGVzdC1wYXR0ZXJuLTEzLmNzCitAQCAtMCww ICsxLDE5IEBACisrdXNpbmcgU3lzdGVtOworKworK2NsYXNzIEMgOiBCCisreworKworK30KKysK KytwdWJsaWMgY2xhc3MgQgorK3sKKysJcHVibGljIHN0YXRpYyB2b2lkIE1haW4gKCkKKysJewor KwkJQyBjID0gbmV3IEMgKCk7CisrCisrCQlpZiAoYyBpcyBCIGIpCisrCQl7CisrCQkJQ29uc29s ZS5Xcml0ZUxpbmUgKGIgPT0gbnVsbCk7CisrCQl9CisrCX0KKyt9CitcIE5vIG5ld2xpbmUgYXQg ZW5kIG9mIGZpbGUKK2RpZmYgLS1naXQgYS9tY3MvdGVzdHMvdGVzdC1yZWYtMDcuY3MgYi9tY3Mv dGVzdHMvdGVzdC1yZWYtMDcuY3MKK2luZGV4IDRhYTE2NTc5NzUyLi5mMTdjZmI0NDNiNSAxMDA2 NDQKKy0tLSBhL21jcy90ZXN0cy90ZXN0LXJlZi0wNy5jcworKysrIGIvbWNzL3Rlc3RzL3Rlc3Qt cmVmLTA3LmNzCitAQCAtMSw2ICsxLDYgQEAKKyAvLyBDb21waWxlciBvcHRpb25zOiAtbGFuZ3Zl cnNpb246bGF0ZXN0CisgCistcHVibGljIHJlYWRvbmx5IHBhcnRpYWwgcmVmIHN0cnVjdCBUZXN0 CisrcHVibGljIHJlYWRvbmx5IHJlZiBwYXJ0aWFsIHN0cnVjdCBUZXN0CisgeworIAlwdWJsaWMg c3RhdGljIHZvaWQgTWFpbiAoKQorIAl7CitAQCAtMTQsNiArMTQsMTEgQEAgcHVibGljIHJlYWRv bmx5IHBhcnRpYWwgcmVmIHN0cnVjdCBUZXN0CisgCX0KKyB9CisgCisrcmVmIHBhcnRpYWwgc3Ry dWN0IFRlc3QKKyt7CisrCisrfQorKworIHJlZiBzdHJ1Y3QgU2Vjb25kCisgeworIAlUZXN0IGZp ZWxkOworZGlmZiAtLWdpdCBhL21jcy90ZXN0cy90ZXN0LXJlZi0xMS5jcyBiL21jcy90ZXN0cy90 ZXN0LXJlZi0xMS5jcworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAwMDAwLi44 ZDM5MmE3N2QwNworLS0tIC9kZXYvbnVsbAorKysrIGIvbWNzL3Rlc3RzL3Rlc3QtcmVmLTExLmNz CitAQCAtMCwwICsxLDEzIEBACisrY2xhc3MgUHJvZ3JhbQorK3sKKysJc3RhdGljIGludCB4Owor KwlzdGF0aWMgaW50IHk7CisrCisrICAgIHB1YmxpYyBzdGF0aWMgaW50IE1haW4gKCkKKysgICAg eworKyAgICAJYm9vbCBiID0gZmFsc2U7CisrICAgICAgICByZWYgaW50IHRhcmdldEJ1Y2tldCA9 IHJlZiBiID8gcmVmIHggOiByZWYgeTsKKysKKysgICAgICAgIHJldHVybiAwOworKyAgICB9Cisr fQorXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCitkaWZmIC0tZ2l0IGEvbWNzL3Rlc3RzL3Rl c3QtcmVmLTEyLmNzIGIvbWNzL3Rlc3RzL3Rlc3QtcmVmLTEyLmNzCituZXcgZmlsZSBtb2RlIDEw MDY0NAoraW5kZXggMDAwMDAwMDAwMDAuLjc4NmE0MTYyZjRmCistLS0gL2Rldi9udWxsCisrKysg Yi9tY3MvdGVzdHMvdGVzdC1yZWYtMTIuY3MKK0BAIC0wLDAgKzEsMjIgQEAKKysvLyBDb21waWxl ciBvcHRpb25zOiAtdW5zYWZlCisrCisrdW5zYWZlIGNsYXNzIFgKKyt7CisrCXB1YmxpYyBzdGF0 aWMgdm9pZCBNYWluICgpCisrCXsKKysJCXZvaWQqIHBvaW50ZXIgPSBudWxsOworKyAJCUJhciAo cmVmIEZvbyAocmVmICooYnl0ZSopcG9pbnRlcikpOworKwl9CisrCisrCXN0YXRpYyBpbnQgZmll bGQ7CisrCisrCXN0YXRpYyByZWYgaW50IEZvbyAocmVmIGJ5dGUgYikKKysJeworKwkJcmV0dXJu IHJlZiBmaWVsZDsKKysJfQorKworKwlzdGF0aWMgdm9pZCBCYXIgKHJlZiBpbnQgaSkKKysJewor KworKwl9CisrfQorXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCitkaWZmIC0tZ2l0IGEvbWNz L3Rlc3RzL3Rlc3QtdHVwbGUtMDIuY3MgYi9tY3MvdGVzdHMvdGVzdC10dXBsZS0wMi5jcworaW5k ZXggYzA0OTI3NTk0NTIuLmFiNzIyNjQyYWViIDEwMDY0NAorLS0tIGEvbWNzL3Rlc3RzL3Rlc3Qt dHVwbGUtMDIuY3MKKysrKyBiL21jcy90ZXN0cy90ZXN0LXR1cGxlLTAyLmNzCitAQCAtMjYsNiAr MjYsMTEgQEAgY2xhc3MgVHVwbGVDb252ZXJzaW9ucworIAkJKHN0cmluZyB2MSwgb2JqZWN0IHYy KSBiID0gKCJhIiwgImIiKTsKKyAKKyAJCShpbnQgdjEsIGxvbmcgdjIpPyB4ID0gbnVsbDsKKysK KysgICAgICAgIHZhciBhcnJheSA9IG5ldyBbXSB7CisrICAgICAgICAgICAgKG5hbWU6ICJBIiwg b2Zmc2V0OiAwKSwKKysgICAgICAgICAgICAobmFtZTogIkIiLCBzaXplOiA0KQorKyAgICAgICAg fTsJCQorIAl9CisgCisgCXN0YXRpYyB2b2lkIEZvbzxUPiAoVCBhcmcpCitkaWZmIC0tZ2l0IGEv bWNzL3Rlc3RzL3Rlc3QtdHVwbGUtMDguY3MgYi9tY3MvdGVzdHMvdGVzdC10dXBsZS0wOC5jcwor bmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAwMDAwLi5mZDMzNzViNGRmNgorLS0t IC9kZXYvbnVsbAorKysrIGIvbWNzL3Rlc3RzL3Rlc3QtdHVwbGUtMDguY3MKK0BAIC0wLDAgKzEs MjQgQEAKKyt1c2luZyBTeXN0ZW07CisrdXNpbmcgU3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWM7 CisrdXNpbmcgU3lzdGVtLlRocmVhZGluZy5UYXNrczsKKysKKytjbGFzcyBYCisreworKwlwdWJs aWMgc3RhdGljIHZvaWQgTWFpbiAoKQorKwl7CisrCQl2YXIgeCA9IG5ldyBYICgpOworKwkJeC5U ZXN0ICgpLldhaXQgKCk7CisrCX0KKysKKysJaW50IGEsIGI7CisrCisrCWFzeW5jIFRhc2sgVGVz dCAoKQorKwl7CisrCQkoYSwgYikgPSBhd2FpdCBXYWl0aW5nICgpOworKwl9CisrCisrCVRhc2s8 KGludCwgaW50KT4gV2FpdGluZyAoKQorKwl7CisrCQlyZXR1cm4gVGFzay5Gcm9tUmVzdWx0ICgo MSwgMykpOworKwl9CisrfQorXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCitkaWZmIC0tZ2l0 IGEvbWNzL3Rlc3RzL3Rlc3QtdHVwbGUtMTAuY3MgYi9tY3MvdGVzdHMvdGVzdC10dXBsZS0xMC5j cworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAwMDAwLi44MmY0ZTAxZWMxZgor LS0tIC9kZXYvbnVsbAorKysrIGIvbWNzL3Rlc3RzL3Rlc3QtdHVwbGUtMTAuY3MKK0BAIC0wLDAg KzEsOSBAQAorK3VzaW5nIFN5c3RlbS5MaW5xOworKworK2NsYXNzIFByb2dyYW0geworKyAgICBw dWJsaWMgc3RhdGljIGludCBNYWluICgpCisrICAgIHsKKysgICAgICAgIHZhciBsID0gKGZyb20g ZiBpbiAodHlwZW9mIChQcm9ncmFtKSkuR2V0RmllbGRzKCkgc2VsZWN0IChuYW1lOiBmLk5hbWUs IG9mZnNldDogMCkpLlRvTGlzdCgpOworKyAgICAgICAgcmV0dXJuIDA7CisrICAgIH0KKyt9Citc IE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKK2RpZmYgLS1naXQgYS9tY3MvdGVzdHMvdGVzdC10 dXBsZS0xMS5jcyBiL21jcy90ZXN0cy90ZXN0LXR1cGxlLTExLmNzCituZXcgZmlsZSBtb2RlIDEw MDY0NAoraW5kZXggMDAwMDAwMDAwMDAuLmIyYWViMjQwMjZjCistLS0gL2Rldi9udWxsCisrKysg Yi9tY3MvdGVzdHMvdGVzdC10dXBsZS0xMS5jcworQEAgLTAsMCArMSwyMCBAQAorK3VzaW5nIFN5 c3RlbTsKKysKKytjbGFzcyBQcm9ncmFtCisreworKwlwdWJsaWMgc3RhdGljIGludCBNYWluICgp CisrCXsKKysJCWludCB4ID0gMTsKKysJCWludCB5ID0gMjsKKysKKysJCSh4LCB5KSA9ICh5LCB4 KTsKKysKKysJCWlmICh4ICE9IDIpCisrCQkJcmV0dXJuIDE7CisrCisrCQlpZiAoeSAhPSAxKQor KwkJCXJldHVybiAyOworKworKwkJcmV0dXJuIDA7CisrCX0KKyt9CitkaWZmIC0tZ2l0IGEvbWNz L3Rlc3RzL3Zlci1pbC1uZXRfNF94LnhtbCBiL21jcy90ZXN0cy92ZXItaWwtbmV0XzRfeC54bWwK K2luZGV4IDRkYmM3MDQyYThhLi4yYmRlODI3MDMzOCAxMDA2NDQKKy0tLSBhL21jcy90ZXN0cy92 ZXItaWwtbmV0XzRfeC54bWwKKysrKyBiL21jcy90ZXN0cy92ZXItaWwtbmV0XzRfeC54bWwKK0BA IC0zMTY4LDYgKzMxNjgsMzMgQEAKKyAgICAgICA8L21ldGhvZD4KKyAgICAgPC90eXBlPgorICAg PC90ZXN0PgorKyAgPHRlc3QgbmFtZT0iZHRlc3QtMDY2LmNzIj4KKysgICAgPHR5cGUgbmFtZT0i QyI+CisrICAgICAgPG1ldGhvZCBuYW1lPSJWb2lkIE1haW4oKSIgYXR0cnM9IjE0NSI+CisrICAg ICAgICA8c2l6ZT40MTwvc2l6ZT4KKysgICAgICA8L21ldGhvZD4KKysgICAgICA8bWV0aG9kIG5h bWU9IlZvaWQgLmN0b3IoKSIgYXR0cnM9IjYyNzgiPgorKyAgICAgICAgPHNpemU+Nzwvc2l6ZT4K KysgICAgICA8L21ldGhvZD4KKysgICAgPC90eXBlPgorKyAgICA8dHlwZSBuYW1lPSImbHQ7Jmd0 O19fQW5vblR5cGUwYDFbJmx0O1gmZ3Q7X19UXSI+CisrICAgICAgPG1ldGhvZCBuYW1lPSImbHQ7 WCZndDtfX1QgZ2V0X1goKSIgYXR0cnM9IjIxODIiPgorKyAgICAgICAgPHNpemU+Nzwvc2l6ZT4K KysgICAgICA8L21ldGhvZD4KKysgICAgICA8bWV0aG9kIG5hbWU9IkJvb2xlYW4gRXF1YWxzKFN5 c3RlbS5PYmplY3QpIiBhdHRycz0iMTk4Ij4KKysgICAgICAgIDxzaXplPjM5PC9zaXplPgorKyAg ICAgIDwvbWV0aG9kPgorKyAgICAgIDxtZXRob2QgbmFtZT0iSW50MzIgR2V0SGFzaENvZGUoKSIg YXR0cnM9IjE5OCI+CisrICAgICAgICA8c2l6ZT42Mzwvc2l6ZT4KKysgICAgICA8L21ldGhvZD4K KysgICAgICA8bWV0aG9kIG5hbWU9IlN5c3RlbS5TdHJpbmcgVG9TdHJpbmcoKSIgYXR0cnM9IjE5 OCI+CisrICAgICAgICA8c2l6ZT42Nzwvc2l6ZT4KKysgICAgICA8L21ldGhvZD4KKysgICAgICA8 bWV0aG9kIG5hbWU9IlZvaWQgLmN0b3IoJmx0O1gmZ3Q7X19UKSIgYXR0cnM9IjYyNzgiPgorKyAg ICAgICAgPHNpemU+MTQ8L3NpemU+CisrICAgICAgPC9tZXRob2Q+CisrICAgIDwvdHlwZT4KKysg IDwvdGVzdD4KKyAgIDx0ZXN0IG5hbWU9ImR0ZXN0LWFub250eXBlLTAxLmNzIj4KKyAgICAgPHR5 cGUgbmFtZT0iQyI+CisgICAgICAgPG1ldGhvZCBuYW1lPSJWb2lkIE1haW4oKSIgYXR0cnM9IjE1 MCI+CitAQCAtMTEwNjQsNyArMTEwOTEsNyBAQAorICAgICA8L3R5cGU+CisgICAgIDx0eXBlIG5h bWU9IlgiPgorICAgICAgIDxtZXRob2QgbmFtZT0iSW50MzIgQmVlcihTeXN0ZW0uTnVsbGFibGVg MVtJcmlzaFB1Yl0pIiBhdHRycz0iMTQ1Ij4KKy0gICAgICAgIDxzaXplPjcyPC9zaXplPgorKyAg ICAgICAgPHNpemU+NjA8L3NpemU+CisgICAgICAgPC9tZXRob2Q+CisgICAgICAgPG1ldGhvZCBu YW1lPSJJbnQzMiBUZXN0KFN5c3RlbS5OdWxsYWJsZWAxW1N5c3RlbS5JbnQzMl0pIiBhdHRycz0i MTQ1Ij4KKyAgICAgICAgIDxzaXplPjYyPC9zaXplPgorQEAgLTE5NTA4LDcgKzE5NTM1LDcgQEAK KyAgICAgPC90eXBlPgorICAgICA8dHlwZSBuYW1lPSJDIj4KKyAgICAgICA8bWV0aG9kIG5hbWU9 IkludDMyIE1haW4oKSIgYXR0cnM9IjE1MCI+CistICAgICAgICA8c2l6ZT4yNjc8L3NpemU+Cisr ICAgICAgICA8c2l6ZT4yNTU8L3NpemU+CisgICAgICAgPC9tZXRob2Q+CisgICAgICAgPG1ldGhv ZCBuYW1lPSJWb2lkIC5jdG9yKCkiIGF0dHJzPSI2Mjc4Ij4KKyAgICAgICAgIDxzaXplPjc8L3Np emU+CitAQCAtMTk3NDIsNyArMTk3NjksNyBAQAorICAgPHRlc3QgbmFtZT0iZ3Rlc3QtNjI5LmNz Ij4KKyAgICAgPHR5cGUgbmFtZT0iUHJvZ3JhbSI+CisgICAgICAgPG1ldGhvZCBuYW1lPSJWb2lk IE1haW4oKSIgYXR0cnM9IjE1MCI+CistICAgICAgICA8c2l6ZT4xMTY8L3NpemU+CisrICAgICAg ICA8c2l6ZT4xMjE8L3NpemU+CisgICAgICAgPC9tZXRob2Q+CisgICAgICAgPG1ldGhvZCBuYW1l PSJWb2lkIC5jdG9yKCkiIGF0dHJzPSI2Mjc4Ij4KKyAgICAgICAgIDxzaXplPjc8L3NpemU+CitA QCAtMjAxNDcsNiArMjAxNzQsMjEgQEAKKyAgICAgICA8L21ldGhvZD4KKyAgICAgPC90eXBlPgor ICAgPC90ZXN0PgorKyAgPHRlc3QgbmFtZT0iZ3Rlc3QtNjQ3LmNzIj4KKysgICAgPHR5cGUgbmFt ZT0iUHJvZ3JhbSI+CisrICAgICAgPG1ldGhvZCBuYW1lPSJJbnQzMiBNYWluKCkiIGF0dHJzPSIx NTAiPgorKyAgICAgICAgPHNpemU+OTk8L3NpemU+CisrICAgICAgPC9tZXRob2Q+CisrICAgICAg PG1ldGhvZCBuYW1lPSJWb2lkIC5jdG9yKCkiIGF0dHJzPSI2Mjc4Ij4KKysgICAgICAgIDxzaXpl Pjc8L3NpemU+CisrICAgICAgPC9tZXRob2Q+CisrICAgIDwvdHlwZT4KKysgICAgPHR5cGUgbmFt ZT0iUHJvZ3JhbStNeVN0cnVjdCI+CisrICAgICAgPG1ldGhvZCBuYW1lPSJJbnQzMiBvcF9JbXBs aWNpdChTeXN0ZW0uTnVsbGFibGVgMVtQcm9ncmFtK015U3RydWN0XSkiIGF0dHJzPSIyMTk4Ij4K KysgICAgICAgIDxzaXplPjIyPC9zaXplPgorKyAgICAgIDwvbWV0aG9kPgorKyAgICA8L3R5cGU+ CisrICA8L3Rlc3Q+CisgICA8dGVzdCBuYW1lPSJndGVzdC1hbm9udHlwZS0wMS5jcyI+CisgICAg IDx0eXBlIG5hbWU9IlRlc3QiPgorICAgICAgIDxtZXRob2QgbmFtZT0iSW50MzIgTWFpbigpIiBh dHRycz0iMTUwIj4KK0BAIC00NzYwOSw3ICs0NzY1MSw3IEBACisgICAgICAgICA8c2l6ZT43PC9z aXplPgorICAgICAgIDwvbWV0aG9kPgorICAgICAgIDxtZXRob2QgbmFtZT0iVm9pZCBDb3B5VG8o SW50MzIsIENoYXJbXSwgSW50MzIsIEludDMyKSIgYXR0cnM9IjE0NSI+CistICAgICAgICA8c2l6 ZT43Mzwvc2l6ZT4KKysgICAgICAgIDxzaXplPjc4PC9zaXplPgorICAgICAgIDwvbWV0aG9kPgor ICAgICA8L3R5cGU+CisgICA8L3Rlc3Q+CitAQCAtNTE0NjgsMTAgKzUxNTEwLDEwIEBACisgICA8 dGVzdCBuYW1lPSJ0ZXN0LTg4LmNzIj4KKyAgICAgPHR5cGUgbmFtZT0iWCI+CisgICAgICAgPG1l dGhvZCBuYW1lPSJWb2lkIGYoU3lzdGVtLlN0cmluZykiIGF0dHJzPSIxNDUiPgorLSAgICAgICAg PHNpemU+MjA8L3NpemU+CisrICAgICAgICA8c2l6ZT4xMjwvc2l6ZT4KKyAgICAgICA8L21ldGhv ZD4KKyAgICAgICA8bWV0aG9kIG5hbWU9IkludDMyIE1haW4oKSIgYXR0cnM9IjE1MCI+CistICAg ICAgICA8c2l6ZT43MDwvc2l6ZT4KKysgICAgICAgIDxzaXplPjYyPC9zaXplPgorICAgICAgIDwv bWV0aG9kPgorICAgICAgIDxtZXRob2QgbmFtZT0iVm9pZCAuY3RvcigpIiBhdHRycz0iNjI3OCI+ CisgICAgICAgICA8c2l6ZT43PC9zaXplPgorQEAgLTUyMTQ4LDcgKzUyMTkwLDcgQEAKKyAgICAg ICAgIDxzaXplPjE0PC9zaXplPgorICAgICAgIDwvbWV0aG9kPgorICAgICAgIDxtZXRob2QgbmFt ZT0iVm9pZCBPdXRlcihTeXN0ZW0uU3RyaW5nKSIgYXR0cnM9IjE0NSI+CistICAgICAgICA8c2l6 ZT4yOTwvc2l6ZT4KKysgICAgICAgIDxzaXplPjM0PC9zaXplPgorICAgICAgIDwvbWV0aG9kPgor ICAgICAgIDxtZXRob2QgbmFtZT0iVm9pZCBJbm5lcihDaGFyKiBCeVJlZiwgQ2hhciopIiBhdHRy cz0iMTQ1Ij4KKyAgICAgICAgIDxzaXplPjEwPC9zaXplPgorQEAgLTUyMzU5LDEwICs1MjQwMSwx MCBAQAorICAgPHRlc3QgbmFtZT0idGVzdC05MjguY3MiPgorICAgICA8dHlwZSBuYW1lPSJQcm9n cmFtIj4KKyAgICAgICA8bWV0aG9kIG5hbWU9IlZvaWQgVGVzdCgpIiBhdHRycz0iMTUwIj4KKy0g ICAgICAgIDxzaXplPjI1PC9zaXplPgorKyAgICAgICAgPHNpemU+MzA8L3NpemU+CisgICAgICAg PC9tZXRob2Q+CisgICAgICAgPG1ldGhvZCBuYW1lPSJJbnQzMiBNYWluKCkiIGF0dHJzPSIxNTAi PgorLSAgICAgICAgPHNpemU+MTA1PC9zaXplPgorKyAgICAgICAgPHNpemU+MTQxPC9zaXplPgor ICAgICAgIDwvbWV0aG9kPgorICAgICAgIDxtZXRob2QgbmFtZT0iQm9vbGVhbiAmbHQ7TWFpbiZn dDttX18wKFN5c3RlbS5SZWZsZWN0aW9uLkxvY2FsVmFyaWFibGVJbmZvKSIgYXR0cnM9IjE0NSI+ CisgICAgICAgICA8c2l6ZT4yOTwvc2l6ZT4KK0BAIC01MjM3MCw2ICs1MjQxMiwxMiBAQAorICAg ICAgIDxtZXRob2QgbmFtZT0iVm9pZCAuY3RvcigpIiBhdHRycz0iNjI3OCI+CisgICAgICAgICA8 c2l6ZT43PC9zaXplPgorICAgICAgIDwvbWV0aG9kPgorKyAgICAgIDxtZXRob2QgbmFtZT0iQm9v bGVhbiBTdHJpbmdOdWxsKFN5c3RlbS5TdHJpbmcpIiBhdHRycz0iMTUwIj4KKysgICAgICAgIDxz aXplPjMyPC9zaXplPgorKyAgICAgIDwvbWV0aG9kPgorKyAgICAgIDxtZXRob2QgbmFtZT0iQm9v bGVhbiBBcnJheU51bGwoSW50MzJbXSkiIGF0dHJzPSIxNTAiPgorKyAgICAgICAgPHNpemU+NDU8 L3NpemU+CisrICAgICAgPC9tZXRob2Q+CisgICAgIDwvdHlwZT4KKyAgIDwvdGVzdD4KKyAgIDx0 ZXN0IG5hbWU9InRlc3QtOTI5LmNzIj4KK0BAIC01MjgxNCw3ICs1Mjg2Miw3IEBACisgICA8dGVz dCBuYW1lPSJ0ZXN0LTk0OC5jcyI+CisgICAgIDx0eXBlIG5hbWU9IlgiPgorICAgICAgIDxtZXRo b2QgbmFtZT0iVm9pZCBNYWluKCkiIGF0dHJzPSIxNTAiPgorLSAgICAgICAgPHNpemU+MTY8L3Np emU+CisrICAgICAgICA8c2l6ZT4xMDM8L3NpemU+CisgICAgICAgPC9tZXRob2Q+CisgICAgICAg PG1ldGhvZCBuYW1lPSJWb2lkIEZvbygpIiBhdHRycz0iMTI5Ij4KKyAgICAgICAgIDxzaXplPjI8 L3NpemU+CitAQCAtNTI4MzQsNiArNTI4ODIsMTYgQEAKKyAgICAgICA8L21ldGhvZD4KKyAgICAg PC90eXBlPgorICAgPC90ZXN0PgorKyAgPHRlc3QgbmFtZT0idGVzdC05NTAuY3MiPgorKyAgICA8 dHlwZSBuYW1lPSJCIj4KKysgICAgICA8bWV0aG9kIG5hbWU9IlZvaWQgTWFpbigpIiBhdHRycz0i MTUwIj4KKysgICAgICAgIDxzaXplPjIzPC9zaXplPgorKyAgICAgIDwvbWV0aG9kPgorKyAgICAg IDxtZXRob2QgbmFtZT0iVm9pZCAuY3RvcigpIiBhdHRycz0iNjI3OCI+CisrICAgICAgICA8c2l6 ZT43PC9zaXplPgorKyAgICAgIDwvbWV0aG9kPgorKyAgICA8L3R5cGU+CisrICA8L3Rlc3Q+Cisg ICA8dGVzdCBuYW1lPSJ0ZXN0LTk2LmNzIj4KKyAgICAgPHR5cGUgbmFtZT0iTjEuQSI+CisgICAg ICAgPG1ldGhvZCBuYW1lPSJJbnQzMiBNYWluKCkiIGF0dHJzPSIxNTAiPgorQEAgLTUyODU4LDYg KzUyOTE2LDgwIEBACisgICAgICAgPC9tZXRob2Q+CisgICAgIDwvdHlwZT4KKyAgIDwvdGVzdD4K KysgIDx0ZXN0IG5hbWU9InRlc3QtOTYwLmNzIj4KKysgICAgPHR5cGUgbmFtZT0iQiI+CisrICAg ICAgPG1ldGhvZCBuYW1lPSJJbnQzMiBnZXRfSW5kZXgoKSIgYXR0cnM9IjIxODIiPgorKyAgICAg ICAgPHNpemU+MTQ8L3NpemU+CisrICAgICAgPC9tZXRob2Q+CisrICAgICAgPG1ldGhvZCBuYW1l PSJWb2lkIHNldF9JbmRleChJbnQzMikiIGF0dHJzPSIyMTc4Ij4KKysgICAgICAgIDxzaXplPjg8 L3NpemU+CisrICAgICAgPC9tZXRob2Q+CisrICAgICAgPG1ldGhvZCBuYW1lPSJTeXN0ZW0uU3Ry aW5nIGdldF9TMSgpIiBhdHRycz0iMjE3OSI+CisrICAgICAgICA8c2l6ZT4xNDwvc2l6ZT4KKysg ICAgICA8L21ldGhvZD4KKysgICAgICA8bWV0aG9kIG5hbWU9IlZvaWQgc2V0X1MxKFN5c3RlbS5T dHJpbmcpIiBhdHRycz0iMjE3OCI+CisrICAgICAgICA8c2l6ZT44PC9zaXplPgorKyAgICAgIDwv bWV0aG9kPgorKyAgICAgIDxtZXRob2QgbmFtZT0iU3lzdGVtLlN0cmluZyBnZXRfUzIoKSIgYXR0 cnM9IjIxODAiPgorKyAgICAgICAgPHNpemU+MTQ8L3NpemU+CisrICAgICAgPC9tZXRob2Q+Cisr ICAgICAgPG1ldGhvZCBuYW1lPSJWb2lkIHNldF9TMihTeXN0ZW0uU3RyaW5nKSIgYXR0cnM9IjIx NzgiPgorKyAgICAgICAgPHNpemU+ODwvc2l6ZT4KKysgICAgICA8L21ldGhvZD4KKysgICAgICA8 bWV0aG9kIG5hbWU9IlZvaWQgTWFpbigpIiBhdHRycz0iMTUwIj4KKysgICAgICAgIDxzaXplPjI8 L3NpemU+CisrICAgICAgPC9tZXRob2Q+CisrICAgICAgPG1ldGhvZCBuYW1lPSJWb2lkIC5jdG9y KCkiIGF0dHJzPSI2Mjc4Ij4KKysgICAgICAgIDxzaXplPjc8L3NpemU+CisrICAgICAgPC9tZXRo b2Q+CisrICAgIDwvdHlwZT4KKysgIDwvdGVzdD4KKysgIDx0ZXN0IG5hbWU9InRlc3QtOTYxLmNz Ij4KKysgICAgPHR5cGUgbmFtZT0iQiI+CisrICAgICAgPG1ldGhvZCBuYW1lPSJWb2lkIE1haW4o KSIgYXR0cnM9IjE1MCI+CisrICAgICAgICA8c2l6ZT4xMDwvc2l6ZT4KKysgICAgICA8L21ldGhv ZD4KKysgICAgICA8bWV0aG9kIG5hbWU9IlZvaWQgRm9vKEludDMyKSIgYXR0cnM9IjE0NSI+Cisr ICAgICAgICA8c2l6ZT4zMjwvc2l6ZT4KKysgICAgICA8L21ldGhvZD4KKysgICAgICA8bWV0aG9k IG5hbWU9IlZvaWQgJmx0O0ZvbyZndDttX18wKEludDMyKSIgYXR0cnM9IjE0NSI+CisrICAgICAg ICA8c2l6ZT4yPC9zaXplPgorKyAgICAgIDwvbWV0aG9kPgorKyAgICA8L3R5cGU+CisrICAgIDx0 eXBlIG5hbWU9IkQiPgorKyAgICAgIDxtZXRob2QgbmFtZT0iVm9pZCBJbnZva2UoSW50MzIpIiBh dHRycz0iNDU0Ij4KKysgICAgICAgIDxzaXplPjA8L3NpemU+CisrICAgICAgPC9tZXRob2Q+Cisr ICAgICAgPG1ldGhvZCBuYW1lPSJTeXN0ZW0uSUFzeW5jUmVzdWx0IEJlZ2luSW52b2tlKEludDMy LCBTeXN0ZW0uQXN5bmNDYWxsYmFjaywgU3lzdGVtLk9iamVjdCkiIGF0dHJzPSI0NTQiPgorKyAg ICAgICAgPHNpemU+MDwvc2l6ZT4KKysgICAgICA8L21ldGhvZD4KKysgICAgICA8bWV0aG9kIG5h bWU9IlZvaWQgRW5kSW52b2tlKFN5c3RlbS5JQXN5bmNSZXN1bHQpIiBhdHRycz0iNDU0Ij4KKysg ICAgICAgIDxzaXplPjA8L3NpemU+CisrICAgICAgPC9tZXRob2Q+CisrICAgICAgPG1ldGhvZCBu YW1lPSJWb2lkIC5jdG9yKE9iamVjdCwgSW50UHRyKSIgYXR0cnM9IjYyNzgiPgorKyAgICAgICAg PHNpemU+MDwvc2l6ZT4KKysgICAgICA8L21ldGhvZD4KKysgICAgPC90eXBlPgorKyAgICA8dHlw ZSBuYW1lPSJNIj4KKysgICAgICA8bWV0aG9kIG5hbWU9IlZvaWQgc2V0X0l0ZW0oSW50MzIsIElu dDMyKSIgYXR0cnM9IjIxNzciPgorKyAgICAgICAgPHNpemU+Mjwvc2l6ZT4KKysgICAgICA8L21l dGhvZD4KKysgICAgICA8bWV0aG9kIG5hbWU9IlN5c3RlbS5TdHJpbmcgb3BfSW1wbGljaXQoTSki IGF0dHJzPSIyMTk4Ij4KKysgICAgICAgIDxzaXplPjk8L3NpemU+CisrICAgICAgPC9tZXRob2Q+ CisrICAgICAgPG1ldGhvZCBuYW1lPSJWb2lkIFRlc3QyKEludDMyKSIgYXR0cnM9IjEzNCI+Cisr ICAgICAgICA8c2l6ZT4yPC9zaXplPgorKyAgICAgIDwvbWV0aG9kPgorKyAgICAgIDxtZXRob2Qg bmFtZT0iVm9pZCAuY3RvcihJbnQzMikiIGF0dHJzPSI2Mjc4Ij4KKysgICAgICAgIDxzaXplPjg8 L3NpemU+CisrICAgICAgPC9tZXRob2Q+CisrICAgIDwvdHlwZT4KKysgICAgPHR5cGUgbmFtZT0i QiI+CisrICAgICAgPG1ldGhvZCBuYW1lPSJWb2lkIEJhcihJbnQzMikiIGF0dHJzPSIxNTAiPgor KyAgICAgICAgPHNpemU+Mjwvc2l6ZT4KKysgICAgICA8L21ldGhvZD4KKysgICAgPC90eXBlPgor KyAgPC90ZXN0PgorICAgPHRlc3QgbmFtZT0idGVzdC05Ny5jcyI+CisgICAgIDx0eXBlIG5hbWU9 IlgiPgorICAgICAgIDxtZXRob2QgbmFtZT0iSW50MzIgTWFpbigpIiBhdHRycz0iMTUwIj4KK0BA IC01NDQ0OCw3ICs1NDU4MCw3IEBACisgICAgICAgICA8c2l6ZT4xOTwvc2l6ZT4KKyAgICAgICA8 L21ldGhvZD4KKyAgICAgICA8bWV0aG9kIG5hbWU9IlZvaWQgTWFpbigpIiBhdHRycz0iMTUwIj4K Ky0gICAgICAgIDxzaXplPjI0Nzwvc2l6ZT4KKysgICAgICAgIDxzaXplPjI4MTwvc2l6ZT4KKyAg ICAgICA8L21ldGhvZD4KKyAgICAgICA8bWV0aG9kIG5hbWU9IlZvaWQgJmx0O0Jhc2VNJmd0O19f QmFzZUNhbGxQcm94eTAoKSIgYXR0cnM9IjEyOSI+CisgICAgICAgICA8c2l6ZT43PC9zaXplPgor QEAgLTU0NTE4LDYgKzU0NjUwLDkgQEAKKyAgICAgICA8bWV0aG9kIG5hbWU9IlZvaWQgJmx0O01h aW4mZ3Q7bV9fNShFKSIgYXR0cnM9IjE0NSI+CisgICAgICAgICA8c2l6ZT4zNTwvc2l6ZT4KKyAg ICAgICA8L21ldGhvZD4KKysgICAgICA8bWV0aG9kIG5hbWU9IlZvaWQgJmx0O01haW4mZ3Q7bV9f NigpIiBhdHRycz0iMTQ1Ij4KKysgICAgICAgIDxzaXplPjQ8L3NpemU+CisrICAgICAgPC9tZXRo b2Q+CisgICAgIDwvdHlwZT4KKyAgIDwvdGVzdD4KKyAgIDx0ZXN0IG5hbWU9InRlc3QtYW5vbi0x MjQuY3MiPgorQEAgLTY3MDIwLDYgKzY3MTU1LDE2IEBACisgICAgICAgPC9tZXRob2Q+CisgICAg IDwvdHlwZT4KKyAgIDwvdGVzdD4KKysgIDx0ZXN0IG5hbWU9InRlc3QtYmluYXJ5bGl0ZXJhbC5j cyI+CisrICAgIDx0eXBlIG5hbWU9IkRlbW8iPgorKyAgICAgIDxtZXRob2QgbmFtZT0iSW50MzIg TWFpbigpIiBhdHRycz0iMTQ1Ij4KKysgICAgICAgIDxzaXplPjUwMzwvc2l6ZT4KKysgICAgICA8 L21ldGhvZD4KKysgICAgICA8bWV0aG9kIG5hbWU9IlZvaWQgLmN0b3IoKSIgYXR0cnM9IjYyNzgi PgorKyAgICAgICAgPHNpemU+Nzwvc2l6ZT4KKysgICAgICA8L21ldGhvZD4KKysgICAgPC90eXBl PgorKyAgPC90ZXN0PgorICAgPHRlc3QgbmFtZT0idGVzdC1jbHMtMDAuY3MiPgorICAgICA8dHlw ZSBuYW1lPSJDTFNDTGFzc182Ij4KKyAgICAgICA8bWV0aG9kIG5hbWU9IlZvaWQgYWRkX0Rpc3Bv c2VkKERlbGVnYXRlKSIgYXR0cnM9IjIxODIiPgorQEAgLTY4NjQxLDcgKzY4Nzg2LDcgQEAKKyAg IDx0ZXN0IG5hbWU9InRlc3QtZGVjbC1leHByLTA1LmNzIj4KKyAgICAgPHR5cGUgbmFtZT0iWCI+ CisgICAgICAgPG1ldGhvZCBuYW1lPSJWb2lkIFRlc3QoU3lzdGVtLlN0cmluZykiIGF0dHJzPSIx MjkiPgorLSAgICAgICAgPHNpemU+Mjk8L3NpemU+CisrICAgICAgICA8c2l6ZT42Mjwvc2l6ZT4K KyAgICAgICA8L21ldGhvZD4KKyAgICAgICA8bWV0aG9kIG5hbWU9IkJvb2xlYW4gQ2FsbChTeXN0 ZW0uU3RyaW5nIEJ5UmVmKSIgYXR0cnM9IjE0NSI+CisgICAgICAgICA8c2l6ZT4xNzwvc2l6ZT4K K0BAIC02ODY1NCw2ICs2ODc5OSwyMiBAQAorICAgICAgIDwvbWV0aG9kPgorICAgICA8L3R5cGU+ CisgICA8L3Rlc3Q+CisrICA8dGVzdCBuYW1lPSJ0ZXN0LWRlY2wtZXhwci0wNi5jcyI+CisrICAg IDx0eXBlIG5hbWU9IkMiPgorKyAgICAgIDxtZXRob2QgbmFtZT0iQm9vbGVhbiBGb28oSW50MzIg QnlSZWYpIiBhdHRycz0iMTQ1Ij4KKysgICAgICAgIDxzaXplPjEzPC9zaXplPgorKyAgICAgIDwv bWV0aG9kPgorKyAgICAgIDxtZXRob2QgbmFtZT0iVm9pZCBNYWluKCkiIGF0dHJzPSIxNTAiPgor KyAgICAgICAgPHNpemU+ODwvc2l6ZT4KKysgICAgICA8L21ldGhvZD4KKysgICAgICA8bWV0aG9k IG5hbWU9IkJvb2xlYW4gJmx0O2YmZ3Q7bV9fMCgpIiBhdHRycz0iMTQ1Ij4KKysgICAgICAgIDxz aXplPjE1PC9zaXplPgorKyAgICAgIDwvbWV0aG9kPgorKyAgICAgIDxtZXRob2QgbmFtZT0iVm9p ZCAuY3RvcigpIiBhdHRycz0iNjI3OCI+CisrICAgICAgICA8c2l6ZT40Mjwvc2l6ZT4KKysgICAg ICA8L21ldGhvZD4KKysgICAgPC90eXBlPgorKyAgPC90ZXN0PgorICAgPHRlc3QgbmFtZT0idGVz dC1kZWZhdWx0LTAxLmNzIj4KKyAgICAgPHR5cGUgbmFtZT0iWCI+CisgICAgICAgPG1ldGhvZCBu YW1lPSJWb2lkIE1haW4oKSIgYXR0cnM9IjE1MCI+CitAQCAtNjg2NzQsNiArNjg4MzUsOSBAQAor ICAgICAgIDxtZXRob2QgbmFtZT0iSW50MzIgJmx0O000Jmd0O21fXzAoKSIgYXR0cnM9IjE0NSI+ CisgICAgICAgICA8c2l6ZT45PC9zaXplPgorICAgICAgIDwvbWV0aG9kPgorKyAgICAgIDxtZXRo b2QgbmFtZT0iVm9pZCBGb28oSUksIElJLCBJSSkiIGF0dHJzPSIxNDUiPgorKyAgICAgICAgPHNp emU+Mjwvc2l6ZT4KKysgICAgICA8L21ldGhvZD4KKyAgICAgPC90eXBlPgorICAgPC90ZXN0Pgor ICAgPHRlc3QgbmFtZT0idGVzdC1kZWZhdWx0LTAyLmNzIj4KK0BAIC02OTE1OCw2ICs2OTMyMiwy MSBAQAorICAgICAgIDwvbWV0aG9kPgorICAgICA8L3R5cGU+CisgICA8L3Rlc3Q+CisrICA8dGVz dCBuYW1lPSJ0ZXN0LWZpeGVkLTAxLmNzIj4KKysgICAgPHR5cGUgbmFtZT0iQyI+CisrICAgICAg PG1ldGhvZCBuYW1lPSJWb2lkIE1haW4oKSIgYXR0cnM9IjE1MCI+CisrICAgICAgICA8c2l6ZT4z OTwvc2l6ZT4KKysgICAgICA8L21ldGhvZD4KKysgICAgICA8bWV0aG9kIG5hbWU9IlZvaWQgLmN0 b3IoKSIgYXR0cnM9IjYyNzgiPgorKyAgICAgICAgPHNpemU+Nzwvc2l6ZT4KKysgICAgICA8L21l dGhvZD4KKysgICAgPC90eXBlPgorKyAgICA8dHlwZSBuYW1lPSJDK0ZpeGFibGUiPgorKyAgICAg IDxtZXRob2QgbmFtZT0iSW50MzImYW1wOyBHZXRQaW5uYWJsZVJlZmVyZW5jZSgpIiBhdHRycz0i MTM0Ij4KKysgICAgICAgIDxzaXplPjMyPC9zaXplPgorKyAgICAgIDwvbWV0aG9kPgorKyAgICA8 L3R5cGU+CisrICA8L3Rlc3Q+CisgICA8dGVzdCBuYW1lPSJ0ZXN0LWludGVycG9sYXRpb24tMDEu Y3MiPgorICAgICA8dHlwZSBuYW1lPSJUZXN0Ij4KKyAgICAgICA8bWV0aG9kIG5hbWU9IkludDMy IE1haW4oKSIgYXR0cnM9IjE1MCI+CitAQCAtNzI1NjQsNyArNzI3NDMsNyBAQAorICAgICA8L3R5 cGU+CisgICAgIDx0eXBlIG5hbWU9IlgrJmx0O1Rlc3QmZ3Q7Y19fSXRlcmF0b3IwIj4KKyAgICAg ICA8bWV0aG9kIG5hbWU9IkJvb2xlYW4gTW92ZU5leHQoKSIgYXR0cnM9IjQ4NiI+CistICAgICAg ICA8c2l6ZT4xODQ8L3NpemU+CisrICAgICAgICA8c2l6ZT4yMDY8L3NpemU+CisgICAgICAgPC9t ZXRob2Q+CisgICAgICAgPG1ldGhvZCBuYW1lPSJJbnQzMiBTeXN0ZW0uQ29sbGVjdGlvbnMuR2Vu ZXJpYy5JRW51bWVyYXRvciZsdDtpbnQmZ3Q7LmdldF9DdXJyZW50KCkiIGF0dHJzPSIyNTI5Ij4K KyAgICAgICAgIDxzaXplPjE0PC9zaXplPgorQEAgLTcyNzUwLDYgKzcyOTI5LDIxIEBACisgICAg ICAgPC9tZXRob2Q+CisgICAgIDwvdHlwZT4KKyAgIDwvdGVzdD4KKysgIDx0ZXN0IG5hbWU9InRl c3QtcGF0dGVybi0xMy5jcyI+CisrICAgIDx0eXBlIG5hbWU9IkMiPgorKyAgICAgIDxtZXRob2Qg bmFtZT0iVm9pZCAuY3RvcigpIiBhdHRycz0iNjI3OCI+CisrICAgICAgICA8c2l6ZT43PC9zaXpl PgorKyAgICAgIDwvbWV0aG9kPgorKyAgICA8L3R5cGU+CisrICAgIDx0eXBlIG5hbWU9IkIiPgor KyAgICAgIDxtZXRob2QgbmFtZT0iVm9pZCBNYWluKCkiIGF0dHJzPSIxNTAiPgorKyAgICAgICAg PHNpemU+MzU8L3NpemU+CisrICAgICAgPC9tZXRob2Q+CisrICAgICAgPG1ldGhvZCBuYW1lPSJW b2lkIC5jdG9yKCkiIGF0dHJzPSI2Mjc4Ij4KKysgICAgICAgIDxzaXplPjc8L3NpemU+CisrICAg ICAgPC9tZXRob2Q+CisrICAgIDwvdHlwZT4KKysgIDwvdGVzdD4KKyAgIDx0ZXN0IG5hbWU9InRl c3QtcHJhZ21hLXVucmVjb2duaXplZC5jcyI+CisgICAgIDx0eXBlIG5hbWU9IkMiPgorICAgICAg IDxtZXRob2QgbmFtZT0iVm9pZCBNYWluKCkiIGF0dHJzPSIxNTAiPgorQEAgLTczMTU1LDYgKzcz MzQ5LDExIEBACisgICAgIDwvdHlwZT4KKyAgIDwvdGVzdD4KKyAgIDx0ZXN0IG5hbWU9InRlc3Qt cmVmLTA3LmNzIj4KKysgICAgPHR5cGUgbmFtZT0iVGVzdE1haW4iPgorKyAgICAgIDxtZXRob2Qg bmFtZT0iVm9pZCBNYWluKCkiIGF0dHJzPSIxNTAiPgorKyAgICAgICAgPHNpemU+Njwvc2l6ZT4K KysgICAgICA8L21ldGhvZD4KKysgICAgPC90eXBlPgorICAgICA8dHlwZSBuYW1lPSJUZXN0Ij4K KyAgICAgICA8bWV0aG9kIG5hbWU9IlZvaWQgTWFpbigpIiBhdHRycz0iMTUwIj4KKyAgICAgICAg IDxzaXplPjE4PC9zaXplPgorQEAgLTczMjQzLDYgKzczNDQyLDMyIEBACisgICAgICAgPC9tZXRo b2Q+CisgICAgIDwvdHlwZT4KKyAgIDwvdGVzdD4KKysgIDx0ZXN0IG5hbWU9InRlc3QtcmVmLTEx LmNzIj4KKysgICAgPHR5cGUgbmFtZT0iUHJvZ3JhbSI+CisrICAgICAgPG1ldGhvZCBuYW1lPSJJ bnQzMiBNYWluKCkiIGF0dHJzPSIxNTAiPgorKyAgICAgICAgPHNpemU+MzQ8L3NpemU+CisrICAg ICAgPC9tZXRob2Q+CisrICAgICAgPG1ldGhvZCBuYW1lPSJWb2lkIC5jdG9yKCkiIGF0dHJzPSI2 Mjc4Ij4KKysgICAgICAgIDxzaXplPjc8L3NpemU+CisrICAgICAgPC9tZXRob2Q+CisrICAgIDwv dHlwZT4KKysgIDwvdGVzdD4KKysgIDx0ZXN0IG5hbWU9InRlc3QtcmVmLTEyLmNzIj4KKysgICAg PHR5cGUgbmFtZT0iWCI+CisrICAgICAgPG1ldGhvZCBuYW1lPSJWb2lkIE1haW4oKSIgYXR0cnM9 IjE1MCI+CisrICAgICAgICA8c2l6ZT4xNjwvc2l6ZT4KKysgICAgICA8L21ldGhvZD4KKysgICAg ICA8bWV0aG9kIG5hbWU9IkludDMyJmFtcDsgRm9vKEJ5dGUgQnlSZWYpIiBhdHRycz0iMTQ1Ij4K KysgICAgICAgIDxzaXplPjE0PC9zaXplPgorKyAgICAgIDwvbWV0aG9kPgorKyAgICAgIDxtZXRo b2QgbmFtZT0iVm9pZCBCYXIoSW50MzIgQnlSZWYpIiBhdHRycz0iMTQ1Ij4KKysgICAgICAgIDxz aXplPjI8L3NpemU+CisrICAgICAgPC9tZXRob2Q+CisrICAgICAgPG1ldGhvZCBuYW1lPSJWb2lk IC5jdG9yKCkiIGF0dHJzPSI2Mjc4Ij4KKysgICAgICAgIDxzaXplPjc8L3NpemU+CisrICAgICAg PC9tZXRob2Q+CisrICAgIDwvdHlwZT4KKysgIDwvdGVzdD4KKyAgIDx0ZXN0IG5hbWU9InRlc3Qt c3RhdGljLXVzaW5nLTAxLmNzIj4KKyAgICAgPHR5cGUgbmFtZT0iQS5CLlgiPgorICAgICAgIDxt ZXRob2QgbmFtZT0iSW50MzIgVGVzdCgpIiBhdHRycz0iMTUwIj4KK0BAIC03MzQ4Miw3ICs3Mzcw Nyw3IEBACisgICAgICAgICA8c2l6ZT4zMjwvc2l6ZT4KKyAgICAgICA8L21ldGhvZD4KKyAgICAg ICA8bWV0aG9kIG5hbWU9IkludDMyIFRlc3QoKSIgYXR0cnM9IjEzNCI+CistICAgICAgICA8c2l6 ZT4xMDwvc2l6ZT4KKysgICAgICAgIDxzaXplPjI8L3NpemU+CisgICAgICAgPC9tZXRob2Q+Cisg ICAgICAgPG1ldGhvZCBuYW1lPSJTeXN0ZW0uT2JqZWN0IEZvbygpIiBhdHRycz0iMTI5Ij4KKyAg ICAgICAgIDxzaXplPjEwPC9zaXplPgorQEAgLTczNDkxLDE2ICs3MzcxNiwxNiBAQAorICAgICAg ICAgPHNpemU+MjM8L3NpemU+CisgICAgICAgPC9tZXRob2Q+CisgICAgICAgPG1ldGhvZCBuYW1l PSJWb2lkIFRlc3QzKEludDMyIEJ5UmVmKSIgYXR0cnM9IjE0NSI+CistICAgICAgICA8c2l6ZT4z PC9zaXplPgorKyAgICAgICAgPHNpemU+Mjwvc2l6ZT4KKyAgICAgICA8L21ldGhvZD4KKyAgICAg ICA8bWV0aG9kIG5hbWU9IkludDMyIGdldF9JdGVtKEludDMyKSIgYXR0cnM9IjIxNzciPgorLSAg ICAgICAgPHNpemU+MTA8L3NpemU+CisrICAgICAgICA8c2l6ZT4yPC9zaXplPgorICAgICAgIDwv bWV0aG9kPgorICAgICAgIDxtZXRob2QgbmFtZT0iVm9pZCBhZGRfRXZlbnQoU3lzdGVtLkFjdGlv bikiIGF0dHJzPSIyMTgyIj4KKy0gICAgICAgIDxzaXplPjM8L3NpemU+CisrICAgICAgICA8c2l6 ZT4yPC9zaXplPgorICAgICAgIDwvbWV0aG9kPgorICAgICAgIDxtZXRob2QgbmFtZT0iVm9pZCBy ZW1vdmVfRXZlbnQoU3lzdGVtLkFjdGlvbikiIGF0dHJzPSIyMTgyIj4KKy0gICAgICAgIDxzaXpl PjM8L3NpemU+CisrICAgICAgICA8c2l6ZT4yPC9zaXplPgorICAgICAgIDwvbWV0aG9kPgorICAg ICAgIDxtZXRob2QgbmFtZT0iVm9pZCBUZXN0RXhwcl8xKEJvb2xlYW4pIiBhdHRycz0iMTI5Ij4K KyAgICAgICAgIDxzaXplPjIxPC9zaXplPgorQEAgLTczNTI3LDcgKzczNzUyLDcgQEAKKyAgICAg ICAgIDxzaXplPjc8L3NpemU+CisgICAgICAgPC9tZXRob2Q+CisgICAgICAgPG1ldGhvZCBuYW1l PSJJbnQzMiBUZXN0RXhwcl82KEludDMyIEJ5UmVmKSIgYXR0cnM9IjE0NSI+CistICAgICAgICA8 c2l6ZT4xMDwvc2l6ZT4KKysgICAgICAgIDxzaXplPjI8L3NpemU+CisgICAgICAgPC9tZXRob2Q+ CisgICAgICAgPG1ldGhvZCBuYW1lPSJJbnQzMiBUZXN0RXhwcl83KEludDMyIEJ5UmVmKSIgYXR0 cnM9IjEyOSI+CisgICAgICAgICA8c2l6ZT4xNTwvc2l6ZT4KK0BAIC03MzU2OSw3ICs3Mzc5NCw3 IEBACisgICA8dGVzdCBuYW1lPSJ0ZXN0LXR1cGxlLTAyLmNzIj4KKyAgICAgPHR5cGUgbmFtZT0i VHVwbGVDb252ZXJzaW9ucyI+CisgICAgICAgPG1ldGhvZCBuYW1lPSJWb2lkIE1haW4oKSIgYXR0 cnM9IjE1MCI+CistICAgICAgICA8c2l6ZT4zMTQ8L3NpemU+CisrICAgICAgICA8c2l6ZT4zNjg8 L3NpemU+CisgICAgICAgPC9tZXRob2Q+CisgICAgICAgPG1ldGhvZCBuYW1lPSJWb2lkIEZvb1tU XShUKSIgYXR0cnM9IjE0NSI+CisgICAgICAgICA8c2l6ZT4yPC9zaXplPgorQEAgLTczNzYxLDYg KzczOTg2LDI5IEBACisgICAgICAgPC9tZXRob2Q+CisgICAgIDwvdHlwZT4KKyAgIDwvdGVzdD4K KysgIDx0ZXN0IG5hbWU9InRlc3QtdHVwbGUtMTAuY3MiPgorKyAgICA8dHlwZSBuYW1lPSJQcm9n cmFtIj4KKysgICAgICA8bWV0aG9kIG5hbWU9IkludDMyIE1haW4oKSIgYXR0cnM9IjE1MCI+Cisr ICAgICAgICA8c2l6ZT42NTwvc2l6ZT4KKysgICAgICA8L21ldGhvZD4KKysgICAgICA8bWV0aG9k IG5hbWU9IlN5c3RlbS5WYWx1ZVR1cGxlYDJbU3lzdGVtLlN0cmluZyxTeXN0ZW0uSW50MzJdICZs dDtNYWluJmd0O21fXzAoU3lzdGVtLlJlZmxlY3Rpb24uRmllbGRJbmZvKSIgYXR0cnM9IjE0NSI+ CisrICAgICAgICA8c2l6ZT4yMTwvc2l6ZT4KKysgICAgICA8L21ldGhvZD4KKysgICAgICA8bWV0 aG9kIG5hbWU9IlZvaWQgLmN0b3IoKSIgYXR0cnM9IjYyNzgiPgorKyAgICAgICAgPHNpemU+Nzwv c2l6ZT4KKysgICAgICA8L21ldGhvZD4KKysgICAgPC90eXBlPgorKyAgPC90ZXN0PgorKyAgPHRl c3QgbmFtZT0idGVzdC10dXBsZS0xMS5jcyI+CisrICAgIDx0eXBlIG5hbWU9IlByb2dyYW0iPgor KyAgICAgIDxtZXRob2QgbmFtZT0iSW50MzIgTWFpbigpIiBhdHRycz0iMTUwIj4KKysgICAgICAg IDxzaXplPjcwPC9zaXplPgorKyAgICAgIDwvbWV0aG9kPgorKyAgICAgIDxtZXRob2QgbmFtZT0i Vm9pZCAuY3RvcigpIiBhdHRycz0iNjI3OCI+CisrICAgICAgICA8c2l6ZT43PC9zaXplPgorKyAg ICAgIDwvbWV0aG9kPgorKyAgICA8L3R5cGU+CisrICA8L3Rlc3Q+CisgICA8dGVzdCBuYW1lPSJ0 ZXN0LXZhci0wMS5jcyI+CisgICAgIDx0eXBlIG5hbWU9IlRlc3QiPgorICAgICAgIDxtZXRob2Qg bmFtZT0iSW50MzIgTWFpbigpIiBhdHRycz0iMTUwIj4KK0BAIC03Mzg5Niw0ICs3NDE0NCw0IEBA CisgICAgICAgPC9tZXRob2Q+CisgICAgIDwvdHlwZT4KKyAgIDwvdGVzdD4KKy08L3Rlc3RzPgor XCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCisrPC90ZXN0cz4KK2RpZmYgLS1naXQgYS9tc3Zj L3NjcmlwdHMvU3lzdGVtLldlYi5wcmUgYi9tc3ZjL3NjcmlwdHMvU3lzdGVtLldlYi5wcmUKK2lu ZGV4IGMwNzFiZjQ1YmZkLi44ZjhkMjYyNTk3ZiAxMDA2NDQKKy0tLSBhL21zdmMvc2NyaXB0cy9T eXN0ZW0uV2ViLnByZQorKysrIGIvbXN2Yy9zY3JpcHRzL1N5c3RlbS5XZWIucHJlCitAQCAtMSAr MSBAQAorLUBNT05PQCAkKFByb2plY3REaXIpXC4uXGxpYlxuZXRfNF94XGN1bGV2ZWwuZXhlIC1v ICQoUHJvamVjdERpcilcU3lzdGVtLldlYlxVcGxldmVsSGVscGVyLmNzICQoUHJvamVjdERpcilc VXBsZXZlbEhlbHBlckRlZmluaXRpb25zLnhtbAorK0BNT05PQCAkKFtNU0J1aWxkXTo6R2V0RGly ZWN0b3J5TmFtZU9mRmlsZUFib3ZlKCQoVGFyZ2V0RGlyKSwgY3VsZXZlbC5leGUpKVxjdWxldmVs LmV4ZSAtbyAkKFByb2plY3REaXIpXFN5c3RlbS5XZWJcVXBsZXZlbEhlbHBlci5jcyAkKFByb2pl Y3REaXIpXFVwbGV2ZWxIZWxwZXJEZWZpbml0aW9ucy54bWwKK2RpZmYgLS1naXQgYS9tc3ZjL3Nj cmlwdHMvY3Nwcm9qLnRtcGwgYi9tc3ZjL3NjcmlwdHMvY3Nwcm9qLnRtcGwKK2luZGV4IDY0MmM5 NTM3MzIxLi5jMThiNTFkMzM0ZSAxMDA2NDQKKy0tLSBhL21zdmMvc2NyaXB0cy9jc3Byb2oudG1w bAorKysrIGIvbXN2Yy9zY3JpcHRzL2NzcHJvai50bXBsCitAQCAtMTcsNiArMTcsNyBAQAorICAg ICA8SW50ZXJtZWRpYXRlT3V0cHV0UGF0aD5vYmotQE9VVFBVVFNVRkZJWEA8L0ludGVybWVkaWF0 ZU91dHB1dFBhdGg+DQorICAgICA8R2VuZXJhdGVUYXJnZXRGcmFtZXdvcmtBdHRyaWJ1dGU+ZmFs c2U8L0dlbmVyYXRlVGFyZ2V0RnJhbWV3b3JrQXR0cmlidXRlPg0KKyAgICAgQE5PU1RETElCQA0K KysgICAgQE1FVEFEQVRBVkVSU0lPTkANCisgICAgIEBTVEFSVFVQT0JKRUNUQA0KKyAgICAgQE5P Q09ORklHQA0KKyAgICAgQEFMTE9XVU5TQUZFQA0KK2RpZmYgLS1naXQgYS9tc3ZjL3NjcmlwdHMv Z2VucHJvai5jcyBiL21zdmMvc2NyaXB0cy9nZW5wcm9qLmNzCitpbmRleCAzOTg3YWJiMjEyYi4u MTQ0MDgwMGIyYjMgMTAwNjQ0CistLS0gYS9tc3ZjL3NjcmlwdHMvZ2VucHJvai5jcworKysrIGIv bXN2Yy9zY3JpcHRzL2dlbnByb2ouY3MKK0BAIC0yNywyNyArMjcsNDMgQEAgcHVibGljIGVudW0g VGFyZ2V0IHsKKyAKKyBjbGFzcyBTbG5HZW5lcmF0b3IgeworIAlwdWJsaWMgc3RhdGljIHJlYWRv bmx5IHN0cmluZyBOZXdMaW5lID0gIlxyXG4iOyAvL0Vudmlyb25tZW50Lk5ld0xpbmU7IC8vICJc biI7IAorLQlwdWJsaWMgU2xuR2VuZXJhdG9yIChzdHJpbmcgZm9ybWF0VmVyc2lvbiA9ICIyMDEy IikKKysJcHVibGljIFNsbkdlbmVyYXRvciAoc3RyaW5nIHNsblZlcnNpb24pCisgCXsKKy0JCXN3 aXRjaCAoZm9ybWF0VmVyc2lvbikgeworLQkJY2FzZSAiMjAwOCI6CistCQkJdGhpcy5oZWFkZXIg PSBNYWtlSGVhZGVyICgiMTAuMDAiLCAiMjAwOCIpOworLQkJCWJyZWFrOworLQkJZGVmYXVsdDoK Ky0JCQl0aGlzLmhlYWRlciA9IE1ha2VIZWFkZXIgKCIxMi4wMCIsICIyMDEyIik7CistCQkJYnJl YWs7CistCQl9CisrCQlDb25zb2xlLldyaXRlTGluZSgiUmVxdWVzdGVkIHNsbiB2ZXJzaW9uIGlz IHswfSIsIHNsblZlcnNpb24pOworKwkJdGhpcy5oZWFkZXIgPSBNYWtlSGVhZGVyICgiMTIuMDAi LCAiMTUiLCAiMTUuMC4wLjAiKTsKKyAJfQorIAorLQljb25zdCBzdHJpbmcgcHJvamVjdF9zdGFy dCA9ICJQcm9qZWN0KFwie3tGQUUwNEVDMC0zMDFGLTExRDMtQkY0Qi0wMEMwNEY3OUVGQkN9fVwi KSA9IFwiezB9XCIsIFwiezF9XCIsIFwiezJ9XCIiOyAvLyBOb3RlOiBObyBuZWVkIHRvIGRvdWJs ZSB1cCBvbiB7fSBhcm91bmQgezJ9CisrCWNvbnN0IHN0cmluZyBwcm9qZWN0X3N0YXJ0ID0gIlBy b2plY3QoXCJ7MH1cIikgPSBcInsxfVwiLCBcInsyfVwiLCBcInszfVwiIjsgLy8gTm90ZTogTm8g bmVlZCB0byBkb3VibGUgdXAgb24ge30gYXJvdW5kIHsyfQorIAljb25zdCBzdHJpbmcgcHJvamVj dF9lbmQgPSAiRW5kUHJvamVjdCI7CisgCisrCXB1YmxpYyBMaXN0PHN0cmluZz4gcHJvZmlsZXMg PSBuZXcgTGlzdDxzdHJpbmc+IHsKKysJCSJuZXRfNF94IiwKKysJCSJtb25vZHJvaWQiLAorKwkJ Im1vbm90b3VjaCIsCisrCQkibW9ub3RvdWNoX3R2IiwKKysJCSJtb25vdG91Y2hfd2F0Y2giLAor KwkJIm9yYmlzIiwKKysJCSJ1bnJlYWwiLAorKwkJIndhc20iLAorKwkJIndpbmFvdCIsCisrCQki eGFtbWFjIiwKKysJfTsKKysKKysJY29uc3Qgc3RyaW5nIGpheV92Y3hwcm9qX2d1aWQgPSAiezVE NDg1RDMyLTNCOUYtNDI4Ny1BQjI0LUM4REE1Qjg5RjUzN30iOworKwljb25zdCBzdHJpbmcgamF5 X3Nsbl9ndWlkID0gIns4QkM5Q0VCOC04QjRBLTExRDAtOEQxMS0wMEEwQzkxQkM5NDJ9IjsKKysK KyAJcHVibGljIExpc3Q8TXNidWlsZEdlbmVyYXRvci5Wc0NzcHJvaj4gbGlicmFyaWVzID0gbmV3 IExpc3Q8TXNidWlsZEdlbmVyYXRvci5Wc0NzcHJvaj4gKCk7CisgCXN0cmluZyBoZWFkZXI7Cisg CistCXN0cmluZyBNYWtlSGVhZGVyIChzdHJpbmcgZm9ybWF0VmVyc2lvbiwgc3RyaW5nIHllYXJU YWcpCisrCXN0cmluZyBNYWtlSGVhZGVyIChzdHJpbmcgZm9ybWF0VmVyc2lvbiwgc3RyaW5nIHll YXJUYWcsIHN0cmluZyBtaW5pbXVtVmVyc2lvbikKKyAJeworLQkJcmV0dXJuIHN0cmluZy5Gb3Jt YXQgKCJNaWNyb3NvZnQgVmlzdWFsIFN0dWRpbyBTb2x1dGlvbiBGaWxlLCBGb3JtYXQgVmVyc2lv biB7MH0iICsgTmV3TGluZSArICIjIFZpc3VhbCBTdHVkaW8gezF9IiwgZm9ybWF0VmVyc2lvbiwg eWVhclRhZyk7CisrCQlyZXR1cm4gc3RyaW5nLkZvcm1hdCAoCisrCQkJIk1pY3Jvc29mdCBWaXN1 YWwgU3R1ZGlvIFNvbHV0aW9uIEZpbGUsIEZvcm1hdCBWZXJzaW9uIHswfSIgKyBOZXdMaW5lICsg CisrCQkJIiMgVmlzdWFsIFN0dWRpbyB7MX0iICsgTmV3TGluZSArIAorKwkJCSJNaW5pbXVtVmlz dWFsU3R1ZGlvVmVyc2lvbiA9IHsyfSIsIAorKwkJCWZvcm1hdFZlcnNpb24sIHllYXJUYWcsCisr CQkJbWluaW11bVZlcnNpb24KKysJCSk7CisgCX0KKyAKKyAJcHVibGljIHZvaWQgQWRkIChNc2J1 aWxkR2VuZXJhdG9yLlZzQ3Nwcm9qIHZzcHJvaikKK0BAIC01OSw2ICs3NSw0MCBAQCBjbGFzcyBT bG5HZW5lcmF0b3IgeworIAkJfQorIAl9CisgCisrCXByaXZhdGUgdm9pZCBXcml0ZVByb2plY3RS ZWZlcmVuY2UgKFN0cmVhbVdyaXRlciBzbG4sIHN0cmluZyBwcmVmaXhHdWlkLCBzdHJpbmcgbGli cmFyeSwgc3RyaW5nIHJlbGF0aXZlUGF0aCwgc3RyaW5nIHByb2plY3RHdWlkLCBwYXJhbXMgc3Ry aW5nW10gZGVwZW5kZW5jeUd1aWRzKQorKwl7CisrCQlzbG4uV3JpdGVMaW5lIChwcm9qZWN0X3N0 YXJ0LCBwcmVmaXhHdWlkLCBsaWJyYXJ5LCByZWxhdGl2ZVBhdGgsIHByb2plY3RHdWlkKTsKKysK KysJCWZvcmVhY2ggKHZhciBndWlkIGluIGRlcGVuZGVuY3lHdWlkcykgeworKyAgICAJCXNsbi5X cml0ZUxpbmUgKCIgICAgUHJvamVjdFNlY3Rpb24oUHJvamVjdERlcGVuZGVuY2llcykgPSBwb3N0 UHJvamVjdCIpOworKyAgICAJCXNsbi5Xcml0ZUxpbmUgKCIgICAgICAgIHswfSA9IHswfSIsIGd1 aWQpOworKyAgICAJCXNsbi5Xcml0ZUxpbmUgKCIgICAgRW5kUHJvamVjdFNlY3Rpb24iKTsKKysJ CX0KKysKKysJCXNsbi5Xcml0ZUxpbmUgKHByb2plY3RfZW5kKTsKKysJfQorKworKwlwcml2YXRl IHZvaWQgV3JpdGVQcm9qZWN0UmVmZXJlbmNlIChTdHJlYW1Xcml0ZXIgc2xuLCBzdHJpbmcgc2xu RnVsbFBhdGgsIE1zYnVpbGRHZW5lcmF0b3IuVnNDc3Byb2ogcHJvaikKKysJeworKwkJdmFyIHVu aXhQcm9qRmlsZSA9IHByb2ouY3NQcm9qRmlsZW5hbWUuUmVwbGFjZSAoIlxcIiwgIi8iKTsKKysJ CXZhciBmdWxsUHJvalBhdGggPSBQYXRoLkdldEZ1bGxQYXRoICh1bml4UHJvakZpbGUpOworKwkJ dmFyIHJlbGF0aXZlUGF0aCA9IE1zYnVpbGRHZW5lcmF0b3IuR2V0UmVsYXRpdmVQYXRoIChzbG5G dWxsUGF0aCwgZnVsbFByb2pQYXRoKTsKKysJCXZhciBkZXBlbmRlbmN5R3VpZHMgPSBuZXcgc3Ry aW5nWzBdOworKwkJaWYgKHByb2oucHJlQnVpbGRFdmVudC5Db250YWlucyAoImpheSIpKQorKwkJ CWRlcGVuZGVuY3lHdWlkcyA9IG5ldyBbXSB7IGpheV92Y3hwcm9qX2d1aWQgfTsKKysJCVdyaXRl UHJvamVjdFJlZmVyZW5jZShzbG4sICJ7RkFFMDRFQzAtMzAxRi0xMUQzLUJGNEItMDBDMDRGNzlF RkJDfSIsIHByb2oubGlicmFyeSwgcmVsYXRpdmVQYXRoLCBwcm9qLnByb2plY3RHdWlkLCBkZXBl bmRlbmN5R3VpZHMpOworKwl9CisrCisrCXByaXZhdGUgdm9pZCBXcml0ZVByb2plY3RDb25maWd1 cmF0aW9uUGxhdGZvcm1zIChTdHJlYW1Xcml0ZXIgc2xuLCBzdHJpbmcgZ3VpZCwgc3RyaW5nIHBs YXRmb3JtVG9CdWlsZCkKKysJeworKwkJZm9yZWFjaCAodmFyIHByb2ZpbGUgaW4gcHJvZmlsZXMp IHsKKysJCQlzbG4uV3JpdGVMaW5lICgiXHRcdHswfS5EZWJ1Z3x7MX0uQWN0aXZlQ2ZnID0gRGVi dWd8ezJ9IiwgZ3VpZCwgcHJvZmlsZSwgcGxhdGZvcm1Ub0J1aWxkKTsKKysJCQlzbG4uV3JpdGVM aW5lICgiXHRcdHswfS5EZWJ1Z3x7MX0uQnVpbGQuMCA9IERlYnVnfHsyfSIsIGd1aWQsIHByb2Zp bGUsIHBsYXRmb3JtVG9CdWlsZCk7CisrCQkJc2xuLldyaXRlTGluZSAoIlx0XHR7MH0uUmVsZWFz ZXx7MX0uQWN0aXZlQ2ZnID0gUmVsZWFzZXx7Mn0iLCBndWlkLCBwcm9maWxlLCBwbGF0Zm9ybVRv QnVpbGQpOworKwkJCXNsbi5Xcml0ZUxpbmUgKCJcdFx0ezB9LlJlbGVhc2V8ezF9LkJ1aWxkLjAg PSBSZWxlYXNlfHsyfSIsIGd1aWQsIHByb2ZpbGUsIHBsYXRmb3JtVG9CdWlsZCk7CisrCQl9Cisr CX0KKysKKyAJcHVibGljIHZvaWQgV3JpdGUgKHN0cmluZyBmaWxlbmFtZSkKKyAJeworIAkJdmFy IGZ1bGxQYXRoID0gUGF0aC5HZXREaXJlY3RvcnlOYW1lIChmaWxlbmFtZSkgKyAiLyI7CitAQCAt NjYsMjcgKzExNiwzMiBAQCBjbGFzcyBTbG5HZW5lcmF0b3IgeworIAkJdXNpbmcgKHZhciBzbG4g PSBuZXcgU3RyZWFtV3JpdGVyIChmaWxlbmFtZSkpIHsKKyAJCQlzbG4uV3JpdGVMaW5lICgpOwor IAkJCXNsbi5Xcml0ZUxpbmUgKGhlYWRlcik7CisrCisrCQkJLy8gTWFudWFsbHkgaW5zZXJ0IGph eSdzIHZjeHByb2ouIFdlIGRlcGVuZCBvbiBqYXkuZXhlIHRvIHBlcmZvcm0gYnVpbGQgc3RlcHMg bGF0ZXIuCisrCQkJV3JpdGVQcm9qZWN0UmVmZXJlbmNlIChzbG4sIGpheV9zbG5fZ3VpZCwgImph eSIsICJtY3NcXGpheVxcamF5LnZjeHByb2oiLCBqYXlfdmN4cHJval9ndWlkKTsKKysKKyAJCQlm b3JlYWNoICh2YXIgcHJvaiBpbiBsaWJyYXJpZXMpIHsKKy0JCQkJdmFyIHVuaXhQcm9qRmlsZSA9 IHByb2ouY3NQcm9qRmlsZW5hbWUuUmVwbGFjZSAoIlxcIiwgIi8iKTsKKy0JCQkJdmFyIGZ1bGxQ cm9qUGF0aCA9IFBhdGguR2V0RnVsbFBhdGggKHVuaXhQcm9qRmlsZSk7CistCQkJCXNsbi5Xcml0 ZUxpbmUgKHByb2plY3Rfc3RhcnQsIHByb2oubGlicmFyeSwgTXNidWlsZEdlbmVyYXRvci5HZXRS ZWxhdGl2ZVBhdGggKGZ1bGxQYXRoLCBmdWxsUHJvalBhdGgpLCBwcm9qLnByb2plY3RHdWlkKTsK Ky0JCQkJc2xuLldyaXRlTGluZSAocHJvamVjdF9lbmQpOworKwkJCQlXcml0ZVByb2plY3RSZWZl cmVuY2UgKHNsbiwgZnVsbFBhdGgsIHByb2opOworIAkJCX0KKysKKyAJCQlzbG4uV3JpdGVMaW5l ICgiR2xvYmFsIik7CisgCisgCQkJc2xuLldyaXRlTGluZSAoIlx0R2xvYmFsU2VjdGlvbihTb2x1 dGlvbkNvbmZpZ3VyYXRpb25QbGF0Zm9ybXMpID0gcHJlU29sdXRpb24iKTsKKy0JCQlzbG4uV3Jp dGVMaW5lICgiXHRcdERlYnVnfEFueSBDUFUgPSBEZWJ1Z3xBbnkgQ1BVIik7CistCQkJc2xuLldy aXRlTGluZSAoIlx0XHRSZWxlYXNlfEFueSBDUFUgPSBSZWxlYXNlfEFueSBDUFUiKTsKKysJCQlm b3JlYWNoICh2YXIgcHJvZmlsZSBpbiBwcm9maWxlcykgeworKwkJCQlzbG4uV3JpdGVMaW5lICgi XHRcdERlYnVnfHswfSA9IERlYnVnfHswfSIsIHByb2ZpbGUpOworKwkJCQlzbG4uV3JpdGVMaW5l ICgiXHRcdFJlbGVhc2V8ezB9ID0gUmVsZWFzZXx7MH0iLCBwcm9maWxlKTsKKysJCQl9CisgCQkJ c2xuLldyaXRlTGluZSAoIlx0RW5kR2xvYmFsU2VjdGlvbiIpOworIAorIAkJCXNsbi5Xcml0ZUxp bmUgKCJcdEdsb2JhbFNlY3Rpb24oUHJvamVjdENvbmZpZ3VyYXRpb25QbGF0Zm9ybXMpID0gcG9z dFNvbHV0aW9uIik7CisrCisrCQkJLy8gTWFudWFsbHkgaW5zZXJ0IGpheSdzIGNvbmZpZ3VyYXRp b25zIGJlY2F1c2UgdGhleSBhcmUgZGlmZmVyZW50CisrCQkJV3JpdGVQcm9qZWN0Q29uZmlndXJh dGlvblBsYXRmb3JtcyAoc2xuLCBqYXlfdmN4cHJval9ndWlkLCAiV2luMzIiKTsKKysKKyAJCQlm b3JlYWNoICh2YXIgcHJvaiBpbiBsaWJyYXJpZXMpIHsKKy0JCQkJdmFyIGd1aWQgPSBwcm9qLnBy b2plY3RHdWlkOworLQkJCQlzbG4uV3JpdGVMaW5lICgiXHRcdHswfS5EZWJ1Z3xBbnkgQ1BVLkFj dGl2ZUNmZyA9IERlYnVnfEFueSBDUFUiLCBndWlkKTsKKy0JCQkJc2xuLldyaXRlTGluZSAoIlx0 XHR7MH0uRGVidWd8QW55IENQVS5CdWlsZC4wID0gRGVidWd8QW55IENQVSIsIGd1aWQpOworLQkJ CQlzbG4uV3JpdGVMaW5lICgiXHRcdHswfS5SZWxlYXNlfEFueSBDUFUuQWN0aXZlQ2ZnID0gUmVs ZWFzZXxBbnkgQ1BVIiwgZ3VpZCk7CistCQkJCXNsbi5Xcml0ZUxpbmUgKCJcdFx0ezB9LlJlbGVh c2V8QW55IENQVS5CdWlsZC4wID0gUmVsZWFzZXxBbnkgQ1BVIiwgZ3VpZCk7CisrCQkJCVdyaXRl UHJvamVjdENvbmZpZ3VyYXRpb25QbGF0Zm9ybXMgKHNsbiwgcHJvai5wcm9qZWN0R3VpZCwgIkFu eSBDUFUiKTsKKyAJCQl9CisrCisgCQkJc2xuLldyaXRlTGluZSAoIlx0RW5kR2xvYmFsU2VjdGlv biIpOworIAorIAkJCXNsbi5Xcml0ZUxpbmUgKCJcdEdsb2JhbFNlY3Rpb24oU29sdXRpb25Qcm9w ZXJ0aWVzKSA9IHByZVNvbHV0aW9uIik7CitAQCAtNjM0LDYgKzY4OSw3IEBAIGNsYXNzIE1zYnVp bGRHZW5lcmF0b3IgeworIAkJcHVibGljIExpc3Q8VnNDc3Byb2o+IHByb2pSZWZlcmVuY2VzID0g bmV3IExpc3Q8VnNDc3Byb2o+ICgpOworIAkJcHVibGljIHN0cmluZyBsaWJyYXJ5OworIAkJcHVi bGljIE1zYnVpbGRHZW5lcmF0b3IgTXNidWlsZEdlbmVyYXRvcjsKKysJCXB1YmxpYyBzdHJpbmcg cHJlQnVpbGRFdmVudCwgcG9zdEJ1aWxkRXZlbnQ7CisgCX0KKyAKKyAJcHVibGljIFZzQ3Nwcm9q IENzcHJvajsKK0BAIC02ODIsNyArNzM4LDcgQEAgY2xhc3MgTXNidWlsZEdlbmVyYXRvciB7Cisg CQkJCWZ4X3ZlcnNpb24gPSAiNC4wIjsKKyAJCQkJcHJvZmlsZSA9ICJuZXRfNF8wIjsKKyAJCQl9 IGVsc2UgaWYgKHJlc3BvbnNlLkNvbnRhaW5zIChwcm9maWxlXzRfeCkpIHsKKy0JCQkJZnhfdmVy c2lvbiA9ICI0LjUiOworKwkJCQlmeF92ZXJzaW9uID0gIjQuNi4yIjsKKyAJCQkJcHJvZmlsZSA9 ICJuZXRfNF94IjsKKyAJCQl9CisgCQl9CitAQCAtODgyLDYgKzkzOCwyNiBAQCBjbGFzcyBNc2J1 aWxkR2VuZXJhdG9yIHsKKyAKKyAJCWJvb2wgYmFzaWNfb3JfYnVpbGQgPSAobGlicmFyeS5Db250 YWlucyAoIi1iYXNpYyIpIHx8IGxpYnJhcnkuQ29udGFpbnMgKCItYnVpbGQiKSk7CisgCisrCQkv LyBJZiBhbiBFWEUgaXMgYnVpbHQgd2l0aCBub3N0ZGxpYiwgaXQgd29uJ3Qgd29yayB1bmxlc3Mg cnVuIHdpdGggbW9uby5leGUuIFRoaXMgc3RvcHMgb3VyIGJ1aWxkIHN0ZXBzCisrCQkvLyAgZnJv bSB3b3JraW5nIGluIHZpc3VhbCBzdHVkaW8gKGJlY2F1c2Ugd2UgYWxyZWFkeSByZXBsYWNlIEBN T05PQCB3aXRoICcnIG9uIFdpbmRvd3MuKQorKworKwkJaWYgKFRhcmdldCAhPSBUYXJnZXQuTGli cmFyeSkKKysJCQlTdGRMaWIgPSB0cnVlOworKworKwkJLy8gV2UgaGF2ZSBvdXIgdGFyZ2V0IGZy YW1ld29yayBzZXQgdG8gNC41IGluIG1hbnkgcGxhY2VzIGJlY2F1c2UgYnJva2VuIHNjcmlwdHMg Y2hlY2sgZm9yIGZpbGVzIHdpdGggNC41CisrCQkvLyAgaW4gdGhlIHBhdGgsIGV2ZW4gdGhvdWdo IHdlIGNvbXBpbGUgY29kZSB0aGF0IHVzZXMgNC42IGZlYXR1cmVzLiBTbyB3ZSBuZWVkIHRvIG1h bnVhbGx5IGZpeCB0aGF0IGhlcmUuCisrCisrCQlpZiAoZnhfdmVyc2lvbiA9PSAiNC41IikKKysJ CQlmeF92ZXJzaW9uID0gIjQuNi4yIjsKKysKKysJCS8vIFRoZSBWUzIwMTcgc2lnbmluZyBzeXN0 ZW0gZmFpbHMgdG8gc2lnbiB1c2luZyB0aGlzIGtleSBmb3Igc29tZSByZWFzb24sIHNvIGZvciBu b3csCisrCQkvLyAganVzdCBkaXNhYmxlIGNvZGUgc2lnbmluZyBmb3IgdGhlIG51bml0IGFzc2Vt YmxpZXMuIEl0J3Mgbm90IGltcG9ydGFudC4KKysJCS8vIEknZCByYXRoZXIgZml4IHRoaXMgYnkg dXBkYXRpbmcgdGhlIG1ha2VmaWxlcyBidXQgaXQgc2VlbXMgdG8gYmUgaW1wb3NzaWJsZSB0byBk aXNhYmxlCisrCQkvLyAgY29kZSBzaWduaW5nIGluIG91ciBtYWtlIHN5c3RlbS4uLgorKworKwkJ aWYgKFN0cm9uZ05hbWVLZXlGaWxlPy5Db250YWlucygibnVuaXQuc25rIikgPz8gZmFsc2UpCisr CQkJU3Ryb25nTmFtZUtleUZpbGUgPSBudWxsOworKworIAkJLy8KKyAJCS8vIFJlcGxhY2UgdGhl IHRlbXBsYXRlIHZhbHVlcworIAkJLy8KK0BAIC04OTQsNiArOTcwLDkgQEAgY2xhc3MgTXNidWls ZEdlbmVyYXRvciB7CisgCQkJCSIgICAgPEFzc2VtYmx5T3JpZ2luYXRvcktleUZpbGU+ezB9PC9B c3NlbWJseU9yaWdpbmF0b3JLZXlGaWxlPiIsCisgCQkJCVN0cm9uZ05hbWVLZXlGaWxlLCBTdHJv bmdOYW1lRGVsYXlTaWduID8gIiAgICA8RGVsYXlTaWduPnRydWU8L0RlbGF5U2lnbj4iICsgTmV3 TGluZSA6ICIiKTsKKyAJCX0KKysKKysJCXN0cmluZyBhc3NlbWJseU5hbWUgPSBQYXRoLkdldEZp bGVOYW1lV2l0aG91dEV4dGVuc2lvbiAob3V0cHV0X25hbWUpOworKworIAkJQ3Nwcm9qLm91dHB1 dCA9IHRlbXBsYXRlLgorIAkJCVJlcGxhY2UgKCJAT1VUUFVUVFlQRUAiLCBUYXJnZXQgPT0gVGFy Z2V0LkxpYnJhcnkgPyAiTGlicmFyeSIgOiAiRXhlIikuCisgCQkJUmVwbGFjZSAoIkBTSUdOQVRV UkVAIiwgc3Ryb25nTmFtZVNlY3Rpb24pLgorQEAgLTkwNiw3ICs5ODUsNyBAQCBjbGFzcyBNc2J1 aWxkR2VuZXJhdG9yIHsKKyAJCQlSZXBsYWNlICgiQE5PQ09ORklHQCIsICI8Tm9Db25maWc+IiAr ICghbG9hZF9kZWZhdWx0X2NvbmZpZykuVG9TdHJpbmcgKCkgKyAiPC9Ob0NvbmZpZz4iKS4KKyAJ CQlSZXBsYWNlICgiQEFMTE9XVU5TQUZFQCIsIFVuc2FmZSA/ICI8QWxsb3dVbnNhZmVCbG9ja3M+ dHJ1ZTwvQWxsb3dVbnNhZmVCbG9ja3M+IiA6ICIiKS4KKyAJCQlSZXBsYWNlICgiQEZYX1ZFUlNJ T04iLCBmeF92ZXJzaW9uKS4KKy0JCQlSZXBsYWNlICgiQEFTU0VNQkxZTkFNRUAiLCBQYXRoLkdl dEZpbGVOYW1lV2l0aG91dEV4dGVuc2lvbiAob3V0cHV0X25hbWUpKS4KKysJCQlSZXBsYWNlICgi QEFTU0VNQkxZTkFNRUAiLCBhc3NlbWJseU5hbWUpLgorIAkJCVJlcGxhY2UgKCJAT1VUUFVURElS QCIsIGJ1aWxkX291dHB1dF9kaXIpLgorIAkJCVJlcGxhY2UgKCJAT1VUUFVUU1VGRklYQCIsIFBh dGguR2V0RmlsZU5hbWUgKGJ1aWxkX291dHB1dF9kaXIpKS4KKyAJCQlSZXBsYWNlICgiQERFRklO RUNPTlNUQU5UU0AiLCBkZWZpbmVzLlRvU3RyaW5nICgpKS4KK0BAIC05MjAsNyArOTk5LDExIEBA IGNsYXNzIE1zYnVpbGRHZW5lcmF0b3IgeworIAkJCVJlcGxhY2UgKCJAQURESVRJT05BTExJQlBB VEhTQCIsIFN0cmluZy5FbXB0eSkuCisgCQkJUmVwbGFjZSAoIkBSRVNPVVJDRVNAIiwgcmVzb3Vy Y2VzLlRvU3RyaW5nICgpKS4KKyAJCQlSZXBsYWNlICgiQE9QVElNSVpFQCIsIE9wdGltaXplID8g InRydWUiIDogImZhbHNlIikuCistCQkJUmVwbGFjZSAoIkBTT1VSQ0VTQCIsIHNvdXJjZXMuVG9T dHJpbmcgKCkpOworKwkJCVJlcGxhY2UgKCJAU09VUkNFU0AiLCBzb3VyY2VzLlRvU3RyaW5nICgp KS4KKysJCQlSZXBsYWNlICgiQE1FVEFEQVRBVkVSU0lPTkAiLCBhc3NlbWJseU5hbWUgPT0gIm1z Y29ybGliIiA/ICI8UnVudGltZU1ldGFkYXRhVmVyc2lvbj5Nb25vPC9SdW50aW1lTWV0YWRhdGFW ZXJzaW9uPiIgOiAiIik7CisrCisrCQlDc3Byb2oucHJlQnVpbGRFdmVudCA9IHByZWJ1aWxkOwor KwkJQ3Nwcm9qLnBvc3RCdWlsZEV2ZW50ID0gcG9zdGJ1aWxkOworIAorIAkJLy9Db25zb2xlLldy aXRlTGluZSAoIkdlbmVyYXRlZCB7MH0iLCBvZmlsZS5SZXBsYWNlICgiXFwiLCAiLyIpKTsKKyAJ CXVzaW5nICh2YXIgbyA9IG5ldyBTdHJlYW1Xcml0ZXIgKGdlbmVyYXRlZFByb2pGaWxlKSkgewor QEAgLTkzOSwxNSArMTAyMiwxMyBAQCBjbGFzcyBNc2J1aWxkR2VuZXJhdG9yIHsKKyAJCWlmIChx ICE9IC0xKQorIAkJCXRhcmdldCA9IHRhcmdldCArIExvYWQgKGxpYnJhcnkuU3Vic3RyaW5nICgw LCBxKSArIHN1ZmZpeCk7CisgCistCQlpZiAodGFyZ2V0LkluZGV4T2YgKCJATU9OT0AiKSAhPSAt MSl7CistCQkJdGFyZ2V0X3VuaXggPSB0YXJnZXQuUmVwbGFjZSAoIkBNT05PQCIsICJtb25vIiku UmVwbGFjZSAoIkBDQVRAIiwgImNhdCIpOworLQkJCXRhcmdldF93aW5kb3dzID0gdGFyZ2V0LlJl cGxhY2UgKCJATU9OT0AiLCAiIikuUmVwbGFjZSAoIkBDQVRAIiwgInR5cGUiKTsKKy0JCX0gZWxz ZSB7CistCQkJdGFyZ2V0X3VuaXggPSB0YXJnZXQuUmVwbGFjZSAoImpheS5leGUiLCAiamF5Iik7 CistCQkJdGFyZ2V0X3dpbmRvd3MgPSB0YXJnZXQ7CistCQl9CisrCQl0YXJnZXRfdW5peCA9IHRh cmdldC5SZXBsYWNlICgiQE1PTk9AIiwgIm1vbm8iKS5SZXBsYWNlICgiQENBVEAiLCAiY2F0Iik7 CisrCQl0YXJnZXRfd2luZG93cyA9IHRhcmdldC5SZXBsYWNlICgiQE1PTk9AIiwgIiIpLlJlcGxh Y2UgKCJAQ0FUQCIsICJ0eXBlIik7CisrCisrCQl0YXJnZXRfdW5peCA9IHRhcmdldF91bml4LlJl cGxhY2UgKCJcXGpheVxcamF5LmV4ZSIsICJcXGpheVxcamF5XFxqYXkiKTsKKysKKyAJCXRhcmdl dF91bml4ID0gdGFyZ2V0X3VuaXguUmVwbGFjZSAoIkBDT1BZQCIsICJjcCIpOworLQkJdGFyZ2V0 X3dpbmRvd3MgPSB0YXJnZXRfdW5peC5SZXBsYWNlICgiQENPUFlAIiwgImNvcHkiKTsKKysJCXRh cmdldF93aW5kb3dzID0gdGFyZ2V0X3dpbmRvd3MuUmVwbGFjZSAoIkBDT1BZQCIsICJjb3B5Iik7 CisgCisgCQl0YXJnZXRfdW5peCA9IHRhcmdldF91bml4LlJlcGxhY2UgKCJcciIsICIiKTsKKyAJ CWNvbnN0IHN0cmluZyBjb25kaXRpb25fdW5peCAgICA9ICJDb25kaXRpb249XCIgJyQoT1MpJyAh PSAnV2luZG93c19OVCcgXCIiOwotLSAKMi40NS4yCgo= --b1=_tnCtFHx6yIKuYDXqbApeYGjbdIBbQ4owcmVz3FJkVmc-- From debbugs-submit-bounces@debbugs.gnu.org Sat Dec 21 06:03:32 2024 Received: (at 74609) by debbugs.gnu.org; 21 Dec 2024 11:03:32 +0000 Received: from localhost ([127.0.0.1]:45484 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1tOxGd-0003QA-VU for submit@debbugs.gnu.org; Sat, 21 Dec 2024 06:03:32 -0500 Received: from eggs.gnu.org ([209.51.188.92]:50642) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1tOxGb-0003Pv-VD for 74609@debbugs.gnu.org; Sat, 21 Dec 2024 06:03:30 -0500 Received: from fencepost.gnu.org ([2001:470:142:3::e]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1tOxGV-0006U4-TH; Sat, 21 Dec 2024 06:03:23 -0500 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org; s=fencepost-gnu-org; h=MIME-Version:Date:References:In-Reply-To:Subject:To: From; bh=NEbQjpafCk5WoLhxMdTAOImEeMq7qgQlhgDI0dfGr4A=; b=Sw4RjnEHf0HMndrqoxTZ /tsinkcEdysUOpkzpGN28QRYxYn2w86LqZWpuLYm9zBNZ9P0PBsjmc1+J6hLHxIktpvUn7fAGeJwv /bKKhfUwb1jmU5BzuxPZg+dM5SOA8AI338UCdttvgLcLQ8+y9FsTUGq4ysp9W3UmJ0zNDvgtVzZrX amsLPDnNUs192IUW0/GKrDbKlO+P3r2lDk0nQhvf4pNMd+JTaM5IdtArTDBQYUhYNjiHiGcw/gNAw NyXeoW/R4Ah/ZGGyOmkQ/H/tO+laQYjH7iKTVT+Dlw6jn9BIinKapllEV5uKCs2w+yW5An45/sdc3 z9M5T68JZa1qTQ==; From: =?utf-8?Q?Ludovic_Court=C3=A8s?= To: Efraim Flashner Subject: Re: [bug#74609] [PATCH 00/21] mono bootstrap In-Reply-To: (Efraim Flashner's message of "Mon, 16 Dec 2024 19:26:23 +0200") References: Date: Sat, 21 Dec 2024 12:03:17 +0100 Message-ID: <8734ihi9hm.fsf@gnu.org> User-Agent: Gnus/5.13 (Gnus v5.13) MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable X-Spam-Score: -2.3 (--) X-Debbugs-Envelope-To: 74609 Cc: aaron.covrig.us@ieee.org, richard@freakingpenguin.com, 74609@debbugs.gnu.org, unmush@proton.me, janneke@gnu.org 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: -3.3 (---) Hi Efraim, Efraim Flashner skribis: > It turns out the first 2 patches didn't apply cleanly, so I fixed that > up and I'm sending them back to the list. > > A couple of things that I noticed: > > * mono-5.something doesn't have its patches apply cleanly > * I was only able to build to mono-3.12 before I got a build failure on > x86_64 Oh, that looks like half of the chain. Could you share the error with unmush? Does it fail reproducibly? > * mono-1.2.6 doesn't have support for aarch64 or riscv64, and will > probably need some patches (later) to add support. > * libjit FTBFS on powerpc64le. I tried working around it but wasn't > successful in when it came to using libjit. > * The assembly included in libjit targets a too-early version of arm, so > it is just broken completely on armhf and would probably do best with it > being ripped out. Regarding architecture support, that=E2=80=99s fine: we can add a suitably restrictive =E2=80=98supported-systems=E2=80=99 field and improve platform = coverage if/when patches are available. Thanks, Ludo=E2=80=99. From debbugs-submit-bounces@debbugs.gnu.org Sat Dec 21 11:40:35 2024 Received: (at 74609) by debbugs.gnu.org; 21 Dec 2024 16:40:35 +0000 Received: from localhost ([127.0.0.1]:47461 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1tP2Wp-0004Fy-CY for submit@debbugs.gnu.org; Sat, 21 Dec 2024 11:40:35 -0500 Received: from mail-wr1-f54.google.com ([209.85.221.54]:61734) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1tP2Wn-0004Fo-67 for 74609@debbugs.gnu.org; Sat, 21 Dec 2024 11:40:34 -0500 Received: by mail-wr1-f54.google.com with SMTP id ffacd0b85a97d-3862a921123so2015536f8f.3 for <74609@debbugs.gnu.org>; Sat, 21 Dec 2024 08:40:33 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1734799172; x=1735403972; darn=debbugs.gnu.org; h=in-reply-to:content-disposition:mime-version:references :mail-followup-to:message-id:subject:cc:to:from:date:sender:from:to :cc:subject:date:message-id:reply-to; bh=WvGj0WzL1FP/JRGT+hTZ0WTPViAAcJW84v8u4Er9F2c=; b=UOqgmNrkctH5eKMfh51BQZjJQKmEJo7UBy1TpYMN9ax4rhApCfKXH52YapTEEcImvL sR4JccOuOIN+xHWLFAVANeOZKWhBExgX0sdSfVcnnF+siJcZ1NK+f9T8txcXxT/elmQB /ALhzaiBfti8FR0enM3xpiOG+5/mS4YlaEXRdXveSj7tDgCh6PlVSaUT+0XARCsGgoRS kqYuzHGakmlwPry2s5FVZknI4QSNkGDlFof0m98i/fQdPfWMO4NEnXR6qVWMy+ZjIcjf Kvx0lw1J43+KWrQPRPDanlKL1CZQRnTaMS6Fqoj1dlkjPbBnjNJ8y+a9oLOIcThf3Pm8 djYQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1734799172; x=1735403972; h=in-reply-to:content-disposition:mime-version:references :mail-followup-to:message-id:subject:cc:to:from:date:sender :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=WvGj0WzL1FP/JRGT+hTZ0WTPViAAcJW84v8u4Er9F2c=; b=IWod/yc36wEYsLFBc+YAyTV5C5O53LkeaZtx38mutt911Ra+JH9OiWijUQIfKPk0Xd TvQr3cYvuCn5RbniNpVXdUiYbWje8uOXj0tyL7vIOlu8cdHpEY9DDHQIJshrskr2nVD3 XShLSMLWsJ4FKBnOcCG0iH9Hi6GqA6mMyO94O0zxLQO8mIXor0sHhm/3OtO7xX+lFDjI C1xqXRSBcua8UWYbWtgIoj4FCC7I+hu0Xss2HiV2x5exT8iJXW5HrvSiczbpPatjgeL9 h5pRGRU39scDxg9NvgEIuuFvLS6Mtb4YzprfxEMuZ8lTHxUouZ6agcjvx3eH239ogRJ4 7YBQ== X-Gm-Message-State: AOJu0Yxuf8Fxag6AX6ErMT474PfaX16c23ntT9QtlIKLRf6Z4cpGpkVE abNSwP0tm/G+OMSG5yWALHWzvQul2PO+8XwhLfquDyNqaGUCwmu7 X-Gm-Gg: ASbGncs6siWk32YiXTBJbD/PCIdOTNfhML2J0Rf+vPDzfDSvUVmpJzI1ZRlCq162x6S 8rkk8WtXaEwtzC48lKcvmMshjdIjGQ9WxFlFsVZb0rhZYCGTs1S9uhAu77M+P0oqa+uMelKm5g7 HJAw00aieevHhK8FD5kAQJ4RxxBiBBW/97xL2UQt7HX/UJ8qeJRxDpUkIJbAXz/jl8FkInuyb4Z Qwdr5lIH3ejM3hmnlaNwAie03uII8Y3KJSLZzbuSulZGj2Mp+44xxjQxw== X-Google-Smtp-Source: AGHT+IFaVi0xcdeM5CQ2+c53eu4qmhP0kcxI+498KASdEJ4CRJb9tH6vY1hY6euXuz/m9yIOMlgM8w== X-Received: by 2002:a05:6000:18a3:b0:385:f60b:f5c4 with SMTP id ffacd0b85a97d-38a221f9f90mr5955599f8f.29.1734799172236; Sat, 21 Dec 2024 08:39:32 -0800 (PST) Received: from localhost ([188.120.128.147]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-38a1c8a636asm7035918f8f.88.2024.12.21.08.39.31 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 21 Dec 2024 08:39:31 -0800 (PST) Date: Sat, 21 Dec 2024 18:39:30 +0200 From: Efraim Flashner To: Ludovic =?utf-8?Q?Court=C3=A8s?= Subject: Re: [bug#74609] [PATCH 00/21] mono bootstrap Message-ID: Mail-Followup-To: Efraim Flashner , Ludovic =?utf-8?Q?Court=C3=A8s?= , 74609@debbugs.gnu.org, aaron.covrig.us@ieee.org, richard@freakingpenguin.com, unmush@proton.me, janneke@gnu.org References: <8734ihi9hm.fsf@gnu.org> MIME-Version: 1.0 Content-Type: multipart/signed; micalg=pgp-sha256; protocol="application/pgp-signature"; boundary="G4FOpriNh2NPu087" Content-Disposition: inline In-Reply-To: <8734ihi9hm.fsf@gnu.org> X-PGP-Key-ID: 0x41AAE7DCCA3D8351 X-PGP-Key: https://flashner.co.il/~efraim/efraim_flashner.asc X-PGP-Fingerprint: A28B F40C 3E55 1372 662D 14F7 41AA E7DC CA3D 8351 X-Spam-Score: 0.3 (/) X-Debbugs-Envelope-To: 74609 Cc: aaron.covrig.us@ieee.org, richard@freakingpenguin.com, 74609@debbugs.gnu.org, unmush@proton.me, janneke@gnu.org 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: -0.7 (/) --G4FOpriNh2NPu087 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: quoted-printable On Sat, Dec 21, 2024 at 12:03:17PM +0100, Ludovic Court=C3=A8s wrote: > Hi Efraim, >=20 > Efraim Flashner skribis: >=20 > > It turns out the first 2 patches didn't apply cleanly, so I fixed that > > up and I'm sending them back to the list. > > > > A couple of things that I noticed: > > > > * mono-5.something doesn't have its patches apply cleanly > > * I was only able to build to mono-3.12 before I got a build failure on > > x86_64 >=20 > Oh, that looks like half of the chain. Could you share the error with > unmush? Does it fail reproducibly? We figured out there was a race condition and now the earlier versions of mono have parallel-build? #f set. > > * mono-1.2.6 doesn't have support for aarch64 or riscv64, and will > > probably need some patches (later) to add support. > > * libjit FTBFS on powerpc64le. I tried working around it but wasn't > > successful in when it came to using libjit. > > * The assembly included in libjit targets a too-early version of arm, so > > it is just broken completely on armhf and would probably do best with it > > being ripped out. >=20 > Regarding architecture support, that=E2=80=99s fine: we can add a suitably > restrictive =E2=80=98supported-systems=E2=80=99 field and improve platfor= m coverage > if/when patches are available. >=20 > Thanks, > Ludo=E2=80=99. --=20 Efraim Flashner =D7=90=D7=A4=D7=A8=D7=99=D7=9D = =D7=A4=D7=9C=D7=A9=D7=A0=D7=A8 GPG key =3D A28B F40C 3E55 1372 662D 14F7 41AA E7DC CA3D 8351 Confidentiality cannot be guaranteed on emails sent or received unencrypted --G4FOpriNh2NPu087 Content-Type: application/pgp-signature; name="signature.asc" -----BEGIN PGP SIGNATURE----- iQIzBAABCAAdFiEEoov0DD5VE3JmLRT3Qarn3Mo9g1EFAmdm70IACgkQQarn3Mo9 g1ET6w/9GNgk7BuHBZdFxyoN1ceeoOLpHxISK5aQ1QgttXXS5qvpX2UqGWkgsdNN +WkLBBUHj72xEANElkhlFltlF5jjM0XPrVuqczdY/LtMhAGVUkKLvpuelHTAYBvb CxmRXXg2MSOBp2m5z6Rj4lOs+hc8fJ0XozhEMwAPZEtdtVZ6SVEnwVEsm0pH0Ket TygIs/TxiFSLBv2tj2lu1WUgKY8oLaF+1Js77gTBhuLog1hOirYvg3ZXwaOlrRje 7PAd1Ero5Hc8z4EAmHf8wlR+OUEqYao6fiVLdpXUNLZuD33GAsp46no8usqVbN2F 3QhpP/6BgCnns28ET22WCr5eXF/LvUwcxNbjJw5RN9Uw2kEMEI3iDAW+s2p/sxez O0BHYpw1E1eUbNVwMmv5fkx6W9JbFQa33hM1d9JHofGzTXNt9cRrVER+RIQzXmuc HCyU18a5BEASo00r406v7d4EzdZdg2kt9y7U9C1toPl5LYSFuBDLcLpne85Qc0Vg dj8WStYoQwEvK53klqpHqk8WUGvupnaHk5t6Ana1M5CaaKSkJ9k0txhaJ1Gc2s3v noO1n1503LQaQ11QS0iztJjjKmkRmlG6tPvRoCSUh2ejwqjzSzLfnUq47MvV9Pxd JzuUN25yfar5iLmNlUqaTIqaaDQee4ILWGMV0iDj4BPfytNxw4w= =NaWS -----END PGP SIGNATURE----- --G4FOpriNh2NPu087-- From debbugs-submit-bounces@debbugs.gnu.org Sun Dec 22 08:41:57 2024 Received: (at 74609-done) by debbugs.gnu.org; 22 Dec 2024 13:41:57 +0000 Received: from localhost ([127.0.0.1]:49413 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1tPMDV-0004rU-Du for submit@debbugs.gnu.org; Sun, 22 Dec 2024 08:41:57 -0500 Received: from mail-wm1-f45.google.com ([209.85.128.45]:53731) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1tPMDS-0004rD-DN for 74609-done@debbugs.gnu.org; Sun, 22 Dec 2024 08:41:55 -0500 Received: by mail-wm1-f45.google.com with SMTP id 5b1f17b1804b1-4361f796586so36311695e9.3 for <74609-done@debbugs.gnu.org>; Sun, 22 Dec 2024 05:41:54 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1734874848; x=1735479648; darn=debbugs.gnu.org; h=in-reply-to:content-disposition:mime-version:references :mail-followup-to:message-id:subject:cc:to:from:date:sender:from:to :cc:subject:date:message-id:reply-to; bh=MMMukYP9M7WBQUw7KyXFY6C0EwRIvNCGZfNPqo+NBhI=; b=dILOWDvvzwEBLg652MnIDQg4YNZbheKTNsjEzRDf0B2Yqbcu6wK3P7H8AuqCa9YKvn oyBfddMmlldYCZprcvN9vTixNm3OFNPLy7DENThE4O0OYZX5ai4ZZ5ae/pj7kLUj3JJq 8wq7GsYZFLlWIcHwVGex+1PV0SAPVcZEKqw3oJxsRy+JVsyMr5lhYIW+lRb1bOvn1dia typoVEHianG3xvhdynZu9BsAcG5a4+I2vYfveEAULRLQ6tU9SFRhGUvdZhIhlwN60z6b DQkVrnk3XMd6Yb0hrEVpq3ckP40eYaW0FO6KfLC/RKYoXZcLXoQdque6E5ifRtZbq66I cKMQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1734874848; x=1735479648; h=in-reply-to:content-disposition:mime-version:references :mail-followup-to:message-id:subject:cc:to:from:date:sender :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=MMMukYP9M7WBQUw7KyXFY6C0EwRIvNCGZfNPqo+NBhI=; b=F5TxeXjwEsP7Rwj+cH/qvwBnjtAHGOB2sEDiBMAP2gW7SgY9X+pkc8AYSGCh8wfXs+ WMNrnRgbQfqxfZNemHRzNGP149nkRPWp/GYY0XWuGlESuxhu2J7MbQJBE41X6A6TqUCA ltg5uIlE+yYLoyfrlUKUPzP+vMeNnKiqHNRAQejJiBDioBJ7qW7/xKzBNzEZebbC0P1E 254u6dU580AQa4VZdeLeMzWo8hL/rjJdib9helK9y73+7NdT103KYvLSi42EvD0v1ICw mkM2JphX+WanD1A0h4dqx+rpRMWCqTOa6Amq9vkJsRyN5avuuu2yL+psS/SgHFnlalNL cUKQ== X-Gm-Message-State: AOJu0YwDCvAQ6N9KyWDEqzghOlBYD+OKpYDWPrqXrQm4vL1929zRAnik 3/7dLxjkq7nvfZwYRR+d7+rkP7Yw4/OeBSqgHi51xQ/yxR80Qe3e X-Gm-Gg: ASbGnculvaeo1tMu70BTbzY4FhIYZwfatqRbqNTchnTGG6BsXJx7dhk840qix0TUrZ6 PkmFsJoe/hmORsG/LlKwZ2GCF+KIrTXeGA0kVtEl8AX2EqpaYOQFjGnnlvfyeR4Nh7XB+ntmU6h x7Q/r7zOCEf+ZbnjcRsTIZBMTzYvGrVd7fj8FBuGfKo+s8ntzakqcCeKcBv7mpaJB4DZmoTxJPx ojenbFuIGSOwhqrryIkgtwJ/Rdp652C5tR7CZa0XonJd9VExeYimYTgLw== X-Google-Smtp-Source: AGHT+IHtVDlmtXFS7w5YvE9FJRk42umLWFcikvfZ7i08M3TFWKQsMdZ3nJ4j6RK/wdgtGEuxnzdoKA== X-Received: by 2002:a05:6000:4a01:b0:385:f996:1b8e with SMTP id ffacd0b85a97d-38a221ea879mr8474022f8f.16.1734874848315; Sun, 22 Dec 2024 05:40:48 -0800 (PST) Received: from localhost ([188.120.128.147]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-4366120086bsm105495485e9.12.2024.12.22.05.40.45 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 22 Dec 2024 05:40:47 -0800 (PST) Date: Sun, 22 Dec 2024 15:40:44 +0200 From: Efraim Flashner To: unmush Subject: Re: V2 series Message-ID: Mail-Followup-To: Efraim Flashner , unmush , 74609-done@debbugs.gnu.org, ludo@gnu.org, janneke@gnu.org, richard@freakingpenguin.com, aaron.covrig.us@ieee.org References: MIME-Version: 1.0 Content-Type: multipart/signed; micalg=pgp-sha256; protocol="application/pgp-signature"; boundary="gWYNI/A9PY3NVgOf" Content-Disposition: inline In-Reply-To: X-PGP-Key-ID: 0x41AAE7DCCA3D8351 X-PGP-Key: https://flashner.co.il/~efraim/efraim_flashner.asc X-PGP-Fingerprint: A28B F40C 3E55 1372 662D 14F7 41AA E7DC CA3D 8351 X-Spam-Score: 0.3 (/) X-Debbugs-Envelope-To: 74609-done Cc: ludo@gnu.org, aaron.covrig.us@ieee.org, richard@freakingpenguin.com, 74609-done@debbugs.gnu.org, janneke@gnu.org 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: -0.7 (/) --gWYNI/A9PY3NVgOf Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: quoted-printable I made a couple of small tweaks and pushed the patches. Welcome back mono! --=20 Efraim Flashner =D7=90=D7=A4=D7=A8=D7=99=D7=9D = =D7=A4=D7=9C=D7=A9=D7=A0=D7=A8 GPG key =3D A28B F40C 3E55 1372 662D 14F7 41AA E7DC CA3D 8351 Confidentiality cannot be guaranteed on emails sent or received unencrypted --gWYNI/A9PY3NVgOf Content-Type: application/pgp-signature; name="signature.asc" -----BEGIN PGP SIGNATURE----- iQIzBAABCAAdFiEEoov0DD5VE3JmLRT3Qarn3Mo9g1EFAmdoFtwACgkQQarn3Mo9 g1HfdA/5AeM4jnbabYcNsUEEf+k8rH9AjYUtd/PZtdDLy4z5EJQeqBQe+lrwaT9B pHfj/qbGUiqEW+RUkLHI17DsnP6699oS8MLYt1ex0CSJ13W7DTz+D8Tgnqz5r9Vu VGxjABNFCf0lT/L+k+VrU9NlL0q4bccDCil6EtePent2lB4H16PBMwl/k/TdeRrv Eu2W19VHplYttcGp5YAFcT2x8knamwTjb5FlZDq9Cy1xMLZ98INm4moowDc4QZXp lWJbflBT83xK9uzVsv/q0oqVHs+ATGTGHtG1knhwzoYWKeMDIPur+o3hSkR9gm8Z 8J9AOYFXJCMoMeWfay/7/7Bg+OVh1rSNggAM8iOlXXSXsg8GRM7YR2lNE8aCoUtZ 9qo/NrzWKLC217OFwdLyqaRjwtmiO8DS9iKsuD/eHRj8sWpBE5b9gLA+gS/uKp7+ digAfoUWpVasCQV0QrSp8dqHiVkdZMZRWkc7AGblhEagdAwHe0ZMKxDV/2yNfoVR fyoOXBEm57pzqoKWBOg5+bRUfSmR59a88qK2dNlZLdpKBYeNbGYyNg5m9K1IQ7GG /bKglWKcGogkq8ozsJGJt22bYBTsGgDcemI+Fe4x3pfdJdRtdNBpzYqrXp1pfTB0 yP36ngTLz0P/K2h/GCldRB5WOuRutI0IZMKt+GhEom+1l2uBuB0= =KJbU -----END PGP SIGNATURE----- --gWYNI/A9PY3NVgOf-- From unknown Mon Jun 23 04:12:47 2025 Received: (at fakecontrol) by fakecontrolmessage; To: internal_control@debbugs.gnu.org From: Debbugs Internal Request Subject: Internal Control Message-Id: bug archived. Date: Mon, 20 Jan 2025 12:24:08 +0000 User-Agent: Fakemail v42.6.9 # This is a fake control message. # # The action: # bug archived. thanks # This fakemail brought to you by your local debbugs # administrator