From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 17526 invoked by alias); 17 Nov 2016 20:12:16 -0000 Mailing-List: contact gcc-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Archive: List-Post: List-Help: Sender: gcc-owner@gcc.gnu.org Received: (qmail 17360 invoked by uid 89); 17 Nov 2016 20:12:15 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-2.9 required=5.0 tests=BAYES_20,RP_MATCHES_RCVD,SPF_PASS autolearn=ham version=3.3.2 spammy=4.3, footnote, DRAFT, Guaranteed X-HELO: userp1040.oracle.com Received: from userp1040.oracle.com (HELO userp1040.oracle.com) (156.151.31.81) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Thu, 17 Nov 2016 20:12:05 +0000 Received: from aserv0022.oracle.com (aserv0022.oracle.com [141.146.126.234]) by userp1040.oracle.com (Sentrion-MTA-4.3.2/Sentrion-MTA-4.3.2) with ESMTP id uAHKC29b019963 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK) for ; Thu, 17 Nov 2016 20:12:03 GMT Received: from aserv0121.oracle.com (aserv0121.oracle.com [141.146.126.235]) by aserv0022.oracle.com (8.14.4/8.13.8) with ESMTP id uAHKC1Vw029069 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK) for ; Thu, 17 Nov 2016 20:12:02 GMT Received: from abhmp0006.oracle.com (abhmp0006.oracle.com [141.146.116.12]) by aserv0121.oracle.com (8.13.8/8.13.8) with ESMTP id uAHKBxtj011867 for ; Thu, 17 Nov 2016 20:12:01 GMT Received: from [10.132.138.219] (/10.132.138.219) by default (Oracle Beehive Gateway v4.0) with ESMTP ; Thu, 17 Nov 2016 12:11:59 -0800 Subject: GCC libatomic ABI specification draft References: <8764e547-1dd2-3ebd-2723-6568b4b54092@oracle.com> <1470412312.14544.4.camel@localhost.localdomain> <4a182edd-41a8-4ad9-444a-bf0af567ae98@oracle.com> <8317ec9d-41ad-d806-9144-eac2984cdd38@oracle.com> To: "gcc@gcc.gnu.org" From: Bin Fan Message-ID: Date: Thu, 17 Nov 2016 20:12:00 -0000 User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:45.0) Gecko/20100101 Thunderbird/45.4.0 MIME-Version: 1.0 In-Reply-To: <8317ec9d-41ad-d806-9144-eac2984cdd38@oracle.com> Content-Type: multipart/mixed; boundary="------------343853C2E98271530B27CBD2" X-SW-Source: 2016-11/txt/msg00072.txt.bz2 This is a multi-part message in MIME format. --------------343853C2E98271530B27CBD2 Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 7bit Content-length: 12493 Got an error from gcc@gcc.gnu.org alias. Remove the pdf attachment and re-send it to the alias ... On 11/14/2016 4:34 PM, Bin Fan wrote: > Hi All, > > I have an updated version of libatomic ABI specification draft. Please > take a look to see if it matches GCC implementation. The purpose of > this document is to establish an official GCC libatomic ABI, and allow > compatible compiler and runtime implementations on the affected > platforms. > > Compared to the last version you have reviewed, here are the major > updates > > - Rewrite the notes in N2.3.2 to explicit mention the implementation > of __atomic_compare_exchange follows memcmp/memcpy semantics, and the > consequence of it. > > - Rewrite section 3 to replace "lock-free" operations with "hardware > backed" instructions. The digest of this section is: 1) inlineable > atomics must be implemented with the hardware backed atomic > instructions. 2) for non-inlineable atomics, the compiler must > generate a runtime call, and the runtime support function is free to > use any implementation. > > - The Rationale section in section 3 is also revised to remove the > mentioning of "lock-free", but there is not major change of concept. > > - Add note N3.1 to emphasize the assumption of general hardware > supported atomic instruction > > - Add note N3.2 to discuss the issues of cmpxchg16b > > - Add a paragraph in section 4.1 to specify memory_order_consume must > be implemented through memory_order_acquire. Section 4.2 emphasizes it > again. > > - The specification of each runtime functions mostly maps to the > corresponding generic functions in the C11 standard. Two functions are > worth noting: > 1) C11 atomic_compare_exchange compares and updates the "value" while > __atomic_compare_exchange functions in this ABI compare and update the > "memory", which implies the memcmp and memcpy semantics. > 2) The specification of __atomic_is_lock_free allows both a per-object > result and a per-type result. A per-type implementation could pass > NULL, or a faked address as the address of the object. A per-object > implementation could pass the actual address of the object. > > Thanks, > - Bin > > On 8/10/2016 3:33 PM, Bin Fan wrote: >> Hi Torvald, >> >> Thanks a lot for your review. Please find my response inline... >> >> On 8/5/2016 8:51 AM, Torvald Riegel wrote: >>> [CC'ing Andrew MacLeod, who has been working on the atomics too.] >>> >>> On Tue, 2016-08-02 at 16:28 -0700, Bin Fan wrote: >>>> I'm wondering if you have a chance to review the revised libatomic ABI >>>> draft. The email was rejected by the gcc alias once due to some html >>>> stuff in the email text. Though I resend a pure txt format version, >>>> I'm >>>> not sure if it worked, so this time I drop the gcc alias. >>>> >>>> If you do not have any issues, I'm wondering if this ABI draft >>>> could be >>>> published in some GCC wiki or documentation? I'd be happy to prepare a >>>> version without the "notes" part. >>> >>> >>> >>>> Because the padding of structure types is not affected by _Atomic >>>> modifier, the contents of any padding in the atomic structure object >>>> is still undefined, therefore the atomic compare and exchange >>>> operation >>>> on such objects may fail due to the difference of the padding. >>> I think this isn't quite clear. >> This paragraph is just to clarify that _Atomic does not change (e.g. >> zeroing out) the padding >> bits, whose content were undefined in the current SPARC and x86 ABI >> specifications, and will >> still be undefined for _Atomic aggregates. >> >> This paragraph is part of "notes" rather than the main body of the >> ABI draft. If it is not clear, >> I will change it by mentioning the memcmp/memcpy-like semantics. >> >>> Perhaps it's easier to describe it in >>> the way that C++ does, referring to the memcmp/memcpy-like semantics of >>> compare_exchange (e.g., see N4606 29.6.5p27). >>> C11 isn't quite clear about this, or I am misunderstanding what they >>> really mean by "value of the object" (see N1570 7.17.7.4p2). >> This is the subject of C11 Defect Report 431: >> http://www.open-std.org/jtc1/sc22/wg14/www/docs/n2059.htm#dr_431 >> which has been fixed to align with the C++ standard and closed with a >> Proposed Technical Corrigendum which will appear in the next revision >> of the C standard (~2017). >> >> Note that in section 4.2 of this ABI draft, the function description of >> __atomic_compare_exchange uses "compares the memory pointed to by >> object" instead of >> "compares the value pointed to by object" as you quoted from N1570 >> 7.17.7.4p. >> >> Since you asked about whether you should review the function >> descriptions, this is one >> of the two worth noticing cases. I will mention another one later in >> this email. >>> >>>> Lock-free atomic operations does not require runtime support >>>> functions. >>>> The compiler may generate inlined code for efficiency. This ABI >>>> specification defines a few inlineable atomic types. An atomic type >>>> is inlineable means the compiler may generate inlined instruction >>>> sequence for atomic operations on such types. The implementation of >>>> the support functions for the inlineable atomic types must also be >>>> lock free. >>> I think it's better to say that the support functions must be >>> compatible >>> with what the compiler would generate. That they are "lock-free" is >>> just a forward progress property. This also applies to later >>> paragraphs >>> in the draft. Maybe we need to use a different term here, so we can >>> use >>> it for what we want (ie, a HW-backed, inlineable operation). >> I agree that lock-free atomic operations does not equivalent to >> HW-backed atomic >> operations. I will think about how to mention it in the ABI. My >> current thought is as >> you suggested, to change "lock-free" to "HW-backed". >> >> So an example of the updated specification would be like this: >> The implementation of the support functions for the inlineable atomic >> types must use >> HW-backed atomic instructions. For atomic operations on not >> inlineable types, the compiler >> must always generate support function calls. >>> >>>> On all affected platforms, atomic types whose size equal to 1, 2, 4 >>>> or 8 and alignment matches the size are inlineable >>>> >>>> On the 64-bit x86 platform which supports the cmpxchg16b instruction, >>>> 16-byte atomic types whose alignment matches the size is inlineable. >>> I still think making 16-byte atomic types inlined / lock-free when all >>> we have is a wide cmpxchg is wrong. AFAIK there is no atomic 16-byte >>> load instruction on x86 (or is there?), even though cmpxchg16b might be >>> available. >> At least GCC 6.1.0 still generates cmpxchg16b for an atomic load with >> -march=native >> on my haswell machine. >>> I'd prefer if we could fix this in GCC in some way instead >>> of requiring this by putting it into the ABI. This also applies to the >>> double-wide CAS on i386. >>> IIRC, there is a BZ about this somewhere, but I don't find it. >>> Andrew, do you remember? >>> >>> Basically, there is a correctness and a performance problem. >>> The atomic variable might be in a read-only-mapped page, which isn't >>> unreasonable given that the C/C++ standards explicitly require >>> lock-free >>> atomics to be address-free too, which is a clear hint towards enabling >>> mapping memory to more than one place in the address space. So, if the >>> user does an atomic load on a 16-byte variable accessible through a >>> read-only page, we'll get a segfault. >>> One could argue that C/C++ don't provide any mmap feature, and thus you >>> can't expect this to work. But this doesn't seem a good argument to >>> make from a user's perspective. >>> >>> Second, I'd argue that the "lock-free" property is used by most >>> users as >>> an indication of which atomics might be as fast as one would expect >>> typical HW to be -- not because they are interested in the forward >>> progress aspect or the address-free aspect. If atomic loads do cause >>> writes, the performance of a load will be horrible because of the >>> contention in cases where many threads issue loads. >> If the 16-byte atomic read is implemented in software, the current >> implementation >> still uses a lock/mutex, meaning a write will happen somewhere, maybe >> not directly >> on the object memory but on somewhere else(a spinlock or a mutex). It >> can resolve >> the read-only issue you mentioned, because the write is on the lock >> rather than on the >> object, But there would still be the performance issue of contention. >> >> There are some advanced software algorithms that can make this >> most-reader-occational-writer scenario more efficient. (For example, >> seqlock mentioned >> in here: http://www.hpl.hp.com/techreports/2012/HPL-2012-68.pdf) >> The performance of such algorithms would depend highly on the use >> cases, so maybe the >> user should implement their own algorithm instead of relying on the >> compiler/libatomic >> library to provide the best performance in all cases. >>> This is even more >>> unfortunate considering that if one has a 64b CAS, then one can >>> increment a 64b counter which can be considered to never overflow, >>> which >>> allows one to build efficient atomic snapshots of larger atomic >>> variables. >>> OTOH, some people would like to use the GCC builtins to get access to >>> cmpxchg16b. >>> >>> Irrespective of how we deal with this, we should at least document the >>> current state and the problems associated with it. Maybe we should >>> consider providing separate builtins for cmpxchg16b. >> I'm OK with the current GCC implementation, which I believe matches >> the ABI draft. And >> we can document the current issues as appendix or whatever. >> If GCC is willing to change, I'm also OK with specifying that 16-byte >> atomic types are >> not inlineable. >>> >>>> "Inlineability" is a compile time property, which in most cases >>>> depends >>>> only on the type. In a few cases it also depends on whether the target >>>> ISA supports the cmpxchg16b instruction. A compiler may get the ISA >>>> information by either compilation flags or inquiring the hardware >>>> capabilities. When the hardware capabilities information is not >>>> available, >>>> the compiler should assume the cmpxchg16b instruction is not >>>> supported. >>> I think that strictly speaking, it always depends on the target ISA, >>> because we assume that it provides 1-byte atomic operations, for >>> example. >> Right. The ABI specification itself is ISA-specific. For example, if >> we call it SPARC V9 ABI >> amendment, then it is safe to assume that the ISA support 1,2,4,8 >> -byte atomic hardware >> instructions, then it is safe to make such specification of >> "inlineable" in the ABI. >> >> I'm not very familiar with x86 ISA versioning. I used to assume >> cmpxchg16b is available >> on all today's mainstream x86 platforms until I found Xeon Phi does >> not support it. That's >> why the ABI says it depends on target ISA. >>> >>>> memory_order_consume = 1, >>> [...] >>>> Refer to C standard for the meaning of each enumeration constants of >>>> memory_order type. >>> [...] >>>> Most of the functions listed in this section can be mapped to the >>>> generic >>>> functions with the same semantics in the C standard. Refer to the C >>>> standard for the description of the generic functions and how each >>>> memory >>>> order works. >>> We need to say that memory_order_consume must be implemented through >>> memory_order_acquire. The compiler can't preserve dependencies >>> correctly and will never be able to for the current specification of >>> consume. Thus, we must fall back to acquire MO. >> As far as I can tell, neither SPARC or x86 has instructions that may >> benefit from the consume >> order. So I'm happy to make this change. >>> >>> I haven't looked at the descriptions of the individual atomic >>> operations >>> in detail. Let me know if I should. >> In the above I mentioned there may be two places in the descriptions >> that may be interesting. >> I have mentioned one in the above (__atomic_compare_exchange). The >> other one is >> __atomic_is_lock_free. This is based on Richard's comments. >> >> Thanks again for your review, I will send a new draft based on your >> comments. Please send me >> any further comments/suggestions. >> >> Thanks, >> - Bin >>> >>> >>> Torvald >>> >> --------------343853C2E98271530B27CBD2 Content-Type: text/plain; charset=UTF-8; name="libatomicABIdraft.txt" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="libatomicABIdraft.txt" Content-length: 68666 77u/TElCQVRPTUlDIEFCSSBTUEVDSUZJQ0FUSU9OIERSQUZUDQoNCg0KMS4g T3ZlcnZpZXcNCg0KDQoxLjEuIFdoeSB3ZSBuZWVkIGFuIEFCSSBmb3IgYXRv bWljcw0KDQoNCkMxMSBzdGFuZGFyZCBhbGxvd3MgZGlmZmVyZW50IHNpemUs IHJlcHJlc2VudGF0aW9uIGFuZCBhbGlnbm1lbnQgYmV0d2VlbiBhdG9taWMg dHlwZXMgYW5kIHRoZSBjb3JyZXNwb25kaW5nIG5vbi1hdG9taWMgdHlwZXMg WzFdLiBUaGUgc2l6ZSwgcmVwcmVzZW50YXRpb24gYW5kIGFsaWdubWVudCBv ZiBhdG9taWMgdHlwZXMgbmVlZCB0byBiZSBzcGVjaWZpZWQgaW4gdGhlIEFC SSBzcGVjaWZpY2F0aW9uLg0KDQoNCkEgcnVudGltZSBzdXBwb3J0IGxpYnJh cnksIGxpYmF0b21pYywgYWxyZWFkeSBleGlzdHMgb24gU29sYXJpcyBhbmQg TGludXguIFRoZSBpbnRlcmZhY2Ugb2YgdGhpcyBsaWJyYXJ5IG5lZWRzIHRv IGJlIHN0YW5kYXJkaXplZCBhcyBwYXJ0IG9mIHRoZSBBQkkgc3BlY2lmaWNh dGlvbiwgc28gdGhhdA0KDQoNCi0gT24gYSBzeXN0ZW0gdGhhdCBzdXBwbHkg bGliYXRvbWljLCBhbGwgY29tcGlsZXJzIGluIGNvbXBsaWFuY2Ugd2l0aCB0 aGUgQUJJIGNhbiBnZW5lcmF0ZSBjb21wYXRpYmxlIGJpbmFyaWVzIGxpbmtp bmcgdGhpcyBsaWJyYXJ5Lg0KLSBUaGUgYmluYXJpZXMgY2FuIGJlIGJhY2t3 YXJkIGNvbXBhdGlibGUgb24gZGlmZmVyZW50IHZlcnNpb25zIG9mIHRoZSBz eXN0ZW0gYXMgbG9uZyBhcyB0aGV5IHN1cHBvcnQgdGhlIHNhbWUgQUJJLg0K DQoNCjEuMi4gV2hhdCBkb2VzIHRoZSBhdG9taWNzIEFCSSBzcGVjaWZ5DQoN Cg0KVGhlIEFCSSBzcGVjaWZpZXMgdGhlIGZvbGxvd2luZw0KDQoNCi0gRGF0 YSByZXByZXNlbnRhdGlvbiBvZiB0aGUgYXRvbWljIHR5cGVzLg0KLSBUaGUg bmFtZXMgYW5kIGJlaGF2aW91ciBvZiB0aGUgaW1wbGVtZW50YXRpb24tc3Bl Y2lmaWMgc3VwcG9ydCBmdW5jdGlvbnMuDQotIFRoZSB2ZXJzaW9uaW5nIG9m IHRoZSBsaWJyYXJ5IGV4dGVybmFsIHN5bWJvbHMNCi0gVGhlIGF0b21pYyB0 eXBlcyBmb3Igd2hpY2ggdGhlIGNvbXBpbGVyIG1heSBnZW5lcmF0ZSBpbmxp bmVkIGNvZGUuDQotIGNvbXBhdGliaWxpdHkgcmVxdWlyZW1lbnQgZm9yIHRo ZSBpbmxpbmVkIGF0b21pYyBvcGVyYXRpb25zLg0KDQoNCk5vdGUgdGhhdCB0 aGUgbGliYXRvbWljIGZ1bmN0aW9ucyBzcGVjaWZpZWQgaW4gdGhlIEMgU3Rh bmRhcmQgYXJlIG5vdCBwYXJ0IG9mIHRoaXMgQUJJLCBiZWNhdXNlIHRoZXkg YXJlIG5vdCBpbXBsZW1lbnRhdGlvbi1zcGVjaWZpYyBmdW5jdGlvbnMuIA0K DQoNCjEuMy4gUGxhdGZvcm1zIGFmZmVjdGVkIGJ5IHRoaXMgQUJJIHNwZWNp ZmljYXRpb24NCg0KDQpTUEFSQyAoMzItYml0IGFuZCA2NC1iaXQpDQp4ODYg KDMyLWJpdCBhbmQgNjQtYml0KQ0KDQoNCkl0IGlzIGFzc3VtZSB0aGF0IDY0 LWJpdCBTUEFSQyBwbGF0Zm9ybSBvbmx5IGltcGxlbWVudCBUU08gKFRvdGFs IFN0b3JlIE9yZGVyKSBtZW1vcnkgbW9kZWwuDQoNCg0KU2VjdGlvbiAxLjEg YW5kIDEuMiwgYW5kIHRoZSBSYXRpb25hbGUsIE5vdGVzIGFuZCBBcHBlbmRp eCBzZWN0aW9ucyBhcmUgZm9yIGV4cGxhbmF0aW9uIHB1cnBvc2Ugb25seSwg aXQgaXMgbm90IHBhcnQgb2YgdGhlIGZvcm1hbCBBQkkgc3BlY2lmaWNhdGlv bi4NCg0KDQpOb3Rlcw0KDQoNCk4xLjMuMS4gU29tZSA2NC1iaXQgeDg2IHBs YXRmb3Jtcywgc3VjaCBhcyBzb21lIGVhcmx5IEFNRDY0IHByb2Nlc3NvcnMg YW5kIHRoZSBtb3JlIG1vZGVybiBJbnRlbCBYZW9uIFBoaSBjby1wcm9jZXNz b3IgZG8gbm90IHN1cHBvcnQgdGhlIGNtcHhjaGcxNmIgaW5zdHJ1Y3Rpb24u IFdlIHdpbGwgZGlzY3VzcyBpbiBkZXRhaWwgYWJvdXQgY21weGNoZzE2YiBp biBTZWN0aW9uIDMuDQoNCg0KMi4gRGF0YSBSZXByZXNlbnRhdGlvbg0KDQoN CjIuMS4gR2VuZXJhbCBSdWxlcw0KDQoNClRoZSBnZW5lcmFsIHJ1bGVzIG9m IHRoZSBzaXplLCByZXByZXNlbnRhdGlvbiBhbmQgYWxpZ25tZW50IG9mIGF0 b21pYyB0eXBlc+KAmSBkYXRhIHJlcHJlc2VudGF0aW9uIGFyZSB0aGUgZm9s bG93aW5nIA0KDQoNCjEpIEF0b21pYyB0eXBlcyBhc3N1bWUgdGhlIHNhbWUg c2l6ZSB3aXRoIHRoZSBjb3JyZXNwb25kaW5nIG5vbi1hdG9taWMgdHlwZXMu IA0KDQoNCjIpIEF0b21pYyB0eXBlcyBhc3N1bWUgdGhlIHNhbWUgcmVwcmVz ZW50YXRpb24gd2l0aCB0aGUgY29ycmVzcG9uZGluZyBub24tYXRvbWljIHR5 cGVzLiANCg0KDQozKSBBdG9taWMgdHlwZXMgYXNzdW1lIHRoZSBzYW1lIGFs aWdubWVudCB3aXRoIHRoZSBjb3JyZXNwb25kaW5nIG5vbi1hdG9taWMgdHlw ZXMsIHdpdGggdGhlIGZvbGxvd2luZyBleGNlcHRpb25zOg0KDQoNCk9uIDMy LSBhbmQgNjQtYml0IHg4NiBwbGF0Zm9ybXMgYW5kIG9uIDY0LWJpdCBTUEFS QyBwbGF0Zm9ybXMsIGF0b21pYyB0eXBlcyBvZiBzaXplIDEsIDIsIDQsIDgg b3IgMTYgLWJ5dGUgaGF2ZSB0aGUgYWxpZ25tZW50IHRoYXQgbWF0Y2hlcyB0 aGUgc2l6ZS4gDQoNCg0KT24gMzItYml0IFNQQVJDIHBsYXRmb3JtcywgYXRv bWljIHR5cGVzIG9mIHNpemUgMSwgMiwgNCBvciA4LWJ5dGUgaGF2ZSB0aGUg YWxpZ25tZW50IHRoYXQgbWF0Y2hlcyB0aGUgc2l6ZS4gSWYgdGhlIGFsaWdu bWVudCBvZiBhIDE2LWJ5dGUgbm9uLWF0b21pYyB0eXBlIGlzIGxlc3MgdGhh biA4LWJ5dGUsIHRoZSBhbGlnbm1lbnQgb2YgdGhlIGNvcnJlc3BvbmRpbmcg YXRvbWljIHR5cGUgaXMgcmFpc2VkIHRvIDgtYnl0ZS4NCg0KDQpOb3Rlcw0K DQoNCk4yLjEuMS4gVGhlIGFib3ZlIHJ1bGVzIGFyZSBhcHBsaWVkIHRvIGJv dGggc2NhbGFyIHR5cGVzIGFuZCBhZ2dyZWdhdGUgdHlwZXMuDQoNCg0KMi4y LiBBdG9taWMgc2NhbGFyIHR5cGVzDQoNCg0KeDg2DQoNCg0KICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTFA2NCAoQU1ENjQp ICAgICAgICAgICAgICAgICAgICAgSUxQMzIgKGkzODYpDQpDIFR5cGUgICAg ICAgICAgICAgICAgICAgICAgICAgIHNpemVvZiAgICBBbGlnbm1lbnQgIElu bGluZWFibGUgIHNpemVvZiAgICBBbGlnbm1lbnQgIElubGluZWFibGUNCmF0 b21pY19mbGFnICAgICAgICAgICAgICAgICAgICAgMSAgICAgICAgIDEgICAg ICAgICAgWSAgICAgICAgICAgMSAgICAgICAgIDEgICAgICAgICAgWQ0KX0F0 b21pYyBfQm9vbCAgICAgICAgICAgICAgICAgICAxICAgICAgICAgMSAgICAg ICAgICBZICAgICAgICAgICAxICAgICAgICAgMSAgICAgICAgICBZDQpfQXRv bWljIGNoYXIgICAgICAgICAgICAgICAgICAgIDEgICAgICAgICAxICAgICAg ICAgIFkgICAgICAgICAgIDEgICAgICAgICAxICAgICAgICAgIFkNCl9BdG9t aWMgc2lnbmVkIGNoYXIgICAgICAgICAgICAgMSAgICAgICAgIDEgICAgICAg ICAgWSAgICAgICAgICAgMSAgICAgICAgIDEgICAgICAgICAgWQ0KX0F0b21p YyB1bnNpZ25lZCBjaGFyICAgICAgICAgICAxICAgICAgICAgMSAgICAgICAg ICBZICAgICAgICAgICAxICAgICAgICAgMSAgICAgICAgICBZDQpfQXRvbWlj IHNob3J0ICAgICAgICAgICAgICAgICAgIDIgICAgICAgICAyICAgICAgICAg IFkgICAgICAgICAgIDIgICAgICAgICAyICAgICAgICAgIFkNCl9BdG9taWMg c2lnbmVkIHNob3J0ICAgICAgICAgICAgMiAgICAgICAgIDIgICAgICAgICAg WSAgICAgICAgICAgMiAgICAgICAgIDIgICAgICAgICAgWQ0KX0F0b21pYyB1 bnNpZ25lZCBzaG9ydCAgICAgICAgICAyICAgICAgICAgMiAgICAgICAgICBZ ICAgICAgICAgICAyICAgICAgICAgMiAgICAgICAgICBZDQpfQXRvbWljIGlu dCAgICAgICAgICAgICAgICAgICAgIDQgICAgICAgICA0ICAgICAgICAgIFkg ICAgICAgICAgIDQgICAgICAgICA0ICAgICAgICAgIFkNCl9BdG9taWMgc2ln bmVkIGludCAgICAgICAgICAgICAgNCAgICAgICAgIDQgICAgICAgICAgWSAg ICAgICAgICAgNCAgICAgICAgIDQgICAgICAgICAgWQ0KX0F0b21pYyBlbnVt ICAgICAgICAgICAgICAgICAgICA0ICAgICAgICAgNCAgICAgICAgICBZICAg ICAgICAgICA0ICAgICAgICAgNCAgICAgICAgICBZDQpfQXRvbWljIHVuc2ln bmVkIGludCAgICAgICAgICAgIDQgICAgICAgICA0ICAgICAgICAgIFkgICAg ICAgICAgIDQgICAgICAgICA0ICAgICAgICAgIFkNCl9BdG9taWMgbG9uZyAg ICAgICAgICAgICAgICAgICAgOCAgICAgICAgIDggICAgICAgICAgWSAgICAg ICAgICAgNCAgICAgICAgIDQgICAgICAgICAgWQ0KX0F0b21pYyBzaWduZWQg bG9uZyAgICAgICAgICAgICA4ICAgICAgICAgOCAgICAgICAgICBZICAgICAg ICAgICA0ICAgICAgICAgNCAgICAgICAgICBZDQpfQXRvbWljIHVuc2lnbmVk IGxvbmcgICAgICAgICAgIDggICAgICAgICA4ICAgICAgICAgIFkgICAgICAg ICAgIDQgICAgICAgICA0ICAgICAgICAgIFkNCl9BdG9taWMgbG9uZyBsb25n ICAgICAgICAgICAgICAgOCAgICAgICAgIDggICAgICAgICAgWSAgICAgICAg ICAgOCAgICAgICAgIDggICAgICAgICAgWQ0KX0F0b21pYyBzaWduZWQgbG9u ZyBsb25nICAgICAgICA4ICAgICAgICAgOCAgICAgICAgICBZICAgICAgICAg ICA4ICAgICAgICAgOCAgICAgICAgICBZDQpfQXRvbWljIHVuc2lnbmVkIGxv bmcgbG9uZyAgICAgIDggICAgICAgICA4ICAgICAgICAgIFkgICAgICAgICAg IDggICAgICAgICA4ICAgICAgICAgIFkNCl9BdG9taWMgX19pbnQxMjggKHdp dGggYXQxNikgICAgMTYgICAgICAgIDE2ICAgICAgICAgWSAgICAgICAgICAg ICAgIG5vdCBhcHBsaWNhYmxlDQpfQXRvbWljIF9faW50MTI4ICh3L28gYXQx NikgICAgIDE2ICAgICAgICAxNiAgICAgICAgIE4gICAgICAgICAgICAgICBu b3QgYXBwbGljYWJsZQ0KYW55LXR5cGUgX0F0b21pYyAqICAgICAgICAgICAg ICA4ICAgICAgICAgOCAgICAgICAgICBZICAgICAgICAgICA0ICAgICAgICAg NCAgICAgICAgICBZDQpfQXRvbWljIGZsb2F0ICAgICAgICAgICAgICAgICAg IDQgICAgICAgICA0ICAgICAgICAgIFkgICAgICAgICAgIDQgICAgICAgICA0 ICAgICAgICAgIFkNCl9BdG9taWMgZG91YmxlICAgICAgICAgICAgICAgICAg OCAgICAgICAgIDggICAgICAgICAgWSAgICAgICAgICAgOCAgICAgICAgIDgg ICAgICAgICAgWQ0KX0F0b21pYyBsb25nIGRvdWJsZSAod2l0aCBhdDE2KSAx NiAgICAgICAgMTYgICAgICAgICBZICAgICAgICAgICAxMiAgICAgICAgNCAg ICAgICAgICBODQpfQXRvbWljIGxvbmcgZG91YmxlICh3L28gYXQxNikgIDE2 ICAgICAgICAxNiAgICAgICAgIE4gICAgICAgICAgIDEyICAgICAgICA0ICAg ICAgICAgIE4NCl9BdG9taWMgZmxvYXQgX0NvbXBsZXggICAgICAgICAgOCAg ICAgICAgIDgoNCkgICAgICAgWSAgICAgICAgICAgOCAgICAgICAgIDgoNCkg ICAgICAgWQ0KX0F0b21pYyBkb3VibGUgX0NvbXBsZXggICAgICAgICAxNiAg ICAgICAgMTYoOCkgICAgICBZICAgICAgICAgICAxNiAgICAgICAgMTYoOCkg ICAgICBODQogICAgICAgICAgICAgICAgICAgICh3aXRoIGF0MTYpDQpfQXRv bWljIGRvdWJsZSBfQ29tcGxleCAgICAgICAgIDE2ICAgICAgICAxNig4KSAg ICAgIE4gICAgICAgICAgIDE2ICAgICAgICAxNig4KSAgICAgIE4NCiAgICAg ICAgICAgICAgICAgICAgKHcvbyBhdDE2KQ0KX0F0b21pYyBsb25nIGRvdWJs ZSBfQ29tcGxleCAgICAzMiAgICAgICAgMTYgICAgICAgICBOICAgICAgICAg ICAyNCAgICAgICAgNCAgICAgICAgICBODQpfQXRvbWljIGZsb2F0IF9JbWFn aW5hcnkgICAgICAgIDQgICAgICAgICA0ICAgICAgICAgIFkgICAgICAgICAg IDQgICAgICAgICA0ICAgICAgICAgIFkNCl9BdG9taWMgZG91YmxlIF9JbWFn aW5hcnkgICAgICAgOCAgICAgICAgIDggICAgICAgICAgWSAgICAgICAgICAg OCAgICAgICAgIDggICAgICAgICAgWQ0KX0F0b21pYyBsb25nIGRvdWJsZSBf SW1hZ2luYXJ5ICAxNiAgICAgICAgMTYgICAgICAgICBZICAgICAgICAgICAx MiAgICAgICAgNCAgICAgICAgICBODQogICAgICAgICAgICAgICAgICAgICh3 aXRoIGF0MTYpDQpfQXRvbWljIGxvbmcgZG91YmxlIF9JbWFnaW5hcnkgIDE2 ICAgICAgICAxNiAgICAgICAgIE4gICAgICAgICAgIDEyICAgICAgICA0ICAg ICAgICAgIE4NCiAgICAgICAgICAgICAgICAgICAgKHcvbyBhdDE2KQ0KDQoN ClNQQVJDDQoNCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgTFA2NCAodjkpICAgICAgICAgICAgICAgICAgICAgICAgSUxQ MzIgKHNwYXJjKQ0KQyBUeXBlICAgICAgICAgICAgICAgICAgICAgICAgICBz aXplb2YgICAgQWxpZ25tZW50ICBJbmxpbmVhYmxlICBzaXplb2YgICAgQWxp Z25tZW50ICBJbmxpbmVhYmxlDQphdG9taWNfZmxhZyAgICAgICAgICAgICAg ICAgICAgIDEgICAgICAgICAxICAgICAgICAgIFkgICAgICAgICAgIDEgICAg ICAgICAxICAgICAgICAgIFkNCl9BdG9taWMgX0Jvb2wgICAgICAgICAgICAg ICAgICAgMSAgICAgICAgIDEgICAgICAgICAgWSAgICAgICAgICAgMSAgICAg ICAgIDEgICAgICAgICAgWQ0KX0F0b21pYyBjaGFyICAgICAgICAgICAgICAg ICAgICAxICAgICAgICAgMSAgICAgICAgICBZICAgICAgICAgICAxICAgICAg ICAgMSAgICAgICAgICBZDQpfQXRvbWljIHNpZ25lZCBjaGFyICAgICAgICAg ICAgIDEgICAgICAgICAxICAgICAgICAgIFkgICAgICAgICAgIDEgICAgICAg ICAxICAgICAgICAgIFkNCl9BdG9taWMgdW5zaWduZWQgY2hhciAgICAgICAg ICAgMSAgICAgICAgIDEgICAgICAgICAgWSAgICAgICAgICAgMSAgICAgICAg IDEgICAgICAgICAgWQ0KX0F0b21pYyBzaG9ydCAgICAgICAgICAgICAgICAg ICAyICAgICAgICAgMiAgICAgICAgICBZICAgICAgICAgICAyICAgICAgICAg MiAgICAgICAgICBZDQpfQXRvbWljIHNpZ25lZCBzaG9ydCAgICAgICAgICAg IDIgICAgICAgICAyICAgICAgICAgIFkgICAgICAgICAgIDIgICAgICAgICAy ICAgICAgICAgIFkNCl9BdG9taWMgdW5zaWduZWQgc2hvcnQgICAgICAgICAg MiAgICAgICAgIDIgICAgICAgICAgWSAgICAgICAgICAgMiAgICAgICAgIDIg ICAgICAgICAgWQ0KX0F0b21pYyBpbnQgICAgICAgICAgICAgICAgICAgICA0 ICAgICAgICAgNCAgICAgICAgICBZICAgICAgICAgICA0ICAgICAgICAgNCAg ICAgICAgICBZDQpfQXRvbWljIHNpZ25lZCBpbnQgICAgICAgICAgICAgIDQg ICAgICAgICA0ICAgICAgICAgIFkgICAgICAgICAgIDQgICAgICAgICA0ICAg ICAgICAgIFkNCl9BdG9taWMgZW51bSAgICAgICAgICAgICAgICAgICAgNCAg ICAgICAgIDQgICAgICAgICAgWSAgICAgICAgICAgNCAgICAgICAgIDQgICAg ICAgICAgWQ0KX0F0b21pYyB1bnNpZ25lZCBpbnQgICAgICAgICAgICA0ICAg ICAgICAgNCAgICAgICAgICBZICAgICAgICAgICA0ICAgICAgICAgNCAgICAg ICAgICBZDQpfQXRvbWljIGxvbmcgICAgICAgICAgICAgICAgICAgIDggICAg ICAgICA4ICAgICAgICAgIFkgICAgICAgICAgIDQgICAgICAgICA0ICAgICAg ICAgIFkNCl9BdG9taWMgc2lnbmVkIGxvbmcgICAgICAgICAgICAgOCAgICAg ICAgIDggICAgICAgICAgWSAgICAgICAgICAgNCAgICAgICAgIDQgICAgICAg ICAgWQ0KX0F0b21pYyB1bnNpZ25lZCBsb25nICAgICAgICAgICA4ICAgICAg ICAgOCAgICAgICAgICBZICAgICAgICAgICA0ICAgICAgICAgNCAgICAgICAg ICBZDQpfQXRvbWljIGxvbmcgbG9uZyAgICAgICAgICAgICAgIDggICAgICAg ICA4ICAgICAgICAgIFkgICAgICAgICAgIDggICAgICAgICA4ICAgICAgICAg IFkNCl9BdG9taWMgc2lnbmVkIGxvbmcgbG9uZyAgICAgICAgOCAgICAgICAg IDggICAgICAgICAgWSAgICAgICAgICAgOCAgICAgICAgIDggICAgICAgICAg WQ0KX0F0b21pYyB1bnNpZ25lZCBsb25nIGxvbmcgICAgICA4ICAgICAgICAg OCAgICAgICAgICBZICAgICAgICAgICA4ICAgICAgICAgOCAgICAgICAgICBZ DQpfQXRvbWljIF9faW50MTI4ICAgICAgICAgICAgICAgIDE2ICAgICAgICAg ICAgMTYgICAgICAgICBOICAgICAgICAgICAgICAgbm90IGFwcGxpY2FibGUN CmFueS10eXBlIF9BdG9taWMgKiAgICAgICAgICAgICAgOCAgICAgICAgIDgg ICAgICAgICAgWSAgICAgICAgICAgNCAgICAgICAgIDQgICAgICAgICAgWQ0K X0F0b21pYyBmbG9hdCAgICAgICAgICAgICAgICAgICA0ICAgICAgICAgNCAg ICAgICAgICBZICAgICAgICAgICA0ICAgICAgICAgNCAgICAgICAgICBZDQpf QXRvbWljIGRvdWJsZSAgICAgICAgICAgICAgICAgIDggICAgICAgICA4ICAg ICAgICAgIFkgICAgICAgICAgIDggICAgICAgICA4ICAgICAgICAgIFkNCl9B dG9taWMgbG9uZyBkb3VibGUgICAgICAgICAgICAgMTYgICAgICAgIDE2ICAg ICAgICAgTiAgICAgICAgICAgMTYgICAgICAgIDggICAgICAgICAgTg0KX0F0 b21pYyBmbG9hdCBfQ29tcGxleCAgICAgICAgICA4ICAgICAgICAgOCg0KSAg ICAgICBZICAgICAgICAgICA4ICAgICAgICAgOCg0KSAgICAgICBZDQpfQXRv bWljIGRvdWJsZSBfQ29tcGxleCAgICAgICAgIDE2ICAgICAgICAxNig4KSAg ICAgIE4gICAgICAgICAgIDE2ICAgICAgICA4ICAgICAgICAgIE4NCl9BdG9t aWMgbG9uZyBkb3VibGUgX0NvbXBsZXggICAgMzIgICAgICAgIDE2ICAgICAg ICAgTiAgICAgICAgICAgMzIgICAgICAgIDggICAgICAgICAgTg0KX0F0b21p YyBmbG9hdCBfSW1hZ2luYXJ5ICAgICAgICA0ICAgICAgICAgNCAgICAgICAg ICBZICAgICAgICAgICA0ICAgICAgICAgNCAgICAgICAgICBZDQpfQXRvbWlj IGRvdWJsZSBfSW1hZ2luYXJ5ICAgICAgIDggICAgICAgICA4ICAgICAgICAg IFkgICAgICAgICAgIDggICAgICAgICA4ICAgICAgICAgIFkNCl9BdG9taWMg bG9uZyBkb3VibGUgX0ltYWdpbmFyeSAgMTYgICAgICAgIDE2ICAgICAgICAg TiAgICAgICAgICAgMTYgICAgICAgIDggICAgICAgICAgTg0KDQoNCndpdGgg YXQxNiBtZWFucyB0aGUgSVNBIHN1cHBvcnRzIGNtcHhjaGcxNmIsIHcvbyBh dDE2IG1lYW5zIHRoZSBJU0ENCmRvZXMgbm90IHN1cHBvcnQgY21weGNoZzE2 Yi4NCg0KDQpOb3Rlcw0KDQoNCk4yLjIuMS4gQyBzdGFuZGFyZCBhbHNvIHNw ZWNpZmllcyBzb21lIGF0b21pYyBpbnRlZ2VyIHR5cGVzLiBUaGV5IGFyZSBu b3QgaW4gdGhlIGFib3ZlIHRhYmxlIGJlY2F1c2UgdGhleSBoYXZlIHRoZSBz YW1lIHJlcHJlc2VudGF0aW9uIGFuZCBhbGlnbm1lbnQgcmVxdWlyZW1lbnRz IGFzIHRoZSBjb3JyZXNwb25kaW5nIGRpcmVjdCB0eXBlcyBbMl0uDQoNCg0K TjIuMi4yLiBXZSB3aWxsIGRpc2N1c3MgdGhlIGlubGluZWFibGUgY29sdW1u IGFuZCBfX2ludDEyOCB0eXBlIGluIHNlY3Rpb24gMy4NCg0KDQpOMi4yLjMu IFRoZSB2YWx1ZSBpbiBwYXJlbnRoZXNpcyBpcyB0aGUgYWxpZ25tZW50IG9m IHRoZSBjb3JyZXNwb25kaW5nIG5vbi1hdG9taWMgdHlwZSwgaWYgaXQgaXMg ZGlmZmVyZW50IGZyb20gdGhlIGFsaWdubWVudCBvZiB0aGUgYXRvbWljIHR5 cGUuDQoNCg0KTjIuMi40LiBCZWNhdXNlIF9BdG9taWMgc3BlY2lmaWVyIGNh biBub3QgYmUgdXNlZCBvbiBhIGZ1bmN0aW9uIHR5cGUgWzddIGFuZCBfQXRv bWljIHF1YWxpZmllciBjYW4gbm90IG1vZGlmeSBhIGZ1bmN0aW9uIHR5cGUg WzhdLCB0aGVyZSBpcyBubyBhdG9taWMgZnVuY3Rpb24gdHlwZSBsaXN0ZWQg aW4gdGhlIGFib3ZlIHRhYmxlLg0KDQoNCk4yLjIuNS4gT24gMzItYml0IHg4 NiBwbGF0Zm9ybXMsIGxvbmcgZG91YmxlIGlzIG9mIHNpemUgMTItYnl0ZSBh bmQgaXMgb2YgYWxpZ25tZW50IDQtYnl0ZS4gVGhpcyBBQkkgc3BlY2lmaWNh dGlvbiBkb2VzIG5vdCBpbmNyZWFzZSB0aGUgYWxpZ25tZW50IG9mIF9BdG9t aWMgbG9uZyBkb3VibGUgdHlwZS4NCg0KDQoyLjMgQXRvbWljIEFnZ3JlZ2F0 ZXMgYW5kIFVuaW9ucw0KDQoNCkF0b21pYyBzdHJ1Y3R1cmVzIG9yIHVuaW9u cyBtYXkgaGF2ZSBkaWZmZXJlbnQgYWxpZ25tZW50IGNvbXBhcmVkIHRvIHRo ZSBjb3JyZXNwb25kaW5nIG5vbi1hdG9taWMgdHlwZXMsIHN1YmplY3QgdG8g cnVsZSAzKSBpbiBzZWN0aW9uIDIuMS4gVGhlIGFsaWdubWVudCBjaGFuZ2Ug b25seSBhZmZlY3RzIHRoZSBib3VuZGFyeSB3aGVyZSBhbiBlbnRpcmUgc3Ry dWN0dXJlIG9yIHVuaW9uIGlzIGFsaWduZWQuIFRoZSBvZmZzZXQgb2YgZWFj aCBtZW1iZXIsIHRoZSBpbnRlcm5hbCBwYWRkaW5nIGFuZCB0aGUgc2l6ZSBv ZiB0aGUgc3RydWN0dXJlIG9yIHVuaW9uIGFyZSBub3QgYWZmZWN0ZWQuDQoN Cg0KVGhlIGZvbGxvd2luZyB0YWJsZSBzaG93cyBzZWxlY3RlZCBleGFtcGxl cyBvZiB0aGUgc2l6ZSBhbmQgYWxpZ25tZW50IG9mIGF0b21pYyBzdHJ1Y3R1 cmUgdHlwZXMuDQoNCg0KeDg2DQoNCg0KICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgTFA2NCAoQU1ENjQpICAgICAgICAgICAg ICAgICAgICAgIElMUDMyIChpMzg2KQ0KQyBUeXBlICAgICAgICAgICAgICAg ICAgICAgICAgICBzaXplb2YgICAgQWxpZ25tZW50ICBJbmxpbmVhYmxlICAg c2l6ZW9mICAgIEFsaWdubWVudCAgSW5saW5lYWJsZQ0KX0F0b21pYyBzdHJ1 Y3Qge2NoYXIgYVsyXTt9ICAgICAyICAgICAgICAgMigxKSAgICAgICBZICAg ICAgICAgICAgMiAgICAgICAgIDIoMSkgICAgICAgWQ0KX0F0b21pYyBzdHJ1 Y3Qge2NoYXIgYVszXTt9ICAgICAzICAgICAgICAgMSAgICAgICAgICBOICAg ICAgICAgICAgMyAgICAgICAgIDEgICAgICAgICAgTg0KX0F0b21pYyBzdHJ1 Y3Qge3Nob3J0IGFbMl07fSAgICA0ICAgICAgICAgNCgyKSAgICAgICBZICAg ICAgICAgICAgNCAgICAgICAgIDQoMikgICAgICAgWQ0KX0F0b21pYyBzdHJ1 Y3Qge2ludCBhWzJdO30gICAgICA4ICAgICAgICAgOCg0KSAgICAgICBZICAg ICAgICAgICAgOCAgICAgICAgIDgoNCkgICAgICAgWQ0KX0F0b21pYyBzdHJ1 Y3Qge2NoYXIgYzsNCiAgICAgICAgICAgICAgICBpbnQgaTt9ICAgICAgICAg OCAgICAgICAgIDgoNCkgICAgICAgWSAgICAgICAgICAgIDggICAgICAgICA4 KDQpICAgICAgIFkNCl9BdG9taWMgc3RydWN0IHtjaGFyIGNbMl07DQogICAg ICAgICAgICAgICAgc2hvcnQgczsNCiAgICAgICAgICAgICAgICBpbnQgaTt9 ICAgICAgICAgOCAgICAgICAgIDgoNCkgICAgICAgWSAgICAgICAgICAgIDgg ICAgICAgICA4KDQpICAgICAgIFkNCl9BdG9taWMgc3RydWN0IHtjaGFyIGFb MTZdO30gICAgMTYgICAgICAgIDE2KDEpICAgICAgWSAgICAgICAgICAgIDE2 ICAgICAgICAxNigxKSAgICAgIE4NCiAgICAgICAgICAgICAgICAgICAgKHdp dGggYXQxNikNCl9BdG9taWMgc3RydWN0IHtjaGFyIGFbMTZdO30gICAgMTYg ICAgICAgIDE2KDEpICAgICAgTiAgICAgICAgICAgIDE2ICAgICAgICAxNigx KSAgICAgIE4NCiAgICAgICAgICAgICAgICAgICAgKHcvbyBhdDE2KQ0KDQoN ClNQQVJDDQoNCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgTFA2NCAodjkpICAgICAgICAgICAgICAgICAgICAgICBJTFAz MiAoc3BhcmMpDQpDIFR5cGUgICAgICAgICAgICAgICAgICAgICAgICAgIHNp emVvZiAgICBBbGlnbm1lbnQgIElubGluZWFibGUgICBzaXplb2YgICAgQWxp Z25tZW50ICBJbmxpbmVhYmxlDQpfQXRvbWljIHN0cnVjdCB7Y2hhciBhWzJd O30gICAgIDIgICAgICAgICAyKDEpICAgICAgIFkgICAgICAgICAgICAyICAg ICAgICAgMigxKSAgICAgICBZDQpfQXRvbWljIHN0cnVjdCB7Y2hhciBhWzNd O30gICAgIDMgICAgICAgICAxICAgICAgICAgIE4gICAgICAgICAgICAzICAg ICAgICAgMSAgICAgICAgICBODQpfQXRvbWljIHN0cnVjdCB7c2hvcnQgYVsy XTt9ICAgIDQgICAgICAgICA0KDIpICAgICAgIFkgICAgICAgICAgICA0ICAg ICAgICAgNCgyKSAgICAgICBZDQpfQXRvbWljIHN0cnVjdCB7aW50IGFbMl07 fSAgICAgIDggICAgICAgICA4KDQpICAgICAgIFkgICAgICAgICAgICA4ICAg ICAgICAgOCg0KSAgICAgICBZDQpfQXRvbWljIHN0cnVjdCB7Y2hhciBjOw0K ICAgICAgICAgICAgICAgIGludCBpO30gICAgICAgICA4ICAgICAgICAgOCg0 KSAgICAgICBZICAgICAgICAgICAgOCAgICAgICAgIDgoNCkgICAgICAgWQ0K X0F0b21pYyBzdHJ1Y3Qge2NoYXIgY1syXTsNCiAgICAgICAgICAgICAgICBz aG9ydCBzOw0KICAgICAgICAgICAgICAgIGludCBpO30gICAgICAgICA4ICAg ICAgICAgOCg0KSAgICAgICBZICAgICAgICAgICAgOCAgICAgICAgIDgoNCkg ICAgICAgWQ0KX0F0b21pYyBzdHJ1Y3Qge2NoYXIgYVsxNl07fSAgICAxNiAg ICAgICAgMTYoMSkgICAgICBOICAgICAgICAgICAgMTYgICAgICAgIDgoMSkg ICAgICAgTg0KDQoNCndpdGggYXQxNiBtZWFucyB0aGUgSVNBIHN1cHBvcnRz IGNtcHhjaGcxNmIsIHcvbyBhdDE2IG1lYW5zIHRoZSBJU0EgZG9lcyBub3Qg c3VwcG9ydCBjbXB4Y2hnMTZiLg0KDQoNCk5vdGVzDQoNCg0KTjIuMy4xLiBU aGUgdmFsdWUgaW4gcGFyZW50aGVzaXMgaXMgdGhlIGFsaWdubWVudCBvZiB0 aGUgY29ycmVzcG9uZGluZyBub24tYXRvbWljIHR5cGUsIGlmIGl0IGlzIGRp ZmZlcmVudCBmcm9tIHRoZSBhbGlnbm1lbnQgb2YgdGhlIGF0b21pYyB0eXBl Lg0KDQoNCk4yLjMuMi4gRm9yIGFnZ3JlZ2F0ZXMgdGhhdCBhcmUgbm90IG1v ZGlmaWVkIGJ5IF9BdG9taWMsIHRoZSBjb250ZW50cyBvZiB0aGUgcGFkZGlu ZyBiaXRzIGFyZSB1bmRlZmluZWQuIEZvciBfQXRvbWljIGFnZ3JlZ2F0ZXMs IHRoZSBjb250ZW50cyBvZiB0aGUgcGFkZGluZyBiaXRzIGFyZSBhbHNvIHVu ZGVmaW5lZC4gVGhlIGltcGxlbWVudGF0aW9uIG9mIF9fYXRvbWljX2NvbXBh cmVfZXhjaGFuZ2UgZm9sbG93cyB0aGUgbWVtY21wL21lbWNweSBzZW1hbnRp Y3MsIHdoaWNoIG1heSByZXN1bHQgaW4gdW5zdWNjZXNzZnVsIGNvbXBhcmlz b25zIGR1ZSB0byB0aGUgdW5kZWZpbmVkIGNvbnRlbnRzIG9mIHRoZSBwYWRk aW5nIGJpdHMuIEMxMSBpcyBub3QgY2xlYXIgYWJvdXQgdGhpcy4gRFIgNDMx IFs5XSByYWlzZWQgdGhpcyBpc3N1ZSwgd2hpY2ggaGFzIGJlZW4gZml4ZWQg YW5kIHdpbGwgYXBwZWFyIGluIHRoZSBuZXh0IHJldmlzaW9uIG9mIHRoZSBD IHN0YW5kYXJkICh+MjAxNykuDQoNCg0KTjIuMy4zLiBUaGUgc3BlY2lhbCBh bGlnbm1lbnQgcmVxdWlyZW1lbnQgb24gMTYtYnl0ZSBhdG9taWMgc3RydWN0 IHR5cGVzIG1pZ2h0IGJlIHVzZWZ1bCBmb3IgdGhlIGZvbGxvd2luZzoNCi0g UmVkdWNpbmcgc2hhcmluZyBsb2NrcyB3aXRoIG90aGVyIGF0b21pY3MuDQot IEFsbG93aW5nIHJlbGF0ZWQgcnVudGltZSBzdXBwb3J0IGZ1bmN0aW9ucyB0 byBjaG9vc2UgbW9yZSBlZmZpY2llbnQgaW5zdHJ1Y3Rpb25zLg0KDQoNCjIu NC4gQml0LWZpZWxkcw0KDQoNCkl0IGlzIGltcGxlbWVudGF0aW9uIGRlZmlu ZWQgaW4gdGhlIEMgc3RhbmRhcmQgdGhhdCB3aGV0aGVyIGF0b21pYyBiaXQt ZmllbGQgdHlwZXMgYXJlIHBlcm1pdHRlZCBbM10uIEluIHRoaXMgQUJJIHNw ZWNpZmljYXRpb24sIFRoZSByZXByZXNlbnRhdGlvbiBvZiBhdG9taWMgYml0 LWZpZWxkIGlzIHVuc3BlY2lmaWVkLg0KDQoNCjMuIElubGluZWFibGUgUHJv cGVydHkNCg0KDQpTb21lIGF0b21pYyBvcGVyYXRpb24gY2FuIG1hcCBkaXJl Y3RseSB0byBoYXJkd2FyZSBiYWNrZWQgYXRvbWljIGluc3RydWN0aW9ucy4g VG8gaW1wbGVtZW50IGFuIGF0b21pYyBvcGVyYXRpb24sIHRoZSBjb21waWxl ciBtYXkgZ2VuZXJhdGUgaW5saW5lZCBjb2RlIHVzaW5nIHN1Y2ggaW5zdHJ1 Y3Rpb25zLCBvciBhIHN1cHBvcnQgZnVuY3Rpb24gY2FsbC4gVGhpcyBBQkkg c3BlY2lmaWNhdGlvbiBkZWZpbmVzIGEgZmV3IGlubGluZWFibGUgYXRvbWlj IHR5cGVzLiBUaGUgc3BlY2lmaWNhdGlvbiBvZiB0aGUgaW5saW5lYWJsZSBh dHRyaWJ1dGUgaXMgdGhlIGZvbGxvd2luZzoNCg0KDQoxLiBUaGUgY29tcGls ZXIgbWF5IGdlbmVyYXRlIGlubGluZWQgaGFyZHdhcmUgYmFja2VkIGF0b21p YyBpbnN0cnVjdGlvbnMgZm9yIGF0b21pYyBvcGVyYXRpb25zIG9uIGFuIG9i amVjdCBvZiBpbmxpbmVhYmxlIGF0b21pYyB0eXBlLiBUaGUgY29tcGlsZXIg aXMgYWxzbyBhbGxvd2VkIHRvIGdlbmVyYXRlIGEgc3VwcG9ydCBmdW5jdGlv biBjYWxsLg0KDQoNCjIuIFRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgc3Vw cG9ydCBmdW5jdGlvbnMgZm9yIGFuIGlubGluZWFibGUgYXRvbWljIHR5cGUg bXVzdCB1c2UgaGFyZHdhcmUgYmFja2VkIGF0b21pYyBpbnN0cnVjdGlvbnMg dG8gYmUgY29tcGF0aWJsZSB3aXRoIHRoZSBpbmxpbmVkIGNvZGUgdGhlIGNv bXBpbGVyIG1heSBnZW5lcmF0ZS4NCg0KDQozLiBJZiBhbiBhdG9taWMgdHlw ZSBpcyBub3QgaW5saW5lYWJsZSwgdGhlIGNvbXBpbGVyIHNoYWxsIGFsd2F5 cyBnZW5lcmF0ZSBzdXBwb3J0IGZ1bmN0aW9uIGNhbGxzIGZvciBhdG9taWMg b3BlcmF0aW9ucyBvbiB0aGUgb2JqZWN0cyBvZiB0aGUgdHlwZS4gVGhlIGlt cGxlbWVudGF0aW9uIG9mIHRoZSBzdXBwb3J0IGZ1bmN0aW9ucyBmb3IgdGhl IHR5cGUgaXMgZnJlZSB0byB1c2UgaGFyZHdhcmUgYmFja2VkIGF0b21pYyBp bnN0cnVjdGlvbnMgb3IgYW55IG90aGVyIGFwcHJvYWNoZXMuDQoNCg0KT24g YWxsIGFmZmVjdGVkIHBsYXRmb3JtcywgaWYgdGhlIHNpemUgb2YgYW4gYXRv bWljIHR5cGUgaXMgMSwgMiwgNCBvciA4IC1ieXRlIGFuZCBpdHMgYWxpZ25t ZW50IG1hdGNoZXMgdGhlIHNpemUsIHRoZW4gdGhlIGF0b21pYyB0eXBlIGlz IGlubGluZWFibGUuDQoNCg0KT24gdGhlIDY0LWJpdCB4ODYgcGxhdGZvcm0g d2hpY2ggc3VwcG9ydHMgdGhlIGNtcHhjaGcxNmIgaW5zdHJ1Y3Rpb24sIGlm IHRoZSBzaXplIG9mIGFuIGF0b21pYyB0eXBlIGlzIDE2LWJ5dGUgYW5kIGl0 cyBhbGlnbm1lbnQgbWF0Y2hlcyB0aGUgc2l6ZSwgdGhlbiB0aGUgYXRvbWlj IHR5cGUgaXMgaW5saW5lYWJsZSAoc2VlIG5vdGVzIGluIHRoaXMgc2VjdGlv biBmb3Igc29tZSBjYXZlYXRzIGFib3V0IHRoaXMpLg0KDQoNClJhdGlvbmFs ZQ0KDQoNCkl0IGlzIGFzc3VtZWQgdGhhdCBhbiBhdG9taWMgb2JqZWN0IG11 c3QgYmUgYWNjZXNzZWQgYnkgY29tcGF0aWJsZSBpbnN0cnVjdGlvbnMgdG8g YWNoaWV2ZSBhdG9taWNpdHkuIEZvciBleGFtcGxlLCBhIEMgYXRvbWljX2Nv bXBhcmVfZXhjaGFuZ2Ugb3BlcmF0aW9uIG1heSBiZSBpbXBsZW1lbnRlZCBi eSB0aGUgaGFyZHdhcmUgY29tcGFyZS1hbmQtc3dhcCBpbnN0cnVjdGlvbiwg b3IgYnkgZG9pbmcgdGhlIGNvbXBhcmUgYW5kIHRoZSBzd2FwIGluIHR3byBz ZXBhcmF0ZWQgc3RlcHMgcHJvdGVjdGVkIGJ5IGEgc29mdHdhcmUgbG9jay4g VGhlIHR3byBpbXBsZW1lbnRhdGlvbnMgYXJlIG5vdCBjb21wYXRpYmxlIGJl Y2F1c2UgdGhlIHNvZnR3YXJlIGxvY2sgdXNlZCBieSB0aHJlYWQgVDIgaXMg bm90IHZpc2libGUgdG8gdGhyZWFkIFQx4oCZcyBoYXJkd2FyZSBjb21wYXJl LWFuZC1zd2FwIGluc3RydWN0aW9uIHRoZXJlZm9yZSB0aGUgc3dhcCBtYXkg aGFwcGVuIHdoaWxlIHRocmVhZCBUMSBpcyBob2xkaW5nIHRoZSBsb2NrLiBT byB0aGUgdHdvIGltcGxlbWVudGF0aW9ucyBzaG91bGQgbm90IGJlIHVzZWQg dG8gYWNjZXNzIHRoZSBzYW1lIG9iamVjdCBhdCB0aGUgc2FtZSB0aW1lIGlu IGEgcnVuIG9mIHRoZSBwcm9ncmFtLg0KDQoNCklmIHRoZSBjb21waWxlciBh bHdheXMgZ2VuZXJhdGVzIHN1cHBvcnQgZnVuY3Rpb24gY2FsbHMgZm9yIGFs bCBhdG9taWMgb3BlcmF0aW9ucywgdGhlIGFmb3JlbWVudGlvbmVkIGNvbXBh dGliaWxpdHkgcHJvYmxlbSB3b3VsZCBuZXZlciBoYXBwZW4uIEJ1dCB0aGUg Y29tcGlsZXIgc2hvdWxkIGJlIGFsbG93ZWQsIHlldCBub3QgYmUgZm9yY2Vk LCB0byBnZW5lcmF0ZSBpbmxpbmVkIGNvZGUgZm9yIHNvbWUgYXRvbWljIG9w ZXJhdGlvbnMgZm9yIGJldHRlciBwZXJmb3JtYW5jZS4gSXQgc2hvdWxkIGJl IGd1YXJhbnRlZWQgdGhhdCBpZi93aGVuIHRoZSBjb21waWxlciBnZW5lcmF0 ZXMgaW5saW5lZCBjb2RlLCBpdCBtdXN0IGJlIGNvbXBhdGlibGUgd2l0aCB0 aGUgbGlicmFyeSBpbXBsZW1lbnRhdGlvbi4NCg0KDQpTbyB0aGlzIEFCSSBz cGVjaWZpZXMgYSBmZXcgaW5saW5lYWJsZSBhdG9taWMgdHlwZXMsIGZvciB3 aGljaCB0aGUgY29tcGlsZXIgbWF5IGdlbmVyYXRlIGlubGluZWQgY29kZSwg YW5kIGJvdGggdGhlIGlubGluZWQgY29kZSBhbmQgdGhlIGltcGxlbWVudGF0 aW9uIG9mIHRoZSBjb3JyZXNwb25kaW5nIHN1cHBvcnQgZnVuY3Rpb25zIG11 c3QgdXNlIGhhcmR3YXJlIGJhY2tlZCBhdG9taWMgaW5zdHJ1Y3Rpb25zLiAN Cg0KDQpUd28gYWx0ZXJuYXRpdmVzIGNvbnNpZGVyZWQNCg0KDQoxLiBUbyBz cGVjaWZ5IGEgdHlwZSBiYXNlZCBjcml0ZXJpYSwgYW5kIGZvciBhbGwgdHlw ZXMgdGhhdCBtZWV0IHRoZSBjcml0ZXJpYSwgYm90aCBjb21waWxlciBhbmQg c3VwcG9ydCBmdW5jdGlvbiBtdXN0IHVzZSBoYXJkd2FyZSBiYWNrZWQgYXRv bWljIGluc3RydWN0aW9uczsgYW5kIGZvciBhbGwgdHlwZXMgdGhhdCBkbyBu b3QgbWVldCB0aGUgY3JpdGVyaWEsIG5laXRoZXIgdGhlIGNvbXBpbGVyIG5v ciB0aGUgc3VwcG9ydCBmdW5jdGlvbiBtYXkgdXNlIGhhcmR3YXJlIGJhY2tl ZCBhdG9taWMgaW5zdHJ1Y3Rpb25zLg0KIA0KVGhlIEMgYW5kIEMrKyBzdGFu ZGFyZCBzZWVtIHRvIGJhY2sgdGhpcyBhcHByb2FjaDogQysrIHN0YW5kYXJk IHByb3ZpZGVzIGEgcXVlcnkgdGhhdCByZXR1cm5zIGEgcGVyLXR5cGUgcmVz dWx0IGFib3V0IHdoZXRoZXIgdGhlIHR5cGUgaXMgbG9jay1mcmVlIFs0XS4g QyBzdGFuZGFyZCBkb2VzIG5vdCBndWFyYW50ZWUgdGhhdCB0aGUgcXVlcnkg cmVzdWx0IGlzIHBlci10eXBlIFs1XSwgYnV0IGl0IHdpbGwgYmUgaW4gdGhl IG5leHQgcmV2aXNpb24gWzZdLiBUaGUgcHJvYmxlbSBpcyB0aGF0IHRoZSBx dWVyeSByZXN1bHQgZG9lcyBub3QgbmVjZXNzYXJpbHkgcmVmbGVjdCB0aGUg aW1wbGVtZW50YXRpb24gb2YgdGhlIGF0b21pYyBvcGVyYXRpb24gb24gdGhl DQpxdWVyaWVkIHR5cGUuIEV2ZW4gaXNfbG9ja19mcmVlIHJldHVybnMgZmFs c2UgZm9yIGFuIG9iamVjdCBiZWNhdXNlIG9mIGl0cyB0eXBlLCB0aGUgaW1w bGVtZW50YXRpb24gbWF5IHN0aWxsIHVzZSBoYXJkd2FyZSBiYWNrZWQgYXRv bWljIGluc3RydWN0aW9ucyBmb3IgdGhlIG9iamVjdC4gU2F5IHRoZXJlIGlz IGEgc2l6ZT0zLWJ5dGUgYWxpZ25tZW50PTEtYnl0ZSBhdG9taWMgdHlwZS4g VGhpcyB0eXBlIGNhbiBub3QgYWx3YXlzIHVzZSBoYXJkd2FyZSBiYWNrZWQg YXRvbWljIGluc3RydWN0aW9uIGJlY2F1c2Ugb2YgaXRzIGFsaWdubWVudCwg YnV0IGl0IGNhbiB3aGVuIHRoZSBydW50aW1lIGFkZHJlc3MgaGFwcGVucyB0 byBiZSBhIDQtYnl0ZSBhbGlnbmVkLiBTbyB0aGlzIGFwcHJvYWNoIGlzIHVu bmVjZXNzYXJpbHkgY29uc2VydmF0aXZlLg0KDQoNClRoZSBBQkkgZGlmZmVy cyBmcm9tIHRoaXMgYWx0ZXJuYXRpdmUgaW4gdGhhdCB0aGUgQUJJIGFsbG93 cyB0aGUgcnVudGltZSBpbXBsZW1lbnRhdGlvbiBmb3IgYSBub24taW5saW5l YWJsZSBhdG9taWMgdHlwZSB0byB1c2UgaGFyZHdhcmUgYmFja2VkIGF0b21p YyBpbnN0cnVjdGlvbnMuDQoNCg0KMi4gVG8gc3BlY2lmeSBhbiBvYmplY3Qg YmFzZWQgY3JpdGVyaWEsIGFuZCBpZiBhbiBhdG9taWMgb2JqZWN0IG1lZXRz IHRoZSBjcml0ZXJpYSwgYm90aCB0aGUgY29tcGlsZXIgYW5kIHRoZSBzdXBw b3J0IGZ1bmN0aW9ucyBtdXN0IHVzZSBoYXJkd2FyZSBiYWNrZWQgYXRvbWlj IGluc3RydWN0aW9uczsgb3RoZXJ3aXNlLCBuZWl0aGVyIHRoZSBjb21waWxl ciBub3IgdGhlIHN1cHBvcnQgZnVuY3Rpb24gbWF5IHVzZSB0aGUgaGFyZHdh cmUgYmFja2VkIGF0b21pYyBpbnN0cnVjdGlvbnMuIA0KDQoNClRoZSBjcml0 ZXJpYSB3b3VsZCBiZSBiYXNlZCBvbiBzb21lIHJ1bnRpbWUgaW5mb3JtYXRp b24sIHN1Y2ggdGhlIGFsaWdubWVudCBvZiB0aGUgb2JqZWN04oCZcyBhZGRy ZXNzLCB3aGljaCB3b3VsZCBiZSBkaWZmaWN1bHQgZm9yIHRoZSBjb21waWxl ciB0byBnZXQgYXQgdGhlIGNvbXBpbGUgdGltZS4gSXQgd291bGQgYmUgbXVj aCBlYXNpZXIgZm9yIHRoZSBydW50aW1lIHRvIGRvIHN1Y2ggb3B0aW1pemF0 aW9uLCBhbmQgbGV0IHRoZSBjb21waWxlciBhbHdheXMgZ2VuZXJhdGVzIGNh bGxzIGZvciBzdWNoIHR5cGUgb2Ygb2JqZWN0cy4NCg0KDQpOb3RlczoNCg0K DQpOMy4xLiBUaGlzIEFCSSBhc3N1bWVzIDEsIDIsIDQsIDggLWJ5dGUgaGFy ZHdhcmUgYXRvbWljIGluc3RydWN0aW9ucyBhcmUgYXZhaWxhYmxlIG9uIGFs bCByZWxldmFudCBwbGF0Zm9ybXMuIFRoaXMgbWVhbnMgZm9yIG9iamVjdHMg b2YgdGhvc2Ugc2l6ZXMsIG5hdHVyYWxseSBhbGlnbmVkIGxvYWQgYW5kIHN0 b3JlIGluc3RydWN0aW9ucyBhcmUgZ3VhcmFudGVlZCB0byBiZSBhdG9taWMs IGFuZCB2YXJpYW50cyBvZiBhdG9taWMgY29tcGFyZS1hbmQtc3dhcCBpbnN0 cnVjdGlvbnMgYXJlIGF2YWlsYWJsZSBhcyB3ZWxsLg0KDQoNCk4zLjIuIEFi b3V0IGNtcHhjaGcxNmINCg0KDQpUaGlzIEFCSSBkb2N1bWVudCBzcGVjaWZp ZXMgdGhhdCBpZiBjbXB4Y2hnMTZiIGlzIHN1cHBvcnRlZCBvbiBhIDY0LWJp dCB4ODYgcGxhdGZvcm0sIHRoZW4gMTYtYnl0ZSBwcm9wZXJseSBhbGlnbmVk IGF0b21pY3MgYXJlIGlubGluZWFibGUgb24gdGhlIHBsYXRmb3JtLiANCg0K DQpUaGUgb25seSBhdmFpbGFibGUgaW5zdHJ1Y3Rpb24gb24gc3VjaCBwbGF0 Zm9ybXMgdG8gaW1wbGVtZW50IGF0b21pYyBsb2FkLCBzdG9yZSwgZXhjaGFu Z2UgYW5kIGNvbXBhcmVfZXhjaGFuZ2Ugb3BlcmF0aW9ucyBpcyBjbXB4Y2hn MTZiLiBPbmUgY291bGQgYXJndWUgdGhhdCB4bW0gcmVnaXN0ZXJzIGNhbiBi ZSB1c2VkIHRvIGRvIGEgMTYtYnl0ZSBtZW1vcnkgbW92ZSwgYnV0IGl0IGlz IG5vdCBndWFyYW50ZWVkIHRvIGJlIGF0b21pYyBpbiB0aGUgY3VycmVudCBJ bnRlbCBtYW51YWwgWzEyXS4gVGhpcyBjYXVzZXMgdGhlIGZvbGxvd2luZyBj YXZlYXRzIHRvIGltcGxlbWVudCB0aGUgY3VycmVudCBBQkkgc3BlY2lmaWNh dGlvbg0KDQoNCjEuIGNtcHhjaGcxNmIgcGVyZm9ybXMgYSB3cml0ZSBvbiB0 aGUgYWZmZWN0ZWQgbWVtb3J5IGxvY2F0aW9uLiBJZiB0aGUgYXRvbWljIHZh cmlhYmxlIGlzIGluIGEgcmVhZC1vbmx5IG1hcHBlZCBwYWdlLCB0aGVuIHVz aW5nIGNtcHhjaGcxNmIgdG8gZG8gdGhlIGxvYWQgd2lsbCBjYXVzZSBhIHNl Z2ZhdWx0LiBPbmUgY291bGQgYXJndWUgdGhhdCBtbWFwIGlzIG5vdCBwYXJ0 IG9mIEMvQysrIHNwZWNpZmljYXRpb24uIEJ1dCBzb21lIG5vdGVzIGluIEMv QysrIHNwZWNpZmljYXRpb25zIGltcGx5IHRoZSBtbWFwIHNlbWFudGljcy4g QzExIGV4cGxpY2l0bHkgbWVudGlvbnMgbG9jay1mcmVlIGF0b21pYyBvcGVy YXRpb25zIHNob3VsZCBiZSBhZGRyZXNzLWZyZWUuIFRoZSBzYW1lIG1lbW9y eSBsb2NhdGlvbiBjb3VsZCBiZSBtYXBwZWQgdG8gdHdvIGRpZmZlcmVudCBh ZGRyZXNzZXMsIGFuZCBhdG9taWMgb3BlcmF0aW9ucyBvbiB0aGlzIGxvY2F0 aW9uIHNob3VsZCBzdGlsbCBjb21tdW5pY2F0ZSBhdG9taWNhbGx5IFsxMF0u IFNpbWlsYXIgbm90ZSBjYW4gYWxzbyBiZSBmb3VuZCAgaW4gQysrMTEgWzEx XS4gDQoNCg0KMi4gVXNpbmcgY21weGNoZzE2YiBtYXkgbm90IGdpdmUgdGhl IGF0b21pY19sb2FkIG9uIGEgR0NDIF9BdG9taWMgX19pbnQxMjggb2JqZWN0 IHRoZSBleHBlY3RlZCBwZXJmb3JtYW5jZS4gT25lIHdvdWxkIGV4cGVjdCB0 aGF0IGluIHRoZSBub24tY29udGVudGlvbiBzY2VuYXJpbywgdGhlIGhhcmR3 YXJlLWJhY2tlZCBhdG9taWMgbG9hZCBpbXBsZW1lbnRhdGlvbiB3aWxsIHJ1 biBpbiBmdWxsIHNwZWVkIGp1c3QgbGlrZSB0aGUgMSwyLDQsOC1ieXRlIGF0 b21pY19sb2Fkcy4gSG93ZXZlciwgdGhlIHdyaXRlIG9wZXJhdGlvbiBvbiB0 aGUgYWZmZWN0ZWQgbWVtb3J5IGxvY2F0aW9uIHdpbGwgZWZmZWN0aXZlbHkg bWFrZSB0aGUgcmVhZC1vbmx5IHNjZW5hcmlvIGEgaGlnaCBjb250ZW50aW9u IHNjZW5hcmlvLCBzaWduaWZpY2FudGx5IHNsb3dpbmcgZG93biB0aGUgcGVy Zm9ybWFuY2UuIE9uZSBtaWdodCBhcmd1ZSB0aGF0IGEgc29mdHdhcmUgbG9j ayBpbXBsZW1lbnRhdGlvbiBpcyBub3QgYW55IGJldHRlciBiZWNhdXNlIHRo ZSBsb2NrIGltcGxlbWVudGF0aW9uIHdpbGwgcHJvYmFibHkgc3RpbGwgcGVy Zm9ybSBhIHdyaXRlIG9yIGEgY29tcGFyZS1hbmQtc3dhcCBvcGVyYXRpb24g YW55d2F5LiBCdXQgYSBydW50aW1lIGltcGxlbWVudGF0aW9uIGNvdWxkIGFs c28gY2hvb3NlIGEgbW9yZSBmbGV4aWJsZSBpbXBsZW1lbnRhdGlvbiwgc3Vj aCBhcyBzZXFsb2NrIFsxM10sIHRvIG1ha2UgdGhlIG1vc3QtcmVhZGVyIHNj ZW5hcmlvIG1vcmUgZWZmaWNpZW50LiBPciBpZiB0aGUgcnVudGltZSBqdXN0 IGV4cG9zZSBjbXB4Y2hnMTYgYXMgYW4gaW50cmluc2ljLCBhbiBleHBlcnQg dXNlciBjYW4gYnVpbGQgaGlzL2hlciBvd24gaW1wbGVtZW50YXRpb24uIA0K DQoNCkFsdGhvdWdoIHRoaXMgQUJJIHNwZWNpZmljYXRpb24gc3BlY2lmaWVz IHRoYXQgMTYtYnl0ZSBwcm9wZXJseSBhbGlnbmVkIGF0b21pY3MgYXJlIGlu bGluZWFibGUgb24gcGxhdGZvcm1zIHN1cHBvcnRpbmcgY21weGNoZzE2Yiwg d2UgZG9jdW1lbnQgdGhlIGNhdmVhdHMgaGVyZSBmb3IgZnVydGhlciBkaXNj dXNzaW9uLiBJZiB3ZSBkZWNpZGUgdG8gY2hhbmdlIHRoZSBpbmxpbmVhYmxl IGF0dHJpYnV0ZSBmb3IgdGhvc2UgYXRvbWljcywgdGhlbiB0aGlzIEFCSSwg dGhlIGNvbXBpbGVyIGFuZCB0aGUgcnVudGltZSBpbXBsZW1lbnRhdGlvbiBz aG91bGQgYmUgdXBkYXRlZCB0b2dldGhlciBhdCB0aGUgc2FtZSB0aW1lLg0K DQoNClRoZSBjb21waWxlciBhbmQgcnVudGltZSBuZWVkIHRvIGNoZWNrIHRo ZSBhdmFpbGFiaWxpdHkgb2YgY21weGNoZzE2YiB0byBpbXBsZW1lbnQgdGhp cyBBQkkgc3BlY2lmaWNhdGlvbi4gSGVyZSBpcyBob3cgaXQgd291bGQgd29y azogVGhlIGNvbXBpbGVyIGNhbiBnZXQgdGhlIGluZm9ybWF0aW9uIGVpdGhl ciBmcm9tIHRoZSBjb21waWxlciBmbGFncyBvciBieSBpbnF1aXJpbmcgdGhl IGhhcmR3YXJlIGNhcGFiaWxpdGllcy4gV2hlbiB0aGUgaW5mb3JtYXRpb24g aXMgbm90IGF2YWlsYWJsZSwgdGhlIGNvbXBpbGVyIHNob3VsZCBhc3N1bWUg dGhhdCBjbXB4Y2hnMTZiIGluc3RydWN0aW9uIGlzIG5vdCBzdXBwb3J0ZWQu IFRoZSBydW50aW1lIGxpYnJhcnkgaW1wbGVtZW50YXRpb24gY2FuIGFsc28g cXVlcnkgdGhlIGhhcmR3YXJlIGNvbXBhdGliaWxpdHkgYW5kIGNob29zZSB0 aGUgaW1wbGVtZW50YXRpb24gYXQgcnVudGltZS4gQXNzdW1pbmcgdGhlIHVz ZXIgcHJvdmlkZXMgY29ycmVjdCBjb21waWxlciBvcHRpb25zIGFuZCB0aGUg aW5xdWlyeSByZXR1cm5zIHRoZSBjb3JyZWN0IGluZm9ybWF0aW9uLCBvbiBh IHBsYXRmb3JtIHRoYXQgc3VwcG9ydHMgY21weGNoZzE2YiwgdGhlIGNvZGUg Z2VuZXJhdGVkIGJ5IHRoZSBjb21waWxlciB3aWxsIGJvdGggdXNlIGNtcHhj aGcxNmI7IG9uIGEgcGxhdGZvcm0gdGhhdCBkb2VzIG5vdCBzdXBwb3J0IGNt cHhjaGcxNmIsIHRoZSBjb2RlIGdlbmVyYXRlZCBieSB0aGUgY29tcGlsZXIs IGluY2x1ZGluZyB0aGUgY29kZSBnZW5lcmF0ZWQgZm9yIGEgZ2VuZXJpYyBw bGF0Zm9ybSwgYWx3YXlzIGNhbGwgdGhlIHN1cHBvcnQgZnVuY3Rpb24sIHNv IHRoZXJlIGlzIG5vIGNvbXBhdGliaWxpdHkgcHJvYmxlbS4gDQoNCg0KTjMu My4gSGVyZSBhcmUgYSBmZXcgZXhhbXBsZXMgb2Ygc21hbGwgdHlwZXMgd2hp Y2ggZG9uJ3QgcXVhbGlmeSBhcyBpbmxpbmVhYmxlOg0KDQoNCiAgX0F0b21p YyBzdHJ1Y3Qge2NoYXIgYVszXTt9IC8qIHNpemUgPSAzLCBhbGlnbm1lbnQg PSAxICovDQogIF9BdG9taWMgbG9uZyBkb3VibGUgLyogKG9uIDMyLWJpdCB4 ODYpIHNpemUgPSAxMiwgYWxpZ25tZW50ID0gNCAqLw0KDQoNCkEgc21hcnQg Y29tcGlsZXIgbWF5IGtub3cgc3VjaCBhbiBvYmplY3QgaXMgbG9jYXRlZCBh dCBhbiBhZGRyZXNzIHRoYXQgZml0cyBpbiBhbiA4LWJ5dGUgYWxpZ25lZCB3 aW5kb3csIGJ1dCB0aGUgQUJJIGRvZXMgbm90IGFsbG93IHRoZSBjb21waWxl ciB0byBnZW5lcmF0ZSBpbmxpbmVkIGNvZGUgc2VxdWVuY2UgdXNpbmcgaGFy ZHdhcmUgYmFja2VkIGF0b21pYyBpbnN0cnVjdGlvbnMuIFRoaXMgaXMgYmVj YXVzZSBhbm90aGVyIGNvbXBpbGVyLCBvciB0aGUgc2FtZSBjb21waWxlciB3 aXRoIGEgZGlmZmVyZW50IG9wdGltaXphdGlvbiBsZXZlbCBtYXkgZ2VuZXJh dGUgYSBzdXBwb3J0IGZ1bmN0aW9uIGNhbGwsIGFuZCB0aGUgc3VwcG9ydCBm dW5jdGlvbiBpbXBsZW1lbnRhdGlvbiBpcyBub3QgcmVxdWlyZWQgdG8gdXNl IGNvbXBhdGlibGUgaW5zdHJ1Y3Rpb25zLg0KDQoNCjQuIGxpYmF0b21pYyBs aWJyYXJ5IGZ1bmN0aW9ucw0KDQoNCjQuMS4gRGF0YSBEZWZpbml0aW9ucw0K DQoNClRoaXMgc2VjdGlvbiBjb250YWlucyBleGFtcGxlcyBvZiBzeXN0ZW0g aGVhZGVyIGZpbGVzIHRoYXQgcHJvdmlkZSBkYXRhIGludGVyZmFjZSBuZWVk ZWQgYnkgdGhlIGxpYmF0b21pYyBmdW5jdGlvbnMuDQoNCg0KPHN0ZGF0b21p Yy5oPg0KDQoNCnR5cGVkZWYgZW51bQ0Kew0KICAgIG1lbW9yeV9vcmRlcl9y ZWxheGVkID0gMCwNCiAgICBtZW1vcnlfb3JkZXJfY29uc3VtZSA9IDEsDQog ICAgbWVtb3J5X29yZGVyX2FjcXVpcmUgPSAyLA0KICAgIG1lbW9yeV9vcmRl cl9yZWxlYXNlID0gMywNCiAgICBtZW1vcnlfb3JkZXJfYWNxX3JlbCA9IDQs DQogICAgbWVtb3J5X29yZGVyX3NlcV9jc3QgPSA1DQp9IG1lbW9yeV9vcmRl cjsNCg0KDQp0eXBlZGVmIF9BdG9taWMgc3RydWN0DQp7DQogIHVuc2lnbmVk IGNoYXIgX19mbGFnOw0KfSBhdG9taWNfZmxhZzsNCg0KDQpSZWZlciB0byBD IHN0YW5kYXJkIGZvciB0aGUgbWVhbmluZyBvZiBlYWNoIGVudW1lcmF0aW9u IGNvbnN0YW50cyBvZg0KbWVtb3J5X29yZGVyIHR5cGUuDQoNCg0KbWVtb3J5 X29yZGVyX2NvbnN1bWUgbXVzdCBiZSBpbXBsZW1lbnRlZCB0aHJvdWdoIG1l bW9yeV9vcmRlcl9hY3F1aXJlLg0KDQoNCk5vdGVzDQpONC4xLjEuIEFsbCBh ZmZlY3RlZCBwbGF0Zm9ybXMgb2YgdGhpcyBBQkkgc3BlY2lmaWNhdGlvbiBp bXBsZW1lbnQgYSBzdHJvbmcgbWVtb3J5IG1vZGVsIG9uIHdoaWNoIG1lbW9y eV9vcmRlcl9jb25zdW1lIGRvZXMgbm90IHByb3ZpZGUgYW55IGJlbmVmaXQg b3ZlciBtZW1vcnlfb3JkZXJfYWNxdWlyZS4gVGhlcmVmb3JlIHRoaXMgQUJJ IHNwZWNpZmllcyB0aGF0IG1lbW9yeV9vcmRlcl9jb25zdW1lIGlzIHJhaXNl ZCB0byBtZW1vcnlfb3JkZXJfYWNxdWlyZS4gDQoNCg0KPGZlbnYuaD4NCg0K DQpTUEFSQw0KDQoNCiNkZWZpbmUgRkVfSU5FWEFDVCAgICAweDAxDQojZGVm aW5lIEZFX0RJVkJZWkVSTyAgMHgwMg0KI2RlZmluZSBGRV9VTkRFUkZMT1cg IDB4MDQNCiNkZWZpbmUgRkVfT1ZFUkZMT1cgICAweDA4DQojZGVmaW5lIEZF X0lOVkFMSUQgICAgMHgxMA0KDQoNCng4Ng0KDQoNCiNkZWZpbmUgRkVfSU5W QUxJRCAgICAweDAxDQojZGVmaW5lIEZFX0RJVkJZWkVSTyAgMHgwNA0KI2Rl ZmluZSBGRV9PVkVSRkxPVyAgIDB4MDgNCiNkZWZpbmUgRkVfVU5ERVJGTE9X ICAweDEwDQojZGVmaW5lIEZFX0lORVhBQ1QgICAgMHgyMA0KDQoNCjQuMi4g U3VwcG9ydCBGdW5jdGlvbnMNCg0KDQpUaGUgZm9sbG93aW5nIGtpbmRzIG9m IGF0b21pYyBvcGVyYXRpb25zIGFyZSBzdXBwb3J0ZWQgYnkgdGhlIHJ1bnRp bWUgbGlicmFyeTogbG9hZCwgc3RvcmUsIGV4Y2hhbmdlLCBjb21wYXJlLWFu ZC1leGNoYW5nZSBhbmQgYXJpdGhtZXRpYyByZWFkLW1vZGlmeS13cml0ZSBv cGVyYXRpb25zLiBGb3IgdGhlIGFyaXRobWV0aWMgcmVhZC1tb2RpZnktd3Jp dGUgb3BlcmF0aW9ucywgdGhlIGZvbGxvd2luZyBraW5kcyBvZiBtb2RpZmlj YXRpb24gb3BlcmF0aW9uIGFyZSBzdXBwb3J0ZWQ6IGFkZGl0aW9uLCBzdWJ0 cmFjdGlvbiwgYml0d2lzZSBpbmNsdXNpdmUgb3IsIGJpdHdpc2UgZXhjbHVz aXZlIG9yLCBiaXR3aXNlIGFuZCwgYml0d2lzZSBuYW5kLiBUaGVyZSBhcmUg YWxzbyB0ZXN0LWFuZC1zZXQgZnVuY3Rpb25zLg0KDQoNCkZvciBlYWNoIGtp bmQgb2YgYXRvbWljIG9wZXJhdGlvbnMsIGxpYmF0b21pYyBwcm92aWRlIGEg Z2VuZXJpYyB2ZXJzaW9uIHdoaWNoIGFjY2VwdHMgYSBwb2ludGVyIG9mIGFs bCBhdG9taWMgdHlwZXMgYW5kIHNvbWUgc2l6ZSBzcGVjaWZpYyBmdW5jdGlv bnMuIFRoZSBzaXplIHNwZWNpZmljIHZlcnNpb25zIHBhc3MgYW5kIHJldHVy biBkYXRhIGJ5IHZhbHVlLCB0aGUgZ2VuZXJpYyB2ZXJzaW9uIHBhc3MgYW5k IHJldHVybiBkYXRhIHZpYSBwb2ludGVycy4NCg0KDQpNb3N0IG9mIHRoZSBm dW5jdGlvbnMgbGlzdGVkIGluIHRoaXMgc2VjdGlvbiBjYW4gYmUgbWFwcGVk IHRvIHRoZSBjb3JyZXNwb25kaW5nIGdlbmVyaWMgZnVuY3Rpb25zIGluIHRo ZSBDMTEuIFJlZmVyIHRvIHRoZSBDMTEgU3RhbmRhcmQgZm9yIHRoZSBkZXNj cmlwdGlvbiBvZiB0aGUgZ2VuZXJpYyBmdW5jdGlvbnMgYW5kIGhvdyBlYWNo IG1lbW9yeSBvcmRlciB3b3Jrcy4gTm90ZSB0aGF0IG1lbW9yeV9vcmRlcl9j b25zdW1lIG11c3QgYmUgaW1wbGVtZW50ZWQgdGhyb3VnaCBtZW1vcnlfb3Jk ZXJfYWNxdWlyZS4NCg0KDQpUaGUgZm9sbG93aW5nIGZ1bmN0aW9ucyBhcmUg YXZhaWxhYmxlIG9uIGFsbCBwbGF0Zm9ybXMuDQoNCg0Kdm9pZCBfX2F0b21p Y19sb2FkIChzaXplX3Qgc2l6ZSwgdm9pZCAqb2JqZWN0LCB2b2lkICpsb2Fk ZWQsIG1lbW9yeV9vcmRlciBvcmRlcik7DQoNCg0KQXRvbWljYWxseSBsb2Fk IHRoZSB2YWx1ZSBwb2ludGVkIHRvIGJ5IG9iamVjdC4gQXNzaWduIHRoZSBs b2FkZWQgdmFsdWUgdG8gdGhlIG1lbW9yeSBwb2ludGVkIHRvIGJ5IGxvYWRl ZC4gVGhlIHNpemUgb2YgbWVtb3J5IGFmZmVjdGVkIGJ5IHRoZSBsb2FkIGlz IGRlc2lnbmF0ZWQgYnkgc2l6ZS4NCg0KDQppbnQ4X3QgX19hdG9taWNfbG9h ZF8xIChpbnQ4X3QgKm9iamVjdCwgbWVtb3J5X29yZGVyIG9yZGVyKTsNCmlu dDE2X3QgX19hdG9taWNfbG9hZF8yIChpbnQxNl90ICpvYmplY3QsIG1lbW9y eV9vcmRlciBvcmRlcik7DQppbnQzMl90IF9fYXRvbWljX2xvYWRfNCAoaW50 MzJfdCAqb2JqZWN0LCBtZW1vcnlfb3JkZXIgb3JkZXIpOw0KaW50NjRfdCBf X2F0b21pY19sb2FkXzggKGludDY0X3QgKm9iamVjdCwgbWVtb3J5X29yZGVy IG9yZGVyKTsNCg0KDQpBdG9taWNhbGx5IGxvYWQgdGhlIHZhbHVlIHBvaW50 ZWQgdG8gYnkgb2JqZWN0LiBUaGUgbG9hZGVkIHZhbHVlIGlzIHJldHVybmVk LiBUaGUgc2l6ZSBvZiBtZW1vcnkgYWZmZWN0ZWQgYnkgdGhlIGxvYWQgaXMg ZGVzaWduYXRlZCBieSB0aGUgdHlwZSBvZiB0aGUgb2JqZWN0LiBJZiBvYmpl Y3QgaXMgbm90IGFsaWduZWQgcHJvcGVybHkgYWNjb3JkaW5nIHRvIHRoZSB0 eXBlIG9mIG9iamVjdCwgdGhlIGJlaGF2aW9yIGlzIHVuZGVmaW5lZC4gDQoN Cg0KTWVtb3J5IGlzIGFmZmVjdGVkIGFjY29yZGluZyB0byB0aGUgdmFsdWUg b2Ygb3JkZXIuIElmIG9yZGVyIGlzIGVpdGhlciBtZW1vcnlfb3JkZXJfcmVs ZWFzZSBvciBtZW1vcnlfb3JkZXJfYWNxX3JlbCwgdGhlIGJlaGF2aW9yIG9m IHRoZSBmdW5jdGlvbiBpcyB1bmRlZmluZWQuDQoNCg0Kdm9pZCBfX2F0b21p Y19zdG9yZSAoc2l6ZV90IHNpemUsIHZvaWQgKm9iamVjdCwgdm9pZCAqZGVz aXJlZCwgbWVtb3J5X29yZGVyIG9yZGVyKQ0KDQoNCkF0b21pY2FsbHkgcmVw bGFjZSB0aGUgdmFsdWUgcG9pbnRlZCB0byBieSBvYmplY3Qgd2l0aCB0aGUg dmFsdWUgcG9pbnRlZCB0byBieSBkZXNpcmVkLiBUaGUgc2l6ZSBvZiBtZW1v cnkgYWZmZWN0ZWQgYnkgdGhlIHN0b3JlIGlzIGRlc2lnbmF0ZWQgYnkgc2l6 ZS4NCg0KDQp2b2lkIF9fYXRvbWljX3N0b3JlXzEgKGludDhfdCAqb2JqZWN0 LCBpbnQ4X3QgZGVzaXJlZCwgbWVtb3J5X29yZGVyIG9yZGVyKTsNCnZvaWQg X19hdG9taWNfc3RvcmVfMiAoaW50MTZfdCAqb2JqZWN0LCBpbnQxNl90IGRl c2lyZWQsIG1lbW9yeV9vcmRlciBvcmRlcik7DQp2b2lkIF9fYXRvbWljX3N0 b3JlXzQgKGludDMyX3QgKm9iamVjdCwgaW50MzJfdCBkZXNpcmVkLCBtZW1v cnlfb3JkZXIgb3JkZXIpOw0Kdm9pZCBfX2F0b21pY19zdG9yZV84IChpbnQ2 NF90ICpvYmplY3QsIGludDY0X3QgZGVzaXJlZCwgbWVtb3J5X29yZGVyIG9y ZGVyKTsNCg0KDQpBdG9taWNhbGx5IHJlcGxhY2UgdGhlIHZhbHVlIHBvaW50 ZWQgdG8gYnkgb2JqZWN0IHdpdGggZGVzaXJlZC4gVGhlIHNpemUgb2YgbWVt b3J5IGFmZmVjdGVkIGJ5IHRoZSBzdG9yZSBpcyBkZXNpZ25hdGVkIGJ5IHRo ZSB0eXBlIG9mIHRoZSBvYmplY3QuIElmIG9iamVjdCBpcyBub3QgYWxpZ25l ZCBwcm9wZXJseSBhY2NvcmRpbmcgdG8gdGhlIHR5cGUgb2Ygb2JqZWN0LCB0 aGUgYmVoYXZpb3IgaXMgdW5kZWZpbmVkLg0KDQoNCk1lbW9yeSBpcyBhZmZl Y3RlZCBhY2NvcmRpbmcgdG8gdGhlIHZhbHVlIG9mIG9yZGVyLiBJZiBvcmRl ciBpcyBvbmUgb2YgbWVtb3J5X29yZGVyX2FjcXVpcmUsIG1lbW9yeV9vcmRl cl9jb25zdW1lIG9yIG1lbW9yeV9vcmRlcl9hY3FfcmVsLCB0aGUgYmVoYXZp b3Igb2YgdGhlIGZ1bmN0aW9uIGlzIHVuZGVmaW5lZC4NCg0KDQp2b2lkIF9f YXRvbWljX2V4Y2hhbmdlIChzaXplX3Qgc2l6ZSwgdm9pZCAqb2JqZWN0LCB2 b2lkICpkZXNpcmVkLCB2b2lkICpsb2FkZWQsIG1lbW9yeV9tb2RlbCBvcmRl cik7DQoNCg0KQXRvbWljYWxseSwgcmVwbGFjZSB0aGUgdmFsdWUgcG9pbnRl ZCB0byBieSBvYmplY3Qgd2l0aCB0aGUgdmFsdWUgcG9pbnRlZCB0byBieSBk ZXNpcmVkIGFuZCBhc3NpZ24gdGhlIHZhbHVlIHBvaW50ZWQgdG8gYnkgbG9h ZGVkIHRvIHRoZSB2YWx1ZSBwb2ludGVkIHRvIGJ5IG9iamVjdCBpbW1lZGlh dGVseSBiZWZvcmUgdGhlIGVmZmVjdC4gVGhlIHNpemUgb2YgbWVtb3J5IGFm ZmVjdGVkIGJ5IHRoZSBleGNoYW5nZSBpcyBkZXNpZ25hdGVkIGJ5IHNpemUu DQoNCg0KaW50OF90IF9fYXRvbWljX2V4Y2hhbmdlXzEgKGludDhfdCAqIG9i amVjdCwgaW50OF90IGRlc2lyZWQsIG1lbW9yeV9vcmRlcikNCmludDE2X3Qg X19hdG9taWNfZXhjaGFuZ2VfMiAoaW50MTZfdCAqIG9iamVjdCwgaW50MTZf dCBkZXNpcmVkLCBtZW1vcnlfb3JkZXIpDQppbnQzMl90IF9fYXRvbWljX2V4 Y2hhbmdlXzQgKGludDMyX3QgKiBvYmplY3QsIGludDMyX3QgZGVzaXJlZCwg bWVtb3J5X29yZGVyKQ0KaW50NjRfdCBfX2F0b21pY19leGNoYW5nZV84IChp bnQ2NF90ICogb2JqZWN0LCBpbnQ2NF90IGRlc2lyZWQsIG1lbW9yeV9vcmRl cikNCg0KDQpBdG9taWNhbGx5LCByZXBsYWNlIHRoZSB2YWx1ZSBwb2ludGVk IHRvIGJ5IG9iamVjdCB3aXRoIGRlc2lyZWQgYW5kIHJldHVybiB0aGUgdmFs dWUgcG9pbnRlZCB0byBieSBvYmplY3QgaW1tZWRpYXRlbHkgYmVmb3JlIHRo ZSBlZmZlY3QuIFRoZSBzaXplIG9mIG1lbW9yeSBhZmZlY3RlZCBieSB0aGUg ZXhjaGFuZ2UgaXMgZGVzaWduYXRlZCBieSB0aGUgdHlwZSBvZiBvYmplY3Qu IElmIG9iamVjdCBpcyBub3QgYWxpZ25lZCBwcm9wZXJseSBhY2NvcmRpbmcg dG8gdGhlIHR5cGUgb2Ygb2JqZWN0LCB0aGUgYmVoYXZpb3IgaXMgdW5kZWZp bmVkLg0KDQoNCk1lbW9yeSBpcyBhZmZlY3RlZCBhY2NvcmRpbmcgdG8gdGhl IHZhbHVlIG9mIG9yZGVyLg0KDQoNCl9Cb29sIF9fYXRvbWljX2NvbXBhcmVf ZXhjaGFuZ2UgKHNpemVfdCBzaXplLCB2b2lkICpvYmplY3QsIHZvaWQgKmV4 cGVjdGVkLCB2b2lkICpkZXNpcmVkLCBtZW1vcnlfbW9kZWwgc3VjY2Vzc19v cmRlciwgbWVtb3J5X21vZGVsIGZhaWx1cmVfb3JkZXIpOw0KDQoNCkF0b21p Y2FsbHksIGNvbXBhcmVzIHRoZSBtZW1vcnkgcG9pbnRlZCB0byBieSBvYmpl Y3QgZm9yIGVxdWFsaXR5IHdpdGggdGhlIG1lbW9yeSBwb2ludGVkIHRvIGJ5 IGV4cGVjdGVkLCBhbmQgaWYgdHJ1ZSwgcmVwbGFjZXMgdGhlIG1lbW9yeSBw b2ludGVkIHRvIGJ5IG9iamVjdCB3aXRoIHRoZSBtZW1vcnkgcG9pbnRlZCB0 byBieSBkZXNpcmVkLCBhbmQgaWYgZmFsc2UsIHVwZGF0ZXMgdGhlIG1lbW9y eSBwb2ludGVkIHRvIGJ5IGV4cGVjdGVkIHdpdGggdGhlIG1lbW9yeSBwb2lu dGVkIHRvIGJ5IG9iamVjdC4gVGhlIHJlc3VsdCBvZiB0aGUgY29tcGFyaXNv biBpcyByZXR1cm5lZC4gVGhlIHNpemUgb2YgbWVtb3J5IGFmZmVjdGVkIGJ5 IHRoZSBjb21wYXJlIGFuZCBleGNoYW5nZSBpcyBkZXNpZ25hdGVkIGJ5IHNp emUuDQoNCg0KVGhlIGNvbXBhcmUgYW5kIGV4Y2hhbmdlIG5ldmVyIGZhaWwg c3B1cmlvdXNseSwgaS5lLiBpZiB0aGUgY29tcGFyaXNvbiBmb3IgZXF1YWxp dHkgcmV0dXJucyBmYWxzZSwgdGhlIHR3byB2YWx1ZXMgaW4gdGhlIGNvbXBh cmlzb24gd2VyZSBub3QgZXF1YWwuIFtOb3RlLCB0aGlzIGlzIHRvIHNwZWNp ZnkgdGhhdCBvbiBTUEFSQyBhbmQgeDg2LCBjb21wYXJlIGV4Y2hhbmdlIGlz IGFsd2F5cyBpbXBsZW1lbnRlZCB3aXRoICJzdHJvbmciIHNlbWFudGljLiBU aGUgd2VhayBmbGF2b3JzIGluIHRoZSBDIHN0YW5kYXJkIGlzIHRyYW5zbGF0 ZWQgdG8gc3Ryb25nLl0NCg0KDQpfQm9vbCBfX2F0b21pY19jb21wYXJlX2V4 Y2hhbmdlXzEgKGludDhfdCAqb2JqZWN0LCBpbnQ4X3QgKmV4cGVjdGVkLCBp bnQ4X3QgZGVzaXJlZCwgbWVtb3J5X29yZGVyIHN1Y2Nlc3Nfb3JkZXIsIG1l bW9yeV9vcmRlciBmYWlsdXJlX29yZGVyKTsNCl9Cb29sIF9fYXRvbWljX2Nv bXBhcmVfZXhjaGFuZ2VfMiAoaW50MTZfdCAqb2JqZWN0LCBpbnQxNl90ICpl eHBlY3RlZCwgaW50MTZfdCBkZXNpcmVkLCBtZW1vcnlfb3JkZXIgc3VjY2Vz c19vcmRlciwgbWVtb3J5X29yZGVyIGZhaWx1cmVfb3JkZXIpOw0KX0Jvb2wg X19hdG9taWNfY29tcGFyZV9leGNoYW5nZV80IChpbnQzMl90ICpvYmplY3Qs IGludDMyX3QgKmV4cGVjdGVkLCBpbnQzMl90IGRlc2lyZWQsIG1lbW9yeV9v cmRlciBzdWNjZXNzX29yZGVyLCBtZW1vcnlfb3JkZXIgZmFpbHVyZV9vcmRl cik7DQpfQm9vbCBfX2F0b21pY19jb21wYXJlX2V4Y2hhbmdlXzggKGludDY0 X3QgKm9iamVjdCwgaW50NjRfdCAqZXhwZWN0ZWQsIGludDY0X3QgZGVzaXJl ZCwgbWVtb3J5X29yZGVyIHN1Y2Nlc3Nfb3JkZXIsIG1lbW9yeV9vcmRlciBm YWlsdXJlX29yZGVyKTsNCg0KDQpBdG9taWNhbGx5LCBjb21wYXJlcyB0aGUg bWVtb3J5IHBvaW50ZWQgdG8gYnkgb2JqZWN0IGZvciBlcXVhbGl0eSB3aXRo IHRoZSBtZW1vcnkgcG9pbnRlZCB0byBieSBleHBlY3RlZCwgYW5kIGlmIHRy dWUsIHJlcGxhY2VzIHRoZSBtZW1vcnkgcG9pbnRlZCB0byBieSBvYmplY3Qg d2l0aCBkZXNpcmVkLCBhbmQgaWYgZmFsc2UsIHVwZGF0ZXMgdGhlIG1lbW9y eSBwb2ludGVkIHRvIGJ5IGV4cGVjdGVkIHdpdGggdGhlIG1lbW9yeSBwb2lu dGVkIHRvIGJ5IG9iamVjdC4gVGhlIHJlc3VsdCBvZiB0aGUgY29tcGFyaXNv biBpcyByZXR1cm5lZC4NCg0KDQpUaGUgc2l6ZSBvZiBtZW1vcnkgYWZmZWN0 ZWQgYnkgdGhlIGNvbXBhcmUgYW5kIGV4Y2hhbmdlIGlzIGRlc2lnbmF0ZWQg YnkgdGhlIHR5cGUgb2Ygb2JqZWN0LiBJZiBvYmplY3QgaXMgbm90IGFsaWdu ZWQgcHJvcGVybHkgYWNjb3JkaW5nIHRvIHRoZSB0eXBlIG9mIG9iamVjdCwg dGhlIGJlaGF2aW9yIGlzIHVuZGVmaW5lZC4NCg0KDQpUaGUgY29tcGFyZSBh bmQgZXhjaGFuZ2UgbmV2ZXIgZmFpbCBzcHVyaW91c2x5LCBpLmUuIGlmIHRo ZSBjb21wYXJpc29uIGZvciBlcXVhbGl0eSByZXR1cm5zIGZhbHNlLCB0aGUg dHdvIHZhbHVlcyBpbiB0aGUgY29tcGFyaXNvbiB3ZXJlIG5vdCBlcXVhbC4N Cg0KDQpJZiB0aGUgY29tcGFyaXNvbiBpcyB0cnVlLCBtZW1vcnkgaXMgYWZm ZWN0ZWQgYWNjb3JkaW5nIHRvIHRoZSB2YWx1ZSBvZiBzdWNjZXNzX29yZGVy LCBhbmQgaWYgdGhlIGNvbXBhcmlzb24gaXMgZmFsc2UsIG1lbW9yeSBpcyBh ZmZlY3RlZCBhY2NvcmRpbmcgdG8gdGhlIHZhbHVlIG9mIGZhaWx1cmVfb3Jk ZXIuIFRoZSByZXN1bHQgb2YgdGhlIGNvbXBhcmlzb24gaXMgcmV0dXJuZWQu DQoNCg0KaW50OF90IF9fYXRvbWljX2FkZF9mZXRjaF8xIChpbnQ4X3QgKm9i amVjdCwgaW50OF90IG9wZXJhbmQsIG1lbW9yeV9vcmRlciBvcmRlcik7DQpp bnQxNl90IF9fYXRvbWljX2FkZF9mZXRjaF8yIChpbnQxNl90ICpvYmplY3Qs IGludDE2X3Qgb3BlcmFuZCwgbWVtb3J5X29yZGVyIG9yZGVyKTsNCmludDMy X3QgX19hdG9taWNfYWRkX2ZldGNoXzQgKGludDMyX3QgKm9iamVjdCwgaW50 MzJfdCBvcGVyYW5kLCBtZW1vcnlfb3JkZXIgb3JkZXIpOw0KaW50NjRfdCBf X2F0b21pY19hZGRfZmV0Y2hfOCAoaW50NjRfdCAqb2JqZWN0LCBpbnQ2NF90 IG9wZXJhbmQsIG1lbW9yeV9vcmRlciBvcmRlcik7DQoNCg0KQXRvbWljYWxs eSByZXBsYWNlcyB0aGUgdmFsdWUgcG9pbnRlZCB0byBieSBvYmplY3Qgd2l0 aCB0aGUgcmVzdWx0IG9mIHRoZSB2YWx1ZSBwb2ludGVkIHRvIGJ5IG9iamVj dCBwbHVzIG9wZXJhbmQgYW5kIHJldHVybnMgdGhlIHZhbHVlIHBvaW50ZWQg dG8gYnkgb2JqZWN0IGltbWVkaWF0ZWx5IGFmdGVyIHRoZSBlZmZlY3RzLiBJ ZiBvYmplY3QgaXMgbm90IGFsaWduZWQgcHJvcGVybHkgYWNjb3JkaW5nIHRv IHRoZSB0eXBlIG9mIG9iamVjdCwgdGhlIGJlaGF2aW9yIGlzIHVuZGVmaW5l ZC4gVGhlIHNpemUgb2YgbWVtb3J5IGFmZmVjdGVkIGJ5IHRoZSBlZmZlY3Rz IGlzIGRlc2lnbmF0ZWQgYnkgdGhlIHR5cGUgb2Ygb2JqZWN0Lg0KDQoNCmlu dDhfdCBfX2F0b21pY19mZXRjaF9hZGRfMSAoaW50OF90ICpvYmplY3QsIGlu dDhfdCBvcGVyYW5kLCBtZW1vcnlfb3JkZXIgb3JkZXIpOw0KaW50MTZfdCBf X2F0b21pY19mZXRjaF9hZGRfMiAoaW50MTZfdCAqb2JqZWN0LCBpbnQxNl90 IG9wZXJhbmQsIG1lbW9yeV9vcmRlciBvcmRlcik7DQppbnQzMl90IF9fYXRv bWljX2ZldGNoX2FkZF80IChpbnQzMl90ICpvYmplY3QsIGludDMyX3Qgb3Bl cmFuZCwgbWVtb3J5X29yZGVyIG9yZGVyKTsNCmludDY0X3QgX19hdG9taWNf ZmV0Y2hfYWRkXzggKGludDY0X3QgKm9iamVjdCwgaW50NjRfdCBvcGVyYW5k LCBtZW1vcnlfb3JkZXIgb3JkZXIpOw0KDQoNCkF0b21pY2FsbHkgcmVwbGFj ZXMgdGhlIHZhbHVlIHBvaW50ZWQgdG8gYnkgb2JqZWN0IHdpdGggdGhlIHJl c3VsdCBvZiB0aGUgdmFsdWUgcG9pbnRlZCB0byBieSBvYmplY3QgcGx1cyBv cGVyYW5kIGFuZCByZXR1cm5zIHRoZSB2YWx1ZSBwb2ludGVkIHRvIGJ5IG9i amVjdCBpbW1lZGlhdGVseSBiZWZvcmUgdGhlIGVmZmVjdHMuIElmIG9iamVj dCBpcyBub3QgYWxpZ25lZCBwcm9wZXJseSBhY2NvcmRpbmcgdG8gdGhlIHR5 cGUgb2Ygb2JqZWN0LCB0aGUgYmVoYXZpb3IgaXMgdW5kZWZpbmVkLiBUaGUg c2l6ZSBvZiBtZW1vcnkgYWZmZWN0ZWQgYnkgdGhlIGVmZmVjdHMgaXMgZGVz aWduYXRlZCBieSB0aGUgdHlwZSBvZiBvYmplY3QuDQoNCg0KTWVtb3J5IGlz IGFmZmVjdGVkIGFjY29yZGluZyB0byB0aGUgdmFsdWUgb2Ygb3JkZXIuDQoN Cg0KaW50OF90IF9fYXRvbWljX3N1Yl9mZXRjaF8xIChpbnQ4X3QgKm9iamVj dCwgaW50OF90IG9wZXJhbmQsIG1lbW9yeV9vcmRlciBvcmRlcik7DQppbnQx Nl90IF9fYXRvbWljX3N1Yl9mZXRjaF8yIChpbnQxNl90ICpvYmplY3QsIGlu dDE2X3Qgb3BlcmFuZCwgbWVtb3J5X29yZGVyIG9yZGVyKTsNCmludDMyX3Qg X19hdG9taWNfc3ViX2ZldGNoXzQgKGludDMyX3QgKm9iamVjdCwgaW50MzJf dCBvcGVyYW5kLCBtZW1vcnlfb3JkZXIgb3JkZXIpOw0KaW50NjRfdCBfX2F0 b21pY19zdWJfZmV0Y2hfOCAoaW50NjRfdCAqb2JqZWN0LCBpbnQ2NF90IG9w ZXJhbmQsIG1lbW9yeV9vcmRlciBvcmRlcik7DQoNCg0KQXRvbWljYWxseSBy ZXBsYWNlcyB0aGUgdmFsdWUgcG9pbnRlZCB0byBieSBvYmplY3Qgd2l0aCB0 aGUgcmVzdWx0IG9mIHRoZSB2YWx1ZSBwb2ludGVkIHRvIGJ5IG9iamVjdCBt aW51cyBvcGVyYW5kIGFuZCByZXR1cm5zIHRoZSB2YWx1ZSBwb2ludGVkIHRv IGJ5IG9iamVjdCBpbW1lZGlhdGVseSBhZnRlciB0aGUgZWZmZWN0cy4gSWYg b2JqZWN0IGlzIG5vdCBhbGlnbmVkIHByb3Blcmx5IGFjY29yZGluZyB0byB0 aGUgdHlwZSBvZiBvYmplY3QsIHRoZSBiZWhhdmlvciBpcyB1bmRlZmluZWQu IFRoZSBzaXplIG9mIG1lbW9yeSBhZmZlY3RlZCBieSB0aGUgZWZmZWN0cyBp cyBkZXNpZ25hdGVkIGJ5IHRoZSB0eXBlIG9mIG9iamVjdC4NCg0KDQppbnQ4 X3QgX19hdG9taWNfZmV0Y2hfc3ViXzEgKGludDhfdCAqb2JqZWN0LCBpbnQ4 X3Qgb3BlcmFuZCwgbWVtb3J5X29yZGVyIG9yZGVyKTsNCmludDE2X3QgX19h dG9taWNfZmV0Y2hfc3ViXzIgKGludDE2X3QgKm9iamVjdCwgaW50MTZfdCBv cGVyYW5kLCBtZW1vcnlfb3JkZXIgb3JkZXIpOw0KaW50MzJfdCBfX2F0b21p Y19mZXRjaF9zdWJfNCAoaW50MzJfdCAqb2JqZWN0LCBpbnQzMl90IG9wZXJh bmQsIG1lbW9yeV9vcmRlciBvcmRlcik7DQppbnQ2NF90IF9fYXRvbWljX2Zl dGNoX3N1Yl84IChpbnQ2NF90ICpvYmplY3QsIGludDY0X3Qgb3BlcmFuZCwg bWVtb3J5X29yZGVyIG9yZGVyKTsNCg0KDQpBdG9taWNhbGx5IHJlcGxhY2Vz IHRoZSB2YWx1ZSBwb2ludGVkIHRvIGJ5IG9iamVjdCB3aXRoIHRoZSByZXN1 bHQgb2YgdGhlIHZhbHVlIHBvaW50ZWQgdG8gYnkgb2JqZWN0IG1pbnVzIG9w ZXJhbmQgYW5kIHJldHVybnMgdGhlIHZhbHVlIHBvaW50ZWQgdG8gYnkgb2Jq ZWN0IGltbWVkaWF0ZWx5IGJlZm9yZSB0aGUgZWZmZWN0cy4gSWYgb2JqZWN0 IGlzIG5vdCBhbGlnbmVkIHByb3Blcmx5IGFjY29yZGluZyB0byB0aGUgdHlw ZSBvZiBvYmplY3QsIHRoZSBiZWhhdmlvciBpcyB1bmRlZmluZWQuICBUaGUg c2l6ZSBvZiBtZW1vcnkgYWZmZWN0ZWQgYnkgdGhlIGVmZmVjdHMgaXMgZGVz aWduYXRlZCBieSB0aGUgdHlwZSBvZiBvYmplY3QuDQoNCg0KTWVtb3J5IGlz IGFmZmVjdGVkIGFjY29yZGluZyB0byB0aGUgdmFsdWUgb2Ygb3JkZXIuDQoN Cg0KaW50OF90IF9fYXRvbWljX2FuZF9mZXRjaF8xIChpbnQ4X3QgKm9iamVj dCwgaW50OF90IG9wZXJhbmQsIG1lbW9yeV9vcmRlciBvcmRlcik7DQppbnQx Nl90IF9fYXRvbWljX2FuZF9mZXRjaF8yIChpbnQxNl90ICpvYmplY3QsIGlu dDE2X3Qgb3BlcmFuZCwgbWVtb3J5X29yZGVyIG9yZGVyKTsNCmludDMyX3Qg X19hdG9taWNfYW5kX2ZldGNoXzQgKGludDMyX3QgKm9iamVjdCwgaW50MzJf dCBvcGVyYW5kLCBtZW1vcnlfb3JkZXIgb3JkZXIpOw0KaW50NjRfdCBfX2F0 b21pY19hbmRfZmV0Y2hfOCAoaW50NjRfdCAqb2JqZWN0LCBpbnQ2NF90IG9w ZXJhbmQsIG1lbW9yeV9vcmRlciBvcmRlcik7DQoNCg0KQXRvbWljYWxseSwg cmVwbGFjZXMgdGhlIHZhbHVlIHBvaW50ZWQgdG8gYnkgb2JqZWN0IHdpdGgg dGhlIHJlc3VsdCBvZiBiaXR3aXNlIGFuZCBvZiB0aGUgdmFsdWUgcG9pbnRl ZCB0byBieSBvYmplY3QgYW5kIG9wZXJhbmQgYW5kIHJldHVybnMgdGhlIHZh bHVlIHBvaW50ZWQgdG8gYnkgb2JqZWN0IGltbWVkaWF0ZWx5IGFmdGVyIHRo ZSBlZmZlY3RzLiBJZiBvYmplY3QgaXMgbm90IGFsaWduZWQgcHJvcGVybHkg YWNjb3JkaW5nIHRvIHRoZSB0eXBlIG9mIG9iamVjdCwgdGhlIGJlaGF2aW9y IGlzIHVuZGVmaW5lZC4gIFRoZSBzaXplIG9mIG1lbW9yeSBhZmZlY3RlZCBi eSB0aGUgZWZmZWN0cyBpcyBkZXNpZ25hdGVkIGJ5IHRoZSB0eXBlIG9mIG9i amVjdC4NCg0KDQppbnQ4X3QgX19hdG9taWNfZmV0Y2hfYW5kXzEgKGludDhf dCAqb2JqZWN0LCBpbnQ4X3Qgb3BlcmFuZCwgbWVtb3J5X29yZGVyIG9yZGVy KTsNCmludDE2X3QgX19hdG9taWNfZmV0Y2hfYW5kXzIgKGludDE2X3QgKm9i amVjdCwgaW50MTZfdCBvcGVyYW5kLCBtZW1vcnlfb3JkZXIgb3JkZXIpOw0K aW50MzJfdCBfX2F0b21pY19mZXRjaF9hbmRfNCAoaW50MzJfdCAqb2JqZWN0 LCBpbnQzMl90IG9wZXJhbmQsIG1lbW9yeV9vcmRlciBvcmRlcik7DQppbnQ2 NF90IF9fYXRvbWljX2ZldGNoX2FuZF84IChpbnQ2NF90ICpvYmplY3QsIGlu dDY0X3Qgb3BlcmFuZCwgbWVtb3J5X29yZGVyIG9yZGVyKTsNCg0KDQpBdG9t aWNhbGx5LCByZXBsYWNlcyB0aGUgdmFsdWUgcG9pbnRlZCB0byBieSBvYmpl Y3Qgd2l0aCB0aGUgcmVzdWx0IG9mIGJpdHdpc2UgYW5kIG9mIHRoZSB2YWx1 ZSBwb2ludGVkIHRvIGJ5IG9iamVjdCBhbmQgb3BlcmFuZCBhbmQgcmV0dXJu cyB0aGUgdmFsdWUgcG9pbnRlZCB0byBieSBvYmplY3QgaW1tZWRpYXRlbHkg YmVmb3JlIHRoZSBlZmZlY3RzLiBJZiBvYmplY3QgaXMgbm90IGFsaWduZWQg cHJvcGVybHkgYWNjb3JkaW5nIHRvIHRoZSB0eXBlIG9mIG9iamVjdCwgdGhl IGJlaGF2aW9yIGlzIHVuZGVmaW5lZC4gVGhlIHNpemUgb2YgbWVtb3J5IGFm ZmVjdGVkIGJ5IHRoZSBlZmZlY3RzIGlzIGRlc2lnbmF0ZWQgYnkgdGhlIHR5 cGUgb2Ygb2JqZWN0Lg0KDQoNCk1lbW9yeSBpcyBhZmZlY3RlZCBhY2NvcmRp bmcgdG8gdGhlIHZhbHVlIG9mIG9yZGVyLg0KDQoNCmludDhfdCBfX2F0b21p Y19vcl9mZXRjaF8xIChpbnQ4X3QgKm9iamVjdCwgaW50OF90IG9wZXJhbmQs IG1lbW9yeV9vcmRlciBvcmRlcik7DQppbnQxNl90IF9fYXRvbWljX29yX2Zl dGNoXzIgKGludDE2X3QgKm9iamVjdCwgaW50MTZfdCBvcGVyYW5kLCBtZW1v cnlfb3JkZXIgb3JkZXIpOw0KaW50MzJfdCBfX2F0b21pY19vcl9mZXRjaF80 IChpbnQzMl90ICpvYmplY3QsIGludDMyX3Qgb3BlcmFuZCwgbWVtb3J5X29y ZGVyIG9yZGVyKTsNCmludDY0X3QgX19hdG9taWNfb3JfZmV0Y2hfOCAoaW50 NjRfdCAqb2JqZWN0LCBpbnQ2NF90IG9wZXJhbmQsIG1lbW9yeV9vcmRlciBv cmRlcik7DQoNCg0KQXRvbWljYWxseSwgcmVwbGFjZXMgdGhlIHZhbHVlIHBv aW50ZWQgdG8gYnkgb2JqZWN0IHdpdGggdGhlIHJlc3VsdCBvZiBiaXR3aXNl IG9yIG9mIHRoZSB2YWx1ZSBwb2ludGVkIHRvIGJ5IG9iamVjdCBhbmQgb3Bl cmFuZCBhbmQgcmV0dXJucyB0aGUgdmFsdWUgcG9pbnRlZCB0byBieSBvYmpl Y3QgaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlIGVmZmVjdHMuIElmIG9iamVjdCBp cyBub3QgYWxpZ25lZCBwcm9wZXJseSBhY2NvcmRpbmcgdG8gdGhlIHR5cGUg b2Ygb2JqZWN0LCB0aGUgYmVoYXZpb3IgaXMgdW5kZWZpbmVkLiBUaGUgc2l6 ZSBvZiBtZW1vcnkgYWZmZWN0ZWQgYnkgdGhlIGVmZmVjdHMgaXMgZGVzaWdu YXRlZCBieSB0aGUgdHlwZSBvZiBvYmplY3QuDQoNCg0KaW50OF90IF9fYXRv bWljX2ZldGNoX29yXzEgKGludDhfdCAqb2JqZWN0LCBpbnQ4X3Qgb3BlcmFu ZCwgbWVtb3J5X29yZGVyIG9yZGVyKTsNCmludDE2X3QgX19hdG9taWNfZmV0 Y2hfb3JfMiAoaW50MTZfdCAqb2JqZWN0LCBpbnQxNl90IG9wZXJhbmQsIG1l bW9yeV9vcmRlciBvcmRlcik7DQppbnQzMl90IF9fYXRvbWljX2ZldGNoX29y XzQgKGludDMyX3QgKm9iamVjdCwgaW50MzJfdCBvcGVyYW5kLCBtZW1vcnlf b3JkZXIgb3JkZXIpOw0KaW50NjRfdCBfX2F0b21pY19mZXRjaF9vcl84IChp bnQ2NF90ICpvYmplY3QsIGludDY0X3Qgb3BlcmFuZCwgbWVtb3J5X29yZGVy IG9yZGVyKTsNCg0KDQpBdG9taWNhbGx5LCByZXBsYWNlcyB0aGUgdmFsdWUg cG9pbnRlZCB0byBieSBvYmplY3Qgd2l0aCB0aGUgcmVzdWx0IG9mIGJpdHdp c2Ugb3Igb2YgdGhlIHZhbHVlIHBvaW50ZWQgdG8gYnkgb2JqZWN0IGFuZCBv cGVyYW5kIGFuZCByZXR1cm5zIHRoZSB2YWx1ZSBwb2ludGVkIHRvIGJ5IG9i amVjdCBpbW1lZGlhdGVseSBiZWZvcmUgdGhlIGVmZmVjdHMuIElmIG9iamVj dCBpcyBub3QgYWxpZ25lZCBwcm9wZXJseSBhY2NvcmRpbmcgdG8gdGhlIHR5 cGUgb2Ygb2JqZWN0LCB0aGUgYmVoYXZpb3IgaXMgdW5kZWZpbmVkLiBUaGUg c2l6ZSBvZiBtZW1vcnkgYWZmZWN0ZWQgYnkgdGhlIGVmZmVjdHMgaXMgZGVz aWduYXRlZCBieSB0aGUgdHlwZSBvZiBvYmplY3QuDQoNCg0KTWVtb3J5IGlz IGFmZmVjdGVkIGFjY29yZGluZyB0byB0aGUgdmFsdWUgb2Ygb3JkZXIuDQoN Cg0KaW50OF90IF9fYXRvbWljX3hvcl9mZXRjaF8xIChpbnQ4X3QgKm9iamVj dCwgaW50OF90IG9wZXJhbmQsIG1lbW9yeV9vcmRlciBvcmRlcik7DQppbnQx Nl90IF9fYXRvbWljX3hvcl9mZXRjaF8yIChpbnQxNl90ICpvYmplY3QsIGlu dDE2X3Qgb3BlcmFuZCwgbWVtb3J5X29yZGVyIG9yZGVyKTsNCmludDMyX3Qg X19hdG9taWNfeG9yX2ZldGNoXzQgKGludDMyX3QgKm9iamVjdCwgaW50MzJf dCBvcGVyYW5kLCBtZW1vcnlfb3JkZXIgb3JkZXIpOw0KaW50NjRfdCBfX2F0 b21pY194b3JfZmV0Y2hfOCAoaW50NjRfdCAqb2JqZWN0LCBpbnQ2NF90IG9w ZXJhbmQsIG1lbW9yeV9vcmRlciBvcmRlcik7DQoNCg0KQXRvbWljYWxseSwg cmVwbGFjZXMgdGhlIHZhbHVlIHBvaW50ZWQgdG8gYnkgb2JqZWN0IHdpdGgg dGhlIHJlc3VsdCBvZiBiaXR3aXNlIHhvciBvZiB0aGUgdmFsdWUgcG9pbnRl ZCB0byBieSBvYmplY3QgYW5kIG9wZXJhbmQgYW5kIHJldHVybnMgdGhlIHZh bHVlIHBvaW50ZWQgdG8gYnkgb2JqZWN0IGltbWVkaWF0ZWx5IGFmdGVyIHRo ZSBlZmZlY3RzLiBJZiBvYmplY3QgaXMgbm90IGFsaWduZWQgcHJvcGVybHkg YWNjb3JkaW5nIHRvIHRoZSB0eXBlIG9mIG9iamVjdCwgdGhlIGJlaGF2aW9y IGlzIHVuZGVmaW5lZC4gVGhlIHNpemUgb2YgbWVtb3J5IGFmZmVjdGVkIGJ5 IHRoZSBlZmZlY3RzIGlzIGRlc2lnbmF0ZWQgYnkgdGhlIHR5cGUgb2Ygb2Jq ZWN0Lg0KDQoNCmludDhfdCBfX2F0b21pY19mZXRjaF94b3JfMSAoaW50OF90 ICpvYmplY3QsIGludDhfdCBvcGVyYW5kLCBtZW1vcnlfb3JkZXIgb3JkZXIp Ow0KaW50MTZfdCBfX2F0b21pY19mZXRjaF94b3JfMiAoaW50MTZfdCAqb2Jq ZWN0LCBpbnQxNl90IG9wZXJhbmQsIG1lbW9yeV9vcmRlciBvcmRlcik7DQpp bnQzMl90IF9fYXRvbWljX2ZldGNoX3hvcl80IChpbnQzMl90ICpvYmplY3Qs IGludDMyX3Qgb3BlcmFuZCwgbWVtb3J5X29yZGVyIG9yZGVyKTsNCmludDY0 X3QgX19hdG9taWNfZmV0Y2hfeG9yXzggKGludDY0X3QgKm9iamVjdCwgaW50 NjRfdCBvcGVyYW5kLCBtZW1vcnlfb3JkZXIgb3JkZXIpOw0KDQoNCkF0b21p Y2FsbHksIHJlcGxhY2VzIHRoZSB2YWx1ZSBwb2ludGVkIHRvIGJ5IG9iamVj dCB3aXRoIHRoZSByZXN1bHQgb2YgYml0d2lzZSB4b3Igb2YgdGhlIHZhbHVl IHBvaW50ZWQgdG8gYnkgb2JqZWN0IGFuZCBvcGVyYW5kIGFuZCByZXR1cm5z IHRoZSB2YWx1ZSBwb2ludGVkIHRvIGJ5IG9iamVjdCBpbW1lZGlhdGVseSBi ZWZvcmUgdGhlIGVmZmVjdHMuIElmIG9iamVjdCBpcyBub3QgYWxpZ25lZCBw cm9wZXJseSBhY2NvcmRpbmcgdG8gdGhlIHR5cGUgb2Ygb2JqZWN0LCB0aGUg YmVoYXZpb3IgaXMgdW5kZWZpbmVkLiBUaGUgc2l6ZSBvZiBtZW1vcnkgYWZm ZWN0ZWQgYnkgdGhlIGVmZmVjdHMgaXMgZGVzaWduYXRlZCBieSB0aGUgdHlw ZSBvZiBvYmplY3QuDQoNCg0KTWVtb3J5IGlzIGFmZmVjdGVkIGFjY29yZGlu ZyB0byB0aGUgdmFsdWUgb2Ygb3JkZXIuDQoNCg0KaW50OF90IF9fYXRvbWlj X25hbmRfZmV0Y2hfMSAoaW50OF90ICpvYmplY3QsIGludDhfdCBvcGVyYW5k LCBtZW1vcnlfb3JkZXIgb3JkZXIpOw0KaW50MTZfdCBfX2F0b21pY19uYW5k X2ZldGNoXzIgKGludDE2X3QgKm9iamVjdCwgaW50MTZfdCBvcGVyYW5kLCBt ZW1vcnlfb3JkZXIgb3JkZXIpOw0KaW50MzJfdCBfX2F0b21pY19uYW5kX2Zl dGNoXzQgKGludDMyX3QgKm9iamVjdCwgaW50MzJfdCBvcGVyYW5kLCBtZW1v cnlfb3JkZXIgb3JkZXIpOw0KaW50NjRfdCBfX2F0b21pY19uYW5kX2ZldGNo XzggKGludDY0X3QgKm9iamVjdCwgaW50NjRfdCBvcGVyYW5kLCBtZW1vcnlf b3JkZXIgb3JkZXIpOw0KDQoNCkF0b21pY2FsbHksIHJlcGxhY2VzIHRoZSB2 YWx1ZSBwb2ludGVkIHRvIGJ5IG9iamVjdCB3aXRoIHRoZSByZXN1bHQgb2Yg Yml0d2lzZSBuYW5kIG9mIHRoZSB2YWx1ZSBwb2ludGVkIHRvIGJ5IG9iamVj dCBhbmQgb3BlcmFuZCBhbmQgcmV0dXJucyB0aGUgdmFsdWUgcG9pbnRlZCB0 byBieSBvYmplY3QgaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlIGVmZmVjdHMuIElm IG9iamVjdCBpcyBub3QgYWxpZ25lZCBwcm9wZXJseSBhY2NvcmRpbmcgdG8g dGhlIHR5cGUgb2Ygb2JqZWN0LCB0aGUgYmVoYXZpb3IgaXMgdW5kZWZpbmVk LiBUaGUgc2l6ZSBvZiBtZW1vcnkgYWZmZWN0ZWQgYnkgdGhlIGVmZmVjdHMg aXMgZGVzaWduYXRlZCBieSB0aGUgdHlwZSBvZiBvYmplY3QuDQoNCg0KQml0 d2lzZSBvcGVyYXRvciBuYW5kIGlzIGRlZmluZWQgYXMgdGhlIGZvbGxvd2lu ZyB1c2luZyBBTlNJIEMgb3BlcmF0b3JzOiBhIG5hbmQgYiBpcyBlcXVpdmFs ZW50IHRvIH4oYSAmIGIpLg0KDQoNCmludDhfdCBfX2F0b21pY19mZXRjaF9u YW5kXzEgKGludDhfdCAqb2JqZWN0LCBpbnQ4X3Qgb3BlcmFuZCwgbWVtb3J5 X29yZGVyIG9yZGVyKTsNCmludDE2X3QgX19hdG9taWNfZmV0Y2hfbmFuZF8y IChpbnQxNl90ICpvYmplY3QsIGludDE2X3Qgb3BlcmFuZCwgbWVtb3J5X29y ZGVyIG9yZGVyKTsNCmludDMyX3QgX19hdG9taWNfZmV0Y2hfbmFuZF80IChp bnQzMl90ICpvYmplY3QsIGludDMyX3Qgb3BlcmFuZCwgbWVtb3J5X29yZGVy IG9yZGVyKTsNCmludDY0X3QgX19hdG9taWNfZmV0Y2hfbmFuZF84IChpbnQ2 NF90ICpvYmplY3QsIGludDY0X3Qgb3BlcmFuZCwgbWVtb3J5X29yZGVyIG9y ZGVyKTsNCg0KDQpBdG9taWNhbGx5LCByZXBsYWNlcyB0aGUgdmFsdWUgcG9p bnRlZCB0byBieSBvYmplY3Qgd2l0aCB0aGUgcmVzdWx0IG9mIGJpdHdpc2Ug bmFuZCBvZiB0aGUgdmFsdWUgcG9pbnRlZCB0byBieSBvYmplY3QgYW5kIG9w ZXJhbmQgYW5kIHJldHVybnMgdGhlIHZhbHVlIHBvaW50ZWQgdG8gYnkgb2Jq ZWN0IGltbWVkaWF0ZWx5IGJlZm9yZSB0aGUgZWZmZWN0cy4gSWYgb2JqZWN0 IGlzIG5vdCBhbGlnbmVkIHByb3Blcmx5IGFjY29yZGluZyB0byB0aGUgdHlw ZSBvZiBvYmplY3QsIHRoZSBiZWhhdmlvciBpcyB1bmRlZmluZWQuIFRoZSBz aXplIG9mIG1lbW9yeSBhZmZlY3RlZCBieSB0aGUgZWZmZWN0cyBpcyBkZXNp Z25hdGVkIGJ5IHRoZSB0eXBlIG9mIG9iamVjdC4NCg0KDQpCaXR3aXNlIG9w ZXJhdG9yIG5hbmQgaXMgZGVmaW5lZCBhcyB0aGUgZm9sbG93aW5nIHVzaW5n IEFOU0kgQyBvcGVyYXRvcnM6IGEgbmFuZCBiIGlzIGVxdWl2YWxlbnQgdG8g fihhICYgYikuDQoNCg0KTWVtb3J5IGlzIGFmZmVjdGVkIGFjY29yZGluZyB0 byB0aGUgdmFsdWUgb2Ygb3JkZXIuDQoNCg0KX0Jvb2wgX19hdG9taWNfdGVz dF9hbmRfc2V0XzEgKGludDhfdCAqb2JqZWN0LCBtZW1vcnlfb3JkZXIgb3Jk ZXIpOw0KX0Jvb2wgX19hdG9taWNfdGVzdF9hbmRfc2V0XzIgKGludDE2X3Qg Km9iamVjdCwgbWVtb3J5X29yZGVyIG9yZGVyKTsNCl9Cb29sIF9fYXRvbWlj X3Rlc3RfYW5kX3NldF80IChpbnQzMl90ICpvYmplY3QsIG1lbW9yeV9vcmRl ciBvcmRlcikNCl9Cb29sIF9fYXRvbWljX3Rlc3RfYW5kX3NldF84IChpbnQ2 NF90ICpvYmplY3QsIG1lbW9yeV9vcmRlciBvcmRlcikNCg0KDQpBdG9taWNh bGx5LCBjaGVja3MgdGhlIHZhbHVlIHBvaW50ZWQgdG8gYnkgb2JqZWN0IGFu ZCBpZiBpdCBpcyBpbiB0aGUgY2xlYXIgc3RhdGUsIHNldCB0aGUgdmFsdWUg cG9pbnRlZCB0byBieSBvYmplY3QgdG8gdGhlIHNldCBzdGF0ZSBhbmQgcmV0 dXJucyB0cnVlLCBhbmQgaWYgaXQgaXMgaW4gdGhlIHNldCBzdGF0ZSwgcmV0 dXJucyBmYWxzZS4gVGhlIHNpemUgb2YgbWVtb3J5IGFmZmVjdGVkIGJ5IHRo ZSBlZmZlY3RzIGlzIGFsd2F5cyBvbmUgYnl0ZS4NCg0KDQpNZW1vcnkgaXMg YWZmZWN0ZWQgYWNjb3JkaW5nIHRvIHRoZSB2YWx1ZSBvZiBvcmRlci4NCg0K DQpUaGUgc2V0IGFuZCBjbGVhciBzdGF0ZSBhcmUgdGhlIHNhbWUgYXMgc3Bl Y2lmaWVkIGZvciBhdG9taWNfZmxhZ190ZXN0X2FuZF9zZXQuDQoNCg0KX0Jv b2wgX19hdG9taWNfaXNfbG9ja19mcmVlIChzaXplX3Qgc2l6ZSwgdm9pZCAq b2JqZWN0KTsNCg0KDQpSZXR1cm5zIHdoZXRoZXIgdGhlIG9iamVjdCBwb2lu dGVkIHRvIGJ5IG9iamVjdCBpcyBsb2NrLWZyZWUuIFRoZSBmdW5jdGlvbiBh c3N1bWVzIHRoYXQgdGhlIHNpemUgb2YgdGhlIG9iamVjdCBpcyBzaXplLiBJ ZiBvYmplY3QgaXMgTlVMTCB0aGVuIHRoZSBmdW5jdGlvbiBhc3N1bWVzIHRo YXQgb2JqZWN0IGlzIGFsaWduZWQgb24gYW4gc2l6ZS1ieXRlIGFkZHJlc3Mu DQoNCg0KVGhlIGZ1bmN0aW9uIHRha2VzIHRoZSBzaXplIG9mIGFuIG9iamVj dCBhbmQgYW4gYWRkcmVzcyB3aGljaCBpcyBvbmUgb2YgdGhlIGZvbGxvd2lu ZyB0aHJlZSBjYXNlcyANCi0gdGhlIGFkZHJlc3Mgb2YgdGhlIG9iamVjdCAN Ci0gYSBmYWtlZCBhZGRyZXNzIHRoYXQgc29sZWx5IGluZGljYXRlcyB0aGUg YWxpZ25tZW50IG9mIHRoZSBvYmplY3QncyBhZGRyZXNzIA0KLSBOVUxMLCB3 aGljaCBtZWFucyB0aGF0IHRoZSBhbGlnbm1lbnQgb2YgdGhlIG9iamVjdCBt YXRjaGVzIHNpemUgYW5kIHJldHVybnMgd2hldGhlciB0aGUgb2JqZWN0IGlz IGxvY2stZnJlZS4NCg0KDQp2b2lkIF9fYXRvbWljX2ZlcmFpc2VleGNlcHQg KGludCBleGNlcHRpb24pOw0KDQoNClJhaXNlIGZsb2F0aW5nIHBvaW50IGV4 Y2VwdGlvbihzKSB0aGF0IHNwZWNpZmllZCBieSBleGNlcHRpb24uIFRoZSBp bnQgaW5wdXQgYXJndW1lbnQgZXhjZXB0aW9uIHJlcHJlc2VudHMgYSBzdWJz ZXQgb2YgZmxvYXRpbmctcG9pbnQgZXhjZXB0aW9ucywgYW5kIGNhbiBiZSB6 ZXJvIG9yIHRoZSBiaXR3aXNlIE9SIG9mIG9uZSBvciBtb3JlIGZsb2F0aW5n LXBvaW50IGV4Y2VwdGlvbiBtYWNyb3MuIFRoZSBtYWNyb3MgYXJlIGRlZmlu ZWQgaW4gZmVudi5oIGluIHNlY3Rpb24gNC4xLg0KDQoNCjQuMy4gNjQtYml0 IFNwZWNpZmljIEludGVyZmFjZXMNCg0KDQo0LjMuMS4gRGF0YSBSZXByZXNl bnRhdGlvbiBvZiBfX2ludDEyOCB0eXBlDQoNCg0KT24geDg2IHBsYXRmb3Jt cywgX19pbnQxMjggdHlwZSBpcyBkZWZpbmVkIGluIHRoZSA2NC1iaXQgQUJJ Lg0KDQoNCk9uIFNQQVJDIHBsYXRmb3JtcywgdGhlIHNpemUgYW5kIGFsaWdu bWVudCBvZiBfX2ludDEyOCB0eXBlIGlzIHNwZWNpZmllZCBhcyB0aGUgZm9s bG93aW5nOg0KDQoNCiAgICAgICAgICAgICBzaXplb2YgICBBbGlnbm1lbnQN Cl9faW50MTI4ICAgICAgIDE2ICAgICAgICAxNg0KDQoNCjQuMy4yLiBTdXBw b3J0IEZ1bmN0aW9ucw0KDQoNClRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIGFy ZSBhdmFpbGFibGUgb25seSBvbiA2NC1iaXQgcGxhdGZvcm1zLg0KDQoNCl9f aW50MTI4IF9fYXRvbWljX2xvYWRfMTYgKF9faW50MTI4ICpvYmplY3QsIG1l bW9yeV9vcmRlciBvcmRlcik7DQp2b2lkIF9fYXRvbWljX3N0b3JlXzE2IChf X2ludDEyOCAqb2JqZWN0LCBfX2ludDEyOCBkZXNpcmVkLCBtZW1vcnlfb3Jk ZXIgb3JkZXIpOw0KX19pbnQxMjggX19hdG9taWNfZXhjaGFuZ2VfMTYgKF9f aW50MTI4ICogb2JqZWN0LCAgX19pbnQxMjggZGVzaXJlZCwgbWVtb3J5X29y ZGVyIG9yZGVyKTsNCl9Cb29sIF9fYXRvbWljX2NvbXBhcmVfZXhjaGFuZ2Vf MTYgKF9faW50MTI4ICpvYmplY3QsIF9faW50MTI4ICpleHBlY3RlZCwgX19p bnQxMjggZGVzaXJlZCwgbWVtb3J5X29yZGVyIHN1Y2Nlc3Nfb3JkZXIsIG1l bW9yeV9vcmRlciBmYWlsdXJlX29yZGVyKTsNCl9faW50MTI4IF9fYXRvbWlj X2FkZF9mZXRjaF8xNiAoX19pbnQxMjggKm9iamVjdCwgX19pbnQxMjggb3Bl cmFuZCwgbWVtb3J5X29yZGVyIG9yZGVyKTsNCl9faW50MTI4IF9fYXRvbWlj X2ZldGNoX2FkZF8xNiAoX19pbnQxMjggKm9iamVjdCwgX19pbnQxMjggb3Bl cmFuZCwgbWVtb3J5X29yZGVyIG9yZGVyKTsNCl9faW50MTI4IF9fYXRvbWlj X3N1Yl9mZXRjaF8xNiAoX19pbnQxMjggKm9iamVjdCwgX19pbnQxMjggb3Bl cmFuZCwgbWVtb3J5X29yZGVyIG9yZGVyKTsNCl9faW50MTI4IF9fYXRvbWlj X2ZldGNoX3N1Yl8xNiAoX19pbnQxMjggKm9iamVjdCwgX19pbnQxMjggb3Bl cmFuZCwgbWVtb3J5X29yZGVyIG9yZGVyKTsNCl9faW50MTI4IF9fYXRvbWlj X2FuZF9mZXRjaF8xNiAoX19pbnQxMjggKm9iamVjdCwgX19pbnQxMjggb3Bl cmFuZCwgbWVtb3J5X29yZGVyIG9yZGVyKTsNCl9faW50MTI4IF9fYXRvbWlj X2ZldGNoX2FuZF8xNiAoX19pbnQxMjggKm9iamVjdCwgX19pbnQxMjggb3Bl cmFuZCwgbWVtb3J5X29yZGVyIG9yZGVyKTsNCl9faW50MTI4IF9fYXRvbWlj X29yX2ZldGNoXzE2IChfX2ludDEyOCAqb2JqZWN0LCBfX2ludDEyOCBvcGVy YW5kLCBtZW1vcnlfb3JkZXIgb3JkZXIpOw0KX19pbnQxMjggX19hdG9taWNf ZmV0Y2hfb3JfMTYgKF9faW50MTI4ICpvYmplY3QsIF9faW50MTI4IG9wZXJh bmQsIG1lbW9yeV9vcmRlciBvcmRlcik7DQpfX2ludDEyOCBfX2F0b21pY194 b3JfZmV0Y2hfMTYgKF9faW50MTI4ICpvYmplY3QsIF9faW50MTI4IG9wZXJh bmQsIG1lbW9yeV9vcmRlciBvcmRlcik7DQpfX2ludDEyOCBfX2F0b21pY19m ZXRjaF94b3JfMTYgKF9faW50MTI4ICpvYmplY3QsIF9faW50MTI4IG9wZXJh bmQsIG1lbW9yeV9vcmRlciBvcmRlcik7DQpfX2ludDEyOCBfX2F0b21pY19u YW5kX2ZldGNoXzE2IChfX2ludDEyOCAqb2JqZWN0LCBfX2ludDEyOCBvcGVy YW5kLCBtZW1vcnlfb3JkZXIgb3JkZXIpOw0KX19pbnQxMjggX19hdG9taWNf ZmV0Y2hfbmFuZF8xNiAoX19pbnQxMjggKm9iamVjdCwgX19pbnQxMjggb3Bl cmFuZCwgbWVtb3J5X29yZGVyIG9yZGVyKTsNCl9Cb29sIF9fYXRvbWljX3Rl c3RfYW5kX3NldF8xNiAoX19pbnQxMjggKm9iamVjdCwgbWVtb3J5X29yZGVy IG9yZGVyKTsNCg0KDQpUaGUgZGVzY3JpcHRpb24gb2YgZWFjaCBmdW5jdGlv biBpcyB0aGUgc2FtZSB3aXRoIHRoZSBjb3JyZXNwb25kaW5nIHNldCBvZiBm dW5jdGlvbnMgc3BlY2lmaWVkIGluIHNlY3Rpb24gNC4yLg0KDQoNCjUuIExp YmF0b21pYyBzeW1ib2wgdmVyc2lvbmluZw0KDQoNCkhlcmUgaXMgdGhlIG1h cGZpbGUgZm9yIHN5bWJvbCB2ZXJzaW9uaW5nIG9mIHRoZSBsaWJhdG9taWMg bGlicmFyeSBzcGVjaWZpZWQgYnkgdGhpcyBBQkkgc3BlY2lmaWNhdGlvbg0K DQoNCkxJQkFUT01JQ18xLjAgew0KICBnbG9iYWw6DQogICAgX19hdG9taWNf bG9hZDsNCiAgICBfX2F0b21pY19zdG9yZTsNCiAgICBfX2F0b21pY19leGNo YW5nZTsNCiAgICBfX2F0b21pY19jb21wYXJlX2V4Y2hhbmdlOw0KICAgIF9f YXRvbWljX2lzX2xvY2tfZnJlZTsNCg0KDQogICAgX19hdG9taWNfYWRkX2Zl dGNoXzE7DQogICAgX19hdG9taWNfYWRkX2ZldGNoXzI7DQogICAgX19hdG9t aWNfYWRkX2ZldGNoXzQ7DQogICAgX19hdG9taWNfYWRkX2ZldGNoXzg7DQog ICAgX19hdG9taWNfYWRkX2ZldGNoXzE2Ow0KICAgIF9fYXRvbWljX2FuZF9m ZXRjaF8xOw0KICAgIF9fYXRvbWljX2FuZF9mZXRjaF8yOw0KICAgIF9fYXRv bWljX2FuZF9mZXRjaF80Ow0KICAgIF9fYXRvbWljX2FuZF9mZXRjaF84Ow0K ICAgIF9fYXRvbWljX2FuZF9mZXRjaF8xNjsNCiAgICBfX2F0b21pY19jb21w YXJlX2V4Y2hhbmdlXzE7DQogICAgX19hdG9taWNfY29tcGFyZV9leGNoYW5n ZV8yOw0KICAgIF9fYXRvbWljX2NvbXBhcmVfZXhjaGFuZ2VfNDsNCiAgICBf X2F0b21pY19jb21wYXJlX2V4Y2hhbmdlXzg7DQogICAgX19hdG9taWNfY29t cGFyZV9leGNoYW5nZV8xNjsNCiAgICBfX2F0b21pY19leGNoYW5nZV8xOw0K ICAgIF9fYXRvbWljX2V4Y2hhbmdlXzI7DQogICAgX19hdG9taWNfZXhjaGFu Z2VfNDsNCiAgICBfX2F0b21pY19leGNoYW5nZV84Ow0KICAgIF9fYXRvbWlj X2V4Y2hhbmdlXzE2Ow0KICAgIF9fYXRvbWljX2ZldGNoX2FkZF8xOw0KICAg IF9fYXRvbWljX2ZldGNoX2FkZF8yOw0KICAgIF9fYXRvbWljX2ZldGNoX2Fk ZF80Ow0KICAgIF9fYXRvbWljX2ZldGNoX2FkZF84Ow0KICAgIF9fYXRvbWlj X2ZldGNoX2FkZF8xNjsNCiAgICBfX2F0b21pY19mZXRjaF9hbmRfMTsNCiAg ICBfX2F0b21pY19mZXRjaF9hbmRfMjsNCiAgICBfX2F0b21pY19mZXRjaF9h bmRfNDsNCiAgICBfX2F0b21pY19mZXRjaF9hbmRfODsNCiAgICBfX2F0b21p Y19mZXRjaF9hbmRfMTY7DQogICAgX19hdG9taWNfZmV0Y2hfbmFuZF8xOw0K ICAgIF9fYXRvbWljX2ZldGNoX25hbmRfMjsNCiAgICBfX2F0b21pY19mZXRj aF9uYW5kXzQ7DQogICAgX19hdG9taWNfZmV0Y2hfbmFuZF84Ow0KICAgIF9f YXRvbWljX2ZldGNoX25hbmRfMTY7DQogICAgX19hdG9taWNfZmV0Y2hfb3Jf MTsNCiAgICBfX2F0b21pY19mZXRjaF9vcl8yOw0KICAgIF9fYXRvbWljX2Zl dGNoX29yXzQ7DQogICAgX19hdG9taWNfZmV0Y2hfb3JfODsNCiAgICBfX2F0 b21pY19mZXRjaF9vcl8xNjsNCiAgICBfX2F0b21pY19mZXRjaF9zdWJfMTsN CiAgICBfX2F0b21pY19mZXRjaF9zdWJfMjsNCiAgICBfX2F0b21pY19mZXRj aF9zdWJfNDsNCiAgICBfX2F0b21pY19mZXRjaF9zdWJfODsNCiAgICBfX2F0 b21pY19mZXRjaF9zdWJfMTY7DQogICAgX19hdG9taWNfZmV0Y2hfeG9yXzE7 DQogICAgX19hdG9taWNfZmV0Y2hfeG9yXzI7DQogICAgX19hdG9taWNfZmV0 Y2hfeG9yXzQ7DQogICAgX19hdG9taWNfZmV0Y2hfeG9yXzg7DQogICAgX19h dG9taWNfZmV0Y2hfeG9yXzE2Ow0KICAgIF9fYXRvbWljX2xvYWRfMTsNCiAg ICBfX2F0b21pY19sb2FkXzI7DQogICAgX19hdG9taWNfbG9hZF80Ow0KICAg IF9fYXRvbWljX2xvYWRfODsNCiAgICBfX2F0b21pY19sb2FkXzE2Ow0KICAg IF9fYXRvbWljX25hbmRfZmV0Y2hfMTsNCiAgICBfX2F0b21pY19uYW5kX2Zl dGNoXzI7DQogICAgX19hdG9taWNfbmFuZF9mZXRjaF80Ow0KICAgIF9fYXRv bWljX25hbmRfZmV0Y2hfODsNCiAgICBfX2F0b21pY19uYW5kX2ZldGNoXzE2 Ow0KICAgIF9fYXRvbWljX29yX2ZldGNoXzE7DQogICAgX19hdG9taWNfb3Jf ZmV0Y2hfMjsNCiAgICBfX2F0b21pY19vcl9mZXRjaF80Ow0KICAgIF9fYXRv bWljX29yX2ZldGNoXzg7DQogICAgX19hdG9taWNfb3JfZmV0Y2hfMTY7DQog ICAgX19hdG9taWNfc3RvcmVfMTsNCiAgICBfX2F0b21pY19zdG9yZV8yOw0K ICAgIF9fYXRvbWljX3N0b3JlXzQ7DQogICAgX19hdG9taWNfc3RvcmVfODsN CiAgICBfX2F0b21pY19zdG9yZV8xNjsNCiAgICBfX2F0b21pY19zdWJfZmV0 Y2hfMTsNCiAgICBfX2F0b21pY19zdWJfZmV0Y2hfMjsNCiAgICBfX2F0b21p Y19zdWJfZmV0Y2hfNDsNCiAgICBfX2F0b21pY19zdWJfZmV0Y2hfODsNCiAg ICBfX2F0b21pY19zdWJfZmV0Y2hfMTY7DQogICAgX19hdG9taWNfdGVzdF9h bmRfc2V0XzE7DQogICAgX19hdG9taWNfdGVzdF9hbmRfc2V0XzI7DQogICAg X19hdG9taWNfdGVzdF9hbmRfc2V0XzQ7DQogICAgX19hdG9taWNfdGVzdF9h bmRfc2V0Xzg7DQogICAgX19hdG9taWNfdGVzdF9hbmRfc2V0XzE2Ow0KICAg IF9fYXRvbWljX3hvcl9mZXRjaF8xOw0KICAgIF9fYXRvbWljX3hvcl9mZXRj aF8yOw0KICAgIF9fYXRvbWljX3hvcl9mZXRjaF80Ow0KICAgIF9fYXRvbWlj X3hvcl9mZXRjaF84Ow0KICAgIF9fYXRvbWljX3hvcl9mZXRjaF8xNjsNCg0K DQogIGxvY2FsOg0KICAgICo7DQp9Ow0KTElCQVRPTUlDXzEuMSB7DQogIGds b2JhbDoNCiAgICBfX2F0b21pY19mZXJhaXNlZXhjZXB0Ow0KfSBMSUJBVE9N SUNfMS4wOw0KTElCQVRPTUlDXzEuMiB7DQogIGdsb2JhbDoNCiAgICBhdG9t aWNfdGhyZWFkX2ZlbmNlOw0KICAgIGF0b21pY19zaWduYWxfZmVuY2U7DQog ICAgYXRvbWljX2ZsYWdfdGVzdF9hbmRfc2V0Ow0KICAgIGF0b21pY19mbGFn X3Rlc3RfYW5kX3NldF9leHBsaWNpdDsNCiAgICBhdG9taWNfZmxhZ19jbGVh cjsNCiAgICBhdG9taWNfZmxhZ19jbGVhcl9leHBsaWNpdDsNCn0gTElCQVRP TUlDXzEuMTsNCg0KDQo2LiBMaWJhdG9taWMgQXNzdW1wdGlvbiBvbiBOb24t YmxvY2tpbmcgTWVtb3J5IEluc3RydWN0aW9ucw0KDQoNCmxpYmF0b21pYyBh c3N1bWVzIHRoYXQgcHJvZ3JhbW1lcnMgb3IgY29tcGlsZXJzIHByb3Blcmx5 IGluc2VydA0KU0ZFTkNFL01GRU5DRSBiYXJyaWVycyBmb3IgdGhlIGZvbGxv d2luZyBjYXNlcw0KDQoNCjEpIHdyaXRlcyBleGVjdXRlZCB3aXRoIENMRkxV U0ggaW5zdHJ1Y3Rpb24NCjIpIHN0cmVhbWluZyBsb2Fkcy9zdG9yZXMgKFYp TU9WTlR4LCBNQVNLTU9WRFFVLCBNQVNLTU9WUS4NCjMpIGFueSBvdGhlciBv cGVyYXRpb25zIHdoaWNoIHJlZmVyZW5jZSBXcml0ZSBDb21iaW5pbmcgbWVt b3J5IHR5cGUuDQoNCg0KUmF0aW9uYWxlDQoNCg0KeDg2IGhhcyBhIHN0cm9u ZyBtZW1vcnkgbW9kZWwuIE1lbW9yeSByZWFkcyBhcmUgbm90IHJlb3JkZXJl ZCB3aXRoIG90aGVyIHJlYWRzLCB3cml0ZXMgYXJlIG5vdCByZW9yZGVyZWQg d2l0aCByZWFkcyBhbmQgb3RoZXIgd3JpdGVzLiBUaGUgdGhyZWUgY2FzZXMg bWVudGlvbmVkIGFyZSBleGNlcHRpb25zLCBpLmUuIHRob3NlIHdyaXRlcyB3 aWxsIG5vdCBibG9jayBvdGhlciB3cml0ZXMuIFRoZSBBQkkgc3BlY2lmaWVz IHRoYXQgY29kZSB1c2VzIHRob3NlIG5vbi1ibG9ja2luZyB3cml0ZXMgc2hv dWxkIGNvbnRhaW4gcHJvcGVyIGZlbmNlcywgc28gdGhhdCBsaWJhdG9taWMg c3VwcG9ydCBmdW5jdGlvbnMgZG8gbm90IG5lZWQgZmVuY2VzIHRvIHN5bmNo cm9uaXplIHdpdGggdGhvc2UgaW5zdHJ1Y3Rpb25zLg0KDQoNCkFwcGVuZGl4 DQoNCg0KQS4xLiBDb21wYXRpYmlsaXR5IE5vdGVzDQoNCg0KT24gNjQtYml0 IFNQQVJDIHBsYXRmb3JtcywgX0F0b21pYyBsb25nIGRvdWJsZSBpcyBhIDE2 LWJ5dGUgbmF0dXJhbGx5IGFsaWduZWQgYXRvbWljIHR5cGUuIFRoZXJlIGlz IG5vIGhhcmR3YXJlIGF0b21pYyBpbnN0cnVjdGlvbiBmb3Igc3VjaCB0eXBl IGluIDY0LWJpdCBTUEFSQyBJU0EsIGFuZCBpdCBpcyBub3QgaW5saW5lYWJs ZSBpbiB0aGlzIEFCSSBzcGVjaWZpY2F0aW9uLg0KDQoNCklmIGluIHRoZSBm dXR1cmUsIGhhcmR3YXJlIGF0b21pYyBpbnN0cnVjdGlvbnMgZm9yIDE2LWJ5 dGUgbmF0dXJhbGx5IGFsaWduZWQgb2JqZWN0cyBhcmUgYXZhaWxhYmxlIGlu IGEgbmV3IFNQQVJDIElTQSwgdGhlbiBsaWJhdG9taWMgY291bGQgbGV2ZXJh Z2Ugc3VjaCBpbnN0cnVjdGlvbnMgdG8gaW1wbGVtZW50IGF0b21pYyBvcGVy YXRpb25zIGZvciBfQXRvbWljIGxvbmcgZG91YmxlLg0KDQoNClRoaXMgd291 bGQgYmUgYSBiYWNrd2FyZCBjb21wYXRpYmxlIGxpYmF0b21pYyBjaGFuZ2Uu IFRoZSB0eXBlIGlzIG5vdCBpbmxpbmVhYmxlLCBhbGwgYXRvbWljIG9wZXJh dGlvbnMgb24gb2JqZWN0cyBvZiB0aGUgdHlwZSBtdXN0IGJlIHZpYSBsaWJh dG9taWMgZnVuY3Rpb24gY2FsbHMsIHNvIGFsbCBzdWNoIGF0b21pYyBvcGVy YXRpb25zIHdpbGwgYmUgY2hhbmdlZCB0byB1c2UgaGFyZHdhcmUgYXRvbWlj IGluc3RydWN0aW9ucyBpbiB0aG9zZSBsaWJhdG9taWMgZnVuY3Rpb25zIHdp dGhvdXQgYnJlYWtpbmcgdGhlIGNvbXBpbGVyLWxpYnJhcnkgaW50ZXJmYWNl Lg0KDQoNCkhvd2V2ZXIsIGlmIGEgY29tcGlsZXIgaW5saW5lcyBhbiBhdG9t aWMgb3BlcmF0aW9uIG9uIGFuIF9BdG9taWMgbG9uZyBkb3VibGUgb2JqZWN0 IHVzaW5nIHRoZSBuZXcgaGFyZHdhcmUgYXRvbWljIGluc3RydWN0aW9ucywg aXQgYnJlYWtzIHRoZSBjb21wYXRpYmlsaXR5IGlmIHRoZSBsaWJyYXJ5IGlt cGxlbWVudGF0aW9uIHN0aWxsIGRvZXMgbm90IHVzZSBzdWNoIGluc3RydWN0 aW9ucy4gSW4gc3VjaCBjYXNlLCB0aGUgbGliYXRvbWljIGxpYnJhcnkgYW5k IHRoZSBjb21waWxlciBzaG91bGQgYmUgdXBncmFkZWQgaW4gbG9jay1zdGVw LCBhbmQgdGhlIGlubGluZWFibGUgcHJvcGVydHkgZm9yIGNlcnRhaW4gYXRv bWljIHR5cGVzIG11c3QgYmUgdXBkYXRlZC4NCg0KDQpJZiB0aGUgY29tcGls ZXIgY2hhbmdlIHRoZSBkYXRhIHJlcHJlc2VudGF0aW9uIG9mIGF0b21pYyB0 eXBlcywgc3VjaCBjaGFuZ2Ugd2lsbCBjYXVzZSBpbmNvbXBhdGlibGUgYmlu YXJ5IGFuZCBpdCB3b3VsZCBiZSBoYXJkIHRvIGRldGVjdCBpZiB0aGUgaW5j b21wYXRpYmxlIGJpbmFyaWVzIGFyZSBsaW5rZWQgdG9nZXRoZXIuDQoNCg0K QS4yLiBSZWZlcmVuY2VzDQoNCg0KWzFdIElOQ0lUUy9JU08vSUVDIDk4OTkt MjAxMVsyMDEyXSwgNi4yLjVwMjcNClRoZSBzaXplLCByZXByZXNlbnRhdGlv biwgYW5kIGFsaWdubWVudCBvZiBhbiBhdG9taWMgdHlwZSBuZWVkIG5vdCBi ZSB0aGUgc2FtZSBhcyB0aG9zZSBvZiB0aGUgY29ycmVzcG9uZGluZyB1bnF1 YWxpZmllZCB0eXBlLg0KDQoNClsyXSBJTkNJVFMvSVNPL0lFQyA5ODk5LTIw MTFbMjAxMl0sIDcuMTcuNnAxDQpGb3IgZWFjaCBsaW5lIGluIHRoZSBmb2xs b3dpbmcgdGFibGUsMjU3KSB0aGUgYXRvbWljIHR5cGUgbmFtZSBpcyBkZWNs YXJlZCBhcyBhIHR5cGUgdGhhdCBoYXMgdGhlIHNhbWUgcmVwcmVzZW50YXRp b24gYW5kIGFsaWdubWVudCByZXF1aXJlbWVudHMgYXMgdGhlIGNvcnJlc3Bv bmRpbmcgZGlyZWN0IHR5cGUuMjU4KQ0KDQoNCkZvb3Rub3RlIDI1OA0KMjU4 KSBUaGUgc2FtZSByZXByZXNlbnRhdGlvbiBhbmQgYWxpZ25tZW50IHJlcXVp cmVtZW50cyBhcmUgbWVhbnQgdG8gaW1wbHkgaW50ZXJjaGFuZ2VhYmlsaXR5 IGFzIGFyZ3VtZW50cyB0byBmdW5jdGlvbnMsIHJldHVybiB2YWx1ZXMgZnJv bSBmdW5jdGlvbnMsIGFuZCBtZW1iZXJzIG9mIHVuaW9ucy4NCg0KDQpbM10g SU5DSVRTL0lTTy9JRUMgOTg5OS0yMDExWzIwMTJdLCA2LjcuMi4xcDUNCkEg Yml0LWZpZWxkIHNoYWxsIGhhdmUgYSB0eXBlIHRoYXQgaXMgYSBxdWFsaWZp ZWQgb3IgdW5xdWFsaWZpZWQgdmVyc2lvbiBvZiBfQm9vbCwgc2lnbmVkIGlu dCwgdW5zaWduZWQgaW50LCBvciBzb21lIG90aGVyIGltcGxlbWVudGF0aW9u LWRlZmluZWQgdHlwZS4gSXQgaXMgaW1wbGVtZW50YXRpb24tZGVmaW5lZCB3 aGV0aGVyIGF0b21pYyB0eXBlcyBhcmUgcGVybWl0dGVkLg0KDQoNCls0XSBJ TkNJVFMvSVNPL0lFQyAxNDg4Mi0yMDExWzIwMTJdLCAyOS40cDINClRoZSBm dW5jdGlvbiBhdG9taWNfaXNfbG9ja19mcmVlICgyOS42KSBpbmRpY2F0ZXMg d2hldGhlciB0aGUgb2JqZWN0IGlzIGxvY2stZnJlZS4gSW4gYW55IGdpdmVu IHByb2dyYW0gZXhlY3V0aW9uLCB0aGUgcmVzdWx0IG9mIHRoZSBsb2NrLWZy ZWUgcXVlcnkgc2hhbGwgYmUgY29uc2lzdGVudCBmb3IgYWxsIHBvaW50ZXJz IG9mIHRoZSBzYW1lIHR5cGUuDQoNCg0KWzVdIElOQ0lUUy9JU08vSUVDIDk4 OTktMjAxMVsyMDEyXSwgNy4xNy41LjFwMw0KVGhlIGF0b21pY19pc19sb2Nr X2ZyZWUgZ2VuZXJpYyBmdW5jdGlvbiByZXR1cm5zIG5vbnplcm8gKHRydWUp IGlmIGFuZCBvbmx5IGlmIHRoZSBvYmplY3QncyBvcGVyYXRpb25zIGFyZSBs b2NrLWZyZWUuIFRoZSByZXN1bHQgb2YgYSBsb2NrLWZyZWUgcXVlcnkgb24g b25lIG9iamVjdCBjYW5ub3QgYmUgaW5mZXJyZWQgZnJvbSB0aGUgcmVzdWx0 IG9mIGEgbG9jay1mcmVlIHF1ZXJ5IG9uIGFub3RoZXIgb2JqZWN0Lg0KDQoN Cls2XSBEUiA0NjU6IGh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2My Mi93ZzE0L3d3dy9kb2NzL3N1bW1hcnkuaHRtI2RyXzQ2NQ0KDQoNCls3XSBJ TkNJVFMvSVNPL0lFQyA5ODk5LTIwMTFbMjAxMl0sIDYuNy4yLjRwMw0KVGhl IHR5cGUgbmFtZSBpbiBhbiBhdG9taWMgdHlwZSBzcGVjaWZpZXIgc2hhbGwg bm90IHJlZmVyIHRvIGFuIGFycmF5IHR5cGUsIGEgZnVuY3Rpb24gdHlwZSwg YW4gYXRvbWljIHR5cGUsIG9yIGEgcXVhbGlmaWVkIHR5cGUuDQoNCg0KWzhd IElOQ0lUUy9JU08vSUVDIDk4OTktMjAxMVsyMDEyXSwgNi43LjNwMw0KVGhl IHR5cGUgbW9kaWZpZWQgYnkgdGhlIF9BdG9taWMgcXVhbGlmaWVyIHNoYWxs IG5vdCBiZSBhbiBhcnJheSB0eXBlIG9yIGEgZnVuY3Rpb24gdHlwZS4NCg0K DQpbOV0gRFIgNDMxOiBodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3Nj MjIvd2cxNC93d3cvZG9jcy9zdW1tYXJ5Lmh0bSNkcl80MzENCg0KDQpbMTBd IElOQ0lUUy9JU08vSUVDIDk4OTktMjAxMVsyMDEyXSwgNy4xNy41cDINCg0K DQpbMTFdIElOQ0lUUy9JU08vSUVDIDE0ODgyLTIwMTFbMjAxMl0sIDI5LjRw Mw0KDQoNClsxMl0gSW50ZWzCriA2NCBhbmQgSUEtMzIgQXJjaGl0ZWN0dXJl cyBTb2Z0d2FyZSBEZXZlbG9wZXLigJlzIE1hbnVhbCBWb2x1bWUgM0E6IFN5 c3RlbSBQcm9ncmFtbWluZyBHdWlkZSwgUGFydCAxLCA4LjEuMSBHdWFyYW50 ZWVkIEF0b21pYyBPcGVyYXRpb25zDQoNCg0KWzEzXSBDYW4gU2VxbG9ja3Mg R2V0IEFsb25nIHdpdGggUHJvZ3JhbW1pbmcgTGFuZ3VhZ2UgTWVtb3J5IE1v ZGVscz8gSGFucy1KLiBCb2VobSwgaHR0cDovL3d3dy5ocGwuaHAuY29tL3Rl Y2hyZXBvcnRzLzIwMTIvSFBMLTIwMTItNjgucGRm --------------343853C2E98271530B27CBD2--