<?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>236574</bug_id>
          
          <creation_ts>2022-02-13 16:21:21 -0800</creation_ts>
          <short_desc>[GPU Process] CSSFilter should be created only at the painting time</short_desc>
          <delta_ts>2025-05-28 10:15:42 -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>Layout and Rendering</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>236573</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Said Abou-Hallawa">sabouhallawa</reporter>
          <assigned_to name="Said Abou-Hallawa">sabouhallawa</assigned_to>
          <cc>bfulgham</cc>
    
    <cc>changseok</cc>
    
    <cc>dino</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>fmalita</cc>
    
    <cc>fred.wang</cc>
    
    <cc>glenn</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>pdr</cc>
    
    <cc>schenney</cc>
    
    <cc>sergio</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>zalan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1841084</commentid>
    <comment_count>0</comment_count>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2022-02-13 16:21:21 -0800</bug_when>
    <thetext>CSSFilter::create() is called twice: 

(1) while doing the layout and creating the page layers. This call is mainly for calculating the filter outsets which is used for layer clipping. In this case we do not have a GraphicsContext
(2) while painting in RenderLayerFilters::beginFilterEffect(). In this case we do have a GraphicsContext

Building whole filter chain just to calculate the filter outsets is wrong. Instead we can use the FilterOperation and SVGFilterPrimitiveStandardAttributes superclasses to get their outsets without having to build the FilterEffects.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1841085</commentid>
    <comment_count>1</comment_count>
      <attachid>451846</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2022-02-13 16:50:44 -0800</bug_when>
    <thetext>Created attachment 451846
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1841124</commentid>
    <comment_count>2</comment_count>
      <attachid>451858</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2022-02-13 21:04:46 -0800</bug_when>
    <thetext>Created attachment 451858
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1841386</commentid>
    <comment_count>3</comment_count>
      <attachid>451858</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2022-02-14 13:16:06 -0800</bug_when>
    <thetext>Comment on attachment 451858
Patch

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

&gt; Source/WebCore/rendering/RenderLayerFilters.h:77
&gt; +    RenderingMode m_renderingMode;

Let&apos;s default-initialize this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1844089</commentid>
    <comment_count>4</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2022-02-20 16:22:17 -0800</bug_when>
    <thetext>&lt;rdar://problem/89210004&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1855774</commentid>
    <comment_count>5</comment_count>
      <attachid>455955</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2022-03-28 14:22:33 -0700</bug_when>
    <thetext>Created attachment 455955
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1855823</commentid>
    <comment_count>6</comment_count>
      <attachid>455965</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2022-03-28 16:09:17 -0700</bug_when>
    <thetext>Created attachment 455965
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1855930</commentid>
    <comment_count>7</comment_count>
      <attachid>456001</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2022-03-29 00:16:34 -0700</bug_when>
    <thetext>Created attachment 456001
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1858050</commentid>
    <comment_count>8</comment_count>
      <attachid>456626</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2022-04-04 14:00:52 -0700</bug_when>
    <thetext>Created attachment 456626
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1858197</commentid>
    <comment_count>9</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2022-04-04 19:07:38 -0700</bug_when>
    <thetext>Committed r292364 (249229@main): &lt;https://commits.webkit.org/249229@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 456626.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>2120160</commentid>
    <comment_count>10</comment_count>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2025-05-28 10:15:42 -0700</bug_when>
    <thetext>*** Bug 189896 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>451846</attachid>
            <date>2022-02-13 16:50:44 -0800</date>
            <delta_ts>2022-02-13 21:04:42 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-236574-20220213165043.patch</filename>
            <type>text/plain</type>
            <size>38833</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg5NjgyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNDNmOGI4ZjEwZGRjN2U2
ZDZjN2UxYWMxMjM2ZGIzNWMyMjNlOTFiOC4uMGFiY2RjZWQwNTE1MzNiN2U0YjhkYTJlYjQ3YzZk
ZjU4NGMxOTBjZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDc4IEBACisyMDIyLTAyLTEzICBTYWlk
IEFib3UtSGFsbGF3YSAgPHNhaWRAYXBwbGUuY29tPgorCisgICAgICAgIFtHUFUgUHJvY2Vzc10g
Q1NTRmlsdGVyIHNob3VsZCBiZSBjcmVhdGVkIG9ubHkgYXQgdGhlIHBhaW50aW5nIHRpbWUKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzNjU3NAorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEluc3RlYWQgb2Yg
YnVpbGRpbmcgdGhlIHdob2xlIGZpbHRlciBjaGFpbiB0byBnZXQgdGhlIGZpbHRlciBvdXRzZXRz
IGF0IAorICAgICAgICB0aGUgbGF5b3V0IHRpbWUsIHdlIGNhbiB1c2UgdGhlIFNWR0ZpbHRlclBy
aW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcyBhbmQKKyAgICAgICAgdGhlIEZpbHRlck9wZXJhdGlv
biBzdXBlciBjbGFzc2VzIHRvIGdldCB0aGVpciBvdXRzZXRzIHdpdGhvdXQgaGF2aW5nIHRvCisg
ICAgICAgIGJ1aWxkIHRoZSBGaWx0ZXJFZmZlY3RzLgorCisgICAgICAgIENTU0ZpbHRlcjo6Y2Fs
Y3VsYXRlT3V0c2V0cygpIGlzIGEgc3RhdGljIG1ldGhvZCB3aGljaCB3aWxsIGxvb3AgdGhyb3Vn
aAorICAgICAgICB0aGUgRmlsdGVyT3BlcmF0aW9ucyBhbmQgd2lsbCBhZGQgdXAgdGhlIG91dHNl
dHMgb2YgdGhlIGJsdXIsIHRoZSBkcm9wLQorICAgICAgICBzaGFkb3cgYW5kIHRoZSByZWZlcmVu
Y2UgRmlsdGVyT3BlcmF0aW9uLgorCisgICAgICAgIFNWR0ZpbHRlckJ1aWxkZXI6OmNhbGN1bGF0
ZU91dHNldHMoKSBpcyBhIHN0YXRpYyBtZXRob2Qgd2hpY2ggd2lsbCBsb29wCisgICAgICAgIHRo
cm91Z2ggdGhlIHByaW1pdGl2ZXMgb2YgdGhlIGZpbHRlciBlbGVtZW50IGFuZCB3aWxsIGNhbGwg
dGhlIG5ldyB2aXJ0dWFsIAorICAgICAgICBtZXRob2Qgb3V0c2V0cygpIHdoaWNoIHdpbGwgY2Fs
bCBhIHN0YXRpYyBtZXRob2QgaW4gdGhlIGNvcnJlc3BvbmRpbmcKKyAgICAgICAgRmlsdGVyRWZm
ZWN0LgorCisgICAgICAgIEZFRHJvcFNoYWRvdywgRkVHYXVzc2lhbkJsdXIgYW5kIEZFT2Zmc2V0
IHdpbGwgYmUgcHJvdmlkZSBzdGF0aWMgbWV0aG9kcworICAgICAgICBmb3IgY2FsY3VsYXRpbmcg
dGhlIGVmZmVjdCBvdXRzZXRzLiBUaGVzZSBzdGF0aWMgbWV0aG9kcyB3aWxsIGJlIGNhbGxlZCAK
KyAgICAgICAgZnJvbSBDU1NGaWx0ZXI6OmNhbGN1bGF0ZU91dHNldHMoKSBhbmQgZnJvbSB0aGUg
U1ZHRkV4eHhFbGVtZW50cy4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVEcm9wU2hhZG93LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFRHJvcFNoYWRvdzo6Y2FsY3Vs
YXRlT3V0c2V0cyk6CisgICAgICAgIChXZWJDb3JlOjpGRURyb3BTaGFkb3c6Om91dHNldHMgY29u
c3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEcm9wU2hhZG93Lmg6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUdhdXNzaWFuQmx1ci5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpGRUdhdXNzaWFuQmx1cjo6Y2FsY3VsYXRlT3V0c2V0cyk6Cisg
ICAgICAgIChXZWJDb3JlOjpGRUdhdXNzaWFuQmx1cjo6b3V0c2V0cyBjb25zdCk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUdhdXNzaWFuQmx1ci5oOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVPZmZzZXQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6RkVPZmZzZXQ6OmNhbGN1bGF0ZU91dHNldHMpOgorICAgICAgICAoV2ViQ29yZTo6RkVPZmZz
ZXQ6Om91dHNldHMgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVPZmZzZXQuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvQ1NTRmlsdGVyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OmNhbGN1bGF0ZUJsdXJFZmZlY3RPdXRzZXRzKToKKyAgICAgICAgKFdlYkNvcmU6
OmNhbGN1bGF0ZURyb3BTaGFkb3dFZmZlY3RPdXRzZXRzKToKKyAgICAgICAgKFdlYkNvcmU6OnJl
ZmVyZW5jZUZpbHRlckVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6Y2FsY3VsYXRlUmVmZXJl
bmNlRmlsdGVyT3V0c2V0cyk6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVSZWZlcmVuY2VGaWx0
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjpidWlsZEZpbHRlckZ1bmN0aW9ucyk6
CisgICAgICAgIChXZWJDb3JlOjpDU1NGaWx0ZXI6OmNhbGN1bGF0ZU91dHNldHMpOgorICAgICAg
ICAoV2ViQ29yZTo6Y3JlYXRlU1ZHRmlsdGVyKTogRGVsZXRlZC4KKyAgICAgICAgKiByZW5kZXJp
bmcvQ1NTRmlsdGVyLmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpmaWx0ZXJzRm9yUGFpbnRpbmcgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmNhbGN1bGF0ZUNsaXBSZWN0cyBjb25zdCk6
CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyRmlsdGVycy5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJMYXllckZpbHRlcnM6OlJlbmRlckxheWVyRmlsdGVycyk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJMYXllckZpbHRlcnM6OmJlZ2luRmlsdGVyRWZmZWN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckxheWVyRmlsdGVyczo6c2V0RmlsdGVyKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyRmlsdGVyczo6YnVpbGRGaWx0ZXIpOiBEZWxldGVk
LgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllckZpbHRlcnMuaDoKKyAgICAgICAgKiBz
dmcvU1ZHRkVEcm9wU2hhZG93RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRURy
b3BTaGFkb3dFbGVtZW50OjpvdXRzZXRzIGNvbnN0KToKKyAgICAgICAgKiBzdmcvU1ZHRkVEcm9w
U2hhZG93RWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVHYXVzc2lhbkJsdXJFbGVtZW50OjpvdXRzZXRz
IGNvbnN0KToKKyAgICAgICAgKiBzdmcvU1ZHRkVHYXVzc2lhbkJsdXJFbGVtZW50Lmg6CisgICAg
ICAgICogc3ZnL1NWR0ZFT2Zmc2V0RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdG
RU9mZnNldEVsZW1lbnQ6Om91dHNldHMgY29uc3QpOgorICAgICAgICAqIHN2Zy9TVkdGRU9mZnNl
dEVsZW1lbnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRy
aWJ1dGVzLmg6CisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0
dHJpYnV0ZXM6Om91dHNldHMgY29uc3QpOgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9maWx0ZXJz
L1NWR0ZpbHRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0ZXI6OmNhbGN1bGF0ZVJl
c29sdmVkU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0ZXI6OnJlc29sdmVkU2l6ZSBj
b25zdCk6CisgICAgICAgICogc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyLmg6CisgICAg
ICAgICogc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyQnVpbGRlci5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpTVkdGaWx0ZXJCdWlsZGVyOjpjYWxjdWxhdGVPdXRzZXRzKToKKyAgICAgICAg
KiBzdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXJCdWlsZGVyLmg6CisKIDIwMjItMDItMTEg
IENvbW1pdCBRdWV1ZSAgPGNvbW1pdC1xdWV1ZUB3ZWJraXQub3JnPgogCiAgICAgICAgIFVucmV2
aWV3ZWQsIHJldmVydGluZyByMjg5NDk4LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURyb3BTaGFkb3cuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURyb3BTaGFkb3cuY3BwCmluZGV4IGQzMjkzMzNk
NzkzNTg1Njc4MzY3ZDMzNDIwMmE2YjY2OWIxOTQ1MWYuLmUxNWMzYmRiMzFjZTAwYWY0MGM5ZWMw
YTBmNGQzMDM2YjhjZjY0ZTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVEcm9wU2hhZG93LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRHJvcFNoYWRvdy5jcHAKQEAgLTYxLDE3ICs2MSwyNCBA
QCBGbG9hdFJlY3QgRkVEcm9wU2hhZG93OjpjYWxjdWxhdGVJbWFnZVJlY3QoY29uc3QgRmlsdGVy
JiBmaWx0ZXIsIGNvbnN0IEZpbHRlckltYQogICAgIHJldHVybiBmaWx0ZXIuY2xpcFRvTWF4RWZm
ZWN0UmVjdChpbWFnZVJlY3QsIHByaW1pdGl2ZVN1YnJlZ2lvbik7CiB9CiAKLUludE91dHNldHMg
RkVEcm9wU2hhZG93OjpvdXRzZXRzKGNvbnN0IEZpbHRlciYpIGNvbnN0CitJbnRPdXRzZXRzIEZF
RHJvcFNoYWRvdzo6Y2FsY3VsYXRlT3V0c2V0cyhjb25zdCBGbG9hdFBvaW50JiBvZmZzZXQsIGNv
bnN0IEZsb2F0U2l6ZSYgc3RkRGV2aWF0aW9uKQogewotICAgIEludFNpemUgb3V0c2V0U2l6ZSA9
IEZFR2F1c3NpYW5CbHVyOjpjYWxjdWxhdGVPdXRzZXRTaXplKHsgbV9zdGRYLCBtX3N0ZFkgfSk7
CisgICAgSW50U2l6ZSBvdXRzZXRTaXplID0gRkVHYXVzc2lhbkJsdXI6OmNhbGN1bGF0ZU91dHNl
dFNpemUoc3RkRGV2aWF0aW9uKTsKICAgICByZXR1cm4gewotICAgICAgICBzdGQ6Om1heDxpbnQ+
KDAsIG91dHNldFNpemUuaGVpZ2h0KCkgLSBtX2R5KSwKLSAgICAgICAgc3RkOjptYXg8aW50Pigw
LCBvdXRzZXRTaXplLndpZHRoKCkgKyBtX2R4KSwKLSAgICAgICAgc3RkOjptYXg8aW50PigwLCBv
dXRzZXRTaXplLmhlaWdodCgpICsgbV9keSksCi0gICAgICAgIHN0ZDo6bWF4PGludD4oMCwgb3V0
c2V0U2l6ZS53aWR0aCgpIC0gbV9keCkKKyAgICAgICAgc3RkOjptYXg8aW50PigwLCBvdXRzZXRT
aXplLmhlaWdodCgpIC0gb2Zmc2V0LnkoKSksCisgICAgICAgIHN0ZDo6bWF4PGludD4oMCwgb3V0
c2V0U2l6ZS53aWR0aCgpICsgb2Zmc2V0LngoKSksCisgICAgICAgIHN0ZDo6bWF4PGludD4oMCwg
b3V0c2V0U2l6ZS5oZWlnaHQoKSArIG9mZnNldC55KCkpLAorICAgICAgICBzdGQ6Om1heDxpbnQ+
KDAsIG91dHNldFNpemUud2lkdGgoKSAtIG9mZnNldC54KCkpCiAgICAgfTsKIH0KIAorSW50T3V0
c2V0cyBGRURyb3BTaGFkb3c6Om91dHNldHMoY29uc3QgRmlsdGVyJiBmaWx0ZXIpIGNvbnN0Cit7
CisgICAgYXV0byBvZmZzZXQgPSBmaWx0ZXIucmVzb2x2ZWRTaXplKHsgbV9keCwgbV9keSB9KTsK
KyAgICBhdXRvIHN0ZERldmlhdGlvbiA9IGZpbHRlci5yZXNvbHZlZFNpemUoeyBtX3N0ZFgsIG1f
c3RkWSB9KTsKKyAgICByZXR1cm4gY2FsY3VsYXRlT3V0c2V0cyh0b0Zsb2F0UG9pbnQob2Zmc2V0
KSwgc3RkRGV2aWF0aW9uKTsKK30KKwogc3RkOjp1bmlxdWVfcHRyPEZpbHRlckVmZmVjdEFwcGxp
ZXI+IEZFRHJvcFNoYWRvdzo6Y3JlYXRlU29mdHdhcmVBcHBsaWVyKCkgY29uc3QKIHsKICAgICBy
ZXR1cm4gRmlsdGVyRWZmZWN0QXBwbGllcjo6Y3JlYXRlPEZFRHJvcFNoYWRvd1NvZnR3YXJlQXBw
bGllcj4oKnRoaXMpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRURyb3BTaGFkb3cuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVEcm9wU2hhZG93LmgKaW5kZXggOGEwMzAzZjcwZDY4OGNlMTc2ZTczMTRh
ZWFlODM5MDRjZTBlZGU2ZS4uM2I5NjdlYzUxZjcyMzdhOGMzMmQ0MTg0YjhiZjU3OWNiNDQ3NDky
NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RURyb3BTaGFkb3cuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFRHJvcFNoYWRvdy5oCkBAIC00Nyw2ICs0Nyw4IEBAIHB1YmxpYzoKICAgICBmbG9hdCBz
aGFkb3dPcGFjaXR5KCkgY29uc3QgeyByZXR1cm4gbV9zaGFkb3dPcGFjaXR5OyB9CiAgICAgdm9p
ZCBzZXRTaGFkb3dPcGFjaXR5KGZsb2F0IHNoYWRvd09wYWNpdHkpIHsgbV9zaGFkb3dPcGFjaXR5
ID0gc2hhZG93T3BhY2l0eTsgfQogCisgICAgc3RhdGljIEludE91dHNldHMgY2FsY3VsYXRlT3V0
c2V0cyhjb25zdCBGbG9hdFBvaW50JiBvZmZzZXQsIGNvbnN0IEZsb2F0U2l6ZSYgc3RkRGV2aWF0
aW9uKTsKKwogICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXIm
KSBjb25zdDsKICAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgc3RkOjpvcHRpb25h
bDxSZWY8RkVEcm9wU2hhZG93Pj4gZGVjb2RlKERlY29kZXImKTsKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUdhdXNzaWFuQmx1ci5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFR2F1c3NpYW5CbHVy
LmNwcAppbmRleCA3YTUzNjczNmI2OGUyZjgxOWRkZWE2ZjRkNjFmOTZmNDk3Yjg2ZGY2Li40YmI0
MmM0NWI2ODk5YjM3YjAxOTI2N2Q5NGEzOGYyYjg3NTEzODc0IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFR2F1c3NpYW5CbHVyLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFR2F1c3NpYW5CbHVy
LmNwcApAQCAtMTIwLDEyICsxMjAsMTcgQEAgRmxvYXRSZWN0IEZFR2F1c3NpYW5CbHVyOjpjYWxj
dWxhdGVJbWFnZVJlY3QoY29uc3QgRmlsdGVyJiBmaWx0ZXIsIGNvbnN0IEZpbHRlckkKICAgICBy
ZXR1cm4gZmlsdGVyLmNsaXBUb01heEVmZmVjdFJlY3QoaW1hZ2VSZWN0LCBwcmltaXRpdmVTdWJy
ZWdpb24pOwogfQogCi1JbnRPdXRzZXRzIEZFR2F1c3NpYW5CbHVyOjpvdXRzZXRzKGNvbnN0IEZp
bHRlciYgZmlsdGVyKSBjb25zdAorSW50T3V0c2V0cyBGRUdhdXNzaWFuQmx1cjo6Y2FsY3VsYXRl
T3V0c2V0cyhjb25zdCBGbG9hdFNpemUmIHN0ZERldmlhdGlvbikKIHsKLSAgICBJbnRTaXplIG91
dHNldFNpemUgPSBjYWxjdWxhdGVPdXRzZXRTaXplKGZpbHRlci5yZXNvbHZlZFNpemUoeyBtX3N0
ZFgsIG1fc3RkWSB9KSk7CisgICAgSW50U2l6ZSBvdXRzZXRTaXplID0gY2FsY3VsYXRlT3V0c2V0
U2l6ZShzdGREZXZpYXRpb24pOwogICAgIHJldHVybiB7IG91dHNldFNpemUuaGVpZ2h0KCksIG91
dHNldFNpemUud2lkdGgoKSwgb3V0c2V0U2l6ZS5oZWlnaHQoKSwgb3V0c2V0U2l6ZS53aWR0aCgp
IH07CiB9CiAKK0ludE91dHNldHMgRkVHYXVzc2lhbkJsdXI6Om91dHNldHMoY29uc3QgRmlsdGVy
JiBmaWx0ZXIpIGNvbnN0Cit7CisgICAgcmV0dXJuIGNhbGN1bGF0ZU91dHNldHMoZmlsdGVyLnJl
c29sdmVkU2l6ZSh7IG1fc3RkWCwgbV9zdGRZIH0pKTsKK30KKwogYm9vbCBGRUdhdXNzaWFuQmx1
cjo6cmVzdWx0SXNBbHBoYUltYWdlKGNvbnN0IEZpbHRlckltYWdlVmVjdG9yJiBpbnB1dHMpIGNv
bnN0CiB7CiAgICAgcmV0dXJuIGlucHV0c1swXS0+aXNBbHBoYUltYWdlKCk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFR2F1c3NpYW5CbHVy
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFR2F1c3NpYW5C
bHVyLmgKaW5kZXggODAxNTQ4NDcyNGJhNzcwZWI0YzkwOWMxNzMxMzYyZmE5YjU1NzEzZS4uZjJi
YTk5ZTM4NGRhODU3OGU2MDYzOTFiZjExMTEwNmU0NDYyY2M2YiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUdhdXNzaWFuQmx1ci5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVHYXVzc2lhbkJsdXIu
aApAQCAtNDQsNiArNDQsOCBAQCBwdWJsaWM6CiAgICAgc3RhdGljIEludFNpemUgY2FsY3VsYXRl
VW5zY2FsZWRLZXJuZWxTaXplKEZsb2F0U2l6ZSBzdGREZXZpYXRpb24pOwogICAgIHN0YXRpYyBJ
bnRTaXplIGNhbGN1bGF0ZU91dHNldFNpemUoRmxvYXRTaXplIHN0ZERldmlhdGlvbik7CiAKKyAg
ICBzdGF0aWMgSW50T3V0c2V0cyBjYWxjdWxhdGVPdXRzZXRzKGNvbnN0IEZsb2F0U2l6ZSYgc3Rk
RGV2aWF0aW9uKTsKKwogICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVu
Y29kZXImKSBjb25zdDsKICAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgc3RkOjpv
cHRpb25hbDxSZWY8RkVHYXVzc2lhbkJsdXI+PiBkZWNvZGUoRGVjb2RlciYpOwogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFT2Zmc2V0LmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVPZmZzZXQuY3Bw
CmluZGV4IDM5NWE4MjZiZTAyZDcwYjYyMzkzMWNhYWM4ZTBlY2IwNDMyNzg3M2UuLjcxYjM4OGFj
N2RlMDkxOTFhYTE1NDE2MDMzZDg4NTZjYmQzYjgxNWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVPZmZzZXQuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVPZmZzZXQuY3BwCkBAIC02MCwyMyAr
NjAsMjggQEAgRmxvYXRSZWN0IEZFT2Zmc2V0OjpjYWxjdWxhdGVJbWFnZVJlY3QoY29uc3QgRmls
dGVyJiBmaWx0ZXIsIGNvbnN0IEZpbHRlckltYWdlVmUKICAgICByZXR1cm4gZmlsdGVyLmNsaXBU
b01heEVmZmVjdFJlY3QoaW1hZ2VSZWN0LCBwcmltaXRpdmVTdWJyZWdpb24pOwogfQogCi1JbnRP
dXRzZXRzIEZFT2Zmc2V0OjpvdXRzZXRzKGNvbnN0IEZpbHRlciYgZmlsdGVyKSBjb25zdAorSW50
T3V0c2V0cyBGRU9mZnNldDo6Y2FsY3VsYXRlT3V0c2V0cyhjb25zdCBGbG9hdFBvaW50JiBvZmZz
ZXQpCiB7Ci0gICAgYXV0byBvZmZzZXQgPSBleHBhbmRlZEludFNpemUoZmlsdGVyLnJlc29sdmVk
U2l6ZSh7IG1fZHgsIG1fZHkgfSkpOworICAgIGF1dG8gYWRqdXN0ZWRPZmZzZXQgPSBjZWlsZWRJ
bnRQb2ludChvZmZzZXQpOwogCiAgICAgSW50T3V0c2V0cyBvdXRzZXRzOwotICAgIGlmIChvZmZz
ZXQuaGVpZ2h0KCkgPCAwKQotICAgICAgICBvdXRzZXRzLnNldFRvcCgtb2Zmc2V0LmhlaWdodCgp
KTsKKyAgICBpZiAoYWRqdXN0ZWRPZmZzZXQueSgpIDwgMCkKKyAgICAgICAgb3V0c2V0cy5zZXRU
b3AoLWFkanVzdGVkT2Zmc2V0LnkoKSk7CiAgICAgZWxzZQotICAgICAgICBvdXRzZXRzLnNldEJv
dHRvbShvZmZzZXQuaGVpZ2h0KCkpOwotICAgIGlmIChvZmZzZXQud2lkdGgoKSA8IDApCi0gICAg
ICAgIG91dHNldHMuc2V0TGVmdCgtb2Zmc2V0LndpZHRoKCkpOworICAgICAgICBvdXRzZXRzLnNl
dEJvdHRvbShhZGp1c3RlZE9mZnNldC55KCkpOworICAgIGlmIChhZGp1c3RlZE9mZnNldC54KCkg
PCAwKQorICAgICAgICBvdXRzZXRzLnNldExlZnQoLWFkanVzdGVkT2Zmc2V0LngoKSk7CiAgICAg
ZWxzZQotICAgICAgICBvdXRzZXRzLnNldFJpZ2h0KG9mZnNldC53aWR0aCgpKTsKKyAgICAgICAg
b3V0c2V0cy5zZXRSaWdodChhZGp1c3RlZE9mZnNldC54KCkpOwogCiAgICAgcmV0dXJuIG91dHNl
dHM7CiB9CiAKK0ludE91dHNldHMgRkVPZmZzZXQ6Om91dHNldHMoY29uc3QgRmlsdGVyJiBmaWx0
ZXIpIGNvbnN0Cit7CisgICAgcmV0dXJuIGNhbGN1bGF0ZU91dHNldHModG9GbG9hdFBvaW50KGZp
bHRlci5yZXNvbHZlZFNpemUoeyBtX2R4LCBtX2R5IH0pKSk7Cit9CisKIGJvb2wgRkVPZmZzZXQ6
OnJlc3VsdElzQWxwaGFJbWFnZShjb25zdCBGaWx0ZXJJbWFnZVZlY3RvciYgaW5wdXRzKSBjb25z
dAogewogICAgIHJldHVybiBpbnB1dHNbMF0tPmlzQWxwaGFJbWFnZSgpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU9mZnNldC5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU9mZnNldC5oCmluZGV4IGNi
YTAwNmNlMmI4OWE3OWIzNDljZDRjYThkZjViNjIyOWM0ZTVlZjMuLmMyZmFjMjk4MGVmYTI3N2E5
MzJlOTBmNzViNTE1MDAwMTljZDliMmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVPZmZzZXQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFT2Zmc2V0LmgKQEAgLTM2LDYgKzM2LDggQEAgcHVibGlj
OgogICAgIGZsb2F0IGR5KCkgY29uc3QgeyByZXR1cm4gbV9keTsgfQogICAgIHZvaWQgc2V0RHko
ZmxvYXQpOwogCisgICAgc3RhdGljIEludE91dHNldHMgY2FsY3VsYXRlT3V0c2V0cyhjb25zdCBG
bG9hdFBvaW50JiBvZmZzZXQpOworCiAgICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBl
bmNvZGUoRW5jb2RlciYpIGNvbnN0OwogICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRp
YyBzdGQ6Om9wdGlvbmFsPFJlZjxGRU9mZnNldD4+IGRlY29kZShEZWNvZGVyJik7CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9DU1NGaWx0ZXIuY3BwIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL0NTU0ZpbHRlci5jcHAKaW5kZXggNjM2ZDgxNDUxMWJmMzU3YTEyYmU1
MWE1Yjg3YzQ1Mjc2NDc4ZmUyNy4uZTg2YzE2YzJlNzMwN2ZjNjVlMTZjYWNhNmE1NGY5NmFlM2I5
ZjY4MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0NTU0ZpbHRlci5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0NTU0ZpbHRlci5jcHAKQEAgLTc2LDYgKzc2
LDEyIEBAIENTU0ZpbHRlcjo6Q1NTRmlsdGVyKFZlY3RvcjxSZWY8RmlsdGVyRnVuY3Rpb24+PiYm
IGZ1bmN0aW9ucykKIHsKIH0KIAorc3RhdGljIEludE91dHNldHMgY2FsY3VsYXRlQmx1ckVmZmVj
dE91dHNldHMoY29uc3QgQmx1ckZpbHRlck9wZXJhdGlvbiYgYmx1ck9wZXJhdGlvbikKK3sKKyAg
ICBmbG9hdCBzdGREZXZpYXRpb24gPSBmbG9hdFZhbHVlRm9yTGVuZ3RoKGJsdXJPcGVyYXRpb24u
c3RkRGV2aWF0aW9uKCksIDApOworICAgIHJldHVybiBGRUdhdXNzaWFuQmx1cjo6Y2FsY3VsYXRl
T3V0c2V0cyh7IHN0ZERldmlhdGlvbiwgc3RkRGV2aWF0aW9uIH0pOworfQorCiBzdGF0aWMgUmVm
UHRyPEZpbHRlckVmZmVjdD4gY3JlYXRlQmx1ckVmZmVjdChjb25zdCBCbHVyRmlsdGVyT3BlcmF0
aW9uJiBibHVyT3BlcmF0aW9uLCBGaWx0ZXI6OkNsaXBPcGVyYXRpb24gY2xpcE9wZXJhdGlvbikK
IHsKICAgICBmbG9hdCBzdGREZXZpYXRpb24gPSBmbG9hdFZhbHVlRm9yTGVuZ3RoKGJsdXJPcGVy
YXRpb24uc3RkRGV2aWF0aW9uKCksIDApOwpAQCAtMTA1LDYgKzExMSwxMiBAQCBzdGF0aWMgUmVm
UHRyPEZpbHRlckVmZmVjdD4gY3JlYXRlQ29udHJhc3RFZmZlY3QoY29uc3QgQmFzaWNDb21wb25l
bnRUcmFuc2ZlckZpbAogICAgIHJldHVybiBGRUNvbXBvbmVudFRyYW5zZmVyOjpjcmVhdGUodHJh
bnNmZXJGdW5jdGlvbiwgdHJhbnNmZXJGdW5jdGlvbiwgdHJhbnNmZXJGdW5jdGlvbiwgbnVsbEZ1
bmN0aW9uKTsKIH0KIAorc3RhdGljIEludE91dHNldHMgY2FsY3VsYXRlRHJvcFNoYWRvd0VmZmVj
dE91dHNldHMoY29uc3QgRHJvcFNoYWRvd0ZpbHRlck9wZXJhdGlvbiYgZHJvcFNoYWRvd09wZXJh
dGlvbikKK3sKKyAgICBmbG9hdCBzdGREZXZpYXRpb24gPSBkcm9wU2hhZG93T3BlcmF0aW9uLnN0
ZERldmlhdGlvbigpOworICAgIHJldHVybiBGRURyb3BTaGFkb3c6OmNhbGN1bGF0ZU91dHNldHMo
RmxvYXRQb2ludChkcm9wU2hhZG93T3BlcmF0aW9uLngoKSwgZHJvcFNoYWRvd09wZXJhdGlvbi55
KCkpLCB7IHN0ZERldmlhdGlvbiwgc3RkRGV2aWF0aW9uIH0pOworfQorCiBzdGF0aWMgUmVmUHRy
PEZpbHRlckVmZmVjdD4gY3JlYXRlRHJvcFNoYWRvd0VmZmVjdChjb25zdCBEcm9wU2hhZG93Rmls
dGVyT3BlcmF0aW9uJiBkcm9wU2hhZG93T3BlcmF0aW9uKQogewogICAgIGZsb2F0IHN0ZCA9IGRy
b3BTaGFkb3dPcGVyYXRpb24uc3RkRGV2aWF0aW9uKCk7CkBAIC0yMTksNyArMjMxLDcgQEAgc3Rh
dGljIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGNyZWF0ZVNlcGlhRWZmZWN0KGNvbnN0IEJhc2ljQ29s
b3JNYXRyaXhGaWx0ZXJPcGVyYXQKICAgICByZXR1cm4gRkVDb2xvck1hdHJpeDo6Y3JlYXRlKEZF
Q09MT1JNQVRSSVhfVFlQRV9NQVRSSVgsIFdURk1vdmUoaW5wdXRQYXJhbWV0ZXJzKSk7CiB9CiAK
LXN0YXRpYyBSZWZQdHI8U1ZHRmlsdGVyPiBjcmVhdGVTVkdGaWx0ZXIoQ1NTRmlsdGVyJiBmaWx0
ZXIsIGNvbnN0IFJlZmVyZW5jZUZpbHRlck9wZXJhdGlvbiYgZmlsdGVyT3BlcmF0aW9uLCBSZW5k
ZXJFbGVtZW50JiByZW5kZXJlciwgY29uc3QgRmxvYXRSZWN0JiB0YXJnZXRCb3VuZGluZ0JveCkK
K3N0YXRpYyBTVkdGaWx0ZXJFbGVtZW50KiByZWZlcmVuY2VGaWx0ZXJFbGVtZW50KGNvbnN0IFJl
ZmVyZW5jZUZpbHRlck9wZXJhdGlvbiYgZmlsdGVyT3BlcmF0aW9uLCBSZW5kZXJFbGVtZW50JiBy
ZW5kZXJlcikKIHsKICAgICBhdXRvJiByZWZlcmVuY2VkU1ZHUmVzb3VyY2VzID0gcmVuZGVyZXIu
ZW5zdXJlUmVmZXJlbmNlZFNWR1Jlc291cmNlcygpOwogICAgIGF1dG8qIGZpbHRlckVsZW1lbnQg
PSByZWZlcmVuY2VkU1ZHUmVzb3VyY2VzLnJlZmVyZW5jZWRGaWx0ZXJFbGVtZW50KHJlbmRlcmVy
LmRvY3VtZW50KCksIGZpbHRlck9wZXJhdGlvbik7CkBAIC0yMzIsNiArMjQ0LDI0IEBAIHN0YXRp
YyBSZWZQdHI8U1ZHRmlsdGVyPiBjcmVhdGVTVkdGaWx0ZXIoQ1NTRmlsdGVyJiBmaWx0ZXIsIGNv
bnN0IFJlZmVyZW5jZUZpbHRlCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KIAorICAg
IHJldHVybiBmaWx0ZXJFbGVtZW50OworfQorCitzdGF0aWMgSW50T3V0c2V0cyBjYWxjdWxhdGVS
ZWZlcmVuY2VGaWx0ZXJPdXRzZXRzKGNvbnN0IFJlZmVyZW5jZUZpbHRlck9wZXJhdGlvbiYgZmls
dGVyT3BlcmF0aW9uLCBSZW5kZXJFbGVtZW50JiByZW5kZXJlcikKK3sKKyAgICBhdXRvIGZpbHRl
ckVsZW1lbnQgPSByZWZlcmVuY2VGaWx0ZXJFbGVtZW50KGZpbHRlck9wZXJhdGlvbiwgcmVuZGVy
ZXIpOworICAgIGlmICghZmlsdGVyRWxlbWVudCkKKyAgICAgICAgcmV0dXJuIHsgfTsKKworICAg
IHJldHVybiBTVkdGaWx0ZXJCdWlsZGVyOjpjYWxjdWxhdGVPdXRzZXRzKCpmaWx0ZXJFbGVtZW50
LCByZW5kZXJlci5vYmplY3RCb3VuZGluZ0JveCgpKTsKK30KKworc3RhdGljIFJlZlB0cjxTVkdG
aWx0ZXI+IGNyZWF0ZVJlZmVyZW5jZUZpbHRlcihDU1NGaWx0ZXImIGZpbHRlciwgY29uc3QgUmVm
ZXJlbmNlRmlsdGVyT3BlcmF0aW9uJiBmaWx0ZXJPcGVyYXRpb24sIFJlbmRlckVsZW1lbnQmIHJl
bmRlcmVyLCBjb25zdCBGbG9hdFJlY3QmIHRhcmdldEJvdW5kaW5nQm94KQoreworICAgIGF1dG8g
ZmlsdGVyRWxlbWVudCA9IHJlZmVyZW5jZUZpbHRlckVsZW1lbnQoZmlsdGVyT3BlcmF0aW9uLCBy
ZW5kZXJlcik7CisgICAgaWYgKCFmaWx0ZXJFbGVtZW50KQorICAgICAgICByZXR1cm4gbnVsbHB0
cjsKKwogICAgIGF1dG8gZmlsdGVyUmVnaW9uID0gU1ZHTGVuZ3RoQ29udGV4dDo6cmVzb2x2ZVJl
Y3RhbmdsZTxTVkdGaWx0ZXJFbGVtZW50PihmaWx0ZXJFbGVtZW50LCBmaWx0ZXJFbGVtZW50LT5m
aWx0ZXJVbml0cygpLCB0YXJnZXRCb3VuZGluZ0JveCk7CiAKICAgICBTVkdGaWx0ZXJCdWlsZGVy
IGJ1aWxkZXI7CkBAIC0yNDAsOCArMjcwLDcgQEAgc3RhdGljIFJlZlB0cjxTVkdGaWx0ZXI+IGNy
ZWF0ZVNWR0ZpbHRlcihDU1NGaWx0ZXImIGZpbHRlciwgY29uc3QgUmVmZXJlbmNlRmlsdGUKIAog
Ym9vbCBDU1NGaWx0ZXI6OmJ1aWxkRmlsdGVyRnVuY3Rpb25zKFJlbmRlckVsZW1lbnQmIHJlbmRl
cmVyLCBjb25zdCBGaWx0ZXJPcGVyYXRpb25zJiBvcGVyYXRpb25zLCBjb25zdCBGbG9hdFJlY3Qm
IHRhcmdldEJvdW5kaW5nQm94KQogewotICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGVmZmVjdDsK
LSAgICBSZWZQdHI8U1ZHRmlsdGVyPiBmaWx0ZXI7CisgICAgUmVmUHRyPEZpbHRlckZ1bmN0aW9u
PiBmdW5jdGlvbjsKIAogICAgIGZvciAoYXV0byYgb3BlcmF0aW9uIDogb3BlcmF0aW9ucy5vcGVy
YXRpb25zKCkpIHsKICAgICAgICAgc3dpdGNoIChvcGVyYXRpb24tPnR5cGUoKSkgewpAQCAtMjUw
LDYzICsyNzksNjAgQEAgYm9vbCBDU1NGaWx0ZXI6OmJ1aWxkRmlsdGVyRnVuY3Rpb25zKFJlbmRl
ckVsZW1lbnQmIHJlbmRlcmVyLCBjb25zdCBGaWx0ZXJPcGVyYXQKICAgICAgICAgICAgIGJyZWFr
OwogCiAgICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpCTFVSOgotICAgICAgICAgICAgZWZm
ZWN0ID0gY3JlYXRlQmx1ckVmZmVjdChkb3duY2FzdDxCbHVyRmlsdGVyT3BlcmF0aW9uPigqb3Bl
cmF0aW9uKSwgY2xpcE9wZXJhdGlvbigpKTsKKyAgICAgICAgICAgIGZ1bmN0aW9uID0gY3JlYXRl
Qmx1ckVmZmVjdChkb3duY2FzdDxCbHVyRmlsdGVyT3BlcmF0aW9uPigqb3BlcmF0aW9uKSwgY2xp
cE9wZXJhdGlvbigpKTsKICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIGNhc2UgRmlsdGVy
T3BlcmF0aW9uOjpCUklHSFRORVNTOgotICAgICAgICAgICAgZWZmZWN0ID0gY3JlYXRlQnJpZ2h0
bmVzc0VmZmVjdChkb3duY2FzdDxCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9u
Pigqb3BlcmF0aW9uKSk7CisgICAgICAgICAgICBmdW5jdGlvbiA9IGNyZWF0ZUJyaWdodG5lc3NF
ZmZlY3QoZG93bmNhc3Q8QmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlvbj4oKm9w
ZXJhdGlvbikpOwogICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgY2FzZSBGaWx0ZXJPcGVy
YXRpb246OkNPTlRSQVNUOgotICAgICAgICAgICAgZWZmZWN0ID0gY3JlYXRlQ29udHJhc3RFZmZl
Y3QoZG93bmNhc3Q8QmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlvbj4oKm9wZXJh
dGlvbikpOworICAgICAgICAgICAgZnVuY3Rpb24gPSBjcmVhdGVDb250cmFzdEVmZmVjdChkb3du
Y2FzdDxCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uPigqb3BlcmF0aW9uKSk7
CiAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6RFJP
UF9TSEFET1c6Ci0gICAgICAgICAgICBlZmZlY3QgPSBjcmVhdGVEcm9wU2hhZG93RWZmZWN0KGRv
d25jYXN0PERyb3BTaGFkb3dGaWx0ZXJPcGVyYXRpb24+KCpvcGVyYXRpb24pKTsKKyAgICAgICAg
ICAgIGZ1bmN0aW9uID0gY3JlYXRlRHJvcFNoYWRvd0VmZmVjdChkb3duY2FzdDxEcm9wU2hhZG93
RmlsdGVyT3BlcmF0aW9uPigqb3BlcmF0aW9uKSk7CiAgICAgICAgICAgICBicmVhazsKIAogICAg
ICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6R1JBWVNDQUxFOgotICAgICAgICAgICAgZWZmZWN0
ID0gY3JlYXRlR3JheVNjYWxlRWZmZWN0KGRvd25jYXN0PEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJP
cGVyYXRpb24+KCpvcGVyYXRpb24pKTsKKyAgICAgICAgICAgIGZ1bmN0aW9uID0gY3JlYXRlR3Jh
eVNjYWxlRWZmZWN0KGRvd25jYXN0PEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24+KCpv
cGVyYXRpb24pKTsKICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIGNhc2UgRmlsdGVyT3Bl
cmF0aW9uOjpIVUVfUk9UQVRFOgotICAgICAgICAgICAgZWZmZWN0ID0gY3JlYXRlSHVlUm90YXRl
RWZmZWN0KGRvd25jYXN0PEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24+KCpvcGVyYXRp
b24pKTsKKyAgICAgICAgICAgIGZ1bmN0aW9uID0gY3JlYXRlSHVlUm90YXRlRWZmZWN0KGRvd25j
YXN0PEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24+KCpvcGVyYXRpb24pKTsKICAgICAg
ICAgICAgIGJyZWFrOwogCiAgICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpJTlZFUlQ6Ci0g
ICAgICAgICAgICBlZmZlY3QgPSBjcmVhdGVJbnZlcnRFZmZlY3QoZG93bmNhc3Q8QmFzaWNDb21w
b25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlvbj4oKm9wZXJhdGlvbikpOworICAgICAgICAgICAg
ZnVuY3Rpb24gPSBjcmVhdGVJbnZlcnRFZmZlY3QoZG93bmNhc3Q8QmFzaWNDb21wb25lbnRUcmFu
c2ZlckZpbHRlck9wZXJhdGlvbj4oKm9wZXJhdGlvbikpOwogICAgICAgICAgICAgYnJlYWs7CiAK
ICAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246Ok9QQUNJVFk6Ci0gICAgICAgICAgICBlZmZl
Y3QgPSBjcmVhdGVPcGFjaXR5RWZmZWN0KGRvd25jYXN0PEJhc2ljQ29tcG9uZW50VHJhbnNmZXJG
aWx0ZXJPcGVyYXRpb24+KCpvcGVyYXRpb24pKTsKKyAgICAgICAgICAgIGZ1bmN0aW9uID0gY3Jl
YXRlT3BhY2l0eUVmZmVjdChkb3duY2FzdDxCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3Bl
cmF0aW9uPigqb3BlcmF0aW9uKSk7CiAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICBjYXNl
IEZpbHRlck9wZXJhdGlvbjo6U0FUVVJBVEU6Ci0gICAgICAgICAgICBlZmZlY3QgPSBjcmVhdGVT
YXR1cmF0ZUVmZmVjdChkb3duY2FzdDxCYXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uPigq
b3BlcmF0aW9uKSk7CisgICAgICAgICAgICBmdW5jdGlvbiA9IGNyZWF0ZVNhdHVyYXRlRWZmZWN0
KGRvd25jYXN0PEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24+KCpvcGVyYXRpb24pKTsK
ICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpTRVBJ
QToKLSAgICAgICAgICAgIGVmZmVjdCA9IGNyZWF0ZVNlcGlhRWZmZWN0KGRvd25jYXN0PEJhc2lj
Q29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24+KCpvcGVyYXRpb24pKTsKKyAgICAgICAgICAgIGZ1
bmN0aW9uID0gY3JlYXRlU2VwaWFFZmZlY3QoZG93bmNhc3Q8QmFzaWNDb2xvck1hdHJpeEZpbHRl
ck9wZXJhdGlvbj4oKm9wZXJhdGlvbikpOwogICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAg
Y2FzZSBGaWx0ZXJPcGVyYXRpb246OlJFRkVSRU5DRToKLSAgICAgICAgICAgIGZpbHRlciA9IGNy
ZWF0ZVNWR0ZpbHRlcigqdGhpcywgZG93bmNhc3Q8UmVmZXJlbmNlRmlsdGVyT3BlcmF0aW9uPigq
b3BlcmF0aW9uKSwgcmVuZGVyZXIsIHRhcmdldEJvdW5kaW5nQm94KTsKKyAgICAgICAgICAgIGZ1
bmN0aW9uID0gY3JlYXRlUmVmZXJlbmNlRmlsdGVyKCp0aGlzLCBkb3duY2FzdDxSZWZlcmVuY2VG
aWx0ZXJPcGVyYXRpb24+KCpvcGVyYXRpb24pLCByZW5kZXJlciwgdGFyZ2V0Qm91bmRpbmdCb3gp
OwogICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKCFmaWx0ZXIgJiYgIWVmZmVjdCkKKyAgICAg
ICAgaWYgKCFmdW5jdGlvbikKICAgICAgICAgICAgIGNvbnRpbnVlOwogCiAgICAgICAgIGlmICht
X2Z1bmN0aW9ucy5pc0VtcHR5KCkpCiAgICAgICAgICAgICBtX2Z1bmN0aW9ucy5hcHBlbmQoU291
cmNlR3JhcGhpYzo6Y3JlYXRlKCkpOwogCi0gICAgICAgIGlmIChmaWx0ZXIpCi0gICAgICAgICAg
ICBtX2Z1bmN0aW9ucy5hcHBlbmQoZmlsdGVyLnJlbGVhc2VOb25OdWxsKCkpOwotICAgICAgICBl
bHNlCi0gICAgICAgICAgICBtX2Z1bmN0aW9ucy5hcHBlbmQoZWZmZWN0LnJlbGVhc2VOb25OdWxs
KCkpOworICAgICAgICBtX2Z1bmN0aW9ucy5hcHBlbmQoZnVuY3Rpb24ucmVsZWFzZU5vbk51bGwo
KSk7CiAgICAgfQogCiAgICAgLy8gSWYgd2UgZGlkbid0IG1ha2UgYW55IGVmZmVjdHMsIHRlbGwg
b3VyIGNhbGxlciB3ZSBhcmUgbm90IHZhbGlkLgpAQCAtMzcxLDYgKzM5NywzMiBAQCB2b2lkIENT
U0ZpbHRlcjo6c2V0RmlsdGVyUmVnaW9uKGNvbnN0IEZsb2F0UmVjdCYgZmlsdGVyUmVnaW9uKQog
ICAgIGNsYW1wRmlsdGVyUmVnaW9uSWZOZWVkZWQoKTsKIH0KIAorSW50T3V0c2V0cyBDU1NGaWx0
ZXI6OmNhbGN1bGF0ZU91dHNldHMoUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIsIGNvbnN0IEZpbHRl
ck9wZXJhdGlvbnMmIG9wZXJhdGlvbnMpCit7CisgICAgSW50T3V0c2V0cyBvdXRzZXRzOworCisg
ICAgZm9yIChhdXRvJiBvcGVyYXRpb24gOiBvcGVyYXRpb25zLm9wZXJhdGlvbnMoKSkgeworICAg
ICAgICBzd2l0Y2ggKG9wZXJhdGlvbi0+dHlwZSgpKSB7CisgICAgICAgIGNhc2UgRmlsdGVyT3Bl
cmF0aW9uOjpCTFVSOgorICAgICAgICAgICAgb3V0c2V0cyArPSBjYWxjdWxhdGVCbHVyRWZmZWN0
T3V0c2V0cyhkb3duY2FzdDxCbHVyRmlsdGVyT3BlcmF0aW9uPigqb3BlcmF0aW9uKSk7CisgICAg
ICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6RFJPUF9TSEFE
T1c6CisgICAgICAgICAgICBvdXRzZXRzICs9IGNhbGN1bGF0ZURyb3BTaGFkb3dFZmZlY3RPdXRz
ZXRzKGRvd25jYXN0PERyb3BTaGFkb3dGaWx0ZXJPcGVyYXRpb24+KCpvcGVyYXRpb24pKTsKKyAg
ICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpSRUZFUkVO
Q0U6CisgICAgICAgICAgICBvdXRzZXRzICs9IGNhbGN1bGF0ZVJlZmVyZW5jZUZpbHRlck91dHNl
dHMoZG93bmNhc3Q8UmVmZXJlbmNlRmlsdGVyT3BlcmF0aW9uPigqb3BlcmF0aW9uKSwgcmVuZGVy
ZXIpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIG91dHNldHM7Cit9CisKIElu
dE91dHNldHMgQ1NTRmlsdGVyOjpvdXRzZXRzKCkgY29uc3QKIHsKICAgICBpZiAoIW1faGFzRmls
dGVyVGhhdE1vdmVzUGl4ZWxzKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L0NTU0ZpbHRlci5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0NTU0ZpbHRlci5oCmluZGV4
IDc3NDZmZjVlMzJkOTBhM2I2MGNkMTAyZDVkZWU2M2FiMjI2OTM0YjMuLmRhNzk5M2M3MzJkMTY4
ODYxNzlhYWI1NmI1NTllZWZlYTg3ZWQwZDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9DU1NGaWx0ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvQ1NTRmls
dGVyLmgKQEAgLTUzLDYgKzUzLDggQEAgcHVibGljOgogCiAgICAgUmVmUHRyPEZpbHRlckltYWdl
PiBhcHBseShGaWx0ZXJJbWFnZSogc291cmNlSW1hZ2UsIEZpbHRlclJlc3VsdHMmKSBmaW5hbDsK
IAorICAgIHN0YXRpYyBJbnRPdXRzZXRzIGNhbGN1bGF0ZU91dHNldHMoUmVuZGVyRWxlbWVudCYs
IGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmKTsKKwogcHJpdmF0ZToKICAgICBDU1NGaWx0ZXIoUmVu
ZGVyaW5nTW9kZSwgY29uc3QgRmxvYXRTaXplJiBmaWx0ZXJTY2FsZSwgQ2xpcE9wZXJhdGlvbiwg
Ym9vbCBoYXNGaWx0ZXJUaGF0TW92ZXNQaXhlbHMsIGJvb2wgaGFzRmlsdGVyVGhhdFNob3VsZEJl
UmVzdHJpY3RlZEJ5U2VjdXJpdHlPcmlnaW4pOwogICAgIENTU0ZpbHRlcihWZWN0b3I8UmVmPEZp
bHRlckZ1bmN0aW9uPj4mJik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyTGF5ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNw
cAppbmRleCAzNjcwMTVmZmRmMzRkNzVhYzRlYmIxNTEyZWMxZWYyYWVhNzVjNDE4Li5hMTFmNzc1
Y2NmYjA2NjE0MmIyNTE0ZjJkNzJlMjFmMGFiNzY1ZDYxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJMYXllci5jcHAKQEAgLTMyNjQsNyArMzI2NCw3IEBAIFJlbmRlckxheWVyRmls
dGVycyogUmVuZGVyTGF5ZXI6OmZpbHRlcnNGb3JQYWludGluZyhHcmFwaGljc0NvbnRleHQmIGNv
bnRleHQsIE9wCiAgICAgaWYgKCFwYWludHNXaXRoRmlsdGVycygpKQogICAgICAgICByZXR1cm4g
bnVsbHB0cjsKIAotICAgIGlmIChtX2ZpbHRlcnMgJiYgbV9maWx0ZXJzLT5maWx0ZXIoKSkKKyAg
ICBpZiAobV9maWx0ZXJzKQogICAgICAgICByZXR1cm4gbV9maWx0ZXJzLmdldCgpOwogCiAgICAg
cmV0dXJuIG51bGxwdHI7CkBAIC01NTk2LDcgKzU1OTYsNyBAQCB2b2lkIFJlbmRlckxheWVyOjpl
bnN1cmVMYXllckZpbHRlcnMoKQogICAgIGlmIChtX2ZpbHRlcnMpCiAgICAgICAgIHJldHVybjsK
ICAgICAKLSAgICBtX2ZpbHRlcnMgPSBtYWtlVW5pcXVlPFJlbmRlckxheWVyRmlsdGVycz4oKnRo
aXMpOworICAgIG1fZmlsdGVycyA9IG1ha2VVbmlxdWU8UmVuZGVyTGF5ZXJGaWx0ZXJzPigqdGhp
cywgcGFnZSgpLmRldmljZVNjYWxlRmFjdG9yKCksIHJlbmRlcmVyKCkucGFnZSgpLmFjY2VsZXJh
dGVkRmlsdGVyc0VuYWJsZWQoKSA/IFJlbmRlcmluZ01vZGU6OkFjY2VsZXJhdGVkIDogUmVuZGVy
aW5nTW9kZTo6VW5hY2NlbGVyYXRlZCk7CiB9CiAKIHZvaWQgUmVuZGVyTGF5ZXI6OmNsZWFyTGF5
ZXJGaWx0ZXJzKCkKQEAgLTU2NjgsNyArNTY2OCw3IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0
ZUZpbHRlclBhaW50aW5nU3RyYXRlZ3koKQogICAgICAgICAvLyBEb24ndCBkZWxldGUgdGhlIHdo
b2xlIGZpbHRlciBpbmZvIGhlcmUsIGJlY2F1c2Ugd2UgbWlnaHQgdXNlIGl0CiAgICAgICAgIC8v
IGZvciBsb2FkaW5nIFNWRyByZWZlcmVuY2UgZmlsdGVyIGZpbGVzLgogICAgICAgICBpZiAobV9m
aWx0ZXJzKQotICAgICAgICAgICAgbV9maWx0ZXJzLT5zZXRGaWx0ZXIobnVsbHB0cik7CisgICAg
ICAgICAgICBtX2ZpbHRlcnMtPmNsZWFyRmlsdGVyKCk7CiAKICAgICAgICAgLy8gRWFybHktcmV0
dXJuIG9ubHkgaWYgd2UgKmRvbid0KiBoYXZlIHJlZmVyZW5jZSBmaWx0ZXJzLgogICAgICAgICAv
LyBGb3IgcmVmZXJlbmNlIGZpbHRlcnMsIHdlIHN0aWxsIHdhbnQgdGhlIEZpbHRlckVmZmVjdCBn
cmFwaCBidWlsdApAQCAtNTY3OCwxNCArNTY3OCwxMSBAQCB2b2lkIFJlbmRlckxheWVyOjp1cGRh
dGVGaWx0ZXJQYWludGluZ1N0cmF0ZWd5KCkKICAgICB9CiAgICAgCiAgICAgZW5zdXJlTGF5ZXJG
aWx0ZXJzKCk7Ci0gICAgbV9maWx0ZXJzLT5idWlsZEZpbHRlcihyZW5kZXJlcigpLCBwYWdlKCku
ZGV2aWNlU2NhbGVGYWN0b3IoKSwgcmVuZGVyZXIoKS5wYWdlKCkuYWNjZWxlcmF0ZWRGaWx0ZXJz
RW5hYmxlZCgpID8gUmVuZGVyaW5nTW9kZTo6QWNjZWxlcmF0ZWQgOiBSZW5kZXJpbmdNb2RlOjpV
bmFjY2VsZXJhdGVkKTsKIH0KIAogSW50T3V0c2V0cyBSZW5kZXJMYXllcjo6ZmlsdGVyT3V0c2V0
cygpIGNvbnN0CiB7Ci0gICAgaWYgKG1fZmlsdGVycykKLSAgICAgICAgcmV0dXJuIG1fZmlsdGVy
cy0+ZmlsdGVyKCkgPyBtX2ZpbHRlcnMtPmZpbHRlcigpLT5vdXRzZXRzKCkgOiBJbnRPdXRzZXRz
KCk7Ci0gICAgcmV0dXJuIHJlbmRlcmVyKCkuc3R5bGUoKS5maWx0ZXJPdXRzZXRzKCk7CisgICAg
cmV0dXJuIENTU0ZpbHRlcjo6Y2FsY3VsYXRlT3V0c2V0cyhyZW5kZXJlcigpLCByZW5kZXJlcigp
LnN0eWxlKCkuZmlsdGVyKCkpOwogfQogCiBzdGF0aWMgUmVuZGVyTGF5ZXIqIHBhcmVudExheWVy
Q3Jvc3NGcmFtZShjb25zdCBSZW5kZXJMYXllciYgbGF5ZXIpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJGaWx0ZXJzLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJMYXllckZpbHRlcnMuY3BwCmluZGV4IDViYTk0Y2ZkNWRiYjFlNDRi
NWZiZDNjNWJjMTFhZDE5YWVhZjhmNWQuLmRiMmRmNzU3NDZlODA3NThmMWNmZDIzMWIyNWMzMTZk
YzIxZmRlM2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXll
ckZpbHRlcnMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckZp
bHRlcnMuY3BwCkBAIC00MCw4ICs0MCwxMCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVJl
bmRlckxheWVyRmlsdGVyczo6UmVuZGVyTGF5ZXJGaWx0ZXJzKFJlbmRlckxheWVyJiBsYXllcikK
K1JlbmRlckxheWVyRmlsdGVyczo6UmVuZGVyTGF5ZXJGaWx0ZXJzKFJlbmRlckxheWVyJiBsYXll
ciwgZmxvYXQgc2NhbGVGYWN0b3IsIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSkKICAgICA6
IG1fbGF5ZXIobGF5ZXIpCisgICAgLCBtX2ZpbHRlclNjYWxlKEZsb2F0U2l6ZShzY2FsZUZhY3Rv
ciwgc2NhbGVGYWN0b3IpKQorICAgICwgbV9yZW5kZXJpbmdNb2RlKHJlbmRlcmluZ01vZGUpCiB7
CiB9CiAKQEAgLTUwLDExICs1Miw2IEBAIFJlbmRlckxheWVyRmlsdGVyczo6flJlbmRlckxheWVy
RmlsdGVycygpCiAgICAgcmVtb3ZlUmVmZXJlbmNlRmlsdGVyQ2xpZW50cygpOwogfQogCi12b2lk
IFJlbmRlckxheWVyRmlsdGVyczo6c2V0RmlsdGVyKFJlZlB0cjxDU1NGaWx0ZXI+JiYgZmlsdGVy
KQotewotICAgIG1fZmlsdGVyID0gV1RGTW92ZShmaWx0ZXIpOwotfQotCiBib29sIFJlbmRlckxh
eWVyRmlsdGVyczo6aGFzRmlsdGVyVGhhdE1vdmVzUGl4ZWxzKCkgY29uc3QKIHsKICAgICByZXR1
cm4gbV9maWx0ZXIgJiYgbV9maWx0ZXItPmhhc0ZpbHRlclRoYXRNb3Zlc1BpeGVscygpOwpAQCAt
MTE2LDE0ICsxMTMsNiBAQCB2b2lkIFJlbmRlckxheWVyRmlsdGVyczo6cmVtb3ZlUmVmZXJlbmNl
RmlsdGVyQ2xpZW50cygpCiAgICAgbV9pbnRlcm5hbFNWR1JlZmVyZW5jZXMuY2xlYXIoKTsKIH0K
IAotdm9pZCBSZW5kZXJMYXllckZpbHRlcnM6OmJ1aWxkRmlsdGVyKFJlbmRlckVsZW1lbnQmIHJl
bmRlcmVyLCBmbG9hdCBzY2FsZUZhY3RvciwgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlKQot
ewotICAgIC8vIElmIHRoZSBmaWx0ZXIgZmFpbHMgdG8gYnVpbGQsIHJlbW92ZSBpdCBmcm9tIHRo
ZSBsYXllci4gSXQgd2lsbCBzdGlsbCBhdHRlbXB0IHRvCi0gICAgLy8gZ28gdGhyb3VnaCByZWd1
bGFyIHByb2Nlc3NpbmcgKGUuZy4gY29tcG9zaXRpbmcpLCBidXQgbmV2ZXIgYXBwbHkgYW55dGhp
bmcuCi0gICAgLy8gRklYTUU6IFRoaXMgcmVidWlsZHMgdGhlIGVudGlyZSBlZmZlY3RzIGNoYWlu
IGV2ZW4gaWYgdGhlIGZpbHRlciBzdHlsZSBkaWRuJ3QgY2hhbmdlLgotICAgIG1fZmlsdGVyID0g
Q1NTRmlsdGVyOjpjcmVhdGUocmVuZGVyZXIsIHJlbmRlcmVyLnN0eWxlKCkuZmlsdGVyKCksIHJl
bmRlcmluZ01vZGUsIEZsb2F0U2l6ZSB7IHNjYWxlRmFjdG9yLCBzY2FsZUZhY3RvciB9LCBGaWx0
ZXI6OkNsaXBPcGVyYXRpb246OlVuaXRlLCBtX3RhcmdldEJvdW5kaW5nQm94KTsKLX0KLQogR3Jh
cGhpY3NDb250ZXh0KiBSZW5kZXJMYXllckZpbHRlcnM6OmlucHV0Q29udGV4dCgpCiB7CiAgICAg
cmV0dXJuIG1fc291cmNlSW1hZ2UgPyAmbV9zb3VyY2VJbWFnZS0+Y29udGV4dCgpIDogbnVsbHB0
cjsKQEAgLTE0MCwyNSArMTI5LDIxIEBAIHZvaWQgUmVuZGVyTGF5ZXJGaWx0ZXJzOjphbGxvY2F0
ZUJhY2tpbmdTdG9yZUlmTmVlZGVkKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKIAogR3JhcGhp
Y3NDb250ZXh0KiBSZW5kZXJMYXllckZpbHRlcnM6OmJlZ2luRmlsdGVyRWZmZWN0KFJlbmRlckVs
ZW1lbnQmIHJlbmRlcmVyLCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IExheW91dFJl
Y3QmIGZpbHRlckJveFJlY3QsIGNvbnN0IExheW91dFJlY3QmIGRpcnR5UmVjdCwgY29uc3QgTGF5
b3V0UmVjdCYgbGF5ZXJSZXBhaW50UmVjdCkKIHsKLSAgICBpZiAoIW1fZmlsdGVyKQotICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKLQogICAgIC8vIENhbGN1bGF0ZSB0YXJnZXRCb3VuZGluZ0JveCBz
aW5jZSBpdCB3aWxsIGJlIHVzZWQgaWYgdGhlIGZpbHRlciBpcyBjcmVhdGVkLgogICAgIGF1dG8g
dGFyZ2V0Qm91bmRpbmdCb3ggPSBpbnRlcnNlY3Rpb24oZmlsdGVyQm94UmVjdCwgZGlydHlSZWN0
KTsKICAgICBpZiAodGFyZ2V0Qm91bmRpbmdCb3guaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4g
bnVsbHB0cjsKIAotICAgIGlmIChtX3RhcmdldEJvdW5kaW5nQm94ICE9IHRhcmdldEJvdW5kaW5n
Qm94KSB7CisgICAgaWYgKCFtX2ZpbHRlciB8fCBtX3RhcmdldEJvdW5kaW5nQm94ICE9IHRhcmdl
dEJvdW5kaW5nQm94KSB7CiAgICAgICAgIG1fdGFyZ2V0Qm91bmRpbmdCb3ggPSB0YXJnZXRCb3Vu
ZGluZ0JveDsKLSAgICAgICAgLy8gRklYTUU6IFRoaXMgcmVidWlsZHMgdGhlIGVudGlyZSBlZmZl
Y3RzIGNoYWluIGV2ZW4gaWYgdGhlIGZpbHRlciBzdHlsZSBkaWRuJ3QgY2hhbmdlLgotICAgICAg
ICBtX2ZpbHRlciA9IENTU0ZpbHRlcjo6Y3JlYXRlKHJlbmRlcmVyLCByZW5kZXJlci5zdHlsZSgp
LmZpbHRlcigpLCBtX2ZpbHRlci0+cmVuZGVyaW5nTW9kZSgpLCBtX2ZpbHRlci0+ZmlsdGVyU2Nh
bGUoKSwgRmlsdGVyOjpDbGlwT3BlcmF0aW9uOjpVbml0ZSwgbV90YXJnZXRCb3VuZGluZ0JveCk7
CisgICAgICAgIG1fZmlsdGVyID0gQ1NTRmlsdGVyOjpjcmVhdGUocmVuZGVyZXIsIHJlbmRlcmVy
LnN0eWxlKCkuZmlsdGVyKCksIG1fcmVuZGVyaW5nTW9kZSwgbV9maWx0ZXJTY2FsZSwgRmlsdGVy
OjpDbGlwT3BlcmF0aW9uOjpVbml0ZSwgbV90YXJnZXRCb3VuZGluZ0JveCk7CiAgICAgfQogCiAg
ICAgaWYgKCFtX2ZpbHRlcikKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICBhdXRvJiBm
aWx0ZXIgPSAqbV9maWx0ZXI7Ci0gICAgCisKICAgICAvLyBGb3IgQ1NTRmlsdGVyLCBmaWx0ZXJS
ZWdpb24gPSB0YXJnZXRCb3VuZGluZ0JveCArIGZpbHRlci0+b3V0c2V0cygpCiAgICAgYXV0byBm
aWx0ZXJSZWdpb24gPSB0YXJnZXRCb3VuZGluZ0JveDsKICAgICBpZiAoZmlsdGVyLmhhc0ZpbHRl
clRoYXRNb3Zlc1BpeGVscygpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckxheWVyRmlsdGVycy5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxh
eWVyRmlsdGVycy5oCmluZGV4IDA1MTNjODg1YjQwYjc1ZTAxMzJmM2VhZGZlZjYwYzc4Njc4OWI5
ZDguLmQ2NTg1MzcxNjJmNWFiNWMxMmFmODUxODk5ZGNmNjJkMjI3ZjY3ZWUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckZpbHRlcnMuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJGaWx0ZXJzLmgKQEAgLTQzLDIzICs0Mywy
MSBAQCBjbGFzcyBGaWx0ZXJPcGVyYXRpb25zOwogY2xhc3MgUmVuZGVyTGF5ZXJGaWx0ZXJzIGZp
bmFsIDogcHJpdmF0ZSBDYWNoZWRTVkdEb2N1bWVudENsaWVudCB7CiAgICAgV1RGX01BS0VfRkFT
VF9BTExPQ0FURUQ7CiBwdWJsaWM6Ci0gICAgZXhwbGljaXQgUmVuZGVyTGF5ZXJGaWx0ZXJzKFJl
bmRlckxheWVyJik7CisgICAgZXhwbGljaXQgUmVuZGVyTGF5ZXJGaWx0ZXJzKFJlbmRlckxheWVy
JiwgZmxvYXQgc2NhbGVGYWN0b3IsIFJlbmRlcmluZ01vZGUpOwogICAgIHZpcnR1YWwgflJlbmRl
ckxheWVyRmlsdGVycygpOwogCiAgICAgY29uc3QgTGF5b3V0UmVjdCYgZGlydHlTb3VyY2VSZWN0
KCkgY29uc3QgeyByZXR1cm4gbV9kaXJ0eVNvdXJjZVJlY3Q7IH0KICAgICB2b2lkIGV4cGFuZERp
cnR5U291cmNlUmVjdChjb25zdCBMYXlvdXRSZWN0JiByZWN0KSB7IG1fZGlydHlTb3VyY2VSZWN0
LnVuaXRlKHJlY3QpOyB9CiAKICAgICBDU1NGaWx0ZXIqIGZpbHRlcigpIGNvbnN0IHsgcmV0dXJu
IG1fZmlsdGVyLmdldCgpOyB9Ci0gICAgdm9pZCBzZXRGaWx0ZXIoUmVmUHRyPENTU0ZpbHRlcj4m
Jik7Ci0gICAgCisgICAgdm9pZCBjbGVhckZpbHRlcigpIHsgbV9maWx0ZXIgPSBudWxscHRyOyB9
CisKICAgICBib29sIGhhc0ZpbHRlclRoYXRNb3Zlc1BpeGVscygpIGNvbnN0OwogICAgIGJvb2wg
aGFzRmlsdGVyVGhhdFNob3VsZEJlUmVzdHJpY3RlZEJ5U2VjdXJpdHlPcmlnaW4oKSBjb25zdDsK
IAogICAgIHZvaWQgdXBkYXRlUmVmZXJlbmNlRmlsdGVyQ2xpZW50cyhjb25zdCBGaWx0ZXJPcGVy
YXRpb25zJik7CiAgICAgdm9pZCByZW1vdmVSZWZlcmVuY2VGaWx0ZXJDbGllbnRzKCk7CiAKLSAg
ICB2b2lkIGJ1aWxkRmlsdGVyKFJlbmRlckVsZW1lbnQmLCBmbG9hdCBzY2FsZUZhY3RvciwgUmVu
ZGVyaW5nTW9kZSk7Ci0KICAgICAvLyBQZXIgcmVuZGVyCiAgICAgTGF5b3V0UmVjdCByZXBhaW50
UmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVwYWludFJlY3Q7IH0KIApAQCAtNzMsNiArNzEsOCBA
QCBwcml2YXRlOgogICAgIHZvaWQgYWxsb2NhdGVCYWNraW5nU3RvcmVJZk5lZWRlZChHcmFwaGlj
c0NvbnRleHQmKTsKIAogICAgIFJlbmRlckxheWVyJiBtX2xheWVyOworICAgIEZsb2F0U2l6ZSBt
X2ZpbHRlclNjYWxlOworICAgIFJlbmRlcmluZ01vZGUgbV9yZW5kZXJpbmdNb2RlOwogCiAgICAg
VmVjdG9yPFJlZlB0cjxFbGVtZW50Pj4gbV9pbnRlcm5hbFNWR1JlZmVyZW5jZXM7CiAgICAgVmVj
dG9yPENhY2hlZFJlc291cmNlSGFuZGxlPENhY2hlZFNWR0RvY3VtZW50Pj4gbV9leHRlcm5hbFNW
R1JlZmVyZW5jZXM7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVEcm9wU2hh
ZG93RWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVEcm9wU2hhZG93RWxlbWVu
dC5jcHAKaW5kZXggNDU5OTEwZTU0ZDJmNjA1NmVhMjU5YjE4ODM5YjNlM2U5YjUzMTY4Mi4uMmE4
ZTJkYzEwYzNhMzBkNzc4MGFmMzQ5OWQ2ZjE5YjQwYmY4NmI1MCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvc3ZnL1NWR0ZFRHJvcFNoYWRvd0VsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdGRURyb3BTaGFkb3dFbGVtZW50LmNwcApAQCAtOTYsNiArOTYsMTMgQEAgdm9p
ZCBTVkdGRURyb3BTaGFkb3dFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxp
ZmllZE5hbWUmIGF0dHJOYW1lKQogICAgIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmli
dXRlczo6c3ZnQXR0cmlidXRlQ2hhbmdlZChhdHRyTmFtZSk7CiB9CiAKK0ludE91dHNldHMgU1ZH
RkVEcm9wU2hhZG93RWxlbWVudDo6b3V0c2V0cyhjb25zdCBGbG9hdFJlY3QmIHRhcmdldEJvdW5k
aW5nQm94LCBTVkdVbml0VHlwZXM6OlNWR1VuaXRUeXBlIHByaW1pdGl2ZVVuaXRzKSBjb25zdAor
eworICAgIGF1dG8gb2Zmc2V0ID0gU1ZHRmlsdGVyOjpjYWxjdWxhdGVSZXNvbHZlZFNpemUoeyBk
eCgpLCBkeSgpIH0sIHRhcmdldEJvdW5kaW5nQm94LCBwcmltaXRpdmVVbml0cyk7CisgICAgYXV0
byBzdGREZXZpYXRpb24gPSBTVkdGaWx0ZXI6OmNhbGN1bGF0ZVJlc29sdmVkU2l6ZSh7IHN0ZERl
dmlhdGlvblgoKSwgc3RkRGV2aWF0aW9uWSgpIH0sIHRhcmdldEJvdW5kaW5nQm94LCBwcmltaXRp
dmVVbml0cyk7CisgICAgcmV0dXJuIEZFRHJvcFNoYWRvdzo6Y2FsY3VsYXRlT3V0c2V0cyh0b0Zs
b2F0UG9pbnQob2Zmc2V0KSwgc3RkRGV2aWF0aW9uKTsKK30KKwogUmVmUHRyPEZpbHRlckVmZmVj
dD4gU1ZHRkVEcm9wU2hhZG93RWxlbWVudDo6ZmlsdGVyRWZmZWN0KGNvbnN0IFNWR0ZpbHRlckJ1
aWxkZXImLCBjb25zdCBGaWx0ZXJFZmZlY3RWZWN0b3ImKSBjb25zdAogewogICAgIFJlbmRlck9i
amVjdCogcmVuZGVyZXIgPSB0aGlzLT5yZW5kZXJlcigpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvc3ZnL1NWR0ZFRHJvcFNoYWRvd0VsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdGRURyb3BTaGFkb3dFbGVtZW50LmgKaW5kZXggNDliZWYwYTNlNGM3MmZhOWUyZjMzYTc2YTk1
OWZkZWY0ZjM2MjFjOC4uNWExZTc2ZGI5MmRkMDFkZTM2ZWQyMDM1MGViNDc5ZTViMjg3MGVkZCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRHJvcFNoYWRvd0VsZW1lbnQuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVEcm9wU2hhZG93RWxlbWVudC5oCkBAIC01NCw2
ICs1NCw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1
YWxpZmllZE5hbWUmKSBvdmVycmlkZTsKIAogICAgIFZlY3RvcjxBdG9tU3RyaW5nPiBmaWx0ZXJF
ZmZlY3RJbnB1dHNOYW1lcygpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHsgaW4xKCkgfTsgfQor
ICAgIEludE91dHNldHMgb3V0c2V0cyhjb25zdCBGbG9hdFJlY3QmIHRhcmdldEJvdW5kaW5nQm94
LCBTVkdVbml0VHlwZXM6OlNWR1VuaXRUeXBlIHByaW1pdGl2ZVVuaXRzKSBjb25zdCBvdmVycmlk
ZTsKICAgICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBmaWx0ZXJFZmZlY3QoY29uc3QgU1ZHRmlsdGVy
QnVpbGRlciYsIGNvbnN0IEZpbHRlckVmZmVjdFZlY3RvciYpIGNvbnN0IG92ZXJyaWRlOwogCiAg
ICAgUHJvcGVydHlSZWdpc3RyeSBtX3Byb3BlcnR5UmVnaXN0cnkgeyAqdGhpcyB9OwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFR2F1c3NpYW5CbHVyRWxlbWVudC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVHYXVzc2lhbkJsdXJFbGVtZW50LmNwcAppbmRleCBiNWYz
YzdiNmNlZmZkNjVkZmQwYWUxMWE0YTliMmIyZTBkODNiOGEzLi5iMDExYmQ1ZjFjM2RlNWE4ZTVk
ZGRjODc1YTVmMjM4MTYzNmNlY2QzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
RkVHYXVzc2lhbkJsdXJFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVH
YXVzc2lhbkJsdXJFbGVtZW50LmNwcApAQCAtOTQsNiArOTQsMTIgQEAgdm9pZCBTVkdGRUdhdXNz
aWFuQmx1ckVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYg
YXR0ck5hbWUKICAgICBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OnN2Z0F0
dHJpYnV0ZUNoYW5nZWQoYXR0ck5hbWUpOwogfQogCitJbnRPdXRzZXRzIFNWR0ZFR2F1c3NpYW5C
bHVyRWxlbWVudDo6b3V0c2V0cyhjb25zdCBGbG9hdFJlY3QmIHRhcmdldEJvdW5kaW5nQm94LCBT
VkdVbml0VHlwZXM6OlNWR1VuaXRUeXBlIHByaW1pdGl2ZVVuaXRzKSBjb25zdAoreworICAgIGF1
dG8gc3RkRGV2aWF0aW9uID0gU1ZHRmlsdGVyOjpjYWxjdWxhdGVSZXNvbHZlZFNpemUoeyBzdGRE
ZXZpYXRpb25YKCksIHN0ZERldmlhdGlvblkoKSB9LCB0YXJnZXRCb3VuZGluZ0JveCwgcHJpbWl0
aXZlVW5pdHMpOworICAgIHJldHVybiBGRUdhdXNzaWFuQmx1cjo6Y2FsY3VsYXRlT3V0c2V0cyhz
dGREZXZpYXRpb24pOworfQorCiBSZWZQdHI8RmlsdGVyRWZmZWN0PiBTVkdGRUdhdXNzaWFuQmx1
ckVsZW1lbnQ6OmZpbHRlckVmZmVjdChjb25zdCBTVkdGaWx0ZXJCdWlsZGVyJiwgY29uc3QgRmls
dGVyRWZmZWN0VmVjdG9yJikgY29uc3QKIHsKICAgICBpZiAoc3RkRGV2aWF0aW9uWCgpIDwgMCB8
fCBzdGREZXZpYXRpb25ZKCkgPCAwKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NW
R0ZFR2F1c3NpYW5CbHVyRWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFR2F1c3Np
YW5CbHVyRWxlbWVudC5oCmluZGV4IDUyMWFlMjA0ZWI0ZjUyYzZkMzc5OTllNDRlMjJiMDUyODhi
ODMyYjIuLjEzNmY0NDI5MmU5NzNkNjFhYzg5ZmZkNmMwNGU4ZmFkMDAxYTRmNDYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVHYXVzc2lhbkJsdXJFbGVtZW50LmgKQEAgLTU0LDYgKzU0
LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIHN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlm
aWVkTmFtZSYpIG92ZXJyaWRlOwogCiAgICAgVmVjdG9yPEF0b21TdHJpbmc+IGZpbHRlckVmZmVj
dElucHV0c05hbWVzKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4geyBpbjEoKSB9OyB9CisgICAg
SW50T3V0c2V0cyBvdXRzZXRzKGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0Qm91bmRpbmdCb3gsIFNW
R1VuaXRUeXBlczo6U1ZHVW5pdFR5cGUgcHJpbWl0aXZlVW5pdHMpIGNvbnN0IG92ZXJyaWRlOwog
ICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGZpbHRlckVmZmVjdChjb25zdCBTVkdGaWx0ZXJCdWls
ZGVyJiwgY29uc3QgRmlsdGVyRWZmZWN0VmVjdG9yJikgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICBQ
cm9wZXJ0eVJlZ2lzdHJ5IG1fcHJvcGVydHlSZWdpc3RyeSB7ICp0aGlzIH07CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVPZmZzZXRFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdGRU9mZnNldEVsZW1lbnQuY3BwCmluZGV4IDg0M2Y4ZGU3N2FiOGM4MWRiYTMz
YWYyMWRmNjBjOGQyZThjYjI3NDMuLmI0M2NjNWFlYzVhZGUwNTg1OTFkMDRkOWM1YWM4ODQ0MDU5
MWJhMjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRU9mZnNldEVsZW1lbnQu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRU9mZnNldEVsZW1lbnQuY3BwCkBAIC03
OSw2ICs3OSwxMiBAQCB2b2lkIFNWR0ZFT2Zmc2V0RWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdl
ZChjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKICAgICBTVkdGaWx0ZXJQcmltaXRpdmVT
dGFuZGFyZEF0dHJpYnV0ZXM6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoYXR0ck5hbWUpOwogfQogCitJ
bnRPdXRzZXRzIFNWR0ZFT2Zmc2V0RWxlbWVudDo6b3V0c2V0cyhjb25zdCBGbG9hdFJlY3QmIHRh
cmdldEJvdW5kaW5nQm94LCBTVkdVbml0VHlwZXM6OlNWR1VuaXRUeXBlIHByaW1pdGl2ZVVuaXRz
KSBjb25zdAoreworICAgIGF1dG8gb2Zmc2V0ID0gU1ZHRmlsdGVyOjpjYWxjdWxhdGVSZXNvbHZl
ZFNpemUoeyBkeCgpLCBkeSgpIH0sIHRhcmdldEJvdW5kaW5nQm94LCBwcmltaXRpdmVVbml0cyk7
CisgICAgcmV0dXJuIEZFT2Zmc2V0OjpjYWxjdWxhdGVPdXRzZXRzKHRvRmxvYXRQb2ludChvZmZz
ZXQpKTsKK30KKwogUmVmUHRyPEZpbHRlckVmZmVjdD4gU1ZHRkVPZmZzZXRFbGVtZW50OjpmaWx0
ZXJFZmZlY3QoY29uc3QgU1ZHRmlsdGVyQnVpbGRlciYsIGNvbnN0IEZpbHRlckVmZmVjdFZlY3Rv
ciYpIGNvbnN0CiB7CiAgICAgcmV0dXJuIEZFT2Zmc2V0OjpjcmVhdGUoZHgoKSwgZHkoKSk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVPZmZzZXRFbGVtZW50LmggYi9Tb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHRkVPZmZzZXRFbGVtZW50LmgKaW5kZXggZjg1OTU5OGEwZmU2YTBk
N2E4ODRiMGMwYzViOThiZWYyY2Y0N2JiZC4uMTU2ZWRkZjQ2OTlkYmM2YTIyNWZiYTU5ZTAyOThk
NmU3OWY3YjA4YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFT2Zmc2V0RWxl
bWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRU9mZnNldEVsZW1lbnQuaApAQCAt
NDgsNiArNDgsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgc3ZnQXR0cmlidXRlQ2hhbmdlZChjb25z
dCBRdWFsaWZpZWROYW1lJikgb3ZlcnJpZGU7CiAKICAgICBWZWN0b3I8QXRvbVN0cmluZz4gZmls
dGVyRWZmZWN0SW5wdXRzTmFtZXMoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB7IGluMSgpIH07
IH0KKyAgICBJbnRPdXRzZXRzIG91dHNldHMoY29uc3QgRmxvYXRSZWN0JiB0YXJnZXRCb3VuZGlu
Z0JveCwgU1ZHVW5pdFR5cGVzOjpTVkdVbml0VHlwZSBwcmltaXRpdmVVbml0cykgY29uc3Qgb3Zl
cnJpZGU7CiAgICAgUmVmUHRyPEZpbHRlckVmZmVjdD4gZmlsdGVyRWZmZWN0KGNvbnN0IFNWR0Zp
bHRlckJ1aWxkZXImLCBjb25zdCBGaWx0ZXJFZmZlY3RWZWN0b3ImKSBjb25zdCBvdmVycmlkZTsK
IAogICAgIFByb3BlcnR5UmVnaXN0cnkgbV9wcm9wZXJ0eVJlZ2lzdHJ5IHsgKnRoaXMgfTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0
dHJpYnV0ZXMuaCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFy
ZEF0dHJpYnV0ZXMuaAppbmRleCA3ZGY5MjA2ZmFhOTFlYWZlZmVmZGE1MjllOTJmNjljNTFmM2Q4
ZWQ5Li5iMjJlNTM5NWNkNDhiYWFhNDYxZjFkMDFhZDRlZDNmYWQyZjdkY2I4IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVz
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0
cmlidXRlcy5oCkBAIC01Myw2ICs1Myw3IEBAIHB1YmxpYzoKICAgICAvLyBSZXR1cm5zIHRydWUs
IGlmIHRoZSBuZXcgdmFsdWUgaXMgZGlmZmVyZW50IGZyb20gdGhlIG9sZCBvbmUuCiAgICAgdmly
dHVhbCBib29sIHNldEZpbHRlckVmZmVjdEF0dHJpYnV0ZShGaWx0ZXJFZmZlY3QqLCBjb25zdCBR
dWFsaWZpZWROYW1lJik7CiAgICAgdmlydHVhbCBWZWN0b3I8QXRvbVN0cmluZz4gZmlsdGVyRWZm
ZWN0SW5wdXRzTmFtZXMoKSBjb25zdCB7IHJldHVybiB7IH07IH0KKyAgICB2aXJ0dWFsIEludE91
dHNldHMgb3V0c2V0cyhjb25zdCBGbG9hdFJlY3QmLCBTVkdVbml0VHlwZXM6OlNWR1VuaXRUeXBl
KSBjb25zdCB7IHJldHVybiB7IH07IH0KICAgICB2aXJ0dWFsIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+
IGZpbHRlckVmZmVjdChjb25zdCBTVkdGaWx0ZXJCdWlsZGVyJiwgY29uc3QgRmlsdGVyRWZmZWN0
VmVjdG9yJikgY29uc3QgPSAwOwogCiBwcm90ZWN0ZWQ6CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUv
c3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyLmNwcAppbmRleCA5NWYyNGE3ZGQ5ZTY0ZWVk
MDZiNThiNTI5YTg1MDBkZjlhOGNmOTYzLi5kN2RhODBiZWExNDQ4ZDFiMzc1ZWUwNzE4NTIwZDM4
ODhlNzMyY2M5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVy
cy9TVkdGaWx0ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJz
L1NWR0ZpbHRlci5jcHAKQEAgLTc0LDkgKzc0LDE0IEBAIFNWR0ZpbHRlcjo6U1ZHRmlsdGVyKGNv
bnN0IEZsb2F0UmVjdCYgdGFyZ2V0Qm91bmRpbmdCb3gsIFNWR1VuaXRUeXBlczo6U1ZHVW5pdFR5
CiB7CiB9CiAKK0Zsb2F0U2l6ZSBTVkdGaWx0ZXI6OmNhbGN1bGF0ZVJlc29sdmVkU2l6ZShjb25z
dCBGbG9hdFNpemUmIHNpemUsIGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0Qm91bmRpbmdCb3gsIFNW
R1VuaXRUeXBlczo6U1ZHVW5pdFR5cGUgcHJpbWl0aXZlVW5pdHMpCit7CisgICAgcmV0dXJuIHBy
aW1pdGl2ZVVuaXRzID09IFNWR1VuaXRUeXBlczo6U1ZHX1VOSVRfVFlQRV9PQkpFQ1RCT1VORElO
R0JPWCA/IHNpemUgKiB0YXJnZXRCb3VuZGluZ0JveC5zaXplKCkgOiBzaXplOworfQorCiBGbG9h
dFNpemUgU1ZHRmlsdGVyOjpyZXNvbHZlZFNpemUoY29uc3QgRmxvYXRTaXplJiBzaXplKSBjb25z
dAogewotICAgIHJldHVybiBtX3ByaW1pdGl2ZVVuaXRzID09IFNWR1VuaXRUeXBlczo6U1ZHX1VO
SVRfVFlQRV9PQkpFQ1RCT1VORElOR0JPWCA/IHNpemUgKiBtX3RhcmdldEJvdW5kaW5nQm94LnNp
emUoKSA6IHNpemU7CisgICAgcmV0dXJuIGNhbGN1bGF0ZVJlc29sdmVkU2l6ZShzaXplLCBtX3Rh
cmdldEJvdW5kaW5nQm94LCBtX3ByaW1pdGl2ZVVuaXRzKTsKIH0KIAogYm9vbCBTVkdGaWx0ZXI6
OnN1cHBvcnRzQWNjZWxlcmF0ZWRSZW5kZXJpbmcoKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyLmggYi9Tb3VyY2UvV2ViQ29y
ZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXIuaAppbmRleCA0ZWUwZmI4N2FmMWMxYTQx
ZGVmMTg2YTU1MzQxMjhiYTY3ODBlOWNjLi4yY2RjNDhjMjU3NGJlY2MxYTRjY2JlYjQwZDFjOTU5
ZDRmZDA0YzU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVy
cy9TVkdGaWx0ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9T
VkdGaWx0ZXIuaApAQCAtNDgsOCArNDgsMTAgQEAgcHVibGljOgogCiAgICAgUmVmUHRyPEZpbHRl
ckltYWdlPiBhcHBseShGaWx0ZXJJbWFnZSogc291cmNlSW1hZ2UsIEZpbHRlclJlc3VsdHMmKSBm
aW5hbDsKIAotICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6
OlRleHRTdHJlYW0mLCBGaWx0ZXJSZXByZXNlbnRhdGlvbikgY29uc3QgZmluYWw7CisgICAgc3Rh
dGljIEZsb2F0U2l6ZSBjYWxjdWxhdGVSZXNvbHZlZFNpemUoY29uc3QgRmxvYXRTaXplJiwgY29u
c3QgRmxvYXRSZWN0JiB0YXJnZXRCb3VuZGluZ0JveCwgU1ZHVW5pdFR5cGVzOjpTVkdVbml0VHlw
ZSBwcmltaXRpdmVVbml0cyk7CiAKKyAgICBXVEY6OlRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVz
ZW50YXRpb24oV1RGOjpUZXh0U3RyZWFtJiwgRmlsdGVyUmVwcmVzZW50YXRpb24pIGNvbnN0IGZp
bmFsOworICAgIAogcHJpdmF0ZToKICAgICBTVkdGaWx0ZXIoUmVuZGVyaW5nTW9kZSwgY29uc3Qg
RmxvYXRTaXplJiBmaWx0ZXJTY2FsZSwgQ2xpcE9wZXJhdGlvbiwgY29uc3QgRmxvYXRSZWN0JiBm
aWx0ZXJSZWdpb24sIGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0Qm91bmRpbmdCb3gsIFNWR1VuaXRU
eXBlczo6U1ZHVW5pdFR5cGUgcHJpbWl0aXZlVW5pdHMpOwogICAgIFNWR0ZpbHRlcihjb25zdCBG
bG9hdFJlY3QmIHRhcmdldEJvdW5kaW5nQm94LCBTVkdVbml0VHlwZXM6OlNWR1VuaXRUeXBlIHBy
aW1pdGl2ZVVuaXRzLCBTVkdGaWx0ZXJFeHByZXNzaW9uJiYpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyQnVpbGRlci5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXJCdWlsZGVyLmNwcAppbmRl
eCA1Zjg4NTY1MDA4YmNmN2Q2ZGM4ZDU5MGUwNzAzNjgwMzAzZjE0NDA3Li43NTBmMGE4MzQyMGJj
YzI0NTBhNDJhY2JlOTY5NWU5OTk1ZGRiZTMyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9z
dmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXJCdWlsZGVyLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXJCdWlsZGVyLmNwcApAQCAtMzcsNiAr
MzcsNzMgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBt
YXhUb3RhbE51bWJlckZpbHRlckVmZmVjdHMgPSAxMDA7CiBzdGF0aWMgY29uc3RleHByIHVuc2ln
bmVkIG1heENvdW50Q2hpbGROb2RlcyA9IDIwMDsKIAorSW50T3V0c2V0cyBTVkdGaWx0ZXJCdWls
ZGVyOjpjYWxjdWxhdGVPdXRzZXRzKFNWR0ZpbHRlckVsZW1lbnQmIGZpbHRlckVsZW1lbnQsIGNv
bnN0IEZsb2F0UmVjdCYgdGFyZ2V0Qm91bmRpbmdCb3gpCit7CisgICAgaWYgKGZpbHRlckVsZW1l
bnQuY291bnRDaGlsZE5vZGVzKCkgPiBtYXhDb3VudENoaWxkTm9kZXMpCisgICAgICAgIHJldHVy
biB7IH07CisKKyAgICBIYXNoTWFwPEF0b21TdHJpbmcsIFJlZjxTVkdGaWx0ZXJQcmltaXRpdmVT
dGFuZGFyZEF0dHJpYnV0ZXM+PiBuYW1lZFByaW1pdGl2ZXM7CisgICAgUmVmUHRyPFNWR0ZpbHRl
clByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcz4gbGFzdFByaW1pdGl2ZTsKKworICAgIHVzaW5n
IEZpbHRlclByaW1pdGl2ZVZlY3RvciA9IFZlY3RvcjxSZWY8U1ZHRmlsdGVyUHJpbWl0aXZlU3Rh
bmRhcmRBdHRyaWJ1dGVzPj47CisgICAgSGFzaE1hcDxSZWY8U1ZHRmlsdGVyUHJpbWl0aXZlU3Rh
bmRhcmRBdHRyaWJ1dGVzPiwgRmlsdGVyUHJpbWl0aXZlVmVjdG9yPiBpbnB1dHNNYXA7CisKKyAg
ICBhdXRvIGFkZE5hbWVkUHJpbWl0aXZlID0gWyZdKGNvbnN0IEF0b21TdHJpbmcmIGlkLCBSZWY8
U1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzPiYmIHByaW1pdGl2ZSkgeworICAg
ICAgICBsYXN0UHJpbWl0aXZlID0gV1RGTW92ZShwcmltaXRpdmUpOworICAgICAgICBpZiAoaWQu
aXNFbXB0eSgpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBuYW1lZFByaW1pdGl2ZXMu
c2V0KGlkLCBSZWYgeyAqbGFzdFByaW1pdGl2ZSB9KTsKKyAgICB9OworCisgICAgYXV0byBnZXRO
YW1lZFByaW1pdGl2ZSA9IFsmXShjb25zdCBBdG9tU3RyaW5nJiBpZCkgLT4gUmVmUHRyPFNWR0Zp
bHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcz4geworICAgICAgICBpZiAoaWQuaXNFbXB0
eSgpKQorICAgICAgICAgICAgcmV0dXJuIGxhc3RQcmltaXRpdmU7CisKKyAgICAgICAgcmV0dXJu
IG5hbWVkUHJpbWl0aXZlcy5nZXQoaWQpOworICAgIH07CisKKyAgICBhdXRvIGdldE5hbWVkUHJp
bWl0aXZlcyA9IFsmXShTcGFuPGNvbnN0IEF0b21TdHJpbmc+IG5hbWVzKSAtPiBzdGQ6Om9wdGlv
bmFsPEZpbHRlclByaW1pdGl2ZVZlY3Rvcj4geworICAgICAgICBGaWx0ZXJQcmltaXRpdmVWZWN0
b3IgcHJpbWl0aXZlczsKKworICAgICAgICBwcmltaXRpdmVzLnJlc2VydmVJbml0aWFsQ2FwYWNp
dHkobmFtZXMuc2l6ZSgpKTsKKworICAgICAgICBmb3IgKGF1dG8mIG5hbWUgOiBuYW1lcykgewor
ICAgICAgICAgICAgYXV0byBwcmltaXRpdmUgPSBnZXROYW1lZFByaW1pdGl2ZShuYW1lKTsKKyAg
ICAgICAgICAgIGlmICghcHJpbWl0aXZlKQorICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om51
bGxvcHQ7CisKKyAgICAgICAgICAgIHByaW1pdGl2ZXMudW5jaGVja2VkQXBwZW5kKHByaW1pdGl2
ZS5yZWxlYXNlTm9uTnVsbCgpKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBwcmltaXRp
dmVzOworICAgIH07CisKKyAgICBhdXRvIHNldFByaW1pdGl2ZUlucHV0cyA9IFsmXShTVkdGaWx0
ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXMmIHByaW1pdGl2ZSwgRmlsdGVyUHJpbWl0aXZl
VmVjdG9yJiYgaW5wdXRzKSB7CisgICAgICAgIGlucHV0c01hcC5zZXQoeyBwcmltaXRpdmUgfSwg
V1RGTW92ZShpbnB1dHMpKTsKKyAgICB9OworCisgICAgc3RkOjpmdW5jdGlvbjxJbnRPdXRzZXRz
KFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcyYpPiBjYWxjdWxhdGVPdXRzZXRz
ID0gWyZdKFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcyYgcHJpbWl0aXZlKSAt
PiBJbnRPdXRzZXRzIHsKKyAgICAgICAgSW50T3V0c2V0cyBvdXRzZXRzOworICAgICAgICBmb3Ig
KGF1dG8mIGlucHV0IDogaW5wdXRzTWFwLmdldChwcmltaXRpdmUpKQorICAgICAgICAgICAgb3V0
c2V0cyArPSBjYWxjdWxhdGVPdXRzZXRzKGlucHV0KTsKKyAgICAgICAgcmV0dXJuIG91dHNldHMg
Kz0gcHJpbWl0aXZlLm91dHNldHModGFyZ2V0Qm91bmRpbmdCb3gsIGZpbHRlckVsZW1lbnQucHJp
bWl0aXZlVW5pdHMoKSk7CisgICAgfTsKKworICAgIGZvciAoYXV0byYgcHJpbWl0aXZlIDogY2hp
bGRyZW5PZlR5cGU8U1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzPihmaWx0ZXJF
bGVtZW50KSkgeworICAgICAgICBhdXRvIGlucHV0cyA9IGdldE5hbWVkUHJpbWl0aXZlcyhwcmlt
aXRpdmUuZmlsdGVyRWZmZWN0SW5wdXRzTmFtZXMoKSk7CisgICAgICAgIGlmICghaW5wdXRzKQor
ICAgICAgICAgICAgcmV0dXJuIHsgfTsKKworICAgICAgICBhZGROYW1lZFByaW1pdGl2ZShwcmlt
aXRpdmUucmVzdWx0KCksIHsgcHJpbWl0aXZlIH0pOworICAgICAgICBzZXRQcmltaXRpdmVJbnB1
dHMocHJpbWl0aXZlLCBXVEZNb3ZlKCppbnB1dHMpKTsKKyAgICB9CisgICAgCisgICAgaWYgKCFs
YXN0UHJpbWl0aXZlKQorICAgICAgICByZXR1cm4geyB9OworCisgICAgcmV0dXJuIGNhbGN1bGF0
ZU91dHNldHMoKmxhc3RQcmltaXRpdmUpOworfQorCiB2b2lkIFNWR0ZpbHRlckJ1aWxkZXI6OnNl
dHVwQnVpbHRpbkVmZmVjdHMoUmVmPEZpbHRlckVmZmVjdD4gc291cmNlR3JhcGhpYykKIHsKICAg
ICBtX2J1aWx0aW5FZmZlY3RzLmFkZChTb3VyY2VHcmFwaGljOjplZmZlY3ROYW1lKCksIHNvdXJj
ZUdyYXBoaWMpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRl
cnMvU1ZHRmlsdGVyQnVpbGRlci5oIGIvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRl
cnMvU1ZHRmlsdGVyQnVpbGRlci5oCmluZGV4IGM5OTEwMmU3MGJlMDQyMzRkZDZiMjYzMzhhZTMw
MTkwNWU2MTAxYzEuLmI5MmUxZGM2ZTg1MzA4MTQxMjk1Mzc1NGZkNzdiNmRhMTA3MDlhMWYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlckJ1
aWxkZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0
ZXJCdWlsZGVyLmgKQEAgLTQwLDYgKzQwLDggQEAgY2xhc3MgU1ZHRmlsdGVyQnVpbGRlciB7CiBw
dWJsaWM6CiAgICAgU1ZHRmlsdGVyQnVpbGRlcigpID0gZGVmYXVsdDsKIAorICAgIHN0YXRpYyBJ
bnRPdXRzZXRzIGNhbGN1bGF0ZU91dHNldHMoU1ZHRmlsdGVyRWxlbWVudCYsIGNvbnN0IEZsb2F0
UmVjdCYgdGFyZ2V0Qm91bmRpbmdCb3gpOworCiAgICAgdm9pZCBzZXRUYXJnZXRCb3VuZGluZ0Jv
eChjb25zdCBGbG9hdFJlY3QmIHIpIHsgbV90YXJnZXRCb3VuZGluZ0JveCA9IHI7IH0KICAgICBG
bG9hdFJlY3QgdGFyZ2V0Qm91bmRpbmdCb3goKSBjb25zdCB7IHJldHVybiBtX3RhcmdldEJvdW5k
aW5nQm94OyB9CiAgICAgCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>451858</attachid>
            <date>2022-02-13 21:04:46 -0800</date>
            <delta_ts>2022-02-17 02:06:59 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-236574-20220213210445.patch</filename>
            <type>text/plain</type>
            <size>38011</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg5NjgyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNDNmOGI4ZjEwZGRjN2U2
ZDZjN2UxYWMxMjM2ZGIzNWMyMjNlOTFiOC4uM2IxZGY5YTg0Y2M2YzJkNzE3MzA0ZTIzYWI4NGY4
Mjk0NDYxZTg1OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDc4IEBACisyMDIyLTAyLTEzICBTYWlk
IEFib3UtSGFsbGF3YSAgPHNhaWRAYXBwbGUuY29tPgorCisgICAgICAgIFtHUFUgUHJvY2Vzc10g
Q1NTRmlsdGVyIHNob3VsZCBiZSBjcmVhdGVkIG9ubHkgYXQgdGhlIHBhaW50aW5nIHRpbWUKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzNjU3NAorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEluc3RlYWQgb2Yg
YnVpbGRpbmcgdGhlIHdob2xlIGZpbHRlciBjaGFpbiB0byBnZXQgdGhlIGZpbHRlciBvdXRzZXRz
IGF0IAorICAgICAgICB0aGUgbGF5b3V0IHRpbWUsIHdlIGNhbiB1c2UgdGhlIFNWR0ZpbHRlclBy
aW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcyBhbmQKKyAgICAgICAgdGhlIEZpbHRlck9wZXJhdGlv
biBzdXBlciBjbGFzc2VzIHRvIGdldCB0aGVpciBvdXRzZXRzIHdpdGhvdXQgaGF2aW5nIHRvCisg
ICAgICAgIGJ1aWxkIHRoZSBGaWx0ZXJFZmZlY3RzLgorCisgICAgICAgIENTU0ZpbHRlcjo6Y2Fs
Y3VsYXRlT3V0c2V0cygpIGlzIGEgc3RhdGljIG1ldGhvZCB3aGljaCB3aWxsIGxvb3AgdGhyb3Vn
aAorICAgICAgICB0aGUgRmlsdGVyT3BlcmF0aW9ucyBhbmQgd2lsbCBhZGQgdXAgdGhlIG91dHNl
dHMgb2YgdGhlIGJsdXIsIHRoZSBkcm9wLQorICAgICAgICBzaGFkb3cgYW5kIHRoZSByZWZlcmVu
Y2UgRmlsdGVyT3BlcmF0aW9uLgorCisgICAgICAgIFNWR0ZpbHRlckJ1aWxkZXI6OmNhbGN1bGF0
ZU91dHNldHMoKSBpcyBhIHN0YXRpYyBtZXRob2Qgd2hpY2ggd2lsbCBsb29wCisgICAgICAgIHRo
cm91Z2ggdGhlIHByaW1pdGl2ZXMgb2YgdGhlIGZpbHRlciBlbGVtZW50IGFuZCB3aWxsIGNhbGwg
dGhlIG5ldyB2aXJ0dWFsIAorICAgICAgICBtZXRob2Qgb3V0c2V0cygpIHdoaWNoIHdpbGwgY2Fs
bCBhIHN0YXRpYyBtZXRob2QgaW4gdGhlIGNvcnJlc3BvbmRpbmcKKyAgICAgICAgRmlsdGVyRWZm
ZWN0LgorCisgICAgICAgIEZFRHJvcFNoYWRvdywgRkVHYXVzc2lhbkJsdXIgYW5kIEZFT2Zmc2V0
IHdpbGwgYmUgcHJvdmlkZSBzdGF0aWMgbWV0aG9kcworICAgICAgICBmb3IgY2FsY3VsYXRpbmcg
dGhlIGVmZmVjdCBvdXRzZXRzLiBUaGVzZSBzdGF0aWMgbWV0aG9kcyB3aWxsIGJlIGNhbGxlZCAK
KyAgICAgICAgZnJvbSBDU1NGaWx0ZXI6OmNhbGN1bGF0ZU91dHNldHMoKSBhbmQgZnJvbSB0aGUg
U1ZHRkV4eHhFbGVtZW50cy4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVEcm9wU2hhZG93LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFRHJvcFNoYWRvdzo6Y2FsY3Vs
YXRlT3V0c2V0cyk6CisgICAgICAgIChXZWJDb3JlOjpGRURyb3BTaGFkb3c6Om91dHNldHMgY29u
c3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEcm9wU2hhZG93Lmg6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUdhdXNzaWFuQmx1ci5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpGRUdhdXNzaWFuQmx1cjo6Y2FsY3VsYXRlT3V0c2V0cyk6Cisg
ICAgICAgIChXZWJDb3JlOjpGRUdhdXNzaWFuQmx1cjo6b3V0c2V0cyBjb25zdCk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUdhdXNzaWFuQmx1ci5oOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVPZmZzZXQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6RkVPZmZzZXQ6OmNhbGN1bGF0ZU91dHNldHMpOgorICAgICAgICAoV2ViQ29yZTo6RkVPZmZz
ZXQ6Om91dHNldHMgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVPZmZzZXQuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvQ1NTRmlsdGVyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OmNhbGN1bGF0ZUJsdXJFZmZlY3RPdXRzZXRzKToKKyAgICAgICAgKFdlYkNvcmU6
OmNhbGN1bGF0ZURyb3BTaGFkb3dFZmZlY3RPdXRzZXRzKToKKyAgICAgICAgKFdlYkNvcmU6OnJl
ZmVyZW5jZUZpbHRlckVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6Y2FsY3VsYXRlUmVmZXJl
bmNlRmlsdGVyT3V0c2V0cyk6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVSZWZlcmVuY2VGaWx0
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjpidWlsZEZpbHRlckZ1bmN0aW9ucyk6
CisgICAgICAgIChXZWJDb3JlOjpDU1NGaWx0ZXI6OmNhbGN1bGF0ZU91dHNldHMpOgorICAgICAg
ICAoV2ViQ29yZTo6Y3JlYXRlU1ZHRmlsdGVyKTogRGVsZXRlZC4KKyAgICAgICAgKiByZW5kZXJp
bmcvQ1NTRmlsdGVyLmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpmaWx0ZXJzRm9yUGFpbnRpbmcgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmNhbGN1bGF0ZUNsaXBSZWN0cyBjb25zdCk6
CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyRmlsdGVycy5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJMYXllckZpbHRlcnM6OnNldEZpbHRlclNldHRpbmdzKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckxheWVyRmlsdGVyczo6YmVnaW5GaWx0ZXJFZmZlY3QpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJGaWx0ZXJzOjpzZXRGaWx0ZXIpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJGaWx0ZXJzOjpidWlsZEZpbHRlcik6IERlbGV0ZWQu
CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyRmlsdGVycy5oOgorICAgICAgICAqIHN2
Zy9TVkdGRURyb3BTaGFkb3dFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFRHJv
cFNoYWRvd0VsZW1lbnQ6Om91dHNldHMgY29uc3QpOgorICAgICAgICAqIHN2Zy9TVkdGRURyb3BT
aGFkb3dFbGVtZW50Lmg6CisgICAgICAgICogc3ZnL1NWR0ZFR2F1c3NpYW5CbHVyRWxlbWVudC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQ6Om91dHNldHMg
Y29uc3QpOgorICAgICAgICAqIHN2Zy9TVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQuaDoKKyAgICAg
ICAgKiBzdmcvU1ZHRkVPZmZzZXRFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZF
T2Zmc2V0RWxlbWVudDo6b3V0c2V0cyBjb25zdCk6CisgICAgICAgICogc3ZnL1NWR0ZFT2Zmc2V0
RWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJp
YnV0ZXMuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0
cmlidXRlczo6b3V0c2V0cyBjb25zdCk6CisgICAgICAgICogc3ZnL2dyYXBoaWNzL2ZpbHRlcnMv
U1ZHRmlsdGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZpbHRlcjo6Y2FsY3VsYXRlUmVz
b2x2ZWRTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZpbHRlcjo6cmVzb2x2ZWRTaXplIGNv
bnN0KToKKyAgICAgICAgKiBzdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXIuaDoKKyAgICAg
ICAgKiBzdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXJCdWlsZGVyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlNWR0ZpbHRlckJ1aWxkZXI6OmNhbGN1bGF0ZU91dHNldHMpOgorICAgICAgICAq
IHN2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlckJ1aWxkZXIuaDoKKwogMjAyMi0wMi0xMSAg
Q29tbWl0IFF1ZXVlICA8Y29tbWl0LXF1ZXVlQHdlYmtpdC5vcmc+CiAKICAgICAgICAgVW5yZXZp
ZXdlZCwgcmV2ZXJ0aW5nIHIyODk0OTguCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRHJvcFNoYWRvdy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRHJvcFNoYWRvdy5jcHAKaW5kZXggZDMyOTMzM2Q3
OTM1ODU2NzgzNjdkMzM0MjAyYTZiNjY5YjE5NDUxZi4uZTE1YzNiZGIzMWNlMDBhZjQwYzllYzBh
MGY0ZDMwMzZiOGNmNjRlNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRURyb3BTaGFkb3cuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEcm9wU2hhZG93LmNwcApAQCAtNjEsMTcgKzYxLDI0IEBA
IEZsb2F0UmVjdCBGRURyb3BTaGFkb3c6OmNhbGN1bGF0ZUltYWdlUmVjdChjb25zdCBGaWx0ZXIm
IGZpbHRlciwgY29uc3QgRmlsdGVySW1hCiAgICAgcmV0dXJuIGZpbHRlci5jbGlwVG9NYXhFZmZl
Y3RSZWN0KGltYWdlUmVjdCwgcHJpbWl0aXZlU3VicmVnaW9uKTsKIH0KIAotSW50T3V0c2V0cyBG
RURyb3BTaGFkb3c6Om91dHNldHMoY29uc3QgRmlsdGVyJikgY29uc3QKK0ludE91dHNldHMgRkVE
cm9wU2hhZG93OjpjYWxjdWxhdGVPdXRzZXRzKGNvbnN0IEZsb2F0UG9pbnQmIG9mZnNldCwgY29u
c3QgRmxvYXRTaXplJiBzdGREZXZpYXRpb24pCiB7Ci0gICAgSW50U2l6ZSBvdXRzZXRTaXplID0g
RkVHYXVzc2lhbkJsdXI6OmNhbGN1bGF0ZU91dHNldFNpemUoeyBtX3N0ZFgsIG1fc3RkWSB9KTsK
KyAgICBJbnRTaXplIG91dHNldFNpemUgPSBGRUdhdXNzaWFuQmx1cjo6Y2FsY3VsYXRlT3V0c2V0
U2l6ZShzdGREZXZpYXRpb24pOwogICAgIHJldHVybiB7Ci0gICAgICAgIHN0ZDo6bWF4PGludD4o
MCwgb3V0c2V0U2l6ZS5oZWlnaHQoKSAtIG1fZHkpLAotICAgICAgICBzdGQ6Om1heDxpbnQ+KDAs
IG91dHNldFNpemUud2lkdGgoKSArIG1fZHgpLAotICAgICAgICBzdGQ6Om1heDxpbnQ+KDAsIG91
dHNldFNpemUuaGVpZ2h0KCkgKyBtX2R5KSwKLSAgICAgICAgc3RkOjptYXg8aW50PigwLCBvdXRz
ZXRTaXplLndpZHRoKCkgLSBtX2R4KQorICAgICAgICBzdGQ6Om1heDxpbnQ+KDAsIG91dHNldFNp
emUuaGVpZ2h0KCkgLSBvZmZzZXQueSgpKSwKKyAgICAgICAgc3RkOjptYXg8aW50PigwLCBvdXRz
ZXRTaXplLndpZHRoKCkgKyBvZmZzZXQueCgpKSwKKyAgICAgICAgc3RkOjptYXg8aW50PigwLCBv
dXRzZXRTaXplLmhlaWdodCgpICsgb2Zmc2V0LnkoKSksCisgICAgICAgIHN0ZDo6bWF4PGludD4o
MCwgb3V0c2V0U2l6ZS53aWR0aCgpIC0gb2Zmc2V0LngoKSkKICAgICB9OwogfQogCitJbnRPdXRz
ZXRzIEZFRHJvcFNoYWRvdzo6b3V0c2V0cyhjb25zdCBGaWx0ZXImIGZpbHRlcikgY29uc3QKK3sK
KyAgICBhdXRvIG9mZnNldCA9IGZpbHRlci5yZXNvbHZlZFNpemUoeyBtX2R4LCBtX2R5IH0pOwor
ICAgIGF1dG8gc3RkRGV2aWF0aW9uID0gZmlsdGVyLnJlc29sdmVkU2l6ZSh7IG1fc3RkWCwgbV9z
dGRZIH0pOworICAgIHJldHVybiBjYWxjdWxhdGVPdXRzZXRzKHRvRmxvYXRQb2ludChvZmZzZXQp
LCBzdGREZXZpYXRpb24pOworfQorCiBzdGQ6OnVuaXF1ZV9wdHI8RmlsdGVyRWZmZWN0QXBwbGll
cj4gRkVEcm9wU2hhZG93OjpjcmVhdGVTb2Z0d2FyZUFwcGxpZXIoKSBjb25zdAogewogICAgIHJl
dHVybiBGaWx0ZXJFZmZlY3RBcHBsaWVyOjpjcmVhdGU8RkVEcm9wU2hhZG93U29mdHdhcmVBcHBs
aWVyPigqdGhpcyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFRHJvcFNoYWRvdy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRURyb3BTaGFkb3cuaAppbmRleCA4YTAzMDNmNzBkNjg4Y2UxNzZlNzMxNGFl
YWU4MzkwNGNlMGVkZTZlLi4zYjk2N2VjNTFmNzIzN2E4YzMyZDQxODRiOGJmNTc5Y2I0NDc0OTI0
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
RHJvcFNoYWRvdy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVEcm9wU2hhZG93LmgKQEAgLTQ3LDYgKzQ3LDggQEAgcHVibGljOgogICAgIGZsb2F0IHNo
YWRvd09wYWNpdHkoKSBjb25zdCB7IHJldHVybiBtX3NoYWRvd09wYWNpdHk7IH0KICAgICB2b2lk
IHNldFNoYWRvd09wYWNpdHkoZmxvYXQgc2hhZG93T3BhY2l0eSkgeyBtX3NoYWRvd09wYWNpdHkg
PSBzaGFkb3dPcGFjaXR5OyB9CiAKKyAgICBzdGF0aWMgSW50T3V0c2V0cyBjYWxjdWxhdGVPdXRz
ZXRzKGNvbnN0IEZsb2F0UG9pbnQmIG9mZnNldCwgY29uc3QgRmxvYXRTaXplJiBzdGREZXZpYXRp
b24pOworCiAgICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYp
IGNvbnN0OwogICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBzdGQ6Om9wdGlvbmFs
PFJlZjxGRURyb3BTaGFkb3c+PiBkZWNvZGUoRGVjb2RlciYpOwogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFR2F1c3NpYW5CbHVyLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVHYXVzc2lhbkJsdXIu
Y3BwCmluZGV4IDdhNTM2NzM2YjY4ZTJmODE5ZGRlYTZmNGQ2MWY5NmY0OTdiODZkZjYuLjRiYjQy
YzQ1YjY4OTliMzdiMDE5MjY3ZDk0YTM4ZjJiODc1MTM4NzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVHYXVzc2lhbkJsdXIuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVHYXVzc2lhbkJsdXIu
Y3BwCkBAIC0xMjAsMTIgKzEyMCwxNyBAQCBGbG9hdFJlY3QgRkVHYXVzc2lhbkJsdXI6OmNhbGN1
bGF0ZUltYWdlUmVjdChjb25zdCBGaWx0ZXImIGZpbHRlciwgY29uc3QgRmlsdGVySQogICAgIHJl
dHVybiBmaWx0ZXIuY2xpcFRvTWF4RWZmZWN0UmVjdChpbWFnZVJlY3QsIHByaW1pdGl2ZVN1YnJl
Z2lvbik7CiB9CiAKLUludE91dHNldHMgRkVHYXVzc2lhbkJsdXI6Om91dHNldHMoY29uc3QgRmls
dGVyJiBmaWx0ZXIpIGNvbnN0CitJbnRPdXRzZXRzIEZFR2F1c3NpYW5CbHVyOjpjYWxjdWxhdGVP
dXRzZXRzKGNvbnN0IEZsb2F0U2l6ZSYgc3RkRGV2aWF0aW9uKQogewotICAgIEludFNpemUgb3V0
c2V0U2l6ZSA9IGNhbGN1bGF0ZU91dHNldFNpemUoZmlsdGVyLnJlc29sdmVkU2l6ZSh7IG1fc3Rk
WCwgbV9zdGRZIH0pKTsKKyAgICBJbnRTaXplIG91dHNldFNpemUgPSBjYWxjdWxhdGVPdXRzZXRT
aXplKHN0ZERldmlhdGlvbik7CiAgICAgcmV0dXJuIHsgb3V0c2V0U2l6ZS5oZWlnaHQoKSwgb3V0
c2V0U2l6ZS53aWR0aCgpLCBvdXRzZXRTaXplLmhlaWdodCgpLCBvdXRzZXRTaXplLndpZHRoKCkg
fTsKIH0KIAorSW50T3V0c2V0cyBGRUdhdXNzaWFuQmx1cjo6b3V0c2V0cyhjb25zdCBGaWx0ZXIm
IGZpbHRlcikgY29uc3QKK3sKKyAgICByZXR1cm4gY2FsY3VsYXRlT3V0c2V0cyhmaWx0ZXIucmVz
b2x2ZWRTaXplKHsgbV9zdGRYLCBtX3N0ZFkgfSkpOworfQorCiBib29sIEZFR2F1c3NpYW5CbHVy
OjpyZXN1bHRJc0FscGhhSW1hZ2UoY29uc3QgRmlsdGVySW1hZ2VWZWN0b3ImIGlucHV0cykgY29u
c3QKIHsKICAgICByZXR1cm4gaW5wdXRzWzBdLT5pc0FscGhhSW1hZ2UoKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVHYXVzc2lhbkJsdXIu
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVHYXVzc2lhbkJs
dXIuaAppbmRleCA4MDE1NDg0NzI0YmE3NzBlYjRjOTA5YzE3MzEzNjJmYTliNTU3MTNlLi5mMmJh
OTllMzg0ZGE4NTc4ZTYwNjM5MWJmMTExMTA2ZTQ0NjJjYzZiIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFR2F1c3NpYW5CbHVyLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUdhdXNzaWFuQmx1ci5o
CkBAIC00NCw2ICs0NCw4IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgSW50U2l6ZSBjYWxjdWxhdGVV
bnNjYWxlZEtlcm5lbFNpemUoRmxvYXRTaXplIHN0ZERldmlhdGlvbik7CiAgICAgc3RhdGljIElu
dFNpemUgY2FsY3VsYXRlT3V0c2V0U2l6ZShGbG9hdFNpemUgc3RkRGV2aWF0aW9uKTsKIAorICAg
IHN0YXRpYyBJbnRPdXRzZXRzIGNhbGN1bGF0ZU91dHNldHMoY29uc3QgRmxvYXRTaXplJiBzdGRE
ZXZpYXRpb24pOworCiAgICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5j
b2RlciYpIGNvbnN0OwogICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBzdGQ6Om9w
dGlvbmFsPFJlZjxGRUdhdXNzaWFuQmx1cj4+IGRlY29kZShEZWNvZGVyJik7CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVPZmZzZXQuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU9mZnNldC5jcHAK
aW5kZXggMzk1YTgyNmJlMDJkNzBiNjIzOTMxY2FhYzhlMGVjYjA0MzI3ODczZS4uNzFiMzg4YWM3
ZGUwOTE5MWFhMTU0MTYwMzNkODg1NmNiZDNiODE1ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU9mZnNldC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU9mZnNldC5jcHAKQEAgLTYwLDIzICs2
MCwyOCBAQCBGbG9hdFJlY3QgRkVPZmZzZXQ6OmNhbGN1bGF0ZUltYWdlUmVjdChjb25zdCBGaWx0
ZXImIGZpbHRlciwgY29uc3QgRmlsdGVySW1hZ2VWZQogICAgIHJldHVybiBmaWx0ZXIuY2xpcFRv
TWF4RWZmZWN0UmVjdChpbWFnZVJlY3QsIHByaW1pdGl2ZVN1YnJlZ2lvbik7CiB9CiAKLUludE91
dHNldHMgRkVPZmZzZXQ6Om91dHNldHMoY29uc3QgRmlsdGVyJiBmaWx0ZXIpIGNvbnN0CitJbnRP
dXRzZXRzIEZFT2Zmc2V0OjpjYWxjdWxhdGVPdXRzZXRzKGNvbnN0IEZsb2F0UG9pbnQmIG9mZnNl
dCkKIHsKLSAgICBhdXRvIG9mZnNldCA9IGV4cGFuZGVkSW50U2l6ZShmaWx0ZXIucmVzb2x2ZWRT
aXplKHsgbV9keCwgbV9keSB9KSk7CisgICAgYXV0byBhZGp1c3RlZE9mZnNldCA9IGNlaWxlZElu
dFBvaW50KG9mZnNldCk7CiAKICAgICBJbnRPdXRzZXRzIG91dHNldHM7Ci0gICAgaWYgKG9mZnNl
dC5oZWlnaHQoKSA8IDApCi0gICAgICAgIG91dHNldHMuc2V0VG9wKC1vZmZzZXQuaGVpZ2h0KCkp
OworICAgIGlmIChhZGp1c3RlZE9mZnNldC55KCkgPCAwKQorICAgICAgICBvdXRzZXRzLnNldFRv
cCgtYWRqdXN0ZWRPZmZzZXQueSgpKTsKICAgICBlbHNlCi0gICAgICAgIG91dHNldHMuc2V0Qm90
dG9tKG9mZnNldC5oZWlnaHQoKSk7Ci0gICAgaWYgKG9mZnNldC53aWR0aCgpIDwgMCkKLSAgICAg
ICAgb3V0c2V0cy5zZXRMZWZ0KC1vZmZzZXQud2lkdGgoKSk7CisgICAgICAgIG91dHNldHMuc2V0
Qm90dG9tKGFkanVzdGVkT2Zmc2V0LnkoKSk7CisgICAgaWYgKGFkanVzdGVkT2Zmc2V0LngoKSA8
IDApCisgICAgICAgIG91dHNldHMuc2V0TGVmdCgtYWRqdXN0ZWRPZmZzZXQueCgpKTsKICAgICBl
bHNlCi0gICAgICAgIG91dHNldHMuc2V0UmlnaHQob2Zmc2V0LndpZHRoKCkpOworICAgICAgICBv
dXRzZXRzLnNldFJpZ2h0KGFkanVzdGVkT2Zmc2V0LngoKSk7CiAKICAgICByZXR1cm4gb3V0c2V0
czsKIH0KIAorSW50T3V0c2V0cyBGRU9mZnNldDo6b3V0c2V0cyhjb25zdCBGaWx0ZXImIGZpbHRl
cikgY29uc3QKK3sKKyAgICByZXR1cm4gY2FsY3VsYXRlT3V0c2V0cyh0b0Zsb2F0UG9pbnQoZmls
dGVyLnJlc29sdmVkU2l6ZSh7IG1fZHgsIG1fZHkgfSkpKTsKK30KKwogYm9vbCBGRU9mZnNldDo6
cmVzdWx0SXNBbHBoYUltYWdlKGNvbnN0IEZpbHRlckltYWdlVmVjdG9yJiBpbnB1dHMpIGNvbnN0
CiB7CiAgICAgcmV0dXJuIGlucHV0c1swXS0+aXNBbHBoYUltYWdlKCk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFT2Zmc2V0LmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFT2Zmc2V0LmgKaW5kZXggY2Jh
MDA2Y2UyYjg5YTc5YjM0OWNkNGNhOGRmNWI2MjI5YzRlNWVmMy4uYzJmYWMyOTgwZWZhMjc3YTkz
MmU5MGY3NWI1MTUwMDAxOWNkOWIyYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRU9mZnNldC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVPZmZzZXQuaApAQCAtMzYsNiArMzYsOCBAQCBwdWJsaWM6
CiAgICAgZmxvYXQgZHkoKSBjb25zdCB7IHJldHVybiBtX2R5OyB9CiAgICAgdm9pZCBzZXREeShm
bG9hdCk7CiAKKyAgICBzdGF0aWMgSW50T3V0c2V0cyBjYWxjdWxhdGVPdXRzZXRzKGNvbnN0IEZs
b2F0UG9pbnQmIG9mZnNldCk7CisKICAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVu
Y29kZShFbmNvZGVyJikgY29uc3Q7CiAgICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGlj
IHN0ZDo6b3B0aW9uYWw8UmVmPEZFT2Zmc2V0Pj4gZGVjb2RlKERlY29kZXImKTsKIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0NTU0ZpbHRlci5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvQ1NTRmlsdGVyLmNwcAppbmRleCA2MzZkODE0NTExYmYzNTdhMTJiZTUx
YTViODdjNDUyNzY0NzhmZTI3Li5lODZjMTZjMmU3MzA3ZmM2NWUxNmNhY2E2YTU0Zjk2YWUzYjlm
NjgwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvQ1NTRmlsdGVyLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvQ1NTRmlsdGVyLmNwcApAQCAtNzYsNiArNzYs
MTIgQEAgQ1NTRmlsdGVyOjpDU1NGaWx0ZXIoVmVjdG9yPFJlZjxGaWx0ZXJGdW5jdGlvbj4+JiYg
ZnVuY3Rpb25zKQogewogfQogCitzdGF0aWMgSW50T3V0c2V0cyBjYWxjdWxhdGVCbHVyRWZmZWN0
T3V0c2V0cyhjb25zdCBCbHVyRmlsdGVyT3BlcmF0aW9uJiBibHVyT3BlcmF0aW9uKQoreworICAg
IGZsb2F0IHN0ZERldmlhdGlvbiA9IGZsb2F0VmFsdWVGb3JMZW5ndGgoYmx1ck9wZXJhdGlvbi5z
dGREZXZpYXRpb24oKSwgMCk7CisgICAgcmV0dXJuIEZFR2F1c3NpYW5CbHVyOjpjYWxjdWxhdGVP
dXRzZXRzKHsgc3RkRGV2aWF0aW9uLCBzdGREZXZpYXRpb24gfSk7Cit9CisKIHN0YXRpYyBSZWZQ
dHI8RmlsdGVyRWZmZWN0PiBjcmVhdGVCbHVyRWZmZWN0KGNvbnN0IEJsdXJGaWx0ZXJPcGVyYXRp
b24mIGJsdXJPcGVyYXRpb24sIEZpbHRlcjo6Q2xpcE9wZXJhdGlvbiBjbGlwT3BlcmF0aW9uKQog
ewogICAgIGZsb2F0IHN0ZERldmlhdGlvbiA9IGZsb2F0VmFsdWVGb3JMZW5ndGgoYmx1ck9wZXJh
dGlvbi5zdGREZXZpYXRpb24oKSwgMCk7CkBAIC0xMDUsNiArMTExLDEyIEBAIHN0YXRpYyBSZWZQ
dHI8RmlsdGVyRWZmZWN0PiBjcmVhdGVDb250cmFzdEVmZmVjdChjb25zdCBCYXNpY0NvbXBvbmVu
dFRyYW5zZmVyRmlsCiAgICAgcmV0dXJuIEZFQ29tcG9uZW50VHJhbnNmZXI6OmNyZWF0ZSh0cmFu
c2ZlckZ1bmN0aW9uLCB0cmFuc2ZlckZ1bmN0aW9uLCB0cmFuc2ZlckZ1bmN0aW9uLCBudWxsRnVu
Y3Rpb24pOwogfQogCitzdGF0aWMgSW50T3V0c2V0cyBjYWxjdWxhdGVEcm9wU2hhZG93RWZmZWN0
T3V0c2V0cyhjb25zdCBEcm9wU2hhZG93RmlsdGVyT3BlcmF0aW9uJiBkcm9wU2hhZG93T3BlcmF0
aW9uKQoreworICAgIGZsb2F0IHN0ZERldmlhdGlvbiA9IGRyb3BTaGFkb3dPcGVyYXRpb24uc3Rk
RGV2aWF0aW9uKCk7CisgICAgcmV0dXJuIEZFRHJvcFNoYWRvdzo6Y2FsY3VsYXRlT3V0c2V0cyhG
bG9hdFBvaW50KGRyb3BTaGFkb3dPcGVyYXRpb24ueCgpLCBkcm9wU2hhZG93T3BlcmF0aW9uLnko
KSksIHsgc3RkRGV2aWF0aW9uLCBzdGREZXZpYXRpb24gfSk7Cit9CisKIHN0YXRpYyBSZWZQdHI8
RmlsdGVyRWZmZWN0PiBjcmVhdGVEcm9wU2hhZG93RWZmZWN0KGNvbnN0IERyb3BTaGFkb3dGaWx0
ZXJPcGVyYXRpb24mIGRyb3BTaGFkb3dPcGVyYXRpb24pCiB7CiAgICAgZmxvYXQgc3RkID0gZHJv
cFNoYWRvd09wZXJhdGlvbi5zdGREZXZpYXRpb24oKTsKQEAgLTIxOSw3ICsyMzEsNyBAQCBzdGF0
aWMgUmVmUHRyPEZpbHRlckVmZmVjdD4gY3JlYXRlU2VwaWFFZmZlY3QoY29uc3QgQmFzaWNDb2xv
ck1hdHJpeEZpbHRlck9wZXJhdAogICAgIHJldHVybiBGRUNvbG9yTWF0cml4OjpjcmVhdGUoRkVD
T0xPUk1BVFJJWF9UWVBFX01BVFJJWCwgV1RGTW92ZShpbnB1dFBhcmFtZXRlcnMpKTsKIH0KIAot
c3RhdGljIFJlZlB0cjxTVkdGaWx0ZXI+IGNyZWF0ZVNWR0ZpbHRlcihDU1NGaWx0ZXImIGZpbHRl
ciwgY29uc3QgUmVmZXJlbmNlRmlsdGVyT3BlcmF0aW9uJiBmaWx0ZXJPcGVyYXRpb24sIFJlbmRl
ckVsZW1lbnQmIHJlbmRlcmVyLCBjb25zdCBGbG9hdFJlY3QmIHRhcmdldEJvdW5kaW5nQm94KQor
c3RhdGljIFNWR0ZpbHRlckVsZW1lbnQqIHJlZmVyZW5jZUZpbHRlckVsZW1lbnQoY29uc3QgUmVm
ZXJlbmNlRmlsdGVyT3BlcmF0aW9uJiBmaWx0ZXJPcGVyYXRpb24sIFJlbmRlckVsZW1lbnQmIHJl
bmRlcmVyKQogewogICAgIGF1dG8mIHJlZmVyZW5jZWRTVkdSZXNvdXJjZXMgPSByZW5kZXJlci5l
bnN1cmVSZWZlcmVuY2VkU1ZHUmVzb3VyY2VzKCk7CiAgICAgYXV0byogZmlsdGVyRWxlbWVudCA9
IHJlZmVyZW5jZWRTVkdSZXNvdXJjZXMucmVmZXJlbmNlZEZpbHRlckVsZW1lbnQocmVuZGVyZXIu
ZG9jdW1lbnQoKSwgZmlsdGVyT3BlcmF0aW9uKTsKQEAgLTIzMiw2ICsyNDQsMjQgQEAgc3RhdGlj
IFJlZlB0cjxTVkdGaWx0ZXI+IGNyZWF0ZVNWR0ZpbHRlcihDU1NGaWx0ZXImIGZpbHRlciwgY29u
c3QgUmVmZXJlbmNlRmlsdGUKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogCisgICAg
cmV0dXJuIGZpbHRlckVsZW1lbnQ7Cit9CisKK3N0YXRpYyBJbnRPdXRzZXRzIGNhbGN1bGF0ZVJl
ZmVyZW5jZUZpbHRlck91dHNldHMoY29uc3QgUmVmZXJlbmNlRmlsdGVyT3BlcmF0aW9uJiBmaWx0
ZXJPcGVyYXRpb24sIFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyKQoreworICAgIGF1dG8gZmlsdGVy
RWxlbWVudCA9IHJlZmVyZW5jZUZpbHRlckVsZW1lbnQoZmlsdGVyT3BlcmF0aW9uLCByZW5kZXJl
cik7CisgICAgaWYgKCFmaWx0ZXJFbGVtZW50KQorICAgICAgICByZXR1cm4geyB9OworCisgICAg
cmV0dXJuIFNWR0ZpbHRlckJ1aWxkZXI6OmNhbGN1bGF0ZU91dHNldHMoKmZpbHRlckVsZW1lbnQs
IHJlbmRlcmVyLm9iamVjdEJvdW5kaW5nQm94KCkpOworfQorCitzdGF0aWMgUmVmUHRyPFNWR0Zp
bHRlcj4gY3JlYXRlUmVmZXJlbmNlRmlsdGVyKENTU0ZpbHRlciYgZmlsdGVyLCBjb25zdCBSZWZl
cmVuY2VGaWx0ZXJPcGVyYXRpb24mIGZpbHRlck9wZXJhdGlvbiwgUmVuZGVyRWxlbWVudCYgcmVu
ZGVyZXIsIGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0Qm91bmRpbmdCb3gpCit7CisgICAgYXV0byBm
aWx0ZXJFbGVtZW50ID0gcmVmZXJlbmNlRmlsdGVyRWxlbWVudChmaWx0ZXJPcGVyYXRpb24sIHJl
bmRlcmVyKTsKKyAgICBpZiAoIWZpbHRlckVsZW1lbnQpCisgICAgICAgIHJldHVybiBudWxscHRy
OworCiAgICAgYXV0byBmaWx0ZXJSZWdpb24gPSBTVkdMZW5ndGhDb250ZXh0OjpyZXNvbHZlUmVj
dGFuZ2xlPFNWR0ZpbHRlckVsZW1lbnQ+KGZpbHRlckVsZW1lbnQsIGZpbHRlckVsZW1lbnQtPmZp
bHRlclVuaXRzKCksIHRhcmdldEJvdW5kaW5nQm94KTsKIAogICAgIFNWR0ZpbHRlckJ1aWxkZXIg
YnVpbGRlcjsKQEAgLTI0MCw4ICsyNzAsNyBAQCBzdGF0aWMgUmVmUHRyPFNWR0ZpbHRlcj4gY3Jl
YXRlU1ZHRmlsdGVyKENTU0ZpbHRlciYgZmlsdGVyLCBjb25zdCBSZWZlcmVuY2VGaWx0ZQogCiBi
b29sIENTU0ZpbHRlcjo6YnVpbGRGaWx0ZXJGdW5jdGlvbnMoUmVuZGVyRWxlbWVudCYgcmVuZGVy
ZXIsIGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmIG9wZXJhdGlvbnMsIGNvbnN0IEZsb2F0UmVjdCYg
dGFyZ2V0Qm91bmRpbmdCb3gpCiB7Ci0gICAgUmVmUHRyPEZpbHRlckVmZmVjdD4gZWZmZWN0Owot
ICAgIFJlZlB0cjxTVkdGaWx0ZXI+IGZpbHRlcjsKKyAgICBSZWZQdHI8RmlsdGVyRnVuY3Rpb24+
IGZ1bmN0aW9uOwogCiAgICAgZm9yIChhdXRvJiBvcGVyYXRpb24gOiBvcGVyYXRpb25zLm9wZXJh
dGlvbnMoKSkgewogICAgICAgICBzd2l0Y2ggKG9wZXJhdGlvbi0+dHlwZSgpKSB7CkBAIC0yNTAs
NjMgKzI3OSw2MCBAQCBib29sIENTU0ZpbHRlcjo6YnVpbGRGaWx0ZXJGdW5jdGlvbnMoUmVuZGVy
RWxlbWVudCYgcmVuZGVyZXIsIGNvbnN0IEZpbHRlck9wZXJhdAogICAgICAgICAgICAgYnJlYWs7
CiAKICAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkJMVVI6Ci0gICAgICAgICAgICBlZmZl
Y3QgPSBjcmVhdGVCbHVyRWZmZWN0KGRvd25jYXN0PEJsdXJGaWx0ZXJPcGVyYXRpb24+KCpvcGVy
YXRpb24pLCBjbGlwT3BlcmF0aW9uKCkpOworICAgICAgICAgICAgZnVuY3Rpb24gPSBjcmVhdGVC
bHVyRWZmZWN0KGRvd25jYXN0PEJsdXJGaWx0ZXJPcGVyYXRpb24+KCpvcGVyYXRpb24pLCBjbGlw
T3BlcmF0aW9uKCkpOwogICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgY2FzZSBGaWx0ZXJP
cGVyYXRpb246OkJSSUdIVE5FU1M6Ci0gICAgICAgICAgICBlZmZlY3QgPSBjcmVhdGVCcmlnaHRu
ZXNzRWZmZWN0KGRvd25jYXN0PEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24+
KCpvcGVyYXRpb24pKTsKKyAgICAgICAgICAgIGZ1bmN0aW9uID0gY3JlYXRlQnJpZ2h0bmVzc0Vm
ZmVjdChkb3duY2FzdDxCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uPigqb3Bl
cmF0aW9uKSk7CiAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICBjYXNlIEZpbHRlck9wZXJh
dGlvbjo6Q09OVFJBU1Q6Ci0gICAgICAgICAgICBlZmZlY3QgPSBjcmVhdGVDb250cmFzdEVmZmVj
dChkb3duY2FzdDxCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uPigqb3BlcmF0
aW9uKSk7CisgICAgICAgICAgICBmdW5jdGlvbiA9IGNyZWF0ZUNvbnRyYXN0RWZmZWN0KGRvd25j
YXN0PEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24+KCpvcGVyYXRpb24pKTsK
ICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpEUk9Q
X1NIQURPVzoKLSAgICAgICAgICAgIGVmZmVjdCA9IGNyZWF0ZURyb3BTaGFkb3dFZmZlY3QoZG93
bmNhc3Q8RHJvcFNoYWRvd0ZpbHRlck9wZXJhdGlvbj4oKm9wZXJhdGlvbikpOworICAgICAgICAg
ICAgZnVuY3Rpb24gPSBjcmVhdGVEcm9wU2hhZG93RWZmZWN0KGRvd25jYXN0PERyb3BTaGFkb3dG
aWx0ZXJPcGVyYXRpb24+KCpvcGVyYXRpb24pKTsKICAgICAgICAgICAgIGJyZWFrOwogCiAgICAg
ICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpHUkFZU0NBTEU6Ci0gICAgICAgICAgICBlZmZlY3Qg
PSBjcmVhdGVHcmF5U2NhbGVFZmZlY3QoZG93bmNhc3Q8QmFzaWNDb2xvck1hdHJpeEZpbHRlck9w
ZXJhdGlvbj4oKm9wZXJhdGlvbikpOworICAgICAgICAgICAgZnVuY3Rpb24gPSBjcmVhdGVHcmF5
U2NhbGVFZmZlY3QoZG93bmNhc3Q8QmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbj4oKm9w
ZXJhdGlvbikpOwogICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgY2FzZSBGaWx0ZXJPcGVy
YXRpb246OkhVRV9ST1RBVEU6Ci0gICAgICAgICAgICBlZmZlY3QgPSBjcmVhdGVIdWVSb3RhdGVF
ZmZlY3QoZG93bmNhc3Q8QmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbj4oKm9wZXJhdGlv
bikpOworICAgICAgICAgICAgZnVuY3Rpb24gPSBjcmVhdGVIdWVSb3RhdGVFZmZlY3QoZG93bmNh
c3Q8QmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbj4oKm9wZXJhdGlvbikpOwogICAgICAg
ICAgICAgYnJlYWs7CiAKICAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OklOVkVSVDoKLSAg
ICAgICAgICAgIGVmZmVjdCA9IGNyZWF0ZUludmVydEVmZmVjdChkb3duY2FzdDxCYXNpY0NvbXBv
bmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uPigqb3BlcmF0aW9uKSk7CisgICAgICAgICAgICBm
dW5jdGlvbiA9IGNyZWF0ZUludmVydEVmZmVjdChkb3duY2FzdDxCYXNpY0NvbXBvbmVudFRyYW5z
ZmVyRmlsdGVyT3BlcmF0aW9uPigqb3BlcmF0aW9uKSk7CiAgICAgICAgICAgICBicmVhazsKIAog
ICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6T1BBQ0lUWToKLSAgICAgICAgICAgIGVmZmVj
dCA9IGNyZWF0ZU9wYWNpdHlFZmZlY3QoZG93bmNhc3Q8QmFzaWNDb21wb25lbnRUcmFuc2ZlckZp
bHRlck9wZXJhdGlvbj4oKm9wZXJhdGlvbikpOworICAgICAgICAgICAgZnVuY3Rpb24gPSBjcmVh
dGVPcGFjaXR5RWZmZWN0KGRvd25jYXN0PEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVy
YXRpb24+KCpvcGVyYXRpb24pKTsKICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIGNhc2Ug
RmlsdGVyT3BlcmF0aW9uOjpTQVRVUkFURToKLSAgICAgICAgICAgIGVmZmVjdCA9IGNyZWF0ZVNh
dHVyYXRlRWZmZWN0KGRvd25jYXN0PEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24+KCpv
cGVyYXRpb24pKTsKKyAgICAgICAgICAgIGZ1bmN0aW9uID0gY3JlYXRlU2F0dXJhdGVFZmZlY3Qo
ZG93bmNhc3Q8QmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbj4oKm9wZXJhdGlvbikpOwog
ICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OlNFUElB
OgotICAgICAgICAgICAgZWZmZWN0ID0gY3JlYXRlU2VwaWFFZmZlY3QoZG93bmNhc3Q8QmFzaWND
b2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbj4oKm9wZXJhdGlvbikpOworICAgICAgICAgICAgZnVu
Y3Rpb24gPSBjcmVhdGVTZXBpYUVmZmVjdChkb3duY2FzdDxCYXNpY0NvbG9yTWF0cml4RmlsdGVy
T3BlcmF0aW9uPigqb3BlcmF0aW9uKSk7CiAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICBj
YXNlIEZpbHRlck9wZXJhdGlvbjo6UkVGRVJFTkNFOgotICAgICAgICAgICAgZmlsdGVyID0gY3Jl
YXRlU1ZHRmlsdGVyKCp0aGlzLCBkb3duY2FzdDxSZWZlcmVuY2VGaWx0ZXJPcGVyYXRpb24+KCpv
cGVyYXRpb24pLCByZW5kZXJlciwgdGFyZ2V0Qm91bmRpbmdCb3gpOworICAgICAgICAgICAgZnVu
Y3Rpb24gPSBjcmVhdGVSZWZlcmVuY2VGaWx0ZXIoKnRoaXMsIGRvd25jYXN0PFJlZmVyZW5jZUZp
bHRlck9wZXJhdGlvbj4oKm9wZXJhdGlvbiksIHJlbmRlcmVyLCB0YXJnZXRCb3VuZGluZ0JveCk7
CiAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAoIWZpbHRlciAmJiAhZWZmZWN0KQorICAgICAg
ICBpZiAoIWZ1bmN0aW9uKQogICAgICAgICAgICAgY29udGludWU7CiAKICAgICAgICAgaWYgKG1f
ZnVuY3Rpb25zLmlzRW1wdHkoKSkKICAgICAgICAgICAgIG1fZnVuY3Rpb25zLmFwcGVuZChTb3Vy
Y2VHcmFwaGljOjpjcmVhdGUoKSk7CiAKLSAgICAgICAgaWYgKGZpbHRlcikKLSAgICAgICAgICAg
IG1fZnVuY3Rpb25zLmFwcGVuZChmaWx0ZXIucmVsZWFzZU5vbk51bGwoKSk7Ci0gICAgICAgIGVs
c2UKLSAgICAgICAgICAgIG1fZnVuY3Rpb25zLmFwcGVuZChlZmZlY3QucmVsZWFzZU5vbk51bGwo
KSk7CisgICAgICAgIG1fZnVuY3Rpb25zLmFwcGVuZChmdW5jdGlvbi5yZWxlYXNlTm9uTnVsbCgp
KTsKICAgICB9CiAKICAgICAvLyBJZiB3ZSBkaWRuJ3QgbWFrZSBhbnkgZWZmZWN0cywgdGVsbCBv
dXIgY2FsbGVyIHdlIGFyZSBub3QgdmFsaWQuCkBAIC0zNzEsNiArMzk3LDMyIEBAIHZvaWQgQ1NT
RmlsdGVyOjpzZXRGaWx0ZXJSZWdpb24oY29uc3QgRmxvYXRSZWN0JiBmaWx0ZXJSZWdpb24pCiAg
ICAgY2xhbXBGaWx0ZXJSZWdpb25JZk5lZWRlZCgpOwogfQogCitJbnRPdXRzZXRzIENTU0ZpbHRl
cjo6Y2FsY3VsYXRlT3V0c2V0cyhSZW5kZXJFbGVtZW50JiByZW5kZXJlciwgY29uc3QgRmlsdGVy
T3BlcmF0aW9ucyYgb3BlcmF0aW9ucykKK3sKKyAgICBJbnRPdXRzZXRzIG91dHNldHM7CisKKyAg
ICBmb3IgKGF1dG8mIG9wZXJhdGlvbiA6IG9wZXJhdGlvbnMub3BlcmF0aW9ucygpKSB7CisgICAg
ICAgIHN3aXRjaCAob3BlcmF0aW9uLT50eXBlKCkpIHsKKyAgICAgICAgY2FzZSBGaWx0ZXJPcGVy
YXRpb246OkJMVVI6CisgICAgICAgICAgICBvdXRzZXRzICs9IGNhbGN1bGF0ZUJsdXJFZmZlY3RP
dXRzZXRzKGRvd25jYXN0PEJsdXJGaWx0ZXJPcGVyYXRpb24+KCpvcGVyYXRpb24pKTsKKyAgICAg
ICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpEUk9QX1NIQURP
VzoKKyAgICAgICAgICAgIG91dHNldHMgKz0gY2FsY3VsYXRlRHJvcFNoYWRvd0VmZmVjdE91dHNl
dHMoZG93bmNhc3Q8RHJvcFNoYWRvd0ZpbHRlck9wZXJhdGlvbj4oKm9wZXJhdGlvbikpOworICAg
ICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OlJFRkVSRU5D
RToKKyAgICAgICAgICAgIG91dHNldHMgKz0gY2FsY3VsYXRlUmVmZXJlbmNlRmlsdGVyT3V0c2V0
cyhkb3duY2FzdDxSZWZlcmVuY2VGaWx0ZXJPcGVyYXRpb24+KCpvcGVyYXRpb24pLCByZW5kZXJl
cik7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gb3V0c2V0czsKK30KKwogSW50
T3V0c2V0cyBDU1NGaWx0ZXI6Om91dHNldHMoKSBjb25zdAogewogICAgIGlmICghbV9oYXNGaWx0
ZXJUaGF0TW92ZXNQaXhlbHMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
Q1NTRmlsdGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvQ1NTRmlsdGVyLmgKaW5kZXgg
Nzc0NmZmNWUzMmQ5MGEzYjYwY2QxMDJkNWRlZTYzYWIyMjY5MzRiMy4uZGE3OTkzYzczMmQxNjg4
NjE3OWFhYjU2YjU1OWVlZmVhODdlZDBkOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL0NTU0ZpbHRlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9DU1NGaWx0
ZXIuaApAQCAtNTMsNiArNTMsOCBAQCBwdWJsaWM6CiAKICAgICBSZWZQdHI8RmlsdGVySW1hZ2U+
IGFwcGx5KEZpbHRlckltYWdlKiBzb3VyY2VJbWFnZSwgRmlsdGVyUmVzdWx0cyYpIGZpbmFsOwog
CisgICAgc3RhdGljIEludE91dHNldHMgY2FsY3VsYXRlT3V0c2V0cyhSZW5kZXJFbGVtZW50Jiwg
Y29uc3QgRmlsdGVyT3BlcmF0aW9ucyYpOworCiBwcml2YXRlOgogICAgIENTU0ZpbHRlcihSZW5k
ZXJpbmdNb2RlLCBjb25zdCBGbG9hdFNpemUmIGZpbHRlclNjYWxlLCBDbGlwT3BlcmF0aW9uLCBi
b29sIGhhc0ZpbHRlclRoYXRNb3Zlc1BpeGVscywgYm9vbCBoYXNGaWx0ZXJUaGF0U2hvdWxkQmVS
ZXN0cmljdGVkQnlTZWN1cml0eU9yaWdpbik7CiAgICAgQ1NTRmlsdGVyKFZlY3RvcjxSZWY8Rmls
dGVyRnVuY3Rpb24+PiYmKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJMYXllci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3Bw
CmluZGV4IDM2NzAxNWZmZGYzNGQ3NWFjNGViYjE1MTJlYzFlZjJhZWE3NWM0MTguLmNhMGVjYTk1
YWZiNWY1NjI0ZmFhNzhhYzMxOWU3NGYxZTA4YTUzZDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckxheWVyLmNwcApAQCAtMzI2NCw3ICszMjY0LDcgQEAgUmVuZGVyTGF5ZXJGaWx0
ZXJzKiBSZW5kZXJMYXllcjo6ZmlsdGVyc0ZvclBhaW50aW5nKEdyYXBoaWNzQ29udGV4dCYgY29u
dGV4dCwgT3AKICAgICBpZiAoIXBhaW50c1dpdGhGaWx0ZXJzKCkpCiAgICAgICAgIHJldHVybiBu
dWxscHRyOwogCi0gICAgaWYgKG1fZmlsdGVycyAmJiBtX2ZpbHRlcnMtPmZpbHRlcigpKQorICAg
IGlmIChtX2ZpbHRlcnMpCiAgICAgICAgIHJldHVybiBtX2ZpbHRlcnMuZ2V0KCk7CiAKICAgICBy
ZXR1cm4gbnVsbHB0cjsKQEAgLTU2NjgsNyArNTY2OCw3IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnVw
ZGF0ZUZpbHRlclBhaW50aW5nU3RyYXRlZ3koKQogICAgICAgICAvLyBEb24ndCBkZWxldGUgdGhl
IHdob2xlIGZpbHRlciBpbmZvIGhlcmUsIGJlY2F1c2Ugd2UgbWlnaHQgdXNlIGl0CiAgICAgICAg
IC8vIGZvciBsb2FkaW5nIFNWRyByZWZlcmVuY2UgZmlsdGVyIGZpbGVzLgogICAgICAgICBpZiAo
bV9maWx0ZXJzKQotICAgICAgICAgICAgbV9maWx0ZXJzLT5zZXRGaWx0ZXIobnVsbHB0cik7Cisg
ICAgICAgICAgICBtX2ZpbHRlcnMtPmNsZWFyRmlsdGVyKCk7CiAKICAgICAgICAgLy8gRWFybHkt
cmV0dXJuIG9ubHkgaWYgd2UgKmRvbid0KiBoYXZlIHJlZmVyZW5jZSBmaWx0ZXJzLgogICAgICAg
ICAvLyBGb3IgcmVmZXJlbmNlIGZpbHRlcnMsIHdlIHN0aWxsIHdhbnQgdGhlIEZpbHRlckVmZmVj
dCBncmFwaCBidWlsdApAQCAtNTY3OCwxMyArNTY3OCwxMyBAQCB2b2lkIFJlbmRlckxheWVyOjp1
cGRhdGVGaWx0ZXJQYWludGluZ1N0cmF0ZWd5KCkKICAgICB9CiAgICAgCiAgICAgZW5zdXJlTGF5
ZXJGaWx0ZXJzKCk7Ci0gICAgbV9maWx0ZXJzLT5idWlsZEZpbHRlcihyZW5kZXJlcigpLCBwYWdl
KCkuZGV2aWNlU2NhbGVGYWN0b3IoKSwgcmVuZGVyZXIoKS5wYWdlKCkuYWNjZWxlcmF0ZWRGaWx0
ZXJzRW5hYmxlZCgpID8gUmVuZGVyaW5nTW9kZTo6QWNjZWxlcmF0ZWQgOiBSZW5kZXJpbmdNb2Rl
OjpVbmFjY2VsZXJhdGVkKTsKKyAgICBtX2ZpbHRlcnMtPnNldEZpbHRlclNldHRpbmdzKHBhZ2Uo
KS5kZXZpY2VTY2FsZUZhY3RvcigpLCByZW5kZXJlcigpLnBhZ2UoKS5hY2NlbGVyYXRlZEZpbHRl
cnNFbmFibGVkKCkgPyBSZW5kZXJpbmdNb2RlOjpBY2NlbGVyYXRlZCA6IFJlbmRlcmluZ01vZGU6
OlVuYWNjZWxlcmF0ZWQpOwogfQogCiBJbnRPdXRzZXRzIFJlbmRlckxheWVyOjpmaWx0ZXJPdXRz
ZXRzKCkgY29uc3QKIHsKICAgICBpZiAobV9maWx0ZXJzKQotICAgICAgICByZXR1cm4gbV9maWx0
ZXJzLT5maWx0ZXIoKSA/IG1fZmlsdGVycy0+ZmlsdGVyKCktPm91dHNldHMoKSA6IEludE91dHNl
dHMoKTsKKyAgICAgICAgcmV0dXJuIENTU0ZpbHRlcjo6Y2FsY3VsYXRlT3V0c2V0cyhyZW5kZXJl
cigpLCByZW5kZXJlcigpLnN0eWxlKCkuZmlsdGVyKCkpOwogICAgIHJldHVybiByZW5kZXJlcigp
LnN0eWxlKCkuZmlsdGVyT3V0c2V0cygpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJGaWx0ZXJzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJMYXllckZpbHRlcnMuY3BwCmluZGV4IDViYTk0Y2ZkNWRiYjFlNDRiNWZiZDNj
NWJjMTFhZDE5YWVhZjhmNWQuLmQ4M2Q1NmQwNjhiODIyNTlmMzIzYzE2M2E0OTA5MDc1NmZhYzFm
MjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckZpbHRl
cnMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckZpbHRlcnMu
Y3BwCkBAIC01MCwxMSArNTAsNiBAQCBSZW5kZXJMYXllckZpbHRlcnM6On5SZW5kZXJMYXllckZp
bHRlcnMoKQogICAgIHJlbW92ZVJlZmVyZW5jZUZpbHRlckNsaWVudHMoKTsKIH0KIAotdm9pZCBS
ZW5kZXJMYXllckZpbHRlcnM6OnNldEZpbHRlcihSZWZQdHI8Q1NTRmlsdGVyPiYmIGZpbHRlcikK
LXsKLSAgICBtX2ZpbHRlciA9IFdURk1vdmUoZmlsdGVyKTsKLX0KLQogYm9vbCBSZW5kZXJMYXll
ckZpbHRlcnM6Omhhc0ZpbHRlclRoYXRNb3Zlc1BpeGVscygpIGNvbnN0CiB7CiAgICAgcmV0dXJu
IG1fZmlsdGVyICYmIG1fZmlsdGVyLT5oYXNGaWx0ZXJUaGF0TW92ZXNQaXhlbHMoKTsKQEAgLTEx
NiwxMiArMTExLDEwIEBAIHZvaWQgUmVuZGVyTGF5ZXJGaWx0ZXJzOjpyZW1vdmVSZWZlcmVuY2VG
aWx0ZXJDbGllbnRzKCkKICAgICBtX2ludGVybmFsU1ZHUmVmZXJlbmNlcy5jbGVhcigpOwogfQog
Ci12b2lkIFJlbmRlckxheWVyRmlsdGVyczo6YnVpbGRGaWx0ZXIoUmVuZGVyRWxlbWVudCYgcmVu
ZGVyZXIsIGZsb2F0IHNjYWxlRmFjdG9yLCBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUpCit2
b2lkIFJlbmRlckxheWVyRmlsdGVyczo6c2V0RmlsdGVyU2V0dGluZ3MoZmxvYXQgc2NhbGVGYWN0
b3IsIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSkKIHsKLSAgICAvLyBJZiB0aGUgZmlsdGVy
IGZhaWxzIHRvIGJ1aWxkLCByZW1vdmUgaXQgZnJvbSB0aGUgbGF5ZXIuIEl0IHdpbGwgc3RpbGwg
YXR0ZW1wdCB0bwotICAgIC8vIGdvIHRocm91Z2ggcmVndWxhciBwcm9jZXNzaW5nIChlLmcuIGNv
bXBvc2l0aW5nKSwgYnV0IG5ldmVyIGFwcGx5IGFueXRoaW5nLgotICAgIC8vIEZJWE1FOiBUaGlz
IHJlYnVpbGRzIHRoZSBlbnRpcmUgZWZmZWN0cyBjaGFpbiBldmVuIGlmIHRoZSBmaWx0ZXIgc3R5
bGUgZGlkbid0IGNoYW5nZS4KLSAgICBtX2ZpbHRlciA9IENTU0ZpbHRlcjo6Y3JlYXRlKHJlbmRl
cmVyLCByZW5kZXJlci5zdHlsZSgpLmZpbHRlcigpLCByZW5kZXJpbmdNb2RlLCBGbG9hdFNpemUg
eyBzY2FsZUZhY3Rvciwgc2NhbGVGYWN0b3IgfSwgRmlsdGVyOjpDbGlwT3BlcmF0aW9uOjpVbml0
ZSwgbV90YXJnZXRCb3VuZGluZ0JveCk7CisgICAgbV9maWx0ZXJTY2FsZSA9IHsgc2NhbGVGYWN0
b3IsIHNjYWxlRmFjdG9yIH07CisgICAgbV9yZW5kZXJpbmdNb2RlID0gcmVuZGVyaW5nTW9kZTsK
IH0KIAogR3JhcGhpY3NDb250ZXh0KiBSZW5kZXJMYXllckZpbHRlcnM6OmlucHV0Q29udGV4dCgp
CkBAIC0xNDAsMjUgKzEzMywyMiBAQCB2b2lkIFJlbmRlckxheWVyRmlsdGVyczo6YWxsb2NhdGVC
YWNraW5nU3RvcmVJZk5lZWRlZChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpCiAKIEdyYXBoaWNz
Q29udGV4dCogUmVuZGVyTGF5ZXJGaWx0ZXJzOjpiZWdpbkZpbHRlckVmZmVjdChSZW5kZXJFbGVt
ZW50JiByZW5kZXJlciwgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBMYXlvdXRSZWN0
JiBmaWx0ZXJCb3hSZWN0LCBjb25zdCBMYXlvdXRSZWN0JiBkaXJ0eVJlY3QsIGNvbnN0IExheW91
dFJlY3QmIGxheWVyUmVwYWludFJlY3QpCiB7Ci0gICAgaWYgKCFtX2ZpbHRlcikKLSAgICAgICAg
cmV0dXJuIG51bGxwdHI7Ci0KICAgICAvLyBDYWxjdWxhdGUgdGFyZ2V0Qm91bmRpbmdCb3ggc2lu
Y2UgaXQgd2lsbCBiZSB1c2VkIGlmIHRoZSBmaWx0ZXIgaXMgY3JlYXRlZC4KICAgICBhdXRvIHRh
cmdldEJvdW5kaW5nQm94ID0gaW50ZXJzZWN0aW9uKGZpbHRlckJveFJlY3QsIGRpcnR5UmVjdCk7
CiAgICAgaWYgKHRhcmdldEJvdW5kaW5nQm94LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIG51
bGxwdHI7CiAKLSAgICBpZiAobV90YXJnZXRCb3VuZGluZ0JveCAhPSB0YXJnZXRCb3VuZGluZ0Jv
eCkgeworICAgIGlmICghbV9maWx0ZXIgfHwgbV90YXJnZXRCb3VuZGluZ0JveCAhPSB0YXJnZXRC
b3VuZGluZ0JveCkgewogICAgICAgICBtX3RhcmdldEJvdW5kaW5nQm94ID0gdGFyZ2V0Qm91bmRp
bmdCb3g7CiAgICAgICAgIC8vIEZJWE1FOiBUaGlzIHJlYnVpbGRzIHRoZSBlbnRpcmUgZWZmZWN0
cyBjaGFpbiBldmVuIGlmIHRoZSBmaWx0ZXIgc3R5bGUgZGlkbid0IGNoYW5nZS4KLSAgICAgICAg
bV9maWx0ZXIgPSBDU1NGaWx0ZXI6OmNyZWF0ZShyZW5kZXJlciwgcmVuZGVyZXIuc3R5bGUoKS5m
aWx0ZXIoKSwgbV9maWx0ZXItPnJlbmRlcmluZ01vZGUoKSwgbV9maWx0ZXItPmZpbHRlclNjYWxl
KCksIEZpbHRlcjo6Q2xpcE9wZXJhdGlvbjo6VW5pdGUsIG1fdGFyZ2V0Qm91bmRpbmdCb3gpOwor
ICAgICAgICBtX2ZpbHRlciA9IENTU0ZpbHRlcjo6Y3JlYXRlKHJlbmRlcmVyLCByZW5kZXJlci5z
dHlsZSgpLmZpbHRlcigpLCBtX3JlbmRlcmluZ01vZGUsIG1fZmlsdGVyU2NhbGUsIEZpbHRlcjo6
Q2xpcE9wZXJhdGlvbjo6VW5pdGUsIG1fdGFyZ2V0Qm91bmRpbmdCb3gpOwogICAgIH0KIAogICAg
IGlmICghbV9maWx0ZXIpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgYXV0byYgZmls
dGVyID0gKm1fZmlsdGVyOwotICAgIAorCiAgICAgLy8gRm9yIENTU0ZpbHRlciwgZmlsdGVyUmVn
aW9uID0gdGFyZ2V0Qm91bmRpbmdCb3ggKyBmaWx0ZXItPm91dHNldHMoKQogICAgIGF1dG8gZmls
dGVyUmVnaW9uID0gdGFyZ2V0Qm91bmRpbmdCb3g7CiAgICAgaWYgKGZpbHRlci5oYXNGaWx0ZXJU
aGF0TW92ZXNQaXhlbHMoKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJMYXllckZpbHRlcnMuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXll
ckZpbHRlcnMuaAppbmRleCAwNTEzYzg4NWI0MGI3NWUwMTMyZjNlYWRmZWY2MGM3ODY3ODliOWQ4
Li5jOTE4MjlhODdiNTkzMDI1NWQ4YWI2YzU5ZTcxZTkxMTAyYjNkZDRhIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJGaWx0ZXJzLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyRmlsdGVycy5oCkBAIC01MCwxNSArNTAsMTUg
QEAgcHVibGljOgogICAgIHZvaWQgZXhwYW5kRGlydHlTb3VyY2VSZWN0KGNvbnN0IExheW91dFJl
Y3QmIHJlY3QpIHsgbV9kaXJ0eVNvdXJjZVJlY3QudW5pdGUocmVjdCk7IH0KIAogICAgIENTU0Zp
bHRlciogZmlsdGVyKCkgY29uc3QgeyByZXR1cm4gbV9maWx0ZXIuZ2V0KCk7IH0KLSAgICB2b2lk
IHNldEZpbHRlcihSZWZQdHI8Q1NTRmlsdGVyPiYmKTsKLSAgICAKKyAgICB2b2lkIGNsZWFyRmls
dGVyKCkgeyBtX2ZpbHRlciA9IG51bGxwdHI7IH0KKwogICAgIGJvb2wgaGFzRmlsdGVyVGhhdE1v
dmVzUGl4ZWxzKCkgY29uc3Q7CiAgICAgYm9vbCBoYXNGaWx0ZXJUaGF0U2hvdWxkQmVSZXN0cmlj
dGVkQnlTZWN1cml0eU9yaWdpbigpIGNvbnN0OwogCiAgICAgdm9pZCB1cGRhdGVSZWZlcmVuY2VG
aWx0ZXJDbGllbnRzKGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmKTsKICAgICB2b2lkIHJlbW92ZVJl
ZmVyZW5jZUZpbHRlckNsaWVudHMoKTsKIAotICAgIHZvaWQgYnVpbGRGaWx0ZXIoUmVuZGVyRWxl
bWVudCYsIGZsb2F0IHNjYWxlRmFjdG9yLCBSZW5kZXJpbmdNb2RlKTsKKyAgICB2b2lkIHNldEZp
bHRlclNldHRpbmdzKGZsb2F0IHNjYWxlRmFjdG9yLCBSZW5kZXJpbmdNb2RlKTsKIAogICAgIC8v
IFBlciByZW5kZXIKICAgICBMYXlvdXRSZWN0IHJlcGFpbnRSZWN0KCkgY29uc3QgeyByZXR1cm4g
bV9yZXBhaW50UmVjdDsgfQpAQCAtNzMsNiArNzMsOCBAQCBwcml2YXRlOgogICAgIHZvaWQgYWxs
b2NhdGVCYWNraW5nU3RvcmVJZk5lZWRlZChHcmFwaGljc0NvbnRleHQmKTsKIAogICAgIFJlbmRl
ckxheWVyJiBtX2xheWVyOworICAgIEZsb2F0U2l6ZSBtX2ZpbHRlclNjYWxlOworICAgIFJlbmRl
cmluZ01vZGUgbV9yZW5kZXJpbmdNb2RlOwogCiAgICAgVmVjdG9yPFJlZlB0cjxFbGVtZW50Pj4g
bV9pbnRlcm5hbFNWR1JlZmVyZW5jZXM7CiAgICAgVmVjdG9yPENhY2hlZFJlc291cmNlSGFuZGxl
PENhY2hlZFNWR0RvY3VtZW50Pj4gbV9leHRlcm5hbFNWR1JlZmVyZW5jZXM7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVEcm9wU2hhZG93RWxlbWVudC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHRkVEcm9wU2hhZG93RWxlbWVudC5jcHAKaW5kZXggNDU5OTEwZTU0ZDJm
NjA1NmVhMjU5YjE4ODM5YjNlM2U5YjUzMTY4Mi4uMmE4ZTJkYzEwYzNhMzBkNzc4MGFmMzQ5OWQ2
ZjE5YjQwYmY4NmI1MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRHJvcFNo
YWRvd0VsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRURyb3BTaGFkb3dF
bGVtZW50LmNwcApAQCAtOTYsNiArOTYsMTMgQEAgdm9pZCBTVkdGRURyb3BTaGFkb3dFbGVtZW50
OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQogICAg
IFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6c3ZnQXR0cmlidXRlQ2hhbmdl
ZChhdHRyTmFtZSk7CiB9CiAKK0ludE91dHNldHMgU1ZHRkVEcm9wU2hhZG93RWxlbWVudDo6b3V0
c2V0cyhjb25zdCBGbG9hdFJlY3QmIHRhcmdldEJvdW5kaW5nQm94LCBTVkdVbml0VHlwZXM6OlNW
R1VuaXRUeXBlIHByaW1pdGl2ZVVuaXRzKSBjb25zdAoreworICAgIGF1dG8gb2Zmc2V0ID0gU1ZH
RmlsdGVyOjpjYWxjdWxhdGVSZXNvbHZlZFNpemUoeyBkeCgpLCBkeSgpIH0sIHRhcmdldEJvdW5k
aW5nQm94LCBwcmltaXRpdmVVbml0cyk7CisgICAgYXV0byBzdGREZXZpYXRpb24gPSBTVkdGaWx0
ZXI6OmNhbGN1bGF0ZVJlc29sdmVkU2l6ZSh7IHN0ZERldmlhdGlvblgoKSwgc3RkRGV2aWF0aW9u
WSgpIH0sIHRhcmdldEJvdW5kaW5nQm94LCBwcmltaXRpdmVVbml0cyk7CisgICAgcmV0dXJuIEZF
RHJvcFNoYWRvdzo6Y2FsY3VsYXRlT3V0c2V0cyh0b0Zsb2F0UG9pbnQob2Zmc2V0KSwgc3RkRGV2
aWF0aW9uKTsKK30KKwogUmVmUHRyPEZpbHRlckVmZmVjdD4gU1ZHRkVEcm9wU2hhZG93RWxlbWVu
dDo6ZmlsdGVyRWZmZWN0KGNvbnN0IFNWR0ZpbHRlckJ1aWxkZXImLCBjb25zdCBGaWx0ZXJFZmZl
Y3RWZWN0b3ImKSBjb25zdAogewogICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSB0aGlzLT5y
ZW5kZXJlcigpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRHJvcFNoYWRv
d0VsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRURyb3BTaGFkb3dFbGVtZW50LmgK
aW5kZXggNDliZWYwYTNlNGM3MmZhOWUyZjMzYTc2YTk1OWZkZWY0ZjM2MjFjOC4uNWExZTc2ZGI5
MmRkMDFkZTM2ZWQyMDM1MGViNDc5ZTViMjg3MGVkZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvc3ZnL1NWR0ZFRHJvcFNoYWRvd0VsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHRkVEcm9wU2hhZG93RWxlbWVudC5oCkBAIC01NCw2ICs1NCw3IEBAIHByaXZhdGU6CiAgICAg
dm9pZCBzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmKSBvdmVycmlkZTsK
IAogICAgIFZlY3RvcjxBdG9tU3RyaW5nPiBmaWx0ZXJFZmZlY3RJbnB1dHNOYW1lcygpIGNvbnN0
IG92ZXJyaWRlIHsgcmV0dXJuIHsgaW4xKCkgfTsgfQorICAgIEludE91dHNldHMgb3V0c2V0cyhj
b25zdCBGbG9hdFJlY3QmIHRhcmdldEJvdW5kaW5nQm94LCBTVkdVbml0VHlwZXM6OlNWR1VuaXRU
eXBlIHByaW1pdGl2ZVVuaXRzKSBjb25zdCBvdmVycmlkZTsKICAgICBSZWZQdHI8RmlsdGVyRWZm
ZWN0PiBmaWx0ZXJFZmZlY3QoY29uc3QgU1ZHRmlsdGVyQnVpbGRlciYsIGNvbnN0IEZpbHRlckVm
ZmVjdFZlY3RvciYpIGNvbnN0IG92ZXJyaWRlOwogCiAgICAgUHJvcGVydHlSZWdpc3RyeSBtX3By
b3BlcnR5UmVnaXN0cnkgeyAqdGhpcyB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3Zn
L1NWR0ZFR2F1c3NpYW5CbHVyRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVH
YXVzc2lhbkJsdXJFbGVtZW50LmNwcAppbmRleCBiNWYzYzdiNmNlZmZkNjVkZmQwYWUxMWE0YTli
MmIyZTBkODNiOGEzLi5iMDExYmQ1ZjFjM2RlNWE4ZTVkZGRjODc1YTVmMjM4MTYzNmNlY2QzIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVHYXVzc2lhbkJsdXJFbGVtZW50LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVHYXVzc2lhbkJsdXJFbGVtZW50LmNwcApA
QCAtOTQsNiArOTQsMTIgQEAgdm9pZCBTVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQ6OnN2Z0F0dHJp
YnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUKICAgICBTVkdGaWx0ZXJQ
cmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoYXR0ck5hbWUp
OwogfQogCitJbnRPdXRzZXRzIFNWR0ZFR2F1c3NpYW5CbHVyRWxlbWVudDo6b3V0c2V0cyhjb25z
dCBGbG9hdFJlY3QmIHRhcmdldEJvdW5kaW5nQm94LCBTVkdVbml0VHlwZXM6OlNWR1VuaXRUeXBl
IHByaW1pdGl2ZVVuaXRzKSBjb25zdAoreworICAgIGF1dG8gc3RkRGV2aWF0aW9uID0gU1ZHRmls
dGVyOjpjYWxjdWxhdGVSZXNvbHZlZFNpemUoeyBzdGREZXZpYXRpb25YKCksIHN0ZERldmlhdGlv
blkoKSB9LCB0YXJnZXRCb3VuZGluZ0JveCwgcHJpbWl0aXZlVW5pdHMpOworICAgIHJldHVybiBG
RUdhdXNzaWFuQmx1cjo6Y2FsY3VsYXRlT3V0c2V0cyhzdGREZXZpYXRpb24pOworfQorCiBSZWZQ
dHI8RmlsdGVyRWZmZWN0PiBTVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQ6OmZpbHRlckVmZmVjdChj
b25zdCBTVkdGaWx0ZXJCdWlsZGVyJiwgY29uc3QgRmlsdGVyRWZmZWN0VmVjdG9yJikgY29uc3QK
IHsKICAgICBpZiAoc3RkRGV2aWF0aW9uWCgpIDwgMCB8fCBzdGREZXZpYXRpb25ZKCkgPCAwKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFR2F1c3NpYW5CbHVyRWxlbWVudC5o
IGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFR2F1c3NpYW5CbHVyRWxlbWVudC5oCmluZGV4IDUy
MWFlMjA0ZWI0ZjUyYzZkMzc5OTllNDRlMjJiMDUyODhiODMyYjIuLjEzNmY0NDI5MmU5NzNkNjFh
Yzg5ZmZkNmMwNGU4ZmFkMDAxYTRmNDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVH
YXVzc2lhbkJsdXJFbGVtZW50LmgKQEAgLTU0LDYgKzU0LDcgQEAgcHJpdmF0ZToKICAgICB2b2lk
IHN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYpIG92ZXJyaWRlOwogCiAg
ICAgVmVjdG9yPEF0b21TdHJpbmc+IGZpbHRlckVmZmVjdElucHV0c05hbWVzKCkgY29uc3Qgb3Zl
cnJpZGUgeyByZXR1cm4geyBpbjEoKSB9OyB9CisgICAgSW50T3V0c2V0cyBvdXRzZXRzKGNvbnN0
IEZsb2F0UmVjdCYgdGFyZ2V0Qm91bmRpbmdCb3gsIFNWR1VuaXRUeXBlczo6U1ZHVW5pdFR5cGUg
cHJpbWl0aXZlVW5pdHMpIGNvbnN0IG92ZXJyaWRlOwogICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+
IGZpbHRlckVmZmVjdChjb25zdCBTVkdGaWx0ZXJCdWlsZGVyJiwgY29uc3QgRmlsdGVyRWZmZWN0
VmVjdG9yJikgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICBQcm9wZXJ0eVJlZ2lzdHJ5IG1fcHJvcGVy
dHlSZWdpc3RyeSB7ICp0aGlzIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
RkVPZmZzZXRFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRU9mZnNldEVsZW1l
bnQuY3BwCmluZGV4IDg0M2Y4ZGU3N2FiOGM4MWRiYTMzYWYyMWRmNjBjOGQyZThjYjI3NDMuLmI0
M2NjNWFlYzVhZGUwNTg1OTFkMDRkOWM1YWM4ODQ0MDU5MWJhMjcgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdGRU9mZnNldEVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdGRU9mZnNldEVsZW1lbnQuY3BwCkBAIC03OSw2ICs3OSwxMiBAQCB2b2lkIFNWR0ZF
T2Zmc2V0RWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJiBh
dHRyTmFtZSkKICAgICBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OnN2Z0F0
dHJpYnV0ZUNoYW5nZWQoYXR0ck5hbWUpOwogfQogCitJbnRPdXRzZXRzIFNWR0ZFT2Zmc2V0RWxl
bWVudDo6b3V0c2V0cyhjb25zdCBGbG9hdFJlY3QmIHRhcmdldEJvdW5kaW5nQm94LCBTVkdVbml0
VHlwZXM6OlNWR1VuaXRUeXBlIHByaW1pdGl2ZVVuaXRzKSBjb25zdAoreworICAgIGF1dG8gb2Zm
c2V0ID0gU1ZHRmlsdGVyOjpjYWxjdWxhdGVSZXNvbHZlZFNpemUoeyBkeCgpLCBkeSgpIH0sIHRh
cmdldEJvdW5kaW5nQm94LCBwcmltaXRpdmVVbml0cyk7CisgICAgcmV0dXJuIEZFT2Zmc2V0Ojpj
YWxjdWxhdGVPdXRzZXRzKHRvRmxvYXRQb2ludChvZmZzZXQpKTsKK30KKwogUmVmUHRyPEZpbHRl
ckVmZmVjdD4gU1ZHRkVPZmZzZXRFbGVtZW50OjpmaWx0ZXJFZmZlY3QoY29uc3QgU1ZHRmlsdGVy
QnVpbGRlciYsIGNvbnN0IEZpbHRlckVmZmVjdFZlY3RvciYpIGNvbnN0CiB7CiAgICAgcmV0dXJu
IEZFT2Zmc2V0OjpjcmVhdGUoZHgoKSwgZHkoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHRkVPZmZzZXRFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVPZmZz
ZXRFbGVtZW50LmgKaW5kZXggZjg1OTU5OGEwZmU2YTBkN2E4ODRiMGMwYzViOThiZWYyY2Y0N2Ji
ZC4uMTU2ZWRkZjQ2OTlkYmM2YTIyNWZiYTU5ZTAyOThkNmU3OWY3YjA4YSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFT2Zmc2V0RWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdGRU9mZnNldEVsZW1lbnQuaApAQCAtNDgsNiArNDgsNyBAQCBwcml2YXRlOgog
ICAgIHZvaWQgc3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJikgb3ZlcnJp
ZGU7CiAKICAgICBWZWN0b3I8QXRvbVN0cmluZz4gZmlsdGVyRWZmZWN0SW5wdXRzTmFtZXMoKSBj
b25zdCBvdmVycmlkZSB7IHJldHVybiB7IGluMSgpIH07IH0KKyAgICBJbnRPdXRzZXRzIG91dHNl
dHMoY29uc3QgRmxvYXRSZWN0JiB0YXJnZXRCb3VuZGluZ0JveCwgU1ZHVW5pdFR5cGVzOjpTVkdV
bml0VHlwZSBwcmltaXRpdmVVbml0cykgY29uc3Qgb3ZlcnJpZGU7CiAgICAgUmVmUHRyPEZpbHRl
ckVmZmVjdD4gZmlsdGVyRWZmZWN0KGNvbnN0IFNWR0ZpbHRlckJ1aWxkZXImLCBjb25zdCBGaWx0
ZXJFZmZlY3RWZWN0b3ImKSBjb25zdCBvdmVycmlkZTsKIAogICAgIFByb3BlcnR5UmVnaXN0cnkg
bV9wcm9wZXJ0eVJlZ2lzdHJ5IHsgKnRoaXMgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXMuaCBiL1NvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXMuaAppbmRleCA3ZGY5
MjA2ZmFhOTFlYWZlZmVmZGE1MjllOTJmNjljNTFmM2Q4ZWQ5Li5iMjJlNTM5NWNkNDhiYWFhNDYx
ZjFkMDFhZDRlZDNmYWQyZjdkY2I4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
RmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcy5oCkBAIC01Myw2ICs1Myw3
IEBAIHB1YmxpYzoKICAgICAvLyBSZXR1cm5zIHRydWUsIGlmIHRoZSBuZXcgdmFsdWUgaXMgZGlm
ZmVyZW50IGZyb20gdGhlIG9sZCBvbmUuCiAgICAgdmlydHVhbCBib29sIHNldEZpbHRlckVmZmVj
dEF0dHJpYnV0ZShGaWx0ZXJFZmZlY3QqLCBjb25zdCBRdWFsaWZpZWROYW1lJik7CiAgICAgdmly
dHVhbCBWZWN0b3I8QXRvbVN0cmluZz4gZmlsdGVyRWZmZWN0SW5wdXRzTmFtZXMoKSBjb25zdCB7
IHJldHVybiB7IH07IH0KKyAgICB2aXJ0dWFsIEludE91dHNldHMgb3V0c2V0cyhjb25zdCBGbG9h
dFJlY3QmLCBTVkdVbml0VHlwZXM6OlNWR1VuaXRUeXBlKSBjb25zdCB7IHJldHVybiB7IH07IH0K
ICAgICB2aXJ0dWFsIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGZpbHRlckVmZmVjdChjb25zdCBTVkdG
aWx0ZXJCdWlsZGVyJiwgY29uc3QgRmlsdGVyRWZmZWN0VmVjdG9yJikgY29uc3QgPSAwOwogCiBw
cm90ZWN0ZWQ6CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVy
cy9TVkdGaWx0ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZH
RmlsdGVyLmNwcAppbmRleCA5NWYyNGE3ZGQ5ZTY0ZWVkMDZiNThiNTI5YTg1MDBkZjlhOGNmOTYz
Li5kN2RhODBiZWExNDQ4ZDFiMzc1ZWUwNzE4NTIwZDM4ODhlNzMyY2M5IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXIuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlci5jcHAKQEAgLTc0LDkg
Kzc0LDE0IEBAIFNWR0ZpbHRlcjo6U1ZHRmlsdGVyKGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0Qm91
bmRpbmdCb3gsIFNWR1VuaXRUeXBlczo6U1ZHVW5pdFR5CiB7CiB9CiAKK0Zsb2F0U2l6ZSBTVkdG
aWx0ZXI6OmNhbGN1bGF0ZVJlc29sdmVkU2l6ZShjb25zdCBGbG9hdFNpemUmIHNpemUsIGNvbnN0
IEZsb2F0UmVjdCYgdGFyZ2V0Qm91bmRpbmdCb3gsIFNWR1VuaXRUeXBlczo6U1ZHVW5pdFR5cGUg
cHJpbWl0aXZlVW5pdHMpCit7CisgICAgcmV0dXJuIHByaW1pdGl2ZVVuaXRzID09IFNWR1VuaXRU
eXBlczo6U1ZHX1VOSVRfVFlQRV9PQkpFQ1RCT1VORElOR0JPWCA/IHNpemUgKiB0YXJnZXRCb3Vu
ZGluZ0JveC5zaXplKCkgOiBzaXplOworfQorCiBGbG9hdFNpemUgU1ZHRmlsdGVyOjpyZXNvbHZl
ZFNpemUoY29uc3QgRmxvYXRTaXplJiBzaXplKSBjb25zdAogewotICAgIHJldHVybiBtX3ByaW1p
dGl2ZVVuaXRzID09IFNWR1VuaXRUeXBlczo6U1ZHX1VOSVRfVFlQRV9PQkpFQ1RCT1VORElOR0JP
WCA/IHNpemUgKiBtX3RhcmdldEJvdW5kaW5nQm94LnNpemUoKSA6IHNpemU7CisgICAgcmV0dXJu
IGNhbGN1bGF0ZVJlc29sdmVkU2l6ZShzaXplLCBtX3RhcmdldEJvdW5kaW5nQm94LCBtX3ByaW1p
dGl2ZVVuaXRzKTsKIH0KIAogYm9vbCBTVkdGaWx0ZXI6OnN1cHBvcnRzQWNjZWxlcmF0ZWRSZW5k
ZXJpbmcoKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2Zp
bHRlcnMvU1ZHRmlsdGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9T
VkdGaWx0ZXIuaAppbmRleCA0ZWUwZmI4N2FmMWMxYTQxZGVmMTg2YTU1MzQxMjhiYTY3ODBlOWNj
Li4yY2RjNDhjMjU3NGJlY2MxYTRjY2JlYjQwZDFjOTU5ZDRmZDA0YzU5IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXIuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXIuaApAQCAtNDgsOCArNDgs
MTAgQEAgcHVibGljOgogCiAgICAgUmVmUHRyPEZpbHRlckltYWdlPiBhcHBseShGaWx0ZXJJbWFn
ZSogc291cmNlSW1hZ2UsIEZpbHRlclJlc3VsdHMmKSBmaW5hbDsKIAotICAgIFdURjo6VGV4dFN0
cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBGaWx0ZXJSZXBy
ZXNlbnRhdGlvbikgY29uc3QgZmluYWw7CisgICAgc3RhdGljIEZsb2F0U2l6ZSBjYWxjdWxhdGVS
ZXNvbHZlZFNpemUoY29uc3QgRmxvYXRTaXplJiwgY29uc3QgRmxvYXRSZWN0JiB0YXJnZXRCb3Vu
ZGluZ0JveCwgU1ZHVW5pdFR5cGVzOjpTVkdVbml0VHlwZSBwcmltaXRpdmVVbml0cyk7CiAKKyAg
ICBXVEY6OlRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24oV1RGOjpUZXh0U3RyZWFt
JiwgRmlsdGVyUmVwcmVzZW50YXRpb24pIGNvbnN0IGZpbmFsOworICAgIAogcHJpdmF0ZToKICAg
ICBTVkdGaWx0ZXIoUmVuZGVyaW5nTW9kZSwgY29uc3QgRmxvYXRTaXplJiBmaWx0ZXJTY2FsZSwg
Q2xpcE9wZXJhdGlvbiwgY29uc3QgRmxvYXRSZWN0JiBmaWx0ZXJSZWdpb24sIGNvbnN0IEZsb2F0
UmVjdCYgdGFyZ2V0Qm91bmRpbmdCb3gsIFNWR1VuaXRUeXBlczo6U1ZHVW5pdFR5cGUgcHJpbWl0
aXZlVW5pdHMpOwogICAgIFNWR0ZpbHRlcihjb25zdCBGbG9hdFJlY3QmIHRhcmdldEJvdW5kaW5n
Qm94LCBTVkdVbml0VHlwZXM6OlNWR1VuaXRUeXBlIHByaW1pdGl2ZVVuaXRzLCBTVkdGaWx0ZXJF
eHByZXNzaW9uJiYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2Zp
bHRlcnMvU1ZHRmlsdGVyQnVpbGRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3Mv
ZmlsdGVycy9TVkdGaWx0ZXJCdWlsZGVyLmNwcAppbmRleCA1Zjg4NTY1MDA4YmNmN2Q2ZGM4ZDU5
MGUwNzAzNjgwMzAzZjE0NDA3Li43NTBmMGE4MzQyMGJjYzI0NTBhNDJhY2JlOTY5NWU5OTk1ZGRi
ZTMyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdG
aWx0ZXJCdWlsZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVy
cy9TVkdGaWx0ZXJCdWlsZGVyLmNwcApAQCAtMzcsNiArMzcsNzMgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBtYXhUb3RhbE51bWJlckZpbHRlckVmZmVj
dHMgPSAxMDA7CiBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIG1heENvdW50Q2hpbGROb2RlcyA9
IDIwMDsKIAorSW50T3V0c2V0cyBTVkdGaWx0ZXJCdWlsZGVyOjpjYWxjdWxhdGVPdXRzZXRzKFNW
R0ZpbHRlckVsZW1lbnQmIGZpbHRlckVsZW1lbnQsIGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0Qm91
bmRpbmdCb3gpCit7CisgICAgaWYgKGZpbHRlckVsZW1lbnQuY291bnRDaGlsZE5vZGVzKCkgPiBt
YXhDb3VudENoaWxkTm9kZXMpCisgICAgICAgIHJldHVybiB7IH07CisKKyAgICBIYXNoTWFwPEF0
b21TdHJpbmcsIFJlZjxTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM+PiBuYW1l
ZFByaW1pdGl2ZXM7CisgICAgUmVmUHRyPFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmli
dXRlcz4gbGFzdFByaW1pdGl2ZTsKKworICAgIHVzaW5nIEZpbHRlclByaW1pdGl2ZVZlY3RvciA9
IFZlY3RvcjxSZWY8U1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzPj47CisgICAg
SGFzaE1hcDxSZWY8U1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzPiwgRmlsdGVy
UHJpbWl0aXZlVmVjdG9yPiBpbnB1dHNNYXA7CisKKyAgICBhdXRvIGFkZE5hbWVkUHJpbWl0aXZl
ID0gWyZdKGNvbnN0IEF0b21TdHJpbmcmIGlkLCBSZWY8U1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRh
cmRBdHRyaWJ1dGVzPiYmIHByaW1pdGl2ZSkgeworICAgICAgICBsYXN0UHJpbWl0aXZlID0gV1RG
TW92ZShwcmltaXRpdmUpOworICAgICAgICBpZiAoaWQuaXNFbXB0eSgpKQorICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICBuYW1lZFByaW1pdGl2ZXMuc2V0KGlkLCBSZWYgeyAqbGFzdFByaW1p
dGl2ZSB9KTsKKyAgICB9OworCisgICAgYXV0byBnZXROYW1lZFByaW1pdGl2ZSA9IFsmXShjb25z
dCBBdG9tU3RyaW5nJiBpZCkgLT4gUmVmUHRyPFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0
cmlidXRlcz4geworICAgICAgICBpZiAoaWQuaXNFbXB0eSgpKQorICAgICAgICAgICAgcmV0dXJu
IGxhc3RQcmltaXRpdmU7CisKKyAgICAgICAgcmV0dXJuIG5hbWVkUHJpbWl0aXZlcy5nZXQoaWQp
OworICAgIH07CisKKyAgICBhdXRvIGdldE5hbWVkUHJpbWl0aXZlcyA9IFsmXShTcGFuPGNvbnN0
IEF0b21TdHJpbmc+IG5hbWVzKSAtPiBzdGQ6Om9wdGlvbmFsPEZpbHRlclByaW1pdGl2ZVZlY3Rv
cj4geworICAgICAgICBGaWx0ZXJQcmltaXRpdmVWZWN0b3IgcHJpbWl0aXZlczsKKworICAgICAg
ICBwcmltaXRpdmVzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobmFtZXMuc2l6ZSgpKTsKKworICAg
ICAgICBmb3IgKGF1dG8mIG5hbWUgOiBuYW1lcykgeworICAgICAgICAgICAgYXV0byBwcmltaXRp
dmUgPSBnZXROYW1lZFByaW1pdGl2ZShuYW1lKTsKKyAgICAgICAgICAgIGlmICghcHJpbWl0aXZl
KQorICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICAgICAgICAgIHBy
aW1pdGl2ZXMudW5jaGVja2VkQXBwZW5kKHByaW1pdGl2ZS5yZWxlYXNlTm9uTnVsbCgpKTsKKyAg
ICAgICAgfQorCisgICAgICAgIHJldHVybiBwcmltaXRpdmVzOworICAgIH07CisKKyAgICBhdXRv
IHNldFByaW1pdGl2ZUlucHV0cyA9IFsmXShTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJp
YnV0ZXMmIHByaW1pdGl2ZSwgRmlsdGVyUHJpbWl0aXZlVmVjdG9yJiYgaW5wdXRzKSB7CisgICAg
ICAgIGlucHV0c01hcC5zZXQoeyBwcmltaXRpdmUgfSwgV1RGTW92ZShpbnB1dHMpKTsKKyAgICB9
OworCisgICAgc3RkOjpmdW5jdGlvbjxJbnRPdXRzZXRzKFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5k
YXJkQXR0cmlidXRlcyYpPiBjYWxjdWxhdGVPdXRzZXRzID0gWyZdKFNWR0ZpbHRlclByaW1pdGl2
ZVN0YW5kYXJkQXR0cmlidXRlcyYgcHJpbWl0aXZlKSAtPiBJbnRPdXRzZXRzIHsKKyAgICAgICAg
SW50T3V0c2V0cyBvdXRzZXRzOworICAgICAgICBmb3IgKGF1dG8mIGlucHV0IDogaW5wdXRzTWFw
LmdldChwcmltaXRpdmUpKQorICAgICAgICAgICAgb3V0c2V0cyArPSBjYWxjdWxhdGVPdXRzZXRz
KGlucHV0KTsKKyAgICAgICAgcmV0dXJuIG91dHNldHMgKz0gcHJpbWl0aXZlLm91dHNldHModGFy
Z2V0Qm91bmRpbmdCb3gsIGZpbHRlckVsZW1lbnQucHJpbWl0aXZlVW5pdHMoKSk7CisgICAgfTsK
KworICAgIGZvciAoYXV0byYgcHJpbWl0aXZlIDogY2hpbGRyZW5PZlR5cGU8U1ZHRmlsdGVyUHJp
bWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzPihmaWx0ZXJFbGVtZW50KSkgeworICAgICAgICBhdXRv
IGlucHV0cyA9IGdldE5hbWVkUHJpbWl0aXZlcyhwcmltaXRpdmUuZmlsdGVyRWZmZWN0SW5wdXRz
TmFtZXMoKSk7CisgICAgICAgIGlmICghaW5wdXRzKQorICAgICAgICAgICAgcmV0dXJuIHsgfTsK
KworICAgICAgICBhZGROYW1lZFByaW1pdGl2ZShwcmltaXRpdmUucmVzdWx0KCksIHsgcHJpbWl0
aXZlIH0pOworICAgICAgICBzZXRQcmltaXRpdmVJbnB1dHMocHJpbWl0aXZlLCBXVEZNb3ZlKCpp
bnB1dHMpKTsKKyAgICB9CisgICAgCisgICAgaWYgKCFsYXN0UHJpbWl0aXZlKQorICAgICAgICBy
ZXR1cm4geyB9OworCisgICAgcmV0dXJuIGNhbGN1bGF0ZU91dHNldHMoKmxhc3RQcmltaXRpdmUp
OworfQorCiB2b2lkIFNWR0ZpbHRlckJ1aWxkZXI6OnNldHVwQnVpbHRpbkVmZmVjdHMoUmVmPEZp
bHRlckVmZmVjdD4gc291cmNlR3JhcGhpYykKIHsKICAgICBtX2J1aWx0aW5FZmZlY3RzLmFkZChT
b3VyY2VHcmFwaGljOjplZmZlY3ROYW1lKCksIHNvdXJjZUdyYXBoaWMpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyQnVpbGRlci5oIGIv
U291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyQnVpbGRlci5oCmlu
ZGV4IGM5OTEwMmU3MGJlMDQyMzRkZDZiMjYzMzhhZTMwMTkwNWU2MTAxYzEuLmI5MmUxZGM2ZTg1
MzA4MTQxMjk1Mzc1NGZkNzdiNmRhMTA3MDlhMWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlckJ1aWxkZXIuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXJCdWlsZGVyLmgKQEAgLTQwLDYgKzQw
LDggQEAgY2xhc3MgU1ZHRmlsdGVyQnVpbGRlciB7CiBwdWJsaWM6CiAgICAgU1ZHRmlsdGVyQnVp
bGRlcigpID0gZGVmYXVsdDsKIAorICAgIHN0YXRpYyBJbnRPdXRzZXRzIGNhbGN1bGF0ZU91dHNl
dHMoU1ZHRmlsdGVyRWxlbWVudCYsIGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0Qm91bmRpbmdCb3gp
OworCiAgICAgdm9pZCBzZXRUYXJnZXRCb3VuZGluZ0JveChjb25zdCBGbG9hdFJlY3QmIHIpIHsg
bV90YXJnZXRCb3VuZGluZ0JveCA9IHI7IH0KICAgICBGbG9hdFJlY3QgdGFyZ2V0Qm91bmRpbmdC
b3goKSBjb25zdCB7IHJldHVybiBtX3RhcmdldEJvdW5kaW5nQm94OyB9CiAgICAgCg==
</data>
<flag name="review"
          id="478726"
          type_id="1"
          status="+"
          setter="simon.fraser"
    />
    <flag name="commit-queue"
          id="479340"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>455955</attachid>
            <date>2022-03-28 14:22:33 -0700</date>
            <delta_ts>2022-03-28 16:09:28 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-236574-20220328142232.patch</filename>
            <type>text/plain</type>
            <size>64567</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjkxOTQ4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNzMxNGY1M2YzNjY2NDJk
MmVmZmRhOTRmYTljNzhkZjM0MzQ2NWI5ZS4uMjZjZTA2NWQ0ZjMwYjQ0M2FkMzI3ODJlZDg4YTVk
M2E2NjQwMDE0ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEyOCBAQAorMjAyMi0wMy0yOCAgU2Fp
ZCBBYm91LUhhbGxhd2EgIDxzYWlkQGFwcGxlLmNvbT4KKworICAgICAgICBbR1BVIFByb2Nlc3Nd
IENTU0ZpbHRlciBzaG91bGQgYmUgY3JlYXRlZCBvbmx5IGF0IHRoZSBwYWludGluZyB0aW1lCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzY1NzQKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJbnN0ZWFkIG9m
IGJ1aWxkaW5nIHRoZSB3aG9sZSBmaWx0ZXIgY2hhaW4gdG8gZ2V0IHRoZSBmaWx0ZXIgb3V0c2V0
cyBhdCAKKyAgICAgICAgdGhlIGxheW91dCB0aW1lLCB3ZSBjYW4gdXNlIHRoZSBTVkdGaWx0ZXJQ
cmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXMgYW5kCisgICAgICAgIHRoZSBGaWx0ZXJPcGVyYXRp
b24gc3VwZXIgY2xhc3NlcyB0byBnZXQgdGhlaXIgb3V0c2V0cyB3aXRob3V0IGhhdmluZyB0bwor
ICAgICAgICBidWlsZCB0aGUgRmlsdGVyRWZmZWN0cy4KKworICAgICAgICBDU1NGaWx0ZXI6OmNh
bGN1bGF0ZU91dHNldHMoKSBpcyBhIHN0YXRpYyBtZXRob2Qgd2hpY2ggd2lsbCBsb29wIHRocm91
Z2gKKyAgICAgICAgdGhlIEZpbHRlck9wZXJhdGlvbnMgYW5kIHdpbGwgYWRkIHVwIHRoZSBvdXRz
ZXRzIG9mIHRoZSBibHVyLCB0aGUgZHJvcC0KKyAgICAgICAgc2hhZG93IGFuZCB0aGUgcmVmZXJl
bmNlIEZpbHRlck9wZXJhdGlvbi4KKworICAgICAgICBTVkdGaWx0ZXJCdWlsZGVyOjpjYWxjdWxh
dGVGaWx0ZXJPdXRzZXRzKCkgd2lsbCBsb29wIHRocm91Z2ggdGhlIHByaW1pdGl2ZXMKKyAgICAg
ICAgb2YgdGhlIGZpbHRlciBlbGVtZW50IGFuZCB3aWxsIGNhbGwgdGhlIG5ldyB2aXJ0dWFsIG1l
dGhvZCBvdXRzZXRzKCkgd2hpY2gKKyAgICAgICAgd2lsbCBjYWxsIGEgc3RhdGljIG1ldGhvZCBp
biB0aGUgY29ycmVzcG9uZGluZyBGaWx0ZXJFZmZlY3QuCisKKyAgICAgICAgRkVEcm9wU2hhZG93
LCBGRUdhdXNzaWFuQmx1ciBhbmQgRkVPZmZzZXQgd2lsbCBiZSBwcm92aWRlIHN0YXRpYyBtZXRo
b2RzCisgICAgICAgIGZvciBjYWxjdWxhdGluZyB0aGUgZWZmZWN0IG91dHNldHMuIFRoZXNlIHN0
YXRpYyBtZXRob2RzIHdpbGwgYmUgY2FsbGVkIAorICAgICAgICBmcm9tIENTU0ZpbHRlcjo6Y2Fs
Y3VsYXRlT3V0c2V0cygpIGFuZCBmcm9tIHRoZSBTVkdGRXh4eEVsZW1lbnRzLgorCisgICAgICAg
IFRvIHJlbW92ZSB0aGUgZHVwbGljYXRpb24gb2YgdGhlIGNvZGUgZnJvbSBTVkdGaWx0ZXJCdWls
ZGVyOjoKKyAgICAgICAgYnVpbGRGaWx0ZXJFZmZlY3RzKCkgYW5kIGNhbGN1bGF0ZUZpbHRlck91
dHNldHMoKSwgYSBuZXcgdGVtcGxhdGUgY2xhc3MKKyAgICAgICAgbmFtZWQgU1ZHRmlsdGVyR3Jh
cGggd2lsbCBiZSBpbnRyb2R1Y2VkLiBJdCByZXByZXNlbnRzIHRoZSBncmFwaCBvZiB0aGUKKyAg
ICAgICAgU1ZHRmlsdGVyLiBUaGUgbm9kZXMgb2YgIHRoaXMgZ3JhcGggd2lsbCBiZSBvZiB0eXBl
IEZpbHRlckVmZmVjY3Qgd2hlbgorICAgICAgICBpdCBpcyB1c2VkIHRvIGJ1aWxkIHRoZSBTVkdG
aWx0ZXJFeHByZXNzaW9uLiBUaGUgbm9kZXMgd2lsbCBiZSBvZiB0eXBlCisgICAgICAgIFNWR0Zp
bHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcyB3aGVuIGl0IGlzIHVzZWQgdG8gY2FsY3Vs
YXRlIHRoZQorICAgICAgICBmaWx0ZXIgb3V0c2V0cy4KKworICAgICAgICAqIFdlYkNvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFRHJvcFNoYWRvdy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRURyb3BTaGFkb3c6OmNh
bGN1bGF0ZU91dHNldHMpOgorICAgICAgICAoV2ViQ29yZTo6RkVEcm9wU2hhZG93OjpvdXRzZXRz
IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
RHJvcFNoYWRvdy5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVHYXVz
c2lhbkJsdXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVHYXVzc2lhbkJsdXI6OmNhbGN1bGF0
ZU91dHNldHMpOgorICAgICAgICAoV2ViQ29yZTo6RkVHYXVzc2lhbkJsdXI6Om91dHNldHMgY29u
c3QpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVHYXVz
c2lhbkJsdXIuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFT2Zmc2V0
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFT2Zmc2V0OjpjYWxjdWxhdGVPdXRzZXRzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkZFT2Zmc2V0OjpvdXRzZXRzIGNvbnN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFT2Zmc2V0Lmg6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZpbHRlckZ1bmN0aW9uLmg6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJG
dW5jdGlvbjo6YXBwbHkpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246Om91dHNl
dHMgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIHJlbmRlcmluZy9DU1NGaWx0ZXIuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6Y2FsY3VsYXRlQmx1ckVmZmVjdE91dHNldHMpOgorICAgICAgICAo
V2ViQ29yZTo6Y2FsY3VsYXRlRHJvcFNoYWRvd0VmZmVjdE91dHNldHMpOgorICAgICAgICAoV2Vi
Q29yZTo6cmVmZXJlbmNlRmlsdGVyRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpjYWxjdWxh
dGVSZWZlcmVuY2VGaWx0ZXJPdXRzZXRzKToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZVJlZmVy
ZW5jZUZpbHRlcik6CisgICAgICAgIChXZWJDb3JlOjpDU1NGaWx0ZXI6OmJ1aWxkRmlsdGVyRnVu
Y3Rpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6Y2FsY3VsYXRlT3V0c2V0cyk6
CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVTVkdGaWx0ZXIpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6Q1NTRmlsdGVyOjpvdXRzZXRzIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBy
ZW5kZXJpbmcvQ1NTRmlsdGVyLmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpmaWx0ZXJzRm9yUGFpbnRpbmcgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmNhbGN1bGF0ZUNsaXBSZWN0cyBj
b25zdCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyRmlsdGVycy5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckZpbHRlcnM6OmNhbGN1bGF0ZU91dHNldHMpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJGaWx0ZXJzOjpiZWdpbkZpbHRlckVmZmVjdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckZpbHRlcnM6OnNldEZpbHRlcik6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckZpbHRlcnM6OmJ1aWxkRmlsdGVyKTogRGVs
ZXRlZC4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXJGaWx0ZXJzLmg6CisgICAgICAg
ICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJTVkdSZXNvdXJjZUZpbHRlcjo6YXBwbHlSZXNvdXJjZSk6CisgICAgICAg
ICogcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJUcmVlQXNUZXh0LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OndyaXRlU1ZHUmVzb3VyY2VDb250YWluZXIpOgorICAgICAgICAqIHN2Zy9TVkdGRURyb3BT
aGFkb3dFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFRHJvcFNoYWRvd0VsZW1l
bnQ6Om91dHNldHMgY29uc3QpOgorICAgICAgICAqIHN2Zy9TVkdGRURyb3BTaGFkb3dFbGVtZW50
Lmg6CisgICAgICAgICogc3ZnL1NWR0ZFR2F1c3NpYW5CbHVyRWxlbWVudC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpTVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQ6Om91dHNldHMgY29uc3QpOgorICAg
ICAgICAqIHN2Zy9TVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQuaDoKKyAgICAgICAgKiBzdmcvU1ZH
RkVPZmZzZXRFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFT2Zmc2V0RWxlbWVu
dDo6b3V0c2V0cyBjb25zdCk6CisgICAgICAgICogc3ZnL1NWR0ZFT2Zmc2V0RWxlbWVudC5oOgor
ICAgICAgICAqIHN2Zy9TVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXMuaDoKKyAg
ICAgICAgKFdlYkNvcmU6OlNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6b3V0
c2V0cyBjb25zdCk6CisgICAgICAgICogc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZpbHRlcjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNv
cmU6OlNWR0ZpbHRlcjo6Y2FsY3VsYXRlUmVzb2x2ZWRTaXplKToKKyAgICAgICAgKFdlYkNvcmU6
OlNWR0ZpbHRlcjo6cmVzb2x2ZWRTaXplIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0Zp
bHRlcjo6b3V0c2V0cyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogc3ZnL2dyYXBoaWNzL2Zp
bHRlcnMvU1ZHRmlsdGVyLmg6CisgICAgICAgICogc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmls
dGVyQnVpbGRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0ZXJCdWlsZGVyOjpTVkdG
aWx0ZXJCdWlsZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OmJ1aWxkRWZmZWN0c0V4cHJlc3Npb24p
OgorICAgICAgICAoV2ViQ29yZTo6U1ZHRmlsdGVyQnVpbGRlcjo6YnVpbGRGaWx0ZXJFeHByZXNz
aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OmNhbGN1bGF0ZVByaW1pdGl2ZXNPdXRzZXRzKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNWR0ZpbHRlckJ1aWxkZXI6OmNhbGN1bGF0ZUZpbHRlck91dHNldHMp
OgorICAgICAgICAoV2ViQ29yZTo6U1ZHRmlsdGVyQnVpbGRlcjo6c2V0dXBCdWlsdGluRWZmZWN0
cyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0ZXJCdWlsZGVyOjpidWlsZEZp
bHRlckVmZmVjdHMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U1ZHRmlsdGVyQnVpbGRl
cjo6c291cmNlR3JhcGhpYyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTVkdG
aWx0ZXJCdWlsZGVyOjpzb3VyY2VBbHBoYSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpTVkdGaWx0ZXJCdWlsZGVyOjphZGROYW1lZEVmZmVjdCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpTVkdGaWx0ZXJCdWlsZGVyOjpuYW1lZEVmZmVjdCBjb25zdCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0ZXJCdWlsZGVyOjpuYW1lZEVmZmVjdHMgY29uc3Qp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U1ZHRmlsdGVyQnVpbGRlcjo6c2V0RWZmZWN0
SW5wdXRzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZpbHRlckJ1aWxkZXI6OmFw
cGVuZEVmZmVjdFRvRWZmZWN0UmVuZGVyZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
U1ZHRmlsdGVyQnVpbGRlcjo6ZWZmZWN0R2VvbWV0cnkgY29uc3QpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6U1ZHRmlsdGVyQnVpbGRlcjo6YnVpbGRFZmZlY3RFeHByZXNzaW9uIGNvbnN0
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZpbHRlckJ1aWxkZXI6OmJ1aWxkRXhw
cmVzc2lvbiBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogc3ZnL2dyYXBoaWNzL2ZpbHRlcnMv
U1ZHRmlsdGVyQnVpbGRlci5oOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRmlsdGVyQnVpbGRlcjo6
dGFyZ2V0Qm91bmRpbmdCb3ggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRmlsdGVyQnVp
bGRlcjo6cHJpbWl0aXZlVW5pdHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRmlsdGVy
QnVpbGRlcjo6ZWZmZWN0QnlSZW5kZXJlcik6CisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0ZXJC
dWlsZGVyOjpzZXRUYXJnZXRCb3VuZGluZ0JveCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpTVkdGaWx0ZXJCdWlsZGVyOjpzZXRQcmltaXRpdmVVbml0cyk6IERlbGV0ZWQuCisgICAgICAg
ICogc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyR3JhcGguaDogQWRkZWQuCisgICAgICAg
IChXZWJDb3JlOjpTVkdGaWx0ZXJHcmFwaDo6U1ZHRmlsdGVyR3JhcGgpOgorICAgICAgICAoV2Vi
Q29yZTo6U1ZHRmlsdGVyR3JhcGg6OnNvdXJjZUdyYXBoaWMgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6U1ZHRmlsdGVyR3JhcGg6OnNvdXJjZUFscGhhIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OlNWR0ZpbHRlckdyYXBoOjphZGROYW1lZE5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZH
RmlsdGVyR3JhcGg6OmdldE5hbWVkTm9kZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdG
aWx0ZXJHcmFwaDo6Z2V0TmFtZWROb2RlcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdG
aWx0ZXJHcmFwaDo6c2V0Tm9kZUlucHV0cyk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0ZXJH
cmFwaDo6Z2V0Tm9kZUlucHV0cyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0ZXJH
cmFwaDo6bGFzdE5vZGUgY29uc3QpOgorCiAyMDIyLTAzLTI2ICBZdXN1a2UgU3V6dWtpICA8eXN1
enVraUBhcHBsZS5jb20+CiAKICAgICAgICAgVXNlIHN0YXRpY19hc3NlcnQgaW5zdGVhZCBvZiBD
T01QSUxFX0FTU0VSVApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCmluZGV4IDVhYjkzMjFiNTJhYmUyZDk4YWMzMDIyYmFjY2EyOGJjNjViZWUz
ZWYuLjJlYWU1NmI3NTE3ZWZkNzYwMGUzYWU0ZGRjNzExZWUyYTlkYWFiZDggMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9T
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTExNDU1
LDYgKzExNDU1LDcgQEAKIAkJNzJGMUFEQTMxQTM5MEI5RjAwMDE0RTE4IC8qIEpTRVhURnJhZ0Rl
cHRoLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTRVhURnJhZ0Rl
cHRoLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzJGMUFEQTQxQTM5MEI5RjAw
MDE0RTE4IC8qIEpTRVhURnJhZ0RlcHRoLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEpTRVhURnJhZ0RlcHRoLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyRjY2
N0RGMjYwQzI2NDQwMEVFMzZBRCAvKiBEaWFnbm9zdGljTG9nZ2luZ0RvbWFpbi5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBEaWFnbm9zdGljTG9nZ2luZ0RvbWFpbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQk3MkY3QTA4MDI3RjE3MUJGMDAwOEVFRTggLyogU1ZHRmlsdGVyR3JhcGguaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gU1ZHRmlsdGVyR3JhcGguaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJNzJGN0U3NDIyNzlCOEY3NDAwRDgyRDJEIC8qIFNvdXJjZUltYWdlLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNvdXJjZUltYWdlLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJNzJGN0U3NDQyNzlCOEY3NDAwRDgyRDJEIC8qIFNvdXJjZUltYWdl
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNvdXJjZUltYWdlLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyRjdFNzRFMjc5Q0VERTgwMEQ4MkQyRCAvKiBGRUlt
YWdlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZFSW1hZ2UuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwpAQCAtMjg4NzYsNiArMjg4NzcsNyBAQAogCQkJCTA4MUVCRjM4MEZEMzRGNDEw
MERBNzU1OSAvKiBTVkdGaWx0ZXJCdWlsZGVyLmNwcCAqLywKIAkJCQkwODFFQkYzOTBGRDM0RjQx
MDBEQTc1NTkgLyogU1ZHRmlsdGVyQnVpbGRlci5oICovLAogCQkJCTcyNkNERTI1Mjc1QjQ4OTcw
MEE0NDVCMiAvKiBTVkdGaWx0ZXJFeHByZXNzaW9uLmggKi8sCisJCQkJNzJGN0EwODAyN0YxNzFC
RjAwMDhFRUU4IC8qIFNWR0ZpbHRlckdyYXBoLmggKi8sCiAJCQkpOwogCQkJcGF0aCA9IGZpbHRl
cnM7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURyb3BTaGFkb3cuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURyb3BTaGFkb3cuY3BwCmluZGV4IDE3
MzM5MDg0ZTY5ZTBkYzBkZGFlNmYyZDc3MzRmMWVkMTNjNWFlYmUuLjYxZDk3NzIxZTJkMDllODU2
ODQzYTc0MzM0ZGI0MjhhZTc3MjVlOTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEcm9wU2hhZG93LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRHJvcFNoYWRvdy5jcHAKQEAgLTYxLDE0ICs2
MSwxNCBAQCBGbG9hdFJlY3QgRkVEcm9wU2hhZG93OjpjYWxjdWxhdGVJbWFnZVJlY3QoY29uc3Qg
RmlsdGVyJiBmaWx0ZXIsIGNvbnN0IEZpbHRlckltYQogICAgIHJldHVybiBmaWx0ZXIuY2xpcFRv
TWF4RWZmZWN0UmVjdChpbWFnZVJlY3QsIHByaW1pdGl2ZVN1YnJlZ2lvbik7CiB9CiAKLUludE91
dHNldHMgRkVEcm9wU2hhZG93OjpvdXRzZXRzKGNvbnN0IEZpbHRlciYpIGNvbnN0CitJbnRPdXRz
ZXRzIEZFRHJvcFNoYWRvdzo6Y2FsY3VsYXRlT3V0c2V0cyhjb25zdCBGbG9hdFNpemUmIG9mZnNl
dCwgY29uc3QgRmxvYXRTaXplJiBzdGREZXZpYXRpb24pCiB7Ci0gICAgSW50U2l6ZSBvdXRzZXRT
aXplID0gRkVHYXVzc2lhbkJsdXI6OmNhbGN1bGF0ZU91dHNldFNpemUoeyBtX3N0ZFgsIG1fc3Rk
WSB9KTsKKyAgICBJbnRTaXplIG91dHNldFNpemUgPSBGRUdhdXNzaWFuQmx1cjo6Y2FsY3VsYXRl
T3V0c2V0U2l6ZShzdGREZXZpYXRpb24pOwogCi0gICAgaW50IHRvcCA9IHN0ZDo6bWF4PGludD4o
MCwgb3V0c2V0U2l6ZS5oZWlnaHQoKSAtIG1fZHkpOwotICAgIGludCByaWdodCA9IHN0ZDo6bWF4
PGludD4oMCwgb3V0c2V0U2l6ZS53aWR0aCgpICsgbV9keCk7Ci0gICAgaW50IGJvdHRvbSA9IHN0
ZDo6bWF4PGludD4oMCwgb3V0c2V0U2l6ZS5oZWlnaHQoKSArIG1fZHkpOwotICAgIGludCBsZWZ0
ID0gc3RkOjptYXg8aW50PigwLCBvdXRzZXRTaXplLndpZHRoKCkgLSBtX2R4KTsKKyAgICBpbnQg
dG9wID0gc3RkOjptYXg8aW50PigwLCBvdXRzZXRTaXplLmhlaWdodCgpIC0gb2Zmc2V0LmhlaWdo
dCgpKTsKKyAgICBpbnQgcmlnaHQgPSBzdGQ6Om1heDxpbnQ+KDAsIG91dHNldFNpemUud2lkdGgo
KSArIG9mZnNldC53aWR0aCgpKTsKKyAgICBpbnQgYm90dG9tID0gc3RkOjptYXg8aW50PigwLCBv
dXRzZXRTaXplLmhlaWdodCgpICsgb2Zmc2V0LmhlaWdodCgpKTsKKyAgICBpbnQgbGVmdCA9IHN0
ZDo6bWF4PGludD4oMCwgb3V0c2V0U2l6ZS53aWR0aCgpIC0gb2Zmc2V0LndpZHRoKCkpOwogCiAg
ICAgcmV0dXJuIHsgdG9wLCByaWdodCwgYm90dG9tLCBsZWZ0IH07CiB9CkBAIC03Nyw3ICs3Nyw3
IEBAIHN0ZDo6dW5pcXVlX3B0cjxGaWx0ZXJFZmZlY3RBcHBsaWVyPiBGRURyb3BTaGFkb3c6OmNy
ZWF0ZVNvZnR3YXJlQXBwbGllcigpIGNvbnN0CiB7CiAgICAgcmV0dXJuIEZpbHRlckVmZmVjdEFw
cGxpZXI6OmNyZWF0ZTxGRURyb3BTaGFkb3dTb2Z0d2FyZUFwcGxpZXI+KCp0aGlzKTsKIH0KLSAg
ICAKKwogVGV4dFN0cmVhbSYgRkVEcm9wU2hhZG93OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRl
eHRTdHJlYW0mIHRzLCBGaWx0ZXJSZXByZXNlbnRhdGlvbiByZXByZXNlbnRhdGlvbikgY29uc3QK
IHsKICAgICB0cyA8PCBpbmRlbnQgPDwiW2ZlRHJvcFNoYWRvdyI7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRHJvcFNoYWRvdy5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURyb3BTaGFkb3cuaAppbmRl
eCA4YTAzMDNmNzBkNjg4Y2UxNzZlNzMxNGFlYWU4MzkwNGNlMGVkZTZlLi43YTIwYjMyZjJkODA5
OGI5ZmI1N2RkNTlhOGFlNTIzMTcyMzQyOGNmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRHJvcFNoYWRvdy5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEcm9wU2hhZG93LmgKQEAgLTQ3LDYgKzQ3
LDggQEAgcHVibGljOgogICAgIGZsb2F0IHNoYWRvd09wYWNpdHkoKSBjb25zdCB7IHJldHVybiBt
X3NoYWRvd09wYWNpdHk7IH0KICAgICB2b2lkIHNldFNoYWRvd09wYWNpdHkoZmxvYXQgc2hhZG93
T3BhY2l0eSkgeyBtX3NoYWRvd09wYWNpdHkgPSBzaGFkb3dPcGFjaXR5OyB9CiAKKyAgICBzdGF0
aWMgSW50T3V0c2V0cyBjYWxjdWxhdGVPdXRzZXRzKGNvbnN0IEZsb2F0U2l6ZSYgb2Zmc2V0LCBj
b25zdCBGbG9hdFNpemUmIHN0ZERldmlhdGlvbik7CisKICAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNv
ZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7CiAgICAgdGVtcGxhdGU8Y2xhc3MgRGVj
b2Rlcj4gc3RhdGljIHN0ZDo6b3B0aW9uYWw8UmVmPEZFRHJvcFNoYWRvdz4+IGRlY29kZShEZWNv
ZGVyJik7CiAKQEAgLTU1LDggKzU3LDYgQEAgcHJpdmF0ZToKIAogICAgIEZsb2F0UmVjdCBjYWxj
dWxhdGVJbWFnZVJlY3QoY29uc3QgRmlsdGVyJiwgY29uc3QgRmlsdGVySW1hZ2VWZWN0b3ImIGlu
cHV0cywgY29uc3QgRmxvYXRSZWN0JiBwcmltaXRpdmVTdWJyZWdpb24pIGNvbnN0IG92ZXJyaWRl
OwogCi0gICAgSW50T3V0c2V0cyBvdXRzZXRzKGNvbnN0IEZpbHRlciYpIGNvbnN0IG92ZXJyaWRl
OwotCiAgICAgc3RkOjp1bmlxdWVfcHRyPEZpbHRlckVmZmVjdEFwcGxpZXI+IGNyZWF0ZVNvZnR3
YXJlQXBwbGllcigpIGNvbnN0IG92ZXJyaWRlOwogCiAgICAgV1RGOjpUZXh0U3RyZWFtJiBleHRl
cm5hbFJlcHJlc2VudGF0aW9uKFdURjo6VGV4dFN0cmVhbSYsIEZpbHRlclJlcHJlc2VudGF0aW9u
KSBjb25zdCBvdmVycmlkZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVHYXVzc2lhbkJsdXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRUdhdXNzaWFuQmx1ci5jcHAKaW5kZXggN2E1MzY3MzZiNjhl
MmY4MTlkZGVhNmY0ZDYxZjk2ZjQ5N2I4NmRmNi4uNjk0NzUzY2Y0Yzc1ODBhZDg4OWNjZDNlYjdl
OTY0OTFjZGJlMjIzYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRUdhdXNzaWFuQmx1ci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRUdhdXNzaWFuQmx1ci5jcHAKQEAgLTEyMCw5ICsxMjAsOSBA
QCBGbG9hdFJlY3QgRkVHYXVzc2lhbkJsdXI6OmNhbGN1bGF0ZUltYWdlUmVjdChjb25zdCBGaWx0
ZXImIGZpbHRlciwgY29uc3QgRmlsdGVySQogICAgIHJldHVybiBmaWx0ZXIuY2xpcFRvTWF4RWZm
ZWN0UmVjdChpbWFnZVJlY3QsIHByaW1pdGl2ZVN1YnJlZ2lvbik7CiB9CiAKLUludE91dHNldHMg
RkVHYXVzc2lhbkJsdXI6Om91dHNldHMoY29uc3QgRmlsdGVyJiBmaWx0ZXIpIGNvbnN0CitJbnRP
dXRzZXRzIEZFR2F1c3NpYW5CbHVyOjpjYWxjdWxhdGVPdXRzZXRzKGNvbnN0IEZsb2F0U2l6ZSYg
c3RkRGV2aWF0aW9uKQogewotICAgIEludFNpemUgb3V0c2V0U2l6ZSA9IGNhbGN1bGF0ZU91dHNl
dFNpemUoZmlsdGVyLnJlc29sdmVkU2l6ZSh7IG1fc3RkWCwgbV9zdGRZIH0pKTsKKyAgICBJbnRT
aXplIG91dHNldFNpemUgPSBjYWxjdWxhdGVPdXRzZXRTaXplKHN0ZERldmlhdGlvbik7CiAgICAg
cmV0dXJuIHsgb3V0c2V0U2l6ZS5oZWlnaHQoKSwgb3V0c2V0U2l6ZS53aWR0aCgpLCBvdXRzZXRT
aXplLmhlaWdodCgpLCBvdXRzZXRTaXplLndpZHRoKCkgfTsKIH0KIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUdhdXNzaWFuQmx1ci5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUdhdXNzaWFuQmx1ci5o
CmluZGV4IDgwMTU0ODQ3MjRiYTc3MGViNGM5MDljMTczMTM2MmZhOWI1NTcxM2UuLjI0Y2I5MjZm
NzY0OGQxYWZjNGQwODkzMmE0MjUyMjNmMzQ4YmYwMGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVHYXVzc2lhbkJsdXIuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFR2F1c3NpYW5CbHVyLmgKQEAg
LTQ0LDYgKzQ0LDggQEAgcHVibGljOgogICAgIHN0YXRpYyBJbnRTaXplIGNhbGN1bGF0ZVVuc2Nh
bGVkS2VybmVsU2l6ZShGbG9hdFNpemUgc3RkRGV2aWF0aW9uKTsKICAgICBzdGF0aWMgSW50U2l6
ZSBjYWxjdWxhdGVPdXRzZXRTaXplKEZsb2F0U2l6ZSBzdGREZXZpYXRpb24pOwogCisgICAgc3Rh
dGljIEludE91dHNldHMgY2FsY3VsYXRlT3V0c2V0cyhjb25zdCBGbG9hdFNpemUmIHN0ZERldmlh
dGlvbik7CisKICAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVy
JikgY29uc3Q7CiAgICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIHN0ZDo6b3B0aW9u
YWw8UmVmPEZFR2F1c3NpYW5CbHVyPj4gZGVjb2RlKERlY29kZXImKTsKIApAQCAtNTIsOCArNTQs
NiBAQCBwcml2YXRlOgogCiAgICAgRmxvYXRSZWN0IGNhbGN1bGF0ZUltYWdlUmVjdChjb25zdCBG
aWx0ZXImLCBjb25zdCBGaWx0ZXJJbWFnZVZlY3RvciYgaW5wdXRzLCBjb25zdCBGbG9hdFJlY3Qm
IHByaW1pdGl2ZVN1YnJlZ2lvbikgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICBJbnRPdXRzZXRzIG91
dHNldHMoY29uc3QgRmlsdGVyJikgY29uc3Qgb3ZlcnJpZGU7Ci0KICAgICBib29sIHJlc3VsdElz
QWxwaGFJbWFnZShjb25zdCBGaWx0ZXJJbWFnZVZlY3RvciYgaW5wdXRzKSBjb25zdCBvdmVycmlk
ZTsKIAogICAgIHN0ZDo6dW5pcXVlX3B0cjxGaWx0ZXJFZmZlY3RBcHBsaWVyPiBjcmVhdGVTb2Z0
d2FyZUFwcGxpZXIoKSBjb25zdCBvdmVycmlkZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVPZmZzZXQuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU9mZnNldC5jcHAKaW5kZXggMzk1YTgyNmJlMDJk
NzBiNjIzOTMxY2FhYzhlMGVjYjA0MzI3ODczZS4uODY5ZGNmNmM1OGQyODM1ZTNjZGZhZTViNzg3
YzJlNmE5YjlmOTQ2NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRU9mZnNldC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRU9mZnNldC5jcHAKQEAgLTYwLDE5ICs2MCwxOSBAQCBGbG9hdFJlY3Qg
RkVPZmZzZXQ6OmNhbGN1bGF0ZUltYWdlUmVjdChjb25zdCBGaWx0ZXImIGZpbHRlciwgY29uc3Qg
RmlsdGVySW1hZ2VWZQogICAgIHJldHVybiBmaWx0ZXIuY2xpcFRvTWF4RWZmZWN0UmVjdChpbWFn
ZVJlY3QsIHByaW1pdGl2ZVN1YnJlZ2lvbik7CiB9CiAKLUludE91dHNldHMgRkVPZmZzZXQ6Om91
dHNldHMoY29uc3QgRmlsdGVyJiBmaWx0ZXIpIGNvbnN0CitJbnRPdXRzZXRzIEZFT2Zmc2V0Ojpj
YWxjdWxhdGVPdXRzZXRzKGNvbnN0IEZsb2F0U2l6ZSYgb2Zmc2V0KQogewotICAgIGF1dG8gb2Zm
c2V0ID0gZXhwYW5kZWRJbnRTaXplKGZpbHRlci5yZXNvbHZlZFNpemUoeyBtX2R4LCBtX2R5IH0p
KTsKKyAgICBhdXRvIGFkanVzdGVkT2Zmc2V0ID0gZXhwYW5kZWRJbnRTaXplKG9mZnNldCk7CiAK
ICAgICBJbnRPdXRzZXRzIG91dHNldHM7Ci0gICAgaWYgKG9mZnNldC5oZWlnaHQoKSA8IDApCi0g
ICAgICAgIG91dHNldHMuc2V0VG9wKC1vZmZzZXQuaGVpZ2h0KCkpOworICAgIGlmIChhZGp1c3Rl
ZE9mZnNldC5oZWlnaHQoKSA8IDApCisgICAgICAgIG91dHNldHMuc2V0VG9wKC1hZGp1c3RlZE9m
ZnNldC5oZWlnaHQoKSk7CiAgICAgZWxzZQotICAgICAgICBvdXRzZXRzLnNldEJvdHRvbShvZmZz
ZXQuaGVpZ2h0KCkpOwotICAgIGlmIChvZmZzZXQud2lkdGgoKSA8IDApCi0gICAgICAgIG91dHNl
dHMuc2V0TGVmdCgtb2Zmc2V0LndpZHRoKCkpOworICAgICAgICBvdXRzZXRzLnNldEJvdHRvbShh
ZGp1c3RlZE9mZnNldC5oZWlnaHQoKSk7CisgICAgaWYgKGFkanVzdGVkT2Zmc2V0LndpZHRoKCkg
PCAwKQorICAgICAgICBvdXRzZXRzLnNldExlZnQoLWFkanVzdGVkT2Zmc2V0LndpZHRoKCkpOwog
ICAgIGVsc2UKLSAgICAgICAgb3V0c2V0cy5zZXRSaWdodChvZmZzZXQud2lkdGgoKSk7CisgICAg
ICAgIG91dHNldHMuc2V0UmlnaHQoYWRqdXN0ZWRPZmZzZXQud2lkdGgoKSk7CiAKICAgICByZXR1
cm4gb3V0c2V0czsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVPZmZzZXQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVPZmZzZXQuaAppbmRleCBjYmEwMDZjZTJiODlhNzliMzQ5Y2Q0Y2E4ZGY1YjYy
MjljNGU1ZWYzLi4xYjI0Njg0MTkzNzYzM2E1YWFiM2ZiNjBjMTRiNzk1MjUxZTYwYzUyIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFT2Zmc2V0
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU9mZnNl
dC5oCkBAIC0zNiw2ICszNiw4IEBAIHB1YmxpYzoKICAgICBmbG9hdCBkeSgpIGNvbnN0IHsgcmV0
dXJuIG1fZHk7IH0KICAgICB2b2lkIHNldER5KGZsb2F0KTsKIAorICAgIHN0YXRpYyBJbnRPdXRz
ZXRzIGNhbGN1bGF0ZU91dHNldHMoY29uc3QgRmxvYXRTaXplJiBvZmZzZXQpOworCiAgICAgdGVt
cGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OwogICAgIHRl
bXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBzdGQ6Om9wdGlvbmFsPFJlZjxGRU9mZnNldD4+
IGRlY29kZShEZWNvZGVyJik7CiAKQEAgLTQ0LDggKzQ2LDYgQEAgcHJpdmF0ZToKIAogICAgIEZs
b2F0UmVjdCBjYWxjdWxhdGVJbWFnZVJlY3QoY29uc3QgRmlsdGVyJiwgY29uc3QgRmlsdGVySW1h
Z2VWZWN0b3ImIGlucHV0cywgY29uc3QgRmxvYXRSZWN0JiBwcmltaXRpdmVTdWJyZWdpb24pIGNv
bnN0IG92ZXJyaWRlOwogCi0gICAgSW50T3V0c2V0cyBvdXRzZXRzKGNvbnN0IEZpbHRlciYpIGNv
bnN0IG92ZXJyaWRlOwotCiAgICAgYm9vbCByZXN1bHRJc0FscGhhSW1hZ2UoY29uc3QgRmlsdGVy
SW1hZ2VWZWN0b3ImIGlucHV0cykgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICBzdGQ6OnVuaXF1ZV9w
dHI8RmlsdGVyRWZmZWN0QXBwbGllcj4gY3JlYXRlU29mdHdhcmVBcHBsaWVyKCkgY29uc3Qgb3Zl
cnJpZGU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZpbHRlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
aWx0ZXIuaAppbmRleCBlMGVmMWJhYTdkYWU4NDJiOTlkZGU3ODgyZDg3ZjRhMDI5OWFmZTNiLi4x
MDg2MjQ2Y2RkZTUzMzYwODM4ZWU0MDM3YzE0YTZiOGEyY2I1MGMxIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlci5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyLmgKQEAgLTM2LDcgKzM2
LDYgQEAgY2xhc3MgRmlsdGVyUmVzdWx0czsKIAogY2xhc3MgRmlsdGVyIDogcHVibGljIEZpbHRl
ckZ1bmN0aW9uIHsKICAgICB1c2luZyBGaWx0ZXJGdW5jdGlvbjo6YXBwbHk7Ci0gICAgdXNpbmcg
RmlsdGVyRnVuY3Rpb246Om91dHNldHM7CiAKIHB1YmxpYzoKICAgICBlbnVtIGNsYXNzIENsaXBP
cGVyYXRpb24geyBJbnRlcnNlY3QsIFVuaXRlIH07CkBAIC02Niw3ICs2NSw2IEBAIHB1YmxpYzoK
IAogICAgIGJvb2wgY2xhbXBGaWx0ZXJSZWdpb25JZk5lZWRlZCgpOwogCi0gICAgdmlydHVhbCBJ
bnRPdXRzZXRzIG91dHNldHMoKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBSZWZQdHI8RmlsdGVy
SW1hZ2U+IGFwcGx5KEZpbHRlckltYWdlKiBzb3VyY2VJbWFnZSwgRmlsdGVyUmVzdWx0cyYpID0g
MDsKICAgICBXRUJDT1JFX0VYUE9SVCBSZWZQdHI8RmlsdGVySW1hZ2U+IGFwcGx5KEltYWdlQnVm
ZmVyKiBzb3VyY2VJbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2VJbWFnZVJlY3QsIEZpbHRl
clJlc3VsdHMmKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GaWx0ZXJGdW5jdGlvbi5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GaWx0ZXJGdW5jdGlvbi5oCmluZGV4IDY0NGI1ODM1ZGJiZTA1ZThmNTlk
NzU4N2M1MzJhZDRmNjUwM2RjZDcuLmM4NTM5YWJmMTA5Y2Y5YTczYWEzNTE2ZTYyYzlkMTJlOTc0
MDM2NjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRmlsdGVyRnVuY3Rpb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZpbHRlckZ1bmN0aW9uLmgKQEAgLTk1LDcgKzk1LDYgQEAgcHVibGljOgogCiAg
ICAgdmlydHVhbCBib29sIHN1cHBvcnRzQWNjZWxlcmF0ZWRSZW5kZXJpbmcoKSBjb25zdCB7IHJl
dHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwgUmVmUHRyPEZpbHRlckltYWdlPiBhcHBseShjb25z
dCBGaWx0ZXImLCBGaWx0ZXJJbWFnZSYsIEZpbHRlclJlc3VsdHMmKSB7IHJldHVybiBudWxscHRy
OyB9Ci0gICAgdmlydHVhbCBJbnRPdXRzZXRzIG91dHNldHMoY29uc3QgRmlsdGVyJikgY29uc3Qg
eyByZXR1cm4geyB9OyB9CiAKICAgICB2aXJ0dWFsIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxS
ZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBGaWx0ZXJSZXByZXNlbnRhdGlvbiA9IEZp
bHRlclJlcHJlc2VudGF0aW9uOjpUZXN0T3V0cHV0KSBjb25zdCA9IDA7CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9DU1NGaWx0ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL0NTU0ZpbHRlci5jcHAKaW5kZXggNjM2ZDgxNDUxMWJmMzU3YTEyYmU1MWE1Yjg3
YzQ1Mjc2NDc4ZmUyNy4uMDlmZDY3ZGY1MTMxYjk2ZjI3ZGVjOTkzOWM0MjAwNzljYmU4NjIxZCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0NTU0ZpbHRlci5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0NTU0ZpbHRlci5jcHAKQEAgLTc2LDYgKzc2LDEyIEBA
IENTU0ZpbHRlcjo6Q1NTRmlsdGVyKFZlY3RvcjxSZWY8RmlsdGVyRnVuY3Rpb24+PiYmIGZ1bmN0
aW9ucykKIHsKIH0KIAorc3RhdGljIEludE91dHNldHMgY2FsY3VsYXRlQmx1ckVmZmVjdE91dHNl
dHMoY29uc3QgQmx1ckZpbHRlck9wZXJhdGlvbiYgYmx1ck9wZXJhdGlvbikKK3sKKyAgICBmbG9h
dCBzdGREZXZpYXRpb24gPSBmbG9hdFZhbHVlRm9yTGVuZ3RoKGJsdXJPcGVyYXRpb24uc3RkRGV2
aWF0aW9uKCksIDApOworICAgIHJldHVybiBGRUdhdXNzaWFuQmx1cjo6Y2FsY3VsYXRlT3V0c2V0
cyh7IHN0ZERldmlhdGlvbiwgc3RkRGV2aWF0aW9uIH0pOworfQorCiBzdGF0aWMgUmVmUHRyPEZp
bHRlckVmZmVjdD4gY3JlYXRlQmx1ckVmZmVjdChjb25zdCBCbHVyRmlsdGVyT3BlcmF0aW9uJiBi
bHVyT3BlcmF0aW9uLCBGaWx0ZXI6OkNsaXBPcGVyYXRpb24gY2xpcE9wZXJhdGlvbikKIHsKICAg
ICBmbG9hdCBzdGREZXZpYXRpb24gPSBmbG9hdFZhbHVlRm9yTGVuZ3RoKGJsdXJPcGVyYXRpb24u
c3RkRGV2aWF0aW9uKCksIDApOwpAQCAtMTA1LDYgKzExMSwxMiBAQCBzdGF0aWMgUmVmUHRyPEZp
bHRlckVmZmVjdD4gY3JlYXRlQ29udHJhc3RFZmZlY3QoY29uc3QgQmFzaWNDb21wb25lbnRUcmFu
c2ZlckZpbAogICAgIHJldHVybiBGRUNvbXBvbmVudFRyYW5zZmVyOjpjcmVhdGUodHJhbnNmZXJG
dW5jdGlvbiwgdHJhbnNmZXJGdW5jdGlvbiwgdHJhbnNmZXJGdW5jdGlvbiwgbnVsbEZ1bmN0aW9u
KTsKIH0KIAorc3RhdGljIEludE91dHNldHMgY2FsY3VsYXRlRHJvcFNoYWRvd0VmZmVjdE91dHNl
dHMoY29uc3QgRHJvcFNoYWRvd0ZpbHRlck9wZXJhdGlvbiYgZHJvcFNoYWRvd09wZXJhdGlvbikK
K3sKKyAgICBmbG9hdCBzdGREZXZpYXRpb24gPSBkcm9wU2hhZG93T3BlcmF0aW9uLnN0ZERldmlh
dGlvbigpOworICAgIHJldHVybiBGRURyb3BTaGFkb3c6OmNhbGN1bGF0ZU91dHNldHMoRmxvYXRT
aXplKGRyb3BTaGFkb3dPcGVyYXRpb24ueCgpLCBkcm9wU2hhZG93T3BlcmF0aW9uLnkoKSksIHsg
c3RkRGV2aWF0aW9uLCBzdGREZXZpYXRpb24gfSk7Cit9CisKIHN0YXRpYyBSZWZQdHI8RmlsdGVy
RWZmZWN0PiBjcmVhdGVEcm9wU2hhZG93RWZmZWN0KGNvbnN0IERyb3BTaGFkb3dGaWx0ZXJPcGVy
YXRpb24mIGRyb3BTaGFkb3dPcGVyYXRpb24pCiB7CiAgICAgZmxvYXQgc3RkID0gZHJvcFNoYWRv
d09wZXJhdGlvbi5zdGREZXZpYXRpb24oKTsKQEAgLTIxOSw3ICsyMzEsNyBAQCBzdGF0aWMgUmVm
UHRyPEZpbHRlckVmZmVjdD4gY3JlYXRlU2VwaWFFZmZlY3QoY29uc3QgQmFzaWNDb2xvck1hdHJp
eEZpbHRlck9wZXJhdAogICAgIHJldHVybiBGRUNvbG9yTWF0cml4OjpjcmVhdGUoRkVDT0xPUk1B
VFJJWF9UWVBFX01BVFJJWCwgV1RGTW92ZShpbnB1dFBhcmFtZXRlcnMpKTsKIH0KIAotc3RhdGlj
IFJlZlB0cjxTVkdGaWx0ZXI+IGNyZWF0ZVNWR0ZpbHRlcihDU1NGaWx0ZXImIGZpbHRlciwgY29u
c3QgUmVmZXJlbmNlRmlsdGVyT3BlcmF0aW9uJiBmaWx0ZXJPcGVyYXRpb24sIFJlbmRlckVsZW1l
bnQmIHJlbmRlcmVyLCBjb25zdCBGbG9hdFJlY3QmIHRhcmdldEJvdW5kaW5nQm94KQorc3RhdGlj
IFNWR0ZpbHRlckVsZW1lbnQqIHJlZmVyZW5jZUZpbHRlckVsZW1lbnQoY29uc3QgUmVmZXJlbmNl
RmlsdGVyT3BlcmF0aW9uJiBmaWx0ZXJPcGVyYXRpb24sIFJlbmRlckVsZW1lbnQmIHJlbmRlcmVy
KQogewogICAgIGF1dG8mIHJlZmVyZW5jZWRTVkdSZXNvdXJjZXMgPSByZW5kZXJlci5lbnN1cmVS
ZWZlcmVuY2VkU1ZHUmVzb3VyY2VzKCk7CiAgICAgYXV0byogZmlsdGVyRWxlbWVudCA9IHJlZmVy
ZW5jZWRTVkdSZXNvdXJjZXMucmVmZXJlbmNlZEZpbHRlckVsZW1lbnQocmVuZGVyZXIuZG9jdW1l
bnQoKSwgZmlsdGVyT3BlcmF0aW9uKTsKQEAgLTIzMiwxNiArMjQ0LDM0IEBAIHN0YXRpYyBSZWZQ
dHI8U1ZHRmlsdGVyPiBjcmVhdGVTVkdGaWx0ZXIoQ1NTRmlsdGVyJiBmaWx0ZXIsIGNvbnN0IFJl
ZmVyZW5jZUZpbHRlCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KIAorICAgIHJldHVy
biBmaWx0ZXJFbGVtZW50OworfQorCitzdGF0aWMgSW50T3V0c2V0cyBjYWxjdWxhdGVSZWZlcmVu
Y2VGaWx0ZXJPdXRzZXRzKGNvbnN0IFJlZmVyZW5jZUZpbHRlck9wZXJhdGlvbiYgZmlsdGVyT3Bl
cmF0aW9uLCBSZW5kZXJFbGVtZW50JiByZW5kZXJlcikKK3sKKyAgICBhdXRvIGZpbHRlckVsZW1l
bnQgPSByZWZlcmVuY2VGaWx0ZXJFbGVtZW50KGZpbHRlck9wZXJhdGlvbiwgcmVuZGVyZXIpOwor
ICAgIGlmICghZmlsdGVyRWxlbWVudCkKKyAgICAgICAgcmV0dXJuIHsgfTsKKworICAgIFNWR0Zp
bHRlckJ1aWxkZXIgYnVpbGRlcihyZW5kZXJlci5vYmplY3RCb3VuZGluZ0JveCgpLCBmaWx0ZXJF
bGVtZW50LT5wcmltaXRpdmVVbml0cygpKTsKKyAgICByZXR1cm4gYnVpbGRlci5jYWxjdWxhdGVG
aWx0ZXJPdXRzZXRzKCpmaWx0ZXJFbGVtZW50KTsKK30KKworc3RhdGljIFJlZlB0cjxTVkdGaWx0
ZXI+IGNyZWF0ZVJlZmVyZW5jZUZpbHRlcihDU1NGaWx0ZXImIGZpbHRlciwgY29uc3QgUmVmZXJl
bmNlRmlsdGVyT3BlcmF0aW9uJiBmaWx0ZXJPcGVyYXRpb24sIFJlbmRlckVsZW1lbnQmIHJlbmRl
cmVyLCBjb25zdCBGbG9hdFJlY3QmIHRhcmdldEJvdW5kaW5nQm94KQoreworICAgIGF1dG8gZmls
dGVyRWxlbWVudCA9IHJlZmVyZW5jZUZpbHRlckVsZW1lbnQoZmlsdGVyT3BlcmF0aW9uLCByZW5k
ZXJlcik7CisgICAgaWYgKCFmaWx0ZXJFbGVtZW50KQorICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KwogICAgIGF1dG8gZmlsdGVyUmVnaW9uID0gU1ZHTGVuZ3RoQ29udGV4dDo6cmVzb2x2ZVJlY3Rh
bmdsZTxTVkdGaWx0ZXJFbGVtZW50PihmaWx0ZXJFbGVtZW50LCBmaWx0ZXJFbGVtZW50LT5maWx0
ZXJVbml0cygpLCB0YXJnZXRCb3VuZGluZ0JveCk7CiAKLSAgICBTVkdGaWx0ZXJCdWlsZGVyIGJ1
aWxkZXI7CisgICAgU1ZHRmlsdGVyQnVpbGRlciBidWlsZGVyKHJlbmRlcmVyLm9iamVjdEJvdW5k
aW5nQm94KCksIGZpbHRlckVsZW1lbnQtPnByaW1pdGl2ZVVuaXRzKCkpOwogICAgIHJldHVybiBT
VkdGaWx0ZXI6OmNyZWF0ZSgqZmlsdGVyRWxlbWVudCwgYnVpbGRlciwgZmlsdGVyLnJlbmRlcmlu
Z01vZGUoKSwgZmlsdGVyLmZpbHRlclNjYWxlKCksIGZpbHRlci5jbGlwT3BlcmF0aW9uKCksIGZp
bHRlclJlZ2lvbiwgdGFyZ2V0Qm91bmRpbmdCb3gpOwogfQogCiBib29sIENTU0ZpbHRlcjo6YnVp
bGRGaWx0ZXJGdW5jdGlvbnMoUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIsIGNvbnN0IEZpbHRlck9w
ZXJhdGlvbnMmIG9wZXJhdGlvbnMsIGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0Qm91bmRpbmdCb3gp
CiB7Ci0gICAgUmVmUHRyPEZpbHRlckVmZmVjdD4gZWZmZWN0OwotICAgIFJlZlB0cjxTVkdGaWx0
ZXI+IGZpbHRlcjsKKyAgICBSZWZQdHI8RmlsdGVyRnVuY3Rpb24+IGZ1bmN0aW9uOwogCiAgICAg
Zm9yIChhdXRvJiBvcGVyYXRpb24gOiBvcGVyYXRpb25zLm9wZXJhdGlvbnMoKSkgewogICAgICAg
ICBzd2l0Y2ggKG9wZXJhdGlvbi0+dHlwZSgpKSB7CkBAIC0yNTAsNjMgKzI4MCw2MCBAQCBib29s
IENTU0ZpbHRlcjo6YnVpbGRGaWx0ZXJGdW5jdGlvbnMoUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIs
IGNvbnN0IEZpbHRlck9wZXJhdAogICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgY2FzZSBG
aWx0ZXJPcGVyYXRpb246OkJMVVI6Ci0gICAgICAgICAgICBlZmZlY3QgPSBjcmVhdGVCbHVyRWZm
ZWN0KGRvd25jYXN0PEJsdXJGaWx0ZXJPcGVyYXRpb24+KCpvcGVyYXRpb24pLCBjbGlwT3BlcmF0
aW9uKCkpOworICAgICAgICAgICAgZnVuY3Rpb24gPSBjcmVhdGVCbHVyRWZmZWN0KGRvd25jYXN0
PEJsdXJGaWx0ZXJPcGVyYXRpb24+KCpvcGVyYXRpb24pLCBjbGlwT3BlcmF0aW9uKCkpOwogICAg
ICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkJSSUdIVE5F
U1M6Ci0gICAgICAgICAgICBlZmZlY3QgPSBjcmVhdGVCcmlnaHRuZXNzRWZmZWN0KGRvd25jYXN0
PEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24+KCpvcGVyYXRpb24pKTsKKyAg
ICAgICAgICAgIGZ1bmN0aW9uID0gY3JlYXRlQnJpZ2h0bmVzc0VmZmVjdChkb3duY2FzdDxCYXNp
Y0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uPigqb3BlcmF0aW9uKSk7CiAgICAgICAg
ICAgICBicmVhazsKIAogICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6Q09OVFJBU1Q6Ci0g
ICAgICAgICAgICBlZmZlY3QgPSBjcmVhdGVDb250cmFzdEVmZmVjdChkb3duY2FzdDxCYXNpY0Nv
bXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uPigqb3BlcmF0aW9uKSk7CisgICAgICAgICAg
ICBmdW5jdGlvbiA9IGNyZWF0ZUNvbnRyYXN0RWZmZWN0KGRvd25jYXN0PEJhc2ljQ29tcG9uZW50
VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24+KCpvcGVyYXRpb24pKTsKICAgICAgICAgICAgIGJyZWFr
OwogCiAgICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpEUk9QX1NIQURPVzoKLSAgICAgICAg
ICAgIGVmZmVjdCA9IGNyZWF0ZURyb3BTaGFkb3dFZmZlY3QoZG93bmNhc3Q8RHJvcFNoYWRvd0Zp
bHRlck9wZXJhdGlvbj4oKm9wZXJhdGlvbikpOworICAgICAgICAgICAgZnVuY3Rpb24gPSBjcmVh
dGVEcm9wU2hhZG93RWZmZWN0KGRvd25jYXN0PERyb3BTaGFkb3dGaWx0ZXJPcGVyYXRpb24+KCpv
cGVyYXRpb24pKTsKICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIGNhc2UgRmlsdGVyT3Bl
cmF0aW9uOjpHUkFZU0NBTEU6Ci0gICAgICAgICAgICBlZmZlY3QgPSBjcmVhdGVHcmF5U2NhbGVF
ZmZlY3QoZG93bmNhc3Q8QmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbj4oKm9wZXJhdGlv
bikpOworICAgICAgICAgICAgZnVuY3Rpb24gPSBjcmVhdGVHcmF5U2NhbGVFZmZlY3QoZG93bmNh
c3Q8QmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbj4oKm9wZXJhdGlvbikpOwogICAgICAg
ICAgICAgYnJlYWs7CiAKICAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkhVRV9ST1RBVEU6
Ci0gICAgICAgICAgICBlZmZlY3QgPSBjcmVhdGVIdWVSb3RhdGVFZmZlY3QoZG93bmNhc3Q8QmFz
aWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbj4oKm9wZXJhdGlvbikpOworICAgICAgICAgICAg
ZnVuY3Rpb24gPSBjcmVhdGVIdWVSb3RhdGVFZmZlY3QoZG93bmNhc3Q8QmFzaWNDb2xvck1hdHJp
eEZpbHRlck9wZXJhdGlvbj4oKm9wZXJhdGlvbikpOwogICAgICAgICAgICAgYnJlYWs7CiAKICAg
ICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OklOVkVSVDoKLSAgICAgICAgICAgIGVmZmVjdCA9
IGNyZWF0ZUludmVydEVmZmVjdChkb3duY2FzdDxCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVy
T3BlcmF0aW9uPigqb3BlcmF0aW9uKSk7CisgICAgICAgICAgICBmdW5jdGlvbiA9IGNyZWF0ZUlu
dmVydEVmZmVjdChkb3duY2FzdDxCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9u
Pigqb3BlcmF0aW9uKSk7CiAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICBjYXNlIEZpbHRl
ck9wZXJhdGlvbjo6T1BBQ0lUWToKLSAgICAgICAgICAgIGVmZmVjdCA9IGNyZWF0ZU9wYWNpdHlF
ZmZlY3QoZG93bmNhc3Q8QmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlvbj4oKm9w
ZXJhdGlvbikpOworICAgICAgICAgICAgZnVuY3Rpb24gPSBjcmVhdGVPcGFjaXR5RWZmZWN0KGRv
d25jYXN0PEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24+KCpvcGVyYXRpb24p
KTsKICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpT
QVRVUkFURToKLSAgICAgICAgICAgIGVmZmVjdCA9IGNyZWF0ZVNhdHVyYXRlRWZmZWN0KGRvd25j
YXN0PEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24+KCpvcGVyYXRpb24pKTsKKyAgICAg
ICAgICAgIGZ1bmN0aW9uID0gY3JlYXRlU2F0dXJhdGVFZmZlY3QoZG93bmNhc3Q8QmFzaWNDb2xv
ck1hdHJpeEZpbHRlck9wZXJhdGlvbj4oKm9wZXJhdGlvbikpOwogICAgICAgICAgICAgYnJlYWs7
CiAKICAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OlNFUElBOgotICAgICAgICAgICAgZWZm
ZWN0ID0gY3JlYXRlU2VwaWFFZmZlY3QoZG93bmNhc3Q8QmFzaWNDb2xvck1hdHJpeEZpbHRlck9w
ZXJhdGlvbj4oKm9wZXJhdGlvbikpOworICAgICAgICAgICAgZnVuY3Rpb24gPSBjcmVhdGVTZXBp
YUVmZmVjdChkb3duY2FzdDxCYXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uPigqb3BlcmF0
aW9uKSk7CiAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlv
bjo6UkVGRVJFTkNFOgotICAgICAgICAgICAgZmlsdGVyID0gY3JlYXRlU1ZHRmlsdGVyKCp0aGlz
LCBkb3duY2FzdDxSZWZlcmVuY2VGaWx0ZXJPcGVyYXRpb24+KCpvcGVyYXRpb24pLCByZW5kZXJl
ciwgdGFyZ2V0Qm91bmRpbmdCb3gpOworICAgICAgICAgICAgZnVuY3Rpb24gPSBjcmVhdGVSZWZl
cmVuY2VGaWx0ZXIoKnRoaXMsIGRvd25jYXN0PFJlZmVyZW5jZUZpbHRlck9wZXJhdGlvbj4oKm9w
ZXJhdGlvbiksIHJlbmRlcmVyLCB0YXJnZXRCb3VuZGluZ0JveCk7CiAgICAgICAgICAgICBicmVh
azsKIAogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIAot
ICAgICAgICBpZiAoIWZpbHRlciAmJiAhZWZmZWN0KQorICAgICAgICBpZiAoIWZ1bmN0aW9uKQog
ICAgICAgICAgICAgY29udGludWU7CiAKICAgICAgICAgaWYgKG1fZnVuY3Rpb25zLmlzRW1wdHko
KSkKICAgICAgICAgICAgIG1fZnVuY3Rpb25zLmFwcGVuZChTb3VyY2VHcmFwaGljOjpjcmVhdGUo
KSk7CiAKLSAgICAgICAgaWYgKGZpbHRlcikKLSAgICAgICAgICAgIG1fZnVuY3Rpb25zLmFwcGVu
ZChmaWx0ZXIucmVsZWFzZU5vbk51bGwoKSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIG1f
ZnVuY3Rpb25zLmFwcGVuZChlZmZlY3QucmVsZWFzZU5vbk51bGwoKSk7CisgICAgICAgIG1fZnVu
Y3Rpb25zLmFwcGVuZChmdW5jdGlvbi5yZWxlYXNlTm9uTnVsbCgpKTsKICAgICB9CiAKICAgICAv
LyBJZiB3ZSBkaWRuJ3QgbWFrZSBhbnkgZWZmZWN0cywgdGVsbCBvdXIgY2FsbGVyIHdlIGFyZSBu
b3QgdmFsaWQuCkBAIC0zNzEsMTcgKzM5OCwzMyBAQCB2b2lkIENTU0ZpbHRlcjo6c2V0RmlsdGVy
UmVnaW9uKGNvbnN0IEZsb2F0UmVjdCYgZmlsdGVyUmVnaW9uKQogICAgIGNsYW1wRmlsdGVyUmVn
aW9uSWZOZWVkZWQoKTsKIH0KIAotSW50T3V0c2V0cyBDU1NGaWx0ZXI6Om91dHNldHMoKSBjb25z
dAorSW50T3V0c2V0cyBDU1NGaWx0ZXI6OmNhbGN1bGF0ZU91dHNldHMoUmVuZGVyRWxlbWVudCYg
cmVuZGVyZXIsIGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmIG9wZXJhdGlvbnMpCiB7Ci0gICAgaWYg
KCFtX2hhc0ZpbHRlclRoYXRNb3Zlc1BpeGVscykKKyAgICBpZiAoIW9wZXJhdGlvbnMuaGFzRmls
dGVyVGhhdE1vdmVzUGl4ZWxzKCkpCiAgICAgICAgIHJldHVybiB7IH07CiAKLSAgICBpZiAoIW1f
b3V0c2V0cy5pc1plcm8oKSkKLSAgICAgICAgcmV0dXJuIG1fb3V0c2V0czsKKyAgICBJbnRPdXRz
ZXRzIG91dHNldHM7CisKKyAgICBmb3IgKGF1dG8mIG9wZXJhdGlvbiA6IG9wZXJhdGlvbnMub3Bl
cmF0aW9ucygpKSB7CisgICAgICAgIHN3aXRjaCAob3BlcmF0aW9uLT50eXBlKCkpIHsKKyAgICAg
ICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkJMVVI6CisgICAgICAgICAgICBvdXRzZXRzICs9IGNh
bGN1bGF0ZUJsdXJFZmZlY3RPdXRzZXRzKGRvd25jYXN0PEJsdXJGaWx0ZXJPcGVyYXRpb24+KCpv
cGVyYXRpb24pKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgRmlsdGVyT3Bl
cmF0aW9uOjpEUk9QX1NIQURPVzoKKyAgICAgICAgICAgIG91dHNldHMgKz0gY2FsY3VsYXRlRHJv
cFNoYWRvd0VmZmVjdE91dHNldHMoZG93bmNhc3Q8RHJvcFNoYWRvd0ZpbHRlck9wZXJhdGlvbj4o
Km9wZXJhdGlvbikpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBGaWx0ZXJP
cGVyYXRpb246OlJFRkVSRU5DRToKKyAgICAgICAgICAgIG91dHNldHMgKz0gY2FsY3VsYXRlUmVm
ZXJlbmNlRmlsdGVyT3V0c2V0cyhkb3duY2FzdDxSZWZlcmVuY2VGaWx0ZXJPcGVyYXRpb24+KCpv
cGVyYXRpb24pLCByZW5kZXJlcik7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBkZWZh
dWx0OgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CiAKLSAgICBmb3IgKGF1
dG8mIGZ1bmN0aW9uIDogbV9mdW5jdGlvbnMpCi0gICAgICAgIG1fb3V0c2V0cyArPSBmdW5jdGlv
bi0+b3V0c2V0cygqdGhpcyk7Ci0gICAgcmV0dXJuIG1fb3V0c2V0czsKKyAgICByZXR1cm4gb3V0
c2V0czsKIH0KIAogVGV4dFN0cmVhbSYgQ1NTRmlsdGVyOjpleHRlcm5hbFJlcHJlc2VudGF0aW9u
KFRleHRTdHJlYW0mIHRzLCBGaWx0ZXJSZXByZXNlbnRhdGlvbiByZXByZXNlbnRhdGlvbikgY29u
c3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9DU1NGaWx0ZXIuaCBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9DU1NGaWx0ZXIuaAppbmRleCA0ZGJhYzUzYWQwMDg1ODhk
MzU1YzIzOTAwNjA0YWMwZWNmOGE2NWVhLi5iOTk5NmRjODI1NGZhMDAxZmNkNDY0MjI3MWNjNDNl
OTlkYTNjYWMwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvQ1NTRmlsdGVy
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0NTU0ZpbHRlci5oCkBAIC00OSwxMCAr
NDksMTAgQEAgcHVibGljOgogCiAgICAgRmlsdGVyRWZmZWN0VmVjdG9yIGVmZmVjdHNPZlR5cGUo
RmlsdGVyRnVuY3Rpb246OlR5cGUpIGNvbnN0IGZpbmFsOwogCi0gICAgSW50T3V0c2V0cyBvdXRz
ZXRzKCkgY29uc3QgZmluYWw7Ci0KICAgICBSZWZQdHI8RmlsdGVySW1hZ2U+IGFwcGx5KEZpbHRl
ckltYWdlKiBzb3VyY2VJbWFnZSwgRmlsdGVyUmVzdWx0cyYpIGZpbmFsOwogCisgICAgc3RhdGlj
IEludE91dHNldHMgY2FsY3VsYXRlT3V0c2V0cyhSZW5kZXJFbGVtZW50JiwgY29uc3QgRmlsdGVy
T3BlcmF0aW9ucyYpOworCiBwcml2YXRlOgogICAgIENTU0ZpbHRlcihSZW5kZXJpbmdNb2RlLCBj
b25zdCBGbG9hdFNpemUmIGZpbHRlclNjYWxlLCBDbGlwT3BlcmF0aW9uLCBib29sIGhhc0ZpbHRl
clRoYXRNb3Zlc1BpeGVscywgYm9vbCBoYXNGaWx0ZXJUaGF0U2hvdWxkQmVSZXN0cmljdGVkQnlT
ZWN1cml0eU9yaWdpbik7CiAgICAgQ1NTRmlsdGVyKFZlY3RvcjxSZWY8RmlsdGVyRnVuY3Rpb24+
PiYmKTsKQEAgLTY3LDggKzY3LDYgQEAgcHJpdmF0ZToKICAgICBib29sIG1faGFzRmlsdGVyVGhh
dFNob3VsZEJlUmVzdHJpY3RlZEJ5U2VjdXJpdHlPcmlnaW4geyBmYWxzZSB9OwogCiAgICAgVmVj
dG9yPFJlZjxGaWx0ZXJGdW5jdGlvbj4+IG1fZnVuY3Rpb25zOwotCi0gICAgbXV0YWJsZSBJbnRP
dXRzZXRzIG1fb3V0c2V0czsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCmluZGV4IGJiMWU2YTQ5MTFjZjM0OGE1Nzlk
MmQ0YmUwZWFhYzgxM2Q0NzliM2QuLjMyYTVlYTlmZTU1MWEyMDVmOTdjMDFiY2Q1YzQ2NGZkZjQ0
ZTZmOGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcApAQCAtMzI5
Myw3ICszMjkzLDcgQEAgUmVuZGVyTGF5ZXJGaWx0ZXJzKiBSZW5kZXJMYXllcjo6ZmlsdGVyc0Zv
clBhaW50aW5nKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgT3AKICAgICBpZiAoIXBhaW50c1dp
dGhGaWx0ZXJzKCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgaWYgKG1fZmlsdGVy
cyAmJiBtX2ZpbHRlcnMtPmZpbHRlcigpKQorICAgIGlmIChtX2ZpbHRlcnMpCiAgICAgICAgIHJl
dHVybiBtX2ZpbHRlcnMuZ2V0KCk7CiAKICAgICByZXR1cm4gbnVsbHB0cjsKQEAgLTU2OTgsNyAr
NTY5OCw3IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZUZpbHRlclBhaW50aW5nU3RyYXRlZ3ko
KQogICAgICAgICAvLyBEb24ndCBkZWxldGUgdGhlIHdob2xlIGZpbHRlciBpbmZvIGhlcmUsIGJl
Y2F1c2Ugd2UgbWlnaHQgdXNlIGl0CiAgICAgICAgIC8vIGZvciBsb2FkaW5nIFNWRyByZWZlcmVu
Y2UgZmlsdGVyIGZpbGVzLgogICAgICAgICBpZiAobV9maWx0ZXJzKQotICAgICAgICAgICAgbV9m
aWx0ZXJzLT5zZXRGaWx0ZXIobnVsbHB0cik7CisgICAgICAgICAgICBtX2ZpbHRlcnMtPmNsZWFy
RmlsdGVyKCk7CiAKICAgICAgICAgLy8gRWFybHktcmV0dXJuIG9ubHkgaWYgd2UgKmRvbid0KiBo
YXZlIHJlZmVyZW5jZSBmaWx0ZXJzLgogICAgICAgICAvLyBGb3IgcmVmZXJlbmNlIGZpbHRlcnMs
IHdlIHN0aWxsIHdhbnQgdGhlIEZpbHRlckVmZmVjdCBncmFwaCBidWlsdApAQCAtNTcwOCwxMyAr
NTcwOCwxNSBAQCB2b2lkIFJlbmRlckxheWVyOjp1cGRhdGVGaWx0ZXJQYWludGluZ1N0cmF0ZWd5
KCkKICAgICB9CiAgICAgCiAgICAgZW5zdXJlTGF5ZXJGaWx0ZXJzKCk7Ci0gICAgbV9maWx0ZXJz
LT5idWlsZEZpbHRlcihyZW5kZXJlcigpLCBwYWdlKCkuZGV2aWNlU2NhbGVGYWN0b3IoKSwgcmVu
ZGVyZXIoKS5wYWdlKCkuYWNjZWxlcmF0ZWRGaWx0ZXJzRW5hYmxlZCgpID8gUmVuZGVyaW5nTW9k
ZTo6QWNjZWxlcmF0ZWQgOiBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkKTsKKyAgICBtX2Zp
bHRlcnMtPnNldFJlbmRlcmluZ01vZGUocmVuZGVyZXIoKS5wYWdlKCkuYWNjZWxlcmF0ZWRGaWx0
ZXJzRW5hYmxlZCgpID8gUmVuZGVyaW5nTW9kZTo6QWNjZWxlcmF0ZWQgOiBSZW5kZXJpbmdNb2Rl
OjpVbmFjY2VsZXJhdGVkKTsKKyAgICBtX2ZpbHRlcnMtPnNldEZpbHRlclNjYWxlKHsgcGFnZSgp
LmRldmljZVNjYWxlRmFjdG9yKCksIHBhZ2UoKS5kZXZpY2VTY2FsZUZhY3RvcigpIH0pOworICAg
IG1fZmlsdGVycy0+Y2FsY3VsYXRlT3V0c2V0cyhyZW5kZXJlcigpKTsKIH0KIAogSW50T3V0c2V0
cyBSZW5kZXJMYXllcjo6ZmlsdGVyT3V0c2V0cygpIGNvbnN0CiB7CiAgICAgaWYgKG1fZmlsdGVy
cykKLSAgICAgICAgcmV0dXJuIG1fZmlsdGVycy0+ZmlsdGVyKCkgPyBtX2ZpbHRlcnMtPmZpbHRl
cigpLT5vdXRzZXRzKCkgOiBJbnRPdXRzZXRzKCk7CisgICAgICAgIHJldHVybiBtX2ZpbHRlcnMt
Pm91dHNldHMoKTsKICAgICByZXR1cm4gcmVuZGVyZXIoKS5zdHlsZSgpLmZpbHRlck91dHNldHMo
KTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVy
RmlsdGVycy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJGaWx0ZXJz
LmNwcAppbmRleCAwZTgxZWJkMmIyNjFjYTAyNzM2YjQyMmQ3Y2NkZWY4Y2RkZmQ3NGUzLi40MWQ2
NmQ2ZGYxY2ZmZjgxM2YyZjBiMTAwYzkxNjc2ZmM1NWJhYzU4IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJGaWx0ZXJzLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJGaWx0ZXJzLmNwcApAQCAtNTAsMTEgKzUwLDYgQEAg
UmVuZGVyTGF5ZXJGaWx0ZXJzOjp+UmVuZGVyTGF5ZXJGaWx0ZXJzKCkKICAgICByZW1vdmVSZWZl
cmVuY2VGaWx0ZXJDbGllbnRzKCk7CiB9CiAKLXZvaWQgUmVuZGVyTGF5ZXJGaWx0ZXJzOjpzZXRG
aWx0ZXIoUmVmUHRyPENTU0ZpbHRlcj4mJiBmaWx0ZXIpCi17Ci0gICAgbV9maWx0ZXIgPSBXVEZN
b3ZlKGZpbHRlcik7Ci19Ci0KIGJvb2wgUmVuZGVyTGF5ZXJGaWx0ZXJzOjpoYXNGaWx0ZXJUaGF0
TW92ZXNQaXhlbHMoKSBjb25zdAogewogICAgIHJldHVybiBtX2ZpbHRlciAmJiBtX2ZpbHRlci0+
aGFzRmlsdGVyVGhhdE1vdmVzUGl4ZWxzKCk7CkBAIC0xMTYsMTIgKzExMSw5IEBAIHZvaWQgUmVu
ZGVyTGF5ZXJGaWx0ZXJzOjpyZW1vdmVSZWZlcmVuY2VGaWx0ZXJDbGllbnRzKCkKICAgICBtX2lu
dGVybmFsU1ZHUmVmZXJlbmNlcy5jbGVhcigpOwogfQogCi12b2lkIFJlbmRlckxheWVyRmlsdGVy
czo6YnVpbGRGaWx0ZXIoUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIsIGZsb2F0IHNjYWxlRmFjdG9y
LCBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUpCit2b2lkIFJlbmRlckxheWVyRmlsdGVyczo6
Y2FsY3VsYXRlT3V0c2V0cyhSZW5kZXJFbGVtZW50JiByZW5kZXJlcikKIHsKLSAgICAvLyBJZiB0
aGUgZmlsdGVyIGZhaWxzIHRvIGJ1aWxkLCByZW1vdmUgaXQgZnJvbSB0aGUgbGF5ZXIuIEl0IHdp
bGwgc3RpbGwgYXR0ZW1wdCB0bwotICAgIC8vIGdvIHRocm91Z2ggcmVndWxhciBwcm9jZXNzaW5n
IChlLmcuIGNvbXBvc2l0aW5nKSwgYnV0IG5ldmVyIGFwcGx5IGFueXRoaW5nLgotICAgIC8vIEZJ
WE1FOiBUaGlzIHJlYnVpbGRzIHRoZSBlbnRpcmUgZWZmZWN0cyBjaGFpbiBldmVuIGlmIHRoZSBm
aWx0ZXIgc3R5bGUgZGlkbid0IGNoYW5nZS4KLSAgICBtX2ZpbHRlciA9IENTU0ZpbHRlcjo6Y3Jl
YXRlKHJlbmRlcmVyLCByZW5kZXJlci5zdHlsZSgpLmZpbHRlcigpLCByZW5kZXJpbmdNb2RlLCBG
bG9hdFNpemUgeyBzY2FsZUZhY3Rvciwgc2NhbGVGYWN0b3IgfSwgRmlsdGVyOjpDbGlwT3BlcmF0
aW9uOjpVbml0ZSwgbV90YXJnZXRCb3VuZGluZ0JveCk7CisgICAgbV9vdXRzZXRzID0gQ1NTRmls
dGVyOjpjYWxjdWxhdGVPdXRzZXRzKHJlbmRlcmVyLCByZW5kZXJlci5zdHlsZSgpLmZpbHRlcigp
KTsKIH0KIAogR3JhcGhpY3NDb250ZXh0KiBSZW5kZXJMYXllckZpbHRlcnM6OmlucHV0Q29udGV4
dCgpCkBAIC0xNDAsMTggKzEzMiwxNSBAQCB2b2lkIFJlbmRlckxheWVyRmlsdGVyczo6YWxsb2Nh
dGVCYWNraW5nU3RvcmVJZk5lZWRlZChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpCiAKIEdyYXBo
aWNzQ29udGV4dCogUmVuZGVyTGF5ZXJGaWx0ZXJzOjpiZWdpbkZpbHRlckVmZmVjdChSZW5kZXJF
bGVtZW50JiByZW5kZXJlciwgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBMYXlvdXRS
ZWN0JiBmaWx0ZXJCb3hSZWN0LCBjb25zdCBMYXlvdXRSZWN0JiBkaXJ0eVJlY3QsIGNvbnN0IExh
eW91dFJlY3QmIGxheWVyUmVwYWludFJlY3QpCiB7Ci0gICAgaWYgKCFtX2ZpbHRlcikKLSAgICAg
ICAgcmV0dXJuIG51bGxwdHI7Ci0KICAgICAvLyBDYWxjdWxhdGUgdGFyZ2V0Qm91bmRpbmdCb3gg
c2luY2UgaXQgd2lsbCBiZSB1c2VkIGlmIHRoZSBmaWx0ZXIgaXMgY3JlYXRlZC4KICAgICBhdXRv
IHRhcmdldEJvdW5kaW5nQm94ID0gaW50ZXJzZWN0aW9uKGZpbHRlckJveFJlY3QsIGRpcnR5UmVj
dCk7CiAgICAgaWYgKHRhcmdldEJvdW5kaW5nQm94LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJu
IG51bGxwdHI7CiAKLSAgICBpZiAobV90YXJnZXRCb3VuZGluZ0JveCAhPSB0YXJnZXRCb3VuZGlu
Z0JveCkgeworICAgIGlmICghbV9maWx0ZXIgfHwgbV90YXJnZXRCb3VuZGluZ0JveCAhPSB0YXJn
ZXRCb3VuZGluZ0JveCkgewogICAgICAgICBtX3RhcmdldEJvdW5kaW5nQm94ID0gdGFyZ2V0Qm91
bmRpbmdCb3g7CiAgICAgICAgIC8vIEZJWE1FOiBUaGlzIHJlYnVpbGRzIHRoZSBlbnRpcmUgZWZm
ZWN0cyBjaGFpbiBldmVuIGlmIHRoZSBmaWx0ZXIgc3R5bGUgZGlkbid0IGNoYW5nZS4KLSAgICAg
ICAgbV9maWx0ZXIgPSBDU1NGaWx0ZXI6OmNyZWF0ZShyZW5kZXJlciwgcmVuZGVyZXIuc3R5bGUo
KS5maWx0ZXIoKSwgbV9maWx0ZXItPnJlbmRlcmluZ01vZGUoKSwgbV9maWx0ZXItPmZpbHRlclNj
YWxlKCksIEZpbHRlcjo6Q2xpcE9wZXJhdGlvbjo6VW5pdGUsIG1fdGFyZ2V0Qm91bmRpbmdCb3gp
OworICAgICAgICBtX2ZpbHRlciA9IENTU0ZpbHRlcjo6Y3JlYXRlKHJlbmRlcmVyLCByZW5kZXJl
ci5zdHlsZSgpLmZpbHRlcigpLCBtX3JlbmRlcmluZ01vZGUsIG1fZmlsdGVyU2NhbGUsIEZpbHRl
cjo6Q2xpcE9wZXJhdGlvbjo6VW5pdGUsIG1fdGFyZ2V0Qm91bmRpbmdCb3gpOwogICAgIH0KIAog
ICAgIGlmICghbV9maWx0ZXIpCkBAIC0xNjIsNyArMTUxLDcgQEAgR3JhcGhpY3NDb250ZXh0KiBS
ZW5kZXJMYXllckZpbHRlcnM6OmJlZ2luRmlsdGVyRWZmZWN0KFJlbmRlckVsZW1lbnQmIHJlbmRl
cmVyLAogICAgIC8vIEZvciBDU1NGaWx0ZXIsIGZpbHRlclJlZ2lvbiA9IHRhcmdldEJvdW5kaW5n
Qm94ICsgZmlsdGVyLT5vdXRzZXRzKCkKICAgICBhdXRvIGZpbHRlclJlZ2lvbiA9IHRhcmdldEJv
dW5kaW5nQm94OwogICAgIGlmIChmaWx0ZXIuaGFzRmlsdGVyVGhhdE1vdmVzUGl4ZWxzKCkpCi0g
ICAgICAgIGZpbHRlclJlZ2lvbi5leHBhbmQodG9MYXlvdXRCb3hFeHRlbnQoZmlsdGVyLm91dHNl
dHMoKSkpOworICAgICAgICBmaWx0ZXJSZWdpb24uZXhwYW5kKHRvTGF5b3V0Qm94RXh0ZW50KG1f
b3V0c2V0cykpOwogCiAgICAgaWYgKGZpbHRlclJlZ2lvbi5pc0VtcHR5KCkpCiAgICAgICAgIHJl
dHVybiBudWxscHRyOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckxheWVyRmlsdGVycy5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyRmls
dGVycy5oCmluZGV4IDA1MTNjODg1YjQwYjc1ZTAxMzJmM2VhZGZlZjYwYzc4Njc4OWI5ZDguLjhh
NDhkZDA5N2M3ZjRiOTljZGM1NGVkY2E3NTJlNzUwYTk4NGI2NWUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckZpbHRlcnMuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJGaWx0ZXJzLmgKQEAgLTUwLDcgKzUwLDcgQEAgcHVi
bGljOgogICAgIHZvaWQgZXhwYW5kRGlydHlTb3VyY2VSZWN0KGNvbnN0IExheW91dFJlY3QmIHJl
Y3QpIHsgbV9kaXJ0eVNvdXJjZVJlY3QudW5pdGUocmVjdCk7IH0KIAogICAgIENTU0ZpbHRlciog
ZmlsdGVyKCkgY29uc3QgeyByZXR1cm4gbV9maWx0ZXIuZ2V0KCk7IH0KLSAgICB2b2lkIHNldEZp
bHRlcihSZWZQdHI8Q1NTRmlsdGVyPiYmKTsKKyAgICB2b2lkIGNsZWFyRmlsdGVyKCkgeyBtX2Zp
bHRlciA9IG51bGxwdHI7IH0KICAgICAKICAgICBib29sIGhhc0ZpbHRlclRoYXRNb3Zlc1BpeGVs
cygpIGNvbnN0OwogICAgIGJvb2wgaGFzRmlsdGVyVGhhdFNob3VsZEJlUmVzdHJpY3RlZEJ5U2Vj
dXJpdHlPcmlnaW4oKSBjb25zdDsKQEAgLTU4LDcgKzU4LDExIEBAIHB1YmxpYzoKICAgICB2b2lk
IHVwZGF0ZVJlZmVyZW5jZUZpbHRlckNsaWVudHMoY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYpOwog
ICAgIHZvaWQgcmVtb3ZlUmVmZXJlbmNlRmlsdGVyQ2xpZW50cygpOwogCi0gICAgdm9pZCBidWls
ZEZpbHRlcihSZW5kZXJFbGVtZW50JiwgZmxvYXQgc2NhbGVGYWN0b3IsIFJlbmRlcmluZ01vZGUp
OworICAgIHZvaWQgc2V0UmVuZGVyaW5nTW9kZShSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUp
IHsgbV9yZW5kZXJpbmdNb2RlID0gcmVuZGVyaW5nTW9kZTsgfQorICAgIHZvaWQgc2V0RmlsdGVy
U2NhbGUoY29uc3QgRmxvYXRTaXplJiBmaWx0ZXJTY2FsZSkgeyBtX2ZpbHRlclNjYWxlID0gZmls
dGVyU2NhbGU7IH0KKworICAgIHZvaWQgY2FsY3VsYXRlT3V0c2V0cyhSZW5kZXJFbGVtZW50Jik7
CisgICAgSW50T3V0c2V0cyBvdXRzZXRzKCkgY29uc3QgeyByZXR1cm4gbV9vdXRzZXRzOyB9CiAK
ICAgICAvLyBQZXIgcmVuZGVyCiAgICAgTGF5b3V0UmVjdCByZXBhaW50UmVjdCgpIGNvbnN0IHsg
cmV0dXJuIG1fcmVwYWludFJlY3Q7IH0KQEAgLTczLDYgKzc3LDkgQEAgcHJpdmF0ZToKICAgICB2
b2lkIGFsbG9jYXRlQmFja2luZ1N0b3JlSWZOZWVkZWQoR3JhcGhpY3NDb250ZXh0Jik7CiAKICAg
ICBSZW5kZXJMYXllciYgbV9sYXllcjsKKyAgICBSZW5kZXJpbmdNb2RlIG1fcmVuZGVyaW5nTW9k
ZSB7IFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQgfTsKKyAgICBGbG9hdFNpemUgbV9maWx0
ZXJTY2FsZSB7IDEsIDEgfTsKKyAgICBJbnRPdXRzZXRzIG1fb3V0c2V0czsKIAogICAgIFZlY3Rv
cjxSZWZQdHI8RWxlbWVudD4+IG1faW50ZXJuYWxTVkdSZWZlcmVuY2VzOwogICAgIFZlY3RvcjxD
YWNoZWRSZXNvdXJjZUhhbmRsZTxDYWNoZWRTVkdEb2N1bWVudD4+IG1fZXh0ZXJuYWxTVkdSZWZl
cmVuY2VzOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJT
VkdSZXNvdXJjZUZpbHRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRl
clNWR1Jlc291cmNlRmlsdGVyLmNwcAppbmRleCA1NWQ1ZWQ1N2UzZWQ0ZDk3Mzk4ZGQ4MjI3MzEz
ZWQwZDM0NTAzMjkyLi44ZDVkYmQ5M2RiOTAwMmI5N2FiMzlkMGY1OGM4MWE5YjcwMDZjZGQxIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNl
RmlsdGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jl
c291cmNlRmlsdGVyLmNwcApAQCAtMTI5LDcgKzEyOSw3IEBAIGJvb2wgUmVuZGVyU1ZHUmVzb3Vy
Y2VGaWx0ZXI6OmFwcGx5UmVzb3VyY2UoUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIsIGNvbnN0IFJl
bmRlCiAgICAgYXV0byByZW5kZXJpbmdNb2RlID0gcmVuZGVyZXIucGFnZSgpLmFjY2VsZXJhdGVk
RmlsdGVyc0VuYWJsZWQoKSA/IFJlbmRlcmluZ01vZGU6OkFjY2VsZXJhdGVkIDogUmVuZGVyaW5n
TW9kZTo6VW5hY2NlbGVyYXRlZDsKIAogICAgIC8vIENyZWF0ZSB0aGUgU1ZHRmlsdGVyIG9iamVj
dC4KLSAgICBmaWx0ZXJEYXRhLT5idWlsZGVyID0gbWFrZVVuaXF1ZTxTVkdGaWx0ZXJCdWlsZGVy
PigpOworICAgIGZpbHRlckRhdGEtPmJ1aWxkZXIgPSBtYWtlVW5pcXVlPFNWR0ZpbHRlckJ1aWxk
ZXI+KHRhcmdldEJvdW5kaW5nQm94LCBmaWx0ZXJFbGVtZW50KCkucHJpbWl0aXZlVW5pdHMoKSk7
CiAgICAgZmlsdGVyRGF0YS0+ZmlsdGVyID0gU1ZHRmlsdGVyOjpjcmVhdGUoZmlsdGVyRWxlbWVu
dCgpLCAqZmlsdGVyRGF0YS0+YnVpbGRlciwgcmVuZGVyaW5nTW9kZSwgZmlsdGVyU2NhbGUsIEZp
bHRlcjo6Q2xpcE9wZXJhdGlvbjo6SW50ZXJzZWN0LCBmaWx0ZXJEYXRhLT5ib3VuZGFyaWVzLCB0
YXJnZXRCb3VuZGluZ0JveCk7CiAgICAgaWYgKCFmaWx0ZXJEYXRhLT5maWx0ZXIpIHsKICAgICAg
ICAgbV9yZW5kZXJlckZpbHRlckRhdGFNYXAucmVtb3ZlKCZyZW5kZXJlcik7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlclRyZWVBc1RleHQuY3BwIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJUcmVlQXNUZXh0LmNwcAppbmRl
eCA4NzMzMDE0N2YxNDFjMTZjMDhjZTAxNWU3ODExOTBiOGI2NGZiYjg4Li5hMWM5NmRlYjhjNGI2
ZjYzYTVhMTIzODQ5N2MwOGM2MWQ0ZGYwYzcyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3ZnL1NWR1JlbmRlclRyZWVBc1RleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyVHJlZUFzVGV4dC5jcHAKQEAgLTQ3Nyw3ICs0NzcsNyBA
QCB2b2lkIHdyaXRlU1ZHUmVzb3VyY2VDb250YWluZXIoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFJl
bmRlclNWR1Jlc291cmNlQ29udGFpbmVyJgogICAgICAgICAvLyBDcmVhdGluZyBhIHBsYWNlaG9s
ZGVyIGZpbHRlciB3aGljaCBpcyBwYXNzZWQgdG8gdGhlIGJ1aWxkZXIuCiAgICAgICAgIEZsb2F0
UmVjdCBkdW1teVJlY3Q7CiAgICAgICAgIEZsb2F0U2l6ZSBkdW1teVNjYWxlKDEsIDEpOwotICAg
ICAgICBTVkdGaWx0ZXJCdWlsZGVyIGJ1aWxkZXI7CisgICAgICAgIFNWR0ZpbHRlckJ1aWxkZXIg
YnVpbGRlcihkdW1teVJlY3QpOwogICAgICAgICBhdXRvIGR1bW15RmlsdGVyID0gU1ZHRmlsdGVy
OjpjcmVhdGUoZmlsdGVyLmZpbHRlckVsZW1lbnQoKSwgYnVpbGRlciwgUmVuZGVyaW5nTW9kZTo6
VW5hY2NlbGVyYXRlZCwgZHVtbXlTY2FsZSwgRmlsdGVyOjpDbGlwT3BlcmF0aW9uOjpJbnRlcnNl
Y3QsIGR1bW15UmVjdCwgZHVtbXlSZWN0KTsKICAgICAgICAgaWYgKGR1bW15RmlsdGVyKSB7CiAg
ICAgICAgICAgICBUZXh0U3RyZWFtOjpJbmRlbnRTY29wZSBpbmRlbnRTY29wZSh0cyk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVEcm9wU2hhZG93RWxlbWVudC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVEcm9wU2hhZG93RWxlbWVudC5jcHAKaW5kZXggZTFhY2Rm
MDlmMzkyZTJiY2ExN2IxYTQ0ZTY3MmE3Nzk4MjA0YWJiZi4uNmE4NGQ2Y2I1NTlkYTNiZTdiMTIz
MjJhZmIwNDVkMGZhMWRkZWI0ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZF
RHJvcFNoYWRvd0VsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRURyb3BT
aGFkb3dFbGVtZW50LmNwcApAQCAtOTYsNiArOTYsMTMgQEAgdm9pZCBTVkdGRURyb3BTaGFkb3dF
bGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1l
KQogICAgIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6c3ZnQXR0cmlidXRl
Q2hhbmdlZChhdHRyTmFtZSk7CiB9CiAKK0ludE91dHNldHMgU1ZHRkVEcm9wU2hhZG93RWxlbWVu
dDo6b3V0c2V0cyhjb25zdCBGbG9hdFJlY3QmIHRhcmdldEJvdW5kaW5nQm94LCBTVkdVbml0VHlw
ZXM6OlNWR1VuaXRUeXBlIHByaW1pdGl2ZVVuaXRzKSBjb25zdAoreworICAgIGF1dG8gb2Zmc2V0
ID0gU1ZHRmlsdGVyOjpjYWxjdWxhdGVSZXNvbHZlZFNpemUoeyBkeCgpLCBkeSgpIH0sIHRhcmdl
dEJvdW5kaW5nQm94LCBwcmltaXRpdmVVbml0cyk7CisgICAgYXV0byBzdGREZXZpYXRpb24gPSBT
VkdGaWx0ZXI6OmNhbGN1bGF0ZVJlc29sdmVkU2l6ZSh7IHN0ZERldmlhdGlvblgoKSwgc3RkRGV2
aWF0aW9uWSgpIH0sIHRhcmdldEJvdW5kaW5nQm94LCBwcmltaXRpdmVVbml0cyk7CisgICAgcmV0
dXJuIEZFRHJvcFNoYWRvdzo6Y2FsY3VsYXRlT3V0c2V0cyhvZmZzZXQsIHN0ZERldmlhdGlvbik7
Cit9CisKIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IFNWR0ZFRHJvcFNoYWRvd0VsZW1lbnQ6OmZpbHRl
ckVmZmVjdChjb25zdCBTVkdGaWx0ZXJCdWlsZGVyJiwgY29uc3QgRmlsdGVyRWZmZWN0VmVjdG9y
JikgY29uc3QKIHsKICAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gdGhpcy0+cmVuZGVyZXIo
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRURyb3BTaGFkb3dFbGVtZW50
LmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVEcm9wU2hhZG93RWxlbWVudC5oCmluZGV4IDQ5
YmVmMGEzZTRjNzJmYTllMmYzM2E3NmE5NTlmZGVmNGYzNjIxYzguLjVhMWU3NmRiOTJkZDAxZGUz
NmVkMjAzNTBlYjQ3OWU1YjI4NzBlZGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdGRURyb3BTaGFkb3dFbGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRHJv
cFNoYWRvd0VsZW1lbnQuaApAQCAtNTQsNiArNTQsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgc3Zn
QXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJikgb3ZlcnJpZGU7CiAKICAgICBW
ZWN0b3I8QXRvbVN0cmluZz4gZmlsdGVyRWZmZWN0SW5wdXRzTmFtZXMoKSBjb25zdCBvdmVycmlk
ZSB7IHJldHVybiB7IGluMSgpIH07IH0KKyAgICBJbnRPdXRzZXRzIG91dHNldHMoY29uc3QgRmxv
YXRSZWN0JiB0YXJnZXRCb3VuZGluZ0JveCwgU1ZHVW5pdFR5cGVzOjpTVkdVbml0VHlwZSBwcmlt
aXRpdmVVbml0cykgY29uc3Qgb3ZlcnJpZGU7CiAgICAgUmVmUHRyPEZpbHRlckVmZmVjdD4gZmls
dGVyRWZmZWN0KGNvbnN0IFNWR0ZpbHRlckJ1aWxkZXImLCBjb25zdCBGaWx0ZXJFZmZlY3RWZWN0
b3ImKSBjb25zdCBvdmVycmlkZTsKIAogICAgIFByb3BlcnR5UmVnaXN0cnkgbV9wcm9wZXJ0eVJl
Z2lzdHJ5IHsgKnRoaXMgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUdh
dXNzaWFuQmx1ckVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFR2F1c3NpYW5C
bHVyRWxlbWVudC5jcHAKaW5kZXggMDczYmQ3MjRiYjllMzVmMGI4MGQ2MmRmOWMwMjk1NTMyZTk2
OWQyNy4uY2JiYTE5YjA3MDc3YmM2ODA4ZWZkMDUwZjNiMDZlMzRjYTQyOGY0ZiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFR2F1c3NpYW5CbHVyRWxlbWVudC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFR2F1c3NpYW5CbHVyRWxlbWVudC5jcHAKQEAgLTk0LDYg
Kzk0LDEyIEBAIHZvaWQgU1ZHRkVHYXVzc2lhbkJsdXJFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFu
Z2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lCiAgICAgU1ZHRmlsdGVyUHJpbWl0aXZl
U3RhbmRhcmRBdHRyaWJ1dGVzOjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGF0dHJOYW1lKTsKIH0KIAor
SW50T3V0c2V0cyBTVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQ6Om91dHNldHMoY29uc3QgRmxvYXRS
ZWN0JiB0YXJnZXRCb3VuZGluZ0JveCwgU1ZHVW5pdFR5cGVzOjpTVkdVbml0VHlwZSBwcmltaXRp
dmVVbml0cykgY29uc3QKK3sKKyAgICBhdXRvIHN0ZERldmlhdGlvbiA9IFNWR0ZpbHRlcjo6Y2Fs
Y3VsYXRlUmVzb2x2ZWRTaXplKHsgc3RkRGV2aWF0aW9uWCgpLCBzdGREZXZpYXRpb25ZKCkgfSwg
dGFyZ2V0Qm91bmRpbmdCb3gsIHByaW1pdGl2ZVVuaXRzKTsKKyAgICByZXR1cm4gRkVHYXVzc2lh
bkJsdXI6OmNhbGN1bGF0ZU91dHNldHMoc3RkRGV2aWF0aW9uKTsKK30KKwogUmVmUHRyPEZpbHRl
ckVmZmVjdD4gU1ZHRkVHYXVzc2lhbkJsdXJFbGVtZW50OjpmaWx0ZXJFZmZlY3QoY29uc3QgU1ZH
RmlsdGVyQnVpbGRlciYsIGNvbnN0IEZpbHRlckVmZmVjdFZlY3RvciYpIGNvbnN0CiB7CiAgICAg
aWYgKHN0ZERldmlhdGlvblgoKSA8IDAgfHwgc3RkRGV2aWF0aW9uWSgpIDwgMCkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQuaCBiL1NvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQuaAppbmRleCA1MjFhZTIwNGVi
NGY1MmM2ZDM3OTk5ZTQ0ZTIyYjA1Mjg4YjgzMmIyLi4xMzZmNDQyOTJlOTczZDYxYWM4OWZmZDZj
MDRlOGZhZDAwMWE0ZjQ2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVHYXVz
c2lhbkJsdXJFbGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFR2F1c3NpYW5C
bHVyRWxlbWVudC5oCkBAIC01NCw2ICs1NCw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBzdmdBdHRy
aWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmKSBvdmVycmlkZTsKIAogICAgIFZlY3Rv
cjxBdG9tU3RyaW5nPiBmaWx0ZXJFZmZlY3RJbnB1dHNOYW1lcygpIGNvbnN0IG92ZXJyaWRlIHsg
cmV0dXJuIHsgaW4xKCkgfTsgfQorICAgIEludE91dHNldHMgb3V0c2V0cyhjb25zdCBGbG9hdFJl
Y3QmIHRhcmdldEJvdW5kaW5nQm94LCBTVkdVbml0VHlwZXM6OlNWR1VuaXRUeXBlIHByaW1pdGl2
ZVVuaXRzKSBjb25zdCBvdmVycmlkZTsKICAgICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBmaWx0ZXJF
ZmZlY3QoY29uc3QgU1ZHRmlsdGVyQnVpbGRlciYsIGNvbnN0IEZpbHRlckVmZmVjdFZlY3RvciYp
IGNvbnN0IG92ZXJyaWRlOwogCiAgICAgUHJvcGVydHlSZWdpc3RyeSBtX3Byb3BlcnR5UmVnaXN0
cnkgeyAqdGhpcyB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFT2Zmc2V0
RWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVPZmZzZXRFbGVtZW50LmNwcApp
bmRleCBlYjZkN2NiZjhkODBjNmFiOGMyZjhlOTA0YzU3YTgzZjdmMjBiZTRhLi5hOTk4ZDJmZGQ2
MWM2NjRiZTFiNmI3ZDIwMmQzNDEzYjNlMTc5Y2FlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHRkVPZmZzZXRFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
RkVPZmZzZXRFbGVtZW50LmNwcApAQCAtNzksNiArNzksMTIgQEAgdm9pZCBTVkdGRU9mZnNldEVs
ZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUp
CiAgICAgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpzdmdBdHRyaWJ1dGVD
aGFuZ2VkKGF0dHJOYW1lKTsKIH0KIAorSW50T3V0c2V0cyBTVkdGRU9mZnNldEVsZW1lbnQ6Om91
dHNldHMoY29uc3QgRmxvYXRSZWN0JiB0YXJnZXRCb3VuZGluZ0JveCwgU1ZHVW5pdFR5cGVzOjpT
VkdVbml0VHlwZSBwcmltaXRpdmVVbml0cykgY29uc3QKK3sKKyAgICBhdXRvIG9mZnNldCA9IFNW
R0ZpbHRlcjo6Y2FsY3VsYXRlUmVzb2x2ZWRTaXplKHsgZHgoKSwgZHkoKSB9LCB0YXJnZXRCb3Vu
ZGluZ0JveCwgcHJpbWl0aXZlVW5pdHMpOworICAgIHJldHVybiBGRU9mZnNldDo6Y2FsY3VsYXRl
T3V0c2V0cyhvZmZzZXQpOworfQorCiBSZWZQdHI8RmlsdGVyRWZmZWN0PiBTVkdGRU9mZnNldEVs
ZW1lbnQ6OmZpbHRlckVmZmVjdChjb25zdCBTVkdGaWx0ZXJCdWlsZGVyJiwgY29uc3QgRmlsdGVy
RWZmZWN0VmVjdG9yJikgY29uc3QKIHsKICAgICByZXR1cm4gRkVPZmZzZXQ6OmNyZWF0ZShkeCgp
LCBkeSgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRU9mZnNldEVsZW1l
bnQuaCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRU9mZnNldEVsZW1lbnQuaAppbmRleCBmODU5
NTk4YTBmZTZhMGQ3YTg4NGIwYzBjNWI5OGJlZjJjZjQ3YmJkLi4xNTZlZGRmNDY5OWRiYzZhMjI1
ZmJhNTllMDI5OGQ2ZTc5ZjdiMDhhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
RkVPZmZzZXRFbGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFT2Zmc2V0RWxl
bWVudC5oCkBAIC00OCw2ICs0OCw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBzdmdBdHRyaWJ1dGVD
aGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmKSBvdmVycmlkZTsKIAogICAgIFZlY3RvcjxBdG9t
U3RyaW5nPiBmaWx0ZXJFZmZlY3RJbnB1dHNOYW1lcygpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJu
IHsgaW4xKCkgfTsgfQorICAgIEludE91dHNldHMgb3V0c2V0cyhjb25zdCBGbG9hdFJlY3QmIHRh
cmdldEJvdW5kaW5nQm94LCBTVkdVbml0VHlwZXM6OlNWR1VuaXRUeXBlIHByaW1pdGl2ZVVuaXRz
KSBjb25zdCBvdmVycmlkZTsKICAgICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBmaWx0ZXJFZmZlY3Qo
Y29uc3QgU1ZHRmlsdGVyQnVpbGRlciYsIGNvbnN0IEZpbHRlckVmZmVjdFZlY3RvciYpIGNvbnN0
IG92ZXJyaWRlOwogCiAgICAgUHJvcGVydHlSZWdpc3RyeSBtX3Byb3BlcnR5UmVnaXN0cnkgeyAq
dGhpcyB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZpbHRlclByaW1pdGl2
ZVN0YW5kYXJkQXR0cmlidXRlcy5oIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZpbHRlclByaW1p
dGl2ZVN0YW5kYXJkQXR0cmlidXRlcy5oCmluZGV4IDc4ZTJhYTJjMWU4MTRlNjk4ZWQ0NDRlZWM3
N2Y5YjIwNzZlM2Y5NTUuLjUwMGIxZWI4OWRkOWQwYTAzY2M5ZTRjMDgzODJjZTU0M2FjZTY3NGEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFy
ZEF0dHJpYnV0ZXMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRmlsdGVyUHJpbWl0aXZl
U3RhbmRhcmRBdHRyaWJ1dGVzLmgKQEAgLTUzLDYgKzUzLDcgQEAgcHVibGljOgogICAgIC8vIFJl
dHVybnMgdHJ1ZSwgaWYgdGhlIG5ldyB2YWx1ZSBpcyBkaWZmZXJlbnQgZnJvbSB0aGUgb2xkIG9u
ZS4KICAgICB2aXJ0dWFsIGJvb2wgc2V0RmlsdGVyRWZmZWN0QXR0cmlidXRlKEZpbHRlckVmZmVj
dCosIGNvbnN0IFF1YWxpZmllZE5hbWUmKTsKICAgICB2aXJ0dWFsIFZlY3RvcjxBdG9tU3RyaW5n
PiBmaWx0ZXJFZmZlY3RJbnB1dHNOYW1lcygpIGNvbnN0IHsgcmV0dXJuIHsgfTsgfQorICAgIHZp
cnR1YWwgSW50T3V0c2V0cyBvdXRzZXRzKGNvbnN0IEZsb2F0UmVjdCYsIFNWR1VuaXRUeXBlczo6
U1ZHVW5pdFR5cGUpIGNvbnN0IHsgcmV0dXJuIHsgfTsgfQogICAgIHZpcnR1YWwgUmVmUHRyPEZp
bHRlckVmZmVjdD4gZmlsdGVyRWZmZWN0KGNvbnN0IFNWR0ZpbHRlckJ1aWxkZXImLCBjb25zdCBG
aWx0ZXJFZmZlY3RWZWN0b3ImKSBjb25zdCA9IDA7CiAKICAgICBzdGF0aWMgdm9pZCBpbnZhbGlk
YXRlRmlsdGVyUHJpbWl0aXZlUGFyZW50KFNWR0VsZW1lbnQqKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlci5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXIuY3BwCmluZGV4IDk1ZjI0YTdkZDll
NjRlZWQwNmI1OGI1MjlhODUwMGRmOWE4Y2Y5NjMuLjUxMDE1NjAzYjE1NTg1MDg1ZTQ1MDIxMzhh
M2ZhMDdkY2I4YzcxYTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9m
aWx0ZXJzL1NWR0ZpbHRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2Zp
bHRlcnMvU1ZHRmlsdGVyLmNwcApAQCAtMzQsMTkgKzM0LDEyIEBAIFJlZlB0cjxTVkdGaWx0ZXI+
IFNWR0ZpbHRlcjo6Y3JlYXRlKFNWR0ZpbHRlckVsZW1lbnQmIGZpbHRlckVsZW1lbnQsIFNWR0Zp
bHRlckJ1CiB7CiAgICAgYXV0byBmaWx0ZXIgPSBhZG9wdFJlZigqbmV3IFNWR0ZpbHRlcihyZW5k
ZXJpbmdNb2RlLCBmaWx0ZXJTY2FsZSwgY2xpcE9wZXJhdGlvbiwgZmlsdGVyUmVnaW9uLCB0YXJn
ZXRCb3VuZGluZ0JveCwgZmlsdGVyRWxlbWVudC5wcmltaXRpdmVVbml0cygpKSk7CiAKLSAgICBi
dWlsZGVyLnNldHVwQnVpbHRpbkVmZmVjdHMoU291cmNlR3JhcGhpYzo6Y3JlYXRlKCkpOwotICAg
IGJ1aWxkZXIuc2V0VGFyZ2V0Qm91bmRpbmdCb3godGFyZ2V0Qm91bmRpbmdCb3gpOwotICAgIGJ1
aWxkZXIuc2V0UHJpbWl0aXZlVW5pdHMoZmlsdGVyRWxlbWVudC5wcmltaXRpdmVVbml0cygpKTsK
LQotICAgIGlmICghYnVpbGRlci5idWlsZEZpbHRlckVmZmVjdHMoZmlsdGVyRWxlbWVudCkpCi0g
ICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgU1ZHRmlsdGVyRXhwcmVzc2lvbiBleHByZXNz
aW9uOwotICAgIGlmICghYnVpbGRlci5idWlsZEV4cHJlc3Npb24oZXhwcmVzc2lvbikpCisgICAg
YXV0byBleHByZXNzaW9uID0gYnVpbGRlci5idWlsZEZpbHRlckV4cHJlc3Npb24oZmlsdGVyRWxl
bWVudCk7CisgICAgaWYgKCFleHByZXNzaW9uKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAot
ICAgIEFTU0VSVCghZXhwcmVzc2lvbi5pc0VtcHR5KCkpOwotICAgIGZpbHRlci0+c2V0RXhwcmVz
c2lvbihXVEZNb3ZlKGV4cHJlc3Npb24pKTsKKyAgICBBU1NFUlQoIWV4cHJlc3Npb24tPmlzRW1w
dHkoKSk7CisgICAgZmlsdGVyLT5zZXRFeHByZXNzaW9uKFdURk1vdmUoKmV4cHJlc3Npb24pKTsK
IAogICAgIGlmIChyZW5kZXJpbmdNb2RlID09IFJlbmRlcmluZ01vZGU6OkFjY2VsZXJhdGVkICYm
ICFmaWx0ZXItPnN1cHBvcnRzQWNjZWxlcmF0ZWRSZW5kZXJpbmcoKSkKICAgICAgICAgZmlsdGVy
LT5zZXRSZW5kZXJpbmdNb2RlKFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQpOwpAQCAtNzQs
OSArNjcsMTQgQEAgU1ZHRmlsdGVyOjpTVkdGaWx0ZXIoY29uc3QgRmxvYXRSZWN0JiB0YXJnZXRC
b3VuZGluZ0JveCwgU1ZHVW5pdFR5cGVzOjpTVkdVbml0VHkKIHsKIH0KIAorRmxvYXRTaXplIFNW
R0ZpbHRlcjo6Y2FsY3VsYXRlUmVzb2x2ZWRTaXplKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgY29u
c3QgRmxvYXRSZWN0JiB0YXJnZXRCb3VuZGluZ0JveCwgU1ZHVW5pdFR5cGVzOjpTVkdVbml0VHlw
ZSBwcmltaXRpdmVVbml0cykKK3sKKyAgICByZXR1cm4gcHJpbWl0aXZlVW5pdHMgPT0gU1ZHVW5p
dFR5cGVzOjpTVkdfVU5JVF9UWVBFX09CSkVDVEJPVU5ESU5HQk9YID8gc2l6ZSAqIHRhcmdldEJv
dW5kaW5nQm94LnNpemUoKSA6IHNpemU7Cit9CisKIEZsb2F0U2l6ZSBTVkdGaWx0ZXI6OnJlc29s
dmVkU2l6ZShjb25zdCBGbG9hdFNpemUmIHNpemUpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fcHJp
bWl0aXZlVW5pdHMgPT0gU1ZHVW5pdFR5cGVzOjpTVkdfVU5JVF9UWVBFX09CSkVDVEJPVU5ESU5H
Qk9YID8gc2l6ZSAqIG1fdGFyZ2V0Qm91bmRpbmdCb3guc2l6ZSgpIDogc2l6ZTsKKyAgICByZXR1
cm4gY2FsY3VsYXRlUmVzb2x2ZWRTaXplKHNpemUsIG1fdGFyZ2V0Qm91bmRpbmdCb3gsIG1fcHJp
bWl0aXZlVW5pdHMpOwogfQogCiBib29sIFNWR0ZpbHRlcjo6c3VwcG9ydHNBY2NlbGVyYXRlZFJl
bmRlcmluZygpIGNvbnN0CkBAIC0xNDgsMTQgKzE0Niw2IEBAIFJlZlB0cjxGaWx0ZXJJbWFnZT4g
U1ZHRmlsdGVyOjphcHBseShGaWx0ZXJJbWFnZSogc291cmNlSW1hZ2UsIEZpbHRlclJlc3VsdHMm
IHJlCiAgICAgcmV0dXJuIHN0YWNrLnRha2VMYXN0KCk7CiB9CiAKLUludE91dHNldHMgU1ZHRmls
dGVyOjpvdXRzZXRzKCkgY29uc3QKLXsKLSAgICBJbnRPdXRzZXRzIG91dHNldHM7Ci0gICAgZm9y
IChhdXRvJiB0ZXJtIDogbV9leHByZXNzaW9uKQotICAgICAgICBvdXRzZXRzICs9IHRlcm0uZWZm
ZWN0LT5vdXRzZXRzKCp0aGlzKTsKLSAgICByZXR1cm4gb3V0c2V0czsKLX0KLQogVGV4dFN0cmVh
bSYgU1ZHRmlsdGVyOjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mIHRzLCBGaWx0
ZXJSZXByZXNlbnRhdGlvbiByZXByZXNlbnRhdGlvbikgY29uc3QKIHsKICAgICBmb3IgKGF1dG8g
aXQgPSBtX2V4cHJlc3Npb24ucmJlZ2luKCksIGVuZCA9IG1fZXhwcmVzc2lvbi5yZW5kKCk7IGl0
ICE9IGVuZDsgKytpdCkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNz
L2ZpbHRlcnMvU1ZHRmlsdGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVy
cy9TVkdGaWx0ZXIuaAppbmRleCA0ZWUwZmI4N2FmMWMxYTQxZGVmMTg2YTU1MzQxMjhiYTY3ODBl
OWNjLi5kMjM4NzVlYWJlMGY2ZWFmOTI5MDQ0ODIzMTk2YTE3OTNmMGNmNzljIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXIuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXIuaApAQCAtNDgsNiAr
NDgsOCBAQCBwdWJsaWM6CiAKICAgICBSZWZQdHI8RmlsdGVySW1hZ2U+IGFwcGx5KEZpbHRlcklt
YWdlKiBzb3VyY2VJbWFnZSwgRmlsdGVyUmVzdWx0cyYpIGZpbmFsOwogCisgICAgc3RhdGljIEZs
b2F0U2l6ZSBjYWxjdWxhdGVSZXNvbHZlZFNpemUoY29uc3QgRmxvYXRTaXplJiwgY29uc3QgRmxv
YXRSZWN0JiB0YXJnZXRCb3VuZGluZ0JveCwgU1ZHVW5pdFR5cGVzOjpTVkdVbml0VHlwZSBwcmlt
aXRpdmVVbml0cyk7CisKICAgICBXVEY6OlRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRp
b24oV1RGOjpUZXh0U3RyZWFtJiwgRmlsdGVyUmVwcmVzZW50YXRpb24pIGNvbnN0IGZpbmFsOwog
CiBwcml2YXRlOgpAQCAtNjIsOSArNjQsNiBAQCBwcml2YXRlOgogCiAgICAgUmVmUHRyPEZpbHRl
ckltYWdlPiBhcHBseShjb25zdCBGaWx0ZXImLCBGaWx0ZXJJbWFnZSYgc291cmNlSW1hZ2UsIEZp
bHRlclJlc3VsdHMmKSBmaW5hbDsKIAotICAgIEludE91dHNldHMgb3V0c2V0cyhjb25zdCBGaWx0
ZXImKSBjb25zdCBmaW5hbCB7IHJldHVybiBvdXRzZXRzKCk7IH0KLSAgICBJbnRPdXRzZXRzIG91
dHNldHMoKSBjb25zdCBmaW5hbDsKLQogICAgIEZsb2F0UmVjdCBtX3RhcmdldEJvdW5kaW5nQm94
OwogICAgIFNWR1VuaXRUeXBlczo6U1ZHVW5pdFR5cGUgbV9wcmltaXRpdmVVbml0czsKIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyQnVp
bGRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXJC
dWlsZGVyLmNwcAppbmRleCA1MDc3YjJlZTkyYjA5NWQyNmY5YmZiYzAxYTlmYjY0OTc3MTlkYzUw
Li5lN2U5NGFlYzRjNzQwYmNiNjdkMGZiNThmN2JlNTI1ZjFkYmYxODNmIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXJCdWlsZGVyLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXJCdWlsZGVy
LmNwcApAQCAtMjMsOSArMjMsOCBAQAogCiAjaW5jbHVkZSAiRWxlbWVudEl0ZXJhdG9yLmgiCiAj
aW5jbHVkZSAiU1ZHRmlsdGVyRWxlbWVudC5oIgorI2luY2x1ZGUgIlNWR0ZpbHRlckdyYXBoLmgi
CiAjaW5jbHVkZSAiU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzLmgiCi0jaW5j
bHVkZSAiU291cmNlQWxwaGEuaCIKLSNpbmNsdWRlICJTb3VyY2VHcmFwaGljLmgiCiAKICNpZiBF
TkFCTEUoREVTVElOQVRJT05fQ09MT1JfU1BBQ0VfTElORUFSX1NSR0IpCiAjaW5jbHVkZSAiQ1NT
Q29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmgiCkBAIC0zNywxMCArMzYsMTAgQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBtYXhUb3RhbE51bWJlckZpbHRl
ckVmZmVjdHMgPSAxMDA7CiBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIG1heENvdW50Q2hpbGRO
b2RlcyA9IDIwMDsKIAotdm9pZCBTVkdGaWx0ZXJCdWlsZGVyOjpzZXR1cEJ1aWx0aW5FZmZlY3Rz
KFJlZjxGaWx0ZXJFZmZlY3Q+IHNvdXJjZUdyYXBoaWMpCitTVkdGaWx0ZXJCdWlsZGVyOjpTVkdG
aWx0ZXJCdWlsZGVyKGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0Qm91bmRpbmdCb3gsIFNWR1VuaXRU
eXBlczo6U1ZHVW5pdFR5cGUgcHJpbWl0aXZlVW5pdHMpCisgICAgOiBtX3RhcmdldEJvdW5kaW5n
Qm94KHRhcmdldEJvdW5kaW5nQm94KQorICAgICwgbV9wcmltaXRpdmVVbml0cyhwcmltaXRpdmVV
bml0cykKIHsKLSAgICBtX2J1aWx0aW5FZmZlY3RzLmFkZChTb3VyY2VHcmFwaGljOjplZmZlY3RO
YW1lKCksIHNvdXJjZUdyYXBoaWMpOwotICAgIG1fYnVpbHRpbkVmZmVjdHMuYWRkKFNvdXJjZUFs
cGhhOjplZmZlY3ROYW1lKCksIFNvdXJjZUFscGhhOjpjcmVhdGUoc291cmNlR3JhcGhpYy0+b3Bl
cmF0aW5nQ29sb3JTcGFjZSgpKSk7CiB9CiAKIHN0YXRpYyBPcHRpb25TZXQ8RmlsdGVyRWZmZWN0
R2VvbWV0cnk6OkZsYWdzPiBlZmZlY3RHZW9tZXRyeUZsYWdzRm9yRWxlbWVudChTVkdFbGVtZW50
JiBlbGVtZW50KQpAQCAtNzgsMTUzICs3NywxMzcgQEAgc3RhdGljIENvbG9ySW50ZXJwb2xhdGlv
biBjb2xvckludGVycG9sYXRpb25Gb3JFbGVtZW50KFNWR0VsZW1lbnQmIGVsZW1lbnQpCiB9CiAj
ZW5kaWYKIAotUmVmUHRyPEZpbHRlckVmZmVjdD4gU1ZHRmlsdGVyQnVpbGRlcjo6YnVpbGRGaWx0
ZXJFZmZlY3RzKFNWR0ZpbHRlckVsZW1lbnQmIGZpbHRlckVsZW1lbnQpCitzdGF0aWMgYm9vbCBi
dWlsZEVmZmVjdHNFeHByZXNzaW9uKGNvbnN0IFNWR0ZpbHRlckVmZmVjdHNHcmFwaCYgZ3JhcGgs
IGNvbnN0IEZpbHRlckVmZmVjdEdlb21ldHJ5TWFwJiBlZmZlY3RHZW9tZXRyeU1hcCwgRmlsdGVy
RWZmZWN0JiBlZmZlY3QsIEZpbHRlckVmZmVjdFZlY3RvciYgc3RhY2ssIHVuc2lnbmVkIGxldmVs
LCBTVkdGaWx0ZXJFeHByZXNzaW9uJiBleHByZXNzaW9uKQogewotICAgIGlmIChmaWx0ZXJFbGVt
ZW50LmNvdW50Q2hpbGROb2RlcygpID4gbWF4Q291bnRDaGlsZE5vZGVzKQotICAgICAgICByZXR1
cm4gbnVsbHB0cjsKLQotICAgIHNldEVmZmVjdElucHV0cyhzb3VyY2VBbHBoYSgpLCBGaWx0ZXJF
ZmZlY3RWZWN0b3IgeyBzb3VyY2VHcmFwaGljKCkgfSk7Ci0KLSAgICBmb3IgKGF1dG8mIGVmZmVj
dEVsZW1lbnQgOiBjaGlsZHJlbk9mVHlwZTxTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJp
YnV0ZXM+KGZpbHRlckVsZW1lbnQpKSB7Ci0gICAgICAgIGF1dG8gaW5wdXRzID0gbmFtZWRFZmZl
Y3RzKGVmZmVjdEVsZW1lbnQuZmlsdGVyRWZmZWN0SW5wdXRzTmFtZXMoKSk7Ci0gICAgICAgIGlm
ICghaW5wdXRzKQotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgLy8gQSBjeWNsZSBp
cyBkZXRlY3RlZC4KKyAgICBpZiAoc3RhY2suY29udGFpbnNJZihbJl0oYXV0byYgaXRlbSkgeyBy
ZXR1cm4gaXRlbS5wdHIoKSA9PSAmZWZmZWN0OyB9KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwog
Ci0gICAgICAgIGF1dG8gZWZmZWN0ID0gZWZmZWN0RWxlbWVudC5maWx0ZXJFZmZlY3QoKnRoaXMs
ICppbnB1dHMpOwotICAgICAgICBpZiAoIWVmZmVjdCkKLSAgICAgICAgICAgIHJldHVybiBudWxs
cHRyOworICAgIGF1dG8gZWZmZWN0R2VvbWV0cnkgPSBbJl0oRmlsdGVyRWZmZWN0JiBlZmZlY3Qp
IC0+IHN0ZDo6b3B0aW9uYWw8RmlsdGVyRWZmZWN0R2VvbWV0cnk+IHsKKyAgICAgICAgYXV0byBp
dCA9IGVmZmVjdEdlb21ldHJ5TWFwLmZpbmQoZWZmZWN0KTsKKyAgICAgICAgaWYgKGl0ICE9IGVm
ZmVjdEdlb21ldHJ5TWFwLmVuZCgpKQorICAgICAgICAgICAgcmV0dXJuIGl0LT52YWx1ZTsKKyAg
ICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICB9OwogCi0gICAgICAgIGlmIChhdXRvIGZs
YWdzID0gZWZmZWN0R2VvbWV0cnlGbGFnc0ZvckVsZW1lbnQoZWZmZWN0RWxlbWVudCkpIHsKLSAg
ICAgICAgICAgIGF1dG8gZWZmZWN0Qm91bmRhcmllcyA9IFNWR0xlbmd0aENvbnRleHQ6OnJlc29s
dmVSZWN0YW5nbGU8U1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzPigmZWZmZWN0
RWxlbWVudCwgbV9wcmltaXRpdmVVbml0cywgbV90YXJnZXRCb3VuZGluZ0JveCk7Ci0gICAgICAg
ICAgICBtX2VmZmVjdEdlb21ldHJ5TWFwLmFkZCgqZWZmZWN0LCBGaWx0ZXJFZmZlY3RHZW9tZXRy
eShlZmZlY3RCb3VuZGFyaWVzLCBmbGFncykpOwotICAgICAgICB9Ci0KLSNpZiBFTkFCTEUoREVT
VElOQVRJT05fQ09MT1JfU1BBQ0VfTElORUFSX1NSR0IpCi0gICAgICAgIGlmIChjb2xvckludGVy
cG9sYXRpb25Gb3JFbGVtZW50KGVmZmVjdEVsZW1lbnQpID09IENvbG9ySW50ZXJwb2xhdGlvbjo6
TGluZWFyUkdCKQotICAgICAgICAgICAgZWZmZWN0LT5zZXRPcGVyYXRpbmdDb2xvclNwYWNlKERl
c3RpbmF0aW9uQ29sb3JTcGFjZTo6TGluZWFyU1JHQigpKTsKLSNlbmRpZgorICAgIHN0YWNrLmFw
cGVuZChlZmZlY3QpOwogCi0gICAgICAgIGlmIChhdXRvIHJlbmRlcmVyID0gZWZmZWN0RWxlbWVu
dC5yZW5kZXJlcigpKQotICAgICAgICAgICAgYXBwZW5kRWZmZWN0VG9FZmZlY3RSZW5kZXJlcigq
ZWZmZWN0LCAqcmVuZGVyZXIpOworICAgIGV4cHJlc3Npb24uYXBwZW5kKHsgZWZmZWN0LCBlZmZl
Y3RHZW9tZXRyeShlZmZlY3QpLCBsZXZlbCB9KTsKIAotICAgICAgICBhZGROYW1lZEVmZmVjdChl
ZmZlY3RFbGVtZW50LnJlc3VsdCgpLCB7ICplZmZlY3QgfSk7Ci0gICAgICAgIHNldEVmZmVjdElu
cHV0cygqZWZmZWN0LCBXVEZNb3ZlKCppbnB1dHMpKTsKKyAgICBmb3IgKGF1dG8mIGlucHV0IDog
Z3JhcGguZ2V0Tm9kZUlucHV0cyhlZmZlY3QpKSB7CisgICAgICAgIGlmICghYnVpbGRFZmZlY3Rz
RXhwcmVzc2lvbihncmFwaCwgZWZmZWN0R2VvbWV0cnlNYXAsIGlucHV0LCBzdGFjaywgbGV2ZWwg
KyAxLCBleHByZXNzaW9uKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAg
ICByZXR1cm4gbV9sYXN0RWZmZWN0OwotfQorICAgIEFTU0VSVCghc3RhY2suaXNFbXB0eSgpKTsK
KyAgICBBU1NFUlQoc3RhY2subGFzdCgpLnB0cigpID09ICZlZmZlY3QpOwogCi1GaWx0ZXJFZmZl
Y3QmIFNWR0ZpbHRlckJ1aWxkZXI6OnNvdXJjZUdyYXBoaWMoKSBjb25zdAotewotICAgIHJldHVy
biAqbV9idWlsdGluRWZmZWN0cy5nZXQoRmlsdGVyRWZmZWN0Ojpzb3VyY2VHcmFwaGljTmFtZSgp
KTsKKyAgICBzdGFjay5yZW1vdmVMYXN0KCk7CisgICAgcmV0dXJuIHRydWU7CiB9CiAKLUZpbHRl
ckVmZmVjdCYgU1ZHRmlsdGVyQnVpbGRlcjo6c291cmNlQWxwaGEoKSBjb25zdAorc3RhdGljIGJv
b2wgYnVpbGRFZmZlY3RzRXhwcmVzc2lvbihjb25zdCBTVkdGaWx0ZXJFZmZlY3RzR3JhcGgmIGdy
YXBoLCBjb25zdCBGaWx0ZXJFZmZlY3RHZW9tZXRyeU1hcCYgZWZmZWN0R2VvbWV0cnlNYXAsIFNW
R0ZpbHRlckV4cHJlc3Npb24mIGV4cHJlc3Npb24pCiB7Ci0gICAgcmV0dXJuICptX2J1aWx0aW5F
ZmZlY3RzLmdldChGaWx0ZXJFZmZlY3Q6OnNvdXJjZUFscGhhTmFtZSgpKTsKLX0KKyAgICBpZiAo
IWdyYXBoLmxhc3ROb2RlKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKIAotdm9pZCBTVkdGaWx0
ZXJCdWlsZGVyOjphZGROYW1lZEVmZmVjdChjb25zdCBBdG9tU3RyaW5nJiBpZCwgUmVmPEZpbHRl
ckVmZmVjdD4mJiBlZmZlY3QpCi17Ci0gICAgaWYgKGlkLmlzRW1wdHkoKSkgewotICAgICAgICBt
X2xhc3RFZmZlY3QgPSBXVEZNb3ZlKGVmZmVjdCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Cisg
ICAgRmlsdGVyRWZmZWN0VmVjdG9yIHN0YWNrOworICAgIGlmICghYnVpbGRFZmZlY3RzRXhwcmVz
c2lvbihncmFwaCwgZWZmZWN0R2VvbWV0cnlNYXAsICpncmFwaC5sYXN0Tm9kZSgpLCBzdGFjaywg
MCwgZXhwcmVzc2lvbikpCisgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGlmIChtX2J1aWx0
aW5FZmZlY3RzLmNvbnRhaW5zKGlkKSkKLSAgICAgICAgcmV0dXJuOworICAgIGlmIChleHByZXNz
aW9uLnNpemUoKSA+IG1heFRvdGFsTnVtYmVyRmlsdGVyRWZmZWN0cykKKyAgICAgICAgcmV0dXJu
IGZhbHNlOwogCi0gICAgbV9sYXN0RWZmZWN0ID0gV1RGTW92ZShlZmZlY3QpOwotICAgIG1fbmFt
ZWRFZmZlY3RzLnNldChpZCwgUmVmIHsgKm1fbGFzdEVmZmVjdCB9KTsKKyAgICBleHByZXNzaW9u
LnJldmVyc2UoKTsKKyAgICBleHByZXNzaW9uLnNocmlua1RvRml0KCk7CisgICAgcmV0dXJuIHRy
dWU7CiB9CiAKLVJlZlB0cjxGaWx0ZXJFZmZlY3Q+IFNWR0ZpbHRlckJ1aWxkZXI6Om5hbWVkRWZm
ZWN0KGNvbnN0IEF0b21TdHJpbmcmIGlkKSBjb25zdAorc3RkOjpvcHRpb25hbDxTVkdGaWx0ZXJF
eHByZXNzaW9uPiBTVkdGaWx0ZXJCdWlsZGVyOjpidWlsZEZpbHRlckV4cHJlc3Npb24oU1ZHRmls
dGVyRWxlbWVudCYgZmlsdGVyRWxlbWVudCkKIHsKLSAgICBpZiAoaWQuaXNFbXB0eSgpKSB7Ci0g
ICAgICAgIGlmIChtX2xhc3RFZmZlY3QpCi0gICAgICAgICAgICByZXR1cm4gbV9sYXN0RWZmZWN0
OwotCi0gICAgICAgIHJldHVybiAmc291cmNlR3JhcGhpYygpOwotICAgIH0KLQotICAgIGlmICht
X2J1aWx0aW5FZmZlY3RzLmNvbnRhaW5zKGlkKSkKLSAgICAgICAgcmV0dXJuIG1fYnVpbHRpbkVm
ZmVjdHMuZ2V0KGlkKTsKLQotICAgIHJldHVybiBtX25hbWVkRWZmZWN0cy5nZXQoaWQpOwotfQor
ICAgIGlmIChmaWx0ZXJFbGVtZW50LmNvdW50Q2hpbGROb2RlcygpID4gbWF4Q291bnRDaGlsZE5v
ZGVzKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwogCi1zdGQ6Om9wdGlvbmFsPEZpbHRl
ckVmZmVjdFZlY3Rvcj4gU1ZHRmlsdGVyQnVpbGRlcjo6bmFtZWRFZmZlY3RzKFNwYW48Y29uc3Qg
QXRvbVN0cmluZz4gbmFtZXMpIGNvbnN0Ci17Ci0gICAgRmlsdGVyRWZmZWN0VmVjdG9yIGVmZmVj
dHM7CisgICAgU1ZHRmlsdGVyRWZmZWN0c0dyYXBoIGdyYXBoKFNvdXJjZUdyYXBoaWM6OmNyZWF0
ZSgpLCBTb3VyY2VBbHBoYTo6Y3JlYXRlKCkpOworICAgIEZpbHRlckVmZmVjdEdlb21ldHJ5TWFw
IGVmZmVjdEdlb21ldHJ5TWFwOwogCi0gICAgZWZmZWN0cy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5
KG5hbWVzLnNpemUoKSk7CisgICAgZm9yIChhdXRvJiBlZmZlY3RFbGVtZW50IDogY2hpbGRyZW5P
ZlR5cGU8U1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzPihmaWx0ZXJFbGVtZW50
KSkgeworICAgICAgICBhdXRvIGlucHV0cyA9IGdyYXBoLmdldE5hbWVkTm9kZXMoZWZmZWN0RWxl
bWVudC5maWx0ZXJFZmZlY3RJbnB1dHNOYW1lcygpKTsKKyAgICAgICAgaWYgKCFpbnB1dHMpCisg
ICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwogCi0gICAgZm9yIChhdXRvJiBuYW1lIDog
bmFtZXMpIHsKLSAgICAgICAgYXV0byBlZmZlY3QgPSBuYW1lZEVmZmVjdChuYW1lKTsKKyAgICAg
ICAgYXV0byBlZmZlY3QgPSBlZmZlY3RFbGVtZW50LmZpbHRlckVmZmVjdCgqdGhpcywgKmlucHV0
cyk7CiAgICAgICAgIGlmICghZWZmZWN0KQogICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9w
dDsKIAotICAgICAgICBlZmZlY3RzLnVuY2hlY2tlZEFwcGVuZChlZmZlY3QucmVsZWFzZU5vbk51
bGwoKSk7Ci0gICAgfQorICAgICAgICBpZiAoYXV0byBmbGFncyA9IGVmZmVjdEdlb21ldHJ5Rmxh
Z3NGb3JFbGVtZW50KGVmZmVjdEVsZW1lbnQpKSB7CisgICAgICAgICAgICBhdXRvIGVmZmVjdEJv
dW5kYXJpZXMgPSBTVkdMZW5ndGhDb250ZXh0OjpyZXNvbHZlUmVjdGFuZ2xlPFNWR0ZpbHRlclBy
aW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcz4oJmVmZmVjdEVsZW1lbnQsIG1fcHJpbWl0aXZlVW5p
dHMsIG1fdGFyZ2V0Qm91bmRpbmdCb3gpOworICAgICAgICAgICAgZWZmZWN0R2VvbWV0cnlNYXAu
YWRkKCplZmZlY3QsIEZpbHRlckVmZmVjdEdlb21ldHJ5KGVmZmVjdEJvdW5kYXJpZXMsIGZsYWdz
KSk7CisgICAgICAgIH0KIAotICAgIHJldHVybiBlZmZlY3RzOwotfQorI2lmIEVOQUJMRShERVNU
SU5BVElPTl9DT0xPUl9TUEFDRV9MSU5FQVJfU1JHQikKKyAgICAgICAgaWYgKGNvbG9ySW50ZXJw
b2xhdGlvbkZvckVsZW1lbnQoZWZmZWN0RWxlbWVudCkgPT0gQ29sb3JJbnRlcnBvbGF0aW9uOjpM
aW5lYXJSR0IpCisgICAgICAgICAgICBlZmZlY3QtPnNldE9wZXJhdGluZ0NvbG9yU3BhY2UoRGVz
dGluYXRpb25Db2xvclNwYWNlOjpMaW5lYXJTUkdCKCkpOworI2VuZGlmCiAKLXZvaWQgU1ZHRmls
dGVyQnVpbGRlcjo6c2V0RWZmZWN0SW5wdXRzKEZpbHRlckVmZmVjdCYgZWZmZWN0LCBGaWx0ZXJF
ZmZlY3RWZWN0b3ImJiBpbnB1dHMpCi17Ci0gICAgbV9pbnB1dHNNYXAuc2V0KHsgZWZmZWN0IH0s
IFdURk1vdmUoaW5wdXRzKSk7Ci19CisgICAgICAgIGlmIChhdXRvIHJlbmRlcmVyID0gZWZmZWN0
RWxlbWVudC5yZW5kZXJlcigpKQorICAgICAgICAgICAgbV9lZmZlY3RSZW5kZXJlci5hZGQocmVu
ZGVyZXIsIGVmZmVjdC5nZXQoKSk7CiAKLXZvaWQgU1ZHRmlsdGVyQnVpbGRlcjo6YXBwZW5kRWZm
ZWN0VG9FZmZlY3RSZW5kZXJlcihGaWx0ZXJFZmZlY3QmIGVmZmVjdCwgUmVuZGVyT2JqZWN0JiBv
YmplY3QpCi17Ci0gICAgbV9lZmZlY3RSZW5kZXJlci5hZGQoJm9iamVjdCwgJmVmZmVjdCk7Ci19
CisgICAgICAgIGdyYXBoLmFkZE5hbWVkTm9kZShlZmZlY3RFbGVtZW50LnJlc3VsdCgpLCB7ICpl
ZmZlY3QgfSk7CisgICAgICAgIGdyYXBoLnNldE5vZGVJbnB1dHMoKmVmZmVjdCwgV1RGTW92ZSgq
aW5wdXRzKSk7CisgICAgfQogCi1zdGQ6Om9wdGlvbmFsPEZpbHRlckVmZmVjdEdlb21ldHJ5PiBT
VkdGaWx0ZXJCdWlsZGVyOjplZmZlY3RHZW9tZXRyeShGaWx0ZXJFZmZlY3QmIGVmZmVjdCkgY29u
c3QKLXsKLSAgICBhdXRvIGl0ID0gbV9lZmZlY3RHZW9tZXRyeU1hcC5maW5kKGVmZmVjdCk7Ci0g
ICAgaWYgKGl0ICE9IG1fZWZmZWN0R2VvbWV0cnlNYXAuZW5kKCkpCi0gICAgICAgIHJldHVybiBp
dC0+dmFsdWU7Ci0gICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICBTVkdGaWx0ZXJFeHByZXNz
aW9uIGV4cHJlc3Npb247CisgICAgaWYgKCFidWlsZEVmZmVjdHNFeHByZXNzaW9uKGdyYXBoLCBl
ZmZlY3RHZW9tZXRyeU1hcCwgZXhwcmVzc2lvbikpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxv
cHQ7CisKKyAgICByZXR1cm4gZXhwcmVzc2lvbjsKIH0KIAotYm9vbCBTVkdGaWx0ZXJCdWlsZGVy
OjpidWlsZEVmZmVjdEV4cHJlc3Npb24oRmlsdGVyRWZmZWN0JiBlZmZlY3QsIEZpbHRlckVmZmVj
dFZlY3RvciYgc3RhY2ssIHVuc2lnbmVkIGxldmVsLCBTVkdGaWx0ZXJFeHByZXNzaW9uJiBleHBy
ZXNzaW9uKSBjb25zdAorc3RhdGljIEludE91dHNldHMgY2FsY3VsYXRlUHJpbWl0aXZlc091dHNl
dHMoY29uc3QgU1ZHRmlsdGVyUHJpbWl0aXZlc0dyYXBoJiBncmFwaCwgU1ZHRmlsdGVyUHJpbWl0
aXZlU3RhbmRhcmRBdHRyaWJ1dGVzJiBwcmltaXRpdmUsIFZlY3RvcjxSZWY8U1ZHRmlsdGVyUHJp
bWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzPj4mIHN0YWNrLCBjb25zdCBGbG9hdFJlY3QmIHRhcmdl
dEJvdW5kaW5nQm94LCBTVkdVbml0VHlwZXM6OlNWR1VuaXRUeXBlIHByaW1pdGl2ZVVuaXRzKQog
ewogICAgIC8vIEEgY3ljbGUgaXMgZGV0ZWN0ZWQuCi0gICAgaWYgKHN0YWNrLmNvbnRhaW5zSWYo
WyZdKGF1dG8mIGl0ZW0pIHsgcmV0dXJuIGl0ZW0ucHRyKCkgPT0gJmVmZmVjdDsgfSkpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoc3RhY2suY29udGFpbnNJZihbJl0oYXV0byYgaXRl
bSkgeyByZXR1cm4gaXRlbS5wdHIoKSA9PSAmcHJpbWl0aXZlOyB9KSkKKyAgICAgICAgcmV0dXJu
IHsgfTsKIAotICAgIHN0YWNrLmFwcGVuZChlZmZlY3QpOwotICAgIAotICAgIGV4cHJlc3Npb24u
YXBwZW5kKHsgZWZmZWN0LCBlZmZlY3RHZW9tZXRyeShlZmZlY3QpLCBsZXZlbCB9KTsKKyAgICBz
dGFjay5hcHBlbmQocHJpbWl0aXZlKTsKIAotICAgIGZvciAoYXV0byYgaW5wdXQgOiBtX2lucHV0
c01hcC5nZXQoZWZmZWN0KSkgewotICAgICAgICBpZiAoIWJ1aWxkRWZmZWN0RXhwcmVzc2lvbihp
bnB1dCwgc3RhY2ssIGxldmVsICsgMSwgZXhwcmVzc2lvbikpCi0gICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgfQorICAgIEludE91dHNldHMgb3V0c2V0czsKKyAgICBmb3IgKGF1dG8mIGlu
cHV0IDogZ3JhcGguZ2V0Tm9kZUlucHV0cyhwcmltaXRpdmUpKQorICAgICAgICBvdXRzZXRzICs9
IGNhbGN1bGF0ZVByaW1pdGl2ZXNPdXRzZXRzKGdyYXBoLCBpbnB1dCwgc3RhY2ssIHRhcmdldEJv
dW5kaW5nQm94LCBwcmltaXRpdmVVbml0cyk7CisgICAgb3V0c2V0cyArPSBwcmltaXRpdmUub3V0
c2V0cyh0YXJnZXRCb3VuZGluZ0JveCwgcHJpbWl0aXZlVW5pdHMpOwogCiAgICAgQVNTRVJUKCFz
dGFjay5pc0VtcHR5KCkpOwotICAgIEFTU0VSVChzdGFjay5sYXN0KCkucHRyKCkgPT0gJmVmZmVj
dCk7CisgICAgQVNTRVJUKHN0YWNrLmxhc3QoKS5wdHIoKSA9PSAmcHJpbWl0aXZlKTsKIAogICAg
IHN0YWNrLnJlbW92ZUxhc3QoKTsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gb3V0c2V0
czsKIH0KIAotYm9vbCBTVkdGaWx0ZXJCdWlsZGVyOjpidWlsZEV4cHJlc3Npb24oU1ZHRmlsdGVy
RXhwcmVzc2lvbiYgZXhwcmVzc2lvbikgY29uc3QKK3N0YXRpYyBJbnRPdXRzZXRzIGNhbGN1bGF0
ZVByaW1pdGl2ZXNPdXRzZXRzKGNvbnN0IFNWR0ZpbHRlclByaW1pdGl2ZXNHcmFwaCYgZ3JhcGgs
IGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0Qm91bmRpbmdCb3gsIFNWR1VuaXRUeXBlczo6U1ZHVW5p
dFR5cGUgcHJpbWl0aXZlVW5pdHMpCiB7Ci0gICAgaWYgKCFtX2xhc3RFZmZlY3QpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICBpZiAoIWdyYXBoLmxhc3ROb2RlKCkpCisgICAgICAgIHJldHVy
biB7IH07CisgICAgCisgICAgVmVjdG9yPFJlZjxTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0
dHJpYnV0ZXM+PiBzdGFjazsKKyAgICByZXR1cm4gY2FsY3VsYXRlUHJpbWl0aXZlc091dHNldHMo
Z3JhcGgsICpncmFwaC5sYXN0Tm9kZSgpLCBzdGFjaywgdGFyZ2V0Qm91bmRpbmdCb3gsIHByaW1p
dGl2ZVVuaXRzKTsKK30KIAotICAgIEZpbHRlckVmZmVjdFZlY3RvciBzdGFjazsKLSAgICBpZiAo
IWJ1aWxkRWZmZWN0RXhwcmVzc2lvbigqbV9sYXN0RWZmZWN0LCBzdGFjaywgMCwgZXhwcmVzc2lv
bikpCi0gICAgICAgIHJldHVybiBmYWxzZTsKK0ludE91dHNldHMgU1ZHRmlsdGVyQnVpbGRlcjo6
Y2FsY3VsYXRlRmlsdGVyT3V0c2V0cyhTVkdGaWx0ZXJFbGVtZW50JiBmaWx0ZXJFbGVtZW50KQor
eworICAgIGlmIChmaWx0ZXJFbGVtZW50LmNvdW50Q2hpbGROb2RlcygpID4gbWF4Q291bnRDaGls
ZE5vZGVzKQorICAgICAgICByZXR1cm4geyB9OwogCi0gICAgaWYgKGV4cHJlc3Npb24uc2l6ZSgp
ID4gbWF4VG90YWxOdW1iZXJGaWx0ZXJFZmZlY3RzKQotICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgU1ZHRmlsdGVyUHJpbWl0aXZlc0dyYXBoIGdyYXBoOwogCi0gICAgZXhwcmVzc2lvbi5yZXZl
cnNlKCk7Ci0gICAgZXhwcmVzc2lvbi5zaHJpbmtUb0ZpdCgpOwotICAgIHJldHVybiB0cnVlOwor
ICAgIGZvciAoYXV0byYgZWZmZWN0RWxlbWVudCA6IGNoaWxkcmVuT2ZUeXBlPFNWR0ZpbHRlclBy
aW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcz4oZmlsdGVyRWxlbWVudCkpIHsKKyAgICAgICAgLy8g
V2Ugc2hvdWxkIG5vdCBiZSBzdHJpY3QgYWJvdXQgbm90IGZpbmRpbmcgdGhlIGlucHV0IHByaW1p
dGl2ZXMgaGVyZSBiZWNhdXNlIFNvdXJjZUdyYXBoaWMgYW5kIFNvdXJjZUFscGhhIGRvIG5vdCBo
YXZlIHByaW1pdGl2ZXMuCisgICAgICAgIGF1dG8gaW5wdXRzID0gZ3JhcGguZ2V0TmFtZWROb2Rl
cyhlZmZlY3RFbGVtZW50LmZpbHRlckVmZmVjdElucHV0c05hbWVzKCkpLnZhbHVlX29yKFNWR0Zp
bHRlclByaW1pdGl2ZXNHcmFwaDo6Tm9kZVZlY3RvcigpKTsKKyAgICAgICAgZ3JhcGguYWRkTmFt
ZWROb2RlKGVmZmVjdEVsZW1lbnQucmVzdWx0KCksIHsgZWZmZWN0RWxlbWVudCB9KTsKKyAgICAg
ICAgZ3JhcGguc2V0Tm9kZUlucHV0cyhlZmZlY3RFbGVtZW50LCBXVEZNb3ZlKGlucHV0cykpOwor
ICAgIH0KKworICAgIHJldHVybiBjYWxjdWxhdGVQcmltaXRpdmVzT3V0c2V0cyhncmFwaCwgbV90
YXJnZXRCb3VuZGluZ0JveCwgbV9wcmltaXRpdmVVbml0cyk7CiB9CiAKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJz
L1NWR0ZpbHRlckJ1aWxkZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJz
L1NWR0ZpbHRlckJ1aWxkZXIuaAppbmRleCBjOTkxMDJlNzBiZTA0MjM0ZGQ2YjI2MzM4YWUzMDE5
MDVlNjEwMWMxLi5iMWQ4M2FiNDMyNWRjZDZiNGE0OGY3MTY0MjdkZTU2MTJmYjhkZGE3IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXJCdWls
ZGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVy
QnVpbGRlci5oCkBAIC0zOCw0NSArMzgsMjEgQEAgY2xhc3MgU1ZHRmlsdGVyRWxlbWVudDsKIGNs
YXNzIFNWR0ZpbHRlckJ1aWxkZXIgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVi
bGljOgotICAgIFNWR0ZpbHRlckJ1aWxkZXIoKSA9IGRlZmF1bHQ7CisgICAgU1ZHRmlsdGVyQnVp
bGRlcihjb25zdCBGbG9hdFJlY3QmIHRhcmdldEJvdW5kaW5nQm94LCBTVkdVbml0VHlwZXM6OlNW
R1VuaXRUeXBlIHByaW1pdGl2ZVVuaXRzID0gU1ZHVW5pdFR5cGVzOjpTVkdfVU5JVF9UWVBFX1VT
RVJTUEFDRU9OVVNFKTsKIAotICAgIHZvaWQgc2V0VGFyZ2V0Qm91bmRpbmdCb3goY29uc3QgRmxv
YXRSZWN0JiByKSB7IG1fdGFyZ2V0Qm91bmRpbmdCb3ggPSByOyB9CiAgICAgRmxvYXRSZWN0IHRh
cmdldEJvdW5kaW5nQm94KCkgY29uc3QgeyByZXR1cm4gbV90YXJnZXRCb3VuZGluZ0JveDsgfQot
ICAgIAogICAgIFNWR1VuaXRUeXBlczo6U1ZHVW5pdFR5cGUgcHJpbWl0aXZlVW5pdHMoKSBjb25z
dCB7IHJldHVybiBtX3ByaW1pdGl2ZVVuaXRzOyB9Ci0gICAgdm9pZCBzZXRQcmltaXRpdmVVbml0
cyhTVkdVbml0VHlwZXM6OlNWR1VuaXRUeXBlIHVuaXRzKSB7IG1fcHJpbWl0aXZlVW5pdHMgPSB1
bml0czsgfQogCi0gICAgLy8gUmVxdWlyZWQgdG8gY2hhbmdlIHRoZSBhdHRyaWJ1dGVzIG9mIGEg
ZmlsdGVyIGR1cmluZyBhbiBzdmdBdHRyaWJ1dGVDaGFuZ2VkLgotICAgIHZvaWQgYXBwZW5kRWZm
ZWN0VG9FZmZlY3RSZW5kZXJlcihGaWx0ZXJFZmZlY3QmLCBSZW5kZXJPYmplY3QmKTsKLSAgICBp
bmxpbmUgRmlsdGVyRWZmZWN0KiBlZmZlY3RCeVJlbmRlcmVyKFJlbmRlck9iamVjdCogb2JqZWN0
KSB7IHJldHVybiBtX2VmZmVjdFJlbmRlcmVyLmdldChvYmplY3QpOyB9CisgICAgc3RkOjpvcHRp
b25hbDxTVkdGaWx0ZXJFeHByZXNzaW9uPiBidWlsZEZpbHRlckV4cHJlc3Npb24oU1ZHRmlsdGVy
RWxlbWVudCYpOworICAgIEludE91dHNldHMgY2FsY3VsYXRlRmlsdGVyT3V0c2V0cyhTVkdGaWx0
ZXJFbGVtZW50Jik7CiAKLSAgICB2b2lkIHNldHVwQnVpbHRpbkVmZmVjdHMoUmVmPEZpbHRlckVm
ZmVjdD4gc291cmNlR3JhcGhpYyk7Ci0gICAgUmVmUHRyPEZpbHRlckVmZmVjdD4gYnVpbGRGaWx0
ZXJFZmZlY3RzKFNWR0ZpbHRlckVsZW1lbnQmKTsKLSAgICBib29sIGJ1aWxkRXhwcmVzc2lvbihT
VkdGaWx0ZXJFeHByZXNzaW9uJikgY29uc3Q7CisgICAgLy8gUmVxdWlyZWQgdG8gY2hhbmdlIHRo
ZSBhdHRyaWJ1dGVzIG9mIGEgZmlsdGVyIGR1cmluZyBhbiBzdmdBdHRyaWJ1dGVDaGFuZ2VkLgor
ICAgIEZpbHRlckVmZmVjdCogZWZmZWN0QnlSZW5kZXJlcihSZW5kZXJPYmplY3QqIG9iamVjdCkg
eyByZXR1cm4gbV9lZmZlY3RSZW5kZXJlci5nZXQob2JqZWN0KTsgfQogCiBwcml2YXRlOgotICAg
IEZpbHRlckVmZmVjdCYgc291cmNlR3JhcGhpYygpIGNvbnN0OwotICAgIEZpbHRlckVmZmVjdCYg
c291cmNlQWxwaGEoKSBjb25zdDsKLQotICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IG5hbWVkRWZm
ZWN0KGNvbnN0IEF0b21TdHJpbmcmKSBjb25zdDsKLSAgICBzdGQ6Om9wdGlvbmFsPEZpbHRlckVm
ZmVjdFZlY3Rvcj4gbmFtZWRFZmZlY3RzKFNwYW48Y29uc3QgQXRvbVN0cmluZz4pIGNvbnN0Owot
Ci0gICAgdm9pZCBhZGROYW1lZEVmZmVjdChjb25zdCBBdG9tU3RyaW5nJiBpZCwgUmVmPEZpbHRl
ckVmZmVjdD4mJik7Ci0gICAgdm9pZCBzZXRFZmZlY3RJbnB1dHMoRmlsdGVyRWZmZWN0JiwgRmls
dGVyRWZmZWN0VmVjdG9yJiYgaW5wdXRzKTsKLQotICAgIHN0ZDo6b3B0aW9uYWw8RmlsdGVyRWZm
ZWN0R2VvbWV0cnk+IGVmZmVjdEdlb21ldHJ5KEZpbHRlckVmZmVjdCYpIGNvbnN0OwotICAgIGJv
b2wgYnVpbGRFZmZlY3RFeHByZXNzaW9uKEZpbHRlckVmZmVjdCYsIEZpbHRlckVmZmVjdFZlY3Rv
ciYgc3RhY2ssIHVuc2lnbmVkIGxldmVsLCBTVkdGaWx0ZXJFeHByZXNzaW9uJikgY29uc3Q7Ci0K
LSAgICBIYXNoTWFwPEF0b21TdHJpbmcsIFJlZjxGaWx0ZXJFZmZlY3Q+PiBtX2J1aWx0aW5FZmZl
Y3RzOwotICAgIEhhc2hNYXA8QXRvbVN0cmluZywgUmVmPEZpbHRlckVmZmVjdD4+IG1fbmFtZWRF
ZmZlY3RzOwogICAgIEhhc2hNYXA8UmVuZGVyT2JqZWN0KiwgRmlsdGVyRWZmZWN0Kj4gbV9lZmZl
Y3RSZW5kZXJlcjsKLSAgICBIYXNoTWFwPFJlZjxGaWx0ZXJFZmZlY3Q+LCBGaWx0ZXJFZmZlY3RW
ZWN0b3I+IG1faW5wdXRzTWFwOwotCi0gICAgUmVmUHRyPEZpbHRlckVmZmVjdD4gbV9sYXN0RWZm
ZWN0OwotCiAgICAgRmxvYXRSZWN0IG1fdGFyZ2V0Qm91bmRpbmdCb3g7CiAgICAgU1ZHVW5pdFR5
cGVzOjpTVkdVbml0VHlwZSBtX3ByaW1pdGl2ZVVuaXRzIHsgU1ZHVW5pdFR5cGVzOjpTVkdfVU5J
VF9UWVBFX1VTRVJTUEFDRU9OVVNFIH07Ci0gICAgRmlsdGVyRWZmZWN0R2VvbWV0cnlNYXAgbV9l
ZmZlY3RHZW9tZXRyeU1hcDsKIH07CiAgICAgCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXJHcmFw
aC5oIGIvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyR3JhcGgu
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi5iNTYxNWRjNThmZDIwZDVmOGRmYzllM2EzNzBmMWNhYWI5YmY0NGZmCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZH
RmlsdGVyR3JhcGguaApAQCAtMCwwICsxLDEyOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAy
MiBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIlNvdXJjZUFs
cGhhLmgiCisjaW5jbHVkZSAiU291cmNlR3JhcGhpYy5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK2NsYXNzIEZpbHRlckVmZmVjdDsKK2NsYXNzIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJk
QXR0cmlidXRlczsKKwordGVtcGxhdGU8dHlwZW5hbWUgTm9kZVR5cGU+CitjbGFzcyBTVkdGaWx0
ZXJHcmFwaCB7CitwdWJsaWM6CisgICAgdXNpbmcgTm9kZVZlY3RvciA9IFZlY3RvcjxSZWY8Tm9k
ZVR5cGU+PjsKKworICAgIFNWR0ZpbHRlckdyYXBoKCkgPSBkZWZhdWx0OworCisgICAgU1ZHRmls
dGVyR3JhcGgoUmVmPE5vZGVUeXBlPiYmIHNvdXJjZUdyYXBoaWMsIFJlZjxOb2RlVHlwZT4mJiBz
b3VyY2VBbHBoYSkKKyAgICB7CisgICAgICAgIG1fYnVpbHRpbk5vZGVzLmFkZChTb3VyY2VHcmFw
aGljOjplZmZlY3ROYW1lKCksIFdURk1vdmUoc291cmNlR3JhcGhpYykpOworICAgICAgICBtX2J1
aWx0aW5Ob2Rlcy5hZGQoU291cmNlQWxwaGE6OmVmZmVjdE5hbWUoKSwgV1RGTW92ZShzb3VyY2VB
bHBoYSkpOworCisgICAgICAgIHNldE5vZGVJbnB1dHMoKnRoaXMtPnNvdXJjZUFscGhhKCksIE5v
ZGVWZWN0b3IgeyAqdGhpcy0+c291cmNlR3JhcGhpYygpIH0pOworICAgIH0KKworICAgIE5vZGVU
eXBlKiBzb3VyY2VHcmFwaGljKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2J1aWx0
aW5Ob2Rlcy5nZXQoRmlsdGVyRWZmZWN0Ojpzb3VyY2VHcmFwaGljTmFtZSgpKTsKKyAgICB9CisK
KyAgICBOb2RlVHlwZSogc291cmNlQWxwaGEoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJu
IG1fYnVpbHRpbk5vZGVzLmdldChGaWx0ZXJFZmZlY3Q6OnNvdXJjZUFscGhhTmFtZSgpKTsKKyAg
ICB9CisKKyAgICB2b2lkIGFkZE5hbWVkTm9kZShjb25zdCBBdG9tU3RyaW5nJiBpZCwgUmVmPE5v
ZGVUeXBlPiYmIG5vZGUpCisgICAgeworICAgICAgICBpZiAoaWQuaXNFbXB0eSgpKSB7CisgICAg
ICAgICAgICBtX2xhc3ROb2RlID0gV1RGTW92ZShub2RlKTsKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgfQorCisgICAgICAgIGlmIChtX2J1aWx0aW5Ob2Rlcy5jb250YWlucyhpZCkpCisg
ICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgbV9sYXN0Tm9kZSA9IFdURk1vdmUobm9kZSk7
CisgICAgICAgIG1fbmFtZWROb2Rlcy5zZXQoaWQsIFJlZiB7ICptX2xhc3ROb2RlIH0pOworICAg
IH0KKworICAgIFJlZlB0cjxOb2RlVHlwZT4gZ2V0TmFtZWROb2RlKGNvbnN0IEF0b21TdHJpbmcm
IGlkKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKGlkLmlzRW1wdHkoKSkgeworICAgICAgICAg
ICAgaWYgKG1fbGFzdE5vZGUpCisgICAgICAgICAgICAgICAgcmV0dXJuIG1fbGFzdE5vZGU7CisK
KyAgICAgICAgICAgIHJldHVybiBzb3VyY2VHcmFwaGljKCk7CisgICAgICAgIH0KKworICAgICAg
ICBpZiAobV9idWlsdGluTm9kZXMuY29udGFpbnMoaWQpKQorICAgICAgICAgICAgcmV0dXJuIG1f
YnVpbHRpbk5vZGVzLmdldChpZCk7CisKKyAgICAgICAgcmV0dXJuIG1fbmFtZWROb2Rlcy5nZXQo
aWQpOworICAgIH0KKworICAgIHN0ZDo6b3B0aW9uYWw8Tm9kZVZlY3Rvcj4gZ2V0TmFtZWROb2Rl
cyhTcGFuPGNvbnN0IEF0b21TdHJpbmc+IG5hbWVzKSBjb25zdAorICAgIHsKKyAgICAgICAgTm9k
ZVZlY3RvciBub2RlczsKKworICAgICAgICBub2Rlcy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KG5h
bWVzLnNpemUoKSk7CisKKyAgICAgICAgZm9yIChhdXRvJiBuYW1lIDogbmFtZXMpIHsKKyAgICAg
ICAgICAgIGF1dG8gbm9kZSA9IGdldE5hbWVkTm9kZShuYW1lKTsKKyAgICAgICAgICAgIGlmICgh
bm9kZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgICAgICAg
ICBub2Rlcy51bmNoZWNrZWRBcHBlbmQobm9kZS5yZWxlYXNlTm9uTnVsbCgpKTsKKyAgICAgICAg
fQorCisgICAgICAgIHJldHVybiBub2RlczsKKyAgICB9CisKKyAgICB2b2lkIHNldE5vZGVJbnB1
dHMoTm9kZVR5cGUmIG5vZGUsIE5vZGVWZWN0b3ImJiBpbnB1dHMpCisgICAgeworICAgICAgICBt
X25vZGVJbnB1dHMuc2V0KHsgbm9kZSB9LCBXVEZNb3ZlKGlucHV0cykpOworICAgIH0KKworICAg
IE5vZGVWZWN0b3IgZ2V0Tm9kZUlucHV0cyhOb2RlVHlwZSYgbm9kZSkgY29uc3QKKyAgICB7Cisg
ICAgICAgIHJldHVybiBtX25vZGVJbnB1dHMuZ2V0KG5vZGUpOworICAgIH0KKworICAgIE5vZGVU
eXBlKiBsYXN0Tm9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fbGFzdE5vZGUuZ2V0KCk7IH0KKworcHJp
dmF0ZToKKyAgICBIYXNoTWFwPEF0b21TdHJpbmcsIFJlZjxOb2RlVHlwZT4+IG1fYnVpbHRpbk5v
ZGVzOworICAgIEhhc2hNYXA8QXRvbVN0cmluZywgUmVmPE5vZGVUeXBlPj4gbV9uYW1lZE5vZGVz
OworICAgIEhhc2hNYXA8UmVmPE5vZGVUeXBlPiwgTm9kZVZlY3Rvcj4gbV9ub2RlSW5wdXRzOwor
ICAgIFJlZlB0cjxOb2RlVHlwZT4gbV9sYXN0Tm9kZTsKK307CisKK3VzaW5nIFNWR0ZpbHRlckVm
ZmVjdHNHcmFwaCA9IFNWR0ZpbHRlckdyYXBoPEZpbHRlckVmZmVjdD47Cit1c2luZyBTVkdGaWx0
ZXJQcmltaXRpdmVzR3JhcGggPSBTVkdGaWx0ZXJHcmFwaDxTVkdGaWx0ZXJQcmltaXRpdmVTdGFu
ZGFyZEF0dHJpYnV0ZXM+OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCg==
</data>
<flag name="commit-queue"
          id="484110"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>455965</attachid>
            <date>2022-03-28 16:09:17 -0700</date>
            <delta_ts>2022-03-29 00:21:22 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-236574-20220328160916.patch</filename>
            <type>text/plain</type>
            <size>65559</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjkxOTQ4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNzMxNGY1M2YzNjY2NDJk
MmVmZmRhOTRmYTljNzhkZjM0MzQ2NWI5ZS4uMTFkMjliNzUxOWU4MzEwZWM4ODUzZTY3YTdiY2Y5
YjFlMzRiMTc4NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzMiBAQAorMjAyMi0wMy0yOCAgU2Fp
ZCBBYm91LUhhbGxhd2EgIDxzYWlkQGFwcGxlLmNvbT4KKworICAgICAgICBbR1BVIFByb2Nlc3Nd
IENTU0ZpbHRlciBzaG91bGQgYmUgY3JlYXRlZCBvbmx5IGF0IHRoZSBwYWludGluZyB0aW1lCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzY1NzQKKyAg
ICAgICAgcmRhcjovLzg5MjEwMDA0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgSW5zdGVhZCBvZiBidWlsZGluZyB0aGUgd2hvbGUgZmlsdGVyIGNoYWlu
IHRvIGdldCB0aGUgZmlsdGVyIG91dHNldHMgYXQgCisgICAgICAgIHRoZSBsYXlvdXQgdGltZSwg
d2UgY2FuIHVzZSB0aGUgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzIGFuZAor
ICAgICAgICB0aGUgRmlsdGVyT3BlcmF0aW9uIHN1cGVyIGNsYXNzZXMgdG8gZ2V0IHRoZWlyIG91
dHNldHMgd2l0aG91dCBoYXZpbmcgdG8KKyAgICAgICAgYnVpbGQgdGhlIEZpbHRlckVmZmVjdHMu
CisKKyAgICAgICAgQ1NTRmlsdGVyOjpjYWxjdWxhdGVPdXRzZXRzKCkgaXMgYSBzdGF0aWMgbWV0
aG9kIHdoaWNoIHdpbGwgbG9vcCB0aHJvdWdoCisgICAgICAgIHRoZSBGaWx0ZXJPcGVyYXRpb25z
IGFuZCB3aWxsIGFkZCB1cCB0aGUgb3V0c2V0cyBvZiB0aGUgYmx1ciwgdGhlIGRyb3AtCisgICAg
ICAgIHNoYWRvdyBhbmQgdGhlIHJlZmVyZW5jZSBGaWx0ZXJPcGVyYXRpb24uCisKKyAgICAgICAg
U1ZHRmlsdGVyQnVpbGRlcjo6Y2FsY3VsYXRlRmlsdGVyT3V0c2V0cygpIHdpbGwgbG9vcCB0aHJv
dWdoIHRoZSBwcmltaXRpdmVzCisgICAgICAgIG9mIHRoZSBmaWx0ZXIgZWxlbWVudCBhbmQgd2ls
bCBjYWxsIHRoZSBuZXcgdmlydHVhbCBtZXRob2Qgb3V0c2V0cygpIHdoaWNoCisgICAgICAgIHdp
bGwgY2FsbCBhIHN0YXRpYyBtZXRob2QgaW4gdGhlIGNvcnJlc3BvbmRpbmcgRmlsdGVyRWZmZWN0
LgorCisgICAgICAgIEZFRHJvcFNoYWRvdywgRkVHYXVzc2lhbkJsdXIgYW5kIEZFT2Zmc2V0IHdp
bGwgYmUgcHJvdmlkZSBzdGF0aWMgbWV0aG9kcworICAgICAgICBmb3IgY2FsY3VsYXRpbmcgdGhl
IGVmZmVjdCBvdXRzZXRzLiBUaGVzZSBzdGF0aWMgbWV0aG9kcyB3aWxsIGJlIGNhbGxlZCAKKyAg
ICAgICAgZnJvbSBDU1NGaWx0ZXI6OmNhbGN1bGF0ZU91dHNldHMoKSBhbmQgZnJvbSB0aGUgU1ZH
RkV4eHhFbGVtZW50cy4KKworICAgICAgICBUbyByZW1vdmUgdGhlIGR1cGxpY2F0aW9uIG9mIHRo
ZSBjb2RlIGZyb20gU1ZHRmlsdGVyQnVpbGRlcjo6CisgICAgICAgIGJ1aWxkRmlsdGVyRWZmZWN0
cygpIGFuZCBjYWxjdWxhdGVGaWx0ZXJPdXRzZXRzKCksIGEgbmV3IHRlbXBsYXRlIGNsYXNzCisg
ICAgICAgIG5hbWVkIFNWR0ZpbHRlckdyYXBoIHdpbGwgYmUgaW50cm9kdWNlZC4gSXQgcmVwcmVz
ZW50cyB0aGUgZ3JhcGggb2YgdGhlCisgICAgICAgIFNWR0ZpbHRlci4gVGhlIG5vZGVzIG9mICB0
aGlzIGdyYXBoIHdpbGwgYmUgb2YgdHlwZSBGaWx0ZXJFZmZlY2N0IHdoZW4KKyAgICAgICAgaXQg
aXMgdXNlZCB0byBidWlsZCB0aGUgU1ZHRmlsdGVyRXhwcmVzc2lvbi4gVGhlIG5vZGVzIHdpbGwg
YmUgb2YgdHlwZQorICAgICAgICBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXMg
d2hlbiBpdCBpcyB1c2VkIHRvIGNhbGN1bGF0ZSB0aGUKKyAgICAgICAgZmlsdGVyIG91dHNldHMu
CisKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURyb3BTaGFkb3cuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6RkVEcm9wU2hhZG93OjpjYWxjdWxhdGVPdXRzZXRzKToKKyAgICAgICAgKFdlYkNv
cmU6OkZFRHJvcFNoYWRvdzo6b3V0c2V0cyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURyb3BTaGFkb3cuaDoKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFR2F1c3NpYW5CbHVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkZFR2F1c3NpYW5CbHVyOjpjYWxjdWxhdGVPdXRzZXRzKToKKyAgICAgICAgKFdlYkNvcmU6OkZF
R2F1c3NpYW5CbHVyOjpvdXRzZXRzIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFR2F1c3NpYW5CbHVyLmg6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRU9mZnNldC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRU9mZnNl
dDo6Y2FsY3VsYXRlT3V0c2V0cyk6CisgICAgICAgIChXZWJDb3JlOjpGRU9mZnNldDo6b3V0c2V0
cyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RU9mZnNldC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyLmg6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJGdW5jdGlvbi5oOgor
ICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OmFwcGx5KToKKyAgICAgICAgKFdlYkNv
cmU6OkZpbHRlckZ1bmN0aW9uOjpvdXRzZXRzIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBy
ZW5kZXJpbmcvQ1NTRmlsdGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNhbGN1bGF0ZUJsdXJF
ZmZlY3RPdXRzZXRzKToKKyAgICAgICAgKFdlYkNvcmU6OmNhbGN1bGF0ZURyb3BTaGFkb3dFZmZl
Y3RPdXRzZXRzKToKKyAgICAgICAgKFdlYkNvcmU6OnJlZmVyZW5jZUZpbHRlckVsZW1lbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6Y2FsY3VsYXRlUmVmZXJlbmNlRmlsdGVyT3V0c2V0cyk6CisgICAg
ICAgIChXZWJDb3JlOjpjcmVhdGVSZWZlcmVuY2VGaWx0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6
Q1NTRmlsdGVyOjpidWlsZEZpbHRlckZ1bmN0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpDU1NG
aWx0ZXI6OmNhbGN1bGF0ZU91dHNldHMpOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlU1ZHRmls
dGVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6b3V0c2V0cyBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgICogcmVuZGVyaW5nL0NTU0ZpbHRlci5oOgorICAgICAgICAq
IHJlbmRlcmluZy9SZW5kZXJMYXllci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXll
cjo6ZmlsdGVyc0ZvclBhaW50aW5nIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxh
eWVyOjpjYWxjdWxhdGVDbGlwUmVjdHMgY29uc3QpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5k
ZXJMYXllckZpbHRlcnMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJGaWx0ZXJz
OjpjYWxjdWxhdGVPdXRzZXRzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyRmlsdGVy
czo6YmVnaW5GaWx0ZXJFZmZlY3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJGaWx0
ZXJzOjpzZXRGaWx0ZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJG
aWx0ZXJzOjpidWlsZEZpbHRlcik6IERlbGV0ZWQuCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRl
ckxheWVyRmlsdGVycy5oOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3Vy
Y2VGaWx0ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXI6
OmFwcGx5UmVzb3VyY2UpOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvU1ZHUmVuZGVyVHJlZUFz
VGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjp3cml0ZVNWR1Jlc291cmNlQ29udGFpbmVyKToK
KyAgICAgICAgKiBzdmcvU1ZHRkVEcm9wU2hhZG93RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpTVkdGRURyb3BTaGFkb3dFbGVtZW50OjpvdXRzZXRzIGNvbnN0KToKKyAgICAgICAgKiBz
dmcvU1ZHRkVEcm9wU2hhZG93RWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdGRUdhdXNzaWFu
Qmx1ckVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVHYXVzc2lhbkJsdXJFbGVt
ZW50OjpvdXRzZXRzIGNvbnN0KToKKyAgICAgICAgKiBzdmcvU1ZHRkVHYXVzc2lhbkJsdXJFbGVt
ZW50Lmg6CisgICAgICAgICogc3ZnL1NWR0ZFT2Zmc2V0RWxlbWVudC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpTVkdGRU9mZnNldEVsZW1lbnQ6Om91dHNldHMgY29uc3QpOgorICAgICAgICAqIHN2
Zy9TVkdGRU9mZnNldEVsZW1lbnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHRmlsdGVyUHJpbWl0aXZl
U3RhbmRhcmRBdHRyaWJ1dGVzLmg6CisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0ZXJQcmltaXRp
dmVTdGFuZGFyZEF0dHJpYnV0ZXM6Om91dHNldHMgY29uc3QpOgorICAgICAgICAqIHN2Zy9ncmFw
aGljcy9maWx0ZXJzL1NWR0ZpbHRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0ZXI6
OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0ZXI6OmNhbGN1bGF0ZVJlc29sdmVk
U2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0ZXI6OnJlc29sdmVkU2l6ZSBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0ZXI6Om91dHNldHMgY29uc3QpOiBEZWxldGVkLgor
ICAgICAgICAqIHN2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlci5oOgorICAgICAgICAqIHN2
Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlckJ1aWxkZXIuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6U1ZHRmlsdGVyQnVpbGRlcjo6U1ZHRmlsdGVyQnVpbGRlcik6CisgICAgICAgIChXZWJDb3Jl
OjphcHBlbmRFZmZlY3RUb0V4cHJlc3Npb24pOgorICAgICAgICAoV2ViQ29yZTo6YXBwZW5kR3Jh
cGhUb0V4cHJlc3Npb24pOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRmlsdGVyQnVpbGRlcjo6YnVp
bGRGaWx0ZXJFeHByZXNzaW9uKToKKyAgICAgICAgKFdlYkNvcmU6OmNhbGN1bGF0ZVByaW1pdGl2
ZU91dHNldHMpOgorICAgICAgICAoV2ViQ29yZTo6Y2FsY3VsYXRlR3JhcGhPdXRzZXRzKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNWR0ZpbHRlckJ1aWxkZXI6OmNhbGN1bGF0ZUZpbHRlck91dHNldHMp
OgorICAgICAgICAoV2ViQ29yZTo6U1ZHRmlsdGVyQnVpbGRlcjo6c2V0dXBCdWlsdGluRWZmZWN0
cyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0ZXJCdWlsZGVyOjpidWlsZEZp
bHRlckVmZmVjdHMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U1ZHRmlsdGVyQnVpbGRl
cjo6c291cmNlR3JhcGhpYyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTVkdG
aWx0ZXJCdWlsZGVyOjpzb3VyY2VBbHBoYSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpTVkdGaWx0ZXJCdWlsZGVyOjphZGROYW1lZEVmZmVjdCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpTVkdGaWx0ZXJCdWlsZGVyOjpuYW1lZEVmZmVjdCBjb25zdCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0ZXJCdWlsZGVyOjpuYW1lZEVmZmVjdHMgY29uc3Qp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U1ZHRmlsdGVyQnVpbGRlcjo6c2V0RWZmZWN0
SW5wdXRzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZpbHRlckJ1aWxkZXI6OmFw
cGVuZEVmZmVjdFRvRWZmZWN0UmVuZGVyZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
U1ZHRmlsdGVyQnVpbGRlcjo6ZWZmZWN0R2VvbWV0cnkgY29uc3QpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6U1ZHRmlsdGVyQnVpbGRlcjo6YnVpbGRFZmZlY3RFeHByZXNzaW9uIGNvbnN0
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZpbHRlckJ1aWxkZXI6OmJ1aWxkRXhw
cmVzc2lvbiBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogc3ZnL2dyYXBoaWNzL2ZpbHRlcnMv
U1ZHRmlsdGVyQnVpbGRlci5oOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRmlsdGVyQnVpbGRlcjo6
dGFyZ2V0Qm91bmRpbmdCb3ggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRmlsdGVyQnVp
bGRlcjo6cHJpbWl0aXZlVW5pdHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRmlsdGVy
QnVpbGRlcjo6ZWZmZWN0QnlSZW5kZXJlcik6CisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0ZXJC
dWlsZGVyOjpzZXRUYXJnZXRCb3VuZGluZ0JveCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpTVkdGaWx0ZXJCdWlsZGVyOjpzZXRQcmltaXRpdmVVbml0cyk6IERlbGV0ZWQuCisgICAgICAg
ICogc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyRXhwcmVzc2lvbi5oOgorICAgICAgICAq
IHN2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlckdyYXBoLmg6IEFkZGVkLgorICAgICAgICAo
V2ViQ29yZTo6U1ZHRmlsdGVyR3JhcGg6OlNWR0ZpbHRlckdyYXBoKToKKyAgICAgICAgKFdlYkNv
cmU6OlNWR0ZpbHRlckdyYXBoOjpzb3VyY2VHcmFwaGljIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OlNWR0ZpbHRlckdyYXBoOjpzb3VyY2VBbHBoYSBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpTVkdGaWx0ZXJHcmFwaDo6YWRkTmFtZWROb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0Zp
bHRlckdyYXBoOjpnZXROYW1lZE5vZGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRmls
dGVyR3JhcGg6OmdldE5hbWVkTm9kZXMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRmls
dGVyR3JhcGg6OnNldE5vZGVJbnB1dHMpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRmlsdGVyR3Jh
cGg6OmdldE5vZGVJbnB1dHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRmlsdGVyR3Jh
cGg6Omxhc3ROb2RlIGNvbnN0KToKKwogMjAyMi0wMy0yNiAgWXVzdWtlIFN1enVraSAgPHlzdXp1
a2lAYXBwbGUuY29tPgogCiAgICAgICAgIFVzZSBzdGF0aWNfYXNzZXJ0IGluc3RlYWQgb2YgQ09N
UElMRV9BU1NFUlQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagppbmRleCA1YWI5MzIxYjUyYWJlMmQ5OGFjMzAyMmJhY2NhMjhiYzY1YmVlM2Vm
Li4yZWFlNTZiNzUxN2VmZDc2MDBlM2FlNGRkYzcxMWVlMmE5ZGFhYmQ4IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0xMTQ1NSw2
ICsxMTQ1NSw3IEBACiAJCTcyRjFBREEzMUEzOTBCOUYwMDAxNEUxOCAvKiBKU0VYVEZyYWdEZXB0
aC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0VYVEZyYWdEZXB0
aC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyRjFBREE0MUEzOTBCOUYwMDAx
NEUxOCAvKiBKU0VYVEZyYWdEZXB0aC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBKU0VYVEZyYWdEZXB0aC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MkY2NjdE
RjI2MEMyNjQ0MDBFRTM2QUQgLyogRGlhZ25vc3RpY0xvZ2dpbmdEb21haW4uaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gRGlhZ25vc3RpY0xvZ2dpbmdEb21haW4uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJNzJGN0EwODAyN0YxNzFCRjAwMDhFRUU4IC8qIFNWR0ZpbHRlckdyYXBoLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFNWR0ZpbHRlckdyYXBoLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTcyRjdFNzQyMjc5QjhGNzQwMEQ4MkQyRCAvKiBTb3VyY2VJbWFnZS5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTb3VyY2VJbWFnZS5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTcyRjdFNzQ0Mjc5QjhGNzQwMEQ4MkQyRCAvKiBTb3VyY2VJbWFnZS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTb3VyY2VJbWFnZS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk3MkY3RTc0RTI3OUNFREU4MDBEODJEMkQgLyogRkVJbWFn
ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGRUltYWdlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKQEAgLTI4ODc2LDYgKzI4ODc3LDcgQEAKIAkJCQkwODFFQkYzODBGRDM0RjQxMDBE
QTc1NTkgLyogU1ZHRmlsdGVyQnVpbGRlci5jcHAgKi8sCiAJCQkJMDgxRUJGMzkwRkQzNEY0MTAw
REE3NTU5IC8qIFNWR0ZpbHRlckJ1aWxkZXIuaCAqLywKIAkJCQk3MjZDREUyNTI3NUI0ODk3MDBB
NDQ1QjIgLyogU1ZHRmlsdGVyRXhwcmVzc2lvbi5oICovLAorCQkJCTcyRjdBMDgwMjdGMTcxQkYw
MDA4RUVFOCAvKiBTVkdGaWx0ZXJHcmFwaC5oICovLAogCQkJKTsKIAkJCXBhdGggPSBmaWx0ZXJz
OwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEcm9wU2hhZG93LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEcm9wU2hhZG93LmNwcAppbmRleCAxNzMz
OTA4NGU2OWUwZGMwZGRhZTZmMmQ3NzM0ZjFlZDEzYzVhZWJlLi42MWQ5NzcyMWUyZDA5ZTg1Njg0
M2E3NDMzNGRiNDI4YWU3NzI1ZTk4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFRHJvcFNoYWRvdy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURyb3BTaGFkb3cuY3BwCkBAIC02MSwxNCArNjEs
MTQgQEAgRmxvYXRSZWN0IEZFRHJvcFNoYWRvdzo6Y2FsY3VsYXRlSW1hZ2VSZWN0KGNvbnN0IEZp
bHRlciYgZmlsdGVyLCBjb25zdCBGaWx0ZXJJbWEKICAgICByZXR1cm4gZmlsdGVyLmNsaXBUb01h
eEVmZmVjdFJlY3QoaW1hZ2VSZWN0LCBwcmltaXRpdmVTdWJyZWdpb24pOwogfQogCi1JbnRPdXRz
ZXRzIEZFRHJvcFNoYWRvdzo6b3V0c2V0cyhjb25zdCBGaWx0ZXImKSBjb25zdAorSW50T3V0c2V0
cyBGRURyb3BTaGFkb3c6OmNhbGN1bGF0ZU91dHNldHMoY29uc3QgRmxvYXRTaXplJiBvZmZzZXQs
IGNvbnN0IEZsb2F0U2l6ZSYgc3RkRGV2aWF0aW9uKQogewotICAgIEludFNpemUgb3V0c2V0U2l6
ZSA9IEZFR2F1c3NpYW5CbHVyOjpjYWxjdWxhdGVPdXRzZXRTaXplKHsgbV9zdGRYLCBtX3N0ZFkg
fSk7CisgICAgSW50U2l6ZSBvdXRzZXRTaXplID0gRkVHYXVzc2lhbkJsdXI6OmNhbGN1bGF0ZU91
dHNldFNpemUoc3RkRGV2aWF0aW9uKTsKIAotICAgIGludCB0b3AgPSBzdGQ6Om1heDxpbnQ+KDAs
IG91dHNldFNpemUuaGVpZ2h0KCkgLSBtX2R5KTsKLSAgICBpbnQgcmlnaHQgPSBzdGQ6Om1heDxp
bnQ+KDAsIG91dHNldFNpemUud2lkdGgoKSArIG1fZHgpOwotICAgIGludCBib3R0b20gPSBzdGQ6
Om1heDxpbnQ+KDAsIG91dHNldFNpemUuaGVpZ2h0KCkgKyBtX2R5KTsKLSAgICBpbnQgbGVmdCA9
IHN0ZDo6bWF4PGludD4oMCwgb3V0c2V0U2l6ZS53aWR0aCgpIC0gbV9keCk7CisgICAgaW50IHRv
cCA9IHN0ZDo6bWF4PGludD4oMCwgb3V0c2V0U2l6ZS5oZWlnaHQoKSAtIG9mZnNldC5oZWlnaHQo
KSk7CisgICAgaW50IHJpZ2h0ID0gc3RkOjptYXg8aW50PigwLCBvdXRzZXRTaXplLndpZHRoKCkg
KyBvZmZzZXQud2lkdGgoKSk7CisgICAgaW50IGJvdHRvbSA9IHN0ZDo6bWF4PGludD4oMCwgb3V0
c2V0U2l6ZS5oZWlnaHQoKSArIG9mZnNldC5oZWlnaHQoKSk7CisgICAgaW50IGxlZnQgPSBzdGQ6
Om1heDxpbnQ+KDAsIG91dHNldFNpemUud2lkdGgoKSAtIG9mZnNldC53aWR0aCgpKTsKIAogICAg
IHJldHVybiB7IHRvcCwgcmlnaHQsIGJvdHRvbSwgbGVmdCB9OwogfQpAQCAtNzcsNyArNzcsNyBA
QCBzdGQ6OnVuaXF1ZV9wdHI8RmlsdGVyRWZmZWN0QXBwbGllcj4gRkVEcm9wU2hhZG93OjpjcmVh
dGVTb2Z0d2FyZUFwcGxpZXIoKSBjb25zdAogewogICAgIHJldHVybiBGaWx0ZXJFZmZlY3RBcHBs
aWVyOjpjcmVhdGU8RkVEcm9wU2hhZG93U29mdHdhcmVBcHBsaWVyPigqdGhpcyk7CiB9Ci0gICAg
CisKIFRleHRTdHJlYW0mIEZFRHJvcFNoYWRvdzo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0
U3RyZWFtJiB0cywgRmlsdGVyUmVwcmVzZW50YXRpb24gcmVwcmVzZW50YXRpb24pIGNvbnN0CiB7
CiAgICAgdHMgPDwgaW5kZW50IDw8IltmZURyb3BTaGFkb3ciOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURyb3BTaGFkb3cuaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEcm9wU2hhZG93LmgKaW5kZXgg
OGEwMzAzZjcwZDY4OGNlMTc2ZTczMTRhZWFlODM5MDRjZTBlZGU2ZS4uN2EyMGIzMmYyZDgwOThi
OWZiNTdkZDU5YThhZTUyMzE3MjM0MjhjZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURyb3BTaGFkb3cuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRHJvcFNoYWRvdy5oCkBAIC00Nyw2ICs0Nyw4
IEBAIHB1YmxpYzoKICAgICBmbG9hdCBzaGFkb3dPcGFjaXR5KCkgY29uc3QgeyByZXR1cm4gbV9z
aGFkb3dPcGFjaXR5OyB9CiAgICAgdm9pZCBzZXRTaGFkb3dPcGFjaXR5KGZsb2F0IHNoYWRvd09w
YWNpdHkpIHsgbV9zaGFkb3dPcGFjaXR5ID0gc2hhZG93T3BhY2l0eTsgfQogCisgICAgc3RhdGlj
IEludE91dHNldHMgY2FsY3VsYXRlT3V0c2V0cyhjb25zdCBGbG9hdFNpemUmIG9mZnNldCwgY29u
c3QgRmxvYXRTaXplJiBzdGREZXZpYXRpb24pOworCiAgICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rl
cj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OwogICAgIHRlbXBsYXRlPGNsYXNzIERlY29k
ZXI+IHN0YXRpYyBzdGQ6Om9wdGlvbmFsPFJlZjxGRURyb3BTaGFkb3c+PiBkZWNvZGUoRGVjb2Rl
ciYpOwogCkBAIC01NSw4ICs1Nyw2IEBAIHByaXZhdGU6CiAKICAgICBGbG9hdFJlY3QgY2FsY3Vs
YXRlSW1hZ2VSZWN0KGNvbnN0IEZpbHRlciYsIGNvbnN0IEZpbHRlckltYWdlVmVjdG9yJiBpbnB1
dHMsIGNvbnN0IEZsb2F0UmVjdCYgcHJpbWl0aXZlU3VicmVnaW9uKSBjb25zdCBvdmVycmlkZTsK
IAotICAgIEludE91dHNldHMgb3V0c2V0cyhjb25zdCBGaWx0ZXImKSBjb25zdCBvdmVycmlkZTsK
LQogICAgIHN0ZDo6dW5pcXVlX3B0cjxGaWx0ZXJFZmZlY3RBcHBsaWVyPiBjcmVhdGVTb2Z0d2Fy
ZUFwcGxpZXIoKSBjb25zdCBvdmVycmlkZTsKIAogICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJu
YWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBGaWx0ZXJSZXByZXNlbnRhdGlvbikg
Y29uc3Qgb3ZlcnJpZGU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFR2F1c3NpYW5CbHVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVHYXVzc2lhbkJsdXIuY3BwCmluZGV4IDdhNTM2NzM2YjY4ZTJm
ODE5ZGRlYTZmNGQ2MWY5NmY0OTdiODZkZjYuLjY5NDc1M2NmNGM3NTgwYWQ4ODljY2QzZWI3ZTk2
NDkxY2RiZTIyM2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVHYXVzc2lhbkJsdXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVHYXVzc2lhbkJsdXIuY3BwCkBAIC0xMjAsOSArMTIwLDkgQEAg
RmxvYXRSZWN0IEZFR2F1c3NpYW5CbHVyOjpjYWxjdWxhdGVJbWFnZVJlY3QoY29uc3QgRmlsdGVy
JiBmaWx0ZXIsIGNvbnN0IEZpbHRlckkKICAgICByZXR1cm4gZmlsdGVyLmNsaXBUb01heEVmZmVj
dFJlY3QoaW1hZ2VSZWN0LCBwcmltaXRpdmVTdWJyZWdpb24pOwogfQogCi1JbnRPdXRzZXRzIEZF
R2F1c3NpYW5CbHVyOjpvdXRzZXRzKGNvbnN0IEZpbHRlciYgZmlsdGVyKSBjb25zdAorSW50T3V0
c2V0cyBGRUdhdXNzaWFuQmx1cjo6Y2FsY3VsYXRlT3V0c2V0cyhjb25zdCBGbG9hdFNpemUmIHN0
ZERldmlhdGlvbikKIHsKLSAgICBJbnRTaXplIG91dHNldFNpemUgPSBjYWxjdWxhdGVPdXRzZXRT
aXplKGZpbHRlci5yZXNvbHZlZFNpemUoeyBtX3N0ZFgsIG1fc3RkWSB9KSk7CisgICAgSW50U2l6
ZSBvdXRzZXRTaXplID0gY2FsY3VsYXRlT3V0c2V0U2l6ZShzdGREZXZpYXRpb24pOwogICAgIHJl
dHVybiB7IG91dHNldFNpemUuaGVpZ2h0KCksIG91dHNldFNpemUud2lkdGgoKSwgb3V0c2V0U2l6
ZS5oZWlnaHQoKSwgb3V0c2V0U2l6ZS53aWR0aCgpIH07CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVHYXVzc2lhbkJsdXIuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVHYXVzc2lhbkJsdXIuaApp
bmRleCA4MDE1NDg0NzI0YmE3NzBlYjRjOTA5YzE3MzEzNjJmYTliNTU3MTNlLi4yNGNiOTI2Zjc2
NDhkMWFmYzRkMDg5MzJhNDI1MjIzZjM0OGJmMDBmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFR2F1c3NpYW5CbHVyLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUdhdXNzaWFuQmx1ci5oCkBAIC00
NCw2ICs0NCw4IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgSW50U2l6ZSBjYWxjdWxhdGVVbnNjYWxl
ZEtlcm5lbFNpemUoRmxvYXRTaXplIHN0ZERldmlhdGlvbik7CiAgICAgc3RhdGljIEludFNpemUg
Y2FsY3VsYXRlT3V0c2V0U2l6ZShGbG9hdFNpemUgc3RkRGV2aWF0aW9uKTsKIAorICAgIHN0YXRp
YyBJbnRPdXRzZXRzIGNhbGN1bGF0ZU91dHNldHMoY29uc3QgRmxvYXRTaXplJiBzdGREZXZpYXRp
b24pOworCiAgICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYp
IGNvbnN0OwogICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBzdGQ6Om9wdGlvbmFs
PFJlZjxGRUdhdXNzaWFuQmx1cj4+IGRlY29kZShEZWNvZGVyJik7CiAKQEAgLTUyLDggKzU0LDYg
QEAgcHJpdmF0ZToKIAogICAgIEZsb2F0UmVjdCBjYWxjdWxhdGVJbWFnZVJlY3QoY29uc3QgRmls
dGVyJiwgY29uc3QgRmlsdGVySW1hZ2VWZWN0b3ImIGlucHV0cywgY29uc3QgRmxvYXRSZWN0JiBw
cmltaXRpdmVTdWJyZWdpb24pIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgSW50T3V0c2V0cyBvdXRz
ZXRzKGNvbnN0IEZpbHRlciYpIGNvbnN0IG92ZXJyaWRlOwotCiAgICAgYm9vbCByZXN1bHRJc0Fs
cGhhSW1hZ2UoY29uc3QgRmlsdGVySW1hZ2VWZWN0b3ImIGlucHV0cykgY29uc3Qgb3ZlcnJpZGU7
CiAKICAgICBzdGQ6OnVuaXF1ZV9wdHI8RmlsdGVyRWZmZWN0QXBwbGllcj4gY3JlYXRlU29mdHdh
cmVBcHBsaWVyKCkgY29uc3Qgb3ZlcnJpZGU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFT2Zmc2V0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVPZmZzZXQuY3BwCmluZGV4IDM5NWE4MjZiZTAyZDcw
YjYyMzkzMWNhYWM4ZTBlY2IwNDMyNzg3M2UuLjg2OWRjZjZjNThkMjgzNWUzY2RmYWU1Yjc4N2My
ZTZhOWI5Zjk0NjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVPZmZzZXQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVPZmZzZXQuY3BwCkBAIC02MCwxOSArNjAsMTkgQEAgRmxvYXRSZWN0IEZF
T2Zmc2V0OjpjYWxjdWxhdGVJbWFnZVJlY3QoY29uc3QgRmlsdGVyJiBmaWx0ZXIsIGNvbnN0IEZp
bHRlckltYWdlVmUKICAgICByZXR1cm4gZmlsdGVyLmNsaXBUb01heEVmZmVjdFJlY3QoaW1hZ2VS
ZWN0LCBwcmltaXRpdmVTdWJyZWdpb24pOwogfQogCi1JbnRPdXRzZXRzIEZFT2Zmc2V0OjpvdXRz
ZXRzKGNvbnN0IEZpbHRlciYgZmlsdGVyKSBjb25zdAorSW50T3V0c2V0cyBGRU9mZnNldDo6Y2Fs
Y3VsYXRlT3V0c2V0cyhjb25zdCBGbG9hdFNpemUmIG9mZnNldCkKIHsKLSAgICBhdXRvIG9mZnNl
dCA9IGV4cGFuZGVkSW50U2l6ZShmaWx0ZXIucmVzb2x2ZWRTaXplKHsgbV9keCwgbV9keSB9KSk7
CisgICAgYXV0byBhZGp1c3RlZE9mZnNldCA9IGV4cGFuZGVkSW50U2l6ZShvZmZzZXQpOwogCiAg
ICAgSW50T3V0c2V0cyBvdXRzZXRzOwotICAgIGlmIChvZmZzZXQuaGVpZ2h0KCkgPCAwKQotICAg
ICAgICBvdXRzZXRzLnNldFRvcCgtb2Zmc2V0LmhlaWdodCgpKTsKKyAgICBpZiAoYWRqdXN0ZWRP
ZmZzZXQuaGVpZ2h0KCkgPCAwKQorICAgICAgICBvdXRzZXRzLnNldFRvcCgtYWRqdXN0ZWRPZmZz
ZXQuaGVpZ2h0KCkpOwogICAgIGVsc2UKLSAgICAgICAgb3V0c2V0cy5zZXRCb3R0b20ob2Zmc2V0
LmhlaWdodCgpKTsKLSAgICBpZiAob2Zmc2V0LndpZHRoKCkgPCAwKQotICAgICAgICBvdXRzZXRz
LnNldExlZnQoLW9mZnNldC53aWR0aCgpKTsKKyAgICAgICAgb3V0c2V0cy5zZXRCb3R0b20oYWRq
dXN0ZWRPZmZzZXQuaGVpZ2h0KCkpOworICAgIGlmIChhZGp1c3RlZE9mZnNldC53aWR0aCgpIDwg
MCkKKyAgICAgICAgb3V0c2V0cy5zZXRMZWZ0KC1hZGp1c3RlZE9mZnNldC53aWR0aCgpKTsKICAg
ICBlbHNlCi0gICAgICAgIG91dHNldHMuc2V0UmlnaHQob2Zmc2V0LndpZHRoKCkpOworICAgICAg
ICBvdXRzZXRzLnNldFJpZ2h0KGFkanVzdGVkT2Zmc2V0LndpZHRoKCkpOwogCiAgICAgcmV0dXJu
IG91dHNldHM7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFT2Zmc2V0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFT2Zmc2V0LmgKaW5kZXggY2JhMDA2Y2UyYjg5YTc5YjM0OWNkNGNhOGRmNWI2MjI5
YzRlNWVmMy4uMWIyNDY4NDE5Mzc2MzNhNWFhYjNmYjYwYzE0Yjc5NTI1MWU2MGM1MiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU9mZnNldC5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVPZmZzZXQu
aApAQCAtMzYsNiArMzYsOCBAQCBwdWJsaWM6CiAgICAgZmxvYXQgZHkoKSBjb25zdCB7IHJldHVy
biBtX2R5OyB9CiAgICAgdm9pZCBzZXREeShmbG9hdCk7CiAKKyAgICBzdGF0aWMgSW50T3V0c2V0
cyBjYWxjdWxhdGVPdXRzZXRzKGNvbnN0IEZsb2F0U2l6ZSYgb2Zmc2V0KTsKKwogICAgIHRlbXBs
YXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKICAgICB0ZW1w
bGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgc3RkOjpvcHRpb25hbDxSZWY8RkVPZmZzZXQ+PiBk
ZWNvZGUoRGVjb2RlciYpOwogCkBAIC00NCw4ICs0Niw2IEBAIHByaXZhdGU6CiAKICAgICBGbG9h
dFJlY3QgY2FsY3VsYXRlSW1hZ2VSZWN0KGNvbnN0IEZpbHRlciYsIGNvbnN0IEZpbHRlckltYWdl
VmVjdG9yJiBpbnB1dHMsIGNvbnN0IEZsb2F0UmVjdCYgcHJpbWl0aXZlU3VicmVnaW9uKSBjb25z
dCBvdmVycmlkZTsKIAotICAgIEludE91dHNldHMgb3V0c2V0cyhjb25zdCBGaWx0ZXImKSBjb25z
dCBvdmVycmlkZTsKLQogICAgIGJvb2wgcmVzdWx0SXNBbHBoYUltYWdlKGNvbnN0IEZpbHRlcklt
YWdlVmVjdG9yJiBpbnB1dHMpIGNvbnN0IG92ZXJyaWRlOwogCiAgICAgc3RkOjp1bmlxdWVfcHRy
PEZpbHRlckVmZmVjdEFwcGxpZXI+IGNyZWF0ZVNvZnR3YXJlQXBwbGllcigpIGNvbnN0IG92ZXJy
aWRlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GaWx0ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmls
dGVyLmgKaW5kZXggZTBlZjFiYWE3ZGFlODQyYjk5ZGRlNzg4MmQ4N2Y0YTAyOTlhZmUzYi4uMTA4
NjI0NmNkZGU1MzM2MDgzOGVlNDAzN2MxNGE2YjhhMmNiNTBjMSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXIuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlci5oCkBAIC0zNiw3ICszNiw2
IEBAIGNsYXNzIEZpbHRlclJlc3VsdHM7CiAKIGNsYXNzIEZpbHRlciA6IHB1YmxpYyBGaWx0ZXJG
dW5jdGlvbiB7CiAgICAgdXNpbmcgRmlsdGVyRnVuY3Rpb246OmFwcGx5OwotICAgIHVzaW5nIEZp
bHRlckZ1bmN0aW9uOjpvdXRzZXRzOwogCiBwdWJsaWM6CiAgICAgZW51bSBjbGFzcyBDbGlwT3Bl
cmF0aW9uIHsgSW50ZXJzZWN0LCBVbml0ZSB9OwpAQCAtNjYsNyArNjUsNiBAQCBwdWJsaWM6CiAK
ICAgICBib29sIGNsYW1wRmlsdGVyUmVnaW9uSWZOZWVkZWQoKTsKIAotICAgIHZpcnR1YWwgSW50
T3V0c2V0cyBvdXRzZXRzKCkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgUmVmUHRyPEZpbHRlcklt
YWdlPiBhcHBseShGaWx0ZXJJbWFnZSogc291cmNlSW1hZ2UsIEZpbHRlclJlc3VsdHMmKSA9IDA7
CiAgICAgV0VCQ09SRV9FWFBPUlQgUmVmUHRyPEZpbHRlckltYWdlPiBhcHBseShJbWFnZUJ1ZmZl
ciogc291cmNlSW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlSW1hZ2VSZWN0LCBGaWx0ZXJS
ZXN1bHRzJik7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRmlsdGVyRnVuY3Rpb24uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRmlsdGVyRnVuY3Rpb24uaAppbmRleCA2NDRiNTgzNWRiYmUwNWU4ZjU5ZDc1
ODdjNTMyYWQ0ZjY1MDNkY2Q3Li5jODUzOWFiZjEwOWNmOWE3M2FhMzUxNmU2MmM5ZDEyZTk3NDAz
NjY3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZpbHRlckZ1bmN0aW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GaWx0ZXJGdW5jdGlvbi5oCkBAIC05NSw3ICs5NSw2IEBAIHB1YmxpYzoKIAogICAg
IHZpcnR1YWwgYm9vbCBzdXBwb3J0c0FjY2VsZXJhdGVkUmVuZGVyaW5nKCkgY29uc3QgeyByZXR1
cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIFJlZlB0cjxGaWx0ZXJJbWFnZT4gYXBwbHkoY29uc3Qg
RmlsdGVyJiwgRmlsdGVySW1hZ2UmLCBGaWx0ZXJSZXN1bHRzJikgeyByZXR1cm4gbnVsbHB0cjsg
fQotICAgIHZpcnR1YWwgSW50T3V0c2V0cyBvdXRzZXRzKGNvbnN0IEZpbHRlciYpIGNvbnN0IHsg
cmV0dXJuIHsgfTsgfQogCiAgICAgdmlydHVhbCBXVEY6OlRleHRTdHJlYW0mIGV4dGVybmFsUmVw
cmVzZW50YXRpb24oV1RGOjpUZXh0U3RyZWFtJiwgRmlsdGVyUmVwcmVzZW50YXRpb24gPSBGaWx0
ZXJSZXByZXNlbnRhdGlvbjo6VGVzdE91dHB1dCkgY29uc3QgPSAwOwogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvQ1NTRmlsdGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9DU1NGaWx0ZXIuY3BwCmluZGV4IDYzNmQ4MTQ1MTFiZjM1N2ExMmJlNTFhNWI4N2M0
NTI3NjQ3OGZlMjcuLjA5ZmQ2N2RmNTEzMWI5NmYyN2RlYzk5MzljNDIwMDc5Y2JlODYyMWQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9DU1NGaWx0ZXIuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9DU1NGaWx0ZXIuY3BwCkBAIC03Niw2ICs3NiwxMiBAQCBD
U1NGaWx0ZXI6OkNTU0ZpbHRlcihWZWN0b3I8UmVmPEZpbHRlckZ1bmN0aW9uPj4mJiBmdW5jdGlv
bnMpCiB7CiB9CiAKK3N0YXRpYyBJbnRPdXRzZXRzIGNhbGN1bGF0ZUJsdXJFZmZlY3RPdXRzZXRz
KGNvbnN0IEJsdXJGaWx0ZXJPcGVyYXRpb24mIGJsdXJPcGVyYXRpb24pCit7CisgICAgZmxvYXQg
c3RkRGV2aWF0aW9uID0gZmxvYXRWYWx1ZUZvckxlbmd0aChibHVyT3BlcmF0aW9uLnN0ZERldmlh
dGlvbigpLCAwKTsKKyAgICByZXR1cm4gRkVHYXVzc2lhbkJsdXI6OmNhbGN1bGF0ZU91dHNldHMo
eyBzdGREZXZpYXRpb24sIHN0ZERldmlhdGlvbiB9KTsKK30KKwogc3RhdGljIFJlZlB0cjxGaWx0
ZXJFZmZlY3Q+IGNyZWF0ZUJsdXJFZmZlY3QoY29uc3QgQmx1ckZpbHRlck9wZXJhdGlvbiYgYmx1
ck9wZXJhdGlvbiwgRmlsdGVyOjpDbGlwT3BlcmF0aW9uIGNsaXBPcGVyYXRpb24pCiB7CiAgICAg
ZmxvYXQgc3RkRGV2aWF0aW9uID0gZmxvYXRWYWx1ZUZvckxlbmd0aChibHVyT3BlcmF0aW9uLnN0
ZERldmlhdGlvbigpLCAwKTsKQEAgLTEwNSw2ICsxMTEsMTIgQEAgc3RhdGljIFJlZlB0cjxGaWx0
ZXJFZmZlY3Q+IGNyZWF0ZUNvbnRyYXN0RWZmZWN0KGNvbnN0IEJhc2ljQ29tcG9uZW50VHJhbnNm
ZXJGaWwKICAgICByZXR1cm4gRkVDb21wb25lbnRUcmFuc2Zlcjo6Y3JlYXRlKHRyYW5zZmVyRnVu
Y3Rpb24sIHRyYW5zZmVyRnVuY3Rpb24sIHRyYW5zZmVyRnVuY3Rpb24sIG51bGxGdW5jdGlvbik7
CiB9CiAKK3N0YXRpYyBJbnRPdXRzZXRzIGNhbGN1bGF0ZURyb3BTaGFkb3dFZmZlY3RPdXRzZXRz
KGNvbnN0IERyb3BTaGFkb3dGaWx0ZXJPcGVyYXRpb24mIGRyb3BTaGFkb3dPcGVyYXRpb24pCit7
CisgICAgZmxvYXQgc3RkRGV2aWF0aW9uID0gZHJvcFNoYWRvd09wZXJhdGlvbi5zdGREZXZpYXRp
b24oKTsKKyAgICByZXR1cm4gRkVEcm9wU2hhZG93OjpjYWxjdWxhdGVPdXRzZXRzKEZsb2F0U2l6
ZShkcm9wU2hhZG93T3BlcmF0aW9uLngoKSwgZHJvcFNoYWRvd09wZXJhdGlvbi55KCkpLCB7IHN0
ZERldmlhdGlvbiwgc3RkRGV2aWF0aW9uIH0pOworfQorCiBzdGF0aWMgUmVmUHRyPEZpbHRlckVm
ZmVjdD4gY3JlYXRlRHJvcFNoYWRvd0VmZmVjdChjb25zdCBEcm9wU2hhZG93RmlsdGVyT3BlcmF0
aW9uJiBkcm9wU2hhZG93T3BlcmF0aW9uKQogewogICAgIGZsb2F0IHN0ZCA9IGRyb3BTaGFkb3dP
cGVyYXRpb24uc3RkRGV2aWF0aW9uKCk7CkBAIC0yMTksNyArMjMxLDcgQEAgc3RhdGljIFJlZlB0
cjxGaWx0ZXJFZmZlY3Q+IGNyZWF0ZVNlcGlhRWZmZWN0KGNvbnN0IEJhc2ljQ29sb3JNYXRyaXhG
aWx0ZXJPcGVyYXQKICAgICByZXR1cm4gRkVDb2xvck1hdHJpeDo6Y3JlYXRlKEZFQ09MT1JNQVRS
SVhfVFlQRV9NQVRSSVgsIFdURk1vdmUoaW5wdXRQYXJhbWV0ZXJzKSk7CiB9CiAKLXN0YXRpYyBS
ZWZQdHI8U1ZHRmlsdGVyPiBjcmVhdGVTVkdGaWx0ZXIoQ1NTRmlsdGVyJiBmaWx0ZXIsIGNvbnN0
IFJlZmVyZW5jZUZpbHRlck9wZXJhdGlvbiYgZmlsdGVyT3BlcmF0aW9uLCBSZW5kZXJFbGVtZW50
JiByZW5kZXJlciwgY29uc3QgRmxvYXRSZWN0JiB0YXJnZXRCb3VuZGluZ0JveCkKK3N0YXRpYyBT
VkdGaWx0ZXJFbGVtZW50KiByZWZlcmVuY2VGaWx0ZXJFbGVtZW50KGNvbnN0IFJlZmVyZW5jZUZp
bHRlck9wZXJhdGlvbiYgZmlsdGVyT3BlcmF0aW9uLCBSZW5kZXJFbGVtZW50JiByZW5kZXJlcikK
IHsKICAgICBhdXRvJiByZWZlcmVuY2VkU1ZHUmVzb3VyY2VzID0gcmVuZGVyZXIuZW5zdXJlUmVm
ZXJlbmNlZFNWR1Jlc291cmNlcygpOwogICAgIGF1dG8qIGZpbHRlckVsZW1lbnQgPSByZWZlcmVu
Y2VkU1ZHUmVzb3VyY2VzLnJlZmVyZW5jZWRGaWx0ZXJFbGVtZW50KHJlbmRlcmVyLmRvY3VtZW50
KCksIGZpbHRlck9wZXJhdGlvbik7CkBAIC0yMzIsMTYgKzI0NCwzNCBAQCBzdGF0aWMgUmVmUHRy
PFNWR0ZpbHRlcj4gY3JlYXRlU1ZHRmlsdGVyKENTU0ZpbHRlciYgZmlsdGVyLCBjb25zdCBSZWZl
cmVuY2VGaWx0ZQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAKKyAgICByZXR1cm4g
ZmlsdGVyRWxlbWVudDsKK30KKworc3RhdGljIEludE91dHNldHMgY2FsY3VsYXRlUmVmZXJlbmNl
RmlsdGVyT3V0c2V0cyhjb25zdCBSZWZlcmVuY2VGaWx0ZXJPcGVyYXRpb24mIGZpbHRlck9wZXJh
dGlvbiwgUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIpCit7CisgICAgYXV0byBmaWx0ZXJFbGVtZW50
ID0gcmVmZXJlbmNlRmlsdGVyRWxlbWVudChmaWx0ZXJPcGVyYXRpb24sIHJlbmRlcmVyKTsKKyAg
ICBpZiAoIWZpbHRlckVsZW1lbnQpCisgICAgICAgIHJldHVybiB7IH07CisKKyAgICBTVkdGaWx0
ZXJCdWlsZGVyIGJ1aWxkZXIocmVuZGVyZXIub2JqZWN0Qm91bmRpbmdCb3goKSwgZmlsdGVyRWxl
bWVudC0+cHJpbWl0aXZlVW5pdHMoKSk7CisgICAgcmV0dXJuIGJ1aWxkZXIuY2FsY3VsYXRlRmls
dGVyT3V0c2V0cygqZmlsdGVyRWxlbWVudCk7Cit9CisKK3N0YXRpYyBSZWZQdHI8U1ZHRmlsdGVy
PiBjcmVhdGVSZWZlcmVuY2VGaWx0ZXIoQ1NTRmlsdGVyJiBmaWx0ZXIsIGNvbnN0IFJlZmVyZW5j
ZUZpbHRlck9wZXJhdGlvbiYgZmlsdGVyT3BlcmF0aW9uLCBSZW5kZXJFbGVtZW50JiByZW5kZXJl
ciwgY29uc3QgRmxvYXRSZWN0JiB0YXJnZXRCb3VuZGluZ0JveCkKK3sKKyAgICBhdXRvIGZpbHRl
ckVsZW1lbnQgPSByZWZlcmVuY2VGaWx0ZXJFbGVtZW50KGZpbHRlck9wZXJhdGlvbiwgcmVuZGVy
ZXIpOworICAgIGlmICghZmlsdGVyRWxlbWVudCkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisK
ICAgICBhdXRvIGZpbHRlclJlZ2lvbiA9IFNWR0xlbmd0aENvbnRleHQ6OnJlc29sdmVSZWN0YW5n
bGU8U1ZHRmlsdGVyRWxlbWVudD4oZmlsdGVyRWxlbWVudCwgZmlsdGVyRWxlbWVudC0+ZmlsdGVy
VW5pdHMoKSwgdGFyZ2V0Qm91bmRpbmdCb3gpOwogCi0gICAgU1ZHRmlsdGVyQnVpbGRlciBidWls
ZGVyOworICAgIFNWR0ZpbHRlckJ1aWxkZXIgYnVpbGRlcihyZW5kZXJlci5vYmplY3RCb3VuZGlu
Z0JveCgpLCBmaWx0ZXJFbGVtZW50LT5wcmltaXRpdmVVbml0cygpKTsKICAgICByZXR1cm4gU1ZH
RmlsdGVyOjpjcmVhdGUoKmZpbHRlckVsZW1lbnQsIGJ1aWxkZXIsIGZpbHRlci5yZW5kZXJpbmdN
b2RlKCksIGZpbHRlci5maWx0ZXJTY2FsZSgpLCBmaWx0ZXIuY2xpcE9wZXJhdGlvbigpLCBmaWx0
ZXJSZWdpb24sIHRhcmdldEJvdW5kaW5nQm94KTsKIH0KIAogYm9vbCBDU1NGaWx0ZXI6OmJ1aWxk
RmlsdGVyRnVuY3Rpb25zKFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyLCBjb25zdCBGaWx0ZXJPcGVy
YXRpb25zJiBvcGVyYXRpb25zLCBjb25zdCBGbG9hdFJlY3QmIHRhcmdldEJvdW5kaW5nQm94KQog
ewotICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGVmZmVjdDsKLSAgICBSZWZQdHI8U1ZHRmlsdGVy
PiBmaWx0ZXI7CisgICAgUmVmUHRyPEZpbHRlckZ1bmN0aW9uPiBmdW5jdGlvbjsKIAogICAgIGZv
ciAoYXV0byYgb3BlcmF0aW9uIDogb3BlcmF0aW9ucy5vcGVyYXRpb25zKCkpIHsKICAgICAgICAg
c3dpdGNoIChvcGVyYXRpb24tPnR5cGUoKSkgewpAQCAtMjUwLDYzICsyODAsNjAgQEAgYm9vbCBD
U1NGaWx0ZXI6OmJ1aWxkRmlsdGVyRnVuY3Rpb25zKFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyLCBj
b25zdCBGaWx0ZXJPcGVyYXQKICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIGNhc2UgRmls
dGVyT3BlcmF0aW9uOjpCTFVSOgotICAgICAgICAgICAgZWZmZWN0ID0gY3JlYXRlQmx1ckVmZmVj
dChkb3duY2FzdDxCbHVyRmlsdGVyT3BlcmF0aW9uPigqb3BlcmF0aW9uKSwgY2xpcE9wZXJhdGlv
bigpKTsKKyAgICAgICAgICAgIGZ1bmN0aW9uID0gY3JlYXRlQmx1ckVmZmVjdChkb3duY2FzdDxC
bHVyRmlsdGVyT3BlcmF0aW9uPigqb3BlcmF0aW9uKSwgY2xpcE9wZXJhdGlvbigpKTsKICAgICAg
ICAgICAgIGJyZWFrOwogCiAgICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpCUklHSFRORVNT
OgotICAgICAgICAgICAgZWZmZWN0ID0gY3JlYXRlQnJpZ2h0bmVzc0VmZmVjdChkb3duY2FzdDxC
YXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uPigqb3BlcmF0aW9uKSk7CisgICAg
ICAgICAgICBmdW5jdGlvbiA9IGNyZWF0ZUJyaWdodG5lc3NFZmZlY3QoZG93bmNhc3Q8QmFzaWND
b21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlvbj4oKm9wZXJhdGlvbikpOwogICAgICAgICAg
ICAgYnJlYWs7CiAKICAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkNPTlRSQVNUOgotICAg
ICAgICAgICAgZWZmZWN0ID0gY3JlYXRlQ29udHJhc3RFZmZlY3QoZG93bmNhc3Q8QmFzaWNDb21w
b25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlvbj4oKm9wZXJhdGlvbikpOworICAgICAgICAgICAg
ZnVuY3Rpb24gPSBjcmVhdGVDb250cmFzdEVmZmVjdChkb3duY2FzdDxCYXNpY0NvbXBvbmVudFRy
YW5zZmVyRmlsdGVyT3BlcmF0aW9uPigqb3BlcmF0aW9uKSk7CiAgICAgICAgICAgICBicmVhazsK
IAogICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6RFJPUF9TSEFET1c6Ci0gICAgICAgICAg
ICBlZmZlY3QgPSBjcmVhdGVEcm9wU2hhZG93RWZmZWN0KGRvd25jYXN0PERyb3BTaGFkb3dGaWx0
ZXJPcGVyYXRpb24+KCpvcGVyYXRpb24pKTsKKyAgICAgICAgICAgIGZ1bmN0aW9uID0gY3JlYXRl
RHJvcFNoYWRvd0VmZmVjdChkb3duY2FzdDxEcm9wU2hhZG93RmlsdGVyT3BlcmF0aW9uPigqb3Bl
cmF0aW9uKSk7CiAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICBjYXNlIEZpbHRlck9wZXJh
dGlvbjo6R1JBWVNDQUxFOgotICAgICAgICAgICAgZWZmZWN0ID0gY3JlYXRlR3JheVNjYWxlRWZm
ZWN0KGRvd25jYXN0PEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24+KCpvcGVyYXRpb24p
KTsKKyAgICAgICAgICAgIGZ1bmN0aW9uID0gY3JlYXRlR3JheVNjYWxlRWZmZWN0KGRvd25jYXN0
PEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24+KCpvcGVyYXRpb24pKTsKICAgICAgICAg
ICAgIGJyZWFrOwogCiAgICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpIVUVfUk9UQVRFOgot
ICAgICAgICAgICAgZWZmZWN0ID0gY3JlYXRlSHVlUm90YXRlRWZmZWN0KGRvd25jYXN0PEJhc2lj
Q29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24+KCpvcGVyYXRpb24pKTsKKyAgICAgICAgICAgIGZ1
bmN0aW9uID0gY3JlYXRlSHVlUm90YXRlRWZmZWN0KGRvd25jYXN0PEJhc2ljQ29sb3JNYXRyaXhG
aWx0ZXJPcGVyYXRpb24+KCpvcGVyYXRpb24pKTsKICAgICAgICAgICAgIGJyZWFrOwogCiAgICAg
ICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpJTlZFUlQ6Ci0gICAgICAgICAgICBlZmZlY3QgPSBj
cmVhdGVJbnZlcnRFZmZlY3QoZG93bmNhc3Q8QmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9w
ZXJhdGlvbj4oKm9wZXJhdGlvbikpOworICAgICAgICAgICAgZnVuY3Rpb24gPSBjcmVhdGVJbnZl
cnRFZmZlY3QoZG93bmNhc3Q8QmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlvbj4o
Km9wZXJhdGlvbikpOwogICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgY2FzZSBGaWx0ZXJP
cGVyYXRpb246Ok9QQUNJVFk6Ci0gICAgICAgICAgICBlZmZlY3QgPSBjcmVhdGVPcGFjaXR5RWZm
ZWN0KGRvd25jYXN0PEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24+KCpvcGVy
YXRpb24pKTsKKyAgICAgICAgICAgIGZ1bmN0aW9uID0gY3JlYXRlT3BhY2l0eUVmZmVjdChkb3du
Y2FzdDxCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uPigqb3BlcmF0aW9uKSk7
CiAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6U0FU
VVJBVEU6Ci0gICAgICAgICAgICBlZmZlY3QgPSBjcmVhdGVTYXR1cmF0ZUVmZmVjdChkb3duY2Fz
dDxCYXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uPigqb3BlcmF0aW9uKSk7CisgICAgICAg
ICAgICBmdW5jdGlvbiA9IGNyZWF0ZVNhdHVyYXRlRWZmZWN0KGRvd25jYXN0PEJhc2ljQ29sb3JN
YXRyaXhGaWx0ZXJPcGVyYXRpb24+KCpvcGVyYXRpb24pKTsKICAgICAgICAgICAgIGJyZWFrOwog
CiAgICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpTRVBJQToKLSAgICAgICAgICAgIGVmZmVj
dCA9IGNyZWF0ZVNlcGlhRWZmZWN0KGRvd25jYXN0PEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVy
YXRpb24+KCpvcGVyYXRpb24pKTsKKyAgICAgICAgICAgIGZ1bmN0aW9uID0gY3JlYXRlU2VwaWFF
ZmZlY3QoZG93bmNhc3Q8QmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbj4oKm9wZXJhdGlv
bikpOwogICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246
OlJFRkVSRU5DRToKLSAgICAgICAgICAgIGZpbHRlciA9IGNyZWF0ZVNWR0ZpbHRlcigqdGhpcywg
ZG93bmNhc3Q8UmVmZXJlbmNlRmlsdGVyT3BlcmF0aW9uPigqb3BlcmF0aW9uKSwgcmVuZGVyZXIs
IHRhcmdldEJvdW5kaW5nQm94KTsKKyAgICAgICAgICAgIGZ1bmN0aW9uID0gY3JlYXRlUmVmZXJl
bmNlRmlsdGVyKCp0aGlzLCBkb3duY2FzdDxSZWZlcmVuY2VGaWx0ZXJPcGVyYXRpb24+KCpvcGVy
YXRpb24pLCByZW5kZXJlciwgdGFyZ2V0Qm91bmRpbmdCb3gpOwogICAgICAgICAgICAgYnJlYWs7
CiAKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKLSAg
ICAgICAgaWYgKCFmaWx0ZXIgJiYgIWVmZmVjdCkKKyAgICAgICAgaWYgKCFmdW5jdGlvbikKICAg
ICAgICAgICAgIGNvbnRpbnVlOwogCiAgICAgICAgIGlmIChtX2Z1bmN0aW9ucy5pc0VtcHR5KCkp
CiAgICAgICAgICAgICBtX2Z1bmN0aW9ucy5hcHBlbmQoU291cmNlR3JhcGhpYzo6Y3JlYXRlKCkp
OwogCi0gICAgICAgIGlmIChmaWx0ZXIpCi0gICAgICAgICAgICBtX2Z1bmN0aW9ucy5hcHBlbmQo
ZmlsdGVyLnJlbGVhc2VOb25OdWxsKCkpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBtX2Z1
bmN0aW9ucy5hcHBlbmQoZWZmZWN0LnJlbGVhc2VOb25OdWxsKCkpOworICAgICAgICBtX2Z1bmN0
aW9ucy5hcHBlbmQoZnVuY3Rpb24ucmVsZWFzZU5vbk51bGwoKSk7CiAgICAgfQogCiAgICAgLy8g
SWYgd2UgZGlkbid0IG1ha2UgYW55IGVmZmVjdHMsIHRlbGwgb3VyIGNhbGxlciB3ZSBhcmUgbm90
IHZhbGlkLgpAQCAtMzcxLDE3ICszOTgsMzMgQEAgdm9pZCBDU1NGaWx0ZXI6OnNldEZpbHRlclJl
Z2lvbihjb25zdCBGbG9hdFJlY3QmIGZpbHRlclJlZ2lvbikKICAgICBjbGFtcEZpbHRlclJlZ2lv
bklmTmVlZGVkKCk7CiB9CiAKLUludE91dHNldHMgQ1NTRmlsdGVyOjpvdXRzZXRzKCkgY29uc3QK
K0ludE91dHNldHMgQ1NTRmlsdGVyOjpjYWxjdWxhdGVPdXRzZXRzKFJlbmRlckVsZW1lbnQmIHJl
bmRlcmVyLCBjb25zdCBGaWx0ZXJPcGVyYXRpb25zJiBvcGVyYXRpb25zKQogewotICAgIGlmICgh
bV9oYXNGaWx0ZXJUaGF0TW92ZXNQaXhlbHMpCisgICAgaWYgKCFvcGVyYXRpb25zLmhhc0ZpbHRl
clRoYXRNb3Zlc1BpeGVscygpKQogICAgICAgICByZXR1cm4geyB9OwogCi0gICAgaWYgKCFtX291
dHNldHMuaXNaZXJvKCkpCi0gICAgICAgIHJldHVybiBtX291dHNldHM7CisgICAgSW50T3V0c2V0
cyBvdXRzZXRzOworCisgICAgZm9yIChhdXRvJiBvcGVyYXRpb24gOiBvcGVyYXRpb25zLm9wZXJh
dGlvbnMoKSkgeworICAgICAgICBzd2l0Y2ggKG9wZXJhdGlvbi0+dHlwZSgpKSB7CisgICAgICAg
IGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpCTFVSOgorICAgICAgICAgICAgb3V0c2V0cyArPSBjYWxj
dWxhdGVCbHVyRWZmZWN0T3V0c2V0cyhkb3duY2FzdDxCbHVyRmlsdGVyT3BlcmF0aW9uPigqb3Bl
cmF0aW9uKSk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIEZpbHRlck9wZXJh
dGlvbjo6RFJPUF9TSEFET1c6CisgICAgICAgICAgICBvdXRzZXRzICs9IGNhbGN1bGF0ZURyb3BT
aGFkb3dFZmZlY3RPdXRzZXRzKGRvd25jYXN0PERyb3BTaGFkb3dGaWx0ZXJPcGVyYXRpb24+KCpv
cGVyYXRpb24pKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgRmlsdGVyT3Bl
cmF0aW9uOjpSRUZFUkVOQ0U6CisgICAgICAgICAgICBvdXRzZXRzICs9IGNhbGN1bGF0ZVJlZmVy
ZW5jZUZpbHRlck91dHNldHMoZG93bmNhc3Q8UmVmZXJlbmNlRmlsdGVyT3BlcmF0aW9uPigqb3Bl
cmF0aW9uKSwgcmVuZGVyZXIpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgZGVmYXVs
dDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQogCi0gICAgZm9yIChhdXRv
JiBmdW5jdGlvbiA6IG1fZnVuY3Rpb25zKQotICAgICAgICBtX291dHNldHMgKz0gZnVuY3Rpb24t
Pm91dHNldHMoKnRoaXMpOwotICAgIHJldHVybiBtX291dHNldHM7CisgICAgcmV0dXJuIG91dHNl
dHM7CiB9CiAKIFRleHRTdHJlYW0mIENTU0ZpbHRlcjo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihU
ZXh0U3RyZWFtJiB0cywgRmlsdGVyUmVwcmVzZW50YXRpb24gcmVwcmVzZW50YXRpb24pIGNvbnN0
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvQ1NTRmlsdGVyLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvQ1NTRmlsdGVyLmgKaW5kZXggNGRiYWM1M2FkMDA4NTg4ZDM1
NWMyMzkwMDYwNGFjMGVjZjhhNjVlYS4uYjk5OTZkYzgyNTRmYTAwMWZjZDQ2NDIyNzFjYzQzZTk5
ZGEzY2FjMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0NTU0ZpbHRlci5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9DU1NGaWx0ZXIuaApAQCAtNDksMTAgKzQ5
LDEwIEBAIHB1YmxpYzoKIAogICAgIEZpbHRlckVmZmVjdFZlY3RvciBlZmZlY3RzT2ZUeXBlKEZp
bHRlckZ1bmN0aW9uOjpUeXBlKSBjb25zdCBmaW5hbDsKIAotICAgIEludE91dHNldHMgb3V0c2V0
cygpIGNvbnN0IGZpbmFsOwotCiAgICAgUmVmUHRyPEZpbHRlckltYWdlPiBhcHBseShGaWx0ZXJJ
bWFnZSogc291cmNlSW1hZ2UsIEZpbHRlclJlc3VsdHMmKSBmaW5hbDsKIAorICAgIHN0YXRpYyBJ
bnRPdXRzZXRzIGNhbGN1bGF0ZU91dHNldHMoUmVuZGVyRWxlbWVudCYsIGNvbnN0IEZpbHRlck9w
ZXJhdGlvbnMmKTsKKwogcHJpdmF0ZToKICAgICBDU1NGaWx0ZXIoUmVuZGVyaW5nTW9kZSwgY29u
c3QgRmxvYXRTaXplJiBmaWx0ZXJTY2FsZSwgQ2xpcE9wZXJhdGlvbiwgYm9vbCBoYXNGaWx0ZXJU
aGF0TW92ZXNQaXhlbHMsIGJvb2wgaGFzRmlsdGVyVGhhdFNob3VsZEJlUmVzdHJpY3RlZEJ5U2Vj
dXJpdHlPcmlnaW4pOwogICAgIENTU0ZpbHRlcihWZWN0b3I8UmVmPEZpbHRlckZ1bmN0aW9uPj4m
Jik7CkBAIC02Nyw4ICs2Nyw2IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX2hhc0ZpbHRlclRoYXRT
aG91bGRCZVJlc3RyaWN0ZWRCeVNlY3VyaXR5T3JpZ2luIHsgZmFsc2UgfTsKIAogICAgIFZlY3Rv
cjxSZWY8RmlsdGVyRnVuY3Rpb24+PiBtX2Z1bmN0aW9uczsKLQotICAgIG11dGFibGUgSW50T3V0
c2V0cyBtX291dHNldHM7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAppbmRleCBiYjFlNmE0OTExY2YzNDhhNTc5ZDJk
NGJlMGVhYWM4MTNkNDc5YjNkLi4zMmE1ZWE5ZmU1NTFhMjA1Zjk3YzAxYmNkNWM0NjRmZGY0NGU2
ZjhjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAKQEAgLTMyOTMs
NyArMzI5Myw3IEBAIFJlbmRlckxheWVyRmlsdGVycyogUmVuZGVyTGF5ZXI6OmZpbHRlcnNGb3JQ
YWludGluZyhHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIE9wCiAgICAgaWYgKCFwYWludHNXaXRo
RmlsdGVycygpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIGlmIChtX2ZpbHRlcnMg
JiYgbV9maWx0ZXJzLT5maWx0ZXIoKSkKKyAgICBpZiAobV9maWx0ZXJzKQogICAgICAgICByZXR1
cm4gbV9maWx0ZXJzLmdldCgpOwogCiAgICAgcmV0dXJuIG51bGxwdHI7CkBAIC01Njk4LDcgKzU2
OTgsNyBAQCB2b2lkIFJlbmRlckxheWVyOjp1cGRhdGVGaWx0ZXJQYWludGluZ1N0cmF0ZWd5KCkK
ICAgICAgICAgLy8gRG9uJ3QgZGVsZXRlIHRoZSB3aG9sZSBmaWx0ZXIgaW5mbyBoZXJlLCBiZWNh
dXNlIHdlIG1pZ2h0IHVzZSBpdAogICAgICAgICAvLyBmb3IgbG9hZGluZyBTVkcgcmVmZXJlbmNl
IGZpbHRlciBmaWxlcy4KICAgICAgICAgaWYgKG1fZmlsdGVycykKLSAgICAgICAgICAgIG1fZmls
dGVycy0+c2V0RmlsdGVyKG51bGxwdHIpOworICAgICAgICAgICAgbV9maWx0ZXJzLT5jbGVhckZp
bHRlcigpOwogCiAgICAgICAgIC8vIEVhcmx5LXJldHVybiBvbmx5IGlmIHdlICpkb24ndCogaGF2
ZSByZWZlcmVuY2UgZmlsdGVycy4KICAgICAgICAgLy8gRm9yIHJlZmVyZW5jZSBmaWx0ZXJzLCB3
ZSBzdGlsbCB3YW50IHRoZSBGaWx0ZXJFZmZlY3QgZ3JhcGggYnVpbHQKQEAgLTU3MDgsMTMgKzU3
MDgsMTUgQEAgdm9pZCBSZW5kZXJMYXllcjo6dXBkYXRlRmlsdGVyUGFpbnRpbmdTdHJhdGVneSgp
CiAgICAgfQogICAgIAogICAgIGVuc3VyZUxheWVyRmlsdGVycygpOwotICAgIG1fZmlsdGVycy0+
YnVpbGRGaWx0ZXIocmVuZGVyZXIoKSwgcGFnZSgpLmRldmljZVNjYWxlRmFjdG9yKCksIHJlbmRl
cmVyKCkucGFnZSgpLmFjY2VsZXJhdGVkRmlsdGVyc0VuYWJsZWQoKSA/IFJlbmRlcmluZ01vZGU6
OkFjY2VsZXJhdGVkIDogUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCk7CisgICAgbV9maWx0
ZXJzLT5zZXRSZW5kZXJpbmdNb2RlKHJlbmRlcmVyKCkucGFnZSgpLmFjY2VsZXJhdGVkRmlsdGVy
c0VuYWJsZWQoKSA/IFJlbmRlcmluZ01vZGU6OkFjY2VsZXJhdGVkIDogUmVuZGVyaW5nTW9kZTo6
VW5hY2NlbGVyYXRlZCk7CisgICAgbV9maWx0ZXJzLT5zZXRGaWx0ZXJTY2FsZSh7IHBhZ2UoKS5k
ZXZpY2VTY2FsZUZhY3RvcigpLCBwYWdlKCkuZGV2aWNlU2NhbGVGYWN0b3IoKSB9KTsKKyAgICBt
X2ZpbHRlcnMtPmNhbGN1bGF0ZU91dHNldHMocmVuZGVyZXIoKSk7CiB9CiAKIEludE91dHNldHMg
UmVuZGVyTGF5ZXI6OmZpbHRlck91dHNldHMoKSBjb25zdAogewogICAgIGlmIChtX2ZpbHRlcnMp
Ci0gICAgICAgIHJldHVybiBtX2ZpbHRlcnMtPmZpbHRlcigpID8gbV9maWx0ZXJzLT5maWx0ZXIo
KS0+b3V0c2V0cygpIDogSW50T3V0c2V0cygpOworICAgICAgICByZXR1cm4gbV9maWx0ZXJzLT5v
dXRzZXRzKCk7CiAgICAgcmV0dXJuIHJlbmRlcmVyKCkuc3R5bGUoKS5maWx0ZXJPdXRzZXRzKCk7
CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckZp
bHRlcnMuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyRmlsdGVycy5j
cHAKaW5kZXggMGU4MWViZDJiMjYxY2EwMjczNmI0MjJkN2NjZGVmOGNkZGZkNzRlMy4uNDFkNjZk
NmRmMWNmZmY4MTNmMmYwYjEwMGM5MTY3NmZjNTViYWM1OCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyRmlsdGVycy5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckxheWVyRmlsdGVycy5jcHAKQEAgLTUwLDExICs1MCw2IEBAIFJl
bmRlckxheWVyRmlsdGVyczo6flJlbmRlckxheWVyRmlsdGVycygpCiAgICAgcmVtb3ZlUmVmZXJl
bmNlRmlsdGVyQ2xpZW50cygpOwogfQogCi12b2lkIFJlbmRlckxheWVyRmlsdGVyczo6c2V0Rmls
dGVyKFJlZlB0cjxDU1NGaWx0ZXI+JiYgZmlsdGVyKQotewotICAgIG1fZmlsdGVyID0gV1RGTW92
ZShmaWx0ZXIpOwotfQotCiBib29sIFJlbmRlckxheWVyRmlsdGVyczo6aGFzRmlsdGVyVGhhdE1v
dmVzUGl4ZWxzKCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9maWx0ZXIgJiYgbV9maWx0ZXItPmhh
c0ZpbHRlclRoYXRNb3Zlc1BpeGVscygpOwpAQCAtMTE2LDEyICsxMTEsOSBAQCB2b2lkIFJlbmRl
ckxheWVyRmlsdGVyczo6cmVtb3ZlUmVmZXJlbmNlRmlsdGVyQ2xpZW50cygpCiAgICAgbV9pbnRl
cm5hbFNWR1JlZmVyZW5jZXMuY2xlYXIoKTsKIH0KIAotdm9pZCBSZW5kZXJMYXllckZpbHRlcnM6
OmJ1aWxkRmlsdGVyKFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyLCBmbG9hdCBzY2FsZUZhY3Rvciwg
UmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlKQordm9pZCBSZW5kZXJMYXllckZpbHRlcnM6OmNh
bGN1bGF0ZU91dHNldHMoUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIpCiB7Ci0gICAgLy8gSWYgdGhl
IGZpbHRlciBmYWlscyB0byBidWlsZCwgcmVtb3ZlIGl0IGZyb20gdGhlIGxheWVyLiBJdCB3aWxs
IHN0aWxsIGF0dGVtcHQgdG8KLSAgICAvLyBnbyB0aHJvdWdoIHJlZ3VsYXIgcHJvY2Vzc2luZyAo
ZS5nLiBjb21wb3NpdGluZyksIGJ1dCBuZXZlciBhcHBseSBhbnl0aGluZy4KLSAgICAvLyBGSVhN
RTogVGhpcyByZWJ1aWxkcyB0aGUgZW50aXJlIGVmZmVjdHMgY2hhaW4gZXZlbiBpZiB0aGUgZmls
dGVyIHN0eWxlIGRpZG4ndCBjaGFuZ2UuCi0gICAgbV9maWx0ZXIgPSBDU1NGaWx0ZXI6OmNyZWF0
ZShyZW5kZXJlciwgcmVuZGVyZXIuc3R5bGUoKS5maWx0ZXIoKSwgcmVuZGVyaW5nTW9kZSwgRmxv
YXRTaXplIHsgc2NhbGVGYWN0b3IsIHNjYWxlRmFjdG9yIH0sIEZpbHRlcjo6Q2xpcE9wZXJhdGlv
bjo6VW5pdGUsIG1fdGFyZ2V0Qm91bmRpbmdCb3gpOworICAgIG1fb3V0c2V0cyA9IENTU0ZpbHRl
cjo6Y2FsY3VsYXRlT3V0c2V0cyhyZW5kZXJlciwgcmVuZGVyZXIuc3R5bGUoKS5maWx0ZXIoKSk7
CiB9CiAKIEdyYXBoaWNzQ29udGV4dCogUmVuZGVyTGF5ZXJGaWx0ZXJzOjppbnB1dENvbnRleHQo
KQpAQCAtMTQwLDE4ICsxMzIsMTUgQEAgdm9pZCBSZW5kZXJMYXllckZpbHRlcnM6OmFsbG9jYXRl
QmFja2luZ1N0b3JlSWZOZWVkZWQoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQogCiBHcmFwaGlj
c0NvbnRleHQqIFJlbmRlckxheWVyRmlsdGVyczo6YmVnaW5GaWx0ZXJFZmZlY3QoUmVuZGVyRWxl
bWVudCYgcmVuZGVyZXIsIEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgTGF5b3V0UmVj
dCYgZmlsdGVyQm94UmVjdCwgY29uc3QgTGF5b3V0UmVjdCYgZGlydHlSZWN0LCBjb25zdCBMYXlv
dXRSZWN0JiBsYXllclJlcGFpbnRSZWN0KQogewotICAgIGlmICghbV9maWx0ZXIpCi0gICAgICAg
IHJldHVybiBudWxscHRyOwotCiAgICAgLy8gQ2FsY3VsYXRlIHRhcmdldEJvdW5kaW5nQm94IHNp
bmNlIGl0IHdpbGwgYmUgdXNlZCBpZiB0aGUgZmlsdGVyIGlzIGNyZWF0ZWQuCiAgICAgYXV0byB0
YXJnZXRCb3VuZGluZ0JveCA9IGludGVyc2VjdGlvbihmaWx0ZXJCb3hSZWN0LCBkaXJ0eVJlY3Qp
OwogICAgIGlmICh0YXJnZXRCb3VuZGluZ0JveC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBu
dWxscHRyOwogCi0gICAgaWYgKG1fdGFyZ2V0Qm91bmRpbmdCb3ggIT0gdGFyZ2V0Qm91bmRpbmdC
b3gpIHsKKyAgICBpZiAoIW1fZmlsdGVyIHx8IG1fdGFyZ2V0Qm91bmRpbmdCb3ggIT0gdGFyZ2V0
Qm91bmRpbmdCb3gpIHsKICAgICAgICAgbV90YXJnZXRCb3VuZGluZ0JveCA9IHRhcmdldEJvdW5k
aW5nQm94OwogICAgICAgICAvLyBGSVhNRTogVGhpcyByZWJ1aWxkcyB0aGUgZW50aXJlIGVmZmVj
dHMgY2hhaW4gZXZlbiBpZiB0aGUgZmlsdGVyIHN0eWxlIGRpZG4ndCBjaGFuZ2UuCi0gICAgICAg
IG1fZmlsdGVyID0gQ1NTRmlsdGVyOjpjcmVhdGUocmVuZGVyZXIsIHJlbmRlcmVyLnN0eWxlKCku
ZmlsdGVyKCksIG1fZmlsdGVyLT5yZW5kZXJpbmdNb2RlKCksIG1fZmlsdGVyLT5maWx0ZXJTY2Fs
ZSgpLCBGaWx0ZXI6OkNsaXBPcGVyYXRpb246OlVuaXRlLCBtX3RhcmdldEJvdW5kaW5nQm94KTsK
KyAgICAgICAgbV9maWx0ZXIgPSBDU1NGaWx0ZXI6OmNyZWF0ZShyZW5kZXJlciwgcmVuZGVyZXIu
c3R5bGUoKS5maWx0ZXIoKSwgbV9yZW5kZXJpbmdNb2RlLCBtX2ZpbHRlclNjYWxlLCBGaWx0ZXI6
OkNsaXBPcGVyYXRpb246OlVuaXRlLCBtX3RhcmdldEJvdW5kaW5nQm94KTsKICAgICB9CiAKICAg
ICBpZiAoIW1fZmlsdGVyKQpAQCAtMTYyLDcgKzE1MSw3IEBAIEdyYXBoaWNzQ29udGV4dCogUmVu
ZGVyTGF5ZXJGaWx0ZXJzOjpiZWdpbkZpbHRlckVmZmVjdChSZW5kZXJFbGVtZW50JiByZW5kZXJl
ciwKICAgICAvLyBGb3IgQ1NTRmlsdGVyLCBmaWx0ZXJSZWdpb24gPSB0YXJnZXRCb3VuZGluZ0Jv
eCArIGZpbHRlci0+b3V0c2V0cygpCiAgICAgYXV0byBmaWx0ZXJSZWdpb24gPSB0YXJnZXRCb3Vu
ZGluZ0JveDsKICAgICBpZiAoZmlsdGVyLmhhc0ZpbHRlclRoYXRNb3Zlc1BpeGVscygpKQotICAg
ICAgICBmaWx0ZXJSZWdpb24uZXhwYW5kKHRvTGF5b3V0Qm94RXh0ZW50KGZpbHRlci5vdXRzZXRz
KCkpKTsKKyAgICAgICAgZmlsdGVyUmVnaW9uLmV4cGFuZCh0b0xheW91dEJveEV4dGVudChtX291
dHNldHMpKTsKIAogICAgIGlmIChmaWx0ZXJSZWdpb24uaXNFbXB0eSgpKQogICAgICAgICByZXR1
cm4gbnVsbHB0cjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJM
YXllckZpbHRlcnMuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckZpbHRl
cnMuaAppbmRleCAwNTEzYzg4NWI0MGI3NWUwMTMyZjNlYWRmZWY2MGM3ODY3ODliOWQ4Li44YTQ4
ZGQwOTdjN2Y0Yjk5Y2RjNTRlZGNhNzUyZTc1MGE5ODRiNjVlIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJGaWx0ZXJzLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckxheWVyRmlsdGVycy5oCkBAIC01MCw3ICs1MCw3IEBAIHB1Ymxp
YzoKICAgICB2b2lkIGV4cGFuZERpcnR5U291cmNlUmVjdChjb25zdCBMYXlvdXRSZWN0JiByZWN0
KSB7IG1fZGlydHlTb3VyY2VSZWN0LnVuaXRlKHJlY3QpOyB9CiAKICAgICBDU1NGaWx0ZXIqIGZp
bHRlcigpIGNvbnN0IHsgcmV0dXJuIG1fZmlsdGVyLmdldCgpOyB9Ci0gICAgdm9pZCBzZXRGaWx0
ZXIoUmVmUHRyPENTU0ZpbHRlcj4mJik7CisgICAgdm9pZCBjbGVhckZpbHRlcigpIHsgbV9maWx0
ZXIgPSBudWxscHRyOyB9CiAgICAgCiAgICAgYm9vbCBoYXNGaWx0ZXJUaGF0TW92ZXNQaXhlbHMo
KSBjb25zdDsKICAgICBib29sIGhhc0ZpbHRlclRoYXRTaG91bGRCZVJlc3RyaWN0ZWRCeVNlY3Vy
aXR5T3JpZ2luKCkgY29uc3Q7CkBAIC01OCw3ICs1OCwxMSBAQCBwdWJsaWM6CiAgICAgdm9pZCB1
cGRhdGVSZWZlcmVuY2VGaWx0ZXJDbGllbnRzKGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmKTsKICAg
ICB2b2lkIHJlbW92ZVJlZmVyZW5jZUZpbHRlckNsaWVudHMoKTsKIAotICAgIHZvaWQgYnVpbGRG
aWx0ZXIoUmVuZGVyRWxlbWVudCYsIGZsb2F0IHNjYWxlRmFjdG9yLCBSZW5kZXJpbmdNb2RlKTsK
KyAgICB2b2lkIHNldFJlbmRlcmluZ01vZGUoUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlKSB7
IG1fcmVuZGVyaW5nTW9kZSA9IHJlbmRlcmluZ01vZGU7IH0KKyAgICB2b2lkIHNldEZpbHRlclNj
YWxlKGNvbnN0IEZsb2F0U2l6ZSYgZmlsdGVyU2NhbGUpIHsgbV9maWx0ZXJTY2FsZSA9IGZpbHRl
clNjYWxlOyB9CisKKyAgICB2b2lkIGNhbGN1bGF0ZU91dHNldHMoUmVuZGVyRWxlbWVudCYpOwor
ICAgIEludE91dHNldHMgb3V0c2V0cygpIGNvbnN0IHsgcmV0dXJuIG1fb3V0c2V0czsgfQogCiAg
ICAgLy8gUGVyIHJlbmRlcgogICAgIExheW91dFJlY3QgcmVwYWludFJlY3QoKSBjb25zdCB7IHJl
dHVybiBtX3JlcGFpbnRSZWN0OyB9CkBAIC03Myw2ICs3Nyw5IEBAIHByaXZhdGU6CiAgICAgdm9p
ZCBhbGxvY2F0ZUJhY2tpbmdTdG9yZUlmTmVlZGVkKEdyYXBoaWNzQ29udGV4dCYpOwogCiAgICAg
UmVuZGVyTGF5ZXImIG1fbGF5ZXI7CisgICAgUmVuZGVyaW5nTW9kZSBtX3JlbmRlcmluZ01vZGUg
eyBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkIH07CisgICAgRmxvYXRTaXplIG1fZmlsdGVy
U2NhbGUgeyAxLCAxIH07CisgICAgSW50T3V0c2V0cyBtX291dHNldHM7CiAKICAgICBWZWN0b3I8
UmVmUHRyPEVsZW1lbnQ+PiBtX2ludGVybmFsU1ZHUmVmZXJlbmNlczsKICAgICBWZWN0b3I8Q2Fj
aGVkUmVzb3VyY2VIYW5kbGU8Q2FjaGVkU1ZHRG9jdW1lbnQ+PiBtX2V4dGVybmFsU1ZHUmVmZXJl
bmNlczsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZH
UmVzb3VyY2VGaWx0ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJT
VkdSZXNvdXJjZUZpbHRlci5jcHAKaW5kZXggNTVkNWVkNTdlM2VkNGQ5NzM5OGRkODIyNzMxM2Vk
MGQzNDUwMzI5Mi4uOGQ1ZGJkOTNkYjkwMDJiOTdhYjM5ZDBmNThjODFhOWI3MDA2Y2RkMSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZp
bHRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNv
dXJjZUZpbHRlci5jcHAKQEAgLTEyOSw3ICsxMjksNyBAQCBib29sIFJlbmRlclNWR1Jlc291cmNl
RmlsdGVyOjphcHBseVJlc291cmNlKFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyLCBjb25zdCBSZW5k
ZQogICAgIGF1dG8gcmVuZGVyaW5nTW9kZSA9IHJlbmRlcmVyLnBhZ2UoKS5hY2NlbGVyYXRlZEZp
bHRlcnNFbmFibGVkKCkgPyBSZW5kZXJpbmdNb2RlOjpBY2NlbGVyYXRlZCA6IFJlbmRlcmluZ01v
ZGU6OlVuYWNjZWxlcmF0ZWQ7CiAKICAgICAvLyBDcmVhdGUgdGhlIFNWR0ZpbHRlciBvYmplY3Qu
Ci0gICAgZmlsdGVyRGF0YS0+YnVpbGRlciA9IG1ha2VVbmlxdWU8U1ZHRmlsdGVyQnVpbGRlcj4o
KTsKKyAgICBmaWx0ZXJEYXRhLT5idWlsZGVyID0gbWFrZVVuaXF1ZTxTVkdGaWx0ZXJCdWlsZGVy
Pih0YXJnZXRCb3VuZGluZ0JveCwgZmlsdGVyRWxlbWVudCgpLnByaW1pdGl2ZVVuaXRzKCkpOwog
ICAgIGZpbHRlckRhdGEtPmZpbHRlciA9IFNWR0ZpbHRlcjo6Y3JlYXRlKGZpbHRlckVsZW1lbnQo
KSwgKmZpbHRlckRhdGEtPmJ1aWxkZXIsIHJlbmRlcmluZ01vZGUsIGZpbHRlclNjYWxlLCBGaWx0
ZXI6OkNsaXBPcGVyYXRpb246OkludGVyc2VjdCwgZmlsdGVyRGF0YS0+Ym91bmRhcmllcywgdGFy
Z2V0Qm91bmRpbmdCb3gpOwogICAgIGlmICghZmlsdGVyRGF0YS0+ZmlsdGVyKSB7CiAgICAgICAg
IG1fcmVuZGVyZXJGaWx0ZXJEYXRhTWFwLnJlbW92ZSgmcmVuZGVyZXIpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJUcmVlQXNUZXh0LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyVHJlZUFzVGV4dC5jcHAKaW5kZXgg
ODczMzAxNDdmMTQxYzE2YzA4Y2UwMTVlNzgxMTkwYjhiNjRmYmI4OC4uYTFjOTZkZWI4YzRiNmY2
M2E1YTEyMzg0OTdjMDhjNjFkNGRmMGM3MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3N2Zy9TVkdSZW5kZXJUcmVlQXNUZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3ZnL1NWR1JlbmRlclRyZWVBc1RleHQuY3BwCkBAIC00NzcsNyArNDc3LDcgQEAg
dm9pZCB3cml0ZVNWR1Jlc291cmNlQ29udGFpbmVyKFRleHRTdHJlYW0mIHRzLCBjb25zdCBSZW5k
ZXJTVkdSZXNvdXJjZUNvbnRhaW5lciYKICAgICAgICAgLy8gQ3JlYXRpbmcgYSBwbGFjZWhvbGRl
ciBmaWx0ZXIgd2hpY2ggaXMgcGFzc2VkIHRvIHRoZSBidWlsZGVyLgogICAgICAgICBGbG9hdFJl
Y3QgZHVtbXlSZWN0OwogICAgICAgICBGbG9hdFNpemUgZHVtbXlTY2FsZSgxLCAxKTsKLSAgICAg
ICAgU1ZHRmlsdGVyQnVpbGRlciBidWlsZGVyOworICAgICAgICBTVkdGaWx0ZXJCdWlsZGVyIGJ1
aWxkZXIoZHVtbXlSZWN0KTsKICAgICAgICAgYXV0byBkdW1teUZpbHRlciA9IFNWR0ZpbHRlcjo6
Y3JlYXRlKGZpbHRlci5maWx0ZXJFbGVtZW50KCksIGJ1aWxkZXIsIFJlbmRlcmluZ01vZGU6OlVu
YWNjZWxlcmF0ZWQsIGR1bW15U2NhbGUsIEZpbHRlcjo6Q2xpcE9wZXJhdGlvbjo6SW50ZXJzZWN0
LCBkdW1teVJlY3QsIGR1bW15UmVjdCk7CiAgICAgICAgIGlmIChkdW1teUZpbHRlcikgewogICAg
ICAgICAgICAgVGV4dFN0cmVhbTo6SW5kZW50U2NvcGUgaW5kZW50U2NvcGUodHMpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRHJvcFNoYWRvd0VsZW1lbnQuY3BwIGIvU291
cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRHJvcFNoYWRvd0VsZW1lbnQuY3BwCmluZGV4IGUxYWNkZjA5
ZjM5MmUyYmNhMTdiMWE0NGU2NzJhNzc5ODIwNGFiYmYuLjZhODRkNmNiNTU5ZGEzYmU3YjEyMzIy
YWZiMDQ1ZDBmYTFkZGViNGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRURy
b3BTaGFkb3dFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVEcm9wU2hh
ZG93RWxlbWVudC5jcHAKQEAgLTk2LDYgKzk2LDEzIEBAIHZvaWQgU1ZHRkVEcm9wU2hhZG93RWxl
bWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkK
ICAgICBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OnN2Z0F0dHJpYnV0ZUNo
YW5nZWQoYXR0ck5hbWUpOwogfQogCitJbnRPdXRzZXRzIFNWR0ZFRHJvcFNoYWRvd0VsZW1lbnQ6
Om91dHNldHMoY29uc3QgRmxvYXRSZWN0JiB0YXJnZXRCb3VuZGluZ0JveCwgU1ZHVW5pdFR5cGVz
OjpTVkdVbml0VHlwZSBwcmltaXRpdmVVbml0cykgY29uc3QKK3sKKyAgICBhdXRvIG9mZnNldCA9
IFNWR0ZpbHRlcjo6Y2FsY3VsYXRlUmVzb2x2ZWRTaXplKHsgZHgoKSwgZHkoKSB9LCB0YXJnZXRC
b3VuZGluZ0JveCwgcHJpbWl0aXZlVW5pdHMpOworICAgIGF1dG8gc3RkRGV2aWF0aW9uID0gU1ZH
RmlsdGVyOjpjYWxjdWxhdGVSZXNvbHZlZFNpemUoeyBzdGREZXZpYXRpb25YKCksIHN0ZERldmlh
dGlvblkoKSB9LCB0YXJnZXRCb3VuZGluZ0JveCwgcHJpbWl0aXZlVW5pdHMpOworICAgIHJldHVy
biBGRURyb3BTaGFkb3c6OmNhbGN1bGF0ZU91dHNldHMob2Zmc2V0LCBzdGREZXZpYXRpb24pOwor
fQorCiBSZWZQdHI8RmlsdGVyRWZmZWN0PiBTVkdGRURyb3BTaGFkb3dFbGVtZW50OjpmaWx0ZXJF
ZmZlY3QoY29uc3QgU1ZHRmlsdGVyQnVpbGRlciYsIGNvbnN0IEZpbHRlckVmZmVjdFZlY3RvciYp
IGNvbnN0CiB7CiAgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IHRoaXMtPnJlbmRlcmVyKCk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVEcm9wU2hhZG93RWxlbWVudC5o
IGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRHJvcFNoYWRvd0VsZW1lbnQuaAppbmRleCA0OWJl
ZjBhM2U0YzcyZmE5ZTJmMzNhNzZhOTU5ZmRlZjRmMzYyMWM4Li41YTFlNzZkYjkyZGQwMWRlMzZl
ZDIwMzUwZWI0NzllNWIyODcwZWRkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
RkVEcm9wU2hhZG93RWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRURyb3BT
aGFkb3dFbGVtZW50LmgKQEAgLTU0LDYgKzU0LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIHN2Z0F0
dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYpIG92ZXJyaWRlOwogCiAgICAgVmVj
dG9yPEF0b21TdHJpbmc+IGZpbHRlckVmZmVjdElucHV0c05hbWVzKCkgY29uc3Qgb3ZlcnJpZGUg
eyByZXR1cm4geyBpbjEoKSB9OyB9CisgICAgSW50T3V0c2V0cyBvdXRzZXRzKGNvbnN0IEZsb2F0
UmVjdCYgdGFyZ2V0Qm91bmRpbmdCb3gsIFNWR1VuaXRUeXBlczo6U1ZHVW5pdFR5cGUgcHJpbWl0
aXZlVW5pdHMpIGNvbnN0IG92ZXJyaWRlOwogICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGZpbHRl
ckVmZmVjdChjb25zdCBTVkdGaWx0ZXJCdWlsZGVyJiwgY29uc3QgRmlsdGVyRWZmZWN0VmVjdG9y
JikgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICBQcm9wZXJ0eVJlZ2lzdHJ5IG1fcHJvcGVydHlSZWdp
c3RyeSB7ICp0aGlzIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVHYXVz
c2lhbkJsdXJFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUdhdXNzaWFuQmx1
ckVsZW1lbnQuY3BwCmluZGV4IDA3M2JkNzI0YmI5ZTM1ZjBiODBkNjJkZjljMDI5NTUzMmU5Njlk
MjcuLmNiYmExOWIwNzA3N2JjNjgwOGVmZDA1MGYzYjA2ZTM0Y2E0MjhmNGYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQuY3BwCkBAIC05NCw2ICs5
NCwxMiBAQCB2b2lkIFNWR0ZFR2F1c3NpYW5CbHVyRWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdl
ZChjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZQogICAgIFNWR0ZpbHRlclByaW1pdGl2ZVN0
YW5kYXJkQXR0cmlidXRlczo6c3ZnQXR0cmlidXRlQ2hhbmdlZChhdHRyTmFtZSk7CiB9CiAKK0lu
dE91dHNldHMgU1ZHRkVHYXVzc2lhbkJsdXJFbGVtZW50OjpvdXRzZXRzKGNvbnN0IEZsb2F0UmVj
dCYgdGFyZ2V0Qm91bmRpbmdCb3gsIFNWR1VuaXRUeXBlczo6U1ZHVW5pdFR5cGUgcHJpbWl0aXZl
VW5pdHMpIGNvbnN0Cit7CisgICAgYXV0byBzdGREZXZpYXRpb24gPSBTVkdGaWx0ZXI6OmNhbGN1
bGF0ZVJlc29sdmVkU2l6ZSh7IHN0ZERldmlhdGlvblgoKSwgc3RkRGV2aWF0aW9uWSgpIH0sIHRh
cmdldEJvdW5kaW5nQm94LCBwcmltaXRpdmVVbml0cyk7CisgICAgcmV0dXJuIEZFR2F1c3NpYW5C
bHVyOjpjYWxjdWxhdGVPdXRzZXRzKHN0ZERldmlhdGlvbik7Cit9CisKIFJlZlB0cjxGaWx0ZXJF
ZmZlY3Q+IFNWR0ZFR2F1c3NpYW5CbHVyRWxlbWVudDo6ZmlsdGVyRWZmZWN0KGNvbnN0IFNWR0Zp
bHRlckJ1aWxkZXImLCBjb25zdCBGaWx0ZXJFZmZlY3RWZWN0b3ImKSBjb25zdAogewogICAgIGlm
IChzdGREZXZpYXRpb25YKCkgPCAwIHx8IHN0ZERldmlhdGlvblkoKSA8IDApCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVHYXVzc2lhbkJsdXJFbGVtZW50LmggYi9Tb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHRkVHYXVzc2lhbkJsdXJFbGVtZW50LmgKaW5kZXggNTIxYWUyMDRlYjRm
NTJjNmQzNzk5OWU0NGUyMmIwNTI4OGI4MzJiMi4uMTM2ZjQ0MjkyZTk3M2Q2MWFjODlmZmQ2YzA0
ZThmYWQwMDFhNGY0NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFR2F1c3Np
YW5CbHVyRWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUdhdXNzaWFuQmx1
ckVsZW1lbnQuaApAQCAtNTQsNiArNTQsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgc3ZnQXR0cmli
dXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJikgb3ZlcnJpZGU7CiAKICAgICBWZWN0b3I8
QXRvbVN0cmluZz4gZmlsdGVyRWZmZWN0SW5wdXRzTmFtZXMoKSBjb25zdCBvdmVycmlkZSB7IHJl
dHVybiB7IGluMSgpIH07IH0KKyAgICBJbnRPdXRzZXRzIG91dHNldHMoY29uc3QgRmxvYXRSZWN0
JiB0YXJnZXRCb3VuZGluZ0JveCwgU1ZHVW5pdFR5cGVzOjpTVkdVbml0VHlwZSBwcmltaXRpdmVV
bml0cykgY29uc3Qgb3ZlcnJpZGU7CiAgICAgUmVmUHRyPEZpbHRlckVmZmVjdD4gZmlsdGVyRWZm
ZWN0KGNvbnN0IFNWR0ZpbHRlckJ1aWxkZXImLCBjb25zdCBGaWx0ZXJFZmZlY3RWZWN0b3ImKSBj
b25zdCBvdmVycmlkZTsKIAogICAgIFByb3BlcnR5UmVnaXN0cnkgbV9wcm9wZXJ0eVJlZ2lzdHJ5
IHsgKnRoaXMgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRU9mZnNldEVs
ZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFT2Zmc2V0RWxlbWVudC5jcHAKaW5k
ZXggZWI2ZDdjYmY4ZDgwYzZhYjhjMmY4ZTkwNGM1N2E4M2Y3ZjIwYmU0YS4uYTk5OGQyZmRkNjFj
NjY0YmUxYjZiN2QyMDJkMzQxM2IzZTE3OWNhZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0ZFT2Zmc2V0RWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZF
T2Zmc2V0RWxlbWVudC5jcHAKQEAgLTc5LDYgKzc5LDEyIEBAIHZvaWQgU1ZHRkVPZmZzZXRFbGVt
ZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQog
ICAgIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6c3ZnQXR0cmlidXRlQ2hh
bmdlZChhdHRyTmFtZSk7CiB9CiAKK0ludE91dHNldHMgU1ZHRkVPZmZzZXRFbGVtZW50OjpvdXRz
ZXRzKGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0Qm91bmRpbmdCb3gsIFNWR1VuaXRUeXBlczo6U1ZH
VW5pdFR5cGUgcHJpbWl0aXZlVW5pdHMpIGNvbnN0Cit7CisgICAgYXV0byBvZmZzZXQgPSBTVkdG
aWx0ZXI6OmNhbGN1bGF0ZVJlc29sdmVkU2l6ZSh7IGR4KCksIGR5KCkgfSwgdGFyZ2V0Qm91bmRp
bmdCb3gsIHByaW1pdGl2ZVVuaXRzKTsKKyAgICByZXR1cm4gRkVPZmZzZXQ6OmNhbGN1bGF0ZU91
dHNldHMob2Zmc2V0KTsKK30KKwogUmVmUHRyPEZpbHRlckVmZmVjdD4gU1ZHRkVPZmZzZXRFbGVt
ZW50OjpmaWx0ZXJFZmZlY3QoY29uc3QgU1ZHRmlsdGVyQnVpbGRlciYsIGNvbnN0IEZpbHRlckVm
ZmVjdFZlY3RvciYpIGNvbnN0CiB7CiAgICAgcmV0dXJuIEZFT2Zmc2V0OjpjcmVhdGUoZHgoKSwg
ZHkoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVPZmZzZXRFbGVtZW50
LmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVPZmZzZXRFbGVtZW50LmgKaW5kZXggZjg1OTU5
OGEwZmU2YTBkN2E4ODRiMGMwYzViOThiZWYyY2Y0N2JiZC4uMTU2ZWRkZjQ2OTlkYmM2YTIyNWZi
YTU5ZTAyOThkNmU3OWY3YjA4YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZF
T2Zmc2V0RWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRU9mZnNldEVsZW1l
bnQuaApAQCAtNDgsNiArNDgsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgc3ZnQXR0cmlidXRlQ2hh
bmdlZChjb25zdCBRdWFsaWZpZWROYW1lJikgb3ZlcnJpZGU7CiAKICAgICBWZWN0b3I8QXRvbVN0
cmluZz4gZmlsdGVyRWZmZWN0SW5wdXRzTmFtZXMoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB7
IGluMSgpIH07IH0KKyAgICBJbnRPdXRzZXRzIG91dHNldHMoY29uc3QgRmxvYXRSZWN0JiB0YXJn
ZXRCb3VuZGluZ0JveCwgU1ZHVW5pdFR5cGVzOjpTVkdVbml0VHlwZSBwcmltaXRpdmVVbml0cykg
Y29uc3Qgb3ZlcnJpZGU7CiAgICAgUmVmUHRyPEZpbHRlckVmZmVjdD4gZmlsdGVyRWZmZWN0KGNv
bnN0IFNWR0ZpbHRlckJ1aWxkZXImLCBjb25zdCBGaWx0ZXJFZmZlY3RWZWN0b3ImKSBjb25zdCBv
dmVycmlkZTsKIAogICAgIFByb3BlcnR5UmVnaXN0cnkgbV9wcm9wZXJ0eVJlZ2lzdHJ5IHsgKnRo
aXMgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGaWx0ZXJQcmltaXRpdmVT
dGFuZGFyZEF0dHJpYnV0ZXMuaCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGaWx0ZXJQcmltaXRp
dmVTdGFuZGFyZEF0dHJpYnV0ZXMuaAppbmRleCA3OGUyYWEyYzFlODE0ZTY5OGVkNDQ0ZWVjNzdm
OWIyMDc2ZTNmOTU1Li41MDBiMWViODlkZDlkMGEwM2NjOWU0YzA4MzgyY2U1NDNhY2U2NzRhIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRB
dHRyaWJ1dGVzLmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZpbHRlclByaW1pdGl2ZVN0
YW5kYXJkQXR0cmlidXRlcy5oCkBAIC01Myw2ICs1Myw3IEBAIHB1YmxpYzoKICAgICAvLyBSZXR1
cm5zIHRydWUsIGlmIHRoZSBuZXcgdmFsdWUgaXMgZGlmZmVyZW50IGZyb20gdGhlIG9sZCBvbmUu
CiAgICAgdmlydHVhbCBib29sIHNldEZpbHRlckVmZmVjdEF0dHJpYnV0ZShGaWx0ZXJFZmZlY3Qq
LCBjb25zdCBRdWFsaWZpZWROYW1lJik7CiAgICAgdmlydHVhbCBWZWN0b3I8QXRvbVN0cmluZz4g
ZmlsdGVyRWZmZWN0SW5wdXRzTmFtZXMoKSBjb25zdCB7IHJldHVybiB7IH07IH0KKyAgICB2aXJ0
dWFsIEludE91dHNldHMgb3V0c2V0cyhjb25zdCBGbG9hdFJlY3QmLCBTVkdVbml0VHlwZXM6OlNW
R1VuaXRUeXBlKSBjb25zdCB7IHJldHVybiB7IH07IH0KICAgICB2aXJ0dWFsIFJlZlB0cjxGaWx0
ZXJFZmZlY3Q+IGZpbHRlckVmZmVjdChjb25zdCBTVkdGaWx0ZXJCdWlsZGVyJiwgY29uc3QgRmls
dGVyRWZmZWN0VmVjdG9yJikgY29uc3QgPSAwOwogCiAgICAgc3RhdGljIHZvaWQgaW52YWxpZGF0
ZUZpbHRlclByaW1pdGl2ZVBhcmVudChTVkdFbGVtZW50Kik7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXIuY3BwIGIvU291cmNlL1dlYkNv
cmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyLmNwcAppbmRleCA5NWYyNGE3ZGQ5ZTY0
ZWVkMDZiNThiNTI5YTg1MDBkZjlhOGNmOTYzLi41MTAxNTYwM2IxNTU4NTA4NWU0NTAyMTM4YTNm
YTA3ZGNiOGM3MWE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmls
dGVycy9TVkdGaWx0ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0
ZXJzL1NWR0ZpbHRlci5jcHAKQEAgLTM0LDE5ICszNCwxMiBAQCBSZWZQdHI8U1ZHRmlsdGVyPiBT
VkdGaWx0ZXI6OmNyZWF0ZShTVkdGaWx0ZXJFbGVtZW50JiBmaWx0ZXJFbGVtZW50LCBTVkdGaWx0
ZXJCdQogewogICAgIGF1dG8gZmlsdGVyID0gYWRvcHRSZWYoKm5ldyBTVkdGaWx0ZXIocmVuZGVy
aW5nTW9kZSwgZmlsdGVyU2NhbGUsIGNsaXBPcGVyYXRpb24sIGZpbHRlclJlZ2lvbiwgdGFyZ2V0
Qm91bmRpbmdCb3gsIGZpbHRlckVsZW1lbnQucHJpbWl0aXZlVW5pdHMoKSkpOwogCi0gICAgYnVp
bGRlci5zZXR1cEJ1aWx0aW5FZmZlY3RzKFNvdXJjZUdyYXBoaWM6OmNyZWF0ZSgpKTsKLSAgICBi
dWlsZGVyLnNldFRhcmdldEJvdW5kaW5nQm94KHRhcmdldEJvdW5kaW5nQm94KTsKLSAgICBidWls
ZGVyLnNldFByaW1pdGl2ZVVuaXRzKGZpbHRlckVsZW1lbnQucHJpbWl0aXZlVW5pdHMoKSk7Ci0K
LSAgICBpZiAoIWJ1aWxkZXIuYnVpbGRGaWx0ZXJFZmZlY3RzKGZpbHRlckVsZW1lbnQpKQotICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIFNWR0ZpbHRlckV4cHJlc3Npb24gZXhwcmVzc2lv
bjsKLSAgICBpZiAoIWJ1aWxkZXIuYnVpbGRFeHByZXNzaW9uKGV4cHJlc3Npb24pKQorICAgIGF1
dG8gZXhwcmVzc2lvbiA9IGJ1aWxkZXIuYnVpbGRGaWx0ZXJFeHByZXNzaW9uKGZpbHRlckVsZW1l
bnQpOworICAgIGlmICghZXhwcmVzc2lvbikKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAg
ICBBU1NFUlQoIWV4cHJlc3Npb24uaXNFbXB0eSgpKTsKLSAgICBmaWx0ZXItPnNldEV4cHJlc3Np
b24oV1RGTW92ZShleHByZXNzaW9uKSk7CisgICAgQVNTRVJUKCFleHByZXNzaW9uLT5pc0VtcHR5
KCkpOworICAgIGZpbHRlci0+c2V0RXhwcmVzc2lvbihXVEZNb3ZlKCpleHByZXNzaW9uKSk7CiAK
ICAgICBpZiAocmVuZGVyaW5nTW9kZSA9PSBSZW5kZXJpbmdNb2RlOjpBY2NlbGVyYXRlZCAmJiAh
ZmlsdGVyLT5zdXBwb3J0c0FjY2VsZXJhdGVkUmVuZGVyaW5nKCkpCiAgICAgICAgIGZpbHRlci0+
c2V0UmVuZGVyaW5nTW9kZShSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkKTsKQEAgLTc0LDkg
KzY3LDE0IEBAIFNWR0ZpbHRlcjo6U1ZHRmlsdGVyKGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0Qm91
bmRpbmdCb3gsIFNWR1VuaXRUeXBlczo6U1ZHVW5pdFR5CiB7CiB9CiAKK0Zsb2F0U2l6ZSBTVkdG
aWx0ZXI6OmNhbGN1bGF0ZVJlc29sdmVkU2l6ZShjb25zdCBGbG9hdFNpemUmIHNpemUsIGNvbnN0
IEZsb2F0UmVjdCYgdGFyZ2V0Qm91bmRpbmdCb3gsIFNWR1VuaXRUeXBlczo6U1ZHVW5pdFR5cGUg
cHJpbWl0aXZlVW5pdHMpCit7CisgICAgcmV0dXJuIHByaW1pdGl2ZVVuaXRzID09IFNWR1VuaXRU
eXBlczo6U1ZHX1VOSVRfVFlQRV9PQkpFQ1RCT1VORElOR0JPWCA/IHNpemUgKiB0YXJnZXRCb3Vu
ZGluZ0JveC5zaXplKCkgOiBzaXplOworfQorCiBGbG9hdFNpemUgU1ZHRmlsdGVyOjpyZXNvbHZl
ZFNpemUoY29uc3QgRmxvYXRTaXplJiBzaXplKSBjb25zdAogewotICAgIHJldHVybiBtX3ByaW1p
dGl2ZVVuaXRzID09IFNWR1VuaXRUeXBlczo6U1ZHX1VOSVRfVFlQRV9PQkpFQ1RCT1VORElOR0JP
WCA/IHNpemUgKiBtX3RhcmdldEJvdW5kaW5nQm94LnNpemUoKSA6IHNpemU7CisgICAgcmV0dXJu
IGNhbGN1bGF0ZVJlc29sdmVkU2l6ZShzaXplLCBtX3RhcmdldEJvdW5kaW5nQm94LCBtX3ByaW1p
dGl2ZVVuaXRzKTsKIH0KIAogYm9vbCBTVkdGaWx0ZXI6OnN1cHBvcnRzQWNjZWxlcmF0ZWRSZW5k
ZXJpbmcoKSBjb25zdApAQCAtMTQ4LDE0ICsxNDYsNiBAQCBSZWZQdHI8RmlsdGVySW1hZ2U+IFNW
R0ZpbHRlcjo6YXBwbHkoRmlsdGVySW1hZ2UqIHNvdXJjZUltYWdlLCBGaWx0ZXJSZXN1bHRzJiBy
ZQogICAgIHJldHVybiBzdGFjay50YWtlTGFzdCgpOwogfQogCi1JbnRPdXRzZXRzIFNWR0ZpbHRl
cjo6b3V0c2V0cygpIGNvbnN0Ci17Ci0gICAgSW50T3V0c2V0cyBvdXRzZXRzOwotICAgIGZvciAo
YXV0byYgdGVybSA6IG1fZXhwcmVzc2lvbikKLSAgICAgICAgb3V0c2V0cyArPSB0ZXJtLmVmZmVj
dC0+b3V0c2V0cygqdGhpcyk7Ci0gICAgcmV0dXJuIG91dHNldHM7Ci19Ci0KIFRleHRTdHJlYW0m
IFNWR0ZpbHRlcjo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0cywgRmlsdGVy
UmVwcmVzZW50YXRpb24gcmVwcmVzZW50YXRpb24pIGNvbnN0CiB7CiAgICAgZm9yIChhdXRvIGl0
ID0gbV9leHByZXNzaW9uLnJiZWdpbigpLCBlbmQgPSBtX2V4cHJlc3Npb24ucmVuZCgpOyBpdCAh
PSBlbmQ7ICsraXQpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9m
aWx0ZXJzL1NWR0ZpbHRlci5oIGIvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMv
U1ZHRmlsdGVyLmgKaW5kZXggNGVlMGZiODdhZjFjMWE0MWRlZjE4NmE1NTM0MTI4YmE2NzgwZTlj
Yy4uZDIzODc1ZWFiZTBmNmVhZjkyOTA0NDgyMzE5NmExNzkzZjBjZjc5YyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyLmgKQEAgLTQ4LDYgKzQ4
LDggQEAgcHVibGljOgogCiAgICAgUmVmUHRyPEZpbHRlckltYWdlPiBhcHBseShGaWx0ZXJJbWFn
ZSogc291cmNlSW1hZ2UsIEZpbHRlclJlc3VsdHMmKSBmaW5hbDsKIAorICAgIHN0YXRpYyBGbG9h
dFNpemUgY2FsY3VsYXRlUmVzb2x2ZWRTaXplKGNvbnN0IEZsb2F0U2l6ZSYsIGNvbnN0IEZsb2F0
UmVjdCYgdGFyZ2V0Qm91bmRpbmdCb3gsIFNWR1VuaXRUeXBlczo6U1ZHVW5pdFR5cGUgcHJpbWl0
aXZlVW5pdHMpOworCiAgICAgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9u
KFdURjo6VGV4dFN0cmVhbSYsIEZpbHRlclJlcHJlc2VudGF0aW9uKSBjb25zdCBmaW5hbDsKIAog
cHJpdmF0ZToKQEAgLTYyLDkgKzY0LDYgQEAgcHJpdmF0ZToKIAogICAgIFJlZlB0cjxGaWx0ZXJJ
bWFnZT4gYXBwbHkoY29uc3QgRmlsdGVyJiwgRmlsdGVySW1hZ2UmIHNvdXJjZUltYWdlLCBGaWx0
ZXJSZXN1bHRzJikgZmluYWw7CiAKLSAgICBJbnRPdXRzZXRzIG91dHNldHMoY29uc3QgRmlsdGVy
JikgY29uc3QgZmluYWwgeyByZXR1cm4gb3V0c2V0cygpOyB9Ci0gICAgSW50T3V0c2V0cyBvdXRz
ZXRzKCkgY29uc3QgZmluYWw7Ci0KICAgICBGbG9hdFJlY3QgbV90YXJnZXRCb3VuZGluZ0JveDsK
ICAgICBTVkdVbml0VHlwZXM6OlNWR1VuaXRUeXBlIG1fcHJpbWl0aXZlVW5pdHM7CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlckJ1aWxk
ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyQnVp
bGRlci5jcHAKaW5kZXggNTA3N2IyZWU5MmIwOTVkMjZmOWJmYmMwMWE5ZmI2NDk3NzE5ZGM1MC4u
ODNkZTlmODkwODJjYTM0ZmIyOTgyODcxZGZjYWFkMTQ1MjBjMGUxYiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyQnVpbGRlci5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyQnVpbGRlci5j
cHAKQEAgLTIzLDkgKzIzLDggQEAKIAogI2luY2x1ZGUgIkVsZW1lbnRJdGVyYXRvci5oIgogI2lu
Y2x1ZGUgIlNWR0ZpbHRlckVsZW1lbnQuaCIKKyNpbmNsdWRlICJTVkdGaWx0ZXJHcmFwaC5oIgog
I2luY2x1ZGUgIlNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcy5oIgotI2luY2x1
ZGUgIlNvdXJjZUFscGhhLmgiCi0jaW5jbHVkZSAiU291cmNlR3JhcGhpYy5oIgogCiAjaWYgRU5B
QkxFKERFU1RJTkFUSU9OX0NPTE9SX1NQQUNFX0xJTkVBUl9TUkdCKQogI2luY2x1ZGUgIkNTU0Nv
bXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5oIgpAQCAtMzcsMTAgKzM2LDEwIEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgbWF4VG90YWxOdW1iZXJGaWx0ZXJF
ZmZlY3RzID0gMTAwOwogc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBtYXhDb3VudENoaWxkTm9k
ZXMgPSAyMDA7CiAKLXZvaWQgU1ZHRmlsdGVyQnVpbGRlcjo6c2V0dXBCdWlsdGluRWZmZWN0cyhS
ZWY8RmlsdGVyRWZmZWN0PiBzb3VyY2VHcmFwaGljKQorU1ZHRmlsdGVyQnVpbGRlcjo6U1ZHRmls
dGVyQnVpbGRlcihjb25zdCBGbG9hdFJlY3QmIHRhcmdldEJvdW5kaW5nQm94LCBTVkdVbml0VHlw
ZXM6OlNWR1VuaXRUeXBlIHByaW1pdGl2ZVVuaXRzKQorICAgIDogbV90YXJnZXRCb3VuZGluZ0Jv
eCh0YXJnZXRCb3VuZGluZ0JveCkKKyAgICAsIG1fcHJpbWl0aXZlVW5pdHMocHJpbWl0aXZlVW5p
dHMpCiB7Ci0gICAgbV9idWlsdGluRWZmZWN0cy5hZGQoU291cmNlR3JhcGhpYzo6ZWZmZWN0TmFt
ZSgpLCBzb3VyY2VHcmFwaGljKTsKLSAgICBtX2J1aWx0aW5FZmZlY3RzLmFkZChTb3VyY2VBbHBo
YTo6ZWZmZWN0TmFtZSgpLCBTb3VyY2VBbHBoYTo6Y3JlYXRlKHNvdXJjZUdyYXBoaWMtPm9wZXJh
dGluZ0NvbG9yU3BhY2UoKSkpOwogfQogCiBzdGF0aWMgT3B0aW9uU2V0PEZpbHRlckVmZmVjdEdl
b21ldHJ5OjpGbGFncz4gZWZmZWN0R2VvbWV0cnlGbGFnc0ZvckVsZW1lbnQoU1ZHRWxlbWVudCYg
ZWxlbWVudCkKQEAgLTc4LDE1MyArNzcsMTM3IEBAIHN0YXRpYyBDb2xvckludGVycG9sYXRpb24g
Y29sb3JJbnRlcnBvbGF0aW9uRm9yRWxlbWVudChTVkdFbGVtZW50JiBlbGVtZW50KQogfQogI2Vu
ZGlmCiAKLVJlZlB0cjxGaWx0ZXJFZmZlY3Q+IFNWR0ZpbHRlckJ1aWxkZXI6OmJ1aWxkRmlsdGVy
RWZmZWN0cyhTVkdGaWx0ZXJFbGVtZW50JiBmaWx0ZXJFbGVtZW50KQorc3RhdGljIGJvb2wgYXBw
ZW5kRWZmZWN0VG9FeHByZXNzaW9uKGNvbnN0IFNWR0ZpbHRlckVmZmVjdHNHcmFwaCYgZ3JhcGgs
IGNvbnN0IEZpbHRlckVmZmVjdEdlb21ldHJ5TWFwJiBlZmZlY3RHZW9tZXRyeU1hcCwgRmlsdGVy
RWZmZWN0JiBlZmZlY3QsIEZpbHRlckVmZmVjdFZlY3RvciYgc3RhY2ssIHVuc2lnbmVkIGxldmVs
LCBTVkdGaWx0ZXJFeHByZXNzaW9uJiBleHByZXNzaW9uKQogewotICAgIGlmIChmaWx0ZXJFbGVt
ZW50LmNvdW50Q2hpbGROb2RlcygpID4gbWF4Q291bnRDaGlsZE5vZGVzKQotICAgICAgICByZXR1
cm4gbnVsbHB0cjsKLQotICAgIHNldEVmZmVjdElucHV0cyhzb3VyY2VBbHBoYSgpLCBGaWx0ZXJF
ZmZlY3RWZWN0b3IgeyBzb3VyY2VHcmFwaGljKCkgfSk7Ci0KLSAgICBmb3IgKGF1dG8mIGVmZmVj
dEVsZW1lbnQgOiBjaGlsZHJlbk9mVHlwZTxTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJp
YnV0ZXM+KGZpbHRlckVsZW1lbnQpKSB7Ci0gICAgICAgIGF1dG8gaW5wdXRzID0gbmFtZWRFZmZl
Y3RzKGVmZmVjdEVsZW1lbnQuZmlsdGVyRWZmZWN0SW5wdXRzTmFtZXMoKSk7Ci0gICAgICAgIGlm
ICghaW5wdXRzKQotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgLy8gQSBjeWNsZSBp
cyBkZXRlY3RlZC4KKyAgICBpZiAoc3RhY2suY29udGFpbnNJZihbJl0oYXV0byYgaXRlbSkgeyBy
ZXR1cm4gaXRlbS5wdHIoKSA9PSAmZWZmZWN0OyB9KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwog
Ci0gICAgICAgIGF1dG8gZWZmZWN0ID0gZWZmZWN0RWxlbWVudC5maWx0ZXJFZmZlY3QoKnRoaXMs
ICppbnB1dHMpOwotICAgICAgICBpZiAoIWVmZmVjdCkKLSAgICAgICAgICAgIHJldHVybiBudWxs
cHRyOworICAgIGF1dG8gZWZmZWN0R2VvbWV0cnkgPSBbJl0oRmlsdGVyRWZmZWN0JiBlZmZlY3Qp
IC0+IHN0ZDo6b3B0aW9uYWw8RmlsdGVyRWZmZWN0R2VvbWV0cnk+IHsKKyAgICAgICAgYXV0byBp
dCA9IGVmZmVjdEdlb21ldHJ5TWFwLmZpbmQoZWZmZWN0KTsKKyAgICAgICAgaWYgKGl0ICE9IGVm
ZmVjdEdlb21ldHJ5TWFwLmVuZCgpKQorICAgICAgICAgICAgcmV0dXJuIGl0LT52YWx1ZTsKKyAg
ICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICB9OwogCi0gICAgICAgIGlmIChhdXRvIGZs
YWdzID0gZWZmZWN0R2VvbWV0cnlGbGFnc0ZvckVsZW1lbnQoZWZmZWN0RWxlbWVudCkpIHsKLSAg
ICAgICAgICAgIGF1dG8gZWZmZWN0Qm91bmRhcmllcyA9IFNWR0xlbmd0aENvbnRleHQ6OnJlc29s
dmVSZWN0YW5nbGU8U1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzPigmZWZmZWN0
RWxlbWVudCwgbV9wcmltaXRpdmVVbml0cywgbV90YXJnZXRCb3VuZGluZ0JveCk7Ci0gICAgICAg
ICAgICBtX2VmZmVjdEdlb21ldHJ5TWFwLmFkZCgqZWZmZWN0LCBGaWx0ZXJFZmZlY3RHZW9tZXRy
eShlZmZlY3RCb3VuZGFyaWVzLCBmbGFncykpOwotICAgICAgICB9Ci0KLSNpZiBFTkFCTEUoREVT
VElOQVRJT05fQ09MT1JfU1BBQ0VfTElORUFSX1NSR0IpCi0gICAgICAgIGlmIChjb2xvckludGVy
cG9sYXRpb25Gb3JFbGVtZW50KGVmZmVjdEVsZW1lbnQpID09IENvbG9ySW50ZXJwb2xhdGlvbjo6
TGluZWFyUkdCKQotICAgICAgICAgICAgZWZmZWN0LT5zZXRPcGVyYXRpbmdDb2xvclNwYWNlKERl
c3RpbmF0aW9uQ29sb3JTcGFjZTo6TGluZWFyU1JHQigpKTsKLSNlbmRpZgorICAgIHN0YWNrLmFw
cGVuZChlZmZlY3QpOwogCi0gICAgICAgIGlmIChhdXRvIHJlbmRlcmVyID0gZWZmZWN0RWxlbWVu
dC5yZW5kZXJlcigpKQotICAgICAgICAgICAgYXBwZW5kRWZmZWN0VG9FZmZlY3RSZW5kZXJlcigq
ZWZmZWN0LCAqcmVuZGVyZXIpOworICAgIGV4cHJlc3Npb24uYXBwZW5kKHsgZWZmZWN0LCBlZmZl
Y3RHZW9tZXRyeShlZmZlY3QpLCBsZXZlbCB9KTsKIAotICAgICAgICBhZGROYW1lZEVmZmVjdChl
ZmZlY3RFbGVtZW50LnJlc3VsdCgpLCB7ICplZmZlY3QgfSk7Ci0gICAgICAgIHNldEVmZmVjdElu
cHV0cygqZWZmZWN0LCBXVEZNb3ZlKCppbnB1dHMpKTsKKyAgICBmb3IgKGF1dG8mIGlucHV0IDog
Z3JhcGguZ2V0Tm9kZUlucHV0cyhlZmZlY3QpKSB7CisgICAgICAgIGlmICghYXBwZW5kRWZmZWN0
VG9FeHByZXNzaW9uKGdyYXBoLCBlZmZlY3RHZW9tZXRyeU1hcCwgaW5wdXQsIHN0YWNrLCBsZXZl
bCArIDEsIGV4cHJlc3Npb24pKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAot
ICAgIHJldHVybiBtX2xhc3RFZmZlY3Q7Ci19CisgICAgQVNTRVJUKCFzdGFjay5pc0VtcHR5KCkp
OworICAgIEFTU0VSVChzdGFjay5sYXN0KCkucHRyKCkgPT0gJmVmZmVjdCk7CiAKLUZpbHRlckVm
ZmVjdCYgU1ZHRmlsdGVyQnVpbGRlcjo6c291cmNlR3JhcGhpYygpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuICptX2J1aWx0aW5FZmZlY3RzLmdldChGaWx0ZXJFZmZlY3Q6OnNvdXJjZUdyYXBoaWNOYW1l
KCkpOworICAgIHN0YWNrLnJlbW92ZUxhc3QoKTsKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAotRmls
dGVyRWZmZWN0JiBTVkdGaWx0ZXJCdWlsZGVyOjpzb3VyY2VBbHBoYSgpIGNvbnN0CitzdGF0aWMg
Ym9vbCBhcHBlbmRHcmFwaFRvRXhwcmVzc2lvbihjb25zdCBTVkdGaWx0ZXJFZmZlY3RzR3JhcGgm
IGdyYXBoLCBjb25zdCBGaWx0ZXJFZmZlY3RHZW9tZXRyeU1hcCYgZWZmZWN0R2VvbWV0cnlNYXAs
IFNWR0ZpbHRlckV4cHJlc3Npb24mIGV4cHJlc3Npb24pCiB7Ci0gICAgcmV0dXJuICptX2J1aWx0
aW5FZmZlY3RzLmdldChGaWx0ZXJFZmZlY3Q6OnNvdXJjZUFscGhhTmFtZSgpKTsKLX0KKyAgICBp
ZiAoIWdyYXBoLmxhc3ROb2RlKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKIAotdm9pZCBTVkdG
aWx0ZXJCdWlsZGVyOjphZGROYW1lZEVmZmVjdChjb25zdCBBdG9tU3RyaW5nJiBpZCwgUmVmPEZp
bHRlckVmZmVjdD4mJiBlZmZlY3QpCi17Ci0gICAgaWYgKGlkLmlzRW1wdHkoKSkgewotICAgICAg
ICBtX2xhc3RFZmZlY3QgPSBXVEZNb3ZlKGVmZmVjdCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
CisgICAgRmlsdGVyRWZmZWN0VmVjdG9yIHN0YWNrOworICAgIGlmICghYXBwZW5kRWZmZWN0VG9F
eHByZXNzaW9uKGdyYXBoLCBlZmZlY3RHZW9tZXRyeU1hcCwgKmdyYXBoLmxhc3ROb2RlKCksIHN0
YWNrLCAwLCBleHByZXNzaW9uKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgaWYgKG1f
YnVpbHRpbkVmZmVjdHMuY29udGFpbnMoaWQpKQotICAgICAgICByZXR1cm47CisgICAgaWYgKGV4
cHJlc3Npb24uc2l6ZSgpID4gbWF4VG90YWxOdW1iZXJGaWx0ZXJFZmZlY3RzKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKLSAgICBtX2xhc3RFZmZlY3QgPSBXVEZNb3ZlKGVmZmVjdCk7Ci0gICAg
bV9uYW1lZEVmZmVjdHMuc2V0KGlkLCBSZWYgeyAqbV9sYXN0RWZmZWN0IH0pOworICAgIGV4cHJl
c3Npb24ucmV2ZXJzZSgpOworICAgIGV4cHJlc3Npb24uc2hyaW5rVG9GaXQoKTsKKyAgICByZXR1
cm4gdHJ1ZTsKIH0KIAotUmVmUHRyPEZpbHRlckVmZmVjdD4gU1ZHRmlsdGVyQnVpbGRlcjo6bmFt
ZWRFZmZlY3QoY29uc3QgQXRvbVN0cmluZyYgaWQpIGNvbnN0CitzdGQ6Om9wdGlvbmFsPFNWR0Zp
bHRlckV4cHJlc3Npb24+IFNWR0ZpbHRlckJ1aWxkZXI6OmJ1aWxkRmlsdGVyRXhwcmVzc2lvbihT
VkdGaWx0ZXJFbGVtZW50JiBmaWx0ZXJFbGVtZW50KQogewotICAgIGlmIChpZC5pc0VtcHR5KCkp
IHsKLSAgICAgICAgaWYgKG1fbGFzdEVmZmVjdCkKLSAgICAgICAgICAgIHJldHVybiBtX2xhc3RF
ZmZlY3Q7Ci0KLSAgICAgICAgcmV0dXJuICZzb3VyY2VHcmFwaGljKCk7Ci0gICAgfQotCi0gICAg
aWYgKG1fYnVpbHRpbkVmZmVjdHMuY29udGFpbnMoaWQpKQotICAgICAgICByZXR1cm4gbV9idWls
dGluRWZmZWN0cy5nZXQoaWQpOwotCi0gICAgcmV0dXJuIG1fbmFtZWRFZmZlY3RzLmdldChpZCk7
Ci19CisgICAgaWYgKGZpbHRlckVsZW1lbnQuY291bnRDaGlsZE5vZGVzKCkgPiBtYXhDb3VudENo
aWxkTm9kZXMpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CiAKLXN0ZDo6b3B0aW9uYWw8
RmlsdGVyRWZmZWN0VmVjdG9yPiBTVkdGaWx0ZXJCdWlsZGVyOjpuYW1lZEVmZmVjdHMoU3Bhbjxj
b25zdCBBdG9tU3RyaW5nPiBuYW1lcykgY29uc3QKLXsKLSAgICBGaWx0ZXJFZmZlY3RWZWN0b3Ig
ZWZmZWN0czsKKyAgICBTVkdGaWx0ZXJFZmZlY3RzR3JhcGggZ3JhcGgoU291cmNlR3JhcGhpYzo6
Y3JlYXRlKCksIFNvdXJjZUFscGhhOjpjcmVhdGUoKSk7CisgICAgRmlsdGVyRWZmZWN0R2VvbWV0
cnlNYXAgZWZmZWN0R2VvbWV0cnlNYXA7CiAKLSAgICBlZmZlY3RzLnJlc2VydmVJbml0aWFsQ2Fw
YWNpdHkobmFtZXMuc2l6ZSgpKTsKKyAgICBmb3IgKGF1dG8mIGVmZmVjdEVsZW1lbnQgOiBjaGls
ZHJlbk9mVHlwZTxTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM+KGZpbHRlckVs
ZW1lbnQpKSB7CisgICAgICAgIGF1dG8gaW5wdXRzID0gZ3JhcGguZ2V0TmFtZWROb2RlcyhlZmZl
Y3RFbGVtZW50LmZpbHRlckVmZmVjdElucHV0c05hbWVzKCkpOworICAgICAgICBpZiAoIWlucHV0
cykKKyAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CiAKLSAgICBmb3IgKGF1dG8mIG5h
bWUgOiBuYW1lcykgewotICAgICAgICBhdXRvIGVmZmVjdCA9IG5hbWVkRWZmZWN0KG5hbWUpOwor
ICAgICAgICBhdXRvIGVmZmVjdCA9IGVmZmVjdEVsZW1lbnQuZmlsdGVyRWZmZWN0KCp0aGlzLCAq
aW5wdXRzKTsKICAgICAgICAgaWYgKCFlZmZlY3QpCiAgICAgICAgICAgICByZXR1cm4gc3RkOjpu
dWxsb3B0OwogCi0gICAgICAgIGVmZmVjdHMudW5jaGVja2VkQXBwZW5kKGVmZmVjdC5yZWxlYXNl
Tm9uTnVsbCgpKTsKLSAgICB9CisgICAgICAgIGlmIChhdXRvIGZsYWdzID0gZWZmZWN0R2VvbWV0
cnlGbGFnc0ZvckVsZW1lbnQoZWZmZWN0RWxlbWVudCkpIHsKKyAgICAgICAgICAgIGF1dG8gZWZm
ZWN0Qm91bmRhcmllcyA9IFNWR0xlbmd0aENvbnRleHQ6OnJlc29sdmVSZWN0YW5nbGU8U1ZHRmls
dGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzPigmZWZmZWN0RWxlbWVudCwgbV9wcmltaXRp
dmVVbml0cywgbV90YXJnZXRCb3VuZGluZ0JveCk7CisgICAgICAgICAgICBlZmZlY3RHZW9tZXRy
eU1hcC5hZGQoKmVmZmVjdCwgRmlsdGVyRWZmZWN0R2VvbWV0cnkoZWZmZWN0Qm91bmRhcmllcywg
ZmxhZ3MpKTsKKyAgICAgICAgfQogCi0gICAgcmV0dXJuIGVmZmVjdHM7Ci19CisjaWYgRU5BQkxF
KERFU1RJTkFUSU9OX0NPTE9SX1NQQUNFX0xJTkVBUl9TUkdCKQorICAgICAgICBpZiAoY29sb3JJ
bnRlcnBvbGF0aW9uRm9yRWxlbWVudChlZmZlY3RFbGVtZW50KSA9PSBDb2xvckludGVycG9sYXRp
b246OkxpbmVhclJHQikKKyAgICAgICAgICAgIGVmZmVjdC0+c2V0T3BlcmF0aW5nQ29sb3JTcGFj
ZShEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OkxpbmVhclNSR0IoKSk7CisjZW5kaWYKIAotdm9pZCBT
VkdGaWx0ZXJCdWlsZGVyOjpzZXRFZmZlY3RJbnB1dHMoRmlsdGVyRWZmZWN0JiBlZmZlY3QsIEZp
bHRlckVmZmVjdFZlY3RvciYmIGlucHV0cykKLXsKLSAgICBtX2lucHV0c01hcC5zZXQoeyBlZmZl
Y3QgfSwgV1RGTW92ZShpbnB1dHMpKTsKLX0KKyAgICAgICAgaWYgKGF1dG8gcmVuZGVyZXIgPSBl
ZmZlY3RFbGVtZW50LnJlbmRlcmVyKCkpCisgICAgICAgICAgICBtX2VmZmVjdFJlbmRlcmVyLmFk
ZChyZW5kZXJlciwgZWZmZWN0LmdldCgpKTsKIAotdm9pZCBTVkdGaWx0ZXJCdWlsZGVyOjphcHBl
bmRFZmZlY3RUb0VmZmVjdFJlbmRlcmVyKEZpbHRlckVmZmVjdCYgZWZmZWN0LCBSZW5kZXJPYmpl
Y3QmIG9iamVjdCkKLXsKLSAgICBtX2VmZmVjdFJlbmRlcmVyLmFkZCgmb2JqZWN0LCAmZWZmZWN0
KTsKLX0KKyAgICAgICAgZ3JhcGguYWRkTmFtZWROb2RlKGVmZmVjdEVsZW1lbnQucmVzdWx0KCks
IHsgKmVmZmVjdCB9KTsKKyAgICAgICAgZ3JhcGguc2V0Tm9kZUlucHV0cygqZWZmZWN0LCBXVEZN
b3ZlKCppbnB1dHMpKTsKKyAgICB9CiAKLXN0ZDo6b3B0aW9uYWw8RmlsdGVyRWZmZWN0R2VvbWV0
cnk+IFNWR0ZpbHRlckJ1aWxkZXI6OmVmZmVjdEdlb21ldHJ5KEZpbHRlckVmZmVjdCYgZWZmZWN0
KSBjb25zdAotewotICAgIGF1dG8gaXQgPSBtX2VmZmVjdEdlb21ldHJ5TWFwLmZpbmQoZWZmZWN0
KTsKLSAgICBpZiAoaXQgIT0gbV9lZmZlY3RHZW9tZXRyeU1hcC5lbmQoKSkKLSAgICAgICAgcmV0
dXJuIGl0LT52YWx1ZTsKLSAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgIFNWR0ZpbHRlckV4
cHJlc3Npb24gZXhwcmVzc2lvbjsKKyAgICBpZiAoIWFwcGVuZEdyYXBoVG9FeHByZXNzaW9uKGdy
YXBoLCBlZmZlY3RHZW9tZXRyeU1hcCwgZXhwcmVzc2lvbikpCisgICAgICAgIHJldHVybiBzdGQ6
Om51bGxvcHQ7CisKKyAgICByZXR1cm4gZXhwcmVzc2lvbjsKIH0KIAotYm9vbCBTVkdGaWx0ZXJC
dWlsZGVyOjpidWlsZEVmZmVjdEV4cHJlc3Npb24oRmlsdGVyRWZmZWN0JiBlZmZlY3QsIEZpbHRl
ckVmZmVjdFZlY3RvciYgc3RhY2ssIHVuc2lnbmVkIGxldmVsLCBTVkdGaWx0ZXJFeHByZXNzaW9u
JiBleHByZXNzaW9uKSBjb25zdAorc3RhdGljIEludE91dHNldHMgY2FsY3VsYXRlUHJpbWl0aXZl
T3V0c2V0cyhjb25zdCBTVkdGaWx0ZXJQcmltaXRpdmVzR3JhcGgmIGdyYXBoLCBTVkdGaWx0ZXJQ
cmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXMmIHByaW1pdGl2ZSwgVmVjdG9yPFJlZjxTVkdGaWx0
ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM+PiYgc3RhY2ssIGNvbnN0IEZsb2F0UmVjdCYg
dGFyZ2V0Qm91bmRpbmdCb3gsIFNWR1VuaXRUeXBlczo6U1ZHVW5pdFR5cGUgcHJpbWl0aXZlVW5p
dHMpCiB7CiAgICAgLy8gQSBjeWNsZSBpcyBkZXRlY3RlZC4KLSAgICBpZiAoc3RhY2suY29udGFp
bnNJZihbJl0oYXV0byYgaXRlbSkgeyByZXR1cm4gaXRlbS5wdHIoKSA9PSAmZWZmZWN0OyB9KSkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChzdGFjay5jb250YWluc0lmKFsmXShhdXRv
JiBpdGVtKSB7IHJldHVybiBpdGVtLnB0cigpID09ICZwcmltaXRpdmU7IH0pKQorICAgICAgICBy
ZXR1cm4geyB9OwogCi0gICAgc3RhY2suYXBwZW5kKGVmZmVjdCk7Ci0gICAgCi0gICAgZXhwcmVz
c2lvbi5hcHBlbmQoeyBlZmZlY3QsIGVmZmVjdEdlb21ldHJ5KGVmZmVjdCksIGxldmVsIH0pOwor
ICAgIHN0YWNrLmFwcGVuZChwcmltaXRpdmUpOwogCi0gICAgZm9yIChhdXRvJiBpbnB1dCA6IG1f
aW5wdXRzTWFwLmdldChlZmZlY3QpKSB7Ci0gICAgICAgIGlmICghYnVpbGRFZmZlY3RFeHByZXNz
aW9uKGlucHV0LCBzdGFjaywgbGV2ZWwgKyAxLCBleHByZXNzaW9uKSkKLSAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICB9CisgICAgSW50T3V0c2V0cyBvdXRzZXRzOworICAgIGZvciAoYXV0
byYgaW5wdXQgOiBncmFwaC5nZXROb2RlSW5wdXRzKHByaW1pdGl2ZSkpCisgICAgICAgIG91dHNl
dHMgKz0gY2FsY3VsYXRlUHJpbWl0aXZlT3V0c2V0cyhncmFwaCwgaW5wdXQsIHN0YWNrLCB0YXJn
ZXRCb3VuZGluZ0JveCwgcHJpbWl0aXZlVW5pdHMpOworICAgIG91dHNldHMgKz0gcHJpbWl0aXZl
Lm91dHNldHModGFyZ2V0Qm91bmRpbmdCb3gsIHByaW1pdGl2ZVVuaXRzKTsKIAogICAgIEFTU0VS
VCghc3RhY2suaXNFbXB0eSgpKTsKLSAgICBBU1NFUlQoc3RhY2subGFzdCgpLnB0cigpID09ICZl
ZmZlY3QpOworICAgIEFTU0VSVChzdGFjay5sYXN0KCkucHRyKCkgPT0gJnByaW1pdGl2ZSk7CiAK
ICAgICBzdGFjay5yZW1vdmVMYXN0KCk7Ci0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIG91
dHNldHM7CiB9CiAKLWJvb2wgU1ZHRmlsdGVyQnVpbGRlcjo6YnVpbGRFeHByZXNzaW9uKFNWR0Zp
bHRlckV4cHJlc3Npb24mIGV4cHJlc3Npb24pIGNvbnN0CitzdGF0aWMgSW50T3V0c2V0cyBjYWxj
dWxhdGVHcmFwaE91dHNldHMoY29uc3QgU1ZHRmlsdGVyUHJpbWl0aXZlc0dyYXBoJiBncmFwaCwg
Y29uc3QgRmxvYXRSZWN0JiB0YXJnZXRCb3VuZGluZ0JveCwgU1ZHVW5pdFR5cGVzOjpTVkdVbml0
VHlwZSBwcmltaXRpdmVVbml0cykKIHsKLSAgICBpZiAoIW1fbGFzdEVmZmVjdCkKLSAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIGlmICghZ3JhcGgubGFzdE5vZGUoKSkKKyAgICAgICAgcmV0dXJu
IHsgfTsKKyAgICAKKyAgICBWZWN0b3I8UmVmPFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0
cmlidXRlcz4+IHN0YWNrOworICAgIHJldHVybiBjYWxjdWxhdGVQcmltaXRpdmVPdXRzZXRzKGdy
YXBoLCAqZ3JhcGgubGFzdE5vZGUoKSwgc3RhY2ssIHRhcmdldEJvdW5kaW5nQm94LCBwcmltaXRp
dmVVbml0cyk7Cit9CiAKLSAgICBGaWx0ZXJFZmZlY3RWZWN0b3Igc3RhY2s7Ci0gICAgaWYgKCFi
dWlsZEVmZmVjdEV4cHJlc3Npb24oKm1fbGFzdEVmZmVjdCwgc3RhY2ssIDAsIGV4cHJlc3Npb24p
KQotICAgICAgICByZXR1cm4gZmFsc2U7CitJbnRPdXRzZXRzIFNWR0ZpbHRlckJ1aWxkZXI6OmNh
bGN1bGF0ZUZpbHRlck91dHNldHMoU1ZHRmlsdGVyRWxlbWVudCYgZmlsdGVyRWxlbWVudCkKK3sK
KyAgICBpZiAoZmlsdGVyRWxlbWVudC5jb3VudENoaWxkTm9kZXMoKSA+IG1heENvdW50Q2hpbGRO
b2RlcykKKyAgICAgICAgcmV0dXJuIHsgfTsKIAotICAgIGlmIChleHByZXNzaW9uLnNpemUoKSA+
IG1heFRvdGFsTnVtYmVyRmlsdGVyRWZmZWN0cykKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IFNWR0ZpbHRlclByaW1pdGl2ZXNHcmFwaCBncmFwaDsKIAotICAgIGV4cHJlc3Npb24ucmV2ZXJz
ZSgpOwotICAgIGV4cHJlc3Npb24uc2hyaW5rVG9GaXQoKTsKLSAgICByZXR1cm4gdHJ1ZTsKKyAg
ICBmb3IgKGF1dG8mIGVmZmVjdEVsZW1lbnQgOiBjaGlsZHJlbk9mVHlwZTxTVkdGaWx0ZXJQcmlt
aXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM+KGZpbHRlckVsZW1lbnQpKSB7CisgICAgICAgIC8vIFdl
IHNob3VsZCBub3QgYmUgc3RyaWN0IGFib3V0IG5vdCBmaW5kaW5nIHRoZSBpbnB1dCBwcmltaXRp
dmVzIGhlcmUgYmVjYXVzZSBTb3VyY2VHcmFwaGljIGFuZCBTb3VyY2VBbHBoYSBkbyBub3QgaGF2
ZSBwcmltaXRpdmVzLgorICAgICAgICBhdXRvIGlucHV0cyA9IGdyYXBoLmdldE5hbWVkTm9kZXMo
ZWZmZWN0RWxlbWVudC5maWx0ZXJFZmZlY3RJbnB1dHNOYW1lcygpKS52YWx1ZV9vcihTVkdGaWx0
ZXJQcmltaXRpdmVzR3JhcGg6Ok5vZGVWZWN0b3IoKSk7CisgICAgICAgIGdyYXBoLmFkZE5hbWVk
Tm9kZShlZmZlY3RFbGVtZW50LnJlc3VsdCgpLCB7IGVmZmVjdEVsZW1lbnQgfSk7CisgICAgICAg
IGdyYXBoLnNldE5vZGVJbnB1dHMoZWZmZWN0RWxlbWVudCwgV1RGTW92ZShpbnB1dHMpKTsKKyAg
ICB9CisKKyAgICByZXR1cm4gY2FsY3VsYXRlR3JhcGhPdXRzZXRzKGdyYXBoLCBtX3RhcmdldEJv
dW5kaW5nQm94LCBtX3ByaW1pdGl2ZVVuaXRzKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmls
dGVyQnVpbGRlci5oIGIvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmls
dGVyQnVpbGRlci5oCmluZGV4IGM5OTEwMmU3MGJlMDQyMzRkZDZiMjYzMzhhZTMwMTkwNWU2MTAx
YzEuLmRkZjYwZTkxNzM2NTQ4MjBkY2VlMjA0MWQ3ZWMxMzE0NWMyMGMxMDYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlckJ1aWxkZXIuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXJCdWlsZGVy
LmgKQEAgLTIxLDEzICsyMSw5IEBACiAKICNwcmFnbWEgb25jZQogCi0jaW5jbHVkZSAiRmlsdGVy
RWZmZWN0LmgiCi0jaW5jbHVkZSAiRmlsdGVyRWZmZWN0VmVjdG9yLmgiCiAjaW5jbHVkZSAiU1ZH
RmlsdGVyRXhwcmVzc2lvbi5oIgogI2luY2x1ZGUgIlNWR1VuaXRUeXBlcy5oIgogI2luY2x1ZGUg
PHd0Zi9IYXNoTWFwLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQXRvbVN0cmluZ0hhc2guaD4KLSNp
bmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBA
IC0zOCw0NSArMzQsMjEgQEAgY2xhc3MgU1ZHRmlsdGVyRWxlbWVudDsKIGNsYXNzIFNWR0ZpbHRl
ckJ1aWxkZXIgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgotICAgIFNW
R0ZpbHRlckJ1aWxkZXIoKSA9IGRlZmF1bHQ7CisgICAgU1ZHRmlsdGVyQnVpbGRlcihjb25zdCBG
bG9hdFJlY3QmIHRhcmdldEJvdW5kaW5nQm94LCBTVkdVbml0VHlwZXM6OlNWR1VuaXRUeXBlIHBy
aW1pdGl2ZVVuaXRzID0gU1ZHVW5pdFR5cGVzOjpTVkdfVU5JVF9UWVBFX1VTRVJTUEFDRU9OVVNF
KTsKIAotICAgIHZvaWQgc2V0VGFyZ2V0Qm91bmRpbmdCb3goY29uc3QgRmxvYXRSZWN0JiByKSB7
IG1fdGFyZ2V0Qm91bmRpbmdCb3ggPSByOyB9CiAgICAgRmxvYXRSZWN0IHRhcmdldEJvdW5kaW5n
Qm94KCkgY29uc3QgeyByZXR1cm4gbV90YXJnZXRCb3VuZGluZ0JveDsgfQotICAgIAogICAgIFNW
R1VuaXRUeXBlczo6U1ZHVW5pdFR5cGUgcHJpbWl0aXZlVW5pdHMoKSBjb25zdCB7IHJldHVybiBt
X3ByaW1pdGl2ZVVuaXRzOyB9Ci0gICAgdm9pZCBzZXRQcmltaXRpdmVVbml0cyhTVkdVbml0VHlw
ZXM6OlNWR1VuaXRUeXBlIHVuaXRzKSB7IG1fcHJpbWl0aXZlVW5pdHMgPSB1bml0czsgfQogCi0g
ICAgLy8gUmVxdWlyZWQgdG8gY2hhbmdlIHRoZSBhdHRyaWJ1dGVzIG9mIGEgZmlsdGVyIGR1cmlu
ZyBhbiBzdmdBdHRyaWJ1dGVDaGFuZ2VkLgotICAgIHZvaWQgYXBwZW5kRWZmZWN0VG9FZmZlY3RS
ZW5kZXJlcihGaWx0ZXJFZmZlY3QmLCBSZW5kZXJPYmplY3QmKTsKLSAgICBpbmxpbmUgRmlsdGVy
RWZmZWN0KiBlZmZlY3RCeVJlbmRlcmVyKFJlbmRlck9iamVjdCogb2JqZWN0KSB7IHJldHVybiBt
X2VmZmVjdFJlbmRlcmVyLmdldChvYmplY3QpOyB9CisgICAgc3RkOjpvcHRpb25hbDxTVkdGaWx0
ZXJFeHByZXNzaW9uPiBidWlsZEZpbHRlckV4cHJlc3Npb24oU1ZHRmlsdGVyRWxlbWVudCYpOwor
ICAgIEludE91dHNldHMgY2FsY3VsYXRlRmlsdGVyT3V0c2V0cyhTVkdGaWx0ZXJFbGVtZW50Jik7
CiAKLSAgICB2b2lkIHNldHVwQnVpbHRpbkVmZmVjdHMoUmVmPEZpbHRlckVmZmVjdD4gc291cmNl
R3JhcGhpYyk7Ci0gICAgUmVmUHRyPEZpbHRlckVmZmVjdD4gYnVpbGRGaWx0ZXJFZmZlY3RzKFNW
R0ZpbHRlckVsZW1lbnQmKTsKLSAgICBib29sIGJ1aWxkRXhwcmVzc2lvbihTVkdGaWx0ZXJFeHBy
ZXNzaW9uJikgY29uc3Q7CisgICAgLy8gUmVxdWlyZWQgdG8gY2hhbmdlIHRoZSBhdHRyaWJ1dGVz
IG9mIGEgZmlsdGVyIGR1cmluZyBhbiBzdmdBdHRyaWJ1dGVDaGFuZ2VkLgorICAgIEZpbHRlckVm
ZmVjdCogZWZmZWN0QnlSZW5kZXJlcihSZW5kZXJPYmplY3QqIG9iamVjdCkgeyByZXR1cm4gbV9l
ZmZlY3RSZW5kZXJlci5nZXQob2JqZWN0KTsgfQogCiBwcml2YXRlOgotICAgIEZpbHRlckVmZmVj
dCYgc291cmNlR3JhcGhpYygpIGNvbnN0OwotICAgIEZpbHRlckVmZmVjdCYgc291cmNlQWxwaGEo
KSBjb25zdDsKLQotICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IG5hbWVkRWZmZWN0KGNvbnN0IEF0
b21TdHJpbmcmKSBjb25zdDsKLSAgICBzdGQ6Om9wdGlvbmFsPEZpbHRlckVmZmVjdFZlY3Rvcj4g
bmFtZWRFZmZlY3RzKFNwYW48Y29uc3QgQXRvbVN0cmluZz4pIGNvbnN0OwotCi0gICAgdm9pZCBh
ZGROYW1lZEVmZmVjdChjb25zdCBBdG9tU3RyaW5nJiBpZCwgUmVmPEZpbHRlckVmZmVjdD4mJik7
Ci0gICAgdm9pZCBzZXRFZmZlY3RJbnB1dHMoRmlsdGVyRWZmZWN0JiwgRmlsdGVyRWZmZWN0VmVj
dG9yJiYgaW5wdXRzKTsKLQotICAgIHN0ZDo6b3B0aW9uYWw8RmlsdGVyRWZmZWN0R2VvbWV0cnk+
IGVmZmVjdEdlb21ldHJ5KEZpbHRlckVmZmVjdCYpIGNvbnN0OwotICAgIGJvb2wgYnVpbGRFZmZl
Y3RFeHByZXNzaW9uKEZpbHRlckVmZmVjdCYsIEZpbHRlckVmZmVjdFZlY3RvciYgc3RhY2ssIHVu
c2lnbmVkIGxldmVsLCBTVkdGaWx0ZXJFeHByZXNzaW9uJikgY29uc3Q7Ci0KLSAgICBIYXNoTWFw
PEF0b21TdHJpbmcsIFJlZjxGaWx0ZXJFZmZlY3Q+PiBtX2J1aWx0aW5FZmZlY3RzOwotICAgIEhh
c2hNYXA8QXRvbVN0cmluZywgUmVmPEZpbHRlckVmZmVjdD4+IG1fbmFtZWRFZmZlY3RzOwogICAg
IEhhc2hNYXA8UmVuZGVyT2JqZWN0KiwgRmlsdGVyRWZmZWN0Kj4gbV9lZmZlY3RSZW5kZXJlcjsK
LSAgICBIYXNoTWFwPFJlZjxGaWx0ZXJFZmZlY3Q+LCBGaWx0ZXJFZmZlY3RWZWN0b3I+IG1faW5w
dXRzTWFwOwotCi0gICAgUmVmUHRyPEZpbHRlckVmZmVjdD4gbV9sYXN0RWZmZWN0OwotCiAgICAg
RmxvYXRSZWN0IG1fdGFyZ2V0Qm91bmRpbmdCb3g7CiAgICAgU1ZHVW5pdFR5cGVzOjpTVkdVbml0
VHlwZSBtX3ByaW1pdGl2ZVVuaXRzIHsgU1ZHVW5pdFR5cGVzOjpTVkdfVU5JVF9UWVBFX1VTRVJT
UEFDRU9OVVNFIH07Ci0gICAgRmlsdGVyRWZmZWN0R2VvbWV0cnlNYXAgbV9lZmZlY3RHZW9tZXRy
eU1hcDsKIH07CiAgICAgCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXJFeHByZXNzaW9uLmggYi9T
b3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXJFeHByZXNzaW9uLmgK
aW5kZXggM2ZiMDVlZmNlZWJjYTVkYWNiZjAyYzgyYmE4NzE4ODZhOGRlZDA3Zi4uYjViNDZkMTE3
ZjBmODIwMmViZGZjNzM0ZTViY2NhMjU1N2NhMDliOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyRXhwcmVzc2lvbi5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlckV4cHJlc3Npb24uaApAQCAt
MjUsNiArMjUsNyBAQAogCiAjcHJhZ21hIG9uY2UKIAorI2luY2x1ZGUgIkZpbHRlckVmZmVjdEdl
b21ldHJ5LmgiCiAjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5o
PgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdG
aWx0ZXJHcmFwaC5oIGIvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmls
dGVyR3JhcGguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mODc3ZmUxNzZkNGNhYmUwMjg2NjQ4MGRiNmI1MjQxODBl
MDYxZTkzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2Zp
bHRlcnMvU1ZHRmlsdGVyR3JhcGguaApAQCAtMCwwICsxLDEzMSBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAyMiBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUg
IlNvdXJjZUFscGhhLmgiCisjaW5jbHVkZSAiU291cmNlR3JhcGhpYy5oIgorI2luY2x1ZGUgPHd0
Zi90ZXh0L0F0b21TdHJpbmdIYXNoLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgRmlsdGVyRWZmZWN0OworY2xhc3MgU1ZH
RmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOworCit0ZW1wbGF0ZTx0eXBlbmFtZSBO
b2RlVHlwZT4KK2NsYXNzIFNWR0ZpbHRlckdyYXBoIHsKK3B1YmxpYzoKKyAgICB1c2luZyBOb2Rl
VmVjdG9yID0gVmVjdG9yPFJlZjxOb2RlVHlwZT4+OworCisgICAgU1ZHRmlsdGVyR3JhcGgoKSA9
IGRlZmF1bHQ7CisKKyAgICBTVkdGaWx0ZXJHcmFwaChSZWY8Tm9kZVR5cGU+JiYgc291cmNlR3Jh
cGhpYywgUmVmPE5vZGVUeXBlPiYmIHNvdXJjZUFscGhhKQorICAgIHsKKyAgICAgICAgbV9idWls
dGluTm9kZXMuYWRkKFNvdXJjZUdyYXBoaWM6OmVmZmVjdE5hbWUoKSwgV1RGTW92ZShzb3VyY2VH
cmFwaGljKSk7CisgICAgICAgIG1fYnVpbHRpbk5vZGVzLmFkZChTb3VyY2VBbHBoYTo6ZWZmZWN0
TmFtZSgpLCBXVEZNb3ZlKHNvdXJjZUFscGhhKSk7CisKKyAgICAgICAgc2V0Tm9kZUlucHV0cygq
dGhpcy0+c291cmNlQWxwaGEoKSwgTm9kZVZlY3RvciB7ICp0aGlzLT5zb3VyY2VHcmFwaGljKCkg
fSk7CisgICAgfQorCisgICAgTm9kZVR5cGUqIHNvdXJjZUdyYXBoaWMoKSBjb25zdAorICAgIHsK
KyAgICAgICAgcmV0dXJuIG1fYnVpbHRpbk5vZGVzLmdldChGaWx0ZXJFZmZlY3Q6OnNvdXJjZUdy
YXBoaWNOYW1lKCkpOworICAgIH0KKworICAgIE5vZGVUeXBlKiBzb3VyY2VBbHBoYSgpIGNvbnN0
CisgICAgeworICAgICAgICByZXR1cm4gbV9idWlsdGluTm9kZXMuZ2V0KEZpbHRlckVmZmVjdDo6
c291cmNlQWxwaGFOYW1lKCkpOworICAgIH0KKworICAgIHZvaWQgYWRkTmFtZWROb2RlKGNvbnN0
IEF0b21TdHJpbmcmIGlkLCBSZWY8Tm9kZVR5cGU+JiYgbm9kZSkKKyAgICB7CisgICAgICAgIGlm
IChpZC5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIG1fbGFzdE5vZGUgPSBXVEZNb3ZlKG5vZGUp
OworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgaWYgKG1fYnVpbHRp
bk5vZGVzLmNvbnRhaW5zKGlkKSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBtX2xh
c3ROb2RlID0gV1RGTW92ZShub2RlKTsKKyAgICAgICAgbV9uYW1lZE5vZGVzLnNldChpZCwgUmVm
IHsgKm1fbGFzdE5vZGUgfSk7CisgICAgfQorCisgICAgUmVmUHRyPE5vZGVUeXBlPiBnZXROYW1l
ZE5vZGUoY29uc3QgQXRvbVN0cmluZyYgaWQpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoaWQu
aXNFbXB0eSgpKSB7CisgICAgICAgICAgICBpZiAobV9sYXN0Tm9kZSkKKyAgICAgICAgICAgICAg
ICByZXR1cm4gbV9sYXN0Tm9kZTsKKworICAgICAgICAgICAgcmV0dXJuIHNvdXJjZUdyYXBoaWMo
KTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChtX2J1aWx0aW5Ob2Rlcy5jb250YWlucyhpZCkp
CisgICAgICAgICAgICByZXR1cm4gbV9idWlsdGluTm9kZXMuZ2V0KGlkKTsKKworICAgICAgICBy
ZXR1cm4gbV9uYW1lZE5vZGVzLmdldChpZCk7CisgICAgfQorCisgICAgc3RkOjpvcHRpb25hbDxO
b2RlVmVjdG9yPiBnZXROYW1lZE5vZGVzKFNwYW48Y29uc3QgQXRvbVN0cmluZz4gbmFtZXMpIGNv
bnN0CisgICAgeworICAgICAgICBOb2RlVmVjdG9yIG5vZGVzOworCisgICAgICAgIG5vZGVzLnJl
c2VydmVJbml0aWFsQ2FwYWNpdHkobmFtZXMuc2l6ZSgpKTsKKworICAgICAgICBmb3IgKGF1dG8m
IG5hbWUgOiBuYW1lcykgeworICAgICAgICAgICAgYXV0byBub2RlID0gZ2V0TmFtZWROb2RlKG5h
bWUpOworICAgICAgICAgICAgaWYgKCFub2RlKQorICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6
Om51bGxvcHQ7CisKKyAgICAgICAgICAgIG5vZGVzLnVuY2hlY2tlZEFwcGVuZChub2RlLnJlbGVh
c2VOb25OdWxsKCkpOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIG5vZGVzOworICAgIH0K
KworICAgIHZvaWQgc2V0Tm9kZUlucHV0cyhOb2RlVHlwZSYgbm9kZSwgTm9kZVZlY3RvciYmIGlu
cHV0cykKKyAgICB7CisgICAgICAgIG1fbm9kZUlucHV0cy5zZXQoeyBub2RlIH0sIFdURk1vdmUo
aW5wdXRzKSk7CisgICAgfQorCisgICAgTm9kZVZlY3RvciBnZXROb2RlSW5wdXRzKE5vZGVUeXBl
JiBub2RlKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fbm9kZUlucHV0cy5nZXQobm9k
ZSk7CisgICAgfQorCisgICAgTm9kZVR5cGUqIGxhc3ROb2RlKCkgY29uc3QgeyByZXR1cm4gbV9s
YXN0Tm9kZS5nZXQoKTsgfQorCitwcml2YXRlOgorICAgIEhhc2hNYXA8QXRvbVN0cmluZywgUmVm
PE5vZGVUeXBlPj4gbV9idWlsdGluTm9kZXM7CisgICAgSGFzaE1hcDxBdG9tU3RyaW5nLCBSZWY8
Tm9kZVR5cGU+PiBtX25hbWVkTm9kZXM7CisgICAgSGFzaE1hcDxSZWY8Tm9kZVR5cGU+LCBOb2Rl
VmVjdG9yPiBtX25vZGVJbnB1dHM7CisgICAgUmVmUHRyPE5vZGVUeXBlPiBtX2xhc3ROb2RlOwor
fTsKKwordXNpbmcgU1ZHRmlsdGVyRWZmZWN0c0dyYXBoID0gU1ZHRmlsdGVyR3JhcGg8RmlsdGVy
RWZmZWN0PjsKK3VzaW5nIFNWR0ZpbHRlclByaW1pdGl2ZXNHcmFwaCA9IFNWR0ZpbHRlckdyYXBo
PFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcz47CisKK30gLy8gbmFtZXNwYWNl
IFdlYkNvcmUK
</data>
<flag name="commit-queue"
          id="484142"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>456001</attachid>
            <date>2022-03-29 00:16:34 -0700</date>
            <delta_ts>2022-04-04 14:01:23 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-236574-20220329001633.patch</filename>
            <type>text/plain</type>
            <size>65925</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjkyMDIyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYjA2YjVmYTczZjdmYjc2
NzhmODA2MDgwNTk5NjUyMDhiNjViNzRjYS4uODMzODQ5ZmJiYmY3NTI1ZTBiMzcyNGI1YmM3Y2Fm
Mzk1OTIxM2UyYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzMiBAQAorMjAyMi0wMy0yOCAgU2Fp
ZCBBYm91LUhhbGxhd2EgIDxzYWlkQGFwcGxlLmNvbT4KKworICAgICAgICBbR1BVIFByb2Nlc3Nd
IENTU0ZpbHRlciBzaG91bGQgYmUgY3JlYXRlZCBvbmx5IGF0IHRoZSBwYWludGluZyB0aW1lCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzY1NzQKKyAg
ICAgICAgcmRhcjovLzg5MjEwMDA0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgSW5zdGVhZCBvZiBidWlsZGluZyB0aGUgd2hvbGUgZmlsdGVyIGNoYWlu
IHRvIGdldCB0aGUgZmlsdGVyIG91dHNldHMgYXQgCisgICAgICAgIHRoZSBsYXlvdXQgdGltZSwg
d2UgY2FuIHVzZSB0aGUgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzIGFuZAor
ICAgICAgICB0aGUgRmlsdGVyT3BlcmF0aW9uIHN1cGVyIGNsYXNzZXMgdG8gZ2V0IHRoZWlyIG91
dHNldHMgd2l0aG91dCBoYXZpbmcgdG8KKyAgICAgICAgYnVpbGQgdGhlIEZpbHRlckVmZmVjdHMu
CisKKyAgICAgICAgQ1NTRmlsdGVyOjpjYWxjdWxhdGVPdXRzZXRzKCkgaXMgYSBzdGF0aWMgbWV0
aG9kIHdoaWNoIHdpbGwgbG9vcCB0aHJvdWdoCisgICAgICAgIHRoZSBGaWx0ZXJPcGVyYXRpb25z
IGFuZCB3aWxsIGFkZCB1cCB0aGUgb3V0c2V0cyBvZiB0aGUgYmx1ciwgdGhlIGRyb3AtCisgICAg
ICAgIHNoYWRvdyBhbmQgdGhlIHJlZmVyZW5jZSBGaWx0ZXJPcGVyYXRpb24uCisKKyAgICAgICAg
U1ZHRmlsdGVyQnVpbGRlcjo6Y2FsY3VsYXRlRmlsdGVyT3V0c2V0cygpIHdpbGwgbG9vcCB0aHJv
dWdoIHRoZSBwcmltaXRpdmVzCisgICAgICAgIG9mIHRoZSBmaWx0ZXIgZWxlbWVudCBhbmQgd2ls
bCBjYWxsIHRoZSBuZXcgdmlydHVhbCBtZXRob2Qgb3V0c2V0cygpIHdoaWNoCisgICAgICAgIHdp
bGwgY2FsbCBhIHN0YXRpYyBtZXRob2QgaW4gdGhlIGNvcnJlc3BvbmRpbmcgRmlsdGVyRWZmZWN0
LgorCisgICAgICAgIEZFRHJvcFNoYWRvdywgRkVHYXVzc2lhbkJsdXIgYW5kIEZFT2Zmc2V0IHdp
bGwgYmUgcHJvdmlkZSBzdGF0aWMgbWV0aG9kcworICAgICAgICBmb3IgY2FsY3VsYXRpbmcgdGhl
IGVmZmVjdCBvdXRzZXRzLiBUaGVzZSBzdGF0aWMgbWV0aG9kcyB3aWxsIGJlIGNhbGxlZCAKKyAg
ICAgICAgZnJvbSBDU1NGaWx0ZXI6OmNhbGN1bGF0ZU91dHNldHMoKSBhbmQgZnJvbSB0aGUgU1ZH
RkV4eHhFbGVtZW50cy4KKworICAgICAgICBUbyByZW1vdmUgdGhlIGR1cGxpY2F0aW9uIG9mIHRo
ZSBjb2RlIGZyb20gU1ZHRmlsdGVyQnVpbGRlcjo6CisgICAgICAgIGJ1aWxkRmlsdGVyRWZmZWN0
cygpIGFuZCBjYWxjdWxhdGVGaWx0ZXJPdXRzZXRzKCksIGEgbmV3IHRlbXBsYXRlIGNsYXNzCisg
ICAgICAgIG5hbWVkIFNWR0ZpbHRlckdyYXBoIHdpbGwgYmUgaW50cm9kdWNlZC4gSXQgcmVwcmVz
ZW50cyB0aGUgZ3JhcGggb2YgdGhlCisgICAgICAgIFNWR0ZpbHRlci4gVGhlIG5vZGVzIG9mICB0
aGlzIGdyYXBoIHdpbGwgYmUgb2YgdHlwZSBGaWx0ZXJFZmZlY2N0IHdoZW4KKyAgICAgICAgaXQg
aXMgdXNlZCB0byBidWlsZCB0aGUgU1ZHRmlsdGVyRXhwcmVzc2lvbi4gVGhlIG5vZGVzIHdpbGwg
YmUgb2YgdHlwZQorICAgICAgICBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXMg
d2hlbiBpdCBpcyB1c2VkIHRvIGNhbGN1bGF0ZSB0aGUKKyAgICAgICAgZmlsdGVyIG91dHNldHMu
CisKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURyb3BTaGFkb3cuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6RkVEcm9wU2hhZG93OjpjYWxjdWxhdGVPdXRzZXRzKToKKyAgICAgICAgKFdlYkNv
cmU6OkZFRHJvcFNoYWRvdzo6b3V0c2V0cyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURyb3BTaGFkb3cuaDoKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFR2F1c3NpYW5CbHVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkZFR2F1c3NpYW5CbHVyOjpjYWxjdWxhdGVPdXRzZXRzKToKKyAgICAgICAgKFdlYkNvcmU6OkZF
R2F1c3NpYW5CbHVyOjpvdXRzZXRzIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFR2F1c3NpYW5CbHVyLmg6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRU9mZnNldC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRU9mZnNl
dDo6Y2FsY3VsYXRlT3V0c2V0cyk6CisgICAgICAgIChXZWJDb3JlOjpGRU9mZnNldDo6b3V0c2V0
cyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RU9mZnNldC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyLmg6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJGdW5jdGlvbi5oOgor
ICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OmFwcGx5KToKKyAgICAgICAgKFdlYkNv
cmU6OkZpbHRlckZ1bmN0aW9uOjpvdXRzZXRzIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBy
ZW5kZXJpbmcvQ1NTRmlsdGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNhbGN1bGF0ZUJsdXJF
ZmZlY3RPdXRzZXRzKToKKyAgICAgICAgKFdlYkNvcmU6OmNhbGN1bGF0ZURyb3BTaGFkb3dFZmZl
Y3RPdXRzZXRzKToKKyAgICAgICAgKFdlYkNvcmU6OnJlZmVyZW5jZUZpbHRlckVsZW1lbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6Y2FsY3VsYXRlUmVmZXJlbmNlRmlsdGVyT3V0c2V0cyk6CisgICAg
ICAgIChXZWJDb3JlOjpjcmVhdGVSZWZlcmVuY2VGaWx0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6
Q1NTRmlsdGVyOjpidWlsZEZpbHRlckZ1bmN0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpDU1NG
aWx0ZXI6OmNhbGN1bGF0ZU91dHNldHMpOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlU1ZHRmls
dGVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6b3V0c2V0cyBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgICogcmVuZGVyaW5nL0NTU0ZpbHRlci5oOgorICAgICAgICAq
IHJlbmRlcmluZy9SZW5kZXJMYXllci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXll
cjo6ZmlsdGVyc0ZvclBhaW50aW5nIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxh
eWVyOjpjYWxjdWxhdGVDbGlwUmVjdHMgY29uc3QpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5k
ZXJMYXllckZpbHRlcnMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJGaWx0ZXJz
OjpjYWxjdWxhdGVPdXRzZXRzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyRmlsdGVy
czo6YmVnaW5GaWx0ZXJFZmZlY3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJGaWx0
ZXJzOjpzZXRGaWx0ZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJG
aWx0ZXJzOjpidWlsZEZpbHRlcik6IERlbGV0ZWQuCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRl
ckxheWVyRmlsdGVycy5oOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3Vy
Y2VGaWx0ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXI6
OmFwcGx5UmVzb3VyY2UpOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvU1ZHUmVuZGVyVHJlZUFz
VGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjp3cml0ZVNWR1Jlc291cmNlQ29udGFpbmVyKToK
KyAgICAgICAgKiBzdmcvU1ZHRkVEcm9wU2hhZG93RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpTVkdGRURyb3BTaGFkb3dFbGVtZW50OjpvdXRzZXRzIGNvbnN0KToKKyAgICAgICAgKiBz
dmcvU1ZHRkVEcm9wU2hhZG93RWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdGRUdhdXNzaWFu
Qmx1ckVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVHYXVzc2lhbkJsdXJFbGVt
ZW50OjpvdXRzZXRzIGNvbnN0KToKKyAgICAgICAgKiBzdmcvU1ZHRkVHYXVzc2lhbkJsdXJFbGVt
ZW50Lmg6CisgICAgICAgICogc3ZnL1NWR0ZFT2Zmc2V0RWxlbWVudC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpTVkdGRU9mZnNldEVsZW1lbnQ6Om91dHNldHMgY29uc3QpOgorICAgICAgICAqIHN2
Zy9TVkdGRU9mZnNldEVsZW1lbnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHRmlsdGVyUHJpbWl0aXZl
U3RhbmRhcmRBdHRyaWJ1dGVzLmg6CisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0ZXJQcmltaXRp
dmVTdGFuZGFyZEF0dHJpYnV0ZXM6Om91dHNldHMgY29uc3QpOgorICAgICAgICAqIHN2Zy9ncmFw
aGljcy9maWx0ZXJzL1NWR0ZpbHRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0ZXI6
OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0ZXI6OmNhbGN1bGF0ZVJlc29sdmVk
U2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0ZXI6OnJlc29sdmVkU2l6ZSBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0ZXI6Om91dHNldHMgY29uc3QpOiBEZWxldGVkLgor
ICAgICAgICAqIHN2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlci5oOgorICAgICAgICAqIHN2
Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlckJ1aWxkZXIuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6U1ZHRmlsdGVyQnVpbGRlcjo6U1ZHRmlsdGVyQnVpbGRlcik6CisgICAgICAgIChXZWJDb3Jl
OjphcHBlbmRFZmZlY3RUb0V4cHJlc3Npb24pOgorICAgICAgICAoV2ViQ29yZTo6YXBwZW5kR3Jh
cGhUb0V4cHJlc3Npb24pOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRmlsdGVyQnVpbGRlcjo6YnVp
bGRGaWx0ZXJFeHByZXNzaW9uKToKKyAgICAgICAgKFdlYkNvcmU6OmNhbGN1bGF0ZVByaW1pdGl2
ZU91dHNldHMpOgorICAgICAgICAoV2ViQ29yZTo6Y2FsY3VsYXRlR3JhcGhPdXRzZXRzKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNWR0ZpbHRlckJ1aWxkZXI6OmNhbGN1bGF0ZUZpbHRlck91dHNldHMp
OgorICAgICAgICAoV2ViQ29yZTo6U1ZHRmlsdGVyQnVpbGRlcjo6c2V0dXBCdWlsdGluRWZmZWN0
cyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0ZXJCdWlsZGVyOjpidWlsZEZp
bHRlckVmZmVjdHMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U1ZHRmlsdGVyQnVpbGRl
cjo6c291cmNlR3JhcGhpYyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTVkdG
aWx0ZXJCdWlsZGVyOjpzb3VyY2VBbHBoYSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpTVkdGaWx0ZXJCdWlsZGVyOjphZGROYW1lZEVmZmVjdCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpTVkdGaWx0ZXJCdWlsZGVyOjpuYW1lZEVmZmVjdCBjb25zdCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0ZXJCdWlsZGVyOjpuYW1lZEVmZmVjdHMgY29uc3Qp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U1ZHRmlsdGVyQnVpbGRlcjo6c2V0RWZmZWN0
SW5wdXRzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZpbHRlckJ1aWxkZXI6OmFw
cGVuZEVmZmVjdFRvRWZmZWN0UmVuZGVyZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
U1ZHRmlsdGVyQnVpbGRlcjo6ZWZmZWN0R2VvbWV0cnkgY29uc3QpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6U1ZHRmlsdGVyQnVpbGRlcjo6YnVpbGRFZmZlY3RFeHByZXNzaW9uIGNvbnN0
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZpbHRlckJ1aWxkZXI6OmJ1aWxkRXhw
cmVzc2lvbiBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogc3ZnL2dyYXBoaWNzL2ZpbHRlcnMv
U1ZHRmlsdGVyQnVpbGRlci5oOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRmlsdGVyQnVpbGRlcjo6
dGFyZ2V0Qm91bmRpbmdCb3ggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRmlsdGVyQnVp
bGRlcjo6cHJpbWl0aXZlVW5pdHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRmlsdGVy
QnVpbGRlcjo6ZWZmZWN0QnlSZW5kZXJlcik6CisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0ZXJC
dWlsZGVyOjpzZXRUYXJnZXRCb3VuZGluZ0JveCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpTVkdGaWx0ZXJCdWlsZGVyOjpzZXRQcmltaXRpdmVVbml0cyk6IERlbGV0ZWQuCisgICAgICAg
ICogc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyRXhwcmVzc2lvbi5oOgorICAgICAgICAq
IHN2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlckdyYXBoLmg6IEFkZGVkLgorICAgICAgICAo
V2ViQ29yZTo6U1ZHRmlsdGVyR3JhcGg6OlNWR0ZpbHRlckdyYXBoKToKKyAgICAgICAgKFdlYkNv
cmU6OlNWR0ZpbHRlckdyYXBoOjpzb3VyY2VHcmFwaGljIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OlNWR0ZpbHRlckdyYXBoOjpzb3VyY2VBbHBoYSBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpTVkdGaWx0ZXJHcmFwaDo6YWRkTmFtZWROb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0Zp
bHRlckdyYXBoOjpnZXROYW1lZE5vZGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRmls
dGVyR3JhcGg6OmdldE5hbWVkTm9kZXMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRmls
dGVyR3JhcGg6OnNldE5vZGVJbnB1dHMpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRmlsdGVyR3Jh
cGg6OmdldE5vZGVJbnB1dHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRmlsdGVyR3Jh
cGg6Omxhc3ROb2RlIGNvbnN0KToKKwogMjAyMi0wMy0yOCAgQWxhbiBCdWp0YXMgIDx6YWxhbkBh
cHBsZS5jb20+CiAKICAgICAgICAgWyBtYWNPUyAmIFdpbiBdIGZhc3QvcmVwYWludC9saXN0LWl0
ZW0tZXF1YWwtc3R5bGUtY2hhbmdlLW5vLXJlcGFpbnQuaHRtbCBpcyBhIGZsYWt5IGZhaWx1cmUK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpp
bmRleCA1YWI5MzIxYjUyYWJlMmQ5OGFjMzAyMmJhY2NhMjhiYzY1YmVlM2VmLi4yZWFlNTZiNzUx
N2VmZDc2MDBlM2FlNGRkYzcxMWVlMmE5ZGFhYmQ4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUv
V2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0xMTQ1NSw2ICsxMTQ1NSw3IEBA
CiAJCTcyRjFBREEzMUEzOTBCOUYwMDAxNEUxOCAvKiBKU0VYVEZyYWdEZXB0aC5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0VYVEZyYWdEZXB0aC5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyRjFBREE0MUEzOTBCOUYwMDAxNEUxOCAvKiBKU0VY
VEZyYWdEZXB0aC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0VYVEZyYWdE
ZXB0aC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MkY2NjdERjI2MEMyNjQ0MDBF
RTM2QUQgLyogRGlhZ25vc3RpY0xvZ2dpbmdEb21haW4uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGlhZ25v
c3RpY0xvZ2dpbmdEb21haW4uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJGN0Ew
ODAyN0YxNzFCRjAwMDhFRUU4IC8qIFNWR0ZpbHRlckdyYXBoLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNW
R0ZpbHRlckdyYXBoLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyRjdFNzQyMjc5
QjhGNzQwMEQ4MkQyRCAvKiBTb3VyY2VJbWFnZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBTb3VyY2VJbWFnZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTcyRjdFNzQ0Mjc5QjhGNzQwMEQ4MkQyRCAvKiBTb3VyY2VJbWFnZS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBTb3VyY2VJbWFnZS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk3MkY3RTc0RTI3OUNFREU4MDBEODJEMkQgLyogRkVJbWFnZS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBGRUltYWdlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAg
LTI4ODc2LDYgKzI4ODc3LDcgQEAKIAkJCQkwODFFQkYzODBGRDM0RjQxMDBEQTc1NTkgLyogU1ZH
RmlsdGVyQnVpbGRlci5jcHAgKi8sCiAJCQkJMDgxRUJGMzkwRkQzNEY0MTAwREE3NTU5IC8qIFNW
R0ZpbHRlckJ1aWxkZXIuaCAqLywKIAkJCQk3MjZDREUyNTI3NUI0ODk3MDBBNDQ1QjIgLyogU1ZH
RmlsdGVyRXhwcmVzc2lvbi5oICovLAorCQkJCTcyRjdBMDgwMjdGMTcxQkYwMDA4RUVFOCAvKiBT
VkdGaWx0ZXJHcmFwaC5oICovLAogCQkJKTsKIAkJCXBhdGggPSBmaWx0ZXJzOwogCQkJc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVEcm9wU2hhZG93LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVEcm9wU2hhZG93LmNwcAppbmRleCAxNzMzOTA4NGU2OWUwZGMw
ZGRhZTZmMmQ3NzM0ZjFlZDEzYzVhZWJlLi42MWQ5NzcyMWUyZDA5ZTg1Njg0M2E3NDMzNGRiNDI4
YWU3NzI1ZTk4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFRHJvcFNoYWRvdy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRURyb3BTaGFkb3cuY3BwCkBAIC02MSwxNCArNjEsMTQgQEAgRmxvYXRS
ZWN0IEZFRHJvcFNoYWRvdzo6Y2FsY3VsYXRlSW1hZ2VSZWN0KGNvbnN0IEZpbHRlciYgZmlsdGVy
LCBjb25zdCBGaWx0ZXJJbWEKICAgICByZXR1cm4gZmlsdGVyLmNsaXBUb01heEVmZmVjdFJlY3Qo
aW1hZ2VSZWN0LCBwcmltaXRpdmVTdWJyZWdpb24pOwogfQogCi1JbnRPdXRzZXRzIEZFRHJvcFNo
YWRvdzo6b3V0c2V0cyhjb25zdCBGaWx0ZXImKSBjb25zdAorSW50T3V0c2V0cyBGRURyb3BTaGFk
b3c6OmNhbGN1bGF0ZU91dHNldHMoY29uc3QgRmxvYXRTaXplJiBvZmZzZXQsIGNvbnN0IEZsb2F0
U2l6ZSYgc3RkRGV2aWF0aW9uKQogewotICAgIEludFNpemUgb3V0c2V0U2l6ZSA9IEZFR2F1c3Np
YW5CbHVyOjpjYWxjdWxhdGVPdXRzZXRTaXplKHsgbV9zdGRYLCBtX3N0ZFkgfSk7CisgICAgSW50
U2l6ZSBvdXRzZXRTaXplID0gRkVHYXVzc2lhbkJsdXI6OmNhbGN1bGF0ZU91dHNldFNpemUoc3Rk
RGV2aWF0aW9uKTsKIAotICAgIGludCB0b3AgPSBzdGQ6Om1heDxpbnQ+KDAsIG91dHNldFNpemUu
aGVpZ2h0KCkgLSBtX2R5KTsKLSAgICBpbnQgcmlnaHQgPSBzdGQ6Om1heDxpbnQ+KDAsIG91dHNl
dFNpemUud2lkdGgoKSArIG1fZHgpOwotICAgIGludCBib3R0b20gPSBzdGQ6Om1heDxpbnQ+KDAs
IG91dHNldFNpemUuaGVpZ2h0KCkgKyBtX2R5KTsKLSAgICBpbnQgbGVmdCA9IHN0ZDo6bWF4PGlu
dD4oMCwgb3V0c2V0U2l6ZS53aWR0aCgpIC0gbV9keCk7CisgICAgaW50IHRvcCA9IHN0ZDo6bWF4
PGludD4oMCwgb3V0c2V0U2l6ZS5oZWlnaHQoKSAtIG9mZnNldC5oZWlnaHQoKSk7CisgICAgaW50
IHJpZ2h0ID0gc3RkOjptYXg8aW50PigwLCBvdXRzZXRTaXplLndpZHRoKCkgKyBvZmZzZXQud2lk
dGgoKSk7CisgICAgaW50IGJvdHRvbSA9IHN0ZDo6bWF4PGludD4oMCwgb3V0c2V0U2l6ZS5oZWln
aHQoKSArIG9mZnNldC5oZWlnaHQoKSk7CisgICAgaW50IGxlZnQgPSBzdGQ6Om1heDxpbnQ+KDAs
IG91dHNldFNpemUud2lkdGgoKSAtIG9mZnNldC53aWR0aCgpKTsKIAogICAgIHJldHVybiB7IHRv
cCwgcmlnaHQsIGJvdHRvbSwgbGVmdCB9OwogfQpAQCAtNzcsNyArNzcsNyBAQCBzdGQ6OnVuaXF1
ZV9wdHI8RmlsdGVyRWZmZWN0QXBwbGllcj4gRkVEcm9wU2hhZG93OjpjcmVhdGVTb2Z0d2FyZUFw
cGxpZXIoKSBjb25zdAogewogICAgIHJldHVybiBGaWx0ZXJFZmZlY3RBcHBsaWVyOjpjcmVhdGU8
RkVEcm9wU2hhZG93U29mdHdhcmVBcHBsaWVyPigqdGhpcyk7CiB9Ci0gICAgCisKIFRleHRTdHJl
YW0mIEZFRHJvcFNoYWRvdzo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0cywg
RmlsdGVyUmVwcmVzZW50YXRpb24gcmVwcmVzZW50YXRpb24pIGNvbnN0CiB7CiAgICAgdHMgPDwg
aW5kZW50IDw8IltmZURyb3BTaGFkb3ciOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURyb3BTaGFkb3cuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEcm9wU2hhZG93LmgKaW5kZXggOGEwMzAzZjcwZDY4
OGNlMTc2ZTczMTRhZWFlODM5MDRjZTBlZGU2ZS4uN2EyMGIzMmYyZDgwOThiOWZiNTdkZDU5YThh
ZTUyMzE3MjM0MjhjZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRURyb3BTaGFkb3cuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFRHJvcFNoYWRvdy5oCkBAIC00Nyw2ICs0Nyw4IEBAIHB1YmxpYzoK
ICAgICBmbG9hdCBzaGFkb3dPcGFjaXR5KCkgY29uc3QgeyByZXR1cm4gbV9zaGFkb3dPcGFjaXR5
OyB9CiAgICAgdm9pZCBzZXRTaGFkb3dPcGFjaXR5KGZsb2F0IHNoYWRvd09wYWNpdHkpIHsgbV9z
aGFkb3dPcGFjaXR5ID0gc2hhZG93T3BhY2l0eTsgfQogCisgICAgc3RhdGljIEludE91dHNldHMg
Y2FsY3VsYXRlT3V0c2V0cyhjb25zdCBGbG9hdFNpemUmIG9mZnNldCwgY29uc3QgRmxvYXRTaXpl
JiBzdGREZXZpYXRpb24pOworCiAgICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNv
ZGUoRW5jb2RlciYpIGNvbnN0OwogICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBz
dGQ6Om9wdGlvbmFsPFJlZjxGRURyb3BTaGFkb3c+PiBkZWNvZGUoRGVjb2RlciYpOwogCkBAIC01
NSw4ICs1Nyw2IEBAIHByaXZhdGU6CiAKICAgICBGbG9hdFJlY3QgY2FsY3VsYXRlSW1hZ2VSZWN0
KGNvbnN0IEZpbHRlciYsIGNvbnN0IEZpbHRlckltYWdlVmVjdG9yJiBpbnB1dHMsIGNvbnN0IEZs
b2F0UmVjdCYgcHJpbWl0aXZlU3VicmVnaW9uKSBjb25zdCBvdmVycmlkZTsKIAotICAgIEludE91
dHNldHMgb3V0c2V0cyhjb25zdCBGaWx0ZXImKSBjb25zdCBvdmVycmlkZTsKLQogICAgIHN0ZDo6
dW5pcXVlX3B0cjxGaWx0ZXJFZmZlY3RBcHBsaWVyPiBjcmVhdGVTb2Z0d2FyZUFwcGxpZXIoKSBj
b25zdCBvdmVycmlkZTsKIAogICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRh
dGlvbihXVEY6OlRleHRTdHJlYW0mLCBGaWx0ZXJSZXByZXNlbnRhdGlvbikgY29uc3Qgb3ZlcnJp
ZGU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFR2F1c3NpYW5CbHVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVHYXVzc2lhbkJsdXIuY3BwCmluZGV4IDdhNTM2NzM2YjY4ZTJmODE5ZGRlYTZmNGQ2
MWY5NmY0OTdiODZkZjYuLjY5NDc1M2NmNGM3NTgwYWQ4ODljY2QzZWI3ZTk2NDkxY2RiZTIyM2Ig
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVH
YXVzc2lhbkJsdXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVHYXVzc2lhbkJsdXIuY3BwCkBAIC0xMjAsOSArMTIwLDkgQEAgRmxvYXRSZWN0IEZF
R2F1c3NpYW5CbHVyOjpjYWxjdWxhdGVJbWFnZVJlY3QoY29uc3QgRmlsdGVyJiBmaWx0ZXIsIGNv
bnN0IEZpbHRlckkKICAgICByZXR1cm4gZmlsdGVyLmNsaXBUb01heEVmZmVjdFJlY3QoaW1hZ2VS
ZWN0LCBwcmltaXRpdmVTdWJyZWdpb24pOwogfQogCi1JbnRPdXRzZXRzIEZFR2F1c3NpYW5CbHVy
OjpvdXRzZXRzKGNvbnN0IEZpbHRlciYgZmlsdGVyKSBjb25zdAorSW50T3V0c2V0cyBGRUdhdXNz
aWFuQmx1cjo6Y2FsY3VsYXRlT3V0c2V0cyhjb25zdCBGbG9hdFNpemUmIHN0ZERldmlhdGlvbikK
IHsKLSAgICBJbnRTaXplIG91dHNldFNpemUgPSBjYWxjdWxhdGVPdXRzZXRTaXplKGZpbHRlci5y
ZXNvbHZlZFNpemUoeyBtX3N0ZFgsIG1fc3RkWSB9KSk7CisgICAgSW50U2l6ZSBvdXRzZXRTaXpl
ID0gY2FsY3VsYXRlT3V0c2V0U2l6ZShzdGREZXZpYXRpb24pOwogICAgIHJldHVybiB7IG91dHNl
dFNpemUuaGVpZ2h0KCksIG91dHNldFNpemUud2lkdGgoKSwgb3V0c2V0U2l6ZS5oZWlnaHQoKSwg
b3V0c2V0U2l6ZS53aWR0aCgpIH07CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVHYXVzc2lhbkJsdXIuaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVHYXVzc2lhbkJsdXIuaAppbmRleCA4MDE1NDg0
NzI0YmE3NzBlYjRjOTA5YzE3MzEzNjJmYTliNTU3MTNlLi4yNGNiOTI2Zjc2NDhkMWFmYzRkMDg5
MzJhNDI1MjIzZjM0OGJmMDBmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFR2F1c3NpYW5CbHVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUdhdXNzaWFuQmx1ci5oCkBAIC00NCw2ICs0NCw4IEBA
IHB1YmxpYzoKICAgICBzdGF0aWMgSW50U2l6ZSBjYWxjdWxhdGVVbnNjYWxlZEtlcm5lbFNpemUo
RmxvYXRTaXplIHN0ZERldmlhdGlvbik7CiAgICAgc3RhdGljIEludFNpemUgY2FsY3VsYXRlT3V0
c2V0U2l6ZShGbG9hdFNpemUgc3RkRGV2aWF0aW9uKTsKIAorICAgIHN0YXRpYyBJbnRPdXRzZXRz
IGNhbGN1bGF0ZU91dHNldHMoY29uc3QgRmxvYXRTaXplJiBzdGREZXZpYXRpb24pOworCiAgICAg
dGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OwogICAg
IHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBzdGQ6Om9wdGlvbmFsPFJlZjxGRUdhdXNz
aWFuQmx1cj4+IGRlY29kZShEZWNvZGVyJik7CiAKQEAgLTUyLDggKzU0LDYgQEAgcHJpdmF0ZToK
IAogICAgIEZsb2F0UmVjdCBjYWxjdWxhdGVJbWFnZVJlY3QoY29uc3QgRmlsdGVyJiwgY29uc3Qg
RmlsdGVySW1hZ2VWZWN0b3ImIGlucHV0cywgY29uc3QgRmxvYXRSZWN0JiBwcmltaXRpdmVTdWJy
ZWdpb24pIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgSW50T3V0c2V0cyBvdXRzZXRzKGNvbnN0IEZp
bHRlciYpIGNvbnN0IG92ZXJyaWRlOwotCiAgICAgYm9vbCByZXN1bHRJc0FscGhhSW1hZ2UoY29u
c3QgRmlsdGVySW1hZ2VWZWN0b3ImIGlucHV0cykgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICBzdGQ6
OnVuaXF1ZV9wdHI8RmlsdGVyRWZmZWN0QXBwbGllcj4gY3JlYXRlU29mdHdhcmVBcHBsaWVyKCkg
Y29uc3Qgb3ZlcnJpZGU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFT2Zmc2V0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVPZmZzZXQuY3BwCmluZGV4IDM5NWE4MjZiZTAyZDcwYjYyMzkzMWNhYWM4
ZTBlY2IwNDMyNzg3M2UuLjg2OWRjZjZjNThkMjgzNWUzY2RmYWU1Yjc4N2MyZTZhOWI5Zjk0Njcg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVP
ZmZzZXQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVPZmZzZXQuY3BwCkBAIC02MCwxOSArNjAsMTkgQEAgRmxvYXRSZWN0IEZFT2Zmc2V0OjpjYWxj
dWxhdGVJbWFnZVJlY3QoY29uc3QgRmlsdGVyJiBmaWx0ZXIsIGNvbnN0IEZpbHRlckltYWdlVmUK
ICAgICByZXR1cm4gZmlsdGVyLmNsaXBUb01heEVmZmVjdFJlY3QoaW1hZ2VSZWN0LCBwcmltaXRp
dmVTdWJyZWdpb24pOwogfQogCi1JbnRPdXRzZXRzIEZFT2Zmc2V0OjpvdXRzZXRzKGNvbnN0IEZp
bHRlciYgZmlsdGVyKSBjb25zdAorSW50T3V0c2V0cyBGRU9mZnNldDo6Y2FsY3VsYXRlT3V0c2V0
cyhjb25zdCBGbG9hdFNpemUmIG9mZnNldCkKIHsKLSAgICBhdXRvIG9mZnNldCA9IGV4cGFuZGVk
SW50U2l6ZShmaWx0ZXIucmVzb2x2ZWRTaXplKHsgbV9keCwgbV9keSB9KSk7CisgICAgYXV0byBh
ZGp1c3RlZE9mZnNldCA9IGV4cGFuZGVkSW50U2l6ZShvZmZzZXQpOwogCiAgICAgSW50T3V0c2V0
cyBvdXRzZXRzOwotICAgIGlmIChvZmZzZXQuaGVpZ2h0KCkgPCAwKQotICAgICAgICBvdXRzZXRz
LnNldFRvcCgtb2Zmc2V0LmhlaWdodCgpKTsKKyAgICBpZiAoYWRqdXN0ZWRPZmZzZXQuaGVpZ2h0
KCkgPCAwKQorICAgICAgICBvdXRzZXRzLnNldFRvcCgtYWRqdXN0ZWRPZmZzZXQuaGVpZ2h0KCkp
OwogICAgIGVsc2UKLSAgICAgICAgb3V0c2V0cy5zZXRCb3R0b20ob2Zmc2V0LmhlaWdodCgpKTsK
LSAgICBpZiAob2Zmc2V0LndpZHRoKCkgPCAwKQotICAgICAgICBvdXRzZXRzLnNldExlZnQoLW9m
ZnNldC53aWR0aCgpKTsKKyAgICAgICAgb3V0c2V0cy5zZXRCb3R0b20oYWRqdXN0ZWRPZmZzZXQu
aGVpZ2h0KCkpOworICAgIGlmIChhZGp1c3RlZE9mZnNldC53aWR0aCgpIDwgMCkKKyAgICAgICAg
b3V0c2V0cy5zZXRMZWZ0KC1hZGp1c3RlZE9mZnNldC53aWR0aCgpKTsKICAgICBlbHNlCi0gICAg
ICAgIG91dHNldHMuc2V0UmlnaHQob2Zmc2V0LndpZHRoKCkpOworICAgICAgICBvdXRzZXRzLnNl
dFJpZ2h0KGFkanVzdGVkT2Zmc2V0LndpZHRoKCkpOwogCiAgICAgcmV0dXJuIG91dHNldHM7CiB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
T2Zmc2V0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFT2Zm
c2V0LmgKaW5kZXggY2JhMDA2Y2UyYjg5YTc5YjM0OWNkNGNhOGRmNWI2MjI5YzRlNWVmMy4uMWIy
NDY4NDE5Mzc2MzNhNWFhYjNmYjYwYzE0Yjc5NTI1MWU2MGM1MiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU9mZnNldC5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVPZmZzZXQuaApAQCAtMzYsNiAr
MzYsOCBAQCBwdWJsaWM6CiAgICAgZmxvYXQgZHkoKSBjb25zdCB7IHJldHVybiBtX2R5OyB9CiAg
ICAgdm9pZCBzZXREeShmbG9hdCk7CiAKKyAgICBzdGF0aWMgSW50T3V0c2V0cyBjYWxjdWxhdGVP
dXRzZXRzKGNvbnN0IEZsb2F0U2l6ZSYgb2Zmc2V0KTsKKwogICAgIHRlbXBsYXRlPGNsYXNzIEVu
Y29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKICAgICB0ZW1wbGF0ZTxjbGFzcyBE
ZWNvZGVyPiBzdGF0aWMgc3RkOjpvcHRpb25hbDxSZWY8RkVPZmZzZXQ+PiBkZWNvZGUoRGVjb2Rl
ciYpOwogCkBAIC00NCw4ICs0Niw2IEBAIHByaXZhdGU6CiAKICAgICBGbG9hdFJlY3QgY2FsY3Vs
YXRlSW1hZ2VSZWN0KGNvbnN0IEZpbHRlciYsIGNvbnN0IEZpbHRlckltYWdlVmVjdG9yJiBpbnB1
dHMsIGNvbnN0IEZsb2F0UmVjdCYgcHJpbWl0aXZlU3VicmVnaW9uKSBjb25zdCBvdmVycmlkZTsK
IAotICAgIEludE91dHNldHMgb3V0c2V0cyhjb25zdCBGaWx0ZXImKSBjb25zdCBvdmVycmlkZTsK
LQogICAgIGJvb2wgcmVzdWx0SXNBbHBoYUltYWdlKGNvbnN0IEZpbHRlckltYWdlVmVjdG9yJiBp
bnB1dHMpIGNvbnN0IG92ZXJyaWRlOwogCiAgICAgc3RkOjp1bmlxdWVfcHRyPEZpbHRlckVmZmVj
dEFwcGxpZXI+IGNyZWF0ZVNvZnR3YXJlQXBwbGllcigpIGNvbnN0IG92ZXJyaWRlOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXIuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyLmgKaW5kZXgg
ZTBlZjFiYWE3ZGFlODQyYjk5ZGRlNzg4MmQ4N2Y0YTAyOTlhZmUzYi4uMTA4NjI0NmNkZGU1MzM2
MDgzOGVlNDAzN2MxNGE2YjhhMmNiNTBjMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlci5oCkBAIC0zNiw3ICszNiw2IEBAIGNsYXNzIEZp
bHRlclJlc3VsdHM7CiAKIGNsYXNzIEZpbHRlciA6IHB1YmxpYyBGaWx0ZXJGdW5jdGlvbiB7CiAg
ICAgdXNpbmcgRmlsdGVyRnVuY3Rpb246OmFwcGx5OwotICAgIHVzaW5nIEZpbHRlckZ1bmN0aW9u
OjpvdXRzZXRzOwogCiBwdWJsaWM6CiAgICAgZW51bSBjbGFzcyBDbGlwT3BlcmF0aW9uIHsgSW50
ZXJzZWN0LCBVbml0ZSB9OwpAQCAtNjYsNyArNjUsNiBAQCBwdWJsaWM6CiAKICAgICBib29sIGNs
YW1wRmlsdGVyUmVnaW9uSWZOZWVkZWQoKTsKIAotICAgIHZpcnR1YWwgSW50T3V0c2V0cyBvdXRz
ZXRzKCkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgUmVmUHRyPEZpbHRlckltYWdlPiBhcHBseShG
aWx0ZXJJbWFnZSogc291cmNlSW1hZ2UsIEZpbHRlclJlc3VsdHMmKSA9IDA7CiAgICAgV0VCQ09S
RV9FWFBPUlQgUmVmUHRyPEZpbHRlckltYWdlPiBhcHBseShJbWFnZUJ1ZmZlciogc291cmNlSW1h
Z2UsIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlSW1hZ2VSZWN0LCBGaWx0ZXJSZXN1bHRzJik7CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmls
dGVyRnVuY3Rpb24uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RmlsdGVyRnVuY3Rpb24uaAppbmRleCA2NDRiNTgzNWRiYmUwNWU4ZjU5ZDc1ODdjNTMyYWQ0ZjY1
MDNkY2Q3Li5jODUzOWFiZjEwOWNmOWE3M2FhMzUxNmU2MmM5ZDEyZTk3NDAzNjY3IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckZ1bmN0
aW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0
ZXJGdW5jdGlvbi5oCkBAIC05NSw3ICs5NSw2IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgYm9v
bCBzdXBwb3J0c0FjY2VsZXJhdGVkUmVuZGVyaW5nKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0K
ICAgICB2aXJ0dWFsIFJlZlB0cjxGaWx0ZXJJbWFnZT4gYXBwbHkoY29uc3QgRmlsdGVyJiwgRmls
dGVySW1hZ2UmLCBGaWx0ZXJSZXN1bHRzJikgeyByZXR1cm4gbnVsbHB0cjsgfQotICAgIHZpcnR1
YWwgSW50T3V0c2V0cyBvdXRzZXRzKGNvbnN0IEZpbHRlciYpIGNvbnN0IHsgcmV0dXJuIHsgfTsg
fQogCiAgICAgdmlydHVhbCBXVEY6OlRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24o
V1RGOjpUZXh0U3RyZWFtJiwgRmlsdGVyUmVwcmVzZW50YXRpb24gPSBGaWx0ZXJSZXByZXNlbnRh
dGlvbjo6VGVzdE91dHB1dCkgY29uc3QgPSAwOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvQ1NTRmlsdGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9DU1NG
aWx0ZXIuY3BwCmluZGV4IDYzNmQ4MTQ1MTFiZjM1N2ExMmJlNTFhNWI4N2M0NTI3NjQ3OGZlMjcu
LmI2ODg4MzFlYjEyYzE3Y2QyMDJjYzgzMGJmZjM2Nzk1ZGY0MTAzNjYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9DU1NGaWx0ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9DU1NGaWx0ZXIuY3BwCkBAIC03Niw2ICs3NiwxMiBAQCBDU1NGaWx0ZXI6OkNT
U0ZpbHRlcihWZWN0b3I8UmVmPEZpbHRlckZ1bmN0aW9uPj4mJiBmdW5jdGlvbnMpCiB7CiB9CiAK
K3N0YXRpYyBJbnRPdXRzZXRzIGNhbGN1bGF0ZUJsdXJFZmZlY3RPdXRzZXRzKGNvbnN0IEJsdXJG
aWx0ZXJPcGVyYXRpb24mIGJsdXJPcGVyYXRpb24pCit7CisgICAgZmxvYXQgc3RkRGV2aWF0aW9u
ID0gZmxvYXRWYWx1ZUZvckxlbmd0aChibHVyT3BlcmF0aW9uLnN0ZERldmlhdGlvbigpLCAwKTsK
KyAgICByZXR1cm4gRkVHYXVzc2lhbkJsdXI6OmNhbGN1bGF0ZU91dHNldHMoeyBzdGREZXZpYXRp
b24sIHN0ZERldmlhdGlvbiB9KTsKK30KKwogc3RhdGljIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGNy
ZWF0ZUJsdXJFZmZlY3QoY29uc3QgQmx1ckZpbHRlck9wZXJhdGlvbiYgYmx1ck9wZXJhdGlvbiwg
RmlsdGVyOjpDbGlwT3BlcmF0aW9uIGNsaXBPcGVyYXRpb24pCiB7CiAgICAgZmxvYXQgc3RkRGV2
aWF0aW9uID0gZmxvYXRWYWx1ZUZvckxlbmd0aChibHVyT3BlcmF0aW9uLnN0ZERldmlhdGlvbigp
LCAwKTsKQEAgLTEwNSw2ICsxMTEsMTIgQEAgc3RhdGljIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGNy
ZWF0ZUNvbnRyYXN0RWZmZWN0KGNvbnN0IEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWwKICAgICBy
ZXR1cm4gRkVDb21wb25lbnRUcmFuc2Zlcjo6Y3JlYXRlKHRyYW5zZmVyRnVuY3Rpb24sIHRyYW5z
ZmVyRnVuY3Rpb24sIHRyYW5zZmVyRnVuY3Rpb24sIG51bGxGdW5jdGlvbik7CiB9CiAKK3N0YXRp
YyBJbnRPdXRzZXRzIGNhbGN1bGF0ZURyb3BTaGFkb3dFZmZlY3RPdXRzZXRzKGNvbnN0IERyb3BT
aGFkb3dGaWx0ZXJPcGVyYXRpb24mIGRyb3BTaGFkb3dPcGVyYXRpb24pCit7CisgICAgZmxvYXQg
c3RkRGV2aWF0aW9uID0gZHJvcFNoYWRvd09wZXJhdGlvbi5zdGREZXZpYXRpb24oKTsKKyAgICBy
ZXR1cm4gRkVEcm9wU2hhZG93OjpjYWxjdWxhdGVPdXRzZXRzKEZsb2F0U2l6ZShkcm9wU2hhZG93
T3BlcmF0aW9uLngoKSwgZHJvcFNoYWRvd09wZXJhdGlvbi55KCkpLCB7IHN0ZERldmlhdGlvbiwg
c3RkRGV2aWF0aW9uIH0pOworfQorCiBzdGF0aWMgUmVmUHRyPEZpbHRlckVmZmVjdD4gY3JlYXRl
RHJvcFNoYWRvd0VmZmVjdChjb25zdCBEcm9wU2hhZG93RmlsdGVyT3BlcmF0aW9uJiBkcm9wU2hh
ZG93T3BlcmF0aW9uKQogewogICAgIGZsb2F0IHN0ZCA9IGRyb3BTaGFkb3dPcGVyYXRpb24uc3Rk
RGV2aWF0aW9uKCk7CkBAIC0yMTksNyArMjMxLDcgQEAgc3RhdGljIFJlZlB0cjxGaWx0ZXJFZmZl
Y3Q+IGNyZWF0ZVNlcGlhRWZmZWN0KGNvbnN0IEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXQK
ICAgICByZXR1cm4gRkVDb2xvck1hdHJpeDo6Y3JlYXRlKEZFQ09MT1JNQVRSSVhfVFlQRV9NQVRS
SVgsIFdURk1vdmUoaW5wdXRQYXJhbWV0ZXJzKSk7CiB9CiAKLXN0YXRpYyBSZWZQdHI8U1ZHRmls
dGVyPiBjcmVhdGVTVkdGaWx0ZXIoQ1NTRmlsdGVyJiBmaWx0ZXIsIGNvbnN0IFJlZmVyZW5jZUZp
bHRlck9wZXJhdGlvbiYgZmlsdGVyT3BlcmF0aW9uLCBSZW5kZXJFbGVtZW50JiByZW5kZXJlciwg
Y29uc3QgRmxvYXRSZWN0JiB0YXJnZXRCb3VuZGluZ0JveCkKK3N0YXRpYyBTVkdGaWx0ZXJFbGVt
ZW50KiByZWZlcmVuY2VGaWx0ZXJFbGVtZW50KGNvbnN0IFJlZmVyZW5jZUZpbHRlck9wZXJhdGlv
biYgZmlsdGVyT3BlcmF0aW9uLCBSZW5kZXJFbGVtZW50JiByZW5kZXJlcikKIHsKICAgICBhdXRv
JiByZWZlcmVuY2VkU1ZHUmVzb3VyY2VzID0gcmVuZGVyZXIuZW5zdXJlUmVmZXJlbmNlZFNWR1Jl
c291cmNlcygpOwogICAgIGF1dG8qIGZpbHRlckVsZW1lbnQgPSByZWZlcmVuY2VkU1ZHUmVzb3Vy
Y2VzLnJlZmVyZW5jZWRGaWx0ZXJFbGVtZW50KHJlbmRlcmVyLmRvY3VtZW50KCksIGZpbHRlck9w
ZXJhdGlvbik7CkBAIC0yMzIsMTYgKzI0NCwzNCBAQCBzdGF0aWMgUmVmUHRyPFNWR0ZpbHRlcj4g
Y3JlYXRlU1ZHRmlsdGVyKENTU0ZpbHRlciYgZmlsdGVyLCBjb25zdCBSZWZlcmVuY2VGaWx0ZQog
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAKKyAgICByZXR1cm4gZmlsdGVyRWxlbWVu
dDsKK30KKworc3RhdGljIEludE91dHNldHMgY2FsY3VsYXRlUmVmZXJlbmNlRmlsdGVyT3V0c2V0
cyhjb25zdCBSZWZlcmVuY2VGaWx0ZXJPcGVyYXRpb24mIGZpbHRlck9wZXJhdGlvbiwgUmVuZGVy
RWxlbWVudCYgcmVuZGVyZXIsIGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0Qm91bmRpbmdCb3gpCit7
CisgICAgYXV0byBmaWx0ZXJFbGVtZW50ID0gcmVmZXJlbmNlRmlsdGVyRWxlbWVudChmaWx0ZXJP
cGVyYXRpb24sIHJlbmRlcmVyKTsKKyAgICBpZiAoIWZpbHRlckVsZW1lbnQpCisgICAgICAgIHJl
dHVybiB7IH07CisKKyAgICBTVkdGaWx0ZXJCdWlsZGVyIGJ1aWxkZXIodGFyZ2V0Qm91bmRpbmdC
b3gsIGZpbHRlckVsZW1lbnQtPnByaW1pdGl2ZVVuaXRzKCkpOworICAgIHJldHVybiBidWlsZGVy
LmNhbGN1bGF0ZUZpbHRlck91dHNldHMoKmZpbHRlckVsZW1lbnQpOworfQorCitzdGF0aWMgUmVm
UHRyPFNWR0ZpbHRlcj4gY3JlYXRlUmVmZXJlbmNlRmlsdGVyKENTU0ZpbHRlciYgZmlsdGVyLCBj
b25zdCBSZWZlcmVuY2VGaWx0ZXJPcGVyYXRpb24mIGZpbHRlck9wZXJhdGlvbiwgUmVuZGVyRWxl
bWVudCYgcmVuZGVyZXIsIGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0Qm91bmRpbmdCb3gpCit7Cisg
ICAgYXV0byBmaWx0ZXJFbGVtZW50ID0gcmVmZXJlbmNlRmlsdGVyRWxlbWVudChmaWx0ZXJPcGVy
YXRpb24sIHJlbmRlcmVyKTsKKyAgICBpZiAoIWZpbHRlckVsZW1lbnQpCisgICAgICAgIHJldHVy
biBudWxscHRyOworCiAgICAgYXV0byBmaWx0ZXJSZWdpb24gPSBTVkdMZW5ndGhDb250ZXh0Ojpy
ZXNvbHZlUmVjdGFuZ2xlPFNWR0ZpbHRlckVsZW1lbnQ+KGZpbHRlckVsZW1lbnQsIGZpbHRlckVs
ZW1lbnQtPmZpbHRlclVuaXRzKCksIHRhcmdldEJvdW5kaW5nQm94KTsKIAotICAgIFNWR0ZpbHRl
ckJ1aWxkZXIgYnVpbGRlcjsKKyAgICBTVkdGaWx0ZXJCdWlsZGVyIGJ1aWxkZXIodGFyZ2V0Qm91
bmRpbmdCb3gsIGZpbHRlckVsZW1lbnQtPnByaW1pdGl2ZVVuaXRzKCkpOwogICAgIHJldHVybiBT
VkdGaWx0ZXI6OmNyZWF0ZSgqZmlsdGVyRWxlbWVudCwgYnVpbGRlciwgZmlsdGVyLnJlbmRlcmlu
Z01vZGUoKSwgZmlsdGVyLmZpbHRlclNjYWxlKCksIGZpbHRlci5jbGlwT3BlcmF0aW9uKCksIGZp
bHRlclJlZ2lvbiwgdGFyZ2V0Qm91bmRpbmdCb3gpOwogfQogCiBib29sIENTU0ZpbHRlcjo6YnVp
bGRGaWx0ZXJGdW5jdGlvbnMoUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIsIGNvbnN0IEZpbHRlck9w
ZXJhdGlvbnMmIG9wZXJhdGlvbnMsIGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0Qm91bmRpbmdCb3gp
CiB7Ci0gICAgUmVmUHRyPEZpbHRlckVmZmVjdD4gZWZmZWN0OwotICAgIFJlZlB0cjxTVkdGaWx0
ZXI+IGZpbHRlcjsKKyAgICBSZWZQdHI8RmlsdGVyRnVuY3Rpb24+IGZ1bmN0aW9uOwogCiAgICAg
Zm9yIChhdXRvJiBvcGVyYXRpb24gOiBvcGVyYXRpb25zLm9wZXJhdGlvbnMoKSkgewogICAgICAg
ICBzd2l0Y2ggKG9wZXJhdGlvbi0+dHlwZSgpKSB7CkBAIC0yNTAsNjMgKzI4MCw2MCBAQCBib29s
IENTU0ZpbHRlcjo6YnVpbGRGaWx0ZXJGdW5jdGlvbnMoUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIs
IGNvbnN0IEZpbHRlck9wZXJhdAogICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgY2FzZSBG
aWx0ZXJPcGVyYXRpb246OkJMVVI6Ci0gICAgICAgICAgICBlZmZlY3QgPSBjcmVhdGVCbHVyRWZm
ZWN0KGRvd25jYXN0PEJsdXJGaWx0ZXJPcGVyYXRpb24+KCpvcGVyYXRpb24pLCBjbGlwT3BlcmF0
aW9uKCkpOworICAgICAgICAgICAgZnVuY3Rpb24gPSBjcmVhdGVCbHVyRWZmZWN0KGRvd25jYXN0
PEJsdXJGaWx0ZXJPcGVyYXRpb24+KCpvcGVyYXRpb24pLCBjbGlwT3BlcmF0aW9uKCkpOwogICAg
ICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkJSSUdIVE5F
U1M6Ci0gICAgICAgICAgICBlZmZlY3QgPSBjcmVhdGVCcmlnaHRuZXNzRWZmZWN0KGRvd25jYXN0
PEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24+KCpvcGVyYXRpb24pKTsKKyAg
ICAgICAgICAgIGZ1bmN0aW9uID0gY3JlYXRlQnJpZ2h0bmVzc0VmZmVjdChkb3duY2FzdDxCYXNp
Y0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uPigqb3BlcmF0aW9uKSk7CiAgICAgICAg
ICAgICBicmVhazsKIAogICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6Q09OVFJBU1Q6Ci0g
ICAgICAgICAgICBlZmZlY3QgPSBjcmVhdGVDb250cmFzdEVmZmVjdChkb3duY2FzdDxCYXNpY0Nv
bXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uPigqb3BlcmF0aW9uKSk7CisgICAgICAgICAg
ICBmdW5jdGlvbiA9IGNyZWF0ZUNvbnRyYXN0RWZmZWN0KGRvd25jYXN0PEJhc2ljQ29tcG9uZW50
VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24+KCpvcGVyYXRpb24pKTsKICAgICAgICAgICAgIGJyZWFr
OwogCiAgICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpEUk9QX1NIQURPVzoKLSAgICAgICAg
ICAgIGVmZmVjdCA9IGNyZWF0ZURyb3BTaGFkb3dFZmZlY3QoZG93bmNhc3Q8RHJvcFNoYWRvd0Zp
bHRlck9wZXJhdGlvbj4oKm9wZXJhdGlvbikpOworICAgICAgICAgICAgZnVuY3Rpb24gPSBjcmVh
dGVEcm9wU2hhZG93RWZmZWN0KGRvd25jYXN0PERyb3BTaGFkb3dGaWx0ZXJPcGVyYXRpb24+KCpv
cGVyYXRpb24pKTsKICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIGNhc2UgRmlsdGVyT3Bl
cmF0aW9uOjpHUkFZU0NBTEU6Ci0gICAgICAgICAgICBlZmZlY3QgPSBjcmVhdGVHcmF5U2NhbGVF
ZmZlY3QoZG93bmNhc3Q8QmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbj4oKm9wZXJhdGlv
bikpOworICAgICAgICAgICAgZnVuY3Rpb24gPSBjcmVhdGVHcmF5U2NhbGVFZmZlY3QoZG93bmNh
c3Q8QmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbj4oKm9wZXJhdGlvbikpOwogICAgICAg
ICAgICAgYnJlYWs7CiAKICAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkhVRV9ST1RBVEU6
Ci0gICAgICAgICAgICBlZmZlY3QgPSBjcmVhdGVIdWVSb3RhdGVFZmZlY3QoZG93bmNhc3Q8QmFz
aWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbj4oKm9wZXJhdGlvbikpOworICAgICAgICAgICAg
ZnVuY3Rpb24gPSBjcmVhdGVIdWVSb3RhdGVFZmZlY3QoZG93bmNhc3Q8QmFzaWNDb2xvck1hdHJp
eEZpbHRlck9wZXJhdGlvbj4oKm9wZXJhdGlvbikpOwogICAgICAgICAgICAgYnJlYWs7CiAKICAg
ICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OklOVkVSVDoKLSAgICAgICAgICAgIGVmZmVjdCA9
IGNyZWF0ZUludmVydEVmZmVjdChkb3duY2FzdDxCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVy
T3BlcmF0aW9uPigqb3BlcmF0aW9uKSk7CisgICAgICAgICAgICBmdW5jdGlvbiA9IGNyZWF0ZUlu
dmVydEVmZmVjdChkb3duY2FzdDxCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9u
Pigqb3BlcmF0aW9uKSk7CiAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICBjYXNlIEZpbHRl
ck9wZXJhdGlvbjo6T1BBQ0lUWToKLSAgICAgICAgICAgIGVmZmVjdCA9IGNyZWF0ZU9wYWNpdHlF
ZmZlY3QoZG93bmNhc3Q8QmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlvbj4oKm9w
ZXJhdGlvbikpOworICAgICAgICAgICAgZnVuY3Rpb24gPSBjcmVhdGVPcGFjaXR5RWZmZWN0KGRv
d25jYXN0PEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24+KCpvcGVyYXRpb24p
KTsKICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpT
QVRVUkFURToKLSAgICAgICAgICAgIGVmZmVjdCA9IGNyZWF0ZVNhdHVyYXRlRWZmZWN0KGRvd25j
YXN0PEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24+KCpvcGVyYXRpb24pKTsKKyAgICAg
ICAgICAgIGZ1bmN0aW9uID0gY3JlYXRlU2F0dXJhdGVFZmZlY3QoZG93bmNhc3Q8QmFzaWNDb2xv
ck1hdHJpeEZpbHRlck9wZXJhdGlvbj4oKm9wZXJhdGlvbikpOwogICAgICAgICAgICAgYnJlYWs7
CiAKICAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OlNFUElBOgotICAgICAgICAgICAgZWZm
ZWN0ID0gY3JlYXRlU2VwaWFFZmZlY3QoZG93bmNhc3Q8QmFzaWNDb2xvck1hdHJpeEZpbHRlck9w
ZXJhdGlvbj4oKm9wZXJhdGlvbikpOworICAgICAgICAgICAgZnVuY3Rpb24gPSBjcmVhdGVTZXBp
YUVmZmVjdChkb3duY2FzdDxCYXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uPigqb3BlcmF0
aW9uKSk7CiAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlv
bjo6UkVGRVJFTkNFOgotICAgICAgICAgICAgZmlsdGVyID0gY3JlYXRlU1ZHRmlsdGVyKCp0aGlz
LCBkb3duY2FzdDxSZWZlcmVuY2VGaWx0ZXJPcGVyYXRpb24+KCpvcGVyYXRpb24pLCByZW5kZXJl
ciwgdGFyZ2V0Qm91bmRpbmdCb3gpOworICAgICAgICAgICAgZnVuY3Rpb24gPSBjcmVhdGVSZWZl
cmVuY2VGaWx0ZXIoKnRoaXMsIGRvd25jYXN0PFJlZmVyZW5jZUZpbHRlck9wZXJhdGlvbj4oKm9w
ZXJhdGlvbiksIHJlbmRlcmVyLCB0YXJnZXRCb3VuZGluZ0JveCk7CiAgICAgICAgICAgICBicmVh
azsKIAogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIAot
ICAgICAgICBpZiAoIWZpbHRlciAmJiAhZWZmZWN0KQorICAgICAgICBpZiAoIWZ1bmN0aW9uKQog
ICAgICAgICAgICAgY29udGludWU7CiAKICAgICAgICAgaWYgKG1fZnVuY3Rpb25zLmlzRW1wdHko
KSkKICAgICAgICAgICAgIG1fZnVuY3Rpb25zLmFwcGVuZChTb3VyY2VHcmFwaGljOjpjcmVhdGUo
KSk7CiAKLSAgICAgICAgaWYgKGZpbHRlcikKLSAgICAgICAgICAgIG1fZnVuY3Rpb25zLmFwcGVu
ZChmaWx0ZXIucmVsZWFzZU5vbk51bGwoKSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIG1f
ZnVuY3Rpb25zLmFwcGVuZChlZmZlY3QucmVsZWFzZU5vbk51bGwoKSk7CisgICAgICAgIG1fZnVu
Y3Rpb25zLmFwcGVuZChmdW5jdGlvbi5yZWxlYXNlTm9uTnVsbCgpKTsKICAgICB9CiAKICAgICAv
LyBJZiB3ZSBkaWRuJ3QgbWFrZSBhbnkgZWZmZWN0cywgdGVsbCBvdXIgY2FsbGVyIHdlIGFyZSBu
b3QgdmFsaWQuCkBAIC0zNzEsMTcgKzM5OCwzMCBAQCB2b2lkIENTU0ZpbHRlcjo6c2V0RmlsdGVy
UmVnaW9uKGNvbnN0IEZsb2F0UmVjdCYgZmlsdGVyUmVnaW9uKQogICAgIGNsYW1wRmlsdGVyUmVn
aW9uSWZOZWVkZWQoKTsKIH0KIAotSW50T3V0c2V0cyBDU1NGaWx0ZXI6Om91dHNldHMoKSBjb25z
dAorSW50T3V0c2V0cyBDU1NGaWx0ZXI6OmNhbGN1bGF0ZU91dHNldHMoUmVuZGVyRWxlbWVudCYg
cmVuZGVyZXIsIGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmIG9wZXJhdGlvbnMsIGNvbnN0IEZsb2F0
UmVjdCYgdGFyZ2V0Qm91bmRpbmdCb3gpCiB7Ci0gICAgaWYgKCFtX2hhc0ZpbHRlclRoYXRNb3Zl
c1BpeGVscykKLSAgICAgICAgcmV0dXJuIHsgfTsKKyAgICBJbnRPdXRzZXRzIG91dHNldHM7CisK
KyAgICBmb3IgKGF1dG8mIG9wZXJhdGlvbiA6IG9wZXJhdGlvbnMub3BlcmF0aW9ucygpKSB7Cisg
ICAgICAgIHN3aXRjaCAob3BlcmF0aW9uLT50eXBlKCkpIHsKKyAgICAgICAgY2FzZSBGaWx0ZXJP
cGVyYXRpb246OkJMVVI6CisgICAgICAgICAgICBvdXRzZXRzICs9IGNhbGN1bGF0ZUJsdXJFZmZl
Y3RPdXRzZXRzKGRvd25jYXN0PEJsdXJGaWx0ZXJPcGVyYXRpb24+KCpvcGVyYXRpb24pKTsKKyAg
ICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpEUk9QX1NI
QURPVzoKKyAgICAgICAgICAgIG91dHNldHMgKz0gY2FsY3VsYXRlRHJvcFNoYWRvd0VmZmVjdE91
dHNldHMoZG93bmNhc3Q8RHJvcFNoYWRvd0ZpbHRlck9wZXJhdGlvbj4oKm9wZXJhdGlvbikpOwor
ICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OlJFRkVS
RU5DRToKKyAgICAgICAgICAgIG91dHNldHMgKz0gY2FsY3VsYXRlUmVmZXJlbmNlRmlsdGVyT3V0
c2V0cyhkb3duY2FzdDxSZWZlcmVuY2VGaWx0ZXJPcGVyYXRpb24+KCpvcGVyYXRpb24pLCByZW5k
ZXJlciwgdGFyZ2V0Qm91bmRpbmdCb3gpOworICAgICAgICAgICAgYnJlYWs7CiAKLSAgICBpZiAo
IW1fb3V0c2V0cy5pc1plcm8oKSkKLSAgICAgICAgcmV0dXJuIG1fb3V0c2V0czsKKyAgICAgICAg
ZGVmYXVsdDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQogCi0gICAgZm9y
IChhdXRvJiBmdW5jdGlvbiA6IG1fZnVuY3Rpb25zKQotICAgICAgICBtX291dHNldHMgKz0gZnVu
Y3Rpb24tPm91dHNldHMoKnRoaXMpOwotICAgIHJldHVybiBtX291dHNldHM7CisgICAgcmV0dXJu
IG91dHNldHM7CiB9CiAKIFRleHRTdHJlYW0mIENTU0ZpbHRlcjo6ZXh0ZXJuYWxSZXByZXNlbnRh
dGlvbihUZXh0U3RyZWFtJiB0cywgRmlsdGVyUmVwcmVzZW50YXRpb24gcmVwcmVzZW50YXRpb24p
IGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvQ1NTRmlsdGVyLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvQ1NTRmlsdGVyLmgKaW5kZXggNGRiYWM1M2FkMDA4
NTg4ZDM1NWMyMzkwMDYwNGFjMGVjZjhhNjVlYS4uMjljMWQxY2QzNjFjOWQyNWJhY2MxNzA0ZGI0
ZTQ4OTQ1NDE3MmNkYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0NTU0Zp
bHRlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9DU1NGaWx0ZXIuaApAQCAtNDks
MTAgKzQ5LDEwIEBAIHB1YmxpYzoKIAogICAgIEZpbHRlckVmZmVjdFZlY3RvciBlZmZlY3RzT2ZU
eXBlKEZpbHRlckZ1bmN0aW9uOjpUeXBlKSBjb25zdCBmaW5hbDsKIAotICAgIEludE91dHNldHMg
b3V0c2V0cygpIGNvbnN0IGZpbmFsOwotCiAgICAgUmVmUHRyPEZpbHRlckltYWdlPiBhcHBseShG
aWx0ZXJJbWFnZSogc291cmNlSW1hZ2UsIEZpbHRlclJlc3VsdHMmKSBmaW5hbDsKIAorICAgIHN0
YXRpYyBJbnRPdXRzZXRzIGNhbGN1bGF0ZU91dHNldHMoUmVuZGVyRWxlbWVudCYsIGNvbnN0IEZp
bHRlck9wZXJhdGlvbnMmLCBjb25zdCBGbG9hdFJlY3QmIHRhcmdldEJvdW5kaW5nQm94KTsKKwog
cHJpdmF0ZToKICAgICBDU1NGaWx0ZXIoUmVuZGVyaW5nTW9kZSwgY29uc3QgRmxvYXRTaXplJiBm
aWx0ZXJTY2FsZSwgQ2xpcE9wZXJhdGlvbiwgYm9vbCBoYXNGaWx0ZXJUaGF0TW92ZXNQaXhlbHMs
IGJvb2wgaGFzRmlsdGVyVGhhdFNob3VsZEJlUmVzdHJpY3RlZEJ5U2VjdXJpdHlPcmlnaW4pOwog
ICAgIENTU0ZpbHRlcihWZWN0b3I8UmVmPEZpbHRlckZ1bmN0aW9uPj4mJik7CkBAIC02Nyw4ICs2
Nyw2IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX2hhc0ZpbHRlclRoYXRTaG91bGRCZVJlc3RyaWN0
ZWRCeVNlY3VyaXR5T3JpZ2luIHsgZmFsc2UgfTsKIAogICAgIFZlY3RvcjxSZWY8RmlsdGVyRnVu
Y3Rpb24+PiBtX2Z1bmN0aW9uczsKLQotICAgIG11dGFibGUgSW50T3V0c2V0cyBtX291dHNldHM7
CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckxheWVyLmNwcAppbmRleCBiYjFlNmE0OTExY2YzNDhhNTc5ZDJkNGJlMGVhYWM4MTNkNDc5
YjNkLi41MDM2YTJkM2NiOWUxZWVmZmU2YTE4MmM5MWMyMTMzNWQwZTE1ZjRjIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAKQEAgLTMyOTMsNyArMzI5Myw3IEBAIFJl
bmRlckxheWVyRmlsdGVycyogUmVuZGVyTGF5ZXI6OmZpbHRlcnNGb3JQYWludGluZyhHcmFwaGlj
c0NvbnRleHQmIGNvbnRleHQsIE9wCiAgICAgaWYgKCFwYWludHNXaXRoRmlsdGVycygpKQogICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIGlmIChtX2ZpbHRlcnMgJiYgbV9maWx0ZXJzLT5m
aWx0ZXIoKSkKKyAgICBpZiAobV9maWx0ZXJzKQogICAgICAgICByZXR1cm4gbV9maWx0ZXJzLmdl
dCgpOwogCiAgICAgcmV0dXJuIG51bGxwdHI7CkBAIC01Njk4LDcgKzU2OTgsNyBAQCB2b2lkIFJl
bmRlckxheWVyOjp1cGRhdGVGaWx0ZXJQYWludGluZ1N0cmF0ZWd5KCkKICAgICAgICAgLy8gRG9u
J3QgZGVsZXRlIHRoZSB3aG9sZSBmaWx0ZXIgaW5mbyBoZXJlLCBiZWNhdXNlIHdlIG1pZ2h0IHVz
ZSBpdAogICAgICAgICAvLyBmb3IgbG9hZGluZyBTVkcgcmVmZXJlbmNlIGZpbHRlciBmaWxlcy4K
ICAgICAgICAgaWYgKG1fZmlsdGVycykKLSAgICAgICAgICAgIG1fZmlsdGVycy0+c2V0RmlsdGVy
KG51bGxwdHIpOworICAgICAgICAgICAgbV9maWx0ZXJzLT5jbGVhckZpbHRlcigpOwogCiAgICAg
ICAgIC8vIEVhcmx5LXJldHVybiBvbmx5IGlmIHdlICpkb24ndCogaGF2ZSByZWZlcmVuY2UgZmls
dGVycy4KICAgICAgICAgLy8gRm9yIHJlZmVyZW5jZSBmaWx0ZXJzLCB3ZSBzdGlsbCB3YW50IHRo
ZSBGaWx0ZXJFZmZlY3QgZ3JhcGggYnVpbHQKQEAgLTU3MDgsMTMgKzU3MDgsMTQgQEAgdm9pZCBS
ZW5kZXJMYXllcjo6dXBkYXRlRmlsdGVyUGFpbnRpbmdTdHJhdGVneSgpCiAgICAgfQogICAgIAog
ICAgIGVuc3VyZUxheWVyRmlsdGVycygpOwotICAgIG1fZmlsdGVycy0+YnVpbGRGaWx0ZXIocmVu
ZGVyZXIoKSwgcGFnZSgpLmRldmljZVNjYWxlRmFjdG9yKCksIHJlbmRlcmVyKCkucGFnZSgpLmFj
Y2VsZXJhdGVkRmlsdGVyc0VuYWJsZWQoKSA/IFJlbmRlcmluZ01vZGU6OkFjY2VsZXJhdGVkIDog
UmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCk7CisgICAgbV9maWx0ZXJzLT5zZXRSZW5kZXJp
bmdNb2RlKHJlbmRlcmVyKCkucGFnZSgpLmFjY2VsZXJhdGVkRmlsdGVyc0VuYWJsZWQoKSA/IFJl
bmRlcmluZ01vZGU6OkFjY2VsZXJhdGVkIDogUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCk7
CisgICAgbV9maWx0ZXJzLT5zZXRGaWx0ZXJTY2FsZSh7IHBhZ2UoKS5kZXZpY2VTY2FsZUZhY3Rv
cigpLCBwYWdlKCkuZGV2aWNlU2NhbGVGYWN0b3IoKSB9KTsKIH0KIAogSW50T3V0c2V0cyBSZW5k
ZXJMYXllcjo6ZmlsdGVyT3V0c2V0cygpIGNvbnN0CiB7CiAgICAgaWYgKG1fZmlsdGVycykKLSAg
ICAgICAgcmV0dXJuIG1fZmlsdGVycy0+ZmlsdGVyKCkgPyBtX2ZpbHRlcnMtPmZpbHRlcigpLT5v
dXRzZXRzKCkgOiBJbnRPdXRzZXRzKCk7CisgICAgICAgIHJldHVybiBtX2ZpbHRlcnMtPm91dHNl
dHMocmVuZGVyZXIoKSwgbG9jYWxCb3VuZGluZ0JveCgpKTsKICAgICByZXR1cm4gcmVuZGVyZXIo
KS5zdHlsZSgpLmZpbHRlck91dHNldHMoKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckxheWVyRmlsdGVycy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyTGF5ZXJGaWx0ZXJzLmNwcAppbmRleCAwZTgxZWJkMmIyNjFjYTAyNzM2YjQy
MmQ3Y2NkZWY4Y2RkZmQ3NGUzLi4zNGY5YzNhYzA3MmZiZGM1NmIyZTA5YzQ1ZDg3ODU4MjNhNDNl
NTc2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJGaWx0
ZXJzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJGaWx0ZXJz
LmNwcApAQCAtNTAsMTEgKzUwLDYgQEAgUmVuZGVyTGF5ZXJGaWx0ZXJzOjp+UmVuZGVyTGF5ZXJG
aWx0ZXJzKCkKICAgICByZW1vdmVSZWZlcmVuY2VGaWx0ZXJDbGllbnRzKCk7CiB9CiAKLXZvaWQg
UmVuZGVyTGF5ZXJGaWx0ZXJzOjpzZXRGaWx0ZXIoUmVmUHRyPENTU0ZpbHRlcj4mJiBmaWx0ZXIp
Ci17Ci0gICAgbV9maWx0ZXIgPSBXVEZNb3ZlKGZpbHRlcik7Ci19Ci0KIGJvb2wgUmVuZGVyTGF5
ZXJGaWx0ZXJzOjpoYXNGaWx0ZXJUaGF0TW92ZXNQaXhlbHMoKSBjb25zdAogewogICAgIHJldHVy
biBtX2ZpbHRlciAmJiBtX2ZpbHRlci0+aGFzRmlsdGVyVGhhdE1vdmVzUGl4ZWxzKCk7CkBAIC0x
MTYsMTIgKzExMSwxOCBAQCB2b2lkIFJlbmRlckxheWVyRmlsdGVyczo6cmVtb3ZlUmVmZXJlbmNl
RmlsdGVyQ2xpZW50cygpCiAgICAgbV9pbnRlcm5hbFNWR1JlZmVyZW5jZXMuY2xlYXIoKTsKIH0K
IAotdm9pZCBSZW5kZXJMYXllckZpbHRlcnM6OmJ1aWxkRmlsdGVyKFJlbmRlckVsZW1lbnQmIHJl
bmRlcmVyLCBmbG9hdCBzY2FsZUZhY3RvciwgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlKQor
SW50T3V0c2V0cyBSZW5kZXJMYXllckZpbHRlcnM6Om91dHNldHMoUmVuZGVyRWxlbWVudCYgcmVu
ZGVyZXIsIGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0Qm91bmRpbmdCb3gpIGNvbnN0CiB7Ci0gICAg
Ly8gSWYgdGhlIGZpbHRlciBmYWlscyB0byBidWlsZCwgcmVtb3ZlIGl0IGZyb20gdGhlIGxheWVy
LiBJdCB3aWxsIHN0aWxsIGF0dGVtcHQgdG8KLSAgICAvLyBnbyB0aHJvdWdoIHJlZ3VsYXIgcHJv
Y2Vzc2luZyAoZS5nLiBjb21wb3NpdGluZyksIGJ1dCBuZXZlciBhcHBseSBhbnl0aGluZy4KLSAg
ICAvLyBGSVhNRTogVGhpcyByZWJ1aWxkcyB0aGUgZW50aXJlIGVmZmVjdHMgY2hhaW4gZXZlbiBp
ZiB0aGUgZmlsdGVyIHN0eWxlIGRpZG4ndCBjaGFuZ2UuCi0gICAgbV9maWx0ZXIgPSBDU1NGaWx0
ZXI6OmNyZWF0ZShyZW5kZXJlciwgcmVuZGVyZXIuc3R5bGUoKS5maWx0ZXIoKSwgcmVuZGVyaW5n
TW9kZSwgRmxvYXRTaXplIHsgc2NhbGVGYWN0b3IsIHNjYWxlRmFjdG9yIH0sIEZpbHRlcjo6Q2xp
cE9wZXJhdGlvbjo6VW5pdGUsIG1fdGFyZ2V0Qm91bmRpbmdCb3gpOworICAgIGNvbnN0IGF1dG8m
IG9wZXJhdGlvbnMgPSByZW5kZXJlci5zdHlsZSgpLmZpbHRlcigpOworICAgIAorICAgIGlmICgh
b3BlcmF0aW9ucy5oYXNGaWx0ZXJUaGF0TW92ZXNQaXhlbHMoKSkKKyAgICAgICAgcmV0dXJuIHsg
fTsKKworICAgIGlmICghbV9vdXRzZXRzLmlzWmVybygpKQorICAgICAgICByZXR1cm4gbV9vdXRz
ZXRzOworCisgICAgbV9vdXRzZXRzID0gQ1NTRmlsdGVyOjpjYWxjdWxhdGVPdXRzZXRzKHJlbmRl
cmVyLCBvcGVyYXRpb25zLCB0YXJnZXRCb3VuZGluZ0JveCk7CisgICAgcmV0dXJuIG1fb3V0c2V0
czsKIH0KIAogR3JhcGhpY3NDb250ZXh0KiBSZW5kZXJMYXllckZpbHRlcnM6OmlucHV0Q29udGV4
dCgpCkBAIC0xNDAsMTggKzE0MSwxNSBAQCB2b2lkIFJlbmRlckxheWVyRmlsdGVyczo6YWxsb2Nh
dGVCYWNraW5nU3RvcmVJZk5lZWRlZChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpCiAKIEdyYXBo
aWNzQ29udGV4dCogUmVuZGVyTGF5ZXJGaWx0ZXJzOjpiZWdpbkZpbHRlckVmZmVjdChSZW5kZXJF
bGVtZW50JiByZW5kZXJlciwgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBMYXlvdXRS
ZWN0JiBmaWx0ZXJCb3hSZWN0LCBjb25zdCBMYXlvdXRSZWN0JiBkaXJ0eVJlY3QsIGNvbnN0IExh
eW91dFJlY3QmIGxheWVyUmVwYWludFJlY3QpCiB7Ci0gICAgaWYgKCFtX2ZpbHRlcikKLSAgICAg
ICAgcmV0dXJuIG51bGxwdHI7Ci0KICAgICAvLyBDYWxjdWxhdGUgdGFyZ2V0Qm91bmRpbmdCb3gg
c2luY2UgaXQgd2lsbCBiZSB1c2VkIGlmIHRoZSBmaWx0ZXIgaXMgY3JlYXRlZC4KICAgICBhdXRv
IHRhcmdldEJvdW5kaW5nQm94ID0gaW50ZXJzZWN0aW9uKGZpbHRlckJveFJlY3QsIGRpcnR5UmVj
dCk7CiAgICAgaWYgKHRhcmdldEJvdW5kaW5nQm94LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJu
IG51bGxwdHI7CiAKLSAgICBpZiAobV90YXJnZXRCb3VuZGluZ0JveCAhPSB0YXJnZXRCb3VuZGlu
Z0JveCkgeworICAgIGlmICghbV9maWx0ZXIgfHwgbV90YXJnZXRCb3VuZGluZ0JveCAhPSB0YXJn
ZXRCb3VuZGluZ0JveCkgewogICAgICAgICBtX3RhcmdldEJvdW5kaW5nQm94ID0gdGFyZ2V0Qm91
bmRpbmdCb3g7CiAgICAgICAgIC8vIEZJWE1FOiBUaGlzIHJlYnVpbGRzIHRoZSBlbnRpcmUgZWZm
ZWN0cyBjaGFpbiBldmVuIGlmIHRoZSBmaWx0ZXIgc3R5bGUgZGlkbid0IGNoYW5nZS4KLSAgICAg
ICAgbV9maWx0ZXIgPSBDU1NGaWx0ZXI6OmNyZWF0ZShyZW5kZXJlciwgcmVuZGVyZXIuc3R5bGUo
KS5maWx0ZXIoKSwgbV9maWx0ZXItPnJlbmRlcmluZ01vZGUoKSwgbV9maWx0ZXItPmZpbHRlclNj
YWxlKCksIEZpbHRlcjo6Q2xpcE9wZXJhdGlvbjo6VW5pdGUsIG1fdGFyZ2V0Qm91bmRpbmdCb3gp
OworICAgICAgICBtX2ZpbHRlciA9IENTU0ZpbHRlcjo6Y3JlYXRlKHJlbmRlcmVyLCByZW5kZXJl
ci5zdHlsZSgpLmZpbHRlcigpLCBtX3JlbmRlcmluZ01vZGUsIG1fZmlsdGVyU2NhbGUsIEZpbHRl
cjo6Q2xpcE9wZXJhdGlvbjo6VW5pdGUsIG1fdGFyZ2V0Qm91bmRpbmdCb3gpOwogICAgIH0KIAog
ICAgIGlmICghbV9maWx0ZXIpCkBAIC0xNjIsNyArMTYwLDcgQEAgR3JhcGhpY3NDb250ZXh0KiBS
ZW5kZXJMYXllckZpbHRlcnM6OmJlZ2luRmlsdGVyRWZmZWN0KFJlbmRlckVsZW1lbnQmIHJlbmRl
cmVyLAogICAgIC8vIEZvciBDU1NGaWx0ZXIsIGZpbHRlclJlZ2lvbiA9IHRhcmdldEJvdW5kaW5n
Qm94ICsgZmlsdGVyLT5vdXRzZXRzKCkKICAgICBhdXRvIGZpbHRlclJlZ2lvbiA9IHRhcmdldEJv
dW5kaW5nQm94OwogICAgIGlmIChmaWx0ZXIuaGFzRmlsdGVyVGhhdE1vdmVzUGl4ZWxzKCkpCi0g
ICAgICAgIGZpbHRlclJlZ2lvbi5leHBhbmQodG9MYXlvdXRCb3hFeHRlbnQoZmlsdGVyLm91dHNl
dHMoKSkpOworICAgICAgICBmaWx0ZXJSZWdpb24uZXhwYW5kKHRvTGF5b3V0Qm94RXh0ZW50KG91
dHNldHMocmVuZGVyZXIsIG1fdGFyZ2V0Qm91bmRpbmdCb3gpKSk7CiAKICAgICBpZiAoZmlsdGVy
UmVnaW9uLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJGaWx0ZXJzLmggYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJGaWx0ZXJzLmgKaW5kZXggMDUxM2M4ODViNDBiNzVl
MDEzMmYzZWFkZmVmNjBjNzg2Nzg5YjlkOC4uNGJhMzc4NWY1MWY3YzU2NmFjYjQyMDNkZDA5YjI5
MTFlYWY4YzY0ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxh
eWVyRmlsdGVycy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckZp
bHRlcnMuaApAQCAtNTAsNyArNTAsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBleHBhbmREaXJ0eVNv
dXJjZVJlY3QoY29uc3QgTGF5b3V0UmVjdCYgcmVjdCkgeyBtX2RpcnR5U291cmNlUmVjdC51bml0
ZShyZWN0KTsgfQogCiAgICAgQ1NTRmlsdGVyKiBmaWx0ZXIoKSBjb25zdCB7IHJldHVybiBtX2Zp
bHRlci5nZXQoKTsgfQotICAgIHZvaWQgc2V0RmlsdGVyKFJlZlB0cjxDU1NGaWx0ZXI+JiYpOwor
ICAgIHZvaWQgY2xlYXJGaWx0ZXIoKSB7IG1fZmlsdGVyID0gbnVsbHB0cjsgfQogICAgIAogICAg
IGJvb2wgaGFzRmlsdGVyVGhhdE1vdmVzUGl4ZWxzKCkgY29uc3Q7CiAgICAgYm9vbCBoYXNGaWx0
ZXJUaGF0U2hvdWxkQmVSZXN0cmljdGVkQnlTZWN1cml0eU9yaWdpbigpIGNvbnN0OwpAQCAtNTgs
NyArNTgsMTAgQEAgcHVibGljOgogICAgIHZvaWQgdXBkYXRlUmVmZXJlbmNlRmlsdGVyQ2xpZW50
cyhjb25zdCBGaWx0ZXJPcGVyYXRpb25zJik7CiAgICAgdm9pZCByZW1vdmVSZWZlcmVuY2VGaWx0
ZXJDbGllbnRzKCk7CiAKLSAgICB2b2lkIGJ1aWxkRmlsdGVyKFJlbmRlckVsZW1lbnQmLCBmbG9h
dCBzY2FsZUZhY3RvciwgUmVuZGVyaW5nTW9kZSk7CisgICAgdm9pZCBzZXRSZW5kZXJpbmdNb2Rl
KFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSkgeyBtX3JlbmRlcmluZ01vZGUgPSByZW5kZXJp
bmdNb2RlOyB9CisgICAgdm9pZCBzZXRGaWx0ZXJTY2FsZShjb25zdCBGbG9hdFNpemUmIGZpbHRl
clNjYWxlKSB7IG1fZmlsdGVyU2NhbGUgPSBmaWx0ZXJTY2FsZTsgfQorCisgICAgSW50T3V0c2V0
cyBvdXRzZXRzKFJlbmRlckVsZW1lbnQmLCBjb25zdCBGbG9hdFJlY3QmIHRhcmdldEJvdW5kaW5n
Qm94KSBjb25zdDsKIAogICAgIC8vIFBlciByZW5kZXIKICAgICBMYXlvdXRSZWN0IHJlcGFpbnRS
ZWN0KCkgY29uc3QgeyByZXR1cm4gbV9yZXBhaW50UmVjdDsgfQpAQCAtNzMsNiArNzYsOSBAQCBw
cml2YXRlOgogICAgIHZvaWQgYWxsb2NhdGVCYWNraW5nU3RvcmVJZk5lZWRlZChHcmFwaGljc0Nv
bnRleHQmKTsKIAogICAgIFJlbmRlckxheWVyJiBtX2xheWVyOworICAgIFJlbmRlcmluZ01vZGUg
bV9yZW5kZXJpbmdNb2RlIHsgUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCB9OworICAgIEZs
b2F0U2l6ZSBtX2ZpbHRlclNjYWxlIHsgMSwgMSB9OworICAgIG11dGFibGUgSW50T3V0c2V0cyBt
X291dHNldHM7CiAKICAgICBWZWN0b3I8UmVmUHRyPEVsZW1lbnQ+PiBtX2ludGVybmFsU1ZHUmVm
ZXJlbmNlczsKICAgICBWZWN0b3I8Q2FjaGVkUmVzb3VyY2VIYW5kbGU8Q2FjaGVkU1ZHRG9jdW1l
bnQ+PiBtX2V4dGVybmFsU1ZHUmVmZXJlbmNlczsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuY3BwIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5jcHAKaW5kZXggNTVkNWVk
NTdlM2VkNGQ5NzM5OGRkODIyNzMxM2VkMGQzNDUwMzI5Mi4uOGQ1ZGJkOTNkYjkwMDJiOTdhYjM5
ZDBmNThjODFhOWI3MDA2Y2RkMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5jcHAKQEAgLTEyOSw3ICsxMjksNyBA
QCBib29sIFJlbmRlclNWR1Jlc291cmNlRmlsdGVyOjphcHBseVJlc291cmNlKFJlbmRlckVsZW1l
bnQmIHJlbmRlcmVyLCBjb25zdCBSZW5kZQogICAgIGF1dG8gcmVuZGVyaW5nTW9kZSA9IHJlbmRl
cmVyLnBhZ2UoKS5hY2NlbGVyYXRlZEZpbHRlcnNFbmFibGVkKCkgPyBSZW5kZXJpbmdNb2RlOjpB
Y2NlbGVyYXRlZCA6IFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQ7CiAKICAgICAvLyBDcmVh
dGUgdGhlIFNWR0ZpbHRlciBvYmplY3QuCi0gICAgZmlsdGVyRGF0YS0+YnVpbGRlciA9IG1ha2VV
bmlxdWU8U1ZHRmlsdGVyQnVpbGRlcj4oKTsKKyAgICBmaWx0ZXJEYXRhLT5idWlsZGVyID0gbWFr
ZVVuaXF1ZTxTVkdGaWx0ZXJCdWlsZGVyPih0YXJnZXRCb3VuZGluZ0JveCwgZmlsdGVyRWxlbWVu
dCgpLnByaW1pdGl2ZVVuaXRzKCkpOwogICAgIGZpbHRlckRhdGEtPmZpbHRlciA9IFNWR0ZpbHRl
cjo6Y3JlYXRlKGZpbHRlckVsZW1lbnQoKSwgKmZpbHRlckRhdGEtPmJ1aWxkZXIsIHJlbmRlcmlu
Z01vZGUsIGZpbHRlclNjYWxlLCBGaWx0ZXI6OkNsaXBPcGVyYXRpb246OkludGVyc2VjdCwgZmls
dGVyRGF0YS0+Ym91bmRhcmllcywgdGFyZ2V0Qm91bmRpbmdCb3gpOwogICAgIGlmICghZmlsdGVy
RGF0YS0+ZmlsdGVyKSB7CiAgICAgICAgIG1fcmVuZGVyZXJGaWx0ZXJEYXRhTWFwLnJlbW92ZSgm
cmVuZGVyZXIpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdS
ZW5kZXJUcmVlQXNUZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVu
ZGVyVHJlZUFzVGV4dC5jcHAKaW5kZXggZjE1ZTYzNzE2MDRiOGE5NWY3YWJlYTcyNmY0MDdjOWZm
OTRmZjlkZS4uZThhZGVkYmQ1NzIwZmM5YTcxN2Q0ZmY4MzlkN2U5MWU0ZWIyYzM4YiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJUcmVlQXNUZXh0LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlclRyZWVBc1RleHQu
Y3BwCkBAIC00NzcsNyArNDc3LDcgQEAgdm9pZCB3cml0ZVNWR1Jlc291cmNlQ29udGFpbmVyKFRl
eHRTdHJlYW0mIHRzLCBjb25zdCBSZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lciYKICAgICAgICAg
Ly8gQ3JlYXRpbmcgYSBwbGFjZWhvbGRlciBmaWx0ZXIgd2hpY2ggaXMgcGFzc2VkIHRvIHRoZSBi
dWlsZGVyLgogICAgICAgICBGbG9hdFJlY3QgZHVtbXlSZWN0OwogICAgICAgICBGbG9hdFNpemUg
ZHVtbXlTY2FsZSgxLCAxKTsKLSAgICAgICAgU1ZHRmlsdGVyQnVpbGRlciBidWlsZGVyOworICAg
ICAgICBTVkdGaWx0ZXJCdWlsZGVyIGJ1aWxkZXIoZHVtbXlSZWN0KTsKICAgICAgICAgYXV0byBk
dW1teUZpbHRlciA9IFNWR0ZpbHRlcjo6Y3JlYXRlKGZpbHRlci5maWx0ZXJFbGVtZW50KCksIGJ1
aWxkZXIsIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQsIGR1bW15U2NhbGUsIEZpbHRlcjo6
Q2xpcE9wZXJhdGlvbjo6SW50ZXJzZWN0LCBkdW1teVJlY3QsIGR1bW15UmVjdCk7CiAgICAgICAg
IGlmIChkdW1teUZpbHRlcikgewogICAgICAgICAgICAgVGV4dFN0cmVhbTo6SW5kZW50U2NvcGUg
aW5kZW50U2NvcGUodHMpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRHJv
cFNoYWRvd0VsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRHJvcFNoYWRvd0Vs
ZW1lbnQuY3BwCmluZGV4IGUxYWNkZjA5ZjM5MmUyYmNhMTdiMWE0NGU2NzJhNzc5ODIwNGFiYmYu
LjZhODRkNmNiNTU5ZGEzYmU3YjEyMzIyYWZiMDQ1ZDBmYTFkZGViNGQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdGRURyb3BTaGFkb3dFbGVtZW50LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHRkVEcm9wU2hhZG93RWxlbWVudC5jcHAKQEAgLTk2LDYgKzk2LDEzIEBA
IHZvaWQgU1ZHRkVEcm9wU2hhZG93RWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBR
dWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKICAgICBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0
dHJpYnV0ZXM6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoYXR0ck5hbWUpOwogfQogCitJbnRPdXRzZXRz
IFNWR0ZFRHJvcFNoYWRvd0VsZW1lbnQ6Om91dHNldHMoY29uc3QgRmxvYXRSZWN0JiB0YXJnZXRC
b3VuZGluZ0JveCwgU1ZHVW5pdFR5cGVzOjpTVkdVbml0VHlwZSBwcmltaXRpdmVVbml0cykgY29u
c3QKK3sKKyAgICBhdXRvIG9mZnNldCA9IFNWR0ZpbHRlcjo6Y2FsY3VsYXRlUmVzb2x2ZWRTaXpl
KHsgZHgoKSwgZHkoKSB9LCB0YXJnZXRCb3VuZGluZ0JveCwgcHJpbWl0aXZlVW5pdHMpOworICAg
IGF1dG8gc3RkRGV2aWF0aW9uID0gU1ZHRmlsdGVyOjpjYWxjdWxhdGVSZXNvbHZlZFNpemUoeyBz
dGREZXZpYXRpb25YKCksIHN0ZERldmlhdGlvblkoKSB9LCB0YXJnZXRCb3VuZGluZ0JveCwgcHJp
bWl0aXZlVW5pdHMpOworICAgIHJldHVybiBGRURyb3BTaGFkb3c6OmNhbGN1bGF0ZU91dHNldHMo
b2Zmc2V0LCBzdGREZXZpYXRpb24pOworfQorCiBSZWZQdHI8RmlsdGVyRWZmZWN0PiBTVkdGRURy
b3BTaGFkb3dFbGVtZW50OjpmaWx0ZXJFZmZlY3QoY29uc3QgU1ZHRmlsdGVyQnVpbGRlciYsIGNv
bnN0IEZpbHRlckVmZmVjdFZlY3RvciYpIGNvbnN0CiB7CiAgICAgUmVuZGVyT2JqZWN0KiByZW5k
ZXJlciA9IHRoaXMtPnJlbmRlcmVyKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHRkVEcm9wU2hhZG93RWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRHJvcFNo
YWRvd0VsZW1lbnQuaAppbmRleCA0OWJlZjBhM2U0YzcyZmE5ZTJmMzNhNzZhOTU5ZmRlZjRmMzYy
MWM4Li41YTFlNzZkYjkyZGQwMWRlMzZlZDIwMzUwZWI0NzllNWIyODcwZWRkIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVEcm9wU2hhZG93RWxlbWVudC5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdGRURyb3BTaGFkb3dFbGVtZW50LmgKQEAgLTU0LDYgKzU0LDcgQEAg
cHJpdmF0ZToKICAgICB2b2lkIHN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFt
ZSYpIG92ZXJyaWRlOwogCiAgICAgVmVjdG9yPEF0b21TdHJpbmc+IGZpbHRlckVmZmVjdElucHV0
c05hbWVzKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4geyBpbjEoKSB9OyB9CisgICAgSW50T3V0
c2V0cyBvdXRzZXRzKGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0Qm91bmRpbmdCb3gsIFNWR1VuaXRU
eXBlczo6U1ZHVW5pdFR5cGUgcHJpbWl0aXZlVW5pdHMpIGNvbnN0IG92ZXJyaWRlOwogICAgIFJl
ZlB0cjxGaWx0ZXJFZmZlY3Q+IGZpbHRlckVmZmVjdChjb25zdCBTVkdGaWx0ZXJCdWlsZGVyJiwg
Y29uc3QgRmlsdGVyRWZmZWN0VmVjdG9yJikgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICBQcm9wZXJ0
eVJlZ2lzdHJ5IG1fcHJvcGVydHlSZWdpc3RyeSB7ICp0aGlzIH07CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHRkVHYXVzc2lhbkJsdXJFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQuY3BwCmluZGV4IDA3M2JkNzI0YmI5ZTM1
ZjBiODBkNjJkZjljMDI5NTUzMmU5NjlkMjcuLmNiYmExOWIwNzA3N2JjNjgwOGVmZDA1MGYzYjA2
ZTM0Y2E0MjhmNGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUdhdXNzaWFu
Qmx1ckVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUdhdXNzaWFuQmx1
ckVsZW1lbnQuY3BwCkBAIC05NCw2ICs5NCwxMiBAQCB2b2lkIFNWR0ZFR2F1c3NpYW5CbHVyRWxl
bWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZQog
ICAgIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6c3ZnQXR0cmlidXRlQ2hh
bmdlZChhdHRyTmFtZSk7CiB9CiAKK0ludE91dHNldHMgU1ZHRkVHYXVzc2lhbkJsdXJFbGVtZW50
OjpvdXRzZXRzKGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0Qm91bmRpbmdCb3gsIFNWR1VuaXRUeXBl
czo6U1ZHVW5pdFR5cGUgcHJpbWl0aXZlVW5pdHMpIGNvbnN0Cit7CisgICAgYXV0byBzdGREZXZp
YXRpb24gPSBTVkdGaWx0ZXI6OmNhbGN1bGF0ZVJlc29sdmVkU2l6ZSh7IHN0ZERldmlhdGlvblgo
KSwgc3RkRGV2aWF0aW9uWSgpIH0sIHRhcmdldEJvdW5kaW5nQm94LCBwcmltaXRpdmVVbml0cyk7
CisgICAgcmV0dXJuIEZFR2F1c3NpYW5CbHVyOjpjYWxjdWxhdGVPdXRzZXRzKHN0ZERldmlhdGlv
bik7Cit9CisKIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IFNWR0ZFR2F1c3NpYW5CbHVyRWxlbWVudDo6
ZmlsdGVyRWZmZWN0KGNvbnN0IFNWR0ZpbHRlckJ1aWxkZXImLCBjb25zdCBGaWx0ZXJFZmZlY3RW
ZWN0b3ImKSBjb25zdAogewogICAgIGlmIChzdGREZXZpYXRpb25YKCkgPCAwIHx8IHN0ZERldmlh
dGlvblkoKSA8IDApCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVHYXVzc2lh
bkJsdXJFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVHYXVzc2lhbkJsdXJFbGVt
ZW50LmgKaW5kZXggNTIxYWUyMDRlYjRmNTJjNmQzNzk5OWU0NGUyMmIwNTI4OGI4MzJiMi4uMTM2
ZjQ0MjkyZTk3M2Q2MWFjODlmZmQ2YzA0ZThmYWQwMDFhNGY0NiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvc3ZnL1NWR0ZFR2F1c3NpYW5CbHVyRWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQuaApAQCAtNTQsNiArNTQsNyBAQCBwcml2
YXRlOgogICAgIHZvaWQgc3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJikg
b3ZlcnJpZGU7CiAKICAgICBWZWN0b3I8QXRvbVN0cmluZz4gZmlsdGVyRWZmZWN0SW5wdXRzTmFt
ZXMoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB7IGluMSgpIH07IH0KKyAgICBJbnRPdXRzZXRz
IG91dHNldHMoY29uc3QgRmxvYXRSZWN0JiB0YXJnZXRCb3VuZGluZ0JveCwgU1ZHVW5pdFR5cGVz
OjpTVkdVbml0VHlwZSBwcmltaXRpdmVVbml0cykgY29uc3Qgb3ZlcnJpZGU7CiAgICAgUmVmUHRy
PEZpbHRlckVmZmVjdD4gZmlsdGVyRWZmZWN0KGNvbnN0IFNWR0ZpbHRlckJ1aWxkZXImLCBjb25z
dCBGaWx0ZXJFZmZlY3RWZWN0b3ImKSBjb25zdCBvdmVycmlkZTsKIAogICAgIFByb3BlcnR5UmVn
aXN0cnkgbV9wcm9wZXJ0eVJlZ2lzdHJ5IHsgKnRoaXMgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdGRU9mZnNldEVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NW
R0ZFT2Zmc2V0RWxlbWVudC5jcHAKaW5kZXggZWI2ZDdjYmY4ZDgwYzZhYjhjMmY4ZTkwNGM1N2E4
M2Y3ZjIwYmU0YS4uYTk5OGQyZmRkNjFjNjY0YmUxYjZiN2QyMDJkMzQxM2IzZTE3OWNhZSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFT2Zmc2V0RWxlbWVudC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFT2Zmc2V0RWxlbWVudC5jcHAKQEAgLTc5LDYgKzc5LDEy
IEBAIHZvaWQgU1ZHRkVPZmZzZXRFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1
YWxpZmllZE5hbWUmIGF0dHJOYW1lKQogICAgIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0
cmlidXRlczo6c3ZnQXR0cmlidXRlQ2hhbmdlZChhdHRyTmFtZSk7CiB9CiAKK0ludE91dHNldHMg
U1ZHRkVPZmZzZXRFbGVtZW50OjpvdXRzZXRzKGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0Qm91bmRp
bmdCb3gsIFNWR1VuaXRUeXBlczo6U1ZHVW5pdFR5cGUgcHJpbWl0aXZlVW5pdHMpIGNvbnN0Cit7
CisgICAgYXV0byBvZmZzZXQgPSBTVkdGaWx0ZXI6OmNhbGN1bGF0ZVJlc29sdmVkU2l6ZSh7IGR4
KCksIGR5KCkgfSwgdGFyZ2V0Qm91bmRpbmdCb3gsIHByaW1pdGl2ZVVuaXRzKTsKKyAgICByZXR1
cm4gRkVPZmZzZXQ6OmNhbGN1bGF0ZU91dHNldHMob2Zmc2V0KTsKK30KKwogUmVmUHRyPEZpbHRl
ckVmZmVjdD4gU1ZHRkVPZmZzZXRFbGVtZW50OjpmaWx0ZXJFZmZlY3QoY29uc3QgU1ZHRmlsdGVy
QnVpbGRlciYsIGNvbnN0IEZpbHRlckVmZmVjdFZlY3RvciYpIGNvbnN0CiB7CiAgICAgcmV0dXJu
IEZFT2Zmc2V0OjpjcmVhdGUoZHgoKSwgZHkoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHRkVPZmZzZXRFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVPZmZz
ZXRFbGVtZW50LmgKaW5kZXggZjg1OTU5OGEwZmU2YTBkN2E4ODRiMGMwYzViOThiZWYyY2Y0N2Ji
ZC4uMTU2ZWRkZjQ2OTlkYmM2YTIyNWZiYTU5ZTAyOThkNmU3OWY3YjA4YSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFT2Zmc2V0RWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdGRU9mZnNldEVsZW1lbnQuaApAQCAtNDgsNiArNDgsNyBAQCBwcml2YXRlOgog
ICAgIHZvaWQgc3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJikgb3ZlcnJp
ZGU7CiAKICAgICBWZWN0b3I8QXRvbVN0cmluZz4gZmlsdGVyRWZmZWN0SW5wdXRzTmFtZXMoKSBj
b25zdCBvdmVycmlkZSB7IHJldHVybiB7IGluMSgpIH07IH0KKyAgICBJbnRPdXRzZXRzIG91dHNl
dHMoY29uc3QgRmxvYXRSZWN0JiB0YXJnZXRCb3VuZGluZ0JveCwgU1ZHVW5pdFR5cGVzOjpTVkdV
bml0VHlwZSBwcmltaXRpdmVVbml0cykgY29uc3Qgb3ZlcnJpZGU7CiAgICAgUmVmUHRyPEZpbHRl
ckVmZmVjdD4gZmlsdGVyRWZmZWN0KGNvbnN0IFNWR0ZpbHRlckJ1aWxkZXImLCBjb25zdCBGaWx0
ZXJFZmZlY3RWZWN0b3ImKSBjb25zdCBvdmVycmlkZTsKIAogICAgIFByb3BlcnR5UmVnaXN0cnkg
bV9wcm9wZXJ0eVJlZ2lzdHJ5IHsgKnRoaXMgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXMuaCBiL1NvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXMuaAppbmRleCA3OGUy
YWEyYzFlODE0ZTY5OGVkNDQ0ZWVjNzdmOWIyMDc2ZTNmOTU1Li41MDBiMWViODlkZDlkMGEwM2Nj
OWU0YzA4MzgyY2U1NDNhY2U2NzRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
RmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcy5oCkBAIC01Myw2ICs1Myw3
IEBAIHB1YmxpYzoKICAgICAvLyBSZXR1cm5zIHRydWUsIGlmIHRoZSBuZXcgdmFsdWUgaXMgZGlm
ZmVyZW50IGZyb20gdGhlIG9sZCBvbmUuCiAgICAgdmlydHVhbCBib29sIHNldEZpbHRlckVmZmVj
dEF0dHJpYnV0ZShGaWx0ZXJFZmZlY3QqLCBjb25zdCBRdWFsaWZpZWROYW1lJik7CiAgICAgdmly
dHVhbCBWZWN0b3I8QXRvbVN0cmluZz4gZmlsdGVyRWZmZWN0SW5wdXRzTmFtZXMoKSBjb25zdCB7
IHJldHVybiB7IH07IH0KKyAgICB2aXJ0dWFsIEludE91dHNldHMgb3V0c2V0cyhjb25zdCBGbG9h
dFJlY3QmLCBTVkdVbml0VHlwZXM6OlNWR1VuaXRUeXBlKSBjb25zdCB7IHJldHVybiB7IH07IH0K
ICAgICB2aXJ0dWFsIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGZpbHRlckVmZmVjdChjb25zdCBTVkdG
aWx0ZXJCdWlsZGVyJiwgY29uc3QgRmlsdGVyRWZmZWN0VmVjdG9yJikgY29uc3QgPSAwOwogCiAg
ICAgc3RhdGljIHZvaWQgaW52YWxpZGF0ZUZpbHRlclByaW1pdGl2ZVBhcmVudChTVkdFbGVtZW50
Kik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdG
aWx0ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVy
LmNwcAppbmRleCA5NWYyNGE3ZGQ5ZTY0ZWVkMDZiNThiNTI5YTg1MDBkZjlhOGNmOTYzLi41MTAx
NTYwM2IxNTU4NTA4NWU0NTAyMTM4YTNmYTA3ZGNiOGM3MWE0IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXIuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlci5jcHAKQEAgLTM0LDE5ICszNCwx
MiBAQCBSZWZQdHI8U1ZHRmlsdGVyPiBTVkdGaWx0ZXI6OmNyZWF0ZShTVkdGaWx0ZXJFbGVtZW50
JiBmaWx0ZXJFbGVtZW50LCBTVkdGaWx0ZXJCdQogewogICAgIGF1dG8gZmlsdGVyID0gYWRvcHRS
ZWYoKm5ldyBTVkdGaWx0ZXIocmVuZGVyaW5nTW9kZSwgZmlsdGVyU2NhbGUsIGNsaXBPcGVyYXRp
b24sIGZpbHRlclJlZ2lvbiwgdGFyZ2V0Qm91bmRpbmdCb3gsIGZpbHRlckVsZW1lbnQucHJpbWl0
aXZlVW5pdHMoKSkpOwogCi0gICAgYnVpbGRlci5zZXR1cEJ1aWx0aW5FZmZlY3RzKFNvdXJjZUdy
YXBoaWM6OmNyZWF0ZSgpKTsKLSAgICBidWlsZGVyLnNldFRhcmdldEJvdW5kaW5nQm94KHRhcmdl
dEJvdW5kaW5nQm94KTsKLSAgICBidWlsZGVyLnNldFByaW1pdGl2ZVVuaXRzKGZpbHRlckVsZW1l
bnQucHJpbWl0aXZlVW5pdHMoKSk7Ci0KLSAgICBpZiAoIWJ1aWxkZXIuYnVpbGRGaWx0ZXJFZmZl
Y3RzKGZpbHRlckVsZW1lbnQpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIFNWR0Zp
bHRlckV4cHJlc3Npb24gZXhwcmVzc2lvbjsKLSAgICBpZiAoIWJ1aWxkZXIuYnVpbGRFeHByZXNz
aW9uKGV4cHJlc3Npb24pKQorICAgIGF1dG8gZXhwcmVzc2lvbiA9IGJ1aWxkZXIuYnVpbGRGaWx0
ZXJFeHByZXNzaW9uKGZpbHRlckVsZW1lbnQpOworICAgIGlmICghZXhwcmVzc2lvbikKICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICBBU1NFUlQoIWV4cHJlc3Npb24uaXNFbXB0eSgpKTsK
LSAgICBmaWx0ZXItPnNldEV4cHJlc3Npb24oV1RGTW92ZShleHByZXNzaW9uKSk7CisgICAgQVNT
RVJUKCFleHByZXNzaW9uLT5pc0VtcHR5KCkpOworICAgIGZpbHRlci0+c2V0RXhwcmVzc2lvbihX
VEZNb3ZlKCpleHByZXNzaW9uKSk7CiAKICAgICBpZiAocmVuZGVyaW5nTW9kZSA9PSBSZW5kZXJp
bmdNb2RlOjpBY2NlbGVyYXRlZCAmJiAhZmlsdGVyLT5zdXBwb3J0c0FjY2VsZXJhdGVkUmVuZGVy
aW5nKCkpCiAgICAgICAgIGZpbHRlci0+c2V0UmVuZGVyaW5nTW9kZShSZW5kZXJpbmdNb2RlOjpV
bmFjY2VsZXJhdGVkKTsKQEAgLTc0LDkgKzY3LDE0IEBAIFNWR0ZpbHRlcjo6U1ZHRmlsdGVyKGNv
bnN0IEZsb2F0UmVjdCYgdGFyZ2V0Qm91bmRpbmdCb3gsIFNWR1VuaXRUeXBlczo6U1ZHVW5pdFR5
CiB7CiB9CiAKK0Zsb2F0U2l6ZSBTVkdGaWx0ZXI6OmNhbGN1bGF0ZVJlc29sdmVkU2l6ZShjb25z
dCBGbG9hdFNpemUmIHNpemUsIGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0Qm91bmRpbmdCb3gsIFNW
R1VuaXRUeXBlczo6U1ZHVW5pdFR5cGUgcHJpbWl0aXZlVW5pdHMpCit7CisgICAgcmV0dXJuIHBy
aW1pdGl2ZVVuaXRzID09IFNWR1VuaXRUeXBlczo6U1ZHX1VOSVRfVFlQRV9PQkpFQ1RCT1VORElO
R0JPWCA/IHNpemUgKiB0YXJnZXRCb3VuZGluZ0JveC5zaXplKCkgOiBzaXplOworfQorCiBGbG9h
dFNpemUgU1ZHRmlsdGVyOjpyZXNvbHZlZFNpemUoY29uc3QgRmxvYXRTaXplJiBzaXplKSBjb25z
dAogewotICAgIHJldHVybiBtX3ByaW1pdGl2ZVVuaXRzID09IFNWR1VuaXRUeXBlczo6U1ZHX1VO
SVRfVFlQRV9PQkpFQ1RCT1VORElOR0JPWCA/IHNpemUgKiBtX3RhcmdldEJvdW5kaW5nQm94LnNp
emUoKSA6IHNpemU7CisgICAgcmV0dXJuIGNhbGN1bGF0ZVJlc29sdmVkU2l6ZShzaXplLCBtX3Rh
cmdldEJvdW5kaW5nQm94LCBtX3ByaW1pdGl2ZVVuaXRzKTsKIH0KIAogYm9vbCBTVkdGaWx0ZXI6
OnN1cHBvcnRzQWNjZWxlcmF0ZWRSZW5kZXJpbmcoKSBjb25zdApAQCAtMTQ4LDE0ICsxNDYsNiBA
QCBSZWZQdHI8RmlsdGVySW1hZ2U+IFNWR0ZpbHRlcjo6YXBwbHkoRmlsdGVySW1hZ2UqIHNvdXJj
ZUltYWdlLCBGaWx0ZXJSZXN1bHRzJiByZQogICAgIHJldHVybiBzdGFjay50YWtlTGFzdCgpOwog
fQogCi1JbnRPdXRzZXRzIFNWR0ZpbHRlcjo6b3V0c2V0cygpIGNvbnN0Ci17Ci0gICAgSW50T3V0
c2V0cyBvdXRzZXRzOwotICAgIGZvciAoYXV0byYgdGVybSA6IG1fZXhwcmVzc2lvbikKLSAgICAg
ICAgb3V0c2V0cyArPSB0ZXJtLmVmZmVjdC0+b3V0c2V0cygqdGhpcyk7Ci0gICAgcmV0dXJuIG91
dHNldHM7Ci19Ci0KIFRleHRTdHJlYW0mIFNWR0ZpbHRlcjo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlv
bihUZXh0U3RyZWFtJiB0cywgRmlsdGVyUmVwcmVzZW50YXRpb24gcmVwcmVzZW50YXRpb24pIGNv
bnN0CiB7CiAgICAgZm9yIChhdXRvIGl0ID0gbV9leHByZXNzaW9uLnJiZWdpbigpLCBlbmQgPSBt
X2V4cHJlc3Npb24ucmVuZCgpOyBpdCAhPSBlbmQ7ICsraXQpIHsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlci5oIGIvU291cmNlL1dlYkNv
cmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyLmgKaW5kZXggNGVlMGZiODdhZjFjMWE0
MWRlZjE4NmE1NTM0MTI4YmE2NzgwZTljYy4uZDIzODc1ZWFiZTBmNmVhZjkyOTA0NDgyMzE5NmEx
NzkzZjBjZjc5YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRl
cnMvU1ZHRmlsdGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMv
U1ZHRmlsdGVyLmgKQEAgLTQ4LDYgKzQ4LDggQEAgcHVibGljOgogCiAgICAgUmVmUHRyPEZpbHRl
ckltYWdlPiBhcHBseShGaWx0ZXJJbWFnZSogc291cmNlSW1hZ2UsIEZpbHRlclJlc3VsdHMmKSBm
aW5hbDsKIAorICAgIHN0YXRpYyBGbG9hdFNpemUgY2FsY3VsYXRlUmVzb2x2ZWRTaXplKGNvbnN0
IEZsb2F0U2l6ZSYsIGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0Qm91bmRpbmdCb3gsIFNWR1VuaXRU
eXBlczo6U1ZHVW5pdFR5cGUgcHJpbWl0aXZlVW5pdHMpOworCiAgICAgV1RGOjpUZXh0U3RyZWFt
JiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6VGV4dFN0cmVhbSYsIEZpbHRlclJlcHJlc2Vu
dGF0aW9uKSBjb25zdCBmaW5hbDsKIAogcHJpdmF0ZToKQEAgLTYyLDkgKzY0LDYgQEAgcHJpdmF0
ZToKIAogICAgIFJlZlB0cjxGaWx0ZXJJbWFnZT4gYXBwbHkoY29uc3QgRmlsdGVyJiwgRmlsdGVy
SW1hZ2UmIHNvdXJjZUltYWdlLCBGaWx0ZXJSZXN1bHRzJikgZmluYWw7CiAKLSAgICBJbnRPdXRz
ZXRzIG91dHNldHMoY29uc3QgRmlsdGVyJikgY29uc3QgZmluYWwgeyByZXR1cm4gb3V0c2V0cygp
OyB9Ci0gICAgSW50T3V0c2V0cyBvdXRzZXRzKCkgY29uc3QgZmluYWw7Ci0KICAgICBGbG9hdFJl
Y3QgbV90YXJnZXRCb3VuZGluZ0JveDsKICAgICBTVkdVbml0VHlwZXM6OlNWR1VuaXRUeXBlIG1f
cHJpbWl0aXZlVW5pdHM7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGlj
cy9maWx0ZXJzL1NWR0ZpbHRlckJ1aWxkZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBo
aWNzL2ZpbHRlcnMvU1ZHRmlsdGVyQnVpbGRlci5jcHAKaW5kZXggNTA3N2IyZWU5MmIwOTVkMjZm
OWJmYmMwMWE5ZmI2NDk3NzE5ZGM1MC4uODNkZTlmODkwODJjYTM0ZmIyOTgyODcxZGZjYWFkMTQ1
MjBjMGUxYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMv
U1ZHRmlsdGVyQnVpbGRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2Zp
bHRlcnMvU1ZHRmlsdGVyQnVpbGRlci5jcHAKQEAgLTIzLDkgKzIzLDggQEAKIAogI2luY2x1ZGUg
IkVsZW1lbnRJdGVyYXRvci5oIgogI2luY2x1ZGUgIlNWR0ZpbHRlckVsZW1lbnQuaCIKKyNpbmNs
dWRlICJTVkdGaWx0ZXJHcmFwaC5oIgogI2luY2x1ZGUgIlNWR0ZpbHRlclByaW1pdGl2ZVN0YW5k
YXJkQXR0cmlidXRlcy5oIgotI2luY2x1ZGUgIlNvdXJjZUFscGhhLmgiCi0jaW5jbHVkZSAiU291
cmNlR3JhcGhpYy5oIgogCiAjaWYgRU5BQkxFKERFU1RJTkFUSU9OX0NPTE9SX1NQQUNFX0xJTkVB
Ul9TUkdCKQogI2luY2x1ZGUgIkNTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5oIgpAQCAtMzcs
MTAgKzM2LDEwIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHN0YXRpYyBjb25zdGV4cHIgdW5zaWdu
ZWQgbWF4VG90YWxOdW1iZXJGaWx0ZXJFZmZlY3RzID0gMTAwOwogc3RhdGljIGNvbnN0ZXhwciB1
bnNpZ25lZCBtYXhDb3VudENoaWxkTm9kZXMgPSAyMDA7CiAKLXZvaWQgU1ZHRmlsdGVyQnVpbGRl
cjo6c2V0dXBCdWlsdGluRWZmZWN0cyhSZWY8RmlsdGVyRWZmZWN0PiBzb3VyY2VHcmFwaGljKQor
U1ZHRmlsdGVyQnVpbGRlcjo6U1ZHRmlsdGVyQnVpbGRlcihjb25zdCBGbG9hdFJlY3QmIHRhcmdl
dEJvdW5kaW5nQm94LCBTVkdVbml0VHlwZXM6OlNWR1VuaXRUeXBlIHByaW1pdGl2ZVVuaXRzKQor
ICAgIDogbV90YXJnZXRCb3VuZGluZ0JveCh0YXJnZXRCb3VuZGluZ0JveCkKKyAgICAsIG1fcHJp
bWl0aXZlVW5pdHMocHJpbWl0aXZlVW5pdHMpCiB7Ci0gICAgbV9idWlsdGluRWZmZWN0cy5hZGQo
U291cmNlR3JhcGhpYzo6ZWZmZWN0TmFtZSgpLCBzb3VyY2VHcmFwaGljKTsKLSAgICBtX2J1aWx0
aW5FZmZlY3RzLmFkZChTb3VyY2VBbHBoYTo6ZWZmZWN0TmFtZSgpLCBTb3VyY2VBbHBoYTo6Y3Jl
YXRlKHNvdXJjZUdyYXBoaWMtPm9wZXJhdGluZ0NvbG9yU3BhY2UoKSkpOwogfQogCiBzdGF0aWMg
T3B0aW9uU2V0PEZpbHRlckVmZmVjdEdlb21ldHJ5OjpGbGFncz4gZWZmZWN0R2VvbWV0cnlGbGFn
c0ZvckVsZW1lbnQoU1ZHRWxlbWVudCYgZWxlbWVudCkKQEAgLTc4LDE1MyArNzcsMTM3IEBAIHN0
YXRpYyBDb2xvckludGVycG9sYXRpb24gY29sb3JJbnRlcnBvbGF0aW9uRm9yRWxlbWVudChTVkdF
bGVtZW50JiBlbGVtZW50KQogfQogI2VuZGlmCiAKLVJlZlB0cjxGaWx0ZXJFZmZlY3Q+IFNWR0Zp
bHRlckJ1aWxkZXI6OmJ1aWxkRmlsdGVyRWZmZWN0cyhTVkdGaWx0ZXJFbGVtZW50JiBmaWx0ZXJF
bGVtZW50KQorc3RhdGljIGJvb2wgYXBwZW5kRWZmZWN0VG9FeHByZXNzaW9uKGNvbnN0IFNWR0Zp
bHRlckVmZmVjdHNHcmFwaCYgZ3JhcGgsIGNvbnN0IEZpbHRlckVmZmVjdEdlb21ldHJ5TWFwJiBl
ZmZlY3RHZW9tZXRyeU1hcCwgRmlsdGVyRWZmZWN0JiBlZmZlY3QsIEZpbHRlckVmZmVjdFZlY3Rv
ciYgc3RhY2ssIHVuc2lnbmVkIGxldmVsLCBTVkdGaWx0ZXJFeHByZXNzaW9uJiBleHByZXNzaW9u
KQogewotICAgIGlmIChmaWx0ZXJFbGVtZW50LmNvdW50Q2hpbGROb2RlcygpID4gbWF4Q291bnRD
aGlsZE5vZGVzKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIHNldEVmZmVjdElucHV0
cyhzb3VyY2VBbHBoYSgpLCBGaWx0ZXJFZmZlY3RWZWN0b3IgeyBzb3VyY2VHcmFwaGljKCkgfSk7
Ci0KLSAgICBmb3IgKGF1dG8mIGVmZmVjdEVsZW1lbnQgOiBjaGlsZHJlbk9mVHlwZTxTVkdGaWx0
ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM+KGZpbHRlckVsZW1lbnQpKSB7Ci0gICAgICAg
IGF1dG8gaW5wdXRzID0gbmFtZWRFZmZlY3RzKGVmZmVjdEVsZW1lbnQuZmlsdGVyRWZmZWN0SW5w
dXRzTmFtZXMoKSk7Ci0gICAgICAgIGlmICghaW5wdXRzKQotICAgICAgICAgICAgcmV0dXJuIG51
bGxwdHI7CisgICAgLy8gQSBjeWNsZSBpcyBkZXRlY3RlZC4KKyAgICBpZiAoc3RhY2suY29udGFp
bnNJZihbJl0oYXV0byYgaXRlbSkgeyByZXR1cm4gaXRlbS5wdHIoKSA9PSAmZWZmZWN0OyB9KSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgIGF1dG8gZWZmZWN0ID0gZWZmZWN0RWxl
bWVudC5maWx0ZXJFZmZlY3QoKnRoaXMsICppbnB1dHMpOwotICAgICAgICBpZiAoIWVmZmVjdCkK
LSAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgIGF1dG8gZWZmZWN0R2VvbWV0cnkgPSBb
Jl0oRmlsdGVyRWZmZWN0JiBlZmZlY3QpIC0+IHN0ZDo6b3B0aW9uYWw8RmlsdGVyRWZmZWN0R2Vv
bWV0cnk+IHsKKyAgICAgICAgYXV0byBpdCA9IGVmZmVjdEdlb21ldHJ5TWFwLmZpbmQoZWZmZWN0
KTsKKyAgICAgICAgaWYgKGl0ICE9IGVmZmVjdEdlb21ldHJ5TWFwLmVuZCgpKQorICAgICAgICAg
ICAgcmV0dXJuIGl0LT52YWx1ZTsKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICB9
OwogCi0gICAgICAgIGlmIChhdXRvIGZsYWdzID0gZWZmZWN0R2VvbWV0cnlGbGFnc0ZvckVsZW1l
bnQoZWZmZWN0RWxlbWVudCkpIHsKLSAgICAgICAgICAgIGF1dG8gZWZmZWN0Qm91bmRhcmllcyA9
IFNWR0xlbmd0aENvbnRleHQ6OnJlc29sdmVSZWN0YW5nbGU8U1ZHRmlsdGVyUHJpbWl0aXZlU3Rh
bmRhcmRBdHRyaWJ1dGVzPigmZWZmZWN0RWxlbWVudCwgbV9wcmltaXRpdmVVbml0cywgbV90YXJn
ZXRCb3VuZGluZ0JveCk7Ci0gICAgICAgICAgICBtX2VmZmVjdEdlb21ldHJ5TWFwLmFkZCgqZWZm
ZWN0LCBGaWx0ZXJFZmZlY3RHZW9tZXRyeShlZmZlY3RCb3VuZGFyaWVzLCBmbGFncykpOwotICAg
ICAgICB9Ci0KLSNpZiBFTkFCTEUoREVTVElOQVRJT05fQ09MT1JfU1BBQ0VfTElORUFSX1NSR0Ip
Ci0gICAgICAgIGlmIChjb2xvckludGVycG9sYXRpb25Gb3JFbGVtZW50KGVmZmVjdEVsZW1lbnQp
ID09IENvbG9ySW50ZXJwb2xhdGlvbjo6TGluZWFyUkdCKQotICAgICAgICAgICAgZWZmZWN0LT5z
ZXRPcGVyYXRpbmdDb2xvclNwYWNlKERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6TGluZWFyU1JHQigp
KTsKLSNlbmRpZgorICAgIHN0YWNrLmFwcGVuZChlZmZlY3QpOwogCi0gICAgICAgIGlmIChhdXRv
IHJlbmRlcmVyID0gZWZmZWN0RWxlbWVudC5yZW5kZXJlcigpKQotICAgICAgICAgICAgYXBwZW5k
RWZmZWN0VG9FZmZlY3RSZW5kZXJlcigqZWZmZWN0LCAqcmVuZGVyZXIpOworICAgIGV4cHJlc3Np
b24uYXBwZW5kKHsgZWZmZWN0LCBlZmZlY3RHZW9tZXRyeShlZmZlY3QpLCBsZXZlbCB9KTsKIAot
ICAgICAgICBhZGROYW1lZEVmZmVjdChlZmZlY3RFbGVtZW50LnJlc3VsdCgpLCB7ICplZmZlY3Qg
fSk7Ci0gICAgICAgIHNldEVmZmVjdElucHV0cygqZWZmZWN0LCBXVEZNb3ZlKCppbnB1dHMpKTsK
KyAgICBmb3IgKGF1dG8mIGlucHV0IDogZ3JhcGguZ2V0Tm9kZUlucHV0cyhlZmZlY3QpKSB7Cisg
ICAgICAgIGlmICghYXBwZW5kRWZmZWN0VG9FeHByZXNzaW9uKGdyYXBoLCBlZmZlY3RHZW9tZXRy
eU1hcCwgaW5wdXQsIHN0YWNrLCBsZXZlbCArIDEsIGV4cHJlc3Npb24pKQorICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIHJldHVybiBtX2xhc3RFZmZlY3Q7Ci19CisgICAg
QVNTRVJUKCFzdGFjay5pc0VtcHR5KCkpOworICAgIEFTU0VSVChzdGFjay5sYXN0KCkucHRyKCkg
PT0gJmVmZmVjdCk7CiAKLUZpbHRlckVmZmVjdCYgU1ZHRmlsdGVyQnVpbGRlcjo6c291cmNlR3Jh
cGhpYygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuICptX2J1aWx0aW5FZmZlY3RzLmdldChGaWx0ZXJF
ZmZlY3Q6OnNvdXJjZUdyYXBoaWNOYW1lKCkpOworICAgIHN0YWNrLnJlbW92ZUxhc3QoKTsKKyAg
ICByZXR1cm4gdHJ1ZTsKIH0KIAotRmlsdGVyRWZmZWN0JiBTVkdGaWx0ZXJCdWlsZGVyOjpzb3Vy
Y2VBbHBoYSgpIGNvbnN0CitzdGF0aWMgYm9vbCBhcHBlbmRHcmFwaFRvRXhwcmVzc2lvbihjb25z
dCBTVkdGaWx0ZXJFZmZlY3RzR3JhcGgmIGdyYXBoLCBjb25zdCBGaWx0ZXJFZmZlY3RHZW9tZXRy
eU1hcCYgZWZmZWN0R2VvbWV0cnlNYXAsIFNWR0ZpbHRlckV4cHJlc3Npb24mIGV4cHJlc3Npb24p
CiB7Ci0gICAgcmV0dXJuICptX2J1aWx0aW5FZmZlY3RzLmdldChGaWx0ZXJFZmZlY3Q6OnNvdXJj
ZUFscGhhTmFtZSgpKTsKLX0KKyAgICBpZiAoIWdyYXBoLmxhc3ROb2RlKCkpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKIAotdm9pZCBTVkdGaWx0ZXJCdWlsZGVyOjphZGROYW1lZEVmZmVjdChjb25z
dCBBdG9tU3RyaW5nJiBpZCwgUmVmPEZpbHRlckVmZmVjdD4mJiBlZmZlY3QpCi17Ci0gICAgaWYg
KGlkLmlzRW1wdHkoKSkgewotICAgICAgICBtX2xhc3RFZmZlY3QgPSBXVEZNb3ZlKGVmZmVjdCk7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgRmlsdGVyRWZmZWN0VmVjdG9yIHN0YWNrOwor
ICAgIGlmICghYXBwZW5kRWZmZWN0VG9FeHByZXNzaW9uKGdyYXBoLCBlZmZlY3RHZW9tZXRyeU1h
cCwgKmdyYXBoLmxhc3ROb2RlKCksIHN0YWNrLCAwLCBleHByZXNzaW9uKSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOwogCi0gICAgaWYgKG1fYnVpbHRpbkVmZmVjdHMuY29udGFpbnMoaWQpKQotICAg
ICAgICByZXR1cm47CisgICAgaWYgKGV4cHJlc3Npb24uc2l6ZSgpID4gbWF4VG90YWxOdW1iZXJG
aWx0ZXJFZmZlY3RzKQorICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBtX2xhc3RFZmZlY3Qg
PSBXVEZNb3ZlKGVmZmVjdCk7Ci0gICAgbV9uYW1lZEVmZmVjdHMuc2V0KGlkLCBSZWYgeyAqbV9s
YXN0RWZmZWN0IH0pOworICAgIGV4cHJlc3Npb24ucmV2ZXJzZSgpOworICAgIGV4cHJlc3Npb24u
c2hyaW5rVG9GaXQoKTsKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAotUmVmUHRyPEZpbHRlckVmZmVj
dD4gU1ZHRmlsdGVyQnVpbGRlcjo6bmFtZWRFZmZlY3QoY29uc3QgQXRvbVN0cmluZyYgaWQpIGNv
bnN0CitzdGQ6Om9wdGlvbmFsPFNWR0ZpbHRlckV4cHJlc3Npb24+IFNWR0ZpbHRlckJ1aWxkZXI6
OmJ1aWxkRmlsdGVyRXhwcmVzc2lvbihTVkdGaWx0ZXJFbGVtZW50JiBmaWx0ZXJFbGVtZW50KQog
ewotICAgIGlmIChpZC5pc0VtcHR5KCkpIHsKLSAgICAgICAgaWYgKG1fbGFzdEVmZmVjdCkKLSAg
ICAgICAgICAgIHJldHVybiBtX2xhc3RFZmZlY3Q7Ci0KLSAgICAgICAgcmV0dXJuICZzb3VyY2VH
cmFwaGljKCk7Ci0gICAgfQotCi0gICAgaWYgKG1fYnVpbHRpbkVmZmVjdHMuY29udGFpbnMoaWQp
KQotICAgICAgICByZXR1cm4gbV9idWlsdGluRWZmZWN0cy5nZXQoaWQpOwotCi0gICAgcmV0dXJu
IG1fbmFtZWRFZmZlY3RzLmdldChpZCk7Ci19CisgICAgaWYgKGZpbHRlckVsZW1lbnQuY291bnRD
aGlsZE5vZGVzKCkgPiBtYXhDb3VudENoaWxkTm9kZXMpCisgICAgICAgIHJldHVybiBzdGQ6Om51
bGxvcHQ7CiAKLXN0ZDo6b3B0aW9uYWw8RmlsdGVyRWZmZWN0VmVjdG9yPiBTVkdGaWx0ZXJCdWls
ZGVyOjpuYW1lZEVmZmVjdHMoU3Bhbjxjb25zdCBBdG9tU3RyaW5nPiBuYW1lcykgY29uc3QKLXsK
LSAgICBGaWx0ZXJFZmZlY3RWZWN0b3IgZWZmZWN0czsKKyAgICBTVkdGaWx0ZXJFZmZlY3RzR3Jh
cGggZ3JhcGgoU291cmNlR3JhcGhpYzo6Y3JlYXRlKCksIFNvdXJjZUFscGhhOjpjcmVhdGUoKSk7
CisgICAgRmlsdGVyRWZmZWN0R2VvbWV0cnlNYXAgZWZmZWN0R2VvbWV0cnlNYXA7CiAKLSAgICBl
ZmZlY3RzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobmFtZXMuc2l6ZSgpKTsKKyAgICBmb3IgKGF1
dG8mIGVmZmVjdEVsZW1lbnQgOiBjaGlsZHJlbk9mVHlwZTxTVkdGaWx0ZXJQcmltaXRpdmVTdGFu
ZGFyZEF0dHJpYnV0ZXM+KGZpbHRlckVsZW1lbnQpKSB7CisgICAgICAgIGF1dG8gaW5wdXRzID0g
Z3JhcGguZ2V0TmFtZWROb2RlcyhlZmZlY3RFbGVtZW50LmZpbHRlckVmZmVjdElucHV0c05hbWVz
KCkpOworICAgICAgICBpZiAoIWlucHV0cykKKyAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxv
cHQ7CiAKLSAgICBmb3IgKGF1dG8mIG5hbWUgOiBuYW1lcykgewotICAgICAgICBhdXRvIGVmZmVj
dCA9IG5hbWVkRWZmZWN0KG5hbWUpOworICAgICAgICBhdXRvIGVmZmVjdCA9IGVmZmVjdEVsZW1l
bnQuZmlsdGVyRWZmZWN0KCp0aGlzLCAqaW5wdXRzKTsKICAgICAgICAgaWYgKCFlZmZlY3QpCiAg
ICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwogCi0gICAgICAgIGVmZmVjdHMudW5jaGVj
a2VkQXBwZW5kKGVmZmVjdC5yZWxlYXNlTm9uTnVsbCgpKTsKLSAgICB9CisgICAgICAgIGlmIChh
dXRvIGZsYWdzID0gZWZmZWN0R2VvbWV0cnlGbGFnc0ZvckVsZW1lbnQoZWZmZWN0RWxlbWVudCkp
IHsKKyAgICAgICAgICAgIGF1dG8gZWZmZWN0Qm91bmRhcmllcyA9IFNWR0xlbmd0aENvbnRleHQ6
OnJlc29sdmVSZWN0YW5nbGU8U1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzPigm
ZWZmZWN0RWxlbWVudCwgbV9wcmltaXRpdmVVbml0cywgbV90YXJnZXRCb3VuZGluZ0JveCk7Cisg
ICAgICAgICAgICBlZmZlY3RHZW9tZXRyeU1hcC5hZGQoKmVmZmVjdCwgRmlsdGVyRWZmZWN0R2Vv
bWV0cnkoZWZmZWN0Qm91bmRhcmllcywgZmxhZ3MpKTsKKyAgICAgICAgfQogCi0gICAgcmV0dXJu
IGVmZmVjdHM7Ci19CisjaWYgRU5BQkxFKERFU1RJTkFUSU9OX0NPTE9SX1NQQUNFX0xJTkVBUl9T
UkdCKQorICAgICAgICBpZiAoY29sb3JJbnRlcnBvbGF0aW9uRm9yRWxlbWVudChlZmZlY3RFbGVt
ZW50KSA9PSBDb2xvckludGVycG9sYXRpb246OkxpbmVhclJHQikKKyAgICAgICAgICAgIGVmZmVj
dC0+c2V0T3BlcmF0aW5nQ29sb3JTcGFjZShEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OkxpbmVhclNS
R0IoKSk7CisjZW5kaWYKIAotdm9pZCBTVkdGaWx0ZXJCdWlsZGVyOjpzZXRFZmZlY3RJbnB1dHMo
RmlsdGVyRWZmZWN0JiBlZmZlY3QsIEZpbHRlckVmZmVjdFZlY3RvciYmIGlucHV0cykKLXsKLSAg
ICBtX2lucHV0c01hcC5zZXQoeyBlZmZlY3QgfSwgV1RGTW92ZShpbnB1dHMpKTsKLX0KKyAgICAg
ICAgaWYgKGF1dG8gcmVuZGVyZXIgPSBlZmZlY3RFbGVtZW50LnJlbmRlcmVyKCkpCisgICAgICAg
ICAgICBtX2VmZmVjdFJlbmRlcmVyLmFkZChyZW5kZXJlciwgZWZmZWN0LmdldCgpKTsKIAotdm9p
ZCBTVkdGaWx0ZXJCdWlsZGVyOjphcHBlbmRFZmZlY3RUb0VmZmVjdFJlbmRlcmVyKEZpbHRlckVm
ZmVjdCYgZWZmZWN0LCBSZW5kZXJPYmplY3QmIG9iamVjdCkKLXsKLSAgICBtX2VmZmVjdFJlbmRl
cmVyLmFkZCgmb2JqZWN0LCAmZWZmZWN0KTsKLX0KKyAgICAgICAgZ3JhcGguYWRkTmFtZWROb2Rl
KGVmZmVjdEVsZW1lbnQucmVzdWx0KCksIHsgKmVmZmVjdCB9KTsKKyAgICAgICAgZ3JhcGguc2V0
Tm9kZUlucHV0cygqZWZmZWN0LCBXVEZNb3ZlKCppbnB1dHMpKTsKKyAgICB9CiAKLXN0ZDo6b3B0
aW9uYWw8RmlsdGVyRWZmZWN0R2VvbWV0cnk+IFNWR0ZpbHRlckJ1aWxkZXI6OmVmZmVjdEdlb21l
dHJ5KEZpbHRlckVmZmVjdCYgZWZmZWN0KSBjb25zdAotewotICAgIGF1dG8gaXQgPSBtX2VmZmVj
dEdlb21ldHJ5TWFwLmZpbmQoZWZmZWN0KTsKLSAgICBpZiAoaXQgIT0gbV9lZmZlY3RHZW9tZXRy
eU1hcC5lbmQoKSkKLSAgICAgICAgcmV0dXJuIGl0LT52YWx1ZTsKLSAgICByZXR1cm4gc3RkOjpu
dWxsb3B0OworICAgIFNWR0ZpbHRlckV4cHJlc3Npb24gZXhwcmVzc2lvbjsKKyAgICBpZiAoIWFw
cGVuZEdyYXBoVG9FeHByZXNzaW9uKGdyYXBoLCBlZmZlY3RHZW9tZXRyeU1hcCwgZXhwcmVzc2lv
bikpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICByZXR1cm4gZXhwcmVzc2lv
bjsKIH0KIAotYm9vbCBTVkdGaWx0ZXJCdWlsZGVyOjpidWlsZEVmZmVjdEV4cHJlc3Npb24oRmls
dGVyRWZmZWN0JiBlZmZlY3QsIEZpbHRlckVmZmVjdFZlY3RvciYgc3RhY2ssIHVuc2lnbmVkIGxl
dmVsLCBTVkdGaWx0ZXJFeHByZXNzaW9uJiBleHByZXNzaW9uKSBjb25zdAorc3RhdGljIEludE91
dHNldHMgY2FsY3VsYXRlUHJpbWl0aXZlT3V0c2V0cyhjb25zdCBTVkdGaWx0ZXJQcmltaXRpdmVz
R3JhcGgmIGdyYXBoLCBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXMmIHByaW1p
dGl2ZSwgVmVjdG9yPFJlZjxTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM+PiYg
c3RhY2ssIGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0Qm91bmRpbmdCb3gsIFNWR1VuaXRUeXBlczo6
U1ZHVW5pdFR5cGUgcHJpbWl0aXZlVW5pdHMpCiB7CiAgICAgLy8gQSBjeWNsZSBpcyBkZXRlY3Rl
ZC4KLSAgICBpZiAoc3RhY2suY29udGFpbnNJZihbJl0oYXV0byYgaXRlbSkgeyByZXR1cm4gaXRl
bS5wdHIoKSA9PSAmZWZmZWN0OyB9KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChz
dGFjay5jb250YWluc0lmKFsmXShhdXRvJiBpdGVtKSB7IHJldHVybiBpdGVtLnB0cigpID09ICZw
cmltaXRpdmU7IH0pKQorICAgICAgICByZXR1cm4geyB9OwogCi0gICAgc3RhY2suYXBwZW5kKGVm
ZmVjdCk7Ci0gICAgCi0gICAgZXhwcmVzc2lvbi5hcHBlbmQoeyBlZmZlY3QsIGVmZmVjdEdlb21l
dHJ5KGVmZmVjdCksIGxldmVsIH0pOworICAgIHN0YWNrLmFwcGVuZChwcmltaXRpdmUpOwogCi0g
ICAgZm9yIChhdXRvJiBpbnB1dCA6IG1faW5wdXRzTWFwLmdldChlZmZlY3QpKSB7Ci0gICAgICAg
IGlmICghYnVpbGRFZmZlY3RFeHByZXNzaW9uKGlucHV0LCBzdGFjaywgbGV2ZWwgKyAxLCBleHBy
ZXNzaW9uKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9CisgICAgSW50T3V0c2V0
cyBvdXRzZXRzOworICAgIGZvciAoYXV0byYgaW5wdXQgOiBncmFwaC5nZXROb2RlSW5wdXRzKHBy
aW1pdGl2ZSkpCisgICAgICAgIG91dHNldHMgKz0gY2FsY3VsYXRlUHJpbWl0aXZlT3V0c2V0cyhn
cmFwaCwgaW5wdXQsIHN0YWNrLCB0YXJnZXRCb3VuZGluZ0JveCwgcHJpbWl0aXZlVW5pdHMpOwor
ICAgIG91dHNldHMgKz0gcHJpbWl0aXZlLm91dHNldHModGFyZ2V0Qm91bmRpbmdCb3gsIHByaW1p
dGl2ZVVuaXRzKTsKIAogICAgIEFTU0VSVCghc3RhY2suaXNFbXB0eSgpKTsKLSAgICBBU1NFUlQo
c3RhY2subGFzdCgpLnB0cigpID09ICZlZmZlY3QpOworICAgIEFTU0VSVChzdGFjay5sYXN0KCku
cHRyKCkgPT0gJnByaW1pdGl2ZSk7CiAKICAgICBzdGFjay5yZW1vdmVMYXN0KCk7Ci0gICAgcmV0
dXJuIHRydWU7CisgICAgcmV0dXJuIG91dHNldHM7CiB9CiAKLWJvb2wgU1ZHRmlsdGVyQnVpbGRl
cjo6YnVpbGRFeHByZXNzaW9uKFNWR0ZpbHRlckV4cHJlc3Npb24mIGV4cHJlc3Npb24pIGNvbnN0
CitzdGF0aWMgSW50T3V0c2V0cyBjYWxjdWxhdGVHcmFwaE91dHNldHMoY29uc3QgU1ZHRmlsdGVy
UHJpbWl0aXZlc0dyYXBoJiBncmFwaCwgY29uc3QgRmxvYXRSZWN0JiB0YXJnZXRCb3VuZGluZ0Jv
eCwgU1ZHVW5pdFR5cGVzOjpTVkdVbml0VHlwZSBwcmltaXRpdmVVbml0cykKIHsKLSAgICBpZiAo
IW1fbGFzdEVmZmVjdCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICghZ3JhcGgubGFz
dE5vZGUoKSkKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICAKKyAgICBWZWN0b3I8UmVmPFNWR0Zp
bHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcz4+IHN0YWNrOworICAgIHJldHVybiBjYWxj
dWxhdGVQcmltaXRpdmVPdXRzZXRzKGdyYXBoLCAqZ3JhcGgubGFzdE5vZGUoKSwgc3RhY2ssIHRh
cmdldEJvdW5kaW5nQm94LCBwcmltaXRpdmVVbml0cyk7Cit9CiAKLSAgICBGaWx0ZXJFZmZlY3RW
ZWN0b3Igc3RhY2s7Ci0gICAgaWYgKCFidWlsZEVmZmVjdEV4cHJlc3Npb24oKm1fbGFzdEVmZmVj
dCwgc3RhY2ssIDAsIGV4cHJlc3Npb24pKQotICAgICAgICByZXR1cm4gZmFsc2U7CitJbnRPdXRz
ZXRzIFNWR0ZpbHRlckJ1aWxkZXI6OmNhbGN1bGF0ZUZpbHRlck91dHNldHMoU1ZHRmlsdGVyRWxl
bWVudCYgZmlsdGVyRWxlbWVudCkKK3sKKyAgICBpZiAoZmlsdGVyRWxlbWVudC5jb3VudENoaWxk
Tm9kZXMoKSA+IG1heENvdW50Q2hpbGROb2RlcykKKyAgICAgICAgcmV0dXJuIHsgfTsKIAotICAg
IGlmIChleHByZXNzaW9uLnNpemUoKSA+IG1heFRvdGFsTnVtYmVyRmlsdGVyRWZmZWN0cykKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIFNWR0ZpbHRlclByaW1pdGl2ZXNHcmFwaCBncmFwaDsK
IAotICAgIGV4cHJlc3Npb24ucmV2ZXJzZSgpOwotICAgIGV4cHJlc3Npb24uc2hyaW5rVG9GaXQo
KTsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICBmb3IgKGF1dG8mIGVmZmVjdEVsZW1lbnQgOiBjaGls
ZHJlbk9mVHlwZTxTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM+KGZpbHRlckVs
ZW1lbnQpKSB7CisgICAgICAgIC8vIFdlIHNob3VsZCBub3QgYmUgc3RyaWN0IGFib3V0IG5vdCBm
aW5kaW5nIHRoZSBpbnB1dCBwcmltaXRpdmVzIGhlcmUgYmVjYXVzZSBTb3VyY2VHcmFwaGljIGFu
ZCBTb3VyY2VBbHBoYSBkbyBub3QgaGF2ZSBwcmltaXRpdmVzLgorICAgICAgICBhdXRvIGlucHV0
cyA9IGdyYXBoLmdldE5hbWVkTm9kZXMoZWZmZWN0RWxlbWVudC5maWx0ZXJFZmZlY3RJbnB1dHNO
YW1lcygpKS52YWx1ZV9vcihTVkdGaWx0ZXJQcmltaXRpdmVzR3JhcGg6Ok5vZGVWZWN0b3IoKSk7
CisgICAgICAgIGdyYXBoLmFkZE5hbWVkTm9kZShlZmZlY3RFbGVtZW50LnJlc3VsdCgpLCB7IGVm
ZmVjdEVsZW1lbnQgfSk7CisgICAgICAgIGdyYXBoLnNldE5vZGVJbnB1dHMoZWZmZWN0RWxlbWVu
dCwgV1RGTW92ZShpbnB1dHMpKTsKKyAgICB9CisKKyAgICByZXR1cm4gY2FsY3VsYXRlR3JhcGhP
dXRzZXRzKGdyYXBoLCBtX3RhcmdldEJvdW5kaW5nQm94LCBtX3ByaW1pdGl2ZVVuaXRzKTsKIH0K
IAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3Zn
L2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyQnVpbGRlci5oIGIvU291cmNlL1dlYkNvcmUvc3Zn
L2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyQnVpbGRlci5oCmluZGV4IGM5OTEwMmU3MGJlMDQy
MzRkZDZiMjYzMzhhZTMwMTkwNWU2MTAxYzEuLmRkZjYwZTkxNzM2NTQ4MjBkY2VlMjA0MWQ3ZWMx
MzE0NWMyMGMxMDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0
ZXJzL1NWR0ZpbHRlckJ1aWxkZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3Mv
ZmlsdGVycy9TVkdGaWx0ZXJCdWlsZGVyLmgKQEAgLTIxLDEzICsyMSw5IEBACiAKICNwcmFnbWEg
b25jZQogCi0jaW5jbHVkZSAiRmlsdGVyRWZmZWN0LmgiCi0jaW5jbHVkZSAiRmlsdGVyRWZmZWN0
VmVjdG9yLmgiCiAjaW5jbHVkZSAiU1ZHRmlsdGVyRXhwcmVzc2lvbi5oIgogI2luY2x1ZGUgIlNW
R1VuaXRUeXBlcy5oIgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+Ci0jaW5jbHVkZSA8d3RmL3Rl
eHQvQXRvbVN0cmluZ0hhc2guaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC0zOCw0NSArMzQsMjEgQEAgY2xhc3MgU1ZHRmlsdGVy
RWxlbWVudDsKIGNsYXNzIFNWR0ZpbHRlckJ1aWxkZXIgewogICAgIFdURl9NQUtFX0ZBU1RfQUxM
T0NBVEVEOwogcHVibGljOgotICAgIFNWR0ZpbHRlckJ1aWxkZXIoKSA9IGRlZmF1bHQ7CisgICAg
U1ZHRmlsdGVyQnVpbGRlcihjb25zdCBGbG9hdFJlY3QmIHRhcmdldEJvdW5kaW5nQm94LCBTVkdV
bml0VHlwZXM6OlNWR1VuaXRUeXBlIHByaW1pdGl2ZVVuaXRzID0gU1ZHVW5pdFR5cGVzOjpTVkdf
VU5JVF9UWVBFX1VTRVJTUEFDRU9OVVNFKTsKIAotICAgIHZvaWQgc2V0VGFyZ2V0Qm91bmRpbmdC
b3goY29uc3QgRmxvYXRSZWN0JiByKSB7IG1fdGFyZ2V0Qm91bmRpbmdCb3ggPSByOyB9CiAgICAg
RmxvYXRSZWN0IHRhcmdldEJvdW5kaW5nQm94KCkgY29uc3QgeyByZXR1cm4gbV90YXJnZXRCb3Vu
ZGluZ0JveDsgfQotICAgIAogICAgIFNWR1VuaXRUeXBlczo6U1ZHVW5pdFR5cGUgcHJpbWl0aXZl
VW5pdHMoKSBjb25zdCB7IHJldHVybiBtX3ByaW1pdGl2ZVVuaXRzOyB9Ci0gICAgdm9pZCBzZXRQ
cmltaXRpdmVVbml0cyhTVkdVbml0VHlwZXM6OlNWR1VuaXRUeXBlIHVuaXRzKSB7IG1fcHJpbWl0
aXZlVW5pdHMgPSB1bml0czsgfQogCi0gICAgLy8gUmVxdWlyZWQgdG8gY2hhbmdlIHRoZSBhdHRy
aWJ1dGVzIG9mIGEgZmlsdGVyIGR1cmluZyBhbiBzdmdBdHRyaWJ1dGVDaGFuZ2VkLgotICAgIHZv
aWQgYXBwZW5kRWZmZWN0VG9FZmZlY3RSZW5kZXJlcihGaWx0ZXJFZmZlY3QmLCBSZW5kZXJPYmpl
Y3QmKTsKLSAgICBpbmxpbmUgRmlsdGVyRWZmZWN0KiBlZmZlY3RCeVJlbmRlcmVyKFJlbmRlck9i
amVjdCogb2JqZWN0KSB7IHJldHVybiBtX2VmZmVjdFJlbmRlcmVyLmdldChvYmplY3QpOyB9Cisg
ICAgc3RkOjpvcHRpb25hbDxTVkdGaWx0ZXJFeHByZXNzaW9uPiBidWlsZEZpbHRlckV4cHJlc3Np
b24oU1ZHRmlsdGVyRWxlbWVudCYpOworICAgIEludE91dHNldHMgY2FsY3VsYXRlRmlsdGVyT3V0
c2V0cyhTVkdGaWx0ZXJFbGVtZW50Jik7CiAKLSAgICB2b2lkIHNldHVwQnVpbHRpbkVmZmVjdHMo
UmVmPEZpbHRlckVmZmVjdD4gc291cmNlR3JhcGhpYyk7Ci0gICAgUmVmUHRyPEZpbHRlckVmZmVj
dD4gYnVpbGRGaWx0ZXJFZmZlY3RzKFNWR0ZpbHRlckVsZW1lbnQmKTsKLSAgICBib29sIGJ1aWxk
RXhwcmVzc2lvbihTVkdGaWx0ZXJFeHByZXNzaW9uJikgY29uc3Q7CisgICAgLy8gUmVxdWlyZWQg
dG8gY2hhbmdlIHRoZSBhdHRyaWJ1dGVzIG9mIGEgZmlsdGVyIGR1cmluZyBhbiBzdmdBdHRyaWJ1
dGVDaGFuZ2VkLgorICAgIEZpbHRlckVmZmVjdCogZWZmZWN0QnlSZW5kZXJlcihSZW5kZXJPYmpl
Y3QqIG9iamVjdCkgeyByZXR1cm4gbV9lZmZlY3RSZW5kZXJlci5nZXQob2JqZWN0KTsgfQogCiBw
cml2YXRlOgotICAgIEZpbHRlckVmZmVjdCYgc291cmNlR3JhcGhpYygpIGNvbnN0OwotICAgIEZp
bHRlckVmZmVjdCYgc291cmNlQWxwaGEoKSBjb25zdDsKLQotICAgIFJlZlB0cjxGaWx0ZXJFZmZl
Y3Q+IG5hbWVkRWZmZWN0KGNvbnN0IEF0b21TdHJpbmcmKSBjb25zdDsKLSAgICBzdGQ6Om9wdGlv
bmFsPEZpbHRlckVmZmVjdFZlY3Rvcj4gbmFtZWRFZmZlY3RzKFNwYW48Y29uc3QgQXRvbVN0cmlu
Zz4pIGNvbnN0OwotCi0gICAgdm9pZCBhZGROYW1lZEVmZmVjdChjb25zdCBBdG9tU3RyaW5nJiBp
ZCwgUmVmPEZpbHRlckVmZmVjdD4mJik7Ci0gICAgdm9pZCBzZXRFZmZlY3RJbnB1dHMoRmlsdGVy
RWZmZWN0JiwgRmlsdGVyRWZmZWN0VmVjdG9yJiYgaW5wdXRzKTsKLQotICAgIHN0ZDo6b3B0aW9u
YWw8RmlsdGVyRWZmZWN0R2VvbWV0cnk+IGVmZmVjdEdlb21ldHJ5KEZpbHRlckVmZmVjdCYpIGNv
bnN0OwotICAgIGJvb2wgYnVpbGRFZmZlY3RFeHByZXNzaW9uKEZpbHRlckVmZmVjdCYsIEZpbHRl
ckVmZmVjdFZlY3RvciYgc3RhY2ssIHVuc2lnbmVkIGxldmVsLCBTVkdGaWx0ZXJFeHByZXNzaW9u
JikgY29uc3Q7Ci0KLSAgICBIYXNoTWFwPEF0b21TdHJpbmcsIFJlZjxGaWx0ZXJFZmZlY3Q+PiBt
X2J1aWx0aW5FZmZlY3RzOwotICAgIEhhc2hNYXA8QXRvbVN0cmluZywgUmVmPEZpbHRlckVmZmVj
dD4+IG1fbmFtZWRFZmZlY3RzOwogICAgIEhhc2hNYXA8UmVuZGVyT2JqZWN0KiwgRmlsdGVyRWZm
ZWN0Kj4gbV9lZmZlY3RSZW5kZXJlcjsKLSAgICBIYXNoTWFwPFJlZjxGaWx0ZXJFZmZlY3Q+LCBG
aWx0ZXJFZmZlY3RWZWN0b3I+IG1faW5wdXRzTWFwOwotCi0gICAgUmVmUHRyPEZpbHRlckVmZmVj
dD4gbV9sYXN0RWZmZWN0OwotCiAgICAgRmxvYXRSZWN0IG1fdGFyZ2V0Qm91bmRpbmdCb3g7CiAg
ICAgU1ZHVW5pdFR5cGVzOjpTVkdVbml0VHlwZSBtX3ByaW1pdGl2ZVVuaXRzIHsgU1ZHVW5pdFR5
cGVzOjpTVkdfVU5JVF9UWVBFX1VTRVJTUEFDRU9OVVNFIH07Ci0gICAgRmlsdGVyRWZmZWN0R2Vv
bWV0cnlNYXAgbV9lZmZlY3RHZW9tZXRyeU1hcDsKIH07CiAgICAgCiB9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9T
VkdGaWx0ZXJFeHByZXNzaW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVy
cy9TVkdGaWx0ZXJFeHByZXNzaW9uLmgKaW5kZXggM2ZiMDVlZmNlZWJjYTVkYWNiZjAyYzgyYmE4
NzE4ODZhOGRlZDA3Zi4uYjViNDZkMTE3ZjBmODIwMmViZGZjNzM0ZTViY2NhMjU1N2NhMDliOSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVy
RXhwcmVzc2lvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NW
R0ZpbHRlckV4cHJlc3Npb24uaApAQCAtMjUsNiArMjUsNyBAQAogCiAjcHJhZ21hIG9uY2UKIAor
I2luY2x1ZGUgIkZpbHRlckVmZmVjdEdlb21ldHJ5LmgiCiAjaW5jbHVkZSAiRmxvYXRSZWN0Lmgi
CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9z
dmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXJHcmFwaC5oIGIvU291cmNlL1dlYkNvcmUvc3Zn
L2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyR3JhcGguaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mODc3ZmUxNzZk
NGNhYmUwMjg2NjQ4MGRiNmI1MjQxODBlMDYxZTkzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyR3JhcGguaApAQCAtMCwwICsx
LDEzMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMiBBcHBsZSBJbmMuICBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
cHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIlNvdXJjZUFscGhhLmgiCisjaW5jbHVkZSAiU291cmNl
R3JhcGhpYy5oIgorI2luY2x1ZGUgPHd0Zi90ZXh0L0F0b21TdHJpbmdIYXNoLmg+CisjaW5jbHVk
ZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3Mg
RmlsdGVyRWZmZWN0OworY2xhc3MgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVz
OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBOb2RlVHlwZT4KK2NsYXNzIFNWR0ZpbHRlckdyYXBoIHsK
K3B1YmxpYzoKKyAgICB1c2luZyBOb2RlVmVjdG9yID0gVmVjdG9yPFJlZjxOb2RlVHlwZT4+Owor
CisgICAgU1ZHRmlsdGVyR3JhcGgoKSA9IGRlZmF1bHQ7CisKKyAgICBTVkdGaWx0ZXJHcmFwaChS
ZWY8Tm9kZVR5cGU+JiYgc291cmNlR3JhcGhpYywgUmVmPE5vZGVUeXBlPiYmIHNvdXJjZUFscGhh
KQorICAgIHsKKyAgICAgICAgbV9idWlsdGluTm9kZXMuYWRkKFNvdXJjZUdyYXBoaWM6OmVmZmVj
dE5hbWUoKSwgV1RGTW92ZShzb3VyY2VHcmFwaGljKSk7CisgICAgICAgIG1fYnVpbHRpbk5vZGVz
LmFkZChTb3VyY2VBbHBoYTo6ZWZmZWN0TmFtZSgpLCBXVEZNb3ZlKHNvdXJjZUFscGhhKSk7CisK
KyAgICAgICAgc2V0Tm9kZUlucHV0cygqdGhpcy0+c291cmNlQWxwaGEoKSwgTm9kZVZlY3RvciB7
ICp0aGlzLT5zb3VyY2VHcmFwaGljKCkgfSk7CisgICAgfQorCisgICAgTm9kZVR5cGUqIHNvdXJj
ZUdyYXBoaWMoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fYnVpbHRpbk5vZGVzLmdl
dChGaWx0ZXJFZmZlY3Q6OnNvdXJjZUdyYXBoaWNOYW1lKCkpOworICAgIH0KKworICAgIE5vZGVU
eXBlKiBzb3VyY2VBbHBoYSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9idWlsdGlu
Tm9kZXMuZ2V0KEZpbHRlckVmZmVjdDo6c291cmNlQWxwaGFOYW1lKCkpOworICAgIH0KKworICAg
IHZvaWQgYWRkTmFtZWROb2RlKGNvbnN0IEF0b21TdHJpbmcmIGlkLCBSZWY8Tm9kZVR5cGU+JiYg
bm9kZSkKKyAgICB7CisgICAgICAgIGlmIChpZC5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIG1f
bGFzdE5vZGUgPSBXVEZNb3ZlKG5vZGUpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9
CisKKyAgICAgICAgaWYgKG1fYnVpbHRpbk5vZGVzLmNvbnRhaW5zKGlkKSkKKyAgICAgICAgICAg
IHJldHVybjsKKworICAgICAgICBtX2xhc3ROb2RlID0gV1RGTW92ZShub2RlKTsKKyAgICAgICAg
bV9uYW1lZE5vZGVzLnNldChpZCwgUmVmIHsgKm1fbGFzdE5vZGUgfSk7CisgICAgfQorCisgICAg
UmVmUHRyPE5vZGVUeXBlPiBnZXROYW1lZE5vZGUoY29uc3QgQXRvbVN0cmluZyYgaWQpIGNvbnN0
CisgICAgeworICAgICAgICBpZiAoaWQuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICBpZiAobV9s
YXN0Tm9kZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gbV9sYXN0Tm9kZTsKKworICAgICAgICAg
ICAgcmV0dXJuIHNvdXJjZUdyYXBoaWMoKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChtX2J1
aWx0aW5Ob2Rlcy5jb250YWlucyhpZCkpCisgICAgICAgICAgICByZXR1cm4gbV9idWlsdGluTm9k
ZXMuZ2V0KGlkKTsKKworICAgICAgICByZXR1cm4gbV9uYW1lZE5vZGVzLmdldChpZCk7CisgICAg
fQorCisgICAgc3RkOjpvcHRpb25hbDxOb2RlVmVjdG9yPiBnZXROYW1lZE5vZGVzKFNwYW48Y29u
c3QgQXRvbVN0cmluZz4gbmFtZXMpIGNvbnN0CisgICAgeworICAgICAgICBOb2RlVmVjdG9yIG5v
ZGVzOworCisgICAgICAgIG5vZGVzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobmFtZXMuc2l6ZSgp
KTsKKworICAgICAgICBmb3IgKGF1dG8mIG5hbWUgOiBuYW1lcykgeworICAgICAgICAgICAgYXV0
byBub2RlID0gZ2V0TmFtZWROb2RlKG5hbWUpOworICAgICAgICAgICAgaWYgKCFub2RlKQorICAg
ICAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICAgICAgICAgIG5vZGVzLnVu
Y2hlY2tlZEFwcGVuZChub2RlLnJlbGVhc2VOb25OdWxsKCkpOworICAgICAgICB9CisKKyAgICAg
ICAgcmV0dXJuIG5vZGVzOworICAgIH0KKworICAgIHZvaWQgc2V0Tm9kZUlucHV0cyhOb2RlVHlw
ZSYgbm9kZSwgTm9kZVZlY3RvciYmIGlucHV0cykKKyAgICB7CisgICAgICAgIG1fbm9kZUlucHV0
cy5zZXQoeyBub2RlIH0sIFdURk1vdmUoaW5wdXRzKSk7CisgICAgfQorCisgICAgTm9kZVZlY3Rv
ciBnZXROb2RlSW5wdXRzKE5vZGVUeXBlJiBub2RlKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0
dXJuIG1fbm9kZUlucHV0cy5nZXQobm9kZSk7CisgICAgfQorCisgICAgTm9kZVR5cGUqIGxhc3RO
b2RlKCkgY29uc3QgeyByZXR1cm4gbV9sYXN0Tm9kZS5nZXQoKTsgfQorCitwcml2YXRlOgorICAg
IEhhc2hNYXA8QXRvbVN0cmluZywgUmVmPE5vZGVUeXBlPj4gbV9idWlsdGluTm9kZXM7CisgICAg
SGFzaE1hcDxBdG9tU3RyaW5nLCBSZWY8Tm9kZVR5cGU+PiBtX25hbWVkTm9kZXM7CisgICAgSGFz
aE1hcDxSZWY8Tm9kZVR5cGU+LCBOb2RlVmVjdG9yPiBtX25vZGVJbnB1dHM7CisgICAgUmVmUHRy
PE5vZGVUeXBlPiBtX2xhc3ROb2RlOworfTsKKwordXNpbmcgU1ZHRmlsdGVyRWZmZWN0c0dyYXBo
ID0gU1ZHRmlsdGVyR3JhcGg8RmlsdGVyRWZmZWN0PjsKK3VzaW5nIFNWR0ZpbHRlclByaW1pdGl2
ZXNHcmFwaCA9IFNWR0ZpbHRlckdyYXBoPFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmli
dXRlcz47CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>456626</attachid>
            <date>2022-04-04 14:00:52 -0700</date>
            <delta_ts>2022-04-04 19:07:41 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-236574-20220404140051.patch</filename>
            <type>text/plain</type>
            <size>67324</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjkyMzA4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMjk1N2FiODViNWEyYjVi
MDc1M2YxMWU4OTRjZTkzNWE5NTljYzUyYi4uOTMxNmExNmY2YTE4OGEyZGU2MmVmNzA5YTU3ZjI1
NzY3ZmEyNzc2MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzMiBAQAorMjAyMi0wNC0wNCAgU2Fp
ZCBBYm91LUhhbGxhd2EgIDxzYWlkQGFwcGxlLmNvbT4KKworICAgICAgICBbR1BVIFByb2Nlc3Nd
IENTU0ZpbHRlciBzaG91bGQgYmUgY3JlYXRlZCBvbmx5IGF0IHRoZSBwYWludGluZyB0aW1lCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzY1NzQKKyAg
ICAgICAgcmRhcjovLzg5MjEwMDA0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgU2ltb24gRnJhc2Vy
LgorCisgICAgICAgIEluc3RlYWQgb2YgYnVpbGRpbmcgdGhlIHdob2xlIGZpbHRlciBjaGFpbiB0
byBnZXQgdGhlIGZpbHRlciBvdXRzZXRzIGF0IAorICAgICAgICB0aGUgbGF5b3V0IHRpbWUsIHdl
IGNhbiB1c2UgdGhlIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcyBhbmQKKyAg
ICAgICAgdGhlIEZpbHRlck9wZXJhdGlvbiBzdXBlciBjbGFzc2VzIHRvIGdldCB0aGVpciBvdXRz
ZXRzIHdpdGhvdXQgaGF2aW5nIHRvCisgICAgICAgIGJ1aWxkIHRoZSBGaWx0ZXJFZmZlY3RzLgor
CisgICAgICAgIENTU0ZpbHRlcjo6Y2FsY3VsYXRlT3V0c2V0cygpIGlzIGEgc3RhdGljIG1ldGhv
ZCB3aGljaCB3aWxsIGxvb3AgdGhyb3VnaAorICAgICAgICB0aGUgRmlsdGVyT3BlcmF0aW9ucyBh
bmQgd2lsbCBhZGQgdXAgdGhlIG91dHNldHMgb2YgdGhlIGJsdXIsIHRoZSBkcm9wLQorICAgICAg
ICBzaGFkb3cgYW5kIHRoZSByZWZlcmVuY2UgRmlsdGVyT3BlcmF0aW9uLgorCisgICAgICAgIFNW
R0ZpbHRlckJ1aWxkZXI6OmNhbGN1bGF0ZUZpbHRlck91dHNldHMoKSB3aWxsIGxvb3AgdGhyb3Vn
aCB0aGUgcHJpbWl0aXZlcworICAgICAgICBvZiB0aGUgZmlsdGVyIGVsZW1lbnQgYW5kIHdpbGwg
Y2FsbCB0aGUgbmV3IHZpcnR1YWwgbWV0aG9kIG91dHNldHMoKSB3aGljaAorICAgICAgICB3aWxs
IGNhbGwgYSBzdGF0aWMgbWV0aG9kIGluIHRoZSBjb3JyZXNwb25kaW5nIEZpbHRlckVmZmVjdC4K
KworICAgICAgICBGRURyb3BTaGFkb3csIEZFR2F1c3NpYW5CbHVyIGFuZCBGRU9mZnNldCB3aWxs
IGJlIHByb3ZpZGUgc3RhdGljIG1ldGhvZHMKKyAgICAgICAgZm9yIGNhbGN1bGF0aW5nIHRoZSBl
ZmZlY3Qgb3V0c2V0cy4gVGhlc2Ugc3RhdGljIG1ldGhvZHMgd2lsbCBiZSBjYWxsZWQgCisgICAg
ICAgIGZyb20gQ1NTRmlsdGVyOjpjYWxjdWxhdGVPdXRzZXRzKCkgYW5kIGZyb20gdGhlIFNWR0ZF
eHh4RWxlbWVudHMuCisKKyAgICAgICAgVG8gcmVtb3ZlIHRoZSBkdXBsaWNhdGlvbiBvZiB0aGUg
Y29kZSBmcm9tIFNWR0ZpbHRlckJ1aWxkZXI6OgorICAgICAgICBidWlsZEZpbHRlckVmZmVjdHMo
KSBhbmQgY2FsY3VsYXRlRmlsdGVyT3V0c2V0cygpLCBhIG5ldyB0ZW1wbGF0ZSBjbGFzcworICAg
ICAgICBuYW1lZCBTVkdGaWx0ZXJHcmFwaCB3aWxsIGJlIGludHJvZHVjZWQuIEl0IHJlcHJlc2Vu
dHMgdGhlIGdyYXBoIG9mIHRoZQorICAgICAgICBTVkdGaWx0ZXIuIFRoZSBub2RlcyBvZiAgdGhp
cyBncmFwaCB3aWxsIGJlIG9mIHR5cGUgRmlsdGVyRWZmZWNjdCB3aGVuCisgICAgICAgIGl0IGlz
IHVzZWQgdG8gYnVpbGQgdGhlIFNWR0ZpbHRlckV4cHJlc3Npb24uIFRoZSBub2RlcyB3aWxsIGJl
IG9mIHR5cGUKKyAgICAgICAgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzIHdo
ZW4gaXQgaXMgdXNlZCB0byBjYWxjdWxhdGUgdGhlCisgICAgICAgIGZpbHRlciBvdXRzZXRzLgor
CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEcm9wU2hhZG93LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkZFRHJvcFNoYWRvdzo6Y2FsY3VsYXRlT3V0c2V0cyk6CisgICAgICAgIChXZWJDb3Jl
OjpGRURyb3BTaGFkb3c6Om91dHNldHMgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEcm9wU2hhZG93Lmg6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRUdhdXNzaWFuQmx1ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpG
RUdhdXNzaWFuQmx1cjo6Y2FsY3VsYXRlT3V0c2V0cyk6CisgICAgICAgIChXZWJDb3JlOjpGRUdh
dXNzaWFuQmx1cjo6b3V0c2V0cyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRUdhdXNzaWFuQmx1ci5oOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVPZmZzZXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVPZmZzZXQ6
OmNhbGN1bGF0ZU91dHNldHMpOgorICAgICAgICAoV2ViQ29yZTo6RkVPZmZzZXQ6Om91dHNldHMg
Y29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVP
ZmZzZXQuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlci5oOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRnVuY3Rpb24uaDoKKyAg
ICAgICAgKFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjphcHBseSk6CisgICAgICAgIChXZWJDb3Jl
OjpGaWx0ZXJGdW5jdGlvbjo6b3V0c2V0cyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogcmVu
ZGVyaW5nL0NTU0ZpbHRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjYWxjdWxhdGVCbHVyRWZm
ZWN0T3V0c2V0cyk6CisgICAgICAgIChXZWJDb3JlOjpjYWxjdWxhdGVEcm9wU2hhZG93RWZmZWN0
T3V0c2V0cyk6CisgICAgICAgIChXZWJDb3JlOjpyZWZlcmVuY2VGaWx0ZXJFbGVtZW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OmNhbGN1bGF0ZVJlZmVyZW5jZUZpbHRlck91dHNldHMpOgorICAgICAg
ICAoV2ViQ29yZTo6Y3JlYXRlUmVmZXJlbmNlRmlsdGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNT
U0ZpbHRlcjo6YnVpbGRGaWx0ZXJGdW5jdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRmls
dGVyOjpjYWxjdWxhdGVPdXRzZXRzKToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZVNWR0ZpbHRl
cik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDU1NGaWx0ZXI6Om91dHNldHMgY29uc3Qp
OiBEZWxldGVkLgorICAgICAgICAqIHJlbmRlcmluZy9DU1NGaWx0ZXIuaDoKKyAgICAgICAgKiBy
ZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6
OmZpbHRlcnNGb3JQYWludGluZyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXll
cjo6Y2FsY3VsYXRlQ2xpcFJlY3RzIGNvbnN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVy
TGF5ZXJGaWx0ZXJzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyRmlsdGVyczo6
Y2FsY3VsYXRlT3V0c2V0cyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckZpbHRlcnM6
OmJlZ2luRmlsdGVyRWZmZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyRmlsdGVy
czo6c2V0RmlsdGVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyRmls
dGVyczo6YnVpbGRGaWx0ZXIpOiBEZWxldGVkLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJM
YXllckZpbHRlcnMuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNl
RmlsdGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1Jlc291cmNlRmlsdGVyOjph
cHBseVJlc291cmNlKToKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1NWR1JlbmRlclRyZWVBc1Rl
eHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6d3JpdGVTVkdSZXNvdXJjZUNvbnRhaW5lcik6Cisg
ICAgICAgICogc3ZnL1NWR0ZFRHJvcFNoYWRvd0VsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6U1ZHRkVEcm9wU2hhZG93RWxlbWVudDo6b3V0c2V0cyBjb25zdCk6CisgICAgICAgICogc3Zn
L1NWR0ZFRHJvcFNoYWRvd0VsZW1lbnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHRkVHYXVzc2lhbkJs
dXJFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFR2F1c3NpYW5CbHVyRWxlbWVu
dDo6b3V0c2V0cyBjb25zdCk6CisgICAgICAgICogc3ZnL1NWR0ZFR2F1c3NpYW5CbHVyRWxlbWVu
dC5oOgorICAgICAgICAqIHN2Zy9TVkdGRU9mZnNldEVsZW1lbnQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6U1ZHRkVPZmZzZXRFbGVtZW50OjpvdXRzZXRzIGNvbnN0KToKKyAgICAgICAgKiBzdmcv
U1ZHRkVPZmZzZXRFbGVtZW50Lmg6CisgICAgICAgICogc3ZnL1NWR0ZpbHRlclByaW1pdGl2ZVN0
YW5kYXJkQXR0cmlidXRlcy5oOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRmlsdGVyUHJpbWl0aXZl
U3RhbmRhcmRBdHRyaWJ1dGVzOjpvdXRzZXRzIGNvbnN0KToKKyAgICAgICAgKiBzdmcvZ3JhcGhp
Y3MvZmlsdGVycy9TVkdGaWx0ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRmlsdGVyOjpj
cmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRmlsdGVyOjpjYWxjdWxhdGVSZXNvbHZlZFNp
emUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRmlsdGVyOjpyZXNvbHZlZFNpemUgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6U1ZHRmlsdGVyOjpvdXRzZXRzIGNvbnN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKiBzdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXIuaDoKKyAgICAgICAgKiBzdmcv
Z3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXJCdWlsZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlNWR0ZpbHRlckJ1aWxkZXI6OlNWR0ZpbHRlckJ1aWxkZXIpOgorICAgICAgICAoV2ViQ29yZTo6
YXBwZW5kRWZmZWN0VG9FeHByZXNzaW9uKToKKyAgICAgICAgKFdlYkNvcmU6OmFwcGVuZEdyYXBo
VG9FeHByZXNzaW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZpbHRlckJ1aWxkZXI6OmJ1aWxk
RmlsdGVyRXhwcmVzc2lvbik6CisgICAgICAgIChXZWJDb3JlOjpjYWxjdWxhdGVQcmltaXRpdmVP
dXRzZXRzKToKKyAgICAgICAgKFdlYkNvcmU6OmNhbGN1bGF0ZUdyYXBoT3V0c2V0cyk6CisgICAg
ICAgIChXZWJDb3JlOjpTVkdGaWx0ZXJCdWlsZGVyOjpjYWxjdWxhdGVGaWx0ZXJPdXRzZXRzKToK
KyAgICAgICAgKFdlYkNvcmU6OlNWR0ZpbHRlckJ1aWxkZXI6OnNldHVwQnVpbHRpbkVmZmVjdHMp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U1ZHRmlsdGVyQnVpbGRlcjo6YnVpbGRGaWx0
ZXJFZmZlY3RzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZpbHRlckJ1aWxkZXI6
OnNvdXJjZUdyYXBoaWMgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U1ZHRmls
dGVyQnVpbGRlcjo6c291cmNlQWxwaGEgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6U1ZHRmlsdGVyQnVpbGRlcjo6YWRkTmFtZWRFZmZlY3QpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6U1ZHRmlsdGVyQnVpbGRlcjo6bmFtZWRFZmZlY3QgY29uc3QpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6U1ZHRmlsdGVyQnVpbGRlcjo6bmFtZWRFZmZlY3RzIGNvbnN0KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZpbHRlckJ1aWxkZXI6OnNldEVmZmVjdElu
cHV0cyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0ZXJCdWlsZGVyOjphcHBl
bmRFZmZlY3RUb0VmZmVjdFJlbmRlcmVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNW
R0ZpbHRlckJ1aWxkZXI6OmVmZmVjdEdlb21ldHJ5IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OlNWR0ZpbHRlckJ1aWxkZXI6OmJ1aWxkRWZmZWN0RXhwcmVzc2lvbiBjb25zdCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0ZXJCdWlsZGVyOjpidWlsZEV4cHJl
c3Npb24gY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9maWx0ZXJzL1NW
R0ZpbHRlckJ1aWxkZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZpbHRlckJ1aWxkZXI6OnRh
cmdldEJvdW5kaW5nQm94IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZpbHRlckJ1aWxk
ZXI6OnByaW1pdGl2ZVVuaXRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZpbHRlckJ1
aWxkZXI6OmVmZmVjdEJ5UmVuZGVyZXIpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRmlsdGVyQnVp
bGRlcjo6c2V0VGFyZ2V0Qm91bmRpbmdCb3gpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
U1ZHRmlsdGVyQnVpbGRlcjo6c2V0UHJpbWl0aXZlVW5pdHMpOiBEZWxldGVkLgorICAgICAgICAq
IHN2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlckV4cHJlc3Npb24uaDoKKyAgICAgICAgKiBz
dmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXJHcmFwaC5oOiBBZGRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OlNWR0ZpbHRlckdyYXBoOjpTVkdGaWx0ZXJHcmFwaCk6CisgICAgICAgIChXZWJDb3Jl
OjpTVkdGaWx0ZXJHcmFwaDo6c291cmNlR3JhcGhpYyBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpTVkdGaWx0ZXJHcmFwaDo6c291cmNlQWxwaGEgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
U1ZHRmlsdGVyR3JhcGg6OmFkZE5hbWVkTm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0
ZXJHcmFwaDo6Z2V0TmFtZWROb2RlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZpbHRl
ckdyYXBoOjpnZXROYW1lZE5vZGVzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZpbHRl
ckdyYXBoOjpzZXROb2RlSW5wdXRzKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZpbHRlckdyYXBo
OjpnZXROb2RlSW5wdXRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZpbHRlckdyYXBo
OjpsYXN0Tm9kZSBjb25zdCk6CisKIDIwMjItMDQtMDQgIFRpbSBOZ3V5ZW4gIDxudGltQGFwcGxl
LmNvbT4KIAogICAgICAgICBDb25kaXRpb25hbGx5IGluamVjdCA8YXR0YWNobWVudD4gc3R5bGVz
IGJhc2VkIG9uIHJ1bnRpbWUgZmxhZwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IGU0Y2Y3NGM1NGM4YzBlYzNiZDhlYTdkZWMzN2Vj
ZDdjNWU0MDhlYTYuLmY5NzhmNTJmZGU2ZGY4MGRlMzlhMzRhZGI2NTM1YTQyMDI3NDMyNDAgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oK
QEAgLTExNDYyLDYgKzExNDYyLDcgQEAKIAkJNzJGMUFEQTMxQTM5MEI5RjAwMDE0RTE4IC8qIEpT
RVhURnJhZ0RlcHRoLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpT
RVhURnJhZ0RlcHRoLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzJGMUFEQTQx
QTM5MEI5RjAwMDE0RTE4IC8qIEpTRVhURnJhZ0RlcHRoLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEpTRVhURnJhZ0RlcHRoLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTcyRjY2N0RGMjYwQzI2NDQwMEVFMzZBRCAvKiBEaWFnbm9zdGljTG9nZ2luZ0RvbWFpbi5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBEaWFnbm9zdGljTG9nZ2luZ0RvbWFpbi5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQk3MkY3QTA4MDI3RjE3MUJGMDAwOEVFRTggLyogU1ZHRmlsdGVyR3Jh
cGguaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHRmlsdGVyR3JhcGguaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJNzJGN0U3NDIyNzlCOEY3NDAwRDgyRDJEIC8qIFNvdXJjZUltYWdlLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNvdXJjZUltYWdlLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzJGN0U3NDQyNzlCOEY3NDAwRDgyRDJEIC8qIFNv
dXJjZUltYWdlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNvdXJjZUltYWdl
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyRjdFNzRFMjc5Q0VERTgwMEQ4MkQy
RCAvKiBGRUltYWdlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZFSW1hZ2UuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjg4OTQsNiArMjg4OTUsNyBAQAogCQkJCTA4MUVCRjM4
MEZEMzRGNDEwMERBNzU1OSAvKiBTVkdGaWx0ZXJCdWlsZGVyLmNwcCAqLywKIAkJCQkwODFFQkYz
OTBGRDM0RjQxMDBEQTc1NTkgLyogU1ZHRmlsdGVyQnVpbGRlci5oICovLAogCQkJCTcyNkNERTI1
Mjc1QjQ4OTcwMEE0NDVCMiAvKiBTVkdGaWx0ZXJFeHByZXNzaW9uLmggKi8sCisJCQkJNzJGN0Ew
ODAyN0YxNzFCRjAwMDhFRUU4IC8qIFNWR0ZpbHRlckdyYXBoLmggKi8sCiAJCQkpOwogCQkJcGF0
aCA9IGZpbHRlcnM7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwpAQCAtMzQwNTcsNiArMzQw
NTksNyBAQAogCQkJCUY0NDJDMzU5MjNFM0FERDIwMDQ5OTU4MiAvKiBDb21wb3NpdGlvbkhpZ2hs
aWdodC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMkRENUE3MjcxRUJFRTQ3RDAwOUJBNTk3IC8qIENv
bXBvc2l0aW9uVW5kZXJsaW5lLmggaW4gSGVhZGVycyAqLywKIAkJCQk3MTE2RTJDQzFGRUQ3NURD
MDBDMDZGREUgLyogQ29tcHV0ZWRFZmZlY3RUaW1pbmcuaCBpbiBIZWFkZXJzICovLAorCQkJCTdB
N0M4QjU4MjdGMzJFRjcwMDA4RTIzNCAvKiBDb21wdXRlZFN0eWxlUHJvcGVydHlNYXBSZWFkT25s
eS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTVBRDA5NDEyNDA4OTY0QTAwREU0RDJGIC8qIENvbmNy
ZXRlSW1hZ2VCdWZmZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUZEMzE2MDhGMTJCMDI2RjcwMEMx
QTM1OSAvKiBDb25lLmggaW4gSGVhZGVycyAqLywKIAkJCQk2NUM5N0FGMzA4RUE5MDg4MDBBQ0Qy
NzMgLyogY29uZmlnLmggaW4gSGVhZGVycyAqLywKQEAgLTM2Mjk4LDcgKzM2MzAxLDYgQEAKIAkJ
CQk0NEUzNDlGOTI0NkY0RTE5MDA2ODQ3OUMgLyogTGliV2ViUlRDRW51bVRyYWl0cy5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJNDE1NzQ3NDcxRTM4NjlBNDAwRTkxNEQ4IC8qIExpYldlYlJUQ01hY3Jv
cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDE3NjEyQjAxRTNBOTk0MDAwQzNEODFEIC8qIExpYldl
YlJUQ01lZGlhRW5kcG9pbnQuaCBpbiBIZWFkZXJzICovLAotCQkJCTdBN0M4QjU4MjdGMzJFRjcw
MDA4RTIzNCAvKiBDb21wdXRlZFN0eWxlUHJvcGVydHlNYXBSZWFkT25seS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJNDE3NjEyQjIxRTNBOTk0MDAwQzNEODFEIC8qIExpYldlYlJUQ1BlZXJDb25uZWN0
aW9uQmFja2VuZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDE1NzQ3NDgxRTM4NjlBNzAwRTkxNEQ4
IC8qIExpYldlYlJUQ1Byb3ZpZGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk0MUIyOEIzRDFGODYw
RUYzMDBGQjUyQUMgLyogTGliV2ViUlRDUHJvdmlkZXJDb2NvYS5oIGluIEhlYWRlcnMgKi8sCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRHJv
cFNoYWRvdy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
RHJvcFNoYWRvdy5jcHAKaW5kZXggMTczMzkwODRlNjllMGRjMGRkYWU2ZjJkNzczNGYxZWQxM2M1
YWViZS4uNjFkOTc3MjFlMmQwOWU4NTY4NDNhNzQzMzRkYjQyOGFlNzcyNWU5OCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURyb3BTaGFkb3cu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEcm9w
U2hhZG93LmNwcApAQCAtNjEsMTQgKzYxLDE0IEBAIEZsb2F0UmVjdCBGRURyb3BTaGFkb3c6OmNh
bGN1bGF0ZUltYWdlUmVjdChjb25zdCBGaWx0ZXImIGZpbHRlciwgY29uc3QgRmlsdGVySW1hCiAg
ICAgcmV0dXJuIGZpbHRlci5jbGlwVG9NYXhFZmZlY3RSZWN0KGltYWdlUmVjdCwgcHJpbWl0aXZl
U3VicmVnaW9uKTsKIH0KIAotSW50T3V0c2V0cyBGRURyb3BTaGFkb3c6Om91dHNldHMoY29uc3Qg
RmlsdGVyJikgY29uc3QKK0ludE91dHNldHMgRkVEcm9wU2hhZG93OjpjYWxjdWxhdGVPdXRzZXRz
KGNvbnN0IEZsb2F0U2l6ZSYgb2Zmc2V0LCBjb25zdCBGbG9hdFNpemUmIHN0ZERldmlhdGlvbikK
IHsKLSAgICBJbnRTaXplIG91dHNldFNpemUgPSBGRUdhdXNzaWFuQmx1cjo6Y2FsY3VsYXRlT3V0
c2V0U2l6ZSh7IG1fc3RkWCwgbV9zdGRZIH0pOworICAgIEludFNpemUgb3V0c2V0U2l6ZSA9IEZF
R2F1c3NpYW5CbHVyOjpjYWxjdWxhdGVPdXRzZXRTaXplKHN0ZERldmlhdGlvbik7CiAKLSAgICBp
bnQgdG9wID0gc3RkOjptYXg8aW50PigwLCBvdXRzZXRTaXplLmhlaWdodCgpIC0gbV9keSk7Ci0g
ICAgaW50IHJpZ2h0ID0gc3RkOjptYXg8aW50PigwLCBvdXRzZXRTaXplLndpZHRoKCkgKyBtX2R4
KTsKLSAgICBpbnQgYm90dG9tID0gc3RkOjptYXg8aW50PigwLCBvdXRzZXRTaXplLmhlaWdodCgp
ICsgbV9keSk7Ci0gICAgaW50IGxlZnQgPSBzdGQ6Om1heDxpbnQ+KDAsIG91dHNldFNpemUud2lk
dGgoKSAtIG1fZHgpOworICAgIGludCB0b3AgPSBzdGQ6Om1heDxpbnQ+KDAsIG91dHNldFNpemUu
aGVpZ2h0KCkgLSBvZmZzZXQuaGVpZ2h0KCkpOworICAgIGludCByaWdodCA9IHN0ZDo6bWF4PGlu
dD4oMCwgb3V0c2V0U2l6ZS53aWR0aCgpICsgb2Zmc2V0LndpZHRoKCkpOworICAgIGludCBib3R0
b20gPSBzdGQ6Om1heDxpbnQ+KDAsIG91dHNldFNpemUuaGVpZ2h0KCkgKyBvZmZzZXQuaGVpZ2h0
KCkpOworICAgIGludCBsZWZ0ID0gc3RkOjptYXg8aW50PigwLCBvdXRzZXRTaXplLndpZHRoKCkg
LSBvZmZzZXQud2lkdGgoKSk7CiAKICAgICByZXR1cm4geyB0b3AsIHJpZ2h0LCBib3R0b20sIGxl
ZnQgfTsKIH0KQEAgLTc3LDcgKzc3LDcgQEAgc3RkOjp1bmlxdWVfcHRyPEZpbHRlckVmZmVjdEFw
cGxpZXI+IEZFRHJvcFNoYWRvdzo6Y3JlYXRlU29mdHdhcmVBcHBsaWVyKCkgY29uc3QKIHsKICAg
ICByZXR1cm4gRmlsdGVyRWZmZWN0QXBwbGllcjo6Y3JlYXRlPEZFRHJvcFNoYWRvd1NvZnR3YXJl
QXBwbGllcj4oKnRoaXMpOwogfQotICAgIAorCiBUZXh0U3RyZWFtJiBGRURyb3BTaGFkb3c6OmV4
dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMsIEZpbHRlclJlcHJlc2VudGF0aW9u
IHJlcHJlc2VudGF0aW9uKSBjb25zdAogewogICAgIHRzIDw8IGluZGVudCA8PCJbZmVEcm9wU2hh
ZG93IjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVEcm9wU2hhZG93LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFRHJvcFNoYWRvdy5oCmluZGV4IDhhMDMwM2Y3MGQ2ODhjZTE3NmU3MzE0YWVhZTgzOTA0
Y2UwZWRlNmUuLjdhMjBiMzJmMmQ4MDk4YjlmYjU3ZGQ1OWE4YWU1MjMxNzIzNDI4Y2YgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEcm9wU2hh
ZG93LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURy
b3BTaGFkb3cuaApAQCAtNDcsNiArNDcsOCBAQCBwdWJsaWM6CiAgICAgZmxvYXQgc2hhZG93T3Bh
Y2l0eSgpIGNvbnN0IHsgcmV0dXJuIG1fc2hhZG93T3BhY2l0eTsgfQogICAgIHZvaWQgc2V0U2hh
ZG93T3BhY2l0eShmbG9hdCBzaGFkb3dPcGFjaXR5KSB7IG1fc2hhZG93T3BhY2l0eSA9IHNoYWRv
d09wYWNpdHk7IH0KIAorICAgIHN0YXRpYyBJbnRPdXRzZXRzIGNhbGN1bGF0ZU91dHNldHMoY29u
c3QgRmxvYXRTaXplJiBvZmZzZXQsIGNvbnN0IEZsb2F0U2l6ZSYgc3RkRGV2aWF0aW9uKTsKKwog
ICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsK
ICAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgc3RkOjpvcHRpb25hbDxSZWY8RkVE
cm9wU2hhZG93Pj4gZGVjb2RlKERlY29kZXImKTsKIApAQCAtNTUsOCArNTcsNiBAQCBwcml2YXRl
OgogCiAgICAgRmxvYXRSZWN0IGNhbGN1bGF0ZUltYWdlUmVjdChjb25zdCBGaWx0ZXImLCBjb25z
dCBGaWx0ZXJJbWFnZVZlY3RvciYgaW5wdXRzLCBjb25zdCBGbG9hdFJlY3QmIHByaW1pdGl2ZVN1
YnJlZ2lvbikgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICBJbnRPdXRzZXRzIG91dHNldHMoY29uc3Qg
RmlsdGVyJikgY29uc3Qgb3ZlcnJpZGU7Ci0KICAgICBzdGQ6OnVuaXF1ZV9wdHI8RmlsdGVyRWZm
ZWN0QXBwbGllcj4gY3JlYXRlU29mdHdhcmVBcHBsaWVyKCkgY29uc3Qgb3ZlcnJpZGU7CiAKICAg
ICBXVEY6OlRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24oV1RGOjpUZXh0U3RyZWFt
JiwgRmlsdGVyUmVwcmVzZW50YXRpb24pIGNvbnN0IG92ZXJyaWRlOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUdhdXNzaWFuQmx1ci5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFR2F1c3NpYW5CbHVy
LmNwcAppbmRleCA3YTUzNjczNmI2OGUyZjgxOWRkZWE2ZjRkNjFmOTZmNDk3Yjg2ZGY2Li42OTQ3
NTNjZjRjNzU4MGFkODg5Y2NkM2ViN2U5NjQ5MWNkYmUyMjNiIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFR2F1c3NpYW5CbHVyLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFR2F1c3NpYW5CbHVy
LmNwcApAQCAtMTIwLDkgKzEyMCw5IEBAIEZsb2F0UmVjdCBGRUdhdXNzaWFuQmx1cjo6Y2FsY3Vs
YXRlSW1hZ2VSZWN0KGNvbnN0IEZpbHRlciYgZmlsdGVyLCBjb25zdCBGaWx0ZXJJCiAgICAgcmV0
dXJuIGZpbHRlci5jbGlwVG9NYXhFZmZlY3RSZWN0KGltYWdlUmVjdCwgcHJpbWl0aXZlU3VicmVn
aW9uKTsKIH0KIAotSW50T3V0c2V0cyBGRUdhdXNzaWFuQmx1cjo6b3V0c2V0cyhjb25zdCBGaWx0
ZXImIGZpbHRlcikgY29uc3QKK0ludE91dHNldHMgRkVHYXVzc2lhbkJsdXI6OmNhbGN1bGF0ZU91
dHNldHMoY29uc3QgRmxvYXRTaXplJiBzdGREZXZpYXRpb24pCiB7Ci0gICAgSW50U2l6ZSBvdXRz
ZXRTaXplID0gY2FsY3VsYXRlT3V0c2V0U2l6ZShmaWx0ZXIucmVzb2x2ZWRTaXplKHsgbV9zdGRY
LCBtX3N0ZFkgfSkpOworICAgIEludFNpemUgb3V0c2V0U2l6ZSA9IGNhbGN1bGF0ZU91dHNldFNp
emUoc3RkRGV2aWF0aW9uKTsKICAgICByZXR1cm4geyBvdXRzZXRTaXplLmhlaWdodCgpLCBvdXRz
ZXRTaXplLndpZHRoKCksIG91dHNldFNpemUuaGVpZ2h0KCksIG91dHNldFNpemUud2lkdGgoKSB9
OwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFR2F1c3NpYW5CbHVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFR2F1c3NpYW5CbHVyLmgKaW5kZXggODAxNTQ4NDcyNGJhNzcwZWI0YzkwOWMxNzMx
MzYyZmE5YjU1NzEzZS4uMjRjYjkyNmY3NjQ4ZDFhZmM0ZDA4OTMyYTQyNTIyM2YzNDhiZjAwZiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUdh
dXNzaWFuQmx1ci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVHYXVzc2lhbkJsdXIuaApAQCAtNDQsNiArNDQsOCBAQCBwdWJsaWM6CiAgICAgc3RhdGlj
IEludFNpemUgY2FsY3VsYXRlVW5zY2FsZWRLZXJuZWxTaXplKEZsb2F0U2l6ZSBzdGREZXZpYXRp
b24pOwogICAgIHN0YXRpYyBJbnRTaXplIGNhbGN1bGF0ZU91dHNldFNpemUoRmxvYXRTaXplIHN0
ZERldmlhdGlvbik7CiAKKyAgICBzdGF0aWMgSW50T3V0c2V0cyBjYWxjdWxhdGVPdXRzZXRzKGNv
bnN0IEZsb2F0U2l6ZSYgc3RkRGV2aWF0aW9uKTsKKwogICAgIHRlbXBsYXRlPGNsYXNzIEVuY29k
ZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKICAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNv
ZGVyPiBzdGF0aWMgc3RkOjpvcHRpb25hbDxSZWY8RkVHYXVzc2lhbkJsdXI+PiBkZWNvZGUoRGVj
b2RlciYpOwogCkBAIC01Miw4ICs1NCw2IEBAIHByaXZhdGU6CiAKICAgICBGbG9hdFJlY3QgY2Fs
Y3VsYXRlSW1hZ2VSZWN0KGNvbnN0IEZpbHRlciYsIGNvbnN0IEZpbHRlckltYWdlVmVjdG9yJiBp
bnB1dHMsIGNvbnN0IEZsb2F0UmVjdCYgcHJpbWl0aXZlU3VicmVnaW9uKSBjb25zdCBvdmVycmlk
ZTsKIAotICAgIEludE91dHNldHMgb3V0c2V0cyhjb25zdCBGaWx0ZXImKSBjb25zdCBvdmVycmlk
ZTsKLQogICAgIGJvb2wgcmVzdWx0SXNBbHBoYUltYWdlKGNvbnN0IEZpbHRlckltYWdlVmVjdG9y
JiBpbnB1dHMpIGNvbnN0IG92ZXJyaWRlOwogCiAgICAgc3RkOjp1bmlxdWVfcHRyPEZpbHRlckVm
ZmVjdEFwcGxpZXI+IGNyZWF0ZVNvZnR3YXJlQXBwbGllcigpIGNvbnN0IG92ZXJyaWRlOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU9mZnNl
dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFT2Zmc2V0
LmNwcAppbmRleCAzOTVhODI2YmUwMmQ3MGI2MjM5MzFjYWFjOGUwZWNiMDQzMjc4NzNlLi44Njlk
Y2Y2YzU4ZDI4MzVlM2NkZmFlNWI3ODdjMmU2YTliOWY5NDY3IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFT2Zmc2V0LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFT2Zmc2V0LmNwcApAQCAtNjAs
MTkgKzYwLDE5IEBAIEZsb2F0UmVjdCBGRU9mZnNldDo6Y2FsY3VsYXRlSW1hZ2VSZWN0KGNvbnN0
IEZpbHRlciYgZmlsdGVyLCBjb25zdCBGaWx0ZXJJbWFnZVZlCiAgICAgcmV0dXJuIGZpbHRlci5j
bGlwVG9NYXhFZmZlY3RSZWN0KGltYWdlUmVjdCwgcHJpbWl0aXZlU3VicmVnaW9uKTsKIH0KIAot
SW50T3V0c2V0cyBGRU9mZnNldDo6b3V0c2V0cyhjb25zdCBGaWx0ZXImIGZpbHRlcikgY29uc3QK
K0ludE91dHNldHMgRkVPZmZzZXQ6OmNhbGN1bGF0ZU91dHNldHMoY29uc3QgRmxvYXRTaXplJiBv
ZmZzZXQpCiB7Ci0gICAgYXV0byBvZmZzZXQgPSBleHBhbmRlZEludFNpemUoZmlsdGVyLnJlc29s
dmVkU2l6ZSh7IG1fZHgsIG1fZHkgfSkpOworICAgIGF1dG8gYWRqdXN0ZWRPZmZzZXQgPSBleHBh
bmRlZEludFNpemUob2Zmc2V0KTsKIAogICAgIEludE91dHNldHMgb3V0c2V0czsKLSAgICBpZiAo
b2Zmc2V0LmhlaWdodCgpIDwgMCkKLSAgICAgICAgb3V0c2V0cy5zZXRUb3AoLW9mZnNldC5oZWln
aHQoKSk7CisgICAgaWYgKGFkanVzdGVkT2Zmc2V0LmhlaWdodCgpIDwgMCkKKyAgICAgICAgb3V0
c2V0cy5zZXRUb3AoLWFkanVzdGVkT2Zmc2V0LmhlaWdodCgpKTsKICAgICBlbHNlCi0gICAgICAg
IG91dHNldHMuc2V0Qm90dG9tKG9mZnNldC5oZWlnaHQoKSk7Ci0gICAgaWYgKG9mZnNldC53aWR0
aCgpIDwgMCkKLSAgICAgICAgb3V0c2V0cy5zZXRMZWZ0KC1vZmZzZXQud2lkdGgoKSk7CisgICAg
ICAgIG91dHNldHMuc2V0Qm90dG9tKGFkanVzdGVkT2Zmc2V0LmhlaWdodCgpKTsKKyAgICBpZiAo
YWRqdXN0ZWRPZmZzZXQud2lkdGgoKSA8IDApCisgICAgICAgIG91dHNldHMuc2V0TGVmdCgtYWRq
dXN0ZWRPZmZzZXQud2lkdGgoKSk7CiAgICAgZWxzZQotICAgICAgICBvdXRzZXRzLnNldFJpZ2h0
KG9mZnNldC53aWR0aCgpKTsKKyAgICAgICAgb3V0c2V0cy5zZXRSaWdodChhZGp1c3RlZE9mZnNl
dC53aWR0aCgpKTsKIAogICAgIHJldHVybiBvdXRzZXRzOwogfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU9mZnNldC5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU9mZnNldC5oCmluZGV4IGNiYTAwNmNl
MmI4OWE3OWIzNDljZDRjYThkZjViNjIyOWM0ZTVlZjMuLjFiMjQ2ODQxOTM3NjMzYTVhYWIzZmI2
MGMxNGI3OTUyNTFlNjBjNTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVPZmZzZXQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFT2Zmc2V0LmgKQEAgLTM2LDYgKzM2LDggQEAgcHVibGljOgogICAg
IGZsb2F0IGR5KCkgY29uc3QgeyByZXR1cm4gbV9keTsgfQogICAgIHZvaWQgc2V0RHkoZmxvYXQp
OwogCisgICAgc3RhdGljIEludE91dHNldHMgY2FsY3VsYXRlT3V0c2V0cyhjb25zdCBGbG9hdFNp
emUmIG9mZnNldCk7CisKICAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShF
bmNvZGVyJikgY29uc3Q7CiAgICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIHN0ZDo6
b3B0aW9uYWw8UmVmPEZFT2Zmc2V0Pj4gZGVjb2RlKERlY29kZXImKTsKIApAQCAtNDQsOCArNDYs
NiBAQCBwcml2YXRlOgogCiAgICAgRmxvYXRSZWN0IGNhbGN1bGF0ZUltYWdlUmVjdChjb25zdCBG
aWx0ZXImLCBjb25zdCBGaWx0ZXJJbWFnZVZlY3RvciYgaW5wdXRzLCBjb25zdCBGbG9hdFJlY3Qm
IHByaW1pdGl2ZVN1YnJlZ2lvbikgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICBJbnRPdXRzZXRzIG91
dHNldHMoY29uc3QgRmlsdGVyJikgY29uc3Qgb3ZlcnJpZGU7Ci0KICAgICBib29sIHJlc3VsdElz
QWxwaGFJbWFnZShjb25zdCBGaWx0ZXJJbWFnZVZlY3RvciYgaW5wdXRzKSBjb25zdCBvdmVycmlk
ZTsKIAogICAgIHN0ZDo6dW5pcXVlX3B0cjxGaWx0ZXJFZmZlY3RBcHBsaWVyPiBjcmVhdGVTb2Z0
d2FyZUFwcGxpZXIoKSBjb25zdCBvdmVycmlkZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlci5oCmluZGV4IGUwZWYxYmFhN2RhZTg0MmI5OWRk
ZTc4ODJkODdmNGEwMjk5YWZlM2IuLjEwODYyNDZjZGRlNTMzNjA4MzhlZTQwMzdjMTRhNmI4YTJj
YjUwYzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRmlsdGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GaWx0ZXIuaApAQCAtMzYsNyArMzYsNiBAQCBjbGFzcyBGaWx0ZXJSZXN1bHRzOwogCiBjbGFz
cyBGaWx0ZXIgOiBwdWJsaWMgRmlsdGVyRnVuY3Rpb24gewogICAgIHVzaW5nIEZpbHRlckZ1bmN0
aW9uOjphcHBseTsKLSAgICB1c2luZyBGaWx0ZXJGdW5jdGlvbjo6b3V0c2V0czsKIAogcHVibGlj
OgogICAgIGVudW0gY2xhc3MgQ2xpcE9wZXJhdGlvbiB7IEludGVyc2VjdCwgVW5pdGUgfTsKQEAg
LTY2LDcgKzY1LDYgQEAgcHVibGljOgogCiAgICAgYm9vbCBjbGFtcEZpbHRlclJlZ2lvbklmTmVl
ZGVkKCk7CiAKLSAgICB2aXJ0dWFsIEludE91dHNldHMgb3V0c2V0cygpIGNvbnN0ID0gMDsKICAg
ICB2aXJ0dWFsIFJlZlB0cjxGaWx0ZXJJbWFnZT4gYXBwbHkoRmlsdGVySW1hZ2UqIHNvdXJjZUlt
YWdlLCBGaWx0ZXJSZXN1bHRzJikgPSAwOwogICAgIFdFQkNPUkVfRVhQT1JUIFJlZlB0cjxGaWx0
ZXJJbWFnZT4gYXBwbHkoSW1hZ2VCdWZmZXIqIHNvdXJjZUltYWdlLCBjb25zdCBGbG9hdFJlY3Qm
IHNvdXJjZUltYWdlUmVjdCwgRmlsdGVyUmVzdWx0cyYpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckZ1bmN0aW9uLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckZ1bmN0aW9uLmgKaW5k
ZXggNjQ0YjU4MzVkYmJlMDVlOGY1OWQ3NTg3YzUzMmFkNGY2NTAzZGNkNy4uYzg1MzlhYmYxMDlj
ZjlhNzNhYTM1MTZlNjJjOWQxMmU5NzQwMzY2NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJGdW5jdGlvbi5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRnVuY3Rpb24uaApAQCAtOTUs
NyArOTUsNiBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNBY2NlbGVyYXRl
ZFJlbmRlcmluZygpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCBSZWZQdHI8
RmlsdGVySW1hZ2U+IGFwcGx5KGNvbnN0IEZpbHRlciYsIEZpbHRlckltYWdlJiwgRmlsdGVyUmVz
dWx0cyYpIHsgcmV0dXJuIG51bGxwdHI7IH0KLSAgICB2aXJ0dWFsIEludE91dHNldHMgb3V0c2V0
cyhjb25zdCBGaWx0ZXImKSBjb25zdCB7IHJldHVybiB7IH07IH0KIAogICAgIHZpcnR1YWwgV1RG
OjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6VGV4dFN0cmVhbSYsIEZp
bHRlclJlcHJlc2VudGF0aW9uID0gRmlsdGVyUmVwcmVzZW50YXRpb246OlRlc3RPdXRwdXQpIGNv
bnN0ID0gMDsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0NTU0ZpbHRl
ci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvQ1NTRmlsdGVyLmNwcAppbmRleCA2MzZk
ODE0NTExYmYzNTdhMTJiZTUxYTViODdjNDUyNzY0NzhmZTI3Li5iNjg4ODMxZWIxMmMxN2NkMjAy
Y2M4MzBiZmYzNjc5NWRmNDEwMzY2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvQ1NTRmlsdGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvQ1NTRmlsdGVy
LmNwcApAQCAtNzYsNiArNzYsMTIgQEAgQ1NTRmlsdGVyOjpDU1NGaWx0ZXIoVmVjdG9yPFJlZjxG
aWx0ZXJGdW5jdGlvbj4+JiYgZnVuY3Rpb25zKQogewogfQogCitzdGF0aWMgSW50T3V0c2V0cyBj
YWxjdWxhdGVCbHVyRWZmZWN0T3V0c2V0cyhjb25zdCBCbHVyRmlsdGVyT3BlcmF0aW9uJiBibHVy
T3BlcmF0aW9uKQoreworICAgIGZsb2F0IHN0ZERldmlhdGlvbiA9IGZsb2F0VmFsdWVGb3JMZW5n
dGgoYmx1ck9wZXJhdGlvbi5zdGREZXZpYXRpb24oKSwgMCk7CisgICAgcmV0dXJuIEZFR2F1c3Np
YW5CbHVyOjpjYWxjdWxhdGVPdXRzZXRzKHsgc3RkRGV2aWF0aW9uLCBzdGREZXZpYXRpb24gfSk7
Cit9CisKIHN0YXRpYyBSZWZQdHI8RmlsdGVyRWZmZWN0PiBjcmVhdGVCbHVyRWZmZWN0KGNvbnN0
IEJsdXJGaWx0ZXJPcGVyYXRpb24mIGJsdXJPcGVyYXRpb24sIEZpbHRlcjo6Q2xpcE9wZXJhdGlv
biBjbGlwT3BlcmF0aW9uKQogewogICAgIGZsb2F0IHN0ZERldmlhdGlvbiA9IGZsb2F0VmFsdWVG
b3JMZW5ndGgoYmx1ck9wZXJhdGlvbi5zdGREZXZpYXRpb24oKSwgMCk7CkBAIC0xMDUsNiArMTEx
LDEyIEBAIHN0YXRpYyBSZWZQdHI8RmlsdGVyRWZmZWN0PiBjcmVhdGVDb250cmFzdEVmZmVjdChj
b25zdCBCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsCiAgICAgcmV0dXJuIEZFQ29tcG9uZW50VHJh
bnNmZXI6OmNyZWF0ZSh0cmFuc2ZlckZ1bmN0aW9uLCB0cmFuc2ZlckZ1bmN0aW9uLCB0cmFuc2Zl
ckZ1bmN0aW9uLCBudWxsRnVuY3Rpb24pOwogfQogCitzdGF0aWMgSW50T3V0c2V0cyBjYWxjdWxh
dGVEcm9wU2hhZG93RWZmZWN0T3V0c2V0cyhjb25zdCBEcm9wU2hhZG93RmlsdGVyT3BlcmF0aW9u
JiBkcm9wU2hhZG93T3BlcmF0aW9uKQoreworICAgIGZsb2F0IHN0ZERldmlhdGlvbiA9IGRyb3BT
aGFkb3dPcGVyYXRpb24uc3RkRGV2aWF0aW9uKCk7CisgICAgcmV0dXJuIEZFRHJvcFNoYWRvdzo6
Y2FsY3VsYXRlT3V0c2V0cyhGbG9hdFNpemUoZHJvcFNoYWRvd09wZXJhdGlvbi54KCksIGRyb3BT
aGFkb3dPcGVyYXRpb24ueSgpKSwgeyBzdGREZXZpYXRpb24sIHN0ZERldmlhdGlvbiB9KTsKK30K
Kwogc3RhdGljIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGNyZWF0ZURyb3BTaGFkb3dFZmZlY3QoY29u
c3QgRHJvcFNoYWRvd0ZpbHRlck9wZXJhdGlvbiYgZHJvcFNoYWRvd09wZXJhdGlvbikKIHsKICAg
ICBmbG9hdCBzdGQgPSBkcm9wU2hhZG93T3BlcmF0aW9uLnN0ZERldmlhdGlvbigpOwpAQCAtMjE5
LDcgKzIzMSw3IEBAIHN0YXRpYyBSZWZQdHI8RmlsdGVyRWZmZWN0PiBjcmVhdGVTZXBpYUVmZmVj
dChjb25zdCBCYXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0CiAgICAgcmV0dXJuIEZFQ29sb3JN
YXRyaXg6OmNyZWF0ZShGRUNPTE9STUFUUklYX1RZUEVfTUFUUklYLCBXVEZNb3ZlKGlucHV0UGFy
YW1ldGVycykpOwogfQogCi1zdGF0aWMgUmVmUHRyPFNWR0ZpbHRlcj4gY3JlYXRlU1ZHRmlsdGVy
KENTU0ZpbHRlciYgZmlsdGVyLCBjb25zdCBSZWZlcmVuY2VGaWx0ZXJPcGVyYXRpb24mIGZpbHRl
ck9wZXJhdGlvbiwgUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIsIGNvbnN0IEZsb2F0UmVjdCYgdGFy
Z2V0Qm91bmRpbmdCb3gpCitzdGF0aWMgU1ZHRmlsdGVyRWxlbWVudCogcmVmZXJlbmNlRmlsdGVy
RWxlbWVudChjb25zdCBSZWZlcmVuY2VGaWx0ZXJPcGVyYXRpb24mIGZpbHRlck9wZXJhdGlvbiwg
UmVuZGVyRWxlbWVudCYgcmVuZGVyZXIpCiB7CiAgICAgYXV0byYgcmVmZXJlbmNlZFNWR1Jlc291
cmNlcyA9IHJlbmRlcmVyLmVuc3VyZVJlZmVyZW5jZWRTVkdSZXNvdXJjZXMoKTsKICAgICBhdXRv
KiBmaWx0ZXJFbGVtZW50ID0gcmVmZXJlbmNlZFNWR1Jlc291cmNlcy5yZWZlcmVuY2VkRmlsdGVy
RWxlbWVudChyZW5kZXJlci5kb2N1bWVudCgpLCBmaWx0ZXJPcGVyYXRpb24pOwpAQCAtMjMyLDE2
ICsyNDQsMzQgQEAgc3RhdGljIFJlZlB0cjxTVkdGaWx0ZXI+IGNyZWF0ZVNWR0ZpbHRlcihDU1NG
aWx0ZXImIGZpbHRlciwgY29uc3QgUmVmZXJlbmNlRmlsdGUKICAgICAgICAgcmV0dXJuIG51bGxw
dHI7CiAgICAgfQogCisgICAgcmV0dXJuIGZpbHRlckVsZW1lbnQ7Cit9CisKK3N0YXRpYyBJbnRP
dXRzZXRzIGNhbGN1bGF0ZVJlZmVyZW5jZUZpbHRlck91dHNldHMoY29uc3QgUmVmZXJlbmNlRmls
dGVyT3BlcmF0aW9uJiBmaWx0ZXJPcGVyYXRpb24sIFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyLCBj
b25zdCBGbG9hdFJlY3QmIHRhcmdldEJvdW5kaW5nQm94KQoreworICAgIGF1dG8gZmlsdGVyRWxl
bWVudCA9IHJlZmVyZW5jZUZpbHRlckVsZW1lbnQoZmlsdGVyT3BlcmF0aW9uLCByZW5kZXJlcik7
CisgICAgaWYgKCFmaWx0ZXJFbGVtZW50KQorICAgICAgICByZXR1cm4geyB9OworCisgICAgU1ZH
RmlsdGVyQnVpbGRlciBidWlsZGVyKHRhcmdldEJvdW5kaW5nQm94LCBmaWx0ZXJFbGVtZW50LT5w
cmltaXRpdmVVbml0cygpKTsKKyAgICByZXR1cm4gYnVpbGRlci5jYWxjdWxhdGVGaWx0ZXJPdXRz
ZXRzKCpmaWx0ZXJFbGVtZW50KTsKK30KKworc3RhdGljIFJlZlB0cjxTVkdGaWx0ZXI+IGNyZWF0
ZVJlZmVyZW5jZUZpbHRlcihDU1NGaWx0ZXImIGZpbHRlciwgY29uc3QgUmVmZXJlbmNlRmlsdGVy
T3BlcmF0aW9uJiBmaWx0ZXJPcGVyYXRpb24sIFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyLCBjb25z
dCBGbG9hdFJlY3QmIHRhcmdldEJvdW5kaW5nQm94KQoreworICAgIGF1dG8gZmlsdGVyRWxlbWVu
dCA9IHJlZmVyZW5jZUZpbHRlckVsZW1lbnQoZmlsdGVyT3BlcmF0aW9uLCByZW5kZXJlcik7Cisg
ICAgaWYgKCFmaWx0ZXJFbGVtZW50KQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKwogICAgIGF1
dG8gZmlsdGVyUmVnaW9uID0gU1ZHTGVuZ3RoQ29udGV4dDo6cmVzb2x2ZVJlY3RhbmdsZTxTVkdG
aWx0ZXJFbGVtZW50PihmaWx0ZXJFbGVtZW50LCBmaWx0ZXJFbGVtZW50LT5maWx0ZXJVbml0cygp
LCB0YXJnZXRCb3VuZGluZ0JveCk7CiAKLSAgICBTVkdGaWx0ZXJCdWlsZGVyIGJ1aWxkZXI7Cisg
ICAgU1ZHRmlsdGVyQnVpbGRlciBidWlsZGVyKHRhcmdldEJvdW5kaW5nQm94LCBmaWx0ZXJFbGVt
ZW50LT5wcmltaXRpdmVVbml0cygpKTsKICAgICByZXR1cm4gU1ZHRmlsdGVyOjpjcmVhdGUoKmZp
bHRlckVsZW1lbnQsIGJ1aWxkZXIsIGZpbHRlci5yZW5kZXJpbmdNb2RlKCksIGZpbHRlci5maWx0
ZXJTY2FsZSgpLCBmaWx0ZXIuY2xpcE9wZXJhdGlvbigpLCBmaWx0ZXJSZWdpb24sIHRhcmdldEJv
dW5kaW5nQm94KTsKIH0KIAogYm9vbCBDU1NGaWx0ZXI6OmJ1aWxkRmlsdGVyRnVuY3Rpb25zKFJl
bmRlckVsZW1lbnQmIHJlbmRlcmVyLCBjb25zdCBGaWx0ZXJPcGVyYXRpb25zJiBvcGVyYXRpb25z
LCBjb25zdCBGbG9hdFJlY3QmIHRhcmdldEJvdW5kaW5nQm94KQogewotICAgIFJlZlB0cjxGaWx0
ZXJFZmZlY3Q+IGVmZmVjdDsKLSAgICBSZWZQdHI8U1ZHRmlsdGVyPiBmaWx0ZXI7CisgICAgUmVm
UHRyPEZpbHRlckZ1bmN0aW9uPiBmdW5jdGlvbjsKIAogICAgIGZvciAoYXV0byYgb3BlcmF0aW9u
IDogb3BlcmF0aW9ucy5vcGVyYXRpb25zKCkpIHsKICAgICAgICAgc3dpdGNoIChvcGVyYXRpb24t
PnR5cGUoKSkgewpAQCAtMjUwLDYzICsyODAsNjAgQEAgYm9vbCBDU1NGaWx0ZXI6OmJ1aWxkRmls
dGVyRnVuY3Rpb25zKFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyLCBjb25zdCBGaWx0ZXJPcGVyYXQK
ICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpCTFVS
OgotICAgICAgICAgICAgZWZmZWN0ID0gY3JlYXRlQmx1ckVmZmVjdChkb3duY2FzdDxCbHVyRmls
dGVyT3BlcmF0aW9uPigqb3BlcmF0aW9uKSwgY2xpcE9wZXJhdGlvbigpKTsKKyAgICAgICAgICAg
IGZ1bmN0aW9uID0gY3JlYXRlQmx1ckVmZmVjdChkb3duY2FzdDxCbHVyRmlsdGVyT3BlcmF0aW9u
Pigqb3BlcmF0aW9uKSwgY2xpcE9wZXJhdGlvbigpKTsKICAgICAgICAgICAgIGJyZWFrOwogCiAg
ICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpCUklHSFRORVNTOgotICAgICAgICAgICAgZWZm
ZWN0ID0gY3JlYXRlQnJpZ2h0bmVzc0VmZmVjdChkb3duY2FzdDxCYXNpY0NvbXBvbmVudFRyYW5z
ZmVyRmlsdGVyT3BlcmF0aW9uPigqb3BlcmF0aW9uKSk7CisgICAgICAgICAgICBmdW5jdGlvbiA9
IGNyZWF0ZUJyaWdodG5lc3NFZmZlY3QoZG93bmNhc3Q8QmFzaWNDb21wb25lbnRUcmFuc2ZlckZp
bHRlck9wZXJhdGlvbj4oKm9wZXJhdGlvbikpOwogICAgICAgICAgICAgYnJlYWs7CiAKICAgICAg
ICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkNPTlRSQVNUOgotICAgICAgICAgICAgZWZmZWN0ID0g
Y3JlYXRlQ29udHJhc3RFZmZlY3QoZG93bmNhc3Q8QmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRl
ck9wZXJhdGlvbj4oKm9wZXJhdGlvbikpOworICAgICAgICAgICAgZnVuY3Rpb24gPSBjcmVhdGVD
b250cmFzdEVmZmVjdChkb3duY2FzdDxCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0
aW9uPigqb3BlcmF0aW9uKSk7CiAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICBjYXNlIEZp
bHRlck9wZXJhdGlvbjo6RFJPUF9TSEFET1c6Ci0gICAgICAgICAgICBlZmZlY3QgPSBjcmVhdGVE
cm9wU2hhZG93RWZmZWN0KGRvd25jYXN0PERyb3BTaGFkb3dGaWx0ZXJPcGVyYXRpb24+KCpvcGVy
YXRpb24pKTsKKyAgICAgICAgICAgIGZ1bmN0aW9uID0gY3JlYXRlRHJvcFNoYWRvd0VmZmVjdChk
b3duY2FzdDxEcm9wU2hhZG93RmlsdGVyT3BlcmF0aW9uPigqb3BlcmF0aW9uKSk7CiAgICAgICAg
ICAgICBicmVhazsKIAogICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6R1JBWVNDQUxFOgot
ICAgICAgICAgICAgZWZmZWN0ID0gY3JlYXRlR3JheVNjYWxlRWZmZWN0KGRvd25jYXN0PEJhc2lj
Q29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24+KCpvcGVyYXRpb24pKTsKKyAgICAgICAgICAgIGZ1
bmN0aW9uID0gY3JlYXRlR3JheVNjYWxlRWZmZWN0KGRvd25jYXN0PEJhc2ljQ29sb3JNYXRyaXhG
aWx0ZXJPcGVyYXRpb24+KCpvcGVyYXRpb24pKTsKICAgICAgICAgICAgIGJyZWFrOwogCiAgICAg
ICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpIVUVfUk9UQVRFOgotICAgICAgICAgICAgZWZmZWN0
ID0gY3JlYXRlSHVlUm90YXRlRWZmZWN0KGRvd25jYXN0PEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJP
cGVyYXRpb24+KCpvcGVyYXRpb24pKTsKKyAgICAgICAgICAgIGZ1bmN0aW9uID0gY3JlYXRlSHVl
Um90YXRlRWZmZWN0KGRvd25jYXN0PEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24+KCpv
cGVyYXRpb24pKTsKICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIGNhc2UgRmlsdGVyT3Bl
cmF0aW9uOjpJTlZFUlQ6Ci0gICAgICAgICAgICBlZmZlY3QgPSBjcmVhdGVJbnZlcnRFZmZlY3Qo
ZG93bmNhc3Q8QmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlvbj4oKm9wZXJhdGlv
bikpOworICAgICAgICAgICAgZnVuY3Rpb24gPSBjcmVhdGVJbnZlcnRFZmZlY3QoZG93bmNhc3Q8
QmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlvbj4oKm9wZXJhdGlvbikpOwogICAg
ICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246Ok9QQUNJVFk6
Ci0gICAgICAgICAgICBlZmZlY3QgPSBjcmVhdGVPcGFjaXR5RWZmZWN0KGRvd25jYXN0PEJhc2lj
Q29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24+KCpvcGVyYXRpb24pKTsKKyAgICAgICAg
ICAgIGZ1bmN0aW9uID0gY3JlYXRlT3BhY2l0eUVmZmVjdChkb3duY2FzdDxCYXNpY0NvbXBvbmVu
dFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uPigqb3BlcmF0aW9uKSk7CiAgICAgICAgICAgICBicmVh
azsKIAogICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6U0FUVVJBVEU6Ci0gICAgICAgICAg
ICBlZmZlY3QgPSBjcmVhdGVTYXR1cmF0ZUVmZmVjdChkb3duY2FzdDxCYXNpY0NvbG9yTWF0cml4
RmlsdGVyT3BlcmF0aW9uPigqb3BlcmF0aW9uKSk7CisgICAgICAgICAgICBmdW5jdGlvbiA9IGNy
ZWF0ZVNhdHVyYXRlRWZmZWN0KGRvd25jYXN0PEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRp
b24+KCpvcGVyYXRpb24pKTsKICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIGNhc2UgRmls
dGVyT3BlcmF0aW9uOjpTRVBJQToKLSAgICAgICAgICAgIGVmZmVjdCA9IGNyZWF0ZVNlcGlhRWZm
ZWN0KGRvd25jYXN0PEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24+KCpvcGVyYXRpb24p
KTsKKyAgICAgICAgICAgIGZ1bmN0aW9uID0gY3JlYXRlU2VwaWFFZmZlY3QoZG93bmNhc3Q8QmFz
aWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbj4oKm9wZXJhdGlvbikpOwogICAgICAgICAgICAg
YnJlYWs7CiAKICAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OlJFRkVSRU5DRToKLSAgICAg
ICAgICAgIGZpbHRlciA9IGNyZWF0ZVNWR0ZpbHRlcigqdGhpcywgZG93bmNhc3Q8UmVmZXJlbmNl
RmlsdGVyT3BlcmF0aW9uPigqb3BlcmF0aW9uKSwgcmVuZGVyZXIsIHRhcmdldEJvdW5kaW5nQm94
KTsKKyAgICAgICAgICAgIGZ1bmN0aW9uID0gY3JlYXRlUmVmZXJlbmNlRmlsdGVyKCp0aGlzLCBk
b3duY2FzdDxSZWZlcmVuY2VGaWx0ZXJPcGVyYXRpb24+KCpvcGVyYXRpb24pLCByZW5kZXJlciwg
dGFyZ2V0Qm91bmRpbmdCb3gpOwogICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgZGVmYXVs
dDoKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKCFmaWx0ZXIg
JiYgIWVmZmVjdCkKKyAgICAgICAgaWYgKCFmdW5jdGlvbikKICAgICAgICAgICAgIGNvbnRpbnVl
OwogCiAgICAgICAgIGlmIChtX2Z1bmN0aW9ucy5pc0VtcHR5KCkpCiAgICAgICAgICAgICBtX2Z1
bmN0aW9ucy5hcHBlbmQoU291cmNlR3JhcGhpYzo6Y3JlYXRlKCkpOwogCi0gICAgICAgIGlmIChm
aWx0ZXIpCi0gICAgICAgICAgICBtX2Z1bmN0aW9ucy5hcHBlbmQoZmlsdGVyLnJlbGVhc2VOb25O
dWxsKCkpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBtX2Z1bmN0aW9ucy5hcHBlbmQoZWZm
ZWN0LnJlbGVhc2VOb25OdWxsKCkpOworICAgICAgICBtX2Z1bmN0aW9ucy5hcHBlbmQoZnVuY3Rp
b24ucmVsZWFzZU5vbk51bGwoKSk7CiAgICAgfQogCiAgICAgLy8gSWYgd2UgZGlkbid0IG1ha2Ug
YW55IGVmZmVjdHMsIHRlbGwgb3VyIGNhbGxlciB3ZSBhcmUgbm90IHZhbGlkLgpAQCAtMzcxLDE3
ICszOTgsMzAgQEAgdm9pZCBDU1NGaWx0ZXI6OnNldEZpbHRlclJlZ2lvbihjb25zdCBGbG9hdFJl
Y3QmIGZpbHRlclJlZ2lvbikKICAgICBjbGFtcEZpbHRlclJlZ2lvbklmTmVlZGVkKCk7CiB9CiAK
LUludE91dHNldHMgQ1NTRmlsdGVyOjpvdXRzZXRzKCkgY29uc3QKK0ludE91dHNldHMgQ1NTRmls
dGVyOjpjYWxjdWxhdGVPdXRzZXRzKFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyLCBjb25zdCBGaWx0
ZXJPcGVyYXRpb25zJiBvcGVyYXRpb25zLCBjb25zdCBGbG9hdFJlY3QmIHRhcmdldEJvdW5kaW5n
Qm94KQogewotICAgIGlmICghbV9oYXNGaWx0ZXJUaGF0TW92ZXNQaXhlbHMpCi0gICAgICAgIHJl
dHVybiB7IH07CisgICAgSW50T3V0c2V0cyBvdXRzZXRzOworCisgICAgZm9yIChhdXRvJiBvcGVy
YXRpb24gOiBvcGVyYXRpb25zLm9wZXJhdGlvbnMoKSkgeworICAgICAgICBzd2l0Y2ggKG9wZXJh
dGlvbi0+dHlwZSgpKSB7CisgICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpCTFVSOgorICAg
ICAgICAgICAgb3V0c2V0cyArPSBjYWxjdWxhdGVCbHVyRWZmZWN0T3V0c2V0cyhkb3duY2FzdDxC
bHVyRmlsdGVyT3BlcmF0aW9uPigqb3BlcmF0aW9uKSk7CisgICAgICAgICAgICBicmVhazsKKwor
ICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6RFJPUF9TSEFET1c6CisgICAgICAgICAgICBv
dXRzZXRzICs9IGNhbGN1bGF0ZURyb3BTaGFkb3dFZmZlY3RPdXRzZXRzKGRvd25jYXN0PERyb3BT
aGFkb3dGaWx0ZXJPcGVyYXRpb24+KCpvcGVyYXRpb24pKTsKKyAgICAgICAgICAgIGJyZWFrOwor
CisgICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpSRUZFUkVOQ0U6CisgICAgICAgICAgICBv
dXRzZXRzICs9IGNhbGN1bGF0ZVJlZmVyZW5jZUZpbHRlck91dHNldHMoZG93bmNhc3Q8UmVmZXJl
bmNlRmlsdGVyT3BlcmF0aW9uPigqb3BlcmF0aW9uKSwgcmVuZGVyZXIsIHRhcmdldEJvdW5kaW5n
Qm94KTsKKyAgICAgICAgICAgIGJyZWFrOwogCi0gICAgaWYgKCFtX291dHNldHMuaXNaZXJvKCkp
Ci0gICAgICAgIHJldHVybiBtX291dHNldHM7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgfQorICAgIH0KIAotICAgIGZvciAoYXV0byYgZnVuY3Rpb24gOiBt
X2Z1bmN0aW9ucykKLSAgICAgICAgbV9vdXRzZXRzICs9IGZ1bmN0aW9uLT5vdXRzZXRzKCp0aGlz
KTsKLSAgICByZXR1cm4gbV9vdXRzZXRzOworICAgIHJldHVybiBvdXRzZXRzOwogfQogCiBUZXh0
U3RyZWFtJiBDU1NGaWx0ZXI6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMs
IEZpbHRlclJlcHJlc2VudGF0aW9uIHJlcHJlc2VudGF0aW9uKSBjb25zdApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0NTU0ZpbHRlci5oIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL0NTU0ZpbHRlci5oCmluZGV4IDRkYmFjNTNhZDAwODU4OGQzNTVjMjM5MDA2MDRhYzBl
Y2Y4YTY1ZWEuLjI5YzFkMWNkMzYxYzlkMjViYWNjMTcwNGRiNGU0ODk0NTQxNzJjZGEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9DU1NGaWx0ZXIuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvQ1NTRmlsdGVyLmgKQEAgLTQ5LDEwICs0OSwxMCBAQCBwdWJsaWM6
CiAKICAgICBGaWx0ZXJFZmZlY3RWZWN0b3IgZWZmZWN0c09mVHlwZShGaWx0ZXJGdW5jdGlvbjo6
VHlwZSkgY29uc3QgZmluYWw7CiAKLSAgICBJbnRPdXRzZXRzIG91dHNldHMoKSBjb25zdCBmaW5h
bDsKLQogICAgIFJlZlB0cjxGaWx0ZXJJbWFnZT4gYXBwbHkoRmlsdGVySW1hZ2UqIHNvdXJjZUlt
YWdlLCBGaWx0ZXJSZXN1bHRzJikgZmluYWw7CiAKKyAgICBzdGF0aWMgSW50T3V0c2V0cyBjYWxj
dWxhdGVPdXRzZXRzKFJlbmRlckVsZW1lbnQmLCBjb25zdCBGaWx0ZXJPcGVyYXRpb25zJiwgY29u
c3QgRmxvYXRSZWN0JiB0YXJnZXRCb3VuZGluZ0JveCk7CisKIHByaXZhdGU6CiAgICAgQ1NTRmls
dGVyKFJlbmRlcmluZ01vZGUsIGNvbnN0IEZsb2F0U2l6ZSYgZmlsdGVyU2NhbGUsIENsaXBPcGVy
YXRpb24sIGJvb2wgaGFzRmlsdGVyVGhhdE1vdmVzUGl4ZWxzLCBib29sIGhhc0ZpbHRlclRoYXRT
aG91bGRCZVJlc3RyaWN0ZWRCeVNlY3VyaXR5T3JpZ2luKTsKICAgICBDU1NGaWx0ZXIoVmVjdG9y
PFJlZjxGaWx0ZXJGdW5jdGlvbj4+JiYpOwpAQCAtNjcsOCArNjcsNiBAQCBwcml2YXRlOgogICAg
IGJvb2wgbV9oYXNGaWx0ZXJUaGF0U2hvdWxkQmVSZXN0cmljdGVkQnlTZWN1cml0eU9yaWdpbiB7
IGZhbHNlIH07CiAKICAgICBWZWN0b3I8UmVmPEZpbHRlckZ1bmN0aW9uPj4gbV9mdW5jdGlvbnM7
Ci0KLSAgICBtdXRhYmxlIEludE91dHNldHMgbV9vdXRzZXRzOwogfTsKIAogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxh
eWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAKaW5kZXgg
NDFjZTdlODE5ZjZiZDBlYmY2NWIyZWM0NDEyNjkxMjAzN2YwODQyNi4uYzgyNmM5NTQ4YmRmMWY2
ODY5MWE1NTUxYWE1ZjVhOWYxNDZmZTNjNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckxheWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyTGF5ZXIuY3BwCkBAIC0zMjk3LDcgKzMyOTcsNyBAQCBSZW5kZXJMYXllckZpbHRlcnMqIFJl
bmRlckxheWVyOjpmaWx0ZXJzRm9yUGFpbnRpbmcoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBP
cAogICAgIGlmICghcGFpbnRzV2l0aEZpbHRlcnMoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7
CiAKLSAgICBpZiAobV9maWx0ZXJzICYmIG1fZmlsdGVycy0+ZmlsdGVyKCkpCisgICAgaWYgKG1f
ZmlsdGVycykKICAgICAgICAgcmV0dXJuIG1fZmlsdGVycy5nZXQoKTsKIAogICAgIHJldHVybiBu
dWxscHRyOwpAQCAtNTcwMiw3ICs1NzAyLDcgQEAgdm9pZCBSZW5kZXJMYXllcjo6dXBkYXRlRmls
dGVyUGFpbnRpbmdTdHJhdGVneSgpCiAgICAgICAgIC8vIERvbid0IGRlbGV0ZSB0aGUgd2hvbGUg
ZmlsdGVyIGluZm8gaGVyZSwgYmVjYXVzZSB3ZSBtaWdodCB1c2UgaXQKICAgICAgICAgLy8gZm9y
IGxvYWRpbmcgU1ZHIHJlZmVyZW5jZSBmaWx0ZXIgZmlsZXMuCiAgICAgICAgIGlmIChtX2ZpbHRl
cnMpCi0gICAgICAgICAgICBtX2ZpbHRlcnMtPnNldEZpbHRlcihudWxscHRyKTsKKyAgICAgICAg
ICAgIG1fZmlsdGVycy0+Y2xlYXJGaWx0ZXIoKTsKIAogICAgICAgICAvLyBFYXJseS1yZXR1cm4g
b25seSBpZiB3ZSAqZG9uJ3QqIGhhdmUgcmVmZXJlbmNlIGZpbHRlcnMuCiAgICAgICAgIC8vIEZv
ciByZWZlcmVuY2UgZmlsdGVycywgd2Ugc3RpbGwgd2FudCB0aGUgRmlsdGVyRWZmZWN0IGdyYXBo
IGJ1aWx0CkBAIC01NzEyLDEzICs1NzEyLDE0IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZUZp
bHRlclBhaW50aW5nU3RyYXRlZ3koKQogICAgIH0KICAgICAKICAgICBlbnN1cmVMYXllckZpbHRl
cnMoKTsKLSAgICBtX2ZpbHRlcnMtPmJ1aWxkRmlsdGVyKHJlbmRlcmVyKCksIHBhZ2UoKS5kZXZp
Y2VTY2FsZUZhY3RvcigpLCByZW5kZXJlcigpLnBhZ2UoKS5hY2NlbGVyYXRlZEZpbHRlcnNFbmFi
bGVkKCkgPyBSZW5kZXJpbmdNb2RlOjpBY2NlbGVyYXRlZCA6IFJlbmRlcmluZ01vZGU6OlVuYWNj
ZWxlcmF0ZWQpOworICAgIG1fZmlsdGVycy0+c2V0UmVuZGVyaW5nTW9kZShyZW5kZXJlcigpLnBh
Z2UoKS5hY2NlbGVyYXRlZEZpbHRlcnNFbmFibGVkKCkgPyBSZW5kZXJpbmdNb2RlOjpBY2NlbGVy
YXRlZCA6IFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQpOworICAgIG1fZmlsdGVycy0+c2V0
RmlsdGVyU2NhbGUoeyBwYWdlKCkuZGV2aWNlU2NhbGVGYWN0b3IoKSwgcGFnZSgpLmRldmljZVNj
YWxlRmFjdG9yKCkgfSk7CiB9CiAKIEludE91dHNldHMgUmVuZGVyTGF5ZXI6OmZpbHRlck91dHNl
dHMoKSBjb25zdAogewogICAgIGlmIChtX2ZpbHRlcnMpCi0gICAgICAgIHJldHVybiBtX2ZpbHRl
cnMtPmZpbHRlcigpID8gbV9maWx0ZXJzLT5maWx0ZXIoKS0+b3V0c2V0cygpIDogSW50T3V0c2V0
cygpOworICAgICAgICByZXR1cm4gbV9maWx0ZXJzLT5jYWxjdWxhdGVPdXRzZXRzKHJlbmRlcmVy
KCksIGxvY2FsQm91bmRpbmdCb3goKSk7CiAgICAgcmV0dXJuIHJlbmRlcmVyKCkuc3R5bGUoKS5m
aWx0ZXJPdXRzZXRzKCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJMYXllckZpbHRlcnMuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckxheWVyRmlsdGVycy5jcHAKaW5kZXggMTJmZTM5MTI2MDAzMmRiZTMwMmVjMWFjMGI0MjZmODZl
MGEwZjE1Zi4uMjUzZmZkYTZiNDIyOWNiNjE4Yjc2NWFhMzM5YWYyNWI1NGY3OTQwMyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyRmlsdGVycy5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyRmlsdGVycy5jcHAKQEAgLTUw
LDExICs1MCw2IEBAIFJlbmRlckxheWVyRmlsdGVyczo6flJlbmRlckxheWVyRmlsdGVycygpCiAg
ICAgcmVtb3ZlUmVmZXJlbmNlRmlsdGVyQ2xpZW50cygpOwogfQogCi12b2lkIFJlbmRlckxheWVy
RmlsdGVyczo6c2V0RmlsdGVyKFJlZlB0cjxDU1NGaWx0ZXI+JiYgZmlsdGVyKQotewotICAgIG1f
ZmlsdGVyID0gV1RGTW92ZShmaWx0ZXIpOwotfQotCiBib29sIFJlbmRlckxheWVyRmlsdGVyczo6
aGFzRmlsdGVyVGhhdE1vdmVzUGl4ZWxzKCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9maWx0ZXIg
JiYgbV9maWx0ZXItPmhhc0ZpbHRlclRoYXRNb3Zlc1BpeGVscygpOwpAQCAtMTE2LDEyICsxMTEs
MTQgQEAgdm9pZCBSZW5kZXJMYXllckZpbHRlcnM6OnJlbW92ZVJlZmVyZW5jZUZpbHRlckNsaWVu
dHMoKQogICAgIG1faW50ZXJuYWxTVkdSZWZlcmVuY2VzLmNsZWFyKCk7CiB9CiAKLXZvaWQgUmVu
ZGVyTGF5ZXJGaWx0ZXJzOjpidWlsZEZpbHRlcihSZW5kZXJFbGVtZW50JiByZW5kZXJlciwgZmxv
YXQgc2NhbGVGYWN0b3IsIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSkKK0ludE91dHNldHMg
UmVuZGVyTGF5ZXJGaWx0ZXJzOjpjYWxjdWxhdGVPdXRzZXRzKFJlbmRlckVsZW1lbnQmIHJlbmRl
cmVyLCBjb25zdCBGbG9hdFJlY3QmIHRhcmdldEJvdW5kaW5nQm94KQogewotICAgIC8vIElmIHRo
ZSBmaWx0ZXIgZmFpbHMgdG8gYnVpbGQsIHJlbW92ZSBpdCBmcm9tIHRoZSBsYXllci4gSXQgd2ls
bCBzdGlsbCBhdHRlbXB0IHRvCi0gICAgLy8gZ28gdGhyb3VnaCByZWd1bGFyIHByb2Nlc3Npbmcg
KGUuZy4gY29tcG9zaXRpbmcpLCBidXQgbmV2ZXIgYXBwbHkgYW55dGhpbmcuCi0gICAgLy8gRklY
TUU6IFRoaXMgcmVidWlsZHMgdGhlIGVudGlyZSBlZmZlY3RzIGNoYWluIGV2ZW4gaWYgdGhlIGZp
bHRlciBzdHlsZSBkaWRuJ3QgY2hhbmdlLgotICAgIG1fZmlsdGVyID0gQ1NTRmlsdGVyOjpjcmVh
dGUocmVuZGVyZXIsIHJlbmRlcmVyLnN0eWxlKCkuZmlsdGVyKCksIHJlbmRlcmluZ01vZGUsIEZs
b2F0U2l6ZSB7IHNjYWxlRmFjdG9yLCBzY2FsZUZhY3RvciB9LCBGaWx0ZXI6OkNsaXBPcGVyYXRp
b246OlVuaXRlLCBtX3RhcmdldEJvdW5kaW5nQm94KTsKKyAgICBjb25zdCBhdXRvJiBvcGVyYXRp
b25zID0gcmVuZGVyZXIuc3R5bGUoKS5maWx0ZXIoKTsKKyAgICAKKyAgICBpZiAoIW9wZXJhdGlv
bnMuaGFzRmlsdGVyVGhhdE1vdmVzUGl4ZWxzKCkpCisgICAgICAgIHJldHVybiB7IH07CisKKyAg
ICByZXR1cm4gQ1NTRmlsdGVyOjpjYWxjdWxhdGVPdXRzZXRzKHJlbmRlcmVyLCBvcGVyYXRpb25z
LCB0YXJnZXRCb3VuZGluZ0JveCk7CiB9CiAKIEdyYXBoaWNzQ29udGV4dCogUmVuZGVyTGF5ZXJG
aWx0ZXJzOjppbnB1dENvbnRleHQoKQpAQCAtMTQwLDM1ICsxMzcsMzUgQEAgdm9pZCBSZW5kZXJM
YXllckZpbHRlcnM6OmFsbG9jYXRlQmFja2luZ1N0b3JlSWZOZWVkZWQoR3JhcGhpY3NDb250ZXh0
JiBjb250ZXh0KQogCiBHcmFwaGljc0NvbnRleHQqIFJlbmRlckxheWVyRmlsdGVyczo6YmVnaW5G
aWx0ZXJFZmZlY3QoUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIsIEdyYXBoaWNzQ29udGV4dCYgY29u
dGV4dCwgY29uc3QgTGF5b3V0UmVjdCYgZmlsdGVyQm94UmVjdCwgY29uc3QgTGF5b3V0UmVjdCYg
ZGlydHlSZWN0LCBjb25zdCBMYXlvdXRSZWN0JiBsYXllclJlcGFpbnRSZWN0KQogewotICAgIGlm
ICghbV9maWx0ZXIpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCiAgICAgYXV0byBleHBhbmRl
ZERpcnR5UmVjdCA9IGRpcnR5UmVjdDsKLSAgICBpZiAobV9maWx0ZXItPmhhc0ZpbHRlclRoYXRN
b3Zlc1BpeGVscygpKSB7Ci0gICAgICAgIGF1dG8gb3V0c2V0cyA9IG1fZmlsdGVyLT5vdXRzZXRz
KCk7CisgICAgYXV0byB0YXJnZXRCb3VuZGluZ0JveCA9IGludGVyc2VjdGlvbihmaWx0ZXJCb3hS
ZWN0LCBkaXJ0eVJlY3QpOworCisgICAgYXV0byBvdXRzZXRzID0gY2FsY3VsYXRlT3V0c2V0cyhy
ZW5kZXJlciwgdGFyZ2V0Qm91bmRpbmdCb3gpOworICAgIGlmICghb3V0c2V0cy5pc1plcm8oKSkg
ewogICAgICAgICBMYXlvdXRCb3hFeHRlbnQgZmxpcHBlZE91dHNldHMgeyBvdXRzZXRzLmJvdHRv
bSgpLCBvdXRzZXRzLmxlZnQoKSwgb3V0c2V0cy50b3AoKSwgb3V0c2V0cy5yaWdodCgpIH07CiAg
ICAgICAgIGV4cGFuZGVkRGlydHlSZWN0LmV4cGFuZChmbGlwcGVkT3V0c2V0cyk7CiAgICAgfQor
CiAgICAgLy8gQ2FsY3VsYXRlIHRhcmdldEJvdW5kaW5nQm94IHNpbmNlIGl0IHdpbGwgYmUgdXNl
ZCBpZiB0aGUgZmlsdGVyIGlzIGNyZWF0ZWQuCi0gICAgYXV0byB0YXJnZXRCb3VuZGluZ0JveCA9
IGludGVyc2VjdGlvbihmaWx0ZXJCb3hSZWN0LCBleHBhbmRlZERpcnR5UmVjdCk7CisgICAgdGFy
Z2V0Qm91bmRpbmdCb3ggPSBpbnRlcnNlY3Rpb24oZmlsdGVyQm94UmVjdCwgZXhwYW5kZWREaXJ0
eVJlY3QpOwogICAgIGlmICh0YXJnZXRCb3VuZGluZ0JveC5pc0VtcHR5KCkpCiAgICAgICAgIHJl
dHVybiBudWxscHRyOwogCi0gICAgaWYgKG1fdGFyZ2V0Qm91bmRpbmdCb3ggIT0gdGFyZ2V0Qm91
bmRpbmdCb3gpIHsKKyAgICBpZiAoIW1fZmlsdGVyIHx8IG1fdGFyZ2V0Qm91bmRpbmdCb3ggIT0g
dGFyZ2V0Qm91bmRpbmdCb3gpIHsKICAgICAgICAgbV90YXJnZXRCb3VuZGluZ0JveCA9IHRhcmdl
dEJvdW5kaW5nQm94OwogICAgICAgICAvLyBGSVhNRTogVGhpcyByZWJ1aWxkcyB0aGUgZW50aXJl
IGVmZmVjdHMgY2hhaW4gZXZlbiBpZiB0aGUgZmlsdGVyIHN0eWxlIGRpZG4ndCBjaGFuZ2UuCi0g
ICAgICAgIG1fZmlsdGVyID0gQ1NTRmlsdGVyOjpjcmVhdGUocmVuZGVyZXIsIHJlbmRlcmVyLnN0
eWxlKCkuZmlsdGVyKCksIG1fZmlsdGVyLT5yZW5kZXJpbmdNb2RlKCksIG1fZmlsdGVyLT5maWx0
ZXJTY2FsZSgpLCBGaWx0ZXI6OkNsaXBPcGVyYXRpb246OlVuaXRlLCBtX3RhcmdldEJvdW5kaW5n
Qm94KTsKKyAgICAgICAgbV9maWx0ZXIgPSBDU1NGaWx0ZXI6OmNyZWF0ZShyZW5kZXJlciwgcmVu
ZGVyZXIuc3R5bGUoKS5maWx0ZXIoKSwgbV9yZW5kZXJpbmdNb2RlLCBtX2ZpbHRlclNjYWxlLCBG
aWx0ZXI6OkNsaXBPcGVyYXRpb246OlVuaXRlLCBtX3RhcmdldEJvdW5kaW5nQm94KTsKICAgICB9
CiAKICAgICBpZiAoIW1fZmlsdGVyKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgIGF1
dG8mIGZpbHRlciA9ICptX2ZpbHRlcjsKLSAgICAKKwogICAgIC8vIEZvciBDU1NGaWx0ZXIsIGZp
bHRlclJlZ2lvbiA9IHRhcmdldEJvdW5kaW5nQm94ICsgZmlsdGVyLT5vdXRzZXRzKCkKICAgICBh
dXRvIGZpbHRlclJlZ2lvbiA9IHRhcmdldEJvdW5kaW5nQm94OwogICAgIGlmIChmaWx0ZXIuaGFz
RmlsdGVyVGhhdE1vdmVzUGl4ZWxzKCkpCi0gICAgICAgIGZpbHRlclJlZ2lvbi5leHBhbmQodG9M
YXlvdXRCb3hFeHRlbnQoZmlsdGVyLm91dHNldHMoKSkpOworICAgICAgICBmaWx0ZXJSZWdpb24u
ZXhwYW5kKHRvTGF5b3V0Qm94RXh0ZW50KG91dHNldHMpKTsKIAogICAgIGlmIChmaWx0ZXJSZWdp
b24uaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckZpbHRlcnMuaCBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJMYXllckZpbHRlcnMuaAppbmRleCAwNTEzYzg4NWI0MGI3NWUwMTMy
ZjNlYWRmZWY2MGM3ODY3ODliOWQ4Li4wODVkY2IxN2E1MDVmNTBkYmQwZDU3YmE2ZDMyMjc1MGJh
NDMyNThiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJG
aWx0ZXJzLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyRmlsdGVy
cy5oCkBAIC01MCw3ICs1MCw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGV4cGFuZERpcnR5U291cmNl
UmVjdChjb25zdCBMYXlvdXRSZWN0JiByZWN0KSB7IG1fZGlydHlTb3VyY2VSZWN0LnVuaXRlKHJl
Y3QpOyB9CiAKICAgICBDU1NGaWx0ZXIqIGZpbHRlcigpIGNvbnN0IHsgcmV0dXJuIG1fZmlsdGVy
LmdldCgpOyB9Ci0gICAgdm9pZCBzZXRGaWx0ZXIoUmVmUHRyPENTU0ZpbHRlcj4mJik7CisgICAg
dm9pZCBjbGVhckZpbHRlcigpIHsgbV9maWx0ZXIgPSBudWxscHRyOyB9CiAgICAgCiAgICAgYm9v
bCBoYXNGaWx0ZXJUaGF0TW92ZXNQaXhlbHMoKSBjb25zdDsKICAgICBib29sIGhhc0ZpbHRlclRo
YXRTaG91bGRCZVJlc3RyaWN0ZWRCeVNlY3VyaXR5T3JpZ2luKCkgY29uc3Q7CkBAIC01OCw3ICs1
OCwxMCBAQCBwdWJsaWM6CiAgICAgdm9pZCB1cGRhdGVSZWZlcmVuY2VGaWx0ZXJDbGllbnRzKGNv
bnN0IEZpbHRlck9wZXJhdGlvbnMmKTsKICAgICB2b2lkIHJlbW92ZVJlZmVyZW5jZUZpbHRlckNs
aWVudHMoKTsKIAotICAgIHZvaWQgYnVpbGRGaWx0ZXIoUmVuZGVyRWxlbWVudCYsIGZsb2F0IHNj
YWxlRmFjdG9yLCBSZW5kZXJpbmdNb2RlKTsKKyAgICB2b2lkIHNldFJlbmRlcmluZ01vZGUoUmVu
ZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlKSB7IG1fcmVuZGVyaW5nTW9kZSA9IHJlbmRlcmluZ01v
ZGU7IH0KKyAgICB2b2lkIHNldEZpbHRlclNjYWxlKGNvbnN0IEZsb2F0U2l6ZSYgZmlsdGVyU2Nh
bGUpIHsgbV9maWx0ZXJTY2FsZSA9IGZpbHRlclNjYWxlOyB9CisKKyAgICBzdGF0aWMgSW50T3V0
c2V0cyBjYWxjdWxhdGVPdXRzZXRzKFJlbmRlckVsZW1lbnQmLCBjb25zdCBGbG9hdFJlY3QmIHRh
cmdldEJvdW5kaW5nQm94KTsKIAogICAgIC8vIFBlciByZW5kZXIKICAgICBMYXlvdXRSZWN0IHJl
cGFpbnRSZWN0KCkgY29uc3QgeyByZXR1cm4gbV9yZXBhaW50UmVjdDsgfQpAQCAtNzMsNiArNzYs
OCBAQCBwcml2YXRlOgogICAgIHZvaWQgYWxsb2NhdGVCYWNraW5nU3RvcmVJZk5lZWRlZChHcmFw
aGljc0NvbnRleHQmKTsKIAogICAgIFJlbmRlckxheWVyJiBtX2xheWVyOworICAgIFJlbmRlcmlu
Z01vZGUgbV9yZW5kZXJpbmdNb2RlIHsgUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCB9Owor
ICAgIEZsb2F0U2l6ZSBtX2ZpbHRlclNjYWxlIHsgMSwgMSB9OwogCiAgICAgVmVjdG9yPFJlZlB0
cjxFbGVtZW50Pj4gbV9pbnRlcm5hbFNWR1JlZmVyZW5jZXM7CiAgICAgVmVjdG9yPENhY2hlZFJl
c291cmNlSGFuZGxlPENhY2hlZFNWR0RvY3VtZW50Pj4gbV9leHRlcm5hbFNWR1JlZmVyZW5jZXM7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291
cmNlRmlsdGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVz
b3VyY2VGaWx0ZXIuY3BwCmluZGV4IDU1ZDVlZDU3ZTNlZDRkOTczOThkZDgyMjczMTNlZDBkMzQ1
MDMyOTIuLjhkNWRiZDkzZGI5MDAyYjk3YWIzOWQwZjU4YzgxYTliNzAwNmNkZDEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VG
aWx0ZXIuY3BwCkBAIC0xMjksNyArMTI5LDcgQEAgYm9vbCBSZW5kZXJTVkdSZXNvdXJjZUZpbHRl
cjo6YXBwbHlSZXNvdXJjZShSZW5kZXJFbGVtZW50JiByZW5kZXJlciwgY29uc3QgUmVuZGUKICAg
ICBhdXRvIHJlbmRlcmluZ01vZGUgPSByZW5kZXJlci5wYWdlKCkuYWNjZWxlcmF0ZWRGaWx0ZXJz
RW5hYmxlZCgpID8gUmVuZGVyaW5nTW9kZTo6QWNjZWxlcmF0ZWQgOiBSZW5kZXJpbmdNb2RlOjpV
bmFjY2VsZXJhdGVkOwogCiAgICAgLy8gQ3JlYXRlIHRoZSBTVkdGaWx0ZXIgb2JqZWN0LgotICAg
IGZpbHRlckRhdGEtPmJ1aWxkZXIgPSBtYWtlVW5pcXVlPFNWR0ZpbHRlckJ1aWxkZXI+KCk7Cisg
ICAgZmlsdGVyRGF0YS0+YnVpbGRlciA9IG1ha2VVbmlxdWU8U1ZHRmlsdGVyQnVpbGRlcj4odGFy
Z2V0Qm91bmRpbmdCb3gsIGZpbHRlckVsZW1lbnQoKS5wcmltaXRpdmVVbml0cygpKTsKICAgICBm
aWx0ZXJEYXRhLT5maWx0ZXIgPSBTVkdGaWx0ZXI6OmNyZWF0ZShmaWx0ZXJFbGVtZW50KCksICpm
aWx0ZXJEYXRhLT5idWlsZGVyLCByZW5kZXJpbmdNb2RlLCBmaWx0ZXJTY2FsZSwgRmlsdGVyOjpD
bGlwT3BlcmF0aW9uOjpJbnRlcnNlY3QsIGZpbHRlckRhdGEtPmJvdW5kYXJpZXMsIHRhcmdldEJv
dW5kaW5nQm94KTsKICAgICBpZiAoIWZpbHRlckRhdGEtPmZpbHRlcikgewogICAgICAgICBtX3Jl
bmRlcmVyRmlsdGVyRGF0YU1hcC5yZW1vdmUoJnJlbmRlcmVyKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyVHJlZUFzVGV4dC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlclRyZWVBc1RleHQuY3BwCmluZGV4IGYxNWU2
MzcxNjA0YjhhOTVmN2FiZWE3MjZmNDA3YzlmZjk0ZmY5ZGUuLmU4YWRlZGJkNTcyMGZjOWE3MTdk
NGZmODM5ZDdlOTFlNGViMmMzOGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zdmcvU1ZHUmVuZGVyVHJlZUFzVGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3N2Zy9TVkdSZW5kZXJUcmVlQXNUZXh0LmNwcApAQCAtNDc3LDcgKzQ3Nyw3IEBAIHZvaWQg
d3JpdGVTVkdSZXNvdXJjZUNvbnRhaW5lcihUZXh0U3RyZWFtJiB0cywgY29uc3QgUmVuZGVyU1ZH
UmVzb3VyY2VDb250YWluZXImCiAgICAgICAgIC8vIENyZWF0aW5nIGEgcGxhY2Vob2xkZXIgZmls
dGVyIHdoaWNoIGlzIHBhc3NlZCB0byB0aGUgYnVpbGRlci4KICAgICAgICAgRmxvYXRSZWN0IGR1
bW15UmVjdDsKICAgICAgICAgRmxvYXRTaXplIGR1bW15U2NhbGUoMSwgMSk7Ci0gICAgICAgIFNW
R0ZpbHRlckJ1aWxkZXIgYnVpbGRlcjsKKyAgICAgICAgU1ZHRmlsdGVyQnVpbGRlciBidWlsZGVy
KGR1bW15UmVjdCk7CiAgICAgICAgIGF1dG8gZHVtbXlGaWx0ZXIgPSBTVkdGaWx0ZXI6OmNyZWF0
ZShmaWx0ZXIuZmlsdGVyRWxlbWVudCgpLCBidWlsZGVyLCBSZW5kZXJpbmdNb2RlOjpVbmFjY2Vs
ZXJhdGVkLCBkdW1teVNjYWxlLCBGaWx0ZXI6OkNsaXBPcGVyYXRpb246OkludGVyc2VjdCwgZHVt
bXlSZWN0LCBkdW1teVJlY3QpOwogICAgICAgICBpZiAoZHVtbXlGaWx0ZXIpIHsKICAgICAgICAg
ICAgIFRleHRTdHJlYW06OkluZGVudFNjb3BlIGluZGVudFNjb3BlKHRzKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRURyb3BTaGFkb3dFbGVtZW50LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdGRURyb3BTaGFkb3dFbGVtZW50LmNwcAppbmRleCBlMWFjZGYwOWYzOTJl
MmJjYTE3YjFhNDRlNjcyYTc3OTgyMDRhYmJmLi42YTg0ZDZjYjU1OWRhM2JlN2IxMjMyMmFmYjA0
NWQwZmExZGRlYjRkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVEcm9wU2hh
ZG93RWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRHJvcFNoYWRvd0Vs
ZW1lbnQuY3BwCkBAIC05Niw2ICs5NiwxMyBAQCB2b2lkIFNWR0ZFRHJvcFNoYWRvd0VsZW1lbnQ6
OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCiAgICAg
U1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpzdmdBdHRyaWJ1dGVDaGFuZ2Vk
KGF0dHJOYW1lKTsKIH0KIAorSW50T3V0c2V0cyBTVkdGRURyb3BTaGFkb3dFbGVtZW50OjpvdXRz
ZXRzKGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0Qm91bmRpbmdCb3gsIFNWR1VuaXRUeXBlczo6U1ZH
VW5pdFR5cGUgcHJpbWl0aXZlVW5pdHMpIGNvbnN0Cit7CisgICAgYXV0byBvZmZzZXQgPSBTVkdG
aWx0ZXI6OmNhbGN1bGF0ZVJlc29sdmVkU2l6ZSh7IGR4KCksIGR5KCkgfSwgdGFyZ2V0Qm91bmRp
bmdCb3gsIHByaW1pdGl2ZVVuaXRzKTsKKyAgICBhdXRvIHN0ZERldmlhdGlvbiA9IFNWR0ZpbHRl
cjo6Y2FsY3VsYXRlUmVzb2x2ZWRTaXplKHsgc3RkRGV2aWF0aW9uWCgpLCBzdGREZXZpYXRpb25Z
KCkgfSwgdGFyZ2V0Qm91bmRpbmdCb3gsIHByaW1pdGl2ZVVuaXRzKTsKKyAgICByZXR1cm4gRkVE
cm9wU2hhZG93OjpjYWxjdWxhdGVPdXRzZXRzKG9mZnNldCwgc3RkRGV2aWF0aW9uKTsKK30KKwog
UmVmUHRyPEZpbHRlckVmZmVjdD4gU1ZHRkVEcm9wU2hhZG93RWxlbWVudDo6ZmlsdGVyRWZmZWN0
KGNvbnN0IFNWR0ZpbHRlckJ1aWxkZXImLCBjb25zdCBGaWx0ZXJFZmZlY3RWZWN0b3ImKSBjb25z
dAogewogICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSB0aGlzLT5yZW5kZXJlcigpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRHJvcFNoYWRvd0VsZW1lbnQuaCBiL1Nv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdGRURyb3BTaGFkb3dFbGVtZW50LmgKaW5kZXggNDliZWYwYTNl
NGM3MmZhOWUyZjMzYTc2YTk1OWZkZWY0ZjM2MjFjOC4uNWExZTc2ZGI5MmRkMDFkZTM2ZWQyMDM1
MGViNDc5ZTViMjg3MGVkZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRHJv
cFNoYWRvd0VsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVEcm9wU2hhZG93
RWxlbWVudC5oCkBAIC01NCw2ICs1NCw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBzdmdBdHRyaWJ1
dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmKSBvdmVycmlkZTsKIAogICAgIFZlY3RvcjxB
dG9tU3RyaW5nPiBmaWx0ZXJFZmZlY3RJbnB1dHNOYW1lcygpIGNvbnN0IG92ZXJyaWRlIHsgcmV0
dXJuIHsgaW4xKCkgfTsgfQorICAgIEludE91dHNldHMgb3V0c2V0cyhjb25zdCBGbG9hdFJlY3Qm
IHRhcmdldEJvdW5kaW5nQm94LCBTVkdVbml0VHlwZXM6OlNWR1VuaXRUeXBlIHByaW1pdGl2ZVVu
aXRzKSBjb25zdCBvdmVycmlkZTsKICAgICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBmaWx0ZXJFZmZl
Y3QoY29uc3QgU1ZHRmlsdGVyQnVpbGRlciYsIGNvbnN0IEZpbHRlckVmZmVjdFZlY3RvciYpIGNv
bnN0IG92ZXJyaWRlOwogCiAgICAgUHJvcGVydHlSZWdpc3RyeSBtX3Byb3BlcnR5UmVnaXN0cnkg
eyAqdGhpcyB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFR2F1c3NpYW5C
bHVyRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVHYXVzc2lhbkJsdXJFbGVt
ZW50LmNwcAppbmRleCAwNzNiZDcyNGJiOWUzNWYwYjgwZDYyZGY5YzAyOTU1MzJlOTY5ZDI3Li5j
YmJhMTliMDcwNzdiYzY4MDhlZmQwNTBmM2IwNmUzNGNhNDI4ZjRmIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHRkVHYXVzc2lhbkJsdXJFbGVtZW50LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHRkVHYXVzc2lhbkJsdXJFbGVtZW50LmNwcApAQCAtOTQsNiArOTQsMTIg
QEAgdm9pZCBTVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29u
c3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUKICAgICBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFy
ZEF0dHJpYnV0ZXM6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoYXR0ck5hbWUpOwogfQogCitJbnRPdXRz
ZXRzIFNWR0ZFR2F1c3NpYW5CbHVyRWxlbWVudDo6b3V0c2V0cyhjb25zdCBGbG9hdFJlY3QmIHRh
cmdldEJvdW5kaW5nQm94LCBTVkdVbml0VHlwZXM6OlNWR1VuaXRUeXBlIHByaW1pdGl2ZVVuaXRz
KSBjb25zdAoreworICAgIGF1dG8gc3RkRGV2aWF0aW9uID0gU1ZHRmlsdGVyOjpjYWxjdWxhdGVS
ZXNvbHZlZFNpemUoeyBzdGREZXZpYXRpb25YKCksIHN0ZERldmlhdGlvblkoKSB9LCB0YXJnZXRC
b3VuZGluZ0JveCwgcHJpbWl0aXZlVW5pdHMpOworICAgIHJldHVybiBGRUdhdXNzaWFuQmx1cjo6
Y2FsY3VsYXRlT3V0c2V0cyhzdGREZXZpYXRpb24pOworfQorCiBSZWZQdHI8RmlsdGVyRWZmZWN0
PiBTVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQ6OmZpbHRlckVmZmVjdChjb25zdCBTVkdGaWx0ZXJC
dWlsZGVyJiwgY29uc3QgRmlsdGVyRWZmZWN0VmVjdG9yJikgY29uc3QKIHsKICAgICBpZiAoc3Rk
RGV2aWF0aW9uWCgpIDwgMCB8fCBzdGREZXZpYXRpb25ZKCkgPCAwKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFR2F1c3NpYW5CbHVyRWxlbWVudC5oIGIvU291cmNlL1dlYkNv
cmUvc3ZnL1NWR0ZFR2F1c3NpYW5CbHVyRWxlbWVudC5oCmluZGV4IDUyMWFlMjA0ZWI0ZjUyYzZk
Mzc5OTllNDRlMjJiMDUyODhiODMyYjIuLjEzNmY0NDI5MmU5NzNkNjFhYzg5ZmZkNmMwNGU4ZmFk
MDAxYTRmNDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUdhdXNzaWFuQmx1
ckVsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVHYXVzc2lhbkJsdXJFbGVt
ZW50LmgKQEAgLTU0LDYgKzU0LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIHN2Z0F0dHJpYnV0ZUNo
YW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYpIG92ZXJyaWRlOwogCiAgICAgVmVjdG9yPEF0b21T
dHJpbmc+IGZpbHRlckVmZmVjdElucHV0c05hbWVzKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4g
eyBpbjEoKSB9OyB9CisgICAgSW50T3V0c2V0cyBvdXRzZXRzKGNvbnN0IEZsb2F0UmVjdCYgdGFy
Z2V0Qm91bmRpbmdCb3gsIFNWR1VuaXRUeXBlczo6U1ZHVW5pdFR5cGUgcHJpbWl0aXZlVW5pdHMp
IGNvbnN0IG92ZXJyaWRlOwogICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGZpbHRlckVmZmVjdChj
b25zdCBTVkdGaWx0ZXJCdWlsZGVyJiwgY29uc3QgRmlsdGVyRWZmZWN0VmVjdG9yJikgY29uc3Qg
b3ZlcnJpZGU7CiAKICAgICBQcm9wZXJ0eVJlZ2lzdHJ5IG1fcHJvcGVydHlSZWdpc3RyeSB7ICp0
aGlzIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVPZmZzZXRFbGVtZW50
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRU9mZnNldEVsZW1lbnQuY3BwCmluZGV4IGVi
NmQ3Y2JmOGQ4MGM2YWI4YzJmOGU5MDRjNTdhODNmN2YyMGJlNGEuLmE5OThkMmZkZDYxYzY2NGJl
MWI2YjdkMjAyZDM0MTNiM2UxNzljYWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdGRU9mZnNldEVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRU9mZnNl
dEVsZW1lbnQuY3BwCkBAIC03OSw2ICs3OSwxMiBAQCB2b2lkIFNWR0ZFT2Zmc2V0RWxlbWVudDo6
c3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKICAgICBT
VkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQo
YXR0ck5hbWUpOwogfQogCitJbnRPdXRzZXRzIFNWR0ZFT2Zmc2V0RWxlbWVudDo6b3V0c2V0cyhj
b25zdCBGbG9hdFJlY3QmIHRhcmdldEJvdW5kaW5nQm94LCBTVkdVbml0VHlwZXM6OlNWR1VuaXRU
eXBlIHByaW1pdGl2ZVVuaXRzKSBjb25zdAoreworICAgIGF1dG8gb2Zmc2V0ID0gU1ZHRmlsdGVy
OjpjYWxjdWxhdGVSZXNvbHZlZFNpemUoeyBkeCgpLCBkeSgpIH0sIHRhcmdldEJvdW5kaW5nQm94
LCBwcmltaXRpdmVVbml0cyk7CisgICAgcmV0dXJuIEZFT2Zmc2V0OjpjYWxjdWxhdGVPdXRzZXRz
KG9mZnNldCk7Cit9CisKIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IFNWR0ZFT2Zmc2V0RWxlbWVudDo6
ZmlsdGVyRWZmZWN0KGNvbnN0IFNWR0ZpbHRlckJ1aWxkZXImLCBjb25zdCBGaWx0ZXJFZmZlY3RW
ZWN0b3ImKSBjb25zdAogewogICAgIHJldHVybiBGRU9mZnNldDo6Y3JlYXRlKGR4KCksIGR5KCkp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFT2Zmc2V0RWxlbWVudC5oIGIv
U291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFT2Zmc2V0RWxlbWVudC5oCmluZGV4IGY4NTk1OThhMGZl
NmEwZDdhODg0YjBjMGM1Yjk4YmVmMmNmNDdiYmQuLjE1NmVkZGY0Njk5ZGJjNmEyMjVmYmE1OWUw
Mjk4ZDZlNzlmN2IwOGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRU9mZnNl
dEVsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVPZmZzZXRFbGVtZW50LmgK
QEAgLTQ4LDYgKzQ4LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIHN2Z0F0dHJpYnV0ZUNoYW5nZWQo
Y29uc3QgUXVhbGlmaWVkTmFtZSYpIG92ZXJyaWRlOwogCiAgICAgVmVjdG9yPEF0b21TdHJpbmc+
IGZpbHRlckVmZmVjdElucHV0c05hbWVzKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4geyBpbjEo
KSB9OyB9CisgICAgSW50T3V0c2V0cyBvdXRzZXRzKGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0Qm91
bmRpbmdCb3gsIFNWR1VuaXRUeXBlczo6U1ZHVW5pdFR5cGUgcHJpbWl0aXZlVW5pdHMpIGNvbnN0
IG92ZXJyaWRlOwogICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGZpbHRlckVmZmVjdChjb25zdCBT
VkdGaWx0ZXJCdWlsZGVyJiwgY29uc3QgRmlsdGVyRWZmZWN0VmVjdG9yJikgY29uc3Qgb3ZlcnJp
ZGU7CiAKICAgICBQcm9wZXJ0eVJlZ2lzdHJ5IG1fcHJvcGVydHlSZWdpc3RyeSB7ICp0aGlzIH07
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRh
cmRBdHRyaWJ1dGVzLmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRmlsdGVyUHJpbWl0aXZlU3Rh
bmRhcmRBdHRyaWJ1dGVzLmgKaW5kZXggNzhlMmFhMmMxZTgxNGU2OThlZDQ0NGVlYzc3ZjliMjA3
NmUzZjk1NS4uNTAwYjFlYjg5ZGQ5ZDBhMDNjYzllNGMwODM4MmNlNTQzYWNlNjc0YSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmli
dXRlcy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFy
ZEF0dHJpYnV0ZXMuaApAQCAtNTMsNiArNTMsNyBAQCBwdWJsaWM6CiAgICAgLy8gUmV0dXJucyB0
cnVlLCBpZiB0aGUgbmV3IHZhbHVlIGlzIGRpZmZlcmVudCBmcm9tIHRoZSBvbGQgb25lLgogICAg
IHZpcnR1YWwgYm9vbCBzZXRGaWx0ZXJFZmZlY3RBdHRyaWJ1dGUoRmlsdGVyRWZmZWN0KiwgY29u
c3QgUXVhbGlmaWVkTmFtZSYpOwogICAgIHZpcnR1YWwgVmVjdG9yPEF0b21TdHJpbmc+IGZpbHRl
ckVmZmVjdElucHV0c05hbWVzKCkgY29uc3QgeyByZXR1cm4geyB9OyB9CisgICAgdmlydHVhbCBJ
bnRPdXRzZXRzIG91dHNldHMoY29uc3QgRmxvYXRSZWN0JiwgU1ZHVW5pdFR5cGVzOjpTVkdVbml0
VHlwZSkgY29uc3QgeyByZXR1cm4geyB9OyB9CiAgICAgdmlydHVhbCBSZWZQdHI8RmlsdGVyRWZm
ZWN0PiBmaWx0ZXJFZmZlY3QoY29uc3QgU1ZHRmlsdGVyQnVpbGRlciYsIGNvbnN0IEZpbHRlckVm
ZmVjdFZlY3RvciYpIGNvbnN0ID0gMDsKIAogICAgIHN0YXRpYyB2b2lkIGludmFsaWRhdGVGaWx0
ZXJQcmltaXRpdmVQYXJlbnQoU1ZHRWxlbWVudCopOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2
Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlci5jcHAKaW5kZXggOTVmMjRhN2RkOWU2NGVlZDA2
YjU4YjUyOWE4NTAwZGY5YThjZjk2My4uNTEwMTU2MDNiMTU1ODUwODVlNDUwMjEzOGEzZmEwN2Rj
YjhjNzFhNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMv
U1ZHRmlsdGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9T
VkdGaWx0ZXIuY3BwCkBAIC0zNCwxOSArMzQsMTIgQEAgUmVmUHRyPFNWR0ZpbHRlcj4gU1ZHRmls
dGVyOjpjcmVhdGUoU1ZHRmlsdGVyRWxlbWVudCYgZmlsdGVyRWxlbWVudCwgU1ZHRmlsdGVyQnUK
IHsKICAgICBhdXRvIGZpbHRlciA9IGFkb3B0UmVmKCpuZXcgU1ZHRmlsdGVyKHJlbmRlcmluZ01v
ZGUsIGZpbHRlclNjYWxlLCBjbGlwT3BlcmF0aW9uLCBmaWx0ZXJSZWdpb24sIHRhcmdldEJvdW5k
aW5nQm94LCBmaWx0ZXJFbGVtZW50LnByaW1pdGl2ZVVuaXRzKCkpKTsKIAotICAgIGJ1aWxkZXIu
c2V0dXBCdWlsdGluRWZmZWN0cyhTb3VyY2VHcmFwaGljOjpjcmVhdGUoKSk7Ci0gICAgYnVpbGRl
ci5zZXRUYXJnZXRCb3VuZGluZ0JveCh0YXJnZXRCb3VuZGluZ0JveCk7Ci0gICAgYnVpbGRlci5z
ZXRQcmltaXRpdmVVbml0cyhmaWx0ZXJFbGVtZW50LnByaW1pdGl2ZVVuaXRzKCkpOwotCi0gICAg
aWYgKCFidWlsZGVyLmJ1aWxkRmlsdGVyRWZmZWN0cyhmaWx0ZXJFbGVtZW50KSkKLSAgICAgICAg
cmV0dXJuIG51bGxwdHI7Ci0KLSAgICBTVkdGaWx0ZXJFeHByZXNzaW9uIGV4cHJlc3Npb247Ci0g
ICAgaWYgKCFidWlsZGVyLmJ1aWxkRXhwcmVzc2lvbihleHByZXNzaW9uKSkKKyAgICBhdXRvIGV4
cHJlc3Npb24gPSBidWlsZGVyLmJ1aWxkRmlsdGVyRXhwcmVzc2lvbihmaWx0ZXJFbGVtZW50KTsK
KyAgICBpZiAoIWV4cHJlc3Npb24pCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgQVNT
RVJUKCFleHByZXNzaW9uLmlzRW1wdHkoKSk7Ci0gICAgZmlsdGVyLT5zZXRFeHByZXNzaW9uKFdU
Rk1vdmUoZXhwcmVzc2lvbikpOworICAgIEFTU0VSVCghZXhwcmVzc2lvbi0+aXNFbXB0eSgpKTsK
KyAgICBmaWx0ZXItPnNldEV4cHJlc3Npb24oV1RGTW92ZSgqZXhwcmVzc2lvbikpOwogCiAgICAg
aWYgKHJlbmRlcmluZ01vZGUgPT0gUmVuZGVyaW5nTW9kZTo6QWNjZWxlcmF0ZWQgJiYgIWZpbHRl
ci0+c3VwcG9ydHNBY2NlbGVyYXRlZFJlbmRlcmluZygpKQogICAgICAgICBmaWx0ZXItPnNldFJl
bmRlcmluZ01vZGUoUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCk7CkBAIC03NCw5ICs2Nywx
NCBAQCBTVkdGaWx0ZXI6OlNWR0ZpbHRlcihjb25zdCBGbG9hdFJlY3QmIHRhcmdldEJvdW5kaW5n
Qm94LCBTVkdVbml0VHlwZXM6OlNWR1VuaXRUeQogewogfQogCitGbG9hdFNpemUgU1ZHRmlsdGVy
OjpjYWxjdWxhdGVSZXNvbHZlZFNpemUoY29uc3QgRmxvYXRTaXplJiBzaXplLCBjb25zdCBGbG9h
dFJlY3QmIHRhcmdldEJvdW5kaW5nQm94LCBTVkdVbml0VHlwZXM6OlNWR1VuaXRUeXBlIHByaW1p
dGl2ZVVuaXRzKQoreworICAgIHJldHVybiBwcmltaXRpdmVVbml0cyA9PSBTVkdVbml0VHlwZXM6
OlNWR19VTklUX1RZUEVfT0JKRUNUQk9VTkRJTkdCT1ggPyBzaXplICogdGFyZ2V0Qm91bmRpbmdC
b3guc2l6ZSgpIDogc2l6ZTsKK30KKwogRmxvYXRTaXplIFNWR0ZpbHRlcjo6cmVzb2x2ZWRTaXpl
KGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9wcmltaXRpdmVV
bml0cyA9PSBTVkdVbml0VHlwZXM6OlNWR19VTklUX1RZUEVfT0JKRUNUQk9VTkRJTkdCT1ggPyBz
aXplICogbV90YXJnZXRCb3VuZGluZ0JveC5zaXplKCkgOiBzaXplOworICAgIHJldHVybiBjYWxj
dWxhdGVSZXNvbHZlZFNpemUoc2l6ZSwgbV90YXJnZXRCb3VuZGluZ0JveCwgbV9wcmltaXRpdmVV
bml0cyk7CiB9CiAKIGJvb2wgU1ZHRmlsdGVyOjpzdXBwb3J0c0FjY2VsZXJhdGVkUmVuZGVyaW5n
KCkgY29uc3QKQEAgLTE0OCwxNCArMTQ2LDYgQEAgUmVmUHRyPEZpbHRlckltYWdlPiBTVkdGaWx0
ZXI6OmFwcGx5KEZpbHRlckltYWdlKiBzb3VyY2VJbWFnZSwgRmlsdGVyUmVzdWx0cyYgcmUKICAg
ICByZXR1cm4gc3RhY2sudGFrZUxhc3QoKTsKIH0KIAotSW50T3V0c2V0cyBTVkdGaWx0ZXI6Om91
dHNldHMoKSBjb25zdAotewotICAgIEludE91dHNldHMgb3V0c2V0czsKLSAgICBmb3IgKGF1dG8m
IHRlcm0gOiBtX2V4cHJlc3Npb24pCi0gICAgICAgIG91dHNldHMgKz0gdGVybS5lZmZlY3QtPm91
dHNldHMoKnRoaXMpOwotICAgIHJldHVybiBvdXRzZXRzOwotfQotCiBUZXh0U3RyZWFtJiBTVkdG
aWx0ZXI6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMsIEZpbHRlclJlcHJl
c2VudGF0aW9uIHJlcHJlc2VudGF0aW9uKSBjb25zdAogewogICAgIGZvciAoYXV0byBpdCA9IG1f
ZXhwcmVzc2lvbi5yYmVnaW4oKSwgZW5kID0gbV9leHByZXNzaW9uLnJlbmQoKTsgaXQgIT0gZW5k
OyArK2l0KSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVy
cy9TVkdGaWx0ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0Zp
bHRlci5oCmluZGV4IDRlZTBmYjg3YWYxYzFhNDFkZWYxODZhNTUzNDEyOGJhNjc4MGU5Y2MuLmQy
Mzg3NWVhYmUwZjZlYWY5MjkwNDQ4MjMxOTZhMTc5M2YwY2Y3OWMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlci5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlci5oCkBAIC00OCw2ICs0OCw4IEBA
IHB1YmxpYzoKIAogICAgIFJlZlB0cjxGaWx0ZXJJbWFnZT4gYXBwbHkoRmlsdGVySW1hZ2UqIHNv
dXJjZUltYWdlLCBGaWx0ZXJSZXN1bHRzJikgZmluYWw7CiAKKyAgICBzdGF0aWMgRmxvYXRTaXpl
IGNhbGN1bGF0ZVJlc29sdmVkU2l6ZShjb25zdCBGbG9hdFNpemUmLCBjb25zdCBGbG9hdFJlY3Qm
IHRhcmdldEJvdW5kaW5nQm94LCBTVkdVbml0VHlwZXM6OlNWR1VuaXRUeXBlIHByaW1pdGl2ZVVu
aXRzKTsKKwogICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6
OlRleHRTdHJlYW0mLCBGaWx0ZXJSZXByZXNlbnRhdGlvbikgY29uc3QgZmluYWw7CiAKIHByaXZh
dGU6CkBAIC02Miw5ICs2NCw2IEBAIHByaXZhdGU6CiAKICAgICBSZWZQdHI8RmlsdGVySW1hZ2U+
IGFwcGx5KGNvbnN0IEZpbHRlciYsIEZpbHRlckltYWdlJiBzb3VyY2VJbWFnZSwgRmlsdGVyUmVz
dWx0cyYpIGZpbmFsOwogCi0gICAgSW50T3V0c2V0cyBvdXRzZXRzKGNvbnN0IEZpbHRlciYpIGNv
bnN0IGZpbmFsIHsgcmV0dXJuIG91dHNldHMoKTsgfQotICAgIEludE91dHNldHMgb3V0c2V0cygp
IGNvbnN0IGZpbmFsOwotCiAgICAgRmxvYXRSZWN0IG1fdGFyZ2V0Qm91bmRpbmdCb3g7CiAgICAg
U1ZHVW5pdFR5cGVzOjpTVkdVbml0VHlwZSBtX3ByaW1pdGl2ZVVuaXRzOwogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXJCdWlsZGVyLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlckJ1aWxkZXIu
Y3BwCmluZGV4IDUwNzdiMmVlOTJiMDk1ZDI2ZjliZmJjMDFhOWZiNjQ5NzcxOWRjNTAuLjBiYjRl
NWQwMTJkZmFmNjI4NmY1YjNiYzVlNDVlNzE4NDY5YWIwMDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlckJ1aWxkZXIuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlckJ1aWxkZXIuY3BwCkBA
IC0yMyw5ICsyMyw4IEBACiAKICNpbmNsdWRlICJFbGVtZW50SXRlcmF0b3IuaCIKICNpbmNsdWRl
ICJTVkdGaWx0ZXJFbGVtZW50LmgiCisjaW5jbHVkZSAiU1ZHRmlsdGVyR3JhcGguaCIKICNpbmNs
dWRlICJTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXMuaCIKLSNpbmNsdWRlICJT
b3VyY2VBbHBoYS5oIgotI2luY2x1ZGUgIlNvdXJjZUdyYXBoaWMuaCIKIAogI2lmIEVOQUJMRShE
RVNUSU5BVElPTl9DT0xPUl9TUEFDRV9MSU5FQVJfU1JHQikKICNpbmNsdWRlICJDU1NDb21wdXRl
ZFN0eWxlRGVjbGFyYXRpb24uaCIKQEAgLTM3LDEwICszNiwxMCBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIG1heFRvdGFsTnVtYmVyRmlsdGVyRWZmZWN0
cyA9IDEwMDsKIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgbWF4Q291bnRDaGlsZE5vZGVzID0g
MjAwOwogCi12b2lkIFNWR0ZpbHRlckJ1aWxkZXI6OnNldHVwQnVpbHRpbkVmZmVjdHMoUmVmPEZp
bHRlckVmZmVjdD4gc291cmNlR3JhcGhpYykKK1NWR0ZpbHRlckJ1aWxkZXI6OlNWR0ZpbHRlckJ1
aWxkZXIoY29uc3QgRmxvYXRSZWN0JiB0YXJnZXRCb3VuZGluZ0JveCwgU1ZHVW5pdFR5cGVzOjpT
VkdVbml0VHlwZSBwcmltaXRpdmVVbml0cykKKyAgICA6IG1fdGFyZ2V0Qm91bmRpbmdCb3godGFy
Z2V0Qm91bmRpbmdCb3gpCisgICAgLCBtX3ByaW1pdGl2ZVVuaXRzKHByaW1pdGl2ZVVuaXRzKQog
ewotICAgIG1fYnVpbHRpbkVmZmVjdHMuYWRkKFNvdXJjZUdyYXBoaWM6OmVmZmVjdE5hbWUoKSwg
c291cmNlR3JhcGhpYyk7Ci0gICAgbV9idWlsdGluRWZmZWN0cy5hZGQoU291cmNlQWxwaGE6OmVm
ZmVjdE5hbWUoKSwgU291cmNlQWxwaGE6OmNyZWF0ZShzb3VyY2VHcmFwaGljLT5vcGVyYXRpbmdD
b2xvclNwYWNlKCkpKTsKIH0KIAogc3RhdGljIE9wdGlvblNldDxGaWx0ZXJFZmZlY3RHZW9tZXRy
eTo6RmxhZ3M+IGVmZmVjdEdlb21ldHJ5RmxhZ3NGb3JFbGVtZW50KFNWR0VsZW1lbnQmIGVsZW1l
bnQpCkBAIC03OCwxNTMgKzc3LDEzNyBAQCBzdGF0aWMgQ29sb3JJbnRlcnBvbGF0aW9uIGNvbG9y
SW50ZXJwb2xhdGlvbkZvckVsZW1lbnQoU1ZHRWxlbWVudCYgZWxlbWVudCkKIH0KICNlbmRpZgog
Ci1SZWZQdHI8RmlsdGVyRWZmZWN0PiBTVkdGaWx0ZXJCdWlsZGVyOjpidWlsZEZpbHRlckVmZmVj
dHMoU1ZHRmlsdGVyRWxlbWVudCYgZmlsdGVyRWxlbWVudCkKK3N0YXRpYyBib29sIGFwcGVuZFN1
YkdyYXBoVG9FeHByZXNzaW9uKGNvbnN0IFNWR0ZpbHRlckVmZmVjdHNHcmFwaCYgZ3JhcGgsIGNv
bnN0IEZpbHRlckVmZmVjdEdlb21ldHJ5TWFwJiBlZmZlY3RHZW9tZXRyeU1hcCwgRmlsdGVyRWZm
ZWN0JiBlZmZlY3QsIEZpbHRlckVmZmVjdFZlY3RvciYgc3RhY2ssIHVuc2lnbmVkIGxldmVsLCBT
VkdGaWx0ZXJFeHByZXNzaW9uJiBleHByZXNzaW9uKQogewotICAgIGlmIChmaWx0ZXJFbGVtZW50
LmNvdW50Q2hpbGROb2RlcygpID4gbWF4Q291bnRDaGlsZE5vZGVzKQotICAgICAgICByZXR1cm4g
bnVsbHB0cjsKLQotICAgIHNldEVmZmVjdElucHV0cyhzb3VyY2VBbHBoYSgpLCBGaWx0ZXJFZmZl
Y3RWZWN0b3IgeyBzb3VyY2VHcmFwaGljKCkgfSk7Ci0KLSAgICBmb3IgKGF1dG8mIGVmZmVjdEVs
ZW1lbnQgOiBjaGlsZHJlbk9mVHlwZTxTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0
ZXM+KGZpbHRlckVsZW1lbnQpKSB7Ci0gICAgICAgIGF1dG8gaW5wdXRzID0gbmFtZWRFZmZlY3Rz
KGVmZmVjdEVsZW1lbnQuZmlsdGVyRWZmZWN0SW5wdXRzTmFtZXMoKSk7Ci0gICAgICAgIGlmICgh
aW5wdXRzKQotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgLy8gQSBjeWNsZSBpcyBk
ZXRlY3RlZC4KKyAgICBpZiAoc3RhY2suY29udGFpbnNJZihbJl0oYXV0byYgaXRlbSkgeyByZXR1
cm4gaXRlbS5wdHIoKSA9PSAmZWZmZWN0OyB9KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0g
ICAgICAgIGF1dG8gZWZmZWN0ID0gZWZmZWN0RWxlbWVudC5maWx0ZXJFZmZlY3QoKnRoaXMsICpp
bnB1dHMpOwotICAgICAgICBpZiAoIWVmZmVjdCkKLSAgICAgICAgICAgIHJldHVybiBudWxscHRy
OworICAgIGF1dG8gZWZmZWN0R2VvbWV0cnkgPSBbJl0oRmlsdGVyRWZmZWN0JiBlZmZlY3QpIC0+
IHN0ZDo6b3B0aW9uYWw8RmlsdGVyRWZmZWN0R2VvbWV0cnk+IHsKKyAgICAgICAgYXV0byBpdCA9
IGVmZmVjdEdlb21ldHJ5TWFwLmZpbmQoZWZmZWN0KTsKKyAgICAgICAgaWYgKGl0ICE9IGVmZmVj
dEdlb21ldHJ5TWFwLmVuZCgpKQorICAgICAgICAgICAgcmV0dXJuIGl0LT52YWx1ZTsKKyAgICAg
ICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICB9OwogCi0gICAgICAgIGlmIChhdXRvIGZsYWdz
ID0gZWZmZWN0R2VvbWV0cnlGbGFnc0ZvckVsZW1lbnQoZWZmZWN0RWxlbWVudCkpIHsKLSAgICAg
ICAgICAgIGF1dG8gZWZmZWN0Qm91bmRhcmllcyA9IFNWR0xlbmd0aENvbnRleHQ6OnJlc29sdmVS
ZWN0YW5nbGU8U1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzPigmZWZmZWN0RWxl
bWVudCwgbV9wcmltaXRpdmVVbml0cywgbV90YXJnZXRCb3VuZGluZ0JveCk7Ci0gICAgICAgICAg
ICBtX2VmZmVjdEdlb21ldHJ5TWFwLmFkZCgqZWZmZWN0LCBGaWx0ZXJFZmZlY3RHZW9tZXRyeShl
ZmZlY3RCb3VuZGFyaWVzLCBmbGFncykpOwotICAgICAgICB9Ci0KLSNpZiBFTkFCTEUoREVTVElO
QVRJT05fQ09MT1JfU1BBQ0VfTElORUFSX1NSR0IpCi0gICAgICAgIGlmIChjb2xvckludGVycG9s
YXRpb25Gb3JFbGVtZW50KGVmZmVjdEVsZW1lbnQpID09IENvbG9ySW50ZXJwb2xhdGlvbjo6TGlu
ZWFyUkdCKQotICAgICAgICAgICAgZWZmZWN0LT5zZXRPcGVyYXRpbmdDb2xvclNwYWNlKERlc3Rp
bmF0aW9uQ29sb3JTcGFjZTo6TGluZWFyU1JHQigpKTsKLSNlbmRpZgorICAgIHN0YWNrLmFwcGVu
ZChlZmZlY3QpOwogCi0gICAgICAgIGlmIChhdXRvIHJlbmRlcmVyID0gZWZmZWN0RWxlbWVudC5y
ZW5kZXJlcigpKQotICAgICAgICAgICAgYXBwZW5kRWZmZWN0VG9FZmZlY3RSZW5kZXJlcigqZWZm
ZWN0LCAqcmVuZGVyZXIpOworICAgIGV4cHJlc3Npb24uYXBwZW5kKHsgZWZmZWN0LCBlZmZlY3RH
ZW9tZXRyeShlZmZlY3QpLCBsZXZlbCB9KTsKIAotICAgICAgICBhZGROYW1lZEVmZmVjdChlZmZl
Y3RFbGVtZW50LnJlc3VsdCgpLCB7ICplZmZlY3QgfSk7Ci0gICAgICAgIHNldEVmZmVjdElucHV0
cygqZWZmZWN0LCBXVEZNb3ZlKCppbnB1dHMpKTsKKyAgICBmb3IgKGF1dG8mIGlucHV0IDogZ3Jh
cGguZ2V0Tm9kZUlucHV0cyhlZmZlY3QpKSB7CisgICAgICAgIGlmICghYXBwZW5kU3ViR3JhcGhU
b0V4cHJlc3Npb24oZ3JhcGgsIGVmZmVjdEdlb21ldHJ5TWFwLCBpbnB1dCwgc3RhY2ssIGxldmVs
ICsgMSwgZXhwcmVzc2lvbikpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0g
ICAgcmV0dXJuIG1fbGFzdEVmZmVjdDsKLX0KKyAgICBBU1NFUlQoIXN0YWNrLmlzRW1wdHkoKSk7
CisgICAgQVNTRVJUKHN0YWNrLmxhc3QoKS5wdHIoKSA9PSAmZWZmZWN0KTsKIAotRmlsdGVyRWZm
ZWN0JiBTVkdGaWx0ZXJCdWlsZGVyOjpzb3VyY2VHcmFwaGljKCkgY29uc3QKLXsKLSAgICByZXR1
cm4gKm1fYnVpbHRpbkVmZmVjdHMuZ2V0KEZpbHRlckVmZmVjdDo6c291cmNlR3JhcGhpY05hbWUo
KSk7CisgICAgc3RhY2sucmVtb3ZlTGFzdCgpOworICAgIHJldHVybiB0cnVlOwogfQogCi1GaWx0
ZXJFZmZlY3QmIFNWR0ZpbHRlckJ1aWxkZXI6OnNvdXJjZUFscGhhKCkgY29uc3QKK3N0YXRpYyBi
b29sIGFwcGVuZEdyYXBoVG9FeHByZXNzaW9uKGNvbnN0IFNWR0ZpbHRlckVmZmVjdHNHcmFwaCYg
Z3JhcGgsIGNvbnN0IEZpbHRlckVmZmVjdEdlb21ldHJ5TWFwJiBlZmZlY3RHZW9tZXRyeU1hcCwg
U1ZHRmlsdGVyRXhwcmVzc2lvbiYgZXhwcmVzc2lvbikKIHsKLSAgICByZXR1cm4gKm1fYnVpbHRp
bkVmZmVjdHMuZ2V0KEZpbHRlckVmZmVjdDo6c291cmNlQWxwaGFOYW1lKCkpOwotfQorICAgIGlm
ICghZ3JhcGgubGFzdE5vZGUoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogCi12b2lkIFNWR0Zp
bHRlckJ1aWxkZXI6OmFkZE5hbWVkRWZmZWN0KGNvbnN0IEF0b21TdHJpbmcmIGlkLCBSZWY8Rmls
dGVyRWZmZWN0PiYmIGVmZmVjdCkKLXsKLSAgICBpZiAoaWQuaXNFbXB0eSgpKSB7Ci0gICAgICAg
IG1fbGFzdEVmZmVjdCA9IFdURk1vdmUoZWZmZWN0KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
KyAgICBGaWx0ZXJFZmZlY3RWZWN0b3Igc3RhY2s7CisgICAgaWYgKCFhcHBlbmRTdWJHcmFwaFRv
RXhwcmVzc2lvbihncmFwaCwgZWZmZWN0R2VvbWV0cnlNYXAsICpncmFwaC5sYXN0Tm9kZSgpLCBz
dGFjaywgMCwgZXhwcmVzc2lvbikpCisgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGlmICht
X2J1aWx0aW5FZmZlY3RzLmNvbnRhaW5zKGlkKSkKLSAgICAgICAgcmV0dXJuOworICAgIGlmIChl
eHByZXNzaW9uLnNpemUoKSA+IG1heFRvdGFsTnVtYmVyRmlsdGVyRWZmZWN0cykKKyAgICAgICAg
cmV0dXJuIGZhbHNlOwogCi0gICAgbV9sYXN0RWZmZWN0ID0gV1RGTW92ZShlZmZlY3QpOwotICAg
IG1fbmFtZWRFZmZlY3RzLnNldChpZCwgUmVmIHsgKm1fbGFzdEVmZmVjdCB9KTsKKyAgICBleHBy
ZXNzaW9uLnJldmVyc2UoKTsKKyAgICBleHByZXNzaW9uLnNocmlua1RvRml0KCk7CisgICAgcmV0
dXJuIHRydWU7CiB9CiAKLVJlZlB0cjxGaWx0ZXJFZmZlY3Q+IFNWR0ZpbHRlckJ1aWxkZXI6Om5h
bWVkRWZmZWN0KGNvbnN0IEF0b21TdHJpbmcmIGlkKSBjb25zdAorc3RkOjpvcHRpb25hbDxTVkdG
aWx0ZXJFeHByZXNzaW9uPiBTVkdGaWx0ZXJCdWlsZGVyOjpidWlsZEZpbHRlckV4cHJlc3Npb24o
U1ZHRmlsdGVyRWxlbWVudCYgZmlsdGVyRWxlbWVudCkKIHsKLSAgICBpZiAoaWQuaXNFbXB0eSgp
KSB7Ci0gICAgICAgIGlmIChtX2xhc3RFZmZlY3QpCi0gICAgICAgICAgICByZXR1cm4gbV9sYXN0
RWZmZWN0OwotCi0gICAgICAgIHJldHVybiAmc291cmNlR3JhcGhpYygpOwotICAgIH0KLQotICAg
IGlmIChtX2J1aWx0aW5FZmZlY3RzLmNvbnRhaW5zKGlkKSkKLSAgICAgICAgcmV0dXJuIG1fYnVp
bHRpbkVmZmVjdHMuZ2V0KGlkKTsKLQotICAgIHJldHVybiBtX25hbWVkRWZmZWN0cy5nZXQoaWQp
OwotfQorICAgIGlmIChmaWx0ZXJFbGVtZW50LmNvdW50Q2hpbGROb2RlcygpID4gbWF4Q291bnRD
aGlsZE5vZGVzKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwogCi1zdGQ6Om9wdGlvbmFs
PEZpbHRlckVmZmVjdFZlY3Rvcj4gU1ZHRmlsdGVyQnVpbGRlcjo6bmFtZWRFZmZlY3RzKFNwYW48
Y29uc3QgQXRvbVN0cmluZz4gbmFtZXMpIGNvbnN0Ci17Ci0gICAgRmlsdGVyRWZmZWN0VmVjdG9y
IGVmZmVjdHM7CisgICAgU1ZHRmlsdGVyRWZmZWN0c0dyYXBoIGdyYXBoKFNvdXJjZUdyYXBoaWM6
OmNyZWF0ZSgpLCBTb3VyY2VBbHBoYTo6Y3JlYXRlKCkpOworICAgIEZpbHRlckVmZmVjdEdlb21l
dHJ5TWFwIGVmZmVjdEdlb21ldHJ5TWFwOwogCi0gICAgZWZmZWN0cy5yZXNlcnZlSW5pdGlhbENh
cGFjaXR5KG5hbWVzLnNpemUoKSk7CisgICAgZm9yIChhdXRvJiBlZmZlY3RFbGVtZW50IDogY2hp
bGRyZW5PZlR5cGU8U1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzPihmaWx0ZXJF
bGVtZW50KSkgeworICAgICAgICBhdXRvIGlucHV0cyA9IGdyYXBoLmdldE5hbWVkTm9kZXMoZWZm
ZWN0RWxlbWVudC5maWx0ZXJFZmZlY3RJbnB1dHNOYW1lcygpKTsKKyAgICAgICAgaWYgKCFpbnB1
dHMpCisgICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwogCi0gICAgZm9yIChhdXRvJiBu
YW1lIDogbmFtZXMpIHsKLSAgICAgICAgYXV0byBlZmZlY3QgPSBuYW1lZEVmZmVjdChuYW1lKTsK
KyAgICAgICAgYXV0byBlZmZlY3QgPSBlZmZlY3RFbGVtZW50LmZpbHRlckVmZmVjdCgqdGhpcywg
KmlucHV0cyk7CiAgICAgICAgIGlmICghZWZmZWN0KQogICAgICAgICAgICAgcmV0dXJuIHN0ZDo6
bnVsbG9wdDsKIAotICAgICAgICBlZmZlY3RzLnVuY2hlY2tlZEFwcGVuZChlZmZlY3QucmVsZWFz
ZU5vbk51bGwoKSk7Ci0gICAgfQorICAgICAgICBpZiAoYXV0byBmbGFncyA9IGVmZmVjdEdlb21l
dHJ5RmxhZ3NGb3JFbGVtZW50KGVmZmVjdEVsZW1lbnQpKSB7CisgICAgICAgICAgICBhdXRvIGVm
ZmVjdEJvdW5kYXJpZXMgPSBTVkdMZW5ndGhDb250ZXh0OjpyZXNvbHZlUmVjdGFuZ2xlPFNWR0Zp
bHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcz4oJmVmZmVjdEVsZW1lbnQsIG1fcHJpbWl0
aXZlVW5pdHMsIG1fdGFyZ2V0Qm91bmRpbmdCb3gpOworICAgICAgICAgICAgZWZmZWN0R2VvbWV0
cnlNYXAuYWRkKCplZmZlY3QsIEZpbHRlckVmZmVjdEdlb21ldHJ5KGVmZmVjdEJvdW5kYXJpZXMs
IGZsYWdzKSk7CisgICAgICAgIH0KIAotICAgIHJldHVybiBlZmZlY3RzOwotfQorI2lmIEVOQUJM
RShERVNUSU5BVElPTl9DT0xPUl9TUEFDRV9MSU5FQVJfU1JHQikKKyAgICAgICAgaWYgKGNvbG9y
SW50ZXJwb2xhdGlvbkZvckVsZW1lbnQoZWZmZWN0RWxlbWVudCkgPT0gQ29sb3JJbnRlcnBvbGF0
aW9uOjpMaW5lYXJSR0IpCisgICAgICAgICAgICBlZmZlY3QtPnNldE9wZXJhdGluZ0NvbG9yU3Bh
Y2UoRGVzdGluYXRpb25Db2xvclNwYWNlOjpMaW5lYXJTUkdCKCkpOworI2VuZGlmCiAKLXZvaWQg
U1ZHRmlsdGVyQnVpbGRlcjo6c2V0RWZmZWN0SW5wdXRzKEZpbHRlckVmZmVjdCYgZWZmZWN0LCBG
aWx0ZXJFZmZlY3RWZWN0b3ImJiBpbnB1dHMpCi17Ci0gICAgbV9pbnB1dHNNYXAuc2V0KHsgZWZm
ZWN0IH0sIFdURk1vdmUoaW5wdXRzKSk7Ci19CisgICAgICAgIGlmIChhdXRvIHJlbmRlcmVyID0g
ZWZmZWN0RWxlbWVudC5yZW5kZXJlcigpKQorICAgICAgICAgICAgbV9lZmZlY3RSZW5kZXJlci5h
ZGQocmVuZGVyZXIsIGVmZmVjdC5nZXQoKSk7CiAKLXZvaWQgU1ZHRmlsdGVyQnVpbGRlcjo6YXBw
ZW5kRWZmZWN0VG9FZmZlY3RSZW5kZXJlcihGaWx0ZXJFZmZlY3QmIGVmZmVjdCwgUmVuZGVyT2Jq
ZWN0JiBvYmplY3QpCi17Ci0gICAgbV9lZmZlY3RSZW5kZXJlci5hZGQoJm9iamVjdCwgJmVmZmVj
dCk7Ci19CisgICAgICAgIGdyYXBoLmFkZE5hbWVkTm9kZShlZmZlY3RFbGVtZW50LnJlc3VsdCgp
LCB7ICplZmZlY3QgfSk7CisgICAgICAgIGdyYXBoLnNldE5vZGVJbnB1dHMoKmVmZmVjdCwgV1RG
TW92ZSgqaW5wdXRzKSk7CisgICAgfQogCi1zdGQ6Om9wdGlvbmFsPEZpbHRlckVmZmVjdEdlb21l
dHJ5PiBTVkdGaWx0ZXJCdWlsZGVyOjplZmZlY3RHZW9tZXRyeShGaWx0ZXJFZmZlY3QmIGVmZmVj
dCkgY29uc3QKLXsKLSAgICBhdXRvIGl0ID0gbV9lZmZlY3RHZW9tZXRyeU1hcC5maW5kKGVmZmVj
dCk7Ci0gICAgaWYgKGl0ICE9IG1fZWZmZWN0R2VvbWV0cnlNYXAuZW5kKCkpCi0gICAgICAgIHJl
dHVybiBpdC0+dmFsdWU7Ci0gICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICBTVkdGaWx0ZXJF
eHByZXNzaW9uIGV4cHJlc3Npb247CisgICAgaWYgKCFhcHBlbmRHcmFwaFRvRXhwcmVzc2lvbihn
cmFwaCwgZWZmZWN0R2VvbWV0cnlNYXAsIGV4cHJlc3Npb24pKQorICAgICAgICByZXR1cm4gc3Rk
OjpudWxsb3B0OworCisgICAgcmV0dXJuIGV4cHJlc3Npb247CiB9CiAKLWJvb2wgU1ZHRmlsdGVy
QnVpbGRlcjo6YnVpbGRFZmZlY3RFeHByZXNzaW9uKEZpbHRlckVmZmVjdCYgZWZmZWN0LCBGaWx0
ZXJFZmZlY3RWZWN0b3ImIHN0YWNrLCB1bnNpZ25lZCBsZXZlbCwgU1ZHRmlsdGVyRXhwcmVzc2lv
biYgZXhwcmVzc2lvbikgY29uc3QKK3N0YXRpYyBJbnRPdXRzZXRzIGNhbGN1bGF0ZVN1YkdyYXBo
T3V0c2V0cyhjb25zdCBTVkdGaWx0ZXJQcmltaXRpdmVzR3JhcGgmIGdyYXBoLCBTVkdGaWx0ZXJQ
cmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXMmIHByaW1pdGl2ZSwgVmVjdG9yPFJlZjxTVkdGaWx0
ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM+PiYgc3RhY2ssIGNvbnN0IEZsb2F0UmVjdCYg
dGFyZ2V0Qm91bmRpbmdCb3gsIFNWR1VuaXRUeXBlczo6U1ZHVW5pdFR5cGUgcHJpbWl0aXZlVW5p
dHMpCiB7CiAgICAgLy8gQSBjeWNsZSBpcyBkZXRlY3RlZC4KLSAgICBpZiAoc3RhY2suY29udGFp
bnNJZihbJl0oYXV0byYgaXRlbSkgeyByZXR1cm4gaXRlbS5wdHIoKSA9PSAmZWZmZWN0OyB9KSkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChzdGFjay5jb250YWluc0lmKFsmXShhdXRv
JiBpdGVtKSB7IHJldHVybiBpdGVtLnB0cigpID09ICZwcmltaXRpdmU7IH0pKQorICAgICAgICBy
ZXR1cm4geyB9OwogCi0gICAgc3RhY2suYXBwZW5kKGVmZmVjdCk7Ci0gICAgCi0gICAgZXhwcmVz
c2lvbi5hcHBlbmQoeyBlZmZlY3QsIGVmZmVjdEdlb21ldHJ5KGVmZmVjdCksIGxldmVsIH0pOwor
ICAgIHN0YWNrLmFwcGVuZChwcmltaXRpdmUpOwogCi0gICAgZm9yIChhdXRvJiBpbnB1dCA6IG1f
aW5wdXRzTWFwLmdldChlZmZlY3QpKSB7Ci0gICAgICAgIGlmICghYnVpbGRFZmZlY3RFeHByZXNz
aW9uKGlucHV0LCBzdGFjaywgbGV2ZWwgKyAxLCBleHByZXNzaW9uKSkKLSAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICB9CisgICAgSW50T3V0c2V0cyBvdXRzZXRzOworICAgIGZvciAoYXV0
byYgaW5wdXQgOiBncmFwaC5nZXROb2RlSW5wdXRzKHByaW1pdGl2ZSkpCisgICAgICAgIG91dHNl
dHMgKz0gY2FsY3VsYXRlU3ViR3JhcGhPdXRzZXRzKGdyYXBoLCBpbnB1dCwgc3RhY2ssIHRhcmdl
dEJvdW5kaW5nQm94LCBwcmltaXRpdmVVbml0cyk7CisgICAgb3V0c2V0cyArPSBwcmltaXRpdmUu
b3V0c2V0cyh0YXJnZXRCb3VuZGluZ0JveCwgcHJpbWl0aXZlVW5pdHMpOwogCiAgICAgQVNTRVJU
KCFzdGFjay5pc0VtcHR5KCkpOwotICAgIEFTU0VSVChzdGFjay5sYXN0KCkucHRyKCkgPT0gJmVm
ZmVjdCk7CisgICAgQVNTRVJUKHN0YWNrLmxhc3QoKS5wdHIoKSA9PSAmcHJpbWl0aXZlKTsKIAog
ICAgIHN0YWNrLnJlbW92ZUxhc3QoKTsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gb3V0
c2V0czsKIH0KIAotYm9vbCBTVkdGaWx0ZXJCdWlsZGVyOjpidWlsZEV4cHJlc3Npb24oU1ZHRmls
dGVyRXhwcmVzc2lvbiYgZXhwcmVzc2lvbikgY29uc3QKK3N0YXRpYyBJbnRPdXRzZXRzIGNhbGN1
bGF0ZUdyYXBoT3V0c2V0cyhjb25zdCBTVkdGaWx0ZXJQcmltaXRpdmVzR3JhcGgmIGdyYXBoLCBj
b25zdCBGbG9hdFJlY3QmIHRhcmdldEJvdW5kaW5nQm94LCBTVkdVbml0VHlwZXM6OlNWR1VuaXRU
eXBlIHByaW1pdGl2ZVVuaXRzKQogewotICAgIGlmICghbV9sYXN0RWZmZWN0KQotICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgaWYgKCFncmFwaC5sYXN0Tm9kZSgpKQorICAgICAgICByZXR1cm4g
eyB9OworICAgIAorICAgIFZlY3RvcjxSZWY8U1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRy
aWJ1dGVzPj4gc3RhY2s7CisgICAgcmV0dXJuIGNhbGN1bGF0ZVN1YkdyYXBoT3V0c2V0cyhncmFw
aCwgKmdyYXBoLmxhc3ROb2RlKCksIHN0YWNrLCB0YXJnZXRCb3VuZGluZ0JveCwgcHJpbWl0aXZl
VW5pdHMpOworfQogCi0gICAgRmlsdGVyRWZmZWN0VmVjdG9yIHN0YWNrOwotICAgIGlmICghYnVp
bGRFZmZlY3RFeHByZXNzaW9uKCptX2xhc3RFZmZlY3QsIHN0YWNrLCAwLCBleHByZXNzaW9uKSkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOworSW50T3V0c2V0cyBTVkdGaWx0ZXJCdWlsZGVyOjpjYWxj
dWxhdGVGaWx0ZXJPdXRzZXRzKFNWR0ZpbHRlckVsZW1lbnQmIGZpbHRlckVsZW1lbnQpCit7Cisg
ICAgaWYgKGZpbHRlckVsZW1lbnQuY291bnRDaGlsZE5vZGVzKCkgPiBtYXhDb3VudENoaWxkTm9k
ZXMpCisgICAgICAgIHJldHVybiB7IH07CiAKLSAgICBpZiAoZXhwcmVzc2lvbi5zaXplKCkgPiBt
YXhUb3RhbE51bWJlckZpbHRlckVmZmVjdHMpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBT
VkdGaWx0ZXJQcmltaXRpdmVzR3JhcGggZ3JhcGg7CiAKLSAgICBleHByZXNzaW9uLnJldmVyc2Uo
KTsKLSAgICBleHByZXNzaW9uLnNocmlua1RvRml0KCk7Ci0gICAgcmV0dXJuIHRydWU7CisgICAg
Zm9yIChhdXRvJiBlZmZlY3RFbGVtZW50IDogY2hpbGRyZW5PZlR5cGU8U1ZHRmlsdGVyUHJpbWl0
aXZlU3RhbmRhcmRBdHRyaWJ1dGVzPihmaWx0ZXJFbGVtZW50KSkgeworICAgICAgICAvLyBXZSBz
aG91bGQgbm90IGJlIHN0cmljdCBhYm91dCBub3QgZmluZGluZyB0aGUgaW5wdXQgcHJpbWl0aXZl
cyBoZXJlIGJlY2F1c2UgU291cmNlR3JhcGhpYyBhbmQgU291cmNlQWxwaGEgZG8gbm90IGhhdmUg
cHJpbWl0aXZlcy4KKyAgICAgICAgYXV0byBpbnB1dHMgPSBncmFwaC5nZXROYW1lZE5vZGVzKGVm
ZmVjdEVsZW1lbnQuZmlsdGVyRWZmZWN0SW5wdXRzTmFtZXMoKSkudmFsdWVfb3IoU1ZHRmlsdGVy
UHJpbWl0aXZlc0dyYXBoOjpOb2RlVmVjdG9yKCkpOworICAgICAgICBncmFwaC5hZGROYW1lZE5v
ZGUoZWZmZWN0RWxlbWVudC5yZXN1bHQoKSwgeyBlZmZlY3RFbGVtZW50IH0pOworICAgICAgICBn
cmFwaC5zZXROb2RlSW5wdXRzKGVmZmVjdEVsZW1lbnQsIFdURk1vdmUoaW5wdXRzKSk7CisgICAg
fQorCisgICAgcmV0dXJuIGNhbGN1bGF0ZUdyYXBoT3V0c2V0cyhncmFwaCwgbV90YXJnZXRCb3Vu
ZGluZ0JveCwgbV9wcmltaXRpdmVVbml0cyk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRl
ckJ1aWxkZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRl
ckJ1aWxkZXIuaAppbmRleCBjOTkxMDJlNzBiZTA0MjM0ZGQ2YjI2MzM4YWUzMDE5MDVlNjEwMWMx
Li5kZGY2MGU5MTczNjU0ODIwZGNlZTIwNDFkN2VjMTMxNDVjMjBjMTA2IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXJCdWlsZGVyLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyQnVpbGRlci5o
CkBAIC0yMSwxMyArMjEsOSBAQAogCiAjcHJhZ21hIG9uY2UKIAotI2luY2x1ZGUgIkZpbHRlckVm
ZmVjdC5oIgotI2luY2x1ZGUgIkZpbHRlckVmZmVjdFZlY3Rvci5oIgogI2luY2x1ZGUgIlNWR0Zp
bHRlckV4cHJlc3Npb24uaCIKICNpbmNsdWRlICJTVkdVbml0VHlwZXMuaCIKICNpbmNsdWRlIDx3
dGYvSGFzaE1hcC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0F0b21TdHJpbmdIYXNoLmg+Ci0jaW5j
bHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAt
MzgsNDUgKzM0LDIxIEBAIGNsYXNzIFNWR0ZpbHRlckVsZW1lbnQ7CiBjbGFzcyBTVkdGaWx0ZXJC
dWlsZGVyIHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKLSAgICBTVkdG
aWx0ZXJCdWlsZGVyKCkgPSBkZWZhdWx0OworICAgIFNWR0ZpbHRlckJ1aWxkZXIoY29uc3QgRmxv
YXRSZWN0JiB0YXJnZXRCb3VuZGluZ0JveCwgU1ZHVW5pdFR5cGVzOjpTVkdVbml0VHlwZSBwcmlt
aXRpdmVVbml0cyA9IFNWR1VuaXRUeXBlczo6U1ZHX1VOSVRfVFlQRV9VU0VSU1BBQ0VPTlVTRSk7
CiAKLSAgICB2b2lkIHNldFRhcmdldEJvdW5kaW5nQm94KGNvbnN0IEZsb2F0UmVjdCYgcikgeyBt
X3RhcmdldEJvdW5kaW5nQm94ID0gcjsgfQogICAgIEZsb2F0UmVjdCB0YXJnZXRCb3VuZGluZ0Jv
eCgpIGNvbnN0IHsgcmV0dXJuIG1fdGFyZ2V0Qm91bmRpbmdCb3g7IH0KLSAgICAKICAgICBTVkdV
bml0VHlwZXM6OlNWR1VuaXRUeXBlIHByaW1pdGl2ZVVuaXRzKCkgY29uc3QgeyByZXR1cm4gbV9w
cmltaXRpdmVVbml0czsgfQotICAgIHZvaWQgc2V0UHJpbWl0aXZlVW5pdHMoU1ZHVW5pdFR5cGVz
OjpTVkdVbml0VHlwZSB1bml0cykgeyBtX3ByaW1pdGl2ZVVuaXRzID0gdW5pdHM7IH0KIAotICAg
IC8vIFJlcXVpcmVkIHRvIGNoYW5nZSB0aGUgYXR0cmlidXRlcyBvZiBhIGZpbHRlciBkdXJpbmcg
YW4gc3ZnQXR0cmlidXRlQ2hhbmdlZC4KLSAgICB2b2lkIGFwcGVuZEVmZmVjdFRvRWZmZWN0UmVu
ZGVyZXIoRmlsdGVyRWZmZWN0JiwgUmVuZGVyT2JqZWN0Jik7Ci0gICAgaW5saW5lIEZpbHRlckVm
ZmVjdCogZWZmZWN0QnlSZW5kZXJlcihSZW5kZXJPYmplY3QqIG9iamVjdCkgeyByZXR1cm4gbV9l
ZmZlY3RSZW5kZXJlci5nZXQob2JqZWN0KTsgfQorICAgIHN0ZDo6b3B0aW9uYWw8U1ZHRmlsdGVy
RXhwcmVzc2lvbj4gYnVpbGRGaWx0ZXJFeHByZXNzaW9uKFNWR0ZpbHRlckVsZW1lbnQmKTsKKyAg
ICBJbnRPdXRzZXRzIGNhbGN1bGF0ZUZpbHRlck91dHNldHMoU1ZHRmlsdGVyRWxlbWVudCYpOwog
Ci0gICAgdm9pZCBzZXR1cEJ1aWx0aW5FZmZlY3RzKFJlZjxGaWx0ZXJFZmZlY3Q+IHNvdXJjZUdy
YXBoaWMpOwotICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGJ1aWxkRmlsdGVyRWZmZWN0cyhTVkdG
aWx0ZXJFbGVtZW50Jik7Ci0gICAgYm9vbCBidWlsZEV4cHJlc3Npb24oU1ZHRmlsdGVyRXhwcmVz
c2lvbiYpIGNvbnN0OworICAgIC8vIFJlcXVpcmVkIHRvIGNoYW5nZSB0aGUgYXR0cmlidXRlcyBv
ZiBhIGZpbHRlciBkdXJpbmcgYW4gc3ZnQXR0cmlidXRlQ2hhbmdlZC4KKyAgICBGaWx0ZXJFZmZl
Y3QqIGVmZmVjdEJ5UmVuZGVyZXIoUmVuZGVyT2JqZWN0KiBvYmplY3QpIHsgcmV0dXJuIG1fZWZm
ZWN0UmVuZGVyZXIuZ2V0KG9iamVjdCk7IH0KIAogcHJpdmF0ZToKLSAgICBGaWx0ZXJFZmZlY3Qm
IHNvdXJjZUdyYXBoaWMoKSBjb25zdDsKLSAgICBGaWx0ZXJFZmZlY3QmIHNvdXJjZUFscGhhKCkg
Y29uc3Q7Ci0KLSAgICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBuYW1lZEVmZmVjdChjb25zdCBBdG9t
U3RyaW5nJikgY29uc3Q7Ci0gICAgc3RkOjpvcHRpb25hbDxGaWx0ZXJFZmZlY3RWZWN0b3I+IG5h
bWVkRWZmZWN0cyhTcGFuPGNvbnN0IEF0b21TdHJpbmc+KSBjb25zdDsKLQotICAgIHZvaWQgYWRk
TmFtZWRFZmZlY3QoY29uc3QgQXRvbVN0cmluZyYgaWQsIFJlZjxGaWx0ZXJFZmZlY3Q+JiYpOwot
ICAgIHZvaWQgc2V0RWZmZWN0SW5wdXRzKEZpbHRlckVmZmVjdCYsIEZpbHRlckVmZmVjdFZlY3Rv
ciYmIGlucHV0cyk7Ci0KLSAgICBzdGQ6Om9wdGlvbmFsPEZpbHRlckVmZmVjdEdlb21ldHJ5PiBl
ZmZlY3RHZW9tZXRyeShGaWx0ZXJFZmZlY3QmKSBjb25zdDsKLSAgICBib29sIGJ1aWxkRWZmZWN0
RXhwcmVzc2lvbihGaWx0ZXJFZmZlY3QmLCBGaWx0ZXJFZmZlY3RWZWN0b3ImIHN0YWNrLCB1bnNp
Z25lZCBsZXZlbCwgU1ZHRmlsdGVyRXhwcmVzc2lvbiYpIGNvbnN0OwotCi0gICAgSGFzaE1hcDxB
dG9tU3RyaW5nLCBSZWY8RmlsdGVyRWZmZWN0Pj4gbV9idWlsdGluRWZmZWN0czsKLSAgICBIYXNo
TWFwPEF0b21TdHJpbmcsIFJlZjxGaWx0ZXJFZmZlY3Q+PiBtX25hbWVkRWZmZWN0czsKICAgICBI
YXNoTWFwPFJlbmRlck9iamVjdCosIEZpbHRlckVmZmVjdCo+IG1fZWZmZWN0UmVuZGVyZXI7Ci0g
ICAgSGFzaE1hcDxSZWY8RmlsdGVyRWZmZWN0PiwgRmlsdGVyRWZmZWN0VmVjdG9yPiBtX2lucHV0
c01hcDsKLQotICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IG1fbGFzdEVmZmVjdDsKLQogICAgIEZs
b2F0UmVjdCBtX3RhcmdldEJvdW5kaW5nQm94OwogICAgIFNWR1VuaXRUeXBlczo6U1ZHVW5pdFR5
cGUgbV9wcmltaXRpdmVVbml0cyB7IFNWR1VuaXRUeXBlczo6U1ZHX1VOSVRfVFlQRV9VU0VSU1BB
Q0VPTlVTRSB9OwotICAgIEZpbHRlckVmZmVjdEdlb21ldHJ5TWFwIG1fZWZmZWN0R2VvbWV0cnlN
YXA7CiB9OwogICAgIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyRXhwcmVzc2lvbi5oIGIvU291
cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyRXhwcmVzc2lvbi5oCmlu
ZGV4IDNmYjA1ZWZjZWViY2E1ZGFjYmYwMmM4MmJhODcxODg2YThkZWQwN2YuLmI1YjQ2ZDExN2Yw
ZjgyMDJlYmRmYzczNGU1YmNjYTI1NTdjYTA5YjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlckV4cHJlc3Npb24uaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXJFeHByZXNzaW9uLmgKQEAgLTI1
LDYgKzI1LDcgQEAKIAogI3ByYWdtYSBvbmNlCiAKKyNpbmNsdWRlICJGaWx0ZXJFZmZlY3RHZW9t
ZXRyeS5oIgogI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4K
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmls
dGVyR3JhcGguaCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRl
ckdyYXBoLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uZjg3N2ZlMTc2ZDRjYWJlMDI4NjY0ODBkYjZiNTI0MTgwZTA2
MWU5MwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0
ZXJzL1NWR0ZpbHRlckdyYXBoLmgKQEAgLTAsMCArMSwxMzEgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMjIgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJT
b3VyY2VBbHBoYS5oIgorI2luY2x1ZGUgIlNvdXJjZUdyYXBoaWMuaCIKKyNpbmNsdWRlIDx3dGYv
dGV4dC9BdG9tU3RyaW5nSGFzaC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEZpbHRlckVmZmVjdDsKK2NsYXNzIFNWR0Zp
bHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczsKKwordGVtcGxhdGU8dHlwZW5hbWUgTm9k
ZVR5cGU+CitjbGFzcyBTVkdGaWx0ZXJHcmFwaCB7CitwdWJsaWM6CisgICAgdXNpbmcgTm9kZVZl
Y3RvciA9IFZlY3RvcjxSZWY8Tm9kZVR5cGU+PjsKKworICAgIFNWR0ZpbHRlckdyYXBoKCkgPSBk
ZWZhdWx0OworCisgICAgU1ZHRmlsdGVyR3JhcGgoUmVmPE5vZGVUeXBlPiYmIHNvdXJjZUdyYXBo
aWMsIFJlZjxOb2RlVHlwZT4mJiBzb3VyY2VBbHBoYSkKKyAgICB7CisgICAgICAgIG1fYnVpbHRp
bk5vZGVzLmFkZChTb3VyY2VHcmFwaGljOjplZmZlY3ROYW1lKCksIFdURk1vdmUoc291cmNlR3Jh
cGhpYykpOworICAgICAgICBtX2J1aWx0aW5Ob2Rlcy5hZGQoU291cmNlQWxwaGE6OmVmZmVjdE5h
bWUoKSwgV1RGTW92ZShzb3VyY2VBbHBoYSkpOworCisgICAgICAgIHNldE5vZGVJbnB1dHMoKnRo
aXMtPnNvdXJjZUFscGhhKCksIE5vZGVWZWN0b3IgeyAqdGhpcy0+c291cmNlR3JhcGhpYygpIH0p
OworICAgIH0KKworICAgIE5vZGVUeXBlKiBzb3VyY2VHcmFwaGljKCkgY29uc3QKKyAgICB7Cisg
ICAgICAgIHJldHVybiBtX2J1aWx0aW5Ob2Rlcy5nZXQoRmlsdGVyRWZmZWN0Ojpzb3VyY2VHcmFw
aGljTmFtZSgpKTsKKyAgICB9CisKKyAgICBOb2RlVHlwZSogc291cmNlQWxwaGEoKSBjb25zdAor
ICAgIHsKKyAgICAgICAgcmV0dXJuIG1fYnVpbHRpbk5vZGVzLmdldChGaWx0ZXJFZmZlY3Q6OnNv
dXJjZUFscGhhTmFtZSgpKTsKKyAgICB9CisKKyAgICB2b2lkIGFkZE5hbWVkTm9kZShjb25zdCBB
dG9tU3RyaW5nJiBpZCwgUmVmPE5vZGVUeXBlPiYmIG5vZGUpCisgICAgeworICAgICAgICBpZiAo
aWQuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICBtX2xhc3ROb2RlID0gV1RGTW92ZShub2RlKTsK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChtX2J1aWx0aW5O
b2Rlcy5jb250YWlucyhpZCkpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgbV9sYXN0
Tm9kZSA9IFdURk1vdmUobm9kZSk7CisgICAgICAgIG1fbmFtZWROb2Rlcy5zZXQoaWQsIFJlZiB7
ICptX2xhc3ROb2RlIH0pOworICAgIH0KKworICAgIFJlZlB0cjxOb2RlVHlwZT4gZ2V0TmFtZWRO
b2RlKGNvbnN0IEF0b21TdHJpbmcmIGlkKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKGlkLmlz
RW1wdHkoKSkgeworICAgICAgICAgICAgaWYgKG1fbGFzdE5vZGUpCisgICAgICAgICAgICAgICAg
cmV0dXJuIG1fbGFzdE5vZGU7CisKKyAgICAgICAgICAgIHJldHVybiBzb3VyY2VHcmFwaGljKCk7
CisgICAgICAgIH0KKworICAgICAgICBpZiAobV9idWlsdGluTm9kZXMuY29udGFpbnMoaWQpKQor
ICAgICAgICAgICAgcmV0dXJuIG1fYnVpbHRpbk5vZGVzLmdldChpZCk7CisKKyAgICAgICAgcmV0
dXJuIG1fbmFtZWROb2Rlcy5nZXQoaWQpOworICAgIH0KKworICAgIHN0ZDo6b3B0aW9uYWw8Tm9k
ZVZlY3Rvcj4gZ2V0TmFtZWROb2RlcyhTcGFuPGNvbnN0IEF0b21TdHJpbmc+IG5hbWVzKSBjb25z
dAorICAgIHsKKyAgICAgICAgTm9kZVZlY3RvciBub2RlczsKKworICAgICAgICBub2Rlcy5yZXNl
cnZlSW5pdGlhbENhcGFjaXR5KG5hbWVzLnNpemUoKSk7CisKKyAgICAgICAgZm9yIChhdXRvJiBu
YW1lIDogbmFtZXMpIHsKKyAgICAgICAgICAgIGF1dG8gbm9kZSA9IGdldE5hbWVkTm9kZShuYW1l
KTsKKyAgICAgICAgICAgIGlmICghbm9kZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjpu
dWxsb3B0OworCisgICAgICAgICAgICBub2Rlcy51bmNoZWNrZWRBcHBlbmQobm9kZS5yZWxlYXNl
Tm9uTnVsbCgpKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBub2RlczsKKyAgICB9CisK
KyAgICB2b2lkIHNldE5vZGVJbnB1dHMoTm9kZVR5cGUmIG5vZGUsIE5vZGVWZWN0b3ImJiBpbnB1
dHMpCisgICAgeworICAgICAgICBtX25vZGVJbnB1dHMuc2V0KHsgbm9kZSB9LCBXVEZNb3ZlKGlu
cHV0cykpOworICAgIH0KKworICAgIE5vZGVWZWN0b3IgZ2V0Tm9kZUlucHV0cyhOb2RlVHlwZSYg
bm9kZSkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX25vZGVJbnB1dHMuZ2V0KG5vZGUp
OworICAgIH0KKworICAgIE5vZGVUeXBlKiBsYXN0Tm9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fbGFz
dE5vZGUuZ2V0KCk7IH0KKworcHJpdmF0ZToKKyAgICBIYXNoTWFwPEF0b21TdHJpbmcsIFJlZjxO
b2RlVHlwZT4+IG1fYnVpbHRpbk5vZGVzOworICAgIEhhc2hNYXA8QXRvbVN0cmluZywgUmVmPE5v
ZGVUeXBlPj4gbV9uYW1lZE5vZGVzOworICAgIEhhc2hNYXA8UmVmPE5vZGVUeXBlPiwgTm9kZVZl
Y3Rvcj4gbV9ub2RlSW5wdXRzOworICAgIFJlZlB0cjxOb2RlVHlwZT4gbV9sYXN0Tm9kZTsKK307
CisKK3VzaW5nIFNWR0ZpbHRlckVmZmVjdHNHcmFwaCA9IFNWR0ZpbHRlckdyYXBoPEZpbHRlckVm
ZmVjdD47Cit1c2luZyBTVkdGaWx0ZXJQcmltaXRpdmVzR3JhcGggPSBTVkdGaWx0ZXJHcmFwaDxT
VkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM+OworCit9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>