From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!not-for-mail From: Anders Lindgren Newsgroups: gmane.emacs.bugs Subject: bug#21415: 25.0.50; Emacs Trunk -- pixelwise width/height for x-create-frame Date: Tue, 20 Oct 2015 19:20:54 +0200 Message-ID: References: <561E92D8.1050500@gmx.at> <561F7943.9090309@gmx.at> NNTP-Posting-Host: plane.gmane.org Mime-Version: 1.0 Content-Type: multipart/mixed; boundary=001a11429d4c037d6705228c7c84 X-Trace: ger.gmane.org 1445361714 7245 80.91.229.3 (20 Oct 2015 17:21:54 GMT) X-Complaints-To: usenet@ger.gmane.org NNTP-Posting-Date: Tue, 20 Oct 2015 17:21:54 +0000 (UTC) Cc: Keith David Bershatsky , 21415@debbugs.gnu.org To: martin rudalics Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Tue Oct 20 19:21:45 2015 Return-path: Envelope-to: geb-bug-gnu-emacs@m.gmane.org Original-Received: from lists.gnu.org ([208.118.235.17]) by plane.gmane.org with esmtp (Exim 4.69) (envelope-from ) id 1ZoabH-0001ZB-Of for geb-bug-gnu-emacs@m.gmane.org; Tue, 20 Oct 2015 19:21:28 +0200 Original-Received: from localhost ([::1]:47203 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ZoabG-0000Nl-Sa for geb-bug-gnu-emacs@m.gmane.org; Tue, 20 Oct 2015 13:21:26 -0400 Original-Received: from eggs.gnu.org ([2001:4830:134:3::10]:50534) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Zoab0-0000NP-OJ for bug-gnu-emacs@gnu.org; Tue, 20 Oct 2015 13:21:21 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1Zoaat-00030Z-8L for bug-gnu-emacs@gnu.org; Tue, 20 Oct 2015 13:21:10 -0400 Original-Received: from debbugs.gnu.org ([208.118.235.43]:39391) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Zoaat-00030A-1X for bug-gnu-emacs@gnu.org; Tue, 20 Oct 2015 13:21:03 -0400 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.80) (envelope-from ) id 1Zoaas-000065-9l for bug-gnu-emacs@gnu.org; Tue, 20 Oct 2015 13:21:02 -0400 X-Loop: help-debbugs@gnu.org Resent-From: Anders Lindgren Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Tue, 20 Oct 2015 17:21:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 21415 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: Original-Received: via spool by 21415-submit@debbugs.gnu.org id=B21415.1445361658350 (code B ref 21415); Tue, 20 Oct 2015 17:21:02 +0000 Original-Received: (at 21415) by debbugs.gnu.org; 20 Oct 2015 17:20:58 +0000 Original-Received: from localhost ([127.0.0.1]:58333 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1Zoaan-00005a-MG for submit@debbugs.gnu.org; Tue, 20 Oct 2015 13:20:57 -0400 Original-Received: from mail-vk0-f43.google.com ([209.85.213.43]:36342) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1Zoaal-00005S-EF for 21415@debbugs.gnu.org; Tue, 20 Oct 2015 13:20:55 -0400 Original-Received: by vkex70 with SMTP id x70so14129212vke.3 for <21415@debbugs.gnu.org>; Tue, 20 Oct 2015 10:20:55 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :cc:content-type; bh=GlweiCTlsX881mgNcgosTLP8Xbyf08RGBkhTqJBDbKw=; b=u3W9NUirtCulDC7f5Q2u6adAivFNPH/vW/uMYhJfL7UX1kBXfJeonT0/otUnFMgoii LDPBs1nmviINtSWj0p5SPOnUAIDCAE+Xv8VRr+/LPs+0GvdbNmZMA8lyBEcFXI/9WNDV Av/qp6ajZ6derPEFjjdS5orNnahCqEddEcx/XYMGxHvZ0AmXBvpoSWMYRmxZQnVl5FuP leY4QViGAYtTjQxAnbAyskOCU167TBIghUsliR5HJYIylXKAQRAn0FGVD1hokS5eX8W2 muQ1oRPZ4Z7JJF2FXDem8j8QMh2hACX0P1oBVUiATltAlNtu2HY8xTC3wXArfSPCQ+hJ kl/w== X-Received: by 10.31.128.19 with SMTP id b19mr2910064vkd.70.1445361654874; Tue, 20 Oct 2015 10:20:54 -0700 (PDT) Original-Received: by 10.31.210.133 with HTTP; Tue, 20 Oct 2015 10:20:54 -0700 (PDT) In-Reply-To: <561F7943.9090309@gmx.at> X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.15 Precedence: list X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x X-Received-From: 208.118.235.43 X-BeenThere: bug-gnu-emacs@gnu.org List-Id: "Bug reports for GNU Emacs, the Swiss army knife of text editors" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Original-Sender: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Xref: news.gmane.org gmane.emacs.bugs:107784 Archived-At: --001a11429d4c037d6705228c7c84 Content-Type: multipart/alternative; boundary=001a11429d4c037d6205228c7c82 --001a11429d4c037d6205228c7c82 Content-Type: text/plain; charset=UTF-8 Ok, here comes a patch file for the "maximize" and "NSTRACE" rewrites, see the file "emacs-commit-message.txt" for details. I would like you (especially Keith, since Martin don't use OS X) to take a look at it before I post in on emacs-devel and (unless people object) I commit it. The rewrite became a bit larger than I originally expected since I realised that the system to snap the frame size to the text grid was fundamentally broken. It used a features called "SetResizeIncrements", where the increments were set to the size of the current font. Unfortunately, once the frame size got out of sync (e.g. by setting the frame size to a specific pixel value) it remained out of sync. In addition, it interfered with the maximization system. The current implementation snaps the frame size to the text grid in a callback function. The patch below contains excluded code to maximize the frame the old way using the system "zoom" function, and an excluded code section for a hybrid maximize solution. Also, the code to restrict a frame to the screen height is still present but excluded. Before I commit this to the archive I will remove the excluded code, unless someone thinks that its worth while to allow the user to configure this. You can enable the NSTRACE system by uncommenting a line in nsterm.h, see comments for detail. In addition, I have included my own test file for frame maximization I wrote to ensure that I didn't introduce any problems. Martin, if there are anything in this you can use for your frame test file, feel free to use it. Sincerely, Anders Lindgren On Thu, Oct 15, 2015 at 12:00 PM, martin rudalics wrote: > > I've got a quick question. I noticed that the OS X port behaves a bit > > inconsistent when it comes to restricting a frame to the screen -- > > sometimes it is restricted in height, sometimes it's not. I would like to > > make this more consistent, but I'm not sure in which direction I should > go. > > > > How does the other terms (especially X11) behave? Does it restrict the > > frame to be within the screen? If so, does it allow for the frame border > to > > be placed outside the screen? > > I suppose nobody can answer this question satisfactorily. IMO good > "systems" allow the frame to be placed anywhere. And I usually have > troubles only with window managers constraining placement. > > > What happens if the frame is first resized and then moved. Should the > > resize truncate the height, even though the move would place the entire > > frame inside the screen borders? Can a move and a resize be made > atomically > > (pixelwise)? > > For Emacs moving means to pass on coordinates to whoever is responsible. > And Emacs itself never constrains the frame size (it must not get too > small, though). > > > Personally, I'd prefer it there is no truncation. However, if it is, I > > really would like to be able to allow the frame border to stretch outside > > the screen, in order to really maximize the screen real estate. > > That's what most systems do AFAICT. So if you can do that please go on. > > martin > --001a11429d4c037d6205228c7c82 Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: quoted-printable
Ok, here comes a patch file for the "maximize" a= nd "NSTRACE" rewrites, see the file "emacs-commit-message.tx= t" for details. I would like you (especially Keith, since Martin don&#= 39;t use OS X) to take a look at it before I post in on emacs-devel and (un= less people object) I commit it.

The rewrite became a bi= t larger than I originally expected since I realised that the system to sna= p the frame size to the text grid was fundamentally broken. It used a featu= res called "SetResizeIncrements", where the increments were set t= o the size of the current font. Unfortunately, once the frame size got out = of sync (e.g. by setting the frame size to a specific pixel value) it remai= ned out of sync. In addition, it interfered with the maximization system.

The current implementation snaps the frame size to = the text grid in a callback function.

The patch be= low contains excluded code to maximize the frame the old way using the syst= em "zoom" function, and an excluded code section for a hybrid max= imize solution. Also, the code to restrict a frame to the screen height is = still present but excluded. Before I commit this to the archive I will remo= ve the excluded code, unless someone thinks that its worth while to allow t= he user to configure this.

You can enable the NSTR= ACE system by uncommenting a line in nsterm.h, see comments for detail.

In addition, I have included my own test file for fra= me maximization I wrote to ensure that I didn't introduce any problems.= Martin, if there are anything in this you can use for your frame test file= , feel free to use it.

Sincerely,
=C2=A0= =C2=A0 Anders Lindgren


On Thu, Oct 15, 2015 at 12:00 PM, martin r= udalics <rudalics@gmx.at> wrote:
> I've got a quick question. I noticed that th= e OS X port behaves a bit
> inconsistent when it comes to restricting a frame to the screen --
> sometimes it is restricted in height, sometimes it's not. I would = like to
> make this more consistent, but I'm not sure in which direction I s= hould go.
>
> How does the other terms (especially X11) behave? Does it restrict the=
> frame to be within the screen? If so, does it allow for the frame bord= er to
> be placed outside the screen?

I suppose nobody can answer this question satisfactorily.=C2=A0 IMO good "systems" allow the frame to be placed anywhere.=C2=A0 And I usua= lly have
troubles only with window managers constraining placement.=

> What happens if the frame is first resized and then moved. Should the<= br> > resize truncate the height, even though the move would place the entir= e
> frame inside the screen borders? Can a move and a resize be made atomi= cally
> (pixelwise)?

For Emacs moving means to pass on coordinates to whoever is responsible. And Emacs itself never constrains the frame size (it must not get too
small, though).

> Personally, I'd prefer it there is no truncation. However, if it i= s, I
> really would like to be able to allow the frame border to stretch outs= ide
> the screen, in order to really maximize the screen real estate.

That's what most systems do AFAICT.=C2=A0 So if you can do that please = go on.

martin

--001a11429d4c037d6205228c7c82-- --001a11429d4c037d6705228c7c84 Content-Type: text/plain; charset=US-ASCII; name="maximize_and_trace.diff" Content-Disposition: attachment; filename="maximize_and_trace.diff" Content-Transfer-Encoding: base64 X-Attachment-Id: f_ifzmrxb40 ZGlmZiAtLWdpdCBhL3NyYy9uc2Zucy5tIGIvc3JjL25zZm5zLm0KaW5kZXggNDMwMDJjYS4uMWVk M2UyMyAxMDA2NDQKLS0tIGEvc3JjL25zZm5zLm0KKysrIGIvc3JjL25zZm5zLm0KQEAgLTQ5LDEz ICs0OSw2IEBAIEdOVXN0ZXAgcG9ydCBhbmQgcG9zdC0yMCB1cGRhdGUgYnkgQWRyaWFuIFJvYmVy dCAoYXJvYmVydEBjb2dzY2kudWNzZC5lZHUpCiAjaW5jbHVkZSAibWFjZm9udC5oIgogI2VuZGlm CiAKLSNpZiAwCi1pbnQgZm5zX3RyYWNlX251bSA9IDE7Ci0jZGVmaW5lIE5TVFJBQ0UoeCkgICAg ICAgIGZwcmludGYgKHN0ZGVyciwgIiVzOiVkOiBbJWRdICIgI3ggIlxuIiwgICAgICAgIFwKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX0ZJTEVfXywgX19MSU5FX18sICsrZm5z X3RyYWNlX251bSkKLSNlbHNlCi0jZGVmaW5lIE5TVFJBQ0UoeCkKLSNlbmRpZgogCiAjaWZkZWYg SEFWRV9OUwogCkBAIC0zNjQsNyArMzU3LDcgQEAgc3RhdGljIHZvaWQKIHhfc2V0X2ljb25fbmFt ZSAoc3RydWN0IGZyYW1lICpmLCBMaXNwX09iamVjdCBhcmcsIExpc3BfT2JqZWN0IG9sZHZhbCkK IHsKICAgTlNWaWV3ICp2aWV3ID0gRlJBTUVfTlNfVklFVyAoZik7Ci0gIE5TVFJBQ0UgKHhfc2V0 X2ljb25fbmFtZSk7CisgIE5TVFJBQ0UgKCJ4X3NldF9pY29uX25hbWUiKTsKIAogICAvKiBzZWUg aWYgaXQncyBjaGFuZ2VkICovCiAgIGlmIChTVFJJTkdQIChhcmcpKQpAQCAtNDM2LDcgKzQyOSw3 IEBAIG5zX3NldF9uYW1lX2ludGVybmFsIChzdHJ1Y3QgZnJhbWUgKmYsIExpc3BfT2JqZWN0IG5h bWUpCiBzdGF0aWMgdm9pZAogbnNfc2V0X25hbWUgKHN0cnVjdCBmcmFtZSAqZiwgTGlzcF9PYmpl Y3QgbmFtZSwgaW50IGV4cGxpY2l0KQogewotICBOU1RSQUNFIChuc19zZXRfbmFtZSk7CisgIE5T VFJBQ0UgKCJuc19zZXRfbmFtZSIpOwogCiAgIC8qIE1ha2Ugc3VyZSB0aGF0IHJlcXVlc3RzIGZy b20gbGlzcCBjb2RlIG92ZXJyaWRlIHJlcXVlc3RzIGZyb20KICAgICAgRW1hY3MgcmVkaXNwbGF5 IGNvZGUuICAqLwpAQCAtNDc3LDcgKzQ3MCw3IEBAIG5zX3NldF9uYW1lIChzdHJ1Y3QgZnJhbWUg KmYsIExpc3BfT2JqZWN0IG5hbWUsIGludCBleHBsaWNpdCkKIHN0YXRpYyB2b2lkCiB4X2V4cGxp Y2l0bHlfc2V0X25hbWUgKHN0cnVjdCBmcmFtZSAqZiwgTGlzcF9PYmplY3QgYXJnLCBMaXNwX09i amVjdCBvbGR2YWwpCiB7Ci0gIE5TVFJBQ0UgKHhfZXhwbGljaXRseV9zZXRfbmFtZSk7CisgIE5T VFJBQ0UgKCJ4X2V4cGxpY2l0bHlfc2V0X25hbWUiKTsKICAgbnNfc2V0X25hbWUgKGYsIGFyZywg MSk7CiB9CiAKQEAgLTQ4OCw3ICs0ODEsNyBAQCB4X2V4cGxpY2l0bHlfc2V0X25hbWUgKHN0cnVj dCBmcmFtZSAqZiwgTGlzcF9PYmplY3QgYXJnLCBMaXNwX09iamVjdCBvbGR2YWwpCiB2b2lkCiB4 X2ltcGxpY2l0bHlfc2V0X25hbWUgKHN0cnVjdCBmcmFtZSAqZiwgTGlzcF9PYmplY3QgYXJnLCBM aXNwX09iamVjdCBvbGR2YWwpCiB7Ci0gIE5TVFJBQ0UgKHhfaW1wbGljaXRseV9zZXRfbmFtZSk7 CisgIE5TVFJBQ0UgKCJ4X2ltcGxpY2l0bHlfc2V0X25hbWUiKTsKIAogICAvKiBEZWFsIHdpdGgg TlMgc3BlY2lmaWMgZm9ybWF0IHQuICAqLwogICBpZiAoRlJBTUVfTlNfUCAoZikgJiYgKChGUkFN RV9JQ09OSUZJRURfUCAoZikgJiYgRVEgKFZpY29uX3RpdGxlX2Zvcm1hdCwgUXQpKQpAQCAtNTA1 LDcgKzQ5OCw3IEBAIHhfaW1wbGljaXRseV9zZXRfbmFtZSAoc3RydWN0IGZyYW1lICpmLCBMaXNw X09iamVjdCBhcmcsIExpc3BfT2JqZWN0IG9sZHZhbCkKIHN0YXRpYyB2b2lkCiB4X3NldF90aXRs ZSAoc3RydWN0IGZyYW1lICpmLCBMaXNwX09iamVjdCBuYW1lLCBMaXNwX09iamVjdCBvbGRfbmFt ZSkKIHsKLSAgTlNUUkFDRSAoeF9zZXRfdGl0bGUpOworICBOU1RSQUNFICgieF9zZXRfdGl0bGUi KTsKICAgLyogRG9uJ3QgY2hhbmdlIHRoZSB0aXRsZSBpZiBpdCdzIGFscmVhZHkgTkFNRS4gICov CiAgIGlmIChFUSAobmFtZSwgZi0+dGl0bGUpKQogICAgIHJldHVybjsKQEAgLTUzMyw3ICs1MjYs NyBAQCBuc19zZXRfbmFtZV9hc19maWxlbmFtZSAoc3RydWN0IGZyYW1lICpmKQogICBOU0F1dG9y ZWxlYXNlUG9vbCAqcG9vbDsKICAgTGlzcF9PYmplY3QgZW5jb2RlZF9uYW1lLCBlbmNvZGVkX2Zp bGVuYW1lOwogICBOU1N0cmluZyAqc3RyOwotICBOU1RSQUNFIChuc19zZXRfbmFtZV9hc19maWxl bmFtZSk7CisgIE5TVFJBQ0UgKCJuc19zZXRfbmFtZV9hc19maWxlbmFtZSIpOwogCiAgIGlmIChm LT5leHBsaWNpdF9uYW1lIHx8ICEgTklMUCAoZi0+dGl0bGUpKQogICAgIHJldHVybjsKQEAgLTcy OSw3ICs3MjIsNyBAQCBuc19pbXBsaWNpdGx5X3NldF9pY29uX3R5cGUgKHN0cnVjdCBmcmFtZSAq ZikKICAgTlNBdXRvcmVsZWFzZVBvb2wgKnBvb2w7CiAgIEJPT0wgc2V0TWluaSA9IFlFUzsKIAot ICBOU1RSQUNFIChuc19pbXBsaWNpdGx5X3NldF9pY29uX3R5cGUpOworICBOU1RSQUNFICgibnNf aW1wbGljaXRseV9zZXRfaWNvbl90eXBlIik7CiAKICAgYmxvY2tfaW5wdXQgKCk7CiAgIHBvb2wg PSBbW05TQXV0b3JlbGVhc2VQb29sIGFsbG9jXSBpbml0XTsKQEAgLTc5Nyw3ICs3OTAsNyBAQCB4 X3NldF9pY29uX3R5cGUgKHN0cnVjdCBmcmFtZSAqZiwgTGlzcF9PYmplY3QgYXJnLCBMaXNwX09i amVjdCBvbGR2YWwpCiAgIGlkIGltYWdlID0gbmlsOwogICBCT09MIHNldE1pbmkgPSBZRVM7CiAK LSAgTlNUUkFDRSAoeF9zZXRfaWNvbl90eXBlKTsKKyAgTlNUUkFDRSAoInhfc2V0X2ljb25fdHlw ZSIpOwogCiAgIGlmICghTklMUCAoYXJnKSAmJiBTWU1CT0xQIChhcmcpKQogICAgIHsKZGlmZiAt LWdpdCBhL3NyYy9uc2ltYWdlLm0gYi9zcmMvbnNpbWFnZS5tCmluZGV4IDllYWVlZmUuLmU3NmE3 ZGIgMTAwNjQ0Ci0tLSBhL3NyYy9uc2ltYWdlLm0KKysrIGIvc3JjL25zaW1hZ2UubQpAQCAtMzUs MTQgKzM1LDYgQEAgR05Vc3RlcCBwb3J0IGFuZCBwb3N0LTIwIHVwZGF0ZSBieSBBZHJpYW4gUm9i ZXJ0IChhcm9iZXJ0QGNvZ3NjaS51Y3NkLmVkdSkKICNpbmNsdWRlICJmcmFtZS5oIgogI2luY2x1 ZGUgImNvZGluZy5oIgogCi0vKiBjYWxsIHRyYWNpbmcgKi8KLSNpZiAwCi1pbnQgaW1hZ2VfdHJh Y2VfbnVtID0gMDsKLSNkZWZpbmUgTlNUUkFDRSh4KSAgICAgICAgZnByaW50ZiAoc3RkZXJyLCAi JXM6JWQ6IFslZF0gIiAjeCAiXG4iLCAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgX19GSUxFX18sIF9fTElORV9fLCArK2ltYWdlX3RyYWNlX251bSkKLSNlbHNlCi0j ZGVmaW5lIE5TVFJBQ0UoeCkKLSNlbmRpZgogCiAKIC8qID09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkBAIC01 Nyw3ICs0OSw3IEBAIHZvaWQgKgogbnNfaW1hZ2VfZnJvbV9YQk0gKHVuc2lnbmVkIGNoYXIgKmJp dHMsIGludCB3aWR0aCwgaW50IGhlaWdodCwKICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBs b25nIGZnLCB1bnNpZ25lZCBsb25nIGJnKQogewotICBOU1RSQUNFIChuc19pbWFnZV9mcm9tX1hC TSk7CisgIE5TVFJBQ0UgKCJuc19pbWFnZV9mcm9tX1hCTSIpOwogICByZXR1cm4gW1tFbWFjc0lt YWdlIGFsbG9jXSBpbml0RnJvbVhCTTogYml0cwogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICB3aWR0aDogd2lkdGggaGVpZ2h0OiBoZWlnaHQKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgZmc6IGZnIGJnOiBiZ107CkBAIC02Niw3ICs1OCw3IEBAIG5zX2lt YWdlX2Zyb21fWEJNICh1bnNpZ25lZCBjaGFyICpiaXRzLCBpbnQgd2lkdGgsIGludCBoZWlnaHQs CiB2b2lkICoKIG5zX2ltYWdlX2Zvcl9YUE0gKGludCB3aWR0aCwgaW50IGhlaWdodCwgaW50IGRl cHRoKQogewotICBOU1RSQUNFIChuc19pbWFnZV9mb3JfWFBNKTsKKyAgTlNUUkFDRSAoIm5zX2lt YWdlX2Zvcl9YUE0iKTsKICAgcmV0dXJuIFtbRW1hY3NJbWFnZSBhbGxvY10gaW5pdEZvclhQTVdp dGhEZXB0aDogZGVwdGgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICB3aWR0aDogd2lkdGggaGVpZ2h0OiBoZWlnaHRdOwogfQpAQCAtNzQsNyArNjYsNyBAQCBuc19p bWFnZV9mb3JfWFBNIChpbnQgd2lkdGgsIGludCBoZWlnaHQsIGludCBkZXB0aCkKIHZvaWQgKgog bnNfaW1hZ2VfZnJvbV9maWxlIChMaXNwX09iamVjdCBmaWxlKQogewotICBOU1RSQUNFIChuc19p bWFnZV9mcm9tX2JpdG1hcF9maWxlKTsKKyAgTlNUUkFDRSAoIm5zX2ltYWdlX2Zyb21fYml0bWFw X2ZpbGUiKTsKICAgcmV0dXJuIFtFbWFjc0ltYWdlIGFsbG9jSW5pdEZyb21GaWxlOiBmaWxlXTsK IH0KIApAQCAtODUsNyArNzcsNyBAQCBuc19sb2FkX2ltYWdlIChzdHJ1Y3QgZnJhbWUgKmYsIHN0 cnVjdCBpbWFnZSAqaW1nLAogICBFbWFjc0ltYWdlICplSW1nID0gbmlsOwogICBOU1NpemUgc2l6 ZTsKIAotICBOU1RSQUNFIChuc19sb2FkX2ltYWdlKTsKKyAgTlNUUkFDRSAoIm5zX2xvYWRfaW1h Z2UiKTsKIAogICBpZiAoU1RSSU5HUCAoc3BlY19maWxlKSkKICAgICB7CmRpZmYgLS1naXQgYS9z cmMvbnNtZW51Lm0gYi9zcmMvbnNtZW51Lm0KaW5kZXggYjVjYjY0ZC4uMmVmMTIyMyAxMDA2NDQK LS0tIGEvc3JjL25zbWVudS5tCisrKyBiL3NyYy9uc21lbnUubQpAQCAtNDUsMTMgKzQ1LDYgQEAg Q2FyYm9uIHZlcnNpb24gYnkgWWFtYW1vdG8gTWl0c3VoYXJ1LiAqLwogI2luY2x1ZGUgPHN5cy90 eXBlcy5oPgogI2VuZGlmCiAKLSNpZiAwCi1pbnQgbWVudV90cmFjZV9udW0gPSAwOwotI2RlZmlu ZSBOU1RSQUNFKHgpICAgICAgICBmcHJpbnRmIChzdGRlcnIsICIlczolZDogWyVkXSAiICN4ICJc biIsICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fRklMRV9fLCBf X0xJTkVfXywgKyttZW51X3RyYWNlX251bSkKLSNlbHNlCi0jZGVmaW5lIE5TVFJBQ0UoeCkKLSNl bmRpZgogCiAjaWYgMAogLyogSW5jbHVkZSBsaXNwIC0+IEMgY29tbW9uIG1lbnUgcGFyc2luZyBj b2RlICovCkBAIC0xMjEsNyArMTE0LDcgQEAgbnNfdXBkYXRlX21lbnViYXIgKHN0cnVjdCBmcmFt ZSAqZiwgYm9vbCBkZWVwX3AsIEVtYWNzTWVudSAqc3VibWVudSkKICAgbG9uZyB0OwogI2VuZGlm CiAKLSAgTlNUUkFDRSAobnNfdXBkYXRlX21lbnViYXIpOworICBOU1RSQUNFICgibnNfdXBkYXRl X21lbnViYXIiKTsKIAogICBpZiAoZiAhPSBTRUxFQ1RFRF9GUkFNRSAoKSkKICAgICAgIHJldHVy bjsKQEAgLTgwMSw2ICs3OTQsOCBAQCBuc19tZW51X3Nob3cgKHN0cnVjdCBmcmFtZSAqZiwgaW50 IHgsIGludCB5LCBpbnQgbWVudWZsYWdzLAogICB3aWRnZXRfdmFsdWUgKnd2LCAqZmlyc3Rfd3Yg PSAwOwogICBib29sIGtleW1hcHMgPSAobWVudWZsYWdzICYgTUVOVV9LRVlNQVBTKTsKIAorICBO U1RSQUNFICgibnNfbWVudV9zaG93Iik7CisKICAgYmxvY2tfaW5wdXQgKCk7CiAKICAgcC54ID0g eDsgcC55ID0geTsKQEAgLTE0MjMsNyArMTQxOCw3IEBAIG5zX3BvcHVwX2RpYWxvZyAoc3RydWN0 IGZyYW1lICpmLCBMaXNwX09iamVjdCBoZWFkZXIsIExpc3BfT2JqZWN0IGNvbnRlbnRzKQogICBC T09MIGlzUTsKICAgTlNBdXRvcmVsZWFzZVBvb2wgKnBvb2w7CiAKLSAgTlNUUkFDRSAoeC1wb3B1 cC1kaWFsb2cpOworICBOU1RSQUNFICgibnNfcG9wdXBfZGlhbG9nIik7CiAKICAgaXNRID0gTklM UCAoaGVhZGVyKTsKIApkaWZmIC0tZ2l0IGEvc3JjL25zdGVybS5oIGIvc3JjL25zdGVybS5oCmlu ZGV4IGMwNmI3YzQuLmQ3YWViZTAgMTAwNjQ0Ci0tLSBhL3NyYy9uc3Rlcm0uaAorKysgYi9zcmMv bnN0ZXJtLmgKQEAgLTYxLDYgKzYxLDI0MSBAQCB0eXBlZGVmIGZsb2F0IEVtYWNzQ0dGbG9hdDsK IAogLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT0KIAorICAgVHJhY2Ugc3VwcG9ydAorCisgICA9PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PSAqLworCisvKiBVbmNvbW1lbnQgdGhlIGZvbGxvd2luZyBsaW5lIHRvIGVuYWJs ZSB0cmFjZS4gKi8KKworLyogI2RlZmluZSBOU1RSQUNFX0VOQUJMRUQgMSAqLworCisKKy8qIFBy aW50IGEgY2FsbCB0cmVlIGNvbnRhaW5pbmcgYWxsIGFubm90YXRlZCBmdW5jdGlvbnMuCisKKyAg IFRoZSBjYWxsIHN0cnVjdHVyZSBvZiB0aGUgZnVuY3Rpb25zIGlzIHJlcHJlc2VudGVkIHVzaW5n CisgICBpbmRlbnRhdGlvbiBhbmQgdmVydGljYWwgbGluZXMuIEV4dHJhIGluZm9ybWF0aW9uIGlz IHByaW50ZWQgdXNpbmcKKyAgIGhvcml6b250YWwgbGluZXMgdGhhdCBjb25uZWN0IHRvIHRoZSB2 ZXJ0aWNhbCBsaW5lLgorCisgICBUaGUgcmV0dXJuIHZhbHVlIGlzIHJlcHJlc2VudGVkIHVzaW5n IHRoZSBhcnJvdyAiLT4+Ii4gRm9yIHNpbXBsZQorICAgZnVuY3Rpb25zLCB0aGUgYXJyb3cgY2Fu IGJlIHByaW50ZWQgb24gdGhlIHNhbWUgbGluZSBhcyB0aGUKKyAgIGZ1bmN0aW9uIG5hbWUuIElm IG1vcmUgb3V0cHV0IGlzIHByaW50ZWQsIGl0IGlzIGNvbm5lY3RlZCB0byB0aGUKKyAgIHZlcnRp Y2FsIGxpbmUgb2YgdGhlIGZ1bmN0aW9uLgorCisgICBUaGUgZmlyc3QgY29sdW1uIGNvbnRhaW5z IHRoZSBmaWxlIG5hbWUsIHRoZSBzZWNvbmQgdGhlIGxpbmUKKyAgIG51bWJlciwgYW5kIHRoZSB0 aGlyZCBhIG51bWJlciBpbmNyZWFzaW5nIGZvciBlYWNoIHRyYWNlIGxpbmUuCisKKyAgIE5vdGUg dGhhdCB0aGUgdHJhY2Ugc3lzdGVtLCB3aGVuIGVuYWJsZWQsIHVzZSB0aGUgR0NDL0NsYW5nCisg ICAiY2xlYW51cCIgZXh0ZW5zaW9uLgorCisgICBGb3IgZXhhbXBsZSAobG9uZyBsaW5lcyBtYW51 YWxseSBzcGxpdCB0byByZWR1Y2Ugd2lkdGgpOgorCituc3Rlcm0ubSAgOiAxNjAwOiBbIDQ0Mjhd ICBuc19mdWxsc2NyZWVuX2hvb2sKK25zdGVybS5tICA6IDcwMDY6IFsgNDQyOV0gIHwgaGFuZGxl RlMKK25zdGVybS5tICA6IDcwMzU6IFsgNDQzMF0gIHwgKy0tLSBGVUxMU0NSRUVOX01BWElNSVpF RAorbnN0ZXJtLm0gIDogNzYyNzogWyA0NDMxXSAgfCB8IHBlcmZvcm1ab29tCituc3Rlcm0ubSAg OiA3NjM2OiBbIDQ0MzJdICB8IHwgfCB6b29tCituc3Rlcm0ubSAgOiAgODc0OiBbIDQ0MzNdICB8 IHwgfCB8IG5zX3VwZGF0ZV9hdXRvX2hpZGVfbWVudV9iYXIKK25zdGVybS5tICA6IDY2MTU6IFsg NDQzNF0gIHwgfCB8IHwgW3dpbmRvd1dpbGxVc2VTdGFuZGFyZEZyYW1lOgorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdEZyYW1lOihYOjAgWTowKS8oVzoxNjAw IEg6MTE3NyldCituc3Rlcm0ubSAgOiAgIDk5OiBbIDQ0MzVdICB8IHwgfCB8ICstLS0gZnNfc3Rh dGU6IEZVTExTQ1JFRU5fTk9ORQorbnN0ZXJtLm0gIDogIDExOTogWyA0NDM2XSAgfCB8IHwgfCAr LS0tIGZzX2JlZm9yZV9mczogLTEKK25zdGVybS5tICA6ICAxMTU6IFsgNDQzN10gIHwgfCB8IHwg Ky0tLSBuZXh0X21heGltaXplZDogRlVMTFNDUkVFTl9NQVhJTUlaRUQKK25zdGVybS5tICA6IDY2 MTk6IFsgNDQzOF0gIHwgfCB8IHwgKy0tLSBuc191c2VyUmVjdDogKFg6MCBZOjApLyhXOjAgSDow KQorbnN0ZXJtLm0gIDogNjYyMDogWyA0NDM5XSAgfCB8IHwgfCArLS0tIFtzZW5kZXIgZnJhbWVd OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg KFg6MCBZOjYyNikvKFc6NTk1IEg6NTUxKQorbnN0ZXJtLm0gIDogNjY0NDogWyA0NDQwXSAgfCB8 IHwgfCArLS0tIG5zX3VzZXJSZWN0ICgyKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIChYOjAgWTo2MjYpLyhXOjU5NSBIOjU1MSkKK25zdGVy bS5tICA6IDY2ODQ6IFsgNDQ0MV0gIHwgfCB8IHwgKy0tLSBGVUxMU0NSRUVOX01BWElNSVpFRAor bnN0ZXJtLm0gIDogNzA1NzogWyA0NDQyXSAgfCB8IHwgfCB8IHNldEZTVmFsdWUKK25zdGVybS5t ICA6ICAxMTU6IFsgNDQ0M10gIHwgfCB8IHwgfCArLS0tIHZhbHVlOiBGVUxMU0NSRUVOX01BWElN SVpFRAorbnN0ZXJtLm0gIDogNjcxMTogWyA0NDQ0XSAgfCB8IHwgfCArLS0tIEZpbmFsIG5zX3Vz ZXJSZWN0OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgKFg6MCBZOjYyNikvKFc6NTk1IEg6NTUxKQorbnN0ZXJtLm0gIDogNjcxMjogWyA0NDQ1 XSAgfCB8IHwgfCArLS0tIEZpbmFsIG1heGltaXplZF93aWR0aDogMTYwMAorbnN0ZXJtLm0gIDog NjcxMzogWyA0NDQ2XSAgfCB8IHwgfCArLS0tIEZpbmFsIG1heGltaXplZF9oZWlnaHQ6IDExNzcK K25zdGVybS5tICA6ICAxMTk6IFsgNDQ0N10gIHwgfCB8IHwgKy0tLSBGaW5hbCBuZXh0X21heGlt aXplZDogLTEKK25zdGVybS5tICA6IDYyMDk6IFsgNDQ0OF0gIHwgfCB8IHwgfCB3aW5kb3dXaWxs UmVzaXplOiB0b1NpemU6IChXOjE2MDAgSDoxMTc3KQorbnN0ZXJtLm0gIDogNjIxMDogWyA0NDQ5 XSAgfCB8IHwgfCB8ICstLS0gW3NlbmRlciBmcmFtZV06CisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoWDowIFk6NjI2KS8oVzo1OTUgSDo1NTEp Cituc3Rlcm0ubSAgOiAgMTE1OiBbIDQ0NTBdICB8IHwgfCB8IHwgKy0tLSBmc19zdGF0ZTogRlVM TFNDUkVFTl9NQVhJTUlaRUQKK25zdGVybS5tICA6IDYyNzQ6IFsgNDQ1MV0gIHwgfCB8IHwgfCAr LS0tIGNvbHM6IDIyMyAgcm93czogNzkKK25zdGVybS5tICA6IDYyOTk6IFsgNDQ1Ml0gIHwgfCB8 IHwgfCArLT4+IChXOjE1OTYgSDoxMTY3KQorbnN0ZXJtLm0gIDogNjcxODogWyA0NDUzXSAgfCB8 IHwgfCArLT4+IChYOjAgWTowKS8oVzoxNjAwIEg6MTE3NykKKworICAgSGVyZSwgIm5zX2Z1bGxz Y3JlZW5faG9vayIgY2FsbHMgImhhbmRsZUZTIiwgd2hpY2ggaXMgdHVybiBjYWxscworICAgInBl cmZvcm1ab29tIi4gVGhpcyBmdW5jdGlvbiBjYWxscyAiW3N1cGVyIHBlcmZvcm1ab29tXSIsIHdo aWNoCisgICBpc24ndCBhbm5vdGVkIChzbyBpdCBkb2Vzbid0IHNob3cgdXAgaW4gdGhlIHRyYWNl KS4gSG93ZXZlciwgaXQKKyAgIGNhbGxzICJ6b29tIiB3aGljaCBpcyBhbm5vdGF0ZWQgc28gaXQg aXMgcGFydCBvZiB0aGUgY2FsbAorICAgdHJhY2UuIExhdGVyLCB0aGUgbWV0aG9kICJ3aW5kb3dX aWxsVXNlU3RhbmRhcmRGcmFtZSIgYW5kIHRoZQorICAgZnVuY3Rpb24gInNldEZTVmFsdWUiIGFy ZSBjYWxsZWQuIFRoZSBsaW5lcyB3aXRoICIrLS0tIiBjb250YWluCisgICBleHRyYSBpbmZvcm1h dGlvbiBhbmQgbGluZXMgY29udGFpbmluZyAiLT4+IiByZXByZXNlbnQgcmV0dXJuCisgICB2YWx1 ZXMuICovCisKKyNpZm5kZWYgTlNUUkFDRV9FTkFCTEVECisjZGVmaW5lIE5TVFJBQ0VfRU5BQkxF RCAwCisjZW5kaWYKKworI2lmIE5TVFJBQ0VfRU5BQkxFRAorZXh0ZXJuIGludCBuc3RyYWNlX251 bTsKK2V4dGVybiBpbnQgbnN0cmFjZV9kZXB0aDsKKwordm9pZCBuc3RyYWNlX2xlYXZlKGludCAq KTsKKworLyogcHJpbnRmLXN0eWxlIHRyYWNlIG91dHB1dC4gT3V0cHV0IGlzIGFsaWduZWQgd2l0 aCBjb250YWluZWQgaGVhZGluZy4gKi8KKyNkZWZpbmUgTlNUUkFDRV9NU0dfTk9fREFTSEVTKC4u LikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIGRvICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgXAorICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIGlmIChuc3RyYWNlX2VuYWJs ZWQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisg ICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIGZwcmludGYgKHN0ZGVyciwgIiUtMTBzOiU1 ZDogWyU1ZF0lLipzIiwgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAg ICAgICBfX0ZJTEVfXywgX19MSU5FX18sICsrbnN0cmFjZV9udW0sICAgICAgICAgICAgICAgICAg ICAgICBcCisgICAgICAgICAgICAgICAgICAgMipuc3RyYWNlX2RlcHRoLCAiICB8IHwgfCB8IHwg fCB8IHwgfCB8IHwgfCB8IHwgfCAuLiIpOyAgXAorICAgICAgICAgIGZwcmludGYgKHN0ZGVyciwg X19WQV9BUkdTX18pOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAg ICAgICBmcHJpbnRmIChzdGRlcnIsICJcbiIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBcCisgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFwKKyAgd2hpbGUoMCkKKworI2RlZmluZSBOU1RSQUNFX01TRyguLi4pIE5TVFJBQ0VfTVNHX05P X0RBU0hFUygiKy0tLSAiIF9fVkFfQVJHU19fKQorCisKKworLyogTWFjcm9zIGZvciBwcmludGlu ZyBjb21wbGV4IHR5cGVzLgorCisgICBOU1RSQUNFX0ZNVF93aGF0ICAgICAtLSBQcmludGYgZm9y bWF0IHN0cmluZyBmb3IgIndoYXQiLgorICAgTlNUUkFDRV9BUkdfd2hhdCh4KSAgLS0gUHJpbnRm IGFyZ3VtZW50IGZvciAid2hhdCIuICovCisKKyNkZWZpbmUgTlNUUkFDRV9GTVRfU0laRSAgICAg ICAgIihXOiUuMGYgSDolLjBmKSIKKyNkZWZpbmUgTlNUUkFDRV9BUkdfU0laRShlbHQpICAgKGVs dCkud2lkdGgsIChlbHQpLmhlaWdodAorCisjZGVmaW5lIE5TVFJBQ0VfRk1UX1BPSU5UICAgICAg ICIoWDolLjBmIFk6JS4wZikiCisjZGVmaW5lIE5TVFJBQ0VfQVJHX1BPSU5UKGVsdCkgIChlbHQp LngsIChlbHQpLnkKKworI2RlZmluZSBOU1RSQUNFX0ZNVF9SRUNUICAgICAgICBOU1RSQUNFX0ZN VF9QT0lOVCAiLyIgTlNUUkFDRV9GTVRfU0laRQorI2RlZmluZSBOU1RSQUNFX0FSR19SRUNUKGVs dCkgICBcCisgIE5TVFJBQ0VfQVJHX1BPSU5UKChlbHQpLm9yaWdpbiksIE5TVFJBQ0VfQVJHX1NJ WkUoKGVsdCkuc2l6ZSkKKworCisvKiBNYWNyb3MgZm9yIHByaW50aW5nIGNvbXBsZXggdHlwZXMg YXMgZXh0cmEgaW5mb3JtYXRpb24uICovCisKKyNkZWZpbmUgTlNUUkFDRV9TSVpFKHN0cixzaXpl KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgTlNUUkFDRV9N U0cgKHN0ciAiOiAiIE5TVFJBQ0VfRk1UX1NJWkUsICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFwKKyAgICAgICAgICAgICAgIE5TVFJBQ0VfQVJHX1NJWkUgKHNpemUpKTsKKworI2RlZmlu ZSBOU1RSQUNFX1BPSU5UKHN0cixwb2ludCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgXAorICBOU1RSQUNFX01TRyAoc3RyICI6ICIgTlNUUkFDRV9GTVRfUE9JTlQsICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgTlNUUkFDRV9BUkdf UE9JTlQgKHBvaW50KSk7CisKKyNkZWZpbmUgTlNUUkFDRV9SRUNUKHN0cixyZWN0KSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgTlNUUkFDRV9NU0cgKHN0ciAi OiAiIE5TVFJBQ0VfRk1UX1JFQ1QsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAg ICAgICAgICAgICAgIE5TVFJBQ0VfQVJHX1JFQ1QgKHJlY3QpKTsKKworI2RlZmluZSBOU1RSQUNF X0ZTVFlQRShzdHIsZnNfdHlwZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg XAorICBkbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgXAorICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgaWYgKG5zdHJhY2Vf ZW5hYmxlZCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAor ICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgXAorICAgICAgICAgIG5zX3ByaW50X2Z1bGxzY3JlZW5fdHlwZV9uYW1l KHN0ciwgZnNfdHlwZSk7ICAgICAgICAgICAgICAgICAgXAorICAgICAgICB9ICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAg IH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgXAorICB3aGlsZSgwKQorCisKKy8qIFJldHVybiB2YWx1ZSBtYWNyb3MuCisK KyAgIE5TVFJBQ0VfUkVUVVJOKGZtdCwgLi4uKSAtIFByaW50IGEgcmV0dXJuIHZhbHVlLCBzdXBw b3J0IHByaW50Zi1zdHlsZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0IHN0 cmluZyBhbmQgYXJndW1lbnRzLgorCisgICBOU1RSQUNFX1JFVFVSTl93aGF0KG9iaikgLSBQcmlu dCBhIHJldHVybiB2YWx1ZSBvZiBraW5kIFdIQVQuCisKKyAgIE5TVFJBQ0VfRk1UX1JFVFVSTiAt IEEgc3RyaW5nIGxpdGVyYWwgcmVwcmVzZW50aW5nIGEgcmV0dXJuZWQKKyAgICAgICAgICAgICAg ICAgICAgICAgIHZhbHVlLiAgVXNlZnVsIHdoZW4gY3JlYXRpbmcgYSBmb3JtYXQgc3RyaW5nCisg ICAgICAgICAgICAgICAgICAgICAgICB0byBwcmludGYtbGlrZSBjb25zdHJ1Y3RzIGxpa2UgTlNU UkFDRSgpLiAqLworCisjZGVmaW5lIE5TVFJBQ0VfRk1UX1JFVFVSTiAiLT4+IgorCisjZGVmaW5l IE5TVFJBQ0VfUkVUVVJOKC4uLikgXAorICBOU1RSQUNFX01TR19OT19EQVNIRVMgKCIrIiBOU1RS QUNFX0ZNVF9SRVRVUk4gIiAiIF9fVkFfQVJHU19fKQorCisjZGVmaW5lIE5TVFJBQ0VfUkVUVVJO X1NJWkUoc2l6ZSkgXAorICBOU1RSQUNFX1JFVFVSTihOU1RSQUNFX0ZNVF9TSVpFLCBOU1RSQUNF X0FSR19TSVpFKHNpemUpKQorCisjZGVmaW5lIE5TVFJBQ0VfUkVUVVJOX1BPSU5UKHBvaW50KSBc CisgIE5TVFJBQ0VfUkVUVVJOKE5TVFJBQ0VfRk1UX1BPSU5ULCBOU1RSQUNFX0FSR19QT0lOVChw b2ludCkpCisKKyNkZWZpbmUgTlNUUkFDRV9SRVRVUk5fUkVDVChyZWN0KSBcCisgIE5TVFJBQ0Vf UkVUVVJOKE5TVFJBQ0VfRk1UX1JFQ1QsIE5TVFJBQ0VfQVJHX1JFQ1QocmVjdCkpCisKKworLyog RnVuY3Rpb24gZW50ZXIgbWFjcm9zLgorCisgICBOU1RSQUNFIChmbXQsIC4uLikgLS0gRW5hYmxl IHRyYWNlIG91dHB1dCBpbiBjdXJlbnQgYmxvY2sKKyAgICAgICAgICAgICAgICAgICAgICAgICAo dHlwaWNhbGx5IGEgZnVuY3Rpb24pLiBBY2NlcHRzIHByaW50Zi1zdHlsZQorICAgICAgICAgICAg ICAgICAgICAgICAgIGFyZ3VtZW50cy4KKworICAgTlNUUkFDRV9XSEVOIChjb25kLCBmbXQsIC4u LikgLS0gRW5hYmxlIHRyYWNlIG91dHB1dCB3aGVuIENPTkQgaXMgdHJ1ZS4KKworICAgTlNUUkFD RV9VTkxFU1MgKGNvbmQsIGZtdCwgLi4uKSAtLSBFbmFibGUgdHJhY2Ugb3V0cHV0IHVubGVzcyBD T05EIGlzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRydWUuICovCisK KworCisjZGVmaW5lIE5TVFJBQ0VfV0hFTihjb25kLCAuLi4pICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBcCisgIF9fYXR0cmlidXRlX18oKGNsZWFudXAobnN0cmFjZV9s ZWF2ZSkpKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIGludCBuc3RyYWNlX2Vu YWJsZWQgPSAoY29uZCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc CisgIGlmIChuc3RyYWNlX2VuYWJsZWQpIHsgKytuc3RyYWNlX2RlcHRoOyB9ICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBcCisgIE5TVFJBQ0VfTVNHX05PX0RBU0hFUyhfX1ZBX0FSR1NfXyk7 CisKKyNlbmRpZiAvKiBOU1RSQUNFX0VOQUJMRUQgKi8KKworI2RlZmluZSBOU1RSQUNFKC4uLikg ICAgICAgICAgICAgIE5TVFJBQ0VfV0hFTigxLCBfX1ZBX0FSR1NfXykKKyNkZWZpbmUgTlNUUkFD RV9VTkxFU1MoY29uZCwgLi4uKSBOU1RSQUNFX1dIRU4oIShjb25kKSwgX19WQV9BUkdTX18pCisK KworLyogTm9uLXRyYWNlIHJlcGxhY2VtZW50IHZlcnNpb25zLiAqLworI2lmbmRlZiBOU1RSQUNF X1dIRU4KKyNkZWZpbmUgTlNUUkFDRV9XSEVOKC4uLikKKyNlbmRpZgorCisjaWZuZGVmIE5TVFJB Q0VfTVNHCisjZGVmaW5lIE5TVFJBQ0VfTVNHKC4uLikKKyNlbmRpZgorCisjaWZuZGVmIE5TVFJB Q0VfU0laRQorI2RlZmluZSBOU1RSQUNFX1NJWkUoc3RyLHNpemUpCisjZW5kaWYKKworI2lmbmRl ZiBOU1RSQUNFX1BPSU5UCisjZGVmaW5lIE5TVFJBQ0VfUE9JTlQoc3RyLHBvaW50KQorI2VuZGlm CisKKyNpZm5kZWYgTlNUUkFDRV9SRUNUCisjZGVmaW5lIE5TVFJBQ0VfUkVDVChzdHIscmVjdCkK KyNlbmRpZgorCisjaWZuZGVmIE5TVFJBQ0VfRlNUWVBFCisjZGVmaW5lIE5TVFJBQ0VfRlNUWVBF KHN0cixmc190eXBlKQorI2VuZGlmCisKKyNpZm5kZWYgTlNUUkFDRV9SRVRVUk5fU0laRQorI2Rl ZmluZSBOU1RSQUNFX1JFVFVSTl9TSVpFKHNpemUpCisjZW5kaWYKKworI2lmbmRlZiBOU1RSQUNF X1JFVFVSTl9QT0lOVAorI2RlZmluZSBOU1RSQUNFX1JFVFVSTl9QT0lOVChwb2ludCkKKyNlbmRp ZgorCisjaWZuZGVmIE5TVFJBQ0VfUkVUVVJOX1JFQ1QKKyNkZWZpbmUgTlNUUkFDRV9SRVRVUk5f UkVDVChyZWN0KQorI2VuZGlmCisKKyNpZm5kZWYgTlNUUkFDRV9SRVRVUk5fRlNUWVBFCisjZGVm aW5lIE5TVFJBQ0VfUkVUVVJOX0ZTVFlQRShmc190eXBlKQorI2VuZGlmCisKKworCisvKiA9PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PQorCiAgICBOU0NvbG9yLCBFbWFjc0NvbG9yIGNhdGVnb3J5LgogCiAgICA9 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PSAqLwpAQCAtMTc0LDYgKzQwOSw3IEBAIHR5cGVkZWYgZmxvYXQgRW1h Y3NDR0Zsb2F0OwogI2lmZGVmIE5TX0lNUExfR05VU1RFUAogLSAodm9pZCl3aW5kb3dEaWRNb3Zl OiAoaWQpc2VuZGVyOwogI2VuZGlmCistIChpbnQpZnVsbHNjcmVlblN0YXRlOwogQGVuZAogCiAK ZGlmZiAtLWdpdCBhL3NyYy9uc3Rlcm0ubSBiL3NyYy9uc3Rlcm0ubQppbmRleCBjNGJmZDdjLi43 NzRlYWY3IDEwMDY0NAotLS0gYS9zcmMvbnN0ZXJtLm0KKysrIGIvc3JjL25zdGVybS5tCkBAIC02 OCwzOCArNjgsNjAgQEAgR05Vc3RlcCBwb3J0IGFuZCBwb3N0LTIwIHVwZGF0ZSBieSBBZHJpYW4g Um9iZXJ0IChhcm9iZXJ0QGNvZ3NjaS51Y3NkLmVkdSkKICNpbmNsdWRlICJtYWNmb250LmgiCiAj ZW5kaWYKIAotLyogY2FsbCB0cmFjaW5nICovCi0jaWYgMAotaW50IHRlcm1fdHJhY2VfbnVtID0g MDsKLSNkZWZpbmUgTlNUUkFDRSh4KSAgICAgICAgZnByaW50ZiAoc3RkZXJyLCAiJXM6JWQ6IFsl ZF0gIiAjeCAiXG4iLCAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg X19GSUxFX18sIF9fTElORV9fLCArK3Rlcm1fdHJhY2VfbnVtKQotI2Vsc2UKLSNkZWZpbmUgTlNU UkFDRSh4KQotI2VuZGlmCiAKLS8qIERldGFpbGVkIHRyYWNpbmcuICJTIiBtZWFucyAic2l6ZSIg YW5kICJMTCIgc3RhbmRzIGZvciAibG93ZXIgbGVmdCIuICovCi0jaWYgMAotaW50IHRlcm1fdHJh Y2VfbnVtID0gMDsKLSNkZWZpbmUgTlNUUkFDRV9TSVpFKHN0cixzaXplKSBmcHJpbnRmIChzdGRl cnIsICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIiVzOiVkOiBbJWRdICAgIiBzdHIgICAgICAgICAgICAgICAgIFwKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAoUzolLjBmIHggJS4wZilcbiIsIFwKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19GSUxFX18sIF9fTElORV9fLCArK3Rlcm1f dHJhY2VfbnVtLFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZS5oZWln aHQsICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHNpemUud2lkdGgpCi0jZGVmaW5lIE5TVFJBQ0VfUkVDVChzLHIpIGZwcmludGYgKHN0 ZGVyciwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICIlczolZDogWyVkXSAgICIgcyAgICAgICAgICAgICAgICAgICBcCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgKExMOiUuMGYgeCAlLjBmIC0+IFM6 JS4wZiB4ICUuMGYpXG4iLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9f RklMRV9fLCBfX0xJTkVfXywgKyt0ZXJtX3RyYWNlX251bSxcCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHIub3JpZ2luLngsICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHIub3JpZ2luLnksICAgICAgICAgICAg ICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHIuc2l6 ZS5oZWlnaHQsICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHIuc2l6ZS53aWR0aCkKLSNlbHNlCi0jZGVmaW5lIE5TVFJBQ0VfU0laRShz dHIsc2l6ZSkKLSNkZWZpbmUgTlNUUkFDRV9SRUNUKHMscikKK2V4dGVybiBOU1N0cmluZyAqTlNN ZW51RGlkQmVnaW5UcmFja2luZ05vdGlmaWNhdGlvbjsKKworCisjaWYgTlNUUkFDRV9FTkFCTEVE CitpbnQgbnN0cmFjZV9udW0gPSAwOworaW50IG5zdHJhY2VfZGVwdGggPSAwOworCisvKiBDYWxs ZWQgd2hlbiBuc3RyYWNlX2VuYWJsZWQgZ29lcyBvdXQgb2Ygc2NvcGUuICovCit2b2lkIG5zdHJh Y2VfbGVhdmUoaW50ICogcG9pbnRlcl90b19uc3RyYWNlX2VuYWJsZWQpCit7CisgIGlmICgqcG9p bnRlcl90b19uc3RyYWNlX2VuYWJsZWQpCisgICAgeworICAgICAgLS1uc3RyYWNlX2RlcHRoOwor ICAgIH0KK30KKworCit2b2lkIG5zX3ByaW50X2Z1bGxzY3JlZW5fdHlwZV9uYW1lIChjaGFyIGNv bnN0ICogcywgaW50IGZzX3R5cGUpCit7CisgIC8vIFRoaXMgaXMgYSBzdXBwb3J0IGZ1bmN0aW9u IGZvciB0aGUgTlNUUkFDRSBzeXN0ZW0sIGRvbid0IGFkZCBhCisgIC8vIE5TVFJBQ0UgKCkgaGVy ZS4gSG93ZXZlciwgYSBsb2NhbCBgbnN0cmFjZV9lbmFibGVkJyB2YXJpYWJsZSBpcworICAvLyBu ZWVkZWQgYnkgdGhlIE5TVFJBQ0VfTVNHIG1hY3Jvcy4KKyAgaW50IG5zdHJhY2VfZW5hYmxlZCA9 IDE7CisKKyAgc3dpdGNoIChmc190eXBlKQorICAgIHsKKyAgICBjYXNlIEZVTExTQ1JFRU5fTk9O RToKKyAgICAgIE5TVFJBQ0VfTVNHICgiJXM6IEZVTExTQ1JFRU5fTk9ORSIsIHMpOworICAgICAg YnJlYWs7CisKKyAgICBjYXNlIEZVTExTQ1JFRU5fV0lEVEg6CisgICAgICBOU1RSQUNFX01TRyAo IiVzOiBGVUxMU0NSRUVOX1dJRFRIIiwgcyk7CisgICAgICBicmVhazsKKworICAgIGNhc2UgRlVM TFNDUkVFTl9IRUlHSFQ6CisgICAgICBOU1RSQUNFX01TRyAoIiVzOiBGVUxMU0NSRUVOX0hFSUdI VCIsIHMpOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIEZVTExTQ1JFRU5fQk9USDoKKyAgICAg IE5TVFJBQ0VfTVNHICgiJXM6IEZVTExTQ1JFRU5fQk9USCIsIHMpOworICAgICAgYnJlYWs7CisK KyAgICBjYXNlIEZVTExTQ1JFRU5fTUFYSU1JWkVEOgorICAgICAgTlNUUkFDRV9NU0cgKCIlczog RlVMTFNDUkVFTl9NQVhJTUlaRUQiLCBzKTsKKyAgICAgIGJyZWFrOworCisgICAgZGVmYXVsdDoK KyAgICAgIE5TVFJBQ0VfTVNHICgiJXM6ICVkIiwgcywgZnNfdHlwZSk7CisgICAgICBicmVhazsK KyAgICB9Cit9CiAjZW5kaWYKIAotZXh0ZXJuIE5TU3RyaW5nICpOU01lbnVEaWRCZWdpblRyYWNr aW5nTm90aWZpY2F0aW9uOwogCiAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCkBAIC0yNDIsNyArMjY0 LDcgQEAgc3RhdGljIHN0cnVjdCBmcmFtZSAqbnNfdXBkYXRpbmdfZnJhbWU7CiBzdGF0aWMgTlNW aWV3ICpmb2N1c192aWV3ID0gTlVMTDsKIHN0YXRpYyBpbnQgbnNfd2luZG93X251bSA9IDA7CiAj aWZkZWYgTlNfSU1QTF9HTlVTVEVQCi1zdGF0aWMgTlNSZWN0IHVSZWN0Oworc3RhdGljIE5TUmVj dCB1UmVjdDsgICAgICAgICAgICAvLyBUT0RPOiBUaGlzIGlzIGRlYWQsIHJlbW92ZSBpdD8KICNl bmRpZgogc3RhdGljIEJPT0wgZ3NhdmVkID0gTk87CiBzdGF0aWMgQk9PTCBuc19mYWtlX2tleWRv d24gPSBOTzsKQEAgLTYyMiw2ICs2NDQsNDYgQEAgbnNfcmVsZWFzZV9hdXRvcmVsZWFzZV9wb29s ICh2b2lkICpwb29sKQogfQogCiAKKy8qIFRydWUsIGlmIHRoZSBtZW51IGJhciBzaG91bGQgYmUg aGlkZGVuLiAgKi8KKworc3RhdGljIEJPT0wKK25zX21lbnVfYmFyX3Nob3VsZF9iZV9oaWRkZW4g KHZvaWQpCit7CisgIHJldHVybiAhTklMUCAobnNfYXV0b19oaWRlX21lbnVfYmFyKQorICAgICYm IFtOU0FwcCByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKHNldFByZXNlbnRhdGlvbk9wdGlv bnM6KV07Cit9CisKKworc3RhdGljIENHRmxvYXQKK25zX21lbnVfYmFyX2hlaWdodCAoTlNTY3Jl ZW4gKnNjcmVlbikKKy8qIFRoZSBoZWlnaHQgb2YgdGhlIG1lbnUgYmFyLCBpZiB2aXNpYmxlLiAq LworeworICAvLyAgTlNUUkFDRSAoIm5zX21lbnVfYmFyX2hlaWdodCIpOworCisgIENHRmxvYXQg cmVzOworCisgIGlmIChuc19tZW51X2Jhcl9zaG91bGRfYmVfaGlkZGVuKCkpCisgICAgeworICAg ICAgcmVzID0gMDsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICBOU1JlY3Qgc2NyZWVuRnJh bWUgPSBbc2NyZWVuIGZyYW1lXTsKKyAgICAgIE5TUmVjdCBzY3JlZW5WaXNpYmxlRnJhbWUgPSBb c2NyZWVuIHZpc2libGVGcmFtZV07CisKKyAgICAgIENHRmxvYXQgZnJhbWVUb3AgPSBzY3JlZW5G cmFtZS5vcmlnaW4ueSArIHNjcmVlbkZyYW1lLnNpemUuaGVpZ2h0OworICAgICAgQ0dGbG9hdCB2 aXNpYmxlRnJhbWVUb3AgPSAoc2NyZWVuVmlzaWJsZUZyYW1lLm9yaWdpbi55CisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICArIHNjcmVlblZpc2libGVGcmFtZS5zaXplLmhlaWdodCk7 CisKKyAgICAgIHJlcyA9IGZyYW1lVG9wIC0gdmlzaWJsZUZyYW1lVG9wOworCisgICAgfQorCisg IC8vIE5TVFJBQ0VfTVNHIChOU1RSQUNFX0ZNVF9SRVRVUk4gIiUuMGYiLCByZXMpOworCisgIHJl dHVybiByZXM7Cit9CisKIAogLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIApAQCAtNjcxLDQ0ICs3MzMs MTQwIEBAIG5zX3JlbGVhc2VfYXV0b3JlbGVhc2VfcG9vbCAodm9pZCAqcG9vbCkKIC8vICAgIFJl c3VsdDogTWVudSBiYXIgdmlzaWJsZSwgZnJhbWUgcGxhY2VkIGltbWVkaWF0ZWx5IGJlbG93IHRo ZSBtZW51LgogLy8KIAorc3RhdGljIE5TUmVjdCBjb25zdHJhaW5fZnJhbWVfcmVjdChOU1JlY3Qg ZnJhbWVSZWN0KQoreworICBOU1RSQUNFICgiY29uc3RyYWluX2ZyYW1lX3JlY3QoIiBOU1RSQUNF X0ZNVF9SRUNUICIpIiwKKyAgICAgICAgICAgICBOU1RSQUNFX0FSR19SRUNUIChmcmFtZVJlY3Qp KTsKKworICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLQorICAvLyBDb2xsZWN0IGluZm9ybWF0aW9u IGFib3V0IHRoZSBzY3JlZW4gdGhlIGZyYW1lIGlzIGNvdmVyaW5nLgorICAvLworCisgIE5TQXJy YXkgKnNjcmVlbnMgPSBbTlNTY3JlZW4gc2NyZWVuc107CisgIE5TVUludGVnZXIgbnJfc2NyZWVu cyA9IFtzY3JlZW5zIGNvdW50XTsKKworICBpbnQgaTsKKworICAvLyBUaGUgaGVpZ2h0IG9mIHRo ZSBtZW51IGJhciwgaWYgcHJlc2VudCBpbiBhbnkgc2NyZWVuIHRoZSBmcmFtZSBpcworICAvLyBk aXNwbGF5ZWQgaW4uCisgIGludCBtZW51X2Jhcl9oZWlnaHQgPSAwOworCisgIC8vIEEgcmVjdGFu Z2xlIGNvdmVyaW5nIGFsbCB0aGUgc2NyZWVuIHRoZSBmcmFtZSBpcyBkaXNwbGF5ZWQgaW4uCisg IE5TUmVjdCBtdWx0aXNjcmVlblJlY3QgPSBOU01ha2VSZWN0KDAsIDAsIDAsIDApOworICBmb3Ig KGkgPSAwOyBpIDwgbnJfc2NyZWVuczsgKytpICkKKyAgICB7CisgICAgICBOU1NjcmVlbiAqcyA9 IFtzY3JlZW5zIG9iamVjdEF0SW5kZXg6IGldOworICAgICAgTlNSZWN0IHNjclJlY3QgPSBbcyBm cmFtZV07CisKKyAgICAgIE5TVFJBQ0VfTVNHICgiU2NyZWVuICVkOiAiIE5TVFJBQ0VfRk1UX1JF Q1QsCisgICAgICAgICAgICAgICAgICAgaSwgTlNUUkFDRV9BUkdfUkVDVCAoc2NyUmVjdCkpOwor CisgICAgICBpZiAoTlNJbnRlcnNlY3Rpb25SZWN0IChmcmFtZVJlY3QsIHNjclJlY3QpLnNpemUu aGVpZ2h0ICE9IDApCisgICAgICAgIHsKKyAgICAgICAgICBtdWx0aXNjcmVlblJlY3QgPSBOU1Vu aW9uUmVjdCAobXVsdGlzY3JlZW5SZWN0LCBzY3JSZWN0KTsKKworICAgICAgICAgIG1lbnVfYmFy X2hlaWdodCA9IG1heChtZW51X2Jhcl9oZWlnaHQsIG5zX21lbnVfYmFyX2hlaWdodCAocykpOwor ICAgICAgICB9CisgICAgfQorCisgIE5TVFJBQ0VfUkVDVCAoIm11bHRpc2NyZWVuUmVjdCIsIG11 bHRpc2NyZWVuUmVjdCk7CisKKyAgTlNUUkFDRV9NU0cgKCJtZW51X2Jhcl9oZWlnaHQ6ICVkIiwg bWVudV9iYXJfaGVpZ2h0KTsKKworICBpZiAobXVsdGlzY3JlZW5SZWN0LnNpemUud2lkdGggPT0g MAorICAgICAgfHwgbXVsdGlzY3JlZW5SZWN0LnNpemUuaGVpZ2h0ID09IDApCisgICAgeworICAg ICAgLy8gRmFpbGVkIHRvIGZpbmQgYW55IG1vbml0b3IsIGdpdmUgdXAuCisgICAgICBOU1RSQUNF X01TRyAoIm11bHRpc2NyZWVuUmVjdCBlbXB0eSIpOworICAgICAgTlNUUkFDRV9SRVRVUk5fUkVD VCAoZnJhbWVSZWN0KTsKKyAgICAgIHJldHVybiBmcmFtZVJlY3Q7CisgICAgfQorCisKKyAgLy8g LS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgLy8gRmluZCBhIHN1aXRhYmxlIHBsYWNlbWVudC4KKyAg Ly8KKworICBpZiAobnNfbWVudV9iYXJfc2hvdWxkX2JlX2hpZGRlbigpKQorICAgIHsKKyAgICAg IC8vIFdoZW4gdGhlIG1lbnUgYmFyIGlzIGhpZGRlbiwgdGhlIHVzZXIgbWF5IHBsYWNlIHBhcnQg b2YgdGhlCisgICAgICAvLyBmcmFtZSBhYm92ZSB0aGUgdG9wIG9mIHRoZSBzY3JlZW4sIGZvciBl eGFtcGxlIHRvIGhpZGUgdGhlCisgICAgICAvLyB0aXRsZSBiYXIuCisgICAgICAvLworICAgICAg Ly8gSGVuY2UsIGtlZXAgdGhlIG9yaWdpbmFsIHBvc2l0aW9uLgorICAgIH0KKyAgZWxzZQorICAg IHsKKyAgICAgIC8vIEVuc3VyZSB0aGF0IHRoZSBmcmFtZSBpcyBiZWxvdyB0aGUgbWVudSBiYXIs IG9yIGJlbG93IHRoZSB0b3AKKyAgICAgIC8vIG9mIHRoZSBzY3JlZW4uCisgICAgICAvLworICAg ICAgLy8gVGhpcyBhc3N1bWUgdGhhdCB0aGUgbWVudSBiYXIgaXMgcGxhY2VkIGF0IHRoZSB0b3Ag aW4gdGhlCisgICAgICAvLyByZWN0YW5nbGUgdGhhdCBjb3ZlcnMgdGhlIG1vbml0b3JzLiAoSXQg ZG9lc24ndCBoYXZlIHRvIGJlLAorICAgICAgLy8gYnV0IGlmIGl0J3Mgbm90IGl0J3MgaGFyZCB0 byBkbyBhbnl0aGluZyB1c2VmdWwuKQorICAgICAgQ0dGbG9hdCB0b3BPZldvcmtBcmVhID0gKG11 bHRpc2NyZWVuUmVjdC5vcmlnaW4ueQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsg bXVsdGlzY3JlZW5SZWN0LnNpemUuaGVpZ2h0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgLSBtZW51X2Jhcl9oZWlnaHQpOworCisgICAgICBDR0Zsb2F0IHRvcE9mRnJhbWUgPSBmcmFt ZVJlY3Qub3JpZ2luLnkgKyBmcmFtZVJlY3Quc2l6ZS5oZWlnaHQ7CisgICAgICBpZiAodG9wT2ZG cmFtZSA+IHRvcE9mV29ya0FyZWEpCisgICAgICAgIHsKKyAgICAgICAgICBmcmFtZVJlY3Qub3Jp Z2luLnkgLT0gdG9wT2ZGcmFtZSAtIHRvcE9mV29ya0FyZWE7CisgICAgICAgICAgTlNUUkFDRV9S RUNUICgiQWZ0ZXIgcGxhY2VtZW50IGFkanVzdCIsIGZyYW1lUmVjdCk7CisgICAgICAgIH0KKyAg ICB9CisKKyAgLy8gSW5jbHVkZSB0aGUgZm9sbG93aW5nIHNlY3Rpb24gdG8gcmVzdHJpY3QgZnJh bWUgdG8gdGhlIHNjcmVlbnMuCisgIC8vIChJZiBzbywgdXBkYXRlIGl0IHRvIGFsbG93IHRoZSBm cmFtZSB0byBzdHJldGNoIGRvd24gYmVsb3cgdGhlCisgIC8vIHNjcmVlbi4pCisjaWYgMAorICAv LyAtLS0tLS0tLS0tLS0tLS0tLS0tLQorICAvLyBFbnN1cmUgZnJhbWUgZG9lc24ndCBzdHJldGNo IGJlbG93IHRoZSBzY3JlZW5zLgorICAvLworCisgIENHRmxvYXQgZGlmZiA9IG11bHRpc2NyZWVu UmVjdC5vcmlnaW4ueSAtIGZyYW1lUmVjdC5vcmlnaW4ueTsKKworICBpZiAoZGlmZiA+IDApCisg ICAgeworICAgICAgZnJhbWVSZWN0Lm9yaWdpbi55ID0gbXVsdGlzY3JlZW5SZWN0Lm9yaWdpbi55 OworICAgICAgZnJhbWVSZWN0LnNpemUuaGVpZ2h0IC09IGRpZmY7CisgICAgfQorI2VuZGlmCisK KyAgTlNUUkFDRV9SRVRVUk5fUkVDVCAoZnJhbWVSZWN0KTsKKyAgcmV0dXJuIGZyYW1lUmVjdDsK K30KKworCiBzdGF0aWMgdm9pZAogbnNfY29uc3RyYWluX2FsbF9mcmFtZXMgKHZvaWQpCiB7CiAg IExpc3BfT2JqZWN0IHRhaWwsIGZyYW1lOwogCisgIE5TVFJBQ0UgKCJuc19jb25zdHJhaW5fYWxs X2ZyYW1lcyIpOworCiAgIEZPUl9FQUNIX0ZSQU1FICh0YWlsLCBmcmFtZSkKICAgICB7CiAgICAg ICBzdHJ1Y3QgZnJhbWUgKmYgPSBYRlJBTUUgKGZyYW1lKTsKICAgICAgIGlmIChGUkFNRV9OU19Q IChmKSkKICAgICAgICAgewogICAgICAgICAgIE5TVmlldyAqdmlldyA9IEZSQU1FX05TX1ZJRVcg KGYpOwotICAgICAgICAgIC8qIFRoaXMgbm8tb3Agd2lsbCB0cmlnZ2VyIHRoZSBkZWZhdWx0IHdp bmRvdyBwbGFjaW5nCi0gICAgICAgICAgICogY29uc3RyYWludCBzeXN0ZW0uICovCi0gICAgICAg ICAgW1t2aWV3IHdpbmRvd10gc2V0RnJhbWVPcmlnaW46W1t2aWV3IHdpbmRvd10gZnJhbWVdLm9y aWdpbl07CisKKyAgICAgICAgICBbW3ZpZXcgd2luZG93XSBzZXRGcmFtZTpjb25zdHJhaW5fZnJh bWVfcmVjdChbW3ZpZXcgd2luZG93XSBmcmFtZV0pCisgICAgICAgICAgICAgICAgICAgICAgICAg IGRpc3BsYXk6Tk9dOwogICAgICAgICB9CiAgICAgfQogfQogCiAKLS8qIFRydWUsIGlmIHRoZSBt ZW51IGJhciBzaG91bGQgYmUgaGlkZGVuLiAgKi8KLQotc3RhdGljIEJPT0wKLW5zX21lbnVfYmFy X3Nob3VsZF9iZV9oaWRkZW4gKHZvaWQpCi17Ci0gIHJldHVybiAhTklMUCAobnNfYXV0b19oaWRl X21lbnVfYmFyKQotICAgICYmIFtOU0FwcCByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKHNl dFByZXNlbnRhdGlvbk9wdGlvbnM6KV07Ci19Ci0KLQogLyogU2hvdyBvciBoaWRlIHRoZSBtZW51 IGJhciwgYmFzZWQgb24gdXNlciBzZXR0aW5nLiAgKi8KIAogc3RhdGljIHZvaWQKIG5zX3VwZGF0 ZV9hdXRvX2hpZGVfbWVudV9iYXIgKHZvaWQpCiB7CiAjaWZkZWYgTlNfSU1QTF9DT0NPQQotICBi bG9ja19pbnB1dCAoKTsKKyAgTlNUUkFDRSAoIm5zX3VwZGF0ZV9hdXRvX2hpZGVfbWVudV9iYXIi KTsKIAotICBOU1RSQUNFIChuc191cGRhdGVfYXV0b19oaWRlX21lbnVfYmFyKTsKKyAgYmxvY2tf aW5wdXQgKCk7CiAKICAgaWYgKE5TQXBwICE9IG5pbCAmJiBbTlNBcHAgaXNBY3RpdmVdKQogICAg IHsKQEAgLTc0OSw3ICs5MDcsNyBAQCBuc191cGRhdGVfYmVnaW4gKHN0cnVjdCBmcmFtZSAqZikK ICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiB7CiAgIEVtYWNzVmlldyAqdmlldyA9IEZSQU1FX05T X1ZJRVcgKGYpOwotICBOU1RSQUNFIChuc191cGRhdGVfYmVnaW4pOworICBOU1RSQUNFICgibnNf dXBkYXRlX2JlZ2luIik7CiAKICAgbnNfdXBkYXRlX2F1dG9faGlkZV9tZW51X2JhciAoKTsKIApA QCAtODA2LDcgKzk2NCw3IEBAIG5zX3VwZGF0ZV93aW5kb3dfYmVnaW4gKHN0cnVjdCB3aW5kb3cg KncpCiAgIHN0cnVjdCBmcmFtZSAqZiA9IFhGUkFNRSAoV0lORE9XX0ZSQU1FICh3KSk7CiAgIE1v dXNlX0hMSW5mbyAqaGxpbmZvID0gTU9VU0VfSExfSU5GTyAoZik7CiAKLSAgTlNUUkFDRSAobnNf dXBkYXRlX3dpbmRvd19iZWdpbik7CisgIE5TVFJBQ0UgKCJuc191cGRhdGVfd2luZG93X2JlZ2lu Iik7CiAgIHctPm91dHB1dF9jdXJzb3IgPSB3LT5jdXJzb3I7CiAKICAgYmxvY2tfaW5wdXQgKCk7 CkBAIC04MzYsNiArOTk0LDggQEAgbnNfdXBkYXRlX3dpbmRvd19lbmQgKHN0cnVjdCB3aW5kb3cg KncsIGJvb2wgY3Vyc29yX29uX3AsCiAgICBleHRlcm5hbCAoUklGKSBjYWxsOyBmb3Igb25lIHdp bmRvdyBjYWxsZWQgYmVmb3JlIHVwZGF0ZV9lbmQKICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiB7 CisgIE5TVFJBQ0UgKCJ1cGRhdGVfd2luZG93X2VuZCIpOworCiAgIC8qIG5vdGU6IHRoaXMgZm4g aXMgbmVhcmx5IGlkZW50aWNhbCBpbiBhbGwgdGVybXMgKi8KICAgaWYgKCF3LT5wc2V1ZG9fd2lu ZG93X3ApCiAgICAgewpAQCAtODYxLDggKzEwMjEsNiBAQCBuc191cGRhdGVfd2luZG93X2VuZCAo c3RydWN0IHdpbmRvdyAqdywgYm9vbCBjdXJzb3Jfb25fcCwKICAgICAgZnJhbWVfdXBfdG9fZGF0 ZSB0byByZWRpc3BsYXkgdGhlIG1vdXNlIGhpZ2hsaWdodC4gICovCiAgIGlmIChtb3VzZV9mYWNl X292ZXJ3cml0dGVuX3ApCiAgICAgcmVzZXRfbW91c2VfaGlnaGxpZ2h0IChNT1VTRV9ITF9JTkZP IChYRlJBTUUgKHctPmZyYW1lKSkpOwotCi0gIE5TVFJBQ0UgKHVwZGF0ZV93aW5kb3dfZW5kKTsK IH0KIAogCkBAIC04NzUsNiArMTAzMyw4IEBAIG5zX3VwZGF0ZV9lbmQgKHN0cnVjdCBmcmFtZSAq ZikKIHsKICAgRW1hY3NWaWV3ICp2aWV3ID0gRlJBTUVfTlNfVklFVyAoZik7CiAKKyAgTlNUUkFD RSAoIm5zX3VwZGF0ZV9lbmQiKTsKKwogLyogICBpZiAoZiA9PSBNT1VTRV9ITF9JTkZPIChmKS0+ bW91c2VfZmFjZV9tb3VzZV9mcmFtZSkgKi8KICAgTU9VU0VfSExfSU5GTyAoZiktPm1vdXNlX2Zh Y2VfZGVmZXIgPSAwOwogCkBAIC04ODUsNyArMTA0NSw2IEBAIG5zX3VwZGF0ZV9lbmQgKHN0cnVj dCBmcmFtZSAqZikKIAogICB1bmJsb2NrX2lucHV0ICgpOwogICBuc191cGRhdGluZ19mcmFtZSA9 IE5VTEw7Ci0gIE5TVFJBQ0UgKG5zX3VwZGF0ZV9lbmQpOwogfQogCiBzdGF0aWMgdm9pZApAQCAt ODk5LDcgKzEwNTgsNyBAQCBuc19mb2N1cyAoc3RydWN0IGZyYW1lICpmLCBOU1JlY3QgKnIsIGlu dCBuKQogICAgICB0aGUgZW50aXJlIHdpbmRvdy4KICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiB7 Ci0vLyAgTlNUUkFDRSAobnNfZm9jdXMpOworLy8gIE5TVFJBQ0UgKCJuc19mb2N1cyIpOwogLyog c3RhdGljIGludCBjID0wOwogICAgZnByaW50ZiAoc3RkZXJyLCAiZm9jdXM6ICVkIiwgYysrKTsK ICAgIGlmIChyKSBmcHJpbnRmIChzdGRlcnIsICIgKCUuMGYsICUuMGYgOiAlLjBmIHggJS4wZiki LCByLT5vcmlnaW4ueCwgci0+b3JpZ2luLnksIHItPnNpemUud2lkdGgsIHItPnNpemUuaGVpZ2h0 KTsKQEAgLTk0Myw3ICsxMTAyLDcgQEAgbnNfdW5mb2N1cyAoc3RydWN0IGZyYW1lICpmKQogICAg ICBJbnRlcm5hbDogUmVtb3ZlIGZvY3VzIG9uIGdpdmVuIGZyYW1lCiAgICAtLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLSAqLwogewotLy8gIE5TVFJBQ0UgKG5zX3VuZm9jdXMpOworLy8gIE5TVFJBQ0UgKCJuc191 bmZvY3VzIik7CiAKICAgaWYgKGdzYXZlZCkKICAgICB7CkBAIC05OTMsNyArMTE1Miw3IEBAIG5z X3JpbmdfYmVsbCAoc3RydWN0IGZyYW1lICpmKQogICAgICAiQmVlcCIgcm91dGluZQogICAgLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0gKi8KIHsKLSAgTlNUUkFDRSAobnNfcmluZ19iZWxsKTsKKyAgTlNUUkFD RSAoIm5zX3JpbmdfYmVsbCIpOwogICBpZiAodmlzaWJsZV9iZWxsKQogICAgIHsKICAgICAgIE5T QXV0b3JlbGVhc2VQb29sICpwb29sOwpAQCAtMTA3OSw3ICsxMjM4LDcgQEAgbnNfZnJhbWVfcmFp c2VfbG93ZXIgKHN0cnVjdCBmcmFtZSAqZiwgYm9vbCByYWlzZSkKICAgICAgRXh0ZXJuYWwgKGhv b2spCiAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogewotICBOU1RSQUNFIChuc19mcmFtZV9yYWlz ZV9sb3dlcik7CisgIE5TVFJBQ0UgKCJuc19mcmFtZV9yYWlzZV9sb3dlciIpOwogCiAgIGlmIChy YWlzZSkKICAgICBuc19yYWlzZV9mcmFtZSAoZik7CkBAIC0xMDk3LDcgKzEyNTYsNyBAQCBuc19m cmFtZV9yZWhpZ2hsaWdodCAoc3RydWN0IGZyYW1lICpmcmFtZSkKICAgc3RydWN0IG5zX2Rpc3Bs YXlfaW5mbyAqZHB5aW5mbyA9IEZSQU1FX0RJU1BMQVlfSU5GTyAoZnJhbWUpOwogICBzdHJ1Y3Qg ZnJhbWUgKm9sZF9oaWdobGlnaHQgPSBkcHlpbmZvLT54X2hpZ2hsaWdodF9mcmFtZTsKIAotICBO U1RSQUNFIChuc19mcmFtZV9yZWhpZ2hsaWdodCk7CisgIE5TVFJBQ0UgKCJuc19mcmFtZV9yZWhp Z2hsaWdodCIpOwogICBpZiAoZHB5aW5mby0+eF9mb2N1c19mcmFtZSkKICAgICB7CiAgICAgICBk cHlpbmZvLT54X2hpZ2hsaWdodF9mcmFtZQpAQCAtMTEzNiw3ICsxMjk1LDcgQEAgeF9tYWtlX2Zy YW1lX3Zpc2libGUgKHN0cnVjdCBmcmFtZSAqZikKICAgICAgRXh0ZXJuYWw6IFNob3cgdGhlIHdp bmRvdyAoWDExIHNlbWFudGljcykKICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiB7Ci0gIE5TVFJB Q0UgKHhfbWFrZV9mcmFtZV92aXNpYmxlKTsKKyAgTlNUUkFDRSAoInhfbWFrZV9mcmFtZV92aXNp YmxlIik7CiAgIC8qIFhYWDogYXQgc29tZSBwb2ludHMgaW4gcGFzdCB0aGlzIHdhcyBub3QgbmVl ZGVkLCBhcyB0aGUgb25seSBwbGFjZSB0aGF0CiAgICAgIGNhbGxlZCB0aGlzIChmcmFtZS5jOkZy YWlzZV9mcmFtZSAoKSkgYWxzbyBjYWxsZWQgcmFpc2VfbG93ZXI7CiAgICAgIGlmIHRoaXMgZW5k cyB1cCB0aGUgY2FzZSBhZ2FpbiwgY29tbWVudCB0aGlzIG91dCBhZ2Fpbi4gKi8KQEAgLTExNzAs NyArMTMyOSw3IEBAIHhfbWFrZV9mcmFtZV9pbnZpc2libGUgKHN0cnVjdCBmcmFtZSAqZikKICAg IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tICovCiB7CiAgIE5TVmlldyAqdmlldzsKLSAgTlNUUkFDRSAoeF9t YWtlX2ZyYW1lX2ludmlzaWJsZSk7CisgIE5TVFJBQ0UgKCJ4X21ha2VfZnJhbWVfaW52aXNpYmxl Iik7CiAgIGNoZWNrX3dpbmRvd19zeXN0ZW0gKGYpOwogICB2aWV3ID0gRlJBTUVfTlNfVklFVyAo Zik7CiAgIFtbdmlldyB3aW5kb3ddIG9yZGVyT3V0OiBOU0FwcF07CkBAIC0xMTg4LDcgKzEzNDcs NyBAQCB4X2ljb25pZnlfZnJhbWUgKHN0cnVjdCBmcmFtZSAqZikKICAgTlNWaWV3ICp2aWV3Owog ICBzdHJ1Y3QgbnNfZGlzcGxheV9pbmZvICpkcHlpbmZvOwogCi0gIE5TVFJBQ0UgKHhfaWNvbmlm eV9mcmFtZSk7CisgIE5TVFJBQ0UgKCJ4X2ljb25pZnlfZnJhbWUiKTsKICAgY2hlY2tfd2luZG93 X3N5c3RlbSAoZik7CiAgIHZpZXcgPSBGUkFNRV9OU19WSUVXIChmKTsKICAgZHB5aW5mbyA9IEZS QU1FX0RJU1BMQVlfSU5GTyAoZik7CkBAIC0xMjIwLDcgKzEzNzksNyBAQCB4X2ZyZWVfZnJhbWVf cmVzb3VyY2VzIChzdHJ1Y3QgZnJhbWUgKmYpCiAgIHN0cnVjdCBuc19kaXNwbGF5X2luZm8gKmRw eWluZm87CiAgIE1vdXNlX0hMSW5mbyAqaGxpbmZvOwogCi0gIE5TVFJBQ0UgKHhfZnJlZV9mcmFt ZV9yZXNvdXJjZXMpOworICBOU1RSQUNFICgieF9mcmVlX2ZyYW1lX3Jlc291cmNlcyIpOwogICBj aGVja193aW5kb3dfc3lzdGVtIChmKTsKICAgdmlldyA9IEZSQU1FX05TX1ZJRVcgKGYpOwogICBk cHlpbmZvID0gRlJBTUVfRElTUExBWV9JTkZPIChmKTsKQEAgLTEyNTcsNyArMTQxNiw3IEBAIHhf ZGVzdHJveV93aW5kb3cgKHN0cnVjdCBmcmFtZSAqZikKICAgICAgRXh0ZXJuYWw6IERlbGV0ZSB0 aGUgd2luZG93CiAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogewotICBOU1RSQUNFICh4X2Rlc3Ry b3lfd2luZG93KTsKKyAgTlNUUkFDRSAoInhfZGVzdHJveV93aW5kb3ciKTsKICAgY2hlY2tfd2lu ZG93X3N5c3RlbSAoZik7CiAgIHhfZnJlZV9mcmFtZV9yZXNvdXJjZXMgKGYpOwogICBuc193aW5k b3dfbnVtLS07CkBAIC0xMjc1LDcgKzE0MzQsNyBAQCB4X3NldF9vZmZzZXQgKHN0cnVjdCBmcmFt ZSAqZiwgaW50IHhvZmYsIGludCB5b2ZmLCBpbnQgY2hhbmdlX2dyYXYpCiAgIE5TU2NyZWVuICpm c2NyZWVuID0gW3NjcmVlbnMgb2JqZWN0QXRJbmRleDogMF07CiAgIE5TU2NyZWVuICpzY3JlZW4g PSBbW3ZpZXcgd2luZG93XSBzY3JlZW5dOwogCi0gIE5TVFJBQ0UgKHhfc2V0X29mZnNldCk7Cisg IE5TVFJBQ0UgKCJ4X3NldF9vZmZzZXQiKTsKIAogICBibG9ja19pbnB1dCAoKTsKIApAQCAtMTMw MSwxMCArMTQ2MCwxMSBAQCB4X3NldF9vZmZzZXQgKHN0cnVjdCBmcmFtZSAqZiwgaW50IHhvZmYs IGludCB5b2ZmLCBpbnQgY2hhbmdlX2dyYXYpCiAjZW5kaWYKICAgICAgIC8qIENvbnN0cmFpbiB0 aGUgc2V0RnJhbWVUb3BMZWZ0UG9pbnQgc28gd2UgZG9uJ3QgbW92ZSBiZWhpbmQgdGhlCiAgICAg ICAgICBtZW51IGJhci4gICovCi0gICAgICBbW3ZpZXcgd2luZG93XSBzZXRGcmFtZVRvcExlZnRQ b2ludDoKLSAgICAgICAgICAgICAgICAgICAgICAgTlNNYWtlUG9pbnQgKFNDUkVFTk1BWEJPVU5E IChmLT5sZWZ0X3BvcyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTQ1JF RU5NQVhCT1VORCAoW2ZzY3JlZW4gZnJhbWVdLnNpemUuaGVpZ2h0Ci0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBOU19UT1BfUE9TIChmKSkpXTsK KyAgICAgIE5TUG9pbnQgcHQgPSBOU01ha2VQb2ludCAoU0NSRUVOTUFYQk9VTkQgKGYtPmxlZnRf cG9zKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0NSRUVOTUFYQk9VTkQgKFtm c2NyZWVuIGZyYW1lXS5zaXplLmhlaWdodAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgLSBOU19UT1BfUE9TIChmKSkpOworICAgICAgTlNUUkFDRV9QT0lO VCAoInNldEZyYW1lVG9wTGVmdFBvaW50IiwgcHQpOworICAgICAgW1t2aWV3IHdpbmRvd10gc2V0 RnJhbWVUb3BMZWZ0UG9pbnQ6IHB0XTsKICAgICAgIGYtPnNpemVfaGludF9mbGFncyAmPSB+KFhO ZWdhdGl2ZXxZTmVnYXRpdmUpOwogICAgIH0KIApAQCAtMTMzMiwxMSArMTQ5MiwxMyBAQCB4X3Nl dF93aW5kb3dfc2l6ZSAoc3RydWN0IGZyYW1lICpmLAogICBpbnQgcm93cywgY29sczsKICAgaW50 IG9yaWdfaGVpZ2h0ID0gd3Iuc2l6ZS5oZWlnaHQ7CiAKLSAgTlNUUkFDRSAoeF9zZXRfd2luZG93 X3NpemUpOworICBOU1RSQUNFICgieF9zZXRfd2luZG93X3NpemUiKTsKIAogICBpZiAodmlldyA9 PSBuaWwpCiAgICAgcmV0dXJuOwogCisgIE5TVFJBQ0VfUkVDVCAoImlucHV0Iiwgd3IpOworCiAv KmZwcmludGYgKHN0ZGVyciwgIlx0c2V0V2luZG93U2l6ZTogJWQgeCAlZCwgcGl4ZWx3aXNlICVk LCBmb250IHNpemUgJWQgeCAlZFxuIiwgd2lkdGgsIGhlaWdodCwgcGl4ZWx3aXNlLCBGUkFNRV9D T0xVTU5fV0lEVEggKGYpLCBGUkFNRV9MSU5FX0hFSUdIVCAoZikpOyovCiAKICAgYmxvY2tfaW5w dXQgKCk7CkBAIC0xMzk4LDYgKzE1NjAsNyBAQCB4X3NldF93aW5kb3dfc2l6ZSAoc3RydWN0IGZy YW1lICpmLAogCSAgIG1ha2VfbnVtYmVyIChGUkFNRV9UT09MQkFSX0hFSUdIVCAoZikpKSk7CiAK ICAgW3ZpZXcgc2V0Um93czogcm93cyBhbmRDb2x1bW5zOiBjb2xzXTsKKyAgTlNUUkFDRV9SRUNU ICgic2V0RnJhbWUiLCB3cik7CiAgIFt3aW5kb3cgc2V0RnJhbWU6IHdyIGRpc3BsYXk6IFlFU107 CiAKICAgLyogVGhpcyBpcyBhIHRyaWNrIHRvIGNvbXBlbnNhdGUgZm9yIEVtYWNzJyBtYW5hZ2lu ZyB0aGUgc2Nyb2xsYmFyIGFyZWEKQEAgLTE0MTIsNiArMTU3NSw3IEBAIHhfc2V0X3dpbmRvd19z aXplIChzdHJ1Y3QgZnJhbWUgKmYsCiAgICAgICA/IE5TTWFrZVBvaW50IChGUkFNRV9TQ1JPTExf QkFSX0NPTFMgKGYpICogRlJBTUVfQ09MVU1OX1dJRFRIIChmKQogICAgICAgICAgICAgICAgICAg ICAgLSBOU19TQ1JPTExfQkFSX1dJRFRIIChmKSwgMCkKICAgICAgIDogTlNNYWtlUG9pbnQgKDAs IDApOworICAgIE5TVFJBQ0VfUkVDVCAoInNldEZyYW1lIiwgd3IpOwogICAgIFt2aWV3IHNldEZy YW1lOiBOU01ha2VSZWN0ICgwLCAwLCBwaXhlbHdpZHRoLCBwaXhlbGhlaWdodCldOwogICAgIFt2 aWV3IHNldEJvdW5kc09yaWdpbjogb3JpZ2luXTsKICAgfQpAQCAtMTQyNiw2ICsxNTkwLDggQEAg bnNfZnVsbHNjcmVlbl9ob29rIChzdHJ1Y3QgZnJhbWUgKmYpCiB7CiAgIEVtYWNzVmlldyAqdmll dyA9IChFbWFjc1ZpZXcgKilGUkFNRV9OU19WSUVXIChmKTsKIAorICBOU1RSQUNFICgibnNfZnVs bHNjcmVlbl9ob29rIik7CisKICAgaWYgKCFGUkFNRV9WSVNJQkxFX1AgKGYpKQogICAgIHJldHVy bjsKIApAQCAtMTY3Miw3ICsxODM4LDcgQEAgbnNfbGlzcF90b19jb2xvciAoTGlzcF9PYmplY3Qg Y29sb3IsIE5TQ29sb3IgKipjb2wpCiAgICAgIENvbnZlcnQgYSBMaXNwIHN0cmluZyBvYmplY3Qg dG8gYSBOUyBjb2xvcgogICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIHsKLSAgTlNUUkFDRSAobnNf bGlzcF90b19jb2xvcik7CisgIE5TVFJBQ0UgKCJuc19saXNwX3RvX2NvbG9yIik7CiAgIGlmIChT VFJJTkdQIChjb2xvcikpCiAgICAgcmV0dXJuIG5zX2dldF9jb2xvciAoU1NEQVRBIChjb2xvciks IGNvbCk7CiAgIGVsc2UgaWYgKFNZTUJPTFAgKGNvbG9yKSkKQEAgLTE2OTAsNyArMTg1Niw3IEBA IG5zX2NvbG9yX3RvX2xpc3AgKE5TQ29sb3IgKmNvbCkKICAgRW1hY3NDR0Zsb2F0IHJlZCwgZ3Jl ZW4sIGJsdWUsIGFscGhhLCBncmF5OwogICBjaGFyIGJ1ZlsxMDI0XTsKICAgY29uc3QgY2hhciAq c3RyOwotICBOU1RSQUNFIChuc19jb2xvcl90b19saXNwKTsKKyAgTlNUUkFDRSAoIm5zX2NvbG9y X3RvX2xpc3AiKTsKIAogICBibG9ja19pbnB1dCAoKTsKICAgaWYgKFtbY29sIGNvbG9yU3BhY2VO YW1lXSBpc0VxdWFsVG9TdHJpbmc6IE5TTmFtZWRDb2xvclNwYWNlXSkKQEAgLTE3NTgsNyArMTky NCw3IEBAIG5zX2RlZmluZWRfY29sb3IgKHN0cnVjdCBmcmFtZSAqZiwKICAgIC0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tICovCiB7CiAgIE5TQ29sb3IgKmNvbDsKLSAgTlNUUkFDRSAobnNfZGVmaW5lZF9jb2xv cik7CisgIE5TVFJBQ0UgKCJuc19kZWZpbmVkX2NvbG9yIik7CiAKICAgYmxvY2tfaW5wdXQgKCk7 CiAgIGlmIChuc19nZXRfY29sb3IgKG5hbWUsICZjb2wpICE9IDApIC8qIENvbG9yIG5vdCBmb3Vu ZCAgKi8KQEAgLTE4MjMsNyArMTk4OSw3IEBAIGZyYW1lX3NldF9tb3VzZV9waXhlbF9wb3NpdGlv biAoc3RydWN0IGZyYW1lICpmLCBpbnQgcGl4X3gsIGludCBwaXhfeSkKICAgICAgUHJvZ3JhbW1h dGljYWxseSByZXBvc2l0aW9uIG1vdXNlIHBvaW50ZXIgaW4gcGl4ZWwgY29vcmRpbmF0ZXMKICAg IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tICovCiB7Ci0gIE5TVFJBQ0UgKGZyYW1lX3NldF9tb3VzZV9waXhl bF9wb3NpdGlvbik7CisgIE5TVFJBQ0UgKCJmcmFtZV9zZXRfbW91c2VfcGl4ZWxfcG9zaXRpb24i KTsKICAgbnNfcmFpc2VfZnJhbWUgKGYpOwogI2lmIDAKICAgLyogRklYTUU6IHRoaXMgZG9lcyBu b3Qgd29yaywgYW5kIHdoYXQgYWJvdXQgR05Vc3RlcD8gKi8KQEAgLTE4NDYsNyArMjAxMiw3IEBA IG5vdGVfbW91c2VfbW92ZW1lbnQgKHN0cnVjdCBmcmFtZSAqZnJhbWUsIENHRmxvYXQgeCwgQ0dG bG9hdCB5KQogICBzdHJ1Y3QgbnNfZGlzcGxheV9pbmZvICpkcHlpbmZvID0gRlJBTUVfRElTUExB WV9JTkZPIChmcmFtZSk7CiAgIE5TUmVjdCAqcjsKIAotLy8gIE5TVFJBQ0UgKG5vdGVfbW91c2Vf bW92ZW1lbnQpOworLy8gIE5TVFJBQ0UgKCJub3RlX21vdXNlX21vdmVtZW50Iik7CiAKICAgZHB5 aW5mby0+bGFzdF9tb3VzZV9tb3Rpb25fZnJhbWUgPSBmcmFtZTsKICAgciA9ICZkcHlpbmZvLT5s YXN0X21vdXNlX2dseXBoOwpAQCAtMTg4Nyw3ICsyMDUzLDcgQEAgbnNfbW91c2VfcG9zaXRpb24g KHN0cnVjdCBmcmFtZSAqKmZwLCBpbnQgaW5zaXN0LCBMaXNwX09iamVjdCAqYmFyX3dpbmRvdywK ICAgc3RydWN0IGZyYW1lICpmOwogICBzdHJ1Y3QgbnNfZGlzcGxheV9pbmZvICpkcHlpbmZvOwog Ci0gIE5TVFJBQ0UgKG5zX21vdXNlX3Bvc2l0aW9uKTsKKyAgTlNUUkFDRSAoIm5zX21vdXNlX3Bv c2l0aW9uIik7CiAKICAgaWYgKCpmcCA9PSBOVUxMKQogICAgIHsKQEAgLTE5NDMsNyArMjEwOSw3 IEBAIG5zX2ZyYW1lX3VwX3RvX2RhdGUgKHN0cnVjdCBmcmFtZSAqZikKICAgICBDYW4ndCB1c2Ug RlJBTUVfTU9VU0VfVVBEQVRFIGR1ZSB0byBuc19mcmFtZV9iZWdpbiBhbmQgbnNfZnJhbWVfZW5k IGNhbGxzLgogICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIHsKLSAgTlNUUkFDRSAobnNfZnJhbWVf dXBfdG9fZGF0ZSk7CisgIE5TVFJBQ0UgKCJuc19mcmFtZV91cF90b19kYXRlIik7CiAKICAgaWYg KEZSQU1FX05TX1AgKGYpKQogICAgIHsKQEAgLTE5NjgsNyArMjEzNCw3IEBAIG5zX2RlZmluZV9m cmFtZV9jdXJzb3IgKHN0cnVjdCBmcmFtZSAqZiwgQ3Vyc29yIGN1cnNvcikKICAgICBFeHRlcm5h bCAoUklGKTogc2V0IGZyYW1lIG1vdXNlIHBvaW50ZXIgdHlwZS4KICAgIC0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tICovCiB7Ci0gIE5TVFJBQ0UgKG5zX2RlZmluZV9mcmFtZV9jdXJzb3IpOworICBOU1RSQUNF ICgibnNfZGVmaW5lX2ZyYW1lX2N1cnNvciIpOwogICBpZiAoRlJBTUVfUE9JTlRFUl9UWVBFIChm KSAhPSBjdXJzb3IpCiAgICAgewogICAgICAgRW1hY3NWaWV3ICp2aWV3ID0gRlJBTUVfTlNfVklF VyAoZik7CkBAIC0yMDE1LDcgKzIxODEsNyBAQCB4X2dldF9rZXlzeW1fbmFtZSAoaW50IGtleXN5 bSkKICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiB7CiAgIHN0YXRpYyBjaGFyIHZhbHVlWzE2XTsK LSAgTlNUUkFDRSAoeF9nZXRfa2V5c3ltX25hbWUpOworICBOU1RSQUNFICgieF9nZXRfa2V5c3lt X25hbWUiKTsKICAgc3ByaW50ZiAodmFsdWUsICIlZCIsIGtleXN5bSk7CiAgIHJldHVybiB2YWx1 ZTsKIH0KQEAgLTIwMzUsNyArMjIwMSw3IEBAIG5zX3JlZHJhd19zY3JvbGxfYmFycyAoc3RydWN0 IGZyYW1lICpmKQogICBpbnQgaTsKICAgaWQgdmlldzsKICAgTlNBcnJheSAqc3Vidmlld3MgPSBb W0ZSQU1FX05TX1ZJRVcgKGYpIHN1cGVydmlld10gc3Vidmlld3NdOwotICBOU1RSQUNFIChuc19y ZWRyYXdfc2Nyb2xsX2JhcnMpOworICBOU1RSQUNFICgibnNfcmVkcmF3X3Njcm9sbF9iYXJzIik7 CiAgIGZvciAoaSA9W3N1YnZpZXdzIGNvdW50XS0xOyBpID49IDA7IGktLSkKICAgICB7CiAgICAg ICB2aWV3ID0gW3N1YnZpZXdzIG9iamVjdEF0SW5kZXg6IGldOwpAQCAtMjA1NCw3ICsyMjIwLDcg QEAgbnNfY2xlYXJfZnJhbWUgKHN0cnVjdCBmcmFtZSAqZikKICAgTlNWaWV3ICp2aWV3ID0gRlJB TUVfTlNfVklFVyAoZik7CiAgIE5TUmVjdCByOwogCi0gIE5TVFJBQ0UgKG5zX2NsZWFyX2ZyYW1l KTsKKyAgTlNUUkFDRSAoIm5zX2NsZWFyX2ZyYW1lIik7CiAKICAvKiBjb21lcyBvbiBpbml0aWFs IGZyYW1lIGJlY2F1c2Ugd2UgaGF2ZQogICAgIGFmdGVyLW1ha2UtZnJhbWUtZnVuY3Rpb25zID0g c2VsZWN0LWZyYW1lICovCkBAIC0yMDkwLDcgKzIyNTYsNyBAQCBuc19jbGVhcl9mcmFtZV9hcmVh IChzdHJ1Y3QgZnJhbWUgKmYsIGludCB4LCBpbnQgeSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQog ICBpZiAoIXZpZXcgfHwgIWZhY2UpCiAgICAgcmV0dXJuOwogCi0gIE5TVFJBQ0UgKG5zX2NsZWFy X2ZyYW1lX2FyZWEpOworICBOU1RSQUNFICgibnNfY2xlYXJfZnJhbWVfYXJlYSIpOwogCiAgIHIg PSBOU0ludGVyc2VjdGlvblJlY3QgKHIsIFt2aWV3IGZyYW1lXSk7CiAgIG5zX2ZvY3VzIChmLCAm ciwgMSk7CkBAIC0yMTI0LDcgKzIyOTAsNyBAQCBuc19zY3JvbGxfcnVuIChzdHJ1Y3Qgd2luZG93 ICp3LCBzdHJ1Y3QgcnVuICpydW4pCiAgIHN0cnVjdCBmcmFtZSAqZiA9IFhGUkFNRSAody0+ZnJh bWUpOwogICBpbnQgeCwgeSwgd2lkdGgsIGhlaWdodCwgZnJvbV95LCB0b195LCBib3R0b21feTsK IAotICBOU1RSQUNFIChuc19zY3JvbGxfcnVuKTsKKyAgTlNUUkFDRSAoIm5zX3Njcm9sbF9ydW4i KTsKIAogICAvKiBiZWdpbiBjb3B5IGZyb20gb3RoZXIgdGVybXMgKi8KICAgLyogR2V0IGZyYW1l LXJlbGF0aXZlIGJvdW5kaW5nIGJveCBvZiB0aGUgdGV4dCBkaXNwbGF5IGFyZWEgb2YgVywKQEAg LTIxODMsNyArMjM0OSw3IEBAIG5zX2FmdGVyX3VwZGF0ZV93aW5kb3dfbGluZSAoc3RydWN0IHdp bmRvdyAqdywgc3RydWN0IGdseXBoX3JvdyAqZGVzaXJlZF9yb3cpCiAgIHN0cnVjdCBmcmFtZSAq ZjsKICAgaW50IHdpZHRoLCBoZWlnaHQ7CiAKLSAgTlNUUkFDRSAobnNfYWZ0ZXJfdXBkYXRlX3dp bmRvd19saW5lKTsKKyAgTlNUUkFDRSAoIm5zX2FmdGVyX3VwZGF0ZV93aW5kb3dfbGluZSIpOwog CiAgIC8qIGJlZ2luIGNvcHkgZnJvbSBvdGhlciB0ZXJtcyAqLwogICBlYXNzZXJ0ICh3KTsKQEAg LTIyMjQsNyArMjM5MCw3IEBAIG5zX3NoaWZ0X2dseXBoc19mb3JfaW5zZXJ0IChzdHJ1Y3QgZnJh bWUgKmYsCiAgIE5TUmVjdCBzcmNSZWN0ID0gTlNNYWtlUmVjdCAoeCwgeSwgd2lkdGgsIGhlaWdo dCk7CiAgIE5TUmVjdCBkc3RSZWN0ID0gTlNNYWtlUmVjdCAoeCtzaGlmdF9ieSwgeSwgd2lkdGgs IGhlaWdodCk7CiAKLSAgTlNUUkFDRSAobnNfc2hpZnRfZ2x5cGhzX2Zvcl9pbnNlcnQpOworICBO U1RSQUNFICgibnNfc2hpZnRfZ2x5cGhzX2Zvcl9pbnNlcnQiKTsKIAogICBuc19jb3B5X2JpdHMg KGYsIHNyY1JlY3QsIGRzdFJlY3QpOwogfQpAQCAtMjM5NCw3ICsyNTYwLDcgQEAgbnNfZHJhd193 aW5kb3dfY3Vyc29yIChzdHJ1Y3Qgd2luZG93ICp3LCBzdHJ1Y3QgZ2x5cGhfcm93ICpnbHlwaF9y b3csCiAgICAgIGluIG1pbmktYnVmZmVyIHdpbmRvd3Mgd2hlbiBzd2l0Y2hpbmcgYmV0d2VlbiBl Y2hvIGFyZWEgZ2x5cGhzCiAgICAgIGFuZCBtaW5pLWJ1ZmZlci4gICovCiAKLSAgTlNUUkFDRSAo ZHVtcGN1cnNvcik7CisgIE5TVFJBQ0UgKCJkdW1wY3Vyc29yIik7CiAKICAgaWYgKCFvbl9wKQog ICAgIHJldHVybjsKQEAgLTI1MjMsNyArMjY4OSw3IEBAIG5zX2RyYXdfdmVydGljYWxfd2luZG93 X2JvcmRlciAoc3RydWN0IHdpbmRvdyAqdywgaW50IHgsIGludCB5MCwgaW50IHkxKQogICBzdHJ1 Y3QgZmFjZSAqZmFjZTsKICAgTlNSZWN0IHIgPSBOU01ha2VSZWN0ICh4LCB5MCwgMSwgeTEteTAp OwogCi0gIE5TVFJBQ0UgKG5zX2RyYXdfdmVydGljYWxfd2luZG93X2JvcmRlcik7CisgIE5TVFJB Q0UgKCJuc19kcmF3X3ZlcnRpY2FsX3dpbmRvd19ib3JkZXIiKTsKIAogICBmYWNlID0gRkFDRV9G Uk9NX0lEIChmLCBWRVJUSUNBTF9CT1JERVJfRkFDRV9JRCk7CiAgIGlmIChmYWNlKQpAQCAtMjU0 NSw3ICsyNzExLDcgQEAgbnNfZHJhd193aW5kb3dfZGl2aWRlciAoc3RydWN0IHdpbmRvdyAqdywg aW50IHgwLCBpbnQgeDEsIGludCB5MCwgaW50IHkxKQogICBzdHJ1Y3QgZmFjZSAqZmFjZTsKICAg TlNSZWN0IHIgPSBOU01ha2VSZWN0ICh4MCwgeTAsIHgxLXgwLCB5MS15MCk7CiAKLSAgTlNUUkFD RSAobnNfZHJhd193aW5kb3dfZGl2aWRlcik7CisgIE5TVFJBQ0UgKCJuc19kcmF3X3dpbmRvd19k aXZpZGVyIik7CiAKICAgZmFjZSA9IEZBQ0VfRlJPTV9JRCAoZiwgV0lORE9XX0RJVklERVJfRkFD RV9JRCk7CiAgIGlmIChmYWNlKQpAQCAtMjgwMiw3ICsyOTY4LDcgQEAgbnNfZHJhd19yZWxpZWYg KE5TUmVjdCByLCBpbnQgdGhpY2tuZXNzLCBjaGFyIHJhaXNlZF9wLAogICBOU0NvbG9yICpuZXdC YXNlQ29sID0gbmlsOwogICBOU1JlY3Qgc3IgPSByOwogCi0gIE5TVFJBQ0UgKG5zX2RyYXdfcmVs aWVmKTsKKyAgTlNUUkFDRSAoIm5zX2RyYXdfcmVsaWVmIik7CiAKICAgLyogc2V0IHVwIGNvbG9y cyAqLwogCkBAIC0yODg5LDcgKzMwNTUsNyBAQCBuc19kdW1wZ2x5cGhzX2JveF9vcl9yZWxpZWYg KHN0cnVjdCBnbHlwaF9zdHJpbmcgKnMpCiAKICAgdGhpY2tuZXNzID0gZmFjZS0+Ym94X2xpbmVf d2lkdGg7CiAKLSAgTlNUUkFDRSAobnNfZHVtcGdseXBoc19ib3hfb3JfcmVsaWVmKTsKKyAgTlNU UkFDRSAoIm5zX2R1bXBnbHlwaHNfYm94X29yX3JlbGllZiIpOwogCiAgIGxhc3RfeCA9ICgocy0+ cm93LT5mdWxsX3dpZHRoX3AgJiYgIXMtPnctPnBzZXVkb193aW5kb3dfcCkKIAkgICAgPyBXSU5E T1dfUklHSFRfRURHRV9YIChzLT53KQpAQCAtMjkzMSw3ICszMDk3LDcgQEAgbnNfbWF5YmVfZHVt cGdseXBoc19iYWNrZ3JvdW5kIChzdHJ1Y3QgZ2x5cGhfc3RyaW5nICpzLCBjaGFyIGZvcmNlX3Ap CiAgICAgICBjZXJ0YWluIGNhc2VzLiAgT3RoZXJzIGFyZSBsZWZ0IHRvIHRoZSB0ZXh0IHJlbmRl cmluZyByb3V0aW5lLgogICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIHsKLSAgTlNUUkFDRSAobnNf bWF5YmVfZHVtcGdseXBoc19iYWNrZ3JvdW5kKTsKKyAgTlNUUkFDRSAoIm5zX21heWJlX2R1bXBn bHlwaHNfYmFja2dyb3VuZCIpOwogCiAgIGlmICghcy0+YmFja2dyb3VuZF9maWxsZWRfcC8qIHx8 IHMtPmhsID09IERSQVdfTU9VU0VfRkFDRSovKQogICAgIHsKQEAgLTI5OTQsNyArMzE2MCw3IEBA IG5zX2R1bXBnbHlwaHNfaW1hZ2UgKHN0cnVjdCBnbHlwaF9zdHJpbmcgKnMsIE5TUmVjdCByKQog ICBzdHJ1Y3QgZmFjZSAqZmFjZTsKICAgTlNDb2xvciAqdGRDb2w7CiAKLSAgTlNUUkFDRSAobnNf ZHVtcGdseXBoc19pbWFnZSk7CisgIE5TVFJBQ0UgKCJuc19kdW1wZ2x5cGhzX2ltYWdlIik7CiAK ICAgaWYgKHMtPmZhY2UtPmJveCAhPSBGQUNFX05PX0JPWAogICAgICAgJiYgcy0+Zmlyc3RfZ2x5 cGgtPmxlZnRfYm94X2xpbmVfcCAmJiBzLT5zbGljZS54ID09IDApCkBAIC0zMzExLDcgKzM0Nzcs NyBAQCBuc19kcmF3X2dseXBoX3N0cmluZyAoc3RydWN0IGdseXBoX3N0cmluZyAqcykKICAgc3Ry dWN0IGZvbnQgKmZvbnQgPSBzLT5mYWNlLT5mb250OwogICBpZiAoISBmb250KSBmb250ID0gRlJB TUVfRk9OVCAocy0+Zik7CiAKLSAgTlNUUkFDRSAobnNfZHJhd19nbHlwaF9zdHJpbmcpOworICBO U1RSQUNFICgibnNfZHJhd19nbHlwaF9zdHJpbmciKTsKIAogICBpZiAocy0+bmV4dCAmJiBzLT5y aWdodF9vdmVyaGFuZyAmJiAhcy0+Zm9yX292ZXJsYXBzLyomJnMtPmhsIT1EUkFXX0NVUlNPUiov KQogICAgIHsKQEAgLTM0NjksNyArMzYzNSw3IEBAIG5zX3NlbmRfYXBwZGVmaW5lZCAoaW50IHZh bHVlKQogICAgICAgICAgICAgICByZWNvZ25pemUgYW5kIHRha2UgYXMgYSBjb21tYW5kIHRvIGhh bHQgdGhlIGV2ZW50IGxvb3AuCiAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogewotICAvKk5TVFJB Q0UgKG5zX3NlbmRfYXBwZGVmaW5lZCk7ICovCisgIC8qTlNUUkFDRSAoIm5zX3NlbmRfYXBwZGVm aW5lZCIpOyAqLwogCiAjaWZkZWYgTlNfSU1QTF9HTlVTVEVQCiAgIC8vIEdOVXN0ZXAgbmVlZHMg cG9zdEV2ZW50IHRvIGhhcHBlbiBvbiB0aGUgbWFpbiB0aHJlYWQuCkBAIC0zNjQzLDcgKzM4MDks NyBAQCBuc19yZWFkX3NvY2tldCAoc3RydWN0IHRlcm1pbmFsICp0ZXJtaW5hbCwgc3RydWN0IGlu cHV0X2V2ZW50ICpob2xkX3F1aXQpCiAgIHN0cnVjdCBpbnB1dF9ldmVudCBldjsKICAgaW50IG5l dmVudHM7CiAKLS8qIE5TVFJBQ0UgKG5zX3JlYWRfc29ja2V0KTsgKi8KKy8qIE5TVFJBQ0UgKCJu c19yZWFkX3NvY2tldCIpOyAqLwogCiAjaWZkZWYgSEFWRV9OQVRJVkVfRlMKICAgY2hlY2tfbmF0 aXZlX2ZzICgpOwpAQCAtMzcyNyw3ICszODkzLDcgQEAgbnNfc2VsZWN0IChpbnQgbmZkcywgZmRf c2V0ICpyZWFkZmRzLCBmZF9zZXQgKndyaXRlZmRzLAogICBzdHJ1Y3QgaW5wdXRfZXZlbnQgZXZl bnQ7CiAgIGNoYXIgYzsKIAotLyogIE5TVFJBQ0UgKG5zX3NlbGVjdCk7ICovCisvKiAgTlNUUkFD RSAoIm5zX3NlbGVjdCIpOyAqLwogCiAjaWZkZWYgSEFWRV9OQVRJVkVfRlMKICAgY2hlY2tfbmF0 aXZlX2ZzICgpOwpAQCAtMzkwMyw3ICs0MDY5LDcgQEAgbnNfc2V0X3ZlcnRpY2FsX3Njcm9sbF9i YXIgKHN0cnVjdCB3aW5kb3cgKndpbmRvdywKICAgICAgICAgfQogICAgIH0KIAotICBOU1RSQUNF IChuc19zZXRfdmVydGljYWxfc2Nyb2xsX2Jhcik7CisgIE5TVFJBQ0UgKCJuc19zZXRfdmVydGlj YWxfc2Nyb2xsX2JhciIpOwogCiAgIC8qIEdldCBkaW1lbnNpb25zLiAgKi8KICAgd2luZG93X2Jv eCAod2luZG93LCBBTllfQVJFQSwgMCwgJndpbmRvd195LCAwLCAmd2luZG93X2hlaWdodCk7CkBA IC0zOTk3LDcgKzQxNjMsNyBAQCBuc19zZXRfaG9yaXpvbnRhbF9zY3JvbGxfYmFyIChzdHJ1Y3Qg d2luZG93ICp3aW5kb3csCiAgICAgICAgIH0KICAgICB9CiAKLSAgTlNUUkFDRSAobnNfc2V0X2hv cml6b250YWxfc2Nyb2xsX2Jhcik7CisgIE5TVFJBQ0UgKCJuc19zZXRfaG9yaXpvbnRhbF9zY3Jv bGxfYmFyIik7CiAKICAgLyogR2V0IGRpbWVuc2lvbnMuICAqLwogICB3aW5kb3dfYm94ICh3aW5k b3csIEFOWV9BUkVBLCAwLCAmd2luZG93X3gsICZ3aW5kb3dfd2lkdGgsIDApOwpAQCAtNDA2OSw3 ICs0MjM1LDcgQEAgbnNfY29uZGVtbl9zY3JvbGxfYmFycyAoc3RydWN0IGZyYW1lICpmKQogICBp ZCB2aWV3OwogICBOU0FycmF5ICpzdWJ2aWV3cyA9IFtbRlJBTUVfTlNfVklFVyAoZikgc3VwZXJ2 aWV3XSBzdWJ2aWV3c107CiAKLSAgTlNUUkFDRSAobnNfY29uZGVtbl9zY3JvbGxfYmFycyk7Cisg IE5TVFJBQ0UgKCJuc19jb25kZW1uX3Njcm9sbF9iYXJzIik7CiAKICAgZm9yIChpID1bc3Vidmll d3MgY291bnRdLTE7IGkgPj0gMDsgaS0tKQogICAgIHsKQEAgLTQwODgsNyArNDI1NCw3IEBAIG5z X3JlZGVlbV9zY3JvbGxfYmFyIChzdHJ1Y3Qgd2luZG93ICp3aW5kb3cpCiAgICAtLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLSAqLwogewogICBpZCBiYXI7Ci0gIE5TVFJBQ0UgKG5zX3JlZGVlbV9zY3JvbGxfYmFy KTsKKyAgTlNUUkFDRSAoIm5zX3JlZGVlbV9zY3JvbGxfYmFyIik7CiAgIGlmICghTklMUCAod2lu ZG93LT52ZXJ0aWNhbF9zY3JvbGxfYmFyKSkKICAgICB7CiAgICAgICBiYXIgPSBYTlNfU0NST0xM X0JBUiAod2luZG93LT52ZXJ0aWNhbF9zY3JvbGxfYmFyKTsKQEAgLTQxMTYsNyArNDI4Miw3IEBA IG5zX2p1ZGdlX3Njcm9sbF9iYXJzIChzdHJ1Y3QgZnJhbWUgKmYpCiAgIE5TQXJyYXkgKnN1YnZp ZXdzID0gW1tldmlldyBzdXBlcnZpZXddIHN1YnZpZXdzXTsKICAgQk9PTCByZW1vdmVkID0gTk87 CiAKLSAgTlNUUkFDRSAobnNfanVkZ2Vfc2Nyb2xsX2JhcnMpOworICBOU1RSQUNFICgibnNfanVk Z2Vfc2Nyb2xsX2JhcnMiKTsKICAgZm9yIChpID0gW3N1YnZpZXdzIGNvdW50XS0xOyBpID49IDA7 IC0taSkKICAgICB7CiAgICAgICB2aWV3ID0gW3N1YnZpZXdzIG9iamVjdEF0SW5kZXg6IGldOwpA QCAtNDI5NCw2ICs0NDYwLDggQEAgbnNfZGVsZXRlX3Rlcm1pbmFsIChzdHJ1Y3QgdGVybWluYWwg KnRlcm1pbmFsKQogewogICBzdHJ1Y3QgbnNfZGlzcGxheV9pbmZvICpkcHlpbmZvID0gdGVybWlu YWwtPmRpc3BsYXlfaW5mby5uczsKIAorICBOU1RSQUNFICgibnNfZGVsZXRlX3Rlcm1pbmFsIik7 CisKICAgLyogUHJvdGVjdCBhZ2FpbnN0IHJlY3Vyc2l2ZSBjYWxscy4gIGRlbGV0ZV9mcmFtZSBp bgogICAgICBkZWxldGVfdGVybWluYWwgY2FsbHMgdXMgYmFjayB3aGVuIGl0IGRlbGV0ZXMgb3Vy IGxhc3QgZnJhbWUuICAqLwogICBpZiAoIXRlcm1pbmFsLT5uYW1lKQpAQCAtNDMxNSw3ICs0NDgz LDcgQEAgbnNfY3JlYXRlX3Rlcm1pbmFsIChzdHJ1Y3QgbnNfZGlzcGxheV9pbmZvICpkcHlpbmZv KQogewogICBzdHJ1Y3QgdGVybWluYWwgKnRlcm1pbmFsOwogCi0gIE5TVFJBQ0UgKG5zX2NyZWF0 ZV90ZXJtaW5hbCk7CisgIE5TVFJBQ0UgKCJuc19jcmVhdGVfdGVybWluYWwiKTsKIAogICB0ZXJt aW5hbCA9IGNyZWF0ZV90ZXJtaW5hbCAob3V0cHV0X25zLCAmbnNfcmVkaXNwbGF5X2ludGVyZmFj ZSk7CiAKQEAgLTQzNjEsNyArNDUyOSw3IEBAIG5zX3Rlcm1faW5pdCAoTGlzcF9PYmplY3QgZGlz cGxheV9uYW1lKQogICBpZiAobnNfaW5pdGlhbGl6ZWQpIHJldHVybiB4X2Rpc3BsYXlfbGlzdDsK ICAgbnNfaW5pdGlhbGl6ZWQgPSAxOwogCi0gIE5TVFJBQ0UgKG5zX3Rlcm1faW5pdCk7CisgIE5T VFJBQ0UgKCJuc190ZXJtX2luaXQiKTsKIAogICBbb3V0ZXJwb29sIHJlbGVhc2VdOwogICBvdXRl cnBvb2wgPSBbW05TQXV0b3JlbGVhc2VQb29sIGFsbG9jXSBpbml0XTsKQEAgLTQ0NDMsNiArNDYx MSw4IEBAIG5zX3Rlcm1faW5pdCAoTGlzcF9PYmplY3QgZGlzcGxheV9uYW1lKQogICAgICAgbnNf YW50aWFsaWFzX3RocmVzaG9sZCA9IE5JTFAgKHRtcCkgPyAxMC4wIDogWEZMT0FUSU5UICh0bXAp OwogICAgIH0KIAorICBOU1RSQUNFX01TRyAoIkNvbG9ycyIpOworCiAgIHsKICAgICBOU0NvbG9y TGlzdCAqY2wgPSBbTlNDb2xvckxpc3QgY29sb3JMaXN0TmFtZWQ6IEAiRW1hY3MiXTsKIApAQCAt NDQ3Niw2ICs0NjQ2LDggQEAgbnNfdGVybV9pbml0IChMaXNwX09iamVjdCBkaXNwbGF5X25hbWUp CiAgICAgICB9CiAgIH0KIAorICBOU1RSQUNFX01TRyAoIlZlcnNpb25zIik7CisKICAgewogI2lm ZGVmIE5TX0lNUExfR05VU1RFUAogICAgIFZ3aW5kb3dfc3lzdGVtX3ZlcnNpb24gPSBidWlsZF9z dHJpbmcgKGdudXN0ZXBfYmFzZV92ZXJzaW9uKTsKQEAgLTQ0OTEsNyArNDY2MywxMCBAQCBuc190 ZXJtX2luaXQgKExpc3BfT2JqZWN0IGRpc3BsYXlfbmFtZSkKIAogICBuc19hcHBfbmFtZSA9IFtb TlNQcm9jZXNzSW5mbyBwcm9jZXNzSW5mb10gcHJvY2Vzc05hbWVdOwogCi0vKiBTZXQgdXAgT1Mg WCBhcHAgbWVudSAqLworICAvKiBTZXQgdXAgT1MgWCBhcHAgbWVudSAqLworCisgIE5TVFJBQ0Vf TVNHICgiTWVudSBpbml0Iik7CisKICNpZmRlZiBOU19JTVBMX0NPQ09BCiAgIHsKICAgICBOU01l bnUgKmFwcE1lbnU7CkBAIC00NTY0LDYgKzQ3MzksOSBAQCBuc190ZXJtX2luaXQgKExpc3BfT2Jq ZWN0IGRpc3BsYXlfbmFtZSkKIAogICAvKiBSZWdpc3RlciBvdXIgZXh0ZXJuYWwgaW5wdXQvb3V0 cHV0IHR5cGVzLCB1c2VkIGZvciBkZXRlcm1pbmluZwogICAgICBhcHBsaWNhYmxlIHNlcnZpY2Vz IGFuZCBhbHNvIGRyYWcvZHJvcCBlbGlnaWJpbGl0eS4gKi8KKworICBOU1RSQUNFX01TRyAoIklu cHV0L291dHB1dCB0eXBlcyIpOworCiAgIG5zX3NlbmRfdHlwZXMgPSBbW05TQXJyYXkgYXJyYXlX aXRoT2JqZWN0czogTlNTdHJpbmdQYm9hcmRUeXBlLCBuaWxdIHJldGFpbl07CiAgIG5zX3JldHVy bl90eXBlcyA9IFtbTlNBcnJheSBhcnJheVdpdGhPYmplY3RzOiBOU1N0cmluZ1Bib2FyZFR5cGUs IG5pbF0KICAgICAgICAgICAgICAgICAgICAgICByZXRhaW5dOwpAQCAtNDU3Nyw2ICs0NzU1LDgg QEAgbnNfdGVybV9pbml0IChMaXNwX09iamVjdCBkaXNwbGF5X25hbWUpCiAgICAgIHJpZ2h0IGZv ciBmdWxsc2NyZWVuIHdpbmRvd3MsIHNvIHNldCB0aGlzLiAgKi8KICAgW05TQXBwIGFjdGl2YXRl SWdub3JpbmdPdGhlckFwcHM6WUVTXTsKIAorICBOU1RSQUNFX01TRyAoIkNhbGwgTlNBcHAgcnVu Iik7CisKICAgW05TQXBwIHJ1bl07CiAgIG5zX2RvX29wZW5fZmlsZSA9IFlFUzsKIApAQCAtNDU4 NSw2ICs0NzY1LDkgQEAgbnNfdGVybV9pbml0IChMaXNwX09iamVjdCBkaXNwbGF5X25hbWUpCiAg ICAgIFdlIG11c3QgcmUtY2F0Y2ggaXQgc28gc3VicHJvY2VzcyB3b3Jrcy4gICovCiAgIGNhdGNo X2NoaWxkX3NpZ25hbCAoKTsKICNlbmRpZgorCisgIE5TVFJBQ0VfTVNHICgibnNfdGVybV9pbml0 IGRvbmUiKTsKKwogICByZXR1cm4gZHB5aW5mbzsKIH0KIApAQCAtNDY5Nyw3ICs0ODgwLDcgQEAg bnNfdGVybV9zaHV0ZG93biAoaW50IHNpZykKICAgaW50IHR5cGUgPSBbdGhlRXZlbnQgdHlwZV07 CiAgIE5TV2luZG93ICp3aW5kb3cgPSBbdGhlRXZlbnQgd2luZG93XTsKIAotLyogIE5TVFJBQ0Ug KHNlbmRFdmVudCk7ICovCisvKiAgTlNUUkFDRSAoInNlbmRFdmVudCIpOyAqLwogLypmcHJpbnRm IChzdGRlcnIsICJyZWNlaXZlZCBldmVudCBvZiB0eXBlICVkXHQlZFxuIiwgdHlwZSk7Ki8KIAog I2lmZGVmIE5TX0lNUExfR05VU1RFUApAQCAtNDg0Nyw3ICs1MDMwLDcgQEAgbnNfdGVybV9zaHV0 ZG93biAoaW50IHNpZykKICAgICAgV2hlbiBhcHBsaWNhdGlvbiBpcyBsb2FkZWQsIHRlcm1pbmF0 ZSBldmVudCBsb29wIGluIG5zX3Rlcm1faW5pdAogICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIHsK LSAgTlNUUkFDRSAoYXBwbGljYXRpb25EaWRGaW5pc2hMYXVuY2hpbmcpOworICBOU1RSQUNFICgi YXBwbGljYXRpb25EaWRGaW5pc2hMYXVuY2hpbmciKTsKICNpZmRlZiBOU19JTVBMX0dOVVNURVAK ICAgKChFbWFjc0FwcCAqKXNlbGYpLT5hcHBsaWNhdGlvbkRpZEZpbmlzaExhdW5jaGluZ0NhbGxl ZCA9IFlFUzsKICNlbmRpZgpAQCAtNTAxNSw3ICs1MTk4LDcgQEAgbm90X2luX2FyZ3YgKE5TU3Ry aW5nICphcmcpCiB9CiAtICh2b2lkKWFwcGxpY2F0aW9uRGlkQmVjb21lQWN0aXZlOiAoTlNOb3Rp ZmljYXRpb24gKilub3RpZmljYXRpb24KIHsKLSAgTlNUUkFDRSAoYXBwbGljYXRpb25EaWRCZWNv bWVBY3RpdmUpOworICBOU1RSQUNFICgiYXBwbGljYXRpb25EaWRCZWNvbWVBY3RpdmUiKTsKIAog I2lmZGVmIE5TX0lNUExfR05VU1RFUAogICBpZiAoISBhcHBsaWNhdGlvbkRpZEZpbmlzaExhdW5j aGluZ0NhbGxlZCkKQEAgLTUwNDcsNyArNTIzMCw3IEBAIG5vdF9pbl9hcmd2IChOU1N0cmluZyAq YXJnKQogICAgICBUaGUgdGltZW91dCBzcGVjaWZpZWQgdG8gbnNfc2VsZWN0IGhhcyBwYXNzZWQu CiAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogewotICAvKk5TVFJBQ0UgKHRpbWVvdXRfaGFuZGxl cik7ICovCisgIC8qTlNUUkFDRSAoInRpbWVvdXRfaGFuZGxlciIpOyAqLwogICBuc19zZW5kX2Fw cGRlZmluZWQgKC0yKTsKIH0KIApAQCAtNTA3MSw3ICs1MjU0LDcgQEAgbm90X2luX2FyZ3YgKE5T U3RyaW5nICphcmcpCiAgIHN0cnVjdCB0aW1lc3BlYyB0aW1lb3V0LCAqdG1vOwogICBOU0F1dG9y ZWxlYXNlUG9vbCAqcG9vbCA9IG5pbDsKIAotICAvKiBOU1RSQUNFIChmZF9oYW5kbGVyKTsgKi8K KyAgLyogTlNUUkFDRSAoImZkX2hhbmRsZXIiKTsgKi8KIAogICBmb3IgKDs7KQogICAgIHsKQEAg LTUyMDgsNyArNTM5MSw3IEBAIG5vdF9pbl9hcmd2IChOU1N0cmluZyAqYXJnKQogCiAtICh2b2lk KWRlYWxsb2MKIHsKLSAgTlNUUkFDRSAoRW1hY3NWaWV3X2RlYWxsb2MpOworICBOU1RSQUNFICgi RW1hY3NWaWV3X2RlYWxsb2MiKTsKICAgW3Rvb2xiYXIgcmVsZWFzZV07CiAgIGlmIChmc19zdGF0 ZSA9PSBGVUxMU0NSRUVOX0JPVEgpCiAgICAgW25vbmZzX3dpbmRvdyByZWxlYXNlXTsKQEAgLTUy MjYsNyArNTQwOSw3IEBAIG5vdF9pbl9hcmd2IChOU1N0cmluZyAqYXJnKQogICBDR0Zsb2F0IHNp emU7CiAgIE5TRm9udCAqbnNmb250OwogCi0gIE5TVFJBQ0UgKGNoYW5nZUZvbnQpOworICBOU1RS QUNFICgiY2hhbmdlRm9udCIpOwogCiAgIGlmICghZW1hY3NfZXZlbnQpCiAgICAgcmV0dXJuOwpA QCAtNTI1Niw3ICs1NDM5LDcgQEAgbm90X2luX2FyZ3YgKE5TU3RyaW5nICphcmcpCiAKIC0gKEJP T0wpYWNjZXB0c0ZpcnN0UmVzcG9uZGVyCiB7Ci0gIE5TVFJBQ0UgKGFjY2VwdHNGaXJzdFJlc3Bv bmRlcik7CisgIE5TVFJBQ0UgKCJhY2NlcHRzRmlyc3RSZXNwb25kZXIiKTsKICAgcmV0dXJuIFlF UzsKIH0KIApAQCAtNTI2NSw3ICs1NDQ4LDcgQEAgbm90X2luX2FyZ3YgKE5TU3RyaW5nICphcmcp CiB7CiAgIE5TUmVjdCB2aXNpYmxlID0gW3NlbGYgdmlzaWJsZVJlY3RdOwogICBOU0N1cnNvciAq Y3VycmVudEN1cnNvciA9IEZSQU1FX1BPSU5URVJfVFlQRSAoZW1hY3NmcmFtZSk7Ci0gIE5TVFJB Q0UgKHJlc2V0Q3Vyc29yUmVjdHMpOworICBOU1RSQUNFICgicmVzZXRDdXJzb3JSZWN0cyIpOwog CiAgIGlmIChjdXJyZW50Q3Vyc29yID09IG5pbCkKICAgICBjdXJyZW50Q3Vyc29yID0gW05TQ3Vy c29yIGFycm93Q3Vyc29yXTsKQEAgLTUyOTAsNyArNTQ3Myw3IEBAIG5vdF9pbl9hcmd2IChOU1N0 cmluZyAqYXJnKQogICBpbnQgbGVmdF9pc19ub25lOwogICB1bnNpZ25lZCBpbnQgZmxhZ3MgPSBb dGhlRXZlbnQgbW9kaWZpZXJGbGFnc107CiAKLSAgTlNUUkFDRSAoa2V5RG93bik7CisgIE5TVFJB Q0UgKCJrZXlEb3duIik7CiAKICAgLyogUmhhcHNvZHkgYW5kIE9TIFggZ2l2ZSB1cCBhbmQgZG93 biBldmVudHMgZm9yIHRoZSBhcnJvdyBrZXlzICovCiAgIGlmIChuc19mYWtlX2tleWRvd24gPT0g WUVTKQpAQCAtNTc1Myw3ICs1OTM2LDcgQEAgbm90X2luX2FyZ3YgKE5TU3RyaW5nICphcmcpCiAg IHN0cnVjdCBuc19kaXNwbGF5X2luZm8gKmRweWluZm8gPSBGUkFNRV9ESVNQTEFZX0lORk8gKGVt YWNzZnJhbWUpOwogICBOU1BvaW50IHAgPSBbc2VsZiBjb252ZXJ0UG9pbnQ6IFt0aGVFdmVudCBs b2NhdGlvbkluV2luZG93XSBmcm9tVmlldzogbmlsXTsKIAotICBOU1RSQUNFIChtb3VzZURvd24p OworICBOU1RSQUNFICgibW91c2VEb3duIik7CiAKICAgW3NlbGYgZGVsZXRlV29ya2luZ1RleHRd OwogCkBAIC01Nzc0LDcgKzU5NTcsNyBAQCBub3RfaW5fYXJndiAoTlNTdHJpbmcgKmFyZykKICAg ICAgICAgICBkZWx0YSA9IFt0aGVFdmVudCBkZWx0YVhdOwogICAgICAgICAgIGlmIChkZWx0YSA9 PSAwKQogICAgICAgICAgICAgewotICAgICAgICAgICAgICBOU1RSQUNFIChkZWx0YUlzWmVybyk7 CisgICAgICAgICAgICAgIE5TVFJBQ0UgKCJkZWx0YUlzWmVybyIpOwogICAgICAgICAgICAgICBy ZXR1cm47CiAgICAgICAgICAgICB9CiAgICAgICAgICAgZW1hY3NfZXZlbnQtPmtpbmQgPSBIT1JJ Wl9XSEVFTF9FVkVOVDsKQEAgLTU4MDEsNDIgKzU5ODQsNDIgQEAgbm90X2luX2FyZ3YgKE5TU3Ry aW5nICphcmcpCiAKIC0gKHZvaWQpcmlnaHRNb3VzZURvd246IChOU0V2ZW50ICopdGhlRXZlbnQK IHsKLSAgTlNUUkFDRSAocmlnaHRNb3VzZURvd24pOworICBOU1RSQUNFICgicmlnaHRNb3VzZURv d24iKTsKICAgW3NlbGYgbW91c2VEb3duOiB0aGVFdmVudF07CiB9CiAKIAogLSAodm9pZClvdGhl ck1vdXNlRG93bjogKE5TRXZlbnQgKil0aGVFdmVudAogewotICBOU1RSQUNFIChvdGhlck1vdXNl RG93bik7CisgIE5TVFJBQ0UgKCJvdGhlck1vdXNlRG93biIpOwogICBbc2VsZiBtb3VzZURvd246 IHRoZUV2ZW50XTsKIH0KIAogCiAtICh2b2lkKW1vdXNlVXA6IChOU0V2ZW50ICopdGhlRXZlbnQK IHsKLSAgTlNUUkFDRSAobW91c2VVcCk7CisgIE5TVFJBQ0UgKCJtb3VzZVVwIik7CiAgIFtzZWxm IG1vdXNlRG93bjogdGhlRXZlbnRdOwogfQogCiAKIC0gKHZvaWQpcmlnaHRNb3VzZVVwOiAoTlNF dmVudCAqKXRoZUV2ZW50CiB7Ci0gIE5TVFJBQ0UgKHJpZ2h0TW91c2VVcCk7CisgIE5TVFJBQ0Ug KCJyaWdodE1vdXNlVXAiKTsKICAgW3NlbGYgbW91c2VEb3duOiB0aGVFdmVudF07CiB9CiAKIAog LSAodm9pZClvdGhlck1vdXNlVXA6IChOU0V2ZW50ICopdGhlRXZlbnQKIHsKLSAgTlNUUkFDRSAo b3RoZXJNb3VzZVVwKTsKKyAgTlNUUkFDRSAoIm90aGVyTW91c2VVcCIpOwogICBbc2VsZiBtb3Vz ZURvd246IHRoZUV2ZW50XTsKIH0KIAogCiAtICh2b2lkKSBzY3JvbGxXaGVlbDogKE5TRXZlbnQg Kil0aGVFdmVudAogewotICBOU1RSQUNFIChzY3JvbGxXaGVlbCk7CisgIE5TVFJBQ0UgKCJzY3Jv bGxXaGVlbCIpOwogICBbc2VsZiBtb3VzZURvd246IHRoZUV2ZW50XTsKIH0KIApAQCAtNTg0OSw3 ICs2MDMyLDcgQEAgbm90X2luX2FyZ3YgKE5TU3RyaW5nICphcmcpCiAgIExpc3BfT2JqZWN0IGZy YW1lOwogICBOU1BvaW50IHB0OwogCi0vLyAgTlNUUkFDRSAobW91c2VNb3ZlZCk7CisvLyAgTlNU UkFDRSAoIm1vdXNlTW92ZWQiKTsKIAogICBkcHlpbmZvLT5sYXN0X21vdXNlX21vdmVtZW50X3Rp bWUgPSBFVl9USU1FU1RBTVAgKGUpOwogICBwdCA9IFtzZWxmIGNvbnZlcnRQb2ludDogW2UgbG9j YXRpb25JbldpbmRvd10gZnJvbVZpZXc6IG5pbF07CkBAIC01ODY5LDcgKzYwNTIsNyBAQCBub3Rf aW5fYXJndiAoTlNTdHJpbmcgKmFyZykKIAogICBpZiAoIU5JTFAgKFZtb3VzZV9hdXRvc2VsZWN0 X3dpbmRvdykpCiAgICAgewotICAgICAgTlNUUkFDRSAobW91c2VfYXV0b3NlbGVjdF93aW5kb3cp OworICAgICAgTlNUUkFDRSAoIm1vdXNlX2F1dG9zZWxlY3Rfd2luZG93Iik7CiAgICAgICBzdGF0 aWMgTGlzcF9PYmplY3QgbGFzdF9tb3VzZV93aW5kb3c7CiAgICAgICBMaXNwX09iamVjdCB3aW5k b3cKIAk9IHdpbmRvd19mcm9tX2Nvb3JkaW5hdGVzIChlbWFjc2ZyYW1lLCBwdC54LCBwdC55LCAw LCAwKTsKQEAgLTU4ODEsNyArNjA2NCw3IEBAIG5vdF9pbl9hcmd2IChOU1N0cmluZyAqYXJnKQog ICAgICAgICAgICAgICB8fCAoRVEgKFhXSU5ET1cgKHdpbmRvdyktPmZyYW1lLAogICAgICAgICAg ICAgICAgICAgICAgIFhXSU5ET1cgKHNlbGVjdGVkX3dpbmRvdyktPmZyYW1lKSkpKQogICAgICAg ICB7Ci0gICAgICAgICAgTlNUUkFDRSAoaW5fd2luZG93KTsKKyAgICAgICAgICBOU1RSQUNFICgi aW5fd2luZG93Iik7CiAgICAgICAgICAgZW1hY3NfZXZlbnQtPmtpbmQgPSBTRUxFQ1RfV0lORE9X X0VWRU5UOwogICAgICAgICAgIGVtYWNzX2V2ZW50LT5mcmFtZV9vcl93aW5kb3cgPSB3aW5kb3c7 CiAgICAgICAgICAgRVZfVFJBSUxFUjIgKGUpOwpAQCAtNTkxMSwyMSArNjA5NCwyMSBAQCBub3Rf aW5fYXJndiAoTlNTdHJpbmcgKmFyZykKIAogLSAodm9pZCltb3VzZURyYWdnZWQ6IChOU0V2ZW50 ICopZQogewotICBOU1RSQUNFIChtb3VzZURyYWdnZWQpOworICBOU1RSQUNFICgibW91c2VEcmFn Z2VkIik7CiAgIFtzZWxmIG1vdXNlTW92ZWQ6IGVdOwogfQogCiAKIC0gKHZvaWQpcmlnaHRNb3Vz ZURyYWdnZWQ6IChOU0V2ZW50ICopZQogewotICBOU1RSQUNFIChyaWdodE1vdXNlRHJhZ2dlZCk7 CisgIE5TVFJBQ0UgKCJyaWdodE1vdXNlRHJhZ2dlZCIpOwogICBbc2VsZiBtb3VzZU1vdmVkOiBl XTsKIH0KIAogCiAtICh2b2lkKW90aGVyTW91c2VEcmFnZ2VkOiAoTlNFdmVudCAqKWUKIHsKLSAg TlNUUkFDRSAob3RoZXJNb3VzZURyYWdnZWQpOworICBOU1RSQUNFICgib3RoZXJNb3VzZURyYWdn ZWQiKTsKICAgW3NlbGYgbW91c2VNb3ZlZDogZV07CiB9CiAKQEAgLTU5MzQsNyArNjExNyw3IEBA IG5vdF9pbl9hcmd2IChOU1N0cmluZyAqYXJnKQogewogICBOU0V2ZW50ICplID1bW3NlbGYgd2lu ZG93XSBjdXJyZW50RXZlbnRdOwogCi0gIE5TVFJBQ0UgKHdpbmRvd1Nob3VsZENsb3NlKTsKKyAg TlNUUkFDRSAoIndpbmRvd1Nob3VsZENsb3NlIik7CiAgIHdpbmRvd0Nsb3NpbmcgPSBZRVM7CiAg IGlmICghZW1hY3NfZXZlbnQpCiAgICAgcmV0dXJuIE5POwpAQCAtNTk1Niw4ICs2MTM5LDkgQEAg bm90X2luX2FyZ3YgKE5TU3RyaW5nICphcmcpCiAgIGludCBvbGRoID0gRlJBTUVfUElYRUxfSEVJ R0hUIChlbWFjc2ZyYW1lKTsKICAgaW50IG5ld3csIG5ld2g7CiAKLSAgTlNUUkFDRSAodXBkYXRl RnJhbWVTaXplKTsKKyAgTlNUUkFDRSAoInVwZGF0ZUZyYW1lU2l6ZSIpOwogICBOU1RSQUNFX1NJ WkUgKCJPcmlnaW5hbCBzaXplIiwgTlNNYWtlU2l6ZSAob2xkdywgb2xkaCkpOworICBOU1RSQUNF X1JFQ1QgKCJPcmlnaW5hbCBmcmFtZSIsIHdyKTsKIAogICBpZiAoISBbc2VsZiBpc0Z1bGxzY3Jl ZW5dKQogICAgIHsKQEAgLTU5OTQsNyArNjE3OCw2IEBAIG5vdF9pbl9hcmd2IChOU1N0cmluZyAq YXJnKQogICAgIHsKICAgICAgIE5TVmlldyAqdmlldyA9IEZSQU1FX05TX1ZJRVcgKGVtYWNzZnJh bWUpOwogICAgICAgTlNXaW5kb3cgKndpbiA9IFt2aWV3IHdpbmRvd107Ci0gICAgICBOU1NpemUg c3ogPSBbd2luIHJlc2l6ZUluY3JlbWVudHNdOwogCiAgICAgICBjaGFuZ2VfZnJhbWVfc2l6ZSAo ZW1hY3NmcmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICBGUkFNRV9QSVhFTF9UT19URVhU X1dJRFRIIChlbWFjc2ZyYW1lLCBuZXd3KSwKQEAgLTYwMDMsMjEgKzYxODYsOSBAQCBub3RfaW5f YXJndiAoTlNTdHJpbmcgKmFyZykKICAgICAgIFNFVF9GUkFNRV9HQVJCQUdFRCAoZW1hY3NmcmFt ZSk7CiAgICAgICBjYW5jZWxfbW91c2VfZmFjZSAoZW1hY3NmcmFtZSk7CiAKLSAgICAgIC8vIERp ZCByZXNpemUgaW5jcmVtZW50cyBjaGFuZ2UgYmVjYXVzZSBvZiBhIGZvbnQgY2hhbmdlPwotICAg ICAgaWYgKHN6LndpZHRoICE9IEZSQU1FX0NPTFVNTl9XSURUSCAoZW1hY3NmcmFtZSkgfHwKLSAg ICAgICAgICBzei5oZWlnaHQgIT0gRlJBTUVfTElORV9IRUlHSFQgKGVtYWNzZnJhbWUpIHx8Ci0g ICAgICAgICAgKGZyYW1lX3Jlc2l6ZV9waXhlbHdpc2UgJiYgc3oud2lkdGggIT0gMSkpCi0gICAg ICAgIHsKLSAgICAgICAgICBzei53aWR0aCA9IGZyYW1lX3Jlc2l6ZV9waXhlbHdpc2UKLSAgICAg ICAgICAgID8gMSA6IEZSQU1FX0NPTFVNTl9XSURUSCAoZW1hY3NmcmFtZSk7Ci0gICAgICAgICAg c3ouaGVpZ2h0ID0gZnJhbWVfcmVzaXplX3BpeGVsd2lzZQotICAgICAgICAgICAgPyAxIDogRlJB TUVfTElORV9IRUlHSFQgKGVtYWNzZnJhbWUpOwotICAgICAgICAgIFt3aW4gc2V0UmVzaXplSW5j cmVtZW50czogc3pdOwotCi0gICAgICAgICAgTlNUUkFDRV9TSVpFICgiTmV3IHNpemUiLCBOU01h a2VTaXplIChuZXd3LCBuZXdoKSk7Ci0gICAgICAgIH0KLQotICAgICAgW3ZpZXcgc2V0RnJhbWU6 IE5TTWFrZVJlY3QgKDAsIDAsIG5ld3csIG5ld2gpXTsKKyAgICAgIHdyID0gTlNNYWtlUmVjdCAo MCwgMCwgbmV3dywgbmV3aCk7CisgICAgICBOU1RSQUNFX1JFQ1QgKCJzZXRGcmFtZSIsIHdyKTsK KyAgICAgIFt2aWV3IHNldEZyYW1lOiB3cl07CiAgICAgICBbc2VsZiB3aW5kb3dEaWRNb3ZlOm5p bF07ICAgLy8gVXBkYXRlIHRvcC9sZWZ0LgogICAgIH0KIH0KQEAgLTYwMjcsOSArNjE5OCwxMCBA QCBub3RfaW5fYXJndiAoTlNTdHJpbmcgKmFyZykKIHsKICAgaW50IGV4dHJhID0gMDsKIAotICBO U1RSQUNFICh3aW5kb3dXaWxsUmVzaXplKTsKLSAgTlNUUkFDRV9TSVpFICgiT3JpZ2luYWwgc2l6 ZSIsIGZyYW1lU2l6ZSk7Ci0vKmZwcmludGYgKHN0ZGVyciwiV2luZG93IHdpbGwgcmVzaXplOiAl LjBmIHggJS4wZlxuIixmcmFtZVNpemUud2lkdGgsZnJhbWVTaXplLmhlaWdodCk7ICovCisgIE5T VFJBQ0UgKCJ3aW5kb3dXaWxsUmVzaXplOiB0b1NpemU6ICIgTlNUUkFDRV9GTVRfU0laRSwKKyAg ICAgICAgICAgTlNUUkFDRV9BUkdfU0laRSAoZnJhbWVTaXplKSk7CisgIE5TVFJBQ0VfUkVDVCAg ICgiW3NlbmRlciBmcmFtZV0iLCBbc2VuZGVyIGZyYW1lXSk7CisgIE5TVFJBQ0VfRlNUWVBFICgi ZnNfc3RhdGUiLCBmc19zdGF0ZSk7CiAKICAgaWYgKGZzX3N0YXRlID09IEZVTExTQ1JFRU5fTUFY SU1JWkVECiAgICAgICAmJiAobWF4aW1pemVkX3dpZHRoICE9IChpbnQpZnJhbWVTaXplLndpZHRo CkBAIC02MDQxLDYgKzYyMTMsNyBAQCBub3RfaW5fYXJndiAoTlNTdHJpbmcgKmFyZykKICAgZWxz ZSBpZiAoZnNfc3RhdGUgPT0gRlVMTFNDUkVFTl9IRUlHSFQKICAgICAgICAgICAgJiYgbWF4aW1p emVkX2hlaWdodCAhPSAoaW50KWZyYW1lU2l6ZS5oZWlnaHQpCiAgICAgW3NlbGYgc2V0RlNWYWx1 ZTogRlVMTFNDUkVFTl9OT05FXTsKKwogICBpZiAoZnNfc3RhdGUgPT0gRlVMTFNDUkVFTl9OT05F KQogICAgIG1heGltaXplZF93aWR0aCA9IG1heGltaXplZF9oZWlnaHQgPSAtMTsKIApAQCAtNjA5 MCw3ICs2MjYzLDMzIEBAIG5vdF9pbl9hcmd2IChOU1N0cmluZyAqYXJnKQogICAgICAgfQogICB9 CiAjZW5kaWYgLyogTlNfSU1QTF9DT0NPQSAqLwotLypmcHJpbnRmIChzdGRlcnIsIiAgICAuLi5z aXplIGJlY2FtZSAlLjBmIHggJS4wZiAgKCVkIHggJWQpXG4iLGZyYW1lU2l6ZS53aWR0aCxmcmFt ZVNpemUuaGVpZ2h0LGNvbHMscm93cyk7ICovCisKKyAgTlNUUkFDRV9NU0cgKCJjb2xzOiAlZCAg cm93czogJWQiLCBjb2xzLCByb3dzKTsKKworICAvKiBSZXN0cmljdCB0aGUgbmV3IHNpemUgdG8g dGhlIHRleHQgZ2lyZC4KKworICAgICBEb24ndCByZXN0aWN0IHRoZSB3aWR0aCBpZiB0aGUgdXNl ciBvbmx5IGFkanVzdGVkIHRoZSBoZWlnaHQsIGFuZAorICAgICB2aWNlIHZlcnNhLiAoV2l0aG91 dCB0aGlzLCB0aGUgZnJhbWUgd291bGQgc2hyaW5rLCBhbmQgbW92ZQorICAgICBzbGlnaHRseSwg aWYgdGhlIHdpbmRvdyB3YXMgcmVzaXplZCBieSBkcmFnZ2luZyBvbmUgb2YgaXRzCisgICAgIGJv cmRlcnMuICovCisgIGlmICghZnJhbWVfcmVzaXplX3BpeGVsd2lzZSkKKyAgICB7CisgICAgICBO U1JlY3QgciA9IFtbc2VsZiB3aW5kb3ddIGZyYW1lXTsKKworICAgICAgaWYgKHIuc2l6ZS53aWR0 aCAhPSBmcmFtZVNpemUud2lkdGgpCisgICAgICAgIHsKKyAgICAgICAgICBmcmFtZVNpemUud2lk dGggPQorICAgICAgICAgICAgRlJBTUVfVEVYVF9DT0xTX1RPX1BJWEVMX1dJRFRIICAoZW1hY3Nm cmFtZSwgY29scyk7CisgICAgICAgIH0KKworICAgICAgaWYgKHIuc2l6ZS5oZWlnaHQgIT0gZnJh bWVTaXplLmhlaWdodCkKKyAgICAgICAgeworICAgICAgICAgIGZyYW1lU2l6ZS5oZWlnaHQgPQor ICAgICAgICAgICAgRlJBTUVfVEVYVF9MSU5FU19UT19QSVhFTF9IRUlHSFQgKGVtYWNzZnJhbWUs IHJvd3MpICsgZXh0cmE7CisgICAgICAgIH0KKyAgICB9CisKKyAgTlNUUkFDRV9SRVRVUk5fU0la RSAoZnJhbWVTaXplKTsKIAogICByZXR1cm4gZnJhbWVTaXplOwogfQpAQCAtNjA5OCw2ICs2Mjk3 LDggQEAgbm90X2luX2FyZ3YgKE5TU3RyaW5nICphcmcpCiAKIC0gKHZvaWQpd2luZG93RGlkUmVz aXplOiAoTlNOb3RpZmljYXRpb24gKilub3RpZmljYXRpb24KIHsKKyAgTlNUUkFDRSAoIndpbmRv d0RpZFJlc2l6ZSIpOworCiAgIGlmICghIFtzZWxmIGZzSXNOYXRpdmVdKQogICAgIHsKICAgICAg IE5TV2luZG93ICp0aGVXaW5kb3cgPSBbbm90aWZpY2F0aW9uIG9iamVjdF07CkBAIC02MTA2LDYg KzYzMDcsOCBAQCBub3RfaW5fYXJndiAoTlNTdHJpbmcgKmFyZykKICAgICAgIGlmIChbc2VsZiB3 aW5kb3ddICE9IHRoZVdpbmRvdykgcmV0dXJuOwogICAgIH0KIAorICBOU1RSQUNFX1JFQ1QgKCJm cmFtZSIsIFtbbm90aWZpY2F0aW9uIG9iamVjdF0gZnJhbWVdKTsKKwogI2lmZGVmIE5TX0lNUExf R05VU1RFUAogICBOU1dpbmRvdyAqdGhlV2luZG93ID0gW25vdGlmaWNhdGlvbiBvYmplY3RdOwog CkBAIC02MTE2LDEwICs2MzE5LDcgQEAgbm90X2luX2FyZ3YgKE5TU3RyaW5nICphcmcpCiAgIHN6 ID0gW3NlbGYgd2luZG93V2lsbFJlc2l6ZTogdGhlV2luZG93IHRvU2l6ZTogc3pdOwogI2VuZGlm IC8qIE5TX0lNUExfR05VU1RFUCAqLwogCi0gIE5TVFJBQ0UgKHdpbmRvd0RpZFJlc2l6ZSk7Ci0v KmZwcmludGYgKHN0ZGVyciwid2luZG93RGlkUmVzaXplOiAlLjBmXG4iLFt0aGVXaW5kb3cgZnJh bWVdLnNpemUuaGVpZ2h0KTsgKi8KLQotaWYgKGNvbHMgPiAwICYmIHJvd3MgPiAwKQorICBpZiAo Y29scyA+IDAgJiYgcm93cyA+IDApCiAgICAgewogICAgICAgW3NlbGYgdXBkYXRlRnJhbWVTaXpl OiBZRVNdOwogICAgIH0KQEAgLTYxNDgsNyArNjM0OCw3IEBAIGlmIChjb2xzID4gMCAmJiByb3dz ID4gMCkKICAgc3RydWN0IG5zX2Rpc3BsYXlfaW5mbyAqZHB5aW5mbyA9IEZSQU1FX0RJU1BMQVlf SU5GTyAoZW1hY3NmcmFtZSk7CiAgIHN0cnVjdCBmcmFtZSAqb2xkX2ZvY3VzID0gZHB5aW5mby0+ eF9mb2N1c19mcmFtZTsKIAotICBOU1RSQUNFICh3aW5kb3dEaWRCZWNvbWVLZXkpOworICBOU1RS QUNFICgid2luZG93RGlkQmVjb21lS2V5Iik7CiAKICAgaWYgKGVtYWNzZnJhbWUgIT0gb2xkX2Zv Y3VzKQogICAgIGRweWluZm8tPnhfZm9jdXNfZnJhbWUgPSBlbWFjc2ZyYW1lOwpAQCAtNjE2OCw3 ICs2MzY4LDcgQEAgaWYgKGNvbHMgPiAwICYmIHJvd3MgPiAwKQogewogICBzdHJ1Y3QgbnNfZGlz cGxheV9pbmZvICpkcHlpbmZvID0gRlJBTUVfRElTUExBWV9JTkZPIChlbWFjc2ZyYW1lKTsKICAg Qk9PTCBpc19mb2N1c19mcmFtZSA9IGRweWluZm8tPnhfZm9jdXNfZnJhbWUgPT0gZW1hY3NmcmFt ZTsKLSAgTlNUUkFDRSAod2luZG93RGlkUmVzaWduS2V5KTsKKyAgTlNUUkFDRSAoIndpbmRvd0Rp ZFJlc2lnbktleSIpOwogCiAgIGlmIChpc19mb2N1c19mcmFtZSkKICAgICBkcHlpbmZvLT54X2Zv Y3VzX2ZyYW1lID0gMDsKQEAgLTYyMDMsNyArNjQwMyw3IEBAIGlmIChjb2xzID4gMCAmJiByb3dz ID4gMCkKIAogLSAodm9pZCl3aW5kb3dXaWxsTWluaWF0dXJpemU6IHNlbmRlcgogewotICBOU1RS QUNFICh3aW5kb3dXaWxsTWluaWF0dXJpemUpOworICBOU1RSQUNFICgid2luZG93V2lsbE1pbmlh dHVyaXplIik7CiB9CiAKIApAQCAtNjIyNCwxMSArNjQyNCwxMCBAQCBpZiAoY29scyA+IDAgJiYg cm93cyA+IDApCiAgIE5TUmVjdCByLCB3cjsKICAgTGlzcF9PYmplY3QgdGVtOwogICBOU1dpbmRv dyAqd2luOwotICBOU1NpemUgc3o7CiAgIE5TQ29sb3IgKmNvbDsKICAgTlNTdHJpbmcgKm5hbWU7 CiAKLSAgTlNUUkFDRSAoaW5pdEZyYW1lRnJvbUVtYWNzKTsKKyAgTlNUUkFDRSAoImluaXRGcmFt ZUZyb21FbWFjcyIpOwogCiAgIHdpbmRvd0Nsb3NpbmcgPSBOTzsKICAgcHJvY2Vzc2luZ0NvbXBv c2UgPSBOTzsKQEAgLTYyODMsOSArNjQ4Miw2IEBAIGlmIChjb2xzID4gMCAmJiByb3dzID4gMCkK ICAgTUFDX09TX1hfVkVSU0lPTl9NQVhfQUxMT1dFRCA8PSBNQUNfT1NfWF9WRVJTSU9OXzEwXzkK ICAgW3dpbiB1c2VPcHRpbWl6ZWREcmF3aW5nOiBZRVNdOwogI2VuZGlmCi0gIHN6LndpZHRoID0g ZnJhbWVfcmVzaXplX3BpeGVsd2lzZSA/IDEgOiBGUkFNRV9DT0xVTU5fV0lEVEggKGYpOwotICBz ei5oZWlnaHQgPSBmcmFtZV9yZXNpemVfcGl4ZWx3aXNlID8gMSA6IEZSQU1FX0xJTkVfSEVJR0hU IChmKTsKLSAgW3dpbiBzZXRSZXNpemVJbmNyZW1lbnRzOiBzel07CiAKICAgW1t3aW4gY29udGVu dFZpZXddIGFkZFN1YnZpZXc6IHNlbGZdOwogCkBAIC02MzI5LDEwICs2NTI1LDE4IEBAIGlmIChj b2xzID4gMCAmJiByb3dzID4gMCkKICAgICBOU1NjcmVlbiAqc2NyZWVuID0gW3dpbiBzY3JlZW5d OwogCiAgICAgaWYgKHNjcmVlbiAhPSAwKQotICAgICAgW3dpbiBzZXRGcmFtZVRvcExlZnRQb2lu dDogTlNNYWtlUG9pbnQKLSAgICAgICAgICAgKElOX0JPVU5EICgtU0NSRUVOTUFYLCBmLT5sZWZ0 X3BvcywgU0NSRUVOTUFYKSwKLSAgICAgICAgICAgIElOX0JPVU5EICgtU0NSRUVOTUFYLAotICAg ICAgICAgICAgICAgICAgICAgW3NjcmVlbiBmcmFtZV0uc2l6ZS5oZWlnaHQgLSBOU19UT1BfUE9T IChmKSwgU0NSRUVOTUFYKSldOworICAgICAgeworICAgICAgICBOU1BvaW50IHB0ID0gTlNNYWtl UG9pbnQKKyAgICAgICAgICAoSU5fQk9VTkQgKC1TQ1JFRU5NQVgsIGYtPmxlZnRfcG9zLCBTQ1JF RU5NQVgpLAorICAgICAgICAgICBJTl9CT1VORCAoLVNDUkVFTk1BWCwKKyAgICAgICAgICAgICAg ICAgICAgIFtzY3JlZW4gZnJhbWVdLnNpemUuaGVpZ2h0IC0gTlNfVE9QX1BPUyAoZiksIFNDUkVF Tk1BWCkpOworCisgICAgICAgIE5TVFJBQ0VfUE9JTlQgKCJzZXRGcmFtZVRvcExlZnRQb2ludCIs IHB0KTsKKworICAgICAgICBbd2luIHNldEZyYW1lVG9wTGVmdFBvaW50OiBwdF07CisKKyAgICAg ICAgTlNUUkFDRV9SRUNUICgibmV3IGZyYW1lIiwgW3dpbiBmcmFtZV0pOworICAgICAgfQogICB9 CiAKICAgW3dpbiBtYWtlRmlyc3RSZXNwb25kZXI6IHNlbGZdOwpAQCAtNjM2Miw3ICs2NTY2LDcg QEAgaWYgKGNvbHMgPiAwICYmIHJvd3MgPiAwKQogICBOU0FycmF5ICpzY3JlZW5zID0gW05TU2Ny ZWVuIHNjcmVlbnNdOwogICBOU1NjcmVlbiAqc2NyZWVuID0gW3NjcmVlbnMgb2JqZWN0QXRJbmRl eDogMF07CiAKLSAgTlNUUkFDRSAod2luZG93RGlkTW92ZSk7CisgIE5TVFJBQ0UgKCJ3aW5kb3dE aWRNb3ZlIik7CiAKICAgaWYgKCFlbWFjc2ZyYW1lLT5vdXRwdXRfZGF0YS5ucykKICAgICByZXR1 cm47CkBAIC02MzgwLDYgKzY1ODQsMTAgQEAgaWYgKGNvbHMgPiAwICYmIHJvd3MgPiAwKQogICAg bG9jYXRpb24gc28gc2V0X3dpbmRvd19zaXplIG1vdmVzIHRoZSBmcmFtZS4gKi8KIC0gKEJPT0wp d2luZG93U2hvdWxkWm9vbTogKE5TV2luZG93ICopc2VuZGVyIHRvRnJhbWU6IChOU1JlY3QpbmV3 RnJhbWUKIHsKKyAgTlNUUkFDRSAoKCJbd2luZG93U2hvdWxkWm9vbTp3aW4gdG9GcmFtZToiIE5T VFJBQ0VfRk1UX1JFQ1QgIl0iCisgICAgICAgICAgICBOU1RSQUNFX0ZNVF9SRVRVUk4gIllFUyIp LAorICAgICAgICAgICBOU1RSQUNFX0FSR19SRUNUIChuZXdGcmFtZSkpOworCiAgIGVtYWNzZnJh bWUtPm91dHB1dF9kYXRhLm5zLT56b29taW5nID0gMTsKICAgcmV0dXJuIFlFUzsKIH0KQEAgLTYz OTEsNzEgKzY1OTksMTI0IEBAIGlmIChjb2xzID4gMCAmJiByb3dzID4gMCkKIC0gKE5TUmVjdCl3 aW5kb3dXaWxsVXNlU3RhbmRhcmRGcmFtZTooTlNXaW5kb3cgKilzZW5kZXIKICAgICAgICAgICAg ICAgICAgICAgICAgIGRlZmF1bHRGcmFtZTooTlNSZWN0KWRlZmF1bHRGcmFtZQogeworICAvLyBU T0RPOiBSZW5hbWUgdG8gImN1cnJlbnRGcmFtZSIgYW5kIGFzc2lnbiAicmVzdWx0IiBwcm9wZXJs eSBpbgorICAvLyBhbGwgcGF0aHMuCiAgIE5TUmVjdCByZXN1bHQgPSBbc2VuZGVyIGZyYW1lXTsK IAotICBOU1RSQUNFICh3aW5kb3dXaWxsVXNlU3RhbmRhcmRGcmFtZSk7CisgIE5TVFJBQ0UgKCgi W3dpbmRvd1dpbGxVc2VTdGFuZGFyZEZyYW1lOiBkZWZhdWx0RnJhbWU6IgorICAgICAgICAgICAg TlNUUkFDRV9GTVRfUkVDVCAiXSIpLAorICAgICAgICAgICBOU1RSQUNFX0FSR19SRUNUIChkZWZh dWx0RnJhbWUpKTsKKyAgTlNUUkFDRV9GU1RZUEUgKCJmc19zdGF0ZSIsIGZzX3N0YXRlKTsKKyAg TlNUUkFDRV9GU1RZUEUgKCJmc19iZWZvcmVfZnMiLCBmc19iZWZvcmVfZnMpOworICBOU1RSQUNF X0ZTVFlQRSAoIm5leHRfbWF4aW1pemVkIiwgbmV4dF9tYXhpbWl6ZWQpOworICBOU1RSQUNFX1JF Q1QgICAoIm5zX3VzZXJSZWN0IiwgbnNfdXNlclJlY3QpOworICBOU1RSQUNFX1JFQ1QgICAoIltz ZW5kZXIgZnJhbWVdIiwgW3NlbmRlciBmcmFtZV0pOwogCiAgIGlmIChmc19iZWZvcmVfZnMgIT0g LTEpIC8qIEVudGVyaW5nIGZ1bGxzY3JlZW4gKi8KLSAgICAgIHsKLSAgICAgICAgcmVzdWx0ID0g ZGVmYXVsdEZyYW1lOwotICAgICAgfQotICBlbHNlIGlmIChuZXh0X21heGltaXplZCA9PSBGVUxM U0NSRUVOX0hFSUdIVAotICAgICAgfHwgKG5leHRfbWF4aW1pemVkID09IC0xCi0gICAgICAgICAg JiYgYWJzICgoaW50KShkZWZhdWx0RnJhbWUuc2l6ZS5oZWlnaHQgLSByZXN1bHQuc2l6ZS5oZWln aHQpKQotICAgICAgICAgID4gRlJBTUVfTElORV9IRUlHSFQgKGVtYWNzZnJhbWUpKSkKLSAgICB7 Ci0gICAgICAvKiBmaXJzdCBjbGljayAqLwotICAgICAgbnNfdXNlclJlY3QgPSByZXN1bHQ7Ci0g ICAgICBtYXhpbWl6ZWRfaGVpZ2h0ID0gcmVzdWx0LnNpemUuaGVpZ2h0ID0gZGVmYXVsdEZyYW1l LnNpemUuaGVpZ2h0OwotICAgICAgbWF4aW1pemVkX3dpZHRoID0gLTE7Ci0gICAgICByZXN1bHQu b3JpZ2luLnkgPSBkZWZhdWx0RnJhbWUub3JpZ2luLnk7Ci0gICAgICBbc2VsZiBzZXRGU1ZhbHVl OiBGVUxMU0NSRUVOX0hFSUdIVF07Ci0jaWZkZWYgTlNfSU1QTF9DT0NPQQotICAgICAgbWF4aW1p emluZ19yZXNpemUgPSBZRVM7Ci0jZW5kaWYKLSAgICB9Ci0gIGVsc2UgaWYgKG5leHRfbWF4aW1p emVkID09IEZVTExTQ1JFRU5fV0lEVEgpCiAgICAgewotICAgICAgbnNfdXNlclJlY3QgPSByZXN1 bHQ7Ci0gICAgICBtYXhpbWl6ZWRfd2lkdGggPSByZXN1bHQuc2l6ZS53aWR0aCA9IGRlZmF1bHRG cmFtZS5zaXplLndpZHRoOwotICAgICAgbWF4aW1pemVkX2hlaWdodCA9IC0xOwotICAgICAgcmVz dWx0Lm9yaWdpbi54ID0gZGVmYXVsdEZyYW1lLm9yaWdpbi54OwotICAgICAgW3NlbGYgc2V0RlNW YWx1ZTogRlVMTFNDUkVFTl9XSURUSF07CisgICAgICBOU1RSQUNFX01TRyAoIkVudGVyaW5nIGZ1 bGxzY3JlZW4iKTsKKyAgICAgIHJlc3VsdCA9IGRlZmF1bHRGcmFtZTsKICAgICB9Ci0gIGVsc2Ug aWYgKG5leHRfbWF4aW1pemVkID09IEZVTExTQ1JFRU5fTUFYSU1JWkVECi0gICAgICAgICAgIHx8 IChuZXh0X21heGltaXplZCA9PSAtMQotICAgICAgICAgICAgICAgJiYgYWJzICgoaW50KShkZWZh dWx0RnJhbWUuc2l6ZS53aWR0aCAtIHJlc3VsdC5zaXplLndpZHRoKSkKLSAgICAgICAgICAgICAg ID4gRlJBTUVfQ09MVU1OX1dJRFRIIChlbWFjc2ZyYW1lKSkpCisgIGVsc2UKICAgICB7Ci0gICAg ICByZXN1bHQgPSBkZWZhdWx0RnJhbWU7ICAvKiBzZWNvbmQgY2xpY2sgKi8KLSAgICAgIG1heGlt aXplZF93aWR0aCA9IHJlc3VsdC5zaXplLndpZHRoOwotICAgICAgbWF4aW1pemVkX2hlaWdodCA9 IHJlc3VsdC5zaXplLmhlaWdodDsKLSAgICAgIFtzZWxmIHNldEZTVmFsdWU6IEZVTExTQ1JFRU5f TUFYSU1JWkVEXTsKKyAgICAgIC8vIFNhdmUgdGhlIHdpbmRvdyBzaXplIGFuZCBwb3NpdGlvbiAo ZnJhbWUpIGJlZm9yZSB0aGUgcmVzaXplLgorICAgICAgaWYgKGZzX3N0YXRlICE9IEZVTExTQ1JF RU5fTUFYSU1JWkVECisgICAgICAgICAgJiYgZnNfc3RhdGUgIT0gRlVMTFNDUkVFTl9XSURUSCkK KyAgICAgICAgeworICAgICAgICAgIG5zX3VzZXJSZWN0LnNpemUud2lkdGggPSByZXN1bHQuc2l6 ZS53aWR0aDsKKyAgICAgICAgICBuc191c2VyUmVjdC5vcmlnaW4ueCAgID0gcmVzdWx0Lm9yaWdp bi54OworICAgICAgICB9CisKKyAgICAgIGlmIChmc19zdGF0ZSAhPSBGVUxMU0NSRUVOX01BWElN SVpFRAorICAgICAgICAgICYmIGZzX3N0YXRlICE9IEZVTExTQ1JFRU5fSEVJR0hUKQorICAgICAg ICB7CisgICAgICAgICAgbnNfdXNlclJlY3Quc2l6ZS5oZWlnaHQgPSByZXN1bHQuc2l6ZS5oZWln aHQ7CisgICAgICAgICAgbnNfdXNlclJlY3Qub3JpZ2luLnkgICAgPSByZXN1bHQub3JpZ2luLnk7 CisgICAgICAgIH0KKworICAgICAgTlNUUkFDRV9SRUNUICgibnNfdXNlclJlY3QgKDIpIiwgbnNf dXNlclJlY3QpOworCisgICAgICBpZiAobmV4dF9tYXhpbWl6ZWQgPT0gRlVMTFNDUkVFTl9IRUlH SFQKKyAgICAgICAgICB8fCAobmV4dF9tYXhpbWl6ZWQgPT0gLTEKKyAgICAgICAgICAgICAgJiYg YWJzICgoaW50KShkZWZhdWx0RnJhbWUuc2l6ZS5oZWlnaHQgLSByZXN1bHQuc2l6ZS5oZWlnaHQp KQorICAgICAgICAgICAgICA+IEZSQU1FX0xJTkVfSEVJR0hUIChlbWFjc2ZyYW1lKSkpCisgICAg ICAgIHsKKyAgICAgICAgICAvKiBmaXJzdCBjbGljayAqLworICAgICAgICAgIE5TVFJBQ0VfTVNH ICgiRlVMTFNDUkVFTl9IRUlHSFQiKTsKKyAgICAgICAgICBtYXhpbWl6ZWRfaGVpZ2h0ID0gcmVz dWx0LnNpemUuaGVpZ2h0ID0gZGVmYXVsdEZyYW1lLnNpemUuaGVpZ2h0OworICAgICAgICAgIG1h eGltaXplZF93aWR0aCA9IC0xOworICAgICAgICAgIHJlc3VsdC5vcmlnaW4ueSA9IGRlZmF1bHRG cmFtZS5vcmlnaW4ueTsKKyAgICAgICAgICBpZiAobnNfdXNlclJlY3Quc2l6ZS5oZWlnaHQgIT0g MCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgcmVzdWx0Lm9yaWdpbi54ID0gbnNfdXNl clJlY3Qub3JpZ2luLng7CisgICAgICAgICAgICAgIHJlc3VsdC5zaXplLndpZHRoID0gbnNfdXNl clJlY3Quc2l6ZS53aWR0aDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICBbc2VsZiBzZXRGU1Zh bHVlOiBGVUxMU0NSRUVOX0hFSUdIVF07CiAjaWZkZWYgTlNfSU1QTF9DT0NPQQotICAgICAgbWF4 aW1pemluZ19yZXNpemUgPSBZRVM7CisgICAgICAgICAgbWF4aW1pemluZ19yZXNpemUgPSBZRVM7 CiAjZW5kaWYKLSAgICB9Ci0gIGVsc2UKLSAgICB7Ci0gICAgICAvKiByZXN0b3JlICovCi0gICAg ICByZXN1bHQgPSBuc191c2VyUmVjdC5zaXplLmhlaWdodCA/IG5zX3VzZXJSZWN0IDogcmVzdWx0 OwotICAgICAgbnNfdXNlclJlY3QgPSBOU01ha2VSZWN0ICgwLCAwLCAwLCAwKTsKKyAgICAgICAg fQorICAgICAgZWxzZSBpZiAobmV4dF9tYXhpbWl6ZWQgPT0gRlVMTFNDUkVFTl9XSURUSCkKKyAg ICAgICAgeworICAgICAgICAgIE5TVFJBQ0VfTVNHICgiRlVMTFNDUkVFTl9XSURUSCIpOworICAg ICAgICAgIG1heGltaXplZF93aWR0aCA9IHJlc3VsdC5zaXplLndpZHRoID0gZGVmYXVsdEZyYW1l LnNpemUud2lkdGg7CisgICAgICAgICAgbWF4aW1pemVkX2hlaWdodCA9IC0xOworICAgICAgICAg IHJlc3VsdC5vcmlnaW4ueCA9IGRlZmF1bHRGcmFtZS5vcmlnaW4ueDsKKyAgICAgICAgICBpZiAo bnNfdXNlclJlY3Quc2l6ZS53aWR0aCAhPSAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAg ICByZXN1bHQub3JpZ2luLnkgPSBuc191c2VyUmVjdC5vcmlnaW4ueTsKKyAgICAgICAgICAgICAg cmVzdWx0LnNpemUuaGVpZ2h0ID0gbnNfdXNlclJlY3Quc2l6ZS5oZWlnaHQ7CisgICAgICAgICAg ICB9CisgICAgICAgICAgW3NlbGYgc2V0RlNWYWx1ZTogRlVMTFNDUkVFTl9XSURUSF07CisgICAg ICAgIH0KKyAgICAgIGVsc2UgaWYgKG5leHRfbWF4aW1pemVkID09IEZVTExTQ1JFRU5fTUFYSU1J WkVECisgICAgICAgICAgICAgICB8fCAobmV4dF9tYXhpbWl6ZWQgPT0gLTEKKyAgICAgICAgICAg ICAgICAgICAmJiBhYnMgKChpbnQpKGRlZmF1bHRGcmFtZS5zaXplLndpZHRoIC0gcmVzdWx0LnNp emUud2lkdGgpKQorICAgICAgICAgICAgICAgICAgID4gRlJBTUVfQ09MVU1OX1dJRFRIIChlbWFj c2ZyYW1lKSkpCisgICAgICAgIHsKKyAgICAgICAgICBOU1RSQUNFX01TRyAoIkZVTExTQ1JFRU5f TUFYSU1JWkVEIik7CisKKyAgICAgICAgICByZXN1bHQgPSBkZWZhdWx0RnJhbWU7ICAvKiBzZWNv bmQgY2xpY2sgKi8KKyAgICAgICAgICBtYXhpbWl6ZWRfd2lkdGggPSByZXN1bHQuc2l6ZS53aWR0 aDsKKyAgICAgICAgICBtYXhpbWl6ZWRfaGVpZ2h0ID0gcmVzdWx0LnNpemUuaGVpZ2h0OworICAg ICAgICAgIFtzZWxmIHNldEZTVmFsdWU6IEZVTExTQ1JFRU5fTUFYSU1JWkVEXTsKKyNpZmRlZiBO U19JTVBMX0NPQ09BCisgICAgICAgICAgbWF4aW1pemluZ19yZXNpemUgPSBZRVM7CisjZW5kaWYK KyAgICAgICAgfQorICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgLyogcmVzdG9yZSAq LworICAgICAgICAgIE5TVFJBQ0VfTVNHICgiUmVzdG9yZSIpOworICAgICAgICAgIHJlc3VsdCA9 IG5zX3VzZXJSZWN0LnNpemUuaGVpZ2h0ID8gbnNfdXNlclJlY3QgOiByZXN1bHQ7CisgICAgICAg ICAgTlNUUkFDRV9SRUNUICgicmVzdG9yZSAoMikiLCByZXN1bHQpOworICAgICAgICAgIG5zX3Vz ZXJSZWN0ID0gTlNNYWtlUmVjdCAoMCwgMCwgMCwgMCk7CiAjaWZkZWYgTlNfSU1QTF9DT0NPQQot ICAgICAgbWF4aW1pemluZ19yZXNpemUgPSBmc19zdGF0ZSAhPSBGVUxMU0NSRUVOX05PTkU7Cisg ICAgICAgICAgbWF4aW1pemluZ19yZXNpemUgPSBmc19zdGF0ZSAhPSBGVUxMU0NSRUVOX05PTkU7 CiAjZW5kaWYKLSAgICAgIFtzZWxmIHNldEZTVmFsdWU6IEZVTExTQ1JFRU5fTk9ORV07Ci0gICAg ICBtYXhpbWl6ZWRfd2lkdGggPSBtYXhpbWl6ZWRfaGVpZ2h0ID0gLTE7CisgICAgICAgICAgW3Nl bGYgc2V0RlNWYWx1ZTogRlVMTFNDUkVFTl9OT05FXTsKKyAgICAgICAgICBtYXhpbWl6ZWRfd2lk dGggPSBtYXhpbWl6ZWRfaGVpZ2h0ID0gLTE7CisgICAgICAgIH0KICAgICB9CiAKICAgaWYgKGZz X2JlZm9yZV9mcyA9PSAtMSkgbmV4dF9tYXhpbWl6ZWQgPSAtMTsKKworICBOU1RSQUNFX1JFQ1Qg ICAoIkZpbmFsIG5zX3VzZXJSZWN0IiwgbnNfdXNlclJlY3QpOworICBOU1RSQUNFX01TRyAgICAo IkZpbmFsIG1heGltaXplZF93aWR0aDogJWQiLCBtYXhpbWl6ZWRfd2lkdGgpOworICBOU1RSQUNF X01TRyAgICAoIkZpbmFsIG1heGltaXplZF9oZWlnaHQ6ICVkIiwgbWF4aW1pemVkX2hlaWdodCk7 CisgIE5TVFJBQ0VfRlNUWVBFICgiRmluYWwgbmV4dF9tYXhpbWl6ZWQiLCBuZXh0X21heGltaXpl ZCk7CisKICAgW3NlbGYgd2luZG93V2lsbFJlc2l6ZTogc2VuZGVyIHRvU2l6ZTogcmVzdWx0LnNp emVdOworCisgIE5TVFJBQ0VfUkVUVVJOX1JFQ1QgKHJlc3VsdCk7CisKICAgcmV0dXJuIHJlc3Vs dDsKIH0KIAogCiAtICh2b2lkKXdpbmRvd0RpZERlbWluaWF0dXJpemU6IHNlbmRlcgogewotICBO U1RSQUNFICh3aW5kb3dEaWREZW1pbmlhdHVyaXplKTsKKyAgTlNUUkFDRSAoIndpbmRvd0RpZERl bWluaWF0dXJpemUiKTsKICAgaWYgKCFlbWFjc2ZyYW1lLT5vdXRwdXRfZGF0YS5ucykKICAgICBy ZXR1cm47CiAKQEAgLTY0NzMsNyArNjczNCw3IEBAIGlmIChjb2xzID4gMCAmJiByb3dzID4gMCkK IAogLSAodm9pZCl3aW5kb3dEaWRFeHBvc2U6IHNlbmRlcgogewotICBOU1RSQUNFICh3aW5kb3dE aWRFeHBvc2UpOworICBOU1RSQUNFICgid2luZG93RGlkRXhwb3NlIik7CiAgIGlmICghZW1hY3Nm cmFtZS0+b3V0cHV0X2RhdGEubnMpCiAgICAgcmV0dXJuOwogCkBAIC02NDg3LDcgKzY3NDgsNyBA QCBpZiAoY29scyA+IDAgJiYgcm93cyA+IDApCiAKIC0gKHZvaWQpd2luZG93RGlkTWluaWF0dXJp emU6IHNlbmRlcgogewotICBOU1RSQUNFICh3aW5kb3dEaWRNaW5pYXR1cml6ZSk7CisgIE5TVFJB Q0UgKCJ3aW5kb3dEaWRNaW5pYXR1cml6ZSIpOwogICBpZiAoIWVtYWNzZnJhbWUtPm91dHB1dF9k YXRhLm5zKQogICAgIHJldHVybjsKIApAQCAtNjUxMiwxMSArNjc3MywxMyBAQCBpZiAoY29scyA+ IDAgJiYgcm93cyA+IDApCiAKIC0gKHZvaWQpd2luZG93V2lsbEVudGVyRnVsbFNjcmVlbjooTlNO b3RpZmljYXRpb24gKilub3RpZmljYXRpb24KIHsKKyAgTlNUUkFDRSAoIndpbmRvd1dpbGxFbnRl ckZ1bGxTY3JlZW4iKTsKICAgZnNfYmVmb3JlX2ZzID0gZnNfc3RhdGU7CiB9CiAKIC0gKHZvaWQp d2luZG93RGlkRW50ZXJGdWxsU2NyZWVuOihOU05vdGlmaWNhdGlvbiAqKW5vdGlmaWNhdGlvbgog eworICBOU1RSQUNFICgid2luZG93RGlkRW50ZXJGdWxsU2NyZWVuIik7CiAgIFtzZWxmIHNldEZT VmFsdWU6IEZVTExTQ1JFRU5fQk9USF07CiAgIGlmICghIFtzZWxmIGZzSXNOYXRpdmVdKQogICAg IHsKQEAgLTY1NTAsMTIgKzY4MTMsMTYgQEAgaWYgKGNvbHMgPiAwICYmIHJvd3MgPiAwKQogCiAt ICh2b2lkKXdpbmRvd1dpbGxFeGl0RnVsbFNjcmVlbjooTlNOb3RpZmljYXRpb24gKilub3RpZmlj YXRpb24KIHsKKyAgTlNUUkFDRSAoIndpbmRvd1dpbGxFeGl0RnVsbFNjcmVlbiIpOworCiAgIGlm IChuZXh0X21heGltaXplZCAhPSAtMSkKICAgICBmc19iZWZvcmVfZnMgPSBuZXh0X21heGltaXpl ZDsKIH0KIAogLSAodm9pZCl3aW5kb3dEaWRFeGl0RnVsbFNjcmVlbjooTlNOb3RpZmljYXRpb24g Kilub3RpZmljYXRpb24KIHsKKyAgTlNUUkFDRSAoIndpbmRvd0RpZEV4aXRGdWxsU2NyZWVuIik7 CisKICAgW3NlbGYgc2V0RlNWYWx1ZTogZnNfYmVmb3JlX2ZzXTsKICAgZnNfYmVmb3JlX2ZzID0g LTE7CiAjaWZkZWYgSEFWRV9OQVRJVkVfRlMKQEAgLTY2MTMsMTAgKzY4ODAsMTEgQEAgaWYgKGNv bHMgPiAwICYmIHJvd3MgPiAwKQogICBOU1dpbmRvdyAqdywgKmZ3OwogICBCT09MIG9uRmlyc3RT Y3JlZW47CiAgIHN0cnVjdCBmcmFtZSAqZjsKLSAgTlNTaXplIHN6OwogICBOU1JlY3Qgciwgd3I7 CiAgIE5TQ29sb3IgKmNvbDsKIAorICBOU1RSQUNFICgidG9nZ2xlRnVsbFNjcmVlbiIpOworCiAg IGlmIChmc19pc19uYXRpdmUpCiAgICAgewogI2lmZGVmIEhBVkVfTkFUSVZFX0ZTCkBAIC02NjMz LDkgKzY5MDEsNiBAQCBpZiAoY29scyA+IDAgJiYgcm93cyA+IDApCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAoRlJBTUVfREVGQVVMVF9GQUNFIChmKSksCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBmKTsKIAotICBzei53aWR0aCA9IGZyYW1lX3Jlc2l6ZV9waXhl bHdpc2UgPyAxIDogRlJBTUVfQ09MVU1OX1dJRFRIIChmKTsKLSAgc3ouaGVpZ2h0ID0gZnJhbWVf cmVzaXplX3BpeGVsd2lzZSA/IDEgOiBGUkFNRV9MSU5FX0hFSUdIVCAoZik7Ci0KICAgaWYgKGZz X3N0YXRlICE9IEZVTExTQ1JFRU5fQk9USCkKICAgICB7CiAgICAgICBOU1NjcmVlbiAqc2NyZWVu ID0gW3cgc2NyZWVuXTsKQEAgLTY2NzUsNyArNjk0MCw2IEBAIGlmIChjb2xzID4gMCAmJiByb3dz ID4gMCkKICAgTUFDX09TX1hfVkVSU0lPTl9NQVhfQUxMT1dFRCA8PSBNQUNfT1NfWF9WRVJTSU9O XzEwXzkKICAgICAgIFtmdyB1c2VPcHRpbWl6ZWREcmF3aW5nOiBZRVNdOwogI2VuZGlmCi0gICAg ICBbZncgc2V0UmVzaXplSW5jcmVtZW50czogc3pdOwogICAgICAgW2Z3IHNldEJhY2tncm91bmRD b2xvcjogY29sXTsKICAgICAgIGlmIChbY29sIGFscGhhQ29tcG9uZW50XSAhPSAoRW1hY3NDR0Zs b2F0KSAxLjApCiAgICAgICAgIFtmdyBzZXRPcGFxdWU6IE5PXTsKQEAgLTY3MTIsNyArNjk3Niw2 IEBAIGlmIChjb2xzID4gMCAmJiByb3dzID4gMCkKICAgICAgICAgfQogCiAgICAgICBbdyBzZXRD b250ZW50VmlldzpbZncgY29udGVudFZpZXddXTsKLSAgICAgIFt3IHNldFJlc2l6ZUluY3JlbWVu dHM6IHN6XTsKICAgICAgIFt3IHNldEJhY2tncm91bmRDb2xvcjogY29sXTsKICAgICAgIGlmIChb Y29sIGFscGhhQ29tcG9uZW50XSAhPSAoRW1hY3NDR0Zsb2F0KSAxLjApCiAgICAgICAgIFt3IHNl dE9wYXF1ZTogTk9dOwpAQCAtNjczMywzOSArNjk5Niw0MiBAQCBpZiAoY29scyA+IDAgJiYgcm93 cyA+IDApCiAKIC0gKHZvaWQpaGFuZGxlRlMKIHsKKyAgTlNUUkFDRSAoImhhbmRsZUZTIik7CisK ICAgaWYgKGZzX3N0YXRlICE9IGVtYWNzZnJhbWUtPndhbnRfZnVsbHNjcmVlbikKICAgICB7Ci0g ICAgICBOU1NpemUgc3o7Ci0gICAgICBzei53aWR0aCA9IGZyYW1lX3Jlc2l6ZV9waXhlbHdpc2Ug PyAxIDogRlJBTUVfQ09MVU1OX1dJRFRIIChlbWFjc2ZyYW1lKTsKLSAgICAgIHN6LmhlaWdodCA9 IGZyYW1lX3Jlc2l6ZV9waXhlbHdpc2UgPyAxIDogRlJBTUVfTElORV9IRUlHSFQgKGVtYWNzZnJh bWUpOwotICAgICAgW1tzZWxmIHdpbmRvd10gc2V0UmVzaXplSW5jcmVtZW50czpzel07Ci0KICAg ICAgIGlmIChmc19zdGF0ZSA9PSBGVUxMU0NSRUVOX0JPVEgpCiAgICAgICAgIHsKKyAgICAgICAg ICBOU1RSQUNFX01TRyAoImZzX3N0YXRlID09IEZVTExTQ1JFRU5fQk9USCIpOwogICAgICAgICAg IFtzZWxmIHRvZ2dsZUZ1bGxTY3JlZW46c2VsZl07CiAgICAgICAgIH0KIAogICAgICAgc3dpdGNo IChlbWFjc2ZyYW1lLT53YW50X2Z1bGxzY3JlZW4pCiAgICAgICAgIHsKICAgICAgICAgY2FzZSBG VUxMU0NSRUVOX0JPVEg6CisgICAgICAgICAgTlNUUkFDRV9NU0cgKCJGVUxMU0NSRUVOX0JPVEgi KTsKICAgICAgICAgICBbc2VsZiB0b2dnbGVGdWxsU2NyZWVuOnNlbGZdOwogICAgICAgICAgIGJy ZWFrOwogICAgICAgICBjYXNlIEZVTExTQ1JFRU5fV0lEVEg6CisgICAgICAgICAgTlNUUkFDRV9N U0cgKCJGVUxMU0NSRUVOX1dJRFRIIik7CiAgICAgICAgICAgbmV4dF9tYXhpbWl6ZWQgPSBGVUxM U0NSRUVOX1dJRFRIOwogICAgICAgICAgIGlmIChmc19zdGF0ZSAhPSBGVUxMU0NSRUVOX0JPVEgp CiAgICAgICAgICAgICBbW3NlbGYgd2luZG93XSBwZXJmb3JtWm9vbTpzZWxmXTsKICAgICAgICAg ICBicmVhazsKICAgICAgICAgY2FzZSBGVUxMU0NSRUVOX0hFSUdIVDoKKyAgICAgICAgICBOU1RS QUNFX01TRyAoIkZVTExTQ1JFRU5fSEVJR0hUIik7CiAgICAgICAgICAgbmV4dF9tYXhpbWl6ZWQg PSBGVUxMU0NSRUVOX0hFSUdIVDsKICAgICAgICAgICBpZiAoZnNfc3RhdGUgIT0gRlVMTFNDUkVF Tl9CT1RIKQogICAgICAgICAgICAgW1tzZWxmIHdpbmRvd10gcGVyZm9ybVpvb206c2VsZl07CiAg ICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgRlVMTFNDUkVFTl9NQVhJTUlaRUQ6CisgICAg ICAgICAgTlNUUkFDRV9NU0cgKCJGVUxMU0NSRUVOX01BWElNSVpFRCIpOwogICAgICAgICAgIG5l eHRfbWF4aW1pemVkID0gRlVMTFNDUkVFTl9NQVhJTUlaRUQ7CiAgICAgICAgICAgaWYgKGZzX3N0 YXRlICE9IEZVTExTQ1JFRU5fQk9USCkKICAgICAgICAgICAgIFtbc2VsZiB3aW5kb3ddIHBlcmZv cm1ab29tOnNlbGZdOwogICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEZVTExTQ1JFRU5f Tk9ORToKKyAgICAgICAgICBOU1RSQUNFX01TRyAoIkZVTExTQ1JFRU5fTk9ORSIpOwogICAgICAg ICAgIGlmIChmc19zdGF0ZSAhPSBGVUxMU0NSRUVOX0JPVEgpCiAgICAgICAgICAgICB7CiAgICAg ICAgICAgICAgIG5leHRfbWF4aW1pemVkID0gRlVMTFNDUkVFTl9OT05FOwpAQCAtNjc4MSw2ICs3 MDQ3LDkgQEAgaWYgKGNvbHMgPiAwICYmIHJvd3MgPiAwKQogCiAtICh2b2lkKSBzZXRGU1ZhbHVl OiAoaW50KXZhbHVlCiB7CisgIE5TVFJBQ0UgKCJzZXRGU1ZhbHVlIik7CisgIE5TVFJBQ0VfRlNU WVBFICgidmFsdWUiLCB2YWx1ZSk7CisKICAgTGlzcF9PYmplY3QgbHZhbCA9IFFuaWw7CiAgIHN3 aXRjaCAodmFsdWUpCiAgICAgewpAQCAtNjgwMyw3ICs3MDcyLDcgQEAgaWYgKGNvbHMgPiAwICYm IHJvd3MgPiAwKQogCiAtICh2b2lkKW1vdXNlRW50ZXJlZDogKE5TRXZlbnQgKil0aGVFdmVudAog ewotICBOU1RSQUNFIChtb3VzZUVudGVyZWQpOworICBOU1RSQUNFICgibW91c2VFbnRlcmVkIik7 CiAgIGlmIChlbWFjc2ZyYW1lKQogICAgIEZSQU1FX0RJU1BMQVlfSU5GTyAoZW1hY3NmcmFtZSkt Pmxhc3RfbW91c2VfbW92ZW1lbnRfdGltZQogICAgICAgPSBFVl9USU1FU1RBTVAgKHRoZUV2ZW50 KTsKQEAgLTY4MTQsNyArNzA4Myw3IEBAIGlmIChjb2xzID4gMCAmJiByb3dzID4gMCkKIHsKICAg TW91c2VfSExJbmZvICpobGluZm8gPSBlbWFjc2ZyYW1lID8gTU9VU0VfSExfSU5GTyAoZW1hY3Nm cmFtZSkgOiBOVUxMOwogCi0gIE5TVFJBQ0UgKG1vdXNlRXhpdGVkKTsKKyAgTlNUUkFDRSAoIm1v dXNlRXhpdGVkIik7CiAKICAgaWYgKCFobGluZm8pCiAgICAgcmV0dXJuOwpAQCAtNjgzMiw3ICs3 MTAxLDcgQEAgaWYgKGNvbHMgPiAwICYmIHJvd3MgPiAwKQogCiAtIG1lbnVEb3duOiBzZW5kZXIK IHsKLSAgTlNUUkFDRSAobWVudURvd24pOworICBOU1RSQUNFICgibWVudURvd24iKTsKICAgaWYg KGNvbnRleHRfbWVudV92YWx1ZSA9PSAtMSkKICAgICBjb250ZXh0X21lbnVfdmFsdWUgPSBbc2Vu ZGVyIHRhZ107CiAgIGVsc2UKQEAgLTY4NjAsNyArNzEyOSw3IEBAIGlmIChjb2xzID4gMCAmJiBy b3dzID4gMCkKICAgTlNFdmVudCAqdGhlRXZlbnQ7CiAgIGludCBpZHggPSBbaXRlbSB0YWddICog VE9PTF9CQVJfSVRFTV9OU0xPVFM7CiAKLSAgTlNUUkFDRSAodG9vbGJhckNsaWNrZWQpOworICBO U1RSQUNFICgidG9vbGJhckNsaWNrZWQiKTsKIAogICBpZiAoIWVtYWNzX2V2ZW50KQogICAgIHJl dHVybiBzZWxmOwpAQCAtNjg5OCw3ICs3MTY3LDggQEAgaWYgKGNvbHMgPiAwICYmIHJvd3MgPiAw KQogICBpbnQgeCA9IE5TTWluWCAocmVjdCksIHkgPSBOU01pblkgKHJlY3QpOwogICBpbnQgd2lk dGggPSBOU1dpZHRoIChyZWN0KSwgaGVpZ2h0ID0gTlNIZWlnaHQgKHJlY3QpOwogCi0gIE5TVFJB Q0UgKGRyYXdSZWN0KTsKKyAgTlNUUkFDRSAoImRyYXdSZWN0Iik7CisgIE5TVFJBQ0VfUkVDVCAo ImlucHV0IiwgcmVjdCk7CiAKICAgaWYgKCFlbWFjc2ZyYW1lIHx8ICFlbWFjc2ZyYW1lLT5vdXRw dXRfZGF0YS5ucykKICAgICByZXR1cm47CkBAIC02OTI0LDcgKzcxOTQsNyBAQCBpZiAoY29scyA+ IDAgJiYgcm93cyA+IDApCiAKIC0oTlNEcmFnT3BlcmF0aW9uKSBkcmFnZ2luZ0VudGVyZWQ6IChp ZCA8TlNEcmFnZ2luZ0luZm8+KSBzZW5kZXIKIHsKLSAgTlNUUkFDRSAoZHJhZ2dpbmdFbnRlcmVk KTsKKyAgTlNUUkFDRSAoImRyYWdnaW5nRW50ZXJlZCIpOwogICByZXR1cm4gTlNEcmFnT3BlcmF0 aW9uR2VuZXJpYzsKIH0KIApAQCAtNjk0NSw3ICs3MjE1LDcgQEAgaWYgKGNvbHMgPiAwICYmIHJv d3MgPiAwKQogICBOU0RyYWdPcGVyYXRpb24gb3AgPSBbc2VuZGVyIGRyYWdnaW5nU291cmNlT3Bl cmF0aW9uTWFza107CiAgIGludCBtb2RpZmllcnMgPSAwOwogCi0gIE5TVFJBQ0UgKHBlcmZvcm1E cmFnT3BlcmF0aW9uKTsKKyAgTlNUUkFDRSAoInBlcmZvcm1EcmFnT3BlcmF0aW9uIik7CiAKICAg aWYgKCFlbWFjc19ldmVudCkKICAgICByZXR1cm4gTk87CkBAIC03MDQ1LDcgKzczMTUsNyBAQCBp ZiAoY29scyA+IDAgJiYgcm93cyA+IDApCiAtIChpZCkgdmFsaWRSZXF1ZXN0b3JGb3JTZW5kVHlw ZTogKE5TU3RyaW5nICopdHlwZVNlbnQKICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5UeXBl OiAoTlNTdHJpbmcgKil0eXBlUmV0dXJuZWQKIHsKLSAgTlNUUkFDRSAodmFsaWRSZXF1ZXN0b3JG b3JTZW5kVHlwZSk7CisgIE5TVFJBQ0UgKCJ2YWxpZFJlcXVlc3RvckZvclNlbmRUeXBlIik7CiAg IGlmICh0eXBlU2VudCAhPSBuaWwgJiYgW25zX3NlbmRfdHlwZXMgaW5kZXhPZk9iamVjdDogdHlw ZVNlbnRdICE9IE5TTm90Rm91bmQKICAgICAgICYmIHR5cGVSZXR1cm5lZCA9PSBuaWwpCiAgICAg ewpAQCAtNzEwNyw3ICs3Mzc3LDcgQEAgaWYgKGNvbHMgPiAwICYmIHJvd3MgPiAwKQogLSBzZXRN aW5pd2luZG93SW1hZ2U6IChCT09MKSBzZXRNaW5pCiB7CiAgIGlkIGltYWdlID0gW1tzZWxmIHdp bmRvd10gbWluaXdpbmRvd0ltYWdlXTsKLSAgTlNUUkFDRSAoc2V0TWluaXdpbmRvd0ltYWdlKTsK KyAgTlNUUkFDRSAoInNldE1pbml3aW5kb3dJbWFnZSIpOwogCiAgIC8qIE5PVEU6IHVuZGVyIENv Y29hIG1pbml3aW5kb3dJbWFnZSBhbHdheXMgcmV0dXJucyBuaWwsIGRvY3VtZW50YXRpb24KICAg ICAgYWJvdXQgIkFwcGxlRG9ja0ljb25FbmFibGVkIiBub3R3aXRoc3RhbmRpbmcsIGhvd2V2ZXIg dGhlIHNldCBtZXNzYWdlCkBAIC03MTMwLDYgKzc0MDAsMTEgQEAgaWYgKGNvbHMgPiAwICYmIHJv d3MgPiAwKQogICBjb2xzID0gYzsKIH0KIAorLSAoaW50KSBmdWxsc2NyZWVuU3RhdGUKK3sKKyAg cmV0dXJuIGZzX3N0YXRlOworfQorCiBAZW5kICAvKiBFbWFjc1ZpZXcgKi8KIAogCkBAIC03MTk5 LDMyICs3NDc0LDk2IEBAIGlmIChjb2xzID4gMCAmJiByb3dzID4gMCkKIH0KICNlbmRpZiAvKiBO U19JTVBMX0NPQ09BICovCiAKLS8qIElmIHdlIGhhdmUgbXVsdGlwbGUgbW9uaXRvcnMsIG9uZSBh Ym92ZSB0aGUgb3RoZXIsIHdlIGRvbid0IHdhbnQgdG8KLSAgIHJlc3RyaWN0IHRoZSBoZWlnaHQg dG8ganVzdCBvbmUgbW9uaXRvci4gIFNvIHdlIG92ZXJyaWRlIHRoaXMuICAqLworLyogQ29uc3Ry YWluIHNpemUgYW5kIHBsYWNlbWVudCBvZiBhIGZyYW1lLgorCisgICBCeSByZXR1cm5pbmcgdGhl IG9yaWdpbmFsICJmcmFtZVJlY3QiLCB0aGUgZnJhbWUgaXMgbm90CisgICBjb250cmFpbmVkLiBU aGlzIGNhbiBsZWFkIHRvIHVud2FudGVkIHNpdHVhdGlvbnMgd2hlcmUsIGZvcgorICAgZXhhbXBs ZSwgdGhlIG1lbnUgYmFyIGNvdmVycyB0aGUgZnJhbWUuCisKKyAgIFRoZSBkZWZhdWx0IGltcGxl bWVudGF0aW9uIChhY2Nlc3NlZCB1c2luZyAic3VwZXIiKSBjb25zdHJhaW5zIHRoZQorICAgZnJh bWUgdG8gdGhlIHZpc2libGUgYXJlYSBvZiBTQ1JFRU4sIG1pbnVzIHRoZSBtZW51IGJhciAoaWYK KyAgIHByZXNlbnQpIGFuZCB0aGUgRG9jay4gTm90ZSB0aGF0IGRlZmF1bHQgaW1wbGVtZW50YXRp b24gYWxzbyBjYWxscworICAgd2luZG93V2lsbFJlc2l6ZSwgd2l0aCB0aGUgZnJhbWUgaXQgdGhp bmtzIHNob3VsZCBoYXZlLiAoVGhpcyBjYW4KKyAgIG1ha2UgdGhlIGZyYW1lIGV4aXQgbWF4aW1p emVkIG1vZGUuKQorCisgICBOb3RlIHRoYXQgdGhpcyBzaG91bGQgd29yayBpbiBzaXR1YXRpb25z IHdoZXJlIG11bHRpcGxlIG1vbml0b3JzCisgICBhcmUgcHJlc2VudC4gQ29tbW9uIGNvbmZpZ3Vy YXRpb25zIGFyZSBzaWRlLWJ5LXNpZGUgbW9uaXRvcnMgYW5kIGEKKyAgIG1vbml0b3Igb24gdG9w IG9mIGFub3RoZXIgKGUuZy4gd2hlbiBhIGxhcHRvcCBpcyBwbGFjZWQgdW5kZXIgYQorICAgbGFy Z2Ugc2NyZWVuKS4gKi8KKyNpZiAxCistIChOU1JlY3QpY29uc3RyYWluRnJhbWVSZWN0OihOU1Jl Y3QpZnJhbWVSZWN0IHRvU2NyZWVuOihOU1NjcmVlbiAqKXNjcmVlbgoreworICBOU1RSQUNFICgi Y29uc3RyYWluRnJhbWVSZWN0OiIgTlNUUkFDRV9GTVRfUkVDVCAiIHRvU2NyZWVuOiIsCisgICAg ICAgICAgICAgTlNUUkFDRV9BUkdfUkVDVCAoZnJhbWVSZWN0KSk7CisKKyNpZmRlZiBOU19JTVBM X0NPQ09BCisjaWYgTUFDX09TX1hfVkVSU0lPTl9NQVhfQUxMT1dFRCA+PSBNQUNfT1NfWF9WRVJT SU9OXzEwXzkKKyAgLy8gSWYgc2VwYXJhdGUgc3BhY2VzIGlzIG9uLCBpdCBpcyBsaWtlIGVhY2gg c2NyZWVuIGlzIGluZGVwZW5kZW50LiAgVGhlcmUgaXMKKyAgLy8gbm8gc3Bhbm5pbmcgb2YgZnJh bWVzIGFjcm9zcyBzY3JlZW5zLgorICBpZiAoW05TU2NyZWVuIHNjcmVlbnNIYXZlU2VwYXJhdGVT cGFjZXNdKQorICAgIHsKKyAgICAgIE5TVFJBQ0VfTVNHICgiU2NyZWVucyBoYXZlIHNlcGFyYXRl IHNwYWNlcyIpOworICAgICAgZnJhbWVSZWN0ID0gW3N1cGVyIGNvbnN0cmFpbkZyYW1lUmVjdDpm cmFtZVJlY3QgdG9TY3JlZW46c2NyZWVuXTsKKyAgICAgIE5TVFJBQ0VfUkVUVVJOX1JFQ1QgKGZy YW1lUmVjdCk7CisgICAgICByZXR1cm4gZnJhbWVSZWN0OworICAgIH0KKyNlbmRpZgorI2VuZGlm CisKKyAgcmV0dXJuIGNvbnN0cmFpbl9mcmFtZV9yZWN0KGZyYW1lUmVjdCk7Cit9CisjZWxzZQog LSAoTlNSZWN0KWNvbnN0cmFpbkZyYW1lUmVjdDooTlNSZWN0KWZyYW1lUmVjdCB0b1NjcmVlbjoo TlNTY3JlZW4gKilzY3JlZW4KIHsKICAgLyogV2hlbiBtYWtpbmcgdGhlIGZyYW1lIHZpc2libGUg Zm9yIHRoZSBmaXJzdCB0aW1lIG9yIGlmIHRoZXJlIGlzIGp1c3QKICAgICAgb25lIHNjcmVlbiwg d2Ugd2FudCB0byBjb25zdHJhaW4uICBPdGhlciB0aW1lcyBub3QuICAqLwogICBOU0FycmF5ICpz Y3JlZW5zID0gW05TU2NyZWVuIHNjcmVlbnNdOwogICBOU1VJbnRlZ2VyIG5yX3NjcmVlbnMgPSBb c2NyZWVucyBjb3VudF0sIG5yX2VmZl9zY3JlZW5zID0gMCwgaTsKLSAgTlNUUkFDRSAoY29uc3Ry YWluRnJhbWVSZWN0KTsKLSAgTlNUUkFDRV9SRUNUICgiaW5wdXQiLCBmcmFtZVJlY3QpOworICBO U1RSQUNFICgiY29uc3RyYWluRnJhbWVSZWN0OiIgTlNUUkFDRV9GTVRfUkVDVCwKKyAgICAgICAg ICAgTlNUUkFDRV9BUkdfUkVDVCAoZnJhbWVSZWN0KSk7CiAKICAgaWYgKG5zX21lbnVfYmFyX3No b3VsZF9iZV9oaWRkZW4gKCkpCi0gICAgcmV0dXJuIGZyYW1lUmVjdDsKKyAgICB7CisgICAgICBO U1RSQUNFX1JFQ1QgKCJNZW51IGJhciBzaG91bGQgYmUgaGlkZGVuIiwgZnJhbWVSZWN0KTsKKyAg ICAgIHJldHVybiBmcmFtZVJlY3Q7CisgICAgfQogCiAgIGlmIChucl9zY3JlZW5zID09IDEpCi0g ICAgcmV0dXJuIFtzdXBlciBjb25zdHJhaW5GcmFtZVJlY3Q6ZnJhbWVSZWN0IHRvU2NyZWVuOnNj cmVlbl07CisgICAgeworICAgICAgZnJhbWVSZWN0ID0gW3N1cGVyIGNvbnN0cmFpbkZyYW1lUmVj dDpmcmFtZVJlY3QgdG9TY3JlZW46c2NyZWVuXTsKKyAgICAgIE5TVFJBQ0VfTVNHICgibnJfc2Ny ZWVucyA9PSAxIik7CisgICAgICBOU1RSQUNFX1JFVFVSTl9SRUNUIChmcmFtZVJlY3QpOworICAg ICAgcmV0dXJuIGZyYW1lUmVjdDsKKyAgICB9CiAKICNpZmRlZiBOU19JTVBMX0NPQ09BCiAjaWYg TUFDX09TX1hfVkVSU0lPTl9NQVhfQUxMT1dFRCA+PSBNQUNfT1NfWF9WRVJTSU9OXzEwXzkKICAg Ly8gSWYgc2VwYXJhdGUgc3BhY2VzIGlzIG9uLCBpdCBpcyBsaWtlIGVhY2ggc2NyZWVuIGlzIGlu ZGVwZW5kZW50LiAgVGhlcmUgaXMKICAgLy8gbm8gc3Bhbm5pbmcgb2YgZnJhbWVzIGFjcm9zcyBz Y3JlZW5zLgogICBpZiAoW05TU2NyZWVuIHNjcmVlbnNIYXZlU2VwYXJhdGVTcGFjZXNdKQotICAg IHJldHVybiBbc3VwZXIgY29uc3RyYWluRnJhbWVSZWN0OmZyYW1lUmVjdCB0b1NjcmVlbjpzY3Jl ZW5dOworICAgIHsKKyAgICAgIGZyYW1lUmVjdCA9IFtzdXBlciBjb25zdHJhaW5GcmFtZVJlY3Q6 ZnJhbWVSZWN0IHRvU2NyZWVuOnNjcmVlbl07CisgICAgICBOU1RSQUNFX01TRyAoIlNjcmVlbnMg aGF2ZSBzZXBhcmF0ZSBzcGFjZXMiKTsKKyAgICAgIE5TVFJBQ0VfUkVUVVJOX1JFQ1QgKGZyYW1l UmVjdCk7CisgICAgICByZXR1cm4gZnJhbWVSZWN0OworICAgIH0KICNlbmRpZgogI2VuZGlmCiAK KyAgLyogVE9ETzogRGVjaWRlIHdoYXQgdG8gZG8gd2l0aCB0aGlzLiBDdXJyZW50bHkgZGlzYWJs ZWQgc2luY2UgaXQKKyAgICAgY2F1c2UgbWF4aW1pemVkIHdpbmRvd3MgdG8gYmUgcmVzaXplZCB0 byBhY2NvbW9kYXRlIHRoZSBkb2NrLAorICAgICB3aGljaCBpcyBub3Qgd2hhdCB3ZSB3YW50LiAq LworI2lmIDEKKyAgLyogQ29uc3RyYWluIGEgZnJhbWUgb24gYSBzaW5nbGUgc2NyZWVuIHRvIHRo YXQgc2NyZWVuLiAqLworCisgIC8qIFRPRE86IFRoaXMgaGFzIHRoZSBlZmZlY3QgdGhhdCBhIGZy YW1lIG9uIGEgc2luZ2xlIHNjcmVlbiBpcworICAgICByZXN0cmljdGVkIGluIGhlaWdodCwgd2hl cmVhcyBhIGZyYW1lIHN0cmF0Y2hpbmcgdHdvIHNpZGUtYnkgc2lkZQorICAgICBtb25pdG9ycyBh cmUgbm90LCB3aGVuIHJlc2l6ZWQgcHJvZ3JhbW1hdGljYWxseS4gQ2xlYXJseSwgdGhpcyBpcwor ICAgICBub3QgdGhlIGRlc2lyZWQgYmVoYXZpb3VyLgorCisgICAgIEFsc28sIGlmIHRoZSBtb25p dG9ycyBhcmUgb25lIGFib3ZlIHRoZSBvdGhlciwgdGhpcyB3aWxsIHByb2JhYmx5CisgICAgIHBy ZXZlbnQgdGhlIGZyYW1lIGZyb20gc3RyZXRjaGluZyBvdmVyIHRoZW0gYm90aC4gKi8KKwogICBm b3IgKGkgPSAwOyBpIDwgbnJfc2NyZWVuczsgKytpKQogICAgIHsKICAgICAgIE5TU2NyZWVuICpz ID0gW3NjcmVlbnMgb2JqZWN0QXRJbmRleDogaV07CkBAIC03MjM2LDcgKzc1NzUsMTMgQEAgaWYg KGNvbHMgPiAwICYmIHJvd3MgPiAwKQogICAgIH0KIAogICBpZiAobnJfZWZmX3NjcmVlbnMgPT0g MSkKLSAgICByZXR1cm4gW3N1cGVyIGNvbnN0cmFpbkZyYW1lUmVjdDpmcmFtZVJlY3QgdG9TY3Jl ZW46c2NyZWVuXTsKKyAgICB7CisgICAgICBmcmFtZVJlY3QgPSBbc3VwZXIgY29uc3RyYWluRnJh bWVSZWN0OmZyYW1lUmVjdCB0b1NjcmVlbjpzY3JlZW5dOworICAgICAgTlNUUkFDRV9NU0cgKCJu cl9lZmZfc2NyZWVucyA9PSAxIik7CisgICAgICBOU1RSQUNFX1JFVFVSTl9SRUNUIChmcmFtZVJl Y3QpOworICAgICAgcmV0dXJuIGZyYW1lUmVjdDsKKyAgICB9CisjZW5kaWYKIAogICAvKiBUaGUg ZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBkb2VzIHR3byB0aGluZ3MgMSkgZW5zdXJlIHRoYXQgdGhl IHRvcAogICAgICBvZiB0aGUgcmVjdGFuZ2xlIGlzIGJlbG93IHRoZSBtZW51IGJhciAob3IgYmVs b3cgdGhlIHRvcCBvZiB0aGUKQEAgLTcyNjIsMTEgKzc2MDcsMTAzIEBAIGlmIChjb2xzID4gMCAm JiByb3dzID4gMCkKICAgICBmcmFtZVJlY3Qub3JpZ2luLnkgPSBuZXdfdG9wIC0gZnJhbWVSZWN0 LnNpemUuaGVpZ2h0OwogICB9CiAKLSAgTlNUUkFDRV9SRUNUICgib3V0cHV0IiwgZnJhbWVSZWN0 KTsKKyAgTlNUUkFDRV9SRVRVUk5fUkVDVCAoZnJhbWVSZWN0KTsKIAogICByZXR1cm4gZnJhbWVS ZWN0OwogI3VuZGVmIEZBS0VfSEVJR0hUCiB9CisjZW5kaWYKKworCistICh2b2lkKXBlcmZvcm1a b29tOihpZClzZW5kZXIKK3sKKyAgTlNUUkFDRSAoInBlcmZvcm1ab29tIik7CisKKyAgcmV0dXJu IFtzdXBlciBwZXJmb3JtWm9vbTpzZW5kZXJdOworfQorCistICh2b2lkKXpvb206KGlkKXNlbmRl cgoreworICBzdHJ1Y3QgZnJhbWUgKiBmID0gU0VMRUNURURfRlJBTUUgKCk7CisKKyAgTlNUUkFD RSAoInpvb20iKTsKKworICBuc191cGRhdGVfYXV0b19oaWRlX21lbnVfYmFyKCk7CisKKyAgLy8g QmVsb3cgYXJlIHRocmVlIHpvb20gaW1wbGVtZW50YXRpb25zLiBJbiB0aGUgZmluYWwgY29tbWl0 LCB0aGUKKyAgLy8gaWRlYSBpcyB0aGF0IHRoZSBsYXN0IHNob3VsZCBiZSBpbmNsdWRlZC4KKwor I2lmIDAKKyAgLy8gTmF0aXZlIHpvb20gZG9uZSB1c2luZyB0aGUgc3RhbmRhcmQgem9vbSBhbmlt YXRpb24uIFNpemUgb2YgdGhlCisgIC8vIHJlc3VsdGluZyBmcmFtZSByZWR1Y2VkIHRvIGFjY29t b2RhdGUgdGhlIERvY2sgYW5kLCBpZiBwcmVzZW50LAorICAvLyB0aGUgbWVudS1iYXIuCisgIFtz dXBlciB6b29tOnNlbmRlcl07CisKKyNlbHNpZiAwCisgIC8vIE5hdGl2ZSB6b29tIGRvbmUgdXNp bmcgdGhlIHN0YW5kYXJkIHpvb20gYW5pbWF0aW9uLCBwbHVzIGFuCisgIC8vIGV4cGxpY2l0IHJl c2l6ZSB0byBjb3ZlciB0aGUgZnVsbCBzY3JlZW4uCisgIFtzdXBlciB6b29tOnNlbmRlcl07CisK KyAgLy8gQWZ0ZXIgdGhlIG5hdGl2ZSB6b29tLCByZXNpemUgdGhlIHJlc3VsdGluZyBmcmFtZSB0 byBmaWxsIHRoZQorICAvLyBlbnRpcmUgc2NyZWVuLCBleGNlcHQgdGhlIG1lbnUtYmFyLgorICAv LworICAvLyBUaGlzIHdvcmtzIGZvciBhbGwgcHJhY3RpY2FsIHB1cnBvc2VzLiAoVGhlIG9ubHkg bWlub3Igb2RkaXR5IGlzCisgIC8vIHdoZW4gdHJhbnNpdGluZyBmcm9tIGZ1bGwtaGVpZ2h0IGZy YW1lIHRvIGEgbWF4aW1pemVkLCB0aGUKKyAgLy8gYW5pbWF0aW9uIHJlZHVjZXMgdGhlIGhlaWdo dCBvZiB0aGUgZnJhbWUgc2xpZ2h0eSAodG8gdGhlIDQKKyAgLy8gcGl4ZWxzIG5lZWRlZCB0byBh Y2NvbW9kYXRlIHRoZSBEb2MpIGJlZm9yZSBpdCBzbmFwcyBiYWNrIGludG8KKyAgLy8gZnVsbCBo ZWlnaHQuIFRoZSB1c2VyIHdvdWxkIG5lZWQgYSB2ZXJ5IHRyYWluZWQgZXllIHRvIHNwb3QKKyAg Ly8gdGhpcy4pCisgIE5TU2NyZWVuICogc2NyZWVuID0gW3NlbGYgc2NyZWVuXTsKKyAgaWYgKHNj cmVlbiAhPSBuaWwpCisgICAgeworICAgICAgaW50IGZzX3N0YXRlID0gWyhFbWFjc1ZpZXcgKilb c2VsZiBkZWxlZ2F0ZV0gZnVsbHNjcmVlblN0YXRlXTsKKworICAgICAgTlNUUkFDRV9GU1RZUEUg KCJmdWxsc2NyZWVuU3RhdGUiLCBmc19zdGF0ZSk7CisKKyAgICAgIE5TUmVjdCBzciA9IFtzY3Jl ZW4gZnJhbWVdOworICAgICAgTlNSZWN0IHdyID0gW3NlbGYgZnJhbWVdOworICAgICAgTlNUUkFD RV9SRUNUICgiUmVjdCBhZnRlciB6b29tIiwgd3IpOworCisgICAgICBOU1JlY3QgbmV3V3IgPSB3 cjsKKworICAgICAgaWYgKGZzX3N0YXRlID09IEZVTExTQ1JFRU5fTUFYSU1JWkVECisgICAgICAg ICAgfHwgZnNfc3RhdGUgPT0gRlVMTFNDUkVFTl9IRUlHSFQpCisgICAgICAgIHsKKyAgICAgICAg ICBuZXdXci5vcmlnaW4ueCA9IDA7CisgICAgICAgICAgbmV3V3Iuc2l6ZS5oZWlnaHQgPSBzci5z aXplLmhlaWdodCAtIG5zX21lbnVfYmFyX2hlaWdodChzY3JlZW4pOworICAgICAgICB9CisKKyAg ICAgIGlmIChmc19zdGF0ZSA9PSBGVUxMU0NSRUVOX01BWElNSVpFRAorICAgICAgICAgIHx8IGZz X3N0YXRlID09IEZVTExTQ1JFRU5fV0lEVEgpCisgICAgICAgIHsKKyAgICAgICAgICBuZXdXci5v cmlnaW4ueSA9IDA7CisgICAgICAgICAgbmV3V3Iuc2l6ZS53aWR0aCA9IHNyLnNpemUud2lkdGg7 CisgICAgICAgIH0KKworICAgICAgaWYgKG5ld1dyLnNpemUud2lkdGggICAgICE9IHdyLnNpemUu d2lkdGgKKyAgICAgICAgICB8fCBuZXdXci5zaXplLmhlaWdodCAhPSB3ci5zaXplLmhlaWdodAor ICAgICAgICAgIHx8IG5ld1dyLm9yaWdpbi54ICAgICE9IHdyLm9yaWdpbi54CisgICAgICAgICAg fHwgbmV3V3Iub3JpZ2luLnkgICAgIT0gd3Iub3JpZ2luLnkpCisgICAgICAgIHsKKyAgICAgICAg ICBOU1RSQUNFX1JFQ1QgKCJDb3JyZWN0ZWQgcmVjdCIsIG5ld1dyKTsKKyAgICAgICAgICBbc2Vs ZiBzZXRGcmFtZTogbmV3V3IgZGlzcGxheTogTk9dOworICAgICAgICB9CisgICAgfQorI2Vsc2UK KyAgLy8gTm9uLW5hdGl2ZSB6b29tIHdoaWNoIGlzIGRvbmUgaW5zdGFudGFuZW91cy4gVGhlIHJl c3VsdGluZyBmcmFtZQorICAvLyBjb3ZlcnQgdGhlIGVudGlyZSBzY3JyZW4sIGV4Y2VwdCB0aGUg bWVudS1iYXIsIGlmIHByZXNlbnQuCisgIE5TU2NyZWVuICogc2NyZWVuID0gW3NlbGYgc2NyZWVu XTsKKyAgaWYgKHNjcmVlbiAhPSBuaWwpCisgICAgeworICAgICAgTlNSZWN0IHNyID0gW3NjcmVl biBmcmFtZV07CisgICAgICBzci5zaXplLmhlaWdodCAtPSBuc19tZW51X2Jhcl9oZWlnaHQgKHNj cmVlbik7CisKKyAgICAgIHNyID0gW1tzZWxmIGRlbGVnYXRlXSB3aW5kb3dXaWxsVXNlU3RhbmRh cmRGcmFtZTpzZWxmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBk ZWZhdWx0RnJhbWU6c3JdOworICAgICAgW3NlbGYgc2V0RnJhbWU6IHNyIGRpc3BsYXk6IE5PXTsK KyAgICB9CisjZW5kaWYKK30KIAogQGVuZCAvKiBFbWFjc1dpbmRvdyAqLwogCkBAIC03MzE2LDcg Kzc3NTMsNyBAQCBpZiAoY29scyA+IDAgJiYgcm93cyA+IDApCiAKIC0gaW5pdEZyYW1lOiAoTlNS ZWN0IClyIHdpbmRvdzogKExpc3BfT2JqZWN0KW53aW4KIHsKLSAgTlNUUkFDRSAoRW1hY3NTY3Jv bGxlcl9pbml0RnJhbWUpOworICBOU1RSQUNFICgiRW1hY3NTY3JvbGxlcl9pbml0RnJhbWUiKTsK IAogICByLnNpemUud2lkdGggPSBbRW1hY3NTY3JvbGxlciBzY3JvbGxlcldpZHRoXTsKICAgW3N1 cGVyIGluaXRXaXRoRnJhbWU6IHIvKk5TTWFrZVJlY3QgKDAsIDAsIDAsIDApKi9dOwpAQCAtNzM2 Miw3ICs3Nzk5LDcgQEAgaWYgKGNvbHMgPiAwICYmIHJvd3MgPiAwKQogCiAtICh2b2lkKXNldEZy YW1lOiAoTlNSZWN0KW5ld1JlY3QKIHsKLSAgTlNUUkFDRSAoRW1hY3NTY3JvbGxlcl9zZXRGcmFt ZSk7CisgIE5TVFJBQ0UgKCJFbWFjc1Njcm9sbGVyX3NldEZyYW1lIik7CiAvKiAgYmxvY2tfaW5w dXQgKCk7ICovCiAgIHBpeGVsX2hlaWdodCA9IE5TSGVpZ2h0IChuZXdSZWN0KTsKICAgaWYgKHBp eGVsX2hlaWdodCA9PSAwKSBwaXhlbF9oZWlnaHQgPSAxOwpAQCAtNzM3NCw3ICs3ODExLDcgQEAg aWYgKGNvbHMgPiAwICYmIHJvd3MgPiAwKQogCiAtICh2b2lkKWRlYWxsb2MKIHsKLSAgTlNUUkFD RSAoRW1hY3NTY3JvbGxlcl9kZWFsbG9jKTsKKyAgTlNUUkFDRSAoIkVtYWNzU2Nyb2xsZXJfZGVh bGxvYyIpOwogICBpZiAod2luZG93KQogICAgIHdzZXRfdmVydGljYWxfc2Nyb2xsX2JhciAod2lu ZG93LCBRbmlsKTsKICAgd2luZG93ID0gMDsKQEAgLTczODQsNyArNzgyMSw3IEBAIGlmIChjb2xz ID4gMCAmJiByb3dzID4gMCkKIAogLSBjb25kZW1uCiB7Ci0gIE5TVFJBQ0UgKGNvbmRlbW4pOwor ICBOU1RSQUNFICgiY29uZGVtbiIpOwogICBjb25kZW1uZWQgPVlFUzsKICAgcmV0dXJuIHNlbGY7 CiB9CkBAIC03MzkyLDcgKzc4MjksNyBAQCBpZiAoY29scyA+IDAgJiYgcm93cyA+IDApCiAKIC0g cmVwcmlldmUKIHsKLSAgTlNUUkFDRSAocmVwcmlldmUpOworICBOU1RSQUNFICgicmVwcmlldmUi KTsKICAgY29uZGVtbmVkID1OTzsKICAgcmV0dXJuIHNlbGY7CiB9CkBAIC03NDAwLDcgKzc4Mzcs NyBAQCBpZiAoY29scyA+IDAgJiYgcm93cyA+IDApCiAKIC0oYm9vbClqdWRnZQogewotICBOU1RS QUNFIChqdWRnZSk7CisgIE5TVFJBQ0UgKCJqdWRnZSIpOwogICBib29sIHJldCA9IGNvbmRlbW5l ZDsKICAgaWYgKGNvbmRlbW5lZCkKICAgICB7CkBAIC03NDI0LDcgKzc4NjEsNyBAQCBpZiAoY29s cyA+IDAgJiYgcm93cyA+IDApCiAtICh2b2lkKXJlc2V0Q3Vyc29yUmVjdHMKIHsKICAgTlNSZWN0 IHZpc2libGUgPSBbc2VsZiB2aXNpYmxlUmVjdF07Ci0gIE5TVFJBQ0UgKHJlc2V0Q3Vyc29yUmVj dHMpOworICBOU1RSQUNFICgicmVzZXRDdXJzb3JSZWN0cyIpOwogCiAgIGlmICghTlNJc0VtcHR5 UmVjdCAodmlzaWJsZSkpCiAgICAgW3NlbGYgYWRkQ3Vyc29yUmVjdDogdmlzaWJsZSBjdXJzb3I6 IFtOU0N1cnNvciBhcnJvd0N1cnNvcl1dOwpAQCAtNzQ0Miw3ICs3ODc5LDcgQEAgaWYgKGNvbHMg PiAwICYmIHJvd3MgPiAwKQogCiAtIHNldFBvc2l0aW9uOiAoaW50KXBvc2l0aW9uIHBvcnRpb246 IChpbnQpcG9ydGlvbiB3aG9sZTogKGludCl3aG9sZQogewotICBOU1RSQUNFIChzZXRQb3NpdGlv bik7CisgIE5TVFJBQ0UgKCJzZXRQb3NpdGlvbiIpOwogCiAgIGVtX3Bvc2l0aW9uID0gcG9zaXRp b247CiAgIGVtX3BvcnRpb24gPSBwb3J0aW9uOwpAQCAtNzU0Nyw3ICs3OTg0LDcgQEAgaWYgKGNv bHMgPiAwICYmIHJvd3MgPiAwKQogICBDR0Zsb2F0IGluYyA9IDAuMCwgbG9jLCBrbG9jLCBwb3M7 CiAgIGludCBlZGdlID0gMDsKIAotICBOU1RSQUNFIChFbWFjc1Njcm9sbGVyX21vdXNlRG93bik7 CisgIE5TVFJBQ0UgKCJFbWFjc1Njcm9sbGVyX21vdXNlRG93biIpOwogCiAgIHN3aXRjaCAocGFy dCkKICAgICB7CkBAIC03NjQ0LDcgKzgwODEsNyBAQCBpZiAoY29scyA+IDAgJiYgcm93cyA+IDAp CiAgICAgTlNSZWN0IHNyOwogICAgIGRvdWJsZSBsb2MsIHBvczsKIAotICAgIE5TVFJBQ0UgKEVt YWNzU2Nyb2xsZXJfbW91c2VEcmFnZ2VkKTsKKyAgICBOU1RSQUNFICgiRW1hY3NTY3JvbGxlcl9t b3VzZURyYWdnZWQiKTsKIAogICAgICAgc3IgPSBbc2VsZiBjb252ZXJ0UmVjdDogW3NlbGYgcmVj dEZvclBhcnQ6IE5TU2Nyb2xsZXJLbm9iU2xvdF0KICAgICAgICAgICAgICAgICAgICAgICB0b1Zp ZXc6IG5pbF07CkBAIC03ODEzLDcgKzgyNTAsNyBAQCBuc194bGZkX3RvX2ZvbnRuYW1lIChjb25z dCBjaGFyICp4bGZkKQogdm9pZAogc3ltc19vZl9uc3Rlcm0gKHZvaWQpCiB7Ci0gIE5TVFJBQ0Ug KHN5bXNfb2ZfbnN0ZXJtKTsKKyAgTlNUUkFDRSAoInN5bXNfb2ZfbnN0ZXJtIik7CiAKICAgbnNf YW50aWFsaWFzX3RocmVzaG9sZCA9IDEwLjA7CiAK --001a11429d4c037d6705228c7c84 Content-Type: application/octet-stream; name="anders-frame-test.el" Content-Disposition: attachment; filename="anders-frame-test.el" Content-Transfer-Encoding: base64 X-Attachment-Id: f_ifzmspvk1 Ozs7IGZyYW1lLXRlc3QuZWwgLS0tIFRlc3QgRW1hY3MgcmVzaXplIGFuZCB6b29tIGZlYXR1cmVz LgoKOzsgQ29weXJpZ2h0IChDKSAyMDE1ICBBbmRlcnMgTGluZGdyZW4KCjs7IEF1dGhvcjogQW5k ZXJzIExpbmRncmVuIDxhbmRlcnNAbWFjcHJvLmxhbj4KOzsgS2V5d29yZHM6IGZyYW1lcwoKOzsg VGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu ZC9vciBtb2RpZnkKOzsgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJs aWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKOzsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv biwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKOzsgKGF0IHlvdXIgb3B0aW9u KSBhbnkgbGF0ZXIgdmVyc2lvbi4KCjs7IFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0 aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAo7OyBidXQgV0lUSE9VVCBBTlkgV0FSUkFO VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgo7OyBNRVJDSEFOVEFCSUxJ VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCjs7IEdOVSBH ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCgo7OyBZb3Ugc2hvdWxkIGhh dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQo7OyBh bG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcv bGljZW5zZXMvPi4KCjs7OyBDb21tZW50YXJ5OgoKOzsgVGVzdHMgZm9yIEVtYWNzIHJlc2l6ZSBh bmQgem9vbSBmZWF0dXJlcy4KCjs7OyBDb2RlOgoKKHJlcXVpcmUgJ2VydCkKCihkZWZ1biBmcmFt ZS10ZXN0LWRpc3BsYXktbW9uaXRvci1yZWN0ICgmb3B0aW9uYWwgZnJhbWUpCiAgIlJldHVybiAo WCBZIFdJRFRIIEhFSUdIVCkgb2YgbW9uaXRvciBob3N0aW5nIEZSQU1FLgoKWCBhbmQgWSBhcmUg cmVsYXRpdmUgdG8gdGhlIHRvcCBsZWZ0IGNvcm5lci4iCiAgKGNkciAoYXNzcSAnZ2VvbWV0cnkg KGZyYW1lLW1vbml0b3ItYXR0cmlidXRlcyBmcmFtZSkpKSkKCgooZGVmdW4gZnJhbWUtdGVzdC1j YWxjdWxhdGUtcG9zaXRpb24gKHZhbHVlIHdpZHRoLW9yLWhlaWdodCkKICAiQ29udmVydCBmcm9t IGZyYW1lIHBhcmFtZXRlciB2YWx1ZXMgdG8gcmVhbCBjb29yZGluYXRlcy4KCklmIFZBTFVFIGlz IGEgbm9uLW5lZ2F0aXZlIGludGVnZXIsIGl0IGlzIHJlbGF0aXZlIHRvIHRoZSBuZWFyCmJvcmRl ciBhbmQgaXMgcmV0dXJuZWQuCgpJZiBWQUxVRSBpcyBhIG5lZ2F0aXZlIGludGVnZXIsIGl0IGlz IGNvbnNpZGVyZWQgcmVsYXRpdmUgZnJvbQp0aGUgZmFyIGJvcmRlciBhbmQgdGhlIGFic29sdXRl IHZhbHVlIGlzIHN1YnRyYWN0ZWQgZnJvbSBXSURUSC1PUi1IRUlHSFQuCgpJZiBWQUxVRSBpcyAo KyBSRUwpLCBpdCBpcyBjb25zaWRlcmVkIHJlbGF0aXZlIHRvIHRoZSBuZWFyCmJvcmRlciwgUkVM IGlzIHJldHVybmVkLgoKSWYgVkFMVUUgaXMgKC0gUkVMKSwgaXQgaXMgY29uc2lkZXJlZCByZWxh dGl2ZSB0byB0aGUgZmFyIGJvcmRlciwKV0lEVEgtT1ItSEVJR0hUIG1pbnVzIFJFTCBpcyByZXR1 cm5lZC4iCiAgKHVubGVzcyAoY29uc3AgdmFsdWUpCiAgICAoaWYgKDwgdmFsdWUgMCkKICAgICAg ICAoc2V0cSB2YWx1ZSAobGlzdCAnLSAoLSB2YWx1ZSkpKQogICAgICAoc2V0cSB2YWx1ZSAobGlz dCAnKyB2YWx1ZSkpKSkKICAoY29uZCAoKGVxIChjYXIgdmFsdWUpICcrKQogICAgICAgICAobnRo IDEgdmFsdWUpKQogICAgICAgICgoZXEgKGNhciB2YWx1ZSkgJy0pCiAgICAgICAgICgtIHdpZHRo LW9yLWhlaWdodCAobnRoIDEgdmFsdWUpKSkKICAgICAgICAodAogICAgICAgICAoZXJyb3IgInVu ZXhwZWN0ZWQgcG9zaXRpb246ICVzIiB2YWx1ZSkpKSkKCgooZGVmdW4gZnJhbWUtdGVzdC1mcmFt ZS1yZWN0ICgmb3B0aW9uYWwgZnJhbWUpCiAgIlJldHVybiB0aGUgZ2VvbWV0cnksIChYIFkgV0lE VEggSEVJR0hUKSwgb2YgRlJBTUUuIgogICh1bmxlc3MgZnJhbWUKICAgIChzZXRxIGZyYW1lIChz ZWxlY3RlZC1mcmFtZSkpKQogIChsZXQgKChnZW9tZXRyeSAoZnJhbWUtdGVzdC1kaXNwbGF5LW1v bml0b3ItcmVjdCBmcmFtZSkpKQogICAgKGxpc3QKICAgICAoZnJhbWUtdGVzdC1jYWxjdWxhdGUt cG9zaXRpb24KICAgICAgKGZyYW1lLXBhcmFtZXRlciBmcmFtZSAnbGVmdCkgKG50aCAyIGdlb21l dHJ5KSkKICAgICAoZnJhbWUtdGVzdC1jYWxjdWxhdGUtcG9zaXRpb24KICAgICAgKGZyYW1lLXBh cmFtZXRlciBmcmFtZSAndG9wKSAobnRoIDMgZ2VvbWV0cnkpKQogICAgIChmcmFtZS1waXhlbC13 aWR0aCkKICAgICAoZnJhbWUtcGl4ZWwtaGVpZ2h0KSkpKQoKCihkZWZ1biBmcmFtZS10ZXN0LXNl dC1udGggKGxpc3QgbiB2YWx1ZSkKICAiUmV0dXJuIGEgY29weSBvZiBMSVNUIHdoZXJlIHRoZSBO OnRoIGVsZW1lbnQgaXMgVkFMVUUuIgogIChsZXQgKChuZXctbGlzdCAoY29weS10cmVlIGxpc3Qp KSkKICAgIChzZXRjYXIgKG50aGNkciBuIG5ldy1saXN0KSB2YWx1ZSkKICAgIG5ldy1saXN0KSkK CgooZGVmdW4gZnJhbWUtdGVzdC1zZXQtZ2VvbWV0cnkteHBvcy13aWR0aCAoeCB3aWR0aCBnZW9t ZXRyeSkKICAiUmV0dXJuIGEgY29weSBvZiBHRU9NRVRSWSB3aXRoIG5ldyBYIGFuZCBXSURUSCB2 YWx1ZXMuIgogIChmcmFtZS10ZXN0LXNldC1udGgKICAgKGZyYW1lLXRlc3Qtc2V0LW50aCBnZW9t ZXRyeSAyIHdpZHRoKQogICAwIHgpKQoKCihkZWZ1biBmcmFtZS10ZXN0LXNldC1nZW9tZXRyeS15 cG9zLWhlaWdodCAoeSBoZWlnaHQgZ2VvbWV0cnkpCiAgIlJldHVybiBhIGNvcHkgb2YgR0VPTUVU Ulkgd2l0aCBuZXcgWSBhbmQgSEVJR0hUIHZhbHVlcy4iCiAgKGZyYW1lLXRlc3Qtc2V0LW50aAog ICAoZnJhbWUtdGVzdC1zZXQtbnRoIGdlb21ldHJ5IDMgaGVpZ2h0KQogICAxIHkpKQoKKGRlZnVu IGZyYW1lLXRlc3QtZXh0cmEtaGVpZ2h0ICgmb3B0aW9uYWwgZnJhbWUpCiAgIk51bWJlciBvZiBl eHRyYSBwaXhlbHMgb24gdGhlIHRvcCBhbmQgYm90dG9uIG9mIEZSQU1FLiIKICAoaWYgKGZib3Vu ZHAgJ2ZyYW1lLWVkZ2VzKQogICAgICAobGV0ICgob3V0ZXIgKGZyYW1lLWVkZ2VzIGZyYW1lICdv dXRlci1lZGdlcykpCiAgICAgICAgICAgIChpbm5lciAoZnJhbWUtZWRnZXMgZnJhbWUgJ2lubmVy LWVkZ2VzKSkpCiAgICAgICAgKCsgKC0gKG50aCAxIGlubmVyKQogICAgICAgICAgICAgIChudGgg MSBvdXRlcikpCiAgICAgICAgICAgKC0gKG50aCAyIGlubmVyKQogICAgICAgICAgICAgIChudGgg MiBvdXRlcikpKSkpKQoKKGRlZnVuIGZyYW1lLXRlc3QtbWVudS1iYXItaGVpZ2h0ICgmb3B0aW9u YWwgZnJhbWUpCiAgIlRoZSBoZWlnaHQgb2YgdGhlIG1lbnUgYmFyLCBpZiBwcmVzZW50LiIKICAo bnRoIDEgKGNkciAoYXNzcSAnd29ya2FyZWEgKGZyYW1lLW1vbml0b3ItYXR0cmlidXRlcyBmcmFt ZSkpKSkpCgoKOzsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQo7OyBUZXN0IGNhc2VzCjs7CgooZXJ0LWRlZnRlc3QgZnJh bWUtdGVzdC1mdWxsc2NyZWVuLXByb3BlcnR5ICgpCiAgIlRlc3QgZnJhbWUgZnVsbHNjcmVlbiBw cm9wZXJ0aWVzLiIKICAoc2V0LWZyYW1lLXBvc2l0aW9uIChzZWxlY3RlZC1mcmFtZSkgMTAwIDEw MCkKICAoc2V0LWZyYW1lLXNpemUgKHNlbGVjdGVkLWZyYW1lKSA4MCA0MCkKICAobGV0ICgodXNl ci1yZWN0IChmcmFtZS10ZXN0LWZyYW1lLXJlY3QpKQogICAgICAgIChtb25pdG9yLXJlY3QgKGZy YW1lLXRlc3QtZGlzcGxheS1tb25pdG9yLXJlY3QpKSkKICAgIChzZXQtZnJhbWUtcGFyYW1ldGVy IChzZWxlY3RlZC1mcmFtZSkgJ2Z1bGxzY3JlZW4gbmlsKQogICAgKHNob3VsZCAoZXF1YWwgdXNl ci1yZWN0IChmcmFtZS10ZXN0LWZyYW1lLXJlY3QpKSkKCiAgICA7OyAtLS0tLS0tLS0tCiAgICA7 OyBGdWxsIHdpZHRoCiAgICAoc2V0LWZyYW1lLXBhcmFtZXRlciAoc2VsZWN0ZWQtZnJhbWUpICdm dWxsc2NyZWVuICdmdWxsd2lkdGgpCiAgICAoc2l0LWZvciAwKQogICAgKHNob3VsZCAoZXF1YWwg KGZyYW1lLXRlc3Qtc2V0LWdlb21ldHJ5LXhwb3Mtd2lkdGgKCQkgICAgMCAobnRoIDIgbW9uaXRv ci1yZWN0KSB1c2VyLXJlY3QpCgkJICAgKGZyYW1lLXRlc3QtZnJhbWUtcmVjdCkpKQoKICAgIChz ZXQtZnJhbWUtcGFyYW1ldGVyIChzZWxlY3RlZC1mcmFtZSkgJ2Z1bGxzY3JlZW4gbmlsKQogICAg KHNpdC1mb3IgMCkKICAgIChzaG91bGQgKGVxdWFsIHVzZXItcmVjdAoJCSAgIChmcmFtZS10ZXN0 LWZyYW1lLXJlY3QpKSkKCiAgICA7OyAtLS0tLS0tLS0tCiAgICA7OyBGdWxsIGhlaWdodAogICAg KHNpdC1mb3IgMCkKICAgIChzZXQtZnJhbWUtcGFyYW1ldGVyIChzZWxlY3RlZC1mcmFtZSkgJ2Z1 bGxzY3JlZW4gJ2Z1bGxoZWlnaHQpCiAgICAoc2l0LWZvciAwKQogICAgKGxldCAoKG1lbnUtYmFy LWhlaWdodCAoZnJhbWUtdGVzdC1tZW51LWJhci1oZWlnaHQpKSkKICAgICAgKHNob3VsZCAoZXF1 YWwgKGZyYW1lLXRlc3Qtc2V0LWdlb21ldHJ5LXlwb3MtaGVpZ2h0CgkJICAgICAgbWVudS1iYXIt aGVpZ2h0CgkJICAgICAgKC0gKG50aCAzIG1vbml0b3ItcmVjdCkKCQkJIG1lbnUtYmFyLWhlaWdo dAoJCQkgKGZyYW1lLXRlc3QtZXh0cmEtaGVpZ2h0KSkKCQkgICAgICB1c2VyLXJlY3QpCgkJICAg ICAoZnJhbWUtdGVzdC1mcmFtZS1yZWN0KSkpKQoKICAgIChzaXQtZm9yIDApCiAgICAoc2V0LWZy YW1lLXBhcmFtZXRlciAoc2VsZWN0ZWQtZnJhbWUpICdmdWxsc2NyZWVuIG5pbCkKICAgIChzaXQt Zm9yIDApCiAgICAoc2hvdWxkIChlcXVhbCB1c2VyLXJlY3QgKGZyYW1lLXRlc3QtZnJhbWUtcmVj dCkpKQoKICAgIDs7IC0tLS0tLS0tLS0KICAgIDs7IE1heGltaXplZAogICAgKHNldC1mcmFtZS1w YXJhbWV0ZXIgKHNlbGVjdGVkLWZyYW1lKSAnZnVsbHNjcmVlbiAnbWF4aW1pemVkKQogICAgKHNp dC1mb3IgMCkKICAgIChsZXQgKChtZW51LWJhci1oZWlnaHQgKGZyYW1lLXRlc3QtbWVudS1iYXIt aGVpZ2h0KSkpCiAgICAgIChzaG91bGQgKGVxdWFsIChsaXN0IDAgbWVudS1iYXItaGVpZ2h0CgkJ CSAgIChudGggMiBtb25pdG9yLXJlY3QpCgkJCSAgICgtIChudGggMyBtb25pdG9yLXJlY3QpCgkJ CSAgICAgIG1lbnUtYmFyLWhlaWdodAoJCQkgICAgICAoZnJhbWUtdGVzdC1leHRyYS1oZWlnaHQp KSkKCQkgICAgIChmcmFtZS10ZXN0LWZyYW1lLXJlY3QpKSkpCgogICAgKHNpdC1mb3IgMCkKICAg IChzZXQtZnJhbWUtcGFyYW1ldGVyIChzZWxlY3RlZC1mcmFtZSkgJ2Z1bGxzY3JlZW4gbmlsKQog ICAgKHNpdC1mb3IgMCkKICAgIChzaG91bGQgKGVxdWFsIHVzZXItcmVjdCAoZnJhbWUtdGVzdC1m cmFtZS1yZWN0KSkpCgogICAgOzsgLS0tLS0tLS0tLQogICAgOzsgVXNlciAtPiBGdWxsd2lkdGgg LT4gRnVsbGhpZ2h0IC0+IFVzZXIKICAgIChzZXQtZnJhbWUtcGFyYW1ldGVyIChzZWxlY3RlZC1m cmFtZSkgJ2Z1bGxzY3JlZW4gJ2Z1bGx3aWR0aCkKICAgIChzaXQtZm9yIDAuMSkKICAgIChzZXQt ZnJhbWUtcGFyYW1ldGVyIChzZWxlY3RlZC1mcmFtZSkgJ2Z1bGxzY3JlZW4gJ2Z1bGxoZWlnaHQp CiAgICAoc2l0LWZvciAwLjEpCiAgICAoc2V0LWZyYW1lLXBhcmFtZXRlciAoc2VsZWN0ZWQtZnJh bWUpICdmdWxsc2NyZWVuIG5pbCkKICAgIChzaXQtZm9yIDAuMSkKICAgIChzaG91bGQgKGVxdWFs IHVzZXItcmVjdCAoZnJhbWUtdGVzdC1mcmFtZS1yZWN0KSkpCiAgICApKQoKKGVydC1kZWZ0ZXN0 IGZyYW1lLXRlc3QtbnMtYXV0by1oaWRlLW1lbnUtYmFyICgpCiAgIlRlc3QgZnJhbWUgTmV4dFN0 ZXAtc3BlY2lmaWMgZmVhdHVyZXMsIG5vLW9wIG90aGVyd2lzZS4iCiAgKHdoZW4gKGJvdW5kcCAn bnMtYXV0by1oaWRlLW1lbnUtYmFyKQogICAgKHNldC1mcmFtZS1wb3NpdGlvbiAoc2VsZWN0ZWQt ZnJhbWUpIDEwMCAxMDApCiAgICAoc2V0LWZyYW1lLXNpemUgKHNlbGVjdGVkLWZyYW1lKSA4MCA0 MCkKICAgIChsZXQgKCh1c2VyLXJlY3QgKGZyYW1lLXRlc3QtZnJhbWUtcmVjdCkpKQogICAgICAo bGV0ICgobWVudS1iYXItaGVpZ2h0IChmcmFtZS10ZXN0LW1lbnUtYmFyLWhlaWdodCkpKQogICAg ICAgIChzZXRxIG5zLWF1dG8taGlkZS1tZW51LWJhciB0KQogICAgICAgIChzZXQtZnJhbWUtcG9z aXRpb24gKHNlbGVjdGVkLWZyYW1lKSAxMDAgLTUwKQogICAgICAgIChzaXQtZm9yIDApCiAgICAg ICAgKHNob3VsZCAoZXF1YWwgKGZyYW1lLXRlc3Qtc2V0LW50aCB1c2VyLXJlY3QgMSAtNTApCiAg ICAgICAgICAgICAgICAgICAgICAgKGZyYW1lLXRlc3QtZnJhbWUtcmVjdCkpKQogICAgICAgIChz ZXRxIG5zLWF1dG8taGlkZS1tZW51LWJhciBuaWwpCiAgICAgICAgKHNpdC1mb3IgMCkKICAgICAg ICAoc2hvdWxkIChlcXVhbCAoZnJhbWUtdGVzdC1zZXQtbnRoIHVzZXItcmVjdCAxIG1lbnUtYmFy LWhlaWdodCkKICAgICAgICAgICAgICAgICAgICAgICAoZnJhbWUtdGVzdC1mcmFtZS1yZWN0KSkp KSkpKQoKCjs7IFRPRE86Cjs7Cjs7ICogV2hlbiBmcmFtZS1yZXNpemUtcGl4ZWx3aXNlIGlzIG5p bDoKOzsKOzsgKiogRHJhZ2dpbnMgaW4gYSBjb3JuZXIgc2hvdWxkIHNuYXAgd2luZG93IHNpemUg dG8gdGV4dCBncmlkLgo7Owo7OyAqKiBEcmFnZ2luZyBhIGJvcmRlciBzaG91bGQgc25hcCB0aGF0 IGF4aXMsIG5vdCB0aGUgb3RoZXIuCjs7Cjs7ICogWm9vbWluZywgYm90aCB3aXRoIHRvZ2dsZS1m cmFtZS1tYXhpbWl6ZWQgYW5kIGJ5IEFMVC1jbGlja2luZyB0aGUgZ3JlZW4gYnV0dG9uLgoKKHBy b3ZpZGUgJ2ZyYW1lLXRlc3QpCgo7OzsgZnJhbWUtdGVzdC5lbCBlbmRzIGhlcmUK --001a11429d4c037d6705228c7c84 Content-Type: text/plain; charset=US-ASCII; name="emacs-commit-messages.txt" Content-Disposition: attachment; filename="emacs-commit-messages.txt" Content-Transfer-Encoding: base64 X-Attachment-Id: f_ifzmt8tl2 ICAgICAgICBGdWxsLWhlaWdodCwgZnVsbC13aWR0aCwgYW5kIG1heGltaXplZCB3aW5kb3dzIG5v dyBjb3ZlciB0aGUKICAgICAgICBlbnRpcmUgc2NyZWVuIChleGNlcHQgdGhlIG1lbnUgYmFyKSwg aW5jbHVkaW5nIHRoZSBwYXJ0IHdoZXJlIHRoZQogICAgICAgIHN5c3RlbSBkb2NrIGlzIHBsYWNl ZC4gVGhlIHN5c3RlbSB6b29tIGFuaW1hdGlvbiBpcyBubyBsb25nZXIKICAgICAgICB1c2VkLgoK ICAgICAgICBNYWRlIE5vbk1heGltaXplZC0+RnVsbFdpZHRoLT5GdWxsSGVpZ2h0LT5Ob25NYXhp bWl6ZWQgcmVzdG9yZSB0aGUKICAgICAgICBvcmlnaW5hbCBzaXplLgoKICAgICAgICAqIG5zdGVy bS5tIChuc19tZW51X2Jhcl9oZWlnaHQpOiBOZXcgZnVuY3Rpb24sIHJldHVybiBoZWlnaHQgb2YK ICAgICAgICB0aGUgbWVudSBiYXIsIG9yIDAgd2hlbiBpdCdzIGhpZGRlbi4KICAgICAgICAqIG5z dGVybS5tIChjb25zdHJhaW5fZnJhbWVfcmVjdCk6IE5ldyBmdW5jdGlvbiBmb3IgY29uc3RyYWlu aW5nIGEKICAgICAgICBmcmFtZS4KICAgICAgICAqIG5zdGVybS5tIChuc19jb25zdHJhaW5fYWxs X2ZyYW1lcyk6IFNldCBmcmFtZSBzaXplIGV4cGxpY2l0bHkKICAgICAgICByYXRoZXIgdGhhbiBy ZWx5aW5nIG9uIHRoZSBzeXN0ZW0gZG9pbmcgaXQgZm9yIHVzIGJ5IHdyaXRpbmcgYmFjawogICAg ICAgIHRoZSBjdXJyZW50IGZyYW1lIHNpemUuCiAgICAgICAgKiBuc3Rlcm0ubSAod2luZG93V2ls bFVzZVN0YW5kYXJkRnJhbWUpOiBSZWdpc3RlciBub24tbWF4aW1pemVkCiAgICAgICAgd2lkdGgg b3IgaGVpZ2h0IGFzIG5ldyB1c2VyIHNpemUuIFdoZW4gZW50ZXJpbmcgZnVsbCB3aWR0aCBvcgog ICAgICAgIGhlaWdodCwgdGhlIG90aGVyIHNpemUgY29tcG9uZW50IGlzIHRha2VuIGZyb20gdGhl IHVzZXIgc2l6ZS4KICAgICAgICAqIG5zdGVybS5tIChmdWxsc2NyZWVuU3RhdGUpOiBOZXcgbWV0 aG9kIGZvciBhY2Nlc3NpbmcgdGhlCiAgICAgICAgZnVsbHNjcmVlbiBzdGF0ZS4KICAgICAgICAq IG5zdGVybS5tIChjb25zdHJhaW5GcmFtZVJlY3QpOiBSZXN0cmljdCBmcmFtZSB0byBiZSBwbGFj ZWQgdW5kZXIKICAgICAgICB0aGUgbWVudSBiYXIsIGlmIHByZXNlbnQuIFRoZSBvbGQgdmVyc2lv biwgc29tZXRpbWVzLCByZXN0cmljdGVkCiAgICAgICAgdGhlIGhlaWdodCBvZiBhIGZyYW1lIHRv IHRoZSBzY3JlZW4sIHRoaXMgdmVyc2lvbiBuZXZlciBkb2VzIHRoaXMuCiAgICAgICAgKiBuc3Rl cm0ubSAoem9vbSk6IFBlcmZvcm0gem9vbSBieSBzZXR0aW5nIHRoZSBmcmFtZSB0byB0aGUgZnVs bAogICAgICAgIHNpemUgb2YgdGhlIHNjcmVlbiAobWludXMgdGhlIG1lbnUgYmFyKS4gVGhlIGRl ZmF1bHQgc3lzdGVtCiAgICAgICAgZnVuY3Rpb24sIHdpdGggdGhlIHpvb20gYW5pbWF0aW9uLCBp cyBubyBsb25nZXIgdXNlZCwgYXMgdGhlIGZpbmFsCiAgICAgICAgZnJhbWUgc2l6ZSBkb2Vzbid0 IGNvdmVyIHRoZSBlbnRpcmUgc2NyZWVuLgoKCgogICAgICAgIFJld29yayBob3cgdG8gY29uc3Ry YWluIHJlc2l6aW5nIHRvIHRoZSBjaGFyYWN0ZXIgZ3JpZC4gVGhlIG9sZAogICAgICAgIHN5c3Rl bSB1c2VkICJyZXNpemVJbmNyZW1lbnRzIiBpbiBOU1dpbmRvd3MuIEhvd2V2ZXIsIG9uY2UgYSBm cmFtZQogICAgICAgIHdhcyByZXNpemVkIHNvIHRoYXQgaXQgd2FzIG5vdCBhbGlnbmVkIHRvIHRo ZSB0ZXh0IGdyaWQsIGl0CiAgICAgICAgcmVtYWluZWQgdW5hbGlnbmVkIGV2ZW4gYWZ0ZXIgYSBy ZXNpemUuIEluIGFkZGl0aW9uLCBpdCBjb25mbGljdGVkCiAgICAgICAgd2hlbiByZXNpemluZyBh IGZ1bGxoZWlnaHQgd2luZG93LgoKICAgICAgICAqIG5zdGVybS5tICh3aW5kb3dXaWxsUmVzaXpl KTogUmVzdHJpY3QgZnJhbWUgc2l6ZSB0byB0ZXh0IGdyaWQsCiAgICAgICAgdW5sZXNzIHdoZW4g cGl4ZWx3aXNlIGZyYW1lIHJlc2l6aW5nIGlzIGVuYWJsZWQuCiAgICAgICAgKiBuc3Rlcm0ubSAo dXBkYXRlRnJhbWVTaXplLCBpbml0RnJhbWVGcm9tRW1hY3MpCiAgICAgICAgKHRvZ2dsZUZ1bGxT Y3JlZW4sIGhhbmRsZUZTKTogRG9uJ3Qgc2V0IHJlc2l6ZUluY3JlbWVudHMuCgoKICAgICAgICBS ZWRlc2lnbiB0aGUgTlMgdHJhY2Ugc3lzdGVtLiBUaGUgY2FsbCBzdHJ1Y3R1cmUgaXMgcmVwcmVz ZW50ZWQKICAgICAgICB1c2luZyBpbmRlbnRhdGlvbnMgYW5kIHZlcnRpY2FsIGxpbmVzLiBUaGUg TlNUUkFDRSBtYWNybyBhY2NlcHRzCiAgICAgICAgcHJpbnRmLXN0eWxlIGFyZ3VtZW50cy4gTmV3 IG1hY3JvcyBmb3IgcHJpbnRpbmcgdmFyaW91cwogICAgICAgIGluZm9ybWF0aW9uLgoKICAgICAg ICAqIG5zdGVybS5oIChOU1RSQUNFX0VOQUJMRUQpOiBNYWNybyB0byBlbmFibGUgdHJhY2Ugc3lz dGVtLgogICAgICAgICogbnN0ZXJtLmggKE5TVFJBQ0UsIE5TVFJBQ0VfV0hFTiwgTlNUUkFDRV9V TkxFU1MpOiBNYWNyb3MgdG8KICAgICAgICBzdGFydCBhIG5ldyBibG9jayAodHlwaWNhbGx5IGEg ZnVuY3Rpb24pLCBhY2NlcHQgcHJpbnRmLXN0eWxlCiAgICAgICAgYXJndW1lbnRzLgogICAgICAg ICogbnN0ZXJtLmggKE5TVFJBQ0VfTVNHKTogTWFjcm8gZm9yIGV4dHJhIGluZm9ybWF0aW9uLCBh Y2NlcHRzCiAgICAgICAgcHJpbnRmLXN0eWxlIGFyZ3VtZW50cy4KICAgICAgICAqIG5zdGVybS5o IChOU1RSQUNFX3doYXQpOiBNYWNyb3MgZm9yIHByaW50aW5nIHZhcmlvdXMgdHlwZXMuCiAgICAg ICAgKiBuc3Rlcm0uaCAoTlNUUkFDRV9GTVRfd2hhdCk6IE1hY3JvIHdpdGggcHJpbnRmIGZvcm1h dCBzdHJpbmcKICAgICAgICBzbmlwcGV0cy4KICAgICAgICAqIG5zdGVybS5oIChOU1RSQUNFX0FS R193aGF0KTogTWFjcm9zIGZvciBwYXNzaW5nIHByaW50Zi1zdHlsZQogICAgICAgIGFyZ3VtZW50 cywgY29ycmVzcG9uZHMgdG8gTlNUUkFDRV9GTVRfd2hhdC4KICAgICAgICAqIG5zdGVybS5oIChO U1RSQUNFX1JFVFVSTik6IE1hY3JvIHRvIHByaW50IHJldHVybiB2YWx1ZSwgYWNjZXB0CiAgICAg ICAgcHJpbnRmLXN0eWxlIGFyZ3VtZW50cy4KICAgICAgICAqIG5zdGVybS5oIChOU1RSQUNFX1JF VFVSTl93aGF0KTogTWFjcm9zIHRvIHByaW50IHJldHVybiB2YWx1ZSBmb3IKICAgICAgICB2YXJp b3VzIHR5cGVzLgoKCSogbnN0ZXJtLm06IFJlbW92ZSBvbGQgTlNUUkFDRSBtYWNyby4KCSogbnN0 ZXJtLm0gKG5zdHJhY2VfbnVtKTogVHJhY2UgY291bnRlci4KICAgICAgICAqIG5zdGVybS5tIChu c3RyYWNlX2RlcHRoKTogQ3VycmVudCBjYWxsIGRlcHRoLgogICAgICAgICogbnN0ZXJtLm0gKG5z dHJhY2VfbGVhdmUpOiBOU1RSQUNFIHN1cHBvcnQgZnVuY3Rpb24sIGNhbGxlZCB3aGVuCiAgICAg ICAgdGhlIGxvY2FsIHZhcmlhYmxlICJuc3RyYWNlX2VuYWJsZWQiIGdvZXMgb3V0IG9mIHNjb3Bl IHVzaW5nIHRoZQogICAgICAgICJjbGVhbnVwIiBleHRlbnNpb24uCiAgICAgICAgKiBuc3Rlcm0u bSAobnNfcHJpbnRfZnVsbHNjcmVlbl90eXBlX25hbWUpOiBOU1RSQUNFX0ZTVFlQRSBzdXBwb3J0 CiAgICAgICAgZnVuY3Rpb24uCgkqIG5zdGVybS5tIChjb25zdHJhaW5fZnJhbWVfcmVjdCwgbnNf Y29uc3RyYWluX2FsbF9mcmFtZXMpCiAgICAgICAgKG5zX3VwZGF0ZV9hdXRvX2hpZGVfbWVudV9i YXIsIG5zX3VwZGF0ZV9iZWdpbikKICAgICAgICAobnNfdXBkYXRlX3dpbmRvd19iZWdpbiwgdXBk YXRlX3dpbmRvd19lbmQsIG5zX3VwZGF0ZV9lbmQpCiAgICAgICAgKG5zX2ZvY3VzLCBuc191bmZv Y3VzLCBuc19yaW5nX2JlbGwsIG5zX2ZyYW1lX3JhaXNlX2xvd2VyKQogICAgICAgIChuc19mcmFt ZV9yZWhpZ2hsaWdodCwgeF9tYWtlX2ZyYW1lX3Zpc2libGUpCiAgICAgICAgKHhfbWFrZV9mcmFt ZV9pbnZpc2libGUsIHhfaWNvbmlmeV9mcmFtZSwgeF9mcmVlX2ZyYW1lX3Jlc291cmNlcykKICAg ICAgICAoeF9kZXN0cm95X3dpbmRvdywgeF9zZXRfb2Zmc2V0LCB4X3NldF93aW5kb3dfc2l6ZSkK ICAgICAgICAobnNfZnVsbHNjcmVlbl9ob29rLCBuc19saXNwX3RvX2NvbG9yLCBuc19jb2xvcl90 b19saXNwKQogICAgICAgIChuc19kZWZpbmVkX2NvbG9yLCBmcmFtZV9zZXRfbW91c2VfcGl4ZWxf cG9zaXRpb24pCiAgICAgICAgKG5vdGVfbW91c2VfbW92ZW1lbnQsIG5zX21vdXNlX3Bvc2l0aW9u LCBuc19mcmFtZV91cF90b19kYXRlKQogICAgICAgIChuc19kZWZpbmVfZnJhbWVfY3Vyc29yLCB4 X2dldF9rZXlzeW1fbmFtZSwgbnNfcmVkcmF3X3Njcm9sbF9iYXJzKQogICAgICAgIChuc19jbGVh cl9mcmFtZSwgbnNfY2xlYXJfZnJhbWVfYXJlYSwgbnNfc2Nyb2xsX3J1bikKICAgICAgICAobnNf YWZ0ZXJfdXBkYXRlX3dpbmRvd19saW5lLCBuc19zaGlmdF9nbHlwaHNfZm9yX2luc2VydCkKICAg ICAgICAoZHVtcGN1cnNvciwgbnNfZHJhd192ZXJ0aWNhbF93aW5kb3dfYm9yZGVyKQogICAgICAg IChuc19kcmF3X3dpbmRvd19kaXZpZGVyLCBuc19kcmF3X3JlbGllZikKICAgICAgICAobnNfZHVt cGdseXBoc19ib3hfb3JfcmVsaWVmLCBuc19tYXliZV9kdW1wZ2x5cGhzX2JhY2tncm91bmQpCiAg ICAgICAgKG5zX2R1bXBnbHlwaHNfaW1hZ2UsIG5zX2RyYXdfZ2x5cGhfc3RyaW5nLCBuc19zZW5k X2FwcGRlZmluZWQpCiAgICAgICAgKG5zX3JlYWRfc29ja2V0LCBuc19zZWxlY3QsIG5zX3NldF92 ZXJ0aWNhbF9zY3JvbGxfYmFyKQogICAgICAgIChuc19zZXRfaG9yaXpvbnRhbF9zY3JvbGxfYmFy LCBuc19jb25kZW1uX3Njcm9sbF9iYXJzKQogICAgICAgIChuc19yZWRlZW1fc2Nyb2xsX2Jhciwg bnNfanVkZ2Vfc2Nyb2xsX2JhcnMsIG5zX2RlbGV0ZV90ZXJtaW5hbCkKICAgICAgICAobnNfY3Jl YXRlX3Rlcm1pbmFsLCBuc190ZXJtX2luaXQsIHNlbmRFdmVudCkKICAgICAgICAoYXBwbGljYXRp b25EaWRGaW5pc2hMYXVuY2hpbmcsIGFwcGxpY2F0aW9uRGlkQmVjb21lQWN0aXZlKQogICAgICAg ICh0aW1lb3V0X2hhbmRsZXIsIGZkX2hhbmRsZXIsIEVtYWNzVmlld19kZWFsbG9jLCBjaGFuZ2VG b250KQogICAgICAgIChhY2NlcHRzRmlyc3RSZXNwb25kZXIsIHJlc2V0Q3Vyc29yUmVjdHMsIGtl eURvd24sIG1vdXNlRG93bikKICAgICAgICAoZGVsdGFJc1plcm8sIHJpZ2h0TW91c2VEb3duLCBv dGhlck1vdXNlRG93biwgbW91c2VVcCkKICAgICAgICAocmlnaHRNb3VzZVVwLCBvdGhlck1vdXNl VXAsIHNjcm9sbFdoZWVsLCBtb3VzZU1vdmVkKQogICAgICAgIChtb3VzZV9hdXRvc2VsZWN0X3dp bmRvdywgaW5fd2luZG93LCBtb3VzZURyYWdnZWQpCiAgICAgICAgKHJpZ2h0TW91c2VEcmFnZ2Vk LCBvdGhlck1vdXNlRHJhZ2dlZCwgd2luZG93U2hvdWxkQ2xvc2UpCiAgICAgICAgKHVwZGF0ZUZy YW1lU2l6ZSwgd2luZG93V2lsbFJlc2l6ZSwgd2luZG93RGlkUmVzaXplKQogICAgICAgICh3aW5k b3dEaWRCZWNvbWVLZXksIHdpbmRvd0RpZFJlc2lnbktleSwgd2luZG93V2lsbE1pbmlhdHVyaXpl KQogICAgICAgIChpbml0RnJhbWVGcm9tRW1hY3MsIHdpbmRvd0RpZE1vdmUsIHdpbmRvd0RpZERl bWluaWF0dXJpemUpCiAgICAgICAgKHdpbmRvd0RpZEV4cG9zZSwgd2luZG93RGlkTWluaWF0dXJp emUsIHdpbmRvd1dpbGxFbnRlckZ1bGxTY3JlZW4pCiAgICAgICAgKHdpbmRvd0RpZEVudGVyRnVs bFNjcmVlbiwgd2luZG93V2lsbEV4aXRGdWxsU2NyZWVuKQogICAgICAgICh3aW5kb3dEaWRFeGl0 RnVsbFNjcmVlbiwgdG9nZ2xlRnVsbFNjcmVlbiwgaGFuZGxlRlMsIHNldEZTVmFsdWUpCiAgICAg ICAgKG1vdXNlRW50ZXJlZCwgbW91c2VFeGl0ZWQsIG1lbnVEb3duLCB0b29sYmFyQ2xpY2tlZCwg ZHJhd1JlY3QpCiAgICAgICAgKGRyYWdnaW5nRW50ZXJlZCwgcGVyZm9ybURyYWdPcGVyYXRpb24s IHZhbGlkUmVxdWVzdG9yRm9yU2VuZFR5cGUpCiAgICAgICAgKHNldE1pbml3aW5kb3dJbWFnZSwg Y29uc3RyYWluRnJhbWVSZWN0LCBwZXJmb3JtWm9vbSwgem9vbSkKICAgICAgICAoRW1hY3NTY3Jv bGxlcl9pbml0RnJhbWUsIEVtYWNzU2Nyb2xsZXJfc2V0RnJhbWUpCiAgICAgICAgKEVtYWNzU2Ny b2xsZXJfZGVhbGxvYywgY29uZGVtbiwgcmVwcmlldmUsIGp1ZGdlKQogICAgICAgIChyZXNldEN1 cnNvclJlY3RzLCBzZXRQb3NpdGlvbiwgRW1hY3NTY3JvbGxlcl9tb3VzZURvd24pCiAgICAgICAg KEVtYWNzU2Nyb2xsZXJfbW91c2VEcmFnZ2VkLCBzeW1zX29mX25zdGVybSk6IFVzZSBuZXcgdHJh Y2Ugc3lzdGVtLgoKICAgICAgICAqIG5zZm5zLm06IFJlbW92ZSBvbGQgTlNUUkFDRSBtYWNyby4K ICAgICAgICAqIG5zZm5zLm0gKHhfc2V0X2ljb25fbmFtZSwgbnNfc2V0X25hbWUsIHhfZXhwbGlj aXRseV9zZXRfbmFtZSkKICAgICAgICAoeF9pbXBsaWNpdGx5X3NldF9uYW1lLCB4X3NldF90aXRs ZSwgbnNfc2V0X25hbWVfYXNfZmlsZW5hbWUpCiAgICAgICAgKG5zX2ltcGxpY2l0bHlfc2V0X2lj b25fdHlwZSwgeF9zZXRfaWNvbl90eXBlKTogVXNlIG5ldyB0cmFjZSBzeXN0ZW0uCgogICAgICAg ICogbnNpbWFnZS5tOiBSZW1vdmUgb2xkIE5TVFJBQ0UgbWFjcm8uCiAgICAgICAgKiBuc2ltYWdl Lm0gKG5zX2ltYWdlX2Zyb21fWEJNLCBuc19pbWFnZV9mb3JfWFBNKQogICAgICAgIChuc19pbWFn ZV9mcm9tX2JpdG1hcF9maWxlLCBuc19sb2FkX2ltYWdlKTogVXNlIG5ldyB0cmFjZSBzeXN0ZW0u CgogICAgICAgICogbnNtZW51Lm06IFJlbW92ZSBvbGQgTlNUUkFDRSBtYWNyby4KICAgICAgICAq IG5zbWVudS5tIChuc191cGRhdGVfbWVudWJhciwgbnNfbWVudV9zaG93LCBuc19wb3B1cF9kaWFs b2cpOgogICAgICAgIFVzZSBuZXcgdHJhY2Ugc3lzdGVtLgo= --001a11429d4c037d6705228c7c84--