From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 13240 invoked by alias); 28 Jul 2009 21:35:30 -0000 Received: (qmail 13228 invoked by uid 22791); 28 Jul 2009 21:35:27 -0000 X-SWARE-Spam-Status: No, hits=0.7 required=5.0 tests=AWL,BAYES_40,HK_OBFDOM,J_CHICKENPOX_13,J_CHICKENPOX_37,SARE_MSGID_LONG40,SPF_PASS X-Spam-Check-By: sourceware.org Received: from mail-bw0-f205.google.com (HELO mail-bw0-f205.google.com) (209.85.218.205) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Tue, 28 Jul 2009 21:35:18 +0000 Received: by bwz1 with SMTP id 1so330419bwz.24 for ; Tue, 28 Jul 2009 14:35:14 -0700 (PDT) MIME-Version: 1.0 Received: by 10.239.159.208 with SMTP id z16mr854766hbc.8.1248816914085; Tue, 28 Jul 2009 14:35:14 -0700 (PDT) In-Reply-To: <8363dctyy3.fsf@gnu.org> References: <9a9942200907221615o570e749fh5cb186c1600f159c@mail.gmail.com> <9a9942200907240946q1546646ft6e9112f263bcefdf@mail.gmail.com> <83iqhh52un.fsf@gnu.org> <83eis5440j.fsf@gnu.org> <9a9942200907271340g32c07b4dw1fc76e5f79068ac8@mail.gmail.com> <8363dctyy3.fsf@gnu.org> From: Reid Kleckner Date: Tue, 28 Jul 2009 22:23:00 -0000 Message-ID: <9a9942200907281434j97ef7f4vfb0fe8bd640eb3ab@mail.gmail.com> Subject: Re: [RFA] Add interface for registering JITed code To: Eli Zaretskii Cc: tromey@redhat.com, gdb-patches@sourceware.org, unladen-swallow@googlegroups.com Content-Type: multipart/mixed; boundary=001485f5ce6a8db93a046fcad898 Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org X-SW-Source: 2009-07/txt/msg00701.txt.bz2 --001485f5ce6a8db93a046fcad898 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable Content-length: 6807 On Tue, Jul 28, 2009 at 12:00 PM, Eli Zaretskii wrote: >> From: Reid Kleckner >> Date: Mon, 27 Jul 2009 13:40:02 -0700 >> Cc: Tom Tromey , gdb-patches@sourceware.org, >> =A0 =A0 =A0 unladen-swallow@googlegroups.com >> >> I mentioned the manual chapter in the NEWS entry, since the >> explanation of how it works is long. > > Thanks. =A0I have a few comments. > >> +* GDB now has an interface for JIT compilation. =A0Applications that >> +dynamically generate code can create symbol files in memory and register >> +them with GDB. =A0For users, the feature should work transparently, and >> +for JIT developers, the interface is documented in the GDB manual. > > Please state the name of the chapter in the manual where this is > documented. Done. >> +@node JIT Interface >> +@chapter @value{GDBN}'s JIT Interface > > I think a better name is "JIT Compilation Interface". > > Please add pertinent index entries here. =A0I suggest these: > > =A0@cindex just-in-time compilation > =A0@cindex JIT compilation interface Done. >> +This chapter documents @value{GDBN}'s just-in-time compiler (JIT) inter= face. > > Whenever you introduce new terminology, first usage should be in @dfn, > to make the term stand out: > > =A0 This chapter documents @value{GDBN}'s @dfn{just-in-time} (JIT) > =A0 compilation interface. > > Also, how about saying a few words here about JIT compiling, for those > who maybe hear about that for the first time? =A0Just a sentence or two > would be good enough. Sure. >> +Just-in-time compilers (JITs) are normally difficult to debug because t= hey > > Are we talking about debugging a JIT compiler or about debugging a > program that uses a JIT compiler? =A0I thought the latter, but it sounds > like you are talking about the former here. The line is somewhat blurry, since for our purposes we are trying to debug Unladen Swallow, which is an interpreter for Python that uses the LLVM JIT. It's somewhat appropriate to refer to it as a JIT for Python, but for the purposes of the documentation it's better to be clear. >> +generate code at runtime, and GDB normally gets all of its symbols from= object > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 ^^^ > "@value{GDBN}" (here and elsewhere). Done. >> +files. > > Does this rewording of the above sentence catch what you meant to say > (I'm not sure I understood)? > > =A0Programs compiled with JIT compilers are normally difficult to debug > =A0because portions of their code are generated at runtime, and not > =A0written to object files, where @value{GDBN} normally finds the debug > =A0information it needs. > > The rest of the text needs similar rewording, to make it more clear. > In particular, you use "JIT" meaning "a JIT compiler" and "executables > that use JIT" when you really mean "programs that use JIT > compilation". I've left the use of JIT as a noun in the later technical part of the chapter where "JIT" means "the JIT compiler" and not the program using the JIT. The audience for those sections should be JIT authors, not JIT users. In other cases I've tried to use "program that uses JIT compilation" or just "program". > If you can rephrase the text along the above guidelines, that'd be > great. =A0If not, go ahead and commit it with the few technical changes > I mention here, and I will do the rest. > >> + =A0 =A0In order to debug executables that use JITs, GDB has an interfa= ce that >> +allows the JIT to register in-memory symbol files with GDB at runtime. = =A0If you >> +are using GDB to debug a program using this interface, then it should j= ust work >> +so long as you have not stripped the binary. =A0If you are developing a= JIT, then >> +the interface is documented in the next section. =A0At this time, the o= nly known >> +client of this interface is the LLVM JIT. > > A question out of ignorance: are the special symbols you use to > interface with the JIT generated code specific to LLVM, or are they > part of some broader standard? =A0If the former, the instructions below > are actually instructions to develop other JIT compilers that follow > the LLVM conventions, and we are in effect committing GDB to force > these conventions on developers of JIT compilers, don't we? If only there were a standard. :) I talked with some GDB developers here at Google a month and a half ago, and we decided that this would be a decent interface for GDB, LLVM, and potentially other JIT compilers out there. There's nothing intended to be LLVM specific about it. Most of the constraints on the interface come from the GDB side, since GDB thinks about symbols and debug info mostly in terms of object files. The symbol names don't actually refer to LLVM or GDB explicitly, and they are just __jit_debug_register_code and __jit_debug_descriptor. The only thing that that the interface forces on JIT authors is that they need to link in some kind of object file generation like libelf. LLVM happens to have code for writing ELFs, so it doesn't introduce an external dependency, it only makes the binary using the JIT a bit bigger. If this restriction is a problem for somebody using this interface in the future, then I think it could be extended to come up with some kind of symbol "file" format, where the user specifies all of the section headers, symbols, etc in some standard in memory structure, and gives pointer/size pairs to the sections. If you've used libelf, then you can imagine something similar to the in-memory structures that you use to describe the ELF before writing it. That way they only need one copy of the code and symbols. This would probably require implementing a more interesting BFD iovector to read the structures and follow the pointers, and then maybe even a custom BFD filetype, which would be a bit of work. So while I think that would be the ideal because it requires less effort on the client side, I consider it future work. >> +@section Using the JIT Interface > > Please make each @section also a @node. =A0(This will need a @menu be > added to the parent chapter.) =A0I would like to avoid sections that are > not nodes, because nodes make it easier to navigate the manual in a > structural way. Sure. >> +If the JIT recompiles code throughout its lifetime without unregisterin= g it, >> +then GDB and the JIT will continue to use extra memory for these symbol= files. > > Does this simply say "don't recompile without unregistering, or you > will leak memory", or does it say something else? Yeah, I didn't use the phrase "leak memory" because to some people it means specifically that the pointers are lost and cannot be freed, which is not the case. But on second thought, saying "leak memory" is less confusing and less verbose. Thanks for the review, Reid --001485f5ce6a8db93a046fcad898 Content-Type: text/plain; charset=US-ASCII; name="jit-patch.txt" Content-Disposition: attachment; filename="jit-patch.txt" Content-Transfer-Encoding: base64 X-Attachment-Id: f_fxp57vhy0 Content-length: 24734 MjAwOS0wNy0yOCAgUmVpZCBLbGVja25lciAgPHJlaWRAa2xlY2tuZXIubmV0 PgoKCUFkZCBpbnRlcmZhY2UgZm9yIEpJVCBjb2RlIGdlbmVyYXRpb24uCgkq IE5FV1M6IEFubm91bmNlIEpJVCBpbnRlcmZhY2UuCgkqIGRvYy9nZGIudGV4 aW5mbzogQWRkIGNoYXB0ZXIgb24gSklUIGludGVyZmFjZS4KCSogTWFrZWZp bGUuaW4gKFNGSUxFUyk6IEFkZCBqaXQuYy4KCShIRklMRVNfTk9fU1JDRElS KTogQWRkIGppdC5oLgoJKENPTU1PTl9PQlMpOiBBZGQgaml0Lm8uCgkqIGpp dC5jOiBOZXcgZmlsZS4KCSogaml0Lmg6IE5ldyBmaWxlLgoJKiBicmVha3Bv aW50Lmg6CgkoZW51bSBicHR5cGUpOiBBZGQgYnBfaml0X2V2ZW50IHRvIGVu dW0uCgkqIGJyZWFrcG9pbnQuYzoKCSh1cGRhdGVfYnJlYWtwb2ludHNfYWZ0 ZXJfZXhlYyk6IERlbGV0ZSBqaXQgYnJlYWtwb2ludHMgYWZ0ZXIgZXhlYy4K CShicHN0YXRfd2hhdCk6IFVwZGF0ZSBldmVudCB0YWJsZSBmb3IgYnBfaml0 X2V2ZW50LgoJKHByaW50X2l0X3R5cGljYWwpOiBBZGRlZCBjYXNlIGZvciBi cF9qaXRfZXZlbnQuCgkocHJpbnRfb25lX2JyZWFrcG9pbnRfbG9jYXRpb24p OiBBZGRlZCBjYXNlIGZvciBicF9qaXRfZXZlbnQuCgkoYWxsb2NhdGVfYnBf bG9jYXRpb24pOiBBZGRlZCBjYXNlIGZvciBicF9qaXRfZXZlbnQuCgkobWVu dGlvbik6IEFkZGVkIGNhc2UgZm9yIGJwX2ppdF9ldmVudC4KCShkZWxldGVf Y29tbWFuZCk6IEFkZGVkIGNhc2UgZm9yIGJwX2ppdF9ldmVudC4KCShicmVh a3BvaW50X3JlX3NldF9vbmUpOiBBZGRlZCBjYXNlIGZvciBicF9qaXRfZXZl bnQuCgkoYnJlYWtwb2ludF9yZV9zZXQpOiBBZGRlZCBjYWxsIHRvIGppdF9p bmZlcmlvcl9jcmVhdGVkX2hvb2suCgkoY3JlYXRlX2ppdF9ldmVudF9icmVh a3BvaW50KTogTmV3LgoJKiBpbmZydW4uYyAoaGFuZGxlX2luZmVyaW9yX2V2 ZW50KTogQWRkIGhhbmRsZXIgZm9yIGppdCBldmVudC4KCShmb2xsb3dfZXhl Yyk6IEFkZCBjYWxsIHRvIGppdF9pbmZlcmlvcl9jcmVhdGVkX2hvb2suCgkq IG9iamZpbGVzLmMgKGZyZWVfb2JqZmlsZSk6IEZpeGVkIGEgbWVtb3J5IGxl YWsuCgpJbmRleDogZ2RiL01ha2VmaWxlLmluCj09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT0KUkNTIGZpbGU6IC9jdnMvc3JjL3NyYy9nZGIvTWFrZWZpbGUuaW4s dgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTA5MQpkaWZmIC11IC1yMS4xMDkx IE1ha2VmaWxlLmluCi0tLSBnZGIvTWFrZWZpbGUuaW4JMyBKdWwgMjAwOSAx MjowNjozNSAtMDAwMAkxLjEwOTEKKysrIGdkYi9NYWtlZmlsZS5pbgkyOCBK dWwgMjAwOSAyMTozMjowMiAtMDAwMApAQCAtNjc3LDcgKzY3Nyw4IEBACiAJ d3JhcHBlci5jIFwKIAl4bWwtdGRlc2MuYyB4bWwtc3VwcG9ydC5jIFwKIAlp bmZlcmlvci5jIGdkYl91c2xlZXAuYyBcCi0JcmVjb3JkLmMKKwlyZWNvcmQu YyBcCisJaml0LmMKIAogTElOVEZJTEVTID0gJChTRklMRVMpICQoWVlGSUxF UykgJChDT05GSUdfU1JDUykgaW5pdC5jCiAKQEAgLTc0Niw3ICs3NDcsNyBA QAogYW5ub3RhdGUuaCBzaW0tcmVnbm8uaCBkaWN0aW9uYXJ5LmggZGZwLmgg bWFpbi5oIGZyYW1lLXVud2luZC5oCVwKIHJlbW90ZS1maWxlaW8uaCBpMzg2 LWxpbnV4LXRkZXAuaCB2YXgtdGRlcC5oIG9iamMtbGFuZy5oIFwKIHNlbnRp bmVsLWZyYW1lLmggYmNhY2hlLmggc3ltZmlsZS5oIHdpbmRvd3MtdGRlcC5o IGxpbnV4LXRkZXAuaCBcCi1nZGJfdXNsZWVwLmgKK2dkYl91c2xlZXAuaCBq aXQuaAogCiAjIEhlYWRlciBmaWxlcyB0aGF0IGFscmVhZHkgaGF2ZSBzcmNk aXIgaW4gdGhlbSwgb3Igd2hpY2ggYXJlIGluIG9iamRpci4KIApAQCAtODI4 LDcgKzgyOSw4IEBACiAJc29saWIubyBzb2xpYi1udWxsLm8gXAogCXByb2xv Z3VlLXZhbHVlLm8gbWVtb3J5LW1hcC5vIHhtbC1zdXBwb3J0Lm8gXAogCXRh cmdldC1kZXNjcmlwdGlvbnMubyB0YXJnZXQtbWVtb3J5Lm8geG1sLXRkZXNj Lm8geG1sLWJ1aWx0aW4ubyBcCi0JaW5mZXJpb3IubyBvc2RhdGEubyBnZGJf dXNsZWVwLm8gcmVjb3JkLm8KKwlpbmZlcmlvci5vIG9zZGF0YS5vIGdkYl91 c2xlZXAubyByZWNvcmQubyBcCisJaml0Lm8KIAogVFNPQlMgPSBpbmZsb3cu bwogCkluZGV4OiBnZGIvTkVXUwo9PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJD UyBmaWxlOiAvY3ZzL3NyYy9zcmMvZ2RiL05FV1MsdgpyZXRyaWV2aW5nIHJl dmlzaW9uIDEuMzE5CmRpZmYgLXUgLXIxLjMxOSBORVdTCi0tLSBnZGIvTkVX UwkyMCBKdWwgMjAwOSAxODo1MTo0MSAtMDAwMAkxLjMxOQorKysgZ2RiL05F V1MJMjggSnVsIDIwMDkgMjE6MzI6MDIgLTAwMDAKQEAgLTMsNiArMywxMiBA QAogCiAqKiogQ2hhbmdlcyBzaW5jZSBHREIgNi44CiAKKyogR0RCIG5vdyBo YXMgYW4gaW50ZXJmYWNlIGZvciBKSVQgY29tcGlsYXRpb24uICBBcHBsaWNh dGlvbnMgdGhhdAorZHluYW1pY2FsbHkgZ2VuZXJhdGUgY29kZSBjYW4gY3Jl YXRlIHN5bWJvbCBmaWxlcyBpbiBtZW1vcnkgYW5kIHJlZ2lzdGVyCit0aGVt IHdpdGggR0RCLiAgRm9yIHVzZXJzLCB0aGUgZmVhdHVyZSBzaG91bGQgd29y ayB0cmFuc3BhcmVudGx5LCBhbmQKK2ZvciBKSVQgZGV2ZWxvcGVycywgdGhl IGludGVyZmFjZSBpcyBkb2N1bWVudGVkIGluIHRoZSBHREIgbWFudWFsIGlu IHRoZQorIkpJVCBDb21waWxhdGlvbiBJbnRlcmZhY2UiIGNoYXB0ZXIuCisK ICogVHJhY2Vwb2ludHMgbWF5IG5vdyBiZSBjb25kaXRpb25hbC4gIFRoZSBz eW50YXggaXMgYXMgZm9yCiBicmVha3BvaW50czsgZWl0aGVyIGFuICJpZiIg Y2xhdXNlIGFwcGVuZGVkIHRvIHRoZSAidHJhY2UiIGNvbW1hbmQsCiBvciB0 aGUgImNvbmRpdGlvbiIgY29tbWFuZCBpcyBhdmFpbGFibGUuICBHREIgc2Vu ZHMgdGhlIGNvbmRpdGlvbiB0bwpJbmRleDogZ2RiL2JyZWFrcG9pbnQuYwo9 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3NyYy9zcmMv Z2RiL2JyZWFrcG9pbnQuYyx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS40MTMK ZGlmZiAtdSAtcjEuNDEzIGJyZWFrcG9pbnQuYwotLS0gZ2RiL2JyZWFrcG9p bnQuYwk3IEp1bCAyMDA5IDIyOjIxOjA5IC0wMDAwCTEuNDEzCisrKyBnZGIv YnJlYWtwb2ludC5jCTI4IEp1bCAyMDA5IDIxOjMyOjAyIC0wMDAwCkBAIC01 OSw2ICs1OSw3IEBACiAjaW5jbHVkZSAidG9wLmgiCiAjaW5jbHVkZSAid3Jh cHBlci5oIgogI2luY2x1ZGUgInZhbHByaW50LmgiCisjaW5jbHVkZSAiaml0 LmgiCiAKIC8qIHJlYWRsaW5lIGluY2x1ZGUgZmlsZXMgKi8KICNpbmNsdWRl ICJyZWFkbGluZS9yZWFkbGluZS5oIgpAQCAtMTU3NSw2ICsxNTc2LDEzIEBA CiAJY29udGludWU7CiAgICAgICB9CiAKKyAgICAvKiBKSVQgYnJlYWtwb2lu dHMgbXVzdCBiZSBleHBsaWNpdGx5IHJlc2V0IGFmdGVyIGFuIGV4ZWMoKS4g Ki8KKyAgICBpZiAoYi0+dHlwZSA9PSBicF9qaXRfZXZlbnQpCisgICAgICB7 CisJZGVsZXRlX2JyZWFrcG9pbnQgKGIpOworCWNvbnRpbnVlOworICAgICAg fQorCiAgICAgLyogVGhyZWFkIGV2ZW50IGJyZWFrcG9pbnRzIG11c3QgYmUg c2V0IGFuZXcgYWZ0ZXIgYW4gZXhlYygpLAogICAgICAgIGFzIG11c3Qgb3Zl cmxheSBldmVudCBhbmQgbG9uZ2ptcCBtYXN0ZXIgYnJlYWtwb2ludHMuICAq LwogICAgIGlmIChiLT50eXBlID09IGJwX3RocmVhZF9ldmVudCB8fCBiLT50 eXBlID09IGJwX292ZXJsYXlfZXZlbnQKQEAgLTI1NzMsNiArMjU4MSw3IEBA CiAgICAgY2FzZSBicF93YXRjaHBvaW50X3Njb3BlOgogICAgIGNhc2UgYnBf Y2FsbF9kdW1teToKICAgICBjYXNlIGJwX3RyYWNlcG9pbnQ6CisgICAgY2Fz ZSBicF9qaXRfZXZlbnQ6CiAgICAgZGVmYXVsdDoKICAgICAgIHJlc3VsdCA9 IFBSSU5UX1VOS05PV047CiAgICAgICBicmVhazsKQEAgLTMyOTgsNiArMzMw Nyw5IEBACiAgICAgICAvKiBXZSBoaXQgdGhlIHNoYXJlZCBsaWJyYXJ5IGV2 ZW50IGJyZWFrcG9pbnQuICAqLwogICAgICAgc2hsaWJfZXZlbnQsCiAKKyAg ICAgIC8qIFdlIGhpdCB0aGUgaml0IGV2ZW50IGJyZWFrcG9pbnQuICAqLwor ICAgICAgaml0X2V2ZW50LAorCiAgICAgICAvKiBUaGlzIGlzIGp1c3QgdXNl ZCB0byBjb3VudCBob3cgbWFueSBlbnVtcyB0aGVyZSBhcmUuICAqLwogICAg ICAgY2xhc3NfbGFzdAogICAgIH07CkBAIC0zMzEzLDYgKzMzMjUsNyBAQAog I2RlZmluZSBjbHIgQlBTVEFUX1dIQVRfQ0xFQVJfTE9OR0pNUF9SRVNVTUUK ICNkZWZpbmUgc3IgQlBTVEFUX1dIQVRfU1RFUF9SRVNVTUUKICNkZWZpbmUg c2hsIEJQU1RBVF9XSEFUX0NIRUNLX1NITElCUworI2RlZmluZSBqaXQgQlBT VEFUX1dIQVRfQ0hFQ0tfSklUCiAKIC8qICJDYW4ndCBoYXBwZW4uIiAgTWln aHQgd2FudCB0byBwcmludCBhbiBlcnJvciBtZXNzYWdlLgogICAgYWJvcnQo KSBpcyBub3Qgb3V0IG9mIHRoZSBxdWVzdGlvbiwgYnV0IGNoYW5jZXMgYXJl IEdEQiBpcyBqdXN0CkBAIC0zMzMzLDEyICszMzQ2LDEzIEBACiAgICAgIGJh Y2sgYW5kIGRlY2lkZSBzb21ldGhpbmcgb2YgYSBsb3dlciBwcmlvcml0eSBp cyBiZXR0ZXIuICBUaGUKICAgICAgb3JkZXJpbmcgaXM6CiAKLSAgICAga2Mg ICA8IGNsciBzZ2wgc2hsIHNsciBzbiBzciBzcwotICAgICBzZ2wgIDwgc2hs IHNsciBzbiBzciBzcwotICAgICBzbHIgIDwgZXJyIHNobCBzbiBzciBzcwot ICAgICBjbHIgIDwgZXJyIHNobCBzbiBzciBzcwotICAgICBzcyAgIDwgc2hs IHNuIHNyCi0gICAgIHNuICAgPCBzaGwgc3IKKyAgICAga2MgICA8IGppdCBj bHIgc2dsIHNobCBzbHIgc24gc3Igc3MKKyAgICAgc2dsICA8IGppdCBzaGwg c2xyIHNuIHNyIHNzCisgICAgIHNsciAgPCBqaXQgZXJyIHNobCBzbiBzciBz cworICAgICBjbHIgIDwgaml0IGVyciBzaGwgc24gc3Igc3MKKyAgICAgc3Mg ICA8IGppdCBzaGwgc24gc3IKKyAgICAgc24gICA8IGppdCBzaGwgc3IKKyAg ICAgaml0ICA8IHNobCBzcgogICAgICBzaGwgIDwgc3IKICAgICAgc3IgICA8 CiAKQEAgLTMzNTYsMjggKzMzNzAsMTggQEAKICAgICB0YWJsZVsoaW50KSBj bGFzc19sYXN0XVsoaW50KSBCUFNUQVRfV0hBVF9MQVNUXSA9CiAgIHsKICAg LyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbGQgYWN0aW9uICov Ci0gIC8qICAgICAgIGtjICAgIHNzICAgIHNuICAgIHNnbCAgICBzbHIgICBj bHIgICBzciAgIHNobAotICAgKi8KLS8qbm9fZWZmZWN0ICovCi0gICAge2tj LCBzcywgc24sIHNnbCwgc2xyLCBjbHIsIHNyLCBzaGx9LAotLyp3cF9zaWxl bnQgKi8KLSAgICB7c3MsIHNzLCBzbiwgc3MsIHNzLCBzcywgc3IsIHNobH0s Ci0vKndwX25vaXN5ICovCi0gICAge3NuLCBzbiwgc24sIHNuLCBzbiwgc24s IHNyLCBzaGx9LAotLypicF9ub3N0b3AgKi8KLSAgICB7c2dsLCBzcywgc24s IHNnbCwgc2xyLCBzbHIsIHNyLCBzaGx9LAotLypicF9zaWxlbnQgKi8KLSAg ICB7c3MsIHNzLCBzbiwgc3MsIHNzLCBzcywgc3IsIHNobH0sCi0vKmJwX25v aXN5ICovCi0gICAge3NuLCBzbiwgc24sIHNuLCBzbiwgc24sIHNyLCBzaGx9 LAotLypsb25nX2p1bXAgKi8KLSAgICB7c2xyLCBzcywgc24sIHNsciwgc2xy LCBlcnIsIHNyLCBzaGx9LAotLypsb25nX3Jlc3VtZSAqLwotICAgIHtjbHIs IHNzLCBzbiwgZXJyLCBlcnIsIGVyciwgc3IsIHNobH0sCi0vKnN0ZXBfcmVz dW1lICovCi0gICAge3NyLCBzciwgc3IsIHNyLCBzciwgc3IsIHNyLCBzcn0s Ci0vKnNobGliICovCi0gICAge3NobCwgc2hsLCBzaGwsIHNobCwgc2hsLCBz aGwsIHNyLCBzaGx9CisgIC8qICAgICAgICAgICAgICAga2MgICBzcyAgIHNu ICAgc2dsICBzbHIgIGNsciAgc3IgIHNobCAgaml0ICovCisvKiBub19lZmZl Y3QgKi8gICB7a2MsICBzcywgIHNuLCAgc2dsLCBzbHIsIGNsciwgc3IsIHNo bCwgaml0fSwKKy8qIHdwX3NpbGVudCAqLyAgIHtzcywgIHNzLCAgc24sICBz cywgIHNzLCAgc3MsICBzciwgc2hsLCBqaXR9LAorLyogd3Bfbm9pc3kgKi8g ICAge3NuLCAgc24sICBzbiwgIHNuLCAgc24sICBzbiwgIHNyLCBzaGwsIGpp dH0sCisvKiBicF9ub3N0b3AgKi8gICB7c2dsLCBzcywgIHNuLCAgc2dsLCBz bHIsIHNsciwgc3IsIHNobCwgaml0fSwKKy8qIGJwX3NpbGVudCAqLyAgIHtz cywgIHNzLCAgc24sICBzcywgIHNzLCAgc3MsICBzciwgc2hsLCBqaXR9LAor LyogYnBfbm9pc3kgKi8gICAge3NuLCAgc24sICBzbiwgIHNuLCAgc24sICBz biwgIHNyLCBzaGwsIGppdH0sCisvKiBsb25nX2p1bXAgKi8gICB7c2xyLCBz cywgIHNuLCAgc2xyLCBzbHIsIGVyciwgc3IsIHNobCwgaml0fSwKKy8qIGxv bmdfcmVzdW1lICovIHtjbHIsIHNzLCAgc24sICBlcnIsIGVyciwgZXJyLCBz ciwgc2hsLCBqaXR9LAorLyogc3RlcF9yZXN1bWUgKi8ge3NyLCAgc3IsICBz ciwgIHNyLCAgc3IsICBzciwgIHNyLCBzciwgIHNyIH0sCisvKiBzaGxpYiAq LyAgICAgICB7c2hsLCBzaGwsIHNobCwgc2hsLCBzaGwsIHNobCwgc3IsIHNo bCwgc2hsfSwKKy8qIGppdF9ldmVudCAqLyAgIHtqaXQsIGppdCwgaml0LCBq aXQsIGppdCwgaml0LCBzciwgaml0LCBqaXR9CiAgIH07CiAKICN1bmRlZiBr YwpAQCAtMzM5MCw2ICszMzk0LDcgQEAKICN1bmRlZiBzcgogI3VuZGVmIHRz CiAjdW5kZWYgc2hsCisjdW5kZWYgaml0CiAgIGVudW0gYnBzdGF0X3doYXRf bWFpbl9hY3Rpb24gY3VycmVudF9hY3Rpb24gPSBCUFNUQVRfV0hBVF9LRUVQ X0NIRUNLSU5HOwogICBzdHJ1Y3QgYnBzdGF0X3doYXQgcmV0dmFsOwogCkBA IC0zNDYwLDYgKzM0NjUsOSBAQAogCWNhc2UgYnBfc2hsaWJfZXZlbnQ6CiAJ ICBic19jbGFzcyA9IHNobGliX2V2ZW50OwogCSAgYnJlYWs7CisJY2FzZSBi cF9qaXRfZXZlbnQ6CisJICBic19jbGFzcyA9IGppdF9ldmVudDsKKwkgIGJy ZWFrOwogCWNhc2UgYnBfdGhyZWFkX2V2ZW50OgogCWNhc2UgYnBfb3Zlcmxh eV9ldmVudDoKIAljYXNlIGJwX2xvbmdqbXBfbWFzdGVyOgpAQCAtMzU5Myw2 ICszNjAxLDcgQEAKICAgICB7YnBfbG9uZ2ptcF9tYXN0ZXIsICJsb25nam1w IG1hc3RlciJ9LAogICAgIHticF9jYXRjaHBvaW50LCAiY2F0Y2hwb2ludCJ9 LAogICAgIHticF90cmFjZXBvaW50LCAidHJhY2Vwb2ludCJ9LAorICAgIHti cF9qaXRfZXZlbnQsICJqaXQgZXZlbnRzIn0sCiAgIH07CiAgIAogICBzdGF0 aWMgY2hhciBicGVuYWJsZXNbXSA9ICJueW5ueSI7CkBAIC0zNzIxLDYgKzM3 MzAsNyBAQAogICAgICAgY2FzZSBicF9vdmVybGF5X2V2ZW50OgogICAgICAg Y2FzZSBicF9sb25nam1wX21hc3RlcjoKICAgICAgIGNhc2UgYnBfdHJhY2Vw b2ludDoKKyAgICAgIGNhc2UgYnBfaml0X2V2ZW50OgogCWlmIChvcHRzLmFk ZHJlc3NwcmludCkKIAkgIHsKIAkgICAgYW5ub3RhdGVfZmllbGQgKDQpOwpA QCAtNDM2Miw2ICs0MzcyLDcgQEAKICAgICBjYXNlIGJwX3NobGliX2V2ZW50 OgogICAgIGNhc2UgYnBfdGhyZWFkX2V2ZW50OgogICAgIGNhc2UgYnBfb3Zl cmxheV9ldmVudDoKKyAgICBjYXNlIGJwX2ppdF9ldmVudDoKICAgICBjYXNl IGJwX2xvbmdqbXBfbWFzdGVyOgogICAgICAgbG9jLT5sb2NfdHlwZSA9IGJw X2xvY19zb2Z0d2FyZV9icmVha3BvaW50OwogICAgICAgYnJlYWs7CkBAIC00 NjQ0LDYgKzQ2NTUsMTcgQEAKICAgICBpbnQgcmFkaXg7CiAgIH07CiAKKy8q IENyZWF0ZSBhIGJyZWFrcG9pbnQgZm9yIEpJVCBjb2RlIHJlZ2lzdHJhdGlv biBhbmQgdW5yZWdpc3RyYXRpb24uICAqLworCitzdHJ1Y3QgYnJlYWtwb2lu dCAqCitjcmVhdGVfaml0X2V2ZW50X2JyZWFrcG9pbnQgKHN0cnVjdCBnZGJh cmNoICpnZGJhcmNoLCBDT1JFX0FERFIgYWRkcmVzcykKK3sKKyAgc3RydWN0 IGJyZWFrcG9pbnQgKmI7CisKKyAgYiA9IGNyZWF0ZV9pbnRlcm5hbF9icmVh a3BvaW50IChnZGJhcmNoLCBhZGRyZXNzLCBicF9qaXRfZXZlbnQpOworICB1 cGRhdGVfZ2xvYmFsX2xvY2F0aW9uX2xpc3Rfbm90aHJvdyAoMSk7CisgIHJl dHVybiBiOworfQogCiB2b2lkCiByZW1vdmVfc29saWJfZXZlbnRfYnJlYWtw b2ludHMgKHZvaWQpCkBAIC01Mjc5LDYgKzUzMDEsNyBAQAogICAgICAgY2Fz ZSBicF9zaGxpYl9ldmVudDoKICAgICAgIGNhc2UgYnBfdGhyZWFkX2V2ZW50 OgogICAgICAgY2FzZSBicF9vdmVybGF5X2V2ZW50OgorICAgICAgY2FzZSBi cF9qaXRfZXZlbnQ6CiAgICAgICBjYXNlIGJwX2xvbmdqbXBfbWFzdGVyOgog CWJyZWFrOwogICAgICAgfQpAQCAtNzU4NSw2ICs3NjA4LDcgQEAKICAgICAg IHsKIAlpZiAoYi0+dHlwZSAhPSBicF9jYWxsX2R1bW15CiAJICAgICYmIGIt PnR5cGUgIT0gYnBfc2hsaWJfZXZlbnQKKwkgICAgJiYgYi0+dHlwZSAhPSBi cF9qaXRfZXZlbnQKIAkgICAgJiYgYi0+dHlwZSAhPSBicF90aHJlYWRfZXZl bnQKIAkgICAgJiYgYi0+dHlwZSAhPSBicF9vdmVybGF5X2V2ZW50CiAJICAg ICYmIGItPnR5cGUgIT0gYnBfbG9uZ2ptcF9tYXN0ZXIKQEAgLTc2MDQsNiAr NzYyOCw3IEBACiAJICAgIGlmIChiLT50eXBlICE9IGJwX2NhbGxfZHVtbXkK IAkJJiYgYi0+dHlwZSAhPSBicF9zaGxpYl9ldmVudAogCQkmJiBiLT50eXBl ICE9IGJwX3RocmVhZF9ldmVudAorCQkmJiBiLT50eXBlICE9IGJwX2ppdF9l dmVudAogCQkmJiBiLT50eXBlICE9IGJwX292ZXJsYXlfZXZlbnQKIAkJJiYg Yi0+dHlwZSAhPSBicF9sb25nam1wX21hc3RlcgogCQkmJiBiLT5udW1iZXIg Pj0gMCkKQEAgLTc5MjYsNiArNzk1MSw3IEBACiAgICAgY2FzZSBicF9zdGVw X3Jlc3VtZToKICAgICBjYXNlIGJwX2xvbmdqbXA6CiAgICAgY2FzZSBicF9s b25nam1wX3Jlc3VtZToKKyAgICBjYXNlIGJwX2ppdF9ldmVudDoKICAgICAg IGJyZWFrOwogICAgIH0KIApAQCAtNzk1NCw2ICs3OTgwLDggQEAKICAgc2V0 X2xhbmd1YWdlIChzYXZlX2xhbmd1YWdlKTsKICAgaW5wdXRfcmFkaXggPSBz YXZlX2lucHV0X3JhZGl4OwogCisgIGppdF9pbmZlcmlvcl9jcmVhdGVkX2hv b2sgKCk7CisKICAgY3JlYXRlX292ZXJsYXlfZXZlbnRfYnJlYWtwb2ludCAo Il9vdmx5X2RlYnVnX2V2ZW50Iik7CiAgIGNyZWF0ZV9sb25nam1wX21hc3Rl cl9icmVha3BvaW50ICgibG9uZ2ptcCIpOwogICBjcmVhdGVfbG9uZ2ptcF9t YXN0ZXJfYnJlYWtwb2ludCAoIl9sb25nam1wIik7CkluZGV4OiBnZGIvYnJl YWtwb2ludC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9j dnMvc3JjL3NyYy9nZGIvYnJlYWtwb2ludC5oLHYKcmV0cmlldmluZyByZXZp c2lvbiAxLjk1CmRpZmYgLXUgLXIxLjk1IGJyZWFrcG9pbnQuaAotLS0gZ2Ri L2JyZWFrcG9pbnQuaAkyIEp1bCAyMDA5IDE3OjEyOjI0IC0wMDAwCTEuOTUK KysrIGdkYi9icmVha3BvaW50LmgJMjggSnVsIDIwMDkgMjE6MzI6MDIgLTAw MDAKQEAgLTEyMCw2ICsxMjAsOSBAQAogICAgIGJwX2NhdGNocG9pbnQsCiAK ICAgICBicF90cmFjZXBvaW50LAorCisgICAgLyogRXZlbnQgZm9yIEpJVCBj b21waWxlZCBjb2RlIGdlbmVyYXRpb24gb3IgZGVsZXRpb24uICAqLworICAg IGJwX2ppdF9ldmVudCwKICAgfTsKIAogLyogU3RhdGVzIG9mIGVuYWJsZW1l bnQgb2YgYnJlYWtwb2ludC4gKi8KQEAgLTU0OCw2ICs1NTEsOSBAQAogICAg ICAgIGtlZXAgY2hlY2tpbmcuICAqLwogICAgIEJQU1RBVF9XSEFUX0NIRUNL X1NITElCUywKIAorICAgIC8qIENoZWNrIGZvciBuZXcgSklUZWQgY29kZS4g ICovCisgICAgQlBTVEFUX1dIQVRfQ0hFQ0tfSklULAorCiAgICAgLyogVGhp cyBpcyBqdXN0IHVzZWQgdG8ga2VlcCB0cmFjayBvZiBob3cgbWFueSBlbnVt cyB0aGVyZSBhcmUuICAqLwogICAgIEJQU1RBVF9XSEFUX0xBU1QKICAgfTsK QEAgLTg0MSw2ICs4NDcsOSBAQAogCiBleHRlcm4gdm9pZCBtYWtlX2JyZWFr cG9pbnRfcGVybWFuZW50IChzdHJ1Y3QgYnJlYWtwb2ludCAqKTsKIAorZXh0 ZXJuIHN0cnVjdCBicmVha3BvaW50ICpjcmVhdGVfaml0X2V2ZW50X2JyZWFr cG9pbnQgKHN0cnVjdCBnZGJhcmNoICosCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09SRV9BRERS KTsKKwogZXh0ZXJuIHN0cnVjdCBicmVha3BvaW50ICpjcmVhdGVfc29saWJf ZXZlbnRfYnJlYWtwb2ludCAoc3RydWN0IGdkYmFyY2ggKiwKIAkJCQkJCQkg Q09SRV9BRERSKTsKIApJbmRleDogZ2RiL2luZnJ1bi5jCj09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvc3JjL3NyYy9nZGIvaW5mcnVu LmMsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNDAyCmRpZmYgLXUgLXIxLjQw MiBpbmZydW4uYwotLS0gZ2RiL2luZnJ1bi5jCTIwIEp1bCAyMDA5IDE1OjA1 OjEyIC0wMDAwCTEuNDAyCisrKyBnZGIvaW5mcnVuLmMJMjggSnVsIDIwMDkg MjE6MzI6MDMgLTAwMDAKQEAgLTUwLDYgKzUwLDcgQEAKICNpbmNsdWRlICJl dmVudC10b3AuaCIKICNpbmNsdWRlICJyZWNvcmQuaCIKICNpbmNsdWRlICJp bmxpbmUtZnJhbWUuaCIKKyNpbmNsdWRlICJqaXQuaCIKIAogLyogUHJvdG90 eXBlcyBmb3IgbG9jYWwgZnVuY3Rpb25zICovCiAKQEAgLTU0NCw2ICs1NDUs OCBAQAogICBzb2xpYl9jcmVhdGVfaW5mZXJpb3JfaG9vayAoKTsKICNlbmRp ZgogCisgIGppdF9pbmZlcmlvcl9jcmVhdGVkX2hvb2sgKCk7CisKICAgLyog UmVpbnNlcnQgYWxsIGJyZWFrcG9pbnRzLiAgKFRob3NlIHdoaWNoIHdlcmUg c3ltYm9saWMgaGF2ZQogICAgICBiZWVuIHJlc2V0IHRvIHRoZSBwcm9wZXIg YWRkcmVzcyBpbiB0aGUgbmV3IGEub3V0LCB0aGFua3MKICAgICAgdG8gc3lt Ym9sX2ZpbGVfY29tbWFuZC4uLikgKi8KQEAgLTM1MjksNiArMzUzMiwyMiBA QAogCX0KIAlicmVhazsKIAorICAgICAgY2FzZSBCUFNUQVRfV0hBVF9DSEVD S19KSVQ6CisgICAgICAgIGlmIChkZWJ1Z19pbmZydW4pCisgICAgICAgICAg ZnByaW50Zl91bmZpbHRlcmVkIChnZGJfc3RkbG9nLCAiaW5mcnVuOiBCUFNU QVRfV0hBVF9DSEVDS19KSVRcbiIpOworCisgICAgICAgIC8qIFN3aXRjaCB0 ZXJtaW5hbCBmb3IgYW55IG1lc3NhZ2VzIHByb2R1Y2VkIGJ5IGJyZWFrcG9p bnRfcmVfc2V0LiAgKi8KKyAgICAgICAgdGFyZ2V0X3Rlcm1pbmFsX291cnNf Zm9yX291dHB1dCAoKTsKKworICAgICAgICBqaXRfZXZlbnRfaGFuZGxlciAo KTsKKworICAgICAgICB0YXJnZXRfdGVybWluYWxfaW5mZXJpb3IgKCk7CisK KyAgICAgICAgLyogV2Ugd2FudCB0byBzdGVwIG92ZXIgdGhpcyBicmVha3Bv aW50LCB0aGVuIGtlZXAgZ29pbmcuICAqLworICAgICAgICBlY3MtPmV2ZW50 X3RocmVhZC0+c3RlcHBpbmdfb3Zlcl9icmVha3BvaW50ID0gMTsKKworICAg ICAgICBicmVhazsKKwogICAgICAgY2FzZSBCUFNUQVRfV0hBVF9MQVNUOgog CS8qIE5vdCBhIHJlYWwgY29kZSwgYnV0IGxpc3RlZCBoZXJlIHRvIHNodXQg dXAgZ2NjIC1XYWxsLiAgKi8KIApJbmRleDogZ2RiL29iamZpbGVzLmMKPT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9zcmMvc3JjL2dk Yi9vYmpmaWxlcy5jLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjg3CmRpZmYg LXUgLXIxLjg3IG9iamZpbGVzLmMKLS0tIGdkYi9vYmpmaWxlcy5jCTIyIEp1 bCAyMDA5IDE5OjIxOjMxIC0wMDAwCTEuODcKKysrIGdkYi9vYmpmaWxlcy5j CTI4IEp1bCAyMDA5IDIxOjMyOjAzIC0wMDAwCkBAIC0yNSw2ICsyNSw3IEBA CiAKICNpbmNsdWRlICJkZWZzLmgiCiAjaW5jbHVkZSAiYmZkLmgiCQkvKiBC aW5hcnkgRmlsZSBEZXNjcmlwdGlvbiAqLworI2luY2x1ZGUgImxpYmJmZC5o IgogI2luY2x1ZGUgInN5bXRhYi5oIgogI2luY2x1ZGUgInN5bWZpbGUuaCIK ICNpbmNsdWRlICJvYmpmaWxlcy5oIgpAQCAtNDM4LDkgKzQzOSwxOSBAQAog ICBpZiAob2JqZmlsZS0+b2JmZCAhPSBOVUxMICYmICEob2JqZmlsZS0+Zmxh Z3MgJiBPQkpGX0tFRVBCRkQpKQogICAgIHsKICAgICAgIGNoYXIgKm5hbWUg PSBiZmRfZ2V0X2ZpbGVuYW1lIChvYmpmaWxlLT5vYmZkKTsKKyAgICAgIHN0 cnVjdCBiZmRfaW5fbWVtb3J5ICpiaW0gPSBOVUxMOworICAgICAgLyogSGFj ayB0byB3b3JrIGFyb3VuZCB0aGUgZmFjdCB0aGF0IEJGRCBkb2VzIG5vdCB0 YWtlIG93bmVyc2hpcCBvZiB0aGUKKyAgICAgICAgIG1lbW9yeSBmb3IgZmls ZXMgYWxsb2NhdGVkIGluIG1lbW9yeS4gICovCisgICAgICBpZiAob2JqZmls ZS0+b2JmZC0+ZmxhZ3MgJiBCRkRfSU5fTUVNT1JZKQorICAgICAgICBiaW0g PSAoc3RydWN0IGJmZF9pbl9tZW1vcnkgKikgb2JqZmlsZS0+b2JmZC0+aW9z dHJlYW07CiAgICAgICBpZiAoIWJmZF9jbG9zZSAob2JqZmlsZS0+b2JmZCkp CiAJd2FybmluZyAoXygiY2Fubm90IGNsb3NlIFwiJXNcIjogJXMiKSwKIAkJ IG5hbWUsIGJmZF9lcnJtc2cgKGJmZF9nZXRfZXJyb3IgKCkpKTsKKyAgICAg IGlmIChiaW0gIT0gTlVMTCkKKyAgICAgICAgeworICAgICAgICAgIHhmcmVl IChiaW0tPmJ1ZmZlcik7CisgICAgICAgICAgeGZyZWUgKGJpbSk7CisgICAg ICAgIH0KICAgICAgIHhmcmVlIChuYW1lKTsKICAgICB9CiAKSW5kZXg6IGdk Yi9kb2MvZ2RiLnRleGluZm8KPT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1Mg ZmlsZTogL2N2cy9zcmMvc3JjL2dkYi9kb2MvZ2RiLnRleGluZm8sdgpyZXRy aWV2aW5nIHJldmlzaW9uIDEuNjA4CmRpZmYgLXUgLXIxLjYwOCBnZGIudGV4 aW5mbwotLS0gZ2RiL2RvYy9nZGIudGV4aW5mbwkyMCBKdWwgMjAwOSAxODo1 MTo0MSAtMDAwMAkxLjYwOAorKysgZ2RiL2RvYy9nZGIudGV4aW5mbwkyOCBK dWwgMjAwOSAyMTozMjowNSAtMDAwMApAQCAtMTU5LDYgKzE1OSw3IEBACiAq IEVtYWNzOjogICAgICAgICAgICAgICAgICAgICAgIFVzaW5nIEB2YWx1ZXtH REJOfSB1bmRlciBAc2N7Z251fSBFbWFjcwogKiBHREIvTUk6OiAgICAgICAg ICAgICAgICAgICAgICBAdmFsdWV7R0RCTn0ncyBNYWNoaW5lIEludGVyZmFj ZS4KICogQW5ub3RhdGlvbnM6OiAgICAgICAgICAgICAgICAgQHZhbHVle0dE Qk59J3MgYW5ub3RhdGlvbiBpbnRlcmZhY2UuCisqIEpJVCBJbnRlcmZhY2U6 OiAgICAgICAgICAgICAgIFVzaW5nIHRoZSBKSVQgZGVidWdnaW5nIGludGVy ZmFjZS4KIAogKiBHREIgQnVnczo6ICAgICAgICAgICAgICAgICAgICBSZXBv cnRpbmcgYnVncyBpbiBAdmFsdWV7R0RCTn0KIApAQCAtMjU4MjIsNiArMjU4 MjMsMTM2IEBACiBmb2xsb3dlZCBieSBvbmUgb3IgbW9yZSBsb3dlcmNhc2Ug aGV4IGRpZ2l0cyAobm90ZSB0aGF0IHRoaXMgZG9lcyBub3QKIGRlcGVuZCBv biB0aGUgbGFuZ3VhZ2UpLgogCitAbm9kZSBKSVQgSW50ZXJmYWNlCitAY2hh cHRlciBKSVQgQ29tcGlsYXRpb24gSW50ZXJmYWNlCitAY2luZGV4IGp1c3Qt aW4tdGltZSBjb21waWxhdGlvbgorQGNpbmRleCBKSVQgY29tcGlsYXRpb24g aW50ZXJmYWNlCisKK1RoaXMgY2hhcHRlciBkb2N1bWVudHMgQHZhbHVle0dE Qk59J3MgQGRmbntqdXN0LWluLXRpbWV9IChKSVQpIGNvbXBpbGF0aW9uCitp bnRlcmZhY2UuICBBIEpJVCBjb21waWxlciBpcyBhIHByb2dyYW0gb3IgbGli cmFyeSB0aGF0IGdlbmVyYXRlcyBuYXRpdmUKK2V4ZWN1dGFibGUgY29kZSBh dCBydW50aW1lIGFuZCBleGVjdXRlcyBpdCwgdXN1YWxseSBpbiBvcmRlciB0 byBhY2hpZXZlIGdvb2QKK3BlcmZvcm1hbmNlIHdoaWxlIG1haW50YWluaW5n IHBsYXRmb3JtIGluZGVwZW5kZW5jZS4gCisKK1Byb2dyYW1zIHRoYXQgdXNl IEpJVCBjb21waWxhdGlvbiBhcmUgbm9ybWFsbHkgZGlmZmljdWx0IHRvIGRl YnVnIGJlY2F1c2UKK3BvcnRpb25zIG9mIHRoZWlyIGNvZGUgYXJlIGdlbmVy YXRlZCBhdCBydW50aW1lLCBpbnN0ZWFkIG9mIGJlaW5nIGxvYWRlZCBmcm9t CitvYmplY3QgZmlsZXMsIHdoaWNoIGlzIHdoZXJlIEB2YWx1ZXtHREJOfSBu b3JtYWxseSBmaW5kcyB0aGUgcHJvZ3JhbSdzIHN5bWJvbHMKK2FuZCBkZWJ1 ZyBpbmZvcm1hdGlvbi4gIEluIG9yZGVyIHRvIGRlYnVnIHByb2dyYW1zIHRo YXQgdXNlIEpJVCBjb21waWxhdGlvbiwKK0B2YWx1ZXtHREJOfSBoYXMgYW4g aW50ZXJmYWNlIHRoYXQgYWxsb3dzIHRoZSBwcm9ncmFtIHRvIHJlZ2lzdGVy IGluLW1lbW9yeQorc3ltYm9sIGZpbGVzIHdpdGggQHZhbHVle0dEQk59IGF0 IHJ1bnRpbWUuCisKK0lmIHlvdSBhcmUgdXNpbmcgQHZhbHVle0dEQk59IHRv IGRlYnVnIGEgcHJvZ3JhbSB0aGF0IHVzZXMgdGhpcyBpbnRlcmZhY2UsIHRo ZW4KK2l0IHNob3VsZCB3b3JrIHRyYW5zcGFyZW50bHkgc28gbG9uZyBhcyB5 b3UgaGF2ZSBub3Qgc3RyaXBwZWQgdGhlIGJpbmFyeS4gIElmCit5b3UgYXJl IGRldmVsb3BpbmcgYSBKSVQgY29tcGlsZXIsIHRoZW4gdGhlIGludGVyZmFj ZSBpcyBkb2N1bWVudGVkIGluIHRoZSByZXN0CitvZiB0aGlzIGNoYXB0ZXIu ICBBdCB0aGlzIHRpbWUsIHRoZSBvbmx5IGtub3duIGNsaWVudCBvZiB0aGlz IGludGVyZmFjZSBpcyB0aGUKK0xMVk0gSklULgorCitCcm9hZGx5IHNwZWFr aW5nLCB0aGUgSklUIGludGVyZmFjZSBtaXJyb3JzIHRoZSBkeW5hbWljIGxv YWRlciBpbnRlcmZhY2UuICBUaGUKK0pJVCBjb21waWxlciBjb21tdW5pY2F0 ZXMgd2l0aCBAdmFsdWV7R0RCTn0gYnkgd3JpdGluZyBkYXRhIGludG8gYSBn bG9iYWwKK3ZhcmlhYmxlIGFuZCBjYWxsaW5nIGEgZnVjdGlvbiBhdCBhIHdl bGwta25vd24gc3ltYm9sLiAgV2hlbiBAdmFsdWV7R0RCTn0KK2F0dGFjaGVz LCBpdCByZWFkcyBhIGxpbmtlZCBsaXN0IG9mIHN5bWJvbCBmaWxlcyBmcm9t IHRoZSBnbG9iYWwgdmFyaWFibGUgdG8KK2ZpbmQgZXhpc3RpbmcgY29kZSwg YW5kIHB1dHMgYSBicmVha3BvaW50IGluIHRoZSBmdW5jdGlvbiBzbyB0aGF0 IGl0IGNhbiBmaW5kCitvdXQgYWJvdXQgYWRkaXRpb25hbCBjb2RlLgorCitA bWVudQorKiBEZWNsYXJhdGlvbnM6OiAgICAgICAgICAgICAgICBSZWxldmFu dCBDIHN0cnVjdCBkZWNsYXJhdGlvbnMKKyogUmVnaXN0ZXJpbmcgQ29kZTo6 ICAgICAgICAgICAgU3RlcHMgdG8gcmVnaXN0ZXIgY29kZQorKiBVbnJlZ2lz dGVyaW5nIENvZGU6OiAgICAgICAgICBTdGVwcyB0byB1bnJlZ2lzdGVyIGNv ZGUKK0BlbmQgbWVudQorCitAbm9kZSBEZWNsYXJhdGlvbnMKK0BzZWN0aW9u IEpJVCBEZWNsYXJhdGlvbnMKKworVGhlc2UgYXJlIHRoZSByZWxldmFudCBz dHJ1Y3QgZGVjbGFyYXRpb25zIHRoYXQgYSBDIHByb2dyYW0gc2hvdWxkIGlu Y2x1ZGUgdG8KK2ltcGxlbWVudCB0aGUgaW50ZXJmYWNlOgorCitAc21hbGxl eGFtcGxlCit0eXBlZGVmIGVudW0KK0B7CisgIEpJVF9OT0FDVElPTiA9IDAs CisgIEpJVF9SRUdJU1RFUl9GTiwKKyAgSklUX1VOUkVHSVNURVJfRk4KK0B9 IGppdF9hY3Rpb25zX3Q7CisKK3N0cnVjdCBqaXRfY29kZV9lbnRyeQorQHsK KyAgc3RydWN0IGppdF9jb2RlX2VudHJ5ICpuZXh0X2VudHJ5OworICBzdHJ1 Y3Qgaml0X2NvZGVfZW50cnkgKnByZXZfZW50cnk7CisgIGNvbnN0IGNoYXIg KnN5bWZpbGVfYWRkcjsKKyAgdWludDY0X3Qgc3ltZmlsZV9zaXplOworQH07 CisKK3N0cnVjdCBqaXRfZGVzY3JpcHRvcgorQHsKKyAgdWludDMyX3QgdmVy c2lvbjsKKyAgLyogVGhpcyB0eXBlIHNob3VsZCBiZSBqaXRfYWN0aW9uc190 LCBidXQgd2UgdXNlIHVpbnQzMl90CisgICAgIHRvIGJlIGV4cGxpY2l0IGFi b3V0IHRoZSBiaXR3aWR0aC4gICovCisgIHVpbnQzMl90IGFjdGlvbl9mbGFn OworICBzdHJ1Y3Qgaml0X2NvZGVfZW50cnkgKnJlbGV2YW50X2VudHJ5Owor ICBzdHJ1Y3Qgaml0X2NvZGVfZW50cnkgKmZpcnN0X2VudHJ5OworQH07CisK Ky8qIEdEQiBwdXRzIGEgYnJlYWtwb2ludCBpbiB0aGlzIGZ1bmN0aW9uLiAg Ki8KK3ZvaWQgX19hdHRyaWJ1dGVfXygobm9pbmxpbmUpKSBfX2ppdF9kZWJ1 Z19yZWdpc3Rlcl9jb2RlKCkgQHsgQH07CisKKy8qIE1ha2Ugc3VyZSB0byBz cGVjaWZ5IHRoZSB2ZXJzaW9uIHN0YXRpY2FsbHksIGJlY2F1c2UgdGhlCisg ICBkZWJ1Z2dlciBtYXkgY2hlY2sgdGhlIHZlcnNpb24gYmVmb3JlIHdlIGNh biBzZXQgaXQuICAqLworc3RydWN0IGppdF9kZXNjcmlwdG9yIF9faml0X2Rl YnVnX2Rlc2NyaXB0b3IgPSBAeyAxLCAwLCAwLCAwIEB9OworQGVuZCBzbWFs bGV4YW1wbGUKKworSWYgdGhlIEpJVCBpcyBtdWx0aS10aHJlYWRlZCwgdGhl biBpdCBpcyBpbXBvcnRhbnQgdGhhdCB0aGUgSklUIHN5bmNocm9uaXplIGFu eQorbW9kaWZpY2F0aW9ucyB0byB0aGlzIGdsb2JhbCBkYXRhIHByb3Blcmx5 LCB3aGljaCBjYW4gZWFzaWx5IGJlIGRvbmUgYnkgcHV0dGluZworYSBnbG9i YWwgbXV0ZXggYXJvdW5kIG1vZGlmaWNhdGlvbnMgdG8gdGhlc2Ugc3RydWN0 dXJlcy4KKworQG5vZGUgUmVnaXN0ZXJpbmcgQ29kZQorQHNlY3Rpb24gUmVn aXN0ZXJpbmcgQ29kZQorCitUbyByZWdpc3RlciBjb2RlIHdpdGggQHZhbHVl e0dEQk59LCB0aGUgSklUIHNob3VsZCBmb2xsb3cgdGhpcyBwcm90b2NvbDoK KworQGl0ZW1pemUgQGJ1bGxldAorQGl0ZW0KK0dlbmVyYXRlIGFuIG9iamVj dCBmaWxlIGluIG1lbW9yeSB3aXRoIHN5bWJvbHMgYW5kIG90aGVyIGRlc2ly ZWQgZGVidWcKK2luZm9ybWF0aW9uLiAgVGhlIGZpbGUgbXVzdCBpbmNsdWRl IHRoZSB2aXJ0dWFsIGFkZHJlc3NlcyBvZiB0aGUgc2VjdGlvbnMuCisKK0Bp dGVtCitDcmVhdGUgYSBjb2RlIGVudHJ5IGZvciB0aGUgZmlsZSwgd2hpY2gg Z2l2ZXMgdGhlIHN0YXJ0IGFuZCBzaXplIG9mIHRoZSBzeW1ib2wKK2ZpbGUu CisKK0BpdGVtCitBZGQgaXQgdG8gdGhlIGxpbmtlZCBsaXN0IGluIHRoZSBK SVQgZGVzY3JpcHRvci4KKworQGl0ZW0KK1BvaW50IHRoZSByZWxldmFudF9l bnRyeSBmaWVsZCBvZiB0aGUgZGVzY3JpcHRvciBhdCB0aGUgZW50cnkuCisK K0BpdGVtCitTZXQgQGNvZGV7YWN0aW9uX2ZsYWd9IHRvIEBjb2Rle0pJVF9S RUdJU1RFUn0gYW5kIGNhbGwKK0Bjb2Rle19faml0X2RlYnVnX3JlZ2lzdGVy X2NvZGV9LgorQGVuZCBpdGVtaXplCisKK1doZW4gQHZhbHVle0dEQk59IGlz IGF0dGFjaGVkIGFuZCB0aGUgYnJlYWtwb2ludCBmaXJlcywgQHZhbHVle0dE Qk59IHVzZXMgdGhlCitAY29kZXtyZWxldmFudF9lbnRyeX0gcG9pbnRlciBz byBpdCBkb2Vzbid0IGhhdmUgdG8gd2FsayB0aGUgbGlzdCBsb29raW5nIGZv cgorbmV3IGNvZGUuICBIb3dldmVyLCB0aGUgbGlua2VkIGxpc3QgbXVzdCBz dGlsbCBiZSBtYWludGFpbmVkIGluIG9yZGVyIHRvIGFsbG93CitAdmFsdWV7 R0RCTn0gdG8gYXR0YWNoIHRvIGEgcnVubmluZyBwcm9jZXNzIGFuZCBzdGls bCBmaW5kIHRoZSBzeW1ib2wgZmlsZXMuCisKK0Bub2RlIFVucmVnaXN0ZXJp bmcgQ29kZQorQHNlY3Rpb24gVW5yZWdpc3RlcmluZyBDb2RlCisKK0lmIGNv ZGUgaXMgZnJlZWQsIHRoZW4gdGhlIEpJVCBzaG91bGQgdXNlIHRoZSBmb2xs b3dpbmcgcHJvdG9jb2w6CisKK0BpdGVtaXplIEBidWxsZXQKK0BpdGVtCitS ZW1vdmUgdGhlIGNvZGUgZW50cnkgY29ycmVzcG9uZGluZyB0byB0aGUgY29k ZSBmcm9tIHRoZSBsaW5rZWQgbGlzdC4KKworQGl0ZW0KK1BvaW50IHRoZSBA Y29kZXtyZWxldmFudF9lbnRyeX0gZmllbGQgb2YgdGhlIGRlc2NyaXB0b3Ig YXQgdGhlIGNvZGUgZW50cnkuCisKK0BpdGVtCitTZXQgQGNvZGV7YWN0aW9u X2ZsYWd9IHRvIEBjb2Rle0pJVF9VTlJFR0lTVEVSfSBhbmQgY2FsbAorQGNv ZGV7X19qaXRfZGVidWdfcmVnaXN0ZXJfY29kZX0uCitAZW5kIGl0ZW1pemUK KworSWYgdGhlIEpJVCBmcmVlcyBvciByZWNvbXBpbGVzIGNvZGUgd2l0aG91 dCB1bnJlZ2lzdGVyaW5nIGl0LCB0aGVuIEB2YWx1ZXtHREJOfQorYW5kIHRo ZSBKSVQgd2lsbCBsZWFrIHRoZSBtZW1vcnkgdXNlZCBmb3IgdGhlIGFzc29j aWF0ZWQgc3ltYm9sIGZpbGVzLgorCiBAbm9kZSBHREIgQnVncwogQGNoYXB0 ZXIgUmVwb3J0aW5nIEJ1Z3MgaW4gQHZhbHVle0dEQk59CiBAY2luZGV4IGJ1 Z3MgaW4gQHZhbHVle0dEQk59Cg== --001485f5ce6a8db93a046fcad898--