<?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>138285</bug_id>
          
          <creation_ts>2014-11-01 16:00:06 -0700</creation_ts>
          <short_desc>Support modern range loops over CSSValueList</short_desc>
          <delta_ts>2014-11-03 14:22:40 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>CSS</component>
          <version>528+ (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></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Chris Dumez">cdumez</reporter>
          <assigned_to name="Chris Dumez">cdumez</assigned_to>
          <cc>benjamin</cc>
    
    <cc>commit-queue</cc>
    
    <cc>kling</cc>
    
    <cc>koivisto</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1045544</commentid>
    <comment_count>0</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2014-11-01 16:00:06 -0700</bug_when>
    <thetext>We should support modern range loops over CSSValueList and kill the custom CSSValueListInspector / CSSValueListIterator classes to modernize the code a bit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1045553</commentid>
    <comment_count>1</comment_count>
      <attachid>240798</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2014-11-01 18:10:02 -0700</bug_when>
    <thetext>Created attachment 240798
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1045555</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-11-01 18:11:24 -0700</bug_when>
    <thetext>Attachment 240798 did not pass style-queue:


ERROR: Source/WebCore/css/CSSToStyleMap.cpp:546:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/WebCore/css/DeprecatedStyleBuilder.cpp:1571:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Total errors found: 2 in 9 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1045559</commentid>
    <comment_count>3</comment_count>
      <attachid>240800</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2014-11-01 18:35:08 -0700</bug_when>
    <thetext>Created attachment 240800
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1045560</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-11-01 18:37:36 -0700</bug_when>
    <thetext>Attachment 240800 did not pass style-queue:


ERROR: Source/WebCore/css/CSSToStyleMap.cpp:546:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/WebCore/css/DeprecatedStyleBuilder.cpp:1571:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Total errors found: 2 in 9 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1045748</commentid>
    <comment_count>5</comment_count>
      <attachid>240856</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2014-11-03 09:08:09 -0800</bug_when>
    <thetext>Created attachment 240856
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1045749</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-11-03 09:09:47 -0800</bug_when>
    <thetext>Attachment 240856 did not pass style-queue:


ERROR: Source/WebCore/css/CSSToStyleMap.cpp:546:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/WebCore/css/DeprecatedStyleBuilder.cpp:1530:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Total errors found: 2 in 9 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1045812</commentid>
    <comment_count>7</comment_count>
      <attachid>240856</attachid>
    <who name="Andreas Kling">kling</who>
    <bug_when>2014-11-03 12:03:03 -0800</bug_when>
    <thetext>Comment on attachment 240856
Patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1045821</commentid>
    <comment_count>8</comment_count>
      <attachid>240867</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2014-11-03 12:25:44 -0800</bug_when>
    <thetext>Created attachment 240867
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1045822</commentid>
    <comment_count>9</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-11-03 12:27:50 -0800</bug_when>
    <thetext>Attachment 240867 did not pass style-queue:


ERROR: Source/WebCore/css/CSSToStyleMap.cpp:546:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/WebCore/css/DeprecatedStyleBuilder.cpp:1530:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Total errors found: 2 in 10 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1045830</commentid>
    <comment_count>10</comment_count>
      <attachid>240867</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-11-03 12:48:18 -0800</bug_when>
    <thetext>Comment on attachment 240867
Patch

Clearing flags on attachment: 240867

Committed r175487: &lt;http://trac.webkit.org/changeset/175487&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1045831</commentid>
    <comment_count>11</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-11-03 12:48:23 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1045854</commentid>
    <comment_count>12</comment_count>
      <attachid>240867</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2014-11-03 14:20:22 -0800</bug_when>
    <thetext>Comment on attachment 240867
Patch

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

&gt; Source/WebCore/css/StyleResolver.cpp:2037
&gt; +    ASSERT(it != values.end());

arf. This should be it == values.end(), my bad. will fix now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1045857</commentid>
    <comment_count>13</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2014-11-03 14:22:40 -0800</bug_when>
    <thetext>(In reply to comment #12)
&gt; Comment on attachment 240867 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=240867&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/css/StyleResolver.cpp:2037
&gt; &gt; +    ASSERT(it != values.end());
&gt; 
&gt; arf. This should be it == values.end(), my bad. will fix now.

Landed assertion fix in &lt;http://trac.webkit.org/changeset/175490&gt;.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>240798</attachid>
            <date>2014-11-01 18:10:02 -0700</date>
            <delta_ts>2014-11-01 18:35:05 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-138285-20141101181011.patch</filename>
            <type>text/plain</type>
            <size>51775</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTc1NDU0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYjJjODdmOTJlN2ZhNTdh
MmQzOTYwYmU5N2I0ZGExMGU0NzMzZWIxYi4uOWE3ZDVkNThhZGRjN2Y5YWNhOGZlY2FiZDAwMmEx
YzQzYzMxZDFkOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE3IEBACisyMDE0LTExLTAxICBDaHJp
cyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgU3VwcG9ydCBtb2Rlcm4gcmFu
Z2UgbG9vcHMgb3ZlciBDU1NWYWx1ZUxpc3QKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTEzODI4NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIEFkZCBzdXBwb3J0IGZvciBtb2Rlcm4gcmFuZ2UgbG9vcHMgb3Zl
ciBDU1NWYWx1ZUxpc3Qgb2JqZWN0cy4KKyAgICAgICAgUG9ydCB0aGUgY29kZSBiYXNlIHRvIHVz
aW5nIHJhbmdlIGxvb3BzIGZvciBDU1NWYWx1ZUxpc3Qgb2JqZWN0cyBhbmQKKyAgICAgICAgZHJv
cCB0aGUgQ1NTVmFsdWVMaXN0SW5zcGVjdG9yIC8gQ1NTVmFsdWVMaXN0SXRlcmF0b3IgY2xhc3Nl
cyBhcyB0aGV5CisgICAgICAgIGFyZSBubyBsb25nZXIgbmVlZGVkLgorCisgICAgICAgIE5vIG5l
dyB0ZXN0cywgbm8gYmVoYXZpb3IgY2hhbmdlLgorCiAyMDE0LTExLTAxICBTYW0gV2VpbmlnICA8
c2FtQHdlYmtpdC5vcmc+CiAKICAgICAgICAgTW92ZSB0aGUgLXdlYmtpdC10cmFuc2Zvcm0gcHJv
cGVydHkgdG8gdGhlIG5ldyBTdHlsZUJ1aWxkZXIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9DU1NUb1N0eWxlTWFwLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NUb1N0eWxlTWFw
LmNwcAppbmRleCAzMDYxOTBhOGMzNWYzNGE2ZjgxZDM5MWM4YmRmNzQ4OTRhMTgyYjRhLi40NGE1
NzYyZTM1MmNlNGVmODhjM2UwOTc2ODIyNzc2N2IwOTA0MDJjIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9jc3MvQ1NTVG9TdHlsZU1hcC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NT
U1RvU3R5bGVNYXAuY3BwCkBAIC0zMCw2ICszMCw5IEBACiAKICNpbmNsdWRlICJBbmltYXRpb24u
aCIKICNpbmNsdWRlICJDU1NCb3JkZXJJbWFnZVNsaWNlVmFsdWUuaCIKKyNpbmNsdWRlICJDU1NJ
bWFnZUdlbmVyYXRvclZhbHVlLmgiCisjaW5jbHVkZSAiQ1NTSW1hZ2VTZXRWYWx1ZS5oIgorI2lu
Y2x1ZGUgIkNTU0ltYWdlVmFsdWUuaCIKICNpbmNsdWRlICJDU1NQcmltaXRpdmVWYWx1ZS5oIgog
I2luY2x1ZGUgIkNTU1ByaW1pdGl2ZVZhbHVlTWFwcGluZ3MuaCIKICNpbmNsdWRlICJDU1NUaW1p
bmdGdW5jdGlvblZhbHVlLmgiCkBAIC02Miw3ICs2NSw3IEBAIGJvb2wgQ1NTVG9TdHlsZU1hcDo6
dXNlU1ZHWm9vbVJ1bGVzKCkgY29uc3QKICAgICByZXR1cm4gbV9yZXNvbHZlci0+dXNlU1ZHWm9v
bVJ1bGVzKCk7CiB9CiAKLVBhc3NSZWZQdHI8U3R5bGVJbWFnZT4gQ1NTVG9TdHlsZU1hcDo6c3R5
bGVJbWFnZShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SWQsIENTU1ZhbHVlKiB2YWx1ZSkKK1Bhc3NS
ZWZQdHI8U3R5bGVJbWFnZT4gQ1NTVG9TdHlsZU1hcDo6c3R5bGVJbWFnZShDU1NQcm9wZXJ0eUlE
IHByb3BlcnR5SWQsIENTU1ZhbHVlJiB2YWx1ZSkKIHsKICAgICByZXR1cm4gbV9yZXNvbHZlci0+
c3R5bGVJbWFnZShwcm9wZXJ0eUlkLCB2YWx1ZSk7CiB9CkBAIC0xNTYsNyArMTU5LDcgQEAgdm9p
ZCBDU1NUb1N0eWxlTWFwOjptYXBGaWxsSW1hZ2UoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eSwgRmls
bExheWVyKiBsYXllciwgQ1NTVmEKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGxheWVy
LT5zZXRJbWFnZShzdHlsZUltYWdlKHByb3BlcnR5LCB2YWx1ZSkpOworICAgIGxheWVyLT5zZXRJ
bWFnZShzdHlsZUltYWdlKHByb3BlcnR5LCAqdmFsdWUpKTsKIH0KIAogdm9pZCBDU1NUb1N0eWxl
TWFwOjptYXBGaWxsUmVwZWF0WChDU1NQcm9wZXJ0eUlELCBGaWxsTGF5ZXIqIGxheWVyLCBDU1NW
YWx1ZSogdmFsdWUpCkBAIC0zMjIsMzIgKzMyNSwzMCBAQCB2b2lkIENTU1RvU3R5bGVNYXA6Om1h
cEZpbGxNYXNrU291cmNlVHlwZShDU1NQcm9wZXJ0eUlELCBGaWxsTGF5ZXIqIGxheWVyLCBDU1NW
YQogICAgIGxheWVyLT5zZXRNYXNrU291cmNlVHlwZSh0eXBlKTsKIH0KIAotdm9pZCBDU1NUb1N0
eWxlTWFwOjptYXBBbmltYXRpb25EZWxheShBbmltYXRpb24qIGFuaW1hdGlvbiwgQ1NTVmFsdWUq
IHZhbHVlKQordm9pZCBDU1NUb1N0eWxlTWFwOjptYXBBbmltYXRpb25EZWxheShBbmltYXRpb24q
IGFuaW1hdGlvbiwgQ1NTVmFsdWUmIHZhbHVlKQogewotICAgIGlmICh2YWx1ZS0+aXNJbml0aWFs
VmFsdWUoKSkgeworICAgIGlmICh2YWx1ZS5pc0luaXRpYWxWYWx1ZSgpKSB7CiAgICAgICAgIGFu
aW1hdGlvbi0+c2V0RGVsYXkoQW5pbWF0aW9uOjppbml0aWFsQW5pbWF0aW9uRGVsYXkoKSk7CiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpZiAoIWlzPENTU1ByaW1pdGl2ZVZhbHVlPigq
dmFsdWUpKQorICAgIGlmICghaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVlKSkKICAgICAgICAg
cmV0dXJuOwogCi0gICAgQ1NTUHJpbWl0aXZlVmFsdWUmIHByaW1pdGl2ZVZhbHVlID0gZG93bmNh
c3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSk7Ci0gICAgYW5pbWF0aW9uLT5zZXREZWxheShw
cmltaXRpdmVWYWx1ZS5jb21wdXRlVGltZTxkb3VibGUsIENTU1ByaW1pdGl2ZVZhbHVlOjpTZWNv
bmRzPigpKTsKKyAgICBhbmltYXRpb24tPnNldERlbGF5KGRvd25jYXN0PENTU1ByaW1pdGl2ZVZh
bHVlPih2YWx1ZSkuY29tcHV0ZVRpbWU8ZG91YmxlLCBDU1NQcmltaXRpdmVWYWx1ZTo6U2Vjb25k
cz4oKSk7CiB9CiAKLXZvaWQgQ1NTVG9TdHlsZU1hcDo6bWFwQW5pbWF0aW9uRGlyZWN0aW9uKEFu
aW1hdGlvbiogbGF5ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKK3ZvaWQgQ1NTVG9TdHlsZU1hcDo6bWFw
QW5pbWF0aW9uRGlyZWN0aW9uKEFuaW1hdGlvbiogbGF5ZXIsIENTU1ZhbHVlJiB2YWx1ZSkKIHsK
LSAgICBpZiAodmFsdWUtPmlzSW5pdGlhbFZhbHVlKCkpIHsKKyAgICBpZiAodmFsdWUuaXNJbml0
aWFsVmFsdWUoKSkgewogICAgICAgICBsYXllci0+c2V0RGlyZWN0aW9uKEFuaW1hdGlvbjo6aW5p
dGlhbEFuaW1hdGlvbkRpcmVjdGlvbigpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAg
IGlmICghaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSkpCisgICAgaWYgKCFpczxDU1NQcmlt
aXRpdmVWYWx1ZT4odmFsdWUpKQogICAgICAgICByZXR1cm47CiAKLSAgICBDU1NQcmltaXRpdmVW
YWx1ZSYgcHJpbWl0aXZlVmFsdWUgPSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVl
KTsKLSAgICBzd2l0Y2ggKHByaW1pdGl2ZVZhbHVlLmdldFZhbHVlSUQoKSkgeworICAgIHN3aXRj
aCAoZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVlKS5nZXRWYWx1ZUlEKCkpIHsKICAg
ICBjYXNlIENTU1ZhbHVlTm9ybWFsOgogICAgICAgICBsYXllci0+c2V0RGlyZWN0aW9uKEFuaW1h
dGlvbjo6QW5pbWF0aW9uRGlyZWN0aW9uTm9ybWFsKTsKICAgICAgICAgYnJlYWs7CkBAIC0zNjUs
MzIgKzM2NiwzMCBAQCB2b2lkIENTU1RvU3R5bGVNYXA6Om1hcEFuaW1hdGlvbkRpcmVjdGlvbihB
bmltYXRpb24qIGxheWVyLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgfQogfQogCi12b2lkIENTU1Rv
U3R5bGVNYXA6Om1hcEFuaW1hdGlvbkR1cmF0aW9uKEFuaW1hdGlvbiogYW5pbWF0aW9uLCBDU1NW
YWx1ZSogdmFsdWUpCit2b2lkIENTU1RvU3R5bGVNYXA6Om1hcEFuaW1hdGlvbkR1cmF0aW9uKEFu
aW1hdGlvbiogYW5pbWF0aW9uLCBDU1NWYWx1ZSYgdmFsdWUpCiB7Ci0gICAgaWYgKHZhbHVlLT5p
c0luaXRpYWxWYWx1ZSgpKSB7CisgICAgaWYgKHZhbHVlLmlzSW5pdGlhbFZhbHVlKCkpIHsKICAg
ICAgICAgYW5pbWF0aW9uLT5zZXREdXJhdGlvbihBbmltYXRpb246OmluaXRpYWxBbmltYXRpb25E
dXJhdGlvbigpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmICghaXM8Q1NTUHJp
bWl0aXZlVmFsdWU+KCp2YWx1ZSkpCisgICAgaWYgKCFpczxDU1NQcmltaXRpdmVWYWx1ZT4odmFs
dWUpKQogICAgICAgICByZXR1cm47CiAKLSAgICBDU1NQcmltaXRpdmVWYWx1ZSYgcHJpbWl0aXZl
VmFsdWUgPSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlKTsKLSAgICBhbmltYXRp
b24tPnNldER1cmF0aW9uKHByaW1pdGl2ZVZhbHVlLmNvbXB1dGVUaW1lPGRvdWJsZSwgQ1NTUHJp
bWl0aXZlVmFsdWU6OlNlY29uZHM+KCkpOworICAgIGFuaW1hdGlvbi0+c2V0RHVyYXRpb24oZG93
bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVlKS5jb21wdXRlVGltZTxkb3VibGUsIENTU1By
aW1pdGl2ZVZhbHVlOjpTZWNvbmRzPigpKTsKIH0KIAotdm9pZCBDU1NUb1N0eWxlTWFwOjptYXBB
bmltYXRpb25GaWxsTW9kZShBbmltYXRpb24qIGxheWVyLCBDU1NWYWx1ZSogdmFsdWUpCit2b2lk
IENTU1RvU3R5bGVNYXA6Om1hcEFuaW1hdGlvbkZpbGxNb2RlKEFuaW1hdGlvbiogbGF5ZXIsIENT
U1ZhbHVlJiB2YWx1ZSkKIHsKLSAgICBpZiAodmFsdWUtPmlzSW5pdGlhbFZhbHVlKCkpIHsKKyAg
ICBpZiAodmFsdWUuaXNJbml0aWFsVmFsdWUoKSkgewogICAgICAgICBsYXllci0+c2V0RmlsbE1v
ZGUoQW5pbWF0aW9uOjppbml0aWFsQW5pbWF0aW9uRmlsbE1vZGUoKSk7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAKLSAgICBpZiAoIWlzPENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpKQorICAg
IGlmICghaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVlKSkKICAgICAgICAgcmV0dXJuOwogCi0g
ICAgQ1NTUHJpbWl0aXZlVmFsdWUmIHByaW1pdGl2ZVZhbHVlID0gZG93bmNhc3Q8Q1NTUHJpbWl0
aXZlVmFsdWU+KCp2YWx1ZSk7Ci0gICAgc3dpdGNoIChwcmltaXRpdmVWYWx1ZS5nZXRWYWx1ZUlE
KCkpIHsKKyAgICBzd2l0Y2ggKGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPih2YWx1ZSkuZ2V0
VmFsdWVJRCgpKSB7CiAgICAgY2FzZSBDU1NWYWx1ZU5vbmU6CiAgICAgICAgIGxheWVyLT5zZXRG
aWxsTW9kZShBbmltYXRpb25GaWxsTW9kZU5vbmUpOwogICAgICAgICBicmVhazsKQEAgLTQwOCw2
NyArNDA3LDY2IEBAIHZvaWQgQ1NTVG9TdHlsZU1hcDo6bWFwQW5pbWF0aW9uRmlsbE1vZGUoQW5p
bWF0aW9uKiBsYXllciwgQ1NTVmFsdWUqIHZhbHVlKQogICAgIH0KIH0KIAotdm9pZCBDU1NUb1N0
eWxlTWFwOjptYXBBbmltYXRpb25JdGVyYXRpb25Db3VudChBbmltYXRpb24qIGFuaW1hdGlvbiwg
Q1NTVmFsdWUqIHZhbHVlKQordm9pZCBDU1NUb1N0eWxlTWFwOjptYXBBbmltYXRpb25JdGVyYXRp
b25Db3VudChBbmltYXRpb24qIGFuaW1hdGlvbiwgQ1NTVmFsdWUmIHZhbHVlKQogewotICAgIGlm
ICh2YWx1ZS0+aXNJbml0aWFsVmFsdWUoKSkgeworICAgIGlmICh2YWx1ZS5pc0luaXRpYWxWYWx1
ZSgpKSB7CiAgICAgICAgIGFuaW1hdGlvbi0+c2V0SXRlcmF0aW9uQ291bnQoQW5pbWF0aW9uOjpp
bml0aWFsQW5pbWF0aW9uSXRlcmF0aW9uQ291bnQoKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9
CiAKLSAgICBpZiAoIWlzPENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpKQorICAgIGlmICghaXM8
Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVlKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgQ1NTUHJp
bWl0aXZlVmFsdWUmIHByaW1pdGl2ZVZhbHVlID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+
KCp2YWx1ZSk7CisgICAgYXV0byYgcHJpbWl0aXZlVmFsdWUgPSBkb3duY2FzdDxDU1NQcmltaXRp
dmVWYWx1ZT4odmFsdWUpOwogICAgIGlmIChwcmltaXRpdmVWYWx1ZS5nZXRWYWx1ZUlEKCkgPT0g
Q1NTVmFsdWVJbmZpbml0ZSkKICAgICAgICAgYW5pbWF0aW9uLT5zZXRJdGVyYXRpb25Db3VudChB
bmltYXRpb246Okl0ZXJhdGlvbkNvdW50SW5maW5pdGUpOwogICAgIGVsc2UKICAgICAgICAgYW5p
bWF0aW9uLT5zZXRJdGVyYXRpb25Db3VudChwcmltaXRpdmVWYWx1ZS5nZXRGbG9hdFZhbHVlKCkp
OwogfQogCi12b2lkIENTU1RvU3R5bGVNYXA6Om1hcEFuaW1hdGlvbk5hbWUoQW5pbWF0aW9uKiBs
YXllciwgQ1NTVmFsdWUqIHZhbHVlKQordm9pZCBDU1NUb1N0eWxlTWFwOjptYXBBbmltYXRpb25O
YW1lKEFuaW1hdGlvbiogbGF5ZXIsIENTU1ZhbHVlJiB2YWx1ZSkKIHsKLSAgICBpZiAodmFsdWUt
PmlzSW5pdGlhbFZhbHVlKCkpIHsKKyAgICBpZiAodmFsdWUuaXNJbml0aWFsVmFsdWUoKSkgewog
ICAgICAgICBsYXllci0+c2V0TmFtZShBbmltYXRpb246OmluaXRpYWxBbmltYXRpb25OYW1lKCkp
OwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKCFpczxDU1NQcmltaXRpdmVWYWx1
ZT4oKnZhbHVlKSkKKyAgICBpZiAoIWlzPENTU1ByaW1pdGl2ZVZhbHVlPih2YWx1ZSkpCiAgICAg
ICAgIHJldHVybjsKIAotICAgIENTU1ByaW1pdGl2ZVZhbHVlJiBwcmltaXRpdmVWYWx1ZSA9IGRv
d25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpOworICAgIGF1dG8mIHByaW1pdGl2ZVZh
bHVlID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVlKTsKICAgICBpZiAocHJpbWl0
aXZlVmFsdWUuZ2V0VmFsdWVJRCgpID09IENTU1ZhbHVlTm9uZSkKICAgICAgICAgbGF5ZXItPnNl
dElzTm9uZUFuaW1hdGlvbih0cnVlKTsKICAgICBlbHNlCiAgICAgICAgIGxheWVyLT5zZXROYW1l
KHByaW1pdGl2ZVZhbHVlLmdldFN0cmluZ1ZhbHVlKCkpOwogfQogCi12b2lkIENTU1RvU3R5bGVN
YXA6Om1hcEFuaW1hdGlvblBsYXlTdGF0ZShBbmltYXRpb24qIGxheWVyLCBDU1NWYWx1ZSogdmFs
dWUpCit2b2lkIENTU1RvU3R5bGVNYXA6Om1hcEFuaW1hdGlvblBsYXlTdGF0ZShBbmltYXRpb24q
IGxheWVyLCBDU1NWYWx1ZSYgdmFsdWUpCiB7Ci0gICAgaWYgKHZhbHVlLT5pc0luaXRpYWxWYWx1
ZSgpKSB7CisgICAgaWYgKHZhbHVlLmlzSW5pdGlhbFZhbHVlKCkpIHsKICAgICAgICAgbGF5ZXIt
PnNldFBsYXlTdGF0ZShBbmltYXRpb246OmluaXRpYWxBbmltYXRpb25QbGF5U3RhdGUoKSk7CiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpZiAoIWlzPENTU1ByaW1pdGl2ZVZhbHVlPigq
dmFsdWUpKQorICAgIGlmICghaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVlKSkKICAgICAgICAg
cmV0dXJuOwogCi0gICAgQ1NTUHJpbWl0aXZlVmFsdWUmIHByaW1pdGl2ZVZhbHVlID0gZG93bmNh
c3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSk7Ci0gICAgRUFuaW1QbGF5U3RhdGUgcGxheVN0
YXRlID0gKHByaW1pdGl2ZVZhbHVlLmdldFZhbHVlSUQoKSA9PSBDU1NWYWx1ZVBhdXNlZCkgPyBB
bmltUGxheVN0YXRlUGF1c2VkIDogQW5pbVBsYXlTdGF0ZVBsYXlpbmc7CisgICAgRUFuaW1QbGF5
U3RhdGUgcGxheVN0YXRlID0gKGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPih2YWx1ZSkuZ2V0
VmFsdWVJRCgpID09IENTU1ZhbHVlUGF1c2VkKSA/IEFuaW1QbGF5U3RhdGVQYXVzZWQgOiBBbmlt
UGxheVN0YXRlUGxheWluZzsKICAgICBsYXllci0+c2V0UGxheVN0YXRlKHBsYXlTdGF0ZSk7CiB9
CiAKLXZvaWQgQ1NTVG9TdHlsZU1hcDo6bWFwQW5pbWF0aW9uUHJvcGVydHkoQW5pbWF0aW9uKiBh
bmltYXRpb24sIENTU1ZhbHVlKiB2YWx1ZSkKK3ZvaWQgQ1NTVG9TdHlsZU1hcDo6bWFwQW5pbWF0
aW9uUHJvcGVydHkoQW5pbWF0aW9uKiBhbmltYXRpb24sIENTU1ZhbHVlJiB2YWx1ZSkKIHsKLSAg
ICBpZiAodmFsdWUtPmlzSW5pdGlhbFZhbHVlKCkpIHsKKyAgICBpZiAodmFsdWUuaXNJbml0aWFs
VmFsdWUoKSkgewogICAgICAgICBhbmltYXRpb24tPnNldEFuaW1hdGlvbk1vZGUoQW5pbWF0aW9u
OjpBbmltYXRlQWxsKTsKICAgICAgICAgYW5pbWF0aW9uLT5zZXRQcm9wZXJ0eShDU1NQcm9wZXJ0
eUludmFsaWQpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKCFpczxDU1NQcmlt
aXRpdmVWYWx1ZT4oKnZhbHVlKSkKKyAgICBpZiAoIWlzPENTU1ByaW1pdGl2ZVZhbHVlPih2YWx1
ZSkpCiAgICAgICAgIHJldHVybjsKIAotICAgIENTU1ByaW1pdGl2ZVZhbHVlJiBwcmltaXRpdmVW
YWx1ZSA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpOworICAgIGF1dG8mIHBy
aW1pdGl2ZVZhbHVlID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVlKTsKICAgICBp
ZiAocHJpbWl0aXZlVmFsdWUuZ2V0VmFsdWVJRCgpID09IENTU1ZhbHVlQWxsKSB7CiAgICAgICAg
IGFuaW1hdGlvbi0+c2V0QW5pbWF0aW9uTW9kZShBbmltYXRpb246OkFuaW1hdGVBbGwpOwogICAg
ICAgICBhbmltYXRpb24tPnNldFByb3BlcnR5KENTU1Byb3BlcnR5SW52YWxpZCk7CkBAIC00ODEs
MTYgKzQ3OSwxNSBAQCB2b2lkIENTU1RvU3R5bGVNYXA6Om1hcEFuaW1hdGlvblByb3BlcnR5KEFu
aW1hdGlvbiogYW5pbWF0aW9uLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgfQogfQogCi12b2lkIENT
U1RvU3R5bGVNYXA6Om1hcEFuaW1hdGlvblRpbWluZ0Z1bmN0aW9uKEFuaW1hdGlvbiogYW5pbWF0
aW9uLCBDU1NWYWx1ZSogdmFsdWUpCit2b2lkIENTU1RvU3R5bGVNYXA6Om1hcEFuaW1hdGlvblRp
bWluZ0Z1bmN0aW9uKEFuaW1hdGlvbiogYW5pbWF0aW9uLCBDU1NWYWx1ZSYgdmFsdWUpCiB7Ci0g
ICAgaWYgKHZhbHVlLT5pc0luaXRpYWxWYWx1ZSgpKSB7CisgICAgaWYgKHZhbHVlLmlzSW5pdGlh
bFZhbHVlKCkpIHsKICAgICAgICAgYW5pbWF0aW9uLT5zZXRUaW1pbmdGdW5jdGlvbihBbmltYXRp
b246OmluaXRpYWxBbmltYXRpb25UaW1pbmdGdW5jdGlvbigpKTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KIAotICAgIGlmIChpczxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlKSkgewotICAgICAg
ICBDU1NQcmltaXRpdmVWYWx1ZSYgcHJpbWl0aXZlVmFsdWUgPSBkb3duY2FzdDxDU1NQcmltaXRp
dmVWYWx1ZT4oKnZhbHVlKTsKLSAgICAgICAgc3dpdGNoIChwcmltaXRpdmVWYWx1ZS5nZXRWYWx1
ZUlEKCkpIHsKKyAgICBpZiAoaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVlKSkgeworICAgICAg
ICBzd2l0Y2ggKGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPih2YWx1ZSkuZ2V0VmFsdWVJRCgp
KSB7CiAgICAgICAgIGNhc2UgQ1NTVmFsdWVMaW5lYXI6CiAgICAgICAgICAgICBhbmltYXRpb24t
PnNldFRpbWluZ0Z1bmN0aW9uKExpbmVhclRpbWluZ0Z1bmN0aW9uOjpjcmVhdGUoKSk7CiAgICAg
ICAgICAgICBicmVhazsKQEAgLTUxOCwxMSArNTE1LDExIEBAIHZvaWQgQ1NTVG9TdHlsZU1hcDo6
bWFwQW5pbWF0aW9uVGltaW5nRnVuY3Rpb24oQW5pbWF0aW9uKiBhbmltYXRpb24sIENTU1ZhbHVl
KiB2CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpZiAoaXM8Q1NTQ3ViaWNCZXppZXJU
aW1pbmdGdW5jdGlvblZhbHVlPigqdmFsdWUpKSB7Ci0gICAgICAgIENTU0N1YmljQmV6aWVyVGlt
aW5nRnVuY3Rpb25WYWx1ZSYgY3ViaWNUaW1pbmdGdW5jdGlvbiA9IGRvd25jYXN0PENTU0N1Ymlj
QmV6aWVyVGltaW5nRnVuY3Rpb25WYWx1ZT4oKnZhbHVlKTsKKyAgICBpZiAoaXM8Q1NTQ3ViaWNC
ZXppZXJUaW1pbmdGdW5jdGlvblZhbHVlPih2YWx1ZSkpIHsKKyAgICAgICAgYXV0byYgY3ViaWNU
aW1pbmdGdW5jdGlvbiA9IGRvd25jYXN0PENTU0N1YmljQmV6aWVyVGltaW5nRnVuY3Rpb25WYWx1
ZT4odmFsdWUpOwogICAgICAgICBhbmltYXRpb24tPnNldFRpbWluZ0Z1bmN0aW9uKEN1YmljQmV6
aWVyVGltaW5nRnVuY3Rpb246OmNyZWF0ZShjdWJpY1RpbWluZ0Z1bmN0aW9uLngxKCksIGN1Ymlj
VGltaW5nRnVuY3Rpb24ueTEoKSwgY3ViaWNUaW1pbmdGdW5jdGlvbi54MigpLCBjdWJpY1RpbWlu
Z0Z1bmN0aW9uLnkyKCkpKTsKLSAgICB9IGVsc2UgaWYgKGlzPENTU1N0ZXBzVGltaW5nRnVuY3Rp
b25WYWx1ZT4oKnZhbHVlKSkgewotICAgICAgICBDU1NTdGVwc1RpbWluZ0Z1bmN0aW9uVmFsdWUm
IHN0ZXBzVGltaW5nRnVuY3Rpb24gPSBkb3duY2FzdDxDU1NTdGVwc1RpbWluZ0Z1bmN0aW9uVmFs
dWU+KCp2YWx1ZSk7CisgICAgfSBlbHNlIGlmIChpczxDU1NTdGVwc1RpbWluZ0Z1bmN0aW9uVmFs
dWU+KHZhbHVlKSkgeworICAgICAgICBhdXRvJiBzdGVwc1RpbWluZ0Z1bmN0aW9uID0gZG93bmNh
c3Q8Q1NTU3RlcHNUaW1pbmdGdW5jdGlvblZhbHVlPih2YWx1ZSk7CiAgICAgICAgIGFuaW1hdGlv
bi0+c2V0VGltaW5nRnVuY3Rpb24oU3RlcHNUaW1pbmdGdW5jdGlvbjo6Y3JlYXRlKHN0ZXBzVGlt
aW5nRnVuY3Rpb24ubnVtYmVyT2ZTdGVwcygpLCBzdGVwc1RpbWluZ0Z1bmN0aW9uLnN0ZXBBdFN0
YXJ0KCkpKTsKICAgICB9CiB9CkBAIC01NDUsMzMgKzU0MiwzMSBAQCB2b2lkIENTU1RvU3R5bGVN
YXA6Om1hcE5pbmVQaWVjZUltYWdlKENTU1Byb3BlcnR5SUQgcHJvcGVydHksIENTU1ZhbHVlKiB2
YWx1ZSwgTgogICAgIGVsc2UKICAgICAgICAgaW1hZ2VQcm9wZXJ0eSA9IHByb3BlcnR5OwogCi0g
ICAgZm9yICh1bnNpZ25lZCBpID0gMCA7IGkgPCBib3JkZXJJbWFnZS5sZW5ndGgoKTsgKytpKSB7
Ci0gICAgICAgIENTU1ZhbHVlKiBjdXJyZW50ID0gYm9yZGVySW1hZ2UuaXRlbShpKTsKLQotICAg
ICAgICBpZiAoY3VycmVudC0+aXNJbWFnZVZhbHVlKCkgfHwgY3VycmVudC0+aXNJbWFnZUdlbmVy
YXRvclZhbHVlKCkKKyAgICBmb3IgKGF1dG8mIGN1cnJlbnQgOiBib3JkZXJJbWFnZSkgeworICAg
ICAgICBpZiAoaXM8Q1NTSW1hZ2VWYWx1ZT4oY3VycmVudC5nZXQoKSkgfHwgaXM8Q1NTSW1hZ2VH
ZW5lcmF0b3JWYWx1ZT4oY3VycmVudC5nZXQoKSkKICNpZiBFTkFCTEUoQ1NTX0lNQUdFX1NFVCkK
LSAgICAgICAgICAgIHx8IGN1cnJlbnQtPmlzSW1hZ2VTZXRWYWx1ZSgpCisgICAgICAgICAgICB8
fCBpczxDU1NJbWFnZVNldFZhbHVlPihjdXJyZW50LmdldCgpKQogI2VuZGlmCiAgICAgICAgICAg
ICApCi0gICAgICAgICAgICBpbWFnZS5zZXRJbWFnZShzdHlsZUltYWdlKGltYWdlUHJvcGVydHks
IGN1cnJlbnQpKTsKLSAgICAgICAgZWxzZSBpZiAoY3VycmVudC0+aXNCb3JkZXJJbWFnZVNsaWNl
VmFsdWUoKSkKLSAgICAgICAgICAgIG1hcE5pbmVQaWVjZUltYWdlU2xpY2UoY3VycmVudCwgaW1h
Z2UpOwotICAgICAgICBlbHNlIGlmIChpczxDU1NWYWx1ZUxpc3Q+KCpjdXJyZW50KSkgewotICAg
ICAgICAgICAgQ1NTVmFsdWVMaXN0JiBzbGFzaExpc3QgPSBkb3duY2FzdDxDU1NWYWx1ZUxpc3Q+
KCpjdXJyZW50KTsKKyAgICAgICAgICAgIGltYWdlLnNldEltYWdlKHN0eWxlSW1hZ2UoaW1hZ2VQ
cm9wZXJ0eSwgY3VycmVudC5nZXQoKSkpOworICAgICAgICBlbHNlIGlmIChpczxDU1NCb3JkZXJJ
bWFnZVNsaWNlVmFsdWU+KGN1cnJlbnQuZ2V0KCkpKQorICAgICAgICAgICAgbWFwTmluZVBpZWNl
SW1hZ2VTbGljZShjdXJyZW50LmdldCgpLCBpbWFnZSk7CisgICAgICAgIGVsc2UgaWYgKGlzPENT
U1ZhbHVlTGlzdD4oY3VycmVudC5nZXQoKSkpIHsKKyAgICAgICAgICAgIENTU1ZhbHVlTGlzdCYg
c2xhc2hMaXN0ID0gZG93bmNhc3Q8Q1NTVmFsdWVMaXN0PihjdXJyZW50LmdldCgpKTsKICAgICAg
ICAgICAgIC8vIE1hcCBpbiB0aGUgaW1hZ2Ugc2xpY2VzLgotICAgICAgICAgICAgaWYgKHNsYXNo
TGlzdC5pdGVtKDApICYmIHNsYXNoTGlzdC5pdGVtKDApLT5pc0JvcmRlckltYWdlU2xpY2VWYWx1
ZSgpKQotICAgICAgICAgICAgICAgIG1hcE5pbmVQaWVjZUltYWdlU2xpY2Uoc2xhc2hMaXN0Lml0
ZW0oMCksIGltYWdlKTsKKyAgICAgICAgICAgIGlmIChpczxDU1NCb3JkZXJJbWFnZVNsaWNlVmFs
dWU+KHNsYXNoTGlzdC5pdGVtKDApKSkKKyAgICAgICAgICAgICAgICBtYXBOaW5lUGllY2VJbWFn
ZVNsaWNlKCpzbGFzaExpc3QuaXRlbSgwKSwgaW1hZ2UpOwogCiAgICAgICAgICAgICAvLyBNYXAg
aW4gdGhlIGJvcmRlciBzbGljZXMuCiAgICAgICAgICAgICBpZiAoc2xhc2hMaXN0Lml0ZW0oMSkp
Ci0gICAgICAgICAgICAgICAgaW1hZ2Uuc2V0Qm9yZGVyU2xpY2VzKG1hcE5pbmVQaWVjZUltYWdl
UXVhZChzbGFzaExpc3QuaXRlbSgxKSkpOworICAgICAgICAgICAgICAgIGltYWdlLnNldEJvcmRl
clNsaWNlcyhtYXBOaW5lUGllY2VJbWFnZVF1YWQoKnNsYXNoTGlzdC5pdGVtKDEpKSk7CiAKICAg
ICAgICAgICAgIC8vIE1hcCBpbiB0aGUgb3V0c2V0LgogICAgICAgICAgICAgaWYgKHNsYXNoTGlz
dC5pdGVtKDIpKQotICAgICAgICAgICAgICAgIGltYWdlLnNldE91dHNldChtYXBOaW5lUGllY2VJ
bWFnZVF1YWQoc2xhc2hMaXN0Lml0ZW0oMikpKTsKLSAgICAgICAgfSBlbHNlIGlmIChjdXJyZW50
LT5pc1ByaW1pdGl2ZVZhbHVlKCkpIHsKKyAgICAgICAgICAgICAgICBpbWFnZS5zZXRPdXRzZXQo
bWFwTmluZVBpZWNlSW1hZ2VRdWFkKCpzbGFzaExpc3QuaXRlbSgyKSkpOworICAgICAgICB9IGVs
c2UgaWYgKGlzPENTU1ByaW1pdGl2ZVZhbHVlPihjdXJyZW50LmdldCgpKSkgewogICAgICAgICAg
ICAgLy8gU2V0IHRoZSBhcHByb3ByaWF0ZSBydWxlcyBmb3Igc3RyZXRjaC9yb3VuZC9yZXBlYXQg
b2YgdGhlIHNsaWNlcy4KLSAgICAgICAgICAgIG1hcE5pbmVQaWVjZUltYWdlUmVwZWF0KGN1cnJl
bnQsIGltYWdlKTsKKyAgICAgICAgICAgIG1hcE5pbmVQaWVjZUltYWdlUmVwZWF0KGN1cnJlbnQu
Z2V0KCksIGltYWdlKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtNTkwLDEzICs1ODUsMTMgQEAg
dm9pZCBDU1NUb1N0eWxlTWFwOjptYXBOaW5lUGllY2VJbWFnZShDU1NQcm9wZXJ0eUlEIHByb3Bl
cnR5LCBDU1NWYWx1ZSogdmFsdWUsIE4KICAgICB9CiB9CiAKLXZvaWQgQ1NTVG9TdHlsZU1hcDo6
bWFwTmluZVBpZWNlSW1hZ2VTbGljZShDU1NWYWx1ZSogdmFsdWUsIE5pbmVQaWVjZUltYWdlJiBp
bWFnZSkKK3ZvaWQgQ1NTVG9TdHlsZU1hcDo6bWFwTmluZVBpZWNlSW1hZ2VTbGljZShDU1NWYWx1
ZSYgdmFsdWUsIE5pbmVQaWVjZUltYWdlJiBpbWFnZSkKIHsKICAgICBpZiAoIWlzPENTU0JvcmRl
ckltYWdlU2xpY2VWYWx1ZT4odmFsdWUpKQogICAgICAgICByZXR1cm47CiAKICAgICAvLyBSZXRy
aWV2ZSB0aGUgYm9yZGVyIGltYWdlIHZhbHVlLgotICAgIENTU0JvcmRlckltYWdlU2xpY2VWYWx1
ZSYgYm9yZGVySW1hZ2VTbGljZSA9IGRvd25jYXN0PENTU0JvcmRlckltYWdlU2xpY2VWYWx1ZT4o
KnZhbHVlKTsKKyAgICBhdXRvJiBib3JkZXJJbWFnZVNsaWNlID0gZG93bmNhc3Q8Q1NTQm9yZGVy
SW1hZ2VTbGljZVZhbHVlPih2YWx1ZSk7CiAKICAgICAvLyBTZXQgdXAgYSBsZW5ndGggYm94IHRv
IHJlcHJlc2VudCBvdXIgaW1hZ2Ugc2xpY2VzLgogICAgIExlbmd0aEJveCBib3g7CkBAIC02MjMs
NyArNjE4LDcgQEAgdm9pZCBDU1NUb1N0eWxlTWFwOjptYXBOaW5lUGllY2VJbWFnZVNsaWNlKENT
U1ZhbHVlKiB2YWx1ZSwgTmluZVBpZWNlSW1hZ2UmIGltYWcKICAgICBpbWFnZS5zZXRGaWxsKGJv
cmRlckltYWdlU2xpY2UubV9maWxsKTsKIH0KIAotTGVuZ3RoQm94IENTU1RvU3R5bGVNYXA6Om1h
cE5pbmVQaWVjZUltYWdlUXVhZChDU1NWYWx1ZSogdmFsdWUpCitMZW5ndGhCb3ggQ1NTVG9TdHls
ZU1hcDo6bWFwTmluZVBpZWNlSW1hZ2VRdWFkKENTU1ZhbHVlJiB2YWx1ZSkKIHsKICAgICBpZiAo
IWlzPENTU1ByaW1pdGl2ZVZhbHVlPih2YWx1ZSkpCiAgICAgICAgIHJldHVybiBMZW5ndGhCb3go
KTsKQEAgLTYzMiw3ICs2MjcsNyBAQCBMZW5ndGhCb3ggQ1NTVG9TdHlsZU1hcDo6bWFwTmluZVBp
ZWNlSW1hZ2VRdWFkKENTU1ZhbHVlKiB2YWx1ZSkKICAgICBDU1NUb0xlbmd0aENvbnZlcnNpb25E
YXRhIGNvbnZlcnNpb25EYXRhID0gdXNlU1ZHWm9vbVJ1bGVzKCkgPyBtX3Jlc29sdmVyLT5zdGF0
ZSgpLmNzc1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEoKS5jb3B5V2l0aEFkanVzdGVkWm9vbSgxLjBm
KSA6IG1fcmVzb2x2ZXItPnN0YXRlKCkuY3NzVG9MZW5ndGhDb252ZXJzaW9uRGF0YSgpOwogCiAg
ICAgLy8gUmV0cmlldmUgdGhlIHByaW1pdGl2ZSB2YWx1ZS4KLSAgICBDU1NQcmltaXRpdmVWYWx1
ZSYgYm9yZGVyV2lkdGhzID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSk7Cisg
ICAgYXV0byYgYm9yZGVyV2lkdGhzID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVl
KTsKIAogICAgIC8vIFNldCB1cCBhIGxlbmd0aCBib3ggdG8gcmVwcmVzZW50IG91ciBpbWFnZSBz
bGljZXMuCiAgICAgTGVuZ3RoQm94IGJveDsgLy8gRGVmYXVsdHMgdG8gJ2F1dG8nIHNvIHdlIGRv
bid0IGhhdmUgdG8gaGFuZGxlIHRoYXQgZXhwbGljaXRseSBiZWxvdy4KQEAgLTY2OCwxMiArNjYz
LDEyIEBAIExlbmd0aEJveCBDU1NUb1N0eWxlTWFwOjptYXBOaW5lUGllY2VJbWFnZVF1YWQoQ1NT
VmFsdWUqIHZhbHVlKQogICAgIHJldHVybiBib3g7CiB9CiAKLXZvaWQgQ1NTVG9TdHlsZU1hcDo6
bWFwTmluZVBpZWNlSW1hZ2VSZXBlYXQoQ1NTVmFsdWUqIHZhbHVlLCBOaW5lUGllY2VJbWFnZSYg
aW1hZ2UpCit2b2lkIENTU1RvU3R5bGVNYXA6Om1hcE5pbmVQaWVjZUltYWdlUmVwZWF0KENTU1Zh
bHVlJiB2YWx1ZSwgTmluZVBpZWNlSW1hZ2UmIGltYWdlKQogewogICAgIGlmICghaXM8Q1NTUHJp
bWl0aXZlVmFsdWU+KHZhbHVlKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgQ1NTUHJpbWl0aXZl
VmFsdWUmIHByaW1pdGl2ZVZhbHVlID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1
ZSk7CisgICAgQ1NTUHJpbWl0aXZlVmFsdWUmIHByaW1pdGl2ZVZhbHVlID0gZG93bmNhc3Q8Q1NT
UHJpbWl0aXZlVmFsdWU+KHZhbHVlKTsKICAgICBQYWlyKiBwYWlyID0gcHJpbWl0aXZlVmFsdWUu
Z2V0UGFpclZhbHVlKCk7CiAgICAgaWYgKCFwYWlyIHx8ICFwYWlyLT5maXJzdCgpIHx8ICFwYWly
LT5zZWNvbmQoKSkKICAgICAgICAgcmV0dXJuOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
Y3NzL0NTU1RvU3R5bGVNYXAuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NUb1N0eWxlTWFwLmgK
aW5kZXggYjRlY2NjNjc0MzlhMTg1ZDVjYjliZjFhMTkxNjI0MjNhNDM2MjNhZS4uNDQzMDY3OTcy
NDY3OThiMTliZDBhYWEwMGU4MDgwNmM1NWNkNmJlOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvY3NzL0NTU1RvU3R5bGVNYXAuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTVG9TdHls
ZU1hcC5oCkBAIC01OCwyMCArNTgsMjAgQEAgcHVibGljOgogICAgIHZvaWQgbWFwRmlsbFlQb3Np
dGlvbihDU1NQcm9wZXJ0eUlELCBGaWxsTGF5ZXIqLCBDU1NWYWx1ZSopOwogICAgIHZvaWQgbWFw
RmlsbE1hc2tTb3VyY2VUeXBlKENTU1Byb3BlcnR5SUQsIEZpbGxMYXllciosIENTU1ZhbHVlKik7
CiAKLSAgICB2b2lkIG1hcEFuaW1hdGlvbkRlbGF5KEFuaW1hdGlvbiosIENTU1ZhbHVlKik7Ci0g
ICAgdm9pZCBtYXBBbmltYXRpb25EaXJlY3Rpb24oQW5pbWF0aW9uKiwgQ1NTVmFsdWUqKTsKLSAg
ICB2b2lkIG1hcEFuaW1hdGlvbkR1cmF0aW9uKEFuaW1hdGlvbiosIENTU1ZhbHVlKik7Ci0gICAg
dm9pZCBtYXBBbmltYXRpb25GaWxsTW9kZShBbmltYXRpb24qLCBDU1NWYWx1ZSopOwotICAgIHZv
aWQgbWFwQW5pbWF0aW9uSXRlcmF0aW9uQ291bnQoQW5pbWF0aW9uKiwgQ1NTVmFsdWUqKTsKLSAg
ICB2b2lkIG1hcEFuaW1hdGlvbk5hbWUoQW5pbWF0aW9uKiwgQ1NTVmFsdWUqKTsKLSAgICB2b2lk
IG1hcEFuaW1hdGlvblBsYXlTdGF0ZShBbmltYXRpb24qLCBDU1NWYWx1ZSopOwotICAgIHZvaWQg
bWFwQW5pbWF0aW9uUHJvcGVydHkoQW5pbWF0aW9uKiwgQ1NTVmFsdWUqKTsKLSAgICB2b2lkIG1h
cEFuaW1hdGlvblRpbWluZ0Z1bmN0aW9uKEFuaW1hdGlvbiosIENTU1ZhbHVlKik7CisgICAgdm9p
ZCBtYXBBbmltYXRpb25EZWxheShBbmltYXRpb24qLCBDU1NWYWx1ZSYpOworICAgIHZvaWQgbWFw
QW5pbWF0aW9uRGlyZWN0aW9uKEFuaW1hdGlvbiosIENTU1ZhbHVlJik7CisgICAgdm9pZCBtYXBB
bmltYXRpb25EdXJhdGlvbihBbmltYXRpb24qLCBDU1NWYWx1ZSYpOworICAgIHZvaWQgbWFwQW5p
bWF0aW9uRmlsbE1vZGUoQW5pbWF0aW9uKiwgQ1NTVmFsdWUmKTsKKyAgICB2b2lkIG1hcEFuaW1h
dGlvbkl0ZXJhdGlvbkNvdW50KEFuaW1hdGlvbiosIENTU1ZhbHVlJik7CisgICAgdm9pZCBtYXBB
bmltYXRpb25OYW1lKEFuaW1hdGlvbiosIENTU1ZhbHVlJik7CisgICAgdm9pZCBtYXBBbmltYXRp
b25QbGF5U3RhdGUoQW5pbWF0aW9uKiwgQ1NTVmFsdWUmKTsKKyAgICB2b2lkIG1hcEFuaW1hdGlv
blByb3BlcnR5KEFuaW1hdGlvbiosIENTU1ZhbHVlJik7CisgICAgdm9pZCBtYXBBbmltYXRpb25U
aW1pbmdGdW5jdGlvbihBbmltYXRpb24qLCBDU1NWYWx1ZSYpOwogCiAgICAgdm9pZCBtYXBOaW5l
UGllY2VJbWFnZShDU1NQcm9wZXJ0eUlELCBDU1NWYWx1ZSosIE5pbmVQaWVjZUltYWdlJik7Ci0g
ICAgdm9pZCBtYXBOaW5lUGllY2VJbWFnZVNsaWNlKENTU1ZhbHVlKiwgTmluZVBpZWNlSW1hZ2Um
KTsKLSAgICBMZW5ndGhCb3ggbWFwTmluZVBpZWNlSW1hZ2VRdWFkKENTU1ZhbHVlKik7Ci0gICAg
dm9pZCBtYXBOaW5lUGllY2VJbWFnZVJlcGVhdChDU1NWYWx1ZSosIE5pbmVQaWVjZUltYWdlJik7
CisgICAgdm9pZCBtYXBOaW5lUGllY2VJbWFnZVNsaWNlKENTU1ZhbHVlJiwgTmluZVBpZWNlSW1h
Z2UmKTsKKyAgICBMZW5ndGhCb3ggbWFwTmluZVBpZWNlSW1hZ2VRdWFkKENTU1ZhbHVlJik7Cisg
ICAgdm9pZCBtYXBOaW5lUGllY2VJbWFnZVJlcGVhdChDU1NWYWx1ZSYsIE5pbmVQaWVjZUltYWdl
Jik7CiAKIHByaXZhdGU6CiAgICAgLy8gRklYTUU6IFRoZXNlIGFjY2Vzc29ycyBzaG91bGQgYmUg
cmVwbGFjZWQgYnkgYSBSZXNvbHZlU3RhdGUgb2JqZWN0CkBAIC04NCw3ICs4NCw3IEBAIHByaXZh
dGU6CiAgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIGJlIHBhcnQgb2Ygc29tZSBzb3J0IG9mIFN0
eWxlSW1hZ2VDYWNoZSBvYmplY3Qgd2hpY2gKICAgICAvLyBpcyBoZWxkIGJ5IHRoZSBTdHlsZVJl
c29sdmVyLCBhbmQgbGlrZWx5IHByb3ZpZGVkIHRvIHRoaXMgb2JqZWN0CiAgICAgLy8gZHVyaW5n
IHRoZSByZXNvbHZlLgotICAgIFBhc3NSZWZQdHI8U3R5bGVJbWFnZT4gc3R5bGVJbWFnZShDU1NQ
cm9wZXJ0eUlELCBDU1NWYWx1ZSopOworICAgIFBhc3NSZWZQdHI8U3R5bGVJbWFnZT4gc3R5bGVJ
bWFnZShDU1NQcm9wZXJ0eUlELCBDU1NWYWx1ZSYpOwogCiAgICAgU3R5bGVSZXNvbHZlciogbV9y
ZXNvbHZlcjsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTVmFsdWVMaXN0
LmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTVmFsdWVMaXN0LmgKaW5kZXggZjBhZmMzZjJiNzBh
MmI5YWNkZTRkMjY0NjVhNWIzNzllYjc0ZDViOC4uOTkxMjlmOWU1YjdhZGRlNWRlMzlhYTM1MmIw
NjlkZDgyOTAzMDQzNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1ZhbHVlTGlz
dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NWYWx1ZUxpc3QuaApAQCAtMzEsNiArMzEs
OSBAQCBjbGFzcyBDU1NQYXJzZXJWYWx1ZUxpc3Q7CiAKIGNsYXNzIENTU1ZhbHVlTGlzdCA6IHB1
YmxpYyBDU1NWYWx1ZSB7CiBwdWJsaWM6CisgICAgdHlwZWRlZiBWZWN0b3I8UmVmPENTU1ZhbHVl
PiwgND46Oml0ZXJhdG9yIGl0ZXJhdG9yOworICAgIHR5cGVkZWYgVmVjdG9yPFJlZjxDU1NWYWx1
ZT4sIDQ+Ojpjb25zdF9pdGVyYXRvciBjb25zdF9pdGVyYXRvcjsKKwogICAgIHN0YXRpYyBQYXNz
UmVmPENTU1ZhbHVlTGlzdD4gY3JlYXRlQ29tbWFTZXBhcmF0ZWQoKQogICAgIHsKICAgICAgICAg
cmV0dXJuIGFkb3B0UmVmKCpuZXcgQ1NTVmFsdWVMaXN0KENvbW1hU2VwYXJhdG9yKSk7CkBAIC01
NCw2ICs1NywxMSBAQCBwdWJsaWM6CiAgICAgQ1NTVmFsdWUqIGl0ZW1XaXRob3V0Qm91bmRzQ2hl
Y2soc2l6ZV90IGluZGV4KSB7IHJldHVybiAmbV92YWx1ZXNbaW5kZXhdLmdldCgpOyB9CiAgICAg
Y29uc3QgQ1NTVmFsdWUqIGl0ZW1XaXRob3V0Qm91bmRzQ2hlY2soc2l6ZV90IGluZGV4KSBjb25z
dCB7IEFTU0VSVChpbmRleCA8IG1fdmFsdWVzLnNpemUoKSk7IHJldHVybiAmbV92YWx1ZXNbaW5k
ZXhdLmdldCgpOyB9CiAKKyAgICBjb25zdF9pdGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJu
IG1fdmFsdWVzLmJlZ2luKCk7IH0KKyAgICBjb25zdF9pdGVyYXRvciBlbmQoKSBjb25zdCB7IHJl
dHVybiBtX3ZhbHVlcy5lbmQoKTsgfQorICAgIGl0ZXJhdG9yIGJlZ2luKCkgeyByZXR1cm4gbV92
YWx1ZXMuYmVnaW4oKTsgfQorICAgIGl0ZXJhdG9yIGVuZCgpIHsgcmV0dXJuIG1fdmFsdWVzLmVu
ZCgpOyB9CisKICAgICB2b2lkIGFwcGVuZChQYXNzUmVmPENTU1ZhbHVlPik7CiAgICAgdm9pZCBw
cmVwZW5kKFBhc3NSZWY8Q1NTVmFsdWU+KTsKICAgICBib29sIHJlbW92ZUFsbChDU1NWYWx1ZSop
OwpAQCAtOTEsMzggKzk5LDYgQEAgaW5saW5lIHZvaWQgQ1NTVmFsdWVMaXN0OjpwcmVwZW5kKFBh
c3NSZWY8Q1NTVmFsdWU+IHZhbHVlKQogICAgIG1fdmFsdWVzLmluc2VydCgwLCBXVEY6Om1vdmUo
dmFsdWUpKTsKIH0KIAotLy8gT2JqZWN0cyBvZiB0aGlzIGNsYXNzIGFyZSBpbnRlbmRlZCB0byBi
ZSBzdGFjay1hbGxvY2F0ZWQgYW5kIHNjb3BlZCB0byBhIHNpbmdsZSBmdW5jdGlvbi4KLS8vIFBs
ZWFzZSB0YWtlIGNhcmUgbm90IHRvIHBhc3MgdGhlc2UgYXJvdW5kIGFzIHRoZXkgZG8gaG9sZCBv
bnRvIGEgcmF3IHBvaW50ZXIuCi1jbGFzcyBDU1NWYWx1ZUxpc3RJbnNwZWN0b3IgewotcHVibGlj
OgotICAgIENTU1ZhbHVlTGlzdEluc3BlY3RvcihDU1NWYWx1ZSogdmFsdWUpCi0gICAgICAgIDog
bV9saXN0KGlzPENTU1ZhbHVlTGlzdD4odmFsdWUpID8gZG93bmNhc3Q8Q1NTVmFsdWVMaXN0Pih2
YWx1ZSkgOiBudWxscHRyKQotICAgIHsKLSAgICB9Ci0KLSAgICBDU1NWYWx1ZSogaXRlbShzaXpl
X3QgaW5kZXgpIGNvbnN0IHsgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oaW5kZXgg
PCBsZW5ndGgoKSk7IHJldHVybiBtX2xpc3QtPml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soaW5kZXgp
OyB9Ci0gICAgQ1NTVmFsdWUqIGZpcnN0KCkgY29uc3QgeyByZXR1cm4gaXRlbSgwKTsgfQotICAg
IENTU1ZhbHVlKiBzZWNvbmQoKSBjb25zdCB7IHJldHVybiBpdGVtKDEpOyB9Ci0gICAgc2l6ZV90
IGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1fbGlzdCA/IG1fbGlzdC0+bGVuZ3RoKCkgOiAwOyB9
Ci1wcml2YXRlOgotICAgIENTU1ZhbHVlTGlzdCogbV9saXN0OwotfTsKLQotLy8gV3JhcHBlciB0
aGF0IGNhbiBiZSB1c2VkIHRvIGl0ZXJhdGUgb3ZlciBhbnkgQ1NTVmFsdWUuIE5vbi1saXN0IHZh
bHVlcyBhbmQgMCBiZWhhdmUgYXMgemVyby1sZW5ndGggbGlzdHMuCi0vLyBPYmplY3RzIG9mIHRo
aXMgY2xhc3MgYXJlIGludGVuZGVkIHRvIGJlIHN0YWNrLWFsbG9jYXRlZCBhbmQgc2NvcGVkIHRv
IGEgc2luZ2xlIGZ1bmN0aW9uLgotLy8gUGxlYXNlIHRha2UgY2FyZSBub3QgdG8gcGFzcyB0aGVz
ZSBhcm91bmQgYXMgdGhleSBkbyBob2xkIG9udG8gYSByYXcgcG9pbnRlci4KLWNsYXNzIENTU1Zh
bHVlTGlzdEl0ZXJhdG9yIHsKLXB1YmxpYzoKLSAgICBDU1NWYWx1ZUxpc3RJdGVyYXRvcihDU1NW
YWx1ZSogdmFsdWUpIDogbV9pbnNwZWN0b3IodmFsdWUpLCBtX3Bvc2l0aW9uKDApIHsgfQotICAg
IGJvb2wgaGFzTW9yZSgpIGNvbnN0IHsgcmV0dXJuIG1fcG9zaXRpb24gPCBtX2luc3BlY3Rvci5s
ZW5ndGgoKTsgfQotICAgIENTU1ZhbHVlKiB2YWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1faW5zcGVj
dG9yLml0ZW0obV9wb3NpdGlvbik7IH0KLSAgICBib29sIGlzUHJpbWl0aXZlVmFsdWUoKSBjb25z
dCB7IHJldHVybiB2YWx1ZSgpLT5pc1ByaW1pdGl2ZVZhbHVlKCk7IH0KLSAgICB2b2lkIGFkdmFu
Y2UoKSB7IG1fcG9zaXRpb24rKzsgQVNTRVJUKG1fcG9zaXRpb24gPD0gbV9pbnNwZWN0b3IubGVu
Z3RoKCkpO30KLSAgICBzaXplX3QgaW5kZXgoKSBjb25zdCB7IHJldHVybiBtX3Bvc2l0aW9uOyB9
Ci1wcml2YXRlOgotICAgIENTU1ZhbHVlTGlzdEluc3BlY3RvciBtX2luc3BlY3RvcjsKLSAgICBz
aXplX3QgbV9wb3NpdGlvbjsKLX07CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKIFNQRUNJQUxJ
WkVfVFlQRV9UUkFJVFNfQ1NTX1ZBTFVFKENTU1ZhbHVlTGlzdCwgaXNWYWx1ZUxpc3QoKSkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9EZXByZWNhdGVkU3R5bGVCdWlsZGVyLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2Nzcy9EZXByZWNhdGVkU3R5bGVCdWlsZGVyLmNwcAppbmRleCA0MWRh
MzU0YzY5NGE4ZTk3N2ZjY2JlOWFiZTZjZTgxNzFhYzQ1MGQxLi41NzRjZTVjZWM4MDM5ZTJkMzQy
YWZiODVkYjRhZGIyMGE1YTA4NDA4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvRGVw
cmVjYXRlZFN0eWxlQnVpbGRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0RlcHJlY2F0
ZWRTdHlsZUJ1aWxkZXIuY3BwCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSAiQ1NTQXNwZWN0
UmF0aW9WYWx1ZS5oIgogI2luY2x1ZGUgIkNTU0NhbGN1bGF0aW9uVmFsdWUuaCIKICNpbmNsdWRl
ICJDU1NDdXJzb3JJbWFnZVZhbHVlLmgiCisjaW5jbHVkZSAiQ1NTSW1hZ2VHZW5lcmF0b3JWYWx1
ZS5oIgogI2luY2x1ZGUgIkNTU0ltYWdlU2V0VmFsdWUuaCIKICNpbmNsdWRlICJDU1NQcmltaXRp
dmVWYWx1ZS5oIgogI2luY2x1ZGUgIkNTU1ByaW1pdGl2ZVZhbHVlTWFwcGluZ3MuaCIKQEAgLTE2
Myw3ICsxNjQsNyBAQCBwdWJsaWM6CiB0ZW1wbGF0ZSA8U3R5bGVJbWFnZSogKFJlbmRlclN0eWxl
OjoqZ2V0dGVyRnVuY3Rpb24pKCkgY29uc3QsIHZvaWQgKFJlbmRlclN0eWxlOjoqc2V0dGVyRnVu
Y3Rpb24pKFBhc3NSZWZQdHI8U3R5bGVJbWFnZT4pLCBTdHlsZUltYWdlKiAoKmluaXRpYWxGdW5j
dGlvbikoKSwgQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eT4KIGNsYXNzIEFwcGx5UHJvcGVydHlTdHls
ZUltYWdlIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5
SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlKiB2YWx1ZSkgeyAoc3R5
bGVSZXNvbHZlci0+c3R5bGUoKS0+KnNldHRlckZ1bmN0aW9uKShzdHlsZVJlc29sdmVyLT5zdHls
ZUltYWdlKHByb3BlcnR5LCB2YWx1ZSkpOyB9CisgICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShD
U1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSogdmFs
dWUpIHsgKHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPipzZXR0ZXJGdW5jdGlvbikoc3R5bGVSZXNv
bHZlci0+c3R5bGVJbWFnZShwcm9wZXJ0eSwgKnZhbHVlKSk7IH0KICAgICBzdGF0aWMgUHJvcGVy
dHlIYW5kbGVyIGNyZWF0ZUhhbmRsZXIoKQogICAgIHsKICAgICAgICAgUHJvcGVydHlIYW5kbGVy
IGhhbmRsZXIgPSBBcHBseVByb3BlcnR5RGVmYXVsdEJhc2U8U3R5bGVJbWFnZSosIGdldHRlckZ1
bmN0aW9uLCBQYXNzUmVmUHRyPFN0eWxlSW1hZ2U+LCBzZXR0ZXJGdW5jdGlvbiwgU3R5bGVJbWFn
ZSosIGluaXRpYWxGdW5jdGlvbj46OmNyZWF0ZUhhbmRsZXIoKTsKQEAgLTg5MSwxNiArODkyLDE2
IEBAIHB1YmxpYzoKICAgICAgICAgTmluZVBpZWNlSW1hZ2UgaW1hZ2UoZ2V0VmFsdWUoc3R5bGVS
ZXNvbHZlci0+c3R5bGUoKSkpOwogICAgICAgICBzd2l0Y2ggKG1vZGlmaWVyKSB7CiAgICAgICAg
IGNhc2UgT3V0c2V0OgotICAgICAgICAgICAgaW1hZ2Uuc2V0T3V0c2V0KHN0eWxlUmVzb2x2ZXIt
PnN0eWxlTWFwKCktPm1hcE5pbmVQaWVjZUltYWdlUXVhZCh2YWx1ZSkpOworICAgICAgICAgICAg
aW1hZ2Uuc2V0T3V0c2V0KHN0eWxlUmVzb2x2ZXItPnN0eWxlTWFwKCktPm1hcE5pbmVQaWVjZUlt
YWdlUXVhZCgqdmFsdWUpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFJlcGVh
dDoKLSAgICAgICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlTWFwKCktPm1hcE5pbmVQaWVjZUlt
YWdlUmVwZWF0KHZhbHVlLCBpbWFnZSk7CisgICAgICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHls
ZU1hcCgpLT5tYXBOaW5lUGllY2VJbWFnZVJlcGVhdCgqdmFsdWUsIGltYWdlKTsKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICBjYXNlIFNsaWNlOgotICAgICAgICAgICAgc3R5bGVSZXNvbHZl
ci0+c3R5bGVNYXAoKS0+bWFwTmluZVBpZWNlSW1hZ2VTbGljZSh2YWx1ZSwgaW1hZ2UpOworICAg
ICAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGVNYXAoKS0+bWFwTmluZVBpZWNlSW1hZ2VTbGlj
ZSgqdmFsdWUsIGltYWdlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFdpZHRo
OgotICAgICAgICAgICAgaW1hZ2Uuc2V0Qm9yZGVyU2xpY2VzKHN0eWxlUmVzb2x2ZXItPnN0eWxl
TWFwKCktPm1hcE5pbmVQaWVjZUltYWdlUXVhZCh2YWx1ZSkpOworICAgICAgICAgICAgaW1hZ2Uu
c2V0Qm9yZGVyU2xpY2VzKHN0eWxlUmVzb2x2ZXItPnN0eWxlTWFwKCktPm1hcE5pbmVQaWVjZUlt
YWdlUXVhZCgqdmFsdWUpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAg
IHNldFZhbHVlKHN0eWxlUmVzb2x2ZXItPnN0eWxlKCksIGltYWdlKTsKQEAgLTEwMDIsNyArMTAw
Myw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgQ1NTQ3Vyc29ySW1hZ2VWYWx1ZSYg
aW1hZ2UgPSBkb3duY2FzdDxDU1NDdXJzb3JJbWFnZVZhbHVlPigqaXRlbSk7CiAgICAgICAgICAg
ICAgICAgICAgIGlmIChpbWFnZS51cGRhdGVJZlNWR0N1cnNvcklzVXNlZChzdHlsZVJlc29sdmVy
LT5lbGVtZW50KCkpKSAvLyBFbGVtZW50cyB3aXRoIFNWRyBjdXJzb3JzIGFyZSBub3QgYWxsb3dl
ZCB0byBzaGFyZSBzdHlsZS4KICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlUmVzb2x2ZXIt
PnN0eWxlKCktPnNldFVuaXF1ZSgpOwotICAgICAgICAgICAgICAgICAgICBzdHlsZVJlc29sdmVy
LT5zdHlsZSgpLT5hZGRDdXJzb3Ioc3R5bGVSZXNvbHZlci0+c3R5bGVJbWFnZShDU1NQcm9wZXJ0
eUN1cnNvciwgJmltYWdlKSwgaW1hZ2UuaG90U3BvdCgpKTsKKyAgICAgICAgICAgICAgICAgICAg
c3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+YWRkQ3Vyc29yKHN0eWxlUmVzb2x2ZXItPnN0eWxlSW1h
Z2UoQ1NTUHJvcGVydHlDdXJzb3IsIGltYWdlKSwgaW1hZ2UuaG90U3BvdCgpKTsKICAgICAgICAg
ICAgICAgICB9IGVsc2UgaWYgKGlzPENTU1ByaW1pdGl2ZVZhbHVlPigqaXRlbSkpIHsKICAgICAg
ICAgICAgICAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUmIHByaW1pdGl2ZVZhbHVlID0gZG93bmNh
c3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCppdGVtKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKHBy
aW1pdGl2ZVZhbHVlLmlzVmFsdWVJRCgpKQpAQCAtMTA4NCw4ICsxMDg1LDEwIEBAIHB1YmxpYzoK
ICAgICAgICAgfQogCiAgICAgICAgIFRleHREZWNvcmF0aW9uU2tpcCBza2lwID0gUmVuZGVyU3R5
bGU6OmluaXRpYWxUZXh0RGVjb3JhdGlvblNraXAoKTsKLSAgICAgICAgZm9yIChDU1NWYWx1ZUxp
c3RJdGVyYXRvciBpKHZhbHVlKTsgaS5oYXNNb3JlKCk7IGkuYWR2YW5jZSgpKQotICAgICAgICAg
ICAgc2tpcCB8PSB2YWx1ZVRvRGVjb3JhdGlvblNraXAoZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFs
dWU+KCppLnZhbHVlKCkpKTsKKyAgICAgICAgaWYgKGlzPENTU1ZhbHVlTGlzdD4oKnZhbHVlKSkg
eworICAgICAgICAgICAgZm9yIChhdXRvJiBjdXJyZW50VmFsdWUgOiBkb3duY2FzdDxDU1NWYWx1
ZUxpc3Q+KCp2YWx1ZSkpCisgICAgICAgICAgICAgICAgc2tpcCB8PSB2YWx1ZVRvRGVjb3JhdGlv
blNraXAoZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KGN1cnJlbnRWYWx1ZS5nZXQoKSkpOwor
ICAgICAgICB9CiAgICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldFRleHREZWNvcmF0
aW9uU2tpcChza2lwKTsKICAgICB9CiAgICAgc3RhdGljIFByb3BlcnR5SGFuZGxlciBjcmVhdGVI
YW5kbGVyKCkKQEAgLTExNjEsMTAgKzExNjQsMTEgQEAgcHVibGljOgogICAgICAgICB9CiAKICAg
ICAgICAgdW5zaWduZWQgdCA9IDA7Ci0gICAgICAgIGZvciAoQ1NTVmFsdWVMaXN0SXRlcmF0b3Ig
aSh2YWx1ZSk7IGkuaGFzTW9yZSgpOyBpLmFkdmFuY2UoKSkgewotICAgICAgICAgICAgQ1NTVmFs
dWUqIGl0ZW0gPSBpLnZhbHVlKCk7Ci0gICAgICAgICAgICBUZXh0VW5kZXJsaW5lUG9zaXRpb24g
dDIgPSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oKml0ZW0pOwotICAgICAgICAgICAgdCB8
PSB0MjsKKyAgICAgICAgaWYgKGlzPENTU1ZhbHVlTGlzdD4oKnZhbHVlKSkgeworICAgICAgICAg
ICAgZm9yIChhdXRvJiBjdXJyZW50VmFsdWUgOiBkb3duY2FzdDxDU1NWYWx1ZUxpc3Q+KCp2YWx1
ZSkpIHsKKyAgICAgICAgICAgICAgICBUZXh0VW5kZXJsaW5lUG9zaXRpb24gdDIgPSBkb3duY2Fz
dDxDU1NQcmltaXRpdmVWYWx1ZT4oY3VycmVudFZhbHVlLmdldCgpKTsKKyAgICAgICAgICAgICAg
ICB0IHw9IHQyOworICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIHN0eWxlUmVzb2x2
ZXItPnN0eWxlKCktPnNldFRleHRVbmRlcmxpbmVQb3NpdGlvbihzdGF0aWNfY2FzdDxUZXh0VW5k
ZXJsaW5lUG9zaXRpb24+KHQpKTsKICAgICB9CkBAIC0xMzgxLDM1ICsxMzg1LDQxIEBAIHB1Ymxp
YzoKICAgICAgICAgTGVuZ3RoIHdpZHRoOwogICAgICAgICBMZW5ndGggaGVpZ2h0OwogICAgICAg
ICBQYWdlU2l6ZVR5cGUgcGFnZVNpemVUeXBlID0gUEFHRV9TSVpFX0FVVE87Ci0gICAgICAgIENT
U1ZhbHVlTGlzdEluc3BlY3RvciBpbnNwZWN0b3IodmFsdWUpOwotICAgICAgICBzd2l0Y2ggKGlu
c3BlY3Rvci5sZW5ndGgoKSkgeworICAgICAgICBpZiAoIWlzPENTU1ZhbHVlTGlzdD4odmFsdWUp
KQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGF1dG8mIHZhbHVlTGlzdCA9IGRvd25j
YXN0PENTU1ZhbHVlTGlzdD4oKnZhbHVlKTsKKyAgICAgICAgc3dpdGNoICh2YWx1ZUxpc3QubGVu
Z3RoKCkpIHsKICAgICAgICAgY2FzZSAyOiB7CisgICAgICAgICAgICBDU1NWYWx1ZSogZmlyc3RW
YWx1ZSA9IHZhbHVlTGlzdC5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDApOworICAgICAgICAgICAg
Q1NTVmFsdWUqIHNlY29uZFZhbHVlID0gdmFsdWVMaXN0Lml0ZW1XaXRob3V0Qm91bmRzQ2hlY2so
MSk7CiAgICAgICAgICAgICAvLyA8bGVuZ3RoPnsyfSB8IDxwYWdlLXNpemU+IDxvcmllbnRhdGlv
bj4KLSAgICAgICAgICAgIGlmICghaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KCppbnNwZWN0b3IuZmly
c3QoKSkgfHwgIWlzPENTU1ByaW1pdGl2ZVZhbHVlPigqaW5zcGVjdG9yLnNlY29uZCgpKSkKKyAg
ICAgICAgICAgIGlmICghaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KCpmaXJzdFZhbHVlKSB8fCAhaXM8
Q1NTUHJpbWl0aXZlVmFsdWU+KCpzZWNvbmRWYWx1ZSkpCiAgICAgICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUmIGZpcnN0ID0gZG93bmNhc3Q8Q1NTUHJp
bWl0aXZlVmFsdWU+KCppbnNwZWN0b3IuZmlyc3QoKSk7Ci0gICAgICAgICAgICBDU1NQcmltaXRp
dmVWYWx1ZSYgc2Vjb25kID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCppbnNwZWN0b3Iu
c2Vjb25kKCkpOwotICAgICAgICAgICAgaWYgKGZpcnN0LmlzTGVuZ3RoKCkpIHsKKyAgICAgICAg
ICAgIGF1dG8mIGZpcnN0UHJpbWl0aXZlVmFsdWUgPSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1
ZT4oKmZpcnN0VmFsdWUpOworICAgICAgICAgICAgYXV0byYgc2Vjb25kUHJpbWl0aXZlVmFsdWUg
PSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oKnNlY29uZFZhbHVlKTsKKyAgICAgICAgICAg
IGlmIChmaXJzdFByaW1pdGl2ZVZhbHVlLmlzTGVuZ3RoKCkpIHsKICAgICAgICAgICAgICAgICAv
LyA8bGVuZ3RoPnsyfQotICAgICAgICAgICAgICAgIGlmICghc2Vjb25kLmlzTGVuZ3RoKCkpCisg
ICAgICAgICAgICAgICAgaWYgKCFzZWNvbmRQcmltaXRpdmVWYWx1ZS5pc0xlbmd0aCgpKQogICAg
ICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgQ1NTVG9MZW5ndGhDb252
ZXJzaW9uRGF0YSBjb252ZXJzaW9uRGF0YSA9IHN0eWxlUmVzb2x2ZXItPnN0YXRlKCkuY3NzVG9M
ZW5ndGhDb252ZXJzaW9uRGF0YSgpLmNvcHlXaXRoQWRqdXN0ZWRab29tKDEuMGYpOwotICAgICAg
ICAgICAgICAgIHdpZHRoID0gZmlyc3QuY29tcHV0ZUxlbmd0aDxMZW5ndGg+KGNvbnZlcnNpb25E
YXRhKTsKLSAgICAgICAgICAgICAgICBoZWlnaHQgPSBzZWNvbmQuY29tcHV0ZUxlbmd0aDxMZW5n
dGg+KGNvbnZlcnNpb25EYXRhKTsKKyAgICAgICAgICAgICAgICB3aWR0aCA9IGZpcnN0UHJpbWl0
aXZlVmFsdWUuY29tcHV0ZUxlbmd0aDxMZW5ndGg+KGNvbnZlcnNpb25EYXRhKTsKKyAgICAgICAg
ICAgICAgICBoZWlnaHQgPSBzZWNvbmRQcmltaXRpdmVWYWx1ZS5jb21wdXRlTGVuZ3RoPExlbmd0
aD4oY29udmVyc2lvbkRhdGEpOwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAg
ICAvLyA8cGFnZS1zaXplPiA8b3JpZW50YXRpb24+CiAgICAgICAgICAgICAgICAgLy8gVGhlIHZh
bHVlIG9yZGVyIGlzIGd1YXJhbnRlZWQuIFNlZSBDU1NQYXJzZXI6OnBhcnNlU2l6ZVBhcmFtZXRl
ci4KLSAgICAgICAgICAgICAgICBpZiAoIWdldFBhZ2VTaXplRnJvbU5hbWUoJmZpcnN0LCAmc2Vj
b25kLCB3aWR0aCwgaGVpZ2h0KSkKKyAgICAgICAgICAgICAgICBpZiAoIWdldFBhZ2VTaXplRnJv
bU5hbWUoJmZpcnN0UHJpbWl0aXZlVmFsdWUsICZzZWNvbmRQcmltaXRpdmVWYWx1ZSwgd2lkdGgs
IGhlaWdodCkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgIHBhZ2VTaXplVHlwZSA9IFBBR0VfU0laRV9SRVNPTFZFRDsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgMTogeworICAgICAgICAgICAgQ1NTVmFs
dWUqIHZhbHVlID0gdmFsdWVMaXN0Lml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soMCk7CiAgICAgICAg
ICAgICAvLyA8bGVuZ3RoPiB8IGF1dG8gfCA8cGFnZS1zaXplPiB8IFsgcG9ydHJhaXQgfCBsYW5k
c2NhcGVdCi0gICAgICAgICAgICBpZiAoIWlzPENTU1ByaW1pdGl2ZVZhbHVlPigqaW5zcGVjdG9y
LmZpcnN0KCkpKQorICAgICAgICAgICAgaWYgKCFpczxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVl
KSkKICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICBDU1NQcmltaXRpdmVWYWx1
ZSYgcHJpbWl0aXZlVmFsdWUgPSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oKmluc3BlY3Rv
ci5maXJzdCgpKTsKKyAgICAgICAgICAgIGF1dG8mIHByaW1pdGl2ZVZhbHVlID0gZG93bmNhc3Q8
Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSk7CiAgICAgICAgICAgICBpZiAocHJpbWl0aXZlVmFs
dWUuaXNMZW5ndGgoKSkgewogICAgICAgICAgICAgICAgIC8vIDxsZW5ndGg+CiAgICAgICAgICAg
ICAgICAgcGFnZVNpemVUeXBlID0gUEFHRV9TSVpFX1JFU09MVkVEOwpAQCAtMTUzOSw4ICsxNTQ5
LDEwIEBAIHB1YmxpYzoKICAgICAgICAgfQogCiAgICAgICAgIFRleHRFbXBoYXNpc1Bvc2l0aW9u
IHBvc2l0aW9uID0gMDsKLSAgICAgICAgZm9yIChDU1NWYWx1ZUxpc3RJdGVyYXRvciBpKHZhbHVl
KTsgaS5oYXNNb3JlKCk7IGkuYWR2YW5jZSgpKQotICAgICAgICAgICAgcG9zaXRpb24gfD0gdmFs
dWVUb0VtcGhhc2lzUG9zaXRpb24oZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCppLnZhbHVl
KCkpKTsKKyAgICAgICAgaWYgKGlzPENTU1ZhbHVlTGlzdD4oKnZhbHVlKSkgeworICAgICAgICAg
ICAgZm9yIChhdXRvJiBjdXJyZW50VmFsdWUgOiBkb3duY2FzdDxDU1NWYWx1ZUxpc3Q+KCp2YWx1
ZSkpCisgICAgICAgICAgICAgICAgcG9zaXRpb24gfD0gdmFsdWVUb0VtcGhhc2lzUG9zaXRpb24o
ZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KGN1cnJlbnRWYWx1ZS5nZXQoKSkpOworICAgICAg
ICB9CiAgICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldFRleHRFbXBoYXNpc1Bvc2l0
aW9uKHBvc2l0aW9uKTsKICAgICB9CiAgICAgc3RhdGljIFByb3BlcnR5SGFuZGxlciBjcmVhdGVI
YW5kbGVyKCkKQEAgLTE1NTYsNyArMTU2OCw3IEBAIHRlbXBsYXRlIDx0eXBlbmFtZSBULAogICAg
ICAgICAgIGJvb2wgKEFuaW1hdGlvbjo6KnRlc3RGdW5jdGlvbikoKSBjb25zdCwKICAgICAgICAg
ICB2b2lkIChBbmltYXRpb246OipjbGVhckZ1bmN0aW9uKSgpLAogICAgICAgICAgIFQgKCppbml0
aWFsRnVuY3Rpb24pKCksCi0gICAgICAgICAgdm9pZCAoQ1NTVG9TdHlsZU1hcDo6Km1hcEZ1bmN0
aW9uKShBbmltYXRpb24qLCBDU1NWYWx1ZSopLAorICAgICAgICAgIHZvaWQgKENTU1RvU3R5bGVN
YXA6OiptYXBGdW5jdGlvbikoQW5pbWF0aW9uKiwgQ1NTVmFsdWUmKSwKICAgICAgICAgICBBbmlt
YXRpb25MaXN0KiAoUmVuZGVyU3R5bGU6OiphbmltYXRpb25HZXR0ZXJGdW5jdGlvbikoKSwKICAg
ICAgICAgICBjb25zdCBBbmltYXRpb25MaXN0KiAoUmVuZGVyU3R5bGU6OippbW11dGFibGVBbmlt
YXRpb25HZXR0ZXJGdW5jdGlvbikoKSBjb25zdD4KIGNsYXNzIEFwcGx5UHJvcGVydHlBbmltYXRp
b24gewpAQCAtMTU2Niw3ICsxNTc4LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBib29sIHRlc3Qo
Y29uc3QgQW5pbWF0aW9uJiBhbmltYXRpb24pIHsgcmV0dXJuIChhbmltYXRpb24uKnRlc3RGdW5j
dGlvbikoKTsgfQogICAgIHN0YXRpYyB2b2lkIGNsZWFyKEFuaW1hdGlvbiYgYW5pbWF0aW9uKSB7
IChhbmltYXRpb24uKmNsZWFyRnVuY3Rpb24pKCk7IH0KICAgICBzdGF0aWMgVCBpbml0aWFsKCkg
eyByZXR1cm4gKCppbml0aWFsRnVuY3Rpb24pKCk7IH0KLSAgICBzdGF0aWMgdm9pZCBtYXAoU3R5
bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgQW5pbWF0aW9uJiBhbmltYXRpb24sIENTU1ZhbHVl
KiB2YWx1ZSkgeyAoc3R5bGVSZXNvbHZlci0+c3R5bGVNYXAoKS0+Km1hcEZ1bmN0aW9uKSgmYW5p
bWF0aW9uLCB2YWx1ZSk7IH0KKyAgICBzdGF0aWMgdm9pZCBtYXAoU3R5bGVSZXNvbHZlciogc3R5
bGVSZXNvbHZlciwgQW5pbWF0aW9uJiBhbmltYXRpb24sIENTU1ZhbHVlJiB2YWx1ZSkgeyAoc3R5
bGVSZXNvbHZlci0+c3R5bGVNYXAoKS0+Km1hcEZ1bmN0aW9uKSgmYW5pbWF0aW9uLCB2YWx1ZSk7
IH0KICAgICBzdGF0aWMgQW5pbWF0aW9uTGlzdCogYWNjZXNzQW5pbWF0aW9ucyhSZW5kZXJTdHls
ZSogc3R5bGUpIHsgcmV0dXJuIChzdHlsZS0+KmFuaW1hdGlvbkdldHRlckZ1bmN0aW9uKSgpOyB9
CiAgICAgc3RhdGljIGNvbnN0IEFuaW1hdGlvbkxpc3QqIGFuaW1hdGlvbnMoUmVuZGVyU3R5bGUq
IHN0eWxlKSB7IHJldHVybiAoc3R5bGUtPippbW11dGFibGVBbmltYXRpb25HZXR0ZXJGdW5jdGlv
bikoKTsgfQogCkBAIC0xNjAzLDE4ICsxNjE1LDE4IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAg
IEFuaW1hdGlvbkxpc3QqIGxpc3QgPSBhY2Nlc3NBbmltYXRpb25zKHN0eWxlUmVzb2x2ZXItPnN0
eWxlKCkpOwogICAgICAgICBzaXplX3QgY2hpbGRJbmRleCA9IDA7Ci0gICAgICAgIGlmICh2YWx1
ZS0+aXNWYWx1ZUxpc3QoKSkgeworICAgICAgICBpZiAoaXM8Q1NTVmFsdWVMaXN0PigqdmFsdWUp
KSB7CiAgICAgICAgICAgICAvKiBXYWxrIGVhY2ggdmFsdWUgYW5kIHB1dCBpdCBpbnRvIGFuIGFu
aW1hdGlvbiwgY3JlYXRpbmcgbmV3IGFuaW1hdGlvbnMgYXMgbmVlZGVkLiAqLwotICAgICAgICAg
ICAgZm9yIChDU1NWYWx1ZUxpc3RJdGVyYXRvciBpID0gdmFsdWU7IGkuaGFzTW9yZSgpOyBpLmFk
dmFuY2UoKSkgeworICAgICAgICAgICAgZm9yIChhdXRvJiBjdXJyZW50VmFsdWUgOiBkb3duY2Fz
dDxDU1NWYWx1ZUxpc3Q+KCp2YWx1ZSkpIHsKICAgICAgICAgICAgICAgICBpZiAoY2hpbGRJbmRl
eCA8PSBsaXN0LT5zaXplKCkpCiAgICAgICAgICAgICAgICAgICAgIGxpc3QtPmFwcGVuZChBbmlt
YXRpb246OmNyZWF0ZSgpKTsKLSAgICAgICAgICAgICAgICBtYXAoc3R5bGVSZXNvbHZlciwgbGlz
dC0+YW5pbWF0aW9uKGNoaWxkSW5kZXgpLCBpLnZhbHVlKCkpOworICAgICAgICAgICAgICAgIG1h
cChzdHlsZVJlc29sdmVyLCBsaXN0LT5hbmltYXRpb24oY2hpbGRJbmRleCksIGN1cnJlbnRWYWx1
ZS5nZXQoKSk7CiAgICAgICAgICAgICAgICAgKytjaGlsZEluZGV4OwogICAgICAgICAgICAgfQog
ICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgaWYgKGxpc3QtPmlzRW1wdHkoKSkKICAgICAg
ICAgICAgICAgICBsaXN0LT5hcHBlbmQoQW5pbWF0aW9uOjpjcmVhdGUoKSk7Ci0gICAgICAgICAg
ICBtYXAoc3R5bGVSZXNvbHZlciwgbGlzdC0+YW5pbWF0aW9uKGNoaWxkSW5kZXgpLCB2YWx1ZSk7
CisgICAgICAgICAgICBtYXAoc3R5bGVSZXNvbHZlciwgbGlzdC0+YW5pbWF0aW9uKGNoaWxkSW5k
ZXgpLCAqdmFsdWUpOwogICAgICAgICAgICAgY2hpbGRJbmRleCA9IDE7CiAgICAgICAgIH0KICAg
ICAgICAgZm9yICggOyBjaGlsZEluZGV4IDwgbGlzdC0+c2l6ZSgpOyArK2NoaWxkSW5kZXgpIHsK
QEAgLTE5MDYsOSArMTkxOCw5IEBAIHB1YmxpYzoKICAgICAgICAgaWYgKGlzPENTU1ByaW1pdGl2
ZVZhbHVlPigqdmFsdWUpKSB7CiAgICAgICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSYgcHJpbWl0
aXZlVmFsdWUgPSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlKTsKICAgICAgICAg
ICAgIGlmIChwcmltaXRpdmVWYWx1ZS5nZXRWYWx1ZUlEKCkgPT0gQ1NTVmFsdWVBdXRvKQotICAg
ICAgICAgICAgICAgIHNldFZhbHVlKHN0eWxlUmVzb2x2ZXItPnN0eWxlKCksIDApOwotICAgICAg
ICB9IGVsc2UgaWYgKHZhbHVlLT5pc0ltYWdlVmFsdWUoKSB8fCB2YWx1ZS0+aXNJbWFnZUdlbmVy
YXRvclZhbHVlKCkgfHwgdmFsdWUtPmlzSW1hZ2VTZXRWYWx1ZSgpKSB7Ci0gICAgICAgICAgICBS
ZWZQdHI8U2hhcGVWYWx1ZT4gc2hhcGUgPSBTaGFwZVZhbHVlOjpjcmVhdGVJbWFnZVZhbHVlKHN0
eWxlUmVzb2x2ZXItPnN0eWxlSW1hZ2UocHJvcGVydHksIHZhbHVlKSk7CisgICAgICAgICAgICAg
ICAgc2V0VmFsdWUoc3R5bGVSZXNvbHZlci0+c3R5bGUoKSwgbnVsbHB0cik7CisgICAgICAgIH0g
ZWxzZSBpZiAoaXM8Q1NTSW1hZ2VWYWx1ZT4oKnZhbHVlKSB8fCBpczxDU1NJbWFnZUdlbmVyYXRv
clZhbHVlPigqdmFsdWUpIHx8IGlzPENTU0ltYWdlU2V0VmFsdWU+KCp2YWx1ZSkpIHsKKyAgICAg
ICAgICAgIFJlZlB0cjxTaGFwZVZhbHVlPiBzaGFwZSA9IFNoYXBlVmFsdWU6OmNyZWF0ZUltYWdl
VmFsdWUoc3R5bGVSZXNvbHZlci0+c3R5bGVJbWFnZShwcm9wZXJ0eSwgKnZhbHVlKSk7CiAgICAg
ICAgICAgICBzZXRWYWx1ZShzdHlsZVJlc29sdmVyLT5zdHlsZSgpLCBzaGFwZS5yZWxlYXNlKCkp
OwogICAgICAgICB9IGVsc2UgaWYgKGlzPENTU1ZhbHVlTGlzdD4oKnZhbHVlKSkgewogICAgICAg
ICAgICAgUmVmUHRyPEJhc2ljU2hhcGU+IHNoYXBlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvY3NzL1N0eWxlQnVpbGRlckNvbnZlcnRlci5oIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxl
QnVpbGRlckNvbnZlcnRlci5oCmluZGV4IDM1NTM5ODcwYjBhMzMxZDA3YjA4MDcwZDg2ZDEwZDIz
NGMxZDdhODIuLmNhYWZkOGIyZjFhMzNmOGQxNGFjMDAyM2M2YTRjNzEyOWU3ZmU2NTYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZUJ1aWxkZXJDb252ZXJ0ZXIuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVCdWlsZGVyQ29udmVydGVyLmgKQEAgLTE5OCw4ICsxOTgs
MTAgQEAgaW5saW5lIExlbmd0aFNpemUgU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0UmFk
aXVzKFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2wKIGlubGluZSBUZXh0RGVjb3JhdGlvbiBTdHls
ZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRUZXh0RGVjb3JhdGlvbihTdHlsZVJlc29sdmVyJiwg
Q1NTVmFsdWUmIHZhbHVlKQogewogICAgIFRleHREZWNvcmF0aW9uIHJlc3VsdCA9IFJlbmRlclN0
eWxlOjppbml0aWFsVGV4dERlY29yYXRpb24oKTsKLSAgICBmb3IgKENTU1ZhbHVlTGlzdEl0ZXJh
dG9yIGl0KCZ2YWx1ZSk7IGl0Lmhhc01vcmUoKTsgaXQuYWR2YW5jZSgpKQotICAgICAgICByZXN1
bHQgfD0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCppdC52YWx1ZSgpKTsKKyAgICBpZiAo
aXM8Q1NTVmFsdWVMaXN0Pih2YWx1ZSkpIHsKKyAgICAgICAgZm9yIChhdXRvJiBjdXJyZW50VmFs
dWUgOiBkb3duY2FzdDxDU1NWYWx1ZUxpc3Q+KHZhbHVlKSkKKyAgICAgICAgICAgIHJlc3VsdCB8
PSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oY3VycmVudFZhbHVlLmdldCgpKTsKKyAgICB9
CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApAQCAtMjM5LDcgKzI0MSw3IEBAIGlubGluZSBOaW5l
UGllY2VJbWFnZSBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRCb3JkZXJNYXNrKFN0eWxl
UmVzb2x2ZXImIHN0CiB0ZW1wbGF0ZSA8Q1NTUHJvcGVydHlJRCBwcm9wZXJ0eT4KIGlubGluZSBQ
YXNzUmVmUHRyPFN0eWxlSW1hZ2U+IFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydEJvcmRl
ckltYWdlU291cmNlKFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlJiB2YWx1
ZSkKIHsKLSAgICByZXR1cm4gc3R5bGVSZXNvbHZlci5zdHlsZUltYWdlKHByb3BlcnR5LCAmdmFs
dWUpOworICAgIHJldHVybiBzdHlsZVJlc29sdmVyLnN0eWxlSW1hZ2UocHJvcGVydHksIHZhbHVl
KTsKIH0KIAogaW5saW5lIFRyYW5zZm9ybU9wZXJhdGlvbnMgU3R5bGVCdWlsZGVyQ29udmVydGVy
Ojpjb252ZXJ0VHJhbnNmb3JtKFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVl
JiB2YWx1ZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmNwcAppbmRleCAxNjM3NDJmMDg3
YzYxOGNkOWQyYTdhNzMyYTAyMGVkZmViNDg0NWMwLi4zMzRkNGFjNGI1YjZhNTE2YmI5YWRkMmMx
ZTk0NjRhZTY1NjZiNGE3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNv
bHZlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuY3BwCkBAIC0x
OTI5LDEwICsxOTI5LDEwIEBAIHN0YXRpYyBib29sIGNyZWF0ZUdyaWRUcmFja0JyZWFkdGgoQ1NT
UHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlLCBjb25zdCBTdHlsCiAgICAgcmV0dXJuIHRy
dWU7CiB9CiAKLXN0YXRpYyBib29sIGNyZWF0ZUdyaWRUcmFja1NpemUoQ1NTVmFsdWUqIHZhbHVl
LCBHcmlkVHJhY2tTaXplJiB0cmFja1NpemUsIGNvbnN0IFN0eWxlUmVzb2x2ZXI6OlN0YXRlJiBz
dGF0ZSkKK3N0YXRpYyBib29sIGNyZWF0ZUdyaWRUcmFja1NpemUoQ1NTVmFsdWUmIHZhbHVlLCBH
cmlkVHJhY2tTaXplJiB0cmFja1NpemUsIGNvbnN0IFN0eWxlUmVzb2x2ZXI6OlN0YXRlJiBzdGF0
ZSkKIHsKLSAgICBpZiAoaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSkpIHsKLSAgICAgICAg
Q1NTUHJpbWl0aXZlVmFsdWUmIHByaW1pdGl2ZVZhbHVlID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZl
VmFsdWU+KCp2YWx1ZSk7CisgICAgaWYgKGlzPENTU1ByaW1pdGl2ZVZhbHVlPih2YWx1ZSkpIHsK
KyAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUmIHByaW1pdGl2ZVZhbHVlID0gZG93bmNhc3Q8Q1NT
UHJpbWl0aXZlVmFsdWU+KHZhbHVlKTsKICAgICAgICAgR3JpZExlbmd0aCB3b3JraW5nTGVuZ3Ro
OwogICAgICAgICBpZiAoIWNyZWF0ZUdyaWRUcmFja0JyZWFkdGgoJnByaW1pdGl2ZVZhbHVlLCBz
dGF0ZSwgd29ya2luZ0xlbmd0aCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0xOTQx
LDcgKzE5NDEsNyBAQCBzdGF0aWMgYm9vbCBjcmVhdGVHcmlkVHJhY2tTaXplKENTU1ZhbHVlKiB2
YWx1ZSwgR3JpZFRyYWNrU2l6ZSYgdHJhY2tTaXplLCBjb25zdAogICAgICAgICByZXR1cm4gdHJ1
ZTsKICAgICB9CiAKLSAgICBDU1NGdW5jdGlvblZhbHVlJiBtaW5tYXhGdW5jdGlvbiA9IGRvd25j
YXN0PENTU0Z1bmN0aW9uVmFsdWU+KCp2YWx1ZSk7CisgICAgQ1NTRnVuY3Rpb25WYWx1ZSYgbWlu
bWF4RnVuY3Rpb24gPSBkb3duY2FzdDxDU1NGdW5jdGlvblZhbHVlPih2YWx1ZSk7CiAgICAgQ1NT
VmFsdWVMaXN0KiBhcmd1bWVudHMgPSBtaW5tYXhGdW5jdGlvbi5hcmd1bWVudHMoKTsKICAgICBB
U1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihhcmd1bWVudHMtPmxlbmd0aCgpID09IDIp
OwogICAgIEdyaWRMZW5ndGggbWluVHJhY2tCcmVhZHRoOwpAQCAtMTk2MSwxNiArMTk2MSwxNCBA
QCBzdGF0aWMgYm9vbCBjcmVhdGVHcmlkVHJhY2tMaXN0KENTU1ZhbHVlKiB2YWx1ZSwgVmVjdG9y
PEdyaWRUcmFja1NpemU+JiB0cmFja1NpegogICAgICAgICByZXR1cm4gcHJpbWl0aXZlVmFsdWUu
Z2V0VmFsdWVJRCgpID09IENTU1ZhbHVlTm9uZTsKICAgICB9CiAKLSAgICBpZiAoIXZhbHVlLT5p
c1ZhbHVlTGlzdCgpKQorICAgIGlmICghaXM8Q1NTVmFsdWVMaXN0PigqdmFsdWUpKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKICAgICBzaXplX3QgY3VycmVudE5hbWVkR3JpZExpbmUgPSAwOwot
ICAgIGZvciAoQ1NTVmFsdWVMaXN0SXRlcmF0b3IgaSA9IHZhbHVlOyBpLmhhc01vcmUoKTsgaS5h
ZHZhbmNlKCkpIHsKLSAgICAgICAgQ1NTVmFsdWUqIGN1cnJWYWx1ZSA9IGkudmFsdWUoKTsKLSAg
ICAgICAgaWYgKGlzPENTU0dyaWRMaW5lTmFtZXNWYWx1ZT4oKmN1cnJWYWx1ZSkpIHsKLSAgICAg
ICAgICAgIENTU0dyaWRMaW5lTmFtZXNWYWx1ZSYgbGluZU5hbWVzVmFsdWUgPSBkb3duY2FzdDxD
U1NHcmlkTGluZU5hbWVzVmFsdWU+KCpjdXJyVmFsdWUpOwotICAgICAgICAgICAgZm9yIChDU1NW
YWx1ZUxpc3RJdGVyYXRvciBqID0gJmxpbmVOYW1lc1ZhbHVlOyBqLmhhc01vcmUoKTsgai5hZHZh
bmNlKCkpIHsKLSAgICAgICAgICAgICAgICBTdHJpbmcgbmFtZWRHcmlkTGluZSA9IGRvd25jYXN0
PENTU1ByaW1pdGl2ZVZhbHVlPihqLnZhbHVlKCkpLT5nZXRTdHJpbmdWYWx1ZSgpOworICAgIGZv
ciAoYXV0byYgY3VycmVudFZhbHVlIDogZG93bmNhc3Q8Q1NTVmFsdWVMaXN0PigqdmFsdWUpKSB7
CisgICAgICAgIGlmIChpczxDU1NHcmlkTGluZU5hbWVzVmFsdWU+KGN1cnJlbnRWYWx1ZS5nZXQo
KSkpIHsKKyAgICAgICAgICAgIGZvciAoYXV0byYgY3VycmVudFZhbHVlIDogZG93bmNhc3Q8Q1NT
R3JpZExpbmVOYW1lc1ZhbHVlPihjdXJyZW50VmFsdWUuZ2V0KCkpKSB7CisgICAgICAgICAgICAg
ICAgU3RyaW5nIG5hbWVkR3JpZExpbmUgPSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oY3Vy
cmVudFZhbHVlLmdldCgpKS5nZXRTdHJpbmdWYWx1ZSgpOwogICAgICAgICAgICAgICAgIE5hbWVk
R3JpZExpbmVzTWFwOjpBZGRSZXN1bHQgcmVzdWx0ID0gbmFtZWRHcmlkTGluZXMuYWRkKG5hbWVk
R3JpZExpbmUsIFZlY3RvcjxzaXplX3Q+KCkpOwogICAgICAgICAgICAgICAgIHJlc3VsdC5pdGVy
YXRvci0+dmFsdWUuYXBwZW5kKGN1cnJlbnROYW1lZEdyaWRMaW5lKTsKICAgICAgICAgICAgICAg
ICBPcmRlcmVkTmFtZWRHcmlkTGluZXNNYXA6OkFkZFJlc3VsdCBvcmRlcmVkUmVzdWx0ID0gb3Jk
ZXJlZE5hbWVkR3JpZExpbmVzLmFkZChjdXJyZW50TmFtZWRHcmlkTGluZSwgVmVjdG9yPFN0cmlu
Zz4oKSk7CkBAIC0xOTgxLDcgKzE5NzksNyBAQCBzdGF0aWMgYm9vbCBjcmVhdGVHcmlkVHJhY2tM
aXN0KENTU1ZhbHVlKiB2YWx1ZSwgVmVjdG9yPEdyaWRUcmFja1NpemU+JiB0cmFja1NpegogCiAg
ICAgICAgICsrY3VycmVudE5hbWVkR3JpZExpbmU7CiAgICAgICAgIEdyaWRUcmFja1NpemUgdHJh
Y2tTaXplOwotICAgICAgICBpZiAoIWNyZWF0ZUdyaWRUcmFja1NpemUoY3VyclZhbHVlLCB0cmFj
a1NpemUsIHN0YXRlKSkKKyAgICAgICAgaWYgKCFjcmVhdGVHcmlkVHJhY2tTaXplKGN1cnJlbnRW
YWx1ZS5nZXQoKSwgdHJhY2tTaXplLCBzdGF0ZSkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CiAKICAgICAgICAgdHJhY2tTaXplcy5hcHBlbmQodHJhY2tTaXplKTsKQEAgLTIwMTAsMzMgKzIw
MDgsMzMgQEAgc3RhdGljIGJvb2wgY3JlYXRlR3JpZFBvc2l0aW9uKENTU1ZhbHVlKiB2YWx1ZSwg
R3JpZFBvc2l0aW9uJiBwb3NpdGlvbikKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCi0g
ICAgQ1NTVmFsdWVMaXN0JiB2YWx1ZXMgPSBkb3duY2FzdDxDU1NWYWx1ZUxpc3Q+KCp2YWx1ZSk7
CisgICAgYXV0byYgdmFsdWVzID0gZG93bmNhc3Q8Q1NTVmFsdWVMaXN0PigqdmFsdWUpOwogICAg
IEFTU0VSVCh2YWx1ZXMubGVuZ3RoKCkpOwogCiAgICAgYm9vbCBpc1NwYW5Qb3NpdGlvbiA9IGZh
bHNlOwogICAgIGludCBncmlkTGluZU51bWJlciA9IDA7CiAgICAgU3RyaW5nIGdyaWRMaW5lTmFt
ZTsKIAotICAgIENTU1ZhbHVlTGlzdEl0ZXJhdG9yIGl0ID0gJnZhbHVlczsKLSAgICBDU1NQcmlt
aXRpdmVWYWx1ZSogY3VycmVudFZhbHVlID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KGl0
LnZhbHVlKCkpOworICAgIGF1dG8gaXQgPSB2YWx1ZXMuYmVnaW4oKTsKKyAgICBDU1NQcmltaXRp
dmVWYWx1ZSogY3VycmVudFZhbHVlID0gJmRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPihpdC0+
Z2V0KCkpOwogICAgIGlmIChjdXJyZW50VmFsdWUtPmdldFZhbHVlSUQoKSA9PSBDU1NWYWx1ZVNw
YW4pIHsKICAgICAgICAgaXNTcGFuUG9zaXRpb24gPSB0cnVlOwotICAgICAgICBpdC5hZHZhbmNl
KCk7Ci0gICAgICAgIGN1cnJlbnRWYWx1ZSA9IGl0Lmhhc01vcmUoKSA/IGRvd25jYXN0PENTU1By
aW1pdGl2ZVZhbHVlPihpdC52YWx1ZSgpKSA6IG51bGxwdHI7CisgICAgICAgICsraXQ7CisgICAg
ICAgIGN1cnJlbnRWYWx1ZSA9IGl0ICE9IHZhbHVlcy5lbmQoKSA/ICZkb3duY2FzdDxDU1NQcmlt
aXRpdmVWYWx1ZT4oaXQtPmdldCgpKSA6IG51bGxwdHI7CiAgICAgfQogCiAgICAgaWYgKGN1cnJl
bnRWYWx1ZSAmJiBjdXJyZW50VmFsdWUtPmlzTnVtYmVyKCkpIHsKICAgICAgICAgZ3JpZExpbmVO
dW1iZXIgPSBjdXJyZW50VmFsdWUtPmdldEludFZhbHVlKCk7Ci0gICAgICAgIGl0LmFkdmFuY2Uo
KTsKLSAgICAgICAgY3VycmVudFZhbHVlID0gaXQuaGFzTW9yZSgpID8gZG93bmNhc3Q8Q1NTUHJp
bWl0aXZlVmFsdWU+KGl0LnZhbHVlKCkpIDogbnVsbHB0cjsKKyAgICAgICAgKytpdDsKKyAgICAg
ICAgY3VycmVudFZhbHVlID0gaXQgIT0gdmFsdWVzLmVuZCgpID8gJmRvd25jYXN0PENTU1ByaW1p
dGl2ZVZhbHVlPihpdC0+Z2V0KCkpIDogbnVsbHB0cjsKICAgICB9CiAKICAgICBpZiAoY3VycmVu
dFZhbHVlICYmIGN1cnJlbnRWYWx1ZS0+aXNTdHJpbmcoKSkgewogICAgICAgICBncmlkTGluZU5h
bWUgPSBjdXJyZW50VmFsdWUtPmdldFN0cmluZ1ZhbHVlKCk7Ci0gICAgICAgIGl0LmFkdmFuY2Uo
KTsKKyAgICAgICAgKytpdDsKICAgICB9CiAKLSAgICBBU1NFUlQoIWl0Lmhhc01vcmUoKSk7Cisg
ICAgQVNTRVJUKGl0ICE9IHZhbHVlcy5lbmQoKSk7CiAgICAgaWYgKGlzU3BhblBvc2l0aW9uKQog
ICAgICAgICBwb3NpdGlvbi5zZXRTcGFuUG9zaXRpb24oZ3JpZExpbmVOdW1iZXIgPyBncmlkTGlu
ZU51bWJlciA6IDEsIGdyaWRMaW5lTmFtZSk7CiAgICAgZWxzZQpAQCAtMjA3MywxNiArMjA3MSwx
OCBAQCBTY3JvbGxTbmFwUG9pbnRzIFN0eWxlUmVzb2x2ZXI6OnBhcnNlU25hcFBvaW50cyhDU1NW
YWx1ZSYgdmFsdWUpCiAgICAgfQogCiAgICAgcG9pbnRzLmhhc1JlcGVhdCA9IGZhbHNlOwotICAg
IGZvciAoQ1NTVmFsdWVMaXN0SXRlcmF0b3IgaXQoJnZhbHVlKTsgaXQuaGFzTW9yZSgpOyBpdC5h
ZHZhbmNlKCkpIHsKLSAgICAgICAgYXV0byYgaXRlbVZhbHVlID0gZG93bmNhc3Q8Q1NTUHJpbWl0
aXZlVmFsdWU+KCppdC52YWx1ZSgpKTsKLSAgICAgICAgaWYgKGF1dG8qIGxlbmd0aFJlcGVhdCA9
IGl0ZW1WYWx1ZS5nZXRMZW5ndGhSZXBlYXRWYWx1ZSgpKSB7Ci0gICAgICAgICAgICBpZiAoYXV0
byogaW50ZXJ2YWwgPSBsZW5ndGhSZXBlYXQtPmludGVydmFsKCkpIHsKLSAgICAgICAgICAgICAg
ICBwb2ludHMucmVwZWF0T2Zmc2V0ID0gcGFyc2VTbmFwQ29vcmRpbmF0ZSgqaW50ZXJ2YWwpOwot
ICAgICAgICAgICAgICAgIHBvaW50cy5oYXNSZXBlYXQgPSB0cnVlOwotICAgICAgICAgICAgICAg
IGJyZWFrOworICAgIGlmIChpczxDU1NWYWx1ZUxpc3Q+KHZhbHVlKSkgeworICAgICAgICBmb3Ig
KGF1dG8mIGN1cnJlbnRWYWx1ZSA6IGRvd25jYXN0PENTU1ZhbHVlTGlzdD4odmFsdWUpKSB7Cisg
ICAgICAgICAgICBhdXRvJiBpdGVtVmFsdWUgPSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4o
Y3VycmVudFZhbHVlLmdldCgpKTsKKyAgICAgICAgICAgIGlmIChhdXRvKiBsZW5ndGhSZXBlYXQg
PSBpdGVtVmFsdWUuZ2V0TGVuZ3RoUmVwZWF0VmFsdWUoKSkgeworICAgICAgICAgICAgICAgIGlm
IChhdXRvKiBpbnRlcnZhbCA9IGxlbmd0aFJlcGVhdC0+aW50ZXJ2YWwoKSkgeworICAgICAgICAg
ICAgICAgICAgICBwb2ludHMucmVwZWF0T2Zmc2V0ID0gcGFyc2VTbmFwQ29vcmRpbmF0ZSgqaW50
ZXJ2YWwpOworICAgICAgICAgICAgICAgICAgICBwb2ludHMuaGFzUmVwZWF0ID0gdHJ1ZTsKKyAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
fQorICAgICAgICAgICAgcG9pbnRzLm9mZnNldHMuYXBwZW5kKHBhcnNlU25hcENvb3JkaW5hdGUo
aXRlbVZhbHVlKSk7CiAgICAgICAgIH0KLSAgICAgICAgcG9pbnRzLm9mZnNldHMuYXBwZW5kKHBh
cnNlU25hcENvb3JkaW5hdGUoaXRlbVZhbHVlKSk7CiAgICAgfQogCiAgICAgcmV0dXJuIHBvaW50
czsKQEAgLTIxNDgsMzUgKzIxNDgsMzQgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVByb3Bl
cnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGlmICghdmFsdWUtPmlzVmFsdWVM
aXN0KCkpCisgICAgICAgICAgICBpZiAoIWlzPENTU1ZhbHVlTGlzdD4oKnZhbHVlKSkKICAgICAg
ICAgICAgICAgICByZXR1cm47CiAKICAgICAgICAgICAgIGJvb2wgZGlkU2V0ID0gZmFsc2U7Ci0g
ICAgICAgICAgICBmb3IgKENTU1ZhbHVlTGlzdEl0ZXJhdG9yIGkgPSB2YWx1ZTsgaS5oYXNNb3Jl
KCk7IGkuYWR2YW5jZSgpKSB7Ci0gICAgICAgICAgICAgICAgQ1NTVmFsdWUqIGl0ZW0gPSBpLnZh
bHVlKCk7Ci0gICAgICAgICAgICAgICAgaWYgKGlzPENTU0ltYWdlR2VuZXJhdG9yVmFsdWU+KCpp
dGVtKSkgewotICAgICAgICAgICAgICAgICAgICBpZiAoaXM8Q1NTR3JhZGllbnRWYWx1ZT4oKml0
ZW0pKQotICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0Q29udGVudChT
dHlsZUdlbmVyYXRlZEltYWdlOjpjcmVhdGUoKmRvd25jYXN0PENTU0dyYWRpZW50VmFsdWU+KCpp
dGVtKS5ncmFkaWVudFdpdGhTdHlsZXNSZXNvbHZlZCh0aGlzKSksIGRpZFNldCk7CisgICAgICAg
ICAgICBmb3IgKGF1dG8mIGl0ZW0gOiBkb3duY2FzdDxDU1NWYWx1ZUxpc3Q+KCp2YWx1ZSkpIHsK
KyAgICAgICAgICAgICAgICBpZiAoaXM8Q1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZT4oaXRlbS5nZXQo
KSkpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGlzPENTU0dyYWRpZW50VmFsdWU+KGl0ZW0u
Z2V0KCkpKQorICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0Q29udGVu
dChTdHlsZUdlbmVyYXRlZEltYWdlOjpjcmVhdGUoKmRvd25jYXN0PENTU0dyYWRpZW50VmFsdWU+
KGl0ZW0uZ2V0KCkpLmdyYWRpZW50V2l0aFN0eWxlc1Jlc29sdmVkKHRoaXMpKSwgZGlkU2V0KTsK
ICAgICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUu
c3R5bGUoKS0+c2V0Q29udGVudChTdHlsZUdlbmVyYXRlZEltYWdlOjpjcmVhdGUoZG93bmNhc3Q8
Q1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZT4oKml0ZW0pKSwgZGlkU2V0KTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldENvbnRlbnQoU3R5bGVHZW5lcmF0ZWRJbWFnZTo6
Y3JlYXRlKGRvd25jYXN0PENTU0ltYWdlR2VuZXJhdG9yVmFsdWU+KGl0ZW0uZ2V0KCkpKSwgZGlk
U2V0KTsKICAgICAgICAgICAgICAgICAgICAgZGlkU2V0ID0gdHJ1ZTsKICNpZiBFTkFCTEUoQ1NT
X0lNQUdFX1NFVCkKLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGlzPENTU0ltYWdlU2V0VmFs
dWU+KCppdGVtKSkgewotICAgICAgICAgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRDb250
ZW50KHNldE9yUGVuZGluZ0Zyb21WYWx1ZShDU1NQcm9wZXJ0eUNvbnRlbnQsIGRvd25jYXN0PENT
U0ltYWdlU2V0VmFsdWU+KGl0ZW0pKSwgZGlkU2V0KTsKKyAgICAgICAgICAgICAgICB9IGVsc2Ug
aWYgKGlzPENTU0ltYWdlU2V0VmFsdWU+KGl0ZW0uZ2V0KCkpKSB7CisgICAgICAgICAgICAgICAg
ICAgIHN0YXRlLnN0eWxlKCktPnNldENvbnRlbnQoc2V0T3JQZW5kaW5nRnJvbVZhbHVlKENTU1By
b3BlcnR5Q29udGVudCwgZG93bmNhc3Q8Q1NTSW1hZ2VTZXRWYWx1ZT4oaXRlbS5nZXQoKSkpLCBk
aWRTZXQpOwogICAgICAgICAgICAgICAgICAgICBkaWRTZXQgPSB0cnVlOwogI2VuZGlmCiAgICAg
ICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgaWYgKGlzPENTU0ltYWdlVmFsdWU+KCpp
dGVtKSkgewotICAgICAgICAgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRDb250ZW50KGNh
Y2hlZE9yUGVuZGluZ0Zyb21WYWx1ZShDU1NQcm9wZXJ0eUNvbnRlbnQsIGRvd25jYXN0PENTU0lt
YWdlVmFsdWU+KGl0ZW0pKSwgZGlkU2V0KTsKKyAgICAgICAgICAgICAgICBpZiAoaXM8Q1NTSW1h
Z2VWYWx1ZT4oaXRlbS5nZXQoKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgc3RhdGUuc3R5bGUo
KS0+c2V0Q29udGVudChjYWNoZWRPclBlbmRpbmdGcm9tVmFsdWUoQ1NTUHJvcGVydHlDb250ZW50
LCBkb3duY2FzdDxDU1NJbWFnZVZhbHVlPihpdGVtLmdldCgpKSksIGRpZFNldCk7CiAgICAgICAg
ICAgICAgICAgICAgIGRpZFNldCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVl
OwogICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgIGlmICghaXM8Q1NTUHJpbWl0
aXZlVmFsdWU+KCppdGVtKSkKKyAgICAgICAgICAgICAgICBpZiAoIWlzPENTU1ByaW1pdGl2ZVZh
bHVlPihpdGVtLmdldCgpKSkKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAg
ICAgICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSYgY29udGVudFZhbHVlID0gZG93bmNhc3Q8Q1NT
UHJpbWl0aXZlVmFsdWU+KCppdGVtKTsKKyAgICAgICAgICAgICAgICBhdXRvJiBjb250ZW50VmFs
dWUgPSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oaXRlbS5nZXQoKSk7CiAKICAgICAgICAg
ICAgICAgICBpZiAoY29udGVudFZhbHVlLmlzU3RyaW5nKCkpIHsKICAgICAgICAgICAgICAgICAg
ICAgc3RhdGUuc3R5bGUoKS0+c2V0Q29udGVudChjb250ZW50VmFsdWUuZ2V0U3RyaW5nVmFsdWUo
KS5pbXBsKCksIGRpZFNldCk7CkBAIC0yNDAyLDE0ICsyNDAxLDE0IEBAIHZvaWQgU3R5bGVSZXNv
bHZlcjo6YXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAg
ICAgICAgIGlmIChpc0luaXRpYWwgfHwgcHJpbWl0aXZlVmFsdWUpIC8vIGluaXRpYWwgfCBub25l
CiAgICAgICAgICAgICByZXR1cm4gaWQgPT0gQ1NTUHJvcGVydHlUZXh0U2hhZG93ID8gc3RhdGUu
c3R5bGUoKS0+c2V0VGV4dFNoYWRvdyhudWxscHRyKSA6IHN0YXRlLnN0eWxlKCktPnNldEJveFNo
YWRvdyhudWxscHRyKTsKIAotICAgICAgICBpZiAoIXZhbHVlLT5pc1ZhbHVlTGlzdCgpKQorICAg
ICAgICBpZiAoIWlzPENTU1ZhbHVlTGlzdD4oKnZhbHVlKSkKICAgICAgICAgICAgIHJldHVybjsK
IAotICAgICAgICBmb3IgKENTU1ZhbHVlTGlzdEl0ZXJhdG9yIGkgPSB2YWx1ZTsgaS5oYXNNb3Jl
KCk7IGkuYWR2YW5jZSgpKSB7Ci0gICAgICAgICAgICBDU1NWYWx1ZSogY3VyclZhbHVlID0gaS52
YWx1ZSgpOwotICAgICAgICAgICAgaWYgKCFpczxDU1NTaGFkb3dWYWx1ZT4oKmN1cnJWYWx1ZSkp
CisgICAgICAgIGJvb2wgaXNGaXJzdEVudHJ5ID0gdHJ1ZTsKKyAgICAgICAgZm9yIChhdXRvJiBj
dXJyZW50VmFsdWUgOiBkb3duY2FzdDxDU1NWYWx1ZUxpc3Q+KCp2YWx1ZSkpIHsKKyAgICAgICAg
ICAgIGlmICghaXM8Q1NTU2hhZG93VmFsdWU+KGN1cnJlbnRWYWx1ZS5nZXQoKSkpCiAgICAgICAg
ICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBDU1NTaGFkb3dWYWx1ZSYgaXRlbSA9IGRv
d25jYXN0PENTU1NoYWRvd1ZhbHVlPigqY3VyclZhbHVlKTsKKyAgICAgICAgICAgIGF1dG8mIGl0
ZW0gPSBkb3duY2FzdDxDU1NTaGFkb3dWYWx1ZT4oY3VycmVudFZhbHVlLmdldCgpKTsKICAgICAg
ICAgICAgIGludCB4ID0gaXRlbS54LT5jb21wdXRlTGVuZ3RoPGludD4oc3RhdGUuY3NzVG9MZW5n
dGhDb252ZXJzaW9uRGF0YSgpKTsKICAgICAgICAgICAgIGludCB5ID0gaXRlbS55LT5jb21wdXRl
TGVuZ3RoPGludD4oc3RhdGUuY3NzVG9MZW5ndGhDb252ZXJzaW9uRGF0YSgpKTsKICAgICAgICAg
ICAgIGludCBibHVyID0gaXRlbS5ibHVyID8gaXRlbS5ibHVyLT5jb21wdXRlTGVuZ3RoPGludD4o
c3RhdGUuY3NzVG9MZW5ndGhDb252ZXJzaW9uRGF0YSgpKSA6IDA7CkBAIC0yNDIzLDkgKzI0MjIs
MTEgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQs
IENTU1ZhbHVlKiB2YWx1ZSkKIAogICAgICAgICAgICAgYXV0byBzaGFkb3dEYXRhID0gc3RkOjpt
YWtlX3VuaXF1ZTxTaGFkb3dEYXRhPihJbnRQb2ludCh4LCB5KSwgYmx1ciwgc3ByZWFkLCBzaGFk
b3dTdHlsZSwgaWQgPT0gQ1NTUHJvcGVydHlXZWJraXRCb3hTaGFkb3csIGNvbG9yLmlzVmFsaWQo
KSA/IGNvbG9yIDogQ29sb3I6OnRyYW5zcGFyZW50KTsKICAgICAgICAgICAgIGlmIChpZCA9PSBD
U1NQcm9wZXJ0eVRleHRTaGFkb3cpCi0gICAgICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0
VGV4dFNoYWRvdyhXVEY6Om1vdmUoc2hhZG93RGF0YSksIGkuaW5kZXgoKSk7IC8vIGFkZCB0byB0
aGUgbGlzdCBpZiB0aGlzIGlzIG5vdCB0aGUgZmlyc3QgZW50cnkKKyAgICAgICAgICAgICAgICBz
dGF0ZS5zdHlsZSgpLT5zZXRUZXh0U2hhZG93KFdURjo6bW92ZShzaGFkb3dEYXRhKSwgIWlzRmly
c3RFbnRyeSk7IC8vIGFkZCB0byB0aGUgbGlzdCBpZiB0aGlzIGlzIG5vdCB0aGUgZmlyc3QgZW50
cnkKICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRC
b3hTaGFkb3coV1RGOjptb3ZlKHNoYWRvd0RhdGEpLCBpLmluZGV4KCkpOyAvLyBhZGQgdG8gdGhl
IGxpc3QgaWYgdGhpcyBpcyBub3QgdGhlIGZpcnN0IGVudHJ5CisgICAgICAgICAgICAgICAgc3Rh
dGUuc3R5bGUoKS0+c2V0Qm94U2hhZG93KFdURjo6bW92ZShzaGFkb3dEYXRhKSwgIWlzRmlyc3RF
bnRyeSk7IC8vIGFkZCB0byB0aGUgbGlzdCBpZiB0aGlzIGlzIG5vdCB0aGUgZmlyc3QgZW50cnkK
KworICAgICAgICAgICAgaXNGaXJzdEVudHJ5ID0gZmFsc2U7CiAgICAgICAgIH0KICAgICAgICAg
cmV0dXJuOwogICAgIH0KQEAgLTI3MDUsNyArMjcwNiw3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6
YXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgY2Fz
ZSBDU1NQcm9wZXJ0eVdlYmtpdEdyaWRBdXRvQ29sdW1uczogewogICAgICAgICBIQU5ETEVfSU5I
RVJJVF9BTkRfSU5JVElBTChncmlkQXV0b0NvbHVtbnMsIEdyaWRBdXRvQ29sdW1ucyk7CiAgICAg
ICAgIEdyaWRUcmFja1NpemUgdHJhY2tTaXplOwotICAgICAgICBpZiAoIWNyZWF0ZUdyaWRUcmFj
a1NpemUodmFsdWUsIHRyYWNrU2l6ZSwgc3RhdGUpKQorICAgICAgICBpZiAoIWNyZWF0ZUdyaWRU
cmFja1NpemUoKnZhbHVlLCB0cmFja1NpemUsIHN0YXRlKSkKICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0R3JpZEF1dG9Db2x1bW5zKHRyYWNrU2l6ZSk7CiAg
ICAgICAgIHJldHVybjsKQEAgLTI3MTMsNyArMjcxNCw3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6
YXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgY2Fz
ZSBDU1NQcm9wZXJ0eVdlYmtpdEdyaWRBdXRvUm93czogewogICAgICAgICBIQU5ETEVfSU5IRVJJ
VF9BTkRfSU5JVElBTChncmlkQXV0b1Jvd3MsIEdyaWRBdXRvUm93cyk7CiAgICAgICAgIEdyaWRU
cmFja1NpemUgdHJhY2tTaXplOwotICAgICAgICBpZiAoIWNyZWF0ZUdyaWRUcmFja1NpemUodmFs
dWUsIHRyYWNrU2l6ZSwgc3RhdGUpKQorICAgICAgICBpZiAoIWNyZWF0ZUdyaWRUcmFja1NpemUo
KnZhbHVlLCB0cmFja1NpemUsIHN0YXRlKSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
c3RhdGUuc3R5bGUoKS0+c2V0R3JpZEF1dG9Sb3dzKHRyYWNrU2l6ZSk7CiAgICAgICAgIHJldHVy
bjsKQEAgLTMyMTMsMzMgKzMyMTQsMzMgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVByb3Bl
cnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICB9CiB9CiAKLVBhc3NS
ZWZQdHI8U3R5bGVJbWFnZT4gU3R5bGVSZXNvbHZlcjo6c3R5bGVJbWFnZShDU1NQcm9wZXJ0eUlE
IHByb3BlcnR5LCBDU1NWYWx1ZSogdmFsdWUpCitQYXNzUmVmUHRyPFN0eWxlSW1hZ2U+IFN0eWxl
UmVzb2x2ZXI6OnN0eWxlSW1hZ2UoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eSwgQ1NTVmFsdWUmIHZh
bHVlKQogewotICAgIGlmIChpczxDU1NJbWFnZVZhbHVlPigqdmFsdWUpKQorICAgIGlmIChpczxD
U1NJbWFnZVZhbHVlPih2YWx1ZSkpCiAgICAgICAgIHJldHVybiBjYWNoZWRPclBlbmRpbmdGcm9t
VmFsdWUocHJvcGVydHksIGRvd25jYXN0PENTU0ltYWdlVmFsdWU+KHZhbHVlKSk7CiAKLSAgICBp
ZiAoaXM8Q1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZT4oKnZhbHVlKSkgewotICAgICAgICBpZiAoaXM8
Q1NTR3JhZGllbnRWYWx1ZT4oKnZhbHVlKSkKLSAgICAgICAgICAgIHJldHVybiBnZW5lcmF0ZWRP
clBlbmRpbmdGcm9tVmFsdWUocHJvcGVydHksICpkb3duY2FzdDxDU1NHcmFkaWVudFZhbHVlPigq
dmFsdWUpLmdyYWRpZW50V2l0aFN0eWxlc1Jlc29sdmVkKHRoaXMpKTsKLSAgICAgICAgcmV0dXJu
IGdlbmVyYXRlZE9yUGVuZGluZ0Zyb21WYWx1ZShwcm9wZXJ0eSwgZG93bmNhc3Q8Q1NTSW1hZ2VH
ZW5lcmF0b3JWYWx1ZT4oKnZhbHVlKSk7CisgICAgaWYgKGlzPENTU0ltYWdlR2VuZXJhdG9yVmFs
dWU+KHZhbHVlKSkgeworICAgICAgICBpZiAoaXM8Q1NTR3JhZGllbnRWYWx1ZT4odmFsdWUpKQor
ICAgICAgICAgICAgcmV0dXJuIGdlbmVyYXRlZE9yUGVuZGluZ0Zyb21WYWx1ZShwcm9wZXJ0eSwg
KmRvd25jYXN0PENTU0dyYWRpZW50VmFsdWU+KHZhbHVlKS5ncmFkaWVudFdpdGhTdHlsZXNSZXNv
bHZlZCh0aGlzKSk7CisgICAgICAgIHJldHVybiBnZW5lcmF0ZWRPclBlbmRpbmdGcm9tVmFsdWUo
cHJvcGVydHksIGRvd25jYXN0PENTU0ltYWdlR2VuZXJhdG9yVmFsdWU+KHZhbHVlKSk7CiAgICAg
fQogCiAjaWYgRU5BQkxFKENTU19JTUFHRV9TRVQpCi0gICAgaWYgKGlzPENTU0ltYWdlU2V0VmFs
dWU+KCp2YWx1ZSkpCisgICAgaWYgKGlzPENTU0ltYWdlU2V0VmFsdWU+KHZhbHVlKSkKICAgICAg
ICAgcmV0dXJuIHNldE9yUGVuZGluZ0Zyb21WYWx1ZShwcm9wZXJ0eSwgZG93bmNhc3Q8Q1NTSW1h
Z2VTZXRWYWx1ZT4odmFsdWUpKTsKICNlbmRpZgogCi0gICAgaWYgKGlzPENTU0N1cnNvckltYWdl
VmFsdWU+KCp2YWx1ZSkpCisgICAgaWYgKGlzPENTU0N1cnNvckltYWdlVmFsdWU+KHZhbHVlKSkK
ICAgICAgICAgcmV0dXJuIGN1cnNvck9yUGVuZGluZ0Zyb21WYWx1ZShwcm9wZXJ0eSwgZG93bmNh
c3Q8Q1NTQ3Vyc29ySW1hZ2VWYWx1ZT4odmFsdWUpKTsKIAogICAgIHJldHVybiBudWxscHRyOwog
fQogCi1QYXNzUmVmUHRyPFN0eWxlSW1hZ2U+IFN0eWxlUmVzb2x2ZXI6OmNhY2hlZE9yUGVuZGlu
Z0Zyb21WYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5LCBDU1NJbWFnZVZhbHVlKiB2YWx1ZSkK
K1Bhc3NSZWZQdHI8U3R5bGVJbWFnZT4gU3R5bGVSZXNvbHZlcjo6Y2FjaGVkT3JQZW5kaW5nRnJv
bVZhbHVlKENTU1Byb3BlcnR5SUQgcHJvcGVydHksIENTU0ltYWdlVmFsdWUmIHZhbHVlKQogewot
ICAgIFJlZlB0cjxTdHlsZUltYWdlPiBpbWFnZSA9IHZhbHVlLT5jYWNoZWRPclBlbmRpbmdJbWFn
ZSgpOworICAgIFJlZlB0cjxTdHlsZUltYWdlPiBpbWFnZSA9IHZhbHVlLmNhY2hlZE9yUGVuZGlu
Z0ltYWdlKCk7CiAgICAgaWYgKGltYWdlICYmIGltYWdlLT5pc1BlbmRpbmdJbWFnZSgpKQotICAg
ICAgICBtX3N0YXRlLnBlbmRpbmdJbWFnZVByb3BlcnRpZXMoKS5zZXQocHJvcGVydHksIHZhbHVl
KTsKKyAgICAgICAgbV9zdGF0ZS5wZW5kaW5nSW1hZ2VQcm9wZXJ0aWVzKCkuc2V0KHByb3BlcnR5
LCAmdmFsdWUpOwogICAgIHJldHVybiBpbWFnZS5yZWxlYXNlKCk7CiB9CiAKQEAgLTMyNTgsMjAg
KzMyNTksMjAgQEAgUGFzc1JlZlB0cjxTdHlsZUltYWdlPiBTdHlsZVJlc29sdmVyOjpnZW5lcmF0
ZWRPclBlbmRpbmdGcm9tVmFsdWUoQ1NTUHJvcGVydHlJRAogfQogCiAjaWYgRU5BQkxFKENTU19J
TUFHRV9TRVQpCi1QYXNzUmVmUHRyPFN0eWxlSW1hZ2U+IFN0eWxlUmVzb2x2ZXI6OnNldE9yUGVu
ZGluZ0Zyb21WYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5LCBDU1NJbWFnZVNldFZhbHVlKiB2
YWx1ZSkKK1Bhc3NSZWZQdHI8U3R5bGVJbWFnZT4gU3R5bGVSZXNvbHZlcjo6c2V0T3JQZW5kaW5n
RnJvbVZhbHVlKENTU1Byb3BlcnR5SUQgcHJvcGVydHksIENTU0ltYWdlU2V0VmFsdWUmIHZhbHVl
KQogewotICAgIFJlZlB0cjxTdHlsZUltYWdlPiBpbWFnZSA9IHZhbHVlLT5jYWNoZWRPclBlbmRp
bmdJbWFnZVNldChkb2N1bWVudCgpKTsKKyAgICBSZWZQdHI8U3R5bGVJbWFnZT4gaW1hZ2UgPSB2
YWx1ZS5jYWNoZWRPclBlbmRpbmdJbWFnZVNldChkb2N1bWVudCgpKTsKICAgICBpZiAoaW1hZ2Ug
JiYgaW1hZ2UtPmlzUGVuZGluZ0ltYWdlKCkpCi0gICAgICAgIG1fc3RhdGUucGVuZGluZ0ltYWdl
UHJvcGVydGllcygpLnNldChwcm9wZXJ0eSwgdmFsdWUpOworICAgICAgICBtX3N0YXRlLnBlbmRp
bmdJbWFnZVByb3BlcnRpZXMoKS5zZXQocHJvcGVydHksICZ2YWx1ZSk7CiAgICAgcmV0dXJuIGlt
YWdlLnJlbGVhc2UoKTsKIH0KICNlbmRpZgogCi1QYXNzUmVmUHRyPFN0eWxlSW1hZ2U+IFN0eWxl
UmVzb2x2ZXI6OmN1cnNvck9yUGVuZGluZ0Zyb21WYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5
LCBDU1NDdXJzb3JJbWFnZVZhbHVlKiB2YWx1ZSkKK1Bhc3NSZWZQdHI8U3R5bGVJbWFnZT4gU3R5
bGVSZXNvbHZlcjo6Y3Vyc29yT3JQZW5kaW5nRnJvbVZhbHVlKENTU1Byb3BlcnR5SUQgcHJvcGVy
dHksIENTU0N1cnNvckltYWdlVmFsdWUmIHZhbHVlKQogewotICAgIFJlZlB0cjxTdHlsZUltYWdl
PiBpbWFnZSA9IHZhbHVlLT5jYWNoZWRPclBlbmRpbmdJbWFnZShkb2N1bWVudCgpKTsKKyAgICBS
ZWZQdHI8U3R5bGVJbWFnZT4gaW1hZ2UgPSB2YWx1ZS5jYWNoZWRPclBlbmRpbmdJbWFnZShkb2N1
bWVudCgpKTsKICAgICBpZiAoaW1hZ2UgJiYgaW1hZ2UtPmlzUGVuZGluZ0ltYWdlKCkpCi0gICAg
ICAgIG1fc3RhdGUucGVuZGluZ0ltYWdlUHJvcGVydGllcygpLnNldChwcm9wZXJ0eSwgdmFsdWUp
OworICAgICAgICBtX3N0YXRlLnBlbmRpbmdJbWFnZVByb3BlcnRpZXMoKS5zZXQocHJvcGVydHks
ICZ2YWx1ZSk7CiAgICAgcmV0dXJuIGltYWdlLnJlbGVhc2UoKTsKIH0KIApAQCAtMzUxOCwxNiAr
MzUxOSwxNSBAQCBib29sIFN0eWxlUmVzb2x2ZXI6OmNyZWF0ZUZpbHRlck9wZXJhdGlvbnMoQ1NT
VmFsdWUqIGluVmFsdWUsIEZpbHRlck9wZXJhdGlvbnMmCiAgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKICAgICB9CiAgICAgCi0gICAgaWYgKCFpblZhbHVlLT5pc1ZhbHVlTGlzdCgpKQorICAgIGlm
ICghaXM8Q1NTVmFsdWVMaXN0PigqaW5WYWx1ZSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAog
ICAgIEZpbHRlck9wZXJhdGlvbnMgb3BlcmF0aW9uczsKLSAgICBmb3IgKENTU1ZhbHVlTGlzdEl0
ZXJhdG9yIGkgPSBpblZhbHVlOyBpLmhhc01vcmUoKTsgaS5hZHZhbmNlKCkpIHsKLSAgICAgICAg
Q1NTVmFsdWUqIGN1cnJWYWx1ZSA9IGkudmFsdWUoKTsKLSAgICAgICAgaWYgKCFpczxXZWJLaXRD
U1NGaWx0ZXJWYWx1ZT4oKmN1cnJWYWx1ZSkpCisgICAgZm9yIChhdXRvJiBjdXJyZW50VmFsdWUg
OiBkb3duY2FzdDxDU1NWYWx1ZUxpc3Q+KCppblZhbHVlKSkgeworICAgICAgICBpZiAoIWlzPFdl
YktpdENTU0ZpbHRlclZhbHVlPihjdXJyZW50VmFsdWUuZ2V0KCkpKQogICAgICAgICAgICAgY29u
dGludWU7CiAKLSAgICAgICAgV2ViS2l0Q1NTRmlsdGVyVmFsdWUmIGZpbHRlclZhbHVlID0gZG93
bmNhc3Q8V2ViS2l0Q1NTRmlsdGVyVmFsdWU+KCppLnZhbHVlKCkpOworICAgICAgICBhdXRvJiBm
aWx0ZXJWYWx1ZSA9IGRvd25jYXN0PFdlYktpdENTU0ZpbHRlclZhbHVlPihjdXJyZW50VmFsdWUu
Z2V0KCkpOwogICAgICAgICBGaWx0ZXJPcGVyYXRpb246Ok9wZXJhdGlvblR5cGUgb3BlcmF0aW9u
VHlwZSA9IGZpbHRlck9wZXJhdGlvbkZvclR5cGUoZmlsdGVyVmFsdWUub3BlcmF0aW9uVHlwZSgp
KTsKIAogICAgICAgICBpZiAob3BlcmF0aW9uVHlwZSA9PSBGaWx0ZXJPcGVyYXRpb246OlJFRkVS
RU5DRSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuaCBi
L1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmgKaW5kZXggMjY2ZDBiMDQzOGIwMDFj
MWQ0ZTljNWQ5ODcyYzRlYjEyNTc5YzZiNy4uMGVhMTAyM2QyZTk1MjdjZTBkZjk0M2VhNjQxNDY1
YTExMjVlNzI0NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5oCkBAIC00NDcsMTMgKzQ0
NywxMyBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgUmVuZGVyU3R5bGUqIHN0eWxlTm90WWV0QXZh
aWxhYmxlKCkgeyByZXR1cm4gc19zdHlsZU5vdFlldEF2YWlsYWJsZTsgfQogCi0gICAgUGFzc1Jl
ZlB0cjxTdHlsZUltYWdlPiBzdHlsZUltYWdlKENTU1Byb3BlcnR5SUQsIENTU1ZhbHVlKik7Ci0g
ICAgUGFzc1JlZlB0cjxTdHlsZUltYWdlPiBjYWNoZWRPclBlbmRpbmdGcm9tVmFsdWUoQ1NTUHJv
cGVydHlJRCwgQ1NTSW1hZ2VWYWx1ZSopOworICAgIFBhc3NSZWZQdHI8U3R5bGVJbWFnZT4gc3R5
bGVJbWFnZShDU1NQcm9wZXJ0eUlELCBDU1NWYWx1ZSYpOworICAgIFBhc3NSZWZQdHI8U3R5bGVJ
bWFnZT4gY2FjaGVkT3JQZW5kaW5nRnJvbVZhbHVlKENTU1Byb3BlcnR5SUQsIENTU0ltYWdlVmFs
dWUmKTsKICAgICBQYXNzUmVmUHRyPFN0eWxlSW1hZ2U+IGdlbmVyYXRlZE9yUGVuZGluZ0Zyb21W
YWx1ZShDU1NQcm9wZXJ0eUlELCBDU1NJbWFnZUdlbmVyYXRvclZhbHVlJik7CiAjaWYgRU5BQkxF
KENTU19JTUFHRV9TRVQpCi0gICAgUGFzc1JlZlB0cjxTdHlsZUltYWdlPiBzZXRPclBlbmRpbmdG
cm9tVmFsdWUoQ1NTUHJvcGVydHlJRCwgQ1NTSW1hZ2VTZXRWYWx1ZSopOworICAgIFBhc3NSZWZQ
dHI8U3R5bGVJbWFnZT4gc2V0T3JQZW5kaW5nRnJvbVZhbHVlKENTU1Byb3BlcnR5SUQsIENTU0lt
YWdlU2V0VmFsdWUmKTsKICNlbmRpZgotICAgIFBhc3NSZWZQdHI8U3R5bGVJbWFnZT4gY3Vyc29y
T3JQZW5kaW5nRnJvbVZhbHVlKENTU1Byb3BlcnR5SUQsIENTU0N1cnNvckltYWdlVmFsdWUqKTsK
KyAgICBQYXNzUmVmUHRyPFN0eWxlSW1hZ2U+IGN1cnNvck9yUGVuZGluZ0Zyb21WYWx1ZShDU1NQ
cm9wZXJ0eUlELCBDU1NDdXJzb3JJbWFnZVZhbHVlJik7CiAKICAgICBib29sIGFwcGx5UHJvcGVy
dHlUb1JlZ3VsYXJTdHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuYXBwbHlQcm9wZXJ0eVRv
UmVndWxhclN0eWxlKCk7IH0KICAgICBib29sIGFwcGx5UHJvcGVydHlUb1Zpc2l0ZWRMaW5rU3R5
bGUoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLmFwcGx5UHJvcGVydHlUb1Zpc2l0ZWRMaW5rU3R5
bGUoKTsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL1RyYW5zZm9ybUZ1bmN0aW9u
cy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvVHJhbnNmb3JtRnVuY3Rpb25zLmNwcAppbmRleCA0
NTI4ZGZjYjkxYjU4NDNiM2Y4YmM0YzkxOGZhN2I4ZDZjMmMxYTY1Li4wYmE5MTA4MDVhNmI4ODlh
ODFjZWQ5OWY1ZmVhMDc0YmY3NDUwMzg5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3Mv
VHJhbnNmb3JtRnVuY3Rpb25zLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvVHJhbnNmb3Jt
RnVuY3Rpb25zLmNwcApAQCAtODMsMTkgKzgzLDE3IEBAIHN0YXRpYyBMZW5ndGggY29udmVydFRv
RmxvYXRMZW5ndGgoY29uc3QgQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlLCBjb25z
CiAKIGJvb2wgdHJhbnNmb3Jtc0ZvclZhbHVlKENTU1ZhbHVlJiB2YWx1ZSwgY29uc3QgQ1NTVG9M
ZW5ndGhDb252ZXJzaW9uRGF0YSYgY29udmVyc2lvbkRhdGEsIFRyYW5zZm9ybU9wZXJhdGlvbnMm
IG91dE9wZXJhdGlvbnMpCiB7Ci0gICAgaWYgKCF2YWx1ZS5pc1ZhbHVlTGlzdCgpKSB7CisgICAg
aWYgKCFpczxDU1NWYWx1ZUxpc3Q+KHZhbHVlKSkgewogICAgICAgICBvdXRPcGVyYXRpb25zLmNs
ZWFyKCk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKICAgICBUcmFuc2Zvcm1PcGVy
YXRpb25zIG9wZXJhdGlvbnM7Ci0gICAgZm9yIChDU1NWYWx1ZUxpc3RJdGVyYXRvciBpID0gJnZh
bHVlOyBpLmhhc01vcmUoKTsgaS5hZHZhbmNlKCkpIHsKLSAgICAgICAgQ1NTVmFsdWUmIGN1cnJW
YWx1ZSA9ICppLnZhbHVlKCk7Ci0KLSAgICAgICAgaWYgKCFpczxXZWJLaXRDU1NUcmFuc2Zvcm1W
YWx1ZT4oY3VyclZhbHVlKSkKKyAgICBmb3IgKGF1dG8mIGN1cnJlbnRWYWx1ZSA6IGRvd25jYXN0
PENTU1ZhbHVlTGlzdD4odmFsdWUpKSB7CisgICAgICAgIGlmICghaXM8V2ViS2l0Q1NTVHJhbnNm
b3JtVmFsdWU+KGN1cnJlbnRWYWx1ZS5nZXQoKSkpCiAgICAgICAgICAgICBjb250aW51ZTsKIAot
ICAgICAgICBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZSYgdHJhbnNmb3JtVmFsdWUgPSBkb3duY2Fz
dDxXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZT4oY3VyclZhbHVlKTsKKyAgICAgICAgYXV0byYgdHJh
bnNmb3JtVmFsdWUgPSBkb3duY2FzdDxXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZT4oY3VycmVudFZh
bHVlLmdldCgpKTsKICAgICAgICAgaWYgKCF0cmFuc2Zvcm1WYWx1ZS5sZW5ndGgoKSkKICAgICAg
ICAgICAgIGNvbnRpbnVlOwogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>240800</attachid>
            <date>2014-11-01 18:35:08 -0700</date>
            <delta_ts>2014-11-03 09:08:06 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-138285-20141101183517.patch</filename>
            <type>text/plain</type>
            <size>51789</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTc1NDU0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYjJjODdmOTJlN2ZhNTdh
MmQzOTYwYmU5N2I0ZGExMGU0NzMzZWIxYi4uOWE3ZDVkNThhZGRjN2Y5YWNhOGZlY2FiZDAwMmEx
YzQzYzMxZDFkOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE3IEBACisyMDE0LTExLTAxICBDaHJp
cyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgU3VwcG9ydCBtb2Rlcm4gcmFu
Z2UgbG9vcHMgb3ZlciBDU1NWYWx1ZUxpc3QKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTEzODI4NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIEFkZCBzdXBwb3J0IGZvciBtb2Rlcm4gcmFuZ2UgbG9vcHMgb3Zl
ciBDU1NWYWx1ZUxpc3Qgb2JqZWN0cy4KKyAgICAgICAgUG9ydCB0aGUgY29kZSBiYXNlIHRvIHVz
aW5nIHJhbmdlIGxvb3BzIGZvciBDU1NWYWx1ZUxpc3Qgb2JqZWN0cyBhbmQKKyAgICAgICAgZHJv
cCB0aGUgQ1NTVmFsdWVMaXN0SW5zcGVjdG9yIC8gQ1NTVmFsdWVMaXN0SXRlcmF0b3IgY2xhc3Nl
cyBhcyB0aGV5CisgICAgICAgIGFyZSBubyBsb25nZXIgbmVlZGVkLgorCisgICAgICAgIE5vIG5l
dyB0ZXN0cywgbm8gYmVoYXZpb3IgY2hhbmdlLgorCiAyMDE0LTExLTAxICBTYW0gV2VpbmlnICA8
c2FtQHdlYmtpdC5vcmc+CiAKICAgICAgICAgTW92ZSB0aGUgLXdlYmtpdC10cmFuc2Zvcm0gcHJv
cGVydHkgdG8gdGhlIG5ldyBTdHlsZUJ1aWxkZXIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9DU1NUb1N0eWxlTWFwLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NUb1N0eWxlTWFw
LmNwcAppbmRleCAzMDYxOTBhOGMzNWYzNGE2ZjgxZDM5MWM4YmRmNzQ4OTRhMTgyYjRhLi40NGE1
NzYyZTM1MmNlNGVmODhjM2UwOTc2ODIyNzc2N2IwOTA0MDJjIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9jc3MvQ1NTVG9TdHlsZU1hcC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NT
U1RvU3R5bGVNYXAuY3BwCkBAIC0zMCw2ICszMCw5IEBACiAKICNpbmNsdWRlICJBbmltYXRpb24u
aCIKICNpbmNsdWRlICJDU1NCb3JkZXJJbWFnZVNsaWNlVmFsdWUuaCIKKyNpbmNsdWRlICJDU1NJ
bWFnZUdlbmVyYXRvclZhbHVlLmgiCisjaW5jbHVkZSAiQ1NTSW1hZ2VTZXRWYWx1ZS5oIgorI2lu
Y2x1ZGUgIkNTU0ltYWdlVmFsdWUuaCIKICNpbmNsdWRlICJDU1NQcmltaXRpdmVWYWx1ZS5oIgog
I2luY2x1ZGUgIkNTU1ByaW1pdGl2ZVZhbHVlTWFwcGluZ3MuaCIKICNpbmNsdWRlICJDU1NUaW1p
bmdGdW5jdGlvblZhbHVlLmgiCkBAIC02Miw3ICs2NSw3IEBAIGJvb2wgQ1NTVG9TdHlsZU1hcDo6
dXNlU1ZHWm9vbVJ1bGVzKCkgY29uc3QKICAgICByZXR1cm4gbV9yZXNvbHZlci0+dXNlU1ZHWm9v
bVJ1bGVzKCk7CiB9CiAKLVBhc3NSZWZQdHI8U3R5bGVJbWFnZT4gQ1NTVG9TdHlsZU1hcDo6c3R5
bGVJbWFnZShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SWQsIENTU1ZhbHVlKiB2YWx1ZSkKK1Bhc3NS
ZWZQdHI8U3R5bGVJbWFnZT4gQ1NTVG9TdHlsZU1hcDo6c3R5bGVJbWFnZShDU1NQcm9wZXJ0eUlE
IHByb3BlcnR5SWQsIENTU1ZhbHVlJiB2YWx1ZSkKIHsKICAgICByZXR1cm4gbV9yZXNvbHZlci0+
c3R5bGVJbWFnZShwcm9wZXJ0eUlkLCB2YWx1ZSk7CiB9CkBAIC0xNTYsNyArMTU5LDcgQEAgdm9p
ZCBDU1NUb1N0eWxlTWFwOjptYXBGaWxsSW1hZ2UoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eSwgRmls
bExheWVyKiBsYXllciwgQ1NTVmEKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGxheWVy
LT5zZXRJbWFnZShzdHlsZUltYWdlKHByb3BlcnR5LCB2YWx1ZSkpOworICAgIGxheWVyLT5zZXRJ
bWFnZShzdHlsZUltYWdlKHByb3BlcnR5LCAqdmFsdWUpKTsKIH0KIAogdm9pZCBDU1NUb1N0eWxl
TWFwOjptYXBGaWxsUmVwZWF0WChDU1NQcm9wZXJ0eUlELCBGaWxsTGF5ZXIqIGxheWVyLCBDU1NW
YWx1ZSogdmFsdWUpCkBAIC0zMjIsMzIgKzMyNSwzMCBAQCB2b2lkIENTU1RvU3R5bGVNYXA6Om1h
cEZpbGxNYXNrU291cmNlVHlwZShDU1NQcm9wZXJ0eUlELCBGaWxsTGF5ZXIqIGxheWVyLCBDU1NW
YQogICAgIGxheWVyLT5zZXRNYXNrU291cmNlVHlwZSh0eXBlKTsKIH0KIAotdm9pZCBDU1NUb1N0
eWxlTWFwOjptYXBBbmltYXRpb25EZWxheShBbmltYXRpb24qIGFuaW1hdGlvbiwgQ1NTVmFsdWUq
IHZhbHVlKQordm9pZCBDU1NUb1N0eWxlTWFwOjptYXBBbmltYXRpb25EZWxheShBbmltYXRpb24q
IGFuaW1hdGlvbiwgQ1NTVmFsdWUmIHZhbHVlKQogewotICAgIGlmICh2YWx1ZS0+aXNJbml0aWFs
VmFsdWUoKSkgeworICAgIGlmICh2YWx1ZS5pc0luaXRpYWxWYWx1ZSgpKSB7CiAgICAgICAgIGFu
aW1hdGlvbi0+c2V0RGVsYXkoQW5pbWF0aW9uOjppbml0aWFsQW5pbWF0aW9uRGVsYXkoKSk7CiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpZiAoIWlzPENTU1ByaW1pdGl2ZVZhbHVlPigq
dmFsdWUpKQorICAgIGlmICghaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVlKSkKICAgICAgICAg
cmV0dXJuOwogCi0gICAgQ1NTUHJpbWl0aXZlVmFsdWUmIHByaW1pdGl2ZVZhbHVlID0gZG93bmNh
c3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSk7Ci0gICAgYW5pbWF0aW9uLT5zZXREZWxheShw
cmltaXRpdmVWYWx1ZS5jb21wdXRlVGltZTxkb3VibGUsIENTU1ByaW1pdGl2ZVZhbHVlOjpTZWNv
bmRzPigpKTsKKyAgICBhbmltYXRpb24tPnNldERlbGF5KGRvd25jYXN0PENTU1ByaW1pdGl2ZVZh
bHVlPih2YWx1ZSkuY29tcHV0ZVRpbWU8ZG91YmxlLCBDU1NQcmltaXRpdmVWYWx1ZTo6U2Vjb25k
cz4oKSk7CiB9CiAKLXZvaWQgQ1NTVG9TdHlsZU1hcDo6bWFwQW5pbWF0aW9uRGlyZWN0aW9uKEFu
aW1hdGlvbiogbGF5ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKK3ZvaWQgQ1NTVG9TdHlsZU1hcDo6bWFw
QW5pbWF0aW9uRGlyZWN0aW9uKEFuaW1hdGlvbiogbGF5ZXIsIENTU1ZhbHVlJiB2YWx1ZSkKIHsK
LSAgICBpZiAodmFsdWUtPmlzSW5pdGlhbFZhbHVlKCkpIHsKKyAgICBpZiAodmFsdWUuaXNJbml0
aWFsVmFsdWUoKSkgewogICAgICAgICBsYXllci0+c2V0RGlyZWN0aW9uKEFuaW1hdGlvbjo6aW5p
dGlhbEFuaW1hdGlvbkRpcmVjdGlvbigpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAg
IGlmICghaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSkpCisgICAgaWYgKCFpczxDU1NQcmlt
aXRpdmVWYWx1ZT4odmFsdWUpKQogICAgICAgICByZXR1cm47CiAKLSAgICBDU1NQcmltaXRpdmVW
YWx1ZSYgcHJpbWl0aXZlVmFsdWUgPSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVl
KTsKLSAgICBzd2l0Y2ggKHByaW1pdGl2ZVZhbHVlLmdldFZhbHVlSUQoKSkgeworICAgIHN3aXRj
aCAoZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVlKS5nZXRWYWx1ZUlEKCkpIHsKICAg
ICBjYXNlIENTU1ZhbHVlTm9ybWFsOgogICAgICAgICBsYXllci0+c2V0RGlyZWN0aW9uKEFuaW1h
dGlvbjo6QW5pbWF0aW9uRGlyZWN0aW9uTm9ybWFsKTsKICAgICAgICAgYnJlYWs7CkBAIC0zNjUs
MzIgKzM2NiwzMCBAQCB2b2lkIENTU1RvU3R5bGVNYXA6Om1hcEFuaW1hdGlvbkRpcmVjdGlvbihB
bmltYXRpb24qIGxheWVyLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgfQogfQogCi12b2lkIENTU1Rv
U3R5bGVNYXA6Om1hcEFuaW1hdGlvbkR1cmF0aW9uKEFuaW1hdGlvbiogYW5pbWF0aW9uLCBDU1NW
YWx1ZSogdmFsdWUpCit2b2lkIENTU1RvU3R5bGVNYXA6Om1hcEFuaW1hdGlvbkR1cmF0aW9uKEFu
aW1hdGlvbiogYW5pbWF0aW9uLCBDU1NWYWx1ZSYgdmFsdWUpCiB7Ci0gICAgaWYgKHZhbHVlLT5p
c0luaXRpYWxWYWx1ZSgpKSB7CisgICAgaWYgKHZhbHVlLmlzSW5pdGlhbFZhbHVlKCkpIHsKICAg
ICAgICAgYW5pbWF0aW9uLT5zZXREdXJhdGlvbihBbmltYXRpb246OmluaXRpYWxBbmltYXRpb25E
dXJhdGlvbigpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmICghaXM8Q1NTUHJp
bWl0aXZlVmFsdWU+KCp2YWx1ZSkpCisgICAgaWYgKCFpczxDU1NQcmltaXRpdmVWYWx1ZT4odmFs
dWUpKQogICAgICAgICByZXR1cm47CiAKLSAgICBDU1NQcmltaXRpdmVWYWx1ZSYgcHJpbWl0aXZl
VmFsdWUgPSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlKTsKLSAgICBhbmltYXRp
b24tPnNldER1cmF0aW9uKHByaW1pdGl2ZVZhbHVlLmNvbXB1dGVUaW1lPGRvdWJsZSwgQ1NTUHJp
bWl0aXZlVmFsdWU6OlNlY29uZHM+KCkpOworICAgIGFuaW1hdGlvbi0+c2V0RHVyYXRpb24oZG93
bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVlKS5jb21wdXRlVGltZTxkb3VibGUsIENTU1By
aW1pdGl2ZVZhbHVlOjpTZWNvbmRzPigpKTsKIH0KIAotdm9pZCBDU1NUb1N0eWxlTWFwOjptYXBB
bmltYXRpb25GaWxsTW9kZShBbmltYXRpb24qIGxheWVyLCBDU1NWYWx1ZSogdmFsdWUpCit2b2lk
IENTU1RvU3R5bGVNYXA6Om1hcEFuaW1hdGlvbkZpbGxNb2RlKEFuaW1hdGlvbiogbGF5ZXIsIENT
U1ZhbHVlJiB2YWx1ZSkKIHsKLSAgICBpZiAodmFsdWUtPmlzSW5pdGlhbFZhbHVlKCkpIHsKKyAg
ICBpZiAodmFsdWUuaXNJbml0aWFsVmFsdWUoKSkgewogICAgICAgICBsYXllci0+c2V0RmlsbE1v
ZGUoQW5pbWF0aW9uOjppbml0aWFsQW5pbWF0aW9uRmlsbE1vZGUoKSk7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAKLSAgICBpZiAoIWlzPENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpKQorICAg
IGlmICghaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVlKSkKICAgICAgICAgcmV0dXJuOwogCi0g
ICAgQ1NTUHJpbWl0aXZlVmFsdWUmIHByaW1pdGl2ZVZhbHVlID0gZG93bmNhc3Q8Q1NTUHJpbWl0
aXZlVmFsdWU+KCp2YWx1ZSk7Ci0gICAgc3dpdGNoIChwcmltaXRpdmVWYWx1ZS5nZXRWYWx1ZUlE
KCkpIHsKKyAgICBzd2l0Y2ggKGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPih2YWx1ZSkuZ2V0
VmFsdWVJRCgpKSB7CiAgICAgY2FzZSBDU1NWYWx1ZU5vbmU6CiAgICAgICAgIGxheWVyLT5zZXRG
aWxsTW9kZShBbmltYXRpb25GaWxsTW9kZU5vbmUpOwogICAgICAgICBicmVhazsKQEAgLTQwOCw2
NyArNDA3LDY2IEBAIHZvaWQgQ1NTVG9TdHlsZU1hcDo6bWFwQW5pbWF0aW9uRmlsbE1vZGUoQW5p
bWF0aW9uKiBsYXllciwgQ1NTVmFsdWUqIHZhbHVlKQogICAgIH0KIH0KIAotdm9pZCBDU1NUb1N0
eWxlTWFwOjptYXBBbmltYXRpb25JdGVyYXRpb25Db3VudChBbmltYXRpb24qIGFuaW1hdGlvbiwg
Q1NTVmFsdWUqIHZhbHVlKQordm9pZCBDU1NUb1N0eWxlTWFwOjptYXBBbmltYXRpb25JdGVyYXRp
b25Db3VudChBbmltYXRpb24qIGFuaW1hdGlvbiwgQ1NTVmFsdWUmIHZhbHVlKQogewotICAgIGlm
ICh2YWx1ZS0+aXNJbml0aWFsVmFsdWUoKSkgeworICAgIGlmICh2YWx1ZS5pc0luaXRpYWxWYWx1
ZSgpKSB7CiAgICAgICAgIGFuaW1hdGlvbi0+c2V0SXRlcmF0aW9uQ291bnQoQW5pbWF0aW9uOjpp
bml0aWFsQW5pbWF0aW9uSXRlcmF0aW9uQ291bnQoKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9
CiAKLSAgICBpZiAoIWlzPENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpKQorICAgIGlmICghaXM8
Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVlKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgQ1NTUHJp
bWl0aXZlVmFsdWUmIHByaW1pdGl2ZVZhbHVlID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+
KCp2YWx1ZSk7CisgICAgYXV0byYgcHJpbWl0aXZlVmFsdWUgPSBkb3duY2FzdDxDU1NQcmltaXRp
dmVWYWx1ZT4odmFsdWUpOwogICAgIGlmIChwcmltaXRpdmVWYWx1ZS5nZXRWYWx1ZUlEKCkgPT0g
Q1NTVmFsdWVJbmZpbml0ZSkKICAgICAgICAgYW5pbWF0aW9uLT5zZXRJdGVyYXRpb25Db3VudChB
bmltYXRpb246Okl0ZXJhdGlvbkNvdW50SW5maW5pdGUpOwogICAgIGVsc2UKICAgICAgICAgYW5p
bWF0aW9uLT5zZXRJdGVyYXRpb25Db3VudChwcmltaXRpdmVWYWx1ZS5nZXRGbG9hdFZhbHVlKCkp
OwogfQogCi12b2lkIENTU1RvU3R5bGVNYXA6Om1hcEFuaW1hdGlvbk5hbWUoQW5pbWF0aW9uKiBs
YXllciwgQ1NTVmFsdWUqIHZhbHVlKQordm9pZCBDU1NUb1N0eWxlTWFwOjptYXBBbmltYXRpb25O
YW1lKEFuaW1hdGlvbiogbGF5ZXIsIENTU1ZhbHVlJiB2YWx1ZSkKIHsKLSAgICBpZiAodmFsdWUt
PmlzSW5pdGlhbFZhbHVlKCkpIHsKKyAgICBpZiAodmFsdWUuaXNJbml0aWFsVmFsdWUoKSkgewog
ICAgICAgICBsYXllci0+c2V0TmFtZShBbmltYXRpb246OmluaXRpYWxBbmltYXRpb25OYW1lKCkp
OwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKCFpczxDU1NQcmltaXRpdmVWYWx1
ZT4oKnZhbHVlKSkKKyAgICBpZiAoIWlzPENTU1ByaW1pdGl2ZVZhbHVlPih2YWx1ZSkpCiAgICAg
ICAgIHJldHVybjsKIAotICAgIENTU1ByaW1pdGl2ZVZhbHVlJiBwcmltaXRpdmVWYWx1ZSA9IGRv
d25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpOworICAgIGF1dG8mIHByaW1pdGl2ZVZh
bHVlID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVlKTsKICAgICBpZiAocHJpbWl0
aXZlVmFsdWUuZ2V0VmFsdWVJRCgpID09IENTU1ZhbHVlTm9uZSkKICAgICAgICAgbGF5ZXItPnNl
dElzTm9uZUFuaW1hdGlvbih0cnVlKTsKICAgICBlbHNlCiAgICAgICAgIGxheWVyLT5zZXROYW1l
KHByaW1pdGl2ZVZhbHVlLmdldFN0cmluZ1ZhbHVlKCkpOwogfQogCi12b2lkIENTU1RvU3R5bGVN
YXA6Om1hcEFuaW1hdGlvblBsYXlTdGF0ZShBbmltYXRpb24qIGxheWVyLCBDU1NWYWx1ZSogdmFs
dWUpCit2b2lkIENTU1RvU3R5bGVNYXA6Om1hcEFuaW1hdGlvblBsYXlTdGF0ZShBbmltYXRpb24q
IGxheWVyLCBDU1NWYWx1ZSYgdmFsdWUpCiB7Ci0gICAgaWYgKHZhbHVlLT5pc0luaXRpYWxWYWx1
ZSgpKSB7CisgICAgaWYgKHZhbHVlLmlzSW5pdGlhbFZhbHVlKCkpIHsKICAgICAgICAgbGF5ZXIt
PnNldFBsYXlTdGF0ZShBbmltYXRpb246OmluaXRpYWxBbmltYXRpb25QbGF5U3RhdGUoKSk7CiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpZiAoIWlzPENTU1ByaW1pdGl2ZVZhbHVlPigq
dmFsdWUpKQorICAgIGlmICghaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVlKSkKICAgICAgICAg
cmV0dXJuOwogCi0gICAgQ1NTUHJpbWl0aXZlVmFsdWUmIHByaW1pdGl2ZVZhbHVlID0gZG93bmNh
c3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSk7Ci0gICAgRUFuaW1QbGF5U3RhdGUgcGxheVN0
YXRlID0gKHByaW1pdGl2ZVZhbHVlLmdldFZhbHVlSUQoKSA9PSBDU1NWYWx1ZVBhdXNlZCkgPyBB
bmltUGxheVN0YXRlUGF1c2VkIDogQW5pbVBsYXlTdGF0ZVBsYXlpbmc7CisgICAgRUFuaW1QbGF5
U3RhdGUgcGxheVN0YXRlID0gKGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPih2YWx1ZSkuZ2V0
VmFsdWVJRCgpID09IENTU1ZhbHVlUGF1c2VkKSA/IEFuaW1QbGF5U3RhdGVQYXVzZWQgOiBBbmlt
UGxheVN0YXRlUGxheWluZzsKICAgICBsYXllci0+c2V0UGxheVN0YXRlKHBsYXlTdGF0ZSk7CiB9
CiAKLXZvaWQgQ1NTVG9TdHlsZU1hcDo6bWFwQW5pbWF0aW9uUHJvcGVydHkoQW5pbWF0aW9uKiBh
bmltYXRpb24sIENTU1ZhbHVlKiB2YWx1ZSkKK3ZvaWQgQ1NTVG9TdHlsZU1hcDo6bWFwQW5pbWF0
aW9uUHJvcGVydHkoQW5pbWF0aW9uKiBhbmltYXRpb24sIENTU1ZhbHVlJiB2YWx1ZSkKIHsKLSAg
ICBpZiAodmFsdWUtPmlzSW5pdGlhbFZhbHVlKCkpIHsKKyAgICBpZiAodmFsdWUuaXNJbml0aWFs
VmFsdWUoKSkgewogICAgICAgICBhbmltYXRpb24tPnNldEFuaW1hdGlvbk1vZGUoQW5pbWF0aW9u
OjpBbmltYXRlQWxsKTsKICAgICAgICAgYW5pbWF0aW9uLT5zZXRQcm9wZXJ0eShDU1NQcm9wZXJ0
eUludmFsaWQpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKCFpczxDU1NQcmlt
aXRpdmVWYWx1ZT4oKnZhbHVlKSkKKyAgICBpZiAoIWlzPENTU1ByaW1pdGl2ZVZhbHVlPih2YWx1
ZSkpCiAgICAgICAgIHJldHVybjsKIAotICAgIENTU1ByaW1pdGl2ZVZhbHVlJiBwcmltaXRpdmVW
YWx1ZSA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpOworICAgIGF1dG8mIHBy
aW1pdGl2ZVZhbHVlID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVlKTsKICAgICBp
ZiAocHJpbWl0aXZlVmFsdWUuZ2V0VmFsdWVJRCgpID09IENTU1ZhbHVlQWxsKSB7CiAgICAgICAg
IGFuaW1hdGlvbi0+c2V0QW5pbWF0aW9uTW9kZShBbmltYXRpb246OkFuaW1hdGVBbGwpOwogICAg
ICAgICBhbmltYXRpb24tPnNldFByb3BlcnR5KENTU1Byb3BlcnR5SW52YWxpZCk7CkBAIC00ODEs
MTYgKzQ3OSwxNSBAQCB2b2lkIENTU1RvU3R5bGVNYXA6Om1hcEFuaW1hdGlvblByb3BlcnR5KEFu
aW1hdGlvbiogYW5pbWF0aW9uLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgfQogfQogCi12b2lkIENT
U1RvU3R5bGVNYXA6Om1hcEFuaW1hdGlvblRpbWluZ0Z1bmN0aW9uKEFuaW1hdGlvbiogYW5pbWF0
aW9uLCBDU1NWYWx1ZSogdmFsdWUpCit2b2lkIENTU1RvU3R5bGVNYXA6Om1hcEFuaW1hdGlvblRp
bWluZ0Z1bmN0aW9uKEFuaW1hdGlvbiogYW5pbWF0aW9uLCBDU1NWYWx1ZSYgdmFsdWUpCiB7Ci0g
ICAgaWYgKHZhbHVlLT5pc0luaXRpYWxWYWx1ZSgpKSB7CisgICAgaWYgKHZhbHVlLmlzSW5pdGlh
bFZhbHVlKCkpIHsKICAgICAgICAgYW5pbWF0aW9uLT5zZXRUaW1pbmdGdW5jdGlvbihBbmltYXRp
b246OmluaXRpYWxBbmltYXRpb25UaW1pbmdGdW5jdGlvbigpKTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KIAotICAgIGlmIChpczxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlKSkgewotICAgICAg
ICBDU1NQcmltaXRpdmVWYWx1ZSYgcHJpbWl0aXZlVmFsdWUgPSBkb3duY2FzdDxDU1NQcmltaXRp
dmVWYWx1ZT4oKnZhbHVlKTsKLSAgICAgICAgc3dpdGNoIChwcmltaXRpdmVWYWx1ZS5nZXRWYWx1
ZUlEKCkpIHsKKyAgICBpZiAoaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVlKSkgeworICAgICAg
ICBzd2l0Y2ggKGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPih2YWx1ZSkuZ2V0VmFsdWVJRCgp
KSB7CiAgICAgICAgIGNhc2UgQ1NTVmFsdWVMaW5lYXI6CiAgICAgICAgICAgICBhbmltYXRpb24t
PnNldFRpbWluZ0Z1bmN0aW9uKExpbmVhclRpbWluZ0Z1bmN0aW9uOjpjcmVhdGUoKSk7CiAgICAg
ICAgICAgICBicmVhazsKQEAgLTUxOCwxMSArNTE1LDExIEBAIHZvaWQgQ1NTVG9TdHlsZU1hcDo6
bWFwQW5pbWF0aW9uVGltaW5nRnVuY3Rpb24oQW5pbWF0aW9uKiBhbmltYXRpb24sIENTU1ZhbHVl
KiB2CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpZiAoaXM8Q1NTQ3ViaWNCZXppZXJU
aW1pbmdGdW5jdGlvblZhbHVlPigqdmFsdWUpKSB7Ci0gICAgICAgIENTU0N1YmljQmV6aWVyVGlt
aW5nRnVuY3Rpb25WYWx1ZSYgY3ViaWNUaW1pbmdGdW5jdGlvbiA9IGRvd25jYXN0PENTU0N1Ymlj
QmV6aWVyVGltaW5nRnVuY3Rpb25WYWx1ZT4oKnZhbHVlKTsKKyAgICBpZiAoaXM8Q1NTQ3ViaWNC
ZXppZXJUaW1pbmdGdW5jdGlvblZhbHVlPih2YWx1ZSkpIHsKKyAgICAgICAgYXV0byYgY3ViaWNU
aW1pbmdGdW5jdGlvbiA9IGRvd25jYXN0PENTU0N1YmljQmV6aWVyVGltaW5nRnVuY3Rpb25WYWx1
ZT4odmFsdWUpOwogICAgICAgICBhbmltYXRpb24tPnNldFRpbWluZ0Z1bmN0aW9uKEN1YmljQmV6
aWVyVGltaW5nRnVuY3Rpb246OmNyZWF0ZShjdWJpY1RpbWluZ0Z1bmN0aW9uLngxKCksIGN1Ymlj
VGltaW5nRnVuY3Rpb24ueTEoKSwgY3ViaWNUaW1pbmdGdW5jdGlvbi54MigpLCBjdWJpY1RpbWlu
Z0Z1bmN0aW9uLnkyKCkpKTsKLSAgICB9IGVsc2UgaWYgKGlzPENTU1N0ZXBzVGltaW5nRnVuY3Rp
b25WYWx1ZT4oKnZhbHVlKSkgewotICAgICAgICBDU1NTdGVwc1RpbWluZ0Z1bmN0aW9uVmFsdWUm
IHN0ZXBzVGltaW5nRnVuY3Rpb24gPSBkb3duY2FzdDxDU1NTdGVwc1RpbWluZ0Z1bmN0aW9uVmFs
dWU+KCp2YWx1ZSk7CisgICAgfSBlbHNlIGlmIChpczxDU1NTdGVwc1RpbWluZ0Z1bmN0aW9uVmFs
dWU+KHZhbHVlKSkgeworICAgICAgICBhdXRvJiBzdGVwc1RpbWluZ0Z1bmN0aW9uID0gZG93bmNh
c3Q8Q1NTU3RlcHNUaW1pbmdGdW5jdGlvblZhbHVlPih2YWx1ZSk7CiAgICAgICAgIGFuaW1hdGlv
bi0+c2V0VGltaW5nRnVuY3Rpb24oU3RlcHNUaW1pbmdGdW5jdGlvbjo6Y3JlYXRlKHN0ZXBzVGlt
aW5nRnVuY3Rpb24ubnVtYmVyT2ZTdGVwcygpLCBzdGVwc1RpbWluZ0Z1bmN0aW9uLnN0ZXBBdFN0
YXJ0KCkpKTsKICAgICB9CiB9CkBAIC01NDUsMzMgKzU0MiwzMSBAQCB2b2lkIENTU1RvU3R5bGVN
YXA6Om1hcE5pbmVQaWVjZUltYWdlKENTU1Byb3BlcnR5SUQgcHJvcGVydHksIENTU1ZhbHVlKiB2
YWx1ZSwgTgogICAgIGVsc2UKICAgICAgICAgaW1hZ2VQcm9wZXJ0eSA9IHByb3BlcnR5OwogCi0g
ICAgZm9yICh1bnNpZ25lZCBpID0gMCA7IGkgPCBib3JkZXJJbWFnZS5sZW5ndGgoKTsgKytpKSB7
Ci0gICAgICAgIENTU1ZhbHVlKiBjdXJyZW50ID0gYm9yZGVySW1hZ2UuaXRlbShpKTsKLQotICAg
ICAgICBpZiAoY3VycmVudC0+aXNJbWFnZVZhbHVlKCkgfHwgY3VycmVudC0+aXNJbWFnZUdlbmVy
YXRvclZhbHVlKCkKKyAgICBmb3IgKGF1dG8mIGN1cnJlbnQgOiBib3JkZXJJbWFnZSkgeworICAg
ICAgICBpZiAoaXM8Q1NTSW1hZ2VWYWx1ZT4oY3VycmVudC5nZXQoKSkgfHwgaXM8Q1NTSW1hZ2VH
ZW5lcmF0b3JWYWx1ZT4oY3VycmVudC5nZXQoKSkKICNpZiBFTkFCTEUoQ1NTX0lNQUdFX1NFVCkK
LSAgICAgICAgICAgIHx8IGN1cnJlbnQtPmlzSW1hZ2VTZXRWYWx1ZSgpCisgICAgICAgICAgICB8
fCBpczxDU1NJbWFnZVNldFZhbHVlPihjdXJyZW50LmdldCgpKQogI2VuZGlmCiAgICAgICAgICAg
ICApCi0gICAgICAgICAgICBpbWFnZS5zZXRJbWFnZShzdHlsZUltYWdlKGltYWdlUHJvcGVydHks
IGN1cnJlbnQpKTsKLSAgICAgICAgZWxzZSBpZiAoY3VycmVudC0+aXNCb3JkZXJJbWFnZVNsaWNl
VmFsdWUoKSkKLSAgICAgICAgICAgIG1hcE5pbmVQaWVjZUltYWdlU2xpY2UoY3VycmVudCwgaW1h
Z2UpOwotICAgICAgICBlbHNlIGlmIChpczxDU1NWYWx1ZUxpc3Q+KCpjdXJyZW50KSkgewotICAg
ICAgICAgICAgQ1NTVmFsdWVMaXN0JiBzbGFzaExpc3QgPSBkb3duY2FzdDxDU1NWYWx1ZUxpc3Q+
KCpjdXJyZW50KTsKKyAgICAgICAgICAgIGltYWdlLnNldEltYWdlKHN0eWxlSW1hZ2UoaW1hZ2VQ
cm9wZXJ0eSwgY3VycmVudC5nZXQoKSkpOworICAgICAgICBlbHNlIGlmIChpczxDU1NCb3JkZXJJ
bWFnZVNsaWNlVmFsdWU+KGN1cnJlbnQuZ2V0KCkpKQorICAgICAgICAgICAgbWFwTmluZVBpZWNl
SW1hZ2VTbGljZShjdXJyZW50LmdldCgpLCBpbWFnZSk7CisgICAgICAgIGVsc2UgaWYgKGlzPENT
U1ZhbHVlTGlzdD4oY3VycmVudC5nZXQoKSkpIHsKKyAgICAgICAgICAgIENTU1ZhbHVlTGlzdCYg
c2xhc2hMaXN0ID0gZG93bmNhc3Q8Q1NTVmFsdWVMaXN0PihjdXJyZW50LmdldCgpKTsKICAgICAg
ICAgICAgIC8vIE1hcCBpbiB0aGUgaW1hZ2Ugc2xpY2VzLgotICAgICAgICAgICAgaWYgKHNsYXNo
TGlzdC5pdGVtKDApICYmIHNsYXNoTGlzdC5pdGVtKDApLT5pc0JvcmRlckltYWdlU2xpY2VWYWx1
ZSgpKQotICAgICAgICAgICAgICAgIG1hcE5pbmVQaWVjZUltYWdlU2xpY2Uoc2xhc2hMaXN0Lml0
ZW0oMCksIGltYWdlKTsKKyAgICAgICAgICAgIGlmIChpczxDU1NCb3JkZXJJbWFnZVNsaWNlVmFs
dWU+KHNsYXNoTGlzdC5pdGVtKDApKSkKKyAgICAgICAgICAgICAgICBtYXBOaW5lUGllY2VJbWFn
ZVNsaWNlKCpzbGFzaExpc3QuaXRlbSgwKSwgaW1hZ2UpOwogCiAgICAgICAgICAgICAvLyBNYXAg
aW4gdGhlIGJvcmRlciBzbGljZXMuCiAgICAgICAgICAgICBpZiAoc2xhc2hMaXN0Lml0ZW0oMSkp
Ci0gICAgICAgICAgICAgICAgaW1hZ2Uuc2V0Qm9yZGVyU2xpY2VzKG1hcE5pbmVQaWVjZUltYWdl
UXVhZChzbGFzaExpc3QuaXRlbSgxKSkpOworICAgICAgICAgICAgICAgIGltYWdlLnNldEJvcmRl
clNsaWNlcyhtYXBOaW5lUGllY2VJbWFnZVF1YWQoKnNsYXNoTGlzdC5pdGVtKDEpKSk7CiAKICAg
ICAgICAgICAgIC8vIE1hcCBpbiB0aGUgb3V0c2V0LgogICAgICAgICAgICAgaWYgKHNsYXNoTGlz
dC5pdGVtKDIpKQotICAgICAgICAgICAgICAgIGltYWdlLnNldE91dHNldChtYXBOaW5lUGllY2VJ
bWFnZVF1YWQoc2xhc2hMaXN0Lml0ZW0oMikpKTsKLSAgICAgICAgfSBlbHNlIGlmIChjdXJyZW50
LT5pc1ByaW1pdGl2ZVZhbHVlKCkpIHsKKyAgICAgICAgICAgICAgICBpbWFnZS5zZXRPdXRzZXQo
bWFwTmluZVBpZWNlSW1hZ2VRdWFkKCpzbGFzaExpc3QuaXRlbSgyKSkpOworICAgICAgICB9IGVs
c2UgaWYgKGlzPENTU1ByaW1pdGl2ZVZhbHVlPihjdXJyZW50LmdldCgpKSkgewogICAgICAgICAg
ICAgLy8gU2V0IHRoZSBhcHByb3ByaWF0ZSBydWxlcyBmb3Igc3RyZXRjaC9yb3VuZC9yZXBlYXQg
b2YgdGhlIHNsaWNlcy4KLSAgICAgICAgICAgIG1hcE5pbmVQaWVjZUltYWdlUmVwZWF0KGN1cnJl
bnQsIGltYWdlKTsKKyAgICAgICAgICAgIG1hcE5pbmVQaWVjZUltYWdlUmVwZWF0KGN1cnJlbnQu
Z2V0KCksIGltYWdlKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtNTkwLDEzICs1ODUsMTMgQEAg
dm9pZCBDU1NUb1N0eWxlTWFwOjptYXBOaW5lUGllY2VJbWFnZShDU1NQcm9wZXJ0eUlEIHByb3Bl
cnR5LCBDU1NWYWx1ZSogdmFsdWUsIE4KICAgICB9CiB9CiAKLXZvaWQgQ1NTVG9TdHlsZU1hcDo6
bWFwTmluZVBpZWNlSW1hZ2VTbGljZShDU1NWYWx1ZSogdmFsdWUsIE5pbmVQaWVjZUltYWdlJiBp
bWFnZSkKK3ZvaWQgQ1NTVG9TdHlsZU1hcDo6bWFwTmluZVBpZWNlSW1hZ2VTbGljZShDU1NWYWx1
ZSYgdmFsdWUsIE5pbmVQaWVjZUltYWdlJiBpbWFnZSkKIHsKICAgICBpZiAoIWlzPENTU0JvcmRl
ckltYWdlU2xpY2VWYWx1ZT4odmFsdWUpKQogICAgICAgICByZXR1cm47CiAKICAgICAvLyBSZXRy
aWV2ZSB0aGUgYm9yZGVyIGltYWdlIHZhbHVlLgotICAgIENTU0JvcmRlckltYWdlU2xpY2VWYWx1
ZSYgYm9yZGVySW1hZ2VTbGljZSA9IGRvd25jYXN0PENTU0JvcmRlckltYWdlU2xpY2VWYWx1ZT4o
KnZhbHVlKTsKKyAgICBhdXRvJiBib3JkZXJJbWFnZVNsaWNlID0gZG93bmNhc3Q8Q1NTQm9yZGVy
SW1hZ2VTbGljZVZhbHVlPih2YWx1ZSk7CiAKICAgICAvLyBTZXQgdXAgYSBsZW5ndGggYm94IHRv
IHJlcHJlc2VudCBvdXIgaW1hZ2Ugc2xpY2VzLgogICAgIExlbmd0aEJveCBib3g7CkBAIC02MjMs
NyArNjE4LDcgQEAgdm9pZCBDU1NUb1N0eWxlTWFwOjptYXBOaW5lUGllY2VJbWFnZVNsaWNlKENT
U1ZhbHVlKiB2YWx1ZSwgTmluZVBpZWNlSW1hZ2UmIGltYWcKICAgICBpbWFnZS5zZXRGaWxsKGJv
cmRlckltYWdlU2xpY2UubV9maWxsKTsKIH0KIAotTGVuZ3RoQm94IENTU1RvU3R5bGVNYXA6Om1h
cE5pbmVQaWVjZUltYWdlUXVhZChDU1NWYWx1ZSogdmFsdWUpCitMZW5ndGhCb3ggQ1NTVG9TdHls
ZU1hcDo6bWFwTmluZVBpZWNlSW1hZ2VRdWFkKENTU1ZhbHVlJiB2YWx1ZSkKIHsKICAgICBpZiAo
IWlzPENTU1ByaW1pdGl2ZVZhbHVlPih2YWx1ZSkpCiAgICAgICAgIHJldHVybiBMZW5ndGhCb3go
KTsKQEAgLTYzMiw3ICs2MjcsNyBAQCBMZW5ndGhCb3ggQ1NTVG9TdHlsZU1hcDo6bWFwTmluZVBp
ZWNlSW1hZ2VRdWFkKENTU1ZhbHVlKiB2YWx1ZSkKICAgICBDU1NUb0xlbmd0aENvbnZlcnNpb25E
YXRhIGNvbnZlcnNpb25EYXRhID0gdXNlU1ZHWm9vbVJ1bGVzKCkgPyBtX3Jlc29sdmVyLT5zdGF0
ZSgpLmNzc1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEoKS5jb3B5V2l0aEFkanVzdGVkWm9vbSgxLjBm
KSA6IG1fcmVzb2x2ZXItPnN0YXRlKCkuY3NzVG9MZW5ndGhDb252ZXJzaW9uRGF0YSgpOwogCiAg
ICAgLy8gUmV0cmlldmUgdGhlIHByaW1pdGl2ZSB2YWx1ZS4KLSAgICBDU1NQcmltaXRpdmVWYWx1
ZSYgYm9yZGVyV2lkdGhzID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSk7Cisg
ICAgYXV0byYgYm9yZGVyV2lkdGhzID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVl
KTsKIAogICAgIC8vIFNldCB1cCBhIGxlbmd0aCBib3ggdG8gcmVwcmVzZW50IG91ciBpbWFnZSBz
bGljZXMuCiAgICAgTGVuZ3RoQm94IGJveDsgLy8gRGVmYXVsdHMgdG8gJ2F1dG8nIHNvIHdlIGRv
bid0IGhhdmUgdG8gaGFuZGxlIHRoYXQgZXhwbGljaXRseSBiZWxvdy4KQEAgLTY2OCwxMiArNjYz
LDEyIEBAIExlbmd0aEJveCBDU1NUb1N0eWxlTWFwOjptYXBOaW5lUGllY2VJbWFnZVF1YWQoQ1NT
VmFsdWUqIHZhbHVlKQogICAgIHJldHVybiBib3g7CiB9CiAKLXZvaWQgQ1NTVG9TdHlsZU1hcDo6
bWFwTmluZVBpZWNlSW1hZ2VSZXBlYXQoQ1NTVmFsdWUqIHZhbHVlLCBOaW5lUGllY2VJbWFnZSYg
aW1hZ2UpCit2b2lkIENTU1RvU3R5bGVNYXA6Om1hcE5pbmVQaWVjZUltYWdlUmVwZWF0KENTU1Zh
bHVlJiB2YWx1ZSwgTmluZVBpZWNlSW1hZ2UmIGltYWdlKQogewogICAgIGlmICghaXM8Q1NTUHJp
bWl0aXZlVmFsdWU+KHZhbHVlKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgQ1NTUHJpbWl0aXZl
VmFsdWUmIHByaW1pdGl2ZVZhbHVlID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1
ZSk7CisgICAgQ1NTUHJpbWl0aXZlVmFsdWUmIHByaW1pdGl2ZVZhbHVlID0gZG93bmNhc3Q8Q1NT
UHJpbWl0aXZlVmFsdWU+KHZhbHVlKTsKICAgICBQYWlyKiBwYWlyID0gcHJpbWl0aXZlVmFsdWUu
Z2V0UGFpclZhbHVlKCk7CiAgICAgaWYgKCFwYWlyIHx8ICFwYWlyLT5maXJzdCgpIHx8ICFwYWly
LT5zZWNvbmQoKSkKICAgICAgICAgcmV0dXJuOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
Y3NzL0NTU1RvU3R5bGVNYXAuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NUb1N0eWxlTWFwLmgK
aW5kZXggYjRlY2NjNjc0MzlhMTg1ZDVjYjliZjFhMTkxNjI0MjNhNDM2MjNhZS4uNDQzMDY3OTcy
NDY3OThiMTliZDBhYWEwMGU4MDgwNmM1NWNkNmJlOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvY3NzL0NTU1RvU3R5bGVNYXAuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTVG9TdHls
ZU1hcC5oCkBAIC01OCwyMCArNTgsMjAgQEAgcHVibGljOgogICAgIHZvaWQgbWFwRmlsbFlQb3Np
dGlvbihDU1NQcm9wZXJ0eUlELCBGaWxsTGF5ZXIqLCBDU1NWYWx1ZSopOwogICAgIHZvaWQgbWFw
RmlsbE1hc2tTb3VyY2VUeXBlKENTU1Byb3BlcnR5SUQsIEZpbGxMYXllciosIENTU1ZhbHVlKik7
CiAKLSAgICB2b2lkIG1hcEFuaW1hdGlvbkRlbGF5KEFuaW1hdGlvbiosIENTU1ZhbHVlKik7Ci0g
ICAgdm9pZCBtYXBBbmltYXRpb25EaXJlY3Rpb24oQW5pbWF0aW9uKiwgQ1NTVmFsdWUqKTsKLSAg
ICB2b2lkIG1hcEFuaW1hdGlvbkR1cmF0aW9uKEFuaW1hdGlvbiosIENTU1ZhbHVlKik7Ci0gICAg
dm9pZCBtYXBBbmltYXRpb25GaWxsTW9kZShBbmltYXRpb24qLCBDU1NWYWx1ZSopOwotICAgIHZv
aWQgbWFwQW5pbWF0aW9uSXRlcmF0aW9uQ291bnQoQW5pbWF0aW9uKiwgQ1NTVmFsdWUqKTsKLSAg
ICB2b2lkIG1hcEFuaW1hdGlvbk5hbWUoQW5pbWF0aW9uKiwgQ1NTVmFsdWUqKTsKLSAgICB2b2lk
IG1hcEFuaW1hdGlvblBsYXlTdGF0ZShBbmltYXRpb24qLCBDU1NWYWx1ZSopOwotICAgIHZvaWQg
bWFwQW5pbWF0aW9uUHJvcGVydHkoQW5pbWF0aW9uKiwgQ1NTVmFsdWUqKTsKLSAgICB2b2lkIG1h
cEFuaW1hdGlvblRpbWluZ0Z1bmN0aW9uKEFuaW1hdGlvbiosIENTU1ZhbHVlKik7CisgICAgdm9p
ZCBtYXBBbmltYXRpb25EZWxheShBbmltYXRpb24qLCBDU1NWYWx1ZSYpOworICAgIHZvaWQgbWFw
QW5pbWF0aW9uRGlyZWN0aW9uKEFuaW1hdGlvbiosIENTU1ZhbHVlJik7CisgICAgdm9pZCBtYXBB
bmltYXRpb25EdXJhdGlvbihBbmltYXRpb24qLCBDU1NWYWx1ZSYpOworICAgIHZvaWQgbWFwQW5p
bWF0aW9uRmlsbE1vZGUoQW5pbWF0aW9uKiwgQ1NTVmFsdWUmKTsKKyAgICB2b2lkIG1hcEFuaW1h
dGlvbkl0ZXJhdGlvbkNvdW50KEFuaW1hdGlvbiosIENTU1ZhbHVlJik7CisgICAgdm9pZCBtYXBB
bmltYXRpb25OYW1lKEFuaW1hdGlvbiosIENTU1ZhbHVlJik7CisgICAgdm9pZCBtYXBBbmltYXRp
b25QbGF5U3RhdGUoQW5pbWF0aW9uKiwgQ1NTVmFsdWUmKTsKKyAgICB2b2lkIG1hcEFuaW1hdGlv
blByb3BlcnR5KEFuaW1hdGlvbiosIENTU1ZhbHVlJik7CisgICAgdm9pZCBtYXBBbmltYXRpb25U
aW1pbmdGdW5jdGlvbihBbmltYXRpb24qLCBDU1NWYWx1ZSYpOwogCiAgICAgdm9pZCBtYXBOaW5l
UGllY2VJbWFnZShDU1NQcm9wZXJ0eUlELCBDU1NWYWx1ZSosIE5pbmVQaWVjZUltYWdlJik7Ci0g
ICAgdm9pZCBtYXBOaW5lUGllY2VJbWFnZVNsaWNlKENTU1ZhbHVlKiwgTmluZVBpZWNlSW1hZ2Um
KTsKLSAgICBMZW5ndGhCb3ggbWFwTmluZVBpZWNlSW1hZ2VRdWFkKENTU1ZhbHVlKik7Ci0gICAg
dm9pZCBtYXBOaW5lUGllY2VJbWFnZVJlcGVhdChDU1NWYWx1ZSosIE5pbmVQaWVjZUltYWdlJik7
CisgICAgdm9pZCBtYXBOaW5lUGllY2VJbWFnZVNsaWNlKENTU1ZhbHVlJiwgTmluZVBpZWNlSW1h
Z2UmKTsKKyAgICBMZW5ndGhCb3ggbWFwTmluZVBpZWNlSW1hZ2VRdWFkKENTU1ZhbHVlJik7Cisg
ICAgdm9pZCBtYXBOaW5lUGllY2VJbWFnZVJlcGVhdChDU1NWYWx1ZSYsIE5pbmVQaWVjZUltYWdl
Jik7CiAKIHByaXZhdGU6CiAgICAgLy8gRklYTUU6IFRoZXNlIGFjY2Vzc29ycyBzaG91bGQgYmUg
cmVwbGFjZWQgYnkgYSBSZXNvbHZlU3RhdGUgb2JqZWN0CkBAIC04NCw3ICs4NCw3IEBAIHByaXZh
dGU6CiAgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIGJlIHBhcnQgb2Ygc29tZSBzb3J0IG9mIFN0
eWxlSW1hZ2VDYWNoZSBvYmplY3Qgd2hpY2gKICAgICAvLyBpcyBoZWxkIGJ5IHRoZSBTdHlsZVJl
c29sdmVyLCBhbmQgbGlrZWx5IHByb3ZpZGVkIHRvIHRoaXMgb2JqZWN0CiAgICAgLy8gZHVyaW5n
IHRoZSByZXNvbHZlLgotICAgIFBhc3NSZWZQdHI8U3R5bGVJbWFnZT4gc3R5bGVJbWFnZShDU1NQ
cm9wZXJ0eUlELCBDU1NWYWx1ZSopOworICAgIFBhc3NSZWZQdHI8U3R5bGVJbWFnZT4gc3R5bGVJ
bWFnZShDU1NQcm9wZXJ0eUlELCBDU1NWYWx1ZSYpOwogCiAgICAgU3R5bGVSZXNvbHZlciogbV9y
ZXNvbHZlcjsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTVmFsdWVMaXN0
LmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTVmFsdWVMaXN0LmgKaW5kZXggZjBhZmMzZjJiNzBh
MmI5YWNkZTRkMjY0NjVhNWIzNzllYjc0ZDViOC4uOTkxMjlmOWU1YjdhZGRlNWRlMzlhYTM1MmIw
NjlkZDgyOTAzMDQzNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1ZhbHVlTGlz
dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NWYWx1ZUxpc3QuaApAQCAtMzEsNiArMzEs
OSBAQCBjbGFzcyBDU1NQYXJzZXJWYWx1ZUxpc3Q7CiAKIGNsYXNzIENTU1ZhbHVlTGlzdCA6IHB1
YmxpYyBDU1NWYWx1ZSB7CiBwdWJsaWM6CisgICAgdHlwZWRlZiBWZWN0b3I8UmVmPENTU1ZhbHVl
PiwgND46Oml0ZXJhdG9yIGl0ZXJhdG9yOworICAgIHR5cGVkZWYgVmVjdG9yPFJlZjxDU1NWYWx1
ZT4sIDQ+Ojpjb25zdF9pdGVyYXRvciBjb25zdF9pdGVyYXRvcjsKKwogICAgIHN0YXRpYyBQYXNz
UmVmPENTU1ZhbHVlTGlzdD4gY3JlYXRlQ29tbWFTZXBhcmF0ZWQoKQogICAgIHsKICAgICAgICAg
cmV0dXJuIGFkb3B0UmVmKCpuZXcgQ1NTVmFsdWVMaXN0KENvbW1hU2VwYXJhdG9yKSk7CkBAIC01
NCw2ICs1NywxMSBAQCBwdWJsaWM6CiAgICAgQ1NTVmFsdWUqIGl0ZW1XaXRob3V0Qm91bmRzQ2hl
Y2soc2l6ZV90IGluZGV4KSB7IHJldHVybiAmbV92YWx1ZXNbaW5kZXhdLmdldCgpOyB9CiAgICAg
Y29uc3QgQ1NTVmFsdWUqIGl0ZW1XaXRob3V0Qm91bmRzQ2hlY2soc2l6ZV90IGluZGV4KSBjb25z
dCB7IEFTU0VSVChpbmRleCA8IG1fdmFsdWVzLnNpemUoKSk7IHJldHVybiAmbV92YWx1ZXNbaW5k
ZXhdLmdldCgpOyB9CiAKKyAgICBjb25zdF9pdGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJu
IG1fdmFsdWVzLmJlZ2luKCk7IH0KKyAgICBjb25zdF9pdGVyYXRvciBlbmQoKSBjb25zdCB7IHJl
dHVybiBtX3ZhbHVlcy5lbmQoKTsgfQorICAgIGl0ZXJhdG9yIGJlZ2luKCkgeyByZXR1cm4gbV92
YWx1ZXMuYmVnaW4oKTsgfQorICAgIGl0ZXJhdG9yIGVuZCgpIHsgcmV0dXJuIG1fdmFsdWVzLmVu
ZCgpOyB9CisKICAgICB2b2lkIGFwcGVuZChQYXNzUmVmPENTU1ZhbHVlPik7CiAgICAgdm9pZCBw
cmVwZW5kKFBhc3NSZWY8Q1NTVmFsdWU+KTsKICAgICBib29sIHJlbW92ZUFsbChDU1NWYWx1ZSop
OwpAQCAtOTEsMzggKzk5LDYgQEAgaW5saW5lIHZvaWQgQ1NTVmFsdWVMaXN0OjpwcmVwZW5kKFBh
c3NSZWY8Q1NTVmFsdWU+IHZhbHVlKQogICAgIG1fdmFsdWVzLmluc2VydCgwLCBXVEY6Om1vdmUo
dmFsdWUpKTsKIH0KIAotLy8gT2JqZWN0cyBvZiB0aGlzIGNsYXNzIGFyZSBpbnRlbmRlZCB0byBi
ZSBzdGFjay1hbGxvY2F0ZWQgYW5kIHNjb3BlZCB0byBhIHNpbmdsZSBmdW5jdGlvbi4KLS8vIFBs
ZWFzZSB0YWtlIGNhcmUgbm90IHRvIHBhc3MgdGhlc2UgYXJvdW5kIGFzIHRoZXkgZG8gaG9sZCBv
bnRvIGEgcmF3IHBvaW50ZXIuCi1jbGFzcyBDU1NWYWx1ZUxpc3RJbnNwZWN0b3IgewotcHVibGlj
OgotICAgIENTU1ZhbHVlTGlzdEluc3BlY3RvcihDU1NWYWx1ZSogdmFsdWUpCi0gICAgICAgIDog
bV9saXN0KGlzPENTU1ZhbHVlTGlzdD4odmFsdWUpID8gZG93bmNhc3Q8Q1NTVmFsdWVMaXN0Pih2
YWx1ZSkgOiBudWxscHRyKQotICAgIHsKLSAgICB9Ci0KLSAgICBDU1NWYWx1ZSogaXRlbShzaXpl
X3QgaW5kZXgpIGNvbnN0IHsgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oaW5kZXgg
PCBsZW5ndGgoKSk7IHJldHVybiBtX2xpc3QtPml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soaW5kZXgp
OyB9Ci0gICAgQ1NTVmFsdWUqIGZpcnN0KCkgY29uc3QgeyByZXR1cm4gaXRlbSgwKTsgfQotICAg
IENTU1ZhbHVlKiBzZWNvbmQoKSBjb25zdCB7IHJldHVybiBpdGVtKDEpOyB9Ci0gICAgc2l6ZV90
IGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1fbGlzdCA/IG1fbGlzdC0+bGVuZ3RoKCkgOiAwOyB9
Ci1wcml2YXRlOgotICAgIENTU1ZhbHVlTGlzdCogbV9saXN0OwotfTsKLQotLy8gV3JhcHBlciB0
aGF0IGNhbiBiZSB1c2VkIHRvIGl0ZXJhdGUgb3ZlciBhbnkgQ1NTVmFsdWUuIE5vbi1saXN0IHZh
bHVlcyBhbmQgMCBiZWhhdmUgYXMgemVyby1sZW5ndGggbGlzdHMuCi0vLyBPYmplY3RzIG9mIHRo
aXMgY2xhc3MgYXJlIGludGVuZGVkIHRvIGJlIHN0YWNrLWFsbG9jYXRlZCBhbmQgc2NvcGVkIHRv
IGEgc2luZ2xlIGZ1bmN0aW9uLgotLy8gUGxlYXNlIHRha2UgY2FyZSBub3QgdG8gcGFzcyB0aGVz
ZSBhcm91bmQgYXMgdGhleSBkbyBob2xkIG9udG8gYSByYXcgcG9pbnRlci4KLWNsYXNzIENTU1Zh
bHVlTGlzdEl0ZXJhdG9yIHsKLXB1YmxpYzoKLSAgICBDU1NWYWx1ZUxpc3RJdGVyYXRvcihDU1NW
YWx1ZSogdmFsdWUpIDogbV9pbnNwZWN0b3IodmFsdWUpLCBtX3Bvc2l0aW9uKDApIHsgfQotICAg
IGJvb2wgaGFzTW9yZSgpIGNvbnN0IHsgcmV0dXJuIG1fcG9zaXRpb24gPCBtX2luc3BlY3Rvci5s
ZW5ndGgoKTsgfQotICAgIENTU1ZhbHVlKiB2YWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1faW5zcGVj
dG9yLml0ZW0obV9wb3NpdGlvbik7IH0KLSAgICBib29sIGlzUHJpbWl0aXZlVmFsdWUoKSBjb25z
dCB7IHJldHVybiB2YWx1ZSgpLT5pc1ByaW1pdGl2ZVZhbHVlKCk7IH0KLSAgICB2b2lkIGFkdmFu
Y2UoKSB7IG1fcG9zaXRpb24rKzsgQVNTRVJUKG1fcG9zaXRpb24gPD0gbV9pbnNwZWN0b3IubGVu
Z3RoKCkpO30KLSAgICBzaXplX3QgaW5kZXgoKSBjb25zdCB7IHJldHVybiBtX3Bvc2l0aW9uOyB9
Ci1wcml2YXRlOgotICAgIENTU1ZhbHVlTGlzdEluc3BlY3RvciBtX2luc3BlY3RvcjsKLSAgICBz
aXplX3QgbV9wb3NpdGlvbjsKLX07CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKIFNQRUNJQUxJ
WkVfVFlQRV9UUkFJVFNfQ1NTX1ZBTFVFKENTU1ZhbHVlTGlzdCwgaXNWYWx1ZUxpc3QoKSkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9EZXByZWNhdGVkU3R5bGVCdWlsZGVyLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2Nzcy9EZXByZWNhdGVkU3R5bGVCdWlsZGVyLmNwcAppbmRleCA0MWRh
MzU0YzY5NGE4ZTk3N2ZjY2JlOWFiZTZjZTgxNzFhYzQ1MGQxLi41NzRjZTVjZWM4MDM5ZTJkMzQy
YWZiODVkYjRhZGIyMGE1YTA4NDA4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvRGVw
cmVjYXRlZFN0eWxlQnVpbGRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0RlcHJlY2F0
ZWRTdHlsZUJ1aWxkZXIuY3BwCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSAiQ1NTQXNwZWN0
UmF0aW9WYWx1ZS5oIgogI2luY2x1ZGUgIkNTU0NhbGN1bGF0aW9uVmFsdWUuaCIKICNpbmNsdWRl
ICJDU1NDdXJzb3JJbWFnZVZhbHVlLmgiCisjaW5jbHVkZSAiQ1NTSW1hZ2VHZW5lcmF0b3JWYWx1
ZS5oIgogI2luY2x1ZGUgIkNTU0ltYWdlU2V0VmFsdWUuaCIKICNpbmNsdWRlICJDU1NQcmltaXRp
dmVWYWx1ZS5oIgogI2luY2x1ZGUgIkNTU1ByaW1pdGl2ZVZhbHVlTWFwcGluZ3MuaCIKQEAgLTE2
Myw3ICsxNjQsNyBAQCBwdWJsaWM6CiB0ZW1wbGF0ZSA8U3R5bGVJbWFnZSogKFJlbmRlclN0eWxl
OjoqZ2V0dGVyRnVuY3Rpb24pKCkgY29uc3QsIHZvaWQgKFJlbmRlclN0eWxlOjoqc2V0dGVyRnVu
Y3Rpb24pKFBhc3NSZWZQdHI8U3R5bGVJbWFnZT4pLCBTdHlsZUltYWdlKiAoKmluaXRpYWxGdW5j
dGlvbikoKSwgQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eT4KIGNsYXNzIEFwcGx5UHJvcGVydHlTdHls
ZUltYWdlIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5
SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlKiB2YWx1ZSkgeyAoc3R5
bGVSZXNvbHZlci0+c3R5bGUoKS0+KnNldHRlckZ1bmN0aW9uKShzdHlsZVJlc29sdmVyLT5zdHls
ZUltYWdlKHByb3BlcnR5LCB2YWx1ZSkpOyB9CisgICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShD
U1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSogdmFs
dWUpIHsgKHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPipzZXR0ZXJGdW5jdGlvbikoc3R5bGVSZXNv
bHZlci0+c3R5bGVJbWFnZShwcm9wZXJ0eSwgKnZhbHVlKSk7IH0KICAgICBzdGF0aWMgUHJvcGVy
dHlIYW5kbGVyIGNyZWF0ZUhhbmRsZXIoKQogICAgIHsKICAgICAgICAgUHJvcGVydHlIYW5kbGVy
IGhhbmRsZXIgPSBBcHBseVByb3BlcnR5RGVmYXVsdEJhc2U8U3R5bGVJbWFnZSosIGdldHRlckZ1
bmN0aW9uLCBQYXNzUmVmUHRyPFN0eWxlSW1hZ2U+LCBzZXR0ZXJGdW5jdGlvbiwgU3R5bGVJbWFn
ZSosIGluaXRpYWxGdW5jdGlvbj46OmNyZWF0ZUhhbmRsZXIoKTsKQEAgLTg5MSwxNiArODkyLDE2
IEBAIHB1YmxpYzoKICAgICAgICAgTmluZVBpZWNlSW1hZ2UgaW1hZ2UoZ2V0VmFsdWUoc3R5bGVS
ZXNvbHZlci0+c3R5bGUoKSkpOwogICAgICAgICBzd2l0Y2ggKG1vZGlmaWVyKSB7CiAgICAgICAg
IGNhc2UgT3V0c2V0OgotICAgICAgICAgICAgaW1hZ2Uuc2V0T3V0c2V0KHN0eWxlUmVzb2x2ZXIt
PnN0eWxlTWFwKCktPm1hcE5pbmVQaWVjZUltYWdlUXVhZCh2YWx1ZSkpOworICAgICAgICAgICAg
aW1hZ2Uuc2V0T3V0c2V0KHN0eWxlUmVzb2x2ZXItPnN0eWxlTWFwKCktPm1hcE5pbmVQaWVjZUlt
YWdlUXVhZCgqdmFsdWUpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFJlcGVh
dDoKLSAgICAgICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlTWFwKCktPm1hcE5pbmVQaWVjZUlt
YWdlUmVwZWF0KHZhbHVlLCBpbWFnZSk7CisgICAgICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHls
ZU1hcCgpLT5tYXBOaW5lUGllY2VJbWFnZVJlcGVhdCgqdmFsdWUsIGltYWdlKTsKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICBjYXNlIFNsaWNlOgotICAgICAgICAgICAgc3R5bGVSZXNvbHZl
ci0+c3R5bGVNYXAoKS0+bWFwTmluZVBpZWNlSW1hZ2VTbGljZSh2YWx1ZSwgaW1hZ2UpOworICAg
ICAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGVNYXAoKS0+bWFwTmluZVBpZWNlSW1hZ2VTbGlj
ZSgqdmFsdWUsIGltYWdlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFdpZHRo
OgotICAgICAgICAgICAgaW1hZ2Uuc2V0Qm9yZGVyU2xpY2VzKHN0eWxlUmVzb2x2ZXItPnN0eWxl
TWFwKCktPm1hcE5pbmVQaWVjZUltYWdlUXVhZCh2YWx1ZSkpOworICAgICAgICAgICAgaW1hZ2Uu
c2V0Qm9yZGVyU2xpY2VzKHN0eWxlUmVzb2x2ZXItPnN0eWxlTWFwKCktPm1hcE5pbmVQaWVjZUlt
YWdlUXVhZCgqdmFsdWUpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAg
IHNldFZhbHVlKHN0eWxlUmVzb2x2ZXItPnN0eWxlKCksIGltYWdlKTsKQEAgLTEwMDIsNyArMTAw
Myw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgQ1NTQ3Vyc29ySW1hZ2VWYWx1ZSYg
aW1hZ2UgPSBkb3duY2FzdDxDU1NDdXJzb3JJbWFnZVZhbHVlPigqaXRlbSk7CiAgICAgICAgICAg
ICAgICAgICAgIGlmIChpbWFnZS51cGRhdGVJZlNWR0N1cnNvcklzVXNlZChzdHlsZVJlc29sdmVy
LT5lbGVtZW50KCkpKSAvLyBFbGVtZW50cyB3aXRoIFNWRyBjdXJzb3JzIGFyZSBub3QgYWxsb3dl
ZCB0byBzaGFyZSBzdHlsZS4KICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlUmVzb2x2ZXIt
PnN0eWxlKCktPnNldFVuaXF1ZSgpOwotICAgICAgICAgICAgICAgICAgICBzdHlsZVJlc29sdmVy
LT5zdHlsZSgpLT5hZGRDdXJzb3Ioc3R5bGVSZXNvbHZlci0+c3R5bGVJbWFnZShDU1NQcm9wZXJ0
eUN1cnNvciwgJmltYWdlKSwgaW1hZ2UuaG90U3BvdCgpKTsKKyAgICAgICAgICAgICAgICAgICAg
c3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+YWRkQ3Vyc29yKHN0eWxlUmVzb2x2ZXItPnN0eWxlSW1h
Z2UoQ1NTUHJvcGVydHlDdXJzb3IsIGltYWdlKSwgaW1hZ2UuaG90U3BvdCgpKTsKICAgICAgICAg
ICAgICAgICB9IGVsc2UgaWYgKGlzPENTU1ByaW1pdGl2ZVZhbHVlPigqaXRlbSkpIHsKICAgICAg
ICAgICAgICAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUmIHByaW1pdGl2ZVZhbHVlID0gZG93bmNh
c3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCppdGVtKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKHBy
aW1pdGl2ZVZhbHVlLmlzVmFsdWVJRCgpKQpAQCAtMTA4NCw4ICsxMDg1LDEwIEBAIHB1YmxpYzoK
ICAgICAgICAgfQogCiAgICAgICAgIFRleHREZWNvcmF0aW9uU2tpcCBza2lwID0gUmVuZGVyU3R5
bGU6OmluaXRpYWxUZXh0RGVjb3JhdGlvblNraXAoKTsKLSAgICAgICAgZm9yIChDU1NWYWx1ZUxp
c3RJdGVyYXRvciBpKHZhbHVlKTsgaS5oYXNNb3JlKCk7IGkuYWR2YW5jZSgpKQotICAgICAgICAg
ICAgc2tpcCB8PSB2YWx1ZVRvRGVjb3JhdGlvblNraXAoZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFs
dWU+KCppLnZhbHVlKCkpKTsKKyAgICAgICAgaWYgKGlzPENTU1ZhbHVlTGlzdD4oKnZhbHVlKSkg
eworICAgICAgICAgICAgZm9yIChhdXRvJiBjdXJyZW50VmFsdWUgOiBkb3duY2FzdDxDU1NWYWx1
ZUxpc3Q+KCp2YWx1ZSkpCisgICAgICAgICAgICAgICAgc2tpcCB8PSB2YWx1ZVRvRGVjb3JhdGlv
blNraXAoZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KGN1cnJlbnRWYWx1ZS5nZXQoKSkpOwor
ICAgICAgICB9CiAgICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldFRleHREZWNvcmF0
aW9uU2tpcChza2lwKTsKICAgICB9CiAgICAgc3RhdGljIFByb3BlcnR5SGFuZGxlciBjcmVhdGVI
YW5kbGVyKCkKQEAgLTExNjEsMTAgKzExNjQsMTEgQEAgcHVibGljOgogICAgICAgICB9CiAKICAg
ICAgICAgdW5zaWduZWQgdCA9IDA7Ci0gICAgICAgIGZvciAoQ1NTVmFsdWVMaXN0SXRlcmF0b3Ig
aSh2YWx1ZSk7IGkuaGFzTW9yZSgpOyBpLmFkdmFuY2UoKSkgewotICAgICAgICAgICAgQ1NTVmFs
dWUqIGl0ZW0gPSBpLnZhbHVlKCk7Ci0gICAgICAgICAgICBUZXh0VW5kZXJsaW5lUG9zaXRpb24g
dDIgPSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oKml0ZW0pOwotICAgICAgICAgICAgdCB8
PSB0MjsKKyAgICAgICAgaWYgKGlzPENTU1ZhbHVlTGlzdD4oKnZhbHVlKSkgeworICAgICAgICAg
ICAgZm9yIChhdXRvJiBjdXJyZW50VmFsdWUgOiBkb3duY2FzdDxDU1NWYWx1ZUxpc3Q+KCp2YWx1
ZSkpIHsKKyAgICAgICAgICAgICAgICBUZXh0VW5kZXJsaW5lUG9zaXRpb24gdDIgPSBkb3duY2Fz
dDxDU1NQcmltaXRpdmVWYWx1ZT4oY3VycmVudFZhbHVlLmdldCgpKTsKKyAgICAgICAgICAgICAg
ICB0IHw9IHQyOworICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIHN0eWxlUmVzb2x2
ZXItPnN0eWxlKCktPnNldFRleHRVbmRlcmxpbmVQb3NpdGlvbihzdGF0aWNfY2FzdDxUZXh0VW5k
ZXJsaW5lUG9zaXRpb24+KHQpKTsKICAgICB9CkBAIC0xMzgxLDM1ICsxMzg1LDQxIEBAIHB1Ymxp
YzoKICAgICAgICAgTGVuZ3RoIHdpZHRoOwogICAgICAgICBMZW5ndGggaGVpZ2h0OwogICAgICAg
ICBQYWdlU2l6ZVR5cGUgcGFnZVNpemVUeXBlID0gUEFHRV9TSVpFX0FVVE87Ci0gICAgICAgIENT
U1ZhbHVlTGlzdEluc3BlY3RvciBpbnNwZWN0b3IodmFsdWUpOwotICAgICAgICBzd2l0Y2ggKGlu
c3BlY3Rvci5sZW5ndGgoKSkgeworICAgICAgICBpZiAoIWlzPENTU1ZhbHVlTGlzdD4odmFsdWUp
KQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGF1dG8mIHZhbHVlTGlzdCA9IGRvd25j
YXN0PENTU1ZhbHVlTGlzdD4oKnZhbHVlKTsKKyAgICAgICAgc3dpdGNoICh2YWx1ZUxpc3QubGVu
Z3RoKCkpIHsKICAgICAgICAgY2FzZSAyOiB7CisgICAgICAgICAgICBDU1NWYWx1ZSogZmlyc3RW
YWx1ZSA9IHZhbHVlTGlzdC5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDApOworICAgICAgICAgICAg
Q1NTVmFsdWUqIHNlY29uZFZhbHVlID0gdmFsdWVMaXN0Lml0ZW1XaXRob3V0Qm91bmRzQ2hlY2so
MSk7CiAgICAgICAgICAgICAvLyA8bGVuZ3RoPnsyfSB8IDxwYWdlLXNpemU+IDxvcmllbnRhdGlv
bj4KLSAgICAgICAgICAgIGlmICghaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KCppbnNwZWN0b3IuZmly
c3QoKSkgfHwgIWlzPENTU1ByaW1pdGl2ZVZhbHVlPigqaW5zcGVjdG9yLnNlY29uZCgpKSkKKyAg
ICAgICAgICAgIGlmICghaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KCpmaXJzdFZhbHVlKSB8fCAhaXM8
Q1NTUHJpbWl0aXZlVmFsdWU+KCpzZWNvbmRWYWx1ZSkpCiAgICAgICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUmIGZpcnN0ID0gZG93bmNhc3Q8Q1NTUHJp
bWl0aXZlVmFsdWU+KCppbnNwZWN0b3IuZmlyc3QoKSk7Ci0gICAgICAgICAgICBDU1NQcmltaXRp
dmVWYWx1ZSYgc2Vjb25kID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCppbnNwZWN0b3Iu
c2Vjb25kKCkpOwotICAgICAgICAgICAgaWYgKGZpcnN0LmlzTGVuZ3RoKCkpIHsKKyAgICAgICAg
ICAgIGF1dG8mIGZpcnN0UHJpbWl0aXZlVmFsdWUgPSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1
ZT4oKmZpcnN0VmFsdWUpOworICAgICAgICAgICAgYXV0byYgc2Vjb25kUHJpbWl0aXZlVmFsdWUg
PSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oKnNlY29uZFZhbHVlKTsKKyAgICAgICAgICAg
IGlmIChmaXJzdFByaW1pdGl2ZVZhbHVlLmlzTGVuZ3RoKCkpIHsKICAgICAgICAgICAgICAgICAv
LyA8bGVuZ3RoPnsyfQotICAgICAgICAgICAgICAgIGlmICghc2Vjb25kLmlzTGVuZ3RoKCkpCisg
ICAgICAgICAgICAgICAgaWYgKCFzZWNvbmRQcmltaXRpdmVWYWx1ZS5pc0xlbmd0aCgpKQogICAg
ICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgQ1NTVG9MZW5ndGhDb252
ZXJzaW9uRGF0YSBjb252ZXJzaW9uRGF0YSA9IHN0eWxlUmVzb2x2ZXItPnN0YXRlKCkuY3NzVG9M
ZW5ndGhDb252ZXJzaW9uRGF0YSgpLmNvcHlXaXRoQWRqdXN0ZWRab29tKDEuMGYpOwotICAgICAg
ICAgICAgICAgIHdpZHRoID0gZmlyc3QuY29tcHV0ZUxlbmd0aDxMZW5ndGg+KGNvbnZlcnNpb25E
YXRhKTsKLSAgICAgICAgICAgICAgICBoZWlnaHQgPSBzZWNvbmQuY29tcHV0ZUxlbmd0aDxMZW5n
dGg+KGNvbnZlcnNpb25EYXRhKTsKKyAgICAgICAgICAgICAgICB3aWR0aCA9IGZpcnN0UHJpbWl0
aXZlVmFsdWUuY29tcHV0ZUxlbmd0aDxMZW5ndGg+KGNvbnZlcnNpb25EYXRhKTsKKyAgICAgICAg
ICAgICAgICBoZWlnaHQgPSBzZWNvbmRQcmltaXRpdmVWYWx1ZS5jb21wdXRlTGVuZ3RoPExlbmd0
aD4oY29udmVyc2lvbkRhdGEpOwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAg
ICAvLyA8cGFnZS1zaXplPiA8b3JpZW50YXRpb24+CiAgICAgICAgICAgICAgICAgLy8gVGhlIHZh
bHVlIG9yZGVyIGlzIGd1YXJhbnRlZWQuIFNlZSBDU1NQYXJzZXI6OnBhcnNlU2l6ZVBhcmFtZXRl
ci4KLSAgICAgICAgICAgICAgICBpZiAoIWdldFBhZ2VTaXplRnJvbU5hbWUoJmZpcnN0LCAmc2Vj
b25kLCB3aWR0aCwgaGVpZ2h0KSkKKyAgICAgICAgICAgICAgICBpZiAoIWdldFBhZ2VTaXplRnJv
bU5hbWUoJmZpcnN0UHJpbWl0aXZlVmFsdWUsICZzZWNvbmRQcmltaXRpdmVWYWx1ZSwgd2lkdGgs
IGhlaWdodCkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgIHBhZ2VTaXplVHlwZSA9IFBBR0VfU0laRV9SRVNPTFZFRDsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgMTogeworICAgICAgICAgICAgQ1NTVmFs
dWUqIHZhbHVlID0gdmFsdWVMaXN0Lml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soMCk7CiAgICAgICAg
ICAgICAvLyA8bGVuZ3RoPiB8IGF1dG8gfCA8cGFnZS1zaXplPiB8IFsgcG9ydHJhaXQgfCBsYW5k
c2NhcGVdCi0gICAgICAgICAgICBpZiAoIWlzPENTU1ByaW1pdGl2ZVZhbHVlPigqaW5zcGVjdG9y
LmZpcnN0KCkpKQorICAgICAgICAgICAgaWYgKCFpczxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVl
KSkKICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICBDU1NQcmltaXRpdmVWYWx1
ZSYgcHJpbWl0aXZlVmFsdWUgPSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oKmluc3BlY3Rv
ci5maXJzdCgpKTsKKyAgICAgICAgICAgIGF1dG8mIHByaW1pdGl2ZVZhbHVlID0gZG93bmNhc3Q8
Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSk7CiAgICAgICAgICAgICBpZiAocHJpbWl0aXZlVmFs
dWUuaXNMZW5ndGgoKSkgewogICAgICAgICAgICAgICAgIC8vIDxsZW5ndGg+CiAgICAgICAgICAg
ICAgICAgcGFnZVNpemVUeXBlID0gUEFHRV9TSVpFX1JFU09MVkVEOwpAQCAtMTUzOSw4ICsxNTQ5
LDEwIEBAIHB1YmxpYzoKICAgICAgICAgfQogCiAgICAgICAgIFRleHRFbXBoYXNpc1Bvc2l0aW9u
IHBvc2l0aW9uID0gMDsKLSAgICAgICAgZm9yIChDU1NWYWx1ZUxpc3RJdGVyYXRvciBpKHZhbHVl
KTsgaS5oYXNNb3JlKCk7IGkuYWR2YW5jZSgpKQotICAgICAgICAgICAgcG9zaXRpb24gfD0gdmFs
dWVUb0VtcGhhc2lzUG9zaXRpb24oZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCppLnZhbHVl
KCkpKTsKKyAgICAgICAgaWYgKGlzPENTU1ZhbHVlTGlzdD4oKnZhbHVlKSkgeworICAgICAgICAg
ICAgZm9yIChhdXRvJiBjdXJyZW50VmFsdWUgOiBkb3duY2FzdDxDU1NWYWx1ZUxpc3Q+KCp2YWx1
ZSkpCisgICAgICAgICAgICAgICAgcG9zaXRpb24gfD0gdmFsdWVUb0VtcGhhc2lzUG9zaXRpb24o
ZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KGN1cnJlbnRWYWx1ZS5nZXQoKSkpOworICAgICAg
ICB9CiAgICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldFRleHRFbXBoYXNpc1Bvc2l0
aW9uKHBvc2l0aW9uKTsKICAgICB9CiAgICAgc3RhdGljIFByb3BlcnR5SGFuZGxlciBjcmVhdGVI
YW5kbGVyKCkKQEAgLTE1NTYsNyArMTU2OCw3IEBAIHRlbXBsYXRlIDx0eXBlbmFtZSBULAogICAg
ICAgICAgIGJvb2wgKEFuaW1hdGlvbjo6KnRlc3RGdW5jdGlvbikoKSBjb25zdCwKICAgICAgICAg
ICB2b2lkIChBbmltYXRpb246OipjbGVhckZ1bmN0aW9uKSgpLAogICAgICAgICAgIFQgKCppbml0
aWFsRnVuY3Rpb24pKCksCi0gICAgICAgICAgdm9pZCAoQ1NTVG9TdHlsZU1hcDo6Km1hcEZ1bmN0
aW9uKShBbmltYXRpb24qLCBDU1NWYWx1ZSopLAorICAgICAgICAgIHZvaWQgKENTU1RvU3R5bGVN
YXA6OiptYXBGdW5jdGlvbikoQW5pbWF0aW9uKiwgQ1NTVmFsdWUmKSwKICAgICAgICAgICBBbmlt
YXRpb25MaXN0KiAoUmVuZGVyU3R5bGU6OiphbmltYXRpb25HZXR0ZXJGdW5jdGlvbikoKSwKICAg
ICAgICAgICBjb25zdCBBbmltYXRpb25MaXN0KiAoUmVuZGVyU3R5bGU6OippbW11dGFibGVBbmlt
YXRpb25HZXR0ZXJGdW5jdGlvbikoKSBjb25zdD4KIGNsYXNzIEFwcGx5UHJvcGVydHlBbmltYXRp
b24gewpAQCAtMTU2Niw3ICsxNTc4LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBib29sIHRlc3Qo
Y29uc3QgQW5pbWF0aW9uJiBhbmltYXRpb24pIHsgcmV0dXJuIChhbmltYXRpb24uKnRlc3RGdW5j
dGlvbikoKTsgfQogICAgIHN0YXRpYyB2b2lkIGNsZWFyKEFuaW1hdGlvbiYgYW5pbWF0aW9uKSB7
IChhbmltYXRpb24uKmNsZWFyRnVuY3Rpb24pKCk7IH0KICAgICBzdGF0aWMgVCBpbml0aWFsKCkg
eyByZXR1cm4gKCppbml0aWFsRnVuY3Rpb24pKCk7IH0KLSAgICBzdGF0aWMgdm9pZCBtYXAoU3R5
bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgQW5pbWF0aW9uJiBhbmltYXRpb24sIENTU1ZhbHVl
KiB2YWx1ZSkgeyAoc3R5bGVSZXNvbHZlci0+c3R5bGVNYXAoKS0+Km1hcEZ1bmN0aW9uKSgmYW5p
bWF0aW9uLCB2YWx1ZSk7IH0KKyAgICBzdGF0aWMgdm9pZCBtYXAoU3R5bGVSZXNvbHZlciogc3R5
bGVSZXNvbHZlciwgQW5pbWF0aW9uJiBhbmltYXRpb24sIENTU1ZhbHVlJiB2YWx1ZSkgeyAoc3R5
bGVSZXNvbHZlci0+c3R5bGVNYXAoKS0+Km1hcEZ1bmN0aW9uKSgmYW5pbWF0aW9uLCB2YWx1ZSk7
IH0KICAgICBzdGF0aWMgQW5pbWF0aW9uTGlzdCogYWNjZXNzQW5pbWF0aW9ucyhSZW5kZXJTdHls
ZSogc3R5bGUpIHsgcmV0dXJuIChzdHlsZS0+KmFuaW1hdGlvbkdldHRlckZ1bmN0aW9uKSgpOyB9
CiAgICAgc3RhdGljIGNvbnN0IEFuaW1hdGlvbkxpc3QqIGFuaW1hdGlvbnMoUmVuZGVyU3R5bGUq
IHN0eWxlKSB7IHJldHVybiAoc3R5bGUtPippbW11dGFibGVBbmltYXRpb25HZXR0ZXJGdW5jdGlv
bikoKTsgfQogCkBAIC0xNjAzLDE4ICsxNjE1LDE4IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAg
IEFuaW1hdGlvbkxpc3QqIGxpc3QgPSBhY2Nlc3NBbmltYXRpb25zKHN0eWxlUmVzb2x2ZXItPnN0
eWxlKCkpOwogICAgICAgICBzaXplX3QgY2hpbGRJbmRleCA9IDA7Ci0gICAgICAgIGlmICh2YWx1
ZS0+aXNWYWx1ZUxpc3QoKSkgeworICAgICAgICBpZiAoaXM8Q1NTVmFsdWVMaXN0PigqdmFsdWUp
KSB7CiAgICAgICAgICAgICAvKiBXYWxrIGVhY2ggdmFsdWUgYW5kIHB1dCBpdCBpbnRvIGFuIGFu
aW1hdGlvbiwgY3JlYXRpbmcgbmV3IGFuaW1hdGlvbnMgYXMgbmVlZGVkLiAqLwotICAgICAgICAg
ICAgZm9yIChDU1NWYWx1ZUxpc3RJdGVyYXRvciBpID0gdmFsdWU7IGkuaGFzTW9yZSgpOyBpLmFk
dmFuY2UoKSkgeworICAgICAgICAgICAgZm9yIChhdXRvJiBjdXJyZW50VmFsdWUgOiBkb3duY2Fz
dDxDU1NWYWx1ZUxpc3Q+KCp2YWx1ZSkpIHsKICAgICAgICAgICAgICAgICBpZiAoY2hpbGRJbmRl
eCA8PSBsaXN0LT5zaXplKCkpCiAgICAgICAgICAgICAgICAgICAgIGxpc3QtPmFwcGVuZChBbmlt
YXRpb246OmNyZWF0ZSgpKTsKLSAgICAgICAgICAgICAgICBtYXAoc3R5bGVSZXNvbHZlciwgbGlz
dC0+YW5pbWF0aW9uKGNoaWxkSW5kZXgpLCBpLnZhbHVlKCkpOworICAgICAgICAgICAgICAgIG1h
cChzdHlsZVJlc29sdmVyLCBsaXN0LT5hbmltYXRpb24oY2hpbGRJbmRleCksIGN1cnJlbnRWYWx1
ZS5nZXQoKSk7CiAgICAgICAgICAgICAgICAgKytjaGlsZEluZGV4OwogICAgICAgICAgICAgfQog
ICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgaWYgKGxpc3QtPmlzRW1wdHkoKSkKICAgICAg
ICAgICAgICAgICBsaXN0LT5hcHBlbmQoQW5pbWF0aW9uOjpjcmVhdGUoKSk7Ci0gICAgICAgICAg
ICBtYXAoc3R5bGVSZXNvbHZlciwgbGlzdC0+YW5pbWF0aW9uKGNoaWxkSW5kZXgpLCB2YWx1ZSk7
CisgICAgICAgICAgICBtYXAoc3R5bGVSZXNvbHZlciwgbGlzdC0+YW5pbWF0aW9uKGNoaWxkSW5k
ZXgpLCAqdmFsdWUpOwogICAgICAgICAgICAgY2hpbGRJbmRleCA9IDE7CiAgICAgICAgIH0KICAg
ICAgICAgZm9yICggOyBjaGlsZEluZGV4IDwgbGlzdC0+c2l6ZSgpOyArK2NoaWxkSW5kZXgpIHsK
QEAgLTE5MDYsOSArMTkxOCw5IEBAIHB1YmxpYzoKICAgICAgICAgaWYgKGlzPENTU1ByaW1pdGl2
ZVZhbHVlPigqdmFsdWUpKSB7CiAgICAgICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSYgcHJpbWl0
aXZlVmFsdWUgPSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlKTsKICAgICAgICAg
ICAgIGlmIChwcmltaXRpdmVWYWx1ZS5nZXRWYWx1ZUlEKCkgPT0gQ1NTVmFsdWVBdXRvKQotICAg
ICAgICAgICAgICAgIHNldFZhbHVlKHN0eWxlUmVzb2x2ZXItPnN0eWxlKCksIDApOwotICAgICAg
ICB9IGVsc2UgaWYgKHZhbHVlLT5pc0ltYWdlVmFsdWUoKSB8fCB2YWx1ZS0+aXNJbWFnZUdlbmVy
YXRvclZhbHVlKCkgfHwgdmFsdWUtPmlzSW1hZ2VTZXRWYWx1ZSgpKSB7Ci0gICAgICAgICAgICBS
ZWZQdHI8U2hhcGVWYWx1ZT4gc2hhcGUgPSBTaGFwZVZhbHVlOjpjcmVhdGVJbWFnZVZhbHVlKHN0
eWxlUmVzb2x2ZXItPnN0eWxlSW1hZ2UocHJvcGVydHksIHZhbHVlKSk7CisgICAgICAgICAgICAg
ICAgc2V0VmFsdWUoc3R5bGVSZXNvbHZlci0+c3R5bGUoKSwgbnVsbHB0cik7CisgICAgICAgIH0g
ZWxzZSBpZiAoaXM8Q1NTSW1hZ2VWYWx1ZT4oKnZhbHVlKSB8fCBpczxDU1NJbWFnZUdlbmVyYXRv
clZhbHVlPigqdmFsdWUpIHx8IGlzPENTU0ltYWdlU2V0VmFsdWU+KCp2YWx1ZSkpIHsKKyAgICAg
ICAgICAgIFJlZlB0cjxTaGFwZVZhbHVlPiBzaGFwZSA9IFNoYXBlVmFsdWU6OmNyZWF0ZUltYWdl
VmFsdWUoc3R5bGVSZXNvbHZlci0+c3R5bGVJbWFnZShwcm9wZXJ0eSwgKnZhbHVlKSk7CiAgICAg
ICAgICAgICBzZXRWYWx1ZShzdHlsZVJlc29sdmVyLT5zdHlsZSgpLCBzaGFwZS5yZWxlYXNlKCkp
OwogICAgICAgICB9IGVsc2UgaWYgKGlzPENTU1ZhbHVlTGlzdD4oKnZhbHVlKSkgewogICAgICAg
ICAgICAgUmVmUHRyPEJhc2ljU2hhcGU+IHNoYXBlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvY3NzL1N0eWxlQnVpbGRlckNvbnZlcnRlci5oIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxl
QnVpbGRlckNvbnZlcnRlci5oCmluZGV4IDM1NTM5ODcwYjBhMzMxZDA3YjA4MDcwZDg2ZDEwZDIz
NGMxZDdhODIuLmNhYWZkOGIyZjFhMzNmOGQxNGFjMDAyM2M2YTRjNzEyOWU3ZmU2NTYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZUJ1aWxkZXJDb252ZXJ0ZXIuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVCdWlsZGVyQ29udmVydGVyLmgKQEAgLTE5OCw4ICsxOTgs
MTAgQEAgaW5saW5lIExlbmd0aFNpemUgU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0UmFk
aXVzKFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2wKIGlubGluZSBUZXh0RGVjb3JhdGlvbiBTdHls
ZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRUZXh0RGVjb3JhdGlvbihTdHlsZVJlc29sdmVyJiwg
Q1NTVmFsdWUmIHZhbHVlKQogewogICAgIFRleHREZWNvcmF0aW9uIHJlc3VsdCA9IFJlbmRlclN0
eWxlOjppbml0aWFsVGV4dERlY29yYXRpb24oKTsKLSAgICBmb3IgKENTU1ZhbHVlTGlzdEl0ZXJh
dG9yIGl0KCZ2YWx1ZSk7IGl0Lmhhc01vcmUoKTsgaXQuYWR2YW5jZSgpKQotICAgICAgICByZXN1
bHQgfD0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCppdC52YWx1ZSgpKTsKKyAgICBpZiAo
aXM8Q1NTVmFsdWVMaXN0Pih2YWx1ZSkpIHsKKyAgICAgICAgZm9yIChhdXRvJiBjdXJyZW50VmFs
dWUgOiBkb3duY2FzdDxDU1NWYWx1ZUxpc3Q+KHZhbHVlKSkKKyAgICAgICAgICAgIHJlc3VsdCB8
PSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oY3VycmVudFZhbHVlLmdldCgpKTsKKyAgICB9
CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApAQCAtMjM5LDcgKzI0MSw3IEBAIGlubGluZSBOaW5l
UGllY2VJbWFnZSBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRCb3JkZXJNYXNrKFN0eWxl
UmVzb2x2ZXImIHN0CiB0ZW1wbGF0ZSA8Q1NTUHJvcGVydHlJRCBwcm9wZXJ0eT4KIGlubGluZSBQ
YXNzUmVmUHRyPFN0eWxlSW1hZ2U+IFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydEJvcmRl
ckltYWdlU291cmNlKFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlJiB2YWx1
ZSkKIHsKLSAgICByZXR1cm4gc3R5bGVSZXNvbHZlci5zdHlsZUltYWdlKHByb3BlcnR5LCAmdmFs
dWUpOworICAgIHJldHVybiBzdHlsZVJlc29sdmVyLnN0eWxlSW1hZ2UocHJvcGVydHksIHZhbHVl
KTsKIH0KIAogaW5saW5lIFRyYW5zZm9ybU9wZXJhdGlvbnMgU3R5bGVCdWlsZGVyQ29udmVydGVy
Ojpjb252ZXJ0VHJhbnNmb3JtKFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVl
JiB2YWx1ZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmNwcAppbmRleCAxNjM3NDJmMDg3
YzYxOGNkOWQyYTdhNzMyYTAyMGVkZmViNDg0NWMwLi5hZjU5MDVjNTRhNmMzYTFlOGVhMjJiMDZl
ZWZmOWY1MzQ1ZTk1ZDc3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNv
bHZlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuY3BwCkBAIC0x
OTI5LDEwICsxOTI5LDEwIEBAIHN0YXRpYyBib29sIGNyZWF0ZUdyaWRUcmFja0JyZWFkdGgoQ1NT
UHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlLCBjb25zdCBTdHlsCiAgICAgcmV0dXJuIHRy
dWU7CiB9CiAKLXN0YXRpYyBib29sIGNyZWF0ZUdyaWRUcmFja1NpemUoQ1NTVmFsdWUqIHZhbHVl
LCBHcmlkVHJhY2tTaXplJiB0cmFja1NpemUsIGNvbnN0IFN0eWxlUmVzb2x2ZXI6OlN0YXRlJiBz
dGF0ZSkKK3N0YXRpYyBib29sIGNyZWF0ZUdyaWRUcmFja1NpemUoQ1NTVmFsdWUmIHZhbHVlLCBH
cmlkVHJhY2tTaXplJiB0cmFja1NpemUsIGNvbnN0IFN0eWxlUmVzb2x2ZXI6OlN0YXRlJiBzdGF0
ZSkKIHsKLSAgICBpZiAoaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSkpIHsKLSAgICAgICAg
Q1NTUHJpbWl0aXZlVmFsdWUmIHByaW1pdGl2ZVZhbHVlID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZl
VmFsdWU+KCp2YWx1ZSk7CisgICAgaWYgKGlzPENTU1ByaW1pdGl2ZVZhbHVlPih2YWx1ZSkpIHsK
KyAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUmIHByaW1pdGl2ZVZhbHVlID0gZG93bmNhc3Q8Q1NT
UHJpbWl0aXZlVmFsdWU+KHZhbHVlKTsKICAgICAgICAgR3JpZExlbmd0aCB3b3JraW5nTGVuZ3Ro
OwogICAgICAgICBpZiAoIWNyZWF0ZUdyaWRUcmFja0JyZWFkdGgoJnByaW1pdGl2ZVZhbHVlLCBz
dGF0ZSwgd29ya2luZ0xlbmd0aCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0xOTQx
LDcgKzE5NDEsNyBAQCBzdGF0aWMgYm9vbCBjcmVhdGVHcmlkVHJhY2tTaXplKENTU1ZhbHVlKiB2
YWx1ZSwgR3JpZFRyYWNrU2l6ZSYgdHJhY2tTaXplLCBjb25zdAogICAgICAgICByZXR1cm4gdHJ1
ZTsKICAgICB9CiAKLSAgICBDU1NGdW5jdGlvblZhbHVlJiBtaW5tYXhGdW5jdGlvbiA9IGRvd25j
YXN0PENTU0Z1bmN0aW9uVmFsdWU+KCp2YWx1ZSk7CisgICAgQ1NTRnVuY3Rpb25WYWx1ZSYgbWlu
bWF4RnVuY3Rpb24gPSBkb3duY2FzdDxDU1NGdW5jdGlvblZhbHVlPih2YWx1ZSk7CiAgICAgQ1NT
VmFsdWVMaXN0KiBhcmd1bWVudHMgPSBtaW5tYXhGdW5jdGlvbi5hcmd1bWVudHMoKTsKICAgICBB
U1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihhcmd1bWVudHMtPmxlbmd0aCgpID09IDIp
OwogICAgIEdyaWRMZW5ndGggbWluVHJhY2tCcmVhZHRoOwpAQCAtMTk2MSwxNiArMTk2MSwxNCBA
QCBzdGF0aWMgYm9vbCBjcmVhdGVHcmlkVHJhY2tMaXN0KENTU1ZhbHVlKiB2YWx1ZSwgVmVjdG9y
PEdyaWRUcmFja1NpemU+JiB0cmFja1NpegogICAgICAgICByZXR1cm4gcHJpbWl0aXZlVmFsdWUu
Z2V0VmFsdWVJRCgpID09IENTU1ZhbHVlTm9uZTsKICAgICB9CiAKLSAgICBpZiAoIXZhbHVlLT5p
c1ZhbHVlTGlzdCgpKQorICAgIGlmICghaXM8Q1NTVmFsdWVMaXN0PigqdmFsdWUpKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKICAgICBzaXplX3QgY3VycmVudE5hbWVkR3JpZExpbmUgPSAwOwot
ICAgIGZvciAoQ1NTVmFsdWVMaXN0SXRlcmF0b3IgaSA9IHZhbHVlOyBpLmhhc01vcmUoKTsgaS5h
ZHZhbmNlKCkpIHsKLSAgICAgICAgQ1NTVmFsdWUqIGN1cnJWYWx1ZSA9IGkudmFsdWUoKTsKLSAg
ICAgICAgaWYgKGlzPENTU0dyaWRMaW5lTmFtZXNWYWx1ZT4oKmN1cnJWYWx1ZSkpIHsKLSAgICAg
ICAgICAgIENTU0dyaWRMaW5lTmFtZXNWYWx1ZSYgbGluZU5hbWVzVmFsdWUgPSBkb3duY2FzdDxD
U1NHcmlkTGluZU5hbWVzVmFsdWU+KCpjdXJyVmFsdWUpOwotICAgICAgICAgICAgZm9yIChDU1NW
YWx1ZUxpc3RJdGVyYXRvciBqID0gJmxpbmVOYW1lc1ZhbHVlOyBqLmhhc01vcmUoKTsgai5hZHZh
bmNlKCkpIHsKLSAgICAgICAgICAgICAgICBTdHJpbmcgbmFtZWRHcmlkTGluZSA9IGRvd25jYXN0
PENTU1ByaW1pdGl2ZVZhbHVlPihqLnZhbHVlKCkpLT5nZXRTdHJpbmdWYWx1ZSgpOworICAgIGZv
ciAoYXV0byYgY3VycmVudFZhbHVlIDogZG93bmNhc3Q8Q1NTVmFsdWVMaXN0PigqdmFsdWUpKSB7
CisgICAgICAgIGlmIChpczxDU1NHcmlkTGluZU5hbWVzVmFsdWU+KGN1cnJlbnRWYWx1ZS5nZXQo
KSkpIHsKKyAgICAgICAgICAgIGZvciAoYXV0byYgY3VycmVudEdyaWRMaW5lTmFtZSA6IGRvd25j
YXN0PENTU0dyaWRMaW5lTmFtZXNWYWx1ZT4oY3VycmVudFZhbHVlLmdldCgpKSkgeworICAgICAg
ICAgICAgICAgIFN0cmluZyBuYW1lZEdyaWRMaW5lID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFs
dWU+KGN1cnJlbnRHcmlkTGluZU5hbWUuZ2V0KCkpLmdldFN0cmluZ1ZhbHVlKCk7CiAgICAgICAg
ICAgICAgICAgTmFtZWRHcmlkTGluZXNNYXA6OkFkZFJlc3VsdCByZXN1bHQgPSBuYW1lZEdyaWRM
aW5lcy5hZGQobmFtZWRHcmlkTGluZSwgVmVjdG9yPHNpemVfdD4oKSk7CiAgICAgICAgICAgICAg
ICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS5hcHBlbmQoY3VycmVudE5hbWVkR3JpZExpbmUpOwog
ICAgICAgICAgICAgICAgIE9yZGVyZWROYW1lZEdyaWRMaW5lc01hcDo6QWRkUmVzdWx0IG9yZGVy
ZWRSZXN1bHQgPSBvcmRlcmVkTmFtZWRHcmlkTGluZXMuYWRkKGN1cnJlbnROYW1lZEdyaWRMaW5l
LCBWZWN0b3I8U3RyaW5nPigpKTsKQEAgLTE5ODEsNyArMTk3OSw3IEBAIHN0YXRpYyBib29sIGNy
ZWF0ZUdyaWRUcmFja0xpc3QoQ1NTVmFsdWUqIHZhbHVlLCBWZWN0b3I8R3JpZFRyYWNrU2l6ZT4m
IHRyYWNrU2l6CiAKICAgICAgICAgKytjdXJyZW50TmFtZWRHcmlkTGluZTsKICAgICAgICAgR3Jp
ZFRyYWNrU2l6ZSB0cmFja1NpemU7Ci0gICAgICAgIGlmICghY3JlYXRlR3JpZFRyYWNrU2l6ZShj
dXJyVmFsdWUsIHRyYWNrU2l6ZSwgc3RhdGUpKQorICAgICAgICBpZiAoIWNyZWF0ZUdyaWRUcmFj
a1NpemUoY3VycmVudFZhbHVlLmdldCgpLCB0cmFja1NpemUsIHN0YXRlKSkKICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKIAogICAgICAgICB0cmFja1NpemVzLmFwcGVuZCh0cmFja1NpemUpOwpA
QCAtMjAxMCwzMyArMjAwOCwzMyBAQCBzdGF0aWMgYm9vbCBjcmVhdGVHcmlkUG9zaXRpb24oQ1NT
VmFsdWUqIHZhbHVlLCBHcmlkUG9zaXRpb24mIHBvc2l0aW9uKQogICAgICAgICByZXR1cm4gdHJ1
ZTsKICAgICB9CiAKLSAgICBDU1NWYWx1ZUxpc3QmIHZhbHVlcyA9IGRvd25jYXN0PENTU1ZhbHVl
TGlzdD4oKnZhbHVlKTsKKyAgICBhdXRvJiB2YWx1ZXMgPSBkb3duY2FzdDxDU1NWYWx1ZUxpc3Q+
KCp2YWx1ZSk7CiAgICAgQVNTRVJUKHZhbHVlcy5sZW5ndGgoKSk7CiAKICAgICBib29sIGlzU3Bh
blBvc2l0aW9uID0gZmFsc2U7CiAgICAgaW50IGdyaWRMaW5lTnVtYmVyID0gMDsKICAgICBTdHJp
bmcgZ3JpZExpbmVOYW1lOwogCi0gICAgQ1NTVmFsdWVMaXN0SXRlcmF0b3IgaXQgPSAmdmFsdWVz
OwotICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBjdXJyZW50VmFsdWUgPSBkb3duY2FzdDxDU1NQcmlt
aXRpdmVWYWx1ZT4oaXQudmFsdWUoKSk7CisgICAgYXV0byBpdCA9IHZhbHVlcy5iZWdpbigpOwor
ICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBjdXJyZW50VmFsdWUgPSAmZG93bmNhc3Q8Q1NTUHJpbWl0
aXZlVmFsdWU+KGl0LT5nZXQoKSk7CiAgICAgaWYgKGN1cnJlbnRWYWx1ZS0+Z2V0VmFsdWVJRCgp
ID09IENTU1ZhbHVlU3BhbikgewogICAgICAgICBpc1NwYW5Qb3NpdGlvbiA9IHRydWU7Ci0gICAg
ICAgIGl0LmFkdmFuY2UoKTsKLSAgICAgICAgY3VycmVudFZhbHVlID0gaXQuaGFzTW9yZSgpID8g
ZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KGl0LnZhbHVlKCkpIDogbnVsbHB0cjsKKyAgICAg
ICAgKytpdDsKKyAgICAgICAgY3VycmVudFZhbHVlID0gaXQgIT0gdmFsdWVzLmVuZCgpID8gJmRv
d25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPihpdC0+Z2V0KCkpIDogbnVsbHB0cjsKICAgICB9CiAK
ICAgICBpZiAoY3VycmVudFZhbHVlICYmIGN1cnJlbnRWYWx1ZS0+aXNOdW1iZXIoKSkgewogICAg
ICAgICBncmlkTGluZU51bWJlciA9IGN1cnJlbnRWYWx1ZS0+Z2V0SW50VmFsdWUoKTsKLSAgICAg
ICAgaXQuYWR2YW5jZSgpOwotICAgICAgICBjdXJyZW50VmFsdWUgPSBpdC5oYXNNb3JlKCkgPyBk
b3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oaXQudmFsdWUoKSkgOiBudWxscHRyOworICAgICAg
ICArK2l0OworICAgICAgICBjdXJyZW50VmFsdWUgPSBpdCAhPSB2YWx1ZXMuZW5kKCkgPyAmZG93
bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KGl0LT5nZXQoKSkgOiBudWxscHRyOwogICAgIH0KIAog
ICAgIGlmIChjdXJyZW50VmFsdWUgJiYgY3VycmVudFZhbHVlLT5pc1N0cmluZygpKSB7CiAgICAg
ICAgIGdyaWRMaW5lTmFtZSA9IGN1cnJlbnRWYWx1ZS0+Z2V0U3RyaW5nVmFsdWUoKTsKLSAgICAg
ICAgaXQuYWR2YW5jZSgpOworICAgICAgICArK2l0OwogICAgIH0KIAotICAgIEFTU0VSVCghaXQu
aGFzTW9yZSgpKTsKKyAgICBBU1NFUlQoaXQgIT0gdmFsdWVzLmVuZCgpKTsKICAgICBpZiAoaXNT
cGFuUG9zaXRpb24pCiAgICAgICAgIHBvc2l0aW9uLnNldFNwYW5Qb3NpdGlvbihncmlkTGluZU51
bWJlciA/IGdyaWRMaW5lTnVtYmVyIDogMSwgZ3JpZExpbmVOYW1lKTsKICAgICBlbHNlCkBAIC0y
MDczLDE2ICsyMDcxLDE4IEBAIFNjcm9sbFNuYXBQb2ludHMgU3R5bGVSZXNvbHZlcjo6cGFyc2VT
bmFwUG9pbnRzKENTU1ZhbHVlJiB2YWx1ZSkKICAgICB9CiAKICAgICBwb2ludHMuaGFzUmVwZWF0
ID0gZmFsc2U7Ci0gICAgZm9yIChDU1NWYWx1ZUxpc3RJdGVyYXRvciBpdCgmdmFsdWUpOyBpdC5o
YXNNb3JlKCk7IGl0LmFkdmFuY2UoKSkgewotICAgICAgICBhdXRvJiBpdGVtVmFsdWUgPSBkb3du
Y2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oKml0LnZhbHVlKCkpOwotICAgICAgICBpZiAoYXV0byog
bGVuZ3RoUmVwZWF0ID0gaXRlbVZhbHVlLmdldExlbmd0aFJlcGVhdFZhbHVlKCkpIHsKLSAgICAg
ICAgICAgIGlmIChhdXRvKiBpbnRlcnZhbCA9IGxlbmd0aFJlcGVhdC0+aW50ZXJ2YWwoKSkgewot
ICAgICAgICAgICAgICAgIHBvaW50cy5yZXBlYXRPZmZzZXQgPSBwYXJzZVNuYXBDb29yZGluYXRl
KCppbnRlcnZhbCk7Ci0gICAgICAgICAgICAgICAgcG9pbnRzLmhhc1JlcGVhdCA9IHRydWU7Ci0g
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgaWYgKGlzPENTU1ZhbHVlTGlzdD4odmFsdWUpKSB7
CisgICAgICAgIGZvciAoYXV0byYgY3VycmVudFZhbHVlIDogZG93bmNhc3Q8Q1NTVmFsdWVMaXN0
Pih2YWx1ZSkpIHsKKyAgICAgICAgICAgIGF1dG8mIGl0ZW1WYWx1ZSA9IGRvd25jYXN0PENTU1By
aW1pdGl2ZVZhbHVlPihjdXJyZW50VmFsdWUuZ2V0KCkpOworICAgICAgICAgICAgaWYgKGF1dG8q
IGxlbmd0aFJlcGVhdCA9IGl0ZW1WYWx1ZS5nZXRMZW5ndGhSZXBlYXRWYWx1ZSgpKSB7CisgICAg
ICAgICAgICAgICAgaWYgKGF1dG8qIGludGVydmFsID0gbGVuZ3RoUmVwZWF0LT5pbnRlcnZhbCgp
KSB7CisgICAgICAgICAgICAgICAgICAgIHBvaW50cy5yZXBlYXRPZmZzZXQgPSBwYXJzZVNuYXBD
b29yZGluYXRlKCppbnRlcnZhbCk7CisgICAgICAgICAgICAgICAgICAgIHBvaW50cy5oYXNSZXBl
YXQgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICB9CisgICAgICAgICAgICBwb2ludHMub2Zmc2V0cy5hcHBlbmQocGFyc2VT
bmFwQ29vcmRpbmF0ZShpdGVtVmFsdWUpKTsKICAgICAgICAgfQotICAgICAgICBwb2ludHMub2Zm
c2V0cy5hcHBlbmQocGFyc2VTbmFwQ29vcmRpbmF0ZShpdGVtVmFsdWUpKTsKICAgICB9CiAKICAg
ICByZXR1cm4gcG9pbnRzOwpAQCAtMjE0OCwzNSArMjE0OCwzNCBAQCB2b2lkIFN0eWxlUmVzb2x2
ZXI6OmFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAg
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgaWYgKCF2
YWx1ZS0+aXNWYWx1ZUxpc3QoKSkKKyAgICAgICAgICAgIGlmICghaXM8Q1NTVmFsdWVMaXN0Pigq
dmFsdWUpKQogICAgICAgICAgICAgICAgIHJldHVybjsKIAogICAgICAgICAgICAgYm9vbCBkaWRT
ZXQgPSBmYWxzZTsKLSAgICAgICAgICAgIGZvciAoQ1NTVmFsdWVMaXN0SXRlcmF0b3IgaSA9IHZh
bHVlOyBpLmhhc01vcmUoKTsgaS5hZHZhbmNlKCkpIHsKLSAgICAgICAgICAgICAgICBDU1NWYWx1
ZSogaXRlbSA9IGkudmFsdWUoKTsKLSAgICAgICAgICAgICAgICBpZiAoaXM8Q1NTSW1hZ2VHZW5l
cmF0b3JWYWx1ZT4oKml0ZW0pKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChpczxDU1NHcmFk
aWVudFZhbHVlPigqaXRlbSkpCi0gICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS5zdHlsZSgp
LT5zZXRDb250ZW50KFN0eWxlR2VuZXJhdGVkSW1hZ2U6OmNyZWF0ZSgqZG93bmNhc3Q8Q1NTR3Jh
ZGllbnRWYWx1ZT4oKml0ZW0pLmdyYWRpZW50V2l0aFN0eWxlc1Jlc29sdmVkKHRoaXMpKSwgZGlk
U2V0KTsKKyAgICAgICAgICAgIGZvciAoYXV0byYgaXRlbSA6IGRvd25jYXN0PENTU1ZhbHVlTGlz
dD4oKnZhbHVlKSkgeworICAgICAgICAgICAgICAgIGlmIChpczxDU1NJbWFnZUdlbmVyYXRvclZh
bHVlPihpdGVtLmdldCgpKSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoaXM8Q1NTR3JhZGll
bnRWYWx1ZT4oaXRlbS5nZXQoKSkpCisgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS5zdHls
ZSgpLT5zZXRDb250ZW50KFN0eWxlR2VuZXJhdGVkSW1hZ2U6OmNyZWF0ZSgqZG93bmNhc3Q8Q1NT
R3JhZGllbnRWYWx1ZT4oaXRlbS5nZXQoKSkuZ3JhZGllbnRXaXRoU3R5bGVzUmVzb2x2ZWQodGhp
cykpLCBkaWRTZXQpOwogICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAg
ICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRDb250ZW50KFN0eWxlR2VuZXJhdGVkSW1hZ2U6OmNy
ZWF0ZShkb3duY2FzdDxDU1NJbWFnZUdlbmVyYXRvclZhbHVlPigqaXRlbSkpLCBkaWRTZXQpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0Q29udGVudChTdHlsZUdl
bmVyYXRlZEltYWdlOjpjcmVhdGUoZG93bmNhc3Q8Q1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZT4oaXRl
bS5nZXQoKSkpLCBkaWRTZXQpOwogICAgICAgICAgICAgICAgICAgICBkaWRTZXQgPSB0cnVlOwog
I2lmIEVOQUJMRShDU1NfSU1BR0VfU0VUKQotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaXM8
Q1NTSW1hZ2VTZXRWYWx1ZT4oKml0ZW0pKSB7Ci0gICAgICAgICAgICAgICAgICAgIHN0YXRlLnN0
eWxlKCktPnNldENvbnRlbnQoc2V0T3JQZW5kaW5nRnJvbVZhbHVlKENTU1Byb3BlcnR5Q29udGVu
dCwgZG93bmNhc3Q8Q1NTSW1hZ2VTZXRWYWx1ZT4oaXRlbSkpLCBkaWRTZXQpOworICAgICAgICAg
ICAgICAgIH0gZWxzZSBpZiAoaXM8Q1NTSW1hZ2VTZXRWYWx1ZT4oaXRlbS5nZXQoKSkpIHsKKyAg
ICAgICAgICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0Q29udGVudChzZXRPclBlbmRpbmdG
cm9tVmFsdWUoQ1NTUHJvcGVydHlDb250ZW50LCBkb3duY2FzdDxDU1NJbWFnZVNldFZhbHVlPihp
dGVtLmdldCgpKSksIGRpZFNldCk7CiAgICAgICAgICAgICAgICAgICAgIGRpZFNldCA9IHRydWU7
CiAjZW5kaWYKICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICBpZiAoaXM8Q1NT
SW1hZ2VWYWx1ZT4oKml0ZW0pKSB7Ci0gICAgICAgICAgICAgICAgICAgIHN0YXRlLnN0eWxlKCkt
PnNldENvbnRlbnQoY2FjaGVkT3JQZW5kaW5nRnJvbVZhbHVlKENTU1Byb3BlcnR5Q29udGVudCwg
ZG93bmNhc3Q8Q1NTSW1hZ2VWYWx1ZT4oaXRlbSkpLCBkaWRTZXQpOworICAgICAgICAgICAgICAg
IGlmIChpczxDU1NJbWFnZVZhbHVlPihpdGVtLmdldCgpKSkgeworICAgICAgICAgICAgICAgICAg
ICBzdGF0ZS5zdHlsZSgpLT5zZXRDb250ZW50KGNhY2hlZE9yUGVuZGluZ0Zyb21WYWx1ZShDU1NQ
cm9wZXJ0eUNvbnRlbnQsIGRvd25jYXN0PENTU0ltYWdlVmFsdWU+KGl0ZW0uZ2V0KCkpKSwgZGlk
U2V0KTsKICAgICAgICAgICAgICAgICAgICAgZGlkU2V0ID0gdHJ1ZTsKICAgICAgICAgICAgICAg
ICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgaWYg
KCFpczxDU1NQcmltaXRpdmVWYWx1ZT4oKml0ZW0pKQorICAgICAgICAgICAgICAgIGlmICghaXM8
Q1NTUHJpbWl0aXZlVmFsdWU+KGl0ZW0uZ2V0KCkpKQogICAgICAgICAgICAgICAgICAgICBjb250
aW51ZTsKIAotICAgICAgICAgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlJiBjb250ZW50VmFsdWUg
PSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oKml0ZW0pOworICAgICAgICAgICAgICAgIGF1
dG8mIGNvbnRlbnRWYWx1ZSA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPihpdGVtLmdldCgp
KTsKIAogICAgICAgICAgICAgICAgIGlmIChjb250ZW50VmFsdWUuaXNTdHJpbmcoKSkgewogICAg
ICAgICAgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRDb250ZW50KGNvbnRlbnRWYWx1ZS5n
ZXRTdHJpbmdWYWx1ZSgpLmltcGwoKSwgZGlkU2V0KTsKQEAgLTI0MDIsMTQgKzI0MDEsMTQgQEAg
dm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1Zh
bHVlKiB2YWx1ZSkKICAgICAgICAgaWYgKGlzSW5pdGlhbCB8fCBwcmltaXRpdmVWYWx1ZSkgLy8g
aW5pdGlhbCB8IG5vbmUKICAgICAgICAgICAgIHJldHVybiBpZCA9PSBDU1NQcm9wZXJ0eVRleHRT
aGFkb3cgPyBzdGF0ZS5zdHlsZSgpLT5zZXRUZXh0U2hhZG93KG51bGxwdHIpIDogc3RhdGUuc3R5
bGUoKS0+c2V0Qm94U2hhZG93KG51bGxwdHIpOwogCi0gICAgICAgIGlmICghdmFsdWUtPmlzVmFs
dWVMaXN0KCkpCisgICAgICAgIGlmICghaXM8Q1NTVmFsdWVMaXN0PigqdmFsdWUpKQogICAgICAg
ICAgICAgcmV0dXJuOwogCi0gICAgICAgIGZvciAoQ1NTVmFsdWVMaXN0SXRlcmF0b3IgaSA9IHZh
bHVlOyBpLmhhc01vcmUoKTsgaS5hZHZhbmNlKCkpIHsKLSAgICAgICAgICAgIENTU1ZhbHVlKiBj
dXJyVmFsdWUgPSBpLnZhbHVlKCk7Ci0gICAgICAgICAgICBpZiAoIWlzPENTU1NoYWRvd1ZhbHVl
PigqY3VyclZhbHVlKSkKKyAgICAgICAgYm9vbCBpc0ZpcnN0RW50cnkgPSB0cnVlOworICAgICAg
ICBmb3IgKGF1dG8mIGN1cnJlbnRWYWx1ZSA6IGRvd25jYXN0PENTU1ZhbHVlTGlzdD4oKnZhbHVl
KSkgeworICAgICAgICAgICAgaWYgKCFpczxDU1NTaGFkb3dWYWx1ZT4oY3VycmVudFZhbHVlLmdl
dCgpKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIENTU1NoYWRvd1Zh
bHVlJiBpdGVtID0gZG93bmNhc3Q8Q1NTU2hhZG93VmFsdWU+KCpjdXJyVmFsdWUpOworICAgICAg
ICAgICAgYXV0byYgaXRlbSA9IGRvd25jYXN0PENTU1NoYWRvd1ZhbHVlPihjdXJyZW50VmFsdWUu
Z2V0KCkpOwogICAgICAgICAgICAgaW50IHggPSBpdGVtLngtPmNvbXB1dGVMZW5ndGg8aW50Pihz
dGF0ZS5jc3NUb0xlbmd0aENvbnZlcnNpb25EYXRhKCkpOwogICAgICAgICAgICAgaW50IHkgPSBp
dGVtLnktPmNvbXB1dGVMZW5ndGg8aW50PihzdGF0ZS5jc3NUb0xlbmd0aENvbnZlcnNpb25EYXRh
KCkpOwogICAgICAgICAgICAgaW50IGJsdXIgPSBpdGVtLmJsdXIgPyBpdGVtLmJsdXItPmNvbXB1
dGVMZW5ndGg8aW50PihzdGF0ZS5jc3NUb0xlbmd0aENvbnZlcnNpb25EYXRhKCkpIDogMDsKQEAg
LTI0MjMsOSArMjQyMiwxMSBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHkoQ1NT
UHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogCiAgICAgICAgICAgICBhdXRvIHNoYWRv
d0RhdGEgPSBzdGQ6Om1ha2VfdW5pcXVlPFNoYWRvd0RhdGE+KEludFBvaW50KHgsIHkpLCBibHVy
LCBzcHJlYWQsIHNoYWRvd1N0eWxlLCBpZCA9PSBDU1NQcm9wZXJ0eVdlYmtpdEJveFNoYWRvdywg
Y29sb3IuaXNWYWxpZCgpID8gY29sb3IgOiBDb2xvcjo6dHJhbnNwYXJlbnQpOwogICAgICAgICAg
ICAgaWYgKGlkID09IENTU1Byb3BlcnR5VGV4dFNoYWRvdykKLSAgICAgICAgICAgICAgICBzdGF0
ZS5zdHlsZSgpLT5zZXRUZXh0U2hhZG93KFdURjo6bW92ZShzaGFkb3dEYXRhKSwgaS5pbmRleCgp
KTsgLy8gYWRkIHRvIHRoZSBsaXN0IGlmIHRoaXMgaXMgbm90IHRoZSBmaXJzdCBlbnRyeQorICAg
ICAgICAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldFRleHRTaGFkb3coV1RGOjptb3ZlKHNoYWRv
d0RhdGEpLCAhaXNGaXJzdEVudHJ5KTsgLy8gYWRkIHRvIHRoZSBsaXN0IGlmIHRoaXMgaXMgbm90
IHRoZSBmaXJzdCBlbnRyeQogICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHN0YXRl
LnN0eWxlKCktPnNldEJveFNoYWRvdyhXVEY6Om1vdmUoc2hhZG93RGF0YSksIGkuaW5kZXgoKSk7
IC8vIGFkZCB0byB0aGUgbGlzdCBpZiB0aGlzIGlzIG5vdCB0aGUgZmlyc3QgZW50cnkKKyAgICAg
ICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRCb3hTaGFkb3coV1RGOjptb3ZlKHNoYWRvd0Rh
dGEpLCAhaXNGaXJzdEVudHJ5KTsgLy8gYWRkIHRvIHRoZSBsaXN0IGlmIHRoaXMgaXMgbm90IHRo
ZSBmaXJzdCBlbnRyeQorCisgICAgICAgICAgICBpc0ZpcnN0RW50cnkgPSBmYWxzZTsKICAgICAg
ICAgfQogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMjcwNSw3ICsyNzA2LDcgQEAgdm9pZCBT
dHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2
YWx1ZSkKICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0R3JpZEF1dG9Db2x1bW5zOiB7CiAgICAg
ICAgIEhBTkRMRV9JTkhFUklUX0FORF9JTklUSUFMKGdyaWRBdXRvQ29sdW1ucywgR3JpZEF1dG9D
b2x1bW5zKTsKICAgICAgICAgR3JpZFRyYWNrU2l6ZSB0cmFja1NpemU7Ci0gICAgICAgIGlmICgh
Y3JlYXRlR3JpZFRyYWNrU2l6ZSh2YWx1ZSwgdHJhY2tTaXplLCBzdGF0ZSkpCisgICAgICAgIGlm
ICghY3JlYXRlR3JpZFRyYWNrU2l6ZSgqdmFsdWUsIHRyYWNrU2l6ZSwgc3RhdGUpKQogICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRHcmlkQXV0b0NvbHVtbnMo
dHJhY2tTaXplKTsKICAgICAgICAgcmV0dXJuOwpAQCAtMjcxMyw3ICsyNzE0LDcgQEAgdm9pZCBT
dHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2
YWx1ZSkKICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0R3JpZEF1dG9Sb3dzOiB7CiAgICAgICAg
IEhBTkRMRV9JTkhFUklUX0FORF9JTklUSUFMKGdyaWRBdXRvUm93cywgR3JpZEF1dG9Sb3dzKTsK
ICAgICAgICAgR3JpZFRyYWNrU2l6ZSB0cmFja1NpemU7Ci0gICAgICAgIGlmICghY3JlYXRlR3Jp
ZFRyYWNrU2l6ZSh2YWx1ZSwgdHJhY2tTaXplLCBzdGF0ZSkpCisgICAgICAgIGlmICghY3JlYXRl
R3JpZFRyYWNrU2l6ZSgqdmFsdWUsIHRyYWNrU2l6ZSwgc3RhdGUpKQogICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRHcmlkQXV0b1Jvd3ModHJhY2tTaXplKTsK
ICAgICAgICAgcmV0dXJuOwpAQCAtMzIxMywzMyArMzIxNCwzMyBAQCB2b2lkIFN0eWxlUmVzb2x2
ZXI6OmFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAg
IH0KIH0KIAotUGFzc1JlZlB0cjxTdHlsZUltYWdlPiBTdHlsZVJlc29sdmVyOjpzdHlsZUltYWdl
KENTU1Byb3BlcnR5SUQgcHJvcGVydHksIENTU1ZhbHVlKiB2YWx1ZSkKK1Bhc3NSZWZQdHI8U3R5
bGVJbWFnZT4gU3R5bGVSZXNvbHZlcjo6c3R5bGVJbWFnZShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5
LCBDU1NWYWx1ZSYgdmFsdWUpCiB7Ci0gICAgaWYgKGlzPENTU0ltYWdlVmFsdWU+KCp2YWx1ZSkp
CisgICAgaWYgKGlzPENTU0ltYWdlVmFsdWU+KHZhbHVlKSkKICAgICAgICAgcmV0dXJuIGNhY2hl
ZE9yUGVuZGluZ0Zyb21WYWx1ZShwcm9wZXJ0eSwgZG93bmNhc3Q8Q1NTSW1hZ2VWYWx1ZT4odmFs
dWUpKTsKIAotICAgIGlmIChpczxDU1NJbWFnZUdlbmVyYXRvclZhbHVlPigqdmFsdWUpKSB7Ci0g
ICAgICAgIGlmIChpczxDU1NHcmFkaWVudFZhbHVlPigqdmFsdWUpKQotICAgICAgICAgICAgcmV0
dXJuIGdlbmVyYXRlZE9yUGVuZGluZ0Zyb21WYWx1ZShwcm9wZXJ0eSwgKmRvd25jYXN0PENTU0dy
YWRpZW50VmFsdWU+KCp2YWx1ZSkuZ3JhZGllbnRXaXRoU3R5bGVzUmVzb2x2ZWQodGhpcykpOwot
ICAgICAgICByZXR1cm4gZ2VuZXJhdGVkT3JQZW5kaW5nRnJvbVZhbHVlKHByb3BlcnR5LCBkb3du
Y2FzdDxDU1NJbWFnZUdlbmVyYXRvclZhbHVlPigqdmFsdWUpKTsKKyAgICBpZiAoaXM8Q1NTSW1h
Z2VHZW5lcmF0b3JWYWx1ZT4odmFsdWUpKSB7CisgICAgICAgIGlmIChpczxDU1NHcmFkaWVudFZh
bHVlPih2YWx1ZSkpCisgICAgICAgICAgICByZXR1cm4gZ2VuZXJhdGVkT3JQZW5kaW5nRnJvbVZh
bHVlKHByb3BlcnR5LCAqZG93bmNhc3Q8Q1NTR3JhZGllbnRWYWx1ZT4odmFsdWUpLmdyYWRpZW50
V2l0aFN0eWxlc1Jlc29sdmVkKHRoaXMpKTsKKyAgICAgICAgcmV0dXJuIGdlbmVyYXRlZE9yUGVu
ZGluZ0Zyb21WYWx1ZShwcm9wZXJ0eSwgZG93bmNhc3Q8Q1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZT4o
dmFsdWUpKTsKICAgICB9CiAKICNpZiBFTkFCTEUoQ1NTX0lNQUdFX1NFVCkKLSAgICBpZiAoaXM8
Q1NTSW1hZ2VTZXRWYWx1ZT4oKnZhbHVlKSkKKyAgICBpZiAoaXM8Q1NTSW1hZ2VTZXRWYWx1ZT4o
dmFsdWUpKQogICAgICAgICByZXR1cm4gc2V0T3JQZW5kaW5nRnJvbVZhbHVlKHByb3BlcnR5LCBk
b3duY2FzdDxDU1NJbWFnZVNldFZhbHVlPih2YWx1ZSkpOwogI2VuZGlmCiAKLSAgICBpZiAoaXM8
Q1NTQ3Vyc29ySW1hZ2VWYWx1ZT4oKnZhbHVlKSkKKyAgICBpZiAoaXM8Q1NTQ3Vyc29ySW1hZ2VW
YWx1ZT4odmFsdWUpKQogICAgICAgICByZXR1cm4gY3Vyc29yT3JQZW5kaW5nRnJvbVZhbHVlKHBy
b3BlcnR5LCBkb3duY2FzdDxDU1NDdXJzb3JJbWFnZVZhbHVlPih2YWx1ZSkpOwogCiAgICAgcmV0
dXJuIG51bGxwdHI7CiB9CiAKLVBhc3NSZWZQdHI8U3R5bGVJbWFnZT4gU3R5bGVSZXNvbHZlcjo6
Y2FjaGVkT3JQZW5kaW5nRnJvbVZhbHVlKENTU1Byb3BlcnR5SUQgcHJvcGVydHksIENTU0ltYWdl
VmFsdWUqIHZhbHVlKQorUGFzc1JlZlB0cjxTdHlsZUltYWdlPiBTdHlsZVJlc29sdmVyOjpjYWNo
ZWRPclBlbmRpbmdGcm9tVmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eSwgQ1NTSW1hZ2VWYWx1
ZSYgdmFsdWUpCiB7Ci0gICAgUmVmUHRyPFN0eWxlSW1hZ2U+IGltYWdlID0gdmFsdWUtPmNhY2hl
ZE9yUGVuZGluZ0ltYWdlKCk7CisgICAgUmVmUHRyPFN0eWxlSW1hZ2U+IGltYWdlID0gdmFsdWUu
Y2FjaGVkT3JQZW5kaW5nSW1hZ2UoKTsKICAgICBpZiAoaW1hZ2UgJiYgaW1hZ2UtPmlzUGVuZGlu
Z0ltYWdlKCkpCi0gICAgICAgIG1fc3RhdGUucGVuZGluZ0ltYWdlUHJvcGVydGllcygpLnNldChw
cm9wZXJ0eSwgdmFsdWUpOworICAgICAgICBtX3N0YXRlLnBlbmRpbmdJbWFnZVByb3BlcnRpZXMo
KS5zZXQocHJvcGVydHksICZ2YWx1ZSk7CiAgICAgcmV0dXJuIGltYWdlLnJlbGVhc2UoKTsKIH0K
IApAQCAtMzI1OCwyMCArMzI1OSwyMCBAQCBQYXNzUmVmUHRyPFN0eWxlSW1hZ2U+IFN0eWxlUmVz
b2x2ZXI6OmdlbmVyYXRlZE9yUGVuZGluZ0Zyb21WYWx1ZShDU1NQcm9wZXJ0eUlECiB9CiAKICNp
ZiBFTkFCTEUoQ1NTX0lNQUdFX1NFVCkKLVBhc3NSZWZQdHI8U3R5bGVJbWFnZT4gU3R5bGVSZXNv
bHZlcjo6c2V0T3JQZW5kaW5nRnJvbVZhbHVlKENTU1Byb3BlcnR5SUQgcHJvcGVydHksIENTU0lt
YWdlU2V0VmFsdWUqIHZhbHVlKQorUGFzc1JlZlB0cjxTdHlsZUltYWdlPiBTdHlsZVJlc29sdmVy
OjpzZXRPclBlbmRpbmdGcm9tVmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eSwgQ1NTSW1hZ2VT
ZXRWYWx1ZSYgdmFsdWUpCiB7Ci0gICAgUmVmUHRyPFN0eWxlSW1hZ2U+IGltYWdlID0gdmFsdWUt
PmNhY2hlZE9yUGVuZGluZ0ltYWdlU2V0KGRvY3VtZW50KCkpOworICAgIFJlZlB0cjxTdHlsZUlt
YWdlPiBpbWFnZSA9IHZhbHVlLmNhY2hlZE9yUGVuZGluZ0ltYWdlU2V0KGRvY3VtZW50KCkpOwog
ICAgIGlmIChpbWFnZSAmJiBpbWFnZS0+aXNQZW5kaW5nSW1hZ2UoKSkKLSAgICAgICAgbV9zdGF0
ZS5wZW5kaW5nSW1hZ2VQcm9wZXJ0aWVzKCkuc2V0KHByb3BlcnR5LCB2YWx1ZSk7CisgICAgICAg
IG1fc3RhdGUucGVuZGluZ0ltYWdlUHJvcGVydGllcygpLnNldChwcm9wZXJ0eSwgJnZhbHVlKTsK
ICAgICByZXR1cm4gaW1hZ2UucmVsZWFzZSgpOwogfQogI2VuZGlmCiAKLVBhc3NSZWZQdHI8U3R5
bGVJbWFnZT4gU3R5bGVSZXNvbHZlcjo6Y3Vyc29yT3JQZW5kaW5nRnJvbVZhbHVlKENTU1Byb3Bl
cnR5SUQgcHJvcGVydHksIENTU0N1cnNvckltYWdlVmFsdWUqIHZhbHVlKQorUGFzc1JlZlB0cjxT
dHlsZUltYWdlPiBTdHlsZVJlc29sdmVyOjpjdXJzb3JPclBlbmRpbmdGcm9tVmFsdWUoQ1NTUHJv
cGVydHlJRCBwcm9wZXJ0eSwgQ1NTQ3Vyc29ySW1hZ2VWYWx1ZSYgdmFsdWUpCiB7Ci0gICAgUmVm
UHRyPFN0eWxlSW1hZ2U+IGltYWdlID0gdmFsdWUtPmNhY2hlZE9yUGVuZGluZ0ltYWdlKGRvY3Vt
ZW50KCkpOworICAgIFJlZlB0cjxTdHlsZUltYWdlPiBpbWFnZSA9IHZhbHVlLmNhY2hlZE9yUGVu
ZGluZ0ltYWdlKGRvY3VtZW50KCkpOwogICAgIGlmIChpbWFnZSAmJiBpbWFnZS0+aXNQZW5kaW5n
SW1hZ2UoKSkKLSAgICAgICAgbV9zdGF0ZS5wZW5kaW5nSW1hZ2VQcm9wZXJ0aWVzKCkuc2V0KHBy
b3BlcnR5LCB2YWx1ZSk7CisgICAgICAgIG1fc3RhdGUucGVuZGluZ0ltYWdlUHJvcGVydGllcygp
LnNldChwcm9wZXJ0eSwgJnZhbHVlKTsKICAgICByZXR1cm4gaW1hZ2UucmVsZWFzZSgpOwogfQog
CkBAIC0zNTE4LDE2ICszNTE5LDE1IEBAIGJvb2wgU3R5bGVSZXNvbHZlcjo6Y3JlYXRlRmlsdGVy
T3BlcmF0aW9ucyhDU1NWYWx1ZSogaW5WYWx1ZSwgRmlsdGVyT3BlcmF0aW9ucyYKICAgICAgICAg
ICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICAKLSAgICBpZiAoIWluVmFsdWUtPmlzVmFsdWVM
aXN0KCkpCisgICAgaWYgKCFpczxDU1NWYWx1ZUxpc3Q+KCppblZhbHVlKSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCiAgICAgRmlsdGVyT3BlcmF0aW9ucyBvcGVyYXRpb25zOwotICAgIGZvciAo
Q1NTVmFsdWVMaXN0SXRlcmF0b3IgaSA9IGluVmFsdWU7IGkuaGFzTW9yZSgpOyBpLmFkdmFuY2Uo
KSkgewotICAgICAgICBDU1NWYWx1ZSogY3VyclZhbHVlID0gaS52YWx1ZSgpOwotICAgICAgICBp
ZiAoIWlzPFdlYktpdENTU0ZpbHRlclZhbHVlPigqY3VyclZhbHVlKSkKKyAgICBmb3IgKGF1dG8m
IGN1cnJlbnRWYWx1ZSA6IGRvd25jYXN0PENTU1ZhbHVlTGlzdD4oKmluVmFsdWUpKSB7CisgICAg
ICAgIGlmICghaXM8V2ViS2l0Q1NTRmlsdGVyVmFsdWU+KGN1cnJlbnRWYWx1ZS5nZXQoKSkpCiAg
ICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICBXZWJLaXRDU1NGaWx0ZXJWYWx1ZSYgZmls
dGVyVmFsdWUgPSBkb3duY2FzdDxXZWJLaXRDU1NGaWx0ZXJWYWx1ZT4oKmkudmFsdWUoKSk7Cisg
ICAgICAgIGF1dG8mIGZpbHRlclZhbHVlID0gZG93bmNhc3Q8V2ViS2l0Q1NTRmlsdGVyVmFsdWU+
KGN1cnJlbnRWYWx1ZS5nZXQoKSk7CiAgICAgICAgIEZpbHRlck9wZXJhdGlvbjo6T3BlcmF0aW9u
VHlwZSBvcGVyYXRpb25UeXBlID0gZmlsdGVyT3BlcmF0aW9uRm9yVHlwZShmaWx0ZXJWYWx1ZS5v
cGVyYXRpb25UeXBlKCkpOwogCiAgICAgICAgIGlmIChvcGVyYXRpb25UeXBlID09IEZpbHRlck9w
ZXJhdGlvbjo6UkVGRVJFTkNFKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5
bGVSZXNvbHZlci5oIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuaAppbmRleCAy
NjZkMGIwNDM4YjAwMWMxZDRlOWM1ZDk4NzJjNGViMTI1NzljNmI3Li4wZWExMDIzZDJlOTUyN2Nl
MGRmOTQzZWE2NDE0NjVhMTEyNWU3MjQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3Mv
U3R5bGVSZXNvbHZlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmgK
QEAgLTQ0NywxMyArNDQ3LDEzIEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyBSZW5kZXJTdHlsZSog
c3R5bGVOb3RZZXRBdmFpbGFibGUoKSB7IHJldHVybiBzX3N0eWxlTm90WWV0QXZhaWxhYmxlOyB9
CiAKLSAgICBQYXNzUmVmUHRyPFN0eWxlSW1hZ2U+IHN0eWxlSW1hZ2UoQ1NTUHJvcGVydHlJRCwg
Q1NTVmFsdWUqKTsKLSAgICBQYXNzUmVmUHRyPFN0eWxlSW1hZ2U+IGNhY2hlZE9yUGVuZGluZ0Zy
b21WYWx1ZShDU1NQcm9wZXJ0eUlELCBDU1NJbWFnZVZhbHVlKik7CisgICAgUGFzc1JlZlB0cjxT
dHlsZUltYWdlPiBzdHlsZUltYWdlKENTU1Byb3BlcnR5SUQsIENTU1ZhbHVlJik7CisgICAgUGFz
c1JlZlB0cjxTdHlsZUltYWdlPiBjYWNoZWRPclBlbmRpbmdGcm9tVmFsdWUoQ1NTUHJvcGVydHlJ
RCwgQ1NTSW1hZ2VWYWx1ZSYpOwogICAgIFBhc3NSZWZQdHI8U3R5bGVJbWFnZT4gZ2VuZXJhdGVk
T3JQZW5kaW5nRnJvbVZhbHVlKENTU1Byb3BlcnR5SUQsIENTU0ltYWdlR2VuZXJhdG9yVmFsdWUm
KTsKICNpZiBFTkFCTEUoQ1NTX0lNQUdFX1NFVCkKLSAgICBQYXNzUmVmUHRyPFN0eWxlSW1hZ2U+
IHNldE9yUGVuZGluZ0Zyb21WYWx1ZShDU1NQcm9wZXJ0eUlELCBDU1NJbWFnZVNldFZhbHVlKik7
CisgICAgUGFzc1JlZlB0cjxTdHlsZUltYWdlPiBzZXRPclBlbmRpbmdGcm9tVmFsdWUoQ1NTUHJv
cGVydHlJRCwgQ1NTSW1hZ2VTZXRWYWx1ZSYpOwogI2VuZGlmCi0gICAgUGFzc1JlZlB0cjxTdHls
ZUltYWdlPiBjdXJzb3JPclBlbmRpbmdGcm9tVmFsdWUoQ1NTUHJvcGVydHlJRCwgQ1NTQ3Vyc29y
SW1hZ2VWYWx1ZSopOworICAgIFBhc3NSZWZQdHI8U3R5bGVJbWFnZT4gY3Vyc29yT3JQZW5kaW5n
RnJvbVZhbHVlKENTU1Byb3BlcnR5SUQsIENTU0N1cnNvckltYWdlVmFsdWUmKTsKIAogICAgIGJv
b2wgYXBwbHlQcm9wZXJ0eVRvUmVndWxhclN0eWxlKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5h
cHBseVByb3BlcnR5VG9SZWd1bGFyU3R5bGUoKTsgfQogICAgIGJvb2wgYXBwbHlQcm9wZXJ0eVRv
VmlzaXRlZExpbmtTdHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuYXBwbHlQcm9wZXJ0eVRv
VmlzaXRlZExpbmtTdHlsZSgpOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvVHJh
bnNmb3JtRnVuY3Rpb25zLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9UcmFuc2Zvcm1GdW5jdGlv
bnMuY3BwCmluZGV4IDQ1MjhkZmNiOTFiNTg0M2IzZjhiYzRjOTE4ZmE3YjhkNmMyYzFhNjUuLjBi
YTkxMDgwNWE2Yjg4OWE4MWNlZDk5ZjVmZWEwNzRiZjc0NTAzODkgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2Nzcy9UcmFuc2Zvcm1GdW5jdGlvbnMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9UcmFuc2Zvcm1GdW5jdGlvbnMuY3BwCkBAIC04MywxOSArODMsMTcgQEAgc3RhdGljIExl
bmd0aCBjb252ZXJ0VG9GbG9hdExlbmd0aChjb25zdCBDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0
aXZlVmFsdWUsIGNvbnMKIAogYm9vbCB0cmFuc2Zvcm1zRm9yVmFsdWUoQ1NTVmFsdWUmIHZhbHVl
LCBjb25zdCBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhJiBjb252ZXJzaW9uRGF0YSwgVHJhbnNm
b3JtT3BlcmF0aW9ucyYgb3V0T3BlcmF0aW9ucykKIHsKLSAgICBpZiAoIXZhbHVlLmlzVmFsdWVM
aXN0KCkpIHsKKyAgICBpZiAoIWlzPENTU1ZhbHVlTGlzdD4odmFsdWUpKSB7CiAgICAgICAgIG91
dE9wZXJhdGlvbnMuY2xlYXIoKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAogICAg
IFRyYW5zZm9ybU9wZXJhdGlvbnMgb3BlcmF0aW9uczsKLSAgICBmb3IgKENTU1ZhbHVlTGlzdEl0
ZXJhdG9yIGkgPSAmdmFsdWU7IGkuaGFzTW9yZSgpOyBpLmFkdmFuY2UoKSkgewotICAgICAgICBD
U1NWYWx1ZSYgY3VyclZhbHVlID0gKmkudmFsdWUoKTsKLQotICAgICAgICBpZiAoIWlzPFdlYktp
dENTU1RyYW5zZm9ybVZhbHVlPihjdXJyVmFsdWUpKQorICAgIGZvciAoYXV0byYgY3VycmVudFZh
bHVlIDogZG93bmNhc3Q8Q1NTVmFsdWVMaXN0Pih2YWx1ZSkpIHsKKyAgICAgICAgaWYgKCFpczxX
ZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZT4oY3VycmVudFZhbHVlLmdldCgpKSkKICAgICAgICAgICAg
IGNvbnRpbnVlOwogCi0gICAgICAgIFdlYktpdENTU1RyYW5zZm9ybVZhbHVlJiB0cmFuc2Zvcm1W
YWx1ZSA9IGRvd25jYXN0PFdlYktpdENTU1RyYW5zZm9ybVZhbHVlPihjdXJyVmFsdWUpOworICAg
ICAgICBhdXRvJiB0cmFuc2Zvcm1WYWx1ZSA9IGRvd25jYXN0PFdlYktpdENTU1RyYW5zZm9ybVZh
bHVlPihjdXJyZW50VmFsdWUuZ2V0KCkpOwogICAgICAgICBpZiAoIXRyYW5zZm9ybVZhbHVlLmxl
bmd0aCgpKQogICAgICAgICAgICAgY29udGludWU7CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>240856</attachid>
            <date>2014-11-03 09:08:09 -0800</date>
            <delta_ts>2014-11-03 12:25:40 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-138285-20141103090818.patch</filename>
            <type>text/plain</type>
            <size>51779</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTc1NDcwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNjcwMGM2NjJmMTgxN2E5
MjQ4ZjI0NzcxNDc5YTBiZGJhNDg1YjQ1My4uMTMyYWE1NzlmMGJlYTVmZjAyOTMwNWJlYWNmYmZm
MTVmN2E4NDZhYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE3IEBACisyMDE0LTExLTAxICBDaHJp
cyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgU3VwcG9ydCBtb2Rlcm4gcmFu
Z2UgbG9vcHMgb3ZlciBDU1NWYWx1ZUxpc3QKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTEzODI4NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIEFkZCBzdXBwb3J0IGZvciBtb2Rlcm4gcmFuZ2UgbG9vcHMgb3Zl
ciBDU1NWYWx1ZUxpc3Qgb2JqZWN0cy4KKyAgICAgICAgUG9ydCB0aGUgY29kZSBiYXNlIHRvIHVz
aW5nIHJhbmdlIGxvb3BzIGZvciBDU1NWYWx1ZUxpc3Qgb2JqZWN0cyBhbmQKKyAgICAgICAgZHJv
cCB0aGUgQ1NTVmFsdWVMaXN0SW5zcGVjdG9yIC8gQ1NTVmFsdWVMaXN0SXRlcmF0b3IgY2xhc3Nl
cyBhcyB0aGV5CisgICAgICAgIGFyZSBubyBsb25nZXIgbmVlZGVkLgorCisgICAgICAgIE5vIG5l
dyB0ZXN0cywgbm8gYmVoYXZpb3IgY2hhbmdlLgorCiAyMDE0LTExLTAzICBDaHJpcyBEdW1leiAg
PGNkdW1lekBhcHBsZS5jb20+CiAKICAgICAgICAgTW92ZSAnem9vbScgQ1NTIHByb3BlcnR5IHRv
IHRoZSBuZXcgU3R5bGVCdWlsZGVyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NT
VG9TdHlsZU1hcC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTVG9TdHlsZU1hcC5jcHAKaW5k
ZXggMzA2MTkwYThjMzVmMzRhNmY4MWQzOTFjOGJkZjc0ODk0YTE4MmI0YS4uNDRhNTc2MmUzNTJj
ZTRlZjg4YzNlMDk3NjgyMjc3NjdiMDkwNDAyYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
Y3NzL0NTU1RvU3R5bGVNYXAuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NUb1N0eWxl
TWFwLmNwcApAQCAtMzAsNiArMzAsOSBAQAogCiAjaW5jbHVkZSAiQW5pbWF0aW9uLmgiCiAjaW5j
bHVkZSAiQ1NTQm9yZGVySW1hZ2VTbGljZVZhbHVlLmgiCisjaW5jbHVkZSAiQ1NTSW1hZ2VHZW5l
cmF0b3JWYWx1ZS5oIgorI2luY2x1ZGUgIkNTU0ltYWdlU2V0VmFsdWUuaCIKKyNpbmNsdWRlICJD
U1NJbWFnZVZhbHVlLmgiCiAjaW5jbHVkZSAiQ1NTUHJpbWl0aXZlVmFsdWUuaCIKICNpbmNsdWRl
ICJDU1NQcmltaXRpdmVWYWx1ZU1hcHBpbmdzLmgiCiAjaW5jbHVkZSAiQ1NTVGltaW5nRnVuY3Rp
b25WYWx1ZS5oIgpAQCAtNjIsNyArNjUsNyBAQCBib29sIENTU1RvU3R5bGVNYXA6OnVzZVNWR1pv
b21SdWxlcygpIGNvbnN0CiAgICAgcmV0dXJuIG1fcmVzb2x2ZXItPnVzZVNWR1pvb21SdWxlcygp
OwogfQogCi1QYXNzUmVmUHRyPFN0eWxlSW1hZ2U+IENTU1RvU3R5bGVNYXA6OnN0eWxlSW1hZ2Uo
Q1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlkLCBDU1NWYWx1ZSogdmFsdWUpCitQYXNzUmVmUHRyPFN0
eWxlSW1hZ2U+IENTU1RvU3R5bGVNYXA6OnN0eWxlSW1hZ2UoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0
eUlkLCBDU1NWYWx1ZSYgdmFsdWUpCiB7CiAgICAgcmV0dXJuIG1fcmVzb2x2ZXItPnN0eWxlSW1h
Z2UocHJvcGVydHlJZCwgdmFsdWUpOwogfQpAQCAtMTU2LDcgKzE1OSw3IEBAIHZvaWQgQ1NTVG9T
dHlsZU1hcDo6bWFwRmlsbEltYWdlKENTU1Byb3BlcnR5SUQgcHJvcGVydHksIEZpbGxMYXllciog
bGF5ZXIsIENTU1ZhCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBsYXllci0+c2V0SW1h
Z2Uoc3R5bGVJbWFnZShwcm9wZXJ0eSwgdmFsdWUpKTsKKyAgICBsYXllci0+c2V0SW1hZ2Uoc3R5
bGVJbWFnZShwcm9wZXJ0eSwgKnZhbHVlKSk7CiB9CiAKIHZvaWQgQ1NTVG9TdHlsZU1hcDo6bWFw
RmlsbFJlcGVhdFgoQ1NTUHJvcGVydHlJRCwgRmlsbExheWVyKiBsYXllciwgQ1NTVmFsdWUqIHZh
bHVlKQpAQCAtMzIyLDMyICszMjUsMzAgQEAgdm9pZCBDU1NUb1N0eWxlTWFwOjptYXBGaWxsTWFz
a1NvdXJjZVR5cGUoQ1NTUHJvcGVydHlJRCwgRmlsbExheWVyKiBsYXllciwgQ1NTVmEKICAgICBs
YXllci0+c2V0TWFza1NvdXJjZVR5cGUodHlwZSk7CiB9CiAKLXZvaWQgQ1NTVG9TdHlsZU1hcDo6
bWFwQW5pbWF0aW9uRGVsYXkoQW5pbWF0aW9uKiBhbmltYXRpb24sIENTU1ZhbHVlKiB2YWx1ZSkK
K3ZvaWQgQ1NTVG9TdHlsZU1hcDo6bWFwQW5pbWF0aW9uRGVsYXkoQW5pbWF0aW9uKiBhbmltYXRp
b24sIENTU1ZhbHVlJiB2YWx1ZSkKIHsKLSAgICBpZiAodmFsdWUtPmlzSW5pdGlhbFZhbHVlKCkp
IHsKKyAgICBpZiAodmFsdWUuaXNJbml0aWFsVmFsdWUoKSkgewogICAgICAgICBhbmltYXRpb24t
PnNldERlbGF5KEFuaW1hdGlvbjo6aW5pdGlhbEFuaW1hdGlvbkRlbGF5KCkpOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQogCi0gICAgaWYgKCFpczxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlKSkK
KyAgICBpZiAoIWlzPENTU1ByaW1pdGl2ZVZhbHVlPih2YWx1ZSkpCiAgICAgICAgIHJldHVybjsK
IAotICAgIENTU1ByaW1pdGl2ZVZhbHVlJiBwcmltaXRpdmVWYWx1ZSA9IGRvd25jYXN0PENTU1By
aW1pdGl2ZVZhbHVlPigqdmFsdWUpOwotICAgIGFuaW1hdGlvbi0+c2V0RGVsYXkocHJpbWl0aXZl
VmFsdWUuY29tcHV0ZVRpbWU8ZG91YmxlLCBDU1NQcmltaXRpdmVWYWx1ZTo6U2Vjb25kcz4oKSk7
CisgICAgYW5pbWF0aW9uLT5zZXREZWxheShkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4odmFs
dWUpLmNvbXB1dGVUaW1lPGRvdWJsZSwgQ1NTUHJpbWl0aXZlVmFsdWU6OlNlY29uZHM+KCkpOwog
fQogCi12b2lkIENTU1RvU3R5bGVNYXA6Om1hcEFuaW1hdGlvbkRpcmVjdGlvbihBbmltYXRpb24q
IGxheWVyLCBDU1NWYWx1ZSogdmFsdWUpCit2b2lkIENTU1RvU3R5bGVNYXA6Om1hcEFuaW1hdGlv
bkRpcmVjdGlvbihBbmltYXRpb24qIGxheWVyLCBDU1NWYWx1ZSYgdmFsdWUpCiB7Ci0gICAgaWYg
KHZhbHVlLT5pc0luaXRpYWxWYWx1ZSgpKSB7CisgICAgaWYgKHZhbHVlLmlzSW5pdGlhbFZhbHVl
KCkpIHsKICAgICAgICAgbGF5ZXItPnNldERpcmVjdGlvbihBbmltYXRpb246OmluaXRpYWxBbmlt
YXRpb25EaXJlY3Rpb24oKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpZiAoIWlz
PENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpKQorICAgIGlmICghaXM8Q1NTUHJpbWl0aXZlVmFs
dWU+KHZhbHVlKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgQ1NTUHJpbWl0aXZlVmFsdWUmIHBy
aW1pdGl2ZVZhbHVlID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSk7Ci0gICAg
c3dpdGNoIChwcmltaXRpdmVWYWx1ZS5nZXRWYWx1ZUlEKCkpIHsKKyAgICBzd2l0Y2ggKGRvd25j
YXN0PENTU1ByaW1pdGl2ZVZhbHVlPih2YWx1ZSkuZ2V0VmFsdWVJRCgpKSB7CiAgICAgY2FzZSBD
U1NWYWx1ZU5vcm1hbDoKICAgICAgICAgbGF5ZXItPnNldERpcmVjdGlvbihBbmltYXRpb246OkFu
aW1hdGlvbkRpcmVjdGlvbk5vcm1hbCk7CiAgICAgICAgIGJyZWFrOwpAQCAtMzY1LDMyICszNjYs
MzAgQEAgdm9pZCBDU1NUb1N0eWxlTWFwOjptYXBBbmltYXRpb25EaXJlY3Rpb24oQW5pbWF0aW9u
KiBsYXllciwgQ1NTVmFsdWUqIHZhbHVlKQogICAgIH0KIH0KIAotdm9pZCBDU1NUb1N0eWxlTWFw
OjptYXBBbmltYXRpb25EdXJhdGlvbihBbmltYXRpb24qIGFuaW1hdGlvbiwgQ1NTVmFsdWUqIHZh
bHVlKQordm9pZCBDU1NUb1N0eWxlTWFwOjptYXBBbmltYXRpb25EdXJhdGlvbihBbmltYXRpb24q
IGFuaW1hdGlvbiwgQ1NTVmFsdWUmIHZhbHVlKQogewotICAgIGlmICh2YWx1ZS0+aXNJbml0aWFs
VmFsdWUoKSkgeworICAgIGlmICh2YWx1ZS5pc0luaXRpYWxWYWx1ZSgpKSB7CiAgICAgICAgIGFu
aW1hdGlvbi0+c2V0RHVyYXRpb24oQW5pbWF0aW9uOjppbml0aWFsQW5pbWF0aW9uRHVyYXRpb24o
KSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpZiAoIWlzPENTU1ByaW1pdGl2ZVZh
bHVlPigqdmFsdWUpKQorICAgIGlmICghaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVlKSkKICAg
ICAgICAgcmV0dXJuOwogCi0gICAgQ1NTUHJpbWl0aXZlVmFsdWUmIHByaW1pdGl2ZVZhbHVlID0g
ZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSk7Ci0gICAgYW5pbWF0aW9uLT5zZXRE
dXJhdGlvbihwcmltaXRpdmVWYWx1ZS5jb21wdXRlVGltZTxkb3VibGUsIENTU1ByaW1pdGl2ZVZh
bHVlOjpTZWNvbmRzPigpKTsKKyAgICBhbmltYXRpb24tPnNldER1cmF0aW9uKGRvd25jYXN0PENT
U1ByaW1pdGl2ZVZhbHVlPih2YWx1ZSkuY29tcHV0ZVRpbWU8ZG91YmxlLCBDU1NQcmltaXRpdmVW
YWx1ZTo6U2Vjb25kcz4oKSk7CiB9CiAKLXZvaWQgQ1NTVG9TdHlsZU1hcDo6bWFwQW5pbWF0aW9u
RmlsbE1vZGUoQW5pbWF0aW9uKiBsYXllciwgQ1NTVmFsdWUqIHZhbHVlKQordm9pZCBDU1NUb1N0
eWxlTWFwOjptYXBBbmltYXRpb25GaWxsTW9kZShBbmltYXRpb24qIGxheWVyLCBDU1NWYWx1ZSYg
dmFsdWUpCiB7Ci0gICAgaWYgKHZhbHVlLT5pc0luaXRpYWxWYWx1ZSgpKSB7CisgICAgaWYgKHZh
bHVlLmlzSW5pdGlhbFZhbHVlKCkpIHsKICAgICAgICAgbGF5ZXItPnNldEZpbGxNb2RlKEFuaW1h
dGlvbjo6aW5pdGlhbEFuaW1hdGlvbkZpbGxNb2RlKCkpOwogICAgICAgICByZXR1cm47CiAgICAg
fQogCi0gICAgaWYgKCFpczxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlKSkKKyAgICBpZiAoIWlz
PENTU1ByaW1pdGl2ZVZhbHVlPih2YWx1ZSkpCiAgICAgICAgIHJldHVybjsKIAotICAgIENTU1By
aW1pdGl2ZVZhbHVlJiBwcmltaXRpdmVWYWx1ZSA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVl
PigqdmFsdWUpOwotICAgIHN3aXRjaCAocHJpbWl0aXZlVmFsdWUuZ2V0VmFsdWVJRCgpKSB7Cisg
ICAgc3dpdGNoIChkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4odmFsdWUpLmdldFZhbHVlSUQo
KSkgewogICAgIGNhc2UgQ1NTVmFsdWVOb25lOgogICAgICAgICBsYXllci0+c2V0RmlsbE1vZGUo
QW5pbWF0aW9uRmlsbE1vZGVOb25lKTsKICAgICAgICAgYnJlYWs7CkBAIC00MDgsNjcgKzQwNyw2
NiBAQCB2b2lkIENTU1RvU3R5bGVNYXA6Om1hcEFuaW1hdGlvbkZpbGxNb2RlKEFuaW1hdGlvbiog
bGF5ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICB9CiB9CiAKLXZvaWQgQ1NTVG9TdHlsZU1hcDo6
bWFwQW5pbWF0aW9uSXRlcmF0aW9uQ291bnQoQW5pbWF0aW9uKiBhbmltYXRpb24sIENTU1ZhbHVl
KiB2YWx1ZSkKK3ZvaWQgQ1NTVG9TdHlsZU1hcDo6bWFwQW5pbWF0aW9uSXRlcmF0aW9uQ291bnQo
QW5pbWF0aW9uKiBhbmltYXRpb24sIENTU1ZhbHVlJiB2YWx1ZSkKIHsKLSAgICBpZiAodmFsdWUt
PmlzSW5pdGlhbFZhbHVlKCkpIHsKKyAgICBpZiAodmFsdWUuaXNJbml0aWFsVmFsdWUoKSkgewog
ICAgICAgICBhbmltYXRpb24tPnNldEl0ZXJhdGlvbkNvdW50KEFuaW1hdGlvbjo6aW5pdGlhbEFu
aW1hdGlvbkl0ZXJhdGlvbkNvdW50KCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAg
aWYgKCFpczxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlKSkKKyAgICBpZiAoIWlzPENTU1ByaW1p
dGl2ZVZhbHVlPih2YWx1ZSkpCiAgICAgICAgIHJldHVybjsKIAotICAgIENTU1ByaW1pdGl2ZVZh
bHVlJiBwcmltaXRpdmVWYWx1ZSA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUp
OworICAgIGF1dG8mIHByaW1pdGl2ZVZhbHVlID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+
KHZhbHVlKTsKICAgICBpZiAocHJpbWl0aXZlVmFsdWUuZ2V0VmFsdWVJRCgpID09IENTU1ZhbHVl
SW5maW5pdGUpCiAgICAgICAgIGFuaW1hdGlvbi0+c2V0SXRlcmF0aW9uQ291bnQoQW5pbWF0aW9u
OjpJdGVyYXRpb25Db3VudEluZmluaXRlKTsKICAgICBlbHNlCiAgICAgICAgIGFuaW1hdGlvbi0+
c2V0SXRlcmF0aW9uQ291bnQocHJpbWl0aXZlVmFsdWUuZ2V0RmxvYXRWYWx1ZSgpKTsKIH0KIAot
dm9pZCBDU1NUb1N0eWxlTWFwOjptYXBBbmltYXRpb25OYW1lKEFuaW1hdGlvbiogbGF5ZXIsIENT
U1ZhbHVlKiB2YWx1ZSkKK3ZvaWQgQ1NTVG9TdHlsZU1hcDo6bWFwQW5pbWF0aW9uTmFtZShBbmlt
YXRpb24qIGxheWVyLCBDU1NWYWx1ZSYgdmFsdWUpCiB7Ci0gICAgaWYgKHZhbHVlLT5pc0luaXRp
YWxWYWx1ZSgpKSB7CisgICAgaWYgKHZhbHVlLmlzSW5pdGlhbFZhbHVlKCkpIHsKICAgICAgICAg
bGF5ZXItPnNldE5hbWUoQW5pbWF0aW9uOjppbml0aWFsQW5pbWF0aW9uTmFtZSgpKTsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmICghaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1
ZSkpCisgICAgaWYgKCFpczxDU1NQcmltaXRpdmVWYWx1ZT4odmFsdWUpKQogICAgICAgICByZXR1
cm47CiAKLSAgICBDU1NQcmltaXRpdmVWYWx1ZSYgcHJpbWl0aXZlVmFsdWUgPSBkb3duY2FzdDxD
U1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlKTsKKyAgICBhdXRvJiBwcmltaXRpdmVWYWx1ZSA9IGRv
d25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPih2YWx1ZSk7CiAgICAgaWYgKHByaW1pdGl2ZVZhbHVl
LmdldFZhbHVlSUQoKSA9PSBDU1NWYWx1ZU5vbmUpCiAgICAgICAgIGxheWVyLT5zZXRJc05vbmVB
bmltYXRpb24odHJ1ZSk7CiAgICAgZWxzZQogICAgICAgICBsYXllci0+c2V0TmFtZShwcmltaXRp
dmVWYWx1ZS5nZXRTdHJpbmdWYWx1ZSgpKTsKIH0KIAotdm9pZCBDU1NUb1N0eWxlTWFwOjptYXBB
bmltYXRpb25QbGF5U3RhdGUoQW5pbWF0aW9uKiBsYXllciwgQ1NTVmFsdWUqIHZhbHVlKQordm9p
ZCBDU1NUb1N0eWxlTWFwOjptYXBBbmltYXRpb25QbGF5U3RhdGUoQW5pbWF0aW9uKiBsYXllciwg
Q1NTVmFsdWUmIHZhbHVlKQogewotICAgIGlmICh2YWx1ZS0+aXNJbml0aWFsVmFsdWUoKSkgewor
ICAgIGlmICh2YWx1ZS5pc0luaXRpYWxWYWx1ZSgpKSB7CiAgICAgICAgIGxheWVyLT5zZXRQbGF5
U3RhdGUoQW5pbWF0aW9uOjppbml0aWFsQW5pbWF0aW9uUGxheVN0YXRlKCkpOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQogCi0gICAgaWYgKCFpczxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlKSkK
KyAgICBpZiAoIWlzPENTU1ByaW1pdGl2ZVZhbHVlPih2YWx1ZSkpCiAgICAgICAgIHJldHVybjsK
IAotICAgIENTU1ByaW1pdGl2ZVZhbHVlJiBwcmltaXRpdmVWYWx1ZSA9IGRvd25jYXN0PENTU1By
aW1pdGl2ZVZhbHVlPigqdmFsdWUpOwotICAgIEVBbmltUGxheVN0YXRlIHBsYXlTdGF0ZSA9IChw
cmltaXRpdmVWYWx1ZS5nZXRWYWx1ZUlEKCkgPT0gQ1NTVmFsdWVQYXVzZWQpID8gQW5pbVBsYXlT
dGF0ZVBhdXNlZCA6IEFuaW1QbGF5U3RhdGVQbGF5aW5nOworICAgIEVBbmltUGxheVN0YXRlIHBs
YXlTdGF0ZSA9IChkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4odmFsdWUpLmdldFZhbHVlSUQo
KSA9PSBDU1NWYWx1ZVBhdXNlZCkgPyBBbmltUGxheVN0YXRlUGF1c2VkIDogQW5pbVBsYXlTdGF0
ZVBsYXlpbmc7CiAgICAgbGF5ZXItPnNldFBsYXlTdGF0ZShwbGF5U3RhdGUpOwogfQogCi12b2lk
IENTU1RvU3R5bGVNYXA6Om1hcEFuaW1hdGlvblByb3BlcnR5KEFuaW1hdGlvbiogYW5pbWF0aW9u
LCBDU1NWYWx1ZSogdmFsdWUpCit2b2lkIENTU1RvU3R5bGVNYXA6Om1hcEFuaW1hdGlvblByb3Bl
cnR5KEFuaW1hdGlvbiogYW5pbWF0aW9uLCBDU1NWYWx1ZSYgdmFsdWUpCiB7Ci0gICAgaWYgKHZh
bHVlLT5pc0luaXRpYWxWYWx1ZSgpKSB7CisgICAgaWYgKHZhbHVlLmlzSW5pdGlhbFZhbHVlKCkp
IHsKICAgICAgICAgYW5pbWF0aW9uLT5zZXRBbmltYXRpb25Nb2RlKEFuaW1hdGlvbjo6QW5pbWF0
ZUFsbCk7CiAgICAgICAgIGFuaW1hdGlvbi0+c2V0UHJvcGVydHkoQ1NTUHJvcGVydHlJbnZhbGlk
KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmICghaXM8Q1NTUHJpbWl0aXZlVmFs
dWU+KCp2YWx1ZSkpCisgICAgaWYgKCFpczxDU1NQcmltaXRpdmVWYWx1ZT4odmFsdWUpKQogICAg
ICAgICByZXR1cm47CiAKLSAgICBDU1NQcmltaXRpdmVWYWx1ZSYgcHJpbWl0aXZlVmFsdWUgPSBk
b3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlKTsKKyAgICBhdXRvJiBwcmltaXRpdmVW
YWx1ZSA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPih2YWx1ZSk7CiAgICAgaWYgKHByaW1p
dGl2ZVZhbHVlLmdldFZhbHVlSUQoKSA9PSBDU1NWYWx1ZUFsbCkgewogICAgICAgICBhbmltYXRp
b24tPnNldEFuaW1hdGlvbk1vZGUoQW5pbWF0aW9uOjpBbmltYXRlQWxsKTsKICAgICAgICAgYW5p
bWF0aW9uLT5zZXRQcm9wZXJ0eShDU1NQcm9wZXJ0eUludmFsaWQpOwpAQCAtNDgxLDE2ICs0Nzks
MTUgQEAgdm9pZCBDU1NUb1N0eWxlTWFwOjptYXBBbmltYXRpb25Qcm9wZXJ0eShBbmltYXRpb24q
IGFuaW1hdGlvbiwgQ1NTVmFsdWUqIHZhbHVlKQogICAgIH0KIH0KIAotdm9pZCBDU1NUb1N0eWxl
TWFwOjptYXBBbmltYXRpb25UaW1pbmdGdW5jdGlvbihBbmltYXRpb24qIGFuaW1hdGlvbiwgQ1NT
VmFsdWUqIHZhbHVlKQordm9pZCBDU1NUb1N0eWxlTWFwOjptYXBBbmltYXRpb25UaW1pbmdGdW5j
dGlvbihBbmltYXRpb24qIGFuaW1hdGlvbiwgQ1NTVmFsdWUmIHZhbHVlKQogewotICAgIGlmICh2
YWx1ZS0+aXNJbml0aWFsVmFsdWUoKSkgeworICAgIGlmICh2YWx1ZS5pc0luaXRpYWxWYWx1ZSgp
KSB7CiAgICAgICAgIGFuaW1hdGlvbi0+c2V0VGltaW5nRnVuY3Rpb24oQW5pbWF0aW9uOjppbml0
aWFsQW5pbWF0aW9uVGltaW5nRnVuY3Rpb24oKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAK
LSAgICBpZiAoaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSkpIHsKLSAgICAgICAgQ1NTUHJp
bWl0aXZlVmFsdWUmIHByaW1pdGl2ZVZhbHVlID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+
KCp2YWx1ZSk7Ci0gICAgICAgIHN3aXRjaCAocHJpbWl0aXZlVmFsdWUuZ2V0VmFsdWVJRCgpKSB7
CisgICAgaWYgKGlzPENTU1ByaW1pdGl2ZVZhbHVlPih2YWx1ZSkpIHsKKyAgICAgICAgc3dpdGNo
IChkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4odmFsdWUpLmdldFZhbHVlSUQoKSkgewogICAg
ICAgICBjYXNlIENTU1ZhbHVlTGluZWFyOgogICAgICAgICAgICAgYW5pbWF0aW9uLT5zZXRUaW1p
bmdGdW5jdGlvbihMaW5lYXJUaW1pbmdGdW5jdGlvbjo6Y3JlYXRlKCkpOwogICAgICAgICAgICAg
YnJlYWs7CkBAIC01MTgsMTEgKzUxNSwxMSBAQCB2b2lkIENTU1RvU3R5bGVNYXA6Om1hcEFuaW1h
dGlvblRpbWluZ0Z1bmN0aW9uKEFuaW1hdGlvbiogYW5pbWF0aW9uLCBDU1NWYWx1ZSogdgogICAg
ICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKGlzPENTU0N1YmljQmV6aWVyVGltaW5nRnVu
Y3Rpb25WYWx1ZT4oKnZhbHVlKSkgewotICAgICAgICBDU1NDdWJpY0JlemllclRpbWluZ0Z1bmN0
aW9uVmFsdWUmIGN1YmljVGltaW5nRnVuY3Rpb24gPSBkb3duY2FzdDxDU1NDdWJpY0JlemllclRp
bWluZ0Z1bmN0aW9uVmFsdWU+KCp2YWx1ZSk7CisgICAgaWYgKGlzPENTU0N1YmljQmV6aWVyVGlt
aW5nRnVuY3Rpb25WYWx1ZT4odmFsdWUpKSB7CisgICAgICAgIGF1dG8mIGN1YmljVGltaW5nRnVu
Y3Rpb24gPSBkb3duY2FzdDxDU1NDdWJpY0JlemllclRpbWluZ0Z1bmN0aW9uVmFsdWU+KHZhbHVl
KTsKICAgICAgICAgYW5pbWF0aW9uLT5zZXRUaW1pbmdGdW5jdGlvbihDdWJpY0JlemllclRpbWlu
Z0Z1bmN0aW9uOjpjcmVhdGUoY3ViaWNUaW1pbmdGdW5jdGlvbi54MSgpLCBjdWJpY1RpbWluZ0Z1
bmN0aW9uLnkxKCksIGN1YmljVGltaW5nRnVuY3Rpb24ueDIoKSwgY3ViaWNUaW1pbmdGdW5jdGlv
bi55MigpKSk7Ci0gICAgfSBlbHNlIGlmIChpczxDU1NTdGVwc1RpbWluZ0Z1bmN0aW9uVmFsdWU+
KCp2YWx1ZSkpIHsKLSAgICAgICAgQ1NTU3RlcHNUaW1pbmdGdW5jdGlvblZhbHVlJiBzdGVwc1Rp
bWluZ0Z1bmN0aW9uID0gZG93bmNhc3Q8Q1NTU3RlcHNUaW1pbmdGdW5jdGlvblZhbHVlPigqdmFs
dWUpOworICAgIH0gZWxzZSBpZiAoaXM8Q1NTU3RlcHNUaW1pbmdGdW5jdGlvblZhbHVlPih2YWx1
ZSkpIHsKKyAgICAgICAgYXV0byYgc3RlcHNUaW1pbmdGdW5jdGlvbiA9IGRvd25jYXN0PENTU1N0
ZXBzVGltaW5nRnVuY3Rpb25WYWx1ZT4odmFsdWUpOwogICAgICAgICBhbmltYXRpb24tPnNldFRp
bWluZ0Z1bmN0aW9uKFN0ZXBzVGltaW5nRnVuY3Rpb246OmNyZWF0ZShzdGVwc1RpbWluZ0Z1bmN0
aW9uLm51bWJlck9mU3RlcHMoKSwgc3RlcHNUaW1pbmdGdW5jdGlvbi5zdGVwQXRTdGFydCgpKSk7
CiAgICAgfQogfQpAQCAtNTQ1LDMzICs1NDIsMzEgQEAgdm9pZCBDU1NUb1N0eWxlTWFwOjptYXBO
aW5lUGllY2VJbWFnZShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5LCBDU1NWYWx1ZSogdmFsdWUsIE4K
ICAgICBlbHNlCiAgICAgICAgIGltYWdlUHJvcGVydHkgPSBwcm9wZXJ0eTsKIAotICAgIGZvciAo
dW5zaWduZWQgaSA9IDAgOyBpIDwgYm9yZGVySW1hZ2UubGVuZ3RoKCk7ICsraSkgewotICAgICAg
ICBDU1NWYWx1ZSogY3VycmVudCA9IGJvcmRlckltYWdlLml0ZW0oaSk7Ci0KLSAgICAgICAgaWYg
KGN1cnJlbnQtPmlzSW1hZ2VWYWx1ZSgpIHx8IGN1cnJlbnQtPmlzSW1hZ2VHZW5lcmF0b3JWYWx1
ZSgpCisgICAgZm9yIChhdXRvJiBjdXJyZW50IDogYm9yZGVySW1hZ2UpIHsKKyAgICAgICAgaWYg
KGlzPENTU0ltYWdlVmFsdWU+KGN1cnJlbnQuZ2V0KCkpIHx8IGlzPENTU0ltYWdlR2VuZXJhdG9y
VmFsdWU+KGN1cnJlbnQuZ2V0KCkpCiAjaWYgRU5BQkxFKENTU19JTUFHRV9TRVQpCi0gICAgICAg
ICAgICB8fCBjdXJyZW50LT5pc0ltYWdlU2V0VmFsdWUoKQorICAgICAgICAgICAgfHwgaXM8Q1NT
SW1hZ2VTZXRWYWx1ZT4oY3VycmVudC5nZXQoKSkKICNlbmRpZgogICAgICAgICAgICAgKQotICAg
ICAgICAgICAgaW1hZ2Uuc2V0SW1hZ2Uoc3R5bGVJbWFnZShpbWFnZVByb3BlcnR5LCBjdXJyZW50
KSk7Ci0gICAgICAgIGVsc2UgaWYgKGN1cnJlbnQtPmlzQm9yZGVySW1hZ2VTbGljZVZhbHVlKCkp
Ci0gICAgICAgICAgICBtYXBOaW5lUGllY2VJbWFnZVNsaWNlKGN1cnJlbnQsIGltYWdlKTsKLSAg
ICAgICAgZWxzZSBpZiAoaXM8Q1NTVmFsdWVMaXN0PigqY3VycmVudCkpIHsKLSAgICAgICAgICAg
IENTU1ZhbHVlTGlzdCYgc2xhc2hMaXN0ID0gZG93bmNhc3Q8Q1NTVmFsdWVMaXN0PigqY3VycmVu
dCk7CisgICAgICAgICAgICBpbWFnZS5zZXRJbWFnZShzdHlsZUltYWdlKGltYWdlUHJvcGVydHks
IGN1cnJlbnQuZ2V0KCkpKTsKKyAgICAgICAgZWxzZSBpZiAoaXM8Q1NTQm9yZGVySW1hZ2VTbGlj
ZVZhbHVlPihjdXJyZW50LmdldCgpKSkKKyAgICAgICAgICAgIG1hcE5pbmVQaWVjZUltYWdlU2xp
Y2UoY3VycmVudC5nZXQoKSwgaW1hZ2UpOworICAgICAgICBlbHNlIGlmIChpczxDU1NWYWx1ZUxp
c3Q+KGN1cnJlbnQuZ2V0KCkpKSB7CisgICAgICAgICAgICBDU1NWYWx1ZUxpc3QmIHNsYXNoTGlz
dCA9IGRvd25jYXN0PENTU1ZhbHVlTGlzdD4oY3VycmVudC5nZXQoKSk7CiAgICAgICAgICAgICAv
LyBNYXAgaW4gdGhlIGltYWdlIHNsaWNlcy4KLSAgICAgICAgICAgIGlmIChzbGFzaExpc3QuaXRl
bSgwKSAmJiBzbGFzaExpc3QuaXRlbSgwKS0+aXNCb3JkZXJJbWFnZVNsaWNlVmFsdWUoKSkKLSAg
ICAgICAgICAgICAgICBtYXBOaW5lUGllY2VJbWFnZVNsaWNlKHNsYXNoTGlzdC5pdGVtKDApLCBp
bWFnZSk7CisgICAgICAgICAgICBpZiAoaXM8Q1NTQm9yZGVySW1hZ2VTbGljZVZhbHVlPihzbGFz
aExpc3QuaXRlbSgwKSkpCisgICAgICAgICAgICAgICAgbWFwTmluZVBpZWNlSW1hZ2VTbGljZSgq
c2xhc2hMaXN0Lml0ZW0oMCksIGltYWdlKTsKIAogICAgICAgICAgICAgLy8gTWFwIGluIHRoZSBi
b3JkZXIgc2xpY2VzLgogICAgICAgICAgICAgaWYgKHNsYXNoTGlzdC5pdGVtKDEpKQotICAgICAg
ICAgICAgICAgIGltYWdlLnNldEJvcmRlclNsaWNlcyhtYXBOaW5lUGllY2VJbWFnZVF1YWQoc2xh
c2hMaXN0Lml0ZW0oMSkpKTsKKyAgICAgICAgICAgICAgICBpbWFnZS5zZXRCb3JkZXJTbGljZXMo
bWFwTmluZVBpZWNlSW1hZ2VRdWFkKCpzbGFzaExpc3QuaXRlbSgxKSkpOwogCiAgICAgICAgICAg
ICAvLyBNYXAgaW4gdGhlIG91dHNldC4KICAgICAgICAgICAgIGlmIChzbGFzaExpc3QuaXRlbSgy
KSkKLSAgICAgICAgICAgICAgICBpbWFnZS5zZXRPdXRzZXQobWFwTmluZVBpZWNlSW1hZ2VRdWFk
KHNsYXNoTGlzdC5pdGVtKDIpKSk7Ci0gICAgICAgIH0gZWxzZSBpZiAoY3VycmVudC0+aXNQcmlt
aXRpdmVWYWx1ZSgpKSB7CisgICAgICAgICAgICAgICAgaW1hZ2Uuc2V0T3V0c2V0KG1hcE5pbmVQ
aWVjZUltYWdlUXVhZCgqc2xhc2hMaXN0Lml0ZW0oMikpKTsKKyAgICAgICAgfSBlbHNlIGlmIChp
czxDU1NQcmltaXRpdmVWYWx1ZT4oY3VycmVudC5nZXQoKSkpIHsKICAgICAgICAgICAgIC8vIFNl
dCB0aGUgYXBwcm9wcmlhdGUgcnVsZXMgZm9yIHN0cmV0Y2gvcm91bmQvcmVwZWF0IG9mIHRoZSBz
bGljZXMuCi0gICAgICAgICAgICBtYXBOaW5lUGllY2VJbWFnZVJlcGVhdChjdXJyZW50LCBpbWFn
ZSk7CisgICAgICAgICAgICBtYXBOaW5lUGllY2VJbWFnZVJlcGVhdChjdXJyZW50LmdldCgpLCBp
bWFnZSk7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTU5MCwxMyArNTg1LDEzIEBAIHZvaWQgQ1NT
VG9TdHlsZU1hcDo6bWFwTmluZVBpZWNlSW1hZ2UoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eSwgQ1NT
VmFsdWUqIHZhbHVlLCBOCiAgICAgfQogfQogCi12b2lkIENTU1RvU3R5bGVNYXA6Om1hcE5pbmVQ
aWVjZUltYWdlU2xpY2UoQ1NTVmFsdWUqIHZhbHVlLCBOaW5lUGllY2VJbWFnZSYgaW1hZ2UpCit2
b2lkIENTU1RvU3R5bGVNYXA6Om1hcE5pbmVQaWVjZUltYWdlU2xpY2UoQ1NTVmFsdWUmIHZhbHVl
LCBOaW5lUGllY2VJbWFnZSYgaW1hZ2UpCiB7CiAgICAgaWYgKCFpczxDU1NCb3JkZXJJbWFnZVNs
aWNlVmFsdWU+KHZhbHVlKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gUmV0cmlldmUgdGhl
IGJvcmRlciBpbWFnZSB2YWx1ZS4KLSAgICBDU1NCb3JkZXJJbWFnZVNsaWNlVmFsdWUmIGJvcmRl
ckltYWdlU2xpY2UgPSBkb3duY2FzdDxDU1NCb3JkZXJJbWFnZVNsaWNlVmFsdWU+KCp2YWx1ZSk7
CisgICAgYXV0byYgYm9yZGVySW1hZ2VTbGljZSA9IGRvd25jYXN0PENTU0JvcmRlckltYWdlU2xp
Y2VWYWx1ZT4odmFsdWUpOwogCiAgICAgLy8gU2V0IHVwIGEgbGVuZ3RoIGJveCB0byByZXByZXNl
bnQgb3VyIGltYWdlIHNsaWNlcy4KICAgICBMZW5ndGhCb3ggYm94OwpAQCAtNjIzLDcgKzYxOCw3
IEBAIHZvaWQgQ1NTVG9TdHlsZU1hcDo6bWFwTmluZVBpZWNlSW1hZ2VTbGljZShDU1NWYWx1ZSog
dmFsdWUsIE5pbmVQaWVjZUltYWdlJiBpbWFnCiAgICAgaW1hZ2Uuc2V0RmlsbChib3JkZXJJbWFn
ZVNsaWNlLm1fZmlsbCk7CiB9CiAKLUxlbmd0aEJveCBDU1NUb1N0eWxlTWFwOjptYXBOaW5lUGll
Y2VJbWFnZVF1YWQoQ1NTVmFsdWUqIHZhbHVlKQorTGVuZ3RoQm94IENTU1RvU3R5bGVNYXA6Om1h
cE5pbmVQaWVjZUltYWdlUXVhZChDU1NWYWx1ZSYgdmFsdWUpCiB7CiAgICAgaWYgKCFpczxDU1NQ
cmltaXRpdmVWYWx1ZT4odmFsdWUpKQogICAgICAgICByZXR1cm4gTGVuZ3RoQm94KCk7CkBAIC02
MzIsNyArNjI3LDcgQEAgTGVuZ3RoQm94IENTU1RvU3R5bGVNYXA6Om1hcE5pbmVQaWVjZUltYWdl
UXVhZChDU1NWYWx1ZSogdmFsdWUpCiAgICAgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YSBjb252
ZXJzaW9uRGF0YSA9IHVzZVNWR1pvb21SdWxlcygpID8gbV9yZXNvbHZlci0+c3RhdGUoKS5jc3NU
b0xlbmd0aENvbnZlcnNpb25EYXRhKCkuY29weVdpdGhBZGp1c3RlZFpvb20oMS4wZikgOiBtX3Jl
c29sdmVyLT5zdGF0ZSgpLmNzc1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEoKTsKIAogICAgIC8vIFJl
dHJpZXZlIHRoZSBwcmltaXRpdmUgdmFsdWUuCi0gICAgQ1NTUHJpbWl0aXZlVmFsdWUmIGJvcmRl
cldpZHRocyA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpOworICAgIGF1dG8m
IGJvcmRlcldpZHRocyA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPih2YWx1ZSk7CiAKICAg
ICAvLyBTZXQgdXAgYSBsZW5ndGggYm94IHRvIHJlcHJlc2VudCBvdXIgaW1hZ2Ugc2xpY2VzLgog
ICAgIExlbmd0aEJveCBib3g7IC8vIERlZmF1bHRzIHRvICdhdXRvJyBzbyB3ZSBkb24ndCBoYXZl
IHRvIGhhbmRsZSB0aGF0IGV4cGxpY2l0bHkgYmVsb3cuCkBAIC02NjgsMTIgKzY2MywxMiBAQCBM
ZW5ndGhCb3ggQ1NTVG9TdHlsZU1hcDo6bWFwTmluZVBpZWNlSW1hZ2VRdWFkKENTU1ZhbHVlKiB2
YWx1ZSkKICAgICByZXR1cm4gYm94OwogfQogCi12b2lkIENTU1RvU3R5bGVNYXA6Om1hcE5pbmVQ
aWVjZUltYWdlUmVwZWF0KENTU1ZhbHVlKiB2YWx1ZSwgTmluZVBpZWNlSW1hZ2UmIGltYWdlKQor
dm9pZCBDU1NUb1N0eWxlTWFwOjptYXBOaW5lUGllY2VJbWFnZVJlcGVhdChDU1NWYWx1ZSYgdmFs
dWUsIE5pbmVQaWVjZUltYWdlJiBpbWFnZSkKIHsKICAgICBpZiAoIWlzPENTU1ByaW1pdGl2ZVZh
bHVlPih2YWx1ZSkpCiAgICAgICAgIHJldHVybjsKIAotICAgIENTU1ByaW1pdGl2ZVZhbHVlJiBw
cmltaXRpdmVWYWx1ZSA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpOworICAg
IENTU1ByaW1pdGl2ZVZhbHVlJiBwcmltaXRpdmVWYWx1ZSA9IGRvd25jYXN0PENTU1ByaW1pdGl2
ZVZhbHVlPih2YWx1ZSk7CiAgICAgUGFpciogcGFpciA9IHByaW1pdGl2ZVZhbHVlLmdldFBhaXJW
YWx1ZSgpOwogICAgIGlmICghcGFpciB8fCAhcGFpci0+Zmlyc3QoKSB8fCAhcGFpci0+c2Vjb25k
KCkpCiAgICAgICAgIHJldHVybjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NU
b1N0eWxlTWFwLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTVG9TdHlsZU1hcC5oCmluZGV4IGI0
ZWNjYzY3NDM5YTE4NWQ1Y2I5YmYxYTE5MTYyNDIzYTQzNjIzYWUuLjQ0MzA2Nzk3MjQ2Nzk4YjE5
YmQwYWFhMDBlODA4MDZjNTVjZDZiZTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9D
U1NUb1N0eWxlTWFwLmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1RvU3R5bGVNYXAuaApA
QCAtNTgsMjAgKzU4LDIwIEBAIHB1YmxpYzoKICAgICB2b2lkIG1hcEZpbGxZUG9zaXRpb24oQ1NT
UHJvcGVydHlJRCwgRmlsbExheWVyKiwgQ1NTVmFsdWUqKTsKICAgICB2b2lkIG1hcEZpbGxNYXNr
U291cmNlVHlwZShDU1NQcm9wZXJ0eUlELCBGaWxsTGF5ZXIqLCBDU1NWYWx1ZSopOwogCi0gICAg
dm9pZCBtYXBBbmltYXRpb25EZWxheShBbmltYXRpb24qLCBDU1NWYWx1ZSopOwotICAgIHZvaWQg
bWFwQW5pbWF0aW9uRGlyZWN0aW9uKEFuaW1hdGlvbiosIENTU1ZhbHVlKik7Ci0gICAgdm9pZCBt
YXBBbmltYXRpb25EdXJhdGlvbihBbmltYXRpb24qLCBDU1NWYWx1ZSopOwotICAgIHZvaWQgbWFw
QW5pbWF0aW9uRmlsbE1vZGUoQW5pbWF0aW9uKiwgQ1NTVmFsdWUqKTsKLSAgICB2b2lkIG1hcEFu
aW1hdGlvbkl0ZXJhdGlvbkNvdW50KEFuaW1hdGlvbiosIENTU1ZhbHVlKik7Ci0gICAgdm9pZCBt
YXBBbmltYXRpb25OYW1lKEFuaW1hdGlvbiosIENTU1ZhbHVlKik7Ci0gICAgdm9pZCBtYXBBbmlt
YXRpb25QbGF5U3RhdGUoQW5pbWF0aW9uKiwgQ1NTVmFsdWUqKTsKLSAgICB2b2lkIG1hcEFuaW1h
dGlvblByb3BlcnR5KEFuaW1hdGlvbiosIENTU1ZhbHVlKik7Ci0gICAgdm9pZCBtYXBBbmltYXRp
b25UaW1pbmdGdW5jdGlvbihBbmltYXRpb24qLCBDU1NWYWx1ZSopOworICAgIHZvaWQgbWFwQW5p
bWF0aW9uRGVsYXkoQW5pbWF0aW9uKiwgQ1NTVmFsdWUmKTsKKyAgICB2b2lkIG1hcEFuaW1hdGlv
bkRpcmVjdGlvbihBbmltYXRpb24qLCBDU1NWYWx1ZSYpOworICAgIHZvaWQgbWFwQW5pbWF0aW9u
RHVyYXRpb24oQW5pbWF0aW9uKiwgQ1NTVmFsdWUmKTsKKyAgICB2b2lkIG1hcEFuaW1hdGlvbkZp
bGxNb2RlKEFuaW1hdGlvbiosIENTU1ZhbHVlJik7CisgICAgdm9pZCBtYXBBbmltYXRpb25JdGVy
YXRpb25Db3VudChBbmltYXRpb24qLCBDU1NWYWx1ZSYpOworICAgIHZvaWQgbWFwQW5pbWF0aW9u
TmFtZShBbmltYXRpb24qLCBDU1NWYWx1ZSYpOworICAgIHZvaWQgbWFwQW5pbWF0aW9uUGxheVN0
YXRlKEFuaW1hdGlvbiosIENTU1ZhbHVlJik7CisgICAgdm9pZCBtYXBBbmltYXRpb25Qcm9wZXJ0
eShBbmltYXRpb24qLCBDU1NWYWx1ZSYpOworICAgIHZvaWQgbWFwQW5pbWF0aW9uVGltaW5nRnVu
Y3Rpb24oQW5pbWF0aW9uKiwgQ1NTVmFsdWUmKTsKIAogICAgIHZvaWQgbWFwTmluZVBpZWNlSW1h
Z2UoQ1NTUHJvcGVydHlJRCwgQ1NTVmFsdWUqLCBOaW5lUGllY2VJbWFnZSYpOwotICAgIHZvaWQg
bWFwTmluZVBpZWNlSW1hZ2VTbGljZShDU1NWYWx1ZSosIE5pbmVQaWVjZUltYWdlJik7Ci0gICAg
TGVuZ3RoQm94IG1hcE5pbmVQaWVjZUltYWdlUXVhZChDU1NWYWx1ZSopOwotICAgIHZvaWQgbWFw
TmluZVBpZWNlSW1hZ2VSZXBlYXQoQ1NTVmFsdWUqLCBOaW5lUGllY2VJbWFnZSYpOworICAgIHZv
aWQgbWFwTmluZVBpZWNlSW1hZ2VTbGljZShDU1NWYWx1ZSYsIE5pbmVQaWVjZUltYWdlJik7Cisg
ICAgTGVuZ3RoQm94IG1hcE5pbmVQaWVjZUltYWdlUXVhZChDU1NWYWx1ZSYpOworICAgIHZvaWQg
bWFwTmluZVBpZWNlSW1hZ2VSZXBlYXQoQ1NTVmFsdWUmLCBOaW5lUGllY2VJbWFnZSYpOwogCiBw
cml2YXRlOgogICAgIC8vIEZJWE1FOiBUaGVzZSBhY2Nlc3NvcnMgc2hvdWxkIGJlIHJlcGxhY2Vk
IGJ5IGEgUmVzb2x2ZVN0YXRlIG9iamVjdApAQCAtODQsNyArODQsNyBAQCBwcml2YXRlOgogICAg
IC8vIEZJWE1FOiBUaGlzIHNob3VsZCBiZSBwYXJ0IG9mIHNvbWUgc29ydCBvZiBTdHlsZUltYWdl
Q2FjaGUgb2JqZWN0IHdoaWNoCiAgICAgLy8gaXMgaGVsZCBieSB0aGUgU3R5bGVSZXNvbHZlciwg
YW5kIGxpa2VseSBwcm92aWRlZCB0byB0aGlzIG9iamVjdAogICAgIC8vIGR1cmluZyB0aGUgcmVz
b2x2ZS4KLSAgICBQYXNzUmVmUHRyPFN0eWxlSW1hZ2U+IHN0eWxlSW1hZ2UoQ1NTUHJvcGVydHlJ
RCwgQ1NTVmFsdWUqKTsKKyAgICBQYXNzUmVmUHRyPFN0eWxlSW1hZ2U+IHN0eWxlSW1hZ2UoQ1NT
UHJvcGVydHlJRCwgQ1NTVmFsdWUmKTsKIAogICAgIFN0eWxlUmVzb2x2ZXIqIG1fcmVzb2x2ZXI7
CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1ZhbHVlTGlzdC5oIGIvU291
cmNlL1dlYkNvcmUvY3NzL0NTU1ZhbHVlTGlzdC5oCmluZGV4IGYwYWZjM2YyYjcwYTJiOWFjZGU0
ZDI2NDY1YTViMzc5ZWI3NGQ1YjguLjk5MTI5ZjllNWI3YWRkZTVkZTM5YWEzNTJiMDY5ZGQ4Mjkw
MzA0MzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NWYWx1ZUxpc3QuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTVmFsdWVMaXN0LmgKQEAgLTMxLDYgKzMxLDkgQEAgY2xh
c3MgQ1NTUGFyc2VyVmFsdWVMaXN0OwogCiBjbGFzcyBDU1NWYWx1ZUxpc3QgOiBwdWJsaWMgQ1NT
VmFsdWUgewogcHVibGljOgorICAgIHR5cGVkZWYgVmVjdG9yPFJlZjxDU1NWYWx1ZT4sIDQ+Ojpp
dGVyYXRvciBpdGVyYXRvcjsKKyAgICB0eXBlZGVmIFZlY3RvcjxSZWY8Q1NTVmFsdWU+LCA0Pjo6
Y29uc3RfaXRlcmF0b3IgY29uc3RfaXRlcmF0b3I7CisKICAgICBzdGF0aWMgUGFzc1JlZjxDU1NW
YWx1ZUxpc3Q+IGNyZWF0ZUNvbW1hU2VwYXJhdGVkKCkKICAgICB7CiAgICAgICAgIHJldHVybiBh
ZG9wdFJlZigqbmV3IENTU1ZhbHVlTGlzdChDb21tYVNlcGFyYXRvcikpOwpAQCAtNTQsNiArNTcs
MTEgQEAgcHVibGljOgogICAgIENTU1ZhbHVlKiBpdGVtV2l0aG91dEJvdW5kc0NoZWNrKHNpemVf
dCBpbmRleCkgeyByZXR1cm4gJm1fdmFsdWVzW2luZGV4XS5nZXQoKTsgfQogICAgIGNvbnN0IENT
U1ZhbHVlKiBpdGVtV2l0aG91dEJvdW5kc0NoZWNrKHNpemVfdCBpbmRleCkgY29uc3QgeyBBU1NF
UlQoaW5kZXggPCBtX3ZhbHVlcy5zaXplKCkpOyByZXR1cm4gJm1fdmFsdWVzW2luZGV4XS5nZXQo
KTsgfQogCisgICAgY29uc3RfaXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBtX3ZhbHVl
cy5iZWdpbigpOyB9CisgICAgY29uc3RfaXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gbV92
YWx1ZXMuZW5kKCk7IH0KKyAgICBpdGVyYXRvciBiZWdpbigpIHsgcmV0dXJuIG1fdmFsdWVzLmJl
Z2luKCk7IH0KKyAgICBpdGVyYXRvciBlbmQoKSB7IHJldHVybiBtX3ZhbHVlcy5lbmQoKTsgfQor
CiAgICAgdm9pZCBhcHBlbmQoUGFzc1JlZjxDU1NWYWx1ZT4pOwogICAgIHZvaWQgcHJlcGVuZChQ
YXNzUmVmPENTU1ZhbHVlPik7CiAgICAgYm9vbCByZW1vdmVBbGwoQ1NTVmFsdWUqKTsKQEAgLTkx
LDM4ICs5OSw2IEBAIGlubGluZSB2b2lkIENTU1ZhbHVlTGlzdDo6cHJlcGVuZChQYXNzUmVmPENT
U1ZhbHVlPiB2YWx1ZSkKICAgICBtX3ZhbHVlcy5pbnNlcnQoMCwgV1RGOjptb3ZlKHZhbHVlKSk7
CiB9CiAKLS8vIE9iamVjdHMgb2YgdGhpcyBjbGFzcyBhcmUgaW50ZW5kZWQgdG8gYmUgc3RhY2st
YWxsb2NhdGVkIGFuZCBzY29wZWQgdG8gYSBzaW5nbGUgZnVuY3Rpb24uCi0vLyBQbGVhc2UgdGFr
ZSBjYXJlIG5vdCB0byBwYXNzIHRoZXNlIGFyb3VuZCBhcyB0aGV5IGRvIGhvbGQgb250byBhIHJh
dyBwb2ludGVyLgotY2xhc3MgQ1NTVmFsdWVMaXN0SW5zcGVjdG9yIHsKLXB1YmxpYzoKLSAgICBD
U1NWYWx1ZUxpc3RJbnNwZWN0b3IoQ1NTVmFsdWUqIHZhbHVlKQotICAgICAgICA6IG1fbGlzdChp
czxDU1NWYWx1ZUxpc3Q+KHZhbHVlKSA/IGRvd25jYXN0PENTU1ZhbHVlTGlzdD4odmFsdWUpIDog
bnVsbHB0cikKLSAgICB7Ci0gICAgfQotCi0gICAgQ1NTVmFsdWUqIGl0ZW0oc2l6ZV90IGluZGV4
KSBjb25zdCB7IEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKGluZGV4IDwgbGVuZ3Ro
KCkpOyByZXR1cm4gbV9saXN0LT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKGluZGV4KTsgfQotICAg
IENTU1ZhbHVlKiBmaXJzdCgpIGNvbnN0IHsgcmV0dXJuIGl0ZW0oMCk7IH0KLSAgICBDU1NWYWx1
ZSogc2Vjb25kKCkgY29uc3QgeyByZXR1cm4gaXRlbSgxKTsgfQotICAgIHNpemVfdCBsZW5ndGgo
KSBjb25zdCB7IHJldHVybiBtX2xpc3QgPyBtX2xpc3QtPmxlbmd0aCgpIDogMDsgfQotcHJpdmF0
ZToKLSAgICBDU1NWYWx1ZUxpc3QqIG1fbGlzdDsKLX07Ci0KLS8vIFdyYXBwZXIgdGhhdCBjYW4g
YmUgdXNlZCB0byBpdGVyYXRlIG92ZXIgYW55IENTU1ZhbHVlLiBOb24tbGlzdCB2YWx1ZXMgYW5k
IDAgYmVoYXZlIGFzIHplcm8tbGVuZ3RoIGxpc3RzLgotLy8gT2JqZWN0cyBvZiB0aGlzIGNsYXNz
IGFyZSBpbnRlbmRlZCB0byBiZSBzdGFjay1hbGxvY2F0ZWQgYW5kIHNjb3BlZCB0byBhIHNpbmds
ZSBmdW5jdGlvbi4KLS8vIFBsZWFzZSB0YWtlIGNhcmUgbm90IHRvIHBhc3MgdGhlc2UgYXJvdW5k
IGFzIHRoZXkgZG8gaG9sZCBvbnRvIGEgcmF3IHBvaW50ZXIuCi1jbGFzcyBDU1NWYWx1ZUxpc3RJ
dGVyYXRvciB7Ci1wdWJsaWM6Ci0gICAgQ1NTVmFsdWVMaXN0SXRlcmF0b3IoQ1NTVmFsdWUqIHZh
bHVlKSA6IG1faW5zcGVjdG9yKHZhbHVlKSwgbV9wb3NpdGlvbigwKSB7IH0KLSAgICBib29sIGhh
c01vcmUoKSBjb25zdCB7IHJldHVybiBtX3Bvc2l0aW9uIDwgbV9pbnNwZWN0b3IubGVuZ3RoKCk7
IH0KLSAgICBDU1NWYWx1ZSogdmFsdWUoKSBjb25zdCB7IHJldHVybiBtX2luc3BlY3Rvci5pdGVt
KG1fcG9zaXRpb24pOyB9Ci0gICAgYm9vbCBpc1ByaW1pdGl2ZVZhbHVlKCkgY29uc3QgeyByZXR1
cm4gdmFsdWUoKS0+aXNQcmltaXRpdmVWYWx1ZSgpOyB9Ci0gICAgdm9pZCBhZHZhbmNlKCkgeyBt
X3Bvc2l0aW9uKys7IEFTU0VSVChtX3Bvc2l0aW9uIDw9IG1faW5zcGVjdG9yLmxlbmd0aCgpKTt9
Ci0gICAgc2l6ZV90IGluZGV4KCkgY29uc3QgeyByZXR1cm4gbV9wb3NpdGlvbjsgfQotcHJpdmF0
ZToKLSAgICBDU1NWYWx1ZUxpc3RJbnNwZWN0b3IgbV9pbnNwZWN0b3I7Ci0gICAgc2l6ZV90IG1f
cG9zaXRpb247Ci19OwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiBTUEVDSUFMSVpFX1RZUEVf
VFJBSVRTX0NTU19WQUxVRShDU1NWYWx1ZUxpc3QsIGlzVmFsdWVMaXN0KCkpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9jc3MvRGVwcmVjYXRlZFN0eWxlQnVpbGRlci5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9jc3MvRGVwcmVjYXRlZFN0eWxlQnVpbGRlci5jcHAKaW5kZXggZGNlZTI2Njk2NDEw
ODFiODRiNGY4MjJkODE1OGY0YTgwMWExMTMzOC4uODBlNjdlNDdhYTllNDA0ZjgxYTllNGYxZjQ1
MzkwNTM2N2M3NmNjNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0RlcHJlY2F0ZWRT
dHlsZUJ1aWxkZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9EZXByZWNhdGVkU3R5bGVC
dWlsZGVyLmNwcApAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgIkNTU0FzcGVjdFJhdGlvVmFs
dWUuaCIKICNpbmNsdWRlICJDU1NDYWxjdWxhdGlvblZhbHVlLmgiCiAjaW5jbHVkZSAiQ1NTQ3Vy
c29ySW1hZ2VWYWx1ZS5oIgorI2luY2x1ZGUgIkNTU0ltYWdlR2VuZXJhdG9yVmFsdWUuaCIKICNp
bmNsdWRlICJDU1NJbWFnZVNldFZhbHVlLmgiCiAjaW5jbHVkZSAiQ1NTUHJpbWl0aXZlVmFsdWUu
aCIKICNpbmNsdWRlICJDU1NQcmltaXRpdmVWYWx1ZU1hcHBpbmdzLmgiCkBAIC0xNjMsNyArMTY0
LDcgQEAgcHVibGljOgogdGVtcGxhdGUgPFN0eWxlSW1hZ2UqIChSZW5kZXJTdHlsZTo6KmdldHRl
ckZ1bmN0aW9uKSgpIGNvbnN0LCB2b2lkIChSZW5kZXJTdHlsZTo6KnNldHRlckZ1bmN0aW9uKShQ
YXNzUmVmUHRyPFN0eWxlSW1hZ2U+KSwgU3R5bGVJbWFnZSogKCppbml0aWFsRnVuY3Rpb24pKCks
IENTU1Byb3BlcnR5SUQgcHJvcGVydHk+CiBjbGFzcyBBcHBseVByb3BlcnR5U3R5bGVJbWFnZSB7
CiBwdWJsaWM6Ci0gICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHls
ZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSogdmFsdWUpIHsgKHN0eWxlUmVzb2x2
ZXItPnN0eWxlKCktPipzZXR0ZXJGdW5jdGlvbikoc3R5bGVSZXNvbHZlci0+c3R5bGVJbWFnZShw
cm9wZXJ0eSwgdmFsdWUpKTsgfQorICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVy
dHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUqIHZhbHVlKSB7IChz
dHlsZVJlc29sdmVyLT5zdHlsZSgpLT4qc2V0dGVyRnVuY3Rpb24pKHN0eWxlUmVzb2x2ZXItPnN0
eWxlSW1hZ2UocHJvcGVydHksICp2YWx1ZSkpOyB9CiAgICAgc3RhdGljIFByb3BlcnR5SGFuZGxl
ciBjcmVhdGVIYW5kbGVyKCkKICAgICB7CiAgICAgICAgIFByb3BlcnR5SGFuZGxlciBoYW5kbGVy
ID0gQXBwbHlQcm9wZXJ0eURlZmF1bHRCYXNlPFN0eWxlSW1hZ2UqLCBnZXR0ZXJGdW5jdGlvbiwg
UGFzc1JlZlB0cjxTdHlsZUltYWdlPiwgc2V0dGVyRnVuY3Rpb24sIFN0eWxlSW1hZ2UqLCBpbml0
aWFsRnVuY3Rpb24+OjpjcmVhdGVIYW5kbGVyKCk7CkBAIC04NTAsMTYgKzg1MSwxNiBAQCBwdWJs
aWM6CiAgICAgICAgIE5pbmVQaWVjZUltYWdlIGltYWdlKGdldFZhbHVlKHN0eWxlUmVzb2x2ZXIt
PnN0eWxlKCkpKTsKICAgICAgICAgc3dpdGNoIChtb2RpZmllcikgewogICAgICAgICBjYXNlIE91
dHNldDoKLSAgICAgICAgICAgIGltYWdlLnNldE91dHNldChzdHlsZVJlc29sdmVyLT5zdHlsZU1h
cCgpLT5tYXBOaW5lUGllY2VJbWFnZVF1YWQodmFsdWUpKTsKKyAgICAgICAgICAgIGltYWdlLnNl
dE91dHNldChzdHlsZVJlc29sdmVyLT5zdHlsZU1hcCgpLT5tYXBOaW5lUGllY2VJbWFnZVF1YWQo
KnZhbHVlKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBSZXBlYXQ6Ci0gICAg
ICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZU1hcCgpLT5tYXBOaW5lUGllY2VJbWFnZVJlcGVh
dCh2YWx1ZSwgaW1hZ2UpOworICAgICAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGVNYXAoKS0+
bWFwTmluZVBpZWNlSW1hZ2VSZXBlYXQoKnZhbHVlLCBpbWFnZSk7CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgY2FzZSBTbGljZToKLSAgICAgICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxl
TWFwKCktPm1hcE5pbmVQaWVjZUltYWdlU2xpY2UodmFsdWUsIGltYWdlKTsKKyAgICAgICAgICAg
IHN0eWxlUmVzb2x2ZXItPnN0eWxlTWFwKCktPm1hcE5pbmVQaWVjZUltYWdlU2xpY2UoKnZhbHVl
LCBpbWFnZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBXaWR0aDoKLSAgICAg
ICAgICAgIGltYWdlLnNldEJvcmRlclNsaWNlcyhzdHlsZVJlc29sdmVyLT5zdHlsZU1hcCgpLT5t
YXBOaW5lUGllY2VJbWFnZVF1YWQodmFsdWUpKTsKKyAgICAgICAgICAgIGltYWdlLnNldEJvcmRl
clNsaWNlcyhzdHlsZVJlc29sdmVyLT5zdHlsZU1hcCgpLT5tYXBOaW5lUGllY2VJbWFnZVF1YWQo
KnZhbHVlKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBzZXRWYWx1
ZShzdHlsZVJlc29sdmVyLT5zdHlsZSgpLCBpbWFnZSk7CkBAIC05NjEsNyArOTYyLDcgQEAgcHVi
bGljOgogICAgICAgICAgICAgICAgICAgICBDU1NDdXJzb3JJbWFnZVZhbHVlJiBpbWFnZSA9IGRv
d25jYXN0PENTU0N1cnNvckltYWdlVmFsdWU+KCppdGVtKTsKICAgICAgICAgICAgICAgICAgICAg
aWYgKGltYWdlLnVwZGF0ZUlmU1ZHQ3Vyc29ySXNVc2VkKHN0eWxlUmVzb2x2ZXItPmVsZW1lbnQo
KSkpIC8vIEVsZW1lbnRzIHdpdGggU1ZHIGN1cnNvcnMgYXJlIG5vdCBhbGxvd2VkIHRvIHNoYXJl
IHN0eWxlLgogICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+
c2V0VW5pcXVlKCk7Ci0gICAgICAgICAgICAgICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCkt
PmFkZEN1cnNvcihzdHlsZVJlc29sdmVyLT5zdHlsZUltYWdlKENTU1Byb3BlcnR5Q3Vyc29yLCAm
aW1hZ2UpLCBpbWFnZS5ob3RTcG90KCkpOworICAgICAgICAgICAgICAgICAgICBzdHlsZVJlc29s
dmVyLT5zdHlsZSgpLT5hZGRDdXJzb3Ioc3R5bGVSZXNvbHZlci0+c3R5bGVJbWFnZShDU1NQcm9w
ZXJ0eUN1cnNvciwgaW1hZ2UpLCBpbWFnZS5ob3RTcG90KCkpOwogICAgICAgICAgICAgICAgIH0g
ZWxzZSBpZiAoaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KCppdGVtKSkgewogICAgICAgICAgICAgICAg
ICAgICBDU1NQcmltaXRpdmVWYWx1ZSYgcHJpbWl0aXZlVmFsdWUgPSBkb3duY2FzdDxDU1NQcmlt
aXRpdmVWYWx1ZT4oKml0ZW0pOwogICAgICAgICAgICAgICAgICAgICBpZiAocHJpbWl0aXZlVmFs
dWUuaXNWYWx1ZUlEKCkpCkBAIC0xMDQzLDggKzEwNDQsMTAgQEAgcHVibGljOgogICAgICAgICB9
CiAKICAgICAgICAgVGV4dERlY29yYXRpb25Ta2lwIHNraXAgPSBSZW5kZXJTdHlsZTo6aW5pdGlh
bFRleHREZWNvcmF0aW9uU2tpcCgpOwotICAgICAgICBmb3IgKENTU1ZhbHVlTGlzdEl0ZXJhdG9y
IGkodmFsdWUpOyBpLmhhc01vcmUoKTsgaS5hZHZhbmNlKCkpCi0gICAgICAgICAgICBza2lwIHw9
IHZhbHVlVG9EZWNvcmF0aW9uU2tpcChkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oKmkudmFs
dWUoKSkpOworICAgICAgICBpZiAoaXM8Q1NTVmFsdWVMaXN0PigqdmFsdWUpKSB7CisgICAgICAg
ICAgICBmb3IgKGF1dG8mIGN1cnJlbnRWYWx1ZSA6IGRvd25jYXN0PENTU1ZhbHVlTGlzdD4oKnZh
bHVlKSkKKyAgICAgICAgICAgICAgICBza2lwIHw9IHZhbHVlVG9EZWNvcmF0aW9uU2tpcChkb3du
Y2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oY3VycmVudFZhbHVlLmdldCgpKSk7CisgICAgICAgIH0K
ICAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0VGV4dERlY29yYXRpb25Ta2lwKHNr
aXApOwogICAgIH0KICAgICBzdGF0aWMgUHJvcGVydHlIYW5kbGVyIGNyZWF0ZUhhbmRsZXIoKQpA
QCAtMTEyMCwxMCArMTEyMywxMSBAQCBwdWJsaWM6CiAgICAgICAgIH0KIAogICAgICAgICB1bnNp
Z25lZCB0ID0gMDsKLSAgICAgICAgZm9yIChDU1NWYWx1ZUxpc3RJdGVyYXRvciBpKHZhbHVlKTsg
aS5oYXNNb3JlKCk7IGkuYWR2YW5jZSgpKSB7Ci0gICAgICAgICAgICBDU1NWYWx1ZSogaXRlbSA9
IGkudmFsdWUoKTsKLSAgICAgICAgICAgIFRleHRVbmRlcmxpbmVQb3NpdGlvbiB0MiA9IGRvd25j
YXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqaXRlbSk7Ci0gICAgICAgICAgICB0IHw9IHQyOworICAg
ICAgICBpZiAoaXM8Q1NTVmFsdWVMaXN0PigqdmFsdWUpKSB7CisgICAgICAgICAgICBmb3IgKGF1
dG8mIGN1cnJlbnRWYWx1ZSA6IGRvd25jYXN0PENTU1ZhbHVlTGlzdD4oKnZhbHVlKSkgeworICAg
ICAgICAgICAgICAgIFRleHRVbmRlcmxpbmVQb3NpdGlvbiB0MiA9IGRvd25jYXN0PENTU1ByaW1p
dGl2ZVZhbHVlPihjdXJyZW50VmFsdWUuZ2V0KCkpOworICAgICAgICAgICAgICAgIHQgfD0gdDI7
CisgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUo
KS0+c2V0VGV4dFVuZGVybGluZVBvc2l0aW9uKHN0YXRpY19jYXN0PFRleHRVbmRlcmxpbmVQb3Np
dGlvbj4odCkpOwogICAgIH0KQEAgLTEzNDAsMzUgKzEzNDQsNDEgQEAgcHVibGljOgogICAgICAg
ICBMZW5ndGggd2lkdGg7CiAgICAgICAgIExlbmd0aCBoZWlnaHQ7CiAgICAgICAgIFBhZ2VTaXpl
VHlwZSBwYWdlU2l6ZVR5cGUgPSBQQUdFX1NJWkVfQVVUTzsKLSAgICAgICAgQ1NTVmFsdWVMaXN0
SW5zcGVjdG9yIGluc3BlY3Rvcih2YWx1ZSk7Ci0gICAgICAgIHN3aXRjaCAoaW5zcGVjdG9yLmxl
bmd0aCgpKSB7CisgICAgICAgIGlmICghaXM8Q1NTVmFsdWVMaXN0Pih2YWx1ZSkpCisgICAgICAg
ICAgICByZXR1cm47CisKKyAgICAgICAgYXV0byYgdmFsdWVMaXN0ID0gZG93bmNhc3Q8Q1NTVmFs
dWVMaXN0PigqdmFsdWUpOworICAgICAgICBzd2l0Y2ggKHZhbHVlTGlzdC5sZW5ndGgoKSkgewog
ICAgICAgICBjYXNlIDI6IHsKKyAgICAgICAgICAgIENTU1ZhbHVlKiBmaXJzdFZhbHVlID0gdmFs
dWVMaXN0Lml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soMCk7CisgICAgICAgICAgICBDU1NWYWx1ZSog
c2Vjb25kVmFsdWUgPSB2YWx1ZUxpc3QuaXRlbVdpdGhvdXRCb3VuZHNDaGVjaygxKTsKICAgICAg
ICAgICAgIC8vIDxsZW5ndGg+ezJ9IHwgPHBhZ2Utc2l6ZT4gPG9yaWVudGF0aW9uPgotICAgICAg
ICAgICAgaWYgKCFpczxDU1NQcmltaXRpdmVWYWx1ZT4oKmluc3BlY3Rvci5maXJzdCgpKSB8fCAh
aXM8Q1NTUHJpbWl0aXZlVmFsdWU+KCppbnNwZWN0b3Iuc2Vjb25kKCkpKQorICAgICAgICAgICAg
aWYgKCFpczxDU1NQcmltaXRpdmVWYWx1ZT4oKmZpcnN0VmFsdWUpIHx8ICFpczxDU1NQcmltaXRp
dmVWYWx1ZT4oKnNlY29uZFZhbHVlKSkKICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
ICAgICBDU1NQcmltaXRpdmVWYWx1ZSYgZmlyc3QgPSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1
ZT4oKmluc3BlY3Rvci5maXJzdCgpKTsKLSAgICAgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlJiBz
ZWNvbmQgPSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oKmluc3BlY3Rvci5zZWNvbmQoKSk7
Ci0gICAgICAgICAgICBpZiAoZmlyc3QuaXNMZW5ndGgoKSkgeworICAgICAgICAgICAgYXV0byYg
Zmlyc3RQcmltaXRpdmVWYWx1ZSA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqZmlyc3RW
YWx1ZSk7CisgICAgICAgICAgICBhdXRvJiBzZWNvbmRQcmltaXRpdmVWYWx1ZSA9IGRvd25jYXN0
PENTU1ByaW1pdGl2ZVZhbHVlPigqc2Vjb25kVmFsdWUpOworICAgICAgICAgICAgaWYgKGZpcnN0
UHJpbWl0aXZlVmFsdWUuaXNMZW5ndGgoKSkgewogICAgICAgICAgICAgICAgIC8vIDxsZW5ndGg+
ezJ9Ci0gICAgICAgICAgICAgICAgaWYgKCFzZWNvbmQuaXNMZW5ndGgoKSkKKyAgICAgICAgICAg
ICAgICBpZiAoIXNlY29uZFByaW1pdGl2ZVZhbHVlLmlzTGVuZ3RoKCkpCiAgICAgICAgICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRh
IGNvbnZlcnNpb25EYXRhID0gc3R5bGVSZXNvbHZlci0+c3RhdGUoKS5jc3NUb0xlbmd0aENvbnZl
cnNpb25EYXRhKCkuY29weVdpdGhBZGp1c3RlZFpvb20oMS4wZik7Ci0gICAgICAgICAgICAgICAg
d2lkdGggPSBmaXJzdC5jb21wdXRlTGVuZ3RoPExlbmd0aD4oY29udmVyc2lvbkRhdGEpOwotICAg
ICAgICAgICAgICAgIGhlaWdodCA9IHNlY29uZC5jb21wdXRlTGVuZ3RoPExlbmd0aD4oY29udmVy
c2lvbkRhdGEpOworICAgICAgICAgICAgICAgIHdpZHRoID0gZmlyc3RQcmltaXRpdmVWYWx1ZS5j
b21wdXRlTGVuZ3RoPExlbmd0aD4oY29udmVyc2lvbkRhdGEpOworICAgICAgICAgICAgICAgIGhl
aWdodCA9IHNlY29uZFByaW1pdGl2ZVZhbHVlLmNvbXB1dGVMZW5ndGg8TGVuZ3RoPihjb252ZXJz
aW9uRGF0YSk7CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIC8vIDxwYWdl
LXNpemU+IDxvcmllbnRhdGlvbj4KICAgICAgICAgICAgICAgICAvLyBUaGUgdmFsdWUgb3JkZXIg
aXMgZ3VhcmFudGVlZC4gU2VlIENTU1BhcnNlcjo6cGFyc2VTaXplUGFyYW1ldGVyLgotICAgICAg
ICAgICAgICAgIGlmICghZ2V0UGFnZVNpemVGcm9tTmFtZSgmZmlyc3QsICZzZWNvbmQsIHdpZHRo
LCBoZWlnaHQpKQorICAgICAgICAgICAgICAgIGlmICghZ2V0UGFnZVNpemVGcm9tTmFtZSgmZmly
c3RQcmltaXRpdmVWYWx1ZSwgJnNlY29uZFByaW1pdGl2ZVZhbHVlLCB3aWR0aCwgaGVpZ2h0KSkK
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQogICAgICAgICAgICAg
cGFnZVNpemVUeXBlID0gUEFHRV9TSVpFX1JFU09MVkVEOwogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIH0KICAgICAgICAgY2FzZSAxOiB7CisgICAgICAgICAgICBDU1NWYWx1ZSogdmFsdWUg
PSB2YWx1ZUxpc3QuaXRlbVdpdGhvdXRCb3VuZHNDaGVjaygwKTsKICAgICAgICAgICAgIC8vIDxs
ZW5ndGg+IHwgYXV0byB8IDxwYWdlLXNpemU+IHwgWyBwb3J0cmFpdCB8IGxhbmRzY2FwZV0KLSAg
ICAgICAgICAgIGlmICghaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KCppbnNwZWN0b3IuZmlyc3QoKSkp
CisgICAgICAgICAgICBpZiAoIWlzPENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpKQogICAgICAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlJiBwcmltaXRp
dmVWYWx1ZSA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqaW5zcGVjdG9yLmZpcnN0KCkp
OworICAgICAgICAgICAgYXV0byYgcHJpbWl0aXZlVmFsdWUgPSBkb3duY2FzdDxDU1NQcmltaXRp
dmVWYWx1ZT4oKnZhbHVlKTsKICAgICAgICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZS5pc0xlbmd0
aCgpKSB7CiAgICAgICAgICAgICAgICAgLy8gPGxlbmd0aD4KICAgICAgICAgICAgICAgICBwYWdl
U2l6ZVR5cGUgPSBQQUdFX1NJWkVfUkVTT0xWRUQ7CkBAIC0xNDk4LDggKzE1MDgsMTAgQEAgcHVi
bGljOgogICAgICAgICB9CiAKICAgICAgICAgVGV4dEVtcGhhc2lzUG9zaXRpb24gcG9zaXRpb24g
PSAwOwotICAgICAgICBmb3IgKENTU1ZhbHVlTGlzdEl0ZXJhdG9yIGkodmFsdWUpOyBpLmhhc01v
cmUoKTsgaS5hZHZhbmNlKCkpCi0gICAgICAgICAgICBwb3NpdGlvbiB8PSB2YWx1ZVRvRW1waGFz
aXNQb3NpdGlvbihkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oKmkudmFsdWUoKSkpOworICAg
ICAgICBpZiAoaXM8Q1NTVmFsdWVMaXN0PigqdmFsdWUpKSB7CisgICAgICAgICAgICBmb3IgKGF1
dG8mIGN1cnJlbnRWYWx1ZSA6IGRvd25jYXN0PENTU1ZhbHVlTGlzdD4oKnZhbHVlKSkKKyAgICAg
ICAgICAgICAgICBwb3NpdGlvbiB8PSB2YWx1ZVRvRW1waGFzaXNQb3NpdGlvbihkb3duY2FzdDxD
U1NQcmltaXRpdmVWYWx1ZT4oY3VycmVudFZhbHVlLmdldCgpKSk7CisgICAgICAgIH0KICAgICAg
ICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0VGV4dEVtcGhhc2lzUG9zaXRpb24ocG9zaXRp
b24pOwogICAgIH0KICAgICBzdGF0aWMgUHJvcGVydHlIYW5kbGVyIGNyZWF0ZUhhbmRsZXIoKQpA
QCAtMTUxNSw3ICsxNTI3LDcgQEAgdGVtcGxhdGUgPHR5cGVuYW1lIFQsCiAgICAgICAgICAgYm9v
bCAoQW5pbWF0aW9uOjoqdGVzdEZ1bmN0aW9uKSgpIGNvbnN0LAogICAgICAgICAgIHZvaWQgKEFu
aW1hdGlvbjo6KmNsZWFyRnVuY3Rpb24pKCksCiAgICAgICAgICAgVCAoKmluaXRpYWxGdW5jdGlv
bikoKSwKLSAgICAgICAgICB2b2lkIChDU1NUb1N0eWxlTWFwOjoqbWFwRnVuY3Rpb24pKEFuaW1h
dGlvbiosIENTU1ZhbHVlKiksCisgICAgICAgICAgdm9pZCAoQ1NTVG9TdHlsZU1hcDo6Km1hcEZ1
bmN0aW9uKShBbmltYXRpb24qLCBDU1NWYWx1ZSYpLAogICAgICAgICAgIEFuaW1hdGlvbkxpc3Qq
IChSZW5kZXJTdHlsZTo6KmFuaW1hdGlvbkdldHRlckZ1bmN0aW9uKSgpLAogICAgICAgICAgIGNv
bnN0IEFuaW1hdGlvbkxpc3QqIChSZW5kZXJTdHlsZTo6KmltbXV0YWJsZUFuaW1hdGlvbkdldHRl
ckZ1bmN0aW9uKSgpIGNvbnN0PgogY2xhc3MgQXBwbHlQcm9wZXJ0eUFuaW1hdGlvbiB7CkBAIC0x
NTI1LDcgKzE1MzcsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGJvb2wgdGVzdChjb25zdCBBbmlt
YXRpb24mIGFuaW1hdGlvbikgeyByZXR1cm4gKGFuaW1hdGlvbi4qdGVzdEZ1bmN0aW9uKSgpOyB9
CiAgICAgc3RhdGljIHZvaWQgY2xlYXIoQW5pbWF0aW9uJiBhbmltYXRpb24pIHsgKGFuaW1hdGlv
bi4qY2xlYXJGdW5jdGlvbikoKTsgfQogICAgIHN0YXRpYyBUIGluaXRpYWwoKSB7IHJldHVybiAo
KmluaXRpYWxGdW5jdGlvbikoKTsgfQotICAgIHN0YXRpYyB2b2lkIG1hcChTdHlsZVJlc29sdmVy
KiBzdHlsZVJlc29sdmVyLCBBbmltYXRpb24mIGFuaW1hdGlvbiwgQ1NTVmFsdWUqIHZhbHVlKSB7
IChzdHlsZVJlc29sdmVyLT5zdHlsZU1hcCgpLT4qbWFwRnVuY3Rpb24pKCZhbmltYXRpb24sIHZh
bHVlKTsgfQorICAgIHN0YXRpYyB2b2lkIG1hcChTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVy
LCBBbmltYXRpb24mIGFuaW1hdGlvbiwgQ1NTVmFsdWUmIHZhbHVlKSB7IChzdHlsZVJlc29sdmVy
LT5zdHlsZU1hcCgpLT4qbWFwRnVuY3Rpb24pKCZhbmltYXRpb24sIHZhbHVlKTsgfQogICAgIHN0
YXRpYyBBbmltYXRpb25MaXN0KiBhY2Nlc3NBbmltYXRpb25zKFJlbmRlclN0eWxlKiBzdHlsZSkg
eyByZXR1cm4gKHN0eWxlLT4qYW5pbWF0aW9uR2V0dGVyRnVuY3Rpb24pKCk7IH0KICAgICBzdGF0
aWMgY29uc3QgQW5pbWF0aW9uTGlzdCogYW5pbWF0aW9ucyhSZW5kZXJTdHlsZSogc3R5bGUpIHsg
cmV0dXJuIChzdHlsZS0+KmltbXV0YWJsZUFuaW1hdGlvbkdldHRlckZ1bmN0aW9uKSgpOyB9CiAK
QEAgLTE1NjIsMTggKzE1NzQsMTggQEAgcHVibGljOgogICAgIHsKICAgICAgICAgQW5pbWF0aW9u
TGlzdCogbGlzdCA9IGFjY2Vzc0FuaW1hdGlvbnMoc3R5bGVSZXNvbHZlci0+c3R5bGUoKSk7CiAg
ICAgICAgIHNpemVfdCBjaGlsZEluZGV4ID0gMDsKLSAgICAgICAgaWYgKHZhbHVlLT5pc1ZhbHVl
TGlzdCgpKSB7CisgICAgICAgIGlmIChpczxDU1NWYWx1ZUxpc3Q+KCp2YWx1ZSkpIHsKICAgICAg
ICAgICAgIC8qIFdhbGsgZWFjaCB2YWx1ZSBhbmQgcHV0IGl0IGludG8gYW4gYW5pbWF0aW9uLCBj
cmVhdGluZyBuZXcgYW5pbWF0aW9ucyBhcyBuZWVkZWQuICovCi0gICAgICAgICAgICBmb3IgKENT
U1ZhbHVlTGlzdEl0ZXJhdG9yIGkgPSB2YWx1ZTsgaS5oYXNNb3JlKCk7IGkuYWR2YW5jZSgpKSB7
CisgICAgICAgICAgICBmb3IgKGF1dG8mIGN1cnJlbnRWYWx1ZSA6IGRvd25jYXN0PENTU1ZhbHVl
TGlzdD4oKnZhbHVlKSkgewogICAgICAgICAgICAgICAgIGlmIChjaGlsZEluZGV4IDw9IGxpc3Qt
PnNpemUoKSkKICAgICAgICAgICAgICAgICAgICAgbGlzdC0+YXBwZW5kKEFuaW1hdGlvbjo6Y3Jl
YXRlKCkpOwotICAgICAgICAgICAgICAgIG1hcChzdHlsZVJlc29sdmVyLCBsaXN0LT5hbmltYXRp
b24oY2hpbGRJbmRleCksIGkudmFsdWUoKSk7CisgICAgICAgICAgICAgICAgbWFwKHN0eWxlUmVz
b2x2ZXIsIGxpc3QtPmFuaW1hdGlvbihjaGlsZEluZGV4KSwgY3VycmVudFZhbHVlLmdldCgpKTsK
ICAgICAgICAgICAgICAgICArK2NoaWxkSW5kZXg7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0g
ZWxzZSB7CiAgICAgICAgICAgICBpZiAobGlzdC0+aXNFbXB0eSgpKQogICAgICAgICAgICAgICAg
IGxpc3QtPmFwcGVuZChBbmltYXRpb246OmNyZWF0ZSgpKTsKLSAgICAgICAgICAgIG1hcChzdHls
ZVJlc29sdmVyLCBsaXN0LT5hbmltYXRpb24oY2hpbGRJbmRleCksIHZhbHVlKTsKKyAgICAgICAg
ICAgIG1hcChzdHlsZVJlc29sdmVyLCBsaXN0LT5hbmltYXRpb24oY2hpbGRJbmRleCksICp2YWx1
ZSk7CiAgICAgICAgICAgICBjaGlsZEluZGV4ID0gMTsKICAgICAgICAgfQogICAgICAgICBmb3Ig
KCA7IGNoaWxkSW5kZXggPCBsaXN0LT5zaXplKCk7ICsrY2hpbGRJbmRleCkgewpAQCAtMTgxMyw5
ICsxODI1LDkgQEAgcHVibGljOgogICAgICAgICBpZiAoaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2
YWx1ZSkpIHsKICAgICAgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlJiBwcmltaXRpdmVWYWx1ZSA9
IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpOwogICAgICAgICAgICAgaWYgKHBy
aW1pdGl2ZVZhbHVlLmdldFZhbHVlSUQoKSA9PSBDU1NWYWx1ZUF1dG8pCi0gICAgICAgICAgICAg
ICAgc2V0VmFsdWUoc3R5bGVSZXNvbHZlci0+c3R5bGUoKSwgMCk7Ci0gICAgICAgIH0gZWxzZSBp
ZiAodmFsdWUtPmlzSW1hZ2VWYWx1ZSgpIHx8IHZhbHVlLT5pc0ltYWdlR2VuZXJhdG9yVmFsdWUo
KSB8fCB2YWx1ZS0+aXNJbWFnZVNldFZhbHVlKCkpIHsKLSAgICAgICAgICAgIFJlZlB0cjxTaGFw
ZVZhbHVlPiBzaGFwZSA9IFNoYXBlVmFsdWU6OmNyZWF0ZUltYWdlVmFsdWUoc3R5bGVSZXNvbHZl
ci0+c3R5bGVJbWFnZShwcm9wZXJ0eSwgdmFsdWUpKTsKKyAgICAgICAgICAgICAgICBzZXRWYWx1
ZShzdHlsZVJlc29sdmVyLT5zdHlsZSgpLCBudWxscHRyKTsKKyAgICAgICAgfSBlbHNlIGlmIChp
czxDU1NJbWFnZVZhbHVlPigqdmFsdWUpIHx8IGlzPENTU0ltYWdlR2VuZXJhdG9yVmFsdWU+KCp2
YWx1ZSkgfHwgaXM8Q1NTSW1hZ2VTZXRWYWx1ZT4oKnZhbHVlKSkgeworICAgICAgICAgICAgUmVm
UHRyPFNoYXBlVmFsdWU+IHNoYXBlID0gU2hhcGVWYWx1ZTo6Y3JlYXRlSW1hZ2VWYWx1ZShzdHls
ZVJlc29sdmVyLT5zdHlsZUltYWdlKHByb3BlcnR5LCAqdmFsdWUpKTsKICAgICAgICAgICAgIHNl
dFZhbHVlKHN0eWxlUmVzb2x2ZXItPnN0eWxlKCksIHNoYXBlLnJlbGVhc2UoKSk7CiAgICAgICAg
IH0gZWxzZSBpZiAoaXM8Q1NTVmFsdWVMaXN0PigqdmFsdWUpKSB7CiAgICAgICAgICAgICBSZWZQ
dHI8QmFzaWNTaGFwZT4gc2hhcGU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5
bGVCdWlsZGVyQ29udmVydGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVCdWlsZGVyQ29u
dmVydGVyLmgKaW5kZXggMjNmN2JiNTg1ZjcyNTY1ZDIxN2IzOGEwNWRlYmVhZWQ2MGEyNTZmZS4u
YmE3MDkyNTdiMDZmMTU1NmE1MzkxYmMxYTEwODJmNGU5ZjVkMzA4MiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvY3NzL1N0eWxlQnVpbGRlckNvbnZlcnRlci5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2Nzcy9TdHlsZUJ1aWxkZXJDb252ZXJ0ZXIuaApAQCAtMjAxLDggKzIwMSwxMCBAQCBpbmxp
bmUgTGVuZ3RoU2l6ZSBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRSYWRpdXMoU3R5bGVS
ZXNvbHZlciYgc3R5bGVSZXNvbAogaW5saW5lIFRleHREZWNvcmF0aW9uIFN0eWxlQnVpbGRlckNv
bnZlcnRlcjo6Y29udmVydFRleHREZWNvcmF0aW9uKFN0eWxlUmVzb2x2ZXImLCBDU1NWYWx1ZSYg
dmFsdWUpCiB7CiAgICAgVGV4dERlY29yYXRpb24gcmVzdWx0ID0gUmVuZGVyU3R5bGU6OmluaXRp
YWxUZXh0RGVjb3JhdGlvbigpOwotICAgIGZvciAoQ1NTVmFsdWVMaXN0SXRlcmF0b3IgaXQoJnZh
bHVlKTsgaXQuaGFzTW9yZSgpOyBpdC5hZHZhbmNlKCkpCi0gICAgICAgIHJlc3VsdCB8PSBkb3du
Y2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oKml0LnZhbHVlKCkpOworICAgIGlmIChpczxDU1NWYWx1
ZUxpc3Q+KHZhbHVlKSkgeworICAgICAgICBmb3IgKGF1dG8mIGN1cnJlbnRWYWx1ZSA6IGRvd25j
YXN0PENTU1ZhbHVlTGlzdD4odmFsdWUpKQorICAgICAgICAgICAgcmVzdWx0IHw9IGRvd25jYXN0
PENTU1ByaW1pdGl2ZVZhbHVlPihjdXJyZW50VmFsdWUuZ2V0KCkpOworICAgIH0KICAgICByZXR1
cm4gcmVzdWx0OwogfQogCkBAIC0yNDIsNyArMjQ0LDcgQEAgaW5saW5lIE5pbmVQaWVjZUltYWdl
IFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydEJvcmRlck1hc2soU3R5bGVSZXNvbHZlciYg
c3QKIHRlbXBsYXRlIDxDU1NQcm9wZXJ0eUlEIHByb3BlcnR5PgogaW5saW5lIFBhc3NSZWZQdHI8
U3R5bGVJbWFnZT4gU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0Qm9yZGVySW1hZ2VTb3Vy
Y2UoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUmIHZhbHVlKQogewotICAg
IHJldHVybiBzdHlsZVJlc29sdmVyLnN0eWxlSW1hZ2UocHJvcGVydHksICZ2YWx1ZSk7CisgICAg
cmV0dXJuIHN0eWxlUmVzb2x2ZXIuc3R5bGVJbWFnZShwcm9wZXJ0eSwgdmFsdWUpOwogfQogCiBp
bmxpbmUgVHJhbnNmb3JtT3BlcmF0aW9ucyBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRU
cmFuc2Zvcm0oU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUmIHZhbHVlKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuY3BwIGIvU291cmNl
L1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuY3BwCmluZGV4IDE2Mzc0MmYwODdjNjE4Y2Q5ZDJh
N2E3MzJhMDIwZWRmZWI0ODQ1YzAuLmFmNTkwNWM1NGE2YzNhMWU4ZWEyMmIwNmVlZmY5ZjUzNDVl
OTVkNzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5jcHAKQEAgLTE5MjksMTAgKzE5
MjksMTAgQEAgc3RhdGljIGJvb2wgY3JlYXRlR3JpZFRyYWNrQnJlYWR0aChDU1NQcmltaXRpdmVW
YWx1ZSogcHJpbWl0aXZlVmFsdWUsIGNvbnN0IFN0eWwKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAot
c3RhdGljIGJvb2wgY3JlYXRlR3JpZFRyYWNrU2l6ZShDU1NWYWx1ZSogdmFsdWUsIEdyaWRUcmFj
a1NpemUmIHRyYWNrU2l6ZSwgY29uc3QgU3R5bGVSZXNvbHZlcjo6U3RhdGUmIHN0YXRlKQorc3Rh
dGljIGJvb2wgY3JlYXRlR3JpZFRyYWNrU2l6ZShDU1NWYWx1ZSYgdmFsdWUsIEdyaWRUcmFja1Np
emUmIHRyYWNrU2l6ZSwgY29uc3QgU3R5bGVSZXNvbHZlcjo6U3RhdGUmIHN0YXRlKQogewotICAg
IGlmIChpczxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlKSkgewotICAgICAgICBDU1NQcmltaXRp
dmVWYWx1ZSYgcHJpbWl0aXZlVmFsdWUgPSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oKnZh
bHVlKTsKKyAgICBpZiAoaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVlKSkgeworICAgICAgICBD
U1NQcmltaXRpdmVWYWx1ZSYgcHJpbWl0aXZlVmFsdWUgPSBkb3duY2FzdDxDU1NQcmltaXRpdmVW
YWx1ZT4odmFsdWUpOwogICAgICAgICBHcmlkTGVuZ3RoIHdvcmtpbmdMZW5ndGg7CiAgICAgICAg
IGlmICghY3JlYXRlR3JpZFRyYWNrQnJlYWR0aCgmcHJpbWl0aXZlVmFsdWUsIHN0YXRlLCB3b3Jr
aW5nTGVuZ3RoKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTE5NDEsNyArMTk0MSw3
IEBAIHN0YXRpYyBib29sIGNyZWF0ZUdyaWRUcmFja1NpemUoQ1NTVmFsdWUqIHZhbHVlLCBHcmlk
VHJhY2tTaXplJiB0cmFja1NpemUsIGNvbnN0CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0K
IAotICAgIENTU0Z1bmN0aW9uVmFsdWUmIG1pbm1heEZ1bmN0aW9uID0gZG93bmNhc3Q8Q1NTRnVu
Y3Rpb25WYWx1ZT4oKnZhbHVlKTsKKyAgICBDU1NGdW5jdGlvblZhbHVlJiBtaW5tYXhGdW5jdGlv
biA9IGRvd25jYXN0PENTU0Z1bmN0aW9uVmFsdWU+KHZhbHVlKTsKICAgICBDU1NWYWx1ZUxpc3Qq
IGFyZ3VtZW50cyA9IG1pbm1heEZ1bmN0aW9uLmFyZ3VtZW50cygpOwogICAgIEFTU0VSVF9XSVRI
X1NFQ1VSSVRZX0lNUExJQ0FUSU9OKGFyZ3VtZW50cy0+bGVuZ3RoKCkgPT0gMik7CiAgICAgR3Jp
ZExlbmd0aCBtaW5UcmFja0JyZWFkdGg7CkBAIC0xOTYxLDE2ICsxOTYxLDE0IEBAIHN0YXRpYyBi
b29sIGNyZWF0ZUdyaWRUcmFja0xpc3QoQ1NTVmFsdWUqIHZhbHVlLCBWZWN0b3I8R3JpZFRyYWNr
U2l6ZT4mIHRyYWNrU2l6CiAgICAgICAgIHJldHVybiBwcmltaXRpdmVWYWx1ZS5nZXRWYWx1ZUlE
KCkgPT0gQ1NTVmFsdWVOb25lOwogICAgIH0KIAotICAgIGlmICghdmFsdWUtPmlzVmFsdWVMaXN0
KCkpCisgICAgaWYgKCFpczxDU1NWYWx1ZUxpc3Q+KCp2YWx1ZSkpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKIAogICAgIHNpemVfdCBjdXJyZW50TmFtZWRHcmlkTGluZSA9IDA7Ci0gICAgZm9yIChD
U1NWYWx1ZUxpc3RJdGVyYXRvciBpID0gdmFsdWU7IGkuaGFzTW9yZSgpOyBpLmFkdmFuY2UoKSkg
ewotICAgICAgICBDU1NWYWx1ZSogY3VyclZhbHVlID0gaS52YWx1ZSgpOwotICAgICAgICBpZiAo
aXM8Q1NTR3JpZExpbmVOYW1lc1ZhbHVlPigqY3VyclZhbHVlKSkgewotICAgICAgICAgICAgQ1NT
R3JpZExpbmVOYW1lc1ZhbHVlJiBsaW5lTmFtZXNWYWx1ZSA9IGRvd25jYXN0PENTU0dyaWRMaW5l
TmFtZXNWYWx1ZT4oKmN1cnJWYWx1ZSk7Ci0gICAgICAgICAgICBmb3IgKENTU1ZhbHVlTGlzdEl0
ZXJhdG9yIGogPSAmbGluZU5hbWVzVmFsdWU7IGouaGFzTW9yZSgpOyBqLmFkdmFuY2UoKSkgewot
ICAgICAgICAgICAgICAgIFN0cmluZyBuYW1lZEdyaWRMaW5lID0gZG93bmNhc3Q8Q1NTUHJpbWl0
aXZlVmFsdWU+KGoudmFsdWUoKSktPmdldFN0cmluZ1ZhbHVlKCk7CisgICAgZm9yIChhdXRvJiBj
dXJyZW50VmFsdWUgOiBkb3duY2FzdDxDU1NWYWx1ZUxpc3Q+KCp2YWx1ZSkpIHsKKyAgICAgICAg
aWYgKGlzPENTU0dyaWRMaW5lTmFtZXNWYWx1ZT4oY3VycmVudFZhbHVlLmdldCgpKSkgeworICAg
ICAgICAgICAgZm9yIChhdXRvJiBjdXJyZW50R3JpZExpbmVOYW1lIDogZG93bmNhc3Q8Q1NTR3Jp
ZExpbmVOYW1lc1ZhbHVlPihjdXJyZW50VmFsdWUuZ2V0KCkpKSB7CisgICAgICAgICAgICAgICAg
U3RyaW5nIG5hbWVkR3JpZExpbmUgPSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oY3VycmVu
dEdyaWRMaW5lTmFtZS5nZXQoKSkuZ2V0U3RyaW5nVmFsdWUoKTsKICAgICAgICAgICAgICAgICBO
YW1lZEdyaWRMaW5lc01hcDo6QWRkUmVzdWx0IHJlc3VsdCA9IG5hbWVkR3JpZExpbmVzLmFkZChu
YW1lZEdyaWRMaW5lLCBWZWN0b3I8c2l6ZV90PigpKTsKICAgICAgICAgICAgICAgICByZXN1bHQu
aXRlcmF0b3ItPnZhbHVlLmFwcGVuZChjdXJyZW50TmFtZWRHcmlkTGluZSk7CiAgICAgICAgICAg
ICAgICAgT3JkZXJlZE5hbWVkR3JpZExpbmVzTWFwOjpBZGRSZXN1bHQgb3JkZXJlZFJlc3VsdCA9
IG9yZGVyZWROYW1lZEdyaWRMaW5lcy5hZGQoY3VycmVudE5hbWVkR3JpZExpbmUsIFZlY3RvcjxT
dHJpbmc+KCkpOwpAQCAtMTk4MSw3ICsxOTc5LDcgQEAgc3RhdGljIGJvb2wgY3JlYXRlR3JpZFRy
YWNrTGlzdChDU1NWYWx1ZSogdmFsdWUsIFZlY3RvcjxHcmlkVHJhY2tTaXplPiYgdHJhY2tTaXoK
IAogICAgICAgICArK2N1cnJlbnROYW1lZEdyaWRMaW5lOwogICAgICAgICBHcmlkVHJhY2tTaXpl
IHRyYWNrU2l6ZTsKLSAgICAgICAgaWYgKCFjcmVhdGVHcmlkVHJhY2tTaXplKGN1cnJWYWx1ZSwg
dHJhY2tTaXplLCBzdGF0ZSkpCisgICAgICAgIGlmICghY3JlYXRlR3JpZFRyYWNrU2l6ZShjdXJy
ZW50VmFsdWUuZ2V0KCksIHRyYWNrU2l6ZSwgc3RhdGUpKQogICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwogCiAgICAgICAgIHRyYWNrU2l6ZXMuYXBwZW5kKHRyYWNrU2l6ZSk7CkBAIC0yMDEwLDMz
ICsyMDA4LDMzIEBAIHN0YXRpYyBib29sIGNyZWF0ZUdyaWRQb3NpdGlvbihDU1NWYWx1ZSogdmFs
dWUsIEdyaWRQb3NpdGlvbiYgcG9zaXRpb24pCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0K
IAotICAgIENTU1ZhbHVlTGlzdCYgdmFsdWVzID0gZG93bmNhc3Q8Q1NTVmFsdWVMaXN0PigqdmFs
dWUpOworICAgIGF1dG8mIHZhbHVlcyA9IGRvd25jYXN0PENTU1ZhbHVlTGlzdD4oKnZhbHVlKTsK
ICAgICBBU1NFUlQodmFsdWVzLmxlbmd0aCgpKTsKIAogICAgIGJvb2wgaXNTcGFuUG9zaXRpb24g
PSBmYWxzZTsKICAgICBpbnQgZ3JpZExpbmVOdW1iZXIgPSAwOwogICAgIFN0cmluZyBncmlkTGlu
ZU5hbWU7CiAKLSAgICBDU1NWYWx1ZUxpc3RJdGVyYXRvciBpdCA9ICZ2YWx1ZXM7Ci0gICAgQ1NT
UHJpbWl0aXZlVmFsdWUqIGN1cnJlbnRWYWx1ZSA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVl
PihpdC52YWx1ZSgpKTsKKyAgICBhdXRvIGl0ID0gdmFsdWVzLmJlZ2luKCk7CisgICAgQ1NTUHJp
bWl0aXZlVmFsdWUqIGN1cnJlbnRWYWx1ZSA9ICZkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4o
aXQtPmdldCgpKTsKICAgICBpZiAoY3VycmVudFZhbHVlLT5nZXRWYWx1ZUlEKCkgPT0gQ1NTVmFs
dWVTcGFuKSB7CiAgICAgICAgIGlzU3BhblBvc2l0aW9uID0gdHJ1ZTsKLSAgICAgICAgaXQuYWR2
YW5jZSgpOwotICAgICAgICBjdXJyZW50VmFsdWUgPSBpdC5oYXNNb3JlKCkgPyBkb3duY2FzdDxD
U1NQcmltaXRpdmVWYWx1ZT4oaXQudmFsdWUoKSkgOiBudWxscHRyOworICAgICAgICArK2l0Owor
ICAgICAgICBjdXJyZW50VmFsdWUgPSBpdCAhPSB2YWx1ZXMuZW5kKCkgPyAmZG93bmNhc3Q8Q1NT
UHJpbWl0aXZlVmFsdWU+KGl0LT5nZXQoKSkgOiBudWxscHRyOwogICAgIH0KIAogICAgIGlmIChj
dXJyZW50VmFsdWUgJiYgY3VycmVudFZhbHVlLT5pc051bWJlcigpKSB7CiAgICAgICAgIGdyaWRM
aW5lTnVtYmVyID0gY3VycmVudFZhbHVlLT5nZXRJbnRWYWx1ZSgpOwotICAgICAgICBpdC5hZHZh
bmNlKCk7Ci0gICAgICAgIGN1cnJlbnRWYWx1ZSA9IGl0Lmhhc01vcmUoKSA/IGRvd25jYXN0PENT
U1ByaW1pdGl2ZVZhbHVlPihpdC52YWx1ZSgpKSA6IG51bGxwdHI7CisgICAgICAgICsraXQ7Cisg
ICAgICAgIGN1cnJlbnRWYWx1ZSA9IGl0ICE9IHZhbHVlcy5lbmQoKSA/ICZkb3duY2FzdDxDU1NQ
cmltaXRpdmVWYWx1ZT4oaXQtPmdldCgpKSA6IG51bGxwdHI7CiAgICAgfQogCiAgICAgaWYgKGN1
cnJlbnRWYWx1ZSAmJiBjdXJyZW50VmFsdWUtPmlzU3RyaW5nKCkpIHsKICAgICAgICAgZ3JpZExp
bmVOYW1lID0gY3VycmVudFZhbHVlLT5nZXRTdHJpbmdWYWx1ZSgpOwotICAgICAgICBpdC5hZHZh
bmNlKCk7CisgICAgICAgICsraXQ7CiAgICAgfQogCi0gICAgQVNTRVJUKCFpdC5oYXNNb3JlKCkp
OworICAgIEFTU0VSVChpdCAhPSB2YWx1ZXMuZW5kKCkpOwogICAgIGlmIChpc1NwYW5Qb3NpdGlv
bikKICAgICAgICAgcG9zaXRpb24uc2V0U3BhblBvc2l0aW9uKGdyaWRMaW5lTnVtYmVyID8gZ3Jp
ZExpbmVOdW1iZXIgOiAxLCBncmlkTGluZU5hbWUpOwogICAgIGVsc2UKQEAgLTIwNzMsMTYgKzIw
NzEsMTggQEAgU2Nyb2xsU25hcFBvaW50cyBTdHlsZVJlc29sdmVyOjpwYXJzZVNuYXBQb2ludHMo
Q1NTVmFsdWUmIHZhbHVlKQogICAgIH0KIAogICAgIHBvaW50cy5oYXNSZXBlYXQgPSBmYWxzZTsK
LSAgICBmb3IgKENTU1ZhbHVlTGlzdEl0ZXJhdG9yIGl0KCZ2YWx1ZSk7IGl0Lmhhc01vcmUoKTsg
aXQuYWR2YW5jZSgpKSB7Ci0gICAgICAgIGF1dG8mIGl0ZW1WYWx1ZSA9IGRvd25jYXN0PENTU1By
aW1pdGl2ZVZhbHVlPigqaXQudmFsdWUoKSk7Ci0gICAgICAgIGlmIChhdXRvKiBsZW5ndGhSZXBl
YXQgPSBpdGVtVmFsdWUuZ2V0TGVuZ3RoUmVwZWF0VmFsdWUoKSkgewotICAgICAgICAgICAgaWYg
KGF1dG8qIGludGVydmFsID0gbGVuZ3RoUmVwZWF0LT5pbnRlcnZhbCgpKSB7Ci0gICAgICAgICAg
ICAgICAgcG9pbnRzLnJlcGVhdE9mZnNldCA9IHBhcnNlU25hcENvb3JkaW5hdGUoKmludGVydmFs
KTsKLSAgICAgICAgICAgICAgICBwb2ludHMuaGFzUmVwZWF0ID0gdHJ1ZTsKLSAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICBpZiAoaXM8Q1NTVmFsdWVMaXN0Pih2YWx1ZSkpIHsKKyAgICAgICAg
Zm9yIChhdXRvJiBjdXJyZW50VmFsdWUgOiBkb3duY2FzdDxDU1NWYWx1ZUxpc3Q+KHZhbHVlKSkg
eworICAgICAgICAgICAgYXV0byYgaXRlbVZhbHVlID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFs
dWU+KGN1cnJlbnRWYWx1ZS5nZXQoKSk7CisgICAgICAgICAgICBpZiAoYXV0byogbGVuZ3RoUmVw
ZWF0ID0gaXRlbVZhbHVlLmdldExlbmd0aFJlcGVhdFZhbHVlKCkpIHsKKyAgICAgICAgICAgICAg
ICBpZiAoYXV0byogaW50ZXJ2YWwgPSBsZW5ndGhSZXBlYXQtPmludGVydmFsKCkpIHsKKyAgICAg
ICAgICAgICAgICAgICAgcG9pbnRzLnJlcGVhdE9mZnNldCA9IHBhcnNlU25hcENvb3JkaW5hdGUo
KmludGVydmFsKTsKKyAgICAgICAgICAgICAgICAgICAgcG9pbnRzLmhhc1JlcGVhdCA9IHRydWU7
CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIHBvaW50cy5vZmZzZXRzLmFwcGVuZChwYXJzZVNuYXBDb29yZGlu
YXRlKGl0ZW1WYWx1ZSkpOwogICAgICAgICB9Ci0gICAgICAgIHBvaW50cy5vZmZzZXRzLmFwcGVu
ZChwYXJzZVNuYXBDb29yZGluYXRlKGl0ZW1WYWx1ZSkpOwogICAgIH0KIAogICAgIHJldHVybiBw
b2ludHM7CkBAIC0yMTQ4LDM1ICsyMTQ4LDM0IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQ
cm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBpZiAoIXZhbHVlLT5pc1Zh
bHVlTGlzdCgpKQorICAgICAgICAgICAgaWYgKCFpczxDU1NWYWx1ZUxpc3Q+KCp2YWx1ZSkpCiAg
ICAgICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgICAgICBib29sIGRpZFNldCA9IGZhbHNl
OwotICAgICAgICAgICAgZm9yIChDU1NWYWx1ZUxpc3RJdGVyYXRvciBpID0gdmFsdWU7IGkuaGFz
TW9yZSgpOyBpLmFkdmFuY2UoKSkgewotICAgICAgICAgICAgICAgIENTU1ZhbHVlKiBpdGVtID0g
aS52YWx1ZSgpOwotICAgICAgICAgICAgICAgIGlmIChpczxDU1NJbWFnZUdlbmVyYXRvclZhbHVl
PigqaXRlbSkpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGlzPENTU0dyYWRpZW50VmFsdWU+
KCppdGVtKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldENvbnRl
bnQoU3R5bGVHZW5lcmF0ZWRJbWFnZTo6Y3JlYXRlKCpkb3duY2FzdDxDU1NHcmFkaWVudFZhbHVl
PigqaXRlbSkuZ3JhZGllbnRXaXRoU3R5bGVzUmVzb2x2ZWQodGhpcykpLCBkaWRTZXQpOworICAg
ICAgICAgICAgZm9yIChhdXRvJiBpdGVtIDogZG93bmNhc3Q8Q1NTVmFsdWVMaXN0PigqdmFsdWUp
KSB7CisgICAgICAgICAgICAgICAgaWYgKGlzPENTU0ltYWdlR2VuZXJhdG9yVmFsdWU+KGl0ZW0u
Z2V0KCkpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChpczxDU1NHcmFkaWVudFZhbHVlPihp
dGVtLmdldCgpKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldENv
bnRlbnQoU3R5bGVHZW5lcmF0ZWRJbWFnZTo6Y3JlYXRlKCpkb3duY2FzdDxDU1NHcmFkaWVudFZh
bHVlPihpdGVtLmdldCgpKS5ncmFkaWVudFdpdGhTdHlsZXNSZXNvbHZlZCh0aGlzKSksIGRpZFNl
dCk7CiAgICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0
YXRlLnN0eWxlKCktPnNldENvbnRlbnQoU3R5bGVHZW5lcmF0ZWRJbWFnZTo6Y3JlYXRlKGRvd25j
YXN0PENTU0ltYWdlR2VuZXJhdG9yVmFsdWU+KCppdGVtKSksIGRpZFNldCk7CisgICAgICAgICAg
ICAgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRDb250ZW50KFN0eWxlR2VuZXJhdGVkSW1h
Z2U6OmNyZWF0ZShkb3duY2FzdDxDU1NJbWFnZUdlbmVyYXRvclZhbHVlPihpdGVtLmdldCgpKSks
IGRpZFNldCk7CiAgICAgICAgICAgICAgICAgICAgIGRpZFNldCA9IHRydWU7CiAjaWYgRU5BQkxF
KENTU19JTUFHRV9TRVQpCi0gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpczxDU1NJbWFnZVNl
dFZhbHVlPigqaXRlbSkpIHsKLSAgICAgICAgICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0
Q29udGVudChzZXRPclBlbmRpbmdGcm9tVmFsdWUoQ1NTUHJvcGVydHlDb250ZW50LCBkb3duY2Fz
dDxDU1NJbWFnZVNldFZhbHVlPihpdGVtKSksIGRpZFNldCk7CisgICAgICAgICAgICAgICAgfSBl
bHNlIGlmIChpczxDU1NJbWFnZVNldFZhbHVlPihpdGVtLmdldCgpKSkgeworICAgICAgICAgICAg
ICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRDb250ZW50KHNldE9yUGVuZGluZ0Zyb21WYWx1ZShD
U1NQcm9wZXJ0eUNvbnRlbnQsIGRvd25jYXN0PENTU0ltYWdlU2V0VmFsdWU+KGl0ZW0uZ2V0KCkp
KSwgZGlkU2V0KTsKICAgICAgICAgICAgICAgICAgICAgZGlkU2V0ID0gdHJ1ZTsKICNlbmRpZgog
ICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgIGlmIChpczxDU1NJbWFnZVZhbHVl
PigqaXRlbSkpIHsKLSAgICAgICAgICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0Q29udGVu
dChjYWNoZWRPclBlbmRpbmdGcm9tVmFsdWUoQ1NTUHJvcGVydHlDb250ZW50LCBkb3duY2FzdDxD
U1NJbWFnZVZhbHVlPihpdGVtKSksIGRpZFNldCk7CisgICAgICAgICAgICAgICAgaWYgKGlzPENT
U0ltYWdlVmFsdWU+KGl0ZW0uZ2V0KCkpKSB7CisgICAgICAgICAgICAgICAgICAgIHN0YXRlLnN0
eWxlKCktPnNldENvbnRlbnQoY2FjaGVkT3JQZW5kaW5nRnJvbVZhbHVlKENTU1Byb3BlcnR5Q29u
dGVudCwgZG93bmNhc3Q8Q1NTSW1hZ2VWYWx1ZT4oaXRlbS5nZXQoKSkpLCBkaWRTZXQpOwogICAg
ICAgICAgICAgICAgICAgICBkaWRTZXQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICBjb250
aW51ZTsKICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICBpZiAoIWlzPENTU1By
aW1pdGl2ZVZhbHVlPigqaXRlbSkpCisgICAgICAgICAgICAgICAgaWYgKCFpczxDU1NQcmltaXRp
dmVWYWx1ZT4oaXRlbS5nZXQoKSkpCiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0g
ICAgICAgICAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUmIGNvbnRlbnRWYWx1ZSA9IGRvd25jYXN0
PENTU1ByaW1pdGl2ZVZhbHVlPigqaXRlbSk7CisgICAgICAgICAgICAgICAgYXV0byYgY29udGVu
dFZhbHVlID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KGl0ZW0uZ2V0KCkpOwogCiAgICAg
ICAgICAgICAgICAgaWYgKGNvbnRlbnRWYWx1ZS5pc1N0cmluZygpKSB7CiAgICAgICAgICAgICAg
ICAgICAgIHN0YXRlLnN0eWxlKCktPnNldENvbnRlbnQoY29udGVudFZhbHVlLmdldFN0cmluZ1Zh
bHVlKCkuaW1wbCgpLCBkaWRTZXQpOwpAQCAtMjQwMiwxNCArMjQwMSwxNCBAQCB2b2lkIFN0eWxl
UmVzb2x2ZXI6OmFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVl
KQogICAgICAgICBpZiAoaXNJbml0aWFsIHx8IHByaW1pdGl2ZVZhbHVlKSAvLyBpbml0aWFsIHwg
bm9uZQogICAgICAgICAgICAgcmV0dXJuIGlkID09IENTU1Byb3BlcnR5VGV4dFNoYWRvdyA/IHN0
YXRlLnN0eWxlKCktPnNldFRleHRTaGFkb3cobnVsbHB0cikgOiBzdGF0ZS5zdHlsZSgpLT5zZXRC
b3hTaGFkb3cobnVsbHB0cik7CiAKLSAgICAgICAgaWYgKCF2YWx1ZS0+aXNWYWx1ZUxpc3QoKSkK
KyAgICAgICAgaWYgKCFpczxDU1NWYWx1ZUxpc3Q+KCp2YWx1ZSkpCiAgICAgICAgICAgICByZXR1
cm47CiAKLSAgICAgICAgZm9yIChDU1NWYWx1ZUxpc3RJdGVyYXRvciBpID0gdmFsdWU7IGkuaGFz
TW9yZSgpOyBpLmFkdmFuY2UoKSkgewotICAgICAgICAgICAgQ1NTVmFsdWUqIGN1cnJWYWx1ZSA9
IGkudmFsdWUoKTsKLSAgICAgICAgICAgIGlmICghaXM8Q1NTU2hhZG93VmFsdWU+KCpjdXJyVmFs
dWUpKQorICAgICAgICBib29sIGlzRmlyc3RFbnRyeSA9IHRydWU7CisgICAgICAgIGZvciAoYXV0
byYgY3VycmVudFZhbHVlIDogZG93bmNhc3Q8Q1NTVmFsdWVMaXN0PigqdmFsdWUpKSB7CisgICAg
ICAgICAgICBpZiAoIWlzPENTU1NoYWRvd1ZhbHVlPihjdXJyZW50VmFsdWUuZ2V0KCkpKQogICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgQ1NTU2hhZG93VmFsdWUmIGl0ZW0g
PSBkb3duY2FzdDxDU1NTaGFkb3dWYWx1ZT4oKmN1cnJWYWx1ZSk7CisgICAgICAgICAgICBhdXRv
JiBpdGVtID0gZG93bmNhc3Q8Q1NTU2hhZG93VmFsdWU+KGN1cnJlbnRWYWx1ZS5nZXQoKSk7CiAg
ICAgICAgICAgICBpbnQgeCA9IGl0ZW0ueC0+Y29tcHV0ZUxlbmd0aDxpbnQ+KHN0YXRlLmNzc1Rv
TGVuZ3RoQ29udmVyc2lvbkRhdGEoKSk7CiAgICAgICAgICAgICBpbnQgeSA9IGl0ZW0ueS0+Y29t
cHV0ZUxlbmd0aDxpbnQ+KHN0YXRlLmNzc1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEoKSk7CiAgICAg
ICAgICAgICBpbnQgYmx1ciA9IGl0ZW0uYmx1ciA/IGl0ZW0uYmx1ci0+Y29tcHV0ZUxlbmd0aDxp
bnQ+KHN0YXRlLmNzc1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEoKSkgOiAwOwpAQCAtMjQyMyw5ICsy
NDIyLDExIEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUlE
IGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAKICAgICAgICAgICAgIGF1dG8gc2hhZG93RGF0YSA9IHN0
ZDo6bWFrZV91bmlxdWU8U2hhZG93RGF0YT4oSW50UG9pbnQoeCwgeSksIGJsdXIsIHNwcmVhZCwg
c2hhZG93U3R5bGUsIGlkID09IENTU1Byb3BlcnR5V2Via2l0Qm94U2hhZG93LCBjb2xvci5pc1Zh
bGlkKCkgPyBjb2xvciA6IENvbG9yOjp0cmFuc3BhcmVudCk7CiAgICAgICAgICAgICBpZiAoaWQg
PT0gQ1NTUHJvcGVydHlUZXh0U2hhZG93KQotICAgICAgICAgICAgICAgIHN0YXRlLnN0eWxlKCkt
PnNldFRleHRTaGFkb3coV1RGOjptb3ZlKHNoYWRvd0RhdGEpLCBpLmluZGV4KCkpOyAvLyBhZGQg
dG8gdGhlIGxpc3QgaWYgdGhpcyBpcyBub3QgdGhlIGZpcnN0IGVudHJ5CisgICAgICAgICAgICAg
ICAgc3RhdGUuc3R5bGUoKS0+c2V0VGV4dFNoYWRvdyhXVEY6Om1vdmUoc2hhZG93RGF0YSksICFp
c0ZpcnN0RW50cnkpOyAvLyBhZGQgdG8gdGhlIGxpc3QgaWYgdGhpcyBpcyBub3QgdGhlIGZpcnN0
IGVudHJ5CiAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+
c2V0Qm94U2hhZG93KFdURjo6bW92ZShzaGFkb3dEYXRhKSwgaS5pbmRleCgpKTsgLy8gYWRkIHRv
IHRoZSBsaXN0IGlmIHRoaXMgaXMgbm90IHRoZSBmaXJzdCBlbnRyeQorICAgICAgICAgICAgICAg
IHN0YXRlLnN0eWxlKCktPnNldEJveFNoYWRvdyhXVEY6Om1vdmUoc2hhZG93RGF0YSksICFpc0Zp
cnN0RW50cnkpOyAvLyBhZGQgdG8gdGhlIGxpc3QgaWYgdGhpcyBpcyBub3QgdGhlIGZpcnN0IGVu
dHJ5CisKKyAgICAgICAgICAgIGlzRmlyc3RFbnRyeSA9IGZhbHNlOwogICAgICAgICB9CiAgICAg
ICAgIHJldHVybjsKICAgICB9CkBAIC0yNzA1LDcgKzI3MDYsNyBAQCB2b2lkIFN0eWxlUmVzb2x2
ZXI6OmFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAg
IGNhc2UgQ1NTUHJvcGVydHlXZWJraXRHcmlkQXV0b0NvbHVtbnM6IHsKICAgICAgICAgSEFORExF
X0lOSEVSSVRfQU5EX0lOSVRJQUwoZ3JpZEF1dG9Db2x1bW5zLCBHcmlkQXV0b0NvbHVtbnMpOwog
ICAgICAgICBHcmlkVHJhY2tTaXplIHRyYWNrU2l6ZTsKLSAgICAgICAgaWYgKCFjcmVhdGVHcmlk
VHJhY2tTaXplKHZhbHVlLCB0cmFja1NpemUsIHN0YXRlKSkKKyAgICAgICAgaWYgKCFjcmVhdGVH
cmlkVHJhY2tTaXplKCp2YWx1ZSwgdHJhY2tTaXplLCBzdGF0ZSkpCiAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldEdyaWRBdXRvQ29sdW1ucyh0cmFja1NpemUp
OwogICAgICAgICByZXR1cm47CkBAIC0yNzEzLDcgKzI3MTQsNyBAQCB2b2lkIFN0eWxlUmVzb2x2
ZXI6OmFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAg
IGNhc2UgQ1NTUHJvcGVydHlXZWJraXRHcmlkQXV0b1Jvd3M6IHsKICAgICAgICAgSEFORExFX0lO
SEVSSVRfQU5EX0lOSVRJQUwoZ3JpZEF1dG9Sb3dzLCBHcmlkQXV0b1Jvd3MpOwogICAgICAgICBH
cmlkVHJhY2tTaXplIHRyYWNrU2l6ZTsKLSAgICAgICAgaWYgKCFjcmVhdGVHcmlkVHJhY2tTaXpl
KHZhbHVlLCB0cmFja1NpemUsIHN0YXRlKSkKKyAgICAgICAgaWYgKCFjcmVhdGVHcmlkVHJhY2tT
aXplKCp2YWx1ZSwgdHJhY2tTaXplLCBzdGF0ZSkpCiAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgIHN0YXRlLnN0eWxlKCktPnNldEdyaWRBdXRvUm93cyh0cmFja1NpemUpOwogICAgICAgICBy
ZXR1cm47CkBAIC0zMjEzLDMzICszMjE0LDMzIEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQ
cm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgfQogfQogCi1Q
YXNzUmVmUHRyPFN0eWxlSW1hZ2U+IFN0eWxlUmVzb2x2ZXI6OnN0eWxlSW1hZ2UoQ1NTUHJvcGVy
dHlJRCBwcm9wZXJ0eSwgQ1NTVmFsdWUqIHZhbHVlKQorUGFzc1JlZlB0cjxTdHlsZUltYWdlPiBT
dHlsZVJlc29sdmVyOjpzdHlsZUltYWdlKENTU1Byb3BlcnR5SUQgcHJvcGVydHksIENTU1ZhbHVl
JiB2YWx1ZSkKIHsKLSAgICBpZiAoaXM8Q1NTSW1hZ2VWYWx1ZT4oKnZhbHVlKSkKKyAgICBpZiAo
aXM8Q1NTSW1hZ2VWYWx1ZT4odmFsdWUpKQogICAgICAgICByZXR1cm4gY2FjaGVkT3JQZW5kaW5n
RnJvbVZhbHVlKHByb3BlcnR5LCBkb3duY2FzdDxDU1NJbWFnZVZhbHVlPih2YWx1ZSkpOwogCi0g
ICAgaWYgKGlzPENTU0ltYWdlR2VuZXJhdG9yVmFsdWU+KCp2YWx1ZSkpIHsKLSAgICAgICAgaWYg
KGlzPENTU0dyYWRpZW50VmFsdWU+KCp2YWx1ZSkpCi0gICAgICAgICAgICByZXR1cm4gZ2VuZXJh
dGVkT3JQZW5kaW5nRnJvbVZhbHVlKHByb3BlcnR5LCAqZG93bmNhc3Q8Q1NTR3JhZGllbnRWYWx1
ZT4oKnZhbHVlKS5ncmFkaWVudFdpdGhTdHlsZXNSZXNvbHZlZCh0aGlzKSk7Ci0gICAgICAgIHJl
dHVybiBnZW5lcmF0ZWRPclBlbmRpbmdGcm9tVmFsdWUocHJvcGVydHksIGRvd25jYXN0PENTU0lt
YWdlR2VuZXJhdG9yVmFsdWU+KCp2YWx1ZSkpOworICAgIGlmIChpczxDU1NJbWFnZUdlbmVyYXRv
clZhbHVlPih2YWx1ZSkpIHsKKyAgICAgICAgaWYgKGlzPENTU0dyYWRpZW50VmFsdWU+KHZhbHVl
KSkKKyAgICAgICAgICAgIHJldHVybiBnZW5lcmF0ZWRPclBlbmRpbmdGcm9tVmFsdWUocHJvcGVy
dHksICpkb3duY2FzdDxDU1NHcmFkaWVudFZhbHVlPih2YWx1ZSkuZ3JhZGllbnRXaXRoU3R5bGVz
UmVzb2x2ZWQodGhpcykpOworICAgICAgICByZXR1cm4gZ2VuZXJhdGVkT3JQZW5kaW5nRnJvbVZh
bHVlKHByb3BlcnR5LCBkb3duY2FzdDxDU1NJbWFnZUdlbmVyYXRvclZhbHVlPih2YWx1ZSkpOwog
ICAgIH0KIAogI2lmIEVOQUJMRShDU1NfSU1BR0VfU0VUKQotICAgIGlmIChpczxDU1NJbWFnZVNl
dFZhbHVlPigqdmFsdWUpKQorICAgIGlmIChpczxDU1NJbWFnZVNldFZhbHVlPih2YWx1ZSkpCiAg
ICAgICAgIHJldHVybiBzZXRPclBlbmRpbmdGcm9tVmFsdWUocHJvcGVydHksIGRvd25jYXN0PENT
U0ltYWdlU2V0VmFsdWU+KHZhbHVlKSk7CiAjZW5kaWYKIAotICAgIGlmIChpczxDU1NDdXJzb3JJ
bWFnZVZhbHVlPigqdmFsdWUpKQorICAgIGlmIChpczxDU1NDdXJzb3JJbWFnZVZhbHVlPih2YWx1
ZSkpCiAgICAgICAgIHJldHVybiBjdXJzb3JPclBlbmRpbmdGcm9tVmFsdWUocHJvcGVydHksIGRv
d25jYXN0PENTU0N1cnNvckltYWdlVmFsdWU+KHZhbHVlKSk7CiAKICAgICByZXR1cm4gbnVsbHB0
cjsKIH0KIAotUGFzc1JlZlB0cjxTdHlsZUltYWdlPiBTdHlsZVJlc29sdmVyOjpjYWNoZWRPclBl
bmRpbmdGcm9tVmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eSwgQ1NTSW1hZ2VWYWx1ZSogdmFs
dWUpCitQYXNzUmVmUHRyPFN0eWxlSW1hZ2U+IFN0eWxlUmVzb2x2ZXI6OmNhY2hlZE9yUGVuZGlu
Z0Zyb21WYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5LCBDU1NJbWFnZVZhbHVlJiB2YWx1ZSkK
IHsKLSAgICBSZWZQdHI8U3R5bGVJbWFnZT4gaW1hZ2UgPSB2YWx1ZS0+Y2FjaGVkT3JQZW5kaW5n
SW1hZ2UoKTsKKyAgICBSZWZQdHI8U3R5bGVJbWFnZT4gaW1hZ2UgPSB2YWx1ZS5jYWNoZWRPclBl
bmRpbmdJbWFnZSgpOwogICAgIGlmIChpbWFnZSAmJiBpbWFnZS0+aXNQZW5kaW5nSW1hZ2UoKSkK
LSAgICAgICAgbV9zdGF0ZS5wZW5kaW5nSW1hZ2VQcm9wZXJ0aWVzKCkuc2V0KHByb3BlcnR5LCB2
YWx1ZSk7CisgICAgICAgIG1fc3RhdGUucGVuZGluZ0ltYWdlUHJvcGVydGllcygpLnNldChwcm9w
ZXJ0eSwgJnZhbHVlKTsKICAgICByZXR1cm4gaW1hZ2UucmVsZWFzZSgpOwogfQogCkBAIC0zMjU4
LDIwICszMjU5LDIwIEBAIFBhc3NSZWZQdHI8U3R5bGVJbWFnZT4gU3R5bGVSZXNvbHZlcjo6Z2Vu
ZXJhdGVkT3JQZW5kaW5nRnJvbVZhbHVlKENTU1Byb3BlcnR5SUQKIH0KIAogI2lmIEVOQUJMRShD
U1NfSU1BR0VfU0VUKQotUGFzc1JlZlB0cjxTdHlsZUltYWdlPiBTdHlsZVJlc29sdmVyOjpzZXRP
clBlbmRpbmdGcm9tVmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eSwgQ1NTSW1hZ2VTZXRWYWx1
ZSogdmFsdWUpCitQYXNzUmVmUHRyPFN0eWxlSW1hZ2U+IFN0eWxlUmVzb2x2ZXI6OnNldE9yUGVu
ZGluZ0Zyb21WYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5LCBDU1NJbWFnZVNldFZhbHVlJiB2
YWx1ZSkKIHsKLSAgICBSZWZQdHI8U3R5bGVJbWFnZT4gaW1hZ2UgPSB2YWx1ZS0+Y2FjaGVkT3JQ
ZW5kaW5nSW1hZ2VTZXQoZG9jdW1lbnQoKSk7CisgICAgUmVmUHRyPFN0eWxlSW1hZ2U+IGltYWdl
ID0gdmFsdWUuY2FjaGVkT3JQZW5kaW5nSW1hZ2VTZXQoZG9jdW1lbnQoKSk7CiAgICAgaWYgKGlt
YWdlICYmIGltYWdlLT5pc1BlbmRpbmdJbWFnZSgpKQotICAgICAgICBtX3N0YXRlLnBlbmRpbmdJ
bWFnZVByb3BlcnRpZXMoKS5zZXQocHJvcGVydHksIHZhbHVlKTsKKyAgICAgICAgbV9zdGF0ZS5w
ZW5kaW5nSW1hZ2VQcm9wZXJ0aWVzKCkuc2V0KHByb3BlcnR5LCAmdmFsdWUpOwogICAgIHJldHVy
biBpbWFnZS5yZWxlYXNlKCk7CiB9CiAjZW5kaWYKIAotUGFzc1JlZlB0cjxTdHlsZUltYWdlPiBT
dHlsZVJlc29sdmVyOjpjdXJzb3JPclBlbmRpbmdGcm9tVmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9w
ZXJ0eSwgQ1NTQ3Vyc29ySW1hZ2VWYWx1ZSogdmFsdWUpCitQYXNzUmVmUHRyPFN0eWxlSW1hZ2U+
IFN0eWxlUmVzb2x2ZXI6OmN1cnNvck9yUGVuZGluZ0Zyb21WYWx1ZShDU1NQcm9wZXJ0eUlEIHBy
b3BlcnR5LCBDU1NDdXJzb3JJbWFnZVZhbHVlJiB2YWx1ZSkKIHsKLSAgICBSZWZQdHI8U3R5bGVJ
bWFnZT4gaW1hZ2UgPSB2YWx1ZS0+Y2FjaGVkT3JQZW5kaW5nSW1hZ2UoZG9jdW1lbnQoKSk7Cisg
ICAgUmVmUHRyPFN0eWxlSW1hZ2U+IGltYWdlID0gdmFsdWUuY2FjaGVkT3JQZW5kaW5nSW1hZ2Uo
ZG9jdW1lbnQoKSk7CiAgICAgaWYgKGltYWdlICYmIGltYWdlLT5pc1BlbmRpbmdJbWFnZSgpKQot
ICAgICAgICBtX3N0YXRlLnBlbmRpbmdJbWFnZVByb3BlcnRpZXMoKS5zZXQocHJvcGVydHksIHZh
bHVlKTsKKyAgICAgICAgbV9zdGF0ZS5wZW5kaW5nSW1hZ2VQcm9wZXJ0aWVzKCkuc2V0KHByb3Bl
cnR5LCAmdmFsdWUpOwogICAgIHJldHVybiBpbWFnZS5yZWxlYXNlKCk7CiB9CiAKQEAgLTM1MTgs
MTYgKzM1MTksMTUgQEAgYm9vbCBTdHlsZVJlc29sdmVyOjpjcmVhdGVGaWx0ZXJPcGVyYXRpb25z
KENTU1ZhbHVlKiBpblZhbHVlLCBGaWx0ZXJPcGVyYXRpb25zJgogICAgICAgICAgICAgcmV0dXJu
IHRydWU7CiAgICAgfQogICAgIAotICAgIGlmICghaW5WYWx1ZS0+aXNWYWx1ZUxpc3QoKSkKKyAg
ICBpZiAoIWlzPENTU1ZhbHVlTGlzdD4oKmluVmFsdWUpKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAKICAgICBGaWx0ZXJPcGVyYXRpb25zIG9wZXJhdGlvbnM7Ci0gICAgZm9yIChDU1NWYWx1ZUxp
c3RJdGVyYXRvciBpID0gaW5WYWx1ZTsgaS5oYXNNb3JlKCk7IGkuYWR2YW5jZSgpKSB7Ci0gICAg
ICAgIENTU1ZhbHVlKiBjdXJyVmFsdWUgPSBpLnZhbHVlKCk7Ci0gICAgICAgIGlmICghaXM8V2Vi
S2l0Q1NTRmlsdGVyVmFsdWU+KCpjdXJyVmFsdWUpKQorICAgIGZvciAoYXV0byYgY3VycmVudFZh
bHVlIDogZG93bmNhc3Q8Q1NTVmFsdWVMaXN0PigqaW5WYWx1ZSkpIHsKKyAgICAgICAgaWYgKCFp
czxXZWJLaXRDU1NGaWx0ZXJWYWx1ZT4oY3VycmVudFZhbHVlLmdldCgpKSkKICAgICAgICAgICAg
IGNvbnRpbnVlOwogCi0gICAgICAgIFdlYktpdENTU0ZpbHRlclZhbHVlJiBmaWx0ZXJWYWx1ZSA9
IGRvd25jYXN0PFdlYktpdENTU0ZpbHRlclZhbHVlPigqaS52YWx1ZSgpKTsKKyAgICAgICAgYXV0
byYgZmlsdGVyVmFsdWUgPSBkb3duY2FzdDxXZWJLaXRDU1NGaWx0ZXJWYWx1ZT4oY3VycmVudFZh
bHVlLmdldCgpKTsKICAgICAgICAgRmlsdGVyT3BlcmF0aW9uOjpPcGVyYXRpb25UeXBlIG9wZXJh
dGlvblR5cGUgPSBmaWx0ZXJPcGVyYXRpb25Gb3JUeXBlKGZpbHRlclZhbHVlLm9wZXJhdGlvblR5
cGUoKSk7CiAKICAgICAgICAgaWYgKG9wZXJhdGlvblR5cGUgPT0gRmlsdGVyT3BlcmF0aW9uOjpS
RUZFUkVOQ0UpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVy
LmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5oCmluZGV4IDI2NmQwYjA0Mzhi
MDAxYzFkNGU5YzVkOTg3MmM0ZWIxMjU3OWM2YjcuLjBlYTEwMjNkMmU5NTI3Y2UwZGY5NDNlYTY0
MTQ2NWExMTI1ZTcyNDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29s
dmVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuaApAQCAtNDQ3LDEz
ICs0NDcsMTMgQEAgcHVibGljOgogCiAgICAgc3RhdGljIFJlbmRlclN0eWxlKiBzdHlsZU5vdFll
dEF2YWlsYWJsZSgpIHsgcmV0dXJuIHNfc3R5bGVOb3RZZXRBdmFpbGFibGU7IH0KIAotICAgIFBh
c3NSZWZQdHI8U3R5bGVJbWFnZT4gc3R5bGVJbWFnZShDU1NQcm9wZXJ0eUlELCBDU1NWYWx1ZSop
OwotICAgIFBhc3NSZWZQdHI8U3R5bGVJbWFnZT4gY2FjaGVkT3JQZW5kaW5nRnJvbVZhbHVlKENT
U1Byb3BlcnR5SUQsIENTU0ltYWdlVmFsdWUqKTsKKyAgICBQYXNzUmVmUHRyPFN0eWxlSW1hZ2U+
IHN0eWxlSW1hZ2UoQ1NTUHJvcGVydHlJRCwgQ1NTVmFsdWUmKTsKKyAgICBQYXNzUmVmUHRyPFN0
eWxlSW1hZ2U+IGNhY2hlZE9yUGVuZGluZ0Zyb21WYWx1ZShDU1NQcm9wZXJ0eUlELCBDU1NJbWFn
ZVZhbHVlJik7CiAgICAgUGFzc1JlZlB0cjxTdHlsZUltYWdlPiBnZW5lcmF0ZWRPclBlbmRpbmdG
cm9tVmFsdWUoQ1NTUHJvcGVydHlJRCwgQ1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZSYpOwogI2lmIEVO
QUJMRShDU1NfSU1BR0VfU0VUKQotICAgIFBhc3NSZWZQdHI8U3R5bGVJbWFnZT4gc2V0T3JQZW5k
aW5nRnJvbVZhbHVlKENTU1Byb3BlcnR5SUQsIENTU0ltYWdlU2V0VmFsdWUqKTsKKyAgICBQYXNz
UmVmUHRyPFN0eWxlSW1hZ2U+IHNldE9yUGVuZGluZ0Zyb21WYWx1ZShDU1NQcm9wZXJ0eUlELCBD
U1NJbWFnZVNldFZhbHVlJik7CiAjZW5kaWYKLSAgICBQYXNzUmVmUHRyPFN0eWxlSW1hZ2U+IGN1
cnNvck9yUGVuZGluZ0Zyb21WYWx1ZShDU1NQcm9wZXJ0eUlELCBDU1NDdXJzb3JJbWFnZVZhbHVl
Kik7CisgICAgUGFzc1JlZlB0cjxTdHlsZUltYWdlPiBjdXJzb3JPclBlbmRpbmdGcm9tVmFsdWUo
Q1NTUHJvcGVydHlJRCwgQ1NTQ3Vyc29ySW1hZ2VWYWx1ZSYpOwogCiAgICAgYm9vbCBhcHBseVBy
b3BlcnR5VG9SZWd1bGFyU3R5bGUoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLmFwcGx5UHJvcGVy
dHlUb1JlZ3VsYXJTdHlsZSgpOyB9CiAgICAgYm9vbCBhcHBseVByb3BlcnR5VG9WaXNpdGVkTGlu
a1N0eWxlKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5hcHBseVByb3BlcnR5VG9WaXNpdGVkTGlu
a1N0eWxlKCk7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9UcmFuc2Zvcm1GdW5j
dGlvbnMuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL1RyYW5zZm9ybUZ1bmN0aW9ucy5jcHAKaW5k
ZXggNDUyOGRmY2I5MWI1ODQzYjNmOGJjNGM5MThmYTdiOGQ2YzJjMWE2NS4uMGJhOTEwODA1YTZi
ODg5YTgxY2VkOTlmNWZlYTA3NGJmNzQ1MDM4OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
Y3NzL1RyYW5zZm9ybUZ1bmN0aW9ucy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL1RyYW5z
Zm9ybUZ1bmN0aW9ucy5jcHAKQEAgLTgzLDE5ICs4MywxNyBAQCBzdGF0aWMgTGVuZ3RoIGNvbnZl
cnRUb0Zsb2F0TGVuZ3RoKGNvbnN0IENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSwg
Y29ucwogCiBib29sIHRyYW5zZm9ybXNGb3JWYWx1ZShDU1NWYWx1ZSYgdmFsdWUsIGNvbnN0IENT
U1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEmIGNvbnZlcnNpb25EYXRhLCBUcmFuc2Zvcm1PcGVyYXRp
b25zJiBvdXRPcGVyYXRpb25zKQogewotICAgIGlmICghdmFsdWUuaXNWYWx1ZUxpc3QoKSkgewor
ICAgIGlmICghaXM8Q1NTVmFsdWVMaXN0Pih2YWx1ZSkpIHsKICAgICAgICAgb3V0T3BlcmF0aW9u
cy5jbGVhcigpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCiAgICAgVHJhbnNmb3Jt
T3BlcmF0aW9ucyBvcGVyYXRpb25zOwotICAgIGZvciAoQ1NTVmFsdWVMaXN0SXRlcmF0b3IgaSA9
ICZ2YWx1ZTsgaS5oYXNNb3JlKCk7IGkuYWR2YW5jZSgpKSB7Ci0gICAgICAgIENTU1ZhbHVlJiBj
dXJyVmFsdWUgPSAqaS52YWx1ZSgpOwotCi0gICAgICAgIGlmICghaXM8V2ViS2l0Q1NTVHJhbnNm
b3JtVmFsdWU+KGN1cnJWYWx1ZSkpCisgICAgZm9yIChhdXRvJiBjdXJyZW50VmFsdWUgOiBkb3du
Y2FzdDxDU1NWYWx1ZUxpc3Q+KHZhbHVlKSkgeworICAgICAgICBpZiAoIWlzPFdlYktpdENTU1Ry
YW5zZm9ybVZhbHVlPihjdXJyZW50VmFsdWUuZ2V0KCkpKQogICAgICAgICAgICAgY29udGludWU7
CiAKLSAgICAgICAgV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWUmIHRyYW5zZm9ybVZhbHVlID0gZG93
bmNhc3Q8V2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU+KGN1cnJWYWx1ZSk7CisgICAgICAgIGF1dG8m
IHRyYW5zZm9ybVZhbHVlID0gZG93bmNhc3Q8V2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU+KGN1cnJl
bnRWYWx1ZS5nZXQoKSk7CiAgICAgICAgIGlmICghdHJhbnNmb3JtVmFsdWUubGVuZ3RoKCkpCiAg
ICAgICAgICAgICBjb250aW51ZTsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>240867</attachid>
            <date>2014-11-03 12:25:44 -0800</date>
            <delta_ts>2014-11-03 12:48:18 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-138285-20141103122554.patch</filename>
            <type>text/plain</type>
            <size>52563</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTc1NDgzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYjRmNTcwOTk5ZjE4NDZm
OGUzY2RjZDg2OTU5MThiYTM0MjJhMGY1Yy4uOWUyMWZmOTZmNGU0NTliM2U3ZTk5MDUyOTUxZTky
N2U5MjdmM2IzNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE3IEBACisyMDE0LTExLTAxICBDaHJp
cyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgU3VwcG9ydCBtb2Rlcm4gcmFu
Z2UgbG9vcHMgb3ZlciBDU1NWYWx1ZUxpc3QKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTEzODI4NQorCisgICAgICAgIFJldmlld2VkIGJ5IEFuZHJlYXMg
S2xpbmcuCisKKyAgICAgICAgQWRkIHN1cHBvcnQgZm9yIG1vZGVybiByYW5nZSBsb29wcyBvdmVy
IENTU1ZhbHVlTGlzdCBvYmplY3RzLgorICAgICAgICBQb3J0IHRoZSBjb2RlIGJhc2UgdG8gdXNp
bmcgcmFuZ2UgbG9vcHMgZm9yIENTU1ZhbHVlTGlzdCBvYmplY3RzIGFuZAorICAgICAgICBkcm9w
IHRoZSBDU1NWYWx1ZUxpc3RJbnNwZWN0b3IgLyBDU1NWYWx1ZUxpc3RJdGVyYXRvciBjbGFzc2Vz
IGFzIHRoZXkKKyAgICAgICAgYXJlIG5vIGxvbmdlciBuZWVkZWQuCisKKyAgICAgICAgTm8gbmV3
IHRlc3RzLCBubyBiZWhhdmlvciBjaGFuZ2UuCisKIDIwMTQtMTEtMDMgIEpvc2VwaCBQZWNvcmFy
byAgPHBlY29yYXJvQGFwcGxlLmNvbT4KIAogICAgICAgICBXZWIgSW5zcGVjdG9yOiBTaG93IFNl
bGVjdG9yJ3MgU3BlY2lmaWNpdHkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NU
b1N0eWxlTWFwLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NUb1N0eWxlTWFwLmNwcAppbmRl
eCAzMDYxOTBhOGMzNWYzNGE2ZjgxZDM5MWM4YmRmNzQ4OTRhMTgyYjRhLi40NGE1NzYyZTM1MmNl
NGVmODhjM2UwOTc2ODIyNzc2N2IwOTA0MDJjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9j
c3MvQ1NTVG9TdHlsZU1hcC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1RvU3R5bGVN
YXAuY3BwCkBAIC0zMCw2ICszMCw5IEBACiAKICNpbmNsdWRlICJBbmltYXRpb24uaCIKICNpbmNs
dWRlICJDU1NCb3JkZXJJbWFnZVNsaWNlVmFsdWUuaCIKKyNpbmNsdWRlICJDU1NJbWFnZUdlbmVy
YXRvclZhbHVlLmgiCisjaW5jbHVkZSAiQ1NTSW1hZ2VTZXRWYWx1ZS5oIgorI2luY2x1ZGUgIkNT
U0ltYWdlVmFsdWUuaCIKICNpbmNsdWRlICJDU1NQcmltaXRpdmVWYWx1ZS5oIgogI2luY2x1ZGUg
IkNTU1ByaW1pdGl2ZVZhbHVlTWFwcGluZ3MuaCIKICNpbmNsdWRlICJDU1NUaW1pbmdGdW5jdGlv
blZhbHVlLmgiCkBAIC02Miw3ICs2NSw3IEBAIGJvb2wgQ1NTVG9TdHlsZU1hcDo6dXNlU1ZHWm9v
bVJ1bGVzKCkgY29uc3QKICAgICByZXR1cm4gbV9yZXNvbHZlci0+dXNlU1ZHWm9vbVJ1bGVzKCk7
CiB9CiAKLVBhc3NSZWZQdHI8U3R5bGVJbWFnZT4gQ1NTVG9TdHlsZU1hcDo6c3R5bGVJbWFnZShD
U1NQcm9wZXJ0eUlEIHByb3BlcnR5SWQsIENTU1ZhbHVlKiB2YWx1ZSkKK1Bhc3NSZWZQdHI8U3R5
bGVJbWFnZT4gQ1NTVG9TdHlsZU1hcDo6c3R5bGVJbWFnZShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5
SWQsIENTU1ZhbHVlJiB2YWx1ZSkKIHsKICAgICByZXR1cm4gbV9yZXNvbHZlci0+c3R5bGVJbWFn
ZShwcm9wZXJ0eUlkLCB2YWx1ZSk7CiB9CkBAIC0xNTYsNyArMTU5LDcgQEAgdm9pZCBDU1NUb1N0
eWxlTWFwOjptYXBGaWxsSW1hZ2UoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eSwgRmlsbExheWVyKiBs
YXllciwgQ1NTVmEKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGxheWVyLT5zZXRJbWFn
ZShzdHlsZUltYWdlKHByb3BlcnR5LCB2YWx1ZSkpOworICAgIGxheWVyLT5zZXRJbWFnZShzdHls
ZUltYWdlKHByb3BlcnR5LCAqdmFsdWUpKTsKIH0KIAogdm9pZCBDU1NUb1N0eWxlTWFwOjptYXBG
aWxsUmVwZWF0WChDU1NQcm9wZXJ0eUlELCBGaWxsTGF5ZXIqIGxheWVyLCBDU1NWYWx1ZSogdmFs
dWUpCkBAIC0zMjIsMzIgKzMyNSwzMCBAQCB2b2lkIENTU1RvU3R5bGVNYXA6Om1hcEZpbGxNYXNr
U291cmNlVHlwZShDU1NQcm9wZXJ0eUlELCBGaWxsTGF5ZXIqIGxheWVyLCBDU1NWYQogICAgIGxh
eWVyLT5zZXRNYXNrU291cmNlVHlwZSh0eXBlKTsKIH0KIAotdm9pZCBDU1NUb1N0eWxlTWFwOjpt
YXBBbmltYXRpb25EZWxheShBbmltYXRpb24qIGFuaW1hdGlvbiwgQ1NTVmFsdWUqIHZhbHVlKQor
dm9pZCBDU1NUb1N0eWxlTWFwOjptYXBBbmltYXRpb25EZWxheShBbmltYXRpb24qIGFuaW1hdGlv
biwgQ1NTVmFsdWUmIHZhbHVlKQogewotICAgIGlmICh2YWx1ZS0+aXNJbml0aWFsVmFsdWUoKSkg
eworICAgIGlmICh2YWx1ZS5pc0luaXRpYWxWYWx1ZSgpKSB7CiAgICAgICAgIGFuaW1hdGlvbi0+
c2V0RGVsYXkoQW5pbWF0aW9uOjppbml0aWFsQW5pbWF0aW9uRGVsYXkoKSk7CiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAKLSAgICBpZiAoIWlzPENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpKQor
ICAgIGlmICghaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVlKSkKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgQ1NTUHJpbWl0aXZlVmFsdWUmIHByaW1pdGl2ZVZhbHVlID0gZG93bmNhc3Q8Q1NTUHJp
bWl0aXZlVmFsdWU+KCp2YWx1ZSk7Ci0gICAgYW5pbWF0aW9uLT5zZXREZWxheShwcmltaXRpdmVW
YWx1ZS5jb21wdXRlVGltZTxkb3VibGUsIENTU1ByaW1pdGl2ZVZhbHVlOjpTZWNvbmRzPigpKTsK
KyAgICBhbmltYXRpb24tPnNldERlbGF5KGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPih2YWx1
ZSkuY29tcHV0ZVRpbWU8ZG91YmxlLCBDU1NQcmltaXRpdmVWYWx1ZTo6U2Vjb25kcz4oKSk7CiB9
CiAKLXZvaWQgQ1NTVG9TdHlsZU1hcDo6bWFwQW5pbWF0aW9uRGlyZWN0aW9uKEFuaW1hdGlvbiog
bGF5ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKK3ZvaWQgQ1NTVG9TdHlsZU1hcDo6bWFwQW5pbWF0aW9u
RGlyZWN0aW9uKEFuaW1hdGlvbiogbGF5ZXIsIENTU1ZhbHVlJiB2YWx1ZSkKIHsKLSAgICBpZiAo
dmFsdWUtPmlzSW5pdGlhbFZhbHVlKCkpIHsKKyAgICBpZiAodmFsdWUuaXNJbml0aWFsVmFsdWUo
KSkgewogICAgICAgICBsYXllci0+c2V0RGlyZWN0aW9uKEFuaW1hdGlvbjo6aW5pdGlhbEFuaW1h
dGlvbkRpcmVjdGlvbigpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmICghaXM8
Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSkpCisgICAgaWYgKCFpczxDU1NQcmltaXRpdmVWYWx1
ZT4odmFsdWUpKQogICAgICAgICByZXR1cm47CiAKLSAgICBDU1NQcmltaXRpdmVWYWx1ZSYgcHJp
bWl0aXZlVmFsdWUgPSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlKTsKLSAgICBz
d2l0Y2ggKHByaW1pdGl2ZVZhbHVlLmdldFZhbHVlSUQoKSkgeworICAgIHN3aXRjaCAoZG93bmNh
c3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVlKS5nZXRWYWx1ZUlEKCkpIHsKICAgICBjYXNlIENT
U1ZhbHVlTm9ybWFsOgogICAgICAgICBsYXllci0+c2V0RGlyZWN0aW9uKEFuaW1hdGlvbjo6QW5p
bWF0aW9uRGlyZWN0aW9uTm9ybWFsKTsKICAgICAgICAgYnJlYWs7CkBAIC0zNjUsMzIgKzM2Niwz
MCBAQCB2b2lkIENTU1RvU3R5bGVNYXA6Om1hcEFuaW1hdGlvbkRpcmVjdGlvbihBbmltYXRpb24q
IGxheWVyLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgfQogfQogCi12b2lkIENTU1RvU3R5bGVNYXA6
Om1hcEFuaW1hdGlvbkR1cmF0aW9uKEFuaW1hdGlvbiogYW5pbWF0aW9uLCBDU1NWYWx1ZSogdmFs
dWUpCit2b2lkIENTU1RvU3R5bGVNYXA6Om1hcEFuaW1hdGlvbkR1cmF0aW9uKEFuaW1hdGlvbiog
YW5pbWF0aW9uLCBDU1NWYWx1ZSYgdmFsdWUpCiB7Ci0gICAgaWYgKHZhbHVlLT5pc0luaXRpYWxW
YWx1ZSgpKSB7CisgICAgaWYgKHZhbHVlLmlzSW5pdGlhbFZhbHVlKCkpIHsKICAgICAgICAgYW5p
bWF0aW9uLT5zZXREdXJhdGlvbihBbmltYXRpb246OmluaXRpYWxBbmltYXRpb25EdXJhdGlvbigp
KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmICghaXM8Q1NTUHJpbWl0aXZlVmFs
dWU+KCp2YWx1ZSkpCisgICAgaWYgKCFpczxDU1NQcmltaXRpdmVWYWx1ZT4odmFsdWUpKQogICAg
ICAgICByZXR1cm47CiAKLSAgICBDU1NQcmltaXRpdmVWYWx1ZSYgcHJpbWl0aXZlVmFsdWUgPSBk
b3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlKTsKLSAgICBhbmltYXRpb24tPnNldER1
cmF0aW9uKHByaW1pdGl2ZVZhbHVlLmNvbXB1dGVUaW1lPGRvdWJsZSwgQ1NTUHJpbWl0aXZlVmFs
dWU6OlNlY29uZHM+KCkpOworICAgIGFuaW1hdGlvbi0+c2V0RHVyYXRpb24oZG93bmNhc3Q8Q1NT
UHJpbWl0aXZlVmFsdWU+KHZhbHVlKS5jb21wdXRlVGltZTxkb3VibGUsIENTU1ByaW1pdGl2ZVZh
bHVlOjpTZWNvbmRzPigpKTsKIH0KIAotdm9pZCBDU1NUb1N0eWxlTWFwOjptYXBBbmltYXRpb25G
aWxsTW9kZShBbmltYXRpb24qIGxheWVyLCBDU1NWYWx1ZSogdmFsdWUpCit2b2lkIENTU1RvU3R5
bGVNYXA6Om1hcEFuaW1hdGlvbkZpbGxNb2RlKEFuaW1hdGlvbiogbGF5ZXIsIENTU1ZhbHVlJiB2
YWx1ZSkKIHsKLSAgICBpZiAodmFsdWUtPmlzSW5pdGlhbFZhbHVlKCkpIHsKKyAgICBpZiAodmFs
dWUuaXNJbml0aWFsVmFsdWUoKSkgewogICAgICAgICBsYXllci0+c2V0RmlsbE1vZGUoQW5pbWF0
aW9uOjppbml0aWFsQW5pbWF0aW9uRmlsbE1vZGUoKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9
CiAKLSAgICBpZiAoIWlzPENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpKQorICAgIGlmICghaXM8
Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVlKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgQ1NTUHJp
bWl0aXZlVmFsdWUmIHByaW1pdGl2ZVZhbHVlID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+
KCp2YWx1ZSk7Ci0gICAgc3dpdGNoIChwcmltaXRpdmVWYWx1ZS5nZXRWYWx1ZUlEKCkpIHsKKyAg
ICBzd2l0Y2ggKGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPih2YWx1ZSkuZ2V0VmFsdWVJRCgp
KSB7CiAgICAgY2FzZSBDU1NWYWx1ZU5vbmU6CiAgICAgICAgIGxheWVyLT5zZXRGaWxsTW9kZShB
bmltYXRpb25GaWxsTW9kZU5vbmUpOwogICAgICAgICBicmVhazsKQEAgLTQwOCw2NyArNDA3LDY2
IEBAIHZvaWQgQ1NTVG9TdHlsZU1hcDo6bWFwQW5pbWF0aW9uRmlsbE1vZGUoQW5pbWF0aW9uKiBs
YXllciwgQ1NTVmFsdWUqIHZhbHVlKQogICAgIH0KIH0KIAotdm9pZCBDU1NUb1N0eWxlTWFwOjpt
YXBBbmltYXRpb25JdGVyYXRpb25Db3VudChBbmltYXRpb24qIGFuaW1hdGlvbiwgQ1NTVmFsdWUq
IHZhbHVlKQordm9pZCBDU1NUb1N0eWxlTWFwOjptYXBBbmltYXRpb25JdGVyYXRpb25Db3VudChB
bmltYXRpb24qIGFuaW1hdGlvbiwgQ1NTVmFsdWUmIHZhbHVlKQogewotICAgIGlmICh2YWx1ZS0+
aXNJbml0aWFsVmFsdWUoKSkgeworICAgIGlmICh2YWx1ZS5pc0luaXRpYWxWYWx1ZSgpKSB7CiAg
ICAgICAgIGFuaW1hdGlvbi0+c2V0SXRlcmF0aW9uQ291bnQoQW5pbWF0aW9uOjppbml0aWFsQW5p
bWF0aW9uSXRlcmF0aW9uQ291bnQoKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBp
ZiAoIWlzPENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpKQorICAgIGlmICghaXM8Q1NTUHJpbWl0
aXZlVmFsdWU+KHZhbHVlKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgQ1NTUHJpbWl0aXZlVmFs
dWUmIHByaW1pdGl2ZVZhbHVlID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSk7
CisgICAgYXV0byYgcHJpbWl0aXZlVmFsdWUgPSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4o
dmFsdWUpOwogICAgIGlmIChwcmltaXRpdmVWYWx1ZS5nZXRWYWx1ZUlEKCkgPT0gQ1NTVmFsdWVJ
bmZpbml0ZSkKICAgICAgICAgYW5pbWF0aW9uLT5zZXRJdGVyYXRpb25Db3VudChBbmltYXRpb246
Okl0ZXJhdGlvbkNvdW50SW5maW5pdGUpOwogICAgIGVsc2UKICAgICAgICAgYW5pbWF0aW9uLT5z
ZXRJdGVyYXRpb25Db3VudChwcmltaXRpdmVWYWx1ZS5nZXRGbG9hdFZhbHVlKCkpOwogfQogCi12
b2lkIENTU1RvU3R5bGVNYXA6Om1hcEFuaW1hdGlvbk5hbWUoQW5pbWF0aW9uKiBsYXllciwgQ1NT
VmFsdWUqIHZhbHVlKQordm9pZCBDU1NUb1N0eWxlTWFwOjptYXBBbmltYXRpb25OYW1lKEFuaW1h
dGlvbiogbGF5ZXIsIENTU1ZhbHVlJiB2YWx1ZSkKIHsKLSAgICBpZiAodmFsdWUtPmlzSW5pdGlh
bFZhbHVlKCkpIHsKKyAgICBpZiAodmFsdWUuaXNJbml0aWFsVmFsdWUoKSkgewogICAgICAgICBs
YXllci0+c2V0TmFtZShBbmltYXRpb246OmluaXRpYWxBbmltYXRpb25OYW1lKCkpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKCFpczxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVl
KSkKKyAgICBpZiAoIWlzPENTU1ByaW1pdGl2ZVZhbHVlPih2YWx1ZSkpCiAgICAgICAgIHJldHVy
bjsKIAotICAgIENTU1ByaW1pdGl2ZVZhbHVlJiBwcmltaXRpdmVWYWx1ZSA9IGRvd25jYXN0PENT
U1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpOworICAgIGF1dG8mIHByaW1pdGl2ZVZhbHVlID0gZG93
bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVlKTsKICAgICBpZiAocHJpbWl0aXZlVmFsdWUu
Z2V0VmFsdWVJRCgpID09IENTU1ZhbHVlTm9uZSkKICAgICAgICAgbGF5ZXItPnNldElzTm9uZUFu
aW1hdGlvbih0cnVlKTsKICAgICBlbHNlCiAgICAgICAgIGxheWVyLT5zZXROYW1lKHByaW1pdGl2
ZVZhbHVlLmdldFN0cmluZ1ZhbHVlKCkpOwogfQogCi12b2lkIENTU1RvU3R5bGVNYXA6Om1hcEFu
aW1hdGlvblBsYXlTdGF0ZShBbmltYXRpb24qIGxheWVyLCBDU1NWYWx1ZSogdmFsdWUpCit2b2lk
IENTU1RvU3R5bGVNYXA6Om1hcEFuaW1hdGlvblBsYXlTdGF0ZShBbmltYXRpb24qIGxheWVyLCBD
U1NWYWx1ZSYgdmFsdWUpCiB7Ci0gICAgaWYgKHZhbHVlLT5pc0luaXRpYWxWYWx1ZSgpKSB7Cisg
ICAgaWYgKHZhbHVlLmlzSW5pdGlhbFZhbHVlKCkpIHsKICAgICAgICAgbGF5ZXItPnNldFBsYXlT
dGF0ZShBbmltYXRpb246OmluaXRpYWxBbmltYXRpb25QbGF5U3RhdGUoKSk7CiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAKLSAgICBpZiAoIWlzPENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpKQor
ICAgIGlmICghaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVlKSkKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgQ1NTUHJpbWl0aXZlVmFsdWUmIHByaW1pdGl2ZVZhbHVlID0gZG93bmNhc3Q8Q1NTUHJp
bWl0aXZlVmFsdWU+KCp2YWx1ZSk7Ci0gICAgRUFuaW1QbGF5U3RhdGUgcGxheVN0YXRlID0gKHBy
aW1pdGl2ZVZhbHVlLmdldFZhbHVlSUQoKSA9PSBDU1NWYWx1ZVBhdXNlZCkgPyBBbmltUGxheVN0
YXRlUGF1c2VkIDogQW5pbVBsYXlTdGF0ZVBsYXlpbmc7CisgICAgRUFuaW1QbGF5U3RhdGUgcGxh
eVN0YXRlID0gKGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPih2YWx1ZSkuZ2V0VmFsdWVJRCgp
ID09IENTU1ZhbHVlUGF1c2VkKSA/IEFuaW1QbGF5U3RhdGVQYXVzZWQgOiBBbmltUGxheVN0YXRl
UGxheWluZzsKICAgICBsYXllci0+c2V0UGxheVN0YXRlKHBsYXlTdGF0ZSk7CiB9CiAKLXZvaWQg
Q1NTVG9TdHlsZU1hcDo6bWFwQW5pbWF0aW9uUHJvcGVydHkoQW5pbWF0aW9uKiBhbmltYXRpb24s
IENTU1ZhbHVlKiB2YWx1ZSkKK3ZvaWQgQ1NTVG9TdHlsZU1hcDo6bWFwQW5pbWF0aW9uUHJvcGVy
dHkoQW5pbWF0aW9uKiBhbmltYXRpb24sIENTU1ZhbHVlJiB2YWx1ZSkKIHsKLSAgICBpZiAodmFs
dWUtPmlzSW5pdGlhbFZhbHVlKCkpIHsKKyAgICBpZiAodmFsdWUuaXNJbml0aWFsVmFsdWUoKSkg
ewogICAgICAgICBhbmltYXRpb24tPnNldEFuaW1hdGlvbk1vZGUoQW5pbWF0aW9uOjpBbmltYXRl
QWxsKTsKICAgICAgICAgYW5pbWF0aW9uLT5zZXRQcm9wZXJ0eShDU1NQcm9wZXJ0eUludmFsaWQp
OwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKCFpczxDU1NQcmltaXRpdmVWYWx1
ZT4oKnZhbHVlKSkKKyAgICBpZiAoIWlzPENTU1ByaW1pdGl2ZVZhbHVlPih2YWx1ZSkpCiAgICAg
ICAgIHJldHVybjsKIAotICAgIENTU1ByaW1pdGl2ZVZhbHVlJiBwcmltaXRpdmVWYWx1ZSA9IGRv
d25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpOworICAgIGF1dG8mIHByaW1pdGl2ZVZh
bHVlID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVlKTsKICAgICBpZiAocHJpbWl0
aXZlVmFsdWUuZ2V0VmFsdWVJRCgpID09IENTU1ZhbHVlQWxsKSB7CiAgICAgICAgIGFuaW1hdGlv
bi0+c2V0QW5pbWF0aW9uTW9kZShBbmltYXRpb246OkFuaW1hdGVBbGwpOwogICAgICAgICBhbmlt
YXRpb24tPnNldFByb3BlcnR5KENTU1Byb3BlcnR5SW52YWxpZCk7CkBAIC00ODEsMTYgKzQ3OSwx
NSBAQCB2b2lkIENTU1RvU3R5bGVNYXA6Om1hcEFuaW1hdGlvblByb3BlcnR5KEFuaW1hdGlvbiog
YW5pbWF0aW9uLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgfQogfQogCi12b2lkIENTU1RvU3R5bGVN
YXA6Om1hcEFuaW1hdGlvblRpbWluZ0Z1bmN0aW9uKEFuaW1hdGlvbiogYW5pbWF0aW9uLCBDU1NW
YWx1ZSogdmFsdWUpCit2b2lkIENTU1RvU3R5bGVNYXA6Om1hcEFuaW1hdGlvblRpbWluZ0Z1bmN0
aW9uKEFuaW1hdGlvbiogYW5pbWF0aW9uLCBDU1NWYWx1ZSYgdmFsdWUpCiB7Ci0gICAgaWYgKHZh
bHVlLT5pc0luaXRpYWxWYWx1ZSgpKSB7CisgICAgaWYgKHZhbHVlLmlzSW5pdGlhbFZhbHVlKCkp
IHsKICAgICAgICAgYW5pbWF0aW9uLT5zZXRUaW1pbmdGdW5jdGlvbihBbmltYXRpb246OmluaXRp
YWxBbmltYXRpb25UaW1pbmdGdW5jdGlvbigpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAot
ICAgIGlmIChpczxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlKSkgewotICAgICAgICBDU1NQcmlt
aXRpdmVWYWx1ZSYgcHJpbWl0aXZlVmFsdWUgPSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4o
KnZhbHVlKTsKLSAgICAgICAgc3dpdGNoIChwcmltaXRpdmVWYWx1ZS5nZXRWYWx1ZUlEKCkpIHsK
KyAgICBpZiAoaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVlKSkgeworICAgICAgICBzd2l0Y2gg
KGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPih2YWx1ZSkuZ2V0VmFsdWVJRCgpKSB7CiAgICAg
ICAgIGNhc2UgQ1NTVmFsdWVMaW5lYXI6CiAgICAgICAgICAgICBhbmltYXRpb24tPnNldFRpbWlu
Z0Z1bmN0aW9uKExpbmVhclRpbWluZ0Z1bmN0aW9uOjpjcmVhdGUoKSk7CiAgICAgICAgICAgICBi
cmVhazsKQEAgLTUxOCwxMSArNTE1LDExIEBAIHZvaWQgQ1NTVG9TdHlsZU1hcDo6bWFwQW5pbWF0
aW9uVGltaW5nRnVuY3Rpb24oQW5pbWF0aW9uKiBhbmltYXRpb24sIENTU1ZhbHVlKiB2CiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpZiAoaXM8Q1NTQ3ViaWNCZXppZXJUaW1pbmdGdW5j
dGlvblZhbHVlPigqdmFsdWUpKSB7Ci0gICAgICAgIENTU0N1YmljQmV6aWVyVGltaW5nRnVuY3Rp
b25WYWx1ZSYgY3ViaWNUaW1pbmdGdW5jdGlvbiA9IGRvd25jYXN0PENTU0N1YmljQmV6aWVyVGlt
aW5nRnVuY3Rpb25WYWx1ZT4oKnZhbHVlKTsKKyAgICBpZiAoaXM8Q1NTQ3ViaWNCZXppZXJUaW1p
bmdGdW5jdGlvblZhbHVlPih2YWx1ZSkpIHsKKyAgICAgICAgYXV0byYgY3ViaWNUaW1pbmdGdW5j
dGlvbiA9IGRvd25jYXN0PENTU0N1YmljQmV6aWVyVGltaW5nRnVuY3Rpb25WYWx1ZT4odmFsdWUp
OwogICAgICAgICBhbmltYXRpb24tPnNldFRpbWluZ0Z1bmN0aW9uKEN1YmljQmV6aWVyVGltaW5n
RnVuY3Rpb246OmNyZWF0ZShjdWJpY1RpbWluZ0Z1bmN0aW9uLngxKCksIGN1YmljVGltaW5nRnVu
Y3Rpb24ueTEoKSwgY3ViaWNUaW1pbmdGdW5jdGlvbi54MigpLCBjdWJpY1RpbWluZ0Z1bmN0aW9u
LnkyKCkpKTsKLSAgICB9IGVsc2UgaWYgKGlzPENTU1N0ZXBzVGltaW5nRnVuY3Rpb25WYWx1ZT4o
KnZhbHVlKSkgewotICAgICAgICBDU1NTdGVwc1RpbWluZ0Z1bmN0aW9uVmFsdWUmIHN0ZXBzVGlt
aW5nRnVuY3Rpb24gPSBkb3duY2FzdDxDU1NTdGVwc1RpbWluZ0Z1bmN0aW9uVmFsdWU+KCp2YWx1
ZSk7CisgICAgfSBlbHNlIGlmIChpczxDU1NTdGVwc1RpbWluZ0Z1bmN0aW9uVmFsdWU+KHZhbHVl
KSkgeworICAgICAgICBhdXRvJiBzdGVwc1RpbWluZ0Z1bmN0aW9uID0gZG93bmNhc3Q8Q1NTU3Rl
cHNUaW1pbmdGdW5jdGlvblZhbHVlPih2YWx1ZSk7CiAgICAgICAgIGFuaW1hdGlvbi0+c2V0VGlt
aW5nRnVuY3Rpb24oU3RlcHNUaW1pbmdGdW5jdGlvbjo6Y3JlYXRlKHN0ZXBzVGltaW5nRnVuY3Rp
b24ubnVtYmVyT2ZTdGVwcygpLCBzdGVwc1RpbWluZ0Z1bmN0aW9uLnN0ZXBBdFN0YXJ0KCkpKTsK
ICAgICB9CiB9CkBAIC01NDUsMzMgKzU0MiwzMSBAQCB2b2lkIENTU1RvU3R5bGVNYXA6Om1hcE5p
bmVQaWVjZUltYWdlKENTU1Byb3BlcnR5SUQgcHJvcGVydHksIENTU1ZhbHVlKiB2YWx1ZSwgTgog
ICAgIGVsc2UKICAgICAgICAgaW1hZ2VQcm9wZXJ0eSA9IHByb3BlcnR5OwogCi0gICAgZm9yICh1
bnNpZ25lZCBpID0gMCA7IGkgPCBib3JkZXJJbWFnZS5sZW5ndGgoKTsgKytpKSB7Ci0gICAgICAg
IENTU1ZhbHVlKiBjdXJyZW50ID0gYm9yZGVySW1hZ2UuaXRlbShpKTsKLQotICAgICAgICBpZiAo
Y3VycmVudC0+aXNJbWFnZVZhbHVlKCkgfHwgY3VycmVudC0+aXNJbWFnZUdlbmVyYXRvclZhbHVl
KCkKKyAgICBmb3IgKGF1dG8mIGN1cnJlbnQgOiBib3JkZXJJbWFnZSkgeworICAgICAgICBpZiAo
aXM8Q1NTSW1hZ2VWYWx1ZT4oY3VycmVudC5nZXQoKSkgfHwgaXM8Q1NTSW1hZ2VHZW5lcmF0b3JW
YWx1ZT4oY3VycmVudC5nZXQoKSkKICNpZiBFTkFCTEUoQ1NTX0lNQUdFX1NFVCkKLSAgICAgICAg
ICAgIHx8IGN1cnJlbnQtPmlzSW1hZ2VTZXRWYWx1ZSgpCisgICAgICAgICAgICB8fCBpczxDU1NJ
bWFnZVNldFZhbHVlPihjdXJyZW50LmdldCgpKQogI2VuZGlmCiAgICAgICAgICAgICApCi0gICAg
ICAgICAgICBpbWFnZS5zZXRJbWFnZShzdHlsZUltYWdlKGltYWdlUHJvcGVydHksIGN1cnJlbnQp
KTsKLSAgICAgICAgZWxzZSBpZiAoY3VycmVudC0+aXNCb3JkZXJJbWFnZVNsaWNlVmFsdWUoKSkK
LSAgICAgICAgICAgIG1hcE5pbmVQaWVjZUltYWdlU2xpY2UoY3VycmVudCwgaW1hZ2UpOwotICAg
ICAgICBlbHNlIGlmIChpczxDU1NWYWx1ZUxpc3Q+KCpjdXJyZW50KSkgewotICAgICAgICAgICAg
Q1NTVmFsdWVMaXN0JiBzbGFzaExpc3QgPSBkb3duY2FzdDxDU1NWYWx1ZUxpc3Q+KCpjdXJyZW50
KTsKKyAgICAgICAgICAgIGltYWdlLnNldEltYWdlKHN0eWxlSW1hZ2UoaW1hZ2VQcm9wZXJ0eSwg
Y3VycmVudC5nZXQoKSkpOworICAgICAgICBlbHNlIGlmIChpczxDU1NCb3JkZXJJbWFnZVNsaWNl
VmFsdWU+KGN1cnJlbnQuZ2V0KCkpKQorICAgICAgICAgICAgbWFwTmluZVBpZWNlSW1hZ2VTbGlj
ZShjdXJyZW50LmdldCgpLCBpbWFnZSk7CisgICAgICAgIGVsc2UgaWYgKGlzPENTU1ZhbHVlTGlz
dD4oY3VycmVudC5nZXQoKSkpIHsKKyAgICAgICAgICAgIENTU1ZhbHVlTGlzdCYgc2xhc2hMaXN0
ID0gZG93bmNhc3Q8Q1NTVmFsdWVMaXN0PihjdXJyZW50LmdldCgpKTsKICAgICAgICAgICAgIC8v
IE1hcCBpbiB0aGUgaW1hZ2Ugc2xpY2VzLgotICAgICAgICAgICAgaWYgKHNsYXNoTGlzdC5pdGVt
KDApICYmIHNsYXNoTGlzdC5pdGVtKDApLT5pc0JvcmRlckltYWdlU2xpY2VWYWx1ZSgpKQotICAg
ICAgICAgICAgICAgIG1hcE5pbmVQaWVjZUltYWdlU2xpY2Uoc2xhc2hMaXN0Lml0ZW0oMCksIGlt
YWdlKTsKKyAgICAgICAgICAgIGlmIChpczxDU1NCb3JkZXJJbWFnZVNsaWNlVmFsdWU+KHNsYXNo
TGlzdC5pdGVtKDApKSkKKyAgICAgICAgICAgICAgICBtYXBOaW5lUGllY2VJbWFnZVNsaWNlKCpz
bGFzaExpc3QuaXRlbSgwKSwgaW1hZ2UpOwogCiAgICAgICAgICAgICAvLyBNYXAgaW4gdGhlIGJv
cmRlciBzbGljZXMuCiAgICAgICAgICAgICBpZiAoc2xhc2hMaXN0Lml0ZW0oMSkpCi0gICAgICAg
ICAgICAgICAgaW1hZ2Uuc2V0Qm9yZGVyU2xpY2VzKG1hcE5pbmVQaWVjZUltYWdlUXVhZChzbGFz
aExpc3QuaXRlbSgxKSkpOworICAgICAgICAgICAgICAgIGltYWdlLnNldEJvcmRlclNsaWNlcyht
YXBOaW5lUGllY2VJbWFnZVF1YWQoKnNsYXNoTGlzdC5pdGVtKDEpKSk7CiAKICAgICAgICAgICAg
IC8vIE1hcCBpbiB0aGUgb3V0c2V0LgogICAgICAgICAgICAgaWYgKHNsYXNoTGlzdC5pdGVtKDIp
KQotICAgICAgICAgICAgICAgIGltYWdlLnNldE91dHNldChtYXBOaW5lUGllY2VJbWFnZVF1YWQo
c2xhc2hMaXN0Lml0ZW0oMikpKTsKLSAgICAgICAgfSBlbHNlIGlmIChjdXJyZW50LT5pc1ByaW1p
dGl2ZVZhbHVlKCkpIHsKKyAgICAgICAgICAgICAgICBpbWFnZS5zZXRPdXRzZXQobWFwTmluZVBp
ZWNlSW1hZ2VRdWFkKCpzbGFzaExpc3QuaXRlbSgyKSkpOworICAgICAgICB9IGVsc2UgaWYgKGlz
PENTU1ByaW1pdGl2ZVZhbHVlPihjdXJyZW50LmdldCgpKSkgewogICAgICAgICAgICAgLy8gU2V0
IHRoZSBhcHByb3ByaWF0ZSBydWxlcyBmb3Igc3RyZXRjaC9yb3VuZC9yZXBlYXQgb2YgdGhlIHNs
aWNlcy4KLSAgICAgICAgICAgIG1hcE5pbmVQaWVjZUltYWdlUmVwZWF0KGN1cnJlbnQsIGltYWdl
KTsKKyAgICAgICAgICAgIG1hcE5pbmVQaWVjZUltYWdlUmVwZWF0KGN1cnJlbnQuZ2V0KCksIGlt
YWdlKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtNTkwLDEzICs1ODUsMTMgQEAgdm9pZCBDU1NU
b1N0eWxlTWFwOjptYXBOaW5lUGllY2VJbWFnZShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5LCBDU1NW
YWx1ZSogdmFsdWUsIE4KICAgICB9CiB9CiAKLXZvaWQgQ1NTVG9TdHlsZU1hcDo6bWFwTmluZVBp
ZWNlSW1hZ2VTbGljZShDU1NWYWx1ZSogdmFsdWUsIE5pbmVQaWVjZUltYWdlJiBpbWFnZSkKK3Zv
aWQgQ1NTVG9TdHlsZU1hcDo6bWFwTmluZVBpZWNlSW1hZ2VTbGljZShDU1NWYWx1ZSYgdmFsdWUs
IE5pbmVQaWVjZUltYWdlJiBpbWFnZSkKIHsKICAgICBpZiAoIWlzPENTU0JvcmRlckltYWdlU2xp
Y2VWYWx1ZT4odmFsdWUpKQogICAgICAgICByZXR1cm47CiAKICAgICAvLyBSZXRyaWV2ZSB0aGUg
Ym9yZGVyIGltYWdlIHZhbHVlLgotICAgIENTU0JvcmRlckltYWdlU2xpY2VWYWx1ZSYgYm9yZGVy
SW1hZ2VTbGljZSA9IGRvd25jYXN0PENTU0JvcmRlckltYWdlU2xpY2VWYWx1ZT4oKnZhbHVlKTsK
KyAgICBhdXRvJiBib3JkZXJJbWFnZVNsaWNlID0gZG93bmNhc3Q8Q1NTQm9yZGVySW1hZ2VTbGlj
ZVZhbHVlPih2YWx1ZSk7CiAKICAgICAvLyBTZXQgdXAgYSBsZW5ndGggYm94IHRvIHJlcHJlc2Vu
dCBvdXIgaW1hZ2Ugc2xpY2VzLgogICAgIExlbmd0aEJveCBib3g7CkBAIC02MjMsNyArNjE4LDcg
QEAgdm9pZCBDU1NUb1N0eWxlTWFwOjptYXBOaW5lUGllY2VJbWFnZVNsaWNlKENTU1ZhbHVlKiB2
YWx1ZSwgTmluZVBpZWNlSW1hZ2UmIGltYWcKICAgICBpbWFnZS5zZXRGaWxsKGJvcmRlckltYWdl
U2xpY2UubV9maWxsKTsKIH0KIAotTGVuZ3RoQm94IENTU1RvU3R5bGVNYXA6Om1hcE5pbmVQaWVj
ZUltYWdlUXVhZChDU1NWYWx1ZSogdmFsdWUpCitMZW5ndGhCb3ggQ1NTVG9TdHlsZU1hcDo6bWFw
TmluZVBpZWNlSW1hZ2VRdWFkKENTU1ZhbHVlJiB2YWx1ZSkKIHsKICAgICBpZiAoIWlzPENTU1By
aW1pdGl2ZVZhbHVlPih2YWx1ZSkpCiAgICAgICAgIHJldHVybiBMZW5ndGhCb3goKTsKQEAgLTYz
Miw3ICs2MjcsNyBAQCBMZW5ndGhCb3ggQ1NTVG9TdHlsZU1hcDo6bWFwTmluZVBpZWNlSW1hZ2VR
dWFkKENTU1ZhbHVlKiB2YWx1ZSkKICAgICBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhIGNvbnZl
cnNpb25EYXRhID0gdXNlU1ZHWm9vbVJ1bGVzKCkgPyBtX3Jlc29sdmVyLT5zdGF0ZSgpLmNzc1Rv
TGVuZ3RoQ29udmVyc2lvbkRhdGEoKS5jb3B5V2l0aEFkanVzdGVkWm9vbSgxLjBmKSA6IG1fcmVz
b2x2ZXItPnN0YXRlKCkuY3NzVG9MZW5ndGhDb252ZXJzaW9uRGF0YSgpOwogCiAgICAgLy8gUmV0
cmlldmUgdGhlIHByaW1pdGl2ZSB2YWx1ZS4KLSAgICBDU1NQcmltaXRpdmVWYWx1ZSYgYm9yZGVy
V2lkdGhzID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSk7CisgICAgYXV0byYg
Ym9yZGVyV2lkdGhzID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVlKTsKIAogICAg
IC8vIFNldCB1cCBhIGxlbmd0aCBib3ggdG8gcmVwcmVzZW50IG91ciBpbWFnZSBzbGljZXMuCiAg
ICAgTGVuZ3RoQm94IGJveDsgLy8gRGVmYXVsdHMgdG8gJ2F1dG8nIHNvIHdlIGRvbid0IGhhdmUg
dG8gaGFuZGxlIHRoYXQgZXhwbGljaXRseSBiZWxvdy4KQEAgLTY2OCwxMiArNjYzLDEyIEBAIExl
bmd0aEJveCBDU1NUb1N0eWxlTWFwOjptYXBOaW5lUGllY2VJbWFnZVF1YWQoQ1NTVmFsdWUqIHZh
bHVlKQogICAgIHJldHVybiBib3g7CiB9CiAKLXZvaWQgQ1NTVG9TdHlsZU1hcDo6bWFwTmluZVBp
ZWNlSW1hZ2VSZXBlYXQoQ1NTVmFsdWUqIHZhbHVlLCBOaW5lUGllY2VJbWFnZSYgaW1hZ2UpCit2
b2lkIENTU1RvU3R5bGVNYXA6Om1hcE5pbmVQaWVjZUltYWdlUmVwZWF0KENTU1ZhbHVlJiB2YWx1
ZSwgTmluZVBpZWNlSW1hZ2UmIGltYWdlKQogewogICAgIGlmICghaXM8Q1NTUHJpbWl0aXZlVmFs
dWU+KHZhbHVlKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgQ1NTUHJpbWl0aXZlVmFsdWUmIHBy
aW1pdGl2ZVZhbHVlID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSk7CisgICAg
Q1NTUHJpbWl0aXZlVmFsdWUmIHByaW1pdGl2ZVZhbHVlID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZl
VmFsdWU+KHZhbHVlKTsKICAgICBQYWlyKiBwYWlyID0gcHJpbWl0aXZlVmFsdWUuZ2V0UGFpclZh
bHVlKCk7CiAgICAgaWYgKCFwYWlyIHx8ICFwYWlyLT5maXJzdCgpIHx8ICFwYWlyLT5zZWNvbmQo
KSkKICAgICAgICAgcmV0dXJuOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1Rv
U3R5bGVNYXAuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NUb1N0eWxlTWFwLmgKaW5kZXggYjRl
Y2NjNjc0MzlhMTg1ZDVjYjliZjFhMTkxNjI0MjNhNDM2MjNhZS4uNDQzMDY3OTcyNDY3OThiMTli
ZDBhYWEwMGU4MDgwNmM1NWNkNmJlOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NT
U1RvU3R5bGVNYXAuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTVG9TdHlsZU1hcC5oCkBA
IC01OCwyMCArNTgsMjAgQEAgcHVibGljOgogICAgIHZvaWQgbWFwRmlsbFlQb3NpdGlvbihDU1NQ
cm9wZXJ0eUlELCBGaWxsTGF5ZXIqLCBDU1NWYWx1ZSopOwogICAgIHZvaWQgbWFwRmlsbE1hc2tT
b3VyY2VUeXBlKENTU1Byb3BlcnR5SUQsIEZpbGxMYXllciosIENTU1ZhbHVlKik7CiAKLSAgICB2
b2lkIG1hcEFuaW1hdGlvbkRlbGF5KEFuaW1hdGlvbiosIENTU1ZhbHVlKik7Ci0gICAgdm9pZCBt
YXBBbmltYXRpb25EaXJlY3Rpb24oQW5pbWF0aW9uKiwgQ1NTVmFsdWUqKTsKLSAgICB2b2lkIG1h
cEFuaW1hdGlvbkR1cmF0aW9uKEFuaW1hdGlvbiosIENTU1ZhbHVlKik7Ci0gICAgdm9pZCBtYXBB
bmltYXRpb25GaWxsTW9kZShBbmltYXRpb24qLCBDU1NWYWx1ZSopOwotICAgIHZvaWQgbWFwQW5p
bWF0aW9uSXRlcmF0aW9uQ291bnQoQW5pbWF0aW9uKiwgQ1NTVmFsdWUqKTsKLSAgICB2b2lkIG1h
cEFuaW1hdGlvbk5hbWUoQW5pbWF0aW9uKiwgQ1NTVmFsdWUqKTsKLSAgICB2b2lkIG1hcEFuaW1h
dGlvblBsYXlTdGF0ZShBbmltYXRpb24qLCBDU1NWYWx1ZSopOwotICAgIHZvaWQgbWFwQW5pbWF0
aW9uUHJvcGVydHkoQW5pbWF0aW9uKiwgQ1NTVmFsdWUqKTsKLSAgICB2b2lkIG1hcEFuaW1hdGlv
blRpbWluZ0Z1bmN0aW9uKEFuaW1hdGlvbiosIENTU1ZhbHVlKik7CisgICAgdm9pZCBtYXBBbmlt
YXRpb25EZWxheShBbmltYXRpb24qLCBDU1NWYWx1ZSYpOworICAgIHZvaWQgbWFwQW5pbWF0aW9u
RGlyZWN0aW9uKEFuaW1hdGlvbiosIENTU1ZhbHVlJik7CisgICAgdm9pZCBtYXBBbmltYXRpb25E
dXJhdGlvbihBbmltYXRpb24qLCBDU1NWYWx1ZSYpOworICAgIHZvaWQgbWFwQW5pbWF0aW9uRmls
bE1vZGUoQW5pbWF0aW9uKiwgQ1NTVmFsdWUmKTsKKyAgICB2b2lkIG1hcEFuaW1hdGlvbkl0ZXJh
dGlvbkNvdW50KEFuaW1hdGlvbiosIENTU1ZhbHVlJik7CisgICAgdm9pZCBtYXBBbmltYXRpb25O
YW1lKEFuaW1hdGlvbiosIENTU1ZhbHVlJik7CisgICAgdm9pZCBtYXBBbmltYXRpb25QbGF5U3Rh
dGUoQW5pbWF0aW9uKiwgQ1NTVmFsdWUmKTsKKyAgICB2b2lkIG1hcEFuaW1hdGlvblByb3BlcnR5
KEFuaW1hdGlvbiosIENTU1ZhbHVlJik7CisgICAgdm9pZCBtYXBBbmltYXRpb25UaW1pbmdGdW5j
dGlvbihBbmltYXRpb24qLCBDU1NWYWx1ZSYpOwogCiAgICAgdm9pZCBtYXBOaW5lUGllY2VJbWFn
ZShDU1NQcm9wZXJ0eUlELCBDU1NWYWx1ZSosIE5pbmVQaWVjZUltYWdlJik7Ci0gICAgdm9pZCBt
YXBOaW5lUGllY2VJbWFnZVNsaWNlKENTU1ZhbHVlKiwgTmluZVBpZWNlSW1hZ2UmKTsKLSAgICBM
ZW5ndGhCb3ggbWFwTmluZVBpZWNlSW1hZ2VRdWFkKENTU1ZhbHVlKik7Ci0gICAgdm9pZCBtYXBO
aW5lUGllY2VJbWFnZVJlcGVhdChDU1NWYWx1ZSosIE5pbmVQaWVjZUltYWdlJik7CisgICAgdm9p
ZCBtYXBOaW5lUGllY2VJbWFnZVNsaWNlKENTU1ZhbHVlJiwgTmluZVBpZWNlSW1hZ2UmKTsKKyAg
ICBMZW5ndGhCb3ggbWFwTmluZVBpZWNlSW1hZ2VRdWFkKENTU1ZhbHVlJik7CisgICAgdm9pZCBt
YXBOaW5lUGllY2VJbWFnZVJlcGVhdChDU1NWYWx1ZSYsIE5pbmVQaWVjZUltYWdlJik7CiAKIHBy
aXZhdGU6CiAgICAgLy8gRklYTUU6IFRoZXNlIGFjY2Vzc29ycyBzaG91bGQgYmUgcmVwbGFjZWQg
YnkgYSBSZXNvbHZlU3RhdGUgb2JqZWN0CkBAIC04NCw3ICs4NCw3IEBAIHByaXZhdGU6CiAgICAg
Ly8gRklYTUU6IFRoaXMgc2hvdWxkIGJlIHBhcnQgb2Ygc29tZSBzb3J0IG9mIFN0eWxlSW1hZ2VD
YWNoZSBvYmplY3Qgd2hpY2gKICAgICAvLyBpcyBoZWxkIGJ5IHRoZSBTdHlsZVJlc29sdmVyLCBh
bmQgbGlrZWx5IHByb3ZpZGVkIHRvIHRoaXMgb2JqZWN0CiAgICAgLy8gZHVyaW5nIHRoZSByZXNv
bHZlLgotICAgIFBhc3NSZWZQdHI8U3R5bGVJbWFnZT4gc3R5bGVJbWFnZShDU1NQcm9wZXJ0eUlE
LCBDU1NWYWx1ZSopOworICAgIFBhc3NSZWZQdHI8U3R5bGVJbWFnZT4gc3R5bGVJbWFnZShDU1NQ
cm9wZXJ0eUlELCBDU1NWYWx1ZSYpOwogCiAgICAgU3R5bGVSZXNvbHZlciogbV9yZXNvbHZlcjsK
IH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTVmFsdWVMaXN0LmggYi9Tb3Vy
Y2UvV2ViQ29yZS9jc3MvQ1NTVmFsdWVMaXN0LmgKaW5kZXggZjBhZmMzZjJiNzBhMmI5YWNkZTRk
MjY0NjVhNWIzNzllYjc0ZDViOC4uOTkxMjlmOWU1YjdhZGRlNWRlMzlhYTM1MmIwNjlkZDgyOTAz
MDQzNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1ZhbHVlTGlzdC5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NWYWx1ZUxpc3QuaApAQCAtMzEsNiArMzEsOSBAQCBjbGFz
cyBDU1NQYXJzZXJWYWx1ZUxpc3Q7CiAKIGNsYXNzIENTU1ZhbHVlTGlzdCA6IHB1YmxpYyBDU1NW
YWx1ZSB7CiBwdWJsaWM6CisgICAgdHlwZWRlZiBWZWN0b3I8UmVmPENTU1ZhbHVlPiwgND46Oml0
ZXJhdG9yIGl0ZXJhdG9yOworICAgIHR5cGVkZWYgVmVjdG9yPFJlZjxDU1NWYWx1ZT4sIDQ+Ojpj
b25zdF9pdGVyYXRvciBjb25zdF9pdGVyYXRvcjsKKwogICAgIHN0YXRpYyBQYXNzUmVmPENTU1Zh
bHVlTGlzdD4gY3JlYXRlQ29tbWFTZXBhcmF0ZWQoKQogICAgIHsKICAgICAgICAgcmV0dXJuIGFk
b3B0UmVmKCpuZXcgQ1NTVmFsdWVMaXN0KENvbW1hU2VwYXJhdG9yKSk7CkBAIC01NCw2ICs1Nywx
MSBAQCBwdWJsaWM6CiAgICAgQ1NTVmFsdWUqIGl0ZW1XaXRob3V0Qm91bmRzQ2hlY2soc2l6ZV90
IGluZGV4KSB7IHJldHVybiAmbV92YWx1ZXNbaW5kZXhdLmdldCgpOyB9CiAgICAgY29uc3QgQ1NT
VmFsdWUqIGl0ZW1XaXRob3V0Qm91bmRzQ2hlY2soc2l6ZV90IGluZGV4KSBjb25zdCB7IEFTU0VS
VChpbmRleCA8IG1fdmFsdWVzLnNpemUoKSk7IHJldHVybiAmbV92YWx1ZXNbaW5kZXhdLmdldCgp
OyB9CiAKKyAgICBjb25zdF9pdGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVz
LmJlZ2luKCk7IH0KKyAgICBjb25zdF9pdGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBtX3Zh
bHVlcy5lbmQoKTsgfQorICAgIGl0ZXJhdG9yIGJlZ2luKCkgeyByZXR1cm4gbV92YWx1ZXMuYmVn
aW4oKTsgfQorICAgIGl0ZXJhdG9yIGVuZCgpIHsgcmV0dXJuIG1fdmFsdWVzLmVuZCgpOyB9CisK
ICAgICB2b2lkIGFwcGVuZChQYXNzUmVmPENTU1ZhbHVlPik7CiAgICAgdm9pZCBwcmVwZW5kKFBh
c3NSZWY8Q1NTVmFsdWU+KTsKICAgICBib29sIHJlbW92ZUFsbChDU1NWYWx1ZSopOwpAQCAtOTEs
MzggKzk5LDYgQEAgaW5saW5lIHZvaWQgQ1NTVmFsdWVMaXN0OjpwcmVwZW5kKFBhc3NSZWY8Q1NT
VmFsdWU+IHZhbHVlKQogICAgIG1fdmFsdWVzLmluc2VydCgwLCBXVEY6Om1vdmUodmFsdWUpKTsK
IH0KIAotLy8gT2JqZWN0cyBvZiB0aGlzIGNsYXNzIGFyZSBpbnRlbmRlZCB0byBiZSBzdGFjay1h
bGxvY2F0ZWQgYW5kIHNjb3BlZCB0byBhIHNpbmdsZSBmdW5jdGlvbi4KLS8vIFBsZWFzZSB0YWtl
IGNhcmUgbm90IHRvIHBhc3MgdGhlc2UgYXJvdW5kIGFzIHRoZXkgZG8gaG9sZCBvbnRvIGEgcmF3
IHBvaW50ZXIuCi1jbGFzcyBDU1NWYWx1ZUxpc3RJbnNwZWN0b3IgewotcHVibGljOgotICAgIENT
U1ZhbHVlTGlzdEluc3BlY3RvcihDU1NWYWx1ZSogdmFsdWUpCi0gICAgICAgIDogbV9saXN0KGlz
PENTU1ZhbHVlTGlzdD4odmFsdWUpID8gZG93bmNhc3Q8Q1NTVmFsdWVMaXN0Pih2YWx1ZSkgOiBu
dWxscHRyKQotICAgIHsKLSAgICB9Ci0KLSAgICBDU1NWYWx1ZSogaXRlbShzaXplX3QgaW5kZXgp
IGNvbnN0IHsgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oaW5kZXggPCBsZW5ndGgo
KSk7IHJldHVybiBtX2xpc3QtPml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soaW5kZXgpOyB9Ci0gICAg
Q1NTVmFsdWUqIGZpcnN0KCkgY29uc3QgeyByZXR1cm4gaXRlbSgwKTsgfQotICAgIENTU1ZhbHVl
KiBzZWNvbmQoKSBjb25zdCB7IHJldHVybiBpdGVtKDEpOyB9Ci0gICAgc2l6ZV90IGxlbmd0aCgp
IGNvbnN0IHsgcmV0dXJuIG1fbGlzdCA/IG1fbGlzdC0+bGVuZ3RoKCkgOiAwOyB9Ci1wcml2YXRl
OgotICAgIENTU1ZhbHVlTGlzdCogbV9saXN0OwotfTsKLQotLy8gV3JhcHBlciB0aGF0IGNhbiBi
ZSB1c2VkIHRvIGl0ZXJhdGUgb3ZlciBhbnkgQ1NTVmFsdWUuIE5vbi1saXN0IHZhbHVlcyBhbmQg
MCBiZWhhdmUgYXMgemVyby1sZW5ndGggbGlzdHMuCi0vLyBPYmplY3RzIG9mIHRoaXMgY2xhc3Mg
YXJlIGludGVuZGVkIHRvIGJlIHN0YWNrLWFsbG9jYXRlZCBhbmQgc2NvcGVkIHRvIGEgc2luZ2xl
IGZ1bmN0aW9uLgotLy8gUGxlYXNlIHRha2UgY2FyZSBub3QgdG8gcGFzcyB0aGVzZSBhcm91bmQg
YXMgdGhleSBkbyBob2xkIG9udG8gYSByYXcgcG9pbnRlci4KLWNsYXNzIENTU1ZhbHVlTGlzdEl0
ZXJhdG9yIHsKLXB1YmxpYzoKLSAgICBDU1NWYWx1ZUxpc3RJdGVyYXRvcihDU1NWYWx1ZSogdmFs
dWUpIDogbV9pbnNwZWN0b3IodmFsdWUpLCBtX3Bvc2l0aW9uKDApIHsgfQotICAgIGJvb2wgaGFz
TW9yZSgpIGNvbnN0IHsgcmV0dXJuIG1fcG9zaXRpb24gPCBtX2luc3BlY3Rvci5sZW5ndGgoKTsg
fQotICAgIENTU1ZhbHVlKiB2YWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1faW5zcGVjdG9yLml0ZW0o
bV9wb3NpdGlvbik7IH0KLSAgICBib29sIGlzUHJpbWl0aXZlVmFsdWUoKSBjb25zdCB7IHJldHVy
biB2YWx1ZSgpLT5pc1ByaW1pdGl2ZVZhbHVlKCk7IH0KLSAgICB2b2lkIGFkdmFuY2UoKSB7IG1f
cG9zaXRpb24rKzsgQVNTRVJUKG1fcG9zaXRpb24gPD0gbV9pbnNwZWN0b3IubGVuZ3RoKCkpO30K
LSAgICBzaXplX3QgaW5kZXgoKSBjb25zdCB7IHJldHVybiBtX3Bvc2l0aW9uOyB9Ci1wcml2YXRl
OgotICAgIENTU1ZhbHVlTGlzdEluc3BlY3RvciBtX2luc3BlY3RvcjsKLSAgICBzaXplX3QgbV9w
b3NpdGlvbjsKLX07CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKIFNQRUNJQUxJWkVfVFlQRV9U
UkFJVFNfQ1NTX1ZBTFVFKENTU1ZhbHVlTGlzdCwgaXNWYWx1ZUxpc3QoKSkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2Nzcy9EZXByZWNhdGVkU3R5bGVCdWlsZGVyLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2Nzcy9EZXByZWNhdGVkU3R5bGVCdWlsZGVyLmNwcAppbmRleCA1NjIwMWNkNTdmMWEw
MTdhY2RmNTdhZmMxZmE4NmU1N2U0YjYxMzE5Li5jMmI0ODc1ZTNjOTk4YjU5MTQ5ODUzZGYwM2E3
OWJmZDc1NTExNjEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvRGVwcmVjYXRlZFN0
eWxlQnVpbGRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0RlcHJlY2F0ZWRTdHlsZUJ1
aWxkZXIuY3BwCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSAiQ1NTQXNwZWN0UmF0aW9WYWx1
ZS5oIgogI2luY2x1ZGUgIkNTU0NhbGN1bGF0aW9uVmFsdWUuaCIKICNpbmNsdWRlICJDU1NDdXJz
b3JJbWFnZVZhbHVlLmgiCisjaW5jbHVkZSAiQ1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZS5oIgogI2lu
Y2x1ZGUgIkNTU0ltYWdlU2V0VmFsdWUuaCIKICNpbmNsdWRlICJDU1NQcmltaXRpdmVWYWx1ZS5o
IgogI2luY2x1ZGUgIkNTU1ByaW1pdGl2ZVZhbHVlTWFwcGluZ3MuaCIKQEAgLTE2Myw3ICsxNjQs
NyBAQCBwdWJsaWM6CiB0ZW1wbGF0ZSA8U3R5bGVJbWFnZSogKFJlbmRlclN0eWxlOjoqZ2V0dGVy
RnVuY3Rpb24pKCkgY29uc3QsIHZvaWQgKFJlbmRlclN0eWxlOjoqc2V0dGVyRnVuY3Rpb24pKFBh
c3NSZWZQdHI8U3R5bGVJbWFnZT4pLCBTdHlsZUltYWdlKiAoKmluaXRpYWxGdW5jdGlvbikoKSwg
Q1NTUHJvcGVydHlJRCBwcm9wZXJ0eT4KIGNsYXNzIEFwcGx5UHJvcGVydHlTdHlsZUltYWdlIHsK
IHB1YmxpYzoKLSAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxl
UmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlKiB2YWx1ZSkgeyAoc3R5bGVSZXNvbHZl
ci0+c3R5bGUoKS0+KnNldHRlckZ1bmN0aW9uKShzdHlsZVJlc29sdmVyLT5zdHlsZUltYWdlKHBy
b3BlcnR5LCB2YWx1ZSkpOyB9CisgICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0
eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSogdmFsdWUpIHsgKHN0
eWxlUmVzb2x2ZXItPnN0eWxlKCktPipzZXR0ZXJGdW5jdGlvbikoc3R5bGVSZXNvbHZlci0+c3R5
bGVJbWFnZShwcm9wZXJ0eSwgKnZhbHVlKSk7IH0KICAgICBzdGF0aWMgUHJvcGVydHlIYW5kbGVy
IGNyZWF0ZUhhbmRsZXIoKQogICAgIHsKICAgICAgICAgUHJvcGVydHlIYW5kbGVyIGhhbmRsZXIg
PSBBcHBseVByb3BlcnR5RGVmYXVsdEJhc2U8U3R5bGVJbWFnZSosIGdldHRlckZ1bmN0aW9uLCBQ
YXNzUmVmUHRyPFN0eWxlSW1hZ2U+LCBzZXR0ZXJGdW5jdGlvbiwgU3R5bGVJbWFnZSosIGluaXRp
YWxGdW5jdGlvbj46OmNyZWF0ZUhhbmRsZXIoKTsKQEAgLTg1MCwxNiArODUxLDE2IEBAIHB1Ymxp
YzoKICAgICAgICAgTmluZVBpZWNlSW1hZ2UgaW1hZ2UoZ2V0VmFsdWUoc3R5bGVSZXNvbHZlci0+
c3R5bGUoKSkpOwogICAgICAgICBzd2l0Y2ggKG1vZGlmaWVyKSB7CiAgICAgICAgIGNhc2UgT3V0
c2V0OgotICAgICAgICAgICAgaW1hZ2Uuc2V0T3V0c2V0KHN0eWxlUmVzb2x2ZXItPnN0eWxlTWFw
KCktPm1hcE5pbmVQaWVjZUltYWdlUXVhZCh2YWx1ZSkpOworICAgICAgICAgICAgaW1hZ2Uuc2V0
T3V0c2V0KHN0eWxlUmVzb2x2ZXItPnN0eWxlTWFwKCktPm1hcE5pbmVQaWVjZUltYWdlUXVhZCgq
dmFsdWUpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFJlcGVhdDoKLSAgICAg
ICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlTWFwKCktPm1hcE5pbmVQaWVjZUltYWdlUmVwZWF0
KHZhbHVlLCBpbWFnZSk7CisgICAgICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZU1hcCgpLT5t
YXBOaW5lUGllY2VJbWFnZVJlcGVhdCgqdmFsdWUsIGltYWdlKTsKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICBjYXNlIFNsaWNlOgotICAgICAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGVN
YXAoKS0+bWFwTmluZVBpZWNlSW1hZ2VTbGljZSh2YWx1ZSwgaW1hZ2UpOworICAgICAgICAgICAg
c3R5bGVSZXNvbHZlci0+c3R5bGVNYXAoKS0+bWFwTmluZVBpZWNlSW1hZ2VTbGljZSgqdmFsdWUs
IGltYWdlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFdpZHRoOgotICAgICAg
ICAgICAgaW1hZ2Uuc2V0Qm9yZGVyU2xpY2VzKHN0eWxlUmVzb2x2ZXItPnN0eWxlTWFwKCktPm1h
cE5pbmVQaWVjZUltYWdlUXVhZCh2YWx1ZSkpOworICAgICAgICAgICAgaW1hZ2Uuc2V0Qm9yZGVy
U2xpY2VzKHN0eWxlUmVzb2x2ZXItPnN0eWxlTWFwKCktPm1hcE5pbmVQaWVjZUltYWdlUXVhZCgq
dmFsdWUpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIHNldFZhbHVl
KHN0eWxlUmVzb2x2ZXItPnN0eWxlKCksIGltYWdlKTsKQEAgLTk2MSw3ICs5NjIsNyBAQCBwdWJs
aWM6CiAgICAgICAgICAgICAgICAgICAgIENTU0N1cnNvckltYWdlVmFsdWUmIGltYWdlID0gZG93
bmNhc3Q8Q1NTQ3Vyc29ySW1hZ2VWYWx1ZT4oKml0ZW0pOwogICAgICAgICAgICAgICAgICAgICBp
ZiAoaW1hZ2UudXBkYXRlSWZTVkdDdXJzb3JJc1VzZWQoc3R5bGVSZXNvbHZlci0+ZWxlbWVudCgp
KSkgLy8gRWxlbWVudHMgd2l0aCBTVkcgY3Vyc29ycyBhcmUgbm90IGFsbG93ZWQgdG8gc2hhcmUg
c3R5bGUuCiAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5z
ZXRVbmlxdWUoKTsKLSAgICAgICAgICAgICAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+
YWRkQ3Vyc29yKHN0eWxlUmVzb2x2ZXItPnN0eWxlSW1hZ2UoQ1NTUHJvcGVydHlDdXJzb3IsICZp
bWFnZSksIGltYWdlLmhvdFNwb3QoKSk7CisgICAgICAgICAgICAgICAgICAgIHN0eWxlUmVzb2x2
ZXItPnN0eWxlKCktPmFkZEN1cnNvcihzdHlsZVJlc29sdmVyLT5zdHlsZUltYWdlKENTU1Byb3Bl
cnR5Q3Vyc29yLCBpbWFnZSksIGltYWdlLmhvdFNwb3QoKSk7CiAgICAgICAgICAgICAgICAgfSBl
bHNlIGlmIChpczxDU1NQcmltaXRpdmVWYWx1ZT4oKml0ZW0pKSB7CiAgICAgICAgICAgICAgICAg
ICAgIENTU1ByaW1pdGl2ZVZhbHVlJiBwcmltaXRpdmVWYWx1ZSA9IGRvd25jYXN0PENTU1ByaW1p
dGl2ZVZhbHVlPigqaXRlbSk7CiAgICAgICAgICAgICAgICAgICAgIGlmIChwcmltaXRpdmVWYWx1
ZS5pc1ZhbHVlSUQoKSkKQEAgLTEwNDMsOCArMTA0NCwxMCBAQCBwdWJsaWM6CiAgICAgICAgIH0K
IAogICAgICAgICBUZXh0RGVjb3JhdGlvblNraXAgc2tpcCA9IFJlbmRlclN0eWxlOjppbml0aWFs
VGV4dERlY29yYXRpb25Ta2lwKCk7Ci0gICAgICAgIGZvciAoQ1NTVmFsdWVMaXN0SXRlcmF0b3Ig
aSh2YWx1ZSk7IGkuaGFzTW9yZSgpOyBpLmFkdmFuY2UoKSkKLSAgICAgICAgICAgIHNraXAgfD0g
dmFsdWVUb0RlY29yYXRpb25Ta2lwKGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqaS52YWx1
ZSgpKSk7CisgICAgICAgIGlmIChpczxDU1NWYWx1ZUxpc3Q+KCp2YWx1ZSkpIHsKKyAgICAgICAg
ICAgIGZvciAoYXV0byYgY3VycmVudFZhbHVlIDogZG93bmNhc3Q8Q1NTVmFsdWVMaXN0PigqdmFs
dWUpKQorICAgICAgICAgICAgICAgIHNraXAgfD0gdmFsdWVUb0RlY29yYXRpb25Ta2lwKGRvd25j
YXN0PENTU1ByaW1pdGl2ZVZhbHVlPihjdXJyZW50VmFsdWUuZ2V0KCkpKTsKKyAgICAgICAgfQog
ICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRUZXh0RGVjb3JhdGlvblNraXAoc2tp
cCk7CiAgICAgfQogICAgIHN0YXRpYyBQcm9wZXJ0eUhhbmRsZXIgY3JlYXRlSGFuZGxlcigpCkBA
IC0xMTIwLDEwICsxMTIzLDExIEBAIHB1YmxpYzoKICAgICAgICAgfQogCiAgICAgICAgIHVuc2ln
bmVkIHQgPSAwOwotICAgICAgICBmb3IgKENTU1ZhbHVlTGlzdEl0ZXJhdG9yIGkodmFsdWUpOyBp
Lmhhc01vcmUoKTsgaS5hZHZhbmNlKCkpIHsKLSAgICAgICAgICAgIENTU1ZhbHVlKiBpdGVtID0g
aS52YWx1ZSgpOwotICAgICAgICAgICAgVGV4dFVuZGVybGluZVBvc2l0aW9uIHQyID0gZG93bmNh
c3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCppdGVtKTsKLSAgICAgICAgICAgIHQgfD0gdDI7CisgICAg
ICAgIGlmIChpczxDU1NWYWx1ZUxpc3Q+KCp2YWx1ZSkpIHsKKyAgICAgICAgICAgIGZvciAoYXV0
byYgY3VycmVudFZhbHVlIDogZG93bmNhc3Q8Q1NTVmFsdWVMaXN0PigqdmFsdWUpKSB7CisgICAg
ICAgICAgICAgICAgVGV4dFVuZGVybGluZVBvc2l0aW9uIHQyID0gZG93bmNhc3Q8Q1NTUHJpbWl0
aXZlVmFsdWU+KGN1cnJlbnRWYWx1ZS5nZXQoKSk7CisgICAgICAgICAgICAgICAgdCB8PSB0MjsK
KyAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgp
LT5zZXRUZXh0VW5kZXJsaW5lUG9zaXRpb24oc3RhdGljX2Nhc3Q8VGV4dFVuZGVybGluZVBvc2l0
aW9uPih0KSk7CiAgICAgfQpAQCAtMTM0MCwzNSArMTM0NCw0MSBAQCBwdWJsaWM6CiAgICAgICAg
IExlbmd0aCB3aWR0aDsKICAgICAgICAgTGVuZ3RoIGhlaWdodDsKICAgICAgICAgUGFnZVNpemVU
eXBlIHBhZ2VTaXplVHlwZSA9IFBBR0VfU0laRV9BVVRPOwotICAgICAgICBDU1NWYWx1ZUxpc3RJ
bnNwZWN0b3IgaW5zcGVjdG9yKHZhbHVlKTsKLSAgICAgICAgc3dpdGNoIChpbnNwZWN0b3IubGVu
Z3RoKCkpIHsKKyAgICAgICAgaWYgKCFpczxDU1NWYWx1ZUxpc3Q+KHZhbHVlKSkKKyAgICAgICAg
ICAgIHJldHVybjsKKworICAgICAgICBhdXRvJiB2YWx1ZUxpc3QgPSBkb3duY2FzdDxDU1NWYWx1
ZUxpc3Q+KCp2YWx1ZSk7CisgICAgICAgIHN3aXRjaCAodmFsdWVMaXN0Lmxlbmd0aCgpKSB7CiAg
ICAgICAgIGNhc2UgMjogeworICAgICAgICAgICAgQ1NTVmFsdWUqIGZpcnN0VmFsdWUgPSB2YWx1
ZUxpc3QuaXRlbVdpdGhvdXRCb3VuZHNDaGVjaygwKTsKKyAgICAgICAgICAgIENTU1ZhbHVlKiBz
ZWNvbmRWYWx1ZSA9IHZhbHVlTGlzdC5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDEpOwogICAgICAg
ICAgICAgLy8gPGxlbmd0aD57Mn0gfCA8cGFnZS1zaXplPiA8b3JpZW50YXRpb24+Ci0gICAgICAg
ICAgICBpZiAoIWlzPENTU1ByaW1pdGl2ZVZhbHVlPigqaW5zcGVjdG9yLmZpcnN0KCkpIHx8ICFp
czxDU1NQcmltaXRpdmVWYWx1ZT4oKmluc3BlY3Rvci5zZWNvbmQoKSkpCisgICAgICAgICAgICBp
ZiAoIWlzPENTU1ByaW1pdGl2ZVZhbHVlPigqZmlyc3RWYWx1ZSkgfHwgIWlzPENTU1ByaW1pdGl2
ZVZhbHVlPigqc2Vjb25kVmFsdWUpKQogICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
ICAgIENTU1ByaW1pdGl2ZVZhbHVlJiBmaXJzdCA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVl
PigqaW5zcGVjdG9yLmZpcnN0KCkpOwotICAgICAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUmIHNl
Y29uZCA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqaW5zcGVjdG9yLnNlY29uZCgpKTsK
LSAgICAgICAgICAgIGlmIChmaXJzdC5pc0xlbmd0aCgpKSB7CisgICAgICAgICAgICBhdXRvJiBm
aXJzdFByaW1pdGl2ZVZhbHVlID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCpmaXJzdFZh
bHVlKTsKKyAgICAgICAgICAgIGF1dG8mIHNlY29uZFByaW1pdGl2ZVZhbHVlID0gZG93bmNhc3Q8
Q1NTUHJpbWl0aXZlVmFsdWU+KCpzZWNvbmRWYWx1ZSk7CisgICAgICAgICAgICBpZiAoZmlyc3RQ
cmltaXRpdmVWYWx1ZS5pc0xlbmd0aCgpKSB7CiAgICAgICAgICAgICAgICAgLy8gPGxlbmd0aD57
Mn0KLSAgICAgICAgICAgICAgICBpZiAoIXNlY29uZC5pc0xlbmd0aCgpKQorICAgICAgICAgICAg
ICAgIGlmICghc2Vjb25kUHJpbWl0aXZlVmFsdWUuaXNMZW5ndGgoKSkKICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgIENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEg
Y29udmVyc2lvbkRhdGEgPSBzdHlsZVJlc29sdmVyLT5zdGF0ZSgpLmNzc1RvTGVuZ3RoQ29udmVy
c2lvbkRhdGEoKS5jb3B5V2l0aEFkanVzdGVkWm9vbSgxLjBmKTsKLSAgICAgICAgICAgICAgICB3
aWR0aCA9IGZpcnN0LmNvbXB1dGVMZW5ndGg8TGVuZ3RoPihjb252ZXJzaW9uRGF0YSk7Ci0gICAg
ICAgICAgICAgICAgaGVpZ2h0ID0gc2Vjb25kLmNvbXB1dGVMZW5ndGg8TGVuZ3RoPihjb252ZXJz
aW9uRGF0YSk7CisgICAgICAgICAgICAgICAgd2lkdGggPSBmaXJzdFByaW1pdGl2ZVZhbHVlLmNv
bXB1dGVMZW5ndGg8TGVuZ3RoPihjb252ZXJzaW9uRGF0YSk7CisgICAgICAgICAgICAgICAgaGVp
Z2h0ID0gc2Vjb25kUHJpbWl0aXZlVmFsdWUuY29tcHV0ZUxlbmd0aDxMZW5ndGg+KGNvbnZlcnNp
b25EYXRhKTsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgLy8gPHBhZ2Ut
c2l6ZT4gPG9yaWVudGF0aW9uPgogICAgICAgICAgICAgICAgIC8vIFRoZSB2YWx1ZSBvcmRlciBp
cyBndWFyYW50ZWVkLiBTZWUgQ1NTUGFyc2VyOjpwYXJzZVNpemVQYXJhbWV0ZXIuCi0gICAgICAg
ICAgICAgICAgaWYgKCFnZXRQYWdlU2l6ZUZyb21OYW1lKCZmaXJzdCwgJnNlY29uZCwgd2lkdGgs
IGhlaWdodCkpCisgICAgICAgICAgICAgICAgaWYgKCFnZXRQYWdlU2l6ZUZyb21OYW1lKCZmaXJz
dFByaW1pdGl2ZVZhbHVlLCAmc2Vjb25kUHJpbWl0aXZlVmFsdWUsIHdpZHRoLCBoZWlnaHQpKQog
ICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBw
YWdlU2l6ZVR5cGUgPSBQQUdFX1NJWkVfUkVTT0xWRUQ7CiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgfQogICAgICAgICBjYXNlIDE6IHsKKyAgICAgICAgICAgIENTU1ZhbHVlKiB2YWx1ZSA9
IHZhbHVlTGlzdC5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDApOwogICAgICAgICAgICAgLy8gPGxl
bmd0aD4gfCBhdXRvIHwgPHBhZ2Utc2l6ZT4gfCBbIHBvcnRyYWl0IHwgbGFuZHNjYXBlXQotICAg
ICAgICAgICAgaWYgKCFpczxDU1NQcmltaXRpdmVWYWx1ZT4oKmluc3BlY3Rvci5maXJzdCgpKSkK
KyAgICAgICAgICAgIGlmICghaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSkpCiAgICAgICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUmIHByaW1pdGl2
ZVZhbHVlID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCppbnNwZWN0b3IuZmlyc3QoKSk7
CisgICAgICAgICAgICBhdXRvJiBwcmltaXRpdmVWYWx1ZSA9IGRvd25jYXN0PENTU1ByaW1pdGl2
ZVZhbHVlPigqdmFsdWUpOwogICAgICAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLmlzTGVuZ3Ro
KCkpIHsKICAgICAgICAgICAgICAgICAvLyA8bGVuZ3RoPgogICAgICAgICAgICAgICAgIHBhZ2VT
aXplVHlwZSA9IFBBR0VfU0laRV9SRVNPTFZFRDsKQEAgLTE0OTgsOCArMTUwOCwxMCBAQCBwdWJs
aWM6CiAgICAgICAgIH0KIAogICAgICAgICBUZXh0RW1waGFzaXNQb3NpdGlvbiBwb3NpdGlvbiA9
IDA7Ci0gICAgICAgIGZvciAoQ1NTVmFsdWVMaXN0SXRlcmF0b3IgaSh2YWx1ZSk7IGkuaGFzTW9y
ZSgpOyBpLmFkdmFuY2UoKSkKLSAgICAgICAgICAgIHBvc2l0aW9uIHw9IHZhbHVlVG9FbXBoYXNp
c1Bvc2l0aW9uKGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqaS52YWx1ZSgpKSk7CisgICAg
ICAgIGlmIChpczxDU1NWYWx1ZUxpc3Q+KCp2YWx1ZSkpIHsKKyAgICAgICAgICAgIGZvciAoYXV0
byYgY3VycmVudFZhbHVlIDogZG93bmNhc3Q8Q1NTVmFsdWVMaXN0PigqdmFsdWUpKQorICAgICAg
ICAgICAgICAgIHBvc2l0aW9uIHw9IHZhbHVlVG9FbXBoYXNpc1Bvc2l0aW9uKGRvd25jYXN0PENT
U1ByaW1pdGl2ZVZhbHVlPihjdXJyZW50VmFsdWUuZ2V0KCkpKTsKKyAgICAgICAgfQogICAgICAg
ICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRUZXh0RW1waGFzaXNQb3NpdGlvbihwb3NpdGlv
bik7CiAgICAgfQogICAgIHN0YXRpYyBQcm9wZXJ0eUhhbmRsZXIgY3JlYXRlSGFuZGxlcigpCkBA
IC0xNTE1LDcgKzE1MjcsNyBAQCB0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwKICAgICAgICAgICBib29s
IChBbmltYXRpb246Oip0ZXN0RnVuY3Rpb24pKCkgY29uc3QsCiAgICAgICAgICAgdm9pZCAoQW5p
bWF0aW9uOjoqY2xlYXJGdW5jdGlvbikoKSwKICAgICAgICAgICBUICgqaW5pdGlhbEZ1bmN0aW9u
KSgpLAotICAgICAgICAgIHZvaWQgKENTU1RvU3R5bGVNYXA6OiptYXBGdW5jdGlvbikoQW5pbWF0
aW9uKiwgQ1NTVmFsdWUqKSwKKyAgICAgICAgICB2b2lkIChDU1NUb1N0eWxlTWFwOjoqbWFwRnVu
Y3Rpb24pKEFuaW1hdGlvbiosIENTU1ZhbHVlJiksCiAgICAgICAgICAgQW5pbWF0aW9uTGlzdCog
KFJlbmRlclN0eWxlOjoqYW5pbWF0aW9uR2V0dGVyRnVuY3Rpb24pKCksCiAgICAgICAgICAgY29u
c3QgQW5pbWF0aW9uTGlzdCogKFJlbmRlclN0eWxlOjoqaW1tdXRhYmxlQW5pbWF0aW9uR2V0dGVy
RnVuY3Rpb24pKCkgY29uc3Q+CiBjbGFzcyBBcHBseVByb3BlcnR5QW5pbWF0aW9uIHsKQEAgLTE1
MjUsNyArMTUzNyw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgYm9vbCB0ZXN0KGNvbnN0IEFuaW1h
dGlvbiYgYW5pbWF0aW9uKSB7IHJldHVybiAoYW5pbWF0aW9uLip0ZXN0RnVuY3Rpb24pKCk7IH0K
ICAgICBzdGF0aWMgdm9pZCBjbGVhcihBbmltYXRpb24mIGFuaW1hdGlvbikgeyAoYW5pbWF0aW9u
LipjbGVhckZ1bmN0aW9uKSgpOyB9CiAgICAgc3RhdGljIFQgaW5pdGlhbCgpIHsgcmV0dXJuICgq
aW5pdGlhbEZ1bmN0aW9uKSgpOyB9Ci0gICAgc3RhdGljIHZvaWQgbWFwKFN0eWxlUmVzb2x2ZXIq
IHN0eWxlUmVzb2x2ZXIsIEFuaW1hdGlvbiYgYW5pbWF0aW9uLCBDU1NWYWx1ZSogdmFsdWUpIHsg
KHN0eWxlUmVzb2x2ZXItPnN0eWxlTWFwKCktPiptYXBGdW5jdGlvbikoJmFuaW1hdGlvbiwgdmFs
dWUpOyB9CisgICAgc3RhdGljIHZvaWQgbWFwKFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIs
IEFuaW1hdGlvbiYgYW5pbWF0aW9uLCBDU1NWYWx1ZSYgdmFsdWUpIHsgKHN0eWxlUmVzb2x2ZXIt
PnN0eWxlTWFwKCktPiptYXBGdW5jdGlvbikoJmFuaW1hdGlvbiwgdmFsdWUpOyB9CiAgICAgc3Rh
dGljIEFuaW1hdGlvbkxpc3QqIGFjY2Vzc0FuaW1hdGlvbnMoUmVuZGVyU3R5bGUqIHN0eWxlKSB7
IHJldHVybiAoc3R5bGUtPiphbmltYXRpb25HZXR0ZXJGdW5jdGlvbikoKTsgfQogICAgIHN0YXRp
YyBjb25zdCBBbmltYXRpb25MaXN0KiBhbmltYXRpb25zKFJlbmRlclN0eWxlKiBzdHlsZSkgeyBy
ZXR1cm4gKHN0eWxlLT4qaW1tdXRhYmxlQW5pbWF0aW9uR2V0dGVyRnVuY3Rpb24pKCk7IH0KIApA
QCAtMTU2MiwxOCArMTU3NCwxOCBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBBbmltYXRpb25M
aXN0KiBsaXN0ID0gYWNjZXNzQW5pbWF0aW9ucyhzdHlsZVJlc29sdmVyLT5zdHlsZSgpKTsKICAg
ICAgICAgc2l6ZV90IGNoaWxkSW5kZXggPSAwOwotICAgICAgICBpZiAodmFsdWUtPmlzVmFsdWVM
aXN0KCkpIHsKKyAgICAgICAgaWYgKGlzPENTU1ZhbHVlTGlzdD4oKnZhbHVlKSkgewogICAgICAg
ICAgICAgLyogV2FsayBlYWNoIHZhbHVlIGFuZCBwdXQgaXQgaW50byBhbiBhbmltYXRpb24sIGNy
ZWF0aW5nIG5ldyBhbmltYXRpb25zIGFzIG5lZWRlZC4gKi8KLSAgICAgICAgICAgIGZvciAoQ1NT
VmFsdWVMaXN0SXRlcmF0b3IgaSA9IHZhbHVlOyBpLmhhc01vcmUoKTsgaS5hZHZhbmNlKCkpIHsK
KyAgICAgICAgICAgIGZvciAoYXV0byYgY3VycmVudFZhbHVlIDogZG93bmNhc3Q8Q1NTVmFsdWVM
aXN0PigqdmFsdWUpKSB7CiAgICAgICAgICAgICAgICAgaWYgKGNoaWxkSW5kZXggPD0gbGlzdC0+
c2l6ZSgpKQogICAgICAgICAgICAgICAgICAgICBsaXN0LT5hcHBlbmQoQW5pbWF0aW9uOjpjcmVh
dGUoKSk7Ci0gICAgICAgICAgICAgICAgbWFwKHN0eWxlUmVzb2x2ZXIsIGxpc3QtPmFuaW1hdGlv
bihjaGlsZEluZGV4KSwgaS52YWx1ZSgpKTsKKyAgICAgICAgICAgICAgICBtYXAoc3R5bGVSZXNv
bHZlciwgbGlzdC0+YW5pbWF0aW9uKGNoaWxkSW5kZXgpLCBjdXJyZW50VmFsdWUuZ2V0KCkpOwog
ICAgICAgICAgICAgICAgICsrY2hpbGRJbmRleDsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBl
bHNlIHsKICAgICAgICAgICAgIGlmIChsaXN0LT5pc0VtcHR5KCkpCiAgICAgICAgICAgICAgICAg
bGlzdC0+YXBwZW5kKEFuaW1hdGlvbjo6Y3JlYXRlKCkpOwotICAgICAgICAgICAgbWFwKHN0eWxl
UmVzb2x2ZXIsIGxpc3QtPmFuaW1hdGlvbihjaGlsZEluZGV4KSwgdmFsdWUpOworICAgICAgICAg
ICAgbWFwKHN0eWxlUmVzb2x2ZXIsIGxpc3QtPmFuaW1hdGlvbihjaGlsZEluZGV4KSwgKnZhbHVl
KTsKICAgICAgICAgICAgIGNoaWxkSW5kZXggPSAxOwogICAgICAgICB9CiAgICAgICAgIGZvciAo
IDsgY2hpbGRJbmRleCA8IGxpc3QtPnNpemUoKTsgKytjaGlsZEluZGV4KSB7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVCdWlsZGVyQ29udmVydGVyLmggYi9Tb3VyY2UvV2Vi
Q29yZS9jc3MvU3R5bGVCdWlsZGVyQ29udmVydGVyLmgKaW5kZXggMjNmN2JiNTg1ZjcyNTY1ZDIx
N2IzOGEwNWRlYmVhZWQ2MGEyNTZmZS4uYmE3MDkyNTdiMDZmMTU1NmE1MzkxYmMxYTEwODJmNGU5
ZjVkMzA4MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlQnVpbGRlckNvbnZl
cnRlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZUJ1aWxkZXJDb252ZXJ0ZXIuaApA
QCAtMjAxLDggKzIwMSwxMCBAQCBpbmxpbmUgTGVuZ3RoU2l6ZSBTdHlsZUJ1aWxkZXJDb252ZXJ0
ZXI6OmNvbnZlcnRSYWRpdXMoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbAogaW5saW5lIFRleHRE
ZWNvcmF0aW9uIFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydFRleHREZWNvcmF0aW9uKFN0
eWxlUmVzb2x2ZXImLCBDU1NWYWx1ZSYgdmFsdWUpCiB7CiAgICAgVGV4dERlY29yYXRpb24gcmVz
dWx0ID0gUmVuZGVyU3R5bGU6OmluaXRpYWxUZXh0RGVjb3JhdGlvbigpOwotICAgIGZvciAoQ1NT
VmFsdWVMaXN0SXRlcmF0b3IgaXQoJnZhbHVlKTsgaXQuaGFzTW9yZSgpOyBpdC5hZHZhbmNlKCkp
Ci0gICAgICAgIHJlc3VsdCB8PSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oKml0LnZhbHVl
KCkpOworICAgIGlmIChpczxDU1NWYWx1ZUxpc3Q+KHZhbHVlKSkgeworICAgICAgICBmb3IgKGF1
dG8mIGN1cnJlbnRWYWx1ZSA6IGRvd25jYXN0PENTU1ZhbHVlTGlzdD4odmFsdWUpKQorICAgICAg
ICAgICAgcmVzdWx0IHw9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPihjdXJyZW50VmFsdWUu
Z2V0KCkpOworICAgIH0KICAgICByZXR1cm4gcmVzdWx0OwogfQogCkBAIC0yNDIsNyArMjQ0LDcg
QEAgaW5saW5lIE5pbmVQaWVjZUltYWdlIFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydEJv
cmRlck1hc2soU3R5bGVSZXNvbHZlciYgc3QKIHRlbXBsYXRlIDxDU1NQcm9wZXJ0eUlEIHByb3Bl
cnR5PgogaW5saW5lIFBhc3NSZWZQdHI8U3R5bGVJbWFnZT4gU3R5bGVCdWlsZGVyQ29udmVydGVy
Ojpjb252ZXJ0Qm9yZGVySW1hZ2VTb3VyY2UoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlciwg
Q1NTVmFsdWUmIHZhbHVlKQogewotICAgIHJldHVybiBzdHlsZVJlc29sdmVyLnN0eWxlSW1hZ2Uo
cHJvcGVydHksICZ2YWx1ZSk7CisgICAgcmV0dXJuIHN0eWxlUmVzb2x2ZXIuc3R5bGVJbWFnZShw
cm9wZXJ0eSwgdmFsdWUpOwogfQogCiBpbmxpbmUgVHJhbnNmb3JtT3BlcmF0aW9ucyBTdHlsZUJ1
aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRUcmFuc2Zvcm0oU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNv
bHZlciwgQ1NTVmFsdWUmIHZhbHVlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL1N0
eWxlQnVpbGRlckN1c3RvbS5oIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlQnVpbGRlckN1c3Rv
bS5oCmluZGV4IDEwMGZhY2UxZjMyN2RiNTMzNTkzMzY2ZDkwOWJhYTg4NWZkYzcyMDQuLjc2ZmY4
YWM1MDdhNTRmMTBlN2M4OWMxNzg0MzY1NjFiZTVhMWRhMmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2Nzcy9TdHlsZUJ1aWxkZXJDdXN0b20uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3Mv
U3R5bGVCdWlsZGVyQ3VzdG9tLmgKQEAgLTEyMiwxNCArMTIyLDEzIEBAIGlubGluZSB2b2lkIGFw
cGx5VmFsdWVXZWJraXRTaGFwZU91dHNpZGUoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlciwg
Q1NTVmFsdWUmCiAgICAgICAgIGlmIChkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4odmFsdWUp
LmdldFZhbHVlSUQoKSA9PSBDU1NWYWx1ZUF1dG8pCiAgICAgICAgICAgICBzdHlsZVJlc29sdmVy
LnN0eWxlKCktPnNldFNoYXBlT3V0c2lkZShudWxscHRyKTsKICAgICB9IGlmIChpczxDU1NJbWFn
ZVZhbHVlPih2YWx1ZSkgfHwgaXM8Q1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZT4odmFsdWUpIHx8IGlz
PENTU0ltYWdlU2V0VmFsdWU+KHZhbHVlKSkgewotICAgICAgICBSZWZQdHI8U2hhcGVWYWx1ZT4g
c2hhcGUgPSBTaGFwZVZhbHVlOjpjcmVhdGVJbWFnZVZhbHVlKHN0eWxlUmVzb2x2ZXIuc3R5bGVJ
bWFnZShDU1NQcm9wZXJ0eVdlYmtpdFNoYXBlT3V0c2lkZSwgJnZhbHVlKSk7CisgICAgICAgIFJl
ZlB0cjxTaGFwZVZhbHVlPiBzaGFwZSA9IFNoYXBlVmFsdWU6OmNyZWF0ZUltYWdlVmFsdWUoc3R5
bGVSZXNvbHZlci5zdHlsZUltYWdlKENTU1Byb3BlcnR5V2Via2l0U2hhcGVPdXRzaWRlLCB2YWx1
ZSkpOwogICAgICAgICBzdHlsZVJlc29sdmVyLnN0eWxlKCktPnNldFNoYXBlT3V0c2lkZShzaGFw
ZS5yZWxlYXNlKCkpOwogICAgIH0gZWxzZSBpZiAoaXM8Q1NTVmFsdWVMaXN0Pih2YWx1ZSkpIHsK
ICAgICAgICAgUmVmUHRyPEJhc2ljU2hhcGU+IHNoYXBlOwogICAgICAgICBDU1NCb3hUeXBlIHJl
ZmVyZW5jZUJveCA9IEJveE1pc3Npbmc7Ci0gICAgICAgIGF1dG8mIHZhbHVlTGlzdCA9IGRvd25j
YXN0PENTU1ZhbHVlTGlzdD4odmFsdWUpOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgdmFsdWVMaXN0Lmxlbmd0aCgpOyArK2kpIHsKLSAgICAgICAgICAgIENTU1ByaW1pdGl2ZVZh
bHVlJiBwcmltaXRpdmVWYWx1ZSA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWVM
aXN0Lml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soaSkpOworICAgICAgICBmb3IgKGF1dG8mIGN1cnJl
bnRWYWx1ZSA6IGRvd25jYXN0PENTU1ZhbHVlTGlzdD4odmFsdWUpKSB7CisgICAgICAgICAgICBD
U1NQcmltaXRpdmVWYWx1ZSYgcHJpbWl0aXZlVmFsdWUgPSBkb3duY2FzdDxDU1NQcmltaXRpdmVW
YWx1ZT4oY3VycmVudFZhbHVlLmdldCgpKTsKICAgICAgICAgICAgIGlmIChwcmltaXRpdmVWYWx1
ZS5pc1NoYXBlKCkpCiAgICAgICAgICAgICAgICAgc2hhcGUgPSBiYXNpY1NoYXBlRm9yVmFsdWUo
c3R5bGVSZXNvbHZlci5zdGF0ZSgpLmNzc1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEoKSwgcHJpbWl0
aXZlVmFsdWUuZ2V0U2hhcGVWYWx1ZSgpKTsKICAgICAgICAgICAgIGVsc2UgaWYgKHByaW1pdGl2
ZVZhbHVlLmdldFZhbHVlSUQoKSA9PSBDU1NWYWx1ZUNvbnRlbnRCb3gKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9T
dHlsZVJlc29sdmVyLmNwcAppbmRleCAxNjM3NDJmMDg3YzYxOGNkOWQyYTdhNzMyYTAyMGVkZmVi
NDg0NWMwLi5hZjU5MDVjNTRhNmMzYTFlOGVhMjJiMDZlZWZmOWY1MzQ1ZTk1ZDc3IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuY3BwCkBAIC0xOTI5LDEwICsxOTI5LDEwIEBAIHN0YXRp
YyBib29sIGNyZWF0ZUdyaWRUcmFja0JyZWFkdGgoQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2
ZVZhbHVlLCBjb25zdCBTdHlsCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXN0YXRpYyBib29sIGNy
ZWF0ZUdyaWRUcmFja1NpemUoQ1NTVmFsdWUqIHZhbHVlLCBHcmlkVHJhY2tTaXplJiB0cmFja1Np
emUsIGNvbnN0IFN0eWxlUmVzb2x2ZXI6OlN0YXRlJiBzdGF0ZSkKK3N0YXRpYyBib29sIGNyZWF0
ZUdyaWRUcmFja1NpemUoQ1NTVmFsdWUmIHZhbHVlLCBHcmlkVHJhY2tTaXplJiB0cmFja1NpemUs
IGNvbnN0IFN0eWxlUmVzb2x2ZXI6OlN0YXRlJiBzdGF0ZSkKIHsKLSAgICBpZiAoaXM8Q1NTUHJp
bWl0aXZlVmFsdWU+KCp2YWx1ZSkpIHsKLSAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUmIHByaW1p
dGl2ZVZhbHVlID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSk7CisgICAgaWYg
KGlzPENTU1ByaW1pdGl2ZVZhbHVlPih2YWx1ZSkpIHsKKyAgICAgICAgQ1NTUHJpbWl0aXZlVmFs
dWUmIHByaW1pdGl2ZVZhbHVlID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVlKTsK
ICAgICAgICAgR3JpZExlbmd0aCB3b3JraW5nTGVuZ3RoOwogICAgICAgICBpZiAoIWNyZWF0ZUdy
aWRUcmFja0JyZWFkdGgoJnByaW1pdGl2ZVZhbHVlLCBzdGF0ZSwgd29ya2luZ0xlbmd0aCkpCiAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0xOTQxLDcgKzE5NDEsNyBAQCBzdGF0aWMgYm9v
bCBjcmVhdGVHcmlkVHJhY2tTaXplKENTU1ZhbHVlKiB2YWx1ZSwgR3JpZFRyYWNrU2l6ZSYgdHJh
Y2tTaXplLCBjb25zdAogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKLSAgICBDU1NGdW5j
dGlvblZhbHVlJiBtaW5tYXhGdW5jdGlvbiA9IGRvd25jYXN0PENTU0Z1bmN0aW9uVmFsdWU+KCp2
YWx1ZSk7CisgICAgQ1NTRnVuY3Rpb25WYWx1ZSYgbWlubWF4RnVuY3Rpb24gPSBkb3duY2FzdDxD
U1NGdW5jdGlvblZhbHVlPih2YWx1ZSk7CiAgICAgQ1NTVmFsdWVMaXN0KiBhcmd1bWVudHMgPSBt
aW5tYXhGdW5jdGlvbi5hcmd1bWVudHMoKTsKICAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBM
SUNBVElPTihhcmd1bWVudHMtPmxlbmd0aCgpID09IDIpOwogICAgIEdyaWRMZW5ndGggbWluVHJh
Y2tCcmVhZHRoOwpAQCAtMTk2MSwxNiArMTk2MSwxNCBAQCBzdGF0aWMgYm9vbCBjcmVhdGVHcmlk
VHJhY2tMaXN0KENTU1ZhbHVlKiB2YWx1ZSwgVmVjdG9yPEdyaWRUcmFja1NpemU+JiB0cmFja1Np
egogICAgICAgICByZXR1cm4gcHJpbWl0aXZlVmFsdWUuZ2V0VmFsdWVJRCgpID09IENTU1ZhbHVl
Tm9uZTsKICAgICB9CiAKLSAgICBpZiAoIXZhbHVlLT5pc1ZhbHVlTGlzdCgpKQorICAgIGlmICgh
aXM8Q1NTVmFsdWVMaXN0PigqdmFsdWUpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBz
aXplX3QgY3VycmVudE5hbWVkR3JpZExpbmUgPSAwOwotICAgIGZvciAoQ1NTVmFsdWVMaXN0SXRl
cmF0b3IgaSA9IHZhbHVlOyBpLmhhc01vcmUoKTsgaS5hZHZhbmNlKCkpIHsKLSAgICAgICAgQ1NT
VmFsdWUqIGN1cnJWYWx1ZSA9IGkudmFsdWUoKTsKLSAgICAgICAgaWYgKGlzPENTU0dyaWRMaW5l
TmFtZXNWYWx1ZT4oKmN1cnJWYWx1ZSkpIHsKLSAgICAgICAgICAgIENTU0dyaWRMaW5lTmFtZXNW
YWx1ZSYgbGluZU5hbWVzVmFsdWUgPSBkb3duY2FzdDxDU1NHcmlkTGluZU5hbWVzVmFsdWU+KCpj
dXJyVmFsdWUpOwotICAgICAgICAgICAgZm9yIChDU1NWYWx1ZUxpc3RJdGVyYXRvciBqID0gJmxp
bmVOYW1lc1ZhbHVlOyBqLmhhc01vcmUoKTsgai5hZHZhbmNlKCkpIHsKLSAgICAgICAgICAgICAg
ICBTdHJpbmcgbmFtZWRHcmlkTGluZSA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPihqLnZh
bHVlKCkpLT5nZXRTdHJpbmdWYWx1ZSgpOworICAgIGZvciAoYXV0byYgY3VycmVudFZhbHVlIDog
ZG93bmNhc3Q8Q1NTVmFsdWVMaXN0PigqdmFsdWUpKSB7CisgICAgICAgIGlmIChpczxDU1NHcmlk
TGluZU5hbWVzVmFsdWU+KGN1cnJlbnRWYWx1ZS5nZXQoKSkpIHsKKyAgICAgICAgICAgIGZvciAo
YXV0byYgY3VycmVudEdyaWRMaW5lTmFtZSA6IGRvd25jYXN0PENTU0dyaWRMaW5lTmFtZXNWYWx1
ZT4oY3VycmVudFZhbHVlLmdldCgpKSkgeworICAgICAgICAgICAgICAgIFN0cmluZyBuYW1lZEdy
aWRMaW5lID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KGN1cnJlbnRHcmlkTGluZU5hbWUu
Z2V0KCkpLmdldFN0cmluZ1ZhbHVlKCk7CiAgICAgICAgICAgICAgICAgTmFtZWRHcmlkTGluZXNN
YXA6OkFkZFJlc3VsdCByZXN1bHQgPSBuYW1lZEdyaWRMaW5lcy5hZGQobmFtZWRHcmlkTGluZSwg
VmVjdG9yPHNpemVfdD4oKSk7CiAgICAgICAgICAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1
ZS5hcHBlbmQoY3VycmVudE5hbWVkR3JpZExpbmUpOwogICAgICAgICAgICAgICAgIE9yZGVyZWRO
YW1lZEdyaWRMaW5lc01hcDo6QWRkUmVzdWx0IG9yZGVyZWRSZXN1bHQgPSBvcmRlcmVkTmFtZWRH
cmlkTGluZXMuYWRkKGN1cnJlbnROYW1lZEdyaWRMaW5lLCBWZWN0b3I8U3RyaW5nPigpKTsKQEAg
LTE5ODEsNyArMTk3OSw3IEBAIHN0YXRpYyBib29sIGNyZWF0ZUdyaWRUcmFja0xpc3QoQ1NTVmFs
dWUqIHZhbHVlLCBWZWN0b3I8R3JpZFRyYWNrU2l6ZT4mIHRyYWNrU2l6CiAKICAgICAgICAgKytj
dXJyZW50TmFtZWRHcmlkTGluZTsKICAgICAgICAgR3JpZFRyYWNrU2l6ZSB0cmFja1NpemU7Ci0g
ICAgICAgIGlmICghY3JlYXRlR3JpZFRyYWNrU2l6ZShjdXJyVmFsdWUsIHRyYWNrU2l6ZSwgc3Rh
dGUpKQorICAgICAgICBpZiAoIWNyZWF0ZUdyaWRUcmFja1NpemUoY3VycmVudFZhbHVlLmdldCgp
LCB0cmFja1NpemUsIHN0YXRlKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgICAg
ICB0cmFja1NpemVzLmFwcGVuZCh0cmFja1NpemUpOwpAQCAtMjAxMCwzMyArMjAwOCwzMyBAQCBz
dGF0aWMgYm9vbCBjcmVhdGVHcmlkUG9zaXRpb24oQ1NTVmFsdWUqIHZhbHVlLCBHcmlkUG9zaXRp
b24mIHBvc2l0aW9uKQogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKLSAgICBDU1NWYWx1
ZUxpc3QmIHZhbHVlcyA9IGRvd25jYXN0PENTU1ZhbHVlTGlzdD4oKnZhbHVlKTsKKyAgICBhdXRv
JiB2YWx1ZXMgPSBkb3duY2FzdDxDU1NWYWx1ZUxpc3Q+KCp2YWx1ZSk7CiAgICAgQVNTRVJUKHZh
bHVlcy5sZW5ndGgoKSk7CiAKICAgICBib29sIGlzU3BhblBvc2l0aW9uID0gZmFsc2U7CiAgICAg
aW50IGdyaWRMaW5lTnVtYmVyID0gMDsKICAgICBTdHJpbmcgZ3JpZExpbmVOYW1lOwogCi0gICAg
Q1NTVmFsdWVMaXN0SXRlcmF0b3IgaXQgPSAmdmFsdWVzOwotICAgIENTU1ByaW1pdGl2ZVZhbHVl
KiBjdXJyZW50VmFsdWUgPSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oaXQudmFsdWUoKSk7
CisgICAgYXV0byBpdCA9IHZhbHVlcy5iZWdpbigpOworICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBj
dXJyZW50VmFsdWUgPSAmZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KGl0LT5nZXQoKSk7CiAg
ICAgaWYgKGN1cnJlbnRWYWx1ZS0+Z2V0VmFsdWVJRCgpID09IENTU1ZhbHVlU3BhbikgewogICAg
ICAgICBpc1NwYW5Qb3NpdGlvbiA9IHRydWU7Ci0gICAgICAgIGl0LmFkdmFuY2UoKTsKLSAgICAg
ICAgY3VycmVudFZhbHVlID0gaXQuaGFzTW9yZSgpID8gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFs
dWU+KGl0LnZhbHVlKCkpIDogbnVsbHB0cjsKKyAgICAgICAgKytpdDsKKyAgICAgICAgY3VycmVu
dFZhbHVlID0gaXQgIT0gdmFsdWVzLmVuZCgpID8gJmRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVl
PihpdC0+Z2V0KCkpIDogbnVsbHB0cjsKICAgICB9CiAKICAgICBpZiAoY3VycmVudFZhbHVlICYm
IGN1cnJlbnRWYWx1ZS0+aXNOdW1iZXIoKSkgewogICAgICAgICBncmlkTGluZU51bWJlciA9IGN1
cnJlbnRWYWx1ZS0+Z2V0SW50VmFsdWUoKTsKLSAgICAgICAgaXQuYWR2YW5jZSgpOwotICAgICAg
ICBjdXJyZW50VmFsdWUgPSBpdC5oYXNNb3JlKCkgPyBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1
ZT4oaXQudmFsdWUoKSkgOiBudWxscHRyOworICAgICAgICArK2l0OworICAgICAgICBjdXJyZW50
VmFsdWUgPSBpdCAhPSB2YWx1ZXMuZW5kKCkgPyAmZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+
KGl0LT5nZXQoKSkgOiBudWxscHRyOwogICAgIH0KIAogICAgIGlmIChjdXJyZW50VmFsdWUgJiYg
Y3VycmVudFZhbHVlLT5pc1N0cmluZygpKSB7CiAgICAgICAgIGdyaWRMaW5lTmFtZSA9IGN1cnJl
bnRWYWx1ZS0+Z2V0U3RyaW5nVmFsdWUoKTsKLSAgICAgICAgaXQuYWR2YW5jZSgpOworICAgICAg
ICArK2l0OwogICAgIH0KIAotICAgIEFTU0VSVCghaXQuaGFzTW9yZSgpKTsKKyAgICBBU1NFUlQo
aXQgIT0gdmFsdWVzLmVuZCgpKTsKICAgICBpZiAoaXNTcGFuUG9zaXRpb24pCiAgICAgICAgIHBv
c2l0aW9uLnNldFNwYW5Qb3NpdGlvbihncmlkTGluZU51bWJlciA/IGdyaWRMaW5lTnVtYmVyIDog
MSwgZ3JpZExpbmVOYW1lKTsKICAgICBlbHNlCkBAIC0yMDczLDE2ICsyMDcxLDE4IEBAIFNjcm9s
bFNuYXBQb2ludHMgU3R5bGVSZXNvbHZlcjo6cGFyc2VTbmFwUG9pbnRzKENTU1ZhbHVlJiB2YWx1
ZSkKICAgICB9CiAKICAgICBwb2ludHMuaGFzUmVwZWF0ID0gZmFsc2U7Ci0gICAgZm9yIChDU1NW
YWx1ZUxpc3RJdGVyYXRvciBpdCgmdmFsdWUpOyBpdC5oYXNNb3JlKCk7IGl0LmFkdmFuY2UoKSkg
ewotICAgICAgICBhdXRvJiBpdGVtVmFsdWUgPSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4o
Kml0LnZhbHVlKCkpOwotICAgICAgICBpZiAoYXV0byogbGVuZ3RoUmVwZWF0ID0gaXRlbVZhbHVl
LmdldExlbmd0aFJlcGVhdFZhbHVlKCkpIHsKLSAgICAgICAgICAgIGlmIChhdXRvKiBpbnRlcnZh
bCA9IGxlbmd0aFJlcGVhdC0+aW50ZXJ2YWwoKSkgewotICAgICAgICAgICAgICAgIHBvaW50cy5y
ZXBlYXRPZmZzZXQgPSBwYXJzZVNuYXBDb29yZGluYXRlKCppbnRlcnZhbCk7Ci0gICAgICAgICAg
ICAgICAgcG9pbnRzLmhhc1JlcGVhdCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgaWYgKGlzPENTU1ZhbHVlTGlzdD4odmFsdWUpKSB7CisgICAgICAgIGZvciAoYXV0byYgY3Vy
cmVudFZhbHVlIDogZG93bmNhc3Q8Q1NTVmFsdWVMaXN0Pih2YWx1ZSkpIHsKKyAgICAgICAgICAg
IGF1dG8mIGl0ZW1WYWx1ZSA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPihjdXJyZW50VmFs
dWUuZ2V0KCkpOworICAgICAgICAgICAgaWYgKGF1dG8qIGxlbmd0aFJlcGVhdCA9IGl0ZW1WYWx1
ZS5nZXRMZW5ndGhSZXBlYXRWYWx1ZSgpKSB7CisgICAgICAgICAgICAgICAgaWYgKGF1dG8qIGlu
dGVydmFsID0gbGVuZ3RoUmVwZWF0LT5pbnRlcnZhbCgpKSB7CisgICAgICAgICAgICAgICAgICAg
IHBvaW50cy5yZXBlYXRPZmZzZXQgPSBwYXJzZVNuYXBDb29yZGluYXRlKCppbnRlcnZhbCk7Cisg
ICAgICAgICAgICAgICAgICAgIHBvaW50cy5oYXNSZXBlYXQgPSB0cnVlOworICAgICAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CisgICAgICAg
ICAgICBwb2ludHMub2Zmc2V0cy5hcHBlbmQocGFyc2VTbmFwQ29vcmRpbmF0ZShpdGVtVmFsdWUp
KTsKICAgICAgICAgfQotICAgICAgICBwb2ludHMub2Zmc2V0cy5hcHBlbmQocGFyc2VTbmFwQ29v
cmRpbmF0ZShpdGVtVmFsdWUpKTsKICAgICB9CiAKICAgICByZXR1cm4gcG9pbnRzOwpAQCAtMjE0
OCwzNSArMjE0OCwzNCBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHkoQ1NTUHJv
cGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAgICAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgICAgIH0KIAotICAgICAgICAgICAgaWYgKCF2YWx1ZS0+aXNWYWx1ZUxpc3QoKSkKKyAg
ICAgICAgICAgIGlmICghaXM8Q1NTVmFsdWVMaXN0PigqdmFsdWUpKQogICAgICAgICAgICAgICAg
IHJldHVybjsKIAogICAgICAgICAgICAgYm9vbCBkaWRTZXQgPSBmYWxzZTsKLSAgICAgICAgICAg
IGZvciAoQ1NTVmFsdWVMaXN0SXRlcmF0b3IgaSA9IHZhbHVlOyBpLmhhc01vcmUoKTsgaS5hZHZh
bmNlKCkpIHsKLSAgICAgICAgICAgICAgICBDU1NWYWx1ZSogaXRlbSA9IGkudmFsdWUoKTsKLSAg
ICAgICAgICAgICAgICBpZiAoaXM8Q1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZT4oKml0ZW0pKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIGlmIChpczxDU1NHcmFkaWVudFZhbHVlPigqaXRlbSkpCi0gICAg
ICAgICAgICAgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRDb250ZW50KFN0eWxlR2VuZXJh
dGVkSW1hZ2U6OmNyZWF0ZSgqZG93bmNhc3Q8Q1NTR3JhZGllbnRWYWx1ZT4oKml0ZW0pLmdyYWRp
ZW50V2l0aFN0eWxlc1Jlc29sdmVkKHRoaXMpKSwgZGlkU2V0KTsKKyAgICAgICAgICAgIGZvciAo
YXV0byYgaXRlbSA6IGRvd25jYXN0PENTU1ZhbHVlTGlzdD4oKnZhbHVlKSkgeworICAgICAgICAg
ICAgICAgIGlmIChpczxDU1NJbWFnZUdlbmVyYXRvclZhbHVlPihpdGVtLmdldCgpKSkgeworICAg
ICAgICAgICAgICAgICAgICBpZiAoaXM8Q1NTR3JhZGllbnRWYWx1ZT4oaXRlbS5nZXQoKSkpCisg
ICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRDb250ZW50KFN0eWxlR2Vu
ZXJhdGVkSW1hZ2U6OmNyZWF0ZSgqZG93bmNhc3Q8Q1NTR3JhZGllbnRWYWx1ZT4oaXRlbS5nZXQo
KSkuZ3JhZGllbnRXaXRoU3R5bGVzUmVzb2x2ZWQodGhpcykpLCBkaWRTZXQpOwogICAgICAgICAg
ICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5z
ZXRDb250ZW50KFN0eWxlR2VuZXJhdGVkSW1hZ2U6OmNyZWF0ZShkb3duY2FzdDxDU1NJbWFnZUdl
bmVyYXRvclZhbHVlPigqaXRlbSkpLCBkaWRTZXQpOworICAgICAgICAgICAgICAgICAgICAgICAg
c3RhdGUuc3R5bGUoKS0+c2V0Q29udGVudChTdHlsZUdlbmVyYXRlZEltYWdlOjpjcmVhdGUoZG93
bmNhc3Q8Q1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZT4oaXRlbS5nZXQoKSkpLCBkaWRTZXQpOwogICAg
ICAgICAgICAgICAgICAgICBkaWRTZXQgPSB0cnVlOwogI2lmIEVOQUJMRShDU1NfSU1BR0VfU0VU
KQotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaXM8Q1NTSW1hZ2VTZXRWYWx1ZT4oKml0ZW0p
KSB7Ci0gICAgICAgICAgICAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldENvbnRlbnQoc2V0T3JQ
ZW5kaW5nRnJvbVZhbHVlKENTU1Byb3BlcnR5Q29udGVudCwgZG93bmNhc3Q8Q1NTSW1hZ2VTZXRW
YWx1ZT4oaXRlbSkpLCBkaWRTZXQpOworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaXM8Q1NT
SW1hZ2VTZXRWYWx1ZT4oaXRlbS5nZXQoKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgc3RhdGUu
c3R5bGUoKS0+c2V0Q29udGVudChzZXRPclBlbmRpbmdGcm9tVmFsdWUoQ1NTUHJvcGVydHlDb250
ZW50LCBkb3duY2FzdDxDU1NJbWFnZVNldFZhbHVlPihpdGVtLmdldCgpKSksIGRpZFNldCk7CiAg
ICAgICAgICAgICAgICAgICAgIGRpZFNldCA9IHRydWU7CiAjZW5kaWYKICAgICAgICAgICAgICAg
ICB9CiAKLSAgICAgICAgICAgICAgICBpZiAoaXM8Q1NTSW1hZ2VWYWx1ZT4oKml0ZW0pKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldENvbnRlbnQoY2FjaGVkT3JQZW5k
aW5nRnJvbVZhbHVlKENTU1Byb3BlcnR5Q29udGVudCwgZG93bmNhc3Q8Q1NTSW1hZ2VWYWx1ZT4o
aXRlbSkpLCBkaWRTZXQpOworICAgICAgICAgICAgICAgIGlmIChpczxDU1NJbWFnZVZhbHVlPihp
dGVtLmdldCgpKSkgeworICAgICAgICAgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRDb250
ZW50KGNhY2hlZE9yUGVuZGluZ0Zyb21WYWx1ZShDU1NQcm9wZXJ0eUNvbnRlbnQsIGRvd25jYXN0
PENTU0ltYWdlVmFsdWU+KGl0ZW0uZ2V0KCkpKSwgZGlkU2V0KTsKICAgICAgICAgICAgICAgICAg
ICAgZGlkU2V0ID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAg
ICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgaWYgKCFpczxDU1NQcmltaXRpdmVWYWx1ZT4o
Kml0ZW0pKQorICAgICAgICAgICAgICAgIGlmICghaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KGl0ZW0u
Z2V0KCkpKQogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICAgICAgICAg
IENTU1ByaW1pdGl2ZVZhbHVlJiBjb250ZW50VmFsdWUgPSBkb3duY2FzdDxDU1NQcmltaXRpdmVW
YWx1ZT4oKml0ZW0pOworICAgICAgICAgICAgICAgIGF1dG8mIGNvbnRlbnRWYWx1ZSA9IGRvd25j
YXN0PENTU1ByaW1pdGl2ZVZhbHVlPihpdGVtLmdldCgpKTsKIAogICAgICAgICAgICAgICAgIGlm
IChjb250ZW50VmFsdWUuaXNTdHJpbmcoKSkgewogICAgICAgICAgICAgICAgICAgICBzdGF0ZS5z
dHlsZSgpLT5zZXRDb250ZW50KGNvbnRlbnRWYWx1ZS5nZXRTdHJpbmdWYWx1ZSgpLmltcGwoKSwg
ZGlkU2V0KTsKQEAgLTI0MDIsMTQgKzI0MDEsMTQgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBs
eVByb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICAgICAgaWYg
KGlzSW5pdGlhbCB8fCBwcmltaXRpdmVWYWx1ZSkgLy8gaW5pdGlhbCB8IG5vbmUKICAgICAgICAg
ICAgIHJldHVybiBpZCA9PSBDU1NQcm9wZXJ0eVRleHRTaGFkb3cgPyBzdGF0ZS5zdHlsZSgpLT5z
ZXRUZXh0U2hhZG93KG51bGxwdHIpIDogc3RhdGUuc3R5bGUoKS0+c2V0Qm94U2hhZG93KG51bGxw
dHIpOwogCi0gICAgICAgIGlmICghdmFsdWUtPmlzVmFsdWVMaXN0KCkpCisgICAgICAgIGlmICgh
aXM8Q1NTVmFsdWVMaXN0PigqdmFsdWUpKQogICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAg
IGZvciAoQ1NTVmFsdWVMaXN0SXRlcmF0b3IgaSA9IHZhbHVlOyBpLmhhc01vcmUoKTsgaS5hZHZh
bmNlKCkpIHsKLSAgICAgICAgICAgIENTU1ZhbHVlKiBjdXJyVmFsdWUgPSBpLnZhbHVlKCk7Ci0g
ICAgICAgICAgICBpZiAoIWlzPENTU1NoYWRvd1ZhbHVlPigqY3VyclZhbHVlKSkKKyAgICAgICAg
Ym9vbCBpc0ZpcnN0RW50cnkgPSB0cnVlOworICAgICAgICBmb3IgKGF1dG8mIGN1cnJlbnRWYWx1
ZSA6IGRvd25jYXN0PENTU1ZhbHVlTGlzdD4oKnZhbHVlKSkgeworICAgICAgICAgICAgaWYgKCFp
czxDU1NTaGFkb3dWYWx1ZT4oY3VycmVudFZhbHVlLmdldCgpKSkKICAgICAgICAgICAgICAgICBj
b250aW51ZTsKLSAgICAgICAgICAgIENTU1NoYWRvd1ZhbHVlJiBpdGVtID0gZG93bmNhc3Q8Q1NT
U2hhZG93VmFsdWU+KCpjdXJyVmFsdWUpOworICAgICAgICAgICAgYXV0byYgaXRlbSA9IGRvd25j
YXN0PENTU1NoYWRvd1ZhbHVlPihjdXJyZW50VmFsdWUuZ2V0KCkpOwogICAgICAgICAgICAgaW50
IHggPSBpdGVtLngtPmNvbXB1dGVMZW5ndGg8aW50PihzdGF0ZS5jc3NUb0xlbmd0aENvbnZlcnNp
b25EYXRhKCkpOwogICAgICAgICAgICAgaW50IHkgPSBpdGVtLnktPmNvbXB1dGVMZW5ndGg8aW50
PihzdGF0ZS5jc3NUb0xlbmd0aENvbnZlcnNpb25EYXRhKCkpOwogICAgICAgICAgICAgaW50IGJs
dXIgPSBpdGVtLmJsdXIgPyBpdGVtLmJsdXItPmNvbXB1dGVMZW5ndGg8aW50PihzdGF0ZS5jc3NU
b0xlbmd0aENvbnZlcnNpb25EYXRhKCkpIDogMDsKQEAgLTI0MjMsOSArMjQyMiwxMSBAQCB2b2lk
IFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUq
IHZhbHVlKQogCiAgICAgICAgICAgICBhdXRvIHNoYWRvd0RhdGEgPSBzdGQ6Om1ha2VfdW5pcXVl
PFNoYWRvd0RhdGE+KEludFBvaW50KHgsIHkpLCBibHVyLCBzcHJlYWQsIHNoYWRvd1N0eWxlLCBp
ZCA9PSBDU1NQcm9wZXJ0eVdlYmtpdEJveFNoYWRvdywgY29sb3IuaXNWYWxpZCgpID8gY29sb3Ig
OiBDb2xvcjo6dHJhbnNwYXJlbnQpOwogICAgICAgICAgICAgaWYgKGlkID09IENTU1Byb3BlcnR5
VGV4dFNoYWRvdykKLSAgICAgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRUZXh0U2hhZG93
KFdURjo6bW92ZShzaGFkb3dEYXRhKSwgaS5pbmRleCgpKTsgLy8gYWRkIHRvIHRoZSBsaXN0IGlm
IHRoaXMgaXMgbm90IHRoZSBmaXJzdCBlbnRyeQorICAgICAgICAgICAgICAgIHN0YXRlLnN0eWxl
KCktPnNldFRleHRTaGFkb3coV1RGOjptb3ZlKHNoYWRvd0RhdGEpLCAhaXNGaXJzdEVudHJ5KTsg
Ly8gYWRkIHRvIHRoZSBsaXN0IGlmIHRoaXMgaXMgbm90IHRoZSBmaXJzdCBlbnRyeQogICAgICAg
ICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldEJveFNoYWRvdyhX
VEY6Om1vdmUoc2hhZG93RGF0YSksIGkuaW5kZXgoKSk7IC8vIGFkZCB0byB0aGUgbGlzdCBpZiB0
aGlzIGlzIG5vdCB0aGUgZmlyc3QgZW50cnkKKyAgICAgICAgICAgICAgICBzdGF0ZS5zdHlsZSgp
LT5zZXRCb3hTaGFkb3coV1RGOjptb3ZlKHNoYWRvd0RhdGEpLCAhaXNGaXJzdEVudHJ5KTsgLy8g
YWRkIHRvIHRoZSBsaXN0IGlmIHRoaXMgaXMgbm90IHRoZSBmaXJzdCBlbnRyeQorCisgICAgICAg
ICAgICBpc0ZpcnN0RW50cnkgPSBmYWxzZTsKICAgICAgICAgfQogICAgICAgICByZXR1cm47CiAg
ICAgfQpAQCAtMjcwNSw3ICsyNzA2LDcgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVByb3Bl
cnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICBjYXNlIENTU1Byb3Bl
cnR5V2Via2l0R3JpZEF1dG9Db2x1bW5zOiB7CiAgICAgICAgIEhBTkRMRV9JTkhFUklUX0FORF9J
TklUSUFMKGdyaWRBdXRvQ29sdW1ucywgR3JpZEF1dG9Db2x1bW5zKTsKICAgICAgICAgR3JpZFRy
YWNrU2l6ZSB0cmFja1NpemU7Ci0gICAgICAgIGlmICghY3JlYXRlR3JpZFRyYWNrU2l6ZSh2YWx1
ZSwgdHJhY2tTaXplLCBzdGF0ZSkpCisgICAgICAgIGlmICghY3JlYXRlR3JpZFRyYWNrU2l6ZSgq
dmFsdWUsIHRyYWNrU2l6ZSwgc3RhdGUpKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBz
dGF0ZS5zdHlsZSgpLT5zZXRHcmlkQXV0b0NvbHVtbnModHJhY2tTaXplKTsKICAgICAgICAgcmV0
dXJuOwpAQCAtMjcxMyw3ICsyNzE0LDcgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVByb3Bl
cnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICBjYXNlIENTU1Byb3Bl
cnR5V2Via2l0R3JpZEF1dG9Sb3dzOiB7CiAgICAgICAgIEhBTkRMRV9JTkhFUklUX0FORF9JTklU
SUFMKGdyaWRBdXRvUm93cywgR3JpZEF1dG9Sb3dzKTsKICAgICAgICAgR3JpZFRyYWNrU2l6ZSB0
cmFja1NpemU7Ci0gICAgICAgIGlmICghY3JlYXRlR3JpZFRyYWNrU2l6ZSh2YWx1ZSwgdHJhY2tT
aXplLCBzdGF0ZSkpCisgICAgICAgIGlmICghY3JlYXRlR3JpZFRyYWNrU2l6ZSgqdmFsdWUsIHRy
YWNrU2l6ZSwgc3RhdGUpKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBzdGF0ZS5zdHls
ZSgpLT5zZXRHcmlkQXV0b1Jvd3ModHJhY2tTaXplKTsKICAgICAgICAgcmV0dXJuOwpAQCAtMzIx
MywzMyArMzIxNCwzMyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHkoQ1NTUHJv
cGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAgIH0KIH0KIAotUGFzc1JlZlB0cjxTdHls
ZUltYWdlPiBTdHlsZVJlc29sdmVyOjpzdHlsZUltYWdlKENTU1Byb3BlcnR5SUQgcHJvcGVydHks
IENTU1ZhbHVlKiB2YWx1ZSkKK1Bhc3NSZWZQdHI8U3R5bGVJbWFnZT4gU3R5bGVSZXNvbHZlcjo6
c3R5bGVJbWFnZShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5LCBDU1NWYWx1ZSYgdmFsdWUpCiB7Ci0g
ICAgaWYgKGlzPENTU0ltYWdlVmFsdWU+KCp2YWx1ZSkpCisgICAgaWYgKGlzPENTU0ltYWdlVmFs
dWU+KHZhbHVlKSkKICAgICAgICAgcmV0dXJuIGNhY2hlZE9yUGVuZGluZ0Zyb21WYWx1ZShwcm9w
ZXJ0eSwgZG93bmNhc3Q8Q1NTSW1hZ2VWYWx1ZT4odmFsdWUpKTsKIAotICAgIGlmIChpczxDU1NJ
bWFnZUdlbmVyYXRvclZhbHVlPigqdmFsdWUpKSB7Ci0gICAgICAgIGlmIChpczxDU1NHcmFkaWVu
dFZhbHVlPigqdmFsdWUpKQotICAgICAgICAgICAgcmV0dXJuIGdlbmVyYXRlZE9yUGVuZGluZ0Zy
b21WYWx1ZShwcm9wZXJ0eSwgKmRvd25jYXN0PENTU0dyYWRpZW50VmFsdWU+KCp2YWx1ZSkuZ3Jh
ZGllbnRXaXRoU3R5bGVzUmVzb2x2ZWQodGhpcykpOwotICAgICAgICByZXR1cm4gZ2VuZXJhdGVk
T3JQZW5kaW5nRnJvbVZhbHVlKHByb3BlcnR5LCBkb3duY2FzdDxDU1NJbWFnZUdlbmVyYXRvclZh
bHVlPigqdmFsdWUpKTsKKyAgICBpZiAoaXM8Q1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZT4odmFsdWUp
KSB7CisgICAgICAgIGlmIChpczxDU1NHcmFkaWVudFZhbHVlPih2YWx1ZSkpCisgICAgICAgICAg
ICByZXR1cm4gZ2VuZXJhdGVkT3JQZW5kaW5nRnJvbVZhbHVlKHByb3BlcnR5LCAqZG93bmNhc3Q8
Q1NTR3JhZGllbnRWYWx1ZT4odmFsdWUpLmdyYWRpZW50V2l0aFN0eWxlc1Jlc29sdmVkKHRoaXMp
KTsKKyAgICAgICAgcmV0dXJuIGdlbmVyYXRlZE9yUGVuZGluZ0Zyb21WYWx1ZShwcm9wZXJ0eSwg
ZG93bmNhc3Q8Q1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZT4odmFsdWUpKTsKICAgICB9CiAKICNpZiBF
TkFCTEUoQ1NTX0lNQUdFX1NFVCkKLSAgICBpZiAoaXM8Q1NTSW1hZ2VTZXRWYWx1ZT4oKnZhbHVl
KSkKKyAgICBpZiAoaXM8Q1NTSW1hZ2VTZXRWYWx1ZT4odmFsdWUpKQogICAgICAgICByZXR1cm4g
c2V0T3JQZW5kaW5nRnJvbVZhbHVlKHByb3BlcnR5LCBkb3duY2FzdDxDU1NJbWFnZVNldFZhbHVl
Pih2YWx1ZSkpOwogI2VuZGlmCiAKLSAgICBpZiAoaXM8Q1NTQ3Vyc29ySW1hZ2VWYWx1ZT4oKnZh
bHVlKSkKKyAgICBpZiAoaXM8Q1NTQ3Vyc29ySW1hZ2VWYWx1ZT4odmFsdWUpKQogICAgICAgICBy
ZXR1cm4gY3Vyc29yT3JQZW5kaW5nRnJvbVZhbHVlKHByb3BlcnR5LCBkb3duY2FzdDxDU1NDdXJz
b3JJbWFnZVZhbHVlPih2YWx1ZSkpOwogCiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKLVBhc3NS
ZWZQdHI8U3R5bGVJbWFnZT4gU3R5bGVSZXNvbHZlcjo6Y2FjaGVkT3JQZW5kaW5nRnJvbVZhbHVl
KENTU1Byb3BlcnR5SUQgcHJvcGVydHksIENTU0ltYWdlVmFsdWUqIHZhbHVlKQorUGFzc1JlZlB0
cjxTdHlsZUltYWdlPiBTdHlsZVJlc29sdmVyOjpjYWNoZWRPclBlbmRpbmdGcm9tVmFsdWUoQ1NT
UHJvcGVydHlJRCBwcm9wZXJ0eSwgQ1NTSW1hZ2VWYWx1ZSYgdmFsdWUpCiB7Ci0gICAgUmVmUHRy
PFN0eWxlSW1hZ2U+IGltYWdlID0gdmFsdWUtPmNhY2hlZE9yUGVuZGluZ0ltYWdlKCk7CisgICAg
UmVmUHRyPFN0eWxlSW1hZ2U+IGltYWdlID0gdmFsdWUuY2FjaGVkT3JQZW5kaW5nSW1hZ2UoKTsK
ICAgICBpZiAoaW1hZ2UgJiYgaW1hZ2UtPmlzUGVuZGluZ0ltYWdlKCkpCi0gICAgICAgIG1fc3Rh
dGUucGVuZGluZ0ltYWdlUHJvcGVydGllcygpLnNldChwcm9wZXJ0eSwgdmFsdWUpOworICAgICAg
ICBtX3N0YXRlLnBlbmRpbmdJbWFnZVByb3BlcnRpZXMoKS5zZXQocHJvcGVydHksICZ2YWx1ZSk7
CiAgICAgcmV0dXJuIGltYWdlLnJlbGVhc2UoKTsKIH0KIApAQCAtMzI1OCwyMCArMzI1OSwyMCBA
QCBQYXNzUmVmUHRyPFN0eWxlSW1hZ2U+IFN0eWxlUmVzb2x2ZXI6OmdlbmVyYXRlZE9yUGVuZGlu
Z0Zyb21WYWx1ZShDU1NQcm9wZXJ0eUlECiB9CiAKICNpZiBFTkFCTEUoQ1NTX0lNQUdFX1NFVCkK
LVBhc3NSZWZQdHI8U3R5bGVJbWFnZT4gU3R5bGVSZXNvbHZlcjo6c2V0T3JQZW5kaW5nRnJvbVZh
bHVlKENTU1Byb3BlcnR5SUQgcHJvcGVydHksIENTU0ltYWdlU2V0VmFsdWUqIHZhbHVlKQorUGFz
c1JlZlB0cjxTdHlsZUltYWdlPiBTdHlsZVJlc29sdmVyOjpzZXRPclBlbmRpbmdGcm9tVmFsdWUo
Q1NTUHJvcGVydHlJRCBwcm9wZXJ0eSwgQ1NTSW1hZ2VTZXRWYWx1ZSYgdmFsdWUpCiB7Ci0gICAg
UmVmUHRyPFN0eWxlSW1hZ2U+IGltYWdlID0gdmFsdWUtPmNhY2hlZE9yUGVuZGluZ0ltYWdlU2V0
KGRvY3VtZW50KCkpOworICAgIFJlZlB0cjxTdHlsZUltYWdlPiBpbWFnZSA9IHZhbHVlLmNhY2hl
ZE9yUGVuZGluZ0ltYWdlU2V0KGRvY3VtZW50KCkpOwogICAgIGlmIChpbWFnZSAmJiBpbWFnZS0+
aXNQZW5kaW5nSW1hZ2UoKSkKLSAgICAgICAgbV9zdGF0ZS5wZW5kaW5nSW1hZ2VQcm9wZXJ0aWVz
KCkuc2V0KHByb3BlcnR5LCB2YWx1ZSk7CisgICAgICAgIG1fc3RhdGUucGVuZGluZ0ltYWdlUHJv
cGVydGllcygpLnNldChwcm9wZXJ0eSwgJnZhbHVlKTsKICAgICByZXR1cm4gaW1hZ2UucmVsZWFz
ZSgpOwogfQogI2VuZGlmCiAKLVBhc3NSZWZQdHI8U3R5bGVJbWFnZT4gU3R5bGVSZXNvbHZlcjo6
Y3Vyc29yT3JQZW5kaW5nRnJvbVZhbHVlKENTU1Byb3BlcnR5SUQgcHJvcGVydHksIENTU0N1cnNv
ckltYWdlVmFsdWUqIHZhbHVlKQorUGFzc1JlZlB0cjxTdHlsZUltYWdlPiBTdHlsZVJlc29sdmVy
OjpjdXJzb3JPclBlbmRpbmdGcm9tVmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eSwgQ1NTQ3Vy
c29ySW1hZ2VWYWx1ZSYgdmFsdWUpCiB7Ci0gICAgUmVmUHRyPFN0eWxlSW1hZ2U+IGltYWdlID0g
dmFsdWUtPmNhY2hlZE9yUGVuZGluZ0ltYWdlKGRvY3VtZW50KCkpOworICAgIFJlZlB0cjxTdHls
ZUltYWdlPiBpbWFnZSA9IHZhbHVlLmNhY2hlZE9yUGVuZGluZ0ltYWdlKGRvY3VtZW50KCkpOwog
ICAgIGlmIChpbWFnZSAmJiBpbWFnZS0+aXNQZW5kaW5nSW1hZ2UoKSkKLSAgICAgICAgbV9zdGF0
ZS5wZW5kaW5nSW1hZ2VQcm9wZXJ0aWVzKCkuc2V0KHByb3BlcnR5LCB2YWx1ZSk7CisgICAgICAg
IG1fc3RhdGUucGVuZGluZ0ltYWdlUHJvcGVydGllcygpLnNldChwcm9wZXJ0eSwgJnZhbHVlKTsK
ICAgICByZXR1cm4gaW1hZ2UucmVsZWFzZSgpOwogfQogCkBAIC0zNTE4LDE2ICszNTE5LDE1IEBA
IGJvb2wgU3R5bGVSZXNvbHZlcjo6Y3JlYXRlRmlsdGVyT3BlcmF0aW9ucyhDU1NWYWx1ZSogaW5W
YWx1ZSwgRmlsdGVyT3BlcmF0aW9ucyYKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0K
ICAgICAKLSAgICBpZiAoIWluVmFsdWUtPmlzVmFsdWVMaXN0KCkpCisgICAgaWYgKCFpczxDU1NW
YWx1ZUxpc3Q+KCppblZhbHVlKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgRmlsdGVy
T3BlcmF0aW9ucyBvcGVyYXRpb25zOwotICAgIGZvciAoQ1NTVmFsdWVMaXN0SXRlcmF0b3IgaSA9
IGluVmFsdWU7IGkuaGFzTW9yZSgpOyBpLmFkdmFuY2UoKSkgewotICAgICAgICBDU1NWYWx1ZSog
Y3VyclZhbHVlID0gaS52YWx1ZSgpOwotICAgICAgICBpZiAoIWlzPFdlYktpdENTU0ZpbHRlclZh
bHVlPigqY3VyclZhbHVlKSkKKyAgICBmb3IgKGF1dG8mIGN1cnJlbnRWYWx1ZSA6IGRvd25jYXN0
PENTU1ZhbHVlTGlzdD4oKmluVmFsdWUpKSB7CisgICAgICAgIGlmICghaXM8V2ViS2l0Q1NTRmls
dGVyVmFsdWU+KGN1cnJlbnRWYWx1ZS5nZXQoKSkpCiAgICAgICAgICAgICBjb250aW51ZTsKIAot
ICAgICAgICBXZWJLaXRDU1NGaWx0ZXJWYWx1ZSYgZmlsdGVyVmFsdWUgPSBkb3duY2FzdDxXZWJL
aXRDU1NGaWx0ZXJWYWx1ZT4oKmkudmFsdWUoKSk7CisgICAgICAgIGF1dG8mIGZpbHRlclZhbHVl
ID0gZG93bmNhc3Q8V2ViS2l0Q1NTRmlsdGVyVmFsdWU+KGN1cnJlbnRWYWx1ZS5nZXQoKSk7CiAg
ICAgICAgIEZpbHRlck9wZXJhdGlvbjo6T3BlcmF0aW9uVHlwZSBvcGVyYXRpb25UeXBlID0gZmls
dGVyT3BlcmF0aW9uRm9yVHlwZShmaWx0ZXJWYWx1ZS5vcGVyYXRpb25UeXBlKCkpOwogCiAgICAg
ICAgIGlmIChvcGVyYXRpb25UeXBlID09IEZpbHRlck9wZXJhdGlvbjo6UkVGRVJFTkNFKSB7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5oIGIvU291cmNlL1dl
YkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuaAppbmRleCAyNjZkMGIwNDM4YjAwMWMxZDRlOWM1ZDk4
NzJjNGViMTI1NzljNmI3Li4wZWExMDIzZDJlOTUyN2NlMGRmOTQzZWE2NDE0NjVhMTEyNWU3MjQ3
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmgKQEAgLTQ0NywxMyArNDQ3LDEzIEBAIHB1
YmxpYzoKIAogICAgIHN0YXRpYyBSZW5kZXJTdHlsZSogc3R5bGVOb3RZZXRBdmFpbGFibGUoKSB7
IHJldHVybiBzX3N0eWxlTm90WWV0QXZhaWxhYmxlOyB9CiAKLSAgICBQYXNzUmVmUHRyPFN0eWxl
SW1hZ2U+IHN0eWxlSW1hZ2UoQ1NTUHJvcGVydHlJRCwgQ1NTVmFsdWUqKTsKLSAgICBQYXNzUmVm
UHRyPFN0eWxlSW1hZ2U+IGNhY2hlZE9yUGVuZGluZ0Zyb21WYWx1ZShDU1NQcm9wZXJ0eUlELCBD
U1NJbWFnZVZhbHVlKik7CisgICAgUGFzc1JlZlB0cjxTdHlsZUltYWdlPiBzdHlsZUltYWdlKENT
U1Byb3BlcnR5SUQsIENTU1ZhbHVlJik7CisgICAgUGFzc1JlZlB0cjxTdHlsZUltYWdlPiBjYWNo
ZWRPclBlbmRpbmdGcm9tVmFsdWUoQ1NTUHJvcGVydHlJRCwgQ1NTSW1hZ2VWYWx1ZSYpOwogICAg
IFBhc3NSZWZQdHI8U3R5bGVJbWFnZT4gZ2VuZXJhdGVkT3JQZW5kaW5nRnJvbVZhbHVlKENTU1By
b3BlcnR5SUQsIENTU0ltYWdlR2VuZXJhdG9yVmFsdWUmKTsKICNpZiBFTkFCTEUoQ1NTX0lNQUdF
X1NFVCkKLSAgICBQYXNzUmVmUHRyPFN0eWxlSW1hZ2U+IHNldE9yUGVuZGluZ0Zyb21WYWx1ZShD
U1NQcm9wZXJ0eUlELCBDU1NJbWFnZVNldFZhbHVlKik7CisgICAgUGFzc1JlZlB0cjxTdHlsZUlt
YWdlPiBzZXRPclBlbmRpbmdGcm9tVmFsdWUoQ1NTUHJvcGVydHlJRCwgQ1NTSW1hZ2VTZXRWYWx1
ZSYpOwogI2VuZGlmCi0gICAgUGFzc1JlZlB0cjxTdHlsZUltYWdlPiBjdXJzb3JPclBlbmRpbmdG
cm9tVmFsdWUoQ1NTUHJvcGVydHlJRCwgQ1NTQ3Vyc29ySW1hZ2VWYWx1ZSopOworICAgIFBhc3NS
ZWZQdHI8U3R5bGVJbWFnZT4gY3Vyc29yT3JQZW5kaW5nRnJvbVZhbHVlKENTU1Byb3BlcnR5SUQs
IENTU0N1cnNvckltYWdlVmFsdWUmKTsKIAogICAgIGJvb2wgYXBwbHlQcm9wZXJ0eVRvUmVndWxh
clN0eWxlKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5hcHBseVByb3BlcnR5VG9SZWd1bGFyU3R5
bGUoKTsgfQogICAgIGJvb2wgYXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtTdHlsZSgpIGNvbnN0
IHsgcmV0dXJuIG1fc3RhdGUuYXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtTdHlsZSgpOyB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvVHJhbnNmb3JtRnVuY3Rpb25zLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2Nzcy9UcmFuc2Zvcm1GdW5jdGlvbnMuY3BwCmluZGV4IDQ1MjhkZmNiOTFi
NTg0M2IzZjhiYzRjOTE4ZmE3YjhkNmMyYzFhNjUuLjBiYTkxMDgwNWE2Yjg4OWE4MWNlZDk5ZjVm
ZWEwNzRiZjc0NTAzODkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9UcmFuc2Zvcm1G
dW5jdGlvbnMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9UcmFuc2Zvcm1GdW5jdGlvbnMu
Y3BwCkBAIC04MywxOSArODMsMTcgQEAgc3RhdGljIExlbmd0aCBjb252ZXJ0VG9GbG9hdExlbmd0
aChjb25zdCBDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUsIGNvbnMKIAogYm9vbCB0
cmFuc2Zvcm1zRm9yVmFsdWUoQ1NTVmFsdWUmIHZhbHVlLCBjb25zdCBDU1NUb0xlbmd0aENvbnZl
cnNpb25EYXRhJiBjb252ZXJzaW9uRGF0YSwgVHJhbnNmb3JtT3BlcmF0aW9ucyYgb3V0T3BlcmF0
aW9ucykKIHsKLSAgICBpZiAoIXZhbHVlLmlzVmFsdWVMaXN0KCkpIHsKKyAgICBpZiAoIWlzPENT
U1ZhbHVlTGlzdD4odmFsdWUpKSB7CiAgICAgICAgIG91dE9wZXJhdGlvbnMuY2xlYXIoKTsKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAogICAgIFRyYW5zZm9ybU9wZXJhdGlvbnMgb3Bl
cmF0aW9uczsKLSAgICBmb3IgKENTU1ZhbHVlTGlzdEl0ZXJhdG9yIGkgPSAmdmFsdWU7IGkuaGFz
TW9yZSgpOyBpLmFkdmFuY2UoKSkgewotICAgICAgICBDU1NWYWx1ZSYgY3VyclZhbHVlID0gKmku
dmFsdWUoKTsKLQotICAgICAgICBpZiAoIWlzPFdlYktpdENTU1RyYW5zZm9ybVZhbHVlPihjdXJy
VmFsdWUpKQorICAgIGZvciAoYXV0byYgY3VycmVudFZhbHVlIDogZG93bmNhc3Q8Q1NTVmFsdWVM
aXN0Pih2YWx1ZSkpIHsKKyAgICAgICAgaWYgKCFpczxXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZT4o
Y3VycmVudFZhbHVlLmdldCgpKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgIFdl
YktpdENTU1RyYW5zZm9ybVZhbHVlJiB0cmFuc2Zvcm1WYWx1ZSA9IGRvd25jYXN0PFdlYktpdENT
U1RyYW5zZm9ybVZhbHVlPihjdXJyVmFsdWUpOworICAgICAgICBhdXRvJiB0cmFuc2Zvcm1WYWx1
ZSA9IGRvd25jYXN0PFdlYktpdENTU1RyYW5zZm9ybVZhbHVlPihjdXJyZW50VmFsdWUuZ2V0KCkp
OwogICAgICAgICBpZiAoIXRyYW5zZm9ybVZhbHVlLmxlbmd0aCgpKQogICAgICAgICAgICAgY29u
dGludWU7CiAK
</data>

          </attachment>
      

    </bug>

</bugzilla>