<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<!DOCTYPE bugzilla SYSTEM "https://bugs.webkit.org/page.cgi?id=bugzilla.dtd">

<bugzilla version="5.0.4.1"
          urlbase="https://bugs.webkit.org/"
          
          maintainer="admin@webkit.org"
>

    <bug>
          <bug_id>232962</bug_id>
          
          <creation_ts>2021-11-10 12:21:21 -0800</creation_ts>
          <short_desc>Add WTF::String::utf8Length and use it to allocate correct size buffer when converting to UTF-8</short_desc>
          <delta_ts>2021-11-29 20:56:43 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>NEW</bug_status>
          <resolution></resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Alex Christensen">achristensen</reporter>
          <assigned_to name="Alex Christensen">achristensen</assigned_to>
          <cc>ap</cc>
    
    <cc>benjamin</cc>
    
    <cc>cdumez</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>darin</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>saam</cc>
    
    <cc>tzagallo</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1813748</commentid>
    <comment_count>0</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2021-11-10 12:21:21 -0800</bug_when>
    <thetext>Add WTF::String::utf8Length and use it to allocate correct size buffer when converting to UTF-8</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1813750</commentid>
    <comment_count>1</comment_count>
      <attachid>443845</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2021-11-10 12:22:39 -0800</bug_when>
    <thetext>Created attachment 443845
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1813756</commentid>
    <comment_count>2</comment_count>
      <attachid>443848</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2021-11-10 12:32:10 -0800</bug_when>
    <thetext>Created attachment 443848
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1813790</commentid>
    <comment_count>3</comment_count>
      <attachid>443848</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-11-10 14:10:24 -0800</bug_when>
    <thetext>Comment on attachment 443848
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=443848&amp;action=review

&gt; Source/JavaScriptCore/ChangeLog:3
&gt; +        Add WTF::String::utf8Length and use it to allocate correct size buffer when converting to UTF-8

Is scanning the characters twice to compute the length and then convert better for performance? Did you measure?

&gt; Source/WTF/wtf/unicode/UTF8Conversion.cpp:46
&gt; +        uint8_t buffer[U8_MAX_LENGTH];
&gt; +        int32_t i = 0;
&gt; +        // All 256 possible code points are valid, and the buffer is always big enough,
&gt; +        // so it&apos;s safe to use U8_APPEND_UNSAFE.
&gt; +        U8_APPEND_UNSAFE(buffer, i, *source);
&gt; +        length += i;

Why use U8_APPEND_UNSAFE instead of U8_LENGTH?

&gt; Source/WTF/wtf/unicode/UTF8Conversion.cpp:75
&gt; +    const UChar* source = sourceStart;
&gt; +    while (source &lt; sourceEnd) {

Going with the flow of the U16_NEXT macro, we would use sourceStart and j, and not need a source pointer.

&gt; Source/WTF/wtf/unicode/UTF8Conversion.cpp:78
&gt; +        U16_NEXT(source, j, sourceEnd - source, ch);

Is this fast enough? Should we make a faster version for when there are no surrogates at all?

&gt; Source/WTF/wtf/unicode/UTF8Conversion.cpp:93
&gt; +        // We already checked that ch is a valid code point, and the buffer is always big enough,
&gt; +        // so it&apos;s safe to use U8_APPEND_UNSAFE.
&gt; +        uint8_t buffer[U8_MAX_LENGTH];
&gt; +        int32_t i = 0;
&gt; +        U8_APPEND_UNSAFE(buffer, i, ch);
&gt; +        length += i;

Why use U8_APPEND_UNSAFE instead of U8_LENGTH?

&gt; Source/WTF/wtf/unicode/UTF8Conversion.h:35
&gt;      ConversionOK, // conversion successful

I’d rename this to just &quot;OK&quot; or &quot;Success&quot; when making this an enum class. Conversion::Conversion is inelegant.

&gt; Source/WTF/wtf/unicode/UTF8Conversion.h:50
&gt; +WTF_EXPORT_PRIVATE size_t latin1ToUTF8Length(const LChar* sourceStart, const LChar* sourceEnd);

I don’t totally love this name, and it’s not quite as nice about the other names in this header. Maybe I would call it something closer to lengthLatin1AsUTF8 or lengthUTF8FromLatin1. I like having length be the first word.

&gt; Source/WTF/wtf/unicode/UTF8Conversion.h:52
&gt; +WTF_EXPORT_PRIVATE size_t utf16ToUTF8Length(const UChar* sourceStart, const UChar* sourceEnd, bool strict = true);

And lengthUTF8FromUTF16 maybe?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1813803</commentid>
    <comment_count>4</comment_count>
      <attachid>443867</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2021-11-10 14:42:33 -0800</bug_when>
    <thetext>Created attachment 443867
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1813804</commentid>
    <comment_count>5</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2021-11-10 14:44:11 -0800</bug_when>
    <thetext>(didn&apos;t respond to feedback yet, just trying to get it to compile and not crash)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1813818</commentid>
    <comment_count>6</comment_count>
      <attachid>443867</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2021-11-10 15:33:46 -0800</bug_when>
    <thetext>Comment on attachment 443867
Patch

Also needs MUCH better tests.  Will do later</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1813821</commentid>
    <comment_count>7</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2021-11-10 15:47:15 -0800</bug_when>
    <thetext>(In reply to Darin Adler from comment #3)
&gt; Comment on attachment 443848 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=443848&amp;action=review
&gt; 
&gt; &gt; Source/JavaScriptCore/ChangeLog:3
&gt; &gt; +        Add WTF::String::utf8Length and use it to allocate correct size buffer when converting to UTF-8
&gt; 
&gt; Is scanning the characters twice to compute the length and then convert
&gt; better for performance? Did you measure?

Operations needed to UTF-8 encode a string before this patch:
1. Read each character
2. Encode each character
3. Write each converted character
4. memcpy (another read and write) converted characters to another buffer
Allocations: 1 or 2

After this patch:
1. Read each character
2. Encode each character
3. Read each character
4. Encode each character again
5. Write each converted character
Allocations: 1

I&apos;m definitely planning to measure the performance of long/short/ascii/latin1/utf16 strings on different chips to be sure, but depending on the ratio of memcpy speed to encoding speed and allocation speed I think this may be a win in most cases.  There is definitely always one fewer write operation per character after this change.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1813828</commentid>
    <comment_count>8</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-11-10 15:59:09 -0800</bug_when>
    <thetext>(In reply to Alex Christensen from comment #7)
&gt; I&apos;m definitely planning to measure the performance of
&gt; long/short/ascii/latin1/utf16 strings on different chips to be sure, but
&gt; depending on the ratio of memcpy speed to encoding speed and allocation
&gt; speed I think this may be a win in most cases.

Makes sense.

If we were always doing an allocation, then I’m sure this would be a win because fastMalloc/free is quite costly. Not as sure for smaller strings where we don’t do any extra allocation.

I hope it’s always faster.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1816053</commentid>
    <comment_count>9</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-11-17 12:22:21 -0800</bug_when>
    <thetext>&lt;rdar://problem/85515842&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1818514</commentid>
    <comment_count>10</comment_count>
      <attachid>445357</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2021-11-29 15:45:27 -0800</bug_when>
    <thetext>Created attachment 445357
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1818593</commentid>
    <comment_count>11</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2021-11-29 20:56:43 -0800</bug_when>
    <thetext>Performance measurements indicate that this is a performance regression.  It&apos;s hard to beat memcpy.
I broke out the code cleanup and a slight optimization into https://bugs.webkit.org/show_bug.cgi?id=233612
I&apos;ll use this bug to add String::utf8Length but not use it in String::utf8 once that&apos;s  landed.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>443845</attachid>
            <date>2021-11-10 12:22:39 -0800</date>
            <delta_ts>2021-11-10 12:34:09 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-232962-20211110122239.patch</filename>
            <type>text/plain</type>
            <size>21040</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg1NTg4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDFhNGE1NTdlZjZjNDUwMmNlMjY5NTJi
MzVmOWM1MDBiN2FjNzQyNjAuLjE3MzdmODIwZjlkNjk0Y2NkMTYyN2U5OWI2Y2YxMDkyMTY2NzIw
OGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMzMgQEAKKzIwMjEtMTEtMTAgIEFsZXggQ2hyaXN0ZW5zZW4gIDxh
Y2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4KKworICAgICAgICBBZGQgV1RGOjpTdHJpbmc6OnV0ZjhM
ZW5ndGggYW5kIHVzZSBpdCB0byBhbGxvY2F0ZSBjb3JyZWN0IHNpemUgYnVmZmVyIHdoZW4gY29u
dmVydGluZyB0byBVVEYtOAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MjMyOTYyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgU3RyaWN0Q29udmVyc2lvblJlcGxhY2luZ1VucGFpcmVkU3Vycm9nYXRlc1dpdGhG
RkZEIGlzIHVuc3VwcG9ydGVkIGFuZCBvbmx5IHVzZWQgaW4gd2ViIHNvY2tldCBjb2RlLgorCisg
ICAgICAgICogd3RmL3RleHQvU3RyaW5nSW1wbC5jcHA6CisgICAgICAgIChXVEY6OnB1dFVURjhU
cmlwbGUpOgorICAgICAgICAoV1RGOjpTdHJpbmdJbXBsOjp1dGY4Rm9yQ2hhcmFjdGVycyk6Cisg
ICAgICAgIChXVEY6OlN0cmluZ0ltcGw6OnRyeUdldFV0ZjggY29uc3QpOgorICAgICAgICAoV1RG
OjpTdHJpbmdJbXBsOjp1dGY4IGNvbnN0KToKKyAgICAgICAgKFdURjo6U3RyaW5nSW1wbDo6dXRm
OExlbmd0aCBjb25zdCk6CisgICAgICAgIChXVEY6OlN0cmluZ0ltcGw6OnV0ZjhJbXBsKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdURjo6U3RyaW5nSW1wbDo6dHJ5R2V0VXRmOEZvclJhbmdlIGNvbnN0
KTogRGVsZXRlZC4KKyAgICAgICAgKiB3dGYvdGV4dC9TdHJpbmdJbXBsLmg6CisgICAgICAgICog
d3RmL3RleHQvVVRGOENvbnZlcnNpb25FcnJvci5oOgorICAgICAgICAqIHd0Zi90ZXh0L1dURlN0
cmluZy5jcHA6CisgICAgICAgIChXVEY6OlN0cmluZzo6dXRmOExlbmd0aCBjb25zdCk6CisgICAg
ICAgICogd3RmL3RleHQvV1RGU3RyaW5nLmg6CisgICAgICAgICogd3RmL3VuaWNvZGUvVVRGOENv
bnZlcnNpb24uY3BwOgorICAgICAgICAoV1RGOjpVbmljb2RlOjpsYXRpbjFUb1VURjhMZW5ndGgp
OgorICAgICAgICAoV1RGOjpVbmljb2RlOjpjb252ZXJ0TGF0aW4xVG9VVEY4KToKKyAgICAgICAg
KFdURjo6VW5pY29kZTo6dXRmMTZUb1VURjhMZW5ndGgpOgorICAgICAgICAoV1RGOjpVbmljb2Rl
Ojpjb252ZXJ0VVRGMTZUb1VURjgpOgorICAgICAgICAqIHd0Zi91bmljb2RlL1VURjhDb252ZXJz
aW9uLmg6CisgICAgICAgICgpOiBEZWxldGVkLgorCiAyMDIxLTExLTEwICBEYXJpbiBBZGxlciAg
PGRhcmluQGFwcGxlLmNvbT4KIAogICAgICAgICBbQ0ZdIFJlZHVjZSBkdXBsaWNhdGlvbiBhbmQg
dW5uZWVkZWQgYnVmZmVyIGFsbG9jYXRpb25zIGFuZCBjb3B5aW5nIGluIFVSTCBjb2RlLCBhbHNv
IHJlbW92ZSB1bnVzZWQgbWV0aG9kcyBhbmQgZnVuY3Rpb25zCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V1RGL3d0Zi90ZXh0L1N0cmluZ0ltcGwuY3BwIGIvU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdJ
bXBsLmNwcAppbmRleCBkNTg0NTEwMGNlMjYxYTI4NjJkYjRhMTBmNmY4MjEyZDM5YWZlMjYyLi5j
NzcxMGE4ZmE4NTdhYWY5ZDBhNWU5ZDlmZmVlMWRkYzg1Yjg2ZTIyIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV1RGL3d0Zi90ZXh0L1N0cmluZ0ltcGwuY3BwCisrKyBiL1NvdXJjZS9XVEYvd3RmL3RleHQv
U3RyaW5nSW1wbC5jcHAKQEAgLTE2NjQsMTQgKzE2NjQsMjMgQEAgc2l6ZV90IFN0cmluZ0ltcGw6
OnNpemVJbkJ5dGVzKCkgY29uc3QKIHN0YXRpYyBpbmxpbmUgdm9pZCBwdXRVVEY4VHJpcGxlKGNo
YXIqJiBidWZmZXIsIFVDaGFyIGNoYXJhY3RlcikKIHsKICAgICBBU1NFUlQoY2hhcmFjdGVyID49
IDB4MDgwMCk7Ci0gICAgKmJ1ZmZlcisrID0gc3RhdGljX2Nhc3Q8Y2hhcj4oKChjaGFyYWN0ZXIg
Pj4gMTIpICYgMHgwRikgfCAweEUwKTsKLSAgICAqYnVmZmVyKysgPSBzdGF0aWNfY2FzdDxjaGFy
PigoKGNoYXJhY3RlciA+PiA2KSAmIDB4M0YpIHwgMHg4MCk7Ci0gICAgKmJ1ZmZlcisrID0gc3Rh
dGljX2Nhc3Q8Y2hhcj4oKGNoYXJhY3RlciAmIDB4M0YpIHwgMHg4MCk7CisgICAgaW50IGkgPSAw
OworICAgIFU4X0FQUEVORF9VTlNBRkUoYnVmZmVyLCBpLCBjaGFyYWN0ZXIpOworICAgIEFTU0VS
VChpID09IDMpOwogfQogCi1VVEY4Q29udmVyc2lvbkVycm9yIFN0cmluZ0ltcGw6OnV0ZjhJbXBs
KGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgsIGNoYXIqJiBidWZmZXIs
IHNpemVfdCBidWZmZXJTaXplLCBDb252ZXJzaW9uTW9kZSBtb2RlKQorRXhwZWN0ZWQ8Q1N0cmlu
ZywgVVRGOENvbnZlcnNpb25FcnJvcj4gU3RyaW5nSW1wbDo6dXRmOEZvckNoYXJhY3RlcnMoY29u
c3QgVUNoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCwgQ29udmVyc2lvbk1vZGUgbW9k
ZSkKIHsKLSAgICBpZiAobW9kZSA9PSBTdHJpY3RDb252ZXJzaW9uUmVwbGFjaW5nVW5wYWlyZWRT
dXJyb2dhdGVzV2l0aEZGRkQpIHsKKyAgICBpZiAoIWxlbmd0aCkKKyAgICAgICAgcmV0dXJuIENT
dHJpbmcoIiIsIDApOworCisgICAgc3dpdGNoIChtb2RlKSB7CisgICAgY2FzZSBTdHJpY3RDb252
ZXJzaW9uUmVwbGFjaW5nVW5wYWlyZWRTdXJyb2dhdGVzV2l0aEZGRkQ6IHsKKyAgICAgICAgaWYg
KGxlbmd0aCA+IE1heExlbmd0aCAvIDMpCisgICAgICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0
ZWQoVVRGOENvbnZlcnNpb25FcnJvcjo6T3V0T2ZNZW1vcnkpOworICAgICAgICBzaXplX3QgYnVm
ZmVyU2l6ZSA9IGxlbmd0aCAqIDM7CisgICAgICAgIFZlY3RvcjxjaGFyLCAxMDI0PiBidWZmZXJW
ZWN0b3IoYnVmZmVyU2l6ZSk7CisgICAgICAgIGNoYXIqIGJ1ZmZlciA9IGJ1ZmZlclZlY3Rvci5k
YXRhKCk7CiAgICAgICAgIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzRW5kID0gY2hhcmFjdGVycyAr
IGxlbmd0aDsKICAgICAgICAgY2hhciogYnVmZmVyRW5kID0gYnVmZmVyICsgYnVmZmVyU2l6ZTsK
ICAgICAgICAgd2hpbGUgKGNoYXJhY3RlcnMgPCBjaGFyYWN0ZXJzRW5kKSB7CkBAIC0xNjgwLDcg
KzE2ODksNyBAQCBVVEY4Q29udmVyc2lvbkVycm9yIFN0cmluZ0ltcGw6OnV0ZjhJbXBsKGNvbnN0
IFVDaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5ndAogICAgICAgICAgICAgQVNTRVJUKHJl
c3VsdCAhPSBUYXJnZXRFeGhhdXN0ZWQpOwogICAgICAgICAgICAgLy8gQ29udmVyc2lvbiBmYWls
cyB3aGVuIHRoZXJlIGlzIGFuIHVucGFpcmVkIHN1cnJvZ2F0ZS4KICAgICAgICAgICAgIC8vIFB1
dCByZXBsYWNlbWVudCBjaGFyYWN0ZXIgKFUrRkZGRCkgaW5zdGVhZCBvZiB0aGUgdW5wYWlyZWQg
c3Vycm9nYXRlLgotICAgICAgICAgICAgaWYgKHJlc3VsdCAhPSBDb252ZXJzaW9uT0spIHsKKyAg
ICAgICAgICAgIGlmIChyZXN1bHQgIT0gQ29udmVyc2lvblJlc3VsdDo6Q29udmVyc2lvbk9LKSB7
CiAgICAgICAgICAgICAgICAgQVNTRVJUKCgweEQ4MDAgPD0gKmNoYXJhY3RlcnMgJiYgKmNoYXJh
Y3RlcnMgPD0gMHhERkZGKSk7CiAgICAgICAgICAgICAgICAgLy8gVGhlcmUgc2hvdWxkIGJlIHJv
b20gbGVmdCwgc2luY2Ugb25lIFVDaGFyIGhhc24ndCBiZWVuIGNvbnZlcnRlZC4KICAgICAgICAg
ICAgICAgICBBU1NFUlQoKGJ1ZmZlciArIDMpIDw9IGJ1ZmZlckVuZCk7CkBAIC0xNjg4LDExNSAr
MTY5Nyw4MyBAQCBVVEY4Q29udmVyc2lvbkVycm9yIFN0cmluZ0ltcGw6OnV0ZjhJbXBsKGNvbnN0
IFVDaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5ndAogICAgICAgICAgICAgICAgICsrY2hh
cmFjdGVyczsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgIH0gZWxzZSB7CisgICAgICAg
IHJldHVybiBDU3RyaW5nKGJ1ZmZlclZlY3Rvci5kYXRhKCksIGJ1ZmZlciAtIGJ1ZmZlclZlY3Rv
ci5kYXRhKCkpOworICAgIH0KKyAgICBjYXNlIFN0cmljdENvbnZlcnNpb246CisgICAgY2FzZSBM
ZW5pZW50Q29udmVyc2lvbjogewogICAgICAgICBib29sIHN0cmljdCA9IG1vZGUgPT0gU3RyaWN0
Q29udmVyc2lvbjsKLSAgICAgICAgY29uc3QgVUNoYXIqIG9yaWdpbmFsQ2hhcmFjdGVycyA9IGNo
YXJhY3RlcnM7Ci0gICAgICAgIGF1dG8gcmVzdWx0ID0gY29udmVydFVURjE2VG9VVEY4KCZjaGFy
YWN0ZXJzLCBjaGFyYWN0ZXJzICsgbGVuZ3RoLCAmYnVmZmVyLCBidWZmZXIgKyBidWZmZXJTaXpl
LCBzdHJpY3QpOwotICAgICAgICBBU1NFUlQocmVzdWx0ICE9IFRhcmdldEV4aGF1c3RlZCk7IC8v
IChsZW5ndGggKiAzKSBzaG91bGQgYmUgc3VmZmljaWVudCBmb3IgYW55IGNvbnZlcnNpb24KLQot
ICAgICAgICAvLyBPbmx5IHByb2R1Y2VkIGZyb20gc3RyaWN0IGNvbnZlcnNpb24uCi0gICAgICAg
IGlmIChyZXN1bHQgPT0gU291cmNlSWxsZWdhbCkgewotICAgICAgICAgICAgQVNTRVJUKHN0cmlj
dCk7Ci0gICAgICAgICAgICByZXR1cm4gVVRGOENvbnZlcnNpb25FcnJvcjo6SWxsZWdhbFNvdXJj
ZTsKKyAgICAgICAgYXV0byBjb252ZXJ0ZWRMZW5ndGggPSB1dGYxNlRvVVRGOExlbmd0aChjaGFy
YWN0ZXJzLCBjaGFyYWN0ZXJzICsgbGVuZ3RoLCBzdHJpY3QpOworICAgICAgICBpZiAoY29udmVy
dGVkTGVuZ3RoID4gTWF4TGVuZ3RoKQorICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVk
KFVURjhDb252ZXJzaW9uRXJyb3I6Ok91dE9mTWVtb3J5KTsKKyAgICAgICAgaWYgKCFjb252ZXJ0
ZWRMZW5ndGgpCisgICAgICAgICAgICByZXR1cm4gQ1N0cmluZygiIiwgMCk7CisKKyAgICAgICAg
Y2hhciogZGVzdGluYXRpb247CisgICAgICAgIGF1dG8gcmVzdWx0ID0gQ1N0cmluZzo6bmV3VW5p
bml0aWFsaXplZChjb252ZXJ0ZWRMZW5ndGgsIGRlc3RpbmF0aW9uKTsKKyAgICAgICAgY2hhciog
ZGVzdGluYXRpb25FbmQgPSBkZXN0aW5hdGlvbiArIGNvbnZlcnRlZExlbmd0aDsKKyAgICAgICAg
Y29uc3QgVUNoYXIqIGNoYXJhY3RlcnNFbmQgPSBjaGFyYWN0ZXJzICsgbGVuZ3RoOworICAgICAg
ICBhdXRvIGNvbnZlcnNpb25SZXN1bHQgPSBjb252ZXJ0VVRGMTZUb1VURjgoJmNoYXJhY3RlcnMs
IGNoYXJhY3RlcnNFbmQsICZkZXN0aW5hdGlvbiwgZGVzdGluYXRpb25FbmQpOworICAgICAgICBz
d2l0Y2ggKGNvbnZlcnNpb25SZXN1bHQpIHsKKyAgICAgICAgY2FzZSBDb252ZXJzaW9uUmVzdWx0
OjpDb252ZXJzaW9uT0s6CisgICAgICAgICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKGRlc3RpbmF0
aW9uID09IGRlc3RpbmF0aW9uRW5kLCAiSWYgY29udmVydGVkTGVuZ3RoIHdhcyBjYWxjdWxhdGVk
IGNvcnJlY3RseSwgd2Ugc2hvdWxkIGFsd2F5cyB1c2UgZXhhY3RseSB0aGUgd2hvbGUgZGVzdGlu
YXRpb24gYnVmZmVyIik7CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICBjYXNl
IENvbnZlcnNpb25SZXN1bHQ6OlNvdXJjZUV4aGF1c3RlZDoKKyAgICAgICAgICAgIEFTU0VSVCgh
c3RyaWN0KTsKKyAgICAgICAgICAgIEFTU0VSVChjaGFyYWN0ZXJzICsgMSA9PSBjaGFyYWN0ZXJz
RW5kKTsKKyAgICAgICAgICAgIEFTU0VSVCgoMHhEODAwIDw9ICpjaGFyYWN0ZXJzICYmICpjaGFy
YWN0ZXJzIDw9IDB4REZGRikpOworICAgICAgICAgICAgcHV0VVRGOFRyaXBsZShkZXN0aW5hdGlv
biwgKmNoYXJhY3RlcnMpOworICAgICAgICAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRShkZXN0aW5h
dGlvbiA9PSBkZXN0aW5hdGlvbkVuZCwgIklmIGNvbnZlcnRlZExlbmd0aCB3YXMgY2FsY3VsYXRl
ZCBjb3JyZWN0bHksIHdlIHNob3VsZCBhbHdheXMgdXNlIGV4YWN0bHkgdGhlIHdob2xlIGRlc3Rp
bmF0aW9uIGJ1ZmZlciIpOworICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKFVURjhD
b252ZXJzaW9uRXJyb3I6OlNvdXJjZUV4aGF1c3RlZCk7CisgICAgICAgIGNhc2UgQ29udmVyc2lv
blJlc3VsdDo6VGFyZ2V0RXhoYXVzdGVkOgorICAgICAgICBjYXNlIENvbnZlcnNpb25SZXN1bHQ6
OlNvdXJjZUlsbGVnYWw6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OwogICAgICAgICB9Ci0KLSAgICAgICAgLy8gQ2hlY2sgZm9yIGFuIHVuY29udmVydGVkIGhpZ2gg
c3Vycm9nYXRlLgotICAgICAgICBpZiAocmVzdWx0ID09IFNvdXJjZUV4aGF1c3RlZCkgewotICAg
ICAgICAgICAgaWYgKHN0cmljdCkKLSAgICAgICAgICAgICAgICByZXR1cm4gVVRGOENvbnZlcnNp
b25FcnJvcjo6U291cmNlRXhoYXVzdGVkOwotICAgICAgICAgICAgLy8gVGhpcyBzaG91bGQgYmUg
b25lIHVucGFpcmVkIGhpZ2ggc3Vycm9nYXRlLiBUcmVhdCBpdCB0aGUgc2FtZQotICAgICAgICAg
ICAgLy8gd2FzIGFzIGFuIHVucGFpcmVkIGhpZ2ggc3Vycm9nYXRlIHdvdWxkIGhhdmUgYmVlbiBo
YW5kbGVkIGluCi0gICAgICAgICAgICAvLyB0aGUgbWlkZGxlIG9mIGEgc3RyaW5nIHdpdGggbm9u
LXN0cmljdCBjb252ZXJzaW9uIC0gd2hpY2ggaXMKLSAgICAgICAgICAgIC8vIHRvIHNheSwgc2lt
cGx5IGVuY29kZSBpdCB0byBVVEYtOC4KLSAgICAgICAgICAgIEFTU0VSVF9VTlVTRUQoCi0gICAg
ICAgICAgICAgICAgb3JpZ2luYWxDaGFyYWN0ZXJzLCAoY2hhcmFjdGVycyArIDEpID09IChvcmln
aW5hbENoYXJhY3RlcnMgKyBsZW5ndGgpKTsKLSAgICAgICAgICAgIEFTU0VSVCgoKmNoYXJhY3Rl
cnMgPj0gMHhEODAwKSAmJiAoKmNoYXJhY3RlcnMgPD0gMHhEQkZGKSk7Ci0gICAgICAgICAgICAv
LyBUaGVyZSBzaG91bGQgYmUgcm9vbSBsZWZ0LCBzaW5jZSBvbmUgVUNoYXIgaGFzbid0IGJlZW4g
Y29udmVydGVkLgotICAgICAgICAgICAgQVNTRVJUKChidWZmZXIgKyAzKSA8PSAoYnVmZmVyICsg
YnVmZmVyU2l6ZSkpOwotICAgICAgICAgICAgcHV0VVRGOFRyaXBsZShidWZmZXIsICpjaGFyYWN0
ZXJzKTsKICAgICAgICAgfQogICAgIH0KLSAgICAKLSAgICByZXR1cm4gVVRGOENvbnZlcnNpb25F
cnJvcjo6Tm9uZTsKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4geyB9Owog
fQogCi1FeHBlY3RlZDxDU3RyaW5nLCBVVEY4Q29udmVyc2lvbkVycm9yPiBTdHJpbmdJbXBsOjp1
dGY4Rm9yQ2hhcmFjdGVycyhjb25zdCBMQ2hhciogY2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3Ro
KQorRXhwZWN0ZWQ8Q1N0cmluZywgVVRGOENvbnZlcnNpb25FcnJvcj4gU3RyaW5nSW1wbDo6dXRm
OEZvckNoYXJhY3RlcnMoY29uc3QgTENoYXIqIHNvdXJjZSwgdW5zaWduZWQgbGVuZ3RoKQogewog
ICAgIGlmICghbGVuZ3RoKQogICAgICAgICByZXR1cm4gQ1N0cmluZygiIiwgMCk7Ci0gICAgaWYg
KGxlbmd0aCA+IE1heExlbmd0aCAvIDMpCi0gICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChV
VEY4Q29udmVyc2lvbkVycm9yOjpPdXRPZk1lbW9yeSk7Ci0gICAgVmVjdG9yPGNoYXIsIDEwMjQ+
IGJ1ZmZlclZlY3RvcihsZW5ndGggKiAzKTsKLSAgICBjaGFyKiBidWZmZXIgPSBidWZmZXJWZWN0
b3IuZGF0YSgpOwotICAgIGNvbnN0IExDaGFyKiBzb3VyY2UgPSBjaGFyYWN0ZXJzOwotICAgIGJv
b2wgc3VjY2VzcyA9IGNvbnZlcnRMYXRpbjFUb1VURjgoJnNvdXJjZSwgc291cmNlICsgbGVuZ3Ro
LCAmYnVmZmVyLCBidWZmZXIgKyBidWZmZXJWZWN0b3Iuc2l6ZSgpKTsKLSAgICBBU1NFUlRfVU5V
U0VEKHN1Y2Nlc3MsIHN1Y2Nlc3MpOyAvLyAobGVuZ3RoICogMykgc2hvdWxkIGJlIHN1ZmZpY2ll
bnQgZm9yIGFueSBjb252ZXJzaW9uCi0gICAgcmV0dXJuIENTdHJpbmcoYnVmZmVyVmVjdG9yLmRh
dGEoKSwgYnVmZmVyIC0gYnVmZmVyVmVjdG9yLmRhdGEoKSk7Ci19CiAKLUV4cGVjdGVkPENTdHJp
bmcsIFVURjhDb252ZXJzaW9uRXJyb3I+IFN0cmluZ0ltcGw6OnV0ZjhGb3JDaGFyYWN0ZXJzKGNv
bnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgsIENvbnZlcnNpb25Nb2RlIG1v
ZGUpCi17Ci0gICAgaWYgKCFsZW5ndGgpCi0gICAgICAgIHJldHVybiBDU3RyaW5nKCIiLCAwKTsK
LSAgICBpZiAobGVuZ3RoID4gTWF4TGVuZ3RoIC8gMykKKyAgICBhdXRvIGNvbnZlcnRlZExlbmd0
aCA9IGxhdGluMVRvVVRGOExlbmd0aChzb3VyY2UsIHNvdXJjZSArIGxlbmd0aCk7CisgICAgaWYg
KGNvbnZlcnRlZExlbmd0aCA+IE1heExlbmd0aCkKICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVj
dGVkKFVURjhDb252ZXJzaW9uRXJyb3I6Ok91dE9mTWVtb3J5KTsKLSAgICBWZWN0b3I8Y2hhciwg
MTAyND4gYnVmZmVyVmVjdG9yKGxlbmd0aCAqIDMpOwotICAgIGNoYXIqIGJ1ZmZlciA9IGJ1ZmZl
clZlY3Rvci5kYXRhKCk7Ci0gICAgVVRGOENvbnZlcnNpb25FcnJvciBlcnJvciA9IHV0ZjhJbXBs
KGNoYXJhY3RlcnMsIGxlbmd0aCwgYnVmZmVyLCBidWZmZXJWZWN0b3Iuc2l6ZSgpLCBtb2RlKTsK
LSAgICBpZiAoZXJyb3IgIT0gVVRGOENvbnZlcnNpb25FcnJvcjo6Tm9uZSkKLSAgICAgICAgcmV0
dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9yKTsKLSAgICByZXR1cm4gQ1N0cmluZyhidWZmZXJWZWN0
b3IuZGF0YSgpLCBidWZmZXIgLSBidWZmZXJWZWN0b3IuZGF0YSgpKTsKLX0KLQotRXhwZWN0ZWQ8
Q1N0cmluZywgVVRGOENvbnZlcnNpb25FcnJvcj4gU3RyaW5nSW1wbDo6dHJ5R2V0VXRmOEZvclJh
bmdlKHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoLCBDb252ZXJzaW9uTW9kZSBtb2Rl
KSBjb25zdAotewotICAgIEFTU0VSVChvZmZzZXQgPD0gdGhpcy0+bGVuZ3RoKCkpOwotICAgIEFT
U0VSVChvZmZzZXQgKyBsZW5ndGggPD0gdGhpcy0+bGVuZ3RoKCkpOwogICAgIAotICAgIGlmICgh
bGVuZ3RoKQotICAgICAgICByZXR1cm4gQ1N0cmluZygiIiwgMCk7Ci0KLSAgICAvLyBBbGxvY2F0
ZSBhIGJ1ZmZlciBiaWcgZW5vdWdoIHRvIGhvbGQgYWxsIHRoZSBjaGFyYWN0ZXJzCi0gICAgLy8g
KGFuIGluZGl2aWR1YWwgVVRGLTE2IFVDaGFyIGNhbiBvbmx5IGV4cGFuZCB0byAzIFVURi04IGJ5
dGVzKS4KLSAgICAvLyBPcHRpbWl6YXRpb24gaWRlYXMsIGlmIHdlIGZpbmQgdGhpcyBmdW5jdGlv
biBpcyBob3Q6Ci0gICAgLy8gICogV2UgY291bGQgc3BlY3VsYXRpdmVseSBjcmVhdGUgYSBDU3Ry
aW5nQnVmZmVyIHRvIGNvbnRhaW4gJ2xlbmd0aCcgCi0gICAgLy8gICAgY2hhcmFjdGVycywgYW5k
IHJlc2l6ZSBpZiBuZWNlc3NhcnkgKGkuZS4gaWYgdGhlIGJ1ZmZlciBjb250YWlucwotICAgIC8v
ICAgIG5vbi1hc2NpaSBjaGFyYWN0ZXJzKS4gKEFsdGVybmF0aXZlbHksIHNjYW4gdGhlIGJ1ZmZl
ciBmaXJzdCBmb3IKLSAgICAvLyAgICBhc2NpaSBjaGFyYWN0ZXJzLCBzbyB3ZSBrbm93IHRoaXMg
d2lsbCBiZSBzdWZmaWNpZW50KS4KLSAgICAvLyAgKiBXZSBjb3VsZCBhbGxvY2F0ZSBhIENTdHJp
bmdCdWZmZXIgd2l0aCBhbiBhcHByb3ByaWF0ZSBzaXplIHRvCi0gICAgLy8gICAgaGF2ZSBhIGdv
b2QgY2hhbmNlIG9mIGJlaW5nIGFibGUgdG8gd3JpdGUgdGhlIHN0cmluZyBpbnRvIHRoZQotICAg
IC8vICAgIGJ1ZmZlciB3aXRob3V0IHJlYWxsb2NpbmcgKHNheSwgMS41IHggbGVuZ3RoKS4KLSAg
ICBpZiAobGVuZ3RoID4gTWF4TGVuZ3RoIC8gMykKLSAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVj
dGVkKFVURjhDb252ZXJzaW9uRXJyb3I6Ok91dE9mTWVtb3J5KTsKLSAgICBWZWN0b3I8Y2hhciwg
MTAyND4gYnVmZmVyVmVjdG9yKGxlbmd0aCAqIDMpOwotCi0gICAgY2hhciogYnVmZmVyID0gYnVm
ZmVyVmVjdG9yLmRhdGEoKTsKLQotICAgIGlmIChpczhCaXQoKSkgewotICAgICAgICBjb25zdCBM
Q2hhciogY2hhcmFjdGVycyA9IHRoaXMtPmNoYXJhY3RlcnM4KCkgKyBvZmZzZXQ7Ci0gICAgICAg
IGF1dG8gc3VjY2VzcyA9IGNvbnZlcnRMYXRpbjFUb1VURjgoJmNoYXJhY3RlcnMsIGNoYXJhY3Rl
cnMgKyBsZW5ndGgsICZidWZmZXIsIGJ1ZmZlciArIGJ1ZmZlclZlY3Rvci5zaXplKCkpOwotICAg
ICAgICBBU1NFUlRfVU5VU0VEKHN1Y2Nlc3MsIHN1Y2Nlc3MpOyAvLyAobGVuZ3RoICogMykgc2hv
dWxkIGJlIHN1ZmZpY2llbnQgZm9yIGFueSBjb252ZXJzaW9uCi0gICAgfSBlbHNlIHsKLSAgICAg
ICAgVVRGOENvbnZlcnNpb25FcnJvciBlcnJvciA9IHV0ZjhJbXBsKHRoaXMtPmNoYXJhY3RlcnMx
NigpICsgb2Zmc2V0LCBsZW5ndGgsIGJ1ZmZlciwgYnVmZmVyVmVjdG9yLnNpemUoKSwgbW9kZSk7
Ci0gICAgICAgIGlmIChlcnJvciAhPSBVVEY4Q29udmVyc2lvbkVycm9yOjpOb25lKQotICAgICAg
ICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9yKTsKLSAgICB9Ci0KLSAgICByZXR1cm4g
Q1N0cmluZyhidWZmZXJWZWN0b3IuZGF0YSgpLCBidWZmZXIgLSBidWZmZXJWZWN0b3IuZGF0YSgp
KTsKKyAgICBjaGFyKiBkZXN0aW5hdGlvbjsKKyAgICBhdXRvIHJlc3VsdCA9IENTdHJpbmc6Om5l
d1VuaW5pdGlhbGl6ZWQoY29udmVydGVkTGVuZ3RoLCBkZXN0aW5hdGlvbik7CisgICAgY2hhciog
ZGVzdGluYXRpb25FbmQgPSBkZXN0aW5hdGlvbiArIGNvbnZlcnRlZExlbmd0aDsKKyAgICBib29s
IHN1Y2Nlc3MgPSBjb252ZXJ0TGF0aW4xVG9VVEY4KCZzb3VyY2UsIHNvdXJjZSArIGxlbmd0aCwg
JmRlc3RpbmF0aW9uLCBkZXN0aW5hdGlvbkVuZCk7CisgICAgQVNTRVJUX1VOVVNFRChzdWNjZXNz
LCBzdWNjZXNzKTsKKyAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKGRlc3RpbmF0aW9uID09IGRlc3Rp
bmF0aW9uRW5kLCAiSWYgY29udmVydGVkTGVuZ3RoIHdhcyBjYWxjdWxhdGVkIGNvcnJlY3RseSwg
d2Ugc2hvdWxkIGFsd2F5cyB1c2UgZXhhY3RseSB0aGUgd2hvbGUgZGVzdGluYXRpb24gYnVmZmVy
Iik7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogRXhwZWN0ZWQ8Q1N0cmluZywgVVRGOENvbnZl
cnNpb25FcnJvcj4gU3RyaW5nSW1wbDo6dHJ5R2V0VXRmOChDb252ZXJzaW9uTW9kZSBtb2RlKSBj
b25zdAogewotICAgIHJldHVybiB0cnlHZXRVdGY4Rm9yUmFuZ2UoMCwgbGVuZ3RoKCksIG1vZGUp
OworICAgIGlmIChpczhCaXQoKSkKKyAgICAgICAgcmV0dXJuIHV0ZjhGb3JDaGFyYWN0ZXJzKGNo
YXJhY3RlcnM4KCksIGxlbmd0aCgpKTsKKyAgICByZXR1cm4gdXRmOEZvckNoYXJhY3RlcnMoY2hh
cmFjdGVyczE2KCksIGxlbmd0aCgpLCBtb2RlKTsKIH0KIAogQ1N0cmluZyBTdHJpbmdJbXBsOjp1
dGY4KENvbnZlcnNpb25Nb2RlIG1vZGUpIGNvbnN0CiB7Ci0gICAgYXV0byBleHBlY3RlZFN0cmlu
ZyA9IHRyeUdldFV0ZjhGb3JSYW5nZSgwLCBsZW5ndGgoKSwgbW9kZSk7CisgICAgYXV0byBleHBl
Y3RlZFN0cmluZyA9IHRyeUdldFV0ZjgobW9kZSk7CiAgICAgUkVMRUFTRV9BU1NFUlQoZXhwZWN0
ZWRTdHJpbmcpOwogICAgIHJldHVybiBleHBlY3RlZFN0cmluZy52YWx1ZSgpOwogfQogCitzaXpl
X3QgU3RyaW5nSW1wbDo6dXRmOExlbmd0aChDb252ZXJzaW9uTW9kZSBtb2RlKSBjb25zdAorewor
ICAgIEFTU0VSVF9XSVRIX01FU1NBR0UobW9kZSAhPSBTdHJpY3RDb252ZXJzaW9uUmVwbGFjaW5n
VW5wYWlyZWRTdXJyb2dhdGVzV2l0aEZGRkQsICJ1dGY4TGVuZ3RoIHdpdGggU3RyaWN0Q29udmVy
c2lvblJlcGxhY2luZ1VucGFpcmVkU3Vycm9nYXRlc1dpdGhGRkZEIGlzIHVuc3VwcG9ydGVkIik7
CisgICAgaWYgKGlzOEJpdCgpKQorICAgICAgICByZXR1cm4gbGF0aW4xVG9VVEY4TGVuZ3RoKGNo
YXJhY3RlcnM4KCksIGNoYXJhY3RlcnM4KCkgKyBsZW5ndGgoKSk7CisgICAgcmV0dXJuIHV0ZjE2
VG9VVEY4TGVuZ3RoKGNoYXJhY3RlcnMxNigpLCBjaGFyYWN0ZXJzMTYoKSArIGxlbmd0aCgpLCBt
b2RlID09IFN0cmljdENvbnZlcnNpb24pOworfQorCiBORVZFUl9JTkxJTkUgdW5zaWduZWQgU3Ry
aW5nSW1wbDo6aGFzaFNsb3dDYXNlKCkgY29uc3QKIHsKICAgICBpZiAoaXM4Qml0KCkpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ0ltcGwuaCBiL1NvdXJjZS9XVEYvd3Rm
L3RleHQvU3RyaW5nSW1wbC5oCmluZGV4IGM3NmNkNTIzNjc2MTFjOTQyZDM0MmJmMDkxYjE2MmEw
YTY3NzQ0ZTAuLmEzYmM1MDg2NTllNGMwYzJmNWVkNWMzY2I3ZDYyZWRlMTA3ZWEyOGEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nSW1wbC5oCisrKyBiL1NvdXJjZS9XVEYv
d3RmL3RleHQvU3RyaW5nSW1wbC5oCkBAIC0zMTQsMTMgKzMxNCwxMSBAQCBwdWJsaWM6CiAgICAg
c3RhdGljIFdURl9FWFBPUlRfUFJJVkFURSBFeHBlY3RlZDxDU3RyaW5nLCBVVEY4Q29udmVyc2lv
bkVycm9yPiB1dGY4Rm9yQ2hhcmFjdGVycyhjb25zdCBMQ2hhciogY2hhcmFjdGVycywgdW5zaWdu
ZWQgbGVuZ3RoKTsKICAgICBzdGF0aWMgV1RGX0VYUE9SVF9QUklWQVRFIEV4cGVjdGVkPENTdHJp
bmcsIFVURjhDb252ZXJzaW9uRXJyb3I+IHV0ZjhGb3JDaGFyYWN0ZXJzKGNvbnN0IFVDaGFyKiBj
aGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgsIENvbnZlcnNpb25Nb2RlID0gTGVuaWVudENvbnZl
cnNpb24pOwogCi0gICAgV1RGX0VYUE9SVF9QUklWQVRFIEV4cGVjdGVkPENTdHJpbmcsIFVURjhD
b252ZXJzaW9uRXJyb3I+IHRyeUdldFV0ZjhGb3JSYW5nZSh1bnNpZ25lZCBvZmZzZXQsIHVuc2ln
bmVkIGxlbmd0aCwgQ29udmVyc2lvbk1vZGUgPSBMZW5pZW50Q29udmVyc2lvbikgY29uc3Q7CiAg
ICAgV1RGX0VYUE9SVF9QUklWQVRFIEV4cGVjdGVkPENTdHJpbmcsIFVURjhDb252ZXJzaW9uRXJy
b3I+IHRyeUdldFV0ZjgoQ29udmVyc2lvbk1vZGUgPSBMZW5pZW50Q29udmVyc2lvbikgY29uc3Q7
CiAgICAgV1RGX0VYUE9SVF9QUklWQVRFIENTdHJpbmcgdXRmOChDb252ZXJzaW9uTW9kZSA9IExl
bmllbnRDb252ZXJzaW9uKSBjb25zdDsKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgc2l6ZV90IHV0
ZjhMZW5ndGgoQ29udmVyc2lvbk1vZGUgPSBMZW5pZW50Q29udmVyc2lvbikgY29uc3Q7CiAKLXBy
aXZhdGU6Ci0gICAgc3RhdGljIFdURl9FWFBPUlRfUFJJVkFURSBVVEY4Q29udmVyc2lvbkVycm9y
IHV0ZjhJbXBsKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgsIGNoYXIq
JiBidWZmZXIsIHNpemVfdCBidWZmZXJTaXplLCBDb252ZXJzaW9uTW9kZSk7Ci0gICAgCitwcml2
YXRlOiAgICAKICAgICAvLyBUaGUgaGlnaCBiaXRzIG9mICdoYXNoJyBhcmUgYWx3YXlzIGVtcHR5
LCBidXQgd2UgcHJlZmVyIHRvIHN0b3JlIG91ciBmbGFncwogICAgIC8vIGluIHRoZSBsb3cgYml0
cyBiZWNhdXNlIGl0IG1ha2VzIHRoZW0gc2xpZ2h0bHkgbW9yZSBlZmZpY2llbnQgdG8gYWNjZXNz
LgogICAgIC8vIFNvLCB3ZSBzaGlmdCBsZWZ0IGFuZCByaWdodCB3aGVuIHNldHRpbmcgYW5kIGdl
dHRpbmcgb3VyIGhhc2ggY29kZS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL3RleHQvVVRG
OENvbnZlcnNpb25FcnJvci5oIGIvU291cmNlL1dURi93dGYvdGV4dC9VVEY4Q29udmVyc2lvbkVy
cm9yLmgKaW5kZXggOGZiMjhlZWJmYjA2Y2NhN2M4NGQzYTVkZDMxMTgzNGE1ZWUzN2RjNC4uYjJk
ODhlN2JhOTM5NTJkZjVmYzhkMTQxZDc3MjE0NjdmZmYyYjZkYyAxMDA2NDQKLS0tIGEvU291cmNl
L1dURi93dGYvdGV4dC9VVEY4Q29udmVyc2lvbkVycm9yLmgKKysrIGIvU291cmNlL1dURi93dGYv
dGV4dC9VVEY4Q29udmVyc2lvbkVycm9yLmgKQEAgLTI3LDggKzI3LDcgQEAKIAogbmFtZXNwYWNl
IFdURiB7CiAKLWVudW0gY2xhc3MgVVRGOENvbnZlcnNpb25FcnJvciB7Ci0gICAgTm9uZSwKK2Vu
dW0gY2xhc3MgVVRGOENvbnZlcnNpb25FcnJvciA6IHVpbnQ4X3QgewogICAgIE91dE9mTWVtb3J5
LAogICAgIElsbGVnYWxTb3VyY2UsCiAgICAgU291cmNlRXhoYXVzdGVkCmRpZmYgLS1naXQgYS9T
b3VyY2UvV1RGL3d0Zi90ZXh0L1dURlN0cmluZy5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1dU
RlN0cmluZy5jcHAKaW5kZXggM2E5MWE2NzdkNWMwMzhlMDNiN2M1ZWIzMmYzNzMzYmVmYzA4Y2E1
NS4uYmYzZGEzZmMwZWZhN2QwNjYyODg2Njc2YzI1YWRiNjAyOGU3NjU5YiAxMDA2NDQKLS0tIGEv
U291cmNlL1dURi93dGYvdGV4dC9XVEZTdHJpbmcuY3BwCisrKyBiL1NvdXJjZS9XVEYvd3RmL3Rl
eHQvV1RGU3RyaW5nLmNwcApAQCAtNjkyLDkgKzY5Miw5IEBAIENTdHJpbmcgU3RyaW5nOjp1dGY4
KENvbnZlcnNpb25Nb2RlIG1vZGUpIGNvbnN0CiAgICAgcmV0dXJuIGV4cGVjdGVkU3RyaW5nLnZh
bHVlKCk7CiB9CiAKLUNTdHJpbmcgU3RyaW5nOjp1dGY4KCkgY29uc3QKK3NpemVfdCBTdHJpbmc6
OnV0ZjhMZW5ndGgoQ29udmVyc2lvbk1vZGUgbW9kZSkgY29uc3QKIHsKLSAgICByZXR1cm4gdXRm
OChMZW5pZW50Q29udmVyc2lvbik7CisgICAgcmV0dXJuIG1faW1wbCA/IG1faW1wbC0+dXRmOExl
bmd0aChtb2RlKSA6IDA7CiB9CiAKIFN0cmluZyBTdHJpbmc6Om1ha2U4Qml0RnJvbTE2Qml0U291
cmNlKGNvbnN0IFVDaGFyKiBzb3VyY2UsIHNpemVfdCBsZW5ndGgpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV1RGL3d0Zi90ZXh0L1dURlN0cmluZy5oIGIvU291cmNlL1dURi93dGYvdGV4dC9XVEZTdHJp
bmcuaAppbmRleCA1MTFiOWMxNjRhMWE1OGMxMWQ0Y2ZkNTMyMWUzMmY1MjdiNGM5ZWQ2Li43N2Mw
ZDM3OGYyMzkzN2I2OTAzMTkzMzk1YWMyMWE2NjMwNjYyZDgyIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V1RGL3d0Zi90ZXh0L1dURlN0cmluZy5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL3RleHQvV1RGU3Ry
aW5nLmgKQEAgLTEzOCw4ICsxMzgsOCBAQCBwdWJsaWM6CiAgICAgV1RGX0VYUE9SVF9QUklWQVRF
IENTdHJpbmcgYXNjaWkoKSBjb25zdDsKICAgICBXVEZfRVhQT1JUX1BSSVZBVEUgQ1N0cmluZyBs
YXRpbjEoKSBjb25zdDsKIAotICAgIFdURl9FWFBPUlRfUFJJVkFURSBDU3RyaW5nIHV0ZjgoQ29u
dmVyc2lvbk1vZGUpIGNvbnN0OwotICAgIFdURl9FWFBPUlRfUFJJVkFURSBDU3RyaW5nIHV0Zjgo
KSBjb25zdDsKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgQ1N0cmluZyB1dGY4KENvbnZlcnNpb25N
b2RlID0gTGVuaWVudENvbnZlcnNpb24pIGNvbnN0OworICAgIFdURl9FWFBPUlRfUFJJVkFURSBz
aXplX3QgdXRmOExlbmd0aChDb252ZXJzaW9uTW9kZSA9IExlbmllbnRDb252ZXJzaW9uKSBjb25z
dDsKIAogICAgIFdURl9FWFBPUlRfUFJJVkFURSBFeHBlY3RlZDxDU3RyaW5nLCBVVEY4Q29udmVy
c2lvbkVycm9yPiB0cnlHZXRVdGY4KENvbnZlcnNpb25Nb2RlKSBjb25zdDsKICAgICBXVEZfRVhQ
T1JUX1BSSVZBVEUgRXhwZWN0ZWQ8Q1N0cmluZywgVVRGOENvbnZlcnNpb25FcnJvcj4gdHJ5R2V0
VXRmOCgpIGNvbnN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvdW5pY29kZS9VVEY4Q29u
dmVyc2lvbi5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi91bmljb2RlL1VURjhDb252ZXJzaW9uLmNwcApp
bmRleCAwN2FlODk3MTc1MWI2ZWNmMjcwNzdiNDQ0YjE0OWE2NjEwY2NjYTg3Li40ZTY1NWJlM2U0
OWIyNjgwNjM0OGMyZmQ2MDJjNjE0YmNkNDE0YjE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0
Zi91bmljb2RlL1VURjhDb252ZXJzaW9uLmNwcAorKysgYi9Tb3VyY2UvV1RGL3d0Zi91bmljb2Rl
L1VURjhDb252ZXJzaW9uLmNwcApAQCAtMzQsMTcgKzM0LDMyIEBACiBuYW1lc3BhY2UgV1RGIHsK
IG5hbWVzcGFjZSBVbmljb2RlIHsKIAorc2l6ZV90IGxhdGluMVRvVVRGOExlbmd0aChjb25zdCBM
Q2hhciogc291cmNlU3RhcnQsIGNvbnN0IExDaGFyKiBzb3VyY2VFbmQpCit7CisgICAgc2l6ZV90
IGxlbmd0aCA9IDA7CisgICAgZm9yIChjb25zdCBMQ2hhciogc291cmNlID0gc291cmNlU3RhcnQ7
IHNvdXJjZSA8IHNvdXJjZUVuZDsgKytzb3VyY2UpIHsKKyAgICAgICAgdWludDhfdCBidWZmZXJb
VThfTUFYX0xFTkdUSF07CisgICAgICAgIGludDMyX3QgaSA9IDA7CisgICAgICAgIC8vIEFsbCAy
NTYgcG9zc2libGUgY29kZSBwb2ludHMgYXJlIHZhbGlkLCBhbmQgdGhlIGJ1ZmZlciBpcyBhbHdh
eXMgYmlnIGVub3VnaCwKKyAgICAgICAgLy8gc28gaXQncyBzYWZlIHRvIHVzZSBVOF9BUFBFTkRf
VU5TQUZFLgorICAgICAgICBVOF9BUFBFTkRfVU5TQUZFKGJ1ZmZlciwgaSwgKnNvdXJjZSk7Cisg
ICAgICAgIGxlbmd0aCArPSBpOworICAgIH0KKyAgICByZXR1cm4gbGVuZ3RoOworfQorCiBib29s
IGNvbnZlcnRMYXRpbjFUb1VURjgoY29uc3QgTENoYXIqKiBzb3VyY2VTdGFydCwgY29uc3QgTENo
YXIqIHNvdXJjZUVuZCwgY2hhcioqIHRhcmdldFN0YXJ0LCBjaGFyKiB0YXJnZXRFbmQpCiB7CiAg
ICAgY29uc3QgTENoYXIqIHNvdXJjZTsKICAgICBjaGFyKiB0YXJnZXQgPSAqdGFyZ2V0U3RhcnQ7
Ci0gICAgaW50IGkgPSAwOworICAgIGludDMyX3QgaSA9IDA7CiAgICAgZm9yIChzb3VyY2UgPSAq
c291cmNlU3RhcnQ7IHNvdXJjZSA8IHNvdXJjZUVuZDsgKytzb3VyY2UpIHsKICAgICAgICAgVUJv
b2wgc2F3RXJyb3IgPSBmYWxzZTsKICAgICAgICAgLy8gV29yayBhcm91bmQgYnVnIGluIGVpdGhl
ciBXaW5kb3dzIGNvbXBpbGVyIG9yIG9sZCB2ZXJzaW9uIG9mIElDVSwgd2hlcmUgcGFzc2luZyBh
IHVpbnQ4X3QgdG8KICAgICAgICAgLy8gVThfQVBQRU5EIHdhcm5zLCBieSBjb252ZXJ0aW5nIGZy
b20gdWludDhfdCB0byBhIHdpZGVyIHR5cGUuCiAgICAgICAgIFVDaGFyMzIgY2hhcmFjdGVyID0g
KnNvdXJjZTsKICAgICAgICAgVThfQVBQRU5EKHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KHRh
cmdldCksIGksIHRhcmdldEVuZCAtICp0YXJnZXRTdGFydCwgY2hhcmFjdGVyLCBzYXdFcnJvcik7
CisgICAgICAgIEFTU0VSVF9XSVRIX01FU1NBR0UoIXNhd0Vycm9yLCAiVVRGOCBkZXN0aW5hdGlv
biBidWZmZXIgd2FzIG5vdCBiaWcgZW5vdWdoIik7CiAgICAgICAgIGlmIChzYXdFcnJvcikKICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CkBAIC01MywzMSArNjgsNTggQEAgYm9vbCBj
b252ZXJ0TGF0aW4xVG9VVEY4KGNvbnN0IExDaGFyKiogc291cmNlU3RhcnQsIGNvbnN0IExDaGFy
KiBzb3VyY2VFbmQsIGNoYXIKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAorc2l6ZV90IHV0ZjE2VG9V
VEY4TGVuZ3RoKGNvbnN0IFVDaGFyKiBzb3VyY2VTdGFydCwgY29uc3QgVUNoYXIqIHNvdXJjZUVu
ZCwgYm9vbCBzdHJpY3QpCit7CisgICAgc2l6ZV90IGxlbmd0aCA9IDA7CisgICAgY29uc3QgVUNo
YXIqIHNvdXJjZSA9IHNvdXJjZVN0YXJ0OworICAgIHdoaWxlIChzb3VyY2UgPCBzb3VyY2VFbmQp
IHsKKyAgICAgICAgVUNoYXIzMiBjaDsKKyAgICAgICAgaW50IGogPSAwOworICAgICAgICBVMTZf
TkVYVChzb3VyY2UsIGosIHNvdXJjZUVuZCAtIHNvdXJjZSwgY2gpOworICAgICAgICBpZiAoVV9J
U19TVVJST0dBVEUoY2gpKSB7CisgICAgICAgICAgICBpZiAoc3RyaWN0KQorICAgICAgICAgICAg
ICAgIHJldHVybiAwOworICAgICAgICAgICAgaWYgKHNvdXJjZSArIGogPT0gc291cmNlRW5kICYm
IFVfSVNfU1VSUk9HQVRFX0xFQUQoY2gpKQorICAgICAgICAgICAgICAgIHJldHVybiBsZW5ndGgg
KyAzOworICAgICAgICAgICAgY2ggPSByZXBsYWNlbWVudENoYXJhY3RlcjsKKyAgICAgICAgfQor
ICAgICAgICBzb3VyY2UgKz0gajsKKworICAgICAgICAvLyBXZSBhbHJlYWR5IGNoZWNrZWQgdGhh
dCBjaCBpcyBhIHZhbGlkIGNvZGUgcG9pbnQsIGFuZCB0aGUgYnVmZmVyIGlzIGFsd2F5cyBiaWcg
ZW5vdWdoLAorICAgICAgICAvLyBzbyBpdCdzIHNhZmUgdG8gdXNlIFU4X0FQUEVORF9VTlNBRkUu
CisgICAgICAgIHVpbnQ4X3QgYnVmZmVyW1U4X01BWF9MRU5HVEhdOworICAgICAgICBpbnQzMl90
IGkgPSAwOworICAgICAgICBVOF9BUFBFTkRfVU5TQUZFKGJ1ZmZlciwgaSwgY2gpOworICAgICAg
ICBsZW5ndGggKz0gaTsKKyAgICB9CisgICAgcmV0dXJuIGxlbmd0aDsKK30KKwogQ29udmVyc2lv
blJlc3VsdCBjb252ZXJ0VVRGMTZUb1VURjgoY29uc3QgVUNoYXIqKiBzb3VyY2VTdGFydCwgY29u
c3QgVUNoYXIqIHNvdXJjZUVuZCwgY2hhcioqIHRhcmdldFN0YXJ0LCBjaGFyKiB0YXJnZXRFbmQs
IGJvb2wgc3RyaWN0KQogewotICAgIENvbnZlcnNpb25SZXN1bHQgcmVzdWx0ID0gQ29udmVyc2lv
bk9LOworICAgIGF1dG8gcmVzdWx0ID0gQ29udmVyc2lvblJlc3VsdDo6Q29udmVyc2lvbk9LOwog
ICAgIGNvbnN0IFVDaGFyKiBzb3VyY2UgPSAqc291cmNlU3RhcnQ7CiAgICAgY2hhciogdGFyZ2V0
ID0gKnRhcmdldFN0YXJ0OwogICAgIFVCb29sIHNhd0Vycm9yID0gZmFsc2U7Ci0gICAgaW50IGkg
PSAwOworICAgIGludDMyX3QgaSA9IDA7CiAgICAgd2hpbGUgKHNvdXJjZSA8IHNvdXJjZUVuZCkg
ewogICAgICAgICBVQ2hhcjMyIGNoOwogICAgICAgICBpbnQgaiA9IDA7CiAgICAgICAgIFUxNl9O
RVhUKHNvdXJjZSwgaiwgc291cmNlRW5kIC0gc291cmNlLCBjaCk7CiAgICAgICAgIGlmIChVX0lT
X1NVUlJPR0FURShjaCkpIHsKICAgICAgICAgICAgIGlmIChzb3VyY2UgKyBqID09IHNvdXJjZUVu
ZCAmJiBVX0lTX1NVUlJPR0FURV9MRUFEKGNoKSkgewotICAgICAgICAgICAgICAgIHJlc3VsdCA9
IFNvdXJjZUV4aGF1c3RlZDsKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBDb252ZXJzaW9uUmVz
dWx0OjpTb3VyY2VFeGhhdXN0ZWQ7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICBpZiAoc3RyaWN0KSB7Ci0gICAgICAgICAgICAgICAgcmVzdWx0ID0g
U291cmNlSWxsZWdhbDsKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBDb252ZXJzaW9uUmVzdWx0
OjpTb3VyY2VJbGxlZ2FsOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQog
ICAgICAgICAgICAgY2ggPSByZXBsYWNlbWVudENoYXJhY3RlcjsKICAgICAgICAgfQogICAgICAg
ICBVOF9BUFBFTkQocmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4odGFyZ2V0KSwgaSwgdGFyZ2V0
RW5kIC0gdGFyZ2V0LCBjaCwgc2F3RXJyb3IpOwogICAgICAgICBpZiAoc2F3RXJyb3IpIHsKLSAg
ICAgICAgICAgIHJlc3VsdCA9IFRhcmdldEV4aGF1c3RlZDsKKyAgICAgICAgICAgIHJlc3VsdCA9
IENvbnZlcnNpb25SZXN1bHQ6OlRhcmdldEV4aGF1c3RlZDsKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICB9CiAgICAgICAgIHNvdXJjZSArPSBqOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93
dGYvdW5pY29kZS9VVEY4Q29udmVyc2lvbi5oIGIvU291cmNlL1dURi93dGYvdW5pY29kZS9VVEY4
Q29udmVyc2lvbi5oCmluZGV4IDllODUwNmY5MmMzMmQ1ZGMyMGY1MzdiYmM3ZjFkZGIxNTg2NDM0
NmYuLjBkMjk0MGQ0ZTM3MWMzNjA5OTZlMmYyMDBlMjYyYzUzMzcxZjA2YmYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XVEYvd3RmL3VuaWNvZGUvVVRGOENvbnZlcnNpb24uaAorKysgYi9Tb3VyY2UvV1RG
L3d0Zi91bmljb2RlL1VURjhDb252ZXJzaW9uLmgKQEAgLTMxLDcgKzMxLDcgQEAKIG5hbWVzcGFj
ZSBXVEYgewogbmFtZXNwYWNlIFVuaWNvZGUgewogCi1lbnVtIENvbnZlcnNpb25SZXN1bHQgewor
ZW51bSBjbGFzcyBDb252ZXJzaW9uUmVzdWx0IDogdWludDhfdCB7CiAgICAgQ29udmVyc2lvbk9L
LCAvLyBjb252ZXJzaW9uIHN1Y2Nlc3NmdWwKICAgICBTb3VyY2VFeGhhdXN0ZWQsIC8vIHBhcnRp
YWwgY2hhcmFjdGVyIGluIHNvdXJjZSwgYnV0IGhpdCBlbmQKICAgICBUYXJnZXRFeGhhdXN0ZWQs
IC8vIGluc3VmZmljaWVudCByb29tIGluIHRhcmdldCBmb3IgY29udmVyc2lvbgpAQCAtNDcsOCAr
NDcsOSBAQCBlbnVtIENvbnZlcnNpb25SZXN1bHQgewogV1RGX0VYUE9SVF9QUklWQVRFIGJvb2wg
Y29udmVydFVURjhUb1VURjE2KGNvbnN0IGNoYXIqIHNvdXJjZVN0YXJ0LCBjb25zdCBjaGFyKiBz
b3VyY2VFbmQsIFVDaGFyKiogdGFyZ2V0U3RhcnQsIFVDaGFyKiB0YXJnZXRFbmQsIGJvb2wqIGlz
U291cmNlQWxsQVNDSUkgPSBudWxscHRyKTsKIFdURl9FWFBPUlRfUFJJVkFURSBib29sIGNvbnZl
cnRVVEY4VG9VVEYxNlJlcGxhY2luZ0ludmFsaWRTZXF1ZW5jZXMoY29uc3QgY2hhciogc291cmNl
U3RhcnQsIGNvbnN0IGNoYXIqIHNvdXJjZUVuZCwgVUNoYXIqKiB0YXJnZXRTdGFydCwgVUNoYXIq
IHRhcmdldEVuZCwgYm9vbCogaXNTb3VyY2VBbGxBU0NJSSA9IG51bGxwdHIpOwogV1RGX0VYUE9S
VF9QUklWQVRFIGJvb2wgY29udmVydExhdGluMVRvVVRGOChjb25zdCBMQ2hhcioqIHNvdXJjZVN0
YXJ0LCBjb25zdCBMQ2hhciogc291cmNlRW5kLCBjaGFyKiogdGFyZ2V0U3RhcnQsIGNoYXIqIHRh
cmdldEVuZCk7CitXVEZfRVhQT1JUX1BSSVZBVEUgc2l6ZV90IGxhdGluMVRvVVRGOExlbmd0aChj
b25zdCBMQ2hhciogc291cmNlU3RhcnQsIGNvbnN0IExDaGFyKiBzb3VyY2VFbmQpOwogV1RGX0VY
UE9SVF9QUklWQVRFIENvbnZlcnNpb25SZXN1bHQgY29udmVydFVURjE2VG9VVEY4KGNvbnN0IFVD
aGFyKiogc291cmNlU3RhcnQsIGNvbnN0IFVDaGFyKiBzb3VyY2VFbmQsIGNoYXIqKiB0YXJnZXRT
dGFydCwgY2hhciogdGFyZ2V0RW5kLCBib29sIHN0cmljdCA9IHRydWUpOwotCitXVEZfRVhQT1JU
X1BSSVZBVEUgc2l6ZV90IHV0ZjE2VG9VVEY4TGVuZ3RoKGNvbnN0IFVDaGFyKiBzb3VyY2VTdGFy
dCwgY29uc3QgVUNoYXIqIHNvdXJjZUVuZCwgYm9vbCBzdHJpY3QgPSB0cnVlKTsKIFdURl9FWFBP
UlRfUFJJVkFURSB1bnNpZ25lZCBjYWxjdWxhdGVTdHJpbmdIYXNoQW5kTGVuZ3RoRnJvbVVURjhN
YXNraW5nVG9wOEJpdHMoY29uc3QgY2hhciogZGF0YSwgY29uc3QgY2hhciogZGF0YUVuZCwgdW5z
aWduZWQmIGRhdGFMZW5ndGgsIHVuc2lnbmVkJiB1dGYxNkxlbmd0aCk7CiAKIC8vIENhbGxlcnMg
b2YgdGhlc2UgZnVuY3Rpb25zIG11c3QgY2hlY2sgdGhhdCB0aGUgbGVuZ3RocyBhcmUgdGhlIHNh
bWU7IGFjY29yZGluZ2x5IHdlIG9taXQgYW4gZW5kIGFyZ3VtZW50IGZvciBVVEYtMTYgYW5kIExh
dGluLTEuCg==
</data>
<flag name="commit-queue"
          id="468674"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>443848</attachid>
            <date>2021-11-10 12:32:10 -0800</date>
            <delta_ts>2021-11-10 14:42:30 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-232962-20211110123209.patch</filename>
            <type>text/plain</type>
            <size>26829</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg1NjA0CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBj
NTViN2Y3MWFkZDVhZDgzOTVjY2IzMjhkZmI4YTBjMGYxZDZmMTM5Li5jMDgwZWUzNzYxMDUxOWJj
ODNiMTdlNDZhZmVkYTQ3NjBkMzlhMDE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxMyBAQAorMjAyMS0xMS0xMCAgQWxleCBDaHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3
ZWJraXQub3JnPgorCisgICAgICAgIEFkZCBXVEY6OlN0cmluZzo6dXRmOExlbmd0aCBhbmQgdXNl
IGl0IHRvIGFsbG9jYXRlIGNvcnJlY3Qgc2l6ZSBidWZmZXIgd2hlbiBjb252ZXJ0aW5nIHRvIFVU
Ri04CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzI5
NjIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIEFQ
SS9KU1N0cmluZ1JlZi5jcHA6CisgICAgICAgIChKU1N0cmluZ0dldFVURjhDU3RyaW5nKToKKwog
MjAyMS0xMS0xMCAgU2FhbSBCYXJhdGkgIDxzYmFyYXRpQGFwcGxlLmNvbT4KIAogICAgICAgICBp
bl9ieV92YWwgc2hvdWxkIG5vdCBjb25zdGFudCBmb2xkIHRvIGluX2J5X2lkIHdoZW4gdGhlIHBy
b3BlcnR5IGlzIGEgcHJvcGVydHkgaW5kZXgKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvQ2hhbmdl
TG9nIGIvU291cmNlL1dURi9DaGFuZ2VMb2cKaW5kZXggMWE0YTU1N2VmNmM0NTAyY2UyNjk1MmIz
NWY5YzUwMGI3YWM3NDI2MC4uMTczN2Y4MjBmOWQ2OTRjY2QxNjI3ZTk5YjZjZjEwOTIxNjY3MjA4
ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dURi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dURi9DaGFu
Z2VMb2cKQEAgLTEsMyArMSwzMyBAQAorMjAyMS0xMS0xMCAgQWxleCBDaHJpc3RlbnNlbiAgPGFj
aHJpc3RlbnNlbkB3ZWJraXQub3JnPgorCisgICAgICAgIEFkZCBXVEY6OlN0cmluZzo6dXRmOExl
bmd0aCBhbmQgdXNlIGl0IHRvIGFsbG9jYXRlIGNvcnJlY3Qgc2l6ZSBidWZmZXIgd2hlbiBjb252
ZXJ0aW5nIHRvIFVURi04CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0yMzI5NjIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBTdHJpY3RDb252ZXJzaW9uUmVwbGFjaW5nVW5wYWlyZWRTdXJyb2dhdGVzV2l0aEZG
RkQgaXMgdW5zdXBwb3J0ZWQgYW5kIG9ubHkgdXNlZCBpbiB3ZWIgc29ja2V0IGNvZGUuCisKKyAg
ICAgICAgKiB3dGYvdGV4dC9TdHJpbmdJbXBsLmNwcDoKKyAgICAgICAgKFdURjo6cHV0VVRGOFRy
aXBsZSk6CisgICAgICAgIChXVEY6OlN0cmluZ0ltcGw6OnV0ZjhGb3JDaGFyYWN0ZXJzKToKKyAg
ICAgICAgKFdURjo6U3RyaW5nSW1wbDo6dHJ5R2V0VXRmOCBjb25zdCk6CisgICAgICAgIChXVEY6
OlN0cmluZ0ltcGw6OnV0ZjggY29uc3QpOgorICAgICAgICAoV1RGOjpTdHJpbmdJbXBsOjp1dGY4
TGVuZ3RoIGNvbnN0KToKKyAgICAgICAgKFdURjo6U3RyaW5nSW1wbDo6dXRmOEltcGwpOiBEZWxl
dGVkLgorICAgICAgICAoV1RGOjpTdHJpbmdJbXBsOjp0cnlHZXRVdGY4Rm9yUmFuZ2UgY29uc3Qp
OiBEZWxldGVkLgorICAgICAgICAqIHd0Zi90ZXh0L1N0cmluZ0ltcGwuaDoKKyAgICAgICAgKiB3
dGYvdGV4dC9VVEY4Q29udmVyc2lvbkVycm9yLmg6CisgICAgICAgICogd3RmL3RleHQvV1RGU3Ry
aW5nLmNwcDoKKyAgICAgICAgKFdURjo6U3RyaW5nOjp1dGY4TGVuZ3RoIGNvbnN0KToKKyAgICAg
ICAgKiB3dGYvdGV4dC9XVEZTdHJpbmcuaDoKKyAgICAgICAgKiB3dGYvdW5pY29kZS9VVEY4Q29u
dmVyc2lvbi5jcHA6CisgICAgICAgIChXVEY6OlVuaWNvZGU6OmxhdGluMVRvVVRGOExlbmd0aCk6
CisgICAgICAgIChXVEY6OlVuaWNvZGU6OmNvbnZlcnRMYXRpbjFUb1VURjgpOgorICAgICAgICAo
V1RGOjpVbmljb2RlOjp1dGYxNlRvVVRGOExlbmd0aCk6CisgICAgICAgIChXVEY6OlVuaWNvZGU6
OmNvbnZlcnRVVEYxNlRvVVRGOCk6CisgICAgICAgICogd3RmL3VuaWNvZGUvVVRGOENvbnZlcnNp
b24uaDoKKyAgICAgICAgKCk6IERlbGV0ZWQuCisKIDIwMjEtMTEtMTAgIERhcmluIEFkbGVyICA8
ZGFyaW5AYXBwbGUuY29tPgogCiAgICAgICAgIFtDRl0gUmVkdWNlIGR1cGxpY2F0aW9uIGFuZCB1
bm5lZWRlZCBidWZmZXIgYWxsb2NhdGlvbnMgYW5kIGNvcHlpbmcgaW4gVVJMIGNvZGUsIGFsc28g
cmVtb3ZlIHVudXNlZCBtZXRob2RzIGFuZCBmdW5jdGlvbnMKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA5NDM4YjE0
YTliYWY2Y2U0NjU2MjQ0NTE0NGExOTM1NGFmNDE4MzVmLi5lOGFhYWFhMjY4YThjNzUwNmZjZTAw
YzYzYzVkNDc0NjQ5MzVjOTI0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cK
KysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAKKzIwMjEtMTEt
MTAgIEFsZXggQ2hyaXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4KKworICAgICAg
ICBBZGQgV1RGOjpTdHJpbmc6OnV0ZjhMZW5ndGggYW5kIHVzZSBpdCB0byBhbGxvY2F0ZSBjb3Jy
ZWN0IHNpemUgYnVmZmVyIHdoZW4gY29udmVydGluZyB0byBVVEYtOAorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjMyOTYyCisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9TaGFyZWRCdWZmZXIu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6dXRmOEJ1ZmZlcik6CisgICAgICAgICogeG1sL3BhcnNl
ci9YTUxEb2N1bWVudFBhcnNlckxpYnhtbDIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y29udmVy
dFVURjE2RW50aXR5VG9VVEY4KToKKwogMjAyMS0xMS0xMCAgQW50b2luZSBRdWludCAgPGdyYW91
dHNAd2Via2l0Lm9yZz4KIAogICAgICAgICBUaGUgY3NzVGV4dCBwcm9wZXJ0eSBmb3IgYSBjb21w
dXRlZCBzdHlsZSBzaG91bGQgcmV0dXJuIGFuIGVtcHR5IHN0cmluZwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwppbmRleCA5NTI2
YmViNGEyNDI5YTI5Nzc3ZjRiZGRkNzUwOGQ2NWFjYThkNDIzLi42ZTg5NTNjYWQ0YzQ0OWYzMGUx
OWRkNWY0ZTgxZTQ2YzE0YTc2OTQxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxv
ZworKysgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzIEBACisyMDIxLTEx
LTEwICBBbGV4IENocmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAg
ICAgQWRkIFdURjo6U3RyaW5nOjp1dGY4TGVuZ3RoIGFuZCB1c2UgaXQgdG8gYWxsb2NhdGUgY29y
cmVjdCBzaXplIGJ1ZmZlciB3aGVuIGNvbnZlcnRpbmcgdG8gVVRGLTgKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzMjk2MgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogU2hhcmVkL0FQSS9jL1dLU3RyaW5n
LmNwcDoKKyAgICAgICAgKFdLU3RyaW5nR2V0VVRGOENTdHJpbmdJbXBsKToKKwogMjAyMS0xMS0x
MCAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAgIEFkZCBiYXNpYyBz
dXBwb3J0IGZvciBsYXVuY2hpbmcgQ2FwdGl2ZVBvcnRhbE1vZGUgV2ViUHJvY2Vzc2VzCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTU3RyaW5nUmVmLmNwcCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNTdHJpbmdSZWYuY3BwCmluZGV4IDRkNjQwMDQyYWM0MTQx
NjcyOWU2MjUzZTQyYzNhM2RiMWJmY2RhNjAuLjNiYWMyNzUyNGYzOTU0ODk2MDIzOTJiNTJkMjAy
NTM0M2QwYWEzNWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNTdHJp
bmdSZWYuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNTdHJpbmdSZWYuY3Bw
CkBAIC0xMDksNyArMTA5LDcgQEAgc2l6ZV90IEpTU3RyaW5nR2V0VVRGOENTdHJpbmcoSlNTdHJp
bmdSZWYgc3RyaW5nLCBjaGFyKiBidWZmZXIsIHNpemVfdCBidWZmZXJTaXoKICAgICB9IGVsc2Ug
ewogICAgICAgICBjb25zdCBVQ2hhciogc291cmNlID0gc3RyaW5nLT5jaGFyYWN0ZXJzMTYoKTsK
ICAgICAgICAgYXV0byByZXN1bHQgPSBjb252ZXJ0VVRGMTZUb1VURjgoJnNvdXJjZSwgc291cmNl
ICsgc3RyaW5nLT5sZW5ndGgoKSwgJmRlc3RpbmF0aW9uLCBkZXN0aW5hdGlvbiArIGJ1ZmZlclNp
emUgLSAxKTsKLSAgICAgICAgZmFpbGVkID0gcmVzdWx0ICE9IENvbnZlcnNpb25PSyAmJiByZXN1
bHQgIT0gVGFyZ2V0RXhoYXVzdGVkOworICAgICAgICBmYWlsZWQgPSByZXN1bHQgIT0gQ29udmVy
c2lvblJlc3VsdDo6Q29udmVyc2lvbk9LICYmIHJlc3VsdCAhPSBDb252ZXJzaW9uUmVzdWx0OjpU
YXJnZXRFeGhhdXN0ZWQ7CiAgICAgfQogCiAgICAgKmRlc3RpbmF0aW9uKysgPSAnXDAnOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdJbXBsLmNwcCBiL1NvdXJjZS9XVEYv
d3RmL3RleHQvU3RyaW5nSW1wbC5jcHAKaW5kZXggZDU4NDUxMDBjZTI2MWEyODYyZGI0YTEwZjZm
ODIxMmQzOWFmZTI2Mi4uYzc3MTBhOGZhODU3YWFmOWQwYTVlOWQ5ZmZlZTFkZGM4NWI4NmUyMiAx
MDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdJbXBsLmNwcAorKysgYi9Tb3Vy
Y2UvV1RGL3d0Zi90ZXh0L1N0cmluZ0ltcGwuY3BwCkBAIC0xNjY0LDE0ICsxNjY0LDIzIEBAIHNp
emVfdCBTdHJpbmdJbXBsOjpzaXplSW5CeXRlcygpIGNvbnN0CiBzdGF0aWMgaW5saW5lIHZvaWQg
cHV0VVRGOFRyaXBsZShjaGFyKiYgYnVmZmVyLCBVQ2hhciBjaGFyYWN0ZXIpCiB7CiAgICAgQVNT
RVJUKGNoYXJhY3RlciA+PSAweDA4MDApOwotICAgICpidWZmZXIrKyA9IHN0YXRpY19jYXN0PGNo
YXI+KCgoY2hhcmFjdGVyID4+IDEyKSAmIDB4MEYpIHwgMHhFMCk7Ci0gICAgKmJ1ZmZlcisrID0g
c3RhdGljX2Nhc3Q8Y2hhcj4oKChjaGFyYWN0ZXIgPj4gNikgJiAweDNGKSB8IDB4ODApOwotICAg
ICpidWZmZXIrKyA9IHN0YXRpY19jYXN0PGNoYXI+KChjaGFyYWN0ZXIgJiAweDNGKSB8IDB4ODAp
OworICAgIGludCBpID0gMDsKKyAgICBVOF9BUFBFTkRfVU5TQUZFKGJ1ZmZlciwgaSwgY2hhcmFj
dGVyKTsKKyAgICBBU1NFUlQoaSA9PSAzKTsKIH0KIAotVVRGOENvbnZlcnNpb25FcnJvciBTdHJp
bmdJbXBsOjp1dGY4SW1wbChjb25zdCBVQ2hhciogY2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3Ro
LCBjaGFyKiYgYnVmZmVyLCBzaXplX3QgYnVmZmVyU2l6ZSwgQ29udmVyc2lvbk1vZGUgbW9kZSkK
K0V4cGVjdGVkPENTdHJpbmcsIFVURjhDb252ZXJzaW9uRXJyb3I+IFN0cmluZ0ltcGw6OnV0ZjhG
b3JDaGFyYWN0ZXJzKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgsIENv
bnZlcnNpb25Nb2RlIG1vZGUpCiB7Ci0gICAgaWYgKG1vZGUgPT0gU3RyaWN0Q29udmVyc2lvblJl
cGxhY2luZ1VucGFpcmVkU3Vycm9nYXRlc1dpdGhGRkZEKSB7CisgICAgaWYgKCFsZW5ndGgpCisg
ICAgICAgIHJldHVybiBDU3RyaW5nKCIiLCAwKTsKKworICAgIHN3aXRjaCAobW9kZSkgeworICAg
IGNhc2UgU3RyaWN0Q29udmVyc2lvblJlcGxhY2luZ1VucGFpcmVkU3Vycm9nYXRlc1dpdGhGRkZE
OiB7CisgICAgICAgIGlmIChsZW5ndGggPiBNYXhMZW5ndGggLyAzKQorICAgICAgICAgICAgcmV0
dXJuIG1ha2VVbmV4cGVjdGVkKFVURjhDb252ZXJzaW9uRXJyb3I6Ok91dE9mTWVtb3J5KTsKKyAg
ICAgICAgc2l6ZV90IGJ1ZmZlclNpemUgPSBsZW5ndGggKiAzOworICAgICAgICBWZWN0b3I8Y2hh
ciwgMTAyND4gYnVmZmVyVmVjdG9yKGJ1ZmZlclNpemUpOworICAgICAgICBjaGFyKiBidWZmZXIg
PSBidWZmZXJWZWN0b3IuZGF0YSgpOwogICAgICAgICBjb25zdCBVQ2hhciogY2hhcmFjdGVyc0Vu
ZCA9IGNoYXJhY3RlcnMgKyBsZW5ndGg7CiAgICAgICAgIGNoYXIqIGJ1ZmZlckVuZCA9IGJ1ZmZl
ciArIGJ1ZmZlclNpemU7CiAgICAgICAgIHdoaWxlIChjaGFyYWN0ZXJzIDwgY2hhcmFjdGVyc0Vu
ZCkgewpAQCAtMTY4MCw3ICsxNjg5LDcgQEAgVVRGOENvbnZlcnNpb25FcnJvciBTdHJpbmdJbXBs
Ojp1dGY4SW1wbChjb25zdCBVQ2hhciogY2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3QKICAgICAg
ICAgICAgIEFTU0VSVChyZXN1bHQgIT0gVGFyZ2V0RXhoYXVzdGVkKTsKICAgICAgICAgICAgIC8v
IENvbnZlcnNpb24gZmFpbHMgd2hlbiB0aGVyZSBpcyBhbiB1bnBhaXJlZCBzdXJyb2dhdGUuCiAg
ICAgICAgICAgICAvLyBQdXQgcmVwbGFjZW1lbnQgY2hhcmFjdGVyIChVK0ZGRkQpIGluc3RlYWQg
b2YgdGhlIHVucGFpcmVkIHN1cnJvZ2F0ZS4KLSAgICAgICAgICAgIGlmIChyZXN1bHQgIT0gQ29u
dmVyc2lvbk9LKSB7CisgICAgICAgICAgICBpZiAocmVzdWx0ICE9IENvbnZlcnNpb25SZXN1bHQ6
OkNvbnZlcnNpb25PSykgewogICAgICAgICAgICAgICAgIEFTU0VSVCgoMHhEODAwIDw9ICpjaGFy
YWN0ZXJzICYmICpjaGFyYWN0ZXJzIDw9IDB4REZGRikpOwogICAgICAgICAgICAgICAgIC8vIFRo
ZXJlIHNob3VsZCBiZSByb29tIGxlZnQsIHNpbmNlIG9uZSBVQ2hhciBoYXNuJ3QgYmVlbiBjb252
ZXJ0ZWQuCiAgICAgICAgICAgICAgICAgQVNTRVJUKChidWZmZXIgKyAzKSA8PSBidWZmZXJFbmQp
OwpAQCAtMTY4OCwxMTUgKzE2OTcsODMgQEAgVVRGOENvbnZlcnNpb25FcnJvciBTdHJpbmdJbXBs
Ojp1dGY4SW1wbChjb25zdCBVQ2hhciogY2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3QKICAgICAg
ICAgICAgICAgICArK2NoYXJhY3RlcnM7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICB9
IGVsc2UgeworICAgICAgICByZXR1cm4gQ1N0cmluZyhidWZmZXJWZWN0b3IuZGF0YSgpLCBidWZm
ZXIgLSBidWZmZXJWZWN0b3IuZGF0YSgpKTsKKyAgICB9CisgICAgY2FzZSBTdHJpY3RDb252ZXJz
aW9uOgorICAgIGNhc2UgTGVuaWVudENvbnZlcnNpb246IHsKICAgICAgICAgYm9vbCBzdHJpY3Qg
PSBtb2RlID09IFN0cmljdENvbnZlcnNpb247Ci0gICAgICAgIGNvbnN0IFVDaGFyKiBvcmlnaW5h
bENoYXJhY3RlcnMgPSBjaGFyYWN0ZXJzOwotICAgICAgICBhdXRvIHJlc3VsdCA9IGNvbnZlcnRV
VEYxNlRvVVRGOCgmY2hhcmFjdGVycywgY2hhcmFjdGVycyArIGxlbmd0aCwgJmJ1ZmZlciwgYnVm
ZmVyICsgYnVmZmVyU2l6ZSwgc3RyaWN0KTsKLSAgICAgICAgQVNTRVJUKHJlc3VsdCAhPSBUYXJn
ZXRFeGhhdXN0ZWQpOyAvLyAobGVuZ3RoICogMykgc2hvdWxkIGJlIHN1ZmZpY2llbnQgZm9yIGFu
eSBjb252ZXJzaW9uCi0KLSAgICAgICAgLy8gT25seSBwcm9kdWNlZCBmcm9tIHN0cmljdCBjb252
ZXJzaW9uLgotICAgICAgICBpZiAocmVzdWx0ID09IFNvdXJjZUlsbGVnYWwpIHsKLSAgICAgICAg
ICAgIEFTU0VSVChzdHJpY3QpOwotICAgICAgICAgICAgcmV0dXJuIFVURjhDb252ZXJzaW9uRXJy
b3I6OklsbGVnYWxTb3VyY2U7CisgICAgICAgIGF1dG8gY29udmVydGVkTGVuZ3RoID0gdXRmMTZU
b1VURjhMZW5ndGgoY2hhcmFjdGVycywgY2hhcmFjdGVycyArIGxlbmd0aCwgc3RyaWN0KTsKKyAg
ICAgICAgaWYgKGNvbnZlcnRlZExlbmd0aCA+IE1heExlbmd0aCkKKyAgICAgICAgICAgIHJldHVy
biBtYWtlVW5leHBlY3RlZChVVEY4Q29udmVyc2lvbkVycm9yOjpPdXRPZk1lbW9yeSk7CisgICAg
ICAgIGlmICghY29udmVydGVkTGVuZ3RoKQorICAgICAgICAgICAgcmV0dXJuIENTdHJpbmcoIiIs
IDApOworCisgICAgICAgIGNoYXIqIGRlc3RpbmF0aW9uOworICAgICAgICBhdXRvIHJlc3VsdCA9
IENTdHJpbmc6Om5ld1VuaW5pdGlhbGl6ZWQoY29udmVydGVkTGVuZ3RoLCBkZXN0aW5hdGlvbik7
CisgICAgICAgIGNoYXIqIGRlc3RpbmF0aW9uRW5kID0gZGVzdGluYXRpb24gKyBjb252ZXJ0ZWRM
ZW5ndGg7CisgICAgICAgIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzRW5kID0gY2hhcmFjdGVycyAr
IGxlbmd0aDsKKyAgICAgICAgYXV0byBjb252ZXJzaW9uUmVzdWx0ID0gY29udmVydFVURjE2VG9V
VEY4KCZjaGFyYWN0ZXJzLCBjaGFyYWN0ZXJzRW5kLCAmZGVzdGluYXRpb24sIGRlc3RpbmF0aW9u
RW5kKTsKKyAgICAgICAgc3dpdGNoIChjb252ZXJzaW9uUmVzdWx0KSB7CisgICAgICAgIGNhc2Ug
Q29udmVyc2lvblJlc3VsdDo6Q29udmVyc2lvbk9LOgorICAgICAgICAgICAgQVNTRVJUX1dJVEhf
TUVTU0FHRShkZXN0aW5hdGlvbiA9PSBkZXN0aW5hdGlvbkVuZCwgIklmIGNvbnZlcnRlZExlbmd0
aCB3YXMgY2FsY3VsYXRlZCBjb3JyZWN0bHksIHdlIHNob3VsZCBhbHdheXMgdXNlIGV4YWN0bHkg
dGhlIHdob2xlIGRlc3RpbmF0aW9uIGJ1ZmZlciIpOworICAgICAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKKyAgICAgICAgY2FzZSBDb252ZXJzaW9uUmVzdWx0OjpTb3VyY2VFeGhhdXN0ZWQ6CisgICAg
ICAgICAgICBBU1NFUlQoIXN0cmljdCk7CisgICAgICAgICAgICBBU1NFUlQoY2hhcmFjdGVycyAr
IDEgPT0gY2hhcmFjdGVyc0VuZCk7CisgICAgICAgICAgICBBU1NFUlQoKDB4RDgwMCA8PSAqY2hh
cmFjdGVycyAmJiAqY2hhcmFjdGVycyA8PSAweERGRkYpKTsKKyAgICAgICAgICAgIHB1dFVURjhU
cmlwbGUoZGVzdGluYXRpb24sICpjaGFyYWN0ZXJzKTsKKyAgICAgICAgICAgIEFTU0VSVF9XSVRI
X01FU1NBR0UoZGVzdGluYXRpb24gPT0gZGVzdGluYXRpb25FbmQsICJJZiBjb252ZXJ0ZWRMZW5n
dGggd2FzIGNhbGN1bGF0ZWQgY29ycmVjdGx5LCB3ZSBzaG91bGQgYWx3YXlzIHVzZSBleGFjdGx5
IHRoZSB3aG9sZSBkZXN0aW5hdGlvbiBidWZmZXIiKTsKKyAgICAgICAgICAgIHJldHVybiBtYWtl
VW5leHBlY3RlZChVVEY4Q29udmVyc2lvbkVycm9yOjpTb3VyY2VFeGhhdXN0ZWQpOworICAgICAg
ICBjYXNlIENvbnZlcnNpb25SZXN1bHQ6OlRhcmdldEV4aGF1c3RlZDoKKyAgICAgICAgY2FzZSBD
b252ZXJzaW9uUmVzdWx0OjpTb3VyY2VJbGxlZ2FsOgorICAgICAgICAgICAgUkVMRUFTRV9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgfQotCi0gICAgICAgIC8vIENoZWNrIGZvciBhbiB1
bmNvbnZlcnRlZCBoaWdoIHN1cnJvZ2F0ZS4KLSAgICAgICAgaWYgKHJlc3VsdCA9PSBTb3VyY2VF
eGhhdXN0ZWQpIHsKLSAgICAgICAgICAgIGlmIChzdHJpY3QpCi0gICAgICAgICAgICAgICAgcmV0
dXJuIFVURjhDb252ZXJzaW9uRXJyb3I6OlNvdXJjZUV4aGF1c3RlZDsKLSAgICAgICAgICAgIC8v
IFRoaXMgc2hvdWxkIGJlIG9uZSB1bnBhaXJlZCBoaWdoIHN1cnJvZ2F0ZS4gVHJlYXQgaXQgdGhl
IHNhbWUKLSAgICAgICAgICAgIC8vIHdhcyBhcyBhbiB1bnBhaXJlZCBoaWdoIHN1cnJvZ2F0ZSB3
b3VsZCBoYXZlIGJlZW4gaGFuZGxlZCBpbgotICAgICAgICAgICAgLy8gdGhlIG1pZGRsZSBvZiBh
IHN0cmluZyB3aXRoIG5vbi1zdHJpY3QgY29udmVyc2lvbiAtIHdoaWNoIGlzCi0gICAgICAgICAg
ICAvLyB0byBzYXksIHNpbXBseSBlbmNvZGUgaXQgdG8gVVRGLTguCi0gICAgICAgICAgICBBU1NF
UlRfVU5VU0VEKAotICAgICAgICAgICAgICAgIG9yaWdpbmFsQ2hhcmFjdGVycywgKGNoYXJhY3Rl
cnMgKyAxKSA9PSAob3JpZ2luYWxDaGFyYWN0ZXJzICsgbGVuZ3RoKSk7Ci0gICAgICAgICAgICBB
U1NFUlQoKCpjaGFyYWN0ZXJzID49IDB4RDgwMCkgJiYgKCpjaGFyYWN0ZXJzIDw9IDB4REJGRikp
OwotICAgICAgICAgICAgLy8gVGhlcmUgc2hvdWxkIGJlIHJvb20gbGVmdCwgc2luY2Ugb25lIFVD
aGFyIGhhc24ndCBiZWVuIGNvbnZlcnRlZC4KLSAgICAgICAgICAgIEFTU0VSVCgoYnVmZmVyICsg
MykgPD0gKGJ1ZmZlciArIGJ1ZmZlclNpemUpKTsKLSAgICAgICAgICAgIHB1dFVURjhUcmlwbGUo
YnVmZmVyLCAqY2hhcmFjdGVycyk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCi0gICAgcmV0dXJu
IFVURjhDb252ZXJzaW9uRXJyb3I6Ok5vbmU7CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cisg
ICAgcmV0dXJuIHsgfTsKIH0KIAotRXhwZWN0ZWQ8Q1N0cmluZywgVVRGOENvbnZlcnNpb25FcnJv
cj4gU3RyaW5nSW1wbDo6dXRmOEZvckNoYXJhY3RlcnMoY29uc3QgTENoYXIqIGNoYXJhY3RlcnMs
IHVuc2lnbmVkIGxlbmd0aCkKK0V4cGVjdGVkPENTdHJpbmcsIFVURjhDb252ZXJzaW9uRXJyb3I+
IFN0cmluZ0ltcGw6OnV0ZjhGb3JDaGFyYWN0ZXJzKGNvbnN0IExDaGFyKiBzb3VyY2UsIHVuc2ln
bmVkIGxlbmd0aCkKIHsKICAgICBpZiAoIWxlbmd0aCkKICAgICAgICAgcmV0dXJuIENTdHJpbmco
IiIsIDApOwotICAgIGlmIChsZW5ndGggPiBNYXhMZW5ndGggLyAzKQotICAgICAgICByZXR1cm4g
bWFrZVVuZXhwZWN0ZWQoVVRGOENvbnZlcnNpb25FcnJvcjo6T3V0T2ZNZW1vcnkpOwotICAgIFZl
Y3RvcjxjaGFyLCAxMDI0PiBidWZmZXJWZWN0b3IobGVuZ3RoICogMyk7Ci0gICAgY2hhciogYnVm
ZmVyID0gYnVmZmVyVmVjdG9yLmRhdGEoKTsKLSAgICBjb25zdCBMQ2hhciogc291cmNlID0gY2hh
cmFjdGVyczsKLSAgICBib29sIHN1Y2Nlc3MgPSBjb252ZXJ0TGF0aW4xVG9VVEY4KCZzb3VyY2Us
IHNvdXJjZSArIGxlbmd0aCwgJmJ1ZmZlciwgYnVmZmVyICsgYnVmZmVyVmVjdG9yLnNpemUoKSk7
Ci0gICAgQVNTRVJUX1VOVVNFRChzdWNjZXNzLCBzdWNjZXNzKTsgLy8gKGxlbmd0aCAqIDMpIHNo
b3VsZCBiZSBzdWZmaWNpZW50IGZvciBhbnkgY29udmVyc2lvbgotICAgIHJldHVybiBDU3RyaW5n
KGJ1ZmZlclZlY3Rvci5kYXRhKCksIGJ1ZmZlciAtIGJ1ZmZlclZlY3Rvci5kYXRhKCkpOwotfQog
Ci1FeHBlY3RlZDxDU3RyaW5nLCBVVEY4Q29udmVyc2lvbkVycm9yPiBTdHJpbmdJbXBsOjp1dGY4
Rm9yQ2hhcmFjdGVycyhjb25zdCBVQ2hhciogY2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3RoLCBD
b252ZXJzaW9uTW9kZSBtb2RlKQotewotICAgIGlmICghbGVuZ3RoKQotICAgICAgICByZXR1cm4g
Q1N0cmluZygiIiwgMCk7Ci0gICAgaWYgKGxlbmd0aCA+IE1heExlbmd0aCAvIDMpCisgICAgYXV0
byBjb252ZXJ0ZWRMZW5ndGggPSBsYXRpbjFUb1VURjhMZW5ndGgoc291cmNlLCBzb3VyY2UgKyBs
ZW5ndGgpOworICAgIGlmIChjb252ZXJ0ZWRMZW5ndGggPiBNYXhMZW5ndGgpCiAgICAgICAgIHJl
dHVybiBtYWtlVW5leHBlY3RlZChVVEY4Q29udmVyc2lvbkVycm9yOjpPdXRPZk1lbW9yeSk7Ci0g
ICAgVmVjdG9yPGNoYXIsIDEwMjQ+IGJ1ZmZlclZlY3RvcihsZW5ndGggKiAzKTsKLSAgICBjaGFy
KiBidWZmZXIgPSBidWZmZXJWZWN0b3IuZGF0YSgpOwotICAgIFVURjhDb252ZXJzaW9uRXJyb3Ig
ZXJyb3IgPSB1dGY4SW1wbChjaGFyYWN0ZXJzLCBsZW5ndGgsIGJ1ZmZlciwgYnVmZmVyVmVjdG9y
LnNpemUoKSwgbW9kZSk7Ci0gICAgaWYgKGVycm9yICE9IFVURjhDb252ZXJzaW9uRXJyb3I6Ok5v
bmUpCi0gICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJvcik7Ci0gICAgcmV0dXJuIENT
dHJpbmcoYnVmZmVyVmVjdG9yLmRhdGEoKSwgYnVmZmVyIC0gYnVmZmVyVmVjdG9yLmRhdGEoKSk7
Ci19Ci0KLUV4cGVjdGVkPENTdHJpbmcsIFVURjhDb252ZXJzaW9uRXJyb3I+IFN0cmluZ0ltcGw6
OnRyeUdldFV0ZjhGb3JSYW5nZSh1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCwgQ29u
dmVyc2lvbk1vZGUgbW9kZSkgY29uc3QKLXsKLSAgICBBU1NFUlQob2Zmc2V0IDw9IHRoaXMtPmxl
bmd0aCgpKTsKLSAgICBBU1NFUlQob2Zmc2V0ICsgbGVuZ3RoIDw9IHRoaXMtPmxlbmd0aCgpKTsK
ICAgICAKLSAgICBpZiAoIWxlbmd0aCkKLSAgICAgICAgcmV0dXJuIENTdHJpbmcoIiIsIDApOwot
Ci0gICAgLy8gQWxsb2NhdGUgYSBidWZmZXIgYmlnIGVub3VnaCB0byBob2xkIGFsbCB0aGUgY2hh
cmFjdGVycwotICAgIC8vIChhbiBpbmRpdmlkdWFsIFVURi0xNiBVQ2hhciBjYW4gb25seSBleHBh
bmQgdG8gMyBVVEYtOCBieXRlcykuCi0gICAgLy8gT3B0aW1pemF0aW9uIGlkZWFzLCBpZiB3ZSBm
aW5kIHRoaXMgZnVuY3Rpb24gaXMgaG90OgotICAgIC8vICAqIFdlIGNvdWxkIHNwZWN1bGF0aXZl
bHkgY3JlYXRlIGEgQ1N0cmluZ0J1ZmZlciB0byBjb250YWluICdsZW5ndGgnIAotICAgIC8vICAg
IGNoYXJhY3RlcnMsIGFuZCByZXNpemUgaWYgbmVjZXNzYXJ5IChpLmUuIGlmIHRoZSBidWZmZXIg
Y29udGFpbnMKLSAgICAvLyAgICBub24tYXNjaWkgY2hhcmFjdGVycykuIChBbHRlcm5hdGl2ZWx5
LCBzY2FuIHRoZSBidWZmZXIgZmlyc3QgZm9yCi0gICAgLy8gICAgYXNjaWkgY2hhcmFjdGVycywg
c28gd2Uga25vdyB0aGlzIHdpbGwgYmUgc3VmZmljaWVudCkuCi0gICAgLy8gICogV2UgY291bGQg
YWxsb2NhdGUgYSBDU3RyaW5nQnVmZmVyIHdpdGggYW4gYXBwcm9wcmlhdGUgc2l6ZSB0bwotICAg
IC8vICAgIGhhdmUgYSBnb29kIGNoYW5jZSBvZiBiZWluZyBhYmxlIHRvIHdyaXRlIHRoZSBzdHJp
bmcgaW50byB0aGUKLSAgICAvLyAgICBidWZmZXIgd2l0aG91dCByZWFsbG9jaW5nIChzYXksIDEu
NSB4IGxlbmd0aCkuCi0gICAgaWYgKGxlbmd0aCA+IE1heExlbmd0aCAvIDMpCi0gICAgICAgIHJl
dHVybiBtYWtlVW5leHBlY3RlZChVVEY4Q29udmVyc2lvbkVycm9yOjpPdXRPZk1lbW9yeSk7Ci0g
ICAgVmVjdG9yPGNoYXIsIDEwMjQ+IGJ1ZmZlclZlY3RvcihsZW5ndGggKiAzKTsKLQotICAgIGNo
YXIqIGJ1ZmZlciA9IGJ1ZmZlclZlY3Rvci5kYXRhKCk7Ci0KLSAgICBpZiAoaXM4Qml0KCkpIHsK
LSAgICAgICAgY29uc3QgTENoYXIqIGNoYXJhY3RlcnMgPSB0aGlzLT5jaGFyYWN0ZXJzOCgpICsg
b2Zmc2V0OwotICAgICAgICBhdXRvIHN1Y2Nlc3MgPSBjb252ZXJ0TGF0aW4xVG9VVEY4KCZjaGFy
YWN0ZXJzLCBjaGFyYWN0ZXJzICsgbGVuZ3RoLCAmYnVmZmVyLCBidWZmZXIgKyBidWZmZXJWZWN0
b3Iuc2l6ZSgpKTsKLSAgICAgICAgQVNTRVJUX1VOVVNFRChzdWNjZXNzLCBzdWNjZXNzKTsgLy8g
KGxlbmd0aCAqIDMpIHNob3VsZCBiZSBzdWZmaWNpZW50IGZvciBhbnkgY29udmVyc2lvbgotICAg
IH0gZWxzZSB7Ci0gICAgICAgIFVURjhDb252ZXJzaW9uRXJyb3IgZXJyb3IgPSB1dGY4SW1wbCh0
aGlzLT5jaGFyYWN0ZXJzMTYoKSArIG9mZnNldCwgbGVuZ3RoLCBidWZmZXIsIGJ1ZmZlclZlY3Rv
ci5zaXplKCksIG1vZGUpOwotICAgICAgICBpZiAoZXJyb3IgIT0gVVRGOENvbnZlcnNpb25FcnJv
cjo6Tm9uZSkKLSAgICAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJvcik7Ci0gICAg
fQotCi0gICAgcmV0dXJuIENTdHJpbmcoYnVmZmVyVmVjdG9yLmRhdGEoKSwgYnVmZmVyIC0gYnVm
ZmVyVmVjdG9yLmRhdGEoKSk7CisgICAgY2hhciogZGVzdGluYXRpb247CisgICAgYXV0byByZXN1
bHQgPSBDU3RyaW5nOjpuZXdVbmluaXRpYWxpemVkKGNvbnZlcnRlZExlbmd0aCwgZGVzdGluYXRp
b24pOworICAgIGNoYXIqIGRlc3RpbmF0aW9uRW5kID0gZGVzdGluYXRpb24gKyBjb252ZXJ0ZWRM
ZW5ndGg7CisgICAgYm9vbCBzdWNjZXNzID0gY29udmVydExhdGluMVRvVVRGOCgmc291cmNlLCBz
b3VyY2UgKyBsZW5ndGgsICZkZXN0aW5hdGlvbiwgZGVzdGluYXRpb25FbmQpOworICAgIEFTU0VS
VF9VTlVTRUQoc3VjY2Vzcywgc3VjY2Vzcyk7CisgICAgQVNTRVJUX1dJVEhfTUVTU0FHRShkZXN0
aW5hdGlvbiA9PSBkZXN0aW5hdGlvbkVuZCwgIklmIGNvbnZlcnRlZExlbmd0aCB3YXMgY2FsY3Vs
YXRlZCBjb3JyZWN0bHksIHdlIHNob3VsZCBhbHdheXMgdXNlIGV4YWN0bHkgdGhlIHdob2xlIGRl
c3RpbmF0aW9uIGJ1ZmZlciIpOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIEV4cGVjdGVkPENT
dHJpbmcsIFVURjhDb252ZXJzaW9uRXJyb3I+IFN0cmluZ0ltcGw6OnRyeUdldFV0ZjgoQ29udmVy
c2lvbk1vZGUgbW9kZSkgY29uc3QKIHsKLSAgICByZXR1cm4gdHJ5R2V0VXRmOEZvclJhbmdlKDAs
IGxlbmd0aCgpLCBtb2RlKTsKKyAgICBpZiAoaXM4Qml0KCkpCisgICAgICAgIHJldHVybiB1dGY4
Rm9yQ2hhcmFjdGVycyhjaGFyYWN0ZXJzOCgpLCBsZW5ndGgoKSk7CisgICAgcmV0dXJuIHV0ZjhG
b3JDaGFyYWN0ZXJzKGNoYXJhY3RlcnMxNigpLCBsZW5ndGgoKSwgbW9kZSk7CiB9CiAKIENTdHJp
bmcgU3RyaW5nSW1wbDo6dXRmOChDb252ZXJzaW9uTW9kZSBtb2RlKSBjb25zdAogewotICAgIGF1
dG8gZXhwZWN0ZWRTdHJpbmcgPSB0cnlHZXRVdGY4Rm9yUmFuZ2UoMCwgbGVuZ3RoKCksIG1vZGUp
OworICAgIGF1dG8gZXhwZWN0ZWRTdHJpbmcgPSB0cnlHZXRVdGY4KG1vZGUpOwogICAgIFJFTEVB
U0VfQVNTRVJUKGV4cGVjdGVkU3RyaW5nKTsKICAgICByZXR1cm4gZXhwZWN0ZWRTdHJpbmcudmFs
dWUoKTsKIH0KIAorc2l6ZV90IFN0cmluZ0ltcGw6OnV0ZjhMZW5ndGgoQ29udmVyc2lvbk1vZGUg
bW9kZSkgY29uc3QKK3sKKyAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKG1vZGUgIT0gU3RyaWN0Q29u
dmVyc2lvblJlcGxhY2luZ1VucGFpcmVkU3Vycm9nYXRlc1dpdGhGRkZELCAidXRmOExlbmd0aCB3
aXRoIFN0cmljdENvbnZlcnNpb25SZXBsYWNpbmdVbnBhaXJlZFN1cnJvZ2F0ZXNXaXRoRkZGRCBp
cyB1bnN1cHBvcnRlZCIpOworICAgIGlmIChpczhCaXQoKSkKKyAgICAgICAgcmV0dXJuIGxhdGlu
MVRvVVRGOExlbmd0aChjaGFyYWN0ZXJzOCgpLCBjaGFyYWN0ZXJzOCgpICsgbGVuZ3RoKCkpOwor
ICAgIHJldHVybiB1dGYxNlRvVVRGOExlbmd0aChjaGFyYWN0ZXJzMTYoKSwgY2hhcmFjdGVyczE2
KCkgKyBsZW5ndGgoKSwgbW9kZSA9PSBTdHJpY3RDb252ZXJzaW9uKTsKK30KKwogTkVWRVJfSU5M
SU5FIHVuc2lnbmVkIFN0cmluZ0ltcGw6Omhhc2hTbG93Q2FzZSgpIGNvbnN0CiB7CiAgICAgaWYg
KGlzOEJpdCgpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdJbXBsLmgg
Yi9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ0ltcGwuaAppbmRleCBjNzZjZDUyMzY3NjExYzk0
MmQzNDJiZjA5MWIxNjJhMGE2Nzc0NGUwLi5hM2JjNTA4NjU5ZTRjMGMyZjVlZDVjM2NiN2Q2MmVk
ZTEwN2VhMjhhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ0ltcGwuaAor
KysgYi9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ0ltcGwuaApAQCAtMzE0LDEzICszMTQsMTEg
QEAgcHVibGljOgogICAgIHN0YXRpYyBXVEZfRVhQT1JUX1BSSVZBVEUgRXhwZWN0ZWQ8Q1N0cmlu
ZywgVVRGOENvbnZlcnNpb25FcnJvcj4gdXRmOEZvckNoYXJhY3RlcnMoY29uc3QgTENoYXIqIGNo
YXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCk7CiAgICAgc3RhdGljIFdURl9FWFBPUlRfUFJJVkFU
RSBFeHBlY3RlZDxDU3RyaW5nLCBVVEY4Q29udmVyc2lvbkVycm9yPiB1dGY4Rm9yQ2hhcmFjdGVy
cyhjb25zdCBVQ2hhciogY2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3RoLCBDb252ZXJzaW9uTW9k
ZSA9IExlbmllbnRDb252ZXJzaW9uKTsKIAotICAgIFdURl9FWFBPUlRfUFJJVkFURSBFeHBlY3Rl
ZDxDU3RyaW5nLCBVVEY4Q29udmVyc2lvbkVycm9yPiB0cnlHZXRVdGY4Rm9yUmFuZ2UodW5zaWdu
ZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgsIENvbnZlcnNpb25Nb2RlID0gTGVuaWVudENvbnZl
cnNpb24pIGNvbnN0OwogICAgIFdURl9FWFBPUlRfUFJJVkFURSBFeHBlY3RlZDxDU3RyaW5nLCBV
VEY4Q29udmVyc2lvbkVycm9yPiB0cnlHZXRVdGY4KENvbnZlcnNpb25Nb2RlID0gTGVuaWVudENv
bnZlcnNpb24pIGNvbnN0OwogICAgIFdURl9FWFBPUlRfUFJJVkFURSBDU3RyaW5nIHV0ZjgoQ29u
dmVyc2lvbk1vZGUgPSBMZW5pZW50Q29udmVyc2lvbikgY29uc3Q7CisgICAgV1RGX0VYUE9SVF9Q
UklWQVRFIHNpemVfdCB1dGY4TGVuZ3RoKENvbnZlcnNpb25Nb2RlID0gTGVuaWVudENvbnZlcnNp
b24pIGNvbnN0OwogCi1wcml2YXRlOgotICAgIHN0YXRpYyBXVEZfRVhQT1JUX1BSSVZBVEUgVVRG
OENvbnZlcnNpb25FcnJvciB1dGY4SW1wbChjb25zdCBVQ2hhciogY2hhcmFjdGVycywgdW5zaWdu
ZWQgbGVuZ3RoLCBjaGFyKiYgYnVmZmVyLCBzaXplX3QgYnVmZmVyU2l6ZSwgQ29udmVyc2lvbk1v
ZGUpOwotICAgIAorcHJpdmF0ZTogICAgCiAgICAgLy8gVGhlIGhpZ2ggYml0cyBvZiAnaGFzaCcg
YXJlIGFsd2F5cyBlbXB0eSwgYnV0IHdlIHByZWZlciB0byBzdG9yZSBvdXIgZmxhZ3MKICAgICAv
LyBpbiB0aGUgbG93IGJpdHMgYmVjYXVzZSBpdCBtYWtlcyB0aGVtIHNsaWdodGx5IG1vcmUgZWZm
aWNpZW50IHRvIGFjY2Vzcy4KICAgICAvLyBTbywgd2Ugc2hpZnQgbGVmdCBhbmQgcmlnaHQgd2hl
biBzZXR0aW5nIGFuZCBnZXR0aW5nIG91ciBoYXNoIGNvZGUuCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V1RGL3d0Zi90ZXh0L1VURjhDb252ZXJzaW9uRXJyb3IuaCBiL1NvdXJjZS9XVEYvd3RmL3RleHQv
VVRGOENvbnZlcnNpb25FcnJvci5oCmluZGV4IDhmYjI4ZWViZmIwNmNjYTdjODRkM2E1ZGQzMTE4
MzRhNWVlMzdkYzQuLmIyZDg4ZTdiYTkzOTUyZGY1ZmM4ZDE0MWQ3NzIxNDY3ZmZmMmI2ZGMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL3RleHQvVVRGOENvbnZlcnNpb25FcnJvci5oCisrKyBi
L1NvdXJjZS9XVEYvd3RmL3RleHQvVVRGOENvbnZlcnNpb25FcnJvci5oCkBAIC0yNyw4ICsyNyw3
IEBACiAKIG5hbWVzcGFjZSBXVEYgewogCi1lbnVtIGNsYXNzIFVURjhDb252ZXJzaW9uRXJyb3Ig
ewotICAgIE5vbmUsCitlbnVtIGNsYXNzIFVURjhDb252ZXJzaW9uRXJyb3IgOiB1aW50OF90IHsK
ICAgICBPdXRPZk1lbW9yeSwKICAgICBJbGxlZ2FsU291cmNlLAogICAgIFNvdXJjZUV4aGF1c3Rl
ZApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvdGV4dC9XVEZTdHJpbmcuY3BwIGIvU291cmNl
L1dURi93dGYvdGV4dC9XVEZTdHJpbmcuY3BwCmluZGV4IDNhOTFhNjc3ZDVjMDM4ZTAzYjdjNWVi
MzJmMzczM2JlZmMwOGNhNTUuLmE1ZmUzNzY1ZTBiZTEzMGY4NzgyZjc1MGQ0NDE2MzVmNmU1ZTU5
NTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL3RleHQvV1RGU3RyaW5nLmNwcAorKysgYi9T
b3VyY2UvV1RGL3d0Zi90ZXh0L1dURlN0cmluZy5jcHAKQEAgLTY4OSwxMiArNjg5LDEzIEBAIENT
dHJpbmcgU3RyaW5nOjp1dGY4KENvbnZlcnNpb25Nb2RlIG1vZGUpIGNvbnN0CiB7CiAgICAgRXhw
ZWN0ZWQ8Q1N0cmluZywgVVRGOENvbnZlcnNpb25FcnJvcj4gZXhwZWN0ZWRTdHJpbmcgPSB0cnlH
ZXRVdGY4KG1vZGUpOwogICAgIFJFTEVBU0VfQVNTRVJUKGV4cGVjdGVkU3RyaW5nKTsKKyAgICBB
U1NFUlQobW9kZSA9PSBTdHJpY3RDb252ZXJzaW9uUmVwbGFjaW5nVW5wYWlyZWRTdXJyb2dhdGVz
V2l0aEZGRkQgfHwgZXhwZWN0ZWRTdHJpbmctPmxlbmd0aCgpID09IHV0ZjhMZW5ndGgobW9kZSkp
OwogICAgIHJldHVybiBleHBlY3RlZFN0cmluZy52YWx1ZSgpOwogfQogCi1DU3RyaW5nIFN0cmlu
Zzo6dXRmOCgpIGNvbnN0CitzaXplX3QgU3RyaW5nOjp1dGY4TGVuZ3RoKENvbnZlcnNpb25Nb2Rl
IG1vZGUpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIHV0ZjgoTGVuaWVudENvbnZlcnNpb24pOworICAg
IHJldHVybiBtX2ltcGwgPyBtX2ltcGwtPnV0ZjhMZW5ndGgobW9kZSkgOiAwOwogfQogCiBTdHJp
bmcgU3RyaW5nOjptYWtlOEJpdEZyb20xNkJpdFNvdXJjZShjb25zdCBVQ2hhciogc291cmNlLCBz
aXplX3QgbGVuZ3RoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvdGV4dC9XVEZTdHJpbmcu
aCBiL1NvdXJjZS9XVEYvd3RmL3RleHQvV1RGU3RyaW5nLmgKaW5kZXggNTExYjljMTY0YTFhNThj
MTFkNGNmZDUzMjFlMzJmNTI3YjRjOWVkNi4uNzdjMGQzNzhmMjM5MzdiNjkwMzE5MzM5NWFjMjFh
NjYzMDY2MmQ4MiAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvdGV4dC9XVEZTdHJpbmcuaAor
KysgYi9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1dURlN0cmluZy5oCkBAIC0xMzgsOCArMTM4LDggQEAg
cHVibGljOgogICAgIFdURl9FWFBPUlRfUFJJVkFURSBDU3RyaW5nIGFzY2lpKCkgY29uc3Q7CiAg
ICAgV1RGX0VYUE9SVF9QUklWQVRFIENTdHJpbmcgbGF0aW4xKCkgY29uc3Q7CiAKLSAgICBXVEZf
RVhQT1JUX1BSSVZBVEUgQ1N0cmluZyB1dGY4KENvbnZlcnNpb25Nb2RlKSBjb25zdDsKLSAgICBX
VEZfRVhQT1JUX1BSSVZBVEUgQ1N0cmluZyB1dGY4KCkgY29uc3Q7CisgICAgV1RGX0VYUE9SVF9Q
UklWQVRFIENTdHJpbmcgdXRmOChDb252ZXJzaW9uTW9kZSA9IExlbmllbnRDb252ZXJzaW9uKSBj
b25zdDsKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgc2l6ZV90IHV0ZjhMZW5ndGgoQ29udmVyc2lv
bk1vZGUgPSBMZW5pZW50Q29udmVyc2lvbikgY29uc3Q7CiAKICAgICBXVEZfRVhQT1JUX1BSSVZB
VEUgRXhwZWN0ZWQ8Q1N0cmluZywgVVRGOENvbnZlcnNpb25FcnJvcj4gdHJ5R2V0VXRmOChDb252
ZXJzaW9uTW9kZSkgY29uc3Q7CiAgICAgV1RGX0VYUE9SVF9QUklWQVRFIEV4cGVjdGVkPENTdHJp
bmcsIFVURjhDb252ZXJzaW9uRXJyb3I+IHRyeUdldFV0ZjgoKSBjb25zdDsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XVEYvd3RmL3VuaWNvZGUvVVRGOENvbnZlcnNpb24uY3BwIGIvU291cmNlL1dURi93
dGYvdW5pY29kZS9VVEY4Q29udmVyc2lvbi5jcHAKaW5kZXggMDdhZTg5NzE3NTFiNmVjZjI3MDc3
YjQ0NGIxNDlhNjYxMGNjY2E4Ny4uNGU2NTViZTNlNDliMjY4MDYzNDhjMmZkNjAyYzYxNGJjZDQx
NGIxOCAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvdW5pY29kZS9VVEY4Q29udmVyc2lvbi5j
cHAKKysrIGIvU291cmNlL1dURi93dGYvdW5pY29kZS9VVEY4Q29udmVyc2lvbi5jcHAKQEAgLTM0
LDE3ICszNCwzMiBAQAogbmFtZXNwYWNlIFdURiB7CiBuYW1lc3BhY2UgVW5pY29kZSB7CiAKK3Np
emVfdCBsYXRpbjFUb1VURjhMZW5ndGgoY29uc3QgTENoYXIqIHNvdXJjZVN0YXJ0LCBjb25zdCBM
Q2hhciogc291cmNlRW5kKQoreworICAgIHNpemVfdCBsZW5ndGggPSAwOworICAgIGZvciAoY29u
c3QgTENoYXIqIHNvdXJjZSA9IHNvdXJjZVN0YXJ0OyBzb3VyY2UgPCBzb3VyY2VFbmQ7ICsrc291
cmNlKSB7CisgICAgICAgIHVpbnQ4X3QgYnVmZmVyW1U4X01BWF9MRU5HVEhdOworICAgICAgICBp
bnQzMl90IGkgPSAwOworICAgICAgICAvLyBBbGwgMjU2IHBvc3NpYmxlIGNvZGUgcG9pbnRzIGFy
ZSB2YWxpZCwgYW5kIHRoZSBidWZmZXIgaXMgYWx3YXlzIGJpZyBlbm91Z2gsCisgICAgICAgIC8v
IHNvIGl0J3Mgc2FmZSB0byB1c2UgVThfQVBQRU5EX1VOU0FGRS4KKyAgICAgICAgVThfQVBQRU5E
X1VOU0FGRShidWZmZXIsIGksICpzb3VyY2UpOworICAgICAgICBsZW5ndGggKz0gaTsKKyAgICB9
CisgICAgcmV0dXJuIGxlbmd0aDsKK30KKwogYm9vbCBjb252ZXJ0TGF0aW4xVG9VVEY4KGNvbnN0
IExDaGFyKiogc291cmNlU3RhcnQsIGNvbnN0IExDaGFyKiBzb3VyY2VFbmQsIGNoYXIqKiB0YXJn
ZXRTdGFydCwgY2hhciogdGFyZ2V0RW5kKQogewogICAgIGNvbnN0IExDaGFyKiBzb3VyY2U7CiAg
ICAgY2hhciogdGFyZ2V0ID0gKnRhcmdldFN0YXJ0OwotICAgIGludCBpID0gMDsKKyAgICBpbnQz
Ml90IGkgPSAwOwogICAgIGZvciAoc291cmNlID0gKnNvdXJjZVN0YXJ0OyBzb3VyY2UgPCBzb3Vy
Y2VFbmQ7ICsrc291cmNlKSB7CiAgICAgICAgIFVCb29sIHNhd0Vycm9yID0gZmFsc2U7CiAgICAg
ICAgIC8vIFdvcmsgYXJvdW5kIGJ1ZyBpbiBlaXRoZXIgV2luZG93cyBjb21waWxlciBvciBvbGQg
dmVyc2lvbiBvZiBJQ1UsIHdoZXJlIHBhc3NpbmcgYSB1aW50OF90IHRvCiAgICAgICAgIC8vIFU4
X0FQUEVORCB3YXJucywgYnkgY29udmVydGluZyBmcm9tIHVpbnQ4X3QgdG8gYSB3aWRlciB0eXBl
LgogICAgICAgICBVQ2hhcjMyIGNoYXJhY3RlciA9ICpzb3VyY2U7CiAgICAgICAgIFU4X0FQUEVO
RChyZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPih0YXJnZXQpLCBpLCB0YXJnZXRFbmQgLSAqdGFy
Z2V0U3RhcnQsIGNoYXJhY3Rlciwgc2F3RXJyb3IpOworICAgICAgICBBU1NFUlRfV0lUSF9NRVNT
QUdFKCFzYXdFcnJvciwgIlVURjggZGVzdGluYXRpb24gYnVmZmVyIHdhcyBub3QgYmlnIGVub3Vn
aCIpOwogICAgICAgICBpZiAoc2F3RXJyb3IpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgfQpAQCAtNTMsMzEgKzY4LDU4IEBAIGJvb2wgY29udmVydExhdGluMVRvVVRGOChjb25zdCBM
Q2hhcioqIHNvdXJjZVN0YXJ0LCBjb25zdCBMQ2hhciogc291cmNlRW5kLCBjaGFyCiAgICAgcmV0
dXJuIHRydWU7CiB9CiAKK3NpemVfdCB1dGYxNlRvVVRGOExlbmd0aChjb25zdCBVQ2hhciogc291
cmNlU3RhcnQsIGNvbnN0IFVDaGFyKiBzb3VyY2VFbmQsIGJvb2wgc3RyaWN0KQoreworICAgIHNp
emVfdCBsZW5ndGggPSAwOworICAgIGNvbnN0IFVDaGFyKiBzb3VyY2UgPSBzb3VyY2VTdGFydDsK
KyAgICB3aGlsZSAoc291cmNlIDwgc291cmNlRW5kKSB7CisgICAgICAgIFVDaGFyMzIgY2g7Cisg
ICAgICAgIGludCBqID0gMDsKKyAgICAgICAgVTE2X05FWFQoc291cmNlLCBqLCBzb3VyY2VFbmQg
LSBzb3VyY2UsIGNoKTsKKyAgICAgICAgaWYgKFVfSVNfU1VSUk9HQVRFKGNoKSkgeworICAgICAg
ICAgICAgaWYgKHN0cmljdCkKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAg
IGlmIChzb3VyY2UgKyBqID09IHNvdXJjZUVuZCAmJiBVX0lTX1NVUlJPR0FURV9MRUFEKGNoKSkK
KyAgICAgICAgICAgICAgICByZXR1cm4gbGVuZ3RoICsgMzsKKyAgICAgICAgICAgIGNoID0gcmVw
bGFjZW1lbnRDaGFyYWN0ZXI7CisgICAgICAgIH0KKyAgICAgICAgc291cmNlICs9IGo7CisKKyAg
ICAgICAgLy8gV2UgYWxyZWFkeSBjaGVja2VkIHRoYXQgY2ggaXMgYSB2YWxpZCBjb2RlIHBvaW50
LCBhbmQgdGhlIGJ1ZmZlciBpcyBhbHdheXMgYmlnIGVub3VnaCwKKyAgICAgICAgLy8gc28gaXQn
cyBzYWZlIHRvIHVzZSBVOF9BUFBFTkRfVU5TQUZFLgorICAgICAgICB1aW50OF90IGJ1ZmZlcltV
OF9NQVhfTEVOR1RIXTsKKyAgICAgICAgaW50MzJfdCBpID0gMDsKKyAgICAgICAgVThfQVBQRU5E
X1VOU0FGRShidWZmZXIsIGksIGNoKTsKKyAgICAgICAgbGVuZ3RoICs9IGk7CisgICAgfQorICAg
IHJldHVybiBsZW5ndGg7Cit9CisKIENvbnZlcnNpb25SZXN1bHQgY29udmVydFVURjE2VG9VVEY4
KGNvbnN0IFVDaGFyKiogc291cmNlU3RhcnQsIGNvbnN0IFVDaGFyKiBzb3VyY2VFbmQsIGNoYXIq
KiB0YXJnZXRTdGFydCwgY2hhciogdGFyZ2V0RW5kLCBib29sIHN0cmljdCkKIHsKLSAgICBDb252
ZXJzaW9uUmVzdWx0IHJlc3VsdCA9IENvbnZlcnNpb25PSzsKKyAgICBhdXRvIHJlc3VsdCA9IENv
bnZlcnNpb25SZXN1bHQ6OkNvbnZlcnNpb25PSzsKICAgICBjb25zdCBVQ2hhciogc291cmNlID0g
KnNvdXJjZVN0YXJ0OwogICAgIGNoYXIqIHRhcmdldCA9ICp0YXJnZXRTdGFydDsKICAgICBVQm9v
bCBzYXdFcnJvciA9IGZhbHNlOwotICAgIGludCBpID0gMDsKKyAgICBpbnQzMl90IGkgPSAwOwog
ICAgIHdoaWxlIChzb3VyY2UgPCBzb3VyY2VFbmQpIHsKICAgICAgICAgVUNoYXIzMiBjaDsKICAg
ICAgICAgaW50IGogPSAwOwogICAgICAgICBVMTZfTkVYVChzb3VyY2UsIGosIHNvdXJjZUVuZCAt
IHNvdXJjZSwgY2gpOwogICAgICAgICBpZiAoVV9JU19TVVJST0dBVEUoY2gpKSB7CiAgICAgICAg
ICAgICBpZiAoc291cmNlICsgaiA9PSBzb3VyY2VFbmQgJiYgVV9JU19TVVJST0dBVEVfTEVBRChj
aCkpIHsKLSAgICAgICAgICAgICAgICByZXN1bHQgPSBTb3VyY2VFeGhhdXN0ZWQ7CisgICAgICAg
ICAgICAgICAgcmVzdWx0ID0gQ29udmVyc2lvblJlc3VsdDo6U291cmNlRXhoYXVzdGVkOwogICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKHN0cmlj
dCkgewotICAgICAgICAgICAgICAgIHJlc3VsdCA9IFNvdXJjZUlsbGVnYWw7CisgICAgICAgICAg
ICAgICAgcmVzdWx0ID0gQ29udmVyc2lvblJlc3VsdDo6U291cmNlSWxsZWdhbDsKICAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGNoID0gcmVwbGFjZW1l
bnRDaGFyYWN0ZXI7CiAgICAgICAgIH0KICAgICAgICAgVThfQVBQRU5EKHJlaW50ZXJwcmV0X2Nh
c3Q8dWludDhfdCo+KHRhcmdldCksIGksIHRhcmdldEVuZCAtIHRhcmdldCwgY2gsIHNhd0Vycm9y
KTsKICAgICAgICAgaWYgKHNhd0Vycm9yKSB7Ci0gICAgICAgICAgICByZXN1bHQgPSBUYXJnZXRF
eGhhdXN0ZWQ7CisgICAgICAgICAgICByZXN1bHQgPSBDb252ZXJzaW9uUmVzdWx0OjpUYXJnZXRF
eGhhdXN0ZWQ7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBzb3VyY2Ug
Kz0gajsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL3VuaWNvZGUvVVRGOENvbnZlcnNpb24u
aCBiL1NvdXJjZS9XVEYvd3RmL3VuaWNvZGUvVVRGOENvbnZlcnNpb24uaAppbmRleCA5ZTg1MDZm
OTJjMzJkNWRjMjBmNTM3YmJjN2YxZGRiMTU4NjQzNDZmLi4wZDI5NDBkNGUzNzFjMzYwOTk2ZTJm
MjAwZTI2MmM1MzM3MWYwNmJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi91bmljb2RlL1VU
RjhDb252ZXJzaW9uLmgKKysrIGIvU291cmNlL1dURi93dGYvdW5pY29kZS9VVEY4Q29udmVyc2lv
bi5oCkBAIC0zMSw3ICszMSw3IEBACiBuYW1lc3BhY2UgV1RGIHsKIG5hbWVzcGFjZSBVbmljb2Rl
IHsKIAotZW51bSBDb252ZXJzaW9uUmVzdWx0IHsKK2VudW0gY2xhc3MgQ29udmVyc2lvblJlc3Vs
dCA6IHVpbnQ4X3QgewogICAgIENvbnZlcnNpb25PSywgLy8gY29udmVyc2lvbiBzdWNjZXNzZnVs
CiAgICAgU291cmNlRXhoYXVzdGVkLCAvLyBwYXJ0aWFsIGNoYXJhY3RlciBpbiBzb3VyY2UsIGJ1
dCBoaXQgZW5kCiAgICAgVGFyZ2V0RXhoYXVzdGVkLCAvLyBpbnN1ZmZpY2llbnQgcm9vbSBpbiB0
YXJnZXQgZm9yIGNvbnZlcnNpb24KQEAgLTQ3LDggKzQ3LDkgQEAgZW51bSBDb252ZXJzaW9uUmVz
dWx0IHsKIFdURl9FWFBPUlRfUFJJVkFURSBib29sIGNvbnZlcnRVVEY4VG9VVEYxNihjb25zdCBj
aGFyKiBzb3VyY2VTdGFydCwgY29uc3QgY2hhciogc291cmNlRW5kLCBVQ2hhcioqIHRhcmdldFN0
YXJ0LCBVQ2hhciogdGFyZ2V0RW5kLCBib29sKiBpc1NvdXJjZUFsbEFTQ0lJID0gbnVsbHB0cik7
CiBXVEZfRVhQT1JUX1BSSVZBVEUgYm9vbCBjb252ZXJ0VVRGOFRvVVRGMTZSZXBsYWNpbmdJbnZh
bGlkU2VxdWVuY2VzKGNvbnN0IGNoYXIqIHNvdXJjZVN0YXJ0LCBjb25zdCBjaGFyKiBzb3VyY2VF
bmQsIFVDaGFyKiogdGFyZ2V0U3RhcnQsIFVDaGFyKiB0YXJnZXRFbmQsIGJvb2wqIGlzU291cmNl
QWxsQVNDSUkgPSBudWxscHRyKTsKIFdURl9FWFBPUlRfUFJJVkFURSBib29sIGNvbnZlcnRMYXRp
bjFUb1VURjgoY29uc3QgTENoYXIqKiBzb3VyY2VTdGFydCwgY29uc3QgTENoYXIqIHNvdXJjZUVu
ZCwgY2hhcioqIHRhcmdldFN0YXJ0LCBjaGFyKiB0YXJnZXRFbmQpOworV1RGX0VYUE9SVF9QUklW
QVRFIHNpemVfdCBsYXRpbjFUb1VURjhMZW5ndGgoY29uc3QgTENoYXIqIHNvdXJjZVN0YXJ0LCBj
b25zdCBMQ2hhciogc291cmNlRW5kKTsKIFdURl9FWFBPUlRfUFJJVkFURSBDb252ZXJzaW9uUmVz
dWx0IGNvbnZlcnRVVEYxNlRvVVRGOChjb25zdCBVQ2hhcioqIHNvdXJjZVN0YXJ0LCBjb25zdCBV
Q2hhciogc291cmNlRW5kLCBjaGFyKiogdGFyZ2V0U3RhcnQsIGNoYXIqIHRhcmdldEVuZCwgYm9v
bCBzdHJpY3QgPSB0cnVlKTsKLQorV1RGX0VYUE9SVF9QUklWQVRFIHNpemVfdCB1dGYxNlRvVVRG
OExlbmd0aChjb25zdCBVQ2hhciogc291cmNlU3RhcnQsIGNvbnN0IFVDaGFyKiBzb3VyY2VFbmQs
IGJvb2wgc3RyaWN0ID0gdHJ1ZSk7CiBXVEZfRVhQT1JUX1BSSVZBVEUgdW5zaWduZWQgY2FsY3Vs
YXRlU3RyaW5nSGFzaEFuZExlbmd0aEZyb21VVEY4TWFza2luZ1RvcDhCaXRzKGNvbnN0IGNoYXIq
IGRhdGEsIGNvbnN0IGNoYXIqIGRhdGFFbmQsIHVuc2lnbmVkJiBkYXRhTGVuZ3RoLCB1bnNpZ25l
ZCYgdXRmMTZMZW5ndGgpOwogCiAvLyBDYWxsZXJzIG9mIHRoZXNlIGZ1bmN0aW9ucyBtdXN0IGNo
ZWNrIHRoYXQgdGhlIGxlbmd0aHMgYXJlIHRoZSBzYW1lOyBhY2NvcmRpbmdseSB3ZSBvbWl0IGFu
IGVuZCBhcmd1bWVudCBmb3IgVVRGLTE2IGFuZCBMYXRpbi0xLgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vU2hhcmVkQnVmZmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL1NoYXJlZEJ1ZmZlci5jcHAKaW5kZXggNDc1NDJkYWNhZWI4NmE1YzNhZTg4ZmViNGRmYWY0
NDlmYzNlZmMzNS4uMzljZWI3MGZhMGFlNzFkZGFmNWE2ZjRjZTMzYzA0ZjY5MDdiZjQ0OCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2hhcmVkQnVmZmVyLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TaGFyZWRCdWZmZXIuY3BwCkBAIC00OTUsNyArNDk1LDcg
QEAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gdXRmOEJ1ZmZlcihjb25zdCBTdHJpbmcmIHN0cmluZykK
ICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgfSBlbHNlIHsKICAgICAg
ICAgICAgIGNvbnN0IFVDaGFyKiBkID0gc3RyaW5nLmNoYXJhY3RlcnMxNigpOwotICAgICAgICAg
ICAgaWYgKFdURjo6VW5pY29kZTo6Y29udmVydFVURjE2VG9VVEY4KCZkLCBkICsgbGVuZ3RoLCAm
cCwgcCArIGJ1ZmZlci5zaXplKCkpICE9IFdURjo6VW5pY29kZTo6Q29udmVyc2lvbk9LKQorICAg
ICAgICAgICAgaWYgKFdURjo6VW5pY29kZTo6Y29udmVydFVURjE2VG9VVEY4KCZkLCBkICsgbGVu
Z3RoLCAmcCwgcCArIGJ1ZmZlci5zaXplKCkpICE9IFdURjo6VW5pY29kZTo6Q29udmVyc2lvblJl
c3VsdDo6Q29udmVyc2lvbk9LKQogICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAg
ICAgICB9CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUveG1sL3BhcnNlci9YTUxE
b2N1bWVudFBhcnNlckxpYnhtbDIuY3BwIGIvU291cmNlL1dlYkNvcmUveG1sL3BhcnNlci9YTUxE
b2N1bWVudFBhcnNlckxpYnhtbDIuY3BwCmluZGV4IGE4YzNlMThlNDdhZWNhZDBhMDIyYTA4NGM0
OWEyMWY2YzcxNGMzOTIuLjYyMTIzOTExYThiYWQzZjM0MDE5OTQ2NDNjZThmYWUwMGVkZWQxZWYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3htbC9wYXJzZXIvWE1MRG9jdW1lbnRQYXJzZXJM
aWJ4bWwyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS94bWwvcGFyc2VyL1hNTERvY3VtZW50UGFy
c2VyTGlieG1sMi5jcHAKQEAgLTExNTgsNyArMTE1OCw3IEBAIHN0YXRpYyBzaXplX3QgY29udmVy
dFVURjE2RW50aXR5VG9VVEY4KGNvbnN0IFVDaGFyKiB1dGYxNkVudGl0eSwgc2l6ZV90IG51bWJl
ck9mCiB7CiAgICAgY29uc3QgY2hhciogb3JpZ2luYWxUYXJnZXQgPSB0YXJnZXQ7CiAgICAgYXV0
byBjb252ZXJzaW9uUmVzdWx0ID0gV1RGOjpVbmljb2RlOjpjb252ZXJ0VVRGMTZUb1VURjgoJnV0
ZjE2RW50aXR5LCB1dGYxNkVudGl0eSArIG51bWJlck9mQ29kZVVuaXRzLCAmdGFyZ2V0LCB0YXJn
ZXQgKyB0YXJnZXRTaXplKTsKLSAgICBpZiAoY29udmVyc2lvblJlc3VsdCAhPSBXVEY6OlVuaWNv
ZGU6OkNvbnZlcnNpb25PSykKKyAgICBpZiAoY29udmVyc2lvblJlc3VsdCAhPSBXVEY6OlVuaWNv
ZGU6OkNvbnZlcnNpb25SZXN1bHQ6OkNvbnZlcnNpb25PSykKICAgICAgICAgcmV0dXJuIDA7CiAK
ICAgICAvLyBFdmVuIHRob3VnaCB3ZSBtdXN0IHBhc3MgdGhlIGxlbmd0aCwgbGlieG1sIGV4cGVj
dHMgdGhlIGVudGl0eSBzdHJpbmcgdG8gYmUgbnVsbCB0ZXJtaW5hdGVkLgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9TaGFyZWQvQVBJL2MvV0tTdHJpbmcuY3BwIGIvU291cmNlL1dlYktpdC9T
aGFyZWQvQVBJL2MvV0tTdHJpbmcuY3BwCmluZGV4IDRlZDNiOGFhMmQyM2U1MTVhMzA0OTA1ZWM0
MDJmM2U0OGE0YzRkNjEuLmZhN2M2NWQ3MDU2OWVhMzM4MTcxMzAwMGY2ZjZiZGVlYzNhNjZhMTcg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0FQSS9jL1dLU3RyaW5nLmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9BUEkvYy9XS1N0cmluZy5jcHAKQEAgLTg4LDcgKzg4LDcg
QEAgc2l6ZV90IFdLU3RyaW5nR2V0VVRGOENTdHJpbmdJbXBsKFdLU3RyaW5nUmVmIHN0cmluZ1Jl
ZiwgY2hhciogYnVmZmVyLCBzaXplX3QgYnUKICAgICB9IGVsc2UgewogICAgICAgICBjb25zdCBV
Q2hhciogY2hhcmFjdGVycyA9IHN0cmluZ1ZpZXcuY2hhcmFjdGVyczE2KCk7CiAgICAgICAgIGF1
dG8gcmVzdWx0ID0gV1RGOjpVbmljb2RlOjpjb252ZXJ0VVRGMTZUb1VURjgoJmNoYXJhY3RlcnMs
IGNoYXJhY3RlcnMgKyBzdHJpbmdWaWV3Lmxlbmd0aCgpLCAmcCwgcCArIGJ1ZmZlclNpemUgLSAx
LCBzdHJpY3QpOwotICAgICAgICBpZiAocmVzdWx0ICE9IFdURjo6VW5pY29kZTo6Q29udmVyc2lv
bk9LICYmIHJlc3VsdCAhPSBXVEY6OlVuaWNvZGU6OlRhcmdldEV4aGF1c3RlZCkKKyAgICAgICAg
aWYgKHJlc3VsdCAhPSBXVEY6OlVuaWNvZGU6OkNvbnZlcnNpb25SZXN1bHQ6OkNvbnZlcnNpb25P
SyAmJiByZXN1bHQgIT0gV1RGOjpVbmljb2RlOjpDb252ZXJzaW9uUmVzdWx0OjpUYXJnZXRFeGhh
dXN0ZWQpCiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICB9CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>443867</attachid>
            <date>2021-11-10 14:42:33 -0800</date>
            <delta_ts>2021-11-29 15:45:23 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-232962-20211110144232.patch</filename>
            <type>text/plain</type>
            <size>26081</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjg1NjA3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEzIEBA
CisyMDIxLTExLTEwICBBbGV4IENocmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+
CisKKyAgICAgICAgQWRkIFdURjo6U3RyaW5nOjp1dGY4TGVuZ3RoIGFuZCB1c2UgaXQgdG8gYWxs
b2NhdGUgY29ycmVjdCBzaXplIGJ1ZmZlciB3aGVuIGNvbnZlcnRpbmcgdG8gVVRGLTgKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzMjk2MgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogQVBJL0pTU3RyaW5n
UmVmLmNwcDoKKyAgICAgICAgKEpTU3RyaW5nR2V0VVRGOENTdHJpbmcpOgorCiAyMDIxLTExLTEw
ICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgogCiAgICAgICAgIGluX2J5X3ZhbCBz
aG91bGQgbm90IGNvbnN0YW50IGZvbGQgdG8gaW5fYnlfaWQgd2hlbiB0aGUgcHJvcGVydHkgaXMg
YSBwcm9wZXJ0eSBpbmRleApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1N0cmlu
Z1JlZi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1N0cmlu
Z1JlZi5jcHAJKHJldmlzaW9uIDI4NTYwNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkv
SlNTdHJpbmdSZWYuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDksNyArMTA5LDcgQEAgc2l6ZV90
IEpTU3RyaW5nR2V0VVRGOENTdHJpbmcoSlNTdHJpbmdSZQogICAgIH0gZWxzZSB7CiAgICAgICAg
IGNvbnN0IFVDaGFyKiBzb3VyY2UgPSBzdHJpbmctPmNoYXJhY3RlcnMxNigpOwogICAgICAgICBh
dXRvIHJlc3VsdCA9IGNvbnZlcnRVVEYxNlRvVVRGOCgmc291cmNlLCBzb3VyY2UgKyBzdHJpbmct
Pmxlbmd0aCgpLCAmZGVzdGluYXRpb24sIGRlc3RpbmF0aW9uICsgYnVmZmVyU2l6ZSAtIDEpOwot
ICAgICAgICBmYWlsZWQgPSByZXN1bHQgIT0gQ29udmVyc2lvbk9LICYmIHJlc3VsdCAhPSBUYXJn
ZXRFeGhhdXN0ZWQ7CisgICAgICAgIGZhaWxlZCA9IHJlc3VsdCAhPSBDb252ZXJzaW9uUmVzdWx0
OjpDb252ZXJzaW9uT0sgJiYgcmVzdWx0ICE9IENvbnZlcnNpb25SZXN1bHQ6OlRhcmdldEV4aGF1
c3RlZDsKICAgICB9CiAKICAgICAqZGVzdGluYXRpb24rKyA9ICdcMCc7CkluZGV4OiBTb3VyY2Uv
V1RGL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL0NoYW5nZUxvZwkocmV2aXNp
b24gMjg1NjA3KQorKysgU291cmNlL1dURi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEs
MyArMSwzMyBAQAorMjAyMS0xMS0xMCAgQWxleCBDaHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3
ZWJraXQub3JnPgorCisgICAgICAgIEFkZCBXVEY6OlN0cmluZzo6dXRmOExlbmd0aCBhbmQgdXNl
IGl0IHRvIGFsbG9jYXRlIGNvcnJlY3Qgc2l6ZSBidWZmZXIgd2hlbiBjb252ZXJ0aW5nIHRvIFVU
Ri04CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzI5
NjIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBTdHJp
Y3RDb252ZXJzaW9uUmVwbGFjaW5nVW5wYWlyZWRTdXJyb2dhdGVzV2l0aEZGRkQgaXMgdW5zdXBw
b3J0ZWQgYW5kIG9ubHkgdXNlZCBpbiB3ZWIgc29ja2V0IGNvZGUuCisKKyAgICAgICAgKiB3dGYv
dGV4dC9TdHJpbmdJbXBsLmNwcDoKKyAgICAgICAgKFdURjo6cHV0VVRGOFRyaXBsZSk6CisgICAg
ICAgIChXVEY6OlN0cmluZ0ltcGw6OnV0ZjhGb3JDaGFyYWN0ZXJzKToKKyAgICAgICAgKFdURjo6
U3RyaW5nSW1wbDo6dHJ5R2V0VXRmOCBjb25zdCk6CisgICAgICAgIChXVEY6OlN0cmluZ0ltcGw6
OnV0ZjggY29uc3QpOgorICAgICAgICAoV1RGOjpTdHJpbmdJbXBsOjp1dGY4TGVuZ3RoIGNvbnN0
KToKKyAgICAgICAgKFdURjo6U3RyaW5nSW1wbDo6dXRmOEltcGwpOiBEZWxldGVkLgorICAgICAg
ICAoV1RGOjpTdHJpbmdJbXBsOjp0cnlHZXRVdGY4Rm9yUmFuZ2UgY29uc3QpOiBEZWxldGVkLgor
ICAgICAgICAqIHd0Zi90ZXh0L1N0cmluZ0ltcGwuaDoKKyAgICAgICAgKiB3dGYvdGV4dC9VVEY4
Q29udmVyc2lvbkVycm9yLmg6CisgICAgICAgICogd3RmL3RleHQvV1RGU3RyaW5nLmNwcDoKKyAg
ICAgICAgKFdURjo6U3RyaW5nOjp1dGY4TGVuZ3RoIGNvbnN0KToKKyAgICAgICAgKiB3dGYvdGV4
dC9XVEZTdHJpbmcuaDoKKyAgICAgICAgKiB3dGYvdW5pY29kZS9VVEY4Q29udmVyc2lvbi5jcHA6
CisgICAgICAgIChXVEY6OlVuaWNvZGU6OmxhdGluMVRvVVRGOExlbmd0aCk6CisgICAgICAgIChX
VEY6OlVuaWNvZGU6OmNvbnZlcnRMYXRpbjFUb1VURjgpOgorICAgICAgICAoV1RGOjpVbmljb2Rl
Ojp1dGYxNlRvVVRGOExlbmd0aCk6CisgICAgICAgIChXVEY6OlVuaWNvZGU6OmNvbnZlcnRVVEYx
NlRvVVRGOCk6CisgICAgICAgICogd3RmL3VuaWNvZGUvVVRGOENvbnZlcnNpb24uaDoKKyAgICAg
ICAgKCk6IERlbGV0ZWQuCisKIDIwMjEtMTEtMTAgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUu
Y29tPgogCiAgICAgICAgIFtDRl0gUmVkdWNlIGR1cGxpY2F0aW9uIGFuZCB1bm5lZWRlZCBidWZm
ZXIgYWxsb2NhdGlvbnMgYW5kIGNvcHlpbmcgaW4gVVJMIGNvZGUsIGFsc28gcmVtb3ZlIHVudXNl
ZCBtZXRob2RzIGFuZCBmdW5jdGlvbnMKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL3RleHQvU3RyaW5n
SW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdJbXBsLmNw
cAkocmV2aXNpb24gMjg1NjA3KQorKysgU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdJbXBsLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTY2NCwyMyArMTY2NCwzMiBAQCBzaXplX3QgU3RyaW5nSW1w
bDo6c2l6ZUluQnl0ZXMoKSBjb25zdAogc3RhdGljIGlubGluZSB2b2lkIHB1dFVURjhUcmlwbGUo
Y2hhciomIGJ1ZmZlciwgVUNoYXIgY2hhcmFjdGVyKQogewogICAgIEFTU0VSVChjaGFyYWN0ZXIg
Pj0gMHgwODAwKTsKLSAgICAqYnVmZmVyKysgPSBzdGF0aWNfY2FzdDxjaGFyPigoKGNoYXJhY3Rl
ciA+PiAxMikgJiAweDBGKSB8IDB4RTApOwotICAgICpidWZmZXIrKyA9IHN0YXRpY19jYXN0PGNo
YXI+KCgoY2hhcmFjdGVyID4+IDYpICYgMHgzRikgfCAweDgwKTsKLSAgICAqYnVmZmVyKysgPSBz
dGF0aWNfY2FzdDxjaGFyPigoY2hhcmFjdGVyICYgMHgzRikgfCAweDgwKTsKKyAgICBpbnQgaSA9
IDA7CisgICAgVThfQVBQRU5EX1VOU0FGRShidWZmZXIsIGksIGNoYXJhY3Rlcik7CisgICAgQVNT
RVJUKGkgPT0gMyk7CiB9CiAKLVVURjhDb252ZXJzaW9uRXJyb3IgU3RyaW5nSW1wbDo6dXRmOElt
cGwoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCwgY2hhciomIGJ1ZmZl
ciwgc2l6ZV90IGJ1ZmZlclNpemUsIENvbnZlcnNpb25Nb2RlIG1vZGUpCitFeHBlY3RlZDxDU3Ry
aW5nLCBVVEY4Q29udmVyc2lvbkVycm9yPiBTdHJpbmdJbXBsOjp1dGY4Rm9yQ2hhcmFjdGVycyhj
b25zdCBVQ2hhciogY2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3RoLCBDb252ZXJzaW9uTW9kZSBt
b2RlKQogewotICAgIGlmIChtb2RlID09IFN0cmljdENvbnZlcnNpb25SZXBsYWNpbmdVbnBhaXJl
ZFN1cnJvZ2F0ZXNXaXRoRkZGRCkgeworICAgIGlmICghbGVuZ3RoKQorICAgICAgICByZXR1cm4g
Q1N0cmluZygiIiwgMCk7CisKKyAgICBzd2l0Y2ggKG1vZGUpIHsKKyAgICBjYXNlIFN0cmljdENv
bnZlcnNpb25SZXBsYWNpbmdVbnBhaXJlZFN1cnJvZ2F0ZXNXaXRoRkZGRDogeworICAgICAgICBp
ZiAobGVuZ3RoID4gTWF4TGVuZ3RoIC8gMykKKyAgICAgICAgICAgIHJldHVybiBtYWtlVW5leHBl
Y3RlZChVVEY4Q29udmVyc2lvbkVycm9yOjpPdXRPZk1lbW9yeSk7CisgICAgICAgIHNpemVfdCBi
dWZmZXJTaXplID0gbGVuZ3RoICogMzsKKyAgICAgICAgVmVjdG9yPGNoYXIsIDEwMjQ+IGJ1ZmZl
clZlY3RvcihidWZmZXJTaXplKTsKKyAgICAgICAgY2hhciogYnVmZmVyID0gYnVmZmVyVmVjdG9y
LmRhdGEoKTsKICAgICAgICAgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnNFbmQgPSBjaGFyYWN0ZXJz
ICsgbGVuZ3RoOwogICAgICAgICBjaGFyKiBidWZmZXJFbmQgPSBidWZmZXIgKyBidWZmZXJTaXpl
OwogICAgICAgICB3aGlsZSAoY2hhcmFjdGVycyA8IGNoYXJhY3RlcnNFbmQpIHsKICAgICAgICAg
ICAgIC8vIFVzZSBzdHJpY3QgY29udmVyc2lvbiB0byBkZXRlY3QgdW5wYWlyZWQgc3Vycm9nYXRl
cy4KICAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gY29udmVydFVURjE2VG9VVEY4KCZjaGFyYWN0
ZXJzLCBjaGFyYWN0ZXJzRW5kLCAmYnVmZmVyLCBidWZmZXJFbmQpOwotICAgICAgICAgICAgQVNT
RVJUKHJlc3VsdCAhPSBUYXJnZXRFeGhhdXN0ZWQpOworICAgICAgICAgICAgQVNTRVJUKHJlc3Vs
dCAhPSBDb252ZXJzaW9uUmVzdWx0OjpUYXJnZXRFeGhhdXN0ZWQpOwogICAgICAgICAgICAgLy8g
Q29udmVyc2lvbiBmYWlscyB3aGVuIHRoZXJlIGlzIGFuIHVucGFpcmVkIHN1cnJvZ2F0ZS4KICAg
ICAgICAgICAgIC8vIFB1dCByZXBsYWNlbWVudCBjaGFyYWN0ZXIgKFUrRkZGRCkgaW5zdGVhZCBv
ZiB0aGUgdW5wYWlyZWQgc3Vycm9nYXRlLgotICAgICAgICAgICAgaWYgKHJlc3VsdCAhPSBDb252
ZXJzaW9uT0spIHsKKyAgICAgICAgICAgIGlmIChyZXN1bHQgIT0gQ29udmVyc2lvblJlc3VsdDo6
Q29udmVyc2lvbk9LKSB7CiAgICAgICAgICAgICAgICAgQVNTRVJUKCgweEQ4MDAgPD0gKmNoYXJh
Y3RlcnMgJiYgKmNoYXJhY3RlcnMgPD0gMHhERkZGKSk7CiAgICAgICAgICAgICAgICAgLy8gVGhl
cmUgc2hvdWxkIGJlIHJvb20gbGVmdCwgc2luY2Ugb25lIFVDaGFyIGhhc24ndCBiZWVuIGNvbnZl
cnRlZC4KICAgICAgICAgICAgICAgICBBU1NFUlQoKGJ1ZmZlciArIDMpIDw9IGJ1ZmZlckVuZCk7
CkBAIC0xNjg4LDExNSArMTY5Nyw4MyBAQCBVVEY4Q29udmVyc2lvbkVycm9yIFN0cmluZ0ltcGw6
OnV0ZjhJbXBsCiAgICAgICAgICAgICAgICAgKytjaGFyYWN0ZXJzOwogICAgICAgICAgICAgfQog
ICAgICAgICB9Ci0gICAgfSBlbHNlIHsKKyAgICAgICAgcmV0dXJuIENTdHJpbmcoYnVmZmVyVmVj
dG9yLmRhdGEoKSwgYnVmZmVyIC0gYnVmZmVyVmVjdG9yLmRhdGEoKSk7CisgICAgfQorICAgIGNh
c2UgU3RyaWN0Q29udmVyc2lvbjoKKyAgICBjYXNlIExlbmllbnRDb252ZXJzaW9uOiB7CiAgICAg
ICAgIGJvb2wgc3RyaWN0ID0gbW9kZSA9PSBTdHJpY3RDb252ZXJzaW9uOwotICAgICAgICBjb25z
dCBVQ2hhciogb3JpZ2luYWxDaGFyYWN0ZXJzID0gY2hhcmFjdGVyczsKLSAgICAgICAgYXV0byBy
ZXN1bHQgPSBjb252ZXJ0VVRGMTZUb1VURjgoJmNoYXJhY3RlcnMsIGNoYXJhY3RlcnMgKyBsZW5n
dGgsICZidWZmZXIsIGJ1ZmZlciArIGJ1ZmZlclNpemUsIHN0cmljdCk7Ci0gICAgICAgIEFTU0VS
VChyZXN1bHQgIT0gVGFyZ2V0RXhoYXVzdGVkKTsgLy8gKGxlbmd0aCAqIDMpIHNob3VsZCBiZSBz
dWZmaWNpZW50IGZvciBhbnkgY29udmVyc2lvbgotCi0gICAgICAgIC8vIE9ubHkgcHJvZHVjZWQg
ZnJvbSBzdHJpY3QgY29udmVyc2lvbi4KLSAgICAgICAgaWYgKHJlc3VsdCA9PSBTb3VyY2VJbGxl
Z2FsKSB7Ci0gICAgICAgICAgICBBU1NFUlQoc3RyaWN0KTsKLSAgICAgICAgICAgIHJldHVybiBV
VEY4Q29udmVyc2lvbkVycm9yOjpJbGxlZ2FsU291cmNlOworICAgICAgICBhdXRvIGNvbnZlcnRl
ZExlbmd0aCA9IHV0ZjE2VG9VVEY4TGVuZ3RoKGNoYXJhY3RlcnMsIGNoYXJhY3RlcnMgKyBsZW5n
dGgsIHN0cmljdCk7CisgICAgICAgIGlmIChjb252ZXJ0ZWRMZW5ndGggPiBNYXhMZW5ndGgpCisg
ICAgICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoVVRGOENvbnZlcnNpb25FcnJvcjo6T3V0
T2ZNZW1vcnkpOworICAgICAgICBpZiAoIWNvbnZlcnRlZExlbmd0aCkKKyAgICAgICAgICAgIHJl
dHVybiBDU3RyaW5nKCIiLCAwKTsKKworICAgICAgICBjaGFyKiBkZXN0aW5hdGlvbjsKKyAgICAg
ICAgYXV0byByZXN1bHQgPSBDU3RyaW5nOjpuZXdVbmluaXRpYWxpemVkKGNvbnZlcnRlZExlbmd0
aCwgZGVzdGluYXRpb24pOworICAgICAgICBjaGFyKiBkZXN0aW5hdGlvbkVuZCA9IGRlc3RpbmF0
aW9uICsgY29udmVydGVkTGVuZ3RoOworICAgICAgICBjb25zdCBVQ2hhciogY2hhcmFjdGVyc0Vu
ZCA9IGNoYXJhY3RlcnMgKyBsZW5ndGg7CisgICAgICAgIGF1dG8gY29udmVyc2lvblJlc3VsdCA9
IGNvbnZlcnRVVEYxNlRvVVRGOCgmY2hhcmFjdGVycywgY2hhcmFjdGVyc0VuZCwgJmRlc3RpbmF0
aW9uLCBkZXN0aW5hdGlvbkVuZCwgc3RyaWN0KTsKKyAgICAgICAgc3dpdGNoIChjb252ZXJzaW9u
UmVzdWx0KSB7CisgICAgICAgIGNhc2UgQ29udmVyc2lvblJlc3VsdDo6Q29udmVyc2lvbk9LOgor
ICAgICAgICAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRShkZXN0aW5hdGlvbiA9PSBkZXN0aW5hdGlv
bkVuZCwgIklmIGNvbnZlcnRlZExlbmd0aCB3YXMgY2FsY3VsYXRlZCBjb3JyZWN0bHksIHdlIHNo
b3VsZCBhbHdheXMgdXNlIGV4YWN0bHkgdGhlIHdob2xlIGRlc3RpbmF0aW9uIGJ1ZmZlciIpOwor
ICAgICAgICAgICAgcmV0dXJuIFdURk1vdmUocmVzdWx0KTsKKyAgICAgICAgY2FzZSBDb252ZXJz
aW9uUmVzdWx0OjpTb3VyY2VFeGhhdXN0ZWQ6CisgICAgICAgICAgICBBU1NFUlQoIXN0cmljdCk7
CisgICAgICAgICAgICBBU1NFUlQoY2hhcmFjdGVycyArIDEgPT0gY2hhcmFjdGVyc0VuZCk7Cisg
ICAgICAgICAgICBBU1NFUlQoKDB4RDgwMCA8PSAqY2hhcmFjdGVycyAmJiAqY2hhcmFjdGVycyA8
PSAweERGRkYpKTsKKyAgICAgICAgICAgIHB1dFVURjhUcmlwbGUoZGVzdGluYXRpb24sICpjaGFy
YWN0ZXJzKTsKKyAgICAgICAgICAgIEFTU0VSVF9XSVRIX01FU1NBR0UoZGVzdGluYXRpb24gPT0g
ZGVzdGluYXRpb25FbmQsICJJZiBjb252ZXJ0ZWRMZW5ndGggd2FzIGNhbGN1bGF0ZWQgY29ycmVj
dGx5LCB3ZSBzaG91bGQgYWx3YXlzIHVzZSBleGFjdGx5IHRoZSB3aG9sZSBkZXN0aW5hdGlvbiBi
dWZmZXIiKTsKKyAgICAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChVVEY4Q29udmVyc2lv
bkVycm9yOjpTb3VyY2VFeGhhdXN0ZWQpOworICAgICAgICBjYXNlIENvbnZlcnNpb25SZXN1bHQ6
OlRhcmdldEV4aGF1c3RlZDoKKyAgICAgICAgY2FzZSBDb252ZXJzaW9uUmVzdWx0OjpTb3VyY2VJ
bGxlZ2FsOgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAg
ICAgfQotCi0gICAgICAgIC8vIENoZWNrIGZvciBhbiB1bmNvbnZlcnRlZCBoaWdoIHN1cnJvZ2F0
ZS4KLSAgICAgICAgaWYgKHJlc3VsdCA9PSBTb3VyY2VFeGhhdXN0ZWQpIHsKLSAgICAgICAgICAg
IGlmIChzdHJpY3QpCi0gICAgICAgICAgICAgICAgcmV0dXJuIFVURjhDb252ZXJzaW9uRXJyb3I6
OlNvdXJjZUV4aGF1c3RlZDsKLSAgICAgICAgICAgIC8vIFRoaXMgc2hvdWxkIGJlIG9uZSB1bnBh
aXJlZCBoaWdoIHN1cnJvZ2F0ZS4gVHJlYXQgaXQgdGhlIHNhbWUKLSAgICAgICAgICAgIC8vIHdh
cyBhcyBhbiB1bnBhaXJlZCBoaWdoIHN1cnJvZ2F0ZSB3b3VsZCBoYXZlIGJlZW4gaGFuZGxlZCBp
bgotICAgICAgICAgICAgLy8gdGhlIG1pZGRsZSBvZiBhIHN0cmluZyB3aXRoIG5vbi1zdHJpY3Qg
Y29udmVyc2lvbiAtIHdoaWNoIGlzCi0gICAgICAgICAgICAvLyB0byBzYXksIHNpbXBseSBlbmNv
ZGUgaXQgdG8gVVRGLTguCi0gICAgICAgICAgICBBU1NFUlRfVU5VU0VEKAotICAgICAgICAgICAg
ICAgIG9yaWdpbmFsQ2hhcmFjdGVycywgKGNoYXJhY3RlcnMgKyAxKSA9PSAob3JpZ2luYWxDaGFy
YWN0ZXJzICsgbGVuZ3RoKSk7Ci0gICAgICAgICAgICBBU1NFUlQoKCpjaGFyYWN0ZXJzID49IDB4
RDgwMCkgJiYgKCpjaGFyYWN0ZXJzIDw9IDB4REJGRikpOwotICAgICAgICAgICAgLy8gVGhlcmUg
c2hvdWxkIGJlIHJvb20gbGVmdCwgc2luY2Ugb25lIFVDaGFyIGhhc24ndCBiZWVuIGNvbnZlcnRl
ZC4KLSAgICAgICAgICAgIEFTU0VSVCgoYnVmZmVyICsgMykgPD0gKGJ1ZmZlciArIGJ1ZmZlclNp
emUpKTsKLSAgICAgICAgICAgIHB1dFVURjhUcmlwbGUoYnVmZmVyLCAqY2hhcmFjdGVycyk7CiAg
ICAgICAgIH0KICAgICB9Ci0gICAgCi0gICAgcmV0dXJuIFVURjhDb252ZXJzaW9uRXJyb3I6Ok5v
bmU7CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIHsgfTsKIH0KIAotRXhw
ZWN0ZWQ8Q1N0cmluZywgVVRGOENvbnZlcnNpb25FcnJvcj4gU3RyaW5nSW1wbDo6dXRmOEZvckNo
YXJhY3RlcnMoY29uc3QgTENoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCkKK0V4cGVj
dGVkPENTdHJpbmcsIFVURjhDb252ZXJzaW9uRXJyb3I+IFN0cmluZ0ltcGw6OnV0ZjhGb3JDaGFy
YWN0ZXJzKGNvbnN0IExDaGFyKiBzb3VyY2UsIHVuc2lnbmVkIGxlbmd0aCkKIHsKICAgICBpZiAo
IWxlbmd0aCkKICAgICAgICAgcmV0dXJuIENTdHJpbmcoIiIsIDApOwotICAgIGlmIChsZW5ndGgg
PiBNYXhMZW5ndGggLyAzKQotICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoVVRGOENvbnZl
cnNpb25FcnJvcjo6T3V0T2ZNZW1vcnkpOwotICAgIFZlY3RvcjxjaGFyLCAxMDI0PiBidWZmZXJW
ZWN0b3IobGVuZ3RoICogMyk7Ci0gICAgY2hhciogYnVmZmVyID0gYnVmZmVyVmVjdG9yLmRhdGEo
KTsKLSAgICBjb25zdCBMQ2hhciogc291cmNlID0gY2hhcmFjdGVyczsKLSAgICBib29sIHN1Y2Nl
c3MgPSBjb252ZXJ0TGF0aW4xVG9VVEY4KCZzb3VyY2UsIHNvdXJjZSArIGxlbmd0aCwgJmJ1ZmZl
ciwgYnVmZmVyICsgYnVmZmVyVmVjdG9yLnNpemUoKSk7Ci0gICAgQVNTRVJUX1VOVVNFRChzdWNj
ZXNzLCBzdWNjZXNzKTsgLy8gKGxlbmd0aCAqIDMpIHNob3VsZCBiZSBzdWZmaWNpZW50IGZvciBh
bnkgY29udmVyc2lvbgotICAgIHJldHVybiBDU3RyaW5nKGJ1ZmZlclZlY3Rvci5kYXRhKCksIGJ1
ZmZlciAtIGJ1ZmZlclZlY3Rvci5kYXRhKCkpOwotfQogCi1FeHBlY3RlZDxDU3RyaW5nLCBVVEY4
Q29udmVyc2lvbkVycm9yPiBTdHJpbmdJbXBsOjp1dGY4Rm9yQ2hhcmFjdGVycyhjb25zdCBVQ2hh
ciogY2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3RoLCBDb252ZXJzaW9uTW9kZSBtb2RlKQotewot
ICAgIGlmICghbGVuZ3RoKQotICAgICAgICByZXR1cm4gQ1N0cmluZygiIiwgMCk7Ci0gICAgaWYg
KGxlbmd0aCA+IE1heExlbmd0aCAvIDMpCisgICAgYXV0byBjb252ZXJ0ZWRMZW5ndGggPSBsYXRp
bjFUb1VURjhMZW5ndGgoc291cmNlLCBzb3VyY2UgKyBsZW5ndGgpOworICAgIGlmIChjb252ZXJ0
ZWRMZW5ndGggPiBNYXhMZW5ndGgpCiAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChVVEY4
Q29udmVyc2lvbkVycm9yOjpPdXRPZk1lbW9yeSk7Ci0gICAgVmVjdG9yPGNoYXIsIDEwMjQ+IGJ1
ZmZlclZlY3RvcihsZW5ndGggKiAzKTsKLSAgICBjaGFyKiBidWZmZXIgPSBidWZmZXJWZWN0b3Iu
ZGF0YSgpOwotICAgIFVURjhDb252ZXJzaW9uRXJyb3IgZXJyb3IgPSB1dGY4SW1wbChjaGFyYWN0
ZXJzLCBsZW5ndGgsIGJ1ZmZlciwgYnVmZmVyVmVjdG9yLnNpemUoKSwgbW9kZSk7Ci0gICAgaWYg
KGVycm9yICE9IFVURjhDb252ZXJzaW9uRXJyb3I6Ok5vbmUpCi0gICAgICAgIHJldHVybiBtYWtl
VW5leHBlY3RlZChlcnJvcik7Ci0gICAgcmV0dXJuIENTdHJpbmcoYnVmZmVyVmVjdG9yLmRhdGEo
KSwgYnVmZmVyIC0gYnVmZmVyVmVjdG9yLmRhdGEoKSk7Ci19Ci0KLUV4cGVjdGVkPENTdHJpbmcs
IFVURjhDb252ZXJzaW9uRXJyb3I+IFN0cmluZ0ltcGw6OnRyeUdldFV0ZjhGb3JSYW5nZSh1bnNp
Z25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCwgQ29udmVyc2lvbk1vZGUgbW9kZSkgY29uc3QK
LXsKLSAgICBBU1NFUlQob2Zmc2V0IDw9IHRoaXMtPmxlbmd0aCgpKTsKLSAgICBBU1NFUlQob2Zm
c2V0ICsgbGVuZ3RoIDw9IHRoaXMtPmxlbmd0aCgpKTsKICAgICAKLSAgICBpZiAoIWxlbmd0aCkK
LSAgICAgICAgcmV0dXJuIENTdHJpbmcoIiIsIDApOwotCi0gICAgLy8gQWxsb2NhdGUgYSBidWZm
ZXIgYmlnIGVub3VnaCB0byBob2xkIGFsbCB0aGUgY2hhcmFjdGVycwotICAgIC8vIChhbiBpbmRp
dmlkdWFsIFVURi0xNiBVQ2hhciBjYW4gb25seSBleHBhbmQgdG8gMyBVVEYtOCBieXRlcykuCi0g
ICAgLy8gT3B0aW1pemF0aW9uIGlkZWFzLCBpZiB3ZSBmaW5kIHRoaXMgZnVuY3Rpb24gaXMgaG90
OgotICAgIC8vICAqIFdlIGNvdWxkIHNwZWN1bGF0aXZlbHkgY3JlYXRlIGEgQ1N0cmluZ0J1ZmZl
ciB0byBjb250YWluICdsZW5ndGgnIAotICAgIC8vICAgIGNoYXJhY3RlcnMsIGFuZCByZXNpemUg
aWYgbmVjZXNzYXJ5IChpLmUuIGlmIHRoZSBidWZmZXIgY29udGFpbnMKLSAgICAvLyAgICBub24t
YXNjaWkgY2hhcmFjdGVycykuIChBbHRlcm5hdGl2ZWx5LCBzY2FuIHRoZSBidWZmZXIgZmlyc3Qg
Zm9yCi0gICAgLy8gICAgYXNjaWkgY2hhcmFjdGVycywgc28gd2Uga25vdyB0aGlzIHdpbGwgYmUg
c3VmZmljaWVudCkuCi0gICAgLy8gICogV2UgY291bGQgYWxsb2NhdGUgYSBDU3RyaW5nQnVmZmVy
IHdpdGggYW4gYXBwcm9wcmlhdGUgc2l6ZSB0bwotICAgIC8vICAgIGhhdmUgYSBnb29kIGNoYW5j
ZSBvZiBiZWluZyBhYmxlIHRvIHdyaXRlIHRoZSBzdHJpbmcgaW50byB0aGUKLSAgICAvLyAgICBi
dWZmZXIgd2l0aG91dCByZWFsbG9jaW5nIChzYXksIDEuNSB4IGxlbmd0aCkuCi0gICAgaWYgKGxl
bmd0aCA+IE1heExlbmd0aCAvIDMpCi0gICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChVVEY4
Q29udmVyc2lvbkVycm9yOjpPdXRPZk1lbW9yeSk7Ci0gICAgVmVjdG9yPGNoYXIsIDEwMjQ+IGJ1
ZmZlclZlY3RvcihsZW5ndGggKiAzKTsKLQotICAgIGNoYXIqIGJ1ZmZlciA9IGJ1ZmZlclZlY3Rv
ci5kYXRhKCk7Ci0KLSAgICBpZiAoaXM4Qml0KCkpIHsKLSAgICAgICAgY29uc3QgTENoYXIqIGNo
YXJhY3RlcnMgPSB0aGlzLT5jaGFyYWN0ZXJzOCgpICsgb2Zmc2V0OwotICAgICAgICBhdXRvIHN1
Y2Nlc3MgPSBjb252ZXJ0TGF0aW4xVG9VVEY4KCZjaGFyYWN0ZXJzLCBjaGFyYWN0ZXJzICsgbGVu
Z3RoLCAmYnVmZmVyLCBidWZmZXIgKyBidWZmZXJWZWN0b3Iuc2l6ZSgpKTsKLSAgICAgICAgQVNT
RVJUX1VOVVNFRChzdWNjZXNzLCBzdWNjZXNzKTsgLy8gKGxlbmd0aCAqIDMpIHNob3VsZCBiZSBz
dWZmaWNpZW50IGZvciBhbnkgY29udmVyc2lvbgotICAgIH0gZWxzZSB7Ci0gICAgICAgIFVURjhD
b252ZXJzaW9uRXJyb3IgZXJyb3IgPSB1dGY4SW1wbCh0aGlzLT5jaGFyYWN0ZXJzMTYoKSArIG9m
ZnNldCwgbGVuZ3RoLCBidWZmZXIsIGJ1ZmZlclZlY3Rvci5zaXplKCksIG1vZGUpOwotICAgICAg
ICBpZiAoZXJyb3IgIT0gVVRGOENvbnZlcnNpb25FcnJvcjo6Tm9uZSkKLSAgICAgICAgICAgIHJl
dHVybiBtYWtlVW5leHBlY3RlZChlcnJvcik7Ci0gICAgfQotCi0gICAgcmV0dXJuIENTdHJpbmco
YnVmZmVyVmVjdG9yLmRhdGEoKSwgYnVmZmVyIC0gYnVmZmVyVmVjdG9yLmRhdGEoKSk7CisgICAg
Y2hhciogZGVzdGluYXRpb247CisgICAgYXV0byByZXN1bHQgPSBDU3RyaW5nOjpuZXdVbmluaXRp
YWxpemVkKGNvbnZlcnRlZExlbmd0aCwgZGVzdGluYXRpb24pOworICAgIGNoYXIqIGRlc3RpbmF0
aW9uRW5kID0gZGVzdGluYXRpb24gKyBjb252ZXJ0ZWRMZW5ndGg7CisgICAgYm9vbCBzdWNjZXNz
ID0gY29udmVydExhdGluMVRvVVRGOCgmc291cmNlLCBzb3VyY2UgKyBsZW5ndGgsICZkZXN0aW5h
dGlvbiwgZGVzdGluYXRpb25FbmQpOworICAgIEFTU0VSVF9VTlVTRUQoc3VjY2Vzcywgc3VjY2Vz
cyk7CisgICAgQVNTRVJUX1dJVEhfTUVTU0FHRShkZXN0aW5hdGlvbiA9PSBkZXN0aW5hdGlvbkVu
ZCwgIklmIGNvbnZlcnRlZExlbmd0aCB3YXMgY2FsY3VsYXRlZCBjb3JyZWN0bHksIHdlIHNob3Vs
ZCBhbHdheXMgdXNlIGV4YWN0bHkgdGhlIHdob2xlIGRlc3RpbmF0aW9uIGJ1ZmZlciIpOworICAg
IHJldHVybiBXVEZNb3ZlKHJlc3VsdCk7CiB9CiAKIEV4cGVjdGVkPENTdHJpbmcsIFVURjhDb252
ZXJzaW9uRXJyb3I+IFN0cmluZ0ltcGw6OnRyeUdldFV0ZjgoQ29udmVyc2lvbk1vZGUgbW9kZSkg
Y29uc3QKIHsKLSAgICByZXR1cm4gdHJ5R2V0VXRmOEZvclJhbmdlKDAsIGxlbmd0aCgpLCBtb2Rl
KTsKKyAgICBpZiAoaXM4Qml0KCkpCisgICAgICAgIHJldHVybiB1dGY4Rm9yQ2hhcmFjdGVycyhj
aGFyYWN0ZXJzOCgpLCBsZW5ndGgoKSk7CisgICAgcmV0dXJuIHV0ZjhGb3JDaGFyYWN0ZXJzKGNo
YXJhY3RlcnMxNigpLCBsZW5ndGgoKSwgbW9kZSk7CiB9CiAKIENTdHJpbmcgU3RyaW5nSW1wbDo6
dXRmOChDb252ZXJzaW9uTW9kZSBtb2RlKSBjb25zdAogewotICAgIGF1dG8gZXhwZWN0ZWRTdHJp
bmcgPSB0cnlHZXRVdGY4Rm9yUmFuZ2UoMCwgbGVuZ3RoKCksIG1vZGUpOworICAgIGF1dG8gZXhw
ZWN0ZWRTdHJpbmcgPSB0cnlHZXRVdGY4KG1vZGUpOwogICAgIFJFTEVBU0VfQVNTRVJUKGV4cGVj
dGVkU3RyaW5nKTsKICAgICByZXR1cm4gZXhwZWN0ZWRTdHJpbmcudmFsdWUoKTsKIH0KIAorc2l6
ZV90IFN0cmluZ0ltcGw6OnV0ZjhMZW5ndGgoQ29udmVyc2lvbk1vZGUgbW9kZSkgY29uc3QKK3sK
KyAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKG1vZGUgIT0gU3RyaWN0Q29udmVyc2lvblJlcGxhY2lu
Z1VucGFpcmVkU3Vycm9nYXRlc1dpdGhGRkZELCAidXRmOExlbmd0aCB3aXRoIFN0cmljdENvbnZl
cnNpb25SZXBsYWNpbmdVbnBhaXJlZFN1cnJvZ2F0ZXNXaXRoRkZGRCBpcyB1bnN1cHBvcnRlZCIp
OworICAgIGlmIChpczhCaXQoKSkKKyAgICAgICAgcmV0dXJuIGxhdGluMVRvVVRGOExlbmd0aChj
aGFyYWN0ZXJzOCgpLCBjaGFyYWN0ZXJzOCgpICsgbGVuZ3RoKCkpOworICAgIHJldHVybiB1dGYx
NlRvVVRGOExlbmd0aChjaGFyYWN0ZXJzMTYoKSwgY2hhcmFjdGVyczE2KCkgKyBsZW5ndGgoKSwg
bW9kZSA9PSBTdHJpY3RDb252ZXJzaW9uKTsKK30KKwogTkVWRVJfSU5MSU5FIHVuc2lnbmVkIFN0
cmluZ0ltcGw6Omhhc2hTbG93Q2FzZSgpIGNvbnN0CiB7CiAgICAgaWYgKGlzOEJpdCgpKQpJbmRl
eDogU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdJbXBsLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dURi93dGYvdGV4dC9TdHJpbmdJbXBsLmgJKHJldmlzaW9uIDI4NTYwNykKKysrIFNvdXJjZS9X
VEYvd3RmL3RleHQvU3RyaW5nSW1wbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMTQsMTMgKzMxNCwx
MSBAQCBwdWJsaWM6CiAgICAgc3RhdGljIFdURl9FWFBPUlRfUFJJVkFURSBFeHBlY3RlZDxDU3Ry
aW5nLCBVVEY4Q29udmVyc2lvbkVycm9yPiB1dGY4Rm9yQ2hhcmFjdGVycyhjb25zdCBMQ2hhciog
Y2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3RoKTsKICAgICBzdGF0aWMgV1RGX0VYUE9SVF9QUklW
QVRFIEV4cGVjdGVkPENTdHJpbmcsIFVURjhDb252ZXJzaW9uRXJyb3I+IHV0ZjhGb3JDaGFyYWN0
ZXJzKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgsIENvbnZlcnNpb25N
b2RlID0gTGVuaWVudENvbnZlcnNpb24pOwogCi0gICAgV1RGX0VYUE9SVF9QUklWQVRFIEV4cGVj
dGVkPENTdHJpbmcsIFVURjhDb252ZXJzaW9uRXJyb3I+IHRyeUdldFV0ZjhGb3JSYW5nZSh1bnNp
Z25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCwgQ29udmVyc2lvbk1vZGUgPSBMZW5pZW50Q29u
dmVyc2lvbikgY29uc3Q7CiAgICAgV1RGX0VYUE9SVF9QUklWQVRFIEV4cGVjdGVkPENTdHJpbmcs
IFVURjhDb252ZXJzaW9uRXJyb3I+IHRyeUdldFV0ZjgoQ29udmVyc2lvbk1vZGUgPSBMZW5pZW50
Q29udmVyc2lvbikgY29uc3Q7CiAgICAgV1RGX0VYUE9SVF9QUklWQVRFIENTdHJpbmcgdXRmOChD
b252ZXJzaW9uTW9kZSA9IExlbmllbnRDb252ZXJzaW9uKSBjb25zdDsKKyAgICBXVEZfRVhQT1JU
X1BSSVZBVEUgc2l6ZV90IHV0ZjhMZW5ndGgoQ29udmVyc2lvbk1vZGUgPSBMZW5pZW50Q29udmVy
c2lvbikgY29uc3Q7CiAKLXByaXZhdGU6Ci0gICAgc3RhdGljIFdURl9FWFBPUlRfUFJJVkFURSBV
VEY4Q29udmVyc2lvbkVycm9yIHV0ZjhJbXBsKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCB1bnNp
Z25lZCBsZW5ndGgsIGNoYXIqJiBidWZmZXIsIHNpemVfdCBidWZmZXJTaXplLCBDb252ZXJzaW9u
TW9kZSk7Ci0gICAgCitwcml2YXRlOiAgICAKICAgICAvLyBUaGUgaGlnaCBiaXRzIG9mICdoYXNo
JyBhcmUgYWx3YXlzIGVtcHR5LCBidXQgd2UgcHJlZmVyIHRvIHN0b3JlIG91ciBmbGFncwogICAg
IC8vIGluIHRoZSBsb3cgYml0cyBiZWNhdXNlIGl0IG1ha2VzIHRoZW0gc2xpZ2h0bHkgbW9yZSBl
ZmZpY2llbnQgdG8gYWNjZXNzLgogICAgIC8vIFNvLCB3ZSBzaGlmdCBsZWZ0IGFuZCByaWdodCB3
aGVuIHNldHRpbmcgYW5kIGdldHRpbmcgb3VyIGhhc2ggY29kZS4KSW5kZXg6IFNvdXJjZS9XVEYv
d3RmL3RleHQvVVRGOENvbnZlcnNpb25FcnJvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYv
d3RmL3RleHQvVVRGOENvbnZlcnNpb25FcnJvci5oCShyZXZpc2lvbiAyODU2MDcpCisrKyBTb3Vy
Y2UvV1RGL3d0Zi90ZXh0L1VURjhDb252ZXJzaW9uRXJyb3IuaAkod29ya2luZyBjb3B5KQpAQCAt
MjcsOCArMjcsNyBAQAogCiBuYW1lc3BhY2UgV1RGIHsKIAotZW51bSBjbGFzcyBVVEY4Q29udmVy
c2lvbkVycm9yIHsKLSAgICBOb25lLAorZW51bSBjbGFzcyBVVEY4Q29udmVyc2lvbkVycm9yIDog
dWludDhfdCB7CiAgICAgT3V0T2ZNZW1vcnksCiAgICAgSWxsZWdhbFNvdXJjZSwKICAgICBTb3Vy
Y2VFeGhhdXN0ZWQKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL3RleHQvV1RGU3RyaW5nLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi90ZXh0L1dURlN0cmluZy5jcHAJKHJldmlzaW9uIDI4
NTYwNykKKysrIFNvdXJjZS9XVEYvd3RmL3RleHQvV1RGU3RyaW5nLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNjg5LDEyICs2ODksMTMgQEAgQ1N0cmluZyBTdHJpbmc6OnV0ZjgoQ29udmVyc2lvbk1v
ZGUgbW9kZQogewogICAgIEV4cGVjdGVkPENTdHJpbmcsIFVURjhDb252ZXJzaW9uRXJyb3I+IGV4
cGVjdGVkU3RyaW5nID0gdHJ5R2V0VXRmOChtb2RlKTsKICAgICBSRUxFQVNFX0FTU0VSVChleHBl
Y3RlZFN0cmluZyk7CisgICAgQVNTRVJUKG1vZGUgPT0gU3RyaWN0Q29udmVyc2lvblJlcGxhY2lu
Z1VucGFpcmVkU3Vycm9nYXRlc1dpdGhGRkZEIHx8IGV4cGVjdGVkU3RyaW5nLT5sZW5ndGgoKSA9
PSB1dGY4TGVuZ3RoKG1vZGUpKTsKICAgICByZXR1cm4gZXhwZWN0ZWRTdHJpbmcudmFsdWUoKTsK
IH0KIAotQ1N0cmluZyBTdHJpbmc6OnV0ZjgoKSBjb25zdAorc2l6ZV90IFN0cmluZzo6dXRmOExl
bmd0aChDb252ZXJzaW9uTW9kZSBtb2RlKSBjb25zdAogewotICAgIHJldHVybiB1dGY4KExlbmll
bnRDb252ZXJzaW9uKTsKKyAgICByZXR1cm4gbV9pbXBsID8gbV9pbXBsLT51dGY4TGVuZ3RoKG1v
ZGUpIDogMDsKIH0KIAogU3RyaW5nIFN0cmluZzo6bWFrZThCaXRGcm9tMTZCaXRTb3VyY2UoY29u
c3QgVUNoYXIqIHNvdXJjZSwgc2l6ZV90IGxlbmd0aCkKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL3Rl
eHQvV1RGU3RyaW5nLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvdGV4dC9XVEZTdHJp
bmcuaAkocmV2aXNpb24gMjg1NjA3KQorKysgU291cmNlL1dURi93dGYvdGV4dC9XVEZTdHJpbmcu
aAkod29ya2luZyBjb3B5KQpAQCAtMTM4LDggKzEzOCw4IEBAIHB1YmxpYzoKICAgICBXVEZfRVhQ
T1JUX1BSSVZBVEUgQ1N0cmluZyBhc2NpaSgpIGNvbnN0OwogICAgIFdURl9FWFBPUlRfUFJJVkFU
RSBDU3RyaW5nIGxhdGluMSgpIGNvbnN0OwogCi0gICAgV1RGX0VYUE9SVF9QUklWQVRFIENTdHJp
bmcgdXRmOChDb252ZXJzaW9uTW9kZSkgY29uc3Q7Ci0gICAgV1RGX0VYUE9SVF9QUklWQVRFIENT
dHJpbmcgdXRmOCgpIGNvbnN0OworICAgIFdURl9FWFBPUlRfUFJJVkFURSBDU3RyaW5nIHV0Zjgo
Q29udmVyc2lvbk1vZGUgPSBMZW5pZW50Q29udmVyc2lvbikgY29uc3Q7CisgICAgV1RGX0VYUE9S
VF9QUklWQVRFIHNpemVfdCB1dGY4TGVuZ3RoKENvbnZlcnNpb25Nb2RlID0gTGVuaWVudENvbnZl
cnNpb24pIGNvbnN0OwogCiAgICAgV1RGX0VYUE9SVF9QUklWQVRFIEV4cGVjdGVkPENTdHJpbmcs
IFVURjhDb252ZXJzaW9uRXJyb3I+IHRyeUdldFV0ZjgoQ29udmVyc2lvbk1vZGUpIGNvbnN0Owog
ICAgIFdURl9FWFBPUlRfUFJJVkFURSBFeHBlY3RlZDxDU3RyaW5nLCBVVEY4Q29udmVyc2lvbkVy
cm9yPiB0cnlHZXRVdGY4KCkgY29uc3Q7CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi91bmljb2RlL1VU
RjhDb252ZXJzaW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi91bmljb2RlL1VU
RjhDb252ZXJzaW9uLmNwcAkocmV2aXNpb24gMjg1NjA3KQorKysgU291cmNlL1dURi93dGYvdW5p
Y29kZS9VVEY4Q29udmVyc2lvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDE3ICszNCwzMiBA
QAogbmFtZXNwYWNlIFdURiB7CiBuYW1lc3BhY2UgVW5pY29kZSB7CiAKK3NpemVfdCBsYXRpbjFU
b1VURjhMZW5ndGgoY29uc3QgTENoYXIqIHNvdXJjZVN0YXJ0LCBjb25zdCBMQ2hhciogc291cmNl
RW5kKQoreworICAgIHNpemVfdCBsZW5ndGggPSAwOworICAgIGZvciAoY29uc3QgTENoYXIqIHNv
dXJjZSA9IHNvdXJjZVN0YXJ0OyBzb3VyY2UgPCBzb3VyY2VFbmQ7ICsrc291cmNlKSB7CisgICAg
ICAgIHVpbnQ4X3QgYnVmZmVyW1U4X01BWF9MRU5HVEhdOworICAgICAgICBpbnQzMl90IGkgPSAw
OworICAgICAgICAvLyBBbGwgMjU2IHBvc3NpYmxlIGNvZGUgcG9pbnRzIGFyZSB2YWxpZCwgYW5k
IHRoZSBidWZmZXIgaXMgYWx3YXlzIGJpZyBlbm91Z2gsCisgICAgICAgIC8vIHNvIGl0J3Mgc2Fm
ZSB0byB1c2UgVThfQVBQRU5EX1VOU0FGRS4KKyAgICAgICAgVThfQVBQRU5EX1VOU0FGRShidWZm
ZXIsIGksICpzb3VyY2UpOworICAgICAgICBsZW5ndGggKz0gaTsKKyAgICB9CisgICAgcmV0dXJu
IGxlbmd0aDsKK30KKwogYm9vbCBjb252ZXJ0TGF0aW4xVG9VVEY4KGNvbnN0IExDaGFyKiogc291
cmNlU3RhcnQsIGNvbnN0IExDaGFyKiBzb3VyY2VFbmQsIGNoYXIqKiB0YXJnZXRTdGFydCwgY2hh
ciogdGFyZ2V0RW5kKQogewogICAgIGNvbnN0IExDaGFyKiBzb3VyY2U7CiAgICAgY2hhciogdGFy
Z2V0ID0gKnRhcmdldFN0YXJ0OwotICAgIGludCBpID0gMDsKKyAgICBpbnQzMl90IGkgPSAwOwog
ICAgIGZvciAoc291cmNlID0gKnNvdXJjZVN0YXJ0OyBzb3VyY2UgPCBzb3VyY2VFbmQ7ICsrc291
cmNlKSB7CiAgICAgICAgIFVCb29sIHNhd0Vycm9yID0gZmFsc2U7CiAgICAgICAgIC8vIFdvcmsg
YXJvdW5kIGJ1ZyBpbiBlaXRoZXIgV2luZG93cyBjb21waWxlciBvciBvbGQgdmVyc2lvbiBvZiBJ
Q1UsIHdoZXJlIHBhc3NpbmcgYSB1aW50OF90IHRvCiAgICAgICAgIC8vIFU4X0FQUEVORCB3YXJu
cywgYnkgY29udmVydGluZyBmcm9tIHVpbnQ4X3QgdG8gYSB3aWRlciB0eXBlLgogICAgICAgICBV
Q2hhcjMyIGNoYXJhY3RlciA9ICpzb3VyY2U7CiAgICAgICAgIFU4X0FQUEVORChyZWludGVycHJl
dF9jYXN0PHVpbnQ4X3QqPih0YXJnZXQpLCBpLCB0YXJnZXRFbmQgLSAqdGFyZ2V0U3RhcnQsIGNo
YXJhY3Rlciwgc2F3RXJyb3IpOworICAgICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKCFzYXdFcnJv
ciwgIlVURjggZGVzdGluYXRpb24gYnVmZmVyIHdhcyBub3QgYmlnIGVub3VnaCIpOwogICAgICAg
ICBpZiAoc2F3RXJyb3IpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQpAQCAtNTMs
MzEgKzY4LDU4IEBAIGJvb2wgY29udmVydExhdGluMVRvVVRGOChjb25zdCBMQ2hhcioqIHMKICAg
ICByZXR1cm4gdHJ1ZTsKIH0KIAorc2l6ZV90IHV0ZjE2VG9VVEY4TGVuZ3RoKGNvbnN0IFVDaGFy
KiBzb3VyY2VTdGFydCwgY29uc3QgVUNoYXIqIHNvdXJjZUVuZCwgYm9vbCBzdHJpY3QpCit7Cisg
ICAgc2l6ZV90IGxlbmd0aCA9IDA7CisgICAgY29uc3QgVUNoYXIqIHNvdXJjZSA9IHNvdXJjZVN0
YXJ0OworICAgIHdoaWxlIChzb3VyY2UgPCBzb3VyY2VFbmQpIHsKKyAgICAgICAgVUNoYXIzMiBj
aDsKKyAgICAgICAgaW50IGogPSAwOworICAgICAgICBVMTZfTkVYVChzb3VyY2UsIGosIHNvdXJj
ZUVuZCAtIHNvdXJjZSwgY2gpOworICAgICAgICBpZiAoVV9JU19TVVJST0dBVEUoY2gpKSB7Cisg
ICAgICAgICAgICBpZiAoc3RyaWN0KQorICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAg
ICAgICAgaWYgKHNvdXJjZSArIGogPT0gc291cmNlRW5kICYmIFVfSVNfU1VSUk9HQVRFX0xFQUQo
Y2gpKQorICAgICAgICAgICAgICAgIHJldHVybiBsZW5ndGggKyAzOworICAgICAgICAgICAgY2gg
PSByZXBsYWNlbWVudENoYXJhY3RlcjsKKyAgICAgICAgfQorICAgICAgICBzb3VyY2UgKz0gajsK
KworICAgICAgICAvLyBXZSBhbHJlYWR5IGNoZWNrZWQgdGhhdCBjaCBpcyBhIHZhbGlkIGNvZGUg
cG9pbnQsIGFuZCB0aGUgYnVmZmVyIGlzIGFsd2F5cyBiaWcgZW5vdWdoLAorICAgICAgICAvLyBz
byBpdCdzIHNhZmUgdG8gdXNlIFU4X0FQUEVORF9VTlNBRkUuCisgICAgICAgIHVpbnQ4X3QgYnVm
ZmVyW1U4X01BWF9MRU5HVEhdOworICAgICAgICBpbnQzMl90IGkgPSAwOworICAgICAgICBVOF9B
UFBFTkRfVU5TQUZFKGJ1ZmZlciwgaSwgY2gpOworICAgICAgICBsZW5ndGggKz0gaTsKKyAgICB9
CisgICAgcmV0dXJuIGxlbmd0aDsKK30KKwogQ29udmVyc2lvblJlc3VsdCBjb252ZXJ0VVRGMTZU
b1VURjgoY29uc3QgVUNoYXIqKiBzb3VyY2VTdGFydCwgY29uc3QgVUNoYXIqIHNvdXJjZUVuZCwg
Y2hhcioqIHRhcmdldFN0YXJ0LCBjaGFyKiB0YXJnZXRFbmQsIGJvb2wgc3RyaWN0KQogewotICAg
IENvbnZlcnNpb25SZXN1bHQgcmVzdWx0ID0gQ29udmVyc2lvbk9LOworICAgIGF1dG8gcmVzdWx0
ID0gQ29udmVyc2lvblJlc3VsdDo6Q29udmVyc2lvbk9LOwogICAgIGNvbnN0IFVDaGFyKiBzb3Vy
Y2UgPSAqc291cmNlU3RhcnQ7CiAgICAgY2hhciogdGFyZ2V0ID0gKnRhcmdldFN0YXJ0OwogICAg
IFVCb29sIHNhd0Vycm9yID0gZmFsc2U7Ci0gICAgaW50IGkgPSAwOworICAgIGludDMyX3QgaSA9
IDA7CiAgICAgd2hpbGUgKHNvdXJjZSA8IHNvdXJjZUVuZCkgewogICAgICAgICBVQ2hhcjMyIGNo
OwogICAgICAgICBpbnQgaiA9IDA7CiAgICAgICAgIFUxNl9ORVhUKHNvdXJjZSwgaiwgc291cmNl
RW5kIC0gc291cmNlLCBjaCk7CiAgICAgICAgIGlmIChVX0lTX1NVUlJPR0FURShjaCkpIHsKICAg
ICAgICAgICAgIGlmIChzb3VyY2UgKyBqID09IHNvdXJjZUVuZCAmJiBVX0lTX1NVUlJPR0FURV9M
RUFEKGNoKSkgewotICAgICAgICAgICAgICAgIHJlc3VsdCA9IFNvdXJjZUV4aGF1c3RlZDsKKyAg
ICAgICAgICAgICAgICByZXN1bHQgPSBDb252ZXJzaW9uUmVzdWx0OjpTb3VyY2VFeGhhdXN0ZWQ7
CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAo
c3RyaWN0KSB7Ci0gICAgICAgICAgICAgICAgcmVzdWx0ID0gU291cmNlSWxsZWdhbDsKKyAgICAg
ICAgICAgICAgICByZXN1bHQgPSBDb252ZXJzaW9uUmVzdWx0OjpTb3VyY2VJbGxlZ2FsOwogICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgY2ggPSByZXBs
YWNlbWVudENoYXJhY3RlcjsKICAgICAgICAgfQogICAgICAgICBVOF9BUFBFTkQocmVpbnRlcnBy
ZXRfY2FzdDx1aW50OF90Kj4odGFyZ2V0KSwgaSwgdGFyZ2V0RW5kIC0gdGFyZ2V0LCBjaCwgc2F3
RXJyb3IpOwogICAgICAgICBpZiAoc2F3RXJyb3IpIHsKLSAgICAgICAgICAgIHJlc3VsdCA9IFRh
cmdldEV4aGF1c3RlZDsKKyAgICAgICAgICAgIHJlc3VsdCA9IENvbnZlcnNpb25SZXN1bHQ6OlRh
cmdldEV4aGF1c3RlZDsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIHNv
dXJjZSArPSBqOwpJbmRleDogU291cmNlL1dURi93dGYvdW5pY29kZS9VVEY4Q29udmVyc2lvbi5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL3VuaWNvZGUvVVRGOENvbnZlcnNpb24uaAko
cmV2aXNpb24gMjg1NjA3KQorKysgU291cmNlL1dURi93dGYvdW5pY29kZS9VVEY4Q29udmVyc2lv
bi5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw3ICszMSw3IEBACiBuYW1lc3BhY2UgV1RGIHsKIG5h
bWVzcGFjZSBVbmljb2RlIHsKIAotZW51bSBDb252ZXJzaW9uUmVzdWx0IHsKK2VudW0gY2xhc3Mg
Q29udmVyc2lvblJlc3VsdCA6IHVpbnQ4X3QgewogICAgIENvbnZlcnNpb25PSywgLy8gY29udmVy
c2lvbiBzdWNjZXNzZnVsCiAgICAgU291cmNlRXhoYXVzdGVkLCAvLyBwYXJ0aWFsIGNoYXJhY3Rl
ciBpbiBzb3VyY2UsIGJ1dCBoaXQgZW5kCiAgICAgVGFyZ2V0RXhoYXVzdGVkLCAvLyBpbnN1ZmZp
Y2llbnQgcm9vbSBpbiB0YXJnZXQgZm9yIGNvbnZlcnNpb24KQEAgLTQ3LDggKzQ3LDkgQEAgZW51
bSBDb252ZXJzaW9uUmVzdWx0IHsKIFdURl9FWFBPUlRfUFJJVkFURSBib29sIGNvbnZlcnRVVEY4
VG9VVEYxNihjb25zdCBjaGFyKiBzb3VyY2VTdGFydCwgY29uc3QgY2hhciogc291cmNlRW5kLCBV
Q2hhcioqIHRhcmdldFN0YXJ0LCBVQ2hhciogdGFyZ2V0RW5kLCBib29sKiBpc1NvdXJjZUFsbEFT
Q0lJID0gbnVsbHB0cik7CiBXVEZfRVhQT1JUX1BSSVZBVEUgYm9vbCBjb252ZXJ0VVRGOFRvVVRG
MTZSZXBsYWNpbmdJbnZhbGlkU2VxdWVuY2VzKGNvbnN0IGNoYXIqIHNvdXJjZVN0YXJ0LCBjb25z
dCBjaGFyKiBzb3VyY2VFbmQsIFVDaGFyKiogdGFyZ2V0U3RhcnQsIFVDaGFyKiB0YXJnZXRFbmQs
IGJvb2wqIGlzU291cmNlQWxsQVNDSUkgPSBudWxscHRyKTsKIFdURl9FWFBPUlRfUFJJVkFURSBi
b29sIGNvbnZlcnRMYXRpbjFUb1VURjgoY29uc3QgTENoYXIqKiBzb3VyY2VTdGFydCwgY29uc3Qg
TENoYXIqIHNvdXJjZUVuZCwgY2hhcioqIHRhcmdldFN0YXJ0LCBjaGFyKiB0YXJnZXRFbmQpOwor
V1RGX0VYUE9SVF9QUklWQVRFIHNpemVfdCBsYXRpbjFUb1VURjhMZW5ndGgoY29uc3QgTENoYXIq
IHNvdXJjZVN0YXJ0LCBjb25zdCBMQ2hhciogc291cmNlRW5kKTsKIFdURl9FWFBPUlRfUFJJVkFU
RSBDb252ZXJzaW9uUmVzdWx0IGNvbnZlcnRVVEYxNlRvVVRGOChjb25zdCBVQ2hhcioqIHNvdXJj
ZVN0YXJ0LCBjb25zdCBVQ2hhciogc291cmNlRW5kLCBjaGFyKiogdGFyZ2V0U3RhcnQsIGNoYXIq
IHRhcmdldEVuZCwgYm9vbCBzdHJpY3QgPSB0cnVlKTsKLQorV1RGX0VYUE9SVF9QUklWQVRFIHNp
emVfdCB1dGYxNlRvVVRGOExlbmd0aChjb25zdCBVQ2hhciogc291cmNlU3RhcnQsIGNvbnN0IFVD
aGFyKiBzb3VyY2VFbmQsIGJvb2wgc3RyaWN0ID0gdHJ1ZSk7CiBXVEZfRVhQT1JUX1BSSVZBVEUg
dW5zaWduZWQgY2FsY3VsYXRlU3RyaW5nSGFzaEFuZExlbmd0aEZyb21VVEY4TWFza2luZ1RvcDhC
aXRzKGNvbnN0IGNoYXIqIGRhdGEsIGNvbnN0IGNoYXIqIGRhdGFFbmQsIHVuc2lnbmVkJiBkYXRh
TGVuZ3RoLCB1bnNpZ25lZCYgdXRmMTZMZW5ndGgpOwogCiAvLyBDYWxsZXJzIG9mIHRoZXNlIGZ1
bmN0aW9ucyBtdXN0IGNoZWNrIHRoYXQgdGhlIGxlbmd0aHMgYXJlIHRoZSBzYW1lOyBhY2NvcmRp
bmdseSB3ZSBvbWl0IGFuIGVuZCBhcmd1bWVudCBmb3IgVVRGLTE2IGFuZCBMYXRpbi0xLgpJbmRl
eDogU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L0NoYW5nZUxvZwkocmV2aXNpb24gMjg1NjA3KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9n
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTUgQEAKKzIwMjEtMTEtMTAgIEFsZXggQ2hyaXN0
ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4KKworICAgICAgICBBZGQgV1RGOjpTdHJp
bmc6OnV0ZjhMZW5ndGggYW5kIHVzZSBpdCB0byBhbGxvY2F0ZSBjb3JyZWN0IHNpemUgYnVmZmVy
IHdoZW4gY29udmVydGluZyB0byBVVEYtOAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MjMyOTYyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9TaGFyZWRCdWZmZXIuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6dXRmOEJ1ZmZlcik6CisgICAgICAgICogeG1sL3BhcnNlci9YTUxEb2N1bWVudFBh
cnNlckxpYnhtbDIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y29udmVydFVURjE2RW50aXR5VG9V
VEY4KToKKwogMjAyMS0xMS0xMCAgQW50b2luZSBRdWludCAgPGdyYW91dHNAd2Via2l0Lm9yZz4K
IAogICAgICAgICBUaGUgY3NzVGV4dCBwcm9wZXJ0eSBmb3IgYSBjb21wdXRlZCBzdHlsZSBzaG91
bGQgcmV0dXJuIGFuIGVtcHR5IHN0cmluZwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
U2hhcmVkQnVmZmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9T
aGFyZWRCdWZmZXIuY3BwCShyZXZpc2lvbiAyODU2MDcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9TaGFyZWRCdWZmZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OTUsNyArNDk1LDcgQEAg
UmVmUHRyPFNoYXJlZEJ1ZmZlcj4gdXRmOEJ1ZmZlcihjb25zdCBTdAogICAgICAgICAgICAgICAg
IHJldHVybiBudWxscHRyOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgY29uc3QgVUNo
YXIqIGQgPSBzdHJpbmcuY2hhcmFjdGVyczE2KCk7Ci0gICAgICAgICAgICBpZiAoV1RGOjpVbmlj
b2RlOjpjb252ZXJ0VVRGMTZUb1VURjgoJmQsIGQgKyBsZW5ndGgsICZwLCBwICsgYnVmZmVyLnNp
emUoKSkgIT0gV1RGOjpVbmljb2RlOjpDb252ZXJzaW9uT0spCisgICAgICAgICAgICBpZiAoV1RG
OjpVbmljb2RlOjpjb252ZXJ0VVRGMTZUb1VURjgoJmQsIGQgKyBsZW5ndGgsICZwLCBwICsgYnVm
ZmVyLnNpemUoKSkgIT0gV1RGOjpVbmljb2RlOjpDb252ZXJzaW9uUmVzdWx0OjpDb252ZXJzaW9u
T0spCiAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgIH0KICAgICB9Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS94bWwvcGFyc2VyL1hNTERvY3VtZW50UGFyc2VyTGlieG1sMi5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUveG1sL3BhcnNlci9YTUxEb2N1bWVudFBh
cnNlckxpYnhtbDIuY3BwCShyZXZpc2lvbiAyODU2MDcpCisrKyBTb3VyY2UvV2ViQ29yZS94bWwv
cGFyc2VyL1hNTERvY3VtZW50UGFyc2VyTGlieG1sMi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEx
NTgsNyArMTE1OCw3IEBAIHN0YXRpYyBzaXplX3QgY29udmVydFVURjE2RW50aXR5VG9VVEY4KGMK
IHsKICAgICBjb25zdCBjaGFyKiBvcmlnaW5hbFRhcmdldCA9IHRhcmdldDsKICAgICBhdXRvIGNv
bnZlcnNpb25SZXN1bHQgPSBXVEY6OlVuaWNvZGU6OmNvbnZlcnRVVEYxNlRvVVRGOCgmdXRmMTZF
bnRpdHksIHV0ZjE2RW50aXR5ICsgbnVtYmVyT2ZDb2RlVW5pdHMsICZ0YXJnZXQsIHRhcmdldCAr
IHRhcmdldFNpemUpOwotICAgIGlmIChjb252ZXJzaW9uUmVzdWx0ICE9IFdURjo6VW5pY29kZTo6
Q29udmVyc2lvbk9LKQorICAgIGlmIChjb252ZXJzaW9uUmVzdWx0ICE9IFdURjo6VW5pY29kZTo6
Q29udmVyc2lvblJlc3VsdDo6Q29udmVyc2lvbk9LKQogICAgICAgICByZXR1cm4gMDsKIAogICAg
IC8vIEV2ZW4gdGhvdWdoIHdlIG11c3QgcGFzcyB0aGUgbGVuZ3RoLCBsaWJ4bWwgZXhwZWN0cyB0
aGUgZW50aXR5IHN0cmluZyB0byBiZSBudWxsIHRlcm1pbmF0ZWQuCkluZGV4OiBTb3VyY2UvV2Vi
S2l0L0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwkocmV2
aXNpb24gMjg1NjA3KQorKysgU291cmNlL1dlYktpdC9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkK
QEAgLTEsMyArMSwxMyBAQAorMjAyMS0xMS0xMCAgQWxleCBDaHJpc3RlbnNlbiAgPGFjaHJpc3Rl
bnNlbkB3ZWJraXQub3JnPgorCisgICAgICAgIEFkZCBXVEY6OlN0cmluZzo6dXRmOExlbmd0aCBh
bmQgdXNlIGl0IHRvIGFsbG9jYXRlIGNvcnJlY3Qgc2l6ZSBidWZmZXIgd2hlbiBjb252ZXJ0aW5n
IHRvIFVURi04CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0yMzI5NjIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICAqIFNoYXJlZC9BUEkvYy9XS1N0cmluZy5jcHA6CisgICAgICAgIChXS1N0cmluZ0dldFVURjhD
U3RyaW5nSW1wbCk6CisKIDIwMjEtMTEtMTAgIFBlciBBcm5lIFZvbGxhbiA8cHZvbGxhbkBhcHBs
ZS5jb20+CiAKICAgICAgICAgW21hY09TXVtHUFVQXSBSZW1vdmUgYWNjZXNzIHRvIHN5c2N0bCBw
cm9wZXJ0aWVzCkluZGV4OiBTb3VyY2UvV2ViS2l0L1NoYXJlZC9BUEkvYy9XS1N0cmluZy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9TaGFyZWQvQVBJL2MvV0tTdHJpbmcuY3BwCShy
ZXZpc2lvbiAyODU2MDcpCisrKyBTb3VyY2UvV2ViS2l0L1NoYXJlZC9BUEkvYy9XS1N0cmluZy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTg4LDcgKzg4LDcgQEAgc2l6ZV90IFdLU3RyaW5nR2V0VVRG
OENTdHJpbmdJbXBsKFdLU3RyaQogICAgIH0gZWxzZSB7CiAgICAgICAgIGNvbnN0IFVDaGFyKiBj
aGFyYWN0ZXJzID0gc3RyaW5nVmlldy5jaGFyYWN0ZXJzMTYoKTsKICAgICAgICAgYXV0byByZXN1
bHQgPSBXVEY6OlVuaWNvZGU6OmNvbnZlcnRVVEYxNlRvVVRGOCgmY2hhcmFjdGVycywgY2hhcmFj
dGVycyArIHN0cmluZ1ZpZXcubGVuZ3RoKCksICZwLCBwICsgYnVmZmVyU2l6ZSAtIDEsIHN0cmlj
dCk7Ci0gICAgICAgIGlmIChyZXN1bHQgIT0gV1RGOjpVbmljb2RlOjpDb252ZXJzaW9uT0sgJiYg
cmVzdWx0ICE9IFdURjo6VW5pY29kZTo6VGFyZ2V0RXhoYXVzdGVkKQorICAgICAgICBpZiAocmVz
dWx0ICE9IFdURjo6VW5pY29kZTo6Q29udmVyc2lvblJlc3VsdDo6Q29udmVyc2lvbk9LICYmIHJl
c3VsdCAhPSBXVEY6OlVuaWNvZGU6OkNvbnZlcnNpb25SZXN1bHQ6OlRhcmdldEV4aGF1c3RlZCkK
ICAgICAgICAgICAgIHJldHVybiAwOwogICAgIH0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>445357</attachid>
            <date>2021-11-29 15:45:27 -0800</date>
            <delta_ts>2021-11-29 16:42:38 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-232962-20211129154526.patch</filename>
            <type>text/plain</type>
            <size>30285</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg2MjI2CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCAw
ZTQxZDliMzc4Y2ZjOTUzZjcyNTYwZTUyYmMyY2VlZjU4YWI4MTg3Li42MzRjMmJhNjExOTJmZTQ3
NjhmYmY5ODA4ZWVjZTRmNjM1YTZmZjI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxNyBAQAorMjAyMS0xMS0yOSAgQWxleCBDaHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3
ZWJraXQub3JnPgorCisgICAgICAgIEFkZCBXVEY6OlN0cmluZzo6dXRmOExlbmd0aCBhbmQgdXNl
IGl0IHRvIGFsbG9jYXRlIGNvcnJlY3Qgc2l6ZSBidWZmZXIgd2hlbiBjb252ZXJ0aW5nIHRvIFVU
Ri04CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzI5
NjIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIEFQ
SS9KU1N0cmluZ1JlZi5jcHA6CisgICAgICAgIChKU1N0cmluZ0dldFVURjhDU3RyaW5nKToKKyAg
ICAgICAgKiBydW50aW1lL0NvbnNvbGVDbGllbnQuY3BwOgorICAgICAgICAoSlNDOjpDb25zb2xl
Q2xpZW50OjpwcmludENvbnNvbGVNZXNzYWdlV2l0aEFyZ3VtZW50cyk6CisgICAgICAgIEJlIG1v
cmUgcmVzaXN0YW50IGFnYWluc3QgY29uc29sZSBsb2dzIHRoYXQgYXJlIHRvbyBsb25nIGZvciBT
dHJpbmdCdWlsZGVycy4KKyAgICAgICAgVGhpcyBub3cgaGFwcGVucyBpbiB0aGUgdGVzdCBqcy90
aHJvdy1sYXJnZS1zdHJpbmctb29tLmh0bWwKKwogMjAyMS0xMS0yOSAgWmFuIERvYmVyc2VrICA8
emRvYmVyc2VrQGlnYWxpYS5jb20+CiAKICAgICAgICAgW1JJU0NWNjRdIFBvcHVsYXRlIFJJU0NW
NjRBc3NlbWJsZXIgd2l0aCBpbnN0cnVjdGlvbi1nZW5lcmF0aW9uIG1ldGhvZHMKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nIGIvU291cmNlL1dURi9DaGFuZ2VMb2cKaW5kZXggODMz
ZDdmNDZjNzZkMDUxMjlkNTkwN2QyYTU2NjQxNzExYTdkMWZiNy4uZjgxMGE5NGI1MWZhYjE2YTAz
MGVlZjBkMzAxMzcwZGRjZDFmZDVhMyAxMDA2NDQKLS0tIGEvU291cmNlL1dURi9DaGFuZ2VMb2cK
KysrIGIvU291cmNlL1dURi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzMyBAQAorMjAyMS0xMS0yOSAg
QWxleCBDaHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgorCisgICAgICAgIEFk
ZCBXVEY6OlN0cmluZzo6dXRmOExlbmd0aCBhbmQgdXNlIGl0IHRvIGFsbG9jYXRlIGNvcnJlY3Qg
c2l6ZSBidWZmZXIgd2hlbiBjb252ZXJ0aW5nIHRvIFVURi04CisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzI5NjIKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBTdHJpY3RDb252ZXJzaW9uUmVwbGFjaW5nVW5w
YWlyZWRTdXJyb2dhdGVzV2l0aEZGRkQgaXMgdW5zdXBwb3J0ZWQgYW5kIG9ubHkgdXNlZCBpbiB3
ZWIgc29ja2V0IGNvZGUuCisKKyAgICAgICAgKiB3dGYvdGV4dC9TdHJpbmdJbXBsLmNwcDoKKyAg
ICAgICAgKFdURjo6cHV0VVRGOFRyaXBsZSk6CisgICAgICAgIChXVEY6OlN0cmluZ0ltcGw6OnV0
ZjhGb3JDaGFyYWN0ZXJzKToKKyAgICAgICAgKFdURjo6U3RyaW5nSW1wbDo6dHJ5R2V0VXRmOCBj
b25zdCk6CisgICAgICAgIChXVEY6OlN0cmluZ0ltcGw6OnV0ZjggY29uc3QpOgorICAgICAgICAo
V1RGOjpTdHJpbmdJbXBsOjp1dGY4TGVuZ3RoIGNvbnN0KToKKyAgICAgICAgKFdURjo6U3RyaW5n
SW1wbDo6dXRmOEltcGwpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpTdHJpbmdJbXBsOjp0cnlH
ZXRVdGY4Rm9yUmFuZ2UgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIHd0Zi90ZXh0L1N0cmlu
Z0ltcGwuaDoKKyAgICAgICAgKiB3dGYvdGV4dC9VVEY4Q29udmVyc2lvbkVycm9yLmg6CisgICAg
ICAgICogd3RmL3RleHQvV1RGU3RyaW5nLmNwcDoKKyAgICAgICAgKFdURjo6U3RyaW5nOjp1dGY4
TGVuZ3RoIGNvbnN0KToKKyAgICAgICAgKiB3dGYvdGV4dC9XVEZTdHJpbmcuaDoKKyAgICAgICAg
KiB3dGYvdW5pY29kZS9VVEY4Q29udmVyc2lvbi5jcHA6CisgICAgICAgIChXVEY6OlVuaWNvZGU6
OmxhdGluMVRvVVRGOExlbmd0aCk6CisgICAgICAgIChXVEY6OlVuaWNvZGU6OmNvbnZlcnRMYXRp
bjFUb1VURjgpOgorICAgICAgICAoV1RGOjpVbmljb2RlOjp1dGYxNlRvVVRGOExlbmd0aCk6Cisg
ICAgICAgIChXVEY6OlVuaWNvZGU6OmNvbnZlcnRVVEYxNlRvVVRGOCk6CisgICAgICAgICogd3Rm
L3VuaWNvZGUvVVRGOENvbnZlcnNpb24uaDoKKyAgICAgICAgKCk6IERlbGV0ZWQuCisKIDIwMjEt
MTEtMjkgIFlvdWVubiBGYWJsZXQgIDx5b3Vlbm5AYXBwbGUuY29tPgogCiAgICAgICAgIEFwcGx5
IFdlYlByZWZlcmVuY2VzIG9uIFNlcnZpY2VXb3JrZXIgc2V0dGluZ3MKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBl
OWIxNzMxYjc4ODMyNDcwZjdhZDQzZGRjMzdmYjQ1NDIyNGRmZWU2Li44YTZmMWEyOTNmNGFkNWU2
OTRmZDEyMTMyNzUwNDE4MGU4NGE3NzViIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFu
Z2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAKKzIw
MjEtMTEtMjkgIEFsZXggQ2hyaXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4KKwor
ICAgICAgICBBZGQgV1RGOjpTdHJpbmc6OnV0ZjhMZW5ndGggYW5kIHVzZSBpdCB0byBhbGxvY2F0
ZSBjb3JyZWN0IHNpemUgYnVmZmVyIHdoZW4gY29udmVydGluZyB0byBVVEYtOAorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjMyOTYyCisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9TaGFyZWRC
dWZmZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6dXRmOEJ1ZmZlcik6CisgICAgICAgICogeG1s
L3BhcnNlci9YTUxEb2N1bWVudFBhcnNlckxpYnhtbDIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
Y29udmVydFVURjE2RW50aXR5VG9VVEY4KToKKwogMjAyMS0xMS0yOSAgQW50dGkgS29pdmlzdG8g
IDxhbnR0aUBhcHBsZS5jb20+CiAKICAgICAgICAgWzpoYXMoKSBwc2V1ZG8tY2xhc3NdIGlkIGlu
dmFsaWRhdGlvbiBzdXBwb3J0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZyBi
L1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDFmNWUzNThmNWI4ZTI4NjNmNjk3N2QyMjU0
OGE3YTVmZWZkNDZkMDcuLjcyODkzNGY3YTc5ZDYyMDZmZmVjNDkzY2JjNTdjZWMzYTU1ZGY4N2Qg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMTMgQEAKKzIwMjEtMTEtMjkgIEFsZXggQ2hyaXN0ZW5zZW4g
IDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4KKworICAgICAgICBBZGQgV1RGOjpTdHJpbmc6OnV0
ZjhMZW5ndGggYW5kIHVzZSBpdCB0byBhbGxvY2F0ZSBjb3JyZWN0IHNpemUgYnVmZmVyIHdoZW4g
Y29udmVydGluZyB0byBVVEYtOAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MjMyOTYyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgKiBTaGFyZWQvQVBJL2MvV0tTdHJpbmcuY3BwOgorICAgICAgICAoV0tTdHJp
bmdHZXRVVEY4Q1N0cmluZ0ltcGwpOgorCiAyMDIxLTExLTI5ICBNeWxlcyBDLiBNYXhmaWVsZCAg
PG1tYXhmaWVsZEBhcHBsZS5jb20+CiAKICAgICAgICAgW1dlYkdQVV0gSVBDIGNsYXNzIHJlZmFj
dG9yaW5ncwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1N0cmluZ1Jl
Zi5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTU3RyaW5nUmVmLmNwcAppbmRleCA0
ZDY0MDA0MmFjNDE0MTY3MjllNjI1M2U0MmMzYTNkYjFiZmNkYTYwLi5hMTMyMjE0MjJjMDY4Zjll
NWM1NzZmZWYzYzNmNWE3NWU3N2U5NzMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQVBJL0pTU3RyaW5nUmVmLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pT
U3RyaW5nUmVmLmNwcApAQCAtMTA5LDcgKzEwOSw3IEBAIHNpemVfdCBKU1N0cmluZ0dldFVURjhD
U3RyaW5nKEpTU3RyaW5nUmVmIHN0cmluZywgY2hhciogYnVmZmVyLCBzaXplX3QgYnVmZmVyU2l6
CiAgICAgfSBlbHNlIHsKICAgICAgICAgY29uc3QgVUNoYXIqIHNvdXJjZSA9IHN0cmluZy0+Y2hh
cmFjdGVyczE2KCk7CiAgICAgICAgIGF1dG8gcmVzdWx0ID0gY29udmVydFVURjE2VG9VVEY4KCZz
b3VyY2UsIHNvdXJjZSArIHN0cmluZy0+bGVuZ3RoKCksICZkZXN0aW5hdGlvbiwgZGVzdGluYXRp
b24gKyBidWZmZXJTaXplIC0gMSk7Ci0gICAgICAgIGZhaWxlZCA9IHJlc3VsdCAhPSBDb252ZXJz
aW9uT0sgJiYgcmVzdWx0ICE9IFRhcmdldEV4aGF1c3RlZDsKKyAgICAgICAgZmFpbGVkID0gcmVz
dWx0ICE9IENvbnZlcnNpb25SZXN1bHQ6OlN1Y2Nlc3MgJiYgcmVzdWx0ICE9IENvbnZlcnNpb25S
ZXN1bHQ6OlRhcmdldEV4aGF1c3RlZDsKICAgICB9CiAKICAgICAqZGVzdGluYXRpb24rKyA9ICdc
MCc7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db25zb2xlQ2xp
ZW50LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbnNvbGVDbGllbnQuY3Bw
CmluZGV4IDExMzk5ZWIwOWIyYmNjODU5YzdlZDM2YTljZWU0ZDIzM2M5Y2Q2ZGQuLjRhMmFhMzVj
M2FiZjMxYTg1YjQ5NGZiOGE3MjRlZTFlOTMwYWNkYmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0NvbnNvbGVDbGllbnQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0NvbnNvbGVDbGllbnQuY3BwCkBAIC0yMTAsNyArMjEwLDcgQEAgdm9p
ZCBDb25zb2xlQ2xpZW50OjpwcmludENvbnNvbGVNZXNzYWdlV2l0aEFyZ3VtZW50cyhNZXNzYWdl
U291cmNlIHNvdXJjZSwgTWVzc2EKICAgICBSZWY8U2NyaXB0Q2FsbFN0YWNrPiBjYWxsU3RhY2sg
PSBjcmVhdGVTY3JpcHRDYWxsU3RhY2tGb3JDb25zb2xlKGdsb2JhbE9iamVjdCwgc3RhY2tTaXpl
KTsKICAgICBjb25zdCBTY3JpcHRDYWxsRnJhbWUmIGxhc3RDYWxsZXIgPSBjYWxsU3RhY2stPmF0
KDApOwogCi0gICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOworICAgIFN0cmluZ0J1aWxkZXIgYnVp
bGRlcihTdHJpbmdCdWlsZGVyOjpPdmVyZmxvd0hhbmRsZXI6OlJlY29yZE92ZXJmbG93KTsKIAog
ICAgIGlmICghbGFzdENhbGxlci5zb3VyY2VVUkwoKS5pc0VtcHR5KCkpIHsKICAgICAgICAgYXBw
ZW5kVVJMQW5kUG9zaXRpb24oYnVpbGRlciwgbGFzdENhbGxlci5zb3VyY2VVUkwoKSwgbGFzdENh
bGxlci5saW5lTnVtYmVyKCksIGxhc3RDYWxsZXIuY29sdW1uTnVtYmVyKCkpOwpAQCAtMjI2LDcg
KzIyNiwxMCBAQCB2b2lkIENvbnNvbGVDbGllbnQ6OnByaW50Q29uc29sZU1lc3NhZ2VXaXRoQXJn
dW1lbnRzKE1lc3NhZ2VTb3VyY2Ugc291cmNlLCBNZXNzYQogICAgICAgICBzY29wZS5jbGVhckV4
Y2VwdGlvbigpOwogICAgIH0KIAotICAgIFdURkxvZ0Fsd2F5cygiJXMiLCBidWlsZGVyLnRvU3Ry
aW5nKCkudXRmOCgpLmRhdGEoKSk7CisgICAgaWYgKGJ1aWxkZXIuaGFzT3ZlcmZsb3dlZCgpKQor
ICAgICAgICBXVEZMb2dBbHdheXMoIkNvbnNvbGUgbWVzc2FnZSBleGNlZWRlZCBtYXhpbXVtIGxl
bmd0aC4iKTsKKyAgICBlbHNlCisgICAgICAgIFdURkxvZ0Fsd2F5cygiJXMiLCBidWlsZGVyLnRv
U3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CiAKICAgICBpZiAoaXNUcmFjZU1lc3NhZ2UpIHsKICAg
ICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjYWxsU3RhY2stPnNpemUoKTsgKytpKSB7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ0ltcGwuY3BwIGIvU291cmNlL1dU
Ri93dGYvdGV4dC9TdHJpbmdJbXBsLmNwcAppbmRleCBkNTg0NTEwMGNlMjYxYTI4NjJkYjRhMTBm
NmY4MjEyZDM5YWZlMjYyLi4wYjExNzM5NGU4MDdjYmVmYmNlOWYzYTEyNDcxMjljMGQ3ZjM5ZDFj
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ0ltcGwuY3BwCisrKyBiL1Nv
dXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nSW1wbC5jcHAKQEAgLTE2NjQsMjMgKzE2NjQsMzMgQEAg
c2l6ZV90IFN0cmluZ0ltcGw6OnNpemVJbkJ5dGVzKCkgY29uc3QKIHN0YXRpYyBpbmxpbmUgdm9p
ZCBwdXRVVEY4VHJpcGxlKGNoYXIqJiBidWZmZXIsIFVDaGFyIGNoYXJhY3RlcikKIHsKICAgICBB
U1NFUlQoY2hhcmFjdGVyID49IDB4MDgwMCk7Ci0gICAgKmJ1ZmZlcisrID0gc3RhdGljX2Nhc3Q8
Y2hhcj4oKChjaGFyYWN0ZXIgPj4gMTIpICYgMHgwRikgfCAweEUwKTsKLSAgICAqYnVmZmVyKysg
PSBzdGF0aWNfY2FzdDxjaGFyPigoKGNoYXJhY3RlciA+PiA2KSAmIDB4M0YpIHwgMHg4MCk7Ci0g
ICAgKmJ1ZmZlcisrID0gc3RhdGljX2Nhc3Q8Y2hhcj4oKGNoYXJhY3RlciAmIDB4M0YpIHwgMHg4
MCk7CisgICAgaW50IGkgPSAwOworICAgIFU4X0FQUEVORF9VTlNBRkUoYnVmZmVyLCBpLCBjaGFy
YWN0ZXIpOworICAgIEFTU0VSVChpID09IDMpOworICAgIGJ1ZmZlciArPSBpOwogfQogCi1VVEY4
Q29udmVyc2lvbkVycm9yIFN0cmluZ0ltcGw6OnV0ZjhJbXBsKGNvbnN0IFVDaGFyKiBjaGFyYWN0
ZXJzLCB1bnNpZ25lZCBsZW5ndGgsIGNoYXIqJiBidWZmZXIsIHNpemVfdCBidWZmZXJTaXplLCBD
b252ZXJzaW9uTW9kZSBtb2RlKQorRXhwZWN0ZWQ8Q1N0cmluZywgVVRGOENvbnZlcnNpb25FcnJv
cj4gU3RyaW5nSW1wbDo6dXRmOEZvckNoYXJhY3RlcnMoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMs
IHVuc2lnbmVkIGxlbmd0aCwgQ29udmVyc2lvbk1vZGUgbW9kZSkKIHsKLSAgICBpZiAobW9kZSA9
PSBTdHJpY3RDb252ZXJzaW9uUmVwbGFjaW5nVW5wYWlyZWRTdXJyb2dhdGVzV2l0aEZGRkQpIHsK
KyAgICBpZiAoIWxlbmd0aCkKKyAgICAgICAgcmV0dXJuIENTdHJpbmcoIiIsIDApOworCisgICAg
c3dpdGNoIChtb2RlKSB7CisgICAgY2FzZSBTdHJpY3RDb252ZXJzaW9uUmVwbGFjaW5nVW5wYWly
ZWRTdXJyb2dhdGVzV2l0aEZGRkQ6IHsKKyAgICAgICAgaWYgKGxlbmd0aCA+IE1heExlbmd0aCAv
IDMpCisgICAgICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoVVRGOENvbnZlcnNpb25FcnJv
cjo6T3V0T2ZNZW1vcnkpOworICAgICAgICBzaXplX3QgYnVmZmVyU2l6ZSA9IGxlbmd0aCAqIDM7
CisgICAgICAgIFZlY3RvcjxjaGFyLCAxMDI0PiBidWZmZXJWZWN0b3IoYnVmZmVyU2l6ZSk7Cisg
ICAgICAgIGNoYXIqIGJ1ZmZlciA9IGJ1ZmZlclZlY3Rvci5kYXRhKCk7CiAgICAgICAgIGNvbnN0
IFVDaGFyKiBjaGFyYWN0ZXJzRW5kID0gY2hhcmFjdGVycyArIGxlbmd0aDsKICAgICAgICAgY2hh
ciogYnVmZmVyRW5kID0gYnVmZmVyICsgYnVmZmVyU2l6ZTsKICAgICAgICAgd2hpbGUgKGNoYXJh
Y3RlcnMgPCBjaGFyYWN0ZXJzRW5kKSB7CiAgICAgICAgICAgICAvLyBVc2Ugc3RyaWN0IGNvbnZl
cnNpb24gdG8gZGV0ZWN0IHVucGFpcmVkIHN1cnJvZ2F0ZXMuCiAgICAgICAgICAgICBhdXRvIHJl
c3VsdCA9IGNvbnZlcnRVVEYxNlRvVVRGOCgmY2hhcmFjdGVycywgY2hhcmFjdGVyc0VuZCwgJmJ1
ZmZlciwgYnVmZmVyRW5kKTsKLSAgICAgICAgICAgIEFTU0VSVChyZXN1bHQgIT0gVGFyZ2V0RXho
YXVzdGVkKTsKKyAgICAgICAgICAgIEFTU0VSVChyZXN1bHQgIT0gQ29udmVyc2lvblJlc3VsdDo6
VGFyZ2V0RXhoYXVzdGVkKTsKICAgICAgICAgICAgIC8vIENvbnZlcnNpb24gZmFpbHMgd2hlbiB0
aGVyZSBpcyBhbiB1bnBhaXJlZCBzdXJyb2dhdGUuCiAgICAgICAgICAgICAvLyBQdXQgcmVwbGFj
ZW1lbnQgY2hhcmFjdGVyIChVK0ZGRkQpIGluc3RlYWQgb2YgdGhlIHVucGFpcmVkIHN1cnJvZ2F0
ZS4KLSAgICAgICAgICAgIGlmIChyZXN1bHQgIT0gQ29udmVyc2lvbk9LKSB7CisgICAgICAgICAg
ICBpZiAocmVzdWx0ICE9IENvbnZlcnNpb25SZXN1bHQ6OlN1Y2Nlc3MpIHsKICAgICAgICAgICAg
ICAgICBBU1NFUlQoKDB4RDgwMCA8PSAqY2hhcmFjdGVycyAmJiAqY2hhcmFjdGVycyA8PSAweERG
RkYpKTsKICAgICAgICAgICAgICAgICAvLyBUaGVyZSBzaG91bGQgYmUgcm9vbSBsZWZ0LCBzaW5j
ZSBvbmUgVUNoYXIgaGFzbid0IGJlZW4gY29udmVydGVkLgogICAgICAgICAgICAgICAgIEFTU0VS
VCgoYnVmZmVyICsgMykgPD0gYnVmZmVyRW5kKTsKQEAgLTE2ODgsMTE1ICsxNjk4LDgzIEBAIFVU
RjhDb252ZXJzaW9uRXJyb3IgU3RyaW5nSW1wbDo6dXRmOEltcGwoY29uc3QgVUNoYXIqIGNoYXJh
Y3RlcnMsIHVuc2lnbmVkIGxlbmd0CiAgICAgICAgICAgICAgICAgKytjaGFyYWN0ZXJzOwogICAg
ICAgICAgICAgfQogICAgICAgICB9Ci0gICAgfSBlbHNlIHsKKyAgICAgICAgcmV0dXJuIENTdHJp
bmcoYnVmZmVyVmVjdG9yLmRhdGEoKSwgYnVmZmVyIC0gYnVmZmVyVmVjdG9yLmRhdGEoKSk7Cisg
ICAgfQorICAgIGNhc2UgU3RyaWN0Q29udmVyc2lvbjoKKyAgICBjYXNlIExlbmllbnRDb252ZXJz
aW9uOiB7CiAgICAgICAgIGJvb2wgc3RyaWN0ID0gbW9kZSA9PSBTdHJpY3RDb252ZXJzaW9uOwot
ICAgICAgICBjb25zdCBVQ2hhciogb3JpZ2luYWxDaGFyYWN0ZXJzID0gY2hhcmFjdGVyczsKLSAg
ICAgICAgYXV0byByZXN1bHQgPSBjb252ZXJ0VVRGMTZUb1VURjgoJmNoYXJhY3RlcnMsIGNoYXJh
Y3RlcnMgKyBsZW5ndGgsICZidWZmZXIsIGJ1ZmZlciArIGJ1ZmZlclNpemUsIHN0cmljdCk7Ci0g
ICAgICAgIEFTU0VSVChyZXN1bHQgIT0gVGFyZ2V0RXhoYXVzdGVkKTsgLy8gKGxlbmd0aCAqIDMp
IHNob3VsZCBiZSBzdWZmaWNpZW50IGZvciBhbnkgY29udmVyc2lvbgotCi0gICAgICAgIC8vIE9u
bHkgcHJvZHVjZWQgZnJvbSBzdHJpY3QgY29udmVyc2lvbi4KLSAgICAgICAgaWYgKHJlc3VsdCA9
PSBTb3VyY2VJbGxlZ2FsKSB7Ci0gICAgICAgICAgICBBU1NFUlQoc3RyaWN0KTsKLSAgICAgICAg
ICAgIHJldHVybiBVVEY4Q29udmVyc2lvbkVycm9yOjpJbGxlZ2FsU291cmNlOworICAgICAgICBh
dXRvIGNvbnZlcnRlZExlbmd0aCA9IGxlbmd0aFVURjhGcm9tVVRGMTYoY2hhcmFjdGVycywgY2hh
cmFjdGVycyArIGxlbmd0aCwgc3RyaWN0KTsKKyAgICAgICAgaWYgKGNvbnZlcnRlZExlbmd0aCA+
IE1heExlbmd0aCkKKyAgICAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChVVEY4Q29udmVy
c2lvbkVycm9yOjpPdXRPZk1lbW9yeSk7CisgICAgICAgIGlmICghY29udmVydGVkTGVuZ3RoKQor
ICAgICAgICAgICAgcmV0dXJuIENTdHJpbmcoIiIsIDApOworCisgICAgICAgIGNoYXIqIGRlc3Rp
bmF0aW9uOworICAgICAgICBhdXRvIHJlc3VsdCA9IENTdHJpbmc6Om5ld1VuaW5pdGlhbGl6ZWQo
Y29udmVydGVkTGVuZ3RoLCBkZXN0aW5hdGlvbik7CisgICAgICAgIGNoYXIqIGRlc3RpbmF0aW9u
RW5kID0gZGVzdGluYXRpb24gKyBjb252ZXJ0ZWRMZW5ndGg7CisgICAgICAgIGNvbnN0IFVDaGFy
KiBjaGFyYWN0ZXJzRW5kID0gY2hhcmFjdGVycyArIGxlbmd0aDsKKyAgICAgICAgYXV0byBjb252
ZXJzaW9uUmVzdWx0ID0gY29udmVydFVURjE2VG9VVEY4KCZjaGFyYWN0ZXJzLCBjaGFyYWN0ZXJz
RW5kLCAmZGVzdGluYXRpb24sIGRlc3RpbmF0aW9uRW5kLCBzdHJpY3QpOworICAgICAgICBzd2l0
Y2ggKGNvbnZlcnNpb25SZXN1bHQpIHsKKyAgICAgICAgY2FzZSBDb252ZXJzaW9uUmVzdWx0OjpT
dWNjZXNzOgorICAgICAgICAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRShkZXN0aW5hdGlvbiA9PSBk
ZXN0aW5hdGlvbkVuZCwgIklmIGNvbnZlcnRlZExlbmd0aCB3YXMgY2FsY3VsYXRlZCBjb3JyZWN0
bHksIHdlIHNob3VsZCBhbHdheXMgdXNlIGV4YWN0bHkgdGhlIHdob2xlIGRlc3RpbmF0aW9uIGJ1
ZmZlciIpOworICAgICAgICAgICAgcmV0dXJuIFdURk1vdmUocmVzdWx0KTsKKyAgICAgICAgY2Fz
ZSBDb252ZXJzaW9uUmVzdWx0OjpTb3VyY2VFeGhhdXN0ZWQ6CisgICAgICAgICAgICBBU1NFUlQo
IXN0cmljdCk7CisgICAgICAgICAgICBBU1NFUlQoY2hhcmFjdGVycyArIDEgPT0gY2hhcmFjdGVy
c0VuZCk7CisgICAgICAgICAgICBBU1NFUlQoKDB4RDgwMCA8PSAqY2hhcmFjdGVycyAmJiAqY2hh
cmFjdGVycyA8PSAweERGRkYpKTsKKyAgICAgICAgICAgIHB1dFVURjhUcmlwbGUoZGVzdGluYXRp
b24sICpjaGFyYWN0ZXJzKTsKKyAgICAgICAgICAgIEFTU0VSVF9XSVRIX01FU1NBR0UoZGVzdGlu
YXRpb24gPT0gZGVzdGluYXRpb25FbmQsICJJZiBjb252ZXJ0ZWRMZW5ndGggd2FzIGNhbGN1bGF0
ZWQgY29ycmVjdGx5LCB3ZSBzaG91bGQgYWx3YXlzIHVzZSBleGFjdGx5IHRoZSB3aG9sZSBkZXN0
aW5hdGlvbiBidWZmZXIiKTsKKyAgICAgICAgICAgIHJldHVybiBXVEZNb3ZlKHJlc3VsdCk7Cisg
ICAgICAgIGNhc2UgQ29udmVyc2lvblJlc3VsdDo6VGFyZ2V0RXhoYXVzdGVkOgorICAgICAgICBj
YXNlIENvbnZlcnNpb25SZXN1bHQ6OlNvdXJjZUlsbGVnYWw6CisgICAgICAgICAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICB9Ci0KLSAgICAgICAgLy8gQ2hlY2sgZm9y
IGFuIHVuY29udmVydGVkIGhpZ2ggc3Vycm9nYXRlLgotICAgICAgICBpZiAocmVzdWx0ID09IFNv
dXJjZUV4aGF1c3RlZCkgewotICAgICAgICAgICAgaWYgKHN0cmljdCkKLSAgICAgICAgICAgICAg
ICByZXR1cm4gVVRGOENvbnZlcnNpb25FcnJvcjo6U291cmNlRXhoYXVzdGVkOwotICAgICAgICAg
ICAgLy8gVGhpcyBzaG91bGQgYmUgb25lIHVucGFpcmVkIGhpZ2ggc3Vycm9nYXRlLiBUcmVhdCBp
dCB0aGUgc2FtZQotICAgICAgICAgICAgLy8gd2FzIGFzIGFuIHVucGFpcmVkIGhpZ2ggc3Vycm9n
YXRlIHdvdWxkIGhhdmUgYmVlbiBoYW5kbGVkIGluCi0gICAgICAgICAgICAvLyB0aGUgbWlkZGxl
IG9mIGEgc3RyaW5nIHdpdGggbm9uLXN0cmljdCBjb252ZXJzaW9uIC0gd2hpY2ggaXMKLSAgICAg
ICAgICAgIC8vIHRvIHNheSwgc2ltcGx5IGVuY29kZSBpdCB0byBVVEYtOC4KLSAgICAgICAgICAg
IEFTU0VSVF9VTlVTRUQoCi0gICAgICAgICAgICAgICAgb3JpZ2luYWxDaGFyYWN0ZXJzLCAoY2hh
cmFjdGVycyArIDEpID09IChvcmlnaW5hbENoYXJhY3RlcnMgKyBsZW5ndGgpKTsKLSAgICAgICAg
ICAgIEFTU0VSVCgoKmNoYXJhY3RlcnMgPj0gMHhEODAwKSAmJiAoKmNoYXJhY3RlcnMgPD0gMHhE
QkZGKSk7Ci0gICAgICAgICAgICAvLyBUaGVyZSBzaG91bGQgYmUgcm9vbSBsZWZ0LCBzaW5jZSBv
bmUgVUNoYXIgaGFzbid0IGJlZW4gY29udmVydGVkLgotICAgICAgICAgICAgQVNTRVJUKChidWZm
ZXIgKyAzKSA8PSAoYnVmZmVyICsgYnVmZmVyU2l6ZSkpOwotICAgICAgICAgICAgcHV0VVRGOFRy
aXBsZShidWZmZXIsICpjaGFyYWN0ZXJzKTsKICAgICAgICAgfQogICAgIH0KLSAgICAKLSAgICBy
ZXR1cm4gVVRGOENvbnZlcnNpb25FcnJvcjo6Tm9uZTsKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKyAgICByZXR1cm4geyB9OwogfQogCi1FeHBlY3RlZDxDU3RyaW5nLCBVVEY4Q29udmVyc2lv
bkVycm9yPiBTdHJpbmdJbXBsOjp1dGY4Rm9yQ2hhcmFjdGVycyhjb25zdCBMQ2hhciogY2hhcmFj
dGVycywgdW5zaWduZWQgbGVuZ3RoKQorRXhwZWN0ZWQ8Q1N0cmluZywgVVRGOENvbnZlcnNpb25F
cnJvcj4gU3RyaW5nSW1wbDo6dXRmOEZvckNoYXJhY3RlcnMoY29uc3QgTENoYXIqIHNvdXJjZSwg
dW5zaWduZWQgbGVuZ3RoKQogewogICAgIGlmICghbGVuZ3RoKQogICAgICAgICByZXR1cm4gQ1N0
cmluZygiIiwgMCk7Ci0gICAgaWYgKGxlbmd0aCA+IE1heExlbmd0aCAvIDMpCi0gICAgICAgIHJl
dHVybiBtYWtlVW5leHBlY3RlZChVVEY4Q29udmVyc2lvbkVycm9yOjpPdXRPZk1lbW9yeSk7Ci0g
ICAgVmVjdG9yPGNoYXIsIDEwMjQ+IGJ1ZmZlclZlY3RvcihsZW5ndGggKiAzKTsKLSAgICBjaGFy
KiBidWZmZXIgPSBidWZmZXJWZWN0b3IuZGF0YSgpOwotICAgIGNvbnN0IExDaGFyKiBzb3VyY2Ug
PSBjaGFyYWN0ZXJzOwotICAgIGJvb2wgc3VjY2VzcyA9IGNvbnZlcnRMYXRpbjFUb1VURjgoJnNv
dXJjZSwgc291cmNlICsgbGVuZ3RoLCAmYnVmZmVyLCBidWZmZXIgKyBidWZmZXJWZWN0b3Iuc2l6
ZSgpKTsKLSAgICBBU1NFUlRfVU5VU0VEKHN1Y2Nlc3MsIHN1Y2Nlc3MpOyAvLyAobGVuZ3RoICog
Mykgc2hvdWxkIGJlIHN1ZmZpY2llbnQgZm9yIGFueSBjb252ZXJzaW9uCi0gICAgcmV0dXJuIENT
dHJpbmcoYnVmZmVyVmVjdG9yLmRhdGEoKSwgYnVmZmVyIC0gYnVmZmVyVmVjdG9yLmRhdGEoKSk7
Ci19CiAKLUV4cGVjdGVkPENTdHJpbmcsIFVURjhDb252ZXJzaW9uRXJyb3I+IFN0cmluZ0ltcGw6
OnV0ZjhGb3JDaGFyYWN0ZXJzKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5n
dGgsIENvbnZlcnNpb25Nb2RlIG1vZGUpCi17Ci0gICAgaWYgKCFsZW5ndGgpCi0gICAgICAgIHJl
dHVybiBDU3RyaW5nKCIiLCAwKTsKLSAgICBpZiAobGVuZ3RoID4gTWF4TGVuZ3RoIC8gMykKKyAg
ICBhdXRvIGNvbnZlcnRlZExlbmd0aCA9IGxlbmd0aFVURjhGcm9tTGF0aW4xKHNvdXJjZSwgc291
cmNlICsgbGVuZ3RoKTsKKyAgICBpZiAoY29udmVydGVkTGVuZ3RoID4gTWF4TGVuZ3RoKQogICAg
ICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoVVRGOENvbnZlcnNpb25FcnJvcjo6T3V0T2ZNZW1v
cnkpOwotICAgIFZlY3RvcjxjaGFyLCAxMDI0PiBidWZmZXJWZWN0b3IobGVuZ3RoICogMyk7Ci0g
ICAgY2hhciogYnVmZmVyID0gYnVmZmVyVmVjdG9yLmRhdGEoKTsKLSAgICBVVEY4Q29udmVyc2lv
bkVycm9yIGVycm9yID0gdXRmOEltcGwoY2hhcmFjdGVycywgbGVuZ3RoLCBidWZmZXIsIGJ1ZmZl
clZlY3Rvci5zaXplKCksIG1vZGUpOwotICAgIGlmIChlcnJvciAhPSBVVEY4Q29udmVyc2lvbkVy
cm9yOjpOb25lKQotICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3IpOwotICAgIHJl
dHVybiBDU3RyaW5nKGJ1ZmZlclZlY3Rvci5kYXRhKCksIGJ1ZmZlciAtIGJ1ZmZlclZlY3Rvci5k
YXRhKCkpOwotfQotCi1FeHBlY3RlZDxDU3RyaW5nLCBVVEY4Q29udmVyc2lvbkVycm9yPiBTdHJp
bmdJbXBsOjp0cnlHZXRVdGY4Rm9yUmFuZ2UodW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5n
dGgsIENvbnZlcnNpb25Nb2RlIG1vZGUpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKG9mZnNldCA8PSB0
aGlzLT5sZW5ndGgoKSk7Ci0gICAgQVNTRVJUKG9mZnNldCArIGxlbmd0aCA8PSB0aGlzLT5sZW5n
dGgoKSk7CiAgICAgCi0gICAgaWYgKCFsZW5ndGgpCi0gICAgICAgIHJldHVybiBDU3RyaW5nKCIi
LCAwKTsKLQotICAgIC8vIEFsbG9jYXRlIGEgYnVmZmVyIGJpZyBlbm91Z2ggdG8gaG9sZCBhbGwg
dGhlIGNoYXJhY3RlcnMKLSAgICAvLyAoYW4gaW5kaXZpZHVhbCBVVEYtMTYgVUNoYXIgY2FuIG9u
bHkgZXhwYW5kIHRvIDMgVVRGLTggYnl0ZXMpLgotICAgIC8vIE9wdGltaXphdGlvbiBpZGVhcywg
aWYgd2UgZmluZCB0aGlzIGZ1bmN0aW9uIGlzIGhvdDoKLSAgICAvLyAgKiBXZSBjb3VsZCBzcGVj
dWxhdGl2ZWx5IGNyZWF0ZSBhIENTdHJpbmdCdWZmZXIgdG8gY29udGFpbiAnbGVuZ3RoJyAKLSAg
ICAvLyAgICBjaGFyYWN0ZXJzLCBhbmQgcmVzaXplIGlmIG5lY2Vzc2FyeSAoaS5lLiBpZiB0aGUg
YnVmZmVyIGNvbnRhaW5zCi0gICAgLy8gICAgbm9uLWFzY2lpIGNoYXJhY3RlcnMpLiAoQWx0ZXJu
YXRpdmVseSwgc2NhbiB0aGUgYnVmZmVyIGZpcnN0IGZvcgotICAgIC8vICAgIGFzY2lpIGNoYXJh
Y3RlcnMsIHNvIHdlIGtub3cgdGhpcyB3aWxsIGJlIHN1ZmZpY2llbnQpLgotICAgIC8vICAqIFdl
IGNvdWxkIGFsbG9jYXRlIGEgQ1N0cmluZ0J1ZmZlciB3aXRoIGFuIGFwcHJvcHJpYXRlIHNpemUg
dG8KLSAgICAvLyAgICBoYXZlIGEgZ29vZCBjaGFuY2Ugb2YgYmVpbmcgYWJsZSB0byB3cml0ZSB0
aGUgc3RyaW5nIGludG8gdGhlCi0gICAgLy8gICAgYnVmZmVyIHdpdGhvdXQgcmVhbGxvY2luZyAo
c2F5LCAxLjUgeCBsZW5ndGgpLgotICAgIGlmIChsZW5ndGggPiBNYXhMZW5ndGggLyAzKQotICAg
ICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoVVRGOENvbnZlcnNpb25FcnJvcjo6T3V0T2ZNZW1v
cnkpOwotICAgIFZlY3RvcjxjaGFyLCAxMDI0PiBidWZmZXJWZWN0b3IobGVuZ3RoICogMyk7Ci0K
LSAgICBjaGFyKiBidWZmZXIgPSBidWZmZXJWZWN0b3IuZGF0YSgpOwotCi0gICAgaWYgKGlzOEJp
dCgpKSB7Ci0gICAgICAgIGNvbnN0IExDaGFyKiBjaGFyYWN0ZXJzID0gdGhpcy0+Y2hhcmFjdGVy
czgoKSArIG9mZnNldDsKLSAgICAgICAgYXV0byBzdWNjZXNzID0gY29udmVydExhdGluMVRvVVRG
OCgmY2hhcmFjdGVycywgY2hhcmFjdGVycyArIGxlbmd0aCwgJmJ1ZmZlciwgYnVmZmVyICsgYnVm
ZmVyVmVjdG9yLnNpemUoKSk7Ci0gICAgICAgIEFTU0VSVF9VTlVTRUQoc3VjY2Vzcywgc3VjY2Vz
cyk7IC8vIChsZW5ndGggKiAzKSBzaG91bGQgYmUgc3VmZmljaWVudCBmb3IgYW55IGNvbnZlcnNp
b24KLSAgICB9IGVsc2UgewotICAgICAgICBVVEY4Q29udmVyc2lvbkVycm9yIGVycm9yID0gdXRm
OEltcGwodGhpcy0+Y2hhcmFjdGVyczE2KCkgKyBvZmZzZXQsIGxlbmd0aCwgYnVmZmVyLCBidWZm
ZXJWZWN0b3Iuc2l6ZSgpLCBtb2RlKTsKLSAgICAgICAgaWYgKGVycm9yICE9IFVURjhDb252ZXJz
aW9uRXJyb3I6Ok5vbmUpCi0gICAgICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3Ip
OwotICAgIH0KLQotICAgIHJldHVybiBDU3RyaW5nKGJ1ZmZlclZlY3Rvci5kYXRhKCksIGJ1ZmZl
ciAtIGJ1ZmZlclZlY3Rvci5kYXRhKCkpOworICAgIGNoYXIqIGRlc3RpbmF0aW9uOworICAgIGF1
dG8gcmVzdWx0ID0gQ1N0cmluZzo6bmV3VW5pbml0aWFsaXplZChjb252ZXJ0ZWRMZW5ndGgsIGRl
c3RpbmF0aW9uKTsKKyAgICBjaGFyKiBkZXN0aW5hdGlvbkVuZCA9IGRlc3RpbmF0aW9uICsgY29u
dmVydGVkTGVuZ3RoOworICAgIGJvb2wgc3VjY2VzcyA9IGNvbnZlcnRMYXRpbjFUb1VURjgoJnNv
dXJjZSwgc291cmNlICsgbGVuZ3RoLCAmZGVzdGluYXRpb24sIGRlc3RpbmF0aW9uRW5kKTsKKyAg
ICBBU1NFUlRfVU5VU0VEKHN1Y2Nlc3MsIHN1Y2Nlc3MpOworICAgIEFTU0VSVF9XSVRIX01FU1NB
R0UoZGVzdGluYXRpb24gPT0gZGVzdGluYXRpb25FbmQsICJJZiBjb252ZXJ0ZWRMZW5ndGggd2Fz
IGNhbGN1bGF0ZWQgY29ycmVjdGx5LCB3ZSBzaG91bGQgYWx3YXlzIHVzZSBleGFjdGx5IHRoZSB3
aG9sZSBkZXN0aW5hdGlvbiBidWZmZXIiKTsKKyAgICByZXR1cm4gV1RGTW92ZShyZXN1bHQpOwog
fQogCiBFeHBlY3RlZDxDU3RyaW5nLCBVVEY4Q29udmVyc2lvbkVycm9yPiBTdHJpbmdJbXBsOjp0
cnlHZXRVdGY4KENvbnZlcnNpb25Nb2RlIG1vZGUpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIHRyeUdl
dFV0ZjhGb3JSYW5nZSgwLCBsZW5ndGgoKSwgbW9kZSk7CisgICAgaWYgKGlzOEJpdCgpKQorICAg
ICAgICByZXR1cm4gdXRmOEZvckNoYXJhY3RlcnMoY2hhcmFjdGVyczgoKSwgbGVuZ3RoKCkpOwor
ICAgIHJldHVybiB1dGY4Rm9yQ2hhcmFjdGVycyhjaGFyYWN0ZXJzMTYoKSwgbGVuZ3RoKCksIG1v
ZGUpOwogfQogCiBDU3RyaW5nIFN0cmluZ0ltcGw6OnV0ZjgoQ29udmVyc2lvbk1vZGUgbW9kZSkg
Y29uc3QKIHsKLSAgICBhdXRvIGV4cGVjdGVkU3RyaW5nID0gdHJ5R2V0VXRmOEZvclJhbmdlKDAs
IGxlbmd0aCgpLCBtb2RlKTsKKyAgICBhdXRvIGV4cGVjdGVkU3RyaW5nID0gdHJ5R2V0VXRmOCht
b2RlKTsKICAgICBSRUxFQVNFX0FTU0VSVChleHBlY3RlZFN0cmluZyk7CiAgICAgcmV0dXJuIGV4
cGVjdGVkU3RyaW5nLnZhbHVlKCk7CiB9CiAKK3NpemVfdCBTdHJpbmdJbXBsOjp1dGY4TGVuZ3Ro
KENvbnZlcnNpb25Nb2RlIG1vZGUpIGNvbnN0Cit7CisgICAgQVNTRVJUX1dJVEhfTUVTU0FHRSht
b2RlICE9IFN0cmljdENvbnZlcnNpb25SZXBsYWNpbmdVbnBhaXJlZFN1cnJvZ2F0ZXNXaXRoRkZG
RCwgInV0ZjhMZW5ndGggd2l0aCBTdHJpY3RDb252ZXJzaW9uUmVwbGFjaW5nVW5wYWlyZWRTdXJy
b2dhdGVzV2l0aEZGRkQgaXMgdW5zdXBwb3J0ZWQiKTsKKyAgICBpZiAoaXM4Qml0KCkpCisgICAg
ICAgIHJldHVybiBsZW5ndGhVVEY4RnJvbUxhdGluMShjaGFyYWN0ZXJzOCgpLCBjaGFyYWN0ZXJz
OCgpICsgbGVuZ3RoKCkpOworICAgIHJldHVybiBsZW5ndGhVVEY4RnJvbVVURjE2KGNoYXJhY3Rl
cnMxNigpLCBjaGFyYWN0ZXJzMTYoKSArIGxlbmd0aCgpLCBtb2RlID09IFN0cmljdENvbnZlcnNp
b24pOworfQorCiBORVZFUl9JTkxJTkUgdW5zaWduZWQgU3RyaW5nSW1wbDo6aGFzaFNsb3dDYXNl
KCkgY29uc3QKIHsKICAgICBpZiAoaXM4Qml0KCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0
Zi90ZXh0L1N0cmluZ0ltcGwuaCBiL1NvdXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nSW1wbC5oCmlu
ZGV4IGM3NmNkNTIzNjc2MTFjOTQyZDM0MmJmMDkxYjE2MmEwYTY3NzQ0ZTAuLmEzYmM1MDg2NTll
NGMwYzJmNWVkNWMzY2I3ZDYyZWRlMTA3ZWEyOGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3Rm
L3RleHQvU3RyaW5nSW1wbC5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nSW1wbC5o
CkBAIC0zMTQsMTMgKzMxNCwxMSBAQCBwdWJsaWM6CiAgICAgc3RhdGljIFdURl9FWFBPUlRfUFJJ
VkFURSBFeHBlY3RlZDxDU3RyaW5nLCBVVEY4Q29udmVyc2lvbkVycm9yPiB1dGY4Rm9yQ2hhcmFj
dGVycyhjb25zdCBMQ2hhciogY2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3RoKTsKICAgICBzdGF0
aWMgV1RGX0VYUE9SVF9QUklWQVRFIEV4cGVjdGVkPENTdHJpbmcsIFVURjhDb252ZXJzaW9uRXJy
b3I+IHV0ZjhGb3JDaGFyYWN0ZXJzKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBs
ZW5ndGgsIENvbnZlcnNpb25Nb2RlID0gTGVuaWVudENvbnZlcnNpb24pOwogCi0gICAgV1RGX0VY
UE9SVF9QUklWQVRFIEV4cGVjdGVkPENTdHJpbmcsIFVURjhDb252ZXJzaW9uRXJyb3I+IHRyeUdl
dFV0ZjhGb3JSYW5nZSh1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCwgQ29udmVyc2lv
bk1vZGUgPSBMZW5pZW50Q29udmVyc2lvbikgY29uc3Q7CiAgICAgV1RGX0VYUE9SVF9QUklWQVRF
IEV4cGVjdGVkPENTdHJpbmcsIFVURjhDb252ZXJzaW9uRXJyb3I+IHRyeUdldFV0ZjgoQ29udmVy
c2lvbk1vZGUgPSBMZW5pZW50Q29udmVyc2lvbikgY29uc3Q7CiAgICAgV1RGX0VYUE9SVF9QUklW
QVRFIENTdHJpbmcgdXRmOChDb252ZXJzaW9uTW9kZSA9IExlbmllbnRDb252ZXJzaW9uKSBjb25z
dDsKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgc2l6ZV90IHV0ZjhMZW5ndGgoQ29udmVyc2lvbk1v
ZGUgPSBMZW5pZW50Q29udmVyc2lvbikgY29uc3Q7CiAKLXByaXZhdGU6Ci0gICAgc3RhdGljIFdU
Rl9FWFBPUlRfUFJJVkFURSBVVEY4Q29udmVyc2lvbkVycm9yIHV0ZjhJbXBsKGNvbnN0IFVDaGFy
KiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgsIGNoYXIqJiBidWZmZXIsIHNpemVfdCBidWZm
ZXJTaXplLCBDb252ZXJzaW9uTW9kZSk7Ci0gICAgCitwcml2YXRlOiAgICAKICAgICAvLyBUaGUg
aGlnaCBiaXRzIG9mICdoYXNoJyBhcmUgYWx3YXlzIGVtcHR5LCBidXQgd2UgcHJlZmVyIHRvIHN0
b3JlIG91ciBmbGFncwogICAgIC8vIGluIHRoZSBsb3cgYml0cyBiZWNhdXNlIGl0IG1ha2VzIHRo
ZW0gc2xpZ2h0bHkgbW9yZSBlZmZpY2llbnQgdG8gYWNjZXNzLgogICAgIC8vIFNvLCB3ZSBzaGlm
dCBsZWZ0IGFuZCByaWdodCB3aGVuIHNldHRpbmcgYW5kIGdldHRpbmcgb3VyIGhhc2ggY29kZS4K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL3RleHQvVVRGOENvbnZlcnNpb25FcnJvci5oIGIv
U291cmNlL1dURi93dGYvdGV4dC9VVEY4Q29udmVyc2lvbkVycm9yLmgKaW5kZXggOGZiMjhlZWJm
YjA2Y2NhN2M4NGQzYTVkZDMxMTgzNGE1ZWUzN2RjNC4uYjJkODhlN2JhOTM5NTJkZjVmYzhkMTQx
ZDc3MjE0NjdmZmYyYjZkYyAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvdGV4dC9VVEY4Q29u
dmVyc2lvbkVycm9yLmgKKysrIGIvU291cmNlL1dURi93dGYvdGV4dC9VVEY4Q29udmVyc2lvbkVy
cm9yLmgKQEAgLTI3LDggKzI3LDcgQEAKIAogbmFtZXNwYWNlIFdURiB7CiAKLWVudW0gY2xhc3Mg
VVRGOENvbnZlcnNpb25FcnJvciB7Ci0gICAgTm9uZSwKK2VudW0gY2xhc3MgVVRGOENvbnZlcnNp
b25FcnJvciA6IHVpbnQ4X3QgewogICAgIE91dE9mTWVtb3J5LAogICAgIElsbGVnYWxTb3VyY2Us
CiAgICAgU291cmNlRXhoYXVzdGVkCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1dU
RlN0cmluZy5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1dURlN0cmluZy5jcHAKaW5kZXggM2E5
MWE2NzdkNWMwMzhlMDNiN2M1ZWIzMmYzNzMzYmVmYzA4Y2E1NS4uYTVmZTM3NjVlMGJlMTMwZjg3
ODJmNzUwZDQ0MTYzNWY2ZTVlNTk1OCAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvdGV4dC9X
VEZTdHJpbmcuY3BwCisrKyBiL1NvdXJjZS9XVEYvd3RmL3RleHQvV1RGU3RyaW5nLmNwcApAQCAt
Njg5LDEyICs2ODksMTMgQEAgQ1N0cmluZyBTdHJpbmc6OnV0ZjgoQ29udmVyc2lvbk1vZGUgbW9k
ZSkgY29uc3QKIHsKICAgICBFeHBlY3RlZDxDU3RyaW5nLCBVVEY4Q29udmVyc2lvbkVycm9yPiBl
eHBlY3RlZFN0cmluZyA9IHRyeUdldFV0ZjgobW9kZSk7CiAgICAgUkVMRUFTRV9BU1NFUlQoZXhw
ZWN0ZWRTdHJpbmcpOworICAgIEFTU0VSVChtb2RlID09IFN0cmljdENvbnZlcnNpb25SZXBsYWNp
bmdVbnBhaXJlZFN1cnJvZ2F0ZXNXaXRoRkZGRCB8fCBleHBlY3RlZFN0cmluZy0+bGVuZ3RoKCkg
PT0gdXRmOExlbmd0aChtb2RlKSk7CiAgICAgcmV0dXJuIGV4cGVjdGVkU3RyaW5nLnZhbHVlKCk7
CiB9CiAKLUNTdHJpbmcgU3RyaW5nOjp1dGY4KCkgY29uc3QKK3NpemVfdCBTdHJpbmc6OnV0ZjhM
ZW5ndGgoQ29udmVyc2lvbk1vZGUgbW9kZSkgY29uc3QKIHsKLSAgICByZXR1cm4gdXRmOChMZW5p
ZW50Q29udmVyc2lvbik7CisgICAgcmV0dXJuIG1faW1wbCA/IG1faW1wbC0+dXRmOExlbmd0aCht
b2RlKSA6IDA7CiB9CiAKIFN0cmluZyBTdHJpbmc6Om1ha2U4Qml0RnJvbTE2Qml0U291cmNlKGNv
bnN0IFVDaGFyKiBzb3VyY2UsIHNpemVfdCBsZW5ndGgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RG
L3d0Zi90ZXh0L1dURlN0cmluZy5oIGIvU291cmNlL1dURi93dGYvdGV4dC9XVEZTdHJpbmcuaApp
bmRleCA1MTFiOWMxNjRhMWE1OGMxMWQ0Y2ZkNTMyMWUzMmY1MjdiNGM5ZWQ2Li43N2MwZDM3OGYy
MzkzN2I2OTAzMTkzMzk1YWMyMWE2NjMwNjYyZDgyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0
Zi90ZXh0L1dURlN0cmluZy5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL3RleHQvV1RGU3RyaW5nLmgK
QEAgLTEzOCw4ICsxMzgsOCBAQCBwdWJsaWM6CiAgICAgV1RGX0VYUE9SVF9QUklWQVRFIENTdHJp
bmcgYXNjaWkoKSBjb25zdDsKICAgICBXVEZfRVhQT1JUX1BSSVZBVEUgQ1N0cmluZyBsYXRpbjEo
KSBjb25zdDsKIAotICAgIFdURl9FWFBPUlRfUFJJVkFURSBDU3RyaW5nIHV0ZjgoQ29udmVyc2lv
bk1vZGUpIGNvbnN0OwotICAgIFdURl9FWFBPUlRfUFJJVkFURSBDU3RyaW5nIHV0ZjgoKSBjb25z
dDsKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgQ1N0cmluZyB1dGY4KENvbnZlcnNpb25Nb2RlID0g
TGVuaWVudENvbnZlcnNpb24pIGNvbnN0OworICAgIFdURl9FWFBPUlRfUFJJVkFURSBzaXplX3Qg
dXRmOExlbmd0aChDb252ZXJzaW9uTW9kZSA9IExlbmllbnRDb252ZXJzaW9uKSBjb25zdDsKIAog
ICAgIFdURl9FWFBPUlRfUFJJVkFURSBFeHBlY3RlZDxDU3RyaW5nLCBVVEY4Q29udmVyc2lvbkVy
cm9yPiB0cnlHZXRVdGY4KENvbnZlcnNpb25Nb2RlKSBjb25zdDsKICAgICBXVEZfRVhQT1JUX1BS
SVZBVEUgRXhwZWN0ZWQ8Q1N0cmluZywgVVRGOENvbnZlcnNpb25FcnJvcj4gdHJ5R2V0VXRmOCgp
IGNvbnN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvdW5pY29kZS9VVEY4Q29udmVyc2lv
bi5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi91bmljb2RlL1VURjhDb252ZXJzaW9uLmNwcAppbmRleCAw
N2FlODk3MTc1MWI2ZWNmMjcwNzdiNDQ0YjE0OWE2NjEwY2NjYTg3Li4xZDdjMmRhNzM3MmNhZTQx
NTFiYTExZmI4YWVjZjczNzhiMTIyYzI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi91bmlj
b2RlL1VURjhDb252ZXJzaW9uLmNwcAorKysgYi9Tb3VyY2UvV1RGL3d0Zi91bmljb2RlL1VURjhD
b252ZXJzaW9uLmNwcApAQCAtMzQsMTcgKzM0LDI2IEBACiBuYW1lc3BhY2UgV1RGIHsKIG5hbWVz
cGFjZSBVbmljb2RlIHsKIAorc2l6ZV90IGxlbmd0aFVURjhGcm9tTGF0aW4xKGNvbnN0IExDaGFy
KiBzb3VyY2VTdGFydCwgY29uc3QgTENoYXIqIHNvdXJjZUVuZCkKK3sKKyAgICBzaXplX3QgbGVu
Z3RoID0gMDsKKyAgICBmb3IgKGNvbnN0IExDaGFyKiBzb3VyY2UgPSBzb3VyY2VTdGFydDsgc291
cmNlIDwgc291cmNlRW5kOyArK3NvdXJjZSkKKyAgICAgICAgbGVuZ3RoICs9IFU4X0xFTkdUSCgq
c291cmNlKTsKKyAgICByZXR1cm4gbGVuZ3RoOworfQorCiBib29sIGNvbnZlcnRMYXRpbjFUb1VU
RjgoY29uc3QgTENoYXIqKiBzb3VyY2VTdGFydCwgY29uc3QgTENoYXIqIHNvdXJjZUVuZCwgY2hh
cioqIHRhcmdldFN0YXJ0LCBjaGFyKiB0YXJnZXRFbmQpCiB7CiAgICAgY29uc3QgTENoYXIqIHNv
dXJjZTsKICAgICBjaGFyKiB0YXJnZXQgPSAqdGFyZ2V0U3RhcnQ7Ci0gICAgaW50IGkgPSAwOwor
ICAgIGludDMyX3QgaSA9IDA7CiAgICAgZm9yIChzb3VyY2UgPSAqc291cmNlU3RhcnQ7IHNvdXJj
ZSA8IHNvdXJjZUVuZDsgKytzb3VyY2UpIHsKICAgICAgICAgVUJvb2wgc2F3RXJyb3IgPSBmYWxz
ZTsKICAgICAgICAgLy8gV29yayBhcm91bmQgYnVnIGluIGVpdGhlciBXaW5kb3dzIGNvbXBpbGVy
IG9yIG9sZCB2ZXJzaW9uIG9mIElDVSwgd2hlcmUgcGFzc2luZyBhIHVpbnQ4X3QgdG8KICAgICAg
ICAgLy8gVThfQVBQRU5EIHdhcm5zLCBieSBjb252ZXJ0aW5nIGZyb20gdWludDhfdCB0byBhIHdp
ZGVyIHR5cGUuCiAgICAgICAgIFVDaGFyMzIgY2hhcmFjdGVyID0gKnNvdXJjZTsKICAgICAgICAg
VThfQVBQRU5EKHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KHRhcmdldCksIGksIHRhcmdldEVu
ZCAtICp0YXJnZXRTdGFydCwgY2hhcmFjdGVyLCBzYXdFcnJvcik7CisgICAgICAgIEFTU0VSVF9X
SVRIX01FU1NBR0UoIXNhd0Vycm9yLCAiVVRGOCBkZXN0aW5hdGlvbiBidWZmZXIgd2FzIG5vdCBi
aWcgZW5vdWdoIik7CiAgICAgICAgIGlmIChzYXdFcnJvcikKICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICB9CkBAIC01MywzMSArNjIsNTEgQEAgYm9vbCBjb252ZXJ0TGF0aW4xVG9VVEY4
KGNvbnN0IExDaGFyKiogc291cmNlU3RhcnQsIGNvbnN0IExDaGFyKiBzb3VyY2VFbmQsIGNoYXIK
ICAgICByZXR1cm4gdHJ1ZTsKIH0KIAorc2l6ZV90IGxlbmd0aFVURjhGcm9tVVRGMTYoY29uc3Qg
VUNoYXIqIHNvdXJjZSwgY29uc3QgVUNoYXIqIHNvdXJjZUVuZCwgYm9vbCBzdHJpY3QpCit7Cisg
ICAgc2l6ZV90IGxlbmd0aCA9IDA7CisgICAgd2hpbGUgKHNvdXJjZSA8IHNvdXJjZUVuZCkgewor
ICAgICAgICBVQ2hhcjMyIGNoOworICAgICAgICBpbnQgaiA9IDA7CisgICAgICAgIFUxNl9ORVhU
KHNvdXJjZSwgaiwgc291cmNlRW5kIC0gc291cmNlLCBjaCk7CisgICAgICAgIGlmIChVX0lTX1NV
UlJPR0FURShjaCkpIHsKKyAgICAgICAgICAgIGlmIChzdHJpY3QpCisgICAgICAgICAgICAgICAg
cmV0dXJuIDA7CisgICAgICAgICAgICBpZiAoc291cmNlICsgaiA9PSBzb3VyY2VFbmQgJiYgVV9J
U19TVVJST0dBVEVfTEVBRChjaCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGxlbmd0aCArIDM7
CisgICAgICAgICAgICBjaCA9IHJlcGxhY2VtZW50Q2hhcmFjdGVyOworICAgICAgICB9CisgICAg
ICAgIHNvdXJjZSArPSBqOworICAgICAgICBsZW5ndGggKz0gVThfTEVOR1RIKGNoKTsKKyAgICB9
CisgICAgcmV0dXJuIGxlbmd0aDsKK30KKwogQ29udmVyc2lvblJlc3VsdCBjb252ZXJ0VVRGMTZU
b1VURjgoY29uc3QgVUNoYXIqKiBzb3VyY2VTdGFydCwgY29uc3QgVUNoYXIqIHNvdXJjZUVuZCwg
Y2hhcioqIHRhcmdldFN0YXJ0LCBjaGFyKiB0YXJnZXRFbmQsIGJvb2wgc3RyaWN0KQogewotICAg
IENvbnZlcnNpb25SZXN1bHQgcmVzdWx0ID0gQ29udmVyc2lvbk9LOworICAgIGF1dG8gcmVzdWx0
ID0gQ29udmVyc2lvblJlc3VsdDo6U3VjY2VzczsKICAgICBjb25zdCBVQ2hhciogc291cmNlID0g
KnNvdXJjZVN0YXJ0OwogICAgIGNoYXIqIHRhcmdldCA9ICp0YXJnZXRTdGFydDsKICAgICBVQm9v
bCBzYXdFcnJvciA9IGZhbHNlOwotICAgIGludCBpID0gMDsKKyAgICBpbnQzMl90IGkgPSAwOwog
ICAgIHdoaWxlIChzb3VyY2UgPCBzb3VyY2VFbmQpIHsKICAgICAgICAgVUNoYXIzMiBjaDsKICAg
ICAgICAgaW50IGogPSAwOwogICAgICAgICBVMTZfTkVYVChzb3VyY2UsIGosIHNvdXJjZUVuZCAt
IHNvdXJjZSwgY2gpOwogICAgICAgICBpZiAoVV9JU19TVVJST0dBVEUoY2gpKSB7CiAgICAgICAg
ICAgICBpZiAoc291cmNlICsgaiA9PSBzb3VyY2VFbmQgJiYgVV9JU19TVVJST0dBVEVfTEVBRChj
aCkpIHsKLSAgICAgICAgICAgICAgICByZXN1bHQgPSBTb3VyY2VFeGhhdXN0ZWQ7CisgICAgICAg
ICAgICAgICAgcmVzdWx0ID0gQ29udmVyc2lvblJlc3VsdDo6U291cmNlRXhoYXVzdGVkOwogICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKHN0cmlj
dCkgewotICAgICAgICAgICAgICAgIHJlc3VsdCA9IFNvdXJjZUlsbGVnYWw7CisgICAgICAgICAg
ICAgICAgcmVzdWx0ID0gQ29udmVyc2lvblJlc3VsdDo6U291cmNlSWxsZWdhbDsKICAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGNoID0gcmVwbGFjZW1l
bnRDaGFyYWN0ZXI7CiAgICAgICAgIH0KICAgICAgICAgVThfQVBQRU5EKHJlaW50ZXJwcmV0X2Nh
c3Q8dWludDhfdCo+KHRhcmdldCksIGksIHRhcmdldEVuZCAtIHRhcmdldCwgY2gsIHNhd0Vycm9y
KTsKICAgICAgICAgaWYgKHNhd0Vycm9yKSB7Ci0gICAgICAgICAgICByZXN1bHQgPSBUYXJnZXRF
eGhhdXN0ZWQ7CisgICAgICAgICAgICByZXN1bHQgPSBDb252ZXJzaW9uUmVzdWx0OjpUYXJnZXRF
eGhhdXN0ZWQ7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBzb3VyY2Ug
Kz0gajsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL3VuaWNvZGUvVVRGOENvbnZlcnNpb24u
aCBiL1NvdXJjZS9XVEYvd3RmL3VuaWNvZGUvVVRGOENvbnZlcnNpb24uaAppbmRleCA5ZTg1MDZm
OTJjMzJkNWRjMjBmNTM3YmJjN2YxZGRiMTU4NjQzNDZmLi4xZmVmNzk3YmVhMTVjZjQ2NDkwYTcz
MmY1YzQ0MjE5YTY5OTdhZjMyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi91bmljb2RlL1VU
RjhDb252ZXJzaW9uLmgKKysrIGIvU291cmNlL1dURi93dGYvdW5pY29kZS9VVEY4Q29udmVyc2lv
bi5oCkBAIC0zMSw4ICszMSw4IEBACiBuYW1lc3BhY2UgV1RGIHsKIG5hbWVzcGFjZSBVbmljb2Rl
IHsKIAotZW51bSBDb252ZXJzaW9uUmVzdWx0IHsKLSAgICBDb252ZXJzaW9uT0ssIC8vIGNvbnZl
cnNpb24gc3VjY2Vzc2Z1bAorZW51bSBjbGFzcyBDb252ZXJzaW9uUmVzdWx0IDogdWludDhfdCB7
CisgICAgU3VjY2VzcywgLy8gY29udmVyc2lvbiBzdWNjZXNzZnVsCiAgICAgU291cmNlRXhoYXVz
dGVkLCAvLyBwYXJ0aWFsIGNoYXJhY3RlciBpbiBzb3VyY2UsIGJ1dCBoaXQgZW5kCiAgICAgVGFy
Z2V0RXhoYXVzdGVkLCAvLyBpbnN1ZmZpY2llbnQgcm9vbSBpbiB0YXJnZXQgZm9yIGNvbnZlcnNp
b24KICAgICBTb3VyY2VJbGxlZ2FsIC8vIHNvdXJjZSBzZXF1ZW5jZSBpcyBpbGxlZ2FsL21hbGZv
cm1lZApAQCAtNDcsOCArNDcsOSBAQCBlbnVtIENvbnZlcnNpb25SZXN1bHQgewogV1RGX0VYUE9S
VF9QUklWQVRFIGJvb2wgY29udmVydFVURjhUb1VURjE2KGNvbnN0IGNoYXIqIHNvdXJjZVN0YXJ0
LCBjb25zdCBjaGFyKiBzb3VyY2VFbmQsIFVDaGFyKiogdGFyZ2V0U3RhcnQsIFVDaGFyKiB0YXJn
ZXRFbmQsIGJvb2wqIGlzU291cmNlQWxsQVNDSUkgPSBudWxscHRyKTsKIFdURl9FWFBPUlRfUFJJ
VkFURSBib29sIGNvbnZlcnRVVEY4VG9VVEYxNlJlcGxhY2luZ0ludmFsaWRTZXF1ZW5jZXMoY29u
c3QgY2hhciogc291cmNlU3RhcnQsIGNvbnN0IGNoYXIqIHNvdXJjZUVuZCwgVUNoYXIqKiB0YXJn
ZXRTdGFydCwgVUNoYXIqIHRhcmdldEVuZCwgYm9vbCogaXNTb3VyY2VBbGxBU0NJSSA9IG51bGxw
dHIpOwogV1RGX0VYUE9SVF9QUklWQVRFIGJvb2wgY29udmVydExhdGluMVRvVVRGOChjb25zdCBM
Q2hhcioqIHNvdXJjZVN0YXJ0LCBjb25zdCBMQ2hhciogc291cmNlRW5kLCBjaGFyKiogdGFyZ2V0
U3RhcnQsIGNoYXIqIHRhcmdldEVuZCk7CitXVEZfRVhQT1JUX1BSSVZBVEUgc2l6ZV90IGxlbmd0
aFVURjhGcm9tTGF0aW4xKGNvbnN0IExDaGFyKiBzb3VyY2VTdGFydCwgY29uc3QgTENoYXIqIHNv
dXJjZUVuZCk7CiBXVEZfRVhQT1JUX1BSSVZBVEUgQ29udmVyc2lvblJlc3VsdCBjb252ZXJ0VVRG
MTZUb1VURjgoY29uc3QgVUNoYXIqKiBzb3VyY2VTdGFydCwgY29uc3QgVUNoYXIqIHNvdXJjZUVu
ZCwgY2hhcioqIHRhcmdldFN0YXJ0LCBjaGFyKiB0YXJnZXRFbmQsIGJvb2wgc3RyaWN0ID0gdHJ1
ZSk7Ci0KK1dURl9FWFBPUlRfUFJJVkFURSBzaXplX3QgbGVuZ3RoVVRGOEZyb21VVEYxNihjb25z
dCBVQ2hhciogc291cmNlU3RhcnQsIGNvbnN0IFVDaGFyKiBzb3VyY2VFbmQsIGJvb2wgc3RyaWN0
ID0gdHJ1ZSk7CiBXVEZfRVhQT1JUX1BSSVZBVEUgdW5zaWduZWQgY2FsY3VsYXRlU3RyaW5nSGFz
aEFuZExlbmd0aEZyb21VVEY4TWFza2luZ1RvcDhCaXRzKGNvbnN0IGNoYXIqIGRhdGEsIGNvbnN0
IGNoYXIqIGRhdGFFbmQsIHVuc2lnbmVkJiBkYXRhTGVuZ3RoLCB1bnNpZ25lZCYgdXRmMTZMZW5n
dGgpOwogCiAvLyBDYWxsZXJzIG9mIHRoZXNlIGZ1bmN0aW9ucyBtdXN0IGNoZWNrIHRoYXQgdGhl
IGxlbmd0aHMgYXJlIHRoZSBzYW1lOyBhY2NvcmRpbmdseSB3ZSBvbWl0IGFuIGVuZCBhcmd1bWVu
dCBmb3IgVVRGLTE2IGFuZCBMYXRpbi0xLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vU2hhcmVkQnVmZmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NoYXJlZEJ1
ZmZlci5jcHAKaW5kZXggZDhlNjhlMzM3NzgxZmIyOWFkMzljNTViOWFmZDM5MDAzNTM1Mzg1ZC4u
YjIzYTBhNzkyZWRhZDEwODZlZWUxMGM5YzQwM2U3ODkwZGUwMGJkZiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2hhcmVkQnVmZmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9TaGFyZWRCdWZmZXIuY3BwCkBAIC01MjgsNyArNTI4LDcgQEAgUmVmUHRyPFNo
YXJlZEJ1ZmZlcj4gdXRmOEJ1ZmZlcihjb25zdCBTdHJpbmcmIHN0cmluZykKICAgICAgICAgICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIGNvbnN0
IFVDaGFyKiBkID0gc3RyaW5nLmNoYXJhY3RlcnMxNigpOwotICAgICAgICAgICAgaWYgKFdURjo6
VW5pY29kZTo6Y29udmVydFVURjE2VG9VVEY4KCZkLCBkICsgbGVuZ3RoLCAmcCwgcCArIGJ1ZmZl
ci5zaXplKCkpICE9IFdURjo6VW5pY29kZTo6Q29udmVyc2lvbk9LKQorICAgICAgICAgICAgaWYg
KFdURjo6VW5pY29kZTo6Y29udmVydFVURjE2VG9VVEY4KCZkLCBkICsgbGVuZ3RoLCAmcCwgcCAr
IGJ1ZmZlci5zaXplKCkpICE9IFdURjo6VW5pY29kZTo6Q29udmVyc2lvblJlc3VsdDo6U3VjY2Vz
cykKICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgfQogICAgIH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3htbC9wYXJzZXIvWE1MRG9jdW1lbnRQYXJzZXJMaWJ4
bWwyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3htbC9wYXJzZXIvWE1MRG9jdW1lbnRQYXJzZXJMaWJ4
bWwyLmNwcAppbmRleCBhOGMzZTE4ZTQ3YWVjYWQwYTAyMmEwODRjNDlhMjFmNmM3MTRjMzkyLi4w
MTA4ODQxMTU4YjhiODU2YmJjYmU2YzFlOTQwOGZjOTM0NTFjZTVhIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS94bWwvcGFyc2VyL1hNTERvY3VtZW50UGFyc2VyTGlieG1sMi5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUveG1sL3BhcnNlci9YTUxEb2N1bWVudFBhcnNlckxpYnhtbDIuY3BwCkBA
IC0xMTU4LDcgKzExNTgsNyBAQCBzdGF0aWMgc2l6ZV90IGNvbnZlcnRVVEYxNkVudGl0eVRvVVRG
OChjb25zdCBVQ2hhciogdXRmMTZFbnRpdHksIHNpemVfdCBudW1iZXJPZgogewogICAgIGNvbnN0
IGNoYXIqIG9yaWdpbmFsVGFyZ2V0ID0gdGFyZ2V0OwogICAgIGF1dG8gY29udmVyc2lvblJlc3Vs
dCA9IFdURjo6VW5pY29kZTo6Y29udmVydFVURjE2VG9VVEY4KCZ1dGYxNkVudGl0eSwgdXRmMTZF
bnRpdHkgKyBudW1iZXJPZkNvZGVVbml0cywgJnRhcmdldCwgdGFyZ2V0ICsgdGFyZ2V0U2l6ZSk7
Ci0gICAgaWYgKGNvbnZlcnNpb25SZXN1bHQgIT0gV1RGOjpVbmljb2RlOjpDb252ZXJzaW9uT0sp
CisgICAgaWYgKGNvbnZlcnNpb25SZXN1bHQgIT0gV1RGOjpVbmljb2RlOjpDb252ZXJzaW9uUmVz
dWx0OjpTdWNjZXNzKQogICAgICAgICByZXR1cm4gMDsKIAogICAgIC8vIEV2ZW4gdGhvdWdoIHdl
IG11c3QgcGFzcyB0aGUgbGVuZ3RoLCBsaWJ4bWwgZXhwZWN0cyB0aGUgZW50aXR5IHN0cmluZyB0
byBiZSBudWxsIHRlcm1pbmF0ZWQuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9B
UEkvYy9XS1N0cmluZy5jcHAgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9BUEkvYy9XS1N0cmluZy5j
cHAKaW5kZXggNGVkM2I4YWEyZDIzZTUxNWEzMDQ5MDVlYzQwMmYzZTQ4YTRjNGQ2MS4uOWRiYzIw
ZTE4YzNmMWY4YjUzYWM0Yzg3NWRjNzM5ZjQzMTYzOWJjYSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9TaGFyZWQvQVBJL2MvV0tTdHJpbmcuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvU2hhcmVk
L0FQSS9jL1dLU3RyaW5nLmNwcApAQCAtODgsNyArODgsNyBAQCBzaXplX3QgV0tTdHJpbmdHZXRV
VEY4Q1N0cmluZ0ltcGwoV0tTdHJpbmdSZWYgc3RyaW5nUmVmLCBjaGFyKiBidWZmZXIsIHNpemVf
dCBidQogICAgIH0gZWxzZSB7CiAgICAgICAgIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzID0gc3Ry
aW5nVmlldy5jaGFyYWN0ZXJzMTYoKTsKICAgICAgICAgYXV0byByZXN1bHQgPSBXVEY6OlVuaWNv
ZGU6OmNvbnZlcnRVVEYxNlRvVVRGOCgmY2hhcmFjdGVycywgY2hhcmFjdGVycyArIHN0cmluZ1Zp
ZXcubGVuZ3RoKCksICZwLCBwICsgYnVmZmVyU2l6ZSAtIDEsIHN0cmljdCk7Ci0gICAgICAgIGlm
IChyZXN1bHQgIT0gV1RGOjpVbmljb2RlOjpDb252ZXJzaW9uT0sgJiYgcmVzdWx0ICE9IFdURjo6
VW5pY29kZTo6VGFyZ2V0RXhoYXVzdGVkKQorICAgICAgICBpZiAocmVzdWx0ICE9IFdURjo6VW5p
Y29kZTo6Q29udmVyc2lvblJlc3VsdDo6U3VjY2VzcyAmJiByZXN1bHQgIT0gV1RGOjpVbmljb2Rl
OjpDb252ZXJzaW9uUmVzdWx0OjpUYXJnZXRFeGhhdXN0ZWQpCiAgICAgICAgICAgICByZXR1cm4g
MDsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL1N0
cmluZ0ltcGwuY3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvU3RyaW5nSW1wbC5j
cHAKaW5kZXggYWFkZjRmOWNlM2U1MWJmNTZkMTA4YzNiZTRkMDdiZjljM2RlMzZiZC4uYzcyNGQ1
MzQ5NDU0Mzg5MWUxYWU2NThmNmRlNGIyMTBhM2IyMGYxNSAxMDA2NDQKLS0tIGEvVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0cy9XVEYvU3RyaW5nSW1wbC5jcHAKKysrIGIvVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0cy9XVEYvU3RyaW5nSW1wbC5jcHAKQEAgLTI1LDYgKzI1LDcgQEAKIAogI2luY2x1
ZGUgImNvbmZpZy5oIgogCisjaW5jbHVkZSA8bWFjaC9tYWNoX3RpbWUuaD4KICNpbmNsdWRlIDx3
dGYvSGFzaGVyLmg+CiAjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CiAjaW5jbHVkZSA8
d3RmL3RleHQvRXh0ZXJuYWxTdHJpbmdJbXBsLmg+CkBAIC04ODMsNCArODg0LDUwIEBAIFRFU1Qo
V1RGLCBFeHRlcm5hbFN0cmluZ1RvU3ltYm9sKQogICAgIEFTU0VSVF9UUlVFKGZyZWVGdW5jdGlv
bkNhbGxlZCk7CiB9CiAKK1RFU1QoV1RGLCBVVEY4UGVyZikKK3sKKyAgICAvLyBGSVhNRTogVGhp
cyBzaG91bGRuJ3QgYWN0dWFsbHkgYmUgY29tbWl0dGVkLiBJdCBpcyB1c2VkIHRvIG1lYXN1cmUg
dGhlIHBlcmZvcm1hbmNlIGltcGFjdCBvZiB0aGlzIGNoYW5nZS4KKyAgICBzdGQ6OmFycmF5PExD
aGFyLCAxMD4gc2hvcnRBU0NJSUJ1ZmZlciB7ICdhJywgJ2EnLCAnYScsICdhJywgJ2EnLCAnYScs
ICdhJywgJ2EnLCAnYScsICdhJyB9OworICAgIHN0ZDo6YXJyYXk8TENoYXIsIDEwPiBzaG9ydExh
dGluMUJ1ZmZlciB7IDB4RTQsIDB4RTQsIDB4RTQsIDB4RTQsIDB4RTQsIDB4RTQsIDB4RTQsIDB4
RTQsIDB4RTQsIDB4RTQgfTsKKyAgICBzdGQ6OmFycmF5PExDaGFyLCAxMDAwMD4gbG9uZ0FTQ0lJ
QnVmZmVyOworICAgIHN0ZDo6YXJyYXk8TENoYXIsIDEwMDAwPiBsb25nTGF0aW4xQnVmZmVyOwor
ICAgIHN0ZDo6YXJyYXk8VUNoYXIsIDEwMDAwPiBsb25nVVRGMTZCdWZmZXI7CisgICAgc3JhbmQo
MSk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCAxMDAwMDsgaSsrKSB7CisgICAgICAgIGxv
bmdBU0NJSUJ1ZmZlcltpXSA9ICdhJzsKKyAgICAgICAgbG9uZ0xhdGluMUJ1ZmZlcltpXSA9IDB4
RTQ7CisgICAgICAgIGxvbmdVVEYxNkJ1ZmZlcltpXSA9IHJhbmQoKTsKKyAgICB9CisKKyAgICBT
dHJpbmcgc2hvcnRBU0NJSShzaG9ydEFTQ0lJQnVmZmVyLmRhdGEoKSwgc2hvcnRBU0NJSUJ1ZmZl
ci5zaXplKCkpOworICAgIFN0cmluZyBzaG9ydExhdGluMShzaG9ydExhdGluMUJ1ZmZlci5kYXRh
KCksIHNob3J0TGF0aW4xQnVmZmVyLnNpemUoKSk7CisgICAgU3RyaW5nIGxvbmdBU0NJSShsb25n
QVNDSUlCdWZmZXIuZGF0YSgpLCBsb25nQVNDSUlCdWZmZXIuc2l6ZSgpKTsKKyAgICBTdHJpbmcg
bG9uZ0xhdGluMShsb25nTGF0aW4xQnVmZmVyLmRhdGEoKSwgbG9uZ0xhdGluMUJ1ZmZlci5zaXpl
KCkpOworICAgIFN0cmluZyBsb25nVVRGMTYobG9uZ1VURjE2QnVmZmVyLmRhdGEoKSwgbG9uZ1VU
RjE2QnVmZmVyLnNpemUoKSk7CisKKyAgICBhdXRvIGNoZWNrVGltZSA9IFtdIChjb25zdCBjaGFy
KiB0ZXN0LCBhdXRvIGZ1bmN0aW9uLCBzaXplX3QgaXRlcmF0aW9ucyA9IDEwMDApIHsKKyAgICAg
ICAgYXV0byBiZWZvcmUgPSBtYWNoX2Fic29sdXRlX3RpbWUoKTsKKyAgICAgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBpdGVyYXRpb25zOyBpKyspCisgICAgICAgICAgICBmdW5jdGlvbigpOwor
ICAgICAgICBhdXRvIGFmdGVyID0gbWFjaF9hYnNvbHV0ZV90aW1lKCk7CisgICAgICAgIHByaW50
ZigiJXMgdGltZSB0YWtlbiAlbGx1XG4iLCB0ZXN0LCBhZnRlciAtIGJlZm9yZSk7CisgICAgfTsK
KworICAgIGNoZWNrVGltZSgic2hvcnQgYXNjaWkiLCBbJl0geworICAgICAgICBzaG9ydEFTQ0lJ
LnV0ZjgoKTsKKyAgICB9LCAxMDAwMDApOworICAgIGNoZWNrVGltZSgic2hvcnQgbGF0aW4xIiwg
WyZdIHsKKyAgICAgICAgc2hvcnRMYXRpbjEudXRmOCgpOworICAgIH0sIDEwMDAwMCk7CisgICAg
Y2hlY2tUaW1lKCJsb25nIGFzY2lpIiwgWyZdIHsKKyAgICAgICAgbG9uZ0FTQ0lJLnV0ZjgoKTsK
KyAgICB9KTsKKyAgICBjaGVja1RpbWUoImxvbmcgbGF0aW4xIiwgWyZdIHsKKyAgICAgICAgbG9u
Z0xhdGluMS51dGY4KCk7CisgICAgfSk7CisgICAgY2hlY2tUaW1lKCJsb25nIHV0Zi0xNiIsIFsm
XSB7CisgICAgICAgIGxvbmdVVEYxNi51dGY4KCk7CisgICAgfSk7Cit9CisKIH0gLy8gbmFtZXNw
YWNlIFRlc3RXZWJLaXRBUEkK
</data>
<flag name="commit-queue"
          id="470515"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
      

    </bug>

</bugzilla>