<?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>188890</bug_id>
          
          <creation_ts>2018-08-23 10:36:53 -0700</creation_ts>
          <short_desc>Populate &quot;text/uri-list&quot; with multiple URLs when the pasteboard contains multiple URLs</short_desc>
          <delta_ts>2018-09-05 12:25:59 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>HTML Editing</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</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="Wenson Hsieh">wenson_hsieh</reporter>
          <assigned_to name="Wenson Hsieh">wenson_hsieh</assigned_to>
          <cc>aestes</cc>
    
    <cc>bdakin</cc>
    
    <cc>cdumez</cc>
    
    <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>dbates</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>kangil.han</cc>
    
    <cc>ryanhaddad</cc>
    
    <cc>sam</cc>
    
    <cc>thorton</cc>
    
    <cc>tsavell</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>wenson_hsieh</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1453113</commentid>
    <comment_count>0</comment_count>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2018-08-23 10:36:53 -0700</bug_when>
    <thetext>SSIA</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1453114</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2018-08-23 10:37:23 -0700</bug_when>
    <thetext>&lt;rdar://problem/43648605&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1456008</commentid>
    <comment_count>2</comment_count>
      <attachid>348725</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2018-09-01 22:04:49 -0700</bug_when>
    <thetext>Created attachment 348725
First pass</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1456010</commentid>
    <comment_count>3</comment_count>
      <attachid>348725</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2018-09-01 22:20:42 -0700</bug_when>
    <thetext>Comment on attachment 348725
First pass

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

Did not finish reviewing but a couple initial comments

&gt; Source/WebCore/dom/DataTransfer.cpp:153
&gt; +            urlList.append(&amp;newlineCharacter, 1);

StringBuilder has an append function that takes a single character. This can just be:

    uriList.append(&apos;\n&apos;);

or if you think it’s clearer you can include CharacterNames.h as you have done above and do:

    uriList.append(newlineCharacter);

&gt; Source/WebCore/platform/ios/PasteboardIOS.mm:391
&gt; +            if (NSURL *url = [NSURL URLWithString:value])
&gt; +                values.append(url.absoluteString);

We should consider whether we want to use NSURL to do this conversion or WebCore::URL. I am not sure that it’s better to use NSURL. A round trip from string to NSURL and then back to string passing through the -[NSURL URLWithString:] method is almost certainly not exactly what we want. I am not sure that this new way of doing it is exactly the same as the code we had here before.

I’m concerned that the URL code isn’t quite right for URLs with non-ASCII characters in them and other tricky edge cases.

&gt; Source/WebCore/platform/ios/PlatformPasteboardIOS.mm:614
&gt; +    Vector&lt;String&gt; strings;
&gt; +    for (int index = 0; index &lt; count(); ++index) {
&gt; +        String value = readString(index, type);
&gt; +        if (!value.isEmpty())
&gt; +            strings.append(WTFMove(value));
&gt; +    }
&gt; +    return strings;

Using reserveInitialCapacity and uncheckedAppend rather than just append is slightly more efficient for both performance and memory use. The small bit of better memory use could matter if the result of this function is kept around.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1456099</commentid>
    <comment_count>4</comment_count>
      <attachid>348725</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2018-09-02 15:43:22 -0700</bug_when>
    <thetext>Comment on attachment 348725
First pass

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

&gt;&gt; Source/WebCore/dom/DataTransfer.cpp:153
&gt;&gt; +            urlList.append(&amp;newlineCharacter, 1);
&gt; 
&gt; StringBuilder has an append function that takes a single character. This can just be:
&gt; 
&gt;     uriList.append(&apos;\n&apos;);
&gt; 
&gt; or if you think it’s clearer you can include CharacterNames.h as you have done above and do:
&gt; 
&gt;     uriList.append(newlineCharacter);

Done!

&gt;&gt; Source/WebCore/platform/ios/PasteboardIOS.mm:391
&gt;&gt; +                values.append(url.absoluteString);
&gt; 
&gt; We should consider whether we want to use NSURL to do this conversion or WebCore::URL. I am not sure that it’s better to use NSURL. A round trip from string to NSURL and then back to string passing through the -[NSURL URLWithString:] method is almost certainly not exactly what we want. I am not sure that this new way of doing it is exactly the same as the code we had here before.
&gt; 
&gt; I’m concerned that the URL code isn’t quite right for URLs with non-ASCII characters in them and other tricky edge cases.

Good point. IIUC, it seems we just want to use -[NSURL absoluteString] here directly, instead of converting from string to NSURL using -URLWithString: in the process.

In this case, we shouldn&apos;t even need this extra bit of logic here to convert to NSURL and back, as long as PlatformPasteboard hands back absolute URL strings.

&gt;&gt; Source/WebCore/platform/ios/PlatformPasteboardIOS.mm:614
&gt;&gt; +    return strings;
&gt; 
&gt; Using reserveInitialCapacity and uncheckedAppend rather than just append is slightly more efficient for both performance and memory use. The small bit of better memory use could matter if the result of this function is kept around.

Done!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1456112</commentid>
    <comment_count>5</comment_count>
      <attachid>348756</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2018-09-02 21:27:43 -0700</bug_when>
    <thetext>Created attachment 348756
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1456113</commentid>
    <comment_count>6</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2018-09-02 21:46:49 -0700</bug_when>
    <thetext>Is it worth having a test of what gets put on the pasteboard when a page sets multiple URLs on the pasteboard using text/uri-list (e.g. via DataTransfer.setData in a copy event)?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1456185</commentid>
    <comment_count>7</comment_count>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2018-09-03 10:45:59 -0700</bug_when>
    <thetext>(In reply to Sam Weinig from comment #6)
&gt; Is it worth having a test of what gets put on the pasteboard when a page
&gt; sets multiple URLs on the pasteboard using text/uri-list (e.g. via
&gt; DataTransfer.setData in a copy event)?

I think it&apos;s something we want to support, and so it&apos;s certainly something worth testing! However, it&apos;s outside the scope of this patch, which only deals with handling a drop with multiple URLs rather than being able to write multiple URLs on drag.

I&apos;ve filed a bug/ER on this: https://bugs.webkit.org/show_bug.cgi?id=189246</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1456199</commentid>
    <comment_count>8</comment_count>
      <attachid>348783</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2018-09-03 11:25:28 -0700</bug_when>
    <thetext>Created attachment 348783
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1456416</commentid>
    <comment_count>9</comment_count>
      <attachid>348783</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2018-09-04 12:27:15 -0700</bug_when>
    <thetext>Comment on attachment 348783
Patch

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

&gt; Source/WebCore/ChangeLog:74
&gt; +        where the NSURL is constructed from absolute and relative parts using a Plist. While -absoluteString gets us the
&gt; +        full URL string, URL::string() only returns the relative portion.

Surely there&apos;s a way to get the absolute string from a WebCore::URL?

&gt; Source/WebCore/platform/ios/PasteboardIOS.mm:385
&gt; +    bool isPlainTextType = [cocoaType isEqualToString:(NSString *)kUTTypePlainText];

Sometimes you __bridge, sometimes you don&apos;t?

&gt; Source/WebCore/platform/mac/PlatformPasteboardMac.mm:136
&gt; +    if (NSURL *urlFromPasteboard = [NSURL URLWithString:[pasteboard stringForType:legacyURLPasteboardType()]])

If we already have a string, why do we bounce through NSURL?

&gt; Source/WebCore/platform/mac/PlatformPasteboardMac.mm:166
&gt; +    if (typeIdentifier == String(kUTTypeURL)) {

Should this be case-insensitive?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1456459</commentid>
    <comment_count>10</comment_count>
      <attachid>348783</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2018-09-04 14:38:54 -0700</bug_when>
    <thetext>Comment on attachment 348783
Patch

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

&gt;&gt; Source/WebCore/ChangeLog:74
&gt;&gt; +        full URL string, URL::string() only returns the relative portion.
&gt; 
&gt; Surely there&apos;s a way to get the absolute string from a WebCore::URL?

Chatted with Alex about this — in this case where the NSURL is specified with relative/base components, the base is lost when converting to WebCore::URL altogether, so WebCore::URL will no longer know the absolute string.

&gt;&gt; Source/WebCore/platform/ios/PasteboardIOS.mm:385
&gt;&gt; +    bool isPlainTextType = [cocoaType isEqualToString:(NSString *)kUTTypePlainText];
&gt; 
&gt; Sometimes you __bridge, sometimes you don&apos;t?

Oops! This should&apos;ve been bridged, since it&apos;s going from CFStringRef =&gt; NSString. Added the 🌉

&gt;&gt; Source/WebCore/platform/mac/PlatformPasteboardMac.mm:136
&gt;&gt; +    if (NSURL *urlFromPasteboard = [NSURL URLWithString:[pasteboard stringForType:legacyURLPasteboardType()]])
&gt; 
&gt; If we already have a string, why do we bounce through NSURL?

True, we should just be able to return the string. I&apos;ll refactor this helper function a bit to remove this extra NSURL conversion.

&gt;&gt; Source/WebCore/platform/mac/PlatformPasteboardMac.mm:166
&gt;&gt; +    if (typeIdentifier == String(kUTTypeURL)) {
&gt; 
&gt; Should this be case-insensitive?

I think this should be okay as a case-sensitive comparison, since we only use the CoreServices constants provided by the platform when mapping MIME types to UTIs or legacy pasteboard types to UTIs. There shouldn&apos;t be any chance for us to get here with a version of a UTI with some differences in case (e.g. &quot;Public.URL&quot;).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1456478</commentid>
    <comment_count>11</comment_count>
      <attachid>348856</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2018-09-04 15:25:42 -0700</bug_when>
    <thetext>Created attachment 348856
Patch for EWS</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1456526</commentid>
    <comment_count>12</comment_count>
      <attachid>348856</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2018-09-04 16:48:02 -0700</bug_when>
    <thetext>Comment on attachment 348856
Patch for EWS

Clearing flags on attachment: 348856

Committed r235647: &lt;https://trac.webkit.org/changeset/235647&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1456527</commentid>
    <comment_count>13</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2018-09-04 16:48:04 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1456709</commentid>
    <comment_count>14</comment_count>
    <who name="Truitt Savell">tsavell</who>
    <bug_when>2018-09-05 08:11:28 -0700</bug_when>
    <thetext>Looks like https://trac.webkit.org/changeset/235647

Caused this API test TestWebKitAPI.DragAndDropTests.ExposeMultipleURLsInDataTransfer

to fail on all Mac

stdio:
https://build.webkit.org/builders/Apple%20High%20Sierra%20Release%20WK2%20%28Tests%29/builds/6562/steps/run-api-tests/logs/stdio

Failed

    TestWebKitAPI.DragAndDropTests.ExposeMultipleURLsInDataTransfer
        
        /Volumes/Data/slave/highsierra-release/build/Tools/TestWebKitAPI/Tests/WebKitCocoa/DragAndDropTests.mm:71
        Expected equality of these values:
          &quot;text/plain, text/uri-list&quot;
          [webView stringByEvaluatingJavaScript:@&quot;types.textContent&quot;]
            Which is: &quot;text/plain, public.url, CorePasteboardFlavorType 0x75726C20, dyn.ah62d4rv4gu8yc6durvwwaznwmuuha2pxsvw0e55bsmwca7d3sbwu, text/uri-list&quot;
        
        
        /Volumes/Data/slave/highsierra-release/build/Tools/TestWebKitAPI/Tests/WebKitCocoa/DragAndDropTests.mm:74
        Expected equality of these values:
          &quot;https://webkit.org/\nhttps://apple.com/&quot;
          [webView stringByEvaluatingJavaScript:@&quot;urlData.textContent&quot;]
            Which is: &quot;https://webkit.org/&quot;
        With diff:
        @@ -1,2 @@
         https://webkit.org/
        -https://apple.com/</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1456761</commentid>
    <comment_count>15</comment_count>
    <who name="Ryan Haddad">ryanhaddad</who>
    <bug_when>2018-09-05 10:20:28 -0700</bug_when>
    <thetext>(In reply to Truitt Savell from comment #14)
&gt; Looks like https://trac.webkit.org/changeset/235647
&gt; 
&gt; Caused this API test
&gt; TestWebKitAPI.DragAndDropTests.ExposeMultipleURLsInDataTransfer
&gt; 
&gt; to fail on all Mac
The failing test was added with this change.

Wenson, are you able to take a look at this or should we roll out the change?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1456823</commentid>
    <comment_count>16</comment_count>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2018-09-05 12:25:59 -0700</bug_when>
    <thetext>(In reply to Ryan Haddad from comment #15)
&gt; (In reply to Truitt Savell from comment #14)
&gt; &gt; Looks like https://trac.webkit.org/changeset/235647
&gt; &gt; 
&gt; &gt; Caused this API test
&gt; &gt; TestWebKitAPI.DragAndDropTests.ExposeMultipleURLsInDataTransfer
&gt; &gt; 
&gt; &gt; to fail on all Mac
&gt; The failing test was added with this change.
&gt; 
&gt; Wenson, are you able to take a look at this or should we roll out the change?

Sorry for the delay — I&apos;ll take a look momentarily.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>348725</attachid>
            <date>2018-09-01 22:04:49 -0700</date>
            <delta_ts>2018-09-02 14:53:04 -0700</delta_ts>
            <desc>First pass</desc>
            <filename>bug-188890-20180901220448.patch</filename>
            <type>text/plain</type>
            <size>42931</size>
            <attacher name="Wenson Hsieh">wenson_hsieh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjM1NTc5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggN2RlN2UyMzVhNDhiZGEz
NzNmOTNlMTk1NzgyZDdjNzgyOWUxMmRiYi4uYWZmYzE0MWU4ZWE5N2M1MzhjMWRlMDQ0YzdjYWI3
MWNhZDkzYmE4YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEwMyBAQAorMjAxOC0wOS0wMSAgV2Vu
c29uIEhzaWVoICA8d2Vuc29uX2hzaWVoQGFwcGxlLmNvbT4KKworICAgICAgICBQb3B1bGF0ZSAi
dGV4dC91cmktbGlzdCIgd2l0aCBtdWx0aXBsZSBVUkxzIHdoZW4gdGhlIHBhc3RlYm9hcmQgY29u
dGFpbnMgbXVsdGlwbGUgVVJMcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTg4ODkwCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS80MzY0ODYwNT4KKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGRzIHN1cHBv
cnQgZm9yIGV4cG9zaW5nIGEgbmV3bGluZSBzZXBhcmF0ZWQgbGlzdCBvZiBVUkxzIHZpYSBEYXRh
VHJhbnNmZXIncyAidGV4dC91cmktbGlzdCIgdHlwZSB3aGVuIHBhc3RpbmcKKyAgICAgICAgb3Ig
ZHJvcHBpbmcgbXVsdGlwbGUgaXRlbXMgb24gdGhlIHBhc3RlYm9hcmQgdGhhdCBjYW4gYmUgcmVw
cmVzZW50ZWQgYXMgVVJMcy4gQ3VycmVudGx5IG9uIGlPUywgb25seSB0aGUgVVJMIG9mCisgICAg
ICAgIHRoZSBmaXJzdCBpdGVtIChpZiBwcmVzZW50KSBpcyBleHBvc2VkLCBhbmQgb24gbWFjT1Ms
IG9ubHkgdGhlIGZpcnN0IG91dCBvZiBhbGwgdGhlIFVSTHMgaW4gdGhlIHBhc3RlYm9hcmQgaXMK
KyAgICAgICAgZXhwb3NlZC4KKworICAgICAgICBUbyBmaXggdGhpcywgd2UgaW50cm9kdWNlIGBQ
YXN0ZWJvYXJkOjpyZWFkQWxsU3RyaW5nc2AsIHdoaWNoIHJlYWRzIGEgbGlzdCBvZiBwYXN0ZWJv
YXJkIHN0cmluZ3MgY29sbGVjdGVkIGZyb20KKyAgICAgICAgYWxsIGF2YWlsYWJsZSBpdGVtcyBv
biB0aGUgcGxhdGZvcm0gcGFzdGVib2FyZC4gQ3VycmVudGx5LCB0aGlzIGlzIG9ubHkgdXNlZCB0
byBwcm92aWRlIGEgbGlzdCBvZiBVUkwgc3RyaW5ncworICAgICAgICB3aGVuIGZldGNoaW5nIGRh
dGEgZm9yIHRoZSAidGV4dC91cmktbGlzdCIgdHlwZSB3aGVuIGNhbGxpbmcgYERhdGFUcmFuc2Zl
ci5nZXREYXRhKClgIGFuZAorICAgICAgICBgRGF0YVRyYW5zZmVySXRlbS5nZXRBc1N0cmluZygp
YC4KKworICAgICAgICBUZXN0czogIERyYWdBbmREcm9wVGVzdHMuRXhwb3NlTXVsdGlwbGVVUkxz
SW5EYXRhVHJhbnNmZXIKKyAgICAgICAgICAgICAgICBVSVBhc3RlYm9hcmRUZXN0cy5EYXRhVHJh
bnNmZXJVUklMaXN0Q29udGFpbnNNdWx0aXBsZVVSTHMKKyAgICAgICAgICAgICAgICBQYXN0ZU1p
eGVkQ29udGVudC5QYXN0ZU9uZU9yTW9yZVVSTHMKKworICAgICAgICAqIGRvbS9EYXRhVHJhbnNm
ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6cmVhZFVSTHNGcm9tUGFzdGVib2FyZEFzU3RyaW5n
KToKKworICAgICAgICBBZGQgYSBoZWxwZXIgbWV0aG9kIHRoYXQgcmVhZHMgYWxsIFVSTCBzdHJp
bmdzIGZyb20gdGhlIHBhc3RlYm9hcmQgKGZvciB0aGUgTUlNRSB0eXBlICJ0ZXh0L3VyaS1saXN0
Iiwgd2hpY2gKKyAgICAgICAgY29ycmVzcG9uZHMgdG8gTlNVUkxQYm9hcmRUeXBlIGFuZCAicHVi
bGljLnVybCIgb24gbWFjT1MgYW5kIGlPUywgcmVzcGVjdGl2ZWx5KSBhbmQgcmV0dXJucyBhIHNp
bmdsZSBzdHJpbmcKKyAgICAgICAgY29udGFpbmluZyBhbGwgbm9uLWVtcHR5IFVSTHMgam9pbmVk
IGJ5IG5ld2xpbmUgY2hhcmFjdGVycy4gQWxzbyB0YWtlcyBhIGZpbHRlcmluZyBibG9jayB3aGlj
aCBtYXkgYmUgdXNlZCB0bworICAgICAgICByZWplY3QgVVJMcyBmcm9tIGJlaW5nIGluY2x1ZGVk
IGluICJ0ZXh0L3VyaS1saXN0IiBvdXRwdXQuCisKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFUcmFu
c2Zlcjo6Z2V0RGF0YUZvckl0ZW0gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YVRyYW5z
ZmVyOjpyZWFkU3RyaW5nRnJvbVBhc3RlYm9hcmQgY29uc3QpOgorCisgICAgICAgIEluc3RlYWRp
bmcgb2YgcmVhZGluZyBhIHNpbmdsZSBzdHJpbmcgZnJvbSB0aGUgcGFzdGVib2FyZCBmb3IgInRl
eHQvdXJpLWxpc3QiLCBjYWxsIHRoZSBhYm92ZSBoZWxwZXIgZnVuY3Rpb24gdG8KKyAgICAgICAg
cmVhZCBhbGwgVVJMIHN0cmluZ3MgaW4gdGhlIHBhc3RlYm9hcmQuIElmIHRoZXJlIGFyZSBmaWxl
cyBwcmVzZW50IGluIHRoZSBwYXN0ZWJvYXJkLCB3ZSBhbHNvIGZpbHRlciBvdXQgVVJMcworICAg
ICAgICB3aG9zZSBzY2hlbWVzIGFyZSBub3QgaW4gdGhlIHNldCBvZiBzY2hlbWVzIHRoYXQgYXJl
IHNhZmUgdG8gZXhwb3NlIHRvIHRoZSBwYWdlIChpLmUuIGh0dHAocyksIGJsb2IsIGFuZCBkYXRh
KS4KKworICAgICAgICAqIHBsYXRmb3JtL1Bhc3RlYm9hcmQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6UGFzdGVib2FyZDo6cmVhZEFsbFN0cmluZ3MpOgorCisgICAgICAgIEFkZCBhIGRlZmF1bHQg
bm9uLUNvY29hIGltcGxlbWVudGF0aW9uIG9mIHJlYWRBbGxTdHJpbmdzKCkgdGhhdCByZXR1cm5z
IGEgdmVjdG9yLCB3aGljaCBtYXkgY29udGFpbiB0aGUgcmVzdWx0CisgICAgICAgIG9mIHJlYWRT
dHJpbmcoKS4KKworICAgICAgICAqIHBsYXRmb3JtL1Bhc3RlYm9hcmQuaDoKKyAgICAgICAgKiBw
bGF0Zm9ybS9QYXN0ZWJvYXJkU3RyYXRlZ3kuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9QbGF0Zm9y
bVBhc3RlYm9hcmQuaDoKKworICAgICAgICBBZGQgcGx1bWJpbmcgdG8gZ3JhYiBhIGxpc3Qgb2Yg
c3RyaW5ncyBmcm9tIHRoZSBwYXN0ZWJvYXJkIGZvciBhIGdpdmVuIHR5cGUuCisKKyAgICAgICAg
KiBwbGF0Zm9ybS9jb2NvYS9QYXN0ZWJvYXJkQ29jb2EubW06CisgICAgICAgIChXZWJDb3JlOjpQ
YXN0ZWJvYXJkOjpyZWFkQWxsU3RyaW5ncyk6CisgICAgICAgIChXZWJDb3JlOjpQYXN0ZWJvYXJk
OjpyZWFkU3RyaW5nKToKKworICAgICAgICBJbXBsZW1lbnQgdGhlc2UgdHdvIG1ldGhvZHMgaW4g
dGVybXMgb2YgYHJlYWRQbGF0Zm9ybVZhbHVlc0FzU3RyaW5nc2AuIGByZWFkQWxsU3RyaW5nc2Ag
cmV0dXJucyB0aGUgZnVsbCBsaXN0IG9mCisgICAgICAgIHJlc3VsdHMsIHdoaWxlIGByZWFkU3Ry
aW5nYCBvbmx5IHJldHVybnMgdGhlIGZpcnN0IHJlc3VsdC4KKworICAgICAgICAqIHBsYXRmb3Jt
L2lvcy9QYXN0ZWJvYXJkSU9TLm1tOgorICAgICAgICAoV2ViQ29yZTo6UGFzdGVib2FyZDo6cmVh
ZFBsYXRmb3JtVmFsdWVzQXNTdHJpbmdzKToKKyAgICAgICAgKFdlYkNvcmU6OlBhc3RlYm9hcmQ6
OnJlYWRQbGF0Zm9ybVZhbHVlQXNTdHJpbmcpOiBEZWxldGVkLgorCisgICAgICAgIFJlZmFjdG9y
IHRoaXMgQ29jb2EgaGVscGVyIGZ1bmN0aW9uIHRvIHJldHVybiBhIGxpc3Qgb2YgcGFzdGVib2Fy
ZCBzdHJpbmcgdmFsdWVzIGZvciB0aGUgZ2l2ZW4gdHlwZSwgcmF0aGVyIHRoYW4KKyAgICAgICAg
YSBzaW5nbGUgc3RyaW5nLgorCisgICAgICAgICogcGxhdGZvcm0vaW9zL1BsYXRmb3JtUGFzdGVi
b2FyZElPUy5tbToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtUGFzdGVib2FyZDo6YWxsU3Ry
aW5nc0ZvclR5cGUgY29uc3QpOgorCisgICAgICAgIEdyYWIgYSBzdHJpbmcgZm9yIGVhY2ggaXRl
bSAocmVwcmVzZW50ZWQgYnkgYW4gTlNJdGVtUHJvdmlkZXIpIGluIHRoZSBwYXN0ZWJvYXJkIHRo
YXQgaGFzIGRhdGEgZm9yIHRoZSBnaXZlbgorICAgICAgICB0eXBlIGlkZW50aWZpZXIuCisKKyAg
ICAgICAgKiBwbGF0Zm9ybS9tYWMvUGFzdGVib2FyZE1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6
OlBhc3RlYm9hcmQ6OnJlYWRQbGF0Zm9ybVZhbHVlc0FzU3RyaW5ncyk6CisgICAgICAgIChXZWJD
b3JlOjpQYXN0ZWJvYXJkOjpyZWFkUGxhdGZvcm1WYWx1ZUFzU3RyaW5nKTogRGVsZXRlZC4KKwor
ICAgICAgICBBbHNvIHJlZmFjdG9yIHRoaXMgdG8gcmV0cmlldmUgYSBsaXN0IG9mIHBhc3RlYm9h
cmQgc3RyaW5ncywgcmF0aGVyIHRoYW4gYSBzaW5nbGUgcmVzdWx0LgorCisgICAgICAgICogcGxh
dGZvcm0vbWFjL1BsYXRmb3JtUGFzdGVib2FyZE1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6OnR5
cGVJZGVudGlmaWVyRm9yUGFzdGVib2FyZFR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZv
cm1QYXN0ZWJvYXJkOjphbGxTdHJpbmdzRm9yVHlwZSBjb25zdCk6CisKKyAgICAgICAgQWRkIGFu
IGltcGxlbWVudGF0aW9uIGZvciBgYWxsU3RyaW5nc0ZvclR5cGVgIG9uIG1hY09TLiBVbmxpa2Ug
aU9TLCBpdCdzIG11Y2ggdHJpY2tpZXIgdG8gZ2V0IHRoaXMgcmlnaHQgc2luY2UKKyAgICAgICAg
d2UgbmVlZCB0byBtYWludGFpbiBjb21wYXRpYmlsaXR5IHdpdGggbGVnYWN5ICJOUypQYm9hcmQi
IHR5cGVzLCBhbmQgYE5TUGFzdGVib2FyZEl0ZW1gIGNhbiBvbmx5IHByb3ZpZGUgZGF0YQorICAg
ICAgICBmb3IgYE5TUGFzdGVib2FyZFR5cGVgcyAoaS5lLiBVVElzKSwgc28gdGhlcmUncyBubyB3
YXkgdG8ganVzdCBpdGVyYXRlIHRocm91Z2ggZWFjaCBwYXN0ZWJvYXJkIGl0ZW0gYW5kIGFzayBp
dAorICAgICAgICBmb3IgZGF0YSB0aGF0IG1hdGNoZXMgdGhlIGdpdmVuIHR5cGUsIGlmIHRoZSB0
eXBlcyBhcmUgbm90IFVUSXMuIEhvd2V2ZXIsIGluIHRoZSBjYXNlIHdoZXJlIHdlIGhhdmUgbXVs
dGlwbGUKKyAgICAgICAgaXRlbXMsIHRoZSBjbGllbnQgbXVzdCBoYXZlIHVzZWQgTlNQYXN0ZWJv
YXJkV3JpdGluZy1jb25mb3JtYW50IG9iamVjdHMgYW5kL29yIE5TUGFzdGVib2FyZEl0ZW0gaXRz
ZWxmIHRvIHdyaXRlCisgICAgICAgIGRhdGEgdG8gdGhlIHBhc3RlYm9hcmQuIFNpbmNlIE5TUGFz
dGVib2FyZFdyaXRpbmctY29uZm9ybWFudCBvYmplY3RzIHJlZ2lzdGVyIG1vZGVybiBwYXN0ZWJv
YXJkIHR5cGVzIHdoZW4KKyAgICAgICAgd3JpdGluZyB0byB0aGUgcGFzdGVib2FyZCwgd2UgY2Fu
IHNpbXBseSBpdGVyYXRlIG92ZXIgdGhlc2UgcGFzdGVib2FyZCBpdGVtcyBhbmQgYXNrIGZvciBz
dHJpbmcgdmFsdWVzIHVzaW5nCisgICAgICAgIHR5cGUgaWRlbnRpZmllcnMgaW5zdGVhZCBvZiBo
YXZpbmcgdG8gd29ycnkgYWJvdXQgbGVnYWN5IHBhc3RlYm9hcmQgdHlwZXMuIEZ1cnRoZXJtb3Jl
LCBpbiB0aGUgY2FzZSB3aGVyZSB0aGVyZQorICAgICAgICBpcyBvbmx5IGEgc2luZ2xlIGl0ZW0g
aW4gdGhlIHBhc3RlYm9hcmQgYW5kIHdlIGRvIG5lZWQgdG8gaGFuZGxlIGxlZ2FjeSBwYXN0ZWJv
YXJkIHR5cGVzLCB1c2luZyBgLVtOU1Bhc3RlYm9hcmQKKyAgICAgICAgc3RyaW5nRm9yVHlwZTpd
YCBpbiB0aGUgc2FtZSB3YXkgd2UgZG8gY3VycmVudGx5IHNob3VsZCB5aWVsZCB0aGUgY29ycmVj
dCByZXN1bHQuCisKKyAgICAgICAgQXMgc3VjaCwgaW4gdGhlIGNhc2Ugd2hlcmUgdGhlcmUgaXMg
YSBzaW5nbGUgcGFzdGVib2FyZCBpdGVtLCB3ZSB1c2UgYC1bTlNQYXN0ZWJvYXJkIHN0cmluZ0Zv
clR5cGU6XWAgd2l0aCB0aGUKKyAgICAgICAgb3JpZ2luYWwgbGVnYWN5IHR5cGUsIGFuZCBpbiB0
aGUgY2FzZSB3aGVyZSB0aGVyZSBhcmUgbXVsdGlwbGUgaXRlbXMgb24gdGhlIHBhc3RlYm9hcmQs
IHdlIGl0ZXJhdGUgb3ZlciBlYWNoIG9mCisgICAgICAgIHRoZSBwYXN0ZWJvYXJkIGl0ZW1zIGFu
ZCBjYWxsIGAtW05TUGFzdGVib2FyZEl0ZW0gc3RyaW5nRm9yVHlwZTpdYCB3aXRoIHRoZSBtb2Rl
cm4gcGFzdGVib2FyZCB0eXBlIGNvcnJlc3BvbmRpbmcKKyAgICAgICAgdG8gdGhlIGdpdmVuIGxl
Z2FjeSBwYXN0ZWJvYXJkIHR5cGUuCisKKyAgICAgICAgVGhlIGRpZmZlcmVudCBjb3JuZXIgY2Fz
ZXMgaW4gdGhpcyBsb2dpYyBhcmUgdGVzdGVkIGJ5IHRoZSBuZXcgQVBJIHRlc3QsIFBhc3RlTWl4
ZWRDb250ZW50LlBhc3RlT25lT3JNb3JlVVJMcywKKyAgICAgICAgd2hpY2ggZXhlcmNpc2VzIHNl
dmVyYWwgZGlmZmVyZW50IHdheXMgb2Ygd3JpdGluZyBvbmUgb3IgbW9yZSBVUkxzIHRvIHRoZSBw
YXN0ZWJvYXJkIG9uIG1hY09TLCB3aGljaCBlYWNoIHJlc3VsdAorICAgICAgICBpbiBkaWZmZXJl
bnQgbGVnYWN5IGFuZCBtb2Rlcm4gcGFzdGVib2FyZCB0eXBlcyBiZWluZyB3cml0dGVuIHRvIHRo
ZSBwYXN0ZWJvYXJkOyBvdXIgaW1wbGVtZW50YXRpb24gb2YKKyAgICAgICAgYFBsYXRmb3JtUGFz
dGVib2FyZDo6YWxsU3RyaW5nc0ZvclR5cGVgIG9uIG1hY09TIGhhbmRsZXMgYWxsIGNhc2VzIGNv
cnJlY3RseS4KKwogMjAxOC0wOC0zMSAgWW91ZW5uIEZhYmxldCAgPHlvdWVubkBhcHBsZS5jb20+
CiAKICAgICAgICAgTW92ZSBzdGF0cyBnYXRoZXJpbmcgb3V0IG9mIExpYldlYlJUQ01lZGlhRW5k
cG9pbnQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktp
dC9DaGFuZ2VMb2cKaW5kZXggZmMwM2E1NjUxYzI2MGNhY2YwMDA5M2E5OWM1YTJhYzhmMGM3NTM0
My4uZGRhOWM0YjljYTZhNmZhZTA4NjlhMzg4MDIxYTVlNGM3NDZkNDdhMCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKQEAg
LTEsMyArMSwyMiBAQAorMjAxOC0wOS0wMSAgV2Vuc29uIEhzaWVoICA8d2Vuc29uX2hzaWVoQGFw
cGxlLmNvbT4KKworICAgICAgICBQb3B1bGF0ZSAidGV4dC91cmktbGlzdCIgd2l0aCBtdWx0aXBs
ZSBVUkxzIHdoZW4gdGhlIHBhc3RlYm9hcmQgY29udGFpbnMgbXVsdGlwbGUgVVJMcworICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTg4ODkwCisgICAgICAg
IDxyZGFyOi8vcHJvYmxlbS80MzY0ODYwNT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBBZGQgc29tZSBwbHVtYmluZyB0aHJvdWdoIHBhc3RlYm9hcmQg
Y2xhc3NlcyB0byBzdXBwb3J0IGBQYXN0ZWJvYXJkOjpyZWFkQWxsU3RyaW5nc2AuIFNlZSBXZWJD
b3JlIENoYW5nZUxvZyBmb3IKKyAgICAgICAgbW9yZSBkZXRhaWwuCisKKyAgICAgICAgKiBVSVBy
b2Nlc3MvQ29jb2EvV2ViUGFzdGVib2FyZFByb3h5Q29jb2EubW06CisgICAgICAgIChXZWJLaXQ6
OldlYlBhc3RlYm9hcmRQcm94eTo6Z2V0UGFzdGVib2FyZFN0cmluZ3NGb3JUeXBlKToKKyAgICAg
ICAgKiBVSVByb2Nlc3MvV2ViUGFzdGVib2FyZFByb3h5Lmg6CisgICAgICAgICogVUlQcm9jZXNz
L1dlYlBhc3RlYm9hcmRQcm94eS5tZXNzYWdlcy5pbjoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dl
YkNvcmVTdXBwb3J0L1dlYlBsYXRmb3JtU3RyYXRlZ2llcy5jcHA6CisgICAgICAgIChXZWJLaXQ6
OldlYlBsYXRmb3JtU3RyYXRlZ2llczo6YWxsU3RyaW5nc0ZvclR5cGUpOgorICAgICAgICAqIFdl
YlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViUGxhdGZvcm1TdHJhdGVnaWVzLmg6CisKIDIwMTgt
MDgtMzEgIEpvaG4gV2lsYW5kZXIgIDx3aWxhbmRlckBhcHBsZS5jb20+CiAKICAgICAgICAgU3Rv
cmFnZSBBY2Nlc3MgQVBJOiBNYWludGFpbiBhY2Nlc3MgdGhyb3VnaCBzYW1lLXNpdGUgbmF2aWdh
dGlvbnMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZyBiL1Nv
dXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZwppbmRleCA5YjFkNTc5MDc2OGVhYTBhYWQ3
MTg2MWNkNjVmNzdkNGU0ODJhMjg1Li42ZDQzZTYwMmM4ZGFiM2FiZTI0MjNiNDM1NzczNmQ1YTQw
YWNmMWNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cKKysr
IGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTggQEAKKzIw
MTgtMDktMDEgIFdlbnNvbiBIc2llaCAgPHdlbnNvbl9oc2llaEBhcHBsZS5jb20+CisKKyAgICAg
ICAgUG9wdWxhdGUgInRleHQvdXJpLWxpc3QiIHdpdGggbXVsdGlwbGUgVVJMcyB3aGVuIHRoZSBw
YXN0ZWJvYXJkIGNvbnRhaW5zIG11bHRpcGxlIFVSTHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4ODg5MAorICAgICAgICA8cmRhcjovL3Byb2JsZW0v
NDM2NDg2MDU+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgQWRkIHNvbWUgcGx1bWJpbmcgdGhyb3VnaCBwYXN0ZWJvYXJkIGNsYXNzZXMgdG8gc3VwcG9y
dCBgUGFzdGVib2FyZDo6cmVhZEFsbFN0cmluZ3NgLiBTZWUgV2ViQ29yZSBDaGFuZ2VMb2cgZm9y
CisgICAgICAgIG1vcmUgZGV0YWlsLgorCisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvV2ViUGxh
dGZvcm1TdHJhdGVnaWVzLmg6CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvV2ViUGxhdGZvcm1T
dHJhdGVnaWVzLm1tOgorICAgICAgICAoV2ViUGxhdGZvcm1TdHJhdGVnaWVzOjphbGxTdHJpbmdz
Rm9yVHlwZSk6CisKIDIwMTgtMDgtMzEgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4K
IAogICAgICAgICBBc3NlcnRpb24gaGl0IGluIH5Db21wbGV0aW9uSGFuZGxlcigpIGZyb20gfldl
YkZyYW1lKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9EYXRhVHJhbnNmZXIuY3Bw
IGIvU291cmNlL1dlYkNvcmUvZG9tL0RhdGFUcmFuc2Zlci5jcHAKaW5kZXggNTE0MWY0NzJmZTli
NDkxNWU4YmE0NjdmMzc1YTgzMjI2MDVmNzg3ZC4uNWU5NmQ1ZDUzZWRlMjI1MWMwNzg3NmFkYmMw
MDRhZDYzNGU5Mjg5MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0RhdGFUcmFuc2Zl
ci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0RhdGFUcmFuc2Zlci5jcHAKQEAgLTQ3LDYg
KzQ3LDcgQEAKICNpbmNsdWRlICJXZWJDb250ZW50UmVhZGVyLmgiCiAjaW5jbHVkZSAiV2ViQ29y
ZVBhc3RlYm9hcmRGaWxlUmVhZGVyLmgiCiAjaW5jbHVkZSAibWFya3VwLmgiCisjaW5jbHVkZSA8
d3RmL3VuaWNvZGUvQ2hhcmFjdGVyTmFtZXMuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBA
IC0xNDIsNiArMTQzLDE5IEBAIHZvaWQgRGF0YVRyYW5zZmVyOjpjbGVhckRhdGEoY29uc3QgU3Ry
aW5nJiB0eXBlKQogICAgICAgICBtX2l0ZW1MaXN0LT5kaWRDbGVhclN0cmluZ0RhdGEobm9ybWFs
aXplZFR5cGUpOwogfQogCitzdGF0aWMgU3RyaW5nIHJlYWRVUkxzRnJvbVBhc3RlYm9hcmRBc1N0
cmluZyhQYXN0ZWJvYXJkJiBwYXN0ZWJvYXJkLCBGdW5jdGlvbjxib29sKGNvbnN0IFN0cmluZyYp
PiYmIHNob3VsZEluY2x1ZGVVUkwpCit7CisgICAgU3RyaW5nQnVpbGRlciB1cmxMaXN0OworICAg
IGZvciAoYXV0byB1cmxTdHJpbmcgOiBwYXN0ZWJvYXJkLnJlYWRBbGxTdHJpbmdzKCJ0ZXh0L3Vy
aS1saXN0Il9zKSkgeworICAgICAgICBpZiAoIXNob3VsZEluY2x1ZGVVUkwodXJsU3RyaW5nKSkK
KyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBpZiAoIXVybExpc3QuaXNFbXB0eSgpKQor
ICAgICAgICAgICAgdXJsTGlzdC5hcHBlbmQoJm5ld2xpbmVDaGFyYWN0ZXIsIDEpOworICAgICAg
ICB1cmxMaXN0LmFwcGVuZCh1cmxTdHJpbmcpOworICAgIH0KKyAgICByZXR1cm4gdXJsTGlzdC50
b1N0cmluZygpOworfQorCiBTdHJpbmcgRGF0YVRyYW5zZmVyOjpnZXREYXRhRm9ySXRlbShEb2N1
bWVudCYgZG9jdW1lbnQsIGNvbnN0IFN0cmluZyYgdHlwZSkgY29uc3QKIHsKICAgICBpZiAoIWNh
blJlYWREYXRhKCkpCkBAIC0xNTAsOSArMTY0LDkgQEAgU3RyaW5nIERhdGFUcmFuc2Zlcjo6Z2V0
RGF0YUZvckl0ZW0oRG9jdW1lbnQmIGRvY3VtZW50LCBjb25zdCBTdHJpbmcmIHR5cGUpIGNvbnMK
ICAgICBhdXRvIGxvd2VyY2FzZVR5cGUgPSBzdHJpcExlYWRpbmdBbmRUcmFpbGluZ0hUTUxTcGFj
ZXModHlwZSkuY29udmVydFRvQVNDSUlMb3dlcmNhc2UoKTsKICAgICBpZiAoc2hvdWxkU3VwcHJl
c3NHZXRBbmRTZXREYXRhVG9Bdm9pZEV4cG9zaW5nRmlsZVBhdGhzKCkpIHsKICAgICAgICAgaWYg
KGxvd2VyY2FzZVR5cGUgPT0gInRleHQvdXJpLWxpc3QiKSB7Ci0gICAgICAgICAgICBhdXRvIHVy
bFN0cmluZyA9IG1fcGFzdGVib2FyZC0+cmVhZFN0cmluZyhsb3dlcmNhc2VUeXBlKTsKLSAgICAg
ICAgICAgIGlmIChQYXN0ZWJvYXJkOjpjYW5FeHBvc2VVUkxUb0RPTVdoZW5QYXN0ZWJvYXJkQ29u
dGFpbnNGaWxlcyh1cmxTdHJpbmcpKQotICAgICAgICAgICAgICAgIHJldHVybiB1cmxTdHJpbmc7
CisgICAgICAgICAgICByZXR1cm4gcmVhZFVSTHNGcm9tUGFzdGVib2FyZEFzU3RyaW5nKCptX3Bh
c3RlYm9hcmQsIFtdIChhdXRvJiB1cmxTdHJpbmcpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4g
UGFzdGVib2FyZDo6Y2FuRXhwb3NlVVJMVG9ET01XaGVuUGFzdGVib2FyZENvbnRhaW5zRmlsZXMo
dXJsU3RyaW5nKTsKKyAgICAgICAgICAgIH0pOwogICAgICAgICB9CiAKICAgICAgICAgaWYgKGxv
d2VyY2FzZVR5cGUgPT0gInRleHQvaHRtbCIgJiYgUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hh
cmVkRmVhdHVyZXMoKS5jdXN0b21QYXN0ZWJvYXJkRGF0YUVuYWJsZWQoKSkgewpAQCAtMTkyLDYg
KzIwNiwxMiBAQCBTdHJpbmcgRGF0YVRyYW5zZmVyOjpyZWFkU3RyaW5nRnJvbVBhc3RlYm9hcmQo
RG9jdW1lbnQmIGRvY3VtZW50LCBjb25zdCBTdHJpbmcmCiAgICAgICAgIHJldHVybiByZWFkZXIu
bWFya3VwOwogICAgIH0KIAorICAgIGlmICghaXM8U3RhdGljUGFzdGVib2FyZD4oKm1fcGFzdGVi
b2FyZCkgJiYgbG93ZXJjYXNlVHlwZSA9PSAidGV4dC91cmktbGlzdCIpIHsKKyAgICAgICAgcmV0
dXJuIHJlYWRVUkxzRnJvbVBhc3RlYm9hcmRBc1N0cmluZygqbV9wYXN0ZWJvYXJkLCBbXSAoYXV0
byYpIHsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9KTsKKyAgICB9CisKICAg
ICByZXR1cm4gbV9wYXN0ZWJvYXJkLT5yZWFkU3RyaW5nKGxvd2VyY2FzZVR5cGUpOwogfQogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QYXN0ZWJvYXJkLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL1Bhc3RlYm9hcmQuY3BwCmluZGV4IDE4ZmRlYjJkOWU4NWQ3ZTkx
NjIxYTQ1NWRmM2U3ZjljNWE5NDBkMjguLjczN2EzOTA0MjU3ZGU2NDNiYzBkOWFiOTliYzI2NGEz
MTRmZDZmZjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Bhc3RlYm9hcmQu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Bhc3RlYm9hcmQuY3BwCkBAIC04NSw0
ICs4NSwxNyBAQCBQYXN0ZWJvYXJkQ3VzdG9tRGF0YSBQYXN0ZWJvYXJkQ3VzdG9tRGF0YTo6ZnJv
bVNoYXJlZEJ1ZmZlcihjb25zdCBTaGFyZWRCdWZmZXImCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0K
IAorI2lmICFQTEFURk9STShDT0NPQSkKKworVmVjdG9yPFN0cmluZz4gUGFzdGVib2FyZDo6cmVh
ZEFsbFN0cmluZ3MoY29uc3QgU3RyaW5nJiB0eXBlKQoreworICAgIGF1dG8gcmVzdWx0ID0gcmVh
ZFN0cmluZyh0eXBlKTsKKyAgICBpZiAocmVzdWx0LmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJu
IHsgfTsKKworICAgIHJldHVybiB7IHJlc3VsdCB9OworfQorCisjZW5kaWYKKwogfTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Bhc3RlYm9hcmQuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL1Bhc3RlYm9hcmQuaAppbmRleCBlMDk4MTU2NTFiZDJkNjA1NzRkYTQyMzZj
MzgwZmFkNGQ2MDIxNWE5Li4yMDYzNWFiMDI5NGYyOTk3ZTI4ZmJmZmQ1MDk4Njk0OGE5OWI2MDMw
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QYXN0ZWJvYXJkLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUGFzdGVib2FyZC5oCkBAIC0yMDQsNiArMjA0LDcgQEAg
cHVibGljOgogICAgIHZpcnR1YWwgV0VCQ09SRV9FWFBPUlQgU3RyaW5nIHJlYWRPcmlnaW4oKTsK
ICAgICB2aXJ0dWFsIFdFQkNPUkVfRVhQT1JUIFN0cmluZyByZWFkU3RyaW5nKGNvbnN0IFN0cmlu
ZyYgdHlwZSk7CiAgICAgdmlydHVhbCBXRUJDT1JFX0VYUE9SVCBTdHJpbmcgcmVhZFN0cmluZ0lu
Q3VzdG9tRGF0YShjb25zdCBTdHJpbmcmIHR5cGUpOworICAgIHZpcnR1YWwgV0VCQ09SRV9FWFBP
UlQgVmVjdG9yPFN0cmluZz4gcmVhZEFsbFN0cmluZ3MoY29uc3QgU3RyaW5nJiB0eXBlKTsKIAog
ICAgIHZpcnR1YWwgV0VCQ09SRV9FWFBPUlQgdm9pZCB3cml0ZVN0cmluZyhjb25zdCBTdHJpbmcm
IHR5cGUsIGNvbnN0IFN0cmluZyYgZGF0YSk7CiAgICAgdmlydHVhbCBXRUJDT1JFX0VYUE9SVCB2
b2lkIGNsZWFyKCk7CkBAIC0yOTgsNyArMjk5LDcgQEAgcHJpdmF0ZToKIAogI2lmIFBMQVRGT1JN
KENPQ09BKQogICAgIFZlY3RvcjxTdHJpbmc+IHJlYWRGaWxlUGF0aHMoKTsKLSAgICBTdHJpbmcg
cmVhZFBsYXRmb3JtVmFsdWVBc1N0cmluZyhjb25zdCBTdHJpbmcmIGRvbVR5cGUsIGxvbmcgY2hh
bmdlQ291bnQsIGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUpOworICAgIFZlY3RvcjxTdHJp
bmc+IHJlYWRQbGF0Zm9ybVZhbHVlc0FzU3RyaW5ncyhjb25zdCBTdHJpbmcmIGRvbVR5cGUsIGxv
bmcgY2hhbmdlQ291bnQsIGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUpOwogICAgIHN0YXRp
YyB2b2lkIGFkZEhUTUxDbGlwYm9hcmRUeXBlc0ZvckNvY29hVHlwZShMaXN0SGFzaFNldDxTdHJp
bmc+JiByZXN1bHRUeXBlcywgY29uc3QgU3RyaW5nJiBjb2NvYVR5cGUpOwogICAgIFN0cmluZyBy
ZWFkU3RyaW5nRm9yUGxhdGZvcm1UeXBlKGNvbnN0IFN0cmluZyYpOwogICAgIFZlY3RvcjxTdHJp
bmc+IHJlYWRUeXBlc1dpdGhTZWN1cml0eUNoZWNrKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9QYXN0ZWJvYXJkU3RyYXRlZ3kuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL1Bhc3RlYm9hcmRTdHJhdGVneS5oCmluZGV4IDlkODI3YzAxZjg1Y2MwMmIyMTY5NWQ5YjJl
N2JjYTE1YjRiOWZkMDUuLjk5ZDhkZGZmYWUwMGVhY2UxYTYzMmNiMGQzZjUzODFhMjNmYTM2NWMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Bhc3RlYm9hcmRTdHJhdGVneS5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Bhc3RlYm9hcmRTdHJhdGVneS5oCkBAIC02
MSw2ICs2MSw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIFJlZlB0cjxTaGFyZWRCdWZmZXI+IGJ1
ZmZlckZvclR5cGUoY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkVHlwZSwgY29uc3QgU3RyaW5nJiBw
YXN0ZWJvYXJkTmFtZSkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBnZXRQYXRobmFtZXNGb3JUeXBl
KFZlY3RvcjxTdHJpbmc+JiBwYXRobmFtZXMsIGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZFR5cGUs
IGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUpID0gMDsKICAgICB2aXJ0dWFsIFN0cmluZyBz
dHJpbmdGb3JUeXBlKGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZFR5cGUsIGNvbnN0IFN0cmluZyYg
cGFzdGVib2FyZE5hbWUpID0gMDsKKyAgICB2aXJ0dWFsIFZlY3RvcjxTdHJpbmc+IGFsbFN0cmlu
Z3NGb3JUeXBlKGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZFR5cGUsIGNvbnN0IFN0cmluZyYgcGFz
dGVib2FyZE5hbWUpID0gMDsKICAgICB2aXJ0dWFsIGxvbmcgY2hhbmdlQ291bnQoY29uc3QgU3Ry
aW5nJiBwYXN0ZWJvYXJkTmFtZSkgPSAwOwogICAgIHZpcnR1YWwgU3RyaW5nIHVuaXF1ZU5hbWUo
KSA9IDA7CiAgICAgdmlydHVhbCBDb2xvciBjb2xvcihjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmRO
YW1lKSA9IDA7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QbGF0Zm9ybVBh
c3RlYm9hcmQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1BsYXRmb3JtUGFzdGVib2FyZC5o
CmluZGV4IGRjNjUwYzMzMzUwYTg3ZDk3Y2Y1MDk4NGViNmU1MzQ1MDIxMzhkNzYuLjhlMTNiZjRk
ODQxNDEzYmYxYzExN2RlYzllZmY4NWM0ODI0Yjg4ZWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL1BsYXRmb3JtUGFzdGVib2FyZC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL1BsYXRmb3JtUGFzdGVib2FyZC5oCkBAIC03Myw2ICs3Myw3IEBAIHB1YmxpYzoKICAg
ICBXRUJDT1JFX0VYUE9SVCBSZWZQdHI8U2hhcmVkQnVmZmVyPiBidWZmZXJGb3JUeXBlKGNvbnN0
IFN0cmluZyYgcGFzdGVib2FyZFR5cGUpOwogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZ2V0UGF0
aG5hbWVzRm9yVHlwZShWZWN0b3I8U3RyaW5nPiYgcGF0aG5hbWVzLCBjb25zdCBTdHJpbmcmIHBh
c3RlYm9hcmRUeXBlKSBjb25zdDsKICAgICBXRUJDT1JFX0VYUE9SVCBTdHJpbmcgc3RyaW5nRm9y
VHlwZShjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmRUeXBlKSBjb25zdDsKKyAgICBXRUJDT1JFX0VY
UE9SVCBWZWN0b3I8U3RyaW5nPiBhbGxTdHJpbmdzRm9yVHlwZShjb25zdCBTdHJpbmcmIHBhc3Rl
Ym9hcmRUeXBlKSBjb25zdDsKICAgICBXRUJDT1JFX0VYUE9SVCBsb25nIGNoYW5nZUNvdW50KCkg
Y29uc3Q7CiAgICAgV0VCQ09SRV9FWFBPUlQgQ29sb3IgY29sb3IoKTsKICAgICBXRUJDT1JFX0VY
UE9SVCBVUkwgdXJsKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2Nv
YS9QYXN0ZWJvYXJkQ29jb2EubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9QYXN0
ZWJvYXJkQ29jb2EubW0KaW5kZXggZjQ4ZTdiODM3MGJhY2NjNDAzMGFmMDZhMzdkMTQwOGZlZTA5
NzBkNi4uZmE1MGU0YzljNTUxMzUxN2IzMzZjMDIyNjA5MGUzZjYwMjc3MTJkOSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvUGFzdGVib2FyZENvY29hLm1tCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1Bhc3RlYm9hcmRDb2NvYS5tbQpAQCAtMjU5
LDkgKzI1OSwxNSBAQCB2b2lkIFBhc3RlYm9hcmQ6OnJlYWQoUGFzdGVib2FyZEZpbGVSZWFkZXIm
IHJlYWRlcikKICAgICB9CiB9CiAKK1ZlY3RvcjxTdHJpbmc+IFBhc3RlYm9hcmQ6OnJlYWRBbGxT
dHJpbmdzKGNvbnN0IFN0cmluZyYgdHlwZSkKK3sKKyAgICByZXR1cm4gcmVhZFBsYXRmb3JtVmFs
dWVzQXNTdHJpbmdzKHR5cGUsIG1fY2hhbmdlQ291bnQsIG1fcGFzdGVib2FyZE5hbWUpOworfQor
CiBTdHJpbmcgUGFzdGVib2FyZDo6cmVhZFN0cmluZyhjb25zdCBTdHJpbmcmIHR5cGUpCiB7Ci0g
ICAgcmV0dXJuIHJlYWRQbGF0Zm9ybVZhbHVlQXNTdHJpbmcodHlwZSwgbV9jaGFuZ2VDb3VudCwg
bV9wYXN0ZWJvYXJkTmFtZSk7CisgICAgYXV0byB2YWx1ZXMgPSByZWFkUGxhdGZvcm1WYWx1ZXNB
c1N0cmluZ3ModHlwZSwgbV9jaGFuZ2VDb3VudCwgbV9wYXN0ZWJvYXJkTmFtZSk7CisgICAgcmV0
dXJuIHZhbHVlcy5pc0VtcHR5KCkgPyBTdHJpbmcoKSA6IHZhbHVlcy5maXJzdCgpOwogfQogCiBT
dHJpbmcgUGFzdGVib2FyZDo6cmVhZFN0cmluZ0luQ3VzdG9tRGF0YShjb25zdCBTdHJpbmcmIHR5
cGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvUGFzdGVib2FyZElP
Uy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9QYXN0ZWJvYXJkSU9TLm1tCmluZGV4
IGQxYzAyZWRmMjIwMjhiNDUzMWFmYzdlYzBmNzYwOWE1NzE1MzcyYTMuLmFlMWEzZmUxYzYxYzJj
ODk0OTAxNWRkODE3MmM4ZDY5ZGRiODMxMWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2lvcy9QYXN0ZWJvYXJkSU9TLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2lvcy9QYXN0ZWJvYXJkSU9TLm1tCkBAIC0zNzMsMzggKzM3MywzMyBAQCB2b2lkIFBhc3RlYm9h
cmQ6OmNsZWFyKCkKICAgICBwbGF0Zm9ybVN0cmF0ZWdpZXMoKS0+cGFzdGVib2FyZFN0cmF0ZWd5
KCktPndyaXRlVG9QYXN0ZWJvYXJkKFN0cmluZygpLCBTdHJpbmcoKSwgbV9wYXN0ZWJvYXJkTmFt
ZSk7CiB9CiAKLVN0cmluZyBQYXN0ZWJvYXJkOjpyZWFkUGxhdGZvcm1WYWx1ZUFzU3RyaW5nKGNv
bnN0IFN0cmluZyYgZG9tVHlwZSwgbG9uZyBjaGFuZ2VDb3VudCwgY29uc3QgU3RyaW5nJiBwYXN0
ZWJvYXJkTmFtZSkKK1ZlY3RvcjxTdHJpbmc+IFBhc3RlYm9hcmQ6OnJlYWRQbGF0Zm9ybVZhbHVl
c0FzU3RyaW5ncyhjb25zdCBTdHJpbmcmIGRvbVR5cGUsIGxvbmcgY2hhbmdlQ291bnQsIGNvbnN0
IFN0cmluZyYgcGFzdGVib2FyZE5hbWUpCiB7Ci0gICAgUGFzdGVib2FyZFN0cmF0ZWd5JiBzdHJh
dGVneSA9ICpwbGF0Zm9ybVN0cmF0ZWdpZXMoKS0+cGFzdGVib2FyZFN0cmF0ZWd5KCk7Ci0KLSAg
ICBpbnQgbnVtYmVyT2ZJdGVtcyA9IHN0cmF0ZWd5LmdldFBhc3RlYm9hcmRJdGVtc0NvdW50KHBh
c3RlYm9hcmROYW1lKTsKLQotICAgIGlmICghbnVtYmVyT2ZJdGVtcykKLSAgICAgICAgcmV0dXJu
IFN0cmluZygpOworICAgIGF1dG8mIHN0cmF0ZWd5ID0gKnBsYXRmb3JtU3RyYXRlZ2llcygpLT5w
YXN0ZWJvYXJkU3RyYXRlZ3koKTsKIAogICAgIC8vIEdyYWIgdGhlIHZhbHVlIG9mZiB0aGUgcGFz
dGVib2FyZCBjb3JyZXNwb25kaW5nIHRvIHRoZSBjb2NvYVR5cGUuCi0gICAgUmV0YWluUHRyPE5T
U3RyaW5nPiBjb2NvYVR5cGUgPSBjb2NvYVR5cGVGcm9tSFRNTENsaXBib2FyZFR5cGUoZG9tVHlw
ZSk7Ci0KLSAgICBOU1N0cmluZyAqY29jb2FWYWx1ZSA9IG5pbDsKLQotICAgIGlmIChbY29jb2FU
eXBlIGlzRXF1YWxUb1N0cmluZzooTlNTdHJpbmcgKilrVVRUeXBlVVJMXSkgewotICAgICAgICBT
dHJpbmcgdGl0bGU7Ci0gICAgICAgIFVSTCB1cmwgPSBzdHJhdGVneS5yZWFkVVJMRnJvbVBhc3Rl
Ym9hcmQoMCwgcGFzdGVib2FyZE5hbWUsIHRpdGxlKTsKLSAgICAgICAgaWYgKCF1cmwuaXNOdWxs
KCkpCi0gICAgICAgICAgICBjb2NvYVZhbHVlID0gWyhOU1VSTCAqKXVybCBhYnNvbHV0ZVN0cmlu
Z107Ci0gICAgfSBlbHNlIGlmIChbY29jb2FUeXBlIGlzRXF1YWxUb1N0cmluZzooTlNTdHJpbmcg
KilrVVRUeXBlUGxhaW5UZXh0XSkgewotICAgICAgICBTdHJpbmcgdmFsdWUgPSBzdHJhdGVneS5y
ZWFkU3RyaW5nRnJvbVBhc3RlYm9hcmQoMCwga1VUVHlwZVBsYWluVGV4dCwgcGFzdGVib2FyZE5h
bWUpOwotICAgICAgICBpZiAoIXZhbHVlLmlzTnVsbCgpKQotICAgICAgICAgICAgY29jb2FWYWx1
ZSA9IFsoTlNTdHJpbmcgKil2YWx1ZSBwcmVjb21wb3NlZFN0cmluZ1dpdGhDYW5vbmljYWxNYXBw
aW5nXTsKLSAgICB9IGVsc2UgaWYgKGNvY29hVHlwZSkKLSAgICAgICAgY29jb2FWYWx1ZSA9IChO
U1N0cmluZyAqKXN0cmF0ZWd5LnJlYWRTdHJpbmdGcm9tUGFzdGVib2FyZCgwLCBjb2NvYVR5cGUu
Z2V0KCksIHBhc3RlYm9hcmROYW1lKTsKKyAgICBhdXRvIGNvY29hVHlwZSA9IGNvY29hVHlwZUZy
b21IVE1MQ2xpcGJvYXJkVHlwZShkb21UeXBlKTsKKyAgICBpZiAoIWNvY29hVHlwZSkKKyAgICAg
ICAgcmV0dXJuIHsgfTsKKworICAgIGJvb2wgaXNVUkxUeXBlID0gW2NvY29hVHlwZSBpc0VxdWFs
VG9TdHJpbmc6KE5TU3RyaW5nICopa1VUVHlwZVVSTF07CisgICAgYm9vbCBpc1BsYWluVGV4dFR5
cGUgPSBbY29jb2FUeXBlIGlzRXF1YWxUb1N0cmluZzooTlNTdHJpbmcgKilrVVRUeXBlUGxhaW5U
ZXh0XTsKKyAgICBWZWN0b3I8U3RyaW5nPiB2YWx1ZXM7CisgICAgZm9yIChhdXRvJiB2YWx1ZSA6
IHN0cmF0ZWd5LmFsbFN0cmluZ3NGb3JUeXBlKGNvY29hVHlwZS5nZXQoKSwgcGFzdGVib2FyZE5h
bWUpKSB7CisgICAgICAgIGlmIChpc1VSTFR5cGUpIHsKKyAgICAgICAgICAgIGlmIChOU1VSTCAq
dXJsID0gW05TVVJMIFVSTFdpdGhTdHJpbmc6dmFsdWVdKQorICAgICAgICAgICAgICAgIHZhbHVl
cy5hcHBlbmQodXJsLmFic29sdXRlU3RyaW5nKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAg
ICAgICB9CisgICAgICAgIHZhbHVlcy5hcHBlbmQoaXNQbGFpblRleHRUeXBlID8gU3RyaW5nKFt2
YWx1ZSBwcmVjb21wb3NlZFN0cmluZ1dpdGhDYW5vbmljYWxNYXBwaW5nXSkgOiB2YWx1ZSk7Cisg
ICAgfQogCiAgICAgLy8gRW5mb3JjZSBjaGFuZ2VDb3VudCBvdXJzZWx2ZXMgZm9yIHNlY3VyaXR5
LiBXZSBjaGVjayBhZnRlciByZWFkaW5nIGluc3RlYWQgb2YgYmVmb3JlIHRvIGJlCiAgICAgLy8g
c3VyZSBpdCBkb2Vzbid0IGNoYW5nZSBiZXR3ZWVuIG91ciB0ZXN0aW5nIHRoZSBjaGFuZ2UgY291
bnQgYW5kIGFjY2Vzc2luZyB0aGUgZGF0YS4KLSAgICBpZiAoY29jb2FWYWx1ZSAmJiBjaGFuZ2VD
b3VudCA9PSBjaGFuZ2VDb3VudEZvclBhc3RlYm9hcmQocGFzdGVib2FyZE5hbWUpKQotICAgICAg
ICByZXR1cm4gY29jb2FWYWx1ZTsKKyAgICBpZiAoY2hhbmdlQ291bnQgIT0gY2hhbmdlQ291bnRG
b3JQYXN0ZWJvYXJkKHBhc3RlYm9hcmROYW1lKSkKKyAgICAgICAgcmV0dXJuIHsgfTsKIAotICAg
IHJldHVybiBTdHJpbmcoKTsKKyAgICByZXR1cm4gdmFsdWVzOwogfQogCiB2b2lkIFBhc3RlYm9h
cmQ6OmFkZEhUTUxDbGlwYm9hcmRUeXBlc0ZvckNvY29hVHlwZShMaXN0SGFzaFNldDxTdHJpbmc+
JiByZXN1bHRUeXBlcywgY29uc3QgU3RyaW5nJiBjb2NvYVR5cGUpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvUGxhdGZvcm1QYXN0ZWJvYXJkSU9TLm1tIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vaW9zL1BsYXRmb3JtUGFzdGVib2FyZElPUy5tbQppbmRleCBlMDI4
OTNlZDZlNGE2YjAxZTcyODIyMWJmNmYxZDQxOGZiMjE1NWIwLi44YzE5NzI5ODkxNGMwYzBkZDIz
N2Q0MDVjNTU5ZTE3ZjY4MjRiMGRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9pb3MvUGxhdGZvcm1QYXN0ZWJvYXJkSU9TLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2lvcy9QbGF0Zm9ybVBhc3RlYm9hcmRJT1MubW0KQEAgLTYwMyw2ICs2MDMsMTcgQEAgaW50
IFBsYXRmb3JtUGFzdGVib2FyZDo6Y291bnQoKSBjb25zdAogICAgIHJldHVybiBbbV9wYXN0ZWJv
YXJkIG51bWJlck9mSXRlbXNdOwogfQogCitWZWN0b3I8U3RyaW5nPiBQbGF0Zm9ybVBhc3RlYm9h
cmQ6OmFsbFN0cmluZ3NGb3JUeXBlKGNvbnN0IFN0cmluZyYgdHlwZSkgY29uc3QKK3sKKyAgICBW
ZWN0b3I8U3RyaW5nPiBzdHJpbmdzOworICAgIGZvciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCBj
b3VudCgpOyArK2luZGV4KSB7CisgICAgICAgIFN0cmluZyB2YWx1ZSA9IHJlYWRTdHJpbmcoaW5k
ZXgsIHR5cGUpOworICAgICAgICBpZiAoIXZhbHVlLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIHN0
cmluZ3MuYXBwZW5kKFdURk1vdmUodmFsdWUpKTsKKyAgICB9CisgICAgcmV0dXJuIHN0cmluZ3M7
Cit9CisKIFJlZlB0cjxTaGFyZWRCdWZmZXI+IFBsYXRmb3JtUGFzdGVib2FyZDo6cmVhZEJ1ZmZl
cihpbnQgaW5kZXgsIGNvbnN0IFN0cmluZyYgdHlwZSkgY29uc3QKIHsKICAgICBOU0luZGV4U2V0
ICppbmRleFNldCA9IFtOU0luZGV4U2V0IGluZGV4U2V0V2l0aEluZGV4OmluZGV4XTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9QYXN0ZWJvYXJkTWFjLm1tIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1Bhc3RlYm9hcmRNYWMubW0KaW5kZXggZmQ2ZTkyOTg3
NzRmYWY0ZmU4NzM1YmYyNzU2NWFkYzk1MzJiZjYzNi4uOWQ4MTg3NDg5N2Q2ZWVmZjU3MDA0ZWYy
ODE5OWE3NzNiZDA3ZmM4ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFj
L1Bhc3RlYm9hcmRNYWMubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1Bhc3Rl
Ym9hcmRNYWMubW0KQEAgLTQ4OCwyMiArNDg4LDI0IEBAIHZvaWQgUGFzdGVib2FyZDo6Y2xlYXIo
Y29uc3QgU3RyaW5nJiB0eXBlKQogICAgIG1fY2hhbmdlQ291bnQgPSBwbGF0Zm9ybVN0cmF0ZWdp
ZXMoKS0+cGFzdGVib2FyZFN0cmF0ZWd5KCktPnNldFN0cmluZ0ZvclR5cGUoZW1wdHlTdHJpbmco
KSwgY29jb2FUeXBlLCBtX3Bhc3RlYm9hcmROYW1lKTsKIH0KIAotU3RyaW5nIFBhc3RlYm9hcmQ6
OnJlYWRQbGF0Zm9ybVZhbHVlQXNTdHJpbmcoY29uc3QgU3RyaW5nJiBkb21UeXBlLCBsb25nIGNo
YW5nZUNvdW50LCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lKQorVmVjdG9yPFN0cmluZz4g
UGFzdGVib2FyZDo6cmVhZFBsYXRmb3JtVmFsdWVzQXNTdHJpbmdzKGNvbnN0IFN0cmluZyYgZG9t
VHlwZSwgbG9uZyBjaGFuZ2VDb3VudCwgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSkKIHsK
LSAgICBjb25zdCBTdHJpbmcmIGNvY29hVHlwZSA9IGNvY29hVHlwZUZyb21IVE1MQ2xpcGJvYXJk
VHlwZShkb21UeXBlKTsKLSAgICBTdHJpbmcgY29jb2FWYWx1ZTsKKyAgICBhdXRvJiBzdHJhdGVn
eSA9ICpwbGF0Zm9ybVN0cmF0ZWdpZXMoKS0+cGFzdGVib2FyZFN0cmF0ZWd5KCk7CisgICAgYXV0
byBjb2NvYVR5cGUgPSBjb2NvYVR5cGVGcm9tSFRNTENsaXBib2FyZFR5cGUoZG9tVHlwZSk7Cisg
ICAgaWYgKGNvY29hVHlwZS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiB7IH07CiAKLSAgICBp
ZiAoY29jb2FUeXBlID09IFN0cmluZyhsZWdhY3lTdHJpbmdQYXN0ZWJvYXJkVHlwZSgpKSkKLSAg
ICAgICAgY29jb2FWYWx1ZSA9IFtwbGF0Zm9ybVN0cmF0ZWdpZXMoKS0+cGFzdGVib2FyZFN0cmF0
ZWd5KCktPnN0cmluZ0ZvclR5cGUoY29jb2FUeXBlLCBwYXN0ZWJvYXJkTmFtZSkgcHJlY29tcG9z
ZWRTdHJpbmdXaXRoQ2Fub25pY2FsTWFwcGluZ107Ci0gICAgZWxzZSBpZiAoIWNvY29hVHlwZS5p
c0VtcHR5KCkpCi0gICAgICAgIGNvY29hVmFsdWUgPSBwbGF0Zm9ybVN0cmF0ZWdpZXMoKS0+cGFz
dGVib2FyZFN0cmF0ZWd5KCktPnN0cmluZ0ZvclR5cGUoY29jb2FUeXBlLCBwYXN0ZWJvYXJkTmFt
ZSk7CisgICAgYm9vbCBpc1N0cmluZ1R5cGUgPSBjb2NvYVR5cGUgPT0gU3RyaW5nKGxlZ2FjeVN0
cmluZ1Bhc3RlYm9hcmRUeXBlKCkpOworICAgIFZlY3RvcjxTdHJpbmc+IHZhbHVlczsKKyAgICBm
b3IgKGF1dG8mIHZhbHVlIDogc3RyYXRlZ3kuYWxsU3RyaW5nc0ZvclR5cGUoY29jb2FUeXBlLCBw
YXN0ZWJvYXJkTmFtZSkpCisgICAgICAgIHZhbHVlcy5hcHBlbmQoaXNTdHJpbmdUeXBlID8gU3Ry
aW5nKFt2YWx1ZSBwcmVjb21wb3NlZFN0cmluZ1dpdGhDYW5vbmljYWxNYXBwaW5nXSkgOiB2YWx1
ZSk7CiAKICAgICAvLyBFbmZvcmNlIGNoYW5nZUNvdW50IG91cnNlbHZlcyBmb3Igc2VjdXJpdHku
ICBXZSBjaGVjayBhZnRlciByZWFkaW5nIGluc3RlYWQgb2YgYmVmb3JlIHRvIGJlCiAgICAgLy8g
c3VyZSBpdCBkb2Vzbid0IGNoYW5nZSBiZXR3ZWVuIG91ciB0ZXN0aW5nIHRoZSBjaGFuZ2UgY291
bnQgYW5kIGFjY2Vzc2luZyB0aGUgZGF0YS4KLSAgICBpZiAoIWNvY29hVmFsdWUuaXNFbXB0eSgp
ICYmIGNoYW5nZUNvdW50ID09IHBsYXRmb3JtU3RyYXRlZ2llcygpLT5wYXN0ZWJvYXJkU3RyYXRl
Z3koKS0+Y2hhbmdlQ291bnQocGFzdGVib2FyZE5hbWUpKQotICAgICAgICByZXR1cm4gY29jb2FW
YWx1ZTsKKyAgICBpZiAoY2hhbmdlQ291bnQgIT0gcGxhdGZvcm1TdHJhdGVnaWVzKCktPnBhc3Rl
Ym9hcmRTdHJhdGVneSgpLT5jaGFuZ2VDb3VudChwYXN0ZWJvYXJkTmFtZSkpCisgICAgICAgIHJl
dHVybiB7IH07CiAKLSAgICByZXR1cm4gU3RyaW5nKCk7CisgICAgcmV0dXJuIHZhbHVlczsKIH0K
IAogc3RhdGljIFN0cmluZyB1dGlUeXBlRnJvbUNvY29hVHlwZShjb25zdCBTdHJpbmcmIHR5cGUp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvUGxhdGZvcm1QYXN0ZWJv
YXJkTWFjLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1BsYXRmb3JtUGFzdGVib2Fy
ZE1hYy5tbQppbmRleCBhMTkyNWJhZGM5M2I2YzcxOTMxZWM5NTQ5ZDhjZDcyZTYyMmQxZDdlLi42
ZDQxMmM0NmZiNDBkMDBmZjZiZTBiNDVjNTU0MDRkZjU1MDg0MTRlIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvUGxhdGZvcm1QYXN0ZWJvYXJkTWFjLm1tCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9QbGF0Zm9ybVBhc3RlYm9hcmRNYWMubW0KQEAgLTEx
Niw2ICsxMTYsNzEgQEAgU3RyaW5nIFBsYXRmb3JtUGFzdGVib2FyZDo6c3RyaW5nRm9yVHlwZShj
b25zdCBTdHJpbmcmIHBhc3RlYm9hcmRUeXBlKSBjb25zdAogICAgIHJldHVybiBbbV9wYXN0ZWJv
YXJkIHN0cmluZ0ZvclR5cGU6cGFzdGVib2FyZFR5cGVdOwogfQogCitzdGF0aWMgTlNBcnJheTxO
U1VSTCAqPiAqdXJsc0Zyb21QYXN0ZWJvYXJkKE5TUGFzdGVib2FyZCAqcGFzdGVib2FyZCkKK3sK
KyAgICBOU0FycmF5PE5TUGFzdGVib2FyZEl0ZW0gKj4gKml0ZW1zID0gcGFzdGVib2FyZC5wYXN0
ZWJvYXJkSXRlbXM7CisgICAgaWYgKGl0ZW1zLmNvdW50ID4gMSkgeworICAgICAgICBOU011dGFi
bGVBcnJheTxOU1VSTCAqPiAqdXJsc0Zyb21JdGVtcyA9IFtOU011dGFibGVBcnJheSBhcnJheVdp
dGhDYXBhY2l0eTppdGVtcy5jb3VudF07CisgICAgICAgIGZvciAoTlNQYXN0ZWJvYXJkSXRlbSAq
aXRlbSBpbiBpdGVtcykgeworICAgICAgICAgICAgaWYgKE5TU3RyaW5nICp1cmxTdHJpbmcgPSBb
aXRlbSBzdHJpbmdGb3JUeXBlOihfX2JyaWRnZSBOU1N0cmluZyAqKWtVVFR5cGVVUkxdKQorICAg
ICAgICAgICAgICAgIFt1cmxzRnJvbUl0ZW1zIGFkZE9iamVjdDpbTlNVUkwgVVJMV2l0aFN0cmlu
Zzp1cmxTdHJpbmddXTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdXJsc0Zyb21JdGVtczsK
KyAgICB9CisKKyAgICBpZiAoTlNVUkwgKnVybEZyb21TdHJpbmcgPSBbTlNVUkwgVVJMRnJvbVBh
c3RlYm9hcmQ6cGFzdGVib2FyZF0pCisgICAgICAgIHJldHVybiBAWyB1cmxGcm9tU3RyaW5nIF07
CisKKyAgICBpZiAoTlNVUkwgKnVybEZyb21QYXN0ZWJvYXJkID0gW05TVVJMIFVSTFdpdGhTdHJp
bmc6W3Bhc3RlYm9hcmQgc3RyaW5nRm9yVHlwZTpsZWdhY3lVUkxQYXN0ZWJvYXJkVHlwZSgpXV0p
CisgICAgICAgIHJldHVybiBAWyB1cmxGcm9tUGFzdGVib2FyZCBdOworCisgICAgcmV0dXJuIEBb
IF07Cit9CisKK3N0YXRpYyBTdHJpbmcgdHlwZUlkZW50aWZpZXJGb3JQYXN0ZWJvYXJkVHlwZShj
b25zdCBTdHJpbmcmIHBhc3RlYm9hcmRUeXBlKQoreworICAgIGlmIChVVFR5cGVJc0RlY2xhcmVk
KHBhc3RlYm9hcmRUeXBlLmNyZWF0ZUNGU3RyaW5nKCkuZ2V0KCkpKQorICAgICAgICByZXR1cm4g
cGFzdGVib2FyZFR5cGU7CisKKyAgICBpZiAocGFzdGVib2FyZFR5cGUgPT0gU3RyaW5nKGxlZ2Fj
eVN0cmluZ1Bhc3RlYm9hcmRUeXBlKCkpKQorICAgICAgICByZXR1cm4ga1VUVHlwZVVURjhQbGFp
blRleHQ7CisKKyAgICBpZiAocGFzdGVib2FyZFR5cGUgPT0gU3RyaW5nKGxlZ2FjeUhUTUxQYXN0
ZWJvYXJkVHlwZSgpKSkKKyAgICAgICAgcmV0dXJuIGtVVFR5cGVIVE1MOworCisgICAgaWYgKHBh
c3RlYm9hcmRUeXBlID09IFN0cmluZyhsZWdhY3lVUkxQYXN0ZWJvYXJkVHlwZSgpKSkKKyAgICAg
ICAgcmV0dXJuIGtVVFR5cGVVUkw7CisKKyAgICByZXR1cm4geyB9OworfQorCitWZWN0b3I8U3Ry
aW5nPiBQbGF0Zm9ybVBhc3RlYm9hcmQ6OmFsbFN0cmluZ3NGb3JUeXBlKGNvbnN0IFN0cmluZyYg
cGFzdGVib2FyZFR5cGUpIGNvbnN0Cit7CisgICAgYm9vbCBtYXlDb250YWluRmlsZXMgPSBwYXN0
ZWJvYXJkTWF5Q29udGFpbkZpbGVQYXRocyhtX3Bhc3RlYm9hcmQuZ2V0KCkpOworICAgIGF1dG8g
dHlwZUlkZW50aWZpZXIgPSB0eXBlSWRlbnRpZmllckZvclBhc3RlYm9hcmRUeXBlKHBhc3RlYm9h
cmRUeXBlKTsKKyAgICBWZWN0b3I8U3RyaW5nPiBzdHJpbmdzOworICAgIGlmICh0eXBlSWRlbnRp
ZmllciA9PSBTdHJpbmcoa1VUVHlwZVVSTCkpIHsKKyAgICAgICAgZm9yIChOU1VSTCAqdXJsIGlu
IHVybHNGcm9tUGFzdGVib2FyZChtX3Bhc3RlYm9hcmQuZ2V0KCkpKSB7CisgICAgICAgICAgICBT
dHJpbmcgdXJsU3RyaW5nID0gdXJsLmFic29sdXRlU3RyaW5nOworICAgICAgICAgICAgaWYgKHVy
bFN0cmluZy5pc0VtcHR5KCkgfHwgKG1heUNvbnRhaW5GaWxlcyAmJiAhUGFzdGVib2FyZDo6Y2Fu
RXhwb3NlVVJMVG9ET01XaGVuUGFzdGVib2FyZENvbnRhaW5zRmlsZXModXJsU3RyaW5nKSkpCisg
ICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBzdHJpbmdzLmFwcGVuZChXVEZN
b3ZlKHVybFN0cmluZykpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBzdHJpbmdzOworICAg
IH0KKworICAgIE5TQXJyYXk8TlNQYXN0ZWJvYXJkSXRlbSAqPiAqaXRlbXMgPSBbbV9wYXN0ZWJv
YXJkIHBhc3RlYm9hcmRJdGVtc107CisgICAgaWYgKGl0ZW1zLmNvdW50ID4gMSAmJiAhdHlwZUlk
ZW50aWZpZXIuaXNOdWxsKCkpIHsKKyAgICAgICAgZm9yIChOU1Bhc3RlYm9hcmRJdGVtICppdGVt
IGluIGl0ZW1zKSB7CisgICAgICAgICAgICBpZiAoTlNTdHJpbmcgKnN0cmluZ0Zyb21JdGVtID0g
W2l0ZW0gc3RyaW5nRm9yVHlwZTp0eXBlSWRlbnRpZmllcl0pCisgICAgICAgICAgICAgICAgc3Ry
aW5ncy5hcHBlbmQoc3RyaW5nRnJvbUl0ZW0pOworICAgICAgICB9CisgICAgfSBlbHNlIGlmIChO
U1N0cmluZyAqc3RyaW5nRnJvbVBhc3RlYm9hcmQgPSBbbV9wYXN0ZWJvYXJkIHN0cmluZ0ZvclR5
cGU6cGFzdGVib2FyZFR5cGVdKQorICAgICAgICBzdHJpbmdzLmFwcGVuZChzdHJpbmdGcm9tUGFz
dGVib2FyZCk7CisKKyAgICByZXR1cm4gc3RyaW5nczsKK30KKwogc3RhdGljIGNvbnN0IGNoYXIq
IHNhZmVUeXBlRm9yRE9NVG9SZWFkQW5kV3JpdGVGb3JQbGF0Zm9ybVR5cGUoY29uc3QgU3RyaW5n
JiBwbGF0Zm9ybVR5cGUpCiB7CiAgICAgaWYgKHBsYXRmb3JtVHlwZSA9PSBTdHJpbmcobGVnYWN5
U3RyaW5nUGFzdGVib2FyZFR5cGUoKSkgfHwgcGxhdGZvcm1UeXBlID09IFN0cmluZyhOU1Bhc3Rl
Ym9hcmRUeXBlU3RyaW5nKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0Nv
Y29hL1dlYlBhc3RlYm9hcmRQcm94eUNvY29hLm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
Q29jb2EvV2ViUGFzdGVib2FyZFByb3h5Q29jb2EubW0KaW5kZXggYzk5MjQ0MDRmZWJiMDlhZTAx
N2IxMGNlOWM1Zjg4MmE1OTMxMjcwOS4uYWU2NDcwN2RhMTUxYzIyYmMzODM5ZGFiNGFmN2U3NDAx
NGUwMjIwZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvV2ViUGFz
dGVib2FyZFByb3h5Q29jb2EubW0KKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2Ev
V2ViUGFzdGVib2FyZFByb3h5Q29jb2EubW0KQEAgLTcwLDYgKzcwLDExIEBAIHZvaWQgV2ViUGFz
dGVib2FyZFByb3h5OjpnZXRQYXN0ZWJvYXJkU3RyaW5nRm9yVHlwZShjb25zdCBTdHJpbmcmIHBh
c3RlYm9hcmROYW1lCiAgICAgc3RyaW5nID0gUGxhdGZvcm1QYXN0ZWJvYXJkKHBhc3RlYm9hcmRO
YW1lKS5zdHJpbmdGb3JUeXBlKHBhc3RlYm9hcmRUeXBlKTsKIH0KIAordm9pZCBXZWJQYXN0ZWJv
YXJkUHJveHk6OmdldFBhc3RlYm9hcmRTdHJpbmdzRm9yVHlwZShjb25zdCBTdHJpbmcmIHBhc3Rl
Ym9hcmROYW1lLCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmRUeXBlLCBWZWN0b3I8U3RyaW5nPiYg
c3RyaW5ncykKK3sKKyAgICBzdHJpbmdzID0gUGxhdGZvcm1QYXN0ZWJvYXJkKHBhc3RlYm9hcmRO
YW1lKS5hbGxTdHJpbmdzRm9yVHlwZShwYXN0ZWJvYXJkVHlwZSk7Cit9CisKIHZvaWQgV2ViUGFz
dGVib2FyZFByb3h5OjpnZXRQYXN0ZWJvYXJkQnVmZmVyRm9yVHlwZShjb25zdCBTdHJpbmcmIHBh
c3RlYm9hcmROYW1lLCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmRUeXBlLCBTaGFyZWRNZW1vcnk6
OkhhbmRsZSYgaGFuZGxlLCB1aW50NjRfdCYgc2l6ZSkKIHsKICAgICBSZWZQdHI8U2hhcmVkQnVm
ZmVyPiBidWZmZXIgPSBQbGF0Zm9ybVBhc3RlYm9hcmQocGFzdGVib2FyZE5hbWUpLmJ1ZmZlckZv
clR5cGUocGFzdGVib2FyZFR5cGUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvV2ViUGFzdGVib2FyZFByb3h5LmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYXN0
ZWJvYXJkUHJveHkuaAppbmRleCBlNWVjMjA5MzI3ZGEwNzYwZTgyY2I0NGFlODMzOWZkYmQxOTEw
NWViLi4zYWUyNjAzZWFlZDIyNmVjZWNhMWY0NDJiNDI4ZmU3YWRmNjIxZTM2IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYXN0ZWJvYXJkUHJveHkuaAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYXN0ZWJvYXJkUHJveHkuaApAQCAtODcsNiArODcsNyBA
QCBwcml2YXRlOgogICAgIHZvaWQgZ2V0UGFzdGVib2FyZFR5cGVzKGNvbnN0IFN0cmluZyYgcGFz
dGVib2FyZE5hbWUsIFZlY3RvcjxTdHJpbmc+JiBwYXN0ZWJvYXJkVHlwZXMpOwogICAgIHZvaWQg
Z2V0UGFzdGVib2FyZFBhdGhuYW1lc0ZvclR5cGUoSVBDOjpDb25uZWN0aW9uJiwgY29uc3QgU3Ry
aW5nJiBwYXN0ZWJvYXJkTmFtZSwgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkVHlwZSwgVmVjdG9y
PFN0cmluZz4mIHBhdGhuYW1lcywgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlQXJyYXkmKTsKICAg
ICB2b2lkIGdldFBhc3RlYm9hcmRTdHJpbmdGb3JUeXBlKGNvbnN0IFN0cmluZyYgcGFzdGVib2Fy
ZE5hbWUsIGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZFR5cGUsIFN0cmluZyYpOworICAgIHZvaWQg
Z2V0UGFzdGVib2FyZFN0cmluZ3NGb3JUeXBlKGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUs
IGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZFR5cGUsIFZlY3RvcjxTdHJpbmc+Jik7CiAgICAgdm9p
ZCBnZXRQYXN0ZWJvYXJkQnVmZmVyRm9yVHlwZShjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1l
LCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmRUeXBlLCBTaGFyZWRNZW1vcnk6OkhhbmRsZSYsIHVp
bnQ2NF90JiBzaXplKTsKICAgICB2b2lkIHBhc3RlYm9hcmRDb3B5KGNvbnN0IFN0cmluZyYgZnJv
bVBhc3RlYm9hcmQsIGNvbnN0IFN0cmluZyYgdG9QYXN0ZWJvYXJkLCB1aW50NjRfdCYgbmV3Q2hh
bmdlQ291bnQpOwogICAgIHZvaWQgZ2V0UGFzdGVib2FyZENoYW5nZUNvdW50KGNvbnN0IFN0cmlu
ZyYgcGFzdGVib2FyZE5hbWUsIHVpbnQ2NF90JiBjaGFuZ2VDb3VudCk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYXN0ZWJvYXJkUHJveHkubWVzc2FnZXMuaW4gYi9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYXN0ZWJvYXJkUHJveHkubWVzc2FnZXMuaW4KaW5k
ZXggYjkyY2I4MWI2YTY2ZTAxYjEwNzg4YzlhMmNmNjI1Y2I1ZmM4ZWVjZC4uNWRkNjk4OGI5MTMx
MWZjMzM4NjBmNzIyMjA1ZmUwMmZkNzZiZDg4OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvV2ViUGFzdGVib2FyZFByb3h5Lm1lc3NhZ2VzLmluCisrKyBiL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL1dlYlBhc3RlYm9hcmRQcm94eS5tZXNzYWdlcy5pbgpAQCAtNDUsNiArNDUs
NyBAQCBtZXNzYWdlcyAtPiBXZWJQYXN0ZWJvYXJkUHJveHkgewogICAgIEdldFBhc3RlYm9hcmRU
eXBlcyhTdHJpbmcgcGFzdGVib2FyZE5hbWUpIC0+IChWZWN0b3I8U3RyaW5nPiB0eXBlcykKICAg
ICBHZXRQYXN0ZWJvYXJkUGF0aG5hbWVzRm9yVHlwZShTdHJpbmcgcGFzdGVib2FyZE5hbWUsIFN0
cmluZyBwYXN0ZWJvYXJkVHlwZSkgLT4gKFZlY3RvcjxTdHJpbmc+IHBhdGhuYW1lcywgV2ViS2l0
OjpTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGVBcnJheSBzYW5kYm94RXh0ZW5zaW9ucykgV2FudHND
b25uZWN0aW9uCiAgICAgR2V0UGFzdGVib2FyZFN0cmluZ0ZvclR5cGUoU3RyaW5nIHBhc3RlYm9h
cmROYW1lLCBTdHJpbmcgcGFzdGVib2FyZFR5cGUpIC0+IChTdHJpbmcgc3RyaW5nKQorICAgIEdl
dFBhc3RlYm9hcmRTdHJpbmdzRm9yVHlwZShTdHJpbmcgcGFzdGVib2FyZE5hbWUsIFN0cmluZyBw
YXN0ZWJvYXJkVHlwZSkgLT4gKFZlY3RvcjxTdHJpbmc+IHN0cmluZ3MpCiAgICAgR2V0UGFzdGVi
b2FyZEJ1ZmZlckZvclR5cGUoU3RyaW5nIHBhc3RlYm9hcmROYW1lLCBTdHJpbmcgcGFzdGVib2Fy
ZFR5cGUpIC0+IChXZWJLaXQ6OlNoYXJlZE1lbW9yeTo6SGFuZGxlIGhhbmRsZSwgdWludDY0X3Qg
c2l6ZSkKICAgICBQYXN0ZWJvYXJkQ29weShTdHJpbmcgZnJvbVBhc3RlYm9hcmQsIFN0cmluZyB0
b1Bhc3RlYm9hcmQpIC0+ICh1aW50NjRfdCBjaGFuZ2VDb3VudCkKICAgICBHZXRQYXN0ZWJvYXJk
Q2hhbmdlQ291bnQoU3RyaW5nIHBhc3RlYm9hcmROYW1lKSAtPiAodWludDY0X3QgY2hhbmdlQ291
bnQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQv
V2ViUGxhdGZvcm1TdHJhdGVnaWVzLmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJD
b3JlU3VwcG9ydC9XZWJQbGF0Zm9ybVN0cmF0ZWdpZXMuY3BwCmluZGV4IDc2MDJmNWM5NGIyZTU1
ZmQyNzA1YTVkNTZmYzYwNTE5Yzk0NGRiZjMuLjI0MzI5OGUwNDdiOGUyM2MxODY0MjFhYjE1NTIx
MGFiZjY5NDNhNzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3Jl
U3VwcG9ydC9XZWJQbGF0Zm9ybVN0cmF0ZWdpZXMuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJQbGF0Zm9ybVN0cmF0ZWdpZXMuY3BwCkBAIC0yMDcs
NiArMjA3LDEzIEBAIFN0cmluZyBXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6OnN0cmluZ0ZvclR5cGUo
Y29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkVHlwZSwgY29uc3QKICAgICByZXR1cm4gdmFsdWU7CiB9
CiAKK1ZlY3RvcjxTdHJpbmc+IFdlYlBsYXRmb3JtU3RyYXRlZ2llczo6YWxsU3RyaW5nc0ZvclR5
cGUoY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkVHlwZSwgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJk
TmFtZSkKK3sKKyAgICBWZWN0b3I8U3RyaW5nPiB2YWx1ZXM7CisgICAgV2ViUHJvY2Vzczo6c2lu
Z2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZFN5bmMoTWVzc2FnZXM6Oldl
YlBhc3RlYm9hcmRQcm94eTo6R2V0UGFzdGVib2FyZFN0cmluZ3NGb3JUeXBlKHBhc3RlYm9hcmRO
YW1lLCBwYXN0ZWJvYXJkVHlwZSksIE1lc3NhZ2VzOjpXZWJQYXN0ZWJvYXJkUHJveHk6OkdldFBh
c3RlYm9hcmRTdHJpbmdzRm9yVHlwZTo6UmVwbHkodmFsdWVzKSwgMCk7CisgICAgcmV0dXJuIHZh
bHVlczsKK30KKwogbG9uZyBXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6OmNoYW5nZUNvdW50KGNvbnN0
IFdURjo6U3RyaW5nICZwYXN0ZWJvYXJkTmFtZSkKIHsKICAgICB1aW50NjRfdCBjaGFuZ2VDb3Vu
dCB7IDAgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3Vw
cG9ydC9XZWJQbGF0Zm9ybVN0cmF0ZWdpZXMuaCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9X
ZWJDb3JlU3VwcG9ydC9XZWJQbGF0Zm9ybVN0cmF0ZWdpZXMuaAppbmRleCA1OTFkNzhmY2RkMDll
OTBhMGNhZDVjMTEwYjM1YmRhNjI4MjM5YzM2Li42ZWVjMDliMWVkMjJiOWFkMDY4ZTNmNjkyNGI1
OTI1NzQ1MTVkMTQ2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29y
ZVN1cHBvcnQvV2ViUGxhdGZvcm1TdHJhdGVnaWVzLmgKKysrIGIvU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYlBsYXRmb3JtU3RyYXRlZ2llcy5oCkBAIC03Niw2ICs3
Niw3IEBAIHByaXZhdGU6CiAgICAgUmVmUHRyPFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcj4gYnVmZmVy
Rm9yVHlwZShjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmRUeXBlLCBjb25zdCBTdHJpbmcmIHBhc3Rl
Ym9hcmROYW1lKSBvdmVycmlkZTsKICAgICB2b2lkIGdldFBhdGhuYW1lc0ZvclR5cGUoVmVjdG9y
PFN0cmluZz4mIHBhdGhuYW1lcywgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkVHlwZSwgY29uc3Qg
U3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSkgb3ZlcnJpZGU7CiAgICAgU3RyaW5nIHN0cmluZ0ZvclR5
cGUoY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkVHlwZSwgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJk
TmFtZSkgb3ZlcnJpZGU7CisgICAgVmVjdG9yPFN0cmluZz4gYWxsU3RyaW5nc0ZvclR5cGUoY29u
c3QgU3RyaW5nJiBwYXN0ZWJvYXJkVHlwZSwgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSkg
b3ZlcnJpZGU7CiAgICAgbG9uZyBjaGFuZ2VDb3VudChjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmRO
YW1lKSBvdmVycmlkZTsKICAgICBTdHJpbmcgdW5pcXVlTmFtZSgpIG92ZXJyaWRlOwogICAgIFdl
YkNvcmU6OkNvbG9yIGNvbG9yKGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUpIG92ZXJyaWRl
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViQ29yZVN1cHBvcnQvV2Vi
UGxhdGZvcm1TdHJhdGVnaWVzLmggYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJDb3JlU3Vw
cG9ydC9XZWJQbGF0Zm9ybVN0cmF0ZWdpZXMuaAppbmRleCBhOGQ5NjI2MzQ5NGE4ZjEyYTg1MTYw
OTJkNjNkNjM3N2IyNWMxZGI5Li43MzljOTUxZjZiZDdmZjU1ZjI5OTJhZGZmM2E1MDlhNmNlMTAw
NTk0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJDb3JlU3VwcG9ydC9X
ZWJQbGF0Zm9ybVN0cmF0ZWdpZXMuaAorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJD
b3JlU3VwcG9ydC9XZWJQbGF0Zm9ybVN0cmF0ZWdpZXMuaApAQCAtNzYsNiArNzYsNyBAQCBwcml2
YXRlOgogICAgIFJlZlB0cjxXZWJDb3JlOjpTaGFyZWRCdWZmZXI+IGJ1ZmZlckZvclR5cGUoY29u
c3QgU3RyaW5nJiBwYXN0ZWJvYXJkVHlwZSwgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSkg
b3ZlcnJpZGU7CiAgICAgdm9pZCBnZXRQYXRobmFtZXNGb3JUeXBlKFZlY3RvcjxTdHJpbmc+JiBw
YXRobmFtZXMsIGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZFR5cGUsIGNvbnN0IFN0cmluZyYgcGFz
dGVib2FyZE5hbWUpIG92ZXJyaWRlOwogICAgIFN0cmluZyBzdHJpbmdGb3JUeXBlKGNvbnN0IFN0
cmluZyYgcGFzdGVib2FyZFR5cGUsIGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUpIG92ZXJy
aWRlOworICAgIFZlY3RvcjxTdHJpbmc+IGFsbFN0cmluZ3NGb3JUeXBlKGNvbnN0IFN0cmluZyYg
cGFzdGVib2FyZFR5cGUsIGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUpIG92ZXJyaWRlOwog
ICAgIGxvbmcgY2hhbmdlQ291bnQoY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSkgb3ZlcnJp
ZGU7CiAgICAgU3RyaW5nIHVuaXF1ZU5hbWUoKSBvdmVycmlkZTsKICAgICBXZWJDb3JlOjpDb2xv
ciBjb2xvcihjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lKSBvdmVycmlkZTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYlBsYXRmb3JtU3Ry
YXRlZ2llcy5tbSBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYlBs
YXRmb3JtU3RyYXRlZ2llcy5tbQppbmRleCA5ZDU3OGEwYjk1N2YyNjEzMTA2ODg2NTI4NDFkY2Y5
ZWNiNzU0MjcwLi5iZDc1ODFmYTUwNDgxYzk4OTdjOWExZmNkZDMyMTkwZjY3ZjA2YjQ1IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJQbGF0Zm9y
bVN0cmF0ZWdpZXMubW0KKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViQ29yZVN1cHBv
cnQvV2ViUGxhdGZvcm1TdHJhdGVnaWVzLm1tCkBAIC0xMjMsNiArMTIzLDExIEBAIHZvaWQgV2Vi
UGxhdGZvcm1TdHJhdGVnaWVzOjpnZXRQYXRobmFtZXNGb3JUeXBlKFZlY3RvcjxTdHJpbmc+JiBw
YXRobmFtZXMsIGNvbnN0CiAgICAgUGxhdGZvcm1QYXN0ZWJvYXJkKHBhc3RlYm9hcmROYW1lKS5n
ZXRQYXRobmFtZXNGb3JUeXBlKHBhdGhuYW1lcywgcGFzdGVib2FyZFR5cGUpOwogfQogCitWZWN0
b3I8U3RyaW5nPiBXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6OmFsbFN0cmluZ3NGb3JUeXBlKGNvbnN0
IFN0cmluZyYgcGFzdGVib2FyZFR5cGUsIGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUpCit7
CisgICAgcmV0dXJuIFBsYXRmb3JtUGFzdGVib2FyZChwYXN0ZWJvYXJkTmFtZSkuYWxsU3RyaW5n
c0ZvclR5cGUocGFzdGVib2FyZFR5cGUpOworfQorCiBTdHJpbmcgV2ViUGxhdGZvcm1TdHJhdGVn
aWVzOjpzdHJpbmdGb3JUeXBlKGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZFR5cGUsIGNvbnN0IFN0
cmluZyYgcGFzdGVib2FyZE5hbWUpCiB7CiAgICAgcmV0dXJuIFBsYXRmb3JtUGFzdGVib2FyZChw
YXN0ZWJvYXJkTmFtZSkuc3RyaW5nRm9yVHlwZShwYXN0ZWJvYXJkVHlwZSk7CmRpZmYgLS1naXQg
YS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggN2Q4OThkNDE0Y2U2OGY4
MWEyM2UzYmQyMTU2Zjc1ZDNlMjMwZTkzOC4uM2YyYjQyMmFiYmM2ZWNmOTE3NmIzYTQzMDg1OWU1
Yjc4N2FhYzhjMCAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5n
ZUxvZwpAQCAtMSwzICsxLDQwIEBACisyMDE4LTA5LTAxICBXZW5zb24gSHNpZWggIDx3ZW5zb25f
aHNpZWhAYXBwbGUuY29tPgorCisgICAgICAgIFBvcHVsYXRlICJ0ZXh0L3VyaS1saXN0IiB3aXRo
IG11bHRpcGxlIFVSTHMgd2hlbiB0aGUgcGFzdGVib2FyZCBjb250YWlucyBtdWx0aXBsZSBVUkxz
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODg4OTAK
KyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzQzNjQ4NjA1PgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogRHVtcFJlbmRlclRyZWUvbWFjL0R1bXBSZW5k
ZXJUcmVlUGFzdGVib2FyZC5tbToKKyAgICAgICAgKC1bTG9jYWxQYXN0ZWJvYXJkIHBhc3RlYm9h
cmRJdGVtc10pOgorCisgICAgICAgIEltcGxlbWVudCB0aGlzIG1ldGhvZCB0byBhdm9pZCBjcmFz
aGluZyB3aGVuIHJ1bm5pbmcgbGF5b3V0IHRlc3RzIHRoYXQgYWNjZXNzIHRoZSBwYXN0ZWJvYXJk
LgorCisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9EcmFnQW5kRHJv
cFRlc3RzLm1tOgorCisgICAgICAgIEFkZCBhIHRlc3QgdG8gdmVyaWZ5IHRoYXQgb24gbWFjT1Mg
YW5kIGlPUywgbXVsdGlwbGUgVVJMcyBkcm9wcGVkIG9udG8gdGhlIHBhZ2UgYXJlIGFjY2Vzc2li
bGUgdmlhCisgICAgICAgICJ0ZXh0L3VyaS1saXN0Ii4KKworICAgICAgICAqIFRlc3RXZWJLaXRB
UEkvVGVzdHMvV2ViS2l0Q29jb2EvUGFzdGVNaXhlZENvbnRlbnQubW06CisKKyAgICAgICAgQWRk
IGEgdGVzdCB0aGF0IGV4ZXJjaXNlcyA1IGRpZmZlcmVudCB3YXlzIHRvIHdyaXRlIG9uZSBvciBt
b3JlIFVSTHMgdG8gdGhlIHBhc3RlYm9hcmQgb24gbWFjT1M7IGluIGFsbCBjYXNlcywKKyAgICAg
ICAgdGhlIFVSTHMgd3JpdHRlbiB0byB0aGUgcGFzdGVib2FyZCBzaG91bGQgYmUgZXhwb3NlZCB0
byB0aGUgcGFnZSB2aWEgInRleHQvdXJpLWxpc3QiLiBJbiBhbGwgb2YgdGhlc2UgZGlmZmVyZW50
CisgICAgICAgIGNhc2VzLCB0aGUgcmVzdWx0cyBvZiB1c2luZyBgLVtOU1Bhc3RlYm9hcmRJdGVt
IHN0cmluZ0ZvclR5cGU6XWAsIGAtW05TVVJMIFVSTEZyb21QYXN0ZWJvYXJkOl1gIGFuZAorICAg
ICAgICBgLVtOU1Bhc3RlYm9hcmQgc3RyaW5nRm9yVHlwZTpdYCB3aWxsIHlpZWxkIGRpZmZlcmVu
dCByZXN1bHRzLCBzbyB0aGUgcHVycG9zZSBvZiB0aGlzIEFQSSB0ZXN0IGlzIHRvIGVuc3VyZSB0
aGF0CisgICAgICAgIG91ciBsb2dpYyBmb3IgZ3JhYmJpbmcgYSBsaXN0IG9mIFVSTHMgZnJvbSB0
aGUgcGFzdGVib2FyZCBvbiBtYWNPUyBpcyByb2J1c3QgZW5vdWdoIHRvIGhhbmRsZSBhbGwgb2Yg
dGhlc2UKKyAgICAgICAgZGlmZmVyZW50IGJlaGF2aW9ycy4KKworICAgICAgICAqIFRlc3RXZWJL
aXRBUEkvVGVzdHMvaW9zL1VJUGFzdGVib2FyZFRlc3RzLm1tOgorCisgICAgICAgIEFkZCBhIHRl
c3QgdG8gdmVyaWZ5IHRoYXQgb24gaU9TLCB1c2luZyBgLVtVSVBhc3RlYm9hcmQgc2V0VVJMczpd
YCB0byB3cml0ZSB0byBtdWx0aXBsZSBVUkxzIHRvIHRoZSBwYXN0ZWJvYXJkCisgICAgICAgIGFu
ZCB0aGVuIHBhc3RpbmcgcmVzdWx0cyBpbiAidGV4dC91cmktbGlzdCIgZXhwb3NpbmcgYSBsaXN0
IG9mIGFsbCB0aGUgVVJMcyB3cml0dGVuIHRvIHRoZSBwYXN0ZWJvYXJkLgorCisgICAgICAgICog
V2ViS2l0VGVzdFJ1bm5lci9tYWMvV2ViS2l0VGVzdFJ1bm5lclBhc3RlYm9hcmQubW06CisgICAg
ICAgICgtW0xvY2FsUGFzdGVib2FyZCBwYXN0ZWJvYXJkSXRlbXNdKToKKworICAgICAgICBJbXBs
ZW1lbnQgdGhpcyBtZXRob2QgdG8gYXZvaWQgY3Jhc2hpbmcgd2hlbiBydW5uaW5nIGxheW91dCB0
ZXN0cyB0aGF0IGFjY2VzcyB0aGUgcGFzdGVib2FyZC4KKwogMjAxOC0wOC0zMSAgQWRpdHlhIEtl
ZXJ0aGkgIDxha2VlcnRoaUBhcHBsZS5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgYWRkIGFu
IGFsdGVybmF0ZSBlbWFpbCBmb3IgQWRpdHlhIEtlZXJ0aGkuCmRpZmYgLS1naXQgYS9Ub29scy9E
dW1wUmVuZGVyVHJlZS9tYWMvRHVtcFJlbmRlclRyZWVQYXN0ZWJvYXJkLm1tIGIvVG9vbHMvRHVt
cFJlbmRlclRyZWUvbWFjL0R1bXBSZW5kZXJUcmVlUGFzdGVib2FyZC5tbQppbmRleCBjZGQzMWIz
YmJiMzViYjg2MjUwZmVmYzBjYWJmMWM1NWMzNDFiY2FlLi5hZTI5YTk0NDIwZTcyZTg0MTQ0YzUw
NjFmM2IwYzczMWRkY2Q5NDU5IDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9tYWMv
RHVtcFJlbmRlclRyZWVQYXN0ZWJvYXJkLm1tCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL21h
Yy9EdW1wUmVuZGVyVHJlZVBhc3RlYm9hcmQubW0KQEAgLTIzNyw2ICsyMzcsMTcgQEAgc3RhdGlj
IFJldGFpblB0cjxDRlN0cmluZ1JlZj4gdG9VVEkoTlNTdHJpbmcgKnR5cGUpCiAgICAgcmV0dXJu
IFlFUzsKIH0KIAorLSAoTlNBcnJheTxOU1Bhc3RlYm9hcmRJdGVtICo+ICopcGFzdGVib2FyZEl0
ZW1zCit7CisgICAgYXV0byBpdGVtID0gYWRvcHROUyhbW05TUGFzdGVib2FyZEl0ZW0gYWxsb2Nd
IGluaXRdKTsKKyAgICBmb3IgKGF1dG8gdHlwZUFuZERhdGEgOiBfZGF0YSkgeworICAgICAgICBO
U0RhdGEgKmRhdGEgPSAoX19icmlkZ2UgTlNEYXRhICopdHlwZUFuZERhdGEudmFsdWUuZ2V0KCk7
CisgICAgICAgIE5TU3RyaW5nICp0eXBlID0gKF9fYnJpZGdlIE5TU3RyaW5nICopdHlwZUFuZERh
dGEua2V5LmdldCgpOworICAgICAgICBbaXRlbSBzZXREYXRhOmRhdGEgZm9yVHlwZTp0eXBlXTsK
KyAgICB9CisgICAgcmV0dXJuIEBbIGl0ZW0uZ2V0KCkgXTsKK30KKwogQGVuZAogCiAjZW5kaWYg
Ly8gUExBVEZPUk0oTUFDKQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9X
ZWJLaXRDb2NvYS9EcmFnQW5kRHJvcFRlc3RzLm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0
cy9XZWJLaXRDb2NvYS9EcmFnQW5kRHJvcFRlc3RzLm1tCmluZGV4IDE1ZTQxNDhmZGE0NzA3YmQ1
MmU4MjM2Nzc1MWU5MzZjMjM5MjZhMGYuLjk0YjVmNzA4ZTk2NzA0YjkwMDMxMTdlNTRkZTZjNTVh
MDA0MGM4ZjMgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29j
b2EvRHJhZ0FuZERyb3BUZXN0cy5tbQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dl
YktpdENvY29hL0RyYWdBbmREcm9wVGVzdHMubW0KQEAgLTQzLDYgKzQzLDM3IEBAIFRFU1QoRHJh
Z0FuZERyb3BUZXN0cywgRHJhZ0ltYWdlTG9jYXRpb25Gb3JMaW5rSW5TdWJmcmFtZSkKICNlbmRp
ZgogfQogCitURVNUKERyYWdBbmREcm9wVGVzdHMsIEV4cG9zZU11bHRpcGxlVVJMc0luRGF0YVRy
YW5zZmVyKQoreworICAgIGF1dG8gc2ltdWxhdG9yID0gYWRvcHROUyhbW0RyYWdBbmREcm9wU2lt
dWxhdG9yIGFsbG9jXSBpbml0V2l0aFdlYlZpZXdGcmFtZTpDR1JlY3RNYWtlKDAsIDAsIDMyMCwg
NTAwKV0pOworICAgIGF1dG8gd2ViVmlldyA9IFtzaW11bGF0b3Igd2ViVmlld107CisgICAgW3dl
YlZpZXcgc3luY2hyb25vdXNseUxvYWRUZXN0UGFnZU5hbWVkOkAiRGF0YVRyYW5zZmVyIl07CisK
KyAgICBOU1N0cmluZyAqc3RyaW5nRGF0YSA9IEAiSGVsbG8gd29ybGQiOworICAgIE5TVVJMICpm
aXJzdFVSTCA9IFtOU1VSTCBVUkxXaXRoU3RyaW5nOkAiaHR0cHM6Ly93ZWJraXQub3JnLyJdOwor
ICAgIE5TVVJMICpzZWNvbmRVUkwgPSBbTlNVUkwgVVJMV2l0aFN0cmluZzpAImh0dHBzOi8vYXBw
bGUuY29tLyJdOworCisjaWYgUExBVEZPUk0oTUFDKQorICAgIE5TUGFzdGVib2FyZCAqcGFzdGVi
b2FyZCA9IFtOU1Bhc3RlYm9hcmQgcGFzdGVib2FyZFdpdGhVbmlxdWVOYW1lXTsKKyAgICBbcGFz
dGVib2FyZCB3cml0ZU9iamVjdHM6QFsgc3RyaW5nRGF0YSwgZmlyc3RVUkwsIHNlY29uZFVSTCBd
XTsKKyAgICBbc2ltdWxhdG9yIHNldEV4dGVybmFsRHJhZ1Bhc3RlYm9hcmQ6cGFzdGVib2FyZF07
CisjZWxzZQorICAgIGF1dG8gc3RyaW5nSXRlbSA9IGFkb3B0TlMoW1tOU0l0ZW1Qcm92aWRlciBh
bGxvY10gaW5pdFdpdGhPYmplY3Q6c3RyaW5nRGF0YV0pOworICAgIGF1dG8gZmlyc3RVUkxJdGVt
ID0gYWRvcHROUyhbW05TSXRlbVByb3ZpZGVyIGFsbG9jXSBpbml0V2l0aE9iamVjdDpmaXJzdFVS
TF0pOworICAgIGF1dG8gc2Vjb25kVVJMSXRlbSA9IGFkb3B0TlMoW1tOU0l0ZW1Qcm92aWRlciBh
bGxvY10gaW5pdFdpdGhPYmplY3Q6c2Vjb25kVVJMXSk7CisgICAgZm9yIChOU0l0ZW1Qcm92aWRl
ciAqaXRlbSBpbiBAWyBzdHJpbmdJdGVtLmdldCgpLCBmaXJzdFVSTEl0ZW0uZ2V0KCksIHNlY29u
ZFVSTEl0ZW0uZ2V0KCkgXSkKKyAgICAgICAgaXRlbS5wcmVmZXJyZWRQcmVzZW50YXRpb25TdHls
ZSA9IFVJUHJlZmVycmVkUHJlc2VudGF0aW9uU3R5bGVJbmxpbmU7CisgICAgW3NpbXVsYXRvciBz
ZXRFeHRlcm5hbEl0ZW1Qcm92aWRlcnM6QFsgc3RyaW5nSXRlbS5nZXQoKSwgZmlyc3RVUkxJdGVt
LmdldCgpLCBzZWNvbmRVUkxJdGVtLmdldCgpIF1dOworI2VuZGlmCisKKyAgICBbc2ltdWxhdG9y
IHJ1bkZyb206Q0dQb2ludE1ha2UoMCwgMCkgdG86Q0dQb2ludE1ha2UoMTAwLCAxMDApXTsKKwor
ICAgIEVYUEVDVF9XS19TVFJFUSgidGV4dC9wbGFpbiwgdGV4dC91cmktbGlzdCIsIFt3ZWJWaWV3
IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJ0eXBlcy50ZXh0Q29udGVudCJdKTsKKyAg
ICBFWFBFQ1RfV0tfU1RSRVEoIihTVFJJTkcsIHRleHQvcGxhaW4pLCAoU1RSSU5HLCB0ZXh0L3Vy
aS1saXN0KSIsIFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJpdGVtcy50
ZXh0Q29udGVudCJdKTsKKyAgICBFWFBFQ1RfV0tfU1RSRVEoIkhlbGxvIHdvcmxkIiwgW3dlYlZp
ZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAInRleHREYXRhLnRleHRDb250ZW50Il0p
OworICAgIEVYUEVDVF9XS19TVFJFUSgiaHR0cHM6Ly93ZWJraXQub3JnL1xuaHR0cHM6Ly9hcHBs
ZS5jb20vIiwgW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAInVybERhdGEu
dGV4dENvbnRlbnQiXSk7Cit9CisKICNpZiBFTkFCTEUoSU5QVVRfVFlQRV9DT0xPUikKIAogVEVT
VChEcmFnQW5kRHJvcFRlc3RzLCBDb2xvcklucHV0VG9Db2xvcklucHV0KQpkaWZmIC0tZ2l0IGEv
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9QYXN0ZU1peGVkQ29udGVudC5t
bSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvUGFzdGVNaXhlZENvbnRl
bnQubW0KaW5kZXggYzVlNTBlMmRhYjc4M2M0MDZjOTRhZWZlMGIwZDNiZjY5ZWNkMmFmMC4uNzEz
MmEyZWM5YzY5M2U2ZWNjZTE1MmI0NTliM2Q4YmY4M2RjNzRiYiAxMDA2NDQKLS0tIGEvVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9QYXN0ZU1peGVkQ29udGVudC5tbQorKysg
Yi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1Bhc3RlTWl4ZWRDb250ZW50
Lm1tCkBAIC0yNTUsNiArMjU1LDUwIEBAIFRFU1QoUGFzdGVNaXhlZENvbnRlbnQsIFBhc3RlVVJM
V3JpdHRlblRvUGFzdGVib2FyZFVzaW5nV3JpdGVPYmplY3RzKQogICAgIEVYUEVDVF9XS19TVFJF
UShbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAiZG9jdW1lbnQucXVlcnlT
ZWxlY3RvcignYScpLnRleHRDb250ZW50Il0sIHVybFRvQ29weSk7CiB9CiAKK1RFU1QoUGFzdGVN
aXhlZENvbnRlbnQsIFBhc3RlT25lT3JNb3JlVVJMcykKK3sKKyAgICBOU1VSTCAqYXBwbGVVUkwg
PSBbTlNVUkwgVVJMV2l0aFN0cmluZzpAImh0dHBzOi8vd3d3LmFwcGxlLmNvbS8iXTsKKyAgICBO
U1VSTCAqd2ViS2l0VVJMID0gW05TVVJMIFVSTFdpdGhTdHJpbmc6QCJodHRwczovL3dlYmtpdC5v
cmcvIl07CisKKyAgICBhdXRvIHdlYlZpZXcgPSBzZXRVcFdlYlZpZXcoKTsKKyAgICBhdXRvIHJ1
blRlc3QgPSBbd2ViVmlld10gKE5TU3RyaW5nICpkZXNjcmlwdGlvbiwgTlNTdHJpbmcgKmV4cGVj
dGVkVVJMU3RyaW5nLCBGdW5jdGlvbjx2b2lkKE5TUGFzdGVib2FyZCAqKT4mJiB3cml0ZVVSTHNU
b1Bhc3RlYm9hcmQpIHsKKyAgICAgICAgTlNQYXN0ZWJvYXJkICpwYXN0ZWJvYXJkID0gW05TUGFz
dGVib2FyZCBnZW5lcmFsUGFzdGVib2FyZF07CisKKyAgICAgICAgW3Bhc3RlYm9hcmQgY2xlYXJD
b250ZW50c107CisgICAgICAgIHdyaXRlVVJMc1RvUGFzdGVib2FyZChwYXN0ZWJvYXJkKTsKKyAg
ICAgICAgW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAInJlc2V0KCk7IGRv
Y3VtZW50LmJvZHkuZm9jdXMoKSJdOworICAgICAgICBbd2ViVmlldyBwYXN0ZTpuaWxdOworCisg
ICAgICAgIEVYUEVDVF9XS19TVFJFUShleHBlY3RlZFVSTFN0cmluZywgW3dlYlZpZXcgc3RyaW5n
QnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAInVybERhdGEudGV4dENvbnRlbnQiXSk7CisgICAgICAg
IEVYUEVDVF9XS19TVFJFUSgiKFNUUklORywgdGV4dC91cmktbGlzdCkiLCBbd2ViVmlldyBzdHJp
bmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAiaXRlbXMudGV4dENvbnRlbnQiXSk7CisgICAgICAg
IEVYUEVDVF9XS19TVFJFUSgidGV4dC91cmktbGlzdCIsIFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVh
dGluZ0phdmFTY3JpcHQ6QCJ0eXBlcy50ZXh0Q29udGVudCJdKTsKKyAgICB9OworCisgICAgcnVu
VGVzdChAIldyaXRlIG11bHRpcGxlIFVSTHMuIiwgQCJodHRwczovL3d3dy5hcHBsZS5jb20vXG5o
dHRwczovL3dlYmtpdC5vcmcvIiwgXihOU1Bhc3RlYm9hcmQgKnBhc3RlYm9hcmQpIHsKKyAgICAg
ICAgW3Bhc3RlYm9hcmQgd3JpdGVPYmplY3RzOkBbYXBwbGVVUkwsIHdlYktpdFVSTF1dOworICAg
IH0pOworCisgICAgcnVuVGVzdChAIkRlY2xhcmUgbGVnYWN5IFVSTCBhbmQgd3JpdGUgVVJMIHRv
IHBhc3RlYm9hcmQuIiwgQCJodHRwczovL3d3dy5hcHBsZS5jb20vIiwgXihOU1Bhc3RlYm9hcmQg
KnBhc3RlYm9hcmQpIHsKKyAgICAgICAgW3Bhc3RlYm9hcmQgZGVjbGFyZVR5cGVzOkBbTlNVUkxQ
Ym9hcmRUeXBlXSBvd25lcjpuaWxdOworICAgICAgICBbYXBwbGVVUkwgd3JpdGVUb1Bhc3RlYm9h
cmQ6cGFzdGVib2FyZF07CisgICAgfSk7CisKKyAgICBydW5UZXN0KEAiRGVjbGFyZSBsZWdhY3kg
VVJMIGFuZCBzZXQgYSBVUkwgc3RyaW5nLiIsIEAiaHR0cHM6Ly93d3cuYXBwbGUuY29tLyIsIF4o
TlNQYXN0ZWJvYXJkICpwYXN0ZWJvYXJkKSB7CisgICAgICAgIFtwYXN0ZWJvYXJkIGRlY2xhcmVU
eXBlczpAW05TVVJMUGJvYXJkVHlwZV0gb3duZXI6bmlsXTsKKyAgICAgICAgW3Bhc3RlYm9hcmQg
c2V0U3RyaW5nOmFwcGxlVVJMLmFic29sdXRlU3RyaW5nIGZvclR5cGU6TlNVUkxQYm9hcmRUeXBl
XTsKKyAgICB9KTsKKworICAgIHJ1blRlc3QoQCJEZWNsYXJlIGxlZ2FjeSBVUkwgYW5kIHNldCBh
IHByb3BlcnR5IGxpc3QuIiwgQCJodHRwczovL3d3dy5hcHBsZS5jb20vIiwgXihOU1Bhc3RlYm9h
cmQgKnBhc3RlYm9hcmQpIHsKKyAgICAgICAgW3Bhc3RlYm9hcmQgZGVjbGFyZVR5cGVzOkBbTlNV
UkxQYm9hcmRUeXBlXSBvd25lcjpuaWxdOworICAgICAgICBbcGFzdGVib2FyZCBzZXRQcm9wZXJ0
eUxpc3Q6QFtAIi8iLCBAImh0dHBzOi8vd3d3LmFwcGxlLmNvbSJdIGZvclR5cGU6TlNVUkxQYm9h
cmRUeXBlXTsKKyAgICB9KTsKKworICAgIHJ1blRlc3QoQCJEZWNsYXJlIFVSTCBVVEkgYW5kIHNl
dCBhIFVSTCBzdHJpbmcuIiwgQCJodHRwczovL3d3dy5hcHBsZS5jb20vIiwgXihOU1Bhc3RlYm9h
cmQgKnBhc3RlYm9hcmQpIHsKKyAgICAgICAgW3Bhc3RlYm9hcmQgZGVjbGFyZVR5cGVzOkBbKF9f
YnJpZGdlIE5TU3RyaW5nICopa1VUVHlwZVVSTF0gb3duZXI6bmlsXTsKKyAgICAgICAgW3Bhc3Rl
Ym9hcmQgc2V0U3RyaW5nOmFwcGxlVVJMLmFic29sdXRlU3RyaW5nIGZvclR5cGU6KF9fYnJpZGdl
IE5TU3RyaW5nICopa1VUVHlwZVVSTF07CisgICAgfSk7Cit9CisKICNlbmRpZiAvLyBQTEFURk9S
TShNQUMpCiAKIFRFU1QoUGFzdGVNaXhlZENvbnRlbnQsIENvcHlBbmRQYXN0ZVdpdGhDdXN0b21Q
YXN0ZWJvYXJkRGF0YU9ubHkpCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3Rz
L2lvcy9VSVBhc3RlYm9hcmRUZXN0cy5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvaW9z
L1VJUGFzdGVib2FyZFRlc3RzLm1tCmluZGV4IDQzMzQ4NTU2MWU1MGQ1YzBjN2UyZGEwNDQ3OWVm
M2ZiM2E0NzA4MGYuLjFjMTlhMzc1YjkxMzQ5YmVkNmY5ODhlOGNiOThlOTZiNjZiNjdiYjIgMTAw
NjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvaW9zL1VJUGFzdGVib2FyZFRlc3Rz
Lm1tCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvaW9zL1VJUGFzdGVib2FyZFRlc3Rz
Lm1tCkBAIC0yNjcsNiArMjY3LDIyIEBAIFRFU1QoVUlQYXN0ZWJvYXJkVGVzdHMsIERhdGFUcmFu
c2ZlckdldERhdGFDYW5ub3RSZWFkQXJiaXRyYXJ5UGxhdGZvcm1UeXBlcykKICAgICB9KTsKIH0K
IAorVEVTVChVSVBhc3RlYm9hcmRUZXN0cywgRGF0YVRyYW5zZmVyVVJJTGlzdENvbnRhaW5zTXVs
dGlwbGVVUkxzKQoreworICAgIGF1dG8gd2ViVmlldyA9IHNldFVwV2ViVmlld0ZvclBhc3RlYm9h
cmRUZXN0cyhAIkRhdGFUcmFuc2ZlciIpOworCisgICAgTlNVUkwgKmZpcnN0VVJMID0gW05TVVJM
IFVSTFdpdGhTdHJpbmc6QCJodHRwczovL3d3dy5hcHBsZS5jb20vIl07CisgICAgTlNVUkwgKnNl
Y29uZFVSTCA9IFtOU1VSTCBVUkxXaXRoU3RyaW5nOkAiaHR0cHM6Ly93ZWJraXQub3JnLyJdOwor
ICAgIFtVSVBhc3RlYm9hcmQgZ2VuZXJhbFBhc3RlYm9hcmRdLlVSTHMgPSBAWyBmaXJzdFVSTCwg
c2Vjb25kVVJMIF07CisKKyAgICBbd2ViVmlldyBwYXN0ZTpuaWxdOworCisgICAgRVhQRUNUX1dL
X1NUUkVRKCJ0ZXh0L3VyaS1saXN0LCB0ZXh0L3BsYWluIiwgW3dlYlZpZXcgc3RyaW5nQnlFdmFs
dWF0aW5nSmF2YVNjcmlwdDpAInR5cGVzLnRleHRDb250ZW50Il0pOworICAgIEVYUEVDVF9XS19T
VFJFUSgiKFNUUklORywgdGV4dC91cmktbGlzdCksIChTVFJJTkcsIHRleHQvcGxhaW4pIiwgW3dl
YlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAIml0ZW1zLnRleHRDb250ZW50Il0p
OworICAgIEVYUEVDVF9XS19TVFJFUSgiaHR0cHM6Ly93d3cuYXBwbGUuY29tL1xuaHR0cHM6Ly93
ZWJraXQub3JnLyIsIFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJ1cmxE
YXRhLnRleHRDb250ZW50Il0pOworICAgIEVYUEVDVF9XS19TVFJFUSgiaHR0cHM6Ly93d3cuYXBw
bGUuY29tLyIsIFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJ0ZXh0RGF0
YS50ZXh0Q29udGVudCJdKTsKK30KKwogI2VuZGlmIC8vIF9fSVBIT05FX09TX1ZFUlNJT05fTUlO
X1JFUVVJUkVEID49IDExMDMwMAogCiB9IC8vIG5hbWVzcGFjZSBUZXN0V2ViS2l0QVBJCmRpZmYg
LS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL21hYy9XZWJLaXRUZXN0UnVubmVyUGFzdGVi
b2FyZC5tbSBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvbWFjL1dlYktpdFRlc3RSdW5uZXJQYXN0
ZWJvYXJkLm1tCmluZGV4IGFiY2RmNDE0NzUxN2VjYmU1ZmM1ZGJmNTdjNjVhYjFkNGFmZmI4NGIu
LjVlNWNhYzRlN2NmYjExOTBmODAzOGU2ZThhNzI5MGU5MmMxYWFmYTcgMTAwNjQ0Ci0tLSBhL1Rv
b2xzL1dlYktpdFRlc3RSdW5uZXIvbWFjL1dlYktpdFRlc3RSdW5uZXJQYXN0ZWJvYXJkLm1tCisr
KyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvbWFjL1dlYktpdFRlc3RSdW5uZXJQYXN0ZWJvYXJk
Lm1tCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSAiV2ViS2l0VGVzdFJ1bm5lclBhc3RlYm9h
cmQuaCIKIAogI2luY2x1ZGUgPG9iamMvcnVudGltZS5oPgorI2luY2x1ZGUgPHd0Zi9SZXRhaW5Q
dHIuaD4KIAogQGludGVyZmFjZSBMb2NhbFBhc3RlYm9hcmQgOiBOU1Bhc3RlYm9hcmQKIHsKQEAg
LTE5Nyw0ICsxOTgsMTIgQEAgc3RhdGljIE5TTXV0YWJsZURpY3Rpb25hcnkgKmxvY2FsUGFzdGVi
b2FyZHM7CiAgICAgcmV0dXJuIFtzZWxmIHNldERhdGE6W3N0cmluZyBkYXRhVXNpbmdFbmNvZGlu
ZzpOU1VURjhTdHJpbmdFbmNvZGluZ10gZm9yVHlwZTpkYXRhVHlwZV07CiB9CiAKKy0gKE5TQXJy
YXk8TlNQYXN0ZWJvYXJkSXRlbSAqPiAqKXBhc3RlYm9hcmRJdGVtcworeworICAgIGF1dG8gaXRl
bSA9IGFkb3B0TlMoW1tOU1Bhc3RlYm9hcmRJdGVtIGFsbG9jXSBpbml0XSk7CisgICAgZm9yIChO
U1N0cmluZyAqdHlwZSBpbiBkYXRhQnlUeXBlKQorICAgICAgICBbaXRlbSBzZXREYXRhOmRhdGFC
eVR5cGVbdHlwZV0gZm9yVHlwZTp0eXBlXTsKKyAgICByZXR1cm4gQFsgaXRlbS5nZXQoKSBdOwor
fQorCiBAZW5kCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>348756</attachid>
            <date>2018-09-02 21:27:43 -0700</date>
            <delta_ts>2018-09-03 11:25:27 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-188890-20180902212742.patch</filename>
            <type>text/plain</type>
            <size>43389</size>
            <attacher name="Wenson Hsieh">wenson_hsieh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjM1NTc5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggN2RlN2UyMzVhNDhiZGEz
NzNmOTNlMTk1NzgyZDdjNzgyOWUxMmRiYi4uNDNkYzM2MWI3NWU4NmZmZDVmYjQxNzA2MDcyNzUw
Yzg4NTA3YTFjYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEwMyBAQAorMjAxOC0wOS0wMiAgV2Vu
c29uIEhzaWVoICA8d2Vuc29uX2hzaWVoQGFwcGxlLmNvbT4KKworICAgICAgICBQb3B1bGF0ZSAi
dGV4dC91cmktbGlzdCIgd2l0aCBtdWx0aXBsZSBVUkxzIHdoZW4gdGhlIHBhc3RlYm9hcmQgY29u
dGFpbnMgbXVsdGlwbGUgVVJMcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTg4ODkwCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS80MzY0ODYwNT4KKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGRzIHN1cHBv
cnQgZm9yIGV4cG9zaW5nIGEgbmV3bGluZSBzZXBhcmF0ZWQgbGlzdCBvZiBVUkxzIHZpYSBEYXRh
VHJhbnNmZXIncyAidGV4dC91cmktbGlzdCIgdHlwZSB3aGVuIHBhc3RpbmcKKyAgICAgICAgb3Ig
ZHJvcHBpbmcgbXVsdGlwbGUgaXRlbXMgb24gdGhlIHBhc3RlYm9hcmQgdGhhdCBjYW4gYmUgcmVw
cmVzZW50ZWQgYXMgVVJMcy4gQ3VycmVudGx5IG9uIGlPUywgb25seSB0aGUgVVJMIG9mCisgICAg
ICAgIHRoZSBmaXJzdCBpdGVtIChpZiBwcmVzZW50KSBpcyBleHBvc2VkLCBhbmQgb24gbWFjT1Ms
IG9ubHkgdGhlIGZpcnN0IG91dCBvZiBhbGwgdGhlIFVSTHMgaW4gdGhlIHBhc3RlYm9hcmQgaXMK
KyAgICAgICAgZXhwb3NlZC4KKworICAgICAgICBUbyBmaXggdGhpcywgd2UgaW50cm9kdWNlIGBQ
YXN0ZWJvYXJkOjpyZWFkQWxsU3RyaW5nc2AsIHdoaWNoIHJlYWRzIGEgbGlzdCBvZiBwYXN0ZWJv
YXJkIHN0cmluZ3MgY29sbGVjdGVkIGZyb20KKyAgICAgICAgYWxsIGF2YWlsYWJsZSBpdGVtcyBv
biB0aGUgcGxhdGZvcm0gcGFzdGVib2FyZC4gQ3VycmVudGx5LCB0aGlzIGlzIG9ubHkgdXNlZCB0
byBwcm92aWRlIGEgbGlzdCBvZiBVUkwgc3RyaW5ncworICAgICAgICB3aGVuIGZldGNoaW5nIGRh
dGEgZm9yIHRoZSAidGV4dC91cmktbGlzdCIgdHlwZSB3aGVuIGNhbGxpbmcgYERhdGFUcmFuc2Zl
ci5nZXREYXRhKClgIGFuZAorICAgICAgICBgRGF0YVRyYW5zZmVySXRlbS5nZXRBc1N0cmluZygp
YC4KKworICAgICAgICBUZXN0czogIERyYWdBbmREcm9wVGVzdHMuRXhwb3NlTXVsdGlwbGVVUkxz
SW5EYXRhVHJhbnNmZXIKKyAgICAgICAgICAgICAgICBVSVBhc3RlYm9hcmRUZXN0cy5EYXRhVHJh
bnNmZXJVUklMaXN0Q29udGFpbnNNdWx0aXBsZVVSTHMKKyAgICAgICAgICAgICAgICBQYXN0ZU1p
eGVkQ29udGVudC5QYXN0ZU9uZU9yTW9yZVVSTHMKKworICAgICAgICAqIGRvbS9EYXRhVHJhbnNm
ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6cmVhZFVSTHNGcm9tUGFzdGVib2FyZEFzU3RyaW5n
KToKKworICAgICAgICBBZGQgYSBoZWxwZXIgbWV0aG9kIHRoYXQgcmVhZHMgYWxsIFVSTCBzdHJp
bmdzIGZyb20gdGhlIHBhc3RlYm9hcmQgKGZvciB0aGUgTUlNRSB0eXBlICJ0ZXh0L3VyaS1saXN0
Iiwgd2hpY2gKKyAgICAgICAgY29ycmVzcG9uZHMgdG8gTlNVUkxQYm9hcmRUeXBlIGFuZCAicHVi
bGljLnVybCIgb24gbWFjT1MgYW5kIGlPUywgcmVzcGVjdGl2ZWx5KSBhbmQgcmV0dXJucyBhIHNp
bmdsZSBzdHJpbmcKKyAgICAgICAgY29udGFpbmluZyBhbGwgbm9uLWVtcHR5IFVSTHMgam9pbmVk
IGJ5IG5ld2xpbmUgY2hhcmFjdGVycy4gQWxzbyB0YWtlcyBhIGZpbHRlcmluZyBibG9jayB3aGlj
aCBtYXkgYmUgdXNlZCB0bworICAgICAgICByZWplY3QgVVJMcyBmcm9tIGJlaW5nIGluY2x1ZGVk
IGluICJ0ZXh0L3VyaS1saXN0IiBvdXRwdXQuCisKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFUcmFu
c2Zlcjo6Z2V0RGF0YUZvckl0ZW0gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YVRyYW5z
ZmVyOjpyZWFkU3RyaW5nRnJvbVBhc3RlYm9hcmQgY29uc3QpOgorCisgICAgICAgIEluc3RlYWRp
bmcgb2YgcmVhZGluZyBhIHNpbmdsZSBzdHJpbmcgZnJvbSB0aGUgcGFzdGVib2FyZCBmb3IgInRl
eHQvdXJpLWxpc3QiLCBjYWxsIHRoZSBhYm92ZSBoZWxwZXIgZnVuY3Rpb24gdG8KKyAgICAgICAg
cmVhZCBhbGwgVVJMIHN0cmluZ3MgaW4gdGhlIHBhc3RlYm9hcmQuIElmIHRoZXJlIGFyZSBmaWxl
cyBwcmVzZW50IGluIHRoZSBwYXN0ZWJvYXJkLCB3ZSBhbHNvIGZpbHRlciBvdXQgVVJMcworICAg
ICAgICB3aG9zZSBzY2hlbWVzIGFyZSBub3QgaW4gdGhlIHNldCBvZiBzY2hlbWVzIHRoYXQgYXJl
IHNhZmUgdG8gZXhwb3NlIHRvIHRoZSBwYWdlIChpLmUuIGh0dHAocyksIGJsb2IsIGFuZCBkYXRh
KS4KKworICAgICAgICAqIHBsYXRmb3JtL1Bhc3RlYm9hcmQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6UGFzdGVib2FyZDo6cmVhZEFsbFN0cmluZ3MpOgorCisgICAgICAgIEFkZCBhIGRlZmF1bHQg
bm9uLUNvY29hIGltcGxlbWVudGF0aW9uIG9mIHJlYWRBbGxTdHJpbmdzKCkgdGhhdCByZXR1cm5z
IGEgdmVjdG9yLCB3aGljaCBtYXkgY29udGFpbiB0aGUgcmVzdWx0CisgICAgICAgIG9mIHJlYWRT
dHJpbmcoKS4KKworICAgICAgICAqIHBsYXRmb3JtL1Bhc3RlYm9hcmQuaDoKKyAgICAgICAgKiBw
bGF0Zm9ybS9QYXN0ZWJvYXJkU3RyYXRlZ3kuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9QbGF0Zm9y
bVBhc3RlYm9hcmQuaDoKKworICAgICAgICBBZGQgcGx1bWJpbmcgdG8gZ3JhYiBhIGxpc3Qgb2Yg
c3RyaW5ncyBmcm9tIHRoZSBwYXN0ZWJvYXJkIGZvciBhIGdpdmVuIHR5cGUuCisKKyAgICAgICAg
KiBwbGF0Zm9ybS9jb2NvYS9QYXN0ZWJvYXJkQ29jb2EubW06CisgICAgICAgIChXZWJDb3JlOjpQ
YXN0ZWJvYXJkOjpyZWFkQWxsU3RyaW5ncyk6CisgICAgICAgIChXZWJDb3JlOjpQYXN0ZWJvYXJk
OjpyZWFkU3RyaW5nKToKKworICAgICAgICBJbXBsZW1lbnQgdGhlc2UgdHdvIG1ldGhvZHMgaW4g
dGVybXMgb2YgYHJlYWRQbGF0Zm9ybVZhbHVlc0FzU3RyaW5nc2AuIGByZWFkQWxsU3RyaW5nc2Ag
cmV0dXJucyB0aGUgZnVsbCBsaXN0IG9mCisgICAgICAgIHJlc3VsdHMsIHdoaWxlIGByZWFkU3Ry
aW5nYCBvbmx5IHJldHVybnMgdGhlIGZpcnN0IHJlc3VsdC4KKworICAgICAgICAqIHBsYXRmb3Jt
L2lvcy9QYXN0ZWJvYXJkSU9TLm1tOgorICAgICAgICAoV2ViQ29yZTo6UGFzdGVib2FyZDo6cmVh
ZFBsYXRmb3JtVmFsdWVzQXNTdHJpbmdzKToKKyAgICAgICAgKFdlYkNvcmU6OlBhc3RlYm9hcmQ6
OnJlYWRQbGF0Zm9ybVZhbHVlQXNTdHJpbmcpOiBEZWxldGVkLgorCisgICAgICAgIFJlZmFjdG9y
IHRoaXMgQ29jb2EgaGVscGVyIGZ1bmN0aW9uIHRvIHJldHVybiBhIGxpc3Qgb2YgcGFzdGVib2Fy
ZCBzdHJpbmcgdmFsdWVzIGZvciB0aGUgZ2l2ZW4gdHlwZSwgcmF0aGVyIHRoYW4KKyAgICAgICAg
YSBzaW5nbGUgc3RyaW5nLgorCisgICAgICAgICogcGxhdGZvcm0vaW9zL1BsYXRmb3JtUGFzdGVi
b2FyZElPUy5tbToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtUGFzdGVib2FyZDo6YWxsU3Ry
aW5nc0ZvclR5cGUgY29uc3QpOgorCisgICAgICAgIEdyYWIgYSBzdHJpbmcgZm9yIGVhY2ggaXRl
bSAocmVwcmVzZW50ZWQgYnkgYW4gTlNJdGVtUHJvdmlkZXIpIGluIHRoZSBwYXN0ZWJvYXJkIHRo
YXQgaGFzIGRhdGEgZm9yIHRoZSBnaXZlbgorICAgICAgICB0eXBlIGlkZW50aWZpZXIuCisKKyAg
ICAgICAgKiBwbGF0Zm9ybS9tYWMvUGFzdGVib2FyZE1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6
OlBhc3RlYm9hcmQ6OnJlYWRQbGF0Zm9ybVZhbHVlc0FzU3RyaW5ncyk6CisgICAgICAgIChXZWJD
b3JlOjpQYXN0ZWJvYXJkOjpyZWFkUGxhdGZvcm1WYWx1ZUFzU3RyaW5nKTogRGVsZXRlZC4KKwor
ICAgICAgICBBbHNvIHJlZmFjdG9yIHRoaXMgdG8gcmV0cmlldmUgYSBsaXN0IG9mIHBhc3RlYm9h
cmQgc3RyaW5ncywgcmF0aGVyIHRoYW4gYSBzaW5nbGUgcmVzdWx0LgorCisgICAgICAgICogcGxh
dGZvcm0vbWFjL1BsYXRmb3JtUGFzdGVib2FyZE1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6OnR5
cGVJZGVudGlmaWVyRm9yUGFzdGVib2FyZFR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZv
cm1QYXN0ZWJvYXJkOjphbGxTdHJpbmdzRm9yVHlwZSBjb25zdCk6CisKKyAgICAgICAgQWRkIGFu
IGltcGxlbWVudGF0aW9uIGZvciBgYWxsU3RyaW5nc0ZvclR5cGVgIG9uIG1hY09TLiBVbmxpa2Ug
aU9TLCBpdCdzIG11Y2ggdHJpY2tpZXIgdG8gZ2V0IHRoaXMgcmlnaHQgc2luY2UKKyAgICAgICAg
d2UgbmVlZCB0byBtYWludGFpbiBjb21wYXRpYmlsaXR5IHdpdGggbGVnYWN5ICJOUypQYm9hcmQi
IHR5cGVzLCBhbmQgYE5TUGFzdGVib2FyZEl0ZW1gIGNhbiBvbmx5IHByb3ZpZGUgZGF0YQorICAg
ICAgICBmb3IgYE5TUGFzdGVib2FyZFR5cGVgcyAoaS5lLiBVVElzKSwgc28gdGhlcmUncyBubyB3
YXkgdG8ganVzdCBpdGVyYXRlIHRocm91Z2ggZWFjaCBwYXN0ZWJvYXJkIGl0ZW0gYW5kIGFzayBp
dAorICAgICAgICBmb3IgZGF0YSB0aGF0IG1hdGNoZXMgdGhlIGdpdmVuIHR5cGUsIGlmIHRoZSB0
eXBlcyBhcmUgbm90IFVUSXMuIEhvd2V2ZXIsIGluIHRoZSBjYXNlIHdoZXJlIHdlIGhhdmUgbXVs
dGlwbGUKKyAgICAgICAgaXRlbXMsIHRoZSBjbGllbnQgbXVzdCBoYXZlIHVzZWQgTlNQYXN0ZWJv
YXJkV3JpdGluZy1jb25mb3JtYW50IG9iamVjdHMgYW5kL29yIE5TUGFzdGVib2FyZEl0ZW0gaXRz
ZWxmIHRvIHdyaXRlCisgICAgICAgIGRhdGEgdG8gdGhlIHBhc3RlYm9hcmQuIFNpbmNlIE5TUGFz
dGVib2FyZFdyaXRpbmctY29uZm9ybWFudCBvYmplY3RzIHJlZ2lzdGVyIG1vZGVybiBwYXN0ZWJv
YXJkIHR5cGVzIHdoZW4KKyAgICAgICAgd3JpdGluZyB0byB0aGUgcGFzdGVib2FyZCwgd2UgY2Fu
IHNpbXBseSBpdGVyYXRlIG92ZXIgdGhlc2UgcGFzdGVib2FyZCBpdGVtcyBhbmQgYXNrIGZvciBz
dHJpbmcgdmFsdWVzIHVzaW5nCisgICAgICAgIHR5cGUgaWRlbnRpZmllcnMgaW5zdGVhZCBvZiBo
YXZpbmcgdG8gd29ycnkgYWJvdXQgbGVnYWN5IHBhc3RlYm9hcmQgdHlwZXMuIEZ1cnRoZXJtb3Jl
LCBpbiB0aGUgY2FzZSB3aGVyZSB0aGVyZQorICAgICAgICBpcyBvbmx5IGEgc2luZ2xlIGl0ZW0g
aW4gdGhlIHBhc3RlYm9hcmQgYW5kIHdlIGRvIG5lZWQgdG8gaGFuZGxlIGxlZ2FjeSBwYXN0ZWJv
YXJkIHR5cGVzLCB1c2luZyBgLVtOU1Bhc3RlYm9hcmQKKyAgICAgICAgc3RyaW5nRm9yVHlwZTpd
YCBpbiB0aGUgc2FtZSB3YXkgd2UgZG8gY3VycmVudGx5IHNob3VsZCB5aWVsZCB0aGUgY29ycmVj
dCByZXN1bHQuCisKKyAgICAgICAgQXMgc3VjaCwgaW4gdGhlIGNhc2Ugd2hlcmUgdGhlcmUgaXMg
YSBzaW5nbGUgcGFzdGVib2FyZCBpdGVtLCB3ZSB1c2UgYC1bTlNQYXN0ZWJvYXJkIHN0cmluZ0Zv
clR5cGU6XWAgd2l0aCB0aGUKKyAgICAgICAgb3JpZ2luYWwgbGVnYWN5IHR5cGUsIGFuZCBpbiB0
aGUgY2FzZSB3aGVyZSB0aGVyZSBhcmUgbXVsdGlwbGUgaXRlbXMgb24gdGhlIHBhc3RlYm9hcmQs
IHdlIGl0ZXJhdGUgb3ZlciBlYWNoIG9mCisgICAgICAgIHRoZSBwYXN0ZWJvYXJkIGl0ZW1zIGFu
ZCBjYWxsIGAtW05TUGFzdGVib2FyZEl0ZW0gc3RyaW5nRm9yVHlwZTpdYCB3aXRoIHRoZSBtb2Rl
cm4gcGFzdGVib2FyZCB0eXBlIGNvcnJlc3BvbmRpbmcKKyAgICAgICAgdG8gdGhlIGdpdmVuIGxl
Z2FjeSBwYXN0ZWJvYXJkIHR5cGUuCisKKyAgICAgICAgVGhlIGRpZmZlcmVudCBjb3JuZXIgY2Fz
ZXMgaW4gdGhpcyBsb2dpYyBhcmUgdGVzdGVkIGJ5IHRoZSBuZXcgQVBJIHRlc3QsIFBhc3RlTWl4
ZWRDb250ZW50LlBhc3RlT25lT3JNb3JlVVJMcywKKyAgICAgICAgd2hpY2ggZXhlcmNpc2VzIHNl
dmVyYWwgZGlmZmVyZW50IHdheXMgb2Ygd3JpdGluZyBvbmUgb3IgbW9yZSBVUkxzIHRvIHRoZSBw
YXN0ZWJvYXJkIG9uIG1hY09TLCB3aGljaCBlYWNoIHJlc3VsdAorICAgICAgICBpbiBkaWZmZXJl
bnQgbGVnYWN5IGFuZCBtb2Rlcm4gcGFzdGVib2FyZCB0eXBlcyBiZWluZyB3cml0dGVuIHRvIHRo
ZSBwYXN0ZWJvYXJkOyBvdXIgaW1wbGVtZW50YXRpb24gb2YKKyAgICAgICAgYFBsYXRmb3JtUGFz
dGVib2FyZDo6YWxsU3RyaW5nc0ZvclR5cGVgIG9uIG1hY09TIGhhbmRsZXMgYWxsIGNhc2VzIGNv
cnJlY3RseS4KKwogMjAxOC0wOC0zMSAgWW91ZW5uIEZhYmxldCAgPHlvdWVubkBhcHBsZS5jb20+
CiAKICAgICAgICAgTW92ZSBzdGF0cyBnYXRoZXJpbmcgb3V0IG9mIExpYldlYlJUQ01lZGlhRW5k
cG9pbnQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktp
dC9DaGFuZ2VMb2cKaW5kZXggZmMwM2E1NjUxYzI2MGNhY2YwMDA5M2E5OWM1YTJhYzhmMGM3NTM0
My4uZjdhZGZiOTdkNmEwNmU5ZDY3MWM0OWQ4MmJiNjQzMzM4NzQ2NGQ1OSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKQEAg
LTEsMyArMSwyMiBAQAorMjAxOC0wOS0wMiAgV2Vuc29uIEhzaWVoICA8d2Vuc29uX2hzaWVoQGFw
cGxlLmNvbT4KKworICAgICAgICBQb3B1bGF0ZSAidGV4dC91cmktbGlzdCIgd2l0aCBtdWx0aXBs
ZSBVUkxzIHdoZW4gdGhlIHBhc3RlYm9hcmQgY29udGFpbnMgbXVsdGlwbGUgVVJMcworICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTg4ODkwCisgICAgICAg
IDxyZGFyOi8vcHJvYmxlbS80MzY0ODYwNT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBBZGQgc29tZSBwbHVtYmluZyB0aHJvdWdoIHBhc3RlYm9hcmQg
Y2xhc3NlcyB0byBzdXBwb3J0IGBQYXN0ZWJvYXJkOjpyZWFkQWxsU3RyaW5nc2AuIFNlZSBXZWJD
b3JlIENoYW5nZUxvZyBmb3IKKyAgICAgICAgbW9yZSBkZXRhaWwuCisKKyAgICAgICAgKiBVSVBy
b2Nlc3MvQ29jb2EvV2ViUGFzdGVib2FyZFByb3h5Q29jb2EubW06CisgICAgICAgIChXZWJLaXQ6
OldlYlBhc3RlYm9hcmRQcm94eTo6Z2V0UGFzdGVib2FyZFN0cmluZ3NGb3JUeXBlKToKKyAgICAg
ICAgKiBVSVByb2Nlc3MvV2ViUGFzdGVib2FyZFByb3h5Lmg6CisgICAgICAgICogVUlQcm9jZXNz
L1dlYlBhc3RlYm9hcmRQcm94eS5tZXNzYWdlcy5pbjoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dl
YkNvcmVTdXBwb3J0L1dlYlBsYXRmb3JtU3RyYXRlZ2llcy5jcHA6CisgICAgICAgIChXZWJLaXQ6
OldlYlBsYXRmb3JtU3RyYXRlZ2llczo6YWxsU3RyaW5nc0ZvclR5cGUpOgorICAgICAgICAqIFdl
YlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViUGxhdGZvcm1TdHJhdGVnaWVzLmg6CisKIDIwMTgt
MDgtMzEgIEpvaG4gV2lsYW5kZXIgIDx3aWxhbmRlckBhcHBsZS5jb20+CiAKICAgICAgICAgU3Rv
cmFnZSBBY2Nlc3MgQVBJOiBNYWludGFpbiBhY2Nlc3MgdGhyb3VnaCBzYW1lLXNpdGUgbmF2aWdh
dGlvbnMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZyBiL1Nv
dXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZwppbmRleCA5YjFkNTc5MDc2OGVhYTBhYWQ3
MTg2MWNkNjVmNzdkNGU0ODJhMjg1Li40YjhhMTU4ZGU4ZjFmNTgxOWIzOTZmZWQxZGQxZmJkZTA2
YzdkNDFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cKKysr
IGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTggQEAKKzIw
MTgtMDktMDIgIFdlbnNvbiBIc2llaCAgPHdlbnNvbl9oc2llaEBhcHBsZS5jb20+CisKKyAgICAg
ICAgUG9wdWxhdGUgInRleHQvdXJpLWxpc3QiIHdpdGggbXVsdGlwbGUgVVJMcyB3aGVuIHRoZSBw
YXN0ZWJvYXJkIGNvbnRhaW5zIG11bHRpcGxlIFVSTHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4ODg5MAorICAgICAgICA8cmRhcjovL3Byb2JsZW0v
NDM2NDg2MDU+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgQWRkIHNvbWUgcGx1bWJpbmcgdGhyb3VnaCBwYXN0ZWJvYXJkIGNsYXNzZXMgdG8gc3VwcG9y
dCBgUGFzdGVib2FyZDo6cmVhZEFsbFN0cmluZ3NgLiBTZWUgV2ViQ29yZSBDaGFuZ2VMb2cgZm9y
CisgICAgICAgIG1vcmUgZGV0YWlsLgorCisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvV2ViUGxh
dGZvcm1TdHJhdGVnaWVzLmg6CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvV2ViUGxhdGZvcm1T
dHJhdGVnaWVzLm1tOgorICAgICAgICAoV2ViUGxhdGZvcm1TdHJhdGVnaWVzOjphbGxTdHJpbmdz
Rm9yVHlwZSk6CisKIDIwMTgtMDgtMzEgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4K
IAogICAgICAgICBBc3NlcnRpb24gaGl0IGluIH5Db21wbGV0aW9uSGFuZGxlcigpIGZyb20gfldl
YkZyYW1lKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9EYXRhVHJhbnNmZXIuY3Bw
IGIvU291cmNlL1dlYkNvcmUvZG9tL0RhdGFUcmFuc2Zlci5jcHAKaW5kZXggNTE0MWY0NzJmZTli
NDkxNWU4YmE0NjdmMzc1YTgzMjI2MDVmNzg3ZC4uNmQzOWRhNDU1ZDQyZjMzODJkYzc0MjVkYWQ4
MDA3YmZkNjcwN2I5ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0RhdGFUcmFuc2Zl
ci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0RhdGFUcmFuc2Zlci5jcHAKQEAgLTQ3LDYg
KzQ3LDcgQEAKICNpbmNsdWRlICJXZWJDb250ZW50UmVhZGVyLmgiCiAjaW5jbHVkZSAiV2ViQ29y
ZVBhc3RlYm9hcmRGaWxlUmVhZGVyLmgiCiAjaW5jbHVkZSAibWFya3VwLmgiCisjaW5jbHVkZSA8
d3RmL3VuaWNvZGUvQ2hhcmFjdGVyTmFtZXMuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBA
IC0xNDIsNiArMTQzLDE5IEBAIHZvaWQgRGF0YVRyYW5zZmVyOjpjbGVhckRhdGEoY29uc3QgU3Ry
aW5nJiB0eXBlKQogICAgICAgICBtX2l0ZW1MaXN0LT5kaWRDbGVhclN0cmluZ0RhdGEobm9ybWFs
aXplZFR5cGUpOwogfQogCitzdGF0aWMgU3RyaW5nIHJlYWRVUkxzRnJvbVBhc3RlYm9hcmRBc1N0
cmluZyhQYXN0ZWJvYXJkJiBwYXN0ZWJvYXJkLCBGdW5jdGlvbjxib29sKGNvbnN0IFN0cmluZyYp
PiYmIHNob3VsZEluY2x1ZGVVUkwpCit7CisgICAgU3RyaW5nQnVpbGRlciB1cmxMaXN0OworICAg
IGZvciAoYXV0byB1cmxTdHJpbmcgOiBwYXN0ZWJvYXJkLnJlYWRBbGxTdHJpbmdzKCJ0ZXh0L3Vy
aS1saXN0Il9zKSkgeworICAgICAgICBpZiAoIXNob3VsZEluY2x1ZGVVUkwodXJsU3RyaW5nKSkK
KyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBpZiAoIXVybExpc3QuaXNFbXB0eSgpKQor
ICAgICAgICAgICAgdXJsTGlzdC5hcHBlbmQobmV3bGluZUNoYXJhY3Rlcik7CisgICAgICAgIHVy
bExpc3QuYXBwZW5kKHVybFN0cmluZyk7CisgICAgfQorICAgIHJldHVybiB1cmxMaXN0LnRvU3Ry
aW5nKCk7Cit9CisKIFN0cmluZyBEYXRhVHJhbnNmZXI6OmdldERhdGFGb3JJdGVtKERvY3VtZW50
JiBkb2N1bWVudCwgY29uc3QgU3RyaW5nJiB0eXBlKSBjb25zdAogewogICAgIGlmICghY2FuUmVh
ZERhdGEoKSkKQEAgLTE1MCw5ICsxNjQsOSBAQCBTdHJpbmcgRGF0YVRyYW5zZmVyOjpnZXREYXRh
Rm9ySXRlbShEb2N1bWVudCYgZG9jdW1lbnQsIGNvbnN0IFN0cmluZyYgdHlwZSkgY29ucwogICAg
IGF1dG8gbG93ZXJjYXNlVHlwZSA9IHN0cmlwTGVhZGluZ0FuZFRyYWlsaW5nSFRNTFNwYWNlcyh0
eXBlKS5jb252ZXJ0VG9BU0NJSUxvd2VyY2FzZSgpOwogICAgIGlmIChzaG91bGRTdXBwcmVzc0dl
dEFuZFNldERhdGFUb0F2b2lkRXhwb3NpbmdGaWxlUGF0aHMoKSkgewogICAgICAgICBpZiAobG93
ZXJjYXNlVHlwZSA9PSAidGV4dC91cmktbGlzdCIpIHsKLSAgICAgICAgICAgIGF1dG8gdXJsU3Ry
aW5nID0gbV9wYXN0ZWJvYXJkLT5yZWFkU3RyaW5nKGxvd2VyY2FzZVR5cGUpOwotICAgICAgICAg
ICAgaWYgKFBhc3RlYm9hcmQ6OmNhbkV4cG9zZVVSTFRvRE9NV2hlblBhc3RlYm9hcmRDb250YWlu
c0ZpbGVzKHVybFN0cmluZykpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHVybFN0cmluZzsKKyAg
ICAgICAgICAgIHJldHVybiByZWFkVVJMc0Zyb21QYXN0ZWJvYXJkQXNTdHJpbmcoKm1fcGFzdGVi
b2FyZCwgW10gKGF1dG8mIHVybFN0cmluZykgeworICAgICAgICAgICAgICAgIHJldHVybiBQYXN0
ZWJvYXJkOjpjYW5FeHBvc2VVUkxUb0RPTVdoZW5QYXN0ZWJvYXJkQ29udGFpbnNGaWxlcyh1cmxT
dHJpbmcpOworICAgICAgICAgICAgfSk7CiAgICAgICAgIH0KIAogICAgICAgICBpZiAobG93ZXJj
YXNlVHlwZSA9PSAidGV4dC9odG1sIiAmJiBSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRG
ZWF0dXJlcygpLmN1c3RvbVBhc3RlYm9hcmREYXRhRW5hYmxlZCgpKSB7CkBAIC0xOTIsNiArMjA2
LDEyIEBAIFN0cmluZyBEYXRhVHJhbnNmZXI6OnJlYWRTdHJpbmdGcm9tUGFzdGVib2FyZChEb2N1
bWVudCYgZG9jdW1lbnQsIGNvbnN0IFN0cmluZyYKICAgICAgICAgcmV0dXJuIHJlYWRlci5tYXJr
dXA7CiAgICAgfQogCisgICAgaWYgKCFpczxTdGF0aWNQYXN0ZWJvYXJkPigqbV9wYXN0ZWJvYXJk
KSAmJiBsb3dlcmNhc2VUeXBlID09ICJ0ZXh0L3VyaS1saXN0IikgeworICAgICAgICByZXR1cm4g
cmVhZFVSTHNGcm9tUGFzdGVib2FyZEFzU3RyaW5nKCptX3Bhc3RlYm9hcmQsIFtdIChhdXRvJikg
eworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0pOworICAgIH0KKwogICAgIHJl
dHVybiBtX3Bhc3RlYm9hcmQtPnJlYWRTdHJpbmcobG93ZXJjYXNlVHlwZSk7CiB9CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Bhc3RlYm9hcmQuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vUGFzdGVib2FyZC5jcHAKaW5kZXggMThmZGViMmQ5ZTg1ZDdlOTE2MjFh
NDU1ZGYzZTdmOWM1YTk0MGQyOC4uNzM3YTM5MDQyNTdkZTY0M2JjMGQ5YWI5OWJjMjY0YTMxNGZk
NmZmNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUGFzdGVib2FyZC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUGFzdGVib2FyZC5jcHAKQEAgLTg1LDQgKzg1
LDE3IEBAIFBhc3RlYm9hcmRDdXN0b21EYXRhIFBhc3RlYm9hcmRDdXN0b21EYXRhOjpmcm9tU2hh
cmVkQnVmZmVyKGNvbnN0IFNoYXJlZEJ1ZmZlciYKICAgICByZXR1cm4gcmVzdWx0OwogfQogCisj
aWYgIVBMQVRGT1JNKENPQ09BKQorCitWZWN0b3I8U3RyaW5nPiBQYXN0ZWJvYXJkOjpyZWFkQWxs
U3RyaW5ncyhjb25zdCBTdHJpbmcmIHR5cGUpCit7CisgICAgYXV0byByZXN1bHQgPSByZWFkU3Ry
aW5nKHR5cGUpOworICAgIGlmIChyZXN1bHQuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4geyB9
OworCisgICAgcmV0dXJuIHsgcmVzdWx0IH07Cit9CisKKyNlbmRpZgorCiB9OwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUGFzdGVib2FyZC5oIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vUGFzdGVib2FyZC5oCmluZGV4IGUwOTgxNTY1MWJkMmQ2MDU3NGRhNDIzNmMzODBm
YWQ0ZDYwMjE1YTkuLjIwNjM1YWIwMjk0ZjI5OTdlMjhmYmZmZDUwOTg2OTQ4YTk5YjYwMzAgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Bhc3RlYm9hcmQuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9QYXN0ZWJvYXJkLmgKQEAgLTIwNCw2ICsyMDQsNyBAQCBwdWJs
aWM6CiAgICAgdmlydHVhbCBXRUJDT1JFX0VYUE9SVCBTdHJpbmcgcmVhZE9yaWdpbigpOwogICAg
IHZpcnR1YWwgV0VCQ09SRV9FWFBPUlQgU3RyaW5nIHJlYWRTdHJpbmcoY29uc3QgU3RyaW5nJiB0
eXBlKTsKICAgICB2aXJ0dWFsIFdFQkNPUkVfRVhQT1JUIFN0cmluZyByZWFkU3RyaW5nSW5DdXN0
b21EYXRhKGNvbnN0IFN0cmluZyYgdHlwZSk7CisgICAgdmlydHVhbCBXRUJDT1JFX0VYUE9SVCBW
ZWN0b3I8U3RyaW5nPiByZWFkQWxsU3RyaW5ncyhjb25zdCBTdHJpbmcmIHR5cGUpOwogCiAgICAg
dmlydHVhbCBXRUJDT1JFX0VYUE9SVCB2b2lkIHdyaXRlU3RyaW5nKGNvbnN0IFN0cmluZyYgdHlw
ZSwgY29uc3QgU3RyaW5nJiBkYXRhKTsKICAgICB2aXJ0dWFsIFdFQkNPUkVfRVhQT1JUIHZvaWQg
Y2xlYXIoKTsKQEAgLTI5OCw3ICsyOTksNyBAQCBwcml2YXRlOgogCiAjaWYgUExBVEZPUk0oQ09D
T0EpCiAgICAgVmVjdG9yPFN0cmluZz4gcmVhZEZpbGVQYXRocygpOwotICAgIFN0cmluZyByZWFk
UGxhdGZvcm1WYWx1ZUFzU3RyaW5nKGNvbnN0IFN0cmluZyYgZG9tVHlwZSwgbG9uZyBjaGFuZ2VD
b3VudCwgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSk7CisgICAgVmVjdG9yPFN0cmluZz4g
cmVhZFBsYXRmb3JtVmFsdWVzQXNTdHJpbmdzKGNvbnN0IFN0cmluZyYgZG9tVHlwZSwgbG9uZyBj
aGFuZ2VDb3VudCwgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSk7CiAgICAgc3RhdGljIHZv
aWQgYWRkSFRNTENsaXBib2FyZFR5cGVzRm9yQ29jb2FUeXBlKExpc3RIYXNoU2V0PFN0cmluZz4m
IHJlc3VsdFR5cGVzLCBjb25zdCBTdHJpbmcmIGNvY29hVHlwZSk7CiAgICAgU3RyaW5nIHJlYWRT
dHJpbmdGb3JQbGF0Zm9ybVR5cGUoY29uc3QgU3RyaW5nJik7CiAgICAgVmVjdG9yPFN0cmluZz4g
cmVhZFR5cGVzV2l0aFNlY3VyaXR5Q2hlY2soKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL1Bhc3RlYm9hcmRTdHJhdGVneS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
UGFzdGVib2FyZFN0cmF0ZWd5LmgKaW5kZXggOWQ4MjdjMDFmODVjYzAyYjIxNjk1ZDliMmU3YmNh
MTViNGI5ZmQwNS4uOTlkOGRkZmZhZTAwZWFjZTFhNjMyY2IwZDNmNTM4MWEyM2ZhMzY1YyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUGFzdGVib2FyZFN0cmF0ZWd5LmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUGFzdGVib2FyZFN0cmF0ZWd5LmgKQEAgLTYxLDYg
KzYxLDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gYnVmZmVy
Rm9yVHlwZShjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmRUeXBlLCBjb25zdCBTdHJpbmcmIHBhc3Rl
Ym9hcmROYW1lKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGdldFBhdGhuYW1lc0ZvclR5cGUoVmVj
dG9yPFN0cmluZz4mIHBhdGhuYW1lcywgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkVHlwZSwgY29u
c3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSkgPSAwOwogICAgIHZpcnR1YWwgU3RyaW5nIHN0cmlu
Z0ZvclR5cGUoY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkVHlwZSwgY29uc3QgU3RyaW5nJiBwYXN0
ZWJvYXJkTmFtZSkgPSAwOworICAgIHZpcnR1YWwgVmVjdG9yPFN0cmluZz4gYWxsU3RyaW5nc0Zv
clR5cGUoY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkVHlwZSwgY29uc3QgU3RyaW5nJiBwYXN0ZWJv
YXJkTmFtZSkgPSAwOwogICAgIHZpcnR1YWwgbG9uZyBjaGFuZ2VDb3VudChjb25zdCBTdHJpbmcm
IHBhc3RlYm9hcmROYW1lKSA9IDA7CiAgICAgdmlydHVhbCBTdHJpbmcgdW5pcXVlTmFtZSgpID0g
MDsKICAgICB2aXJ0dWFsIENvbG9yIGNvbG9yKGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUp
ID0gMDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1BsYXRmb3JtUGFzdGVi
b2FyZC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUGxhdGZvcm1QYXN0ZWJvYXJkLmgKaW5k
ZXggZGM2NTBjMzMzNTBhODdkOTdjZjUwOTg0ZWI2ZTUzNDUwMjEzOGQ3Ni4uOGUxM2JmNGQ4NDE0
MTNiZjFjMTE3ZGVjOWVmZjg1YzQ4MjRiODhlZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vUGxhdGZvcm1QYXN0ZWJvYXJkLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vUGxhdGZvcm1QYXN0ZWJvYXJkLmgKQEAgLTczLDYgKzczLDcgQEAgcHVibGljOgogICAgIFdF
QkNPUkVfRVhQT1JUIFJlZlB0cjxTaGFyZWRCdWZmZXI+IGJ1ZmZlckZvclR5cGUoY29uc3QgU3Ry
aW5nJiBwYXN0ZWJvYXJkVHlwZSk7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBnZXRQYXRobmFt
ZXNGb3JUeXBlKFZlY3RvcjxTdHJpbmc+JiBwYXRobmFtZXMsIGNvbnN0IFN0cmluZyYgcGFzdGVi
b2FyZFR5cGUpIGNvbnN0OwogICAgIFdFQkNPUkVfRVhQT1JUIFN0cmluZyBzdHJpbmdGb3JUeXBl
KGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZFR5cGUpIGNvbnN0OworICAgIFdFQkNPUkVfRVhQT1JU
IFZlY3RvcjxTdHJpbmc+IGFsbFN0cmluZ3NGb3JUeXBlKGNvbnN0IFN0cmluZyYgcGFzdGVib2Fy
ZFR5cGUpIGNvbnN0OwogICAgIFdFQkNPUkVfRVhQT1JUIGxvbmcgY2hhbmdlQ291bnQoKSBjb25z
dDsKICAgICBXRUJDT1JFX0VYUE9SVCBDb2xvciBjb2xvcigpOwogICAgIFdFQkNPUkVfRVhQT1JU
IFVSTCB1cmwoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1Bh
c3RlYm9hcmRDb2NvYS5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1Bhc3RlYm9h
cmRDb2NvYS5tbQppbmRleCBmNDhlN2I4MzcwYmFjY2M0MDMwYWYwNmEzN2QxNDA4ZmVlMDk3MGQ2
Li5mYTUwZTRjOWM1NTEzNTE3YjMzNmMwMjI2MDkwZTNmNjAyNzcxMmQ5IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9QYXN0ZWJvYXJkQ29jb2EubW0KKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvUGFzdGVib2FyZENvY29hLm1tCkBAIC0yNTksOSAr
MjU5LDE1IEBAIHZvaWQgUGFzdGVib2FyZDo6cmVhZChQYXN0ZWJvYXJkRmlsZVJlYWRlciYgcmVh
ZGVyKQogICAgIH0KIH0KIAorVmVjdG9yPFN0cmluZz4gUGFzdGVib2FyZDo6cmVhZEFsbFN0cmlu
Z3MoY29uc3QgU3RyaW5nJiB0eXBlKQoreworICAgIHJldHVybiByZWFkUGxhdGZvcm1WYWx1ZXNB
c1N0cmluZ3ModHlwZSwgbV9jaGFuZ2VDb3VudCwgbV9wYXN0ZWJvYXJkTmFtZSk7Cit9CisKIFN0
cmluZyBQYXN0ZWJvYXJkOjpyZWFkU3RyaW5nKGNvbnN0IFN0cmluZyYgdHlwZSkKIHsKLSAgICBy
ZXR1cm4gcmVhZFBsYXRmb3JtVmFsdWVBc1N0cmluZyh0eXBlLCBtX2NoYW5nZUNvdW50LCBtX3Bh
c3RlYm9hcmROYW1lKTsKKyAgICBhdXRvIHZhbHVlcyA9IHJlYWRQbGF0Zm9ybVZhbHVlc0FzU3Ry
aW5ncyh0eXBlLCBtX2NoYW5nZUNvdW50LCBtX3Bhc3RlYm9hcmROYW1lKTsKKyAgICByZXR1cm4g
dmFsdWVzLmlzRW1wdHkoKSA/IFN0cmluZygpIDogdmFsdWVzLmZpcnN0KCk7CiB9CiAKIFN0cmlu
ZyBQYXN0ZWJvYXJkOjpyZWFkU3RyaW5nSW5DdXN0b21EYXRhKGNvbnN0IFN0cmluZyYgdHlwZSkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9QYXN0ZWJvYXJkSU9TLm1t
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1Bhc3RlYm9hcmRJT1MubW0KaW5kZXggZDFj
MDJlZGYyMjAyOGI0NTMxYWZjN2VjMGY3NjA5YTU3MTUzNzJhMy4uM2QxMjU4MmM4ZWY4MDBlMDQw
YjE2M2E3YWZlMWM4ZWQyYjY3MGJiZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vaW9zL1Bhc3RlYm9hcmRJT1MubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9z
L1Bhc3RlYm9hcmRJT1MubW0KQEAgLTM3MywzOCArMzczLDI2IEBAIHZvaWQgUGFzdGVib2FyZDo6
Y2xlYXIoKQogICAgIHBsYXRmb3JtU3RyYXRlZ2llcygpLT5wYXN0ZWJvYXJkU3RyYXRlZ3koKS0+
d3JpdGVUb1Bhc3RlYm9hcmQoU3RyaW5nKCksIFN0cmluZygpLCBtX3Bhc3RlYm9hcmROYW1lKTsK
IH0KIAotU3RyaW5nIFBhc3RlYm9hcmQ6OnJlYWRQbGF0Zm9ybVZhbHVlQXNTdHJpbmcoY29uc3Qg
U3RyaW5nJiBkb21UeXBlLCBsb25nIGNoYW5nZUNvdW50LCBjb25zdCBTdHJpbmcmIHBhc3RlYm9h
cmROYW1lKQorVmVjdG9yPFN0cmluZz4gUGFzdGVib2FyZDo6cmVhZFBsYXRmb3JtVmFsdWVzQXNT
dHJpbmdzKGNvbnN0IFN0cmluZyYgZG9tVHlwZSwgbG9uZyBjaGFuZ2VDb3VudCwgY29uc3QgU3Ry
aW5nJiBwYXN0ZWJvYXJkTmFtZSkKIHsKLSAgICBQYXN0ZWJvYXJkU3RyYXRlZ3kmIHN0cmF0ZWd5
ID0gKnBsYXRmb3JtU3RyYXRlZ2llcygpLT5wYXN0ZWJvYXJkU3RyYXRlZ3koKTsKLQotICAgIGlu
dCBudW1iZXJPZkl0ZW1zID0gc3RyYXRlZ3kuZ2V0UGFzdGVib2FyZEl0ZW1zQ291bnQocGFzdGVi
b2FyZE5hbWUpOwotCi0gICAgaWYgKCFudW1iZXJPZkl0ZW1zKQotICAgICAgICByZXR1cm4gU3Ry
aW5nKCk7CisgICAgYXV0byYgc3RyYXRlZ3kgPSAqcGxhdGZvcm1TdHJhdGVnaWVzKCktPnBhc3Rl
Ym9hcmRTdHJhdGVneSgpOwogCiAgICAgLy8gR3JhYiB0aGUgdmFsdWUgb2ZmIHRoZSBwYXN0ZWJv
YXJkIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGNvY29hVHlwZS4KLSAgICBSZXRhaW5QdHI8TlNTdHJp
bmc+IGNvY29hVHlwZSA9IGNvY29hVHlwZUZyb21IVE1MQ2xpcGJvYXJkVHlwZShkb21UeXBlKTsK
LQotICAgIE5TU3RyaW5nICpjb2NvYVZhbHVlID0gbmlsOworICAgIGF1dG8gY29jb2FUeXBlID0g
Y29jb2FUeXBlRnJvbUhUTUxDbGlwYm9hcmRUeXBlKGRvbVR5cGUpOworICAgIGlmICghY29jb2FU
eXBlKQorICAgICAgICByZXR1cm4geyB9OwogCi0gICAgaWYgKFtjb2NvYVR5cGUgaXNFcXVhbFRv
U3RyaW5nOihOU1N0cmluZyAqKWtVVFR5cGVVUkxdKSB7Ci0gICAgICAgIFN0cmluZyB0aXRsZTsK
LSAgICAgICAgVVJMIHVybCA9IHN0cmF0ZWd5LnJlYWRVUkxGcm9tUGFzdGVib2FyZCgwLCBwYXN0
ZWJvYXJkTmFtZSwgdGl0bGUpOwotICAgICAgICBpZiAoIXVybC5pc051bGwoKSkKLSAgICAgICAg
ICAgIGNvY29hVmFsdWUgPSBbKE5TVVJMICopdXJsIGFic29sdXRlU3RyaW5nXTsKLSAgICB9IGVs
c2UgaWYgKFtjb2NvYVR5cGUgaXNFcXVhbFRvU3RyaW5nOihOU1N0cmluZyAqKWtVVFR5cGVQbGFp
blRleHRdKSB7Ci0gICAgICAgIFN0cmluZyB2YWx1ZSA9IHN0cmF0ZWd5LnJlYWRTdHJpbmdGcm9t
UGFzdGVib2FyZCgwLCBrVVRUeXBlUGxhaW5UZXh0LCBwYXN0ZWJvYXJkTmFtZSk7Ci0gICAgICAg
IGlmICghdmFsdWUuaXNOdWxsKCkpCi0gICAgICAgICAgICBjb2NvYVZhbHVlID0gWyhOU1N0cmlu
ZyAqKXZhbHVlIHByZWNvbXBvc2VkU3RyaW5nV2l0aENhbm9uaWNhbE1hcHBpbmddOwotICAgIH0g
ZWxzZSBpZiAoY29jb2FUeXBlKQotICAgICAgICBjb2NvYVZhbHVlID0gKE5TU3RyaW5nICopc3Ry
YXRlZ3kucmVhZFN0cmluZ0Zyb21QYXN0ZWJvYXJkKDAsIGNvY29hVHlwZS5nZXQoKSwgcGFzdGVi
b2FyZE5hbWUpOworICAgIGJvb2wgaXNQbGFpblRleHRUeXBlID0gW2NvY29hVHlwZSBpc0VxdWFs
VG9TdHJpbmc6KE5TU3RyaW5nICopa1VUVHlwZVBsYWluVGV4dF07CisgICAgVmVjdG9yPFN0cmlu
Zz4gdmFsdWVzOworICAgIGZvciAoYXV0byYgdmFsdWUgOiBzdHJhdGVneS5hbGxTdHJpbmdzRm9y
VHlwZShjb2NvYVR5cGUuZ2V0KCksIHBhc3RlYm9hcmROYW1lKSkKKyAgICAgICAgdmFsdWVzLmFw
cGVuZChpc1BsYWluVGV4dFR5cGUgPyBTdHJpbmcoW3ZhbHVlIHByZWNvbXBvc2VkU3RyaW5nV2l0
aENhbm9uaWNhbE1hcHBpbmddKSA6IHZhbHVlKTsKIAogICAgIC8vIEVuZm9yY2UgY2hhbmdlQ291
bnQgb3Vyc2VsdmVzIGZvciBzZWN1cml0eS4gV2UgY2hlY2sgYWZ0ZXIgcmVhZGluZyBpbnN0ZWFk
IG9mIGJlZm9yZSB0byBiZQogICAgIC8vIHN1cmUgaXQgZG9lc24ndCBjaGFuZ2UgYmV0d2VlbiBv
dXIgdGVzdGluZyB0aGUgY2hhbmdlIGNvdW50IGFuZCBhY2Nlc3NpbmcgdGhlIGRhdGEuCi0gICAg
aWYgKGNvY29hVmFsdWUgJiYgY2hhbmdlQ291bnQgPT0gY2hhbmdlQ291bnRGb3JQYXN0ZWJvYXJk
KHBhc3RlYm9hcmROYW1lKSkKLSAgICAgICAgcmV0dXJuIGNvY29hVmFsdWU7CisgICAgaWYgKGNo
YW5nZUNvdW50ICE9IGNoYW5nZUNvdW50Rm9yUGFzdGVib2FyZChwYXN0ZWJvYXJkTmFtZSkpCisg
ICAgICAgIHJldHVybiB7IH07CiAKLSAgICByZXR1cm4gU3RyaW5nKCk7CisgICAgcmV0dXJuIHZh
bHVlczsKIH0KIAogdm9pZCBQYXN0ZWJvYXJkOjphZGRIVE1MQ2xpcGJvYXJkVHlwZXNGb3JDb2Nv
YVR5cGUoTGlzdEhhc2hTZXQ8U3RyaW5nPiYgcmVzdWx0VHlwZXMsIGNvbnN0IFN0cmluZyYgY29j
b2FUeXBlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1BsYXRmb3Jt
UGFzdGVib2FyZElPUy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9QbGF0Zm9ybVBh
c3RlYm9hcmRJT1MubW0KaW5kZXggZTAyODkzZWQ2ZTRhNmIwMWU3MjgyMjFiZjZmMWQ0MThmYjIx
NTViMC4uYTkxYjk4MWI1ZWY2OTliY2RkZmI3NTU0NDI5OWEzN2Y4NmIzYWVjMiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1BsYXRmb3JtUGFzdGVib2FyZElPUy5tbQor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvUGxhdGZvcm1QYXN0ZWJvYXJkSU9TLm1t
CkBAIC02MDMsNiArNjAzLDE5IEBAIGludCBQbGF0Zm9ybVBhc3RlYm9hcmQ6OmNvdW50KCkgY29u
c3QKICAgICByZXR1cm4gW21fcGFzdGVib2FyZCBudW1iZXJPZkl0ZW1zXTsKIH0KIAorVmVjdG9y
PFN0cmluZz4gUGxhdGZvcm1QYXN0ZWJvYXJkOjphbGxTdHJpbmdzRm9yVHlwZShjb25zdCBTdHJp
bmcmIHR5cGUpIGNvbnN0Cit7CisgICAgYXV0byBudW1iZXJPZkl0ZW1zID0gY291bnQoKTsKKyAg
ICBWZWN0b3I8U3RyaW5nPiBzdHJpbmdzOworICAgIHN0cmluZ3MucmVzZXJ2ZUluaXRpYWxDYXBh
Y2l0eShudW1iZXJPZkl0ZW1zKTsKKyAgICBmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgbnVt
YmVyT2ZJdGVtczsgKytpbmRleCkgeworICAgICAgICBTdHJpbmcgdmFsdWUgPSByZWFkU3RyaW5n
KGluZGV4LCB0eXBlKTsKKyAgICAgICAgaWYgKCF2YWx1ZS5pc0VtcHR5KCkpCisgICAgICAgICAg
ICBzdHJpbmdzLnVuY2hlY2tlZEFwcGVuZChXVEZNb3ZlKHZhbHVlKSk7CisgICAgfQorICAgIHJl
dHVybiBzdHJpbmdzOworfQorCiBSZWZQdHI8U2hhcmVkQnVmZmVyPiBQbGF0Zm9ybVBhc3RlYm9h
cmQ6OnJlYWRCdWZmZXIoaW50IGluZGV4LCBjb25zdCBTdHJpbmcmIHR5cGUpIGNvbnN0CiB7CiAg
ICAgTlNJbmRleFNldCAqaW5kZXhTZXQgPSBbTlNJbmRleFNldCBpbmRleFNldFdpdGhJbmRleDpp
bmRleF07CkBAIC02MTgsNyArNjMxLDcgQEAgU3RyaW5nIFBsYXRmb3JtUGFzdGVib2FyZDo6cmVh
ZFN0cmluZyhpbnQgaW5kZXgsIGNvbnN0IFN0cmluZyYgdHlwZSkgY29uc3QKIHsKICAgICBpZiAo
dHlwZSA9PSBTdHJpbmcoa1VUVHlwZVVSTCkpIHsKICAgICAgICAgU3RyaW5nIHRpdGxlOwotICAg
ICAgICByZXR1cm4gcmVhZFVSTChpbmRleCwgdGl0bGUpOworICAgICAgICByZXR1cm4gW3JlYWRV
UkwoaW5kZXgsIHRpdGxlKSBhYnNvbHV0ZVN0cmluZ107CiAgICAgfQogCiAgICAgTlNJbmRleFNl
dCAqaW5kZXhTZXQgPSBbTlNJbmRleFNldCBpbmRleFNldFdpdGhJbmRleDppbmRleF07CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvUGFzdGVib2FyZE1hYy5tbSBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9QYXN0ZWJvYXJkTWFjLm1tCmluZGV4IGZkNmU5Mjk4
Nzc0ZmFmNGZlODczNWJmMjc1NjVhZGM5NTMyYmY2MzYuLjlkODE4NzQ4OTdkNmVlZmY1NzAwNGVm
MjgxOTlhNzczYmQwN2ZjOGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21h
Yy9QYXN0ZWJvYXJkTWFjLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9QYXN0
ZWJvYXJkTWFjLm1tCkBAIC00ODgsMjIgKzQ4OCwyNCBAQCB2b2lkIFBhc3RlYm9hcmQ6OmNsZWFy
KGNvbnN0IFN0cmluZyYgdHlwZSkKICAgICBtX2NoYW5nZUNvdW50ID0gcGxhdGZvcm1TdHJhdGVn
aWVzKCktPnBhc3RlYm9hcmRTdHJhdGVneSgpLT5zZXRTdHJpbmdGb3JUeXBlKGVtcHR5U3RyaW5n
KCksIGNvY29hVHlwZSwgbV9wYXN0ZWJvYXJkTmFtZSk7CiB9CiAKLVN0cmluZyBQYXN0ZWJvYXJk
OjpyZWFkUGxhdGZvcm1WYWx1ZUFzU3RyaW5nKGNvbnN0IFN0cmluZyYgZG9tVHlwZSwgbG9uZyBj
aGFuZ2VDb3VudCwgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSkKK1ZlY3RvcjxTdHJpbmc+
IFBhc3RlYm9hcmQ6OnJlYWRQbGF0Zm9ybVZhbHVlc0FzU3RyaW5ncyhjb25zdCBTdHJpbmcmIGRv
bVR5cGUsIGxvbmcgY2hhbmdlQ291bnQsIGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUpCiB7
Ci0gICAgY29uc3QgU3RyaW5nJiBjb2NvYVR5cGUgPSBjb2NvYVR5cGVGcm9tSFRNTENsaXBib2Fy
ZFR5cGUoZG9tVHlwZSk7Ci0gICAgU3RyaW5nIGNvY29hVmFsdWU7CisgICAgYXV0byYgc3RyYXRl
Z3kgPSAqcGxhdGZvcm1TdHJhdGVnaWVzKCktPnBhc3RlYm9hcmRTdHJhdGVneSgpOworICAgIGF1
dG8gY29jb2FUeXBlID0gY29jb2FUeXBlRnJvbUhUTUxDbGlwYm9hcmRUeXBlKGRvbVR5cGUpOwor
ICAgIGlmIChjb2NvYVR5cGUuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4geyB9OwogCi0gICAg
aWYgKGNvY29hVHlwZSA9PSBTdHJpbmcobGVnYWN5U3RyaW5nUGFzdGVib2FyZFR5cGUoKSkpCi0g
ICAgICAgIGNvY29hVmFsdWUgPSBbcGxhdGZvcm1TdHJhdGVnaWVzKCktPnBhc3RlYm9hcmRTdHJh
dGVneSgpLT5zdHJpbmdGb3JUeXBlKGNvY29hVHlwZSwgcGFzdGVib2FyZE5hbWUpIHByZWNvbXBv
c2VkU3RyaW5nV2l0aENhbm9uaWNhbE1hcHBpbmddOwotICAgIGVsc2UgaWYgKCFjb2NvYVR5cGUu
aXNFbXB0eSgpKQotICAgICAgICBjb2NvYVZhbHVlID0gcGxhdGZvcm1TdHJhdGVnaWVzKCktPnBh
c3RlYm9hcmRTdHJhdGVneSgpLT5zdHJpbmdGb3JUeXBlKGNvY29hVHlwZSwgcGFzdGVib2FyZE5h
bWUpOworICAgIGJvb2wgaXNTdHJpbmdUeXBlID0gY29jb2FUeXBlID09IFN0cmluZyhsZWdhY3lT
dHJpbmdQYXN0ZWJvYXJkVHlwZSgpKTsKKyAgICBWZWN0b3I8U3RyaW5nPiB2YWx1ZXM7CisgICAg
Zm9yIChhdXRvJiB2YWx1ZSA6IHN0cmF0ZWd5LmFsbFN0cmluZ3NGb3JUeXBlKGNvY29hVHlwZSwg
cGFzdGVib2FyZE5hbWUpKQorICAgICAgICB2YWx1ZXMuYXBwZW5kKGlzU3RyaW5nVHlwZSA/IFN0
cmluZyhbdmFsdWUgcHJlY29tcG9zZWRTdHJpbmdXaXRoQ2Fub25pY2FsTWFwcGluZ10pIDogdmFs
dWUpOwogCiAgICAgLy8gRW5mb3JjZSBjaGFuZ2VDb3VudCBvdXJzZWx2ZXMgZm9yIHNlY3VyaXR5
LiAgV2UgY2hlY2sgYWZ0ZXIgcmVhZGluZyBpbnN0ZWFkIG9mIGJlZm9yZSB0byBiZQogICAgIC8v
IHN1cmUgaXQgZG9lc24ndCBjaGFuZ2UgYmV0d2VlbiBvdXIgdGVzdGluZyB0aGUgY2hhbmdlIGNv
dW50IGFuZCBhY2Nlc3NpbmcgdGhlIGRhdGEuCi0gICAgaWYgKCFjb2NvYVZhbHVlLmlzRW1wdHko
KSAmJiBjaGFuZ2VDb3VudCA9PSBwbGF0Zm9ybVN0cmF0ZWdpZXMoKS0+cGFzdGVib2FyZFN0cmF0
ZWd5KCktPmNoYW5nZUNvdW50KHBhc3RlYm9hcmROYW1lKSkKLSAgICAgICAgcmV0dXJuIGNvY29h
VmFsdWU7CisgICAgaWYgKGNoYW5nZUNvdW50ICE9IHBsYXRmb3JtU3RyYXRlZ2llcygpLT5wYXN0
ZWJvYXJkU3RyYXRlZ3koKS0+Y2hhbmdlQ291bnQocGFzdGVib2FyZE5hbWUpKQorICAgICAgICBy
ZXR1cm4geyB9OwogCi0gICAgcmV0dXJuIFN0cmluZygpOworICAgIHJldHVybiB2YWx1ZXM7CiB9
CiAKIHN0YXRpYyBTdHJpbmcgdXRpVHlwZUZyb21Db2NvYVR5cGUoY29uc3QgU3RyaW5nJiB0eXBl
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1BsYXRmb3JtUGFzdGVi
b2FyZE1hYy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9QbGF0Zm9ybVBhc3RlYm9h
cmRNYWMubW0KaW5kZXggYTE5MjViYWRjOTNiNmM3MTkzMWVjOTU0OWQ4Y2Q3MmU2MjJkMWQ3ZS4u
YThmNzdmYTBhYmVjMDEzZDMwNDZjMDNkMzBhNWEwMjZlMDFmMTExMyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1BsYXRmb3JtUGFzdGVib2FyZE1hYy5tbQorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvUGxhdGZvcm1QYXN0ZWJvYXJkTWFjLm1tCkBAIC0x
MTYsNiArMTE2LDc1IEBAIFN0cmluZyBQbGF0Zm9ybVBhc3RlYm9hcmQ6OnN0cmluZ0ZvclR5cGUo
Y29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkVHlwZSkgY29uc3QKICAgICByZXR1cm4gW21fcGFzdGVi
b2FyZCBzdHJpbmdGb3JUeXBlOnBhc3RlYm9hcmRUeXBlXTsKIH0KIAorc3RhdGljIE5TQXJyYXk8
TlNVUkwgKj4gKnVybHNGcm9tUGFzdGVib2FyZChOU1Bhc3RlYm9hcmQgKnBhc3RlYm9hcmQpCit7
CisgICAgTlNBcnJheTxOU1Bhc3RlYm9hcmRJdGVtICo+ICppdGVtcyA9IHBhc3RlYm9hcmQucGFz
dGVib2FyZEl0ZW1zOworICAgIGlmIChpdGVtcy5jb3VudCA+IDEpIHsKKyAgICAgICAgTlNNdXRh
YmxlQXJyYXk8TlNVUkwgKj4gKnVybHNGcm9tSXRlbXMgPSBbTlNNdXRhYmxlQXJyYXkgYXJyYXlX
aXRoQ2FwYWNpdHk6aXRlbXMuY291bnRdOworICAgICAgICBmb3IgKE5TUGFzdGVib2FyZEl0ZW0g
Kml0ZW0gaW4gaXRlbXMpIHsKKyAgICAgICAgICAgIGlmIChpZCBwcm9wZXJ0eUxpc3QgPSBbaXRl
bSBwcm9wZXJ0eUxpc3RGb3JUeXBlOihfX2JyaWRnZSBOU1N0cmluZyAqKWtVVFR5cGVVUkxdKSB7
CisgICAgICAgICAgICAgICAgYXV0byB1cmwgPSBhZG9wdE5TKFtbTlNVUkwgYWxsb2NdIGluaXRX
aXRoUGFzdGVib2FyZFByb3BlcnR5TGlzdDpwcm9wZXJ0eUxpc3Qgb2ZUeXBlOihfX2JyaWRnZSBO
U1N0cmluZyAqKWtVVFR5cGVVUkxdKTsKKyAgICAgICAgICAgICAgICBbdXJsc0Zyb21JdGVtcyBh
ZGRPYmplY3Q6dXJsLmdldCgpXTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBy
ZXR1cm4gdXJsc0Zyb21JdGVtczsKKyAgICB9CisKKyAgICBpZiAoTlNVUkwgKnVybEZyb21TdHJp
bmcgPSBbTlNVUkwgVVJMRnJvbVBhc3RlYm9hcmQ6cGFzdGVib2FyZF0pCisgICAgICAgIHJldHVy
biBAWyB1cmxGcm9tU3RyaW5nIF07CisKKyAgICBpZiAoTlNVUkwgKnVybEZyb21QYXN0ZWJvYXJk
ID0gW05TVVJMIFVSTFdpdGhTdHJpbmc6W3Bhc3RlYm9hcmQgc3RyaW5nRm9yVHlwZTpsZWdhY3lV
UkxQYXN0ZWJvYXJkVHlwZSgpXV0pCisgICAgICAgIHJldHVybiBAWyB1cmxGcm9tUGFzdGVib2Fy
ZCBdOworCisgICAgcmV0dXJuIEBbIF07Cit9CisKK3N0YXRpYyBTdHJpbmcgdHlwZUlkZW50aWZp
ZXJGb3JQYXN0ZWJvYXJkVHlwZShjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmRUeXBlKQoreworICAg
IGlmIChVVFR5cGVJc0RlY2xhcmVkKHBhc3RlYm9hcmRUeXBlLmNyZWF0ZUNGU3RyaW5nKCkuZ2V0
KCkpKQorICAgICAgICByZXR1cm4gcGFzdGVib2FyZFR5cGU7CisKKyAgICBpZiAocGFzdGVib2Fy
ZFR5cGUgPT0gU3RyaW5nKGxlZ2FjeVN0cmluZ1Bhc3RlYm9hcmRUeXBlKCkpKQorICAgICAgICBy
ZXR1cm4ga1VUVHlwZVVURjhQbGFpblRleHQ7CisKKyAgICBpZiAocGFzdGVib2FyZFR5cGUgPT0g
U3RyaW5nKGxlZ2FjeUhUTUxQYXN0ZWJvYXJkVHlwZSgpKSkKKyAgICAgICAgcmV0dXJuIGtVVFR5
cGVIVE1MOworCisgICAgaWYgKHBhc3RlYm9hcmRUeXBlID09IFN0cmluZyhsZWdhY3lVUkxQYXN0
ZWJvYXJkVHlwZSgpKSkKKyAgICAgICAgcmV0dXJuIGtVVFR5cGVVUkw7CisKKyAgICByZXR1cm4g
eyB9OworfQorCitWZWN0b3I8U3RyaW5nPiBQbGF0Zm9ybVBhc3RlYm9hcmQ6OmFsbFN0cmluZ3NG
b3JUeXBlKGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZFR5cGUpIGNvbnN0Cit7CisgICAgYm9vbCBt
YXlDb250YWluRmlsZXMgPSBwYXN0ZWJvYXJkTWF5Q29udGFpbkZpbGVQYXRocyhtX3Bhc3RlYm9h
cmQuZ2V0KCkpOworICAgIGF1dG8gdHlwZUlkZW50aWZpZXIgPSB0eXBlSWRlbnRpZmllckZvclBh
c3RlYm9hcmRUeXBlKHBhc3RlYm9hcmRUeXBlKTsKKyAgICBOU0FycmF5PE5TVVJMICo+ICpwbGF0
Zm9ybVVSTHMgPSB1cmxzRnJvbVBhc3RlYm9hcmQobV9wYXN0ZWJvYXJkLmdldCgpKTsKKyAgICBW
ZWN0b3I8U3RyaW5nPiBzdHJpbmdzOworICAgIHN0cmluZ3MucmVzZXJ2ZUluaXRpYWxDYXBhY2l0
eShwbGF0Zm9ybVVSTHMuY291bnQpOworICAgIGlmICh0eXBlSWRlbnRpZmllciA9PSBTdHJpbmco
a1VUVHlwZVVSTCkpIHsKKyAgICAgICAgZm9yIChOU1VSTCAqdXJsIGluIHBsYXRmb3JtVVJMcykg
eworICAgICAgICAgICAgU3RyaW5nIHVybFN0cmluZyA9IHVybC5hYnNvbHV0ZVN0cmluZzsKKyAg
ICAgICAgICAgIGlmICh1cmxTdHJpbmcuaXNFbXB0eSgpIHx8IChtYXlDb250YWluRmlsZXMgJiYg
IVBhc3RlYm9hcmQ6OmNhbkV4cG9zZVVSTFRvRE9NV2hlblBhc3RlYm9hcmRDb250YWluc0ZpbGVz
KHVybFN0cmluZykpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgc3Ry
aW5ncy51bmNoZWNrZWRBcHBlbmQoV1RGTW92ZSh1cmxTdHJpbmcpKTsKKyAgICAgICAgfQorICAg
ICAgICByZXR1cm4gc3RyaW5nczsKKyAgICB9CisKKyAgICBOU0FycmF5PE5TUGFzdGVib2FyZEl0
ZW0gKj4gKml0ZW1zID0gW21fcGFzdGVib2FyZCBwYXN0ZWJvYXJkSXRlbXNdOworICAgIGlmIChp
dGVtcy5jb3VudCA+IDEgJiYgIXR5cGVJZGVudGlmaWVyLmlzTnVsbCgpKSB7CisgICAgICAgIGZv
ciAoTlNQYXN0ZWJvYXJkSXRlbSAqaXRlbSBpbiBpdGVtcykgeworICAgICAgICAgICAgaWYgKE5T
U3RyaW5nICpzdHJpbmdGcm9tSXRlbSA9IFtpdGVtIHN0cmluZ0ZvclR5cGU6dHlwZUlkZW50aWZp
ZXJdKQorICAgICAgICAgICAgICAgIHN0cmluZ3MuYXBwZW5kKHN0cmluZ0Zyb21JdGVtKTsKKyAg
ICAgICAgfQorICAgIH0gZWxzZSBpZiAoTlNTdHJpbmcgKnN0cmluZ0Zyb21QYXN0ZWJvYXJkID0g
W21fcGFzdGVib2FyZCBzdHJpbmdGb3JUeXBlOnBhc3RlYm9hcmRUeXBlXSkKKyAgICAgICAgc3Ry
aW5ncy5hcHBlbmQoc3RyaW5nRnJvbVBhc3RlYm9hcmQpOworCisgICAgcmV0dXJuIHN0cmluZ3M7
Cit9CisKIHN0YXRpYyBjb25zdCBjaGFyKiBzYWZlVHlwZUZvckRPTVRvUmVhZEFuZFdyaXRlRm9y
UGxhdGZvcm1UeXBlKGNvbnN0IFN0cmluZyYgcGxhdGZvcm1UeXBlKQogewogICAgIGlmIChwbGF0
Zm9ybVR5cGUgPT0gU3RyaW5nKGxlZ2FjeVN0cmluZ1Bhc3RlYm9hcmRUeXBlKCkpIHx8IHBsYXRm
b3JtVHlwZSA9PSBTdHJpbmcoTlNQYXN0ZWJvYXJkVHlwZVN0cmluZykpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9XZWJQYXN0ZWJvYXJkUHJveHlDb2NvYS5tbSBi
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dlYlBhc3RlYm9hcmRQcm94eUNvY29hLm1t
CmluZGV4IGM5OTI0NDA0ZmViYjA5YWUwMTdiMTBjZTljNWY4ODJhNTkzMTI3MDkuLmFlNjQ3MDdk
YTE1MWMyMmJjMzgzOWRhYjRhZjdlNzQwMTRlMDIyMGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0NvY29hL1dlYlBhc3RlYm9hcmRQcm94eUNvY29hLm1tCisrKyBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dlYlBhc3RlYm9hcmRQcm94eUNvY29hLm1tCkBAIC03
MCw2ICs3MCwxMSBAQCB2b2lkIFdlYlBhc3RlYm9hcmRQcm94eTo6Z2V0UGFzdGVib2FyZFN0cmlu
Z0ZvclR5cGUoY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZQogICAgIHN0cmluZyA9IFBsYXRm
b3JtUGFzdGVib2FyZChwYXN0ZWJvYXJkTmFtZSkuc3RyaW5nRm9yVHlwZShwYXN0ZWJvYXJkVHlw
ZSk7CiB9CiAKK3ZvaWQgV2ViUGFzdGVib2FyZFByb3h5OjpnZXRQYXN0ZWJvYXJkU3RyaW5nc0Zv
clR5cGUoY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSwgY29uc3QgU3RyaW5nJiBwYXN0ZWJv
YXJkVHlwZSwgVmVjdG9yPFN0cmluZz4mIHN0cmluZ3MpCit7CisgICAgc3RyaW5ncyA9IFBsYXRm
b3JtUGFzdGVib2FyZChwYXN0ZWJvYXJkTmFtZSkuYWxsU3RyaW5nc0ZvclR5cGUocGFzdGVib2Fy
ZFR5cGUpOworfQorCiB2b2lkIFdlYlBhc3RlYm9hcmRQcm94eTo6Z2V0UGFzdGVib2FyZEJ1ZmZl
ckZvclR5cGUoY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSwgY29uc3QgU3RyaW5nJiBwYXN0
ZWJvYXJkVHlwZSwgU2hhcmVkTWVtb3J5OjpIYW5kbGUmIGhhbmRsZSwgdWludDY0X3QmIHNpemUp
CiB7CiAgICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gYnVmZmVyID0gUGxhdGZvcm1QYXN0ZWJvYXJk
KHBhc3RlYm9hcmROYW1lKS5idWZmZXJGb3JUeXBlKHBhc3RlYm9hcmRUeXBlKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhc3RlYm9hcmRQcm94eS5oIGIvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvV2ViUGFzdGVib2FyZFByb3h5LmgKaW5kZXggZTVlYzIwOTMyN2Rh
MDc2MGU4MmNiNDRhZTgzMzlmZGJkMTkxMDVlYi4uM2FlMjYwM2VhZWQyMjZlY2VjYTFmNDQyYjQy
OGZlN2FkZjYyMWUzNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFz
dGVib2FyZFByb3h5LmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFzdGVib2Fy
ZFByb3h5LmgKQEAgLTg3LDYgKzg3LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIGdldFBhc3RlYm9h
cmRUeXBlcyhjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lLCBWZWN0b3I8U3RyaW5nPiYgcGFz
dGVib2FyZFR5cGVzKTsKICAgICB2b2lkIGdldFBhc3RlYm9hcmRQYXRobmFtZXNGb3JUeXBlKElQ
Qzo6Q29ubmVjdGlvbiYsIGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUsIGNvbnN0IFN0cmlu
ZyYgcGFzdGVib2FyZFR5cGUsIFZlY3RvcjxTdHJpbmc+JiBwYXRobmFtZXMsIFNhbmRib3hFeHRl
bnNpb246OkhhbmRsZUFycmF5Jik7CiAgICAgdm9pZCBnZXRQYXN0ZWJvYXJkU3RyaW5nRm9yVHlw
ZShjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lLCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmRU
eXBlLCBTdHJpbmcmKTsKKyAgICB2b2lkIGdldFBhc3RlYm9hcmRTdHJpbmdzRm9yVHlwZShjb25z
dCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lLCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmRUeXBlLCBW
ZWN0b3I8U3RyaW5nPiYpOwogICAgIHZvaWQgZ2V0UGFzdGVib2FyZEJ1ZmZlckZvclR5cGUoY29u
c3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSwgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkVHlwZSwg
U2hhcmVkTWVtb3J5OjpIYW5kbGUmLCB1aW50NjRfdCYgc2l6ZSk7CiAgICAgdm9pZCBwYXN0ZWJv
YXJkQ29weShjb25zdCBTdHJpbmcmIGZyb21QYXN0ZWJvYXJkLCBjb25zdCBTdHJpbmcmIHRvUGFz
dGVib2FyZCwgdWludDY0X3QmIG5ld0NoYW5nZUNvdW50KTsKICAgICB2b2lkIGdldFBhc3RlYm9h
cmRDaGFuZ2VDb3VudChjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lLCB1aW50NjRfdCYgY2hh
bmdlQ291bnQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFzdGVi
b2FyZFByb3h5Lm1lc3NhZ2VzLmluIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFzdGVi
b2FyZFByb3h5Lm1lc3NhZ2VzLmluCmluZGV4IGI5MmNiODFiNmE2NmUwMWIxMDc4OGM5YTJjZjYy
NWNiNWZjOGVlY2QuLjVkZDY5ODhiOTEzMTFmYzMzODYwZjcyMjIwNWZlMDJmZDc2YmQ4ODggMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhc3RlYm9hcmRQcm94eS5tZXNz
YWdlcy5pbgorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYXN0ZWJvYXJkUHJveHku
bWVzc2FnZXMuaW4KQEAgLTQ1LDYgKzQ1LDcgQEAgbWVzc2FnZXMgLT4gV2ViUGFzdGVib2FyZFBy
b3h5IHsKICAgICBHZXRQYXN0ZWJvYXJkVHlwZXMoU3RyaW5nIHBhc3RlYm9hcmROYW1lKSAtPiAo
VmVjdG9yPFN0cmluZz4gdHlwZXMpCiAgICAgR2V0UGFzdGVib2FyZFBhdGhuYW1lc0ZvclR5cGUo
U3RyaW5nIHBhc3RlYm9hcmROYW1lLCBTdHJpbmcgcGFzdGVib2FyZFR5cGUpIC0+IChWZWN0b3I8
U3RyaW5nPiBwYXRobmFtZXMsIFdlYktpdDo6U2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlQXJyYXkg
c2FuZGJveEV4dGVuc2lvbnMpIFdhbnRzQ29ubmVjdGlvbgogICAgIEdldFBhc3RlYm9hcmRTdHJp
bmdGb3JUeXBlKFN0cmluZyBwYXN0ZWJvYXJkTmFtZSwgU3RyaW5nIHBhc3RlYm9hcmRUeXBlKSAt
PiAoU3RyaW5nIHN0cmluZykKKyAgICBHZXRQYXN0ZWJvYXJkU3RyaW5nc0ZvclR5cGUoU3RyaW5n
IHBhc3RlYm9hcmROYW1lLCBTdHJpbmcgcGFzdGVib2FyZFR5cGUpIC0+IChWZWN0b3I8U3RyaW5n
PiBzdHJpbmdzKQogICAgIEdldFBhc3RlYm9hcmRCdWZmZXJGb3JUeXBlKFN0cmluZyBwYXN0ZWJv
YXJkTmFtZSwgU3RyaW5nIHBhc3RlYm9hcmRUeXBlKSAtPiAoV2ViS2l0OjpTaGFyZWRNZW1vcnk6
OkhhbmRsZSBoYW5kbGUsIHVpbnQ2NF90IHNpemUpCiAgICAgUGFzdGVib2FyZENvcHkoU3RyaW5n
IGZyb21QYXN0ZWJvYXJkLCBTdHJpbmcgdG9QYXN0ZWJvYXJkKSAtPiAodWludDY0X3QgY2hhbmdl
Q291bnQpCiAgICAgR2V0UGFzdGVib2FyZENoYW5nZUNvdW50KFN0cmluZyBwYXN0ZWJvYXJkTmFt
ZSkgLT4gKHVpbnQ2NF90IGNoYW5nZUNvdW50KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYlBsYXRmb3JtU3RyYXRlZ2llcy5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViUGxhdGZvcm1TdHJhdGVnaWVz
LmNwcAppbmRleCA3NjAyZjVjOTRiMmU1NWZkMjcwNWE1ZDU2ZmM2MDUxOWM5NDRkYmYzLi4yNDMy
OThlMDQ3YjhlMjNjMTg2NDIxYWIxNTUyMTBhYmY2OTQzYTczIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViUGxhdGZvcm1TdHJhdGVnaWVzLmNw
cAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViUGxhdGZv
cm1TdHJhdGVnaWVzLmNwcApAQCAtMjA3LDYgKzIwNywxMyBAQCBTdHJpbmcgV2ViUGxhdGZvcm1T
dHJhdGVnaWVzOjpzdHJpbmdGb3JUeXBlKGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZFR5cGUsIGNv
bnN0CiAgICAgcmV0dXJuIHZhbHVlOwogfQogCitWZWN0b3I8U3RyaW5nPiBXZWJQbGF0Zm9ybVN0
cmF0ZWdpZXM6OmFsbFN0cmluZ3NGb3JUeXBlKGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZFR5cGUs
IGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUpCit7CisgICAgVmVjdG9yPFN0cmluZz4gdmFs
dWVzOworICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9u
KCktPnNlbmRTeW5jKE1lc3NhZ2VzOjpXZWJQYXN0ZWJvYXJkUHJveHk6OkdldFBhc3RlYm9hcmRT
dHJpbmdzRm9yVHlwZShwYXN0ZWJvYXJkTmFtZSwgcGFzdGVib2FyZFR5cGUpLCBNZXNzYWdlczo6
V2ViUGFzdGVib2FyZFByb3h5OjpHZXRQYXN0ZWJvYXJkU3RyaW5nc0ZvclR5cGU6OlJlcGx5KHZh
bHVlcyksIDApOworICAgIHJldHVybiB2YWx1ZXM7Cit9CisKIGxvbmcgV2ViUGxhdGZvcm1TdHJh
dGVnaWVzOjpjaGFuZ2VDb3VudChjb25zdCBXVEY6OlN0cmluZyAmcGFzdGVib2FyZE5hbWUpCiB7
CiAgICAgdWludDY0X3QgY2hhbmdlQ291bnQgeyAwIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViUGxhdGZvcm1TdHJhdGVnaWVzLmggYi9T
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViUGxhdGZvcm1TdHJhdGVn
aWVzLmgKaW5kZXggNTkxZDc4ZmNkZDA5ZTkwYTBjYWQ1YzExMGIzNWJkYTYyODIzOWMzNi4uNmVl
YzA5YjFlZDIyYjlhZDA2OGUzZjY5MjRiNTkyNTc0NTE1ZDE0NiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYlBsYXRmb3JtU3RyYXRlZ2llcy5o
CisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJQbGF0Zm9y
bVN0cmF0ZWdpZXMuaApAQCAtNzYsNiArNzYsNyBAQCBwcml2YXRlOgogICAgIFJlZlB0cjxXZWJD
b3JlOjpTaGFyZWRCdWZmZXI+IGJ1ZmZlckZvclR5cGUoY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJk
VHlwZSwgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSkgb3ZlcnJpZGU7CiAgICAgdm9pZCBn
ZXRQYXRobmFtZXNGb3JUeXBlKFZlY3RvcjxTdHJpbmc+JiBwYXRobmFtZXMsIGNvbnN0IFN0cmlu
ZyYgcGFzdGVib2FyZFR5cGUsIGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUpIG92ZXJyaWRl
OwogICAgIFN0cmluZyBzdHJpbmdGb3JUeXBlKGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZFR5cGUs
IGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUpIG92ZXJyaWRlOworICAgIFZlY3RvcjxTdHJp
bmc+IGFsbFN0cmluZ3NGb3JUeXBlKGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZFR5cGUsIGNvbnN0
IFN0cmluZyYgcGFzdGVib2FyZE5hbWUpIG92ZXJyaWRlOwogICAgIGxvbmcgY2hhbmdlQ291bnQo
Y29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSkgb3ZlcnJpZGU7CiAgICAgU3RyaW5nIHVuaXF1
ZU5hbWUoKSBvdmVycmlkZTsKICAgICBXZWJDb3JlOjpDb2xvciBjb2xvcihjb25zdCBTdHJpbmcm
IHBhc3RlYm9hcmROYW1lKSBvdmVycmlkZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdh
Y3kvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYlBsYXRmb3JtU3RyYXRlZ2llcy5oIGIvU291cmNlL1dl
YktpdExlZ2FjeS9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViUGxhdGZvcm1TdHJhdGVnaWVzLmgKaW5k
ZXggYThkOTYyNjM0OTRhOGYxMmE4NTE2MDkyZDYzZDYzNzdiMjVjMWRiOS4uNzM5Yzk1MWY2YmQ3
ZmY1NWYyOTkyYWRmZjNhNTA5YTZjZTEwMDU5NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExl
Z2FjeS9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViUGxhdGZvcm1TdHJhdGVnaWVzLmgKKysrIGIvU291
cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViUGxhdGZvcm1TdHJhdGVnaWVz
LmgKQEAgLTc2LDYgKzc2LDcgQEAgcHJpdmF0ZToKICAgICBSZWZQdHI8V2ViQ29yZTo6U2hhcmVk
QnVmZmVyPiBidWZmZXJGb3JUeXBlKGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZFR5cGUsIGNvbnN0
IFN0cmluZyYgcGFzdGVib2FyZE5hbWUpIG92ZXJyaWRlOwogICAgIHZvaWQgZ2V0UGF0aG5hbWVz
Rm9yVHlwZShWZWN0b3I8U3RyaW5nPiYgcGF0aG5hbWVzLCBjb25zdCBTdHJpbmcmIHBhc3RlYm9h
cmRUeXBlLCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lKSBvdmVycmlkZTsKICAgICBTdHJp
bmcgc3RyaW5nRm9yVHlwZShjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmRUeXBlLCBjb25zdCBTdHJp
bmcmIHBhc3RlYm9hcmROYW1lKSBvdmVycmlkZTsKKyAgICBWZWN0b3I8U3RyaW5nPiBhbGxTdHJp
bmdzRm9yVHlwZShjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmRUeXBlLCBjb25zdCBTdHJpbmcmIHBh
c3RlYm9hcmROYW1lKSBvdmVycmlkZTsKICAgICBsb25nIGNoYW5nZUNvdW50KGNvbnN0IFN0cmlu
ZyYgcGFzdGVib2FyZE5hbWUpIG92ZXJyaWRlOwogICAgIFN0cmluZyB1bmlxdWVOYW1lKCkgb3Zl
cnJpZGU7CiAgICAgV2ViQ29yZTo6Q29sb3IgY29sb3IoY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJk
TmFtZSkgb3ZlcnJpZGU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJD
b3JlU3VwcG9ydC9XZWJQbGF0Zm9ybVN0cmF0ZWdpZXMubW0gYi9Tb3VyY2UvV2ViS2l0TGVnYWN5
L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJQbGF0Zm9ybVN0cmF0ZWdpZXMubW0KaW5kZXggOWQ1Nzhh
MGI5NTdmMjYxMzEwNjg4NjUyODQxZGNmOWVjYjc1NDI3MC4uYmQ3NTgxZmE1MDQ4MWM5ODk3Yzlh
MWZjZGQzMjE5MGY2N2YwNmI0NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMv
V2ViQ29yZVN1cHBvcnQvV2ViUGxhdGZvcm1TdHJhdGVnaWVzLm1tCisrKyBiL1NvdXJjZS9XZWJL
aXRMZWdhY3kvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYlBsYXRmb3JtU3RyYXRlZ2llcy5tbQpAQCAt
MTIzLDYgKzEyMywxMSBAQCB2b2lkIFdlYlBsYXRmb3JtU3RyYXRlZ2llczo6Z2V0UGF0aG5hbWVz
Rm9yVHlwZShWZWN0b3I8U3RyaW5nPiYgcGF0aG5hbWVzLCBjb25zdAogICAgIFBsYXRmb3JtUGFz
dGVib2FyZChwYXN0ZWJvYXJkTmFtZSkuZ2V0UGF0aG5hbWVzRm9yVHlwZShwYXRobmFtZXMsIHBh
c3RlYm9hcmRUeXBlKTsKIH0KIAorVmVjdG9yPFN0cmluZz4gV2ViUGxhdGZvcm1TdHJhdGVnaWVz
OjphbGxTdHJpbmdzRm9yVHlwZShjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmRUeXBlLCBjb25zdCBT
dHJpbmcmIHBhc3RlYm9hcmROYW1lKQoreworICAgIHJldHVybiBQbGF0Zm9ybVBhc3RlYm9hcmQo
cGFzdGVib2FyZE5hbWUpLmFsbFN0cmluZ3NGb3JUeXBlKHBhc3RlYm9hcmRUeXBlKTsKK30KKwog
U3RyaW5nIFdlYlBsYXRmb3JtU3RyYXRlZ2llczo6c3RyaW5nRm9yVHlwZShjb25zdCBTdHJpbmcm
IHBhc3RlYm9hcmRUeXBlLCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lKQogewogICAgIHJl
dHVybiBQbGF0Zm9ybVBhc3RlYm9hcmQocGFzdGVib2FyZE5hbWUpLnN0cmluZ0ZvclR5cGUocGFz
dGVib2FyZFR5cGUpOwpkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdl
TG9nCmluZGV4IDdkODk4ZDQxNGNlNjhmODFhMjNlM2JkMjE1NmY3NWQzZTIzMGU5MzguLjdkZjVi
Nzc1OTU1OTdhNGEzMDgyODdmZjdiMzJmYTBkNWFhZmVlZTMgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0No
YW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0MCBAQAorMjAxOC0wOS0w
MiAgV2Vuc29uIEhzaWVoICA8d2Vuc29uX2hzaWVoQGFwcGxlLmNvbT4KKworICAgICAgICBQb3B1
bGF0ZSAidGV4dC91cmktbGlzdCIgd2l0aCBtdWx0aXBsZSBVUkxzIHdoZW4gdGhlIHBhc3RlYm9h
cmQgY29udGFpbnMgbXVsdGlwbGUgVVJMcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTg4ODkwCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS80MzY0ODYw
NT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIER1
bXBSZW5kZXJUcmVlL21hYy9EdW1wUmVuZGVyVHJlZVBhc3RlYm9hcmQubW06CisgICAgICAgICgt
W0xvY2FsUGFzdGVib2FyZCBwYXN0ZWJvYXJkSXRlbXNdKToKKworICAgICAgICBJbXBsZW1lbnQg
dGhpcyBtZXRob2QgdG8gYXZvaWQgY3Jhc2hpbmcgd2hlbiBydW5uaW5nIGxheW91dCB0ZXN0cyB0
aGF0IGFjY2VzcyB0aGUgcGFzdGVib2FyZC4KKworICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVz
dHMvV2ViS2l0Q29jb2EvRHJhZ0FuZERyb3BUZXN0cy5tbToKKworICAgICAgICBBZGQgYSB0ZXN0
IHRvIHZlcmlmeSB0aGF0IG9uIG1hY09TIGFuZCBpT1MsIG11bHRpcGxlIFVSTHMgZHJvcHBlZCBv
bnRvIHRoZSBwYWdlIGFyZSBhY2Nlc3NpYmxlIHZpYQorICAgICAgICAidGV4dC91cmktbGlzdCIu
CisKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1Bhc3RlTWl4ZWRD
b250ZW50Lm1tOgorCisgICAgICAgIEFkZCBhIHRlc3QgdGhhdCBleGVyY2lzZXMgNSBkaWZmZXJl
bnQgd2F5cyB0byB3cml0ZSBvbmUgb3IgbW9yZSBVUkxzIHRvIHRoZSBwYXN0ZWJvYXJkIG9uIG1h
Y09TOyBpbiBhbGwgY2FzZXMsCisgICAgICAgIHRoZSBVUkxzIHdyaXR0ZW4gdG8gdGhlIHBhc3Rl
Ym9hcmQgc2hvdWxkIGJlIGV4cG9zZWQgdG8gdGhlIHBhZ2UgdmlhICJ0ZXh0L3VyaS1saXN0Ii4g
SW4gYWxsIG9mIHRoZXNlIGRpZmZlcmVudAorICAgICAgICBjYXNlcywgdGhlIHJlc3VsdHMgb2Yg
dXNpbmcgYC1bTlNQYXN0ZWJvYXJkSXRlbSBzdHJpbmdGb3JUeXBlOl1gLCBgLVtOU1VSTCBVUkxG
cm9tUGFzdGVib2FyZDpdYCBhbmQKKyAgICAgICAgYC1bTlNQYXN0ZWJvYXJkIHN0cmluZ0ZvclR5
cGU6XWAgd2lsbCB5aWVsZCBkaWZmZXJlbnQgcmVzdWx0cywgc28gdGhlIHB1cnBvc2Ugb2YgdGhp
cyBBUEkgdGVzdCBpcyB0byBlbnN1cmUgdGhhdAorICAgICAgICBvdXIgbG9naWMgZm9yIGdyYWJi
aW5nIGEgbGlzdCBvZiBVUkxzIGZyb20gdGhlIHBhc3RlYm9hcmQgb24gbWFjT1MgaXMgcm9idXN0
IGVub3VnaCB0byBoYW5kbGUgYWxsIG9mIHRoZXNlCisgICAgICAgIGRpZmZlcmVudCBiZWhhdmlv
cnMuCisKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL2lvcy9VSVBhc3RlYm9hcmRUZXN0
cy5tbToKKworICAgICAgICBBZGQgYSB0ZXN0IHRvIHZlcmlmeSB0aGF0IG9uIGlPUywgdXNpbmcg
YC1bVUlQYXN0ZWJvYXJkIHNldFVSTHM6XWAgdG8gd3JpdGUgdG8gbXVsdGlwbGUgVVJMcyB0byB0
aGUgcGFzdGVib2FyZAorICAgICAgICBhbmQgdGhlbiBwYXN0aW5nIHJlc3VsdHMgaW4gInRleHQv
dXJpLWxpc3QiIGV4cG9zaW5nIGEgbGlzdCBvZiBhbGwgdGhlIFVSTHMgd3JpdHRlbiB0byB0aGUg
cGFzdGVib2FyZC4KKworICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvbWFjL1dlYktpdFRlc3RS
dW5uZXJQYXN0ZWJvYXJkLm1tOgorICAgICAgICAoLVtMb2NhbFBhc3RlYm9hcmQgcGFzdGVib2Fy
ZEl0ZW1zXSk6CisKKyAgICAgICAgSW1wbGVtZW50IHRoaXMgbWV0aG9kIHRvIGF2b2lkIGNyYXNo
aW5nIHdoZW4gcnVubmluZyBsYXlvdXQgdGVzdHMgdGhhdCBhY2Nlc3MgdGhlIHBhc3RlYm9hcmQu
CisKIDIwMTgtMDgtMzEgIEFkaXR5YSBLZWVydGhpICA8YWtlZXJ0aGlAYXBwbGUuY29tPgogCiAg
ICAgICAgIFVucmV2aWV3ZWQsIGFkZCBhbiBhbHRlcm5hdGUgZW1haWwgZm9yIEFkaXR5YSBLZWVy
dGhpLgpkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL0R1bXBSZW5kZXJUcmVl
UGFzdGVib2FyZC5tbSBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9EdW1wUmVuZGVyVHJlZVBh
c3RlYm9hcmQubW0KaW5kZXggY2RkMzFiM2JiYjM1YmI4NjI1MGZlZmMwY2FiZjFjNTVjMzQxYmNh
ZS4uYWUyOWE5NDQyMGU3MmU4NDE0NGM1MDYxZjNiMGM3MzFkZGNkOTQ1OSAxMDA2NDQKLS0tIGEv
VG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL0R1bXBSZW5kZXJUcmVlUGFzdGVib2FyZC5tbQorKysg
Yi9Ub29scy9EdW1wUmVuZGVyVHJlZS9tYWMvRHVtcFJlbmRlclRyZWVQYXN0ZWJvYXJkLm1tCkBA
IC0yMzcsNiArMjM3LDE3IEBAIC0gKEJPT0wpd3JpdGVPYmplY3RzOihOU0FycmF5PGlkIDxOU1Bh
c3RlYm9hcmRXcml0aW5nPj4gKilvYmplY3RzCiAgICAgcmV0dXJuIFlFUzsKIH0KIAorLSAoTlNB
cnJheTxOU1Bhc3RlYm9hcmRJdGVtICo+ICopcGFzdGVib2FyZEl0ZW1zCit7CisgICAgYXV0byBp
dGVtID0gYWRvcHROUyhbW05TUGFzdGVib2FyZEl0ZW0gYWxsb2NdIGluaXRdKTsKKyAgICBmb3Ig
KGF1dG8gdHlwZUFuZERhdGEgOiBfZGF0YSkgeworICAgICAgICBOU0RhdGEgKmRhdGEgPSAoX19i
cmlkZ2UgTlNEYXRhICopdHlwZUFuZERhdGEudmFsdWUuZ2V0KCk7CisgICAgICAgIE5TU3RyaW5n
ICp0eXBlID0gKF9fYnJpZGdlIE5TU3RyaW5nICopdHlwZUFuZERhdGEua2V5LmdldCgpOworICAg
ICAgICBbaXRlbSBzZXREYXRhOmRhdGEgZm9yVHlwZTp0eXBlXTsKKyAgICB9CisgICAgcmV0dXJu
IEBbIGl0ZW0uZ2V0KCkgXTsKK30KKwogQGVuZAogCiAjZW5kaWYgLy8gUExBVEZPUk0oTUFDKQpk
aWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9EcmFnQW5k
RHJvcFRlc3RzLm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9EcmFn
QW5kRHJvcFRlc3RzLm1tCmluZGV4IDE1ZTQxNDhmZGE0NzA3YmQ1MmU4MjM2Nzc1MWU5MzZjMjM5
MjZhMGYuLjk0YjVmNzA4ZTk2NzA0YjkwMDMxMTdlNTRkZTZjNTVhMDA0MGM4ZjMgMTAwNjQ0Ci0t
LSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvRHJhZ0FuZERyb3BUZXN0
cy5tbQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0RyYWdBbmRE
cm9wVGVzdHMubW0KQEAgLTQzLDYgKzQzLDM3IEBAIFRFU1QoRHJhZ0FuZERyb3BUZXN0cywgRHJh
Z0ltYWdlTG9jYXRpb25Gb3JMaW5rSW5TdWJmcmFtZSkKICNlbmRpZgogfQogCitURVNUKERyYWdB
bmREcm9wVGVzdHMsIEV4cG9zZU11bHRpcGxlVVJMc0luRGF0YVRyYW5zZmVyKQoreworICAgIGF1
dG8gc2ltdWxhdG9yID0gYWRvcHROUyhbW0RyYWdBbmREcm9wU2ltdWxhdG9yIGFsbG9jXSBpbml0
V2l0aFdlYlZpZXdGcmFtZTpDR1JlY3RNYWtlKDAsIDAsIDMyMCwgNTAwKV0pOworICAgIGF1dG8g
d2ViVmlldyA9IFtzaW11bGF0b3Igd2ViVmlld107CisgICAgW3dlYlZpZXcgc3luY2hyb25vdXNs
eUxvYWRUZXN0UGFnZU5hbWVkOkAiRGF0YVRyYW5zZmVyIl07CisKKyAgICBOU1N0cmluZyAqc3Ry
aW5nRGF0YSA9IEAiSGVsbG8gd29ybGQiOworICAgIE5TVVJMICpmaXJzdFVSTCA9IFtOU1VSTCBV
UkxXaXRoU3RyaW5nOkAiaHR0cHM6Ly93ZWJraXQub3JnLyJdOworICAgIE5TVVJMICpzZWNvbmRV
UkwgPSBbTlNVUkwgVVJMV2l0aFN0cmluZzpAImh0dHBzOi8vYXBwbGUuY29tLyJdOworCisjaWYg
UExBVEZPUk0oTUFDKQorICAgIE5TUGFzdGVib2FyZCAqcGFzdGVib2FyZCA9IFtOU1Bhc3RlYm9h
cmQgcGFzdGVib2FyZFdpdGhVbmlxdWVOYW1lXTsKKyAgICBbcGFzdGVib2FyZCB3cml0ZU9iamVj
dHM6QFsgc3RyaW5nRGF0YSwgZmlyc3RVUkwsIHNlY29uZFVSTCBdXTsKKyAgICBbc2ltdWxhdG9y
IHNldEV4dGVybmFsRHJhZ1Bhc3RlYm9hcmQ6cGFzdGVib2FyZF07CisjZWxzZQorICAgIGF1dG8g
c3RyaW5nSXRlbSA9IGFkb3B0TlMoW1tOU0l0ZW1Qcm92aWRlciBhbGxvY10gaW5pdFdpdGhPYmpl
Y3Q6c3RyaW5nRGF0YV0pOworICAgIGF1dG8gZmlyc3RVUkxJdGVtID0gYWRvcHROUyhbW05TSXRl
bVByb3ZpZGVyIGFsbG9jXSBpbml0V2l0aE9iamVjdDpmaXJzdFVSTF0pOworICAgIGF1dG8gc2Vj
b25kVVJMSXRlbSA9IGFkb3B0TlMoW1tOU0l0ZW1Qcm92aWRlciBhbGxvY10gaW5pdFdpdGhPYmpl
Y3Q6c2Vjb25kVVJMXSk7CisgICAgZm9yIChOU0l0ZW1Qcm92aWRlciAqaXRlbSBpbiBAWyBzdHJp
bmdJdGVtLmdldCgpLCBmaXJzdFVSTEl0ZW0uZ2V0KCksIHNlY29uZFVSTEl0ZW0uZ2V0KCkgXSkK
KyAgICAgICAgaXRlbS5wcmVmZXJyZWRQcmVzZW50YXRpb25TdHlsZSA9IFVJUHJlZmVycmVkUHJl
c2VudGF0aW9uU3R5bGVJbmxpbmU7CisgICAgW3NpbXVsYXRvciBzZXRFeHRlcm5hbEl0ZW1Qcm92
aWRlcnM6QFsgc3RyaW5nSXRlbS5nZXQoKSwgZmlyc3RVUkxJdGVtLmdldCgpLCBzZWNvbmRVUkxJ
dGVtLmdldCgpIF1dOworI2VuZGlmCisKKyAgICBbc2ltdWxhdG9yIHJ1bkZyb206Q0dQb2ludE1h
a2UoMCwgMCkgdG86Q0dQb2ludE1ha2UoMTAwLCAxMDApXTsKKworICAgIEVYUEVDVF9XS19TVFJF
USgidGV4dC9wbGFpbiwgdGV4dC91cmktbGlzdCIsIFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGlu
Z0phdmFTY3JpcHQ6QCJ0eXBlcy50ZXh0Q29udGVudCJdKTsKKyAgICBFWFBFQ1RfV0tfU1RSRVEo
IihTVFJJTkcsIHRleHQvcGxhaW4pLCAoU1RSSU5HLCB0ZXh0L3VyaS1saXN0KSIsIFt3ZWJWaWV3
IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJpdGVtcy50ZXh0Q29udGVudCJdKTsKKyAg
ICBFWFBFQ1RfV0tfU1RSRVEoIkhlbGxvIHdvcmxkIiwgW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0
aW5nSmF2YVNjcmlwdDpAInRleHREYXRhLnRleHRDb250ZW50Il0pOworICAgIEVYUEVDVF9XS19T
VFJFUSgiaHR0cHM6Ly93ZWJraXQub3JnL1xuaHR0cHM6Ly9hcHBsZS5jb20vIiwgW3dlYlZpZXcg
c3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAInVybERhdGEudGV4dENvbnRlbnQiXSk7Cit9
CisKICNpZiBFTkFCTEUoSU5QVVRfVFlQRV9DT0xPUikKIAogVEVTVChEcmFnQW5kRHJvcFRlc3Rz
LCBDb2xvcklucHV0VG9Db2xvcklucHV0KQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQ
SS9UZXN0cy9XZWJLaXRDb2NvYS9QYXN0ZU1peGVkQ29udGVudC5tbSBiL1Rvb2xzL1Rlc3RXZWJL
aXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvUGFzdGVNaXhlZENvbnRlbnQubW0KaW5kZXggYzVlNTBl
MmRhYjc4M2M0MDZjOTRhZWZlMGIwZDNiZjY5ZWNkMmFmMC4uNzEzMmEyZWM5YzY5M2U2ZWNjZTE1
MmI0NTliM2Q4YmY4M2RjNzRiYiAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0
cy9XZWJLaXRDb2NvYS9QYXN0ZU1peGVkQ29udGVudC5tbQorKysgYi9Ub29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RzL1dlYktpdENvY29hL1Bhc3RlTWl4ZWRDb250ZW50Lm1tCkBAIC0yNTUsNiArMjU1
LDUwIEBAIFRFU1QoUGFzdGVNaXhlZENvbnRlbnQsIFBhc3RlVVJMV3JpdHRlblRvUGFzdGVib2Fy
ZFVzaW5nV3JpdGVPYmplY3RzKQogICAgIEVYUEVDVF9XS19TVFJFUShbd2ViVmlldyBzdHJpbmdC
eUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAiZG9jdW1lbnQucXVlcnlTZWxlY3RvcignYScpLnRleHRD
b250ZW50Il0sIHVybFRvQ29weSk7CiB9CiAKK1RFU1QoUGFzdGVNaXhlZENvbnRlbnQsIFBhc3Rl
T25lT3JNb3JlVVJMcykKK3sKKyAgICBOU1VSTCAqYXBwbGVVUkwgPSBbTlNVUkwgVVJMV2l0aFN0
cmluZzpAImh0dHBzOi8vd3d3LmFwcGxlLmNvbS8iXTsKKyAgICBOU1VSTCAqd2ViS2l0VVJMID0g
W05TVVJMIFVSTFdpdGhTdHJpbmc6QCJodHRwczovL3dlYmtpdC5vcmcvIl07CisKKyAgICBhdXRv
IHdlYlZpZXcgPSBzZXRVcFdlYlZpZXcoKTsKKyAgICBhdXRvIHJ1blRlc3QgPSBbd2ViVmlld10g
KE5TU3RyaW5nICpkZXNjcmlwdGlvbiwgTlNTdHJpbmcgKmV4cGVjdGVkVVJMU3RyaW5nLCBGdW5j
dGlvbjx2b2lkKE5TUGFzdGVib2FyZCAqKT4mJiB3cml0ZVVSTHNUb1Bhc3RlYm9hcmQpIHsKKyAg
ICAgICAgTlNQYXN0ZWJvYXJkICpwYXN0ZWJvYXJkID0gW05TUGFzdGVib2FyZCBnZW5lcmFsUGFz
dGVib2FyZF07CisKKyAgICAgICAgW3Bhc3RlYm9hcmQgY2xlYXJDb250ZW50c107CisgICAgICAg
IHdyaXRlVVJMc1RvUGFzdGVib2FyZChwYXN0ZWJvYXJkKTsKKyAgICAgICAgW3dlYlZpZXcgc3Ry
aW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAInJlc2V0KCk7IGRvY3VtZW50LmJvZHkuZm9jdXMo
KSJdOworICAgICAgICBbd2ViVmlldyBwYXN0ZTpuaWxdOworCisgICAgICAgIEVYUEVDVF9XS19T
VFJFUShleHBlY3RlZFVSTFN0cmluZywgW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNj
cmlwdDpAInVybERhdGEudGV4dENvbnRlbnQiXSk7CisgICAgICAgIEVYUEVDVF9XS19TVFJFUSgi
KFNUUklORywgdGV4dC91cmktbGlzdCkiLCBbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZh
U2NyaXB0OkAiaXRlbXMudGV4dENvbnRlbnQiXSk7CisgICAgICAgIEVYUEVDVF9XS19TVFJFUSgi
dGV4dC91cmktbGlzdCIsIFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJ0
eXBlcy50ZXh0Q29udGVudCJdKTsKKyAgICB9OworCisgICAgcnVuVGVzdChAIldyaXRlIG11bHRp
cGxlIFVSTHMuIiwgQCJodHRwczovL3d3dy5hcHBsZS5jb20vXG5odHRwczovL3dlYmtpdC5vcmcv
IiwgXihOU1Bhc3RlYm9hcmQgKnBhc3RlYm9hcmQpIHsKKyAgICAgICAgW3Bhc3RlYm9hcmQgd3Jp
dGVPYmplY3RzOkBbYXBwbGVVUkwsIHdlYktpdFVSTF1dOworICAgIH0pOworCisgICAgcnVuVGVz
dChAIkRlY2xhcmUgbGVnYWN5IFVSTCBhbmQgd3JpdGUgVVJMIHRvIHBhc3RlYm9hcmQuIiwgQCJo
dHRwczovL3d3dy5hcHBsZS5jb20vIiwgXihOU1Bhc3RlYm9hcmQgKnBhc3RlYm9hcmQpIHsKKyAg
ICAgICAgW3Bhc3RlYm9hcmQgZGVjbGFyZVR5cGVzOkBbTlNVUkxQYm9hcmRUeXBlXSBvd25lcjpu
aWxdOworICAgICAgICBbYXBwbGVVUkwgd3JpdGVUb1Bhc3RlYm9hcmQ6cGFzdGVib2FyZF07Cisg
ICAgfSk7CisKKyAgICBydW5UZXN0KEAiRGVjbGFyZSBsZWdhY3kgVVJMIGFuZCBzZXQgYSBVUkwg
c3RyaW5nLiIsIEAiaHR0cHM6Ly93d3cuYXBwbGUuY29tLyIsIF4oTlNQYXN0ZWJvYXJkICpwYXN0
ZWJvYXJkKSB7CisgICAgICAgIFtwYXN0ZWJvYXJkIGRlY2xhcmVUeXBlczpAW05TVVJMUGJvYXJk
VHlwZV0gb3duZXI6bmlsXTsKKyAgICAgICAgW3Bhc3RlYm9hcmQgc2V0U3RyaW5nOmFwcGxlVVJM
LmFic29sdXRlU3RyaW5nIGZvclR5cGU6TlNVUkxQYm9hcmRUeXBlXTsKKyAgICB9KTsKKworICAg
IHJ1blRlc3QoQCJEZWNsYXJlIGxlZ2FjeSBVUkwgYW5kIHNldCBhIHByb3BlcnR5IGxpc3QuIiwg
QCJodHRwczovL3d3dy5hcHBsZS5jb20vIiwgXihOU1Bhc3RlYm9hcmQgKnBhc3RlYm9hcmQpIHsK
KyAgICAgICAgW3Bhc3RlYm9hcmQgZGVjbGFyZVR5cGVzOkBbTlNVUkxQYm9hcmRUeXBlXSBvd25l
cjpuaWxdOworICAgICAgICBbcGFzdGVib2FyZCBzZXRQcm9wZXJ0eUxpc3Q6QFtAIi8iLCBAImh0
dHBzOi8vd3d3LmFwcGxlLmNvbSJdIGZvclR5cGU6TlNVUkxQYm9hcmRUeXBlXTsKKyAgICB9KTsK
KworICAgIHJ1blRlc3QoQCJEZWNsYXJlIFVSTCBVVEkgYW5kIHNldCBhIFVSTCBzdHJpbmcuIiwg
QCJodHRwczovL3d3dy5hcHBsZS5jb20vIiwgXihOU1Bhc3RlYm9hcmQgKnBhc3RlYm9hcmQpIHsK
KyAgICAgICAgW3Bhc3RlYm9hcmQgZGVjbGFyZVR5cGVzOkBbKF9fYnJpZGdlIE5TU3RyaW5nICop
a1VUVHlwZVVSTF0gb3duZXI6bmlsXTsKKyAgICAgICAgW3Bhc3RlYm9hcmQgc2V0U3RyaW5nOmFw
cGxlVVJMLmFic29sdXRlU3RyaW5nIGZvclR5cGU6KF9fYnJpZGdlIE5TU3RyaW5nICopa1VUVHlw
ZVVSTF07CisgICAgfSk7Cit9CisKICNlbmRpZiAvLyBQTEFURk9STShNQUMpCiAKIFRFU1QoUGFz
dGVNaXhlZENvbnRlbnQsIENvcHlBbmRQYXN0ZVdpdGhDdXN0b21QYXN0ZWJvYXJkRGF0YU9ubHkp
CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL2lvcy9VSVBhc3RlYm9hcmRU
ZXN0cy5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvaW9zL1VJUGFzdGVib2FyZFRlc3Rz
Lm1tCmluZGV4IDQzMzQ4NTU2MWU1MGQ1YzBjN2UyZGEwNDQ3OWVmM2ZiM2E0NzA4MGYuLjFjMTlh
Mzc1YjkxMzQ5YmVkNmY5ODhlOGNiOThlOTZiNjZiNjdiYjIgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rl
c3RXZWJLaXRBUEkvVGVzdHMvaW9zL1VJUGFzdGVib2FyZFRlc3RzLm1tCisrKyBiL1Rvb2xzL1Rl
c3RXZWJLaXRBUEkvVGVzdHMvaW9zL1VJUGFzdGVib2FyZFRlc3RzLm1tCkBAIC0yNjcsNiArMjY3
LDIyIEBAIFRFU1QoVUlQYXN0ZWJvYXJkVGVzdHMsIERhdGFUcmFuc2ZlckdldERhdGFDYW5ub3RS
ZWFkQXJiaXRyYXJ5UGxhdGZvcm1UeXBlcykKICAgICB9KTsKIH0KIAorVEVTVChVSVBhc3RlYm9h
cmRUZXN0cywgRGF0YVRyYW5zZmVyVVJJTGlzdENvbnRhaW5zTXVsdGlwbGVVUkxzKQoreworICAg
IGF1dG8gd2ViVmlldyA9IHNldFVwV2ViVmlld0ZvclBhc3RlYm9hcmRUZXN0cyhAIkRhdGFUcmFu
c2ZlciIpOworCisgICAgTlNVUkwgKmZpcnN0VVJMID0gW05TVVJMIFVSTFdpdGhTdHJpbmc6QCJo
dHRwczovL3d3dy5hcHBsZS5jb20vIl07CisgICAgTlNVUkwgKnNlY29uZFVSTCA9IFtOU1VSTCBV
UkxXaXRoU3RyaW5nOkAiaHR0cHM6Ly93ZWJraXQub3JnLyJdOworICAgIFtVSVBhc3RlYm9hcmQg
Z2VuZXJhbFBhc3RlYm9hcmRdLlVSTHMgPSBAWyBmaXJzdFVSTCwgc2Vjb25kVVJMIF07CisKKyAg
ICBbd2ViVmlldyBwYXN0ZTpuaWxdOworCisgICAgRVhQRUNUX1dLX1NUUkVRKCJ0ZXh0L3VyaS1s
aXN0LCB0ZXh0L3BsYWluIiwgW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpA
InR5cGVzLnRleHRDb250ZW50Il0pOworICAgIEVYUEVDVF9XS19TVFJFUSgiKFNUUklORywgdGV4
dC91cmktbGlzdCksIChTVFJJTkcsIHRleHQvcGxhaW4pIiwgW3dlYlZpZXcgc3RyaW5nQnlFdmFs
dWF0aW5nSmF2YVNjcmlwdDpAIml0ZW1zLnRleHRDb250ZW50Il0pOworICAgIEVYUEVDVF9XS19T
VFJFUSgiaHR0cHM6Ly93d3cuYXBwbGUuY29tL1xuaHR0cHM6Ly93ZWJraXQub3JnLyIsIFt3ZWJW
aWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJ1cmxEYXRhLnRleHRDb250ZW50Il0p
OworICAgIEVYUEVDVF9XS19TVFJFUSgiaHR0cHM6Ly93d3cuYXBwbGUuY29tLyIsIFt3ZWJWaWV3
IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJ0ZXh0RGF0YS50ZXh0Q29udGVudCJdKTsK
K30KKwogI2VuZGlmIC8vIF9fSVBIT05FX09TX1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDExMDMw
MAogCiB9IC8vIG5hbWVzcGFjZSBUZXN0V2ViS2l0QVBJCmRpZmYgLS1naXQgYS9Ub29scy9XZWJL
aXRUZXN0UnVubmVyL21hYy9XZWJLaXRUZXN0UnVubmVyUGFzdGVib2FyZC5tbSBiL1Rvb2xzL1dl
YktpdFRlc3RSdW5uZXIvbWFjL1dlYktpdFRlc3RSdW5uZXJQYXN0ZWJvYXJkLm1tCmluZGV4IGFi
Y2RmNDE0NzUxN2VjYmU1ZmM1ZGJmNTdjNjVhYjFkNGFmZmI4NGIuLjVlNWNhYzRlN2NmYjExOTBm
ODAzOGU2ZThhNzI5MGU5MmMxYWFmYTcgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5u
ZXIvbWFjL1dlYktpdFRlc3RSdW5uZXJQYXN0ZWJvYXJkLm1tCisrKyBiL1Rvb2xzL1dlYktpdFRl
c3RSdW5uZXIvbWFjL1dlYktpdFRlc3RSdW5uZXJQYXN0ZWJvYXJkLm1tCkBAIC0yOSw2ICsyOSw3
IEBACiAjaW5jbHVkZSAiV2ViS2l0VGVzdFJ1bm5lclBhc3RlYm9hcmQuaCIKIAogI2luY2x1ZGUg
PG9iamMvcnVudGltZS5oPgorI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KIAogQGludGVyZmFj
ZSBMb2NhbFBhc3RlYm9hcmQgOiBOU1Bhc3RlYm9hcmQKIHsKQEAgLTE5Nyw0ICsxOTgsMTIgQEAg
LSAoQk9PTClzZXRTdHJpbmc6KE5TU3RyaW5nICopc3RyaW5nIGZvclR5cGU6KE5TU3RyaW5nICop
ZGF0YVR5cGUKICAgICByZXR1cm4gW3NlbGYgc2V0RGF0YTpbc3RyaW5nIGRhdGFVc2luZ0VuY29k
aW5nOk5TVVRGOFN0cmluZ0VuY29kaW5nXSBmb3JUeXBlOmRhdGFUeXBlXTsKIH0KIAorLSAoTlNB
cnJheTxOU1Bhc3RlYm9hcmRJdGVtICo+ICopcGFzdGVib2FyZEl0ZW1zCit7CisgICAgYXV0byBp
dGVtID0gYWRvcHROUyhbW05TUGFzdGVib2FyZEl0ZW0gYWxsb2NdIGluaXRdKTsKKyAgICBmb3Ig
KE5TU3RyaW5nICp0eXBlIGluIGRhdGFCeVR5cGUpCisgICAgICAgIFtpdGVtIHNldERhdGE6ZGF0
YUJ5VHlwZVt0eXBlXSBmb3JUeXBlOnR5cGVdOworICAgIHJldHVybiBAWyBpdGVtLmdldCgpIF07
Cit9CisKIEBlbmQK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>348783</attachid>
            <date>2018-09-03 11:25:28 -0700</date>
            <delta_ts>2018-09-04 15:25:40 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-188890-20180903112528.patch</filename>
            <type>text/plain</type>
            <size>43742</size>
            <attacher name="Wenson Hsieh">wenson_hsieh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjM1NTc5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggN2RlN2UyMzVhNDhiZGEz
NzNmOTNlMTk1NzgyZDdjNzgyOWUxMmRiYi4uYjM3NWExNWYyYjUxYmVhZDU2ZTVkYWM5MDE2Zjkw
ZDRiZjFmZjljNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEwOSBAQAorMjAxOC0wOS0wMyAgV2Vu
c29uIEhzaWVoICA8d2Vuc29uX2hzaWVoQGFwcGxlLmNvbT4KKworICAgICAgICBQb3B1bGF0ZSAi
dGV4dC91cmktbGlzdCIgd2l0aCBtdWx0aXBsZSBVUkxzIHdoZW4gdGhlIHBhc3RlYm9hcmQgY29u
dGFpbnMgbXVsdGlwbGUgVVJMcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTg4ODkwCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS80MzY0ODYwNT4KKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGRzIHN1cHBv
cnQgZm9yIGV4cG9zaW5nIGEgbmV3bGluZSBzZXBhcmF0ZWQgbGlzdCBvZiBVUkxzIHZpYSBEYXRh
VHJhbnNmZXIncyAidGV4dC91cmktbGlzdCIgdHlwZSB3aGVuIHBhc3RpbmcKKyAgICAgICAgb3Ig
ZHJvcHBpbmcgbXVsdGlwbGUgaXRlbXMgb24gdGhlIHBhc3RlYm9hcmQgdGhhdCBjYW4gYmUgcmVw
cmVzZW50ZWQgYXMgVVJMcy4gQ3VycmVudGx5IG9uIGlPUywgb25seSB0aGUgVVJMIG9mCisgICAg
ICAgIHRoZSBmaXJzdCBpdGVtIChpZiBwcmVzZW50KSBpcyBleHBvc2VkLCBhbmQgb24gbWFjT1Ms
IG9ubHkgdGhlIGZpcnN0IG91dCBvZiBhbGwgdGhlIFVSTHMgaW4gdGhlIHBhc3RlYm9hcmQgaXMK
KyAgICAgICAgZXhwb3NlZC4KKworICAgICAgICBUbyBmaXggdGhpcywgd2UgaW50cm9kdWNlIGBQ
YXN0ZWJvYXJkOjpyZWFkQWxsU3RyaW5nc2AsIHdoaWNoIHJlYWRzIGEgbGlzdCBvZiBwYXN0ZWJv
YXJkIHN0cmluZ3MgY29sbGVjdGVkIGZyb20KKyAgICAgICAgYWxsIGF2YWlsYWJsZSBpdGVtcyBv
biB0aGUgcGxhdGZvcm0gcGFzdGVib2FyZC4gQ3VycmVudGx5LCB0aGlzIGlzIG9ubHkgdXNlZCB0
byBwcm92aWRlIGEgbGlzdCBvZiBVUkwgc3RyaW5ncworICAgICAgICB3aGVuIGZldGNoaW5nIGRh
dGEgZm9yIHRoZSAidGV4dC91cmktbGlzdCIgdHlwZSB3aGVuIGNhbGxpbmcgYERhdGFUcmFuc2Zl
ci5nZXREYXRhKClgIGFuZAorICAgICAgICBgRGF0YVRyYW5zZmVySXRlbS5nZXRBc1N0cmluZygp
YC4KKworICAgICAgICBUZXN0czogIERyYWdBbmREcm9wVGVzdHMuRXhwb3NlTXVsdGlwbGVVUkxz
SW5EYXRhVHJhbnNmZXIKKyAgICAgICAgICAgICAgICBVSVBhc3RlYm9hcmRUZXN0cy5EYXRhVHJh
bnNmZXJVUklMaXN0Q29udGFpbnNNdWx0aXBsZVVSTHMKKyAgICAgICAgICAgICAgICBQYXN0ZU1p
eGVkQ29udGVudC5QYXN0ZU9uZU9yTW9yZVVSTHMKKworICAgICAgICAqIGRvbS9EYXRhVHJhbnNm
ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6cmVhZFVSTHNGcm9tUGFzdGVib2FyZEFzU3RyaW5n
KToKKworICAgICAgICBBZGQgYSBoZWxwZXIgbWV0aG9kIHRoYXQgcmVhZHMgYWxsIFVSTCBzdHJp
bmdzIGZyb20gdGhlIHBhc3RlYm9hcmQgKGZvciB0aGUgTUlNRSB0eXBlICJ0ZXh0L3VyaS1saXN0
Iiwgd2hpY2gKKyAgICAgICAgY29ycmVzcG9uZHMgdG8gTlNVUkxQYm9hcmRUeXBlIGFuZCAicHVi
bGljLnVybCIgb24gbWFjT1MgYW5kIGlPUywgcmVzcGVjdGl2ZWx5KSBhbmQgcmV0dXJucyBhIHNp
bmdsZSBzdHJpbmcKKyAgICAgICAgY29udGFpbmluZyBhbGwgbm9uLWVtcHR5IFVSTHMgam9pbmVk
IGJ5IG5ld2xpbmUgY2hhcmFjdGVycy4gQWxzbyB0YWtlcyBhIGZpbHRlcmluZyBibG9jayB3aGlj
aCBtYXkgYmUgdXNlZCB0bworICAgICAgICByZWplY3QgVVJMcyBmcm9tIGJlaW5nIGluY2x1ZGVk
IGluICJ0ZXh0L3VyaS1saXN0IiBvdXRwdXQuCisKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFUcmFu
c2Zlcjo6Z2V0RGF0YUZvckl0ZW0gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YVRyYW5z
ZmVyOjpyZWFkU3RyaW5nRnJvbVBhc3RlYm9hcmQgY29uc3QpOgorCisgICAgICAgIEluc3RlYWRp
bmcgb2YgcmVhZGluZyBhIHNpbmdsZSBzdHJpbmcgZnJvbSB0aGUgcGFzdGVib2FyZCBmb3IgInRl
eHQvdXJpLWxpc3QiLCBjYWxsIHRoZSBhYm92ZSBoZWxwZXIgZnVuY3Rpb24gdG8KKyAgICAgICAg
cmVhZCBhbGwgVVJMIHN0cmluZ3MgaW4gdGhlIHBhc3RlYm9hcmQuIElmIHRoZXJlIGFyZSBmaWxl
cyBwcmVzZW50IGluIHRoZSBwYXN0ZWJvYXJkLCB3ZSBhbHNvIGZpbHRlciBvdXQgVVJMcworICAg
ICAgICB3aG9zZSBzY2hlbWVzIGFyZSBub3QgaW4gdGhlIHNldCBvZiBzY2hlbWVzIHRoYXQgYXJl
IHNhZmUgdG8gZXhwb3NlIHRvIHRoZSBwYWdlIChpLmUuIGh0dHAocyksIGJsb2IsIGFuZCBkYXRh
KS4KKworICAgICAgICAqIHBsYXRmb3JtL1Bhc3RlYm9hcmQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6UGFzdGVib2FyZDo6cmVhZEFsbFN0cmluZ3MpOgorCisgICAgICAgIEFkZCBhIGRlZmF1bHQg
bm9uLUNvY29hIGltcGxlbWVudGF0aW9uIG9mIHJlYWRBbGxTdHJpbmdzKCkgdGhhdCByZXR1cm5z
IGEgdmVjdG9yLCB3aGljaCBtYXkgY29udGFpbiB0aGUgcmVzdWx0CisgICAgICAgIG9mIHJlYWRT
dHJpbmcoKS4KKworICAgICAgICAqIHBsYXRmb3JtL1Bhc3RlYm9hcmQuaDoKKyAgICAgICAgKiBw
bGF0Zm9ybS9QYXN0ZWJvYXJkU3RyYXRlZ3kuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9QbGF0Zm9y
bVBhc3RlYm9hcmQuaDoKKworICAgICAgICBBZGQgcGx1bWJpbmcgdG8gZ3JhYiBhIGxpc3Qgb2Yg
c3RyaW5ncyBmcm9tIHRoZSBwYXN0ZWJvYXJkIGZvciBhIGdpdmVuIHR5cGUuCisKKyAgICAgICAg
KiBwbGF0Zm9ybS9jb2NvYS9QYXN0ZWJvYXJkQ29jb2EubW06CisgICAgICAgIChXZWJDb3JlOjpQ
YXN0ZWJvYXJkOjpyZWFkQWxsU3RyaW5ncyk6CisgICAgICAgIChXZWJDb3JlOjpQYXN0ZWJvYXJk
OjpyZWFkU3RyaW5nKToKKworICAgICAgICBJbXBsZW1lbnQgdGhlc2UgdHdvIG1ldGhvZHMgaW4g
dGVybXMgb2YgYHJlYWRQbGF0Zm9ybVZhbHVlc0FzU3RyaW5nc2AuIGByZWFkQWxsU3RyaW5nc2Ag
cmV0dXJucyB0aGUgZnVsbCBsaXN0IG9mCisgICAgICAgIHJlc3VsdHMsIHdoaWxlIGByZWFkU3Ry
aW5nYCBvbmx5IHJldHVybnMgdGhlIGZpcnN0IHJlc3VsdC4KKworICAgICAgICAqIHBsYXRmb3Jt
L2lvcy9QYXN0ZWJvYXJkSU9TLm1tOgorICAgICAgICAoV2ViQ29yZTo6UGFzdGVib2FyZDo6cmVh
ZFBsYXRmb3JtVmFsdWVzQXNTdHJpbmdzKToKKyAgICAgICAgKFdlYkNvcmU6OlBhc3RlYm9hcmQ6
OnJlYWRQbGF0Zm9ybVZhbHVlQXNTdHJpbmcpOiBEZWxldGVkLgorCisgICAgICAgIFJlZmFjdG9y
IHRoaXMgQ29jb2EgaGVscGVyIGZ1bmN0aW9uIHRvIHJldHVybiBhIGxpc3Qgb2YgcGFzdGVib2Fy
ZCBzdHJpbmcgdmFsdWVzIGZvciB0aGUgZ2l2ZW4gdHlwZSwgcmF0aGVyIHRoYW4KKyAgICAgICAg
YSBzaW5nbGUgc3RyaW5nLgorCisgICAgICAgICogcGxhdGZvcm0vaW9zL1BsYXRmb3JtUGFzdGVi
b2FyZElPUy5tbToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtUGFzdGVib2FyZDo6YWxsU3Ry
aW5nc0ZvclR5cGUgY29uc3QpOgorCisgICAgICAgIEdyYWIgYSBzdHJpbmcgZm9yIGVhY2ggaXRl
bSAocmVwcmVzZW50ZWQgYnkgYW4gTlNJdGVtUHJvdmlkZXIpIGluIHRoZSBwYXN0ZWJvYXJkIHRo
YXQgaGFzIGRhdGEgZm9yIHRoZSBnaXZlbgorICAgICAgICB0eXBlIGlkZW50aWZpZXIuCisKKyAg
ICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtUGFzdGVib2FyZDo6cmVhZFN0cmluZyBjb25zdCk6CisK
KyAgICAgICAgUmV0dXJuIHRoZSBhYnNvbHV0ZSBzdHJpbmcgb2YgdGhlIE5TVVJMLCBpbnN0ZWFk
IG9mIFdlYkNvcmU6OlVSTDo6c3RyaW5nKCkuIFRoaXMgaXMgbmVlZGVkIHRvIGhhbmRsZSB0aGUg
Y2FzZQorICAgICAgICB3aGVyZSB0aGUgTlNVUkwgaXMgY29uc3RydWN0ZWQgZnJvbSBhYnNvbHV0
ZSBhbmQgcmVsYXRpdmUgcGFydHMgdXNpbmcgYSBQbGlzdC4gV2hpbGUgLWFic29sdXRlU3RyaW5n
IGdldHMgdXMgdGhlCisgICAgICAgIGZ1bGwgVVJMIHN0cmluZywgVVJMOjpzdHJpbmcoKSBvbmx5
IHJldHVybnMgdGhlIHJlbGF0aXZlIHBvcnRpb24uCisKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMv
UGFzdGVib2FyZE1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6OlBhc3RlYm9hcmQ6OnJlYWRQbGF0
Zm9ybVZhbHVlc0FzU3RyaW5ncyk6CisgICAgICAgIChXZWJDb3JlOjpQYXN0ZWJvYXJkOjpyZWFk
UGxhdGZvcm1WYWx1ZUFzU3RyaW5nKTogRGVsZXRlZC4KKworICAgICAgICBBbHNvIHJlZmFjdG9y
IHRoaXMgdG8gcmV0cmlldmUgYSBsaXN0IG9mIHBhc3RlYm9hcmQgc3RyaW5ncywgcmF0aGVyIHRo
YW4gYSBzaW5nbGUgcmVzdWx0LgorCisgICAgICAgICogcGxhdGZvcm0vbWFjL1BsYXRmb3JtUGFz
dGVib2FyZE1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6OnR5cGVJZGVudGlmaWVyRm9yUGFzdGVi
b2FyZFR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1QYXN0ZWJvYXJkOjphbGxTdHJp
bmdzRm9yVHlwZSBjb25zdCk6CisKKyAgICAgICAgQWRkIGFuIGltcGxlbWVudGF0aW9uIGZvciBg
YWxsU3RyaW5nc0ZvclR5cGVgIG9uIG1hY09TLiBVbmxpa2UgaU9TLCBpdCdzIG11Y2ggdHJpY2tp
ZXIgdG8gZ2V0IHRoaXMgcmlnaHQgc2luY2UKKyAgICAgICAgd2UgbmVlZCB0byBtYWludGFpbiBj
b21wYXRpYmlsaXR5IHdpdGggbGVnYWN5ICJOUypQYm9hcmQiIHR5cGVzLCBhbmQgYE5TUGFzdGVi
b2FyZEl0ZW1gIGNhbiBvbmx5IHByb3ZpZGUgZGF0YQorICAgICAgICBmb3IgYE5TUGFzdGVib2Fy
ZFR5cGVgcyAoaS5lLiBVVElzKSwgc28gdGhlcmUncyBubyB3YXkgdG8ganVzdCBpdGVyYXRlIHRo
cm91Z2ggZWFjaCBwYXN0ZWJvYXJkIGl0ZW0gYW5kIGFzayBpdAorICAgICAgICBmb3IgZGF0YSB0
aGF0IG1hdGNoZXMgdGhlIGdpdmVuIHR5cGUsIGlmIHRoZSB0eXBlcyBhcmUgbm90IFVUSXMuIEhv
d2V2ZXIsIGluIHRoZSBjYXNlIHdoZXJlIHdlIGhhdmUgbXVsdGlwbGUKKyAgICAgICAgaXRlbXMs
IHRoZSBjbGllbnQgbXVzdCBoYXZlIHVzZWQgTlNQYXN0ZWJvYXJkV3JpdGluZy1jb25mb3JtYW50
IG9iamVjdHMgYW5kL29yIE5TUGFzdGVib2FyZEl0ZW0gaXRzZWxmIHRvIHdyaXRlCisgICAgICAg
IGRhdGEgdG8gdGhlIHBhc3RlYm9hcmQuIFNpbmNlIE5TUGFzdGVib2FyZFdyaXRpbmctY29uZm9y
bWFudCBvYmplY3RzIHJlZ2lzdGVyIG1vZGVybiBwYXN0ZWJvYXJkIHR5cGVzIHdoZW4KKyAgICAg
ICAgd3JpdGluZyB0byB0aGUgcGFzdGVib2FyZCwgd2UgY2FuIHNpbXBseSBpdGVyYXRlIG92ZXIg
dGhlc2UgcGFzdGVib2FyZCBpdGVtcyBhbmQgYXNrIGZvciBzdHJpbmcgdmFsdWVzIHVzaW5nCisg
ICAgICAgIHR5cGUgaWRlbnRpZmllcnMgaW5zdGVhZCBvZiBoYXZpbmcgdG8gd29ycnkgYWJvdXQg
bGVnYWN5IHBhc3RlYm9hcmQgdHlwZXMuIEZ1cnRoZXJtb3JlLCBpbiB0aGUgY2FzZSB3aGVyZSB0
aGVyZQorICAgICAgICBpcyBvbmx5IGEgc2luZ2xlIGl0ZW0gaW4gdGhlIHBhc3RlYm9hcmQgYW5k
IHdlIGRvIG5lZWQgdG8gaGFuZGxlIGxlZ2FjeSBwYXN0ZWJvYXJkIHR5cGVzLCB1c2luZyBgLVtO
U1Bhc3RlYm9hcmQKKyAgICAgICAgc3RyaW5nRm9yVHlwZTpdYCBpbiB0aGUgc2FtZSB3YXkgd2Ug
ZG8gY3VycmVudGx5IHNob3VsZCB5aWVsZCB0aGUgY29ycmVjdCByZXN1bHQuCisKKyAgICAgICAg
QXMgc3VjaCwgaW4gdGhlIGNhc2Ugd2hlcmUgdGhlcmUgaXMgYSBzaW5nbGUgcGFzdGVib2FyZCBp
dGVtLCB3ZSB1c2UgYC1bTlNQYXN0ZWJvYXJkIHN0cmluZ0ZvclR5cGU6XWAgd2l0aCB0aGUKKyAg
ICAgICAgb3JpZ2luYWwgbGVnYWN5IHR5cGUsIGFuZCBpbiB0aGUgY2FzZSB3aGVyZSB0aGVyZSBh
cmUgbXVsdGlwbGUgaXRlbXMgb24gdGhlIHBhc3RlYm9hcmQsIHdlIGl0ZXJhdGUgb3ZlciBlYWNo
IG9mCisgICAgICAgIHRoZSBwYXN0ZWJvYXJkIGl0ZW1zIGFuZCBjYWxsIGAtW05TUGFzdGVib2Fy
ZEl0ZW0gc3RyaW5nRm9yVHlwZTpdYCB3aXRoIHRoZSBtb2Rlcm4gcGFzdGVib2FyZCB0eXBlIGNv
cnJlc3BvbmRpbmcKKyAgICAgICAgdG8gdGhlIGdpdmVuIGxlZ2FjeSBwYXN0ZWJvYXJkIHR5cGUu
CisKKyAgICAgICAgVGhlIGRpZmZlcmVudCBjb3JuZXIgY2FzZXMgaW4gdGhpcyBsb2dpYyBhcmUg
dGVzdGVkIGJ5IHRoZSBuZXcgQVBJIHRlc3QsIFBhc3RlTWl4ZWRDb250ZW50LlBhc3RlT25lT3JN
b3JlVVJMcywKKyAgICAgICAgd2hpY2ggZXhlcmNpc2VzIHNldmVyYWwgZGlmZmVyZW50IHdheXMg
b2Ygd3JpdGluZyBvbmUgb3IgbW9yZSBVUkxzIHRvIHRoZSBwYXN0ZWJvYXJkIG9uIG1hY09TLCB3
aGljaCBlYWNoIHJlc3VsdAorICAgICAgICBpbiBkaWZmZXJlbnQgbGVnYWN5IGFuZCBtb2Rlcm4g
cGFzdGVib2FyZCB0eXBlcyBiZWluZyB3cml0dGVuIHRvIHRoZSBwYXN0ZWJvYXJkOyBvdXIgaW1w
bGVtZW50YXRpb24gb2YKKyAgICAgICAgYFBsYXRmb3JtUGFzdGVib2FyZDo6YWxsU3RyaW5nc0Zv
clR5cGVgIG9uIG1hY09TIGhhbmRsZXMgYWxsIGNhc2VzIGNvcnJlY3RseS4KKwogMjAxOC0wOC0z
MSAgWW91ZW5uIEZhYmxldCAgPHlvdWVubkBhcHBsZS5jb20+CiAKICAgICAgICAgTW92ZSBzdGF0
cyBnYXRoZXJpbmcgb3V0IG9mIExpYldlYlJUQ01lZGlhRW5kcG9pbnQKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKaW5kZXggZmMw
M2E1NjUxYzI2MGNhY2YwMDA5M2E5OWM1YTJhYzhmMGM3NTM0My4uMDBkZTI0OGMwZGFkZjQ2ZWQ1
ODhlOTA1MTk5MDEwZmNjZThhYjlhZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9DaGFuZ2VM
b2cKKysrIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMiBAQAorMjAxOC0w
OS0wMyAgV2Vuc29uIEhzaWVoICA8d2Vuc29uX2hzaWVoQGFwcGxlLmNvbT4KKworICAgICAgICBQ
b3B1bGF0ZSAidGV4dC91cmktbGlzdCIgd2l0aCBtdWx0aXBsZSBVUkxzIHdoZW4gdGhlIHBhc3Rl
Ym9hcmQgY29udGFpbnMgbXVsdGlwbGUgVVJMcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTg4ODkwCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS80MzY0
ODYwNT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBB
ZGQgc29tZSBwbHVtYmluZyB0aHJvdWdoIHBhc3RlYm9hcmQgY2xhc3NlcyB0byBzdXBwb3J0IGBQ
YXN0ZWJvYXJkOjpyZWFkQWxsU3RyaW5nc2AuIFNlZSBXZWJDb3JlIENoYW5nZUxvZyBmb3IKKyAg
ICAgICAgbW9yZSBkZXRhaWwuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvQ29jb2EvV2ViUGFzdGVi
b2FyZFByb3h5Q29jb2EubW06CisgICAgICAgIChXZWJLaXQ6OldlYlBhc3RlYm9hcmRQcm94eTo6
Z2V0UGFzdGVib2FyZFN0cmluZ3NGb3JUeXBlKToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUGFz
dGVib2FyZFByb3h5Lmg6CisgICAgICAgICogVUlQcm9jZXNzL1dlYlBhc3RlYm9hcmRQcm94eS5t
ZXNzYWdlcy5pbjoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYlBsYXRm
b3JtU3RyYXRlZ2llcy5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlBsYXRmb3JtU3RyYXRlZ2ll
czo6YWxsU3RyaW5nc0ZvclR5cGUpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBv
cnQvV2ViUGxhdGZvcm1TdHJhdGVnaWVzLmg6CisKIDIwMTgtMDgtMzEgIEpvaG4gV2lsYW5kZXIg
IDx3aWxhbmRlckBhcHBsZS5jb20+CiAKICAgICAgICAgU3RvcmFnZSBBY2Nlc3MgQVBJOiBNYWlu
dGFpbiBhY2Nlc3MgdGhyb3VnaCBzYW1lLXNpdGUgbmF2aWdhdGlvbnMKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFj
L0NoYW5nZUxvZwppbmRleCA5YjFkNTc5MDc2OGVhYTBhYWQ3MTg2MWNkNjVmNzdkNGU0ODJhMjg1
Li40ZGE1ZjNkZDlmMjgzNmFmNWIxNDdkMmNjYjBmMmE5Y2QxNWY0ZGUzIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdExlZ2Fj
eS9tYWMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTggQEAKKzIwMTgtMDktMDMgIFdlbnNvbiBIc2ll
aCAgPHdlbnNvbl9oc2llaEBhcHBsZS5jb20+CisKKyAgICAgICAgUG9wdWxhdGUgInRleHQvdXJp
LWxpc3QiIHdpdGggbXVsdGlwbGUgVVJMcyB3aGVuIHRoZSBwYXN0ZWJvYXJkIGNvbnRhaW5zIG11
bHRpcGxlIFVSTHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE4ODg5MAorICAgICAgICA8cmRhcjovL3Byb2JsZW0vNDM2NDg2MDU+CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIHNvbWUgcGx1bWJpbmcg
dGhyb3VnaCBwYXN0ZWJvYXJkIGNsYXNzZXMgdG8gc3VwcG9ydCBgUGFzdGVib2FyZDo6cmVhZEFs
bFN0cmluZ3NgLiBTZWUgV2ViQ29yZSBDaGFuZ2VMb2cgZm9yCisgICAgICAgIG1vcmUgZGV0YWls
LgorCisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvV2ViUGxhdGZvcm1TdHJhdGVnaWVzLmg6Cisg
ICAgICAgICogV2ViQ29yZVN1cHBvcnQvV2ViUGxhdGZvcm1TdHJhdGVnaWVzLm1tOgorICAgICAg
ICAoV2ViUGxhdGZvcm1TdHJhdGVnaWVzOjphbGxTdHJpbmdzRm9yVHlwZSk6CisKIDIwMTgtMDgt
MzEgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KIAogICAgICAgICBBc3NlcnRpb24g
aGl0IGluIH5Db21wbGV0aW9uSGFuZGxlcigpIGZyb20gfldlYkZyYW1lKCkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2RvbS9EYXRhVHJhbnNmZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9t
L0RhdGFUcmFuc2Zlci5jcHAKaW5kZXggNTE0MWY0NzJmZTliNDkxNWU4YmE0NjdmMzc1YTgzMjI2
MDVmNzg3ZC4uNmQzOWRhNDU1ZDQyZjMzODJkYzc0MjVkYWQ4MDA3YmZkNjcwN2I5ZSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0RhdGFUcmFuc2Zlci5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvZG9tL0RhdGFUcmFuc2Zlci5jcHAKQEAgLTQ3LDYgKzQ3LDcgQEAKICNpbmNsdWRlICJX
ZWJDb250ZW50UmVhZGVyLmgiCiAjaW5jbHVkZSAiV2ViQ29yZVBhc3RlYm9hcmRGaWxlUmVhZGVy
LmgiCiAjaW5jbHVkZSAibWFya3VwLmgiCisjaW5jbHVkZSA8d3RmL3VuaWNvZGUvQ2hhcmFjdGVy
TmFtZXMuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC0xNDIsNiArMTQzLDE5IEBAIHZv
aWQgRGF0YVRyYW5zZmVyOjpjbGVhckRhdGEoY29uc3QgU3RyaW5nJiB0eXBlKQogICAgICAgICBt
X2l0ZW1MaXN0LT5kaWRDbGVhclN0cmluZ0RhdGEobm9ybWFsaXplZFR5cGUpOwogfQogCitzdGF0
aWMgU3RyaW5nIHJlYWRVUkxzRnJvbVBhc3RlYm9hcmRBc1N0cmluZyhQYXN0ZWJvYXJkJiBwYXN0
ZWJvYXJkLCBGdW5jdGlvbjxib29sKGNvbnN0IFN0cmluZyYpPiYmIHNob3VsZEluY2x1ZGVVUkwp
Cit7CisgICAgU3RyaW5nQnVpbGRlciB1cmxMaXN0OworICAgIGZvciAoYXV0byB1cmxTdHJpbmcg
OiBwYXN0ZWJvYXJkLnJlYWRBbGxTdHJpbmdzKCJ0ZXh0L3VyaS1saXN0Il9zKSkgeworICAgICAg
ICBpZiAoIXNob3VsZEluY2x1ZGVVUkwodXJsU3RyaW5nKSkKKyAgICAgICAgICAgIGNvbnRpbnVl
OworICAgICAgICBpZiAoIXVybExpc3QuaXNFbXB0eSgpKQorICAgICAgICAgICAgdXJsTGlzdC5h
cHBlbmQobmV3bGluZUNoYXJhY3Rlcik7CisgICAgICAgIHVybExpc3QuYXBwZW5kKHVybFN0cmlu
Zyk7CisgICAgfQorICAgIHJldHVybiB1cmxMaXN0LnRvU3RyaW5nKCk7Cit9CisKIFN0cmluZyBE
YXRhVHJhbnNmZXI6OmdldERhdGFGb3JJdGVtKERvY3VtZW50JiBkb2N1bWVudCwgY29uc3QgU3Ry
aW5nJiB0eXBlKSBjb25zdAogewogICAgIGlmICghY2FuUmVhZERhdGEoKSkKQEAgLTE1MCw5ICsx
NjQsOSBAQCBTdHJpbmcgRGF0YVRyYW5zZmVyOjpnZXREYXRhRm9ySXRlbShEb2N1bWVudCYgZG9j
dW1lbnQsIGNvbnN0IFN0cmluZyYgdHlwZSkgY29ucwogICAgIGF1dG8gbG93ZXJjYXNlVHlwZSA9
IHN0cmlwTGVhZGluZ0FuZFRyYWlsaW5nSFRNTFNwYWNlcyh0eXBlKS5jb252ZXJ0VG9BU0NJSUxv
d2VyY2FzZSgpOwogICAgIGlmIChzaG91bGRTdXBwcmVzc0dldEFuZFNldERhdGFUb0F2b2lkRXhw
b3NpbmdGaWxlUGF0aHMoKSkgewogICAgICAgICBpZiAobG93ZXJjYXNlVHlwZSA9PSAidGV4dC91
cmktbGlzdCIpIHsKLSAgICAgICAgICAgIGF1dG8gdXJsU3RyaW5nID0gbV9wYXN0ZWJvYXJkLT5y
ZWFkU3RyaW5nKGxvd2VyY2FzZVR5cGUpOwotICAgICAgICAgICAgaWYgKFBhc3RlYm9hcmQ6OmNh
bkV4cG9zZVVSTFRvRE9NV2hlblBhc3RlYm9hcmRDb250YWluc0ZpbGVzKHVybFN0cmluZykpCi0g
ICAgICAgICAgICAgICAgcmV0dXJuIHVybFN0cmluZzsKKyAgICAgICAgICAgIHJldHVybiByZWFk
VVJMc0Zyb21QYXN0ZWJvYXJkQXNTdHJpbmcoKm1fcGFzdGVib2FyZCwgW10gKGF1dG8mIHVybFN0
cmluZykgeworICAgICAgICAgICAgICAgIHJldHVybiBQYXN0ZWJvYXJkOjpjYW5FeHBvc2VVUkxU
b0RPTVdoZW5QYXN0ZWJvYXJkQ29udGFpbnNGaWxlcyh1cmxTdHJpbmcpOworICAgICAgICAgICAg
fSk7CiAgICAgICAgIH0KIAogICAgICAgICBpZiAobG93ZXJjYXNlVHlwZSA9PSAidGV4dC9odG1s
IiAmJiBSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLmN1c3RvbVBhc3Rl
Ym9hcmREYXRhRW5hYmxlZCgpKSB7CkBAIC0xOTIsNiArMjA2LDEyIEBAIFN0cmluZyBEYXRhVHJh
bnNmZXI6OnJlYWRTdHJpbmdGcm9tUGFzdGVib2FyZChEb2N1bWVudCYgZG9jdW1lbnQsIGNvbnN0
IFN0cmluZyYKICAgICAgICAgcmV0dXJuIHJlYWRlci5tYXJrdXA7CiAgICAgfQogCisgICAgaWYg
KCFpczxTdGF0aWNQYXN0ZWJvYXJkPigqbV9wYXN0ZWJvYXJkKSAmJiBsb3dlcmNhc2VUeXBlID09
ICJ0ZXh0L3VyaS1saXN0IikgeworICAgICAgICByZXR1cm4gcmVhZFVSTHNGcm9tUGFzdGVib2Fy
ZEFzU3RyaW5nKCptX3Bhc3RlYm9hcmQsIFtdIChhdXRvJikgeworICAgICAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgICAgIH0pOworICAgIH0KKwogICAgIHJldHVybiBtX3Bhc3RlYm9hcmQtPnJl
YWRTdHJpbmcobG93ZXJjYXNlVHlwZSk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL1Bhc3RlYm9hcmQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUGFzdGVi
b2FyZC5jcHAKaW5kZXggMThmZGViMmQ5ZTg1ZDdlOTE2MjFhNDU1ZGYzZTdmOWM1YTk0MGQyOC4u
NzM3YTM5MDQyNTdkZTY0M2JjMGQ5YWI5OWJjMjY0YTMxNGZkNmZmNyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vUGFzdGVib2FyZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vUGFzdGVib2FyZC5jcHAKQEAgLTg1LDQgKzg1LDE3IEBAIFBhc3RlYm9hcmRDdXN0
b21EYXRhIFBhc3RlYm9hcmRDdXN0b21EYXRhOjpmcm9tU2hhcmVkQnVmZmVyKGNvbnN0IFNoYXJl
ZEJ1ZmZlciYKICAgICByZXR1cm4gcmVzdWx0OwogfQogCisjaWYgIVBMQVRGT1JNKENPQ09BKQor
CitWZWN0b3I8U3RyaW5nPiBQYXN0ZWJvYXJkOjpyZWFkQWxsU3RyaW5ncyhjb25zdCBTdHJpbmcm
IHR5cGUpCit7CisgICAgYXV0byByZXN1bHQgPSByZWFkU3RyaW5nKHR5cGUpOworICAgIGlmIChy
ZXN1bHQuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4geyB9OworCisgICAgcmV0dXJuIHsgcmVz
dWx0IH07Cit9CisKKyNlbmRpZgorCiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vUGFzdGVib2FyZC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUGFzdGVib2FyZC5o
CmluZGV4IGUwOTgxNTY1MWJkMmQ2MDU3NGRhNDIzNmMzODBmYWQ0ZDYwMjE1YTkuLjIwNjM1YWIw
Mjk0ZjI5OTdlMjhmYmZmZDUwOTg2OTQ4YTk5YjYwMzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL1Bhc3RlYm9hcmQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Q
YXN0ZWJvYXJkLmgKQEAgLTIwNCw2ICsyMDQsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBXRUJD
T1JFX0VYUE9SVCBTdHJpbmcgcmVhZE9yaWdpbigpOwogICAgIHZpcnR1YWwgV0VCQ09SRV9FWFBP
UlQgU3RyaW5nIHJlYWRTdHJpbmcoY29uc3QgU3RyaW5nJiB0eXBlKTsKICAgICB2aXJ0dWFsIFdF
QkNPUkVfRVhQT1JUIFN0cmluZyByZWFkU3RyaW5nSW5DdXN0b21EYXRhKGNvbnN0IFN0cmluZyYg
dHlwZSk7CisgICAgdmlydHVhbCBXRUJDT1JFX0VYUE9SVCBWZWN0b3I8U3RyaW5nPiByZWFkQWxs
U3RyaW5ncyhjb25zdCBTdHJpbmcmIHR5cGUpOwogCiAgICAgdmlydHVhbCBXRUJDT1JFX0VYUE9S
VCB2b2lkIHdyaXRlU3RyaW5nKGNvbnN0IFN0cmluZyYgdHlwZSwgY29uc3QgU3RyaW5nJiBkYXRh
KTsKICAgICB2aXJ0dWFsIFdFQkNPUkVfRVhQT1JUIHZvaWQgY2xlYXIoKTsKQEAgLTI5OCw3ICsy
OTksNyBAQCBwcml2YXRlOgogCiAjaWYgUExBVEZPUk0oQ09DT0EpCiAgICAgVmVjdG9yPFN0cmlu
Zz4gcmVhZEZpbGVQYXRocygpOwotICAgIFN0cmluZyByZWFkUGxhdGZvcm1WYWx1ZUFzU3RyaW5n
KGNvbnN0IFN0cmluZyYgZG9tVHlwZSwgbG9uZyBjaGFuZ2VDb3VudCwgY29uc3QgU3RyaW5nJiBw
YXN0ZWJvYXJkTmFtZSk7CisgICAgVmVjdG9yPFN0cmluZz4gcmVhZFBsYXRmb3JtVmFsdWVzQXNT
dHJpbmdzKGNvbnN0IFN0cmluZyYgZG9tVHlwZSwgbG9uZyBjaGFuZ2VDb3VudCwgY29uc3QgU3Ry
aW5nJiBwYXN0ZWJvYXJkTmFtZSk7CiAgICAgc3RhdGljIHZvaWQgYWRkSFRNTENsaXBib2FyZFR5
cGVzRm9yQ29jb2FUeXBlKExpc3RIYXNoU2V0PFN0cmluZz4mIHJlc3VsdFR5cGVzLCBjb25zdCBT
dHJpbmcmIGNvY29hVHlwZSk7CiAgICAgU3RyaW5nIHJlYWRTdHJpbmdGb3JQbGF0Zm9ybVR5cGUo
Y29uc3QgU3RyaW5nJik7CiAgICAgVmVjdG9yPFN0cmluZz4gcmVhZFR5cGVzV2l0aFNlY3VyaXR5
Q2hlY2soKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Bhc3RlYm9hcmRT
dHJhdGVneS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUGFzdGVib2FyZFN0cmF0ZWd5LmgK
aW5kZXggOWQ4MjdjMDFmODVjYzAyYjIxNjk1ZDliMmU3YmNhMTViNGI5ZmQwNS4uOTlkOGRkZmZh
ZTAwZWFjZTFhNjMyY2IwZDNmNTM4MWEyM2ZhMzY1YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vUGFzdGVib2FyZFN0cmF0ZWd5LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vUGFzdGVib2FyZFN0cmF0ZWd5LmgKQEAgLTYxLDYgKzYxLDcgQEAgcHVibGljOgogICAg
IHZpcnR1YWwgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gYnVmZmVyRm9yVHlwZShjb25zdCBTdHJpbmcm
IHBhc3RlYm9hcmRUeXBlLCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lKSA9IDA7CiAgICAg
dmlydHVhbCB2b2lkIGdldFBhdGhuYW1lc0ZvclR5cGUoVmVjdG9yPFN0cmluZz4mIHBhdGhuYW1l
cywgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkVHlwZSwgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJk
TmFtZSkgPSAwOwogICAgIHZpcnR1YWwgU3RyaW5nIHN0cmluZ0ZvclR5cGUoY29uc3QgU3RyaW5n
JiBwYXN0ZWJvYXJkVHlwZSwgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSkgPSAwOworICAg
IHZpcnR1YWwgVmVjdG9yPFN0cmluZz4gYWxsU3RyaW5nc0ZvclR5cGUoY29uc3QgU3RyaW5nJiBw
YXN0ZWJvYXJkVHlwZSwgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSkgPSAwOwogICAgIHZp
cnR1YWwgbG9uZyBjaGFuZ2VDb3VudChjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lKSA9IDA7
CiAgICAgdmlydHVhbCBTdHJpbmcgdW5pcXVlTmFtZSgpID0gMDsKICAgICB2aXJ0dWFsIENvbG9y
IGNvbG9yKGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUpID0gMDsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL1BsYXRmb3JtUGFzdGVib2FyZC5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vUGxhdGZvcm1QYXN0ZWJvYXJkLmgKaW5kZXggZGM2NTBjMzMzNTBhODdkOTdj
ZjUwOTg0ZWI2ZTUzNDUwMjEzOGQ3Ni4uOGUxM2JmNGQ4NDE0MTNiZjFjMTE3ZGVjOWVmZjg1YzQ4
MjRiODhlZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUGxhdGZvcm1QYXN0
ZWJvYXJkLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUGxhdGZvcm1QYXN0ZWJvYXJk
LmgKQEAgLTczLDYgKzczLDcgQEAgcHVibGljOgogICAgIFdFQkNPUkVfRVhQT1JUIFJlZlB0cjxT
aGFyZWRCdWZmZXI+IGJ1ZmZlckZvclR5cGUoY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkVHlwZSk7
CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBnZXRQYXRobmFtZXNGb3JUeXBlKFZlY3RvcjxTdHJp
bmc+JiBwYXRobmFtZXMsIGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZFR5cGUpIGNvbnN0OwogICAg
IFdFQkNPUkVfRVhQT1JUIFN0cmluZyBzdHJpbmdGb3JUeXBlKGNvbnN0IFN0cmluZyYgcGFzdGVi
b2FyZFR5cGUpIGNvbnN0OworICAgIFdFQkNPUkVfRVhQT1JUIFZlY3RvcjxTdHJpbmc+IGFsbFN0
cmluZ3NGb3JUeXBlKGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZFR5cGUpIGNvbnN0OwogICAgIFdF
QkNPUkVfRVhQT1JUIGxvbmcgY2hhbmdlQ291bnQoKSBjb25zdDsKICAgICBXRUJDT1JFX0VYUE9S
VCBDb2xvciBjb2xvcigpOwogICAgIFdFQkNPUkVfRVhQT1JUIFVSTCB1cmwoKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1Bhc3RlYm9hcmRDb2NvYS5tbSBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1Bhc3RlYm9hcmRDb2NvYS5tbQppbmRleCBmNDhl
N2I4MzcwYmFjY2M0MDMwYWYwNmEzN2QxNDA4ZmVlMDk3MGQ2Li5mYTUwZTRjOWM1NTEzNTE3YjMz
NmMwMjI2MDkwZTNmNjAyNzcxMmQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9jb2NvYS9QYXN0ZWJvYXJkQ29jb2EubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Y29jb2EvUGFzdGVib2FyZENvY29hLm1tCkBAIC0yNTksOSArMjU5LDE1IEBAIHZvaWQgUGFzdGVi
b2FyZDo6cmVhZChQYXN0ZWJvYXJkRmlsZVJlYWRlciYgcmVhZGVyKQogICAgIH0KIH0KIAorVmVj
dG9yPFN0cmluZz4gUGFzdGVib2FyZDo6cmVhZEFsbFN0cmluZ3MoY29uc3QgU3RyaW5nJiB0eXBl
KQoreworICAgIHJldHVybiByZWFkUGxhdGZvcm1WYWx1ZXNBc1N0cmluZ3ModHlwZSwgbV9jaGFu
Z2VDb3VudCwgbV9wYXN0ZWJvYXJkTmFtZSk7Cit9CisKIFN0cmluZyBQYXN0ZWJvYXJkOjpyZWFk
U3RyaW5nKGNvbnN0IFN0cmluZyYgdHlwZSkKIHsKLSAgICByZXR1cm4gcmVhZFBsYXRmb3JtVmFs
dWVBc1N0cmluZyh0eXBlLCBtX2NoYW5nZUNvdW50LCBtX3Bhc3RlYm9hcmROYW1lKTsKKyAgICBh
dXRvIHZhbHVlcyA9IHJlYWRQbGF0Zm9ybVZhbHVlc0FzU3RyaW5ncyh0eXBlLCBtX2NoYW5nZUNv
dW50LCBtX3Bhc3RlYm9hcmROYW1lKTsKKyAgICByZXR1cm4gdmFsdWVzLmlzRW1wdHkoKSA/IFN0
cmluZygpIDogdmFsdWVzLmZpcnN0KCk7CiB9CiAKIFN0cmluZyBQYXN0ZWJvYXJkOjpyZWFkU3Ry
aW5nSW5DdXN0b21EYXRhKGNvbnN0IFN0cmluZyYgdHlwZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2lvcy9QYXN0ZWJvYXJkSU9TLm1tIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vaW9zL1Bhc3RlYm9hcmRJT1MubW0KaW5kZXggZDFjMDJlZGYyMjAyOGI0NTMxYWZjN2Vj
MGY3NjA5YTU3MTUzNzJhMy4uM2QxMjU4MmM4ZWY4MDBlMDQwYjE2M2E3YWZlMWM4ZWQyYjY3MGJi
ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1Bhc3RlYm9hcmRJT1Mu
bW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1Bhc3RlYm9hcmRJT1MubW0KQEAg
LTM3MywzOCArMzczLDI2IEBAIHZvaWQgUGFzdGVib2FyZDo6Y2xlYXIoKQogICAgIHBsYXRmb3Jt
U3RyYXRlZ2llcygpLT5wYXN0ZWJvYXJkU3RyYXRlZ3koKS0+d3JpdGVUb1Bhc3RlYm9hcmQoU3Ry
aW5nKCksIFN0cmluZygpLCBtX3Bhc3RlYm9hcmROYW1lKTsKIH0KIAotU3RyaW5nIFBhc3RlYm9h
cmQ6OnJlYWRQbGF0Zm9ybVZhbHVlQXNTdHJpbmcoY29uc3QgU3RyaW5nJiBkb21UeXBlLCBsb25n
IGNoYW5nZUNvdW50LCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lKQorVmVjdG9yPFN0cmlu
Zz4gUGFzdGVib2FyZDo6cmVhZFBsYXRmb3JtVmFsdWVzQXNTdHJpbmdzKGNvbnN0IFN0cmluZyYg
ZG9tVHlwZSwgbG9uZyBjaGFuZ2VDb3VudCwgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSkK
IHsKLSAgICBQYXN0ZWJvYXJkU3RyYXRlZ3kmIHN0cmF0ZWd5ID0gKnBsYXRmb3JtU3RyYXRlZ2ll
cygpLT5wYXN0ZWJvYXJkU3RyYXRlZ3koKTsKLQotICAgIGludCBudW1iZXJPZkl0ZW1zID0gc3Ry
YXRlZ3kuZ2V0UGFzdGVib2FyZEl0ZW1zQ291bnQocGFzdGVib2FyZE5hbWUpOwotCi0gICAgaWYg
KCFudW1iZXJPZkl0ZW1zKQotICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisgICAgYXV0byYgc3Ry
YXRlZ3kgPSAqcGxhdGZvcm1TdHJhdGVnaWVzKCktPnBhc3RlYm9hcmRTdHJhdGVneSgpOwogCiAg
ICAgLy8gR3JhYiB0aGUgdmFsdWUgb2ZmIHRoZSBwYXN0ZWJvYXJkIGNvcnJlc3BvbmRpbmcgdG8g
dGhlIGNvY29hVHlwZS4KLSAgICBSZXRhaW5QdHI8TlNTdHJpbmc+IGNvY29hVHlwZSA9IGNvY29h
VHlwZUZyb21IVE1MQ2xpcGJvYXJkVHlwZShkb21UeXBlKTsKLQotICAgIE5TU3RyaW5nICpjb2Nv
YVZhbHVlID0gbmlsOworICAgIGF1dG8gY29jb2FUeXBlID0gY29jb2FUeXBlRnJvbUhUTUxDbGlw
Ym9hcmRUeXBlKGRvbVR5cGUpOworICAgIGlmICghY29jb2FUeXBlKQorICAgICAgICByZXR1cm4g
eyB9OwogCi0gICAgaWYgKFtjb2NvYVR5cGUgaXNFcXVhbFRvU3RyaW5nOihOU1N0cmluZyAqKWtV
VFR5cGVVUkxdKSB7Ci0gICAgICAgIFN0cmluZyB0aXRsZTsKLSAgICAgICAgVVJMIHVybCA9IHN0
cmF0ZWd5LnJlYWRVUkxGcm9tUGFzdGVib2FyZCgwLCBwYXN0ZWJvYXJkTmFtZSwgdGl0bGUpOwot
ICAgICAgICBpZiAoIXVybC5pc051bGwoKSkKLSAgICAgICAgICAgIGNvY29hVmFsdWUgPSBbKE5T
VVJMICopdXJsIGFic29sdXRlU3RyaW5nXTsKLSAgICB9IGVsc2UgaWYgKFtjb2NvYVR5cGUgaXNF
cXVhbFRvU3RyaW5nOihOU1N0cmluZyAqKWtVVFR5cGVQbGFpblRleHRdKSB7Ci0gICAgICAgIFN0
cmluZyB2YWx1ZSA9IHN0cmF0ZWd5LnJlYWRTdHJpbmdGcm9tUGFzdGVib2FyZCgwLCBrVVRUeXBl
UGxhaW5UZXh0LCBwYXN0ZWJvYXJkTmFtZSk7Ci0gICAgICAgIGlmICghdmFsdWUuaXNOdWxsKCkp
Ci0gICAgICAgICAgICBjb2NvYVZhbHVlID0gWyhOU1N0cmluZyAqKXZhbHVlIHByZWNvbXBvc2Vk
U3RyaW5nV2l0aENhbm9uaWNhbE1hcHBpbmddOwotICAgIH0gZWxzZSBpZiAoY29jb2FUeXBlKQot
ICAgICAgICBjb2NvYVZhbHVlID0gKE5TU3RyaW5nICopc3RyYXRlZ3kucmVhZFN0cmluZ0Zyb21Q
YXN0ZWJvYXJkKDAsIGNvY29hVHlwZS5nZXQoKSwgcGFzdGVib2FyZE5hbWUpOworICAgIGJvb2wg
aXNQbGFpblRleHRUeXBlID0gW2NvY29hVHlwZSBpc0VxdWFsVG9TdHJpbmc6KE5TU3RyaW5nICop
a1VUVHlwZVBsYWluVGV4dF07CisgICAgVmVjdG9yPFN0cmluZz4gdmFsdWVzOworICAgIGZvciAo
YXV0byYgdmFsdWUgOiBzdHJhdGVneS5hbGxTdHJpbmdzRm9yVHlwZShjb2NvYVR5cGUuZ2V0KCks
IHBhc3RlYm9hcmROYW1lKSkKKyAgICAgICAgdmFsdWVzLmFwcGVuZChpc1BsYWluVGV4dFR5cGUg
PyBTdHJpbmcoW3ZhbHVlIHByZWNvbXBvc2VkU3RyaW5nV2l0aENhbm9uaWNhbE1hcHBpbmddKSA6
IHZhbHVlKTsKIAogICAgIC8vIEVuZm9yY2UgY2hhbmdlQ291bnQgb3Vyc2VsdmVzIGZvciBzZWN1
cml0eS4gV2UgY2hlY2sgYWZ0ZXIgcmVhZGluZyBpbnN0ZWFkIG9mIGJlZm9yZSB0byBiZQogICAg
IC8vIHN1cmUgaXQgZG9lc24ndCBjaGFuZ2UgYmV0d2VlbiBvdXIgdGVzdGluZyB0aGUgY2hhbmdl
IGNvdW50IGFuZCBhY2Nlc3NpbmcgdGhlIGRhdGEuCi0gICAgaWYgKGNvY29hVmFsdWUgJiYgY2hh
bmdlQ291bnQgPT0gY2hhbmdlQ291bnRGb3JQYXN0ZWJvYXJkKHBhc3RlYm9hcmROYW1lKSkKLSAg
ICAgICAgcmV0dXJuIGNvY29hVmFsdWU7CisgICAgaWYgKGNoYW5nZUNvdW50ICE9IGNoYW5nZUNv
dW50Rm9yUGFzdGVib2FyZChwYXN0ZWJvYXJkTmFtZSkpCisgICAgICAgIHJldHVybiB7IH07CiAK
LSAgICByZXR1cm4gU3RyaW5nKCk7CisgICAgcmV0dXJuIHZhbHVlczsKIH0KIAogdm9pZCBQYXN0
ZWJvYXJkOjphZGRIVE1MQ2xpcGJvYXJkVHlwZXNGb3JDb2NvYVR5cGUoTGlzdEhhc2hTZXQ8U3Ry
aW5nPiYgcmVzdWx0VHlwZXMsIGNvbnN0IFN0cmluZyYgY29jb2FUeXBlKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1BsYXRmb3JtUGFzdGVib2FyZElPUy5tbSBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9QbGF0Zm9ybVBhc3RlYm9hcmRJT1MubW0KaW5kZXgg
ZTAyODkzZWQ2ZTRhNmIwMWU3MjgyMjFiZjZmMWQ0MThmYjIxNTViMC4uZGE3ZjYyMTc3YWM4NTk2
MDUzMTAxYjViODkxODJlMDIxYTliMjZkYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vaW9zL1BsYXRmb3JtUGFzdGVib2FyZElPUy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9pb3MvUGxhdGZvcm1QYXN0ZWJvYXJkSU9TLm1tCkBAIC02MDMsNiArNjAzLDE5IEBA
IGludCBQbGF0Zm9ybVBhc3RlYm9hcmQ6OmNvdW50KCkgY29uc3QKICAgICByZXR1cm4gW21fcGFz
dGVib2FyZCBudW1iZXJPZkl0ZW1zXTsKIH0KIAorVmVjdG9yPFN0cmluZz4gUGxhdGZvcm1QYXN0
ZWJvYXJkOjphbGxTdHJpbmdzRm9yVHlwZShjb25zdCBTdHJpbmcmIHR5cGUpIGNvbnN0Cit7Cisg
ICAgYXV0byBudW1iZXJPZkl0ZW1zID0gY291bnQoKTsKKyAgICBWZWN0b3I8U3RyaW5nPiBzdHJp
bmdzOworICAgIHN0cmluZ3MucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShudW1iZXJPZkl0ZW1zKTsK
KyAgICBmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgbnVtYmVyT2ZJdGVtczsgKytpbmRleCkg
eworICAgICAgICBTdHJpbmcgdmFsdWUgPSByZWFkU3RyaW5nKGluZGV4LCB0eXBlKTsKKyAgICAg
ICAgaWYgKCF2YWx1ZS5pc0VtcHR5KCkpCisgICAgICAgICAgICBzdHJpbmdzLnVuY2hlY2tlZEFw
cGVuZChXVEZNb3ZlKHZhbHVlKSk7CisgICAgfQorICAgIHJldHVybiBzdHJpbmdzOworfQorCiBS
ZWZQdHI8U2hhcmVkQnVmZmVyPiBQbGF0Zm9ybVBhc3RlYm9hcmQ6OnJlYWRCdWZmZXIoaW50IGlu
ZGV4LCBjb25zdCBTdHJpbmcmIHR5cGUpIGNvbnN0CiB7CiAgICAgTlNJbmRleFNldCAqaW5kZXhT
ZXQgPSBbTlNJbmRleFNldCBpbmRleFNldFdpdGhJbmRleDppbmRleF07CkBAIC02MTgsNyArNjMx
LDcgQEAgU3RyaW5nIFBsYXRmb3JtUGFzdGVib2FyZDo6cmVhZFN0cmluZyhpbnQgaW5kZXgsIGNv
bnN0IFN0cmluZyYgdHlwZSkgY29uc3QKIHsKICAgICBpZiAodHlwZSA9PSBTdHJpbmcoa1VUVHlw
ZVVSTCkpIHsKICAgICAgICAgU3RyaW5nIHRpdGxlOwotICAgICAgICByZXR1cm4gcmVhZFVSTChp
bmRleCwgdGl0bGUpOworICAgICAgICByZXR1cm4gWyhOU1VSTCAqKXJlYWRVUkwoaW5kZXgsIHRp
dGxlKSBhYnNvbHV0ZVN0cmluZ107CiAgICAgfQogCiAgICAgTlNJbmRleFNldCAqaW5kZXhTZXQg
PSBbTlNJbmRleFNldCBpbmRleFNldFdpdGhJbmRleDppbmRleF07CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvUGFzdGVib2FyZE1hYy5tbSBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL21hYy9QYXN0ZWJvYXJkTWFjLm1tCmluZGV4IGZkNmU5Mjk4Nzc0ZmFmNGZlODcz
NWJmMjc1NjVhZGM5NTMyYmY2MzYuLjlkODE4NzQ4OTdkNmVlZmY1NzAwNGVmMjgxOTlhNzczYmQw
N2ZjOGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9QYXN0ZWJvYXJk
TWFjLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9QYXN0ZWJvYXJkTWFjLm1t
CkBAIC00ODgsMjIgKzQ4OCwyNCBAQCB2b2lkIFBhc3RlYm9hcmQ6OmNsZWFyKGNvbnN0IFN0cmlu
ZyYgdHlwZSkKICAgICBtX2NoYW5nZUNvdW50ID0gcGxhdGZvcm1TdHJhdGVnaWVzKCktPnBhc3Rl
Ym9hcmRTdHJhdGVneSgpLT5zZXRTdHJpbmdGb3JUeXBlKGVtcHR5U3RyaW5nKCksIGNvY29hVHlw
ZSwgbV9wYXN0ZWJvYXJkTmFtZSk7CiB9CiAKLVN0cmluZyBQYXN0ZWJvYXJkOjpyZWFkUGxhdGZv
cm1WYWx1ZUFzU3RyaW5nKGNvbnN0IFN0cmluZyYgZG9tVHlwZSwgbG9uZyBjaGFuZ2VDb3VudCwg
Y29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSkKK1ZlY3RvcjxTdHJpbmc+IFBhc3RlYm9hcmQ6
OnJlYWRQbGF0Zm9ybVZhbHVlc0FzU3RyaW5ncyhjb25zdCBTdHJpbmcmIGRvbVR5cGUsIGxvbmcg
Y2hhbmdlQ291bnQsIGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUpCiB7Ci0gICAgY29uc3Qg
U3RyaW5nJiBjb2NvYVR5cGUgPSBjb2NvYVR5cGVGcm9tSFRNTENsaXBib2FyZFR5cGUoZG9tVHlw
ZSk7Ci0gICAgU3RyaW5nIGNvY29hVmFsdWU7CisgICAgYXV0byYgc3RyYXRlZ3kgPSAqcGxhdGZv
cm1TdHJhdGVnaWVzKCktPnBhc3RlYm9hcmRTdHJhdGVneSgpOworICAgIGF1dG8gY29jb2FUeXBl
ID0gY29jb2FUeXBlRnJvbUhUTUxDbGlwYm9hcmRUeXBlKGRvbVR5cGUpOworICAgIGlmIChjb2Nv
YVR5cGUuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4geyB9OwogCi0gICAgaWYgKGNvY29hVHlw
ZSA9PSBTdHJpbmcobGVnYWN5U3RyaW5nUGFzdGVib2FyZFR5cGUoKSkpCi0gICAgICAgIGNvY29h
VmFsdWUgPSBbcGxhdGZvcm1TdHJhdGVnaWVzKCktPnBhc3RlYm9hcmRTdHJhdGVneSgpLT5zdHJp
bmdGb3JUeXBlKGNvY29hVHlwZSwgcGFzdGVib2FyZE5hbWUpIHByZWNvbXBvc2VkU3RyaW5nV2l0
aENhbm9uaWNhbE1hcHBpbmddOwotICAgIGVsc2UgaWYgKCFjb2NvYVR5cGUuaXNFbXB0eSgpKQot
ICAgICAgICBjb2NvYVZhbHVlID0gcGxhdGZvcm1TdHJhdGVnaWVzKCktPnBhc3RlYm9hcmRTdHJh
dGVneSgpLT5zdHJpbmdGb3JUeXBlKGNvY29hVHlwZSwgcGFzdGVib2FyZE5hbWUpOworICAgIGJv
b2wgaXNTdHJpbmdUeXBlID0gY29jb2FUeXBlID09IFN0cmluZyhsZWdhY3lTdHJpbmdQYXN0ZWJv
YXJkVHlwZSgpKTsKKyAgICBWZWN0b3I8U3RyaW5nPiB2YWx1ZXM7CisgICAgZm9yIChhdXRvJiB2
YWx1ZSA6IHN0cmF0ZWd5LmFsbFN0cmluZ3NGb3JUeXBlKGNvY29hVHlwZSwgcGFzdGVib2FyZE5h
bWUpKQorICAgICAgICB2YWx1ZXMuYXBwZW5kKGlzU3RyaW5nVHlwZSA/IFN0cmluZyhbdmFsdWUg
cHJlY29tcG9zZWRTdHJpbmdXaXRoQ2Fub25pY2FsTWFwcGluZ10pIDogdmFsdWUpOwogCiAgICAg
Ly8gRW5mb3JjZSBjaGFuZ2VDb3VudCBvdXJzZWx2ZXMgZm9yIHNlY3VyaXR5LiAgV2UgY2hlY2sg
YWZ0ZXIgcmVhZGluZyBpbnN0ZWFkIG9mIGJlZm9yZSB0byBiZQogICAgIC8vIHN1cmUgaXQgZG9l
c24ndCBjaGFuZ2UgYmV0d2VlbiBvdXIgdGVzdGluZyB0aGUgY2hhbmdlIGNvdW50IGFuZCBhY2Nl
c3NpbmcgdGhlIGRhdGEuCi0gICAgaWYgKCFjb2NvYVZhbHVlLmlzRW1wdHkoKSAmJiBjaGFuZ2VD
b3VudCA9PSBwbGF0Zm9ybVN0cmF0ZWdpZXMoKS0+cGFzdGVib2FyZFN0cmF0ZWd5KCktPmNoYW5n
ZUNvdW50KHBhc3RlYm9hcmROYW1lKSkKLSAgICAgICAgcmV0dXJuIGNvY29hVmFsdWU7CisgICAg
aWYgKGNoYW5nZUNvdW50ICE9IHBsYXRmb3JtU3RyYXRlZ2llcygpLT5wYXN0ZWJvYXJkU3RyYXRl
Z3koKS0+Y2hhbmdlQ291bnQocGFzdGVib2FyZE5hbWUpKQorICAgICAgICByZXR1cm4geyB9Owog
Ci0gICAgcmV0dXJuIFN0cmluZygpOworICAgIHJldHVybiB2YWx1ZXM7CiB9CiAKIHN0YXRpYyBT
dHJpbmcgdXRpVHlwZUZyb21Db2NvYVR5cGUoY29uc3QgU3RyaW5nJiB0eXBlKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1BsYXRmb3JtUGFzdGVib2FyZE1hYy5tbSBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9QbGF0Zm9ybVBhc3RlYm9hcmRNYWMubW0KaW5k
ZXggYTE5MjViYWRjOTNiNmM3MTkzMWVjOTU0OWQ4Y2Q3MmU2MjJkMWQ3ZS4uYThmNzdmYTBhYmVj
MDEzZDMwNDZjMDNkMzBhNWEwMjZlMDFmMTExMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbWFjL1BsYXRmb3JtUGFzdGVib2FyZE1hYy5tbQorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9tYWMvUGxhdGZvcm1QYXN0ZWJvYXJkTWFjLm1tCkBAIC0xMTYsNiArMTE2LDc1
IEBAIFN0cmluZyBQbGF0Zm9ybVBhc3RlYm9hcmQ6OnN0cmluZ0ZvclR5cGUoY29uc3QgU3RyaW5n
JiBwYXN0ZWJvYXJkVHlwZSkgY29uc3QKICAgICByZXR1cm4gW21fcGFzdGVib2FyZCBzdHJpbmdG
b3JUeXBlOnBhc3RlYm9hcmRUeXBlXTsKIH0KIAorc3RhdGljIE5TQXJyYXk8TlNVUkwgKj4gKnVy
bHNGcm9tUGFzdGVib2FyZChOU1Bhc3RlYm9hcmQgKnBhc3RlYm9hcmQpCit7CisgICAgTlNBcnJh
eTxOU1Bhc3RlYm9hcmRJdGVtICo+ICppdGVtcyA9IHBhc3RlYm9hcmQucGFzdGVib2FyZEl0ZW1z
OworICAgIGlmIChpdGVtcy5jb3VudCA+IDEpIHsKKyAgICAgICAgTlNNdXRhYmxlQXJyYXk8TlNV
UkwgKj4gKnVybHNGcm9tSXRlbXMgPSBbTlNNdXRhYmxlQXJyYXkgYXJyYXlXaXRoQ2FwYWNpdHk6
aXRlbXMuY291bnRdOworICAgICAgICBmb3IgKE5TUGFzdGVib2FyZEl0ZW0gKml0ZW0gaW4gaXRl
bXMpIHsKKyAgICAgICAgICAgIGlmIChpZCBwcm9wZXJ0eUxpc3QgPSBbaXRlbSBwcm9wZXJ0eUxp
c3RGb3JUeXBlOihfX2JyaWRnZSBOU1N0cmluZyAqKWtVVFR5cGVVUkxdKSB7CisgICAgICAgICAg
ICAgICAgYXV0byB1cmwgPSBhZG9wdE5TKFtbTlNVUkwgYWxsb2NdIGluaXRXaXRoUGFzdGVib2Fy
ZFByb3BlcnR5TGlzdDpwcm9wZXJ0eUxpc3Qgb2ZUeXBlOihfX2JyaWRnZSBOU1N0cmluZyAqKWtV
VFR5cGVVUkxdKTsKKyAgICAgICAgICAgICAgICBbdXJsc0Zyb21JdGVtcyBhZGRPYmplY3Q6dXJs
LmdldCgpXTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdXJsc0Zy
b21JdGVtczsKKyAgICB9CisKKyAgICBpZiAoTlNVUkwgKnVybEZyb21TdHJpbmcgPSBbTlNVUkwg
VVJMRnJvbVBhc3RlYm9hcmQ6cGFzdGVib2FyZF0pCisgICAgICAgIHJldHVybiBAWyB1cmxGcm9t
U3RyaW5nIF07CisKKyAgICBpZiAoTlNVUkwgKnVybEZyb21QYXN0ZWJvYXJkID0gW05TVVJMIFVS
TFdpdGhTdHJpbmc6W3Bhc3RlYm9hcmQgc3RyaW5nRm9yVHlwZTpsZWdhY3lVUkxQYXN0ZWJvYXJk
VHlwZSgpXV0pCisgICAgICAgIHJldHVybiBAWyB1cmxGcm9tUGFzdGVib2FyZCBdOworCisgICAg
cmV0dXJuIEBbIF07Cit9CisKK3N0YXRpYyBTdHJpbmcgdHlwZUlkZW50aWZpZXJGb3JQYXN0ZWJv
YXJkVHlwZShjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmRUeXBlKQoreworICAgIGlmIChVVFR5cGVJ
c0RlY2xhcmVkKHBhc3RlYm9hcmRUeXBlLmNyZWF0ZUNGU3RyaW5nKCkuZ2V0KCkpKQorICAgICAg
ICByZXR1cm4gcGFzdGVib2FyZFR5cGU7CisKKyAgICBpZiAocGFzdGVib2FyZFR5cGUgPT0gU3Ry
aW5nKGxlZ2FjeVN0cmluZ1Bhc3RlYm9hcmRUeXBlKCkpKQorICAgICAgICByZXR1cm4ga1VUVHlw
ZVVURjhQbGFpblRleHQ7CisKKyAgICBpZiAocGFzdGVib2FyZFR5cGUgPT0gU3RyaW5nKGxlZ2Fj
eUhUTUxQYXN0ZWJvYXJkVHlwZSgpKSkKKyAgICAgICAgcmV0dXJuIGtVVFR5cGVIVE1MOworCisg
ICAgaWYgKHBhc3RlYm9hcmRUeXBlID09IFN0cmluZyhsZWdhY3lVUkxQYXN0ZWJvYXJkVHlwZSgp
KSkKKyAgICAgICAgcmV0dXJuIGtVVFR5cGVVUkw7CisKKyAgICByZXR1cm4geyB9OworfQorCitW
ZWN0b3I8U3RyaW5nPiBQbGF0Zm9ybVBhc3RlYm9hcmQ6OmFsbFN0cmluZ3NGb3JUeXBlKGNvbnN0
IFN0cmluZyYgcGFzdGVib2FyZFR5cGUpIGNvbnN0Cit7CisgICAgYm9vbCBtYXlDb250YWluRmls
ZXMgPSBwYXN0ZWJvYXJkTWF5Q29udGFpbkZpbGVQYXRocyhtX3Bhc3RlYm9hcmQuZ2V0KCkpOwor
ICAgIGF1dG8gdHlwZUlkZW50aWZpZXIgPSB0eXBlSWRlbnRpZmllckZvclBhc3RlYm9hcmRUeXBl
KHBhc3RlYm9hcmRUeXBlKTsKKyAgICBOU0FycmF5PE5TVVJMICo+ICpwbGF0Zm9ybVVSTHMgPSB1
cmxzRnJvbVBhc3RlYm9hcmQobV9wYXN0ZWJvYXJkLmdldCgpKTsKKyAgICBWZWN0b3I8U3RyaW5n
PiBzdHJpbmdzOworICAgIHN0cmluZ3MucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShwbGF0Zm9ybVVS
THMuY291bnQpOworICAgIGlmICh0eXBlSWRlbnRpZmllciA9PSBTdHJpbmcoa1VUVHlwZVVSTCkp
IHsKKyAgICAgICAgZm9yIChOU1VSTCAqdXJsIGluIHBsYXRmb3JtVVJMcykgeworICAgICAgICAg
ICAgU3RyaW5nIHVybFN0cmluZyA9IHVybC5hYnNvbHV0ZVN0cmluZzsKKyAgICAgICAgICAgIGlm
ICh1cmxTdHJpbmcuaXNFbXB0eSgpIHx8IChtYXlDb250YWluRmlsZXMgJiYgIVBhc3RlYm9hcmQ6
OmNhbkV4cG9zZVVSTFRvRE9NV2hlblBhc3RlYm9hcmRDb250YWluc0ZpbGVzKHVybFN0cmluZykp
KQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgc3RyaW5ncy51bmNoZWNr
ZWRBcHBlbmQoV1RGTW92ZSh1cmxTdHJpbmcpKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4g
c3RyaW5nczsKKyAgICB9CisKKyAgICBOU0FycmF5PE5TUGFzdGVib2FyZEl0ZW0gKj4gKml0ZW1z
ID0gW21fcGFzdGVib2FyZCBwYXN0ZWJvYXJkSXRlbXNdOworICAgIGlmIChpdGVtcy5jb3VudCA+
IDEgJiYgIXR5cGVJZGVudGlmaWVyLmlzTnVsbCgpKSB7CisgICAgICAgIGZvciAoTlNQYXN0ZWJv
YXJkSXRlbSAqaXRlbSBpbiBpdGVtcykgeworICAgICAgICAgICAgaWYgKE5TU3RyaW5nICpzdHJp
bmdGcm9tSXRlbSA9IFtpdGVtIHN0cmluZ0ZvclR5cGU6dHlwZUlkZW50aWZpZXJdKQorICAgICAg
ICAgICAgICAgIHN0cmluZ3MuYXBwZW5kKHN0cmluZ0Zyb21JdGVtKTsKKyAgICAgICAgfQorICAg
IH0gZWxzZSBpZiAoTlNTdHJpbmcgKnN0cmluZ0Zyb21QYXN0ZWJvYXJkID0gW21fcGFzdGVib2Fy
ZCBzdHJpbmdGb3JUeXBlOnBhc3RlYm9hcmRUeXBlXSkKKyAgICAgICAgc3RyaW5ncy5hcHBlbmQo
c3RyaW5nRnJvbVBhc3RlYm9hcmQpOworCisgICAgcmV0dXJuIHN0cmluZ3M7Cit9CisKIHN0YXRp
YyBjb25zdCBjaGFyKiBzYWZlVHlwZUZvckRPTVRvUmVhZEFuZFdyaXRlRm9yUGxhdGZvcm1UeXBl
KGNvbnN0IFN0cmluZyYgcGxhdGZvcm1UeXBlKQogewogICAgIGlmIChwbGF0Zm9ybVR5cGUgPT0g
U3RyaW5nKGxlZ2FjeVN0cmluZ1Bhc3RlYm9hcmRUeXBlKCkpIHx8IHBsYXRmb3JtVHlwZSA9PSBT
dHJpbmcoTlNQYXN0ZWJvYXJkVHlwZVN0cmluZykpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9Db2NvYS9XZWJQYXN0ZWJvYXJkUHJveHlDb2NvYS5tbSBiL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0NvY29hL1dlYlBhc3RlYm9hcmRQcm94eUNvY29hLm1tCmluZGV4IGM5OTI0
NDA0ZmViYjA5YWUwMTdiMTBjZTljNWY4ODJhNTkzMTI3MDkuLmFlNjQ3MDdkYTE1MWMyMmJjMzgz
OWRhYjRhZjdlNzQwMTRlMDIyMGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0NvY29hL1dlYlBhc3RlYm9hcmRQcm94eUNvY29hLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0NvY29hL1dlYlBhc3RlYm9hcmRQcm94eUNvY29hLm1tCkBAIC03MCw2ICs3MCwxMSBA
QCB2b2lkIFdlYlBhc3RlYm9hcmRQcm94eTo6Z2V0UGFzdGVib2FyZFN0cmluZ0ZvclR5cGUoY29u
c3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZQogICAgIHN0cmluZyA9IFBsYXRmb3JtUGFzdGVib2Fy
ZChwYXN0ZWJvYXJkTmFtZSkuc3RyaW5nRm9yVHlwZShwYXN0ZWJvYXJkVHlwZSk7CiB9CiAKK3Zv
aWQgV2ViUGFzdGVib2FyZFByb3h5OjpnZXRQYXN0ZWJvYXJkU3RyaW5nc0ZvclR5cGUoY29uc3Qg
U3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSwgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkVHlwZSwgVmVj
dG9yPFN0cmluZz4mIHN0cmluZ3MpCit7CisgICAgc3RyaW5ncyA9IFBsYXRmb3JtUGFzdGVib2Fy
ZChwYXN0ZWJvYXJkTmFtZSkuYWxsU3RyaW5nc0ZvclR5cGUocGFzdGVib2FyZFR5cGUpOworfQor
CiB2b2lkIFdlYlBhc3RlYm9hcmRQcm94eTo6Z2V0UGFzdGVib2FyZEJ1ZmZlckZvclR5cGUoY29u
c3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSwgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkVHlwZSwg
U2hhcmVkTWVtb3J5OjpIYW5kbGUmIGhhbmRsZSwgdWludDY0X3QmIHNpemUpCiB7CiAgICAgUmVm
UHRyPFNoYXJlZEJ1ZmZlcj4gYnVmZmVyID0gUGxhdGZvcm1QYXN0ZWJvYXJkKHBhc3RlYm9hcmRO
YW1lKS5idWZmZXJGb3JUeXBlKHBhc3RlYm9hcmRUeXBlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL1dlYlBhc3RlYm9hcmRQcm94eS5oIGIvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvV2ViUGFzdGVib2FyZFByb3h5LmgKaW5kZXggZTVlYzIwOTMyN2RhMDc2MGU4MmNiNDRh
ZTgzMzlmZGJkMTkxMDVlYi4uM2FlMjYwM2VhZWQyMjZlY2VjYTFmNDQyYjQyOGZlN2FkZjYyMWUz
NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFzdGVib2FyZFByb3h5
LmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFzdGVib2FyZFByb3h5LmgKQEAg
LTg3LDYgKzg3LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIGdldFBhc3RlYm9hcmRUeXBlcyhjb25z
dCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lLCBWZWN0b3I8U3RyaW5nPiYgcGFzdGVib2FyZFR5cGVz
KTsKICAgICB2b2lkIGdldFBhc3RlYm9hcmRQYXRobmFtZXNGb3JUeXBlKElQQzo6Q29ubmVjdGlv
biYsIGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUsIGNvbnN0IFN0cmluZyYgcGFzdGVib2Fy
ZFR5cGUsIFZlY3RvcjxTdHJpbmc+JiBwYXRobmFtZXMsIFNhbmRib3hFeHRlbnNpb246OkhhbmRs
ZUFycmF5Jik7CiAgICAgdm9pZCBnZXRQYXN0ZWJvYXJkU3RyaW5nRm9yVHlwZShjb25zdCBTdHJp
bmcmIHBhc3RlYm9hcmROYW1lLCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmRUeXBlLCBTdHJpbmcm
KTsKKyAgICB2b2lkIGdldFBhc3RlYm9hcmRTdHJpbmdzRm9yVHlwZShjb25zdCBTdHJpbmcmIHBh
c3RlYm9hcmROYW1lLCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmRUeXBlLCBWZWN0b3I8U3RyaW5n
PiYpOwogICAgIHZvaWQgZ2V0UGFzdGVib2FyZEJ1ZmZlckZvclR5cGUoY29uc3QgU3RyaW5nJiBw
YXN0ZWJvYXJkTmFtZSwgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkVHlwZSwgU2hhcmVkTWVtb3J5
OjpIYW5kbGUmLCB1aW50NjRfdCYgc2l6ZSk7CiAgICAgdm9pZCBwYXN0ZWJvYXJkQ29weShjb25z
dCBTdHJpbmcmIGZyb21QYXN0ZWJvYXJkLCBjb25zdCBTdHJpbmcmIHRvUGFzdGVib2FyZCwgdWlu
dDY0X3QmIG5ld0NoYW5nZUNvdW50KTsKICAgICB2b2lkIGdldFBhc3RlYm9hcmRDaGFuZ2VDb3Vu
dChjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lLCB1aW50NjRfdCYgY2hhbmdlQ291bnQpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFzdGVib2FyZFByb3h5Lm1l
c3NhZ2VzLmluIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFzdGVib2FyZFByb3h5Lm1l
c3NhZ2VzLmluCmluZGV4IGI5MmNiODFiNmE2NmUwMWIxMDc4OGM5YTJjZjYyNWNiNWZjOGVlY2Qu
LjVkZDY5ODhiOTEzMTFmYzMzODYwZjcyMjIwNWZlMDJmZDc2YmQ4ODggMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhc3RlYm9hcmRQcm94eS5tZXNzYWdlcy5pbgorKysg
Yi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYXN0ZWJvYXJkUHJveHkubWVzc2FnZXMuaW4K
QEAgLTQ1LDYgKzQ1LDcgQEAgbWVzc2FnZXMgLT4gV2ViUGFzdGVib2FyZFByb3h5IHsKICAgICBH
ZXRQYXN0ZWJvYXJkVHlwZXMoU3RyaW5nIHBhc3RlYm9hcmROYW1lKSAtPiAoVmVjdG9yPFN0cmlu
Zz4gdHlwZXMpCiAgICAgR2V0UGFzdGVib2FyZFBhdGhuYW1lc0ZvclR5cGUoU3RyaW5nIHBhc3Rl
Ym9hcmROYW1lLCBTdHJpbmcgcGFzdGVib2FyZFR5cGUpIC0+IChWZWN0b3I8U3RyaW5nPiBwYXRo
bmFtZXMsIFdlYktpdDo6U2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlQXJyYXkgc2FuZGJveEV4dGVu
c2lvbnMpIFdhbnRzQ29ubmVjdGlvbgogICAgIEdldFBhc3RlYm9hcmRTdHJpbmdGb3JUeXBlKFN0
cmluZyBwYXN0ZWJvYXJkTmFtZSwgU3RyaW5nIHBhc3RlYm9hcmRUeXBlKSAtPiAoU3RyaW5nIHN0
cmluZykKKyAgICBHZXRQYXN0ZWJvYXJkU3RyaW5nc0ZvclR5cGUoU3RyaW5nIHBhc3RlYm9hcmRO
YW1lLCBTdHJpbmcgcGFzdGVib2FyZFR5cGUpIC0+IChWZWN0b3I8U3RyaW5nPiBzdHJpbmdzKQog
ICAgIEdldFBhc3RlYm9hcmRCdWZmZXJGb3JUeXBlKFN0cmluZyBwYXN0ZWJvYXJkTmFtZSwgU3Ry
aW5nIHBhc3RlYm9hcmRUeXBlKSAtPiAoV2ViS2l0OjpTaGFyZWRNZW1vcnk6OkhhbmRsZSBoYW5k
bGUsIHVpbnQ2NF90IHNpemUpCiAgICAgUGFzdGVib2FyZENvcHkoU3RyaW5nIGZyb21QYXN0ZWJv
YXJkLCBTdHJpbmcgdG9QYXN0ZWJvYXJkKSAtPiAodWludDY0X3QgY2hhbmdlQ291bnQpCiAgICAg
R2V0UGFzdGVib2FyZENoYW5nZUNvdW50KFN0cmluZyBwYXN0ZWJvYXJkTmFtZSkgLT4gKHVpbnQ2
NF90IGNoYW5nZUNvdW50KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dl
YkNvcmVTdXBwb3J0L1dlYlBsYXRmb3JtU3RyYXRlZ2llcy5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViUGxhdGZvcm1TdHJhdGVnaWVzLmNwcAppbmRleCA3
NjAyZjVjOTRiMmU1NWZkMjcwNWE1ZDU2ZmM2MDUxOWM5NDRkYmYzLi4yNDMyOThlMDQ3YjhlMjNj
MTg2NDIxYWIxNTUyMTBhYmY2OTQzYTczIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViUGxhdGZvcm1TdHJhdGVnaWVzLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViUGxhdGZvcm1TdHJhdGVnaWVz
LmNwcApAQCAtMjA3LDYgKzIwNywxMyBAQCBTdHJpbmcgV2ViUGxhdGZvcm1TdHJhdGVnaWVzOjpz
dHJpbmdGb3JUeXBlKGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZFR5cGUsIGNvbnN0CiAgICAgcmV0
dXJuIHZhbHVlOwogfQogCitWZWN0b3I8U3RyaW5nPiBXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6OmFs
bFN0cmluZ3NGb3JUeXBlKGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZFR5cGUsIGNvbnN0IFN0cmlu
ZyYgcGFzdGVib2FyZE5hbWUpCit7CisgICAgVmVjdG9yPFN0cmluZz4gdmFsdWVzOworICAgIFdl
YlByb2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmRTeW5j
KE1lc3NhZ2VzOjpXZWJQYXN0ZWJvYXJkUHJveHk6OkdldFBhc3RlYm9hcmRTdHJpbmdzRm9yVHlw
ZShwYXN0ZWJvYXJkTmFtZSwgcGFzdGVib2FyZFR5cGUpLCBNZXNzYWdlczo6V2ViUGFzdGVib2Fy
ZFByb3h5OjpHZXRQYXN0ZWJvYXJkU3RyaW5nc0ZvclR5cGU6OlJlcGx5KHZhbHVlcyksIDApOwor
ICAgIHJldHVybiB2YWx1ZXM7Cit9CisKIGxvbmcgV2ViUGxhdGZvcm1TdHJhdGVnaWVzOjpjaGFu
Z2VDb3VudChjb25zdCBXVEY6OlN0cmluZyAmcGFzdGVib2FyZE5hbWUpCiB7CiAgICAgdWludDY0
X3QgY2hhbmdlQ291bnQgeyAwIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvV2ViQ29yZVN1cHBvcnQvV2ViUGxhdGZvcm1TdHJhdGVnaWVzLmggYi9Tb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViUGxhdGZvcm1TdHJhdGVnaWVzLmgKaW5kZXgg
NTkxZDc4ZmNkZDA5ZTkwYTBjYWQ1YzExMGIzNWJkYTYyODIzOWMzNi4uNmVlYzA5YjFlZDIyYjlh
ZDA2OGUzZjY5MjRiNTkyNTc0NTE1ZDE0NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYlBsYXRmb3JtU3RyYXRlZ2llcy5oCisrKyBiL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJQbGF0Zm9ybVN0cmF0ZWdpZXMu
aApAQCAtNzYsNiArNzYsNyBAQCBwcml2YXRlOgogICAgIFJlZlB0cjxXZWJDb3JlOjpTaGFyZWRC
dWZmZXI+IGJ1ZmZlckZvclR5cGUoY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkVHlwZSwgY29uc3Qg
U3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSkgb3ZlcnJpZGU7CiAgICAgdm9pZCBnZXRQYXRobmFtZXNG
b3JUeXBlKFZlY3RvcjxTdHJpbmc+JiBwYXRobmFtZXMsIGNvbnN0IFN0cmluZyYgcGFzdGVib2Fy
ZFR5cGUsIGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUpIG92ZXJyaWRlOwogICAgIFN0cmlu
ZyBzdHJpbmdGb3JUeXBlKGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZFR5cGUsIGNvbnN0IFN0cmlu
ZyYgcGFzdGVib2FyZE5hbWUpIG92ZXJyaWRlOworICAgIFZlY3RvcjxTdHJpbmc+IGFsbFN0cmlu
Z3NGb3JUeXBlKGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZFR5cGUsIGNvbnN0IFN0cmluZyYgcGFz
dGVib2FyZE5hbWUpIG92ZXJyaWRlOwogICAgIGxvbmcgY2hhbmdlQ291bnQoY29uc3QgU3RyaW5n
JiBwYXN0ZWJvYXJkTmFtZSkgb3ZlcnJpZGU7CiAgICAgU3RyaW5nIHVuaXF1ZU5hbWUoKSBvdmVy
cmlkZTsKICAgICBXZWJDb3JlOjpDb2xvciBjb2xvcihjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmRO
YW1lKSBvdmVycmlkZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYkNv
cmVTdXBwb3J0L1dlYlBsYXRmb3JtU3RyYXRlZ2llcy5oIGIvU291cmNlL1dlYktpdExlZ2FjeS9t
YWMvV2ViQ29yZVN1cHBvcnQvV2ViUGxhdGZvcm1TdHJhdGVnaWVzLmgKaW5kZXggYThkOTYyNjM0
OTRhOGYxMmE4NTE2MDkyZDYzZDYzNzdiMjVjMWRiOS4uNzM5Yzk1MWY2YmQ3ZmY1NWYyOTkyYWRm
ZjNhNTA5YTZjZTEwMDU5NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2Vi
Q29yZVN1cHBvcnQvV2ViUGxhdGZvcm1TdHJhdGVnaWVzLmgKKysrIGIvU291cmNlL1dlYktpdExl
Z2FjeS9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViUGxhdGZvcm1TdHJhdGVnaWVzLmgKQEAgLTc2LDYg
Kzc2LDcgQEAgcHJpdmF0ZToKICAgICBSZWZQdHI8V2ViQ29yZTo6U2hhcmVkQnVmZmVyPiBidWZm
ZXJGb3JUeXBlKGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZFR5cGUsIGNvbnN0IFN0cmluZyYgcGFz
dGVib2FyZE5hbWUpIG92ZXJyaWRlOwogICAgIHZvaWQgZ2V0UGF0aG5hbWVzRm9yVHlwZShWZWN0
b3I8U3RyaW5nPiYgcGF0aG5hbWVzLCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmRUeXBlLCBjb25z
dCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lKSBvdmVycmlkZTsKICAgICBTdHJpbmcgc3RyaW5nRm9y
VHlwZShjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmRUeXBlLCBjb25zdCBTdHJpbmcmIHBhc3RlYm9h
cmROYW1lKSBvdmVycmlkZTsKKyAgICBWZWN0b3I8U3RyaW5nPiBhbGxTdHJpbmdzRm9yVHlwZShj
b25zdCBTdHJpbmcmIHBhc3RlYm9hcmRUeXBlLCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1l
KSBvdmVycmlkZTsKICAgICBsb25nIGNoYW5nZUNvdW50KGNvbnN0IFN0cmluZyYgcGFzdGVib2Fy
ZE5hbWUpIG92ZXJyaWRlOwogICAgIFN0cmluZyB1bmlxdWVOYW1lKCkgb3ZlcnJpZGU7CiAgICAg
V2ViQ29yZTo6Q29sb3IgY29sb3IoY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSkgb3ZlcnJp
ZGU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJDb3JlU3VwcG9ydC9X
ZWJQbGF0Zm9ybVN0cmF0ZWdpZXMubW0gYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJDb3Jl
U3VwcG9ydC9XZWJQbGF0Zm9ybVN0cmF0ZWdpZXMubW0KaW5kZXggOWQ1NzhhMGI5NTdmMjYxMzEw
Njg4NjUyODQxZGNmOWVjYjc1NDI3MC4uYmQ3NTgxZmE1MDQ4MWM5ODk3YzlhMWZjZGQzMjE5MGY2
N2YwNmI0NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViQ29yZVN1cHBv
cnQvV2ViUGxhdGZvcm1TdHJhdGVnaWVzLm1tCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFj
L1dlYkNvcmVTdXBwb3J0L1dlYlBsYXRmb3JtU3RyYXRlZ2llcy5tbQpAQCAtMTIzLDYgKzEyMywx
MSBAQCB2b2lkIFdlYlBsYXRmb3JtU3RyYXRlZ2llczo6Z2V0UGF0aG5hbWVzRm9yVHlwZShWZWN0
b3I8U3RyaW5nPiYgcGF0aG5hbWVzLCBjb25zdAogICAgIFBsYXRmb3JtUGFzdGVib2FyZChwYXN0
ZWJvYXJkTmFtZSkuZ2V0UGF0aG5hbWVzRm9yVHlwZShwYXRobmFtZXMsIHBhc3RlYm9hcmRUeXBl
KTsKIH0KIAorVmVjdG9yPFN0cmluZz4gV2ViUGxhdGZvcm1TdHJhdGVnaWVzOjphbGxTdHJpbmdz
Rm9yVHlwZShjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmRUeXBlLCBjb25zdCBTdHJpbmcmIHBhc3Rl
Ym9hcmROYW1lKQoreworICAgIHJldHVybiBQbGF0Zm9ybVBhc3RlYm9hcmQocGFzdGVib2FyZE5h
bWUpLmFsbFN0cmluZ3NGb3JUeXBlKHBhc3RlYm9hcmRUeXBlKTsKK30KKwogU3RyaW5nIFdlYlBs
YXRmb3JtU3RyYXRlZ2llczo6c3RyaW5nRm9yVHlwZShjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmRU
eXBlLCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lKQogewogICAgIHJldHVybiBQbGF0Zm9y
bVBhc3RlYm9hcmQocGFzdGVib2FyZE5hbWUpLnN0cmluZ0ZvclR5cGUocGFzdGVib2FyZFR5cGUp
OwpkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IDdk
ODk4ZDQxNGNlNjhmODFhMjNlM2JkMjE1NmY3NWQzZTIzMGU5MzguLjFmZjIxMzc2NTAzZTk2MjU1
OWI5ZjhhNjcxMGE1NzIyMmFiMmYxZGMgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysg
Yi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0MCBAQAorMjAxOC0wOS0wMyAgV2Vuc29uIEhz
aWVoICA8d2Vuc29uX2hzaWVoQGFwcGxlLmNvbT4KKworICAgICAgICBQb3B1bGF0ZSAidGV4dC91
cmktbGlzdCIgd2l0aCBtdWx0aXBsZSBVUkxzIHdoZW4gdGhlIHBhc3RlYm9hcmQgY29udGFpbnMg
bXVsdGlwbGUgVVJMcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTg4ODkwCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS80MzY0ODYwNT4KKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIER1bXBSZW5kZXJUcmVl
L21hYy9EdW1wUmVuZGVyVHJlZVBhc3RlYm9hcmQubW06CisgICAgICAgICgtW0xvY2FsUGFzdGVi
b2FyZCBwYXN0ZWJvYXJkSXRlbXNdKToKKworICAgICAgICBJbXBsZW1lbnQgdGhpcyBtZXRob2Qg
dG8gYXZvaWQgY3Jhc2hpbmcgd2hlbiBydW5uaW5nIGxheW91dCB0ZXN0cyB0aGF0IGFjY2VzcyB0
aGUgcGFzdGVib2FyZC4KKworICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29j
b2EvRHJhZ0FuZERyb3BUZXN0cy5tbToKKworICAgICAgICBBZGQgYSB0ZXN0IHRvIHZlcmlmeSB0
aGF0IG9uIG1hY09TIGFuZCBpT1MsIG11bHRpcGxlIFVSTHMgZHJvcHBlZCBvbnRvIHRoZSBwYWdl
IGFyZSBhY2Nlc3NpYmxlIHZpYQorICAgICAgICAidGV4dC91cmktbGlzdCIuCisKKyAgICAgICAg
KiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1Bhc3RlTWl4ZWRDb250ZW50Lm1tOgor
CisgICAgICAgIEFkZCBhIHRlc3QgdGhhdCBleGVyY2lzZXMgNSBkaWZmZXJlbnQgd2F5cyB0byB3
cml0ZSBvbmUgb3IgbW9yZSBVUkxzIHRvIHRoZSBwYXN0ZWJvYXJkIG9uIG1hY09TOyBpbiBhbGwg
Y2FzZXMsCisgICAgICAgIHRoZSBVUkxzIHdyaXR0ZW4gdG8gdGhlIHBhc3RlYm9hcmQgc2hvdWxk
IGJlIGV4cG9zZWQgdG8gdGhlIHBhZ2UgdmlhICJ0ZXh0L3VyaS1saXN0Ii4gSW4gYWxsIG9mIHRo
ZXNlIGRpZmZlcmVudAorICAgICAgICBjYXNlcywgdGhlIHJlc3VsdHMgb2YgdXNpbmcgYC1bTlNQ
YXN0ZWJvYXJkSXRlbSBzdHJpbmdGb3JUeXBlOl1gLCBgLVtOU1VSTCBVUkxGcm9tUGFzdGVib2Fy
ZDpdYCBhbmQKKyAgICAgICAgYC1bTlNQYXN0ZWJvYXJkIHN0cmluZ0ZvclR5cGU6XWAgd2lsbCB5
aWVsZCBkaWZmZXJlbnQgcmVzdWx0cywgc28gdGhlIHB1cnBvc2Ugb2YgdGhpcyBBUEkgdGVzdCBp
cyB0byBlbnN1cmUgdGhhdAorICAgICAgICBvdXIgbG9naWMgZm9yIGdyYWJiaW5nIGEgbGlzdCBv
ZiBVUkxzIGZyb20gdGhlIHBhc3RlYm9hcmQgb24gbWFjT1MgaXMgcm9idXN0IGVub3VnaCB0byBo
YW5kbGUgYWxsIG9mIHRoZXNlCisgICAgICAgIGRpZmZlcmVudCBiZWhhdmlvcnMuCisKKyAgICAg
ICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL2lvcy9VSVBhc3RlYm9hcmRUZXN0cy5tbToKKworICAg
ICAgICBBZGQgYSB0ZXN0IHRvIHZlcmlmeSB0aGF0IG9uIGlPUywgdXNpbmcgYC1bVUlQYXN0ZWJv
YXJkIHNldFVSTHM6XWAgdG8gd3JpdGUgdG8gbXVsdGlwbGUgVVJMcyB0byB0aGUgcGFzdGVib2Fy
ZAorICAgICAgICBhbmQgdGhlbiBwYXN0aW5nIHJlc3VsdHMgaW4gInRleHQvdXJpLWxpc3QiIGV4
cG9zaW5nIGEgbGlzdCBvZiBhbGwgdGhlIFVSTHMgd3JpdHRlbiB0byB0aGUgcGFzdGVib2FyZC4K
KworICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvbWFjL1dlYktpdFRlc3RSdW5uZXJQYXN0ZWJv
YXJkLm1tOgorICAgICAgICAoLVtMb2NhbFBhc3RlYm9hcmQgcGFzdGVib2FyZEl0ZW1zXSk6CisK
KyAgICAgICAgSW1wbGVtZW50IHRoaXMgbWV0aG9kIHRvIGF2b2lkIGNyYXNoaW5nIHdoZW4gcnVu
bmluZyBsYXlvdXQgdGVzdHMgdGhhdCBhY2Nlc3MgdGhlIHBhc3RlYm9hcmQuCisKIDIwMTgtMDgt
MzEgIEFkaXR5YSBLZWVydGhpICA8YWtlZXJ0aGlAYXBwbGUuY29tPgogCiAgICAgICAgIFVucmV2
aWV3ZWQsIGFkZCBhbiBhbHRlcm5hdGUgZW1haWwgZm9yIEFkaXR5YSBLZWVydGhpLgpkaWZmIC0t
Z2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL0R1bXBSZW5kZXJUcmVlUGFzdGVib2FyZC5t
bSBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9EdW1wUmVuZGVyVHJlZVBhc3RlYm9hcmQubW0K
aW5kZXggY2RkMzFiM2JiYjM1YmI4NjI1MGZlZmMwY2FiZjFjNTVjMzQxYmNhZS4uYWUyOWE5NDQy
MGU3MmU4NDE0NGM1MDYxZjNiMGM3MzFkZGNkOTQ1OSAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJl
bmRlclRyZWUvbWFjL0R1bXBSZW5kZXJUcmVlUGFzdGVib2FyZC5tbQorKysgYi9Ub29scy9EdW1w
UmVuZGVyVHJlZS9tYWMvRHVtcFJlbmRlclRyZWVQYXN0ZWJvYXJkLm1tCkBAIC0yMzcsNiArMjM3
LDE3IEBAIHN0YXRpYyBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IHRvVVRJKE5TU3RyaW5nICp0eXBl
KQogICAgIHJldHVybiBZRVM7CiB9CiAKKy0gKE5TQXJyYXk8TlNQYXN0ZWJvYXJkSXRlbSAqPiAq
KXBhc3RlYm9hcmRJdGVtcworeworICAgIGF1dG8gaXRlbSA9IGFkb3B0TlMoW1tOU1Bhc3RlYm9h
cmRJdGVtIGFsbG9jXSBpbml0XSk7CisgICAgZm9yIChhdXRvIHR5cGVBbmREYXRhIDogX2RhdGEp
IHsKKyAgICAgICAgTlNEYXRhICpkYXRhID0gKF9fYnJpZGdlIE5TRGF0YSAqKXR5cGVBbmREYXRh
LnZhbHVlLmdldCgpOworICAgICAgICBOU1N0cmluZyAqdHlwZSA9IChfX2JyaWRnZSBOU1N0cmlu
ZyAqKXR5cGVBbmREYXRhLmtleS5nZXQoKTsKKyAgICAgICAgW2l0ZW0gc2V0RGF0YTpkYXRhIGZv
clR5cGU6dHlwZV07CisgICAgfQorICAgIHJldHVybiBAWyBpdGVtLmdldCgpIF07Cit9CisKIEBl
bmQKIAogI2VuZGlmIC8vIFBMQVRGT1JNKE1BQykKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJL
aXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvRHJhZ0FuZERyb3BUZXN0cy5tbSBiL1Rvb2xzL1Rlc3RX
ZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvRHJhZ0FuZERyb3BUZXN0cy5tbQppbmRleCAxNWU0
MTQ4ZmRhNDcwN2JkNTJlODIzNjc3NTFlOTM2YzIzOTI2YTBmLi45NGI1ZjcwOGU5NjcwNGI5MDAz
MTE3ZTU0ZGU2YzU1YTAwNDBjOGYzIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYktpdENvY29hL0RyYWdBbmREcm9wVGVzdHMubW0KKysrIGIvVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9EcmFnQW5kRHJvcFRlc3RzLm1tCkBAIC00Myw2ICs0Mywz
NyBAQCBURVNUKERyYWdBbmREcm9wVGVzdHMsIERyYWdJbWFnZUxvY2F0aW9uRm9yTGlua0luU3Vi
ZnJhbWUpCiAjZW5kaWYKIH0KIAorVEVTVChEcmFnQW5kRHJvcFRlc3RzLCBFeHBvc2VNdWx0aXBs
ZVVSTHNJbkRhdGFUcmFuc2ZlcikKK3sKKyAgICBhdXRvIHNpbXVsYXRvciA9IGFkb3B0TlMoW1tE
cmFnQW5kRHJvcFNpbXVsYXRvciBhbGxvY10gaW5pdFdpdGhXZWJWaWV3RnJhbWU6Q0dSZWN0TWFr
ZSgwLCAwLCAzMjAsIDUwMCldKTsKKyAgICBhdXRvIHdlYlZpZXcgPSBbc2ltdWxhdG9yIHdlYlZp
ZXddOworICAgIFt3ZWJWaWV3IHN5bmNocm9ub3VzbHlMb2FkVGVzdFBhZ2VOYW1lZDpAIkRhdGFU
cmFuc2ZlciJdOworCisgICAgTlNTdHJpbmcgKnN0cmluZ0RhdGEgPSBAIkhlbGxvIHdvcmxkIjsK
KyAgICBOU1VSTCAqZmlyc3RVUkwgPSBbTlNVUkwgVVJMV2l0aFN0cmluZzpAImh0dHBzOi8vd2Vi
a2l0Lm9yZy8iXTsKKyAgICBOU1VSTCAqc2Vjb25kVVJMID0gW05TVVJMIFVSTFdpdGhTdHJpbmc6
QCJodHRwczovL2FwcGxlLmNvbS8iXTsKKworI2lmIFBMQVRGT1JNKE1BQykKKyAgICBOU1Bhc3Rl
Ym9hcmQgKnBhc3RlYm9hcmQgPSBbTlNQYXN0ZWJvYXJkIHBhc3RlYm9hcmRXaXRoVW5pcXVlTmFt
ZV07CisgICAgW3Bhc3RlYm9hcmQgd3JpdGVPYmplY3RzOkBbIHN0cmluZ0RhdGEsIGZpcnN0VVJM
LCBzZWNvbmRVUkwgXV07CisgICAgW3NpbXVsYXRvciBzZXRFeHRlcm5hbERyYWdQYXN0ZWJvYXJk
OnBhc3RlYm9hcmRdOworI2Vsc2UKKyAgICBhdXRvIHN0cmluZ0l0ZW0gPSBhZG9wdE5TKFtbTlNJ
dGVtUHJvdmlkZXIgYWxsb2NdIGluaXRXaXRoT2JqZWN0OnN0cmluZ0RhdGFdKTsKKyAgICBhdXRv
IGZpcnN0VVJMSXRlbSA9IGFkb3B0TlMoW1tOU0l0ZW1Qcm92aWRlciBhbGxvY10gaW5pdFdpdGhP
YmplY3Q6Zmlyc3RVUkxdKTsKKyAgICBhdXRvIHNlY29uZFVSTEl0ZW0gPSBhZG9wdE5TKFtbTlNJ
dGVtUHJvdmlkZXIgYWxsb2NdIGluaXRXaXRoT2JqZWN0OnNlY29uZFVSTF0pOworICAgIGZvciAo
TlNJdGVtUHJvdmlkZXIgKml0ZW0gaW4gQFsgc3RyaW5nSXRlbS5nZXQoKSwgZmlyc3RVUkxJdGVt
LmdldCgpLCBzZWNvbmRVUkxJdGVtLmdldCgpIF0pCisgICAgICAgIGl0ZW0ucHJlZmVycmVkUHJl
c2VudGF0aW9uU3R5bGUgPSBVSVByZWZlcnJlZFByZXNlbnRhdGlvblN0eWxlSW5saW5lOworICAg
IFtzaW11bGF0b3Igc2V0RXh0ZXJuYWxJdGVtUHJvdmlkZXJzOkBbIHN0cmluZ0l0ZW0uZ2V0KCks
IGZpcnN0VVJMSXRlbS5nZXQoKSwgc2Vjb25kVVJMSXRlbS5nZXQoKSBdXTsKKyNlbmRpZgorCisg
ICAgW3NpbXVsYXRvciBydW5Gcm9tOkNHUG9pbnRNYWtlKDAsIDApIHRvOkNHUG9pbnRNYWtlKDEw
MCwgMTAwKV07CisKKyAgICBFWFBFQ1RfV0tfU1RSRVEoInRleHQvcGxhaW4sIHRleHQvdXJpLWxp
c3QiLCBbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAidHlwZXMudGV4dENv
bnRlbnQiXSk7CisgICAgRVhQRUNUX1dLX1NUUkVRKCIoU1RSSU5HLCB0ZXh0L3BsYWluKSwgKFNU
UklORywgdGV4dC91cmktbGlzdCkiLCBbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2Ny
aXB0OkAiaXRlbXMudGV4dENvbnRlbnQiXSk7CisgICAgRVhQRUNUX1dLX1NUUkVRKCJIZWxsbyB3
b3JsZCIsIFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJ0ZXh0RGF0YS50
ZXh0Q29udGVudCJdKTsKKyAgICBFWFBFQ1RfV0tfU1RSRVEoImh0dHBzOi8vd2Via2l0Lm9yZy9c
bmh0dHBzOi8vYXBwbGUuY29tLyIsIFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3Jp
cHQ6QCJ1cmxEYXRhLnRleHRDb250ZW50Il0pOworfQorCiAjaWYgRU5BQkxFKElOUFVUX1RZUEVf
Q09MT1IpCiAKIFRFU1QoRHJhZ0FuZERyb3BUZXN0cywgQ29sb3JJbnB1dFRvQ29sb3JJbnB1dCkK
ZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvUGFzdGVN
aXhlZENvbnRlbnQubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1Bh
c3RlTWl4ZWRDb250ZW50Lm1tCmluZGV4IGM1ZTUwZTJkYWI3ODNjNDA2Yzk0YWVmZTBiMGQzYmY2
OWVjZDJhZjAuLjcxMzJhMmVjOWM2OTNlNmVjY2UxNTJiNDU5YjNkOGJmODNkYzc0YmIgMTAwNjQ0
Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvUGFzdGVNaXhlZENv
bnRlbnQubW0KKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9QYXN0
ZU1peGVkQ29udGVudC5tbQpAQCAtMjU1LDYgKzI1NSw1MCBAQCBURVNUKFBhc3RlTWl4ZWRDb250
ZW50LCBQYXN0ZVVSTFdyaXR0ZW5Ub1Bhc3RlYm9hcmRVc2luZ1dyaXRlT2JqZWN0cykKICAgICBF
WFBFQ1RfV0tfU1RSRVEoW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAImRv
Y3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ2EnKS50ZXh0Q29udGVudCJdLCB1cmxUb0NvcHkpOwogfQog
CitURVNUKFBhc3RlTWl4ZWRDb250ZW50LCBQYXN0ZU9uZU9yTW9yZVVSTHMpCit7CisgICAgTlNV
UkwgKmFwcGxlVVJMID0gW05TVVJMIFVSTFdpdGhTdHJpbmc6QCJodHRwczovL3d3dy5hcHBsZS5j
b20vIl07CisgICAgTlNVUkwgKndlYktpdFVSTCA9IFtOU1VSTCBVUkxXaXRoU3RyaW5nOkAiaHR0
cHM6Ly93ZWJraXQub3JnLyJdOworCisgICAgYXV0byB3ZWJWaWV3ID0gc2V0VXBXZWJWaWV3KCk7
CisgICAgYXV0byBydW5UZXN0ID0gW3dlYlZpZXddIChOU1N0cmluZyAqZGVzY3JpcHRpb24sIE5T
U3RyaW5nICpleHBlY3RlZFVSTFN0cmluZywgRnVuY3Rpb248dm9pZChOU1Bhc3RlYm9hcmQgKik+
JiYgd3JpdGVVUkxzVG9QYXN0ZWJvYXJkKSB7CisgICAgICAgIE5TUGFzdGVib2FyZCAqcGFzdGVi
b2FyZCA9IFtOU1Bhc3RlYm9hcmQgZ2VuZXJhbFBhc3RlYm9hcmRdOworCisgICAgICAgIFtwYXN0
ZWJvYXJkIGNsZWFyQ29udGVudHNdOworICAgICAgICB3cml0ZVVSTHNUb1Bhc3RlYm9hcmQocGFz
dGVib2FyZCk7CisgICAgICAgIFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6
QCJyZXNldCgpOyBkb2N1bWVudC5ib2R5LmZvY3VzKCkiXTsKKyAgICAgICAgW3dlYlZpZXcgcGFz
dGU6bmlsXTsKKworICAgICAgICBFWFBFQ1RfV0tfU1RSRVEoZXhwZWN0ZWRVUkxTdHJpbmcsIFt3
ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJ1cmxEYXRhLnRleHRDb250ZW50
Il0pOworICAgICAgICBFWFBFQ1RfV0tfU1RSRVEoIihTVFJJTkcsIHRleHQvdXJpLWxpc3QpIiwg
W3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAIml0ZW1zLnRleHRDb250ZW50
Il0pOworICAgICAgICBFWFBFQ1RfV0tfU1RSRVEoInRleHQvdXJpLWxpc3QiLCBbd2ViVmlldyBz
dHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAidHlwZXMudGV4dENvbnRlbnQiXSk7CisgICAg
fTsKKworICAgIHJ1blRlc3QoQCJXcml0ZSBtdWx0aXBsZSBVUkxzLiIsIEAiaHR0cHM6Ly93d3cu
YXBwbGUuY29tL1xuaHR0cHM6Ly93ZWJraXQub3JnLyIsIF4oTlNQYXN0ZWJvYXJkICpwYXN0ZWJv
YXJkKSB7CisgICAgICAgIFtwYXN0ZWJvYXJkIHdyaXRlT2JqZWN0czpAW2FwcGxlVVJMLCB3ZWJL
aXRVUkxdXTsKKyAgICB9KTsKKworICAgIHJ1blRlc3QoQCJEZWNsYXJlIGxlZ2FjeSBVUkwgYW5k
IHdyaXRlIFVSTCB0byBwYXN0ZWJvYXJkLiIsIEAiaHR0cHM6Ly93d3cuYXBwbGUuY29tLyIsIF4o
TlNQYXN0ZWJvYXJkICpwYXN0ZWJvYXJkKSB7CisgICAgICAgIFtwYXN0ZWJvYXJkIGRlY2xhcmVU
eXBlczpAW05TVVJMUGJvYXJkVHlwZV0gb3duZXI6bmlsXTsKKyAgICAgICAgW2FwcGxlVVJMIHdy
aXRlVG9QYXN0ZWJvYXJkOnBhc3RlYm9hcmRdOworICAgIH0pOworCisgICAgcnVuVGVzdChAIkRl
Y2xhcmUgbGVnYWN5IFVSTCBhbmQgc2V0IGEgVVJMIHN0cmluZy4iLCBAImh0dHBzOi8vd3d3LmFw
cGxlLmNvbS8iLCBeKE5TUGFzdGVib2FyZCAqcGFzdGVib2FyZCkgeworICAgICAgICBbcGFzdGVi
b2FyZCBkZWNsYXJlVHlwZXM6QFtOU1VSTFBib2FyZFR5cGVdIG93bmVyOm5pbF07CisgICAgICAg
IFtwYXN0ZWJvYXJkIHNldFN0cmluZzphcHBsZVVSTC5hYnNvbHV0ZVN0cmluZyBmb3JUeXBlOk5T
VVJMUGJvYXJkVHlwZV07CisgICAgfSk7CisKKyAgICBydW5UZXN0KEAiRGVjbGFyZSBsZWdhY3kg
VVJMIGFuZCBzZXQgYSBwcm9wZXJ0eSBsaXN0LiIsIEAiaHR0cHM6Ly93d3cuYXBwbGUuY29tLyIs
IF4oTlNQYXN0ZWJvYXJkICpwYXN0ZWJvYXJkKSB7CisgICAgICAgIFtwYXN0ZWJvYXJkIGRlY2xh
cmVUeXBlczpAW05TVVJMUGJvYXJkVHlwZV0gb3duZXI6bmlsXTsKKyAgICAgICAgW3Bhc3RlYm9h
cmQgc2V0UHJvcGVydHlMaXN0OkBbQCIvIiwgQCJodHRwczovL3d3dy5hcHBsZS5jb20iXSBmb3JU
eXBlOk5TVVJMUGJvYXJkVHlwZV07CisgICAgfSk7CisKKyAgICBydW5UZXN0KEAiRGVjbGFyZSBV
UkwgVVRJIGFuZCBzZXQgYSBVUkwgc3RyaW5nLiIsIEAiaHR0cHM6Ly93d3cuYXBwbGUuY29tLyIs
IF4oTlNQYXN0ZWJvYXJkICpwYXN0ZWJvYXJkKSB7CisgICAgICAgIFtwYXN0ZWJvYXJkIGRlY2xh
cmVUeXBlczpAWyhfX2JyaWRnZSBOU1N0cmluZyAqKWtVVFR5cGVVUkxdIG93bmVyOm5pbF07Cisg
ICAgICAgIFtwYXN0ZWJvYXJkIHNldFN0cmluZzphcHBsZVVSTC5hYnNvbHV0ZVN0cmluZyBmb3JU
eXBlOihfX2JyaWRnZSBOU1N0cmluZyAqKWtVVFR5cGVVUkxdOworICAgIH0pOworfQorCiAjZW5k
aWYgLy8gUExBVEZPUk0oTUFDKQogCiBURVNUKFBhc3RlTWl4ZWRDb250ZW50LCBDb3B5QW5kUGFz
dGVXaXRoQ3VzdG9tUGFzdGVib2FyZERhdGFPbmx5KQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdl
YktpdEFQSS9UZXN0cy9pb3MvVUlQYXN0ZWJvYXJkVGVzdHMubW0gYi9Ub29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RzL2lvcy9VSVBhc3RlYm9hcmRUZXN0cy5tbQppbmRleCA0MzM0ODU1NjFlNTBkNWMw
YzdlMmRhMDQ0NzllZjNmYjNhNDcwODBmLi4xYzE5YTM3NWI5MTM0OWJlZDZmOTg4ZThjYjk4ZTk2
YjY2YjY3YmIyIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL2lvcy9VSVBh
c3RlYm9hcmRUZXN0cy5tbQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL2lvcy9VSVBh
c3RlYm9hcmRUZXN0cy5tbQpAQCAtMjY3LDYgKzI2NywyMiBAQCBURVNUKFVJUGFzdGVib2FyZFRl
c3RzLCBEYXRhVHJhbnNmZXJHZXREYXRhQ2Fubm90UmVhZEFyYml0cmFyeVBsYXRmb3JtVHlwZXMp
CiAgICAgfSk7CiB9CiAKK1RFU1QoVUlQYXN0ZWJvYXJkVGVzdHMsIERhdGFUcmFuc2ZlclVSSUxp
c3RDb250YWluc011bHRpcGxlVVJMcykKK3sKKyAgICBhdXRvIHdlYlZpZXcgPSBzZXRVcFdlYlZp
ZXdGb3JQYXN0ZWJvYXJkVGVzdHMoQCJEYXRhVHJhbnNmZXIiKTsKKworICAgIE5TVVJMICpmaXJz
dFVSTCA9IFtOU1VSTCBVUkxXaXRoU3RyaW5nOkAiaHR0cHM6Ly93d3cuYXBwbGUuY29tLyJdOwor
ICAgIE5TVVJMICpzZWNvbmRVUkwgPSBbTlNVUkwgVVJMV2l0aFN0cmluZzpAImh0dHBzOi8vd2Vi
a2l0Lm9yZy8iXTsKKyAgICBbVUlQYXN0ZWJvYXJkIGdlbmVyYWxQYXN0ZWJvYXJkXS5VUkxzID0g
QFsgZmlyc3RVUkwsIHNlY29uZFVSTCBdOworCisgICAgW3dlYlZpZXcgcGFzdGU6bmlsXTsKKwor
ICAgIEVYUEVDVF9XS19TVFJFUSgidGV4dC91cmktbGlzdCwgdGV4dC9wbGFpbiIsIFt3ZWJWaWV3
IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJ0eXBlcy50ZXh0Q29udGVudCJdKTsKKyAg
ICBFWFBFQ1RfV0tfU1RSRVEoIihTVFJJTkcsIHRleHQvdXJpLWxpc3QpLCAoU1RSSU5HLCB0ZXh0
L3BsYWluKSIsIFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJpdGVtcy50
ZXh0Q29udGVudCJdKTsKKyAgICBFWFBFQ1RfV0tfU1RSRVEoImh0dHBzOi8vd3d3LmFwcGxlLmNv
bS9cbmh0dHBzOi8vd2Via2l0Lm9yZy8iLCBbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZh
U2NyaXB0OkAidXJsRGF0YS50ZXh0Q29udGVudCJdKTsKKyAgICBFWFBFQ1RfV0tfU1RSRVEoImh0
dHBzOi8vd3d3LmFwcGxlLmNvbS8iLCBbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2Ny
aXB0OkAidGV4dERhdGEudGV4dENvbnRlbnQiXSk7Cit9CisKICNlbmRpZiAvLyBfX0lQSE9ORV9P
U19WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMTAzMDAKIAogfSAvLyBuYW1lc3BhY2UgVGVzdFdl
YktpdEFQSQpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9tYWMvV2ViS2l0VGVz
dFJ1bm5lclBhc3RlYm9hcmQubW0gYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL21hYy9XZWJLaXRU
ZXN0UnVubmVyUGFzdGVib2FyZC5tbQppbmRleCBhYmNkZjQxNDc1MTdlY2JlNWZjNWRiZjU3YzY1
YWIxZDRhZmZiODRiLi41ZTVjYWM0ZTdjZmIxMTkwZjgwMzhlNmU4YTcyOTBlOTJjMWFhZmE3IDEw
MDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL21hYy9XZWJLaXRUZXN0UnVubmVyUGFz
dGVib2FyZC5tbQorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL21hYy9XZWJLaXRUZXN0UnVu
bmVyUGFzdGVib2FyZC5tbQpAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgIldlYktpdFRlc3RS
dW5uZXJQYXN0ZWJvYXJkLmgiCiAKICNpbmNsdWRlIDxvYmpjL3J1bnRpbWUuaD4KKyNpbmNsdWRl
IDx3dGYvUmV0YWluUHRyLmg+CiAKIEBpbnRlcmZhY2UgTG9jYWxQYXN0ZWJvYXJkIDogTlNQYXN0
ZWJvYXJkCiB7CkBAIC0xOTcsNCArMTk4LDEyIEBAIHN0YXRpYyBOU011dGFibGVEaWN0aW9uYXJ5
ICpsb2NhbFBhc3RlYm9hcmRzOwogICAgIHJldHVybiBbc2VsZiBzZXREYXRhOltzdHJpbmcgZGF0
YVVzaW5nRW5jb2Rpbmc6TlNVVEY4U3RyaW5nRW5jb2RpbmddIGZvclR5cGU6ZGF0YVR5cGVdOwog
fQogCistIChOU0FycmF5PE5TUGFzdGVib2FyZEl0ZW0gKj4gKilwYXN0ZWJvYXJkSXRlbXMKK3sK
KyAgICBhdXRvIGl0ZW0gPSBhZG9wdE5TKFtbTlNQYXN0ZWJvYXJkSXRlbSBhbGxvY10gaW5pdF0p
OworICAgIGZvciAoTlNTdHJpbmcgKnR5cGUgaW4gZGF0YUJ5VHlwZSkKKyAgICAgICAgW2l0ZW0g
c2V0RGF0YTpkYXRhQnlUeXBlW3R5cGVdIGZvclR5cGU6dHlwZV07CisgICAgcmV0dXJuIEBbIGl0
ZW0uZ2V0KCkgXTsKK30KKwogQGVuZAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>348856</attachid>
            <date>2018-09-04 15:25:42 -0700</date>
            <delta_ts>2018-09-04 16:48:02 -0700</delta_ts>
            <desc>Patch for EWS</desc>
            <filename>bug-188890-20180904152541.patch</filename>
            <type>text/plain</type>
            <size>43592</size>
            <attacher name="Wenson Hsieh">wenson_hsieh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjM1NTc5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggN2RlN2UyMzVhNDhiZGEz
NzNmOTNlMTk1NzgyZDdjNzgyOWUxMmRiYi4uZmRlNTY3OTA1ZTQxZTdkYzVmNTgxYjFmNzIyYmM2
Y2I2MzhjNjZhMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEwOSBAQAorMjAxOC0wOS0wMyAgV2Vu
c29uIEhzaWVoICA8d2Vuc29uX2hzaWVoQGFwcGxlLmNvbT4KKworICAgICAgICBQb3B1bGF0ZSAi
dGV4dC91cmktbGlzdCIgd2l0aCBtdWx0aXBsZSBVUkxzIHdoZW4gdGhlIHBhc3RlYm9hcmQgY29u
dGFpbnMgbXVsdGlwbGUgVVJMcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTg4ODkwCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS80MzY0ODYwNT4KKwor
ICAgICAgICBSZXZpZXdlZCBieSBUaW0gSG9ydG9uLgorCisgICAgICAgIEFkZHMgc3VwcG9ydCBm
b3IgZXhwb3NpbmcgYSBuZXdsaW5lIHNlcGFyYXRlZCBsaXN0IG9mIFVSTHMgdmlhIERhdGFUcmFu
c2ZlcidzICJ0ZXh0L3VyaS1saXN0IiB0eXBlIHdoZW4gcGFzdGluZworICAgICAgICBvciBkcm9w
cGluZyBtdWx0aXBsZSBpdGVtcyBvbiB0aGUgcGFzdGVib2FyZCB0aGF0IGNhbiBiZSByZXByZXNl
bnRlZCBhcyBVUkxzLiBDdXJyZW50bHkgb24gaU9TLCBvbmx5IHRoZSBVUkwgb2YKKyAgICAgICAg
dGhlIGZpcnN0IGl0ZW0gKGlmIHByZXNlbnQpIGlzIGV4cG9zZWQsIGFuZCBvbiBtYWNPUywgb25s
eSB0aGUgZmlyc3Qgb3V0IG9mIGFsbCB0aGUgVVJMcyBpbiB0aGUgcGFzdGVib2FyZCBpcworICAg
ICAgICBleHBvc2VkLgorCisgICAgICAgIFRvIGZpeCB0aGlzLCB3ZSBpbnRyb2R1Y2UgYFBhc3Rl
Ym9hcmQ6OnJlYWRBbGxTdHJpbmdzYCwgd2hpY2ggcmVhZHMgYSBsaXN0IG9mIHBhc3RlYm9hcmQg
c3RyaW5ncyBjb2xsZWN0ZWQgZnJvbQorICAgICAgICBhbGwgYXZhaWxhYmxlIGl0ZW1zIG9uIHRo
ZSBwbGF0Zm9ybSBwYXN0ZWJvYXJkLiBDdXJyZW50bHksIHRoaXMgaXMgb25seSB1c2VkIHRvIHBy
b3ZpZGUgYSBsaXN0IG9mIFVSTCBzdHJpbmdzCisgICAgICAgIHdoZW4gZmV0Y2hpbmcgZGF0YSBm
b3IgdGhlICJ0ZXh0L3VyaS1saXN0IiB0eXBlIHdoZW4gY2FsbGluZyBgRGF0YVRyYW5zZmVyLmdl
dERhdGEoKWAgYW5kCisgICAgICAgIGBEYXRhVHJhbnNmZXJJdGVtLmdldEFzU3RyaW5nKClgLgor
CisgICAgICAgIFRlc3RzOiAgRHJhZ0FuZERyb3BUZXN0cy5FeHBvc2VNdWx0aXBsZVVSTHNJbkRh
dGFUcmFuc2ZlcgorICAgICAgICAgICAgICAgIFVJUGFzdGVib2FyZFRlc3RzLkRhdGFUcmFuc2Zl
clVSSUxpc3RDb250YWluc011bHRpcGxlVVJMcworICAgICAgICAgICAgICAgIFBhc3RlTWl4ZWRD
b250ZW50LlBhc3RlT25lT3JNb3JlVVJMcworCisgICAgICAgICogZG9tL0RhdGFUcmFuc2Zlci5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpyZWFkVVJMc0Zyb21QYXN0ZWJvYXJkQXNTdHJpbmcpOgor
CisgICAgICAgIEFkZCBhIGhlbHBlciBtZXRob2QgdGhhdCByZWFkcyBhbGwgVVJMIHN0cmluZ3Mg
ZnJvbSB0aGUgcGFzdGVib2FyZCAoZm9yIHRoZSBNSU1FIHR5cGUgInRleHQvdXJpLWxpc3QiLCB3
aGljaAorICAgICAgICBjb3JyZXNwb25kcyB0byBOU1VSTFBib2FyZFR5cGUgYW5kICJwdWJsaWMu
dXJsIiBvbiBtYWNPUyBhbmQgaU9TLCByZXNwZWN0aXZlbHkpIGFuZCByZXR1cm5zIGEgc2luZ2xl
IHN0cmluZworICAgICAgICBjb250YWluaW5nIGFsbCBub24tZW1wdHkgVVJMcyBqb2luZWQgYnkg
bmV3bGluZSBjaGFyYWN0ZXJzLiBBbHNvIHRha2VzIGEgZmlsdGVyaW5nIGJsb2NrIHdoaWNoIG1h
eSBiZSB1c2VkIHRvCisgICAgICAgIHJlamVjdCBVUkxzIGZyb20gYmVpbmcgaW5jbHVkZWQgaW4g
InRleHQvdXJpLWxpc3QiIG91dHB1dC4KKworICAgICAgICAoV2ViQ29yZTo6RGF0YVRyYW5zZmVy
OjpnZXREYXRhRm9ySXRlbSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhVHJhbnNmZXI6
OnJlYWRTdHJpbmdGcm9tUGFzdGVib2FyZCBjb25zdCk6CisKKyAgICAgICAgSW5zdGVhZGluZyBv
ZiByZWFkaW5nIGEgc2luZ2xlIHN0cmluZyBmcm9tIHRoZSBwYXN0ZWJvYXJkIGZvciAidGV4dC91
cmktbGlzdCIsIGNhbGwgdGhlIGFib3ZlIGhlbHBlciBmdW5jdGlvbiB0bworICAgICAgICByZWFk
IGFsbCBVUkwgc3RyaW5ncyBpbiB0aGUgcGFzdGVib2FyZC4gSWYgdGhlcmUgYXJlIGZpbGVzIHBy
ZXNlbnQgaW4gdGhlIHBhc3RlYm9hcmQsIHdlIGFsc28gZmlsdGVyIG91dCBVUkxzCisgICAgICAg
IHdob3NlIHNjaGVtZXMgYXJlIG5vdCBpbiB0aGUgc2V0IG9mIHNjaGVtZXMgdGhhdCBhcmUgc2Fm
ZSB0byBleHBvc2UgdG8gdGhlIHBhZ2UgKGkuZS4gaHR0cChzKSwgYmxvYiwgYW5kIGRhdGEpLgor
CisgICAgICAgICogcGxhdGZvcm0vUGFzdGVib2FyZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQ
YXN0ZWJvYXJkOjpyZWFkQWxsU3RyaW5ncyk6CisKKyAgICAgICAgQWRkIGEgZGVmYXVsdCBub24t
Q29jb2EgaW1wbGVtZW50YXRpb24gb2YgcmVhZEFsbFN0cmluZ3MoKSB0aGF0IHJldHVybnMgYSB2
ZWN0b3IsIHdoaWNoIG1heSBjb250YWluIHRoZSByZXN1bHQKKyAgICAgICAgb2YgcmVhZFN0cmlu
ZygpLgorCisgICAgICAgICogcGxhdGZvcm0vUGFzdGVib2FyZC5oOgorICAgICAgICAqIHBsYXRm
b3JtL1Bhc3RlYm9hcmRTdHJhdGVneS5oOgorICAgICAgICAqIHBsYXRmb3JtL1BsYXRmb3JtUGFz
dGVib2FyZC5oOgorCisgICAgICAgIEFkZCBwbHVtYmluZyB0byBncmFiIGEgbGlzdCBvZiBzdHJp
bmdzIGZyb20gdGhlIHBhc3RlYm9hcmQgZm9yIGEgZ2l2ZW4gdHlwZS4KKworICAgICAgICAqIHBs
YXRmb3JtL2NvY29hL1Bhc3RlYm9hcmRDb2NvYS5tbToKKyAgICAgICAgKFdlYkNvcmU6OlBhc3Rl
Ym9hcmQ6OnJlYWRBbGxTdHJpbmdzKToKKyAgICAgICAgKFdlYkNvcmU6OlBhc3RlYm9hcmQ6OnJl
YWRTdHJpbmcpOgorCisgICAgICAgIEltcGxlbWVudCB0aGVzZSB0d28gbWV0aG9kcyBpbiB0ZXJt
cyBvZiBgcmVhZFBsYXRmb3JtVmFsdWVzQXNTdHJpbmdzYC4gYHJlYWRBbGxTdHJpbmdzYCByZXR1
cm5zIHRoZSBmdWxsIGxpc3Qgb2YKKyAgICAgICAgcmVzdWx0cywgd2hpbGUgYHJlYWRTdHJpbmdg
IG9ubHkgcmV0dXJucyB0aGUgZmlyc3QgcmVzdWx0LgorCisgICAgICAgICogcGxhdGZvcm0vaW9z
L1Bhc3RlYm9hcmRJT1MubW06CisgICAgICAgIChXZWJDb3JlOjpQYXN0ZWJvYXJkOjpyZWFkUGxh
dGZvcm1WYWx1ZXNBc1N0cmluZ3MpOgorICAgICAgICAoV2ViQ29yZTo6UGFzdGVib2FyZDo6cmVh
ZFBsYXRmb3JtVmFsdWVBc1N0cmluZyk6IERlbGV0ZWQuCisKKyAgICAgICAgUmVmYWN0b3IgdGhp
cyBDb2NvYSBoZWxwZXIgZnVuY3Rpb24gdG8gcmV0dXJuIGEgbGlzdCBvZiBwYXN0ZWJvYXJkIHN0
cmluZyB2YWx1ZXMgZm9yIHRoZSBnaXZlbiB0eXBlLCByYXRoZXIgdGhhbgorICAgICAgICBhIHNp
bmdsZSBzdHJpbmcuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9pb3MvUGxhdGZvcm1QYXN0ZWJvYXJk
SU9TLm1tOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1QYXN0ZWJvYXJkOjphbGxTdHJpbmdz
Rm9yVHlwZSBjb25zdCk6CisKKyAgICAgICAgR3JhYiBhIHN0cmluZyBmb3IgZWFjaCBpdGVtIChy
ZXByZXNlbnRlZCBieSBhbiBOU0l0ZW1Qcm92aWRlcikgaW4gdGhlIHBhc3RlYm9hcmQgdGhhdCBo
YXMgZGF0YSBmb3IgdGhlIGdpdmVuCisgICAgICAgIHR5cGUgaWRlbnRpZmllci4KKworICAgICAg
ICAoV2ViQ29yZTo6UGxhdGZvcm1QYXN0ZWJvYXJkOjpyZWFkU3RyaW5nIGNvbnN0KToKKworICAg
ICAgICBSZXR1cm4gdGhlIGFic29sdXRlIHN0cmluZyBvZiB0aGUgTlNVUkwsIGluc3RlYWQgb2Yg
V2ViQ29yZTo6VVJMOjpzdHJpbmcoKS4gVGhpcyBpcyBuZWVkZWQgdG8gaGFuZGxlIHRoZSBjYXNl
CisgICAgICAgIHdoZXJlIHRoZSBOU1VSTCBpcyBjb25zdHJ1Y3RlZCBmcm9tIGFic29sdXRlIGFu
ZCByZWxhdGl2ZSBwYXJ0cyB1c2luZyBhIFBsaXN0LiBXaGlsZSAtYWJzb2x1dGVTdHJpbmcgZ2V0
cyB1cyB0aGUKKyAgICAgICAgZnVsbCBVUkwgc3RyaW5nLCBVUkw6OnN0cmluZygpIG9ubHkgcmV0
dXJucyB0aGUgcmVsYXRpdmUgcG9ydGlvbi4KKworICAgICAgICAqIHBsYXRmb3JtL21hYy9QYXN0
ZWJvYXJkTWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6UGFzdGVib2FyZDo6cmVhZFBsYXRmb3Jt
VmFsdWVzQXNTdHJpbmdzKToKKyAgICAgICAgKFdlYkNvcmU6OlBhc3RlYm9hcmQ6OnJlYWRQbGF0
Zm9ybVZhbHVlQXNTdHJpbmcpOiBEZWxldGVkLgorCisgICAgICAgIEFsc28gcmVmYWN0b3IgdGhp
cyB0byByZXRyaWV2ZSBhIGxpc3Qgb2YgcGFzdGVib2FyZCBzdHJpbmdzLCByYXRoZXIgdGhhbiBh
IHNpbmdsZSByZXN1bHQuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvUGxhdGZvcm1QYXN0ZWJv
YXJkTWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6dHlwZUlkZW50aWZpZXJGb3JQYXN0ZWJvYXJk
VHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybVBhc3RlYm9hcmQ6OmFsbFN0cmluZ3NG
b3JUeXBlIGNvbnN0KToKKworICAgICAgICBBZGQgYW4gaW1wbGVtZW50YXRpb24gZm9yIGBhbGxT
dHJpbmdzRm9yVHlwZWAgb24gbWFjT1MuIFVubGlrZSBpT1MsIGl0J3MgbXVjaCB0cmlja2llciB0
byBnZXQgdGhpcyByaWdodCBzaW5jZQorICAgICAgICB3ZSBuZWVkIHRvIG1haW50YWluIGNvbXBh
dGliaWxpdHkgd2l0aCBsZWdhY3kgIk5TKlBib2FyZCIgdHlwZXMsIGFuZCBgTlNQYXN0ZWJvYXJk
SXRlbWAgY2FuIG9ubHkgcHJvdmlkZSBkYXRhCisgICAgICAgIGZvciBgTlNQYXN0ZWJvYXJkVHlw
ZWBzIChpLmUuIFVUSXMpLCBzbyB0aGVyZSdzIG5vIHdheSB0byBqdXN0IGl0ZXJhdGUgdGhyb3Vn
aCBlYWNoIHBhc3RlYm9hcmQgaXRlbSBhbmQgYXNrIGl0CisgICAgICAgIGZvciBkYXRhIHRoYXQg
bWF0Y2hlcyB0aGUgZ2l2ZW4gdHlwZSwgaWYgdGhlIHR5cGVzIGFyZSBub3QgVVRJcy4gSG93ZXZl
ciwgaW4gdGhlIGNhc2Ugd2hlcmUgd2UgaGF2ZSBtdWx0aXBsZQorICAgICAgICBpdGVtcywgdGhl
IGNsaWVudCBtdXN0IGhhdmUgdXNlZCBOU1Bhc3RlYm9hcmRXcml0aW5nLWNvbmZvcm1hbnQgb2Jq
ZWN0cyBhbmQvb3IgTlNQYXN0ZWJvYXJkSXRlbSBpdHNlbGYgdG8gd3JpdGUKKyAgICAgICAgZGF0
YSB0byB0aGUgcGFzdGVib2FyZC4gU2luY2UgTlNQYXN0ZWJvYXJkV3JpdGluZy1jb25mb3JtYW50
IG9iamVjdHMgcmVnaXN0ZXIgbW9kZXJuIHBhc3RlYm9hcmQgdHlwZXMgd2hlbgorICAgICAgICB3
cml0aW5nIHRvIHRoZSBwYXN0ZWJvYXJkLCB3ZSBjYW4gc2ltcGx5IGl0ZXJhdGUgb3ZlciB0aGVz
ZSBwYXN0ZWJvYXJkIGl0ZW1zIGFuZCBhc2sgZm9yIHByb3BlcnR5IGxpc3RzIHVzaW5nCisgICAg
ICAgIHR5cGUgaWRlbnRpZmllcnMgaW5zdGVhZCBvZiBoYXZpbmcgdG8gd29ycnkgYWJvdXQgbGVn
YWN5IHBhc3RlYm9hcmQgdHlwZXMuIEZ1cnRoZXJtb3JlLCBpbiB0aGUgY2FzZSB3aGVyZSB0aGVy
ZQorICAgICAgICBpcyBvbmx5IGEgc2luZ2xlIGl0ZW0gaW4gdGhlIHBhc3RlYm9hcmQgYW5kIHdl
IGRvIG5lZWQgdG8gaGFuZGxlIGxlZ2FjeSBwYXN0ZWJvYXJkIHR5cGVzLCB1c2luZyBgLVtOU1Bh
c3RlYm9hcmQKKyAgICAgICAgc3RyaW5nRm9yVHlwZTpdYCBpbiB0aGUgc2FtZSB3YXkgd2UgZG8g
Y3VycmVudGx5IHNob3VsZCB5aWVsZCB0aGUgY29ycmVjdCByZXN1bHQuCisKKyAgICAgICAgQXMg
c3VjaCwgaW4gdGhlIGNhc2Ugd2hlcmUgdGhlcmUgaXMgYSBzaW5nbGUgcGFzdGVib2FyZCBpdGVt
LCB3ZSB1c2UgYC1bTlNQYXN0ZWJvYXJkIHN0cmluZ0ZvclR5cGU6XWAgd2l0aCB0aGUKKyAgICAg
ICAgb3JpZ2luYWwgbGVnYWN5IHR5cGUsIGFuZCBpbiB0aGUgY2FzZSB3aGVyZSB0aGVyZSBhcmUg
bXVsdGlwbGUgaXRlbXMgb24gdGhlIHBhc3RlYm9hcmQsIHdlIGl0ZXJhdGUgb3ZlciBlYWNoIG9m
CisgICAgICAgIHRoZSBwYXN0ZWJvYXJkIGl0ZW1zIGFuZCBjYWxsIGAtW05TUGFzdGVib2FyZEl0
ZW0gcHJvcGVydHlMaXN0Rm9yVHlwZTpdYCB3aXRoIHRoZSBtb2Rlcm4gcGFzdGVib2FyZCB0eXBl
CisgICAgICAgIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGdpdmVuIGxlZ2FjeSBwYXN0ZWJvYXJkIHR5
cGUuCisKKyAgICAgICAgVGhlIGRpZmZlcmVudCBjb3JuZXIgY2FzZXMgaW4gdGhpcyBsb2dpYyBh
cmUgdGVzdGVkIGJ5IHRoZSBuZXcgQVBJIHRlc3QsIFBhc3RlTWl4ZWRDb250ZW50LlBhc3RlT25l
T3JNb3JlVVJMcywKKyAgICAgICAgd2hpY2ggZXhlcmNpc2VzIHNldmVyYWwgZGlmZmVyZW50IHdh
eXMgb2Ygd3JpdGluZyBvbmUgb3IgbW9yZSBVUkxzIHRvIHRoZSBwYXN0ZWJvYXJkIG9uIG1hY09T
LCB3aGljaCBlYWNoIHJlc3VsdAorICAgICAgICBpbiBkaWZmZXJlbnQgbGVnYWN5IGFuZCBtb2Rl
cm4gcGFzdGVib2FyZCB0eXBlcyBiZWluZyB3cml0dGVuIHRvIHRoZSBwYXN0ZWJvYXJkOyBvdXIg
aW1wbGVtZW50YXRpb24gb2YKKyAgICAgICAgYFBsYXRmb3JtUGFzdGVib2FyZDo6YWxsU3RyaW5n
c0ZvclR5cGVgIG9uIG1hY09TIGhhbmRsZXMgYWxsIGNhc2VzIGNvcnJlY3RseS4KKwogMjAxOC0w
OC0zMSAgWW91ZW5uIEZhYmxldCAgPHlvdWVubkBhcHBsZS5jb20+CiAKICAgICAgICAgTW92ZSBz
dGF0cyBnYXRoZXJpbmcgb3V0IG9mIExpYldlYlJUQ01lZGlhRW5kcG9pbnQKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKaW5kZXgg
ZmMwM2E1NjUxYzI2MGNhY2YwMDA5M2E5OWM1YTJhYzhmMGM3NTM0My4uNDFjNjdjYmU4OWM2OTlm
NTc3NTBlNWQ5ZjIxOTM0MmQ3NjgxZDRlYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9DaGFu
Z2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMiBAQAorMjAx
OC0wOS0wMyAgV2Vuc29uIEhzaWVoICA8d2Vuc29uX2hzaWVoQGFwcGxlLmNvbT4KKworICAgICAg
ICBQb3B1bGF0ZSAidGV4dC91cmktbGlzdCIgd2l0aCBtdWx0aXBsZSBVUkxzIHdoZW4gdGhlIHBh
c3RlYm9hcmQgY29udGFpbnMgbXVsdGlwbGUgVVJMcworICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTg4ODkwCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS80
MzY0ODYwNT4KKworICAgICAgICBSZXZpZXdlZCBieSBUaW0gSG9ydG9uLgorCisgICAgICAgIEFk
ZCBzb21lIHBsdW1iaW5nIHRocm91Z2ggcGFzdGVib2FyZCBjbGFzc2VzIHRvIHN1cHBvcnQgYFBh
c3RlYm9hcmQ6OnJlYWRBbGxTdHJpbmdzYC4gU2VlIFdlYkNvcmUgQ2hhbmdlTG9nIGZvcgorICAg
ICAgICBtb3JlIGRldGFpbC4KKworICAgICAgICAqIFVJUHJvY2Vzcy9Db2NvYS9XZWJQYXN0ZWJv
YXJkUHJveHlDb2NvYS5tbToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFzdGVib2FyZFByb3h5Ojpn
ZXRQYXN0ZWJvYXJkU3RyaW5nc0ZvclR5cGUpOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQYXN0
ZWJvYXJkUHJveHkuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUGFzdGVib2FyZFByb3h5Lm1l
c3NhZ2VzLmluOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViUGxhdGZv
cm1TdHJhdGVnaWVzLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGxhdGZvcm1TdHJhdGVnaWVz
OjphbGxTdHJpbmdzRm9yVHlwZSk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9y
dC9XZWJQbGF0Zm9ybVN0cmF0ZWdpZXMuaDoKKwogMjAxOC0wOC0zMSAgSm9obiBXaWxhbmRlciAg
PHdpbGFuZGVyQGFwcGxlLmNvbT4KIAogICAgICAgICBTdG9yYWdlIEFjY2VzcyBBUEk6IE1haW50
YWluIGFjY2VzcyB0aHJvdWdoIHNhbWUtc2l0ZSBuYXZpZ2F0aW9ucwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMv
Q2hhbmdlTG9nCmluZGV4IDliMWQ1NzkwNzY4ZWFhMGFhZDcxODYxY2Q2NWY3N2Q0ZTQ4MmEyODUu
Ljc0YzQzYTQxZGNiYTBhNmQ3Njk4NWYzOTMyZmY1ZjgzNWYwOTUzOWEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5
L21hYy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxOCBAQAorMjAxOC0wOS0wMyAgV2Vuc29uIEhzaWVo
ICA8d2Vuc29uX2hzaWVoQGFwcGxlLmNvbT4KKworICAgICAgICBQb3B1bGF0ZSAidGV4dC91cmkt
bGlzdCIgd2l0aCBtdWx0aXBsZSBVUkxzIHdoZW4gdGhlIHBhc3RlYm9hcmQgY29udGFpbnMgbXVs
dGlwbGUgVVJMcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTg4ODkwCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS80MzY0ODYwNT4KKworICAgICAgICBS
ZXZpZXdlZCBieSBUaW0gSG9ydG9uLgorCisgICAgICAgIEFkZCBzb21lIHBsdW1iaW5nIHRocm91
Z2ggcGFzdGVib2FyZCBjbGFzc2VzIHRvIHN1cHBvcnQgYFBhc3RlYm9hcmQ6OnJlYWRBbGxTdHJp
bmdzYC4gU2VlIFdlYkNvcmUgQ2hhbmdlTG9nIGZvcgorICAgICAgICBtb3JlIGRldGFpbC4KKwor
ICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1dlYlBsYXRmb3JtU3RyYXRlZ2llcy5oOgorICAgICAg
ICAqIFdlYkNvcmVTdXBwb3J0L1dlYlBsYXRmb3JtU3RyYXRlZ2llcy5tbToKKyAgICAgICAgKFdl
YlBsYXRmb3JtU3RyYXRlZ2llczo6YWxsU3RyaW5nc0ZvclR5cGUpOgorCiAyMDE4LTA4LTMxICBD
aHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAKICAgICAgICAgQXNzZXJ0aW9uIGhpdCBp
biB+Q29tcGxldGlvbkhhbmRsZXIoKSBmcm9tIH5XZWJGcmFtZSgpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9kb20vRGF0YVRyYW5zZmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9EYXRh
VHJhbnNmZXIuY3BwCmluZGV4IDUxNDFmNDcyZmU5YjQ5MTVlOGJhNDY3ZjM3NWE4MzIyNjA1Zjc4
N2QuLjZkMzlkYTQ1NWQ0MmYzMzgyZGM3NDI1ZGFkODAwN2JmZDY3MDdiOWUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2RvbS9EYXRhVHJhbnNmZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2RvbS9EYXRhVHJhbnNmZXIuY3BwCkBAIC00Nyw2ICs0Nyw3IEBACiAjaW5jbHVkZSAiV2ViQ29u
dGVudFJlYWRlci5oIgogI2luY2x1ZGUgIldlYkNvcmVQYXN0ZWJvYXJkRmlsZVJlYWRlci5oIgog
I2luY2x1ZGUgIm1hcmt1cC5oIgorI2luY2x1ZGUgPHd0Zi91bmljb2RlL0NoYXJhY3Rlck5hbWVz
Lmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtMTQyLDYgKzE0MywxOSBAQCB2b2lkIERh
dGFUcmFuc2Zlcjo6Y2xlYXJEYXRhKGNvbnN0IFN0cmluZyYgdHlwZSkKICAgICAgICAgbV9pdGVt
TGlzdC0+ZGlkQ2xlYXJTdHJpbmdEYXRhKG5vcm1hbGl6ZWRUeXBlKTsKIH0KIAorc3RhdGljIFN0
cmluZyByZWFkVVJMc0Zyb21QYXN0ZWJvYXJkQXNTdHJpbmcoUGFzdGVib2FyZCYgcGFzdGVib2Fy
ZCwgRnVuY3Rpb248Ym9vbChjb25zdCBTdHJpbmcmKT4mJiBzaG91bGRJbmNsdWRlVVJMKQorewor
ICAgIFN0cmluZ0J1aWxkZXIgdXJsTGlzdDsKKyAgICBmb3IgKGF1dG8gdXJsU3RyaW5nIDogcGFz
dGVib2FyZC5yZWFkQWxsU3RyaW5ncygidGV4dC91cmktbGlzdCJfcykpIHsKKyAgICAgICAgaWYg
KCFzaG91bGRJbmNsdWRlVVJMKHVybFN0cmluZykpCisgICAgICAgICAgICBjb250aW51ZTsKKyAg
ICAgICAgaWYgKCF1cmxMaXN0LmlzRW1wdHkoKSkKKyAgICAgICAgICAgIHVybExpc3QuYXBwZW5k
KG5ld2xpbmVDaGFyYWN0ZXIpOworICAgICAgICB1cmxMaXN0LmFwcGVuZCh1cmxTdHJpbmcpOwor
ICAgIH0KKyAgICByZXR1cm4gdXJsTGlzdC50b1N0cmluZygpOworfQorCiBTdHJpbmcgRGF0YVRy
YW5zZmVyOjpnZXREYXRhRm9ySXRlbShEb2N1bWVudCYgZG9jdW1lbnQsIGNvbnN0IFN0cmluZyYg
dHlwZSkgY29uc3QKIHsKICAgICBpZiAoIWNhblJlYWREYXRhKCkpCkBAIC0xNTAsOSArMTY0LDkg
QEAgU3RyaW5nIERhdGFUcmFuc2Zlcjo6Z2V0RGF0YUZvckl0ZW0oRG9jdW1lbnQmIGRvY3VtZW50
LCBjb25zdCBTdHJpbmcmIHR5cGUpIGNvbnMKICAgICBhdXRvIGxvd2VyY2FzZVR5cGUgPSBzdHJp
cExlYWRpbmdBbmRUcmFpbGluZ0hUTUxTcGFjZXModHlwZSkuY29udmVydFRvQVNDSUlMb3dlcmNh
c2UoKTsKICAgICBpZiAoc2hvdWxkU3VwcHJlc3NHZXRBbmRTZXREYXRhVG9Bdm9pZEV4cG9zaW5n
RmlsZVBhdGhzKCkpIHsKICAgICAgICAgaWYgKGxvd2VyY2FzZVR5cGUgPT0gInRleHQvdXJpLWxp
c3QiKSB7Ci0gICAgICAgICAgICBhdXRvIHVybFN0cmluZyA9IG1fcGFzdGVib2FyZC0+cmVhZFN0
cmluZyhsb3dlcmNhc2VUeXBlKTsKLSAgICAgICAgICAgIGlmIChQYXN0ZWJvYXJkOjpjYW5FeHBv
c2VVUkxUb0RPTVdoZW5QYXN0ZWJvYXJkQ29udGFpbnNGaWxlcyh1cmxTdHJpbmcpKQotICAgICAg
ICAgICAgICAgIHJldHVybiB1cmxTdHJpbmc7CisgICAgICAgICAgICByZXR1cm4gcmVhZFVSTHNG
cm9tUGFzdGVib2FyZEFzU3RyaW5nKCptX3Bhc3RlYm9hcmQsIFtdIChhdXRvJiB1cmxTdHJpbmcp
IHsKKyAgICAgICAgICAgICAgICByZXR1cm4gUGFzdGVib2FyZDo6Y2FuRXhwb3NlVVJMVG9ET01X
aGVuUGFzdGVib2FyZENvbnRhaW5zRmlsZXModXJsU3RyaW5nKTsKKyAgICAgICAgICAgIH0pOwog
ICAgICAgICB9CiAKICAgICAgICAgaWYgKGxvd2VyY2FzZVR5cGUgPT0gInRleHQvaHRtbCIgJiYg
UnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS5jdXN0b21QYXN0ZWJvYXJk
RGF0YUVuYWJsZWQoKSkgewpAQCAtMTkyLDYgKzIwNiwxMiBAQCBTdHJpbmcgRGF0YVRyYW5zZmVy
OjpyZWFkU3RyaW5nRnJvbVBhc3RlYm9hcmQoRG9jdW1lbnQmIGRvY3VtZW50LCBjb25zdCBTdHJp
bmcmCiAgICAgICAgIHJldHVybiByZWFkZXIubWFya3VwOwogICAgIH0KIAorICAgIGlmICghaXM8
U3RhdGljUGFzdGVib2FyZD4oKm1fcGFzdGVib2FyZCkgJiYgbG93ZXJjYXNlVHlwZSA9PSAidGV4
dC91cmktbGlzdCIpIHsKKyAgICAgICAgcmV0dXJuIHJlYWRVUkxzRnJvbVBhc3RlYm9hcmRBc1N0
cmluZygqbV9wYXN0ZWJvYXJkLCBbXSAoYXV0byYpIHsKKyAgICAgICAgICAgIHJldHVybiB0cnVl
OworICAgICAgICB9KTsKKyAgICB9CisKICAgICByZXR1cm4gbV9wYXN0ZWJvYXJkLT5yZWFkU3Ry
aW5nKGxvd2VyY2FzZVR5cGUpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9QYXN0ZWJvYXJkLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Bhc3RlYm9hcmQu
Y3BwCmluZGV4IDE4ZmRlYjJkOWU4NWQ3ZTkxNjIxYTQ1NWRmM2U3ZjljNWE5NDBkMjguLjczN2Ez
OTA0MjU3ZGU2NDNiYzBkOWFiOTliYzI2NGEzMTRmZDZmZjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL1Bhc3RlYm9hcmQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL1Bhc3RlYm9hcmQuY3BwCkBAIC04NSw0ICs4NSwxNyBAQCBQYXN0ZWJvYXJkQ3VzdG9tRGF0
YSBQYXN0ZWJvYXJkQ3VzdG9tRGF0YTo6ZnJvbVNoYXJlZEJ1ZmZlcihjb25zdCBTaGFyZWRCdWZm
ZXImCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAorI2lmICFQTEFURk9STShDT0NPQSkKKworVmVj
dG9yPFN0cmluZz4gUGFzdGVib2FyZDo6cmVhZEFsbFN0cmluZ3MoY29uc3QgU3RyaW5nJiB0eXBl
KQoreworICAgIGF1dG8gcmVzdWx0ID0gcmVhZFN0cmluZyh0eXBlKTsKKyAgICBpZiAocmVzdWx0
LmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIHsgfTsKKworICAgIHJldHVybiB7IHJlc3VsdCB9
OworfQorCisjZW5kaWYKKwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L1Bhc3RlYm9hcmQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Bhc3RlYm9hcmQuaAppbmRl
eCBlMDk4MTU2NTFiZDJkNjA1NzRkYTQyMzZjMzgwZmFkNGQ2MDIxNWE5Li4yMDYzNWFiMDI5NGYy
OTk3ZTI4ZmJmZmQ1MDk4Njk0OGE5OWI2MDMwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9QYXN0ZWJvYXJkLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUGFzdGVi
b2FyZC5oCkBAIC0yMDQsNiArMjA0LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgV0VCQ09SRV9F
WFBPUlQgU3RyaW5nIHJlYWRPcmlnaW4oKTsKICAgICB2aXJ0dWFsIFdFQkNPUkVfRVhQT1JUIFN0
cmluZyByZWFkU3RyaW5nKGNvbnN0IFN0cmluZyYgdHlwZSk7CiAgICAgdmlydHVhbCBXRUJDT1JF
X0VYUE9SVCBTdHJpbmcgcmVhZFN0cmluZ0luQ3VzdG9tRGF0YShjb25zdCBTdHJpbmcmIHR5cGUp
OworICAgIHZpcnR1YWwgV0VCQ09SRV9FWFBPUlQgVmVjdG9yPFN0cmluZz4gcmVhZEFsbFN0cmlu
Z3MoY29uc3QgU3RyaW5nJiB0eXBlKTsKIAogICAgIHZpcnR1YWwgV0VCQ09SRV9FWFBPUlQgdm9p
ZCB3cml0ZVN0cmluZyhjb25zdCBTdHJpbmcmIHR5cGUsIGNvbnN0IFN0cmluZyYgZGF0YSk7CiAg
ICAgdmlydHVhbCBXRUJDT1JFX0VYUE9SVCB2b2lkIGNsZWFyKCk7CkBAIC0yOTgsNyArMjk5LDcg
QEAgcHJpdmF0ZToKIAogI2lmIFBMQVRGT1JNKENPQ09BKQogICAgIFZlY3RvcjxTdHJpbmc+IHJl
YWRGaWxlUGF0aHMoKTsKLSAgICBTdHJpbmcgcmVhZFBsYXRmb3JtVmFsdWVBc1N0cmluZyhjb25z
dCBTdHJpbmcmIGRvbVR5cGUsIGxvbmcgY2hhbmdlQ291bnQsIGNvbnN0IFN0cmluZyYgcGFzdGVi
b2FyZE5hbWUpOworICAgIFZlY3RvcjxTdHJpbmc+IHJlYWRQbGF0Zm9ybVZhbHVlc0FzU3RyaW5n
cyhjb25zdCBTdHJpbmcmIGRvbVR5cGUsIGxvbmcgY2hhbmdlQ291bnQsIGNvbnN0IFN0cmluZyYg
cGFzdGVib2FyZE5hbWUpOwogICAgIHN0YXRpYyB2b2lkIGFkZEhUTUxDbGlwYm9hcmRUeXBlc0Zv
ckNvY29hVHlwZShMaXN0SGFzaFNldDxTdHJpbmc+JiByZXN1bHRUeXBlcywgY29uc3QgU3RyaW5n
JiBjb2NvYVR5cGUpOwogICAgIFN0cmluZyByZWFkU3RyaW5nRm9yUGxhdGZvcm1UeXBlKGNvbnN0
IFN0cmluZyYpOwogICAgIFZlY3RvcjxTdHJpbmc+IHJlYWRUeXBlc1dpdGhTZWN1cml0eUNoZWNr
KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QYXN0ZWJvYXJkU3RyYXRl
Z3kuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Bhc3RlYm9hcmRTdHJhdGVneS5oCmluZGV4
IDlkODI3YzAxZjg1Y2MwMmIyMTY5NWQ5YjJlN2JjYTE1YjRiOWZkMDUuLjk5ZDhkZGZmYWUwMGVh
Y2UxYTYzMmNiMGQzZjUzODFhMjNmYTM2NWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL1Bhc3RlYm9hcmRTdHJhdGVneS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L1Bhc3RlYm9hcmRTdHJhdGVneS5oCkBAIC02MSw2ICs2MSw3IEBAIHB1YmxpYzoKICAgICB2aXJ0
dWFsIFJlZlB0cjxTaGFyZWRCdWZmZXI+IGJ1ZmZlckZvclR5cGUoY29uc3QgU3RyaW5nJiBwYXN0
ZWJvYXJkVHlwZSwgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSkgPSAwOwogICAgIHZpcnR1
YWwgdm9pZCBnZXRQYXRobmFtZXNGb3JUeXBlKFZlY3RvcjxTdHJpbmc+JiBwYXRobmFtZXMsIGNv
bnN0IFN0cmluZyYgcGFzdGVib2FyZFR5cGUsIGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUp
ID0gMDsKICAgICB2aXJ0dWFsIFN0cmluZyBzdHJpbmdGb3JUeXBlKGNvbnN0IFN0cmluZyYgcGFz
dGVib2FyZFR5cGUsIGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUpID0gMDsKKyAgICB2aXJ0
dWFsIFZlY3RvcjxTdHJpbmc+IGFsbFN0cmluZ3NGb3JUeXBlKGNvbnN0IFN0cmluZyYgcGFzdGVi
b2FyZFR5cGUsIGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUpID0gMDsKICAgICB2aXJ0dWFs
IGxvbmcgY2hhbmdlQ291bnQoY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSkgPSAwOwogICAg
IHZpcnR1YWwgU3RyaW5nIHVuaXF1ZU5hbWUoKSA9IDA7CiAgICAgdmlydHVhbCBDb2xvciBjb2xv
cihjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lKSA9IDA7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9QbGF0Zm9ybVBhc3RlYm9hcmQuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL1BsYXRmb3JtUGFzdGVib2FyZC5oCmluZGV4IGRjNjUwYzMzMzUwYTg3ZDk3Y2Y1MDk4
NGViNmU1MzQ1MDIxMzhkNzYuLjhlMTNiZjRkODQxNDEzYmYxYzExN2RlYzllZmY4NWM0ODI0Yjg4
ZWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1BsYXRmb3JtUGFzdGVib2Fy
ZC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1BsYXRmb3JtUGFzdGVib2FyZC5oCkBA
IC03Myw2ICs3Myw3IEBAIHB1YmxpYzoKICAgICBXRUJDT1JFX0VYUE9SVCBSZWZQdHI8U2hhcmVk
QnVmZmVyPiBidWZmZXJGb3JUeXBlKGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZFR5cGUpOwogICAg
IFdFQkNPUkVfRVhQT1JUIHZvaWQgZ2V0UGF0aG5hbWVzRm9yVHlwZShWZWN0b3I8U3RyaW5nPiYg
cGF0aG5hbWVzLCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmRUeXBlKSBjb25zdDsKICAgICBXRUJD
T1JFX0VYUE9SVCBTdHJpbmcgc3RyaW5nRm9yVHlwZShjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmRU
eXBlKSBjb25zdDsKKyAgICBXRUJDT1JFX0VYUE9SVCBWZWN0b3I8U3RyaW5nPiBhbGxTdHJpbmdz
Rm9yVHlwZShjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmRUeXBlKSBjb25zdDsKICAgICBXRUJDT1JF
X0VYUE9SVCBsb25nIGNoYW5nZUNvdW50KCkgY29uc3Q7CiAgICAgV0VCQ09SRV9FWFBPUlQgQ29s
b3IgY29sb3IoKTsKICAgICBXRUJDT1JFX0VYUE9SVCBVUkwgdXJsKCk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9QYXN0ZWJvYXJkQ29jb2EubW0gYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9QYXN0ZWJvYXJkQ29jb2EubW0KaW5kZXggZjQ4ZTdiODM3
MGJhY2NjNDAzMGFmMDZhMzdkMTQwOGZlZTA5NzBkNi4uZmE1MGU0YzljNTUxMzUxN2IzMzZjMDIy
NjA5MGUzZjYwMjc3MTJkOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29j
b2EvUGFzdGVib2FyZENvY29hLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29h
L1Bhc3RlYm9hcmRDb2NvYS5tbQpAQCAtMjU5LDkgKzI1OSwxNSBAQCB2b2lkIFBhc3RlYm9hcmQ6
OnJlYWQoUGFzdGVib2FyZEZpbGVSZWFkZXImIHJlYWRlcikKICAgICB9CiB9CiAKK1ZlY3RvcjxT
dHJpbmc+IFBhc3RlYm9hcmQ6OnJlYWRBbGxTdHJpbmdzKGNvbnN0IFN0cmluZyYgdHlwZSkKK3sK
KyAgICByZXR1cm4gcmVhZFBsYXRmb3JtVmFsdWVzQXNTdHJpbmdzKHR5cGUsIG1fY2hhbmdlQ291
bnQsIG1fcGFzdGVib2FyZE5hbWUpOworfQorCiBTdHJpbmcgUGFzdGVib2FyZDo6cmVhZFN0cmlu
Zyhjb25zdCBTdHJpbmcmIHR5cGUpCiB7Ci0gICAgcmV0dXJuIHJlYWRQbGF0Zm9ybVZhbHVlQXNT
dHJpbmcodHlwZSwgbV9jaGFuZ2VDb3VudCwgbV9wYXN0ZWJvYXJkTmFtZSk7CisgICAgYXV0byB2
YWx1ZXMgPSByZWFkUGxhdGZvcm1WYWx1ZXNBc1N0cmluZ3ModHlwZSwgbV9jaGFuZ2VDb3VudCwg
bV9wYXN0ZWJvYXJkTmFtZSk7CisgICAgcmV0dXJuIHZhbHVlcy5pc0VtcHR5KCkgPyBTdHJpbmco
KSA6IHZhbHVlcy5maXJzdCgpOwogfQogCiBTdHJpbmcgUGFzdGVib2FyZDo6cmVhZFN0cmluZ0lu
Q3VzdG9tRGF0YShjb25zdCBTdHJpbmcmIHR5cGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9pb3MvUGFzdGVib2FyZElPUy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2lvcy9QYXN0ZWJvYXJkSU9TLm1tCmluZGV4IGQxYzAyZWRmMjIwMjhiNDUzMWFmYzdlYzBmNzYw
OWE1NzE1MzcyYTMuLjlmNjkxNGVjNDgxZjFkY2FhZGE3NWRmOTZkMWQ1NzAyNTVmZjcxNTIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9QYXN0ZWJvYXJkSU9TLm1tCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9QYXN0ZWJvYXJkSU9TLm1tCkBAIC0zNzMs
MzggKzM3MywyOCBAQCB2b2lkIFBhc3RlYm9hcmQ6OmNsZWFyKCkKICAgICBwbGF0Zm9ybVN0cmF0
ZWdpZXMoKS0+cGFzdGVib2FyZFN0cmF0ZWd5KCktPndyaXRlVG9QYXN0ZWJvYXJkKFN0cmluZygp
LCBTdHJpbmcoKSwgbV9wYXN0ZWJvYXJkTmFtZSk7CiB9CiAKLVN0cmluZyBQYXN0ZWJvYXJkOjpy
ZWFkUGxhdGZvcm1WYWx1ZUFzU3RyaW5nKGNvbnN0IFN0cmluZyYgZG9tVHlwZSwgbG9uZyBjaGFu
Z2VDb3VudCwgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSkKK1ZlY3RvcjxTdHJpbmc+IFBh
c3RlYm9hcmQ6OnJlYWRQbGF0Zm9ybVZhbHVlc0FzU3RyaW5ncyhjb25zdCBTdHJpbmcmIGRvbVR5
cGUsIGxvbmcgY2hhbmdlQ291bnQsIGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUpCiB7Ci0g
ICAgUGFzdGVib2FyZFN0cmF0ZWd5JiBzdHJhdGVneSA9ICpwbGF0Zm9ybVN0cmF0ZWdpZXMoKS0+
cGFzdGVib2FyZFN0cmF0ZWd5KCk7Ci0KLSAgICBpbnQgbnVtYmVyT2ZJdGVtcyA9IHN0cmF0ZWd5
LmdldFBhc3RlYm9hcmRJdGVtc0NvdW50KHBhc3RlYm9hcmROYW1lKTsKLQotICAgIGlmICghbnVt
YmVyT2ZJdGVtcykKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOworICAgIGF1dG8mIHN0cmF0ZWd5
ID0gKnBsYXRmb3JtU3RyYXRlZ2llcygpLT5wYXN0ZWJvYXJkU3RyYXRlZ3koKTsKIAogICAgIC8v
IEdyYWIgdGhlIHZhbHVlIG9mZiB0aGUgcGFzdGVib2FyZCBjb3JyZXNwb25kaW5nIHRvIHRoZSBj
b2NvYVR5cGUuCi0gICAgUmV0YWluUHRyPE5TU3RyaW5nPiBjb2NvYVR5cGUgPSBjb2NvYVR5cGVG
cm9tSFRNTENsaXBib2FyZFR5cGUoZG9tVHlwZSk7Ci0KLSAgICBOU1N0cmluZyAqY29jb2FWYWx1
ZSA9IG5pbDsKKyAgICBhdXRvIGNvY29hVHlwZSA9IGNvY29hVHlwZUZyb21IVE1MQ2xpcGJvYXJk
VHlwZShkb21UeXBlKTsKKyAgICBpZiAoIWNvY29hVHlwZSkKKyAgICAgICAgcmV0dXJuIHsgfTsK
IAotICAgIGlmIChbY29jb2FUeXBlIGlzRXF1YWxUb1N0cmluZzooTlNTdHJpbmcgKilrVVRUeXBl
VVJMXSkgewotICAgICAgICBTdHJpbmcgdGl0bGU7Ci0gICAgICAgIFVSTCB1cmwgPSBzdHJhdGVn
eS5yZWFkVVJMRnJvbVBhc3RlYm9hcmQoMCwgcGFzdGVib2FyZE5hbWUsIHRpdGxlKTsKLSAgICAg
ICAgaWYgKCF1cmwuaXNOdWxsKCkpCi0gICAgICAgICAgICBjb2NvYVZhbHVlID0gWyhOU1VSTCAq
KXVybCBhYnNvbHV0ZVN0cmluZ107Ci0gICAgfSBlbHNlIGlmIChbY29jb2FUeXBlIGlzRXF1YWxU
b1N0cmluZzooTlNTdHJpbmcgKilrVVRUeXBlUGxhaW5UZXh0XSkgewotICAgICAgICBTdHJpbmcg
dmFsdWUgPSBzdHJhdGVneS5yZWFkU3RyaW5nRnJvbVBhc3RlYm9hcmQoMCwga1VUVHlwZVBsYWlu
VGV4dCwgcGFzdGVib2FyZE5hbWUpOwotICAgICAgICBpZiAoIXZhbHVlLmlzTnVsbCgpKQotICAg
ICAgICAgICAgY29jb2FWYWx1ZSA9IFsoTlNTdHJpbmcgKil2YWx1ZSBwcmVjb21wb3NlZFN0cmlu
Z1dpdGhDYW5vbmljYWxNYXBwaW5nXTsKLSAgICB9IGVsc2UgaWYgKGNvY29hVHlwZSkKLSAgICAg
ICAgY29jb2FWYWx1ZSA9IChOU1N0cmluZyAqKXN0cmF0ZWd5LnJlYWRTdHJpbmdGcm9tUGFzdGVi
b2FyZCgwLCBjb2NvYVR5cGUuZ2V0KCksIHBhc3RlYm9hcmROYW1lKTsKKyAgICBhdXRvIHZhbHVl
cyA9IHN0cmF0ZWd5LmFsbFN0cmluZ3NGb3JUeXBlKGNvY29hVHlwZS5nZXQoKSwgcGFzdGVib2Fy
ZE5hbWUpOworICAgIGlmIChbY29jb2FUeXBlIGlzRXF1YWxUb1N0cmluZzooX19icmlkZ2UgTlNT
dHJpbmcgKilrVVRUeXBlUGxhaW5UZXh0XSkgeworICAgICAgICB2YWx1ZXMgPSB2YWx1ZXMubWFw
KFsmXSAoYXV0byYgdmFsdWUpIC0+IFN0cmluZyB7CisgICAgICAgICAgICByZXR1cm4gW3ZhbHVl
IHByZWNvbXBvc2VkU3RyaW5nV2l0aENhbm9uaWNhbE1hcHBpbmddOworICAgICAgICB9KTsKKyAg
ICB9CiAKICAgICAvLyBFbmZvcmNlIGNoYW5nZUNvdW50IG91cnNlbHZlcyBmb3Igc2VjdXJpdHku
IFdlIGNoZWNrIGFmdGVyIHJlYWRpbmcgaW5zdGVhZCBvZiBiZWZvcmUgdG8gYmUKICAgICAvLyBz
dXJlIGl0IGRvZXNuJ3QgY2hhbmdlIGJldHdlZW4gb3VyIHRlc3RpbmcgdGhlIGNoYW5nZSBjb3Vu
dCBhbmQgYWNjZXNzaW5nIHRoZSBkYXRhLgotICAgIGlmIChjb2NvYVZhbHVlICYmIGNoYW5nZUNv
dW50ID09IGNoYW5nZUNvdW50Rm9yUGFzdGVib2FyZChwYXN0ZWJvYXJkTmFtZSkpCi0gICAgICAg
IHJldHVybiBjb2NvYVZhbHVlOworICAgIGlmIChjaGFuZ2VDb3VudCAhPSBjaGFuZ2VDb3VudEZv
clBhc3RlYm9hcmQocGFzdGVib2FyZE5hbWUpKQorICAgICAgICByZXR1cm4geyB9OwogCi0gICAg
cmV0dXJuIFN0cmluZygpOworICAgIHJldHVybiB2YWx1ZXM7CiB9CiAKIHZvaWQgUGFzdGVib2Fy
ZDo6YWRkSFRNTENsaXBib2FyZFR5cGVzRm9yQ29jb2FUeXBlKExpc3RIYXNoU2V0PFN0cmluZz4m
IHJlc3VsdFR5cGVzLCBjb25zdCBTdHJpbmcmIGNvY29hVHlwZSkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9QbGF0Zm9ybVBhc3RlYm9hcmRJT1MubW0gYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9pb3MvUGxhdGZvcm1QYXN0ZWJvYXJkSU9TLm1tCmluZGV4IGUwMjg5
M2VkNmU0YTZiMDFlNzI4MjIxYmY2ZjFkNDE4ZmIyMTU1YjAuLmRhN2Y2MjE3N2FjODU5NjA1MzEw
MWI1Yjg5MTgyZTAyMWE5YjI2ZGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2lvcy9QbGF0Zm9ybVBhc3RlYm9hcmRJT1MubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vaW9zL1BsYXRmb3JtUGFzdGVib2FyZElPUy5tbQpAQCAtNjAzLDYgKzYwMywxOSBAQCBpbnQg
UGxhdGZvcm1QYXN0ZWJvYXJkOjpjb3VudCgpIGNvbnN0CiAgICAgcmV0dXJuIFttX3Bhc3RlYm9h
cmQgbnVtYmVyT2ZJdGVtc107CiB9CiAKK1ZlY3RvcjxTdHJpbmc+IFBsYXRmb3JtUGFzdGVib2Fy
ZDo6YWxsU3RyaW5nc0ZvclR5cGUoY29uc3QgU3RyaW5nJiB0eXBlKSBjb25zdAoreworICAgIGF1
dG8gbnVtYmVyT2ZJdGVtcyA9IGNvdW50KCk7CisgICAgVmVjdG9yPFN0cmluZz4gc3RyaW5nczsK
KyAgICBzdHJpbmdzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobnVtYmVyT2ZJdGVtcyk7CisgICAg
Zm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8IG51bWJlck9mSXRlbXM7ICsraW5kZXgpIHsKKyAg
ICAgICAgU3RyaW5nIHZhbHVlID0gcmVhZFN0cmluZyhpbmRleCwgdHlwZSk7CisgICAgICAgIGlm
ICghdmFsdWUuaXNFbXB0eSgpKQorICAgICAgICAgICAgc3RyaW5ncy51bmNoZWNrZWRBcHBlbmQo
V1RGTW92ZSh2YWx1ZSkpOworICAgIH0KKyAgICByZXR1cm4gc3RyaW5nczsKK30KKwogUmVmUHRy
PFNoYXJlZEJ1ZmZlcj4gUGxhdGZvcm1QYXN0ZWJvYXJkOjpyZWFkQnVmZmVyKGludCBpbmRleCwg
Y29uc3QgU3RyaW5nJiB0eXBlKSBjb25zdAogewogICAgIE5TSW5kZXhTZXQgKmluZGV4U2V0ID0g
W05TSW5kZXhTZXQgaW5kZXhTZXRXaXRoSW5kZXg6aW5kZXhdOwpAQCAtNjE4LDcgKzYzMSw3IEBA
IFN0cmluZyBQbGF0Zm9ybVBhc3RlYm9hcmQ6OnJlYWRTdHJpbmcoaW50IGluZGV4LCBjb25zdCBT
dHJpbmcmIHR5cGUpIGNvbnN0CiB7CiAgICAgaWYgKHR5cGUgPT0gU3RyaW5nKGtVVFR5cGVVUkwp
KSB7CiAgICAgICAgIFN0cmluZyB0aXRsZTsKLSAgICAgICAgcmV0dXJuIHJlYWRVUkwoaW5kZXgs
IHRpdGxlKTsKKyAgICAgICAgcmV0dXJuIFsoTlNVUkwgKilyZWFkVVJMKGluZGV4LCB0aXRsZSkg
YWJzb2x1dGVTdHJpbmddOwogICAgIH0KIAogICAgIE5TSW5kZXhTZXQgKmluZGV4U2V0ID0gW05T
SW5kZXhTZXQgaW5kZXhTZXRXaXRoSW5kZXg6aW5kZXhdOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbWFjL1Bhc3RlYm9hcmRNYWMubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9tYWMvUGFzdGVib2FyZE1hYy5tbQppbmRleCBmZDZlOTI5ODc3NGZhZjRmZTg3MzViZjI3
NTY1YWRjOTUzMmJmNjM2Li4xZGQ2NzZjYzUyOTdlMTM3MjljMmFjMmE5MjI5MGQxMzYyNWE5NTVh
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvUGFzdGVib2FyZE1hYy5t
bQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvUGFzdGVib2FyZE1hYy5tbQpAQCAt
NDg4LDIyICs0ODgsMjYgQEAgdm9pZCBQYXN0ZWJvYXJkOjpjbGVhcihjb25zdCBTdHJpbmcmIHR5
cGUpCiAgICAgbV9jaGFuZ2VDb3VudCA9IHBsYXRmb3JtU3RyYXRlZ2llcygpLT5wYXN0ZWJvYXJk
U3RyYXRlZ3koKS0+c2V0U3RyaW5nRm9yVHlwZShlbXB0eVN0cmluZygpLCBjb2NvYVR5cGUsIG1f
cGFzdGVib2FyZE5hbWUpOwogfQogCi1TdHJpbmcgUGFzdGVib2FyZDo6cmVhZFBsYXRmb3JtVmFs
dWVBc1N0cmluZyhjb25zdCBTdHJpbmcmIGRvbVR5cGUsIGxvbmcgY2hhbmdlQ291bnQsIGNvbnN0
IFN0cmluZyYgcGFzdGVib2FyZE5hbWUpCitWZWN0b3I8U3RyaW5nPiBQYXN0ZWJvYXJkOjpyZWFk
UGxhdGZvcm1WYWx1ZXNBc1N0cmluZ3MoY29uc3QgU3RyaW5nJiBkb21UeXBlLCBsb25nIGNoYW5n
ZUNvdW50LCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lKQogewotICAgIGNvbnN0IFN0cmlu
ZyYgY29jb2FUeXBlID0gY29jb2FUeXBlRnJvbUhUTUxDbGlwYm9hcmRUeXBlKGRvbVR5cGUpOwot
ICAgIFN0cmluZyBjb2NvYVZhbHVlOworICAgIGF1dG8mIHN0cmF0ZWd5ID0gKnBsYXRmb3JtU3Ry
YXRlZ2llcygpLT5wYXN0ZWJvYXJkU3RyYXRlZ3koKTsKKyAgICBhdXRvIGNvY29hVHlwZSA9IGNv
Y29hVHlwZUZyb21IVE1MQ2xpcGJvYXJkVHlwZShkb21UeXBlKTsKKyAgICBpZiAoY29jb2FUeXBl
LmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIHsgfTsKIAotICAgIGlmIChjb2NvYVR5cGUgPT0g
U3RyaW5nKGxlZ2FjeVN0cmluZ1Bhc3RlYm9hcmRUeXBlKCkpKQotICAgICAgICBjb2NvYVZhbHVl
ID0gW3BsYXRmb3JtU3RyYXRlZ2llcygpLT5wYXN0ZWJvYXJkU3RyYXRlZ3koKS0+c3RyaW5nRm9y
VHlwZShjb2NvYVR5cGUsIHBhc3RlYm9hcmROYW1lKSBwcmVjb21wb3NlZFN0cmluZ1dpdGhDYW5v
bmljYWxNYXBwaW5nXTsKLSAgICBlbHNlIGlmICghY29jb2FUeXBlLmlzRW1wdHkoKSkKLSAgICAg
ICAgY29jb2FWYWx1ZSA9IHBsYXRmb3JtU3RyYXRlZ2llcygpLT5wYXN0ZWJvYXJkU3RyYXRlZ3ko
KS0+c3RyaW5nRm9yVHlwZShjb2NvYVR5cGUsIHBhc3RlYm9hcmROYW1lKTsKKyAgICBhdXRvIHZh
bHVlcyA9IHN0cmF0ZWd5LmFsbFN0cmluZ3NGb3JUeXBlKGNvY29hVHlwZSwgcGFzdGVib2FyZE5h
bWUpOworICAgIGlmIChjb2NvYVR5cGUgPT0gU3RyaW5nKGxlZ2FjeVN0cmluZ1Bhc3RlYm9hcmRU
eXBlKCkpKSB7CisgICAgICAgIHZhbHVlcyA9IHZhbHVlcy5tYXAoWyZdIChhdXRvJiB2YWx1ZSkg
LT4gU3RyaW5nIHsKKyAgICAgICAgICAgIHJldHVybiBbdmFsdWUgcHJlY29tcG9zZWRTdHJpbmdX
aXRoQ2Fub25pY2FsTWFwcGluZ107CisgICAgICAgIH0pOworICAgIH0KIAogICAgIC8vIEVuZm9y
Y2UgY2hhbmdlQ291bnQgb3Vyc2VsdmVzIGZvciBzZWN1cml0eS4gIFdlIGNoZWNrIGFmdGVyIHJl
YWRpbmcgaW5zdGVhZCBvZiBiZWZvcmUgdG8gYmUKICAgICAvLyBzdXJlIGl0IGRvZXNuJ3QgY2hh
bmdlIGJldHdlZW4gb3VyIHRlc3RpbmcgdGhlIGNoYW5nZSBjb3VudCBhbmQgYWNjZXNzaW5nIHRo
ZSBkYXRhLgotICAgIGlmICghY29jb2FWYWx1ZS5pc0VtcHR5KCkgJiYgY2hhbmdlQ291bnQgPT0g
cGxhdGZvcm1TdHJhdGVnaWVzKCktPnBhc3RlYm9hcmRTdHJhdGVneSgpLT5jaGFuZ2VDb3VudChw
YXN0ZWJvYXJkTmFtZSkpCi0gICAgICAgIHJldHVybiBjb2NvYVZhbHVlOworICAgIGlmIChjaGFu
Z2VDb3VudCAhPSBwbGF0Zm9ybVN0cmF0ZWdpZXMoKS0+cGFzdGVib2FyZFN0cmF0ZWd5KCktPmNo
YW5nZUNvdW50KHBhc3RlYm9hcmROYW1lKSkKKyAgICAgICAgcmV0dXJuIHsgfTsKIAotICAgIHJl
dHVybiBTdHJpbmcoKTsKKyAgICByZXR1cm4gdmFsdWVzOwogfQogCiBzdGF0aWMgU3RyaW5nIHV0
aVR5cGVGcm9tQ29jb2FUeXBlKGNvbnN0IFN0cmluZyYgdHlwZSkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9QbGF0Zm9ybVBhc3RlYm9hcmRNYWMubW0gYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9tYWMvUGxhdGZvcm1QYXN0ZWJvYXJkTWFjLm1tCmluZGV4IGExOTI1
YmFkYzkzYjZjNzE5MzFlYzk1NDlkOGNkNzJlNjIyZDFkN2UuLmIxZGZmYjZjYjdlNjQyNTc0MWJk
MGM2YzBlNTNiNGVmZGNmZGIxNzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L21hYy9QbGF0Zm9ybVBhc3RlYm9hcmRNYWMubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbWFjL1BsYXRmb3JtUGFzdGVib2FyZE1hYy5tbQpAQCAtMTE2LDYgKzExNiw2OCBAQCBTdHJp
bmcgUGxhdGZvcm1QYXN0ZWJvYXJkOjpzdHJpbmdGb3JUeXBlKGNvbnN0IFN0cmluZyYgcGFzdGVi
b2FyZFR5cGUpIGNvbnN0CiAgICAgcmV0dXJuIFttX3Bhc3RlYm9hcmQgc3RyaW5nRm9yVHlwZTpw
YXN0ZWJvYXJkVHlwZV07CiB9CiAKK3N0YXRpYyBWZWN0b3I8U3RyaW5nPiB1cmxTdHJpbmdzRnJv
bVBhc3RlYm9hcmQoTlNQYXN0ZWJvYXJkICpwYXN0ZWJvYXJkKQoreworICAgIE5TQXJyYXk8TlNQ
YXN0ZWJvYXJkSXRlbSAqPiAqaXRlbXMgPSBwYXN0ZWJvYXJkLnBhc3RlYm9hcmRJdGVtczsKKyAg
ICBWZWN0b3I8U3RyaW5nPiB1cmxTdHJpbmdzOworICAgIHVybFN0cmluZ3MucmVzZXJ2ZUluaXRp
YWxDYXBhY2l0eShpdGVtcy5jb3VudCk7CisgICAgaWYgKGl0ZW1zLmNvdW50ID4gMSkgeworICAg
ICAgICBmb3IgKE5TUGFzdGVib2FyZEl0ZW0gKml0ZW0gaW4gaXRlbXMpIHsKKyAgICAgICAgICAg
IGlmIChpZCBwcm9wZXJ0eUxpc3QgPSBbaXRlbSBwcm9wZXJ0eUxpc3RGb3JUeXBlOihfX2JyaWRn
ZSBOU1N0cmluZyAqKWtVVFR5cGVVUkxdKSB7CisgICAgICAgICAgICAgICAgaWYgKGF1dG8gdXJs
RnJvbUl0ZW0gPSBhZG9wdE5TKFtbTlNVUkwgYWxsb2NdIGluaXRXaXRoUGFzdGVib2FyZFByb3Bl
cnR5TGlzdDpwcm9wZXJ0eUxpc3Qgb2ZUeXBlOihfX2JyaWRnZSBOU1N0cmluZyAqKWtVVFR5cGVV
UkxdKSkKKyAgICAgICAgICAgICAgICAgICAgdXJsU3RyaW5ncy51bmNoZWNrZWRBcHBlbmQoW3Vy
bEZyb21JdGVtIGFic29sdXRlU3RyaW5nXSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICB9IGVsc2UgaWYgKE5TVVJMICp1cmxGcm9tUGFzdGVib2FyZCA9IFtOU1VSTCBVUkxGcm9tUGFz
dGVib2FyZDpwYXN0ZWJvYXJkXSkKKyAgICAgICAgdXJsU3RyaW5ncy51bmNoZWNrZWRBcHBlbmQo
dXJsRnJvbVBhc3RlYm9hcmQuYWJzb2x1dGVTdHJpbmcpOworICAgIGVsc2UgaWYgKE5TU3RyaW5n
ICp1cmxTdHJpbmdGcm9tUGFzdGVib2FyZCA9IFtwYXN0ZWJvYXJkIHN0cmluZ0ZvclR5cGU6bGVn
YWN5VVJMUGFzdGVib2FyZFR5cGUoKV0pCisgICAgICAgIHVybFN0cmluZ3MudW5jaGVja2VkQXBw
ZW5kKHVybFN0cmluZ0Zyb21QYXN0ZWJvYXJkKTsKKworICAgIGJvb2wgbWF5Q29udGFpbkZpbGVz
ID0gcGFzdGVib2FyZE1heUNvbnRhaW5GaWxlUGF0aHMocGFzdGVib2FyZCk7CisgICAgdXJsU3Ry
aW5ncy5yZW1vdmVBbGxNYXRjaGluZyhbJl0gKGF1dG8mIHVybFN0cmluZykgeworICAgICAgICBy
ZXR1cm4gdXJsU3RyaW5nLmlzRW1wdHkoKSB8fCAobWF5Q29udGFpbkZpbGVzICYmICFQYXN0ZWJv
YXJkOjpjYW5FeHBvc2VVUkxUb0RPTVdoZW5QYXN0ZWJvYXJkQ29udGFpbnNGaWxlcyh1cmxTdHJp
bmcpKTsKKyAgICB9KTsKKworICAgIHJldHVybiB1cmxTdHJpbmdzOworfQorCitzdGF0aWMgU3Ry
aW5nIHR5cGVJZGVudGlmaWVyRm9yUGFzdGVib2FyZFR5cGUoY29uc3QgU3RyaW5nJiBwYXN0ZWJv
YXJkVHlwZSkKK3sKKyAgICBpZiAoVVRUeXBlSXNEZWNsYXJlZChwYXN0ZWJvYXJkVHlwZS5jcmVh
dGVDRlN0cmluZygpLmdldCgpKSkKKyAgICAgICAgcmV0dXJuIHBhc3RlYm9hcmRUeXBlOworCisg
ICAgaWYgKHBhc3RlYm9hcmRUeXBlID09IFN0cmluZyhsZWdhY3lTdHJpbmdQYXN0ZWJvYXJkVHlw
ZSgpKSkKKyAgICAgICAgcmV0dXJuIGtVVFR5cGVVVEY4UGxhaW5UZXh0OworCisgICAgaWYgKHBh
c3RlYm9hcmRUeXBlID09IFN0cmluZyhsZWdhY3lIVE1MUGFzdGVib2FyZFR5cGUoKSkpCisgICAg
ICAgIHJldHVybiBrVVRUeXBlSFRNTDsKKworICAgIGlmIChwYXN0ZWJvYXJkVHlwZSA9PSBTdHJp
bmcobGVnYWN5VVJMUGFzdGVib2FyZFR5cGUoKSkpCisgICAgICAgIHJldHVybiBrVVRUeXBlVVJM
OworCisgICAgcmV0dXJuIHsgfTsKK30KKworVmVjdG9yPFN0cmluZz4gUGxhdGZvcm1QYXN0ZWJv
YXJkOjphbGxTdHJpbmdzRm9yVHlwZShjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmRUeXBlKSBjb25z
dAoreworICAgIGF1dG8gdHlwZUlkZW50aWZpZXIgPSB0eXBlSWRlbnRpZmllckZvclBhc3RlYm9h
cmRUeXBlKHBhc3RlYm9hcmRUeXBlKTsKKyAgICBpZiAodHlwZUlkZW50aWZpZXIgPT0gU3RyaW5n
KGtVVFR5cGVVUkwpKQorICAgICAgICByZXR1cm4gdXJsU3RyaW5nc0Zyb21QYXN0ZWJvYXJkKG1f
cGFzdGVib2FyZC5nZXQoKSk7CisKKyAgICBOU0FycmF5PE5TUGFzdGVib2FyZEl0ZW0gKj4gKml0
ZW1zID0gW21fcGFzdGVib2FyZCBwYXN0ZWJvYXJkSXRlbXNdOworICAgIFZlY3RvcjxTdHJpbmc+
IHN0cmluZ3M7CisgICAgc3RyaW5ncy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KGl0ZW1zLmNvdW50
KTsKKyAgICBpZiAoaXRlbXMuY291bnQgPiAxICYmICF0eXBlSWRlbnRpZmllci5pc051bGwoKSkg
eworICAgICAgICBmb3IgKE5TUGFzdGVib2FyZEl0ZW0gKml0ZW0gaW4gaXRlbXMpIHsKKyAgICAg
ICAgICAgIGlmIChOU1N0cmluZyAqc3RyaW5nRnJvbUl0ZW0gPSBbaXRlbSBzdHJpbmdGb3JUeXBl
OnR5cGVJZGVudGlmaWVyXSkKKyAgICAgICAgICAgICAgICBzdHJpbmdzLmFwcGVuZChzdHJpbmdG
cm9tSXRlbSk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgaWYgKE5TU3RyaW5nICpzdHJpbmdGcm9t
UGFzdGVib2FyZCA9IFttX3Bhc3RlYm9hcmQgc3RyaW5nRm9yVHlwZTpwYXN0ZWJvYXJkVHlwZV0p
CisgICAgICAgIHN0cmluZ3MuYXBwZW5kKHN0cmluZ0Zyb21QYXN0ZWJvYXJkKTsKKworICAgIHJl
dHVybiBzdHJpbmdzOworfQorCiBzdGF0aWMgY29uc3QgY2hhciogc2FmZVR5cGVGb3JET01Ub1Jl
YWRBbmRXcml0ZUZvclBsYXRmb3JtVHlwZShjb25zdCBTdHJpbmcmIHBsYXRmb3JtVHlwZSkKIHsK
ICAgICBpZiAocGxhdGZvcm1UeXBlID09IFN0cmluZyhsZWdhY3lTdHJpbmdQYXN0ZWJvYXJkVHlw
ZSgpKSB8fCBwbGF0Zm9ybVR5cGUgPT0gU3RyaW5nKE5TUGFzdGVib2FyZFR5cGVTdHJpbmcpKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvV2ViUGFzdGVib2FyZFBy
b3h5Q29jb2EubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9XZWJQYXN0ZWJvYXJk
UHJveHlDb2NvYS5tbQppbmRleCBjOTkyNDQwNGZlYmIwOWFlMDE3YjEwY2U5YzVmODgyYTU5MzEy
NzA5Li5hZTY0NzA3ZGExNTFjMjJiYzM4MzlkYWI0YWY3ZTc0MDE0ZTAyMjBlIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9XZWJQYXN0ZWJvYXJkUHJveHlDb2NvYS5t
bQorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9XZWJQYXN0ZWJvYXJkUHJveHlD
b2NvYS5tbQpAQCAtNzAsNiArNzAsMTEgQEAgdm9pZCBXZWJQYXN0ZWJvYXJkUHJveHk6OmdldFBh
c3RlYm9hcmRTdHJpbmdGb3JUeXBlKGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUKICAgICBz
dHJpbmcgPSBQbGF0Zm9ybVBhc3RlYm9hcmQocGFzdGVib2FyZE5hbWUpLnN0cmluZ0ZvclR5cGUo
cGFzdGVib2FyZFR5cGUpOwogfQogCit2b2lkIFdlYlBhc3RlYm9hcmRQcm94eTo6Z2V0UGFzdGVi
b2FyZFN0cmluZ3NGb3JUeXBlKGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUsIGNvbnN0IFN0
cmluZyYgcGFzdGVib2FyZFR5cGUsIFZlY3RvcjxTdHJpbmc+JiBzdHJpbmdzKQoreworICAgIHN0
cmluZ3MgPSBQbGF0Zm9ybVBhc3RlYm9hcmQocGFzdGVib2FyZE5hbWUpLmFsbFN0cmluZ3NGb3JU
eXBlKHBhc3RlYm9hcmRUeXBlKTsKK30KKwogdm9pZCBXZWJQYXN0ZWJvYXJkUHJveHk6OmdldFBh
c3RlYm9hcmRCdWZmZXJGb3JUeXBlKGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUsIGNvbnN0
IFN0cmluZyYgcGFzdGVib2FyZFR5cGUsIFNoYXJlZE1lbW9yeTo6SGFuZGxlJiBoYW5kbGUsIHVp
bnQ2NF90JiBzaXplKQogewogICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+IGJ1ZmZlciA9IFBsYXRm
b3JtUGFzdGVib2FyZChwYXN0ZWJvYXJkTmFtZSkuYnVmZmVyRm9yVHlwZShwYXN0ZWJvYXJkVHlw
ZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYXN0ZWJvYXJkUHJv
eHkuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhc3RlYm9hcmRQcm94eS5oCmluZGV4
IGU1ZWMyMDkzMjdkYTA3NjBlODJjYjQ0YWU4MzM5ZmRiZDE5MTA1ZWIuLjNhZTI2MDNlYWVkMjI2
ZWNlY2ExZjQ0MmI0MjhmZTdhZGY2MjFlMzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL1dlYlBhc3RlYm9hcmRQcm94eS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L1dlYlBhc3RlYm9hcmRQcm94eS5oCkBAIC04Nyw2ICs4Nyw3IEBAIHByaXZhdGU6CiAgICAgdm9p
ZCBnZXRQYXN0ZWJvYXJkVHlwZXMoY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSwgVmVjdG9y
PFN0cmluZz4mIHBhc3RlYm9hcmRUeXBlcyk7CiAgICAgdm9pZCBnZXRQYXN0ZWJvYXJkUGF0aG5h
bWVzRm9yVHlwZShJUEM6OkNvbm5lY3Rpb24mLCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1l
LCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmRUeXBlLCBWZWN0b3I8U3RyaW5nPiYgcGF0aG5hbWVz
LCBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGVBcnJheSYpOwogICAgIHZvaWQgZ2V0UGFzdGVib2Fy
ZFN0cmluZ0ZvclR5cGUoY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSwgY29uc3QgU3RyaW5n
JiBwYXN0ZWJvYXJkVHlwZSwgU3RyaW5nJik7CisgICAgdm9pZCBnZXRQYXN0ZWJvYXJkU3RyaW5n
c0ZvclR5cGUoY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSwgY29uc3QgU3RyaW5nJiBwYXN0
ZWJvYXJkVHlwZSwgVmVjdG9yPFN0cmluZz4mKTsKICAgICB2b2lkIGdldFBhc3RlYm9hcmRCdWZm
ZXJGb3JUeXBlKGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUsIGNvbnN0IFN0cmluZyYgcGFz
dGVib2FyZFR5cGUsIFNoYXJlZE1lbW9yeTo6SGFuZGxlJiwgdWludDY0X3QmIHNpemUpOwogICAg
IHZvaWQgcGFzdGVib2FyZENvcHkoY29uc3QgU3RyaW5nJiBmcm9tUGFzdGVib2FyZCwgY29uc3Qg
U3RyaW5nJiB0b1Bhc3RlYm9hcmQsIHVpbnQ2NF90JiBuZXdDaGFuZ2VDb3VudCk7CiAgICAgdm9p
ZCBnZXRQYXN0ZWJvYXJkQ2hhbmdlQ291bnQoY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSwg
dWludDY0X3QmIGNoYW5nZUNvdW50KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL1dlYlBhc3RlYm9hcmRQcm94eS5tZXNzYWdlcy5pbiBiL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL1dlYlBhc3RlYm9hcmRQcm94eS5tZXNzYWdlcy5pbgppbmRleCBiOTJjYjgxYjZhNjZlMDFi
MTA3ODhjOWEyY2Y2MjVjYjVmYzhlZWNkLi41ZGQ2OTg4YjkxMzExZmMzMzg2MGY3MjIyMDVmZTAy
ZmQ3NmJkODg4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYXN0ZWJv
YXJkUHJveHkubWVzc2FnZXMuaW4KKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFz
dGVib2FyZFByb3h5Lm1lc3NhZ2VzLmluCkBAIC00NSw2ICs0NSw3IEBAIG1lc3NhZ2VzIC0+IFdl
YlBhc3RlYm9hcmRQcm94eSB7CiAgICAgR2V0UGFzdGVib2FyZFR5cGVzKFN0cmluZyBwYXN0ZWJv
YXJkTmFtZSkgLT4gKFZlY3RvcjxTdHJpbmc+IHR5cGVzKQogICAgIEdldFBhc3RlYm9hcmRQYXRo
bmFtZXNGb3JUeXBlKFN0cmluZyBwYXN0ZWJvYXJkTmFtZSwgU3RyaW5nIHBhc3RlYm9hcmRUeXBl
KSAtPiAoVmVjdG9yPFN0cmluZz4gcGF0aG5hbWVzLCBXZWJLaXQ6OlNhbmRib3hFeHRlbnNpb246
OkhhbmRsZUFycmF5IHNhbmRib3hFeHRlbnNpb25zKSBXYW50c0Nvbm5lY3Rpb24KICAgICBHZXRQ
YXN0ZWJvYXJkU3RyaW5nRm9yVHlwZShTdHJpbmcgcGFzdGVib2FyZE5hbWUsIFN0cmluZyBwYXN0
ZWJvYXJkVHlwZSkgLT4gKFN0cmluZyBzdHJpbmcpCisgICAgR2V0UGFzdGVib2FyZFN0cmluZ3NG
b3JUeXBlKFN0cmluZyBwYXN0ZWJvYXJkTmFtZSwgU3RyaW5nIHBhc3RlYm9hcmRUeXBlKSAtPiAo
VmVjdG9yPFN0cmluZz4gc3RyaW5ncykKICAgICBHZXRQYXN0ZWJvYXJkQnVmZmVyRm9yVHlwZShT
dHJpbmcgcGFzdGVib2FyZE5hbWUsIFN0cmluZyBwYXN0ZWJvYXJkVHlwZSkgLT4gKFdlYktpdDo6
U2hhcmVkTWVtb3J5OjpIYW5kbGUgaGFuZGxlLCB1aW50NjRfdCBzaXplKQogICAgIFBhc3RlYm9h
cmRDb3B5KFN0cmluZyBmcm9tUGFzdGVib2FyZCwgU3RyaW5nIHRvUGFzdGVib2FyZCkgLT4gKHVp
bnQ2NF90IGNoYW5nZUNvdW50KQogICAgIEdldFBhc3RlYm9hcmRDaGFuZ2VDb3VudChTdHJpbmcg
cGFzdGVib2FyZE5hbWUpIC0+ICh1aW50NjRfdCBjaGFuZ2VDb3VudCkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJQbGF0Zm9ybVN0cmF0ZWdp
ZXMuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYlBsYXRm
b3JtU3RyYXRlZ2llcy5jcHAKaW5kZXggNzYwMmY1Yzk0YjJlNTVmZDI3MDVhNWQ1NmZjNjA1MTlj
OTQ0ZGJmMy4uMjQzMjk4ZTA0N2I4ZTIzYzE4NjQyMWFiMTU1MjEwYWJmNjk0M2E3MyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYlBsYXRmb3Jt
U3RyYXRlZ2llcy5jcHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBw
b3J0L1dlYlBsYXRmb3JtU3RyYXRlZ2llcy5jcHAKQEAgLTIwNyw2ICsyMDcsMTMgQEAgU3RyaW5n
IFdlYlBsYXRmb3JtU3RyYXRlZ2llczo6c3RyaW5nRm9yVHlwZShjb25zdCBTdHJpbmcmIHBhc3Rl
Ym9hcmRUeXBlLCBjb25zdAogICAgIHJldHVybiB2YWx1ZTsKIH0KIAorVmVjdG9yPFN0cmluZz4g
V2ViUGxhdGZvcm1TdHJhdGVnaWVzOjphbGxTdHJpbmdzRm9yVHlwZShjb25zdCBTdHJpbmcmIHBh
c3RlYm9hcmRUeXBlLCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lKQoreworICAgIFZlY3Rv
cjxTdHJpbmc+IHZhbHVlczsKKyAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQcm9j
ZXNzQ29ubmVjdGlvbigpLT5zZW5kU3luYyhNZXNzYWdlczo6V2ViUGFzdGVib2FyZFByb3h5OjpH
ZXRQYXN0ZWJvYXJkU3RyaW5nc0ZvclR5cGUocGFzdGVib2FyZE5hbWUsIHBhc3RlYm9hcmRUeXBl
KSwgTWVzc2FnZXM6OldlYlBhc3RlYm9hcmRQcm94eTo6R2V0UGFzdGVib2FyZFN0cmluZ3NGb3JU
eXBlOjpSZXBseSh2YWx1ZXMpLCAwKTsKKyAgICByZXR1cm4gdmFsdWVzOworfQorCiBsb25nIFdl
YlBsYXRmb3JtU3RyYXRlZ2llczo6Y2hhbmdlQ291bnQoY29uc3QgV1RGOjpTdHJpbmcgJnBhc3Rl
Ym9hcmROYW1lKQogewogICAgIHVpbnQ2NF90IGNoYW5nZUNvdW50IHsgMCB9OwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYlBsYXRmb3JtU3Ry
YXRlZ2llcy5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYlBs
YXRmb3JtU3RyYXRlZ2llcy5oCmluZGV4IDU5MWQ3OGZjZGQwOWU5MGEwY2FkNWMxMTBiMzViZGE2
MjgyMzljMzYuLjZlZWMwOWIxZWQyMmI5YWQwNjhlM2Y2OTI0YjU5MjU3NDUxNWQxNDYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJQbGF0Zm9y
bVN0cmF0ZWdpZXMuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBv
cnQvV2ViUGxhdGZvcm1TdHJhdGVnaWVzLmgKQEAgLTc2LDYgKzc2LDcgQEAgcHJpdmF0ZToKICAg
ICBSZWZQdHI8V2ViQ29yZTo6U2hhcmVkQnVmZmVyPiBidWZmZXJGb3JUeXBlKGNvbnN0IFN0cmlu
ZyYgcGFzdGVib2FyZFR5cGUsIGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUpIG92ZXJyaWRl
OwogICAgIHZvaWQgZ2V0UGF0aG5hbWVzRm9yVHlwZShWZWN0b3I8U3RyaW5nPiYgcGF0aG5hbWVz
LCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmRUeXBlLCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmRO
YW1lKSBvdmVycmlkZTsKICAgICBTdHJpbmcgc3RyaW5nRm9yVHlwZShjb25zdCBTdHJpbmcmIHBh
c3RlYm9hcmRUeXBlLCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lKSBvdmVycmlkZTsKKyAg
ICBWZWN0b3I8U3RyaW5nPiBhbGxTdHJpbmdzRm9yVHlwZShjb25zdCBTdHJpbmcmIHBhc3RlYm9h
cmRUeXBlLCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lKSBvdmVycmlkZTsKICAgICBsb25n
IGNoYW5nZUNvdW50KGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUpIG92ZXJyaWRlOwogICAg
IFN0cmluZyB1bmlxdWVOYW1lKCkgb3ZlcnJpZGU7CiAgICAgV2ViQ29yZTo6Q29sb3IgY29sb3Io
Y29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSkgb3ZlcnJpZGU7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0TGVnYWN5L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJQbGF0Zm9ybVN0cmF0ZWdpZXMu
aCBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYlBsYXRmb3JtU3Ry
YXRlZ2llcy5oCmluZGV4IGE4ZDk2MjYzNDk0YThmMTJhODUxNjA5MmQ2M2Q2Mzc3YjI1YzFkYjku
LjczOWM5NTFmNmJkN2ZmNTVmMjk5MmFkZmYzYTUwOWE2Y2UxMDA1OTQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYlBsYXRmb3JtU3RyYXRlZ2ll
cy5oCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYlBsYXRm
b3JtU3RyYXRlZ2llcy5oCkBAIC03Niw2ICs3Niw3IEBAIHByaXZhdGU6CiAgICAgUmVmUHRyPFdl
YkNvcmU6OlNoYXJlZEJ1ZmZlcj4gYnVmZmVyRm9yVHlwZShjb25zdCBTdHJpbmcmIHBhc3RlYm9h
cmRUeXBlLCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lKSBvdmVycmlkZTsKICAgICB2b2lk
IGdldFBhdGhuYW1lc0ZvclR5cGUoVmVjdG9yPFN0cmluZz4mIHBhdGhuYW1lcywgY29uc3QgU3Ry
aW5nJiBwYXN0ZWJvYXJkVHlwZSwgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSkgb3ZlcnJp
ZGU7CiAgICAgU3RyaW5nIHN0cmluZ0ZvclR5cGUoY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkVHlw
ZSwgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSkgb3ZlcnJpZGU7CisgICAgVmVjdG9yPFN0
cmluZz4gYWxsU3RyaW5nc0ZvclR5cGUoY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkVHlwZSwgY29u
c3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSkgb3ZlcnJpZGU7CiAgICAgbG9uZyBjaGFuZ2VDb3Vu
dChjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lKSBvdmVycmlkZTsKICAgICBTdHJpbmcgdW5p
cXVlTmFtZSgpIG92ZXJyaWRlOwogICAgIFdlYkNvcmU6OkNvbG9yIGNvbG9yKGNvbnN0IFN0cmlu
ZyYgcGFzdGVib2FyZE5hbWUpIG92ZXJyaWRlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExl
Z2FjeS9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViUGxhdGZvcm1TdHJhdGVnaWVzLm1tIGIvU291cmNl
L1dlYktpdExlZ2FjeS9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViUGxhdGZvcm1TdHJhdGVnaWVzLm1t
CmluZGV4IDlkNTc4YTBiOTU3ZjI2MTMxMDY4ODY1Mjg0MWRjZjllY2I3NTQyNzAuLmJkNzU4MWZh
NTA0ODFjOTg5N2M5YTFmY2RkMzIxOTBmNjdmMDZiNDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXRMZWdhY3kvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYlBsYXRmb3JtU3RyYXRlZ2llcy5tbQorKysg
Yi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJQbGF0Zm9ybVN0cmF0
ZWdpZXMubW0KQEAgLTEyMyw2ICsxMjMsMTEgQEAgdm9pZCBXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6
OmdldFBhdGhuYW1lc0ZvclR5cGUoVmVjdG9yPFN0cmluZz4mIHBhdGhuYW1lcywgY29uc3QKICAg
ICBQbGF0Zm9ybVBhc3RlYm9hcmQocGFzdGVib2FyZE5hbWUpLmdldFBhdGhuYW1lc0ZvclR5cGUo
cGF0aG5hbWVzLCBwYXN0ZWJvYXJkVHlwZSk7CiB9CiAKK1ZlY3RvcjxTdHJpbmc+IFdlYlBsYXRm
b3JtU3RyYXRlZ2llczo6YWxsU3RyaW5nc0ZvclR5cGUoY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJk
VHlwZSwgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSkKK3sKKyAgICByZXR1cm4gUGxhdGZv
cm1QYXN0ZWJvYXJkKHBhc3RlYm9hcmROYW1lKS5hbGxTdHJpbmdzRm9yVHlwZShwYXN0ZWJvYXJk
VHlwZSk7Cit9CisKIFN0cmluZyBXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6OnN0cmluZ0ZvclR5cGUo
Y29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkVHlwZSwgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFt
ZSkKIHsKICAgICByZXR1cm4gUGxhdGZvcm1QYXN0ZWJvYXJkKHBhc3RlYm9hcmROYW1lKS5zdHJp
bmdGb3JUeXBlKHBhc3RlYm9hcmRUeXBlKTsKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBi
L1Rvb2xzL0NoYW5nZUxvZwppbmRleCA3ZDg5OGQ0MTRjZTY4ZjgxYTIzZTNiZDIxNTZmNzVkM2Uy
MzBlOTM4Li5lMGQ3NWNlMzE2Mjk0NjVhMDczYmJmZjZjNTBlNTk3MzIzMjU5OGRjIDEwMDY0NAot
LS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDAg
QEAKKzIwMTgtMDktMDMgIFdlbnNvbiBIc2llaCAgPHdlbnNvbl9oc2llaEBhcHBsZS5jb20+CisK
KyAgICAgICAgUG9wdWxhdGUgInRleHQvdXJpLWxpc3QiIHdpdGggbXVsdGlwbGUgVVJMcyB3aGVu
IHRoZSBwYXN0ZWJvYXJkIGNvbnRhaW5zIG11bHRpcGxlIFVSTHMKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4ODg5MAorICAgICAgICA8cmRhcjovL3By
b2JsZW0vNDM2NDg2MDU+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgVGltIEhvcnRvbi4KKworICAg
ICAgICAqIER1bXBSZW5kZXJUcmVlL21hYy9EdW1wUmVuZGVyVHJlZVBhc3RlYm9hcmQubW06Cisg
ICAgICAgICgtW0xvY2FsUGFzdGVib2FyZCBwYXN0ZWJvYXJkSXRlbXNdKToKKworICAgICAgICBJ
bXBsZW1lbnQgdGhpcyBtZXRob2QgdG8gYXZvaWQgY3Jhc2hpbmcgd2hlbiBydW5uaW5nIGxheW91
dCB0ZXN0cyB0aGF0IGFjY2VzcyB0aGUgcGFzdGVib2FyZC4KKworICAgICAgICAqIFRlc3RXZWJL
aXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvRHJhZ0FuZERyb3BUZXN0cy5tbToKKworICAgICAgICBB
ZGQgYSB0ZXN0IHRvIHZlcmlmeSB0aGF0IG9uIG1hY09TIGFuZCBpT1MsIG11bHRpcGxlIFVSTHMg
ZHJvcHBlZCBvbnRvIHRoZSBwYWdlIGFyZSBhY2Nlc3NpYmxlIHZpYQorICAgICAgICAidGV4dC91
cmktbGlzdCIuCisKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1Bh
c3RlTWl4ZWRDb250ZW50Lm1tOgorCisgICAgICAgIEFkZCBhIHRlc3QgdGhhdCBleGVyY2lzZXMg
NSBkaWZmZXJlbnQgd2F5cyB0byB3cml0ZSBvbmUgb3IgbW9yZSBVUkxzIHRvIHRoZSBwYXN0ZWJv
YXJkIG9uIG1hY09TOyBpbiBhbGwgY2FzZXMsCisgICAgICAgIHRoZSBVUkxzIHdyaXR0ZW4gdG8g
dGhlIHBhc3RlYm9hcmQgc2hvdWxkIGJlIGV4cG9zZWQgdG8gdGhlIHBhZ2UgdmlhICJ0ZXh0L3Vy
aS1saXN0Ii4gSW4gYWxsIG9mIHRoZXNlIGRpZmZlcmVudAorICAgICAgICBjYXNlcywgdGhlIHJl
c3VsdHMgb2YgdXNpbmcgYC1bTlNQYXN0ZWJvYXJkSXRlbSBzdHJpbmdGb3JUeXBlOl1gLCBgLVtO
U1VSTCBVUkxGcm9tUGFzdGVib2FyZDpdYCBhbmQKKyAgICAgICAgYC1bTlNQYXN0ZWJvYXJkIHN0
cmluZ0ZvclR5cGU6XWAgd2lsbCB5aWVsZCBkaWZmZXJlbnQgcmVzdWx0cywgc28gdGhlIHB1cnBv
c2Ugb2YgdGhpcyBBUEkgdGVzdCBpcyB0byBlbnN1cmUgdGhhdAorICAgICAgICBvdXIgbG9naWMg
Zm9yIGdyYWJiaW5nIGEgbGlzdCBvZiBVUkxzIGZyb20gdGhlIHBhc3RlYm9hcmQgb24gbWFjT1Mg
aXMgcm9idXN0IGVub3VnaCB0byBoYW5kbGUgYWxsIG9mIHRoZXNlCisgICAgICAgIGRpZmZlcmVu
dCBiZWhhdmlvcnMuCisKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL2lvcy9VSVBhc3Rl
Ym9hcmRUZXN0cy5tbToKKworICAgICAgICBBZGQgYSB0ZXN0IHRvIHZlcmlmeSB0aGF0IG9uIGlP
UywgdXNpbmcgYC1bVUlQYXN0ZWJvYXJkIHNldFVSTHM6XWAgdG8gd3JpdGUgdG8gbXVsdGlwbGUg
VVJMcyB0byB0aGUgcGFzdGVib2FyZAorICAgICAgICBhbmQgdGhlbiBwYXN0aW5nIHJlc3VsdHMg
aW4gInRleHQvdXJpLWxpc3QiIGV4cG9zaW5nIGEgbGlzdCBvZiBhbGwgdGhlIFVSTHMgd3JpdHRl
biB0byB0aGUgcGFzdGVib2FyZC4KKworICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvbWFjL1dl
YktpdFRlc3RSdW5uZXJQYXN0ZWJvYXJkLm1tOgorICAgICAgICAoLVtMb2NhbFBhc3RlYm9hcmQg
cGFzdGVib2FyZEl0ZW1zXSk6CisKKyAgICAgICAgSW1wbGVtZW50IHRoaXMgbWV0aG9kIHRvIGF2
b2lkIGNyYXNoaW5nIHdoZW4gcnVubmluZyBsYXlvdXQgdGVzdHMgdGhhdCBhY2Nlc3MgdGhlIHBh
c3RlYm9hcmQuCisKIDIwMTgtMDgtMzEgIEFkaXR5YSBLZWVydGhpICA8YWtlZXJ0aGlAYXBwbGUu
Y29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIGFkZCBhbiBhbHRlcm5hdGUgZW1haWwgZm9yIEFk
aXR5YSBLZWVydGhpLgpkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL0R1bXBS
ZW5kZXJUcmVlUGFzdGVib2FyZC5tbSBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9EdW1wUmVu
ZGVyVHJlZVBhc3RlYm9hcmQubW0KaW5kZXggY2RkMzFiM2JiYjM1YmI4NjI1MGZlZmMwY2FiZjFj
NTVjMzQxYmNhZS4uYWUyOWE5NDQyMGU3MmU4NDE0NGM1MDYxZjNiMGM3MzFkZGNkOTQ1OSAxMDA2
NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL0R1bXBSZW5kZXJUcmVlUGFzdGVib2Fy
ZC5tbQorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9tYWMvRHVtcFJlbmRlclRyZWVQYXN0ZWJv
YXJkLm1tCkBAIC0yMzcsNiArMjM3LDE3IEBAIHN0YXRpYyBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+
IHRvVVRJKE5TU3RyaW5nICp0eXBlKQogICAgIHJldHVybiBZRVM7CiB9CiAKKy0gKE5TQXJyYXk8
TlNQYXN0ZWJvYXJkSXRlbSAqPiAqKXBhc3RlYm9hcmRJdGVtcworeworICAgIGF1dG8gaXRlbSA9
IGFkb3B0TlMoW1tOU1Bhc3RlYm9hcmRJdGVtIGFsbG9jXSBpbml0XSk7CisgICAgZm9yIChhdXRv
IHR5cGVBbmREYXRhIDogX2RhdGEpIHsKKyAgICAgICAgTlNEYXRhICpkYXRhID0gKF9fYnJpZGdl
IE5TRGF0YSAqKXR5cGVBbmREYXRhLnZhbHVlLmdldCgpOworICAgICAgICBOU1N0cmluZyAqdHlw
ZSA9IChfX2JyaWRnZSBOU1N0cmluZyAqKXR5cGVBbmREYXRhLmtleS5nZXQoKTsKKyAgICAgICAg
W2l0ZW0gc2V0RGF0YTpkYXRhIGZvclR5cGU6dHlwZV07CisgICAgfQorICAgIHJldHVybiBAWyBp
dGVtLmdldCgpIF07Cit9CisKIEBlbmQKIAogI2VuZGlmIC8vIFBMQVRGT1JNKE1BQykKZGlmZiAt
LWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvRHJhZ0FuZERyb3BU
ZXN0cy5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvRHJhZ0FuZERy
b3BUZXN0cy5tbQppbmRleCAxNWU0MTQ4ZmRhNDcwN2JkNTJlODIzNjc3NTFlOTM2YzIzOTI2YTBm
Li45NGI1ZjcwOGU5NjcwNGI5MDAzMTE3ZTU0ZGU2YzU1YTAwNDBjOGYzIDEwMDY0NAotLS0gYS9U
b29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0RyYWdBbmREcm9wVGVzdHMubW0K
KysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9EcmFnQW5kRHJvcFRl
c3RzLm1tCkBAIC00Myw2ICs0MywzNyBAQCBURVNUKERyYWdBbmREcm9wVGVzdHMsIERyYWdJbWFn
ZUxvY2F0aW9uRm9yTGlua0luU3ViZnJhbWUpCiAjZW5kaWYKIH0KIAorVEVTVChEcmFnQW5kRHJv
cFRlc3RzLCBFeHBvc2VNdWx0aXBsZVVSTHNJbkRhdGFUcmFuc2ZlcikKK3sKKyAgICBhdXRvIHNp
bXVsYXRvciA9IGFkb3B0TlMoW1tEcmFnQW5kRHJvcFNpbXVsYXRvciBhbGxvY10gaW5pdFdpdGhX
ZWJWaWV3RnJhbWU6Q0dSZWN0TWFrZSgwLCAwLCAzMjAsIDUwMCldKTsKKyAgICBhdXRvIHdlYlZp
ZXcgPSBbc2ltdWxhdG9yIHdlYlZpZXddOworICAgIFt3ZWJWaWV3IHN5bmNocm9ub3VzbHlMb2Fk
VGVzdFBhZ2VOYW1lZDpAIkRhdGFUcmFuc2ZlciJdOworCisgICAgTlNTdHJpbmcgKnN0cmluZ0Rh
dGEgPSBAIkhlbGxvIHdvcmxkIjsKKyAgICBOU1VSTCAqZmlyc3RVUkwgPSBbTlNVUkwgVVJMV2l0
aFN0cmluZzpAImh0dHBzOi8vd2Via2l0Lm9yZy8iXTsKKyAgICBOU1VSTCAqc2Vjb25kVVJMID0g
W05TVVJMIFVSTFdpdGhTdHJpbmc6QCJodHRwczovL2FwcGxlLmNvbS8iXTsKKworI2lmIFBMQVRG
T1JNKE1BQykKKyAgICBOU1Bhc3RlYm9hcmQgKnBhc3RlYm9hcmQgPSBbTlNQYXN0ZWJvYXJkIHBh
c3RlYm9hcmRXaXRoVW5pcXVlTmFtZV07CisgICAgW3Bhc3RlYm9hcmQgd3JpdGVPYmplY3RzOkBb
IHN0cmluZ0RhdGEsIGZpcnN0VVJMLCBzZWNvbmRVUkwgXV07CisgICAgW3NpbXVsYXRvciBzZXRF
eHRlcm5hbERyYWdQYXN0ZWJvYXJkOnBhc3RlYm9hcmRdOworI2Vsc2UKKyAgICBhdXRvIHN0cmlu
Z0l0ZW0gPSBhZG9wdE5TKFtbTlNJdGVtUHJvdmlkZXIgYWxsb2NdIGluaXRXaXRoT2JqZWN0OnN0
cmluZ0RhdGFdKTsKKyAgICBhdXRvIGZpcnN0VVJMSXRlbSA9IGFkb3B0TlMoW1tOU0l0ZW1Qcm92
aWRlciBhbGxvY10gaW5pdFdpdGhPYmplY3Q6Zmlyc3RVUkxdKTsKKyAgICBhdXRvIHNlY29uZFVS
TEl0ZW0gPSBhZG9wdE5TKFtbTlNJdGVtUHJvdmlkZXIgYWxsb2NdIGluaXRXaXRoT2JqZWN0OnNl
Y29uZFVSTF0pOworICAgIGZvciAoTlNJdGVtUHJvdmlkZXIgKml0ZW0gaW4gQFsgc3RyaW5nSXRl
bS5nZXQoKSwgZmlyc3RVUkxJdGVtLmdldCgpLCBzZWNvbmRVUkxJdGVtLmdldCgpIF0pCisgICAg
ICAgIGl0ZW0ucHJlZmVycmVkUHJlc2VudGF0aW9uU3R5bGUgPSBVSVByZWZlcnJlZFByZXNlbnRh
dGlvblN0eWxlSW5saW5lOworICAgIFtzaW11bGF0b3Igc2V0RXh0ZXJuYWxJdGVtUHJvdmlkZXJz
OkBbIHN0cmluZ0l0ZW0uZ2V0KCksIGZpcnN0VVJMSXRlbS5nZXQoKSwgc2Vjb25kVVJMSXRlbS5n
ZXQoKSBdXTsKKyNlbmRpZgorCisgICAgW3NpbXVsYXRvciBydW5Gcm9tOkNHUG9pbnRNYWtlKDAs
IDApIHRvOkNHUG9pbnRNYWtlKDEwMCwgMTAwKV07CisKKyAgICBFWFBFQ1RfV0tfU1RSRVEoInRl
eHQvcGxhaW4sIHRleHQvdXJpLWxpc3QiLCBbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZh
U2NyaXB0OkAidHlwZXMudGV4dENvbnRlbnQiXSk7CisgICAgRVhQRUNUX1dLX1NUUkVRKCIoU1RS
SU5HLCB0ZXh0L3BsYWluKSwgKFNUUklORywgdGV4dC91cmktbGlzdCkiLCBbd2ViVmlldyBzdHJp
bmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAiaXRlbXMudGV4dENvbnRlbnQiXSk7CisgICAgRVhQ
RUNUX1dLX1NUUkVRKCJIZWxsbyB3b3JsZCIsIFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0ph
dmFTY3JpcHQ6QCJ0ZXh0RGF0YS50ZXh0Q29udGVudCJdKTsKKyAgICBFWFBFQ1RfV0tfU1RSRVEo
Imh0dHBzOi8vd2Via2l0Lm9yZy9cbmh0dHBzOi8vYXBwbGUuY29tLyIsIFt3ZWJWaWV3IHN0cmlu
Z0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJ1cmxEYXRhLnRleHRDb250ZW50Il0pOworfQorCiAj
aWYgRU5BQkxFKElOUFVUX1RZUEVfQ09MT1IpCiAKIFRFU1QoRHJhZ0FuZERyb3BUZXN0cywgQ29s
b3JJbnB1dFRvQ29sb3JJbnB1dCkKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVz
dHMvV2ViS2l0Q29jb2EvUGFzdGVNaXhlZENvbnRlbnQubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dlYktpdENvY29hL1Bhc3RlTWl4ZWRDb250ZW50Lm1tCmluZGV4IGM1ZTUwZTJkYWI3
ODNjNDA2Yzk0YWVmZTBiMGQzYmY2OWVjZDJhZjAuLjcxMzJhMmVjOWM2OTNlNmVjY2UxNTJiNDU5
YjNkOGJmODNkYzc0YmIgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2Vi
S2l0Q29jb2EvUGFzdGVNaXhlZENvbnRlbnQubW0KKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9U
ZXN0cy9XZWJLaXRDb2NvYS9QYXN0ZU1peGVkQ29udGVudC5tbQpAQCAtMjU1LDYgKzI1NSw1MCBA
QCBURVNUKFBhc3RlTWl4ZWRDb250ZW50LCBQYXN0ZVVSTFdyaXR0ZW5Ub1Bhc3RlYm9hcmRVc2lu
Z1dyaXRlT2JqZWN0cykKICAgICBFWFBFQ1RfV0tfU1RSRVEoW3dlYlZpZXcgc3RyaW5nQnlFdmFs
dWF0aW5nSmF2YVNjcmlwdDpAImRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ2EnKS50ZXh0Q29udGVu
dCJdLCB1cmxUb0NvcHkpOwogfQogCitURVNUKFBhc3RlTWl4ZWRDb250ZW50LCBQYXN0ZU9uZU9y
TW9yZVVSTHMpCit7CisgICAgTlNVUkwgKmFwcGxlVVJMID0gW05TVVJMIFVSTFdpdGhTdHJpbmc6
QCJodHRwczovL3d3dy5hcHBsZS5jb20vIl07CisgICAgTlNVUkwgKndlYktpdFVSTCA9IFtOU1VS
TCBVUkxXaXRoU3RyaW5nOkAiaHR0cHM6Ly93ZWJraXQub3JnLyJdOworCisgICAgYXV0byB3ZWJW
aWV3ID0gc2V0VXBXZWJWaWV3KCk7CisgICAgYXV0byBydW5UZXN0ID0gW3dlYlZpZXddIChOU1N0
cmluZyAqZGVzY3JpcHRpb24sIE5TU3RyaW5nICpleHBlY3RlZFVSTFN0cmluZywgRnVuY3Rpb248
dm9pZChOU1Bhc3RlYm9hcmQgKik+JiYgd3JpdGVVUkxzVG9QYXN0ZWJvYXJkKSB7CisgICAgICAg
IE5TUGFzdGVib2FyZCAqcGFzdGVib2FyZCA9IFtOU1Bhc3RlYm9hcmQgZ2VuZXJhbFBhc3RlYm9h
cmRdOworCisgICAgICAgIFtwYXN0ZWJvYXJkIGNsZWFyQ29udGVudHNdOworICAgICAgICB3cml0
ZVVSTHNUb1Bhc3RlYm9hcmQocGFzdGVib2FyZCk7CisgICAgICAgIFt3ZWJWaWV3IHN0cmluZ0J5
RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJyZXNldCgpOyBkb2N1bWVudC5ib2R5LmZvY3VzKCkiXTsK
KyAgICAgICAgW3dlYlZpZXcgcGFzdGU6bmlsXTsKKworICAgICAgICBFWFBFQ1RfV0tfU1RSRVEo
ZXhwZWN0ZWRVUkxTdHJpbmcsIFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6
QCJ1cmxEYXRhLnRleHRDb250ZW50Il0pOworICAgICAgICBFWFBFQ1RfV0tfU1RSRVEoIihTVFJJ
TkcsIHRleHQvdXJpLWxpc3QpIiwgW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlw
dDpAIml0ZW1zLnRleHRDb250ZW50Il0pOworICAgICAgICBFWFBFQ1RfV0tfU1RSRVEoInRleHQv
dXJpLWxpc3QiLCBbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAidHlwZXMu
dGV4dENvbnRlbnQiXSk7CisgICAgfTsKKworICAgIHJ1blRlc3QoQCJXcml0ZSBtdWx0aXBsZSBV
UkxzLiIsIEAiaHR0cHM6Ly93d3cuYXBwbGUuY29tL1xuaHR0cHM6Ly93ZWJraXQub3JnLyIsIF4o
TlNQYXN0ZWJvYXJkICpwYXN0ZWJvYXJkKSB7CisgICAgICAgIFtwYXN0ZWJvYXJkIHdyaXRlT2Jq
ZWN0czpAW2FwcGxlVVJMLCB3ZWJLaXRVUkxdXTsKKyAgICB9KTsKKworICAgIHJ1blRlc3QoQCJE
ZWNsYXJlIGxlZ2FjeSBVUkwgYW5kIHdyaXRlIFVSTCB0byBwYXN0ZWJvYXJkLiIsIEAiaHR0cHM6
Ly93d3cuYXBwbGUuY29tLyIsIF4oTlNQYXN0ZWJvYXJkICpwYXN0ZWJvYXJkKSB7CisgICAgICAg
IFtwYXN0ZWJvYXJkIGRlY2xhcmVUeXBlczpAW05TVVJMUGJvYXJkVHlwZV0gb3duZXI6bmlsXTsK
KyAgICAgICAgW2FwcGxlVVJMIHdyaXRlVG9QYXN0ZWJvYXJkOnBhc3RlYm9hcmRdOworICAgIH0p
OworCisgICAgcnVuVGVzdChAIkRlY2xhcmUgbGVnYWN5IFVSTCBhbmQgc2V0IGEgVVJMIHN0cmlu
Zy4iLCBAImh0dHBzOi8vd3d3LmFwcGxlLmNvbS8iLCBeKE5TUGFzdGVib2FyZCAqcGFzdGVib2Fy
ZCkgeworICAgICAgICBbcGFzdGVib2FyZCBkZWNsYXJlVHlwZXM6QFtOU1VSTFBib2FyZFR5cGVd
IG93bmVyOm5pbF07CisgICAgICAgIFtwYXN0ZWJvYXJkIHNldFN0cmluZzphcHBsZVVSTC5hYnNv
bHV0ZVN0cmluZyBmb3JUeXBlOk5TVVJMUGJvYXJkVHlwZV07CisgICAgfSk7CisKKyAgICBydW5U
ZXN0KEAiRGVjbGFyZSBsZWdhY3kgVVJMIGFuZCBzZXQgYSBwcm9wZXJ0eSBsaXN0LiIsIEAiaHR0
cHM6Ly93d3cuYXBwbGUuY29tLyIsIF4oTlNQYXN0ZWJvYXJkICpwYXN0ZWJvYXJkKSB7CisgICAg
ICAgIFtwYXN0ZWJvYXJkIGRlY2xhcmVUeXBlczpAW05TVVJMUGJvYXJkVHlwZV0gb3duZXI6bmls
XTsKKyAgICAgICAgW3Bhc3RlYm9hcmQgc2V0UHJvcGVydHlMaXN0OkBbQCIvIiwgQCJodHRwczov
L3d3dy5hcHBsZS5jb20iXSBmb3JUeXBlOk5TVVJMUGJvYXJkVHlwZV07CisgICAgfSk7CisKKyAg
ICBydW5UZXN0KEAiRGVjbGFyZSBVUkwgVVRJIGFuZCBzZXQgYSBVUkwgc3RyaW5nLiIsIEAiaHR0
cHM6Ly93d3cuYXBwbGUuY29tLyIsIF4oTlNQYXN0ZWJvYXJkICpwYXN0ZWJvYXJkKSB7CisgICAg
ICAgIFtwYXN0ZWJvYXJkIGRlY2xhcmVUeXBlczpAWyhfX2JyaWRnZSBOU1N0cmluZyAqKWtVVFR5
cGVVUkxdIG93bmVyOm5pbF07CisgICAgICAgIFtwYXN0ZWJvYXJkIHNldFN0cmluZzphcHBsZVVS
TC5hYnNvbHV0ZVN0cmluZyBmb3JUeXBlOihfX2JyaWRnZSBOU1N0cmluZyAqKWtVVFR5cGVVUkxd
OworICAgIH0pOworfQorCiAjZW5kaWYgLy8gUExBVEZPUk0oTUFDKQogCiBURVNUKFBhc3RlTWl4
ZWRDb250ZW50LCBDb3B5QW5kUGFzdGVXaXRoQ3VzdG9tUGFzdGVib2FyZERhdGFPbmx5KQpkaWZm
IC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9pb3MvVUlQYXN0ZWJvYXJkVGVzdHMu
bW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL2lvcy9VSVBhc3RlYm9hcmRUZXN0cy5tbQpp
bmRleCA0MzM0ODU1NjFlNTBkNWMwYzdlMmRhMDQ0NzllZjNmYjNhNDcwODBmLi4xYzE5YTM3NWI5
MTM0OWJlZDZmOTg4ZThjYjk4ZTk2YjY2YjY3YmIyIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2Vi
S2l0QVBJL1Rlc3RzL2lvcy9VSVBhc3RlYm9hcmRUZXN0cy5tbQorKysgYi9Ub29scy9UZXN0V2Vi
S2l0QVBJL1Rlc3RzL2lvcy9VSVBhc3RlYm9hcmRUZXN0cy5tbQpAQCAtMjY3LDYgKzI2NywyMiBA
QCBURVNUKFVJUGFzdGVib2FyZFRlc3RzLCBEYXRhVHJhbnNmZXJHZXREYXRhQ2Fubm90UmVhZEFy
Yml0cmFyeVBsYXRmb3JtVHlwZXMpCiAgICAgfSk7CiB9CiAKK1RFU1QoVUlQYXN0ZWJvYXJkVGVz
dHMsIERhdGFUcmFuc2ZlclVSSUxpc3RDb250YWluc011bHRpcGxlVVJMcykKK3sKKyAgICBhdXRv
IHdlYlZpZXcgPSBzZXRVcFdlYlZpZXdGb3JQYXN0ZWJvYXJkVGVzdHMoQCJEYXRhVHJhbnNmZXIi
KTsKKworICAgIE5TVVJMICpmaXJzdFVSTCA9IFtOU1VSTCBVUkxXaXRoU3RyaW5nOkAiaHR0cHM6
Ly93d3cuYXBwbGUuY29tLyJdOworICAgIE5TVVJMICpzZWNvbmRVUkwgPSBbTlNVUkwgVVJMV2l0
aFN0cmluZzpAImh0dHBzOi8vd2Via2l0Lm9yZy8iXTsKKyAgICBbVUlQYXN0ZWJvYXJkIGdlbmVy
YWxQYXN0ZWJvYXJkXS5VUkxzID0gQFsgZmlyc3RVUkwsIHNlY29uZFVSTCBdOworCisgICAgW3dl
YlZpZXcgcGFzdGU6bmlsXTsKKworICAgIEVYUEVDVF9XS19TVFJFUSgidGV4dC91cmktbGlzdCwg
dGV4dC9wbGFpbiIsIFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJ0eXBl
cy50ZXh0Q29udGVudCJdKTsKKyAgICBFWFBFQ1RfV0tfU1RSRVEoIihTVFJJTkcsIHRleHQvdXJp
LWxpc3QpLCAoU1RSSU5HLCB0ZXh0L3BsYWluKSIsIFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGlu
Z0phdmFTY3JpcHQ6QCJpdGVtcy50ZXh0Q29udGVudCJdKTsKKyAgICBFWFBFQ1RfV0tfU1RSRVEo
Imh0dHBzOi8vd3d3LmFwcGxlLmNvbS9cbmh0dHBzOi8vd2Via2l0Lm9yZy8iLCBbd2ViVmlldyBz
dHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAidXJsRGF0YS50ZXh0Q29udGVudCJdKTsKKyAg
ICBFWFBFQ1RfV0tfU1RSRVEoImh0dHBzOi8vd3d3LmFwcGxlLmNvbS8iLCBbd2ViVmlldyBzdHJp
bmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAidGV4dERhdGEudGV4dENvbnRlbnQiXSk7Cit9CisK
ICNlbmRpZiAvLyBfX0lQSE9ORV9PU19WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMTAzMDAKIAog
fSAvLyBuYW1lc3BhY2UgVGVzdFdlYktpdEFQSQpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVz
dFJ1bm5lci9tYWMvV2ViS2l0VGVzdFJ1bm5lclBhc3RlYm9hcmQubW0gYi9Ub29scy9XZWJLaXRU
ZXN0UnVubmVyL21hYy9XZWJLaXRUZXN0UnVubmVyUGFzdGVib2FyZC5tbQppbmRleCBhYmNkZjQx
NDc1MTdlY2JlNWZjNWRiZjU3YzY1YWIxZDRhZmZiODRiLi41ZTVjYWM0ZTdjZmIxMTkwZjgwMzhl
NmU4YTcyOTBlOTJjMWFhZmE3IDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL21h
Yy9XZWJLaXRUZXN0UnVubmVyUGFzdGVib2FyZC5tbQorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVu
bmVyL21hYy9XZWJLaXRUZXN0UnVubmVyUGFzdGVib2FyZC5tbQpAQCAtMjksNiArMjksNyBAQAog
I2luY2x1ZGUgIldlYktpdFRlc3RSdW5uZXJQYXN0ZWJvYXJkLmgiCiAKICNpbmNsdWRlIDxvYmpj
L3J1bnRpbWUuaD4KKyNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CiAKIEBpbnRlcmZhY2UgTG9j
YWxQYXN0ZWJvYXJkIDogTlNQYXN0ZWJvYXJkCiB7CkBAIC0xOTcsNCArMTk4LDEyIEBAIHN0YXRp
YyBOU011dGFibGVEaWN0aW9uYXJ5ICpsb2NhbFBhc3RlYm9hcmRzOwogICAgIHJldHVybiBbc2Vs
ZiBzZXREYXRhOltzdHJpbmcgZGF0YVVzaW5nRW5jb2Rpbmc6TlNVVEY4U3RyaW5nRW5jb2Rpbmdd
IGZvclR5cGU6ZGF0YVR5cGVdOwogfQogCistIChOU0FycmF5PE5TUGFzdGVib2FyZEl0ZW0gKj4g
KilwYXN0ZWJvYXJkSXRlbXMKK3sKKyAgICBhdXRvIGl0ZW0gPSBhZG9wdE5TKFtbTlNQYXN0ZWJv
YXJkSXRlbSBhbGxvY10gaW5pdF0pOworICAgIGZvciAoTlNTdHJpbmcgKnR5cGUgaW4gZGF0YUJ5
VHlwZSkKKyAgICAgICAgW2l0ZW0gc2V0RGF0YTpkYXRhQnlUeXBlW3R5cGVdIGZvclR5cGU6dHlw
ZV07CisgICAgcmV0dXJuIEBbIGl0ZW0uZ2V0KCkgXTsKK30KKwogQGVuZAo=
</data>

          </attachment>
      

    </bug>

</bugzilla>