<?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>54853</bug_id>
          
          <creation_ts>2011-02-20 23:00:36 -0800</creation_ts>
          <short_desc>Move TextControlInnerElements from WebCore/rendering to WebCore/html/shadow</short_desc>
          <delta_ts>2012-04-21 17:58:04 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>DOM</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>54934</dependson>
          <blocked>54179</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Roland Steiner">rolandsteiner</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>buildbot</cc>
    
    <cc>dglazkov</cc>
    
    <cc>tkent</cc>
    
    <cc>webkit-ews</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>354429</commentid>
    <comment_count>0</comment_count>
    <who name="Roland Steiner">rolandsteiner</who>
    <bug_when>2011-02-20 23:00:36 -0800</bug_when>
    <thetext>Move the source files TextControlInnerElements.cpp/.h containing shadow DOM code for &lt;input&gt; elements from WebCore/rendering to WebCore/html/shadow as a first step in the larger refactoring of moving &lt;input&gt; to use the new shadow DOM approach.

(cf. https://bugs.webkit.org/show_bug.cgi?id=54179 et al)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>354432</commentid>
    <comment_count>1</comment_count>
      <attachid>83132</attachid>
    <who name="Roland Steiner">rolandsteiner</who>
    <bug_when>2011-02-20 23:11:37 -0800</bug_when>
    <thetext>Created attachment 83132
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>354433</commentid>
    <comment_count>2</comment_count>
      <attachid>83133</attachid>
    <who name="Roland Steiner">rolandsteiner</who>
    <bug_when>2011-02-20 23:14:10 -0800</bug_when>
    <thetext>Created attachment 83133
patch - including moved files

Iiiinteresting - webkit-patch seems to have troubles with renamed/moved files. Uploading the full patch manually.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>354434</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-02-20 23:15:48 -0800</bug_when>
    <thetext>Attachment 83132 did not build on chromium:
Build output: http://queues.webkit.org/results/7939695</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>354437</commentid>
    <comment_count>4</comment_count>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2011-02-20 23:23:55 -0800</bug_when>
    <thetext>Attachment 83132 did not build on qt:
Build output: http://queues.webkit.org/results/7940593</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>354442</commentid>
    <comment_count>5</comment_count>
      <attachid>83133</attachid>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2011-02-21 00:08:24 -0800</bug_when>
    <thetext>Comment on attachment 83133
patch - including moved files

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

The patch will lose svn revision history.
Please make a patch in svn checkout.

&gt; Source/WebCore/WebCore.xcodeproj/project.pbxproj:22479
&gt; +				14C0BC651312432C0030E8AB /* TextControlInnerElements.h in Headers */,

The file list should be sorted.
It&apos;s ok to run sort-Xcode-project-file after you commit this patch.

&gt; Source/WebCore/WebCore.xcodeproj/project.pbxproj:25168
&gt; +				14C0BC641312432C0030E8AB /* TextControlInnerElements.cpp in Sources */,

ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>354450</commentid>
    <comment_count>6</comment_count>
    <who name="Roland Steiner">rolandsteiner</who>
    <bug_when>2011-02-21 00:53:48 -0800</bug_when>
    <thetext>Note: Except for moving I left the file and class names as-is, in order to minimize changes. However, I wonder if &apos;InputInnerElements&apos; (or some such) wouldn&apos;t be a nice&apos;n&apos;shorter name.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>355069</commentid>
    <comment_count>7</comment_count>
      <attachid>83274</attachid>
    <who name="Roland Steiner">rolandsteiner</who>
    <bug_when>2011-02-21 22:41:55 -0800</bug_when>
    <thetext>Created attachment 83274
patch, from SVN checkout</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>355075</commentid>
    <comment_count>8</comment_count>
      <attachid>83274</attachid>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2011-02-21 22:53:41 -0800</bug_when>
    <thetext>Comment on attachment 83274
patch, from SVN checkout

&gt;Index: Source/WebCore/html/shadow/TextControlInnerElements.cpp
&gt;===================================================================
&gt;--- Source/WebCore/html/shadow/TextControlInnerElements.cpp	(revision 79274)	(from Source/WebCore/rendering/TextControlInnerElements.cpp:79274)
&gt;+++ Source/WebCore/html/shadow/TextControlInnerElements.cpp	(working copy)
&gt;@@ -0,0 +1,535 @@

Did you run &quot;svn mv&quot;?
The patch seems still wrong. If you operate correctly, this should be a diff from rendering/TextControlInnerElements.cpp to shadow/TextControlInnerElements.cpp.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>355076</commentid>
    <comment_count>9</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2011-02-21 23:03:23 -0800</bug_when>
    <thetext>Attachment 83274 did not build on win:
Build output: http://queues.webkit.org/results/7948033</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>355120</commentid>
    <comment_count>10</comment_count>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2011-02-22 01:25:38 -0800</bug_when>
    <thetext>(In reply to comment #8)
&gt; (From update of attachment 83274 [details])
&gt; &gt;Index: Source/WebCore/html/shadow/TextControlInnerElements.cpp
&gt; &gt;===================================================================
&gt; &gt;--- Source/WebCore/html/shadow/TextControlInnerElements.cpp	(revision 79274)	(from Source/WebCore/rendering/TextControlInnerElements.cpp:79274)
&gt; &gt;+++ Source/WebCore/html/shadow/TextControlInnerElements.cpp	(working copy)
&gt; &gt;@@ -0,0 +1,535 @@
&gt; 
&gt; Did you run &quot;svn mv&quot;?
&gt; The patch seems still wrong. If you operate correctly, this should be a diff from rendering/TextControlInnerElements.cpp to shadow/TextControlInnerElements.cpp.

I&apos;m sorry, I was wrong.  This block contains &quot;(from Source/WebCore/rendering/TextControlInnerElements.cpp)&quot;.  So it&apos;s ok.

Anyway, this patch has a problem on WebCore.vcproj.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>355122</commentid>
    <comment_count>11</comment_count>
      <attachid>83284</attachid>
    <who name="Roland Steiner">rolandsteiner</who>
    <bug_when>2011-02-22 01:33:23 -0800</bug_when>
    <thetext>Created attachment 83284
patch, SVN, fixes

Fixed Win. Also removed headers again from WebCore.pro to see if that pacifies the Qt buildbot (but interestingly it didn&apos;t seem fazed with the manual patch...)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>355134</commentid>
    <comment_count>12</comment_count>
      <attachid>83284</attachid>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2011-02-22 01:45:38 -0800</bug_when>
    <thetext>Comment on attachment 83284
patch, SVN, fixes

ok</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>359729</commentid>
    <comment_count>13</comment_count>
    <who name="Roland Steiner">rolandsteiner</who>
    <bug_when>2011-03-01 00:49:11 -0800</bug_when>
    <thetext>Committed r79978: &lt;http://trac.webkit.org/changeset/79978&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>607299</commentid>
    <comment_count>14</comment_count>
      <attachid>83284</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-04-21 17:58:04 -0700</bug_when>
    <thetext>Comment on attachment 83284
patch, SVN, fixes

Clearing cq?</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>83132</attachid>
            <date>2011-02-20 23:11:37 -0800</date>
            <delta_ts>2011-02-20 23:14:10 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-54853-20110221161135.patch</filename>
            <type>text/plain</type>
            <size>21805</size>
            <attacher name="Roland Steiner">rolandsteiner</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogNzkxNjQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0Fu
ZHJvaWQubWsgYi9Tb3VyY2UvV2ViQ29yZS9BbmRyb2lkLm1rCmluZGV4IDljZDMwMjJjNTA4YjYx
ZTYxMGVlMTM5YzcxOGI5MzVmYWQ2NDg5Y2UuLjZmM2ZjZDQ5NWNmY2YzNzc4NWMxNzFiMTYwY2M4
ZTQzMTNiMTBiYzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0FuZHJvaWQubWsKKysrIGIv
U291cmNlL1dlYkNvcmUvQW5kcm9pZC5tawpAQCAtMzUxLDYgKzM1MSw3IEBAIExPQ0FMX1NSQ19G
SUxFUyA6PSAkKExPQ0FMX1NSQ19GSUxFUykgXAogCVwKIAlodG1sL3NoYWRvdy9NZWRpYUNvbnRy
b2xzLmNwcCBcCiAJaHRtbC9zaGFkb3cvU2xpZGVyVGh1bWJFbGVtZW50LmNwcCBcCisgICAgaHRt
bC9zaGFkb3cvVGV4dENvbnRyb2xJbm5lckVsZW1lbnRzLmNwcCBcCiAJXAogCWxvYWRlci9jYWNo
ZS9DYWNoZWRDU1NTdHlsZVNoZWV0LmNwcCBcCiAJbG9hZGVyL2NhY2hlL0NhY2hlZEZvbnQuY3Bw
IFwKQEAgLTc4Myw3ICs3ODQsNiBAQCBMT0NBTF9TUkNfRklMRVMgOj0gJChMT0NBTF9TUkNfRklM
RVMpIFwKIAogTE9DQUxfU1JDX0ZJTEVTIDo9ICQoTE9DQUxfU1JDX0ZJTEVTKSBcCiAJcmVuZGVy
aW5nL1Njcm9sbEJlaGF2aW9yLmNwcCBcCi0JcmVuZGVyaW5nL1RleHRDb250cm9sSW5uZXJFbGVt
ZW50cy5jcHAgXAogCXJlbmRlcmluZy9UcmFuc2Zvcm1TdGF0ZS5jcHAgXAogCXJlbmRlcmluZy9i
cmVha19saW5lcy5jcHAgXAogCVwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxv
ZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA2YWQzMmQ0ZThhMzIzMTg0ZjU5ZjQx
OGMzOWUwOGJmZjlmYWQyZTNmLi40YTliOGRkYjUxZmI0YTkzNzhlZTAxZjU2YWE3OTQ3NzU0ZDhm
NDg5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dl
YkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNzAgQEAKKzIwMTEtMDItMjAgIFJvbGFuZCBTdGVp
bmVyICA8cm9sYW5kc3RlaW5lckBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQnVnIDU0ODUzIC0gTW92ZSBUZXh0Q29udHJvbElu
bmVyRWxlbWVudHMgZnJvbSBXZWJDb3JlL3JlbmRlcmluZyB0byBXZWJDb3JlL2h0bWwvc2hhZG93
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01NDg1Mwor
ICAgICAgICAKKyAgICAgICAgTW92aW5nIHRoZSBmaWxlcyBmcm9tIHJlbmRlcmluZyB0byBodG1s
L3NoYWRvdywgd2l0aCB0aGUgZXhjZXB0aW9uIG9mCisgICAgICAgIHRoZSBjbGFzcyBSZW5kZXJU
ZXh0Q29udHJvbElubmVyQmxvY2ssIHdoaWNoIEkgbW92ZWQgdG8gUmVuZGVyVGV4dENvbnRyb2xT
aW5nbGVMaW5lCisgICAgICAgICh0aGlzIHBsYWNlIGlzIG5vdCBpZGVhbCwgYnV0IG9ubHkgYSB0
ZW1wb3Jhcnkgc3RhdGUgZHVyaW5nIHRoZSBsYXJnZXIgcmVmYWN0b3JpbmcKKyAgICAgICAgZm9y
IDxucHV0PikuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLiAocmVmYWN0b3JpbmcpCisKKyAgICAg
ICAgKiBBbmRyb2lkLm1rOgorICAgICAgICAqIEdOVW1ha2VmaWxlLmFtOgorICAgICAgICAqIFdl
YkNvcmUuZ3lwaToKKyAgICAgICAgKiBXZWJDb3JlLnBybzoKKyAgICAgICAgKiBXZWJDb3JlLnZj
cHJvai9XZWJDb3JlLnZjcHJvajoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2o6CisgICAgICAgICogaHRtbC9zaGFkb3cvVGV4dENvbnRyb2xJbm5lckVsZW1lbnRz
LmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0Q29udHJvbElu
bmVyRWxlbWVudHMuY3BwLgorICAgICAgICAoV2ViQ29yZTo6VGV4dENvbnRyb2xJbm5lckVsZW1l
bnQ6OlRleHRDb250cm9sSW5uZXJFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRDb250
cm9sSW5uZXJFbGVtZW50OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dENvbnRyb2xJ
bm5lckVsZW1lbnQ6OmF0dGFjaElubmVyRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0
Q29udHJvbElubmVyRWxlbWVudDo6ZGV0YWNoKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRDb250
cm9sSW5uZXJUZXh0RWxlbWVudDo6VGV4dENvbnRyb2xJbm5lclRleHRFbGVtZW50KToKKyAgICAg
ICAgKFdlYkNvcmU6OlRleHRDb250cm9sSW5uZXJUZXh0RWxlbWVudDo6Y3JlYXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlRleHRDb250cm9sSW5uZXJUZXh0RWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFu
ZGxlcik6CisgICAgICAgIChXZWJDb3JlOjpUZXh0Q29udHJvbElubmVyVGV4dEVsZW1lbnQ6OmNy
ZWF0ZVJlbmRlcmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlNlYXJjaEZpZWxkUmVzdWx0c0J1dHRv
bkVsZW1lbnQ6OlNlYXJjaEZpZWxkUmVzdWx0c0J1dHRvbkVsZW1lbnQpOgorICAgICAgICAoV2Vi
Q29yZTo6U2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uRWxlbWVudDo6Y3JlYXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OlNlYXJjaEZpZWxkUmVzdWx0c0J1dHRvbkVsZW1lbnQ6OmRlZmF1bHRFdmVudEhh
bmRsZXIpOgorICAgICAgICAoV2ViQ29yZTo6U2VhcmNoRmllbGRDYW5jZWxCdXR0b25FbGVtZW50
OjpTZWFyY2hGaWVsZENhbmNlbEJ1dHRvbkVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U2Vh
cmNoRmllbGRDYW5jZWxCdXR0b25FbGVtZW50OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6
U2VhcmNoRmllbGRDYW5jZWxCdXR0b25FbGVtZW50OjpkZXRhY2gpOgorICAgICAgICAoV2ViQ29y
ZTo6U2VhcmNoRmllbGRDYW5jZWxCdXR0b25FbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKToK
KyAgICAgICAgKFdlYkNvcmU6OlNwaW5CdXR0b25FbGVtZW50OjpTcGluQnV0dG9uRWxlbWVudCk6
CisgICAgICAgIChXZWJDb3JlOjpTcGluQnV0dG9uRWxlbWVudDo6Y3JlYXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OlNwaW5CdXR0b25FbGVtZW50OjpkZXRhY2gpOgorICAgICAgICAoV2ViQ29yZTo6
U3BpbkJ1dHRvbkVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6U3BpbkJ1dHRvbkVsZW1lbnQ6OnN0YXJ0UmVwZWF0aW5nVGltZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6U3BpbkJ1dHRvbkVsZW1lbnQ6OnN0b3BSZXBlYXRpbmdUaW1lcik6CisgICAgICAgIChX
ZWJDb3JlOjpTcGluQnV0dG9uRWxlbWVudDo6cmVwZWF0aW5nVGltZXJGaXJlZCk6CisgICAgICAg
IChXZWJDb3JlOjpTcGluQnV0dG9uRWxlbWVudDo6c2V0SG92ZXJlZCk6CisgICAgICAgIChXZWJD
b3JlOjpJbnB1dEZpZWxkU3BlZWNoQnV0dG9uRWxlbWVudDo6SW5wdXRGaWVsZFNwZWVjaEJ1dHRv
bkVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6SW5wdXRGaWVsZFNwZWVjaEJ1dHRvbkVsZW1l
bnQ6On5JbnB1dEZpZWxkU3BlZWNoQnV0dG9uRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpJ
bnB1dEZpZWxkU3BlZWNoQnV0dG9uRWxlbWVudDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6
OklucHV0RmllbGRTcGVlY2hCdXR0b25FbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OklucHV0RmllbGRTcGVlY2hCdXR0b25FbGVtZW50OjpzZXRTdGF0ZSk6
CisgICAgICAgIChXZWJDb3JlOjpJbnB1dEZpZWxkU3BlZWNoQnV0dG9uRWxlbWVudDo6c3BlZWNo
SW5wdXQpOgorICAgICAgICAoV2ViQ29yZTo6SW5wdXRGaWVsZFNwZWVjaEJ1dHRvbkVsZW1lbnQ6
OmRpZENvbXBsZXRlUmVjb3JkaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OklucHV0RmllbGRTcGVl
Y2hCdXR0b25FbGVtZW50OjpkaWRDb21wbGV0ZVJlY29nbml0aW9uKToKKyAgICAgICAgKFdlYkNv
cmU6OklucHV0RmllbGRTcGVlY2hCdXR0b25FbGVtZW50OjpzZXRSZWNvZ25pdGlvblJlc3VsdCk6
CisgICAgICAgIChXZWJDb3JlOjpJbnB1dEZpZWxkU3BlZWNoQnV0dG9uRWxlbWVudDo6ZGV0YWNo
KToKKyAgICAgICAgKiBodG1sL3NoYWRvdy9UZXh0Q29udHJvbElubmVyRWxlbWVudHMuaDogUmVu
YW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0Q29udHJvbElubmVyRWxlbWVu
dHMuaC4KKyAgICAgICAgKFdlYkNvcmU6OlRleHRDb250cm9sSW5uZXJFbGVtZW50Ojppc01vdXNl
Rm9jdXNhYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OlNwaW5CdXR0b25FbGVtZW50Ojp1cERvd25T
dGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTcGluQnV0dG9uRWxlbWVudDo6aXNTcGluQnV0dG9u
RWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTcGluQnV0dG9uRWxlbWVudDo6aXNFbmFibGVk
Rm9ybUNvbnRyb2wpOgorICAgICAgICAoV2ViQ29yZTo6U3BpbkJ1dHRvbkVsZW1lbnQ6OmlzUmVh
ZE9ubHlGb3JtQ29udHJvbCk6CisgICAgICAgIChXZWJDb3JlOjpJbnB1dEZpZWxkU3BlZWNoQnV0
dG9uRWxlbWVudDo6c3RhdGUpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJv
bFNpbmdsZUxpbmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dENvbnRyb2xJbm5l
ckJsb2NrOjpwb3NpdGlvbkZvclBvaW50KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGV4
dENvbnRyb2xTaW5nbGVMaW5lLmg6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0Q29udHJv
bElubmVyQmxvY2s6OlJlbmRlclRleHRDb250cm9sSW5uZXJCbG9jayk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJUZXh0Q29udHJvbElubmVyQmxvY2s6Omhhc0xpbmVJZkVtcHR5KToKKwogMjAx
MS0wMi0yMCAgQWxleGV5IFByb3NrdXJ5YWtvdiAgPGFwQGFwcGxlLmNvbT4KIAogICAgICAgICBS
ZXZpZXdlZCBieSBFcmljIFNlaWRlbC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0dOVW1h
a2VmaWxlLmFtIGIvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0KaW5kZXggMjVlN2Y4NWY2
ODZiMGQ4ZTJhM2NmMmU0OTJmNTlhMzZhZTNjZTFlMC4uOGFiYTkyMjU1YTY0NTJmMGQ0NzM3ODYz
OTY3MTllYjA4NmUwNjRiOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUu
YW0KKysrIGIvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0KQEAgLTE4ODcsOSArMTg4Nywx
MSBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL1hT
U0ZpbHRlci5oIFwKIAlTb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xzLmNw
cCBcCiAJU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvTWVkaWFDb250cm9scy5oIFwKKwlTb3Vy
Y2UvV2ViQ29yZS9odG1sL3NoYWRvdy9Qcm9ncmVzc0JhclZhbHVlRWxlbWVudC5oIFwKIAlTb3Vy
Y2UvV2ViQ29yZS9odG1sL3NoYWRvdy9TbGlkZXJUaHVtYkVsZW1lbnQuY3BwIFwKIAlTb3VyY2Uv
V2ViQ29yZS9odG1sL3NoYWRvdy9TbGlkZXJUaHVtYkVsZW1lbnQuaCBcCi0JU291cmNlL1dlYkNv
cmUvaHRtbC9zaGFkb3cvUHJvZ3Jlc3NCYXJWYWx1ZUVsZW1lbnQuaCBcCisJU291cmNlL1dlYkNv
cmUvaHRtbC9zaGFkb3cvVGV4dENvbnRyb2xJbm5lckVsZW1lbnRzLmNwcCBcCisJU291cmNlL1dl
YkNvcmUvaHRtbC9zaGFkb3cvVGV4dENvbnRyb2xJbm5lckVsZW1lbnRzLmggXAogCVNvdXJjZS9X
ZWJDb3JlL2h0bWwvUGFzc3dvcmRJbnB1dFR5cGUuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9odG1s
L1Bhc3N3b3JkSW5wdXRUeXBlLmggXAogCVNvdXJjZS9XZWJDb3JlL2h0bWwvUGx1Z2luRG9jdW1l
bnQuY3BwIFwKQEAgLTMwNjcsOCArMzA2OSw2IEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0UXVlcnkuY3BwIFwKIAlTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRRdWVyeS5oIFwKIAlTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvVGFibGVMYXlvdXQuaCBcCi0JU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1RleHRDb250
cm9sSW5uZXJFbGVtZW50cy5jcHAgXAotCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0Q29u
dHJvbElubmVyRWxlbWVudHMuaCBcCiAJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1RyYWlsaW5n
RmxvYXRzUm9vdElubGluZUJveC5oIFwKIAlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvVHJhbnNm
b3JtU3RhdGUuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvVHJhbnNmb3JtU3RhdGUu
aCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9Tb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLmd5cGkKaW5kZXggMzM0NzNiNDIxOTY1MDUyN2JiOGExZGE3MDNmYjEzZGIy
YTA1NWY3Ny4uNzA1NDExM2E5ZDA3NmE2OGYzODZiOGFmZGNiMjIwYTQzMDczYWVmZiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dl
YkNvcmUuZ3lwaQpAQCAtMjAyMSw2ICsyMDIxLDggQEAKICAgICAgICAgICAgICdodG1sL3NoYWRv
dy9Qcm9ncmVzc0JhclZhbHVlRWxlbWVudC5oJywKICAgICAgICAgICAgICdodG1sL3NoYWRvdy9T
bGlkZXJUaHVtYkVsZW1lbnQuY3BwJywKICAgICAgICAgICAgICdodG1sL3NoYWRvdy9TbGlkZXJU
aHVtYkVsZW1lbnQuaCcsCisgICAgICAgICAgICAnaHRtbC9zaGFkb3cvVGV4dENvbnRyb2xJbm5l
ckVsZW1lbnRzLmNwcCcsCisgICAgICAgICAgICAnaHRtbC9zaGFkb3cvVGV4dENvbnRyb2xJbm5l
ckVsZW1lbnRzLmgnLAogICAgICAgICAgICAgJ2luc3BlY3Rvci9Db25zb2xlTWVzc2FnZS5jcHAn
LAogICAgICAgICAgICAgJ2luc3BlY3Rvci9Db25zb2xlTWVzc2FnZS5oJywKICAgICAgICAgICAg
ICdpbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHQuY3BwJywKQEAgLTQwMjIsOCArNDAyNCw2IEBACiAg
ICAgICAgICAgICAncmVuZGVyaW5nL1NoYWRvd0VsZW1lbnQuY3BwJywKICAgICAgICAgICAgICdy
ZW5kZXJpbmcvU2hhZG93RWxlbWVudC5oJywKICAgICAgICAgICAgICdyZW5kZXJpbmcvVGFibGVM
YXlvdXQuaCcsCi0gICAgICAgICAgICAncmVuZGVyaW5nL1RleHRDb250cm9sSW5uZXJFbGVtZW50
cy5jcHAnLAotICAgICAgICAgICAgJ3JlbmRlcmluZy9UZXh0Q29udHJvbElubmVyRWxlbWVudHMu
aCcsCiAgICAgICAgICAgICAncmVuZGVyaW5nL1RyYW5zZm9ybVN0YXRlLmNwcCcsCiAgICAgICAg
ICAgICAncmVuZGVyaW5nL1RyYW5zZm9ybVN0YXRlLmgnLAogICAgICAgICAgICAgJ3JlbmRlcmlu
Zy9icmVha19saW5lcy5jcHAnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5w
cm8gYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnBybwppbmRleCA4YTI1MDRiZDc5ODI3MGZiYWFk
NDk2Yzk4ZDkwY2M2ODNlYjlmMGFmLi5hZGRjNjhiZjUwMWQwNGY2MTNlMmFjZjE2ZmMxZmM0ZTJh
NTQ4ODhkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnBybworKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLnBybwpAQCAtOTMxLDYgKzkzMSw3IEBAIFNPVVJDRVMgKz0gXAog
ICAgIGh0bWwvcGFyc2VyL1hTU0ZpbHRlci5jcHAgXAogICAgIGh0bWwvc2hhZG93L01lZGlhQ29u
dHJvbHMuY3BwIFwKICAgICBodG1sL3NoYWRvdy9TbGlkZXJUaHVtYkVsZW1lbnQuY3BwIFwKKyAg
ICBodG1sL3NoYWRvdy9UZXh0Q29udHJvbElubmVyRWxlbWVudHMuY3BwIFwKICAgICBpbnNwZWN0
b3IvQ29uc29sZU1lc3NhZ2UuY3BwIFwKICAgICBpbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHQuY3Bw
IFwKICAgICBpbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRIb3N0LmNwcCBcCkBAIC0xMjYwLDcgKzEy
NjEsNiBAQCBTT1VSQ0VTICs9IFwKICAgICByZW5kZXJpbmcvUm9vdElubGluZUJveC5jcHAgXAog
ICAgIHJlbmRlcmluZy9TY3JvbGxCZWhhdmlvci5jcHAgXAogICAgIHJlbmRlcmluZy9TaGFkb3dF
bGVtZW50LmNwcCBcCi0gICAgcmVuZGVyaW5nL1RleHRDb250cm9sSW5uZXJFbGVtZW50cy5jcHAg
XAogICAgIHJlbmRlcmluZy9UcmFuc2Zvcm1TdGF0ZS5jcHAgXAogICAgIHJlbmRlcmluZy9zdHls
ZS9Db250ZW50RGF0YS5jcHAgXAogICAgIHJlbmRlcmluZy9zdHlsZS9Db3VudGVyRGlyZWN0aXZl
cy5jcHAgXApAQCAtMTcxNyw2ICsxNzE3LDcgQEAgSEVBREVSUyArPSBcCiAgICAgaHRtbC9jYW52
YXMvVWludDE2QXJyYXkuaCBcCiAgICAgaHRtbC9jYW52YXMvVWludDMyQXJyYXkuaCBcCiAgICAg
aHRtbC9jYW52YXMvVWludDhBcnJheS5oIFwKKyAgICBodG1sL3NoYWRvdy9UZXh0Q29udHJvbElu
bmVyRWxlbWVudHMuaCBcCiAgICAgaHRtbC9DbGFzc0xpc3QuaCBcCiAgICAgaHRtbC9Db2xsZWN0
aW9uQ2FjaGUuaCBcCiAgICAgaHRtbC9EYXRhR3JpZENvbHVtbi5oIFwKQEAgLTIzMjYsNyArMjMy
Nyw2IEBAIEhFQURFUlMgKz0gXAogICAgIHJlbmRlcmluZy9zdmcvU1ZHVGV4dExheW91dEVuZ2lu
ZVNwYWNpbmcuaCBcCiAgICAgcmVuZGVyaW5nL3N2Zy9TVkdUZXh0TWV0cmljcy5oIFwKICAgICBy
ZW5kZXJpbmcvc3ZnL1NWR1RleHRRdWVyeS5oIFwKLSAgICByZW5kZXJpbmcvVGV4dENvbnRyb2xJ
bm5lckVsZW1lbnRzLmggXAogICAgIHJlbmRlcmluZy9UcmFuc2Zvcm1TdGF0ZS5oIFwKICAgICBz
dmcvYW5pbWF0aW9uL1NNSUxUaW1lQ29udGFpbmVyLmggXAogICAgIHN2Zy9hbmltYXRpb24vU01J
TFRpbWUuaCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJD
b3JlLnZjcHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9q
CmluZGV4IDU2OTEzNDE0ODRjOWQxMWU4MGFlMmM3ZTg2OGQxNDBkZGI5Yzc0MjYuLjBkYzdlMzE4
M2MzYjY3ZWM2MjhhMjY0MDdkNDRmYTE0ZWRlYTlkNTkgMTAwNzU1Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dl
YkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCkBAIC0zODQ4OCw2MiArMzg0ODgsNiBAQAogCQkJ
CT4KIAkJCTwvRmlsZT4KIAkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxyZW5kZXJpbmdc
VGV4dENvbnRyb2xJbm5lckVsZW1lbnRzLmNwcCIKLQkJCQk+Ci0JCQkJPEZpbGVDb25maWd1cmF0
aW9uCi0JCQkJCU5hbWU9IkRlYnVnfFdpbjMyIgotCQkJCQlFeGNsdWRlZEZyb21CdWlsZD0idHJ1
ZSIKLQkJCQkJPgotCQkJCQk8VG9vbAotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKLQkJ
CQkJLz4KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgotCQkJCTxGaWxlQ29uZmlndXJhdGlvbgot
CQkJCQlOYW1lPSJSZWxlYXNlfFdpbjMyIgotCQkJCQlFeGNsdWRlZEZyb21CdWlsZD0idHJ1ZSIK
LQkJCQkJPgotCQkJCQk8VG9vbAotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKLQkJCQkJ
Lz4KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgotCQkJCTxGaWxlQ29uZmlndXJhdGlvbgotCQkJ
CQlOYW1lPSJEZWJ1Z19DYWlyb19DRkxpdGV8V2luMzIiCi0JCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxk
PSJ0cnVlIgotCQkJCQk+Ci0JCQkJCTxUb29sCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29s
IgotCQkJCQkvPgotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+Ci0JCQkJPEZpbGVDb25maWd1cmF0
aW9uCi0JCQkJCU5hbWU9IlJlbGVhc2VfQ2Fpcm9fQ0ZMaXRlfFdpbjMyIgotCQkJCQlFeGNsdWRl
ZEZyb21CdWlsZD0idHJ1ZSIKLQkJCQkJPgotCQkJCQk8VG9vbAotCQkJCQkJTmFtZT0iVkNDTENv
bXBpbGVyVG9vbCIKLQkJCQkJLz4KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgotCQkJCTxGaWxl
Q29uZmlndXJhdGlvbgotCQkJCQlOYW1lPSJEZWJ1Z19BbGx8V2luMzIiCi0JCQkJCUV4Y2x1ZGVk
RnJvbUJ1aWxkPSJ0cnVlIgotCQkJCQk+Ci0JCQkJCTxUb29sCi0JCQkJCQlOYW1lPSJWQ0NMQ29t
cGlsZXJUb29sIgotCQkJCQkvPgotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+Ci0JCQkJPEZpbGVD
b25maWd1cmF0aW9uCi0JCQkJCU5hbWU9IlJlbGVhc2VfTFRDR3xXaW4zMiIKLQkJCQkJRXhjbHVk
ZWRGcm9tQnVpbGQ9InRydWUiCi0JCQkJCT4KLQkJCQkJPFRvb2wKLQkJCQkJCU5hbWU9IlZDQ0xD
b21waWxlclRvb2wiCi0JCQkJCS8+Ci0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KLQkJCTwvRmls
ZT4KLQkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxyZW5kZXJpbmdcVGV4dENvbnRyb2xJ
bm5lckVsZW1lbnRzLmgiCi0JCQkJPgotCQkJPC9GaWxlPgotCQkJPEZpbGUKIAkJCQlSZWxhdGl2
ZVBhdGg9Ii4uXHJlbmRlcmluZ1xUcmFpbGluZ0Zsb2F0c1Jvb3RJbmxpbmVCb3guaCIKIAkJCQk+
CiAJCQk8L0ZpbGU+CkBAIC01NTgwNCw2ICs1NTc0OCwxNCBAQAogCQkJCQlSZWxhdGl2ZVBhdGg9
Ii4uXGh0bWxcc2hhZG93XFNsaWRlclRodW1iRWxlbWVudC5oIgogCQkJCQk+CiAJCQkJPC9GaWxl
PgorICAgICAgICAgICAgICAgIDxGaWxlCisgICAgICAgICAgICAgICAgICAgIFJlbGF0aXZlUGF0
aD0iLi5caHRtbFxzaGFkb3dcVGV4dENvbnRyb2xJbm5lckVsZW1lbnRzLmNwcCIKKyAgICAgICAg
ICAgICAgICAgICAgPgorICAgICAgICAgICAgICAgIDwvRmlsZT4KKyAgICAgICAgICAgICAgICA8
RmlsZQorICAgICAgICAgICAgICAgICAgICBSZWxhdGl2ZVBhdGg9Ii4uXGh0bWxcc2hhZG93XFRl
eHRDb250cm9sSW5uZXJFbGVtZW50cy5oIgorICAgICAgICAgICAgICAgICAgICA+CisgICAgICAg
ICAgICAgICAgPC9GaWxlPgogCQkJPC9GaWx0ZXI+CiAJCTwvRmlsdGVyPgogCQk8RmlsdGVyCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5k
ZXggYmNjNWQ5MDM5OWZjNGFmMWQxNWJlYzI0NTIyMzYxODMyYWI1ZmZhNi4uNDYxYzVhNDM2ODFk
MWU3ZDM4N2EwMWY5YTI3M2U0OGUyNjk2NzNlYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
V2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dl
YkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMzE5LDYgKzMxOSw4IEBACiAJCTE0
OTQ3RkZFMTJGODBDRDIwMEEwRjYzMSAvKiBEb2N1bWVudE9yZGVyZWRNYXAuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0OTQ3RkZDMTJGODBDRDIwMEEw
RjYzMSAvKiBEb2N1bWVudE9yZGVyZWRNYXAuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQkxNDk5M0JFNTBCMkYyQjFDMDA1MDQ5N0YgLyogRm9jdXND
b250cm9sbGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDE0OTkzQkUzMEIyRjJCMUMwMDUwNDk3RiAvKiBGb2N1c0NvbnRyb2xsZXIuY3BwICovOyB9
OwogCQkxNDk5M0JFNjBCMkYyQjFDMDA1MDQ5N0YgLyogRm9jdXNDb250cm9sbGVyLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDk5M0JFNDBCMkYyQjFD
MDA1MDQ5N0YgLyogRm9jdXNDb250cm9sbGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMTRDMEJDNjQxMzEyNDMyQzAwMzBFOEFCIC8qIFRleHRD
b250cm9sSW5uZXJFbGVtZW50cy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAxNEMwQkM2MjEzMTI0MzJDMDAzMEU4QUIgLyogVGV4dENvbnRyb2xJbm5l
ckVsZW1lbnRzLmNwcCAqLzsgfTsKKwkJMTRDMEJDNjUxMzEyNDMyQzAwMzBFOEFCIC8qIFRleHRD
b250cm9sSW5uZXJFbGVtZW50cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMTRDMEJDNjMxMzEyNDMyQzAwMzBFOEFCIC8qIFRleHRDb250cm9sSW5uZXJF
bGVtZW50cy5oICovOyB9OwogCQkxNEM5QTVFQTBCM0QxMDVGMDA1QTAyMzIgLyogU2V0dGluZ3Mu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTRDOUE1
RTkwQjNEMTA1RjAwNUEwMjMyIC8qIFNldHRpbmdzLmNwcCAqLzsgfTsKIAkJMTRDRDhEODIxMDZC
NTI5MDAwQTQ2RDIzIC8qIEpTU2hhcmVkV29ya2VyQ3VzdG9tLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0Q0Q4RDgxMTA2QjUyOTAwMEE0NkQyMyAv
KiBKU1NoYXJlZFdvcmtlckN1c3RvbS5jcHAgKi87IH07CiAJCTE0Q0Y3OEE0MDlGNThDQkYwMEVC
MzY2NSAvKiBKU0NTU1ZhbHVlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDE0Q0Y3OEEzMDlGNThDQkYwMEVCMzY2NSAvKiBKU0NTU1ZhbHVlLmNwcCAq
LzsgfTsKQEAgLTQwNTIsOCArNDA1NCw2IEBACiAJCUFBMjFFQ0NEMEFCRjBGQzYwMDJCODM0QyAv
KiBDU1NDdXJzb3JJbWFnZVZhbHVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBBQTA5NzhFRTBBQkFBNkUxMDA4NzQ0ODAgLyogQ1NTQ3Vyc29ySW1hZ2VW
YWx1ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CUFBNEMzQTc2MEIyQjE2NzkwMDIzMzRBMiAvKiBTdHlsZUVsZW1lbnQuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQUE0QzNBNzQwQjJCMTY3OTAwMjMz
NEEyIC8qIFN0eWxlRWxlbWVudC5jcHAgKi87IH07CiAJCUFBNEMzQTc3MEIyQjE2NzkwMDIzMzRB
MiAvKiBTdHlsZUVsZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEFBNEMzQTc1MEIyQjE2NzkwMDIzMzRBMiAvKiBTdHlsZUVsZW1lbnQuaCAqLzsg
fTsKLQkJQUIwMTRERTMwRTY4OUE0MzAwRTEwNDQ1IC8qIFRleHRDb250cm9sSW5uZXJFbGVtZW50
cy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBQjAx
NERFMTBFNjg5QTQzMDBFMTA0NDUgLyogVGV4dENvbnRyb2xJbm5lckVsZW1lbnRzLmNwcCAqLzsg
fTsKLQkJQUIwMTRERTQwRTY4OUE0MzAwRTEwNDQ1IC8qIFRleHRDb250cm9sSW5uZXJFbGVtZW50
cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQUIwMTRE
RTIwRTY4OUE0MzAwRTEwNDQ1IC8qIFRleHRDb250cm9sSW5uZXJFbGVtZW50cy5oICovOyB9Owog
CQlBQjIzQTMyNzA5QkJBN0QwMDA2N0NDNTMgLyogQmVmb3JlVGV4dEluc2VydGVkRXZlbnQuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQUIyM0EzMjUw
OUJCQTdEMDAwNjdDQzUzIC8qIEJlZm9yZVRleHRJbnNlcnRlZEV2ZW50LmNwcCAqLzsgfTsKIAkJ
QUIyM0EzMjgwOUJCQTdEMDAwNjdDQzUzIC8qIEJlZm9yZVRleHRJbnNlcnRlZEV2ZW50LmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBQjIzQTMyNjA5QkJB
N0QwMDA2N0NDNTMgLyogQmVmb3JlVGV4dEluc2VydGVkRXZlbnQuaCAqLzsgfTsKIAkJQUIyNDdB
NkMwQUZENjM4MzAwM0ZBNUZEIC8qIFJlbmRlclNsaWRlci5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBQjI0N0E2QTBBRkQ2MzgzMDAzRkE1RkQgLyog
UmVuZGVyU2xpZGVyLmNwcCAqLzsgfTsKQEAgLTY2NDQsNiArNjY0NCw4IEBACiAJCTE0OTQ3RkZD
MTJGODBDRDIwMEEwRjYzMSAvKiBEb2N1bWVudE9yZGVyZWRNYXAuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gRG9jdW1lbnRPcmRlcmVkTWFwLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTE0OTkzQkUzMEIyRjJCMUMwMDUwNDk3RiAvKiBGb2N1c0NvbnRyb2xsZXIu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZvY3VzQ29udHJvbGxl
ci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0OTkzQkU0MEIyRjJCMUMwMDUw
NDk3RiAvKiBGb2N1c0NvbnRyb2xsZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEZvY3VzQ29udHJvbGxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxNEMw
QkM2MjEzMTI0MzJDMDAzMEU4QUIgLyogVGV4dENvbnRyb2xJbm5lckVsZW1lbnRzLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFRleHRDb250cm9sSW5uZXJFbGVtZW50
cy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTE0QzBCQzYzMTMxMjQzMkMwMDMw
RThBQiAvKiBUZXh0Q29udHJvbElubmVyRWxlbWVudHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gVGV4dENvbnRyb2xJbm5lckVsZW1lbnRzLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTE0QzlBNUU5MEIzRDEwNUYwMDVBMDIzMiAvKiBTZXR0aW5ncy5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2V0dGluZ3MuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkxNENEOEQ4MTEwNkI1MjkwMDBBNDZEMjMgLyogSlNTaGFy
ZWRXb3JrZXJDdXN0b20uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
SlNTaGFyZWRXb3JrZXJDdXN0b20uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkx
NENGNzg3MTA5RjU4N0NBMDBFQjM2NjUgLyogQ1NTVmFsdWUuaWRsICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7
IHBhdGggPSBDU1NWYWx1ZS5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMDIw
NSw4ICsxMDIwNyw2IEBACiAJCUFBMDk3OEVFMEFCQUE2RTEwMDg3NDQ4MCAvKiBDU1NDdXJzb3JJ
bWFnZVZhbHVlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
MzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDU1NDdXJzb3JJ
bWFnZVZhbHVlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUFBNEMzQTc0MEIyQjE2
NzkwMDIzMzRBMiAvKiBTdHlsZUVsZW1lbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IFN0eWxlRWxlbWVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUFBNEMzQTc1MEIyQjE2NzkwMDIzMzRBMiAvKiBTdHlsZUVsZW1lbnQuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0eWxlRWxlbWVudC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwotCQlBQjAxNERFMTBFNjg5QTQzMDBFMTA0NDUgLyogVGV4dENvbnRyb2xJbm5l
ckVsZW1lbnRzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFRleHRD
b250cm9sSW5uZXJFbGVtZW50cy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUFC
MDE0REUyMEU2ODlBNDMwMEUxMDQ0NSAvKiBUZXh0Q29udHJvbElubmVyRWxlbWVudHMuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVGV4dENvbnRyb2xJbm5lckVsZW1lbnRzLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUFCMjNBMzI1MDlCQkE3RDAwMDY3Q0M1MyAv
KiBCZWZvcmVUZXh0SW5zZXJ0ZWRFdmVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gQmVmb3JlVGV4dEluc2VydGVkRXZlbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlBQjIzQTMyNjA5QkJBN0QwMDA2N0NDNTMgLyogQmVmb3JlVGV4dEluc2Vy
dGVkRXZlbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAz
MDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJlZm9yZVRleHRJ
bnNlcnRlZEV2ZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUFCMjQ3QTZBMEFG
RDYzODMwMDNGQTVGRCAvKiBSZW5kZXJTbGlkZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IFJlbmRlclNsaWRlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CkBAIC0xMzIyMCw2ICsxMzIyMCw4IEBACiAJCQkJQTdGRTgxOUIxMkZBNjc3NzAwODUwQzFF
IC8qIFByb2dyZXNzQmFyVmFsdWVFbGVtZW50LmggKi8sCiAJCQkJNDE1MEY5RjAxMkI2RTBFNzAw
MDhDODYwIC8qIFNsaWRlclRodW1iRWxlbWVudC5jcHAgKi8sCiAJCQkJNDE1MEY5RUYxMkI2RTBF
NzAwMDhDODYwIC8qIFNsaWRlclRodW1iRWxlbWVudC5oICovLAorCQkJCTE0QzBCQzYyMTMxMjQz
MkMwMDMwRThBQiAvKiBUZXh0Q29udHJvbElubmVyRWxlbWVudHMuY3BwICovLAorCQkJCTE0QzBC
QzYzMTMxMjQzMkMwMDMwRThBQiAvKiBUZXh0Q29udHJvbElubmVyRWxlbWVudHMuaCAqLywKIAkJ
CSk7CiAJCQlwYXRoID0gc2hhZG93OwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKQEAgLTE4
ODkzLDggKzE4ODk1LDYgQEAKIAkJCQlBN0YzMzhBMTExQzBFRkNBMDBBMzIwQTcgLyogU2hhZG93
RWxlbWVudC5jcHAgKi8sCiAJCQkJQTdGMzM4QTIxMUMwRUZDQTAwQTMyMEE3IC8qIFNoYWRvd0Vs
ZW1lbnQuaCAqLywKIAkJCQlBOENGRjA0QzBBMTU0RjA5MDAwQTQyMzQgLyogVGFibGVMYXlvdXQu
aCAqLywKLQkJCQlBQjAxNERFMTBFNjg5QTQzMDBFMTA0NDUgLyogVGV4dENvbnRyb2xJbm5lckVs
ZW1lbnRzLmNwcCAqLywKLQkJCQlBQjAxNERFMjBFNjg5QTQzMDBFMTA0NDUgLyogVGV4dENvbnRy
b2xJbm5lckVsZW1lbnRzLmggKi8sCiAJCQkJMzdGQzk2REExMTA0RUQ3MTAwM0UxRkFEIC8qIFRy
YWlsaW5nRmxvYXRzUm9vdElubGluZUJveC5oICovLAogCQkJCTBGNTAwQUIwMEY1NERCMzEwMEVF
RjkyOCAvKiBUcmFuc2Zvcm1TdGF0ZS5jcHAgKi8sCiAJCQkJMEY1MDBBQUUwRjU0REIxQjAwRUVG
OTI4IC8qIFRyYW5zZm9ybVN0YXRlLmggKi8sCkBAIC0yMjI0MSw3ICsyMjI0MSw2IEBACiAJCQkJ
QjJBRkZDOUEwRDAwQTVERjAwMzAwNzREIC8qIFRleHRDb2RlY01hYy5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQjJDM0RBNDAwRDAwNkMxRDAwRUY2RjI2IC8qIFRleHRDb2RlY1VzZXJEZWZpbmVkLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlCMkMzREE0MjBEMDA2QzFEMDBFRjZGMjYgLyogVGV4dENvZGVj
VVRGMTYuaCBpbiBIZWFkZXJzICovLAotCQkJCUFCMDE0REU0MEU2ODlBNDMwMEUxMDQ0NSAvKiBU
ZXh0Q29udHJvbElubmVyRWxlbWVudHMuaCBpbiBIZWFkZXJzICovLAogCQkJCUIyQzNEQTQ1MEQw
MDZDMUQwMEVGNkYyNiAvKiBUZXh0RGlyZWN0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQk5N0JD
ODRCNDEyMzcxMTgwMDAwQzYxNjEgLyogVGV4dERvY3VtZW50LmggaW4gSGVhZGVycyAqLywKIAkJ
CQk5N0JDODQ4NDEyMzZGRDkzMDAwQzYxNjEgLyogVGV4dERvY3VtZW50UGFyc2VyLmggaW4gSGVh
ZGVycyAqLywKQEAgLTIyNDc3LDYgKzIyNDc2LDcgQEAKIAkJCQlCOERCREI0QzEzMEIwRjhBMDBG
NUNEQjEgLyogU2V0U2VsZWN0aW9uQ29tbWFuZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjhEQkRC
NEUxMzBCMEY4QTAwRjVDREIxIC8qIFNwZWxsaW5nQ29ycmVjdGlvbkNvbW1hbmQuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUQzRDRFOTczMTMwQzdDRkUwMDdCQTU0MCAvKiBIVE1MU3VtbWFyeUVsZW1l
bnQuaCBpbiBIZWFkZXJzICovLAorCQkJCTE0QzBCQzY1MTMxMjQzMkMwMDMwRThBQiAvKiBUZXh0
Q29udHJvbElubmVyRWxlbWVudHMuaCBpbiBIZWFkZXJzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlG
b3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpAQCAtMjQ5NjYsNyArMjQ5NjYs
NiBAQAogCQkJCUIyQUZGQzk5MEQwMEE1REYwMDMwMDc0RCAvKiBUZXh0Q29kZWNNYWMuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJQjJDM0RBM0YwRDAwNkMxRDAwRUY2RjI2IC8qIFRleHRDb2RlY1Vz
ZXJEZWZpbmVkLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUIyQzNEQTQxMEQwMDZDMUQwMEVGNkYy
NiAvKiBUZXh0Q29kZWNVVEYxNi5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlBQjAxNERFMzBFNjg5
QTQzMDBFMTA0NDUgLyogVGV4dENvbnRyb2xJbm5lckVsZW1lbnRzLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTk3QkM4NEIzMTIzNzExODAwMDBDNjE2MSAvKiBUZXh0RG9jdW1lbnQuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJOTdCQzg0ODMxMjM2RkQ5MzAwMEM2MTYxIC8qIFRleHREb2N1bWVudFBh
cnNlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCMkMzREE0NjBEMDA2QzFEMDBFRjZGMjYgLyog
VGV4dEVuY29kaW5nLmNwcCBpbiBTb3VyY2VzICovLApAQCAtMjUxNjYsNiArMjUxNjUsNyBAQAog
CQkJCUI4REJEQjRCMTMwQjBGOEEwMEY1Q0RCMSAvKiBTZXRTZWxlY3Rpb25Db21tYW5kLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCUI4REJEQjREMTMwQjBGOEEwMEY1Q0RCMSAvKiBTcGVsbGluZ0Nv
cnJlY3Rpb25Db21tYW5kLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUQzRDRFOTcyMTMwQzdDRkUw
MDdCQTU0MCAvKiBIVE1MU3VtbWFyeUVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMTRD
MEJDNjQxMzEyNDMyQzAwMzBFOEFCIC8qIFRleHRDb250cm9sSW5uZXJFbGVtZW50cy5jcHAgaW4g
U291cmNlcyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5n
ID0gMDsKIAkJfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJU
ZXh0Q29udHJvbFNpbmdsZUxpbmUuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clRleHRDb250cm9sU2luZ2xlTGluZS5jcHAKaW5kZXggNGVkMjU1ZTZjM2FhMWJlMDVmYThhMzBj
ZWRlNjE0ZjMyZWJlNTJiZS4uMjllNGFhMzcyNWM0NTE4M2QyNDdmZGM1ZDVhZmE2MGM1MmYwYjNh
NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9s
U2luZ2xlTGluZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRD
b250cm9sU2luZ2xlTGluZS5jcHAKQEAgLTUxLDYgKzUxLDIzIEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAogdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIAorVmlzaWJsZVBvc2l0aW9uIFJlbmRl
clRleHRDb250cm9sSW5uZXJCbG9jazo6cG9zaXRpb25Gb3JQb2ludChjb25zdCBJbnRQb2ludCYg
cG9pbnQpCit7CisgICAgSW50UG9pbnQgY29udGVudHNQb2ludChwb2ludCk7CisKKyAgICAvLyBN
dWx0aWxpbmUgdGV4dCBjb250cm9scyBoYXZlIHRoZSBzY3JvbGwgb24gc2hhZG93QW5jZXN0b3JO
b2RlLCBzbyB3ZSBuZWVkIHRvIHRha2UgdGhhdAorICAgIC8vIGludG8gYWNjb3VudCBoZXJlLgor
ICAgIGlmIChtX211bHRpTGluZSkgeworICAgICAgICBSZW5kZXJUZXh0Q29udHJvbCogcmVuZGVy
ZXIgPSB0b1JlbmRlclRleHRDb250cm9sKG5vZGUoKS0+c2hhZG93QW5jZXN0b3JOb2RlKCktPnJl
bmRlcmVyKCkpOworICAgICAgICBpZiAocmVuZGVyZXItPmhhc092ZXJmbG93Q2xpcCgpKQorICAg
ICAgICAgICAgY29udGVudHNQb2ludCArPSByZW5kZXJlci0+bGF5ZXIoKS0+c2Nyb2xsZWRDb250
ZW50T2Zmc2V0KCk7CisgICAgfQorCisgICAgcmV0dXJuIFJlbmRlckJsb2NrOjpwb3NpdGlvbkZv
clBvaW50KGNvbnRlbnRzUG9pbnQpOworfQorCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCiBS
ZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OlJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZShO
b2RlKiBub2RlLCBib29sIHBsYWNlaG9sZGVyVmlzaWJsZSkKICAgICA6IFJlbmRlclRleHRDb250
cm9sKG5vZGUsIHBsYWNlaG9sZGVyVmlzaWJsZSkKICAgICAsIG1fc2VhcmNoUG9wdXBJc1Zpc2li
bGUoZmFsc2UpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4
dENvbnRyb2xTaW5nbGVMaW5lLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4
dENvbnRyb2xTaW5nbGVMaW5lLmgKaW5kZXggNmI5OWY1OWNmOTU2YzQ1MDk4MTZiNjdhN2QxMzRi
ZTY4NzJiZGU1MS4uNzg1YWVlM2U5MjllODYyNjJjYzc5MTMzNTNlOTRjZDI3MTg0N2Q3NCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sU2luZ2xl
TGluZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbFNp
bmdsZUxpbmUuaApAQCAtMTc0LDYgKzE3NCwxOCBAQCBpbmxpbmUgUmVuZGVyVGV4dENvbnRyb2xT
aW5nbGVMaW5lKiB0b1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZShSZW5kZXJPYmplY3QqCiAv
LyBUaGlzIHdpbGwgY2F0Y2ggYW55b25lIGRvaW5nIGFuIHVubmVjZXNzYXJ5IGNhc3QuCiB2b2lk
IHRvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lKGNvbnN0IFJlbmRlclRleHRDb250cm9sU2lu
Z2xlTGluZSopOwogCisKK2NsYXNzIFJlbmRlclRleHRDb250cm9sSW5uZXJCbG9jayA6IHB1Ymxp
YyBSZW5kZXJCbG9jayB7CitwdWJsaWM6CisgICAgUmVuZGVyVGV4dENvbnRyb2xJbm5lckJsb2Nr
KE5vZGUqIG5vZGUsIGJvb2wgaXNNdWx0aUxpbmUpIDogUmVuZGVyQmxvY2sobm9kZSksIG1fbXVs
dGlMaW5lKGlzTXVsdGlMaW5lKSB7IH0KKworcHJpdmF0ZToKKyAgICB2aXJ0dWFsIGJvb2wgaGFz
TGluZUlmRW1wdHkoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CisgICAgdmlydHVhbCBWaXNpYmxl
UG9zaXRpb24gcG9zaXRpb25Gb3JQb2ludChjb25zdCBJbnRQb2ludCYpOworCisgICAgYm9vbCBt
X211bHRpTGluZTsKK307CisKIH0KIAogI2VuZGlmCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>83133</attachid>
            <date>2011-02-20 23:14:10 -0800</date>
            <delta_ts>2011-02-21 22:41:49 -0800</delta_ts>
            <desc>patch - including moved files</desc>
            <filename>54853.patch</filename>
            <type>text/plain</type>
            <size>71963</size>
            <attacher name="Roland Steiner">rolandsteiner</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0FuZHJvaWQubWsgYi9Tb3VyY2UvV2ViQ29yZS9B
bmRyb2lkLm1rCmluZGV4IDljZDMwMjIuLjZmM2ZjZDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL0FuZHJvaWQubWsKKysrIGIvU291cmNlL1dlYkNvcmUvQW5kcm9pZC5tawpAQCAtMzUxLDYg
KzM1MSw3IEBAIExPQ0FMX1NSQ19GSUxFUyA6PSAkKExPQ0FMX1NSQ19GSUxFUykgXAogCVwKIAlo
dG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xzLmNwcCBcCiAJaHRtbC9zaGFkb3cvU2xpZGVyVGh1bWJF
bGVtZW50LmNwcCBcCisgICAgaHRtbC9zaGFkb3cvVGV4dENvbnRyb2xJbm5lckVsZW1lbnRzLmNw
cCBcCiAJXAogCWxvYWRlci9jYWNoZS9DYWNoZWRDU1NTdHlsZVNoZWV0LmNwcCBcCiAJbG9hZGVy
L2NhY2hlL0NhY2hlZEZvbnQuY3BwIFwKQEAgLTc4Myw3ICs3ODQsNiBAQCBMT0NBTF9TUkNfRklM
RVMgOj0gJChMT0NBTF9TUkNfRklMRVMpIFwKIAogTE9DQUxfU1JDX0ZJTEVTIDo9ICQoTE9DQUxf
U1JDX0ZJTEVTKSBcCiAJcmVuZGVyaW5nL1Njcm9sbEJlaGF2aW9yLmNwcCBcCi0JcmVuZGVyaW5n
L1RleHRDb250cm9sSW5uZXJFbGVtZW50cy5jcHAgXAogCXJlbmRlcmluZy9UcmFuc2Zvcm1TdGF0
ZS5jcHAgXAogCXJlbmRlcmluZy9icmVha19saW5lcy5jcHAgXAogCVwKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA2
YWQzMmQ0Li40YTliOGRkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysr
IGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNzAgQEAKKzIwMTEtMDItMjAg
IFJvbGFuZCBTdGVpbmVyICA8cm9sYW5kc3RlaW5lckBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQnVnIDU0ODUzIC0gTW92ZSBU
ZXh0Q29udHJvbElubmVyRWxlbWVudHMgZnJvbSBXZWJDb3JlL3JlbmRlcmluZyB0byBXZWJDb3Jl
L2h0bWwvc2hhZG93CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD01NDg1MworICAgICAgICAKKyAgICAgICAgTW92aW5nIHRoZSBmaWxlcyBmcm9tIHJlbmRl
cmluZyB0byBodG1sL3NoYWRvdywgd2l0aCB0aGUgZXhjZXB0aW9uIG9mCisgICAgICAgIHRoZSBj
bGFzcyBSZW5kZXJUZXh0Q29udHJvbElubmVyQmxvY2ssIHdoaWNoIEkgbW92ZWQgdG8gUmVuZGVy
VGV4dENvbnRyb2xTaW5nbGVMaW5lCisgICAgICAgICh0aGlzIHBsYWNlIGlzIG5vdCBpZGVhbCwg
YnV0IG9ubHkgYSB0ZW1wb3Jhcnkgc3RhdGUgZHVyaW5nIHRoZSBsYXJnZXIgcmVmYWN0b3JpbmcK
KyAgICAgICAgZm9yIDxucHV0PikuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLiAocmVmYWN0b3Jp
bmcpCisKKyAgICAgICAgKiBBbmRyb2lkLm1rOgorICAgICAgICAqIEdOVW1ha2VmaWxlLmFtOgor
ICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAgICAgKiBXZWJDb3JlLnBybzoKKyAgICAgICAg
KiBXZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvajoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogaHRtbC9zaGFkb3cvVGV4dENvbnRyb2xJ
bm5lckVsZW1lbnRzLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9U
ZXh0Q29udHJvbElubmVyRWxlbWVudHMuY3BwLgorICAgICAgICAoV2ViQ29yZTo6VGV4dENvbnRy
b2xJbm5lckVsZW1lbnQ6OlRleHRDb250cm9sSW5uZXJFbGVtZW50KToKKyAgICAgICAgKFdlYkNv
cmU6OlRleHRDb250cm9sSW5uZXJFbGVtZW50OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6
VGV4dENvbnRyb2xJbm5lckVsZW1lbnQ6OmF0dGFjaElubmVyRWxlbWVudCk6CisgICAgICAgIChX
ZWJDb3JlOjpUZXh0Q29udHJvbElubmVyRWxlbWVudDo6ZGV0YWNoKToKKyAgICAgICAgKFdlYkNv
cmU6OlRleHRDb250cm9sSW5uZXJUZXh0RWxlbWVudDo6VGV4dENvbnRyb2xJbm5lclRleHRFbGVt
ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRDb250cm9sSW5uZXJUZXh0RWxlbWVudDo6Y3Jl
YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRDb250cm9sSW5uZXJUZXh0RWxlbWVudDo6ZGVm
YXVsdEV2ZW50SGFuZGxlcik6CisgICAgICAgIChXZWJDb3JlOjpUZXh0Q29udHJvbElubmVyVGV4
dEVsZW1lbnQ6OmNyZWF0ZVJlbmRlcmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlNlYXJjaEZpZWxk
UmVzdWx0c0J1dHRvbkVsZW1lbnQ6OlNlYXJjaEZpZWxkUmVzdWx0c0J1dHRvbkVsZW1lbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6U2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uRWxlbWVudDo6Y3JlYXRl
KToKKyAgICAgICAgKFdlYkNvcmU6OlNlYXJjaEZpZWxkUmVzdWx0c0J1dHRvbkVsZW1lbnQ6OmRl
ZmF1bHRFdmVudEhhbmRsZXIpOgorICAgICAgICAoV2ViQ29yZTo6U2VhcmNoRmllbGRDYW5jZWxC
dXR0b25FbGVtZW50OjpTZWFyY2hGaWVsZENhbmNlbEJ1dHRvbkVsZW1lbnQpOgorICAgICAgICAo
V2ViQ29yZTo6U2VhcmNoRmllbGRDYW5jZWxCdXR0b25FbGVtZW50OjpjcmVhdGUpOgorICAgICAg
ICAoV2ViQ29yZTo6U2VhcmNoRmllbGRDYW5jZWxCdXR0b25FbGVtZW50OjpkZXRhY2gpOgorICAg
ICAgICAoV2ViQ29yZTo6U2VhcmNoRmllbGRDYW5jZWxCdXR0b25FbGVtZW50OjpkZWZhdWx0RXZl
bnRIYW5kbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlNwaW5CdXR0b25FbGVtZW50OjpTcGluQnV0
dG9uRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTcGluQnV0dG9uRWxlbWVudDo6Y3JlYXRl
KToKKyAgICAgICAgKFdlYkNvcmU6OlNwaW5CdXR0b25FbGVtZW50OjpkZXRhY2gpOgorICAgICAg
ICAoV2ViQ29yZTo6U3BpbkJ1dHRvbkVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6U3BpbkJ1dHRvbkVsZW1lbnQ6OnN0YXJ0UmVwZWF0aW5nVGltZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6U3BpbkJ1dHRvbkVsZW1lbnQ6OnN0b3BSZXBlYXRpbmdUaW1lcik6
CisgICAgICAgIChXZWJDb3JlOjpTcGluQnV0dG9uRWxlbWVudDo6cmVwZWF0aW5nVGltZXJGaXJl
ZCk6CisgICAgICAgIChXZWJDb3JlOjpTcGluQnV0dG9uRWxlbWVudDo6c2V0SG92ZXJlZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbnB1dEZpZWxkU3BlZWNoQnV0dG9uRWxlbWVudDo6SW5wdXRGaWVs
ZFNwZWVjaEJ1dHRvbkVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6SW5wdXRGaWVsZFNwZWVj
aEJ1dHRvbkVsZW1lbnQ6On5JbnB1dEZpZWxkU3BlZWNoQnV0dG9uRWxlbWVudCk6CisgICAgICAg
IChXZWJDb3JlOjpJbnB1dEZpZWxkU3BlZWNoQnV0dG9uRWxlbWVudDo6Y3JlYXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OklucHV0RmllbGRTcGVlY2hCdXR0b25FbGVtZW50OjpkZWZhdWx0RXZlbnRI
YW5kbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OklucHV0RmllbGRTcGVlY2hCdXR0b25FbGVtZW50
OjpzZXRTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnB1dEZpZWxkU3BlZWNoQnV0dG9uRWxl
bWVudDo6c3BlZWNoSW5wdXQpOgorICAgICAgICAoV2ViQ29yZTo6SW5wdXRGaWVsZFNwZWVjaEJ1
dHRvbkVsZW1lbnQ6OmRpZENvbXBsZXRlUmVjb3JkaW5nKToKKyAgICAgICAgKFdlYkNvcmU6Oklu
cHV0RmllbGRTcGVlY2hCdXR0b25FbGVtZW50OjpkaWRDb21wbGV0ZVJlY29nbml0aW9uKToKKyAg
ICAgICAgKFdlYkNvcmU6OklucHV0RmllbGRTcGVlY2hCdXR0b25FbGVtZW50OjpzZXRSZWNvZ25p
dGlvblJlc3VsdCk6CisgICAgICAgIChXZWJDb3JlOjpJbnB1dEZpZWxkU3BlZWNoQnV0dG9uRWxl
bWVudDo6ZGV0YWNoKToKKyAgICAgICAgKiBodG1sL3NoYWRvdy9UZXh0Q29udHJvbElubmVyRWxl
bWVudHMuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0Q29udHJv
bElubmVyRWxlbWVudHMuaC4KKyAgICAgICAgKFdlYkNvcmU6OlRleHRDb250cm9sSW5uZXJFbGVt
ZW50Ojppc01vdXNlRm9jdXNhYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OlNwaW5CdXR0b25FbGVt
ZW50Ojp1cERvd25TdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTcGluQnV0dG9uRWxlbWVudDo6
aXNTcGluQnV0dG9uRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTcGluQnV0dG9uRWxlbWVu
dDo6aXNFbmFibGVkRm9ybUNvbnRyb2wpOgorICAgICAgICAoV2ViQ29yZTo6U3BpbkJ1dHRvbkVs
ZW1lbnQ6OmlzUmVhZE9ubHlGb3JtQ29udHJvbCk6CisgICAgICAgIChXZWJDb3JlOjpJbnB1dEZp
ZWxkU3BlZWNoQnV0dG9uRWxlbWVudDo6c3RhdGUpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5k
ZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4
dENvbnRyb2xJbm5lckJsb2NrOjpwb3NpdGlvbkZvclBvaW50KToKKyAgICAgICAgKiByZW5kZXJp
bmcvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmg6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJUZXh0Q29udHJvbElubmVyQmxvY2s6OlJlbmRlclRleHRDb250cm9sSW5uZXJCbG9jayk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0Q29udHJvbElubmVyQmxvY2s6Omhhc0xpbmVJZkVt
cHR5KToKKwogMjAxMS0wMi0yMCAgQWxleGV5IFByb3NrdXJ5YWtvdiAgPGFwQGFwcGxlLmNvbT4K
IAogICAgICAgICBSZXZpZXdlZCBieSBFcmljIFNlaWRlbC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL0dOVW1ha2VmaWxlLmFtIGIvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0KaW5k
ZXggMjVlN2Y4NS4uOGFiYTkyMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvR05VbWFrZWZp
bGUuYW0KKysrIGIvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0KQEAgLTE4ODcsOSArMTg4
NywxMSBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2Vy
L1hTU0ZpbHRlci5oIFwKIAlTb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xz
LmNwcCBcCiAJU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvTWVkaWFDb250cm9scy5oIFwKKwlT
b3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9Qcm9ncmVzc0JhclZhbHVlRWxlbWVudC5oIFwKIAlT
b3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9TbGlkZXJUaHVtYkVsZW1lbnQuY3BwIFwKIAlTb3Vy
Y2UvV2ViQ29yZS9odG1sL3NoYWRvdy9TbGlkZXJUaHVtYkVsZW1lbnQuaCBcCi0JU291cmNlL1dl
YkNvcmUvaHRtbC9zaGFkb3cvUHJvZ3Jlc3NCYXJWYWx1ZUVsZW1lbnQuaCBcCisJU291cmNlL1dl
YkNvcmUvaHRtbC9zaGFkb3cvVGV4dENvbnRyb2xJbm5lckVsZW1lbnRzLmNwcCBcCisJU291cmNl
L1dlYkNvcmUvaHRtbC9zaGFkb3cvVGV4dENvbnRyb2xJbm5lckVsZW1lbnRzLmggXAogCVNvdXJj
ZS9XZWJDb3JlL2h0bWwvUGFzc3dvcmRJbnB1dFR5cGUuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9o
dG1sL1Bhc3N3b3JkSW5wdXRUeXBlLmggXAogCVNvdXJjZS9XZWJDb3JlL2h0bWwvUGx1Z2luRG9j
dW1lbnQuY3BwIFwKQEAgLTMwNjcsOCArMzA2OSw2IEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJ
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0UXVlcnkuY3BwIFwKIAlTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRRdWVyeS5oIFwKIAlTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvVGFibGVMYXlvdXQuaCBcCi0JU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1RleHRD
b250cm9sSW5uZXJFbGVtZW50cy5jcHAgXAotCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0
Q29udHJvbElubmVyRWxlbWVudHMuaCBcCiAJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1RyYWls
aW5nRmxvYXRzUm9vdElubGluZUJveC5oIFwKIAlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvVHJh
bnNmb3JtU3RhdGUuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvVHJhbnNmb3JtU3Rh
dGUuaCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9Tb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLmd5cGkKaW5kZXggMzM0NzNiNC4uNzA1NDExMyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
Z3lwaQpAQCAtMjAyMSw2ICsyMDIxLDggQEAKICAgICAgICAgICAgICdodG1sL3NoYWRvdy9Qcm9n
cmVzc0JhclZhbHVlRWxlbWVudC5oJywKICAgICAgICAgICAgICdodG1sL3NoYWRvdy9TbGlkZXJU
aHVtYkVsZW1lbnQuY3BwJywKICAgICAgICAgICAgICdodG1sL3NoYWRvdy9TbGlkZXJUaHVtYkVs
ZW1lbnQuaCcsCisgICAgICAgICAgICAnaHRtbC9zaGFkb3cvVGV4dENvbnRyb2xJbm5lckVsZW1l
bnRzLmNwcCcsCisgICAgICAgICAgICAnaHRtbC9zaGFkb3cvVGV4dENvbnRyb2xJbm5lckVsZW1l
bnRzLmgnLAogICAgICAgICAgICAgJ2luc3BlY3Rvci9Db25zb2xlTWVzc2FnZS5jcHAnLAogICAg
ICAgICAgICAgJ2luc3BlY3Rvci9Db25zb2xlTWVzc2FnZS5oJywKICAgICAgICAgICAgICdpbnNw
ZWN0b3IvSW5qZWN0ZWRTY3JpcHQuY3BwJywKQEAgLTQwMjIsOCArNDAyNCw2IEBACiAgICAgICAg
ICAgICAncmVuZGVyaW5nL1NoYWRvd0VsZW1lbnQuY3BwJywKICAgICAgICAgICAgICdyZW5kZXJp
bmcvU2hhZG93RWxlbWVudC5oJywKICAgICAgICAgICAgICdyZW5kZXJpbmcvVGFibGVMYXlvdXQu
aCcsCi0gICAgICAgICAgICAncmVuZGVyaW5nL1RleHRDb250cm9sSW5uZXJFbGVtZW50cy5jcHAn
LAotICAgICAgICAgICAgJ3JlbmRlcmluZy9UZXh0Q29udHJvbElubmVyRWxlbWVudHMuaCcsCiAg
ICAgICAgICAgICAncmVuZGVyaW5nL1RyYW5zZm9ybVN0YXRlLmNwcCcsCiAgICAgICAgICAgICAn
cmVuZGVyaW5nL1RyYW5zZm9ybVN0YXRlLmgnLAogICAgICAgICAgICAgJ3JlbmRlcmluZy9icmVh
a19saW5lcy5jcHAnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5wcm8gYi9T
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLnBybwppbmRleCA4YTI1MDRiLi5hZGRjNjhiIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnBybworKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLnBybwpAQCAtOTMxLDYgKzkzMSw3IEBAIFNPVVJDRVMgKz0gXAogICAgIGh0bWwvcGFyc2Vy
L1hTU0ZpbHRlci5jcHAgXAogICAgIGh0bWwvc2hhZG93L01lZGlhQ29udHJvbHMuY3BwIFwKICAg
ICBodG1sL3NoYWRvdy9TbGlkZXJUaHVtYkVsZW1lbnQuY3BwIFwKKyAgICBodG1sL3NoYWRvdy9U
ZXh0Q29udHJvbElubmVyRWxlbWVudHMuY3BwIFwKICAgICBpbnNwZWN0b3IvQ29uc29sZU1lc3Nh
Z2UuY3BwIFwKICAgICBpbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHQuY3BwIFwKICAgICBpbnNwZWN0
b3IvSW5qZWN0ZWRTY3JpcHRIb3N0LmNwcCBcCkBAIC0xMjYwLDcgKzEyNjEsNiBAQCBTT1VSQ0VT
ICs9IFwKICAgICByZW5kZXJpbmcvUm9vdElubGluZUJveC5jcHAgXAogICAgIHJlbmRlcmluZy9T
Y3JvbGxCZWhhdmlvci5jcHAgXAogICAgIHJlbmRlcmluZy9TaGFkb3dFbGVtZW50LmNwcCBcCi0g
ICAgcmVuZGVyaW5nL1RleHRDb250cm9sSW5uZXJFbGVtZW50cy5jcHAgXAogICAgIHJlbmRlcmlu
Zy9UcmFuc2Zvcm1TdGF0ZS5jcHAgXAogICAgIHJlbmRlcmluZy9zdHlsZS9Db250ZW50RGF0YS5j
cHAgXAogICAgIHJlbmRlcmluZy9zdHlsZS9Db3VudGVyRGlyZWN0aXZlcy5jcHAgXApAQCAtMTcx
Nyw2ICsxNzE3LDcgQEAgSEVBREVSUyArPSBcCiAgICAgaHRtbC9jYW52YXMvVWludDE2QXJyYXku
aCBcCiAgICAgaHRtbC9jYW52YXMvVWludDMyQXJyYXkuaCBcCiAgICAgaHRtbC9jYW52YXMvVWlu
dDhBcnJheS5oIFwKKyAgICBodG1sL3NoYWRvdy9UZXh0Q29udHJvbElubmVyRWxlbWVudHMuaCBc
CiAgICAgaHRtbC9DbGFzc0xpc3QuaCBcCiAgICAgaHRtbC9Db2xsZWN0aW9uQ2FjaGUuaCBcCiAg
ICAgaHRtbC9EYXRhR3JpZENvbHVtbi5oIFwKQEAgLTIzMjYsNyArMjMyNyw2IEBAIEhFQURFUlMg
Kz0gXAogICAgIHJlbmRlcmluZy9zdmcvU1ZHVGV4dExheW91dEVuZ2luZVNwYWNpbmcuaCBcCiAg
ICAgcmVuZGVyaW5nL3N2Zy9TVkdUZXh0TWV0cmljcy5oIFwKICAgICByZW5kZXJpbmcvc3ZnL1NW
R1RleHRRdWVyeS5oIFwKLSAgICByZW5kZXJpbmcvVGV4dENvbnRyb2xJbm5lckVsZW1lbnRzLmgg
XAogICAgIHJlbmRlcmluZy9UcmFuc2Zvcm1TdGF0ZS5oIFwKICAgICBzdmcvYW5pbWF0aW9uL1NN
SUxUaW1lQ29udGFpbmVyLmggXAogICAgIHN2Zy9hbmltYXRpb24vU01JTFRpbWUuaCBcCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvaiBiL1Nv
dXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCmluZGV4IDU2OTEzNDEu
LjBkYzdlMzEgMTAwNzU1Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNv
cmUudmNwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNw
cm9qCkBAIC0zODQ4OCw2MiArMzg0ODgsNiBAQAogCQkJCT4KIAkJCTwvRmlsZT4KIAkJCTxGaWxl
Ci0JCQkJUmVsYXRpdmVQYXRoPSIuLlxyZW5kZXJpbmdcVGV4dENvbnRyb2xJbm5lckVsZW1lbnRz
LmNwcCIKLQkJCQk+Ci0JCQkJPEZpbGVDb25maWd1cmF0aW9uCi0JCQkJCU5hbWU9IkRlYnVnfFdp
bjMyIgotCQkJCQlFeGNsdWRlZEZyb21CdWlsZD0idHJ1ZSIKLQkJCQkJPgotCQkJCQk8VG9vbAot
CQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKLQkJCQkJLz4KLQkJCQk8L0ZpbGVDb25maWd1
cmF0aW9uPgotCQkJCTxGaWxlQ29uZmlndXJhdGlvbgotCQkJCQlOYW1lPSJSZWxlYXNlfFdpbjMy
IgotCQkJCQlFeGNsdWRlZEZyb21CdWlsZD0idHJ1ZSIKLQkJCQkJPgotCQkJCQk8VG9vbAotCQkJ
CQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKLQkJCQkJLz4KLQkJCQk8L0ZpbGVDb25maWd1cmF0
aW9uPgotCQkJCTxGaWxlQ29uZmlndXJhdGlvbgotCQkJCQlOYW1lPSJEZWJ1Z19DYWlyb19DRkxp
dGV8V2luMzIiCi0JCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIgotCQkJCQk+Ci0JCQkJCTxU
b29sCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgotCQkJCQkvPgotCQkJCTwvRmlsZUNv
bmZpZ3VyYXRpb24+Ci0JCQkJPEZpbGVDb25maWd1cmF0aW9uCi0JCQkJCU5hbWU9IlJlbGVhc2Vf
Q2Fpcm9fQ0ZMaXRlfFdpbjMyIgotCQkJCQlFeGNsdWRlZEZyb21CdWlsZD0idHJ1ZSIKLQkJCQkJ
PgotCQkJCQk8VG9vbAotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKLQkJCQkJLz4KLQkJ
CQk8L0ZpbGVDb25maWd1cmF0aW9uPgotCQkJCTxGaWxlQ29uZmlndXJhdGlvbgotCQkJCQlOYW1l
PSJEZWJ1Z19BbGx8V2luMzIiCi0JCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIgotCQkJCQk+
Ci0JCQkJCTxUb29sCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgotCQkJCQkvPgotCQkJ
CTwvRmlsZUNvbmZpZ3VyYXRpb24+Ci0JCQkJPEZpbGVDb25maWd1cmF0aW9uCi0JCQkJCU5hbWU9
IlJlbGVhc2VfTFRDR3xXaW4zMiIKLQkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiCi0JCQkJ
CT4KLQkJCQkJPFRvb2wKLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCi0JCQkJCS8+Ci0J
CQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KLQkJCTwvRmlsZT4KLQkJCTxGaWxlCi0JCQkJUmVsYXRp
dmVQYXRoPSIuLlxyZW5kZXJpbmdcVGV4dENvbnRyb2xJbm5lckVsZW1lbnRzLmgiCi0JCQkJPgot
CQkJPC9GaWxlPgotCQkJPEZpbGUKIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHJlbmRlcmluZ1xUcmFp
bGluZ0Zsb2F0c1Jvb3RJbmxpbmVCb3guaCIKIAkJCQk+CiAJCQk8L0ZpbGU+CkBAIC01NTgwNCw2
ICs1NTc0OCwxNCBAQAogCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGh0bWxcc2hhZG93XFNsaWRlclRo
dW1iRWxlbWVudC5oIgogCQkJCQk+CiAJCQkJPC9GaWxlPgorICAgICAgICAgICAgICAgIDxGaWxl
CisgICAgICAgICAgICAgICAgICAgIFJlbGF0aXZlUGF0aD0iLi5caHRtbFxzaGFkb3dcVGV4dENv
bnRyb2xJbm5lckVsZW1lbnRzLmNwcCIKKyAgICAgICAgICAgICAgICAgICAgPgorICAgICAgICAg
ICAgICAgIDwvRmlsZT4KKyAgICAgICAgICAgICAgICA8RmlsZQorICAgICAgICAgICAgICAgICAg
ICBSZWxhdGl2ZVBhdGg9Ii4uXGh0bWxcc2hhZG93XFRleHRDb250cm9sSW5uZXJFbGVtZW50cy5o
IgorICAgICAgICAgICAgICAgICAgICA+CisgICAgICAgICAgICAgICAgPC9GaWxlPgogCQkJPC9G
aWx0ZXI+CiAJCTwvRmlsdGVyPgogCQk8RmlsdGVyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggYmNjNWQ5MC4uNDYxYzVhNCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpA
QCAtMzE5LDYgKzMxOSw4IEBACiAJCTE0OTQ3RkZFMTJGODBDRDIwMEEwRjYzMSAvKiBEb2N1bWVu
dE9yZGVyZWRNYXAuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDE0OTQ3RkZDMTJGODBDRDIwMEEwRjYzMSAvKiBEb2N1bWVudE9yZGVyZWRNYXAuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkxNDk5M0JFNTBC
MkYyQjFDMDA1MDQ5N0YgLyogRm9jdXNDb250cm9sbGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0OTkzQkUzMEIyRjJCMUMwMDUwNDk3RiAvKiBG
b2N1c0NvbnRyb2xsZXIuY3BwICovOyB9OwogCQkxNDk5M0JFNjBCMkYyQjFDMDA1MDQ5N0YgLyog
Rm9jdXNDb250cm9sbGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAxNDk5M0JFNDBCMkYyQjFDMDA1MDQ5N0YgLyogRm9jdXNDb250cm9sbGVyLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMTRDMEJDNjQx
MzEyNDMyQzAwMzBFOEFCIC8qIFRleHRDb250cm9sSW5uZXJFbGVtZW50cy5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNEMwQkM2MjEzMTI0MzJDMDAz
MEU4QUIgLyogVGV4dENvbnRyb2xJbm5lckVsZW1lbnRzLmNwcCAqLzsgfTsKKwkJMTRDMEJDNjUx
MzEyNDMyQzAwMzBFOEFCIC8qIFRleHRDb250cm9sSW5uZXJFbGVtZW50cy5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTRDMEJDNjMxMzEyNDMyQzAwMzBF
OEFCIC8qIFRleHRDb250cm9sSW5uZXJFbGVtZW50cy5oICovOyB9OwogCQkxNEM5QTVFQTBCM0Qx
MDVGMDA1QTAyMzIgLyogU2V0dGluZ3MuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMTRDOUE1RTkwQjNEMTA1RjAwNUEwMjMyIC8qIFNldHRpbmdzLmNw
cCAqLzsgfTsKIAkJMTRDRDhEODIxMDZCNTI5MDAwQTQ2RDIzIC8qIEpTU2hhcmVkV29ya2VyQ3Vz
dG9tLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0
Q0Q4RDgxMTA2QjUyOTAwMEE0NkQyMyAvKiBKU1NoYXJlZFdvcmtlckN1c3RvbS5jcHAgKi87IH07
CiAJCTE0Q0Y3OEE0MDlGNThDQkYwMEVCMzY2NSAvKiBKU0NTU1ZhbHVlLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0Q0Y3OEEzMDlGNThDQkYwMEVC
MzY2NSAvKiBKU0NTU1ZhbHVlLmNwcCAqLzsgfTsKQEAgLTQwNTIsOCArNDA1NCw2IEBACiAJCUFB
MjFFQ0NEMEFCRjBGQzYwMDJCODM0QyAvKiBDU1NDdXJzb3JJbWFnZVZhbHVlLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBQTA5NzhFRTBBQkFBNkUxMDA4
NzQ0ODAgLyogQ1NTQ3Vyc29ySW1hZ2VWYWx1ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCUFBNEMzQTc2MEIyQjE2NzkwMDIzMzRBMiAvKiBTdHls
ZUVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQUE0QzNBNzQwQjJCMTY3OTAwMjMzNEEyIC8qIFN0eWxlRWxlbWVudC5jcHAgKi87IH07CiAJ
CUFBNEMzQTc3MEIyQjE2NzkwMDIzMzRBMiAvKiBTdHlsZUVsZW1lbnQuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEFBNEMzQTc1MEIyQjE2NzkwMDIzMzRB
MiAvKiBTdHlsZUVsZW1lbnQuaCAqLzsgfTsKLQkJQUIwMTRERTMwRTY4OUE0MzAwRTEwNDQ1IC8q
IFRleHRDb250cm9sSW5uZXJFbGVtZW50cy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBBQjAxNERFMTBFNjg5QTQzMDBFMTA0NDUgLyogVGV4dENvbnRy
b2xJbm5lckVsZW1lbnRzLmNwcCAqLzsgfTsKLQkJQUIwMTRERTQwRTY4OUE0MzAwRTEwNDQ1IC8q
IFRleHRDb250cm9sSW5uZXJFbGVtZW50cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQUIwMTRERTIwRTY4OUE0MzAwRTEwNDQ1IC8qIFRleHRDb250cm9s
SW5uZXJFbGVtZW50cy5oICovOyB9OwogCQlBQjIzQTMyNzA5QkJBN0QwMDA2N0NDNTMgLyogQmVm
b3JlVGV4dEluc2VydGVkRXZlbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQUIyM0EzMjUwOUJCQTdEMDAwNjdDQzUzIC8qIEJlZm9yZVRleHRJbnNl
cnRlZEV2ZW50LmNwcCAqLzsgfTsKIAkJQUIyM0EzMjgwOUJCQTdEMDAwNjdDQzUzIC8qIEJlZm9y
ZVRleHRJbnNlcnRlZEV2ZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBBQjIzQTMyNjA5QkJBN0QwMDA2N0NDNTMgLyogQmVmb3JlVGV4dEluc2VydGVk
RXZlbnQuaCAqLzsgfTsKIAkJQUIyNDdBNkMwQUZENjM4MzAwM0ZBNUZEIC8qIFJlbmRlclNsaWRl
ci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBQjI0
N0E2QTBBRkQ2MzgzMDAzRkE1RkQgLyogUmVuZGVyU2xpZGVyLmNwcCAqLzsgfTsKQEAgLTY2NDQs
NiArNjY0NCw4IEBACiAJCTE0OTQ3RkZDMTJGODBDRDIwMEEwRjYzMSAvKiBEb2N1bWVudE9yZGVy
ZWRNYXAuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRG9jdW1lbnRPcmRlcmVk
TWFwLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0OTkzQkUzMEIyRjJCMUMwMDUw
NDk3RiAvKiBGb2N1c0NvbnRyb2xsZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IEZvY3VzQ29udHJvbGxlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTE0OTkzQkU0MEIyRjJCMUMwMDUwNDk3RiAvKiBGb2N1c0NvbnRyb2xsZXIuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZvY3VzQ29udHJvbGxlci5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQkxNEMwQkM2MjEzMTI0MzJDMDAzMEU4QUIgLyogVGV4dENvbnRy
b2xJbm5lckVsZW1lbnRzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IFRleHRDb250cm9sSW5uZXJFbGVtZW50cy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTE0QzBCQzYzMTMxMjQzMkMwMDMwRThBQiAvKiBUZXh0Q29udHJvbElubmVyRWxlbWVudHMu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVGV4dENvbnRyb2xJbm5lckVsZW1l
bnRzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0QzlBNUU5MEIzRDEwNUYwMDVB
MDIzMiAvKiBTZXR0aW5ncy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gU2V0dGluZ3MuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxNENEOEQ4MTEw
NkI1MjkwMDBBNDZEMjMgLyogSlNTaGFyZWRXb3JrZXJDdXN0b20uY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNTaGFyZWRXb3JrZXJDdXN0b20uY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkxNENGNzg3MTA5RjU4N0NBMDBFQjM2NjUgLyogQ1NTVmFs
dWUuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBs
YXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBDU1NWYWx1ZS5pZGw7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CkBAIC0xMDIwNSw4ICsxMDIwNyw2IEBACiAJCUFBMDk3OEVFMEFCQUE2
RTEwMDg3NDQ4MCAvKiBDU1NDdXJzb3JJbWFnZVZhbHVlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBDU1NDdXJzb3JJbWFnZVZhbHVlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUFBNEMzQTc0MEIyQjE2NzkwMDIzMzRBMiAvKiBTdHlsZUVsZW1lbnQuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFN0eWxlRWxlbWVudC5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUFBNEMzQTc1MEIyQjE2NzkwMDIzMzRBMiAvKiBT
dHlsZUVsZW1lbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0eWxlRWxl
bWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlBQjAxNERFMTBFNjg5QTQzMDBF
MTA0NDUgLyogVGV4dENvbnRyb2xJbm5lckVsZW1lbnRzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IFRleHRDb250cm9sSW5uZXJFbGVtZW50cy5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUFCMDE0REUyMEU2ODlBNDMwMEUxMDQ0NSAvKiBUZXh0Q29u
dHJvbElubmVyRWxlbWVudHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVGV4
dENvbnRyb2xJbm5lckVsZW1lbnRzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUFC
MjNBMzI1MDlCQkE3RDAwMDY3Q0M1MyAvKiBCZWZvcmVUZXh0SW5zZXJ0ZWRFdmVudC5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQmVmb3JlVGV4dEluc2VydGVkRXZl
bnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBQjIzQTMyNjA5QkJBN0QwMDA2
N0NDNTMgLyogQmVmb3JlVGV4dEluc2VydGVkRXZlbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEJlZm9yZVRleHRJbnNlcnRlZEV2ZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUFCMjQ3QTZBMEFGRDYzODMwMDNGQTVGRCAvKiBSZW5kZXJTbGlkZXIuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlbmRlclNsaWRlci5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMzIyMCw2ICsxMzIyMCw4IEBACiAJCQkJ
QTdGRTgxOUIxMkZBNjc3NzAwODUwQzFFIC8qIFByb2dyZXNzQmFyVmFsdWVFbGVtZW50LmggKi8s
CiAJCQkJNDE1MEY5RjAxMkI2RTBFNzAwMDhDODYwIC8qIFNsaWRlclRodW1iRWxlbWVudC5jcHAg
Ki8sCiAJCQkJNDE1MEY5RUYxMkI2RTBFNzAwMDhDODYwIC8qIFNsaWRlclRodW1iRWxlbWVudC5o
ICovLAorCQkJCTE0QzBCQzYyMTMxMjQzMkMwMDMwRThBQiAvKiBUZXh0Q29udHJvbElubmVyRWxl
bWVudHMuY3BwICovLAorCQkJCTE0QzBCQzYzMTMxMjQzMkMwMDMwRThBQiAvKiBUZXh0Q29udHJv
bElubmVyRWxlbWVudHMuaCAqLywKIAkJCSk7CiAJCQlwYXRoID0gc2hhZG93OwogCQkJc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsKQEAgLTE4ODkzLDggKzE4ODk1LDYgQEAKIAkJCQlBN0YzMzhBMTEx
QzBFRkNBMDBBMzIwQTcgLyogU2hhZG93RWxlbWVudC5jcHAgKi8sCiAJCQkJQTdGMzM4QTIxMUMw
RUZDQTAwQTMyMEE3IC8qIFNoYWRvd0VsZW1lbnQuaCAqLywKIAkJCQlBOENGRjA0QzBBMTU0RjA5
MDAwQTQyMzQgLyogVGFibGVMYXlvdXQuaCAqLywKLQkJCQlBQjAxNERFMTBFNjg5QTQzMDBFMTA0
NDUgLyogVGV4dENvbnRyb2xJbm5lckVsZW1lbnRzLmNwcCAqLywKLQkJCQlBQjAxNERFMjBFNjg5
QTQzMDBFMTA0NDUgLyogVGV4dENvbnRyb2xJbm5lckVsZW1lbnRzLmggKi8sCiAJCQkJMzdGQzk2
REExMTA0RUQ3MTAwM0UxRkFEIC8qIFRyYWlsaW5nRmxvYXRzUm9vdElubGluZUJveC5oICovLAog
CQkJCTBGNTAwQUIwMEY1NERCMzEwMEVFRjkyOCAvKiBUcmFuc2Zvcm1TdGF0ZS5jcHAgKi8sCiAJ
CQkJMEY1MDBBQUUwRjU0REIxQjAwRUVGOTI4IC8qIFRyYW5zZm9ybVN0YXRlLmggKi8sCkBAIC0y
MjI0MSw3ICsyMjI0MSw2IEBACiAJCQkJQjJBRkZDOUEwRDAwQTVERjAwMzAwNzREIC8qIFRleHRD
b2RlY01hYy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjJDM0RBNDAwRDAwNkMxRDAwRUY2RjI2IC8q
IFRleHRDb2RlY1VzZXJEZWZpbmVkLmggaW4gSGVhZGVycyAqLywKIAkJCQlCMkMzREE0MjBEMDA2
QzFEMDBFRjZGMjYgLyogVGV4dENvZGVjVVRGMTYuaCBpbiBIZWFkZXJzICovLAotCQkJCUFCMDE0
REU0MEU2ODlBNDMwMEUxMDQ0NSAvKiBUZXh0Q29udHJvbElubmVyRWxlbWVudHMuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUIyQzNEQTQ1MEQwMDZDMUQwMEVGNkYyNiAvKiBUZXh0RGlyZWN0aW9uLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk5N0JDODRCNDEyMzcxMTgwMDAwQzYxNjEgLyogVGV4dERvY3Vt
ZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQk5N0JDODQ4NDEyMzZGRDkzMDAwQzYxNjEgLyogVGV4
dERvY3VtZW50UGFyc2VyLmggaW4gSGVhZGVycyAqLywKQEAgLTIyNDc3LDYgKzIyNDc2LDcgQEAK
IAkJCQlCOERCREI0QzEzMEIwRjhBMDBGNUNEQjEgLyogU2V0U2VsZWN0aW9uQ29tbWFuZC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQjhEQkRCNEUxMzBCMEY4QTAwRjVDREIxIC8qIFNwZWxsaW5nQ29y
cmVjdGlvbkNvbW1hbmQuaCBpbiBIZWFkZXJzICovLAogCQkJCUQzRDRFOTczMTMwQzdDRkUwMDdC
QTU0MCAvKiBIVE1MU3VtbWFyeUVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAorCQkJCTE0QzBCQzY1
MTMxMjQzMkMwMDMwRThBQiAvKiBUZXh0Q29udHJvbElubmVyRWxlbWVudHMuaCBpbiBIZWFkZXJz
ICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwog
CQl9OwpAQCAtMjQ5NjYsNyArMjQ5NjYsNiBAQAogCQkJCUIyQUZGQzk5MEQwMEE1REYwMDMwMDc0
RCAvKiBUZXh0Q29kZWNNYWMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQjJDM0RBM0YwRDAwNkMx
RDAwRUY2RjI2IC8qIFRleHRDb2RlY1VzZXJEZWZpbmVkLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CUIyQzNEQTQxMEQwMDZDMUQwMEVGNkYyNiAvKiBUZXh0Q29kZWNVVEYxNi5jcHAgaW4gU291cmNl
cyAqLywKLQkJCQlBQjAxNERFMzBFNjg5QTQzMDBFMTA0NDUgLyogVGV4dENvbnRyb2xJbm5lckVs
ZW1lbnRzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTk3QkM4NEIzMTIzNzExODAwMDBDNjE2MSAv
KiBUZXh0RG9jdW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTdCQzg0ODMxMjM2RkQ5MzAw
MEM2MTYxIC8qIFRleHREb2N1bWVudFBhcnNlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCMkMz
REE0NjBEMDA2QzFEMDBFRjZGMjYgLyogVGV4dEVuY29kaW5nLmNwcCBpbiBTb3VyY2VzICovLApA
QCAtMjUxNjYsNiArMjUxNjUsNyBAQAogCQkJCUI4REJEQjRCMTMwQjBGOEEwMEY1Q0RCMSAvKiBT
ZXRTZWxlY3Rpb25Db21tYW5kLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUI4REJEQjREMTMwQjBG
OEEwMEY1Q0RCMSAvKiBTcGVsbGluZ0NvcnJlY3Rpb25Db21tYW5kLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCUQzRDRFOTcyMTMwQzdDRkUwMDdCQTU0MCAvKiBIVE1MU3VtbWFyeUVsZW1lbnQuY3Bw
IGluIFNvdXJjZXMgKi8sCisJCQkJMTRDMEJDNjQxMzEyNDMyQzAwMzBFOEFCIC8qIFRleHRDb250
cm9sSW5uZXJFbGVtZW50cy5jcHAgaW4gU291cmNlcyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9y
RGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvc2hhZG93L1RleHRDb250cm9sSW5uZXJFbGVtZW50cy5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9odG1sL3NoYWRvdy9UZXh0Q29udHJvbElubmVyRWxlbWVudHMuY3BwCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA3ZjUzOWQKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9UZXh0Q29udHJvbElubmVyRWxlbWVudHMuY3BwCkBA
IC0wLDAgKzEsNTA3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA4LCAyMDEwIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJUZXh0Q29udHJvbElubmVyRWxlbWVudHMuaCIKKworI2luY2x1ZGUgIkJlZm9y
ZVRleHRJbnNlcnRlZEV2ZW50LmgiCisjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJF
dmVudEhhbmRsZXIuaCIKKyNpbmNsdWRlICJFdmVudE5hbWVzLmgiCisjaW5jbHVkZSAiRnJhbWUu
aCIKKyNpbmNsdWRlICJIVE1MSW5wdXRFbGVtZW50LmgiCisjaW5jbHVkZSAiSFRNTE5hbWVzLmgi
CisjaW5jbHVkZSAiSFRNTFRleHRBcmVhRWxlbWVudC5oIgorI2luY2x1ZGUgIk1vdXNlRXZlbnQu
aCIKKyNpbmNsdWRlICJQYWdlLmgiCisjaW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCIKKyNpbmNsdWRl
ICJSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuaCIKKyNpbmNsdWRlICJTY3JvbGxiYXJUaGVt
ZS5oIgorI2luY2x1ZGUgIlNwZWVjaElucHV0LmgiCisjaW5jbHVkZSAiU3BlZWNoSW5wdXRFdmVu
dC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3VzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7
CisKK1RleHRDb250cm9sSW5uZXJFbGVtZW50OjpUZXh0Q29udHJvbElubmVyRWxlbWVudChEb2N1
bWVudCogZG9jdW1lbnQsIEhUTUxFbGVtZW50KiBzaGFkb3dQYXJlbnQpCisgICAgOiBIVE1MRGl2
RWxlbWVudChkaXZUYWcsIGRvY3VtZW50KQoreworICAgIHNldFNoYWRvd0hvc3Qoc2hhZG93UGFy
ZW50KTsKK30KKworUGFzc1JlZlB0cjxUZXh0Q29udHJvbElubmVyRWxlbWVudD4gVGV4dENvbnRy
b2xJbm5lckVsZW1lbnQ6OmNyZWF0ZShIVE1MRWxlbWVudCogc2hhZG93UGFyZW50KQoreworICAg
IHJldHVybiBhZG9wdFJlZihuZXcgVGV4dENvbnRyb2xJbm5lckVsZW1lbnQoc2hhZG93UGFyZW50
LT5kb2N1bWVudCgpLCBzaGFkb3dQYXJlbnQpKTsKK30KKwordm9pZCBUZXh0Q29udHJvbElubmVy
RWxlbWVudDo6YXR0YWNoSW5uZXJFbGVtZW50KE5vZGUqIHBhcmVudCwgUGFzc1JlZlB0cjxSZW5k
ZXJTdHlsZT4gc3R5bGUsIFJlbmRlckFyZW5hKiBhcmVuYSkKK3sKKyAgICAvLyBXaGVuIGFkZGlu
ZyB0aGVzZSBlbGVtZW50cywgY3JlYXRlIHRoZSByZW5kZXJlciAmIHN0eWxlIGZpcnN0IGJlZm9y
ZSBhZGRpbmcgdG8gdGhlIERPTS4KKyAgICAvLyBPdGhlcndpc2UsIHRoZSByZW5kZXIgdHJlZSB3
aWxsIGNyZWF0ZSBzb21lIGFub255bW91cyBibG9ja3MgdGhhdCB3aWxsIG1lc3MgdXAgb3VyIGxh
eW91dC4KKworICAgIC8vIENyZWF0ZSB0aGUgcmVuZGVyZXIgd2l0aCB0aGUgc3BlY2lmaWVkIHN0
eWxlCisgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IGNyZWF0ZVJlbmRlcmVyKGFyZW5hLCBz
dHlsZS5nZXQoKSk7CisgICAgaWYgKHJlbmRlcmVyKSB7CisgICAgICAgIHNldFJlbmRlcmVyKHJl
bmRlcmVyKTsKKyAgICAgICAgcmVuZGVyZXItPnNldFN0eWxlKHN0eWxlKTsKKyAgICB9CisKKyAg
ICAvLyBTZXQgdGhlc2UgZXhwbGljaXRseSBzaW5jZSB0aGlzIG5vcm1hbGx5IGhhcHBlbnMgZHVy
aW5nIGFuIGF0dGFjaCgpCisgICAgc2V0QXR0YWNoZWQoKTsKKyAgICBzZXRJbkRvY3VtZW50KCk7
CisKKyAgICAvLyBGb3IgZWxlbWVudHMgbm90IHlldCBpbiBzaGFkb3cgRE9NLCBhZGQgdGhlIG5v
ZGUgdG8gdGhlIERPTSBub3JtYWxseS4KKyAgICBpZiAoIWlzU2hhZG93Um9vdCgpKSB7CisgICAg
ICAgIC8vIEZJWE1FOiBUaGlzIGNvZGUgc2VlbXMgdmVyeSB3cm9uZy4gIFdoeSBhcmUgd2UgbWFn
aWNhbGx5IGFkZGluZyB8dGhpc3wgdG8gdGhlIERPTSBoZXJlPworICAgICAgICAvLyAgICAgICAg
V2Ugc2hvdWxkbid0IGJlIGNhbGxpbmcgcGFyc2VyIEFQSSBtZXRob2RzIG91dHNpZGUgb2YgdGhl
IHBhcnNlciEKKyAgICAgICAgcGFyZW50LT5kZXByZWNhdGVkUGFyc2VyQWRkQ2hpbGQodGhpcyk7
CisgICAgfQorCisgICAgLy8gQWRkIHRoZSByZW5kZXJlciB0byB0aGUgcmVuZGVyIHRyZWUKKyAg
ICBpZiAocmVuZGVyZXIpCisgICAgICAgIHBhcmVudC0+cmVuZGVyZXIoKS0+YWRkQ2hpbGQocmVu
ZGVyZXIpOworfQorCit2b2lkIFRleHRDb250cm9sSW5uZXJFbGVtZW50OjpkZXRhY2goKQorewor
ICAgIEhUTUxEaXZFbGVtZW50OjpkZXRhY2goKTsKKyAgICAvLyBGSVhNRTogUmVtb3ZlIG9uY2Ug
c2hhZG93IERPTSB1c2VzIEVsZW1lbnQ6OnNldFNoYWRvd1Jvb3QoKS4KKyAgICBpZiAoc2hhZG93
SG9zdCgpKQorICAgICAgICBzZXRTaGFkb3dIb3N0KDApOworfQorCisvLyAtLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCisKK2lubGluZSBUZXh0Q29udHJvbElubmVyVGV4dEVsZW1lbnQ6OlRl
eHRDb250cm9sSW5uZXJUZXh0RWxlbWVudChEb2N1bWVudCogZG9jdW1lbnQsIEhUTUxFbGVtZW50
KiBzaGFkb3dQYXJlbnQpCisgICAgOiBUZXh0Q29udHJvbElubmVyRWxlbWVudChkb2N1bWVudCwg
c2hhZG93UGFyZW50KQoreworfQorCitQYXNzUmVmUHRyPFRleHRDb250cm9sSW5uZXJUZXh0RWxl
bWVudD4gVGV4dENvbnRyb2xJbm5lclRleHRFbGVtZW50OjpjcmVhdGUoRG9jdW1lbnQqIGRvY3Vt
ZW50LCBIVE1MRWxlbWVudCogc2hhZG93UGFyZW50KQoreworICAgIHJldHVybiBhZG9wdFJlZihu
ZXcgVGV4dENvbnRyb2xJbm5lclRleHRFbGVtZW50KGRvY3VtZW50LCBzaGFkb3dQYXJlbnQpKTsK
K30KKwordm9pZCBUZXh0Q29udHJvbElubmVyVGV4dEVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRs
ZXIoRXZlbnQqIGV2ZW50KQoreworICAgIC8vIEZJWE1FOiBJbiB0aGUgZnV0dXJlLCB3ZSBzaG91
bGQgYWRkIGEgd2F5IHRvIGhhdmUgZGVmYXVsdCBldmVudCBsaXN0ZW5lcnMuCisgICAgLy8gVGhl
biB3ZSB3b3VsZCBhZGQgb25lIHRvIHRoZSB0ZXh0IGZpZWxkJ3MgaW5uZXIgZGl2LCBhbmQgd2Ug
d291bGRuJ3QgbmVlZCB0aGlzIHN1YmNsYXNzLgorICAgIC8vIE9yIHBvc3NpYmx5IHdlIGNvdWxk
IGp1c3QgdXNlIGEgbm9ybWFsIGV2ZW50IGxpc3RlbmVyLgorICAgIGlmIChldmVudC0+aXNCZWZv
cmVUZXh0SW5zZXJ0ZWRFdmVudCgpIHx8IGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLndl
YmtpdEVkaXRhYmxlQ29udGVudENoYW5nZWRFdmVudCkgeworICAgICAgICBOb2RlKiBzaGFkb3dB
bmNlc3RvciA9IHNoYWRvd0FuY2VzdG9yTm9kZSgpOworICAgICAgICAvLyBBIFRleHRDb250cm9s
SW5uZXJUZXh0RWxlbWVudCBjYW4gYmUgaXRzIG93biBzaGFkb3cgYW5jZXN0b3IgaWYgaXRzIGJl
ZW4gZGV0YWNoZWQsIGJ1dCBrZXB0IGFsaXZlIGJ5IGFuIEVkaXRDb21tYW5kLgorICAgICAgICAv
LyBJbiB0aGlzIGNhc2UsIGFuIHVuZG8vcmVkbyBjYW4gY2F1c2UgZXZlbnRzIHRvIGJlIHNlbnQg
dG8gdGhlIFRleHRDb250cm9sSW5uZXJUZXh0RWxlbWVudC4gIAorICAgICAgICAvLyBUbyBwcmV2
ZW50IGFuIGluZmluaXRlIGxvb3AsIHdlIG11c3QgY2hlY2sgZm9yIHRoaXMgY2FzZSBiZWZvcmUg
c2VuZGluZyB0aGUgZXZlbnQgdXAgdGhlIGNoYWluLgorICAgICAgICBpZiAoc2hhZG93QW5jZXN0
b3IgJiYgc2hhZG93QW5jZXN0b3IgIT0gdGhpcykKKyAgICAgICAgICAgIHNoYWRvd0FuY2VzdG9y
LT5kZWZhdWx0RXZlbnRIYW5kbGVyKGV2ZW50KTsKKyAgICB9CisgICAgaWYgKCFldmVudC0+ZGVm
YXVsdEhhbmRsZWQoKSkKKyAgICAgICAgSFRNTERpdkVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRs
ZXIoZXZlbnQpOworfQorCitSZW5kZXJPYmplY3QqIFRleHRDb250cm9sSW5uZXJUZXh0RWxlbWVu
dDo6Y3JlYXRlUmVuZGVyZXIoUmVuZGVyQXJlbmEqIGFyZW5hLCBSZW5kZXJTdHlsZSopCit7Cisg
ICAgYm9vbCBtdWx0aUxpbmUgPSBmYWxzZTsKKyAgICBOb2RlKiBzaGFkb3dBbmNlc3RvciA9IHNo
YWRvd0FuY2VzdG9yTm9kZSgpOworICAgIGlmIChzaGFkb3dBbmNlc3RvciAmJiBzaGFkb3dBbmNl
c3Rvci0+cmVuZGVyZXIoKSkgeworICAgICAgICBBU1NFUlQoc2hhZG93QW5jZXN0b3ItPnJlbmRl
cmVyKCktPmlzVGV4dEZpZWxkKCkgfHwgc2hhZG93QW5jZXN0b3ItPnJlbmRlcmVyKCktPmlzVGV4
dEFyZWEoKSk7CisgICAgICAgIG11bHRpTGluZSA9IHNoYWRvd0FuY2VzdG9yLT5yZW5kZXJlcigp
LT5pc1RleHRBcmVhKCk7CisgICAgfQorICAgIHJldHVybiBuZXcgKGFyZW5hKSBSZW5kZXJUZXh0
Q29udHJvbElubmVyQmxvY2sodGhpcywgbXVsdGlMaW5lKTsKK30KKworLy8gLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQorCitpbmxpbmUgU2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uRWxlbWVu
dDo6U2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uRWxlbWVudChEb2N1bWVudCogZG9jdW1lbnQpCisg
ICAgOiBUZXh0Q29udHJvbElubmVyRWxlbWVudChkb2N1bWVudCkKK3sKK30KKworUGFzc1JlZlB0
cjxTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b25FbGVtZW50PiBTZWFyY2hGaWVsZFJlc3VsdHNCdXR0
b25FbGVtZW50OjpjcmVhdGUoRG9jdW1lbnQqIGRvY3VtZW50KQoreworICAgIHJldHVybiBhZG9w
dFJlZihuZXcgU2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uRWxlbWVudChkb2N1bWVudCkpOworfQor
Cit2b2lkIFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRvbkVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRs
ZXIoRXZlbnQqIGV2ZW50KQoreworICAgIC8vIE9uIG1vdXNlZG93biwgYnJpbmcgdXAgYSBtZW51
LCBpZiBuZWVkZWQKKyAgICBIVE1MSW5wdXRFbGVtZW50KiBpbnB1dCA9IHN0YXRpY19jYXN0PEhU
TUxJbnB1dEVsZW1lbnQqPihzaGFkb3dBbmNlc3Rvck5vZGUoKSk7CisgICAgaWYgKGV2ZW50LT50
eXBlKCkgPT0gZXZlbnROYW1lcygpLm1vdXNlZG93bkV2ZW50ICYmIGV2ZW50LT5pc01vdXNlRXZl
bnQoKSAmJiBzdGF0aWNfY2FzdDxNb3VzZUV2ZW50Kj4oZXZlbnQpLT5idXR0b24oKSA9PSBMZWZ0
QnV0dG9uKSB7CisgICAgICAgIGlucHV0LT5mb2N1cygpOworICAgICAgICBpbnB1dC0+c2VsZWN0
KCk7CisgICAgICAgIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZSogcmVuZGVyZXIgPSB0b1Jl
bmRlclRleHRDb250cm9sU2luZ2xlTGluZShpbnB1dC0+cmVuZGVyZXIoKSk7CisgICAgICAgIGlm
IChyZW5kZXJlci0+cG9wdXBJc1Zpc2libGUoKSkKKyAgICAgICAgICAgIHJlbmRlcmVyLT5oaWRl
UG9wdXAoKTsKKyAgICAgICAgZWxzZSBpZiAoaW5wdXQtPm1heFJlc3VsdHMoKSA+IDApCisgICAg
ICAgICAgICByZW5kZXJlci0+c2hvd1BvcHVwKCk7CisgICAgICAgIGV2ZW50LT5zZXREZWZhdWx0
SGFuZGxlZCgpOworICAgIH0KKworICAgIGlmICghZXZlbnQtPmRlZmF1bHRIYW5kbGVkKCkpCisg
ICAgICAgIEhUTUxEaXZFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKGV2ZW50KTsKK30KKwor
Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitpbmxpbmUgU2VhcmNoRmllbGRDYW5j
ZWxCdXR0b25FbGVtZW50OjpTZWFyY2hGaWVsZENhbmNlbEJ1dHRvbkVsZW1lbnQoRG9jdW1lbnQq
IGRvY3VtZW50KQorICAgIDogVGV4dENvbnRyb2xJbm5lckVsZW1lbnQoZG9jdW1lbnQpCisgICAg
LCBtX2NhcHR1cmluZyhmYWxzZSkKK3sKK30KKworUGFzc1JlZlB0cjxTZWFyY2hGaWVsZENhbmNl
bEJ1dHRvbkVsZW1lbnQ+IFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uRWxlbWVudDo6Y3JlYXRlKERv
Y3VtZW50KiBkb2N1bWVudCkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IFNlYXJjaEZpZWxk
Q2FuY2VsQnV0dG9uRWxlbWVudChkb2N1bWVudCkpOworfQorCit2b2lkIFNlYXJjaEZpZWxkQ2Fu
Y2VsQnV0dG9uRWxlbWVudDo6ZGV0YWNoKCkKK3sKKyAgICBpZiAobV9jYXB0dXJpbmcpIHsKKyAg
ICAgICAgaWYgKEZyYW1lKiBmcmFtZSA9IGRvY3VtZW50KCktPmZyYW1lKCkpCisgICAgICAgICAg
ICBmcmFtZS0+ZXZlbnRIYW5kbGVyKCktPnNldENhcHR1cmluZ01vdXNlRXZlbnRzTm9kZSgwKTsK
KyAgICB9CisgICAgVGV4dENvbnRyb2xJbm5lckVsZW1lbnQ6OmRldGFjaCgpOworfQorCisKK3Zv
aWQgU2VhcmNoRmllbGRDYW5jZWxCdXR0b25FbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKEV2
ZW50KiBldmVudCkKK3sKKyAgICAvLyBJZiB0aGUgZWxlbWVudCBpcyB2aXNpYmxlLCBvbiBtb3Vz
ZXVwLCBjbGVhciB0aGUgdmFsdWUsIGFuZCBzZXQgc2VsZWN0aW9uCisgICAgUmVmUHRyPEhUTUxJ
bnB1dEVsZW1lbnQ+IGlucHV0KHN0YXRpY19jYXN0PEhUTUxJbnB1dEVsZW1lbnQqPihzaGFkb3dB
bmNlc3Rvck5vZGUoKSkpOworICAgIGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5t
b3VzZWRvd25FdmVudCAmJiBldmVudC0+aXNNb3VzZUV2ZW50KCkgJiYgc3RhdGljX2Nhc3Q8TW91
c2VFdmVudCo+KGV2ZW50KS0+YnV0dG9uKCkgPT0gTGVmdEJ1dHRvbikgeworICAgICAgICBpZiAo
cmVuZGVyZXIoKSAmJiByZW5kZXJlcigpLT52aXNpYmxlVG9IaXRUZXN0aW5nKCkpIHsKKyAgICAg
ICAgICAgIGlmIChGcmFtZSogZnJhbWUgPSBkb2N1bWVudCgpLT5mcmFtZSgpKSB7CisgICAgICAg
ICAgICAgICAgZnJhbWUtPmV2ZW50SGFuZGxlcigpLT5zZXRDYXB0dXJpbmdNb3VzZUV2ZW50c05v
ZGUodGhpcyk7CisgICAgICAgICAgICAgICAgbV9jYXB0dXJpbmcgPSB0cnVlOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgICAgIGlucHV0LT5mb2N1cygpOworICAgICAgICBpbnB1dC0+
c2VsZWN0KCk7CisgICAgICAgIGV2ZW50LT5zZXREZWZhdWx0SGFuZGxlZCgpOworICAgIH0KKyAg
ICBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkubW91c2V1cEV2ZW50ICYmIGV2ZW50
LT5pc01vdXNlRXZlbnQoKSAmJiBzdGF0aWNfY2FzdDxNb3VzZUV2ZW50Kj4oZXZlbnQpLT5idXR0
b24oKSA9PSBMZWZ0QnV0dG9uKSB7CisgICAgICAgIGlmIChtX2NhcHR1cmluZykgeworICAgICAg
ICAgICAgaWYgKEZyYW1lKiBmcmFtZSA9IGRvY3VtZW50KCktPmZyYW1lKCkpIHsKKyAgICAgICAg
ICAgICAgICBmcmFtZS0+ZXZlbnRIYW5kbGVyKCktPnNldENhcHR1cmluZ01vdXNlRXZlbnRzTm9k
ZSgwKTsKKyAgICAgICAgICAgICAgICBtX2NhcHR1cmluZyA9IGZhbHNlOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgaWYgKGhvdmVyZWQoKSkgeworICAgICAgICAgICAgICAgIFN0cmluZyBv
bGRWYWx1ZSA9IGlucHV0LT52YWx1ZSgpOworICAgICAgICAgICAgICAgIGlucHV0LT5zZXRWYWx1
ZSgiIik7CisgICAgICAgICAgICAgICAgaWYgKCFvbGRWYWx1ZS5pc0VtcHR5KCkpIHsKKyAgICAg
ICAgICAgICAgICAgICAgdG9SZW5kZXJUZXh0Q29udHJvbChpbnB1dC0+cmVuZGVyZXIoKSktPnNl
dENoYW5nZWRTaW5jZUxhc3RDaGFuZ2VFdmVudCh0cnVlKTsKKyAgICAgICAgICAgICAgICAgICAg
aW5wdXQtPmRpc3BhdGNoRm9ybUNvbnRyb2xJbnB1dEV2ZW50KCk7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIGlucHV0LT5vblNlYXJjaCgpOworICAgICAgICAgICAgICAgIGV2
ZW50LT5zZXREZWZhdWx0SGFuZGxlZCgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
fQorCisgICAgaWYgKCFldmVudC0+ZGVmYXVsdEhhbmRsZWQoKSkKKyAgICAgICAgSFRNTERpdkVs
ZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIoZXZlbnQpOworfQorCisvLyAtLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCisKK2lubGluZSBTcGluQnV0dG9uRWxlbWVudDo6U3BpbkJ1dHRvbkVs
ZW1lbnQoSFRNTEVsZW1lbnQqIHNoYWRvd1BhcmVudCkKKyAgICA6IFRleHRDb250cm9sSW5uZXJF
bGVtZW50KHNoYWRvd1BhcmVudC0+ZG9jdW1lbnQoKSwgc2hhZG93UGFyZW50KQorICAgICwgbV9j
YXB0dXJpbmcoZmFsc2UpCisgICAgLCBtX3VwRG93blN0YXRlKEluZGV0ZXJtaW5hdGUpCisgICAg
LCBtX3ByZXNzU3RhcnRpbmdTdGF0ZShJbmRldGVybWluYXRlKQorICAgICwgbV9yZXBlYXRpbmdU
aW1lcih0aGlzLCAmU3BpbkJ1dHRvbkVsZW1lbnQ6OnJlcGVhdGluZ1RpbWVyRmlyZWQpCit7Cit9
CisKK1Bhc3NSZWZQdHI8U3BpbkJ1dHRvbkVsZW1lbnQ+IFNwaW5CdXR0b25FbGVtZW50OjpjcmVh
dGUoSFRNTEVsZW1lbnQqIHNoYWRvd1BhcmVudCkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3
IFNwaW5CdXR0b25FbGVtZW50KHNoYWRvd1BhcmVudCkpOworfQorCit2b2lkIFNwaW5CdXR0b25F
bGVtZW50OjpkZXRhY2goKQoreworICAgIHN0b3BSZXBlYXRpbmdUaW1lcigpOworICAgIGlmICht
X2NhcHR1cmluZykgeworICAgICAgICBpZiAoRnJhbWUqIGZyYW1lID0gZG9jdW1lbnQoKS0+ZnJh
bWUoKSkgeworICAgICAgICAgICAgZnJhbWUtPmV2ZW50SGFuZGxlcigpLT5zZXRDYXB0dXJpbmdN
b3VzZUV2ZW50c05vZGUoMCk7CisgICAgICAgICAgICBtX2NhcHR1cmluZyA9IGZhbHNlOworICAg
ICAgICB9CisgICAgfQorICAgIFRleHRDb250cm9sSW5uZXJFbGVtZW50OjpkZXRhY2goKTsKK30K
Kwordm9pZCBTcGluQnV0dG9uRWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCogZXZl
bnQpCit7CisgICAgaWYgKCFldmVudC0+aXNNb3VzZUV2ZW50KCkpIHsKKyAgICAgICAgaWYgKCFl
dmVudC0+ZGVmYXVsdEhhbmRsZWQoKSkKKyAgICAgICAgICAgIEhUTUxEaXZFbGVtZW50OjpkZWZh
dWx0RXZlbnRIYW5kbGVyKGV2ZW50KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFJl
bmRlckJveCogYm94ID0gcmVuZGVyQm94KCk7CisgICAgaWYgKCFib3gpIHsKKyAgICAgICAgaWYg
KCFldmVudC0+ZGVmYXVsdEhhbmRsZWQoKSkKKyAgICAgICAgICAgIEhUTUxEaXZFbGVtZW50Ojpk
ZWZhdWx0RXZlbnRIYW5kbGVyKGV2ZW50KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IFJlZlB0cjxIVE1MSW5wdXRFbGVtZW50PiBpbnB1dChzdGF0aWNfY2FzdDxIVE1MSW5wdXRFbGVt
ZW50Kj4oc2hhZG93QW5jZXN0b3JOb2RlKCkpKTsKKyAgICBpZiAoaW5wdXQtPmRpc2FibGVkKCkg
fHwgaW5wdXQtPmlzUmVhZE9ubHlGb3JtQ29udHJvbCgpKSB7CisgICAgICAgIGlmICghZXZlbnQt
PmRlZmF1bHRIYW5kbGVkKCkpCisgICAgICAgICAgICBIVE1MRGl2RWxlbWVudDo6ZGVmYXVsdEV2
ZW50SGFuZGxlcihldmVudCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBNb3VzZUV2
ZW50KiBtb3VzZUV2ZW50ID0gc3RhdGljX2Nhc3Q8TW91c2VFdmVudCo+KGV2ZW50KTsKKyAgICBJ
bnRQb2ludCBsb2NhbCA9IHJvdW5kZWRJbnRQb2ludChib3gtPmFic29sdXRlVG9Mb2NhbChtb3Vz
ZUV2ZW50LT5hYnNvbHV0ZUxvY2F0aW9uKCksIGZhbHNlLCB0cnVlKSk7CisgICAgaWYgKG1vdXNl
RXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkubW91c2Vkb3duRXZlbnQgJiYgbW91c2VFdmVu
dC0+YnV0dG9uKCkgPT0gTGVmdEJ1dHRvbikgeworICAgICAgICBpZiAoYm94LT5ib3JkZXJCb3hS
ZWN0KCkuY29udGFpbnMobG9jYWwpKSB7CisgICAgICAgICAgICAvLyBUaGUgZm9sbG93aW5nIGZ1
bmN0aW9ucyBvZiBIVE1MSW5wdXRFbGVtZW50IG1heSBydW4gSmF2YVNjcmlwdAorICAgICAgICAg
ICAgLy8gY29kZSB3aGljaCBkZXRhY2hlcyB0aGlzIHNoYWRvdyBub2RlLiBXZSBuZWVkIHRvIHRh
a2UgYSByZWZlcmVuY2UKKyAgICAgICAgICAgIC8vIGFuZCBjaGVjayByZW5kZXJlcigpIGFmdGVy
IHN1Y2ggZnVuY3Rpb24gY2FsbHMuCisgICAgICAgICAgICBSZWZQdHI8Tm9kZT4gcHJvdGVjdG9y
KHRoaXMpOworICAgICAgICAgICAgaW5wdXQtPmZvY3VzKCk7CisgICAgICAgICAgICBpbnB1dC0+
c2VsZWN0KCk7CisgICAgICAgICAgICBpZiAocmVuZGVyZXIoKSkgeworICAgICAgICAgICAgICAg
IGlucHV0LT5zdGVwVXBGcm9tUmVuZGVyZXIobV91cERvd25TdGF0ZSA9PSBVcCA/IDEgOiAtMSk7
CisgICAgICAgICAgICAgICAgaWYgKHJlbmRlcmVyKCkpCisgICAgICAgICAgICAgICAgICAgIHN0
YXJ0UmVwZWF0aW5nVGltZXIoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGV2ZW50LT5z
ZXREZWZhdWx0SGFuZGxlZCgpOworICAgICAgICB9CisgICAgfSBlbHNlIGlmIChtb3VzZUV2ZW50
LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLm1vdXNldXBFdmVudCAmJiBtb3VzZUV2ZW50LT5idXR0
b24oKSA9PSBMZWZ0QnV0dG9uKQorICAgICAgICBzdG9wUmVwZWF0aW5nVGltZXIoKTsKKyAgICBl
bHNlIGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5tb3VzZW1vdmVFdmVudCkgewor
ICAgICAgICBpZiAoYm94LT5ib3JkZXJCb3hSZWN0KCkuY29udGFpbnMobG9jYWwpKSB7CisgICAg
ICAgICAgICBpZiAoIW1fY2FwdHVyaW5nKSB7CisgICAgICAgICAgICAgICAgaWYgKEZyYW1lKiBm
cmFtZSA9IGRvY3VtZW50KCktPmZyYW1lKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgZnJhbWUt
PmV2ZW50SGFuZGxlcigpLT5zZXRDYXB0dXJpbmdNb3VzZUV2ZW50c05vZGUodGhpcyk7CisgICAg
ICAgICAgICAgICAgICAgIG1fY2FwdHVyaW5nID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBVcERvd25TdGF0ZSBvbGRVcERvd25TdGF0ZSA9IG1f
dXBEb3duU3RhdGU7CisgICAgICAgICAgICBtX3VwRG93blN0YXRlID0gbG9jYWwueSgpIDwgYm94
LT5oZWlnaHQoKSAvIDIgPyBVcCA6IERvd247CisgICAgICAgICAgICBpZiAobV91cERvd25TdGF0
ZSAhPSBvbGRVcERvd25TdGF0ZSkKKyAgICAgICAgICAgICAgICByZW5kZXJlcigpLT5yZXBhaW50
KCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpZiAobV9jYXB0dXJpbmcpIHsKKyAg
ICAgICAgICAgICAgICBzdG9wUmVwZWF0aW5nVGltZXIoKTsKKyAgICAgICAgICAgICAgICBpZiAo
RnJhbWUqIGZyYW1lID0gZG9jdW1lbnQoKS0+ZnJhbWUoKSkgeworICAgICAgICAgICAgICAgICAg
ICBmcmFtZS0+ZXZlbnRIYW5kbGVyKCktPnNldENhcHR1cmluZ01vdXNlRXZlbnRzTm9kZSgwKTsK
KyAgICAgICAgICAgICAgICAgICAgbV9jYXB0dXJpbmcgPSBmYWxzZTsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoIWV2ZW50LT5k
ZWZhdWx0SGFuZGxlZCgpKQorICAgICAgICBIVE1MRGl2RWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFu
ZGxlcihldmVudCk7Cit9CisKK3ZvaWQgU3BpbkJ1dHRvbkVsZW1lbnQ6OnN0YXJ0UmVwZWF0aW5n
VGltZXIoKQoreworICAgIG1fcHJlc3NTdGFydGluZ1N0YXRlID0gbV91cERvd25TdGF0ZTsKKyAg
ICBTY3JvbGxiYXJUaGVtZSogdGhlbWUgPSBTY3JvbGxiYXJUaGVtZTo6bmF0aXZlVGhlbWUoKTsK
KyAgICBtX3JlcGVhdGluZ1RpbWVyLnN0YXJ0KHRoZW1lLT5pbml0aWFsQXV0b3Njcm9sbFRpbWVy
RGVsYXkoKSwgdGhlbWUtPmF1dG9zY3JvbGxUaW1lckRlbGF5KCkpOworfQorCit2b2lkIFNwaW5C
dXR0b25FbGVtZW50OjpzdG9wUmVwZWF0aW5nVGltZXIoKQoreworICAgIG1fcmVwZWF0aW5nVGlt
ZXIuc3RvcCgpOworfQorCit2b2lkIFNwaW5CdXR0b25FbGVtZW50OjpyZXBlYXRpbmdUaW1lckZp
cmVkKFRpbWVyPFNwaW5CdXR0b25FbGVtZW50PiopCit7CisgICAgSFRNTElucHV0RWxlbWVudCog
aW5wdXQgPSBzdGF0aWNfY2FzdDxIVE1MSW5wdXRFbGVtZW50Kj4oc2hhZG93QW5jZXN0b3JOb2Rl
KCkpOworICAgIGlmIChpbnB1dC0+ZGlzYWJsZWQoKSB8fCBpbnB1dC0+aXNSZWFkT25seUZvcm1D
b250cm9sKCkpCisgICAgICAgIHJldHVybjsKKyAgICAvLyBPbiBNYWMgT1MsIE5TU3RlcHBlciB1
cGRhdGVzIHRoZSB2YWx1ZSBmb3IgdGhlIGJ1dHRvbiB1bmRlciB0aGUgbW91c2UKKyAgICAvLyBj
dXJzb3IgcmVnYXJkbGVzcyBvZiB0aGUgYnV0dG9uIHByZXNzZWQgYXQgdGhlIGJlZ2lubmluZy4g
U28gdGhlCisgICAgLy8gZm9sbG93aW5nIGNoZWNrIGlzIG5vdCBuZWVkZWQgZm9yIE1hYyBPUy4K
KyNpZiAhT1MoTUFDX09TX1gpCisgICAgaWYgKG1fdXBEb3duU3RhdGUgIT0gbV9wcmVzc1N0YXJ0
aW5nU3RhdGUpCisgICAgICAgIHJldHVybjsKKyNlbmRpZgorICAgIGlucHV0LT5zdGVwVXBGcm9t
UmVuZGVyZXIobV91cERvd25TdGF0ZSA9PSBVcCA/IDEgOiAtMSk7Cit9CisKK3ZvaWQgU3BpbkJ1
dHRvbkVsZW1lbnQ6OnNldEhvdmVyZWQoYm9vbCBmbGFnKQoreworICAgIGlmICghaG92ZXJlZCgp
ICYmIGZsYWcpCisgICAgICAgIG1fdXBEb3duU3RhdGUgPSBJbmRldGVybWluYXRlOworICAgIFRl
eHRDb250cm9sSW5uZXJFbGVtZW50OjpzZXRIb3ZlcmVkKGZsYWcpOworfQorCisKKy8vIC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworI2lmIEVOQUJMRShJTlBVVF9TUEVFQ0gpCisKK2lu
bGluZSBJbnB1dEZpZWxkU3BlZWNoQnV0dG9uRWxlbWVudDo6SW5wdXRGaWVsZFNwZWVjaEJ1dHRv
bkVsZW1lbnQoSFRNTEVsZW1lbnQqIHNoYWRvd1BhcmVudCkKKyAgICA6IFRleHRDb250cm9sSW5u
ZXJFbGVtZW50KHNoYWRvd1BhcmVudC0+ZG9jdW1lbnQoKSwgc2hhZG93UGFyZW50KQorICAgICwg
bV9jYXB0dXJpbmcoZmFsc2UpCisgICAgLCBtX3N0YXRlKElkbGUpCisgICAgLCBtX2xpc3RlbmVy
SWQoZG9jdW1lbnQoKS0+cGFnZSgpLT5zcGVlY2hJbnB1dCgpLT5yZWdpc3Rlckxpc3RlbmVyKHRo
aXMpKQoreworfQorCitJbnB1dEZpZWxkU3BlZWNoQnV0dG9uRWxlbWVudDo6fklucHV0RmllbGRT
cGVlY2hCdXR0b25FbGVtZW50KCkKK3sKKyAgICBTcGVlY2hJbnB1dCogc3BlZWNoID0gc3BlZWNo
SW5wdXQoKTsKKyAgICBpZiAoc3BlZWNoICYmIG1fbGlzdGVuZXJJZCkgIHsgLy8gQ291bGQgYmUg
bnVsbCB3aGVuIHBhZ2UgaXMgdW5sb2FkaW5nLgorICAgICAgICBpZiAobV9zdGF0ZSAhPSBJZGxl
KQorICAgICAgICAgICAgc3BlZWNoLT5jYW5jZWxSZWNvZ25pdGlvbihtX2xpc3RlbmVySWQpOwor
ICAgICAgICBzcGVlY2gtPnVucmVnaXN0ZXJMaXN0ZW5lcihtX2xpc3RlbmVySWQpOworICAgIH0K
K30KKworUGFzc1JlZlB0cjxJbnB1dEZpZWxkU3BlZWNoQnV0dG9uRWxlbWVudD4gSW5wdXRGaWVs
ZFNwZWVjaEJ1dHRvbkVsZW1lbnQ6OmNyZWF0ZShIVE1MRWxlbWVudCogc2hhZG93UGFyZW50KQor
eworICAgIHJldHVybiBhZG9wdFJlZihuZXcgSW5wdXRGaWVsZFNwZWVjaEJ1dHRvbkVsZW1lbnQo
c2hhZG93UGFyZW50KSk7Cit9CisKK3ZvaWQgSW5wdXRGaWVsZFNwZWVjaEJ1dHRvbkVsZW1lbnQ6
OmRlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQqIGV2ZW50KQoreworICAgIC8vIEZvciBwcml2YWN5
IHJlYXNvbnMsIG9ubHkgYWxsb3cgY2xpY2tzIGRpcmVjdGx5IGNvbWluZyBmcm9tIHRoZSB1c2Vy
LgorICAgIGlmICghZXZlbnQtPmZyb21Vc2VyR2VzdHVyZSgpKSB7CisgICAgICAgIEhUTUxEaXZF
bGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKGV2ZW50KTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIC8vIFRoZSBjYWxsIHRvIGZvY3VzKCkgYmVsb3cgZGlzcGF0Y2hlcyBhIGZvY3Vz
IGV2ZW50LCBhbmQgYW4gZXZlbnQgaGFuZGxlciBpbiB0aGUgcGFnZSBtaWdodAorICAgIC8vIHJl
bW92ZSB0aGUgaW5wdXQgZWxlbWVudCBmcm9tIERPTS4gVG8gbWFrZSBzdXJlIGl0IHJlbWFpbnMg
dmFsaWQgdW50aWwgd2UgZmluaXNoIG91ciB3b3JrCisgICAgLy8gaGVyZSwgd2UgdGFrZSBhIHRl
bXBvcmFyeSByZWZlcmVuY2UuCisgICAgUmVmUHRyPEhUTUxJbnB1dEVsZW1lbnQ+IGlucHV0KHN0
YXRpY19jYXN0PEhUTUxJbnB1dEVsZW1lbnQqPihzaGFkb3dBbmNlc3Rvck5vZGUoKSkpOworCisg
ICAgLy8gT24gbW91c2UgZG93biwgc2VsZWN0IHRoZSB0ZXh0IGFuZCBzZXQgZm9jdXMuCisgICAg
aWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLm1vdXNlZG93bkV2ZW50ICYmIGV2ZW50
LT5pc01vdXNlRXZlbnQoKSAmJiBzdGF0aWNfY2FzdDxNb3VzZUV2ZW50Kj4oZXZlbnQpLT5idXR0
b24oKSA9PSBMZWZ0QnV0dG9uKSB7CisgICAgICAgIGlmIChyZW5kZXJlcigpICYmIHJlbmRlcmVy
KCktPnZpc2libGVUb0hpdFRlc3RpbmcoKSkgeworICAgICAgICAgICAgaWYgKEZyYW1lKiBmcmFt
ZSA9IGRvY3VtZW50KCktPmZyYW1lKCkpIHsKKyAgICAgICAgICAgICAgICBmcmFtZS0+ZXZlbnRI
YW5kbGVyKCktPnNldENhcHR1cmluZ01vdXNlRXZlbnRzTm9kZSh0aGlzKTsKKyAgICAgICAgICAg
ICAgICBtX2NhcHR1cmluZyA9IHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAg
ICAgUmVmUHRyPElucHV0RmllbGRTcGVlY2hCdXR0b25FbGVtZW50PiBob2xkUmVmQnV0dG9uKHRo
aXMpOworICAgICAgICBpbnB1dC0+Zm9jdXMoKTsKKyAgICAgICAgaW5wdXQtPnNlbGVjdCgpOwor
ICAgICAgICBldmVudC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsKKyAgICB9CisgICAgLy8gT24gbW91
c2UgdXAsIHJlbGVhc2UgY2FwdHVyZSBjbGVhbmx5LgorICAgIGlmIChldmVudC0+dHlwZSgpID09
IGV2ZW50TmFtZXMoKS5tb3VzZXVwRXZlbnQgJiYgZXZlbnQtPmlzTW91c2VFdmVudCgpICYmIHN0
YXRpY19jYXN0PE1vdXNlRXZlbnQqPihldmVudCktPmJ1dHRvbigpID09IExlZnRCdXR0b24pIHsK
KyAgICAgICAgaWYgKG1fY2FwdHVyaW5nICYmIHJlbmRlcmVyKCkgJiYgcmVuZGVyZXIoKS0+dmlz
aWJsZVRvSGl0VGVzdGluZygpKSB7CisgICAgICAgICAgICBpZiAoRnJhbWUqIGZyYW1lID0gZG9j
dW1lbnQoKS0+ZnJhbWUoKSkgeworICAgICAgICAgICAgICAgIGZyYW1lLT5ldmVudEhhbmRsZXIo
KS0+c2V0Q2FwdHVyaW5nTW91c2VFdmVudHNOb2RlKDApOworICAgICAgICAgICAgICAgIG1fY2Fw
dHVyaW5nID0gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBp
ZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkuY2xpY2tFdmVudCkgeworICAgICAgICBz
d2l0Y2ggKG1fc3RhdGUpIHsKKyAgICAgICAgY2FzZSBJZGxlOiB7CisgICAgICAgICAgICAgIEF0
b21pY1N0cmluZyBsYW5ndWFnZSA9IGlucHV0LT5jb21wdXRlSW5oZXJpdGVkTGFuZ3VhZ2UoKTsK
KyAgICAgICAgICAgICAgU3RyaW5nIGdyYW1tYXIgPSBpbnB1dC0+Z2V0QXR0cmlidXRlKHdlYmtp
dGdyYW1tYXJBdHRyKTsKKyAgICAgICAgICAgICAgSW50UmVjdCByZWN0ID0gaW5wdXQtPnJlbmRl
cmVyKCktPmFic29sdXRlQm91bmRpbmdCb3hSZWN0KCk7CisgICAgICAgICAgICAgIGlmIChzcGVl
Y2hJbnB1dCgpLT5zdGFydFJlY29nbml0aW9uKG1fbGlzdGVuZXJJZCwgcmVjdCwgbGFuZ3VhZ2Us
IGdyYW1tYXIsIGRvY3VtZW50KCktPnNlY3VyaXR5T3JpZ2luKCkpKQorICAgICAgICAgICAgICAg
ICAgc2V0U3RhdGUoUmVjb3JkaW5nKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIFJlY29yZGluZzoKKyAgICAgICAgICAgIHNwZWVjaElucHV0KCktPnN0
b3BSZWNvcmRpbmcobV9saXN0ZW5lcklkKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBj
YXNlIFJlY29nbml6aW5nOgorICAgICAgICAgICAgLy8gTm90aGluZyB0byBkbyBoZXJlLCB3ZSB3
aWxsIGNvbnRpbnVlIHRvIHdhaXQgZm9yIHJlc3VsdHMuCisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgfQorICAgICAgICBldmVudC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsKKyAgICB9CisKKyAg
ICBpZiAoIWV2ZW50LT5kZWZhdWx0SGFuZGxlZCgpKQorICAgICAgICBIVE1MRGl2RWxlbWVudDo6
ZGVmYXVsdEV2ZW50SGFuZGxlcihldmVudCk7Cit9CisKK3ZvaWQgSW5wdXRGaWVsZFNwZWVjaEJ1
dHRvbkVsZW1lbnQ6OnNldFN0YXRlKFNwZWVjaElucHV0U3RhdGUgc3RhdGUpCit7CisgICAgaWYg
KG1fc3RhdGUgIT0gc3RhdGUpIHsKKyAgICAgICAgbV9zdGF0ZSA9IHN0YXRlOworICAgICAgICBz
aGFkb3dBbmNlc3Rvck5vZGUoKS0+cmVuZGVyZXIoKS0+cmVwYWludCgpOworICAgIH0KK30KKwor
U3BlZWNoSW5wdXQqIElucHV0RmllbGRTcGVlY2hCdXR0b25FbGVtZW50OjpzcGVlY2hJbnB1dCgp
Cit7CisgICAgcmV0dXJuIGRvY3VtZW50KCktPnBhZ2UoKSA/IGRvY3VtZW50KCktPnBhZ2UoKS0+
c3BlZWNoSW5wdXQoKSA6IDA7Cit9CisKK3ZvaWQgSW5wdXRGaWVsZFNwZWVjaEJ1dHRvbkVsZW1l
bnQ6OmRpZENvbXBsZXRlUmVjb3JkaW5nKGludCkKK3sKKyAgICBzZXRTdGF0ZShSZWNvZ25pemlu
Zyk7Cit9CisKK3ZvaWQgSW5wdXRGaWVsZFNwZWVjaEJ1dHRvbkVsZW1lbnQ6OmRpZENvbXBsZXRl
UmVjb2duaXRpb24oaW50KQoreworICAgIHNldFN0YXRlKElkbGUpOworfQorCit2b2lkIElucHV0
RmllbGRTcGVlY2hCdXR0b25FbGVtZW50OjpzZXRSZWNvZ25pdGlvblJlc3VsdChpbnQsIGNvbnN0
IFNwZWVjaElucHV0UmVzdWx0QXJyYXkmIHJlc3VsdHMpCit7CisgICAgbV9yZXN1bHRzID0gcmVz
dWx0czsKKworICAgIC8vIFRoZSBjYWxsIHRvIHNldFZhbHVlKCkgYmVsb3cgZGlzcGF0Y2hlcyBh
biBldmVudCwgYW5kIGFuIGV2ZW50IGhhbmRsZXIgaW4gdGhlIHBhZ2UgbWlnaHQKKyAgICAvLyBy
ZW1vdmUgdGhlIGlucHV0IGVsZW1lbnQgZnJvbSBET00uIFRvIG1ha2Ugc3VyZSBpdCByZW1haW5z
IHZhbGlkIHVudGlsIHdlIGZpbmlzaCBvdXIgd29yaworICAgIC8vIGhlcmUsIHdlIHRha2UgYSB0
ZW1wb3JhcnkgcmVmZXJlbmNlLgorICAgIFJlZlB0cjxIVE1MSW5wdXRFbGVtZW50PiBpbnB1dChz
dGF0aWNfY2FzdDxIVE1MSW5wdXRFbGVtZW50Kj4oc2hhZG93QW5jZXN0b3JOb2RlKCkpKTsKKyAg
ICBSZWZQdHI8SW5wdXRGaWVsZFNwZWVjaEJ1dHRvbkVsZW1lbnQ+IGhvbGRSZWZCdXR0b24odGhp
cyk7CisgICAgaW5wdXQtPnNldFZhbHVlKHJlc3VsdHMuaXNFbXB0eSgpID8gIiIgOiByZXN1bHRz
WzBdLT51dHRlcmFuY2UoKSk7CisgICAgaW5wdXQtPmRpc3BhdGNoRXZlbnQoU3BlZWNoSW5wdXRF
dmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS53ZWJraXRzcGVlY2hjaGFuZ2VFdmVudCwgcmVzdWx0
cykpOworCisgICAgLy8gQ2hlY2sgYmVmb3JlIGFjY2Vzc2luZyB0aGUgcmVuZGVyZXIgYXMgdGhl
IGFib3ZlIGV2ZW50IGNvdWxkIGhhdmUgcG90ZW50aWFsbHkgdHVybmVkIG9mZgorICAgIC8vIHNw
ZWVjaCBpbiB0aGUgaW5wdXQgZWxlbWVudCwgaGVuY2UgcmVtb3ZpbmcgdGhpcyBidXR0b24gYW5k
IHJlbmRlcmVyIGZyb20gdGhlIGhpZXJhcmNoeS4KKyAgICBpZiAocmVuZGVyZXIoKSkKKyAgICAg
ICAgcmVuZGVyZXIoKS0+cmVwYWludCgpOworfQorCit2b2lkIElucHV0RmllbGRTcGVlY2hCdXR0
b25FbGVtZW50OjpkZXRhY2goKQoreworICAgIGlmIChtX2NhcHR1cmluZykgeworICAgICAgICBp
ZiAoRnJhbWUqIGZyYW1lID0gZG9jdW1lbnQoKS0+ZnJhbWUoKSkKKyAgICAgICAgICAgIGZyYW1l
LT5ldmVudEhhbmRsZXIoKS0+c2V0Q2FwdHVyaW5nTW91c2VFdmVudHNOb2RlKDApOworICAgIH0K
KworICAgIGlmIChtX2xpc3RlbmVySWQpIHsKKyAgICAgICAgaWYgKG1fc3RhdGUgIT0gSWRsZSkK
KyAgICAgICAgICAgIHNwZWVjaElucHV0KCktPmNhbmNlbFJlY29nbml0aW9uKG1fbGlzdGVuZXJJ
ZCk7CisgICAgICAgIHNwZWVjaElucHV0KCktPnVucmVnaXN0ZXJMaXN0ZW5lcihtX2xpc3RlbmVy
SWQpOworICAgICAgICBtX2xpc3RlbmVySWQgPSAwOworICAgIH0KKworICAgIFRleHRDb250cm9s
SW5uZXJFbGVtZW50OjpkZXRhY2goKTsKK30KKworI2VuZGlmIC8vIEVOQUJMRShJTlBVVF9TUEVF
Q0gpCisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L1RleHRDb250
cm9sSW5uZXJFbGVtZW50cy5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvVGV4dENvbnRy
b2xJbm5lckVsZW1lbnRzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGJh
Nzg1NwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L1RleHRD
b250cm9sSW5uZXJFbGVtZW50cy5oCkBAIC0wLDAgKzEsMTU4IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDA2LCAyMDA4LCAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIs
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworIAorI2lmbmRlZiBUZXh0Q29udHJvbElubmVyRWxlbWVudHNfaAorI2RlZmluZSBUZXh0Q29u
dHJvbElubmVyRWxlbWVudHNfaAorCisjaW5jbHVkZSAiSFRNTERpdkVsZW1lbnQuaCIKKyNpbmNs
dWRlICJTcGVlY2hJbnB1dExpc3RlbmVyLmgiCisjaW5jbHVkZSAiVGltZXIuaCIKKyNpbmNsdWRl
IDx3dGYvRm9yd2FyZC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFNwZWVjaElu
cHV0OworCitjbGFzcyBUZXh0Q29udHJvbElubmVyRWxlbWVudCA6IHB1YmxpYyBIVE1MRGl2RWxl
bWVudCB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8VGV4dENvbnRyb2xJbm5lckVs
ZW1lbnQ+IGNyZWF0ZShIVE1MRWxlbWVudCogc2hhZG93UGFyZW50KTsKKyAgICB2aXJ0dWFsIHZv
aWQgZGV0YWNoKCk7CisKKyAgICB2b2lkIGF0dGFjaElubmVyRWxlbWVudChOb2RlKiwgUGFzc1Jl
ZlB0cjxSZW5kZXJTdHlsZT4sIFJlbmRlckFyZW5hKik7CisKK3Byb3RlY3RlZDoKKyAgICBUZXh0
Q29udHJvbElubmVyRWxlbWVudChEb2N1bWVudCosIEhUTUxFbGVtZW50KiBzaGFkb3dQYXJlbnQg
PSAwKTsKKworcHJpdmF0ZToKKyAgICB2aXJ0dWFsIGJvb2wgaXNNb3VzZUZvY3VzYWJsZSgpIGNv
bnN0IHsgcmV0dXJuIGZhbHNlOyB9Cit9OworCitjbGFzcyBUZXh0Q29udHJvbElubmVyVGV4dEVs
ZW1lbnQgOiBwdWJsaWMgVGV4dENvbnRyb2xJbm5lckVsZW1lbnQgeworcHVibGljOgorICAgIHN0
YXRpYyBQYXNzUmVmUHRyPFRleHRDb250cm9sSW5uZXJUZXh0RWxlbWVudD4gY3JlYXRlKERvY3Vt
ZW50KiwgSFRNTEVsZW1lbnQqIHNoYWRvd1BhcmVudCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgZGVm
YXVsdEV2ZW50SGFuZGxlcihFdmVudCopOworCitwcml2YXRlOgorICAgIFRleHRDb250cm9sSW5u
ZXJUZXh0RWxlbWVudChEb2N1bWVudCosIEhUTUxFbGVtZW50KiBzaGFkb3dQYXJlbnQpOworICAg
IHZpcnR1YWwgUmVuZGVyT2JqZWN0KiBjcmVhdGVSZW5kZXJlcihSZW5kZXJBcmVuYSosIFJlbmRl
clN0eWxlKik7ICAKK307CisKK2NsYXNzIFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRvbkVsZW1lbnQg
OiBwdWJsaWMgVGV4dENvbnRyb2xJbm5lckVsZW1lbnQgeworcHVibGljOgorICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRvbkVsZW1lbnQ+IGNyZWF0ZShEb2N1bWVu
dCopOworCisgICAgdmlydHVhbCB2b2lkIGRlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQqKTsKKwor
cHJpdmF0ZToKKyAgICBTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b25FbGVtZW50KERvY3VtZW50Kik7
Cit9OworCitjbGFzcyBTZWFyY2hGaWVsZENhbmNlbEJ1dHRvbkVsZW1lbnQgOiBwdWJsaWMgVGV4
dENvbnRyb2xJbm5lckVsZW1lbnQgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNl
YXJjaEZpZWxkQ2FuY2VsQnV0dG9uRWxlbWVudD4gY3JlYXRlKERvY3VtZW50Kik7CisKKyAgICB2
aXJ0dWFsIHZvaWQgZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCopOworCitwcml2YXRlOgorICAg
IFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uRWxlbWVudChEb2N1bWVudCopOworCisgICAgdmlydHVh
bCB2b2lkIGRldGFjaCgpOworCisgICAgYm9vbCBtX2NhcHR1cmluZzsKK307CisKK2NsYXNzIFNw
aW5CdXR0b25FbGVtZW50IDogcHVibGljIFRleHRDb250cm9sSW5uZXJFbGVtZW50IHsKK3B1Ymxp
YzoKKyAgICBlbnVtIFVwRG93blN0YXRlIHsKKyAgICAgICAgSW5kZXRlcm1pbmF0ZSwgLy8gSG92
ZXJlZCwgYnV0IHRoZSBldmVudCBpcyBub3QgaGFuZGxlZC4KKyAgICAgICAgRG93biwKKyAgICAg
ICAgVXAsCisgICAgfTsKKworICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNwaW5CdXR0b25FbGVtZW50
PiBjcmVhdGUoSFRNTEVsZW1lbnQqKTsKKyAgICBVcERvd25TdGF0ZSB1cERvd25TdGF0ZSgpIGNv
bnN0IHsgcmV0dXJuIG1fdXBEb3duU3RhdGU7IH0KKworcHJpdmF0ZToKKyAgICBTcGluQnV0dG9u
RWxlbWVudChIVE1MRWxlbWVudCopOworCisgICAgdmlydHVhbCB2b2lkIGRldGFjaCgpOworICAg
IHZpcnR1YWwgYm9vbCBpc1NwaW5CdXR0b25FbGVtZW50KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsg
fQorICAgIC8vIEZJWE1FOiBzaGFkb3dBbmNlc3Rvck5vZGUoKSBzaG91bGQgYmUgY29uc3QuCisg
ICAgdmlydHVhbCBib29sIGlzRW5hYmxlZEZvcm1Db250cm9sKCkgY29uc3QgeyByZXR1cm4gc3Rh
dGljX2Nhc3Q8RWxlbWVudCo+KGNvbnN0X2Nhc3Q8U3BpbkJ1dHRvbkVsZW1lbnQqPih0aGlzKS0+
c2hhZG93QW5jZXN0b3JOb2RlKCkpLT5pc0VuYWJsZWRGb3JtQ29udHJvbCgpOyB9CisgICAgdmly
dHVhbCBib29sIGlzUmVhZE9ubHlGb3JtQ29udHJvbCgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19j
YXN0PEVsZW1lbnQqPihjb25zdF9jYXN0PFNwaW5CdXR0b25FbGVtZW50Kj4odGhpcyktPnNoYWRv
d0FuY2VzdG9yTm9kZSgpKS0+aXNSZWFkT25seUZvcm1Db250cm9sKCk7IH0KKyAgICB2aXJ0dWFs
IHZvaWQgZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCopOworICAgIHZvaWQgc3RhcnRSZXBlYXRp
bmdUaW1lcigpOworICAgIHZvaWQgc3RvcFJlcGVhdGluZ1RpbWVyKCk7CisgICAgdm9pZCByZXBl
YXRpbmdUaW1lckZpcmVkKFRpbWVyPFNwaW5CdXR0b25FbGVtZW50PiopOworICAgIHZpcnR1YWwg
dm9pZCBzZXRIb3ZlcmVkKGJvb2wgPSB0cnVlKTsKKworICAgIGJvb2wgbV9jYXB0dXJpbmc7Cisg
ICAgVXBEb3duU3RhdGUgbV91cERvd25TdGF0ZTsKKyAgICBVcERvd25TdGF0ZSBtX3ByZXNzU3Rh
cnRpbmdTdGF0ZTsKKyAgICBUaW1lcjxTcGluQnV0dG9uRWxlbWVudD4gbV9yZXBlYXRpbmdUaW1l
cjsKK307CisKKyNpZiBFTkFCTEUoSU5QVVRfU1BFRUNIKQorCitjbGFzcyBJbnB1dEZpZWxkU3Bl
ZWNoQnV0dG9uRWxlbWVudAorICAgIDogcHVibGljIFRleHRDb250cm9sSW5uZXJFbGVtZW50LAor
ICAgICAgcHVibGljIFNwZWVjaElucHV0TGlzdGVuZXIgeworcHVibGljOgorICAgIGVudW0gU3Bl
ZWNoSW5wdXRTdGF0ZSB7CisgICAgICAgIElkbGUsCisgICAgICAgIFJlY29yZGluZywKKyAgICAg
ICAgUmVjb2duaXppbmcsCisgICAgfTsKKworICAgIHN0YXRpYyBQYXNzUmVmUHRyPElucHV0Rmll
bGRTcGVlY2hCdXR0b25FbGVtZW50PiBjcmVhdGUoSFRNTEVsZW1lbnQqKTsKKyAgICB2aXJ0dWFs
IH5JbnB1dEZpZWxkU3BlZWNoQnV0dG9uRWxlbWVudCgpOworCisgICAgdmlydHVhbCB2b2lkIGRl
dGFjaCgpOworICAgIHZpcnR1YWwgdm9pZCBkZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50Kik7Cisg
ICAgU3BlZWNoSW5wdXRTdGF0ZSBzdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGU7IH0KKwor
ICAgIC8vIFNwZWVjaElucHV0TGlzdGVuZXIgbWV0aG9kcy4KKyAgICB2b2lkIGRpZENvbXBsZXRl
UmVjb3JkaW5nKGludCk7CisgICAgdm9pZCBkaWRDb21wbGV0ZVJlY29nbml0aW9uKGludCk7Cisg
ICAgdm9pZCBzZXRSZWNvZ25pdGlvblJlc3VsdChpbnQsIGNvbnN0IFNwZWVjaElucHV0UmVzdWx0
QXJyYXkmKTsKKworcHJpdmF0ZToKKyAgICBJbnB1dEZpZWxkU3BlZWNoQnV0dG9uRWxlbWVudChI
VE1MRWxlbWVudCopOworICAgIFNwZWVjaElucHV0KiBzcGVlY2hJbnB1dCgpOworICAgIHZvaWQg
c2V0U3RhdGUoU3BlZWNoSW5wdXRTdGF0ZSBzdGF0ZSk7CisKKyAgICBib29sIG1fY2FwdHVyaW5n
OworICAgIFNwZWVjaElucHV0U3RhdGUgbV9zdGF0ZTsKKyAgICBpbnQgbV9saXN0ZW5lcklkOwor
ICAgIFNwZWVjaElucHV0UmVzdWx0QXJyYXkgbV9yZXN1bHRzOworfTsKKworI2VuZGlmIC8vIEVO
QUJMRShJTlBVVF9TUEVFQ0gpCisKK30gLy8gbmFtZXNwYWNlCisKKyNlbmRpZgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5l
LmNwcAppbmRleCA0ZWQyNTVlLi4yOWU0YWEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmNwcApAQCAtNTEsNiAr
NTEsMjMgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVz
OwogCitWaXNpYmxlUG9zaXRpb24gUmVuZGVyVGV4dENvbnRyb2xJbm5lckJsb2NrOjpwb3NpdGlv
bkZvclBvaW50KGNvbnN0IEludFBvaW50JiBwb2ludCkKK3sKKyAgICBJbnRQb2ludCBjb250ZW50
c1BvaW50KHBvaW50KTsKKworICAgIC8vIE11bHRpbGluZSB0ZXh0IGNvbnRyb2xzIGhhdmUgdGhl
IHNjcm9sbCBvbiBzaGFkb3dBbmNlc3Rvck5vZGUsIHNvIHdlIG5lZWQgdG8gdGFrZSB0aGF0Cisg
ICAgLy8gaW50byBhY2NvdW50IGhlcmUuCisgICAgaWYgKG1fbXVsdGlMaW5lKSB7CisgICAgICAg
IFJlbmRlclRleHRDb250cm9sKiByZW5kZXJlciA9IHRvUmVuZGVyVGV4dENvbnRyb2wobm9kZSgp
LT5zaGFkb3dBbmNlc3Rvck5vZGUoKS0+cmVuZGVyZXIoKSk7CisgICAgICAgIGlmIChyZW5kZXJl
ci0+aGFzT3ZlcmZsb3dDbGlwKCkpCisgICAgICAgICAgICBjb250ZW50c1BvaW50ICs9IHJlbmRl
cmVyLT5sYXllcigpLT5zY3JvbGxlZENvbnRlbnRPZmZzZXQoKTsKKyAgICB9CisKKyAgICByZXR1
cm4gUmVuZGVyQmxvY2s6OnBvc2l0aW9uRm9yUG9pbnQoY29udGVudHNQb2ludCk7Cit9CisKKy8v
IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6UmVu
ZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lKE5vZGUqIG5vZGUsIGJvb2wgcGxhY2Vob2xkZXJWaXNp
YmxlKQogICAgIDogUmVuZGVyVGV4dENvbnRyb2wobm9kZSwgcGxhY2Vob2xkZXJWaXNpYmxlKQog
ICAgICwgbV9zZWFyY2hQb3B1cElzVmlzaWJsZShmYWxzZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuaCBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuaAppbmRleCA2Yjk5
ZjU5Li43ODVhZWUzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
VGV4dENvbnRyb2xTaW5nbGVMaW5lLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclRleHRDb250cm9sU2luZ2xlTGluZS5oCkBAIC0xNzQsNiArMTc0LDE4IEBAIGlubGluZSBS
ZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUqIHRvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5l
KFJlbmRlck9iamVjdCoKIC8vIFRoaXMgd2lsbCBjYXRjaCBhbnlvbmUgZG9pbmcgYW4gdW5uZWNl
c3NhcnkgY2FzdC4KIHZvaWQgdG9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUoY29uc3QgUmVu
ZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lKik7CiAKKworY2xhc3MgUmVuZGVyVGV4dENvbnRyb2xJ
bm5lckJsb2NrIDogcHVibGljIFJlbmRlckJsb2NrIHsKK3B1YmxpYzoKKyAgICBSZW5kZXJUZXh0
Q29udHJvbElubmVyQmxvY2soTm9kZSogbm9kZSwgYm9vbCBpc011bHRpTGluZSkgOiBSZW5kZXJC
bG9jayhub2RlKSwgbV9tdWx0aUxpbmUoaXNNdWx0aUxpbmUpIHsgfQorCitwcml2YXRlOgorICAg
IHZpcnR1YWwgYm9vbCBoYXNMaW5lSWZFbXB0eSgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KKyAg
ICB2aXJ0dWFsIFZpc2libGVQb3NpdGlvbiBwb3NpdGlvbkZvclBvaW50KGNvbnN0IEludFBvaW50
Jik7CisKKyAgICBib29sIG1fbXVsdGlMaW5lOworfTsKKwogfQogCiAjZW5kaWYKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0Q29udHJvbElubmVyRWxlbWVudHMuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1RleHRDb250cm9sSW5uZXJFbGVtZW50cy5jcHAK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDExNjI5OTkuLjAwMDAwMDAKLS0tIGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1RleHRDb250cm9sSW5uZXJFbGVtZW50cy5jcHAKKysrIC9k
ZXYvbnVsbApAQCAtMSw1MzUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAw
OCwgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0g
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAi
Y29uZmlnLmgiCi0jaW5jbHVkZSAiVGV4dENvbnRyb2xJbm5lckVsZW1lbnRzLmgiCi0KLSNpbmNs
dWRlICJCZWZvcmVUZXh0SW5zZXJ0ZWRFdmVudC5oIgotI2luY2x1ZGUgIkRvY3VtZW50LmgiCi0j
aW5jbHVkZSAiRXZlbnRIYW5kbGVyLmgiCi0jaW5jbHVkZSAiRXZlbnROYW1lcy5oIgotI2luY2x1
ZGUgIkZyYW1lLmgiCi0jaW5jbHVkZSAiSFRNTElucHV0RWxlbWVudC5oIgotI2luY2x1ZGUgIkhU
TUxOYW1lcy5oIgotI2luY2x1ZGUgIkhUTUxUZXh0QXJlYUVsZW1lbnQuaCIKLSNpbmNsdWRlICJN
b3VzZUV2ZW50LmgiCi0jaW5jbHVkZSAiUGFnZS5oIgotI2luY2x1ZGUgIlJlbmRlckxheWVyLmgi
Ci0jaW5jbHVkZSAiUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmgiCi0jaW5jbHVkZSAiU2Ny
b2xsYmFyVGhlbWUuaCIKLSNpbmNsdWRlICJTcGVlY2hJbnB1dC5oIgotI2luY2x1ZGUgIlNwZWVj
aElucHV0RXZlbnQuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi11c2luZyBuYW1lc3BhY2Ug
SFRNTE5hbWVzOwotCi1jbGFzcyBSZW5kZXJUZXh0Q29udHJvbElubmVyQmxvY2sgOiBwdWJsaWMg
UmVuZGVyQmxvY2sgewotcHVibGljOgotICAgIFJlbmRlclRleHRDb250cm9sSW5uZXJCbG9jayhO
b2RlKiBub2RlLCBib29sIGlzTXVsdGlMaW5lKSA6IFJlbmRlckJsb2NrKG5vZGUpLCBtX211bHRp
TGluZShpc011bHRpTGluZSkgeyB9Ci0KLXByaXZhdGU6Ci0gICAgdmlydHVhbCBib29sIGhhc0xp
bmVJZkVtcHR5KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQotICAgIHZpcnR1YWwgVmlzaWJsZVBv
c2l0aW9uIHBvc2l0aW9uRm9yUG9pbnQoY29uc3QgSW50UG9pbnQmKTsKLQotICAgIGJvb2wgbV9t
dWx0aUxpbmU7Ci19OwotCi1WaXNpYmxlUG9zaXRpb24gUmVuZGVyVGV4dENvbnRyb2xJbm5lckJs
b2NrOjpwb3NpdGlvbkZvclBvaW50KGNvbnN0IEludFBvaW50JiBwb2ludCkKLXsKLSAgICBJbnRQ
b2ludCBjb250ZW50c1BvaW50KHBvaW50KTsKLQotICAgIC8vIE11bHRpbGluZSB0ZXh0IGNvbnRy
b2xzIGhhdmUgdGhlIHNjcm9sbCBvbiBzaGFkb3dBbmNlc3Rvck5vZGUsIHNvIHdlIG5lZWQgdG8g
dGFrZSB0aGF0Ci0gICAgLy8gaW50byBhY2NvdW50IGhlcmUuCi0gICAgaWYgKG1fbXVsdGlMaW5l
KSB7Ci0gICAgICAgIFJlbmRlclRleHRDb250cm9sKiByZW5kZXJlciA9IHRvUmVuZGVyVGV4dENv
bnRyb2wobm9kZSgpLT5zaGFkb3dBbmNlc3Rvck5vZGUoKS0+cmVuZGVyZXIoKSk7Ci0gICAgICAg
IGlmIChyZW5kZXJlci0+aGFzT3ZlcmZsb3dDbGlwKCkpCi0gICAgICAgICAgICBjb250ZW50c1Bv
aW50ICs9IHJlbmRlcmVyLT5sYXllcigpLT5zY3JvbGxlZENvbnRlbnRPZmZzZXQoKTsKLSAgICB9
Ci0KLSAgICByZXR1cm4gUmVuZGVyQmxvY2s6OnBvc2l0aW9uRm9yUG9pbnQoY29udGVudHNQb2lu
dCk7Ci19Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotVGV4dENvbnRyb2xJ
bm5lckVsZW1lbnQ6OlRleHRDb250cm9sSW5uZXJFbGVtZW50KERvY3VtZW50KiBkb2N1bWVudCwg
SFRNTEVsZW1lbnQqIHNoYWRvd1BhcmVudCkKLSAgICA6IEhUTUxEaXZFbGVtZW50KGRpdlRhZywg
ZG9jdW1lbnQpCi17Ci0gICAgc2V0U2hhZG93SG9zdChzaGFkb3dQYXJlbnQpOwotfQotCi1QYXNz
UmVmUHRyPFRleHRDb250cm9sSW5uZXJFbGVtZW50PiBUZXh0Q29udHJvbElubmVyRWxlbWVudDo6
Y3JlYXRlKEhUTUxFbGVtZW50KiBzaGFkb3dQYXJlbnQpCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVm
KG5ldyBUZXh0Q29udHJvbElubmVyRWxlbWVudChzaGFkb3dQYXJlbnQtPmRvY3VtZW50KCksIHNo
YWRvd1BhcmVudCkpOwotfQotCi12b2lkIFRleHRDb250cm9sSW5uZXJFbGVtZW50OjphdHRhY2hJ
bm5lckVsZW1lbnQoTm9kZSogcGFyZW50LCBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBzdHlsZSwg
UmVuZGVyQXJlbmEqIGFyZW5hKQotewotICAgIC8vIFdoZW4gYWRkaW5nIHRoZXNlIGVsZW1lbnRz
LCBjcmVhdGUgdGhlIHJlbmRlcmVyICYgc3R5bGUgZmlyc3QgYmVmb3JlIGFkZGluZyB0byB0aGUg
RE9NLgotICAgIC8vIE90aGVyd2lzZSwgdGhlIHJlbmRlciB0cmVlIHdpbGwgY3JlYXRlIHNvbWUg
YW5vbnltb3VzIGJsb2NrcyB0aGF0IHdpbGwgbWVzcyB1cCBvdXIgbGF5b3V0LgotCi0gICAgLy8g
Q3JlYXRlIHRoZSByZW5kZXJlciB3aXRoIHRoZSBzcGVjaWZpZWQgc3R5bGUKLSAgICBSZW5kZXJP
YmplY3QqIHJlbmRlcmVyID0gY3JlYXRlUmVuZGVyZXIoYXJlbmEsIHN0eWxlLmdldCgpKTsKLSAg
ICBpZiAocmVuZGVyZXIpIHsKLSAgICAgICAgc2V0UmVuZGVyZXIocmVuZGVyZXIpOwotICAgICAg
ICByZW5kZXJlci0+c2V0U3R5bGUoc3R5bGUpOwotICAgIH0KLQotICAgIC8vIFNldCB0aGVzZSBl
eHBsaWNpdGx5IHNpbmNlIHRoaXMgbm9ybWFsbHkgaGFwcGVucyBkdXJpbmcgYW4gYXR0YWNoKCkK
LSAgICBzZXRBdHRhY2hlZCgpOwotICAgIHNldEluRG9jdW1lbnQoKTsKLQotICAgIC8vIEZvciBl
bGVtZW50cyBub3QgeWV0IGluIHNoYWRvdyBET00sIGFkZCB0aGUgbm9kZSB0byB0aGUgRE9NIG5v
cm1hbGx5LgotICAgIGlmICghaXNTaGFkb3dSb290KCkpIHsKLSAgICAgICAgLy8gRklYTUU6IFRo
aXMgY29kZSBzZWVtcyB2ZXJ5IHdyb25nLiAgV2h5IGFyZSB3ZSBtYWdpY2FsbHkgYWRkaW5nIHx0
aGlzfCB0byB0aGUgRE9NIGhlcmU/Ci0gICAgICAgIC8vICAgICAgICBXZSBzaG91bGRuJ3QgYmUg
Y2FsbGluZyBwYXJzZXIgQVBJIG1ldGhvZHMgb3V0c2lkZSBvZiB0aGUgcGFyc2VyIQotICAgICAg
ICBwYXJlbnQtPmRlcHJlY2F0ZWRQYXJzZXJBZGRDaGlsZCh0aGlzKTsKLSAgICB9Ci0KLSAgICAv
LyBBZGQgdGhlIHJlbmRlcmVyIHRvIHRoZSByZW5kZXIgdHJlZQotICAgIGlmIChyZW5kZXJlcikK
LSAgICAgICAgcGFyZW50LT5yZW5kZXJlcigpLT5hZGRDaGlsZChyZW5kZXJlcik7Ci19Ci0KLXZv
aWQgVGV4dENvbnRyb2xJbm5lckVsZW1lbnQ6OmRldGFjaCgpCi17Ci0gICAgSFRNTERpdkVsZW1l
bnQ6OmRldGFjaCgpOwotICAgIC8vIEZJWE1FOiBSZW1vdmUgb25jZSBzaGFkb3cgRE9NIHVzZXMg
RWxlbWVudDo6c2V0U2hhZG93Um9vdCgpLgotICAgIGlmIChzaGFkb3dIb3N0KCkpCi0gICAgICAg
IHNldFNoYWRvd0hvc3QoMCk7Ci19Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
LQotaW5saW5lIFRleHRDb250cm9sSW5uZXJUZXh0RWxlbWVudDo6VGV4dENvbnRyb2xJbm5lclRl
eHRFbGVtZW50KERvY3VtZW50KiBkb2N1bWVudCwgSFRNTEVsZW1lbnQqIHNoYWRvd1BhcmVudCkK
LSAgICA6IFRleHRDb250cm9sSW5uZXJFbGVtZW50KGRvY3VtZW50LCBzaGFkb3dQYXJlbnQpCi17
Ci19Ci0KLVBhc3NSZWZQdHI8VGV4dENvbnRyb2xJbm5lclRleHRFbGVtZW50PiBUZXh0Q29udHJv
bElubmVyVGV4dEVsZW1lbnQ6OmNyZWF0ZShEb2N1bWVudCogZG9jdW1lbnQsIEhUTUxFbGVtZW50
KiBzaGFkb3dQYXJlbnQpCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBUZXh0Q29udHJvbElu
bmVyVGV4dEVsZW1lbnQoZG9jdW1lbnQsIHNoYWRvd1BhcmVudCkpOwotfQotCi12b2lkIFRleHRD
b250cm9sSW5uZXJUZXh0RWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCogZXZlbnQp
Ci17Ci0gICAgLy8gRklYTUU6IEluIHRoZSBmdXR1cmUsIHdlIHNob3VsZCBhZGQgYSB3YXkgdG8g
aGF2ZSBkZWZhdWx0IGV2ZW50IGxpc3RlbmVycy4KLSAgICAvLyBUaGVuIHdlIHdvdWxkIGFkZCBv
bmUgdG8gdGhlIHRleHQgZmllbGQncyBpbm5lciBkaXYsIGFuZCB3ZSB3b3VsZG4ndCBuZWVkIHRo
aXMgc3ViY2xhc3MuCi0gICAgLy8gT3IgcG9zc2libHkgd2UgY291bGQganVzdCB1c2UgYSBub3Jt
YWwgZXZlbnQgbGlzdGVuZXIuCi0gICAgaWYgKGV2ZW50LT5pc0JlZm9yZVRleHRJbnNlcnRlZEV2
ZW50KCkgfHwgZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkud2Via2l0RWRpdGFibGVDb250
ZW50Q2hhbmdlZEV2ZW50KSB7Ci0gICAgICAgIE5vZGUqIHNoYWRvd0FuY2VzdG9yID0gc2hhZG93
QW5jZXN0b3JOb2RlKCk7Ci0gICAgICAgIC8vIEEgVGV4dENvbnRyb2xJbm5lclRleHRFbGVtZW50
IGNhbiBiZSBpdHMgb3duIHNoYWRvdyBhbmNlc3RvciBpZiBpdHMgYmVlbiBkZXRhY2hlZCwgYnV0
IGtlcHQgYWxpdmUgYnkgYW4gRWRpdENvbW1hbmQuCi0gICAgICAgIC8vIEluIHRoaXMgY2FzZSwg
YW4gdW5kby9yZWRvIGNhbiBjYXVzZSBldmVudHMgdG8gYmUgc2VudCB0byB0aGUgVGV4dENvbnRy
b2xJbm5lclRleHRFbGVtZW50LiAgCi0gICAgICAgIC8vIFRvIHByZXZlbnQgYW4gaW5maW5pdGUg
bG9vcCwgd2UgbXVzdCBjaGVjayBmb3IgdGhpcyBjYXNlIGJlZm9yZSBzZW5kaW5nIHRoZSBldmVu
dCB1cCB0aGUgY2hhaW4uCi0gICAgICAgIGlmIChzaGFkb3dBbmNlc3RvciAmJiBzaGFkb3dBbmNl
c3RvciAhPSB0aGlzKQotICAgICAgICAgICAgc2hhZG93QW5jZXN0b3ItPmRlZmF1bHRFdmVudEhh
bmRsZXIoZXZlbnQpOwotICAgIH0KLSAgICBpZiAoIWV2ZW50LT5kZWZhdWx0SGFuZGxlZCgpKQot
ICAgICAgICBIVE1MRGl2RWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcihldmVudCk7Ci19Ci0K
LVJlbmRlck9iamVjdCogVGV4dENvbnRyb2xJbm5lclRleHRFbGVtZW50OjpjcmVhdGVSZW5kZXJl
cihSZW5kZXJBcmVuYSogYXJlbmEsIFJlbmRlclN0eWxlKikKLXsKLSAgICBib29sIG11bHRpTGlu
ZSA9IGZhbHNlOwotICAgIE5vZGUqIHNoYWRvd0FuY2VzdG9yID0gc2hhZG93QW5jZXN0b3JOb2Rl
KCk7Ci0gICAgaWYgKHNoYWRvd0FuY2VzdG9yICYmIHNoYWRvd0FuY2VzdG9yLT5yZW5kZXJlcigp
KSB7Ci0gICAgICAgIEFTU0VSVChzaGFkb3dBbmNlc3Rvci0+cmVuZGVyZXIoKS0+aXNUZXh0Rmll
bGQoKSB8fCBzaGFkb3dBbmNlc3Rvci0+cmVuZGVyZXIoKS0+aXNUZXh0QXJlYSgpKTsKLSAgICAg
ICAgbXVsdGlMaW5lID0gc2hhZG93QW5jZXN0b3ItPnJlbmRlcmVyKCktPmlzVGV4dEFyZWEoKTsK
LSAgICB9Ci0gICAgcmV0dXJuIG5ldyAoYXJlbmEpIFJlbmRlclRleHRDb250cm9sSW5uZXJCbG9j
ayh0aGlzLCBtdWx0aUxpbmUpOwotfQotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
Ci0KLWlubGluZSBTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b25FbGVtZW50OjpTZWFyY2hGaWVsZFJl
c3VsdHNCdXR0b25FbGVtZW50KERvY3VtZW50KiBkb2N1bWVudCkKLSAgICA6IFRleHRDb250cm9s
SW5uZXJFbGVtZW50KGRvY3VtZW50KQotewotfQotCi1QYXNzUmVmUHRyPFNlYXJjaEZpZWxkUmVz
dWx0c0J1dHRvbkVsZW1lbnQ+IFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRvbkVsZW1lbnQ6OmNyZWF0
ZShEb2N1bWVudCogZG9jdW1lbnQpCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTZWFyY2hG
aWVsZFJlc3VsdHNCdXR0b25FbGVtZW50KGRvY3VtZW50KSk7Ci19Ci0KLXZvaWQgU2VhcmNoRmll
bGRSZXN1bHRzQnV0dG9uRWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCogZXZlbnQp
Ci17Ci0gICAgLy8gT24gbW91c2Vkb3duLCBicmluZyB1cCBhIG1lbnUsIGlmIG5lZWRlZAotICAg
IEhUTUxJbnB1dEVsZW1lbnQqIGlucHV0ID0gc3RhdGljX2Nhc3Q8SFRNTElucHV0RWxlbWVudCo+
KHNoYWRvd0FuY2VzdG9yTm9kZSgpKTsKLSAgICBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5h
bWVzKCkubW91c2Vkb3duRXZlbnQgJiYgZXZlbnQtPmlzTW91c2VFdmVudCgpICYmIHN0YXRpY19j
YXN0PE1vdXNlRXZlbnQqPihldmVudCktPmJ1dHRvbigpID09IExlZnRCdXR0b24pIHsKLSAgICAg
ICAgaW5wdXQtPmZvY3VzKCk7Ci0gICAgICAgIGlucHV0LT5zZWxlY3QoKTsKLSAgICAgICAgUmVu
ZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lKiByZW5kZXJlciA9IHRvUmVuZGVyVGV4dENvbnRyb2xT
aW5nbGVMaW5lKGlucHV0LT5yZW5kZXJlcigpKTsKLSAgICAgICAgaWYgKHJlbmRlcmVyLT5wb3B1
cElzVmlzaWJsZSgpKQotICAgICAgICAgICAgcmVuZGVyZXItPmhpZGVQb3B1cCgpOwotICAgICAg
ICBlbHNlIGlmIChpbnB1dC0+bWF4UmVzdWx0cygpID4gMCkKLSAgICAgICAgICAgIHJlbmRlcmVy
LT5zaG93UG9wdXAoKTsKLSAgICAgICAgZXZlbnQtPnNldERlZmF1bHRIYW5kbGVkKCk7Ci0gICAg
fQotCi0gICAgaWYgKCFldmVudC0+ZGVmYXVsdEhhbmRsZWQoKSkKLSAgICAgICAgSFRNTERpdkVs
ZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIoZXZlbnQpOwotfQotCi0vLyAtLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCi0KLWlubGluZSBTZWFyY2hGaWVsZENhbmNlbEJ1dHRvbkVsZW1lbnQ6
OlNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uRWxlbWVudChEb2N1bWVudCogZG9jdW1lbnQpCi0gICAg
OiBUZXh0Q29udHJvbElubmVyRWxlbWVudChkb2N1bWVudCkKLSAgICAsIG1fY2FwdHVyaW5nKGZh
bHNlKQotewotfQotCi1QYXNzUmVmUHRyPFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uRWxlbWVudD4g
U2VhcmNoRmllbGRDYW5jZWxCdXR0b25FbGVtZW50OjpjcmVhdGUoRG9jdW1lbnQqIGRvY3VtZW50
KQotewotICAgIHJldHVybiBhZG9wdFJlZihuZXcgU2VhcmNoRmllbGRDYW5jZWxCdXR0b25FbGVt
ZW50KGRvY3VtZW50KSk7Ci19Ci0KLXZvaWQgU2VhcmNoRmllbGRDYW5jZWxCdXR0b25FbGVtZW50
OjpkZXRhY2goKQotewotICAgIGlmIChtX2NhcHR1cmluZykgewotICAgICAgICBpZiAoRnJhbWUq
IGZyYW1lID0gZG9jdW1lbnQoKS0+ZnJhbWUoKSkKLSAgICAgICAgICAgIGZyYW1lLT5ldmVudEhh
bmRsZXIoKS0+c2V0Q2FwdHVyaW5nTW91c2VFdmVudHNOb2RlKDApOwotICAgIH0KLSAgICBUZXh0
Q29udHJvbElubmVyRWxlbWVudDo6ZGV0YWNoKCk7Ci19Ci0KLQotdm9pZCBTZWFyY2hGaWVsZENh
bmNlbEJ1dHRvbkVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQqIGV2ZW50KQotewot
ICAgIC8vIElmIHRoZSBlbGVtZW50IGlzIHZpc2libGUsIG9uIG1vdXNldXAsIGNsZWFyIHRoZSB2
YWx1ZSwgYW5kIHNldCBzZWxlY3Rpb24KLSAgICBSZWZQdHI8SFRNTElucHV0RWxlbWVudD4gaW5w
dXQoc3RhdGljX2Nhc3Q8SFRNTElucHV0RWxlbWVudCo+KHNoYWRvd0FuY2VzdG9yTm9kZSgpKSk7
Ci0gICAgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLm1vdXNlZG93bkV2ZW50ICYm
IGV2ZW50LT5pc01vdXNlRXZlbnQoKSAmJiBzdGF0aWNfY2FzdDxNb3VzZUV2ZW50Kj4oZXZlbnQp
LT5idXR0b24oKSA9PSBMZWZ0QnV0dG9uKSB7Ci0gICAgICAgIGlmIChyZW5kZXJlcigpICYmIHJl
bmRlcmVyKCktPnZpc2libGVUb0hpdFRlc3RpbmcoKSkgewotICAgICAgICAgICAgaWYgKEZyYW1l
KiBmcmFtZSA9IGRvY3VtZW50KCktPmZyYW1lKCkpIHsKLSAgICAgICAgICAgICAgICBmcmFtZS0+
ZXZlbnRIYW5kbGVyKCktPnNldENhcHR1cmluZ01vdXNlRXZlbnRzTm9kZSh0aGlzKTsKLSAgICAg
ICAgICAgICAgICBtX2NhcHR1cmluZyA9IHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0K
LSAgICAgICAgaW5wdXQtPmZvY3VzKCk7Ci0gICAgICAgIGlucHV0LT5zZWxlY3QoKTsKLSAgICAg
ICAgZXZlbnQtPnNldERlZmF1bHRIYW5kbGVkKCk7Ci0gICAgfQotICAgIGlmIChldmVudC0+dHlw
ZSgpID09IGV2ZW50TmFtZXMoKS5tb3VzZXVwRXZlbnQgJiYgZXZlbnQtPmlzTW91c2VFdmVudCgp
ICYmIHN0YXRpY19jYXN0PE1vdXNlRXZlbnQqPihldmVudCktPmJ1dHRvbigpID09IExlZnRCdXR0
b24pIHsKLSAgICAgICAgaWYgKG1fY2FwdHVyaW5nKSB7Ci0gICAgICAgICAgICBpZiAoRnJhbWUq
IGZyYW1lID0gZG9jdW1lbnQoKS0+ZnJhbWUoKSkgewotICAgICAgICAgICAgICAgIGZyYW1lLT5l
dmVudEhhbmRsZXIoKS0+c2V0Q2FwdHVyaW5nTW91c2VFdmVudHNOb2RlKDApOwotICAgICAgICAg
ICAgICAgIG1fY2FwdHVyaW5nID0gZmFsc2U7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBp
ZiAoaG92ZXJlZCgpKSB7Ci0gICAgICAgICAgICAgICAgU3RyaW5nIG9sZFZhbHVlID0gaW5wdXQt
PnZhbHVlKCk7Ci0gICAgICAgICAgICAgICAgaW5wdXQtPnNldFZhbHVlKCIiKTsKLSAgICAgICAg
ICAgICAgICBpZiAoIW9sZFZhbHVlLmlzRW1wdHkoKSkgewotICAgICAgICAgICAgICAgICAgICB0
b1JlbmRlclRleHRDb250cm9sKGlucHV0LT5yZW5kZXJlcigpKS0+c2V0Q2hhbmdlZFNpbmNlTGFz
dENoYW5nZUV2ZW50KHRydWUpOwotICAgICAgICAgICAgICAgICAgICBpbnB1dC0+ZGlzcGF0Y2hG
b3JtQ29udHJvbElucHV0RXZlbnQoKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgaW5wdXQtPm9uU2VhcmNoKCk7Ci0gICAgICAgICAgICAgICAgZXZlbnQtPnNldERlZmF1bHRI
YW5kbGVkKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoIWV2
ZW50LT5kZWZhdWx0SGFuZGxlZCgpKQotICAgICAgICBIVE1MRGl2RWxlbWVudDo6ZGVmYXVsdEV2
ZW50SGFuZGxlcihldmVudCk7Ci19Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
LQotaW5saW5lIFNwaW5CdXR0b25FbGVtZW50OjpTcGluQnV0dG9uRWxlbWVudChIVE1MRWxlbWVu
dCogc2hhZG93UGFyZW50KQotICAgIDogVGV4dENvbnRyb2xJbm5lckVsZW1lbnQoc2hhZG93UGFy
ZW50LT5kb2N1bWVudCgpLCBzaGFkb3dQYXJlbnQpCi0gICAgLCBtX2NhcHR1cmluZyhmYWxzZSkK
LSAgICAsIG1fdXBEb3duU3RhdGUoSW5kZXRlcm1pbmF0ZSkKLSAgICAsIG1fcHJlc3NTdGFydGlu
Z1N0YXRlKEluZGV0ZXJtaW5hdGUpCi0gICAgLCBtX3JlcGVhdGluZ1RpbWVyKHRoaXMsICZTcGlu
QnV0dG9uRWxlbWVudDo6cmVwZWF0aW5nVGltZXJGaXJlZCkKLXsKLX0KLQotUGFzc1JlZlB0cjxT
cGluQnV0dG9uRWxlbWVudD4gU3BpbkJ1dHRvbkVsZW1lbnQ6OmNyZWF0ZShIVE1MRWxlbWVudCog
c2hhZG93UGFyZW50KQotewotICAgIHJldHVybiBhZG9wdFJlZihuZXcgU3BpbkJ1dHRvbkVsZW1l
bnQoc2hhZG93UGFyZW50KSk7Ci19Ci0KLXZvaWQgU3BpbkJ1dHRvbkVsZW1lbnQ6OmRldGFjaCgp
Ci17Ci0gICAgc3RvcFJlcGVhdGluZ1RpbWVyKCk7Ci0gICAgaWYgKG1fY2FwdHVyaW5nKSB7Ci0g
ICAgICAgIGlmIChGcmFtZSogZnJhbWUgPSBkb2N1bWVudCgpLT5mcmFtZSgpKSB7Ci0gICAgICAg
ICAgICBmcmFtZS0+ZXZlbnRIYW5kbGVyKCktPnNldENhcHR1cmluZ01vdXNlRXZlbnRzTm9kZSgw
KTsKLSAgICAgICAgICAgIG1fY2FwdHVyaW5nID0gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9Ci0g
ICAgVGV4dENvbnRyb2xJbm5lckVsZW1lbnQ6OmRldGFjaCgpOwotfQotCi12b2lkIFNwaW5CdXR0
b25FbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50KiBldmVudCkKLXsKLSAgICBpZiAo
IWV2ZW50LT5pc01vdXNlRXZlbnQoKSkgewotICAgICAgICBpZiAoIWV2ZW50LT5kZWZhdWx0SGFu
ZGxlZCgpKQotICAgICAgICAgICAgSFRNTERpdkVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIo
ZXZlbnQpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgUmVuZGVyQm94KiBib3ggPSBy
ZW5kZXJCb3goKTsKLSAgICBpZiAoIWJveCkgewotICAgICAgICBpZiAoIWV2ZW50LT5kZWZhdWx0
SGFuZGxlZCgpKQotICAgICAgICAgICAgSFRNTERpdkVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRs
ZXIoZXZlbnQpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgUmVmUHRyPEhUTUxJbnB1
dEVsZW1lbnQ+IGlucHV0KHN0YXRpY19jYXN0PEhUTUxJbnB1dEVsZW1lbnQqPihzaGFkb3dBbmNl
c3Rvck5vZGUoKSkpOwotICAgIGlmIChpbnB1dC0+ZGlzYWJsZWQoKSB8fCBpbnB1dC0+aXNSZWFk
T25seUZvcm1Db250cm9sKCkpIHsKLSAgICAgICAgaWYgKCFldmVudC0+ZGVmYXVsdEhhbmRsZWQo
KSkKLSAgICAgICAgICAgIEhUTUxEaXZFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKGV2ZW50
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIE1vdXNlRXZlbnQqIG1vdXNlRXZlbnQg
PSBzdGF0aWNfY2FzdDxNb3VzZUV2ZW50Kj4oZXZlbnQpOwotICAgIEludFBvaW50IGxvY2FsID0g
cm91bmRlZEludFBvaW50KGJveC0+YWJzb2x1dGVUb0xvY2FsKG1vdXNlRXZlbnQtPmFic29sdXRl
TG9jYXRpb24oKSwgZmFsc2UsIHRydWUpKTsKLSAgICBpZiAobW91c2VFdmVudC0+dHlwZSgpID09
IGV2ZW50TmFtZXMoKS5tb3VzZWRvd25FdmVudCAmJiBtb3VzZUV2ZW50LT5idXR0b24oKSA9PSBM
ZWZ0QnV0dG9uKSB7Ci0gICAgICAgIGlmIChib3gtPmJvcmRlckJveFJlY3QoKS5jb250YWlucyhs
b2NhbCkpIHsKLSAgICAgICAgICAgIC8vIFRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIG9mIEhUTUxJ
bnB1dEVsZW1lbnQgbWF5IHJ1biBKYXZhU2NyaXB0Ci0gICAgICAgICAgICAvLyBjb2RlIHdoaWNo
IGRldGFjaGVzIHRoaXMgc2hhZG93IG5vZGUuIFdlIG5lZWQgdG8gdGFrZSBhIHJlZmVyZW5jZQot
ICAgICAgICAgICAgLy8gYW5kIGNoZWNrIHJlbmRlcmVyKCkgYWZ0ZXIgc3VjaCBmdW5jdGlvbiBj
YWxscy4KLSAgICAgICAgICAgIFJlZlB0cjxOb2RlPiBwcm90ZWN0b3IodGhpcyk7Ci0gICAgICAg
ICAgICBpbnB1dC0+Zm9jdXMoKTsKLSAgICAgICAgICAgIGlucHV0LT5zZWxlY3QoKTsKLSAgICAg
ICAgICAgIGlmIChyZW5kZXJlcigpKSB7Ci0gICAgICAgICAgICAgICAgaW5wdXQtPnN0ZXBVcEZy
b21SZW5kZXJlcihtX3VwRG93blN0YXRlID09IFVwID8gMSA6IC0xKTsKLSAgICAgICAgICAgICAg
ICBpZiAocmVuZGVyZXIoKSkKLSAgICAgICAgICAgICAgICAgICAgc3RhcnRSZXBlYXRpbmdUaW1l
cigpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZXZlbnQtPnNldERlZmF1bHRIYW5kbGVk
KCk7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgaWYgKG1vdXNlRXZlbnQtPnR5cGUoKSA9PSBldmVu
dE5hbWVzKCkubW91c2V1cEV2ZW50ICYmIG1vdXNlRXZlbnQtPmJ1dHRvbigpID09IExlZnRCdXR0
b24pCi0gICAgICAgIHN0b3BSZXBlYXRpbmdUaW1lcigpOwotICAgIGVsc2UgaWYgKGV2ZW50LT50
eXBlKCkgPT0gZXZlbnROYW1lcygpLm1vdXNlbW92ZUV2ZW50KSB7Ci0gICAgICAgIGlmIChib3gt
PmJvcmRlckJveFJlY3QoKS5jb250YWlucyhsb2NhbCkpIHsKLSAgICAgICAgICAgIGlmICghbV9j
YXB0dXJpbmcpIHsKLSAgICAgICAgICAgICAgICBpZiAoRnJhbWUqIGZyYW1lID0gZG9jdW1lbnQo
KS0+ZnJhbWUoKSkgewotICAgICAgICAgICAgICAgICAgICBmcmFtZS0+ZXZlbnRIYW5kbGVyKCkt
PnNldENhcHR1cmluZ01vdXNlRXZlbnRzTm9kZSh0aGlzKTsKLSAgICAgICAgICAgICAgICAgICAg
bV9jYXB0dXJpbmcgPSB0cnVlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIFVwRG93blN0YXRlIG9sZFVwRG93blN0YXRlID0gbV91cERvd25TdGF0ZTsKLSAg
ICAgICAgICAgIG1fdXBEb3duU3RhdGUgPSBsb2NhbC55KCkgPCBib3gtPmhlaWdodCgpIC8gMiA/
IFVwIDogRG93bjsKLSAgICAgICAgICAgIGlmIChtX3VwRG93blN0YXRlICE9IG9sZFVwRG93blN0
YXRlKQotICAgICAgICAgICAgICAgIHJlbmRlcmVyKCktPnJlcGFpbnQoKTsKLSAgICAgICAgfSBl
bHNlIHsKLSAgICAgICAgICAgIGlmIChtX2NhcHR1cmluZykgewotICAgICAgICAgICAgICAgIHN0
b3BSZXBlYXRpbmdUaW1lcigpOwotICAgICAgICAgICAgICAgIGlmIChGcmFtZSogZnJhbWUgPSBk
b2N1bWVudCgpLT5mcmFtZSgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGZyYW1lLT5ldmVudEhh
bmRsZXIoKS0+c2V0Q2FwdHVyaW5nTW91c2VFdmVudHNOb2RlKDApOwotICAgICAgICAgICAgICAg
ICAgICBtX2NhcHR1cmluZyA9IGZhbHNlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmICghZXZlbnQtPmRlZmF1bHRIYW5kbGVkKCkp
Ci0gICAgICAgIEhUTUxEaXZFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKGV2ZW50KTsKLX0K
LQotdm9pZCBTcGluQnV0dG9uRWxlbWVudDo6c3RhcnRSZXBlYXRpbmdUaW1lcigpCi17Ci0gICAg
bV9wcmVzc1N0YXJ0aW5nU3RhdGUgPSBtX3VwRG93blN0YXRlOwotICAgIFNjcm9sbGJhclRoZW1l
KiB0aGVtZSA9IFNjcm9sbGJhclRoZW1lOjpuYXRpdmVUaGVtZSgpOwotICAgIG1fcmVwZWF0aW5n
VGltZXIuc3RhcnQodGhlbWUtPmluaXRpYWxBdXRvc2Nyb2xsVGltZXJEZWxheSgpLCB0aGVtZS0+
YXV0b3Njcm9sbFRpbWVyRGVsYXkoKSk7Ci19Ci0KLXZvaWQgU3BpbkJ1dHRvbkVsZW1lbnQ6OnN0
b3BSZXBlYXRpbmdUaW1lcigpCi17Ci0gICAgbV9yZXBlYXRpbmdUaW1lci5zdG9wKCk7Ci19Ci0K
LXZvaWQgU3BpbkJ1dHRvbkVsZW1lbnQ6OnJlcGVhdGluZ1RpbWVyRmlyZWQoVGltZXI8U3BpbkJ1
dHRvbkVsZW1lbnQ+KikKLXsKLSAgICBIVE1MSW5wdXRFbGVtZW50KiBpbnB1dCA9IHN0YXRpY19j
YXN0PEhUTUxJbnB1dEVsZW1lbnQqPihzaGFkb3dBbmNlc3Rvck5vZGUoKSk7Ci0gICAgaWYgKGlu
cHV0LT5kaXNhYmxlZCgpIHx8IGlucHV0LT5pc1JlYWRPbmx5Rm9ybUNvbnRyb2woKSkKLSAgICAg
ICAgcmV0dXJuOwotICAgIC8vIE9uIE1hYyBPUywgTlNTdGVwcGVyIHVwZGF0ZXMgdGhlIHZhbHVl
IGZvciB0aGUgYnV0dG9uIHVuZGVyIHRoZSBtb3VzZQotICAgIC8vIGN1cnNvciByZWdhcmRsZXNz
IG9mIHRoZSBidXR0b24gcHJlc3NlZCBhdCB0aGUgYmVnaW5uaW5nLiBTbyB0aGUKLSAgICAvLyBm
b2xsb3dpbmcgY2hlY2sgaXMgbm90IG5lZWRlZCBmb3IgTWFjIE9TLgotI2lmICFPUyhNQUNfT1Nf
WCkKLSAgICBpZiAobV91cERvd25TdGF0ZSAhPSBtX3ByZXNzU3RhcnRpbmdTdGF0ZSkKLSAgICAg
ICAgcmV0dXJuOwotI2VuZGlmCi0gICAgaW5wdXQtPnN0ZXBVcEZyb21SZW5kZXJlcihtX3VwRG93
blN0YXRlID09IFVwID8gMSA6IC0xKTsKLX0KLQotdm9pZCBTcGluQnV0dG9uRWxlbWVudDo6c2V0
SG92ZXJlZChib29sIGZsYWcpCi17Ci0gICAgaWYgKCFob3ZlcmVkKCkgJiYgZmxhZykKLSAgICAg
ICAgbV91cERvd25TdGF0ZSA9IEluZGV0ZXJtaW5hdGU7Ci0gICAgVGV4dENvbnRyb2xJbm5lckVs
ZW1lbnQ6OnNldEhvdmVyZWQoZmxhZyk7Ci19Ci0KLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQotCi0jaWYgRU5BQkxFKElOUFVUX1NQRUVDSCkKLQotaW5saW5lIElucHV0RmllbGRT
cGVlY2hCdXR0b25FbGVtZW50OjpJbnB1dEZpZWxkU3BlZWNoQnV0dG9uRWxlbWVudChIVE1MRWxl
bWVudCogc2hhZG93UGFyZW50KQotICAgIDogVGV4dENvbnRyb2xJbm5lckVsZW1lbnQoc2hhZG93
UGFyZW50LT5kb2N1bWVudCgpLCBzaGFkb3dQYXJlbnQpCi0gICAgLCBtX2NhcHR1cmluZyhmYWxz
ZSkKLSAgICAsIG1fc3RhdGUoSWRsZSkKLSAgICAsIG1fbGlzdGVuZXJJZChkb2N1bWVudCgpLT5w
YWdlKCktPnNwZWVjaElucHV0KCktPnJlZ2lzdGVyTGlzdGVuZXIodGhpcykpCi17Ci19Ci0KLUlu
cHV0RmllbGRTcGVlY2hCdXR0b25FbGVtZW50Ojp+SW5wdXRGaWVsZFNwZWVjaEJ1dHRvbkVsZW1l
bnQoKQotewotICAgIFNwZWVjaElucHV0KiBzcGVlY2ggPSBzcGVlY2hJbnB1dCgpOwotICAgIGlm
IChzcGVlY2ggJiYgbV9saXN0ZW5lcklkKSAgeyAvLyBDb3VsZCBiZSBudWxsIHdoZW4gcGFnZSBp
cyB1bmxvYWRpbmcuCi0gICAgICAgIGlmIChtX3N0YXRlICE9IElkbGUpCi0gICAgICAgICAgICBz
cGVlY2gtPmNhbmNlbFJlY29nbml0aW9uKG1fbGlzdGVuZXJJZCk7Ci0gICAgICAgIHNwZWVjaC0+
dW5yZWdpc3Rlckxpc3RlbmVyKG1fbGlzdGVuZXJJZCk7Ci0gICAgfQotfQotCi1QYXNzUmVmUHRy
PElucHV0RmllbGRTcGVlY2hCdXR0b25FbGVtZW50PiBJbnB1dEZpZWxkU3BlZWNoQnV0dG9uRWxl
bWVudDo6Y3JlYXRlKEhUTUxFbGVtZW50KiBzaGFkb3dQYXJlbnQpCi17Ci0gICAgcmV0dXJuIGFk
b3B0UmVmKG5ldyBJbnB1dEZpZWxkU3BlZWNoQnV0dG9uRWxlbWVudChzaGFkb3dQYXJlbnQpKTsK
LX0KLQotdm9pZCBJbnB1dEZpZWxkU3BlZWNoQnV0dG9uRWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFu
ZGxlcihFdmVudCogZXZlbnQpCi17Ci0gICAgLy8gRm9yIHByaXZhY3kgcmVhc29ucywgb25seSBh
bGxvdyBjbGlja3MgZGlyZWN0bHkgY29taW5nIGZyb20gdGhlIHVzZXIuCi0gICAgaWYgKCFldmVu
dC0+ZnJvbVVzZXJHZXN0dXJlKCkpIHsKLSAgICAgICAgSFRNTERpdkVsZW1lbnQ6OmRlZmF1bHRF
dmVudEhhbmRsZXIoZXZlbnQpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gVGhl
IGNhbGwgdG8gZm9jdXMoKSBiZWxvdyBkaXNwYXRjaGVzIGEgZm9jdXMgZXZlbnQsIGFuZCBhbiBl
dmVudCBoYW5kbGVyIGluIHRoZSBwYWdlIG1pZ2h0Ci0gICAgLy8gcmVtb3ZlIHRoZSBpbnB1dCBl
bGVtZW50IGZyb20gRE9NLiBUbyBtYWtlIHN1cmUgaXQgcmVtYWlucyB2YWxpZCB1bnRpbCB3ZSBm
aW5pc2ggb3VyIHdvcmsKLSAgICAvLyBoZXJlLCB3ZSB0YWtlIGEgdGVtcG9yYXJ5IHJlZmVyZW5j
ZS4KLSAgICBSZWZQdHI8SFRNTElucHV0RWxlbWVudD4gaW5wdXQoc3RhdGljX2Nhc3Q8SFRNTElu
cHV0RWxlbWVudCo+KHNoYWRvd0FuY2VzdG9yTm9kZSgpKSk7Ci0KLSAgICAvLyBPbiBtb3VzZSBk
b3duLCBzZWxlY3QgdGhlIHRleHQgYW5kIHNldCBmb2N1cy4KLSAgICBpZiAoZXZlbnQtPnR5cGUo
KSA9PSBldmVudE5hbWVzKCkubW91c2Vkb3duRXZlbnQgJiYgZXZlbnQtPmlzTW91c2VFdmVudCgp
ICYmIHN0YXRpY19jYXN0PE1vdXNlRXZlbnQqPihldmVudCktPmJ1dHRvbigpID09IExlZnRCdXR0
b24pIHsKLSAgICAgICAgaWYgKHJlbmRlcmVyKCkgJiYgcmVuZGVyZXIoKS0+dmlzaWJsZVRvSGl0
VGVzdGluZygpKSB7Ci0gICAgICAgICAgICBpZiAoRnJhbWUqIGZyYW1lID0gZG9jdW1lbnQoKS0+
ZnJhbWUoKSkgewotICAgICAgICAgICAgICAgIGZyYW1lLT5ldmVudEhhbmRsZXIoKS0+c2V0Q2Fw
dHVyaW5nTW91c2VFdmVudHNOb2RlKHRoaXMpOwotICAgICAgICAgICAgICAgIG1fY2FwdHVyaW5n
ID0gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBSZWZQdHI8SW5wdXRG
aWVsZFNwZWVjaEJ1dHRvbkVsZW1lbnQ+IGhvbGRSZWZCdXR0b24odGhpcyk7Ci0gICAgICAgIGlu
cHV0LT5mb2N1cygpOwotICAgICAgICBpbnB1dC0+c2VsZWN0KCk7Ci0gICAgICAgIGV2ZW50LT5z
ZXREZWZhdWx0SGFuZGxlZCgpOwotICAgIH0KLSAgICAvLyBPbiBtb3VzZSB1cCwgcmVsZWFzZSBj
YXB0dXJlIGNsZWFubHkuCi0gICAgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLm1v
dXNldXBFdmVudCAmJiBldmVudC0+aXNNb3VzZUV2ZW50KCkgJiYgc3RhdGljX2Nhc3Q8TW91c2VF
dmVudCo+KGV2ZW50KS0+YnV0dG9uKCkgPT0gTGVmdEJ1dHRvbikgewotICAgICAgICBpZiAobV9j
YXB0dXJpbmcgJiYgcmVuZGVyZXIoKSAmJiByZW5kZXJlcigpLT52aXNpYmxlVG9IaXRUZXN0aW5n
KCkpIHsKLSAgICAgICAgICAgIGlmIChGcmFtZSogZnJhbWUgPSBkb2N1bWVudCgpLT5mcmFtZSgp
KSB7Ci0gICAgICAgICAgICAgICAgZnJhbWUtPmV2ZW50SGFuZGxlcigpLT5zZXRDYXB0dXJpbmdN
b3VzZUV2ZW50c05vZGUoMCk7Ci0gICAgICAgICAgICAgICAgbV9jYXB0dXJpbmcgPSBmYWxzZTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmIChldmVudC0+dHlwZSgp
ID09IGV2ZW50TmFtZXMoKS5jbGlja0V2ZW50KSB7Ci0gICAgICAgIHN3aXRjaCAobV9zdGF0ZSkg
ewotICAgICAgICBjYXNlIElkbGU6IHsKLSAgICAgICAgICAgICAgQXRvbWljU3RyaW5nIGxhbmd1
YWdlID0gaW5wdXQtPmNvbXB1dGVJbmhlcml0ZWRMYW5ndWFnZSgpOwotICAgICAgICAgICAgICBT
dHJpbmcgZ3JhbW1hciA9IGlucHV0LT5nZXRBdHRyaWJ1dGUod2Via2l0Z3JhbW1hckF0dHIpOwot
ICAgICAgICAgICAgICBJbnRSZWN0IHJlY3QgPSBpbnB1dC0+cmVuZGVyZXIoKS0+YWJzb2x1dGVC
b3VuZGluZ0JveFJlY3QoKTsKLSAgICAgICAgICAgICAgaWYgKHNwZWVjaElucHV0KCktPnN0YXJ0
UmVjb2duaXRpb24obV9saXN0ZW5lcklkLCByZWN0LCBsYW5ndWFnZSwgZ3JhbW1hciwgZG9jdW1l
bnQoKS0+c2VjdXJpdHlPcmlnaW4oKSkpCi0gICAgICAgICAgICAgICAgICBzZXRTdGF0ZShSZWNv
cmRpbmcpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2Ug
UmVjb3JkaW5nOgotICAgICAgICAgICAgc3BlZWNoSW5wdXQoKS0+c3RvcFJlY29yZGluZyhtX2xp
c3RlbmVySWQpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgUmVjb2duaXppbmc6
Ci0gICAgICAgICAgICAvLyBOb3RoaW5nIHRvIGRvIGhlcmUsIHdlIHdpbGwgY29udGludWUgdG8g
d2FpdCBmb3IgcmVzdWx0cy4KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAg
IGV2ZW50LT5zZXREZWZhdWx0SGFuZGxlZCgpOwotICAgIH0KLQotICAgIGlmICghZXZlbnQtPmRl
ZmF1bHRIYW5kbGVkKCkpCi0gICAgICAgIEhUTUxEaXZFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5k
bGVyKGV2ZW50KTsKLX0KLQotdm9pZCBJbnB1dEZpZWxkU3BlZWNoQnV0dG9uRWxlbWVudDo6c2V0
U3RhdGUoU3BlZWNoSW5wdXRTdGF0ZSBzdGF0ZSkKLXsKLSAgICBpZiAobV9zdGF0ZSAhPSBzdGF0
ZSkgewotICAgICAgICBtX3N0YXRlID0gc3RhdGU7Ci0gICAgICAgIHNoYWRvd0FuY2VzdG9yTm9k
ZSgpLT5yZW5kZXJlcigpLT5yZXBhaW50KCk7Ci0gICAgfQotfQotCi1TcGVlY2hJbnB1dCogSW5w
dXRGaWVsZFNwZWVjaEJ1dHRvbkVsZW1lbnQ6OnNwZWVjaElucHV0KCkKLXsKLSAgICByZXR1cm4g
ZG9jdW1lbnQoKS0+cGFnZSgpID8gZG9jdW1lbnQoKS0+cGFnZSgpLT5zcGVlY2hJbnB1dCgpIDog
MDsKLX0KLQotdm9pZCBJbnB1dEZpZWxkU3BlZWNoQnV0dG9uRWxlbWVudDo6ZGlkQ29tcGxldGVS
ZWNvcmRpbmcoaW50KQotewotICAgIHNldFN0YXRlKFJlY29nbml6aW5nKTsKLX0KLQotdm9pZCBJ
bnB1dEZpZWxkU3BlZWNoQnV0dG9uRWxlbWVudDo6ZGlkQ29tcGxldGVSZWNvZ25pdGlvbihpbnQp
Ci17Ci0gICAgc2V0U3RhdGUoSWRsZSk7Ci19Ci0KLXZvaWQgSW5wdXRGaWVsZFNwZWVjaEJ1dHRv
bkVsZW1lbnQ6OnNldFJlY29nbml0aW9uUmVzdWx0KGludCwgY29uc3QgU3BlZWNoSW5wdXRSZXN1
bHRBcnJheSYgcmVzdWx0cykKLXsKLSAgICBtX3Jlc3VsdHMgPSByZXN1bHRzOwotCi0gICAgLy8g
VGhlIGNhbGwgdG8gc2V0VmFsdWUoKSBiZWxvdyBkaXNwYXRjaGVzIGFuIGV2ZW50LCBhbmQgYW4g
ZXZlbnQgaGFuZGxlciBpbiB0aGUgcGFnZSBtaWdodAotICAgIC8vIHJlbW92ZSB0aGUgaW5wdXQg
ZWxlbWVudCBmcm9tIERPTS4gVG8gbWFrZSBzdXJlIGl0IHJlbWFpbnMgdmFsaWQgdW50aWwgd2Ug
ZmluaXNoIG91ciB3b3JrCi0gICAgLy8gaGVyZSwgd2UgdGFrZSBhIHRlbXBvcmFyeSByZWZlcmVu
Y2UuCi0gICAgUmVmUHRyPEhUTUxJbnB1dEVsZW1lbnQ+IGlucHV0KHN0YXRpY19jYXN0PEhUTUxJ
bnB1dEVsZW1lbnQqPihzaGFkb3dBbmNlc3Rvck5vZGUoKSkpOwotICAgIFJlZlB0cjxJbnB1dEZp
ZWxkU3BlZWNoQnV0dG9uRWxlbWVudD4gaG9sZFJlZkJ1dHRvbih0aGlzKTsKLSAgICBpbnB1dC0+
c2V0VmFsdWUocmVzdWx0cy5pc0VtcHR5KCkgPyAiIiA6IHJlc3VsdHNbMF0tPnV0dGVyYW5jZSgp
KTsKLSAgICBpbnB1dC0+ZGlzcGF0Y2hFdmVudChTcGVlY2hJbnB1dEV2ZW50OjpjcmVhdGUoZXZl
bnROYW1lcygpLndlYmtpdHNwZWVjaGNoYW5nZUV2ZW50LCByZXN1bHRzKSk7Ci0KLSAgICAvLyBD
aGVjayBiZWZvcmUgYWNjZXNzaW5nIHRoZSByZW5kZXJlciBhcyB0aGUgYWJvdmUgZXZlbnQgY291
bGQgaGF2ZSBwb3RlbnRpYWxseSB0dXJuZWQgb2ZmCi0gICAgLy8gc3BlZWNoIGluIHRoZSBpbnB1
dCBlbGVtZW50LCBoZW5jZSByZW1vdmluZyB0aGlzIGJ1dHRvbiBhbmQgcmVuZGVyZXIgZnJvbSB0
aGUgaGllcmFyY2h5LgotICAgIGlmIChyZW5kZXJlcigpKQotICAgICAgICByZW5kZXJlcigpLT5y
ZXBhaW50KCk7Ci19Ci0KLXZvaWQgSW5wdXRGaWVsZFNwZWVjaEJ1dHRvbkVsZW1lbnQ6OmRldGFj
aCgpCi17Ci0gICAgaWYgKG1fY2FwdHVyaW5nKSB7Ci0gICAgICAgIGlmIChGcmFtZSogZnJhbWUg
PSBkb2N1bWVudCgpLT5mcmFtZSgpKQotICAgICAgICAgICAgZnJhbWUtPmV2ZW50SGFuZGxlcigp
LT5zZXRDYXB0dXJpbmdNb3VzZUV2ZW50c05vZGUoMCk7Ci0gICAgfQotCi0gICAgaWYgKG1fbGlz
dGVuZXJJZCkgewotICAgICAgICBpZiAobV9zdGF0ZSAhPSBJZGxlKQotICAgICAgICAgICAgc3Bl
ZWNoSW5wdXQoKS0+Y2FuY2VsUmVjb2duaXRpb24obV9saXN0ZW5lcklkKTsKLSAgICAgICAgc3Bl
ZWNoSW5wdXQoKS0+dW5yZWdpc3Rlckxpc3RlbmVyKG1fbGlzdGVuZXJJZCk7Ci0gICAgICAgIG1f
bGlzdGVuZXJJZCA9IDA7Ci0gICAgfQotCi0gICAgVGV4dENvbnRyb2xJbm5lckVsZW1lbnQ6OmRl
dGFjaCgpOwotfQotCi0jZW5kaWYgLy8gRU5BQkxFKElOUFVUX1NQRUVDSCkKLQotfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1RleHRDb250cm9sSW5uZXJFbGVtZW50cy5o
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1RleHRDb250cm9sSW5uZXJFbGVtZW50cy5oCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YmE3ODU3Li4wMDAwMDAwCi0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0Q29udHJvbElubmVyRWxlbWVudHMuaAorKysgL2Rldi9u
dWxsCkBAIC0xLDE1OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA4LCAy
MDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAx
MCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotIAotI2lmbmRlZiBUZXh0
Q29udHJvbElubmVyRWxlbWVudHNfaAotI2RlZmluZSBUZXh0Q29udHJvbElubmVyRWxlbWVudHNf
aAotCi0jaW5jbHVkZSAiSFRNTERpdkVsZW1lbnQuaCIKLSNpbmNsdWRlICJTcGVlY2hJbnB1dExp
c3RlbmVyLmgiCi0jaW5jbHVkZSAiVGltZXIuaCIKLSNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgot
Ci1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIFNwZWVjaElucHV0OwotCi1jbGFzcyBUZXh0
Q29udHJvbElubmVyRWxlbWVudCA6IHB1YmxpYyBIVE1MRGl2RWxlbWVudCB7Ci1wdWJsaWM6Ci0g
ICAgc3RhdGljIFBhc3NSZWZQdHI8VGV4dENvbnRyb2xJbm5lckVsZW1lbnQ+IGNyZWF0ZShIVE1M
RWxlbWVudCogc2hhZG93UGFyZW50KTsKLSAgICB2aXJ0dWFsIHZvaWQgZGV0YWNoKCk7Ci0KLSAg
ICB2b2lkIGF0dGFjaElubmVyRWxlbWVudChOb2RlKiwgUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4s
IFJlbmRlckFyZW5hKik7Ci0KLXByb3RlY3RlZDoKLSAgICBUZXh0Q29udHJvbElubmVyRWxlbWVu
dChEb2N1bWVudCosIEhUTUxFbGVtZW50KiBzaGFkb3dQYXJlbnQgPSAwKTsKLQotcHJpdmF0ZToK
LSAgICB2aXJ0dWFsIGJvb2wgaXNNb3VzZUZvY3VzYWJsZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNl
OyB9Ci19OwotCi1jbGFzcyBUZXh0Q29udHJvbElubmVyVGV4dEVsZW1lbnQgOiBwdWJsaWMgVGV4
dENvbnRyb2xJbm5lckVsZW1lbnQgewotcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPFRl
eHRDb250cm9sSW5uZXJUZXh0RWxlbWVudD4gY3JlYXRlKERvY3VtZW50KiwgSFRNTEVsZW1lbnQq
IHNoYWRvd1BhcmVudCk7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgZGVmYXVsdEV2ZW50SGFuZGxlcihF
dmVudCopOwotCi1wcml2YXRlOgotICAgIFRleHRDb250cm9sSW5uZXJUZXh0RWxlbWVudChEb2N1
bWVudCosIEhUTUxFbGVtZW50KiBzaGFkb3dQYXJlbnQpOwotICAgIHZpcnR1YWwgUmVuZGVyT2Jq
ZWN0KiBjcmVhdGVSZW5kZXJlcihSZW5kZXJBcmVuYSosIFJlbmRlclN0eWxlKik7ICAKLX07Ci0K
LWNsYXNzIFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRvbkVsZW1lbnQgOiBwdWJsaWMgVGV4dENvbnRy
b2xJbm5lckVsZW1lbnQgewotcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNlYXJjaEZp
ZWxkUmVzdWx0c0J1dHRvbkVsZW1lbnQ+IGNyZWF0ZShEb2N1bWVudCopOwotCi0gICAgdmlydHVh
bCB2b2lkIGRlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQqKTsKLQotcHJpdmF0ZToKLSAgICBTZWFy
Y2hGaWVsZFJlc3VsdHNCdXR0b25FbGVtZW50KERvY3VtZW50Kik7Ci19OwotCi1jbGFzcyBTZWFy
Y2hGaWVsZENhbmNlbEJ1dHRvbkVsZW1lbnQgOiBwdWJsaWMgVGV4dENvbnRyb2xJbm5lckVsZW1l
bnQgewotcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNlYXJjaEZpZWxkQ2FuY2VsQnV0
dG9uRWxlbWVudD4gY3JlYXRlKERvY3VtZW50Kik7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgZGVmYXVs
dEV2ZW50SGFuZGxlcihFdmVudCopOwotCi1wcml2YXRlOgotICAgIFNlYXJjaEZpZWxkQ2FuY2Vs
QnV0dG9uRWxlbWVudChEb2N1bWVudCopOwotCi0gICAgdmlydHVhbCB2b2lkIGRldGFjaCgpOwot
Ci0gICAgYm9vbCBtX2NhcHR1cmluZzsKLX07Ci0KLWNsYXNzIFNwaW5CdXR0b25FbGVtZW50IDog
cHVibGljIFRleHRDb250cm9sSW5uZXJFbGVtZW50IHsKLXB1YmxpYzoKLSAgICBlbnVtIFVwRG93
blN0YXRlIHsKLSAgICAgICAgSW5kZXRlcm1pbmF0ZSwgLy8gSG92ZXJlZCwgYnV0IHRoZSBldmVu
dCBpcyBub3QgaGFuZGxlZC4KLSAgICAgICAgRG93biwKLSAgICAgICAgVXAsCi0gICAgfTsKLQot
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNwaW5CdXR0b25FbGVtZW50PiBjcmVhdGUoSFRNTEVsZW1l
bnQqKTsKLSAgICBVcERvd25TdGF0ZSB1cERvd25TdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdXBE
b3duU3RhdGU7IH0KLQotcHJpdmF0ZToKLSAgICBTcGluQnV0dG9uRWxlbWVudChIVE1MRWxlbWVu
dCopOwotCi0gICAgdmlydHVhbCB2b2lkIGRldGFjaCgpOwotICAgIHZpcnR1YWwgYm9vbCBpc1Nw
aW5CdXR0b25FbGVtZW50KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQotICAgIC8vIEZJWE1FOiBz
aGFkb3dBbmNlc3Rvck5vZGUoKSBzaG91bGQgYmUgY29uc3QuCi0gICAgdmlydHVhbCBib29sIGlz
RW5hYmxlZEZvcm1Db250cm9sKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8RWxlbWVudCo+
KGNvbnN0X2Nhc3Q8U3BpbkJ1dHRvbkVsZW1lbnQqPih0aGlzKS0+c2hhZG93QW5jZXN0b3JOb2Rl
KCkpLT5pc0VuYWJsZWRGb3JtQ29udHJvbCgpOyB9Ci0gICAgdmlydHVhbCBib29sIGlzUmVhZE9u
bHlGb3JtQ29udHJvbCgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PEVsZW1lbnQqPihjb25z
dF9jYXN0PFNwaW5CdXR0b25FbGVtZW50Kj4odGhpcyktPnNoYWRvd0FuY2VzdG9yTm9kZSgpKS0+
aXNSZWFkT25seUZvcm1Db250cm9sKCk7IH0KLSAgICB2aXJ0dWFsIHZvaWQgZGVmYXVsdEV2ZW50
SGFuZGxlcihFdmVudCopOwotICAgIHZvaWQgc3RhcnRSZXBlYXRpbmdUaW1lcigpOwotICAgIHZv
aWQgc3RvcFJlcGVhdGluZ1RpbWVyKCk7Ci0gICAgdm9pZCByZXBlYXRpbmdUaW1lckZpcmVkKFRp
bWVyPFNwaW5CdXR0b25FbGVtZW50PiopOwotICAgIHZpcnR1YWwgdm9pZCBzZXRIb3ZlcmVkKGJv
b2wgPSB0cnVlKTsKLQotICAgIGJvb2wgbV9jYXB0dXJpbmc7Ci0gICAgVXBEb3duU3RhdGUgbV91
cERvd25TdGF0ZTsKLSAgICBVcERvd25TdGF0ZSBtX3ByZXNzU3RhcnRpbmdTdGF0ZTsKLSAgICBU
aW1lcjxTcGluQnV0dG9uRWxlbWVudD4gbV9yZXBlYXRpbmdUaW1lcjsKLX07Ci0KLSNpZiBFTkFC
TEUoSU5QVVRfU1BFRUNIKQotCi1jbGFzcyBJbnB1dEZpZWxkU3BlZWNoQnV0dG9uRWxlbWVudAot
ICAgIDogcHVibGljIFRleHRDb250cm9sSW5uZXJFbGVtZW50LAotICAgICAgcHVibGljIFNwZWVj
aElucHV0TGlzdGVuZXIgewotcHVibGljOgotICAgIGVudW0gU3BlZWNoSW5wdXRTdGF0ZSB7Ci0g
ICAgICAgIElkbGUsCi0gICAgICAgIFJlY29yZGluZywKLSAgICAgICAgUmVjb2duaXppbmcsCi0g
ICAgfTsKLQotICAgIHN0YXRpYyBQYXNzUmVmUHRyPElucHV0RmllbGRTcGVlY2hCdXR0b25FbGVt
ZW50PiBjcmVhdGUoSFRNTEVsZW1lbnQqKTsKLSAgICB2aXJ0dWFsIH5JbnB1dEZpZWxkU3BlZWNo
QnV0dG9uRWxlbWVudCgpOwotCi0gICAgdmlydHVhbCB2b2lkIGRldGFjaCgpOwotICAgIHZpcnR1
YWwgdm9pZCBkZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50Kik7Ci0gICAgU3BlZWNoSW5wdXRTdGF0
ZSBzdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGU7IH0KLQotICAgIC8vIFNwZWVjaElucHV0
TGlzdGVuZXIgbWV0aG9kcy4KLSAgICB2b2lkIGRpZENvbXBsZXRlUmVjb3JkaW5nKGludCk7Ci0g
ICAgdm9pZCBkaWRDb21wbGV0ZVJlY29nbml0aW9uKGludCk7Ci0gICAgdm9pZCBzZXRSZWNvZ25p
dGlvblJlc3VsdChpbnQsIGNvbnN0IFNwZWVjaElucHV0UmVzdWx0QXJyYXkmKTsKLQotcHJpdmF0
ZToKLSAgICBJbnB1dEZpZWxkU3BlZWNoQnV0dG9uRWxlbWVudChIVE1MRWxlbWVudCopOwotICAg
IFNwZWVjaElucHV0KiBzcGVlY2hJbnB1dCgpOwotICAgIHZvaWQgc2V0U3RhdGUoU3BlZWNoSW5w
dXRTdGF0ZSBzdGF0ZSk7Ci0KLSAgICBib29sIG1fY2FwdHVyaW5nOwotICAgIFNwZWVjaElucHV0
U3RhdGUgbV9zdGF0ZTsKLSAgICBpbnQgbV9saXN0ZW5lcklkOwotICAgIFNwZWVjaElucHV0UmVz
dWx0QXJyYXkgbV9yZXN1bHRzOwotfTsKLQotI2VuZGlmIC8vIEVOQUJMRShJTlBVVF9TUEVFQ0gp
Ci0KLX0gLy8gbmFtZXNwYWNlCi0KLSNlbmRpZgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>83274</attachid>
            <date>2011-02-21 22:41:55 -0800</date>
            <delta_ts>2011-02-22 01:33:17 -0800</delta_ts>
            <desc>patch, from SVN checkout</desc>
            <filename>bug-54853-20110222154152.patch</filename>
            <type>text/plain</type>
            <size>71885</size>
            <attacher name="Roland Steiner">rolandsteiner</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDc5MjkwKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzMgQEAKKzIwMTEtMDItMjEgIFJvbGFuZCBT
dGVpbmVyICA8cm9sYW5kc3RlaW5lckBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQnVnIDU0ODUzIC0gTW92ZSBUZXh0Q29udHJv
bElubmVyRWxlbWVudHMgZnJvbSBXZWJDb3JlL3JlbmRlcmluZyB0byBXZWJDb3JlL2h0bWwvc2hh
ZG93CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01NDg1
MworICAgICAgICAKKyAgICAgICAgTW92aW5nIHRoZSBmaWxlcyBmcm9tIHJlbmRlcmluZyB0byBo
dG1sL3NoYWRvdywgd2l0aCB0aGUgZXhjZXB0aW9uIG9mCisgICAgICAgIHRoZSBjbGFzcyBSZW5k
ZXJUZXh0Q29udHJvbElubmVyQmxvY2ssIHdoaWNoIEkgbW92ZWQgdG8gUmVuZGVyVGV4dENvbnRy
b2xTaW5nbGVMaW5lCisgICAgICAgICh0aGlzIHBsYWNlIGlzIG5vdCBpZGVhbCwgYnV0IG9ubHkg
YSB0ZW1wb3Jhcnkgc3RhdGUgZHVyaW5nIHRoZSBsYXJnZXIgcmVmYWN0b3JpbmcKKyAgICAgICAg
Zm9yIDxpbnB1dD4pLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cy4gKHJlZmFjdG9yaW5nKQorCisg
ICAgICAgICogQW5kcm9pZC5tazoKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAg
KiBXZWJDb3JlLmd5cGk6CisgICAgICAgICogV2ViQ29yZS5wcm86CisgICAgICAgICogV2ViQ29y
ZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2o6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qOgorICAgICAgICAqIGh0bWwvc2hhZG93L1RleHRDb250cm9sSW5uZXJFbGVt
ZW50cy5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0Q29udHJv
bElubmVyRWxlbWVudHMuY3BwLgorICAgICAgICAqIGh0bWwvc2hhZG93L1RleHRDb250cm9sSW5u
ZXJFbGVtZW50cy5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvVGV4dENv
bnRyb2xJbm5lckVsZW1lbnRzLmguCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRleHRDb250
cm9sU2luZ2xlTGluZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0Q29udHJvbElu
bmVyQmxvY2s6OnBvc2l0aW9uRm9yUG9pbnQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJU
ZXh0Q29udHJvbFNpbmdsZUxpbmUuaDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHRDb250
cm9sSW5uZXJCbG9jazo6UmVuZGVyVGV4dENvbnRyb2xJbm5lckJsb2NrKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclRleHRDb250cm9sSW5uZXJCbG9jazo6aGFzTGluZUlmRW1wdHkpOgorICAg
ICAgICAqIHJlbmRlcmluZy9UZXh0Q29udHJvbElubmVyRWxlbWVudHMuY3BwOiBSZW1vdmVkLgor
ICAgICAgICAqIHJlbmRlcmluZy9UZXh0Q29udHJvbElubmVyRWxlbWVudHMuaDogUmVtb3ZlZC4K
KwogMjAxMS0wMi0yMSAgQmVuamFtaW4gS2FsbWFuICA8a2FsbWFuQGNocm9taXVtLm9yZz4KIAog
ICAgICAgICBSZXZpZXdlZCBieSBSeW9zdWtlIE5pd2EuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9B
bmRyb2lkLm1rCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0FuZHJvaWQubWsJKHJldmlz
aW9uIDc5Mjg3KQorKysgU291cmNlL1dlYkNvcmUvQW5kcm9pZC5tawkod29ya2luZyBjb3B5KQpA
QCAtMzUxLDYgKzM1MSw3IEBAIExPQ0FMX1NSQ19GSUxFUyA6PSAkKExPQ0FMX1NSQ19GSUxFUykg
XAogCVwKIAlodG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xzLmNwcCBcCiAJaHRtbC9zaGFkb3cvU2xp
ZGVyVGh1bWJFbGVtZW50LmNwcCBcCisJaHRtbC9zaGFkb3cvVGV4dENvbnRyb2xJbm5lckVsZW1l
bnRzLmNwcCBcCiAJXAogCWxvYWRlci9jYWNoZS9DYWNoZWRDU1NTdHlsZVNoZWV0LmNwcCBcCiAJ
bG9hZGVyL2NhY2hlL0NhY2hlZEZvbnQuY3BwIFwKQEAgLTc4Myw3ICs3ODQsNiBAQCBMT0NBTF9T
UkNfRklMRVMgOj0gJChMT0NBTF9TUkNfRklMRVMpIFwKIAogTE9DQUxfU1JDX0ZJTEVTIDo9ICQo
TE9DQUxfU1JDX0ZJTEVTKSBcCiAJcmVuZGVyaW5nL1Njcm9sbEJlaGF2aW9yLmNwcCBcCi0JcmVu
ZGVyaW5nL1RleHRDb250cm9sSW5uZXJFbGVtZW50cy5jcHAgXAogCXJlbmRlcmluZy9UcmFuc2Zv
cm1TdGF0ZS5jcHAgXAogCXJlbmRlcmluZy9icmVha19saW5lcy5jcHAgXAogCVwKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiA3OTI4NykKKysrIFNvdXJjZS9XZWJDb3JlL0NNYWtl
TGlzdHMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0xMDM1LDYgKzEwMzUsNyBAQCBTRVQoV2ViQ29y
ZV9TT1VSQ0VTCiAKICAgICBodG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xzLmNwcAogICAgIGh0bWwv
c2hhZG93L1NsaWRlclRodW1iRWxlbWVudC5jcHAKKyAgICBodG1sL3NoYWRvdy9UZXh0Q29udHJv
bElubmVyRWxlbWVudHMuY3BwCiAKICAgICBpbnNwZWN0b3IvQ29uc29sZU1lc3NhZ2UuY3BwCiAg
ICAgaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0LmNwcApAQCAtMTQxOCw3ICsxNDE5LDYgQEAgU0VU
KFdlYkNvcmVfU09VUkNFUwogICAgIHJlbmRlcmluZy9Sb290SW5saW5lQm94LmNwcAogICAgIHJl
bmRlcmluZy9TY3JvbGxCZWhhdmlvci5jcHAKICAgICByZW5kZXJpbmcvU2hhZG93RWxlbWVudC5j
cHAKLSAgICByZW5kZXJpbmcvVGV4dENvbnRyb2xJbm5lckVsZW1lbnRzLmNwcAogICAgIHJlbmRl
cmluZy9UcmFuc2Zvcm1TdGF0ZS5jcHAKICAgICByZW5kZXJpbmcvYnJlYWtfbGluZXMuY3BwCiAK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLmd5cGkJKHJldmlzaW9uIDc5Mjg3KQorKysgU291cmNlL1dlYkNvcmUv
V2ViQ29yZS5neXBpCSh3b3JraW5nIGNvcHkpCkBAIC0yMDIyLDYgKzIwMjIsOCBAQAogICAgICAg
ICAgICAgJ2h0bWwvc2hhZG93L1Byb2dyZXNzQmFyVmFsdWVFbGVtZW50LmgnLAogICAgICAgICAg
ICAgJ2h0bWwvc2hhZG93L1NsaWRlclRodW1iRWxlbWVudC5jcHAnLAogICAgICAgICAgICAgJ2h0
bWwvc2hhZG93L1NsaWRlclRodW1iRWxlbWVudC5oJywKKyAgICAgICAgICAgICdodG1sL3NoYWRv
dy9UZXh0Q29udHJvbElubmVyRWxlbWVudHMuY3BwJywKKyAgICAgICAgICAgICdodG1sL3NoYWRv
dy9UZXh0Q29udHJvbElubmVyRWxlbWVudHMuaCcsCiAgICAgICAgICAgICAnaW5zcGVjdG9yL0Nv
bnNvbGVNZXNzYWdlLmNwcCcsCiAgICAgICAgICAgICAnaW5zcGVjdG9yL0NvbnNvbGVNZXNzYWdl
LmgnLAogICAgICAgICAgICAgJ2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdC5jcHAnLApAQCAtNDAy
NCw4ICs0MDI2LDYgQEAKICAgICAgICAgICAgICdyZW5kZXJpbmcvU2hhZG93RWxlbWVudC5jcHAn
LAogICAgICAgICAgICAgJ3JlbmRlcmluZy9TaGFkb3dFbGVtZW50LmgnLAogICAgICAgICAgICAg
J3JlbmRlcmluZy9UYWJsZUxheW91dC5oJywKLSAgICAgICAgICAgICdyZW5kZXJpbmcvVGV4dENv
bnRyb2xJbm5lckVsZW1lbnRzLmNwcCcsCi0gICAgICAgICAgICAncmVuZGVyaW5nL1RleHRDb250
cm9sSW5uZXJFbGVtZW50cy5oJywKICAgICAgICAgICAgICdyZW5kZXJpbmcvVHJhbnNmb3JtU3Rh
dGUuY3BwJywKICAgICAgICAgICAgICdyZW5kZXJpbmcvVHJhbnNmb3JtU3RhdGUuaCcsCiAgICAg
ICAgICAgICAncmVuZGVyaW5nL2JyZWFrX2xpbmVzLmNwcCcsCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLnBybwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnBybwko
cmV2aXNpb24gNzkyODcpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnBybwkod29ya2luZyBj
b3B5KQpAQCAtOTMyLDYgKzkzMiw3IEBAIFNPVVJDRVMgKz0gXAogICAgIGh0bWwvcGFyc2VyL1hT
U0ZpbHRlci5jcHAgXAogICAgIGh0bWwvc2hhZG93L01lZGlhQ29udHJvbHMuY3BwIFwKICAgICBo
dG1sL3NoYWRvdy9TbGlkZXJUaHVtYkVsZW1lbnQuY3BwIFwKKyAgICBodG1sL3NoYWRvdy9UZXh0
Q29udHJvbElubmVyRWxlbWVudHMuY3BwIFwKICAgICBpbnNwZWN0b3IvQ29uc29sZU1lc3NhZ2Uu
Y3BwIFwKICAgICBpbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHQuY3BwIFwKICAgICBpbnNwZWN0b3Iv
SW5qZWN0ZWRTY3JpcHRIb3N0LmNwcCBcCkBAIC0xMjYxLDcgKzEyNjIsNiBAQCBTT1VSQ0VTICs9
IFwKICAgICByZW5kZXJpbmcvUm9vdElubGluZUJveC5jcHAgXAogICAgIHJlbmRlcmluZy9TY3Jv
bGxCZWhhdmlvci5jcHAgXAogICAgIHJlbmRlcmluZy9TaGFkb3dFbGVtZW50LmNwcCBcCi0gICAg
cmVuZGVyaW5nL1RleHRDb250cm9sSW5uZXJFbGVtZW50cy5jcHAgXAogICAgIHJlbmRlcmluZy9U
cmFuc2Zvcm1TdGF0ZS5jcHAgXAogICAgIHJlbmRlcmluZy9zdHlsZS9Db250ZW50RGF0YS5jcHAg
XAogICAgIHJlbmRlcmluZy9zdHlsZS9Db3VudGVyRGlyZWN0aXZlcy5jcHAgXApAQCAtMTg0Niw2
ICsxODQ2LDEwIEBAIEhFQURFUlMgKz0gXAogICAgIGh0bWwvcGFyc2VyL0hUTUxUcmVlQnVpbGRl
ci5oIFwKICAgICBodG1sL3BhcnNlci9IVE1MVmlld1NvdXJjZVBhcnNlci5oIFwKICAgICBodG1s
L3BhcnNlci9YU1NGaWx0ZXIuaCBcCisgICAgaHRtbC9zaGFkb3cvTWVkaWFDb250cm9scy5oIFwK
KyAgICBodG1sL3NoYWRvdy9Qcm9ncmVzc0JhclZhbHVlRWxlbWVudC5oIFwKKyAgICBodG1sL3No
YWRvdy9TbGlkZXJUaHVtYkVsZW1lbnQuaCBcCisgICAgaHRtbC9zaGFkb3cvVGV4dENvbnRyb2xJ
bm5lckVsZW1lbnRzLmggXAogICAgIGluc3BlY3Rvci9Db25zb2xlTWVzc2FnZS5oIFwKICAgICBp
bnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHQuaCBcCiAgICAgaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0
SG9zdC5oIFwKQEAgLTIzMjgsNyArMjMzMiw2IEBAIEhFQURFUlMgKz0gXAogICAgIHJlbmRlcmlu
Zy9zdmcvU1ZHVGV4dExheW91dEVuZ2luZVNwYWNpbmcuaCBcCiAgICAgcmVuZGVyaW5nL3N2Zy9T
VkdUZXh0TWV0cmljcy5oIFwKICAgICByZW5kZXJpbmcvc3ZnL1NWR1RleHRRdWVyeS5oIFwKLSAg
ICByZW5kZXJpbmcvVGV4dENvbnRyb2xJbm5lckVsZW1lbnRzLmggXAogICAgIHJlbmRlcmluZy9U
cmFuc2Zvcm1TdGF0ZS5oIFwKICAgICBzdmcvYW5pbWF0aW9uL1NNSUxUaW1lQ29udGFpbmVyLmgg
XAogICAgIHN2Zy9hbmltYXRpb24vU01JTFRpbWUuaCBcCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagkocmV2aXNpb24gNzkyODcpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagkod29ya2luZyBjb3B5KQpA
QCAtMzg0ODgsNjIgKzM4NDg4LDYgQEAKIAkJCQk+CiAJCQk8L0ZpbGU+CiAJCQk8RmlsZQotCQkJ
CVJlbGF0aXZlUGF0aD0iLi5ccmVuZGVyaW5nXFRleHRDb250cm9sSW5uZXJFbGVtZW50cy5jcHAi
Ci0JCQkJPgotCQkJCTxGaWxlQ29uZmlndXJhdGlvbgotCQkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiIK
LQkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiCi0JCQkJCT4KLQkJCQkJPFRvb2wKLQkJCQkJ
CU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCi0JCQkJCS8+Ci0JCQkJPC9GaWxlQ29uZmlndXJhdGlv
bj4KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KLQkJCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiIKLQkJ
CQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiCi0JCQkJCT4KLQkJCQkJPFRvb2wKLQkJCQkJCU5h
bWU9IlZDQ0xDb21waWxlclRvb2wiCi0JCQkJCS8+Ci0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4K
LQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KLQkJCQkJTmFtZT0iRGVidWdfQ2Fpcm9fQ0ZMaXRlfFdp
bjMyIgotCQkJCQlFeGNsdWRlZEZyb21CdWlsZD0idHJ1ZSIKLQkJCQkJPgotCQkJCQk8VG9vbAot
CQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKLQkJCQkJLz4KLQkJCQk8L0ZpbGVDb25maWd1
cmF0aW9uPgotCQkJCTxGaWxlQ29uZmlndXJhdGlvbgotCQkJCQlOYW1lPSJSZWxlYXNlX0NhaXJv
X0NGTGl0ZXxXaW4zMiIKLQkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiCi0JCQkJCT4KLQkJ
CQkJPFRvb2wKLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCi0JCQkJCS8+Ci0JCQkJPC9G
aWxlQ29uZmlndXJhdGlvbj4KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KLQkJCQkJTmFtZT0iRGVi
dWdfQWxsfFdpbjMyIgotCQkJCQlFeGNsdWRlZEZyb21CdWlsZD0idHJ1ZSIKLQkJCQkJPgotCQkJ
CQk8VG9vbAotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKLQkJCQkJLz4KLQkJCQk8L0Zp
bGVDb25maWd1cmF0aW9uPgotCQkJCTxGaWxlQ29uZmlndXJhdGlvbgotCQkJCQlOYW1lPSJSZWxl
YXNlX0xUQ0d8V2luMzIiCi0JCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIgotCQkJCQk+Ci0J
CQkJCTxUb29sCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgotCQkJCQkvPgotCQkJCTwv
RmlsZUNvbmZpZ3VyYXRpb24+Ci0JCQk8L0ZpbGU+Ci0JCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0
aD0iLi5ccmVuZGVyaW5nXFRleHRDb250cm9sSW5uZXJFbGVtZW50cy5oIgotCQkJCT4KLQkJCTwv
RmlsZT4KLQkJCTxGaWxlCiAJCQkJUmVsYXRpdmVQYXRoPSIuLlxyZW5kZXJpbmdcVHJhaWxpbmdG
bG9hdHNSb290SW5saW5lQm94LmgiCiAJCQkJPgogCQkJPC9GaWxlPgpAQCAtNTU4MDQsNiArNTU3
NDgsMTQgQEAKIAkJCQkJUmVsYXRpdmVQYXRoPSIuLlxodG1sXHNoYWRvd1xTbGlkZXJUaHVtYkVs
ZW1lbnQuaCIKIAkJCQkJPgogCQkJCTwvRmlsZT4KKyAgICAgICAgICAgICAgICA8RmlsZQorICAg
ICAgICAgICAgICAgICAgICBSZWxhdGl2ZVBhdGg9Ii4uXHJlbmRlcmluZ1xUZXh0Q29udHJvbElu
bmVyRWxlbWVudHMuY3BwIgorICAgICAgICAgICAgICAgICAgICA+CisgICAgICAgICAgICAgICAg
PC9GaWxlPgorICAgICAgICAgICAgICAgIDxGaWxlCisgICAgICAgICAgICAgICAgICAgIFJlbGF0
aXZlUGF0aD0iLi5ccmVuZGVyaW5nXFRleHRDb250cm9sSW5uZXJFbGVtZW50cy5oIgorICAgICAg
ICAgICAgICAgICAgICA+CisgICAgICAgICAgICAgICAgPC9GaWxlPgogCQkJPC9GaWx0ZXI+CiAJ
CTwvRmlsdGVyPgogCQk8RmlsdGVyCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiA3OTI4NykKKysrIFNvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpA
QCAtMjgzLDYgKzI4Myw4IEBACiAJCTE0MTlEMkM1MENFQTZGNjEwMEZGNTA3QSAvKiBUcmVlU2hh
cmVkLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDE5
RDJDNDBDRUE2RjYxMDBGRjUwN0EgLyogVHJlZVNoYXJlZC5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTE0MjAxMUI2MEEwMDMxMzMwMDgzMDNGOSAv
KiBKU0NTU1N0eWxlRGVjbGFyYXRpb24uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMTQyMDExQjQwQTAwMzEzMzAwODMwM0Y5IC8qIEpTQ1NTU3R5bGVE
ZWNsYXJhdGlvbi5jcHAgKi87IH07CiAJCTE0MjAxMUI3MEEwMDMxMzMwMDgzMDNGOSAvKiBKU0NT
U1N0eWxlRGVjbGFyYXRpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDE0MjAxMUI1MEEwMDMxMzMwMDgzMDNGOSAvKiBKU0NTU1N0eWxlRGVjbGFyYXRp
b24uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkx
NDJCOTdDOTEzMTM4OTQzMDA4QkVGNEIgLyogVGV4dENvbnRyb2xJbm5lckVsZW1lbnRzLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0MkI5N0M3MTMx
Mzg5NDMwMDhCRUY0QiAvKiBUZXh0Q29udHJvbElubmVyRWxlbWVudHMuY3BwICovOyB9OworCQkx
NDJCOTdDQTEzMTM4OTQzMDA4QkVGNEIgLyogVGV4dENvbnRyb2xJbm5lckVsZW1lbnRzLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDJCOTdDODEzMTM4
OTQzMDA4QkVGNEIgLyogVGV4dENvbnRyb2xJbm5lckVsZW1lbnRzLmggKi87IH07CiAJCTE0MzJF
ODQ3MEM1MTQ5MzgwMEIxNTAwRiAvKiBHQ0NvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0MzJFODQ2MEM1MTQ5MzgwMEIxNTAwRiAvKiBH
Q0NvbnRyb2xsZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQkxNDMyRTg0OTBDNTE0OTNGMDBCMTUwMEYgLyogR0NDb250cm9sbGVyLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0MzJFODQ4MEM1MTQ5
M0YwMEIxNTAwRiAvKiBHQ0NvbnRyb2xsZXIuY3BwICovOyB9OwogCQkxNDQ5RTI0QzEwN0Q0QTg0
MDBCNTc5M0YgLyogSlNDYWxsYmFja0RhdGEuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDE0NDlFMjRBMTA3RDRBODQwMEI1NzkzRiAvKiBKU0NhbGxiYWNr
RGF0YS5oICovOyB9OwpAQCAtNDAwNiw4ICs0MDA4LDYgQEAKIAkJQUEyMUVDQ0QwQUJGMEZDNjAw
MkI4MzRDIC8qIENTU0N1cnNvckltYWdlVmFsdWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEFBMDk3OEVFMEFCQUE2RTEwMDg3NDQ4MCAvKiBDU1NDdXJz
b3JJbWFnZVZhbHVlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJQUE0QzNBNzYwQjJCMTY3OTAwMjMzNEEyIC8qIFN0eWxlRWxlbWVudC5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBQTRDM0E3NDBCMkIx
Njc5MDAyMzM0QTIgLyogU3R5bGVFbGVtZW50LmNwcCAqLzsgfTsKIAkJQUE0QzNBNzcwQjJCMTY3
OTAwMjMzNEEyIC8qIFN0eWxlRWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQUE0QzNBNzUwQjJCMTY3OTAwMjMzNEEyIC8qIFN0eWxlRWxlbWVu
dC5oICovOyB9OwotCQlBQjAxNERFMzBFNjg5QTQzMDBFMTA0NDUgLyogVGV4dENvbnRyb2xJbm5l
ckVsZW1lbnRzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEFCMDE0REUxMEU2ODlBNDMwMEUxMDQ0NSAvKiBUZXh0Q29udHJvbElubmVyRWxlbWVudHMu
Y3BwICovOyB9OwotCQlBQjAxNERFNDBFNjg5QTQzMDBFMTA0NDUgLyogVGV4dENvbnRyb2xJbm5l
ckVsZW1lbnRzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBBQjAxNERFMjBFNjg5QTQzMDBFMTA0NDUgLyogVGV4dENvbnRyb2xJbm5lckVsZW1lbnRzLmgg
Ki87IH07CiAJCUFCMjNBMzI3MDlCQkE3RDAwMDY3Q0M1MyAvKiBCZWZvcmVUZXh0SW5zZXJ0ZWRF
dmVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBB
QjIzQTMyNTA5QkJBN0QwMDA2N0NDNTMgLyogQmVmb3JlVGV4dEluc2VydGVkRXZlbnQuY3BwICov
OyB9OwogCQlBQjIzQTMyODA5QkJBN0QwMDA2N0NDNTMgLyogQmVmb3JlVGV4dEluc2VydGVkRXZl
bnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEFCMjNB
MzI2MDlCQkE3RDAwMDY3Q0M1MyAvKiBCZWZvcmVUZXh0SW5zZXJ0ZWRFdmVudC5oICovOyB9Owog
CQlBQjI0N0E2QzBBRkQ2MzgzMDAzRkE1RkQgLyogUmVuZGVyU2xpZGVyLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEFCMjQ3QTZBMEFGRDYzODMwMDNG
QTVGRCAvKiBSZW5kZXJTbGlkZXIuY3BwICovOyB9OwpAQCAtNjU3OSw2ICs2NTc5LDggQEAKIAkJ
MTQyMDExQUUwQTAwMzExNzAwODMwM0Y5IC8qIENTU1N0eWxlRGVjbGFyYXRpb24uaWRsICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxl
VHlwZSA9IHRleHQ7IHBhdGggPSBDU1NTdHlsZURlY2xhcmF0aW9uLmlkbDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMTQyMDExQjQwQTAwMzEzMzAwODMwM0Y5IC8qIEpTQ1NTU3R5bGVE
ZWNsYXJhdGlvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlND
U1NTdHlsZURlY2xhcmF0aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTQy
MDExQjUwQTAwMzEzMzAwODMwM0Y5IC8qIEpTQ1NTU3R5bGVEZWNsYXJhdGlvbi5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNDU1NTdHlsZURlY2xhcmF0aW9uLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTE0MkI5N0M3MTMxMzg5NDMwMDhCRUY0QiAvKiBUZXh0
Q29udHJvbElubmVyRWxlbWVudHMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gVGV4dENvbnRyb2xJbm5lckVsZW1lbnRzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJMTQyQjk3QzgxMzEzODk0MzAwOEJFRjRCIC8qIFRleHRDb250cm9sSW5uZXJFbGVt
ZW50cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUZXh0Q29udHJvbElubmVy
RWxlbWVudHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTQzMkU4NDYwQzUxNDkz
ODAwQjE1MDBGIC8qIEdDQ29udHJvbGxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gR0NDb250cm9sbGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0MzJF
ODQ4MEM1MTQ5M0YwMEIxNTAwRiAvKiBHQ0NvbnRyb2xsZXIuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEdDQ29udHJvbGxlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTE0NDlFMjRBMTA3RDRBODQwMEI1NzkzRiAvKiBKU0NhbGxiYWNrRGF0YS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0NhbGxiYWNrRGF0YS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTAxNjIsOCArMTAxNjQsNiBAQAogCQlBQTA5NzhF
RTBBQkFBNkUxMDA4NzQ0ODAgLyogQ1NTQ3Vyc29ySW1hZ2VWYWx1ZS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gQ1NTQ3Vyc29ySW1hZ2VWYWx1ZS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlBQTRDM0E3NDBCMkIxNjc5MDAyMzM0QTIgLyogU3R5bGVFbGVtZW50
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTdHlsZUVsZW1lbnQu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBQTRDM0E3NTBCMkIxNjc5MDAyMzM0
QTIgLyogU3R5bGVFbGVtZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBT
dHlsZUVsZW1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQUIwMTRERTEwRTY4
OUE0MzAwRTEwNDQ1IC8qIFRleHRDb250cm9sSW5uZXJFbGVtZW50cy5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUZXh0Q29udHJvbElubmVyRWxlbWVudHMuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlBQjAxNERFMjBFNjg5QTQzMDBFMTA0NDUgLyog
VGV4dENvbnRyb2xJbm5lckVsZW1lbnRzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFRleHRDb250cm9sSW5uZXJFbGVtZW50cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlBQjIzQTMyNTA5QkJBN0QwMDA2N0NDNTMgLyogQmVmb3JlVGV4dEluc2VydGVkRXZlbnQu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEJlZm9yZVRleHRJbnNl
cnRlZEV2ZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQUIyM0EzMjYwOUJC
QTdEMDAwNjdDQzUzIC8qIEJlZm9yZVRleHRJbnNlcnRlZEV2ZW50LmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBCZWZvcmVUZXh0SW5zZXJ0ZWRFdmVudC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlBQjI0N0E2QTBBRkQ2MzgzMDAzRkE1RkQgLyogUmVuZGVyU2xp
ZGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZW5kZXJTbGlk
ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTMxODAsNiArMTMxODAsOCBA
QAogCQkJCUE3RkU4MTlCMTJGQTY3NzcwMDg1MEMxRSAvKiBQcm9ncmVzc0JhclZhbHVlRWxlbWVu
dC5oICovLAogCQkJCTQxNTBGOUYwMTJCNkUwRTcwMDA4Qzg2MCAvKiBTbGlkZXJUaHVtYkVsZW1l
bnQuY3BwICovLAogCQkJCTQxNTBGOUVGMTJCNkUwRTcwMDA4Qzg2MCAvKiBTbGlkZXJUaHVtYkVs
ZW1lbnQuaCAqLywKKwkJCQkxNDJCOTdDNzEzMTM4OTQzMDA4QkVGNEIgLyogVGV4dENvbnRyb2xJ
bm5lckVsZW1lbnRzLmNwcCAqLywKKwkJCQkxNDJCOTdDODEzMTM4OTQzMDA4QkVGNEIgLyogVGV4
dENvbnRyb2xJbm5lckVsZW1lbnRzLmggKi8sCiAJCQkpOwogCQkJcGF0aCA9IHNoYWRvdzsKIAkJ
CXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CkBAIC0xODg1NCw4ICsxODg1Niw2IEBACiAJCQkJQTdG
MzM4QTExMUMwRUZDQTAwQTMyMEE3IC8qIFNoYWRvd0VsZW1lbnQuY3BwICovLAogCQkJCUE3RjMz
OEEyMTFDMEVGQ0EwMEEzMjBBNyAvKiBTaGFkb3dFbGVtZW50LmggKi8sCiAJCQkJQThDRkYwNEMw
QTE1NEYwOTAwMEE0MjM0IC8qIFRhYmxlTGF5b3V0LmggKi8sCi0JCQkJQUIwMTRERTEwRTY4OUE0
MzAwRTEwNDQ1IC8qIFRleHRDb250cm9sSW5uZXJFbGVtZW50cy5jcHAgKi8sCi0JCQkJQUIwMTRE
RTIwRTY4OUE0MzAwRTEwNDQ1IC8qIFRleHRDb250cm9sSW5uZXJFbGVtZW50cy5oICovLAogCQkJ
CTM3RkM5NkRBMTEwNEVENzEwMDNFMUZBRCAvKiBUcmFpbGluZ0Zsb2F0c1Jvb3RJbmxpbmVCb3gu
aCAqLywKIAkJCQkwRjUwMEFCMDBGNTREQjMxMDBFRUY5MjggLyogVHJhbnNmb3JtU3RhdGUuY3Bw
ICovLAogCQkJCTBGNTAwQUFFMEY1NERCMUIwMEVFRjkyOCAvKiBUcmFuc2Zvcm1TdGF0ZS5oICov
LApAQCAtMjIyMTQsNyArMjIyMTQsNyBAQAogCQkJCUIyQzNEQTQwMEQwMDZDMUQwMEVGNkYyNiAv
KiBUZXh0Q29kZWNVc2VyRGVmaW5lZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjJDM0RBNDIwRDAw
NkMxRDAwRUY2RjI2IC8qIFRleHRDb2RlY1VURjE2LmggaW4gSGVhZGVycyAqLywKIAkJCQk5MzQz
Q0I4MjEyRjI1RTUxMDAzM0M1RUUgLyogVGV4dENvZGVjVVRGOC5oIGluIEhlYWRlcnMgKi8sCi0J
CQkJQUIwMTRERTQwRTY4OUE0MzAwRTEwNDQ1IC8qIFRleHRDb250cm9sSW5uZXJFbGVtZW50cy5o
IGluIEhlYWRlcnMgKi8sCisJCQkJMTQyQjk3Q0ExMzEzODk0MzAwOEJFRjRCIC8qIFRleHRDb250
cm9sSW5uZXJFbGVtZW50cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjJDM0RBNDUwRDAwNkMxRDAw
RUY2RjI2IC8qIFRleHREaXJlY3Rpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTk3QkM4NEI0MTIz
NzExODAwMDBDNjE2MSAvKiBUZXh0RG9jdW1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTk3QkM4
NDg0MTIzNkZEOTMwMDBDNjE2MSAvKiBUZXh0RG9jdW1lbnRQYXJzZXIuaCBpbiBIZWFkZXJzICov
LApAQCAtMjQ4OTUsNyArMjQ4OTUsNyBAQAogCQkJCUIyQzNEQTNGMEQwMDZDMUQwMEVGNkYyNiAv
KiBUZXh0Q29kZWNVc2VyRGVmaW5lZC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCMkMzREE0MTBE
MDA2QzFEMDBFRjZGMjYgLyogVGV4dENvZGVjVVRGMTYuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
OTM0M0NCODExMkYyNUU1MTAwMzNDNUVFIC8qIFRleHRDb2RlY1VURjguY3BwIGluIFNvdXJjZXMg
Ki8sCi0JCQkJQUIwMTRERTMwRTY4OUE0MzAwRTEwNDQ1IC8qIFRleHRDb250cm9sSW5uZXJFbGVt
ZW50cy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkxNDJCOTdDOTEzMTM4OTQzMDA4QkVGNEIgLyog
VGV4dENvbnRyb2xJbm5lckVsZW1lbnRzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTk3QkM4NEIz
MTIzNzExODAwMDBDNjE2MSAvKiBUZXh0RG9jdW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
OTdCQzg0ODMxMjM2RkQ5MzAwMEM2MTYxIC8qIFRleHREb2N1bWVudFBhcnNlci5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQlCMkMzREE0NjBEMDA2QzFEMDBFRjZGMjYgLyogVGV4dEVuY29kaW5nLmNw
cCBpbiBTb3VyY2VzICovLApJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvVGV4dENv
bnRyb2xJbm5lckVsZW1lbnRzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1s
L3NoYWRvdy9UZXh0Q29udHJvbElubmVyRWxlbWVudHMuY3BwCShyZXZpc2lvbiA3OTI3NCkJKGZy
b20gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1RleHRDb250cm9sSW5uZXJFbGVtZW50cy5jcHA6
NzkyNzQpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9UZXh0Q29udHJvbElubmVyRWxl
bWVudHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTM1IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDA2LCAyMDA4LCAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVU
RVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRF
UiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJUZXh0Q29udHJvbElubmVyRWxl
bWVudHMuaCIKKworI2luY2x1ZGUgIkJlZm9yZVRleHRJbnNlcnRlZEV2ZW50LmgiCisjaW5jbHVk
ZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJFdmVudEhhbmRsZXIuaCIKKyNpbmNsdWRlICJFdmVu
dE5hbWVzLmgiCisjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJIVE1MSW5wdXRFbGVtZW50
LmgiCisjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCisjaW5jbHVkZSAiSFRNTFRleHRBcmVhRWxlbWVu
dC5oIgorI2luY2x1ZGUgIk1vdXNlRXZlbnQuaCIKKyNpbmNsdWRlICJQYWdlLmgiCisjaW5jbHVk
ZSAiUmVuZGVyTGF5ZXIuaCIKKyNpbmNsdWRlICJSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUu
aCIKKyNpbmNsdWRlICJTY3JvbGxiYXJUaGVtZS5oIgorI2luY2x1ZGUgIlNwZWVjaElucHV0Lmgi
CisjaW5jbHVkZSAiU3BlZWNoSW5wdXRFdmVudC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K3VzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CisKK2NsYXNzIFJlbmRlclRleHRDb250cm9sSW5u
ZXJCbG9jayA6IHB1YmxpYyBSZW5kZXJCbG9jayB7CitwdWJsaWM6CisgICAgUmVuZGVyVGV4dENv
bnRyb2xJbm5lckJsb2NrKE5vZGUqIG5vZGUsIGJvb2wgaXNNdWx0aUxpbmUpIDogUmVuZGVyQmxv
Y2sobm9kZSksIG1fbXVsdGlMaW5lKGlzTXVsdGlMaW5lKSB7IH0KKworcHJpdmF0ZToKKyAgICB2
aXJ0dWFsIGJvb2wgaGFzTGluZUlmRW1wdHkoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CisgICAg
dmlydHVhbCBWaXNpYmxlUG9zaXRpb24gcG9zaXRpb25Gb3JQb2ludChjb25zdCBJbnRQb2ludCYp
OworCisgICAgYm9vbCBtX211bHRpTGluZTsKK307CisKK1Zpc2libGVQb3NpdGlvbiBSZW5kZXJU
ZXh0Q29udHJvbElubmVyQmxvY2s6OnBvc2l0aW9uRm9yUG9pbnQoY29uc3QgSW50UG9pbnQmIHBv
aW50KQoreworICAgIEludFBvaW50IGNvbnRlbnRzUG9pbnQocG9pbnQpOworCisgICAgLy8gTXVs
dGlsaW5lIHRleHQgY29udHJvbHMgaGF2ZSB0aGUgc2Nyb2xsIG9uIHNoYWRvd0FuY2VzdG9yTm9k
ZSwgc28gd2UgbmVlZCB0byB0YWtlIHRoYXQKKyAgICAvLyBpbnRvIGFjY291bnQgaGVyZS4KKyAg
ICBpZiAobV9tdWx0aUxpbmUpIHsKKyAgICAgICAgUmVuZGVyVGV4dENvbnRyb2wqIHJlbmRlcmVy
ID0gdG9SZW5kZXJUZXh0Q29udHJvbChub2RlKCktPnNoYWRvd0FuY2VzdG9yTm9kZSgpLT5yZW5k
ZXJlcigpKTsKKyAgICAgICAgaWYgKHJlbmRlcmVyLT5oYXNPdmVyZmxvd0NsaXAoKSkKKyAgICAg
ICAgICAgIGNvbnRlbnRzUG9pbnQgKz0gcmVuZGVyZXItPmxheWVyKCktPnNjcm9sbGVkQ29udGVu
dE9mZnNldCgpOworICAgIH0KKworICAgIHJldHVybiBSZW5kZXJCbG9jazo6cG9zaXRpb25Gb3JQ
b2ludChjb250ZW50c1BvaW50KTsKK30KKworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQorCitUZXh0Q29udHJvbElubmVyRWxlbWVudDo6VGV4dENvbnRyb2xJbm5lckVsZW1lbnQoRG9j
dW1lbnQqIGRvY3VtZW50LCBIVE1MRWxlbWVudCogc2hhZG93UGFyZW50KQorICAgIDogSFRNTERp
dkVsZW1lbnQoZGl2VGFnLCBkb2N1bWVudCkKK3sKKyAgICBzZXRTaGFkb3dIb3N0KHNoYWRvd1Bh
cmVudCk7Cit9CisKK1Bhc3NSZWZQdHI8VGV4dENvbnRyb2xJbm5lckVsZW1lbnQ+IFRleHRDb250
cm9sSW5uZXJFbGVtZW50OjpjcmVhdGUoSFRNTEVsZW1lbnQqIHNoYWRvd1BhcmVudCkKK3sKKyAg
ICByZXR1cm4gYWRvcHRSZWYobmV3IFRleHRDb250cm9sSW5uZXJFbGVtZW50KHNoYWRvd1BhcmVu
dC0+ZG9jdW1lbnQoKSwgc2hhZG93UGFyZW50KSk7Cit9CisKK3ZvaWQgVGV4dENvbnRyb2xJbm5l
ckVsZW1lbnQ6OmF0dGFjaElubmVyRWxlbWVudChOb2RlKiBwYXJlbnQsIFBhc3NSZWZQdHI8UmVu
ZGVyU3R5bGU+IHN0eWxlLCBSZW5kZXJBcmVuYSogYXJlbmEpCit7CisgICAgLy8gV2hlbiBhZGRp
bmcgdGhlc2UgZWxlbWVudHMsIGNyZWF0ZSB0aGUgcmVuZGVyZXIgJiBzdHlsZSBmaXJzdCBiZWZv
cmUgYWRkaW5nIHRvIHRoZSBET00uCisgICAgLy8gT3RoZXJ3aXNlLCB0aGUgcmVuZGVyIHRyZWUg
d2lsbCBjcmVhdGUgc29tZSBhbm9ueW1vdXMgYmxvY2tzIHRoYXQgd2lsbCBtZXNzIHVwIG91ciBs
YXlvdXQuCisKKyAgICAvLyBDcmVhdGUgdGhlIHJlbmRlcmVyIHdpdGggdGhlIHNwZWNpZmllZCBz
dHlsZQorICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBjcmVhdGVSZW5kZXJlcihhcmVuYSwg
c3R5bGUuZ2V0KCkpOworICAgIGlmIChyZW5kZXJlcikgeworICAgICAgICBzZXRSZW5kZXJlcihy
ZW5kZXJlcik7CisgICAgICAgIHJlbmRlcmVyLT5zZXRTdHlsZShzdHlsZSk7CisgICAgfQorCisg
ICAgLy8gU2V0IHRoZXNlIGV4cGxpY2l0bHkgc2luY2UgdGhpcyBub3JtYWxseSBoYXBwZW5zIGR1
cmluZyBhbiBhdHRhY2goKQorICAgIHNldEF0dGFjaGVkKCk7CisgICAgc2V0SW5Eb2N1bWVudCgp
OworCisgICAgLy8gRm9yIGVsZW1lbnRzIG5vdCB5ZXQgaW4gc2hhZG93IERPTSwgYWRkIHRoZSBu
b2RlIHRvIHRoZSBET00gbm9ybWFsbHkuCisgICAgaWYgKCFpc1NoYWRvd1Jvb3QoKSkgeworICAg
ICAgICAvLyBGSVhNRTogVGhpcyBjb2RlIHNlZW1zIHZlcnkgd3JvbmcuICBXaHkgYXJlIHdlIG1h
Z2ljYWxseSBhZGRpbmcgfHRoaXN8IHRvIHRoZSBET00gaGVyZT8KKyAgICAgICAgLy8gICAgICAg
IFdlIHNob3VsZG4ndCBiZSBjYWxsaW5nIHBhcnNlciBBUEkgbWV0aG9kcyBvdXRzaWRlIG9mIHRo
ZSBwYXJzZXIhCisgICAgICAgIHBhcmVudC0+ZGVwcmVjYXRlZFBhcnNlckFkZENoaWxkKHRoaXMp
OworICAgIH0KKworICAgIC8vIEFkZCB0aGUgcmVuZGVyZXIgdG8gdGhlIHJlbmRlciB0cmVlCisg
ICAgaWYgKHJlbmRlcmVyKQorICAgICAgICBwYXJlbnQtPnJlbmRlcmVyKCktPmFkZENoaWxkKHJl
bmRlcmVyKTsKK30KKwordm9pZCBUZXh0Q29udHJvbElubmVyRWxlbWVudDo6ZGV0YWNoKCkKK3sK
KyAgICBIVE1MRGl2RWxlbWVudDo6ZGV0YWNoKCk7CisgICAgLy8gRklYTUU6IFJlbW92ZSBvbmNl
IHNoYWRvdyBET00gdXNlcyBFbGVtZW50OjpzZXRTaGFkb3dSb290KCkuCisgICAgaWYgKHNoYWRv
d0hvc3QoKSkKKyAgICAgICAgc2V0U2hhZG93SG9zdCgwKTsKK30KKworLy8gLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQorCitpbmxpbmUgVGV4dENvbnRyb2xJbm5lclRleHRFbGVtZW50OjpU
ZXh0Q29udHJvbElubmVyVGV4dEVsZW1lbnQoRG9jdW1lbnQqIGRvY3VtZW50LCBIVE1MRWxlbWVu
dCogc2hhZG93UGFyZW50KQorICAgIDogVGV4dENvbnRyb2xJbm5lckVsZW1lbnQoZG9jdW1lbnQs
IHNoYWRvd1BhcmVudCkKK3sKK30KKworUGFzc1JlZlB0cjxUZXh0Q29udHJvbElubmVyVGV4dEVs
ZW1lbnQ+IFRleHRDb250cm9sSW5uZXJUZXh0RWxlbWVudDo6Y3JlYXRlKERvY3VtZW50KiBkb2N1
bWVudCwgSFRNTEVsZW1lbnQqIHNoYWRvd1BhcmVudCkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYo
bmV3IFRleHRDb250cm9sSW5uZXJUZXh0RWxlbWVudChkb2N1bWVudCwgc2hhZG93UGFyZW50KSk7
Cit9CisKK3ZvaWQgVGV4dENvbnRyb2xJbm5lclRleHRFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5k
bGVyKEV2ZW50KiBldmVudCkKK3sKKyAgICAvLyBGSVhNRTogSW4gdGhlIGZ1dHVyZSwgd2Ugc2hv
dWxkIGFkZCBhIHdheSB0byBoYXZlIGRlZmF1bHQgZXZlbnQgbGlzdGVuZXJzLgorICAgIC8vIFRo
ZW4gd2Ugd291bGQgYWRkIG9uZSB0byB0aGUgdGV4dCBmaWVsZCdzIGlubmVyIGRpdiwgYW5kIHdl
IHdvdWxkbid0IG5lZWQgdGhpcyBzdWJjbGFzcy4KKyAgICAvLyBPciBwb3NzaWJseSB3ZSBjb3Vs
ZCBqdXN0IHVzZSBhIG5vcm1hbCBldmVudCBsaXN0ZW5lci4KKyAgICBpZiAoZXZlbnQtPmlzQmVm
b3JlVGV4dEluc2VydGVkRXZlbnQoKSB8fCBldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS53
ZWJraXRFZGl0YWJsZUNvbnRlbnRDaGFuZ2VkRXZlbnQpIHsKKyAgICAgICAgTm9kZSogc2hhZG93
QW5jZXN0b3IgPSBzaGFkb3dBbmNlc3Rvck5vZGUoKTsKKyAgICAgICAgLy8gQSBUZXh0Q29udHJv
bElubmVyVGV4dEVsZW1lbnQgY2FuIGJlIGl0cyBvd24gc2hhZG93IGFuY2VzdG9yIGlmIGl0cyBi
ZWVuIGRldGFjaGVkLCBidXQga2VwdCBhbGl2ZSBieSBhbiBFZGl0Q29tbWFuZC4KKyAgICAgICAg
Ly8gSW4gdGhpcyBjYXNlLCBhbiB1bmRvL3JlZG8gY2FuIGNhdXNlIGV2ZW50cyB0byBiZSBzZW50
IHRvIHRoZSBUZXh0Q29udHJvbElubmVyVGV4dEVsZW1lbnQuICAKKyAgICAgICAgLy8gVG8gcHJl
dmVudCBhbiBpbmZpbml0ZSBsb29wLCB3ZSBtdXN0IGNoZWNrIGZvciB0aGlzIGNhc2UgYmVmb3Jl
IHNlbmRpbmcgdGhlIGV2ZW50IHVwIHRoZSBjaGFpbi4KKyAgICAgICAgaWYgKHNoYWRvd0FuY2Vz
dG9yICYmIHNoYWRvd0FuY2VzdG9yICE9IHRoaXMpCisgICAgICAgICAgICBzaGFkb3dBbmNlc3Rv
ci0+ZGVmYXVsdEV2ZW50SGFuZGxlcihldmVudCk7CisgICAgfQorICAgIGlmICghZXZlbnQtPmRl
ZmF1bHRIYW5kbGVkKCkpCisgICAgICAgIEhUTUxEaXZFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5k
bGVyKGV2ZW50KTsKK30KKworUmVuZGVyT2JqZWN0KiBUZXh0Q29udHJvbElubmVyVGV4dEVsZW1l
bnQ6OmNyZWF0ZVJlbmRlcmVyKFJlbmRlckFyZW5hKiBhcmVuYSwgUmVuZGVyU3R5bGUqKQorewor
ICAgIGJvb2wgbXVsdGlMaW5lID0gZmFsc2U7CisgICAgTm9kZSogc2hhZG93QW5jZXN0b3IgPSBz
aGFkb3dBbmNlc3Rvck5vZGUoKTsKKyAgICBpZiAoc2hhZG93QW5jZXN0b3IgJiYgc2hhZG93QW5j
ZXN0b3ItPnJlbmRlcmVyKCkpIHsKKyAgICAgICAgQVNTRVJUKHNoYWRvd0FuY2VzdG9yLT5yZW5k
ZXJlcigpLT5pc1RleHRGaWVsZCgpIHx8IHNoYWRvd0FuY2VzdG9yLT5yZW5kZXJlcigpLT5pc1Rl
eHRBcmVhKCkpOworICAgICAgICBtdWx0aUxpbmUgPSBzaGFkb3dBbmNlc3Rvci0+cmVuZGVyZXIo
KS0+aXNUZXh0QXJlYSgpOworICAgIH0KKyAgICByZXR1cm4gbmV3IChhcmVuYSkgUmVuZGVyVGV4
dENvbnRyb2xJbm5lckJsb2NrKHRoaXMsIG11bHRpTGluZSk7Cit9CisKKy8vIC0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KKworaW5saW5lIFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRvbkVsZW1l
bnQ6OlNlYXJjaEZpZWxkUmVzdWx0c0J1dHRvbkVsZW1lbnQoRG9jdW1lbnQqIGRvY3VtZW50KQor
ICAgIDogVGV4dENvbnRyb2xJbm5lckVsZW1lbnQoZG9jdW1lbnQpCit7Cit9CisKK1Bhc3NSZWZQ
dHI8U2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uRWxlbWVudD4gU2VhcmNoRmllbGRSZXN1bHRzQnV0
dG9uRWxlbWVudDo6Y3JlYXRlKERvY3VtZW50KiBkb2N1bWVudCkKK3sKKyAgICByZXR1cm4gYWRv
cHRSZWYobmV3IFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRvbkVsZW1lbnQoZG9jdW1lbnQpKTsKK30K
Kwordm9pZCBTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b25FbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5k
bGVyKEV2ZW50KiBldmVudCkKK3sKKyAgICAvLyBPbiBtb3VzZWRvd24sIGJyaW5nIHVwIGEgbWVu
dSwgaWYgbmVlZGVkCisgICAgSFRNTElucHV0RWxlbWVudCogaW5wdXQgPSBzdGF0aWNfY2FzdDxI
VE1MSW5wdXRFbGVtZW50Kj4oc2hhZG93QW5jZXN0b3JOb2RlKCkpOworICAgIGlmIChldmVudC0+
dHlwZSgpID09IGV2ZW50TmFtZXMoKS5tb3VzZWRvd25FdmVudCAmJiBldmVudC0+aXNNb3VzZUV2
ZW50KCkgJiYgc3RhdGljX2Nhc3Q8TW91c2VFdmVudCo+KGV2ZW50KS0+YnV0dG9uKCkgPT0gTGVm
dEJ1dHRvbikgeworICAgICAgICBpbnB1dC0+Zm9jdXMoKTsKKyAgICAgICAgaW5wdXQtPnNlbGVj
dCgpOworICAgICAgICBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUqIHJlbmRlcmVyID0gdG9S
ZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUoaW5wdXQtPnJlbmRlcmVyKCkpOworICAgICAgICBp
ZiAocmVuZGVyZXItPnBvcHVwSXNWaXNpYmxlKCkpCisgICAgICAgICAgICByZW5kZXJlci0+aGlk
ZVBvcHVwKCk7CisgICAgICAgIGVsc2UgaWYgKGlucHV0LT5tYXhSZXN1bHRzKCkgPiAwKQorICAg
ICAgICAgICAgcmVuZGVyZXItPnNob3dQb3B1cCgpOworICAgICAgICBldmVudC0+c2V0RGVmYXVs
dEhhbmRsZWQoKTsKKyAgICB9CisKKyAgICBpZiAoIWV2ZW50LT5kZWZhdWx0SGFuZGxlZCgpKQor
ICAgICAgICBIVE1MRGl2RWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcihldmVudCk7Cit9CisK
Ky8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworaW5saW5lIFNlYXJjaEZpZWxkQ2Fu
Y2VsQnV0dG9uRWxlbWVudDo6U2VhcmNoRmllbGRDYW5jZWxCdXR0b25FbGVtZW50KERvY3VtZW50
KiBkb2N1bWVudCkKKyAgICA6IFRleHRDb250cm9sSW5uZXJFbGVtZW50KGRvY3VtZW50KQorICAg
ICwgbV9jYXB0dXJpbmcoZmFsc2UpCit7Cit9CisKK1Bhc3NSZWZQdHI8U2VhcmNoRmllbGRDYW5j
ZWxCdXR0b25FbGVtZW50PiBTZWFyY2hGaWVsZENhbmNlbEJ1dHRvbkVsZW1lbnQ6OmNyZWF0ZShE
b2N1bWVudCogZG9jdW1lbnQpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTZWFyY2hGaWVs
ZENhbmNlbEJ1dHRvbkVsZW1lbnQoZG9jdW1lbnQpKTsKK30KKwordm9pZCBTZWFyY2hGaWVsZENh
bmNlbEJ1dHRvbkVsZW1lbnQ6OmRldGFjaCgpCit7CisgICAgaWYgKG1fY2FwdHVyaW5nKSB7Cisg
ICAgICAgIGlmIChGcmFtZSogZnJhbWUgPSBkb2N1bWVudCgpLT5mcmFtZSgpKQorICAgICAgICAg
ICAgZnJhbWUtPmV2ZW50SGFuZGxlcigpLT5zZXRDYXB0dXJpbmdNb3VzZUV2ZW50c05vZGUoMCk7
CisgICAgfQorICAgIFRleHRDb250cm9sSW5uZXJFbGVtZW50OjpkZXRhY2goKTsKK30KKworCit2
b2lkIFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uRWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcihF
dmVudCogZXZlbnQpCit7CisgICAgLy8gSWYgdGhlIGVsZW1lbnQgaXMgdmlzaWJsZSwgb24gbW91
c2V1cCwgY2xlYXIgdGhlIHZhbHVlLCBhbmQgc2V0IHNlbGVjdGlvbgorICAgIFJlZlB0cjxIVE1M
SW5wdXRFbGVtZW50PiBpbnB1dChzdGF0aWNfY2FzdDxIVE1MSW5wdXRFbGVtZW50Kj4oc2hhZG93
QW5jZXN0b3JOb2RlKCkpKTsKKyAgICBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCku
bW91c2Vkb3duRXZlbnQgJiYgZXZlbnQtPmlzTW91c2VFdmVudCgpICYmIHN0YXRpY19jYXN0PE1v
dXNlRXZlbnQqPihldmVudCktPmJ1dHRvbigpID09IExlZnRCdXR0b24pIHsKKyAgICAgICAgaWYg
KHJlbmRlcmVyKCkgJiYgcmVuZGVyZXIoKS0+dmlzaWJsZVRvSGl0VGVzdGluZygpKSB7CisgICAg
ICAgICAgICBpZiAoRnJhbWUqIGZyYW1lID0gZG9jdW1lbnQoKS0+ZnJhbWUoKSkgeworICAgICAg
ICAgICAgICAgIGZyYW1lLT5ldmVudEhhbmRsZXIoKS0+c2V0Q2FwdHVyaW5nTW91c2VFdmVudHNO
b2RlKHRoaXMpOworICAgICAgICAgICAgICAgIG1fY2FwdHVyaW5nID0gdHJ1ZTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgICAgICBpbnB1dC0+Zm9jdXMoKTsKKyAgICAgICAgaW5wdXQt
PnNlbGVjdCgpOworICAgICAgICBldmVudC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsKKyAgICB9Cisg
ICAgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLm1vdXNldXBFdmVudCAmJiBldmVu
dC0+aXNNb3VzZUV2ZW50KCkgJiYgc3RhdGljX2Nhc3Q8TW91c2VFdmVudCo+KGV2ZW50KS0+YnV0
dG9uKCkgPT0gTGVmdEJ1dHRvbikgeworICAgICAgICBpZiAobV9jYXB0dXJpbmcpIHsKKyAgICAg
ICAgICAgIGlmIChGcmFtZSogZnJhbWUgPSBkb2N1bWVudCgpLT5mcmFtZSgpKSB7CisgICAgICAg
ICAgICAgICAgZnJhbWUtPmV2ZW50SGFuZGxlcigpLT5zZXRDYXB0dXJpbmdNb3VzZUV2ZW50c05v
ZGUoMCk7CisgICAgICAgICAgICAgICAgbV9jYXB0dXJpbmcgPSBmYWxzZTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGlmIChob3ZlcmVkKCkpIHsKKyAgICAgICAgICAgICAgICBTdHJpbmcg
b2xkVmFsdWUgPSBpbnB1dC0+dmFsdWUoKTsKKyAgICAgICAgICAgICAgICBpbnB1dC0+c2V0VmFs
dWUoIiIpOworICAgICAgICAgICAgICAgIGlmICghb2xkVmFsdWUuaXNFbXB0eSgpKSB7CisgICAg
ICAgICAgICAgICAgICAgIHRvUmVuZGVyVGV4dENvbnRyb2woaW5wdXQtPnJlbmRlcmVyKCkpLT5z
ZXRDaGFuZ2VkU2luY2VMYXN0Q2hhbmdlRXZlbnQodHJ1ZSk7CisgICAgICAgICAgICAgICAgICAg
IGlucHV0LT5kaXNwYXRjaEZvcm1Db250cm9sSW5wdXRFdmVudCgpOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICBpbnB1dC0+b25TZWFyY2goKTsKKyAgICAgICAgICAgICAgICBl
dmVudC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
IH0KKworICAgIGlmICghZXZlbnQtPmRlZmF1bHRIYW5kbGVkKCkpCisgICAgICAgIEhUTUxEaXZF
bGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKGV2ZW50KTsKK30KKworLy8gLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQorCitpbmxpbmUgU3BpbkJ1dHRvbkVsZW1lbnQ6OlNwaW5CdXR0b25F
bGVtZW50KEhUTUxFbGVtZW50KiBzaGFkb3dQYXJlbnQpCisgICAgOiBUZXh0Q29udHJvbElubmVy
RWxlbWVudChzaGFkb3dQYXJlbnQtPmRvY3VtZW50KCksIHNoYWRvd1BhcmVudCkKKyAgICAsIG1f
Y2FwdHVyaW5nKGZhbHNlKQorICAgICwgbV91cERvd25TdGF0ZShJbmRldGVybWluYXRlKQorICAg
ICwgbV9wcmVzc1N0YXJ0aW5nU3RhdGUoSW5kZXRlcm1pbmF0ZSkKKyAgICAsIG1fcmVwZWF0aW5n
VGltZXIodGhpcywgJlNwaW5CdXR0b25FbGVtZW50OjpyZXBlYXRpbmdUaW1lckZpcmVkKQorewor
fQorCitQYXNzUmVmUHRyPFNwaW5CdXR0b25FbGVtZW50PiBTcGluQnV0dG9uRWxlbWVudDo6Y3Jl
YXRlKEhUTUxFbGVtZW50KiBzaGFkb3dQYXJlbnQpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5l
dyBTcGluQnV0dG9uRWxlbWVudChzaGFkb3dQYXJlbnQpKTsKK30KKwordm9pZCBTcGluQnV0dG9u
RWxlbWVudDo6ZGV0YWNoKCkKK3sKKyAgICBzdG9wUmVwZWF0aW5nVGltZXIoKTsKKyAgICBpZiAo
bV9jYXB0dXJpbmcpIHsKKyAgICAgICAgaWYgKEZyYW1lKiBmcmFtZSA9IGRvY3VtZW50KCktPmZy
YW1lKCkpIHsKKyAgICAgICAgICAgIGZyYW1lLT5ldmVudEhhbmRsZXIoKS0+c2V0Q2FwdHVyaW5n
TW91c2VFdmVudHNOb2RlKDApOworICAgICAgICAgICAgbV9jYXB0dXJpbmcgPSBmYWxzZTsKKyAg
ICAgICAgfQorICAgIH0KKyAgICBUZXh0Q29udHJvbElubmVyRWxlbWVudDo6ZGV0YWNoKCk7Cit9
CisKK3ZvaWQgU3BpbkJ1dHRvbkVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQqIGV2
ZW50KQoreworICAgIGlmICghZXZlbnQtPmlzTW91c2VFdmVudCgpKSB7CisgICAgICAgIGlmICgh
ZXZlbnQtPmRlZmF1bHRIYW5kbGVkKCkpCisgICAgICAgICAgICBIVE1MRGl2RWxlbWVudDo6ZGVm
YXVsdEV2ZW50SGFuZGxlcihldmVudCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBS
ZW5kZXJCb3gqIGJveCA9IHJlbmRlckJveCgpOworICAgIGlmICghYm94KSB7CisgICAgICAgIGlm
ICghZXZlbnQtPmRlZmF1bHRIYW5kbGVkKCkpCisgICAgICAgICAgICBIVE1MRGl2RWxlbWVudDo6
ZGVmYXVsdEV2ZW50SGFuZGxlcihldmVudCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICBSZWZQdHI8SFRNTElucHV0RWxlbWVudD4gaW5wdXQoc3RhdGljX2Nhc3Q8SFRNTElucHV0RWxl
bWVudCo+KHNoYWRvd0FuY2VzdG9yTm9kZSgpKSk7CisgICAgaWYgKGlucHV0LT5kaXNhYmxlZCgp
IHx8IGlucHV0LT5pc1JlYWRPbmx5Rm9ybUNvbnRyb2woKSkgeworICAgICAgICBpZiAoIWV2ZW50
LT5kZWZhdWx0SGFuZGxlZCgpKQorICAgICAgICAgICAgSFRNTERpdkVsZW1lbnQ6OmRlZmF1bHRF
dmVudEhhbmRsZXIoZXZlbnQpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgTW91c2VF
dmVudCogbW91c2VFdmVudCA9IHN0YXRpY19jYXN0PE1vdXNlRXZlbnQqPihldmVudCk7CisgICAg
SW50UG9pbnQgbG9jYWwgPSByb3VuZGVkSW50UG9pbnQoYm94LT5hYnNvbHV0ZVRvTG9jYWwobW91
c2VFdmVudC0+YWJzb2x1dGVMb2NhdGlvbigpLCBmYWxzZSwgdHJ1ZSkpOworICAgIGlmIChtb3Vz
ZUV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLm1vdXNlZG93bkV2ZW50ICYmIG1vdXNlRXZl
bnQtPmJ1dHRvbigpID09IExlZnRCdXR0b24pIHsKKyAgICAgICAgaWYgKGJveC0+Ym9yZGVyQm94
UmVjdCgpLmNvbnRhaW5zKGxvY2FsKSkgeworICAgICAgICAgICAgLy8gVGhlIGZvbGxvd2luZyBm
dW5jdGlvbnMgb2YgSFRNTElucHV0RWxlbWVudCBtYXkgcnVuIEphdmFTY3JpcHQKKyAgICAgICAg
ICAgIC8vIGNvZGUgd2hpY2ggZGV0YWNoZXMgdGhpcyBzaGFkb3cgbm9kZS4gV2UgbmVlZCB0byB0
YWtlIGEgcmVmZXJlbmNlCisgICAgICAgICAgICAvLyBhbmQgY2hlY2sgcmVuZGVyZXIoKSBhZnRl
ciBzdWNoIGZ1bmN0aW9uIGNhbGxzLgorICAgICAgICAgICAgUmVmUHRyPE5vZGU+IHByb3RlY3Rv
cih0aGlzKTsKKyAgICAgICAgICAgIGlucHV0LT5mb2N1cygpOworICAgICAgICAgICAgaW5wdXQt
PnNlbGVjdCgpOworICAgICAgICAgICAgaWYgKHJlbmRlcmVyKCkpIHsKKyAgICAgICAgICAgICAg
ICBpbnB1dC0+c3RlcFVwRnJvbVJlbmRlcmVyKG1fdXBEb3duU3RhdGUgPT0gVXAgPyAxIDogLTEp
OworICAgICAgICAgICAgICAgIGlmIChyZW5kZXJlcigpKQorICAgICAgICAgICAgICAgICAgICBz
dGFydFJlcGVhdGluZ1RpbWVyKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBldmVudC0+
c2V0RGVmYXVsdEhhbmRsZWQoKTsKKyAgICAgICAgfQorICAgIH0gZWxzZSBpZiAobW91c2VFdmVu
dC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5tb3VzZXVwRXZlbnQgJiYgbW91c2VFdmVudC0+YnV0
dG9uKCkgPT0gTGVmdEJ1dHRvbikKKyAgICAgICAgc3RvcFJlcGVhdGluZ1RpbWVyKCk7CisgICAg
ZWxzZSBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkubW91c2Vtb3ZlRXZlbnQpIHsK
KyAgICAgICAgaWYgKGJveC0+Ym9yZGVyQm94UmVjdCgpLmNvbnRhaW5zKGxvY2FsKSkgeworICAg
ICAgICAgICAgaWYgKCFtX2NhcHR1cmluZykgeworICAgICAgICAgICAgICAgIGlmIChGcmFtZSog
ZnJhbWUgPSBkb2N1bWVudCgpLT5mcmFtZSgpKSB7CisgICAgICAgICAgICAgICAgICAgIGZyYW1l
LT5ldmVudEhhbmRsZXIoKS0+c2V0Q2FwdHVyaW5nTW91c2VFdmVudHNOb2RlKHRoaXMpOworICAg
ICAgICAgICAgICAgICAgICBtX2NhcHR1cmluZyA9IHRydWU7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgVXBEb3duU3RhdGUgb2xkVXBEb3duU3RhdGUgPSBt
X3VwRG93blN0YXRlOworICAgICAgICAgICAgbV91cERvd25TdGF0ZSA9IGxvY2FsLnkoKSA8IGJv
eC0+aGVpZ2h0KCkgLyAyID8gVXAgOiBEb3duOworICAgICAgICAgICAgaWYgKG1fdXBEb3duU3Rh
dGUgIT0gb2xkVXBEb3duU3RhdGUpCisgICAgICAgICAgICAgICAgcmVuZGVyZXIoKS0+cmVwYWlu
dCgpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaWYgKG1fY2FwdHVyaW5nKSB7Cisg
ICAgICAgICAgICAgICAgc3RvcFJlcGVhdGluZ1RpbWVyKCk7CisgICAgICAgICAgICAgICAgaWYg
KEZyYW1lKiBmcmFtZSA9IGRvY3VtZW50KCktPmZyYW1lKCkpIHsKKyAgICAgICAgICAgICAgICAg
ICAgZnJhbWUtPmV2ZW50SGFuZGxlcigpLT5zZXRDYXB0dXJpbmdNb3VzZUV2ZW50c05vZGUoMCk7
CisgICAgICAgICAgICAgICAgICAgIG1fY2FwdHVyaW5nID0gZmFsc2U7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgaWYgKCFldmVudC0+
ZGVmYXVsdEhhbmRsZWQoKSkKKyAgICAgICAgSFRNTERpdkVsZW1lbnQ6OmRlZmF1bHRFdmVudEhh
bmRsZXIoZXZlbnQpOworfQorCit2b2lkIFNwaW5CdXR0b25FbGVtZW50OjpzdGFydFJlcGVhdGlu
Z1RpbWVyKCkKK3sKKyAgICBtX3ByZXNzU3RhcnRpbmdTdGF0ZSA9IG1fdXBEb3duU3RhdGU7Cisg
ICAgU2Nyb2xsYmFyVGhlbWUqIHRoZW1lID0gU2Nyb2xsYmFyVGhlbWU6Om5hdGl2ZVRoZW1lKCk7
CisgICAgbV9yZXBlYXRpbmdUaW1lci5zdGFydCh0aGVtZS0+aW5pdGlhbEF1dG9zY3JvbGxUaW1l
ckRlbGF5KCksIHRoZW1lLT5hdXRvc2Nyb2xsVGltZXJEZWxheSgpKTsKK30KKwordm9pZCBTcGlu
QnV0dG9uRWxlbWVudDo6c3RvcFJlcGVhdGluZ1RpbWVyKCkKK3sKKyAgICBtX3JlcGVhdGluZ1Rp
bWVyLnN0b3AoKTsKK30KKwordm9pZCBTcGluQnV0dG9uRWxlbWVudDo6cmVwZWF0aW5nVGltZXJG
aXJlZChUaW1lcjxTcGluQnV0dG9uRWxlbWVudD4qKQoreworICAgIEhUTUxJbnB1dEVsZW1lbnQq
IGlucHV0ID0gc3RhdGljX2Nhc3Q8SFRNTElucHV0RWxlbWVudCo+KHNoYWRvd0FuY2VzdG9yTm9k
ZSgpKTsKKyAgICBpZiAoaW5wdXQtPmRpc2FibGVkKCkgfHwgaW5wdXQtPmlzUmVhZE9ubHlGb3Jt
Q29udHJvbCgpKQorICAgICAgICByZXR1cm47CisgICAgLy8gT24gTWFjIE9TLCBOU1N0ZXBwZXIg
dXBkYXRlcyB0aGUgdmFsdWUgZm9yIHRoZSBidXR0b24gdW5kZXIgdGhlIG1vdXNlCisgICAgLy8g
Y3Vyc29yIHJlZ2FyZGxlc3Mgb2YgdGhlIGJ1dHRvbiBwcmVzc2VkIGF0IHRoZSBiZWdpbm5pbmcu
IFNvIHRoZQorICAgIC8vIGZvbGxvd2luZyBjaGVjayBpcyBub3QgbmVlZGVkIGZvciBNYWMgT1Mu
CisjaWYgIU9TKE1BQ19PU19YKQorICAgIGlmIChtX3VwRG93blN0YXRlICE9IG1fcHJlc3NTdGFy
dGluZ1N0YXRlKQorICAgICAgICByZXR1cm47CisjZW5kaWYKKyAgICBpbnB1dC0+c3RlcFVwRnJv
bVJlbmRlcmVyKG1fdXBEb3duU3RhdGUgPT0gVXAgPyAxIDogLTEpOworfQorCit2b2lkIFNwaW5C
dXR0b25FbGVtZW50OjpzZXRIb3ZlcmVkKGJvb2wgZmxhZykKK3sKKyAgICBpZiAoIWhvdmVyZWQo
KSAmJiBmbGFnKQorICAgICAgICBtX3VwRG93blN0YXRlID0gSW5kZXRlcm1pbmF0ZTsKKyAgICBU
ZXh0Q29udHJvbElubmVyRWxlbWVudDo6c2V0SG92ZXJlZChmbGFnKTsKK30KKworCisvLyAtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyNpZiBFTkFCTEUoSU5QVVRfU1BFRUNIKQorCitp
bmxpbmUgSW5wdXRGaWVsZFNwZWVjaEJ1dHRvbkVsZW1lbnQ6OklucHV0RmllbGRTcGVlY2hCdXR0
b25FbGVtZW50KEhUTUxFbGVtZW50KiBzaGFkb3dQYXJlbnQpCisgICAgOiBUZXh0Q29udHJvbElu
bmVyRWxlbWVudChzaGFkb3dQYXJlbnQtPmRvY3VtZW50KCksIHNoYWRvd1BhcmVudCkKKyAgICAs
IG1fY2FwdHVyaW5nKGZhbHNlKQorICAgICwgbV9zdGF0ZShJZGxlKQorICAgICwgbV9saXN0ZW5l
cklkKGRvY3VtZW50KCktPnBhZ2UoKS0+c3BlZWNoSW5wdXQoKS0+cmVnaXN0ZXJMaXN0ZW5lcih0
aGlzKSkKK3sKK30KKworSW5wdXRGaWVsZFNwZWVjaEJ1dHRvbkVsZW1lbnQ6On5JbnB1dEZpZWxk
U3BlZWNoQnV0dG9uRWxlbWVudCgpCit7CisgICAgU3BlZWNoSW5wdXQqIHNwZWVjaCA9IHNwZWVj
aElucHV0KCk7CisgICAgaWYgKHNwZWVjaCAmJiBtX2xpc3RlbmVySWQpICB7IC8vIENvdWxkIGJl
IG51bGwgd2hlbiBwYWdlIGlzIHVubG9hZGluZy4KKyAgICAgICAgaWYgKG1fc3RhdGUgIT0gSWRs
ZSkKKyAgICAgICAgICAgIHNwZWVjaC0+Y2FuY2VsUmVjb2duaXRpb24obV9saXN0ZW5lcklkKTsK
KyAgICAgICAgc3BlZWNoLT51bnJlZ2lzdGVyTGlzdGVuZXIobV9saXN0ZW5lcklkKTsKKyAgICB9
Cit9CisKK1Bhc3NSZWZQdHI8SW5wdXRGaWVsZFNwZWVjaEJ1dHRvbkVsZW1lbnQ+IElucHV0Rmll
bGRTcGVlY2hCdXR0b25FbGVtZW50OjpjcmVhdGUoSFRNTEVsZW1lbnQqIHNoYWRvd1BhcmVudCkK
K3sKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IElucHV0RmllbGRTcGVlY2hCdXR0b25FbGVtZW50
KHNoYWRvd1BhcmVudCkpOworfQorCit2b2lkIElucHV0RmllbGRTcGVlY2hCdXR0b25FbGVtZW50
OjpkZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50KiBldmVudCkKK3sKKyAgICAvLyBGb3IgcHJpdmFj
eSByZWFzb25zLCBvbmx5IGFsbG93IGNsaWNrcyBkaXJlY3RseSBjb21pbmcgZnJvbSB0aGUgdXNl
ci4KKyAgICBpZiAoIWV2ZW50LT5mcm9tVXNlckdlc3R1cmUoKSkgeworICAgICAgICBIVE1MRGl2
RWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcihldmVudCk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICAvLyBUaGUgY2FsbCB0byBmb2N1cygpIGJlbG93IGRpc3BhdGNoZXMgYSBmb2N1
cyBldmVudCwgYW5kIGFuIGV2ZW50IGhhbmRsZXIgaW4gdGhlIHBhZ2UgbWlnaHQKKyAgICAvLyBy
ZW1vdmUgdGhlIGlucHV0IGVsZW1lbnQgZnJvbSBET00uIFRvIG1ha2Ugc3VyZSBpdCByZW1haW5z
IHZhbGlkIHVudGlsIHdlIGZpbmlzaCBvdXIgd29yaworICAgIC8vIGhlcmUsIHdlIHRha2UgYSB0
ZW1wb3JhcnkgcmVmZXJlbmNlLgorICAgIFJlZlB0cjxIVE1MSW5wdXRFbGVtZW50PiBpbnB1dChz
dGF0aWNfY2FzdDxIVE1MSW5wdXRFbGVtZW50Kj4oc2hhZG93QW5jZXN0b3JOb2RlKCkpKTsKKwor
ICAgIC8vIE9uIG1vdXNlIGRvd24sIHNlbGVjdCB0aGUgdGV4dCBhbmQgc2V0IGZvY3VzLgorICAg
IGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5tb3VzZWRvd25FdmVudCAmJiBldmVu
dC0+aXNNb3VzZUV2ZW50KCkgJiYgc3RhdGljX2Nhc3Q8TW91c2VFdmVudCo+KGV2ZW50KS0+YnV0
dG9uKCkgPT0gTGVmdEJ1dHRvbikgeworICAgICAgICBpZiAocmVuZGVyZXIoKSAmJiByZW5kZXJl
cigpLT52aXNpYmxlVG9IaXRUZXN0aW5nKCkpIHsKKyAgICAgICAgICAgIGlmIChGcmFtZSogZnJh
bWUgPSBkb2N1bWVudCgpLT5mcmFtZSgpKSB7CisgICAgICAgICAgICAgICAgZnJhbWUtPmV2ZW50
SGFuZGxlcigpLT5zZXRDYXB0dXJpbmdNb3VzZUV2ZW50c05vZGUodGhpcyk7CisgICAgICAgICAg
ICAgICAgbV9jYXB0dXJpbmcgPSB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
ICAgIFJlZlB0cjxJbnB1dEZpZWxkU3BlZWNoQnV0dG9uRWxlbWVudD4gaG9sZFJlZkJ1dHRvbih0
aGlzKTsKKyAgICAgICAgaW5wdXQtPmZvY3VzKCk7CisgICAgICAgIGlucHV0LT5zZWxlY3QoKTsK
KyAgICAgICAgZXZlbnQtPnNldERlZmF1bHRIYW5kbGVkKCk7CisgICAgfQorICAgIC8vIE9uIG1v
dXNlIHVwLCByZWxlYXNlIGNhcHR1cmUgY2xlYW5seS4KKyAgICBpZiAoZXZlbnQtPnR5cGUoKSA9
PSBldmVudE5hbWVzKCkubW91c2V1cEV2ZW50ICYmIGV2ZW50LT5pc01vdXNlRXZlbnQoKSAmJiBz
dGF0aWNfY2FzdDxNb3VzZUV2ZW50Kj4oZXZlbnQpLT5idXR0b24oKSA9PSBMZWZ0QnV0dG9uKSB7
CisgICAgICAgIGlmIChtX2NhcHR1cmluZyAmJiByZW5kZXJlcigpICYmIHJlbmRlcmVyKCktPnZp
c2libGVUb0hpdFRlc3RpbmcoKSkgeworICAgICAgICAgICAgaWYgKEZyYW1lKiBmcmFtZSA9IGRv
Y3VtZW50KCktPmZyYW1lKCkpIHsKKyAgICAgICAgICAgICAgICBmcmFtZS0+ZXZlbnRIYW5kbGVy
KCktPnNldENhcHR1cmluZ01vdXNlRXZlbnRzTm9kZSgwKTsKKyAgICAgICAgICAgICAgICBtX2Nh
cHR1cmluZyA9IGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAg
aWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLmNsaWNrRXZlbnQpIHsKKyAgICAgICAg
c3dpdGNoIChtX3N0YXRlKSB7CisgICAgICAgIGNhc2UgSWRsZTogeworICAgICAgICAgICAgICBB
dG9taWNTdHJpbmcgbGFuZ3VhZ2UgPSBpbnB1dC0+Y29tcHV0ZUluaGVyaXRlZExhbmd1YWdlKCk7
CisgICAgICAgICAgICAgIFN0cmluZyBncmFtbWFyID0gaW5wdXQtPmdldEF0dHJpYnV0ZSh3ZWJr
aXRncmFtbWFyQXR0cik7CisgICAgICAgICAgICAgIEludFJlY3QgcmVjdCA9IGlucHV0LT5yZW5k
ZXJlcigpLT5hYnNvbHV0ZUJvdW5kaW5nQm94UmVjdCgpOworICAgICAgICAgICAgICBpZiAoc3Bl
ZWNoSW5wdXQoKS0+c3RhcnRSZWNvZ25pdGlvbihtX2xpc3RlbmVySWQsIHJlY3QsIGxhbmd1YWdl
LCBncmFtbWFyLCBkb2N1bWVudCgpLT5zZWN1cml0eU9yaWdpbigpKSkKKyAgICAgICAgICAgICAg
ICAgIHNldFN0YXRlKFJlY29yZGluZyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSBSZWNvcmRpbmc6CisgICAgICAgICAgICBzcGVlY2hJbnB1dCgpLT5z
dG9wUmVjb3JkaW5nKG1fbGlzdGVuZXJJZCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSBSZWNvZ25pemluZzoKKyAgICAgICAgICAgIC8vIE5vdGhpbmcgdG8gZG8gaGVyZSwgd2Ug
d2lsbCBjb250aW51ZSB0byB3YWl0IGZvciByZXN1bHRzLgorICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIH0KKyAgICAgICAgZXZlbnQtPnNldERlZmF1bHRIYW5kbGVkKCk7CisgICAgfQorCisg
ICAgaWYgKCFldmVudC0+ZGVmYXVsdEhhbmRsZWQoKSkKKyAgICAgICAgSFRNTERpdkVsZW1lbnQ6
OmRlZmF1bHRFdmVudEhhbmRsZXIoZXZlbnQpOworfQorCit2b2lkIElucHV0RmllbGRTcGVlY2hC
dXR0b25FbGVtZW50OjpzZXRTdGF0ZShTcGVlY2hJbnB1dFN0YXRlIHN0YXRlKQoreworICAgIGlm
IChtX3N0YXRlICE9IHN0YXRlKSB7CisgICAgICAgIG1fc3RhdGUgPSBzdGF0ZTsKKyAgICAgICAg
c2hhZG93QW5jZXN0b3JOb2RlKCktPnJlbmRlcmVyKCktPnJlcGFpbnQoKTsKKyAgICB9Cit9CisK
K1NwZWVjaElucHV0KiBJbnB1dEZpZWxkU3BlZWNoQnV0dG9uRWxlbWVudDo6c3BlZWNoSW5wdXQo
KQoreworICAgIHJldHVybiBkb2N1bWVudCgpLT5wYWdlKCkgPyBkb2N1bWVudCgpLT5wYWdlKCkt
PnNwZWVjaElucHV0KCkgOiAwOworfQorCit2b2lkIElucHV0RmllbGRTcGVlY2hCdXR0b25FbGVt
ZW50OjpkaWRDb21wbGV0ZVJlY29yZGluZyhpbnQpCit7CisgICAgc2V0U3RhdGUoUmVjb2duaXpp
bmcpOworfQorCit2b2lkIElucHV0RmllbGRTcGVlY2hCdXR0b25FbGVtZW50OjpkaWRDb21wbGV0
ZVJlY29nbml0aW9uKGludCkKK3sKKyAgICBzZXRTdGF0ZShJZGxlKTsKK30KKwordm9pZCBJbnB1
dEZpZWxkU3BlZWNoQnV0dG9uRWxlbWVudDo6c2V0UmVjb2duaXRpb25SZXN1bHQoaW50LCBjb25z
dCBTcGVlY2hJbnB1dFJlc3VsdEFycmF5JiByZXN1bHRzKQoreworICAgIG1fcmVzdWx0cyA9IHJl
c3VsdHM7CisKKyAgICAvLyBUaGUgY2FsbCB0byBzZXRWYWx1ZSgpIGJlbG93IGRpc3BhdGNoZXMg
YW4gZXZlbnQsIGFuZCBhbiBldmVudCBoYW5kbGVyIGluIHRoZSBwYWdlIG1pZ2h0CisgICAgLy8g
cmVtb3ZlIHRoZSBpbnB1dCBlbGVtZW50IGZyb20gRE9NLiBUbyBtYWtlIHN1cmUgaXQgcmVtYWlu
cyB2YWxpZCB1bnRpbCB3ZSBmaW5pc2ggb3VyIHdvcmsKKyAgICAvLyBoZXJlLCB3ZSB0YWtlIGEg
dGVtcG9yYXJ5IHJlZmVyZW5jZS4KKyAgICBSZWZQdHI8SFRNTElucHV0RWxlbWVudD4gaW5wdXQo
c3RhdGljX2Nhc3Q8SFRNTElucHV0RWxlbWVudCo+KHNoYWRvd0FuY2VzdG9yTm9kZSgpKSk7Cisg
ICAgUmVmUHRyPElucHV0RmllbGRTcGVlY2hCdXR0b25FbGVtZW50PiBob2xkUmVmQnV0dG9uKHRo
aXMpOworICAgIGlucHV0LT5zZXRWYWx1ZShyZXN1bHRzLmlzRW1wdHkoKSA/ICIiIDogcmVzdWx0
c1swXS0+dXR0ZXJhbmNlKCkpOworICAgIGlucHV0LT5kaXNwYXRjaEV2ZW50KFNwZWVjaElucHV0
RXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkud2Via2l0c3BlZWNoY2hhbmdlRXZlbnQsIHJlc3Vs
dHMpKTsKKworICAgIC8vIENoZWNrIGJlZm9yZSBhY2Nlc3NpbmcgdGhlIHJlbmRlcmVyIGFzIHRo
ZSBhYm92ZSBldmVudCBjb3VsZCBoYXZlIHBvdGVudGlhbGx5IHR1cm5lZCBvZmYKKyAgICAvLyBz
cGVlY2ggaW4gdGhlIGlucHV0IGVsZW1lbnQsIGhlbmNlIHJlbW92aW5nIHRoaXMgYnV0dG9uIGFu
ZCByZW5kZXJlciBmcm9tIHRoZSBoaWVyYXJjaHkuCisgICAgaWYgKHJlbmRlcmVyKCkpCisgICAg
ICAgIHJlbmRlcmVyKCktPnJlcGFpbnQoKTsKK30KKwordm9pZCBJbnB1dEZpZWxkU3BlZWNoQnV0
dG9uRWxlbWVudDo6ZGV0YWNoKCkKK3sKKyAgICBpZiAobV9jYXB0dXJpbmcpIHsKKyAgICAgICAg
aWYgKEZyYW1lKiBmcmFtZSA9IGRvY3VtZW50KCktPmZyYW1lKCkpCisgICAgICAgICAgICBmcmFt
ZS0+ZXZlbnRIYW5kbGVyKCktPnNldENhcHR1cmluZ01vdXNlRXZlbnRzTm9kZSgwKTsKKyAgICB9
CisKKyAgICBpZiAobV9saXN0ZW5lcklkKSB7CisgICAgICAgIGlmIChtX3N0YXRlICE9IElkbGUp
CisgICAgICAgICAgICBzcGVlY2hJbnB1dCgpLT5jYW5jZWxSZWNvZ25pdGlvbihtX2xpc3RlbmVy
SWQpOworICAgICAgICBzcGVlY2hJbnB1dCgpLT51bnJlZ2lzdGVyTGlzdGVuZXIobV9saXN0ZW5l
cklkKTsKKyAgICAgICAgbV9saXN0ZW5lcklkID0gMDsKKyAgICB9CisKKyAgICBUZXh0Q29udHJv
bElubmVyRWxlbWVudDo6ZGV0YWNoKCk7Cit9CisKKyNlbmRpZiAvLyBFTkFCTEUoSU5QVVRfU1BF
RUNIKQorCit9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9UZXh0Q29udHJvbElu
bmVyRWxlbWVudHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93
L1RleHRDb250cm9sSW5uZXJFbGVtZW50cy5jcHAJKHJldmlzaW9uIDc5Mjc0KQorKysgU291cmNl
L1dlYkNvcmUvaHRtbC9zaGFkb3cvVGV4dENvbnRyb2xJbm5lckVsZW1lbnRzLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNDcsMzQgKzQ3LDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiB1c2luZyBu
YW1lc3BhY2UgSFRNTE5hbWVzOwogCi1jbGFzcyBSZW5kZXJUZXh0Q29udHJvbElubmVyQmxvY2sg
OiBwdWJsaWMgUmVuZGVyQmxvY2sgewotcHVibGljOgotICAgIFJlbmRlclRleHRDb250cm9sSW5u
ZXJCbG9jayhOb2RlKiBub2RlLCBib29sIGlzTXVsdGlMaW5lKSA6IFJlbmRlckJsb2NrKG5vZGUp
LCBtX211bHRpTGluZShpc011bHRpTGluZSkgeyB9Ci0KLXByaXZhdGU6Ci0gICAgdmlydHVhbCBi
b29sIGhhc0xpbmVJZkVtcHR5KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQotICAgIHZpcnR1YWwg
VmlzaWJsZVBvc2l0aW9uIHBvc2l0aW9uRm9yUG9pbnQoY29uc3QgSW50UG9pbnQmKTsKLQotICAg
IGJvb2wgbV9tdWx0aUxpbmU7Ci19OwotCi1WaXNpYmxlUG9zaXRpb24gUmVuZGVyVGV4dENvbnRy
b2xJbm5lckJsb2NrOjpwb3NpdGlvbkZvclBvaW50KGNvbnN0IEludFBvaW50JiBwb2ludCkKLXsK
LSAgICBJbnRQb2ludCBjb250ZW50c1BvaW50KHBvaW50KTsKLQotICAgIC8vIE11bHRpbGluZSB0
ZXh0IGNvbnRyb2xzIGhhdmUgdGhlIHNjcm9sbCBvbiBzaGFkb3dBbmNlc3Rvck5vZGUsIHNvIHdl
IG5lZWQgdG8gdGFrZSB0aGF0Ci0gICAgLy8gaW50byBhY2NvdW50IGhlcmUuCi0gICAgaWYgKG1f
bXVsdGlMaW5lKSB7Ci0gICAgICAgIFJlbmRlclRleHRDb250cm9sKiByZW5kZXJlciA9IHRvUmVu
ZGVyVGV4dENvbnRyb2wobm9kZSgpLT5zaGFkb3dBbmNlc3Rvck5vZGUoKS0+cmVuZGVyZXIoKSk7
Ci0gICAgICAgIGlmIChyZW5kZXJlci0+aGFzT3ZlcmZsb3dDbGlwKCkpCi0gICAgICAgICAgICBj
b250ZW50c1BvaW50ICs9IHJlbmRlcmVyLT5sYXllcigpLT5zY3JvbGxlZENvbnRlbnRPZmZzZXQo
KTsKLSAgICB9Ci0KLSAgICByZXR1cm4gUmVuZGVyQmxvY2s6OnBvc2l0aW9uRm9yUG9pbnQoY29u
dGVudHNQb2ludCk7Ci19Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQogVGV4
dENvbnRyb2xJbm5lckVsZW1lbnQ6OlRleHRDb250cm9sSW5uZXJFbGVtZW50KERvY3VtZW50KiBk
b2N1bWVudCwgSFRNTEVsZW1lbnQqIHNoYWRvd1BhcmVudCkKICAgICA6IEhUTUxEaXZFbGVtZW50
KGRpdlRhZywgZG9jdW1lbnQpCiB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9U
ZXh0Q29udHJvbElubmVyRWxlbWVudHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9o
dG1sL3NoYWRvdy9UZXh0Q29udHJvbElubmVyRWxlbWVudHMuaAkocmV2aXNpb24gNzkyNzQpCShm
cm9tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0Q29udHJvbElubmVyRWxlbWVudHMuaDo3
OTI3NCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L1RleHRDb250cm9sSW5uZXJFbGVt
ZW50cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTU4IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDA2LCAyMDA4LCAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIs
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworIAorI2lmbmRlZiBUZXh0Q29udHJvbElubmVyRWxlbWVudHNfaAorI2RlZmluZSBUZXh0Q29u
dHJvbElubmVyRWxlbWVudHNfaAorCisjaW5jbHVkZSAiSFRNTERpdkVsZW1lbnQuaCIKKyNpbmNs
dWRlICJTcGVlY2hJbnB1dExpc3RlbmVyLmgiCisjaW5jbHVkZSAiVGltZXIuaCIKKyNpbmNsdWRl
IDx3dGYvRm9yd2FyZC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFNwZWVjaElu
cHV0OworCitjbGFzcyBUZXh0Q29udHJvbElubmVyRWxlbWVudCA6IHB1YmxpYyBIVE1MRGl2RWxl
bWVudCB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8VGV4dENvbnRyb2xJbm5lckVs
ZW1lbnQ+IGNyZWF0ZShIVE1MRWxlbWVudCogc2hhZG93UGFyZW50KTsKKyAgICB2aXJ0dWFsIHZv
aWQgZGV0YWNoKCk7CisKKyAgICB2b2lkIGF0dGFjaElubmVyRWxlbWVudChOb2RlKiwgUGFzc1Jl
ZlB0cjxSZW5kZXJTdHlsZT4sIFJlbmRlckFyZW5hKik7CisKK3Byb3RlY3RlZDoKKyAgICBUZXh0
Q29udHJvbElubmVyRWxlbWVudChEb2N1bWVudCosIEhUTUxFbGVtZW50KiBzaGFkb3dQYXJlbnQg
PSAwKTsKKworcHJpdmF0ZToKKyAgICB2aXJ0dWFsIGJvb2wgaXNNb3VzZUZvY3VzYWJsZSgpIGNv
bnN0IHsgcmV0dXJuIGZhbHNlOyB9Cit9OworCitjbGFzcyBUZXh0Q29udHJvbElubmVyVGV4dEVs
ZW1lbnQgOiBwdWJsaWMgVGV4dENvbnRyb2xJbm5lckVsZW1lbnQgeworcHVibGljOgorICAgIHN0
YXRpYyBQYXNzUmVmUHRyPFRleHRDb250cm9sSW5uZXJUZXh0RWxlbWVudD4gY3JlYXRlKERvY3Vt
ZW50KiwgSFRNTEVsZW1lbnQqIHNoYWRvd1BhcmVudCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgZGVm
YXVsdEV2ZW50SGFuZGxlcihFdmVudCopOworCitwcml2YXRlOgorICAgIFRleHRDb250cm9sSW5u
ZXJUZXh0RWxlbWVudChEb2N1bWVudCosIEhUTUxFbGVtZW50KiBzaGFkb3dQYXJlbnQpOworICAg
IHZpcnR1YWwgUmVuZGVyT2JqZWN0KiBjcmVhdGVSZW5kZXJlcihSZW5kZXJBcmVuYSosIFJlbmRl
clN0eWxlKik7ICAKK307CisKK2NsYXNzIFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRvbkVsZW1lbnQg
OiBwdWJsaWMgVGV4dENvbnRyb2xJbm5lckVsZW1lbnQgeworcHVibGljOgorICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRvbkVsZW1lbnQ+IGNyZWF0ZShEb2N1bWVu
dCopOworCisgICAgdmlydHVhbCB2b2lkIGRlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQqKTsKKwor
cHJpdmF0ZToKKyAgICBTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b25FbGVtZW50KERvY3VtZW50Kik7
Cit9OworCitjbGFzcyBTZWFyY2hGaWVsZENhbmNlbEJ1dHRvbkVsZW1lbnQgOiBwdWJsaWMgVGV4
dENvbnRyb2xJbm5lckVsZW1lbnQgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNl
YXJjaEZpZWxkQ2FuY2VsQnV0dG9uRWxlbWVudD4gY3JlYXRlKERvY3VtZW50Kik7CisKKyAgICB2
aXJ0dWFsIHZvaWQgZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCopOworCitwcml2YXRlOgorICAg
IFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uRWxlbWVudChEb2N1bWVudCopOworCisgICAgdmlydHVh
bCB2b2lkIGRldGFjaCgpOworCisgICAgYm9vbCBtX2NhcHR1cmluZzsKK307CisKK2NsYXNzIFNw
aW5CdXR0b25FbGVtZW50IDogcHVibGljIFRleHRDb250cm9sSW5uZXJFbGVtZW50IHsKK3B1Ymxp
YzoKKyAgICBlbnVtIFVwRG93blN0YXRlIHsKKyAgICAgICAgSW5kZXRlcm1pbmF0ZSwgLy8gSG92
ZXJlZCwgYnV0IHRoZSBldmVudCBpcyBub3QgaGFuZGxlZC4KKyAgICAgICAgRG93biwKKyAgICAg
ICAgVXAsCisgICAgfTsKKworICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNwaW5CdXR0b25FbGVtZW50
PiBjcmVhdGUoSFRNTEVsZW1lbnQqKTsKKyAgICBVcERvd25TdGF0ZSB1cERvd25TdGF0ZSgpIGNv
bnN0IHsgcmV0dXJuIG1fdXBEb3duU3RhdGU7IH0KKworcHJpdmF0ZToKKyAgICBTcGluQnV0dG9u
RWxlbWVudChIVE1MRWxlbWVudCopOworCisgICAgdmlydHVhbCB2b2lkIGRldGFjaCgpOworICAg
IHZpcnR1YWwgYm9vbCBpc1NwaW5CdXR0b25FbGVtZW50KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsg
fQorICAgIC8vIEZJWE1FOiBzaGFkb3dBbmNlc3Rvck5vZGUoKSBzaG91bGQgYmUgY29uc3QuCisg
ICAgdmlydHVhbCBib29sIGlzRW5hYmxlZEZvcm1Db250cm9sKCkgY29uc3QgeyByZXR1cm4gc3Rh
dGljX2Nhc3Q8RWxlbWVudCo+KGNvbnN0X2Nhc3Q8U3BpbkJ1dHRvbkVsZW1lbnQqPih0aGlzKS0+
c2hhZG93QW5jZXN0b3JOb2RlKCkpLT5pc0VuYWJsZWRGb3JtQ29udHJvbCgpOyB9CisgICAgdmly
dHVhbCBib29sIGlzUmVhZE9ubHlGb3JtQ29udHJvbCgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19j
YXN0PEVsZW1lbnQqPihjb25zdF9jYXN0PFNwaW5CdXR0b25FbGVtZW50Kj4odGhpcyktPnNoYWRv
d0FuY2VzdG9yTm9kZSgpKS0+aXNSZWFkT25seUZvcm1Db250cm9sKCk7IH0KKyAgICB2aXJ0dWFs
IHZvaWQgZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCopOworICAgIHZvaWQgc3RhcnRSZXBlYXRp
bmdUaW1lcigpOworICAgIHZvaWQgc3RvcFJlcGVhdGluZ1RpbWVyKCk7CisgICAgdm9pZCByZXBl
YXRpbmdUaW1lckZpcmVkKFRpbWVyPFNwaW5CdXR0b25FbGVtZW50PiopOworICAgIHZpcnR1YWwg
dm9pZCBzZXRIb3ZlcmVkKGJvb2wgPSB0cnVlKTsKKworICAgIGJvb2wgbV9jYXB0dXJpbmc7Cisg
ICAgVXBEb3duU3RhdGUgbV91cERvd25TdGF0ZTsKKyAgICBVcERvd25TdGF0ZSBtX3ByZXNzU3Rh
cnRpbmdTdGF0ZTsKKyAgICBUaW1lcjxTcGluQnV0dG9uRWxlbWVudD4gbV9yZXBlYXRpbmdUaW1l
cjsKK307CisKKyNpZiBFTkFCTEUoSU5QVVRfU1BFRUNIKQorCitjbGFzcyBJbnB1dEZpZWxkU3Bl
ZWNoQnV0dG9uRWxlbWVudAorICAgIDogcHVibGljIFRleHRDb250cm9sSW5uZXJFbGVtZW50LAor
ICAgICAgcHVibGljIFNwZWVjaElucHV0TGlzdGVuZXIgeworcHVibGljOgorICAgIGVudW0gU3Bl
ZWNoSW5wdXRTdGF0ZSB7CisgICAgICAgIElkbGUsCisgICAgICAgIFJlY29yZGluZywKKyAgICAg
ICAgUmVjb2duaXppbmcsCisgICAgfTsKKworICAgIHN0YXRpYyBQYXNzUmVmUHRyPElucHV0Rmll
bGRTcGVlY2hCdXR0b25FbGVtZW50PiBjcmVhdGUoSFRNTEVsZW1lbnQqKTsKKyAgICB2aXJ0dWFs
IH5JbnB1dEZpZWxkU3BlZWNoQnV0dG9uRWxlbWVudCgpOworCisgICAgdmlydHVhbCB2b2lkIGRl
dGFjaCgpOworICAgIHZpcnR1YWwgdm9pZCBkZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50Kik7Cisg
ICAgU3BlZWNoSW5wdXRTdGF0ZSBzdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGU7IH0KKwor
ICAgIC8vIFNwZWVjaElucHV0TGlzdGVuZXIgbWV0aG9kcy4KKyAgICB2b2lkIGRpZENvbXBsZXRl
UmVjb3JkaW5nKGludCk7CisgICAgdm9pZCBkaWRDb21wbGV0ZVJlY29nbml0aW9uKGludCk7Cisg
ICAgdm9pZCBzZXRSZWNvZ25pdGlvblJlc3VsdChpbnQsIGNvbnN0IFNwZWVjaElucHV0UmVzdWx0
QXJyYXkmKTsKKworcHJpdmF0ZToKKyAgICBJbnB1dEZpZWxkU3BlZWNoQnV0dG9uRWxlbWVudChI
VE1MRWxlbWVudCopOworICAgIFNwZWVjaElucHV0KiBzcGVlY2hJbnB1dCgpOworICAgIHZvaWQg
c2V0U3RhdGUoU3BlZWNoSW5wdXRTdGF0ZSBzdGF0ZSk7CisKKyAgICBib29sIG1fY2FwdHVyaW5n
OworICAgIFNwZWVjaElucHV0U3RhdGUgbV9zdGF0ZTsKKyAgICBpbnQgbV9saXN0ZW5lcklkOwor
ICAgIFNwZWVjaElucHV0UmVzdWx0QXJyYXkgbV9yZXN1bHRzOworfTsKKworI2VuZGlmIC8vIEVO
QUJMRShJTlBVVF9TUEVFQ0gpCisKK30gLy8gbmFtZXNwYWNlCisKKyNlbmRpZgpJbmRleDogU291
cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvVGV4dENvbnRyb2xJbm5lckVsZW1lbnRzLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvVGV4dENvbnRyb2xJbm5lckVsZW1l
bnRzLmgJKHJldmlzaW9uIDc5Mjc0KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvVGV4
dENvbnRyb2xJbm5lckVsZW1lbnRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTE0Myw3ICsxNDMsNyBA
QCBwdWJsaWM6CiBwcml2YXRlOgogICAgIElucHV0RmllbGRTcGVlY2hCdXR0b25FbGVtZW50KEhU
TUxFbGVtZW50Kik7CiAgICAgU3BlZWNoSW5wdXQqIHNwZWVjaElucHV0KCk7Ci0gICAgdm9pZCBz
ZXRTdGF0ZShTcGVlY2hJbnB1dFN0YXRlIHN0YXRlKTsKKyAgICB2b2lkIHNldFN0YXRlKFNwZWVj
aElucHV0U3RhdGUpOwogCiAgICAgYm9vbCBtX2NhcHR1cmluZzsKICAgICBTcGVlY2hJbnB1dFN0
YXRlIG1fc3RhdGU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENv
bnRyb2xTaW5nbGVMaW5lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmNwcAkocmV2aXNpb24gNzkyODcpCisrKyBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNTEsNiArNTEsMjMgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiB1
c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogCitWaXNpYmxlUG9zaXRpb24gUmVuZGVyVGV4dENv
bnRyb2xJbm5lckJsb2NrOjpwb3NpdGlvbkZvclBvaW50KGNvbnN0IEludFBvaW50JiBwb2ludCkK
K3sKKyAgICBJbnRQb2ludCBjb250ZW50c1BvaW50KHBvaW50KTsKKworICAgIC8vIE11bHRpbGlu
ZSB0ZXh0IGNvbnRyb2xzIGhhdmUgdGhlIHNjcm9sbCBvbiBzaGFkb3dBbmNlc3Rvck5vZGUsIHNv
IHdlIG5lZWQgdG8gdGFrZSB0aGF0CisgICAgLy8gaW50byBhY2NvdW50IGhlcmUuCisgICAgaWYg
KG1fbXVsdGlMaW5lKSB7CisgICAgICAgIFJlbmRlclRleHRDb250cm9sKiByZW5kZXJlciA9IHRv
UmVuZGVyVGV4dENvbnRyb2wobm9kZSgpLT5zaGFkb3dBbmNlc3Rvck5vZGUoKS0+cmVuZGVyZXIo
KSk7CisgICAgICAgIGlmIChyZW5kZXJlci0+aGFzT3ZlcmZsb3dDbGlwKCkpCisgICAgICAgICAg
ICBjb250ZW50c1BvaW50ICs9IHJlbmRlcmVyLT5sYXllcigpLT5zY3JvbGxlZENvbnRlbnRPZmZz
ZXQoKTsKKyAgICB9CisKKyAgICByZXR1cm4gUmVuZGVyQmxvY2s6OnBvc2l0aW9uRm9yUG9pbnQo
Y29udGVudHNQb2ludCk7Cit9CisKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwog
UmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUo
Tm9kZSogbm9kZSwgYm9vbCBwbGFjZWhvbGRlclZpc2libGUpCiAgICAgOiBSZW5kZXJUZXh0Q29u
dHJvbChub2RlLCBwbGFjZWhvbGRlclZpc2libGUpCiAgICAgLCBtX3NlYXJjaFBvcHVwSXNWaXNp
YmxlKGZhbHNlKQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250
cm9sU2luZ2xlTGluZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuaAkocmV2aXNpb24gNzkyODcpCisrKyBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTE3NCw2ICsxNzQsMTkgQEAgaW5saW5lIFJlbmRlclRleHRDb250cm9sU2luZ2xl
TGluZSogdG9SZQogLy8gVGhpcyB3aWxsIGNhdGNoIGFueW9uZSBkb2luZyBhbiB1bm5lY2Vzc2Fy
eSBjYXN0Lgogdm9pZCB0b1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZShjb25zdCBSZW5kZXJU
ZXh0Q29udHJvbFNpbmdsZUxpbmUqKTsKIAorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQorCitjbGFzcyBSZW5kZXJUZXh0Q29udHJvbElubmVyQmxvY2sgOiBwdWJsaWMgUmVuZGVyQmxv
Y2sgeworcHVibGljOgorICAgIFJlbmRlclRleHRDb250cm9sSW5uZXJCbG9jayhOb2RlKiBub2Rl
LCBib29sIGlzTXVsdGlMaW5lKSA6IFJlbmRlckJsb2NrKG5vZGUpLCBtX211bHRpTGluZShpc011
bHRpTGluZSkgeyB9CisKK3ByaXZhdGU6CisgICAgdmlydHVhbCBib29sIGhhc0xpbmVJZkVtcHR5
KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQorICAgIHZpcnR1YWwgVmlzaWJsZVBvc2l0aW9uIHBv
c2l0aW9uRm9yUG9pbnQoY29uc3QgSW50UG9pbnQmKTsKKworICAgIGJvb2wgbV9tdWx0aUxpbmU7
Cit9OworCiB9CiAKICNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1RleHRD
b250cm9sSW5uZXJFbGVtZW50cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1RleHRDb250cm9sSW5uZXJFbGVtZW50cy5jcHAJKHJldmlzaW9uIDc5Mjg3KQorKysg
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1RleHRDb250cm9sSW5uZXJFbGVtZW50cy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEsNTM1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYs
IDIwMDgsIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0
IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0g
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1
ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlRleHRDb250cm9sSW5uZXJFbGVtZW50cy5oIgotCi0j
aW5jbHVkZSAiQmVmb3JlVGV4dEluc2VydGVkRXZlbnQuaCIKLSNpbmNsdWRlICJEb2N1bWVudC5o
IgotI2luY2x1ZGUgIkV2ZW50SGFuZGxlci5oIgotI2luY2x1ZGUgIkV2ZW50TmFtZXMuaCIKLSNp
bmNsdWRlICJGcmFtZS5oIgotI2luY2x1ZGUgIkhUTUxJbnB1dEVsZW1lbnQuaCIKLSNpbmNsdWRl
ICJIVE1MTmFtZXMuaCIKLSNpbmNsdWRlICJIVE1MVGV4dEFyZWFFbGVtZW50LmgiCi0jaW5jbHVk
ZSAiTW91c2VFdmVudC5oIgotI2luY2x1ZGUgIlBhZ2UuaCIKLSNpbmNsdWRlICJSZW5kZXJMYXll
ci5oIgotI2luY2x1ZGUgIlJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5oIgotI2luY2x1ZGUg
IlNjcm9sbGJhclRoZW1lLmgiCi0jaW5jbHVkZSAiU3BlZWNoSW5wdXQuaCIKLSNpbmNsdWRlICJT
cGVlY2hJbnB1dEV2ZW50LmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotdXNpbmcgbmFtZXNw
YWNlIEhUTUxOYW1lczsKLQotY2xhc3MgUmVuZGVyVGV4dENvbnRyb2xJbm5lckJsb2NrIDogcHVi
bGljIFJlbmRlckJsb2NrIHsKLXB1YmxpYzoKLSAgICBSZW5kZXJUZXh0Q29udHJvbElubmVyQmxv
Y2soTm9kZSogbm9kZSwgYm9vbCBpc011bHRpTGluZSkgOiBSZW5kZXJCbG9jayhub2RlKSwgbV9t
dWx0aUxpbmUoaXNNdWx0aUxpbmUpIHsgfQotCi1wcml2YXRlOgotICAgIHZpcnR1YWwgYm9vbCBo
YXNMaW5lSWZFbXB0eSgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KLSAgICB2aXJ0dWFsIFZpc2li
bGVQb3NpdGlvbiBwb3NpdGlvbkZvclBvaW50KGNvbnN0IEludFBvaW50Jik7Ci0KLSAgICBib29s
IG1fbXVsdGlMaW5lOwotfTsKLQotVmlzaWJsZVBvc2l0aW9uIFJlbmRlclRleHRDb250cm9sSW5u
ZXJCbG9jazo6cG9zaXRpb25Gb3JQb2ludChjb25zdCBJbnRQb2ludCYgcG9pbnQpCi17Ci0gICAg
SW50UG9pbnQgY29udGVudHNQb2ludChwb2ludCk7Ci0KLSAgICAvLyBNdWx0aWxpbmUgdGV4dCBj
b250cm9scyBoYXZlIHRoZSBzY3JvbGwgb24gc2hhZG93QW5jZXN0b3JOb2RlLCBzbyB3ZSBuZWVk
IHRvIHRha2UgdGhhdAotICAgIC8vIGludG8gYWNjb3VudCBoZXJlLgotICAgIGlmIChtX211bHRp
TGluZSkgewotICAgICAgICBSZW5kZXJUZXh0Q29udHJvbCogcmVuZGVyZXIgPSB0b1JlbmRlclRl
eHRDb250cm9sKG5vZGUoKS0+c2hhZG93QW5jZXN0b3JOb2RlKCktPnJlbmRlcmVyKCkpOwotICAg
ICAgICBpZiAocmVuZGVyZXItPmhhc092ZXJmbG93Q2xpcCgpKQotICAgICAgICAgICAgY29udGVu
dHNQb2ludCArPSByZW5kZXJlci0+bGF5ZXIoKS0+c2Nyb2xsZWRDb250ZW50T2Zmc2V0KCk7Ci0g
ICAgfQotCi0gICAgcmV0dXJuIFJlbmRlckJsb2NrOjpwb3NpdGlvbkZvclBvaW50KGNvbnRlbnRz
UG9pbnQpOwotfQotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLVRleHRDb250
cm9sSW5uZXJFbGVtZW50OjpUZXh0Q29udHJvbElubmVyRWxlbWVudChEb2N1bWVudCogZG9jdW1l
bnQsIEhUTUxFbGVtZW50KiBzaGFkb3dQYXJlbnQpCi0gICAgOiBIVE1MRGl2RWxlbWVudChkaXZU
YWcsIGRvY3VtZW50KQotewotICAgIHNldFNoYWRvd0hvc3Qoc2hhZG93UGFyZW50KTsKLX0KLQot
UGFzc1JlZlB0cjxUZXh0Q29udHJvbElubmVyRWxlbWVudD4gVGV4dENvbnRyb2xJbm5lckVsZW1l
bnQ6OmNyZWF0ZShIVE1MRWxlbWVudCogc2hhZG93UGFyZW50KQotewotICAgIHJldHVybiBhZG9w
dFJlZihuZXcgVGV4dENvbnRyb2xJbm5lckVsZW1lbnQoc2hhZG93UGFyZW50LT5kb2N1bWVudCgp
LCBzaGFkb3dQYXJlbnQpKTsKLX0KLQotdm9pZCBUZXh0Q29udHJvbElubmVyRWxlbWVudDo6YXR0
YWNoSW5uZXJFbGVtZW50KE5vZGUqIHBhcmVudCwgUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gc3R5
bGUsIFJlbmRlckFyZW5hKiBhcmVuYSkKLXsKLSAgICAvLyBXaGVuIGFkZGluZyB0aGVzZSBlbGVt
ZW50cywgY3JlYXRlIHRoZSByZW5kZXJlciAmIHN0eWxlIGZpcnN0IGJlZm9yZSBhZGRpbmcgdG8g
dGhlIERPTS4KLSAgICAvLyBPdGhlcndpc2UsIHRoZSByZW5kZXIgdHJlZSB3aWxsIGNyZWF0ZSBz
b21lIGFub255bW91cyBibG9ja3MgdGhhdCB3aWxsIG1lc3MgdXAgb3VyIGxheW91dC4KLQotICAg
IC8vIENyZWF0ZSB0aGUgcmVuZGVyZXIgd2l0aCB0aGUgc3BlY2lmaWVkIHN0eWxlCi0gICAgUmVu
ZGVyT2JqZWN0KiByZW5kZXJlciA9IGNyZWF0ZVJlbmRlcmVyKGFyZW5hLCBzdHlsZS5nZXQoKSk7
Ci0gICAgaWYgKHJlbmRlcmVyKSB7Ci0gICAgICAgIHNldFJlbmRlcmVyKHJlbmRlcmVyKTsKLSAg
ICAgICAgcmVuZGVyZXItPnNldFN0eWxlKHN0eWxlKTsKLSAgICB9Ci0KLSAgICAvLyBTZXQgdGhl
c2UgZXhwbGljaXRseSBzaW5jZSB0aGlzIG5vcm1hbGx5IGhhcHBlbnMgZHVyaW5nIGFuIGF0dGFj
aCgpCi0gICAgc2V0QXR0YWNoZWQoKTsKLSAgICBzZXRJbkRvY3VtZW50KCk7Ci0KLSAgICAvLyBG
b3IgZWxlbWVudHMgbm90IHlldCBpbiBzaGFkb3cgRE9NLCBhZGQgdGhlIG5vZGUgdG8gdGhlIERP
TSBub3JtYWxseS4KLSAgICBpZiAoIWlzU2hhZG93Um9vdCgpKSB7Ci0gICAgICAgIC8vIEZJWE1F
OiBUaGlzIGNvZGUgc2VlbXMgdmVyeSB3cm9uZy4gIFdoeSBhcmUgd2UgbWFnaWNhbGx5IGFkZGlu
ZyB8dGhpc3wgdG8gdGhlIERPTSBoZXJlPwotICAgICAgICAvLyAgICAgICAgV2Ugc2hvdWxkbid0
IGJlIGNhbGxpbmcgcGFyc2VyIEFQSSBtZXRob2RzIG91dHNpZGUgb2YgdGhlIHBhcnNlciEKLSAg
ICAgICAgcGFyZW50LT5kZXByZWNhdGVkUGFyc2VyQWRkQ2hpbGQodGhpcyk7Ci0gICAgfQotCi0g
ICAgLy8gQWRkIHRoZSByZW5kZXJlciB0byB0aGUgcmVuZGVyIHRyZWUKLSAgICBpZiAocmVuZGVy
ZXIpCi0gICAgICAgIHBhcmVudC0+cmVuZGVyZXIoKS0+YWRkQ2hpbGQocmVuZGVyZXIpOwotfQot
Ci12b2lkIFRleHRDb250cm9sSW5uZXJFbGVtZW50OjpkZXRhY2goKQotewotICAgIEhUTUxEaXZF
bGVtZW50OjpkZXRhY2goKTsKLSAgICAvLyBGSVhNRTogUmVtb3ZlIG9uY2Ugc2hhZG93IERPTSB1
c2VzIEVsZW1lbnQ6OnNldFNoYWRvd1Jvb3QoKS4KLSAgICBpZiAoc2hhZG93SG9zdCgpKQotICAg
ICAgICBzZXRTaGFkb3dIb3N0KDApOwotfQotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCi0KLWlubGluZSBUZXh0Q29udHJvbElubmVyVGV4dEVsZW1lbnQ6OlRleHRDb250cm9sSW5u
ZXJUZXh0RWxlbWVudChEb2N1bWVudCogZG9jdW1lbnQsIEhUTUxFbGVtZW50KiBzaGFkb3dQYXJl
bnQpCi0gICAgOiBUZXh0Q29udHJvbElubmVyRWxlbWVudChkb2N1bWVudCwgc2hhZG93UGFyZW50
KQotewotfQotCi1QYXNzUmVmUHRyPFRleHRDb250cm9sSW5uZXJUZXh0RWxlbWVudD4gVGV4dENv
bnRyb2xJbm5lclRleHRFbGVtZW50OjpjcmVhdGUoRG9jdW1lbnQqIGRvY3VtZW50LCBIVE1MRWxl
bWVudCogc2hhZG93UGFyZW50KQotewotICAgIHJldHVybiBhZG9wdFJlZihuZXcgVGV4dENvbnRy
b2xJbm5lclRleHRFbGVtZW50KGRvY3VtZW50LCBzaGFkb3dQYXJlbnQpKTsKLX0KLQotdm9pZCBU
ZXh0Q29udHJvbElubmVyVGV4dEVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQqIGV2
ZW50KQotewotICAgIC8vIEZJWE1FOiBJbiB0aGUgZnV0dXJlLCB3ZSBzaG91bGQgYWRkIGEgd2F5
IHRvIGhhdmUgZGVmYXVsdCBldmVudCBsaXN0ZW5lcnMuCi0gICAgLy8gVGhlbiB3ZSB3b3VsZCBh
ZGQgb25lIHRvIHRoZSB0ZXh0IGZpZWxkJ3MgaW5uZXIgZGl2LCBhbmQgd2Ugd291bGRuJ3QgbmVl
ZCB0aGlzIHN1YmNsYXNzLgotICAgIC8vIE9yIHBvc3NpYmx5IHdlIGNvdWxkIGp1c3QgdXNlIGEg
bm9ybWFsIGV2ZW50IGxpc3RlbmVyLgotICAgIGlmIChldmVudC0+aXNCZWZvcmVUZXh0SW5zZXJ0
ZWRFdmVudCgpIHx8IGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLndlYmtpdEVkaXRhYmxl
Q29udGVudENoYW5nZWRFdmVudCkgewotICAgICAgICBOb2RlKiBzaGFkb3dBbmNlc3RvciA9IHNo
YWRvd0FuY2VzdG9yTm9kZSgpOwotICAgICAgICAvLyBBIFRleHRDb250cm9sSW5uZXJUZXh0RWxl
bWVudCBjYW4gYmUgaXRzIG93biBzaGFkb3cgYW5jZXN0b3IgaWYgaXRzIGJlZW4gZGV0YWNoZWQs
IGJ1dCBrZXB0IGFsaXZlIGJ5IGFuIEVkaXRDb21tYW5kLgotICAgICAgICAvLyBJbiB0aGlzIGNh
c2UsIGFuIHVuZG8vcmVkbyBjYW4gY2F1c2UgZXZlbnRzIHRvIGJlIHNlbnQgdG8gdGhlIFRleHRD
b250cm9sSW5uZXJUZXh0RWxlbWVudC4gIAotICAgICAgICAvLyBUbyBwcmV2ZW50IGFuIGluZmlu
aXRlIGxvb3AsIHdlIG11c3QgY2hlY2sgZm9yIHRoaXMgY2FzZSBiZWZvcmUgc2VuZGluZyB0aGUg
ZXZlbnQgdXAgdGhlIGNoYWluLgotICAgICAgICBpZiAoc2hhZG93QW5jZXN0b3IgJiYgc2hhZG93
QW5jZXN0b3IgIT0gdGhpcykKLSAgICAgICAgICAgIHNoYWRvd0FuY2VzdG9yLT5kZWZhdWx0RXZl
bnRIYW5kbGVyKGV2ZW50KTsKLSAgICB9Ci0gICAgaWYgKCFldmVudC0+ZGVmYXVsdEhhbmRsZWQo
KSkKLSAgICAgICAgSFRNTERpdkVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIoZXZlbnQpOwot
fQotCi1SZW5kZXJPYmplY3QqIFRleHRDb250cm9sSW5uZXJUZXh0RWxlbWVudDo6Y3JlYXRlUmVu
ZGVyZXIoUmVuZGVyQXJlbmEqIGFyZW5hLCBSZW5kZXJTdHlsZSopCi17Ci0gICAgYm9vbCBtdWx0
aUxpbmUgPSBmYWxzZTsKLSAgICBOb2RlKiBzaGFkb3dBbmNlc3RvciA9IHNoYWRvd0FuY2VzdG9y
Tm9kZSgpOwotICAgIGlmIChzaGFkb3dBbmNlc3RvciAmJiBzaGFkb3dBbmNlc3Rvci0+cmVuZGVy
ZXIoKSkgewotICAgICAgICBBU1NFUlQoc2hhZG93QW5jZXN0b3ItPnJlbmRlcmVyKCktPmlzVGV4
dEZpZWxkKCkgfHwgc2hhZG93QW5jZXN0b3ItPnJlbmRlcmVyKCktPmlzVGV4dEFyZWEoKSk7Ci0g
ICAgICAgIG11bHRpTGluZSA9IHNoYWRvd0FuY2VzdG9yLT5yZW5kZXJlcigpLT5pc1RleHRBcmVh
KCk7Ci0gICAgfQotICAgIHJldHVybiBuZXcgKGFyZW5hKSBSZW5kZXJUZXh0Q29udHJvbElubmVy
QmxvY2sodGhpcywgbXVsdGlMaW5lKTsKLX0KLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLQotCi1pbmxpbmUgU2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uRWxlbWVudDo6U2VhcmNoRmll
bGRSZXN1bHRzQnV0dG9uRWxlbWVudChEb2N1bWVudCogZG9jdW1lbnQpCi0gICAgOiBUZXh0Q29u
dHJvbElubmVyRWxlbWVudChkb2N1bWVudCkKLXsKLX0KLQotUGFzc1JlZlB0cjxTZWFyY2hGaWVs
ZFJlc3VsdHNCdXR0b25FbGVtZW50PiBTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b25FbGVtZW50Ojpj
cmVhdGUoRG9jdW1lbnQqIGRvY3VtZW50KQotewotICAgIHJldHVybiBhZG9wdFJlZihuZXcgU2Vh
cmNoRmllbGRSZXN1bHRzQnV0dG9uRWxlbWVudChkb2N1bWVudCkpOwotfQotCi12b2lkIFNlYXJj
aEZpZWxkUmVzdWx0c0J1dHRvbkVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQqIGV2
ZW50KQotewotICAgIC8vIE9uIG1vdXNlZG93biwgYnJpbmcgdXAgYSBtZW51LCBpZiBuZWVkZWQK
LSAgICBIVE1MSW5wdXRFbGVtZW50KiBpbnB1dCA9IHN0YXRpY19jYXN0PEhUTUxJbnB1dEVsZW1l
bnQqPihzaGFkb3dBbmNlc3Rvck5vZGUoKSk7Ci0gICAgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZl
bnROYW1lcygpLm1vdXNlZG93bkV2ZW50ICYmIGV2ZW50LT5pc01vdXNlRXZlbnQoKSAmJiBzdGF0
aWNfY2FzdDxNb3VzZUV2ZW50Kj4oZXZlbnQpLT5idXR0b24oKSA9PSBMZWZ0QnV0dG9uKSB7Ci0g
ICAgICAgIGlucHV0LT5mb2N1cygpOwotICAgICAgICBpbnB1dC0+c2VsZWN0KCk7Ci0gICAgICAg
IFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZSogcmVuZGVyZXIgPSB0b1JlbmRlclRleHRDb250
cm9sU2luZ2xlTGluZShpbnB1dC0+cmVuZGVyZXIoKSk7Ci0gICAgICAgIGlmIChyZW5kZXJlci0+
cG9wdXBJc1Zpc2libGUoKSkKLSAgICAgICAgICAgIHJlbmRlcmVyLT5oaWRlUG9wdXAoKTsKLSAg
ICAgICAgZWxzZSBpZiAoaW5wdXQtPm1heFJlc3VsdHMoKSA+IDApCi0gICAgICAgICAgICByZW5k
ZXJlci0+c2hvd1BvcHVwKCk7Ci0gICAgICAgIGV2ZW50LT5zZXREZWZhdWx0SGFuZGxlZCgpOwot
ICAgIH0KLQotICAgIGlmICghZXZlbnQtPmRlZmF1bHRIYW5kbGVkKCkpCi0gICAgICAgIEhUTUxE
aXZFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKGV2ZW50KTsKLX0KLQotLy8gLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQotCi1pbmxpbmUgU2VhcmNoRmllbGRDYW5jZWxCdXR0b25FbGVt
ZW50OjpTZWFyY2hGaWVsZENhbmNlbEJ1dHRvbkVsZW1lbnQoRG9jdW1lbnQqIGRvY3VtZW50KQot
ICAgIDogVGV4dENvbnRyb2xJbm5lckVsZW1lbnQoZG9jdW1lbnQpCi0gICAgLCBtX2NhcHR1cmlu
ZyhmYWxzZSkKLXsKLX0KLQotUGFzc1JlZlB0cjxTZWFyY2hGaWVsZENhbmNlbEJ1dHRvbkVsZW1l
bnQ+IFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uRWxlbWVudDo6Y3JlYXRlKERvY3VtZW50KiBkb2N1
bWVudCkKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9u
RWxlbWVudChkb2N1bWVudCkpOwotfQotCi12b2lkIFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uRWxl
bWVudDo6ZGV0YWNoKCkKLXsKLSAgICBpZiAobV9jYXB0dXJpbmcpIHsKLSAgICAgICAgaWYgKEZy
YW1lKiBmcmFtZSA9IGRvY3VtZW50KCktPmZyYW1lKCkpCi0gICAgICAgICAgICBmcmFtZS0+ZXZl
bnRIYW5kbGVyKCktPnNldENhcHR1cmluZ01vdXNlRXZlbnRzTm9kZSgwKTsKLSAgICB9Ci0gICAg
VGV4dENvbnRyb2xJbm5lckVsZW1lbnQ6OmRldGFjaCgpOwotfQotCi0KLXZvaWQgU2VhcmNoRmll
bGRDYW5jZWxCdXR0b25FbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50KiBldmVudCkK
LXsKLSAgICAvLyBJZiB0aGUgZWxlbWVudCBpcyB2aXNpYmxlLCBvbiBtb3VzZXVwLCBjbGVhciB0
aGUgdmFsdWUsIGFuZCBzZXQgc2VsZWN0aW9uCi0gICAgUmVmUHRyPEhUTUxJbnB1dEVsZW1lbnQ+
IGlucHV0KHN0YXRpY19jYXN0PEhUTUxJbnB1dEVsZW1lbnQqPihzaGFkb3dBbmNlc3Rvck5vZGUo
KSkpOwotICAgIGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5tb3VzZWRvd25FdmVu
dCAmJiBldmVudC0+aXNNb3VzZUV2ZW50KCkgJiYgc3RhdGljX2Nhc3Q8TW91c2VFdmVudCo+KGV2
ZW50KS0+YnV0dG9uKCkgPT0gTGVmdEJ1dHRvbikgewotICAgICAgICBpZiAocmVuZGVyZXIoKSAm
JiByZW5kZXJlcigpLT52aXNpYmxlVG9IaXRUZXN0aW5nKCkpIHsKLSAgICAgICAgICAgIGlmIChG
cmFtZSogZnJhbWUgPSBkb2N1bWVudCgpLT5mcmFtZSgpKSB7Ci0gICAgICAgICAgICAgICAgZnJh
bWUtPmV2ZW50SGFuZGxlcigpLT5zZXRDYXB0dXJpbmdNb3VzZUV2ZW50c05vZGUodGhpcyk7Ci0g
ICAgICAgICAgICAgICAgbV9jYXB0dXJpbmcgPSB0cnVlOwotICAgICAgICAgICAgfQotICAgICAg
ICB9Ci0gICAgICAgIGlucHV0LT5mb2N1cygpOwotICAgICAgICBpbnB1dC0+c2VsZWN0KCk7Ci0g
ICAgICAgIGV2ZW50LT5zZXREZWZhdWx0SGFuZGxlZCgpOwotICAgIH0KLSAgICBpZiAoZXZlbnQt
PnR5cGUoKSA9PSBldmVudE5hbWVzKCkubW91c2V1cEV2ZW50ICYmIGV2ZW50LT5pc01vdXNlRXZl
bnQoKSAmJiBzdGF0aWNfY2FzdDxNb3VzZUV2ZW50Kj4oZXZlbnQpLT5idXR0b24oKSA9PSBMZWZ0
QnV0dG9uKSB7Ci0gICAgICAgIGlmIChtX2NhcHR1cmluZykgewotICAgICAgICAgICAgaWYgKEZy
YW1lKiBmcmFtZSA9IGRvY3VtZW50KCktPmZyYW1lKCkpIHsKLSAgICAgICAgICAgICAgICBmcmFt
ZS0+ZXZlbnRIYW5kbGVyKCktPnNldENhcHR1cmluZ01vdXNlRXZlbnRzTm9kZSgwKTsKLSAgICAg
ICAgICAgICAgICBtX2NhcHR1cmluZyA9IGZhbHNlOwotICAgICAgICAgICAgfQotICAgICAgICAg
ICAgaWYgKGhvdmVyZWQoKSkgewotICAgICAgICAgICAgICAgIFN0cmluZyBvbGRWYWx1ZSA9IGlu
cHV0LT52YWx1ZSgpOwotICAgICAgICAgICAgICAgIGlucHV0LT5zZXRWYWx1ZSgiIik7Ci0gICAg
ICAgICAgICAgICAgaWYgKCFvbGRWYWx1ZS5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgICAgICAg
ICAgdG9SZW5kZXJUZXh0Q29udHJvbChpbnB1dC0+cmVuZGVyZXIoKSktPnNldENoYW5nZWRTaW5j
ZUxhc3RDaGFuZ2VFdmVudCh0cnVlKTsKLSAgICAgICAgICAgICAgICAgICAgaW5wdXQtPmRpc3Bh
dGNoRm9ybUNvbnRyb2xJbnB1dEV2ZW50KCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgIGlucHV0LT5vblNlYXJjaCgpOwotICAgICAgICAgICAgICAgIGV2ZW50LT5zZXREZWZh
dWx0SGFuZGxlZCgpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYg
KCFldmVudC0+ZGVmYXVsdEhhbmRsZWQoKSkKLSAgICAgICAgSFRNTERpdkVsZW1lbnQ6OmRlZmF1
bHRFdmVudEhhbmRsZXIoZXZlbnQpOwotfQotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCi0KLWlubGluZSBTcGluQnV0dG9uRWxlbWVudDo6U3BpbkJ1dHRvbkVsZW1lbnQoSFRNTEVs
ZW1lbnQqIHNoYWRvd1BhcmVudCkKLSAgICA6IFRleHRDb250cm9sSW5uZXJFbGVtZW50KHNoYWRv
d1BhcmVudC0+ZG9jdW1lbnQoKSwgc2hhZG93UGFyZW50KQotICAgICwgbV9jYXB0dXJpbmcoZmFs
c2UpCi0gICAgLCBtX3VwRG93blN0YXRlKEluZGV0ZXJtaW5hdGUpCi0gICAgLCBtX3ByZXNzU3Rh
cnRpbmdTdGF0ZShJbmRldGVybWluYXRlKQotICAgICwgbV9yZXBlYXRpbmdUaW1lcih0aGlzLCAm
U3BpbkJ1dHRvbkVsZW1lbnQ6OnJlcGVhdGluZ1RpbWVyRmlyZWQpCi17Ci19Ci0KLVBhc3NSZWZQ
dHI8U3BpbkJ1dHRvbkVsZW1lbnQ+IFNwaW5CdXR0b25FbGVtZW50OjpjcmVhdGUoSFRNTEVsZW1l
bnQqIHNoYWRvd1BhcmVudCkKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IFNwaW5CdXR0b25F
bGVtZW50KHNoYWRvd1BhcmVudCkpOwotfQotCi12b2lkIFNwaW5CdXR0b25FbGVtZW50OjpkZXRh
Y2goKQotewotICAgIHN0b3BSZXBlYXRpbmdUaW1lcigpOwotICAgIGlmIChtX2NhcHR1cmluZykg
ewotICAgICAgICBpZiAoRnJhbWUqIGZyYW1lID0gZG9jdW1lbnQoKS0+ZnJhbWUoKSkgewotICAg
ICAgICAgICAgZnJhbWUtPmV2ZW50SGFuZGxlcigpLT5zZXRDYXB0dXJpbmdNb3VzZUV2ZW50c05v
ZGUoMCk7Ci0gICAgICAgICAgICBtX2NhcHR1cmluZyA9IGZhbHNlOwotICAgICAgICB9Ci0gICAg
fQotICAgIFRleHRDb250cm9sSW5uZXJFbGVtZW50OjpkZXRhY2goKTsKLX0KLQotdm9pZCBTcGlu
QnV0dG9uRWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCogZXZlbnQpCi17Ci0gICAg
aWYgKCFldmVudC0+aXNNb3VzZUV2ZW50KCkpIHsKLSAgICAgICAgaWYgKCFldmVudC0+ZGVmYXVs
dEhhbmRsZWQoKSkKLSAgICAgICAgICAgIEhUTUxEaXZFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5k
bGVyKGV2ZW50KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIFJlbmRlckJveCogYm94
ID0gcmVuZGVyQm94KCk7Ci0gICAgaWYgKCFib3gpIHsKLSAgICAgICAgaWYgKCFldmVudC0+ZGVm
YXVsdEhhbmRsZWQoKSkKLSAgICAgICAgICAgIEhUTUxEaXZFbGVtZW50OjpkZWZhdWx0RXZlbnRI
YW5kbGVyKGV2ZW50KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIFJlZlB0cjxIVE1M
SW5wdXRFbGVtZW50PiBpbnB1dChzdGF0aWNfY2FzdDxIVE1MSW5wdXRFbGVtZW50Kj4oc2hhZG93
QW5jZXN0b3JOb2RlKCkpKTsKLSAgICBpZiAoaW5wdXQtPmRpc2FibGVkKCkgfHwgaW5wdXQtPmlz
UmVhZE9ubHlGb3JtQ29udHJvbCgpKSB7Ci0gICAgICAgIGlmICghZXZlbnQtPmRlZmF1bHRIYW5k
bGVkKCkpCi0gICAgICAgICAgICBIVE1MRGl2RWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcihl
dmVudCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBNb3VzZUV2ZW50KiBtb3VzZUV2
ZW50ID0gc3RhdGljX2Nhc3Q8TW91c2VFdmVudCo+KGV2ZW50KTsKLSAgICBJbnRQb2ludCBsb2Nh
bCA9IHJvdW5kZWRJbnRQb2ludChib3gtPmFic29sdXRlVG9Mb2NhbChtb3VzZUV2ZW50LT5hYnNv
bHV0ZUxvY2F0aW9uKCksIGZhbHNlLCB0cnVlKSk7Ci0gICAgaWYgKG1vdXNlRXZlbnQtPnR5cGUo
KSA9PSBldmVudE5hbWVzKCkubW91c2Vkb3duRXZlbnQgJiYgbW91c2VFdmVudC0+YnV0dG9uKCkg
PT0gTGVmdEJ1dHRvbikgewotICAgICAgICBpZiAoYm94LT5ib3JkZXJCb3hSZWN0KCkuY29udGFp
bnMobG9jYWwpKSB7Ci0gICAgICAgICAgICAvLyBUaGUgZm9sbG93aW5nIGZ1bmN0aW9ucyBvZiBI
VE1MSW5wdXRFbGVtZW50IG1heSBydW4gSmF2YVNjcmlwdAotICAgICAgICAgICAgLy8gY29kZSB3
aGljaCBkZXRhY2hlcyB0aGlzIHNoYWRvdyBub2RlLiBXZSBuZWVkIHRvIHRha2UgYSByZWZlcmVu
Y2UKLSAgICAgICAgICAgIC8vIGFuZCBjaGVjayByZW5kZXJlcigpIGFmdGVyIHN1Y2ggZnVuY3Rp
b24gY2FsbHMuCi0gICAgICAgICAgICBSZWZQdHI8Tm9kZT4gcHJvdGVjdG9yKHRoaXMpOwotICAg
ICAgICAgICAgaW5wdXQtPmZvY3VzKCk7Ci0gICAgICAgICAgICBpbnB1dC0+c2VsZWN0KCk7Ci0g
ICAgICAgICAgICBpZiAocmVuZGVyZXIoKSkgewotICAgICAgICAgICAgICAgIGlucHV0LT5zdGVw
VXBGcm9tUmVuZGVyZXIobV91cERvd25TdGF0ZSA9PSBVcCA/IDEgOiAtMSk7Ci0gICAgICAgICAg
ICAgICAgaWYgKHJlbmRlcmVyKCkpCi0gICAgICAgICAgICAgICAgICAgIHN0YXJ0UmVwZWF0aW5n
VGltZXIoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGV2ZW50LT5zZXREZWZhdWx0SGFu
ZGxlZCgpOwotICAgICAgICB9Ci0gICAgfSBlbHNlIGlmIChtb3VzZUV2ZW50LT50eXBlKCkgPT0g
ZXZlbnROYW1lcygpLm1vdXNldXBFdmVudCAmJiBtb3VzZUV2ZW50LT5idXR0b24oKSA9PSBMZWZ0
QnV0dG9uKQotICAgICAgICBzdG9wUmVwZWF0aW5nVGltZXIoKTsKLSAgICBlbHNlIGlmIChldmVu
dC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5tb3VzZW1vdmVFdmVudCkgewotICAgICAgICBpZiAo
Ym94LT5ib3JkZXJCb3hSZWN0KCkuY29udGFpbnMobG9jYWwpKSB7Ci0gICAgICAgICAgICBpZiAo
IW1fY2FwdHVyaW5nKSB7Ci0gICAgICAgICAgICAgICAgaWYgKEZyYW1lKiBmcmFtZSA9IGRvY3Vt
ZW50KCktPmZyYW1lKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgZnJhbWUtPmV2ZW50SGFuZGxl
cigpLT5zZXRDYXB0dXJpbmdNb3VzZUV2ZW50c05vZGUodGhpcyk7Ci0gICAgICAgICAgICAgICAg
ICAgIG1fY2FwdHVyaW5nID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9
Ci0gICAgICAgICAgICBVcERvd25TdGF0ZSBvbGRVcERvd25TdGF0ZSA9IG1fdXBEb3duU3RhdGU7
Ci0gICAgICAgICAgICBtX3VwRG93blN0YXRlID0gbG9jYWwueSgpIDwgYm94LT5oZWlnaHQoKSAv
IDIgPyBVcCA6IERvd247Ci0gICAgICAgICAgICBpZiAobV91cERvd25TdGF0ZSAhPSBvbGRVcERv
d25TdGF0ZSkKLSAgICAgICAgICAgICAgICByZW5kZXJlcigpLT5yZXBhaW50KCk7Ci0gICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICBpZiAobV9jYXB0dXJpbmcpIHsKLSAgICAgICAgICAgICAg
ICBzdG9wUmVwZWF0aW5nVGltZXIoKTsKLSAgICAgICAgICAgICAgICBpZiAoRnJhbWUqIGZyYW1l
ID0gZG9jdW1lbnQoKS0+ZnJhbWUoKSkgewotICAgICAgICAgICAgICAgICAgICBmcmFtZS0+ZXZl
bnRIYW5kbGVyKCktPnNldENhcHR1cmluZ01vdXNlRXZlbnRzTm9kZSgwKTsKLSAgICAgICAgICAg
ICAgICAgICAgbV9jYXB0dXJpbmcgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoIWV2ZW50LT5kZWZhdWx0SGFuZGxl
ZCgpKQotICAgICAgICBIVE1MRGl2RWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcihldmVudCk7
Ci19Ci0KLXZvaWQgU3BpbkJ1dHRvbkVsZW1lbnQ6OnN0YXJ0UmVwZWF0aW5nVGltZXIoKQotewot
ICAgIG1fcHJlc3NTdGFydGluZ1N0YXRlID0gbV91cERvd25TdGF0ZTsKLSAgICBTY3JvbGxiYXJU
aGVtZSogdGhlbWUgPSBTY3JvbGxiYXJUaGVtZTo6bmF0aXZlVGhlbWUoKTsKLSAgICBtX3JlcGVh
dGluZ1RpbWVyLnN0YXJ0KHRoZW1lLT5pbml0aWFsQXV0b3Njcm9sbFRpbWVyRGVsYXkoKSwgdGhl
bWUtPmF1dG9zY3JvbGxUaW1lckRlbGF5KCkpOwotfQotCi12b2lkIFNwaW5CdXR0b25FbGVtZW50
OjpzdG9wUmVwZWF0aW5nVGltZXIoKQotewotICAgIG1fcmVwZWF0aW5nVGltZXIuc3RvcCgpOwot
fQotCi12b2lkIFNwaW5CdXR0b25FbGVtZW50OjpyZXBlYXRpbmdUaW1lckZpcmVkKFRpbWVyPFNw
aW5CdXR0b25FbGVtZW50PiopCi17Ci0gICAgSFRNTElucHV0RWxlbWVudCogaW5wdXQgPSBzdGF0
aWNfY2FzdDxIVE1MSW5wdXRFbGVtZW50Kj4oc2hhZG93QW5jZXN0b3JOb2RlKCkpOwotICAgIGlm
IChpbnB1dC0+ZGlzYWJsZWQoKSB8fCBpbnB1dC0+aXNSZWFkT25seUZvcm1Db250cm9sKCkpCi0g
ICAgICAgIHJldHVybjsKLSAgICAvLyBPbiBNYWMgT1MsIE5TU3RlcHBlciB1cGRhdGVzIHRoZSB2
YWx1ZSBmb3IgdGhlIGJ1dHRvbiB1bmRlciB0aGUgbW91c2UKLSAgICAvLyBjdXJzb3IgcmVnYXJk
bGVzcyBvZiB0aGUgYnV0dG9uIHByZXNzZWQgYXQgdGhlIGJlZ2lubmluZy4gU28gdGhlCi0gICAg
Ly8gZm9sbG93aW5nIGNoZWNrIGlzIG5vdCBuZWVkZWQgZm9yIE1hYyBPUy4KLSNpZiAhT1MoTUFD
X09TX1gpCi0gICAgaWYgKG1fdXBEb3duU3RhdGUgIT0gbV9wcmVzc1N0YXJ0aW5nU3RhdGUpCi0g
ICAgICAgIHJldHVybjsKLSNlbmRpZgotICAgIGlucHV0LT5zdGVwVXBGcm9tUmVuZGVyZXIobV91
cERvd25TdGF0ZSA9PSBVcCA/IDEgOiAtMSk7Ci19Ci0KLXZvaWQgU3BpbkJ1dHRvbkVsZW1lbnQ6
OnNldEhvdmVyZWQoYm9vbCBmbGFnKQotewotICAgIGlmICghaG92ZXJlZCgpICYmIGZsYWcpCi0g
ICAgICAgIG1fdXBEb3duU3RhdGUgPSBJbmRldGVybWluYXRlOwotICAgIFRleHRDb250cm9sSW5u
ZXJFbGVtZW50OjpzZXRIb3ZlcmVkKGZsYWcpOwotfQotCi0KLS8vIC0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KLQotI2lmIEVOQUJMRShJTlBVVF9TUEVFQ0gpCi0KLWlubGluZSBJbnB1dEZp
ZWxkU3BlZWNoQnV0dG9uRWxlbWVudDo6SW5wdXRGaWVsZFNwZWVjaEJ1dHRvbkVsZW1lbnQoSFRN
TEVsZW1lbnQqIHNoYWRvd1BhcmVudCkKLSAgICA6IFRleHRDb250cm9sSW5uZXJFbGVtZW50KHNo
YWRvd1BhcmVudC0+ZG9jdW1lbnQoKSwgc2hhZG93UGFyZW50KQotICAgICwgbV9jYXB0dXJpbmco
ZmFsc2UpCi0gICAgLCBtX3N0YXRlKElkbGUpCi0gICAgLCBtX2xpc3RlbmVySWQoZG9jdW1lbnQo
KS0+cGFnZSgpLT5zcGVlY2hJbnB1dCgpLT5yZWdpc3Rlckxpc3RlbmVyKHRoaXMpKQotewotfQot
Ci1JbnB1dEZpZWxkU3BlZWNoQnV0dG9uRWxlbWVudDo6fklucHV0RmllbGRTcGVlY2hCdXR0b25F
bGVtZW50KCkKLXsKLSAgICBTcGVlY2hJbnB1dCogc3BlZWNoID0gc3BlZWNoSW5wdXQoKTsKLSAg
ICBpZiAoc3BlZWNoICYmIG1fbGlzdGVuZXJJZCkgIHsgLy8gQ291bGQgYmUgbnVsbCB3aGVuIHBh
Z2UgaXMgdW5sb2FkaW5nLgotICAgICAgICBpZiAobV9zdGF0ZSAhPSBJZGxlKQotICAgICAgICAg
ICAgc3BlZWNoLT5jYW5jZWxSZWNvZ25pdGlvbihtX2xpc3RlbmVySWQpOwotICAgICAgICBzcGVl
Y2gtPnVucmVnaXN0ZXJMaXN0ZW5lcihtX2xpc3RlbmVySWQpOwotICAgIH0KLX0KLQotUGFzc1Jl
ZlB0cjxJbnB1dEZpZWxkU3BlZWNoQnV0dG9uRWxlbWVudD4gSW5wdXRGaWVsZFNwZWVjaEJ1dHRv
bkVsZW1lbnQ6OmNyZWF0ZShIVE1MRWxlbWVudCogc2hhZG93UGFyZW50KQotewotICAgIHJldHVy
biBhZG9wdFJlZihuZXcgSW5wdXRGaWVsZFNwZWVjaEJ1dHRvbkVsZW1lbnQoc2hhZG93UGFyZW50
KSk7Ci19Ci0KLXZvaWQgSW5wdXRGaWVsZFNwZWVjaEJ1dHRvbkVsZW1lbnQ6OmRlZmF1bHRFdmVu
dEhhbmRsZXIoRXZlbnQqIGV2ZW50KQotewotICAgIC8vIEZvciBwcml2YWN5IHJlYXNvbnMsIG9u
bHkgYWxsb3cgY2xpY2tzIGRpcmVjdGx5IGNvbWluZyBmcm9tIHRoZSB1c2VyLgotICAgIGlmICgh
ZXZlbnQtPmZyb21Vc2VyR2VzdHVyZSgpKSB7Ci0gICAgICAgIEhUTUxEaXZFbGVtZW50OjpkZWZh
dWx0RXZlbnRIYW5kbGVyKGV2ZW50KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8v
IFRoZSBjYWxsIHRvIGZvY3VzKCkgYmVsb3cgZGlzcGF0Y2hlcyBhIGZvY3VzIGV2ZW50LCBhbmQg
YW4gZXZlbnQgaGFuZGxlciBpbiB0aGUgcGFnZSBtaWdodAotICAgIC8vIHJlbW92ZSB0aGUgaW5w
dXQgZWxlbWVudCBmcm9tIERPTS4gVG8gbWFrZSBzdXJlIGl0IHJlbWFpbnMgdmFsaWQgdW50aWwg
d2UgZmluaXNoIG91ciB3b3JrCi0gICAgLy8gaGVyZSwgd2UgdGFrZSBhIHRlbXBvcmFyeSByZWZl
cmVuY2UuCi0gICAgUmVmUHRyPEhUTUxJbnB1dEVsZW1lbnQ+IGlucHV0KHN0YXRpY19jYXN0PEhU
TUxJbnB1dEVsZW1lbnQqPihzaGFkb3dBbmNlc3Rvck5vZGUoKSkpOwotCi0gICAgLy8gT24gbW91
c2UgZG93biwgc2VsZWN0IHRoZSB0ZXh0IGFuZCBzZXQgZm9jdXMuCi0gICAgaWYgKGV2ZW50LT50
eXBlKCkgPT0gZXZlbnROYW1lcygpLm1vdXNlZG93bkV2ZW50ICYmIGV2ZW50LT5pc01vdXNlRXZl
bnQoKSAmJiBzdGF0aWNfY2FzdDxNb3VzZUV2ZW50Kj4oZXZlbnQpLT5idXR0b24oKSA9PSBMZWZ0
QnV0dG9uKSB7Ci0gICAgICAgIGlmIChyZW5kZXJlcigpICYmIHJlbmRlcmVyKCktPnZpc2libGVU
b0hpdFRlc3RpbmcoKSkgewotICAgICAgICAgICAgaWYgKEZyYW1lKiBmcmFtZSA9IGRvY3VtZW50
KCktPmZyYW1lKCkpIHsKLSAgICAgICAgICAgICAgICBmcmFtZS0+ZXZlbnRIYW5kbGVyKCktPnNl
dENhcHR1cmluZ01vdXNlRXZlbnRzTm9kZSh0aGlzKTsKLSAgICAgICAgICAgICAgICBtX2NhcHR1
cmluZyA9IHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgUmVmUHRyPElu
cHV0RmllbGRTcGVlY2hCdXR0b25FbGVtZW50PiBob2xkUmVmQnV0dG9uKHRoaXMpOwotICAgICAg
ICBpbnB1dC0+Zm9jdXMoKTsKLSAgICAgICAgaW5wdXQtPnNlbGVjdCgpOwotICAgICAgICBldmVu
dC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsKLSAgICB9Ci0gICAgLy8gT24gbW91c2UgdXAsIHJlbGVh
c2UgY2FwdHVyZSBjbGVhbmx5LgotICAgIGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMo
KS5tb3VzZXVwRXZlbnQgJiYgZXZlbnQtPmlzTW91c2VFdmVudCgpICYmIHN0YXRpY19jYXN0PE1v
dXNlRXZlbnQqPihldmVudCktPmJ1dHRvbigpID09IExlZnRCdXR0b24pIHsKLSAgICAgICAgaWYg
KG1fY2FwdHVyaW5nICYmIHJlbmRlcmVyKCkgJiYgcmVuZGVyZXIoKS0+dmlzaWJsZVRvSGl0VGVz
dGluZygpKSB7Ci0gICAgICAgICAgICBpZiAoRnJhbWUqIGZyYW1lID0gZG9jdW1lbnQoKS0+ZnJh
bWUoKSkgewotICAgICAgICAgICAgICAgIGZyYW1lLT5ldmVudEhhbmRsZXIoKS0+c2V0Q2FwdHVy
aW5nTW91c2VFdmVudHNOb2RlKDApOwotICAgICAgICAgICAgICAgIG1fY2FwdHVyaW5nID0gZmFs
c2U7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoZXZlbnQtPnR5
cGUoKSA9PSBldmVudE5hbWVzKCkuY2xpY2tFdmVudCkgewotICAgICAgICBzd2l0Y2ggKG1fc3Rh
dGUpIHsKLSAgICAgICAgY2FzZSBJZGxlOiB7Ci0gICAgICAgICAgICAgIEF0b21pY1N0cmluZyBs
YW5ndWFnZSA9IGlucHV0LT5jb21wdXRlSW5oZXJpdGVkTGFuZ3VhZ2UoKTsKLSAgICAgICAgICAg
ICAgU3RyaW5nIGdyYW1tYXIgPSBpbnB1dC0+Z2V0QXR0cmlidXRlKHdlYmtpdGdyYW1tYXJBdHRy
KTsKLSAgICAgICAgICAgICAgSW50UmVjdCByZWN0ID0gaW5wdXQtPnJlbmRlcmVyKCktPmFic29s
dXRlQm91bmRpbmdCb3hSZWN0KCk7Ci0gICAgICAgICAgICAgIGlmIChzcGVlY2hJbnB1dCgpLT5z
dGFydFJlY29nbml0aW9uKG1fbGlzdGVuZXJJZCwgcmVjdCwgbGFuZ3VhZ2UsIGdyYW1tYXIsIGRv
Y3VtZW50KCktPnNlY3VyaXR5T3JpZ2luKCkpKQotICAgICAgICAgICAgICAgICAgc2V0U3RhdGUo
UmVjb3JkaW5nKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBj
YXNlIFJlY29yZGluZzoKLSAgICAgICAgICAgIHNwZWVjaElucHV0KCktPnN0b3BSZWNvcmRpbmco
bV9saXN0ZW5lcklkKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFJlY29nbml6
aW5nOgotICAgICAgICAgICAgLy8gTm90aGluZyB0byBkbyBoZXJlLCB3ZSB3aWxsIGNvbnRpbnVl
IHRvIHdhaXQgZm9yIHJlc3VsdHMuCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAg
ICAgICBldmVudC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsKLSAgICB9Ci0KLSAgICBpZiAoIWV2ZW50
LT5kZWZhdWx0SGFuZGxlZCgpKQotICAgICAgICBIVE1MRGl2RWxlbWVudDo6ZGVmYXVsdEV2ZW50
SGFuZGxlcihldmVudCk7Ci19Ci0KLXZvaWQgSW5wdXRGaWVsZFNwZWVjaEJ1dHRvbkVsZW1lbnQ6
OnNldFN0YXRlKFNwZWVjaElucHV0U3RhdGUgc3RhdGUpCi17Ci0gICAgaWYgKG1fc3RhdGUgIT0g
c3RhdGUpIHsKLSAgICAgICAgbV9zdGF0ZSA9IHN0YXRlOwotICAgICAgICBzaGFkb3dBbmNlc3Rv
ck5vZGUoKS0+cmVuZGVyZXIoKS0+cmVwYWludCgpOwotICAgIH0KLX0KLQotU3BlZWNoSW5wdXQq
IElucHV0RmllbGRTcGVlY2hCdXR0b25FbGVtZW50OjpzcGVlY2hJbnB1dCgpCi17Ci0gICAgcmV0
dXJuIGRvY3VtZW50KCktPnBhZ2UoKSA/IGRvY3VtZW50KCktPnBhZ2UoKS0+c3BlZWNoSW5wdXQo
KSA6IDA7Ci19Ci0KLXZvaWQgSW5wdXRGaWVsZFNwZWVjaEJ1dHRvbkVsZW1lbnQ6OmRpZENvbXBs
ZXRlUmVjb3JkaW5nKGludCkKLXsKLSAgICBzZXRTdGF0ZShSZWNvZ25pemluZyk7Ci19Ci0KLXZv
aWQgSW5wdXRGaWVsZFNwZWVjaEJ1dHRvbkVsZW1lbnQ6OmRpZENvbXBsZXRlUmVjb2duaXRpb24o
aW50KQotewotICAgIHNldFN0YXRlKElkbGUpOwotfQotCi12b2lkIElucHV0RmllbGRTcGVlY2hC
dXR0b25FbGVtZW50OjpzZXRSZWNvZ25pdGlvblJlc3VsdChpbnQsIGNvbnN0IFNwZWVjaElucHV0
UmVzdWx0QXJyYXkmIHJlc3VsdHMpCi17Ci0gICAgbV9yZXN1bHRzID0gcmVzdWx0czsKLQotICAg
IC8vIFRoZSBjYWxsIHRvIHNldFZhbHVlKCkgYmVsb3cgZGlzcGF0Y2hlcyBhbiBldmVudCwgYW5k
IGFuIGV2ZW50IGhhbmRsZXIgaW4gdGhlIHBhZ2UgbWlnaHQKLSAgICAvLyByZW1vdmUgdGhlIGlu
cHV0IGVsZW1lbnQgZnJvbSBET00uIFRvIG1ha2Ugc3VyZSBpdCByZW1haW5zIHZhbGlkIHVudGls
IHdlIGZpbmlzaCBvdXIgd29yawotICAgIC8vIGhlcmUsIHdlIHRha2UgYSB0ZW1wb3JhcnkgcmVm
ZXJlbmNlLgotICAgIFJlZlB0cjxIVE1MSW5wdXRFbGVtZW50PiBpbnB1dChzdGF0aWNfY2FzdDxI
VE1MSW5wdXRFbGVtZW50Kj4oc2hhZG93QW5jZXN0b3JOb2RlKCkpKTsKLSAgICBSZWZQdHI8SW5w
dXRGaWVsZFNwZWVjaEJ1dHRvbkVsZW1lbnQ+IGhvbGRSZWZCdXR0b24odGhpcyk7Ci0gICAgaW5w
dXQtPnNldFZhbHVlKHJlc3VsdHMuaXNFbXB0eSgpID8gIiIgOiByZXN1bHRzWzBdLT51dHRlcmFu
Y2UoKSk7Ci0gICAgaW5wdXQtPmRpc3BhdGNoRXZlbnQoU3BlZWNoSW5wdXRFdmVudDo6Y3JlYXRl
KGV2ZW50TmFtZXMoKS53ZWJraXRzcGVlY2hjaGFuZ2VFdmVudCwgcmVzdWx0cykpOwotCi0gICAg
Ly8gQ2hlY2sgYmVmb3JlIGFjY2Vzc2luZyB0aGUgcmVuZGVyZXIgYXMgdGhlIGFib3ZlIGV2ZW50
IGNvdWxkIGhhdmUgcG90ZW50aWFsbHkgdHVybmVkIG9mZgotICAgIC8vIHNwZWVjaCBpbiB0aGUg
aW5wdXQgZWxlbWVudCwgaGVuY2UgcmVtb3ZpbmcgdGhpcyBidXR0b24gYW5kIHJlbmRlcmVyIGZy
b20gdGhlIGhpZXJhcmNoeS4KLSAgICBpZiAocmVuZGVyZXIoKSkKLSAgICAgICAgcmVuZGVyZXIo
KS0+cmVwYWludCgpOwotfQotCi12b2lkIElucHV0RmllbGRTcGVlY2hCdXR0b25FbGVtZW50Ojpk
ZXRhY2goKQotewotICAgIGlmIChtX2NhcHR1cmluZykgewotICAgICAgICBpZiAoRnJhbWUqIGZy
YW1lID0gZG9jdW1lbnQoKS0+ZnJhbWUoKSkKLSAgICAgICAgICAgIGZyYW1lLT5ldmVudEhhbmRs
ZXIoKS0+c2V0Q2FwdHVyaW5nTW91c2VFdmVudHNOb2RlKDApOwotICAgIH0KLQotICAgIGlmICht
X2xpc3RlbmVySWQpIHsKLSAgICAgICAgaWYgKG1fc3RhdGUgIT0gSWRsZSkKLSAgICAgICAgICAg
IHNwZWVjaElucHV0KCktPmNhbmNlbFJlY29nbml0aW9uKG1fbGlzdGVuZXJJZCk7Ci0gICAgICAg
IHNwZWVjaElucHV0KCktPnVucmVnaXN0ZXJMaXN0ZW5lcihtX2xpc3RlbmVySWQpOwotICAgICAg
ICBtX2xpc3RlbmVySWQgPSAwOwotICAgIH0KLQotICAgIFRleHRDb250cm9sSW5uZXJFbGVtZW50
OjpkZXRhY2goKTsKLX0KLQotI2VuZGlmIC8vIEVOQUJMRShJTlBVVF9TUEVFQ0gpCi0KLX0KSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0Q29udHJvbElubmVyRWxlbWVudHMuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvVGV4dENvbnRyb2xJbm5lckVs
ZW1lbnRzLmgJKHJldmlzaW9uIDc5Mjg3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Rl
eHRDb250cm9sSW5uZXJFbGVtZW50cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDE1OCArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA4LCAyMDEwIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0g
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0g
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKLSAqLwotIAotI2lmbmRlZiBUZXh0Q29udHJvbElubmVyRWxlbWVudHNf
aAotI2RlZmluZSBUZXh0Q29udHJvbElubmVyRWxlbWVudHNfaAotCi0jaW5jbHVkZSAiSFRNTERp
dkVsZW1lbnQuaCIKLSNpbmNsdWRlICJTcGVlY2hJbnB1dExpc3RlbmVyLmgiCi0jaW5jbHVkZSAi
VGltZXIuaCIKLSNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7
Ci0KLWNsYXNzIFNwZWVjaElucHV0OwotCi1jbGFzcyBUZXh0Q29udHJvbElubmVyRWxlbWVudCA6
IHB1YmxpYyBIVE1MRGl2RWxlbWVudCB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8
VGV4dENvbnRyb2xJbm5lckVsZW1lbnQ+IGNyZWF0ZShIVE1MRWxlbWVudCogc2hhZG93UGFyZW50
KTsKLSAgICB2aXJ0dWFsIHZvaWQgZGV0YWNoKCk7Ci0KLSAgICB2b2lkIGF0dGFjaElubmVyRWxl
bWVudChOb2RlKiwgUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4sIFJlbmRlckFyZW5hKik7Ci0KLXBy
b3RlY3RlZDoKLSAgICBUZXh0Q29udHJvbElubmVyRWxlbWVudChEb2N1bWVudCosIEhUTUxFbGVt
ZW50KiBzaGFkb3dQYXJlbnQgPSAwKTsKLQotcHJpdmF0ZToKLSAgICB2aXJ0dWFsIGJvb2wgaXNN
b3VzZUZvY3VzYWJsZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9Ci19OwotCi1jbGFzcyBUZXh0
Q29udHJvbElubmVyVGV4dEVsZW1lbnQgOiBwdWJsaWMgVGV4dENvbnRyb2xJbm5lckVsZW1lbnQg
ewotcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPFRleHRDb250cm9sSW5uZXJUZXh0RWxl
bWVudD4gY3JlYXRlKERvY3VtZW50KiwgSFRNTEVsZW1lbnQqIHNoYWRvd1BhcmVudCk7Ci0KLSAg
ICB2aXJ0dWFsIHZvaWQgZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCopOwotCi1wcml2YXRlOgot
ICAgIFRleHRDb250cm9sSW5uZXJUZXh0RWxlbWVudChEb2N1bWVudCosIEhUTUxFbGVtZW50KiBz
aGFkb3dQYXJlbnQpOwotICAgIHZpcnR1YWwgUmVuZGVyT2JqZWN0KiBjcmVhdGVSZW5kZXJlcihS
ZW5kZXJBcmVuYSosIFJlbmRlclN0eWxlKik7ICAKLX07Ci0KLWNsYXNzIFNlYXJjaEZpZWxkUmVz
dWx0c0J1dHRvbkVsZW1lbnQgOiBwdWJsaWMgVGV4dENvbnRyb2xJbm5lckVsZW1lbnQgewotcHVi
bGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRvbkVsZW1l
bnQ+IGNyZWF0ZShEb2N1bWVudCopOwotCi0gICAgdmlydHVhbCB2b2lkIGRlZmF1bHRFdmVudEhh
bmRsZXIoRXZlbnQqKTsKLQotcHJpdmF0ZToKLSAgICBTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b25F
bGVtZW50KERvY3VtZW50Kik7Ci19OwotCi1jbGFzcyBTZWFyY2hGaWVsZENhbmNlbEJ1dHRvbkVs
ZW1lbnQgOiBwdWJsaWMgVGV4dENvbnRyb2xJbm5lckVsZW1lbnQgewotcHVibGljOgotICAgIHN0
YXRpYyBQYXNzUmVmUHRyPFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uRWxlbWVudD4gY3JlYXRlKERv
Y3VtZW50Kik7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCop
OwotCi1wcml2YXRlOgotICAgIFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uRWxlbWVudChEb2N1bWVu
dCopOwotCi0gICAgdmlydHVhbCB2b2lkIGRldGFjaCgpOwotCi0gICAgYm9vbCBtX2NhcHR1cmlu
ZzsKLX07Ci0KLWNsYXNzIFNwaW5CdXR0b25FbGVtZW50IDogcHVibGljIFRleHRDb250cm9sSW5u
ZXJFbGVtZW50IHsKLXB1YmxpYzoKLSAgICBlbnVtIFVwRG93blN0YXRlIHsKLSAgICAgICAgSW5k
ZXRlcm1pbmF0ZSwgLy8gSG92ZXJlZCwgYnV0IHRoZSBldmVudCBpcyBub3QgaGFuZGxlZC4KLSAg
ICAgICAgRG93biwKLSAgICAgICAgVXAsCi0gICAgfTsKLQotICAgIHN0YXRpYyBQYXNzUmVmUHRy
PFNwaW5CdXR0b25FbGVtZW50PiBjcmVhdGUoSFRNTEVsZW1lbnQqKTsKLSAgICBVcERvd25TdGF0
ZSB1cERvd25TdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdXBEb3duU3RhdGU7IH0KLQotcHJpdmF0
ZToKLSAgICBTcGluQnV0dG9uRWxlbWVudChIVE1MRWxlbWVudCopOwotCi0gICAgdmlydHVhbCB2
b2lkIGRldGFjaCgpOwotICAgIHZpcnR1YWwgYm9vbCBpc1NwaW5CdXR0b25FbGVtZW50KCkgY29u
c3QgeyByZXR1cm4gdHJ1ZTsgfQotICAgIC8vIEZJWE1FOiBzaGFkb3dBbmNlc3Rvck5vZGUoKSBz
aG91bGQgYmUgY29uc3QuCi0gICAgdmlydHVhbCBib29sIGlzRW5hYmxlZEZvcm1Db250cm9sKCkg
Y29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8RWxlbWVudCo+KGNvbnN0X2Nhc3Q8U3BpbkJ1dHRv
bkVsZW1lbnQqPih0aGlzKS0+c2hhZG93QW5jZXN0b3JOb2RlKCkpLT5pc0VuYWJsZWRGb3JtQ29u
dHJvbCgpOyB9Ci0gICAgdmlydHVhbCBib29sIGlzUmVhZE9ubHlGb3JtQ29udHJvbCgpIGNvbnN0
IHsgcmV0dXJuIHN0YXRpY19jYXN0PEVsZW1lbnQqPihjb25zdF9jYXN0PFNwaW5CdXR0b25FbGVt
ZW50Kj4odGhpcyktPnNoYWRvd0FuY2VzdG9yTm9kZSgpKS0+aXNSZWFkT25seUZvcm1Db250cm9s
KCk7IH0KLSAgICB2aXJ0dWFsIHZvaWQgZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCopOwotICAg
IHZvaWQgc3RhcnRSZXBlYXRpbmdUaW1lcigpOwotICAgIHZvaWQgc3RvcFJlcGVhdGluZ1RpbWVy
KCk7Ci0gICAgdm9pZCByZXBlYXRpbmdUaW1lckZpcmVkKFRpbWVyPFNwaW5CdXR0b25FbGVtZW50
PiopOwotICAgIHZpcnR1YWwgdm9pZCBzZXRIb3ZlcmVkKGJvb2wgPSB0cnVlKTsKLQotICAgIGJv
b2wgbV9jYXB0dXJpbmc7Ci0gICAgVXBEb3duU3RhdGUgbV91cERvd25TdGF0ZTsKLSAgICBVcERv
d25TdGF0ZSBtX3ByZXNzU3RhcnRpbmdTdGF0ZTsKLSAgICBUaW1lcjxTcGluQnV0dG9uRWxlbWVu
dD4gbV9yZXBlYXRpbmdUaW1lcjsKLX07Ci0KLSNpZiBFTkFCTEUoSU5QVVRfU1BFRUNIKQotCi1j
bGFzcyBJbnB1dEZpZWxkU3BlZWNoQnV0dG9uRWxlbWVudAotICAgIDogcHVibGljIFRleHRDb250
cm9sSW5uZXJFbGVtZW50LAotICAgICAgcHVibGljIFNwZWVjaElucHV0TGlzdGVuZXIgewotcHVi
bGljOgotICAgIGVudW0gU3BlZWNoSW5wdXRTdGF0ZSB7Ci0gICAgICAgIElkbGUsCi0gICAgICAg
IFJlY29yZGluZywKLSAgICAgICAgUmVjb2duaXppbmcsCi0gICAgfTsKLQotICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPElucHV0RmllbGRTcGVlY2hCdXR0b25FbGVtZW50PiBjcmVhdGUoSFRNTEVsZW1l
bnQqKTsKLSAgICB2aXJ0dWFsIH5JbnB1dEZpZWxkU3BlZWNoQnV0dG9uRWxlbWVudCgpOwotCi0g
ICAgdmlydHVhbCB2b2lkIGRldGFjaCgpOwotICAgIHZpcnR1YWwgdm9pZCBkZWZhdWx0RXZlbnRI
YW5kbGVyKEV2ZW50Kik7Ci0gICAgU3BlZWNoSW5wdXRTdGF0ZSBzdGF0ZSgpIGNvbnN0IHsgcmV0
dXJuIG1fc3RhdGU7IH0KLQotICAgIC8vIFNwZWVjaElucHV0TGlzdGVuZXIgbWV0aG9kcy4KLSAg
ICB2b2lkIGRpZENvbXBsZXRlUmVjb3JkaW5nKGludCk7Ci0gICAgdm9pZCBkaWRDb21wbGV0ZVJl
Y29nbml0aW9uKGludCk7Ci0gICAgdm9pZCBzZXRSZWNvZ25pdGlvblJlc3VsdChpbnQsIGNvbnN0
IFNwZWVjaElucHV0UmVzdWx0QXJyYXkmKTsKLQotcHJpdmF0ZToKLSAgICBJbnB1dEZpZWxkU3Bl
ZWNoQnV0dG9uRWxlbWVudChIVE1MRWxlbWVudCopOwotICAgIFNwZWVjaElucHV0KiBzcGVlY2hJ
bnB1dCgpOwotICAgIHZvaWQgc2V0U3RhdGUoU3BlZWNoSW5wdXRTdGF0ZSBzdGF0ZSk7Ci0KLSAg
ICBib29sIG1fY2FwdHVyaW5nOwotICAgIFNwZWVjaElucHV0U3RhdGUgbV9zdGF0ZTsKLSAgICBp
bnQgbV9saXN0ZW5lcklkOwotICAgIFNwZWVjaElucHV0UmVzdWx0QXJyYXkgbV9yZXN1bHRzOwot
fTsKLQotI2VuZGlmIC8vIEVOQUJMRShJTlBVVF9TUEVFQ0gpCi0KLX0gLy8gbmFtZXNwYWNlCi0K
LSNlbmRpZgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>83284</attachid>
            <date>2011-02-22 01:33:23 -0800</date>
            <delta_ts>2012-04-21 17:58:04 -0700</delta_ts>
            <desc>patch, SVN, fixes</desc>
            <filename>bug-54853-20110222183321.patch</filename>
            <type>text/plain</type>
            <size>70935</size>
            <attacher name="Roland Steiner">rolandsteiner</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDc5MjkwKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzMgQEAKKzIwMTEtMDItMjEgIFJvbGFuZCBT
dGVpbmVyICA8cm9sYW5kc3RlaW5lckBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQnVnIDU0ODUzIC0gTW92ZSBUZXh0Q29udHJv
bElubmVyRWxlbWVudHMgZnJvbSBXZWJDb3JlL3JlbmRlcmluZyB0byBXZWJDb3JlL2h0bWwvc2hh
ZG93CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01NDg1
MworICAgICAgICAKKyAgICAgICAgTW92aW5nIHRoZSBmaWxlcyBmcm9tIHJlbmRlcmluZyB0byBo
dG1sL3NoYWRvdywgd2l0aCB0aGUgZXhjZXB0aW9uIG9mCisgICAgICAgIHRoZSBjbGFzcyBSZW5k
ZXJUZXh0Q29udHJvbElubmVyQmxvY2ssIHdoaWNoIEkgbW92ZWQgdG8gUmVuZGVyVGV4dENvbnRy
b2xTaW5nbGVMaW5lCisgICAgICAgICh0aGlzIHBsYWNlIGlzIG5vdCBpZGVhbCwgYnV0IG9ubHkg
YSB0ZW1wb3Jhcnkgc3RhdGUgZHVyaW5nIHRoZSBsYXJnZXIgcmVmYWN0b3JpbmcKKyAgICAgICAg
Zm9yIDxpbnB1dD4pLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cy4gKHJlZmFjdG9yaW5nKQorCisg
ICAgICAgICogQW5kcm9pZC5tazoKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAg
KiBXZWJDb3JlLmd5cGk6CisgICAgICAgICogV2ViQ29yZS5wcm86CisgICAgICAgICogV2ViQ29y
ZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2o6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qOgorICAgICAgICAqIGh0bWwvc2hhZG93L1RleHRDb250cm9sSW5uZXJFbGVt
ZW50cy5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0Q29udHJv
bElubmVyRWxlbWVudHMuY3BwLgorICAgICAgICAqIGh0bWwvc2hhZG93L1RleHRDb250cm9sSW5u
ZXJFbGVtZW50cy5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvVGV4dENv
bnRyb2xJbm5lckVsZW1lbnRzLmguCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRleHRDb250
cm9sU2luZ2xlTGluZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0Q29udHJvbElu
bmVyQmxvY2s6OnBvc2l0aW9uRm9yUG9pbnQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJU
ZXh0Q29udHJvbFNpbmdsZUxpbmUuaDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHRDb250
cm9sSW5uZXJCbG9jazo6UmVuZGVyVGV4dENvbnRyb2xJbm5lckJsb2NrKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclRleHRDb250cm9sSW5uZXJCbG9jazo6aGFzTGluZUlmRW1wdHkpOgorICAg
ICAgICAqIHJlbmRlcmluZy9UZXh0Q29udHJvbElubmVyRWxlbWVudHMuY3BwOiBSZW1vdmVkLgor
ICAgICAgICAqIHJlbmRlcmluZy9UZXh0Q29udHJvbElubmVyRWxlbWVudHMuaDogUmVtb3ZlZC4K
KwogMjAxMS0wMi0yMSAgQmVuamFtaW4gS2FsbWFuICA8a2FsbWFuQGNocm9taXVtLm9yZz4KIAog
ICAgICAgICBSZXZpZXdlZCBieSBSeW9zdWtlIE5pd2EuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9B
bmRyb2lkLm1rCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0FuZHJvaWQubWsJKHJldmlz
aW9uIDc5Mjg3KQorKysgU291cmNlL1dlYkNvcmUvQW5kcm9pZC5tawkod29ya2luZyBjb3B5KQpA
QCAtMzUxLDYgKzM1MSw3IEBAIExPQ0FMX1NSQ19GSUxFUyA6PSAkKExPQ0FMX1NSQ19GSUxFUykg
XAogCVwKIAlodG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xzLmNwcCBcCiAJaHRtbC9zaGFkb3cvU2xp
ZGVyVGh1bWJFbGVtZW50LmNwcCBcCisJaHRtbC9zaGFkb3cvVGV4dENvbnRyb2xJbm5lckVsZW1l
bnRzLmNwcCBcCiAJXAogCWxvYWRlci9jYWNoZS9DYWNoZWRDU1NTdHlsZVNoZWV0LmNwcCBcCiAJ
bG9hZGVyL2NhY2hlL0NhY2hlZEZvbnQuY3BwIFwKQEAgLTc4Myw3ICs3ODQsNiBAQCBMT0NBTF9T
UkNfRklMRVMgOj0gJChMT0NBTF9TUkNfRklMRVMpIFwKIAogTE9DQUxfU1JDX0ZJTEVTIDo9ICQo
TE9DQUxfU1JDX0ZJTEVTKSBcCiAJcmVuZGVyaW5nL1Njcm9sbEJlaGF2aW9yLmNwcCBcCi0JcmVu
ZGVyaW5nL1RleHRDb250cm9sSW5uZXJFbGVtZW50cy5jcHAgXAogCXJlbmRlcmluZy9UcmFuc2Zv
cm1TdGF0ZS5jcHAgXAogCXJlbmRlcmluZy9icmVha19saW5lcy5jcHAgXAogCVwKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiA3OTI4NykKKysrIFNvdXJjZS9XZWJDb3JlL0NNYWtl
TGlzdHMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0xMDM1LDYgKzEwMzUsNyBAQCBTRVQoV2ViQ29y
ZV9TT1VSQ0VTCiAKICAgICBodG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xzLmNwcAogICAgIGh0bWwv
c2hhZG93L1NsaWRlclRodW1iRWxlbWVudC5jcHAKKyAgICBodG1sL3NoYWRvdy9UZXh0Q29udHJv
bElubmVyRWxlbWVudHMuY3BwCiAKICAgICBpbnNwZWN0b3IvQ29uc29sZU1lc3NhZ2UuY3BwCiAg
ICAgaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0LmNwcApAQCAtMTQxOCw3ICsxNDE5LDYgQEAgU0VU
KFdlYkNvcmVfU09VUkNFUwogICAgIHJlbmRlcmluZy9Sb290SW5saW5lQm94LmNwcAogICAgIHJl
bmRlcmluZy9TY3JvbGxCZWhhdmlvci5jcHAKICAgICByZW5kZXJpbmcvU2hhZG93RWxlbWVudC5j
cHAKLSAgICByZW5kZXJpbmcvVGV4dENvbnRyb2xJbm5lckVsZW1lbnRzLmNwcAogICAgIHJlbmRl
cmluZy9UcmFuc2Zvcm1TdGF0ZS5jcHAKICAgICByZW5kZXJpbmcvYnJlYWtfbGluZXMuY3BwCiAK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLmd5cGkJKHJldmlzaW9uIDc5Mjg3KQorKysgU291cmNlL1dlYkNvcmUv
V2ViQ29yZS5neXBpCSh3b3JraW5nIGNvcHkpCkBAIC0yMDIyLDYgKzIwMjIsOCBAQAogICAgICAg
ICAgICAgJ2h0bWwvc2hhZG93L1Byb2dyZXNzQmFyVmFsdWVFbGVtZW50LmgnLAogICAgICAgICAg
ICAgJ2h0bWwvc2hhZG93L1NsaWRlclRodW1iRWxlbWVudC5jcHAnLAogICAgICAgICAgICAgJ2h0
bWwvc2hhZG93L1NsaWRlclRodW1iRWxlbWVudC5oJywKKyAgICAgICAgICAgICdodG1sL3NoYWRv
dy9UZXh0Q29udHJvbElubmVyRWxlbWVudHMuY3BwJywKKyAgICAgICAgICAgICdodG1sL3NoYWRv
dy9UZXh0Q29udHJvbElubmVyRWxlbWVudHMuaCcsCiAgICAgICAgICAgICAnaW5zcGVjdG9yL0Nv
bnNvbGVNZXNzYWdlLmNwcCcsCiAgICAgICAgICAgICAnaW5zcGVjdG9yL0NvbnNvbGVNZXNzYWdl
LmgnLAogICAgICAgICAgICAgJ2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdC5jcHAnLApAQCAtNDAy
NCw4ICs0MDI2LDYgQEAKICAgICAgICAgICAgICdyZW5kZXJpbmcvU2hhZG93RWxlbWVudC5jcHAn
LAogICAgICAgICAgICAgJ3JlbmRlcmluZy9TaGFkb3dFbGVtZW50LmgnLAogICAgICAgICAgICAg
J3JlbmRlcmluZy9UYWJsZUxheW91dC5oJywKLSAgICAgICAgICAgICdyZW5kZXJpbmcvVGV4dENv
bnRyb2xJbm5lckVsZW1lbnRzLmNwcCcsCi0gICAgICAgICAgICAncmVuZGVyaW5nL1RleHRDb250
cm9sSW5uZXJFbGVtZW50cy5oJywKICAgICAgICAgICAgICdyZW5kZXJpbmcvVHJhbnNmb3JtU3Rh
dGUuY3BwJywKICAgICAgICAgICAgICdyZW5kZXJpbmcvVHJhbnNmb3JtU3RhdGUuaCcsCiAgICAg
ICAgICAgICAncmVuZGVyaW5nL2JyZWFrX2xpbmVzLmNwcCcsCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLnBybwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnBybwko
cmV2aXNpb24gNzkyODcpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnBybwkod29ya2luZyBj
b3B5KQpAQCAtOTMyLDYgKzkzMiw3IEBAIFNPVVJDRVMgKz0gXAogICAgIGh0bWwvcGFyc2VyL1hT
U0ZpbHRlci5jcHAgXAogICAgIGh0bWwvc2hhZG93L01lZGlhQ29udHJvbHMuY3BwIFwKICAgICBo
dG1sL3NoYWRvdy9TbGlkZXJUaHVtYkVsZW1lbnQuY3BwIFwKKyAgICBodG1sL3NoYWRvdy9UZXh0
Q29udHJvbElubmVyRWxlbWVudHMuY3BwIFwKICAgICBpbnNwZWN0b3IvQ29uc29sZU1lc3NhZ2Uu
Y3BwIFwKICAgICBpbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHQuY3BwIFwKICAgICBpbnNwZWN0b3Iv
SW5qZWN0ZWRTY3JpcHRIb3N0LmNwcCBcCkBAIC0xMjYxLDcgKzEyNjIsNiBAQCBTT1VSQ0VTICs9
IFwKICAgICByZW5kZXJpbmcvUm9vdElubGluZUJveC5jcHAgXAogICAgIHJlbmRlcmluZy9TY3Jv
bGxCZWhhdmlvci5jcHAgXAogICAgIHJlbmRlcmluZy9TaGFkb3dFbGVtZW50LmNwcCBcCi0gICAg
cmVuZGVyaW5nL1RleHRDb250cm9sSW5uZXJFbGVtZW50cy5jcHAgXAogICAgIHJlbmRlcmluZy9U
cmFuc2Zvcm1TdGF0ZS5jcHAgXAogICAgIHJlbmRlcmluZy9zdHlsZS9Db250ZW50RGF0YS5jcHAg
XAogICAgIHJlbmRlcmluZy9zdHlsZS9Db3VudGVyRGlyZWN0aXZlcy5jcHAgXApAQCAtMjMyOCw3
ICsyMzI4LDYgQEAgSEVBREVSUyArPSBcCiAgICAgcmVuZGVyaW5nL3N2Zy9TVkdUZXh0TGF5b3V0
RW5naW5lU3BhY2luZy5oIFwKICAgICByZW5kZXJpbmcvc3ZnL1NWR1RleHRNZXRyaWNzLmggXAog
ICAgIHJlbmRlcmluZy9zdmcvU1ZHVGV4dFF1ZXJ5LmggXAotICAgIHJlbmRlcmluZy9UZXh0Q29u
dHJvbElubmVyRWxlbWVudHMuaCBcCiAgICAgcmVuZGVyaW5nL1RyYW5zZm9ybVN0YXRlLmggXAog
ICAgIHN2Zy9hbmltYXRpb24vU01JTFRpbWVDb250YWluZXIuaCBcCiAgICAgc3ZnL2FuaW1hdGlv
bi9TTUlMVGltZS5oIFwKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNv
cmUudmNwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dl
YkNvcmUudmNwcm9qCShyZXZpc2lvbiA3OTI4NykKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
dmNwcm9qL1dlYkNvcmUudmNwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0zODQ4OCw2MiArMzg0ODgs
NiBAQAogCQkJCT4KIAkJCTwvRmlsZT4KIAkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxy
ZW5kZXJpbmdcVGV4dENvbnRyb2xJbm5lckVsZW1lbnRzLmNwcCIKLQkJCQk+Ci0JCQkJPEZpbGVD
b25maWd1cmF0aW9uCi0JCQkJCU5hbWU9IkRlYnVnfFdpbjMyIgotCQkJCQlFeGNsdWRlZEZyb21C
dWlsZD0idHJ1ZSIKLQkJCQkJPgotCQkJCQk8VG9vbAotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVy
VG9vbCIKLQkJCQkJLz4KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgotCQkJCTxGaWxlQ29uZmln
dXJhdGlvbgotCQkJCQlOYW1lPSJSZWxlYXNlfFdpbjMyIgotCQkJCQlFeGNsdWRlZEZyb21CdWls
ZD0idHJ1ZSIKLQkJCQkJPgotCQkJCQk8VG9vbAotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9v
bCIKLQkJCQkJLz4KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgotCQkJCTxGaWxlQ29uZmlndXJh
dGlvbgotCQkJCQlOYW1lPSJEZWJ1Z19DYWlyb19DRkxpdGV8V2luMzIiCi0JCQkJCUV4Y2x1ZGVk
RnJvbUJ1aWxkPSJ0cnVlIgotCQkJCQk+Ci0JCQkJCTxUb29sCi0JCQkJCQlOYW1lPSJWQ0NMQ29t
cGlsZXJUb29sIgotCQkJCQkvPgotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+Ci0JCQkJPEZpbGVD
b25maWd1cmF0aW9uCi0JCQkJCU5hbWU9IlJlbGVhc2VfQ2Fpcm9fQ0ZMaXRlfFdpbjMyIgotCQkJ
CQlFeGNsdWRlZEZyb21CdWlsZD0idHJ1ZSIKLQkJCQkJPgotCQkJCQk8VG9vbAotCQkJCQkJTmFt
ZT0iVkNDTENvbXBpbGVyVG9vbCIKLQkJCQkJLz4KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgot
CQkJCTxGaWxlQ29uZmlndXJhdGlvbgotCQkJCQlOYW1lPSJEZWJ1Z19BbGx8V2luMzIiCi0JCQkJ
CUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIgotCQkJCQk+Ci0JCQkJCTxUb29sCi0JCQkJCQlOYW1l
PSJWQ0NMQ29tcGlsZXJUb29sIgotCQkJCQkvPgotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+Ci0J
CQkJPEZpbGVDb25maWd1cmF0aW9uCi0JCQkJCU5hbWU9IlJlbGVhc2VfTFRDR3xXaW4zMiIKLQkJ
CQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiCi0JCQkJCT4KLQkJCQkJPFRvb2wKLQkJCQkJCU5h
bWU9IlZDQ0xDb21waWxlclRvb2wiCi0JCQkJCS8+Ci0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4K
LQkJCTwvRmlsZT4KLQkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxyZW5kZXJpbmdcVGV4
dENvbnRyb2xJbm5lckVsZW1lbnRzLmgiCi0JCQkJPgotCQkJPC9GaWxlPgotCQkJPEZpbGUKIAkJ
CQlSZWxhdGl2ZVBhdGg9Ii4uXHJlbmRlcmluZ1xUcmFpbGluZ0Zsb2F0c1Jvb3RJbmxpbmVCb3gu
aCIKIAkJCQk+CiAJCQk8L0ZpbGU+CkBAIC01NTgwNCw2ICs1NTc0OCwxNCBAQAogCQkJCQlSZWxh
dGl2ZVBhdGg9Ii4uXGh0bWxcc2hhZG93XFNsaWRlclRodW1iRWxlbWVudC5oIgogCQkJCQk+CiAJ
CQkJPC9GaWxlPgorICAgICAgICAgICAgICAgIDxGaWxlCisgICAgICAgICAgICAgICAgICAgIFJl
bGF0aXZlUGF0aD0iLi5caHRtbFxzaGFkb3dcVGV4dENvbnRyb2xJbm5lckVsZW1lbnRzLmNwcCIK
KyAgICAgICAgICAgICAgICAgICAgPgorICAgICAgICAgICAgICAgIDwvRmlsZT4KKyAgICAgICAg
ICAgICAgICA8RmlsZQorICAgICAgICAgICAgICAgICAgICBSZWxhdGl2ZVBhdGg9Ii4uXGh0bWxc
c2hhZG93XFRleHRDb250cm9sSW5uZXJFbGVtZW50cy5oIgorICAgICAgICAgICAgICAgICAgICA+
CisgICAgICAgICAgICAgICAgPC9GaWxlPgogCQkJPC9GaWx0ZXI+CiAJCTwvRmlsdGVyPgogCQk8
RmlsdGVyCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCShyZXZpc2lvbiA3OTI4NykKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMjgzLDYgKzI4Myw4
IEBACiAJCTE0MTlEMkM1MENFQTZGNjEwMEZGNTA3QSAvKiBUcmVlU2hhcmVkLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDE5RDJDNDBDRUE2RjYxMDBG
RjUwN0EgLyogVHJlZVNoYXJlZC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCTE0MjAxMUI2MEEwMDMxMzMwMDgzMDNGOSAvKiBKU0NTU1N0eWxlRGVj
bGFyYXRpb24uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMTQyMDExQjQwQTAwMzEzMzAwODMwM0Y5IC8qIEpTQ1NTU3R5bGVEZWNsYXJhdGlvbi5jcHAg
Ki87IH07CiAJCTE0MjAxMUI3MEEwMDMxMzMwMDgzMDNGOSAvKiBKU0NTU1N0eWxlRGVjbGFyYXRp
b24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0MjAx
MUI1MEEwMDMxMzMwMDgzMDNGOSAvKiBKU0NTU1N0eWxlRGVjbGFyYXRpb24uaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkxNDJCOTdDOTEzMTM4OTQz
MDA4QkVGNEIgLyogVGV4dENvbnRyb2xJbm5lckVsZW1lbnRzLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0MkI5N0M3MTMxMzg5NDMwMDhCRUY0QiAv
KiBUZXh0Q29udHJvbElubmVyRWxlbWVudHMuY3BwICovOyB9OworCQkxNDJCOTdDQTEzMTM4OTQz
MDA4QkVGNEIgLyogVGV4dENvbnRyb2xJbm5lckVsZW1lbnRzLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDJCOTdDODEzMTM4OTQzMDA4QkVGNEIgLyog
VGV4dENvbnRyb2xJbm5lckVsZW1lbnRzLmggKi87IH07CiAJCTE0MzJFODQ3MEM1MTQ5MzgwMEIx
NTAwRiAvKiBHQ0NvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDE0MzJFODQ2MEM1MTQ5MzgwMEIxNTAwRiAvKiBHQ0NvbnRyb2xsZXIuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkxNDMyRTg0
OTBDNTE0OTNGMDBCMTUwMEYgLyogR0NDb250cm9sbGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0MzJFODQ4MEM1MTQ5M0YwMEIxNTAwRiAvKiBH
Q0NvbnRyb2xsZXIuY3BwICovOyB9OwogCQkxNDQ5RTI0QzEwN0Q0QTg0MDBCNTc5M0YgLyogSlND
YWxsYmFja0RhdGEuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDE0NDlFMjRBMTA3RDRBODQwMEI1NzkzRiAvKiBKU0NhbGxiYWNrRGF0YS5oICovOyB9OwpA
QCAtNDAwNiw4ICs0MDA4LDYgQEAKIAkJQUEyMUVDQ0QwQUJGMEZDNjAwMkI4MzRDIC8qIENTU0N1
cnNvckltYWdlVmFsdWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEFBMDk3OEVFMEFCQUE2RTEwMDg3NDQ4MCAvKiBDU1NDdXJzb3JJbWFnZVZhbHVlLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQUE0QzNB
NzYwQjJCMTY3OTAwMjMzNEEyIC8qIFN0eWxlRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBQTRDM0E3NDBCMkIxNjc5MDAyMzM0QTIgLyog
U3R5bGVFbGVtZW50LmNwcCAqLzsgfTsKIAkJQUE0QzNBNzcwQjJCMTY3OTAwMjMzNEEyIC8qIFN0
eWxlRWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQUE0QzNBNzUwQjJCMTY3OTAwMjMzNEEyIC8qIFN0eWxlRWxlbWVudC5oICovOyB9OwotCQlB
QjAxNERFMzBFNjg5QTQzMDBFMTA0NDUgLyogVGV4dENvbnRyb2xJbm5lckVsZW1lbnRzLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEFCMDE0REUxMEU2
ODlBNDMwMEUxMDQ0NSAvKiBUZXh0Q29udHJvbElubmVyRWxlbWVudHMuY3BwICovOyB9OwotCQlB
QjAxNERFNDBFNjg5QTQzMDBFMTA0NDUgLyogVGV4dENvbnRyb2xJbm5lckVsZW1lbnRzLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBQjAxNERFMjBFNjg5
QTQzMDBFMTA0NDUgLyogVGV4dENvbnRyb2xJbm5lckVsZW1lbnRzLmggKi87IH07CiAJCUFCMjNB
MzI3MDlCQkE3RDAwMDY3Q0M1MyAvKiBCZWZvcmVUZXh0SW5zZXJ0ZWRFdmVudC5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBQjIzQTMyNTA5QkJBN0Qw
MDA2N0NDNTMgLyogQmVmb3JlVGV4dEluc2VydGVkRXZlbnQuY3BwICovOyB9OwogCQlBQjIzQTMy
ODA5QkJBN0QwMDA2N0NDNTMgLyogQmVmb3JlVGV4dEluc2VydGVkRXZlbnQuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEFCMjNBMzI2MDlCQkE3RDAwMDY3
Q0M1MyAvKiBCZWZvcmVUZXh0SW5zZXJ0ZWRFdmVudC5oICovOyB9OwogCQlBQjI0N0E2QzBBRkQ2
MzgzMDAzRkE1RkQgLyogUmVuZGVyU2xpZGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEFCMjQ3QTZBMEFGRDYzODMwMDNGQTVGRCAvKiBSZW5kZXJT
bGlkZXIuY3BwICovOyB9OwpAQCAtNjU3OSw2ICs2NTc5LDggQEAKIAkJMTQyMDExQUUwQTAwMzEx
NzAwODMwM0Y5IC8qIENTU1N0eWxlRGVjbGFyYXRpb24uaWRsICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBh
dGggPSBDU1NTdHlsZURlY2xhcmF0aW9uLmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMTQyMDExQjQwQTAwMzEzMzAwODMwM0Y5IC8qIEpTQ1NTU3R5bGVEZWNsYXJhdGlvbi5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNDU1NTdHlsZURlY2xhcmF0
aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTQyMDExQjUwQTAwMzEzMzAw
ODMwM0Y5IC8qIEpTQ1NTU3R5bGVEZWNsYXJhdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gSlNDU1NTdHlsZURlY2xhcmF0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTE0MkI5N0M3MTMxMzg5NDMwMDhCRUY0QiAvKiBUZXh0Q29udHJvbElubmVyRWxl
bWVudHMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVGV4dENvbnRy
b2xJbm5lckVsZW1lbnRzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMTQyQjk3
QzgxMzEzODk0MzAwOEJFRjRCIC8qIFRleHRDb250cm9sSW5uZXJFbGVtZW50cy5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUZXh0Q29udHJvbElubmVyRWxlbWVudHMuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTQzMkU4NDYwQzUxNDkzODAwQjE1MDBGIC8qIEdD
Q29udHJvbGxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gR0NDb250cm9s
bGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0MzJFODQ4MEM1MTQ5M0YwMEIx
NTAwRiAvKiBHQ0NvbnRyb2xsZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IEdDQ29udHJvbGxlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0
NDlFMjRBMTA3RDRBODQwMEI1NzkzRiAvKiBKU0NhbGxiYWNrRGF0YS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBKU0NhbGxiYWNrRGF0YS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwpAQCAtMTAxNjIsOCArMTAxNjQsNiBAQAogCQlBQTA5NzhFRTBBQkFBNkUxMDA4NzQ0
ODAgLyogQ1NTQ3Vyc29ySW1hZ2VWYWx1ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gQ1NTQ3Vyc29ySW1hZ2VWYWx1ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlBQTRDM0E3NDBCMkIxNjc5MDAyMzM0QTIgLyogU3R5bGVFbGVtZW50LmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTdHlsZUVsZW1lbnQuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlBQTRDM0E3NTBCMkIxNjc5MDAyMzM0QTIgLyogU3R5bGVFbGVt
ZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTdHlsZUVsZW1lbnQuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQUIwMTRERTEwRTY4OUE0MzAwRTEwNDQ1IC8q
IFRleHRDb250cm9sSW5uZXJFbGVtZW50cy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBUZXh0Q29udHJvbElubmVyRWxlbWVudHMuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwotCQlBQjAxNERFMjBFNjg5QTQzMDBFMTA0NDUgLyogVGV4dENvbnRyb2xJbm5l
ckVsZW1lbnRzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRleHRDb250cm9s
SW5uZXJFbGVtZW50cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBQjIzQTMyNTA5
QkJBN0QwMDA2N0NDNTMgLyogQmVmb3JlVGV4dEluc2VydGVkRXZlbnQuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEJlZm9yZVRleHRJbnNlcnRlZEV2ZW50LmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQUIyM0EzMjYwOUJCQTdEMDAwNjdDQzUzIC8q
IEJlZm9yZVRleHRJbnNlcnRlZEV2ZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBCZWZvcmVUZXh0SW5zZXJ0ZWRFdmVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlBQjI0N0E2QTBBRkQ2MzgzMDAzRkE1RkQgLyogUmVuZGVyU2xpZGVyLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZW5kZXJTbGlkZXIuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTMxODAsNiArMTMxODAsOCBAQAogCQkJCUE3RkU4MTlC
MTJGQTY3NzcwMDg1MEMxRSAvKiBQcm9ncmVzc0JhclZhbHVlRWxlbWVudC5oICovLAogCQkJCTQx
NTBGOUYwMTJCNkUwRTcwMDA4Qzg2MCAvKiBTbGlkZXJUaHVtYkVsZW1lbnQuY3BwICovLAogCQkJ
CTQxNTBGOUVGMTJCNkUwRTcwMDA4Qzg2MCAvKiBTbGlkZXJUaHVtYkVsZW1lbnQuaCAqLywKKwkJ
CQkxNDJCOTdDNzEzMTM4OTQzMDA4QkVGNEIgLyogVGV4dENvbnRyb2xJbm5lckVsZW1lbnRzLmNw
cCAqLywKKwkJCQkxNDJCOTdDODEzMTM4OTQzMDA4QkVGNEIgLyogVGV4dENvbnRyb2xJbm5lckVs
ZW1lbnRzLmggKi8sCiAJCQkpOwogCQkJcGF0aCA9IHNoYWRvdzsKIAkJCXNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7CkBAIC0xODg1NCw4ICsxODg1Niw2IEBACiAJCQkJQTdGMzM4QTExMUMwRUZDQTAw
QTMyMEE3IC8qIFNoYWRvd0VsZW1lbnQuY3BwICovLAogCQkJCUE3RjMzOEEyMTFDMEVGQ0EwMEEz
MjBBNyAvKiBTaGFkb3dFbGVtZW50LmggKi8sCiAJCQkJQThDRkYwNEMwQTE1NEYwOTAwMEE0MjM0
IC8qIFRhYmxlTGF5b3V0LmggKi8sCi0JCQkJQUIwMTRERTEwRTY4OUE0MzAwRTEwNDQ1IC8qIFRl
eHRDb250cm9sSW5uZXJFbGVtZW50cy5jcHAgKi8sCi0JCQkJQUIwMTRERTIwRTY4OUE0MzAwRTEw
NDQ1IC8qIFRleHRDb250cm9sSW5uZXJFbGVtZW50cy5oICovLAogCQkJCTM3RkM5NkRBMTEwNEVE
NzEwMDNFMUZBRCAvKiBUcmFpbGluZ0Zsb2F0c1Jvb3RJbmxpbmVCb3guaCAqLywKIAkJCQkwRjUw
MEFCMDBGNTREQjMxMDBFRUY5MjggLyogVHJhbnNmb3JtU3RhdGUuY3BwICovLAogCQkJCTBGNTAw
QUFFMEY1NERCMUIwMEVFRjkyOCAvKiBUcmFuc2Zvcm1TdGF0ZS5oICovLApAQCAtMjIyMTQsNyAr
MjIyMTQsNyBAQAogCQkJCUIyQzNEQTQwMEQwMDZDMUQwMEVGNkYyNiAvKiBUZXh0Q29kZWNVc2Vy
RGVmaW5lZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjJDM0RBNDIwRDAwNkMxRDAwRUY2RjI2IC8q
IFRleHRDb2RlY1VURjE2LmggaW4gSGVhZGVycyAqLywKIAkJCQk5MzQzQ0I4MjEyRjI1RTUxMDAz
M0M1RUUgLyogVGV4dENvZGVjVVRGOC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJQUIwMTRERTQwRTY4
OUE0MzAwRTEwNDQ1IC8qIFRleHRDb250cm9sSW5uZXJFbGVtZW50cy5oIGluIEhlYWRlcnMgKi8s
CisJCQkJMTQyQjk3Q0ExMzEzODk0MzAwOEJFRjRCIC8qIFRleHRDb250cm9sSW5uZXJFbGVtZW50
cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjJDM0RBNDUwRDAwNkMxRDAwRUY2RjI2IC8qIFRleHRE
aXJlY3Rpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTk3QkM4NEI0MTIzNzExODAwMDBDNjE2MSAv
KiBUZXh0RG9jdW1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTk3QkM4NDg0MTIzNkZEOTMwMDBD
NjE2MSAvKiBUZXh0RG9jdW1lbnRQYXJzZXIuaCBpbiBIZWFkZXJzICovLApAQCAtMjQ4OTUsNyAr
MjQ4OTUsNyBAQAogCQkJCUIyQzNEQTNGMEQwMDZDMUQwMEVGNkYyNiAvKiBUZXh0Q29kZWNVc2Vy
RGVmaW5lZC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCMkMzREE0MTBEMDA2QzFEMDBFRjZGMjYg
LyogVGV4dENvZGVjVVRGMTYuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTM0M0NCODExMkYyNUU1
MTAwMzNDNUVFIC8qIFRleHRDb2RlY1VURjguY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJQUIwMTRE
RTMwRTY4OUE0MzAwRTEwNDQ1IC8qIFRleHRDb250cm9sSW5uZXJFbGVtZW50cy5jcHAgaW4gU291
cmNlcyAqLywKKwkJCQkxNDJCOTdDOTEzMTM4OTQzMDA4QkVGNEIgLyogVGV4dENvbnRyb2xJbm5l
ckVsZW1lbnRzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTk3QkM4NEIzMTIzNzExODAwMDBDNjE2
MSAvKiBUZXh0RG9jdW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTdCQzg0ODMxMjM2RkQ5
MzAwMEM2MTYxIC8qIFRleHREb2N1bWVudFBhcnNlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlC
MkMzREE0NjBEMDA2QzFEMDBFRjZGMjYgLyogVGV4dEVuY29kaW5nLmNwcCBpbiBTb3VyY2VzICov
LApJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvVGV4dENvbnRyb2xJbm5lckVsZW1l
bnRzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9UZXh0Q29u
dHJvbElubmVyRWxlbWVudHMuY3BwCShyZXZpc2lvbiA3OTI4NykJKGZyb20gU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1RleHRDb250cm9sSW5uZXJFbGVtZW50cy5jcHA6NzkyODcpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9odG1sL3NoYWRvdy9UZXh0Q29udHJvbElubmVyRWxlbWVudHMuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsNTM1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2LCAy
MDA4LCAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJUZXh0Q29udHJvbElubmVyRWxlbWVudHMuaCIKKworI2lu
Y2x1ZGUgIkJlZm9yZVRleHRJbnNlcnRlZEV2ZW50LmgiCisjaW5jbHVkZSAiRG9jdW1lbnQuaCIK
KyNpbmNsdWRlICJFdmVudEhhbmRsZXIuaCIKKyNpbmNsdWRlICJFdmVudE5hbWVzLmgiCisjaW5j
bHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJIVE1MSW5wdXRFbGVtZW50LmgiCisjaW5jbHVkZSAi
SFRNTE5hbWVzLmgiCisjaW5jbHVkZSAiSFRNTFRleHRBcmVhRWxlbWVudC5oIgorI2luY2x1ZGUg
Ik1vdXNlRXZlbnQuaCIKKyNpbmNsdWRlICJQYWdlLmgiCisjaW5jbHVkZSAiUmVuZGVyTGF5ZXIu
aCIKKyNpbmNsdWRlICJSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuaCIKKyNpbmNsdWRlICJT
Y3JvbGxiYXJUaGVtZS5oIgorI2luY2x1ZGUgIlNwZWVjaElucHV0LmgiCisjaW5jbHVkZSAiU3Bl
ZWNoSW5wdXRFdmVudC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3VzaW5nIG5hbWVzcGFj
ZSBIVE1MTmFtZXM7CisKK2NsYXNzIFJlbmRlclRleHRDb250cm9sSW5uZXJCbG9jayA6IHB1Ymxp
YyBSZW5kZXJCbG9jayB7CitwdWJsaWM6CisgICAgUmVuZGVyVGV4dENvbnRyb2xJbm5lckJsb2Nr
KE5vZGUqIG5vZGUsIGJvb2wgaXNNdWx0aUxpbmUpIDogUmVuZGVyQmxvY2sobm9kZSksIG1fbXVs
dGlMaW5lKGlzTXVsdGlMaW5lKSB7IH0KKworcHJpdmF0ZToKKyAgICB2aXJ0dWFsIGJvb2wgaGFz
TGluZUlmRW1wdHkoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CisgICAgdmlydHVhbCBWaXNpYmxl
UG9zaXRpb24gcG9zaXRpb25Gb3JQb2ludChjb25zdCBJbnRQb2ludCYpOworCisgICAgYm9vbCBt
X211bHRpTGluZTsKK307CisKK1Zpc2libGVQb3NpdGlvbiBSZW5kZXJUZXh0Q29udHJvbElubmVy
QmxvY2s6OnBvc2l0aW9uRm9yUG9pbnQoY29uc3QgSW50UG9pbnQmIHBvaW50KQoreworICAgIElu
dFBvaW50IGNvbnRlbnRzUG9pbnQocG9pbnQpOworCisgICAgLy8gTXVsdGlsaW5lIHRleHQgY29u
dHJvbHMgaGF2ZSB0aGUgc2Nyb2xsIG9uIHNoYWRvd0FuY2VzdG9yTm9kZSwgc28gd2UgbmVlZCB0
byB0YWtlIHRoYXQKKyAgICAvLyBpbnRvIGFjY291bnQgaGVyZS4KKyAgICBpZiAobV9tdWx0aUxp
bmUpIHsKKyAgICAgICAgUmVuZGVyVGV4dENvbnRyb2wqIHJlbmRlcmVyID0gdG9SZW5kZXJUZXh0
Q29udHJvbChub2RlKCktPnNoYWRvd0FuY2VzdG9yTm9kZSgpLT5yZW5kZXJlcigpKTsKKyAgICAg
ICAgaWYgKHJlbmRlcmVyLT5oYXNPdmVyZmxvd0NsaXAoKSkKKyAgICAgICAgICAgIGNvbnRlbnRz
UG9pbnQgKz0gcmVuZGVyZXItPmxheWVyKCktPnNjcm9sbGVkQ29udGVudE9mZnNldCgpOworICAg
IH0KKworICAgIHJldHVybiBSZW5kZXJCbG9jazo6cG9zaXRpb25Gb3JQb2ludChjb250ZW50c1Bv
aW50KTsKK30KKworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUZXh0Q29udHJv
bElubmVyRWxlbWVudDo6VGV4dENvbnRyb2xJbm5lckVsZW1lbnQoRG9jdW1lbnQqIGRvY3VtZW50
LCBIVE1MRWxlbWVudCogc2hhZG93UGFyZW50KQorICAgIDogSFRNTERpdkVsZW1lbnQoZGl2VGFn
LCBkb2N1bWVudCkKK3sKKyAgICBzZXRTaGFkb3dIb3N0KHNoYWRvd1BhcmVudCk7Cit9CisKK1Bh
c3NSZWZQdHI8VGV4dENvbnRyb2xJbm5lckVsZW1lbnQ+IFRleHRDb250cm9sSW5uZXJFbGVtZW50
OjpjcmVhdGUoSFRNTEVsZW1lbnQqIHNoYWRvd1BhcmVudCkKK3sKKyAgICByZXR1cm4gYWRvcHRS
ZWYobmV3IFRleHRDb250cm9sSW5uZXJFbGVtZW50KHNoYWRvd1BhcmVudC0+ZG9jdW1lbnQoKSwg
c2hhZG93UGFyZW50KSk7Cit9CisKK3ZvaWQgVGV4dENvbnRyb2xJbm5lckVsZW1lbnQ6OmF0dGFj
aElubmVyRWxlbWVudChOb2RlKiBwYXJlbnQsIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IHN0eWxl
LCBSZW5kZXJBcmVuYSogYXJlbmEpCit7CisgICAgLy8gV2hlbiBhZGRpbmcgdGhlc2UgZWxlbWVu
dHMsIGNyZWF0ZSB0aGUgcmVuZGVyZXIgJiBzdHlsZSBmaXJzdCBiZWZvcmUgYWRkaW5nIHRvIHRo
ZSBET00uCisgICAgLy8gT3RoZXJ3aXNlLCB0aGUgcmVuZGVyIHRyZWUgd2lsbCBjcmVhdGUgc29t
ZSBhbm9ueW1vdXMgYmxvY2tzIHRoYXQgd2lsbCBtZXNzIHVwIG91ciBsYXlvdXQuCisKKyAgICAv
LyBDcmVhdGUgdGhlIHJlbmRlcmVyIHdpdGggdGhlIHNwZWNpZmllZCBzdHlsZQorICAgIFJlbmRl
ck9iamVjdCogcmVuZGVyZXIgPSBjcmVhdGVSZW5kZXJlcihhcmVuYSwgc3R5bGUuZ2V0KCkpOwor
ICAgIGlmIChyZW5kZXJlcikgeworICAgICAgICBzZXRSZW5kZXJlcihyZW5kZXJlcik7CisgICAg
ICAgIHJlbmRlcmVyLT5zZXRTdHlsZShzdHlsZSk7CisgICAgfQorCisgICAgLy8gU2V0IHRoZXNl
IGV4cGxpY2l0bHkgc2luY2UgdGhpcyBub3JtYWxseSBoYXBwZW5zIGR1cmluZyBhbiBhdHRhY2go
KQorICAgIHNldEF0dGFjaGVkKCk7CisgICAgc2V0SW5Eb2N1bWVudCgpOworCisgICAgLy8gRm9y
IGVsZW1lbnRzIG5vdCB5ZXQgaW4gc2hhZG93IERPTSwgYWRkIHRoZSBub2RlIHRvIHRoZSBET00g
bm9ybWFsbHkuCisgICAgaWYgKCFpc1NoYWRvd1Jvb3QoKSkgeworICAgICAgICAvLyBGSVhNRTog
VGhpcyBjb2RlIHNlZW1zIHZlcnkgd3JvbmcuICBXaHkgYXJlIHdlIG1hZ2ljYWxseSBhZGRpbmcg
fHRoaXN8IHRvIHRoZSBET00gaGVyZT8KKyAgICAgICAgLy8gICAgICAgIFdlIHNob3VsZG4ndCBi
ZSBjYWxsaW5nIHBhcnNlciBBUEkgbWV0aG9kcyBvdXRzaWRlIG9mIHRoZSBwYXJzZXIhCisgICAg
ICAgIHBhcmVudC0+ZGVwcmVjYXRlZFBhcnNlckFkZENoaWxkKHRoaXMpOworICAgIH0KKworICAg
IC8vIEFkZCB0aGUgcmVuZGVyZXIgdG8gdGhlIHJlbmRlciB0cmVlCisgICAgaWYgKHJlbmRlcmVy
KQorICAgICAgICBwYXJlbnQtPnJlbmRlcmVyKCktPmFkZENoaWxkKHJlbmRlcmVyKTsKK30KKwor
dm9pZCBUZXh0Q29udHJvbElubmVyRWxlbWVudDo6ZGV0YWNoKCkKK3sKKyAgICBIVE1MRGl2RWxl
bWVudDo6ZGV0YWNoKCk7CisgICAgLy8gRklYTUU6IFJlbW92ZSBvbmNlIHNoYWRvdyBET00gdXNl
cyBFbGVtZW50OjpzZXRTaGFkb3dSb290KCkuCisgICAgaWYgKHNoYWRvd0hvc3QoKSkKKyAgICAg
ICAgc2V0U2hhZG93SG9zdCgwKTsKK30KKworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQorCitpbmxpbmUgVGV4dENvbnRyb2xJbm5lclRleHRFbGVtZW50OjpUZXh0Q29udHJvbElubmVy
VGV4dEVsZW1lbnQoRG9jdW1lbnQqIGRvY3VtZW50LCBIVE1MRWxlbWVudCogc2hhZG93UGFyZW50
KQorICAgIDogVGV4dENvbnRyb2xJbm5lckVsZW1lbnQoZG9jdW1lbnQsIHNoYWRvd1BhcmVudCkK
K3sKK30KKworUGFzc1JlZlB0cjxUZXh0Q29udHJvbElubmVyVGV4dEVsZW1lbnQ+IFRleHRDb250
cm9sSW5uZXJUZXh0RWxlbWVudDo6Y3JlYXRlKERvY3VtZW50KiBkb2N1bWVudCwgSFRNTEVsZW1l
bnQqIHNoYWRvd1BhcmVudCkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IFRleHRDb250cm9s
SW5uZXJUZXh0RWxlbWVudChkb2N1bWVudCwgc2hhZG93UGFyZW50KSk7Cit9CisKK3ZvaWQgVGV4
dENvbnRyb2xJbm5lclRleHRFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50KiBldmVu
dCkKK3sKKyAgICAvLyBGSVhNRTogSW4gdGhlIGZ1dHVyZSwgd2Ugc2hvdWxkIGFkZCBhIHdheSB0
byBoYXZlIGRlZmF1bHQgZXZlbnQgbGlzdGVuZXJzLgorICAgIC8vIFRoZW4gd2Ugd291bGQgYWRk
IG9uZSB0byB0aGUgdGV4dCBmaWVsZCdzIGlubmVyIGRpdiwgYW5kIHdlIHdvdWxkbid0IG5lZWQg
dGhpcyBzdWJjbGFzcy4KKyAgICAvLyBPciBwb3NzaWJseSB3ZSBjb3VsZCBqdXN0IHVzZSBhIG5v
cm1hbCBldmVudCBsaXN0ZW5lci4KKyAgICBpZiAoZXZlbnQtPmlzQmVmb3JlVGV4dEluc2VydGVk
RXZlbnQoKSB8fCBldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS53ZWJraXRFZGl0YWJsZUNv
bnRlbnRDaGFuZ2VkRXZlbnQpIHsKKyAgICAgICAgTm9kZSogc2hhZG93QW5jZXN0b3IgPSBzaGFk
b3dBbmNlc3Rvck5vZGUoKTsKKyAgICAgICAgLy8gQSBUZXh0Q29udHJvbElubmVyVGV4dEVsZW1l
bnQgY2FuIGJlIGl0cyBvd24gc2hhZG93IGFuY2VzdG9yIGlmIGl0cyBiZWVuIGRldGFjaGVkLCBi
dXQga2VwdCBhbGl2ZSBieSBhbiBFZGl0Q29tbWFuZC4KKyAgICAgICAgLy8gSW4gdGhpcyBjYXNl
LCBhbiB1bmRvL3JlZG8gY2FuIGNhdXNlIGV2ZW50cyB0byBiZSBzZW50IHRvIHRoZSBUZXh0Q29u
dHJvbElubmVyVGV4dEVsZW1lbnQuICAKKyAgICAgICAgLy8gVG8gcHJldmVudCBhbiBpbmZpbml0
ZSBsb29wLCB3ZSBtdXN0IGNoZWNrIGZvciB0aGlzIGNhc2UgYmVmb3JlIHNlbmRpbmcgdGhlIGV2
ZW50IHVwIHRoZSBjaGFpbi4KKyAgICAgICAgaWYgKHNoYWRvd0FuY2VzdG9yICYmIHNoYWRvd0Fu
Y2VzdG9yICE9IHRoaXMpCisgICAgICAgICAgICBzaGFkb3dBbmNlc3Rvci0+ZGVmYXVsdEV2ZW50
SGFuZGxlcihldmVudCk7CisgICAgfQorICAgIGlmICghZXZlbnQtPmRlZmF1bHRIYW5kbGVkKCkp
CisgICAgICAgIEhUTUxEaXZFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKGV2ZW50KTsKK30K
KworUmVuZGVyT2JqZWN0KiBUZXh0Q29udHJvbElubmVyVGV4dEVsZW1lbnQ6OmNyZWF0ZVJlbmRl
cmVyKFJlbmRlckFyZW5hKiBhcmVuYSwgUmVuZGVyU3R5bGUqKQoreworICAgIGJvb2wgbXVsdGlM
aW5lID0gZmFsc2U7CisgICAgTm9kZSogc2hhZG93QW5jZXN0b3IgPSBzaGFkb3dBbmNlc3Rvck5v
ZGUoKTsKKyAgICBpZiAoc2hhZG93QW5jZXN0b3IgJiYgc2hhZG93QW5jZXN0b3ItPnJlbmRlcmVy
KCkpIHsKKyAgICAgICAgQVNTRVJUKHNoYWRvd0FuY2VzdG9yLT5yZW5kZXJlcigpLT5pc1RleHRG
aWVsZCgpIHx8IHNoYWRvd0FuY2VzdG9yLT5yZW5kZXJlcigpLT5pc1RleHRBcmVhKCkpOworICAg
ICAgICBtdWx0aUxpbmUgPSBzaGFkb3dBbmNlc3Rvci0+cmVuZGVyZXIoKS0+aXNUZXh0QXJlYSgp
OworICAgIH0KKyAgICByZXR1cm4gbmV3IChhcmVuYSkgUmVuZGVyVGV4dENvbnRyb2xJbm5lckJs
b2NrKHRoaXMsIG11bHRpTGluZSk7Cit9CisKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KKworaW5saW5lIFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRvbkVsZW1lbnQ6OlNlYXJjaEZpZWxk
UmVzdWx0c0J1dHRvbkVsZW1lbnQoRG9jdW1lbnQqIGRvY3VtZW50KQorICAgIDogVGV4dENvbnRy
b2xJbm5lckVsZW1lbnQoZG9jdW1lbnQpCit7Cit9CisKK1Bhc3NSZWZQdHI8U2VhcmNoRmllbGRS
ZXN1bHRzQnV0dG9uRWxlbWVudD4gU2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uRWxlbWVudDo6Y3Jl
YXRlKERvY3VtZW50KiBkb2N1bWVudCkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IFNlYXJj
aEZpZWxkUmVzdWx0c0J1dHRvbkVsZW1lbnQoZG9jdW1lbnQpKTsKK30KKwordm9pZCBTZWFyY2hG
aWVsZFJlc3VsdHNCdXR0b25FbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50KiBldmVu
dCkKK3sKKyAgICAvLyBPbiBtb3VzZWRvd24sIGJyaW5nIHVwIGEgbWVudSwgaWYgbmVlZGVkCisg
ICAgSFRNTElucHV0RWxlbWVudCogaW5wdXQgPSBzdGF0aWNfY2FzdDxIVE1MSW5wdXRFbGVtZW50
Kj4oc2hhZG93QW5jZXN0b3JOb2RlKCkpOworICAgIGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50
TmFtZXMoKS5tb3VzZWRvd25FdmVudCAmJiBldmVudC0+aXNNb3VzZUV2ZW50KCkgJiYgc3RhdGlj
X2Nhc3Q8TW91c2VFdmVudCo+KGV2ZW50KS0+YnV0dG9uKCkgPT0gTGVmdEJ1dHRvbikgeworICAg
ICAgICBpbnB1dC0+Zm9jdXMoKTsKKyAgICAgICAgaW5wdXQtPnNlbGVjdCgpOworICAgICAgICBS
ZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUqIHJlbmRlcmVyID0gdG9SZW5kZXJUZXh0Q29udHJv
bFNpbmdsZUxpbmUoaW5wdXQtPnJlbmRlcmVyKCkpOworICAgICAgICBpZiAocmVuZGVyZXItPnBv
cHVwSXNWaXNpYmxlKCkpCisgICAgICAgICAgICByZW5kZXJlci0+aGlkZVBvcHVwKCk7CisgICAg
ICAgIGVsc2UgaWYgKGlucHV0LT5tYXhSZXN1bHRzKCkgPiAwKQorICAgICAgICAgICAgcmVuZGVy
ZXItPnNob3dQb3B1cCgpOworICAgICAgICBldmVudC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsKKyAg
ICB9CisKKyAgICBpZiAoIWV2ZW50LT5kZWZhdWx0SGFuZGxlZCgpKQorICAgICAgICBIVE1MRGl2
RWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcihldmVudCk7Cit9CisKKy8vIC0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KKworaW5saW5lIFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uRWxlbWVu
dDo6U2VhcmNoRmllbGRDYW5jZWxCdXR0b25FbGVtZW50KERvY3VtZW50KiBkb2N1bWVudCkKKyAg
ICA6IFRleHRDb250cm9sSW5uZXJFbGVtZW50KGRvY3VtZW50KQorICAgICwgbV9jYXB0dXJpbmco
ZmFsc2UpCit7Cit9CisKK1Bhc3NSZWZQdHI8U2VhcmNoRmllbGRDYW5jZWxCdXR0b25FbGVtZW50
PiBTZWFyY2hGaWVsZENhbmNlbEJ1dHRvbkVsZW1lbnQ6OmNyZWF0ZShEb2N1bWVudCogZG9jdW1l
bnQpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTZWFyY2hGaWVsZENhbmNlbEJ1dHRvbkVs
ZW1lbnQoZG9jdW1lbnQpKTsKK30KKwordm9pZCBTZWFyY2hGaWVsZENhbmNlbEJ1dHRvbkVsZW1l
bnQ6OmRldGFjaCgpCit7CisgICAgaWYgKG1fY2FwdHVyaW5nKSB7CisgICAgICAgIGlmIChGcmFt
ZSogZnJhbWUgPSBkb2N1bWVudCgpLT5mcmFtZSgpKQorICAgICAgICAgICAgZnJhbWUtPmV2ZW50
SGFuZGxlcigpLT5zZXRDYXB0dXJpbmdNb3VzZUV2ZW50c05vZGUoMCk7CisgICAgfQorICAgIFRl
eHRDb250cm9sSW5uZXJFbGVtZW50OjpkZXRhY2goKTsKK30KKworCit2b2lkIFNlYXJjaEZpZWxk
Q2FuY2VsQnV0dG9uRWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCogZXZlbnQpCit7
CisgICAgLy8gSWYgdGhlIGVsZW1lbnQgaXMgdmlzaWJsZSwgb24gbW91c2V1cCwgY2xlYXIgdGhl
IHZhbHVlLCBhbmQgc2V0IHNlbGVjdGlvbgorICAgIFJlZlB0cjxIVE1MSW5wdXRFbGVtZW50PiBp
bnB1dChzdGF0aWNfY2FzdDxIVE1MSW5wdXRFbGVtZW50Kj4oc2hhZG93QW5jZXN0b3JOb2RlKCkp
KTsKKyAgICBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkubW91c2Vkb3duRXZlbnQg
JiYgZXZlbnQtPmlzTW91c2VFdmVudCgpICYmIHN0YXRpY19jYXN0PE1vdXNlRXZlbnQqPihldmVu
dCktPmJ1dHRvbigpID09IExlZnRCdXR0b24pIHsKKyAgICAgICAgaWYgKHJlbmRlcmVyKCkgJiYg
cmVuZGVyZXIoKS0+dmlzaWJsZVRvSGl0VGVzdGluZygpKSB7CisgICAgICAgICAgICBpZiAoRnJh
bWUqIGZyYW1lID0gZG9jdW1lbnQoKS0+ZnJhbWUoKSkgeworICAgICAgICAgICAgICAgIGZyYW1l
LT5ldmVudEhhbmRsZXIoKS0+c2V0Q2FwdHVyaW5nTW91c2VFdmVudHNOb2RlKHRoaXMpOworICAg
ICAgICAgICAgICAgIG1fY2FwdHVyaW5nID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgICAgICBpbnB1dC0+Zm9jdXMoKTsKKyAgICAgICAgaW5wdXQtPnNlbGVjdCgpOworICAg
ICAgICBldmVudC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsKKyAgICB9CisgICAgaWYgKGV2ZW50LT50
eXBlKCkgPT0gZXZlbnROYW1lcygpLm1vdXNldXBFdmVudCAmJiBldmVudC0+aXNNb3VzZUV2ZW50
KCkgJiYgc3RhdGljX2Nhc3Q8TW91c2VFdmVudCo+KGV2ZW50KS0+YnV0dG9uKCkgPT0gTGVmdEJ1
dHRvbikgeworICAgICAgICBpZiAobV9jYXB0dXJpbmcpIHsKKyAgICAgICAgICAgIGlmIChGcmFt
ZSogZnJhbWUgPSBkb2N1bWVudCgpLT5mcmFtZSgpKSB7CisgICAgICAgICAgICAgICAgZnJhbWUt
PmV2ZW50SGFuZGxlcigpLT5zZXRDYXB0dXJpbmdNb3VzZUV2ZW50c05vZGUoMCk7CisgICAgICAg
ICAgICAgICAgbV9jYXB0dXJpbmcgPSBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGlmIChob3ZlcmVkKCkpIHsKKyAgICAgICAgICAgICAgICBTdHJpbmcgb2xkVmFsdWUgPSBpbnB1
dC0+dmFsdWUoKTsKKyAgICAgICAgICAgICAgICBpbnB1dC0+c2V0VmFsdWUoIiIpOworICAgICAg
ICAgICAgICAgIGlmICghb2xkVmFsdWUuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICAgICAgICAg
IHRvUmVuZGVyVGV4dENvbnRyb2woaW5wdXQtPnJlbmRlcmVyKCkpLT5zZXRDaGFuZ2VkU2luY2VM
YXN0Q2hhbmdlRXZlbnQodHJ1ZSk7CisgICAgICAgICAgICAgICAgICAgIGlucHV0LT5kaXNwYXRj
aEZvcm1Db250cm9sSW5wdXRFdmVudCgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICBpbnB1dC0+b25TZWFyY2goKTsKKyAgICAgICAgICAgICAgICBldmVudC0+c2V0RGVmYXVs
dEhhbmRsZWQoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIGlmICgh
ZXZlbnQtPmRlZmF1bHRIYW5kbGVkKCkpCisgICAgICAgIEhUTUxEaXZFbGVtZW50OjpkZWZhdWx0
RXZlbnRIYW5kbGVyKGV2ZW50KTsKK30KKworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQorCitpbmxpbmUgU3BpbkJ1dHRvbkVsZW1lbnQ6OlNwaW5CdXR0b25FbGVtZW50KEhUTUxFbGVt
ZW50KiBzaGFkb3dQYXJlbnQpCisgICAgOiBUZXh0Q29udHJvbElubmVyRWxlbWVudChzaGFkb3dQ
YXJlbnQtPmRvY3VtZW50KCksIHNoYWRvd1BhcmVudCkKKyAgICAsIG1fY2FwdHVyaW5nKGZhbHNl
KQorICAgICwgbV91cERvd25TdGF0ZShJbmRldGVybWluYXRlKQorICAgICwgbV9wcmVzc1N0YXJ0
aW5nU3RhdGUoSW5kZXRlcm1pbmF0ZSkKKyAgICAsIG1fcmVwZWF0aW5nVGltZXIodGhpcywgJlNw
aW5CdXR0b25FbGVtZW50OjpyZXBlYXRpbmdUaW1lckZpcmVkKQoreworfQorCitQYXNzUmVmUHRy
PFNwaW5CdXR0b25FbGVtZW50PiBTcGluQnV0dG9uRWxlbWVudDo6Y3JlYXRlKEhUTUxFbGVtZW50
KiBzaGFkb3dQYXJlbnQpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTcGluQnV0dG9uRWxl
bWVudChzaGFkb3dQYXJlbnQpKTsKK30KKwordm9pZCBTcGluQnV0dG9uRWxlbWVudDo6ZGV0YWNo
KCkKK3sKKyAgICBzdG9wUmVwZWF0aW5nVGltZXIoKTsKKyAgICBpZiAobV9jYXB0dXJpbmcpIHsK
KyAgICAgICAgaWYgKEZyYW1lKiBmcmFtZSA9IGRvY3VtZW50KCktPmZyYW1lKCkpIHsKKyAgICAg
ICAgICAgIGZyYW1lLT5ldmVudEhhbmRsZXIoKS0+c2V0Q2FwdHVyaW5nTW91c2VFdmVudHNOb2Rl
KDApOworICAgICAgICAgICAgbV9jYXB0dXJpbmcgPSBmYWxzZTsKKyAgICAgICAgfQorICAgIH0K
KyAgICBUZXh0Q29udHJvbElubmVyRWxlbWVudDo6ZGV0YWNoKCk7Cit9CisKK3ZvaWQgU3BpbkJ1
dHRvbkVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQqIGV2ZW50KQoreworICAgIGlm
ICghZXZlbnQtPmlzTW91c2VFdmVudCgpKSB7CisgICAgICAgIGlmICghZXZlbnQtPmRlZmF1bHRI
YW5kbGVkKCkpCisgICAgICAgICAgICBIVE1MRGl2RWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxl
cihldmVudCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBSZW5kZXJCb3gqIGJveCA9
IHJlbmRlckJveCgpOworICAgIGlmICghYm94KSB7CisgICAgICAgIGlmICghZXZlbnQtPmRlZmF1
bHRIYW5kbGVkKCkpCisgICAgICAgICAgICBIVE1MRGl2RWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFu
ZGxlcihldmVudCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBSZWZQdHI8SFRNTElu
cHV0RWxlbWVudD4gaW5wdXQoc3RhdGljX2Nhc3Q8SFRNTElucHV0RWxlbWVudCo+KHNoYWRvd0Fu
Y2VzdG9yTm9kZSgpKSk7CisgICAgaWYgKGlucHV0LT5kaXNhYmxlZCgpIHx8IGlucHV0LT5pc1Jl
YWRPbmx5Rm9ybUNvbnRyb2woKSkgeworICAgICAgICBpZiAoIWV2ZW50LT5kZWZhdWx0SGFuZGxl
ZCgpKQorICAgICAgICAgICAgSFRNTERpdkVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIoZXZl
bnQpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgTW91c2VFdmVudCogbW91c2VFdmVu
dCA9IHN0YXRpY19jYXN0PE1vdXNlRXZlbnQqPihldmVudCk7CisgICAgSW50UG9pbnQgbG9jYWwg
PSByb3VuZGVkSW50UG9pbnQoYm94LT5hYnNvbHV0ZVRvTG9jYWwobW91c2VFdmVudC0+YWJzb2x1
dGVMb2NhdGlvbigpLCBmYWxzZSwgdHJ1ZSkpOworICAgIGlmIChtb3VzZUV2ZW50LT50eXBlKCkg
PT0gZXZlbnROYW1lcygpLm1vdXNlZG93bkV2ZW50ICYmIG1vdXNlRXZlbnQtPmJ1dHRvbigpID09
IExlZnRCdXR0b24pIHsKKyAgICAgICAgaWYgKGJveC0+Ym9yZGVyQm94UmVjdCgpLmNvbnRhaW5z
KGxvY2FsKSkgeworICAgICAgICAgICAgLy8gVGhlIGZvbGxvd2luZyBmdW5jdGlvbnMgb2YgSFRN
TElucHV0RWxlbWVudCBtYXkgcnVuIEphdmFTY3JpcHQKKyAgICAgICAgICAgIC8vIGNvZGUgd2hp
Y2ggZGV0YWNoZXMgdGhpcyBzaGFkb3cgbm9kZS4gV2UgbmVlZCB0byB0YWtlIGEgcmVmZXJlbmNl
CisgICAgICAgICAgICAvLyBhbmQgY2hlY2sgcmVuZGVyZXIoKSBhZnRlciBzdWNoIGZ1bmN0aW9u
IGNhbGxzLgorICAgICAgICAgICAgUmVmUHRyPE5vZGU+IHByb3RlY3Rvcih0aGlzKTsKKyAgICAg
ICAgICAgIGlucHV0LT5mb2N1cygpOworICAgICAgICAgICAgaW5wdXQtPnNlbGVjdCgpOworICAg
ICAgICAgICAgaWYgKHJlbmRlcmVyKCkpIHsKKyAgICAgICAgICAgICAgICBpbnB1dC0+c3RlcFVw
RnJvbVJlbmRlcmVyKG1fdXBEb3duU3RhdGUgPT0gVXAgPyAxIDogLTEpOworICAgICAgICAgICAg
ICAgIGlmIChyZW5kZXJlcigpKQorICAgICAgICAgICAgICAgICAgICBzdGFydFJlcGVhdGluZ1Rp
bWVyKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBldmVudC0+c2V0RGVmYXVsdEhhbmRs
ZWQoKTsKKyAgICAgICAgfQorICAgIH0gZWxzZSBpZiAobW91c2VFdmVudC0+dHlwZSgpID09IGV2
ZW50TmFtZXMoKS5tb3VzZXVwRXZlbnQgJiYgbW91c2VFdmVudC0+YnV0dG9uKCkgPT0gTGVmdEJ1
dHRvbikKKyAgICAgICAgc3RvcFJlcGVhdGluZ1RpbWVyKCk7CisgICAgZWxzZSBpZiAoZXZlbnQt
PnR5cGUoKSA9PSBldmVudE5hbWVzKCkubW91c2Vtb3ZlRXZlbnQpIHsKKyAgICAgICAgaWYgKGJv
eC0+Ym9yZGVyQm94UmVjdCgpLmNvbnRhaW5zKGxvY2FsKSkgeworICAgICAgICAgICAgaWYgKCFt
X2NhcHR1cmluZykgeworICAgICAgICAgICAgICAgIGlmIChGcmFtZSogZnJhbWUgPSBkb2N1bWVu
dCgpLT5mcmFtZSgpKSB7CisgICAgICAgICAgICAgICAgICAgIGZyYW1lLT5ldmVudEhhbmRsZXIo
KS0+c2V0Q2FwdHVyaW5nTW91c2VFdmVudHNOb2RlKHRoaXMpOworICAgICAgICAgICAgICAgICAg
ICBtX2NhcHR1cmluZyA9IHRydWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQor
ICAgICAgICAgICAgVXBEb3duU3RhdGUgb2xkVXBEb3duU3RhdGUgPSBtX3VwRG93blN0YXRlOwor
ICAgICAgICAgICAgbV91cERvd25TdGF0ZSA9IGxvY2FsLnkoKSA8IGJveC0+aGVpZ2h0KCkgLyAy
ID8gVXAgOiBEb3duOworICAgICAgICAgICAgaWYgKG1fdXBEb3duU3RhdGUgIT0gb2xkVXBEb3du
U3RhdGUpCisgICAgICAgICAgICAgICAgcmVuZGVyZXIoKS0+cmVwYWludCgpOworICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgaWYgKG1fY2FwdHVyaW5nKSB7CisgICAgICAgICAgICAgICAg
c3RvcFJlcGVhdGluZ1RpbWVyKCk7CisgICAgICAgICAgICAgICAgaWYgKEZyYW1lKiBmcmFtZSA9
IGRvY3VtZW50KCktPmZyYW1lKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgZnJhbWUtPmV2ZW50
SGFuZGxlcigpLT5zZXRDYXB0dXJpbmdNb3VzZUV2ZW50c05vZGUoMCk7CisgICAgICAgICAgICAg
ICAgICAgIG1fY2FwdHVyaW5nID0gZmFsc2U7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgaWYgKCFldmVudC0+ZGVmYXVsdEhhbmRsZWQo
KSkKKyAgICAgICAgSFRNTERpdkVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIoZXZlbnQpOwor
fQorCit2b2lkIFNwaW5CdXR0b25FbGVtZW50OjpzdGFydFJlcGVhdGluZ1RpbWVyKCkKK3sKKyAg
ICBtX3ByZXNzU3RhcnRpbmdTdGF0ZSA9IG1fdXBEb3duU3RhdGU7CisgICAgU2Nyb2xsYmFyVGhl
bWUqIHRoZW1lID0gU2Nyb2xsYmFyVGhlbWU6Om5hdGl2ZVRoZW1lKCk7CisgICAgbV9yZXBlYXRp
bmdUaW1lci5zdGFydCh0aGVtZS0+aW5pdGlhbEF1dG9zY3JvbGxUaW1lckRlbGF5KCksIHRoZW1l
LT5hdXRvc2Nyb2xsVGltZXJEZWxheSgpKTsKK30KKwordm9pZCBTcGluQnV0dG9uRWxlbWVudDo6
c3RvcFJlcGVhdGluZ1RpbWVyKCkKK3sKKyAgICBtX3JlcGVhdGluZ1RpbWVyLnN0b3AoKTsKK30K
Kwordm9pZCBTcGluQnV0dG9uRWxlbWVudDo6cmVwZWF0aW5nVGltZXJGaXJlZChUaW1lcjxTcGlu
QnV0dG9uRWxlbWVudD4qKQoreworICAgIEhUTUxJbnB1dEVsZW1lbnQqIGlucHV0ID0gc3RhdGlj
X2Nhc3Q8SFRNTElucHV0RWxlbWVudCo+KHNoYWRvd0FuY2VzdG9yTm9kZSgpKTsKKyAgICBpZiAo
aW5wdXQtPmRpc2FibGVkKCkgfHwgaW5wdXQtPmlzUmVhZE9ubHlGb3JtQ29udHJvbCgpKQorICAg
ICAgICByZXR1cm47CisgICAgLy8gT24gTWFjIE9TLCBOU1N0ZXBwZXIgdXBkYXRlcyB0aGUgdmFs
dWUgZm9yIHRoZSBidXR0b24gdW5kZXIgdGhlIG1vdXNlCisgICAgLy8gY3Vyc29yIHJlZ2FyZGxl
c3Mgb2YgdGhlIGJ1dHRvbiBwcmVzc2VkIGF0IHRoZSBiZWdpbm5pbmcuIFNvIHRoZQorICAgIC8v
IGZvbGxvd2luZyBjaGVjayBpcyBub3QgbmVlZGVkIGZvciBNYWMgT1MuCisjaWYgIU9TKE1BQ19P
U19YKQorICAgIGlmIChtX3VwRG93blN0YXRlICE9IG1fcHJlc3NTdGFydGluZ1N0YXRlKQorICAg
ICAgICByZXR1cm47CisjZW5kaWYKKyAgICBpbnB1dC0+c3RlcFVwRnJvbVJlbmRlcmVyKG1fdXBE
b3duU3RhdGUgPT0gVXAgPyAxIDogLTEpOworfQorCit2b2lkIFNwaW5CdXR0b25FbGVtZW50Ojpz
ZXRIb3ZlcmVkKGJvb2wgZmxhZykKK3sKKyAgICBpZiAoIWhvdmVyZWQoKSAmJiBmbGFnKQorICAg
ICAgICBtX3VwRG93blN0YXRlID0gSW5kZXRlcm1pbmF0ZTsKKyAgICBUZXh0Q29udHJvbElubmVy
RWxlbWVudDo6c2V0SG92ZXJlZChmbGFnKTsKK30KKworCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCisKKyNpZiBFTkFCTEUoSU5QVVRfU1BFRUNIKQorCitpbmxpbmUgSW5wdXRGaWVs
ZFNwZWVjaEJ1dHRvbkVsZW1lbnQ6OklucHV0RmllbGRTcGVlY2hCdXR0b25FbGVtZW50KEhUTUxF
bGVtZW50KiBzaGFkb3dQYXJlbnQpCisgICAgOiBUZXh0Q29udHJvbElubmVyRWxlbWVudChzaGFk
b3dQYXJlbnQtPmRvY3VtZW50KCksIHNoYWRvd1BhcmVudCkKKyAgICAsIG1fY2FwdHVyaW5nKGZh
bHNlKQorICAgICwgbV9zdGF0ZShJZGxlKQorICAgICwgbV9saXN0ZW5lcklkKGRvY3VtZW50KCkt
PnBhZ2UoKS0+c3BlZWNoSW5wdXQoKS0+cmVnaXN0ZXJMaXN0ZW5lcih0aGlzKSkKK3sKK30KKwor
SW5wdXRGaWVsZFNwZWVjaEJ1dHRvbkVsZW1lbnQ6On5JbnB1dEZpZWxkU3BlZWNoQnV0dG9uRWxl
bWVudCgpCit7CisgICAgU3BlZWNoSW5wdXQqIHNwZWVjaCA9IHNwZWVjaElucHV0KCk7CisgICAg
aWYgKHNwZWVjaCAmJiBtX2xpc3RlbmVySWQpICB7IC8vIENvdWxkIGJlIG51bGwgd2hlbiBwYWdl
IGlzIHVubG9hZGluZy4KKyAgICAgICAgaWYgKG1fc3RhdGUgIT0gSWRsZSkKKyAgICAgICAgICAg
IHNwZWVjaC0+Y2FuY2VsUmVjb2duaXRpb24obV9saXN0ZW5lcklkKTsKKyAgICAgICAgc3BlZWNo
LT51bnJlZ2lzdGVyTGlzdGVuZXIobV9saXN0ZW5lcklkKTsKKyAgICB9Cit9CisKK1Bhc3NSZWZQ
dHI8SW5wdXRGaWVsZFNwZWVjaEJ1dHRvbkVsZW1lbnQ+IElucHV0RmllbGRTcGVlY2hCdXR0b25F
bGVtZW50OjpjcmVhdGUoSFRNTEVsZW1lbnQqIHNoYWRvd1BhcmVudCkKK3sKKyAgICByZXR1cm4g
YWRvcHRSZWYobmV3IElucHV0RmllbGRTcGVlY2hCdXR0b25FbGVtZW50KHNoYWRvd1BhcmVudCkp
OworfQorCit2b2lkIElucHV0RmllbGRTcGVlY2hCdXR0b25FbGVtZW50OjpkZWZhdWx0RXZlbnRI
YW5kbGVyKEV2ZW50KiBldmVudCkKK3sKKyAgICAvLyBGb3IgcHJpdmFjeSByZWFzb25zLCBvbmx5
IGFsbG93IGNsaWNrcyBkaXJlY3RseSBjb21pbmcgZnJvbSB0aGUgdXNlci4KKyAgICBpZiAoIWV2
ZW50LT5mcm9tVXNlckdlc3R1cmUoKSkgeworICAgICAgICBIVE1MRGl2RWxlbWVudDo6ZGVmYXVs
dEV2ZW50SGFuZGxlcihldmVudCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBU
aGUgY2FsbCB0byBmb2N1cygpIGJlbG93IGRpc3BhdGNoZXMgYSBmb2N1cyBldmVudCwgYW5kIGFu
IGV2ZW50IGhhbmRsZXIgaW4gdGhlIHBhZ2UgbWlnaHQKKyAgICAvLyByZW1vdmUgdGhlIGlucHV0
IGVsZW1lbnQgZnJvbSBET00uIFRvIG1ha2Ugc3VyZSBpdCByZW1haW5zIHZhbGlkIHVudGlsIHdl
IGZpbmlzaCBvdXIgd29yaworICAgIC8vIGhlcmUsIHdlIHRha2UgYSB0ZW1wb3JhcnkgcmVmZXJl
bmNlLgorICAgIFJlZlB0cjxIVE1MSW5wdXRFbGVtZW50PiBpbnB1dChzdGF0aWNfY2FzdDxIVE1M
SW5wdXRFbGVtZW50Kj4oc2hhZG93QW5jZXN0b3JOb2RlKCkpKTsKKworICAgIC8vIE9uIG1vdXNl
IGRvd24sIHNlbGVjdCB0aGUgdGV4dCBhbmQgc2V0IGZvY3VzLgorICAgIGlmIChldmVudC0+dHlw
ZSgpID09IGV2ZW50TmFtZXMoKS5tb3VzZWRvd25FdmVudCAmJiBldmVudC0+aXNNb3VzZUV2ZW50
KCkgJiYgc3RhdGljX2Nhc3Q8TW91c2VFdmVudCo+KGV2ZW50KS0+YnV0dG9uKCkgPT0gTGVmdEJ1
dHRvbikgeworICAgICAgICBpZiAocmVuZGVyZXIoKSAmJiByZW5kZXJlcigpLT52aXNpYmxlVG9I
aXRUZXN0aW5nKCkpIHsKKyAgICAgICAgICAgIGlmIChGcmFtZSogZnJhbWUgPSBkb2N1bWVudCgp
LT5mcmFtZSgpKSB7CisgICAgICAgICAgICAgICAgZnJhbWUtPmV2ZW50SGFuZGxlcigpLT5zZXRD
YXB0dXJpbmdNb3VzZUV2ZW50c05vZGUodGhpcyk7CisgICAgICAgICAgICAgICAgbV9jYXB0dXJp
bmcgPSB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIFJlZlB0cjxJbnB1
dEZpZWxkU3BlZWNoQnV0dG9uRWxlbWVudD4gaG9sZFJlZkJ1dHRvbih0aGlzKTsKKyAgICAgICAg
aW5wdXQtPmZvY3VzKCk7CisgICAgICAgIGlucHV0LT5zZWxlY3QoKTsKKyAgICAgICAgZXZlbnQt
PnNldERlZmF1bHRIYW5kbGVkKCk7CisgICAgfQorICAgIC8vIE9uIG1vdXNlIHVwLCByZWxlYXNl
IGNhcHR1cmUgY2xlYW5seS4KKyAgICBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCku
bW91c2V1cEV2ZW50ICYmIGV2ZW50LT5pc01vdXNlRXZlbnQoKSAmJiBzdGF0aWNfY2FzdDxNb3Vz
ZUV2ZW50Kj4oZXZlbnQpLT5idXR0b24oKSA9PSBMZWZ0QnV0dG9uKSB7CisgICAgICAgIGlmICht
X2NhcHR1cmluZyAmJiByZW5kZXJlcigpICYmIHJlbmRlcmVyKCktPnZpc2libGVUb0hpdFRlc3Rp
bmcoKSkgeworICAgICAgICAgICAgaWYgKEZyYW1lKiBmcmFtZSA9IGRvY3VtZW50KCktPmZyYW1l
KCkpIHsKKyAgICAgICAgICAgICAgICBmcmFtZS0+ZXZlbnRIYW5kbGVyKCktPnNldENhcHR1cmlu
Z01vdXNlRXZlbnRzTm9kZSgwKTsKKyAgICAgICAgICAgICAgICBtX2NhcHR1cmluZyA9IGZhbHNl
OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgaWYgKGV2ZW50LT50eXBl
KCkgPT0gZXZlbnROYW1lcygpLmNsaWNrRXZlbnQpIHsKKyAgICAgICAgc3dpdGNoIChtX3N0YXRl
KSB7CisgICAgICAgIGNhc2UgSWRsZTogeworICAgICAgICAgICAgICBBdG9taWNTdHJpbmcgbGFu
Z3VhZ2UgPSBpbnB1dC0+Y29tcHV0ZUluaGVyaXRlZExhbmd1YWdlKCk7CisgICAgICAgICAgICAg
IFN0cmluZyBncmFtbWFyID0gaW5wdXQtPmdldEF0dHJpYnV0ZSh3ZWJraXRncmFtbWFyQXR0cik7
CisgICAgICAgICAgICAgIEludFJlY3QgcmVjdCA9IGlucHV0LT5yZW5kZXJlcigpLT5hYnNvbHV0
ZUJvdW5kaW5nQm94UmVjdCgpOworICAgICAgICAgICAgICBpZiAoc3BlZWNoSW5wdXQoKS0+c3Rh
cnRSZWNvZ25pdGlvbihtX2xpc3RlbmVySWQsIHJlY3QsIGxhbmd1YWdlLCBncmFtbWFyLCBkb2N1
bWVudCgpLT5zZWN1cml0eU9yaWdpbigpKSkKKyAgICAgICAgICAgICAgICAgIHNldFN0YXRlKFJl
Y29yZGluZyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBSZWNvcmRpbmc6CisgICAgICAgICAgICBzcGVlY2hJbnB1dCgpLT5zdG9wUmVjb3JkaW5nKG1f
bGlzdGVuZXJJZCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBSZWNvZ25pemlu
ZzoKKyAgICAgICAgICAgIC8vIE5vdGhpbmcgdG8gZG8gaGVyZSwgd2Ugd2lsbCBjb250aW51ZSB0
byB3YWl0IGZvciByZXN1bHRzLgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAg
ICAgZXZlbnQtPnNldERlZmF1bHRIYW5kbGVkKCk7CisgICAgfQorCisgICAgaWYgKCFldmVudC0+
ZGVmYXVsdEhhbmRsZWQoKSkKKyAgICAgICAgSFRNTERpdkVsZW1lbnQ6OmRlZmF1bHRFdmVudEhh
bmRsZXIoZXZlbnQpOworfQorCit2b2lkIElucHV0RmllbGRTcGVlY2hCdXR0b25FbGVtZW50Ojpz
ZXRTdGF0ZShTcGVlY2hJbnB1dFN0YXRlIHN0YXRlKQoreworICAgIGlmIChtX3N0YXRlICE9IHN0
YXRlKSB7CisgICAgICAgIG1fc3RhdGUgPSBzdGF0ZTsKKyAgICAgICAgc2hhZG93QW5jZXN0b3JO
b2RlKCktPnJlbmRlcmVyKCktPnJlcGFpbnQoKTsKKyAgICB9Cit9CisKK1NwZWVjaElucHV0KiBJ
bnB1dEZpZWxkU3BlZWNoQnV0dG9uRWxlbWVudDo6c3BlZWNoSW5wdXQoKQoreworICAgIHJldHVy
biBkb2N1bWVudCgpLT5wYWdlKCkgPyBkb2N1bWVudCgpLT5wYWdlKCktPnNwZWVjaElucHV0KCkg
OiAwOworfQorCit2b2lkIElucHV0RmllbGRTcGVlY2hCdXR0b25FbGVtZW50OjpkaWRDb21wbGV0
ZVJlY29yZGluZyhpbnQpCit7CisgICAgc2V0U3RhdGUoUmVjb2duaXppbmcpOworfQorCit2b2lk
IElucHV0RmllbGRTcGVlY2hCdXR0b25FbGVtZW50OjpkaWRDb21wbGV0ZVJlY29nbml0aW9uKGlu
dCkKK3sKKyAgICBzZXRTdGF0ZShJZGxlKTsKK30KKwordm9pZCBJbnB1dEZpZWxkU3BlZWNoQnV0
dG9uRWxlbWVudDo6c2V0UmVjb2duaXRpb25SZXN1bHQoaW50LCBjb25zdCBTcGVlY2hJbnB1dFJl
c3VsdEFycmF5JiByZXN1bHRzKQoreworICAgIG1fcmVzdWx0cyA9IHJlc3VsdHM7CisKKyAgICAv
LyBUaGUgY2FsbCB0byBzZXRWYWx1ZSgpIGJlbG93IGRpc3BhdGNoZXMgYW4gZXZlbnQsIGFuZCBh
biBldmVudCBoYW5kbGVyIGluIHRoZSBwYWdlIG1pZ2h0CisgICAgLy8gcmVtb3ZlIHRoZSBpbnB1
dCBlbGVtZW50IGZyb20gRE9NLiBUbyBtYWtlIHN1cmUgaXQgcmVtYWlucyB2YWxpZCB1bnRpbCB3
ZSBmaW5pc2ggb3VyIHdvcmsKKyAgICAvLyBoZXJlLCB3ZSB0YWtlIGEgdGVtcG9yYXJ5IHJlZmVy
ZW5jZS4KKyAgICBSZWZQdHI8SFRNTElucHV0RWxlbWVudD4gaW5wdXQoc3RhdGljX2Nhc3Q8SFRN
TElucHV0RWxlbWVudCo+KHNoYWRvd0FuY2VzdG9yTm9kZSgpKSk7CisgICAgUmVmUHRyPElucHV0
RmllbGRTcGVlY2hCdXR0b25FbGVtZW50PiBob2xkUmVmQnV0dG9uKHRoaXMpOworICAgIGlucHV0
LT5zZXRWYWx1ZShyZXN1bHRzLmlzRW1wdHkoKSA/ICIiIDogcmVzdWx0c1swXS0+dXR0ZXJhbmNl
KCkpOworICAgIGlucHV0LT5kaXNwYXRjaEV2ZW50KFNwZWVjaElucHV0RXZlbnQ6OmNyZWF0ZShl
dmVudE5hbWVzKCkud2Via2l0c3BlZWNoY2hhbmdlRXZlbnQsIHJlc3VsdHMpKTsKKworICAgIC8v
IENoZWNrIGJlZm9yZSBhY2Nlc3NpbmcgdGhlIHJlbmRlcmVyIGFzIHRoZSBhYm92ZSBldmVudCBj
b3VsZCBoYXZlIHBvdGVudGlhbGx5IHR1cm5lZCBvZmYKKyAgICAvLyBzcGVlY2ggaW4gdGhlIGlu
cHV0IGVsZW1lbnQsIGhlbmNlIHJlbW92aW5nIHRoaXMgYnV0dG9uIGFuZCByZW5kZXJlciBmcm9t
IHRoZSBoaWVyYXJjaHkuCisgICAgaWYgKHJlbmRlcmVyKCkpCisgICAgICAgIHJlbmRlcmVyKCkt
PnJlcGFpbnQoKTsKK30KKwordm9pZCBJbnB1dEZpZWxkU3BlZWNoQnV0dG9uRWxlbWVudDo6ZGV0
YWNoKCkKK3sKKyAgICBpZiAobV9jYXB0dXJpbmcpIHsKKyAgICAgICAgaWYgKEZyYW1lKiBmcmFt
ZSA9IGRvY3VtZW50KCktPmZyYW1lKCkpCisgICAgICAgICAgICBmcmFtZS0+ZXZlbnRIYW5kbGVy
KCktPnNldENhcHR1cmluZ01vdXNlRXZlbnRzTm9kZSgwKTsKKyAgICB9CisKKyAgICBpZiAobV9s
aXN0ZW5lcklkKSB7CisgICAgICAgIGlmIChtX3N0YXRlICE9IElkbGUpCisgICAgICAgICAgICBz
cGVlY2hJbnB1dCgpLT5jYW5jZWxSZWNvZ25pdGlvbihtX2xpc3RlbmVySWQpOworICAgICAgICBz
cGVlY2hJbnB1dCgpLT51bnJlZ2lzdGVyTGlzdGVuZXIobV9saXN0ZW5lcklkKTsKKyAgICAgICAg
bV9saXN0ZW5lcklkID0gMDsKKyAgICB9CisKKyAgICBUZXh0Q29udHJvbElubmVyRWxlbWVudDo6
ZGV0YWNoKCk7Cit9CisKKyNlbmRpZiAvLyBFTkFCTEUoSU5QVVRfU1BFRUNIKQorCit9CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9UZXh0Q29udHJvbElubmVyRWxlbWVudHMuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L1RleHRDb250cm9sSW5u
ZXJFbGVtZW50cy5jcHAJKHJldmlzaW9uIDc5Mjg3KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9z
aGFkb3cvVGV4dENvbnRyb2xJbm5lckVsZW1lbnRzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDcs
MzQgKzQ3LDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiB1c2luZyBuYW1lc3BhY2UgSFRNTE5h
bWVzOwogCi1jbGFzcyBSZW5kZXJUZXh0Q29udHJvbElubmVyQmxvY2sgOiBwdWJsaWMgUmVuZGVy
QmxvY2sgewotcHVibGljOgotICAgIFJlbmRlclRleHRDb250cm9sSW5uZXJCbG9jayhOb2RlKiBu
b2RlLCBib29sIGlzTXVsdGlMaW5lKSA6IFJlbmRlckJsb2NrKG5vZGUpLCBtX211bHRpTGluZShp
c011bHRpTGluZSkgeyB9Ci0KLXByaXZhdGU6Ci0gICAgdmlydHVhbCBib29sIGhhc0xpbmVJZkVt
cHR5KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQotICAgIHZpcnR1YWwgVmlzaWJsZVBvc2l0aW9u
IHBvc2l0aW9uRm9yUG9pbnQoY29uc3QgSW50UG9pbnQmKTsKLQotICAgIGJvb2wgbV9tdWx0aUxp
bmU7Ci19OwotCi1WaXNpYmxlUG9zaXRpb24gUmVuZGVyVGV4dENvbnRyb2xJbm5lckJsb2NrOjpw
b3NpdGlvbkZvclBvaW50KGNvbnN0IEludFBvaW50JiBwb2ludCkKLXsKLSAgICBJbnRQb2ludCBj
b250ZW50c1BvaW50KHBvaW50KTsKLQotICAgIC8vIE11bHRpbGluZSB0ZXh0IGNvbnRyb2xzIGhh
dmUgdGhlIHNjcm9sbCBvbiBzaGFkb3dBbmNlc3Rvck5vZGUsIHNvIHdlIG5lZWQgdG8gdGFrZSB0
aGF0Ci0gICAgLy8gaW50byBhY2NvdW50IGhlcmUuCi0gICAgaWYgKG1fbXVsdGlMaW5lKSB7Ci0g
ICAgICAgIFJlbmRlclRleHRDb250cm9sKiByZW5kZXJlciA9IHRvUmVuZGVyVGV4dENvbnRyb2wo
bm9kZSgpLT5zaGFkb3dBbmNlc3Rvck5vZGUoKS0+cmVuZGVyZXIoKSk7Ci0gICAgICAgIGlmIChy
ZW5kZXJlci0+aGFzT3ZlcmZsb3dDbGlwKCkpCi0gICAgICAgICAgICBjb250ZW50c1BvaW50ICs9
IHJlbmRlcmVyLT5sYXllcigpLT5zY3JvbGxlZENvbnRlbnRPZmZzZXQoKTsKLSAgICB9Ci0KLSAg
ICByZXR1cm4gUmVuZGVyQmxvY2s6OnBvc2l0aW9uRm9yUG9pbnQoY29udGVudHNQb2ludCk7Ci19
Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQogVGV4dENvbnRyb2xJbm5lckVs
ZW1lbnQ6OlRleHRDb250cm9sSW5uZXJFbGVtZW50KERvY3VtZW50KiBkb2N1bWVudCwgSFRNTEVs
ZW1lbnQqIHNoYWRvd1BhcmVudCkKICAgICA6IEhUTUxEaXZFbGVtZW50KGRpdlRhZywgZG9jdW1l
bnQpCiB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9UZXh0Q29udHJvbElubmVy
RWxlbWVudHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9UZXh0
Q29udHJvbElubmVyRWxlbWVudHMuaAkocmV2aXNpb24gNzkyODcpCShmcm9tIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9UZXh0Q29udHJvbElubmVyRWxlbWVudHMuaDo3OTI4NykKKysrIFNvdXJj
ZS9XZWJDb3JlL2h0bWwvc2hhZG93L1RleHRDb250cm9sSW5uZXJFbGVtZW50cy5oCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsMTU4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA4
LCAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworIAorI2lmbmRlZiBU
ZXh0Q29udHJvbElubmVyRWxlbWVudHNfaAorI2RlZmluZSBUZXh0Q29udHJvbElubmVyRWxlbWVu
dHNfaAorCisjaW5jbHVkZSAiSFRNTERpdkVsZW1lbnQuaCIKKyNpbmNsdWRlICJTcGVlY2hJbnB1
dExpc3RlbmVyLmgiCisjaW5jbHVkZSAiVGltZXIuaCIKKyNpbmNsdWRlIDx3dGYvRm9yd2FyZC5o
PgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFNwZWVjaElucHV0OworCitjbGFzcyBU
ZXh0Q29udHJvbElubmVyRWxlbWVudCA6IHB1YmxpYyBIVE1MRGl2RWxlbWVudCB7CitwdWJsaWM6
CisgICAgc3RhdGljIFBhc3NSZWZQdHI8VGV4dENvbnRyb2xJbm5lckVsZW1lbnQ+IGNyZWF0ZShI
VE1MRWxlbWVudCogc2hhZG93UGFyZW50KTsKKyAgICB2aXJ0dWFsIHZvaWQgZGV0YWNoKCk7CisK
KyAgICB2b2lkIGF0dGFjaElubmVyRWxlbWVudChOb2RlKiwgUGFzc1JlZlB0cjxSZW5kZXJTdHls
ZT4sIFJlbmRlckFyZW5hKik7CisKK3Byb3RlY3RlZDoKKyAgICBUZXh0Q29udHJvbElubmVyRWxl
bWVudChEb2N1bWVudCosIEhUTUxFbGVtZW50KiBzaGFkb3dQYXJlbnQgPSAwKTsKKworcHJpdmF0
ZToKKyAgICB2aXJ0dWFsIGJvb2wgaXNNb3VzZUZvY3VzYWJsZSgpIGNvbnN0IHsgcmV0dXJuIGZh
bHNlOyB9Cit9OworCitjbGFzcyBUZXh0Q29udHJvbElubmVyVGV4dEVsZW1lbnQgOiBwdWJsaWMg
VGV4dENvbnRyb2xJbm5lckVsZW1lbnQgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRy
PFRleHRDb250cm9sSW5uZXJUZXh0RWxlbWVudD4gY3JlYXRlKERvY3VtZW50KiwgSFRNTEVsZW1l
bnQqIHNoYWRvd1BhcmVudCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgZGVmYXVsdEV2ZW50SGFuZGxl
cihFdmVudCopOworCitwcml2YXRlOgorICAgIFRleHRDb250cm9sSW5uZXJUZXh0RWxlbWVudChE
b2N1bWVudCosIEhUTUxFbGVtZW50KiBzaGFkb3dQYXJlbnQpOworICAgIHZpcnR1YWwgUmVuZGVy
T2JqZWN0KiBjcmVhdGVSZW5kZXJlcihSZW5kZXJBcmVuYSosIFJlbmRlclN0eWxlKik7ICAKK307
CisKK2NsYXNzIFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRvbkVsZW1lbnQgOiBwdWJsaWMgVGV4dENv
bnRyb2xJbm5lckVsZW1lbnQgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNlYXJj
aEZpZWxkUmVzdWx0c0J1dHRvbkVsZW1lbnQ+IGNyZWF0ZShEb2N1bWVudCopOworCisgICAgdmly
dHVhbCB2b2lkIGRlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQqKTsKKworcHJpdmF0ZToKKyAgICBT
ZWFyY2hGaWVsZFJlc3VsdHNCdXR0b25FbGVtZW50KERvY3VtZW50Kik7Cit9OworCitjbGFzcyBT
ZWFyY2hGaWVsZENhbmNlbEJ1dHRvbkVsZW1lbnQgOiBwdWJsaWMgVGV4dENvbnRyb2xJbm5lckVs
ZW1lbnQgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNlYXJjaEZpZWxkQ2FuY2Vs
QnV0dG9uRWxlbWVudD4gY3JlYXRlKERvY3VtZW50Kik7CisKKyAgICB2aXJ0dWFsIHZvaWQgZGVm
YXVsdEV2ZW50SGFuZGxlcihFdmVudCopOworCitwcml2YXRlOgorICAgIFNlYXJjaEZpZWxkQ2Fu
Y2VsQnV0dG9uRWxlbWVudChEb2N1bWVudCopOworCisgICAgdmlydHVhbCB2b2lkIGRldGFjaCgp
OworCisgICAgYm9vbCBtX2NhcHR1cmluZzsKK307CisKK2NsYXNzIFNwaW5CdXR0b25FbGVtZW50
IDogcHVibGljIFRleHRDb250cm9sSW5uZXJFbGVtZW50IHsKK3B1YmxpYzoKKyAgICBlbnVtIFVw
RG93blN0YXRlIHsKKyAgICAgICAgSW5kZXRlcm1pbmF0ZSwgLy8gSG92ZXJlZCwgYnV0IHRoZSBl
dmVudCBpcyBub3QgaGFuZGxlZC4KKyAgICAgICAgRG93biwKKyAgICAgICAgVXAsCisgICAgfTsK
KworICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNwaW5CdXR0b25FbGVtZW50PiBjcmVhdGUoSFRNTEVs
ZW1lbnQqKTsKKyAgICBVcERvd25TdGF0ZSB1cERvd25TdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1f
dXBEb3duU3RhdGU7IH0KKworcHJpdmF0ZToKKyAgICBTcGluQnV0dG9uRWxlbWVudChIVE1MRWxl
bWVudCopOworCisgICAgdmlydHVhbCB2b2lkIGRldGFjaCgpOworICAgIHZpcnR1YWwgYm9vbCBp
c1NwaW5CdXR0b25FbGVtZW50KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQorICAgIC8vIEZJWE1F
OiBzaGFkb3dBbmNlc3Rvck5vZGUoKSBzaG91bGQgYmUgY29uc3QuCisgICAgdmlydHVhbCBib29s
IGlzRW5hYmxlZEZvcm1Db250cm9sKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8RWxlbWVu
dCo+KGNvbnN0X2Nhc3Q8U3BpbkJ1dHRvbkVsZW1lbnQqPih0aGlzKS0+c2hhZG93QW5jZXN0b3JO
b2RlKCkpLT5pc0VuYWJsZWRGb3JtQ29udHJvbCgpOyB9CisgICAgdmlydHVhbCBib29sIGlzUmVh
ZE9ubHlGb3JtQ29udHJvbCgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PEVsZW1lbnQqPihj
b25zdF9jYXN0PFNwaW5CdXR0b25FbGVtZW50Kj4odGhpcyktPnNoYWRvd0FuY2VzdG9yTm9kZSgp
KS0+aXNSZWFkT25seUZvcm1Db250cm9sKCk7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZGVmYXVsdEV2
ZW50SGFuZGxlcihFdmVudCopOworICAgIHZvaWQgc3RhcnRSZXBlYXRpbmdUaW1lcigpOworICAg
IHZvaWQgc3RvcFJlcGVhdGluZ1RpbWVyKCk7CisgICAgdm9pZCByZXBlYXRpbmdUaW1lckZpcmVk
KFRpbWVyPFNwaW5CdXR0b25FbGVtZW50PiopOworICAgIHZpcnR1YWwgdm9pZCBzZXRIb3ZlcmVk
KGJvb2wgPSB0cnVlKTsKKworICAgIGJvb2wgbV9jYXB0dXJpbmc7CisgICAgVXBEb3duU3RhdGUg
bV91cERvd25TdGF0ZTsKKyAgICBVcERvd25TdGF0ZSBtX3ByZXNzU3RhcnRpbmdTdGF0ZTsKKyAg
ICBUaW1lcjxTcGluQnV0dG9uRWxlbWVudD4gbV9yZXBlYXRpbmdUaW1lcjsKK307CisKKyNpZiBF
TkFCTEUoSU5QVVRfU1BFRUNIKQorCitjbGFzcyBJbnB1dEZpZWxkU3BlZWNoQnV0dG9uRWxlbWVu
dAorICAgIDogcHVibGljIFRleHRDb250cm9sSW5uZXJFbGVtZW50LAorICAgICAgcHVibGljIFNw
ZWVjaElucHV0TGlzdGVuZXIgeworcHVibGljOgorICAgIGVudW0gU3BlZWNoSW5wdXRTdGF0ZSB7
CisgICAgICAgIElkbGUsCisgICAgICAgIFJlY29yZGluZywKKyAgICAgICAgUmVjb2duaXppbmcs
CisgICAgfTsKKworICAgIHN0YXRpYyBQYXNzUmVmUHRyPElucHV0RmllbGRTcGVlY2hCdXR0b25F
bGVtZW50PiBjcmVhdGUoSFRNTEVsZW1lbnQqKTsKKyAgICB2aXJ0dWFsIH5JbnB1dEZpZWxkU3Bl
ZWNoQnV0dG9uRWxlbWVudCgpOworCisgICAgdmlydHVhbCB2b2lkIGRldGFjaCgpOworICAgIHZp
cnR1YWwgdm9pZCBkZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50Kik7CisgICAgU3BlZWNoSW5wdXRT
dGF0ZSBzdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGU7IH0KKworICAgIC8vIFNwZWVjaElu
cHV0TGlzdGVuZXIgbWV0aG9kcy4KKyAgICB2b2lkIGRpZENvbXBsZXRlUmVjb3JkaW5nKGludCk7
CisgICAgdm9pZCBkaWRDb21wbGV0ZVJlY29nbml0aW9uKGludCk7CisgICAgdm9pZCBzZXRSZWNv
Z25pdGlvblJlc3VsdChpbnQsIGNvbnN0IFNwZWVjaElucHV0UmVzdWx0QXJyYXkmKTsKKworcHJp
dmF0ZToKKyAgICBJbnB1dEZpZWxkU3BlZWNoQnV0dG9uRWxlbWVudChIVE1MRWxlbWVudCopOwor
ICAgIFNwZWVjaElucHV0KiBzcGVlY2hJbnB1dCgpOworICAgIHZvaWQgc2V0U3RhdGUoU3BlZWNo
SW5wdXRTdGF0ZSBzdGF0ZSk7CisKKyAgICBib29sIG1fY2FwdHVyaW5nOworICAgIFNwZWVjaElu
cHV0U3RhdGUgbV9zdGF0ZTsKKyAgICBpbnQgbV9saXN0ZW5lcklkOworICAgIFNwZWVjaElucHV0
UmVzdWx0QXJyYXkgbV9yZXN1bHRzOworfTsKKworI2VuZGlmIC8vIEVOQUJMRShJTlBVVF9TUEVF
Q0gpCisKK30gLy8gbmFtZXNwYWNlCisKKyNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5jcHAJKHJl
dmlzaW9uIDc5Mjg3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250
cm9sU2luZ2xlTGluZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUxLDYgKzUxLDIzIEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAogdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIAorVmlzaWJsZVBv
c2l0aW9uIFJlbmRlclRleHRDb250cm9sSW5uZXJCbG9jazo6cG9zaXRpb25Gb3JQb2ludChjb25z
dCBJbnRQb2ludCYgcG9pbnQpCit7CisgICAgSW50UG9pbnQgY29udGVudHNQb2ludChwb2ludCk7
CisKKyAgICAvLyBNdWx0aWxpbmUgdGV4dCBjb250cm9scyBoYXZlIHRoZSBzY3JvbGwgb24gc2hh
ZG93QW5jZXN0b3JOb2RlLCBzbyB3ZSBuZWVkIHRvIHRha2UgdGhhdAorICAgIC8vIGludG8gYWNj
b3VudCBoZXJlLgorICAgIGlmIChtX211bHRpTGluZSkgeworICAgICAgICBSZW5kZXJUZXh0Q29u
dHJvbCogcmVuZGVyZXIgPSB0b1JlbmRlclRleHRDb250cm9sKG5vZGUoKS0+c2hhZG93QW5jZXN0
b3JOb2RlKCktPnJlbmRlcmVyKCkpOworICAgICAgICBpZiAocmVuZGVyZXItPmhhc092ZXJmbG93
Q2xpcCgpKQorICAgICAgICAgICAgY29udGVudHNQb2ludCArPSByZW5kZXJlci0+bGF5ZXIoKS0+
c2Nyb2xsZWRDb250ZW50T2Zmc2V0KCk7CisgICAgfQorCisgICAgcmV0dXJuIFJlbmRlckJsb2Nr
Ojpwb3NpdGlvbkZvclBvaW50KGNvbnRlbnRzUG9pbnQpOworfQorCisvLyAtLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCisKIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6UmVuZGVyVGV4
dENvbnRyb2xTaW5nbGVMaW5lKE5vZGUqIG5vZGUsIGJvb2wgcGxhY2Vob2xkZXJWaXNpYmxlKQog
ICAgIDogUmVuZGVyVGV4dENvbnRyb2wobm9kZSwgcGxhY2Vob2xkZXJWaXNpYmxlKQogICAgICwg
bV9zZWFyY2hQb3B1cElzVmlzaWJsZShmYWxzZSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmgJKHJldmlzaW9u
IDc5Mjg3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sU2lu
Z2xlTGluZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNzQsNiArMTc0LDE5IEBAIGlubGluZSBSZW5k
ZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUqIHRvUmUKIC8vIFRoaXMgd2lsbCBjYXRjaCBhbnlvbmUg
ZG9pbmcgYW4gdW5uZWNlc3NhcnkgY2FzdC4KIHZvaWQgdG9SZW5kZXJUZXh0Q29udHJvbFNpbmds
ZUxpbmUoY29uc3QgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lKik7CiAKKy8vIC0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KKworY2xhc3MgUmVuZGVyVGV4dENvbnRyb2xJbm5lckJsb2Nr
IDogcHVibGljIFJlbmRlckJsb2NrIHsKK3B1YmxpYzoKKyAgICBSZW5kZXJUZXh0Q29udHJvbElu
bmVyQmxvY2soTm9kZSogbm9kZSwgYm9vbCBpc011bHRpTGluZSkgOiBSZW5kZXJCbG9jayhub2Rl
KSwgbV9tdWx0aUxpbmUoaXNNdWx0aUxpbmUpIHsgfQorCitwcml2YXRlOgorICAgIHZpcnR1YWwg
Ym9vbCBoYXNMaW5lSWZFbXB0eSgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KKyAgICB2aXJ0dWFs
IFZpc2libGVQb3NpdGlvbiBwb3NpdGlvbkZvclBvaW50KGNvbnN0IEludFBvaW50Jik7CisKKyAg
ICBib29sIG1fbXVsdGlMaW5lOworfTsKKwogfQogCiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9UZXh0Q29udHJvbElubmVyRWxlbWVudHMuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0Q29udHJvbElubmVyRWxlbWVudHMuY3BwCShy
ZXZpc2lvbiA3OTI4NykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0Q29udHJvbElu
bmVyRWxlbWVudHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUzNSArMCwwIEBACi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDA2LCAyMDA4LCAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
Q09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBD
T01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJUZXh0Q29udHJvbElu
bmVyRWxlbWVudHMuaCIKLQotI2luY2x1ZGUgIkJlZm9yZVRleHRJbnNlcnRlZEV2ZW50LmgiCi0j
aW5jbHVkZSAiRG9jdW1lbnQuaCIKLSNpbmNsdWRlICJFdmVudEhhbmRsZXIuaCIKLSNpbmNsdWRl
ICJFdmVudE5hbWVzLmgiCi0jaW5jbHVkZSAiRnJhbWUuaCIKLSNpbmNsdWRlICJIVE1MSW5wdXRF
bGVtZW50LmgiCi0jaW5jbHVkZSAiSFRNTE5hbWVzLmgiCi0jaW5jbHVkZSAiSFRNTFRleHRBcmVh
RWxlbWVudC5oIgotI2luY2x1ZGUgIk1vdXNlRXZlbnQuaCIKLSNpbmNsdWRlICJQYWdlLmgiCi0j
aW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCIKLSNpbmNsdWRlICJSZW5kZXJUZXh0Q29udHJvbFNpbmds
ZUxpbmUuaCIKLSNpbmNsdWRlICJTY3JvbGxiYXJUaGVtZS5oIgotI2luY2x1ZGUgIlNwZWVjaElu
cHV0LmgiCi0jaW5jbHVkZSAiU3BlZWNoSW5wdXRFdmVudC5oIgotCi1uYW1lc3BhY2UgV2ViQ29y
ZSB7Ci0KLXVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7Ci0KLWNsYXNzIFJlbmRlclRleHRDb250
cm9sSW5uZXJCbG9jayA6IHB1YmxpYyBSZW5kZXJCbG9jayB7Ci1wdWJsaWM6Ci0gICAgUmVuZGVy
VGV4dENvbnRyb2xJbm5lckJsb2NrKE5vZGUqIG5vZGUsIGJvb2wgaXNNdWx0aUxpbmUpIDogUmVu
ZGVyQmxvY2sobm9kZSksIG1fbXVsdGlMaW5lKGlzTXVsdGlMaW5lKSB7IH0KLQotcHJpdmF0ZToK
LSAgICB2aXJ0dWFsIGJvb2wgaGFzTGluZUlmRW1wdHkoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9
Ci0gICAgdmlydHVhbCBWaXNpYmxlUG9zaXRpb24gcG9zaXRpb25Gb3JQb2ludChjb25zdCBJbnRQ
b2ludCYpOwotCi0gICAgYm9vbCBtX211bHRpTGluZTsKLX07Ci0KLVZpc2libGVQb3NpdGlvbiBS
ZW5kZXJUZXh0Q29udHJvbElubmVyQmxvY2s6OnBvc2l0aW9uRm9yUG9pbnQoY29uc3QgSW50UG9p
bnQmIHBvaW50KQotewotICAgIEludFBvaW50IGNvbnRlbnRzUG9pbnQocG9pbnQpOwotCi0gICAg
Ly8gTXVsdGlsaW5lIHRleHQgY29udHJvbHMgaGF2ZSB0aGUgc2Nyb2xsIG9uIHNoYWRvd0FuY2Vz
dG9yTm9kZSwgc28gd2UgbmVlZCB0byB0YWtlIHRoYXQKLSAgICAvLyBpbnRvIGFjY291bnQgaGVy
ZS4KLSAgICBpZiAobV9tdWx0aUxpbmUpIHsKLSAgICAgICAgUmVuZGVyVGV4dENvbnRyb2wqIHJl
bmRlcmVyID0gdG9SZW5kZXJUZXh0Q29udHJvbChub2RlKCktPnNoYWRvd0FuY2VzdG9yTm9kZSgp
LT5yZW5kZXJlcigpKTsKLSAgICAgICAgaWYgKHJlbmRlcmVyLT5oYXNPdmVyZmxvd0NsaXAoKSkK
LSAgICAgICAgICAgIGNvbnRlbnRzUG9pbnQgKz0gcmVuZGVyZXItPmxheWVyKCktPnNjcm9sbGVk
Q29udGVudE9mZnNldCgpOwotICAgIH0KLQotICAgIHJldHVybiBSZW5kZXJCbG9jazo6cG9zaXRp
b25Gb3JQb2ludChjb250ZW50c1BvaW50KTsKLX0KLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQotCi1UZXh0Q29udHJvbElubmVyRWxlbWVudDo6VGV4dENvbnRyb2xJbm5lckVsZW1l
bnQoRG9jdW1lbnQqIGRvY3VtZW50LCBIVE1MRWxlbWVudCogc2hhZG93UGFyZW50KQotICAgIDog
SFRNTERpdkVsZW1lbnQoZGl2VGFnLCBkb2N1bWVudCkKLXsKLSAgICBzZXRTaGFkb3dIb3N0KHNo
YWRvd1BhcmVudCk7Ci19Ci0KLVBhc3NSZWZQdHI8VGV4dENvbnRyb2xJbm5lckVsZW1lbnQ+IFRl
eHRDb250cm9sSW5uZXJFbGVtZW50OjpjcmVhdGUoSFRNTEVsZW1lbnQqIHNoYWRvd1BhcmVudCkK
LXsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IFRleHRDb250cm9sSW5uZXJFbGVtZW50KHNoYWRv
d1BhcmVudC0+ZG9jdW1lbnQoKSwgc2hhZG93UGFyZW50KSk7Ci19Ci0KLXZvaWQgVGV4dENvbnRy
b2xJbm5lckVsZW1lbnQ6OmF0dGFjaElubmVyRWxlbWVudChOb2RlKiBwYXJlbnQsIFBhc3NSZWZQ
dHI8UmVuZGVyU3R5bGU+IHN0eWxlLCBSZW5kZXJBcmVuYSogYXJlbmEpCi17Ci0gICAgLy8gV2hl
biBhZGRpbmcgdGhlc2UgZWxlbWVudHMsIGNyZWF0ZSB0aGUgcmVuZGVyZXIgJiBzdHlsZSBmaXJz
dCBiZWZvcmUgYWRkaW5nIHRvIHRoZSBET00uCi0gICAgLy8gT3RoZXJ3aXNlLCB0aGUgcmVuZGVy
IHRyZWUgd2lsbCBjcmVhdGUgc29tZSBhbm9ueW1vdXMgYmxvY2tzIHRoYXQgd2lsbCBtZXNzIHVw
IG91ciBsYXlvdXQuCi0KLSAgICAvLyBDcmVhdGUgdGhlIHJlbmRlcmVyIHdpdGggdGhlIHNwZWNp
ZmllZCBzdHlsZQotICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBjcmVhdGVSZW5kZXJlcihh
cmVuYSwgc3R5bGUuZ2V0KCkpOwotICAgIGlmIChyZW5kZXJlcikgewotICAgICAgICBzZXRSZW5k
ZXJlcihyZW5kZXJlcik7Ci0gICAgICAgIHJlbmRlcmVyLT5zZXRTdHlsZShzdHlsZSk7Ci0gICAg
fQotCi0gICAgLy8gU2V0IHRoZXNlIGV4cGxpY2l0bHkgc2luY2UgdGhpcyBub3JtYWxseSBoYXBw
ZW5zIGR1cmluZyBhbiBhdHRhY2goKQotICAgIHNldEF0dGFjaGVkKCk7Ci0gICAgc2V0SW5Eb2N1
bWVudCgpOwotCi0gICAgLy8gRm9yIGVsZW1lbnRzIG5vdCB5ZXQgaW4gc2hhZG93IERPTSwgYWRk
IHRoZSBub2RlIHRvIHRoZSBET00gbm9ybWFsbHkuCi0gICAgaWYgKCFpc1NoYWRvd1Jvb3QoKSkg
ewotICAgICAgICAvLyBGSVhNRTogVGhpcyBjb2RlIHNlZW1zIHZlcnkgd3JvbmcuICBXaHkgYXJl
IHdlIG1hZ2ljYWxseSBhZGRpbmcgfHRoaXN8IHRvIHRoZSBET00gaGVyZT8KLSAgICAgICAgLy8g
ICAgICAgIFdlIHNob3VsZG4ndCBiZSBjYWxsaW5nIHBhcnNlciBBUEkgbWV0aG9kcyBvdXRzaWRl
IG9mIHRoZSBwYXJzZXIhCi0gICAgICAgIHBhcmVudC0+ZGVwcmVjYXRlZFBhcnNlckFkZENoaWxk
KHRoaXMpOwotICAgIH0KLQotICAgIC8vIEFkZCB0aGUgcmVuZGVyZXIgdG8gdGhlIHJlbmRlciB0
cmVlCi0gICAgaWYgKHJlbmRlcmVyKQotICAgICAgICBwYXJlbnQtPnJlbmRlcmVyKCktPmFkZENo
aWxkKHJlbmRlcmVyKTsKLX0KLQotdm9pZCBUZXh0Q29udHJvbElubmVyRWxlbWVudDo6ZGV0YWNo
KCkKLXsKLSAgICBIVE1MRGl2RWxlbWVudDo6ZGV0YWNoKCk7Ci0gICAgLy8gRklYTUU6IFJlbW92
ZSBvbmNlIHNoYWRvdyBET00gdXNlcyBFbGVtZW50OjpzZXRTaGFkb3dSb290KCkuCi0gICAgaWYg
KHNoYWRvd0hvc3QoKSkKLSAgICAgICAgc2V0U2hhZG93SG9zdCgwKTsKLX0KLQotLy8gLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1pbmxpbmUgVGV4dENvbnRyb2xJbm5lclRleHRFbGVt
ZW50OjpUZXh0Q29udHJvbElubmVyVGV4dEVsZW1lbnQoRG9jdW1lbnQqIGRvY3VtZW50LCBIVE1M
RWxlbWVudCogc2hhZG93UGFyZW50KQotICAgIDogVGV4dENvbnRyb2xJbm5lckVsZW1lbnQoZG9j
dW1lbnQsIHNoYWRvd1BhcmVudCkKLXsKLX0KLQotUGFzc1JlZlB0cjxUZXh0Q29udHJvbElubmVy
VGV4dEVsZW1lbnQ+IFRleHRDb250cm9sSW5uZXJUZXh0RWxlbWVudDo6Y3JlYXRlKERvY3VtZW50
KiBkb2N1bWVudCwgSFRNTEVsZW1lbnQqIHNoYWRvd1BhcmVudCkKLXsKLSAgICByZXR1cm4gYWRv
cHRSZWYobmV3IFRleHRDb250cm9sSW5uZXJUZXh0RWxlbWVudChkb2N1bWVudCwgc2hhZG93UGFy
ZW50KSk7Ci19Ci0KLXZvaWQgVGV4dENvbnRyb2xJbm5lclRleHRFbGVtZW50OjpkZWZhdWx0RXZl
bnRIYW5kbGVyKEV2ZW50KiBldmVudCkKLXsKLSAgICAvLyBGSVhNRTogSW4gdGhlIGZ1dHVyZSwg
d2Ugc2hvdWxkIGFkZCBhIHdheSB0byBoYXZlIGRlZmF1bHQgZXZlbnQgbGlzdGVuZXJzLgotICAg
IC8vIFRoZW4gd2Ugd291bGQgYWRkIG9uZSB0byB0aGUgdGV4dCBmaWVsZCdzIGlubmVyIGRpdiwg
YW5kIHdlIHdvdWxkbid0IG5lZWQgdGhpcyBzdWJjbGFzcy4KLSAgICAvLyBPciBwb3NzaWJseSB3
ZSBjb3VsZCBqdXN0IHVzZSBhIG5vcm1hbCBldmVudCBsaXN0ZW5lci4KLSAgICBpZiAoZXZlbnQt
PmlzQmVmb3JlVGV4dEluc2VydGVkRXZlbnQoKSB8fCBldmVudC0+dHlwZSgpID09IGV2ZW50TmFt
ZXMoKS53ZWJraXRFZGl0YWJsZUNvbnRlbnRDaGFuZ2VkRXZlbnQpIHsKLSAgICAgICAgTm9kZSog
c2hhZG93QW5jZXN0b3IgPSBzaGFkb3dBbmNlc3Rvck5vZGUoKTsKLSAgICAgICAgLy8gQSBUZXh0
Q29udHJvbElubmVyVGV4dEVsZW1lbnQgY2FuIGJlIGl0cyBvd24gc2hhZG93IGFuY2VzdG9yIGlm
IGl0cyBiZWVuIGRldGFjaGVkLCBidXQga2VwdCBhbGl2ZSBieSBhbiBFZGl0Q29tbWFuZC4KLSAg
ICAgICAgLy8gSW4gdGhpcyBjYXNlLCBhbiB1bmRvL3JlZG8gY2FuIGNhdXNlIGV2ZW50cyB0byBi
ZSBzZW50IHRvIHRoZSBUZXh0Q29udHJvbElubmVyVGV4dEVsZW1lbnQuICAKLSAgICAgICAgLy8g
VG8gcHJldmVudCBhbiBpbmZpbml0ZSBsb29wLCB3ZSBtdXN0IGNoZWNrIGZvciB0aGlzIGNhc2Ug
YmVmb3JlIHNlbmRpbmcgdGhlIGV2ZW50IHVwIHRoZSBjaGFpbi4KLSAgICAgICAgaWYgKHNoYWRv
d0FuY2VzdG9yICYmIHNoYWRvd0FuY2VzdG9yICE9IHRoaXMpCi0gICAgICAgICAgICBzaGFkb3dB
bmNlc3Rvci0+ZGVmYXVsdEV2ZW50SGFuZGxlcihldmVudCk7Ci0gICAgfQotICAgIGlmICghZXZl
bnQtPmRlZmF1bHRIYW5kbGVkKCkpCi0gICAgICAgIEhUTUxEaXZFbGVtZW50OjpkZWZhdWx0RXZl
bnRIYW5kbGVyKGV2ZW50KTsKLX0KLQotUmVuZGVyT2JqZWN0KiBUZXh0Q29udHJvbElubmVyVGV4
dEVsZW1lbnQ6OmNyZWF0ZVJlbmRlcmVyKFJlbmRlckFyZW5hKiBhcmVuYSwgUmVuZGVyU3R5bGUq
KQotewotICAgIGJvb2wgbXVsdGlMaW5lID0gZmFsc2U7Ci0gICAgTm9kZSogc2hhZG93QW5jZXN0
b3IgPSBzaGFkb3dBbmNlc3Rvck5vZGUoKTsKLSAgICBpZiAoc2hhZG93QW5jZXN0b3IgJiYgc2hh
ZG93QW5jZXN0b3ItPnJlbmRlcmVyKCkpIHsKLSAgICAgICAgQVNTRVJUKHNoYWRvd0FuY2VzdG9y
LT5yZW5kZXJlcigpLT5pc1RleHRGaWVsZCgpIHx8IHNoYWRvd0FuY2VzdG9yLT5yZW5kZXJlcigp
LT5pc1RleHRBcmVhKCkpOwotICAgICAgICBtdWx0aUxpbmUgPSBzaGFkb3dBbmNlc3Rvci0+cmVu
ZGVyZXIoKS0+aXNUZXh0QXJlYSgpOwotICAgIH0KLSAgICByZXR1cm4gbmV3IChhcmVuYSkgUmVu
ZGVyVGV4dENvbnRyb2xJbm5lckJsb2NrKHRoaXMsIG11bHRpTGluZSk7Ci19Ci0KLS8vIC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotaW5saW5lIFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRv
bkVsZW1lbnQ6OlNlYXJjaEZpZWxkUmVzdWx0c0J1dHRvbkVsZW1lbnQoRG9jdW1lbnQqIGRvY3Vt
ZW50KQotICAgIDogVGV4dENvbnRyb2xJbm5lckVsZW1lbnQoZG9jdW1lbnQpCi17Ci19Ci0KLVBh
c3NSZWZQdHI8U2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uRWxlbWVudD4gU2VhcmNoRmllbGRSZXN1
bHRzQnV0dG9uRWxlbWVudDo6Y3JlYXRlKERvY3VtZW50KiBkb2N1bWVudCkKLXsKLSAgICByZXR1
cm4gYWRvcHRSZWYobmV3IFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRvbkVsZW1lbnQoZG9jdW1lbnQp
KTsKLX0KLQotdm9pZCBTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b25FbGVtZW50OjpkZWZhdWx0RXZl
bnRIYW5kbGVyKEV2ZW50KiBldmVudCkKLXsKLSAgICAvLyBPbiBtb3VzZWRvd24sIGJyaW5nIHVw
IGEgbWVudSwgaWYgbmVlZGVkCi0gICAgSFRNTElucHV0RWxlbWVudCogaW5wdXQgPSBzdGF0aWNf
Y2FzdDxIVE1MSW5wdXRFbGVtZW50Kj4oc2hhZG93QW5jZXN0b3JOb2RlKCkpOwotICAgIGlmIChl
dmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5tb3VzZWRvd25FdmVudCAmJiBldmVudC0+aXNN
b3VzZUV2ZW50KCkgJiYgc3RhdGljX2Nhc3Q8TW91c2VFdmVudCo+KGV2ZW50KS0+YnV0dG9uKCkg
PT0gTGVmdEJ1dHRvbikgewotICAgICAgICBpbnB1dC0+Zm9jdXMoKTsKLSAgICAgICAgaW5wdXQt
PnNlbGVjdCgpOwotICAgICAgICBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUqIHJlbmRlcmVy
ID0gdG9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUoaW5wdXQtPnJlbmRlcmVyKCkpOwotICAg
ICAgICBpZiAocmVuZGVyZXItPnBvcHVwSXNWaXNpYmxlKCkpCi0gICAgICAgICAgICByZW5kZXJl
ci0+aGlkZVBvcHVwKCk7Ci0gICAgICAgIGVsc2UgaWYgKGlucHV0LT5tYXhSZXN1bHRzKCkgPiAw
KQotICAgICAgICAgICAgcmVuZGVyZXItPnNob3dQb3B1cCgpOwotICAgICAgICBldmVudC0+c2V0
RGVmYXVsdEhhbmRsZWQoKTsKLSAgICB9Ci0KLSAgICBpZiAoIWV2ZW50LT5kZWZhdWx0SGFuZGxl
ZCgpKQotICAgICAgICBIVE1MRGl2RWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcihldmVudCk7
Ci19Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotaW5saW5lIFNlYXJjaEZp
ZWxkQ2FuY2VsQnV0dG9uRWxlbWVudDo6U2VhcmNoRmllbGRDYW5jZWxCdXR0b25FbGVtZW50KERv
Y3VtZW50KiBkb2N1bWVudCkKLSAgICA6IFRleHRDb250cm9sSW5uZXJFbGVtZW50KGRvY3VtZW50
KQotICAgICwgbV9jYXB0dXJpbmcoZmFsc2UpCi17Ci19Ci0KLVBhc3NSZWZQdHI8U2VhcmNoRmll
bGRDYW5jZWxCdXR0b25FbGVtZW50PiBTZWFyY2hGaWVsZENhbmNlbEJ1dHRvbkVsZW1lbnQ6OmNy
ZWF0ZShEb2N1bWVudCogZG9jdW1lbnQpCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTZWFy
Y2hGaWVsZENhbmNlbEJ1dHRvbkVsZW1lbnQoZG9jdW1lbnQpKTsKLX0KLQotdm9pZCBTZWFyY2hG
aWVsZENhbmNlbEJ1dHRvbkVsZW1lbnQ6OmRldGFjaCgpCi17Ci0gICAgaWYgKG1fY2FwdHVyaW5n
KSB7Ci0gICAgICAgIGlmIChGcmFtZSogZnJhbWUgPSBkb2N1bWVudCgpLT5mcmFtZSgpKQotICAg
ICAgICAgICAgZnJhbWUtPmV2ZW50SGFuZGxlcigpLT5zZXRDYXB0dXJpbmdNb3VzZUV2ZW50c05v
ZGUoMCk7Ci0gICAgfQotICAgIFRleHRDb250cm9sSW5uZXJFbGVtZW50OjpkZXRhY2goKTsKLX0K
LQotCi12b2lkIFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uRWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFu
ZGxlcihFdmVudCogZXZlbnQpCi17Ci0gICAgLy8gSWYgdGhlIGVsZW1lbnQgaXMgdmlzaWJsZSwg
b24gbW91c2V1cCwgY2xlYXIgdGhlIHZhbHVlLCBhbmQgc2V0IHNlbGVjdGlvbgotICAgIFJlZlB0
cjxIVE1MSW5wdXRFbGVtZW50PiBpbnB1dChzdGF0aWNfY2FzdDxIVE1MSW5wdXRFbGVtZW50Kj4o
c2hhZG93QW5jZXN0b3JOb2RlKCkpKTsKLSAgICBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5h
bWVzKCkubW91c2Vkb3duRXZlbnQgJiYgZXZlbnQtPmlzTW91c2VFdmVudCgpICYmIHN0YXRpY19j
YXN0PE1vdXNlRXZlbnQqPihldmVudCktPmJ1dHRvbigpID09IExlZnRCdXR0b24pIHsKLSAgICAg
ICAgaWYgKHJlbmRlcmVyKCkgJiYgcmVuZGVyZXIoKS0+dmlzaWJsZVRvSGl0VGVzdGluZygpKSB7
Ci0gICAgICAgICAgICBpZiAoRnJhbWUqIGZyYW1lID0gZG9jdW1lbnQoKS0+ZnJhbWUoKSkgewot
ICAgICAgICAgICAgICAgIGZyYW1lLT5ldmVudEhhbmRsZXIoKS0+c2V0Q2FwdHVyaW5nTW91c2VF
dmVudHNOb2RlKHRoaXMpOwotICAgICAgICAgICAgICAgIG1fY2FwdHVyaW5nID0gdHJ1ZTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBpbnB1dC0+Zm9jdXMoKTsKLSAgICAgICAg
aW5wdXQtPnNlbGVjdCgpOwotICAgICAgICBldmVudC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsKLSAg
ICB9Ci0gICAgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLm1vdXNldXBFdmVudCAm
JiBldmVudC0+aXNNb3VzZUV2ZW50KCkgJiYgc3RhdGljX2Nhc3Q8TW91c2VFdmVudCo+KGV2ZW50
KS0+YnV0dG9uKCkgPT0gTGVmdEJ1dHRvbikgewotICAgICAgICBpZiAobV9jYXB0dXJpbmcpIHsK
LSAgICAgICAgICAgIGlmIChGcmFtZSogZnJhbWUgPSBkb2N1bWVudCgpLT5mcmFtZSgpKSB7Ci0g
ICAgICAgICAgICAgICAgZnJhbWUtPmV2ZW50SGFuZGxlcigpLT5zZXRDYXB0dXJpbmdNb3VzZUV2
ZW50c05vZGUoMCk7Ci0gICAgICAgICAgICAgICAgbV9jYXB0dXJpbmcgPSBmYWxzZTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIGlmIChob3ZlcmVkKCkpIHsKLSAgICAgICAgICAgICAgICBT
dHJpbmcgb2xkVmFsdWUgPSBpbnB1dC0+dmFsdWUoKTsKLSAgICAgICAgICAgICAgICBpbnB1dC0+
c2V0VmFsdWUoIiIpOwotICAgICAgICAgICAgICAgIGlmICghb2xkVmFsdWUuaXNFbXB0eSgpKSB7
Ci0gICAgICAgICAgICAgICAgICAgIHRvUmVuZGVyVGV4dENvbnRyb2woaW5wdXQtPnJlbmRlcmVy
KCkpLT5zZXRDaGFuZ2VkU2luY2VMYXN0Q2hhbmdlRXZlbnQodHJ1ZSk7Ci0gICAgICAgICAgICAg
ICAgICAgIGlucHV0LT5kaXNwYXRjaEZvcm1Db250cm9sSW5wdXRFdmVudCgpOwotICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICBpbnB1dC0+b25TZWFyY2goKTsKLSAgICAgICAgICAg
ICAgICBldmVudC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
fQotICAgIH0KLQotICAgIGlmICghZXZlbnQtPmRlZmF1bHRIYW5kbGVkKCkpCi0gICAgICAgIEhU
TUxEaXZFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKGV2ZW50KTsKLX0KLQotLy8gLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1pbmxpbmUgU3BpbkJ1dHRvbkVsZW1lbnQ6OlNwaW5C
dXR0b25FbGVtZW50KEhUTUxFbGVtZW50KiBzaGFkb3dQYXJlbnQpCi0gICAgOiBUZXh0Q29udHJv
bElubmVyRWxlbWVudChzaGFkb3dQYXJlbnQtPmRvY3VtZW50KCksIHNoYWRvd1BhcmVudCkKLSAg
ICAsIG1fY2FwdHVyaW5nKGZhbHNlKQotICAgICwgbV91cERvd25TdGF0ZShJbmRldGVybWluYXRl
KQotICAgICwgbV9wcmVzc1N0YXJ0aW5nU3RhdGUoSW5kZXRlcm1pbmF0ZSkKLSAgICAsIG1fcmVw
ZWF0aW5nVGltZXIodGhpcywgJlNwaW5CdXR0b25FbGVtZW50OjpyZXBlYXRpbmdUaW1lckZpcmVk
KQotewotfQotCi1QYXNzUmVmUHRyPFNwaW5CdXR0b25FbGVtZW50PiBTcGluQnV0dG9uRWxlbWVu
dDo6Y3JlYXRlKEhUTUxFbGVtZW50KiBzaGFkb3dQYXJlbnQpCi17Ci0gICAgcmV0dXJuIGFkb3B0
UmVmKG5ldyBTcGluQnV0dG9uRWxlbWVudChzaGFkb3dQYXJlbnQpKTsKLX0KLQotdm9pZCBTcGlu
QnV0dG9uRWxlbWVudDo6ZGV0YWNoKCkKLXsKLSAgICBzdG9wUmVwZWF0aW5nVGltZXIoKTsKLSAg
ICBpZiAobV9jYXB0dXJpbmcpIHsKLSAgICAgICAgaWYgKEZyYW1lKiBmcmFtZSA9IGRvY3VtZW50
KCktPmZyYW1lKCkpIHsKLSAgICAgICAgICAgIGZyYW1lLT5ldmVudEhhbmRsZXIoKS0+c2V0Q2Fw
dHVyaW5nTW91c2VFdmVudHNOb2RlKDApOwotICAgICAgICAgICAgbV9jYXB0dXJpbmcgPSBmYWxz
ZTsKLSAgICAgICAgfQotICAgIH0KLSAgICBUZXh0Q29udHJvbElubmVyRWxlbWVudDo6ZGV0YWNo
KCk7Ci19Ci0KLXZvaWQgU3BpbkJ1dHRvbkVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIoRXZl
bnQqIGV2ZW50KQotewotICAgIGlmICghZXZlbnQtPmlzTW91c2VFdmVudCgpKSB7Ci0gICAgICAg
IGlmICghZXZlbnQtPmRlZmF1bHRIYW5kbGVkKCkpCi0gICAgICAgICAgICBIVE1MRGl2RWxlbWVu
dDo6ZGVmYXVsdEV2ZW50SGFuZGxlcihldmVudCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0K
LSAgICBSZW5kZXJCb3gqIGJveCA9IHJlbmRlckJveCgpOwotICAgIGlmICghYm94KSB7Ci0gICAg
ICAgIGlmICghZXZlbnQtPmRlZmF1bHRIYW5kbGVkKCkpCi0gICAgICAgICAgICBIVE1MRGl2RWxl
bWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcihldmVudCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0KLSAgICBSZWZQdHI8SFRNTElucHV0RWxlbWVudD4gaW5wdXQoc3RhdGljX2Nhc3Q8SFRNTElu
cHV0RWxlbWVudCo+KHNoYWRvd0FuY2VzdG9yTm9kZSgpKSk7Ci0gICAgaWYgKGlucHV0LT5kaXNh
YmxlZCgpIHx8IGlucHV0LT5pc1JlYWRPbmx5Rm9ybUNvbnRyb2woKSkgewotICAgICAgICBpZiAo
IWV2ZW50LT5kZWZhdWx0SGFuZGxlZCgpKQotICAgICAgICAgICAgSFRNTERpdkVsZW1lbnQ6OmRl
ZmF1bHRFdmVudEhhbmRsZXIoZXZlbnQpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAg
TW91c2VFdmVudCogbW91c2VFdmVudCA9IHN0YXRpY19jYXN0PE1vdXNlRXZlbnQqPihldmVudCk7
Ci0gICAgSW50UG9pbnQgbG9jYWwgPSByb3VuZGVkSW50UG9pbnQoYm94LT5hYnNvbHV0ZVRvTG9j
YWwobW91c2VFdmVudC0+YWJzb2x1dGVMb2NhdGlvbigpLCBmYWxzZSwgdHJ1ZSkpOwotICAgIGlm
IChtb3VzZUV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLm1vdXNlZG93bkV2ZW50ICYmIG1v
dXNlRXZlbnQtPmJ1dHRvbigpID09IExlZnRCdXR0b24pIHsKLSAgICAgICAgaWYgKGJveC0+Ym9y
ZGVyQm94UmVjdCgpLmNvbnRhaW5zKGxvY2FsKSkgewotICAgICAgICAgICAgLy8gVGhlIGZvbGxv
d2luZyBmdW5jdGlvbnMgb2YgSFRNTElucHV0RWxlbWVudCBtYXkgcnVuIEphdmFTY3JpcHQKLSAg
ICAgICAgICAgIC8vIGNvZGUgd2hpY2ggZGV0YWNoZXMgdGhpcyBzaGFkb3cgbm9kZS4gV2UgbmVl
ZCB0byB0YWtlIGEgcmVmZXJlbmNlCi0gICAgICAgICAgICAvLyBhbmQgY2hlY2sgcmVuZGVyZXIo
KSBhZnRlciBzdWNoIGZ1bmN0aW9uIGNhbGxzLgotICAgICAgICAgICAgUmVmUHRyPE5vZGU+IHBy
b3RlY3Rvcih0aGlzKTsKLSAgICAgICAgICAgIGlucHV0LT5mb2N1cygpOwotICAgICAgICAgICAg
aW5wdXQtPnNlbGVjdCgpOwotICAgICAgICAgICAgaWYgKHJlbmRlcmVyKCkpIHsKLSAgICAgICAg
ICAgICAgICBpbnB1dC0+c3RlcFVwRnJvbVJlbmRlcmVyKG1fdXBEb3duU3RhdGUgPT0gVXAgPyAx
IDogLTEpOwotICAgICAgICAgICAgICAgIGlmIChyZW5kZXJlcigpKQotICAgICAgICAgICAgICAg
ICAgICBzdGFydFJlcGVhdGluZ1RpbWVyKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBl
dmVudC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsKLSAgICAgICAgfQotICAgIH0gZWxzZSBpZiAobW91
c2VFdmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5tb3VzZXVwRXZlbnQgJiYgbW91c2VFdmVu
dC0+YnV0dG9uKCkgPT0gTGVmdEJ1dHRvbikKLSAgICAgICAgc3RvcFJlcGVhdGluZ1RpbWVyKCk7
Ci0gICAgZWxzZSBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkubW91c2Vtb3ZlRXZl
bnQpIHsKLSAgICAgICAgaWYgKGJveC0+Ym9yZGVyQm94UmVjdCgpLmNvbnRhaW5zKGxvY2FsKSkg
ewotICAgICAgICAgICAgaWYgKCFtX2NhcHR1cmluZykgewotICAgICAgICAgICAgICAgIGlmIChG
cmFtZSogZnJhbWUgPSBkb2N1bWVudCgpLT5mcmFtZSgpKSB7Ci0gICAgICAgICAgICAgICAgICAg
IGZyYW1lLT5ldmVudEhhbmRsZXIoKS0+c2V0Q2FwdHVyaW5nTW91c2VFdmVudHNOb2RlKHRoaXMp
OwotICAgICAgICAgICAgICAgICAgICBtX2NhcHR1cmluZyA9IHRydWU7Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgVXBEb3duU3RhdGUgb2xkVXBEb3duU3Rh
dGUgPSBtX3VwRG93blN0YXRlOwotICAgICAgICAgICAgbV91cERvd25TdGF0ZSA9IGxvY2FsLnko
KSA8IGJveC0+aGVpZ2h0KCkgLyAyID8gVXAgOiBEb3duOwotICAgICAgICAgICAgaWYgKG1fdXBE
b3duU3RhdGUgIT0gb2xkVXBEb3duU3RhdGUpCi0gICAgICAgICAgICAgICAgcmVuZGVyZXIoKS0+
cmVwYWludCgpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgaWYgKG1fY2FwdHVyaW5n
KSB7Ci0gICAgICAgICAgICAgICAgc3RvcFJlcGVhdGluZ1RpbWVyKCk7Ci0gICAgICAgICAgICAg
ICAgaWYgKEZyYW1lKiBmcmFtZSA9IGRvY3VtZW50KCktPmZyYW1lKCkpIHsKLSAgICAgICAgICAg
ICAgICAgICAgZnJhbWUtPmV2ZW50SGFuZGxlcigpLT5zZXRDYXB0dXJpbmdNb3VzZUV2ZW50c05v
ZGUoMCk7Ci0gICAgICAgICAgICAgICAgICAgIG1fY2FwdHVyaW5nID0gZmFsc2U7Ci0gICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKCFl
dmVudC0+ZGVmYXVsdEhhbmRsZWQoKSkKLSAgICAgICAgSFRNTERpdkVsZW1lbnQ6OmRlZmF1bHRF
dmVudEhhbmRsZXIoZXZlbnQpOwotfQotCi12b2lkIFNwaW5CdXR0b25FbGVtZW50OjpzdGFydFJl
cGVhdGluZ1RpbWVyKCkKLXsKLSAgICBtX3ByZXNzU3RhcnRpbmdTdGF0ZSA9IG1fdXBEb3duU3Rh
dGU7Ci0gICAgU2Nyb2xsYmFyVGhlbWUqIHRoZW1lID0gU2Nyb2xsYmFyVGhlbWU6Om5hdGl2ZVRo
ZW1lKCk7Ci0gICAgbV9yZXBlYXRpbmdUaW1lci5zdGFydCh0aGVtZS0+aW5pdGlhbEF1dG9zY3Jv
bGxUaW1lckRlbGF5KCksIHRoZW1lLT5hdXRvc2Nyb2xsVGltZXJEZWxheSgpKTsKLX0KLQotdm9p
ZCBTcGluQnV0dG9uRWxlbWVudDo6c3RvcFJlcGVhdGluZ1RpbWVyKCkKLXsKLSAgICBtX3JlcGVh
dGluZ1RpbWVyLnN0b3AoKTsKLX0KLQotdm9pZCBTcGluQnV0dG9uRWxlbWVudDo6cmVwZWF0aW5n
VGltZXJGaXJlZChUaW1lcjxTcGluQnV0dG9uRWxlbWVudD4qKQotewotICAgIEhUTUxJbnB1dEVs
ZW1lbnQqIGlucHV0ID0gc3RhdGljX2Nhc3Q8SFRNTElucHV0RWxlbWVudCo+KHNoYWRvd0FuY2Vz
dG9yTm9kZSgpKTsKLSAgICBpZiAoaW5wdXQtPmRpc2FibGVkKCkgfHwgaW5wdXQtPmlzUmVhZE9u
bHlGb3JtQ29udHJvbCgpKQotICAgICAgICByZXR1cm47Ci0gICAgLy8gT24gTWFjIE9TLCBOU1N0
ZXBwZXIgdXBkYXRlcyB0aGUgdmFsdWUgZm9yIHRoZSBidXR0b24gdW5kZXIgdGhlIG1vdXNlCi0g
ICAgLy8gY3Vyc29yIHJlZ2FyZGxlc3Mgb2YgdGhlIGJ1dHRvbiBwcmVzc2VkIGF0IHRoZSBiZWdp
bm5pbmcuIFNvIHRoZQotICAgIC8vIGZvbGxvd2luZyBjaGVjayBpcyBub3QgbmVlZGVkIGZvciBN
YWMgT1MuCi0jaWYgIU9TKE1BQ19PU19YKQotICAgIGlmIChtX3VwRG93blN0YXRlICE9IG1fcHJl
c3NTdGFydGluZ1N0YXRlKQotICAgICAgICByZXR1cm47Ci0jZW5kaWYKLSAgICBpbnB1dC0+c3Rl
cFVwRnJvbVJlbmRlcmVyKG1fdXBEb3duU3RhdGUgPT0gVXAgPyAxIDogLTEpOwotfQotCi12b2lk
IFNwaW5CdXR0b25FbGVtZW50OjpzZXRIb3ZlcmVkKGJvb2wgZmxhZykKLXsKLSAgICBpZiAoIWhv
dmVyZWQoKSAmJiBmbGFnKQotICAgICAgICBtX3VwRG93blN0YXRlID0gSW5kZXRlcm1pbmF0ZTsK
LSAgICBUZXh0Q29udHJvbElubmVyRWxlbWVudDo6c2V0SG92ZXJlZChmbGFnKTsKLX0KLQotCi0v
LyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLSNpZiBFTkFCTEUoSU5QVVRfU1BFRUNI
KQotCi1pbmxpbmUgSW5wdXRGaWVsZFNwZWVjaEJ1dHRvbkVsZW1lbnQ6OklucHV0RmllbGRTcGVl
Y2hCdXR0b25FbGVtZW50KEhUTUxFbGVtZW50KiBzaGFkb3dQYXJlbnQpCi0gICAgOiBUZXh0Q29u
dHJvbElubmVyRWxlbWVudChzaGFkb3dQYXJlbnQtPmRvY3VtZW50KCksIHNoYWRvd1BhcmVudCkK
LSAgICAsIG1fY2FwdHVyaW5nKGZhbHNlKQotICAgICwgbV9zdGF0ZShJZGxlKQotICAgICwgbV9s
aXN0ZW5lcklkKGRvY3VtZW50KCktPnBhZ2UoKS0+c3BlZWNoSW5wdXQoKS0+cmVnaXN0ZXJMaXN0
ZW5lcih0aGlzKSkKLXsKLX0KLQotSW5wdXRGaWVsZFNwZWVjaEJ1dHRvbkVsZW1lbnQ6On5JbnB1
dEZpZWxkU3BlZWNoQnV0dG9uRWxlbWVudCgpCi17Ci0gICAgU3BlZWNoSW5wdXQqIHNwZWVjaCA9
IHNwZWVjaElucHV0KCk7Ci0gICAgaWYgKHNwZWVjaCAmJiBtX2xpc3RlbmVySWQpICB7IC8vIENv
dWxkIGJlIG51bGwgd2hlbiBwYWdlIGlzIHVubG9hZGluZy4KLSAgICAgICAgaWYgKG1fc3RhdGUg
IT0gSWRsZSkKLSAgICAgICAgICAgIHNwZWVjaC0+Y2FuY2VsUmVjb2duaXRpb24obV9saXN0ZW5l
cklkKTsKLSAgICAgICAgc3BlZWNoLT51bnJlZ2lzdGVyTGlzdGVuZXIobV9saXN0ZW5lcklkKTsK
LSAgICB9Ci19Ci0KLVBhc3NSZWZQdHI8SW5wdXRGaWVsZFNwZWVjaEJ1dHRvbkVsZW1lbnQ+IElu
cHV0RmllbGRTcGVlY2hCdXR0b25FbGVtZW50OjpjcmVhdGUoSFRNTEVsZW1lbnQqIHNoYWRvd1Bh
cmVudCkKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IElucHV0RmllbGRTcGVlY2hCdXR0b25F
bGVtZW50KHNoYWRvd1BhcmVudCkpOwotfQotCi12b2lkIElucHV0RmllbGRTcGVlY2hCdXR0b25F
bGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50KiBldmVudCkKLXsKLSAgICAvLyBGb3Ig
cHJpdmFjeSByZWFzb25zLCBvbmx5IGFsbG93IGNsaWNrcyBkaXJlY3RseSBjb21pbmcgZnJvbSB0
aGUgdXNlci4KLSAgICBpZiAoIWV2ZW50LT5mcm9tVXNlckdlc3R1cmUoKSkgewotICAgICAgICBI
VE1MRGl2RWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcihldmVudCk7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0KLSAgICAvLyBUaGUgY2FsbCB0byBmb2N1cygpIGJlbG93IGRpc3BhdGNoZXMg
YSBmb2N1cyBldmVudCwgYW5kIGFuIGV2ZW50IGhhbmRsZXIgaW4gdGhlIHBhZ2UgbWlnaHQKLSAg
ICAvLyByZW1vdmUgdGhlIGlucHV0IGVsZW1lbnQgZnJvbSBET00uIFRvIG1ha2Ugc3VyZSBpdCBy
ZW1haW5zIHZhbGlkIHVudGlsIHdlIGZpbmlzaCBvdXIgd29yawotICAgIC8vIGhlcmUsIHdlIHRh
a2UgYSB0ZW1wb3JhcnkgcmVmZXJlbmNlLgotICAgIFJlZlB0cjxIVE1MSW5wdXRFbGVtZW50PiBp
bnB1dChzdGF0aWNfY2FzdDxIVE1MSW5wdXRFbGVtZW50Kj4oc2hhZG93QW5jZXN0b3JOb2RlKCkp
KTsKLQotICAgIC8vIE9uIG1vdXNlIGRvd24sIHNlbGVjdCB0aGUgdGV4dCBhbmQgc2V0IGZvY3Vz
LgotICAgIGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5tb3VzZWRvd25FdmVudCAm
JiBldmVudC0+aXNNb3VzZUV2ZW50KCkgJiYgc3RhdGljX2Nhc3Q8TW91c2VFdmVudCo+KGV2ZW50
KS0+YnV0dG9uKCkgPT0gTGVmdEJ1dHRvbikgewotICAgICAgICBpZiAocmVuZGVyZXIoKSAmJiBy
ZW5kZXJlcigpLT52aXNpYmxlVG9IaXRUZXN0aW5nKCkpIHsKLSAgICAgICAgICAgIGlmIChGcmFt
ZSogZnJhbWUgPSBkb2N1bWVudCgpLT5mcmFtZSgpKSB7Ci0gICAgICAgICAgICAgICAgZnJhbWUt
PmV2ZW50SGFuZGxlcigpLT5zZXRDYXB0dXJpbmdNb3VzZUV2ZW50c05vZGUodGhpcyk7Ci0gICAg
ICAgICAgICAgICAgbV9jYXB0dXJpbmcgPSB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICB9
Ci0gICAgICAgIFJlZlB0cjxJbnB1dEZpZWxkU3BlZWNoQnV0dG9uRWxlbWVudD4gaG9sZFJlZkJ1
dHRvbih0aGlzKTsKLSAgICAgICAgaW5wdXQtPmZvY3VzKCk7Ci0gICAgICAgIGlucHV0LT5zZWxl
Y3QoKTsKLSAgICAgICAgZXZlbnQtPnNldERlZmF1bHRIYW5kbGVkKCk7Ci0gICAgfQotICAgIC8v
IE9uIG1vdXNlIHVwLCByZWxlYXNlIGNhcHR1cmUgY2xlYW5seS4KLSAgICBpZiAoZXZlbnQtPnR5
cGUoKSA9PSBldmVudE5hbWVzKCkubW91c2V1cEV2ZW50ICYmIGV2ZW50LT5pc01vdXNlRXZlbnQo
KSAmJiBzdGF0aWNfY2FzdDxNb3VzZUV2ZW50Kj4oZXZlbnQpLT5idXR0b24oKSA9PSBMZWZ0QnV0
dG9uKSB7Ci0gICAgICAgIGlmIChtX2NhcHR1cmluZyAmJiByZW5kZXJlcigpICYmIHJlbmRlcmVy
KCktPnZpc2libGVUb0hpdFRlc3RpbmcoKSkgewotICAgICAgICAgICAgaWYgKEZyYW1lKiBmcmFt
ZSA9IGRvY3VtZW50KCktPmZyYW1lKCkpIHsKLSAgICAgICAgICAgICAgICBmcmFtZS0+ZXZlbnRI
YW5kbGVyKCktPnNldENhcHR1cmluZ01vdXNlRXZlbnRzTm9kZSgwKTsKLSAgICAgICAgICAgICAg
ICBtX2NhcHR1cmluZyA9IGZhbHNlOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQot
Ci0gICAgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLmNsaWNrRXZlbnQpIHsKLSAg
ICAgICAgc3dpdGNoIChtX3N0YXRlKSB7Ci0gICAgICAgIGNhc2UgSWRsZTogewotICAgICAgICAg
ICAgICBBdG9taWNTdHJpbmcgbGFuZ3VhZ2UgPSBpbnB1dC0+Y29tcHV0ZUluaGVyaXRlZExhbmd1
YWdlKCk7Ci0gICAgICAgICAgICAgIFN0cmluZyBncmFtbWFyID0gaW5wdXQtPmdldEF0dHJpYnV0
ZSh3ZWJraXRncmFtbWFyQXR0cik7Ci0gICAgICAgICAgICAgIEludFJlY3QgcmVjdCA9IGlucHV0
LT5yZW5kZXJlcigpLT5hYnNvbHV0ZUJvdW5kaW5nQm94UmVjdCgpOwotICAgICAgICAgICAgICBp
ZiAoc3BlZWNoSW5wdXQoKS0+c3RhcnRSZWNvZ25pdGlvbihtX2xpc3RlbmVySWQsIHJlY3QsIGxh
bmd1YWdlLCBncmFtbWFyLCBkb2N1bWVudCgpLT5zZWN1cml0eU9yaWdpbigpKSkKLSAgICAgICAg
ICAgICAgICAgIHNldFN0YXRlKFJlY29yZGluZyk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgY2FzZSBSZWNvcmRpbmc6Ci0gICAgICAgICAgICBzcGVlY2hJbnB1
dCgpLT5zdG9wUmVjb3JkaW5nKG1fbGlzdGVuZXJJZCk7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgY2FzZSBSZWNvZ25pemluZzoKLSAgICAgICAgICAgIC8vIE5vdGhpbmcgdG8gZG8gaGVy
ZSwgd2Ugd2lsbCBjb250aW51ZSB0byB3YWl0IGZvciByZXN1bHRzLgotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIH0KLSAgICAgICAgZXZlbnQtPnNldERlZmF1bHRIYW5kbGVkKCk7Ci0gICAg
fQotCi0gICAgaWYgKCFldmVudC0+ZGVmYXVsdEhhbmRsZWQoKSkKLSAgICAgICAgSFRNTERpdkVs
ZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIoZXZlbnQpOwotfQotCi12b2lkIElucHV0RmllbGRT
cGVlY2hCdXR0b25FbGVtZW50OjpzZXRTdGF0ZShTcGVlY2hJbnB1dFN0YXRlIHN0YXRlKQotewot
ICAgIGlmIChtX3N0YXRlICE9IHN0YXRlKSB7Ci0gICAgICAgIG1fc3RhdGUgPSBzdGF0ZTsKLSAg
ICAgICAgc2hhZG93QW5jZXN0b3JOb2RlKCktPnJlbmRlcmVyKCktPnJlcGFpbnQoKTsKLSAgICB9
Ci19Ci0KLVNwZWVjaElucHV0KiBJbnB1dEZpZWxkU3BlZWNoQnV0dG9uRWxlbWVudDo6c3BlZWNo
SW5wdXQoKQotewotICAgIHJldHVybiBkb2N1bWVudCgpLT5wYWdlKCkgPyBkb2N1bWVudCgpLT5w
YWdlKCktPnNwZWVjaElucHV0KCkgOiAwOwotfQotCi12b2lkIElucHV0RmllbGRTcGVlY2hCdXR0
b25FbGVtZW50OjpkaWRDb21wbGV0ZVJlY29yZGluZyhpbnQpCi17Ci0gICAgc2V0U3RhdGUoUmVj
b2duaXppbmcpOwotfQotCi12b2lkIElucHV0RmllbGRTcGVlY2hCdXR0b25FbGVtZW50OjpkaWRD
b21wbGV0ZVJlY29nbml0aW9uKGludCkKLXsKLSAgICBzZXRTdGF0ZShJZGxlKTsKLX0KLQotdm9p
ZCBJbnB1dEZpZWxkU3BlZWNoQnV0dG9uRWxlbWVudDo6c2V0UmVjb2duaXRpb25SZXN1bHQoaW50
LCBjb25zdCBTcGVlY2hJbnB1dFJlc3VsdEFycmF5JiByZXN1bHRzKQotewotICAgIG1fcmVzdWx0
cyA9IHJlc3VsdHM7Ci0KLSAgICAvLyBUaGUgY2FsbCB0byBzZXRWYWx1ZSgpIGJlbG93IGRpc3Bh
dGNoZXMgYW4gZXZlbnQsIGFuZCBhbiBldmVudCBoYW5kbGVyIGluIHRoZSBwYWdlIG1pZ2h0Ci0g
ICAgLy8gcmVtb3ZlIHRoZSBpbnB1dCBlbGVtZW50IGZyb20gRE9NLiBUbyBtYWtlIHN1cmUgaXQg
cmVtYWlucyB2YWxpZCB1bnRpbCB3ZSBmaW5pc2ggb3VyIHdvcmsKLSAgICAvLyBoZXJlLCB3ZSB0
YWtlIGEgdGVtcG9yYXJ5IHJlZmVyZW5jZS4KLSAgICBSZWZQdHI8SFRNTElucHV0RWxlbWVudD4g
aW5wdXQoc3RhdGljX2Nhc3Q8SFRNTElucHV0RWxlbWVudCo+KHNoYWRvd0FuY2VzdG9yTm9kZSgp
KSk7Ci0gICAgUmVmUHRyPElucHV0RmllbGRTcGVlY2hCdXR0b25FbGVtZW50PiBob2xkUmVmQnV0
dG9uKHRoaXMpOwotICAgIGlucHV0LT5zZXRWYWx1ZShyZXN1bHRzLmlzRW1wdHkoKSA/ICIiIDog
cmVzdWx0c1swXS0+dXR0ZXJhbmNlKCkpOwotICAgIGlucHV0LT5kaXNwYXRjaEV2ZW50KFNwZWVj
aElucHV0RXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkud2Via2l0c3BlZWNoY2hhbmdlRXZlbnQs
IHJlc3VsdHMpKTsKLQotICAgIC8vIENoZWNrIGJlZm9yZSBhY2Nlc3NpbmcgdGhlIHJlbmRlcmVy
IGFzIHRoZSBhYm92ZSBldmVudCBjb3VsZCBoYXZlIHBvdGVudGlhbGx5IHR1cm5lZCBvZmYKLSAg
ICAvLyBzcGVlY2ggaW4gdGhlIGlucHV0IGVsZW1lbnQsIGhlbmNlIHJlbW92aW5nIHRoaXMgYnV0
dG9uIGFuZCByZW5kZXJlciBmcm9tIHRoZSBoaWVyYXJjaHkuCi0gICAgaWYgKHJlbmRlcmVyKCkp
Ci0gICAgICAgIHJlbmRlcmVyKCktPnJlcGFpbnQoKTsKLX0KLQotdm9pZCBJbnB1dEZpZWxkU3Bl
ZWNoQnV0dG9uRWxlbWVudDo6ZGV0YWNoKCkKLXsKLSAgICBpZiAobV9jYXB0dXJpbmcpIHsKLSAg
ICAgICAgaWYgKEZyYW1lKiBmcmFtZSA9IGRvY3VtZW50KCktPmZyYW1lKCkpCi0gICAgICAgICAg
ICBmcmFtZS0+ZXZlbnRIYW5kbGVyKCktPnNldENhcHR1cmluZ01vdXNlRXZlbnRzTm9kZSgwKTsK
LSAgICB9Ci0KLSAgICBpZiAobV9saXN0ZW5lcklkKSB7Ci0gICAgICAgIGlmIChtX3N0YXRlICE9
IElkbGUpCi0gICAgICAgICAgICBzcGVlY2hJbnB1dCgpLT5jYW5jZWxSZWNvZ25pdGlvbihtX2xp
c3RlbmVySWQpOwotICAgICAgICBzcGVlY2hJbnB1dCgpLT51bnJlZ2lzdGVyTGlzdGVuZXIobV9s
aXN0ZW5lcklkKTsKLSAgICAgICAgbV9saXN0ZW5lcklkID0gMDsKLSAgICB9Ci0KLSAgICBUZXh0
Q29udHJvbElubmVyRWxlbWVudDo6ZGV0YWNoKCk7Ci19Ci0KLSNlbmRpZiAvLyBFTkFCTEUoSU5Q
VVRfU1BFRUNIKQotCi19CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvVGV4dENvbnRy
b2xJbm5lckVsZW1lbnRzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1RleHRDb250cm9sSW5uZXJFbGVtZW50cy5oCShyZXZpc2lvbiA3OTI4NykKKysrIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9UZXh0Q29udHJvbElubmVyRWxlbWVudHMuaAkod29ya2luZyBjb3B5
KQpAQCAtMSwxNTggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwOCwgMjAx
MCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
LSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLSAKLSNpZm5kZWYgVGV4dENv
bnRyb2xJbm5lckVsZW1lbnRzX2gKLSNkZWZpbmUgVGV4dENvbnRyb2xJbm5lckVsZW1lbnRzX2gK
LQotI2luY2x1ZGUgIkhUTUxEaXZFbGVtZW50LmgiCi0jaW5jbHVkZSAiU3BlZWNoSW5wdXRMaXN0
ZW5lci5oIgotI2luY2x1ZGUgIlRpbWVyLmgiCi0jaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KLQot
bmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBTcGVlY2hJbnB1dDsKLQotY2xhc3MgVGV4dENv
bnRyb2xJbm5lckVsZW1lbnQgOiBwdWJsaWMgSFRNTERpdkVsZW1lbnQgewotcHVibGljOgotICAg
IHN0YXRpYyBQYXNzUmVmUHRyPFRleHRDb250cm9sSW5uZXJFbGVtZW50PiBjcmVhdGUoSFRNTEVs
ZW1lbnQqIHNoYWRvd1BhcmVudCk7Ci0gICAgdmlydHVhbCB2b2lkIGRldGFjaCgpOwotCi0gICAg
dm9pZCBhdHRhY2hJbm5lckVsZW1lbnQoTm9kZSosIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+LCBS
ZW5kZXJBcmVuYSopOwotCi1wcm90ZWN0ZWQ6Ci0gICAgVGV4dENvbnRyb2xJbm5lckVsZW1lbnQo
RG9jdW1lbnQqLCBIVE1MRWxlbWVudCogc2hhZG93UGFyZW50ID0gMCk7Ci0KLXByaXZhdGU6Ci0g
ICAgdmlydHVhbCBib29sIGlzTW91c2VGb2N1c2FibGUoKSBjb25zdCB7IHJldHVybiBmYWxzZTsg
fQotfTsKLQotY2xhc3MgVGV4dENvbnRyb2xJbm5lclRleHRFbGVtZW50IDogcHVibGljIFRleHRD
b250cm9sSW5uZXJFbGVtZW50IHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxUZXh0
Q29udHJvbElubmVyVGV4dEVsZW1lbnQ+IGNyZWF0ZShEb2N1bWVudCosIEhUTUxFbGVtZW50KiBz
aGFkb3dQYXJlbnQpOwotCi0gICAgdmlydHVhbCB2b2lkIGRlZmF1bHRFdmVudEhhbmRsZXIoRXZl
bnQqKTsKLQotcHJpdmF0ZToKLSAgICBUZXh0Q29udHJvbElubmVyVGV4dEVsZW1lbnQoRG9jdW1l
bnQqLCBIVE1MRWxlbWVudCogc2hhZG93UGFyZW50KTsKLSAgICB2aXJ0dWFsIFJlbmRlck9iamVj
dCogY3JlYXRlUmVuZGVyZXIoUmVuZGVyQXJlbmEqLCBSZW5kZXJTdHlsZSopOyAgCi19OwotCi1j
bGFzcyBTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b25FbGVtZW50IDogcHVibGljIFRleHRDb250cm9s
SW5uZXJFbGVtZW50IHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxTZWFyY2hGaWVs
ZFJlc3VsdHNCdXR0b25FbGVtZW50PiBjcmVhdGUoRG9jdW1lbnQqKTsKLQotICAgIHZpcnR1YWwg
dm9pZCBkZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50Kik7Ci0KLXByaXZhdGU6Ci0gICAgU2VhcmNo
RmllbGRSZXN1bHRzQnV0dG9uRWxlbWVudChEb2N1bWVudCopOwotfTsKLQotY2xhc3MgU2VhcmNo
RmllbGRDYW5jZWxCdXR0b25FbGVtZW50IDogcHVibGljIFRleHRDb250cm9sSW5uZXJFbGVtZW50
IHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxTZWFyY2hGaWVsZENhbmNlbEJ1dHRv
bkVsZW1lbnQ+IGNyZWF0ZShEb2N1bWVudCopOwotCi0gICAgdmlydHVhbCB2b2lkIGRlZmF1bHRF
dmVudEhhbmRsZXIoRXZlbnQqKTsKLQotcHJpdmF0ZToKLSAgICBTZWFyY2hGaWVsZENhbmNlbEJ1
dHRvbkVsZW1lbnQoRG9jdW1lbnQqKTsKLQotICAgIHZpcnR1YWwgdm9pZCBkZXRhY2goKTsKLQot
ICAgIGJvb2wgbV9jYXB0dXJpbmc7Ci19OwotCi1jbGFzcyBTcGluQnV0dG9uRWxlbWVudCA6IHB1
YmxpYyBUZXh0Q29udHJvbElubmVyRWxlbWVudCB7Ci1wdWJsaWM6Ci0gICAgZW51bSBVcERvd25T
dGF0ZSB7Ci0gICAgICAgIEluZGV0ZXJtaW5hdGUsIC8vIEhvdmVyZWQsIGJ1dCB0aGUgZXZlbnQg
aXMgbm90IGhhbmRsZWQuCi0gICAgICAgIERvd24sCi0gICAgICAgIFVwLAotICAgIH07Ci0KLSAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxTcGluQnV0dG9uRWxlbWVudD4gY3JlYXRlKEhUTUxFbGVtZW50
Kik7Ci0gICAgVXBEb3duU3RhdGUgdXBEb3duU3RhdGUoKSBjb25zdCB7IHJldHVybiBtX3VwRG93
blN0YXRlOyB9Ci0KLXByaXZhdGU6Ci0gICAgU3BpbkJ1dHRvbkVsZW1lbnQoSFRNTEVsZW1lbnQq
KTsKLQotICAgIHZpcnR1YWwgdm9pZCBkZXRhY2goKTsKLSAgICB2aXJ0dWFsIGJvb2wgaXNTcGlu
QnV0dG9uRWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KLSAgICAvLyBGSVhNRTogc2hh
ZG93QW5jZXN0b3JOb2RlKCkgc2hvdWxkIGJlIGNvbnN0LgotICAgIHZpcnR1YWwgYm9vbCBpc0Vu
YWJsZWRGb3JtQ29udHJvbCgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PEVsZW1lbnQqPihj
b25zdF9jYXN0PFNwaW5CdXR0b25FbGVtZW50Kj4odGhpcyktPnNoYWRvd0FuY2VzdG9yTm9kZSgp
KS0+aXNFbmFibGVkRm9ybUNvbnRyb2woKTsgfQotICAgIHZpcnR1YWwgYm9vbCBpc1JlYWRPbmx5
Rm9ybUNvbnRyb2woKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxFbGVtZW50Kj4oY29uc3Rf
Y2FzdDxTcGluQnV0dG9uRWxlbWVudCo+KHRoaXMpLT5zaGFkb3dBbmNlc3Rvck5vZGUoKSktPmlz
UmVhZE9ubHlGb3JtQ29udHJvbCgpOyB9Ci0gICAgdmlydHVhbCB2b2lkIGRlZmF1bHRFdmVudEhh
bmRsZXIoRXZlbnQqKTsKLSAgICB2b2lkIHN0YXJ0UmVwZWF0aW5nVGltZXIoKTsKLSAgICB2b2lk
IHN0b3BSZXBlYXRpbmdUaW1lcigpOwotICAgIHZvaWQgcmVwZWF0aW5nVGltZXJGaXJlZChUaW1l
cjxTcGluQnV0dG9uRWxlbWVudD4qKTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0SG92ZXJlZChib29s
ID0gdHJ1ZSk7Ci0KLSAgICBib29sIG1fY2FwdHVyaW5nOwotICAgIFVwRG93blN0YXRlIG1fdXBE
b3duU3RhdGU7Ci0gICAgVXBEb3duU3RhdGUgbV9wcmVzc1N0YXJ0aW5nU3RhdGU7Ci0gICAgVGlt
ZXI8U3BpbkJ1dHRvbkVsZW1lbnQ+IG1fcmVwZWF0aW5nVGltZXI7Ci19OwotCi0jaWYgRU5BQkxF
KElOUFVUX1NQRUVDSCkKLQotY2xhc3MgSW5wdXRGaWVsZFNwZWVjaEJ1dHRvbkVsZW1lbnQKLSAg
ICA6IHB1YmxpYyBUZXh0Q29udHJvbElubmVyRWxlbWVudCwKLSAgICAgIHB1YmxpYyBTcGVlY2hJ
bnB1dExpc3RlbmVyIHsKLXB1YmxpYzoKLSAgICBlbnVtIFNwZWVjaElucHV0U3RhdGUgewotICAg
ICAgICBJZGxlLAotICAgICAgICBSZWNvcmRpbmcsCi0gICAgICAgIFJlY29nbml6aW5nLAotICAg
IH07Ci0KLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxJbnB1dEZpZWxkU3BlZWNoQnV0dG9uRWxlbWVu
dD4gY3JlYXRlKEhUTUxFbGVtZW50Kik7Ci0gICAgdmlydHVhbCB+SW5wdXRGaWVsZFNwZWVjaEJ1
dHRvbkVsZW1lbnQoKTsKLQotICAgIHZpcnR1YWwgdm9pZCBkZXRhY2goKTsKLSAgICB2aXJ0dWFs
IHZvaWQgZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCopOwotICAgIFNwZWVjaElucHV0U3RhdGUg
c3RhdGUoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlOyB9Ci0KLSAgICAvLyBTcGVlY2hJbnB1dExp
c3RlbmVyIG1ldGhvZHMuCi0gICAgdm9pZCBkaWRDb21wbGV0ZVJlY29yZGluZyhpbnQpOwotICAg
IHZvaWQgZGlkQ29tcGxldGVSZWNvZ25pdGlvbihpbnQpOwotICAgIHZvaWQgc2V0UmVjb2duaXRp
b25SZXN1bHQoaW50LCBjb25zdCBTcGVlY2hJbnB1dFJlc3VsdEFycmF5Jik7Ci0KLXByaXZhdGU6
Ci0gICAgSW5wdXRGaWVsZFNwZWVjaEJ1dHRvbkVsZW1lbnQoSFRNTEVsZW1lbnQqKTsKLSAgICBT
cGVlY2hJbnB1dCogc3BlZWNoSW5wdXQoKTsKLSAgICB2b2lkIHNldFN0YXRlKFNwZWVjaElucHV0
U3RhdGUgc3RhdGUpOwotCi0gICAgYm9vbCBtX2NhcHR1cmluZzsKLSAgICBTcGVlY2hJbnB1dFN0
YXRlIG1fc3RhdGU7Ci0gICAgaW50IG1fbGlzdGVuZXJJZDsKLSAgICBTcGVlY2hJbnB1dFJlc3Vs
dEFycmF5IG1fcmVzdWx0czsKLX07Ci0KLSNlbmRpZiAvLyBFTkFCTEUoSU5QVVRfU1BFRUNIKQot
Ci19IC8vIG5hbWVzcGFjZQotCi0jZW5kaWYK
</data>
<flag name="review"
          id="75064"
          type_id="1"
          status="+"
          setter="tkent"
    />
          </attachment>
      

    </bug>

</bugzilla>