<?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>3308</bug_id>
          
          <creation_ts>2005-06-07 11:37:50 -0700</creation_ts>
          <short_desc>Pop-up blocking blocks window.open for already open windows</short_desc>
          <delta_ts>2006-03-10 19:16:50 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>312.x</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.3</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc>http://www.angelblade.com/bugs/popup/index.html</bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P1</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Ryan Kaldari">kaldari</reporter>
          <assigned_to name="Darin Adler">darin</assigned_to>
          <cc>alice.barraclough</cc>
    
    <cc>darin</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>10803</commentid>
    <comment_count>0</comment_count>
    <who name="Ryan Kaldari">kaldari</who>
    <bug_when>2005-06-07 11:37:50 -0700</bug_when>
    <thetext>When pop-up blocking is turned on in Safari, the browser blocks execution of the window.open 
function even if the target window is already open. In other words, if you try to use the window.open 
function to change the URL location of an already open window, pop-up blocking will prevent this from 
working (during onload or onunload events). There is no reason that pop-up blocking should interfere 
with this capability since it has nothing to do with popping up windows. Many web applications rely on 
this functionality and are broken by Safari&apos;s pop-up blocking. Mozilla&apos;s pop-up blocking does the right 
thing in this case and doesn&apos;t interfere with using window.open to change the URL location of already 
open windows.

See http://www.angelblade.com/bugs/popup/index.html for an example.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>18727</commentid>
    <comment_count>1</comment_count>
    <who name="Joost de Valk (AlthA)">joost</who>
    <bug_when>2005-09-04 23:03:29 -0700</bug_when>
    <thetext>Increasing priority since this bug is breaking some dutch banking sites.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>23723</commentid>
    <comment_count>2</comment_count>
    <who name="Alice Liu">alice.barraclough</who>
    <bug_when>2005-11-04 10:27:04 -0800</bug_when>
    <thetext>&lt;rdar://problem/3853181&gt; is assigned to vicki with P2</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>29296</commentid>
    <comment_count>3</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2006-01-21 20:35:42 -0800</bug_when>
    <thetext>Here&apos;s the line of code that needs to change. In the window.open implementation, there&apos;s this:

      if (!allowPopUp(exec, window) &amp;&amp; !(frame-&gt;findFrame(frameName)))
          return jsUndefined();

It says &quot;if there&apos;s not already a frame by this name, and we won&apos;t allow a pop-up, then do nothing&quot;.

The bug is that findFrame only looks for frames inside the current frame tree, not in other windows. We just need to fix the code to use a frame-searching function that implements the whole frame naming algorithm, like -[WebCoreFrameBridge findFrameNamed:].</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>31211</commentid>
    <comment_count>4</comment_count>
    <who name="Vicki Murley">vicki</who>
    <bug_when>2006-02-03 15:50:42 -0800</bug_when>
    <thetext>I have the Radar for this, so I&apos;m going to grab the Bugzilla too!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>35266</commentid>
    <comment_count>5</comment_count>
      <attachid>6898</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2006-03-06 09:01:00 -0800</bug_when>
    <thetext>Created attachment 6898
no test case yet, but would like a first pass of review anyway</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>35685</commentid>
    <comment_count>6</comment_count>
      <attachid>6976</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2006-03-09 23:37:04 -0800</bug_when>
    <thetext>Created attachment 6976
patch with detailed change log and a layout test</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>35741</commentid>
    <comment_count>7</comment_count>
      <attachid>6976</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2006-03-10 10:19:12 -0800</bug_when>
    <thetext>Comment on attachment 6976
patch with detailed change log and a layout test

Looks great. A few comments.

Is there a reason for the layout test not to dumpAsText()?

+    Frame* childFrame = parentFrame-&gt;tree()-&gt;child(m_name);
+    if (childFrame)
+        childFrame-&gt;openURL(getDocument()-&gt;completeURL(relativeURL.qstring()));

I would move the assignment here inside the if statement, to match other code in your patch.

I would call &quot;nameForNewChild&quot; &quot;uniqueNameForNewChild&quot; or just &quot;uniqueNameForChild&quot;. &quot;New&quot; is misleading since you call this function on old frames inside FrameTree::setName. Maybe you left out &quot;unique&quot; in order to hide within the Frame class the details of how new children are named, but doing so made it difficult for me to understand why you would have to call a method like this at all.

+    char suffix[40]; // 16 + maximum width of an unsigned integer
+    sprintf(suffix, &quot;/&lt;!--frame%u--&gt;--&gt;&quot;, childCount());

This looks like it works, but it&apos;s shady. I would *strongly* prefer it if we handled sprintf with thick rubber gloves. Also, &quot;maximum&quot; on what system? 32 bit? 64? 128? (By my calculations, it&apos;s 20 characters on a 64 bit system: 18,446,744,074,000,000,000 sans commas.) And what about the null terminator? I suggest something like:

ASSERT(sizeof(unsigned) &lt;= 64);
char suffix[sizeof(&quot;/&lt;!--frame--&gt;--&gt;&quot;) + 20]; // 20 is the number of characters required to print the largest unsigned integer on a 64 bit system
snprintf(suffix, sizeof(suffix), &quot;/&lt;!--frame%u--&gt;--&gt;&quot;, childCount());

DumpRenderTree needs a ChangeLog.

r=me, but given the sprintf business, I&apos;m kinda rounding up :).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>35751</commentid>
    <comment_count>8</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2006-03-10 11:29:16 -0800</bug_when>
    <thetext>(In reply to comment #7)
&gt; Is there a reason for the layout test not to dumpAsText()?

I tried it, and it just dumped as the empty string. I don&apos;t think frame contents are included in dumpAsText.

&gt; +    Frame* childFrame = parentFrame-&gt;tree()-&gt;child(m_name);
&gt; +    if (childFrame)
&gt; +       
&gt; childFrame-&gt;openURL(getDocument()-&gt;completeURL(relativeURL.qstring()));
&gt; 
&gt; I would move the assignment here inside the if statement, to match other code
&gt; in your patch.

OK.

&gt; I would call &quot;nameForNewChild&quot; &quot;uniqueNameForNewChild&quot; or just
&gt; &quot;uniqueNameForChild&quot;. &quot;New&quot; is misleading since you call this function on old
&gt; frames inside FrameTree::setName. Maybe you left out &quot;unique&quot; in order to hide
&gt; within the Frame class the details of how new children are named, but doing so
&gt; made it difficult for me to understand why you would have to call a method like
&gt; this at all.

I&apos;d like to find a better name. I think uniqueNameForChild is probably good.

&gt; &gt; +    char suffix[40]; // 16 + maximum width of an unsigned integer
&gt; +    sprintf(suffix, &quot;/&lt;!--frame%u--&gt;--&gt;&quot;, childCount());
&gt; 
&gt; This looks like it works, but it&apos;s shady. I would *strongly* prefer it if we
&gt; handled sprintf with thick rubber gloves. Also, &quot;maximum&quot; on what system? 32
&gt; bit? 64? 128? (By my calculations, it&apos;s 20 characters on a 64 bit system:
&gt; 18,446,744,074,000,000,000 sans commas.) And what about the null terminator? I
&gt; suggest something like:
&gt; 
&gt; ASSERT(sizeof(unsigned) &lt;= 64);
&gt; char suffix[sizeof(&quot;/&lt;!--frame--&gt;--&gt;&quot;) + 20]; // 20 is the number of characters
&gt; required to print the largest unsigned integer on a 64 bit system
&gt; snprintf(suffix, sizeof(suffix), &quot;/&lt;!--frame%u--&gt;--&gt;&quot;, childCount());

OK. I&apos;ll do something more like what you suggest.

&gt; DumpRenderTree needs a ChangeLog.

Will do.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>6898</attachid>
            <date>2006-03-06 09:01:00 -0800</date>
            <delta_ts>2006-03-09 23:37:04 -0800</delta_ts>
            <desc>no test case yet, but would like a first pass of review anyway</desc>
            <filename>FrameNamePatch.txt</filename>
            <type>text/plain</type>
            <size>64820</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUva2h0bWwvaHRtbC9odG1sX2Jhc2VpbXBsLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2todG1sL2h0bWwvaHRtbF9iYXNlaW1wbC5jcHAJKHJldmlzaW9uIDEzMTYyKQor
KysgV2ViQ29yZS9raHRtbC9odG1sL2h0bWxfYmFzZWltcGwuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC01LDcgKzUsNyBAQAogICogICAgICAgICAgIChDKSAxOTk5IEFudHRpIEtvaXZpc3RvIChrb2l2
aXN0b0BrZGUub3JnKQogICogICAgICAgICAgIChDKSAyMDAwIFNpbW9uIEhhdXNtYW5uIChoYXVz
bWFubkBrZGUub3JnKQogICogICAgICAgICAgIChDKSAyMDAxIERpcmsgTXVlbGxlciAobXVlbGxl
ckBrZGUub3JnKQotICogQ29weXJpZ2h0IChDKSAyMDA0IEFwcGxlIENvbXB1dGVyLCBJbmMuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4KICAqCiAgKiBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYwpAQCAtMjcsMjcgKzI3LDI2IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5j
bHVkZSAiaHRtbF9iYXNlaW1wbC5oIgogCi0jaW5jbHVkZSAiaHRtbC9odG1sX2RvY3VtZW50aW1w
bC5oIgotCi0jaW5jbHVkZSAiRnJhbWVWaWV3LmgiCisjaW5jbHVkZSAiRXZlbnROYW1lcy5oIgog
I2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiRnJhbWVUcmVlLmgiCi0KLSNpbmNsdWRlICJy
ZW5kZXJpbmcvcmVuZGVyX2ZyYW1lcy5oIgotI2luY2x1ZGUgImNzcy9jc3NzdHlsZXNlbGVjdG9y
LmgiCi0jaW5jbHVkZSAiY3NzL2Nzc19zdHlsZXNoZWV0aW1wbC5oIgorI2luY2x1ZGUgIkZyYW1l
Vmlldy5oIgorI2luY2x1ZGUgIktVUkwuaCIKKyNpbmNsdWRlICJQYWdlLmgiCisjaW5jbHVkZSAi
UGxhdGZvcm1TdHJpbmcuaCIKKyNpbmNsdWRlICJjc3Nfc3R5bGVzaGVldGltcGwuaCIKKyNpbmNs
dWRlICJjc3NoZWxwZXIuaCIKICNpbmNsdWRlICJjc3Nwcm9wZXJ0aWVzLmgiCisjaW5jbHVkZSAi
Y3Nzc3R5bGVzZWxlY3Rvci5oIgogI2luY2x1ZGUgImNzc3ZhbHVlcy5oIgotI2luY2x1ZGUgImNz
cy9jc3NoZWxwZXIuaCIKLSNpbmNsdWRlICJsb2FkZXIuaCIKLSNpbmNsdWRlICJQbGF0Zm9ybVN0
cmluZy5oIgogI2luY2x1ZGUgImRvbTJfZXZlbnRzaW1wbC5oIgotI2luY2x1ZGUgIkV2ZW50TmFt
ZXMuaCIKKyNpbmNsdWRlICJodG1sX2RvY3VtZW50aW1wbC5oIgogI2luY2x1ZGUgImh0bWxuYW1l
cy5oIgorI2luY2x1ZGUgImxvYWRlci5oIgorI2luY2x1ZGUgInJlbmRlcl9mcmFtZXMuaCIKIAot
I2luY2x1ZGUgPEtVUkwuaD4KLQogbmFtZXNwYWNlIFdlYkNvcmUgeworCiB1c2luZyBuYW1lc3Bh
Y2UgRXZlbnROYW1lczsKIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiAKQEAgLTI5OSw3ICsy
OTgsNyBAQAogICAgIC8vIEZJWE1FOiBUaGlzIGxpbWl0IGNvdWxkIGJlIGhpZ2hlciwgYnV0IFdl
YktpdCBoYXMgc29tZQogICAgIC8vIGFsZ29yaXRobXMgdGhhdCBoYXBwZW4gd2hpbGUgbG9hZGlu
ZyB3aGljaCBhcHBlYXIgdG8gYmUgTl4yIG9yCiAgICAgLy8gd29yc2UgaW4gdGhlIG51bWJlciBv
ZiBmcmFtZXMKLSAgICBpZiAody0+ZnJhbWUoKS0+dG9wTGV2ZWxGcmFtZUNvdW50KCkgPj0gMjAw
KSB7CisgICAgaWYgKHctPmZyYW1lKCktPnBhZ2UoKS0+ZnJhbWVDb3VudCgpID49IDIwMCkgewog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCkBAIC0zMjQsMjMgKzMyMywyMCBAQAogewog
ICAgIERvY3VtZW50SW1wbCAqZCA9IGdldERvY3VtZW50KCk7CiAgICAgRnJhbWVWaWV3ICp3ID0g
ZCA/IGQtPnZpZXcoKSA6IDA7Ci0gICAgaWYgKCF3KSB7CisgICAgaWYgKCF3KQogICAgICAgICBy
ZXR1cm47Ci0gICAgfQogICAgIAogICAgIEF0b21pY1N0cmluZyByZWxhdGl2ZVVSTCA9IG1fVVJM
OwotICAgIGlmIChyZWxhdGl2ZVVSTC5pc0VtcHR5KCkpIHsKKyAgICBpZiAocmVsYXRpdmVVUkwu
aXNFbXB0eSgpKQogICAgICAgICByZWxhdGl2ZVVSTCA9ICJhYm91dDpibGFuayI7Ci0gICAgfQog
CiAgICAgLy8gTG9hZCB0aGUgZnJhbWUgY29udGVudHMuCi0gICAgRnJhbWUgKmZyYW1lID0gdy0+
ZnJhbWUoKTsKLSAgICBGcmFtZSAqZnJhbWVQYXJ0ID0gZnJhbWUtPmZpbmRGcmFtZShtX25hbWUu
cXN0cmluZygpKTsKLSAgICBpZiAoZnJhbWVQYXJ0KSB7Ci0gICAgICAgIGZyYW1lUGFydC0+b3Bl
blVSTChnZXREb2N1bWVudCgpLT5jb21wbGV0ZVVSTChyZWxhdGl2ZVVSTC5xc3RyaW5nKCkpKTsK
LSAgICB9IGVsc2UgewotICAgICAgICBmcmFtZS0+cmVxdWVzdEZyYW1lKHN0YXRpY19jYXN0PFJl
bmRlckZyYW1lICo+KHJlbmRlcmVyKCkpLCByZWxhdGl2ZVVSTC5xc3RyaW5nKCksIG1fbmFtZS5x
c3RyaW5nKCkpOwotICAgIH0KKyAgICBGcmFtZSogcGFyZW50RnJhbWUgPSB3LT5mcmFtZSgpOwor
ICAgIEZyYW1lKiBjaGlsZEZyYW1lID0gcGFyZW50RnJhbWUtPnRyZWUoKS0+Y2hpbGQobV9uYW1l
KTsKKyAgICBpZiAoY2hpbGRGcmFtZSkKKyAgICAgICAgY2hpbGRGcmFtZS0+b3BlblVSTChnZXRE
b2N1bWVudCgpLT5jb21wbGV0ZVVSTChyZWxhdGl2ZVVSTC5xc3RyaW5nKCkpKTsKKyAgICBlbHNl
CisgICAgICAgIHBhcmVudEZyYW1lLT5yZXF1ZXN0RnJhbWUoc3RhdGljX2Nhc3Q8UmVuZGVyRnJh
bWUgKj4ocmVuZGVyZXIoKSksIHJlbGF0aXZlVVJMLnFzdHJpbmcoKSwgbV9uYW1lLnFzdHJpbmco
KSk7CiB9CiAKIApAQCAtNDIxLDIxICs0MTcsMTggQEAKICAgICBpZiAoIXJlbmRlcmVyKCkpCiAg
ICAgICAgIHJldHVybjsKIAotICAgIEZyYW1lICpmcmFtZSA9IGdldERvY3VtZW50KCktPmZyYW1l
KCk7CisgICAgRnJhbWUqIGZyYW1lID0gZ2V0RG9jdW1lbnQoKS0+ZnJhbWUoKTsKIAogICAgIGlm
ICghZnJhbWUpCiAgICAgICAgIHJldHVybjsKIAotICAgIGZyYW1lLT5pbmNyZW1lbnRGcmFtZUNv
dW50KCk7CisgICAgZnJhbWUtPnBhZ2UoKS0+aW5jcmVtZW50RnJhbWVDb3VudCgpOwogICAgIAog
ICAgIEF0b21pY1N0cmluZyByZWxhdGl2ZVVSTCA9IG1fVVJMOwotICAgIGlmIChyZWxhdGl2ZVVS
TC5pc0VtcHR5KCkpIHsKKyAgICBpZiAocmVsYXRpdmVVUkwuaXNFbXB0eSgpKQogICAgICAgICBy
ZWxhdGl2ZVVSTCA9ICJhYm91dDpibGFuayI7Ci0gICAgfQogCi0gICAgLy8gd2UgbmVlZCBhIHVu
aXF1ZSBuYW1lIGZvciBldmVyeSBmcmFtZSBpbiB0aGUgZnJhbWVzZXQuIEhvcGUgdGhhdCdzIHVu
aXF1ZSBlbm91Z2guCi0gICAgaWYgKG1fbmFtZS5pc0VtcHR5KCkgfHwgZnJhbWUtPmZyYW1lRXhp
c3RzKG1fbmFtZS5xc3RyaW5nKCkpKQotICAgICAgICBtX25hbWUgPSBBdG9taWNTdHJpbmcoZnJh
bWUtPnJlcXVlc3RGcmFtZU5hbWUoKSk7CisgICAgbV9uYW1lID0gZnJhbWUtPnRyZWUoKS0+bmFt
ZUZvck5ld0NoaWxkKG1fbmFtZSk7CiAKICAgICAvLyBsb2FkIHRoZSBmcmFtZSBjb250ZW50cwog
ICAgIGZyYW1lLT5yZXF1ZXN0RnJhbWUoc3RhdGljX2Nhc3Q8UmVuZGVyRnJhbWUqPihyZW5kZXJl
cigpKSwgcmVsYXRpdmVVUkwucXN0cmluZygpLCBtX25hbWUucXN0cmluZygpKTsKQEAgLTQ0Mywx
MyArNDM2LDExIEBACiAKIHZvaWQgSFRNTEZyYW1lRWxlbWVudEltcGw6OmNsb3NlKCkKIHsKLSAg
ICBGcmFtZSAqZnJhbWUgPSBnZXREb2N1bWVudCgpLT5mcmFtZSgpOwotCisgICAgRnJhbWUqIGZy
YW1lID0gZ2V0RG9jdW1lbnQoKS0+ZnJhbWUoKTsKICAgICBpZiAocmVuZGVyZXIoKSAmJiBmcmFt
ZSkgewotICAgICAgICBmcmFtZS0+ZGVjcmVtZW50RnJhbWVDb3VudCgpOwotICAgICAgICBGcmFt
ZSAqZnJhbWVQYXJ0ID0gZnJhbWUtPmZpbmRGcmFtZShtX25hbWUucXN0cmluZygpKTsKLSAgICAg
ICAgaWYgKGZyYW1lUGFydCkKLSAgICAgICAgICAgIGZyYW1lUGFydC0+ZnJhbWVEZXRhY2hlZCgp
OworICAgICAgICBmcmFtZS0+cGFnZSgpLT5kZWNyZW1lbnRGcmFtZUNvdW50KCk7CisgICAgICAg
IGlmIChGcmFtZSogY2hpbGRGcmFtZSA9IGZyYW1lLT50cmVlKCktPmNoaWxkKG1fbmFtZSkpCisg
ICAgICAgICAgICBjaGlsZEZyYW1lLT5mcmFtZURldGFjaGVkKCk7CiAgICAgfQogfQogCkBAIC01
MTMsMjYgKzUwNCwyMiBAQAogICAgICAgICByZW5kZXJGcmFtZS0+d2lkZ2V0KCktPmNsZWFyRm9j
dXMoKTsKIH0KIAotRnJhbWUqIEhUTUxGcmFtZUVsZW1lbnRJbXBsOjpjb250ZW50UGFydCgpIGNv
bnN0CitGcmFtZSogSFRNTEZyYW1lRWxlbWVudEltcGw6OmNvbnRlbnRGcmFtZSgpIGNvbnN0CiB7
CiAgICAgLy8gU3RhcnQgd2l0aCB0aGUgcGFydCB0aGF0IGNvbnRhaW5zIHRoaXMgZWxlbWVudCwg
b3VyIG93bmVyRG9jdW1lbnQuCi0gICAgRnJhbWUqIG93bmVyRG9jdW1lbnRQYXJ0ID0gZ2V0RG9j
dW1lbnQoKS0+ZnJhbWUoKTsKLSAgICBpZiAoIW93bmVyRG9jdW1lbnRQYXJ0KSB7CisgICAgRnJh
bWUqIHBhcmVudEZyYW1lID0gZ2V0RG9jdW1lbnQoKS0+ZnJhbWUoKTsKKyAgICBpZiAoIXBhcmVu
dEZyYW1lKQogICAgICAgICByZXR1cm4gMDsKLSAgICB9CiAKICAgICAvLyBGaW5kIHRoZSBwYXJ0
IGZvciB0aGUgc3ViZnJhbWUgdGhhdCB0aGlzIGVsZW1lbnQgcmVwcmVzZW50cy4KLSAgICByZXR1
cm4gb3duZXJEb2N1bWVudFBhcnQtPmZpbmRGcmFtZShtX25hbWUucXN0cmluZygpKTsKKyAgICBy
ZXR1cm4gcGFyZW50RnJhbWUtPnRyZWUoKS0+Y2hpbGQobV9uYW1lKTsKIH0KIAogRG9jdW1lbnRJ
bXBsKiBIVE1MRnJhbWVFbGVtZW50SW1wbDo6Y29udGVudERvY3VtZW50KCkgY29uc3QKIHsKLSAg
ICBGcmFtZSAqZnJhbWUgPSBjb250ZW50UGFydCgpOwotICAgIGlmICghZnJhbWUpIHsKKyAgICBG
cmFtZSogZnJhbWUgPSBjb250ZW50RnJhbWUoKTsKKyAgICBpZiAoIWZyYW1lKQogICAgICAgICBy
ZXR1cm4gMDsKLSAgICB9Ci0KLSAgICAvLyBSZXR1cm4gdGhlIGRvY3VtZW50IGZvciB0aGF0IHBh
cnQsIHdoaWNoIGlzIG91ciBjb250ZW50RG9jdW1lbnQuCiAgICAgcmV0dXJuIGZyYW1lLT5kb2N1
bWVudCgpOwogfQogCkBAIC05MTYsMTYgKzkwMywxMyBAQAogICAgIG1fbmFtZSA9IGdldEF0dHJp
YnV0ZShuYW1lQXR0cik7CiAgICAgaWYgKG1fbmFtZS5pc051bGwoKSkKICAgICAgICAgbV9uYW1l
ID0gZ2V0QXR0cmlidXRlKGlkQXR0cik7Ci0gICAgCisKICAgICBIVE1MRWxlbWVudEltcGw6OmF0
dGFjaCgpOwogCi0gICAgRnJhbWUgKmZyYW1lID0gZ2V0RG9jdW1lbnQoKS0+ZnJhbWUoKTsKLSAg
ICBpZiAocmVuZGVyZXIoKSAmJiBmcmFtZSkgewotICAgICAgICAvLyB3ZSBuZWVkIGEgdW5pcXVl
IG5hbWUgZm9yIGV2ZXJ5IGZyYW1lIGluIHRoZSBmcmFtZXNldC4gSG9wZSB0aGF0J3MgdW5pcXVl
IGVub3VnaC4KLSAgICAgICAgZnJhbWUtPmluY3JlbWVudEZyYW1lQ291bnQoKTsKLSAgICAgICAg
aWYgKG1fbmFtZS5pc0VtcHR5KCkgfHwgZnJhbWUtPmZyYW1lRXhpc3RzKG1fbmFtZS5xc3RyaW5n
KCkpKQotICAgICAgICAgICAgbV9uYW1lID0gQXRvbWljU3RyaW5nKGZyYW1lLT5yZXF1ZXN0RnJh
bWVOYW1lKCkpOwotCisgICAgRnJhbWUqIHBhcmVudEZyYW1lID0gZ2V0RG9jdW1lbnQoKS0+ZnJh
bWUoKTsKKyAgICBpZiAocmVuZGVyZXIoKSAmJiBwYXJlbnRGcmFtZSkgeworICAgICAgICBwYXJl
bnRGcmFtZS0+cGFnZSgpLT5pbmNyZW1lbnRGcmFtZUNvdW50KCk7CisgICAgICAgIG1fbmFtZSA9
IHBhcmVudEZyYW1lLT50cmVlKCktPm5hbWVGb3JOZXdDaGlsZChtX25hbWUpOwogICAgICAgICBz
dGF0aWNfY2FzdDxSZW5kZXJQYXJ0T2JqZWN0Kj4ocmVuZGVyZXIoKSktPnVwZGF0ZVdpZGdldCgp
OwogICAgICAgICBuZWVkV2lkZ2V0VXBkYXRlID0gZmFsc2U7CiAgICAgfQpJbmRleDogV2ViQ29y
ZS9raHRtbC9odG1sL2h0bWxfYmFzZWltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2todG1s
L2h0bWwvaHRtbF9iYXNlaW1wbC5oCShyZXZpc2lvbiAxMzE2MikKKysrIFdlYkNvcmUva2h0bWwv
aHRtbC9odG1sX2Jhc2VpbXBsLmgJKHdvcmtpbmcgY29weSkKQEAgLTExMCw3ICsxMTAsNyBAQAog
ICAgIHZpcnR1YWwgYm9vbCBpc0ZvY3VzYWJsZSgpIGNvbnN0OwogICAgIHZpcnR1YWwgdm9pZCBz
ZXRGb2N1cyhib29sKTsKIAotICAgIEZyYW1lKiBjb250ZW50UGFydCgpIGNvbnN0OworICAgIEZy
YW1lKiBjb250ZW50RnJhbWUoKSBjb25zdDsKICAgICBEb2N1bWVudEltcGwqIGNvbnRlbnREb2N1
bWVudCgpIGNvbnN0OwogICAgIAogICAgIHZpcnR1YWwgYm9vbCBpc1VSTEF0dHJpYnV0ZShBdHRy
aWJ1dGVJbXBsICphdHRyKSBjb25zdDsKSW5kZXg6IFdlYkNvcmUva2h0bWwvZWNtYS9ranNfaHRt
bC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9raHRtbC9lY21hL2tqc19odG1sLmNwcAkocmV2
aXNpb24gMTMxNjIpCisrKyBXZWJDb3JlL2todG1sL2VjbWEva2pzX2h0bWwuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yMDksMTIgKzIwOSwxMCBAQAogICBSZWZQdHI8RE9NOjpIVE1MQ29sbGVjdGlv
bkltcGw+IGNvbGxlY3Rpb24gPSBkb2MuZG9jdW1lbnROYW1lZEl0ZW1zKG5hbWUpOwogCiAgIGlm
IChjb2xsZWN0aW9uLT5sZW5ndGgoKSA9PSAxKSB7Ci0gICAgTm9kZUltcGwgKm5vZGUgPSBjb2xs
ZWN0aW9uLT5maXJzdEl0ZW0oKTsKKyAgICBOb2RlSW1wbCogbm9kZSA9IGNvbGxlY3Rpb24tPmZp
cnN0SXRlbSgpOwogICAgIEZyYW1lICpmcmFtZTsKLSAgICBpZiAobm9kZS0+aGFzVGFnTmFtZShp
ZnJhbWVUYWcpICYmIAotICAgICAgICAoZnJhbWUgPSBzdGF0aWNfY2FzdDxET006OkhUTUxJRnJh
bWVFbGVtZW50SW1wbCAqPihub2RlKS0+Y29udGVudFBhcnQoKSkpCisgICAgaWYgKG5vZGUtPmhh
c1RhZ05hbWUoaWZyYW1lVGFnKSAmJiAoZnJhbWUgPSBzdGF0aWNfY2FzdDxET006OkhUTUxJRnJh
bWVFbGVtZW50SW1wbCAqPihub2RlKS0+Y29udGVudEZyYW1lKCkpKQogICAgICAgcmV0dXJuIFdp
bmRvdzo6cmV0cmlldmUoZnJhbWUpOwotCiAgICAgcmV0dXJuIGdldERPTU5vZGUoZXhlYywgbm9k
ZSk7CiAgIH0KIApAQCAtMjA5Miw3ICsyMDkwLDcgQEAKICAgICAgICAgY2FzZSBGcmFtZUNvbnRl
bnREb2N1bWVudDogcmV0dXJuIGNoZWNrTm9kZVNlY3VyaXR5KGV4ZWMsZnJhbWVFbGVtZW50LmNv
bnRlbnREb2N1bWVudCgpKSA/IAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZ2V0RE9NTm9kZShleGVjLCBmcmFtZUVsZW1lbnQuY29udGVudERvY3VtZW50KCkpIDog
anNVbmRlZmluZWQoKTsKICAgICAgICAgY2FzZSBGcmFtZUNvbnRlbnRXaW5kb3c6ICAgcmV0dXJu
IGNoZWNrTm9kZVNlY3VyaXR5KGV4ZWMsZnJhbWVFbGVtZW50LmNvbnRlbnREb2N1bWVudCgpKQot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gV2luZG93OjpyZXRyaWV2
ZShmcmFtZUVsZW1lbnQuY29udGVudFBhcnQoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICA/IFdpbmRvdzo6cmV0cmlldmUoZnJhbWVFbGVtZW50LmNvbnRlbnRGcmFt
ZSgpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDoganNVbmRlZmlu
ZWQoKTsKICAgICAgICAgY2FzZSBGcmFtZUZyYW1lQm9yZGVyOiAgICAgcmV0dXJuIGpzU3RyaW5n
KGZyYW1lRWxlbWVudC5mcmFtZUJvcmRlcigpKTsKICAgICAgICAgY2FzZSBGcmFtZUxvbmdEZXNj
OiAgICAgICAgcmV0dXJuIGpzU3RyaW5nKGZyYW1lRWxlbWVudC5sb25nRGVzYygpKTsKQEAgLTIx
MTgsOCArMjExNiw4IEBACiAgICAgICAgIGNhc2UgSUZyYW1lRG9jdW1lbnQ6IC8vIG5vbi1zdGFu
ZGFyZCwgbWFwcGVkIHRvIGNvbnRlbnREb2N1bWVudAogICAgICAgICBjYXNlIElGcmFtZUNvbnRl
bnREb2N1bWVudDogcmV0dXJuIGNoZWNrTm9kZVNlY3VyaXR5KGV4ZWMsaUZyYW1lLmNvbnRlbnRE
b2N1bWVudCgpKSA/IAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRE
T01Ob2RlKGV4ZWMsIGlGcmFtZS5jb250ZW50RG9jdW1lbnQoKSkgOiBqc1VuZGVmaW5lZCgpOwot
ICAgICAgICBjYXNlIElGcmFtZUNvbnRlbnRXaW5kb3c6ICAgICAgIHJldHVybiBjaGVja05vZGVT
ZWN1cml0eShleGVjLGlGcmFtZS5jb250ZW50RG9jdW1lbnQoKSkgCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgPyBXaW5kb3c6OnJldHJpZXZlKGlGcmFtZS5jb250ZW50
UGFydCgpKQorICAgICAgICBjYXNlIElGcmFtZUNvbnRlbnRXaW5kb3c6ICAgcmV0dXJuIGNoZWNr
Tm9kZVNlY3VyaXR5KGV4ZWMsaUZyYW1lLmNvbnRlbnREb2N1bWVudCgpKSAKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IFdpbmRvdzo6cmV0cmlldmUoaUZyYW1lLmNv
bnRlbnRGcmFtZSgpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDog
anNVbmRlZmluZWQoKTsKICAgICAgICAgY2FzZSBJRnJhbWVGcmFtZUJvcmRlcjogICAgIHJldHVy
biBqc1N0cmluZyhpRnJhbWUuZnJhbWVCb3JkZXIoKSk7CiAgICAgICAgIGNhc2UgSUZyYW1lSGVp
Z2h0OiAgICAgICAgICByZXR1cm4ganNTdHJpbmcoaUZyYW1lLmhlaWdodCgpKTsKSW5kZXg6IFdl
YkNvcmUva2h0bWwvZWNtYS9ranNfd2luZG93LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2to
dG1sL2VjbWEva2pzX3dpbmRvdy5jcHAJKHJldmlzaW9uIDEzMTYyKQorKysgV2ViQ29yZS9raHRt
bC9lY21hL2tqc193aW5kb3cuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MDEsNyArNzAxLDcgQEAK
ICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgICByZXR1cm4ganNOdW1iZXIobV9m
cmFtZS0+dmlldygpLT52aXNpYmxlV2lkdGgoKSk7CiAgICAgY2FzZSBMZW5ndGg6Ci0gICAgICBy
ZXR1cm4ganNOdW1iZXIobV9mcmFtZS0+ZnJhbWVzKCkuY291bnQoKSk7CisgICAgICByZXR1cm4g
anNOdW1iZXIobV9mcmFtZS0+dHJlZSgpLT5jaGlsZENvdW50KCkpOwogICAgIGNhc2UgX0xvY2F0
aW9uOgogICAgICAgcmV0dXJuIGxvY2F0aW9uKCk7CiAgICAgY2FzZSBOYW1lOgpAQCAtODkyLDI3
ICs4OTIsMTkgQEAKICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQogCi1KU1ZhbHVlICpXaW5k
b3c6OmNoaWxkRnJhbWVHZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBKU09iamVjdCAqb3JpZ2luYWxP
YmplY3QsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90
JiBzbG90KQorSlNWYWx1ZSogV2luZG93OjpjaGlsZEZyYW1lR2V0dGVyKEV4ZWNTdGF0ZSosIEpT
T2JqZWN0KiwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNs
b3QmIHNsb3QpCiB7Ci0gIFdpbmRvdyAqdGhpc09iaiA9IHN0YXRpY19jYXN0PFdpbmRvdyAqPihz
bG90LnNsb3RCYXNlKCkpOwotICByZXR1cm4gcmV0cmlldmUodGhpc09iai0+bV9mcmFtZS0+Y2hp
bGRGcmFtZU5hbWVkKHByb3BlcnR5TmFtZS5xc3RyaW5nKCkpKTsKKyAgcmV0dXJuIHJldHJpZXZl
KHN0YXRpY19jYXN0PFdpbmRvdyo+KHNsb3Quc2xvdEJhc2UoKSktPm1fZnJhbWUtPnRyZWUoKS0+
Y2hpbGQoQXRvbWljU3RyaW5nKHByb3BlcnR5TmFtZS5kb21TdHJpbmcoKSkpKTsKIH0KIAotSlNW
YWx1ZSAqV2luZG93OjpuYW1lZEZyYW1lR2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgSlNPYmplY3Qg
Km9yaWdpbmFsT2JqZWN0LCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFBy
b3BlcnR5U2xvdCYgc2xvdCkKK0pTVmFsdWUgKldpbmRvdzo6bmFtZWRGcmFtZUdldHRlcihFeGVj
U3RhdGUqLCBKU09iamVjdCosIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3Qg
UHJvcGVydHlTbG90JiBzbG90KQogewotICBXaW5kb3cgKnRoaXNPYmogPSBzdGF0aWNfY2FzdDxX
aW5kb3cgKj4oc2xvdC5zbG90QmFzZSgpKTsKLSAgcmV0dXJuIHJldHJpZXZlKHRoaXNPYmotPm1f
ZnJhbWUtPmZpbmRGcmFtZShwcm9wZXJ0eU5hbWUucXN0cmluZygpKSk7CisgIHJldHVybiByZXRy
aWV2ZShzdGF0aWNfY2FzdDxXaW5kb3cqPihzbG90LnNsb3RCYXNlKCkpLT5tX2ZyYW1lLT50cmVl
KCktPmZpbmQoQXRvbWljU3RyaW5nKHByb3BlcnR5TmFtZS5kb21TdHJpbmcoKSkpKTsKIH0KIAot
SlNWYWx1ZSogV2luZG93OjppbmRleEdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBv
cmlnaW5hbE9iamVjdCwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9w
ZXJ0eVNsb3QmIHNsb3QpCitKU1ZhbHVlKiBXaW5kb3c6OmluZGV4R2V0dGVyKEV4ZWNTdGF0ZSos
IEpTT2JqZWN0KiwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkK
IHsKLSAgV2luZG93KiB0aGlzT2JqID0gc3RhdGljX2Nhc3Q8V2luZG93Kj4oc2xvdC5zbG90QmFz
ZSgpKTsKLSAgCi0gIFFQdHJMaXN0PEZyYW1lPiBmcmFtZXMgPSB0aGlzT2JqLT5tX2ZyYW1lLT5m
cmFtZXMoKTsKLSAgRnJhbWUqIGZyYW1lID0gZnJhbWVzLmF0KHNsb3QuaW5kZXgoKSk7Ci0gIEFT
U0VSVChmcmFtZSk7Ci0KLSAgcmV0dXJuIHJldHJpZXZlKGZyYW1lKTsKKyAgcmV0dXJuIHJldHJp
ZXZlKHN0YXRpY19jYXN0PFdpbmRvdyo+KHNsb3Quc2xvdEJhc2UoKSktPm1fZnJhbWUtPnRyZWUo
KS0+Y2hpbGQoc2xvdC5pbmRleCgpKSk7CiB9CiAKIEpTVmFsdWUgKldpbmRvdzo6bmFtZWRJdGVt
R2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgSlNPYmplY3QgKm9yaWdpbmFsT2JqZWN0LCBjb25zdCBJ
ZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKQEAgLTk2
Miw4ICs5NTQsNyBAQAogICAvLyBuYW1pbmcgZnJhbWVzIHRoaW5ncyB0aGF0IGNvbmZsaWN0IHdp
dGggd2luZG93IHByb3BlcnRpZXMgdGhhdAogICAvLyBhcmUgaW4gTW96IGJ1dCBub3QgSUUuIFNp
bmNlIHdlIGhhdmUgc29tZSBvZiB0aGVzZSwgd2UgaGF2ZSB0byBkbwogICAvLyBpdCB0aGUgTW96
IHdheS4KLSAgRnJhbWUgKmNoaWxkRnJhbWUgPSBtX2ZyYW1lLT5jaGlsZEZyYW1lTmFtZWQocHJv
cGVydHlOYW1lLnFzdHJpbmcoKSk7Ci0gIGlmIChjaGlsZEZyYW1lKSB7CisgIGlmIChtX2ZyYW1l
LT50cmVlKCktPmNoaWxkKEF0b21pY1N0cmluZyhwcm9wZXJ0eU5hbWUuZG9tU3RyaW5nKCkpKSkg
ewogICAgIHNsb3Quc2V0Q3VzdG9tKHRoaXMsIGNoaWxkRnJhbWVHZXR0ZXIpOwogICAgIHJldHVy
biB0cnVlOwogICB9CkBAIC05OTIsMjUgKzk4MywxNyBAQAogICAgIHJldHVybiB0cnVlOwogICB9
CiAKLSAgRnJhbWUgKmtwID0gbV9mcmFtZS0+ZmluZEZyYW1lKHByb3BlcnR5TmFtZS5xc3RyaW5n
KCkpOwotICBpZiAoa3ApIHsKKyAgaWYgKG1fZnJhbWUtPnRyZWUoKS0+ZmluZChBdG9taWNTdHJp
bmcocHJvcGVydHlOYW1lLmRvbVN0cmluZygpKSkpIHsKICAgICBzbG90LnNldEN1c3RvbSh0aGlz
LCBuYW1lZEZyYW1lR2V0dGVyKTsKICAgICByZXR1cm4gdHJ1ZTsKICAgfQogCiAgIC8vIGFsbG93
IHdpbmRvd1sxXSBvciBwYXJlbnRbMV0gZXRjLiAoIzU2OTgzKQogICBib29sIG9rOwotICB1bnNp
Z25lZCBpbnQgaSA9IHByb3BlcnR5TmFtZS50b0FycmF5SW5kZXgoJm9rKTsKLSAgaWYgKG9rKSB7
Ci0gICAgUVB0ckxpc3Q8RnJhbWU+IGZyYW1lcyA9IG1fZnJhbWUtPmZyYW1lcygpOwotICAgIHVu
c2lnbmVkIGludCBsZW4gPSBmcmFtZXMuY291bnQoKTsKLSAgICBpZiAoaSA8IGxlbikgewotICAg
ICAgRnJhbWUqIGZyYW1lID0gZnJhbWVzLmF0KGkpOwotICAgICAgaWYgKGZyYW1lKSB7Ci0gICAg
ICAgIHNsb3Quc2V0Q3VzdG9tSW5kZXgodGhpcywgaSwgaW5kZXhHZXR0ZXIpOwotICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLSAgICAgIH0KLSAgICB9CisgIHVuc2lnbmVkIGkgPSBwcm9wZXJ0eU5hbWUu
dG9BcnJheUluZGV4KCZvayk7CisgIGlmIChvayAmJiBpIDwgbV9mcmFtZS0+dHJlZSgpLT5jaGls
ZENvdW50KCkpIHsKKyAgICBzbG90LnNldEN1c3RvbUluZGV4KHRoaXMsIGksIGluZGV4R2V0dGVy
KTsKKyAgICByZXR1cm4gdHJ1ZTsKICAgfQogCiAgIC8vIGFsbG93IHNob3J0Y3V0cyBsaWtlICdJ
bWFnZTEnIGluc3RlYWQgb2YgZG9jdW1lbnQuaW1hZ2VzLkltYWdlMQpAQCAtMTU4NSw5ICsxNTY4
LDkgQEAKICAgfQogICBjYXNlIFdpbmRvdzo6T3BlbjoKICAgewotICAgICAgUVN0cmluZyBmcmFt
ZU5hbWUgPSBhcmdzWzFdLT5pc1VuZGVmaW5lZE9yTnVsbCgpID8gUVN0cmluZygiX2JsYW5rIikg
OiBhcmdzWzFdLT50b1N0cmluZyhleGVjKS5xc3RyaW5nKCk7Ci0gICAgICBpZiAoIWFsbG93UG9w
VXAoZXhlYywgd2luZG93KQotICAgICAgICAgICAgJiYgIShmcmFtZU5hbWUgPT0gIl90b3AiIHx8
IGZyYW1lTmFtZSA9PSAiX3BhcmVudCIgfHwgZnJhbWVOYW1lID09ICJfc2VsZiIgfHwgZnJhbWUt
PmZpbmRGcmFtZShmcmFtZU5hbWUpKSkKKyAgICAgIEF0b21pY1N0cmluZyBmcmFtZU5hbWUgPSBh
cmdzWzFdLT5pc1VuZGVmaW5lZE9yTnVsbCgpCisgICAgICAgID8gIl9ibGFuayIgOiBBdG9taWNT
dHJpbmcoYXJnc1sxXS0+dG9TdHJpbmcoZXhlYykuZG9tU3RyaW5nKCkpOworICAgICAgaWYgKCFh
bGxvd1BvcFVwKGV4ZWMsIHdpbmRvdykgJiYgIWZyYW1lLT50cmVlKCktPmZpbmQoZnJhbWVOYW1l
KSkKICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICAgIAogICAgICAgV2luZG93
QXJncyB3aW5kb3dBcmdzOwpAQCAtMTYwMiw3ICsxNTg1LDcgQEAKICAgICAgICAgICB1cmwgPSBh
Y3RpdmVQYXJ0LT5kb2N1bWVudCgpLT5jb21wbGV0ZVVSTChzdHIucXN0cmluZygpKTsKIAogICAg
ICAgVVJMQXJncyB1YXJnczsKLSAgICAgIHVhcmdzLmZyYW1lTmFtZSA9IGZyYW1lTmFtZTsKKyAg
ICAgIHVhcmdzLmZyYW1lTmFtZSA9IGZyYW1lTmFtZS5xc3RyaW5nKCk7CiAgICAgICBpZiAodWFy
Z3MuZnJhbWVOYW1lID09ICJfdG9wIikgewogICAgICAgICAgIHdoaWxlIChmcmFtZS0+dHJlZSgp
LT5wYXJlbnQoKSkKICAgICAgICAgICAgICAgZnJhbWUgPSBmcmFtZS0+dHJlZSgpLT5wYXJlbnQo
KTsKQEAgLTIwMjUsMTEgKzIwMDgsOCBAQAogSlNWYWx1ZSAqRnJhbWVBcnJheTo6Z2V0VmFsdWVQ
cm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikKIHsKICAgc3dpdGNoICh0b2tlbikg
ewotICBjYXNlIExlbmd0aDogewotICAgIFFQdHJMaXN0PEZyYW1lPiBmcmFtZXMgPSBtX2ZyYW1l
LT5mcmFtZXMoKTsKLSAgICB1bnNpZ25lZCBpbnQgbGVuID0gZnJhbWVzLmNvdW50KCk7Ci0gICAg
cmV0dXJuIGpzTnVtYmVyKGxlbik7Ci0gIH0KKyAgY2FzZSBMZW5ndGg6CisgICAgcmV0dXJuIGpz
TnVtYmVyKG1fZnJhbWUtPnRyZWUoKS0+Y2hpbGRDb3VudCgpKTsKICAgY2FzZSBMb2NhdGlvbjoK
ICAgICAvLyBub24tc3RhbmRhcmQgcHJvcGVydHksIGJ1dCB3b3JrcyBpbiBOUyBhbmQgSUUKICAg
ICBpZiAoSlNPYmplY3QgKm9iaiA9IFdpbmRvdzo6cmV0cmlldmVXaW5kb3cobV9mcmFtZSkpCkBA
IC0yMDQxLDI2ICsyMDIxLDE0IEBACiAgIH0KIH0KIAotSlNWYWx1ZSAqRnJhbWVBcnJheTo6aW5k
ZXhHZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBKU09iamVjdCAqb3JpZ2luYWxPYmplY3QsIGNvbnN0
IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQorSlNW
YWx1ZSogRnJhbWVBcnJheTo6aW5kZXhHZXR0ZXIoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBjb25z
dCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQogewotICBGcmFtZUFycmF5
ICp0aGlzT2JqID0gc3RhdGljX2Nhc3Q8RnJhbWVBcnJheSAqPihzbG90LnNsb3RCYXNlKCkpOwot
ICBGcmFtZSogZnJhbWUgPSB0aGlzT2JqLT5tX2ZyYW1lLT5mcmFtZXMoKS5hdChzbG90LmluZGV4
KCkpOwotCi0gIGlmIChmcmFtZSAmJiBmcmFtZS0+aXNGcmFtZSgpKQotICAgIHJldHVybiBXaW5k
b3c6OnJldHJpZXZlKHN0YXRpY19jYXN0PEZyYW1lKj4oZnJhbWUpKTsKLQotICByZXR1cm4ganNV
bmRlZmluZWQoKTsKKyAgcmV0dXJuIFdpbmRvdzo6cmV0cmlldmUoc3RhdGljX2Nhc3Q8RnJhbWVB
cnJheSo+KHNsb3Quc2xvdEJhc2UoKSktPm1fZnJhbWUtPnRyZWUoKS0+Y2hpbGQoc2xvdC5pbmRl
eCgpKSk7CiB9CiAKLUpTVmFsdWUgKkZyYW1lQXJyYXk6Om5hbWVHZXR0ZXIoRXhlY1N0YXRlICpl
eGVjLCBKU09iamVjdCAqb3JpZ2luYWxPYmplY3QsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5
TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQorSlNWYWx1ZSAqRnJhbWVBcnJheTo6bmFt
ZUdldHRlcihFeGVjU3RhdGUqLCBKU09iamVjdCosIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5
TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQogewotICBGcmFtZUFycmF5ICp0aGlzT2Jq
ID0gc3RhdGljX2Nhc3Q8RnJhbWVBcnJheSAqPihzbG90LnNsb3RCYXNlKCkpOwotICBGcmFtZSog
ZnJhbWUgPSB0aGlzT2JqLT5tX2ZyYW1lLT5maW5kRnJhbWUocHJvcGVydHlOYW1lLnFzdHJpbmco
KSk7Ci0KLSAgaWYgKGZyYW1lICYmIGZyYW1lLT5pc0ZyYW1lKCkpCi0gICAgcmV0dXJuIFdpbmRv
dzo6cmV0cmlldmUoc3RhdGljX2Nhc3Q8RnJhbWUqPihmcmFtZSkpOwotCi0gIHJldHVybiBqc1Vu
ZGVmaW5lZCgpOworICByZXR1cm4gV2luZG93OjpyZXRyaWV2ZShzdGF0aWNfY2FzdDxGcmFtZUFy
cmF5Kj4oc2xvdC5zbG90QmFzZSgpKS0+bV9mcmFtZS0+dHJlZSgpLT5jaGlsZChBdG9taWNTdHJp
bmcocHJvcGVydHlOYW1lLmRvbVN0cmluZygpKSkpOwogfQogCiBib29sIEZyYW1lQXJyYXk6Omdl
dE93blByb3BlcnR5U2xvdChFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3Bl
cnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90KQpAQCAtMjA3NywxNSArMjA0NSwxNCBAQAogICB9
CiAKICAgLy8gY2hlY2sgZm9yIHRoZSBuYW1lIG9yIG51bWJlcgotICBGcmFtZSogZnJhbWUgPSBt
X2ZyYW1lLT5maW5kRnJhbWUocHJvcGVydHlOYW1lLnFzdHJpbmcoKSk7Ci0gIGlmIChmcmFtZSkg
eworICBpZiAobV9mcmFtZS0+dHJlZSgpLT5jaGlsZChBdG9taWNTdHJpbmcocHJvcGVydHlOYW1l
LmRvbVN0cmluZygpKSkpIHsKICAgICBzbG90LnNldEN1c3RvbSh0aGlzLCBuYW1lR2V0dGVyKTsK
ICAgICByZXR1cm4gdHJ1ZTsKICAgfQogCiAgIGJvb2wgb2s7Ci0gIHVuc2lnbmVkIGludCBpID0g
cHJvcGVydHlOYW1lLnRvQXJyYXlJbmRleCgmb2spOwotICBpZiAob2sgJiYgaSA8IG1fZnJhbWUt
PmZyYW1lcygpLmNvdW50KCkpIHsKKyAgdW5zaWduZWQgaSA9IHByb3BlcnR5TmFtZS50b0FycmF5
SW5kZXgoJm9rKTsKKyAgaWYgKG9rICYmIGkgPCBtX2ZyYW1lLT50cmVlKCktPmNoaWxkQ291bnQo
KSkgewogICAgIHNsb3Quc2V0Q3VzdG9tSW5kZXgodGhpcywgaSwgaW5kZXhHZXR0ZXIpOwogICAg
IHJldHVybiB0cnVlOwogICB9CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL3dpbi9UZW1wb3JhcnlM
aW5rU3R1YnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vd2luL1RlbXBvcmFy
eUxpbmtTdHVicy5jcHAJKHJldmlzaW9uIDEzMTYyKQorKysgV2ViQ29yZS9wbGF0Zm9ybS93aW4v
VGVtcG9yYXJ5TGlua1N0dWJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjg4LDcgKzI4OCw2IEBA
CiB2b2lkIEZyYW1lV2luOjphZGRNZXNzYWdlVG9Db25zb2xlKFN0cmluZyBjb25zdCYsdW5zaWdu
ZWQgaW50LFN0cmluZyBjb25zdCYpIHsgfQogYm9vbCBGcmFtZVdpbjo6c2hvdWxkQ2hhbmdlU2Vs
ZWN0aW9uKFNlbGVjdGlvbkNvbnRyb2xsZXIgY29uc3QmLFNlbGVjdGlvbkNvbnRyb2xsZXIgY29u
c3QmLFdlYkNvcmU6OkVBZmZpbml0eSxib29sKSBjb25zdCB7IHJldHVybiAwOyB9CiBzdGF0aWMg
aW50IGZyYW1lTnVtYmVyID0gMDsKLVN0cmluZyBGcmFtZVdpbjo6Z2VuZXJhdGVGcmFtZU5hbWUo
KSB7IHJldHVybiBRU3RyaW5nOjpudW1iZXIoZnJhbWVOdW1iZXIrKyk7IH0KIEZyYW1lKiBGcmFt
ZVdpbjo6Y3JlYXRlRnJhbWUoS1VSTCBjb25zdCYsUVN0cmluZyBjb25zdCYsUmVuZGVyUGFydCos
U3RyaW5nIGNvbnN0JikgeyByZXR1cm4gMDsgfQogdm9pZCBGcmFtZVdpbjo6c2F2ZURvY3VtZW50
U3RhdGUodm9pZCkgeyB9CiB2b2lkIEZyYW1lV2luOjpjbGVhclVuZG9SZWRvT3BlcmF0aW9ucyh2
b2lkKSB7fQpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvcmVuZGVyX2ZyYW1lcy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvcmVuZGVyX2ZyYW1lcy5jcHAJKHJldmlzaW9uIDEz
MTYyKQorKysgV2ViQ29yZS9yZW5kZXJpbmcvcmVuZGVyX2ZyYW1lcy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlICJGcmFtZVRyZWUuaCIKICNpbmNsdWRlICJG
cmFtZVZpZXcuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJQYWdl
LmgiCiAjaW5jbHVkZSAiVGV4dEltcGwuaCIKICNpbmNsdWRlICJkb20yX2V2ZW50c2ltcGwuaCIK
ICNpbmNsdWRlICJodG1sX2Jhc2VpbXBsLmgiCkBAIC02NjMsNyArNjY0LDcgQEAKICAgICBLVVJM
IG5ld1VSTChkb2MtPmNvbXBsZXRlVVJMKHVybCkpOwogICAgIG5ld1VSTC5zZXRSZWYoUVN0cmlu
Zzo6bnVsbCk7CiAgICAgCi0gICAgaWYgKGRvYy0+ZnJhbWUoKS0+dG9wTGV2ZWxGcmFtZUNvdW50
KCkgPj0gMjAwKQorICAgIGlmIChkb2MtPmZyYW1lKCktPnBhZ2UoKS0+ZnJhbWVDb3VudCgpID49
IDIwMCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgLy8gV2UgYWxsb3cgb25lIGxldmVs
IG9mIHNlbGYtcmVmZXJlbmNlIGJlY2F1c2Ugc29tZSBzaXRlcyBkZXBlbmQgb24gdGhhdC4KSW5k
ZXg6IFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAx
MzE2MikKKysrIFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zNiw3ICszNiw3IEBACiAJCTY1NTBCNkE1MDk5REYwMjcwMDkwRDc4MSAv
KiBUZXh0SW1wbC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA2NTUwQjY5QjA5OURGMDI3MDA5MEQ3ODEgLyogVGV4dEltcGwuY3BwICovOyB9OwogCQk2
NTUwQjZBNjA5OURGMDI3MDA5MEQ3ODEgLyogVGV4dEltcGwuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDY1NTBCNjlDMDk5REYwMjcwMDkwRDc4MSAvKiBU
ZXh0SW1wbC5oICovOyB9OwogCQk2NTUyRTdBQTA5NkFBMTFCMDAwNkYyNDggLyogV2ViQ29yZUZy
YW1lTmFtZXNwYWNlcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNjU1MkU3QTgwOTZBQTExQjAwMDZGMjQ4IC8qIFdlYkNvcmVGcmFtZU5hbWVzcGFjZXMu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQk2NTUy
RTdBQjA5NkFBMTFCMDAwNkYyNDggLyogV2ViQ29yZUZyYW1lTmFtZXNwYWNlcy5tIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNjU1MkU3QTkwOTZBQTExQjAw
MDZGMjQ4IC8qIFdlYkNvcmVGcmFtZU5hbWVzcGFjZXMubSAqLzsgfTsKKwkJNjU1MkU3QUIwOTZB
QTExQjAwMDZGMjQ4IC8qIFdlYkNvcmVGcmFtZU5hbWVzcGFjZXMubW0gaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2NTUyRTdBOTA5NkFBMTFCMDAwNkYyNDgg
LyogV2ViQ29yZUZyYW1lTmFtZXNwYWNlcy5tbSAqLzsgfTsKIAkJNjU3NDNCNTIwOTcwNzZGODAw
MUU3Q0VGIC8qIFJlbmRlclNWR1RleHQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNjU3NDNCNTAwOTcwNzZGODAwMUU3Q0VGIC8qIFJlbmRlclNWR1Rl
eHQuY3BwICovOyB9OwogCQk2NTc0M0I1MzA5NzA3NkY4MDAxRTdDRUYgLyogUmVuZGVyU1ZHVGV4
dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNjU3NDNC
NTEwOTcwNzZGODAwMUU3Q0VGIC8qIFJlbmRlclNWR1RleHQuaCAqLzsgfTsKIAkJNjU3NkY5RDYw
OUIyNDg0QTAwMDA0MUY3IC8qIFRleHRFbmNvZGluZ01hYy5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2NTc2RjlENTA5QjI0ODRBMDAwMDQxRjcgLyog
VGV4dEVuY29kaW5nTWFjLmNwcCAqLzsgfTsKQEAgLTExNTEsNyArMTE1MSw3IEBACiAJCTY1NTBC
NjlCMDk5REYwMjcwMDkwRDc4MSAvKiBUZXh0SW1wbC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gVGV4dEltcGwuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk2NTUwQjY5QzA5OURGMDI3MDA5MEQ3ODEgLyogVGV4dEltcGwuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRleHRJbXBsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTY1NTJFN0E4MDk2QUExMUIwMDA2RjI0OCAvKiBXZWJDb3JlRnJhbWVOYW1lc3BhY2Vz
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJDb3JlRnJhbWVOYW1lc3Bh
Y2VzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTY1NTJFN0E5MDk2QUExMUIwMDA2
RjI0OCAvKiBXZWJDb3JlRnJhbWVOYW1lc3BhY2VzLm0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lm9iamM7IHBhdGggPSBXZWJDb3JlRnJhbWVOYW1lc3BhY2VzLm07IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTY1NTJFN0E5MDk2QUExMUIwMDA2RjI0OCAvKiBXZWJDb3JlRnJhbWVOYW1l
c3BhY2VzLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMw
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdlYkNv
cmVGcmFtZU5hbWVzcGFjZXMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTY1NzQz
QjUwMDk3MDc2RjgwMDFFN0NFRiAvKiBSZW5kZXJTVkdUZXh0LmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZW5kZXJTVkdUZXh0LmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJNjU3NDNCNTEwOTcwNzZGODAwMUU3Q0VGIC8qIFJlbmRlclNWR1RleHQu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRlclNWR1RleHQuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNjU3NkY5RDUwOUIyNDg0QTAwMDA0MUY3IC8qIFRl
eHRFbmNvZGluZ01hYy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
VGV4dEVuY29kaW5nTWFjLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTI0ODUs
NyArMjQ4NSw3IEBACiAJCQkJNjU0RUM2MEYwOTc3NzhGNTAwREFCNTJDIC8qIFdlYkNvcmVGcmFt
ZUJyaWRnZS5oICovLAogCQkJCTY1NEVDNjEwMDk3Nzc4RjUwMERBQjUyQyAvKiBXZWJDb3JlRnJh
bWVCcmlkZ2UubW0gKi8sCiAJCQkJNjU1MkU3QTgwOTZBQTExQjAwMDZGMjQ4IC8qIFdlYkNvcmVG
cmFtZU5hbWVzcGFjZXMuaCAqLywKLQkJCQk2NTUyRTdBOTA5NkFBMTFCMDAwNkYyNDggLyogV2Vi
Q29yZUZyYW1lTmFtZXNwYWNlcy5tICovLAorCQkJCTY1NTJFN0E5MDk2QUExMUIwMDA2RjI0OCAv
KiBXZWJDb3JlRnJhbWVOYW1lc3BhY2VzLm1tICovLAogCQkJCUY1ODc4NTRDMDJERTM3NTkwMUVB
NDEyMiAvKiBXZWJDb3JlRnJhbWVWaWV3LmggKi8sCiAJCQkJRjVCMkE1MkIwMkUyMjU3MzAxODYz
NUNCIC8qIFdlYkNvcmVKYXZhU2NyaXB0LmggKi8sCiAJCQkJRjVCMkE1MkMwMkUyMjU3MzAxODYz
NUNCIC8qIFdlYkNvcmVKYXZhU2NyaXB0Lm1tICovLApAQCAtNTMyNiw3ICs1MzI2LDcgQEAKIAkJ
CQlBODhBRDUxRDA5NTI0OTlGMDAxREQxOTYgLyogWExpbmtOYW1lc1dyYXBwZXIuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJQTg4QUQ1MUUwOTUyNDk5RjAwMUREMTk2IC8qIFNWR05hbWVzV3JhcHBl
ci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBODhBRDVBQTA5NTI1MTMxMDAxREQxOTYgLyogU1ZH
Q1NTU3R5bGVTZWxlY3Rvci5jcHAgaW4gU291cmNlcyAqLywKLQkJCQk2NTUyRTdBQjA5NkFBMTFC
MDAwNkYyNDggLyogV2ViQ29yZUZyYW1lTmFtZXNwYWNlcy5tIGluIFNvdXJjZXMgKi8sCisJCQkJ
NjU1MkU3QUIwOTZBQTExQjAwMDZGMjQ4IC8qIFdlYkNvcmVGcmFtZU5hbWVzcGFjZXMubW0gaW4g
U291cmNlcyAqLywKIAkJCQlBODE2NTVENTA5NkJCRUFDMDA2MDEwNTggLyogS0NhbnZhc01hc2tl
clF1YXJ0ei5tbSBpbiBTb3VyY2VzICovLAogCQkJCUE4MTY1NUU0MDk2QkMxMzkwMDYwMTA1OCAv
KiBTVkdNYXNrRWxlbWVudEltcGwuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNjU3NDNCNTIwOTcw
NzZGODAwMUU3Q0VGIC8qIFJlbmRlclNWR1RleHQuY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBX
ZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL0NoYW5nZUxvZwkocmV2aXNp
b24gMTMxNjIpCisrKyBXZWJDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDExNyBAQAogMjAwNi0wMy0wNSAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CiAKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgLSBmaXggaHR0cDov
L2J1Z3ppbGxhLm9wZW5kYXJ3aW4ub3JnL3Nob3dfYnVnLmNnaT9pZD0zMzA4CisgICAgICAgICAg
UG9wLXVwIGJsb2NraW5nIGJsb2NrcyB3aW5kb3cub3BlbiBmb3IgYWxyZWFkeSBvcGVuIHdpbmRv
d3MKKworICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajogVXBkYXRl
IGZvciByZW5hbWUuCisgICAgICAgICogYnJpZGdlL21hYy9NYWNGcmFtZS5oOiBSZW1vdmUgZ2Vu
ZXJhdGVGcmFtZU5hbWUuCisgICAgICAgICogYnJpZGdlL21hYy9NYWNGcmFtZS5tbTogRGl0dG8u
CisgICAgICAgICogYnJpZGdlL21hYy9QYWdlTWFjLmg6IEFkZGVkIGEgZGVjbGFyYXRpb24gZm9y
IFdlYkNvcmVQYWdlQnJpZGdlLgorCisgICAgICAgICogYnJpZGdlL21hYy9XZWJDb3JlRnJhbWVC
cmlkZ2UuaDogUmVtb3ZlIF9mcmFtZU5hbWVzcGFjZSwgZ2VuZXJhdGVGcmFtZU5hbWUsCisgICAg
ICAgIHNldEZyYW1lTmFtZXNwYWNlLCBmcmFtZU5hbWVzcGFjZS4KKyAgICAgICAgKiBicmlkZ2Uv
bWFjL1dlYkNvcmVGcmFtZUJyaWRnZS5tbToKKyAgICAgICAgKC1bV2ViQ29yZUZyYW1lQnJpZGdl
IGNoaWxkRnJhbWVOYW1lZDpdKTogQ2hhbmdlIHRvIGNhbGwgdGhlIG5ldyBjaGlsZAorICAgICAg
ICBmdW5jdGlvbiBvbiB0aGUgRnJhbWVUcmVlLgorICAgICAgICAoLVtXZWJDb3JlRnJhbWVCcmlk
Z2UgZmluZEZyYW1lTmFtZWQ6XSk6IENoYW5nZSB0byBjYWxsIHRoZSBuZXcgZmluZAorICAgICAg
ICBmdW5jdGlvbiBvbiB0aGUgRnJhbWVUcmVlLgorICAgICAgICAoLVtXZWJDb3JlRnJhbWVCcmlk
Z2UgUmVuZGVyT2JqZWN0Ojpub2RlSW5mb0F0UG9pbnQ6XSk6IENoYW5nZSBzaW5jZSB0aGUKKyAg
ICAgICAgY29udGVudFBhcnQgZnVuY3Rpb24gaGFzIGJlZW4gcmVuYW1lZCB0byBjb250ZW50RnJh
bWUuCisKKyAgICAgICAgKiBicmlkZ2UvbWFjL1dlYkNvcmVGcmFtZU5hbWVzcGFjZXMuaDogUmVt
b3ZlZCBldmVyeXRoaW5nIGV4Y2VwdCBmb3IgdGhlCisgICAgICAgIG9uZSBtZXRob2Qgc3RpbGwg
dXNlZCBvbiB0aGUgV2ViS2l0IHNpZGUsIGZyYW1lc0luTmFtZXNwYWNlOi4KKyAgICAgICAgKiBi
cmlkZ2UvbWFjL1dlYkNvcmVGcmFtZU5hbWVzcGFjZXMubTogUmVuYW1lZC4KKyAgICAgICAgKiBi
cmlkZ2UvbWFjL1dlYkNvcmVGcmFtZU5hbWVzcGFjZXMubW06IEFkZGVkLiBSZWltcGxlbWVudGVk
IHRoZQorICAgICAgICBmcmFtZXNJbk5hbWVzcGFjZSBtZXRob2QgdG8gdXNlIHRoZSBuYW1lc3Bh
Y2UgaW4gV2ViQ29yZTo6UGFnZS4KKworICAgICAgICAqIGJyaWRnZS9tYWMvV2ViQ29yZVBhZ2VC
cmlkZ2UuaDogQWRkZWQgc2V0R3JvdXBOYW1lIGFuZCBncm91cE5hbWUuCisgICAgICAgICogYnJp
ZGdlL21hYy9XZWJDb3JlUGFnZUJyaWRnZS5tbToKKyAgICAgICAgKC1bV2ViQ29yZVBhZ2VCcmlk
Z2Ugc2V0R3JvdXBOYW1lOl0pOiBBZGRlZC4gQ2FsbHMgdGhyb3VnaCB0byBQYWdlLgorICAgICAg
ICAoLVtXZWJDb3JlUGFnZUJyaWRnZSBncm91cE5hbWVdKTogRGl0dG8uCisKKyAgICAgICAgKiBr
aHRtbC9lY21hL2tqc19odG1sLmNwcDoKKyAgICAgICAgKEtKUzo6SFRNTERvY3VtZW50OjpuYW1l
ZEl0ZW1HZXR0ZXIpOiBDaGFuZ2VkIHRvIGNhbGwgY29udGVudEZyYW1lIGJ5IGl0cyBuZXcgbmFt
ZS4KKyAgICAgICAgKEtKUzo6SFRNTEVsZW1lbnQ6OmZyYW1lR2V0dGVyKTogRGl0dG8uCisgICAg
ICAgIChLSlM6OkhUTUxFbGVtZW50OjppRnJhbWVHZXR0ZXIpOiBEaXR0by4KKworICAgICAgICAq
IGtodG1sL2VjbWEva2pzX3dpbmRvdy5jcHA6CisgICAgICAgIChLSlM6OldpbmRvdzo6Z2V0VmFs
dWVQcm9wZXJ0eSk6IENoYW5nZWQgdG8gY2FsbCBGcmFtZVRyZWU6OmNoaWxkQ291bnQKKyAgICAg
ICAgaW5zdGVhZCBvZiBGcmFtZTo6ZnJhbWVzLgorICAgICAgICAoS0pTOjpXaW5kb3c6OmNoaWxk
RnJhbWVHZXR0ZXIpOiBDaGFuZ2VkIHRvIGNhbGwgRnJhbWVUcmVlOjpjaGlsZAorICAgICAgICBp
bnN0ZWFkIG9mIEZyYW1lOjpjaGlsZEZyYW1lTmFtZWQuCisgICAgICAgIChLSlM6OldpbmRvdzo6
bmFtZWRGcmFtZUdldHRlcik6IENoYW5nZWQgdG8gY2FsbCBGcmFtZVRyZWU6OmZpbmQKKyAgICAg
ICAgaW5zdGVhZCBvZiBGcmFtZTo6ZmluZEZyYW1lLgorICAgICAgICAoS0pTOjpXaW5kb3c6Omlu
ZGV4R2V0dGVyKTogQ2hhbmdlZCB0byBjYWxsIEZyYW1lVHJlZTo6Y2hpbGQKKyAgICAgICAgaW5z
dGVhZCBvZiBGcmFtZTo6ZnJhbWVzLgorICAgICAgICAoS0pTOjpXaW5kb3c6OmdldE93blByb3Bl
cnR5U2xvdCk6IENoYW5nZWQgdG8gY2FsbCBGcmFtZVRyZWU6OmNoaWxkLAorICAgICAgICBGcmFt
ZVRyZWU6OmZpbmQsIGFuZCBGcmFtZVRyZWU6OmNoaWxkQ291bnQgaW5zdGVhZCBvZiBGcmFtZTo6
Y2hpbGRGcmFtZU5hbWVkLAorICAgICAgICBhbmQgRnJhbWU6OmZpbmRGcmFtZSwgYW5kIEZyYW1l
OjpmcmFtZXMuCisgICAgICAgIChLSlM6OldpbmRvd0Z1bmM6OmNhbGxBc0Z1bmN0aW9uKTogQ2Fs
bCBGcmFtZVRyZWU6OmZpbmQgdG8gY2hlY2sgaWYgdGhlIHdpbmRvdworICAgICAgICBpcyBhbHJl
YWR5IG9wZW4gd2hlbiBjb25zaWRlcmluZyB3aGV0aGVyIHRvIGJsb2NrIGEgcG9wLXVwLgorICAg
ICAgICAoS0pTOjpGcmFtZUFycmF5OjpnZXRWYWx1ZVByb3BlcnR5KTogQ2hhbmdlZCB0byBjYWxs
IEZyYW1lVHJlZTo6Y2hpbGRDb3VudAorICAgICAgICBpbnN0ZWFkIG9mIEZyYW1lOjpmcmFtZXMu
CisgICAgICAgIChLSlM6OkZyYW1lQXJyYXk6OmluZGV4R2V0dGVyKTogQ2hhbmdlZCB0byBjYWxs
IEZyYW1lVHJlZTo6Y2hpbGQKKyAgICAgICAgaW5zdGVhZCBvZiBGcmFtZTo6ZnJhbWVzLgorICAg
ICAgICAoS0pTOjpGcmFtZUFycmF5OjpuYW1lR2V0dGVyKTogQ2hhbmdlZCB0byBjYWxsIEZyYW1l
VHJlZTo6Y2hpbGQKKyAgICAgICAgaW5zdGVhZCBvZiBGcmFtZTo6ZmluZEZyYW1lLgorICAgICAg
ICAoS0pTOjpGcmFtZUFycmF5OjpnZXRPd25Qcm9wZXJ0eVNsb3QpOiBDaGFuZ2VkIHRvIGNhbGwg
RnJhbWVUcmVlOjpjaGlsZCwKKyAgICAgICAgYW5kIEZyYW1lVHJlZTo6Y2hpbGRDb3VudCBpbnN0
ZWFkIG9mIEZyYW1lOjpmaW5kRnJhbWUgYW5kIEZyYW1lOjpmcmFtZXMuCisKKyAgICAgICAgKiBr
aHRtbC9odG1sL2h0bWxfYmFzZWltcGwuaDoKKyAgICAgICAgKiBraHRtbC9odG1sL2h0bWxfYmFz
ZWltcGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZyYW1lRWxlbWVudEltcGw6OmlzVVJM
QWxsb3dlZCk6IENoYW5nZWQgdG8gY2FsbCBQYWdlOjpmcmFtZUNvdW50CisgICAgICAgIGluc3Rl
YWQgb2YgRnJhbWU6OnRvcExldmVsRnJhbWVDb3VudC4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxG
cmFtZUVsZW1lbnRJbXBsOjpvcGVuVVJMKTogQ2hhbmdlZCB0byBjYWxsIEZyYW1lVHJlZTo6Y2hp
bGQKKyAgICAgICAgaW5zdGVhZCBvZiBGcmFtZTo6ZmluZEZyYW1lLgorICAgICAgICAoV2ViQ29y
ZTo6SFRNTEZyYW1lRWxlbWVudEltcGw6OmF0dGFjaCk6IENoYW5nZWQgdG8gY2FsbCBQYWdlOjpp
bmNyZW1lbnRGcmFtZUNvdW50CisgICAgICAgIGluc3RlYWQgb2YgRnJhbWU6OmluY3JlbWVudEZy
YW1lQ291bnQuIENoYW5nZWQgdG8gY2FsbCBGcmFtZVRyZWU6Om5hbWVGb3JOZXdDaGlsZAorICAg
ICAgICBpbnN0ZWFkIG9mIEZyYW1lOjpyZXF1ZXN0RnJhbWVOYW1lLgorICAgICAgICAoV2ViQ29y
ZTo6SFRNTEZyYW1lRWxlbWVudEltcGw6OmNsb3NlKTogQ2hhbmdlZCB0byBjYWxsIFBhZ2U6OmRl
Y3JlbWVudEZyYW1lQ291bnQKKyAgICAgICAgaW5zdGVhZCBvZiBGcmFtZTo6ZGVjcmVtZW50RnJh
bWVDb3VudC4gQ2hhbmdlZCB0byBjYWxsIEZyYW1lVHJlZTo6Y2hpbGQKKyAgICAgICAgaW5zdGVh
ZCBvZiBGcmFtZTo6ZmluZEZyYW1lLgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZyYW1lRWxlbWVu
dEltcGw6OmNvbnRlbnRGcmFtZSk6IFJlbmFtZWQgZnJvbSBjb250ZW50UGFydC4gQWxzbworICAg
ICAgICBjaGFuZ2VkIHRvIGNhbGwgRnJhbWVUcmVlOjpjaGlsZCBpbnN0ZWFkIG9mIEZyYW1lOjpm
aW5kRnJhbWUuCisgICAgICAgIChXZWJDb3JlOjpIVE1MRnJhbWVFbGVtZW50SW1wbDo6Y29udGVu
dERvY3VtZW50KTogVXBkYXRlZCBmb3IgbmFtZSBjaGFuZ2Ugb2YKKyAgICAgICAgY29udGVudEZy
YW1lIGZyb20gY29udGVudFBhcnQuCisgICAgICAgIChXZWJDb3JlOjpIVE1MSUZyYW1lRWxlbWVu
dEltcGw6OmF0dGFjaCk6IENoYW5nZWQgdG8gY2FsbCBQYWdlOjppbmNyZW1lbnRGcmFtZUNvdW50
CisgICAgICAgIGluc3RlYWQgb2YgRnJhbWU6OmluY3JlbWVudEZyYW1lQ291bnQuIENoYW5nZWQg
dG8gY2FsbCBGcmFtZVRyZWU6Om5hbWVGb3JOZXdDaGlsZAorICAgICAgICBpbnN0ZWFkIG9mIEZy
YW1lOjpyZXF1ZXN0RnJhbWVOYW1lLgorCisgICAgICAgICogcmVuZGVyaW5nL3JlbmRlcl9mcmFt
ZXMuY3BwOiAoV2ViQ29yZTo6aXNVUkxBbGxvd2VkKTogQ2hhbmdlZCB0byBjYWxsIFBhZ2U6OmZy
YW1lQ291bnQKKyAgICAgICAgaW5zdGVhZCBvZiBGcmFtZTo6dG9wTGV2ZWxGcmFtZUNvdW50Lgor
CisgICAgICAgICogcGFnZS9GcmFtZS5oOiBSZW1vdmVkIGZyYW1lTmFtZXMsIGZyYW1lcywgY2hp
bGRGcmFtZU5hbWVkLCBmaW5kRnJhbWUsIGN1cnJlbnRGcmFtZSwKKyAgICAgICAgZnJhbWVFeGlz
dHMsIGluY3JlbWVudEZyYW1lQ291bnQsIGRlY3JlbWVudEZyYW1lQ291bnQsIHRvcExldmVsRnJh
bWVDb3VudCwKKyAgICAgICAgZ2VuZXJhdGVGcmFtZU5hbWUsIGFuZCByZXF1ZXN0RnJhbWVOYW1l
IGZ1bmN0aW9ucy4KKyAgICAgICAgKiBwYWdlL0ZyYW1lLmNwcDogKFdlYkNvcmU6OkZyYW1lOjpy
ZXF1ZXN0RnJhbWUpOiBDaGFuZ2VkIHRvIHVzZSBGcmFtZVRyZWU6OmNoaWxkCisgICAgICAgIGlu
c3RlYWQgb2YgRnJhbWU6OmNoaWxkRnJhbWVOYW1lZC4KKworICAgICAgICAqIHBhZ2UvRnJhbWVU
cmVlLmg6IENoYW5nZWQgbmFtZSB0byBhbiBhdG9taWMgc3RyaW5nLiBDaGFuZ2VkIGNoaWxkQ291
bnQgdG8gdW5zaWduZWQuCisgICAgICAgIEFkZGVkIGlzRGVzY2VuZGFudE9mLCB0cmF2ZXJzZU5l
eHQsIGNoaWxkLCBmaW5kLCBuYW1lRm9yTmV3Q2hpbGQuCisgICAgICAgICogcGFnZS9GcmFtZVRy
ZWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVUcmVlOjpzZXROYW1lKTogQ2hhbmdlZCB0
byBjYWxsIG5hbWVGb3JOZXdDaGlsZCB0byBoYW5kbGUgbmFtZQorICAgICAgICBkdXBsaWNhdGlv
biBsb2dpYy4KKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lVHJlZTo6bmFtZUZvck5ld0NoaWxkKTog
QWRkZWQuIENoZWNrcyBmb3IgZHVwbGljYXRpb24gYW5kIGdlbmVyYXRlcworICAgICAgICBhbiBh
cHByb3ByaWF0ZSBmcmFtZSBuYW1lIGlmIHRoZXJlIGlzIGEgZHVwbGljYXRlLgorICAgICAgICAo
V2ViQ29yZTo6RnJhbWVUcmVlOjpjaGlsZCk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6RnJh
bWVUcmVlOjpmaW5kKTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpGcmFtZVRyZWU6OmlzRGVz
Y2VuZGFudE9mKTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpGcmFtZVRyZWU6OnRyYXZlcnNl
TmV4dCk6IEFkZGVkLgorCisgICAgICAgICogcGFnZS9QYWdlLmg6IEFkZGVkIHNldEdyb3VwTmFt
ZSwgZ3JvdXBOYW1lLCBmcmFtZU5hbWVzcGFjZSwgaW5jcmVtZW50RnJhbWVDb3VudCwKKyAgICAg
ICAgZGVjcmVtZW50RnJhbWVDb3VudCwgYW5kIGZyYW1lQ291bnQuCisgICAgICAgICogcGFnZS9Q
YWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2U6OlBhZ2UpOiBJbml0aWFsaXplIG1fZnJh
bWVDb3VudCB0byAwLgorICAgICAgICAoV2ViQ29yZTo6UGFnZTo6flBhZ2UpOiBDYWxsIHNldEdy
b3VwTmFtZSB0byByZW1vdmUgdGhlIHBhZ2UgZnJvbSBhbnkgZ3JvdXAgaXQncyBpbi4KKyAgICAg
ICAgKFdlYkNvcmU6OlBhZ2U6OnNldEdyb3VwTmFtZSk6IEFkZGVkLgorICAgICAgICAoV2ViQ29y
ZTo6UGFnZTo6ZnJhbWVOYW1lc3BhY2UpOiBBZGRlZC4KKworICAgICAgICAqIHBsYXRmb3JtL3dp
bi9UZW1wb3JhcnlMaW5rU3R1YnMuY3BwOiBSZW1vdmVkIEZyYW1lV2luOjpnZW5lcmF0ZUZyYW1l
TmFtZS4KKworMjAwNi0wMy0wNSAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisKICAg
ICAgICAgUmV2aWV3ZWQgYnkgTWFjaWVqLgogCiAgICAgICAgIC0gZml4IGZhaWx1cmUgc2VlbiBy
dW5uaW5nIGVkaXRpbmcgbGF5b3V0IHRlc3RzCkluZGV4OiBXZWJDb3JlL2JyaWRnZS9tYWMvTWFj
RnJhbWUubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9icmlkZ2UvbWFjL01hY0ZyYW1lLm1tCShy
ZXZpc2lvbiAxMzE2MikKKysrIFdlYkNvcmUvYnJpZGdlL21hYy9NYWNGcmFtZS5tbQkod29ya2lu
ZyBjb3B5KQpAQCAtMTUyLDE1ICsxNTIsNiBAQAogICAgICAgICBfZHJhZ0NsaXBib2FyZC0+c2V0
QWNjZXNzUG9saWN5KEtXUUNsaXBib2FyZDo6TnVtYik7CiB9CiAKLURPTVN0cmluZyBNYWNGcmFt
ZTo6Z2VuZXJhdGVGcmFtZU5hbWUoKQotewotICAgIEtXUV9CTE9DS19FWENFUFRJT05TOwotICAg
IHJldHVybiBbX2JyaWRnZSBnZW5lcmF0ZUZyYW1lTmFtZV07Ci0gICAgS1dRX1VOQkxPQ0tfRVhD
RVBUSU9OUzsKLQotICAgIHJldHVybiBRU3RyaW5nKCk7Ci19Ci0KIGJvb2wgTWFjRnJhbWU6Om9w
ZW5VUkwoY29uc3QgS1VSTCAmdXJsKQogewogICAgIEtXUV9CTE9DS19FWENFUFRJT05TOwpJbmRl
eDogV2ViQ29yZS9icmlkZ2UvbWFjL1BhZ2VNYWMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Jy
aWRnZS9tYWMvUGFnZU1hYy5oCShyZXZpc2lvbiAxMzE2MikKKysrIFdlYkNvcmUvYnJpZGdlL21h
Yy9QYWdlTWFjLmgJKHdvcmtpbmcgY29weSkKQEAgLTIzLDYgKzIzLDEyIEBACiAKICNpbmNsdWRl
ICJQYWdlLmgiCiAKKyNpZmRlZiBfX09CSkNfXworQGNsYXNzIFdlYkNvcmVQYWdlQnJpZGdlOwor
I2Vsc2UKK2NsYXNzIFdlYkNvcmVQYWdlQnJpZGdlOworI2VuZGlmCisKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAogICAgIGNsYXNzIFBhZ2VNYWMgOiBwdWJsaWMgUGFnZSB7CkluZGV4OiBXZWJDb3Jl
L2JyaWRnZS9tYWMvV2ViQ29yZVBhZ2VCcmlkZ2UubW0KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9i
cmlkZ2UvbWFjL1dlYkNvcmVQYWdlQnJpZGdlLm1tCShyZXZpc2lvbiAxMzE2MikKKysrIFdlYkNv
cmUvYnJpZGdlL21hYy9XZWJDb3JlUGFnZUJyaWRnZS5tbQkod29ya2luZyBjb3B5KQpAQCAtODks
NiArODksMTYgQEAKICAgICByZXR1cm4gTWFjKF9wYWdlLT5tYWluRnJhbWUoKSktPmJyaWRnZSgp
OwogfQogCistICh2b2lkKXNldEdyb3VwTmFtZTooTlNTdHJpbmcgKilncm91cE5hbWUKK3sKKyAg
ICBfcGFnZS0+c2V0R3JvdXBOYW1lKGdyb3VwTmFtZSk7Cit9CisKKy0gKE5TU3RyaW5nICopZ3Jv
dXBOYW1lCit7CisgICAgcmV0dXJuIF9wYWdlLT5ncm91cE5hbWUoKTsKK30KKwogQGVuZAogCiBA
aW1wbGVtZW50YXRpb24gV2ViQ29yZVBhZ2VCcmlkZ2UgKFdlYkNvcmVJbnRlcm5hbFVzZSkKSW5k
ZXg6IFdlYkNvcmUvYnJpZGdlL21hYy9XZWJDb3JlRnJhbWVCcmlkZ2UubW0KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9icmlkZ2UvbWFjL1dlYkNvcmVGcmFtZUJyaWRnZS5tbQkocmV2aXNpb24gMTMx
NjIpCisrKyBXZWJDb3JlL2JyaWRnZS9tYWMvV2ViQ29yZUZyYW1lQnJpZGdlLm1tCSh3b3JraW5n
IGNvcHkpCkBAIC01MCw3ICs1MCw2IEBACiAjaW1wb3J0ICJOb2RlSW1wbC5oIgogI2ltcG9ydCAi
UGFnZU1hYy5oIgogI2ltcG9ydCAiU2VsZWN0aW9uQ29udHJvbGxlci5oIgotI2ltcG9ydCAiV2Vi
Q29yZUZyYW1lTmFtZXNwYWNlcy5oIgogI2ltcG9ydCAiV2ViQ29yZVBhZ2VCcmlkZ2UuaCIKICNp
bXBvcnQgIldlYkNvcmVTZXR0aW5ncy5oIgogI2ltcG9ydCAiV2ViQ29yZVRleHRSZW5kZXJlckZh
Y3RvcnkuaCIKQEAgLTMzMiwxMyArMzMxLDcgQEAKIAogLSAoV2ViQ29yZUZyYW1lQnJpZGdlICop
Y2hpbGRGcmFtZU5hbWVkOihOU1N0cmluZyAqKW5hbWUKIHsKLSAgICAvLyBGSVhNRTogd2l0aCBh
IGJldHRlciBkYXRhIHN0cnVjdHVyZSB0aGlzIGNvdWxkIGJlIE8oMSkgaW5zdGVhZCBvZiBPKG4p
IGluIG51bWJlciAKLSAgICAvLyBvZiBjaGlsZCBmcmFtZXMKLSAgICBmb3IgKFdlYkNvcmVGcmFt
ZUJyaWRnZSAqY2hpbGQgPSBbc2VsZiBmaXJzdENoaWxkXTsgY2hpbGQ7IGNoaWxkID0gW2NoaWxk
IG5leHRTaWJsaW5nXSkKLSAgICAgICAgaWYgKFtbY2hpbGQgbmFtZV0gaXNFcXVhbFRvU3RyaW5n
Om5hbWVdKQotICAgICAgICAgICAgcmV0dXJuIGNoaWxkOwotCi0gICAgcmV0dXJuIG5pbDsKKyAg
ICByZXR1cm4gYnJpZGdlKG1fZnJhbWUtPnRyZWUoKS0+Y2hpbGQobmFtZSkpOwogfQogCiAvLyBS
ZXR1cm5zIHRoZSBsYXN0IGNoaWxkIG9mIHVzIGFuZCBhbnkgY2hpbGRyZW4sIG9yIHNlbGYKQEAg
LTM3OSwyNSArMzcyLDYgQEAKICAgICByZXR1cm4gbmlsOwogfQogCi0tICh2b2lkKXNldEZyYW1l
TmFtZXNwYWNlOihOU1N0cmluZyAqKW5zCi17Ci0gICAgQVNTRVJUKHNlbGYgPT0gW1tzZWxmIHBh
Z2VdIG1haW5GcmFtZV0pOwotCi0gICAgaWYgKG5zICE9IF9mcmFtZU5hbWVzcGFjZSl7Ci0gICAg
ICAgIFtXZWJDb3JlRnJhbWVOYW1lc3BhY2VzIHJlbW92ZUZyYW1lOnNlbGYgZnJvbU5hbWVzcGFj
ZTpfZnJhbWVOYW1lc3BhY2VdOwotICAgICAgICBucyA9IFtucyBjb3B5XTsKLSAgICAgICAgW19m
cmFtZU5hbWVzcGFjZSByZWxlYXNlXTsKLSAgICAgICAgX2ZyYW1lTmFtZXNwYWNlID0gbnM7Ci0g
ICAgICAgIFtXZWJDb3JlRnJhbWVOYW1lc3BhY2VzIGFkZEZyYW1lOnNlbGYgdG9OYW1lc3BhY2U6
X2ZyYW1lTmFtZXNwYWNlXTsKLSAgICB9Ci19Ci0KLS0gKE5TU3RyaW5nICopZnJhbWVOYW1lc3Bh
Y2UKLXsKLSAgICBBU1NFUlQoc2VsZiA9PSBbW3NlbGYgcGFnZV0gbWFpbkZyYW1lXSk7Ci0gICAg
cmV0dXJuIF9mcmFtZU5hbWVzcGFjZTsKLX0KLQogLSAoQk9PTClfc2hvdWxkQWxsb3dBY2Nlc3NG
cm9tOihXZWJDb3JlRnJhbWVCcmlkZ2UgKilzb3VyY2UKIHsKICAgICAvLyBpZiBubyBzb3VyY2Ug
ZnJhbWUsIGFsbG93IGFjY2VzcwpAQCAtNDM3LDY0ICs0MTEsOSBAQAogICAgIHJldHVybiBOTzsK
IH0KIAotLSAoV2ViQ29yZUZyYW1lQnJpZGdlICopX2Rlc2NlbmRhbnRGcmFtZU5hbWVkOihOU1N0
cmluZyAqKW5hbWUgc291cmNlRnJhbWU6KFdlYkNvcmVGcmFtZUJyaWRnZSAqKXNvdXJjZQotewot
ICAgIGZvciAoV2ViQ29yZUZyYW1lQnJpZGdlICpmcmFtZSA9IHNlbGY7IGZyYW1lOyBmcmFtZSA9
IFtmcmFtZSB0cmF2ZXJzZU5leHRGcmFtZVN0YXlXaXRoaW46c2VsZl0pCi0gICAgICAgIC8vIGZv
ciBzZWN1cml0eSByZWFzb25zLCB3ZSBkbyBub3Qgd2FudCB0byBldmVuIG1ha2UgZnJhbWVzIHZp
c2libGUgdG8gZnJhbWVzIHRoYXQKLSAgICAgICAgLy8gY2FuJ3QgYWNjZXNzIHRoZW0gCi0gICAg
ICAgIGlmIChbW2ZyYW1lIG5hbWVdIGlzRXF1YWxUb1N0cmluZzpuYW1lXSAmJiBbZnJhbWUgX3No
b3VsZEFsbG93QWNjZXNzRnJvbTpzb3VyY2VdKQotICAgICAgICAgICAgcmV0dXJuIGZyYW1lOwot
Ci0gICAgcmV0dXJuIG5pbDsKLX0KLQotLSAoV2ViQ29yZUZyYW1lQnJpZGdlICopX2ZyYW1lSW5B
bnlXaW5kb3dOYW1lZDooTlNTdHJpbmcgKiluYW1lIHNvdXJjZUZyYW1lOihXZWJDb3JlRnJhbWVC
cmlkZ2UgKilzb3VyY2UKLXsKLSAgICBBU1NFUlQoc2VsZiA9PSBbW3NlbGYgcGFnZV0gbWFpbkZy
YW1lXSk7Ci0KLSAgICAvLyBUcnkgdGhpcyBXZWJWaWV3IGZpcnN0LgotICAgIFdlYkNvcmVGcmFt
ZUJyaWRnZSAqZnJhbWUgPSBbc2VsZiBfZGVzY2VuZGFudEZyYW1lTmFtZWQ6bmFtZSBzb3VyY2VG
cmFtZTpzb3VyY2VdOwotCi0gICAgaWYgKGZyYW1lICE9IG5pbCkKLSAgICAgICAgcmV0dXJuIGZy
YW1lOwotCi0gICAgLy8gVHJ5IG90aGVyIFdlYlZpZXdzIGluIHRoZSBzYW1lIHNldAotCi0gICAg
aWYgKFtzZWxmIGZyYW1lTmFtZXNwYWNlXSAhPSBuaWwpIHsKLSAgICAgICAgTlNFbnVtZXJhdG9y
ICplbnVtZXJhdG9yID0gW1dlYkNvcmVGcmFtZU5hbWVzcGFjZXMgZnJhbWVzSW5OYW1lc3BhY2U6
W3NlbGYgZnJhbWVOYW1lc3BhY2VdXTsKLSAgICAgICAgV2ViQ29yZUZyYW1lQnJpZGdlICpzZWFy
Y2hGcmFtZTsKLSAgICAgICAgd2hpbGUgKChzZWFyY2hGcmFtZSA9IFtlbnVtZXJhdG9yIG5leHRP
YmplY3RdKSkKLSAgICAgICAgICAgIGZyYW1lID0gW3NlYXJjaEZyYW1lIF9kZXNjZW5kYW50RnJh
bWVOYW1lZDpuYW1lIHNvdXJjZUZyYW1lOnNvdXJjZV07Ci0gICAgfQotCi0gICAgcmV0dXJuIGZy
YW1lOwotfQotCiAtIChXZWJDb3JlRnJhbWVCcmlkZ2UgKilmaW5kRnJhbWVOYW1lZDooTlNTdHJp
bmcgKiluYW1lCiB7Ci0gICAgLy8gRmlyc3QsIGRlYWwgd2l0aCAnc3BlY2lhbCcgbmFtZXMuCi0g
ICAgaWYgKFtuYW1lIGlzRXF1YWxUb1N0cmluZzpAIl9zZWxmIl0gfHwgW25hbWUgaXNFcXVhbFRv
U3RyaW5nOkAiX2N1cnJlbnQiXSkKLSAgICAgICAgcmV0dXJuIHNlbGY7Ci0gICAgCi0gICAgaWYg
KFtuYW1lIGlzRXF1YWxUb1N0cmluZzpAIl90b3AiXSkKLSAgICAgICAgcmV0dXJuIFtbc2VsZiBw
YWdlXSBtYWluRnJhbWVdOwotICAgIAotICAgIGlmIChbbmFtZSBpc0VxdWFsVG9TdHJpbmc6QCJf
cGFyZW50Il0pIHsKLSAgICAgICAgV2ViQ29yZUZyYW1lQnJpZGdlICpwYXJlbnQgPSBbc2VsZiBw
YXJlbnRdOwotICAgICAgICByZXR1cm4gcGFyZW50ID8gcGFyZW50IDogc2VsZjsKLSAgICB9Ci0g
ICAgCi0gICAgaWYgKFtuYW1lIGlzRXF1YWxUb1N0cmluZzpAIl9ibGFuayJdKQotICAgICAgICBy
ZXR1cm4gbmlsOwotCi0gICAgLy8gU2VhcmNoIGZyb20gdGhpcyBmcmFtZSBkb3duLgotICAgIFdl
YkNvcmVGcmFtZUJyaWRnZSAqZnJhbWUgPSBbc2VsZiBfZGVzY2VuZGFudEZyYW1lTmFtZWQ6bmFt
ZSBzb3VyY2VGcmFtZTpzZWxmXTsKLQotICAgIC8vIFNlYXJjaCBpbiB0aGUgbWFpbiBmcmFtZSBm
b3IgdGhpcyB3aW5kb3cgdGhlbiBpbiBvdGhlcnMuCi0gICAgaWYgKCFmcmFtZSkKLSAgICAgICAg
ZnJhbWUgPSBbW1tzZWxmIHBhZ2VdIG1haW5GcmFtZV0gX2ZyYW1lSW5BbnlXaW5kb3dOYW1lZDpu
YW1lIHNvdXJjZUZyYW1lOnNlbGZdOwotCi0gICAgcmV0dXJuIGZyYW1lOworICAgIHJldHVybiBi
cmlkZ2UobV9mcmFtZS0+dHJlZSgpLT5maW5kKG5hbWUpKTsKIH0KIAogKyAoTlNBcnJheSAqKXN1
cHBvcnRlZE1JTUVUeXBlcwpAQCAtMTQ5NywzOCArMTQxNiw2IEBACiAgICAgcmV0dXJuIG1fZnJh
bWUtPnRyZWUoKS0+bmFtZSgpOwogfQogCi0tICh2b2lkKV9hZGRGcmFtZVBhdGhUb1N0cmluZzoo
TlNNdXRhYmxlU3RyaW5nICopcGF0aAotewotICAgIE5TU3RyaW5nICpuYW1lID0gW3NlbGYgbmFt
ZV07Ci0gICAgaWYgKFtuYW1lIGhhc1ByZWZpeDpAIjwhLS1mcmFtZVBhdGggIl0pIHsKLSAgICAg
ICAgLy8gd2UgaGF2ZSBhIGdlbmVyYXRlZCBuYW1lIC0gdGFrZSB0aGUgcGF0aCBmcm9tIG91ciBu
YW1lCi0gICAgICAgIE5TUmFuZ2Ugb3VyUGF0aFJhbmdlID0gezE0LCBbbmFtZSBsZW5ndGhdIC0g
MTQgLSAzfTsKLSAgICAgICAgW3BhdGggYXBwZW5kU3RyaW5nOltuYW1lIHN1YnN0cmluZ1dpdGhS
YW5nZTpvdXJQYXRoUmFuZ2VdXTsKLSAgICB9IGVsc2UgewotICAgICAgICAvLyB3ZSBkb24ndCBo
YXZlIGEgZ2VuZXJhdGVkIG5hbWUgLSBqdXN0IGFkZCBvdXIgc2ltcGxlIG5hbWUgdG8gdGhlIGVu
ZAotICAgICAgICBbW3NlbGYgcGFyZW50XSBfYWRkRnJhbWVQYXRoVG9TdHJpbmc6cGF0aF07Ci0g
ICAgICAgIFtwYXRoIGFwcGVuZFN0cmluZzpAIi8iXTsKLSAgICAgICAgaWYgKG5hbWUpCi0gICAg
ICAgICAgICBbcGF0aCBhcHBlbmRTdHJpbmc6bmFtZV07Ci0gICAgfQotfQotCi0vLyBHZW5lcmF0
ZSBhIHJlcGVhdGFibGUgbmFtZSBmb3IgYSBjaGlsZCBhYm91dCB0byBiZSBhZGRlZCB0byB1cy4g
IFRoZSBuYW1lIG11c3QgYmUKLS8vIHVuaXF1ZSB3aXRoaW4gdGhlIGZyYW1lIHRyZWUuICBUaGUg
c3RyaW5nIHdlIGdlbmVyYXRlIGluY2x1ZGVzIGEgInBhdGgiIG9mIG5hbWVzCi0vLyBmcm9tIHRo
ZSByb290IGZyYW1lIGRvd24gdG8gdXMuICBGb3IgdGhpcyBwYXRoIHRvIGJlIHVuaXF1ZSwgZWFj
aCBzZXQgb2Ygc2libGluZ3MgbXVzdAotLy8gY29udHJpYnV0ZSBhIHVuaXF1ZSBuYW1lIHRvIHRo
ZSBwYXRoLCB3aGljaCBjYW4ndCBjb2xsaWRlIHdpdGggYW55IEhUTUwtYXNzaWduZWQgbmFtZXMu
Ci0vLyBXZSBnZW5lcmF0ZSB0aGlzIHBhdGggY29tcG9uZW50IGJ5IGluZGV4IGluIHRoZSBjaGls
ZCBsaXN0IGFsb25nIHdpdGggYW4gdW5saWtlbHkgZnJhbWUgbmFtZS4KLS0gKE5TU3RyaW5nICop
Z2VuZXJhdGVGcmFtZU5hbWUKLXsKLSAgICBOU011dGFibGVTdHJpbmcgKnBhdGggPSBbTlNNdXRh
YmxlU3RyaW5nIHN0cmluZ1dpdGhDYXBhY2l0eToyNTZdOwotICAgIFtwYXRoIGluc2VydFN0cmlu
ZzpAIjwhLS1mcmFtZVBhdGggIiBhdEluZGV4OjBdOwotICAgIFtzZWxmIF9hZGRGcmFtZVBhdGhU
b1N0cmluZzpwYXRoXTsKLSAgICAvLyBUaGUgbmV3IGNoaWxkJ3MgcGF0aCBjb21wb25lbnQgaXMg
YWxsIGJ1dCB0aGUgMXN0IGNoYXIgYW5kIHRoZSBsYXN0IDMgY2hhcnMKLSAgICAvLyBGSVhNRTog
U2hvdWxkbid0IHRoaXMgbnVtYmVyIGJlIHRoZSBpbmRleCBvZiB0aGlzIGZyYW1lIGluIGl0cyBw
YXJlbnQgcmF0aGVyIHRoYW4gdGhlIGNoaWxkIGNvdW50PwotICAgIFtwYXRoIGFwcGVuZEZvcm1h
dDpAIi88IS0tZnJhbWUlZC0tPi0tPiIsIFtzZWxmIGNoaWxkQ291bnRdXTsKLSAgICByZXR1cm4g
cGF0aDsKLX0KLQogLSAoTlNVUkwgKilVUkwKIHsKICAgICByZXR1cm4gbV9mcmFtZS0+dXJsKCku
Z2V0TlNVUkwoKTsKQEAgLTE5OTIsNyArMTg3OSw3IEBACiB9CiAKIC8vIERldGVybWluZXMgd2hl
dGhlciB3aGl0ZXNwYWNlIG5lZWRzIHRvIGJlIGFkZGVkIGFyb3VuZCBhU3RyaW5nIHRvIHByZXNl
cnZlIHByb3BlciBzcGFjaW5nIGFuZAotLy8gcHVuY3R1YXRpb24gd2hlbiBpdOKAmXMgaW5zZXJ0
ZWQgaW50byB0aGUgcmVjZWl2ZXLigJlzIHRleHQgb3ZlciBjaGFyUmFuZ2UuIFJldHVybnMgYnkg
cmVmZXJlbmNlCisvLyBwdW5jdHVhdGlvbiB3aGVuIGl01XMgaW5zZXJ0ZWQgaW50byB0aGUgcmVj
ZWl2ZXLVcyB0ZXh0IG92ZXIgY2hhclJhbmdlLiBSZXR1cm5zIGJ5IHJlZmVyZW5jZQogLy8gaW4g
YmVmb3JlU3RyaW5nIGFuZCBhZnRlclN0cmluZyBhbnkgd2hpdGVzcGFjZSB0aGF0IHNob3VsZCBi
ZSBhZGRlZCwgdW5sZXNzIGVpdGhlciBvciBib3RoIGFyZQogLy8gbmlsLiBCb3RoIGFyZSByZXR1
cm5lZCBhcyBuaWwgaWYgYVN0cmluZyBpcyBuaWwgb3IgaWYgc21hcnQgaW5zZXJ0aW9uIGFuZCBk
ZWxldGlvbiBhcmUgZGlzYWJsZWQuCiAtICh2b2lkKXNtYXJ0SW5zZXJ0Rm9yU3RyaW5nOihOU1N0
cmluZyAqKXBhc3RlU3RyaW5nIHJlcGxhY2luZ1JhbmdlOihET01SYW5nZSAqKXJhbmdlVG9SZXBs
YWNlIGJlZm9yZVN0cmluZzooTlNTdHJpbmcgKiopYmVmb3JlU3RyaW5nIGFmdGVyU3RyaW5nOihO
U1N0cmluZyAqKilhZnRlclN0cmluZwpAQCAtMjU4MCw4ICsyNDY3LDggQEAKICAgICAgICAgd2lk
Z2V0ID0gc3RhdGljX2Nhc3Q8UmVuZGVyV2lkZ2V0ICo+KG4tPnJlbmRlcmVyKCkpLT53aWRnZXQo
KTsKICAgICAgICAgaWYgKCF3aWRnZXQgfHwgIXdpZGdldC0+aXNGcmFtZVZpZXcoKSkKICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICBGcmFtZSAqa3BhcnQgPSBzdGF0aWNfY2FzdDxIVE1MRnJh
bWVFbGVtZW50SW1wbCAqPihuKS0+Y29udGVudFBhcnQoKTsKLSAgICAgICAgaWYgKCFrcGFydCB8
fCAhc3RhdGljX2Nhc3Q8TWFjRnJhbWUgKj4oa3BhcnQpLT5yZW5kZXJlcigpKQorICAgICAgICBG
cmFtZSogZnJhbWUgPSBzdGF0aWNfY2FzdDxIVE1MRnJhbWVFbGVtZW50SW1wbCAqPihuKS0+Y29u
dGVudEZyYW1lKCk7CisgICAgICAgIGlmICghZnJhbWUgfHwgIWZyYW1lLT5yZW5kZXJlcigpKQog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGludCBhYnNYLCBhYnNZOwogICAgICAgICBuLT5y
ZW5kZXJlcigpLT5hYnNvbHV0ZVBvc2l0aW9uKGFic1gsIGFic1ksIHRydWUpOwpAQCAtMjU5MCw3
ICsyNDc3LDcgQEAKICAgICAgICAgd2lkZ2V0UG9pbnQuc2V0WSh3aWRnZXRQb2ludC55KCkgLSBh
YnNZICsgdmlldy0+Y29udGVudHNZKCkpOwogCiAgICAgICAgIFJlbmRlck9iamVjdDo6Tm9kZUlu
Zm8gd2lkZ2V0Tm9kZUluZm8odHJ1ZSwgdHJ1ZSk7Ci0gICAgICAgIHN0YXRpY19jYXN0PE1hY0Zy
YW1lICo+KGtwYXJ0KS0+cmVuZGVyZXIoKS0+bGF5ZXIoKS0+aGl0VGVzdCh3aWRnZXROb2RlSW5m
bywgd2lkZ2V0UG9pbnQueCgpLCB3aWRnZXRQb2ludC55KCkpOworICAgICAgICBmcmFtZS0+cmVu
ZGVyZXIoKS0+bGF5ZXIoKS0+aGl0VGVzdCh3aWRnZXROb2RlSW5mbywgd2lkZ2V0UG9pbnQueCgp
LCB3aWRnZXRQb2ludC55KCkpOwogICAgICAgICBub2RlSW5mbyA9IHdpZGdldE5vZGVJbmZvOwog
ICAgIH0KICAgICAKSW5kZXg6IFdlYkNvcmUvYnJpZGdlL21hYy9XZWJDb3JlUGFnZUJyaWRnZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYnJpZGdlL21hYy9XZWJDb3JlUGFnZUJyaWRnZS5oCShy
ZXZpc2lvbiAxMzE2MikKKysrIFdlYkNvcmUvYnJpZGdlL21hYy9XZWJDb3JlUGFnZUJyaWRnZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC01NCw2ICs1NCw5IEBACiAKIC0gKFdlYkNvcmVGcmFtZUJyaWRn
ZSAqKW1haW5GcmFtZTsKIAorLSAodm9pZClzZXRHcm91cE5hbWU6KE5TU3RyaW5nICopZ3JvdXBO
YW1lOworLSAoTlNTdHJpbmcgKilncm91cE5hbWU7CisKIEBlbmQKIAogLy8gVGhlIFdlYkNvcmVQ
YWdlQnJpZGdlIHByb3RvY29sIGNvbnRhaW5zIG1ldGhvZHMgZm9yIHVzZSBieSB0aGUgV2ViQ29y
ZSBzaWRlIG9mIHRoZSBicmlkZ2UuCkluZGV4OiBXZWJDb3JlL2JyaWRnZS9tYWMvV2ViQ29yZUZy
YW1lTmFtZXNwYWNlcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYnJpZGdlL21hYy9XZWJDb3Jl
RnJhbWVOYW1lc3BhY2VzLmgJKHJldmlzaW9uIDEzMTYyKQorKysgV2ViQ29yZS9icmlkZ2UvbWFj
L1dlYkNvcmVGcmFtZU5hbWVzcGFjZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYgQXBwbGUgQ29tcHV0ZXIs
IEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTI4LDEwICsyOCw2IEBACiAKICNpbXBvcnQgPEZvdW5kYXRpb24vRm91bmRhdGlvbi5o
PgogCi1AY2xhc3MgV2ViQ29yZUZyYW1lQnJpZGdlOwotCiBAaW50ZXJmYWNlIFdlYkNvcmVGcmFt
ZU5hbWVzcGFjZXMgOiBOU09iamVjdAotKyAodm9pZClhZGRGcmFtZTooV2ViQ29yZUZyYW1lQnJp
ZGdlICopZnJhbWUgdG9OYW1lc3BhY2U6KE5TU3RyaW5nICopbmFtZTsKLSsgKHZvaWQpcmVtb3Zl
RnJhbWU6KFdlYkNvcmVGcmFtZUJyaWRnZSAqKWZyYW1lIGZyb21OYW1lc3BhY2U6KE5TU3RyaW5n
ICopbmFtZTsKICsgKE5TRW51bWVyYXRvciAqKWZyYW1lc0luTmFtZXNwYWNlOihOU1N0cmluZyAq
KW5hbWU7CiBAZW5kCkluZGV4OiBXZWJDb3JlL2JyaWRnZS9tYWMvV2ViQ29yZUZyYW1lTmFtZXNw
YWNlcy5tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYnJpZGdlL21hYy9XZWJDb3JlRnJhbWVOYW1l
c3BhY2VzLm0JKHJldmlzaW9uIDEzMTYyKQorKysgV2ViQ29yZS9icmlkZ2UvbWFjL1dlYkNvcmVG
cmFtZU5hbWVzcGFjZXMubQkod29ya2luZyBjb3B5KQpAQCAtMSw5MyArMCwwIEBACi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDA1IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAq
IDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4gCi0gKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBs
ZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgotICogICAgIGl0cyBj
b250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRl
cml2ZWQKLSAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3
cml0dGVuIHBlcm1pc3Npb24uIAotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
Ci0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
ICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbXBvcnQgIldlYkNvcmVGcmFtZU5hbWVzcGFj
ZXMuaCIKLQotc3RhdGljIENGU2V0Q2FsbEJhY2tzIE5vblJldGFpbmluZ1NldENhbGxiYWNrcyA9
IHsKLTAsCi1OVUxMLAotTlVMTCwKLUNGQ29weURlc2NyaXB0aW9uLAotQ0ZFcXVhbCwKLUNGSGFz
aAotfTsKLQotQGltcGxlbWVudGF0aW9uIFdlYkNvcmVGcmFtZU5hbWVzcGFjZXMKLQotTlNNdXRh
YmxlRGljdGlvbmFyeSAqbmFtZXNwYWNlcyA9IG5pbDsKLQotKyh2b2lkKWFkZEZyYW1lOihXZWJD
b3JlRnJhbWVCcmlkZ2UgKilmcmFtZSB0b05hbWVzcGFjZTooTlNTdHJpbmcgKiluYW1lCi17Ci0g
ICAgaWYgKCFuYW1lKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoIW5hbWVzcGFjZXMpCi0g
ICAgICAgIG5hbWVzcGFjZXMgPSBbW05TTXV0YWJsZURpY3Rpb25hcnkgYWxsb2NdIGluaXRdOwot
Ci0gICAgQ0ZNdXRhYmxlU2V0UmVmIG5hbWVzcGFjZSA9IChDRk11dGFibGVTZXRSZWYpW25hbWVz
cGFjZXMgb2JqZWN0Rm9yS2V5Om5hbWVdOwotCi0gICAgaWYgKCFuYW1lc3BhY2UpIHsKLSAgICAg
ICAgbmFtZXNwYWNlID0gQ0ZTZXRDcmVhdGVNdXRhYmxlKE5VTEwsIDAsICZOb25SZXRhaW5pbmdT
ZXRDYWxsYmFja3MpOwotICAgICAgICBbbmFtZXNwYWNlcyBzZXRPYmplY3Q6KGlkKW5hbWVzcGFj
ZSBmb3JLZXk6bmFtZV07Ci0gICAgICAgIENGUmVsZWFzZShuYW1lc3BhY2UpOwotICAgIH0KLSAg
ICAKLSAgICBDRlNldFNldFZhbHVlKG5hbWVzcGFjZSwgZnJhbWUpOwotfQotCi0rKHZvaWQpcmVt
b3ZlRnJhbWU6KFdlYkNvcmVGcmFtZUJyaWRnZSAqKWZyYW1lIGZyb21OYW1lc3BhY2U6KE5TU3Ry
aW5nICopbmFtZQotewotICAgIGlmICghbmFtZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQ0ZN
dXRhYmxlU2V0UmVmIG5hbWVzcGFjZSA9IChDRk11dGFibGVTZXRSZWYpW25hbWVzcGFjZXMgb2Jq
ZWN0Rm9yS2V5Om5hbWVdOwotCi0gICAgaWYgKCFuYW1lc3BhY2UpCi0gICAgICAgIHJldHVybjsK
LQotICAgIENGU2V0UmVtb3ZlVmFsdWUobmFtZXNwYWNlLCBmcmFtZSk7Ci0KLSAgICBpZiAoQ0ZT
ZXRHZXRDb3VudChuYW1lc3BhY2UpID09IDApCi0gICAgICAgIFtuYW1lc3BhY2VzIHJlbW92ZU9i
amVjdEZvcktleTpuYW1lXTsKLX0KLQotKyhOU0VudW1lcmF0b3IgKilmcmFtZXNJbk5hbWVzcGFj
ZTooTlNTdHJpbmcgKiluYW1lOwotewotICAgIGlmICghbmFtZSkKLSAgICAgICAgcmV0dXJuIFtb
W05TRW51bWVyYXRvciBhbGxvY10gaW5pdF0gYXV0b3JlbGVhc2VdOwotCi0gICAgQ0ZNdXRhYmxl
U2V0UmVmIG5hbWVzcGFjZSA9IChDRk11dGFibGVTZXRSZWYpW25hbWVzcGFjZXMgb2JqZWN0Rm9y
S2V5Om5hbWVdOwotCi0gICAgaWYgKCFuYW1lc3BhY2UpCi0gICAgICAgIHJldHVybiBbW1tOU0Vu
dW1lcmF0b3IgYWxsb2NdIGluaXRdIGF1dG9yZWxlYXNlXTsKLSAgICAKLSAgICByZXR1cm4gWyhO
U1NldCAqKW5hbWVzcGFjZSBvYmplY3RFbnVtZXJhdG9yXTsKLX0KLQotQGVuZApJbmRleDogV2Vi
Q29yZS9icmlkZ2UvbWFjL01hY0ZyYW1lLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9icmlkZ2Uv
bWFjL01hY0ZyYW1lLmgJKHJldmlzaW9uIDEzMTYyKQorKysgV2ViQ29yZS9icmlkZ2UvbWFjL01h
Y0ZyYW1lLmgJKHdvcmtpbmcgY29weSkKQEAgLTMxNiw4ICszMTYsNiBAQAogICAgIHZpcnR1YWwg
dm9pZCBwcmludCgpOwogCiBwcm90ZWN0ZWQ6Ci0gICAgdmlydHVhbCBET01TdHJpbmcgZ2VuZXJh
dGVGcmFtZU5hbWUoKTsKLQogICAgIHZpcnR1YWwgdm9pZCBzdGFydFJlZGlyZWN0aW9uVGltZXIo
KTsKICAgICB2aXJ0dWFsIHZvaWQgc3RvcFJlZGlyZWN0aW9uVGltZXIoKTsKICAgICB2aXJ0dWFs
IHZvaWQgcmVkaXJlY3Rpb25UaW1lckZpcmVkKFRpbWVyPEZyYW1lPiopOwpJbmRleDogV2ViQ29y
ZS9icmlkZ2UvbWFjL1dlYkNvcmVGcmFtZUJyaWRnZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
YnJpZGdlL21hYy9XZWJDb3JlRnJhbWVCcmlkZ2UuaAkocmV2aXNpb24gMTMxNjIpCisrKyBXZWJD
b3JlL2JyaWRnZS9tYWMvV2ViQ29yZUZyYW1lQnJpZGdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTE3
Miw4ICsxNzIsNiBAQAogewogICAgIFdlYkNvcmVNYWNGcmFtZSAqbV9mcmFtZTsKICAgICBCT09M
IF9zaG91bGRDcmVhdGVSZW5kZXJlcnM7Ci0KLSAgICBOU1N0cmluZyAqX2ZyYW1lTmFtZXNwYWNl
OwogfQogCiArIChXZWJDb3JlRnJhbWVCcmlkZ2UgKilicmlkZ2VGb3JET01Eb2N1bWVudDooRE9N
RG9jdW1lbnQgKilkb2N1bWVudDsKQEAgLTE4Nyw4ICsxODUsNiBAQAogCiAtICh2b2lkKXNldE5h
bWU6KE5TU3RyaW5nICopbmFtZTsKIC0gKE5TU3RyaW5nICopbmFtZTsKLS8qIENyZWF0ZXMgYSBu
YW1lIGZvciBhbiBmcmFtZSB1bm5hbWVkIGluIHRoZSBIVE1MLiAgSXQgc2hvdWxkIHByb2R1Y2Ug
cmVwZWF0YWJsZSByZXN1bHRzIGZvciBsb2FkcyBvZiB0aGUgc2FtZSBmcmFtZXNldC4gKi8KLS0g
KE5TU3RyaW5nICopZ2VuZXJhdGVGcmFtZU5hbWU7CiAKIC0gKFdlYkNvcmVQYWdlQnJpZGdlICop
cGFnZTsKIApAQCAtMjEyLDkgKzIwOCw2IEBACiAtIChXZWJDb3JlRnJhbWVCcmlkZ2UgKiljaGls
ZEZyYW1lTmFtZWQ6KE5TU3RyaW5nICopbmFtZTsKIC0gKFdlYkNvcmVGcmFtZUJyaWRnZSAqKWZp
bmRGcmFtZU5hbWVkOihOU1N0cmluZyAqKW5hbWU7CiAKLS0gKHZvaWQpc2V0RnJhbWVOYW1lc3Bh
Y2U6KE5TU3RyaW5nICopbnM7Ci0tIChOU1N0cmluZyAqKWZyYW1lTmFtZXNwYWNlOwotCiAtICh2
b2lkKXByb3Zpc2lvbmFsTG9hZFN0YXJ0ZWQ7CiAKIC0gKHZvaWQpb3BlblVSTDooTlNVUkwgKilV
UkwgcmVsb2FkOihCT09MKXJlbG9hZApJbmRleDogV2ViQ29yZS9icmlkZ2UvbWFjL1dlYkNvcmVG
cmFtZU5hbWVzcGFjZXMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9icmlkZ2UvbWFjL1dlYkNv
cmVGcmFtZU5hbWVzcGFjZXMubW0JKHJldmlzaW9uIDEzMTUzKQorKysgV2ViQ29yZS9icmlkZ2Uv
bWFjL1dlYkNvcmVGcmFtZU5hbWVzcGFjZXMubW0JKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA1IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2IEFwcGxlIENvbXB1
dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC0yNiw2OCArMjYsMjggQEAKICAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAotI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2ltcG9ydCAiY29uZmlnLmgiCiAjaW1wb3J0ICJXZWJDb3JlRnJhbWVOYW1l
c3BhY2VzLmgiCiAKLXN0YXRpYyBDRlNldENhbGxCYWNrcyBOb25SZXRhaW5pbmdTZXRDYWxsYmFj
a3MgPSB7Ci0wLAotTlVMTCwKLU5VTEwsCi1DRkNvcHlEZXNjcmlwdGlvbiwKLUNGRXF1YWwsCi1D
Rkhhc2gKLX07CisjaW1wb3J0ICJQYWdlTWFjLmgiCiAKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3Jl
OworCiBAaW1wbGVtZW50YXRpb24gV2ViQ29yZUZyYW1lTmFtZXNwYWNlcwogCi1OU011dGFibGVE
aWN0aW9uYXJ5ICpuYW1lc3BhY2VzID0gbmlsOwotCi0rKHZvaWQpYWRkRnJhbWU6KFdlYkNvcmVG
cmFtZUJyaWRnZSAqKWZyYW1lIHRvTmFtZXNwYWNlOihOU1N0cmluZyAqKW5hbWUKKysgKE5TRW51
bWVyYXRvciAqKWZyYW1lc0luTmFtZXNwYWNlOihOU1N0cmluZyAqKW5hbWU7CiB7Ci0gICAgaWYg
KCFuYW1lKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoIW5hbWVzcGFjZXMpCi0gICAgICAg
IG5hbWVzcGFjZXMgPSBbW05TTXV0YWJsZURpY3Rpb25hcnkgYWxsb2NdIGluaXRdOwotCi0gICAg
Q0ZNdXRhYmxlU2V0UmVmIG5hbWVzcGFjZSA9IChDRk11dGFibGVTZXRSZWYpW25hbWVzcGFjZXMg
b2JqZWN0Rm9yS2V5Om5hbWVdOwotCi0gICAgaWYgKCFuYW1lc3BhY2UpIHsKLSAgICAgICAgbmFt
ZXNwYWNlID0gQ0ZTZXRDcmVhdGVNdXRhYmxlKE5VTEwsIDAsICZOb25SZXRhaW5pbmdTZXRDYWxs
YmFja3MpOwotICAgICAgICBbbmFtZXNwYWNlcyBzZXRPYmplY3Q6KGlkKW5hbWVzcGFjZSBmb3JL
ZXk6bmFtZV07Ci0gICAgICAgIENGUmVsZWFzZShuYW1lc3BhY2UpOworICAgIGNvbnN0IEhhc2hT
ZXQ8UGFnZSo+KiBzZXQgPSBQYWdlOjpmcmFtZU5hbWVzcGFjZShuYW1lKTsKKyAgICBpZiAoIXNl
dCkKKyAgICAgICAgcmV0dXJuIFtbW05TRW51bWVyYXRvciBhbGxvY10gaW5pdF0gYXV0b3JlbGVh
c2VdOworICAgIE5TTXV0YWJsZUFycmF5KiBhcnJheSA9IFtbTlNNdXRhYmxlQXJyYXkgYWxsb2Nd
IGluaXRXaXRoQ2FwYWNpdHk6c2V0LT5zaXplKCldOworICAgIEhhc2hTZXQ8UGFnZSo+Ojpjb25z
dF9pdGVyYXRvciBlbmQgPSBzZXQtPmVuZCgpOworICAgIGZvciAoSGFzaFNldDxQYWdlKj46OmNv
bnN0X2l0ZXJhdG9yIGl0ID0gc2V0LT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAg
ICAgW2FycmF5IGFkZE9iamVjdDpNYWMoKml0KS0+YnJpZGdlKCldOwogICAgIH0KLSAgICAKLSAg
ICBDRlNldFNldFZhbHVlKG5hbWVzcGFjZSwgZnJhbWUpOworICAgIE5TRW51bWVyYXRvciogZW51
bWVyYXRvciA9IFthcnJheSBvYmplY3RFbnVtZXJhdG9yXTsKKyAgICBbYXJyYXkgcmVsZWFzZV07
CisgICAgcmV0dXJuIGVudW1lcmF0b3I7CiB9CiAKLSsodm9pZClyZW1vdmVGcmFtZTooV2ViQ29y
ZUZyYW1lQnJpZGdlICopZnJhbWUgZnJvbU5hbWVzcGFjZTooTlNTdHJpbmcgKiluYW1lCi17Ci0g
ICAgaWYgKCFuYW1lKQotICAgICAgICByZXR1cm47Ci0KLSAgICBDRk11dGFibGVTZXRSZWYgbmFt
ZXNwYWNlID0gKENGTXV0YWJsZVNldFJlZilbbmFtZXNwYWNlcyBvYmplY3RGb3JLZXk6bmFtZV07
Ci0KLSAgICBpZiAoIW5hbWVzcGFjZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQ0ZTZXRSZW1v
dmVWYWx1ZShuYW1lc3BhY2UsIGZyYW1lKTsKLQotICAgIGlmIChDRlNldEdldENvdW50KG5hbWVz
cGFjZSkgPT0gMCkKLSAgICAgICAgW25hbWVzcGFjZXMgcmVtb3ZlT2JqZWN0Rm9yS2V5Om5hbWVd
OwotfQotCi0rKE5TRW51bWVyYXRvciAqKWZyYW1lc0luTmFtZXNwYWNlOihOU1N0cmluZyAqKW5h
bWU7Ci17Ci0gICAgaWYgKCFuYW1lKQotICAgICAgICByZXR1cm4gW1tbTlNFbnVtZXJhdG9yIGFs
bG9jXSBpbml0XSBhdXRvcmVsZWFzZV07Ci0KLSAgICBDRk11dGFibGVTZXRSZWYgbmFtZXNwYWNl
ID0gKENGTXV0YWJsZVNldFJlZilbbmFtZXNwYWNlcyBvYmplY3RGb3JLZXk6bmFtZV07Ci0KLSAg
ICBpZiAoIW5hbWVzcGFjZSkKLSAgICAgICAgcmV0dXJuIFtbW05TRW51bWVyYXRvciBhbGxvY10g
aW5pdF0gYXV0b3JlbGVhc2VdOwotICAgIAotICAgIHJldHVybiBbKE5TU2V0ICopbmFtZXNwYWNl
IG9iamVjdEVudW1lcmF0b3JdOwotfQotCiBAZW5kCkluZGV4OiBXZWJDb3JlL3BhZ2UvRnJhbWUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvRnJhbWUuaAkocmV2aXNpb24gMTMxNjIpCisr
KyBXZWJDb3JlL3BhZ2UvRnJhbWUuaAkod29ya2luZyBjb3B5KQpAQCAtNTAyLDQxICs1MDIsMTAg
QEAKICAgICovCiAgIHZvaWQgY2xlYXJUeXBpbmdTdHlsZSgpOwogCi0gIHZpcnR1YWwgdm9pZCB0
b2tlbml6ZXJQcm9jZXNzZWREYXRhKCkge307CisgIHZpcnR1YWwgdm9pZCB0b2tlbml6ZXJQcm9j
ZXNzZWREYXRhKCkge30KIAotICBjb25zdCBLSFRNTFNldHRpbmdzICpzZXR0aW5ncygpIGNvbnN0
OworICBjb25zdCBLSFRNTFNldHRpbmdzKiBzZXR0aW5ncygpIGNvbnN0OwogCi0gIC8qKgotICAg
KiBSZXR1cm5zIGEgbGlzdCBvZiBuYW1lcyBvZiBhbGwgZnJhbWUgKGluY2x1ZGluZyBpZnJhbWUp
IG9iamVjdHMgb2YKLSAgICogdGhlIGN1cnJlbnQgZG9jdW1lbnQuIE5vdGUgdGhhdCB0aGlzIG1l
dGhvZCBpcyBub3Qgd29ya2luZyByZWN1cnNpdmVseQotICAgKiBmb3Igc3ViLWZyYW1lcy4KLSAg
ICovCi0gIFFTdHJpbmdMaXN0IGZyYW1lTmFtZXMoKSBjb25zdDsKLQotICBRUHRyTGlzdDxGcmFt
ZT4gZnJhbWVzKCkgY29uc3Q7Ci0KLSAgRnJhbWUgKmNoaWxkRnJhbWVOYW1lZChjb25zdCBRU3Ry
aW5nICZuYW1lKSBjb25zdDsKLQotICAvKioKLSAgICogRmluZHMgYSBmcmFtZSBieSBuYW1lLiBS
ZXR1cm5zIDBMIGlmIGZyYW1lIGNhbid0IGJlIGZvdW5kLgotICAgKi8KLSAgRnJhbWUgKmZpbmRG
cmFtZSggY29uc3QgUVN0cmluZyAmZiApOwotCi0gIC8qKgotICAgKiBSZXR1cm4gdGhlIGN1cnJl
bnQgZnJhbWUgKHRoZSBvbmUgdGhhdCBoYXMgZm9jdXMpCi0gICAqIE5vdCBuZWNlc3NhcmlseSBh
IGRpcmVjdCBjaGlsZCBvZiBvdXJzLCBmcmFtZXNldHMgY2FuIGJlIG5lc3RlZC4KLSAgICogUmV0
dXJucyAidGhpcyIgaWYgdGhpcyBwYXJ0IGlzbid0IGEgZnJhbWVzZXQuCi0gICAqLwotICBGcmFt
ZSogY3VycmVudEZyYW1lKCkgY29uc3Q7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgd2hldGhlciBh
IGZyYW1lIHdpdGggdGhlIHNwZWNpZmllZCBuYW1lIGlzIGV4aXN0cyBvciBub3QuCi0gICAqIElu
IGNvbnRyYXJ5IHRvIHRoZSBAcmVmIGZpbmRGcmFtZSBtZXRob2QgdGhpcyBvbmUgYWxzbyByZXR1
cm5zIHRydWUKLSAgICogaWYgdGhlIGZyYW1lIGlzIGRlZmluZWQgYnV0IG5vIGRpc3BsYXlpbmcg
Y29tcG9uZW50IGhhcyBiZWVuCi0gICAqIGZvdW5kL2xvYWRlZCwgeWV0LgotICAgKi8KLSAgYm9v
bCBmcmFtZUV4aXN0cyggY29uc3QgUVN0cmluZyAmZnJhbWVOYW1lICk7Ci0KICAgdm9pZCBzZXRK
U1N0YXR1c0JhclRleHQoY29uc3QgU3RyaW5nJik7CiAgIHZvaWQgc2V0SlNEZWZhdWx0U3RhdHVz
QmFyVGV4dChjb25zdCBTdHJpbmcmKTsKICAgU3RyaW5nIGpzU3RhdHVzQmFyVGV4dCgpIGNvbnN0
OwpAQCAtNTY1LDEwICs1MzQsNiBAQAogCiAgIGJvb2wgcmVzdG9yZWQoKSBjb25zdDsKIAotICB2
b2lkIGluY3JlbWVudEZyYW1lQ291bnQoKTsKLSAgdm9pZCBkZWNyZW1lbnRGcmFtZUNvdW50KCk7
Ci0gIGludCB0b3BMZXZlbEZyYW1lQ291bnQoKTsKLQogICAvLyBFZGl0aW5nIG9wZXJhdGlvbnMu
CiAgIC8vIE5vdCBjbGVhciBpZiB0aGVzZSB3aWxsIGJlIHdhbnRlZCBpbiBGcmFtZSBieSBLREUs
CiAgIC8vIGJ1dCBmb3Igbm93IHRoZXNlIGJyaWRnZSBzbyB3ZSBkb24ndCBoYXZlIHRvIHBlcHBl
ciB0aGUKQEAgLTY5MCw3ICs2NTUsNiBAQAogICB2aXJ0dWFsIGJvb2wgbGFzdEV2ZW50SXNNb3Vz
ZVVwKCkgY29uc3QgPSAwOwogICB2aXJ0dWFsIFFTdHJpbmcgb3ZlcnJpZGVNZWRpYVR5cGUoKSBj
b25zdCA9IDA7CiBwcm90ZWN0ZWQ6Ci0gIHZpcnR1YWwgU3RyaW5nIGdlbmVyYXRlRnJhbWVOYW1l
KCkgPSAwOwogICB2aXJ0dWFsIFBsdWdpbiogY3JlYXRlUGx1Z2luKGNvbnN0IEtVUkwmIHVybCwg
Y29uc3QgUVN0cmluZ0xpc3QmIHBhcmFtTmFtZXMsIGNvbnN0IFFTdHJpbmdMaXN0JiBwYXJhbVZh
bHVlcywgY29uc3QgUVN0cmluZyYgbWltZVR5cGUpID0gMDsKICAgdmlydHVhbCBGcmFtZSogY3Jl
YXRlRnJhbWUoY29uc3QgS1VSTCYgdXJsLCBjb25zdCBRU3RyaW5nJiBuYW1lLCBSZW5kZXJQYXJ0
KiByZW5kZXJlciwgY29uc3QgU3RyaW5nJiByZWZlcnJlcikgPSAwOwogICB2aXJ0dWFsIE9iamVj
dENvbnRlbnRUeXBlIG9iamVjdENvbnRlbnRUeXBlKGNvbnN0IEtVUkwmIHVybCwgY29uc3QgUVN0
cmluZyYgbWltZVR5cGUpID0gMDsKQEAgLTc1Myw3ICs3MTcsNiBAQAogICBib29sIHJlcXVlc3RP
YmplY3QoUmVuZGVyUGFydCAqZnJhbWUsIGNvbnN0IFFTdHJpbmcgJnVybCwgY29uc3QgUVN0cmlu
ZyAmZnJhbWVOYW1lLAogICAgICAgICAgICAgICAgICAgICAgY29uc3QgUVN0cmluZyAmc2Vydmlj
ZVR5cGUsIGNvbnN0IFFTdHJpbmdMaXN0ICZwYXJhbU5hbWVzLCBjb25zdCBRU3RyaW5nTGlzdCAm
cGFyYW1WYWx1ZXMpOwogICBib29sIHJlcXVlc3RGcmFtZShSZW5kZXJQYXJ0ICpmcmFtZSwgY29u
c3QgUVN0cmluZyAmdXJsLCBjb25zdCBRU3RyaW5nICZmcmFtZU5hbWUpOwotICBTdHJpbmcgcmVx
dWVzdEZyYW1lTmFtZSgpOwogCiAgIERvY3VtZW50SW1wbCAqZG9jdW1lbnQoKSBjb25zdDsKICAg
dm9pZCBzZXREb2N1bWVudChEb2N1bWVudEltcGwqIG5ld0RvYyk7CkluZGV4OiBXZWJDb3JlL3Bh
Z2UvRnJhbWVUcmVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wYWdlL0ZyYW1lVHJlZS5oCShy
ZXZpc2lvbiAxMzE2MikKKysrIFdlYkNvcmUvcGFnZS9GcmFtZVRyZWUuaAkod29ya2luZyBjb3B5
KQpAQCAtMjEsMTcgKzIxLDE2IEBACiAjaWZuZGVmIEZSQU1FX1RSRUVfSAogI2RlZmluZSBGUkFN
RV9UUkVFX0gKIAorI2luY2x1ZGUgIkF0b21pY1N0cmluZy5oIgogI2luY2x1ZGUgPGt4bWxjb3Jl
L05vbmNvcHlhYmxlLmg+CiAjaW5jbHVkZSA8a3htbGNvcmUvUGFzc1JlZlB0ci5oPgogI2luY2x1
ZGUgPGt4bWxjb3JlL1JlZlB0ci5oPgotI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAogICAgIGNsYXNzIEZyYW1lOwogCi0gICAgY2xhc3MgRnJhbWVU
cmVlIDogTm9uY29weWFibGUKLSAgICB7CisgICAgY2xhc3MgRnJhbWVUcmVlIDogTm9uY29weWFi
bGUgewogICAgIHB1YmxpYzoKICAgICAgICAgRnJhbWVUcmVlKEZyYW1lKiB0aGlzRnJhbWUsIEZy
YW1lKiBwYXJlbnRGcmFtZSkgCiAgICAgICAgICAgICA6IG1fdGhpc0ZyYW1lKHRoaXNGcmFtZSkK
QEAgLTQyLDkgKzQxLDkgQEAKICAgICAgICAgewogICAgICAgICB9CiAgICAgICAgIH5GcmFtZVRy
ZWUoKTsKLSAgICAgICAgCi0gICAgICAgIGNvbnN0IFN0cmluZyYgbmFtZSgpIGNvbnN0IHsgcmV0
dXJuIG1fbmFtZTsgfQotICAgICAgICB2b2lkIHNldE5hbWUoY29uc3QgU3RyaW5nJik7CisKKyAg
ICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lKCkgY29uc3QgeyByZXR1cm4gbV9uYW1lOyB9
CisgICAgICAgIHZvaWQgc2V0TmFtZShjb25zdCBBdG9taWNTdHJpbmcmKTsKICAgICAgICAgRnJh
bWUqIHBhcmVudCgpIGNvbnN0IHsgcmV0dXJuIG1fcGFyZW50OyB9CiAgICAgICAgIHZvaWQgc2V0
UGFyZW50KEZyYW1lKiBwYXJlbnQpIHsgbV9wYXJlbnQgPSBwYXJlbnQ7IH0KICAgICAgICAgCkBA
IC01MiwyMyArNTEsMzIgQEAKICAgICAgICAgRnJhbWUqIHByZXZpb3VzU2libGluZygpIGNvbnN0
IHsgcmV0dXJuIG1fcHJldmlvdXNTaWJsaW5nOyB9CiAgICAgICAgIEZyYW1lKiBmaXJzdENoaWxk
KCkgY29uc3QgeyByZXR1cm4gbV9maXJzdENoaWxkLmdldCgpOyB9CiAgICAgICAgIEZyYW1lKiBs
YXN0Q2hpbGQoKSBjb25zdCB7IHJldHVybiBtX2xhc3RDaGlsZDsgfQotICAgICAgICBpbnQgY2hp
bGRDb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fY2hpbGRDb3VudDsgfQorICAgICAgICB1bnNpZ25l
ZCBjaGlsZENvdW50KCkgY29uc3QgeyByZXR1cm4gbV9jaGlsZENvdW50OyB9CisKKyAgICAgICAg
Ym9vbCBpc0Rlc2NlbmRhbnRPZihGcmFtZSogYW5jZXN0b3IpIGNvbnN0OworICAgICAgICBGcmFt
ZSogdHJhdmVyc2VOZXh0KEZyYW1lKiBzdGF5V2l0aGluID0gMCkgY29uc3Q7CiAgICAgICAgIAog
ICAgICAgICB2b2lkIGFwcGVuZENoaWxkKFBhc3NSZWZQdHI8RnJhbWU+KTsKICAgICAgICAgdm9p
ZCByZW1vdmVDaGlsZChGcmFtZSopOwotICAgICAgICAKKworICAgICAgICBGcmFtZSogY2hpbGQo
dW5zaWduZWQgaW5kZXgpIGNvbnN0OworICAgICAgICBGcmFtZSogY2hpbGQoY29uc3QgQXRvbWlj
U3RyaW5nJiBuYW1lKSBjb25zdDsKKyAgICAgICAgRnJhbWUqIGZpbmQoY29uc3QgQXRvbWljU3Ry
aW5nJiBuYW1lKSBjb25zdDsKKworICAgICAgICBBdG9taWNTdHJpbmcgbmFtZUZvck5ld0NoaWxk
KGNvbnN0IEF0b21pY1N0cmluZyYgcmVxdWVzdGVkTmFtZSkgY29uc3Q7CisKICAgICBwcml2YXRl
OgogICAgICAgICBGcmFtZSogbV90aGlzRnJhbWU7Ci0gICAgICAgIAorCiAgICAgICAgIEZyYW1l
KiBtX3BhcmVudDsKLSAgICAgICAgU3RyaW5nIG1fbmFtZTsKLSAgICAgICAgCisgICAgICAgIEF0
b21pY1N0cmluZyBtX25hbWU7CisKICAgICAgICAgLy8gRklYTUU6IHVzZSBMaXN0UmVmUHRyPwog
ICAgICAgICBSZWZQdHI8RnJhbWU+IG1fbmV4dFNpYmxpbmc7CiAgICAgICAgIEZyYW1lKiBtX3By
ZXZpb3VzU2libGluZzsKICAgICAgICAgUmVmUHRyPEZyYW1lPiBtX2ZpcnN0Q2hpbGQ7CiAgICAg
ICAgIEZyYW1lKiBtX2xhc3RDaGlsZDsKLSAgICAgICAgaW50IG1fY2hpbGRDb3VudDsKKyAgICAg
ICAgdW5zaWduZWQgbV9jaGlsZENvdW50OwogICAgIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKSW5kZXg6IFdlYkNvcmUvcGFnZS9QYWdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wYWdl
L1BhZ2UuaAkocmV2aXNpb24gMTMxNjIpCisrKyBXZWJDb3JlL3BhZ2UvUGFnZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0yMSw2ICsyMSw4IEBACiAjaWZuZGVmIFBBR0VfSAogI2RlZmluZSBQQUdFX0gK
IAorI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisjaW5jbHVkZSA8a3htbGNvcmUvSGFzaFNl
dC5oPgogI2luY2x1ZGUgPGt4bWxjb3JlL05vbmNvcHlhYmxlLmg+CiAjaW5jbHVkZSA8a3htbGNv
cmUvUGFzc1JlZlB0ci5oPgogI2luY2x1ZGUgPGt4bWxjb3JlL1JlZlB0ci5oPgpAQCAtMjgsMTUg
KzMwLDI5IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICBjbGFzcyBGcmFtZTsKKyAgICBj
bGFzcyBGcmFtZU5hbWVzcGFjZTsKICAgICAKICAgICBjbGFzcyBQYWdlIDogTm9uY29weWFibGUg
ewogICAgIHB1YmxpYzoKICAgICAgICAgUGFnZSgpOwogICAgICAgICB2aXJ0dWFsIH5QYWdlKCk7
CisKICAgICAgICAgdm9pZCBzZXRNYWluRnJhbWUoUGFzc1JlZlB0cjxGcmFtZT4gbWFpbkZyYW1l
KTsKICAgICAgICAgRnJhbWUqIG1haW5GcmFtZSgpIHsgcmV0dXJuIG1fbWFpbkZyYW1lLmdldCgp
OyB9CisKKyAgICAgICAgdm9pZCBzZXRHcm91cE5hbWUoY29uc3QgU3RyaW5nJik7CisgICAgICAg
IFN0cmluZyBncm91cE5hbWUoKSBjb25zdCB7IHJldHVybiBtX2dyb3VwTmFtZTsgfQorICAgICAg
ICBjb25zdCBIYXNoU2V0PFBhZ2UqPiogZnJhbWVOYW1lc3BhY2UoKSBjb25zdDsKKyAgICAgICAg
c3RhdGljIGNvbnN0IEhhc2hTZXQ8UGFnZSo+KiBmcmFtZU5hbWVzcGFjZShjb25zdCBTdHJpbmcm
KTsKKworICAgICAgICB2b2lkIGluY3JlbWVudEZyYW1lQ291bnQoKSB7ICsrbV9mcmFtZUNvdW50
OyB9CisgICAgICAgIHZvaWQgZGVjcmVtZW50RnJhbWVDb3VudCgpIHsgLS1tX2ZyYW1lQ291bnQ7
IH0KKyAgICAgICAgaW50IGZyYW1lQ291bnQoKSBjb25zdCB7IHJldHVybiBtX2ZyYW1lQ291bnQ7
IH0KKwogICAgIHByaXZhdGU6CiAgICAgICAgIFJlZlB0cjxGcmFtZT4gbV9tYWluRnJhbWU7Cisg
ICAgICAgIGludCBtX2ZyYW1lQ291bnQ7CisgICAgICAgIFN0cmluZyBtX2dyb3VwTmFtZTsKICAg
ICB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL3BhZ2UvRnJhbWUu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9GcmFtZS5jcHAJKHJldmlzaW9uIDEzMTYy
KQorKysgV2ViQ29yZS9wYWdlL0ZyYW1lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTMzOCwxMSAr
MTMzOCw2IEBACiAgIHVybFNlbGVjdGVkKGNVUkwsIGFyZ3NDb3B5KTsKIH0KIAotRE9NU3RyaW5n
IEZyYW1lOjpyZXF1ZXN0RnJhbWVOYW1lKCkKLXsKLSAgICByZXR1cm4gZ2VuZXJhdGVGcmFtZU5h
bWUoKTsKLX0KLQogYm9vbCBGcmFtZTo6cmVxdWVzdEZyYW1lKFJlbmRlclBhcnQqIHJlbmRlcmVy
LCBjb25zdCBRU3RyaW5nJiBfdXJsLCBjb25zdCBRU3RyaW5nJiBmcmFtZU5hbWUpCiB7CiAgICAg
Ly8gU3VwcG9ydCBmb3IgPGZyYW1lIHNyYz0iamF2YXNjcmlwdDpzdHJpbmciPgpAQCAtMTM1NCw3
ICsxMzQ5LDcgQEAKICAgICB9IGVsc2UKICAgICAgICAgdXJsID0gY29tcGxldGVVUkwoX3VybCk7
CiAKLSAgICBGcmFtZSogZnJhbWUgPSBjaGlsZEZyYW1lTmFtZWQoZnJhbWVOYW1lKTsKKyAgICBG
cmFtZSogZnJhbWUgPSB0cmVlKCktPmNoaWxkKGZyYW1lTmFtZSk7CiAgICAgaWYgKGZyYW1lKSB7
CiAgICAgICAgIFVSTEFyZ3MgYXJnczsKICAgICAgICAgYXJncy5tZXRhRGF0YSgpLnNldCgicmVm
ZXJyZXIiLCBkLT5tX3JlZmVycmVyKTsKQEAgLTE1NzQsMjEgKzE1NjksNiBAQAogICAgIGNoZWNr
Q29tcGxldGVkKCk7CiB9CiAKLUZyYW1lKiBGcmFtZTo6ZmluZEZyYW1lKGNvbnN0IFFTdHJpbmcm
IGYpCi17Ci0gICAgLy8gRklYTUU6IHRoaXMgb25seSBmaW5kcyBjaGlsZCBmcmFtZXMsIGlzIGl0
IGV2ZXIgYXBwcm9wcmlhdGUgdG8gdXNlIHRoaXM/Ci0gICAgLy8gIyMjIGh0dHA6Ly93d3cudzMu
b3JnL1RSL2h0bWw0L2FwcGVuZGl4L25vdGVzLmh0bWwjbm90ZXMtZnJhbWVzCi0gICAgZm9yIChG
cmFtZSogY2hpbGQgPSB0cmVlKCktPmZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQt
PnRyZWUoKS0+bmV4dFNpYmxpbmcoKSkKLSAgICAgICAgaWYgKGNoaWxkLT50cmVlKCktPm5hbWUo
KSA9PSBmKQotICAgICAgICAgICAgcmV0dXJuIGNoaWxkOwotICAgIHJldHVybiAwOwotfQotCi1i
b29sIEZyYW1lOjpmcmFtZUV4aXN0cyhjb25zdCBRU3RyaW5nJiBmcmFtZU5hbWUpCi17Ci0gICAg
cmV0dXJuIGZpbmRGcmFtZShmcmFtZU5hbWUpOwotfQotCiBpbnQgRnJhbWU6Onpvb21GYWN0b3Io
KSBjb25zdAogewogICByZXR1cm4gZC0+bV96b29tRmFjdG9yOwpAQCAtMTY2MywzNCArMTY0Myw2
IEBACiAgIGlmKGQtPm1fZG9jKSBkLT5tX2RvYy0+dXBkYXRlU3R5bGVTZWxlY3RvcigpOwogfQog
Ci1RU3RyaW5nTGlzdCBGcmFtZTo6ZnJhbWVOYW1lcygpIGNvbnN0Ci17Ci0gIFFTdHJpbmdMaXN0
IHJlczsKLQotICBmb3IgKEZyYW1lKiBjaGlsZCA9IHRyZWUoKS0+Zmlyc3RDaGlsZCgpOyBjaGls
ZDsgY2hpbGQgPSBjaGlsZC0+dHJlZSgpLT5uZXh0U2libGluZygpKQotICAgICAgcmVzICs9IGNo
aWxkLT50cmVlKCktPm5hbWUoKS5xc3RyaW5nKCk7Ci0KLSAgcmV0dXJuIHJlczsKLX0KLQotUVB0
ckxpc3Q8RnJhbWU+IEZyYW1lOjpmcmFtZXMoKSBjb25zdAotewotICBRUHRyTGlzdDxGcmFtZT4g
cmVzOwotCi0gIGZvciAoRnJhbWUqIGNoaWxkID0gdHJlZSgpLT5maXJzdENoaWxkKCk7IGNoaWxk
OyBjaGlsZCA9IGNoaWxkLT50cmVlKCktPm5leHRTaWJsaW5nKCkpCi0gICAgICByZXMuYXBwZW5k
KGNoaWxkKTsKLQotICByZXR1cm4gcmVzOwotfQotCi1GcmFtZSogRnJhbWU6OmNoaWxkRnJhbWVO
YW1lZChjb25zdCBRU3RyaW5nJiBuYW1lKSBjb25zdAotewotICAgIGZvciAoRnJhbWUqIGNoaWxk
ID0gdHJlZSgpLT5maXJzdENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT50cmVlKCktPm5l
eHRTaWJsaW5nKCkpCi0gICAgICAgIGlmIChjaGlsZC0+dHJlZSgpLT5uYW1lKCkgPT0gbmFtZSkK
LSAgICAgICAgICAgIHJldHVybiBjaGlsZDsKLSAgICByZXR1cm4gMDsKLX0KLQogYm9vbCBGcmFt
ZTo6c2hvdWxkRHJhZ0F1dG9Ob2RlKE5vZGVJbXBsICpub2RlLCBpbnQgeCwgaW50IHkpIGNvbnN0
CiB7CiAgICAgLy8gTm8gS0RFIGltcGwgeWV0CkBAIC0yMTE3LDMwICsyMDY5LDYgQEAKICAgcmV0
dXJuIGQtPm1fcmVzdG9yZWQ7CiB9CiAKLXZvaWQgRnJhbWU6OmluY3JlbWVudEZyYW1lQ291bnQo
KQotewotICAgIC8vIEZJWE1FOiB0aGlzIHNob3VsZCBiZSBpbiBQYWdlCi0gICAgZnJhbWVDb3Vu
dCsrOwotICAgIGlmICh0cmVlKCktPnBhcmVudCgpKQotICAgICAgICB0cmVlKCktPnBhcmVudCgp
LT5pbmNyZW1lbnRGcmFtZUNvdW50KCk7Ci19Ci0KLXZvaWQgRnJhbWU6OmRlY3JlbWVudEZyYW1l
Q291bnQoKQotewotICAgIC8vIEZJWE1FOiB0aGlzIHNob3VsZCBiZSBpbiBQYWdlCi0gICAgZnJh
bWVDb3VudC0tOwotICAgIGlmICh0cmVlKCktPnBhcmVudCgpKQotICAgICAgICB0cmVlKCktPnBh
cmVudCgpLT5kZWNyZW1lbnRGcmFtZUNvdW50KCk7Ci19Ci0KLWludCBGcmFtZTo6dG9wTGV2ZWxG
cmFtZUNvdW50KCkKLXsKLSAgICAvLyBGSVhNRTogdGhpcyBzaG91bGQgYmUgaW4gUGFnZQotICAg
IGlmICh0cmVlKCktPnBhcmVudCgpKQotICAgICAgICByZXR1cm4gdHJlZSgpLT5wYXJlbnQoKS0+
dG9wTGV2ZWxGcmFtZUNvdW50KCk7Ci0gICAgcmV0dXJuIGZyYW1lQ291bnQ7Ci19Ci0KIGJvb2wg
RnJhbWU6OnRhYnNUb0xpbmtzKCkgY29uc3QKIHsKICAgICByZXR1cm4gdHJ1ZTsKSW5kZXg6IFdl
YkNvcmUvcGFnZS9GcmFtZVRyZWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9GcmFt
ZVRyZWUuY3BwCShyZXZpc2lvbiAxMzE2MikKKysrIFdlYkNvcmUvcGFnZS9GcmFtZVRyZWUuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yMSwxMSArMjEsMTIgQEAKICNpbmNsdWRlICJjb25maWcuaCIK
ICNpbmNsdWRlICJGcmFtZVRyZWUuaCIKIAotI2luY2x1ZGUgPGt4bWxjb3JlL0Fzc2VydGlvbnMu
aD4KICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIk5vZGVJbXBsLmgiCi0KKyNpbmNsdWRl
ICJQYWdlLmgiCiAjaW5jbHVkZSA8YWxnb3JpdGhtPgorI2luY2x1ZGUgPGt4bWxjb3JlL0Fzc2Vy
dGlvbnMuaD4KKyNpbmNsdWRlIDxreG1sY29yZS9WZWN0b3IuaD4KIAogdXNpbmcgc3RkOjpzd2Fw
OwogCkBAIC0zNywxNSArMzgsMTQgQEAKICAgICAgICAgY2hpbGQtPmRldGFjaEZyb21WaWV3KCk7
CiB9CiAKLXZvaWQgRnJhbWVUcmVlOjpzZXROYW1lKGNvbnN0IERPTVN0cmluZyYgbmFtZSkgCi17
IAotICAgIERPTVN0cmluZyBuID0gbmFtZTsKLSAgICAgICAgCi0gICAgLy8gRklYTUU6IGlzIHRo
ZSBibGFuayBydWxlIG5lZWRlZCBvciB1c2VmdWw/Ci0gICAgaWYgKHBhcmVudCgpICYmIChuYW1l
LmlzRW1wdHkoKSB8fCBwYXJlbnQoKS0+ZnJhbWVFeGlzdHMobmFtZS5xc3RyaW5nKCkpIHx8IG5h
bWUgPT0gIl9ibGFuayIpKQotICAgICAgICBuID0gcGFyZW50KCktPnJlcXVlc3RGcmFtZU5hbWUo
KTsKLSAgICAKLSAgICBtX25hbWUgPSBuOwordm9pZCBGcmFtZVRyZWU6OnNldE5hbWUoY29uc3Qg
QXRvbWljU3RyaW5nJiBuYW1lKSAKK3sKKyAgICBpZiAoIXBhcmVudCgpKSB7CisgICAgICAgIG1f
bmFtZSA9IG5hbWU7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgbV9uYW1lID0gQXRvbWlj
U3RyaW5nKCk7IC8vIFJlbW92ZSBvdXIgb2xkIGZyYW1lIG5hbWUgc28gaXQncyBub3QgY29uc2lk
ZXJlZCBpbiBuYW1lRm9yTmV3Q2hpbGQuCisgICAgbV9uYW1lID0gcGFyZW50KCktPnRyZWUoKS0+
bmFtZUZvck5ld0NoaWxkKG5hbWUpOwogfQogCiB2b2lkIEZyYW1lVHJlZTo6YXBwZW5kQ2hpbGQo
UGFzc1JlZlB0cjxGcmFtZT4gY2hpbGQpCkBAIC04Niw0ICs4NiwxNDQgQEAKICAgICBtX2NoaWxk
Q291bnQtLTsKIH0KIAorQXRvbWljU3RyaW5nIEZyYW1lVHJlZTo6bmFtZUZvck5ld0NoaWxkKGNv
bnN0IEF0b21pY1N0cmluZyYgcmVxdWVzdGVkTmFtZSkgY29uc3QKK3sKKyAgICBpZiAoIXJlcXVl
c3RlZE5hbWUuaXNFbXB0eSgpICYmICFjaGlsZChyZXF1ZXN0ZWROYW1lKSAmJiByZXF1ZXN0ZWRO
YW1lICE9ICJfYmxhbmsiKQorICAgICAgICByZXR1cm4gcmVxdWVzdGVkTmFtZTsKKworICAgIC8v
IENyZWF0ZSBhIHJlcGVhdGFibGUgbmFtZSBmb3IgYSBjaGlsZCBhYm91dCB0byBiZSBhZGRlZCB0
byB1cy4gVGhlIG5hbWUgbXVzdCBiZQorICAgIC8vIHVuaXF1ZSB3aXRoaW4gdGhlIGZyYW1lIHRy
ZWUuIFRoZSBzdHJpbmcgd2UgZ2VuZXJhdGUgaW5jbHVkZXMgYSAicGF0aCIgb2YgbmFtZXMKKyAg
ICAvLyBmcm9tIHRoZSByb290IGZyYW1lIGRvd24gdG8gdXMuIEZvciB0aGlzIHBhdGggdG8gYmUg
dW5pcXVlLCBlYWNoIHNldCBvZiBzaWJsaW5ncyBtdXN0CisgICAgLy8gY29udHJpYnV0ZSBhIHVu
aXF1ZSBuYW1lIHRvIHRoZSBwYXRoLCB3aGljaCBjYW4ndCBjb2xsaWRlIHdpdGggYW55IEhUTUwt
YXNzaWduZWQgbmFtZXMuCisgICAgLy8gV2UgZ2VuZXJhdGUgdGhpcyBwYXRoIGNvbXBvbmVudCBi
eSBpbmRleCBpbiB0aGUgY2hpbGQgbGlzdCBhbG9uZyB3aXRoIGFuIHVubGlrZWx5CisgICAgLy8g
ZnJhbWUgbmFtZSB0aGF0IGNhbid0IGJlIHNldCBpbiBIVE1MIGJlY2F1c2UgaXQgY29sbGlkZXMg
d2l0aCBjb21tZW50IHN5bnRheC4KKworICAgIGNvbnN0IGNoYXIgZnJhbWVQYXRoUHJlZml4W10g
PSAiPCEtLWZyYW1lUGF0aCAiOworICAgIGNvbnN0IGludCBmcmFtZVBhdGhQcmVmaXhMZW5ndGgg
PSAxNDsKKyAgICBjb25zdCBpbnQgZnJhbWVQYXRoU3VmZml4TGVuZ3RoID0gMzsKKworICAgIC8v
IEZpbmQgdGhlIG5lYXJlc3QgcGFyZW50IHRoYXQgaGFzIGEgZnJhbWUgd2l0aCBhIHBhdGggaW4g
aXQuCisgICAgVmVjdG9yPEZyYW1lKiwgMTY+IGNoYWluOworICAgIEZyYW1lKiBmcmFtZTsKKyAg
ICBmb3IgKGZyYW1lID0gbV90aGlzRnJhbWU7IGZyYW1lOyBmcmFtZSA9IGZyYW1lLT50cmVlKCkt
PnBhcmVudCgpKSB7CisgICAgICAgIGlmIChmcmFtZS0+dHJlZSgpLT5uYW1lKCkuc3RhcnRzV2l0
aChmcmFtZVBhdGhQcmVmaXgpKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNoYWluLmFw
cGVuZChmcmFtZSk7CisgICAgfQorICAgIFN0cmluZyBuYW1lOworICAgIG5hbWUgKz0gZnJhbWVQ
YXRoUHJlZml4OworICAgIGlmIChmcmFtZSkKKyAgICAgICAgbmFtZSArPSBmcmFtZS0+dHJlZSgp
LT5uYW1lKCkuZG9tU3RyaW5nKCkuc3Vic3RyaW5nKGZyYW1lUGF0aFByZWZpeExlbmd0aCwKKyAg
ICAgICAgICAgIGZyYW1lLT50cmVlKCktPm5hbWUoKS5sZW5ndGgoKSAtIGZyYW1lUGF0aFByZWZp
eExlbmd0aCAtIGZyYW1lUGF0aFN1ZmZpeExlbmd0aCk7CisgICAgZm9yIChpbnQgaSA9IGNoYWlu
LnNpemUoKSAtIDE7IGkgPj0gMDsgLS1pKSB7CisgICAgICAgIGZyYW1lID0gY2hhaW5baV07Cisg
ICAgICAgIG5hbWUgKz0gIi8iOworICAgICAgICBuYW1lICs9IGZyYW1lLT50cmVlKCktPm5hbWUo
KTsKKyAgICB9CisgICAgY2hhciBzdWZmaXhbNDBdOyAvLyAxNiArIG1heGltdW0gd2lkdGggb2Yg
YW4gdW5zaWduZWQgaW50ZWdlcgorICAgIHNwcmludGYoc3VmZml4LCAiLzwhLS1mcmFtZSV1LS0+
LS0+IiwgY2hpbGRDb3VudCgpKTsKKyAgICBuYW1lICs9IHN1ZmZpeDsKKworICAgIHJldHVybiBB
dG9taWNTdHJpbmcobmFtZSk7CiB9CisKK0ZyYW1lKiBGcmFtZVRyZWU6OmNoaWxkKHVuc2lnbmVk
IGluZGV4KSBjb25zdAoreworICAgIEZyYW1lKiByZXN1bHQgPSBmaXJzdENoaWxkKCk7CisgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgcmVzdWx0ICYmIGkgIT0gaW5kZXg7ICsraSkKKyAgICAgICAg
cmVzdWx0ID0gcmVzdWx0LT50cmVlKCktPm5leHRTaWJsaW5nKCk7CisgICAgcmV0dXJuIHJlc3Vs
dDsKK30KKworRnJhbWUqIEZyYW1lVHJlZTo6Y2hpbGQoY29uc3QgQXRvbWljU3RyaW5nJiBuYW1l
KSBjb25zdAoreworICAgIGZvciAoRnJhbWUqIGNoaWxkID0gZmlyc3RDaGlsZCgpOyBjaGlsZDsg
Y2hpbGQgPSBjaGlsZC0+dHJlZSgpLT5uZXh0U2libGluZygpKQorICAgICAgICBpZiAoY2hpbGQt
PnRyZWUoKS0+bmFtZSgpID09IG5hbWUpCisgICAgICAgICAgICByZXR1cm4gY2hpbGQ7CisgICAg
cmV0dXJuIDA7Cit9CisKK0ZyYW1lKiBGcmFtZVRyZWU6OmZpbmQoY29uc3QgQXRvbWljU3RyaW5n
JiBuYW1lKSBjb25zdAoreworICAgIGlmIChuYW1lID09ICJfc2VsZiIgfHwgbmFtZSA9PSAiX2N1
cnJlbnQiKQorICAgICAgICByZXR1cm4gbV90aGlzRnJhbWU7CisgICAgCisgICAgaWYgKG5hbWUg
PT0gIl90b3AiKQorICAgICAgICByZXR1cm4gbV90aGlzRnJhbWUtPnBhZ2UoKS0+bWFpbkZyYW1l
KCk7CisgICAgCisgICAgaWYgKG5hbWUgPT0gIl9wYXJlbnQiKQorICAgICAgICByZXR1cm4gcGFy
ZW50KCkgPyBwYXJlbnQoKSA6IG1fdGhpc0ZyYW1lOworCisgICAgLy8gU2luY2UgIl9ibGFuayIg
c2hvdWxkIG5ldmVyIGJlIGFueSBmcmFtZSdzIG5hbWUsIHRoZSBmb2xsb3dpbmcganVzdCBhbW91
bnRzIHRvIGFuIG9wdGltaXphdGlvbi4KKyAgICBpZiAobmFtZSA9PSAiX2JsYW5rIikKKyAgICAg
ICAgcmV0dXJuIDA7CisKKyAgICAvLyBTZWFyY2ggc3VidHJlZSBzdGFydGluZyB3aXRoIHRoaXMg
ZnJhbWUgZmlyc3QuCisgICAgZm9yIChGcmFtZSogZnJhbWUgPSBtX3RoaXNGcmFtZTsgZnJhbWU7
IGZyYW1lID0gZnJhbWUtPnRyZWUoKS0+dHJhdmVyc2VOZXh0KG1fdGhpc0ZyYW1lKSkKKyAgICAg
ICAgaWYgKGZyYW1lLT50cmVlKCktPm5hbWUoKSA9PSBuYW1lKQorICAgICAgICAgICAgcmV0dXJu
IGZyYW1lOworCisgICAgLy8gU2VhcmNoIHRoZSBlbnRpcmUgdHJlZSBmb3IgdGhpcyBwYWdlIG5l
eHQuCisgICAgUGFnZSogcGFnZSA9IG1fdGhpc0ZyYW1lLT5wYWdlKCk7CisgICAgZm9yIChGcmFt
ZSogZnJhbWUgPSBwYWdlLT5tYWluRnJhbWUoKTsgZnJhbWU7IGZyYW1lID0gZnJhbWUtPnRyZWUo
KS0+dHJhdmVyc2VOZXh0KCkpCisgICAgICAgIGlmIChmcmFtZS0+dHJlZSgpLT5uYW1lKCkgPT0g
bmFtZSkKKyAgICAgICAgICAgIHJldHVybiBmcmFtZTsKKworICAgIC8vIFNlYXJjaCB0aGUgZW50
aXJlIHRyZWUgZm9yIGFsbCBvdGhlciBwYWdlcyBpbiB0aGlzIG5hbWVzcGFjZS4KKyAgICBjb25z
dCBIYXNoU2V0PFBhZ2UqPiogcGFnZXMgPSBwYWdlLT5mcmFtZU5hbWVzcGFjZSgpOworICAgIGlm
IChwYWdlcykgeworICAgICAgICBIYXNoU2V0PFBhZ2UqPjo6Y29uc3RfaXRlcmF0b3IgZW5kID0g
cGFnZXMtPmVuZCgpOworICAgICAgICBmb3IgKEhhc2hTZXQ8UGFnZSo+Ojpjb25zdF9pdGVyYXRv
ciBpdCA9IHBhZ2VzLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgICAgIFBh
Z2UqIG90aGVyUGFnZSA9ICppdDsKKyAgICAgICAgICAgIGlmIChvdGhlclBhZ2UgIT0gcGFnZSkK
KyAgICAgICAgICAgICAgICBmb3IgKEZyYW1lKiBmcmFtZSA9IG90aGVyUGFnZS0+bWFpbkZyYW1l
KCk7IGZyYW1lOyBmcmFtZSA9IGZyYW1lLT50cmVlKCktPnRyYXZlcnNlTmV4dCgpKQorICAgICAg
ICAgICAgICAgICAgICBpZiAoZnJhbWUtPnRyZWUoKS0+bmFtZSgpID09IG5hbWUpCisgICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gZnJhbWU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBy
ZXR1cm4gMDsKK30KKworYm9vbCBGcmFtZVRyZWU6OmlzRGVzY2VuZGFudE9mKEZyYW1lKiBhbmNl
c3RvcikgY29uc3QKK3sKKyAgICBmb3IgKEZyYW1lKiBmcmFtZSA9IG1fdGhpc0ZyYW1lOyBmcmFt
ZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgpLT5wYXJlbnQoKSkKKyAgICAgICAgaWYgKGZyYW1lID09
IGFuY2VzdG9yKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIGZhbHNlOwor
fQorCitGcmFtZSogRnJhbWVUcmVlOjp0cmF2ZXJzZU5leHQoRnJhbWUqIHN0YXlXaXRoaW4pIGNv
bnN0Cit7CisgICAgRnJhbWUqIGNoaWxkID0gZmlyc3RDaGlsZCgpOworICAgIGlmIChjaGlsZCkg
eworICAgICAgICBBU1NFUlQoIXN0YXlXaXRoaW4gfHwgY2hpbGQtPnRyZWUoKS0+aXNEZXNjZW5k
YW50T2Yoc3RheVdpdGhpbikpOworICAgICAgICByZXR1cm4gY2hpbGQ7CisgICAgfQorCisgICAg
aWYgKG1fdGhpc0ZyYW1lID09IHN0YXlXaXRoaW4pCisgICAgICAgIHJldHVybiAwOworCisgICAg
RnJhbWUqIHNpYmxpbmcgPSBuZXh0U2libGluZygpOworICAgIGlmIChzaWJsaW5nKSB7CisgICAg
ICAgIEFTU0VSVCghc3RheVdpdGhpbiB8fCBzaWJsaW5nLT50cmVlKCktPmlzRGVzY2VuZGFudE9m
KHN0YXlXaXRoaW4pKTsKKyAgICAgICAgcmV0dXJuIHNpYmxpbmc7CisgICAgfQorCisgICAgRnJh
bWUqIGZyYW1lID0gbV90aGlzRnJhbWU7CisgICAgd2hpbGUgKCFzaWJsaW5nICYmICghc3RheVdp
dGhpbiB8fCBmcmFtZS0+dHJlZSgpLT5wYXJlbnQoKSAhPSBzdGF5V2l0aGluKSkgeworICAgICAg
ICBmcmFtZSA9IGZyYW1lLT50cmVlKCktPnBhcmVudCgpOworICAgICAgICBpZiAoIWZyYW1lKQor
ICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHNpYmxpbmcgPSBmcmFtZS0+dHJlZSgpLT5u
ZXh0U2libGluZygpOworICAgIH0KKworICAgIGlmIChmcmFtZSkgeworICAgICAgICBBU1NFUlQo
IXN0YXlXaXRoaW4gfHwgIXNpYmxpbmcgfHwgc2libGluZy0+dHJlZSgpLT5pc0Rlc2NlbmRhbnRP
ZihzdGF5V2l0aGluKSk7CisgICAgICAgIHJldHVybiBzaWJsaW5nOworICAgIH0KKworICAgIHJl
dHVybiAwOworfQorCit9CkluZGV4OiBXZWJDb3JlL3BhZ2UvUGFnZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9wYWdlL1BhZ2UuY3BwCShyZXZpc2lvbiAxMzE2MikKKysrIFdlYkNvcmUvcGFn
ZS9QYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQsMjEgKzI0LDI0IEBACiAjaW5jbHVkZSAi
RnJhbWUuaCIKICNpbmNsdWRlIDxranMvY29sbGVjdG9yLmg+CiAjaW5jbHVkZSA8a2pzL0pTTG9j
ay5oPgorI2luY2x1ZGUgPGt4bWxjb3JlL0hhc2hNYXAuaD4KIAogdXNpbmcgbmFtZXNwYWNlIEtK
UzsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBzdGF0aWMgaW50IHBhZ2VDb3VudDsKK3N0YXRp
YyBIYXNoTWFwPFN0cmluZywgSGFzaFNldDxQYWdlKj4qPiogZnJhbWVOYW1lc3BhY2VzOwogCi1Q
YWdlOjpQYWdlKCkgCitQYWdlOjpQYWdlKCkgOiBtX2ZyYW1lQ291bnQoMCkKIHsKICAgICArK3Bh
Z2VDb3VudDsKIH0KIAogUGFnZTo6flBhZ2UoKSAKLXsgCit7CiAgICAgbV9tYWluRnJhbWUtPmRl
dGFjaEZyb21WaWV3KCk7IAorICAgIHNldEdyb3VwTmFtZShTdHJpbmcoKSk7CiAgICAgaWYgKCEt
LXBhZ2VDb3VudCkgewogICAgICAgICBGcmFtZTo6ZW5kQWxsTGlmZVN1cHBvcnQoKTsKICNpZm5k
ZWYgTkRFQlVHCkBAIC01NSw0ICs1OCwzOSBAQAogICAgIG1fbWFpbkZyYW1lID0gbWFpbkZyYW1l
OwogfQogCit2b2lkIFBhZ2U6OnNldEdyb3VwTmFtZShjb25zdCBTdHJpbmcmIG5hbWUpCit7Cisg
ICAgaWYgKGZyYW1lTmFtZXNwYWNlcyAmJiAhbV9ncm91cE5hbWUuaXNFbXB0eSgpKSB7CisgICAg
ICAgIEhhc2hTZXQ8UGFnZSo+KiBvbGROYW1lc3BhY2UgPSBmcmFtZU5hbWVzcGFjZXMtPmdldCht
X2dyb3VwTmFtZSk7CisgICAgICAgIGlmIChvbGROYW1lc3BhY2UpIHsKKyAgICAgICAgICAgIG9s
ZE5hbWVzcGFjZS0+cmVtb3ZlKHRoaXMpOworICAgICAgICAgICAgaWYgKG9sZE5hbWVzcGFjZS0+
aXNFbXB0eSgpKSB7CisgICAgICAgICAgICAgICAgZnJhbWVOYW1lc3BhY2VzLT5yZW1vdmUobV9n
cm91cE5hbWUpOworICAgICAgICAgICAgICAgIGRlbGV0ZSBvbGROYW1lc3BhY2U7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgbV9ncm91cE5hbWUgPSBuYW1lOworICAgIGlm
ICghbmFtZS5pc0VtcHR5KCkpIHsKKyAgICAgICAgaWYgKCFmcmFtZU5hbWVzcGFjZXMpCisgICAg
ICAgICAgICBmcmFtZU5hbWVzcGFjZXMgPSBuZXcgSGFzaE1hcDxTdHJpbmcsIEhhc2hTZXQ8UGFn
ZSo+Kj47CisgICAgICAgIEhhc2hTZXQ8UGFnZSo+KiBuZXdOYW1lc3BhY2UgPSBmcmFtZU5hbWVz
cGFjZXMtPmdldChuYW1lKTsKKyAgICAgICAgaWYgKCFuZXdOYW1lc3BhY2UpIHsKKyAgICAgICAg
ICAgIG5ld05hbWVzcGFjZSA9IG5ldyBIYXNoU2V0PFBhZ2UqPjsKKyAgICAgICAgICAgIGZyYW1l
TmFtZXNwYWNlcy0+YWRkKG5hbWUsIG5ld05hbWVzcGFjZSk7CisgICAgICAgIH0KKyAgICAgICAg
bmV3TmFtZXNwYWNlLT5hZGQodGhpcyk7CisgICAgfQogfQorCitjb25zdCBIYXNoU2V0PFBhZ2Uq
PiogUGFnZTo6ZnJhbWVOYW1lc3BhY2UoKSBjb25zdAoreworICAgIHJldHVybiAoZnJhbWVOYW1l
c3BhY2VzICYmICFtX2dyb3VwTmFtZS5pc0VtcHR5KCkpID8gZnJhbWVOYW1lc3BhY2VzLT5nZXQo
bV9ncm91cE5hbWUpIDogMDsKK30KKworY29uc3QgSGFzaFNldDxQYWdlKj4qIFBhZ2U6OmZyYW1l
TmFtZXNwYWNlKGNvbnN0IFN0cmluZyYgZ3JvdXBOYW1lKQoreworICAgIHJldHVybiAoZnJhbWVO
YW1lc3BhY2VzICYmICFncm91cE5hbWUuaXNFbXB0eSgpKSA/IGZyYW1lTmFtZXNwYWNlcy0+Z2V0
KGdyb3VwTmFtZSkgOiAwOworfQorCit9CkluZGV4OiBXZWJLaXQvQ2hhbmdlTG9nCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYktpdC9DaGFuZ2VMb2cJKHJldmlzaW9uIDEzMTYzKQorKysgV2ViS2l0L0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE2IEBACisyMDA2LTAzLTA2ICBEYXJpbiBB
ZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICAtIGNoYW5nZSBob3cgZnJhbWUgbmFtZXNwYWNpbmcgd29ya3MgdG8g
YmUgbW9yZSBjb21wbGV0ZWx5IG9uIHRoZSBXZWJDb3JlIHNpZGUKKworICAgICAgICAqIFdlYlZp
ZXcvV2ViRnJhbWVJbnRlcm5hbC5oOiBSZW1vdmUgX3NldEZyYW1lTmFtZXNwYWNlOiBhbmQgX2Zy
YW1lTmFtZXNwYWNlLgorICAgICAgICAqIFdlYlZpZXcvV2ViRnJhbWUubTogRGl0dG8uCisKKyAg
ICAgICAgKiBXZWJWaWV3L1dlYlZpZXcubToKKyAgICAgICAgKC1bV2ViVmlldyBzZXRHcm91cE5h
bWU6XSk6IENhbGwgLVtXZWJDb3JlUGFnZUJyaWRnZSBzZXRHcm91cE5hbWU6XS4KKyAgICAgICAg
KC1bV2ViVmlldyBncm91cE5hbWVdKTogQ2FsbCAtW1dlYkNvcmVQYWdlQnJpZGdlIGdyb3VwTmFt
ZV0uCisKIDIwMDYtMDMtMDMgIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgog
CiAgICAgICAgIFJldmlld2VkIGJ5IERhcmluLgpJbmRleDogV2ViS2l0L1dlYlZpZXcvV2ViRnJh
bWVJbnRlcm5hbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9XZWJWaWV3L1dlYkZyYW1lSW50ZXJu
YWwuaAkocmV2aXNpb24gMTMxNjIpCisrKyBXZWJLaXQvV2ViVmlldy9XZWJGcmFtZUludGVybmFs
LmgJKHdvcmtpbmcgY29weSkKQEAgLTUwLDkgKzUwLDYgQEAKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3I6KE5TRXJyb3IgKill
cnJvcjsKIC0gKHZvaWQpX3NldHVwRm9yUmVwbGFjZTsKIAotLSAodm9pZClfc2V0RnJhbWVOYW1l
c3BhY2U6KE5TU3RyaW5nICopbmFtZXNwYWNlOwotLSAoTlNTdHJpbmcgKilfZnJhbWVOYW1lc3Bh
Y2U7Ci0KIC0gKEJPT0wpX2hhc1NlbGVjdGlvbjsKIC0gKHZvaWQpX2NsZWFyU2VsZWN0aW9uOwog
LSAoV2ViRnJhbWUgKilfZmluZEZyYW1lV2l0aFNlbGVjdGlvbjsKSW5kZXg6IFdlYktpdC9XZWJW
aWV3L1dlYlZpZXcubQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvV2ViVmlldy9XZWJWaWV3Lm0JKHJl
dmlzaW9uIDEzMTYyKQorKysgV2ViS2l0L1dlYlZpZXcvV2ViVmlldy5tCSh3b3JraW5nIGNvcHkp
CkBAIC0yMjk2LDEyICsyMjk2LDEyIEBACiAKIC0gKHZvaWQpc2V0R3JvdXBOYW1lOihOU1N0cmlu
ZyAqKWdyb3VwTmFtZQogewotICAgIFtbc2VsZiBtYWluRnJhbWVdIF9zZXRGcmFtZU5hbWVzcGFj
ZTpncm91cE5hbWVdOworICAgIFtbc2VsZiBfcGFnZUJyaWRnZV0gc2V0R3JvdXBOYW1lOmdyb3Vw
TmFtZV07CiB9CiAKIC0gKE5TU3RyaW5nICopZ3JvdXBOYW1lCiB7Ci0gICAgcmV0dXJuIFtbc2Vs
ZiBtYWluRnJhbWVdIF9mcmFtZU5hbWVzcGFjZV07CisgICAgcmV0dXJuIFtbc2VsZiBfcGFnZUJy
aWRnZV0gZ3JvdXBOYW1lXTsKIH0KIAogLSAoZG91YmxlKWVzdGltYXRlZFByb2dyZXNzCkluZGV4
OiBXZWJLaXQvV2ViVmlldy9XZWJGcmFtZS5tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9XZWJWaWV3
L1dlYkZyYW1lLm0JKHJldmlzaW9uIDEzMTYyKQorKysgV2ViS2l0L1dlYlZpZXcvV2ViRnJhbWUu
bQkod29ya2luZyBjb3B5KQpAQCAtMjY0MiwxNiArMjY0Miw2IEBACiAgICAgW3NlbGYgX2RldGFj
aENoaWxkcmVuXTsKIH0KIAotLSAodm9pZClfc2V0RnJhbWVOYW1lc3BhY2U6KE5TU3RyaW5nICop
bmFtZXNwYWNlCi17Ci0gICAgW1tzZWxmIF9icmlkZ2VdIHNldEZyYW1lTmFtZXNwYWNlOm5hbWVz
cGFjZV07Ci19Ci0KLS0gKE5TU3RyaW5nICopX2ZyYW1lTmFtZXNwYWNlCi17Ci0gICAgcmV0dXJu
IFtbc2VsZiBfYnJpZGdlXSBmcmFtZU5hbWVzcGFjZV07Ci19Ci0KIC0gKEJPT0wpX2hhc1NlbGVj
dGlvbgogewogICAgIGlkIGRvY3VtZW50VmlldyA9IFtbc2VsZiBmcmFtZVZpZXddIGRvY3VtZW50
Vmlld107ICAgIAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>6976</attachid>
            <date>2006-03-09 23:37:04 -0800</date>
            <delta_ts>2006-03-10 10:19:12 -0800</delta_ts>
            <desc>patch with detailed change log and a layout test</desc>
            <filename>FrameNamePatch.txt</filename>
            <type>text/plain</type>
            <size>71646</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9D
aGFuZ2VMb2cJKHJldmlzaW9uIDEzMjQ0KQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDMgKzEsMTcgQEAKKzIwMDYtMDMtMTAgIERhcmluIEFkbGVyICA8ZGFy
aW5AYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIC0gdGVzdCBmb3IgaHR0cDovL2J1Z3ppbGxhLm9wZW5kYXJ3aW4ub3JnL3Nob3dfYnVn
LmNnaT9pZD0zMzA4CisgICAgICAgICAgUG9wLXVwIGJsb2NraW5nIGJsb2NrcyB3aW5kb3cub3Bl
biBmb3IgYWxyZWFkeSBvcGVuIHdpbmRvd3MKKworICAgICAgICAqIGZhc3QvZG9tL1dpbmRvdy9v
cGVuLWV4aXN0aW5nLXBvcC11cC1ibG9ja2luZy1leHBlY3RlZC5jaGVja3N1bTogQWRkZWQuCisg
ICAgICAgICogZmFzdC9kb20vV2luZG93L29wZW4tZXhpc3RpbmctcG9wLXVwLWJsb2NraW5nLWV4
cGVjdGVkLnBuZzogQWRkZWQuCisgICAgICAgICogZmFzdC9kb20vV2luZG93L29wZW4tZXhpc3Rp
bmctcG9wLXVwLWJsb2NraW5nLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC9k
b20vV2luZG93L29wZW4tZXhpc3RpbmctcG9wLXVwLWJsb2NraW5nLmh0bWw6IEFkZGVkLgorICAg
ICAgICAqIGZhc3QvZG9tL1dpbmRvdy9yZXNvdXJjZXMvb3Blbi1zaWJsaW5nLXN1YmZyYW1lLmh0
bWw6IEFkZGVkLgorICAgICAgICAqIGZhc3QvZG9tL1dpbmRvdy9yZXNvdXJjZXMvc2libGluZy1z
dWJmcmFtZS1jb250ZW50Lmh0bWw6IEFkZGVkLgorCiAyMDA2LTAzLTA5ICBBZGVsZSBQZXRlcnNv
biAgPGFkZWxlQGFwcGxlLmNvbT4KIAogICAgICAgICAtIFRlc3QgZm9yIGh0dHA6Ly9idWd6aWxs
YS5vcGVuZGFyd2luLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzY3NQpJbmRleDogTGF5b3V0VGVzdHMv
ZmFzdC9kb20vV2luZG93L29wZW4tZXhpc3RpbmctcG9wLXVwLWJsb2NraW5nLWV4cGVjdGVkLnBu
Zwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09CkNhbm5vdCBkaXNwbGF5OiBmaWxlIG1hcmtlZCBhcyBhIGJpbmFyeSB0eXBl
Lgpzdm46bWltZS10eXBlID0gaW1hZ2UvcG5nCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBMYXlvdXRU
ZXN0cy9mYXN0L2RvbS9XaW5kb3cvb3Blbi1leGlzdGluZy1wb3AtdXAtYmxvY2tpbmctZXhwZWN0
ZWQucG5nCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX18KTmFtZTogc3ZuOm1pbWUtdHlwZQogICArIGltYWdlL3BuZwoKSW5k
ZXg6IExheW91dFRlc3RzL2Zhc3QvZG9tL1dpbmRvdy9vcGVuLWV4aXN0aW5nLXBvcC11cC1ibG9j
a2luZy1leHBlY3RlZC5jaGVja3N1bQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2Rv
bS9XaW5kb3cvb3Blbi1leGlzdGluZy1wb3AtdXAtYmxvY2tpbmctZXhwZWN0ZWQuY2hlY2tzdW0J
KHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2RvbS9XaW5kb3cvb3Blbi1leGlzdGlu
Zy1wb3AtdXAtYmxvY2tpbmctZXhwZWN0ZWQuY2hlY2tzdW0JKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEgQEAKKzAxZjNkYjRkOGJhYzQzZTk5YjUyNmVlZTQ2ZDQwYTc0ClwgTm8gbmV3bGluZSBhdCBl
bmQgb2YgZmlsZQpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9kb20vV2luZG93L29wZW4tZXhpc3Rp
bmctcG9wLXVwLWJsb2NraW5nLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9k
b20vV2luZG93L29wZW4tZXhpc3RpbmctcG9wLXVwLWJsb2NraW5nLmh0bWwJKHJldmlzaW9uIDAp
CisrKyBMYXlvdXRUZXN0cy9mYXN0L2RvbS9XaW5kb3cvb3Blbi1leGlzdGluZy1wb3AtdXAtYmxv
Y2tpbmcuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw2IEBACis8c2NyaXB0PgoraWYgKHdp
bmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci53YWl0
VW50aWxEb25lKCk7Cis8L3NjcmlwdD4KKzxpZnJhbWUgc3JjPSJyZXNvdXJjZXMvb3Blbi1zaWJs
aW5nLXN1YmZyYW1lLmh0bWwiPjwvaWZyYW1lPgorPGlmcmFtZSBuYW1lPSJzaWJsaW5nIiBzcmM9
ImRhdGE6dGV4dC9odG1sLElmIHlvdSBjYW4gc3RpbGwgc2VlIHRoaXMgdGV4dCwgdGhlIHRlc3Qg
ZmFpbGVkLiI+PC9pZnJhbWU+CgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBMYXlvdXRUZXN0cy9mYXN0
L2RvbS9XaW5kb3cvb3Blbi1leGlzdGluZy1wb3AtdXAtYmxvY2tpbmcuaHRtbApfX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
Ck5hbWU6IHN2bjptaW1lLXR5cGUKICAgKyB0ZXh0L2h0bWwKTmFtZTogc3ZuOmVvbC1zdHlsZQog
ICArIG5hdGl2ZQoKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvZG9tL1dpbmRvdy9yZXNvdXJjZXMv
c2libGluZy1zdWJmcmFtZS1jb250ZW50Lmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMv
ZmFzdC9kb20vV2luZG93L3Jlc291cmNlcy9zaWJsaW5nLXN1YmZyYW1lLWNvbnRlbnQuaHRtbAko
cmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvZG9tL1dpbmRvdy9yZXNvdXJjZXMvc2li
bGluZy1zdWJmcmFtZS1jb250ZW50Lmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsOSBAQAor
PHNjcmlwdD4KK2Z1bmN0aW9uIGxvYWRlZCgpIHsKKyAgICBpZiAod2luZG93LmxheW91dFRlc3RD
b250cm9sbGVyKQorICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7Cit9
Cis8L3NjcmlwdD4KKzxib2R5IG9ubG9hZD0ibG9hZGVkKCkiPgorVGhpcyB0ZXh0IHN1Y2Nlc3Nm
dWxseSByZXBsYWNlZCB0aGUgb3JpZ2luYWwgdGV4dCBpbiB0aGUgZnJhbWUuIFRlc3Qgc3VjY2Vl
ZGVkIQorPC9ib2R5PgoKUHJvcGVydHkgY2hhbmdlcyBvbjogTGF5b3V0VGVzdHMvZmFzdC9kb20v
V2luZG93L3Jlc291cmNlcy9zaWJsaW5nLXN1YmZyYW1lLWNvbnRlbnQuaHRtbApfX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
Ck5hbWU6IHN2bjptaW1lLXR5cGUKICAgKyB0ZXh0L2h0bWwKTmFtZTogc3ZuOmVvbC1zdHlsZQog
ICArIG5hdGl2ZQoKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvZG9tL1dpbmRvdy9yZXNvdXJjZXMv
b3Blbi1zaWJsaW5nLXN1YmZyYW1lLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFz
dC9kb20vV2luZG93L3Jlc291cmNlcy9vcGVuLXNpYmxpbmctc3ViZnJhbWUuaHRtbAkocmV2aXNp
b24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvZG9tL1dpbmRvdy9yZXNvdXJjZXMvb3Blbi1zaWJs
aW5nLXN1YmZyYW1lLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTAgQEAKKzxzY3JpcHQ+
CitmdW5jdGlvbiB0ZXN0KCkKK3sKKyAgICBvcGVuKCJzaWJsaW5nLXN1YmZyYW1lLWNvbnRlbnQu
aHRtbCIsICJzaWJsaW5nIik7Cit9Cis8L3NjcmlwdD4KKzxib2R5IG9ubG9hZD0idGVzdCgpIj4K
K1RoaXMgZnJhbWUgd2lsbCB0cnkgdG8gcmVwbGFjZSB0aGUgY29udGVudHMgb2YgdGhlIGZyYW1l
IHRvIHRoZSByaWdodC4KK0lmIHRoZSBidWcgc3RpbGwgb2NjdXJzLCBwb3AtdXAgYmxvY2tpbmcg
d2lsbCBwcmV2ZW50IGl0IGZyb20gZG9pbmcgc28uCis8L2JvZHk+CgpQcm9wZXJ0eSBjaGFuZ2Vz
IG9uOiBMYXlvdXRUZXN0cy9mYXN0L2RvbS9XaW5kb3cvcmVzb3VyY2VzL29wZW4tc2libGluZy1z
dWJmcmFtZS5odG1sCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX18KTmFtZTogc3ZuOm1pbWUtdHlwZQogICArIHRleHQvaHRt
bApOYW1lOiBzdm46ZW9sLXN0eWxlCiAgICsgbmF0aXZlCgpJbmRleDogTGF5b3V0VGVzdHMvZmFz
dC9kb20vV2luZG93L29wZW4tZXhpc3RpbmctcG9wLXVwLWJsb2NraW5nLWV4cGVjdGVkLnR4dAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2RvbS9XaW5kb3cvb3Blbi1leGlzdGluZy1w
b3AtdXAtYmxvY2tpbmctZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMv
ZmFzdC9kb20vV2luZG93L29wZW4tZXhpc3RpbmctcG9wLXVwLWJsb2NraW5nLWV4cGVjdGVkLnR4
dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzMCBAQAorbGF5ZXIgYXQgKDAsMCkgc2l6ZSA4MDB4
NjAwCisgIFJlbmRlckNhbnZhcyBhdCAoMCwwKSBzaXplIDgwMHg2MDAKK2xheWVyIGF0ICgwLDAp
IHNpemUgODAweDYwMAorICBSZW5kZXJCbG9jayB7SFRNTH0gYXQgKDAsMCkgc2l6ZSA4MDB4NjAw
CisgICAgUmVuZGVyQm9keSB7Qk9EWX0gYXQgKDgsOCkgc2l6ZSA3ODR4NTg0CisgICAgICBSZW5k
ZXJQYXJ0T2JqZWN0IHtJRlJBTUV9IGF0ICgwLDApIHNpemUgMzAweDE1MAorICAgICAgICBsYXll
ciBhdCAoMCwwKSBzaXplIDMwMHgxNTAKKyAgICAgICAgICBSZW5kZXJDYW52YXMgYXQgKDAsMCkg
c2l6ZSAzMDB4MTUwCisgICAgICAgIGxheWVyIGF0ICgwLDApIHNpemUgMzAweDE1MAorICAgICAg
ICAgIFJlbmRlckJsb2NrIHtIVE1MfSBhdCAoMCwwKSBzaXplIDMwMHgxNTAKKyAgICAgICAgICAg
IFJlbmRlckJvZHkge0JPRFl9IGF0ICg4LDgpIHNpemUgMjg0eDEzNAorICAgICAgICAgICAgICBS
ZW5kZXJUZXh0IHtURVhUfSBhdCAoMCwwKSBzaXplIDI3OHg3MgorICAgICAgICAgICAgICAgIHRl
eHQgcnVuIGF0ICgwLDApIHdpZHRoIDI3ODogIlRoaXMgZnJhbWUgd2lsbCB0cnkgdG8gcmVwbGFj
ZSB0aGUgY29udGVudHMgb2YiCisgICAgICAgICAgICAgICAgdGV4dCBydW4gYXQgKDAsMTgpIHdp
ZHRoIDI3NTogInRoZSBmcmFtZSB0byB0aGUgcmlnaHQuIElmIHRoZSBidWcgc3RpbGwgb2NjdXJz
LCIKKyAgICAgICAgICAgICAgICB0ZXh0IHJ1biBhdCAoMCwzNikgd2lkdGggMjY5OiAicG9wLXVw
IGJsb2NraW5nIHdpbGwgcHJldmVudCBpdCBmcm9tIGRvaW5nIgorICAgICAgICAgICAgICAgIHRl
eHQgcnVuIGF0ICgwLDU0KSB3aWR0aCAxODogInNvLiIKKyAgICAgICAgICAgICAgUmVuZGVyVGV4
dCB7VEVYVH0gYXQgKDAsMCkgc2l6ZSAweDAKKyAgICAgIFJlbmRlclRleHQge1RFWFR9IGF0ICgz
MDAsMTM2KSBzaXplIDR4MTgKKyAgICAgICAgdGV4dCBydW4gYXQgKDMwMCwxMzYpIHdpZHRoIDQ6
ICIgIgorICAgICAgUmVuZGVyUGFydE9iamVjdCB7SUZSQU1FfSBhdCAoMzA0LDApIHNpemUgMzAw
eDE1MAorICAgICAgICBsYXllciBhdCAoMCwwKSBzaXplIDMwMHgxNTAKKyAgICAgICAgICBSZW5k
ZXJDYW52YXMgYXQgKDAsMCkgc2l6ZSAzMDB4MTUwCisgICAgICAgIGxheWVyIGF0ICgwLDApIHNp
emUgMzAweDE1MAorICAgICAgICAgIFJlbmRlckJsb2NrIHtIVE1MfSBhdCAoMCwwKSBzaXplIDMw
MHgxNTAKKyAgICAgICAgICAgIFJlbmRlckJvZHkge0JPRFl9IGF0ICg4LDgpIHNpemUgMjg0eDEz
NAorICAgICAgICAgICAgICBSZW5kZXJUZXh0IHtURVhUfSBhdCAoMCwwKSBzaXplIDI2N3gzNgor
ICAgICAgICAgICAgICAgIHRleHQgcnVuIGF0ICgwLDApIHdpZHRoIDI2NzogIlRoaXMgdGV4dCBz
dWNjZXNzZnVsbHkgcmVwbGFjZWQgdGhlIG9yaWdpbmFsIgorICAgICAgICAgICAgICAgIHRleHQg
cnVuIGF0ICgwLDE4KSB3aWR0aCAyMTE6ICJ0ZXh0IGluIHRoZSBmcmFtZS4gVGVzdCBzdWNjZWVk
ZWQhIgorICAgICAgICAgICAgICBSZW5kZXJUZXh0IHtURVhUfSBhdCAoMCwwKSBzaXplIDB4MAor
ICAgICAgUmVuZGVyVGV4dCB7VEVYVH0gYXQgKDAsMCkgc2l6ZSAweDAKClByb3BlcnR5IGNoYW5n
ZXMgb246IExheW91dFRlc3RzL2Zhc3QvZG9tL1dpbmRvdy9vcGVuLWV4aXN0aW5nLXBvcC11cC1i
bG9ja2luZy1leHBlY3RlZC50eHQKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpOYW1lOiBzdm46ZW9sLXN0eWxlCiAgICsg
bmF0aXZlCgpJbmRleDogV2ViS2l0L0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvQ2hh
bmdlTG9nCShyZXZpc2lvbiAxMzI0NCkKKysrIFdlYktpdC9DaGFuZ2VMb2cJKHdvcmtpbmcgY29w
eSkKQEAgLTEsMyArMSwxNiBAQAorMjAwNi0wMy0xMCAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBs
ZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
LSBjaGFuZ2UgaG93IGZyYW1lIG5hbWVzcGFjaW5nIHdvcmtzIHRvIGJlIG1vcmUgY29tcGxldGVs
eSBvbiB0aGUgV2ViQ29yZSBzaWRlCisKKyAgICAgICAgKiBXZWJWaWV3L1dlYkZyYW1lSW50ZXJu
YWwuaDogUmVtb3ZlIF9zZXRGcmFtZU5hbWVzcGFjZTogYW5kIF9mcmFtZU5hbWVzcGFjZS4KKyAg
ICAgICAgKiBXZWJWaWV3L1dlYkZyYW1lLm06IERpdHRvLgorCisgICAgICAgICogV2ViVmlldy9X
ZWJWaWV3Lm06CisgICAgICAgICgtW1dlYlZpZXcgc2V0R3JvdXBOYW1lOl0pOiBDYWxsIC1bV2Vi
Q29yZVBhZ2VCcmlkZ2Ugc2V0R3JvdXBOYW1lOl0uCisgICAgICAgICgtW1dlYlZpZXcgZ3JvdXBO
YW1lXSk6IENhbGwgLVtXZWJDb3JlUGFnZUJyaWRnZSBncm91cE5hbWVdLgorCiAyMDA2LTAzLTA5
ICBBbGV4ZXkgUHJvc2t1cnlha292ICA8YXBAbnlwb3AuY29tPgogCiAgICAgICAgIFJldmlld2Vk
IGJ5IERhcmluLgpJbmRleDogV2ViS2l0L1dlYlZpZXcvV2ViRnJhbWVJbnRlcm5hbC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYktpdC9XZWJWaWV3L1dlYkZyYW1lSW50ZXJuYWwuaAkocmV2aXNpb24gMTMy
NDQpCisrKyBXZWJLaXQvV2ViVmlldy9XZWJGcmFtZUludGVybmFsLmgJKHdvcmtpbmcgY29weSkK
QEAgLTUwLDkgKzUwLDYgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZXJyb3I6KE5TRXJyb3IgKillcnJvcjsKIC0gKHZvaWQpX3Nl
dHVwRm9yUmVwbGFjZTsKIAotLSAodm9pZClfc2V0RnJhbWVOYW1lc3BhY2U6KE5TU3RyaW5nICop
bmFtZXNwYWNlOwotLSAoTlNTdHJpbmcgKilfZnJhbWVOYW1lc3BhY2U7Ci0KIC0gKEJPT0wpX2hh
c1NlbGVjdGlvbjsKIC0gKHZvaWQpX2NsZWFyU2VsZWN0aW9uOwogLSAoV2ViRnJhbWUgKilfZmlu
ZEZyYW1lV2l0aFNlbGVjdGlvbjsKSW5kZXg6IFdlYktpdC9XZWJWaWV3L1dlYlZpZXcubQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJLaXQvV2ViVmlldy9XZWJWaWV3Lm0JKHJldmlzaW9uIDEzMjQ0KQorKysg
V2ViS2l0L1dlYlZpZXcvV2ViVmlldy5tCSh3b3JraW5nIGNvcHkpCkBAIC0yMjk2LDEyICsyMjk2
LDEyIEBACiAKIC0gKHZvaWQpc2V0R3JvdXBOYW1lOihOU1N0cmluZyAqKWdyb3VwTmFtZQogewot
ICAgIFtbc2VsZiBtYWluRnJhbWVdIF9zZXRGcmFtZU5hbWVzcGFjZTpncm91cE5hbWVdOworICAg
IFtbc2VsZiBfcGFnZUJyaWRnZV0gc2V0R3JvdXBOYW1lOmdyb3VwTmFtZV07CiB9CiAKIC0gKE5T
U3RyaW5nICopZ3JvdXBOYW1lCiB7Ci0gICAgcmV0dXJuIFtbc2VsZiBtYWluRnJhbWVdIF9mcmFt
ZU5hbWVzcGFjZV07CisgICAgcmV0dXJuIFtbc2VsZiBfcGFnZUJyaWRnZV0gZ3JvdXBOYW1lXTsK
IH0KIAogLSAoZG91YmxlKWVzdGltYXRlZFByb2dyZXNzCkluZGV4OiBXZWJLaXQvV2ViVmlldy9X
ZWJGcmFtZS5tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9XZWJWaWV3L1dlYkZyYW1lLm0JKHJldmlz
aW9uIDEzMjQ0KQorKysgV2ViS2l0L1dlYlZpZXcvV2ViRnJhbWUubQkod29ya2luZyBjb3B5KQpA
QCAtMjY0MiwxNiArMjY0Miw2IEBACiAgICAgW3NlbGYgX2RldGFjaENoaWxkcmVuXTsKIH0KIAot
LSAodm9pZClfc2V0RnJhbWVOYW1lc3BhY2U6KE5TU3RyaW5nICopbmFtZXNwYWNlCi17Ci0gICAg
W1tzZWxmIF9icmlkZ2VdIHNldEZyYW1lTmFtZXNwYWNlOm5hbWVzcGFjZV07Ci19Ci0KLS0gKE5T
U3RyaW5nICopX2ZyYW1lTmFtZXNwYWNlCi17Ci0gICAgcmV0dXJuIFtbc2VsZiBfYnJpZGdlXSBm
cmFtZU5hbWVzcGFjZV07Ci19Ci0KIC0gKEJPT0wpX2hhc1NlbGVjdGlvbgogewogICAgIGlkIGRv
Y3VtZW50VmlldyA9IFtbc2VsZiBmcmFtZVZpZXddIGRvY3VtZW50Vmlld107ICAgIApJbmRleDog
V2ViQ29yZS9raHRtbC9odG1sL2h0bWxfYmFzZWltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUva2h0bWwvaHRtbC9odG1sX2Jhc2VpbXBsLmNwcAkocmV2aXNpb24gMTMyNDQpCisrKyBXZWJD
b3JlL2todG1sL2h0bWwvaHRtbF9iYXNlaW1wbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUsNyAr
NSw3IEBACiAgKiAgICAgICAgICAgKEMpIDE5OTkgQW50dGkgS29pdmlzdG8gKGtvaXZpc3RvQGtk
ZS5vcmcpCiAgKiAgICAgICAgICAgKEMpIDIwMDAgU2ltb24gSGF1c21hbm4gKGhhdXNtYW5uQGtk
ZS5vcmcpCiAgKiAgICAgICAgICAgKEMpIDIwMDEgRGlyayBNdWVsbGVyIChtdWVsbGVyQGtkZS5v
cmcpCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQgQXBwbGUgQ29tcHV0ZXIsIEluYy4KKyAqIENvcHly
aWdodCAoQykgMjAwNCwgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLgogICoKICAqIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAq
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljCkBAIC0yNywyNyArMjcsMjYgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJo
dG1sX2Jhc2VpbXBsLmgiCiAKLSNpbmNsdWRlICJodG1sL2h0bWxfZG9jdW1lbnRpbXBsLmgiCi0K
LSNpbmNsdWRlICJGcmFtZVZpZXcuaCIKKyNpbmNsdWRlICJFdmVudE5hbWVzLmgiCiAjaW5jbHVk
ZSAiRnJhbWUuaCIKICNpbmNsdWRlICJGcmFtZVRyZWUuaCIKLQotI2luY2x1ZGUgInJlbmRlcmlu
Zy9yZW5kZXJfZnJhbWVzLmgiCi0jaW5jbHVkZSAiY3NzL2Nzc3N0eWxlc2VsZWN0b3IuaCIKLSNp
bmNsdWRlICJjc3MvY3NzX3N0eWxlc2hlZXRpbXBsLmgiCisjaW5jbHVkZSAiRnJhbWVWaWV3Lmgi
CisjaW5jbHVkZSAiS1VSTC5oIgorI2luY2x1ZGUgIlBhZ2UuaCIKKyNpbmNsdWRlICJQbGF0Zm9y
bVN0cmluZy5oIgorI2luY2x1ZGUgImNzc19zdHlsZXNoZWV0aW1wbC5oIgorI2luY2x1ZGUgImNz
c2hlbHBlci5oIgogI2luY2x1ZGUgImNzc3Byb3BlcnRpZXMuaCIKKyNpbmNsdWRlICJjc3NzdHls
ZXNlbGVjdG9yLmgiCiAjaW5jbHVkZSAiY3NzdmFsdWVzLmgiCi0jaW5jbHVkZSAiY3NzL2Nzc2hl
bHBlci5oIgotI2luY2x1ZGUgImxvYWRlci5oIgotI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgi
CiAjaW5jbHVkZSAiZG9tMl9ldmVudHNpbXBsLmgiCi0jaW5jbHVkZSAiRXZlbnROYW1lcy5oIgor
I2luY2x1ZGUgImh0bWxfZG9jdW1lbnRpbXBsLmgiCiAjaW5jbHVkZSAiaHRtbG5hbWVzLmgiCisj
aW5jbHVkZSAibG9hZGVyLmgiCisjaW5jbHVkZSAicmVuZGVyX2ZyYW1lcy5oIgogCi0jaW5jbHVk
ZSA8S1VSTC5oPgotCiBuYW1lc3BhY2UgV2ViQ29yZSB7CisKIHVzaW5nIG5hbWVzcGFjZSBFdmVu
dE5hbWVzOwogdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIApAQCAtMjk5LDcgKzI5OCw3IEBA
CiAgICAgLy8gRklYTUU6IFRoaXMgbGltaXQgY291bGQgYmUgaGlnaGVyLCBidXQgV2ViS2l0IGhh
cyBzb21lCiAgICAgLy8gYWxnb3JpdGhtcyB0aGF0IGhhcHBlbiB3aGlsZSBsb2FkaW5nIHdoaWNo
IGFwcGVhciB0byBiZSBOXjIgb3IKICAgICAvLyB3b3JzZSBpbiB0aGUgbnVtYmVyIG9mIGZyYW1l
cwotICAgIGlmICh3LT5mcmFtZSgpLT50b3BMZXZlbEZyYW1lQ291bnQoKSA+PSAyMDApIHsKKyAg
ICBpZiAody0+ZnJhbWUoKS0+cGFnZSgpLT5mcmFtZUNvdW50KCkgPj0gMjAwKSB7CiAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICB9CiAKQEAgLTMyNCwyMyArMzIzLDIwIEBACiB7CiAgICAgRG9j
dW1lbnRJbXBsICpkID0gZ2V0RG9jdW1lbnQoKTsKICAgICBGcmFtZVZpZXcgKncgPSBkID8gZC0+
dmlldygpIDogMDsKLSAgICBpZiAoIXcpIHsKKyAgICBpZiAoIXcpCiAgICAgICAgIHJldHVybjsK
LSAgICB9CiAgICAgCiAgICAgQXRvbWljU3RyaW5nIHJlbGF0aXZlVVJMID0gbV9VUkw7Ci0gICAg
aWYgKHJlbGF0aXZlVVJMLmlzRW1wdHkoKSkgeworICAgIGlmIChyZWxhdGl2ZVVSTC5pc0VtcHR5
KCkpCiAgICAgICAgIHJlbGF0aXZlVVJMID0gImFib3V0OmJsYW5rIjsKLSAgICB9CiAKICAgICAv
LyBMb2FkIHRoZSBmcmFtZSBjb250ZW50cy4KLSAgICBGcmFtZSAqZnJhbWUgPSB3LT5mcmFtZSgp
OwotICAgIEZyYW1lICpmcmFtZVBhcnQgPSBmcmFtZS0+ZmluZEZyYW1lKG1fbmFtZS5xc3RyaW5n
KCkpOwotICAgIGlmIChmcmFtZVBhcnQpIHsKLSAgICAgICAgZnJhbWVQYXJ0LT5vcGVuVVJMKGdl
dERvY3VtZW50KCktPmNvbXBsZXRlVVJMKHJlbGF0aXZlVVJMLnFzdHJpbmcoKSkpOwotICAgIH0g
ZWxzZSB7Ci0gICAgICAgIGZyYW1lLT5yZXF1ZXN0RnJhbWUoc3RhdGljX2Nhc3Q8UmVuZGVyRnJh
bWUgKj4ocmVuZGVyZXIoKSksIHJlbGF0aXZlVVJMLnFzdHJpbmcoKSwgbV9uYW1lLnFzdHJpbmco
KSk7Ci0gICAgfQorICAgIEZyYW1lKiBwYXJlbnRGcmFtZSA9IHctPmZyYW1lKCk7CisgICAgRnJh
bWUqIGNoaWxkRnJhbWUgPSBwYXJlbnRGcmFtZS0+dHJlZSgpLT5jaGlsZChtX25hbWUpOworICAg
IGlmIChjaGlsZEZyYW1lKQorICAgICAgICBjaGlsZEZyYW1lLT5vcGVuVVJMKGdldERvY3VtZW50
KCktPmNvbXBsZXRlVVJMKHJlbGF0aXZlVVJMLnFzdHJpbmcoKSkpOworICAgIGVsc2UKKyAgICAg
ICAgcGFyZW50RnJhbWUtPnJlcXVlc3RGcmFtZShzdGF0aWNfY2FzdDxSZW5kZXJGcmFtZSAqPihy
ZW5kZXJlcigpKSwgcmVsYXRpdmVVUkwucXN0cmluZygpLCBtX25hbWUucXN0cmluZygpKTsKIH0K
IAogCkBAIC00MjEsMjEgKzQxNywxOCBAQAogICAgIGlmICghcmVuZGVyZXIoKSkKICAgICAgICAg
cmV0dXJuOwogCi0gICAgRnJhbWUgKmZyYW1lID0gZ2V0RG9jdW1lbnQoKS0+ZnJhbWUoKTsKKyAg
ICBGcmFtZSogZnJhbWUgPSBnZXREb2N1bWVudCgpLT5mcmFtZSgpOwogCiAgICAgaWYgKCFmcmFt
ZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgZnJhbWUtPmluY3JlbWVudEZyYW1lQ291bnQoKTsK
KyAgICBmcmFtZS0+cGFnZSgpLT5pbmNyZW1lbnRGcmFtZUNvdW50KCk7CiAgICAgCiAgICAgQXRv
bWljU3RyaW5nIHJlbGF0aXZlVVJMID0gbV9VUkw7Ci0gICAgaWYgKHJlbGF0aXZlVVJMLmlzRW1w
dHkoKSkgeworICAgIGlmIChyZWxhdGl2ZVVSTC5pc0VtcHR5KCkpCiAgICAgICAgIHJlbGF0aXZl
VVJMID0gImFib3V0OmJsYW5rIjsKLSAgICB9CiAKLSAgICAvLyB3ZSBuZWVkIGEgdW5pcXVlIG5h
bWUgZm9yIGV2ZXJ5IGZyYW1lIGluIHRoZSBmcmFtZXNldC4gSG9wZSB0aGF0J3MgdW5pcXVlIGVu
b3VnaC4KLSAgICBpZiAobV9uYW1lLmlzRW1wdHkoKSB8fCBmcmFtZS0+ZnJhbWVFeGlzdHMobV9u
YW1lLnFzdHJpbmcoKSkpCi0gICAgICAgIG1fbmFtZSA9IEF0b21pY1N0cmluZyhmcmFtZS0+cmVx
dWVzdEZyYW1lTmFtZSgpKTsKKyAgICBtX25hbWUgPSBmcmFtZS0+dHJlZSgpLT5uYW1lRm9yTmV3
Q2hpbGQobV9uYW1lKTsKIAogICAgIC8vIGxvYWQgdGhlIGZyYW1lIGNvbnRlbnRzCiAgICAgZnJh
bWUtPnJlcXVlc3RGcmFtZShzdGF0aWNfY2FzdDxSZW5kZXJGcmFtZSo+KHJlbmRlcmVyKCkpLCBy
ZWxhdGl2ZVVSTC5xc3RyaW5nKCksIG1fbmFtZS5xc3RyaW5nKCkpOwpAQCAtNDQzLDEzICs0MzYs
MTEgQEAKIAogdm9pZCBIVE1MRnJhbWVFbGVtZW50SW1wbDo6Y2xvc2UoKQogewotICAgIEZyYW1l
ICpmcmFtZSA9IGdldERvY3VtZW50KCktPmZyYW1lKCk7Ci0KKyAgICBGcmFtZSogZnJhbWUgPSBn
ZXREb2N1bWVudCgpLT5mcmFtZSgpOwogICAgIGlmIChyZW5kZXJlcigpICYmIGZyYW1lKSB7Ci0g
ICAgICAgIGZyYW1lLT5kZWNyZW1lbnRGcmFtZUNvdW50KCk7Ci0gICAgICAgIEZyYW1lICpmcmFt
ZVBhcnQgPSBmcmFtZS0+ZmluZEZyYW1lKG1fbmFtZS5xc3RyaW5nKCkpOwotICAgICAgICBpZiAo
ZnJhbWVQYXJ0KQotICAgICAgICAgICAgZnJhbWVQYXJ0LT5mcmFtZURldGFjaGVkKCk7CisgICAg
ICAgIGZyYW1lLT5wYWdlKCktPmRlY3JlbWVudEZyYW1lQ291bnQoKTsKKyAgICAgICAgaWYgKEZy
YW1lKiBjaGlsZEZyYW1lID0gZnJhbWUtPnRyZWUoKS0+Y2hpbGQobV9uYW1lKSkKKyAgICAgICAg
ICAgIGNoaWxkRnJhbWUtPmZyYW1lRGV0YWNoZWQoKTsKICAgICB9CiB9CiAKQEAgLTUxMywyNiAr
NTA0LDIyIEBACiAgICAgICAgIHJlbmRlckZyYW1lLT53aWRnZXQoKS0+Y2xlYXJGb2N1cygpOwog
fQogCi1GcmFtZSogSFRNTEZyYW1lRWxlbWVudEltcGw6OmNvbnRlbnRQYXJ0KCkgY29uc3QKK0Zy
YW1lKiBIVE1MRnJhbWVFbGVtZW50SW1wbDo6Y29udGVudEZyYW1lKCkgY29uc3QKIHsKICAgICAv
LyBTdGFydCB3aXRoIHRoZSBwYXJ0IHRoYXQgY29udGFpbnMgdGhpcyBlbGVtZW50LCBvdXIgb3du
ZXJEb2N1bWVudC4KLSAgICBGcmFtZSogb3duZXJEb2N1bWVudFBhcnQgPSBnZXREb2N1bWVudCgp
LT5mcmFtZSgpOwotICAgIGlmICghb3duZXJEb2N1bWVudFBhcnQpIHsKKyAgICBGcmFtZSogcGFy
ZW50RnJhbWUgPSBnZXREb2N1bWVudCgpLT5mcmFtZSgpOworICAgIGlmICghcGFyZW50RnJhbWUp
CiAgICAgICAgIHJldHVybiAwOwotICAgIH0KIAogICAgIC8vIEZpbmQgdGhlIHBhcnQgZm9yIHRo
ZSBzdWJmcmFtZSB0aGF0IHRoaXMgZWxlbWVudCByZXByZXNlbnRzLgotICAgIHJldHVybiBvd25l
ckRvY3VtZW50UGFydC0+ZmluZEZyYW1lKG1fbmFtZS5xc3RyaW5nKCkpOworICAgIHJldHVybiBw
YXJlbnRGcmFtZS0+dHJlZSgpLT5jaGlsZChtX25hbWUpOwogfQogCiBEb2N1bWVudEltcGwqIEhU
TUxGcmFtZUVsZW1lbnRJbXBsOjpjb250ZW50RG9jdW1lbnQoKSBjb25zdAogewotICAgIEZyYW1l
ICpmcmFtZSA9IGNvbnRlbnRQYXJ0KCk7Ci0gICAgaWYgKCFmcmFtZSkgeworICAgIEZyYW1lKiBm
cmFtZSA9IGNvbnRlbnRGcmFtZSgpOworICAgIGlmICghZnJhbWUpCiAgICAgICAgIHJldHVybiAw
OwotICAgIH0KLQotICAgIC8vIFJldHVybiB0aGUgZG9jdW1lbnQgZm9yIHRoYXQgcGFydCwgd2hp
Y2ggaXMgb3VyIGNvbnRlbnREb2N1bWVudC4KICAgICByZXR1cm4gZnJhbWUtPmRvY3VtZW50KCk7
CiB9CiAKQEAgLTkxNiwxNiArOTAzLDEzIEBACiAgICAgbV9uYW1lID0gZ2V0QXR0cmlidXRlKG5h
bWVBdHRyKTsKICAgICBpZiAobV9uYW1lLmlzTnVsbCgpKQogICAgICAgICBtX25hbWUgPSBnZXRB
dHRyaWJ1dGUoaWRBdHRyKTsKLSAgICAKKwogICAgIEhUTUxFbGVtZW50SW1wbDo6YXR0YWNoKCk7
CiAKLSAgICBGcmFtZSAqZnJhbWUgPSBnZXREb2N1bWVudCgpLT5mcmFtZSgpOwotICAgIGlmIChy
ZW5kZXJlcigpICYmIGZyYW1lKSB7Ci0gICAgICAgIC8vIHdlIG5lZWQgYSB1bmlxdWUgbmFtZSBm
b3IgZXZlcnkgZnJhbWUgaW4gdGhlIGZyYW1lc2V0LiBIb3BlIHRoYXQncyB1bmlxdWUgZW5vdWdo
LgotICAgICAgICBmcmFtZS0+aW5jcmVtZW50RnJhbWVDb3VudCgpOwotICAgICAgICBpZiAobV9u
YW1lLmlzRW1wdHkoKSB8fCBmcmFtZS0+ZnJhbWVFeGlzdHMobV9uYW1lLnFzdHJpbmcoKSkpCi0g
ICAgICAgICAgICBtX25hbWUgPSBBdG9taWNTdHJpbmcoZnJhbWUtPnJlcXVlc3RGcmFtZU5hbWUo
KSk7Ci0KKyAgICBGcmFtZSogcGFyZW50RnJhbWUgPSBnZXREb2N1bWVudCgpLT5mcmFtZSgpOwor
ICAgIGlmIChyZW5kZXJlcigpICYmIHBhcmVudEZyYW1lKSB7CisgICAgICAgIHBhcmVudEZyYW1l
LT5wYWdlKCktPmluY3JlbWVudEZyYW1lQ291bnQoKTsKKyAgICAgICAgbV9uYW1lID0gcGFyZW50
RnJhbWUtPnRyZWUoKS0+bmFtZUZvck5ld0NoaWxkKG1fbmFtZSk7CiAgICAgICAgIHN0YXRpY19j
YXN0PFJlbmRlclBhcnRPYmplY3QqPihyZW5kZXJlcigpKS0+dXBkYXRlV2lkZ2V0KCk7CiAgICAg
ICAgIG5lZWRXaWRnZXRVcGRhdGUgPSBmYWxzZTsKICAgICB9CkluZGV4OiBXZWJDb3JlL2todG1s
L2h0bWwvaHRtbF9iYXNlaW1wbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUva2h0bWwvaHRtbC9o
dG1sX2Jhc2VpbXBsLmgJKHJldmlzaW9uIDEzMjQ0KQorKysgV2ViQ29yZS9raHRtbC9odG1sL2h0
bWxfYmFzZWltcGwuaAkod29ya2luZyBjb3B5KQpAQCAtMTEwLDcgKzExMCw3IEBACiAgICAgdmly
dHVhbCBib29sIGlzRm9jdXNhYmxlKCkgY29uc3Q7CiAgICAgdmlydHVhbCB2b2lkIHNldEZvY3Vz
KGJvb2wpOwogCi0gICAgRnJhbWUqIGNvbnRlbnRQYXJ0KCkgY29uc3Q7CisgICAgRnJhbWUqIGNv
bnRlbnRGcmFtZSgpIGNvbnN0OwogICAgIERvY3VtZW50SW1wbCogY29udGVudERvY3VtZW50KCkg
Y29uc3Q7CiAgICAgCiAgICAgdmlydHVhbCBib29sIGlzVVJMQXR0cmlidXRlKEF0dHJpYnV0ZUlt
cGwgKmF0dHIpIGNvbnN0OwpJbmRleDogV2ViQ29yZS9raHRtbC9lY21hL2tqc19odG1sLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2todG1sL2VjbWEva2pzX2h0bWwuY3BwCShyZXZpc2lvbiAx
MzI0NCkKKysrIFdlYkNvcmUva2h0bWwvZWNtYS9ranNfaHRtbC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTIwOCwxMiArMjA4LDEwIEBACiAgIFJlZlB0cjxET006OkhUTUxDb2xsZWN0aW9uSW1wbD4g
Y29sbGVjdGlvbiA9IGRvYy5kb2N1bWVudE5hbWVkSXRlbXMobmFtZSk7CiAKICAgaWYgKGNvbGxl
Y3Rpb24tPmxlbmd0aCgpID09IDEpIHsKLSAgICBOb2RlSW1wbCAqbm9kZSA9IGNvbGxlY3Rpb24t
PmZpcnN0SXRlbSgpOworICAgIE5vZGVJbXBsKiBub2RlID0gY29sbGVjdGlvbi0+Zmlyc3RJdGVt
KCk7CiAgICAgRnJhbWUgKmZyYW1lOwotICAgIGlmIChub2RlLT5oYXNUYWdOYW1lKGlmcmFtZVRh
ZykgJiYgCi0gICAgICAgIChmcmFtZSA9IHN0YXRpY19jYXN0PERPTTo6SFRNTElGcmFtZUVsZW1l
bnRJbXBsICo+KG5vZGUpLT5jb250ZW50UGFydCgpKSkKKyAgICBpZiAobm9kZS0+aGFzVGFnTmFt
ZShpZnJhbWVUYWcpICYmIChmcmFtZSA9IHN0YXRpY19jYXN0PERPTTo6SFRNTElGcmFtZUVsZW1l
bnRJbXBsICo+KG5vZGUpLT5jb250ZW50RnJhbWUoKSkpCiAgICAgICByZXR1cm4gV2luZG93Ojpy
ZXRyaWV2ZShmcmFtZSk7Ci0KICAgICByZXR1cm4gZ2V0RE9NTm9kZShleGVjLCBub2RlKTsKICAg
fQogCkBAIC0yMDkxLDcgKzIwODksNyBAQAogICAgICAgICBjYXNlIEZyYW1lQ29udGVudERvY3Vt
ZW50OiByZXR1cm4gY2hlY2tOb2RlU2VjdXJpdHkoZXhlYyxmcmFtZUVsZW1lbnQuY29udGVudERv
Y3VtZW50KCkpID8gCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBn
ZXRET01Ob2RlKGV4ZWMsIGZyYW1lRWxlbWVudC5jb250ZW50RG9jdW1lbnQoKSkgOiBqc1VuZGVm
aW5lZCgpOwogICAgICAgICBjYXNlIEZyYW1lQ29udGVudFdpbmRvdzogICByZXR1cm4gY2hlY2tO
b2RlU2VjdXJpdHkoZXhlYyxmcmFtZUVsZW1lbnQuY29udGVudERvY3VtZW50KCkpCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBXaW5kb3c6OnJldHJpZXZlKGZyYW1l
RWxlbWVudC5jb250ZW50UGFydCgpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgID8gV2luZG93OjpyZXRyaWV2ZShmcmFtZUVsZW1lbnQuY29udGVudEZyYW1lKCkpCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBqc1VuZGVmaW5lZCgpOwog
ICAgICAgICBjYXNlIEZyYW1lRnJhbWVCb3JkZXI6ICAgICByZXR1cm4ganNTdHJpbmcoZnJhbWVF
bGVtZW50LmZyYW1lQm9yZGVyKCkpOwogICAgICAgICBjYXNlIEZyYW1lTG9uZ0Rlc2M6ICAgICAg
ICByZXR1cm4ganNTdHJpbmcoZnJhbWVFbGVtZW50LmxvbmdEZXNjKCkpOwpAQCAtMjExNyw4ICsy
MTE1LDggQEAKICAgICAgICAgY2FzZSBJRnJhbWVEb2N1bWVudDogLy8gbm9uLXN0YW5kYXJkLCBt
YXBwZWQgdG8gY29udGVudERvY3VtZW50CiAgICAgICAgIGNhc2UgSUZyYW1lQ29udGVudERvY3Vt
ZW50OiByZXR1cm4gY2hlY2tOb2RlU2VjdXJpdHkoZXhlYyxpRnJhbWUuY29udGVudERvY3VtZW50
KCkpID8gCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldERPTU5vZGUo
ZXhlYywgaUZyYW1lLmNvbnRlbnREb2N1bWVudCgpKSA6IGpzVW5kZWZpbmVkKCk7Ci0gICAgICAg
IGNhc2UgSUZyYW1lQ29udGVudFdpbmRvdzogICAgICAgcmV0dXJuIGNoZWNrTm9kZVNlY3VyaXR5
KGV4ZWMsaUZyYW1lLmNvbnRlbnREb2N1bWVudCgpKSAKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICA/IFdpbmRvdzo6cmV0cmlldmUoaUZyYW1lLmNvbnRlbnRQYXJ0KCkp
CisgICAgICAgIGNhc2UgSUZyYW1lQ29udGVudFdpbmRvdzogICByZXR1cm4gY2hlY2tOb2RlU2Vj
dXJpdHkoZXhlYyxpRnJhbWUuY29udGVudERvY3VtZW50KCkpIAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgID8gV2luZG93OjpyZXRyaWV2ZShpRnJhbWUuY29udGVudEZy
YW1lKCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBqc1VuZGVm
aW5lZCgpOwogICAgICAgICBjYXNlIElGcmFtZUZyYW1lQm9yZGVyOiAgICAgcmV0dXJuIGpzU3Ry
aW5nKGlGcmFtZS5mcmFtZUJvcmRlcigpKTsKICAgICAgICAgY2FzZSBJRnJhbWVIZWlnaHQ6ICAg
ICAgICAgIHJldHVybiBqc1N0cmluZyhpRnJhbWUuaGVpZ2h0KCkpOwpJbmRleDogV2ViQ29yZS9r
aHRtbC9lY21hL2tqc193aW5kb3cuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUva2h0bWwvZWNt
YS9ranNfd2luZG93LmNwcAkocmV2aXNpb24gMTMyNDQpCisrKyBXZWJDb3JlL2todG1sL2VjbWEv
a2pzX3dpbmRvdy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY5OSw3ICs2OTksNyBAQAogICAgICAg
ICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICAgIHJldHVybiBqc051bWJlcihtX2ZyYW1lLT52
aWV3KCktPnZpc2libGVXaWR0aCgpKTsKICAgICBjYXNlIExlbmd0aDoKLSAgICAgIHJldHVybiBq
c051bWJlcihtX2ZyYW1lLT5mcmFtZXMoKS5jb3VudCgpKTsKKyAgICAgIHJldHVybiBqc051bWJl
cihtX2ZyYW1lLT50cmVlKCktPmNoaWxkQ291bnQoKSk7CiAgICAgY2FzZSBfTG9jYXRpb246CiAg
ICAgICByZXR1cm4gbG9jYXRpb24oKTsKICAgICBjYXNlIE5hbWU6CkBAIC04OTAsMjcgKzg5MCwx
OSBAQAogICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKLUpTVmFsdWUgKldpbmRvdzo6Y2hp
bGRGcmFtZUdldHRlcihFeGVjU3RhdGUgKmV4ZWMsIEpTT2JqZWN0ICpvcmlnaW5hbE9iamVjdCwg
Y29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3Qp
CitKU1ZhbHVlKiBXaW5kb3c6OmNoaWxkRnJhbWVHZXR0ZXIoRXhlY1N0YXRlKiwgSlNPYmplY3Qq
LCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xv
dCkKIHsKLSAgV2luZG93ICp0aGlzT2JqID0gc3RhdGljX2Nhc3Q8V2luZG93ICo+KHNsb3Quc2xv
dEJhc2UoKSk7Ci0gIHJldHVybiByZXRyaWV2ZSh0aGlzT2JqLT5tX2ZyYW1lLT5jaGlsZEZyYW1l
TmFtZWQocHJvcGVydHlOYW1lLnFzdHJpbmcoKSkpOworICByZXR1cm4gcmV0cmlldmUoc3RhdGlj
X2Nhc3Q8V2luZG93Kj4oc2xvdC5zbG90QmFzZSgpKS0+bV9mcmFtZS0+dHJlZSgpLT5jaGlsZChB
dG9taWNTdHJpbmcocHJvcGVydHlOYW1lLmRvbVN0cmluZygpKSkpOwogfQogCi1KU1ZhbHVlICpX
aW5kb3c6Om5hbWVkRnJhbWVHZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBKU09iamVjdCAqb3JpZ2lu
YWxPYmplY3QsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlT
bG90JiBzbG90KQorSlNWYWx1ZSAqV2luZG93OjpuYW1lZEZyYW1lR2V0dGVyKEV4ZWNTdGF0ZSos
IEpTT2JqZWN0KiwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0
eVNsb3QmIHNsb3QpCiB7Ci0gIFdpbmRvdyAqdGhpc09iaiA9IHN0YXRpY19jYXN0PFdpbmRvdyAq
PihzbG90LnNsb3RCYXNlKCkpOwotICByZXR1cm4gcmV0cmlldmUodGhpc09iai0+bV9mcmFtZS0+
ZmluZEZyYW1lKHByb3BlcnR5TmFtZS5xc3RyaW5nKCkpKTsKKyAgcmV0dXJuIHJldHJpZXZlKHN0
YXRpY19jYXN0PFdpbmRvdyo+KHNsb3Quc2xvdEJhc2UoKSktPm1fZnJhbWUtPnRyZWUoKS0+Zmlu
ZChBdG9taWNTdHJpbmcocHJvcGVydHlOYW1lLmRvbVN0cmluZygpKSkpOwogfQogCi1KU1ZhbHVl
KiBXaW5kb3c6OmluZGV4R2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIG9yaWdpbmFs
T2JqZWN0LCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xv
dCYgc2xvdCkKK0pTVmFsdWUqIFdpbmRvdzo6aW5kZXhHZXR0ZXIoRXhlY1N0YXRlKiwgSlNPYmpl
Y3QqLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQogewotICBX
aW5kb3cqIHRoaXNPYmogPSBzdGF0aWNfY2FzdDxXaW5kb3cqPihzbG90LnNsb3RCYXNlKCkpOwot
ICAKLSAgUVB0ckxpc3Q8RnJhbWU+IGZyYW1lcyA9IHRoaXNPYmotPm1fZnJhbWUtPmZyYW1lcygp
OwotICBGcmFtZSogZnJhbWUgPSBmcmFtZXMuYXQoc2xvdC5pbmRleCgpKTsKLSAgQVNTRVJUKGZy
YW1lKTsKLQotICByZXR1cm4gcmV0cmlldmUoZnJhbWUpOworICByZXR1cm4gcmV0cmlldmUoc3Rh
dGljX2Nhc3Q8V2luZG93Kj4oc2xvdC5zbG90QmFzZSgpKS0+bV9mcmFtZS0+dHJlZSgpLT5jaGls
ZChzbG90LmluZGV4KCkpKTsKIH0KIAogSlNWYWx1ZSAqV2luZG93OjpuYW1lZEl0ZW1HZXR0ZXIo
RXhlY1N0YXRlICpleGVjLCBKU09iamVjdCAqb3JpZ2luYWxPYmplY3QsIGNvbnN0IElkZW50aWZp
ZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQpAQCAtOTYwLDggKzk1
Miw3IEBACiAgIC8vIG5hbWluZyBmcmFtZXMgdGhpbmdzIHRoYXQgY29uZmxpY3Qgd2l0aCB3aW5k
b3cgcHJvcGVydGllcyB0aGF0CiAgIC8vIGFyZSBpbiBNb3ogYnV0IG5vdCBJRS4gU2luY2Ugd2Ug
aGF2ZSBzb21lIG9mIHRoZXNlLCB3ZSBoYXZlIHRvIGRvCiAgIC8vIGl0IHRoZSBNb3ogd2F5Lgot
ICBGcmFtZSAqY2hpbGRGcmFtZSA9IG1fZnJhbWUtPmNoaWxkRnJhbWVOYW1lZChwcm9wZXJ0eU5h
bWUucXN0cmluZygpKTsKLSAgaWYgKGNoaWxkRnJhbWUpIHsKKyAgaWYgKG1fZnJhbWUtPnRyZWUo
KS0+Y2hpbGQoQXRvbWljU3RyaW5nKHByb3BlcnR5TmFtZS5kb21TdHJpbmcoKSkpKSB7CiAgICAg
c2xvdC5zZXRDdXN0b20odGhpcywgY2hpbGRGcmFtZUdldHRlcik7CiAgICAgcmV0dXJuIHRydWU7
CiAgIH0KQEAgLTk5MCwyNSArOTgxLDE3IEBACiAgICAgcmV0dXJuIHRydWU7CiAgIH0KIAotICBG
cmFtZSAqa3AgPSBtX2ZyYW1lLT5maW5kRnJhbWUocHJvcGVydHlOYW1lLnFzdHJpbmcoKSk7Ci0g
IGlmIChrcCkgeworICBpZiAobV9mcmFtZS0+dHJlZSgpLT5maW5kKEF0b21pY1N0cmluZyhwcm9w
ZXJ0eU5hbWUuZG9tU3RyaW5nKCkpKSkgewogICAgIHNsb3Quc2V0Q3VzdG9tKHRoaXMsIG5hbWVk
RnJhbWVHZXR0ZXIpOwogICAgIHJldHVybiB0cnVlOwogICB9CiAKICAgLy8gYWxsb3cgd2luZG93
WzFdIG9yIHBhcmVudFsxXSBldGMuICgjNTY5ODMpCiAgIGJvb2wgb2s7Ci0gIHVuc2lnbmVkIGlu
dCBpID0gcHJvcGVydHlOYW1lLnRvQXJyYXlJbmRleCgmb2spOwotICBpZiAob2spIHsKLSAgICBR
UHRyTGlzdDxGcmFtZT4gZnJhbWVzID0gbV9mcmFtZS0+ZnJhbWVzKCk7Ci0gICAgdW5zaWduZWQg
aW50IGxlbiA9IGZyYW1lcy5jb3VudCgpOwotICAgIGlmIChpIDwgbGVuKSB7Ci0gICAgICBGcmFt
ZSogZnJhbWUgPSBmcmFtZXMuYXQoaSk7Ci0gICAgICBpZiAoZnJhbWUpIHsKLSAgICAgICAgc2xv
dC5zZXRDdXN0b21JbmRleCh0aGlzLCBpLCBpbmRleEdldHRlcik7Ci0gICAgICAgIHJldHVybiB0
cnVlOwotICAgICAgfQotICAgIH0KKyAgdW5zaWduZWQgaSA9IHByb3BlcnR5TmFtZS50b0FycmF5
SW5kZXgoJm9rKTsKKyAgaWYgKG9rICYmIGkgPCBtX2ZyYW1lLT50cmVlKCktPmNoaWxkQ291bnQo
KSkgeworICAgIHNsb3Quc2V0Q3VzdG9tSW5kZXgodGhpcywgaSwgaW5kZXhHZXR0ZXIpOworICAg
IHJldHVybiB0cnVlOwogICB9CiAKICAgLy8gYWxsb3cgc2hvcnRjdXRzIGxpa2UgJ0ltYWdlMScg
aW5zdGVhZCBvZiBkb2N1bWVudC5pbWFnZXMuSW1hZ2UxCkBAIC0xNTgzLDkgKzE1NjYsOSBAQAog
ICB9CiAgIGNhc2UgV2luZG93OjpPcGVuOgogICB7Ci0gICAgICBRU3RyaW5nIGZyYW1lTmFtZSA9
IGFyZ3NbMV0tPmlzVW5kZWZpbmVkT3JOdWxsKCkgPyBRU3RyaW5nKCJfYmxhbmsiKSA6IGFyZ3Nb
MV0tPnRvU3RyaW5nKGV4ZWMpLnFzdHJpbmcoKTsKLSAgICAgIGlmICghYWxsb3dQb3BVcChleGVj
LCB3aW5kb3cpCi0gICAgICAgICAgICAmJiAhKGZyYW1lTmFtZSA9PSAiX3RvcCIgfHwgZnJhbWVO
YW1lID09ICJfcGFyZW50IiB8fCBmcmFtZU5hbWUgPT0gIl9zZWxmIiB8fCBmcmFtZS0+ZmluZEZy
YW1lKGZyYW1lTmFtZSkpKQorICAgICAgQXRvbWljU3RyaW5nIGZyYW1lTmFtZSA9IGFyZ3NbMV0t
PmlzVW5kZWZpbmVkT3JOdWxsKCkKKyAgICAgICAgPyAiX2JsYW5rIiA6IEF0b21pY1N0cmluZyhh
cmdzWzFdLT50b1N0cmluZyhleGVjKS5kb21TdHJpbmcoKSk7CisgICAgICBpZiAoIWFsbG93UG9w
VXAoZXhlYywgd2luZG93KSAmJiAhZnJhbWUtPnRyZWUoKS0+ZmluZChmcmFtZU5hbWUpKQogICAg
ICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgICAgCiAgICAgICBXaW5kb3dBcmdzIHdp
bmRvd0FyZ3M7CkBAIC0xNjAwLDcgKzE1ODMsNyBAQAogICAgICAgICAgIHVybCA9IGFjdGl2ZVBh
cnQtPmRvY3VtZW50KCktPmNvbXBsZXRlVVJMKHN0ci5xc3RyaW5nKCkpOwogCiAgICAgICBVUkxB
cmdzIHVhcmdzOwotICAgICAgdWFyZ3MuZnJhbWVOYW1lID0gZnJhbWVOYW1lOworICAgICAgdWFy
Z3MuZnJhbWVOYW1lID0gZnJhbWVOYW1lLnFzdHJpbmcoKTsKICAgICAgIGlmICh1YXJncy5mcmFt
ZU5hbWUgPT0gIl90b3AiKSB7CiAgICAgICAgICAgd2hpbGUgKGZyYW1lLT50cmVlKCktPnBhcmVu
dCgpKQogICAgICAgICAgICAgICBmcmFtZSA9IGZyYW1lLT50cmVlKCktPnBhcmVudCgpOwpAQCAt
MjAyMywxMSArMjAwNiw4IEBACiBKU1ZhbHVlICpGcmFtZUFycmF5OjpnZXRWYWx1ZVByb3BlcnR5
KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKQogewogICBzd2l0Y2ggKHRva2VuKSB7Ci0gIGNh
c2UgTGVuZ3RoOiB7Ci0gICAgUVB0ckxpc3Q8RnJhbWU+IGZyYW1lcyA9IG1fZnJhbWUtPmZyYW1l
cygpOwotICAgIHVuc2lnbmVkIGludCBsZW4gPSBmcmFtZXMuY291bnQoKTsKLSAgICByZXR1cm4g
anNOdW1iZXIobGVuKTsKLSAgfQorICBjYXNlIExlbmd0aDoKKyAgICByZXR1cm4ganNOdW1iZXIo
bV9mcmFtZS0+dHJlZSgpLT5jaGlsZENvdW50KCkpOwogICBjYXNlIExvY2F0aW9uOgogICAgIC8v
IG5vbi1zdGFuZGFyZCBwcm9wZXJ0eSwgYnV0IHdvcmtzIGluIE5TIGFuZCBJRQogICAgIGlmIChK
U09iamVjdCAqb2JqID0gV2luZG93OjpyZXRyaWV2ZVdpbmRvdyhtX2ZyYW1lKSkKQEAgLTIwMzks
MjYgKzIwMTksMTQgQEAKICAgfQogfQogCi1KU1ZhbHVlICpGcmFtZUFycmF5OjppbmRleEdldHRl
cihFeGVjU3RhdGUgKmV4ZWMsIEpTT2JqZWN0ICpvcmlnaW5hbE9iamVjdCwgY29uc3QgSWRlbnRp
ZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCitKU1ZhbHVlKiBG
cmFtZUFycmF5OjppbmRleEdldHRlcihFeGVjU3RhdGUqLCBKU09iamVjdCosIGNvbnN0IElkZW50
aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7Ci0gIEZyYW1lQXJyYXkgKnRoaXNP
YmogPSBzdGF0aWNfY2FzdDxGcmFtZUFycmF5ICo+KHNsb3Quc2xvdEJhc2UoKSk7Ci0gIEZyYW1l
KiBmcmFtZSA9IHRoaXNPYmotPm1fZnJhbWUtPmZyYW1lcygpLmF0KHNsb3QuaW5kZXgoKSk7Ci0K
LSAgaWYgKGZyYW1lKQotICAgIHJldHVybiBXaW5kb3c6OnJldHJpZXZlKGZyYW1lKTsKLQotICBy
ZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICByZXR1cm4gV2luZG93OjpyZXRyaWV2ZShzdGF0aWNf
Y2FzdDxGcmFtZUFycmF5Kj4oc2xvdC5zbG90QmFzZSgpKS0+bV9mcmFtZS0+dHJlZSgpLT5jaGls
ZChzbG90LmluZGV4KCkpKTsKIH0KLQotSlNWYWx1ZSAqRnJhbWVBcnJheTo6bmFtZUdldHRlcihF
eGVjU3RhdGUgKmV4ZWMsIEpTT2JqZWN0ICpvcmlnaW5hbE9iamVjdCwgY29uc3QgSWRlbnRpZmll
ciYgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCisgIAorSlNWYWx1ZSog
RnJhbWVBcnJheTo6bmFtZUdldHRlcihFeGVjU3RhdGUqLCBKU09iamVjdCosIGNvbnN0IElkZW50
aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQogewotICBGcmFt
ZUFycmF5ICp0aGlzT2JqID0gc3RhdGljX2Nhc3Q8RnJhbWVBcnJheSAqPihzbG90LnNsb3RCYXNl
KCkpOwotICBGcmFtZSogZnJhbWUgPSB0aGlzT2JqLT5tX2ZyYW1lLT5maW5kRnJhbWUocHJvcGVy
dHlOYW1lLnFzdHJpbmcoKSk7Ci0KLSAgaWYgKGZyYW1lKQotICAgIHJldHVybiBXaW5kb3c6OnJl
dHJpZXZlKGZyYW1lKTsKLQotICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICByZXR1cm4gV2lu
ZG93OjpyZXRyaWV2ZShzdGF0aWNfY2FzdDxGcmFtZUFycmF5Kj4oc2xvdC5zbG90QmFzZSgpKS0+
bV9mcmFtZS0+dHJlZSgpLT5jaGlsZChBdG9taWNTdHJpbmcocHJvcGVydHlOYW1lLmRvbVN0cmlu
ZygpKSkpOwogfQogCiBib29sIEZyYW1lQXJyYXk6OmdldE93blByb3BlcnR5U2xvdChFeGVjU3Rh
dGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBz
bG90KQpAQCAtMjA3NSwxNSArMjA0MywxNCBAQAogICB9CiAKICAgLy8gY2hlY2sgZm9yIHRoZSBu
YW1lIG9yIG51bWJlcgotICBGcmFtZSogZnJhbWUgPSBtX2ZyYW1lLT5maW5kRnJhbWUocHJvcGVy
dHlOYW1lLnFzdHJpbmcoKSk7Ci0gIGlmIChmcmFtZSkgeworICBpZiAobV9mcmFtZS0+dHJlZSgp
LT5jaGlsZChBdG9taWNTdHJpbmcocHJvcGVydHlOYW1lLmRvbVN0cmluZygpKSkpIHsKICAgICBz
bG90LnNldEN1c3RvbSh0aGlzLCBuYW1lR2V0dGVyKTsKICAgICByZXR1cm4gdHJ1ZTsKICAgfQog
CiAgIGJvb2wgb2s7Ci0gIHVuc2lnbmVkIGludCBpID0gcHJvcGVydHlOYW1lLnRvQXJyYXlJbmRl
eCgmb2spOwotICBpZiAob2sgJiYgaSA8IG1fZnJhbWUtPmZyYW1lcygpLmNvdW50KCkpIHsKKyAg
dW5zaWduZWQgaSA9IHByb3BlcnR5TmFtZS50b0FycmF5SW5kZXgoJm9rKTsKKyAgaWYgKG9rICYm
IGkgPCBtX2ZyYW1lLT50cmVlKCktPmNoaWxkQ291bnQoKSkgewogICAgIHNsb3Quc2V0Q3VzdG9t
SW5kZXgodGhpcywgaSwgaW5kZXhHZXR0ZXIpOwogICAgIHJldHVybiB0cnVlOwogICB9CkluZGV4
OiBXZWJDb3JlL3BsYXRmb3JtL3dpbi9UZW1wb3JhcnlMaW5rU3R1YnMuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvcGxhdGZvcm0vd2luL1RlbXBvcmFyeUxpbmtTdHVicy5jcHAJKHJldmlzaW9u
IDEzMjQ0KQorKysgV2ViQ29yZS9wbGF0Zm9ybS93aW4vVGVtcG9yYXJ5TGlua1N0dWJzLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjUzLDcgKzI1Myw2IEBACiB2b2lkIEZyYW1lV2luOjphZGRNZXNz
YWdlVG9Db25zb2xlKFN0cmluZyBjb25zdCYsdW5zaWduZWQgaW50LFN0cmluZyBjb25zdCYpIHsg
fQogYm9vbCBGcmFtZVdpbjo6c2hvdWxkQ2hhbmdlU2VsZWN0aW9uKFNlbGVjdGlvbkNvbnRyb2xs
ZXIgY29uc3QmLFNlbGVjdGlvbkNvbnRyb2xsZXIgY29uc3QmLFdlYkNvcmU6OkVBZmZpbml0eSxi
b29sKSBjb25zdCB7IHJldHVybiAwOyB9CiBzdGF0aWMgaW50IGZyYW1lTnVtYmVyID0gMDsKLVN0
cmluZyBGcmFtZVdpbjo6Z2VuZXJhdGVGcmFtZU5hbWUoKSB7IHJldHVybiBRU3RyaW5nOjpudW1i
ZXIoZnJhbWVOdW1iZXIrKyk7IH0KIEZyYW1lKiBGcmFtZVdpbjo6Y3JlYXRlRnJhbWUoS1VSTCBj
b25zdCYsUVN0cmluZyBjb25zdCYsUmVuZGVyUGFydCosU3RyaW5nIGNvbnN0JikgeyByZXR1cm4g
MDsgfQogdm9pZCBGcmFtZVdpbjo6c2F2ZURvY3VtZW50U3RhdGUodm9pZCkgeyB9CiB2b2lkIEZy
YW1lV2luOjpjbGVhclVuZG9SZWRvT3BlcmF0aW9ucyh2b2lkKSB7IH0KSW5kZXg6IFdlYkNvcmUv
cmVuZGVyaW5nL3JlbmRlcl9mcmFtZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVy
aW5nL3JlbmRlcl9mcmFtZXMuY3BwCShyZXZpc2lvbiAxMzI0NCkKKysrIFdlYkNvcmUvcmVuZGVy
aW5nL3JlbmRlcl9mcmFtZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw2ICszMyw3IEBACiAj
aW5jbHVkZSAiRnJhbWVUcmVlLmgiCiAjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCiAjaW5jbHVkZSAi
R3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiUGFnZS5oIgogI2luY2x1ZGUgIlRleHRJbXBs
LmgiCiAjaW5jbHVkZSAiZG9tMl9ldmVudHNpbXBsLmgiCiAjaW5jbHVkZSAiaHRtbF9iYXNlaW1w
bC5oIgpAQCAtNjgxLDcgKzY4Miw3IEBACiAgICAgS1VSTCBuZXdVUkwoZG9jLT5jb21wbGV0ZVVS
TCh1cmwpKTsKICAgICBuZXdVUkwuc2V0UmVmKFFTdHJpbmc6Om51bGwpOwogICAgIAotICAgIGlm
IChkb2MtPmZyYW1lKCktPnRvcExldmVsRnJhbWVDb3VudCgpID49IDIwMCkKKyAgICBpZiAoZG9j
LT5mcmFtZSgpLT5wYWdlKCktPmZyYW1lQ291bnQoKSA+PSAyMDApCiAgICAgICAgIHJldHVybiBm
YWxzZTsKIAogICAgIC8vIFdlIGFsbG93IG9uZSBsZXZlbCBvZiBzZWxmLXJlZmVyZW5jZSBiZWNh
dXNlIHNvbWUgc2l0ZXMgZGVwZW5kIG9uIHRoYXQuCkluZGV4OiBXZWJDb3JlL1dlYkNvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTMyNDQpCisrKyBXZWJDb3JlL1dlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMzYsNyArMzYs
NyBAQAogCQk2NTUwQjZBNTA5OURGMDI3MDA5MEQ3ODEgLyogVGV4dEltcGwuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNjU1MEI2OUIwOTlERjAyNzAw
OTBENzgxIC8qIFRleHRJbXBsLmNwcCAqLzsgfTsKIAkJNjU1MEI2QTYwOTlERjAyNzAwOTBENzgx
IC8qIFRleHRJbXBsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA2NTUwQjY5QzA5OURGMDI3MDA5MEQ3ODEgLyogVGV4dEltcGwuaCAqLzsgfTsKIAkJNjU1
MkU3QUEwOTZBQTExQjAwMDZGMjQ4IC8qIFdlYkNvcmVGcmFtZU5hbWVzcGFjZXMuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDY1NTJFN0E4MDk2QUExMUIw
MDA2RjI0OCAvKiBXZWJDb3JlRnJhbWVOYW1lc3BhY2VzLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJNjU1MkU3QUIwOTZBQTExQjAwMDZGMjQ4IC8q
IFdlYkNvcmVGcmFtZU5hbWVzcGFjZXMubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDY1NTJFN0E5MDk2QUExMUIwMDA2RjI0OCAvKiBXZWJDb3JlRnJhbWVO
YW1lc3BhY2VzLm0gKi87IH07CisJCTY1NTJFN0FCMDk2QUExMUIwMDA2RjI0OCAvKiBXZWJDb3Jl
RnJhbWVOYW1lc3BhY2VzLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNjU1MkU3QTkwOTZBQTExQjAwMDZGMjQ4IC8qIFdlYkNvcmVGcmFtZU5hbWVzcGFj
ZXMubW0gKi87IH07CiAJCTY1NzQzQjUyMDk3MDc2RjgwMDFFN0NFRiAvKiBSZW5kZXJTVkdUZXh0
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDY1NzQz
QjUwMDk3MDc2RjgwMDFFN0NFRiAvKiBSZW5kZXJTVkdUZXh0LmNwcCAqLzsgfTsKIAkJNjU3NDNC
NTMwOTcwNzZGODAwMUU3Q0VGIC8qIFJlbmRlclNWR1RleHQuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDY1NzQzQjUxMDk3MDc2RjgwMDFFN0NFRiAvKiBS
ZW5kZXJTVkdUZXh0LmggKi87IH07CiAJCTY1NzZGOUQ2MDlCMjQ4NEEwMDAwNDFGNyAvKiBUZXh0
RW5jb2RpbmdNYWMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNjU3NkY5RDUwOUIyNDg0QTAwMDA0MUY3IC8qIFRleHRFbmNvZGluZ01hYy5jcHAgKi87
IH07CkBAIC0xMTM3LDcgKzExMzcsNyBAQAogCQk2NTUwQjY5QjA5OURGMDI3MDA5MEQ3ODEgLyog
VGV4dEltcGwuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFRleHRJ
bXBsLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNjU1MEI2OUMwOTlERjAyNzAw
OTBENzgxIC8qIFRleHRJbXBsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBU
ZXh0SW1wbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2NTUyRTdBODA5NkFBMTFC
MDAwNkYyNDggLyogV2ViQ29yZUZyYW1lTmFtZXNwYWNlcy5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gV2ViQ29yZUZyYW1lTmFtZXNwYWNlcy5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwotCQk2NTUyRTdBOTA5NkFBMTFCMDAwNkYyNDggLyogV2ViQ29yZUZyYW1lTmFt
ZXNwYWNlcy5tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMw
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5vYmpjOyBwYXRoID0gV2ViQ29yZUZy
YW1lTmFtZXNwYWNlcy5tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk2NTUyRTdBOTA5
NkFBMTFCMDAwNkYyNDggLyogV2ViQ29yZUZyYW1lTmFtZXNwYWNlcy5tbSAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXZWJDb3JlRnJhbWVOYW1lc3BhY2VzLm1tOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2NTc0M0I1MDA5NzA3NkY4MDAxRTdDRUYgLyog
UmVuZGVyU1ZHVGV4dC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
UmVuZGVyU1ZHVGV4dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTY1NzQzQjUx
MDk3MDc2RjgwMDFFN0NFRiAvKiBSZW5kZXJTVkdUZXh0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBSZW5kZXJTVkdUZXh0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTY1NzZGOUQ1MDlCMjQ4NEEwMDAwNDFGNyAvKiBUZXh0RW5jb2RpbmdNYWMuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFRleHRFbmNvZGluZ01hYy5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yNDU5LDcgKzI0NTksNyBAQAogCQkJCTY1NEVD
NjBGMDk3Nzc4RjUwMERBQjUyQyAvKiBXZWJDb3JlRnJhbWVCcmlkZ2UuaCAqLywKIAkJCQk2NTRF
QzYxMDA5Nzc3OEY1MDBEQUI1MkMgLyogV2ViQ29yZUZyYW1lQnJpZGdlLm1tICovLAogCQkJCTY1
NTJFN0E4MDk2QUExMUIwMDA2RjI0OCAvKiBXZWJDb3JlRnJhbWVOYW1lc3BhY2VzLmggKi8sCi0J
CQkJNjU1MkU3QTkwOTZBQTExQjAwMDZGMjQ4IC8qIFdlYkNvcmVGcmFtZU5hbWVzcGFjZXMubSAq
LywKKwkJCQk2NTUyRTdBOTA5NkFBMTFCMDAwNkYyNDggLyogV2ViQ29yZUZyYW1lTmFtZXNwYWNl
cy5tbSAqLywKIAkJCQlGNTg3ODU0QzAyREUzNzU5MDFFQTQxMjIgLyogV2ViQ29yZUZyYW1lVmll
dy5oICovLAogCQkJCUY1QjJBNTJCMDJFMjI1NzMwMTg2MzVDQiAvKiBXZWJDb3JlSmF2YVNjcmlw
dC5oICovLAogCQkJCUY1QjJBNTJDMDJFMjI1NzMwMTg2MzVDQiAvKiBXZWJDb3JlSmF2YVNjcmlw
dC5tbSAqLywKQEAgLTUyNTIsNyArNTI1Miw3IEBACiAJCQkJQTg4QUQ1MUQwOTUyNDk5RjAwMURE
MTk2IC8qIFhMaW5rTmFtZXNXcmFwcGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE4OEFENTFF
MDk1MjQ5OUYwMDFERDE5NiAvKiBTVkdOYW1lc1dyYXBwZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJQTg4QUQ1QUEwOTUyNTEzMTAwMUREMTk2IC8qIFNWR0NTU1N0eWxlU2VsZWN0b3IuY3BwIGlu
IFNvdXJjZXMgKi8sCi0JCQkJNjU1MkU3QUIwOTZBQTExQjAwMDZGMjQ4IC8qIFdlYkNvcmVGcmFt
ZU5hbWVzcGFjZXMubSBpbiBTb3VyY2VzICovLAorCQkJCTY1NTJFN0FCMDk2QUExMUIwMDA2RjI0
OCAvKiBXZWJDb3JlRnJhbWVOYW1lc3BhY2VzLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQTgxNjU1
RDUwOTZCQkVBQzAwNjAxMDU4IC8qIEtDYW52YXNNYXNrZXJRdWFydHoubW0gaW4gU291cmNlcyAq
LywKIAkJCQlBODE2NTVFNDA5NkJDMTM5MDA2MDEwNTggLyogU1ZHTWFza0VsZW1lbnRJbXBsLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTY1NzQzQjUyMDk3MDc2RjgwMDFFN0NFRiAvKiBSZW5kZXJT
VkdUZXh0LmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogV2ViQ29yZS9DaGFuZ2VMb2cKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEzMjQ0KQorKysgV2ViQ29yZS9D
aGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxMTUgQEAKKzIwMDYtMDMtMTAgIERh
cmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIC0gZml4IGh0dHA6Ly9idWd6aWxsYS5vcGVuZGFyd2luLm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MzMwOAorICAgICAgICAgIFBvcC11cCBibG9ja2luZyBibG9ja3Mg
d2luZG93Lm9wZW4gZm9yIGFscmVhZHkgb3BlbiB3aW5kb3dzCisKKyAgICAgICAgKiBXZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6IFVwZGF0ZSBmb3IgcmVuYW1lLgorICAgICAgICAq
IGJyaWRnZS9tYWMvTWFjRnJhbWUuaDogUmVtb3ZlIGdlbmVyYXRlRnJhbWVOYW1lLgorICAgICAg
ICAqIGJyaWRnZS9tYWMvTWFjRnJhbWUubW06IERpdHRvLgorICAgICAgICAqIGJyaWRnZS9tYWMv
UGFnZU1hYy5oOiBBZGRlZCBhIGRlY2xhcmF0aW9uIGZvciBXZWJDb3JlUGFnZUJyaWRnZS4KKwor
ICAgICAgICAqIGJyaWRnZS9tYWMvV2ViQ29yZUZyYW1lQnJpZGdlLmg6IFJlbW92ZSBfZnJhbWVO
YW1lc3BhY2UsIGdlbmVyYXRlRnJhbWVOYW1lLAorICAgICAgICBzZXRGcmFtZU5hbWVzcGFjZSwg
ZnJhbWVOYW1lc3BhY2UuCisgICAgICAgICogYnJpZGdlL21hYy9XZWJDb3JlRnJhbWVCcmlkZ2Uu
bW06CisgICAgICAgICgtW1dlYkNvcmVGcmFtZUJyaWRnZSBjaGlsZEZyYW1lTmFtZWQ6XSk6IENo
YW5nZSB0byBjYWxsIHRoZSBuZXcgY2hpbGQKKyAgICAgICAgZnVuY3Rpb24gb24gdGhlIEZyYW1l
VHJlZS4KKyAgICAgICAgKC1bV2ViQ29yZUZyYW1lQnJpZGdlIGZpbmRGcmFtZU5hbWVkOl0pOiBD
aGFuZ2UgdG8gY2FsbCB0aGUgbmV3IGZpbmQKKyAgICAgICAgZnVuY3Rpb24gb24gdGhlIEZyYW1l
VHJlZS4KKyAgICAgICAgKC1bV2ViQ29yZUZyYW1lQnJpZGdlIFJlbmRlck9iamVjdDo6bm9kZUlu
Zm9BdFBvaW50Ol0pOiBDaGFuZ2Ugc2luY2UgdGhlCisgICAgICAgIGNvbnRlbnRQYXJ0IGZ1bmN0
aW9uIGhhcyBiZWVuIHJlbmFtZWQgdG8gY29udGVudEZyYW1lLgorCisgICAgICAgICogYnJpZGdl
L21hYy9XZWJDb3JlRnJhbWVOYW1lc3BhY2VzLmg6IFJlbW92ZWQgZXZlcnl0aGluZyBleGNlcHQg
Zm9yIHRoZQorICAgICAgICBvbmUgbWV0aG9kIHN0aWxsIHVzZWQgb24gdGhlIFdlYktpdCBzaWRl
LCBmcmFtZXNJbk5hbWVzcGFjZTouCisgICAgICAgICogYnJpZGdlL21hYy9XZWJDb3JlRnJhbWVO
YW1lc3BhY2VzLm06IFJlbmFtZWQuCisgICAgICAgICogYnJpZGdlL21hYy9XZWJDb3JlRnJhbWVO
YW1lc3BhY2VzLm1tOiBBZGRlZC4gUmVpbXBsZW1lbnRlZCB0aGUKKyAgICAgICAgZnJhbWVzSW5O
YW1lc3BhY2UgbWV0aG9kIHRvIHVzZSB0aGUgbmFtZXNwYWNlIGluIFdlYkNvcmU6OlBhZ2UuCisK
KyAgICAgICAgKiBicmlkZ2UvbWFjL1dlYkNvcmVQYWdlQnJpZGdlLmg6IEFkZGVkIHNldEdyb3Vw
TmFtZSBhbmQgZ3JvdXBOYW1lLgorICAgICAgICAqIGJyaWRnZS9tYWMvV2ViQ29yZVBhZ2VCcmlk
Z2UubW06CisgICAgICAgICgtW1dlYkNvcmVQYWdlQnJpZGdlIHNldEdyb3VwTmFtZTpdKTogQWRk
ZWQuIENhbGxzIHRocm91Z2ggdG8gUGFnZS4KKyAgICAgICAgKC1bV2ViQ29yZVBhZ2VCcmlkZ2Ug
Z3JvdXBOYW1lXSk6IERpdHRvLgorCisgICAgICAgICoga2h0bWwvZWNtYS9ranNfaHRtbC5jcHA6
CisgICAgICAgIChLSlM6OkhUTUxEb2N1bWVudDo6bmFtZWRJdGVtR2V0dGVyKTogQ2hhbmdlZCB0
byBjYWxsIGNvbnRlbnRGcmFtZSBieSBpdHMgbmV3IG5hbWUuCisgICAgICAgIChLSlM6OkhUTUxF
bGVtZW50OjpmcmFtZUdldHRlcik6IERpdHRvLgorICAgICAgICAoS0pTOjpIVE1MRWxlbWVudDo6
aUZyYW1lR2V0dGVyKTogRGl0dG8uCisKKyAgICAgICAgKiBraHRtbC9lY21hL2tqc193aW5kb3cu
Y3BwOgorICAgICAgICAoS0pTOjpXaW5kb3c6OmdldFZhbHVlUHJvcGVydHkpOiBDaGFuZ2VkIHRv
IGNhbGwgRnJhbWVUcmVlOjpjaGlsZENvdW50CisgICAgICAgIGluc3RlYWQgb2YgRnJhbWU6OmZy
YW1lcy4KKyAgICAgICAgKEtKUzo6V2luZG93OjpjaGlsZEZyYW1lR2V0dGVyKTogQ2hhbmdlZCB0
byBjYWxsIEZyYW1lVHJlZTo6Y2hpbGQKKyAgICAgICAgaW5zdGVhZCBvZiBGcmFtZTo6Y2hpbGRG
cmFtZU5hbWVkLgorICAgICAgICAoS0pTOjpXaW5kb3c6Om5hbWVkRnJhbWVHZXR0ZXIpOiBDaGFu
Z2VkIHRvIGNhbGwgRnJhbWVUcmVlOjpmaW5kCisgICAgICAgIGluc3RlYWQgb2YgRnJhbWU6OmZp
bmRGcmFtZS4KKyAgICAgICAgKEtKUzo6V2luZG93OjppbmRleEdldHRlcik6IENoYW5nZWQgdG8g
Y2FsbCBGcmFtZVRyZWU6OmNoaWxkCisgICAgICAgIGluc3RlYWQgb2YgRnJhbWU6OmZyYW1lcy4K
KyAgICAgICAgKEtKUzo6V2luZG93OjpnZXRPd25Qcm9wZXJ0eVNsb3QpOiBDaGFuZ2VkIHRvIGNh
bGwgRnJhbWVUcmVlOjpjaGlsZCwKKyAgICAgICAgRnJhbWVUcmVlOjpmaW5kLCBhbmQgRnJhbWVU
cmVlOjpjaGlsZENvdW50IGluc3RlYWQgb2YgRnJhbWU6OmNoaWxkRnJhbWVOYW1lZCwKKyAgICAg
ICAgYW5kIEZyYW1lOjpmaW5kRnJhbWUsIGFuZCBGcmFtZTo6ZnJhbWVzLgorICAgICAgICAoS0pT
OjpXaW5kb3dGdW5jOjpjYWxsQXNGdW5jdGlvbik6IENhbGwgRnJhbWVUcmVlOjpmaW5kIHRvIGNo
ZWNrIGlmIHRoZSB3aW5kb3cKKyAgICAgICAgaXMgYWxyZWFkeSBvcGVuIHdoZW4gY29uc2lkZXJp
bmcgd2hldGhlciB0byBibG9jayBhIHBvcC11cC4KKyAgICAgICAgKEtKUzo6RnJhbWVBcnJheTo6
Z2V0VmFsdWVQcm9wZXJ0eSk6IENoYW5nZWQgdG8gY2FsbCBGcmFtZVRyZWU6OmNoaWxkQ291bnQK
KyAgICAgICAgaW5zdGVhZCBvZiBGcmFtZTo6ZnJhbWVzLgorICAgICAgICAoS0pTOjpGcmFtZUFy
cmF5OjppbmRleEdldHRlcik6IENoYW5nZWQgdG8gY2FsbCBGcmFtZVRyZWU6OmNoaWxkCisgICAg
ICAgIGluc3RlYWQgb2YgRnJhbWU6OmZyYW1lcy4KKyAgICAgICAgKEtKUzo6RnJhbWVBcnJheTo6
bmFtZUdldHRlcik6IENoYW5nZWQgdG8gY2FsbCBGcmFtZVRyZWU6OmNoaWxkCisgICAgICAgIGlu
c3RlYWQgb2YgRnJhbWU6OmZpbmRGcmFtZS4KKyAgICAgICAgKEtKUzo6RnJhbWVBcnJheTo6Z2V0
T3duUHJvcGVydHlTbG90KTogQ2hhbmdlZCB0byBjYWxsIEZyYW1lVHJlZTo6Y2hpbGQsCisgICAg
ICAgIGFuZCBGcmFtZVRyZWU6OmNoaWxkQ291bnQgaW5zdGVhZCBvZiBGcmFtZTo6ZmluZEZyYW1l
IGFuZCBGcmFtZTo6ZnJhbWVzLgorCisgICAgICAgICoga2h0bWwvaHRtbC9odG1sX2Jhc2VpbXBs
Lmg6CisgICAgICAgICoga2h0bWwvaHRtbC9odG1sX2Jhc2VpbXBsLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkhUTUxGcmFtZUVsZW1lbnRJbXBsOjppc1VSTEFsbG93ZWQpOiBDaGFuZ2VkIHRvIGNh
bGwgUGFnZTo6ZnJhbWVDb3VudAorICAgICAgICBpbnN0ZWFkIG9mIEZyYW1lOjp0b3BMZXZlbEZy
YW1lQ291bnQuCisgICAgICAgIChXZWJDb3JlOjpIVE1MRnJhbWVFbGVtZW50SW1wbDo6b3BlblVS
TCk6IENoYW5nZWQgdG8gY2FsbCBGcmFtZVRyZWU6OmNoaWxkCisgICAgICAgIGluc3RlYWQgb2Yg
RnJhbWU6OmZpbmRGcmFtZS4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxGcmFtZUVsZW1lbnRJbXBs
OjphdHRhY2gpOiBDaGFuZ2VkIHRvIGNhbGwgUGFnZTo6aW5jcmVtZW50RnJhbWVDb3VudAorICAg
ICAgICBpbnN0ZWFkIG9mIEZyYW1lOjppbmNyZW1lbnRGcmFtZUNvdW50LiBDaGFuZ2VkIHRvIGNh
bGwgRnJhbWVUcmVlOjpuYW1lRm9yTmV3Q2hpbGQKKyAgICAgICAgaW5zdGVhZCBvZiBGcmFtZTo6
cmVxdWVzdEZyYW1lTmFtZS4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxGcmFtZUVsZW1lbnRJbXBs
OjpjbG9zZSk6IENoYW5nZWQgdG8gY2FsbCBQYWdlOjpkZWNyZW1lbnRGcmFtZUNvdW50CisgICAg
ICAgIGluc3RlYWQgb2YgRnJhbWU6OmRlY3JlbWVudEZyYW1lQ291bnQuIENoYW5nZWQgdG8gY2Fs
bCBGcmFtZVRyZWU6OmNoaWxkCisgICAgICAgIGluc3RlYWQgb2YgRnJhbWU6OmZpbmRGcmFtZS4K
KyAgICAgICAgKFdlYkNvcmU6OkhUTUxGcmFtZUVsZW1lbnRJbXBsOjpjb250ZW50RnJhbWUpOiBS
ZW5hbWVkIGZyb20gY29udGVudFBhcnQuIEFsc28KKyAgICAgICAgY2hhbmdlZCB0byBjYWxsIEZy
YW1lVHJlZTo6Y2hpbGQgaW5zdGVhZCBvZiBGcmFtZTo6ZmluZEZyYW1lLgorICAgICAgICAoV2Vi
Q29yZTo6SFRNTEZyYW1lRWxlbWVudEltcGw6OmNvbnRlbnREb2N1bWVudCk6IFVwZGF0ZWQgZm9y
IG5hbWUgY2hhbmdlIG9mCisgICAgICAgIGNvbnRlbnRGcmFtZSBmcm9tIGNvbnRlbnRQYXJ0Lgor
ICAgICAgICAoV2ViQ29yZTo6SFRNTElGcmFtZUVsZW1lbnRJbXBsOjphdHRhY2gpOiBDaGFuZ2Vk
IHRvIGNhbGwgUGFnZTo6aW5jcmVtZW50RnJhbWVDb3VudAorICAgICAgICBpbnN0ZWFkIG9mIEZy
YW1lOjppbmNyZW1lbnRGcmFtZUNvdW50LiBDaGFuZ2VkIHRvIGNhbGwgRnJhbWVUcmVlOjpuYW1l
Rm9yTmV3Q2hpbGQKKyAgICAgICAgaW5zdGVhZCBvZiBGcmFtZTo6cmVxdWVzdEZyYW1lTmFtZS4K
KworICAgICAgICAqIHJlbmRlcmluZy9yZW5kZXJfZnJhbWVzLmNwcDogKFdlYkNvcmU6OmlzVVJM
QWxsb3dlZCk6IENoYW5nZWQgdG8gY2FsbCBQYWdlOjpmcmFtZUNvdW50CisgICAgICAgIGluc3Rl
YWQgb2YgRnJhbWU6OnRvcExldmVsRnJhbWVDb3VudC4KKworICAgICAgICAqIHBhZ2UvRnJhbWUu
aDogUmVtb3ZlZCBmcmFtZU5hbWVzLCBmcmFtZXMsIGNoaWxkRnJhbWVOYW1lZCwgZmluZEZyYW1l
LCBjdXJyZW50RnJhbWUsCisgICAgICAgIGZyYW1lRXhpc3RzLCBpbmNyZW1lbnRGcmFtZUNvdW50
LCBkZWNyZW1lbnRGcmFtZUNvdW50LCB0b3BMZXZlbEZyYW1lQ291bnQsCisgICAgICAgIGdlbmVy
YXRlRnJhbWVOYW1lLCBhbmQgcmVxdWVzdEZyYW1lTmFtZSBmdW5jdGlvbnMuCisgICAgICAgICog
cGFnZS9GcmFtZS5jcHA6IChXZWJDb3JlOjpGcmFtZTo6cmVxdWVzdEZyYW1lKTogQ2hhbmdlZCB0
byB1c2UgRnJhbWVUcmVlOjpjaGlsZAorICAgICAgICBpbnN0ZWFkIG9mIEZyYW1lOjpjaGlsZEZy
YW1lTmFtZWQuCisKKyAgICAgICAgKiBwYWdlL0ZyYW1lVHJlZS5oOiBDaGFuZ2VkIG5hbWUgdG8g
YW4gYXRvbWljIHN0cmluZy4gQ2hhbmdlZCBjaGlsZENvdW50IHRvIHVuc2lnbmVkLgorICAgICAg
ICBBZGRlZCBpc0Rlc2NlbmRhbnRPZiwgdHJhdmVyc2VOZXh0LCBjaGlsZCwgZmluZCwgbmFtZUZv
ck5ld0NoaWxkLgorICAgICAgICAqIHBhZ2UvRnJhbWVUcmVlLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkZyYW1lVHJlZTo6c2V0TmFtZSk6IENoYW5nZWQgdG8gY2FsbCBuYW1lRm9yTmV3Q2hpbGQg
dG8gaGFuZGxlIG5hbWUKKyAgICAgICAgZHVwbGljYXRpb24gbG9naWMuCisgICAgICAgIChXZWJD
b3JlOjpGcmFtZVRyZWU6Om5hbWVGb3JOZXdDaGlsZCk6IEFkZGVkLiBDaGVja3MgZm9yIGR1cGxp
Y2F0aW9uIGFuZCBnZW5lcmF0ZXMKKyAgICAgICAgYW4gYXBwcm9wcmlhdGUgZnJhbWUgbmFtZSBp
ZiB0aGVyZSBpcyBhIGR1cGxpY2F0ZS4KKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lVHJlZTo6Y2hp
bGQpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lVHJlZTo6ZmluZCk6IEFkZGVkLgor
ICAgICAgICAoV2ViQ29yZTo6RnJhbWVUcmVlOjppc0Rlc2NlbmRhbnRPZik6IEFkZGVkLgorICAg
ICAgICAoV2ViQ29yZTo6RnJhbWVUcmVlOjp0cmF2ZXJzZU5leHQpOiBBZGRlZC4KKworICAgICAg
ICAqIHBhZ2UvUGFnZS5oOiBBZGRlZCBzZXRHcm91cE5hbWUsIGdyb3VwTmFtZSwgZnJhbWVOYW1l
c3BhY2UsIGluY3JlbWVudEZyYW1lQ291bnQsCisgICAgICAgIGRlY3JlbWVudEZyYW1lQ291bnQs
IGFuZCBmcmFtZUNvdW50LgorICAgICAgICAqIHBhZ2UvUGFnZS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpQYWdlOjpQYWdlKTogSW5pdGlhbGl6ZSBtX2ZyYW1lQ291bnQgdG8gMC4KKyAgICAgICAg
KFdlYkNvcmU6OlBhZ2U6On5QYWdlKTogQ2FsbCBzZXRHcm91cE5hbWUgdG8gcmVtb3ZlIHRoZSBw
YWdlIGZyb20gYW55IGdyb3VwIGl0J3MgaW4uCisgICAgICAgIChXZWJDb3JlOjpQYWdlOjpzZXRH
cm91cE5hbWUpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlBhZ2U6OmZyYW1lTmFtZXNwYWNl
KTogQWRkZWQuCisKKyAgICAgICAgKiBwbGF0Zm9ybS93aW4vVGVtcG9yYXJ5TGlua1N0dWJzLmNw
cDogUmVtb3ZlZCBGcmFtZVdpbjo6Z2VuZXJhdGVGcmFtZU5hbWUuCisKIDIwMDYtMDMtMDkgIEFk
ZWxlIFBldGVyc29uICA8YWRlbGVAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFRp
bSBPLgpJbmRleDogV2ViQ29yZS9icmlkZ2UvbWFjL01hY0ZyYW1lLm1tCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvYnJpZGdlL21hYy9NYWNGcmFtZS5tbQkocmV2aXNpb24gMTMyNDQpCisrKyBXZWJD
b3JlL2JyaWRnZS9tYWMvTWFjRnJhbWUubW0JKHdvcmtpbmcgY29weSkKQEAgLTE1MiwxNSArMTUy
LDYgQEAKICAgICAgICAgX2RyYWdDbGlwYm9hcmQtPnNldEFjY2Vzc1BvbGljeShLV1FDbGlwYm9h
cmQ6Ok51bWIpOwogfQogCi1ET01TdHJpbmcgTWFjRnJhbWU6OmdlbmVyYXRlRnJhbWVOYW1lKCkK
LXsKLSAgICBLV1FfQkxPQ0tfRVhDRVBUSU9OUzsKLSAgICByZXR1cm4gW19icmlkZ2UgZ2VuZXJh
dGVGcmFtZU5hbWVdOwotICAgIEtXUV9VTkJMT0NLX0VYQ0VQVElPTlM7Ci0KLSAgICByZXR1cm4g
UVN0cmluZygpOwotfQotCiBib29sIE1hY0ZyYW1lOjpvcGVuVVJMKGNvbnN0IEtVUkwgJnVybCkK
IHsKICAgICBLV1FfQkxPQ0tfRVhDRVBUSU9OUzsKSW5kZXg6IFdlYkNvcmUvYnJpZGdlL21hYy9Q
YWdlTWFjLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9icmlkZ2UvbWFjL1BhZ2VNYWMuaAkocmV2
aXNpb24gMTMyNDQpCisrKyBXZWJDb3JlL2JyaWRnZS9tYWMvUGFnZU1hYy5oCSh3b3JraW5nIGNv
cHkpCkBAIC0yMyw2ICsyMywxMiBAQAogCiAjaW5jbHVkZSAiUGFnZS5oIgogCisjaWZkZWYgX19P
QkpDX18KK0BjbGFzcyBXZWJDb3JlUGFnZUJyaWRnZTsKKyNlbHNlCitjbGFzcyBXZWJDb3JlUGFn
ZUJyaWRnZTsKKyNlbmRpZgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICBjbGFzcyBQYWdl
TWFjIDogcHVibGljIFBhZ2UgewpJbmRleDogV2ViQ29yZS9icmlkZ2UvbWFjL1dlYkNvcmVQYWdl
QnJpZGdlLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYnJpZGdlL21hYy9XZWJDb3JlUGFnZUJy
aWRnZS5tbQkocmV2aXNpb24gMTMyNDQpCisrKyBXZWJDb3JlL2JyaWRnZS9tYWMvV2ViQ29yZVBh
Z2VCcmlkZ2UubW0JKHdvcmtpbmcgY29weSkKQEAgLTg5LDYgKzg5LDE2IEBACiAgICAgcmV0dXJu
IE1hYyhfcGFnZS0+bWFpbkZyYW1lKCkpLT5icmlkZ2UoKTsKIH0KIAorLSAodm9pZClzZXRHcm91
cE5hbWU6KE5TU3RyaW5nICopZ3JvdXBOYW1lCit7CisgICAgX3BhZ2UtPnNldEdyb3VwTmFtZShn
cm91cE5hbWUpOworfQorCistIChOU1N0cmluZyAqKWdyb3VwTmFtZQoreworICAgIHJldHVybiBf
cGFnZS0+Z3JvdXBOYW1lKCk7Cit9CisKIEBlbmQKIAogQGltcGxlbWVudGF0aW9uIFdlYkNvcmVQ
YWdlQnJpZGdlIChXZWJDb3JlSW50ZXJuYWxVc2UpCkluZGV4OiBXZWJDb3JlL2JyaWRnZS9tYWMv
V2ViQ29yZUZyYW1lQnJpZGdlLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYnJpZGdlL21hYy9X
ZWJDb3JlRnJhbWVCcmlkZ2UubW0JKHJldmlzaW9uIDEzMjQ0KQorKysgV2ViQ29yZS9icmlkZ2Uv
bWFjL1dlYkNvcmVGcmFtZUJyaWRnZS5tbQkod29ya2luZyBjb3B5KQpAQCAtNDksNyArNDksNiBA
QAogI2ltcG9ydCAiTm9kZUltcGwuaCIKICNpbXBvcnQgIlBhZ2VNYWMuaCIKICNpbXBvcnQgIlNl
bGVjdGlvbkNvbnRyb2xsZXIuaCIKLSNpbXBvcnQgIldlYkNvcmVGcmFtZU5hbWVzcGFjZXMuaCIK
ICNpbXBvcnQgIldlYkNvcmVQYWdlQnJpZGdlLmgiCiAjaW1wb3J0ICJXZWJDb3JlU2V0dGluZ3Mu
aCIKICNpbXBvcnQgIldlYkNvcmVUZXh0UmVuZGVyZXJGYWN0b3J5LmgiCkBAIC0zMzAsMTMgKzMy
OSw3IEBACiAKIC0gKFdlYkNvcmVGcmFtZUJyaWRnZSAqKWNoaWxkRnJhbWVOYW1lZDooTlNTdHJp
bmcgKiluYW1lCiB7Ci0gICAgLy8gRklYTUU6IHdpdGggYSBiZXR0ZXIgZGF0YSBzdHJ1Y3R1cmUg
dGhpcyBjb3VsZCBiZSBPKDEpIGluc3RlYWQgb2YgTyhuKSBpbiBudW1iZXIgCi0gICAgLy8gb2Yg
Y2hpbGQgZnJhbWVzCi0gICAgZm9yIChXZWJDb3JlRnJhbWVCcmlkZ2UgKmNoaWxkID0gW3NlbGYg
Zmlyc3RDaGlsZF07IGNoaWxkOyBjaGlsZCA9IFtjaGlsZCBuZXh0U2libGluZ10pCi0gICAgICAg
IGlmIChbW2NoaWxkIG5hbWVdIGlzRXF1YWxUb1N0cmluZzpuYW1lXSkKLSAgICAgICAgICAgIHJl
dHVybiBjaGlsZDsKLQotICAgIHJldHVybiBuaWw7CisgICAgcmV0dXJuIGJyaWRnZShtX2ZyYW1l
LT50cmVlKCktPmNoaWxkKG5hbWUpKTsKIH0KIAogLy8gUmV0dXJucyB0aGUgbGFzdCBjaGlsZCBv
ZiB1cyBhbmQgYW55IGNoaWxkcmVuLCBvciBzZWxmCkBAIC0zNzcsMjUgKzM3MCw2IEBACiAgICAg
cmV0dXJuIG5pbDsKIH0KIAotLSAodm9pZClzZXRGcmFtZU5hbWVzcGFjZTooTlNTdHJpbmcgKilu
cwotewotICAgIEFTU0VSVChzZWxmID09IFtbc2VsZiBwYWdlXSBtYWluRnJhbWVdKTsKLQotICAg
IGlmIChucyAhPSBfZnJhbWVOYW1lc3BhY2UpewotICAgICAgICBbV2ViQ29yZUZyYW1lTmFtZXNw
YWNlcyByZW1vdmVGcmFtZTpzZWxmIGZyb21OYW1lc3BhY2U6X2ZyYW1lTmFtZXNwYWNlXTsKLSAg
ICAgICAgbnMgPSBbbnMgY29weV07Ci0gICAgICAgIFtfZnJhbWVOYW1lc3BhY2UgcmVsZWFzZV07
Ci0gICAgICAgIF9mcmFtZU5hbWVzcGFjZSA9IG5zOwotICAgICAgICBbV2ViQ29yZUZyYW1lTmFt
ZXNwYWNlcyBhZGRGcmFtZTpzZWxmIHRvTmFtZXNwYWNlOl9mcmFtZU5hbWVzcGFjZV07Ci0gICAg
fQotfQotCi0tIChOU1N0cmluZyAqKWZyYW1lTmFtZXNwYWNlCi17Ci0gICAgQVNTRVJUKHNlbGYg
PT0gW1tzZWxmIHBhZ2VdIG1haW5GcmFtZV0pOwotICAgIHJldHVybiBfZnJhbWVOYW1lc3BhY2U7
Ci19Ci0KIC0gKEJPT0wpX3Nob3VsZEFsbG93QWNjZXNzRnJvbTooV2ViQ29yZUZyYW1lQnJpZGdl
ICopc291cmNlCiB7CiAgICAgLy8gaWYgbm8gc291cmNlIGZyYW1lLCBhbGxvdyBhY2Nlc3MKQEAg
LTQzNSw2NCArNDA5LDkgQEAKICAgICByZXR1cm4gTk87CiB9CiAKLS0gKFdlYkNvcmVGcmFtZUJy
aWRnZSAqKV9kZXNjZW5kYW50RnJhbWVOYW1lZDooTlNTdHJpbmcgKiluYW1lIHNvdXJjZUZyYW1l
OihXZWJDb3JlRnJhbWVCcmlkZ2UgKilzb3VyY2UKLXsKLSAgICBmb3IgKFdlYkNvcmVGcmFtZUJy
aWRnZSAqZnJhbWUgPSBzZWxmOyBmcmFtZTsgZnJhbWUgPSBbZnJhbWUgdHJhdmVyc2VOZXh0RnJh
bWVTdGF5V2l0aGluOnNlbGZdKQotICAgICAgICAvLyBmb3Igc2VjdXJpdHkgcmVhc29ucywgd2Ug
ZG8gbm90IHdhbnQgdG8gZXZlbiBtYWtlIGZyYW1lcyB2aXNpYmxlIHRvIGZyYW1lcyB0aGF0Ci0g
ICAgICAgIC8vIGNhbid0IGFjY2VzcyB0aGVtIAotICAgICAgICBpZiAoW1tmcmFtZSBuYW1lXSBp
c0VxdWFsVG9TdHJpbmc6bmFtZV0gJiYgW2ZyYW1lIF9zaG91bGRBbGxvd0FjY2Vzc0Zyb206c291
cmNlXSkKLSAgICAgICAgICAgIHJldHVybiBmcmFtZTsKLQotICAgIHJldHVybiBuaWw7Ci19Ci0K
LS0gKFdlYkNvcmVGcmFtZUJyaWRnZSAqKV9mcmFtZUluQW55V2luZG93TmFtZWQ6KE5TU3RyaW5n
ICopbmFtZSBzb3VyY2VGcmFtZTooV2ViQ29yZUZyYW1lQnJpZGdlICopc291cmNlCi17Ci0gICAg
QVNTRVJUKHNlbGYgPT0gW1tzZWxmIHBhZ2VdIG1haW5GcmFtZV0pOwotCi0gICAgLy8gVHJ5IHRo
aXMgV2ViVmlldyBmaXJzdC4KLSAgICBXZWJDb3JlRnJhbWVCcmlkZ2UgKmZyYW1lID0gW3NlbGYg
X2Rlc2NlbmRhbnRGcmFtZU5hbWVkOm5hbWUgc291cmNlRnJhbWU6c291cmNlXTsKLQotICAgIGlm
IChmcmFtZSAhPSBuaWwpCi0gICAgICAgIHJldHVybiBmcmFtZTsKLQotICAgIC8vIFRyeSBvdGhl
ciBXZWJWaWV3cyBpbiB0aGUgc2FtZSBzZXQKLQotICAgIGlmIChbc2VsZiBmcmFtZU5hbWVzcGFj
ZV0gIT0gbmlsKSB7Ci0gICAgICAgIE5TRW51bWVyYXRvciAqZW51bWVyYXRvciA9IFtXZWJDb3Jl
RnJhbWVOYW1lc3BhY2VzIGZyYW1lc0luTmFtZXNwYWNlOltzZWxmIGZyYW1lTmFtZXNwYWNlXV07
Ci0gICAgICAgIFdlYkNvcmVGcmFtZUJyaWRnZSAqc2VhcmNoRnJhbWU7Ci0gICAgICAgIHdoaWxl
ICgoc2VhcmNoRnJhbWUgPSBbZW51bWVyYXRvciBuZXh0T2JqZWN0XSkpCi0gICAgICAgICAgICBm
cmFtZSA9IFtzZWFyY2hGcmFtZSBfZGVzY2VuZGFudEZyYW1lTmFtZWQ6bmFtZSBzb3VyY2VGcmFt
ZTpzb3VyY2VdOwotICAgIH0KLQotICAgIHJldHVybiBmcmFtZTsKLX0KLQogLSAoV2ViQ29yZUZy
YW1lQnJpZGdlICopZmluZEZyYW1lTmFtZWQ6KE5TU3RyaW5nICopbmFtZQogewotICAgIC8vIEZp
cnN0LCBkZWFsIHdpdGggJ3NwZWNpYWwnIG5hbWVzLgotICAgIGlmIChbbmFtZSBpc0VxdWFsVG9T
dHJpbmc6QCJfc2VsZiJdIHx8IFtuYW1lIGlzRXF1YWxUb1N0cmluZzpAIl9jdXJyZW50Il0pCi0g
ICAgICAgIHJldHVybiBzZWxmOwotICAgIAotICAgIGlmIChbbmFtZSBpc0VxdWFsVG9TdHJpbmc6
QCJfdG9wIl0pCi0gICAgICAgIHJldHVybiBbW3NlbGYgcGFnZV0gbWFpbkZyYW1lXTsKLSAgICAK
LSAgICBpZiAoW25hbWUgaXNFcXVhbFRvU3RyaW5nOkAiX3BhcmVudCJdKSB7Ci0gICAgICAgIFdl
YkNvcmVGcmFtZUJyaWRnZSAqcGFyZW50ID0gW3NlbGYgcGFyZW50XTsKLSAgICAgICAgcmV0dXJu
IHBhcmVudCA/IHBhcmVudCA6IHNlbGY7Ci0gICAgfQotICAgIAotICAgIGlmIChbbmFtZSBpc0Vx
dWFsVG9TdHJpbmc6QCJfYmxhbmsiXSkKLSAgICAgICAgcmV0dXJuIG5pbDsKLQotICAgIC8vIFNl
YXJjaCBmcm9tIHRoaXMgZnJhbWUgZG93bi4KLSAgICBXZWJDb3JlRnJhbWVCcmlkZ2UgKmZyYW1l
ID0gW3NlbGYgX2Rlc2NlbmRhbnRGcmFtZU5hbWVkOm5hbWUgc291cmNlRnJhbWU6c2VsZl07Ci0K
LSAgICAvLyBTZWFyY2ggaW4gdGhlIG1haW4gZnJhbWUgZm9yIHRoaXMgd2luZG93IHRoZW4gaW4g
b3RoZXJzLgotICAgIGlmICghZnJhbWUpCi0gICAgICAgIGZyYW1lID0gW1tbc2VsZiBwYWdlXSBt
YWluRnJhbWVdIF9mcmFtZUluQW55V2luZG93TmFtZWQ6bmFtZSBzb3VyY2VGcmFtZTpzZWxmXTsK
LQotICAgIHJldHVybiBmcmFtZTsKKyAgICByZXR1cm4gYnJpZGdlKG1fZnJhbWUtPnRyZWUoKS0+
ZmluZChuYW1lKSk7CiB9CiAKICsgKE5TQXJyYXkgKilzdXBwb3J0ZWRNSU1FVHlwZXMKQEAgLTE0
OTIsMzggKzE0MTEsNiBAQAogICAgIHJldHVybiBtX2ZyYW1lLT50cmVlKCktPm5hbWUoKTsKIH0K
IAotLSAodm9pZClfYWRkRnJhbWVQYXRoVG9TdHJpbmc6KE5TTXV0YWJsZVN0cmluZyAqKXBhdGgK
LXsKLSAgICBOU1N0cmluZyAqbmFtZSA9IFtzZWxmIG5hbWVdOwotICAgIGlmIChbbmFtZSBoYXNQ
cmVmaXg6QCI8IS0tZnJhbWVQYXRoICJdKSB7Ci0gICAgICAgIC8vIHdlIGhhdmUgYSBnZW5lcmF0
ZWQgbmFtZSAtIHRha2UgdGhlIHBhdGggZnJvbSBvdXIgbmFtZQotICAgICAgICBOU1JhbmdlIG91
clBhdGhSYW5nZSA9IHsxNCwgW25hbWUgbGVuZ3RoXSAtIDE0IC0gM307Ci0gICAgICAgIFtwYXRo
IGFwcGVuZFN0cmluZzpbbmFtZSBzdWJzdHJpbmdXaXRoUmFuZ2U6b3VyUGF0aFJhbmdlXV07Ci0g
ICAgfSBlbHNlIHsKLSAgICAgICAgLy8gd2UgZG9uJ3QgaGF2ZSBhIGdlbmVyYXRlZCBuYW1lIC0g
anVzdCBhZGQgb3VyIHNpbXBsZSBuYW1lIHRvIHRoZSBlbmQKLSAgICAgICAgW1tzZWxmIHBhcmVu
dF0gX2FkZEZyYW1lUGF0aFRvU3RyaW5nOnBhdGhdOwotICAgICAgICBbcGF0aCBhcHBlbmRTdHJp
bmc6QCIvIl07Ci0gICAgICAgIGlmIChuYW1lKQotICAgICAgICAgICAgW3BhdGggYXBwZW5kU3Ry
aW5nOm5hbWVdOwotICAgIH0KLX0KLQotLy8gR2VuZXJhdGUgYSByZXBlYXRhYmxlIG5hbWUgZm9y
IGEgY2hpbGQgYWJvdXQgdG8gYmUgYWRkZWQgdG8gdXMuICBUaGUgbmFtZSBtdXN0IGJlCi0vLyB1
bmlxdWUgd2l0aGluIHRoZSBmcmFtZSB0cmVlLiAgVGhlIHN0cmluZyB3ZSBnZW5lcmF0ZSBpbmNs
dWRlcyBhICJwYXRoIiBvZiBuYW1lcwotLy8gZnJvbSB0aGUgcm9vdCBmcmFtZSBkb3duIHRvIHVz
LiAgRm9yIHRoaXMgcGF0aCB0byBiZSB1bmlxdWUsIGVhY2ggc2V0IG9mIHNpYmxpbmdzIG11c3QK
LS8vIGNvbnRyaWJ1dGUgYSB1bmlxdWUgbmFtZSB0byB0aGUgcGF0aCwgd2hpY2ggY2FuJ3QgY29s
bGlkZSB3aXRoIGFueSBIVE1MLWFzc2lnbmVkIG5hbWVzLgotLy8gV2UgZ2VuZXJhdGUgdGhpcyBw
YXRoIGNvbXBvbmVudCBieSBpbmRleCBpbiB0aGUgY2hpbGQgbGlzdCBhbG9uZyB3aXRoIGFuIHVu
bGlrZWx5IGZyYW1lIG5hbWUuCi0tIChOU1N0cmluZyAqKWdlbmVyYXRlRnJhbWVOYW1lCi17Ci0g
ICAgTlNNdXRhYmxlU3RyaW5nICpwYXRoID0gW05TTXV0YWJsZVN0cmluZyBzdHJpbmdXaXRoQ2Fw
YWNpdHk6MjU2XTsKLSAgICBbcGF0aCBpbnNlcnRTdHJpbmc6QCI8IS0tZnJhbWVQYXRoICIgYXRJ
bmRleDowXTsKLSAgICBbc2VsZiBfYWRkRnJhbWVQYXRoVG9TdHJpbmc6cGF0aF07Ci0gICAgLy8g
VGhlIG5ldyBjaGlsZCdzIHBhdGggY29tcG9uZW50IGlzIGFsbCBidXQgdGhlIDFzdCBjaGFyIGFu
ZCB0aGUgbGFzdCAzIGNoYXJzCi0gICAgLy8gRklYTUU6IFNob3VsZG4ndCB0aGlzIG51bWJlciBi
ZSB0aGUgaW5kZXggb2YgdGhpcyBmcmFtZSBpbiBpdHMgcGFyZW50IHJhdGhlciB0aGFuIHRoZSBj
aGlsZCBjb3VudD8KLSAgICBbcGF0aCBhcHBlbmRGb3JtYXQ6QCIvPCEtLWZyYW1lJWQtLT4tLT4i
LCBbc2VsZiBjaGlsZENvdW50XV07Ci0gICAgcmV0dXJuIHBhdGg7Ci19Ci0KIC0gKE5TVVJMICop
VVJMCiB7CiAgICAgcmV0dXJuIG1fZnJhbWUtPnVybCgpLmdldE5TVVJMKCk7CkBAIC0xOTg3LDcg
KzE4NzQsNyBAQAogfQogCiAvLyBEZXRlcm1pbmVzIHdoZXRoZXIgd2hpdGVzcGFjZSBuZWVkcyB0
byBiZSBhZGRlZCBhcm91bmQgYVN0cmluZyB0byBwcmVzZXJ2ZSBwcm9wZXIgc3BhY2luZyBhbmQK
LS8vIHB1bmN0dWF0aW9uIHdoZW4gaXTigJlzIGluc2VydGVkIGludG8gdGhlIHJlY2VpdmVy4oCZ
cyB0ZXh0IG92ZXIgY2hhclJhbmdlLiBSZXR1cm5zIGJ5IHJlZmVyZW5jZQorLy8gcHVuY3R1YXRp
b24gd2hlbiBpdNVzIGluc2VydGVkIGludG8gdGhlIHJlY2VpdmVy1XMgdGV4dCBvdmVyIGNoYXJS
YW5nZS4gUmV0dXJucyBieSByZWZlcmVuY2UKIC8vIGluIGJlZm9yZVN0cmluZyBhbmQgYWZ0ZXJT
dHJpbmcgYW55IHdoaXRlc3BhY2UgdGhhdCBzaG91bGQgYmUgYWRkZWQsIHVubGVzcyBlaXRoZXIg
b3IgYm90aCBhcmUKIC8vIG5pbC4gQm90aCBhcmUgcmV0dXJuZWQgYXMgbmlsIGlmIGFTdHJpbmcg
aXMgbmlsIG9yIGlmIHNtYXJ0IGluc2VydGlvbiBhbmQgZGVsZXRpb24gYXJlIGRpc2FibGVkLgog
LSAodm9pZClzbWFydEluc2VydEZvclN0cmluZzooTlNTdHJpbmcgKilwYXN0ZVN0cmluZyByZXBs
YWNpbmdSYW5nZTooRE9NUmFuZ2UgKilyYW5nZVRvUmVwbGFjZSBiZWZvcmVTdHJpbmc6KE5TU3Ry
aW5nICoqKWJlZm9yZVN0cmluZyBhZnRlclN0cmluZzooTlNTdHJpbmcgKiopYWZ0ZXJTdHJpbmcK
QEAgLTI1NzUsOCArMjQ2Miw4IEBACiAgICAgICAgIHdpZGdldCA9IHN0YXRpY19jYXN0PFJlbmRl
cldpZGdldCAqPihuLT5yZW5kZXJlcigpKS0+d2lkZ2V0KCk7CiAgICAgICAgIGlmICghd2lkZ2V0
IHx8ICF3aWRnZXQtPmlzRnJhbWVWaWV3KCkpCiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
RnJhbWUgKmtwYXJ0ID0gc3RhdGljX2Nhc3Q8SFRNTEZyYW1lRWxlbWVudEltcGwgKj4obiktPmNv
bnRlbnRQYXJ0KCk7Ci0gICAgICAgIGlmICgha3BhcnQgfHwgIXN0YXRpY19jYXN0PE1hY0ZyYW1l
ICo+KGtwYXJ0KS0+cmVuZGVyZXIoKSkKKyAgICAgICAgRnJhbWUqIGZyYW1lID0gc3RhdGljX2Nh
c3Q8SFRNTEZyYW1lRWxlbWVudEltcGwgKj4obiktPmNvbnRlbnRGcmFtZSgpOworICAgICAgICBp
ZiAoIWZyYW1lIHx8ICFmcmFtZS0+cmVuZGVyZXIoKSkKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICBpbnQgYWJzWCwgYWJzWTsKICAgICAgICAgbi0+cmVuZGVyZXIoKS0+YWJzb2x1dGVQb3Np
dGlvbihhYnNYLCBhYnNZLCB0cnVlKTsKQEAgLTI1ODUsNyArMjQ3Miw3IEBACiAgICAgICAgIHdp
ZGdldFBvaW50LnNldFkod2lkZ2V0UG9pbnQueSgpIC0gYWJzWSArIHZpZXctPmNvbnRlbnRzWSgp
KTsKIAogICAgICAgICBSZW5kZXJPYmplY3Q6Ok5vZGVJbmZvIHdpZGdldE5vZGVJbmZvKHRydWUs
IHRydWUpOwotICAgICAgICBzdGF0aWNfY2FzdDxNYWNGcmFtZSAqPihrcGFydCktPnJlbmRlcmVy
KCktPmxheWVyKCktPmhpdFRlc3Qod2lkZ2V0Tm9kZUluZm8sIHdpZGdldFBvaW50LngoKSwgd2lk
Z2V0UG9pbnQueSgpKTsKKyAgICAgICAgZnJhbWUtPnJlbmRlcmVyKCktPmxheWVyKCktPmhpdFRl
c3Qod2lkZ2V0Tm9kZUluZm8sIHdpZGdldFBvaW50LngoKSwgd2lkZ2V0UG9pbnQueSgpKTsKICAg
ICAgICAgbm9kZUluZm8gPSB3aWRnZXROb2RlSW5mbzsKICAgICB9CiAgICAgCkluZGV4OiBXZWJD
b3JlL2JyaWRnZS9tYWMvV2ViQ29yZVBhZ2VCcmlkZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2JyaWRnZS9tYWMvV2ViQ29yZVBhZ2VCcmlkZ2UuaAkocmV2aXNpb24gMTMyNDQpCisrKyBXZWJD
b3JlL2JyaWRnZS9tYWMvV2ViQ29yZVBhZ2VCcmlkZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtNTQs
NiArNTQsOSBAQAogCiAtIChXZWJDb3JlRnJhbWVCcmlkZ2UgKiltYWluRnJhbWU7CiAKKy0gKHZv
aWQpc2V0R3JvdXBOYW1lOihOU1N0cmluZyAqKWdyb3VwTmFtZTsKKy0gKE5TU3RyaW5nICopZ3Jv
dXBOYW1lOworCiBAZW5kCiAKIC8vIFRoZSBXZWJDb3JlUGFnZUJyaWRnZSBwcm90b2NvbCBjb250
YWlucyBtZXRob2RzIGZvciB1c2UgYnkgdGhlIFdlYkNvcmUgc2lkZSBvZiB0aGUgYnJpZGdlLgpJ
bmRleDogV2ViQ29yZS9icmlkZ2UvbWFjL1dlYkNvcmVGcmFtZU5hbWVzcGFjZXMuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL2JyaWRnZS9tYWMvV2ViQ29yZUZyYW1lTmFtZXNwYWNlcy5oCShyZXZp
c2lvbiAxMzI0NCkKKysrIFdlYkNvcmUvYnJpZGdlL21hYy9XZWJDb3JlRnJhbWVOYW1lc3BhY2Vz
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDA1IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDA1LCAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yOCwxMCArMjgsNiBAQAog
CiAjaW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4KIAotQGNsYXNzIFdlYkNvcmVGcmFt
ZUJyaWRnZTsKLQogQGludGVyZmFjZSBXZWJDb3JlRnJhbWVOYW1lc3BhY2VzIDogTlNPYmplY3QK
LSsgKHZvaWQpYWRkRnJhbWU6KFdlYkNvcmVGcmFtZUJyaWRnZSAqKWZyYW1lIHRvTmFtZXNwYWNl
OihOU1N0cmluZyAqKW5hbWU7Ci0rICh2b2lkKXJlbW92ZUZyYW1lOihXZWJDb3JlRnJhbWVCcmlk
Z2UgKilmcmFtZSBmcm9tTmFtZXNwYWNlOihOU1N0cmluZyAqKW5hbWU7CiArIChOU0VudW1lcmF0
b3IgKilmcmFtZXNJbk5hbWVzcGFjZTooTlNTdHJpbmcgKiluYW1lOwogQGVuZApJbmRleDogV2Vi
Q29yZS9icmlkZ2UvbWFjL1dlYkNvcmVGcmFtZU5hbWVzcGFjZXMubQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2JyaWRnZS9tYWMvV2ViQ29yZUZyYW1lTmFtZXNwYWNlcy5tCShyZXZpc2lvbiAxMzI0
NCkKKysrIFdlYkNvcmUvYnJpZGdlL21hYy9XZWJDb3JlRnJhbWVOYW1lc3BhY2VzLm0JKHdvcmtp
bmcgY29weSkKQEAgLTEsOTMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNSBBcHBs
ZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
IAotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
IAotICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBs
ZSIpIG5vciB0aGUgbmFtZXMgb2YKLSAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2Vk
IHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAgICAgZnJvbSB0aGlz
IHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiAKLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVU
T1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
LSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmln
LmgiCi0jaW1wb3J0ICJXZWJDb3JlRnJhbWVOYW1lc3BhY2VzLmgiCi0KLXN0YXRpYyBDRlNldENh
bGxCYWNrcyBOb25SZXRhaW5pbmdTZXRDYWxsYmFja3MgPSB7Ci0wLAotTlVMTCwKLU5VTEwsCi1D
RkNvcHlEZXNjcmlwdGlvbiwKLUNGRXF1YWwsCi1DRkhhc2gKLX07Ci0KLUBpbXBsZW1lbnRhdGlv
biBXZWJDb3JlRnJhbWVOYW1lc3BhY2VzCi0KLU5TTXV0YWJsZURpY3Rpb25hcnkgKm5hbWVzcGFj
ZXMgPSBuaWw7Ci0KLSsodm9pZClhZGRGcmFtZTooV2ViQ29yZUZyYW1lQnJpZGdlICopZnJhbWUg
dG9OYW1lc3BhY2U6KE5TU3RyaW5nICopbmFtZQotewotICAgIGlmICghbmFtZSkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgaWYgKCFuYW1lc3BhY2VzKQotICAgICAgICBuYW1lc3BhY2VzID0gW1tO
U011dGFibGVEaWN0aW9uYXJ5IGFsbG9jXSBpbml0XTsKLQotICAgIENGTXV0YWJsZVNldFJlZiBu
YW1lc3BhY2UgPSAoQ0ZNdXRhYmxlU2V0UmVmKVtuYW1lc3BhY2VzIG9iamVjdEZvcktleTpuYW1l
XTsKLQotICAgIGlmICghbmFtZXNwYWNlKSB7Ci0gICAgICAgIG5hbWVzcGFjZSA9IENGU2V0Q3Jl
YXRlTXV0YWJsZShOVUxMLCAwLCAmTm9uUmV0YWluaW5nU2V0Q2FsbGJhY2tzKTsKLSAgICAgICAg
W25hbWVzcGFjZXMgc2V0T2JqZWN0OihpZCluYW1lc3BhY2UgZm9yS2V5Om5hbWVdOwotICAgICAg
ICBDRlJlbGVhc2UobmFtZXNwYWNlKTsKLSAgICB9Ci0gICAgCi0gICAgQ0ZTZXRTZXRWYWx1ZShu
YW1lc3BhY2UsIGZyYW1lKTsKLX0KLQotKyh2b2lkKXJlbW92ZUZyYW1lOihXZWJDb3JlRnJhbWVC
cmlkZ2UgKilmcmFtZSBmcm9tTmFtZXNwYWNlOihOU1N0cmluZyAqKW5hbWUKLXsKLSAgICBpZiAo
IW5hbWUpCi0gICAgICAgIHJldHVybjsKLQotICAgIENGTXV0YWJsZVNldFJlZiBuYW1lc3BhY2Ug
PSAoQ0ZNdXRhYmxlU2V0UmVmKVtuYW1lc3BhY2VzIG9iamVjdEZvcktleTpuYW1lXTsKLQotICAg
IGlmICghbmFtZXNwYWNlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBDRlNldFJlbW92ZVZhbHVl
KG5hbWVzcGFjZSwgZnJhbWUpOwotCi0gICAgaWYgKENGU2V0R2V0Q291bnQobmFtZXNwYWNlKSA9
PSAwKQotICAgICAgICBbbmFtZXNwYWNlcyByZW1vdmVPYmplY3RGb3JLZXk6bmFtZV07Ci19Ci0K
LSsoTlNFbnVtZXJhdG9yICopZnJhbWVzSW5OYW1lc3BhY2U6KE5TU3RyaW5nICopbmFtZTsKLXsK
LSAgICBpZiAoIW5hbWUpCi0gICAgICAgIHJldHVybiBbW1tOU0VudW1lcmF0b3IgYWxsb2NdIGlu
aXRdIGF1dG9yZWxlYXNlXTsKLQotICAgIENGTXV0YWJsZVNldFJlZiBuYW1lc3BhY2UgPSAoQ0ZN
dXRhYmxlU2V0UmVmKVtuYW1lc3BhY2VzIG9iamVjdEZvcktleTpuYW1lXTsKLQotICAgIGlmICgh
bmFtZXNwYWNlKQotICAgICAgICByZXR1cm4gW1tbTlNFbnVtZXJhdG9yIGFsbG9jXSBpbml0XSBh
dXRvcmVsZWFzZV07Ci0gICAgCi0gICAgcmV0dXJuIFsoTlNTZXQgKiluYW1lc3BhY2Ugb2JqZWN0
RW51bWVyYXRvcl07Ci19Ci0KLUBlbmQKSW5kZXg6IFdlYkNvcmUvYnJpZGdlL21hYy9NYWNGcmFt
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYnJpZGdlL21hYy9NYWNGcmFtZS5oCShyZXZpc2lv
biAxMzI0NCkKKysrIFdlYkNvcmUvYnJpZGdlL21hYy9NYWNGcmFtZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zMTYsOCArMzE2LDYgQEAKICAgICB2aXJ0dWFsIHZvaWQgcHJpbnQoKTsKIAogcHJvdGVj
dGVkOgotICAgIHZpcnR1YWwgRE9NU3RyaW5nIGdlbmVyYXRlRnJhbWVOYW1lKCk7Ci0KICAgICB2
aXJ0dWFsIHZvaWQgc3RhcnRSZWRpcmVjdGlvblRpbWVyKCk7CiAgICAgdmlydHVhbCB2b2lkIHN0
b3BSZWRpcmVjdGlvblRpbWVyKCk7CiAgICAgdmlydHVhbCB2b2lkIHJlZGlyZWN0aW9uVGltZXJG
aXJlZChUaW1lcjxGcmFtZT4qKTsKSW5kZXg6IFdlYkNvcmUvYnJpZGdlL21hYy9XZWJDb3JlRnJh
bWVCcmlkZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JyaWRnZS9tYWMvV2ViQ29yZUZyYW1l
QnJpZGdlLmgJKHJldmlzaW9uIDEzMjQ0KQorKysgV2ViQ29yZS9icmlkZ2UvbWFjL1dlYkNvcmVG
cmFtZUJyaWRnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNzIsOCArMTcyLDYgQEAKIHsKICAgICBX
ZWJDb3JlTWFjRnJhbWUgKm1fZnJhbWU7CiAgICAgQk9PTCBfc2hvdWxkQ3JlYXRlUmVuZGVyZXJz
OwotCi0gICAgTlNTdHJpbmcgKl9mcmFtZU5hbWVzcGFjZTsKIH0KIAogKyAoV2ViQ29yZUZyYW1l
QnJpZGdlICopYnJpZGdlRm9yRE9NRG9jdW1lbnQ6KERPTURvY3VtZW50ICopZG9jdW1lbnQ7CkBA
IC0xODcsOCArMTg1LDYgQEAKIAogLSAodm9pZClzZXROYW1lOihOU1N0cmluZyAqKW5hbWU7CiAt
IChOU1N0cmluZyAqKW5hbWU7Ci0vKiBDcmVhdGVzIGEgbmFtZSBmb3IgYW4gZnJhbWUgdW5uYW1l
ZCBpbiB0aGUgSFRNTC4gIEl0IHNob3VsZCBwcm9kdWNlIHJlcGVhdGFibGUgcmVzdWx0cyBmb3Ig
bG9hZHMgb2YgdGhlIHNhbWUgZnJhbWVzZXQuICovCi0tIChOU1N0cmluZyAqKWdlbmVyYXRlRnJh
bWVOYW1lOwogCiAtIChXZWJDb3JlUGFnZUJyaWRnZSAqKXBhZ2U7CiAKQEAgLTIxMiw5ICsyMDgs
NiBAQAogLSAoV2ViQ29yZUZyYW1lQnJpZGdlICopY2hpbGRGcmFtZU5hbWVkOihOU1N0cmluZyAq
KW5hbWU7CiAtIChXZWJDb3JlRnJhbWVCcmlkZ2UgKilmaW5kRnJhbWVOYW1lZDooTlNTdHJpbmcg
KiluYW1lOwogCi0tICh2b2lkKXNldEZyYW1lTmFtZXNwYWNlOihOU1N0cmluZyAqKW5zOwotLSAo
TlNTdHJpbmcgKilmcmFtZU5hbWVzcGFjZTsKLQogLSAodm9pZClwcm92aXNpb25hbExvYWRTdGFy
dGVkOwogCiAtICh2b2lkKW9wZW5VUkw6KE5TVVJMICopVVJMIHJlbG9hZDooQk9PTClyZWxvYWQK
SW5kZXg6IFdlYkNvcmUvYnJpZGdlL21hYy9XZWJDb3JlRnJhbWVOYW1lc3BhY2VzLm1tCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvYnJpZGdlL21hYy9XZWJDb3JlRnJhbWVOYW1lc3BhY2VzLm1tCShy
ZXZpc2lvbiAxMzI0NCkKKysrIFdlYkNvcmUvYnJpZGdlL21hYy9XZWJDb3JlRnJhbWVOYW1lc3Bh
Y2VzLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAwNSBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAwNSwgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjYsNjggKzI2LDI4
IEBACiAgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgogICovCiAKLSNpbmNsdWRlICJjb25maWcuaCIKKyNpbXBvcnQgImNv
bmZpZy5oIgogI2ltcG9ydCAiV2ViQ29yZUZyYW1lTmFtZXNwYWNlcy5oIgogCi1zdGF0aWMgQ0ZT
ZXRDYWxsQmFja3MgTm9uUmV0YWluaW5nU2V0Q2FsbGJhY2tzID0gewotMCwKLU5VTEwsCi1OVUxM
LAotQ0ZDb3B5RGVzY3JpcHRpb24sCi1DRkVxdWFsLAotQ0ZIYXNoCi19OworI2ltcG9ydCAiUGFn
ZU1hYy5oIgogCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKwogQGltcGxlbWVudGF0aW9uIFdl
YkNvcmVGcmFtZU5hbWVzcGFjZXMKIAotTlNNdXRhYmxlRGljdGlvbmFyeSAqbmFtZXNwYWNlcyA9
IG5pbDsKLQotKyh2b2lkKWFkZEZyYW1lOihXZWJDb3JlRnJhbWVCcmlkZ2UgKilmcmFtZSB0b05h
bWVzcGFjZTooTlNTdHJpbmcgKiluYW1lCisrIChOU0VudW1lcmF0b3IgKilmcmFtZXNJbk5hbWVz
cGFjZTooTlNTdHJpbmcgKiluYW1lOwogewotICAgIGlmICghbmFtZSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgaWYgKCFuYW1lc3BhY2VzKQotICAgICAgICBuYW1lc3BhY2VzID0gW1tOU011dGFi
bGVEaWN0aW9uYXJ5IGFsbG9jXSBpbml0XTsKLQotICAgIENGTXV0YWJsZVNldFJlZiBuYW1lc3Bh
Y2UgPSAoQ0ZNdXRhYmxlU2V0UmVmKVtuYW1lc3BhY2VzIG9iamVjdEZvcktleTpuYW1lXTsKLQot
ICAgIGlmICghbmFtZXNwYWNlKSB7Ci0gICAgICAgIG5hbWVzcGFjZSA9IENGU2V0Q3JlYXRlTXV0
YWJsZShOVUxMLCAwLCAmTm9uUmV0YWluaW5nU2V0Q2FsbGJhY2tzKTsKLSAgICAgICAgW25hbWVz
cGFjZXMgc2V0T2JqZWN0OihpZCluYW1lc3BhY2UgZm9yS2V5Om5hbWVdOwotICAgICAgICBDRlJl
bGVhc2UobmFtZXNwYWNlKTsKKyAgICBjb25zdCBIYXNoU2V0PFBhZ2UqPiogc2V0ID0gUGFnZTo6
ZnJhbWVOYW1lc3BhY2UobmFtZSk7CisgICAgaWYgKCFzZXQpCisgICAgICAgIHJldHVybiBbW1tO
U0VudW1lcmF0b3IgYWxsb2NdIGluaXRdIGF1dG9yZWxlYXNlXTsKKyAgICBOU011dGFibGVBcnJh
eSogYXJyYXkgPSBbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0V2l0aENhcGFjaXR5OnNldC0+
c2l6ZSgpXTsKKyAgICBIYXNoU2V0PFBhZ2UqPjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gc2V0LT5l
bmQoKTsKKyAgICBmb3IgKEhhc2hTZXQ8UGFnZSo+Ojpjb25zdF9pdGVyYXRvciBpdCA9IHNldC0+
YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgIFthcnJheSBhZGRPYmplY3Q6TWFj
KCppdCktPmJyaWRnZSgpXTsKICAgICB9Ci0gICAgCi0gICAgQ0ZTZXRTZXRWYWx1ZShuYW1lc3Bh
Y2UsIGZyYW1lKTsKKyAgICBOU0VudW1lcmF0b3IqIGVudW1lcmF0b3IgPSBbYXJyYXkgb2JqZWN0
RW51bWVyYXRvcl07CisgICAgW2FycmF5IHJlbGVhc2VdOworICAgIHJldHVybiBlbnVtZXJhdG9y
OwogfQogCi0rKHZvaWQpcmVtb3ZlRnJhbWU6KFdlYkNvcmVGcmFtZUJyaWRnZSAqKWZyYW1lIGZy
b21OYW1lc3BhY2U6KE5TU3RyaW5nICopbmFtZQotewotICAgIGlmICghbmFtZSkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgQ0ZNdXRhYmxlU2V0UmVmIG5hbWVzcGFjZSA9IChDRk11dGFibGVTZXRS
ZWYpW25hbWVzcGFjZXMgb2JqZWN0Rm9yS2V5Om5hbWVdOwotCi0gICAgaWYgKCFuYW1lc3BhY2Up
Ci0gICAgICAgIHJldHVybjsKLQotICAgIENGU2V0UmVtb3ZlVmFsdWUobmFtZXNwYWNlLCBmcmFt
ZSk7Ci0KLSAgICBpZiAoQ0ZTZXRHZXRDb3VudChuYW1lc3BhY2UpID09IDApCi0gICAgICAgIFtu
YW1lc3BhY2VzIHJlbW92ZU9iamVjdEZvcktleTpuYW1lXTsKLX0KLQotKyhOU0VudW1lcmF0b3Ig
KilmcmFtZXNJbk5hbWVzcGFjZTooTlNTdHJpbmcgKiluYW1lOwotewotICAgIGlmICghbmFtZSkK
LSAgICAgICAgcmV0dXJuIFtbW05TRW51bWVyYXRvciBhbGxvY10gaW5pdF0gYXV0b3JlbGVhc2Vd
OwotCi0gICAgQ0ZNdXRhYmxlU2V0UmVmIG5hbWVzcGFjZSA9IChDRk11dGFibGVTZXRSZWYpW25h
bWVzcGFjZXMgb2JqZWN0Rm9yS2V5Om5hbWVdOwotCi0gICAgaWYgKCFuYW1lc3BhY2UpCi0gICAg
ICAgIHJldHVybiBbW1tOU0VudW1lcmF0b3IgYWxsb2NdIGluaXRdIGF1dG9yZWxlYXNlXTsKLSAg
ICAKLSAgICByZXR1cm4gWyhOU1NldCAqKW5hbWVzcGFjZSBvYmplY3RFbnVtZXJhdG9yXTsKLX0K
LQogQGVuZApJbmRleDogV2ViQ29yZS9wYWdlL0ZyYW1lLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9wYWdlL0ZyYW1lLmgJKHJldmlzaW9uIDEzMjQ0KQorKysgV2ViQ29yZS9wYWdlL0ZyYW1lLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTUwMiw0MSArNTAyLDEwIEBACiAgICAqLwogICB2b2lkIGNsZWFy
VHlwaW5nU3R5bGUoKTsKIAotICB2aXJ0dWFsIHZvaWQgdG9rZW5pemVyUHJvY2Vzc2VkRGF0YSgp
IHt9OworICB2aXJ0dWFsIHZvaWQgdG9rZW5pemVyUHJvY2Vzc2VkRGF0YSgpIHt9CiAKLSAgY29u
c3QgS0hUTUxTZXR0aW5ncyAqc2V0dGluZ3MoKSBjb25zdDsKKyAgY29uc3QgS0hUTUxTZXR0aW5n
cyogc2V0dGluZ3MoKSBjb25zdDsKIAotICAvKioKLSAgICogUmV0dXJucyBhIGxpc3Qgb2YgbmFt
ZXMgb2YgYWxsIGZyYW1lIChpbmNsdWRpbmcgaWZyYW1lKSBvYmplY3RzIG9mCi0gICAqIHRoZSBj
dXJyZW50IGRvY3VtZW50LiBOb3RlIHRoYXQgdGhpcyBtZXRob2QgaXMgbm90IHdvcmtpbmcgcmVj
dXJzaXZlbHkKLSAgICogZm9yIHN1Yi1mcmFtZXMuCi0gICAqLwotICBRU3RyaW5nTGlzdCBmcmFt
ZU5hbWVzKCkgY29uc3Q7Ci0KLSAgUVB0ckxpc3Q8RnJhbWU+IGZyYW1lcygpIGNvbnN0OwotCi0g
IEZyYW1lICpjaGlsZEZyYW1lTmFtZWQoY29uc3QgUVN0cmluZyAmbmFtZSkgY29uc3Q7Ci0KLSAg
LyoqCi0gICAqIEZpbmRzIGEgZnJhbWUgYnkgbmFtZS4gUmV0dXJucyAwTCBpZiBmcmFtZSBjYW4n
dCBiZSBmb3VuZC4KLSAgICovCi0gIEZyYW1lICpmaW5kRnJhbWUoIGNvbnN0IFFTdHJpbmcgJmYg
KTsKLQotICAvKioKLSAgICogUmV0dXJuIHRoZSBjdXJyZW50IGZyYW1lICh0aGUgb25lIHRoYXQg
aGFzIGZvY3VzKQotICAgKiBOb3QgbmVjZXNzYXJpbHkgYSBkaXJlY3QgY2hpbGQgb2Ygb3Vycywg
ZnJhbWVzZXRzIGNhbiBiZSBuZXN0ZWQuCi0gICAqIFJldHVybnMgInRoaXMiIGlmIHRoaXMgcGFy
dCBpc24ndCBhIGZyYW1lc2V0LgotICAgKi8KLSAgRnJhbWUqIGN1cnJlbnRGcmFtZSgpIGNvbnN0
OwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHdoZXRoZXIgYSBmcmFtZSB3aXRoIHRoZSBzcGVjaWZp
ZWQgbmFtZSBpcyBleGlzdHMgb3Igbm90LgotICAgKiBJbiBjb250cmFyeSB0byB0aGUgQHJlZiBm
aW5kRnJhbWUgbWV0aG9kIHRoaXMgb25lIGFsc28gcmV0dXJucyB0cnVlCi0gICAqIGlmIHRoZSBm
cmFtZSBpcyBkZWZpbmVkIGJ1dCBubyBkaXNwbGF5aW5nIGNvbXBvbmVudCBoYXMgYmVlbgotICAg
KiBmb3VuZC9sb2FkZWQsIHlldC4KLSAgICovCi0gIGJvb2wgZnJhbWVFeGlzdHMoIGNvbnN0IFFT
dHJpbmcgJmZyYW1lTmFtZSApOwotCiAgIHZvaWQgc2V0SlNTdGF0dXNCYXJUZXh0KGNvbnN0IFN0
cmluZyYpOwogICB2b2lkIHNldEpTRGVmYXVsdFN0YXR1c0JhclRleHQoY29uc3QgU3RyaW5nJik7
CiAgIFN0cmluZyBqc1N0YXR1c0JhclRleHQoKSBjb25zdDsKQEAgLTU2NSwxMCArNTM0LDYgQEAK
IAogICBib29sIHJlc3RvcmVkKCkgY29uc3Q7CiAKLSAgdm9pZCBpbmNyZW1lbnRGcmFtZUNvdW50
KCk7Ci0gIHZvaWQgZGVjcmVtZW50RnJhbWVDb3VudCgpOwotICBpbnQgdG9wTGV2ZWxGcmFtZUNv
dW50KCk7Ci0KICAgLy8gRWRpdGluZyBvcGVyYXRpb25zLgogICAvLyBOb3QgY2xlYXIgaWYgdGhl
c2Ugd2lsbCBiZSB3YW50ZWQgaW4gRnJhbWUgYnkgS0RFLAogICAvLyBidXQgZm9yIG5vdyB0aGVz
ZSBicmlkZ2Ugc28gd2UgZG9uJ3QgaGF2ZSB0byBwZXBwZXIgdGhlCkBAIC02OTAsNyArNjU1LDYg
QEAKICAgdmlydHVhbCBib29sIGxhc3RFdmVudElzTW91c2VVcCgpIGNvbnN0ID0gMDsKICAgdmly
dHVhbCBRU3RyaW5nIG92ZXJyaWRlTWVkaWFUeXBlKCkgY29uc3QgPSAwOwogcHJvdGVjdGVkOgot
ICB2aXJ0dWFsIFN0cmluZyBnZW5lcmF0ZUZyYW1lTmFtZSgpID0gMDsKICAgdmlydHVhbCBQbHVn
aW4qIGNyZWF0ZVBsdWdpbihjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFFTdHJpbmdMaXN0JiBwYXJh
bU5hbWVzLCBjb25zdCBRU3RyaW5nTGlzdCYgcGFyYW1WYWx1ZXMsIGNvbnN0IFFTdHJpbmcmIG1p
bWVUeXBlKSA9IDA7CiAgIHZpcnR1YWwgRnJhbWUqIGNyZWF0ZUZyYW1lKGNvbnN0IEtVUkwmIHVy
bCwgY29uc3QgUVN0cmluZyYgbmFtZSwgUmVuZGVyUGFydCogcmVuZGVyZXIsIGNvbnN0IFN0cmlu
ZyYgcmVmZXJyZXIpID0gMDsKICAgdmlydHVhbCBPYmplY3RDb250ZW50VHlwZSBvYmplY3RDb250
ZW50VHlwZShjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFFTdHJpbmcmIG1pbWVUeXBlKSA9IDA7CkBA
IC03NTMsNyArNzE3LDYgQEAKICAgYm9vbCByZXF1ZXN0T2JqZWN0KFJlbmRlclBhcnQgKmZyYW1l
LCBjb25zdCBRU3RyaW5nICZ1cmwsIGNvbnN0IFFTdHJpbmcgJmZyYW1lTmFtZSwKICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IFFTdHJpbmcgJnNlcnZpY2VUeXBlLCBjb25zdCBRU3RyaW5nTGlz
dCAmcGFyYW1OYW1lcywgY29uc3QgUVN0cmluZ0xpc3QgJnBhcmFtVmFsdWVzKTsKICAgYm9vbCBy
ZXF1ZXN0RnJhbWUoUmVuZGVyUGFydCAqZnJhbWUsIGNvbnN0IFFTdHJpbmcgJnVybCwgY29uc3Qg
UVN0cmluZyAmZnJhbWVOYW1lKTsKLSAgU3RyaW5nIHJlcXVlc3RGcmFtZU5hbWUoKTsKIAogICBE
b2N1bWVudEltcGwgKmRvY3VtZW50KCkgY29uc3Q7CiAgIHZvaWQgc2V0RG9jdW1lbnQoRG9jdW1l
bnRJbXBsKiBuZXdEb2MpOwpJbmRleDogV2ViQ29yZS9wYWdlL0ZyYW1lVHJlZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvcGFnZS9GcmFtZVRyZWUuaAkocmV2aXNpb24gMTMyNDQpCisrKyBXZWJD
b3JlL3BhZ2UvRnJhbWVUcmVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTIxLDE3ICsyMSwxNiBAQAog
I2lmbmRlZiBGUkFNRV9UUkVFX0gKICNkZWZpbmUgRlJBTUVfVFJFRV9ICiAKKyNpbmNsdWRlICJB
dG9taWNTdHJpbmcuaCIKICNpbmNsdWRlIDxreG1sY29yZS9Ob25jb3B5YWJsZS5oPgogI2luY2x1
ZGUgPGt4bWxjb3JlL1Bhc3NSZWZQdHIuaD4KICNpbmNsdWRlIDxreG1sY29yZS9SZWZQdHIuaD4K
LSNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAg
ICBjbGFzcyBGcmFtZTsKIAotICAgIGNsYXNzIEZyYW1lVHJlZSA6IE5vbmNvcHlhYmxlCi0gICAg
eworICAgIGNsYXNzIEZyYW1lVHJlZSA6IE5vbmNvcHlhYmxlIHsKICAgICBwdWJsaWM6CiAgICAg
ICAgIEZyYW1lVHJlZShGcmFtZSogdGhpc0ZyYW1lLCBGcmFtZSogcGFyZW50RnJhbWUpIAogICAg
ICAgICAgICAgOiBtX3RoaXNGcmFtZSh0aGlzRnJhbWUpCkBAIC00Miw5ICs0MSw5IEBACiAgICAg
ICAgIHsKICAgICAgICAgfQogICAgICAgICB+RnJhbWVUcmVlKCk7Ci0gICAgICAgIAotICAgICAg
ICBjb25zdCBTdHJpbmcmIG5hbWUoKSBjb25zdCB7IHJldHVybiBtX25hbWU7IH0KLSAgICAgICAg
dm9pZCBzZXROYW1lKGNvbnN0IFN0cmluZyYpOworCisgICAgICAgIGNvbnN0IEF0b21pY1N0cmlu
ZyYgbmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fbmFtZTsgfQorICAgICAgICB2b2lkIHNldE5hbWUo
Y29uc3QgQXRvbWljU3RyaW5nJik7CiAgICAgICAgIEZyYW1lKiBwYXJlbnQoKSBjb25zdCB7IHJl
dHVybiBtX3BhcmVudDsgfQogICAgICAgICB2b2lkIHNldFBhcmVudChGcmFtZSogcGFyZW50KSB7
IG1fcGFyZW50ID0gcGFyZW50OyB9CiAgICAgICAgIApAQCAtNTIsMjMgKzUxLDMyIEBACiAgICAg
ICAgIEZyYW1lKiBwcmV2aW91c1NpYmxpbmcoKSBjb25zdCB7IHJldHVybiBtX3ByZXZpb3VzU2li
bGluZzsgfQogICAgICAgICBGcmFtZSogZmlyc3RDaGlsZCgpIGNvbnN0IHsgcmV0dXJuIG1fZmly
c3RDaGlsZC5nZXQoKTsgfQogICAgICAgICBGcmFtZSogbGFzdENoaWxkKCkgY29uc3QgeyByZXR1
cm4gbV9sYXN0Q2hpbGQ7IH0KLSAgICAgICAgaW50IGNoaWxkQ291bnQoKSBjb25zdCB7IHJldHVy
biBtX2NoaWxkQ291bnQ7IH0KKyAgICAgICAgdW5zaWduZWQgY2hpbGRDb3VudCgpIGNvbnN0IHsg
cmV0dXJuIG1fY2hpbGRDb3VudDsgfQorCisgICAgICAgIGJvb2wgaXNEZXNjZW5kYW50T2YoRnJh
bWUqIGFuY2VzdG9yKSBjb25zdDsKKyAgICAgICAgRnJhbWUqIHRyYXZlcnNlTmV4dChGcmFtZSog
c3RheVdpdGhpbiA9IDApIGNvbnN0OwogICAgICAgICAKICAgICAgICAgdm9pZCBhcHBlbmRDaGls
ZChQYXNzUmVmUHRyPEZyYW1lPik7CiAgICAgICAgIHZvaWQgcmVtb3ZlQ2hpbGQoRnJhbWUqKTsK
LSAgICAgICAgCisKKyAgICAgICAgRnJhbWUqIGNoaWxkKHVuc2lnbmVkIGluZGV4KSBjb25zdDsK
KyAgICAgICAgRnJhbWUqIGNoaWxkKGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSkgY29uc3Q7Cisg
ICAgICAgIEZyYW1lKiBmaW5kKGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSkgY29uc3Q7CisKKyAg
ICAgICAgQXRvbWljU3RyaW5nIG5hbWVGb3JOZXdDaGlsZChjb25zdCBBdG9taWNTdHJpbmcmIHJl
cXVlc3RlZE5hbWUpIGNvbnN0OworCiAgICAgcHJpdmF0ZToKICAgICAgICAgRnJhbWUqIG1fdGhp
c0ZyYW1lOwotICAgICAgICAKKwogICAgICAgICBGcmFtZSogbV9wYXJlbnQ7Ci0gICAgICAgIFN0
cmluZyBtX25hbWU7Ci0gICAgICAgIAorICAgICAgICBBdG9taWNTdHJpbmcgbV9uYW1lOworCiAg
ICAgICAgIC8vIEZJWE1FOiB1c2UgTGlzdFJlZlB0cj8KICAgICAgICAgUmVmUHRyPEZyYW1lPiBt
X25leHRTaWJsaW5nOwogICAgICAgICBGcmFtZSogbV9wcmV2aW91c1NpYmxpbmc7CiAgICAgICAg
IFJlZlB0cjxGcmFtZT4gbV9maXJzdENoaWxkOwogICAgICAgICBGcmFtZSogbV9sYXN0Q2hpbGQ7
Ci0gICAgICAgIGludCBtX2NoaWxkQ291bnQ7CisgICAgICAgIHVuc2lnbmVkIG1fY2hpbGRDb3Vu
dDsKICAgICB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL3BhZ2Uv
UGFnZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9QYWdlLmgJKHJldmlzaW9uIDEzMjQ0
KQorKysgV2ViQ29yZS9wYWdlL1BhZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtMjEsNiArMjEsOCBA
QAogI2lmbmRlZiBQQUdFX0gKICNkZWZpbmUgUEFHRV9ICiAKKyNpbmNsdWRlICJQbGF0Zm9ybVN0
cmluZy5oIgorI2luY2x1ZGUgPGt4bWxjb3JlL0hhc2hTZXQuaD4KICNpbmNsdWRlIDxreG1sY29y
ZS9Ob25jb3B5YWJsZS5oPgogI2luY2x1ZGUgPGt4bWxjb3JlL1Bhc3NSZWZQdHIuaD4KICNpbmNs
dWRlIDxreG1sY29yZS9SZWZQdHIuaD4KQEAgLTI4LDE1ICszMCwyOSBAQAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCiAgICAgY2xhc3MgRnJhbWU7CisgICAgY2xhc3MgRnJhbWVOYW1lc3BhY2U7CiAg
ICAgCiAgICAgY2xhc3MgUGFnZSA6IE5vbmNvcHlhYmxlIHsKICAgICBwdWJsaWM6CiAgICAgICAg
IFBhZ2UoKTsKICAgICAgICAgdmlydHVhbCB+UGFnZSgpOworCiAgICAgICAgIHZvaWQgc2V0TWFp
bkZyYW1lKFBhc3NSZWZQdHI8RnJhbWU+IG1haW5GcmFtZSk7CiAgICAgICAgIEZyYW1lKiBtYWlu
RnJhbWUoKSB7IHJldHVybiBtX21haW5GcmFtZS5nZXQoKTsgfQorCisgICAgICAgIHZvaWQgc2V0
R3JvdXBOYW1lKGNvbnN0IFN0cmluZyYpOworICAgICAgICBTdHJpbmcgZ3JvdXBOYW1lKCkgY29u
c3QgeyByZXR1cm4gbV9ncm91cE5hbWU7IH0KKyAgICAgICAgY29uc3QgSGFzaFNldDxQYWdlKj4q
IGZyYW1lTmFtZXNwYWNlKCkgY29uc3Q7CisgICAgICAgIHN0YXRpYyBjb25zdCBIYXNoU2V0PFBh
Z2UqPiogZnJhbWVOYW1lc3BhY2UoY29uc3QgU3RyaW5nJik7CisKKyAgICAgICAgdm9pZCBpbmNy
ZW1lbnRGcmFtZUNvdW50KCkgeyArK21fZnJhbWVDb3VudDsgfQorICAgICAgICB2b2lkIGRlY3Jl
bWVudEZyYW1lQ291bnQoKSB7IC0tbV9mcmFtZUNvdW50OyB9CisgICAgICAgIGludCBmcmFtZUNv
dW50KCkgY29uc3QgeyByZXR1cm4gbV9mcmFtZUNvdW50OyB9CisKICAgICBwcml2YXRlOgogICAg
ICAgICBSZWZQdHI8RnJhbWU+IG1fbWFpbkZyYW1lOworICAgICAgICBpbnQgbV9mcmFtZUNvdW50
OworICAgICAgICBTdHJpbmcgbV9ncm91cE5hbWU7CiAgICAgfTsKIAogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpJbmRleDogV2ViQ29yZS9wYWdlL0ZyYW1lLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3BhZ2UvRnJhbWUuY3BwCShyZXZpc2lvbiAxMzI0NCkKKysrIFdlYkNvcmUvcGFnZS9GcmFt
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzNTUsMTEgKzEzNTUsNiBAQAogICB1cmxTZWxlY3Rl
ZChjVVJMLCBhcmdzQ29weSk7CiB9CiAKLURPTVN0cmluZyBGcmFtZTo6cmVxdWVzdEZyYW1lTmFt
ZSgpCi17Ci0gICAgcmV0dXJuIGdlbmVyYXRlRnJhbWVOYW1lKCk7Ci19Ci0KIGJvb2wgRnJhbWU6
OnJlcXVlc3RGcmFtZShSZW5kZXJQYXJ0KiByZW5kZXJlciwgY29uc3QgUVN0cmluZyYgX3VybCwg
Y29uc3QgUVN0cmluZyYgZnJhbWVOYW1lKQogewogICAgIC8vIFN1cHBvcnQgZm9yIDxmcmFtZSBz
cmM9ImphdmFzY3JpcHQ6c3RyaW5nIj4KQEAgLTEzNzEsNyArMTM2Niw3IEBACiAgICAgfSBlbHNl
CiAgICAgICAgIHVybCA9IGNvbXBsZXRlVVJMKF91cmwpOwogCi0gICAgRnJhbWUqIGZyYW1lID0g
Y2hpbGRGcmFtZU5hbWVkKGZyYW1lTmFtZSk7CisgICAgRnJhbWUqIGZyYW1lID0gdHJlZSgpLT5j
aGlsZChmcmFtZU5hbWUpOwogICAgIGlmIChmcmFtZSkgewogICAgICAgICBVUkxBcmdzIGFyZ3M7
CiAgICAgICAgIGFyZ3MubWV0YURhdGEoKS5zZXQoInJlZmVycmVyIiwgZC0+bV9yZWZlcnJlcik7
CkBAIC0xNTkxLDIxICsxNTg2LDYgQEAKICAgICBjaGVja0NvbXBsZXRlZCgpOwogfQogCi1GcmFt
ZSogRnJhbWU6OmZpbmRGcmFtZShjb25zdCBRU3RyaW5nJiBmKQotewotICAgIC8vIEZJWE1FOiB0
aGlzIG9ubHkgZmluZHMgY2hpbGQgZnJhbWVzLCBpcyBpdCBldmVyIGFwcHJvcHJpYXRlIHRvIHVz
ZSB0aGlzPwotICAgIC8vICMjIyBodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNC9hcHBlbmRpeC9u
b3Rlcy5odG1sI25vdGVzLWZyYW1lcwotICAgIGZvciAoRnJhbWUqIGNoaWxkID0gdHJlZSgpLT5m
aXJzdENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT50cmVlKCktPm5leHRTaWJsaW5nKCkp
Ci0gICAgICAgIGlmIChjaGlsZC0+dHJlZSgpLT5uYW1lKCkgPT0gZikKLSAgICAgICAgICAgIHJl
dHVybiBjaGlsZDsKLSAgICByZXR1cm4gMDsKLX0KLQotYm9vbCBGcmFtZTo6ZnJhbWVFeGlzdHMo
Y29uc3QgUVN0cmluZyYgZnJhbWVOYW1lKQotewotICAgIHJldHVybiBmaW5kRnJhbWUoZnJhbWVO
YW1lKTsKLX0KLQogaW50IEZyYW1lOjp6b29tRmFjdG9yKCkgY29uc3QKIHsKICAgcmV0dXJuIGQt
Pm1fem9vbUZhY3RvcjsKQEAgLTE2ODAsMzQgKzE2NjAsNiBAQAogICBpZihkLT5tX2RvYykgZC0+
bV9kb2MtPnVwZGF0ZVN0eWxlU2VsZWN0b3IoKTsKIH0KIAotUVN0cmluZ0xpc3QgRnJhbWU6OmZy
YW1lTmFtZXMoKSBjb25zdAotewotICBRU3RyaW5nTGlzdCByZXM7Ci0KLSAgZm9yIChGcmFtZSog
Y2hpbGQgPSB0cmVlKCktPmZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPnRyZWUo
KS0+bmV4dFNpYmxpbmcoKSkKLSAgICAgIHJlcyArPSBjaGlsZC0+dHJlZSgpLT5uYW1lKCkucXN0
cmluZygpOwotCi0gIHJldHVybiByZXM7Ci19Ci0KLVFQdHJMaXN0PEZyYW1lPiBGcmFtZTo6ZnJh
bWVzKCkgY29uc3QKLXsKLSAgUVB0ckxpc3Q8RnJhbWU+IHJlczsKLQotICBmb3IgKEZyYW1lKiBj
aGlsZCA9IHRyZWUoKS0+Zmlyc3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+dHJlZSgp
LT5uZXh0U2libGluZygpKQotICAgICAgcmVzLmFwcGVuZChjaGlsZCk7Ci0KLSAgcmV0dXJuIHJl
czsKLX0KLQotRnJhbWUqIEZyYW1lOjpjaGlsZEZyYW1lTmFtZWQoY29uc3QgUVN0cmluZyYgbmFt
ZSkgY29uc3QKLXsKLSAgICBmb3IgKEZyYW1lKiBjaGlsZCA9IHRyZWUoKS0+Zmlyc3RDaGlsZCgp
OyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+dHJlZSgpLT5uZXh0U2libGluZygpKQotICAgICAgICBp
ZiAoY2hpbGQtPnRyZWUoKS0+bmFtZSgpID09IG5hbWUpCi0gICAgICAgICAgICByZXR1cm4gY2hp
bGQ7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KIGJvb2wgRnJhbWU6OnNob3VsZERyYWdBdXRvTm9kZShO
b2RlSW1wbCAqbm9kZSwgaW50IHgsIGludCB5KSBjb25zdAogewogICAgIC8vIE5vIEtERSBpbXBs
IHlldApAQCAtMjEzOCwzMCArMjA5MCw2IEBACiAgIHJldHVybiBkLT5tX3Jlc3RvcmVkOwogfQog
Ci12b2lkIEZyYW1lOjppbmNyZW1lbnRGcmFtZUNvdW50KCkKLXsKLSAgICAvLyBGSVhNRTogdGhp
cyBzaG91bGQgYmUgaW4gUGFnZQotICAgIGZyYW1lQ291bnQrKzsKLSAgICBpZiAodHJlZSgpLT5w
YXJlbnQoKSkKLSAgICAgICAgdHJlZSgpLT5wYXJlbnQoKS0+aW5jcmVtZW50RnJhbWVDb3VudCgp
OwotfQotCi12b2lkIEZyYW1lOjpkZWNyZW1lbnRGcmFtZUNvdW50KCkKLXsKLSAgICAvLyBGSVhN
RTogdGhpcyBzaG91bGQgYmUgaW4gUGFnZQotICAgIGZyYW1lQ291bnQtLTsKLSAgICBpZiAodHJl
ZSgpLT5wYXJlbnQoKSkKLSAgICAgICAgdHJlZSgpLT5wYXJlbnQoKS0+ZGVjcmVtZW50RnJhbWVD
b3VudCgpOwotfQotCi1pbnQgRnJhbWU6OnRvcExldmVsRnJhbWVDb3VudCgpCi17Ci0gICAgLy8g
RklYTUU6IHRoaXMgc2hvdWxkIGJlIGluIFBhZ2UKLSAgICBpZiAodHJlZSgpLT5wYXJlbnQoKSkK
LSAgICAgICAgcmV0dXJuIHRyZWUoKS0+cGFyZW50KCktPnRvcExldmVsRnJhbWVDb3VudCgpOwot
ICAgIHJldHVybiBmcmFtZUNvdW50OwotfQotCiBib29sIEZyYW1lOjp0YWJzVG9MaW5rcygpIGNv
bnN0CiB7CiAgICAgcmV0dXJuIHRydWU7CkluZGV4OiBXZWJDb3JlL3BhZ2UvRnJhbWVUcmVlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvRnJhbWVUcmVlLmNwcAkocmV2aXNpb24gMTMy
NDQpCisrKyBXZWJDb3JlL3BhZ2UvRnJhbWVUcmVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjEs
MTEgKzIxLDEyIEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiRnJhbWVUcmVlLmgi
CiAKLSNpbmNsdWRlIDxreG1sY29yZS9Bc3NlcnRpb25zLmg+CiAjaW5jbHVkZSAiRnJhbWUuaCIK
ICNpbmNsdWRlICJOb2RlSW1wbC5oIgotCisjaW5jbHVkZSAiUGFnZS5oIgogI2luY2x1ZGUgPGFs
Z29yaXRobT4KKyNpbmNsdWRlIDxreG1sY29yZS9Bc3NlcnRpb25zLmg+CisjaW5jbHVkZSA8a3ht
bGNvcmUvVmVjdG9yLmg+CiAKIHVzaW5nIHN0ZDo6c3dhcDsKIApAQCAtMzcsMTUgKzM4LDE0IEBA
CiAgICAgICAgIGNoaWxkLT5kZXRhY2hGcm9tVmlldygpOwogfQogCi12b2lkIEZyYW1lVHJlZTo6
c2V0TmFtZShjb25zdCBET01TdHJpbmcmIG5hbWUpIAoteyAKLSAgICBET01TdHJpbmcgbiA9IG5h
bWU7Ci0gICAgICAgIAotICAgIC8vIEZJWE1FOiBpcyB0aGUgYmxhbmsgcnVsZSBuZWVkZWQgb3Ig
dXNlZnVsPwotICAgIGlmIChwYXJlbnQoKSAmJiAobmFtZS5pc0VtcHR5KCkgfHwgcGFyZW50KCkt
PmZyYW1lRXhpc3RzKG5hbWUucXN0cmluZygpKSB8fCBuYW1lID09ICJfYmxhbmsiKSkKLSAgICAg
ICAgbiA9IHBhcmVudCgpLT5yZXF1ZXN0RnJhbWVOYW1lKCk7Ci0gICAgCi0gICAgbV9uYW1lID0g
bjsKK3ZvaWQgRnJhbWVUcmVlOjpzZXROYW1lKGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSkgCit7
CisgICAgaWYgKCFwYXJlbnQoKSkgeworICAgICAgICBtX25hbWUgPSBuYW1lOworICAgICAgICBy
ZXR1cm47CisgICAgfQorICAgIG1fbmFtZSA9IEF0b21pY1N0cmluZygpOyAvLyBSZW1vdmUgb3Vy
IG9sZCBmcmFtZSBuYW1lIHNvIGl0J3Mgbm90IGNvbnNpZGVyZWQgaW4gbmFtZUZvck5ld0NoaWxk
LgorICAgIG1fbmFtZSA9IHBhcmVudCgpLT50cmVlKCktPm5hbWVGb3JOZXdDaGlsZChuYW1lKTsK
IH0KIAogdm9pZCBGcmFtZVRyZWU6OmFwcGVuZENoaWxkKFBhc3NSZWZQdHI8RnJhbWU+IGNoaWxk
KQpAQCAtODYsNCArODYsMTQ0IEBACiAgICAgbV9jaGlsZENvdW50LS07CiB9CiAKK0F0b21pY1N0
cmluZyBGcmFtZVRyZWU6Om5hbWVGb3JOZXdDaGlsZChjb25zdCBBdG9taWNTdHJpbmcmIHJlcXVl
c3RlZE5hbWUpIGNvbnN0Cit7CisgICAgaWYgKCFyZXF1ZXN0ZWROYW1lLmlzRW1wdHkoKSAmJiAh
Y2hpbGQocmVxdWVzdGVkTmFtZSkgJiYgcmVxdWVzdGVkTmFtZSAhPSAiX2JsYW5rIikKKyAgICAg
ICAgcmV0dXJuIHJlcXVlc3RlZE5hbWU7CisKKyAgICAvLyBDcmVhdGUgYSByZXBlYXRhYmxlIG5h
bWUgZm9yIGEgY2hpbGQgYWJvdXQgdG8gYmUgYWRkZWQgdG8gdXMuIFRoZSBuYW1lIG11c3QgYmUK
KyAgICAvLyB1bmlxdWUgd2l0aGluIHRoZSBmcmFtZSB0cmVlLiBUaGUgc3RyaW5nIHdlIGdlbmVy
YXRlIGluY2x1ZGVzIGEgInBhdGgiIG9mIG5hbWVzCisgICAgLy8gZnJvbSB0aGUgcm9vdCBmcmFt
ZSBkb3duIHRvIHVzLiBGb3IgdGhpcyBwYXRoIHRvIGJlIHVuaXF1ZSwgZWFjaCBzZXQgb2Ygc2li
bGluZ3MgbXVzdAorICAgIC8vIGNvbnRyaWJ1dGUgYSB1bmlxdWUgbmFtZSB0byB0aGUgcGF0aCwg
d2hpY2ggY2FuJ3QgY29sbGlkZSB3aXRoIGFueSBIVE1MLWFzc2lnbmVkIG5hbWVzLgorICAgIC8v
IFdlIGdlbmVyYXRlIHRoaXMgcGF0aCBjb21wb25lbnQgYnkgaW5kZXggaW4gdGhlIGNoaWxkIGxp
c3QgYWxvbmcgd2l0aCBhbiB1bmxpa2VseQorICAgIC8vIGZyYW1lIG5hbWUgdGhhdCBjYW4ndCBi
ZSBzZXQgaW4gSFRNTCBiZWNhdXNlIGl0IGNvbGxpZGVzIHdpdGggY29tbWVudCBzeW50YXguCisK
KyAgICBjb25zdCBjaGFyIGZyYW1lUGF0aFByZWZpeFtdID0gIjwhLS1mcmFtZVBhdGggIjsKKyAg
ICBjb25zdCBpbnQgZnJhbWVQYXRoUHJlZml4TGVuZ3RoID0gMTQ7CisgICAgY29uc3QgaW50IGZy
YW1lUGF0aFN1ZmZpeExlbmd0aCA9IDM7CisKKyAgICAvLyBGaW5kIHRoZSBuZWFyZXN0IHBhcmVu
dCB0aGF0IGhhcyBhIGZyYW1lIHdpdGggYSBwYXRoIGluIGl0LgorICAgIFZlY3RvcjxGcmFtZSos
IDE2PiBjaGFpbjsKKyAgICBGcmFtZSogZnJhbWU7CisgICAgZm9yIChmcmFtZSA9IG1fdGhpc0Zy
YW1lOyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgpLT5wYXJlbnQoKSkgeworICAgICAgICBp
ZiAoZnJhbWUtPnRyZWUoKS0+bmFtZSgpLnN0YXJ0c1dpdGgoZnJhbWVQYXRoUHJlZml4KSkKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjaGFpbi5hcHBlbmQoZnJhbWUpOworICAgIH0KKyAg
ICBTdHJpbmcgbmFtZTsKKyAgICBuYW1lICs9IGZyYW1lUGF0aFByZWZpeDsKKyAgICBpZiAoZnJh
bWUpCisgICAgICAgIG5hbWUgKz0gZnJhbWUtPnRyZWUoKS0+bmFtZSgpLmRvbVN0cmluZygpLnN1
YnN0cmluZyhmcmFtZVBhdGhQcmVmaXhMZW5ndGgsCisgICAgICAgICAgICBmcmFtZS0+dHJlZSgp
LT5uYW1lKCkubGVuZ3RoKCkgLSBmcmFtZVBhdGhQcmVmaXhMZW5ndGggLSBmcmFtZVBhdGhTdWZm
aXhMZW5ndGgpOworICAgIGZvciAoaW50IGkgPSBjaGFpbi5zaXplKCkgLSAxOyBpID49IDA7IC0t
aSkgeworICAgICAgICBmcmFtZSA9IGNoYWluW2ldOworICAgICAgICBuYW1lICs9ICIvIjsKKyAg
ICAgICAgbmFtZSArPSBmcmFtZS0+dHJlZSgpLT5uYW1lKCk7CisgICAgfQorICAgIGNoYXIgc3Vm
Zml4WzQwXTsgLy8gMTYgKyBtYXhpbXVtIHdpZHRoIG9mIGFuIHVuc2lnbmVkIGludGVnZXIKKyAg
ICBzcHJpbnRmKHN1ZmZpeCwgIi88IS0tZnJhbWUldS0tPi0tPiIsIGNoaWxkQ291bnQoKSk7Cisg
ICAgbmFtZSArPSBzdWZmaXg7CisKKyAgICByZXR1cm4gQXRvbWljU3RyaW5nKG5hbWUpOwogfQor
CitGcmFtZSogRnJhbWVUcmVlOjpjaGlsZCh1bnNpZ25lZCBpbmRleCkgY29uc3QKK3sKKyAgICBG
cmFtZSogcmVzdWx0ID0gZmlyc3RDaGlsZCgpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IHJl
c3VsdCAmJiBpICE9IGluZGV4OyArK2kpCisgICAgICAgIHJlc3VsdCA9IHJlc3VsdC0+dHJlZSgp
LT5uZXh0U2libGluZygpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK0ZyYW1lKiBGcmFtZVRy
ZWU6OmNoaWxkKGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSkgY29uc3QKK3sKKyAgICBmb3IgKEZy
YW1lKiBjaGlsZCA9IGZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPnRyZWUoKS0+
bmV4dFNpYmxpbmcoKSkKKyAgICAgICAgaWYgKGNoaWxkLT50cmVlKCktPm5hbWUoKSA9PSBuYW1l
KQorICAgICAgICAgICAgcmV0dXJuIGNoaWxkOworICAgIHJldHVybiAwOworfQorCitGcmFtZSog
RnJhbWVUcmVlOjpmaW5kKGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSkgY29uc3QKK3sKKyAgICBp
ZiAobmFtZSA9PSAiX3NlbGYiIHx8IG5hbWUgPT0gIl9jdXJyZW50IikKKyAgICAgICAgcmV0dXJu
IG1fdGhpc0ZyYW1lOworICAgIAorICAgIGlmIChuYW1lID09ICJfdG9wIikKKyAgICAgICAgcmV0
dXJuIG1fdGhpc0ZyYW1lLT5wYWdlKCktPm1haW5GcmFtZSgpOworICAgIAorICAgIGlmIChuYW1l
ID09ICJfcGFyZW50IikKKyAgICAgICAgcmV0dXJuIHBhcmVudCgpID8gcGFyZW50KCkgOiBtX3Ro
aXNGcmFtZTsKKworICAgIC8vIFNpbmNlICJfYmxhbmsiIHNob3VsZCBuZXZlciBiZSBhbnkgZnJh
bWUncyBuYW1lLCB0aGUgZm9sbG93aW5nIGp1c3QgYW1vdW50cyB0byBhbiBvcHRpbWl6YXRpb24u
CisgICAgaWYgKG5hbWUgPT0gIl9ibGFuayIpCisgICAgICAgIHJldHVybiAwOworCisgICAgLy8g
U2VhcmNoIHN1YnRyZWUgc3RhcnRpbmcgd2l0aCB0aGlzIGZyYW1lIGZpcnN0LgorICAgIGZvciAo
RnJhbWUqIGZyYW1lID0gbV90aGlzRnJhbWU7IGZyYW1lOyBmcmFtZSA9IGZyYW1lLT50cmVlKCkt
PnRyYXZlcnNlTmV4dChtX3RoaXNGcmFtZSkpCisgICAgICAgIGlmIChmcmFtZS0+dHJlZSgpLT5u
YW1lKCkgPT0gbmFtZSkKKyAgICAgICAgICAgIHJldHVybiBmcmFtZTsKKworICAgIC8vIFNlYXJj
aCB0aGUgZW50aXJlIHRyZWUgZm9yIHRoaXMgcGFnZSBuZXh0LgorICAgIFBhZ2UqIHBhZ2UgPSBt
X3RoaXNGcmFtZS0+cGFnZSgpOworICAgIGZvciAoRnJhbWUqIGZyYW1lID0gcGFnZS0+bWFpbkZy
YW1lKCk7IGZyYW1lOyBmcmFtZSA9IGZyYW1lLT50cmVlKCktPnRyYXZlcnNlTmV4dCgpKQorICAg
ICAgICBpZiAoZnJhbWUtPnRyZWUoKS0+bmFtZSgpID09IG5hbWUpCisgICAgICAgICAgICByZXR1
cm4gZnJhbWU7CisKKyAgICAvLyBTZWFyY2ggdGhlIGVudGlyZSB0cmVlIGZvciBhbGwgb3RoZXIg
cGFnZXMgaW4gdGhpcyBuYW1lc3BhY2UuCisgICAgY29uc3QgSGFzaFNldDxQYWdlKj4qIHBhZ2Vz
ID0gcGFnZS0+ZnJhbWVOYW1lc3BhY2UoKTsKKyAgICBpZiAocGFnZXMpIHsKKyAgICAgICAgSGFz
aFNldDxQYWdlKj46OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IHBhZ2VzLT5lbmQoKTsKKyAgICAgICAg
Zm9yIChIYXNoU2V0PFBhZ2UqPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBwYWdlcy0+YmVnaW4oKTsg
aXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgICAgICBQYWdlKiBvdGhlclBhZ2UgPSAqaXQ7Cisg
ICAgICAgICAgICBpZiAob3RoZXJQYWdlICE9IHBhZ2UpCisgICAgICAgICAgICAgICAgZm9yIChG
cmFtZSogZnJhbWUgPSBvdGhlclBhZ2UtPm1haW5GcmFtZSgpOyBmcmFtZTsgZnJhbWUgPSBmcmFt
ZS0+dHJlZSgpLT50cmF2ZXJzZU5leHQoKSkKKyAgICAgICAgICAgICAgICAgICAgaWYgKGZyYW1l
LT50cmVlKCktPm5hbWUoKSA9PSBuYW1lKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGZyYW1lOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CisKK2Jvb2wgRnJh
bWVUcmVlOjppc0Rlc2NlbmRhbnRPZihGcmFtZSogYW5jZXN0b3IpIGNvbnN0Cit7CisgICAgZm9y
IChGcmFtZSogZnJhbWUgPSBtX3RoaXNGcmFtZTsgZnJhbWU7IGZyYW1lID0gZnJhbWUtPnRyZWUo
KS0+cGFyZW50KCkpCisgICAgICAgIGlmIChmcmFtZSA9PSBhbmNlc3RvcikKKyAgICAgICAgICAg
IHJldHVybiB0cnVlOworICAgIHJldHVybiBmYWxzZTsKK30KKworRnJhbWUqIEZyYW1lVHJlZTo6
dHJhdmVyc2VOZXh0KEZyYW1lKiBzdGF5V2l0aGluKSBjb25zdAoreworICAgIEZyYW1lKiBjaGls
ZCA9IGZpcnN0Q2hpbGQoKTsKKyAgICBpZiAoY2hpbGQpIHsKKyAgICAgICAgQVNTRVJUKCFzdGF5
V2l0aGluIHx8IGNoaWxkLT50cmVlKCktPmlzRGVzY2VuZGFudE9mKHN0YXlXaXRoaW4pKTsKKyAg
ICAgICAgcmV0dXJuIGNoaWxkOworICAgIH0KKworICAgIGlmIChtX3RoaXNGcmFtZSA9PSBzdGF5
V2l0aGluKQorICAgICAgICByZXR1cm4gMDsKKworICAgIEZyYW1lKiBzaWJsaW5nID0gbmV4dFNp
YmxpbmcoKTsKKyAgICBpZiAoc2libGluZykgeworICAgICAgICBBU1NFUlQoIXN0YXlXaXRoaW4g
fHwgc2libGluZy0+dHJlZSgpLT5pc0Rlc2NlbmRhbnRPZihzdGF5V2l0aGluKSk7CisgICAgICAg
IHJldHVybiBzaWJsaW5nOworICAgIH0KKworICAgIEZyYW1lKiBmcmFtZSA9IG1fdGhpc0ZyYW1l
OworICAgIHdoaWxlICghc2libGluZyAmJiAoIXN0YXlXaXRoaW4gfHwgZnJhbWUtPnRyZWUoKS0+
cGFyZW50KCkgIT0gc3RheVdpdGhpbikpIHsKKyAgICAgICAgZnJhbWUgPSBmcmFtZS0+dHJlZSgp
LT5wYXJlbnQoKTsKKyAgICAgICAgaWYgKCFmcmFtZSkKKyAgICAgICAgICAgIHJldHVybiAwOwor
ICAgICAgICBzaWJsaW5nID0gZnJhbWUtPnRyZWUoKS0+bmV4dFNpYmxpbmcoKTsKKyAgICB9CisK
KyAgICBpZiAoZnJhbWUpIHsKKyAgICAgICAgQVNTRVJUKCFzdGF5V2l0aGluIHx8ICFzaWJsaW5n
IHx8IHNpYmxpbmctPnRyZWUoKS0+aXNEZXNjZW5kYW50T2Yoc3RheVdpdGhpbikpOworICAgICAg
ICByZXR1cm4gc2libGluZzsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKworfQpJbmRleDog
V2ViQ29yZS9wYWdlL1BhZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9QYWdlLmNw
cAkocmV2aXNpb24gMTMyNDQpCisrKyBXZWJDb3JlL3BhZ2UvUGFnZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTI0LDIxICsyNCwyNCBAQAogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSA8a2pz
L2NvbGxlY3Rvci5oPgogI2luY2x1ZGUgPGtqcy9KU0xvY2suaD4KKyNpbmNsdWRlIDxreG1sY29y
ZS9IYXNoTWFwLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBLSlM7CiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAogc3RhdGljIGludCBwYWdlQ291bnQ7CitzdGF0aWMgSGFzaE1hcDxTdHJpbmcsIEhhc2hT
ZXQ8UGFnZSo+Kj4qIGZyYW1lTmFtZXNwYWNlczsKIAotUGFnZTo6UGFnZSgpIAorUGFnZTo6UGFn
ZSgpIDogbV9mcmFtZUNvdW50KDApCiB7CiAgICAgKytwYWdlQ291bnQ7CiB9CiAKIFBhZ2U6On5Q
YWdlKCkgCi17IAorewogICAgIG1fbWFpbkZyYW1lLT5kZXRhY2hGcm9tVmlldygpOyAKKyAgICBz
ZXRHcm91cE5hbWUoU3RyaW5nKCkpOwogICAgIGlmICghLS1wYWdlQ291bnQpIHsKICAgICAgICAg
RnJhbWU6OmVuZEFsbExpZmVTdXBwb3J0KCk7CiAjaWZuZGVmIE5ERUJVRwpAQCAtNTUsNCArNTgs
MzkgQEAKICAgICBtX21haW5GcmFtZSA9IG1haW5GcmFtZTsKIH0KIAordm9pZCBQYWdlOjpzZXRH
cm91cE5hbWUoY29uc3QgU3RyaW5nJiBuYW1lKQoreworICAgIGlmIChmcmFtZU5hbWVzcGFjZXMg
JiYgIW1fZ3JvdXBOYW1lLmlzRW1wdHkoKSkgeworICAgICAgICBIYXNoU2V0PFBhZ2UqPiogb2xk
TmFtZXNwYWNlID0gZnJhbWVOYW1lc3BhY2VzLT5nZXQobV9ncm91cE5hbWUpOworICAgICAgICBp
ZiAob2xkTmFtZXNwYWNlKSB7CisgICAgICAgICAgICBvbGROYW1lc3BhY2UtPnJlbW92ZSh0aGlz
KTsKKyAgICAgICAgICAgIGlmIChvbGROYW1lc3BhY2UtPmlzRW1wdHkoKSkgeworICAgICAgICAg
ICAgICAgIGZyYW1lTmFtZXNwYWNlcy0+cmVtb3ZlKG1fZ3JvdXBOYW1lKTsKKyAgICAgICAgICAg
ICAgICBkZWxldGUgb2xkTmFtZXNwYWNlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
fQorICAgIG1fZ3JvdXBOYW1lID0gbmFtZTsKKyAgICBpZiAoIW5hbWUuaXNFbXB0eSgpKSB7Cisg
ICAgICAgIGlmICghZnJhbWVOYW1lc3BhY2VzKQorICAgICAgICAgICAgZnJhbWVOYW1lc3BhY2Vz
ID0gbmV3IEhhc2hNYXA8U3RyaW5nLCBIYXNoU2V0PFBhZ2UqPio+OworICAgICAgICBIYXNoU2V0
PFBhZ2UqPiogbmV3TmFtZXNwYWNlID0gZnJhbWVOYW1lc3BhY2VzLT5nZXQobmFtZSk7CisgICAg
ICAgIGlmICghbmV3TmFtZXNwYWNlKSB7CisgICAgICAgICAgICBuZXdOYW1lc3BhY2UgPSBuZXcg
SGFzaFNldDxQYWdlKj47CisgICAgICAgICAgICBmcmFtZU5hbWVzcGFjZXMtPmFkZChuYW1lLCBu
ZXdOYW1lc3BhY2UpOworICAgICAgICB9CisgICAgICAgIG5ld05hbWVzcGFjZS0+YWRkKHRoaXMp
OworICAgIH0KIH0KKworY29uc3QgSGFzaFNldDxQYWdlKj4qIFBhZ2U6OmZyYW1lTmFtZXNwYWNl
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gKGZyYW1lTmFtZXNwYWNlcyAmJiAhbV9ncm91cE5hbWUu
aXNFbXB0eSgpKSA/IGZyYW1lTmFtZXNwYWNlcy0+Z2V0KG1fZ3JvdXBOYW1lKSA6IDA7Cit9CisK
K2NvbnN0IEhhc2hTZXQ8UGFnZSo+KiBQYWdlOjpmcmFtZU5hbWVzcGFjZShjb25zdCBTdHJpbmcm
IGdyb3VwTmFtZSkKK3sKKyAgICByZXR1cm4gKGZyYW1lTmFtZXNwYWNlcyAmJiAhZ3JvdXBOYW1l
LmlzRW1wdHkoKSkgPyBmcmFtZU5hbWVzcGFjZXMtPmdldChncm91cE5hbWUpIDogMDsKK30KKwor
fQpJbmRleDogV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvRHVtcFJlbmRlclRyZWUubQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9EdW1wUmVuZGVyVHJlZS5tCShy
ZXZpc2lvbiAxMzI0NCkKKysrIFdlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL0R1bXBSZW5kZXJU
cmVlLm0JKHdvcmtpbmcgY29weSkKQEAgLTIyOSw2ICsyMjksNyBAQAogICAgIFtwcmVmZXJlbmNl
cyBzZXREZWZhdWx0Rml4ZWRGb250U2l6ZToxM107CiAgICAgW3ByZWZlcmVuY2VzIHNldE1pbmlt
dW1Gb250U2l6ZTo5XTsKICAgICBbcHJlZmVyZW5jZXMgc2V0SmF2YUVuYWJsZWQ6Tk9dOworICAg
IFtwcmVmZXJlbmNlcyBzZXRKYXZhU2NyaXB0Q2FuT3BlbldpbmRvd3NBdXRvbWF0aWNhbGx5Ok5P
XTsKIAogICAgIGludCBvcHRpb247CiAgICAgd2hpbGUgKChvcHRpb24gPSBnZXRvcHRfbG9uZyhh
cmdjLCAoY2hhciAqIGNvbnN0ICopYXJndiwgIiIsIG9wdGlvbnMsIE5VTEwpKSAhPSAtMSkK
</data>
<flag name="review"
          id="1809"
          type_id="1"
          status="+"
          setter="ggaren"
    />
          </attachment>
      

    </bug>

</bugzilla>