From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-pf1-x42d.google.com (mail-pf1-x42d.google.com [IPv6:2607:f8b0:4864:20::42d]) by sourceware.org (Postfix) with ESMTPS id 8C1023858D28 for ; Mon, 11 Nov 2024 17:28:24 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 8C1023858D28 Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=baylibre.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=baylibre.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 8C1023858D28 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=2607:f8b0:4864:20::42d ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1731346109; cv=none; b=R+oaTS0MmWUkcVCfzJyb1uKkIpRQBgxN9iRGN2s8LUrnymMPfasqbFrBEvZZKR/AzCLJdBS9zCphGSTc+MXg6v1vbkjHUvqQWItK2oBmgDFt1MfaNOK2B8+LW48Doy7qi419Kn7Fbu6uCLrNSzh76eu71WuwXWpkfeqFYytcGHE= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1731346109; c=relaxed/simple; bh=M5OsoVpAW8birpxYPEPyqamYJVdzmru22JZB8gyBgbo=; h=DKIM-Signature:Message-ID:Date:MIME-Version:Subject:To:From; b=X4ER206ATVvRdyYpgcloI2SkFLBxFTc6nMyZQwz6F4Cxg8tJvBAQMdezTiKbzWUVfDznSWElUZm9rZPX0sAoOBAOtF9mLJnXm00x44Vuiwq8iqs/rXE7GD5p43LFDlZD+NNNFjpGU5qfWo62r4YHidtnvxW4qVe2UX8l0XIDUtk= ARC-Authentication-Results: i=1; server2.sourceware.org Received: by mail-pf1-x42d.google.com with SMTP id d2e1a72fcca58-72061bfec2dso4335880b3a.2 for ; Mon, 11 Nov 2024 09:28:24 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=baylibre-com.20230601.gappssmtp.com; s=20230601; t=1731346103; x=1731950903; darn=gcc.gnu.org; h=in-reply-to:from:content-language:references:cc:to:subject :user-agent:mime-version:date:message-id:from:to:cc:subject:date :message-id:reply-to; bh=UvutzuXiXKfK/NiK3mS6kb7rJhfdEde/IkkCJV0ny7E=; b=yB2w5BLWSMqrBBV2x+Mv11KQpmP15rFGc1tKKJYeoQm9hFb2FuQCFJSlFpzHPEmWry CvDa6yzNAcbUOVfiHfRv8rckWpThiri66VexGEEe7Qa41gAkMERtcOBI958V6B7YgSgy Xt3952u0qeKypmh3yFmo4rGtNDnnZsM2i84W2SQGsdpBugntFPcjLwz+Dxqu075czXx2 CtPcXCX/bBgApy0uwwCTkEQxe9+ANhZpuYO9HsbslXTMvL9kokdEyszr0XjNbLk4w41d WxkrN8Y57MUL7BJFx6XAKN+9z/5E00yQLDYp+YqvBd+kzBamX6vcy9mkvk8kDaZ6+lWe qtPA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1731346103; x=1731950903; h=in-reply-to:from:content-language:references:cc:to:subject :user-agent:mime-version:date:message-id:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=UvutzuXiXKfK/NiK3mS6kb7rJhfdEde/IkkCJV0ny7E=; b=X4ReAkl1aJs7YZTM1OGUY2DUuGLnHZAvavrBhvGkMeRSHmbitG1YTsLFJgd716FnY1 hA8QeseoOGeSXflRrwa40ID1/DiVQFvnWWmIVm1HmiXiBqM5nwOt962CCyqHw3wVO6N9 +8Y22oZTb71o2cH/Dqpk3imn/nhPCXCNqoYVp6FaPE0k5PXd0t5lWEvSOWyQP3KdGsby iQT/ejmrc8V0VBHTJGBEb5NzH2bzClaK/DcAKGoIUtQkqCnRK7ZbShr23Wcoy+ngbQO7 0soUEk/drOgWtRC9nKzveGK3JEW3OJIviF0h59vbWa41O3yKWsFEzAV/KbGKnribFmHH ZcxQ== X-Gm-Message-State: AOJu0YyjKDXww/sKgVjoscupHQLCY7oDFIz+TIAY1c/iiksbEGBz0hBR /6UN3fP6JWtP079ObrTdRph1hF61/H1Yv5cU+spSshzj6eTAlgOmM6DHrb9ENOg= X-Google-Smtp-Source: AGHT+IH8o1y0Of5Zc1k4wxko0jOBzwpUouRCxx6cZwcOtI1CWc/2Ip8TWRRRtzChEahMbN02oWJyEw== X-Received: by 2002:a05:6a00:21ca:b0:71e:fb4:6c98 with SMTP id d2e1a72fcca58-724133a2455mr18100412b3a.23.1731346103255; Mon, 11 Nov 2024 09:28:23 -0800 (PST) Received: from [192.168.50.226] (112-104-13-242.adsl.dynamic.seed.net.tw. [112.104.13.242]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-724078ab561sm9393451b3a.71.2024.11.11.09.28.21 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Mon, 11 Nov 2024 09:28:22 -0800 (PST) Content-Type: multipart/mixed; boundary="------------NR9iJzH0OJaYjXCWPsWfDAfG" Message-ID: <0db519e3-e862-47d0-b465-2f7a70feb855@baylibre.com> Date: Tue, 12 Nov 2024 01:28:19 +0800 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH, OpenACC 2.7] Connect readonly modifier to points-to analysis To: Richard Biener , Chung-Lin Tang Cc: gcc-patches@gcc.gnu.org, Thomas Schwinge References: <5196826c-e81a-ab5c-63e9-bd8509232da0@siemens.com> <87msw4uolq.fsf@euler.schwinge.homeip.net> <4abdfb2f-30e8-44eb-82a4-250a3641d9e9@pllab.cs.nthu.edu.tw> <38q5p4r0-0orr-rq52-p16o-50936s379370@fhfr.qr> Content-Language: en-US From: Chung-Lin Tang In-Reply-To: <38q5p4r0-0orr-rq52-p16o-50936s379370@fhfr.qr> X-Spam-Status: No, score=-12.5 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,GIT_PATCH_0,KAM_SHORT,RCVD_IN_DNSWL_NONE,SPF_HELO_NONE,SPF_PASS,TXREP autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: This is a multi-part message in MIME format. --------------NR9iJzH0OJaYjXCWPsWfDAfG Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit On 2024/5/16 8:36 PM, Richard Biener wrote: >> After omp-expand (before SSA): >> >> __attribute__((oacc parallel, omp target entrypoint, noclone)) >> void main._omp_fn.1 (const struct .omp_data_t.3 & restrict .omp_data_i) >> { >> ... >> : >> D.2962 = .omp_data_i->D.2947; >> a.8 = D.2962; > So 'readonly: a[:32]' is put in .omp_data_i->D.2947 in the caller > and extracted here. And you arrange for 'a.8' to have > DECL_POINTS_TO_READONLY set by "magic"? Looking at this I wonder > if it would be more useful to "const qualify" (but "really", not > in the C sense) .omp_data_i->D.2947 instead? Thus have a > FIELD_POINTS_TO_READONLY_MEMORY flag on the FIELD_DECL. > > Points-to analysis should then be able to handle this similar to how > it handles loads of restrict qualified pointers. Well, of course not > as simple since it now adds "qualifiers" to storage since I presume > the same object can be both readonly and not readonly like via > > #pragma acc parallel copyin(readonly: a[:32], a[33:64]) copyout(r) > > ? That is, currently there's only one "readonly" object kind in > points-to, that's STRING_CSTs which get all globbed to string_id > and "ignored" for alias purposes since you can't change them. > > So possibly you want to combine this with restrict qualifying the > pointer so we know there's no other (read-write) access to the memory > possible. But then you might get all the good stuff already by > _just_ doing that restrict qualification and ignoring the readonly-ness? Hi Richard, (sorry for returning to this with such a long hiatus) The restrict qualification on pointers is interesting, I'll investigate using that in a later revision of this patch. > +#define DECL_POINTS_TO_READONLY(NODE) \ > + (TREE_CHECK (NODE, VAR_DECL)->decl_common.decl_not_flexarray) > > you need to document uses of flags in tree-core.h to avoid clashes. > Also since this doesn't apply to all DECLs it should be named > VAR_POINTS_TO_... I've made that change, seems logical. Though frankly speaking there appears to be many DECL_* macros that have "TREE_CHECK (NODE, VAR_DECL)" :P > I still think this is too fragile - there's no real constraints > on what VAR_DECL we create SSA names off, so the automatism > in make_ssa_name_fn and esp. copy_var_decl and via copy_node > copy_decl_no_change, thus during inlining, makes your arguments > only apply to the use for OpenMP - but nothing above hints at > this is just usable there, asking for trouble. The idea was that we restrict what VAR_DECLs we allow such a points-to-readonly set, but yeah this could use more documentation later. I have for the time being pushed the attached patch to devel/omp/gcc-14 branch. Thanks, Chung-Lin --------------NR9iJzH0OJaYjXCWPsWfDAfG Content-Type: text/plain; charset=UTF-8; name="0001-OpenACC-2.7-Connect-readonly-modifier-to-points-to-a.patch" Content-Disposition: attachment; filename*0="0001-OpenACC-2.7-Connect-readonly-modifier-to-points-to-a.pa"; filename*1="tch" Content-Transfer-Encoding: base64 RnJvbSA4N2RjZGMzZGViNmFiNmIxYmMwOWFhY2JmYjgyODE4MmFmZTc5Zjc0IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBDaHVuZy1MaW4gVGFuZyA8Y2x0YW5nQGJheWxpYnJl LmNvbT4KRGF0ZTogTW9uLCAxMSBOb3YgMjAyNCAxNzoxNjoyNiArMDAwMApTdWJqZWN0OiBb UEFUQ0hdIE9wZW5BQ0MgMi43OiBDb25uZWN0IHJlYWRvbmx5IG1vZGlmaWVyIHRvIHBvaW50 cy10byBhbmFseXNpcwoKVGhpcyBwYXRjaCBsaW5rcyB0aGUgcmVhZG9ubHkgbW9kaWZpZXIg dG8gcG9pbnRzLXRvIGFuYWx5c2lzLgoKSW4gZnJvbnQtZW5kcywgZmlyc3Rwcml2YXRlIHBv aW50ZXIgY2xhdXNlcyBhcmUgbWFya2VkIHdpdGgKT01QX0NMQVVTRV9NQVBfUE9JTlRTX1RP X1JFQURPTkxZIHNldCB0cnVlLCBhbmQgbGF0ZXIgZHVyaW5nIGxvd2VyaW5nIHRoZQpyZWNl aXZlciBzaWRlIHJlYWQgb2YgcG9pbnRlciBoYXMgVkFSX1BPSU5UU19UT19SRUFET05MWSBz ZXQgdHJ1ZSwgd2hpY2ggbGF0ZXIKZGlyZWN0cyBTU0FfTkFNRV9QT0lOVFNfVE9fUkVBRE9O TFlfTUVNT1JZIHNldCB0byB0cnVlIGR1cmluZyBTU0EgY29udmVyc2lvbi4KClNTQV9OQU1F X1BPSU5UU19UT19SRUFET05MWV9NRU1PUlkgaXMgYW4gYWxyZWFkeSBleGlzdGluZyBmbGFn IGNvbm5lY3RlZCB3aXRoCmFsaWFzIG9yYWNsZSByb3V0aW5lcyBpbiB0cmVlLXNzYS1hbGlh cy5jYywgdGh1cyBtYWtpbmcgdGhlIHJlYWRvbmx5LW1vZGlmaWVyCmVmZmVjdGl2ZSBpbiBo aW50aW5nIHBvaW50cy10byBhbmFseXNpcy4KCkN1cnJlbnRseSBoYXZlIG9uZSB0ZXN0Y2Fz ZSBjLWMrKy1jb21tb24vZ29hY2MvcmVhZG9ubHktMi5jIHdoZXJlIHdlIGNhbgpkZW1vbnN0 cmF0ZSAncmVhZG9ubHknIGNhbiBhdm9pZCBhIGNsb2JiZXIgYnkgZnVuY3Rpb24gY2FsbC4K ClRoaXMgcGF0Y2ggaXMgcG9ydGVkIGZyb20gdXBzdHJlYW0gc3VibWlzc2lvbjoKaHR0cHM6 Ly9nY2MuZ251Lm9yZy9waXBlcm1haWwvZ2NjLXBhdGNoZXMvMjAyNC1BcHJpbC82NDg3Mjgu aHRtbAoKZ2NjL2MtZmFtaWx5L0NoYW5nZUxvZzoKCgkqIGMtb21wLmNjIChjX29tcF9hZGRy ZXNzX2luc3BlY3Rvcjo6ZXhwYW5kX2FycmF5X2Jhc2UpOgoJU2V0IE9NUF9DTEFVU0VfTUFQ X1BPSU5UU19UT19SRUFET05MWSBvbiBwb2ludGVyIGNsYXVzZS4KCShjX29tcF9hZGRyZXNz X2luc3BlY3Rvcjo6ZXhwYW5kX2NvbXBvbmVudF9zZWxlY3Rvcik6IExpa2V3aXNlLgoKZ2Nj L2ZvcnRyYW4vQ2hhbmdlTG9nOgoKCSogdHJhbnMtb3Blbm1wLmNjIChnZmNfdHJhbnNfb21w X2FycmF5X3NlY3Rpb24pOgoJU2V0IE9NUF9DTEFVU0VfTUFQX1BPSU5UU19UT19SRUFET05M WSBvbiBwb2ludGVyIGNsYXVzZS4KCmdjYy9DaGFuZ2VMb2c6CgoJKiBnaW1wbGUtZXhwci5j YyAoY29weV92YXJfZGVjbCk6IENvcHkgVkFSX1BPSU5UU19UT19SRUFET05MWQoJZm9yIFZB Ul9ERUNMcy4KCSogb21wLWxvdy5jYyAobG93ZXJfb21wX3RhcmdldCk6IFNldCBWQVJfUE9J TlRTX1RPX1JFQURPTkxZIGZvcgoJdmFyaWFibGVzIG9mIHJlY2VpdmVyIHJlZnMuCgkqIHRy ZWUtcHJldHR5LXByaW50LmNjIChkdW1wX29tcF9jbGF1c2UpOgoJUHJpbnQgT01QX0NMQVVT RV9NQVBfUE9JTlRTX1RPX1JFQURPTkxZLgoJKGR1bXBfZ2VuZXJpY19ub2RlKTogUHJpbnQg U1NBX05BTUVfUE9JTlRTX1RPX1JFQURPTkxZX01FTU9SWS4KCSogdHJlZS1zc2FuYW1lcy5j YyAobWFrZV9zc2FfbmFtZV9mbik6IFNldAoJU1NBX05BTUVfUE9JTlRTX1RPX1JFQURPTkxZ X01FTU9SWSBpZiBERUNMX1BPSU5UU19UT19SRUFET05MWSBpcyBzZXQuCgkqIHRyZWUuaCAo T01QX0NMQVVTRV9NQVBfUE9JTlRTX1RPX1JFQURPTkxZKTogTmV3IG1hY3JvLgoJKFZBUl9Q T0lOVFNfVE9fUkVBRE9OTFkpOiBOZXcgbWFjcm8uCgpnY2MvdGVzdHN1aXRlL0NoYW5nZUxv ZzoKCgkqIGMtYysrLWNvbW1vbi9nb2FjYy9yZWFkb25seS0xLmM6IEFkanVzdCB0ZXN0Y2Fz ZS4KCSogYy1jKystY29tbW9uL2dvYWNjL3JlYWRvbmx5LTIuYzogTmV3IHRlc3RjYXNlLgoJ KiBnZm9ydHJhbi5kZy9nb2FjYy9yZWFkb25seS0xLmY5MDogQWRqdXN0IHRlc3RjYXNlLgot LS0KIGdjYy9jLWZhbWlseS9jLW9tcC5jYyAgICAgICAgICAgICAgICAgICAgICAgICB8ICA0 ICsrKysKIGdjYy9mb3J0cmFuL3RyYW5zLW9wZW5tcC5jYyAgICAgICAgICAgICAgICAgICB8 ICAyICsrCiBnY2MvZ2ltcGxlLWV4cHIuY2MgICAgICAgICAgICAgICAgICAgICAgICAgICAg fCAgMiArKwogZ2NjL29tcC1sb3cuY2MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHwgIDIgKysKIGdjYy90ZXN0c3VpdGUvYy1jKystY29tbW9uL2dvYWNjL3JlYWRvbmx5LTEu YyB8IDIwICsrKysrKysrKy0tLS0tLS0tLS0KIGdjYy90ZXN0c3VpdGUvYy1jKystY29tbW9u L2dvYWNjL3JlYWRvbmx5LTIuYyB8IDE2ICsrKysrKysrKysrKysrKwogLi4uL2dmb3J0cmFu LmRnL2dvYWNjL3JlYWRvbmx5LTEuZjkwICAgICAgICAgIHwgMjAgKysrKysrKysrLS0tLS0t LS0tLQogZ2NjL3Rlc3RzdWl0ZS9nZm9ydHJhbi5kZy9wcjY3MTcwLmY5MCAgICAgICAgIHwg IDIgKy0KIGdjYy90cmVlLXByZXR0eS1wcmludC5jYyAgICAgICAgICAgICAgICAgICAgICB8 ICA0ICsrKysKIGdjYy90cmVlLXNzYW5hbWVzLmNjICAgICAgICAgICAgICAgICAgICAgICAg ICB8ICAzICsrKwogZ2NjL3RyZWUuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHwgMTEgKysrKysrKysrKwogMTEgZmlsZXMgY2hhbmdlZCwgNjUgaW5zZXJ0aW9ucygr KSwgMjEgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgZ2NjL3Rlc3RzdWl0ZS9j LWMrKy1jb21tb24vZ29hY2MvcmVhZG9ubHktMi5jCgpkaWZmIC0tZ2l0IGEvZ2NjL2MtZmFt aWx5L2Mtb21wLmNjIGIvZ2NjL2MtZmFtaWx5L2Mtb21wLmNjCmluZGV4IDZiMTAwODJjYzkz Li40NzliNjk3NDFhNSAxMDA2NDQKLS0tIGEvZ2NjL2MtZmFtaWx5L2Mtb21wLmNjCisrKyBi L2djYy9jLWZhbWlseS9jLW9tcC5jYwpAQCAtNDEzNSw2ICs0MTM1LDggQEAgY19vbXBfYWRk cmVzc19pbnNwZWN0b3I6OmV4cGFuZF9hcnJheV9iYXNlICh0cmVlICpwYywKICAgICB9CiAg IGVsc2UgaWYgKGMyKQogICAgIHsKKyAgICAgIGlmIChPTVBfQ0xBVVNFX01BUF9SRUFET05M WSAoYykpCisJT01QX0NMQVVTRV9NQVBfUE9JTlRTX1RPX1JFQURPTkxZIChjMikgPSAxOwog ICAgICAgT01QX0NMQVVTRV9DSEFJTiAoYzIpID0gT01QX0NMQVVTRV9DSEFJTiAoYyk7CiAg ICAgICBPTVBfQ0xBVVNFX0NIQUlOIChjKSA9IGMyOwogICAgICAgaWYgKGltcGxpY2l0X3Ap CkBAIC00MzI0LDYgKzQzMjYsOCBAQCBjX29tcF9hZGRyZXNzX2luc3BlY3Rvcjo6ZXhwYW5k X2NvbXBvbmVudF9zZWxlY3RvciAodHJlZSAqcGMsCiAgICAgfQogICBlbHNlIGlmIChjMikK ICAgICB7CisgICAgICBpZiAoT01QX0NMQVVTRV9NQVBfUkVBRE9OTFkgKGMpKQorCU9NUF9D TEFVU0VfTUFQX1BPSU5UU19UT19SRUFET05MWSAoYzIpID0gMTsKICAgICAgIE9NUF9DTEFV U0VfQ0hBSU4gKGMyKSA9IE9NUF9DTEFVU0VfQ0hBSU4gKGMpOwogICAgICAgT01QX0NMQVVT RV9DSEFJTiAoYykgPSBjMjsKICAgICAgIHBjID0gJk9NUF9DTEFVU0VfQ0hBSU4gKGMpOwpk aWZmIC0tZ2l0IGEvZ2NjL2ZvcnRyYW4vdHJhbnMtb3Blbm1wLmNjIGIvZ2NjL2ZvcnRyYW4v dHJhbnMtb3Blbm1wLmNjCmluZGV4IGZmN2E4ZDE5YzAwLi5lNmJhN2I1ODM5ZSAxMDA2NDQK LS0tIGEvZ2NjL2ZvcnRyYW4vdHJhbnMtb3Blbm1wLmNjCisrKyBiL2djYy9mb3J0cmFuL3Ry YW5zLW9wZW5tcC5jYwpAQCAtNDAzMiw2ICs0MDMyLDggQEAgZ2ZjX3RyYW5zX29tcF9hcnJh eV9zZWN0aW9uIChzdG10YmxvY2tfdCAqYmxvY2ssIHRvY19kaXJlY3RpdmUgY2QsCiAgIHB0 cjIgPSBmb2xkX2NvbnZlcnQgKHB0cmRpZmZfdHlwZV9ub2RlLCBwdHIyKTsKICAgT01QX0NM QVVTRV9TSVpFIChub2RlMykgPSBmb2xkX2J1aWxkMiAoTUlOVVNfRVhQUiwgcHRyZGlmZl90 eXBlX25vZGUsCiAJCQkJCSBwdHIsIHB0cjIpOworICBpZiAobi0+dS5tYXAucmVhZG9ubHkp CisgICAgT01QX0NMQVVTRV9NQVBfUE9JTlRTX1RPX1JFQURPTkxZIChub2RlMykgPSAxOwog fQogCiAvKiBDTEFVU0VTIGlzIGEgbGlzdCBvZiBjbGF1c2VzIHJlc3VsdGluZyBmcm9tIGFu ICJvbXAgZGVjbGFyZSBtYXBwZXIiCmRpZmYgLS1naXQgYS9nY2MvZ2ltcGxlLWV4cHIuY2Mg Yi9nY2MvZ2ltcGxlLWV4cHIuY2MKaW5kZXggZjhkNzE4NTUzMGMuLjIyNzIyMjQ5YTE5IDEw MDY0NAotLS0gYS9nY2MvZ2ltcGxlLWV4cHIuY2MKKysrIGIvZ2NjL2dpbXBsZS1leHByLmNj CkBAIC0zODUsNiArMzg1LDggQEAgY29weV92YXJfZGVjbCAodHJlZSB2YXIsIHRyZWUgbmFt ZSwgdHJlZSB0eXBlKQogICBERUNMX0NPTlRFWFQgKGNvcHkpID0gREVDTF9DT05URVhUICh2 YXIpOwogICBUUkVFX1VTRUQgKGNvcHkpID0gMTsKICAgREVDTF9TRUVOX0lOX0JJTkRfRVhQ Ul9QIChjb3B5KSA9IDE7CisgIGlmIChWQVJfUCAodmFyKSkKKyAgICBWQVJfUE9JTlRTX1RP X1JFQURPTkxZIChjb3B5KSA9IFZBUl9QT0lOVFNfVE9fUkVBRE9OTFkgKHZhcik7CiAgIERF Q0xfQVRUUklCVVRFUyAoY29weSkgPSBERUNMX0FUVFJJQlVURVMgKHZhcik7CiAgIGlmIChE RUNMX1VTRVJfQUxJR04gKHZhcikpCiAgICAgewpkaWZmIC0tZ2l0IGEvZ2NjL29tcC1sb3cu Y2MgYi9nY2Mvb21wLWxvdy5jYwppbmRleCBhMTkwZTBmYjJlYi4uZmEyNGZlYjgwYmIgMTAw NjQ0Ci0tLSBhL2djYy9vbXAtbG93LmNjCisrKyBiL2djYy9vbXAtbG93LmNjCkBAIC0xNTI5 Myw2ICsxNTI5Myw4IEBAIGxvd2VyX29tcF90YXJnZXQgKGdpbXBsZV9zdG10X2l0ZXJhdG9y ICpnc2lfcCwgb21wX2NvbnRleHQgKmN0eCkKIAkJaWYgKHJlZl90b19hcnJheSkKIAkJICB4 ID0gZm9sZF9jb252ZXJ0X2xvYyAoY2xhdXNlX2xvYywgVFJFRV9UWVBFIChuZXdfdmFyKSwg eCk7CiAJCWdpbXBsaWZ5X2V4cHIgKCZ4LCAmbmV3X2JvZHksIE5VTEwsIGlzX2dpbXBsZV92 YWwsIGZiX3J2YWx1ZSk7CisJCWlmIChPTVBfQ0xBVVNFX01BUF9QT0lOVFNfVE9fUkVBRE9O TFkgKGMpICYmIFZBUl9QICh4KSkKKwkJICBWQVJfUE9JTlRTX1RPX1JFQURPTkxZICh4KSA9 IDE7CiAJCWlmICgoaXNfcmVmICYmICFyZWZfdG9fYXJyYXkpCiAJCSAgICB8fCByZWZfdG9f cHRyKQogCQkgIHsKZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvYy1jKystY29tbW9uL2dv YWNjL3JlYWRvbmx5LTEuYyBiL2djYy90ZXN0c3VpdGUvYy1jKystY29tbW9uL2dvYWNjL3Jl YWRvbmx5LTEuYwppbmRleCBiZDRkMjI5NGMyYS4uYWViOGUwZWY4NjIgMTAwNjQ0Ci0tLSBh L2djYy90ZXN0c3VpdGUvYy1jKystY29tbW9uL2dvYWNjL3JlYWRvbmx5LTEuYworKysgYi9n Y2MvdGVzdHN1aXRlL2MtYysrLWNvbW1vbi9nb2FjYy9yZWFkb25seS0xLmMKQEAgLTQ4LDE3 ICs0OCwxNyBAQCBpbnQgbWFpbiAodm9pZCkKIAogLyogeyBkZy1maW5hbCB7IHNjYW4tdHJl ZS1kdW1wLXRpbWVzICIoP24pI3ByYWdtYSBhY2MgZGVjbGFyZSBtYXBcXCh0bzp5XFwpIG1h cFxcKHJlYWRvbmx5LHRvOnNcXCkgbWFwXFwocmVhZG9ubHksdG86eFxcKSIgMSAib3JpZ2lu YWwiIH0gfSAqLwogCi0vKiB7IGRnLWZpbmFsIHsgc2Nhbi10cmVlLWR1bXAtdGltZXMgIig/ bikjcHJhZ21hIGFjYyBwYXJhbGxlbCBtYXBcXCh0bzp5XFxcWzBcXFxdIFxcXFtsZW46IFxb MC05XF0rXFxcXVxcKSAuKyBtYXBcXChyZWFkb25seSx0bzpcXCpzLnB0ciBcXFxbbGVuOiBc WzAtOVxdK1xcXF1cXCkgLisgbWFwXFwocmVhZG9ubHksdG86eFxcXFswXFxcXSBcXFxbbGVu OiBcWzAtOVxdK1xcXF1cXCkiIDEgIm9yaWdpbmFsIiB7IHRhcmdldCB7IGMgfSB9IH0gfSAq LwotLyogeyBkZy1maW5hbCB7IHNjYW4tdHJlZS1kdW1wLXRpbWVzICIoP24pI3ByYWdtYSBh Y2Mga2VybmVscyBtYXBcXCh0bzp5XFxcWzBcXFxdIFxcXFtsZW46IFxbMC05XF0rXFxcXVxc KSAuKyBtYXBcXChyZWFkb25seSx0bzpcXCpzLnB0ciBcXFxbbGVuOiBcWzAtOVxdK1xcXF1c XCkgLisgbWFwXFwocmVhZG9ubHksdG86eFxcXFswXFxcXSBcXFxbbGVuOiBcWzAtOVxdK1xc XF1cXCkiIDEgIm9yaWdpbmFsIiB7IHRhcmdldCB7IGMgfSB9IH0gfSAqLwotLyogeyBkZy1m aW5hbCB7IHNjYW4tdHJlZS1kdW1wLXRpbWVzICIoP24pI3ByYWdtYSBhY2Mgc2VyaWFsIG1h cFxcKHRvOnlcXFxbMFxcXF0gXFxcW2xlbjogXFswLTlcXStcXFxdXFwpIC4rIG1hcFxcKHJl YWRvbmx5LHRvOlxcKnMucHRyIFxcXFtsZW46IFxbMC05XF0rXFxcXVxcKSAuKyBtYXBcXChy ZWFkb25seSx0bzp4XFxcWzBcXFxdIFxcXFtsZW46IFxbMC05XF0rXFxcXVxcKSIgMSAib3Jp Z2luYWwiIHsgdGFyZ2V0IHsgYyB9IH0gfSB9ICovCi0vKiB7IGRnLWZpbmFsIHsgc2Nhbi10 cmVlLWR1bXAtdGltZXMgIig/bikjcHJhZ21hIGFjYyBkYXRhIG1hcFxcKHRvOnlcXFxbMFxc XF0gXFxcW2xlbjogXFswLTlcXStcXFxdXFwpIC4rIG1hcFxcKHJlYWRvbmx5LHRvOlxcKnMu cHRyIFxcXFtsZW46IFxbMC05XF0rXFxcXVxcKSAuKyBtYXBcXChyZWFkb25seSx0bzp4XFxc WzBcXFxdIFxcXFtsZW46IFxbMC05XF0rXFxcXVxcKSIgMSAib3JpZ2luYWwiIHsgdGFyZ2V0 IHsgYyB9IH0gfSB9ICovCi0vKiB7IGRnLWZpbmFsIHsgc2Nhbi10cmVlLWR1bXAtdGltZXMg Iig/bikjcHJhZ21hIGFjYyBlbnRlciBkYXRhIG1hcFxcKHRvOnlcXFxbMFxcXF0gXFxcW2xl bjogXFswLTlcXStcXFxdXFwpIC4rIG1hcFxcKHJlYWRvbmx5LHRvOlxcKnMucHRyIFxcXFts ZW46IFxbMC05XF0rXFxcXVxcKSAuKyBtYXBcXChyZWFkb25seSx0bzp4XFxcWzBcXFxdIFxc XFtsZW46IFxbMC05XF0rXFxcXVxcKSIgMSAib3JpZ2luYWwiIHsgdGFyZ2V0IHsgYyB9IH0g fSB9ICovCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi10cmVlLWR1bXAtdGltZXMgIig/bikjcHJh Z21hIGFjYyBwYXJhbGxlbCBtYXBcXCh0bzp5XFxcWzBcXFxdIFxcXFtsZW46IFxbMC05XF0r XFxcXVxcKSAuKyBtYXBcXChyZWFkb25seSx0bzpcXCpzLnB0ciBcXFxbbGVuOiBcWzAtOVxd K1xcXF1cXCkgbWFwXFwocHRfcmVhZG9ubHksYXR0YWNoX2RldGFjaDpzLnB0ciBcXFxbYmlh czogMFxcXF1cXCkgbWFwXFwocmVhZG9ubHksdG86eFxcXFswXFxcXSBcXFxbbGVuOiBcWzAt OVxdK1xcXF1cXCkgbWFwXFwocHRfcmVhZG9ubHksZmlyc3Rwcml2YXRlOnggXFxcW3BvaW50 ZXIgYXNzaWduLCBiaWFzOiAwXFxcXVxcKSIgMSAib3JpZ2luYWwiIHsgdGFyZ2V0IHsgYyB9 IH0gfSB9ICovCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi10cmVlLWR1bXAtdGltZXMgIig/bikj cHJhZ21hIGFjYyBrZXJuZWxzIG1hcFxcKHRvOnlcXFxbMFxcXF0gXFxcW2xlbjogXFswLTlc XStcXFxdXFwpIC4rIG1hcFxcKHJlYWRvbmx5LHRvOlxcKnMucHRyIFxcXFtsZW46IFxbMC05 XF0rXFxcXVxcKSBtYXBcXChwdF9yZWFkb25seSxhdHRhY2hfZGV0YWNoOnMucHRyIFxcXFti aWFzOiAwXFxcXVxcKSBtYXBcXChyZWFkb25seSx0bzp4XFxcWzBcXFxdIFxcXFtsZW46IFxb MC05XF0rXFxcXVxcKSBtYXBcXChwdF9yZWFkb25seSxmaXJzdHByaXZhdGU6eCBcXFxbcG9p bnRlciBhc3NpZ24sIGJpYXM6IDBcXFxdXFwpIiAxICJvcmlnaW5hbCIgeyB0YXJnZXQgeyBj IH0gfSB9IH0gKi8KKy8qIHsgZGctZmluYWwgeyBzY2FuLXRyZWUtZHVtcC10aW1lcyAiKD9u KSNwcmFnbWEgYWNjIHNlcmlhbCBtYXBcXCh0bzp5XFxcWzBcXFxdIFxcXFtsZW46IFxbMC05 XF0rXFxcXVxcKSAuKyBtYXBcXChyZWFkb25seSx0bzpcXCpzLnB0ciBcXFxbbGVuOiBcWzAt OVxdK1xcXF1cXCkgbWFwXFwocHRfcmVhZG9ubHksYXR0YWNoX2RldGFjaDpzLnB0ciBcXFxb YmlhczogMFxcXF1cXCkgbWFwXFwocmVhZG9ubHksdG86eFxcXFswXFxcXSBcXFxbbGVuOiBc WzAtOVxdK1xcXF1cXCkgbWFwXFwocHRfcmVhZG9ubHksZmlyc3Rwcml2YXRlOnggXFxcW3Bv aW50ZXIgYXNzaWduLCBiaWFzOiAwXFxcXVxcKSIgMSAib3JpZ2luYWwiIHsgdGFyZ2V0IHsg YyB9IH0gfSB9ICovCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi10cmVlLWR1bXAtdGltZXMgIig/ bikjcHJhZ21hIGFjYyBkYXRhIG1hcFxcKHRvOnlcXFxbMFxcXF0gXFxcW2xlbjogXFswLTlc XStcXFxdXFwpIC4rIG1hcFxcKHJlYWRvbmx5LHRvOlxcKnMucHRyIFxcXFtsZW46IFxbMC05 XF0rXFxcXVxcKSBtYXBcXChwdF9yZWFkb25seSxhdHRhY2hfZGV0YWNoOnMucHRyIFxcXFti aWFzOiAwXFxcXVxcKSBtYXBcXChyZWFkb25seSx0bzp4XFxcWzBcXFxdIFxcXFtsZW46IFxb MC05XF0rXFxcXVxcKSIgMSAib3JpZ2luYWwiIHsgdGFyZ2V0IHsgYyB9IH0gfSB9ICovCisv KiB7IGRnLWZpbmFsIHsgc2Nhbi10cmVlLWR1bXAtdGltZXMgIig/bikjcHJhZ21hIGFjYyBl bnRlciBkYXRhIG1hcFxcKHRvOnlcXFxbMFxcXF0gXFxcW2xlbjogXFswLTlcXStcXFxdXFwp IC4rIG1hcFxcKHJlYWRvbmx5LHRvOlxcKnMucHRyIFxcXFtsZW46IFxbMC05XF0rXFxcXVxc KSBtYXBcXChwdF9yZWFkb25seSxhdHRhY2hfZGV0YWNoOnMucHRyIFxcXFtiaWFzOiAwXFxc XVxcKSBtYXBcXChyZWFkb25seSx0bzp4XFxcWzBcXFxdIFxcXFtsZW46IFxbMC05XF0rXFxc XVxcKSIgMSAib3JpZ2luYWwiIHsgdGFyZ2V0IHsgYyB9IH0gfSB9ICovCiAKLS8qIHsgZGct ZmluYWwgeyBzY2FuLXRyZWUtZHVtcC10aW1lcyAiKD9uKSNwcmFnbWEgYWNjIHBhcmFsbGVs IG1hcFxcKHRvOnlcXFxbMFxcXF0gXFxcW2xlbjogXFswLTlcXStcXFxdXFwpIC4rIG1hcFxc KHJlYWRvbmx5LHRvOlxcKk5PTl9MVkFMVUVfRVhQUiA8cy5wdHI+IFxcXFtsZW46IFxbMC05 XF0rXFxcXVxcKSAuKyBtYXBcXChyZWFkb25seSx0bzp4XFxcWzBcXFxdIFxcXFtsZW46IFxb MC05XF0rXFxcXVxcKSIgMSAib3JpZ2luYWwiIHsgdGFyZ2V0IHsgYysrIH0gfSB9IH0gKi8K LS8qIHsgZGctZmluYWwgeyBzY2FuLXRyZWUtZHVtcC10aW1lcyAiKD9uKSNwcmFnbWEgYWNj IGtlcm5lbHMgbWFwXFwodG86eVxcXFswXFxcXSBcXFxbbGVuOiBcWzAtOVxdK1xcXF1cXCkg LisgbWFwXFwocmVhZG9ubHksdG86XFwqTk9OX0xWQUxVRV9FWFBSIDxzLnB0cj4gXFxcW2xl bjogXFswLTlcXStcXFxdXFwpIC4rIG1hcFxcKHJlYWRvbmx5LHRvOnhcXFxbMFxcXF0gXFxc W2xlbjogXFswLTlcXStcXFxdXFwpIiAxICJvcmlnaW5hbCIgeyB0YXJnZXQgeyBjKysgfSB9 IH0gfSAqLwotLyogeyBkZy1maW5hbCB7IHNjYW4tdHJlZS1kdW1wLXRpbWVzICIoP24pI3By YWdtYSBhY2Mgc2VyaWFsIG1hcFxcKHRvOnlcXFxbMFxcXF0gXFxcW2xlbjogXFswLTlcXStc XFxdXFwpIC4rIG1hcFxcKHJlYWRvbmx5LHRvOlxcKk5PTl9MVkFMVUVfRVhQUiA8cy5wdHI+ IFxcXFtsZW46IFxbMC05XF0rXFxcXVxcKSAuKyBtYXBcXChyZWFkb25seSx0bzp4XFxcWzBc XFxdIFxcXFtsZW46IFxbMC05XF0rXFxcXVxcKSIgMSAib3JpZ2luYWwiIHsgdGFyZ2V0IHsg YysrIH0gfSB9IH0gKi8KLS8qIHsgZGctZmluYWwgeyBzY2FuLXRyZWUtZHVtcC10aW1lcyAi KD9uKSNwcmFnbWEgYWNjIGRhdGEgbWFwXFwodG86eVxcXFswXFxcXSBcXFxbbGVuOiBcWzAt OVxdK1xcXF1cXCkgLisgbWFwXFwocmVhZG9ubHksdG86XFwqTk9OX0xWQUxVRV9FWFBSIDxz LnB0cj4gXFxcW2xlbjogXFswLTlcXStcXFxdXFwpIC4rIG1hcFxcKHJlYWRvbmx5LHRvOnhc XFxbMFxcXF0gXFxcW2xlbjogXFswLTlcXStcXFxdXFwpIiAxICJvcmlnaW5hbCIgeyB0YXJn ZXQgeyBjKysgfSB9IH0gfSAqLwotLyogeyBkZy1maW5hbCB7IHNjYW4tdHJlZS1kdW1wLXRp bWVzICIoP24pI3ByYWdtYSBhY2MgZW50ZXIgZGF0YSBtYXBcXCh0bzp5XFxcWzBcXFxdIFxc XFtsZW46IFxbMC05XF0rXFxcXVxcKSAuKyBtYXBcXChyZWFkb25seSx0bzpcXCpOT05fTFZB TFVFX0VYUFIgPHMucHRyPiBcXFxbbGVuOiBcWzAtOVxdK1xcXF1cXCkgLisgbWFwXFwocmVh ZG9ubHksdG86eFxcXFswXFxcXSBcXFxbbGVuOiBcWzAtOVxdK1xcXF1cXCkiIDEgIm9yaWdp bmFsIiB7IHRhcmdldCB7IGMrKyB9IH0gfSB9ICovCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi10 cmVlLWR1bXAtdGltZXMgIig/bikjcHJhZ21hIGFjYyBwYXJhbGxlbCBtYXBcXCh0bzp5XFxc WzBcXFxdIFxcXFtsZW46IFxbMC05XF0rXFxcXVxcKSAuKyBtYXBcXChyZWFkb25seSx0bzpc XCpOT05fTFZBTFVFX0VYUFIgPHMucHRyPiBcXFxbbGVuOiBcWzAtOVxdK1xcXF1cXCkgbWFw XFwocHRfcmVhZG9ubHksYXR0YWNoX2RldGFjaDpzLnB0ciBcXFxbYmlhczogMFxcXF1cXCkg bWFwXFwocmVhZG9ubHksdG86eFxcXFswXFxcXSBcXFxbbGVuOiBcWzAtOVxdK1xcXF1cXCkg bWFwXFwocHRfcmVhZG9ubHksZmlyc3Rwcml2YXRlOnggXFxcW3BvaW50ZXIgYXNzaWduLCBi aWFzOiAwXFxcXVxcKSIgMSAib3JpZ2luYWwiIHsgdGFyZ2V0IHsgYysrIH0gfSB9IH0gKi8K Ky8qIHsgZGctZmluYWwgeyBzY2FuLXRyZWUtZHVtcC10aW1lcyAiKD9uKSNwcmFnbWEgYWNj IGtlcm5lbHMgbWFwXFwodG86eVxcXFswXFxcXSBcXFxbbGVuOiBcWzAtOVxdK1xcXF1cXCkg LisgbWFwXFwocmVhZG9ubHksdG86XFwqTk9OX0xWQUxVRV9FWFBSIDxzLnB0cj4gXFxcW2xl bjogXFswLTlcXStcXFxdXFwpIG1hcFxcKHB0X3JlYWRvbmx5LGF0dGFjaF9kZXRhY2g6cy5w dHIgXFxcW2JpYXM6IDBcXFxdXFwpIG1hcFxcKHJlYWRvbmx5LHRvOnhcXFxbMFxcXF0gXFxc W2xlbjogXFswLTlcXStcXFxdXFwpIG1hcFxcKHB0X3JlYWRvbmx5LGZpcnN0cHJpdmF0ZTp4 IFxcXFtwb2ludGVyIGFzc2lnbiwgYmlhczogMFxcXF1cXCkiIDEgIm9yaWdpbmFsIiB7IHRh cmdldCB7IGMrKyB9IH0gfSB9ICovCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi10cmVlLWR1bXAt dGltZXMgIig/bikjcHJhZ21hIGFjYyBzZXJpYWwgbWFwXFwodG86eVxcXFswXFxcXSBcXFxb bGVuOiBcWzAtOVxdK1xcXF1cXCkgLisgbWFwXFwocmVhZG9ubHksdG86XFwqTk9OX0xWQUxV RV9FWFBSIDxzLnB0cj4gXFxcW2xlbjogXFswLTlcXStcXFxdXFwpIG1hcFxcKHB0X3JlYWRv bmx5LGF0dGFjaF9kZXRhY2g6cy5wdHIgXFxcW2JpYXM6IDBcXFxdXFwpIG1hcFxcKHJlYWRv bmx5LHRvOnhcXFxbMFxcXF0gXFxcW2xlbjogXFswLTlcXStcXFxdXFwpIG1hcFxcKHB0X3Jl YWRvbmx5LGZpcnN0cHJpdmF0ZTp4IFxcXFtwb2ludGVyIGFzc2lnbiwgYmlhczogMFxcXF1c XCkiIDEgIm9yaWdpbmFsIiB7IHRhcmdldCB7IGMrKyB9IH0gfSB9ICovCisvKiB7IGRnLWZp bmFsIHsgc2Nhbi10cmVlLWR1bXAtdGltZXMgIig/bikjcHJhZ21hIGFjYyBkYXRhIG1hcFxc KHRvOnlcXFxbMFxcXF0gXFxcW2xlbjogXFswLTlcXStcXFxdXFwpIC4rIG1hcFxcKHJlYWRv bmx5LHRvOlxcKk5PTl9MVkFMVUVfRVhQUiA8cy5wdHI+IFxcXFtsZW46IFxbMC05XF0rXFxc XVxcKSBtYXBcXChwdF9yZWFkb25seSxhdHRhY2hfZGV0YWNoOnMucHRyIFxcXFtiaWFzOiAw XFxcXVxcKSBtYXBcXChyZWFkb25seSx0bzp4XFxcWzBcXFxdIFxcXFtsZW46IFxbMC05XF0r XFxcXVxcKSIgMSAib3JpZ2luYWwiIHsgdGFyZ2V0IHsgYysrIH0gfSB9IH0gKi8KKy8qIHsg ZGctZmluYWwgeyBzY2FuLXRyZWUtZHVtcC10aW1lcyAiKD9uKSNwcmFnbWEgYWNjIGVudGVy IGRhdGEgbWFwXFwodG86eVxcXFswXFxcXSBcXFxbbGVuOiBcWzAtOVxdK1xcXF1cXCkgLisg bWFwXFwocmVhZG9ubHksdG86XFwqTk9OX0xWQUxVRV9FWFBSIDxzLnB0cj4gXFxcW2xlbjog XFswLTlcXStcXFxdXFwpIG1hcFxcKHB0X3JlYWRvbmx5LGF0dGFjaF9kZXRhY2g6cy5wdHIg XFxcW2JpYXM6IDBcXFxdXFwpIG1hcFxcKHJlYWRvbmx5LHRvOnhcXFxbMFxcXF0gXFxcW2xl bjogXFswLTlcXStcXFxdXFwpIiAxICJvcmlnaW5hbCIgeyB0YXJnZXQgeyBjKysgfSB9IH0g fSAqLwogCiAvKiB7IGRnLWZpbmFsIHsgc2Nhbi10cmVlLWR1bXAtdGltZXMgIig/bikjcHJh Z21hIGFjYyBjYWNoZSBcXChyZWFkb25seTp4XFxcWzBcXFxdIFxcXFtsZW46IFxbMC05XF0r XFxcXVxcKTskIiA0ICJvcmlnaW5hbCIgfSB9ICovCiAvKiB7IGRnLWZpbmFsIHsgc2Nhbi10 cmVlLWR1bXAtdGltZXMgIig/bikjcHJhZ21hIGFjYyBjYWNoZSBcXCh5XFxcWzBcXFxdIFxc XFtsZW46IFxbMC05XF0rXFxcXVxcKTskIiA0ICJvcmlnaW5hbCIgfSB9ICovCmRpZmYgLS1n aXQgYS9nY2MvdGVzdHN1aXRlL2MtYysrLWNvbW1vbi9nb2FjYy9yZWFkb25seS0yLmMgYi9n Y2MvdGVzdHN1aXRlL2MtYysrLWNvbW1vbi9nb2FjYy9yZWFkb25seS0yLmMKbmV3IGZpbGUg bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjNmNTJhOWY2YWZiCi0tLSAvZGV2L251 bGwKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9jLWMrKy1jb21tb24vZ29hY2MvcmVhZG9ubHktMi5j CkBAIC0wLDAgKzEsMTYgQEAKKy8qIHsgZGctYWRkaXRpb25hbC1vcHRpb25zICItTyAtZmR1 bXAtdHJlZS1waGlwcm9wIC1mZHVtcC10cmVlLWZyZSIgfSAqLworCisjcHJhZ21hIGFjYyBy b3V0aW5lCitleHRlcm4gdm9pZCBmb28gKGludCAqcHRyLCBpbnQgdmFsKTsKKworaW50IG1h aW4gKHZvaWQpCit7CisgIGludCByLCBhWzMyXTsKKyAgI3ByYWdtYSBhY2MgcGFyYWxsZWwg Y29weWluKHJlYWRvbmx5OiBhWzozMl0pIGNvcHlvdXQocikKKyAgeworICAgIGZvbyAoYSwg YVs4XSk7CisgICAgciA9IGFbOF07CisgIH0KK30KKy8qIHsgZGctZmluYWwgeyBzY2FuLXRy ZWUtZHVtcC10aW1lcyAiclwuXFtfMC05XF0rID0gTUVNXFxcW1xbXl9cXStfXFswLTlcXStc XChwdHJvXFwpXFxcXVxcXFs4XFxcXTsiIDIgInBoaXByb3AxIiB9IH0gKi8KKy8qIHsgZGct ZmluYWwgeyBzY2FuLXRyZWUtZHVtcC10aW1lcyAiclwuXFtfMC05XF0rID0gTUVNXFxcW1xb Xl9cXStfXFswLTlcXStcXChwdHJvXFwpXFxcXVxcXFs4XFxcXTsiIDEgImZyZTEiIH0gfSAq LwpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9nZm9ydHJhbi5kZy9nb2FjYy9yZWFkb25s eS0xLmY5MCBiL2djYy90ZXN0c3VpdGUvZ2ZvcnRyYW4uZGcvZ29hY2MvcmVhZG9ubHktMS5m OTAKaW5kZXggZmMxZTI3MTllNjcuLmNhZDQ0OWU2ZDQwIDEwMDY0NAotLS0gYS9nY2MvdGVz dHN1aXRlL2dmb3J0cmFuLmRnL2dvYWNjL3JlYWRvbmx5LTEuZjkwCisrKyBiL2djYy90ZXN0 c3VpdGUvZ2ZvcnRyYW4uZGcvZ29hY2MvcmVhZG9ubHktMS5mOTAKQEAgLTgwLDE2ICs4MCwx NiBAQCBlbmQgcHJvZ3JhbSBtYWluCiAhIFRoZSBmcm9udCBlbmQgdHVybnMgT3BlbkFDQyAn ZGVjbGFyZScgaW50byBPcGVuQUNDICdkYXRhJy4KICEgICB7IGRnLWZpbmFsIHsgc2Nhbi10 cmVlLWR1bXAtdGltZXMgIig/bikjcHJhZ21hIGFjYyBkYXRhIG1hcFxcKHJlYWRvbmx5LHRv OlxcKmJcXCkgbWFwXFwoYWxsb2M6Yi4rIG1hcFxcKHRvOlxcKmNcXCkgbWFwXFwoYWxsb2M6 Yy4rIiAxICJvcmlnaW5hbCIgfSB9CiAhICAgeyBkZy1maW5hbCB7IHNjYW4tdHJlZS1kdW1w LXRpbWVzICIoP24pI3ByYWdtYSBhY2MgZGF0YSBtYXBcXChyZWFkb25seSx0bzpnXFwpIG1h cFxcKHRvOmhcXCkiIDEgIm9yaWdpbmFsIiB9IH0KLSEgeyBkZy1maW5hbCB7IHNjYW4tdHJl ZS1kdW1wLXRpbWVzICIoP24pI3ByYWdtYSBhY2MgcGFyYWxsZWwgbWFwXFwocmVhZG9ubHks dG86XFwqLisgbWFwXFwoYWxsb2M6YS4rIG1hcFxcKHJlYWRvbmx5LHRvOlxcKi4rIG1hcFxc KGFsbG9jOmIuKyBtYXBcXCh0bzpcXCouKyBtYXBcXChhbGxvYzpjLisiIDEgIm9yaWdpbmFs IiB9IH0KLSEgeyBkZy1maW5hbCB7IHNjYW4tdHJlZS1kdW1wLXRpbWVzICIoP24pI3ByYWdt YSBhY2MgcGFyYWxsZWwgbWFwXFwocmVhZG9ubHksdG86YS4rIG1hcFxcKGFsbG9jOmEuKyBt YXBcXChyZWFkb25seSx0bzpiLisgbWFwXFwoYWxsb2M6Yi4rIG1hcFxcKHRvOmMuKyBtYXBc XChhbGxvYzpjLisiIDEgIm9yaWdpbmFsIiB9IH0KLSEgeyBkZy1maW5hbCB7IHNjYW4tdHJl ZS1kdW1wLXRpbWVzICIoP24pI3ByYWdtYSBhY2Mga2VybmVscyBtYXBcXChyZWFkb25seSx0 bzpcXCouKyBtYXBcXChhbGxvYzphLisgbWFwXFwocmVhZG9ubHksdG86XFwqLisgbWFwXFwo YWxsb2M6Yi4rIG1hcFxcKHRvOlxcKi4rIG1hcFxcKGFsbG9jOmMuKyIgMSAib3JpZ2luYWwi IH0gfQotISB7IGRnLWZpbmFsIHsgc2Nhbi10cmVlLWR1bXAtdGltZXMgIig/bikjcHJhZ21h IGFjYyBrZXJuZWxzIG1hcFxcKHJlYWRvbmx5LHRvOmEuKyBtYXBcXChhbGxvYzphLisgbWFw XFwocmVhZG9ubHksdG86Yi4rIG1hcFxcKGFsbG9jOmIuKyBtYXBcXCh0bzpjLisgbWFwXFwo YWxsb2M6Yy4rIiAxICJvcmlnaW5hbCIgfSB9Ci0hIHsgZGctZmluYWwgeyBzY2FuLXRyZWUt ZHVtcC10aW1lcyAiKD9uKSNwcmFnbWEgYWNjIHNlcmlhbCBtYXBcXChyZWFkb25seSx0bzpc XCouKyBtYXBcXChhbGxvYzphLisgbWFwXFwocmVhZG9ubHksdG86XFwqLisgbWFwXFwoYWxs b2M6Yi4rIG1hcFxcKHRvOlxcKi4rIG1hcFxcKGFsbG9jOmMuKyIgMSAib3JpZ2luYWwiIH0g fQotISB7IGRnLWZpbmFsIHsgc2Nhbi10cmVlLWR1bXAtdGltZXMgIig/bikjcHJhZ21hIGFj YyBzZXJpYWwgbWFwXFwocmVhZG9ubHksdG86YS4rIG1hcFxcKGFsbG9jOmEuKyBtYXBcXChy ZWFkb25seSx0bzpiLisgbWFwXFwoYWxsb2M6Yi4rIG1hcFxcKHRvOmMuKyBtYXBcXChhbGxv YzpjLisiIDEgIm9yaWdpbmFsIiB9IH0KLSEgeyBkZy1maW5hbCB7IHNjYW4tdHJlZS1kdW1w LXRpbWVzICIoP24pI3ByYWdtYSBhY2MgZGF0YSBtYXBcXChyZWFkb25seSx0bzpcXCouKyBt YXBcXChhbGxvYzphLisgbWFwXFwocmVhZG9ubHksdG86XFwqLisgbWFwXFwoYWxsb2M6Yi4r IG1hcFxcKHRvOlxcKi4rIG1hcFxcKGFsbG9jOmMuKyIgMSAib3JpZ2luYWwiIH0gfQotISB7 IGRnLWZpbmFsIHsgc2Nhbi10cmVlLWR1bXAtdGltZXMgIig/bikjcHJhZ21hIGFjYyBkYXRh IG1hcFxcKHJlYWRvbmx5LHRvOmEuKyBtYXBcXChhbGxvYzphLisgbWFwXFwocmVhZG9ubHks dG86Yi4rIG1hcFxcKGFsbG9jOmIuKyBtYXBcXCh0bzpjLisgbWFwXFwoYWxsb2M6Yy4rIiAx ICJvcmlnaW5hbCIgfSB9Ci0hIHsgZGctZmluYWwgeyBzY2FuLXRyZWUtZHVtcC10aW1lcyAi KD9uKSNwcmFnbWEgYWNjIGVudGVyIGRhdGEgbWFwXFwocmVhZG9ubHksdG86XFwqLisgbWFw XFwoYWxsb2M6YS4rIG1hcFxcKHJlYWRvbmx5LHRvOlxcKi4rIG1hcFxcKGFsbG9jOmIuKyBt YXBcXCh0bzpcXCouKyBtYXBcXChhbGxvYzpjLisiIDEgIm9yaWdpbmFsIiB9IH0KLSEgeyBk Zy1maW5hbCB7IHNjYW4tdHJlZS1kdW1wLXRpbWVzICIoP24pI3ByYWdtYSBhY2MgZW50ZXIg ZGF0YSBtYXBcXChyZWFkb25seSx0bzphLisgbWFwXFwoYWxsb2M6YS4rIG1hcFxcKHJlYWRv bmx5LHRvOmIuKyBtYXBcXChhbGxvYzpiLisgbWFwXFwodG86Yy4rIG1hcFxcKGFsbG9jOmMu KyIgMSAib3JpZ2luYWwiIH0gfQorISB7IGRnLWZpbmFsIHsgc2Nhbi10cmVlLWR1bXAtdGlt ZXMgIig/bikjcHJhZ21hIGFjYyBwYXJhbGxlbCBtYXBcXChyZWFkb25seSx0bzpcXCouKyBt YXBcXChwdF9yZWFkb25seSxhbGxvYzphLisgbWFwXFwocmVhZG9ubHksdG86XFwqLisgbWFw XFwocHRfcmVhZG9ubHksYWxsb2M6Yi4rIG1hcFxcKHRvOlxcKi4rIG1hcFxcKGFsbG9jOmMu KyIgMSAib3JpZ2luYWwiIH0gfQorISB7IGRnLWZpbmFsIHsgc2Nhbi10cmVlLWR1bXAtdGlt ZXMgIig/bikjcHJhZ21hIGFjYyBwYXJhbGxlbCBtYXBcXChyZWFkb25seSx0bzphLisgbWFw XFwocHRfcmVhZG9ubHksYWxsb2M6YS4rIG1hcFxcKHJlYWRvbmx5LHRvOmIuKyBtYXBcXChw dF9yZWFkb25seSxhbGxvYzpiLisgbWFwXFwodG86Yy4rIG1hcFxcKGFsbG9jOmMuKyIgMSAi b3JpZ2luYWwiIH0gfQorISB7IGRnLWZpbmFsIHsgc2Nhbi10cmVlLWR1bXAtdGltZXMgIig/ bikjcHJhZ21hIGFjYyBrZXJuZWxzIG1hcFxcKHJlYWRvbmx5LHRvOlxcKi4rIG1hcFxcKHB0 X3JlYWRvbmx5LGFsbG9jOmEuKyBtYXBcXChyZWFkb25seSx0bzpcXCouKyBtYXBcXChwdF9y ZWFkb25seSxhbGxvYzpiLisgbWFwXFwodG86XFwqLisgbWFwXFwoYWxsb2M6Yy4rIiAxICJv cmlnaW5hbCIgfSB9CishIHsgZGctZmluYWwgeyBzY2FuLXRyZWUtZHVtcC10aW1lcyAiKD9u KSNwcmFnbWEgYWNjIGtlcm5lbHMgbWFwXFwocmVhZG9ubHksdG86YS4rIG1hcFxcKHB0X3Jl YWRvbmx5LGFsbG9jOmEuKyBtYXBcXChyZWFkb25seSx0bzpiLisgbWFwXFwocHRfcmVhZG9u bHksYWxsb2M6Yi4rIG1hcFxcKHRvOmMuKyBtYXBcXChhbGxvYzpjLisiIDEgIm9yaWdpbmFs IiB9IH0KKyEgeyBkZy1maW5hbCB7IHNjYW4tdHJlZS1kdW1wLXRpbWVzICIoP24pI3ByYWdt YSBhY2Mgc2VyaWFsIG1hcFxcKHJlYWRvbmx5LHRvOlxcKi4rIG1hcFxcKHB0X3JlYWRvbmx5 LGFsbG9jOmEuKyBtYXBcXChyZWFkb25seSx0bzpcXCouKyBtYXBcXChwdF9yZWFkb25seSxh bGxvYzpiLisgbWFwXFwodG86XFwqLisgbWFwXFwoYWxsb2M6Yy4rIiAxICJvcmlnaW5hbCIg fSB9CishIHsgZGctZmluYWwgeyBzY2FuLXRyZWUtZHVtcC10aW1lcyAiKD9uKSNwcmFnbWEg YWNjIHNlcmlhbCBtYXBcXChyZWFkb25seSx0bzphLisgbWFwXFwocHRfcmVhZG9ubHksYWxs b2M6YS4rIG1hcFxcKHJlYWRvbmx5LHRvOmIuKyBtYXBcXChwdF9yZWFkb25seSxhbGxvYzpi LisgbWFwXFwodG86Yy4rIG1hcFxcKGFsbG9jOmMuKyIgMSAib3JpZ2luYWwiIH0gfQorISB7 IGRnLWZpbmFsIHsgc2Nhbi10cmVlLWR1bXAtdGltZXMgIig/bikjcHJhZ21hIGFjYyBkYXRh IG1hcFxcKHJlYWRvbmx5LHRvOlxcKi4rIG1hcFxcKHB0X3JlYWRvbmx5LGFsbG9jOmEuKyBt YXBcXChyZWFkb25seSx0bzpcXCouKyBtYXBcXChwdF9yZWFkb25seSxhbGxvYzpiLisgbWFw XFwodG86XFwqLisgbWFwXFwoYWxsb2M6Yy4rIiAxICJvcmlnaW5hbCIgfSB9CishIHsgZGct ZmluYWwgeyBzY2FuLXRyZWUtZHVtcC10aW1lcyAiKD9uKSNwcmFnbWEgYWNjIGRhdGEgbWFw XFwocmVhZG9ubHksdG86YS4rIG1hcFxcKHB0X3JlYWRvbmx5LGFsbG9jOmEuKyBtYXBcXChy ZWFkb25seSx0bzpiLisgbWFwXFwocHRfcmVhZG9ubHksYWxsb2M6Yi4rIG1hcFxcKHRvOmMu KyBtYXBcXChhbGxvYzpjLisiIDEgIm9yaWdpbmFsIiB9IH0KKyEgeyBkZy1maW5hbCB7IHNj YW4tdHJlZS1kdW1wLXRpbWVzICIoP24pI3ByYWdtYSBhY2MgZW50ZXIgZGF0YSBtYXBcXChy ZWFkb25seSx0bzpcXCouKyBtYXBcXChwdF9yZWFkb25seSxhbGxvYzphLisgbWFwXFwocmVh ZG9ubHksdG86XFwqLisgbWFwXFwocHRfcmVhZG9ubHksYWxsb2M6Yi4rIG1hcFxcKHRvOlxc Ki4rIG1hcFxcKGFsbG9jOmMuKyIgMSAib3JpZ2luYWwiIH0gfQorISB7IGRnLWZpbmFsIHsg c2Nhbi10cmVlLWR1bXAtdGltZXMgIig/bikjcHJhZ21hIGFjYyBlbnRlciBkYXRhIG1hcFxc KHJlYWRvbmx5LHRvOmEuKyBtYXBcXChwdF9yZWFkb25seSxhbGxvYzphLisgbWFwXFwocmVh ZG9ubHksdG86Yi4rIG1hcFxcKHB0X3JlYWRvbmx5LGFsbG9jOmIuKyBtYXBcXCh0bzpjLisg bWFwXFwoYWxsb2M6Yy4rIiAxICJvcmlnaW5hbCIgfSB9CiAKICEgeyBkZy1maW5hbCB7IHNj YW4tdHJlZS1kdW1wLXRpbWVzICIoP24pI3ByYWdtYSBhY2MgY2FjaGUgXFwocmVhZG9ubHk6 XFwqXFwoaW50ZWdlclxcKGtpbmQ9NFxcKVxcXFswOlxcXF0gXFwqXFwpIHBhcm0uKmRhdGEg XFxcW2xlbjogLitcXFxdXFwpIFxcKHJlYWRvbmx5OlxcKlxcKGludGVnZXJcXChraW5kPTRc XClcXFxbMDpcXFxdIFxcKlxcKSBwYXJtLipkYXRhIFxcXFtsZW46IC4rXFxcXVxcKTsiIDgg Im9yaWdpbmFsIiB9IH0KICEgeyBkZy1maW5hbCB7IHNjYW4tdHJlZS1kdW1wLXRpbWVzICIo P24pI3ByYWdtYSBhY2MgY2FjaGUgXFwoXFwqXFwoaW50ZWdlclxcKGtpbmQ9NFxcKVxcXFsw OlxcXF0gXFwqXFwpIHBhcm0uKmRhdGEgXFxcW2xlbjogLitcXFxdXFwpOyIgOCAib3JpZ2lu YWwiIH0gfQpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9nZm9ydHJhbi5kZy9wcjY3MTcw LmY5MCBiL2djYy90ZXN0c3VpdGUvZ2ZvcnRyYW4uZGcvcHI2NzE3MC5mOTAKaW5kZXggODAy MzY0NzBmNDIuLmQ3YzMzYTRjM2RiIDEwMDY0NAotLS0gYS9nY2MvdGVzdHN1aXRlL2dmb3J0 cmFuLmRnL3ByNjcxNzAuZjkwCisrKyBiL2djYy90ZXN0c3VpdGUvZ2ZvcnRyYW4uZGcvcHI2 NzE3MC5mOTAKQEAgLTI4LDQgKzI4LDQgQEAgZW5kIHN1YnJvdXRpbmUgZm9vCiBlbmQgbW9k dWxlIHRlc3RfbW9kdWxlCiBlbmQgcHJvZ3JhbQogCi0hIHsgZGctZmluYWwgeyBzY2FuLXRy ZWUtZHVtcC10aW1lcyAiPSBcXCphcmdfXFswLTlcXStcXChEXFwpOyIgMSAiZnJlMSIgfSB9 CishIHsgZGctZmluYWwgeyBzY2FuLXRyZWUtZHVtcC10aW1lcyAiPSBcXCphcmdfXFswLTlc XStcXChEXFwpXFwocHRyb1xcKTsiIDEgImZyZTEiIH0gfQpkaWZmIC0tZ2l0IGEvZ2NjL3Ry ZWUtcHJldHR5LXByaW50LmNjIGIvZ2NjL3RyZWUtcHJldHR5LXByaW50LmNjCmluZGV4IDJh OThjYjA5ODZiLi5iYzQ4NDdhNmI4ZiAxMDA2NDQKLS0tIGEvZ2NjL3RyZWUtcHJldHR5LXBy aW50LmNjCisrKyBiL2djYy90cmVlLXByZXR0eS1wcmludC5jYwpAQCAtOTI5LDYgKzkyOSw4 IEBAIGR1bXBfb21wX2NsYXVzZSAocHJldHR5X3ByaW50ZXIgKnBwLCB0cmVlIGNsYXVzZSwg aW50IHNwYywgZHVtcF9mbGFnc190IGZsYWdzKQogICAgICAgcHBfc3RyaW5nIChwcCwgIm1h cCgiKTsKICAgICAgIGlmIChPTVBfQ0xBVVNFX01BUF9SRUFET05MWSAoY2xhdXNlKSkKIAlw cF9zdHJpbmcgKHBwLCAicmVhZG9ubHksIik7CisgICAgICBpZiAoT01QX0NMQVVTRV9NQVBf UE9JTlRTX1RPX1JFQURPTkxZIChjbGF1c2UpKQorCXBwX3N0cmluZyAocHAsICJwdF9yZWFk b25seSwiKTsKICAgICAgIHN3aXRjaCAoT01QX0NMQVVTRV9NQVBfS0lORCAoY2xhdXNlKSkK IAl7CiAJY2FzZSBHT01QX01BUF9BTExPQzoKQEAgLTM3MzgsNiArMzc0MCw4IEBAIGR1bXBf Z2VuZXJpY19ub2RlIChwcmV0dHlfcHJpbnRlciAqcHAsIHRyZWUgbm9kZSwgaW50IHNwYywg ZHVtcF9mbGFnc190IGZsYWdzLAogCXBwX3N0cmluZyAocHAsICIoRCkiKTsKICAgICAgIGlm IChTU0FfTkFNRV9PQ0NVUlNfSU5fQUJOT1JNQUxfUEhJIChub2RlKSkKIAlwcF9zdHJpbmcg KHBwLCAiKGFiKSIpOworICAgICAgaWYgKFNTQV9OQU1FX1BPSU5UU19UT19SRUFET05MWV9N RU1PUlkgKG5vZGUpKQorCXBwX3N0cmluZyAocHAsICIocHRybykiKTsKICAgICAgIGJyZWFr OwogCiAgICAgY2FzZSBXSVRIX1NJWkVfRVhQUjoKZGlmZiAtLWdpdCBhL2djYy90cmVlLXNz YW5hbWVzLmNjIGIvZ2NjL3RyZWUtc3NhbmFtZXMuY2MKaW5kZXggNmMyNTI1OTAwYWIuLjJh YzI1MTVlOWM4IDEwMDY0NAotLS0gYS9nY2MvdHJlZS1zc2FuYW1lcy5jYworKysgYi9nY2Mv dHJlZS1zc2FuYW1lcy5jYwpAQCAtNDAyLDYgKzQwMiw5IEBAIG1ha2Vfc3NhX25hbWVfZm4g KHN0cnVjdCBmdW5jdGlvbiAqZm4sIHRyZWUgdmFyLCBnaW1wbGUgKnN0bXQsCiAgIGVsc2UK ICAgICBTU0FfTkFNRV9SQU5HRV9JTkZPICh0KSA9IE5VTEw7CiAKKyAgaWYgKFZBUl9QICh2 YXIpICYmIFZBUl9QT0lOVFNfVE9fUkVBRE9OTFkgKHZhcikpCisgICAgU1NBX05BTUVfUE9J TlRTX1RPX1JFQURPTkxZX01FTU9SWSAodCkgPSAxOworCiAgIFNTQV9OQU1FX0lOX0ZSRUVf TElTVCAodCkgPSAwOwogICBTU0FfTkFNRV9JU19ERUZBVUxUX0RFRiAodCkgPSAwOwogICBp bml0X3NzYV9uYW1lX2ltbV91c2UgKHQpOwpkaWZmIC0tZ2l0IGEvZ2NjL3RyZWUuaCBiL2dj Yy90cmVlLmgKaW5kZXggNDhjNTQ4YWI1ODUuLjUzYjFhZWQ0NDM1IDEwMDY0NAotLS0gYS9n Y2MvdHJlZS5oCisrKyBiL2djYy90cmVlLmgKQEAgLTE4NjcsNiArMTg2NywxMCBAQCBjbGFz cyBhdXRvX3N1cHByZXNzX2xvY2F0aW9uX3dyYXBwZXJzCiAjZGVmaW5lIE9NUF9DTEFVU0Vf TUFQX1JFQURPTkxZKE5PREUpIFwKICAgVFJFRV9SRUFET05MWSAoT01QX0NMQVVTRV9TVUJD T0RFX0NIRUNLIChOT0RFLCBPTVBfQ0xBVVNFX01BUCkpCiAKKy8qIFNldCBpZiAnT01QX0NM QVVTRV9ERUNMIChOT0RFKScgcG9pbnRzIHRvIHJlYWQtb25seSBtZW1vcnkuICAqLworI2Rl ZmluZSBPTVBfQ0xBVVNFX01BUF9QT0lOVFNfVE9fUkVBRE9OTFkoTk9ERSkgXAorICBUUkVF X0NPTlNUQU5UIChPTVBfQ0xBVVNFX1NVQkNPREVfQ0hFQ0sgKE5PREUsIE9NUF9DTEFVU0Vf TUFQKSkKKwogLyogU2FtZSBhcyBhYm92ZSwgZm9yIHVzZSBpbiBPcGVuQUNDIGNhY2hlIGRp cmVjdGl2ZXMuICAqLwogI2RlZmluZSBPTVBfQ0xBVVNFX19DQUNIRV9fUkVBRE9OTFkoTk9E RSkgXAogICBUUkVFX1JFQURPTkxZIChPTVBfQ0xBVVNFX1NVQkNPREVfQ0hFQ0sgKE5PREUs IE9NUF9DTEFVU0VfX0NBQ0hFXykpCkBAIC0zMzQ3LDYgKzMzNTEsMTMgQEAgZXh0ZXJuIHZv aWQgZGVjbF9maW5pX3ByaW9yaXR5X2luc2VydCAodHJlZSwgcHJpb3JpdHlfdHlwZSk7CiAj ZGVmaW5lIFZBUl9ERUNMX0lTX1ZJUlRVQUxfT1BFUkFORChOT0RFKSBcCiAgIChWQVJfREVD TF9DSEVDSyAoTk9ERSktPmJhc2UudS5iaXRzLnNhdHVyYXRpbmdfZmxhZykKIAorLyogSW4g YSBWQVJfREVDTCwgc2V0IGZvciB2YXJpYWJsZXMgcmVnYXJkZWQgYXMgcG9pbnRpbmcgdG8g bWVtb3J5IG5vdCB3cml0dGVuCisgICB0by4gU1NBX05BTUVfUE9JTlRTX1RPX1JFQURPTkxZ X01FTU9SWSBnZXRzIHNldCBmb3IgU1NBX05BTUVzIGNyZWF0ZWQgZnJvbQorICAgc3VjaCBW QVJfREVDTHMuIEN1cnJlbnRseSB1c2VkIGJ5IE9wZW5BQ0MgJ3JlYWRvbmx5JyBtb2RpZmll ciBpbiBjb3B5aW4KKyAgIGNsYXVzZXMuICAqLworI2RlZmluZSBWQVJfUE9JTlRTX1RPX1JF QURPTkxZKE5PREUpIFwKKyAgKFRSRUVfQ0hFQ0sgKE5PREUsIFZBUl9ERUNMKS0+ZGVjbF9j b21tb24uZGVjbF9ub3RfZmxleGFycmF5KQorCiAvKiBJbiBhIFZBUl9ERUNMLCBub256ZXJv IGlmIHRoaXMgaXMgYSBub24tbG9jYWwgZnJhbWUgc3RydWN0dXJlLiAgKi8KICNkZWZpbmUg REVDTF9OT05MT0NBTF9GUkFNRShOT0RFKSAgXAogICAoVkFSX0RFQ0xfQ0hFQ0sgKE5PREUp LT5iYXNlLmRlZmF1bHRfZGVmX2ZsYWcpCi0tIAoyLjM0LjEKCg== --------------NR9iJzH0OJaYjXCWPsWfDAfG--