From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from EUR04-DB3-obe.outbound.protection.outlook.com (mail-db3eur04on2046.outbound.protection.outlook.com [40.107.6.46]) by sourceware.org (Postfix) with ESMTPS id C57003858C2B for ; Fri, 16 Jun 2023 13:07:26 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org C57003858C2B Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=arm.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=arm.com DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com; s=selector2-armh-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=nQpqoRqYgO4CPBhHMwvk5MucPZQIQ1LaR2G74kLiRxE=; b=gfa2Ys5mBWbdbaQqsky4nO8ZBIU+Bg3Wcc1v1iyC+9resYg6HFyo9K6nwecNklYhEvD7WUs2Hyica0Fs527B3xK1EvY5zCK6k5fT+LAehzyX8FceiPG7jrFgbJl8E/2NZqI8U595tAEgQeLsBWSv0CuRgrqW9EyVdJqcvjnnAuw= Received: from DU2PR04CA0219.eurprd04.prod.outlook.com (2603:10a6:10:2b1::14) by DB5PR08MB10216.eurprd08.prod.outlook.com (2603:10a6:10:4a5::10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6500.25; Fri, 16 Jun 2023 13:07:23 +0000 Received: from DBAEUR03FT011.eop-EUR03.prod.protection.outlook.com (2603:10a6:10:2b1:cafe::ae) by DU2PR04CA0219.outlook.office365.com (2603:10a6:10:2b1::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6500.29 via Frontend Transport; Fri, 16 Jun 2023 13:07:23 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 63.35.35.123) smtp.mailfrom=arm.com; dkim=pass (signature was verified) header.d=armh.onmicrosoft.com;dmarc=pass action=none header.from=arm.com; Received-SPF: Pass (protection.outlook.com: domain of arm.com designates 63.35.35.123 as permitted sender) receiver=protection.outlook.com; client-ip=63.35.35.123; helo=64aa7808-outbound-1.mta.getcheckrecipient.com; pr=C Received: from 64aa7808-outbound-1.mta.getcheckrecipient.com (63.35.35.123) by DBAEUR03FT011.mail.protection.outlook.com (100.127.142.132) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6500.25 via Frontend Transport; Fri, 16 Jun 2023 13:07:23 +0000 Received: ("Tessian outbound 5154e9d36775:v136"); Fri, 16 Jun 2023 13:07:23 +0000 X-CheckRecipientChecked: true X-CR-MTA-CID: 9b54ff9423d6b8e0 X-CR-MTA-TID: 64aa7808 Received: from dafb0755d14d.1 by 64aa7808-outbound-1.mta.getcheckrecipient.com id 13223E0A-DBA6-4D1C-A235-29399371F90C.1; Fri, 16 Jun 2023 13:07:16 +0000 Received: from EUR04-HE1-obe.outbound.protection.outlook.com by 64aa7808-outbound-1.mta.getcheckrecipient.com with ESMTPS id dafb0755d14d.1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384); Fri, 16 Jun 2023 13:07:16 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=Mr6YJwoGhoUMTj1ztykMyQnfUupHsfQwfqB2U4/AmGvj5Qh5tF+ppZaBtan9GRgUeFAxEps2BSXR+Hebf5ur1AYX+yNdhZPvovFrY2LSVQSiGkkiWrMP/WrxUJtXIScYSN3fiCQ7sralFrpwP+b2tdP9JrIFCdaNXPBXT+fS5mb/S1etniy3VC69mN0AzOIvuJYWJnklPVVPvS6KpgZ6NNzIvv3K006k/uMfrCj4cRvVCsb9I6iJQgGaxu5KUDW3YNKYc3yFW/w7oYaAorVHARYQU5i2cUtjFofJUb2PuI4oZYD7LGo2HpD0qxeVdlkohrHWStckpz3BX8A3OwK3yA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=nQpqoRqYgO4CPBhHMwvk5MucPZQIQ1LaR2G74kLiRxE=; b=dLxuf1NSDc2o//JhQpv/Lq6gy2RtKdvhU6ymAJ4P8AQLa5W25ntG0ta6/BvtIEOmcZ+MYFX+ZSjzzyaTOYf/2kw4t3eMCpnk2HHd+zz26bQVKkmjINe/WYHFI4c5s64qTRLoCYjWLIxJic5hFrJvrFtrEIsdaSuZVk5efXxTOKIuJHYN7eiYzZKwHV34zO0R/dg5B0bCk20U9TUSdjodbxsgItVQkgymxw1YmIZRwQ0hF+m9ZXPorfqtgsMaro+xCgLR4gAsL0kPJH0j5L6OCkjGKbz4yMTsdTTfcNnbB6bUsKFoQCPw5xi7y7iZZMAQSHNQftp6qPKEJczOZLXI2A== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=arm.com; dmarc=pass action=none header.from=arm.com; dkim=pass header.d=arm.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com; s=selector2-armh-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=nQpqoRqYgO4CPBhHMwvk5MucPZQIQ1LaR2G74kLiRxE=; b=gfa2Ys5mBWbdbaQqsky4nO8ZBIU+Bg3Wcc1v1iyC+9resYg6HFyo9K6nwecNklYhEvD7WUs2Hyica0Fs527B3xK1EvY5zCK6k5fT+LAehzyX8FceiPG7jrFgbJl8E/2NZqI8U595tAEgQeLsBWSv0CuRgrqW9EyVdJqcvjnnAuw= Received: from PAXPR08MB6926.eurprd08.prod.outlook.com (2603:10a6:102:138::24) by DU0PR08MB8301.eurprd08.prod.outlook.com (2603:10a6:10:40f::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6477.29; Fri, 16 Jun 2023 13:07:14 +0000 Received: from PAXPR08MB6926.eurprd08.prod.outlook.com ([fe80::2978:61ca:4677:30f8]) by PAXPR08MB6926.eurprd08.prod.outlook.com ([fe80::2978:61ca:4677:30f8%5]) with mapi id 15.20.6500.029; Fri, 16 Jun 2023 13:07:14 +0000 From: Kyrylo Tkachov To: "gcc-patches@gcc.gnu.org" Subject: [PATCH][1/5] aarch64: Reimplement [US]Q(R)SHR(U)N patterns with RTL codes Thread-Topic: [PATCH][1/5] aarch64: Reimplement [US]Q(R)SHR(U)N patterns with RTL codes Thread-Index: AdmgUnJH1QvDJNnuSoWHd37eHljccA== Date: Fri, 16 Jun 2023 13:07:14 +0000 Message-ID: Accept-Language: en-GB, en-US Content-Language: en-US X-MS-Has-Attach: yes X-MS-TNEF-Correlator: Authentication-Results-Original: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=arm.com; x-ms-traffictypediagnostic: PAXPR08MB6926:EE_|DU0PR08MB8301:EE_|DBAEUR03FT011:EE_|DB5PR08MB10216:EE_ X-MS-Office365-Filtering-Correlation-Id: 76787781-81db-4f18-d606-08db6e6aa034 x-checkrecipientrouted: true nodisclaimer: true X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam-Untrusted: BCL:0; X-Microsoft-Antispam-Message-Info-Original: k61bn3GqkTwkdbxNZyoXeFDmaZlwre357JW7uWMZmuu7mwOm1nBhT/JETiMKnDVLV2Wj1DGjMy2yImCeke62CF+SKhxSVpkCXViWC8of0s91lB24QEKoUsgpOlTn+QLyn6RLzmZKyY46O6U2NQykeUfhNaSftVqKxzU989c+jnGzwAYfF7dYUeyaFxwbRjU5OnrY1nzgwfwsndmhH8GL1DNUyhRexOxnosE+hp5ehaUl2DaasWrkgKAHTVkfruMjaAzUAOCw8aBoS9jE3Yu+p9eWXpVyftG4ikcEjqDwRxgunN6oU78L030OQqog5FX0g1FrkKWhtr6qUSls4xnv+gJ2zVKHvs5AoIghyknF+JCJJZSaSh/z/gwe/i5/R8jWke7fVdeRjKVHuB1EHzJi5LM+e4PpiQemrI1qpwEQ2iPKVmY9QmF3xCWF3JHJIJAKOXs0TSOlLgLuBKMYcMrJb+PccPU5GimEhE7qetUKkCjo2vK084SnwxVf9OGCF8SrwP9fWwFU5IwmcE0Rqs2ZFJy25BCUZfYBCJUq0kHQHSeOH5shLCSq/MPfxCavqb4Zg7N8p7FqK6shCRCOa4Xl53UL3XepTQXjL4+6faMFJdtC81sobD1/z/1mjNjv2RLV X-Forefront-Antispam-Report-Untrusted: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PAXPR08MB6926.eurprd08.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230028)(4636009)(136003)(396003)(39860400002)(366004)(376002)(346002)(451199021)(6916009)(66946007)(66556008)(76116006)(64756008)(186003)(478600001)(2906002)(66476007)(66446008)(316002)(8676002)(41300700001)(99936003)(86362001)(7696005)(71200400001)(6506007)(52536014)(9686003)(38070700005)(33656002)(122000001)(8936002)(83380400001)(26005)(5660300002)(38100700002)(55016003);DIR:OUT;SFP:1101; Content-Type: multipart/mixed; boundary="_002_PAXPR08MB692697A556EC9FB8F569050E9358APAXPR08MB6926eurp_" MIME-Version: 1.0 X-MS-Exchange-Transport-CrossTenantHeadersStamped: DU0PR08MB8301 Original-Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=arm.com; X-EOPAttributedMessage: 0 X-MS-Exchange-Transport-CrossTenantHeadersStripped: DBAEUR03FT011.eop-EUR03.prod.protection.outlook.com X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id-Prvs: 27c54847-f75b-4469-7f96-08db6e6a9ab0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: nX7BOPd+dLuMWes64jvbFsKFTl3E4SeG9uIf4ipO83jW0XoYEwt4CIKLrWXXr1NC5L/cfd0O+yya0oPGevtoGg0WO84HGjI3u+8Ufy6tITMI+FPldLuQWMD3bCVm0Y1pbyLE2LVhxvcqWdqWCOophDm7ygNwKVtWjRXoeCU9jk11XrPeS8MFl2iTNa9NYYWD5tUWKdeM1w+Jh+bWX9bWSk1p3KMTGWNaNwiRBXREU4AIV6vzuIjoYccY0ctpkPZ+lOrw9jj3v3iRnn2pdbRLhA65iWh1ns2Otsp+83c/z3Iz0ATN2B7veFQWCOJBB3U8HIzRzqbcHyXucsEBIvOiNZ3WPyxjCg1xB8wRHAqkUwJiI3qTZfrvSC1uCN9b/X7reLRsGo6qzo+1tx0CDaAWR3ZJ6wc/CoOyh3aqmPQPzDCO0usuXVesM8wR6VnMzCO8lWXTobxV2eEeJWjL7MCtcdOPZNxfgnrs/gzwUaPeivA8fIPFHZwz6eGjwHxYf2X+CG4NB/BLsJvyK8rd130arrqmUtZW+kpXP+hM0/hVUrNgGT+/rcW3laUMQeJlYwpjBx8Gsv7jdxvCSmOV9RKD7C6rWdEe+bCosIynOZ59xBIzThlWwZC08wfEverdW/WRLx5IN396EMqvezjw1t7DtIAi7i8y0KJzEOtPQm2unXIMW5bA9X8U7VLB0/NV1SFi8IcqQeAhDNxJwcdcGwHJFdlVKLjKdgMWKZAIplAc7Gnm92z3XrN9E+Np3MeI1NyH X-Forefront-Antispam-Report: CIP:63.35.35.123;CTRY:IE;LANG:en;SCL:1;SRV:;IPV:CAL;SFV:NSPM;H:64aa7808-outbound-1.mta.getcheckrecipient.com;PTR:ec2-63-35-35-123.eu-west-1.compute.amazonaws.com;CAT:NONE;SFS:(13230028)(4636009)(39860400002)(376002)(346002)(136003)(396003)(451199021)(36840700001)(40470700004)(46966006)(9686003)(6506007)(478600001)(26005)(186003)(40480700001)(55016003)(40460700003)(7696005)(2906002)(8936002)(316002)(33656002)(41300700001)(8676002)(86362001)(356005)(81166007)(82310400005)(52536014)(82740400003)(235185007)(5660300002)(99936003)(83380400001)(47076005)(336012)(70586007)(6916009)(70206006)(36860700001);DIR:OUT;SFP:1101; X-OriginatorOrg: arm.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 16 Jun 2023 13:07:23.6463 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 76787781-81db-4f18-d606-08db6e6aa034 X-MS-Exchange-CrossTenant-Id: f34e5979-57d9-4aaa-ad4d-b122a662184d X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=f34e5979-57d9-4aaa-ad4d-b122a662184d;Ip=[63.35.35.123];Helo=[64aa7808-outbound-1.mta.getcheckrecipient.com] X-MS-Exchange-CrossTenant-AuthSource: DBAEUR03FT011.eop-EUR03.prod.protection.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB5PR08MB10216 X-Spam-Status: No, score=-2.8 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,FORGED_SPF_HELO,KAM_ASCII_DIVIDERS,KAM_DMARC_NONE,RCVD_IN_DNSWL_NONE,RCVD_IN_MSPIKE_H2,SPF_HELO_PASS,SPF_NONE,TXREP,T_SCC_BODY_TEXT_LINE,UNPARSEABLE_RELAY autolearn=no autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: --_002_PAXPR08MB692697A556EC9FB8F569050E9358APAXPR08MB6926eurp_ Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable This patch reimplements the MD patterns for the instructions that perform narrowing right shifts with optional rounding and saturation using standard RTL codes rather than unspecs. There are four groups of patterns involved: * Simple narrowing shifts with optional signed or unsigned truncation: SHRN, SQSHRN, UQSHRN. These are expressed as a truncation operation of a right shift. The matrix of valid combinations looks like this: | ashiftrt | lshiftrt | ------------------------------------------ ss_truncate | SQSHRN | X | us_truncate | X | UQSHRN | truncate | X | SHRN | ------------------------------------------ * Narrowing shifts with rounding with optional signed or unsigned truncation: RSHRN, SQRSHRN, UQRSHRN. These follow the same combinations of truncation and shift codes as above, but also perform intermediate widening of the results in order to represent the addition of the rounding constant. This group also corrects an existing inaccuracy for RSHRN where we don't currently model the intermediate widening for rounding. * The somewhat special "Signed saturating Shift Right Unsigned Narrow": SQSHRUN. Similar to the SQXTUN instructions, these perform a saturating truncation that isn't represented by US_TRUNCATE or SS_TRUNCATE but needs to use a clamping operation followed by a TRUNCATE. * The rounding version of the above: SQRSHRUN. It needs the special clamping truncate representation but with an intermediate widening and rounding addition. Besides using standard RTL codes for all of the above instructions, this patch allows us to get rid of the explicit define_insns and define_expands for SHRN and RSHRN. Bootstrapped and tested on aarch64-none-linux-gnu and aarch64_be-none-elf. We've got pretty thorough execute tests in advsimd-intrinsics.exp that exercise these and many instances of these instructions get constant-folded away during optimisation and the validation still passes (during development where I was figuring out the details of the semantics they were discovering failures), so I'm fairly confident in the representation. gcc/ChangeLog: * config/aarch64/aarch64-simd-builtins.def (shrn): Rename builtins to... (shrn_n): ... This. (rshrn): Rename builtins to... (rshrn_n): ... This. * config/aarch64/arm_neon.h (vshrn_n_s16): Adjust for the above. (vshrn_n_s32): Likewise. (vshrn_n_s64): Likewise. (vshrn_n_u16): Likewise. (vshrn_n_u32): Likewise. (vshrn_n_u64): Likewise. (vrshrn_n_s16): Likewise. (vrshrn_n_s32): Likewise. (vrshrn_n_s64): Likewise. (vrshrn_n_u16): Likewise. (vrshrn_n_u32): Likewise. (vrshrn_n_u64): Likewise. * config/aarch64/aarch64-simd.md (*aarch64_shrn): Delete. (aarch64_shrn): Likewise. (aarch64_rshrn_insn): Likewise. (aarch64_rshrn): Likewise. (aarch64_qshrn_n_insn): Likewise. (aarch64_qshrn_n): Likewise. (*aarch64_shrn_n_insn): New define_insn. (*aarch64_rshrn_n_insn): Likewise. (*aarch64_sqshrun_n_insn): Likewise. (*aarch64_sqrshrun_n_insn): Likewise. (aarch64_shrn_n): New define_expand. (aarch64_rshrn_n): Likewise. (aarch64_sqshrun_n): Likewise. (aarch64_sqrshrun_n): Likewise. * config/aarch64/iterators.md (ALL_TRUNC): New code iterator. (TRUNCEXTEND): New code attribute. (TRUNC_SHIFT): Likewise. (shrn_op): Likewise. * config/aarch64/predicates.md (aarch64_simd_umax_quarter_mode): New predicate. --_002_PAXPR08MB692697A556EC9FB8F569050E9358APAXPR08MB6926eurp_ Content-Type: application/octet-stream; name="s1.patch" Content-Description: s1.patch Content-Disposition: attachment; filename="s1.patch"; size=21301; creation-date="Fri, 16 Jun 2023 12:57:23 GMT"; modification-date="Fri, 16 Jun 2023 13:07:14 GMT" Content-Transfer-Encoding: base64 Y29tbWl0IGZmYjg3MzQ0ZGQzNDNkZjYwZWFmYjEwZDUxMGFjNzA0ZjM3NDE3Y2EKQXV0aG9yOiBL eXJ5bG8gVGthY2hvdiA8a3lyeWxvLnRrYWNob3ZAYXJtLmNvbT4KRGF0ZTogICBUdWUgSnVuIDYg MjI6Mzc6NDYgMjAyMyArMDEwMAoKICAgIGFhcmNoNjQ6IFJlaW1wbGVtZW50IFtVU11RKFIpU0hS KFUpTiBwYXR0ZXJucyB3aXRoIFJUTCBjb2RlcwogICAgCiAgICBUaGlzIHBhdGNoIHJlaW1wbGVt ZW50cyB0aGUgTUQgcGF0dGVybnMgZm9yIHRoZSBpbnN0cnVjdGlvbnMgdGhhdAogICAgcGVyZm9y bSBuYXJyb3dpbmcgcmlnaHQgc2hpZnRzIHdpdGggb3B0aW9uYWwgcm91bmRpbmcgYW5kIHNhdHVy YXRpb24KICAgIHVzaW5nIHN0YW5kYXJkIFJUTCBjb2RlcyByYXRoZXIgdGhhbiB1bnNwZWNzLgog ICAgCiAgICBUaGVyZSBhcmUgZm91ciBncm91cHMgb2YgcGF0dGVybnMgaW52b2x2ZWQ6CiAgICAK ICAgICogU2ltcGxlIG5hcnJvd2luZyBzaGlmdHMgd2l0aCBvcHRpb25hbCBzaWduZWQgb3IgdW5z aWduZWQgdHJ1bmNhdGlvbjoKICAgIFNIUk4sIFNRU0hSTiwgVVFTSFJOLiAgVGhlc2UgYXJlIGV4 cHJlc3NlZCBhcyBhIHRydW5jYXRpb24gb3BlcmF0aW9uIG9mCiAgICBhIHJpZ2h0IHNoaWZ0LiAg VGhlIG1hdHJpeCBvZiB2YWxpZCBjb21iaW5hdGlvbnMgbG9va3MgbGlrZSB0aGlzOgogICAgCiAg ICAgICAgICAgICAgICB8ICAgYXNoaWZ0cnQgICB8ICAgbHNoaWZ0cnQgIHwKICAgIC0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgc3NfdHJ1bmNhdGUgfCAgIFNR U0hSTiAgICAgfCAgICAgIFggICAgICB8CiAgICB1c190cnVuY2F0ZSB8ICAgICBYICAgICAgICB8 ICAgIFVRU0hSTiAgIHwKICAgIHRydW5jYXRlICAgIHwgICAgIFggICAgICAgIHwgICAgIFNIUk4g ICAgfAogICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAK ICAgICogTmFycm93aW5nIHNoaWZ0cyB3aXRoIHJvdW5kaW5nIHdpdGggb3B0aW9uYWwgc2lnbmVk IG9yIHVuc2lnbmVkCiAgICB0cnVuY2F0aW9uOiBSU0hSTiwgU1FSU0hSTiwgVVFSU0hSTi4gIFRo ZXNlIGZvbGxvdyB0aGUgc2FtZQogICAgY29tYmluYXRpb25zIG9mIHRydW5jYXRpb24gYW5kIHNo aWZ0IGNvZGVzIGFzIGFib3ZlLCBidXQgYWxzbyBwZXJmb3JtCiAgICBpbnRlcm1lZGlhdGUgd2lk ZW5pbmcgb2YgdGhlIHJlc3VsdHMgaW4gb3JkZXIgdG8gcmVwcmVzZW50IHRoZSBhZGRpdGlvbgog ICAgb2YgdGhlIHJvdW5kaW5nIGNvbnN0YW50LiAgVGhpcyBncm91cCBhbHNvIGNvcnJlY3RzIGFu IGV4aXN0aW5nCiAgICBpbmFjY3VyYWN5IGZvciBSU0hSTiB3aGVyZSB3ZSBkb24ndCBjdXJyZW50 bHkgbW9kZWwgdGhlIGludGVybWVkaWF0ZQogICAgd2lkZW5pbmcgZm9yIHJvdW5kaW5nLgogICAg CiAgICAqIFRoZSBzb21ld2hhdCBzcGVjaWFsICJTaWduZWQgc2F0dXJhdGluZyBTaGlmdCBSaWdo dCBVbnNpZ25lZCBOYXJyb3ciOgogICAgU1FTSFJVTi4gIFNpbWlsYXIgdG8gdGhlIFNRWFRVTiBp bnN0cnVjdGlvbnMsIHRoZXNlIHBlcmZvcm0gYQogICAgc2F0dXJhdGluZyB0cnVuY2F0aW9uIHRo YXQgaXNuJ3QgcmVwcmVzZW50ZWQgYnkgVVNfVFJVTkNBVEUgb3IKICAgIFNTX1RSVU5DQVRFIGJ1 dCBuZWVkcyB0byB1c2UgYSBjbGFtcGluZyBvcGVyYXRpb24gZm9sbG93ZWQgYnkgYQogICAgVFJV TkNBVEUuCiAgICAKICAgICogVGhlIHJvdW5kaW5nIHZlcnNpb24gb2YgdGhlIGFib3ZlOiBTUVJT SFJVTi4gIEl0IG5lZWRzIHRoZSBzcGVjaWFsCiAgICBjbGFtcGluZyB0cnVuY2F0ZSByZXByZXNl bnRhdGlvbiBidXQgd2l0aCBhbiBpbnRlcm1lZGlhdGUgd2lkZW5pbmcgYW5kCiAgICByb3VuZGlu ZyBhZGRpdGlvbi4KICAgIAogICAgQmVzaWRlcyB1c2luZyBzdGFuZGFyZCBSVEwgY29kZXMgZm9y IGFsbCBvZiB0aGUgYWJvdmUgaW5zdHJ1Y3Rpb25zLCB0aGlzCiAgICBwYXRjaCBhbGxvd3MgdXMg dG8gZ2V0IHJpZCBvZiB0aGUgZXhwbGljaXQgZGVmaW5lX2luc25zIGFuZAogICAgZGVmaW5lX2V4 cGFuZHMgZm9yIFNIUk4gYW5kIFJTSFJOLgogICAgCiAgICBCb290c3RyYXBwZWQgYW5kIHRlc3Rl ZCBvbiBhYXJjaDY0LW5vbmUtbGludXgtZ251IGFuZAogICAgYWFyY2g2NF9iZS1ub25lLWVsZi4g IFdlJ3ZlIGdvdCBwcmV0dHkgdGhvcm91Z2ggZXhlY3V0ZSB0ZXN0cyBpbgogICAgYWR2c2ltZC1p bnRyaW5zaWNzLmV4cCB0aGF0IGV4ZXJjaXNlIHRoZXNlIGFuZCBtYW55IGluc3RhbmNlcyBvZiB0 aGVzZQogICAgaW5zdHJ1Y3Rpb25zIGdldCBjb25zdGFudC1mb2xkZWQgYXdheSBkdXJpbmcgb3B0 aW1pc2F0aW9uIGFuZCB0aGUKICAgIHZhbGlkYXRpb24gc3RpbGwgcGFzc2VzIChkdXJpbmcgZGV2 ZWxvcG1lbnQgd2hlcmUgSSB3YXMgZmlndXJpbmcgb3V0IHRoZQogICAgZGV0YWlscyBvZiB0aGUg c2VtYW50aWNzIHRoZXkgd2VyZSBkaXNjb3ZlcmluZyBmYWlsdXJlcyksIHNvIEknbSBmYWlybHkK ICAgIGNvbmZpZGVudCBpbiB0aGUgcmVwcmVzZW50YXRpb24uCiAgICAKICAgIGdjYy9DaGFuZ2VM b2c6CiAgICAKICAgICAgICAgICAgKiBjb25maWcvYWFyY2g2NC9hYXJjaDY0LXNpbWQtYnVpbHRp bnMuZGVmIChzaHJuKTogUmVuYW1lIGJ1aWx0aW5zIHRvLi4uCiAgICAgICAgICAgIChzaHJuX24p OiAuLi4gVGhpcy4KICAgICAgICAgICAgKHJzaHJuKTogUmVuYW1lIGJ1aWx0aW5zIHRvLi4uCiAg ICAgICAgICAgIChyc2hybl9uKTogLi4uIFRoaXMuCiAgICAgICAgICAgICogY29uZmlnL2FhcmNo NjQvYXJtX25lb24uaCAodnNocm5fbl9zMTYpOiBBZGp1c3QgZm9yIHRoZSBhYm92ZS4KICAgICAg ICAgICAgKHZzaHJuX25fczMyKTogTGlrZXdpc2UuCiAgICAgICAgICAgICh2c2hybl9uX3M2NCk6 IExpa2V3aXNlLgogICAgICAgICAgICAodnNocm5fbl91MTYpOiBMaWtld2lzZS4KICAgICAgICAg ICAgKHZzaHJuX25fdTMyKTogTGlrZXdpc2UuCiAgICAgICAgICAgICh2c2hybl9uX3U2NCk6IExp a2V3aXNlLgogICAgICAgICAgICAodnJzaHJuX25fczE2KTogTGlrZXdpc2UuCiAgICAgICAgICAg ICh2cnNocm5fbl9zMzIpOiBMaWtld2lzZS4KICAgICAgICAgICAgKHZyc2hybl9uX3M2NCk6IExp a2V3aXNlLgogICAgICAgICAgICAodnJzaHJuX25fdTE2KTogTGlrZXdpc2UuCiAgICAgICAgICAg ICh2cnNocm5fbl91MzIpOiBMaWtld2lzZS4KICAgICAgICAgICAgKHZyc2hybl9uX3U2NCk6IExp a2V3aXNlLgogICAgICAgICAgICAqIGNvbmZpZy9hYXJjaDY0L2FhcmNoNjQtc2ltZC5tZAogICAg ICAgICAgICAoKmFhcmNoNjRfPHNybl9vcD5zaHJuPG1vZGU+PHZjemxlPjx2Y3piZT4pOiBEZWxl dGUuCiAgICAgICAgICAgIChhYXJjaDY0X3Nocm48bW9kZT4pOiBMaWtld2lzZS4KICAgICAgICAg ICAgKGFhcmNoNjRfcnNocm48bW9kZT48dmN6bGU+PHZjemJlPl9pbnNuKTogTGlrZXdpc2UuCiAg ICAgICAgICAgIChhYXJjaDY0X3JzaHJuPG1vZGU+KTogTGlrZXdpc2UuCiAgICAgICAgICAgIChh YXJjaDY0XzxzdXI+cTxyPnNocjx1Pm5fbjxtb2RlPl9pbnNuPHZjemxlPjx2Y3piZT4pOiBMaWtl d2lzZS4KICAgICAgICAgICAgKGFhcmNoNjRfPHN1cj5xPHI+c2hyPHU+bl9uPG1vZGU+KTogTGlr ZXdpc2UuCiAgICAgICAgICAgICgqYWFyY2g2NF88c2hybl9vcD5zaHJuX248bW9kZT5faW5zbjx2 Y3psZT48dmN6YmU+KTogTmV3IGRlZmluZV9pbnNuLgogICAgICAgICAgICAoKmFhcmNoNjRfPHNo cm5fb3A+cnNocm5fbjxtb2RlPl9pbnNuPHZjemxlPjx2Y3piZT4pOiBMaWtld2lzZS4KICAgICAg ICAgICAgKCphYXJjaDY0X3Nxc2hydW5fbjxtb2RlPl9pbnNuPHZjemxlPjx2Y3piZT4pOiBMaWtl d2lzZS4KICAgICAgICAgICAgKCphYXJjaDY0X3NxcnNocnVuX248bW9kZT5faW5zbjx2Y3psZT48 dmN6YmU+KTogTGlrZXdpc2UuCiAgICAgICAgICAgIChhYXJjaDY0XzxzaHJuX29wPnNocm5fbjxt b2RlPik6IE5ldyBkZWZpbmVfZXhwYW5kLgogICAgICAgICAgICAoYWFyY2g2NF88c2hybl9vcD5y c2hybl9uPG1vZGU+KTogTGlrZXdpc2UuCiAgICAgICAgICAgIChhYXJjaDY0X3Nxc2hydW5fbjxt b2RlPik6IExpa2V3aXNlLgogICAgICAgICAgICAoYWFyY2g2NF9zcXJzaHJ1bl9uPG1vZGU+KTog TGlrZXdpc2UuCiAgICAgICAgICAgICogY29uZmlnL2FhcmNoNjQvaXRlcmF0b3JzLm1kIChBTExf VFJVTkMpOiBOZXcgY29kZSBpdGVyYXRvci4KICAgICAgICAgICAgKFRSVU5DRVhURU5EKTogTmV3 IGNvZGUgYXR0cmlidXRlLgogICAgICAgICAgICAoVFJVTkNfU0hJRlQpOiBMaWtld2lzZS4KICAg ICAgICAgICAgKHNocm5fb3ApOiBMaWtld2lzZS4KICAgICAgICAgICAgKiBjb25maWcvYWFyY2g2 NC9wcmVkaWNhdGVzLm1kIChhYXJjaDY0X3NpbWRfdW1heF9xdWFydGVyX21vZGUpOgogICAgICAg ICAgICBOZXcgcHJlZGljYXRlLgoKZGlmZiAtLWdpdCBhL2djYy9jb25maWcvYWFyY2g2NC9hYXJj aDY0LXNpbWQtYnVpbHRpbnMuZGVmIGIvZ2NjL2NvbmZpZy9hYXJjaDY0L2FhcmNoNjQtc2ltZC1i dWlsdGlucy5kZWYKaW5kZXggOTRmZjNmMTg1MmYuLjg3YWY4ZjM2ODljIDEwMDY0NAotLS0gYS9n Y2MvY29uZmlnL2FhcmNoNjQvYWFyY2g2NC1zaW1kLWJ1aWx0aW5zLmRlZgorKysgYi9nY2MvY29u ZmlnL2FhcmNoNjQvYWFyY2g2NC1zaW1kLWJ1aWx0aW5zLmRlZgpAQCAtMjYwLDE3ICsyNjAsMTUg QEAKICAgQlVJTFRJTl9WRFFIUyAoVEVSTk9QLCBtbHNfbiwgMCwgTk9ORSkKICAgQlVJTFRJTl9W RFFIUyAoVEVSTk9QVSwgbWxzX24sIDAsIE5PTkUpCiAKLSAgLyogSW1wbGVtZW50ZWQgYnkgYWFy Y2g2NF9zaHJuPG1vZGU+Ii4gICovCi0gIEJVSUxUSU5fVlFOIChTSElGVElNTSwgc2hybiwgMCwg Tk9ORSkKLSAgQlVJTFRJTl9WUU4gKFVTSElGVElNTSwgc2hybiwgMCwgTk9ORSkKKyAgQlVJTFRJ Tl9WUU4gKFNISUZUSU1NLCBzaHJuX24sIDAsIE5PTkUpCisgIEJVSUxUSU5fVlFOIChVU0hJRlRJ TU0sIHNocm5fbiwgMCwgTk9ORSkKIAogICAvKiBJbXBsZW1lbnRlZCBieSBhYXJjaDY0X3Nocm4y PG1vZGU+LiAgKi8KICAgQlVJTFRJTl9WUU4gKFNISUZUMklNTSwgc2hybjIsIDAsIE5PTkUpCiAg IEJVSUxUSU5fVlFOIChVU0hJRlQySU1NLCBzaHJuMiwgMCwgTk9ORSkKIAotICAvKiBJbXBsZW1l bnRlZCBieSBhYXJjaDY0X3JzaHJuPG1vZGU+Ii4gICovCi0gIEJVSUxUSU5fVlFOIChTSElGVElN TSwgcnNocm4sIDAsIE5PTkUpCi0gIEJVSUxUSU5fVlFOIChVU0hJRlRJTU0sIHJzaHJuLCAwLCBO T05FKQorICBCVUlMVElOX1ZRTiAoU0hJRlRJTU0sIHJzaHJuX24sIDAsIE5PTkUpCisgIEJVSUxU SU5fVlFOIChVU0hJRlRJTU0sIHJzaHJuX24sIDAsIE5PTkUpCiAKICAgLyogSW1wbGVtZW50ZWQg YnkgYWFyY2g2NF9yc2hybjI8bW9kZT4uICAqLwogICBCVUlMVElOX1ZRTiAoU0hJRlQySU1NLCBy c2hybjIsIDAsIE5PTkUpCkBAIC00NzAsNyArNDY4LDYgQEAKICAgLyogSW1wbGVtZW50ZWQgYnkg YWFyY2g2NF88c3VyPnNobGwyX248bW9kZT4uICAqLwogICBCVUlMVElOX1ZRVyAoU0hJRlRJTU0s IHNzaGxsMl9uLCAwLCBOT05FKQogICBCVUlMVElOX1ZRVyAoU0hJRlRJTU0sIHVzaGxsMl9uLCAw LCBOT05FKQotICAvKiBJbXBsZW1lbnRlZCBieSBhYXJjaDY0XzxzdXI+cTxyPnNocjx1Pm5fbjxt b2RlPi4gICovCiAgIEJVSUxUSU5fVlFOIChTSElGVElNTSwgc3FzaHJ1bl9uLCAwLCBOT05FKQog ICBCVUlMVElOX1ZRTiAoU0hJRlRJTU0sIHNxcnNocnVuX24sIDAsIE5PTkUpCiAgIEJVSUxUSU5f VlFOIChTSElGVElNTSwgc3FzaHJuX24sIDAsIE5PTkUpCmRpZmYgLS1naXQgYS9nY2MvY29uZmln L2FhcmNoNjQvYWFyY2g2NC1zaW1kLm1kIGIvZ2NjL2NvbmZpZy9hYXJjaDY0L2FhcmNoNjQtc2lt ZC5tZAppbmRleCAzMjg2ZjQyODRkZC4uOGI5Mjk4MWJlYmIgMTAwNjQ0Ci0tLSBhL2djYy9jb25m aWcvYWFyY2g2NC9hYXJjaDY0LXNpbWQubWQKKysrIGIvZ2NjL2NvbmZpZy9hYXJjaDY0L2FhcmNo NjQtc2ltZC5tZApAQCAtMTg5NiwxNiArMTg5Niw2IEBAIChkZWZpbmVfZXhwYW5kICJ2ZWNfcGFj a190cnVuY188bW9kZT4iCiAgfQogKQogCi0oZGVmaW5lX2luc24gIiphYXJjaDY0Xzxzcm5fb3A+ c2hybjxtb2RlPjx2Y3psZT48dmN6YmU+IgotICBbKHNldCAobWF0Y2hfb3BlcmFuZDo8Vk5BUlJP V1E+IDAgInJlZ2lzdGVyX29wZXJhbmQiICI9dyIpCi0gICAgICAgICh0cnVuY2F0ZTo8Vk5BUlJP V1E+Ci0gICAgICAgICAgKFNISUZUUlQ6VlFOIChtYXRjaF9vcGVyYW5kOlZRTiAxICJyZWdpc3Rl cl9vcGVyYW5kIiAidyIpCi0gICAgICAgICAgICAobWF0Y2hfb3BlcmFuZDpWUU4gMiAiYWFyY2g2 NF9zaW1kX3NoaWZ0X2ltbV92ZWNfPHZuX21vZGU+IikpKSldCi0gICJUQVJHRVRfU0lNRCIKLSAg InNocm5cXHQlMC48Vm50eXBlPiwgJTEuPFZ0eXBlPiwgJTIiCi0gIFsoc2V0X2F0dHIgInR5cGUi ICJuZW9uX3NoaWZ0X2ltbV9uYXJyb3dfcSIpXQotKQotCiAoZGVmaW5lX2luc24gIiphYXJjaDY0 Xzxzcm5fb3A+c2hybjxtb2RlPjJfdmVjdF9sZSIKICAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6PFZO QVJST1dRMj4gMCAicmVnaXN0ZXJfb3BlcmFuZCIgIj13IikKIAkodmVjX2NvbmNhdDo8Vk5BUlJP V1EyPgpAQCAtMTk1OCw1OCArMTk0OCw2IEBAIChkZWZpbmVfaW5zbiAiKmFhcmNoNjRfPHNybl9v cD50b3BiaXRzX3NodWZmbGU8bW9kZT5fYmUiCiAgIFsoc2V0X2F0dHIgInR5cGUiICJuZW9uX3Bl cm11dGU8cT4iKV0KICkKIAotKGRlZmluZV9leHBhbmQgImFhcmNoNjRfc2hybjxtb2RlPiIKLSAg WyhzZXQgKG1hdGNoX29wZXJhbmQ6PFZOQVJST1dRPiAwICJyZWdpc3Rlcl9vcGVyYW5kIikKLQko dHJ1bmNhdGU6PFZOQVJST1dRPgotCSAgKGxzaGlmdHJ0OlZRTiAobWF0Y2hfb3BlcmFuZDpWUU4g MSAicmVnaXN0ZXJfb3BlcmFuZCIpCi0JICAgIChtYXRjaF9vcGVyYW5kOlNJIDIgImFhcmNoNjRf c2ltZF9zaGlmdF9pbW1fb2Zmc2V0Xzx2bl9tb2RlPiIpKSkpXQotICAiVEFSR0VUX1NJTUQiCi0g IHsKLSAgICBvcGVyYW5kc1syXSA9IGFhcmNoNjRfc2ltZF9nZW5fY29uc3RfdmVjdG9yX2R1cCAo PE1PREU+bW9kZSwKLQkJCQkJCSBJTlRWQUwgKG9wZXJhbmRzWzJdKSk7Ci0gIH0KLSkKLQotKGRl ZmluZV9pbnNuICJhYXJjaDY0X3JzaHJuPG1vZGU+PHZjemxlPjx2Y3piZT5faW5zbiIKLSAgWyhz ZXQgKG1hdGNoX29wZXJhbmQ6PFZOQVJST1dRPiAwICJyZWdpc3Rlcl9vcGVyYW5kIiAiPXciKQot CSh0cnVuY2F0ZTo8Vk5BUlJPV1E+Ci0JICAobHNoaWZ0cnQ6VlFOCi0JICAgIChwbHVzOlZRTiAo bWF0Y2hfb3BlcmFuZDpWUU4gMSAicmVnaXN0ZXJfb3BlcmFuZCIgInciKQotCQkgICAgICAobWF0 Y2hfb3BlcmFuZDpWUU4gMyAiYWFyY2g2NF9zaW1kX3JzaHJuX2ltbV92ZWMiKSkKLQkgICAgKG1h dGNoX29wZXJhbmQ6VlFOIDIgImFhcmNoNjRfc2ltZF9zaGlmdF9pbW1fdmVjXzx2bl9tb2RlPiIp KSkpXQotICAiVEFSR0VUX1NJTUQKLSAgICYmIElOVFZBTCAoQ09OU1RfVkVDVE9SX0VMVCAob3Bl cmFuZHNbM10sIDApKQotICAgICAgPT0gKEhPU1RfV0lERV9JTlRfMSA8PCAoSU5UVkFMIChDT05T VF9WRUNUT1JfRUxUIChvcGVyYW5kc1syXSwgMCkpIC0gMSkpIgotICAicnNocm5cXHQlMC48Vm50 eXBlPiwgJTEuPFZ0eXBlPiwgJTIiCi0gIFsoc2V0X2F0dHIgInR5cGUiICJuZW9uX3NoaWZ0X2lt bV9uYXJyb3dfcSIpXQotKQotCi0oZGVmaW5lX2V4cGFuZCAiYWFyY2g2NF9yc2hybjxtb2RlPiIK LSAgWyhtYXRjaF9vcGVyYW5kOjxWTkFSUk9XUT4gMCAicmVnaXN0ZXJfb3BlcmFuZCIpCi0gICAo bWF0Y2hfb3BlcmFuZDpWUU4gMSAicmVnaXN0ZXJfb3BlcmFuZCIpCi0gICAobWF0Y2hfb3BlcmFu ZDpTSSAyICJhYXJjaDY0X3NpbWRfc2hpZnRfaW1tX29mZnNldF88dm5fbW9kZT4iKV0KLSAgIlRB UkdFVF9TSU1EIgotICB7Ci0gICAgaWYgKElOVFZBTCAob3BlcmFuZHNbMl0pID09IEdFVF9NT0RF X1VOSVRfQklUU0laRSAoPFZOQVJST1dRPm1vZGUpKQotICAgICAgewotCXJ0eCB0bXAwID0gYWFy Y2g2NF9nZW5fc2hhcmVhYmxlX3plcm8gKDxNT0RFPm1vZGUpOwotCWVtaXRfaW5zbiAoZ2VuX2Fh cmNoNjRfcmFkZGhuPG1vZGU+IChvcGVyYW5kc1swXSwgb3BlcmFuZHNbMV0sIHRtcDApKTsKLSAg ICAgIH0KLSAgICBlbHNlCi0gICAgICB7Ci0JcnR4IHNoZnQKLQkgID0gYWFyY2g2NF9zaW1kX2dl bl9jb25zdF92ZWN0b3JfZHVwICg8TU9ERT5tb2RlLAotCQkJCQkgICAgICAgSE9TVF9XSURFX0lO VF8xVQotCQkJCQkgICAgICAgIDw8IChJTlRWQUwgKG9wZXJhbmRzWzJdKSAtIDEpKTsKLQlvcGVy YW5kc1syXSA9IGFhcmNoNjRfc2ltZF9nZW5fY29uc3RfdmVjdG9yX2R1cCAoPE1PREU+bW9kZSwK LQkJCQkJCSAgICAgICAgIElOVFZBTCAob3BlcmFuZHNbMl0pKTsKLQllbWl0X2luc24gKGdlbl9h YXJjaDY0X3JzaHJuPG1vZGU+X2luc24gKG9wZXJhbmRzWzBdLCBvcGVyYW5kc1sxXSwKLQkJCQkJ CSBvcGVyYW5kc1syXSwgc2hmdCkpOwotICAgICAgfQotICAgIERPTkU7Ci0gIH0KLSkKLQogKGRl ZmluZV9pbnNuICJhYXJjaDY0X3Nocm4yPG1vZGU+X2luc25fbGUiCiAgIFsoc2V0IChtYXRjaF9v cGVyYW5kOjxWTkFSUk9XUTI+IDAgInJlZ2lzdGVyX29wZXJhbmQiICI9dyIpCiAJKHZlY19jb25j YXQ6PFZOQVJST1dRMj4KQEAgLTY3MjcsMzEgKzY2NjUsMTUzIEBAIChkZWZpbmVfaW5zbiAiYWFy Y2g2NF88c3VyPnE8cj5zaHI8dT5uX248bW9kZT4iCiAgIFsoc2V0X2F0dHIgInR5cGUiICJuZW9u X3NhdF9zaGlmdF9pbW1fbmFycm93X3EiKV0KICkKIAotKGRlZmluZV9pbnNuICJhYXJjaDY0Xzxz dXI+cTxyPnNocjx1Pm5fbjxtb2RlPl9pbnNuPHZjemxlPjx2Y3piZT4iCisoZGVmaW5lX2luc24g IiphYXJjaDY0XzxzaHJuX29wPnNocm5fbjxtb2RlPl9pbnNuPHZjemxlPjx2Y3piZT4iCiAgIFso c2V0IChtYXRjaF9vcGVyYW5kOjxWTkFSUk9XUT4gMCAicmVnaXN0ZXJfb3BlcmFuZCIgIj13IikK LQkodW5zcGVjOjxWTkFSUk9XUT4KLQkgIFsobWF0Y2hfb3BlcmFuZDpWUU4gMSAicmVnaXN0ZXJf b3BlcmFuZCIgInciKQotCSAgIChtYXRjaF9vcGVyYW5kOlZRTiAyICJhYXJjaDY0X3NpbWRfc2hp ZnRfaW1tX3ZlY188dm5fbW9kZT4iKV0KLQkgICBWUVNIUk5fTikpXQorCShBTExfVFJVTkM6PFZO QVJST1dRPgorCSAgKDxUUlVOQ19TSElGVD46VlFOCisJICAgIChtYXRjaF9vcGVyYW5kOlZRTiAx ICJyZWdpc3Rlcl9vcGVyYW5kIiAidyIpCisJICAgIChtYXRjaF9vcGVyYW5kOlZRTiAyICJhYXJj aDY0X3NpbWRfc2hpZnRfaW1tX3ZlY188dm5fbW9kZT4iKSkpKV0KICAgIlRBUkdFVF9TSU1EIgot ICAiPHN1cj5xPHI+c2hyPHU+blxcdCU8dm4yPjA8Vm1udHlwZT4sICU8dj4xPFZtdHlwZT4sICUy IgorICAiPHNocm5fb3A+c2hyblx0JTx2bjI+MDxWbW50eXBlPiwgJTx2PjE8Vm10eXBlPiwgJTIi CiAgIFsoc2V0X2F0dHIgInR5cGUiICJuZW9uX3NoaWZ0X2ltbV9uYXJyb3dfcSIpXQogKQogCi0o ZGVmaW5lX2V4cGFuZCAiYWFyY2g2NF88c3VyPnE8cj5zaHI8dT5uX248bW9kZT4iCisoZGVmaW5l X2V4cGFuZCAiYWFyY2g2NF88c2hybl9vcD5zaHJuX248bW9kZT4iCisgIFsoc2V0IChtYXRjaF9v cGVyYW5kOjxWTkFSUk9XUT4gMCAicmVnaXN0ZXJfb3BlcmFuZCIpCisJKEFMTF9UUlVOQzo8Vk5B UlJPV1E+CisJICAoPFRSVU5DX1NISUZUPjpWUU4KKwkgICAgKG1hdGNoX29wZXJhbmQ6VlFOIDEg InJlZ2lzdGVyX29wZXJhbmQiKQorCSAgICAobWF0Y2hfb3BlcmFuZDpTSSAyICJhYXJjaDY0X3Np bWRfc2hpZnRfaW1tX29mZnNldF88dmVfbW9kZT4iKSkpKV0KKyAgIlRBUkdFVF9TSU1EIgorICB7 CisgICAgb3BlcmFuZHNbMl0gPSBhYXJjaDY0X3NpbWRfZ2VuX2NvbnN0X3ZlY3Rvcl9kdXAgKDxN T0RFPm1vZGUsCisJCQkJCQkgSU5UVkFMIChvcGVyYW5kc1syXSkpOworICB9CispCisKKyhkZWZp bmVfaW5zbiAiKmFhcmNoNjRfPHNocm5fb3A+cnNocm5fbjxtb2RlPl9pbnNuPHZjemxlPjx2Y3pi ZT4iCiAgIFsoc2V0IChtYXRjaF9vcGVyYW5kOjxWTkFSUk9XUT4gMCAicmVnaXN0ZXJfb3BlcmFu ZCIgIj13IikKLSAgICAgICAgKHVuc3BlYzo8Vk5BUlJPV1E+IFsobWF0Y2hfb3BlcmFuZDpWUU4g MSAicmVnaXN0ZXJfb3BlcmFuZCIpCi0JCQkgICAgKG1hdGNoX29wZXJhbmQ6U0kgMgotCQkJICAg ICAgImFhcmNoNjRfc2ltZF9zaGlmdF9pbW1fb2Zmc2V0Xzx2ZV9tb2RlPiIpXQotCQkJICAgVlFT SFJOX04pKV0KKwkoQUxMX1RSVU5DOjxWTkFSUk9XUT4KKwkgICg8VFJVTkNfU0hJRlQ+OjxWMlhX SURFPgorCSAgICAocGx1czo8VjJYV0lERT4KKwkgICAgICAoPFRSVU5DRVhURU5EPjo8VjJYV0lE RT4KKwkgICAgICAgIChtYXRjaF9vcGVyYW5kOlZRTiAxICJyZWdpc3Rlcl9vcGVyYW5kIiAidyIp KQorCSAgICAgIChtYXRjaF9vcGVyYW5kOjxWMlhXSURFPiAzICJhYXJjaDY0X3NpbWRfcnNyYV9y bmRfaW1tX3ZlYyIpKQorCSAgICAobWF0Y2hfb3BlcmFuZDpWUU4gMiAiYWFyY2g2NF9zaW1kX3No aWZ0X2ltbV92ZWNfPHZuX21vZGU+IikpKSldCisgICJUQVJHRVRfU0lNRAorICAgJiYgYWFyY2g2 NF9jb25zdF92ZWNfcm5kX2NzdF9wIChvcGVyYW5kc1szXSwgb3BlcmFuZHNbMl0pIgorICAiPHNo cm5fb3A+cnNocm5cdCU8dm4yPjA8Vm1udHlwZT4sICU8dj4xPFZtdHlwZT4sICUyIgorICBbKHNl dF9hdHRyICJ0eXBlIiAibmVvbl9zaGlmdF9pbW1fbmFycm93X3EiKV0KKykKKworKGRlZmluZV9l eHBhbmQgImFhcmNoNjRfPHNocm5fb3A+cnNocm5fbjxtb2RlPiIKKyAgWyhzZXQgKG1hdGNoX29w ZXJhbmQ6PFZOQVJST1dRPiAwICJyZWdpc3Rlcl9vcGVyYW5kIikKKwkoQUxMX1RSVU5DOjxWTkFS Uk9XUT4KKwkgICg8VFJVTkNfU0hJRlQ+OjxWMlhXSURFPgorCSAgICAocGx1czo8VjJYV0lERT4K KwkgICAgICAoPFRSVU5DRVhURU5EPjo8VjJYV0lERT4KKwkgICAgICAgIChtYXRjaF9vcGVyYW5k OlZRTiAxICJyZWdpc3Rlcl9vcGVyYW5kIikpCisJICAgICAgKG1hdGNoX2R1cCAzKSkKKwkgICAg KG1hdGNoX29wZXJhbmQ6U0kgMiAiYWFyY2g2NF9zaW1kX3NoaWZ0X2ltbV9vZmZzZXRfPHZlX21v ZGU+IikpKSldCisgICJUQVJHRVRfU0lNRCIKKyAgeworICAgIGlmICg8Q09ERT4gPT0gVFJVTkNB VEUKKwkmJiBJTlRWQUwgKG9wZXJhbmRzWzJdKSA9PSBHRVRfTU9ERV9VTklUX0JJVFNJWkUgKDxW TkFSUk9XUT5tb2RlKSkKKyAgICAgIHsKKwlydHggdG1wMCA9IGFhcmNoNjRfZ2VuX3NoYXJlYWJs ZV96ZXJvICg8TU9ERT5tb2RlKTsKKwllbWl0X2luc24gKGdlbl9hYXJjaDY0X3JhZGRobjxtb2Rl PiAob3BlcmFuZHNbMF0sIG9wZXJhbmRzWzFdLCB0bXAwKSk7CisJRE9ORTsKKyAgICAgIH0KKyAg ICAvKiBVc2UgdGhpcyBleHBhbmRlciB0byBjcmVhdGUgdGhlIHJvdW5kaW5nIGNvbnN0YW50IHZl Y3Rvciwgd2hpY2ggaXMKKyAgICAgICAxIDw8IChzaGlmdCAtIDEpLiAgVXNlIHdpZGVfaW50IGhl cmUgdG8gZW5zdXJlIHRoYXQgdGhlIHJpZ2h0IFRJbW9kZQorICAgICAgIFJUTCBpcyBnZW5lcmF0 ZWQgd2hlbiBoYW5kbGluZyB0aGUgREltb2RlIGV4cGFuZGVycy4gICovCisgICAgaW50IHByZWMg PSBHRVRfTU9ERV9VTklUX1BSRUNJU0lPTiAoPFYyWFdJREU+bW9kZSk7CisgICAgd2lkZV9pbnQg cm5kX3dpID0gd2k6OnNldF9iaXRfaW5femVybyAoSU5UVkFMIChvcGVyYW5kc1syXSkgLSAxLCBw cmVjKTsKKyAgICBvcGVyYW5kc1szXSA9IGltbWVkX3dpZGVfaW50X2NvbnN0IChybmRfd2ksIEdF VF9NT0RFX0lOTkVSICg8VjJYV0lERT5tb2RlKSk7CisgICAgb3BlcmFuZHNbM10gPSBnZW5fY29u c3RfdmVjX2R1cGxpY2F0ZSAoPFYyWFdJREU+bW9kZSwgb3BlcmFuZHNbM10pOworICAgIG9wZXJh bmRzWzJdID0gZ2VuX2NvbnN0X3ZlY19kdXBsaWNhdGUgKDxNT0RFPm1vZGUsIG9wZXJhbmRzWzJd KTsKKyAgfQorKQorCisoZGVmaW5lX2luc24gIiphYXJjaDY0X3Nxc2hydW5fbjxtb2RlPl9pbnNu PHZjemxlPjx2Y3piZT4iCisgIFsoc2V0IChtYXRjaF9vcGVyYW5kOjxWTkFSUk9XUT4gMCAicmVn aXN0ZXJfb3BlcmFuZCIgIj13IikKKwkodHJ1bmNhdGU6PFZOQVJST1dRPgorCSAgKHNtaW46VlFO CisJICAgIChzbWF4OlZRTgorCSAgICAgIChhc2hpZnRydDpWUU4KKwkJKG1hdGNoX29wZXJhbmQ6 VlFOIDEgInJlZ2lzdGVyX29wZXJhbmQiICJ3IikKKwkJKG1hdGNoX29wZXJhbmQ6VlFOIDIgImFh cmNoNjRfc2ltZF9zaGlmdF9pbW1fdmVjXzx2bl9tb2RlPiIpKQorCSAgICAgIChtYXRjaF9vcGVy YW5kOlZRTiAzICJhYXJjaDY0X3NpbWRfaW1tX3plcm8iKSkKKwkgICAgKG1hdGNoX29wZXJhbmQ6 VlFOIDQgImFhcmNoNjRfc2ltZF91bWF4X2hhbGZfbW9kZSIpKSkpXQorICAiVEFSR0VUX1NJTUQi CisgICJzcXNocnVuXHQlPHZuMj4wPFZtbnR5cGU+LCAlPHY+MTxWbXR5cGU+LCAlMiIKKyAgWyhz ZXRfYXR0ciAidHlwZSIgIm5lb25fc2hpZnRfaW1tX25hcnJvd19xIildCispCisKKyhkZWZpbmVf ZXhwYW5kICJhYXJjaDY0X3Nxc2hydW5fbjxtb2RlPiIKKyAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6 PFZOQVJST1dRPiAwICJyZWdpc3Rlcl9vcGVyYW5kIikKKwkodHJ1bmNhdGU6PFZOQVJST1dRPgor CSAgKHNtaW46VlFOCisJICAgIChzbWF4OlZRTgorCSAgICAgIChhc2hpZnRydDpWUU4KKwkJKG1h dGNoX29wZXJhbmQ6VlFOIDEgInJlZ2lzdGVyX29wZXJhbmQiKQorCQkobWF0Y2hfb3BlcmFuZDpT SSAyICJhYXJjaDY0X3NpbWRfc2hpZnRfaW1tX29mZnNldF88dmVfbW9kZT4iKSkKKwkgICAgICAo bWF0Y2hfZHVwIDMpKQorCSAgICAobWF0Y2hfZHVwIDQpKSkpXQogICAiVEFSR0VUX1NJTUQiCiAg IHsKICAgICBvcGVyYW5kc1syXSA9IGFhcmNoNjRfc2ltZF9nZW5fY29uc3RfdmVjdG9yX2R1cCAo PE1PREU+bW9kZSwKIAkJCQkJCSBJTlRWQUwgKG9wZXJhbmRzWzJdKSk7Ci0gICAgZW1pdF9pbnNu IChnZW5fYWFyY2g2NF88c3VyPnE8cj5zaHI8dT5uX248bW9kZT5faW5zbiAob3BlcmFuZHNbMF0s Ci0JCQkJCQkJICBvcGVyYW5kc1sxXSwKLQkJCQkJCQkgIG9wZXJhbmRzWzJdKSk7Ci0gICAgRE9O RTsKKyAgICBvcGVyYW5kc1szXSA9IENPTlNUMF9SVFggKDxNT0RFPm1vZGUpOworICAgIG9wZXJh bmRzWzRdCisgICAgICA9IGFhcmNoNjRfc2ltZF9nZW5fY29uc3RfdmVjdG9yX2R1cCAoPE1PREU+ bW9kZSwKKwkJCUdFVF9NT0RFX01BU0sgKEdFVF9NT0RFX0lOTkVSICg8Vk5BUlJPV1E+bW9kZSkp KTsKKyAgfQorKQorCisoZGVmaW5lX2luc24gIiphYXJjaDY0X3NxcnNocnVuX248bW9kZT5faW5z bjx2Y3psZT48dmN6YmU+IgorICBbKHNldCAobWF0Y2hfb3BlcmFuZDo8Vk5BUlJPV1E+IDAgInJl Z2lzdGVyX29wZXJhbmQiICI9dyIpCisJKHRydW5jYXRlOjxWTkFSUk9XUT4KKwkgIChzbWluOjxW MlhXSURFPgorCSAgICAoc21heDo8VjJYV0lERT4KKwkgICAgICAoYXNoaWZ0cnQ6PFYyWFdJREU+ CisJCShwbHVzOjxWMlhXSURFPgorCQkgIChzaWduX2V4dGVuZDo8VjJYV0lERT4KKwkJICAgICht YXRjaF9vcGVyYW5kOlZRTiAxICJyZWdpc3Rlcl9vcGVyYW5kIiAidyIpKQorCQkgIChtYXRjaF9v cGVyYW5kOjxWMlhXSURFPiAzICJhYXJjaDY0X3NpbWRfcnNyYV9ybmRfaW1tX3ZlYyIpKQorCQko bWF0Y2hfb3BlcmFuZDpWUU4gMiAiYWFyY2g2NF9zaW1kX3NoaWZ0X2ltbV92ZWNfPHZuX21vZGU+ IikpCisJICAgICAgKG1hdGNoX29wZXJhbmQ6PFYyWFdJREU+IDQgImFhcmNoNjRfc2ltZF9pbW1f emVybyIpKQorCSAgICAobWF0Y2hfb3BlcmFuZDo8VjJYV0lERT4gNSAiYWFyY2g2NF9zaW1kX3Vt YXhfcXVhcnRlcl9tb2RlIikpKSldCisgICJUQVJHRVRfU0lNRAorICAgJiYgYWFyY2g2NF9jb25z dF92ZWNfcm5kX2NzdF9wIChvcGVyYW5kc1szXSwgb3BlcmFuZHNbMl0pIgorICAic3Fyc2hydW5c dCU8dm4yPjA8Vm1udHlwZT4sICU8dj4xPFZtdHlwZT4sICUyIgorICBbKHNldF9hdHRyICJ0eXBl IiAibmVvbl9zaGlmdF9pbW1fbmFycm93X3EiKV0KKykKKworKGRlZmluZV9leHBhbmQgImFhcmNo NjRfc3Fyc2hydW5fbjxtb2RlPiIKKyAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6PFZOQVJST1dRPiAw ICJyZWdpc3Rlcl9vcGVyYW5kIikKKwkodHJ1bmNhdGU6PFZOQVJST1dRPgorCSAgKHNtaW46PFYy WFdJREU+CisJICAgIChzbWF4OjxWMlhXSURFPgorCSAgICAgIChhc2hpZnRydDo8VjJYV0lERT4K KwkJKHBsdXM6PFYyWFdJREU+CisJCSAgKHNpZ25fZXh0ZW5kOjxWMlhXSURFPgorCQkgICAgKG1h dGNoX29wZXJhbmQ6VlFOIDEgInJlZ2lzdGVyX29wZXJhbmQiKSkKKwkJICAobWF0Y2hfZHVwIDMp KQorCQkobWF0Y2hfb3BlcmFuZDpTSSAyICJhYXJjaDY0X3NpbWRfc2hpZnRfaW1tX29mZnNldF88 dmVfbW9kZT4iKSkKKwkgICAgICAobWF0Y2hfZHVwIDQpKQorCSAgICAobWF0Y2hfZHVwIDUpKSkp XQorICAiVEFSR0VUX1NJTUQiCisgIHsKKyAgICBpbnQgcHJlYyA9IEdFVF9NT0RFX1VOSVRfUFJF Q0lTSU9OICg8VjJYV0lERT5tb2RlKTsKKyAgICB3aWRlX2ludCBybmRfd2kgPSB3aTo6c2V0X2Jp dF9pbl96ZXJvIChJTlRWQUwgKG9wZXJhbmRzWzJdKSAtIDEsIHByZWMpOworICAgIG9wZXJhbmRz WzNdID0gaW1tZWRfd2lkZV9pbnRfY29uc3QgKHJuZF93aSwgR0VUX01PREVfSU5ORVIgKDxWMlhX SURFPm1vZGUpKTsKKyAgICBvcGVyYW5kc1szXSA9IGdlbl9jb25zdF92ZWNfZHVwbGljYXRlICg8 VjJYV0lERT5tb2RlLCBvcGVyYW5kc1szXSk7CisgICAgb3BlcmFuZHNbMl0gPSBnZW5fY29uc3Rf dmVjX2R1cGxpY2F0ZSAoPE1PREU+bW9kZSwgb3BlcmFuZHNbMl0pOworICAgIG9wZXJhbmRzWzRd ID0gQ09OU1QwX1JUWCAoPFYyWFdJREU+bW9kZSk7CisgICAgb3BlcmFuZHNbNV0KKyAgICAgID0g Z2VuX2ludF9tb2RlIChHRVRfTU9ERV9NQVNLIChHRVRfTU9ERV9JTk5FUiAoPFZOQVJST1dRPm1v ZGUpKSwgREltb2RlKTsKKyAgICBvcGVyYW5kc1s1XSA9IGdlbl9jb25zdF92ZWNfZHVwbGljYXRl ICg8VjJYV0lERT5tb2RlLCBvcGVyYW5kc1s1XSk7CiAgIH0KICkKIApkaWZmIC0tZ2l0IGEvZ2Nj L2NvbmZpZy9hYXJjaDY0L2FybV9uZW9uLmggYi9nY2MvY29uZmlnL2FhcmNoNjQvYXJtX25lb24u aAppbmRleCAwYmI5ODM5NmI0Yy4uMmE0NmEzMWI2MTcgMTAwNjQ0Ci0tLSBhL2djYy9jb25maWcv YWFyY2g2NC9hcm1fbmVvbi5oCisrKyBiL2djYy9jb25maWcvYWFyY2g2NC9hcm1fbmVvbi5oCkBA IC00NzU1LDQyICs0NzU1LDQyIEBAIF9fZXh0ZW5zaW9uX18gZXh0ZXJuIF9faW5saW5lIGludDh4 OF90CiBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18sIF9fZ251X2lubGluZV9fLCBf X2FydGlmaWNpYWxfXykpCiB2c2hybl9uX3MxNiAoaW50MTZ4OF90IF9fYSwgY29uc3QgaW50IF9f YikKIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9hYXJjaDY0X3Nocm52OGhpIChfX2EsIF9fYik7Cisg IHJldHVybiBfX2J1aWx0aW5fYWFyY2g2NF9zaHJuX252OGhpIChfX2EsIF9fYik7CiB9CiAKIF9f ZXh0ZW5zaW9uX18gZXh0ZXJuIF9faW5saW5lIGludDE2eDRfdAogX19hdHRyaWJ1dGVfXyAoKF9f YWx3YXlzX2lubGluZV9fLCBfX2dudV9pbmxpbmVfXywgX19hcnRpZmljaWFsX18pKQogdnNocm5f bl9zMzIgKGludDMyeDRfdCBfX2EsIGNvbnN0IGludCBfX2IpCiB7Ci0gIHJldHVybiBfX2J1aWx0 aW5fYWFyY2g2NF9zaHJudjRzaSAoX19hLCBfX2IpOworICByZXR1cm4gX19idWlsdGluX2FhcmNo NjRfc2hybl9udjRzaSAoX19hLCBfX2IpOwogfQogCiBfX2V4dGVuc2lvbl9fIGV4dGVybiBfX2lu bGluZSBpbnQzMngyX3QKIF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXywgX19nbnVf aW5saW5lX18sIF9fYXJ0aWZpY2lhbF9fKSkKIHZzaHJuX25fczY0IChpbnQ2NHgyX3QgX19hLCBj b25zdCBpbnQgX19iKQogewotICByZXR1cm4gX19idWlsdGluX2FhcmNoNjRfc2hybnYyZGkgKF9f YSwgX19iKTsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hYXJjaDY0X3Nocm5fbnYyZGkgKF9fYSwgX19i KTsKIH0KIAogX19leHRlbnNpb25fXyBleHRlcm4gX19pbmxpbmUgdWludDh4OF90CiBfX2F0dHJp YnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18sIF9fZ251X2lubGluZV9fLCBfX2FydGlmaWNpYWxf XykpCiB2c2hybl9uX3UxNiAodWludDE2eDhfdCBfX2EsIGNvbnN0IGludCBfX2IpCiB7Ci0gIHJl dHVybiBfX2J1aWx0aW5fYWFyY2g2NF9zaHJudjhoaV91dXMgKF9fYSwgX19iKTsKKyAgcmV0dXJu IF9fYnVpbHRpbl9hYXJjaDY0X3Nocm5fbnY4aGlfdXVzIChfX2EsIF9fYik7CiB9CiAKIF9fZXh0 ZW5zaW9uX18gZXh0ZXJuIF9faW5saW5lIHVpbnQxNng0X3QKIF9fYXR0cmlidXRlX18gKChfX2Fs d2F5c19pbmxpbmVfXywgX19nbnVfaW5saW5lX18sIF9fYXJ0aWZpY2lhbF9fKSkKIHZzaHJuX25f dTMyICh1aW50MzJ4NF90IF9fYSwgY29uc3QgaW50IF9fYikKIHsKLSAgcmV0dXJuIF9fYnVpbHRp bl9hYXJjaDY0X3Nocm52NHNpX3V1cyAoX19hLCBfX2IpOworICByZXR1cm4gX19idWlsdGluX2Fh cmNoNjRfc2hybl9udjRzaV91dXMgKF9fYSwgX19iKTsKIH0KIAogX19leHRlbnNpb25fXyBleHRl cm4gX19pbmxpbmUgdWludDMyeDJfdAogX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9f LCBfX2dudV9pbmxpbmVfXywgX19hcnRpZmljaWFsX18pKQogdnNocm5fbl91NjQgKHVpbnQ2NHgy X3QgX19hLCBjb25zdCBpbnQgX19iKQogewotICByZXR1cm4gX19idWlsdGluX2FhcmNoNjRfc2hy bnYyZGlfdXVzIChfX2EsIF9fYik7CisgIHJldHVybiBfX2J1aWx0aW5fYWFyY2g2NF9zaHJuX252 MmRpX3V1cyAoX19hLCBfX2IpOwogfQogCiBfX2V4dGVuc2lvbl9fIGV4dGVybiBfX2lubGluZSBp bnQzMng0X3QKQEAgLTU1NzQsNDIgKzU1NzQsNDIgQEAgX19leHRlbnNpb25fXyBleHRlcm4gX19p bmxpbmUgaW50OHg4X3QKIF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXywgX19nbnVf aW5saW5lX18sIF9fYXJ0aWZpY2lhbF9fKSkKIHZyc2hybl9uX3MxNiAoaW50MTZ4OF90IF9fYSwg Y29uc3QgaW50IF9fYikKIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9hYXJjaDY0X3JzaHJudjhoaSAo X19hLCBfX2IpOworICByZXR1cm4gX19idWlsdGluX2FhcmNoNjRfcnNocm5fbnY4aGkgKF9fYSwg X19iKTsKIH0KIAogX19leHRlbnNpb25fXyBleHRlcm4gX19pbmxpbmUgaW50MTZ4NF90CiBfX2F0 dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18sIF9fZ251X2lubGluZV9fLCBfX2FydGlmaWNp YWxfXykpCiB2cnNocm5fbl9zMzIgKGludDMyeDRfdCBfX2EsIGNvbnN0IGludCBfX2IpCiB7Ci0g IHJldHVybiBfX2J1aWx0aW5fYWFyY2g2NF9yc2hybnY0c2kgKF9fYSwgX19iKTsKKyAgcmV0dXJu IF9fYnVpbHRpbl9hYXJjaDY0X3JzaHJuX252NHNpIChfX2EsIF9fYik7CiB9CiAKIF9fZXh0ZW5z aW9uX18gZXh0ZXJuIF9faW5saW5lIGludDMyeDJfdAogX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlz X2lubGluZV9fLCBfX2dudV9pbmxpbmVfXywgX19hcnRpZmljaWFsX18pKQogdnJzaHJuX25fczY0 IChpbnQ2NHgyX3QgX19hLCBjb25zdCBpbnQgX19iKQogewotICByZXR1cm4gX19idWlsdGluX2Fh cmNoNjRfcnNocm52MmRpIChfX2EsIF9fYik7CisgIHJldHVybiBfX2J1aWx0aW5fYWFyY2g2NF9y c2hybl9udjJkaSAoX19hLCBfX2IpOwogfQogCiBfX2V4dGVuc2lvbl9fIGV4dGVybiBfX2lubGlu ZSB1aW50OHg4X3QKIF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXywgX19nbnVfaW5s aW5lX18sIF9fYXJ0aWZpY2lhbF9fKSkKIHZyc2hybl9uX3UxNiAodWludDE2eDhfdCBfX2EsIGNv bnN0IGludCBfX2IpCiB7Ci0gIHJldHVybiBfX2J1aWx0aW5fYWFyY2g2NF9yc2hybnY4aGlfdXVz IChfX2EsIF9fYik7CisgIHJldHVybiBfX2J1aWx0aW5fYWFyY2g2NF9yc2hybl9udjhoaV91dXMg KF9fYSwgX19iKTsKIH0KIAogX19leHRlbnNpb25fXyBleHRlcm4gX19pbmxpbmUgdWludDE2eDRf dAogX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fLCBfX2dudV9pbmxpbmVfXywgX19h cnRpZmljaWFsX18pKQogdnJzaHJuX25fdTMyICh1aW50MzJ4NF90IF9fYSwgY29uc3QgaW50IF9f YikKIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9hYXJjaDY0X3JzaHJudjRzaV91dXMgKF9fYSwgX19i KTsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hYXJjaDY0X3JzaHJuX252NHNpX3V1cyAoX19hLCBfX2Ip OwogfQogCiBfX2V4dGVuc2lvbl9fIGV4dGVybiBfX2lubGluZSB1aW50MzJ4Ml90CiBfX2F0dHJp YnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18sIF9fZ251X2lubGluZV9fLCBfX2FydGlmaWNpYWxf XykpCiB2cnNocm5fbl91NjQgKHVpbnQ2NHgyX3QgX19hLCBjb25zdCBpbnQgX19iKQogewotICBy ZXR1cm4gX19idWlsdGluX2FhcmNoNjRfcnNocm52MmRpX3V1cyAoX19hLCBfX2IpOworICByZXR1 cm4gX19idWlsdGluX2FhcmNoNjRfcnNocm5fbnYyZGlfdXVzIChfX2EsIF9fYik7CiB9CiAKIF9f ZXh0ZW5zaW9uX18gZXh0ZXJuIF9faW5saW5lIHVpbnQzMngyX3QKZGlmZiAtLWdpdCBhL2djYy9j b25maWcvYWFyY2g2NC9pdGVyYXRvcnMubWQgYi9nY2MvY29uZmlnL2FhcmNoNjQvaXRlcmF0b3Jz Lm1kCmluZGV4IDU2Y2UxMjUxZTgwLi5lOGM2MmM4OGIxNCAxMDA2NDQKLS0tIGEvZ2NjL2NvbmZp Zy9hYXJjaDY0L2l0ZXJhdG9ycy5tZAorKysgYi9nY2MvY29uZmlnL2FhcmNoNjQvaXRlcmF0b3Jz Lm1kCkBAIC0yMjU0LDYgKzIyNTQsOCBAQCAoZGVmaW5lX2NvZGVfaXRlcmF0b3IgRkFDX0NPTVBB UklTT05TIFtsdCBsZSBnZSBndF0pCiA7OyBTaWduZWQgYW5kIHVuc2lnbmVkIHNhdHVyYXRpbmcg dHJ1bmNhdGlvbnMuCiAoZGVmaW5lX2NvZGVfaXRlcmF0b3IgU0FUX1RSVU5DIFtzc190cnVuY2F0 ZSB1c190cnVuY2F0ZV0pCiAKKyhkZWZpbmVfY29kZV9pdGVyYXRvciBBTExfVFJVTkMgW3NzX3Ry dW5jYXRlIHVzX3RydW5jYXRlIHRydW5jYXRlXSkKKwogOzsgU1ZFIGludGVnZXIgdW5hcnkgb3Bl cmF0aW9ucy4KIChkZWZpbmVfY29kZV9pdGVyYXRvciBTVkVfSU5UX1VOQVJZIFthYnMgbmVnIG5v dCBjbHJzYiBjbHogcG9wY291bnQKIAkJCQkgICAgIChzc19hYnMgIlRBUkdFVF9TVkUyIikKQEAg LTIzMzksNiArMjM0MSwxMCBAQCAoZGVmaW5lX2NvZGVfYXR0ciBhZGRzdWIgWyhzc19wbHVzICJh ZGQiKQogCiAoZGVmaW5lX2NvZGVfYXR0ciBTSElGVEVYVEVORCBbKGFzaGlmdHJ0ICJzaWduX2V4 dGVuZCIpIChsc2hpZnRydCAiemVyb19leHRlbmQiKV0pCiAKKyhkZWZpbmVfY29kZV9hdHRyIFRS VU5DRVhURU5EIFsoc3NfdHJ1bmNhdGUgInNpZ25fZXh0ZW5kIikKKwkJCSAgICAgICAodXNfdHJ1 bmNhdGUgInplcm9fZXh0ZW5kIikKKwkJCSAgICAgICAodHJ1bmNhdGUgInplcm9fZXh0ZW5kIild KQorCiA7OyBGb3IgY29tcGFyaXNvbiBvcGVyYXRvcnMgd2UgdXNlIHRoZSBGQ00qIGFuZCBDTSog aW5zdHJ1Y3Rpb25zLgogOzsgQXMgdGhlcmUgYXJlIG5vIENNTEUgb3IgQ01MVCBpbnN0cnVjdGlv bnMgd2hpY2ggYWN0IG9uIDMgdmVjdG9yCiA7OyBvcGVyYW5kcywgd2UgbXVzdCB1c2UgQ01HRSBv ciBDTUdUIGFuZCBzd2FwIHRoZSBvcmRlciBvZiB0aGUKQEAgLTI0MjgsNiArMjQzNCwxMiBAQCAo ZGVmaW5lX2NvZGVfYXR0ciBwYWlyZWRfZXh0ZW5kIFsoc3NfcGx1cyAic2lnbl9leHRlbmQiKQog CQkJCSAoc3NfbWludXMgInNpZ25fZXh0ZW5kIikKIAkJCQkgKHVzX21pbnVzICJ6ZXJvX2V4dGVu ZCIpXSkKIAorKGRlZmluZV9jb2RlX2F0dHIgVFJVTkNfU0hJRlQgWyhzc190cnVuY2F0ZSAiYXNo aWZ0cnQiKQorCQkJICAgICAgICh1c190cnVuY2F0ZSAibHNoaWZ0cnQiKSAodHJ1bmNhdGUgImxz aGlmdHJ0IildKQorCisoZGVmaW5lX2NvZGVfYXR0ciBzaHJuX29wIFsoc3NfdHJ1bmNhdGUgInNx IikKKwkJCSAgICh1c190cnVuY2F0ZSAidXEiKSAodHJ1bmNhdGUgIiIpXSkKKwogOzsgV2hldGhl ciBhIHNoaWZ0IGlzIGxlZnQgb3IgcmlnaHQuCiAoZGVmaW5lX2NvZGVfYXR0ciBsciBbKGFzaGlm dCAibCIpIChhc2hpZnRydCAiciIpIChsc2hpZnRydCAiciIpXSkKIApkaWZmIC0tZ2l0IGEvZ2Nj L2NvbmZpZy9hYXJjaDY0L3ByZWRpY2F0ZXMubWQgYi9nY2MvY29uZmlnL2FhcmNoNjQvcHJlZGlj YXRlcy5tZAppbmRleCA5MzkxYWJhNDBjNC4uYjMxYmE2ZWUxZDUgMTAwNjQ0Ci0tLSBhL2djYy9j b25maWcvYWFyY2g2NC9wcmVkaWNhdGVzLm1kCisrKyBiL2djYy9jb25maWcvYWFyY2g2NC9wcmVk aWNhdGVzLm1kCkBAIC01OTksMTAgKzU5OSwxNyBAQCAoZGVmaW5lX3ByZWRpY2F0ZSAiYWFyY2g2 NF9zaW1kX3VtYXhfaGFsZl9tb2RlIgogICAoYW5kIChtYXRjaF9jb2RlICJjb25zdF92ZWN0b3Ii KQogICAgICAgIChtYXRjaF90ZXN0ICJhYXJjaDY0X2NvbnN0X3ZlY19hbGxfc2FtZV9pbl9yYW5n ZV9wIChvcCwKIAkJCQkoSE9TVF9XSURFX0lOVF8xVQotCQkJCTw8IChHRVRfTU9ERV9VTklUX0JJ VFNJWkUgIChtb2RlKSAvIDIpKSAtIDEsCisJCQkJPDwgKEdFVF9NT0RFX1VOSVRfQklUU0laRSAo bW9kZSkgLyAyKSkgLSAxLAogCQkJCShIT1NUX1dJREVfSU5UXzFVCi0JCQkJPDwgKEdFVF9NT0RF X1VOSVRfQklUU0laRSAgKG1vZGUpIC8gMikpIC0gMSkiKSkpCisJCQkJPDwgKEdFVF9NT0RFX1VO SVRfQklUU0laRSAobW9kZSkgLyAyKSkgLSAxKSIpKSkKIAorKGRlZmluZV9wcmVkaWNhdGUgImFh cmNoNjRfc2ltZF91bWF4X3F1YXJ0ZXJfbW9kZSIKKyAgKGFuZCAobWF0Y2hfY29kZSAiY29uc3Rf dmVjdG9yIikKKyAgICAgICAobWF0Y2hfdGVzdCAiYWFyY2g2NF9jb25zdF92ZWNfYWxsX3NhbWVf aW5fcmFuZ2VfcCAob3AsCisJCQkJKEhPU1RfV0lERV9JTlRfMVUKKwkJCQk8PCAoR0VUX01PREVf VU5JVF9CSVRTSVpFIChtb2RlKSAvIDQpKSAtIDEsCisJCQkJKEhPU1RfV0lERV9JTlRfMVUKKwkJ CQk8PCAoR0VUX01PREVfVU5JVF9CSVRTSVpFIChtb2RlKSAvIDQpKSAtIDEpIikpKQogKGRlZmlu ZV9wcmVkaWNhdGUgImFhcmNoNjRfc2ltZF9zaGlmdF9pbW1fdmVjX3FpIgogICAoYW5kIChtYXRj aF9jb2RlICJjb25zdF92ZWN0b3IiKQogICAgICAgIChtYXRjaF90ZXN0ICJhYXJjaDY0X2NvbnN0 X3ZlY19hbGxfc2FtZV9pbl9yYW5nZV9wIChvcCwgMSwgOCkiKSkpCg== --_002_PAXPR08MB692697A556EC9FB8F569050E9358APAXPR08MB6926eurp_--