Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1nMrhR-0001bz-P6 for pgsql-hackers@arkaria.postgresql.org; Wed, 23 Feb 2022 13:28:58 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1nMrhQ-0007HX-1x for pgsql-hackers@arkaria.postgresql.org; Wed, 23 Feb 2022 13:28:56 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1nMrhP-0007HO-J9 for pgsql-hackers@lists.postgresql.org; Wed, 23 Feb 2022 13:28:55 +0000 Received: from mail-ej1-x635.google.com ([2a00:1450:4864:20::635]) by magus.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92) (envelope-from ) id 1nMrhM-00070y-DM for pgsql-hackers@lists.postgresql.org; Wed, 23 Feb 2022 13:28:55 +0000 Received: by mail-ej1-x635.google.com with SMTP id hw13so52138734ejc.9 for ; Wed, 23 Feb 2022 05:28:51 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=mIXeB1a1bEfH1rDbtw/RrGiwIZgobKYxgxy1VLc1SlU=; b=LsG2M6t7oeSQ9Z7EgKpcC+5uwGxCldZKjWTnc/AHLiie100dcdUIIYeV7AEh7+DEud Frjc5uKU1bXPHgZuzYQokCcc0VUqntgd9T538MB6cdeXFoTKUYRJiTsyLiDev4S5Yamm gRlEU8PmJoJ8cdprwo3vycNqn+jOn8N/n5Gkdm9rYITvjwkAKn5eMONwhQf8zkldYE4Y uuemH5Y5FNqYyzKLmg2MY2+zJ5XLTA4W3PJPfwTOWq21gTh+T4ANmFcgtff1MA25wawQ GXSqrwv+um+Uu+3Py1shGxxpDAmWGlWJ0o06FiROH9o4+9dxr1XWtK9X76aurGhQktQU ioJQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=mIXeB1a1bEfH1rDbtw/RrGiwIZgobKYxgxy1VLc1SlU=; b=5qHG0iBDYwFRdO+p7hoZrSW2vH4en5kVmfbkEBu2xwZhhU/8L+evNrrutI/QZvdHIR BdWyxV6xu7lcMQbTzN7AmP/ukkGHTt64Ci6qdCjjU6GGrKMH/rhaGL+OmGalBmmzIa9j Qc6O649XTK+Lv6GRwKFKxLrszDdhQAkwhGSMGKs0YwtvFZ99gNzrfAM7HSorFOI5EYwN lRsHHls7CgNB6HLXIiU6AL+Pc4EgvO256DUSzhN9TbjbCgWXdFDJajy8k/EC9+G0bJqc wPdC0Ca1zHVYo6i2ZwRL3YtxmcSDfw1SlJLURiTwIdNoFqSxw3p6kLuaCwJrKd2WrFbX QdvA== X-Gm-Message-State: AOAM532b4OLoOf5rZrH25TiYLFiFzbp/LsrXTbQ1dDbQCQ3r9j8KUGwI cSXL3eJ4eTdfRqkglJHU8mwfk0f3G+q2sQ6Qie0= X-Google-Smtp-Source: ABdhPJy9APO3POlKClsf5J7fFSyZLWK7/jTUJey2bIVE2Dn/gHdIBrgPP98mg6lH6BqNQivZAwzcCAdzZtW1Qx5qcdY= X-Received: by 2002:a17:907:7349:b0:6d0:91b2:c74a with SMTP id dq9-20020a170907734900b006d091b2c74amr20367887ejc.679.1645622930841; Wed, 23 Feb 2022 05:28:50 -0800 (PST) MIME-Version: 1.0 References: <20220217110515.zssjnez4lq2lmrdq@jrouhaud> <20220217172724.uhs2v3mgio7y6ga5@jrouhaud> <20220218074351.wgfosjt5lql2vjbr@jrouhaud> <20220219053215.r4wqatln5awklecf@jrouhaud> In-Reply-To: From: Nitin Jadhav Date: Wed, 23 Feb 2022 18:58:14 +0530 Message-ID: Subject: Re: Report checkpoint progress with pg_stat_progress_checkpoint (was: Report checkpoint progress in server logs) To: Julien Rouhaud Cc: Matthias van de Meent , Bharath Rupireddy , Bruce Momjian , Tom Lane , Magnus Hagander , PostgreSQL Hackers Content-Type: multipart/mixed; boundary="0000000000003a3f3205d8af7285" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --0000000000003a3f3205d8af7285 Content-Type: text/plain; charset="UTF-8" > I will make use of pgstat_progress_update_multi_param() in the next > patch to replace multiple calls to checkpoint_progress_update_param(). Fixed. --- > > The other progress tables use [type]_total as column names for counter > > targets (e.g. backup_total for backup_streamed, heap_blks_total for > > heap_blks_scanned, etc.). I think that `buffers_total` and > > `files_total` would be better column names. > > I agree and I will update this in the next patch. Fixed. --- > How about this "The checkpoint is started because max_wal_size is reached". > > "The checkpoint is started because checkpoint_timeout expired". > > "The checkpoint is started because some operation forced a checkpoint". I have used the above description. Kindly let me know if any changes are required. --- > > > + checkpointing CommitTs pages > > > > CommitTs -> Commit time stamp > > I will handle this in the next patch. Fixed. --- > There are more scenarios where you can have a baackend requesting a checkpoint > and waiting for its completion, and there may be more than one backend > concerned, so I don't think that storing only one / the first backend pid is > ok. Thanks for this information. I am not considering backend_pid. --- > I think all the information should be exposed. Only knowing why the current > checkpoint has been triggered without any further information seems a bit > useless. Think for instance for cases like [1]. I have supported all possible checkpoint kinds. Added pg_stat_get_progress_checkpoint_kind() to convert the flags (int) to a string representing a combination of flags and also checking for the flag update in ImmediateCheckpointRequested() which checks whether CHECKPOINT_IMMEDIATE flag is set or not. I did not find any other cases where the flags get changed (which changes the current checkpoint behaviour) during the checkpoint. Kindly let me know if I am missing something. --- > > I feel 'processes_wiating' aligns more with the naming conventions of > > the fields of the existing progres views. > > There's at least pg_stat_progress_vacuum.num_dead_tuples. Anyway I don't have > a strong opinion on it, just make sure to correct the typo. More analysis is required to support this. I am planning to take care in the next patch. --- > If pg_is_in_recovery() is true, then it's a restartpoint, otherwise it's a > restartpoint if the checkpoint's timeline is different from the current > timeline? Fixed. Sharing the v2 patch. Kindly have a look and share your comments. Thanks & Regards, Nitin Jadhav On Tue, Feb 22, 2022 at 12:08 PM Nitin Jadhav wrote: > > > > Thank you for sharing the information. 'triggering backend PID' (int) > > > - can be stored without any problem. 'checkpoint or restartpoint?' > > > (boolean) - can be stored as a integer value like > > > PROGRESS_CHECKPOINT_TYPE_CHECKPOINT(0) and > > > PROGRESS_CHECKPOINT_TYPE_RESTARTPOINT(1). 'elapsed time' (store as > > > start time in stat_progress, timestamp fits in 64 bits) - As > > > Timestamptz is of type int64 internally, so we can store the timestamp > > > value in the progres parameter and then expose a function like > > > 'pg_stat_get_progress_checkpoint_elapsed' which takes int64 (not > > > Timestamptz) as argument and then returns string representing the > > > elapsed time. > > > > No need to use a string there; I think exposing the checkpoint start > > time is good enough. The conversion of int64 to timestamp[tz] can be > > done in SQL (although I'm not sure that exposing the internal bitwise > > representation of Interval should be exposed to that extent) [0]. > > Users can then extract the duration interval using now() - start_time, > > which also allows the user to use their own preferred formatting. > > The reason for showing the elapsed time rather than exposing the > timestamp directly is in case of checkpoint during shutdown and > end-of-recovery, I am planning to log a message in server logs using > 'log_startup_progress_interval' infrastructure which displays elapsed > time. So just to match both of the behaviour I am displaying elapsed > time here. I feel that elapsed time gives a quicker feel of the > progress. Kindly let me know if you still feel just exposing the > timestamp is better than showing the elapsed time. > > > > 'checkpoint start location' (lsn = uint64) - I feel we > > > cannot use progress parameters for this case. As assigning uint64 to > > > int64 type would be an issue for larger values and can lead to hidden > > > bugs. > > > > Not necessarily - we can (without much trouble) do a bitwise cast from > > uint64 to int64, and then (in SQL) cast it back to a pg_lsn [1]. Not > > very elegant, but it works quite well. > > > > [1] SELECT '0/0'::pg_lsn + ((CASE WHEN stat.my_int64 < 0 THEN > > pow(2::numeric, 64::numeric)::numeric ELSE 0::numeric END) + > > stat.my_int64::numeric) FROM (SELECT -2::bigint /* 0xFFFFFFFF/FFFFFFFE > > */ AS my_bigint_lsn) AS stat(my_int64); > > Thanks for sharing. It works. I will include this in the next patch. > On Sat, Feb 19, 2022 at 11:02 AM Julien Rouhaud wrote: > > > > Hi, > > > > On Fri, Feb 18, 2022 at 08:07:05PM +0530, Nitin Jadhav wrote: > > > > > > The backend_pid contains a valid value only during > > > the CHECKPOINT command issued by the backend explicitly, otherwise the > > > value will be 0. We may have to add an additional field to > > > 'CheckpointerShmemStruct' to hold the backend pid. The backend > > > requesting the checkpoint will update its pid to this structure. > > > Kindly let me know if you still feel the backend_pid field is not > > > necessary. > > > > There are more scenarios where you can have a baackend requesting a checkpoint > > and waiting for its completion, and there may be more than one backend > > concerned, so I don't think that storing only one / the first backend pid is > > ok. > > > > > > And also while looking at the patch I see there's the same problem that I > > > > mentioned in the previous thread, which is that the effective flags can be > > > > updated once the checkpoint started, and as-is the view won't reflect that. It > > > > also means that you can't simply display one of wal, time or force but a > > > > possible combination of the flags (including the one not handled in v1). > > > > > > If I understand the above comment properly, it has 2 points. First is > > > to display the combination of flags rather than just displaying wal, > > > time or force - The idea behind this is to just let the user know the > > > reason for checkpointing. That is, the checkpoint is started because > > > max_wal_size is reached or checkpoint_timeout expired or explicitly > > > issued CHECKPOINT command. The other flags like CHECKPOINT_IMMEDIATE, > > > CHECKPOINT_WAIT or CHECKPOINT_FLUSH_ALL indicate how the checkpoint > > > has to be performed. Hence I have not included those in the view. If > > > it is really required, I would like to modify the code to include > > > other flags and display the combination. > > > > I think all the information should be exposed. Only knowing why the current > > checkpoint has been triggered without any further information seems a bit > > useless. Think for instance for cases like [1]. > > > > > Second point is to reflect > > > the updated flags in the view. AFAIK, there is a possibility that the > > > flags get updated during the on-going checkpoint but the reason for > > > checkpoint (wal, time or force) will remain same for the current > > > checkpoint. There might be a change in how checkpoint has to be > > > performed if CHECKPOINT_IMMEDIATE flag is set. If we go with > > > displaying the combination of flags in the view, then probably we may > > > have to reflect this in the view. > > > > You can only "upgrade" a checkpoint, but not "downgrade" it. So if for > > instance you find both CHECKPOINT_CAUSE_TIME and CHECKPOINT_FORCE (which is > > possible) you can easily know which one was the one that triggered the > > checkpoint and which one was added later. > > > > > > > Probably a new field named 'processes_wiating' or 'events_waiting' can be > > > > > added for this purpose. > > > > > > > > Maybe num_process_waiting? > > > > > > I feel 'processes_wiating' aligns more with the naming conventions of > > > the fields of the existing progres views. > > > > There's at least pg_stat_progress_vacuum.num_dead_tuples. Anyway I don't have > > a strong opinion on it, just make sure to correct the typo. > > > > > > > Probably writing of buffers or syncing files may complete before > > > > > pg_is_in_recovery() returns false. But there are some cleanup > > > > > operations happen as part of the checkpoint. During this scenario, we > > > > > may get false value for pg_is_in_recovery(). Please refer following > > > > > piece of code which is present in CreateRestartpoint(). > > > > > > > > > > if (!RecoveryInProgress()) > > > > > replayTLI = XLogCtl->InsertTimeLineID; > > > > > > > > Then maybe we could store the timeline rather then then kind of checkpoint? > > > > You should still be able to compute the information while giving a bit more > > > > information for the same memory usage. > > > > > > Can you please describe more about how checkpoint/restartpoint can be > > > confirmed using the timeline id. > > > > If pg_is_in_recovery() is true, then it's a restartpoint, otherwise it's a > > restartpoint if the checkpoint's timeline is different from the current > > timeline? > > > > [1] https://www.postgresql.org/message-id/1486805889.24568.96.camel%40credativ.de --0000000000003a3f3205d8af7285 Content-Type: application/octet-stream; name="v2-0001-pg_stat_progress_checkpoint-view.patch" Content-Disposition: attachment; filename="v2-0001-pg_stat_progress_checkpoint-view.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_kzzldcnf0 RnJvbSA5ZTU1YWQ1ZTFlMTMxOWNjMzIyMzdlMmJhNzlhMDk3NTI3ZDA3ZmVkIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBOaXRpbiBKYWRoYXYgPG5pdGluamFkaGF2QG1pY3Jvc29mdC5j b20+CkRhdGU6IFdlZCwgMjMgRmViIDIwMjIgMTM6MTc6MTYgKzAwMDAKU3ViamVjdDogW1BBVENI XSBwZ19zdGF0X3Byb2dyZXNzLWNoZWNrcG9pbnQgdmlldwoKLS0tCiBkb2Mvc3JjL3NnbWwvbW9u aXRvcmluZy5zZ21sICAgICAgICAgIHwgMzU3ICsrKysrKysrKysrKysrKysrKysrKysrKysrCiBz cmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94bG9nLmMgICAgIHwgMTMyICsrKysrKysrKysKIHNy Yy9iYWNrZW5kL2NhdGFsb2cvc3lzdGVtX3ZpZXdzLnNxbCAgfCAgMzYgKysrCiBzcmMvYmFja2Vu ZC9wb3N0bWFzdGVyL2NoZWNrcG9pbnRlci5jIHwgIDE0ICstCiBzcmMvYmFja2VuZC9zdG9yYWdl L2J1ZmZlci9idWZtZ3IuYyAgIHwgICA3ICsKIHNyYy9iYWNrZW5kL3N0b3JhZ2Uvc3luYy9zeW5j LmMgICAgICAgfCAgIDYgKwogc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3Bnc3RhdGZ1bmNzLmMgICB8 ICA1OSArKysrKwogc3JjL2luY2x1ZGUvYWNjZXNzL3hsb2cuaCAgICAgICAgICAgICB8ICAgNCAr CiBzcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0ICAgICAgIHwgICA5ICsKIHNyYy9pbmNs dWRlL2NvbW1hbmRzL3Byb2dyZXNzLmggICAgICAgfCAgMjggKysKIHNyYy9pbmNsdWRlL3V0aWxz L2JhY2tlbmRfcHJvZ3Jlc3MuaCAgfCAgIDMgKy0KIHNyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQv cnVsZXMub3V0ICAgfCAgMzMgKysrCiAxMiBmaWxlcyBjaGFuZ2VkLCA2ODQgaW5zZXJ0aW9ucygr KSwgNCBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwvbW9uaXRvcmluZy5z Z21sIGIvZG9jL3NyYy9zZ21sL21vbml0b3Jpbmcuc2dtbAppbmRleCBiZjc2MjVkOTg4Li4xZTcx MTJlYjc4IDEwMDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwvbW9uaXRvcmluZy5zZ21sCisrKyBiL2Rv Yy9zcmMvc2dtbC9tb25pdG9yaW5nLnNnbWwKQEAgLTQwMSw2ICs0MDEsMTMgQEAgcG9zdGdyZXMg ICAyNzA5MyAgMC4wICAwLjAgIDMwMDk2ICAyNzUyID8gICAgICAgIFNzICAgMTE6MzQgICAwOjAw IHBvc3RncmVzOiBzZXIKICAgICAgICBTZWUgPHhyZWYgbGlua2VuZD0nY29weS1wcm9ncmVzcy1y ZXBvcnRpbmcnLz4uCiAgICAgICA8L2VudHJ5PgogICAgICA8L3Jvdz4KKworICAgICA8cm93Pgor ICAgICAgPGVudHJ5PjxzdHJ1Y3RuYW1lPnBnX3N0YXRfcHJvZ3Jlc3NfY2hlY2twb2ludDwvc3Ry dWN0bmFtZT48aW5kZXh0ZXJtPjxwcmltYXJ5PnBnX3N0YXRfcHJvZ3Jlc3NfY2hlY2twb2ludDwv cHJpbWFyeT48L2luZGV4dGVybT48L2VudHJ5PgorICAgICAgPGVudHJ5Pk9uZSByb3cgb25seSwg c2hvd2luZyB0aGUgcHJvZ3Jlc3Mgb2YgdGhlIDxjb21tYW5kPkNIRUNLUE9JTlQ8L2NvbW1hbmQ+ LgorICAgICAgIFNlZSA8eHJlZiBsaW5rZW5kPSdjaGVja3BvaW50LXByb2dyZXNzLXJlcG9ydGlu ZycvPi4KKyAgICAgIDwvZW50cnk+CisgICAgIDwvcm93PgogICAgIDwvdGJvZHk+CiAgICA8L3Rn cm91cD4KICAgPC90YWJsZT4KQEAgLTY4OTUsNiArNjkwMiwzNTYgQEAgU0VMRUNUIHBnX3N0YXRf Z2V0X2JhY2tlbmRfcGlkKHMuYmFja2VuZGlkKSBBUyBwaWQsCiAgIDwvdGFibGU+CiAgPC9zZWN0 Mj4KIAorIDxzZWN0MiBpZD0iY2hlY2twb2ludC1wcm9ncmVzcy1yZXBvcnRpbmciPgorICA8dGl0 bGU+Q0hFQ0tQT0lOVCBQcm9ncmVzcyBSZXBvcnRpbmc8L3RpdGxlPgorCisgIDxpbmRleHRlcm0+ CisgICA8cHJpbWFyeT5wZ19zdGF0X3Byb2dyZXNzX2NoZWNrcG9pbnQ8L3ByaW1hcnk+CisgIDwv aW5kZXh0ZXJtPgorCisgIDxwYXJhPgorICAgV2hlbmV2ZXIgdGhlIGNoZWNrcG9pbnQgb3BlcmF0 aW9uIGlzIHJ1bm5pbmcsIHRoZQorICAgPHN0cnVjdG5hbWU+cGdfc3RhdF9wcm9ncmVzc19jaGVj a3BvaW50PC9zdHJ1Y3RuYW1lPiB2aWV3IHdpbGwgY29udGFpbiBhCisgICBzaW5nbGUgcm93IGlu ZGljYXRpbmcgdGhlIHByb2dyZXNzIG9mIHRoZSBjaGVja3BvaW50LiBUaGUgdGFibGVzIGJlbG93 CisgICBkZXNjcmliZSB0aGUgaW5mb3JtYXRpb24gdGhhdCB3aWxsIGJlIHJlcG9ydGVkIGFuZCBw cm92aWRlIGluZm9ybWF0aW9uIGFib3V0CisgICBob3cgdG8gaW50ZXJwcmV0IGl0LgorICA8L3Bh cmE+CisKKyAgPHRhYmxlIGlkPSJwZy1zdGF0LXByb2dyZXNzLWNoZWNrcG9pbnQtdmlldyIgeHJl ZmxhYmVsPSJwZ19zdGF0X3Byb2dyZXNzX2NoZWNrcG9pbnQiPgorICAgPHRpdGxlPjxzdHJ1Y3Ru YW1lPnBnX3N0YXRfcHJvZ3Jlc3NfY2hlY2twb2ludDwvc3RydWN0bmFtZT4gVmlldzwvdGl0bGU+ CisgICA8dGdyb3VwIGNvbHM9IjEiPgorICAgIDx0aGVhZD4KKyAgICAgPHJvdz4KKyAgICAgIDxl bnRyeSByb2xlPSJjYXRhbG9nX3RhYmxlX2VudHJ5Ij48cGFyYSByb2xlPSJjb2x1bW5fZGVmaW5p dGlvbiI+CisgICAgICAgQ29sdW1uIFR5cGUKKyAgICAgIDwvcGFyYT4KKyAgICAgIDxwYXJhPgor ICAgICAgIERlc2NyaXB0aW9uCisgICAgICA8L3BhcmE+PC9lbnRyeT4KKyAgICAgPC9yb3c+Cisg ICAgPC90aGVhZD4KKworICAgIDx0Ym9keT4KKyAgICAgPHJvdz4KKyAgICAgIDxlbnRyeSByb2xl PSJjYXRhbG9nX3RhYmxlX2VudHJ5Ij48cGFyYSByb2xlPSJjb2x1bW5fZGVmaW5pdGlvbiI+Cisg ICAgICAgPHN0cnVjdGZpZWxkPnBpZDwvc3RydWN0ZmllbGQ+IDx0eXBlPmludGVnZXI8L3R5cGU+ CisgICAgICA8L3BhcmE+CisgICAgICA8cGFyYT4KKyAgICAgICBQcm9jZXNzIElEIG9mIGEgQ0hF Q0tQT0lOVEVSIHByb2Nlc3MuCisgICAgICA8L3BhcmE+PC9lbnRyeT4KKyAgICAgPC9yb3c+CisK KyAgICAgPHJvdz4KKyAgICAgIDxlbnRyeSByb2xlPSJjYXRhbG9nX3RhYmxlX2VudHJ5Ij48cGFy YSByb2xlPSJjb2x1bW5fZGVmaW5pdGlvbiI+CisgICAgICAgPHN0cnVjdGZpZWxkPnR5cGU8L3N0 cnVjdGZpZWxkPiA8dHlwZT50ZXh0PC90eXBlPgorICAgICAgPC9wYXJhPgorICAgICAgPHBhcmE+ CisgICAgICAgVHlwZSBvZiBjaGVja3BvaW50LiBTZWUgPHhyZWYgbGlua2VuZD0iY2hlY2twb2lu dC10eXBlcyIvPi4KKyAgICAgIDwvcGFyYT48L2VudHJ5PgorICAgICA8L3Jvdz4KKworICAgICA8 cm93PgorICAgICAgPGVudHJ5IHJvbGU9ImNhdGFsb2dfdGFibGVfZW50cnkiPjxwYXJhIHJvbGU9 ImNvbHVtbl9kZWZpbml0aW9uIj4KKyAgICAgICA8c3RydWN0ZmllbGQ+a2luZDwvc3RydWN0Zmll bGQ+IDx0eXBlPnRleHQ8L3R5cGU+CisgICAgICA8L3BhcmE+CisgICAgICA8cGFyYT4KKyAgICAg ICBLaW5kIG9mIGNoZWNrcG9pbnQuIFNlZSA8eHJlZiBsaW5rZW5kPSJjaGVja3BvaW50LWtpbmRz Ii8+LgorICAgICAgPC9wYXJhPjwvZW50cnk+CisgICAgIDwvcm93PgorCisgICAgIDxyb3c+Cisg ICAgICA8ZW50cnkgcm9sZT0iY2F0YWxvZ190YWJsZV9lbnRyeSI+PHBhcmEgcm9sZT0iY29sdW1u X2RlZmluaXRpb24iPgorICAgICAgIDxzdHJ1Y3RmaWVsZD5zdGFydF9sc248L3N0cnVjdGZpZWxk PiA8dHlwZT50ZXh0PC90eXBlPgorICAgICAgPC9wYXJhPgorICAgICAgPHBhcmE+CisgICAgICAg VGhlIGNoZWNrcG9pbnQgc3RhcnQgbG9jYXRpb24uCisgICAgICA8L3BhcmE+PC9lbnRyeT4KKyAg ICAgPC9yb3c+CisKKyAgICAgPHJvdz4KKyAgICAgIDxlbnRyeSByb2xlPSJjYXRhbG9nX3RhYmxl X2VudHJ5Ij48cGFyYSByb2xlPSJjb2x1bW5fZGVmaW5pdGlvbiI+CisgICAgICAgPHN0cnVjdGZp ZWxkPmVsYXBzZWRfdGltZTwvc3RydWN0ZmllbGQ+IDx0eXBlPnRleHQ8L3R5cGU+CisgICAgICA8 L3BhcmE+CisgICAgICA8cGFyYT4KKyAgICAgICBFbGFwc2VkIHRpbWUgb2YgdGhlIGNoZWNrcG9p bnQuCisgICAgICA8L3BhcmE+PC9lbnRyeT4KKyAgICAgPC9yb3c+CisKKyAgICAgPHJvdz4KKyAg ICAgIDxlbnRyeSByb2xlPSJjYXRhbG9nX3RhYmxlX2VudHJ5Ij48cGFyYSByb2xlPSJjb2x1bW5f ZGVmaW5pdGlvbiI+CisgICAgICAgPHN0cnVjdGZpZWxkPnBoYXNlPC9zdHJ1Y3RmaWVsZD4gPHR5 cGU+dGV4dDwvdHlwZT4KKyAgICAgIDwvcGFyYT4KKyAgICAgIDxwYXJhPgorICAgICAgIEN1cnJl bnQgcHJvY2Vzc2luZyBwaGFzZS4gU2VlIDx4cmVmIGxpbmtlbmQ9ImNoZWNrcG9pbnQtcGhhc2Vz Ii8+LgorICAgICAgPC9wYXJhPjwvZW50cnk+CisgICAgIDwvcm93PgorCisgICAgIDxyb3c+Cisg ICAgICA8ZW50cnkgcm9sZT0iY2F0YWxvZ190YWJsZV9lbnRyeSI+PHBhcmEgcm9sZT0iY29sdW1u X2RlZmluaXRpb24iPgorICAgICAgIDxzdHJ1Y3RmaWVsZD5idWZmZXJzX3RvdGFsPC9zdHJ1Y3Rm aWVsZD4gPHR5cGU+YmlnaW50PC90eXBlPgorICAgICAgPC9wYXJhPgorICAgICAgPHBhcmE+Cisg ICAgICAgVG90YWwgbnVtYmVyIG9mIGJ1ZmZlcnMgdG8gYmUgd3JpdHRlbi4gVGhpcyBpcyBlc3Rp bWF0ZWQgYW5kIHJlcG9ydGVkCisgICAgICAgYXMgb2YgdGhlIGJlZ2lubmluZyBvZiBidWZmZXIg d3JpdGUgb3BlcmF0aW9uLgorICAgICAgPC9wYXJhPjwvZW50cnk+CisgICAgIDwvcm93PgorCisg ICAgIDxyb3c+CisgICAgICA8ZW50cnkgcm9sZT0iY2F0YWxvZ190YWJsZV9lbnRyeSI+PHBhcmEg cm9sZT0iY29sdW1uX2RlZmluaXRpb24iPgorICAgICAgIDxzdHJ1Y3RmaWVsZD5idWZmZXJzX3By b2Nlc3NlZDwvc3RydWN0ZmllbGQ+IDx0eXBlPmJpZ2ludDwvdHlwZT4KKyAgICAgIDwvcGFyYT4K KyAgICAgIDxwYXJhPgorICAgICAgIE51bWJlciBvZiBidWZmZXJzIHByb2Nlc3NlZC4gVGhpcyBj b3VudGVyIGluY3JlYXNlcyB3aGVuIHRoZSB0YXJnZXRlZAorICAgICAgIGJ1ZmZlciBpcyBwcm9j ZXNzZWQuIFRoaXMgbnVtYmVyIHdpbGwgZXZlbnR1YWxseSBiZWNvbWUgZXF1YWwgdG8KKyAgICAg ICA8bGl0ZXJhbD4gdG90YWxfYnVmZmVyX3dyaXRlcyA8L2xpdGVyYWw+IHdoZW4gdGhlIGNoZWNr cG9pbnQgaXMKKyAgICAgICBjb21wbGV0ZS4KKyAgICAgIDwvcGFyYT48L2VudHJ5PgorICAgICA8 L3Jvdz4KKworICAgICA8cm93PgorICAgICAgPGVudHJ5IHJvbGU9ImNhdGFsb2dfdGFibGVfZW50 cnkiPjxwYXJhIHJvbGU9ImNvbHVtbl9kZWZpbml0aW9uIj4KKyAgICAgICA8c3RydWN0ZmllbGQ+ YnVmZmVyc193cml0dGVuPC9zdHJ1Y3RmaWVsZD4gPHR5cGU+YmlnaW50PC90eXBlPgorICAgICAg PC9wYXJhPgorICAgICAgPHBhcmE+CisgICAgICAgTnVtYmVyIG9mIGJ1ZmZlcnMgd3JpdHRlbi4g VGhpcyBjb3VudGVyIG9ubHkgYWR2YW5jZXMgd2hlbiB0aGUgdGFyZ2V0ZWQKKyAgICAgICBidWZm ZXJzIGlzIHdyaXR0ZW4uIE5vdGUgdGhhdCBzb21lIG9mIHRoZSBidWZmZXJzIGFyZSBwcm9jZXNz ZWQgYnV0IG1heQorICAgICAgIG5vdCByZXF1aXJlZCB0byBiZSB3cml0dGVuLiBTbyB0aGlzIGNv dW50IHdpbGwgYWx3YXlzIGJlICBsZXNzIHRoYW4gb3IKKyAgICAgICBlcXVhbCB0byAgPGxpdGVy YWw+dG90YWxfYnVmZmVyX3dyaXRlczwvbGl0ZXJhbD4uCisgICAgICA8L3BhcmE+PC9lbnRyeT4K KyAgICAgPC9yb3c+CisKKyAgICAgPHJvdz4KKyAgICAgIDxlbnRyeSByb2xlPSJjYXRhbG9nX3Rh YmxlX2VudHJ5Ij48cGFyYSByb2xlPSJjb2x1bW5fZGVmaW5pdGlvbiI+CisgICAgICAgPHN0cnVj dGZpZWxkPmZpbGVzX3RvdGFsPC9zdHJ1Y3RmaWVsZD4gPHR5cGU+YmlnaW50PC90eXBlPgorICAg ICAgPC9wYXJhPgorICAgICAgPHBhcmE+CisgICAgICAgVG90YWwgbnVtYmVyIG9mIGZpbGVzIHRv IGJlIHN5bmNlZC4gVGhpcyBpcyBlc3RpbWF0ZWQgYW5kIHJlcG9ydGVkIGFzIG9mCisgICAgICAg dGhlIGJlZ2lubmluZyBvZiBzeW5jIG9wZXJhdGlvbi4KKyAgICAgIDwvcGFyYT48L2VudHJ5Pgor ICAgICA8L3Jvdz4KKworICAgICA8cm93PgorICAgICAgPGVudHJ5IHJvbGU9ImNhdGFsb2dfdGFi bGVfZW50cnkiPjxwYXJhIHJvbGU9ImNvbHVtbl9kZWZpbml0aW9uIj4KKyAgICAgICA8c3RydWN0 ZmllbGQ+ZmlsZXNfc3luY2VkPC9zdHJ1Y3RmaWVsZD4gPHR5cGU+YmlnaW50PC90eXBlPgorICAg ICAgPC9wYXJhPgorICAgICAgPHBhcmE+CisgICAgICAgTnVtYmVyIG9mIGZpbGVzIHN5bmNlZC4g VGhpcyBjb3VudGVyIGFkdmFuY2VzIHdoZW4gdGhlIHRhcmdldGVkIGZpbGUgaXMKKyAgICAgICBz eW5jZWQuIFRoaXMgbnVtYmVyIHdpbGwgZXZlbnR1YWxseSBiZWNvbWUgZXF1YWwgdG8KKyAgICAg ICA8bGl0ZXJhbD50b3RhbF9maWxlX3N5bmNzPC9saXRlcmFsPiAgd2hlbiB0aGUgY2hlY2twb2lu dCBpcyBjb21wbGV0ZS4KKyAgICAgIDwvcGFyYT48L2VudHJ5PgorICAgICA8L3Jvdz4KKyAgICA8 L3Rib2R5PgorICAgPC90Z3JvdXA+CisgIDwvdGFibGU+CisKKyAgPHRhYmxlIGlkPSJjaGVja3Bv aW50LXR5cGVzIj4KKyAgIDx0aXRsZT5DSEVDS1BPSU5UIHR5cGVzPC90aXRsZT4KKyAgIDx0Z3Jv dXAgY29scz0iMiI+CisgICAgPGNvbHNwZWMgY29sbmFtZT0iY29sMSIgY29sd2lkdGg9IjEqIi8+ CisgICAgPGNvbHNwZWMgY29sbmFtZT0iY29sMiIgY29sd2lkdGg9IjIqIi8+CisgICAgPHRoZWFk PgorICAgICA8cm93PgorICAgICAgPGVudHJ5PlR5cGVzPC9lbnRyeT4KKyAgICAgIDxlbnRyeT5E ZXNjcmlwdGlvbjwvZW50cnk+CisgICAgIDwvcm93PgorICAgIDwvdGhlYWQ+CisgICAgPHRib2R5 PgorICAgICA8cm93PgorICAgICAgPGVudHJ5PjxsaXRlcmFsPmNoZWNrcG9pbnQ8L2xpdGVyYWw+ PC9lbnRyeT4KKyAgICAgIDxlbnRyeT4KKyAgICAgICBUaGUgY3VycmVudCBvcGVyYXRpb24gaXMg Y2hlY2twb2ludC4KKyAgICAgIDwvZW50cnk+CisgICAgIDwvcm93PgorICAgICA8cm93PgorICAg ICAgPGVudHJ5PjxsaXRlcmFsPnJlc3RhcnRwb2ludDwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAg PGVudHJ5PgorICAgICAgIFRoZSBjdXJyZW50IG9wZXJhdGlvbiBpcyByZXN0YXJ0cG9pbnQuCisg ICAgICA8L2VudHJ5PgorICAgICA8L3Jvdz4KKyAgICA8L3Rib2R5PgorICAgPC90Z3JvdXA+Cisg IDwvdGFibGU+CisKKyAgPHRhYmxlIGlkPSJjaGVja3BvaW50LWtpbmRzIj4KKyAgIDx0aXRsZT5D SEVDS1BPSU5UIGtpbmRzPC90aXRsZT4KKyAgIDx0Z3JvdXAgY29scz0iMiI+CisgICAgPGNvbHNw ZWMgY29sbmFtZT0iY29sMSIgY29sd2lkdGg9IjEqIi8+CisgICAgPGNvbHNwZWMgY29sbmFtZT0i Y29sMiIgY29sd2lkdGg9IjIqIi8+CisgICAgPHRoZWFkPgorICAgICA8cm93PgorICAgICAgPGVu dHJ5PktpbmRzPC9lbnRyeT4KKyAgICAgIDxlbnRyeT5EZXNjcmlwdGlvbjwvZW50cnk+CisgICAg IDwvcm93PgorICAgIDwvdGhlYWQ+CisgICAgPHRib2R5PgorICAgICA8cm93PgorICAgICAgPGVu dHJ5PjxsaXRlcmFsPnNodXRkb3duPC9saXRlcmFsPjwvZW50cnk+CisgICAgICA8ZW50cnk+Cisg ICAgICAgVGhlIGNoZWNrcG9pbnQgaXMgZm9yIHNodXRkb3duLgorICAgICAgPC9lbnRyeT4KKyAg ICAgPC9yb3c+CisgICAgIDxyb3c+CisgICAgICA8ZW50cnk+PGxpdGVyYWw+ZW5kLW9mLXJlY292 ZXJ5PC9saXRlcmFsPjwvZW50cnk+CisgICAgICA8ZW50cnk+CisgICAgICAgVGhlIGNoZWNrcG9p bnQgaXMgZm9yIGVuZC1vZi1yZWNvdmVyeS4KKyAgICAgIDwvZW50cnk+CisgICAgIDwvcm93Pgor ICAgICA8cm93PgorICAgICAgPGVudHJ5PjxsaXRlcmFsPmltbWVkaWF0ZTwvbGl0ZXJhbD48L2Vu dHJ5PgorICAgICAgPGVudHJ5PgorICAgICAgIFRoZSBjaGVja3BvaW50IGlzIGhhcHBlbnMgd2l0 aG91dCBkZWxheXMuCisgICAgICA8L2VudHJ5PgorICAgICA8L3Jvdz4KKyAgICAgPHJvdz4KKyAg ICAgIDxlbnRyeT48bGl0ZXJhbD5mb3JjZTwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgPGVudHJ5 PgorICAgICAgIFRoZSBjaGVja3BvaW50IGlzIHN0YXJ0ZWQgYmVjYXVzZSBzb21lIG9wZXJhdGlv biBmb3JjZWQgYSBjaGVja3BvaW50LgorICAgICAgPC9lbnRyeT4KKyAgICAgPC9yb3c+CisgICAg IDxyb3c+CisgICAgICA8ZW50cnk+PGxpdGVyYWw+Zmx1c2ggYWxsPC9saXRlcmFsPjwvZW50cnk+ CisgICAgICA8ZW50cnk+CisgICAgICAgVGhlIGNoZWNrcG9pbnQgZmx1c2hlcyBhbGwgcGFnZXMs IGluY2x1ZGluZyB0aG9zZSBiZWxvbmdpbmcgdG8gdW5sb2dnZWQKKyAgICAgICB0YWJsZXMuCisg ICAgICA8L2VudHJ5PgorICAgICA8L3Jvdz4KKyAgICAgPHJvdz4KKyAgICAgIDxlbnRyeT48bGl0 ZXJhbD53YWl0PC9saXRlcmFsPjwvZW50cnk+CisgICAgICA8ZW50cnk+CisgICAgICAgV2FpdCBm b3IgY29tcGxldGlvbiBiZWZvcmUgcmV0dXJuaW5nLgorICAgICAgPC9lbnRyeT4KKyAgICAgPC9y b3c+CisgICAgICA8cm93PgorICAgICAgPGVudHJ5PjxsaXRlcmFsPnJlcXVlc3RlZDwvbGl0ZXJh bD48L2VudHJ5PgorICAgICAgPGVudHJ5PgorICAgICAgIFRoZSBjaGVja3BvaW50IHJlcXVlc3Qg aGFzIGJlZW4gbWFkZS4KKyAgICAgIDwvZW50cnk+CisgICAgIDwvcm93PgorICAgICA8cm93Pgor ICAgICAgPGVudHJ5PjxsaXRlcmFsPndhbDwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgPGVudHJ5 PgorICAgICAgIFRoZSBjaGVja3BvaW50IGlzIHN0YXJ0ZWQgYmVjYXVzZSA8bGl0ZXJhbD5tYXhf d2FsX3NpemU8L2xpdGVyYWw+IGlzCisgICAgICAgcmVhY2hlZC4KKyAgICAgIDwvZW50cnk+Cisg ICAgIDwvcm93PgorICAgICA8cm93PgorICAgICAgPGVudHJ5PjxsaXRlcmFsPnRpbWU8L2xpdGVy YWw+PC9lbnRyeT4KKyAgICAgIDxlbnRyeT4KKyAgICAgICBUaGUgY2hlY2twb2ludCBpcyBzdGFy dGVkIGJlY2F1c2UgPGxpdGVyYWw+Y2hlY2twb2ludF90aW1lb3V0PC9saXRlcmFsPgorICAgICAg IGV4cGlyZWQuCisgICAgICA8L2VudHJ5PgorICAgICA8L3Jvdz4KKyAgICA8L3Rib2R5PgorICAg PC90Z3JvdXA+CisgIDwvdGFibGU+CisKKyAgPHRhYmxlIGlkPSJjaGVja3BvaW50LXBoYXNlcyI+ CisgICA8dGl0bGU+Q0hFQ0tQT0lOVCBwaGFzZXM8L3RpdGxlPgorICAgPHRncm91cCBjb2xzPSIy Ij4KKyAgICA8Y29sc3BlYyBjb2xuYW1lPSJjb2wxIiBjb2x3aWR0aD0iMSoiLz4KKyAgICA8Y29s c3BlYyBjb2xuYW1lPSJjb2wyIiBjb2x3aWR0aD0iMioiLz4KKyAgICA8dGhlYWQ+CisgICAgIDxy b3c+CisgICAgICA8ZW50cnk+UGhhc2U8L2VudHJ5PgorICAgICAgPGVudHJ5PkRlc2NyaXB0aW9u PC9lbnRyeT4KKyAgICAgPC9yb3c+CisgICAgPC90aGVhZD4KKyAgICA8dGJvZHk+CisgICAgIDxy b3c+CisgICAgICA8ZW50cnk+PGxpdGVyYWw+aW5pdGlhbGl6aW5nPC9saXRlcmFsPjwvZW50cnk+ CisgICAgICA8ZW50cnk+CisgICAgICAgVGhlIENIRUNLUE9JTlRFUiBwcm9jZXNzIGlzIHByZXBh cmluZyB0byBiZWdpbiB0aGUgY2hlY2twb2ludCBvcGVyYXRpb24uCisgICAgICAgVGhpcyBwaGFz ZSBpcyBleHBlY3RlZCB0byBiZSB2ZXJ5IGJyaWVmLgorICAgICAgPC9lbnRyeT4KKyAgICAgPC9y b3c+CisgICAgIDxyb3c+CisgICAgICA8ZW50cnk+PGxpdGVyYWw+Y2hlY2twb2ludGluZyByZXBs aWNhdGlvbiBzbG90czwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgPGVudHJ5PgorICAgICAgIFRo ZSBDSEVDS1BPSU5URVIgcHJvY2VzcyBpcyBjdXJyZW50bHkgZmx1c2hpbmcgYWxsIHRoZSByZXBs aWNhdGlvbiBzbG90cworICAgICAgIHRvIGRpc2suCisgICAgICA8L2VudHJ5PgorICAgICA8L3Jv dz4KKyAgICAgPHJvdz4KKyAgICAgIDxlbnRyeT48bGl0ZXJhbD5jaGVja3BvaW50aW5nIHNuYXBz aG90czwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgPGVudHJ5PgorICAgICAgIFRoZSBDSEVDS1BP SU5URVIgcHJvY2VzcyBpcyBjdXJyZW50bHkgcmVtb3ZpbmcgYWxsIHRoZSBzZXJpYWxpemVkCisg ICAgICAgc25hcHNob3RzIHRoYXQgYXJlIG5vdCByZXF1aXJlZCBhbnltb3JlLgorICAgICAgPC9l bnRyeT4KKyAgICAgPC9yb3c+CisgICAgIDxyb3c+CisgICAgICA8ZW50cnk+PGxpdGVyYWw+Y2hl Y2twb2ludGluZyBsb2dpY2FsIHJld3JpdGUgbWFwcGluZ3M8L2xpdGVyYWw+PC9lbnRyeT4KKyAg ICAgIDxlbnRyeT4KKyAgICAgICBUaGUgQ0hFQ0tQT0lOVEVSIHByb2Nlc3MgaXMgY3VycmVudGx5 IHJlbW92aW5nL2ZsdXNoaW5nIHRoZSBsb2dpY2FsCisgICAgICAgcmV3cml0ZSBtYXBwaW5ncy4K KyAgICAgIDwvZW50cnk+CisgICAgIDwvcm93PgorICAgICA8cm93PgorICAgICAgPGVudHJ5Pjxs aXRlcmFsPmNoZWNrcG9pbnRpbmcgQ0xPRyBwYWdlczwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAg PGVudHJ5PgorICAgICAgIFRoZSBDSEVDS1BPSU5URVIgcHJvY2VzcyBpcyBjdXJyZW50bHkgd3Jp dGluZyBDTE9HIHBhZ2VzIHRvIGRpc2suCisgICAgICA8L2VudHJ5PgorICAgICA8L3Jvdz4KKyAg ICAgPHJvdz4KKyAgICAgIDxlbnRyeT48bGl0ZXJhbD5jaGVja3BvaW50aW5nIENvbW1pdCB0aW1l IHN0YW1wIHBhZ2VzPC9saXRlcmFsPjwvZW50cnk+CisgICAgICA8ZW50cnk+CisgICAgICAgVGhl IENIRUNLUE9JTlRFUiBwcm9jZXNzIGlzIGN1cnJlbnRseSB3cml0aW5nIENvbW1pdCB0aW1lIHN0 YW1wIHBhZ2VzIHRvCisgICAgICAgZGlzay4KKyAgICAgIDwvZW50cnk+CisgICAgIDwvcm93Pgor ICAgICA8cm93PgorICAgICAgPGVudHJ5PjxsaXRlcmFsPmNoZWNrcG9pbnRpbmcgU1VCVFJBTlMg cGFnZXM8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgIDxlbnRyeT4KKyAgICAgICBUaGUgQ0hFQ0tQ T0lOVEVSIHByb2Nlc3MgaXMgY3VycmVudGx5IHdyaXRpbmcgU1VCVFJBTlMgcGFnZXMgdG8gZGlz ay4KKyAgICAgIDwvZW50cnk+CisgICAgIDwvcm93PgorICAgICA8cm93PgorICAgICAgPGVudHJ5 PjxsaXRlcmFsPmNoZWNrcG9pbnRpbmcgTVVMVElYQUNUIHBhZ2VzPC9saXRlcmFsPjwvZW50cnk+ CisgICAgICA8ZW50cnk+CisgICAgICAgVGhlIENIRUNLUE9JTlRFUiBwcm9jZXNzIGlzIGN1cnJl bnRseSB3cml0aW5nIE1VTFRJWEFDVCBwYWdlcyB0byBkaXNrLgorICAgICAgPC9lbnRyeT4KKyAg ICAgPC9yb3c+CisgICAgIDxyb3c+CisgICAgICA8ZW50cnk+PGxpdGVyYWw+Y2hlY2twb2ludGlu ZyBTTFJVIHBhZ2VzPC9saXRlcmFsPjwvZW50cnk+CisgICAgICA8ZW50cnk+CisgICAgICAgVGhl IENIRUNLUE9JTlRFUiBwcm9jZXNzIGlzIGN1cnJlbnRseSB3cml0aW5nIFNMUlUgcGFnZXMgdG8g ZGlzay4KKyAgICAgIDwvZW50cnk+CisgICAgIDwvcm93PgorICAgICA8cm93PgorICAgICAgPGVu dHJ5PjxsaXRlcmFsPmNoZWNrcG9pbnRpbmcgYnVmZmVyczwvbGl0ZXJhbD48L2VudHJ5PgorICAg ICAgPGVudHJ5PgorICAgICAgIFRoZSBDSEVDS1BPSU5URVIgcHJvY2VzcyBpcyBjdXJyZW50bHkg d3JpdGluZyBidWZmZXJzIHRvIGRpc2suCisgICAgICA8L2VudHJ5PgorICAgICA8L3Jvdz4KKyAg ICAgPHJvdz4KKyAgICAgIDxlbnRyeT48bGl0ZXJhbD5wZXJmb3JtaW5nIHN5bmMgcmVxdWVzdHM8 L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgIDxlbnRyeT4KKyAgICAgICBUaGUgQ0hFQ0tQT0lOVEVS IHByb2Nlc3MgaXMgY3VycmVudGx5IHBlcmZvcm1pbmcgc3luYyByZXF1ZXN0cy4KKyAgICAgIDwv ZW50cnk+CisgICAgIDwvcm93PgorICAgICA8cm93PgorICAgICAgPGVudHJ5PjxsaXRlcmFsPnBl cmZvcm1pbmcgdHdvIHBoYXNlIGNoZWNrcG9pbnQ8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgIDxl bnRyeT4KKyAgICAgICBUaGUgQ0hFQ0tQT0lOVEVSIHByb2Nlc3MgaXMgY3VycmVudGx5IHBlcmZv cm1pbmcgdHdvIHBoYXNlIGNoZWNrcG9pbnQuCisgICAgICA8L2VudHJ5PgorICAgICA8L3Jvdz4K KyAgICAgPHJvdz4KKyAgICAgIDxlbnRyeT48bGl0ZXJhbD5yZWN5Y2xpbmcgb2xkIFhMT0cgZmls ZXM8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgIDxlbnRyeT4KKyAgICAgICBUaGUgQ0hFQ0tQT0lO VEVSIHByb2Nlc3MgaXMgY3VycmVudGx5IHJlY3ljbGluZyBvbGQgWExPRyBmaWxlcy4KKyAgICAg IDwvZW50cnk+CisgICAgIDwvcm93PgorICAgICA8cm93PgorICAgICAgPGVudHJ5PjxsaXRlcmFs PmZpbmFsaXppbmc8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgIDxlbnRyeT4KKyAgICAgICBUaGUg Q0hFQ0tQT0lOVEVSIHByb2Nlc3MgaXMgZmluYWxpemluZyB0aGUgY2hlY2twb2ludCBvcGVyYXRp b24uIAorICAgICAgPC9lbnRyeT4KKyAgICAgPC9yb3c+CisgICAgPC90Ym9keT4KKyAgIDwvdGdy b3VwPgorICA8L3RhYmxlPgorCisgPC9zZWN0Mj4KKwogIDwvc2VjdDE+CiAKICA8c2VjdDEgaWQ9 ImR5bmFtaWMtdHJhY2UiPgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0v eGxvZy5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0veGxvZy5jCmluZGV4IDBkMmJkN2Ez NTcuLmU1YTE5ZjNjYzMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hs b2cuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94bG9nLmMKQEAgLTY1LDYgKzY1 LDcgQEAKICNpbmNsdWRlICJjYXRhbG9nL2NhdHZlcnNpb24uaCIKICNpbmNsdWRlICJjYXRhbG9n L3BnX2NvbnRyb2wuaCIKICNpbmNsdWRlICJjYXRhbG9nL3BnX2RhdGFiYXNlLmgiCisjaW5jbHVk ZSAiY29tbWFuZHMvcHJvZ3Jlc3MuaCIKICNpbmNsdWRlICJjb21tb24vY29udHJvbGRhdGFfdXRp bHMuaCIKICNpbmNsdWRlICJleGVjdXRvci9pbnN0cnVtZW50LmgiCiAjaW5jbHVkZSAibWlzY2Fk bWluLmgiCkBAIC02NTMsNiArNjU0LDkgQEAgc3RhdGljIGJvb2wgdXBkYXRlTWluUmVjb3ZlcnlQ b2ludCA9IHRydWU7CiBzdGF0aWMgaW50CU15TG9ja05vID0gMDsKIHN0YXRpYyBib29sIGhvbGRp bmdBbGxMb2NrcyA9IGZhbHNlOwogCisvKiBDb3B5IG9mIGNoZWNrcG9pbnQgZmxhZ3MuICovCitz dGF0aWMgaW50IGNrcHRfZmxhZ3MgPSAwOworCiAjaWZkZWYgV0FMX0RFQlVHCiBzdGF0aWMgTWVt b3J5Q29udGV4dCB3YWxEZWJ1Z0N4dCA9IE5VTEw7CiAjZW5kaWYKQEAgLTYyOTYsNiArNjMwMCw5 IEBAIENyZWF0ZUNoZWNrUG9pbnQoaW50IGZsYWdzKQogCU1lbVNldCgmQ2hlY2twb2ludFN0YXRz LCAwLCBzaXplb2YoQ2hlY2twb2ludFN0YXRzKSk7CiAJQ2hlY2twb2ludFN0YXRzLmNrcHRfc3Rh cnRfdCA9IEdldEN1cnJlbnRUaW1lc3RhbXAoKTsKIAorCS8qIFByZXBhcmUgdG8gcmVwb3J0IHBy b2dyZXNzIG9mIHRoZSBjaGVja3BvaW50LiAqLworCWNoZWNrcG9pbnRfcHJvZ3Jlc3Nfc3RhcnQo ZmxhZ3MpOworCiAJLyoKIAkgKiBVc2UgYSBjcml0aWNhbCBzZWN0aW9uIHRvIGZvcmNlIHN5c3Rl bSBwYW5pYyBpZiB3ZSBoYXZlIHRyb3VibGUuCiAJICovCkBAIC02Mzk0LDYgKzY0MDEsNyBAQCBD cmVhdGVDaGVja1BvaW50KGludCBmbGFncykKIAkJCWN1ckluc2VydCArPSBTaXplT2ZYTG9nU2hv cnRQSEQ7CiAJfQogCWNoZWNrUG9pbnQucmVkbyA9IGN1ckluc2VydDsKKwljaGVja3BvaW50X3By b2dyZXNzX3VwZGF0ZV9wYXJhbShQUk9HUkVTU19DSEVDS1BPSU5UX0xTTiwgY2hlY2tQb2ludC5y ZWRvKTsKIAogCS8qCiAJICogSGVyZSB3ZSB1cGRhdGUgdGhlIHNoYXJlZCBSZWRvUmVjUHRyIGZv ciBmdXR1cmUgWExvZ0luc2VydCBjYWxsczsgdGhpcwpAQCAtNjYyOSw4ICs2NjM3LDEyIEBAIENy ZWF0ZUNoZWNrUG9pbnQoaW50IGZsYWdzKQogCQlLZWVwTG9nU2VnKHJlY3B0ciwgJl9sb2dTZWdO byk7CiAJfQogCV9sb2dTZWdOby0tOworCWNoZWNrcG9pbnRfcHJvZ3Jlc3NfdXBkYXRlX3BhcmFt KFBST0dSRVNTX0NIRUNLUE9JTlRfUEhBU0UsCisJCQkJCQkJCQkgUFJPR1JFU1NfQ0hFQ0tQT0lO VF9QSEFTRV9PTERfWExPR19SRUNZQ0xFKTsKIAlSZW1vdmVPbGRYbG9nRmlsZXMoX2xvZ1NlZ05v LCBSZWRvUmVjUHRyLCByZWNwdHIsCiAJCQkJCSAgIGNoZWNrUG9pbnQuVGhpc1RpbWVMaW5lSUQp OworCWNoZWNrcG9pbnRfcHJvZ3Jlc3NfdXBkYXRlX3BhcmFtKFBST0dSRVNTX0NIRUNLUE9JTlRf UEhBU0UsCisJCQkJCQkJCQkgUFJPR1JFU1NfQ0hFQ0tQT0lOVF9QSEFTRV9GSU5BTElaRSk7CiAK IAkvKgogCSAqIE1ha2UgbW9yZSBsb2cgc2VnbWVudHMgaWYgbmVlZGVkLiAgKERvIHRoaXMgYWZ0 ZXIgcmVjeWNsaW5nIG9sZCBsb2cKQEAgLTY2NTIsNiArNjY2NCw5IEBAIENyZWF0ZUNoZWNrUG9p bnQoaW50IGZsYWdzKQogCS8qIFJlYWwgd29yayBpcyBkb25lOyBsb2cgYW5kIHVwZGF0ZSBzdGF0 cy4gKi8KIAlMb2dDaGVja3BvaW50RW5kKGZhbHNlKTsKIAorCS8qIFN0b3AgcmVwb3J0aW5nIHBy b2dyZXNzIG9mIHRoZSBjaGVja3BvaW50LiAqLworCWNoZWNrcG9pbnRfcHJvZ3Jlc3NfZW5kKCk7 CisKIAkvKiBSZXNldCB0aGUgcHJvY2VzcyB0aXRsZSAqLwogCXVwZGF0ZV9jaGVja3BvaW50X2Rp c3BsYXkoZmxhZ3MsIGZhbHNlLCB0cnVlKTsKIApAQCAtNjgwOCwyOSArNjgyMyw2MCBAQCBzdGF0 aWMgdm9pZAogQ2hlY2tQb2ludEd1dHMoWExvZ1JlY1B0ciBjaGVja1BvaW50UmVkbywgaW50IGZs YWdzKQogewogCUNoZWNrUG9pbnRSZWxhdGlvbk1hcCgpOworCisJY2hlY2twb2ludF9wcm9ncmVz c191cGRhdGVfcGFyYW0oUFJPR1JFU1NfQ0hFQ0tQT0lOVF9QSEFTRSwKKwkJCQkJCQkJCSBQUk9H UkVTU19DSEVDS1BPSU5UX1BIQVNFX1JFUExJX1NMT1RTKTsKIAlDaGVja1BvaW50UmVwbGljYXRp b25TbG90cygpOworCisJY2hlY2twb2ludF9wcm9ncmVzc191cGRhdGVfcGFyYW0oUFJPR1JFU1Nf Q0hFQ0tQT0lOVF9QSEFTRSwKKwkJCQkJCQkJCSBQUk9HUkVTU19DSEVDS1BPSU5UX1BIQVNFX1NO QVBTSE9UUyk7CiAJQ2hlY2tQb2ludFNuYXBCdWlsZCgpOworCisJY2hlY2twb2ludF9wcm9ncmVz c191cGRhdGVfcGFyYW0oUFJPR1JFU1NfQ0hFQ0tQT0lOVF9QSEFTRSwKKwkJCQkJCQkJCSBQUk9H UkVTU19DSEVDS1BPSU5UX1BIQVNFX0xPR0lDQUxfUkVXUklURV9NQVBQSU5HUyk7CiAJQ2hlY2tQ b2ludExvZ2ljYWxSZXdyaXRlSGVhcCgpOwogCUNoZWNrUG9pbnRSZXBsaWNhdGlvbk9yaWdpbigp OwogCiAJLyogV3JpdGUgb3V0IGFsbCBkaXJ0eSBkYXRhIGluIFNMUlVzIGFuZCB0aGUgbWFpbiBi dWZmZXIgcG9vbCAqLwogCVRSQUNFX1BPU1RHUkVTUUxfQlVGRkVSX0NIRUNLUE9JTlRfU1RBUlQo ZmxhZ3MpOwogCUNoZWNrcG9pbnRTdGF0cy5ja3B0X3dyaXRlX3QgPSBHZXRDdXJyZW50VGltZXN0 YW1wKCk7CisKKwljaGVja3BvaW50X3Byb2dyZXNzX3VwZGF0ZV9wYXJhbShQUk9HUkVTU19DSEVD S1BPSU5UX1BIQVNFLAorCQkJCQkJCQkJIFBST0dSRVNTX0NIRUNLUE9JTlRfUEhBU0VfQ0xPR19Q QUdFUyk7CiAJQ2hlY2tQb2ludENMT0coKTsKKworCWNoZWNrcG9pbnRfcHJvZ3Jlc3NfdXBkYXRl X3BhcmFtKFBST0dSRVNTX0NIRUNLUE9JTlRfUEhBU0UsCisJCQkJCQkJCQkgUFJPR1JFU1NfQ0hF Q0tQT0lOVF9QSEFTRV9DT01NSVRUU19QQUdFUyk7CiAJQ2hlY2tQb2ludENvbW1pdFRzKCk7CisK KwljaGVja3BvaW50X3Byb2dyZXNzX3VwZGF0ZV9wYXJhbShQUk9HUkVTU19DSEVDS1BPSU5UX1BI QVNFLAorCQkJCQkJCQkJIFBST0dSRVNTX0NIRUNLUE9JTlRfUEhBU0VfU1VCVFJBTlNfUEFHRVMp OwogCUNoZWNrUG9pbnRTVUJUUkFOUygpOworCisJY2hlY2twb2ludF9wcm9ncmVzc191cGRhdGVf cGFyYW0oUFJPR1JFU1NfQ0hFQ0tQT0lOVF9QSEFTRSwKKwkJCQkJCQkJCSBQUk9HUkVTU19DSEVD S1BPSU5UX1BIQVNFX01VTFRJWEFDVF9QQUdFUyk7CiAJQ2hlY2tQb2ludE11bHRpWGFjdCgpOwor CisJY2hlY2twb2ludF9wcm9ncmVzc191cGRhdGVfcGFyYW0oUFJPR1JFU1NfQ0hFQ0tQT0lOVF9Q SEFTRSwKKwkJCQkJCQkJCSBQUk9HUkVTU19DSEVDS1BPSU5UX1BIQVNFX1NMUlVfUEFHRVMpOwog CUNoZWNrUG9pbnRQcmVkaWNhdGUoKTsKKworCWNoZWNrcG9pbnRfcHJvZ3Jlc3NfdXBkYXRlX3Bh cmFtKFBST0dSRVNTX0NIRUNLUE9JTlRfUEhBU0UsCisJCQkJCQkJCQkgUFJPR1JFU1NfQ0hFQ0tQ T0lOVF9QSEFTRV9CVUZGRVJTKTsKIAlDaGVja1BvaW50QnVmZmVycyhmbGFncyk7CiAKIAkvKiBQ ZXJmb3JtIGFsbCBxdWV1ZWQgdXAgZnN5bmNzICovCiAJVFJBQ0VfUE9TVEdSRVNRTF9CVUZGRVJf Q0hFQ0tQT0lOVF9TWU5DX1NUQVJUKCk7CiAJQ2hlY2twb2ludFN0YXRzLmNrcHRfc3luY190ID0g R2V0Q3VycmVudFRpbWVzdGFtcCgpOworCWNoZWNrcG9pbnRfcHJvZ3Jlc3NfdXBkYXRlX3BhcmFt KFBST0dSRVNTX0NIRUNLUE9JTlRfUEhBU0UsCisJCQkJCQkJCQkgUFJPR1JFU1NfQ0hFQ0tQT0lO VF9QSEFTRV9GSUxFX1NZTkMpOwogCVByb2Nlc3NTeW5jUmVxdWVzdHMoKTsKIAlDaGVja3BvaW50 U3RhdHMuY2twdF9zeW5jX2VuZF90ID0gR2V0Q3VycmVudFRpbWVzdGFtcCgpOwogCVRSQUNFX1BP U1RHUkVTUUxfQlVGRkVSX0NIRUNLUE9JTlRfRE9ORSgpOwogCiAJLyogV2UgZGVsaWJlcmF0ZWx5 IGRlbGF5IDJQQyBjaGVja3BvaW50aW5nIGFzIGxvbmcgYXMgcG9zc2libGUgKi8KKwljaGVja3Bv aW50X3Byb2dyZXNzX3VwZGF0ZV9wYXJhbShQUk9HUkVTU19DSEVDS1BPSU5UX1BIQVNFLAorCQkJ CQkJCQkJIFBST0dSRVNTX0NIRUNLUE9JTlRfUEhBU0VfVFdPX1BIQVNFKTsKIAlDaGVja1BvaW50 VHdvUGhhc2UoY2hlY2tQb2ludFJlZG8pOwogfQogCkBAIC02OTc3LDYgKzcwMjMsOSBAQCBDcmVh dGVSZXN0YXJ0UG9pbnQoaW50IGZsYWdzKQogCU1lbVNldCgmQ2hlY2twb2ludFN0YXRzLCAwLCBz aXplb2YoQ2hlY2twb2ludFN0YXRzKSk7CiAJQ2hlY2twb2ludFN0YXRzLmNrcHRfc3RhcnRfdCA9 IEdldEN1cnJlbnRUaW1lc3RhbXAoKTsKIAorCS8qIFByZXBhcmUgdG8gcmVwb3J0IHByb2dyZXNz IG9mIHRoZSByZXN0YXJ0cG9pbnQuICovCisJY2hlY2twb2ludF9wcm9ncmVzc19zdGFydChmbGFn cyk7CisKIAlpZiAobG9nX2NoZWNrcG9pbnRzKQogCQlMb2dDaGVja3BvaW50U3RhcnQoZmxhZ3Ms IHRydWUpOwogCkBAIC03MDc3LDcgKzcxMjYsMTEgQEAgQ3JlYXRlUmVzdGFydFBvaW50KGludCBm bGFncykKIAlpZiAoIVJlY292ZXJ5SW5Qcm9ncmVzcygpKQogCQlyZXBsYXlUTEkgPSBYTG9nQ3Rs LT5JbnNlcnRUaW1lTGluZUlEOwogCisJY2hlY2twb2ludF9wcm9ncmVzc191cGRhdGVfcGFyYW0o UFJPR1JFU1NfQ0hFQ0tQT0lOVF9QSEFTRSwKKwkJCQkJCQkJCSBQUk9HUkVTU19DSEVDS1BPSU5U X1BIQVNFX09MRF9YTE9HX1JFQ1lDTEUpOwogCVJlbW92ZU9sZFhsb2dGaWxlcyhfbG9nU2VnTm8s IFJlZG9SZWNQdHIsIGVuZHB0ciwgcmVwbGF5VExJKTsKKwljaGVja3BvaW50X3Byb2dyZXNzX3Vw ZGF0ZV9wYXJhbShQUk9HUkVTU19DSEVDS1BPSU5UX1BIQVNFLAorCQkJCQkJCQkJIFBST0dSRVNT X0NIRUNLUE9JTlRfUEhBU0VfRklOQUxJWkUpOwogCiAJLyoKIAkgKiBNYWtlIG1vcmUgbG9nIHNl Z21lbnRzIGlmIG5lZWRlZC4gIChEbyB0aGlzIGFmdGVyIHJlY3ljbGluZyBvbGQgbG9nCkBAIC03 MDk4LDYgKzcxNTEsOSBAQCBDcmVhdGVSZXN0YXJ0UG9pbnQoaW50IGZsYWdzKQogCS8qIFJlYWwg d29yayBpcyBkb25lOyBsb2cgYW5kIHVwZGF0ZSBzdGF0cy4gKi8KIAlMb2dDaGVja3BvaW50RW5k KHRydWUpOwogCisJLyogU3RvcCByZXBvcnRpbmcgcHJvZ3Jlc3Mgb2YgdGhlIHJlc3RhcnRwb2lu dC4gKi8KKwljaGVja3BvaW50X3Byb2dyZXNzX2VuZCgpOworCiAJLyogUmVzZXQgdGhlIHByb2Nl c3MgdGl0bGUgKi8KIAl1cGRhdGVfY2hlY2twb2ludF9kaXNwbGF5KGZsYWdzLCB0cnVlLCB0cnVl KTsKIApAQCAtOTE5NywzICs5MjUzLDc5IEBAIFNldFdhbFdyaXRlclNsZWVwaW5nKGJvb2wgc2xl ZXBpbmcpCiAJWExvZ0N0bC0+V2FsV3JpdGVyU2xlZXBpbmcgPSBzbGVlcGluZzsKIAlTcGluTG9j a1JlbGVhc2UoJlhMb2dDdGwtPmluZm9fbGNrKTsKIH0KKworLyoKKyAqIFN0YXJ0IHJlcG9ydGlu ZyBwcm9ncmVzcyBvZiB0aGUgY2hlY2twb2ludC4KKyAqLwordm9pZAorY2hlY2twb2ludF9wcm9n cmVzc19zdGFydChpbnQgZmxhZ3MpCit7CisJLyogSW4gYm9vdHN0cmFwIG1vZGUsIHdlIGRvbid0 IGFjdHVhbGx5IHJlY29yZCBhbnl0aGluZy4gKi8KKwlpZiAoSXNCb290c3RyYXBQcm9jZXNzaW5n TW9kZSgpKQorCQlyZXR1cm47CisKKwlja3B0X2ZsYWdzID0gZmxhZ3M7CisKKwkvKgorCSAqIENh bm5vdCBhY2Nlc3MgcGdfc3RhdF9wcm9ncmVzc19jaGVja3BvaW50IHZpZXcgaW4gY2FzZSBvZiBj aGVja3BvaW50CisJICogZHVyaW5nIHNodXRkb3duIGFuZCBlbmQtb2YtcmVjb3ZlcnkuCisJICov CisJaWYgKChja3B0X2ZsYWdzICYKKwkJIChDSEVDS1BPSU5UX0lTX1NIVVRET1dOIHwgQ0hFQ0tQ T0lOVF9FTkRfT0ZfUkVDT1ZFUlkpKSA9PSAwKQorCXsKKwkJY29uc3QgaW50CWluZGV4W10gPSB7 CisJCQlQUk9HUkVTU19DSEVDS1BPSU5UX1RJTUVMSU5FLAorCQkJUFJPR1JFU1NfQ0hFQ0tQT0lO VF9LSU5ELAorCQkJUFJPR1JFU1NfQ0hFQ0tQT0lOVF9QSEFTRSwKKwkJCVBST0dSRVNTX0NIRUNL UE9JTlRfU1RBUlRfVElNRVNUQU1QCisJCQl9OworCQlpbnQ2NAkJdmFsWzRdOworCisJCXBnc3Rh dF9wcm9ncmVzc19zdGFydF9jb21tYW5kKFBST0dSRVNTX0NPTU1BTkRfQ0hFQ0tQT0lOVCwgSW52 YWxpZE9pZCk7CisKKwkJdmFsWzBdID0gWExvZ0N0bC0+SW5zZXJ0VGltZUxpbmVJRDsKKwkJdmFs WzFdID0gZmxhZ3M7CisJCXZhbFsyXSA9IFBST0dSRVNTX0NIRUNLUE9JTlRfUEhBU0VfSU5JVDsK KwkJdmFsWzNdID0gQ2hlY2twb2ludFN0YXRzLmNrcHRfc3RhcnRfdDsKKworCQlwZ3N0YXRfcHJv Z3Jlc3NfdXBkYXRlX211bHRpX3BhcmFtKDQsIGluZGV4LCB2YWwpOworCX0KK30KKworLyoKKyAq IFVwZGF0ZSBpbmRleCd0aCBtZW1iZXIgaW4gc3RfcHJvZ3Jlc3NfcGFyYW1bXSBhcnJheSB3aXRo IHRoZSBsYXRlc3QgdmFsdWUuCisgKi8KK3ZvaWQKK2NoZWNrcG9pbnRfcHJvZ3Jlc3NfdXBkYXRl X3BhcmFtKGludCBpbmRleCwgaW50NjQgdmFsKQoreworCS8qIEluIGJvb3RzdHJhcCBtb2RlLCB3 ZSBkb24ndCBhY3R1YWxseSByZWNvcmQgYW55dGhpbmcuICovCisJaWYgKElzQm9vdHN0cmFwUHJv Y2Vzc2luZ01vZGUoKSkKKwkJcmV0dXJuOworCisJLyoKKwkgKiBDYW5ub3QgYWNjZXNzIHBnX3N0 YXRfcHJvZ3Jlc3NfY2hlY2twb2ludCB2aWV3IGluIGNhc2Ugb2YgY2hlY2twb2ludAorCSAqIGR1 cmluZyBzaHV0ZG93biBhbmQgZW5kLW9mLXJlY292ZXJ5LgorCSAqLworCWlmICgoY2twdF9mbGFn cyAmCisJCSAoQ0hFQ0tQT0lOVF9JU19TSFVURE9XTiB8IENIRUNLUE9JTlRfRU5EX09GX1JFQ09W RVJZKSkgPT0gMCkKKwkJcGdzdGF0X3Byb2dyZXNzX3VwZGF0ZV9wYXJhbShpbmRleCwgdmFsKTsK K30KKworLyoKKyAqIFN0b3AgcmVwb3J0aW5nIHByb2dyZXNzIG9mIHRoZSBjaGVja3BvaW50Lgor ICovCit2b2lkCitjaGVja3BvaW50X3Byb2dyZXNzX2VuZCh2b2lkKQoreworCS8qIEluIGJvb3Rz dHJhcCBtb2RlLCB3ZSBkb24ndCBhY3R1YWxseSByZWNvcmQgYW55dGhpbmcuICovCisJaWYgKElz Qm9vdHN0cmFwUHJvY2Vzc2luZ01vZGUoKSkKKwkJcmV0dXJuOworCisJLyoKKwkgKiBDYW5ub3Qg YWNjZXNzIHBnX3N0YXRfcHJvZ3Jlc3NfY2hlY2twb2ludCB2aWV3IGluIGNhc2Ugb2YgY2hlY2tw b2ludAorCSAqIGR1cmluZyBzaHV0ZG93biBhbmQgZW5kLW9mLXJlY292ZXJ5LgorCSAqLworCWlm ICgoY2twdF9mbGFncyAmCisJCSAoQ0hFQ0tQT0lOVF9JU19TSFVURE9XTiB8IENIRUNLUE9JTlRf RU5EX09GX1JFQ09WRVJZKSkgPT0gMCkKKwkJcGdzdGF0X3Byb2dyZXNzX2VuZF9jb21tYW5kKCk7 Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQv Y2F0YWxvZy9zeXN0ZW1fdmlld3Muc3FsIGIvc3JjL2JhY2tlbmQvY2F0YWxvZy9zeXN0ZW1fdmll d3Muc3FsCmluZGV4IDNjYjY5YjFmODcuLjZkYzViMGZlYjYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNr ZW5kL2NhdGFsb2cvc3lzdGVtX3ZpZXdzLnNxbAorKysgYi9zcmMvYmFja2VuZC9jYXRhbG9nL3N5 c3RlbV92aWV3cy5zcWwKQEAgLTEyODYsMyArMTI4NiwzOSBAQCBDUkVBVEUgVklFVyBwZ19zdGF0 X3N1YnNjcmlwdGlvbl93b3JrZXJzIEFTCiAgICAgICAgICAgRlJPTSBwZ19zdWJzY3JpcHRpb25f cmVsKSBzciwKICAgICAgICAgICBMQVRFUkFMIHBnX3N0YXRfZ2V0X3N1YnNjcmlwdGlvbl93b3Jr ZXIoc3Iuc3ViaWQsIHNyLnJlbGlkKSB3CiAgICAgICAgICAgSk9JTiBwZ19zdWJzY3JpcHRpb24g cyBPTiAody5zdWJpZCA9IHMub2lkKTsKKworQ1JFQVRFIFZJRVcgcGdfc3RhdF9wcm9ncmVzc19j aGVja3BvaW50IEFTCisgICAgU0VMRUNUCisgICAgICAgIFMucGlkIEFTIHBpZCwKKyAgICAgICAg cGdfc3RhdF9nZXRfcHJvZ3Jlc3NfY2hlY2twb2ludF90eXBlKFMucGFyYW0xKSBBUyB0eXBlLAor ICAgICAgICBwZ19zdGF0X2dldF9wcm9ncmVzc19jaGVja3BvaW50X2tpbmQoUy5wYXJhbTIpIEFT IGtpbmQsCisgICAgICAgICggU0VMRUNUICcwLzAnOjpwZ19sc24gKworICAgICAgICAgICAgICAg ICAoKENBU0UKKyAgICAgICAgICAgICAgICAgICAgIFdIRU4gc3RhdC5sc25faW50NjQgPCAwIFRI RU4gcG93KDI6Om51bWVyaWMsIDY0OjpudW1lcmljKTo6bnVtZXJpYworICAgICAgICAgICAgICAg ICAgICAgRUxTRSAwOjpudW1lcmljCisgICAgICAgICAgICAgICAgICBFTkQpICsKKyAgICAgICAg ICAgICAgICAgIHN0YXQubHNuX2ludDY0OjpudW1lcmljKQorICAgICAgICAgIEZST00gKFNFTEVD VCBzLnBhcmFtMzo6YmlnaW50KSBBUyBzdGF0KGxzbl9pbnQ2NCkKKyAgICAgICAgKSBBUyBzdGFy dF9sc24sCisgICAgICAgIHBnX3N0YXRfZ2V0X3Byb2dyZXNzX2NoZWNrcG9pbnRfZWxhcHNlZChT LnBhcmFtNCkgQVMgZWxhcHNlZF90aW1lLAorICAgICAgICBDQVNFIFMucGFyYW01IFdIRU4gMCBU SEVOICdpbml0aWFsaXppbmcnCisgICAgICAgICAgICAgICAgICAgICAgV0hFTiAxIFRIRU4gJ2No ZWNrcG9pbnRpbmcgcmVwbGljYXRpb24gc2xvdHMnCisgICAgICAgICAgICAgICAgICAgICAgV0hF TiAyIFRIRU4gJ2NoZWNrcG9pbnRpbmcgc25hcHNob3RzJworICAgICAgICAgICAgICAgICAgICAg IFdIRU4gMyBUSEVOICdjaGVja3BvaW50aW5nIGxvZ2ljYWwgcmV3cml0ZSBtYXBwaW5ncycKKyAg ICAgICAgICAgICAgICAgICAgICBXSEVOIDQgVEhFTiAnY2hlY2twb2ludGluZyBDTE9HIHBhZ2Vz JworICAgICAgICAgICAgICAgICAgICAgIFdIRU4gNSBUSEVOICdjaGVja3BvaW50aW5nIENvbW1p dFRzIHBhZ2VzJworICAgICAgICAgICAgICAgICAgICAgIFdIRU4gNiBUSEVOICdjaGVja3BvaW50 aW5nIFNVQlRSQU5TIHBhZ2VzJworICAgICAgICAgICAgICAgICAgICAgIFdIRU4gNyBUSEVOICdj aGVja3BvaW50aW5nIE1VTFRJWEFDVCBwYWdlcycKKyAgICAgICAgICAgICAgICAgICAgICBXSEVO IDggVEhFTiAnY2hlY2twb2ludGluZyBTTFJVIHBhZ2VzJworICAgICAgICAgICAgICAgICAgICAg IFdIRU4gOSBUSEVOICdjaGVja3BvaW50aW5nIGJ1ZmZlcnMnCisgICAgICAgICAgICAgICAgICAg ICAgV0hFTiAxMCBUSEVOICdwZXJmb3JtaW5nIHN5bmMgcmVxdWVzdHMnCisgICAgICAgICAgICAg ICAgICAgICAgV0hFTiAxMSBUSEVOICdwZXJmb3JtaW5nIHR3byBwaGFzZSBjaGVja3BvaW50Jwor ICAgICAgICAgICAgICAgICAgICAgIFdIRU4gMTIgVEhFTiAncmVjeWNsaW5nIG9sZCBYTE9HIGZp bGVzJworICAgICAgICAgICAgICAgICAgICAgIFdIRU4gMTMgVEhFTiAnRmluYWxpemluZycKKyAg ICAgICAgICAgICAgICAgICAgICBFTkQgQVMgcGhhc2UsCisgICAgICAgIFMucGFyYW02IEFTIHRv dGFsX2J1ZmZlcl93cml0ZXMsCisgICAgICAgIFMucGFyYW03IEFTIGJ1ZmZlcnNfcHJvY2Vzc2Vk LAorICAgICAgICBTLnBhcmFtOCBBUyBidWZmZXJzX3dyaXR0ZW4sCisgICAgICAgIFMucGFyYW05 IEFTIHRvdGFsX2ZpbGVfc3luY3MsCisgICAgICAgIFMucGFyYW0xMCBBUyBmaWxlc19zeW5jZWQK KyAgICBGUk9NIHBnX3N0YXRfZ2V0X3Byb2dyZXNzX2luZm8oJ0NIRUNLUE9JTlQnKSBBUyBTOwpk aWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9jaGVja3BvaW50ZXIuYyBiL3NyYy9i YWNrZW5kL3Bvc3RtYXN0ZXIvY2hlY2twb2ludGVyLmMKaW5kZXggNDQ4OGUzYTQ0My4uMmZmN2U3 N2IzZSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9jaGVja3BvaW50ZXIuYwor KysgYi9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL2NoZWNrcG9pbnRlci5jCkBAIC0zOSw2ICszOSw3 IEBACiAjaW5jbHVkZSAiYWNjZXNzL3hsb2cuaCIKICNpbmNsdWRlICJhY2Nlc3MveGxvZ19pbnRl cm5hbC5oIgogI2luY2x1ZGUgImFjY2Vzcy94bG9ncmVjb3ZlcnkuaCIKKyNpbmNsdWRlICJjb21t YW5kcy9wcm9ncmVzcy5oIgogI2luY2x1ZGUgImxpYnBxL3Bxc2lnbmFsLmgiCiAjaW5jbHVkZSAi bWlzY2FkbWluLmgiCiAjaW5jbHVkZSAicGdzdGF0LmgiCkBAIC0xNjMsNyArMTY0LDcgQEAgc3Rh dGljIHBnX3RpbWVfdCBsYXN0X3hsb2dfc3dpdGNoX3RpbWU7CiBzdGF0aWMgdm9pZCBIYW5kbGVD aGVja3BvaW50ZXJJbnRlcnJ1cHRzKHZvaWQpOwogc3RhdGljIHZvaWQgQ2hlY2tBcmNoaXZlVGlt ZW91dCh2b2lkKTsKIHN0YXRpYyBib29sIElzQ2hlY2twb2ludE9uU2NoZWR1bGUoZG91YmxlIHBy b2dyZXNzKTsKLXN0YXRpYyBib29sIEltbWVkaWF0ZUNoZWNrcG9pbnRSZXF1ZXN0ZWQodm9pZCk7 CitzdGF0aWMgYm9vbCBJbW1lZGlhdGVDaGVja3BvaW50UmVxdWVzdGVkKGludCBmbGFncyk7CiBz dGF0aWMgYm9vbCBDb21wYWN0Q2hlY2twb2ludGVyUmVxdWVzdFF1ZXVlKHZvaWQpOwogc3RhdGlj IHZvaWQgVXBkYXRlU2hhcmVkTWVtb3J5Q29uZmlnKHZvaWQpOwogCkBAIC02NTgsMTYgKzY1OSwy MyBAQCBDaGVja0FyY2hpdmVUaW1lb3V0KHZvaWQpCiAgKiB0aGVyZSBpcyBvbmUgcGVuZGluZyBi ZWhpbmQgaXQuKQogICovCiBzdGF0aWMgYm9vbAotSW1tZWRpYXRlQ2hlY2twb2ludFJlcXVlc3Rl ZCh2b2lkKQorSW1tZWRpYXRlQ2hlY2twb2ludFJlcXVlc3RlZChpbnQgZmxhZ3MpCiB7CiAJdm9s YXRpbGUgQ2hlY2twb2ludGVyU2htZW1TdHJ1Y3QgKmNwcyA9IENoZWNrcG9pbnRlclNobWVtOwor CWludAkJIHVwZGF0ZWRfZmxhZ3MgPSBmbGFnczsKIAogCS8qCiAJICogV2UgZG9uJ3QgbmVlZCB0 byBhY3F1aXJlIHRoZSBja3B0X2xjayBpbiB0aGlzIGNhc2UgYmVjYXVzZSB3ZSdyZSBvbmx5CiAJ ICogbG9va2luZyBhdCBhIHNpbmdsZSBmbGFnIGJpdC4KIAkgKi8KIAlpZiAoY3BzLT5ja3B0X2Zs YWdzICYgQ0hFQ0tQT0lOVF9JTU1FRElBVEUpCisJeworCQl1cGRhdGVkX2ZsYWdzIHw9IENIRUNL UE9JTlRfSU1NRURJQVRFOworCQljaGVja3BvaW50X3Byb2dyZXNzX3VwZGF0ZV9wYXJhbShQUk9H UkVTU19DSEVDS1BPSU5UX0tJTkQsCisJCQkJCQkJCQkJIHVwZGF0ZWRfZmxhZ3MpOwogCQlyZXR1 cm4gdHJ1ZTsKKwl9CisKIAlyZXR1cm4gZmFsc2U7CiB9CiAKQEAgLTY5OSw3ICs3MDcsNyBAQCBD aGVja3BvaW50V3JpdGVEZWxheShpbnQgZmxhZ3MsIGRvdWJsZSBwcm9ncmVzcykKIAkgKi8KIAlp ZiAoIShmbGFncyAmIENIRUNLUE9JTlRfSU1NRURJQVRFKSAmJgogCQkhU2h1dGRvd25SZXF1ZXN0 UGVuZGluZyAmJgotCQkhSW1tZWRpYXRlQ2hlY2twb2ludFJlcXVlc3RlZCgpICYmCisJCSFJbW1l ZGlhdGVDaGVja3BvaW50UmVxdWVzdGVkKGZsYWdzKSAmJgogCQlJc0NoZWNrcG9pbnRPblNjaGVk dWxlKHByb2dyZXNzKSkKIAl7CiAJCWlmIChDb25maWdSZWxvYWRQZW5kaW5nKQpkaWZmIC0tZ2l0 IGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9idWZmZXIvYnVmbWdyLmMgYi9zcmMvYmFja2VuZC9zdG9y YWdlL2J1ZmZlci9idWZtZ3IuYwppbmRleCBmNTQ1OWM2OGY4Li4xNTYxMzBlZjQzIDEwMDY0NAot LS0gYS9zcmMvYmFja2VuZC9zdG9yYWdlL2J1ZmZlci9idWZtZ3IuYworKysgYi9zcmMvYmFja2Vu ZC9zdG9yYWdlL2J1ZmZlci9idWZtZ3IuYwpAQCAtMzgsNiArMzgsNyBAQAogI2luY2x1ZGUgImFj Y2Vzcy94bG9ndXRpbHMuaCIKICNpbmNsdWRlICJjYXRhbG9nL2NhdGFsb2cuaCIKICNpbmNsdWRl ICJjYXRhbG9nL3N0b3JhZ2UuaCIKKyNpbmNsdWRlICJjb21tYW5kcy9wcm9ncmVzcy5oIgogI2lu Y2x1ZGUgImV4ZWN1dG9yL2luc3RydW1lbnQuaCIKICNpbmNsdWRlICJsaWIvYmluYXJ5aGVhcC5o IgogI2luY2x1ZGUgIm1pc2NhZG1pbi5oIgpAQCAtMjAxMiw2ICsyMDEzLDggQEAgQnVmZmVyU3lu YyhpbnQgZmxhZ3MpCiAJV3JpdGViYWNrQ29udGV4dEluaXQoJndiX2NvbnRleHQsICZjaGVja3Bv aW50X2ZsdXNoX2FmdGVyKTsKIAogCVRSQUNFX1BPU1RHUkVTUUxfQlVGRkVSX1NZTkNfU1RBUlQo TkJ1ZmZlcnMsIG51bV90b19zY2FuKTsKKwljaGVja3BvaW50X3Byb2dyZXNzX3VwZGF0ZV9wYXJh bShQUk9HUkVTU19DSEVDS1BPSU5UX0JVRkZFUlNfVE9UQUwsCisJCQkJCQkJCQkgbnVtX3RvX3Nj YW4pOwogCiAJLyoKIAkgKiBTb3J0IGJ1ZmZlcnMgdGhhdCBuZWVkIHRvIGJlIHdyaXR0ZW4gdG8g cmVkdWNlIHRoZSBsaWtlbGlob29kIG9mIHJhbmRvbQpAQCAtMjEyOSw2ICsyMTMyLDggQEAgQnVm ZmVyU3luYyhpbnQgZmxhZ3MpCiAJCWJ1ZkhkciA9IEdldEJ1ZmZlckRlc2NyaXB0b3IoYnVmX2lk KTsKIAogCQludW1fcHJvY2Vzc2VkKys7CisJCWNoZWNrcG9pbnRfcHJvZ3Jlc3NfdXBkYXRlX3Bh cmFtKFBST0dSRVNTX0NIRUNLUE9JTlRfQlVGRkVSU19QUk9DRVNTRUQsCisJCQkJCQkJCQkJIG51 bV9wcm9jZXNzZWQpOwogCiAJCS8qCiAJCSAqIFdlIGRvbid0IG5lZWQgdG8gYWNxdWlyZSB0aGUg bG9jayBoZXJlLCBiZWNhdXNlIHdlJ3JlIG9ubHkgbG9va2luZwpAQCAtMjE0OSw2ICsyMTU0LDgg QEAgQnVmZmVyU3luYyhpbnQgZmxhZ3MpCiAJCQkJVFJBQ0VfUE9TVEdSRVNRTF9CVUZGRVJfU1lO Q19XUklUVEVOKGJ1Zl9pZCk7CiAJCQkJUGVuZGluZ0NoZWNrcG9pbnRlclN0YXRzLm1fYnVmX3dy aXR0ZW5fY2hlY2twb2ludHMrKzsKIAkJCQludW1fd3JpdHRlbisrOworCQkJCWNoZWNrcG9pbnRf cHJvZ3Jlc3NfdXBkYXRlX3BhcmFtKFBST0dSRVNTX0NIRUNLUE9JTlRfQlVGRkVSU19XUklUVEVO LAorCQkJCQkJCQkJCQkJIG51bV93cml0dGVuKTsKIAkJCX0KIAkJfQogCmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC9zdG9yYWdlL3N5bmMvc3luYy5jIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9zeW5j L3N5bmMuYwppbmRleCBlMTYxZDU3NzYxLi5mMDQ0MWQ0ZGU4IDEwMDY0NAotLS0gYS9zcmMvYmFj a2VuZC9zdG9yYWdlL3N5bmMvc3luYy5jCisrKyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2Uvc3luYy9z eW5jLmMKQEAgLTIzLDYgKzIzLDcgQEAKICNpbmNsdWRlICJhY2Nlc3MvbXVsdGl4YWN0LmgiCiAj aW5jbHVkZSAiYWNjZXNzL3hsb2cuaCIKICNpbmNsdWRlICJhY2Nlc3MveGxvZ3V0aWxzLmgiCisj aW5jbHVkZSAiY29tbWFuZHMvcHJvZ3Jlc3MuaCIKICNpbmNsdWRlICJjb21tYW5kcy90YWJsZXNw YWNlLmgiCiAjaW5jbHVkZSAibWlzY2FkbWluLmgiCiAjaW5jbHVkZSAicGdzdGF0LmgiCkBAIC0z NTYsNiArMzU3LDkgQEAgUHJvY2Vzc1N5bmNSZXF1ZXN0cyh2b2lkKQogCS8qIE5vdyBzY2FuIHRo ZSBoYXNodGFibGUgZm9yIGZzeW5jIHJlcXVlc3RzIHRvIHByb2Nlc3MgKi8KIAlhYnNvcmJfY291 bnRlciA9IEZTWU5DU19QRVJfQUJTT1JCOwogCWhhc2hfc2VxX2luaXQoJmhzdGF0LCBwZW5kaW5n T3BzKTsKKwljaGVja3BvaW50X3Byb2dyZXNzX3VwZGF0ZV9wYXJhbShQUk9HUkVTU19DSEVDS1BP SU5UX0ZJTEVTX1RPVEFMLAorCQkJCQkJCQkJIGhhc2hfZ2V0X251bV9lbnRyaWVzKHBlbmRpbmdP cHMpKTsKKwogCXdoaWxlICgoZW50cnkgPSAoUGVuZGluZ0ZzeW5jRW50cnkgKikgaGFzaF9zZXFf c2VhcmNoKCZoc3RhdCkpICE9IE5VTEwpCiAJewogCQlpbnQJCQlmYWlsdXJlczsKQEAgLTQxOSw2 ICs0MjMsOCBAQCBQcm9jZXNzU3luY1JlcXVlc3RzKHZvaWQpCiAJCQkJCQlsb25nZXN0ID0gZWxh cHNlZDsKIAkJCQkJdG90YWxfZWxhcHNlZCArPSBlbGFwc2VkOwogCQkJCQlwcm9jZXNzZWQrKzsK KwkJCQkJY2hlY2twb2ludF9wcm9ncmVzc191cGRhdGVfcGFyYW0oUFJPR1JFU1NfQ0hFQ0tQT0lO VF9GSUxFU19TWU5DRUQsCisJCQkJCQkJCQkJCQkJIHByb2Nlc3NlZCk7CiAKIAkJCQkJaWYgKGxv Z19jaGVja3BvaW50cykKIAkJCQkJCWVsb2coREVCVUcxLCAiY2hlY2twb2ludCBzeW5jOiBudW1i ZXI9JWQgZmlsZT0lcyB0aW1lPSUuM2YgbXMiLApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRp bHMvYWR0L3Bnc3RhdGZ1bmNzLmMgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvcGdzdGF0ZnVuY3Mu YwppbmRleCAzMGU4ZGZhN2MxLi4zMmMzNWYwYmQwIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91 dGlscy9hZHQvcGdzdGF0ZnVuY3MuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvcGdzdGF0 ZnVuY3MuYwpAQCAtNDk0LDYgKzQ5NCw4IEBAIHBnX3N0YXRfZ2V0X3Byb2dyZXNzX2luZm8oUEdf RlVOQ1RJT05fQVJHUykKIAkJY21kdHlwZSA9IFBST0dSRVNTX0NPTU1BTkRfQkFTRUJBQ0tVUDsK IAllbHNlIGlmIChwZ19zdHJjYXNlY21wKGNtZCwgIkNPUFkiKSA9PSAwKQogCQljbWR0eXBlID0g UFJPR1JFU1NfQ09NTUFORF9DT1BZOworCSBlbHNlIGlmIChwZ19zdHJjYXNlY21wKGNtZCwgIkNI RUNLUE9JTlQiKSA9PSAwKQorCQljbWR0eXBlID0gUFJPR1JFU1NfQ09NTUFORF9DSEVDS1BPSU5U OwogCWVsc2UKIAkJZXJlcG9ydChFUlJPUiwKIAkJCQkoZXJyY29kZShFUlJDT0RFX0lOVkFMSURf UEFSQU1FVEVSX1ZBTFVFKSwKQEAgLTI0OTUsMyArMjQ5Nyw2MCBAQCBwZ19zdGF0X2dldF9zdWJz Y3JpcHRpb25fd29ya2VyKFBHX0ZVTkNUSU9OX0FSR1MpCiAJLyogUmV0dXJucyB0aGUgcmVjb3Jk IGFzIERhdHVtICovCiAJUEdfUkVUVVJOX0RBVFVNKEhlYXBUdXBsZUdldERhdHVtKGhlYXBfZm9y bV90dXBsZSh0dXBkZXNjLCB2YWx1ZXMsIG51bGxzKSkpOwogfQorCisvKgorICogUmV0dXJuIGNo ZWNrcG9pbnQgdHlwZSAoZWl0aGVyIGNoZWNrcG9pbnQgb3IgcmVzdGFydHBvaW50KS4KKyAqLwor RGF0dW0KK3BnX3N0YXRfZ2V0X3Byb2dyZXNzX2NoZWNrcG9pbnRfdHlwZShQR19GVU5DVElPTl9B UkdTKQoreworCVRpbWVMaW5lSUQJY3VyX3RpbWVsaW5lID0gKFRpbWVMaW5lSUQpIFBHX0dFVEFS R19JTlQ2NCgwKTsKKworCWlmIChSZWNvdmVyeUluUHJvZ3Jlc3MoKSB8fCAoR2V0V0FMSW5zZXJ0 aW9uVGltZUxpbmUoKSAhPSBjdXJfdGltZWxpbmUpKQorCQlQR19SRVRVUk5fVEVYVF9QKENTdHJp bmdHZXRUZXh0RGF0dW0oInJlc3RhcnRwb2ludCIpKTsKKwllbHNlCisJCVBHX1JFVFVSTl9URVhU X1AoQ1N0cmluZ0dldFRleHREYXR1bSgiY2hlY2twb2ludCIpKTsKK30KKworLyoKKyAqIFJldHVy biBjaGVja3BvaW50IGtpbmQgYmFzZWQgb24gdGhlIGZsYWdzIHNldC4KKyAqLworRGF0dW0KK3Bn X3N0YXRfZ2V0X3Byb2dyZXNzX2NoZWNrcG9pbnRfa2luZChQR19GVU5DVElPTl9BUkdTKQorewor CWludDY0CWZsYWdzID0gUEdfR0VUQVJHX0lOVDY0KDApOworCWNoYXIJY2twdF9raW5kW01BWFBH UEFUSF07CisKKwlNZW1TZXQoY2twdF9raW5kLCAwLCBNQVhQR1BBVEgpOworCXNucHJpbnRmKGNr cHRfa2luZCwgTUFYUEdQQVRILCAiJXMlcyVzJXMlcyVzJXMlcyVzIiwKKwkJCSAoZmxhZ3MgPT0g MCkgPyAidW5rbm93biIgOiAiIiwKKwkJCSAoZmxhZ3MgJiBDSEVDS1BPSU5UX0lTX1NIVVRET1dO KSA/ICJzaHV0ZG93biAiIDogIiIsCisJCQkgKGZsYWdzICYgQ0hFQ0tQT0lOVF9FTkRfT0ZfUkVD T1ZFUlkpID8gImVuZC1vZi1yZWNvdmVyeSAiIDogIiIsCisJCQkgKGZsYWdzICYgQ0hFQ0tQT0lO VF9JTU1FRElBVEUpID8gImltbWVkaWF0ZSAiIDogIiIsCisJCQkgKGZsYWdzICYgQ0hFQ0tQT0lO VF9GT1JDRSkgPyAiZm9yY2UgIiA6ICIiLAorCQkJIChmbGFncyAmIENIRUNLUE9JTlRfV0FJVCkg PyAid2FpdCAiIDogIiIsCisJCQkgKGZsYWdzICYgQ0hFQ0tQT0lOVF9DQVVTRV9YTE9HKSA/ICJ3 YWwgIiA6ICIiLAorCQkJIChmbGFncyAmIENIRUNLUE9JTlRfQ0FVU0VfVElNRSkgPyAidGltZSAi IDogIiIsCisJCQkgKGZsYWdzICYgQ0hFQ0tQT0lOVF9GTFVTSF9BTEwpID8gImZsdXNoLWFsbCIg OiAiIik7CisKKwlQR19SRVRVUk5fVEVYVF9QKENTdHJpbmdHZXRUZXh0RGF0dW0oY2twdF9raW5k KSk7Cit9CisKKy8qCisgKiBSZXR1cm4gZWxhcHNlZCB0aW1lIChpbiBzZWNvbmRzKSBvZiB0aGUg Y2hlY2twb2ludC4KKyAqLworRGF0dW0KK3BnX3N0YXRfZ2V0X3Byb2dyZXNzX2NoZWNrcG9pbnRf ZWxhcHNlZChQR19GVU5DVElPTl9BUkdTKQoreworCVRpbWVzdGFtcFR6CQlzdGFydCA9IFBHX0dF VEFSR19JTlQ2NCgwKTsKKwlUaW1lc3RhbXBUegkJbm93ID0gR2V0Q3VycmVudFRpbWVzdGFtcCgp OworCWNoYXIJCQllbGFwc2VkX3RpbWVbTkFNRURBVEFMRU5dOworCWxvbmcgICAgCQlzZWNzOwor CWludCAgICAgCQl1c2VjczsKKworCVRpbWVzdGFtcERpZmZlcmVuY2Uoc3RhcnQsIG5vdywgJnNl Y3MsICZ1c2Vjcyk7CisJc25wcmludGYoZWxhcHNlZF90aW1lLCBzaXplb2YoZWxhcHNlZF90aW1l KSwgIiVsZC4lMDJkIHMiLCBzZWNzLAorCQkJICh1c2VjcyAvIDEwMDAwKSk7CisKKwlQR19SRVRV Uk5fVEVYVF9QKENTdHJpbmdHZXRUZXh0RGF0dW0oZWxhcHNlZF90aW1lKSk7Cit9ClwgTm8gbmV3 bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvYWNjZXNzL3hsb2cu aCBiL3NyYy9pbmNsdWRlL2FjY2Vzcy94bG9nLmgKaW5kZXggNGI0NWFjNjRkYi4uYzBhM2Y1NzY4 OSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvYWNjZXNzL3hsb2cuaAorKysgYi9zcmMvaW5jbHVk ZS9hY2Nlc3MveGxvZy5oCkBAIC0yODgsNiArMjg4LDEwIEBAIGV4dGVybiB2b2lkIGRvX3BnX2Fi b3J0X2JhY2t1cChpbnQgY29kZSwgRGF0dW0gYXJnKTsKIGV4dGVybiB2b2lkIHJlZ2lzdGVyX3Bl cnNpc3RlbnRfYWJvcnRfYmFja3VwX2hhbmRsZXIodm9pZCk7CiBleHRlcm4gU2Vzc2lvbkJhY2t1 cFN0YXRlIGdldF9iYWNrdXBfc3RhdHVzKHZvaWQpOwogCitleHRlcm4gdm9pZCBjaGVja3BvaW50 X3Byb2dyZXNzX3N0YXJ0KGludCBmbGFncyk7CitleHRlcm4gdm9pZCBjaGVja3BvaW50X3Byb2dy ZXNzX3VwZGF0ZV9wYXJhbShpbnQgaW5kZXgsIGludDY0IHZhbCk7CitleHRlcm4gdm9pZCBjaGVj a3BvaW50X3Byb2dyZXNzX2VuZCh2b2lkKTsKKwogLyogRmlsZSBwYXRoIG5hbWVzIChhbGwgcmVs YXRpdmUgdG8gJFBHREFUQSkgKi8KICNkZWZpbmUgUkVDT1ZFUllfU0lHTkFMX0ZJTEUJInJlY292 ZXJ5LnNpZ25hbCIKICNkZWZpbmUgU1RBTkRCWV9TSUdOQUxfRklMRQkJInN0YW5kYnkuc2lnbmFs IgpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdCBiL3NyYy9pbmNs dWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQKaW5kZXggN2YxZWU5N2Y1NS4uNDBmOTkzYzliMSAxMDA2 NDQKLS0tIGEvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdAorKysgYi9zcmMvaW5jbHVk ZS9jYXRhbG9nL3BnX3Byb2MuZGF0CkBAIC01MzUzLDYgKzUzNTMsMTUgQEAKICAgcHJvYXJnbW9k ZXMgPT4gJ3tpLG8sbyxvLG8sbyxvLG8sbyxvLG8sbyxvLG8sbyxvLG8sbyxvLG8sbyxvLG8sb30n LAogICBwcm9hcmduYW1lcyA9PiAne2NtZHR5cGUscGlkLGRhdGlkLHJlbGlkLHBhcmFtMSxwYXJh bTIscGFyYW0zLHBhcmFtNCxwYXJhbTUscGFyYW02LHBhcmFtNyxwYXJhbTgscGFyYW05LHBhcmFt MTAscGFyYW0xMSxwYXJhbTEyLHBhcmFtMTMscGFyYW0xNCxwYXJhbTE1LHBhcmFtMTYscGFyYW0x NyxwYXJhbTE4LHBhcmFtMTkscGFyYW0yMH0nLAogICBwcm9zcmMgPT4gJ3BnX3N0YXRfZ2V0X3By b2dyZXNzX2luZm8nIH0sCit7IG9pZCA9PiAnNTYwJywgZGVzY3IgPT4gJ3JldHVybiBjaGVja3Bv aW50IHR5cGUnLAorICBwcm9uYW1lID0+ICdwZ19zdGF0X2dldF9wcm9ncmVzc19jaGVja3BvaW50 X3R5cGUnLCBwcm9yZXR0eXBlID0+ICd0ZXh0JywKKyAgcHJvYXJndHlwZXMgPT4gJ2ludDgnLCBw cm9zcmMgPT4gJ3BnX3N0YXRfZ2V0X3Byb2dyZXNzX2NoZWNrcG9pbnRfdHlwZScgfSwKK3sgb2lk ID0+ICc1NjEnLCBkZXNjciA9PiAncmV0dXJuIGNoZWNrcG9pbnQga2luZCcsCisgIHByb25hbWUg PT4gJ3BnX3N0YXRfZ2V0X3Byb2dyZXNzX2NoZWNrcG9pbnRfa2luZCcsIHByb3JldHR5cGUgPT4g J3RleHQnLAorICBwcm9hcmd0eXBlcyA9PiAnaW50OCcsIHByb3NyYyA9PiAncGdfc3RhdF9nZXRf cHJvZ3Jlc3NfY2hlY2twb2ludF9raW5kJyB9LAoreyBvaWQgPT4gJzU2MicsIGRlc2NyID0+ICdy ZXR1cm4gZWxhcHNlZCB0aW1lIG9mIHRoZSBjaGVja3BvaW50JywKKyAgcHJvbmFtZSA9PiAncGdf c3RhdF9nZXRfcHJvZ3Jlc3NfY2hlY2twb2ludF9lbGFwc2VkJywgcHJvcmV0dHlwZSA9PiAndGV4 dCcsCisgIHByb2FyZ3R5cGVzID0+ICdpbnQ4JywgcHJvc3JjID0+ICdwZ19zdGF0X2dldF9wcm9n cmVzc19jaGVja3BvaW50X2VsYXBzZWQnIH0sCiB7IG9pZCA9PiAnMzA5OScsCiAgIGRlc2NyID0+ ICdzdGF0aXN0aWNzOiBpbmZvcm1hdGlvbiBhYm91dCBjdXJyZW50bHkgYWN0aXZlIHJlcGxpY2F0 aW9uJywKICAgcHJvbmFtZSA9PiAncGdfc3RhdF9nZXRfd2FsX3NlbmRlcnMnLCBwcm9yb3dzID0+ ICcxMCcsIHByb2lzc3RyaWN0ID0+ICdmJywKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2NvbW1h bmRzL3Byb2dyZXNzLmggYi9zcmMvaW5jbHVkZS9jb21tYW5kcy9wcm9ncmVzcy5oCmluZGV4IGEy ODkzOGNhZjQuLjE5NzM0NDA1ZWQgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2NvbW1hbmRzL3By b2dyZXNzLmgKKysrIGIvc3JjL2luY2x1ZGUvY29tbWFuZHMvcHJvZ3Jlc3MuaApAQCAtMTUxLDQg KzE1MSwzMiBAQAogI2RlZmluZSBQUk9HUkVTU19DT1BZX1RZUEVfUElQRSAzCiAjZGVmaW5lIFBS T0dSRVNTX0NPUFlfVFlQRV9DQUxMQkFDSyA0CiAKKy8qIFByb2dyZXNzIHBhcmFtZXRlcnMgZm9y IGNoZWNrcG9pbnQgKi8KKyNkZWZpbmUgUFJPR1JFU1NfQ0hFQ0tQT0lOVF9USU1FTElORSAgICAg ICAgICAgICAgICAwCisjZGVmaW5lIFBST0dSRVNTX0NIRUNLUE9JTlRfS0lORCAgICAgICAgICAg ICAgICAgICAgMQorI2RlZmluZSBQUk9HUkVTU19DSEVDS1BPSU5UX0xTTiAgICAgICAgICAgICAg ICAgICAgIDIKKyNkZWZpbmUgUFJPR1JFU1NfQ0hFQ0tQT0lOVF9TVEFSVF9USU1FU1RBTVAgICAg ICAgICAzCisjZGVmaW5lIFBST0dSRVNTX0NIRUNLUE9JTlRfUEhBU0UgICAgICAgICAgICAgICAg ICAgNAorI2RlZmluZSBQUk9HUkVTU19DSEVDS1BPSU5UX0JVRkZFUlNfVE9UQUwgICAgICAgICAg IDUKKyNkZWZpbmUgUFJPR1JFU1NfQ0hFQ0tQT0lOVF9CVUZGRVJTX1BST0NFU1NFRCAgICAgICA2 CisjZGVmaW5lIFBST0dSRVNTX0NIRUNLUE9JTlRfQlVGRkVSU19XUklUVEVOICAgICAgICAgNwor I2RlZmluZSBQUk9HUkVTU19DSEVDS1BPSU5UX0ZJTEVTX1RPVEFMICAgICAgICAgICAgIDgKKyNk ZWZpbmUgUFJPR1JFU1NfQ0hFQ0tQT0lOVF9GSUxFU19TWU5DRUQgICAgICAgICAgICA5CisKKy8q IFBoYXNlcyBvZiBjaGVja3BvaW50IChhcyBhZHZlcnRpc2VkIHZpYSBQUk9HUkVTU19DSEVDS1BP SU5UX1BIQVNFKSAqLworI2RlZmluZSBQUk9HUkVTU19DSEVDS1BPSU5UX1BIQVNFX0lOSVQgICAg ICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgUFJPR1JFU1NfQ0hFQ0tQT0lOVF9QSEFT RV9SRVBMSV9TTE9UUyAgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lIFBST0dSRVNTX0NIRUNL UE9JTlRfUEhBU0VfU05BUFNIT1RTICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBQUk9H UkVTU19DSEVDS1BPSU5UX1BIQVNFX0xPR0lDQUxfUkVXUklURV9NQVBQSU5HUyAgICAgIDMKKyNk ZWZpbmUgUFJPR1JFU1NfQ0hFQ0tQT0lOVF9QSEFTRV9DTE9HX1BBR0VTICAgICAgICAgICAgICAg ICAgICA0CisjZGVmaW5lIFBST0dSRVNTX0NIRUNLUE9JTlRfUEhBU0VfQ09NTUlUVFNfUEFHRVMg ICAgICAgICAgICAgICAgNQorI2RlZmluZSBQUk9HUkVTU19DSEVDS1BPSU5UX1BIQVNFX1NVQlRS QU5TX1BBR0VTICAgICAgICAgICAgICAgIDYKKyNkZWZpbmUgUFJPR1JFU1NfQ0hFQ0tQT0lOVF9Q SEFTRV9NVUxUSVhBQ1RfUEFHRVMgICAgICAgICAgICAgICA3CisjZGVmaW5lIFBST0dSRVNTX0NI RUNLUE9JTlRfUEhBU0VfU0xSVV9QQUdFUyAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBQ Uk9HUkVTU19DSEVDS1BPSU5UX1BIQVNFX0JVRkZFUlMgICAgICAgICAgICAgICAgICAgICAgIDkK KyNkZWZpbmUgUFJPR1JFU1NfQ0hFQ0tQT0lOVF9QSEFTRV9GSUxFX1NZTkMgICAgICAgICAgICAg ICAgICAgICAxMAorI2RlZmluZSBQUk9HUkVTU19DSEVDS1BPSU5UX1BIQVNFX1RXT19QSEFTRSAg ICAgICAgICAgICAgICAgICAgIDExCisjZGVmaW5lIFBST0dSRVNTX0NIRUNLUE9JTlRfUEhBU0Vf T0xEX1hMT0dfUkVDWUNMRSAgICAgICAgICAgICAgMTIKKyNkZWZpbmUgUFJPR1JFU1NfQ0hFQ0tQ T0lOVF9QSEFTRV9GSU5BTElaRSAgICAgICAgICAgICAgICAgICAgICAxMworCiAjZW5kaWYKZGlm ZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3V0aWxzL2JhY2tlbmRfcHJvZ3Jlc3MuaCBiL3NyYy9pbmNs dWRlL3V0aWxzL2JhY2tlbmRfcHJvZ3Jlc3MuaAppbmRleCA0N2JmODAyOWIwLi4wMmQ1MWZiOTQ4 IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS91dGlscy9iYWNrZW5kX3Byb2dyZXNzLmgKKysrIGIv c3JjL2luY2x1ZGUvdXRpbHMvYmFja2VuZF9wcm9ncmVzcy5oCkBAIC0yNyw3ICsyNyw4IEBAIHR5 cGVkZWYgZW51bSBQcm9ncmVzc0NvbW1hbmRUeXBlCiAJUFJPR1JFU1NfQ09NTUFORF9DTFVTVEVS LAogCVBST0dSRVNTX0NPTU1BTkRfQ1JFQVRFX0lOREVYLAogCVBST0dSRVNTX0NPTU1BTkRfQkFT RUJBQ0tVUCwKLQlQUk9HUkVTU19DT01NQU5EX0NPUFkKKwlQUk9HUkVTU19DT01NQU5EX0NPUFks CisJUFJPR1JFU1NfQ09NTUFORF9DSEVDS1BPSU5UCiB9IFByb2dyZXNzQ29tbWFuZFR5cGU7CiAK ICNkZWZpbmUgUEdTVEFUX05VTV9QUk9HUkVTU19QQVJBTQkyMApkaWZmIC0tZ2l0IGEvc3JjL3Rl c3QvcmVncmVzcy9leHBlY3RlZC9ydWxlcy5vdXQgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVk L3J1bGVzLm91dAppbmRleCAxNDIwMjg4ZDY3Li5mZTZlMzFjYTI3IDEwMDY0NAotLS0gYS9zcmMv dGVzdC9yZWdyZXNzL2V4cGVjdGVkL3J1bGVzLm91dAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL2V4 cGVjdGVkL3J1bGVzLm91dApAQCAtMTg5Nyw2ICsxODk3LDM5IEBAIHBnX3N0YXRfcHJvZ3Jlc3Nf YmFzZWJhY2t1cHwgU0VMRUNUIHMucGlkLAogICAgIHMucGFyYW00IEFTIHRhYmxlc3BhY2VzX3Rv dGFsLAogICAgIHMucGFyYW01IEFTIHRhYmxlc3BhY2VzX3N0cmVhbWVkCiAgICBGUk9NIHBnX3N0 YXRfZ2V0X3Byb2dyZXNzX2luZm8oJ0JBU0VCQUNLVVAnOjp0ZXh0KSBzKHBpZCwgZGF0aWQsIHJl bGlkLCBwYXJhbTEsIHBhcmFtMiwgcGFyYW0zLCBwYXJhbTQsIHBhcmFtNSwgcGFyYW02LCBwYXJh bTcsIHBhcmFtOCwgcGFyYW05LCBwYXJhbTEwLCBwYXJhbTExLCBwYXJhbTEyLCBwYXJhbTEzLCBw YXJhbTE0LCBwYXJhbTE1LCBwYXJhbTE2LCBwYXJhbTE3LCBwYXJhbTE4LCBwYXJhbTE5LCBwYXJh bTIwKTsKK3BnX3N0YXRfcHJvZ3Jlc3NfY2hlY2twb2ludHwgU0VMRUNUIHMucGlkLAorICAgIHBn X3N0YXRfZ2V0X3Byb2dyZXNzX2NoZWNrcG9pbnRfdHlwZShzLnBhcmFtMSkgQVMgdHlwZSwKKyAg ICBwZ19zdGF0X2dldF9wcm9ncmVzc19jaGVja3BvaW50X2tpbmQocy5wYXJhbTIpIEFTIGtpbmQs CisgICAgKCBTRUxFQ1QgKCcwLzAnOjpwZ19sc24gKyAoCisgICAgICAgICAgICAgICAgQ0FTRQor ICAgICAgICAgICAgICAgICAgICBXSEVOIChzdGF0Lmxzbl9pbnQ2NCA8IDApIFRIRU4gcG93KCgy KTo6bnVtZXJpYywgKDY0KTo6bnVtZXJpYykKKyAgICAgICAgICAgICAgICAgICAgRUxTRSAoMCk6 Om51bWVyaWMKKyAgICAgICAgICAgICAgICBFTkQgKyAoc3RhdC5sc25faW50NjQpOjpudW1lcmlj KSkKKyAgICAgICAgICAgRlJPTSAoIFNFTEVDVCBzLnBhcmFtMykgc3RhdChsc25faW50NjQpKSBB UyBzdGFydF9sc24sCisgICAgcGdfc3RhdF9nZXRfcHJvZ3Jlc3NfY2hlY2twb2ludF9lbGFwc2Vk KHMucGFyYW00KSBBUyBlbGFwc2VkX3RpbWUsCisgICAgICAgIENBU0Ugcy5wYXJhbTUKKyAgICAg ICAgICAgIFdIRU4gMCBUSEVOICdpbml0aWFsaXppbmcnOjp0ZXh0CisgICAgICAgICAgICBXSEVO IDEgVEhFTiAnY2hlY2twb2ludGluZyByZXBsaWNhdGlvbiBzbG90cyc6OnRleHQKKyAgICAgICAg ICAgIFdIRU4gMiBUSEVOICdjaGVja3BvaW50aW5nIHNuYXBzaG90cyc6OnRleHQKKyAgICAgICAg ICAgIFdIRU4gMyBUSEVOICdjaGVja3BvaW50aW5nIGxvZ2ljYWwgcmV3cml0ZSBtYXBwaW5ncyc6 OnRleHQKKyAgICAgICAgICAgIFdIRU4gNCBUSEVOICdjaGVja3BvaW50aW5nIENMT0cgcGFnZXMn Ojp0ZXh0CisgICAgICAgICAgICBXSEVOIDUgVEhFTiAnY2hlY2twb2ludGluZyBDb21taXRUcyBw YWdlcyc6OnRleHQKKyAgICAgICAgICAgIFdIRU4gNiBUSEVOICdjaGVja3BvaW50aW5nIFNVQlRS QU5TIHBhZ2VzJzo6dGV4dAorICAgICAgICAgICAgV0hFTiA3IFRIRU4gJ2NoZWNrcG9pbnRpbmcg TVVMVElYQUNUIHBhZ2VzJzo6dGV4dAorICAgICAgICAgICAgV0hFTiA4IFRIRU4gJ2NoZWNrcG9p bnRpbmcgU0xSVSBwYWdlcyc6OnRleHQKKyAgICAgICAgICAgIFdIRU4gOSBUSEVOICdjaGVja3Bv aW50aW5nIGJ1ZmZlcnMnOjp0ZXh0CisgICAgICAgICAgICBXSEVOIDEwIFRIRU4gJ3BlcmZvcm1p bmcgc3luYyByZXF1ZXN0cyc6OnRleHQKKyAgICAgICAgICAgIFdIRU4gMTEgVEhFTiAncGVyZm9y bWluZyB0d28gcGhhc2UgY2hlY2twb2ludCc6OnRleHQKKyAgICAgICAgICAgIFdIRU4gMTIgVEhF TiAncmVjeWNsaW5nIG9sZCBYTE9HIGZpbGVzJzo6dGV4dAorICAgICAgICAgICAgV0hFTiAxMyBU SEVOICdGaW5hbGl6aW5nJzo6dGV4dAorICAgICAgICAgICAgRUxTRSBOVUxMOjp0ZXh0CisgICAg ICAgIEVORCBBUyBwaGFzZSwKKyAgICBzLnBhcmFtNiBBUyB0b3RhbF9idWZmZXJfd3JpdGVzLAor ICAgIHMucGFyYW03IEFTIGJ1ZmZlcnNfcHJvY2Vzc2VkLAorICAgIHMucGFyYW04IEFTIGJ1ZmZl cnNfd3JpdHRlbiwKKyAgICBzLnBhcmFtOSBBUyB0b3RhbF9maWxlX3N5bmNzLAorICAgIHMucGFy YW0xMCBBUyBmaWxlc19zeW5jZWQKKyAgIEZST00gcGdfc3RhdF9nZXRfcHJvZ3Jlc3NfaW5mbygn Q0hFQ0tQT0lOVCc6OnRleHQpIHMocGlkLCBkYXRpZCwgcmVsaWQsIHBhcmFtMSwgcGFyYW0yLCBw YXJhbTMsIHBhcmFtNCwgcGFyYW01LCBwYXJhbTYsIHBhcmFtNywgcGFyYW04LCBwYXJhbTksIHBh cmFtMTAsIHBhcmFtMTEsIHBhcmFtMTIsIHBhcmFtMTMsIHBhcmFtMTQsIHBhcmFtMTUsIHBhcmFt MTYsIHBhcmFtMTcsIHBhcmFtMTgsIHBhcmFtMTksIHBhcmFtMjApOwogcGdfc3RhdF9wcm9ncmVz c19jbHVzdGVyfCBTRUxFQ1Qgcy5waWQsCiAgICAgcy5kYXRpZCwKICAgICBkLmRhdG5hbWUsCi0t IAoyLjI1LjEKCg== --0000000000003a3f3205d8af7285--