<?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>230188</bug_id>
          
          <creation_ts>2021-09-11 03:13:18 -0700</creation_ts>
          <short_desc>Move rest of the LegacyInlineTextBox painting code to TextBoxPainter</short_desc>
          <delta_ts>2021-09-11 12:50:42 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Layout and Rendering</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Antti Koivisto">koivisto</reporter>
          <assigned_to name="Antti Koivisto">koivisto</assigned_to>
          <cc>bfulgham</cc>
    
    <cc>changseok</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>glenn</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>mmaxfield</cc>
    
    <cc>pdr</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>zalan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1792673</commentid>
    <comment_count>0</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2021-09-11 03:13:18 -0700</bug_when>
    <thetext>more code moving</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1792674</commentid>
    <comment_count>1</comment_count>
      <attachid>437946</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2021-09-11 03:15:02 -0700</bug_when>
    <thetext>Created attachment 437946
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1792680</commentid>
    <comment_count>2</comment_count>
      <attachid>437949</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2021-09-11 05:10:14 -0700</bug_when>
    <thetext>Created attachment 437949
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1792698</commentid>
    <comment_count>3</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2021-09-11 09:10:20 -0700</bug_when>
    <thetext>Committed r282311 (241581@main): &lt;https://commits.webkit.org/241581@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 437949.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1792711</commentid>
    <comment_count>4</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-09-11 09:12:49 -0700</bug_when>
    <thetext>&lt;rdar://problem/83011008&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1792730</commentid>
    <comment_count>5</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2021-09-11 12:50:42 -0700</bug_when>
    <thetext>🔡📦🧑‍🎨</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>437946</attachid>
            <date>2021-09-11 03:15:02 -0700</date>
            <delta_ts>2021-09-11 05:10:10 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-230188-20210911131501.patch</filename>
            <type>text/plain</type>
            <size>40683</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgyMzA2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZGJhNDIwMjdlNjQyMDYw
OGIxMTU1N2Q0ZTA2ODI4ZmI4N2ExNWFjMS4uNTNkYWM1ZTc2YmVmNmNmYTY4MjQzMDkyNmU0ZGI0
NTQwNjNmNDdjZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ4IEBACisyMDIxLTA5LTExICBBbnR0
aSBLb2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBNb3ZlIHJlc3Qgb2YgdGhl
IExlZ2FjeUlubGluZVRleHRCb3ggcGFpbnRpbmcgY29kZSB0byBUZXh0Qm94UGFpbnRlcgorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjMwMTg4CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTW92ZSB0aGUgcmVt
YWluaW5nIHBhaW50aW5nIGNvZGUuCisKKyAgICAgICAgKiByZW5kZXJpbmcvTGVnYWN5RWxsaXBz
aXNCb3guaDoKKyAgICAgICAgKiByZW5kZXJpbmcvTGVnYWN5SW5saW5lQm94LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkxlZ2FjeUlubGluZUJveDo6c2VsZWN0aW9uU3RhdGUgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6TGVnYWN5SW5saW5lQm94OjpzZWxlY3Rpb25TdGF0ZSk6IERlbGV0ZWQu
CisgICAgICAgICogcmVuZGVyaW5nL0xlZ2FjeUlubGluZUJveC5oOgorICAgICAgICAqIHJlbmRl
cmluZy9MZWdhY3lJbmxpbmVGbG93Qm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxlZ2FjeUlu
bGluZUZsb3dCb3g6OnNlbGVjdGlvblN0YXRlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Okxl
Z2FjeUlubGluZUZsb3dCb3g6OnNlbGVjdGlvblN0YXRlKTogRGVsZXRlZC4KKyAgICAgICAgKiBy
ZW5kZXJpbmcvTGVnYWN5SW5saW5lRmxvd0JveC5oOgorICAgICAgICAqIHJlbmRlcmluZy9MZWdh
Y3lJbmxpbmVUZXh0Qm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxlZ2FjeUlubGluZVRleHRC
b3g6OnNlbGVjdGlvblN0YXRlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxlZ2FjeUlubGlu
ZVRleHRCb3g6OnBhaW50KToKKyAgICAgICAgKFdlYkNvcmU6OkxlZ2FjeUlubGluZVRleHRCb3g6
OnNlbGVjdGlvblN0YXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZU1hcmtl
ZFRleHRGcm9tU2VsZWN0aW9uSW5Cb3gpOiBEZWxldGVkLgorICAgICAgICAqIHJlbmRlcmluZy9M
ZWdhY3lJbmxpbmVUZXh0Qm94Lmg6CisgICAgICAgICogcmVuZGVyaW5nL0xlZ2FjeVJvb3RJbmxp
bmVCb3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6TGVnYWN5Um9vdElubGluZUJveDo6c2VsZWN0
aW9uU3RhdGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGVnYWN5Um9vdElubGluZUJveDo6
c2VsZWN0aW9uU3RhdGUpOiBEZWxldGVkLgorICAgICAgICAqIHJlbmRlcmluZy9MZWdhY3lSb290
SW5saW5lQm94Lmg6CisgICAgICAgICogcmVuZGVyaW5nL01hcmtlZFRleHQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6TWFya2VkVGV4dDo6Y29sbGVjdEZvckhpZ2hsaWdodHMpOgorICAgICAgICAq
IHJlbmRlcmluZy9NYXJrZWRUZXh0Lmg6CisgICAgICAgICogcmVuZGVyaW5nL1RleHRCb3hQYWlu
dGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHRCb3hQYWludGVyOjpUZXh0Qm94UGFpbnRl
cik6CisgICAgICAgIChXZWJDb3JlOjpUZXh0Qm94UGFpbnRlcjo6flRleHRCb3hQYWludGVyKToK
KyAgICAgICAgKFdlYkNvcmU6OlRleHRCb3hQYWludGVyOjpwYWludCk6CisgICAgICAgIChXZWJD
b3JlOjpjcmVhdGVNYXJrZWRUZXh0RnJvbVNlbGVjdGlvbkluQm94KToKKyAgICAgICAgKFdlYkNv
cmU6OlRleHRCb3hQYWludGVyOjpwYWludEJhY2tncm91bmQpOgorICAgICAgICAoV2ViQ29yZTo6
VGV4dEJveFBhaW50ZXI6OnBhaW50Rm9yZWdyb3VuZEFuZERlY29yYXRpb25zKToKKyAgICAgICAg
KFdlYkNvcmU6OlRleHRCb3hQYWludGVyOjpwYWludEZvcmVncm91bmQpOgorICAgICAgICAoV2Vi
Q29yZTo6VGV4dEJveFBhaW50ZXI6OnBhaW50RGVjb3JhdGlvbik6CisgICAgICAgIChXZWJDb3Jl
OjpUZXh0Qm94UGFpbnRlcjo6cGFpbnRDb21wb3NpdGlvblVuZGVybGluZSk6CisgICAgICAgIChX
ZWJDb3JlOjpUZXh0Qm94UGFpbnRlcjo6cGFpbnRQbGF0Zm9ybURvY3VtZW50TWFya2VyKToKKyAg
ICAgICAgKFdlYkNvcmU6OlRleHRCb3hQYWludGVyOjpjb21wdXRlUGFpbnRSZWN0KToKKyAgICAg
ICAgKiByZW5kZXJpbmcvVGV4dEJveFBhaW50ZXIuaDoKKwogMjAyMS0wOS0xMCAgQWxhbiBCdWp0
YXMgIDx6YWxhbkBhcHBsZS5jb20+CiAKICAgICAgICAgW0xlZ2FjeSBMaW5lIExheW91dF0gRG8g
bm90IGludGVncmFsIHJvdW5kIHRoZSByb290IGlubGluZWJveCdzIHRvcCBwb3NpdGlvbgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0xlZ2FjeUVsbGlwc2lzQm94LmggYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvTGVnYWN5RWxsaXBzaXNCb3guaAppbmRleCA4YTg1YjEw
YzcyYTgxNGM3ODZmOGMwODg0OTE0YTg3YmE4MmJkMDJlLi4wOThiNTdmZWM5Yzk4ODc4ODM0YTI1
N2EzYTM0NTUzYWZmZjMzZjQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
TGVnYWN5RWxsaXBzaXNCb3guaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvTGVnYWN5
RWxsaXBzaXNCb3guaApAQCAtNDEsNyArNDEsNyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIHZv
aWQgcGFpbnRNYXJrdXBCb3goUGFpbnRJbmZvJiwgY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50T2Zm
c2V0LCBMYXlvdXRVbml0IGxpbmVUb3AsIExheW91dFVuaXQgbGluZUJvdHRvbSwgY29uc3QgUmVu
ZGVyU3R5bGUmKTsKICAgICBpbnQgaGVpZ2h0KCkgY29uc3QgeyByZXR1cm4gbV9oZWlnaHQ7IH0K
LSAgICBSZW5kZXJPYmplY3Q6OkhpZ2hsaWdodFN0YXRlIHNlbGVjdGlvblN0YXRlKCkgb3ZlcnJp
ZGUgeyByZXR1cm4gbV9zZWxlY3Rpb25TdGF0ZTsgfQorICAgIFJlbmRlck9iamVjdDo6SGlnaGxp
Z2h0U3RhdGUgc2VsZWN0aW9uU3RhdGUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX3NlbGVj
dGlvblN0YXRlOyB9CiAgICAgdm9pZCBwYWludFNlbGVjdGlvbihHcmFwaGljc0NvbnRleHQmLCBj
b25zdCBMYXlvdXRQb2ludCYsIGNvbnN0IFJlbmRlclN0eWxlJiwgY29uc3QgRm9udENhc2NhZGUm
KTsKICAgICBMZWdhY3lJbmxpbmVCb3gqIG1hcmt1cEJveCgpIGNvbnN0OwogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvTGVnYWN5SW5saW5lQm94LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9MZWdhY3lJbmxpbmVCb3guY3BwCmluZGV4IDc0MDJjZGY2MzI3NDA0
YzNhZjMxOTU5MTJlOWM1MmY4NmVkZjU2ZjkuLjNmMWExNWY4ZTUxOTE4ZWI5MzUzOTRmMDkzZjMy
NTIyMmRhZTc4NTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9MZWdhY3lJ
bmxpbmVCb3guY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9MZWdhY3lJbmxpbmVC
b3guY3BwCkBAIC0yNDUsNyArMjQ1LDcgQEAgTGVnYWN5SW5saW5lQm94KiBMZWdhY3lJbmxpbmVC
b3g6OnByZXZpb3VzTGVhZk9uTGluZSgpIGNvbnN0CiAgICAgcmV0dXJuIGxlYWY7CiB9CiAKLVJl
bmRlck9iamVjdDo6SGlnaGxpZ2h0U3RhdGUgTGVnYWN5SW5saW5lQm94OjpzZWxlY3Rpb25TdGF0
ZSgpCitSZW5kZXJPYmplY3Q6OkhpZ2hsaWdodFN0YXRlIExlZ2FjeUlubGluZUJveDo6c2VsZWN0
aW9uU3RhdGUoKSBjb25zdAogewogICAgIHJldHVybiByZW5kZXJlcigpLnNlbGVjdGlvblN0YXRl
KCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvTGVnYWN5SW5saW5l
Qm94LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvTGVnYWN5SW5saW5lQm94LmgKaW5kZXgg
M2I2Zjk1OTA4MzI3ZTRkNjkzNjE2MDA0NDY1NDVmODI2YjA0YjVhYi4uMDU1NTk1ZmVkNDExNjQ5
Mzg1OTdjZTUxZDAxZDIxMzUyZTU2NDAzNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL0xlZ2FjeUlubGluZUJveC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9M
ZWdhY3lJbmxpbmVCb3guaApAQCAtMjE5LDcgKzIxOSw3IEBAIHB1YmxpYzoKIAogICAgIFdFQkNP
UkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBkaXJ0eUxpbmVCb3hlcygpOwogICAgIAotICAgIFdFQkNP
UkVfRVhQT1JUIHZpcnR1YWwgUmVuZGVyT2JqZWN0OjpIaWdobGlnaHRTdGF0ZSBzZWxlY3Rpb25T
dGF0ZSgpOworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgUmVuZGVyT2JqZWN0OjpIaWdobGln
aHRTdGF0ZSBzZWxlY3Rpb25TdGF0ZSgpIGNvbnN0OwogCiAgICAgV0VCQ09SRV9FWFBPUlQgdmly
dHVhbCBib29sIGNhbkFjY29tbW9kYXRlRWxsaXBzaXMoYm9vbCBsdHIsIGludCBibG9ja0VkZ2Us
IGludCBlbGxpcHNpc1dpZHRoKSBjb25zdDsKICAgICAvLyB2aXNpYmxlTGVmdEVkZ2UsIHZpc2li
bGVSaWdodEVkZ2UgYXJlIGluIHRoZSBwYXJlbnQncyBjb29yZGluYXRlIHN5c3RlbS4KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9MZWdhY3lJbmxpbmVGbG93Qm94LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9MZWdhY3lJbmxpbmVGbG93Qm94LmNwcAppbmRleCBl
ZmRmNjVjYzM3NGIzMjRiOGVlZDg3NGMxMTBiMDA0Yzg1YzBmYjM1Li41MmUzMTE3MmVjNjU5ZjRh
N2M0NWJhMzZiNjNjMTBjM2FiY2ExMzdlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvTGVnYWN5SW5saW5lRmxvd0JveC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL0xlZ2FjeUlubGluZUZsb3dCb3guY3BwCkBAIC0xNDU2LDcgKzE0NTYsNyBAQCBMZWdhY3lJ
bmxpbmVCb3gqIExlZ2FjeUlubGluZUZsb3dCb3g6Omxhc3RMZWFmRGVzY2VuZGFudCgpIGNvbnN0
CiAgICAgcmV0dXJuIGxlYWY7CiB9CiAKLVJlbmRlck9iamVjdDo6SGlnaGxpZ2h0U3RhdGUgTGVn
YWN5SW5saW5lRmxvd0JveDo6c2VsZWN0aW9uU3RhdGUoKQorUmVuZGVyT2JqZWN0OjpIaWdobGln
aHRTdGF0ZSBMZWdhY3lJbmxpbmVGbG93Qm94OjpzZWxlY3Rpb25TdGF0ZSgpIGNvbnN0CiB7CiAg
ICAgcmV0dXJuIFJlbmRlck9iamVjdDo6SGlnaGxpZ2h0U3RhdGU6Ok5vbmU7CiB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvTGVnYWN5SW5saW5lRmxvd0JveC5oIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0xlZ2FjeUlubGluZUZsb3dCb3guaAppbmRleCA0N2NmNmU4
NzgzM2NhOTA1ZjA5ZWI5YzNmNzZjMTI5ZTliYTBlZTVmLi5jZDQxZDAxZDA2MGFiMjdmZjUwNjE4
YWRmODAwMTdhNDllMzZmOGQzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
TGVnYWN5SW5saW5lRmxvd0JveC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9MZWdh
Y3lJbmxpbmVGbG93Qm94LmgKQEAgLTIwMyw3ICsyMDMsNyBAQCBwdWJsaWM6CiAgICAgCiAgICAg
dm9pZCByZW1vdmVDaGlsZChMZWdhY3lJbmxpbmVCb3gqIGNoaWxkKTsKIAotICAgIFJlbmRlck9i
amVjdDo6SGlnaGxpZ2h0U3RhdGUgc2VsZWN0aW9uU3RhdGUoKSBvdmVycmlkZTsKKyAgICBSZW5k
ZXJPYmplY3Q6OkhpZ2hsaWdodFN0YXRlIHNlbGVjdGlvblN0YXRlKCkgY29uc3Qgb3ZlcnJpZGU7
CiAKICAgICBib29sIGNhbkFjY29tbW9kYXRlRWxsaXBzaXMoYm9vbCBsdHIsIGludCBibG9ja0Vk
Z2UsIGludCBlbGxpcHNpc1dpZHRoKSBjb25zdCBmaW5hbDsKICAgICBmbG9hdCBwbGFjZUVsbGlw
c2lzQm94KGJvb2wgbHRyLCBmbG9hdCBibG9ja0xlZnRFZGdlLCBmbG9hdCBibG9ja1JpZ2h0RWRn
ZSwgZmxvYXQgZWxsaXBzaXNXaWR0aCwgZmxvYXQgJnRydW5jYXRlZFdpZHRoLCBib29sJikgb3Zl
cnJpZGU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvTGVnYWN5SW5saW5l
VGV4dEJveC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvTGVnYWN5SW5saW5lVGV4dEJv
eC5jcHAKaW5kZXggODlhZWM4ZTQyNmM0ZDgxM2JlMDc5MWI2YThlMTNkM2M5ZjY2OGYyMC4uODVm
MzdjZGNlYmYwODA3MzkwYzVjZmU5YzdhZTkzZGJhZmU4YzNiMSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL0xlZ2FjeUlubGluZVRleHRCb3guY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9MZWdhY3lJbmxpbmVUZXh0Qm94LmNwcApAQCAtMTU5LDcgKzE1OSw3
IEBAIGJvb2wgTGVnYWN5SW5saW5lVGV4dEJveDo6aXNTZWxlY3RhYmxlKHVuc2lnbmVkIHN0YXJ0
UG9zaXRpb24sIHVuc2lnbmVkIGVuZFBvc2l0CiAgICAgcmV0dXJuIHNlbGVjdGFibGVSYW5nZSgp
LmludGVyc2VjdHMoc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24pOwogfQogCi1SZW5kZXJPYmpl
Y3Q6OkhpZ2hsaWdodFN0YXRlIExlZ2FjeUlubGluZVRleHRCb3g6OnNlbGVjdGlvblN0YXRlKCkK
K1JlbmRlck9iamVjdDo6SGlnaGxpZ2h0U3RhdGUgTGVnYWN5SW5saW5lVGV4dEJveDo6c2VsZWN0
aW9uU3RhdGUoKSBjb25zdAogewogICAgIGF1dG8gc3RhdGUgPSByZW5kZXJlcigpLnZpZXcoKS5z
ZWxlY3Rpb24oKS5oaWdobGlnaHRTdGF0ZUZvclRleHRCb3gocmVuZGVyZXIoKSwgc2VsZWN0YWJs
ZVJhbmdlKCkpOwogICAgIApAQCAtNDA0LDE0ICs0MDQsNiBAQCBzdGQ6Om9wdGlvbmFsPGJvb2w+
IExlZ2FjeUlubGluZVRleHRCb3g6OmVtcGhhc2lzTWFya0V4aXN0c0FuZElzQWJvdmUoY29uc3Qg
UmVuZAogICAgIHJldHVybiBpc0Fib3ZlOwogfQogCi1zdGF0aWMgTWFya2VkVGV4dCBjcmVhdGVN
YXJrZWRUZXh0RnJvbVNlbGVjdGlvbkluQm94KGNvbnN0IExlZ2FjeUlubGluZVRleHRCb3gmIGJv
eCkKLXsKLSAgICBhdXRvIFtzZWxlY3Rpb25TdGFydCwgc2VsZWN0aW9uRW5kXSA9IGJveC5zZWxl
Y3Rpb25TdGFydEVuZCgpOwotICAgIGlmIChzZWxlY3Rpb25TdGFydCA8IHNlbGVjdGlvbkVuZCkK
LSAgICAgICAgcmV0dXJuIHsgc2VsZWN0aW9uU3RhcnQsIHNlbGVjdGlvbkVuZCwgTWFya2VkVGV4
dDo6U2VsZWN0aW9uIH07Ci0gICAgcmV0dXJuIHsgfTsKLX0KLQogdm9pZCBMZWdhY3lJbmxpbmVU
ZXh0Qm94OjpwYWludChQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgTGF5b3V0UG9pbnQmIHBh
aW50T2Zmc2V0LCBMYXlvdXRVbml0IC8qbGluZVRvcCovLCBMYXlvdXRVbml0IC8qbGluZUJvdHRv
bSovKQogewogICAgIGlmIChpc0xpbmVCcmVhaygpIHx8ICFwYWludEluZm8uc2hvdWxkUGFpbnRX
aXRoaW5Sb290KHJlbmRlcmVyKCkpIHx8IHJlbmRlcmVyKCkuc3R5bGUoKS52aXNpYmlsaXR5KCkg
IT0gVmlzaWJpbGl0eTo6VmlzaWJsZQpAQCAtNDI3LDE4NyArNDE5LDEyIEBAIHZvaWQgTGVnYWN5
SW5saW5lVGV4dEJveDo6cGFpbnQoUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IExheW91dFBv
aW50JiBwYWludE9mCiAgICAgCiAgICAgTGF5b3V0VW5pdCBwYWludEVuZCA9IGlzSG9yaXpvbnRh
bCgpID8gcGFpbnRJbmZvLnJlY3QubWF4WCgpIDogcGFpbnRJbmZvLnJlY3QubWF4WSgpOwogICAg
IExheW91dFVuaXQgcGFpbnRTdGFydCA9IGlzSG9yaXpvbnRhbCgpID8gcGFpbnRJbmZvLnJlY3Qu
eCgpIDogcGFpbnRJbmZvLnJlY3QueSgpOwotICAgIAotICAgIEZsb2F0UG9pbnQgbG9jYWxQYWlu
dE9mZnNldChwYWludE9mZnNldCk7Ci0gICAgCi0gICAgaWYgKGxvZ2ljYWxTdGFydCA+PSBwYWlu
dEVuZCB8fCBsb2dpY2FsU3RhcnQgKyBsb2dpY2FsRXh0ZW50IDw9IHBhaW50U3RhcnQpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIGJvb2wgaXNQcmludGluZyA9IHJlbmRlcmVyKCkuZG9jdW1lbnQo
KS5wcmludGluZygpOwotICAgIAotICAgIC8vIERldGVybWluZSB3aGV0aGVyIG9yIG5vdCB3ZSdy
ZSBzZWxlY3RlZC4KLSAgICBib29sIGhhdmVTZWxlY3Rpb24gPSAhaXNQcmludGluZyAmJiBwYWlu
dEluZm8ucGhhc2UgIT0gUGFpbnRQaGFzZTo6VGV4dENsaXAgJiYgc2VsZWN0aW9uU3RhdGUoKSAh
PSBSZW5kZXJPYmplY3Q6OkhpZ2hsaWdodFN0YXRlOjpOb25lOwotICAgIGlmICghaGF2ZVNlbGVj
dGlvbiAmJiBwYWludEluZm8ucGhhc2UgPT0gUGFpbnRQaGFzZTo6U2VsZWN0aW9uKSB7Ci0gICAg
ICAgIC8vIFdoZW4gb25seSBwYWludGluZyB0aGUgc2VsZWN0aW9uLCBkb24ndCBib3RoZXIgdG8g
cGFpbnQgaWYgdGhlcmUgaXMgbm9uZS4KLSAgICAgICAgcmV0dXJuOwotICAgIH0KIAotICAgIGlm
IChtX3RydW5jYXRpb24gIT0gY05vVHJ1bmNhdGlvbikgewotICAgICAgICBpZiAocmVuZGVyZXIo
KS5jb250YWluaW5nQmxvY2soKS0+c3R5bGUoKS5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkgIT0g
aXNMZWZ0VG9SaWdodERpcmVjdGlvbigpKSB7Ci0gICAgICAgICAgICAvLyBNYWtlIHRoZSB2aXNp
YmxlIGZyYWdtZW50IG9mIHRleHQgaHVnIHRoZSBlZGdlIGNsb3Nlc3QgdG8gdGhlIHJlc3Qgb2Yg
dGhlIHJ1biBieSBtb3ZpbmcgdGhlIG9yaWdpbgotICAgICAgICAgICAgLy8gYXQgd2hpY2ggd2Ug
c3RhcnQgZHJhd2luZyB0ZXh0LgotICAgICAgICAgICAgLy8gZS5nLiBJbiB0aGUgY2FzZSBvZiBM
VFIgdGV4dCB0cnVuY2F0ZWQgaW4gYW4gUlRMIENvbnRleHQsIHRoZSBjb3JyZWN0IGJlaGF2aW9y
IGlzOgotICAgICAgICAgICAgLy8gfEhlbGxvfENCQXwgLT4gfC4uLkhlfENCQXwKLSAgICAgICAg
ICAgIC8vIEluIG9yZGVyIHRvIGRyYXcgdGhlIGZyYWdtZW50ICJIZSIgYWxpZ25lZCB0byB0aGUg
cmlnaHQgZWRnZSBvZiBpdCdzIGJveCwgd2UgbmVlZCB0byBzdGFydCBkcmF3aW5nCi0gICAgICAg
ICAgICAvLyBmYXJ0aGVyIHRvIHRoZSByaWdodC4KLSAgICAgICAgICAgIC8vIE5PVEU6IFdlYktp
dCdzIGJlaGF2aW9yIGRpZmZlcnMgZnJvbSB0aGF0IG9mIElFIHdoaWNoIGFwcGVhcnMgdG8ganVz
dCBvdmVybGF5IHRoZSBlbGxpcHNpcyBvbiB0b3Agb2YgdGhlCi0gICAgICAgICAgICAvLyB0cnVu
Y2F0ZWQgc3RyaW5nIGkuZS4gIHxIZWxsb3xDQkF8IC0+IHwuLi5sb3xDQkF8Ci0gICAgICAgICAg
ICBMYXlvdXRVbml0IHdpZHRoT2ZWaXNpYmxlVGV4dCB7IHJlbmRlcmVyKCkud2lkdGgobV9zdGFy
dCwgbV90cnVuY2F0aW9uLCB0ZXh0UG9zKCksIGlzRmlyc3RMaW5lKCkpIH07Ci0gICAgICAgICAg
ICBMYXlvdXRVbml0IHdpZHRoT2ZIaWRkZW5UZXh0IHsgbG9naWNhbFdpZHRoKCkgLSB3aWR0aE9m
VmlzaWJsZVRleHQgfTsKLSAgICAgICAgICAgIExheW91dFNpemUgdHJ1bmNhdGlvbk9mZnNldChp
c0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkgPyB3aWR0aE9mSGlkZGVuVGV4dCA6IC13aWR0aE9mSGlk
ZGVuVGV4dCwgMF9sdSk7Ci0gICAgICAgICAgICBsb2NhbFBhaW50T2Zmc2V0Lm1vdmUoaXNIb3Jp
em9udGFsKCkgPyB0cnVuY2F0aW9uT2Zmc2V0IDogdHJ1bmNhdGlvbk9mZnNldC50cmFuc3Bvc2Vk
U2l6ZSgpKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGNvbnN0IFJlbmRlclN0eWxlJiBsaW5l
U3R5bGUgPSB0aGlzLT5saW5lU3R5bGUoKTsKLSAgICAKLSAgICBsb2NhbFBhaW50T2Zmc2V0Lm1v
dmUoMCwgbGluZVN0eWxlLmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyAwIDogLWxvZ2ljYWxI
ZWlnaHQoKSk7Ci0KLSAgICBGbG9hdFBvaW50IGJveE9yaWdpbiA9IGxvY2F0aW9uSW5jbHVkaW5n
RmxpcHBpbmcoKTsKLSAgICBib3hPcmlnaW4ubW92ZUJ5KGxvY2FsUGFpbnRPZmZzZXQpOwotICAg
IEZsb2F0UmVjdCBib3hSZWN0KGJveE9yaWdpbiwgRmxvYXRTaXplKGxvZ2ljYWxXaWR0aCgpLCBs
b2dpY2FsSGVpZ2h0KCkpKTsKLQotICAgIGlmIChwYWludEluZm8ucGhhc2UgPT0gUGFpbnRQaGFz
ZTo6RXZlbnRSZWdpb24pIHsKLSAgICAgICAgaWYgKHZpc2libGVUb0hpdFRlc3RpbmcoKSkKLSAg
ICAgICAgICAgIHBhaW50SW5mby5ldmVudFJlZ2lvbkNvbnRleHQtPnVuaXRlKGVuY2xvc2luZ0lu
dFJlY3QoYm94UmVjdCksIHJlbmRlcmVyKCkuc3R5bGUoKSk7CisgICAgaWYgKGxvZ2ljYWxTdGFy
dCA+PSBwYWludEVuZCB8fCBsb2dpY2FsU3RhcnQgKyBsb2dpY2FsRXh0ZW50IDw9IHBhaW50U3Rh
cnQpCiAgICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBUZXh0Qm94UGFpbnRlciB0ZXh0Qm94
UGFpbnRlcigqdGhpcywgcGFpbnRJbmZvLCBib3hSZWN0KTsKLQotICAgIC8vIERldGVybWluZSB3
aGV0aGVyIG9yIG5vdCB3ZSBoYXZlIGNvbXBvc2l0aW9uIHVuZGVybGluZXMgdG8gZHJhdy4KLSAg
ICBib29sIGNvbnRhaW5zQ29tcG9zaXRpb24gPSByZW5kZXJlcigpLnRleHROb2RlKCkgJiYgcmVu
ZGVyZXIoKS5mcmFtZSgpLmVkaXRvcigpLmNvbXBvc2l0aW9uTm9kZSgpID09IHJlbmRlcmVyKCku
dGV4dE5vZGUoKTsKLSAgICBib29sIHVzZUN1c3RvbVVuZGVybGluZXMgPSBjb250YWluc0NvbXBv
c2l0aW9uICYmIHJlbmRlcmVyKCkuZnJhbWUoKS5lZGl0b3IoKS5jb21wb3NpdGlvblVzZXNDdXN0
b21VbmRlcmxpbmVzKCk7Ci0KLSAgICAvLyAxLiBQYWludCBiYWNrZ3JvdW5kcyBiZWhpbmQgdGV4
dCBpZiBuZWVkZWQuIEV4YW1wbGVzIG9mIHN1Y2ggYmFja2dyb3VuZHMgaW5jbHVkZSBzZWxlY3Rp
b24KLSAgICAvLyBhbmQgY29tcG9zaXRpb24gdW5kZXJsaW5lcy4KLSAgICBpZiAocGFpbnRJbmZv
LnBoYXNlICE9IFBhaW50UGhhc2U6OlNlbGVjdGlvbiAmJiBwYWludEluZm8ucGhhc2UgIT0gUGFp
bnRQaGFzZTo6VGV4dENsaXAgJiYgIWlzUHJpbnRpbmcpIHsKLSAgICAgICAgaWYgKGNvbnRhaW5z
Q29tcG9zaXRpb24gJiYgIXVzZUN1c3RvbVVuZGVybGluZXMpCi0gICAgICAgICAgICB0ZXh0Qm94
UGFpbnRlci5wYWludENvbXBvc2l0aW9uQmFja2dyb3VuZCgpOwotCi0gICAgICAgIGF1dG8gc2Vs
ZWN0YWJsZVJhbmdlID0gdGhpcy0+c2VsZWN0YWJsZVJhbmdlKCk7Ci0KLSAgICAgICAgVmVjdG9y
PE1hcmtlZFRleHQ+IG1hcmtlZFRleHRzOwotICAgICAgICBtYXJrZWRUZXh0cy5hcHBlbmRWZWN0
b3IoTWFya2VkVGV4dDo6Y29sbGVjdEZvckRvY3VtZW50TWFya2VycyhyZW5kZXJlcigpLCBzZWxl
Y3RhYmxlUmFuZ2UsIE1hcmtlZFRleHQ6OlBhaW50UGhhc2U6OkJhY2tncm91bmQpKTsKLSAgICAg
ICAgbWFya2VkVGV4dHMuYXBwZW5kVmVjdG9yKE1hcmtlZFRleHQ6OmNvbGxlY3RGb3JIaWdobGln
aHRzKHJlbmRlcmVyKCksIHBhcmVudCgpLT5yZW5kZXJlcigpLCBzZWxlY3RhYmxlUmFuZ2UsIE1h
cmtlZFRleHQ6OlBhaW50UGhhc2U6OkJhY2tncm91bmQpKTsKLQotI2lmIEVOQUJMRShURVhUX1NF
TEVDVElPTikKLSAgICAgICAgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0ID0gcGFpbnRJbmZvLmNv
bnRleHQoKTsKLSAgICAgICAgaWYgKGhhdmVTZWxlY3Rpb24gJiYgIXVzZUN1c3RvbVVuZGVybGlu
ZXMgJiYgIWNvbnRleHQucGFpbnRpbmdEaXNhYmxlZCgpKSB7Ci0gICAgICAgICAgICBhdXRvIHNl
bGVjdGlvbk1hcmtlZFRleHQgPSBjcmVhdGVNYXJrZWRUZXh0RnJvbVNlbGVjdGlvbkluQm94KCp0
aGlzKTsKLSAgICAgICAgICAgIGlmICghc2VsZWN0aW9uTWFya2VkVGV4dC5pc0VtcHR5KCkpCi0g
ICAgICAgICAgICAgICAgbWFya2VkVGV4dHMuYXBwZW5kKFdURk1vdmUoc2VsZWN0aW9uTWFya2Vk
VGV4dCkpOwotICAgICAgICB9Ci0jZW5kaWYKLSAgICAgICAgYXV0byBzdHlsZWRNYXJrZWRUZXh0
cyA9IFN0eWxlZE1hcmtlZFRleHQ6OnN1YmRpdmlkZUFuZFJlc29sdmUobWFya2VkVGV4dHMsIHJl
bmRlcmVyKCksIGlzRmlyc3RMaW5lKCksIHBhaW50SW5mbyk7Ci0KLSAgICAgICAgLy8gQ29hbGVz
Y2Ugc3R5bGVzIG9mIGFkamFjZW50IG1hcmtlZCB0ZXh0cyB0byBtaW5pbWl6ZSB0aGUgbnVtYmVy
IG9mIGRyYXdpbmcgY29tbWFuZHMuCi0gICAgICAgIGF1dG8gY29hbGVzY2VkU3R5bGVkTWFya2Vk
VGV4dHMgPSBTdHlsZWRNYXJrZWRUZXh0Ojpjb2FsZXNjZUFkamFjZW50V2l0aEVxdWFsQmFja2dy
b3VuZChzdHlsZWRNYXJrZWRUZXh0cyk7Ci0KLSAgICAgICAgZm9yIChhdXRvJiBtYXJrZWRUZXh0
IDogY29hbGVzY2VkU3R5bGVkTWFya2VkVGV4dHMpCi0gICAgICAgICAgICB0ZXh0Qm94UGFpbnRl
ci5wYWludEJhY2tncm91bmQobWFya2VkVGV4dCk7Ci0gICAgfQotCi0gICAgLy8gRklYTUU6IFJp
Z2h0IG5vdywgTGVnYWN5SW5saW5lVGV4dEJveGVzIG5ldmVyIGNhbGwgYWRkUmVsZXZhbnRVbnBh
aW50ZWRPYmplY3QoKSBldmVuIHRob3VnaCB0aGV5IG1pZ2h0Ci0gICAgLy8gbGVnaXRpbWF0ZWx5
IGJlIHVucGFpbnRlZCBpZiB0aGV5IGFyZSB3YWl0aW5nIG9uIGEgc2xvdy1sb2FkaW5nIHdlYiBm
b250LiBXZSBzaG91bGQgZml4IHRoYXQsIGFuZAotICAgIC8vIHdoZW4gd2UgZG8sIHdlIHdpbGwg
aGF2ZSB0byBhY2NvdW50IGZvciB0aGUgZmFjdCB0aGUgTGVnYWN5SW5saW5lVGV4dEJveGVzIGRv
IG5vdCBhbHdheXMgaGF2ZSB1bmlxdWUKLSAgICAvLyByZW5kZXJlcnMgYW5kIFBhZ2UgY3VycmVu
dGx5IHJlbGllcyBvbiBlYWNoIHVucGFpbnRlZCBvYmplY3QgaGF2aW5nIGEgdW5pcXVlIHJlbmRl
cmVyLgotICAgIGlmIChwYWludEluZm8ucGhhc2UgPT0gUGFpbnRQaGFzZTo6Rm9yZWdyb3VuZCkK
LSAgICAgICAgcmVuZGVyZXIoKS5wYWdlKCkuYWRkUmVsZXZhbnRSZXBhaW50ZWRPYmplY3QoJnJl
bmRlcmVyKCksIEludFJlY3QoYm94T3JpZ2luLngoKSwgYm94T3JpZ2luLnkoKSwgbG9naWNhbFdp
ZHRoKCksIGxvZ2ljYWxIZWlnaHQoKSkpOwotCi0gICAgaWYgKHBhaW50SW5mby5waGFzZSA9PSBQ
YWludFBoYXNlOjpGb3JlZ3JvdW5kKQotICAgICAgICB0ZXh0Qm94UGFpbnRlci5wYWludFBsYXRm
b3JtRG9jdW1lbnRNYXJrZXJzKCk7Ci0KLSAgICAvLyAyLiBOb3cgcGFpbnQgdGhlIGZvcmVncm91
bmQsIGluY2x1ZGluZyB0ZXh0IGFuZCBkZWNvcmF0aW9ucyBsaWtlIHVuZGVybGluZS9vdmVybGlu
ZSAoaW4gcXVpcmtzIG1vZGUgb25seSkuCi0gICAgYm9vbCBzaG91bGRQYWludFNlbGVjdGlvbkZv
cmVncm91bmQgPSBoYXZlU2VsZWN0aW9uICYmICF1c2VDdXN0b21VbmRlcmxpbmVzOwotICAgIFZl
Y3RvcjxNYXJrZWRUZXh0PiBtYXJrZWRUZXh0czsKLSAgICBpZiAocGFpbnRJbmZvLnBoYXNlICE9
IFBhaW50UGhhc2U6OlNlbGVjdGlvbikgewotICAgICAgICBhdXRvIHNlbGVjdGFibGVSYW5nZSA9
IHRoaXMtPnNlbGVjdGFibGVSYW5nZSgpOwotCi0gICAgICAgIC8vIFRoZSBtYXJrZWQgdGV4dHMg
Zm9yIHRoZSBnYXBzIGJldHdlZW4gZG9jdW1lbnQgbWFya2VycyBhbmQgc2VsZWN0aW9uIGFyZSBp
bXBsaWNpdGx5IGNyZWF0ZWQgYnkgc3ViZGl2aWRpbmcgdGhlIGVudGlyZSBsaW5lLgotICAgICAg
ICBtYXJrZWRUZXh0cy5hcHBlbmQoeyBzZWxlY3RhYmxlUmFuZ2UuY2xhbXAobV9zdGFydCksIHNl
bGVjdGFibGVSYW5nZS5jbGFtcChlbmQoKSksIE1hcmtlZFRleHQ6OlVubWFya2VkIH0pOwotICAg
ICAgICAKLSAgICAgICAgaWYgKCFpc1ByaW50aW5nKSB7Ci0gICAgICAgICAgICBtYXJrZWRUZXh0
cy5hcHBlbmRWZWN0b3IoTWFya2VkVGV4dDo6Y29sbGVjdEZvckRvY3VtZW50TWFya2VycyhyZW5k
ZXJlcigpLCBzZWxlY3RhYmxlUmFuZ2UsIE1hcmtlZFRleHQ6OlBhaW50UGhhc2U6OkZvcmVncm91
bmQpKTsKLSAgICAgICAgICAgIG1hcmtlZFRleHRzLmFwcGVuZFZlY3RvcihNYXJrZWRUZXh0Ojpj
b2xsZWN0Rm9ySGlnaGxpZ2h0cyhyZW5kZXJlcigpLCBwYXJlbnQoKS0+cmVuZGVyZXIoKSwgc2Vs
ZWN0YWJsZVJhbmdlLCBNYXJrZWRUZXh0OjpQYWludFBoYXNlOjpGb3JlZ3JvdW5kKSk7Ci0KLSAg
ICAgICAgICAgIGJvb2wgc2hvdWxkUGFpbnREcmFnZ2VkQ29udGVudCA9ICEocGFpbnRJbmZvLnBh
aW50QmVoYXZpb3IuY29udGFpbnMoUGFpbnRCZWhhdmlvcjo6RXhjbHVkZVNlbGVjdGlvbikpOwot
ICAgICAgICAgICAgaWYgKHNob3VsZFBhaW50RHJhZ2dlZENvbnRlbnQpIHsKLSAgICAgICAgICAg
ICAgICBhdXRvIG1hcmtlZFRleHRzRm9yRHJhZ2dlZENvbnRlbnQgPSBNYXJrZWRUZXh0Ojpjb2xs
ZWN0Rm9yRHJhZ2dlZENvbnRlbnQocmVuZGVyZXIoKSwgc2VsZWN0YWJsZVJhbmdlKTsKLSAgICAg
ICAgICAgICAgICBpZiAoIW1hcmtlZFRleHRzRm9yRHJhZ2dlZENvbnRlbnQuaXNFbXB0eSgpKSB7
Ci0gICAgICAgICAgICAgICAgICAgIHNob3VsZFBhaW50U2VsZWN0aW9uRm9yZWdyb3VuZCA9IGZh
bHNlOwotICAgICAgICAgICAgICAgICAgICBtYXJrZWRUZXh0cy5hcHBlbmRWZWN0b3IobWFya2Vk
VGV4dHNGb3JEcmFnZ2VkQ29udGVudCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
fQotICAgICAgICB9Ci0gICAgfQotICAgIC8vIFRoZSBzZWxlY3Rpb24gbWFya2VkIHRleHQgYWN0
cyBhcyBhIHBsYWNlaG9sZGVyIHdoZW4gY29tcHV0aW5nIHRoZSBtYXJrZWQgdGV4dHMgZm9yIHRo
ZSBnYXBzLi4uCi0gICAgaWYgKHNob3VsZFBhaW50U2VsZWN0aW9uRm9yZWdyb3VuZCkgewotICAg
ICAgICBBU1NFUlQoIWlzUHJpbnRpbmcpOwotICAgICAgICBhdXRvIHNlbGVjdGlvbk1hcmtlZFRl
eHQgPSBjcmVhdGVNYXJrZWRUZXh0RnJvbVNlbGVjdGlvbkluQm94KCp0aGlzKTsKLSAgICAgICAg
aWYgKCFzZWxlY3Rpb25NYXJrZWRUZXh0LmlzRW1wdHkoKSkKLSAgICAgICAgICAgIG1hcmtlZFRl
eHRzLmFwcGVuZChXVEZNb3ZlKHNlbGVjdGlvbk1hcmtlZFRleHQpKTsKLSAgICB9Ci0KLSAgICBh
dXRvIHN0eWxlZE1hcmtlZFRleHRzID0gU3R5bGVkTWFya2VkVGV4dDo6c3ViZGl2aWRlQW5kUmVz
b2x2ZShtYXJrZWRUZXh0cywgcmVuZGVyZXIoKSwgaXNGaXJzdExpbmUoKSwgcGFpbnRJbmZvKTsK
LQotICAgIC8vIC4uLiBub3cgcmVtb3ZlIHRoZSBzZWxlY3Rpb24gbWFya2VkIHRleHQgaWYgd2Ug
YXJlIGV4Y2x1ZGluZyBzZWxlY3Rpb24uCi0gICAgaWYgKCFpc1ByaW50aW5nICYmIHBhaW50SW5m
by5wYWludEJlaGF2aW9yLmNvbnRhaW5zKFBhaW50QmVoYXZpb3I6OkV4Y2x1ZGVTZWxlY3Rpb24p
KSB7Ci0gICAgICAgIHN0eWxlZE1hcmtlZFRleHRzLnJlbW92ZUFsbE1hdGNoaW5nKFtdIChjb25z
dCBTdHlsZWRNYXJrZWRUZXh0JiBtYXJrZWRUZXh0KSB7Ci0gICAgICAgICAgICByZXR1cm4gbWFy
a2VkVGV4dC50eXBlID09IE1hcmtlZFRleHQ6OlNlbGVjdGlvbjsKLSAgICAgICAgfSk7Ci0gICAg
fQotCi0gICAgLy8gQ29hbGVzY2Ugc3R5bGVzIG9mIGFkamFjZW50IG1hcmtlZCB0ZXh0cyB0byBt
aW5pbWl6ZSB0aGUgbnVtYmVyIG9mIGRyYXdpbmcgY29tbWFuZHMuCi0gICAgYXV0byBjb2FsZXNj
ZWRTdHlsZWRNYXJrZWRUZXh0cyA9IFN0eWxlZE1hcmtlZFRleHQ6OmNvYWxlc2NlQWRqYWNlbnRX
aXRoRXF1YWxGb3JlZ3JvdW5kKHN0eWxlZE1hcmtlZFRleHRzKTsKLQotICAgIGZvciAoYXV0byYg
bWFya2VkVGV4dCA6IGNvYWxlc2NlZFN0eWxlZE1hcmtlZFRleHRzKQotICAgICAgICB0ZXh0Qm94
UGFpbnRlci5wYWludEZvcmVncm91bmQobWFya2VkVGV4dCk7Ci0KLSAgICAvLyBQYWludCBkZWNv
cmF0aW9ucwotICAgIGF1dG8gdGV4dERlY29yYXRpb25zID0gbGluZVN0eWxlLnRleHREZWNvcmF0
aW9uc0luRWZmZWN0KCk7Ci0gICAgYm9vbCBoaWdobGlnaHREZWNvcmF0aW9ucyA9ICFNYXJrZWRU
ZXh0Ojpjb2xsZWN0Rm9ySGlnaGxpZ2h0cyhyZW5kZXJlcigpLCBwYXJlbnQoKS0+cmVuZGVyZXIo
KSwgc2VsZWN0YWJsZVJhbmdlKCksIE1hcmtlZFRleHQ6OlBhaW50UGhhc2U6OkRlY29yYXRpb24p
LmlzRW1wdHkoKTsKLSAgICBib29sIGxpbmVEZWNvcmF0aW9ucyA9ICF0ZXh0RGVjb3JhdGlvbnMu
aXNFbXB0eSgpOwotICAgIGlmICgobGluZURlY29yYXRpb25zIHx8IGhpZ2hsaWdodERlY29yYXRp
b25zKSAmJiBwYWludEluZm8ucGhhc2UgIT0gUGFpbnRQaGFzZTo6U2VsZWN0aW9uKSB7Ci0gICAg
ICAgIFRleHRSdW4gdGV4dFJ1biA9IGNyZWF0ZVRleHRSdW4oKTsKLSAgICAgICAgdW5zaWduZWQg
bGVuZ3RoID0gdGV4dFJ1bi5sZW5ndGgoKTsKLSAgICAgICAgaWYgKG1fdHJ1bmNhdGlvbiAhPSBj
Tm9UcnVuY2F0aW9uKQotICAgICAgICAgICAgbGVuZ3RoID0gbV90cnVuY2F0aW9uOwotICAgICAg
ICB1bnNpZ25lZCBzZWxlY3Rpb25TdGFydCA9IDA7Ci0gICAgICAgIHVuc2lnbmVkIHNlbGVjdGlv
bkVuZCA9IDA7Ci0gICAgICAgIGlmIChoYXZlU2VsZWN0aW9uKQotICAgICAgICAgICAgc3RkOjp0
aWUoc2VsZWN0aW9uU3RhcnQsIHNlbGVjdGlvbkVuZCkgPSBzZWxlY3Rpb25TdGFydEVuZCgpOwot
Ci0gICAgICAgIEZsb2F0UmVjdCB0ZXh0RGVjb3JhdGlvblNlbGVjdGlvbkNsaXBPdXRSZWN0Owot
ICAgICAgICBpZiAoKHBhaW50SW5mby5wYWludEJlaGF2aW9yLmNvbnRhaW5zKFBhaW50QmVoYXZp
b3I6OkV4Y2x1ZGVTZWxlY3Rpb24pKSAmJiBzZWxlY3Rpb25TdGFydCA8IHNlbGVjdGlvbkVuZCAm
JiBzZWxlY3Rpb25FbmQgPD0gbGVuZ3RoKSB7Ci0gICAgICAgICAgICB0ZXh0RGVjb3JhdGlvblNl
bGVjdGlvbkNsaXBPdXRSZWN0ID0gbG9naWNhbE92ZXJmbG93UmVjdCgpOwotICAgICAgICAgICAg
dGV4dERlY29yYXRpb25TZWxlY3Rpb25DbGlwT3V0UmVjdC5tb3ZlQnkobG9jYWxQYWludE9mZnNl
dCk7Ci0gICAgICAgICAgICBmbG9hdCBsb2dpY2FsV2lkdGhCZWZvcmVSYW5nZTsKLSAgICAgICAg
ICAgIGZsb2F0IGxvZ2ljYWxXaWR0aEFmdGVyUmFuZ2U7Ci0gICAgICAgICAgICBmbG9hdCBsb2dp
Y2FsU2VsZWN0aW9uV2lkdGggPSBsaW5lRm9udCgpLndpZHRoT2ZUZXh0UmFuZ2UodGV4dFJ1biwg
c2VsZWN0aW9uU3RhcnQsIHNlbGVjdGlvbkVuZCwgbnVsbHB0ciwgJmxvZ2ljYWxXaWR0aEJlZm9y
ZVJhbmdlLCAmbG9naWNhbFdpZHRoQWZ0ZXJSYW5nZSk7Ci0gICAgICAgICAgICAvLyBGSVhNRTog
RG8gd2UgbmVlZCB0byBoYW5kbGUgdmVydGljYWwgYm90dG9tIHRvIHRvcCB0ZXh0PwotICAgICAg
ICAgICAgaWYgKCFpc0hvcml6b250YWwoKSkgewotICAgICAgICAgICAgICAgIHRleHREZWNvcmF0
aW9uU2VsZWN0aW9uQ2xpcE91dFJlY3QubW92ZSgwLCBsb2dpY2FsV2lkdGhCZWZvcmVSYW5nZSk7
Ci0gICAgICAgICAgICAgICAgdGV4dERlY29yYXRpb25TZWxlY3Rpb25DbGlwT3V0UmVjdC5zZXRI
ZWlnaHQobG9naWNhbFNlbGVjdGlvbldpZHRoKTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoZGly
ZWN0aW9uKCkgPT0gVGV4dERpcmVjdGlvbjo6UlRMKSB7Ci0gICAgICAgICAgICAgICAgdGV4dERl
Y29yYXRpb25TZWxlY3Rpb25DbGlwT3V0UmVjdC5tb3ZlKGxvZ2ljYWxXaWR0aEFmdGVyUmFuZ2Us
IDApOwotICAgICAgICAgICAgICAgIHRleHREZWNvcmF0aW9uU2VsZWN0aW9uQ2xpcE91dFJlY3Qu
c2V0V2lkdGgobG9naWNhbFNlbGVjdGlvbldpZHRoKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICAgICAgdGV4dERlY29yYXRpb25TZWxlY3Rpb25DbGlwT3V0UmVjdC5tb3ZlKGxv
Z2ljYWxXaWR0aEJlZm9yZVJhbmdlLCAwKTsKLSAgICAgICAgICAgICAgICB0ZXh0RGVjb3JhdGlv
blNlbGVjdGlvbkNsaXBPdXRSZWN0LnNldFdpZHRoKGxvZ2ljYWxTZWxlY3Rpb25XaWR0aCk7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBDb2FsZXNjZSBzdHlsZXMgb2Yg
YWRqYWNlbnQgbWFya2VkIHRleHRzIHRvIG1pbmltaXplIHRoZSBudW1iZXIgb2YgZHJhd2luZyBj
b21tYW5kcy4KLSAgICAgICAgYXV0byBjb2FsZXNjZWRTdHlsZWRNYXJrZWRUZXh0cyA9IFN0eWxl
ZE1hcmtlZFRleHQ6OmNvYWxlc2NlQWRqYWNlbnRXaXRoRXF1YWxEZWNvcmF0aW9ucyhzdHlsZWRN
YXJrZWRUZXh0cyk7Ci0KLSAgICAgICAgZm9yIChhdXRvJiBtYXJrZWRUZXh0IDogY29hbGVzY2Vk
U3R5bGVkTWFya2VkVGV4dHMpCi0gICAgICAgICAgICB0ZXh0Qm94UGFpbnRlci5wYWludERlY29y
YXRpb24obWFya2VkVGV4dCwgdGV4dERlY29yYXRpb25TZWxlY3Rpb25DbGlwT3V0UmVjdCk7Ci0g
ICAgfQogCi0gICAgLy8gMy4gUGFpbnQgZmFuY3kgZGVjb3JhdGlvbnMsIGluY2x1ZGluZyBjb21w
b3NpdGlvbiB1bmRlcmxpbmVzIGFuZCBwbGF0Zm9ybS1zcGVjaWZpYyB1bmRlcmxpbmVzIGZvciBz
cGVsbGluZyBlcnJvcnMsIGdyYW1tYXIgZXJyb3JzLCBldCBjZXRlcmEuCi0gICAgaWYgKHBhaW50
SW5mby5waGFzZSA9PSBQYWludFBoYXNlOjpGb3JlZ3JvdW5kICYmIHVzZUN1c3RvbVVuZGVybGlu
ZXMpCi0gICAgICAgIHRleHRCb3hQYWludGVyLnBhaW50Q29tcG9zaXRpb25VbmRlcmxpbmVzKCk7
CisgICAgVGV4dEJveFBhaW50ZXIgdGV4dEJveFBhaW50ZXIoKnRoaXMsIHBhaW50SW5mbywgcGFp
bnRPZmZzZXQpOworICAgIHRleHRCb3hQYWludGVyLnBhaW50KCk7CiB9CiAKIFRleHRCb3hTZWxl
Y3RhYmxlUmFuZ2UgTGVnYWN5SW5saW5lVGV4dEJveDo6c2VsZWN0YWJsZVJhbmdlKCkgY29uc3QK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9MZWdhY3lJbmxpbmVUZXh0Qm94
LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvTGVnYWN5SW5saW5lVGV4dEJveC5oCmluZGV4
IDY1MjJhYjQxMmQwYzViYzQ1ZWU2ZTMyMDFkMzI2MzYyOGZiNTdiMDkuLjRjMzk4MTYyZjZlM2Y5
ZmY5YzBhZTQ0ZDgxY2MzZDIzZWRkNzkyMDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9MZWdhY3lJbmxpbmVUZXh0Qm94LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL0xlZ2FjeUlubGluZVRleHRCb3guaApAQCAtMTI4LDcgKzEyOCw3IEBAIHByaXZhdGU6CiAg
ICAgdm9pZCBhdHRhY2hMaW5lKCkgZmluYWw7CiAgICAgCiBwdWJsaWM6Ci0gICAgUmVuZGVyT2Jq
ZWN0OjpIaWdobGlnaHRTdGF0ZSBzZWxlY3Rpb25TdGF0ZSgpIGZpbmFsOworICAgIFJlbmRlck9i
amVjdDo6SGlnaGxpZ2h0U3RhdGUgc2VsZWN0aW9uU3RhdGUoKSBjb25zdCBmaW5hbDsKIAogcHJp
dmF0ZToKICAgICB2b2lkIGNsZWFyVHJ1bmNhdGlvbigpIGZpbmFsIHsgbV90cnVuY2F0aW9uID0g
Y05vVHJ1bmNhdGlvbjsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0xl
Z2FjeVJvb3RJbmxpbmVCb3guY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0xlZ2FjeVJv
b3RJbmxpbmVCb3guY3BwCmluZGV4IDE4NWYyZWY3MjUwYjkyMGQ5MjY2ZDBhNDIzODcwZWYxNTVi
ZDUzYmYuLmQ0MmZiMWFmNzVlMzBiNDdkODhkZjg5MmZkYWY4ZTMwNTg3YmFjNTMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9MZWdhY3lSb290SW5saW5lQm94LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvTGVnYWN5Um9vdElubGluZUJveC5jcHAKQEAgLTQ4
Miw3ICs0ODIsNyBAQCBHYXBSZWN0cyBMZWdhY3lSb290SW5saW5lQm94OjpsaW5lU2VsZWN0aW9u
R2FwKFJlbmRlckJsb2NrJiByb290QmxvY2ssIGNvbnN0IExheQogICAgIHJldHVybiByZXN1bHQ7
CiB9CiAKLVJlbmRlck9iamVjdDo6SGlnaGxpZ2h0U3RhdGUgTGVnYWN5Um9vdElubGluZUJveDo6
c2VsZWN0aW9uU3RhdGUoKQorUmVuZGVyT2JqZWN0OjpIaWdobGlnaHRTdGF0ZSBMZWdhY3lSb290
SW5saW5lQm94OjpzZWxlY3Rpb25TdGF0ZSgpIGNvbnN0CiB7CiAgICAgLy8gV2FsayBvdmVyIGFs
bCBvZiB0aGUgc2VsZWN0ZWQgYm94ZXMuCiAgICAgUmVuZGVyT2JqZWN0OjpIaWdobGlnaHRTdGF0
ZSBzdGF0ZSA9IFJlbmRlck9iamVjdDo6SGlnaGxpZ2h0U3RhdGU6Ok5vbmU7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvTGVnYWN5Um9vdElubGluZUJveC5oIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL0xlZ2FjeVJvb3RJbmxpbmVCb3guaAppbmRleCA0MzhjMTZiYTFk
Zjk4ZDY1ZThiN2U4MWE2NTRlYjBjOTA5ZmIyNzQzLi5mNjdkNmFmMDcxZjY1NjYxM2NmN2FmYWI0
YzUyZWZmNTdhZjY1YWJhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvTGVn
YWN5Um9vdElubGluZUJveC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9MZWdhY3lS
b290SW5saW5lQm94LmgKQEAgLTEyNiw3ICsxMjYsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBwYWlu
dChQYWludEluZm8mLCBjb25zdCBMYXlvdXRQb2ludCYsIExheW91dFVuaXQgbGluZVRvcCwgTGF5
b3V0VW5pdCBsaW5lQm90dG9tKSBvdmVycmlkZTsKICAgICBib29sIG5vZGVBdFBvaW50KGNvbnN0
IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0IEhpdFRlc3RMb2NhdGlvbiYg
bG9jYXRpb25JbkNvbnRhaW5lciwgY29uc3QgTGF5b3V0UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0
LCBMYXlvdXRVbml0IGxpbmVUb3AsIExheW91dFVuaXQgbGluZUJvdHRvbSwgSGl0VGVzdEFjdGlv
bikgb3ZlcnJpZGU7CiAKLSAgICBSZW5kZXJPYmplY3Q6OkhpZ2hsaWdodFN0YXRlIHNlbGVjdGlv
blN0YXRlKCkgZmluYWw7CisgICAgUmVuZGVyT2JqZWN0OjpIaWdobGlnaHRTdGF0ZSBzZWxlY3Rp
b25TdGF0ZSgpIGNvbnN0IGZpbmFsOwogICAgIExlZ2FjeUlubGluZUJveCogZmlyc3RTZWxlY3Rl
ZEJveCgpOwogICAgIExlZ2FjeUlubGluZUJveCogbGFzdFNlbGVjdGVkQm94KCk7CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9NYXJrZWRUZXh0LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9NYXJrZWRUZXh0LmNwcAppbmRleCBiNTk1YWE5NWI1NjY1YTc3NGEw
NGY2ODA3MTU3YTEyZjViOTlkODAyLi5kMWMzMzcwNDJlY2FkYmYxYTBjZWRlNTEwNWUyYmQ2ODgy
NjBlNzhlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvTWFya2VkVGV4dC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL01hcmtlZFRleHQuY3BwCkBAIC0xMDQs
MTEgKzEwNCwxMiBAQCBWZWN0b3I8TWFya2VkVGV4dD4gTWFya2VkVGV4dDo6c3ViZGl2aWRlKGNv
bnN0IFZlY3RvcjxNYXJrZWRUZXh0PiYgbWFya2VkVGV4dHMsCiAgICAgcmV0dXJuIHJlc3VsdDsK
IH0KIAotVmVjdG9yPE1hcmtlZFRleHQ+IE1hcmtlZFRleHQ6OmNvbGxlY3RGb3JIaWdobGlnaHRz
KFJlbmRlclRleHQmIHJlbmRlcmVyLCBSZW5kZXJCb3hNb2RlbE9iamVjdCYgcGFyZW50UmVuZGVy
ZXIsIGNvbnN0IFRleHRCb3hTZWxlY3RhYmxlUmFuZ2UmIHNlbGVjdGFibGVSYW5nZSwgUGFpbnRQ
aGFzZSBwaGFzZSkKK1ZlY3RvcjxNYXJrZWRUZXh0PiBNYXJrZWRUZXh0Ojpjb2xsZWN0Rm9ySGln
aGxpZ2h0cyhSZW5kZXJUZXh0JiByZW5kZXJlciwgY29uc3QgVGV4dEJveFNlbGVjdGFibGVSYW5n
ZSYgc2VsZWN0YWJsZVJhbmdlLCBQYWludFBoYXNlIHBoYXNlKQogewogICAgIFZlY3RvcjxNYXJr
ZWRUZXh0PiBtYXJrZWRUZXh0czsKICAgICBIaWdobGlnaHREYXRhIGhpZ2hsaWdodERhdGE7CiAg
ICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkuaGlnaGxpZ2h0
QVBJRW5hYmxlZCgpKSB7CisgICAgICAgIGF1dG8mIHBhcmVudFJlbmRlcmVyID0gKnJlbmRlcmVy
LnBhcmVudCgpOwogICAgICAgICBhdXRvJiBwYXJlbnRTdHlsZSA9IHBhcmVudFJlbmRlcmVyLnN0
eWxlKCk7CiAgICAgICAgIGlmIChhdXRvIGhpZ2hsaWdodFJlZ2lzdGVyID0gcmVuZGVyZXIuZG9j
dW1lbnQoKS5oaWdobGlnaHRSZWdpc3RlcklmRXhpc3RzKCkpIHsKICAgICAgICAgICAgIGZvciAo
YXV0byYgaGlnaGxpZ2h0IDogaGlnaGxpZ2h0UmVnaXN0ZXItPm1hcCgpKSB7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvTWFya2VkVGV4dC5oIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL01hcmtlZFRleHQuaAppbmRleCAxYTNhMzQyYWQ4MDIzMTdlOWZlNzIxMzE5YWZj
NmMxM2U4NDAxM2ViLi41MDg1Y2Q2MDI0OTY5Y2FhNjg4NjI0ZTJlZTVkZmIwZGYyZmI2MTdiIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvTWFya2VkVGV4dC5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9NYXJrZWRUZXh0LmgKQEAgLTgzLDcgKzgzLDcgQEAgc3Ry
dWN0IE1hcmtlZFRleHQgewogICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBWZWN0b3I8TWFya2Vk
VGV4dD4gc3ViZGl2aWRlKGNvbnN0IFZlY3RvcjxNYXJrZWRUZXh0PiYsIE92ZXJsYXBTdHJhdGVn
eSA9IE92ZXJsYXBTdHJhdGVneTo6Tm9uZSk7CiAKICAgICBzdGF0aWMgVmVjdG9yPE1hcmtlZFRl
eHQ+IGNvbGxlY3RGb3JEb2N1bWVudE1hcmtlcnMoUmVuZGVyVGV4dCYsIGNvbnN0IFRleHRCb3hT
ZWxlY3RhYmxlUmFuZ2UmLCBQYWludFBoYXNlKTsKLSAgICBzdGF0aWMgVmVjdG9yPE1hcmtlZFRl
eHQ+IGNvbGxlY3RGb3JIaWdobGlnaHRzKFJlbmRlclRleHQmLCBSZW5kZXJCb3hNb2RlbE9iamVj
dCYgcGFyZW50UmVuZGVyZXIsIGNvbnN0IFRleHRCb3hTZWxlY3RhYmxlUmFuZ2UmLCBQYWludFBo
YXNlKTsKKyAgICBzdGF0aWMgVmVjdG9yPE1hcmtlZFRleHQ+IGNvbGxlY3RGb3JIaWdobGlnaHRz
KFJlbmRlclRleHQmLCBjb25zdCBUZXh0Qm94U2VsZWN0YWJsZVJhbmdlJiwgUGFpbnRQaGFzZSk7
CiAgICAgc3RhdGljIFZlY3RvcjxNYXJrZWRUZXh0PiBjb2xsZWN0Rm9yRHJhZ2dlZENvbnRlbnQo
UmVuZGVyVGV4dCYsIGNvbnN0IFRleHRCb3hTZWxlY3RhYmxlUmFuZ2UmKTsKIH07CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0Qm94UGFpbnRlci5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvVGV4dEJveFBhaW50ZXIuY3BwCmluZGV4IDI1YjA0Nzg5ZTMw
OTJiYTFhMDA0NmUxZjFjNTI2YTM4MGFlMjk4NTguLjdmNDg4Y2NkODBjNmIzOGJiYTJiYzc4MmZl
MGViNTdiOTM4NzY2NmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0
Qm94UGFpbnRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1RleHRCb3hQYWlu
dGVyLmNwcApAQCAtMzYsMjEgKzM2LDE3NyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVRl
eHRCb3hQYWludGVyOjpUZXh0Qm94UGFpbnRlcihjb25zdCBMZWdhY3lJbmxpbmVUZXh0Qm94JiB0
ZXh0Qm94LCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgRmxvYXRSZWN0JiBib3hSZWN0KQor
VGV4dEJveFBhaW50ZXI6OlRleHRCb3hQYWludGVyKGNvbnN0IExlZ2FjeUlubGluZVRleHRCb3gm
IHRleHRCb3gsIFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRP
ZmZzZXQpCiAgICAgOiBtX3RleHRCb3godGV4dEJveCkKICAgICAsIG1fcGFpbnRJbmZvKHBhaW50
SW5mbykKLSAgICAsIG1fYm94UmVjdChib3hSZWN0KQorICAgICwgbV9wYWludFJlY3QoY29tcHV0
ZVBhaW50UmVjdCh0ZXh0Qm94LCBwYWludE9mZnNldCkpCisgICAgLCBtX2lzUHJpbnRpbmcobV90
ZXh0Qm94LnJlbmRlcmVyKCkuZG9jdW1lbnQoKS5wcmludGluZygpKQorICAgICwgbV9oYXZlU2Vs
ZWN0aW9uKCFtX2lzUHJpbnRpbmcgJiYgbV9wYWludEluZm8ucGhhc2UgIT0gUGFpbnRQaGFzZTo6
VGV4dENsaXAgJiYgbV90ZXh0Qm94LnNlbGVjdGlvblN0YXRlKCkgIT0gUmVuZGVyT2JqZWN0OjpI
aWdobGlnaHRTdGF0ZTo6Tm9uZSkKKyAgICAsIG1fY29udGFpbnNDb21wb3NpdGlvbih0ZXh0Qm94
LnJlbmRlcmVyKCkudGV4dE5vZGUoKSAmJiB0ZXh0Qm94LnJlbmRlcmVyKCkuZnJhbWUoKS5lZGl0
b3IoKS5jb21wb3NpdGlvbk5vZGUoKSA9PSBtX3RleHRCb3gucmVuZGVyZXIoKS50ZXh0Tm9kZSgp
KQorICAgICwgbV91c2VDdXN0b21VbmRlcmxpbmVzKG1fY29udGFpbnNDb21wb3NpdGlvbiAmJiB0
ZXh0Qm94LnJlbmRlcmVyKCkuZnJhbWUoKS5lZGl0b3IoKS5jb21wb3NpdGlvblVzZXNDdXN0b21V
bmRlcmxpbmVzKCkpCiB7Ci0gICAgYm9vbCBzaG91bGRSb3RhdGUgPSAhbV90ZXh0Qm94LmlzSG9y
aXpvbnRhbCgpICYmICFtX3RleHRCb3guY29tYmluZWRUZXh0KCk7Ci0gICAgaWYgKHNob3VsZFJv
dGF0ZSkKLSAgICAgICAgbV9wYWludEluZm8uY29udGV4dCgpLmNvbmNhdENUTShyb3RhdGlvbiht
X2JveFJlY3QsIENsb2Nrd2lzZSkpOwogfQogCiBUZXh0Qm94UGFpbnRlcjo6flRleHRCb3hQYWlu
dGVyKCkKIHsKK30KKwordm9pZCBUZXh0Qm94UGFpbnRlcjo6cGFpbnQoKQoreworICAgIGlmICgh
bV9oYXZlU2VsZWN0aW9uICYmIG1fcGFpbnRJbmZvLnBoYXNlID09IFBhaW50UGhhc2U6OlNlbGVj
dGlvbikKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKG1fcGFpbnRJbmZvLnBoYXNlID09IFBh
aW50UGhhc2U6OkV2ZW50UmVnaW9uKSB7CisgICAgICAgIGlmIChtX3RleHRCb3gudmlzaWJsZVRv
SGl0VGVzdGluZygpKQorICAgICAgICAgICAgbV9wYWludEluZm8uZXZlbnRSZWdpb25Db250ZXh0
LT51bml0ZShlbmNsb3NpbmdJbnRSZWN0KG1fcGFpbnRSZWN0KSwgbV90ZXh0Qm94LnJlbmRlcmVy
KCkuc3R5bGUoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKICAgICBib29sIHNob3VsZFJv
dGF0ZSA9ICFtX3RleHRCb3guaXNIb3Jpem9udGFsKCkgJiYgIW1fdGV4dEJveC5jb21iaW5lZFRl
eHQoKTsKICAgICBpZiAoc2hvdWxkUm90YXRlKQotICAgICAgICBtX3BhaW50SW5mby5jb250ZXh0
KCkuY29uY2F0Q1RNKHJvdGF0aW9uKG1fYm94UmVjdCwgQ291bnRlcmNsb2Nrd2lzZSkpOworICAg
ICAgICBtX3BhaW50SW5mby5jb250ZXh0KCkuY29uY2F0Q1RNKHJvdGF0aW9uKG1fcGFpbnRSZWN0
LCBDbG9ja3dpc2UpKTsKKworICAgIGlmIChtX3BhaW50SW5mby5waGFzZSAhPSBQYWludFBoYXNl
OjpTZWxlY3Rpb24gJiYgbV9wYWludEluZm8ucGhhc2UgIT0gUGFpbnRQaGFzZTo6VGV4dENsaXAg
JiYgIW1faXNQcmludGluZykKKyAgICAgICAgcGFpbnRCYWNrZ3JvdW5kKCk7CisKKyAgICBpZiAo
bV9wYWludEluZm8ucGhhc2UgPT0gUGFpbnRQaGFzZTo6Rm9yZWdyb3VuZCkKKyAgICAgICAgcGFp
bnRQbGF0Zm9ybURvY3VtZW50TWFya2VycygpOworCisgICAgcGFpbnRGb3JlZ3JvdW5kQW5kRGVj
b3JhdGlvbnMoKTsKKworICAgIGlmIChtX3BhaW50SW5mby5waGFzZSA9PSBQYWludFBoYXNlOjpG
b3JlZ3JvdW5kICYmIG1fdXNlQ3VzdG9tVW5kZXJsaW5lcykKKyAgICAgICAgcGFpbnRDb21wb3Np
dGlvblVuZGVybGluZXMoKTsKKworICAgIGlmIChtX3BhaW50SW5mby5waGFzZSA9PSBQYWludFBo
YXNlOjpGb3JlZ3JvdW5kKQorICAgICAgICBtX3RleHRCb3gucmVuZGVyZXIoKS5wYWdlKCkuYWRk
UmVsZXZhbnRSZXBhaW50ZWRPYmplY3QoJm1fdGV4dEJveC5yZW5kZXJlcigpLCBlbmNsb3NpbmdM
YXlvdXRSZWN0KG1fcGFpbnRSZWN0KSk7CisKKyAgICBpZiAoc2hvdWxkUm90YXRlKQorICAgICAg
ICBtX3BhaW50SW5mby5jb250ZXh0KCkuY29uY2F0Q1RNKHJvdGF0aW9uKG1fcGFpbnRSZWN0LCBD
b3VudGVyY2xvY2t3aXNlKSk7Cit9CisKK3N0YXRpYyBNYXJrZWRUZXh0IGNyZWF0ZU1hcmtlZFRl
eHRGcm9tU2VsZWN0aW9uSW5Cb3goY29uc3QgTGVnYWN5SW5saW5lVGV4dEJveCYgYm94KQorewor
ICAgIGF1dG8gW3NlbGVjdGlvblN0YXJ0LCBzZWxlY3Rpb25FbmRdID0gYm94LnNlbGVjdGlvblN0
YXJ0RW5kKCk7CisgICAgaWYgKHNlbGVjdGlvblN0YXJ0IDwgc2VsZWN0aW9uRW5kKQorICAgICAg
ICByZXR1cm4geyBzZWxlY3Rpb25TdGFydCwgc2VsZWN0aW9uRW5kLCBNYXJrZWRUZXh0OjpTZWxl
Y3Rpb24gfTsKKyAgICByZXR1cm4geyB9OworfQorCit2b2lkIFRleHRCb3hQYWludGVyOjpwYWlu
dEJhY2tncm91bmQoKQoreworICAgIGlmIChtX2NvbnRhaW5zQ29tcG9zaXRpb24gJiYgIW1fdXNl
Q3VzdG9tVW5kZXJsaW5lcykKKyAgICAgICAgcGFpbnRDb21wb3NpdGlvbkJhY2tncm91bmQoKTsK
KworICAgIGF1dG8mIHJlbmRlcmVyID0gbV90ZXh0Qm94LnJlbmRlcmVyKCk7CisgICAgYXV0byBz
ZWxlY3RhYmxlUmFuZ2UgPSBtX3RleHRCb3guc2VsZWN0YWJsZVJhbmdlKCk7CisKKyAgICBWZWN0
b3I8TWFya2VkVGV4dD4gbWFya2VkVGV4dHM7CisgICAgbWFya2VkVGV4dHMuYXBwZW5kVmVjdG9y
KE1hcmtlZFRleHQ6OmNvbGxlY3RGb3JEb2N1bWVudE1hcmtlcnMocmVuZGVyZXIsIHNlbGVjdGFi
bGVSYW5nZSwgTWFya2VkVGV4dDo6UGFpbnRQaGFzZTo6QmFja2dyb3VuZCkpOworICAgIG1hcmtl
ZFRleHRzLmFwcGVuZFZlY3RvcihNYXJrZWRUZXh0Ojpjb2xsZWN0Rm9ySGlnaGxpZ2h0cyhyZW5k
ZXJlciwgc2VsZWN0YWJsZVJhbmdlLCBNYXJrZWRUZXh0OjpQYWludFBoYXNlOjpCYWNrZ3JvdW5k
KSk7CisKKyNpZiBFTkFCTEUoVEVYVF9TRUxFQ1RJT04pCisgICAgaWYgKG1faGF2ZVNlbGVjdGlv
biAmJiAhbV91c2VDdXN0b21VbmRlcmxpbmVzICYmICFtX3BhaW50SW5mby5jb250ZXh0KCkucGFp
bnRpbmdEaXNhYmxlZCgpKSB7CisgICAgICAgIGF1dG8gc2VsZWN0aW9uTWFya2VkVGV4dCA9IGNy
ZWF0ZU1hcmtlZFRleHRGcm9tU2VsZWN0aW9uSW5Cb3gobV90ZXh0Qm94KTsKKyAgICAgICAgaWYg
KCFzZWxlY3Rpb25NYXJrZWRUZXh0LmlzRW1wdHkoKSkKKyAgICAgICAgICAgIG1hcmtlZFRleHRz
LmFwcGVuZChXVEZNb3ZlKHNlbGVjdGlvbk1hcmtlZFRleHQpKTsKKyAgICB9CisjZW5kaWYKKyAg
ICBhdXRvIHN0eWxlZE1hcmtlZFRleHRzID0gU3R5bGVkTWFya2VkVGV4dDo6c3ViZGl2aWRlQW5k
UmVzb2x2ZShtYXJrZWRUZXh0cywgcmVuZGVyZXIsIG1fdGV4dEJveC5pc0ZpcnN0TGluZSgpLCBt
X3BhaW50SW5mbyk7CisKKyAgICAvLyBDb2FsZXNjZSBzdHlsZXMgb2YgYWRqYWNlbnQgbWFya2Vk
IHRleHRzIHRvIG1pbmltaXplIHRoZSBudW1iZXIgb2YgZHJhd2luZyBjb21tYW5kcy4KKyAgICBh
dXRvIGNvYWxlc2NlZFN0eWxlZE1hcmtlZFRleHRzID0gU3R5bGVkTWFya2VkVGV4dDo6Y29hbGVz
Y2VBZGphY2VudFdpdGhFcXVhbEJhY2tncm91bmQoc3R5bGVkTWFya2VkVGV4dHMpOworCisgICAg
Zm9yIChhdXRvJiBtYXJrZWRUZXh0IDogY29hbGVzY2VkU3R5bGVkTWFya2VkVGV4dHMpCisgICAg
ICAgIHBhaW50QmFja2dyb3VuZChtYXJrZWRUZXh0KTsKK30KKwordm9pZCBUZXh0Qm94UGFpbnRl
cjo6cGFpbnRGb3JlZ3JvdW5kQW5kRGVjb3JhdGlvbnMoKQoreworICAgIGF1dG8mIHJlbmRlcmVy
ID0gbV90ZXh0Qm94LnJlbmRlcmVyKCk7CisKKyAgICBib29sIHNob3VsZFBhaW50U2VsZWN0aW9u
Rm9yZWdyb3VuZCA9IG1faGF2ZVNlbGVjdGlvbiAmJiAhbV91c2VDdXN0b21VbmRlcmxpbmVzOwor
ICAgIFZlY3RvcjxNYXJrZWRUZXh0PiBtYXJrZWRUZXh0czsKKyAgICBpZiAobV9wYWludEluZm8u
cGhhc2UgIT0gUGFpbnRQaGFzZTo6U2VsZWN0aW9uKSB7CisgICAgICAgIGF1dG8gc2VsZWN0YWJs
ZVJhbmdlID0gbV90ZXh0Qm94LnNlbGVjdGFibGVSYW5nZSgpOworCisgICAgICAgIC8vIFRoZSBt
YXJrZWQgdGV4dHMgZm9yIHRoZSBnYXBzIGJldHdlZW4gZG9jdW1lbnQgbWFya2VycyBhbmQgc2Vs
ZWN0aW9uIGFyZSBpbXBsaWNpdGx5IGNyZWF0ZWQgYnkgc3ViZGl2aWRpbmcgdGhlIGVudGlyZSBs
aW5lLgorICAgICAgICBtYXJrZWRUZXh0cy5hcHBlbmQoeyBzZWxlY3RhYmxlUmFuZ2UuY2xhbXAo
bV90ZXh0Qm94LnN0YXJ0KCkpLCBzZWxlY3RhYmxlUmFuZ2UuY2xhbXAobV90ZXh0Qm94LmVuZCgp
KSwgTWFya2VkVGV4dDo6VW5tYXJrZWQgfSk7CisKKyAgICAgICAgaWYgKCFtX2lzUHJpbnRpbmcp
IHsKKyAgICAgICAgICAgIG1hcmtlZFRleHRzLmFwcGVuZFZlY3RvcihNYXJrZWRUZXh0Ojpjb2xs
ZWN0Rm9yRG9jdW1lbnRNYXJrZXJzKHJlbmRlcmVyLCBzZWxlY3RhYmxlUmFuZ2UsIE1hcmtlZFRl
eHQ6OlBhaW50UGhhc2U6OkZvcmVncm91bmQpKTsKKyAgICAgICAgICAgIG1hcmtlZFRleHRzLmFw
cGVuZFZlY3RvcihNYXJrZWRUZXh0Ojpjb2xsZWN0Rm9ySGlnaGxpZ2h0cyhyZW5kZXJlciwgc2Vs
ZWN0YWJsZVJhbmdlLCBNYXJrZWRUZXh0OjpQYWludFBoYXNlOjpGb3JlZ3JvdW5kKSk7CisKKyAg
ICAgICAgICAgIGJvb2wgc2hvdWxkUGFpbnREcmFnZ2VkQ29udGVudCA9ICEobV9wYWludEluZm8u
cGFpbnRCZWhhdmlvci5jb250YWlucyhQYWludEJlaGF2aW9yOjpFeGNsdWRlU2VsZWN0aW9uKSk7
CisgICAgICAgICAgICBpZiAoc2hvdWxkUGFpbnREcmFnZ2VkQ29udGVudCkgeworICAgICAgICAg
ICAgICAgIGF1dG8gbWFya2VkVGV4dHNGb3JEcmFnZ2VkQ29udGVudCA9IE1hcmtlZFRleHQ6OmNv
bGxlY3RGb3JEcmFnZ2VkQ29udGVudChyZW5kZXJlciwgc2VsZWN0YWJsZVJhbmdlKTsKKyAgICAg
ICAgICAgICAgICBpZiAoIW1hcmtlZFRleHRzRm9yRHJhZ2dlZENvbnRlbnQuaXNFbXB0eSgpKSB7
CisgICAgICAgICAgICAgICAgICAgIHNob3VsZFBhaW50U2VsZWN0aW9uRm9yZWdyb3VuZCA9IGZh
bHNlOworICAgICAgICAgICAgICAgICAgICBtYXJrZWRUZXh0cy5hcHBlbmRWZWN0b3IobWFya2Vk
VGV4dHNGb3JEcmFnZ2VkQ29udGVudCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgfQorICAgIC8vIFRoZSBzZWxlY3Rpb24gbWFya2VkIHRleHQgYWN0
cyBhcyBhIHBsYWNlaG9sZGVyIHdoZW4gY29tcHV0aW5nIHRoZSBtYXJrZWQgdGV4dHMgZm9yIHRo
ZSBnYXBzLi4uCisgICAgaWYgKHNob3VsZFBhaW50U2VsZWN0aW9uRm9yZWdyb3VuZCkgeworICAg
ICAgICBBU1NFUlQoIW1faXNQcmludGluZyk7CisgICAgICAgIGF1dG8gc2VsZWN0aW9uTWFya2Vk
VGV4dCA9IGNyZWF0ZU1hcmtlZFRleHRGcm9tU2VsZWN0aW9uSW5Cb3gobV90ZXh0Qm94KTsKKyAg
ICAgICAgaWYgKCFzZWxlY3Rpb25NYXJrZWRUZXh0LmlzRW1wdHkoKSkKKyAgICAgICAgICAgIG1h
cmtlZFRleHRzLmFwcGVuZChXVEZNb3ZlKHNlbGVjdGlvbk1hcmtlZFRleHQpKTsKKyAgICB9CisK
KyAgICBhdXRvIHN0eWxlZE1hcmtlZFRleHRzID0gU3R5bGVkTWFya2VkVGV4dDo6c3ViZGl2aWRl
QW5kUmVzb2x2ZShtYXJrZWRUZXh0cywgcmVuZGVyZXIsIG1fdGV4dEJveC5pc0ZpcnN0TGluZSgp
LCBtX3BhaW50SW5mbyk7CisKKyAgICAvLyAuLi4gbm93IHJlbW92ZSB0aGUgc2VsZWN0aW9uIG1h
cmtlZCB0ZXh0IGlmIHdlIGFyZSBleGNsdWRpbmcgc2VsZWN0aW9uLgorICAgIGlmICghbV9pc1By
aW50aW5nICYmIG1fcGFpbnRJbmZvLnBhaW50QmVoYXZpb3IuY29udGFpbnMoUGFpbnRCZWhhdmlv
cjo6RXhjbHVkZVNlbGVjdGlvbikpIHsKKyAgICAgICAgc3R5bGVkTWFya2VkVGV4dHMucmVtb3Zl
QWxsTWF0Y2hpbmcoW10gKGNvbnN0IFN0eWxlZE1hcmtlZFRleHQmIG1hcmtlZFRleHQpIHsKKyAg
ICAgICAgICAgIHJldHVybiBtYXJrZWRUZXh0LnR5cGUgPT0gTWFya2VkVGV4dDo6U2VsZWN0aW9u
OworICAgICAgICB9KTsKKyAgICB9CisKKyAgICAvLyBDb2FsZXNjZSBzdHlsZXMgb2YgYWRqYWNl
bnQgbWFya2VkIHRleHRzIHRvIG1pbmltaXplIHRoZSBudW1iZXIgb2YgZHJhd2luZyBjb21tYW5k
cy4KKyAgICBhdXRvIGNvYWxlc2NlZFN0eWxlZE1hcmtlZFRleHRzID0gU3R5bGVkTWFya2VkVGV4
dDo6Y29hbGVzY2VBZGphY2VudFdpdGhFcXVhbEZvcmVncm91bmQoc3R5bGVkTWFya2VkVGV4dHMp
OworCisgICAgZm9yIChhdXRvJiBtYXJrZWRUZXh0IDogY29hbGVzY2VkU3R5bGVkTWFya2VkVGV4
dHMpCisgICAgICAgIHBhaW50Rm9yZWdyb3VuZChtYXJrZWRUZXh0KTsKKworICAgIGF1dG8gdGV4
dERlY29yYXRpb25zID0gbV90ZXh0Qm94LmxpbmVTdHlsZSgpLnRleHREZWNvcmF0aW9uc0luRWZm
ZWN0KCk7CisgICAgYm9vbCBoaWdobGlnaHREZWNvcmF0aW9ucyA9ICFNYXJrZWRUZXh0Ojpjb2xs
ZWN0Rm9ySGlnaGxpZ2h0cyhtX3RleHRCb3gucmVuZGVyZXIoKSwgbV90ZXh0Qm94LnNlbGVjdGFi
bGVSYW5nZSgpLCBNYXJrZWRUZXh0OjpQYWludFBoYXNlOjpEZWNvcmF0aW9uKS5pc0VtcHR5KCk7
CisgICAgYm9vbCBsaW5lRGVjb3JhdGlvbnMgPSAhdGV4dERlY29yYXRpb25zLmlzRW1wdHkoKTsK
KyAgICBpZiAoKGxpbmVEZWNvcmF0aW9ucyB8fCBoaWdobGlnaHREZWNvcmF0aW9ucykgJiYgbV9w
YWludEluZm8ucGhhc2UgIT0gUGFpbnRQaGFzZTo6U2VsZWN0aW9uKSB7CisgICAgICAgIFRleHRS
dW4gdGV4dFJ1biA9IG1fdGV4dEJveC5jcmVhdGVUZXh0UnVuKCk7CisgICAgICAgIHVuc2lnbmVk
IGxlbmd0aCA9IHRleHRSdW4ubGVuZ3RoKCk7CisgICAgICAgIGlmIChtX3RleHRCb3gudHJ1bmNh
dGlvbigpICE9IGNOb1RydW5jYXRpb24pCisgICAgICAgICAgICBsZW5ndGggPSBtX3RleHRCb3gu
dHJ1bmNhdGlvbigpOworICAgICAgICB1bnNpZ25lZCBzZWxlY3Rpb25TdGFydCA9IDA7CisgICAg
ICAgIHVuc2lnbmVkIHNlbGVjdGlvbkVuZCA9IDA7CisgICAgICAgIGlmIChtX2hhdmVTZWxlY3Rp
b24pCisgICAgICAgICAgICBzdGQ6OnRpZShzZWxlY3Rpb25TdGFydCwgc2VsZWN0aW9uRW5kKSA9
IG1fdGV4dEJveC5zZWxlY3Rpb25TdGFydEVuZCgpOworCisgICAgICAgIEZsb2F0UmVjdCB0ZXh0
RGVjb3JhdGlvblNlbGVjdGlvbkNsaXBPdXRSZWN0OworICAgICAgICBpZiAoKG1fcGFpbnRJbmZv
LnBhaW50QmVoYXZpb3IuY29udGFpbnMoUGFpbnRCZWhhdmlvcjo6RXhjbHVkZVNlbGVjdGlvbikp
ICYmIHNlbGVjdGlvblN0YXJ0IDwgc2VsZWN0aW9uRW5kICYmIHNlbGVjdGlvbkVuZCA8PSBsZW5n
dGgpIHsKKyAgICAgICAgICAgIHRleHREZWNvcmF0aW9uU2VsZWN0aW9uQ2xpcE91dFJlY3QgPSBt
X3BhaW50UmVjdDsKKyAgICAgICAgICAgIGZsb2F0IGxvZ2ljYWxXaWR0aEJlZm9yZVJhbmdlOwor
ICAgICAgICAgICAgZmxvYXQgbG9naWNhbFdpZHRoQWZ0ZXJSYW5nZTsKKyAgICAgICAgICAgIGZs
b2F0IGxvZ2ljYWxTZWxlY3Rpb25XaWR0aCA9IG1fdGV4dEJveC5saW5lRm9udCgpLndpZHRoT2ZU
ZXh0UmFuZ2UodGV4dFJ1biwgc2VsZWN0aW9uU3RhcnQsIHNlbGVjdGlvbkVuZCwgbnVsbHB0ciwg
JmxvZ2ljYWxXaWR0aEJlZm9yZVJhbmdlLCAmbG9naWNhbFdpZHRoQWZ0ZXJSYW5nZSk7CisgICAg
ICAgICAgICAvLyBGSVhNRTogRG8gd2UgbmVlZCB0byBoYW5kbGUgdmVydGljYWwgYm90dG9tIHRv
IHRvcCB0ZXh0PworICAgICAgICAgICAgaWYgKCFtX3RleHRCb3guaXNIb3Jpem9udGFsKCkpIHsK
KyAgICAgICAgICAgICAgICB0ZXh0RGVjb3JhdGlvblNlbGVjdGlvbkNsaXBPdXRSZWN0Lm1vdmUo
MCwgbG9naWNhbFdpZHRoQmVmb3JlUmFuZ2UpOworICAgICAgICAgICAgICAgIHRleHREZWNvcmF0
aW9uU2VsZWN0aW9uQ2xpcE91dFJlY3Quc2V0SGVpZ2h0KGxvZ2ljYWxTZWxlY3Rpb25XaWR0aCk7
CisgICAgICAgICAgICB9IGVsc2UgaWYgKG1fdGV4dEJveC5kaXJlY3Rpb24oKSA9PSBUZXh0RGly
ZWN0aW9uOjpSVEwpIHsKKyAgICAgICAgICAgICAgICB0ZXh0RGVjb3JhdGlvblNlbGVjdGlvbkNs
aXBPdXRSZWN0Lm1vdmUobG9naWNhbFdpZHRoQWZ0ZXJSYW5nZSwgMCk7CisgICAgICAgICAgICAg
ICAgdGV4dERlY29yYXRpb25TZWxlY3Rpb25DbGlwT3V0UmVjdC5zZXRXaWR0aChsb2dpY2FsU2Vs
ZWN0aW9uV2lkdGgpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICB0ZXh0
RGVjb3JhdGlvblNlbGVjdGlvbkNsaXBPdXRSZWN0Lm1vdmUobG9naWNhbFdpZHRoQmVmb3JlUmFu
Z2UsIDApOworICAgICAgICAgICAgICAgIHRleHREZWNvcmF0aW9uU2VsZWN0aW9uQ2xpcE91dFJl
Y3Quc2V0V2lkdGgobG9naWNhbFNlbGVjdGlvbldpZHRoKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorCisgICAgICAgIC8vIENvYWxlc2NlIHN0eWxlcyBvZiBhZGphY2VudCBtYXJrZWQgdGV4
dHMgdG8gbWluaW1pemUgdGhlIG51bWJlciBvZiBkcmF3aW5nIGNvbW1hbmRzLgorICAgICAgICBh
dXRvIGNvYWxlc2NlZFN0eWxlZE1hcmtlZFRleHRzID0gU3R5bGVkTWFya2VkVGV4dDo6Y29hbGVz
Y2VBZGphY2VudFdpdGhFcXVhbERlY29yYXRpb25zKHN0eWxlZE1hcmtlZFRleHRzKTsKKworICAg
ICAgICBmb3IgKGF1dG8mIG1hcmtlZFRleHQgOiBjb2FsZXNjZWRTdHlsZWRNYXJrZWRUZXh0cykK
KyAgICAgICAgICAgIHBhaW50RGVjb3JhdGlvbihtYXJrZWRUZXh0LCB0ZXh0RGVjb3JhdGlvblNl
bGVjdGlvbkNsaXBPdXRSZWN0KTsKKyAgICB9CiB9CiAKIHZvaWQgVGV4dEJveFBhaW50ZXI6OnBh
aW50Q29tcG9zaXRpb25CYWNrZ3JvdW5kKCkKQEAgLTEwOSw3ICsyNjUsNyBAQCB2b2lkIFRleHRC
b3hQYWludGVyOjpwYWludEJhY2tncm91bmQodW5zaWduZWQgc3RhcnRPZmZzZXQsIHVuc2lnbmVk
IGVuZE9mZnNldCwgYwogICAgIExheW91dFVuaXQgZGVsdGFZIHsgbV90ZXh0Qm94LnJlbmRlcmVy
KCkuc3R5bGUoKS5pc0ZsaXBwZWRMaW5lc1dyaXRpbmdNb2RlKCkgPyBzZWxlY3Rpb25Cb3R0b20g
LSBtX3RleHRCb3gubG9naWNhbEJvdHRvbSgpIDogbV90ZXh0Qm94LmxvZ2ljYWxUb3AoKSAtIHNl
bGVjdGlvblRvcCB9OwogICAgIExheW91dFVuaXQgc2VsZWN0aW9uSGVpZ2h0ID0gc3RkOjptYXg8
TGF5b3V0VW5pdD4oMCwgc2VsZWN0aW9uQm90dG9tIC0gc2VsZWN0aW9uVG9wKTsKIAotICAgIExh
eW91dFJlY3Qgc2VsZWN0aW9uUmVjdCB7IExheW91dFVuaXQobV9ib3hSZWN0LngoKSksIExheW91
dFVuaXQobV9ib3hSZWN0LnkoKSAtIGRlbHRhWSksIExheW91dFVuaXQobV90ZXh0Qm94LmxvZ2lj
YWxXaWR0aCgpKSwgc2VsZWN0aW9uSGVpZ2h0IH07CisgICAgTGF5b3V0UmVjdCBzZWxlY3Rpb25S
ZWN0IHsgTGF5b3V0VW5pdChtX3BhaW50UmVjdC54KCkpLCBMYXlvdXRVbml0KG1fcGFpbnRSZWN0
LnkoKSAtIGRlbHRhWSksIExheW91dFVuaXQobV90ZXh0Qm94LmxvZ2ljYWxXaWR0aCgpKSwgc2Vs
ZWN0aW9uSGVpZ2h0IH07CiAgICAgbV90ZXh0Qm94LmxpbmVGb250KCkuYWRqdXN0U2VsZWN0aW9u
UmVjdEZvclRleHQodGV4dFJ1biwgc2VsZWN0aW9uUmVjdCwgc3RhcnRPZmZzZXQsIGVuZE9mZnNl
dCk7CiAKICAgICAvLyBGSVhNRTogU3VwcG9ydCBwYWludGluZyBjb21iaW5lZCB0ZXh0LiBTZWUg
PGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODA5OTM+LgpAQCAtMTYx
LDcgKzMxNyw3IEBAIHZvaWQgVGV4dEJveFBhaW50ZXI6OnBhaW50Rm9yZWdyb3VuZChjb25zdCBT
dHlsZWRNYXJrZWRUZXh0JiBtYXJrZWRUZXh0KQogICAgICAgICBjb250ZXh0LnNldEFscGhhKG1h
cmtlZFRleHQuc3R5bGUuYWxwaGEpOwogICAgIH0KICAgICAvLyBUZXh0UGFpbnRlciB3YW50cyB0
aGUgYm94IHJlY3RhbmdsZSBhbmQgdGV4dCBvcmlnaW4gb2YgdGhlIGVudGlyZSBsaW5lIGJveC4K
LSAgICB0ZXh0UGFpbnRlci5wYWludFJhbmdlKHRleHRSdW4sIG1fYm94UmVjdCwgbV90ZXh0Qm94
LnRleHRPcmlnaW5Gcm9tQm94UmVjdChtX2JveFJlY3QpLCBtYXJrZWRUZXh0LnN0YXJ0T2Zmc2V0
LCBtYXJrZWRUZXh0LmVuZE9mZnNldCk7CisgICAgdGV4dFBhaW50ZXIucGFpbnRSYW5nZSh0ZXh0
UnVuLCBtX3BhaW50UmVjdCwgbV90ZXh0Qm94LnRleHRPcmlnaW5Gcm9tQm94UmVjdChtX3BhaW50
UmVjdCksIG1hcmtlZFRleHQuc3RhcnRPZmZzZXQsIG1hcmtlZFRleHQuZW5kT2Zmc2V0KTsKIH0K
IAogdm9pZCBUZXh0Qm94UGFpbnRlcjo6cGFpbnREZWNvcmF0aW9uKGNvbnN0IFN0eWxlZE1hcmtl
ZFRleHQmIG1hcmtlZFRleHQsIGNvbnN0IEZsb2F0UmVjdCYgY2xpcE91dFJlY3QpCkBAIC0xNzcs
NyArMzMzLDcgQEAgdm9pZCBUZXh0Qm94UGFpbnRlcjo6cGFpbnREZWNvcmF0aW9uKGNvbnN0IFN0
eWxlZE1hcmtlZFRleHQmIG1hcmtlZFRleHQsIGNvbnN0IEYKIAogICAgIGJvb2wgaXNDb21iaW5l
ZFRleHQgPSBtX3RleHRCb3guY29tYmluZWRUZXh0KCk7CiAgICAgaWYgKGlzQ29tYmluZWRUZXh0
KQotICAgICAgICBjb250ZXh0LmNvbmNhdENUTShyb3RhdGlvbihtX2JveFJlY3QsIENsb2Nrd2lz
ZSkpOworICAgICAgICBjb250ZXh0LmNvbmNhdENUTShyb3RhdGlvbihtX3BhaW50UmVjdCwgQ2xv
Y2t3aXNlKSk7CiAKICAgICAvLyAxLiBDb21wdXRlIHRleHQgc2VsZWN0aW9uCiAgICAgdW5zaWdu
ZWQgc3RhcnRPZmZzZXQgPSBtYXJrZWRUZXh0LnN0YXJ0T2Zmc2V0OwpAQCAtMTkwLDkgKzM0Niw5
IEBAIHZvaWQgVGV4dEJveFBhaW50ZXI6OnBhaW50RGVjb3JhdGlvbihjb25zdCBTdHlsZWRNYXJr
ZWRUZXh0JiBtYXJrZWRUZXh0LCBjb25zdCBGCiAgICAgVGV4dFJ1biB0ZXh0UnVuID0gbV90ZXh0
Qm94LmNyZWF0ZVRleHRSdW4oKTsKIAogICAgIC8vIEF2b2lkIG1lYXN1cmluZyB0aGUgdGV4dCB3
aGVuIHRoZSBlbnRpcmUgbGluZSBib3ggaXMgc2VsZWN0ZWQgYXMgYW4gb3B0aW1pemF0aW9uLgot
ICAgIEZsb2F0UmVjdCBzbmFwcGVkU2VsZWN0aW9uUmVjdCA9IG1fYm94UmVjdDsKKyAgICBGbG9h
dFJlY3Qgc25hcHBlZFNlbGVjdGlvblJlY3QgPSBtX3BhaW50UmVjdDsKICAgICBpZiAoc3RhcnRP
ZmZzZXQgfHwgZW5kT2Zmc2V0ICE9IHRleHRSdW4ubGVuZ3RoKCkpIHsKLSAgICAgICAgTGF5b3V0
UmVjdCBzZWxlY3Rpb25SZWN0ID0geyBtX2JveFJlY3QueCgpLCBtX2JveFJlY3QueSgpLCBtX2Jv
eFJlY3Qud2lkdGgoKSwgbV9ib3hSZWN0LmhlaWdodCgpIH07CisgICAgICAgIExheW91dFJlY3Qg
c2VsZWN0aW9uUmVjdCA9IHsgbV9wYWludFJlY3QueCgpLCBtX3BhaW50UmVjdC55KCksIG1fcGFp
bnRSZWN0LndpZHRoKCksIG1fcGFpbnRSZWN0LmhlaWdodCgpIH07CiAgICAgICAgIGZvbnQuYWRq
dXN0U2VsZWN0aW9uUmVjdEZvclRleHQodGV4dFJ1biwgc2VsZWN0aW9uUmVjdCwgc3RhcnRPZmZz
ZXQsIGVuZE9mZnNldCk7CiAgICAgICAgIHNuYXBwZWRTZWxlY3Rpb25SZWN0ID0gc25hcFJlY3RU
b0RldmljZVBpeGVsc1dpdGhXcml0aW5nRGlyZWN0aW9uKHNlbGVjdGlvblJlY3QsIG1fdGV4dEJv
eC5yZW5kZXJlcigpLmRvY3VtZW50KCkuZGV2aWNlU2NhbGVGYWN0b3IoKSwgdGV4dFJ1bi5sdHIo
KSk7CiAgICAgfQpAQCAtMjI0LDcgKzM4MCw3IEBAIHZvaWQgVGV4dEJveFBhaW50ZXI6OnBhaW50
RGVjb3JhdGlvbihjb25zdCBTdHlsZWRNYXJrZWRUZXh0JiBtYXJrZWRUZXh0LCBjb25zdCBGCiAg
ICAgfQogCiAgICAgaWYgKGlzQ29tYmluZWRUZXh0KQotICAgICAgICBjb250ZXh0LmNvbmNhdENU
TShyb3RhdGlvbihtX2JveFJlY3QsIENvdW50ZXJjbG9ja3dpc2UpKTsKKyAgICAgICAgY29udGV4
dC5jb25jYXRDVE0ocm90YXRpb24obV9wYWludFJlY3QsIENvdW50ZXJjbG9ja3dpc2UpKTsKIH0K
IAogdm9pZCBUZXh0Qm94UGFpbnRlcjo6cGFpbnRDb21wb3NpdGlvblVuZGVybGluZXMoKQpAQCAt
MzAyLDcgKzQ1OCw3IEBAIHZvaWQgVGV4dEJveFBhaW50ZXI6OnBhaW50Q29tcG9zaXRpb25VbmRl
cmxpbmUoY29uc3QgQ29tcG9zaXRpb25VbmRlcmxpbmUmIHVuZGVyCiAgICAgQ29sb3IgdW5kZXJs
aW5lQ29sb3IgPSB1bmRlcmxpbmUuY29tcG9zaXRpb25VbmRlcmxpbmVDb2xvciA9PSBDb21wb3Np
dGlvblVuZGVybGluZUNvbG9yOjpUZXh0Q29sb3IgPyByZW5kZXJlci5zdHlsZSgpLnZpc2l0ZWRE
ZXBlbmRlbnRDb2xvcldpdGhDb2xvckZpbHRlcihDU1NQcm9wZXJ0eVdlYmtpdFRleHRGaWxsQ29s
b3IpIDogcmVuZGVyZXIuc3R5bGUoKS5jb2xvckJ5QXBwbHlpbmdDb2xvckZpbHRlcih1bmRlcmxp
bmUuY29sb3IpOwogICAgIGNvbnRleHQuc2V0U3Ryb2tlQ29sb3IodW5kZXJsaW5lQ29sb3IpOwog
ICAgIGNvbnRleHQuc2V0U3Ryb2tlVGhpY2tuZXNzKGxpbmVUaGlja25lc3MpOwotICAgIGNvbnRl
eHQuZHJhd0xpbmVGb3JUZXh0KEZsb2F0UmVjdChtX2JveFJlY3QueCgpICsgc3RhcnQsIG1fYm94
UmVjdC55KCkgKyBtX3RleHRCb3gubG9naWNhbEhlaWdodCgpIC0gbGluZVRoaWNrbmVzcywgd2lk
dGgsIGxpbmVUaGlja25lc3MpLCByZW5kZXJlci5kb2N1bWVudCgpLnByaW50aW5nKCkpOworICAg
IGNvbnRleHQuZHJhd0xpbmVGb3JUZXh0KEZsb2F0UmVjdChtX3BhaW50UmVjdC54KCkgKyBzdGFy
dCwgbV9wYWludFJlY3QueSgpICsgbV90ZXh0Qm94LmxvZ2ljYWxIZWlnaHQoKSAtIGxpbmVUaGlj
a25lc3MsIHdpZHRoLCBsaW5lVGhpY2tuZXNzKSwgcmVuZGVyZXIuZG9jdW1lbnQoKS5wcmludGlu
ZygpKTsKIH0KIAogdm9pZCBUZXh0Qm94UGFpbnRlcjo6cGFpbnRQbGF0Zm9ybURvY3VtZW50TWFy
a2VycygpCkBAIC0zNTUsMTAgKzUxMSwzOSBAQCB2b2lkIFRleHRCb3hQYWludGVyOjpwYWludFBs
YXRmb3JtRG9jdW1lbnRNYXJrZXIoY29uc3QgTWFya2VkVGV4dCYgbWFya2VkVGV4dCkKICAgICAg
ICAgfQogICAgIH07CiAKLSAgICBib3VuZHMubW92ZUJ5KG1fYm94UmVjdC5sb2NhdGlvbigpKTsK
KyAgICBib3VuZHMubW92ZUJ5KG1fcGFpbnRSZWN0LmxvY2F0aW9uKCkpOwogICAgIG1fcGFpbnRJ
bmZvLmNvbnRleHQoKS5kcmF3RG90c0ZvckRvY3VtZW50TWFya2VyKGJvdW5kcywgbGluZVN0eWxl
Rm9yTWFya2VkVGV4dFR5cGUoKSk7CiB9CiAKK0Zsb2F0UmVjdCBUZXh0Qm94UGFpbnRlcjo6Y29t
cHV0ZVBhaW50UmVjdChjb25zdCBMZWdhY3lJbmxpbmVUZXh0Qm94JiB0ZXh0Qm94LCBjb25zdCBM
YXlvdXRQb2ludCYgcGFpbnRPZmZzZXQpCit7CisgICAgRmxvYXRQb2ludCBsb2NhbFBhaW50T2Zm
c2V0KHBhaW50T2Zmc2V0KTsKKworICAgIGlmICh0ZXh0Qm94LnRydW5jYXRpb24oKSAhPSBjTm9U
cnVuY2F0aW9uKSB7CisgICAgICAgIGF1dG8mIHJlbmRlcmVyID0gdGV4dEJveC5yZW5kZXJlcigp
OworICAgICAgICBpZiAocmVuZGVyZXIuY29udGFpbmluZ0Jsb2NrKCktPnN0eWxlKCkuaXNMZWZ0
VG9SaWdodERpcmVjdGlvbigpICE9IHRleHRCb3guaXNMZWZ0VG9SaWdodERpcmVjdGlvbigpKSB7
CisgICAgICAgICAgICAvLyBNYWtlIHRoZSB2aXNpYmxlIGZyYWdtZW50IG9mIHRleHQgaHVnIHRo
ZSBlZGdlIGNsb3Nlc3QgdG8gdGhlIHJlc3Qgb2YgdGhlIHJ1biBieSBtb3ZpbmcgdGhlIG9yaWdp
bgorICAgICAgICAgICAgLy8gYXQgd2hpY2ggd2Ugc3RhcnQgZHJhd2luZyB0ZXh0LgorICAgICAg
ICAgICAgLy8gZS5nLiBJbiB0aGUgY2FzZSBvZiBMVFIgdGV4dCB0cnVuY2F0ZWQgaW4gYW4gUlRM
IENvbnRleHQsIHRoZSBjb3JyZWN0IGJlaGF2aW9yIGlzOgorICAgICAgICAgICAgLy8gfEhlbGxv
fENCQXwgLT4gfC4uLkhlfENCQXwKKyAgICAgICAgICAgIC8vIEluIG9yZGVyIHRvIGRyYXcgdGhl
IGZyYWdtZW50ICJIZSIgYWxpZ25lZCB0byB0aGUgcmlnaHQgZWRnZSBvZiBpdCdzIGJveCwgd2Ug
bmVlZCB0byBzdGFydCBkcmF3aW5nCisgICAgICAgICAgICAvLyBmYXJ0aGVyIHRvIHRoZSByaWdo
dC4KKyAgICAgICAgICAgIC8vIE5PVEU6IFdlYktpdCdzIGJlaGF2aW9yIGRpZmZlcnMgZnJvbSB0
aGF0IG9mIElFIHdoaWNoIGFwcGVhcnMgdG8ganVzdCBvdmVybGF5IHRoZSBlbGxpcHNpcyBvbiB0
b3Agb2YgdGhlCisgICAgICAgICAgICAvLyB0cnVuY2F0ZWQgc3RyaW5nIGkuZS4gIHxIZWxsb3xD
QkF8IC0+IHwuLi5sb3xDQkF8CisgICAgICAgICAgICBMYXlvdXRVbml0IHdpZHRoT2ZWaXNpYmxl
VGV4dCB7IHJlbmRlcmVyLndpZHRoKHRleHRCb3guc3RhcnQoKSwgdGV4dEJveC50cnVuY2F0aW9u
KCksIHRleHRCb3gudGV4dFBvcygpLCB0ZXh0Qm94LmlzRmlyc3RMaW5lKCkpIH07CisgICAgICAg
ICAgICBMYXlvdXRVbml0IHdpZHRoT2ZIaWRkZW5UZXh0IHsgdGV4dEJveC5sb2dpY2FsV2lkdGgo
KSAtIHdpZHRoT2ZWaXNpYmxlVGV4dCB9OworICAgICAgICAgICAgTGF5b3V0U2l6ZSB0cnVuY2F0
aW9uT2Zmc2V0KHRleHRCb3guaXNMZWZ0VG9SaWdodERpcmVjdGlvbigpID8gd2lkdGhPZkhpZGRl
blRleHQgOiAtd2lkdGhPZkhpZGRlblRleHQsIDBfbHUpOworICAgICAgICAgICAgbG9jYWxQYWlu
dE9mZnNldC5tb3ZlKHRleHRCb3guaXNIb3Jpem9udGFsKCkgPyB0cnVuY2F0aW9uT2Zmc2V0IDog
dHJ1bmNhdGlvbk9mZnNldC50cmFuc3Bvc2VkU2l6ZSgpKTsKKyAgICAgICAgfQorICAgIH0KKwor
ICAgIGxvY2FsUGFpbnRPZmZzZXQubW92ZSgwLCB0ZXh0Qm94LmxpbmVTdHlsZSgpLmlzSG9yaXpv
bnRhbFdyaXRpbmdNb2RlKCkgPyAwIDogLXRleHRCb3gubG9naWNhbEhlaWdodCgpKTsKKworICAg
IEZsb2F0UG9pbnQgYm94T3JpZ2luID0gdGV4dEJveC5sb2NhdGlvbkluY2x1ZGluZ0ZsaXBwaW5n
KCk7CisgICAgYm94T3JpZ2luLm1vdmVCeShsb2NhbFBhaW50T2Zmc2V0KTsKKyAgICByZXR1cm4g
eyBib3hPcmlnaW4sIEZsb2F0U2l6ZSh0ZXh0Qm94LmxvZ2ljYWxXaWR0aCgpLCB0ZXh0Qm94Lmxv
Z2ljYWxIZWlnaHQoKSkgfTsKK30KKwogRmxvYXRSZWN0IFRleHRCb3hQYWludGVyOjpjYWxjdWxh
dGVEb2N1bWVudE1hcmtlckJvdW5kcyhjb25zdCBMZWdhY3lJbmxpbmVUZXh0Qm94JiB0ZXh0Qm94
LCBjb25zdCBNYXJrZWRUZXh0JiBtYXJrZWRUZXh0KQogewogICAgIGF1dG8mIGZvbnQgPSB0ZXh0
Qm94LmxpbmVGb250KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvVGV4
dEJveFBhaW50ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0Qm94UGFpbnRlci5o
CmluZGV4IDUzZWM5NjQzMDZiYzkxMmJlZjAzYjRiMTA2NDQxNWIwYWMwNjM5ZDEuLmU2NTU0ZjBj
OWNiODA3YTgzM2VjN2EyNWZjNGIwOGFmZjA5YzlhYzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9UZXh0Qm94UGFpbnRlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9UZXh0Qm94UGFpbnRlci5oCkBAIC0zNywyOSArMzcsMzggQEAgc3RydWN0IFN0eWxlZE1h
cmtlZFRleHQ7CiAKIGNsYXNzIFRleHRCb3hQYWludGVyIHsKIHB1YmxpYzoKLSAgICBUZXh0Qm94
UGFpbnRlcihjb25zdCBMZWdhY3lJbmxpbmVUZXh0Qm94JiwgUGFpbnRJbmZvJiwgY29uc3QgRmxv
YXRSZWN0JiBib3hSZWN0KTsKKyAgICBUZXh0Qm94UGFpbnRlcihjb25zdCBMZWdhY3lJbmxpbmVU
ZXh0Qm94JiwgUGFpbnRJbmZvJiwgY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50T2Zmc2V0KTsKICAg
ICB+VGV4dEJveFBhaW50ZXIoKTsKIAotICAgIHZvaWQgcGFpbnRDb21wb3NpdGlvbkJhY2tncm91
bmQoKTsKLSAgICB2b2lkIHBhaW50QmFja2dyb3VuZChjb25zdCBTdHlsZWRNYXJrZWRUZXh0Jik7
Ci0gICAgdm9pZCBwYWludEZvcmVncm91bmQoY29uc3QgU3R5bGVkTWFya2VkVGV4dCYpOwotICAg
IHZvaWQgcGFpbnREZWNvcmF0aW9uKGNvbnN0IFN0eWxlZE1hcmtlZFRleHQmLCBjb25zdCBGbG9h
dFJlY3QmIGNsaXBPdXRSZWN0KTsKLSAgICB2b2lkIHBhaW50Q29tcG9zaXRpb25VbmRlcmxpbmVz
KCk7Ci0gICAgdm9pZCBwYWludFBsYXRmb3JtRG9jdW1lbnRNYXJrZXJzKCk7CisgICAgdm9pZCBw
YWludCgpOwogCiAgICAgc3RhdGljIEZsb2F0UmVjdCBjYWxjdWxhdGVVbmlvbk9mQWxsRG9jdW1l
bnRNYXJrZXJCb3VuZHMoY29uc3QgTGVnYWN5SW5saW5lVGV4dEJveCYpOwogCiBwcml2YXRlOgor
ICAgIHZvaWQgcGFpbnRCYWNrZ3JvdW5kKCk7CisgICAgdm9pZCBwYWludEZvcmVncm91bmRBbmRE
ZWNvcmF0aW9ucygpOworICAgIHZvaWQgcGFpbnRDb21wb3NpdGlvbkJhY2tncm91bmQoKTsKKyAg
ICB2b2lkIHBhaW50Q29tcG9zaXRpb25VbmRlcmxpbmVzKCk7CisgICAgdm9pZCBwYWludFBsYXRm
b3JtRG9jdW1lbnRNYXJrZXJzKCk7CisKICAgICBlbnVtIGNsYXNzIEJhY2tncm91bmRTdHlsZSB7
IE5vcm1hbCwgUm91bmRlZCB9OwogICAgIHZvaWQgcGFpbnRCYWNrZ3JvdW5kKHVuc2lnbmVkIHN0
YXJ0T2Zmc2V0LCB1bnNpZ25lZCBlbmRPZmZzZXQsIGNvbnN0IENvbG9yJiwgQmFja2dyb3VuZFN0
eWxlID0gQmFja2dyb3VuZFN0eWxlOjpOb3JtYWwpOworICAgIHZvaWQgcGFpbnRCYWNrZ3JvdW5k
KGNvbnN0IFN0eWxlZE1hcmtlZFRleHQmKTsKKyAgICB2b2lkIHBhaW50Rm9yZWdyb3VuZChjb25z
dCBTdHlsZWRNYXJrZWRUZXh0Jik7CisgICAgdm9pZCBwYWludERlY29yYXRpb24oY29uc3QgU3R5
bGVkTWFya2VkVGV4dCYsIGNvbnN0IEZsb2F0UmVjdCYgY2xpcE91dFJlY3QpOwogICAgIHZvaWQg
cGFpbnRDb21wb3NpdGlvblVuZGVybGluZShjb25zdCBDb21wb3NpdGlvblVuZGVybGluZSYpOwog
ICAgIHZvaWQgcGFpbnRQbGF0Zm9ybURvY3VtZW50TWFya2VyKGNvbnN0IE1hcmtlZFRleHQmKTsK
LSAgICAKKworICAgIHN0YXRpYyBGbG9hdFJlY3QgY29tcHV0ZVBhaW50UmVjdChjb25zdCBMZWdh
Y3lJbmxpbmVUZXh0Qm94JiwgY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50T2Zmc2V0KTsKICAgICBz
dGF0aWMgRmxvYXRSZWN0IGNhbGN1bGF0ZURvY3VtZW50TWFya2VyQm91bmRzKGNvbnN0IExlZ2Fj
eUlubGluZVRleHRCb3gmLCBjb25zdCBNYXJrZWRUZXh0Jik7CiAKICAgICBjb25zdCBMZWdhY3lJ
bmxpbmVUZXh0Qm94JiBtX3RleHRCb3g7CiAgICAgUGFpbnRJbmZvJiBtX3BhaW50SW5mbzsKLSAg
ICBjb25zdCBGbG9hdFJlY3QgbV9ib3hSZWN0OworICAgIGNvbnN0IEZsb2F0UmVjdCBtX3BhaW50
UmVjdDsKKyAgICBjb25zdCBib29sIG1faXNQcmludGluZzsKKyAgICBjb25zdCBib29sIG1faGF2
ZVNlbGVjdGlvbjsKKyAgICBjb25zdCBib29sIG1fY29udGFpbnNDb21wb3NpdGlvbjsKKyAgICBj
b25zdCBib29sIG1fdXNlQ3VzdG9tVW5kZXJsaW5lczsKIH07CiAKIH0K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>437949</attachid>
            <date>2021-09-11 05:10:14 -0700</date>
            <delta_ts>2021-09-11 09:10:22 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-230188-20210911151013.patch</filename>
            <type>text/plain</type>
            <size>48282</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgyMzA2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZGJhNDIwMjdlNjQyMDYw
OGIxMTU1N2Q0ZTA2ODI4ZmI4N2ExNWFjMS4uNTNkYWM1ZTc2YmVmNmNmYTY4MjQzMDkyNmU0ZGI0
NTQwNjNmNDdjZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ4IEBACisyMDIxLTA5LTExICBBbnR0
aSBLb2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBNb3ZlIHJlc3Qgb2YgdGhl
IExlZ2FjeUlubGluZVRleHRCb3ggcGFpbnRpbmcgY29kZSB0byBUZXh0Qm94UGFpbnRlcgorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjMwMTg4CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTW92ZSB0aGUgcmVt
YWluaW5nIHBhaW50aW5nIGNvZGUuCisKKyAgICAgICAgKiByZW5kZXJpbmcvTGVnYWN5RWxsaXBz
aXNCb3guaDoKKyAgICAgICAgKiByZW5kZXJpbmcvTGVnYWN5SW5saW5lQm94LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkxlZ2FjeUlubGluZUJveDo6c2VsZWN0aW9uU3RhdGUgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6TGVnYWN5SW5saW5lQm94OjpzZWxlY3Rpb25TdGF0ZSk6IERlbGV0ZWQu
CisgICAgICAgICogcmVuZGVyaW5nL0xlZ2FjeUlubGluZUJveC5oOgorICAgICAgICAqIHJlbmRl
cmluZy9MZWdhY3lJbmxpbmVGbG93Qm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxlZ2FjeUlu
bGluZUZsb3dCb3g6OnNlbGVjdGlvblN0YXRlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Okxl
Z2FjeUlubGluZUZsb3dCb3g6OnNlbGVjdGlvblN0YXRlKTogRGVsZXRlZC4KKyAgICAgICAgKiBy
ZW5kZXJpbmcvTGVnYWN5SW5saW5lRmxvd0JveC5oOgorICAgICAgICAqIHJlbmRlcmluZy9MZWdh
Y3lJbmxpbmVUZXh0Qm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxlZ2FjeUlubGluZVRleHRC
b3g6OnNlbGVjdGlvblN0YXRlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxlZ2FjeUlubGlu
ZVRleHRCb3g6OnBhaW50KToKKyAgICAgICAgKFdlYkNvcmU6OkxlZ2FjeUlubGluZVRleHRCb3g6
OnNlbGVjdGlvblN0YXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZU1hcmtl
ZFRleHRGcm9tU2VsZWN0aW9uSW5Cb3gpOiBEZWxldGVkLgorICAgICAgICAqIHJlbmRlcmluZy9M
ZWdhY3lJbmxpbmVUZXh0Qm94Lmg6CisgICAgICAgICogcmVuZGVyaW5nL0xlZ2FjeVJvb3RJbmxp
bmVCb3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6TGVnYWN5Um9vdElubGluZUJveDo6c2VsZWN0
aW9uU3RhdGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGVnYWN5Um9vdElubGluZUJveDo6
c2VsZWN0aW9uU3RhdGUpOiBEZWxldGVkLgorICAgICAgICAqIHJlbmRlcmluZy9MZWdhY3lSb290
SW5saW5lQm94Lmg6CisgICAgICAgICogcmVuZGVyaW5nL01hcmtlZFRleHQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6TWFya2VkVGV4dDo6Y29sbGVjdEZvckhpZ2hsaWdodHMpOgorICAgICAgICAq
IHJlbmRlcmluZy9NYXJrZWRUZXh0Lmg6CisgICAgICAgICogcmVuZGVyaW5nL1RleHRCb3hQYWlu
dGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHRCb3hQYWludGVyOjpUZXh0Qm94UGFpbnRl
cik6CisgICAgICAgIChXZWJDb3JlOjpUZXh0Qm94UGFpbnRlcjo6flRleHRCb3hQYWludGVyKToK
KyAgICAgICAgKFdlYkNvcmU6OlRleHRCb3hQYWludGVyOjpwYWludCk6CisgICAgICAgIChXZWJD
b3JlOjpjcmVhdGVNYXJrZWRUZXh0RnJvbVNlbGVjdGlvbkluQm94KToKKyAgICAgICAgKFdlYkNv
cmU6OlRleHRCb3hQYWludGVyOjpwYWludEJhY2tncm91bmQpOgorICAgICAgICAoV2ViQ29yZTo6
VGV4dEJveFBhaW50ZXI6OnBhaW50Rm9yZWdyb3VuZEFuZERlY29yYXRpb25zKToKKyAgICAgICAg
KFdlYkNvcmU6OlRleHRCb3hQYWludGVyOjpwYWludEZvcmVncm91bmQpOgorICAgICAgICAoV2Vi
Q29yZTo6VGV4dEJveFBhaW50ZXI6OnBhaW50RGVjb3JhdGlvbik6CisgICAgICAgIChXZWJDb3Jl
OjpUZXh0Qm94UGFpbnRlcjo6cGFpbnRDb21wb3NpdGlvblVuZGVybGluZSk6CisgICAgICAgIChX
ZWJDb3JlOjpUZXh0Qm94UGFpbnRlcjo6cGFpbnRQbGF0Zm9ybURvY3VtZW50TWFya2VyKToKKyAg
ICAgICAgKFdlYkNvcmU6OlRleHRCb3hQYWludGVyOjpjb21wdXRlUGFpbnRSZWN0KToKKyAgICAg
ICAgKiByZW5kZXJpbmcvVGV4dEJveFBhaW50ZXIuaDoKKwogMjAyMS0wOS0xMCAgQWxhbiBCdWp0
YXMgIDx6YWxhbkBhcHBsZS5jb20+CiAKICAgICAgICAgW0xlZ2FjeSBMaW5lIExheW91dF0gRG8g
bm90IGludGVncmFsIHJvdW5kIHRoZSByb290IGlubGluZWJveCdzIHRvcCBwb3NpdGlvbgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0xlZ2FjeUVsbGlwc2lzQm94LmggYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvTGVnYWN5RWxsaXBzaXNCb3guaAppbmRleCA4YTg1YjEw
YzcyYTgxNGM3ODZmOGMwODg0OTE0YTg3YmE4MmJkMDJlLi4wOThiNTdmZWM5Yzk4ODc4ODM0YTI1
N2EzYTM0NTUzYWZmZjMzZjQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
TGVnYWN5RWxsaXBzaXNCb3guaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvTGVnYWN5
RWxsaXBzaXNCb3guaApAQCAtNDEsNyArNDEsNyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIHZv
aWQgcGFpbnRNYXJrdXBCb3goUGFpbnRJbmZvJiwgY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50T2Zm
c2V0LCBMYXlvdXRVbml0IGxpbmVUb3AsIExheW91dFVuaXQgbGluZUJvdHRvbSwgY29uc3QgUmVu
ZGVyU3R5bGUmKTsKICAgICBpbnQgaGVpZ2h0KCkgY29uc3QgeyByZXR1cm4gbV9oZWlnaHQ7IH0K
LSAgICBSZW5kZXJPYmplY3Q6OkhpZ2hsaWdodFN0YXRlIHNlbGVjdGlvblN0YXRlKCkgb3ZlcnJp
ZGUgeyByZXR1cm4gbV9zZWxlY3Rpb25TdGF0ZTsgfQorICAgIFJlbmRlck9iamVjdDo6SGlnaGxp
Z2h0U3RhdGUgc2VsZWN0aW9uU3RhdGUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX3NlbGVj
dGlvblN0YXRlOyB9CiAgICAgdm9pZCBwYWludFNlbGVjdGlvbihHcmFwaGljc0NvbnRleHQmLCBj
b25zdCBMYXlvdXRQb2ludCYsIGNvbnN0IFJlbmRlclN0eWxlJiwgY29uc3QgRm9udENhc2NhZGUm
KTsKICAgICBMZWdhY3lJbmxpbmVCb3gqIG1hcmt1cEJveCgpIGNvbnN0OwogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvTGVnYWN5SW5saW5lQm94LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9MZWdhY3lJbmxpbmVCb3guY3BwCmluZGV4IDc0MDJjZGY2MzI3NDA0
YzNhZjMxOTU5MTJlOWM1MmY4NmVkZjU2ZjkuLjNmMWExNWY4ZTUxOTE4ZWI5MzUzOTRmMDkzZjMy
NTIyMmRhZTc4NTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9MZWdhY3lJ
bmxpbmVCb3guY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9MZWdhY3lJbmxpbmVC
b3guY3BwCkBAIC0yNDUsNyArMjQ1LDcgQEAgTGVnYWN5SW5saW5lQm94KiBMZWdhY3lJbmxpbmVC
b3g6OnByZXZpb3VzTGVhZk9uTGluZSgpIGNvbnN0CiAgICAgcmV0dXJuIGxlYWY7CiB9CiAKLVJl
bmRlck9iamVjdDo6SGlnaGxpZ2h0U3RhdGUgTGVnYWN5SW5saW5lQm94OjpzZWxlY3Rpb25TdGF0
ZSgpCitSZW5kZXJPYmplY3Q6OkhpZ2hsaWdodFN0YXRlIExlZ2FjeUlubGluZUJveDo6c2VsZWN0
aW9uU3RhdGUoKSBjb25zdAogewogICAgIHJldHVybiByZW5kZXJlcigpLnNlbGVjdGlvblN0YXRl
KCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvTGVnYWN5SW5saW5l
Qm94LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvTGVnYWN5SW5saW5lQm94LmgKaW5kZXgg
M2I2Zjk1OTA4MzI3ZTRkNjkzNjE2MDA0NDY1NDVmODI2YjA0YjVhYi4uMDU1NTk1ZmVkNDExNjQ5
Mzg1OTdjZTUxZDAxZDIxMzUyZTU2NDAzNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL0xlZ2FjeUlubGluZUJveC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9M
ZWdhY3lJbmxpbmVCb3guaApAQCAtMjE5LDcgKzIxOSw3IEBAIHB1YmxpYzoKIAogICAgIFdFQkNP
UkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBkaXJ0eUxpbmVCb3hlcygpOwogICAgIAotICAgIFdFQkNP
UkVfRVhQT1JUIHZpcnR1YWwgUmVuZGVyT2JqZWN0OjpIaWdobGlnaHRTdGF0ZSBzZWxlY3Rpb25T
dGF0ZSgpOworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgUmVuZGVyT2JqZWN0OjpIaWdobGln
aHRTdGF0ZSBzZWxlY3Rpb25TdGF0ZSgpIGNvbnN0OwogCiAgICAgV0VCQ09SRV9FWFBPUlQgdmly
dHVhbCBib29sIGNhbkFjY29tbW9kYXRlRWxsaXBzaXMoYm9vbCBsdHIsIGludCBibG9ja0VkZ2Us
IGludCBlbGxpcHNpc1dpZHRoKSBjb25zdDsKICAgICAvLyB2aXNpYmxlTGVmdEVkZ2UsIHZpc2li
bGVSaWdodEVkZ2UgYXJlIGluIHRoZSBwYXJlbnQncyBjb29yZGluYXRlIHN5c3RlbS4KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9MZWdhY3lJbmxpbmVGbG93Qm94LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9MZWdhY3lJbmxpbmVGbG93Qm94LmNwcAppbmRleCBl
ZmRmNjVjYzM3NGIzMjRiOGVlZDg3NGMxMTBiMDA0Yzg1YzBmYjM1Li41MmUzMTE3MmVjNjU5ZjRh
N2M0NWJhMzZiNjNjMTBjM2FiY2ExMzdlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvTGVnYWN5SW5saW5lRmxvd0JveC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL0xlZ2FjeUlubGluZUZsb3dCb3guY3BwCkBAIC0xNDU2LDcgKzE0NTYsNyBAQCBMZWdhY3lJ
bmxpbmVCb3gqIExlZ2FjeUlubGluZUZsb3dCb3g6Omxhc3RMZWFmRGVzY2VuZGFudCgpIGNvbnN0
CiAgICAgcmV0dXJuIGxlYWY7CiB9CiAKLVJlbmRlck9iamVjdDo6SGlnaGxpZ2h0U3RhdGUgTGVn
YWN5SW5saW5lRmxvd0JveDo6c2VsZWN0aW9uU3RhdGUoKQorUmVuZGVyT2JqZWN0OjpIaWdobGln
aHRTdGF0ZSBMZWdhY3lJbmxpbmVGbG93Qm94OjpzZWxlY3Rpb25TdGF0ZSgpIGNvbnN0CiB7CiAg
ICAgcmV0dXJuIFJlbmRlck9iamVjdDo6SGlnaGxpZ2h0U3RhdGU6Ok5vbmU7CiB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvTGVnYWN5SW5saW5lRmxvd0JveC5oIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0xlZ2FjeUlubGluZUZsb3dCb3guaAppbmRleCA0N2NmNmU4
NzgzM2NhOTA1ZjA5ZWI5YzNmNzZjMTI5ZTliYTBlZTVmLi5jZDQxZDAxZDA2MGFiMjdmZjUwNjE4
YWRmODAwMTdhNDllMzZmOGQzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
TGVnYWN5SW5saW5lRmxvd0JveC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9MZWdh
Y3lJbmxpbmVGbG93Qm94LmgKQEAgLTIwMyw3ICsyMDMsNyBAQCBwdWJsaWM6CiAgICAgCiAgICAg
dm9pZCByZW1vdmVDaGlsZChMZWdhY3lJbmxpbmVCb3gqIGNoaWxkKTsKIAotICAgIFJlbmRlck9i
amVjdDo6SGlnaGxpZ2h0U3RhdGUgc2VsZWN0aW9uU3RhdGUoKSBvdmVycmlkZTsKKyAgICBSZW5k
ZXJPYmplY3Q6OkhpZ2hsaWdodFN0YXRlIHNlbGVjdGlvblN0YXRlKCkgY29uc3Qgb3ZlcnJpZGU7
CiAKICAgICBib29sIGNhbkFjY29tbW9kYXRlRWxsaXBzaXMoYm9vbCBsdHIsIGludCBibG9ja0Vk
Z2UsIGludCBlbGxpcHNpc1dpZHRoKSBjb25zdCBmaW5hbDsKICAgICBmbG9hdCBwbGFjZUVsbGlw
c2lzQm94KGJvb2wgbHRyLCBmbG9hdCBibG9ja0xlZnRFZGdlLCBmbG9hdCBibG9ja1JpZ2h0RWRn
ZSwgZmxvYXQgZWxsaXBzaXNXaWR0aCwgZmxvYXQgJnRydW5jYXRlZFdpZHRoLCBib29sJikgb3Zl
cnJpZGU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvTGVnYWN5SW5saW5l
VGV4dEJveC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvTGVnYWN5SW5saW5lVGV4dEJv
eC5jcHAKaW5kZXggODlhZWM4ZTQyNmM0ZDgxM2JlMDc5MWI2YThlMTNkM2M5ZjY2OGYyMC4uODVm
MzdjZGNlYmYwODA3MzkwYzVjZmU5YzdhZTkzZGJhZmU4YzNiMSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL0xlZ2FjeUlubGluZVRleHRCb3guY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9MZWdhY3lJbmxpbmVUZXh0Qm94LmNwcApAQCAtMTU5LDcgKzE1OSw3
IEBAIGJvb2wgTGVnYWN5SW5saW5lVGV4dEJveDo6aXNTZWxlY3RhYmxlKHVuc2lnbmVkIHN0YXJ0
UG9zaXRpb24sIHVuc2lnbmVkIGVuZFBvc2l0CiAgICAgcmV0dXJuIHNlbGVjdGFibGVSYW5nZSgp
LmludGVyc2VjdHMoc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24pOwogfQogCi1SZW5kZXJPYmpl
Y3Q6OkhpZ2hsaWdodFN0YXRlIExlZ2FjeUlubGluZVRleHRCb3g6OnNlbGVjdGlvblN0YXRlKCkK
K1JlbmRlck9iamVjdDo6SGlnaGxpZ2h0U3RhdGUgTGVnYWN5SW5saW5lVGV4dEJveDo6c2VsZWN0
aW9uU3RhdGUoKSBjb25zdAogewogICAgIGF1dG8gc3RhdGUgPSByZW5kZXJlcigpLnZpZXcoKS5z
ZWxlY3Rpb24oKS5oaWdobGlnaHRTdGF0ZUZvclRleHRCb3gocmVuZGVyZXIoKSwgc2VsZWN0YWJs
ZVJhbmdlKCkpOwogICAgIApAQCAtNDA0LDE0ICs0MDQsNiBAQCBzdGQ6Om9wdGlvbmFsPGJvb2w+
IExlZ2FjeUlubGluZVRleHRCb3g6OmVtcGhhc2lzTWFya0V4aXN0c0FuZElzQWJvdmUoY29uc3Qg
UmVuZAogICAgIHJldHVybiBpc0Fib3ZlOwogfQogCi1zdGF0aWMgTWFya2VkVGV4dCBjcmVhdGVN
YXJrZWRUZXh0RnJvbVNlbGVjdGlvbkluQm94KGNvbnN0IExlZ2FjeUlubGluZVRleHRCb3gmIGJv
eCkKLXsKLSAgICBhdXRvIFtzZWxlY3Rpb25TdGFydCwgc2VsZWN0aW9uRW5kXSA9IGJveC5zZWxl
Y3Rpb25TdGFydEVuZCgpOwotICAgIGlmIChzZWxlY3Rpb25TdGFydCA8IHNlbGVjdGlvbkVuZCkK
LSAgICAgICAgcmV0dXJuIHsgc2VsZWN0aW9uU3RhcnQsIHNlbGVjdGlvbkVuZCwgTWFya2VkVGV4
dDo6U2VsZWN0aW9uIH07Ci0gICAgcmV0dXJuIHsgfTsKLX0KLQogdm9pZCBMZWdhY3lJbmxpbmVU
ZXh0Qm94OjpwYWludChQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgTGF5b3V0UG9pbnQmIHBh
aW50T2Zmc2V0LCBMYXlvdXRVbml0IC8qbGluZVRvcCovLCBMYXlvdXRVbml0IC8qbGluZUJvdHRv
bSovKQogewogICAgIGlmIChpc0xpbmVCcmVhaygpIHx8ICFwYWludEluZm8uc2hvdWxkUGFpbnRX
aXRoaW5Sb290KHJlbmRlcmVyKCkpIHx8IHJlbmRlcmVyKCkuc3R5bGUoKS52aXNpYmlsaXR5KCkg
IT0gVmlzaWJpbGl0eTo6VmlzaWJsZQpAQCAtNDI3LDE4NyArNDE5LDEyIEBAIHZvaWQgTGVnYWN5
SW5saW5lVGV4dEJveDo6cGFpbnQoUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IExheW91dFBv
aW50JiBwYWludE9mCiAgICAgCiAgICAgTGF5b3V0VW5pdCBwYWludEVuZCA9IGlzSG9yaXpvbnRh
bCgpID8gcGFpbnRJbmZvLnJlY3QubWF4WCgpIDogcGFpbnRJbmZvLnJlY3QubWF4WSgpOwogICAg
IExheW91dFVuaXQgcGFpbnRTdGFydCA9IGlzSG9yaXpvbnRhbCgpID8gcGFpbnRJbmZvLnJlY3Qu
eCgpIDogcGFpbnRJbmZvLnJlY3QueSgpOwotICAgIAotICAgIEZsb2F0UG9pbnQgbG9jYWxQYWlu
dE9mZnNldChwYWludE9mZnNldCk7Ci0gICAgCi0gICAgaWYgKGxvZ2ljYWxTdGFydCA+PSBwYWlu
dEVuZCB8fCBsb2dpY2FsU3RhcnQgKyBsb2dpY2FsRXh0ZW50IDw9IHBhaW50U3RhcnQpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIGJvb2wgaXNQcmludGluZyA9IHJlbmRlcmVyKCkuZG9jdW1lbnQo
KS5wcmludGluZygpOwotICAgIAotICAgIC8vIERldGVybWluZSB3aGV0aGVyIG9yIG5vdCB3ZSdy
ZSBzZWxlY3RlZC4KLSAgICBib29sIGhhdmVTZWxlY3Rpb24gPSAhaXNQcmludGluZyAmJiBwYWlu
dEluZm8ucGhhc2UgIT0gUGFpbnRQaGFzZTo6VGV4dENsaXAgJiYgc2VsZWN0aW9uU3RhdGUoKSAh
PSBSZW5kZXJPYmplY3Q6OkhpZ2hsaWdodFN0YXRlOjpOb25lOwotICAgIGlmICghaGF2ZVNlbGVj
dGlvbiAmJiBwYWludEluZm8ucGhhc2UgPT0gUGFpbnRQaGFzZTo6U2VsZWN0aW9uKSB7Ci0gICAg
ICAgIC8vIFdoZW4gb25seSBwYWludGluZyB0aGUgc2VsZWN0aW9uLCBkb24ndCBib3RoZXIgdG8g
cGFpbnQgaWYgdGhlcmUgaXMgbm9uZS4KLSAgICAgICAgcmV0dXJuOwotICAgIH0KIAotICAgIGlm
IChtX3RydW5jYXRpb24gIT0gY05vVHJ1bmNhdGlvbikgewotICAgICAgICBpZiAocmVuZGVyZXIo
KS5jb250YWluaW5nQmxvY2soKS0+c3R5bGUoKS5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkgIT0g
aXNMZWZ0VG9SaWdodERpcmVjdGlvbigpKSB7Ci0gICAgICAgICAgICAvLyBNYWtlIHRoZSB2aXNp
YmxlIGZyYWdtZW50IG9mIHRleHQgaHVnIHRoZSBlZGdlIGNsb3Nlc3QgdG8gdGhlIHJlc3Qgb2Yg
dGhlIHJ1biBieSBtb3ZpbmcgdGhlIG9yaWdpbgotICAgICAgICAgICAgLy8gYXQgd2hpY2ggd2Ug
c3RhcnQgZHJhd2luZyB0ZXh0LgotICAgICAgICAgICAgLy8gZS5nLiBJbiB0aGUgY2FzZSBvZiBM
VFIgdGV4dCB0cnVuY2F0ZWQgaW4gYW4gUlRMIENvbnRleHQsIHRoZSBjb3JyZWN0IGJlaGF2aW9y
IGlzOgotICAgICAgICAgICAgLy8gfEhlbGxvfENCQXwgLT4gfC4uLkhlfENCQXwKLSAgICAgICAg
ICAgIC8vIEluIG9yZGVyIHRvIGRyYXcgdGhlIGZyYWdtZW50ICJIZSIgYWxpZ25lZCB0byB0aGUg
cmlnaHQgZWRnZSBvZiBpdCdzIGJveCwgd2UgbmVlZCB0byBzdGFydCBkcmF3aW5nCi0gICAgICAg
ICAgICAvLyBmYXJ0aGVyIHRvIHRoZSByaWdodC4KLSAgICAgICAgICAgIC8vIE5PVEU6IFdlYktp
dCdzIGJlaGF2aW9yIGRpZmZlcnMgZnJvbSB0aGF0IG9mIElFIHdoaWNoIGFwcGVhcnMgdG8ganVz
dCBvdmVybGF5IHRoZSBlbGxpcHNpcyBvbiB0b3Agb2YgdGhlCi0gICAgICAgICAgICAvLyB0cnVu
Y2F0ZWQgc3RyaW5nIGkuZS4gIHxIZWxsb3xDQkF8IC0+IHwuLi5sb3xDQkF8Ci0gICAgICAgICAg
ICBMYXlvdXRVbml0IHdpZHRoT2ZWaXNpYmxlVGV4dCB7IHJlbmRlcmVyKCkud2lkdGgobV9zdGFy
dCwgbV90cnVuY2F0aW9uLCB0ZXh0UG9zKCksIGlzRmlyc3RMaW5lKCkpIH07Ci0gICAgICAgICAg
ICBMYXlvdXRVbml0IHdpZHRoT2ZIaWRkZW5UZXh0IHsgbG9naWNhbFdpZHRoKCkgLSB3aWR0aE9m
VmlzaWJsZVRleHQgfTsKLSAgICAgICAgICAgIExheW91dFNpemUgdHJ1bmNhdGlvbk9mZnNldChp
c0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkgPyB3aWR0aE9mSGlkZGVuVGV4dCA6IC13aWR0aE9mSGlk
ZGVuVGV4dCwgMF9sdSk7Ci0gICAgICAgICAgICBsb2NhbFBhaW50T2Zmc2V0Lm1vdmUoaXNIb3Jp
em9udGFsKCkgPyB0cnVuY2F0aW9uT2Zmc2V0IDogdHJ1bmNhdGlvbk9mZnNldC50cmFuc3Bvc2Vk
U2l6ZSgpKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGNvbnN0IFJlbmRlclN0eWxlJiBsaW5l
U3R5bGUgPSB0aGlzLT5saW5lU3R5bGUoKTsKLSAgICAKLSAgICBsb2NhbFBhaW50T2Zmc2V0Lm1v
dmUoMCwgbGluZVN0eWxlLmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyAwIDogLWxvZ2ljYWxI
ZWlnaHQoKSk7Ci0KLSAgICBGbG9hdFBvaW50IGJveE9yaWdpbiA9IGxvY2F0aW9uSW5jbHVkaW5n
RmxpcHBpbmcoKTsKLSAgICBib3hPcmlnaW4ubW92ZUJ5KGxvY2FsUGFpbnRPZmZzZXQpOwotICAg
IEZsb2F0UmVjdCBib3hSZWN0KGJveE9yaWdpbiwgRmxvYXRTaXplKGxvZ2ljYWxXaWR0aCgpLCBs
b2dpY2FsSGVpZ2h0KCkpKTsKLQotICAgIGlmIChwYWludEluZm8ucGhhc2UgPT0gUGFpbnRQaGFz
ZTo6RXZlbnRSZWdpb24pIHsKLSAgICAgICAgaWYgKHZpc2libGVUb0hpdFRlc3RpbmcoKSkKLSAg
ICAgICAgICAgIHBhaW50SW5mby5ldmVudFJlZ2lvbkNvbnRleHQtPnVuaXRlKGVuY2xvc2luZ0lu
dFJlY3QoYm94UmVjdCksIHJlbmRlcmVyKCkuc3R5bGUoKSk7CisgICAgaWYgKGxvZ2ljYWxTdGFy
dCA+PSBwYWludEVuZCB8fCBsb2dpY2FsU3RhcnQgKyBsb2dpY2FsRXh0ZW50IDw9IHBhaW50U3Rh
cnQpCiAgICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBUZXh0Qm94UGFpbnRlciB0ZXh0Qm94
UGFpbnRlcigqdGhpcywgcGFpbnRJbmZvLCBib3hSZWN0KTsKLQotICAgIC8vIERldGVybWluZSB3
aGV0aGVyIG9yIG5vdCB3ZSBoYXZlIGNvbXBvc2l0aW9uIHVuZGVybGluZXMgdG8gZHJhdy4KLSAg
ICBib29sIGNvbnRhaW5zQ29tcG9zaXRpb24gPSByZW5kZXJlcigpLnRleHROb2RlKCkgJiYgcmVu
ZGVyZXIoKS5mcmFtZSgpLmVkaXRvcigpLmNvbXBvc2l0aW9uTm9kZSgpID09IHJlbmRlcmVyKCku
dGV4dE5vZGUoKTsKLSAgICBib29sIHVzZUN1c3RvbVVuZGVybGluZXMgPSBjb250YWluc0NvbXBv
c2l0aW9uICYmIHJlbmRlcmVyKCkuZnJhbWUoKS5lZGl0b3IoKS5jb21wb3NpdGlvblVzZXNDdXN0
b21VbmRlcmxpbmVzKCk7Ci0KLSAgICAvLyAxLiBQYWludCBiYWNrZ3JvdW5kcyBiZWhpbmQgdGV4
dCBpZiBuZWVkZWQuIEV4YW1wbGVzIG9mIHN1Y2ggYmFja2dyb3VuZHMgaW5jbHVkZSBzZWxlY3Rp
b24KLSAgICAvLyBhbmQgY29tcG9zaXRpb24gdW5kZXJsaW5lcy4KLSAgICBpZiAocGFpbnRJbmZv
LnBoYXNlICE9IFBhaW50UGhhc2U6OlNlbGVjdGlvbiAmJiBwYWludEluZm8ucGhhc2UgIT0gUGFp
bnRQaGFzZTo6VGV4dENsaXAgJiYgIWlzUHJpbnRpbmcpIHsKLSAgICAgICAgaWYgKGNvbnRhaW5z
Q29tcG9zaXRpb24gJiYgIXVzZUN1c3RvbVVuZGVybGluZXMpCi0gICAgICAgICAgICB0ZXh0Qm94
UGFpbnRlci5wYWludENvbXBvc2l0aW9uQmFja2dyb3VuZCgpOwotCi0gICAgICAgIGF1dG8gc2Vs
ZWN0YWJsZVJhbmdlID0gdGhpcy0+c2VsZWN0YWJsZVJhbmdlKCk7Ci0KLSAgICAgICAgVmVjdG9y
PE1hcmtlZFRleHQ+IG1hcmtlZFRleHRzOwotICAgICAgICBtYXJrZWRUZXh0cy5hcHBlbmRWZWN0
b3IoTWFya2VkVGV4dDo6Y29sbGVjdEZvckRvY3VtZW50TWFya2VycyhyZW5kZXJlcigpLCBzZWxl
Y3RhYmxlUmFuZ2UsIE1hcmtlZFRleHQ6OlBhaW50UGhhc2U6OkJhY2tncm91bmQpKTsKLSAgICAg
ICAgbWFya2VkVGV4dHMuYXBwZW5kVmVjdG9yKE1hcmtlZFRleHQ6OmNvbGxlY3RGb3JIaWdobGln
aHRzKHJlbmRlcmVyKCksIHBhcmVudCgpLT5yZW5kZXJlcigpLCBzZWxlY3RhYmxlUmFuZ2UsIE1h
cmtlZFRleHQ6OlBhaW50UGhhc2U6OkJhY2tncm91bmQpKTsKLQotI2lmIEVOQUJMRShURVhUX1NF
TEVDVElPTikKLSAgICAgICAgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0ID0gcGFpbnRJbmZvLmNv
bnRleHQoKTsKLSAgICAgICAgaWYgKGhhdmVTZWxlY3Rpb24gJiYgIXVzZUN1c3RvbVVuZGVybGlu
ZXMgJiYgIWNvbnRleHQucGFpbnRpbmdEaXNhYmxlZCgpKSB7Ci0gICAgICAgICAgICBhdXRvIHNl
bGVjdGlvbk1hcmtlZFRleHQgPSBjcmVhdGVNYXJrZWRUZXh0RnJvbVNlbGVjdGlvbkluQm94KCp0
aGlzKTsKLSAgICAgICAgICAgIGlmICghc2VsZWN0aW9uTWFya2VkVGV4dC5pc0VtcHR5KCkpCi0g
ICAgICAgICAgICAgICAgbWFya2VkVGV4dHMuYXBwZW5kKFdURk1vdmUoc2VsZWN0aW9uTWFya2Vk
VGV4dCkpOwotICAgICAgICB9Ci0jZW5kaWYKLSAgICAgICAgYXV0byBzdHlsZWRNYXJrZWRUZXh0
cyA9IFN0eWxlZE1hcmtlZFRleHQ6OnN1YmRpdmlkZUFuZFJlc29sdmUobWFya2VkVGV4dHMsIHJl
bmRlcmVyKCksIGlzRmlyc3RMaW5lKCksIHBhaW50SW5mbyk7Ci0KLSAgICAgICAgLy8gQ29hbGVz
Y2Ugc3R5bGVzIG9mIGFkamFjZW50IG1hcmtlZCB0ZXh0cyB0byBtaW5pbWl6ZSB0aGUgbnVtYmVy
IG9mIGRyYXdpbmcgY29tbWFuZHMuCi0gICAgICAgIGF1dG8gY29hbGVzY2VkU3R5bGVkTWFya2Vk
VGV4dHMgPSBTdHlsZWRNYXJrZWRUZXh0Ojpjb2FsZXNjZUFkamFjZW50V2l0aEVxdWFsQmFja2dy
b3VuZChzdHlsZWRNYXJrZWRUZXh0cyk7Ci0KLSAgICAgICAgZm9yIChhdXRvJiBtYXJrZWRUZXh0
IDogY29hbGVzY2VkU3R5bGVkTWFya2VkVGV4dHMpCi0gICAgICAgICAgICB0ZXh0Qm94UGFpbnRl
ci5wYWludEJhY2tncm91bmQobWFya2VkVGV4dCk7Ci0gICAgfQotCi0gICAgLy8gRklYTUU6IFJp
Z2h0IG5vdywgTGVnYWN5SW5saW5lVGV4dEJveGVzIG5ldmVyIGNhbGwgYWRkUmVsZXZhbnRVbnBh
aW50ZWRPYmplY3QoKSBldmVuIHRob3VnaCB0aGV5IG1pZ2h0Ci0gICAgLy8gbGVnaXRpbWF0ZWx5
IGJlIHVucGFpbnRlZCBpZiB0aGV5IGFyZSB3YWl0aW5nIG9uIGEgc2xvdy1sb2FkaW5nIHdlYiBm
b250LiBXZSBzaG91bGQgZml4IHRoYXQsIGFuZAotICAgIC8vIHdoZW4gd2UgZG8sIHdlIHdpbGwg
aGF2ZSB0byBhY2NvdW50IGZvciB0aGUgZmFjdCB0aGUgTGVnYWN5SW5saW5lVGV4dEJveGVzIGRv
IG5vdCBhbHdheXMgaGF2ZSB1bmlxdWUKLSAgICAvLyByZW5kZXJlcnMgYW5kIFBhZ2UgY3VycmVu
dGx5IHJlbGllcyBvbiBlYWNoIHVucGFpbnRlZCBvYmplY3QgaGF2aW5nIGEgdW5pcXVlIHJlbmRl
cmVyLgotICAgIGlmIChwYWludEluZm8ucGhhc2UgPT0gUGFpbnRQaGFzZTo6Rm9yZWdyb3VuZCkK
LSAgICAgICAgcmVuZGVyZXIoKS5wYWdlKCkuYWRkUmVsZXZhbnRSZXBhaW50ZWRPYmplY3QoJnJl
bmRlcmVyKCksIEludFJlY3QoYm94T3JpZ2luLngoKSwgYm94T3JpZ2luLnkoKSwgbG9naWNhbFdp
ZHRoKCksIGxvZ2ljYWxIZWlnaHQoKSkpOwotCi0gICAgaWYgKHBhaW50SW5mby5waGFzZSA9PSBQ
YWludFBoYXNlOjpGb3JlZ3JvdW5kKQotICAgICAgICB0ZXh0Qm94UGFpbnRlci5wYWludFBsYXRm
b3JtRG9jdW1lbnRNYXJrZXJzKCk7Ci0KLSAgICAvLyAyLiBOb3cgcGFpbnQgdGhlIGZvcmVncm91
bmQsIGluY2x1ZGluZyB0ZXh0IGFuZCBkZWNvcmF0aW9ucyBsaWtlIHVuZGVybGluZS9vdmVybGlu
ZSAoaW4gcXVpcmtzIG1vZGUgb25seSkuCi0gICAgYm9vbCBzaG91bGRQYWludFNlbGVjdGlvbkZv
cmVncm91bmQgPSBoYXZlU2VsZWN0aW9uICYmICF1c2VDdXN0b21VbmRlcmxpbmVzOwotICAgIFZl
Y3RvcjxNYXJrZWRUZXh0PiBtYXJrZWRUZXh0czsKLSAgICBpZiAocGFpbnRJbmZvLnBoYXNlICE9
IFBhaW50UGhhc2U6OlNlbGVjdGlvbikgewotICAgICAgICBhdXRvIHNlbGVjdGFibGVSYW5nZSA9
IHRoaXMtPnNlbGVjdGFibGVSYW5nZSgpOwotCi0gICAgICAgIC8vIFRoZSBtYXJrZWQgdGV4dHMg
Zm9yIHRoZSBnYXBzIGJldHdlZW4gZG9jdW1lbnQgbWFya2VycyBhbmQgc2VsZWN0aW9uIGFyZSBp
bXBsaWNpdGx5IGNyZWF0ZWQgYnkgc3ViZGl2aWRpbmcgdGhlIGVudGlyZSBsaW5lLgotICAgICAg
ICBtYXJrZWRUZXh0cy5hcHBlbmQoeyBzZWxlY3RhYmxlUmFuZ2UuY2xhbXAobV9zdGFydCksIHNl
bGVjdGFibGVSYW5nZS5jbGFtcChlbmQoKSksIE1hcmtlZFRleHQ6OlVubWFya2VkIH0pOwotICAg
ICAgICAKLSAgICAgICAgaWYgKCFpc1ByaW50aW5nKSB7Ci0gICAgICAgICAgICBtYXJrZWRUZXh0
cy5hcHBlbmRWZWN0b3IoTWFya2VkVGV4dDo6Y29sbGVjdEZvckRvY3VtZW50TWFya2VycyhyZW5k
ZXJlcigpLCBzZWxlY3RhYmxlUmFuZ2UsIE1hcmtlZFRleHQ6OlBhaW50UGhhc2U6OkZvcmVncm91
bmQpKTsKLSAgICAgICAgICAgIG1hcmtlZFRleHRzLmFwcGVuZFZlY3RvcihNYXJrZWRUZXh0Ojpj
b2xsZWN0Rm9ySGlnaGxpZ2h0cyhyZW5kZXJlcigpLCBwYXJlbnQoKS0+cmVuZGVyZXIoKSwgc2Vs
ZWN0YWJsZVJhbmdlLCBNYXJrZWRUZXh0OjpQYWludFBoYXNlOjpGb3JlZ3JvdW5kKSk7Ci0KLSAg
ICAgICAgICAgIGJvb2wgc2hvdWxkUGFpbnREcmFnZ2VkQ29udGVudCA9ICEocGFpbnRJbmZvLnBh
aW50QmVoYXZpb3IuY29udGFpbnMoUGFpbnRCZWhhdmlvcjo6RXhjbHVkZVNlbGVjdGlvbikpOwot
ICAgICAgICAgICAgaWYgKHNob3VsZFBhaW50RHJhZ2dlZENvbnRlbnQpIHsKLSAgICAgICAgICAg
ICAgICBhdXRvIG1hcmtlZFRleHRzRm9yRHJhZ2dlZENvbnRlbnQgPSBNYXJrZWRUZXh0Ojpjb2xs
ZWN0Rm9yRHJhZ2dlZENvbnRlbnQocmVuZGVyZXIoKSwgc2VsZWN0YWJsZVJhbmdlKTsKLSAgICAg
ICAgICAgICAgICBpZiAoIW1hcmtlZFRleHRzRm9yRHJhZ2dlZENvbnRlbnQuaXNFbXB0eSgpKSB7
Ci0gICAgICAgICAgICAgICAgICAgIHNob3VsZFBhaW50U2VsZWN0aW9uRm9yZWdyb3VuZCA9IGZh
bHNlOwotICAgICAgICAgICAgICAgICAgICBtYXJrZWRUZXh0cy5hcHBlbmRWZWN0b3IobWFya2Vk
VGV4dHNGb3JEcmFnZ2VkQ29udGVudCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
fQotICAgICAgICB9Ci0gICAgfQotICAgIC8vIFRoZSBzZWxlY3Rpb24gbWFya2VkIHRleHQgYWN0
cyBhcyBhIHBsYWNlaG9sZGVyIHdoZW4gY29tcHV0aW5nIHRoZSBtYXJrZWQgdGV4dHMgZm9yIHRo
ZSBnYXBzLi4uCi0gICAgaWYgKHNob3VsZFBhaW50U2VsZWN0aW9uRm9yZWdyb3VuZCkgewotICAg
ICAgICBBU1NFUlQoIWlzUHJpbnRpbmcpOwotICAgICAgICBhdXRvIHNlbGVjdGlvbk1hcmtlZFRl
eHQgPSBjcmVhdGVNYXJrZWRUZXh0RnJvbVNlbGVjdGlvbkluQm94KCp0aGlzKTsKLSAgICAgICAg
aWYgKCFzZWxlY3Rpb25NYXJrZWRUZXh0LmlzRW1wdHkoKSkKLSAgICAgICAgICAgIG1hcmtlZFRl
eHRzLmFwcGVuZChXVEZNb3ZlKHNlbGVjdGlvbk1hcmtlZFRleHQpKTsKLSAgICB9Ci0KLSAgICBh
dXRvIHN0eWxlZE1hcmtlZFRleHRzID0gU3R5bGVkTWFya2VkVGV4dDo6c3ViZGl2aWRlQW5kUmVz
b2x2ZShtYXJrZWRUZXh0cywgcmVuZGVyZXIoKSwgaXNGaXJzdExpbmUoKSwgcGFpbnRJbmZvKTsK
LQotICAgIC8vIC4uLiBub3cgcmVtb3ZlIHRoZSBzZWxlY3Rpb24gbWFya2VkIHRleHQgaWYgd2Ug
YXJlIGV4Y2x1ZGluZyBzZWxlY3Rpb24uCi0gICAgaWYgKCFpc1ByaW50aW5nICYmIHBhaW50SW5m
by5wYWludEJlaGF2aW9yLmNvbnRhaW5zKFBhaW50QmVoYXZpb3I6OkV4Y2x1ZGVTZWxlY3Rpb24p
KSB7Ci0gICAgICAgIHN0eWxlZE1hcmtlZFRleHRzLnJlbW92ZUFsbE1hdGNoaW5nKFtdIChjb25z
dCBTdHlsZWRNYXJrZWRUZXh0JiBtYXJrZWRUZXh0KSB7Ci0gICAgICAgICAgICByZXR1cm4gbWFy
a2VkVGV4dC50eXBlID09IE1hcmtlZFRleHQ6OlNlbGVjdGlvbjsKLSAgICAgICAgfSk7Ci0gICAg
fQotCi0gICAgLy8gQ29hbGVzY2Ugc3R5bGVzIG9mIGFkamFjZW50IG1hcmtlZCB0ZXh0cyB0byBt
aW5pbWl6ZSB0aGUgbnVtYmVyIG9mIGRyYXdpbmcgY29tbWFuZHMuCi0gICAgYXV0byBjb2FsZXNj
ZWRTdHlsZWRNYXJrZWRUZXh0cyA9IFN0eWxlZE1hcmtlZFRleHQ6OmNvYWxlc2NlQWRqYWNlbnRX
aXRoRXF1YWxGb3JlZ3JvdW5kKHN0eWxlZE1hcmtlZFRleHRzKTsKLQotICAgIGZvciAoYXV0byYg
bWFya2VkVGV4dCA6IGNvYWxlc2NlZFN0eWxlZE1hcmtlZFRleHRzKQotICAgICAgICB0ZXh0Qm94
UGFpbnRlci5wYWludEZvcmVncm91bmQobWFya2VkVGV4dCk7Ci0KLSAgICAvLyBQYWludCBkZWNv
cmF0aW9ucwotICAgIGF1dG8gdGV4dERlY29yYXRpb25zID0gbGluZVN0eWxlLnRleHREZWNvcmF0
aW9uc0luRWZmZWN0KCk7Ci0gICAgYm9vbCBoaWdobGlnaHREZWNvcmF0aW9ucyA9ICFNYXJrZWRU
ZXh0Ojpjb2xsZWN0Rm9ySGlnaGxpZ2h0cyhyZW5kZXJlcigpLCBwYXJlbnQoKS0+cmVuZGVyZXIo
KSwgc2VsZWN0YWJsZVJhbmdlKCksIE1hcmtlZFRleHQ6OlBhaW50UGhhc2U6OkRlY29yYXRpb24p
LmlzRW1wdHkoKTsKLSAgICBib29sIGxpbmVEZWNvcmF0aW9ucyA9ICF0ZXh0RGVjb3JhdGlvbnMu
aXNFbXB0eSgpOwotICAgIGlmICgobGluZURlY29yYXRpb25zIHx8IGhpZ2hsaWdodERlY29yYXRp
b25zKSAmJiBwYWludEluZm8ucGhhc2UgIT0gUGFpbnRQaGFzZTo6U2VsZWN0aW9uKSB7Ci0gICAg
ICAgIFRleHRSdW4gdGV4dFJ1biA9IGNyZWF0ZVRleHRSdW4oKTsKLSAgICAgICAgdW5zaWduZWQg
bGVuZ3RoID0gdGV4dFJ1bi5sZW5ndGgoKTsKLSAgICAgICAgaWYgKG1fdHJ1bmNhdGlvbiAhPSBj
Tm9UcnVuY2F0aW9uKQotICAgICAgICAgICAgbGVuZ3RoID0gbV90cnVuY2F0aW9uOwotICAgICAg
ICB1bnNpZ25lZCBzZWxlY3Rpb25TdGFydCA9IDA7Ci0gICAgICAgIHVuc2lnbmVkIHNlbGVjdGlv
bkVuZCA9IDA7Ci0gICAgICAgIGlmIChoYXZlU2VsZWN0aW9uKQotICAgICAgICAgICAgc3RkOjp0
aWUoc2VsZWN0aW9uU3RhcnQsIHNlbGVjdGlvbkVuZCkgPSBzZWxlY3Rpb25TdGFydEVuZCgpOwot
Ci0gICAgICAgIEZsb2F0UmVjdCB0ZXh0RGVjb3JhdGlvblNlbGVjdGlvbkNsaXBPdXRSZWN0Owot
ICAgICAgICBpZiAoKHBhaW50SW5mby5wYWludEJlaGF2aW9yLmNvbnRhaW5zKFBhaW50QmVoYXZp
b3I6OkV4Y2x1ZGVTZWxlY3Rpb24pKSAmJiBzZWxlY3Rpb25TdGFydCA8IHNlbGVjdGlvbkVuZCAm
JiBzZWxlY3Rpb25FbmQgPD0gbGVuZ3RoKSB7Ci0gICAgICAgICAgICB0ZXh0RGVjb3JhdGlvblNl
bGVjdGlvbkNsaXBPdXRSZWN0ID0gbG9naWNhbE92ZXJmbG93UmVjdCgpOwotICAgICAgICAgICAg
dGV4dERlY29yYXRpb25TZWxlY3Rpb25DbGlwT3V0UmVjdC5tb3ZlQnkobG9jYWxQYWludE9mZnNl
dCk7Ci0gICAgICAgICAgICBmbG9hdCBsb2dpY2FsV2lkdGhCZWZvcmVSYW5nZTsKLSAgICAgICAg
ICAgIGZsb2F0IGxvZ2ljYWxXaWR0aEFmdGVyUmFuZ2U7Ci0gICAgICAgICAgICBmbG9hdCBsb2dp
Y2FsU2VsZWN0aW9uV2lkdGggPSBsaW5lRm9udCgpLndpZHRoT2ZUZXh0UmFuZ2UodGV4dFJ1biwg
c2VsZWN0aW9uU3RhcnQsIHNlbGVjdGlvbkVuZCwgbnVsbHB0ciwgJmxvZ2ljYWxXaWR0aEJlZm9y
ZVJhbmdlLCAmbG9naWNhbFdpZHRoQWZ0ZXJSYW5nZSk7Ci0gICAgICAgICAgICAvLyBGSVhNRTog
RG8gd2UgbmVlZCB0byBoYW5kbGUgdmVydGljYWwgYm90dG9tIHRvIHRvcCB0ZXh0PwotICAgICAg
ICAgICAgaWYgKCFpc0hvcml6b250YWwoKSkgewotICAgICAgICAgICAgICAgIHRleHREZWNvcmF0
aW9uU2VsZWN0aW9uQ2xpcE91dFJlY3QubW92ZSgwLCBsb2dpY2FsV2lkdGhCZWZvcmVSYW5nZSk7
Ci0gICAgICAgICAgICAgICAgdGV4dERlY29yYXRpb25TZWxlY3Rpb25DbGlwT3V0UmVjdC5zZXRI
ZWlnaHQobG9naWNhbFNlbGVjdGlvbldpZHRoKTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoZGly
ZWN0aW9uKCkgPT0gVGV4dERpcmVjdGlvbjo6UlRMKSB7Ci0gICAgICAgICAgICAgICAgdGV4dERl
Y29yYXRpb25TZWxlY3Rpb25DbGlwT3V0UmVjdC5tb3ZlKGxvZ2ljYWxXaWR0aEFmdGVyUmFuZ2Us
IDApOwotICAgICAgICAgICAgICAgIHRleHREZWNvcmF0aW9uU2VsZWN0aW9uQ2xpcE91dFJlY3Qu
c2V0V2lkdGgobG9naWNhbFNlbGVjdGlvbldpZHRoKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICAgICAgdGV4dERlY29yYXRpb25TZWxlY3Rpb25DbGlwT3V0UmVjdC5tb3ZlKGxv
Z2ljYWxXaWR0aEJlZm9yZVJhbmdlLCAwKTsKLSAgICAgICAgICAgICAgICB0ZXh0RGVjb3JhdGlv
blNlbGVjdGlvbkNsaXBPdXRSZWN0LnNldFdpZHRoKGxvZ2ljYWxTZWxlY3Rpb25XaWR0aCk7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBDb2FsZXNjZSBzdHlsZXMgb2Yg
YWRqYWNlbnQgbWFya2VkIHRleHRzIHRvIG1pbmltaXplIHRoZSBudW1iZXIgb2YgZHJhd2luZyBj
b21tYW5kcy4KLSAgICAgICAgYXV0byBjb2FsZXNjZWRTdHlsZWRNYXJrZWRUZXh0cyA9IFN0eWxl
ZE1hcmtlZFRleHQ6OmNvYWxlc2NlQWRqYWNlbnRXaXRoRXF1YWxEZWNvcmF0aW9ucyhzdHlsZWRN
YXJrZWRUZXh0cyk7Ci0KLSAgICAgICAgZm9yIChhdXRvJiBtYXJrZWRUZXh0IDogY29hbGVzY2Vk
U3R5bGVkTWFya2VkVGV4dHMpCi0gICAgICAgICAgICB0ZXh0Qm94UGFpbnRlci5wYWludERlY29y
YXRpb24obWFya2VkVGV4dCwgdGV4dERlY29yYXRpb25TZWxlY3Rpb25DbGlwT3V0UmVjdCk7Ci0g
ICAgfQogCi0gICAgLy8gMy4gUGFpbnQgZmFuY3kgZGVjb3JhdGlvbnMsIGluY2x1ZGluZyBjb21w
b3NpdGlvbiB1bmRlcmxpbmVzIGFuZCBwbGF0Zm9ybS1zcGVjaWZpYyB1bmRlcmxpbmVzIGZvciBz
cGVsbGluZyBlcnJvcnMsIGdyYW1tYXIgZXJyb3JzLCBldCBjZXRlcmEuCi0gICAgaWYgKHBhaW50
SW5mby5waGFzZSA9PSBQYWludFBoYXNlOjpGb3JlZ3JvdW5kICYmIHVzZUN1c3RvbVVuZGVybGlu
ZXMpCi0gICAgICAgIHRleHRCb3hQYWludGVyLnBhaW50Q29tcG9zaXRpb25VbmRlcmxpbmVzKCk7
CisgICAgVGV4dEJveFBhaW50ZXIgdGV4dEJveFBhaW50ZXIoKnRoaXMsIHBhaW50SW5mbywgcGFp
bnRPZmZzZXQpOworICAgIHRleHRCb3hQYWludGVyLnBhaW50KCk7CiB9CiAKIFRleHRCb3hTZWxl
Y3RhYmxlUmFuZ2UgTGVnYWN5SW5saW5lVGV4dEJveDo6c2VsZWN0YWJsZVJhbmdlKCkgY29uc3QK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9MZWdhY3lJbmxpbmVUZXh0Qm94
LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvTGVnYWN5SW5saW5lVGV4dEJveC5oCmluZGV4
IDY1MjJhYjQxMmQwYzViYzQ1ZWU2ZTMyMDFkMzI2MzYyOGZiNTdiMDkuLjRjMzk4MTYyZjZlM2Y5
ZmY5YzBhZTQ0ZDgxY2MzZDIzZWRkNzkyMDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9MZWdhY3lJbmxpbmVUZXh0Qm94LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL0xlZ2FjeUlubGluZVRleHRCb3guaApAQCAtMTI4LDcgKzEyOCw3IEBAIHByaXZhdGU6CiAg
ICAgdm9pZCBhdHRhY2hMaW5lKCkgZmluYWw7CiAgICAgCiBwdWJsaWM6Ci0gICAgUmVuZGVyT2Jq
ZWN0OjpIaWdobGlnaHRTdGF0ZSBzZWxlY3Rpb25TdGF0ZSgpIGZpbmFsOworICAgIFJlbmRlck9i
amVjdDo6SGlnaGxpZ2h0U3RhdGUgc2VsZWN0aW9uU3RhdGUoKSBjb25zdCBmaW5hbDsKIAogcHJp
dmF0ZToKICAgICB2b2lkIGNsZWFyVHJ1bmNhdGlvbigpIGZpbmFsIHsgbV90cnVuY2F0aW9uID0g
Y05vVHJ1bmNhdGlvbjsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0xl
Z2FjeVJvb3RJbmxpbmVCb3guY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0xlZ2FjeVJv
b3RJbmxpbmVCb3guY3BwCmluZGV4IDE4NWYyZWY3MjUwYjkyMGQ5MjY2ZDBhNDIzODcwZWYxNTVi
ZDUzYmYuLmQ0MmZiMWFmNzVlMzBiNDdkODhkZjg5MmZkYWY4ZTMwNTg3YmFjNTMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9MZWdhY3lSb290SW5saW5lQm94LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvTGVnYWN5Um9vdElubGluZUJveC5jcHAKQEAgLTQ4
Miw3ICs0ODIsNyBAQCBHYXBSZWN0cyBMZWdhY3lSb290SW5saW5lQm94OjpsaW5lU2VsZWN0aW9u
R2FwKFJlbmRlckJsb2NrJiByb290QmxvY2ssIGNvbnN0IExheQogICAgIHJldHVybiByZXN1bHQ7
CiB9CiAKLVJlbmRlck9iamVjdDo6SGlnaGxpZ2h0U3RhdGUgTGVnYWN5Um9vdElubGluZUJveDo6
c2VsZWN0aW9uU3RhdGUoKQorUmVuZGVyT2JqZWN0OjpIaWdobGlnaHRTdGF0ZSBMZWdhY3lSb290
SW5saW5lQm94OjpzZWxlY3Rpb25TdGF0ZSgpIGNvbnN0CiB7CiAgICAgLy8gV2FsayBvdmVyIGFs
bCBvZiB0aGUgc2VsZWN0ZWQgYm94ZXMuCiAgICAgUmVuZGVyT2JqZWN0OjpIaWdobGlnaHRTdGF0
ZSBzdGF0ZSA9IFJlbmRlck9iamVjdDo6SGlnaGxpZ2h0U3RhdGU6Ok5vbmU7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvTGVnYWN5Um9vdElubGluZUJveC5oIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL0xlZ2FjeVJvb3RJbmxpbmVCb3guaAppbmRleCA0MzhjMTZiYTFk
Zjk4ZDY1ZThiN2U4MWE2NTRlYjBjOTA5ZmIyNzQzLi5mNjdkNmFmMDcxZjY1NjYxM2NmN2FmYWI0
YzUyZWZmNTdhZjY1YWJhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvTGVn
YWN5Um9vdElubGluZUJveC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9MZWdhY3lS
b290SW5saW5lQm94LmgKQEAgLTEyNiw3ICsxMjYsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBwYWlu
dChQYWludEluZm8mLCBjb25zdCBMYXlvdXRQb2ludCYsIExheW91dFVuaXQgbGluZVRvcCwgTGF5
b3V0VW5pdCBsaW5lQm90dG9tKSBvdmVycmlkZTsKICAgICBib29sIG5vZGVBdFBvaW50KGNvbnN0
IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0IEhpdFRlc3RMb2NhdGlvbiYg
bG9jYXRpb25JbkNvbnRhaW5lciwgY29uc3QgTGF5b3V0UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0
LCBMYXlvdXRVbml0IGxpbmVUb3AsIExheW91dFVuaXQgbGluZUJvdHRvbSwgSGl0VGVzdEFjdGlv
bikgb3ZlcnJpZGU7CiAKLSAgICBSZW5kZXJPYmplY3Q6OkhpZ2hsaWdodFN0YXRlIHNlbGVjdGlv
blN0YXRlKCkgZmluYWw7CisgICAgUmVuZGVyT2JqZWN0OjpIaWdobGlnaHRTdGF0ZSBzZWxlY3Rp
b25TdGF0ZSgpIGNvbnN0IGZpbmFsOwogICAgIExlZ2FjeUlubGluZUJveCogZmlyc3RTZWxlY3Rl
ZEJveCgpOwogICAgIExlZ2FjeUlubGluZUJveCogbGFzdFNlbGVjdGVkQm94KCk7CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9NYXJrZWRUZXh0LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9NYXJrZWRUZXh0LmNwcAppbmRleCBiNTk1YWE5NWI1NjY1YTc3NGEw
NGY2ODA3MTU3YTEyZjViOTlkODAyLi44ZGY1YjNlMmJhMmEzN2I5M2M4ZWFhMmY0MjdjZGU0NDZl
NmM3MzgxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvTWFya2VkVGV4dC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL01hcmtlZFRleHQuY3BwCkBAIC0xMDQs
MTEgKzEwNCwxMiBAQCBWZWN0b3I8TWFya2VkVGV4dD4gTWFya2VkVGV4dDo6c3ViZGl2aWRlKGNv
bnN0IFZlY3RvcjxNYXJrZWRUZXh0PiYgbWFya2VkVGV4dHMsCiAgICAgcmV0dXJuIHJlc3VsdDsK
IH0KIAotVmVjdG9yPE1hcmtlZFRleHQ+IE1hcmtlZFRleHQ6OmNvbGxlY3RGb3JIaWdobGlnaHRz
KFJlbmRlclRleHQmIHJlbmRlcmVyLCBSZW5kZXJCb3hNb2RlbE9iamVjdCYgcGFyZW50UmVuZGVy
ZXIsIGNvbnN0IFRleHRCb3hTZWxlY3RhYmxlUmFuZ2UmIHNlbGVjdGFibGVSYW5nZSwgUGFpbnRQ
aGFzZSBwaGFzZSkKK1ZlY3RvcjxNYXJrZWRUZXh0PiBNYXJrZWRUZXh0Ojpjb2xsZWN0Rm9ySGln
aGxpZ2h0cyhjb25zdCBSZW5kZXJUZXh0JiByZW5kZXJlciwgY29uc3QgVGV4dEJveFNlbGVjdGFi
bGVSYW5nZSYgc2VsZWN0YWJsZVJhbmdlLCBQYWludFBoYXNlIHBoYXNlKQogewogICAgIFZlY3Rv
cjxNYXJrZWRUZXh0PiBtYXJrZWRUZXh0czsKICAgICBIaWdobGlnaHREYXRhIGhpZ2hsaWdodERh
dGE7CiAgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkuaGln
aGxpZ2h0QVBJRW5hYmxlZCgpKSB7CisgICAgICAgIGF1dG8mIHBhcmVudFJlbmRlcmVyID0gKnJl
bmRlcmVyLnBhcmVudCgpOwogICAgICAgICBhdXRvJiBwYXJlbnRTdHlsZSA9IHBhcmVudFJlbmRl
cmVyLnN0eWxlKCk7CiAgICAgICAgIGlmIChhdXRvIGhpZ2hsaWdodFJlZ2lzdGVyID0gcmVuZGVy
ZXIuZG9jdW1lbnQoKS5oaWdobGlnaHRSZWdpc3RlcklmRXhpc3RzKCkpIHsKICAgICAgICAgICAg
IGZvciAoYXV0byYgaGlnaGxpZ2h0IDogaGlnaGxpZ2h0UmVnaXN0ZXItPm1hcCgpKSB7CkBAIC0x
NDcsNyArMTQ4LDcgQEAgVmVjdG9yPE1hcmtlZFRleHQ+IE1hcmtlZFRleHQ6OmNvbGxlY3RGb3JI
aWdobGlnaHRzKFJlbmRlclRleHQmIHJlbmRlcmVyLCBSZW5kZXIKICAgICByZXR1cm4gbWFya2Vk
VGV4dHM7CiB9CiAKLVZlY3RvcjxNYXJrZWRUZXh0PiBNYXJrZWRUZXh0Ojpjb2xsZWN0Rm9yRG9j
dW1lbnRNYXJrZXJzKFJlbmRlclRleHQmIHJlbmRlcmVyLCBjb25zdCBUZXh0Qm94U2VsZWN0YWJs
ZVJhbmdlJiBzZWxlY3RhYmxlUmFuZ2UsIFBhaW50UGhhc2UgcGhhc2UpCitWZWN0b3I8TWFya2Vk
VGV4dD4gTWFya2VkVGV4dDo6Y29sbGVjdEZvckRvY3VtZW50TWFya2Vycyhjb25zdCBSZW5kZXJU
ZXh0JiByZW5kZXJlciwgY29uc3QgVGV4dEJveFNlbGVjdGFibGVSYW5nZSYgc2VsZWN0YWJsZVJh
bmdlLCBQYWludFBoYXNlIHBoYXNlKQogewogICAgIGlmICghcmVuZGVyZXIudGV4dE5vZGUoKSkK
ICAgICAgICAgcmV0dXJuIHsgfTsKQEAgLTI1Miw3ICsyNTMsNyBAQCBWZWN0b3I8TWFya2VkVGV4
dD4gTWFya2VkVGV4dDo6Y29sbGVjdEZvckRvY3VtZW50TWFya2VycyhSZW5kZXJUZXh0JiByZW5k
ZXJlciwgYwogICAgIHJldHVybiBtYXJrZWRUZXh0czsKIH0KIAotVmVjdG9yPE1hcmtlZFRleHQ+
IE1hcmtlZFRleHQ6OmNvbGxlY3RGb3JEcmFnZ2VkQ29udGVudChSZW5kZXJUZXh0JiByZW5kZXJl
ciwgY29uc3QgVGV4dEJveFNlbGVjdGFibGVSYW5nZSYgc2VsZWN0YWJsZVJhbmdlKQorVmVjdG9y
PE1hcmtlZFRleHQ+IE1hcmtlZFRleHQ6OmNvbGxlY3RGb3JEcmFnZ2VkQ29udGVudChjb25zdCBS
ZW5kZXJUZXh0JiByZW5kZXJlciwgY29uc3QgVGV4dEJveFNlbGVjdGFibGVSYW5nZSYgc2VsZWN0
YWJsZVJhbmdlKQogewogICAgIGF1dG8gZHJhZ2dlZENvbnRlbnRSYW5nZXMgPSByZW5kZXJlci5k
cmFnZ2VkQ29udGVudFJhbmdlc0JldHdlZW5PZmZzZXRzKHNlbGVjdGFibGVSYW5nZS5zdGFydCwg
c2VsZWN0YWJsZVJhbmdlLnN0YXJ0ICsgc2VsZWN0YWJsZVJhbmdlLmxlbmd0aCk7CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9NYXJrZWRUZXh0LmggYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvTWFya2VkVGV4dC5oCmluZGV4IDFhM2EzNDJhZDgwMjMxN2U5ZmU3MjEz
MTlhZmM2YzEzZTg0MDEzZWIuLjMwNDIwZTI0OGQyMDFlMDQxOGFjYjgzODE4YTBkZWQ4ZmY5YmE2
MWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9NYXJrZWRUZXh0LmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL01hcmtlZFRleHQuaApAQCAtODIsOSArODIsOSBA
QCBzdHJ1Y3QgTWFya2VkVGV4dCB7CiAKICAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgVmVjdG9y
PE1hcmtlZFRleHQ+IHN1YmRpdmlkZShjb25zdCBWZWN0b3I8TWFya2VkVGV4dD4mLCBPdmVybGFw
U3RyYXRlZ3kgPSBPdmVybGFwU3RyYXRlZ3k6Ok5vbmUpOwogCi0gICAgc3RhdGljIFZlY3RvcjxN
YXJrZWRUZXh0PiBjb2xsZWN0Rm9yRG9jdW1lbnRNYXJrZXJzKFJlbmRlclRleHQmLCBjb25zdCBU
ZXh0Qm94U2VsZWN0YWJsZVJhbmdlJiwgUGFpbnRQaGFzZSk7Ci0gICAgc3RhdGljIFZlY3RvcjxN
YXJrZWRUZXh0PiBjb2xsZWN0Rm9ySGlnaGxpZ2h0cyhSZW5kZXJUZXh0JiwgUmVuZGVyQm94TW9k
ZWxPYmplY3QmIHBhcmVudFJlbmRlcmVyLCBjb25zdCBUZXh0Qm94U2VsZWN0YWJsZVJhbmdlJiwg
UGFpbnRQaGFzZSk7Ci0gICAgc3RhdGljIFZlY3RvcjxNYXJrZWRUZXh0PiBjb2xsZWN0Rm9yRHJh
Z2dlZENvbnRlbnQoUmVuZGVyVGV4dCYsIGNvbnN0IFRleHRCb3hTZWxlY3RhYmxlUmFuZ2UmKTsK
KyAgICBzdGF0aWMgVmVjdG9yPE1hcmtlZFRleHQ+IGNvbGxlY3RGb3JEb2N1bWVudE1hcmtlcnMo
Y29uc3QgUmVuZGVyVGV4dCYsIGNvbnN0IFRleHRCb3hTZWxlY3RhYmxlUmFuZ2UmLCBQYWludFBo
YXNlKTsKKyAgICBzdGF0aWMgVmVjdG9yPE1hcmtlZFRleHQ+IGNvbGxlY3RGb3JIaWdobGlnaHRz
KGNvbnN0IFJlbmRlclRleHQmLCBjb25zdCBUZXh0Qm94U2VsZWN0YWJsZVJhbmdlJiwgUGFpbnRQ
aGFzZSk7CisgICAgc3RhdGljIFZlY3RvcjxNYXJrZWRUZXh0PiBjb2xsZWN0Rm9yRHJhZ2dlZENv
bnRlbnQoY29uc3QgUmVuZGVyVGV4dCYsIGNvbnN0IFRleHRCb3hTZWxlY3RhYmxlUmFuZ2UmKTsK
IH07CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0Qm94UGFp
bnRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvVGV4dEJveFBhaW50ZXIuY3BwCmlu
ZGV4IDI1YjA0Nzg5ZTMwOTJiYTFhMDA0NmUxZjFjNTI2YTM4MGFlMjk4NTguLmU2YmZkMzExYzQy
MTlhZjAwZjhkMWQ5ZWYyZGYxYjI4NThkMzQ3MTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9UZXh0Qm94UGFpbnRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1RleHRCb3hQYWludGVyLmNwcApAQCAtMzAsMzQgKzMwLDE5MyBAQAogI2luY2x1ZGUgIkdy
YXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIkxlZ2FjeUlubGluZVRleHRCb3guaCIKICNpbmNs
dWRlICJQYWludEluZm8uaCIKKyNpbmNsdWRlICJSZW5kZXJUZXh0LmgiCiAjaW5jbHVkZSAiU3R5
bGVkTWFya2VkVGV4dC5oIgogI2luY2x1ZGUgIlRleHRQYWludFN0eWxlLmgiCiAjaW5jbHVkZSAi
VGV4dFBhaW50ZXIuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1UZXh0Qm94UGFpbnRlcjo6
VGV4dEJveFBhaW50ZXIoY29uc3QgTGVnYWN5SW5saW5lVGV4dEJveCYgdGV4dEJveCwgUGFpbnRJ
bmZvJiBwYWludEluZm8sIGNvbnN0IEZsb2F0UmVjdCYgYm94UmVjdCkKK1RleHRCb3hQYWludGVy
OjpUZXh0Qm94UGFpbnRlcihjb25zdCBMZWdhY3lJbmxpbmVUZXh0Qm94JiB0ZXh0Qm94LCBQYWlu
dEluZm8mIHBhaW50SW5mbywgY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50T2Zmc2V0KQogICAgIDog
bV90ZXh0Qm94KHRleHRCb3gpCisgICAgLCBtX3JlbmRlcmVyKHRleHRCb3gucmVuZGVyZXIoKSkK
KyAgICAsIG1fZG9jdW1lbnQobV9yZW5kZXJlci5kb2N1bWVudCgpKQogICAgICwgbV9wYWludElu
Zm8ocGFpbnRJbmZvKQotICAgICwgbV9ib3hSZWN0KGJveFJlY3QpCisgICAgLCBtX3BhaW50UmVj
dChjb21wdXRlUGFpbnRSZWN0KHRleHRCb3gsIHBhaW50T2Zmc2V0KSkKKyAgICAsIG1faXNQcmlu
dGluZyhtX2RvY3VtZW50LnByaW50aW5nKCkpCisgICAgLCBtX2hhdmVTZWxlY3Rpb24oIW1faXNQ
cmludGluZyAmJiBtX3BhaW50SW5mby5waGFzZSAhPSBQYWludFBoYXNlOjpUZXh0Q2xpcCAmJiBt
X3RleHRCb3guc2VsZWN0aW9uU3RhdGUoKSAhPSBSZW5kZXJPYmplY3Q6OkhpZ2hsaWdodFN0YXRl
OjpOb25lKQorICAgICwgbV9jb250YWluc0NvbXBvc2l0aW9uKG1fcmVuZGVyZXIudGV4dE5vZGUo
KSAmJiBtX3JlbmRlcmVyLmZyYW1lKCkuZWRpdG9yKCkuY29tcG9zaXRpb25Ob2RlKCkgPT0gbV9y
ZW5kZXJlci50ZXh0Tm9kZSgpKQorICAgICwgbV91c2VDdXN0b21VbmRlcmxpbmVzKG1fY29udGFp
bnNDb21wb3NpdGlvbiAmJiBtX3JlbmRlcmVyLmZyYW1lKCkuZWRpdG9yKCkuY29tcG9zaXRpb25V
c2VzQ3VzdG9tVW5kZXJsaW5lcygpKQogewotICAgIGJvb2wgc2hvdWxkUm90YXRlID0gIW1fdGV4
dEJveC5pc0hvcml6b250YWwoKSAmJiAhbV90ZXh0Qm94LmNvbWJpbmVkVGV4dCgpOwotICAgIGlm
IChzaG91bGRSb3RhdGUpCi0gICAgICAgIG1fcGFpbnRJbmZvLmNvbnRleHQoKS5jb25jYXRDVE0o
cm90YXRpb24obV9ib3hSZWN0LCBDbG9ja3dpc2UpKTsKKyAgICBBU1NFUlQocGFpbnRJbmZvLnBo
YXNlID09IFBhaW50UGhhc2U6OkZvcmVncm91bmQgfHwgcGFpbnRJbmZvLnBoYXNlID09IFBhaW50
UGhhc2U6OlNlbGVjdGlvbiB8fCBwYWludEluZm8ucGhhc2UgPT0gUGFpbnRQaGFzZTo6VGV4dENs
aXAgfHwgcGFpbnRJbmZvLnBoYXNlID09IFBhaW50UGhhc2U6OkV2ZW50UmVnaW9uKTsKIH0KIAog
VGV4dEJveFBhaW50ZXI6On5UZXh0Qm94UGFpbnRlcigpCiB7Cit9CisKK3ZvaWQgVGV4dEJveFBh
aW50ZXI6OnBhaW50KCkKK3sKKyAgICBpZiAobV9wYWludEluZm8ucGhhc2UgPT0gUGFpbnRQaGFz
ZTo6U2VsZWN0aW9uICYmICFtX2hhdmVTZWxlY3Rpb24pCisgICAgICAgIHJldHVybjsKKworICAg
IGlmIChtX3BhaW50SW5mby5waGFzZSA9PSBQYWludFBoYXNlOjpFdmVudFJlZ2lvbikgeworICAg
ICAgICBpZiAobV90ZXh0Qm94LnZpc2libGVUb0hpdFRlc3RpbmcoKSkKKyAgICAgICAgICAgIG1f
cGFpbnRJbmZvLmV2ZW50UmVnaW9uQ29udGV4dC0+dW5pdGUoZW5jbG9zaW5nSW50UmVjdChtX3Bh
aW50UmVjdCksIG1fcmVuZGVyZXIuc3R5bGUoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisK
ICAgICBib29sIHNob3VsZFJvdGF0ZSA9ICFtX3RleHRCb3guaXNIb3Jpem9udGFsKCkgJiYgIW1f
dGV4dEJveC5jb21iaW5lZFRleHQoKTsKICAgICBpZiAoc2hvdWxkUm90YXRlKQotICAgICAgICBt
X3BhaW50SW5mby5jb250ZXh0KCkuY29uY2F0Q1RNKHJvdGF0aW9uKG1fYm94UmVjdCwgQ291bnRl
cmNsb2Nrd2lzZSkpOworICAgICAgICBtX3BhaW50SW5mby5jb250ZXh0KCkuY29uY2F0Q1RNKHJv
dGF0aW9uKG1fcGFpbnRSZWN0LCBDbG9ja3dpc2UpKTsKKworICAgIGlmIChtX3BhaW50SW5mby5w
aGFzZSA9PSBQYWludFBoYXNlOjpGb3JlZ3JvdW5kKSB7CisgICAgICAgIGlmICghbV9pc1ByaW50
aW5nKQorICAgICAgICAgICAgcGFpbnRCYWNrZ3JvdW5kKCk7CisKKyAgICAgICAgcGFpbnRQbGF0
Zm9ybURvY3VtZW50TWFya2VycygpOworICAgIH0KKworICAgIHBhaW50Rm9yZWdyb3VuZEFuZERl
Y29yYXRpb25zKCk7CisKKyAgICBpZiAobV9wYWludEluZm8ucGhhc2UgPT0gUGFpbnRQaGFzZTo6
Rm9yZWdyb3VuZCkgeworICAgICAgICBpZiAobV91c2VDdXN0b21VbmRlcmxpbmVzKQorICAgICAg
ICAgICAgcGFpbnRDb21wb3NpdGlvblVuZGVybGluZXMoKTsKKworICAgICAgICBtX3JlbmRlcmVy
LnBhZ2UoKS5hZGRSZWxldmFudFJlcGFpbnRlZE9iamVjdChjb25zdF9jYXN0PFJlbmRlclRleHQq
PigmbV9yZW5kZXJlciksIGVuY2xvc2luZ0xheW91dFJlY3QobV9wYWludFJlY3QpKTsKKyAgICB9
CisKKyAgICBpZiAoc2hvdWxkUm90YXRlKQorICAgICAgICBtX3BhaW50SW5mby5jb250ZXh0KCku
Y29uY2F0Q1RNKHJvdGF0aW9uKG1fcGFpbnRSZWN0LCBDb3VudGVyY2xvY2t3aXNlKSk7Cit9CisK
K3N0YXRpYyBNYXJrZWRUZXh0IGNyZWF0ZU1hcmtlZFRleHRGcm9tU2VsZWN0aW9uSW5Cb3goY29u
c3QgTGVnYWN5SW5saW5lVGV4dEJveCYgYm94KQoreworICAgIGF1dG8gW3NlbGVjdGlvblN0YXJ0
LCBzZWxlY3Rpb25FbmRdID0gYm94LnNlbGVjdGlvblN0YXJ0RW5kKCk7CisgICAgaWYgKHNlbGVj
dGlvblN0YXJ0IDwgc2VsZWN0aW9uRW5kKQorICAgICAgICByZXR1cm4geyBzZWxlY3Rpb25TdGFy
dCwgc2VsZWN0aW9uRW5kLCBNYXJrZWRUZXh0OjpTZWxlY3Rpb24gfTsKKyAgICByZXR1cm4geyB9
OworfQorCit2b2lkIFRleHRCb3hQYWludGVyOjpwYWludEJhY2tncm91bmQoKQoreworICAgIGlm
IChtX2NvbnRhaW5zQ29tcG9zaXRpb24gJiYgIW1fdXNlQ3VzdG9tVW5kZXJsaW5lcykKKyAgICAg
ICAgcGFpbnRDb21wb3NpdGlvbkJhY2tncm91bmQoKTsKKworICAgIGF1dG8gc2VsZWN0YWJsZVJh
bmdlID0gbV90ZXh0Qm94LnNlbGVjdGFibGVSYW5nZSgpOworCisgICAgVmVjdG9yPE1hcmtlZFRl
eHQ+IG1hcmtlZFRleHRzOworICAgIG1hcmtlZFRleHRzLmFwcGVuZFZlY3RvcihNYXJrZWRUZXh0
Ojpjb2xsZWN0Rm9yRG9jdW1lbnRNYXJrZXJzKG1fcmVuZGVyZXIsIHNlbGVjdGFibGVSYW5nZSwg
TWFya2VkVGV4dDo6UGFpbnRQaGFzZTo6QmFja2dyb3VuZCkpOworICAgIG1hcmtlZFRleHRzLmFw
cGVuZFZlY3RvcihNYXJrZWRUZXh0Ojpjb2xsZWN0Rm9ySGlnaGxpZ2h0cyhtX3JlbmRlcmVyLCBz
ZWxlY3RhYmxlUmFuZ2UsIE1hcmtlZFRleHQ6OlBhaW50UGhhc2U6OkJhY2tncm91bmQpKTsKKwor
I2lmIEVOQUJMRShURVhUX1NFTEVDVElPTikKKyAgICBpZiAobV9oYXZlU2VsZWN0aW9uICYmICFt
X3VzZUN1c3RvbVVuZGVybGluZXMgJiYgIW1fcGFpbnRJbmZvLmNvbnRleHQoKS5wYWludGluZ0Rp
c2FibGVkKCkpIHsKKyAgICAgICAgYXV0byBzZWxlY3Rpb25NYXJrZWRUZXh0ID0gY3JlYXRlTWFy
a2VkVGV4dEZyb21TZWxlY3Rpb25JbkJveChtX3RleHRCb3gpOworICAgICAgICBpZiAoIXNlbGVj
dGlvbk1hcmtlZFRleHQuaXNFbXB0eSgpKQorICAgICAgICAgICAgbWFya2VkVGV4dHMuYXBwZW5k
KFdURk1vdmUoc2VsZWN0aW9uTWFya2VkVGV4dCkpOworICAgIH0KKyNlbmRpZgorICAgIGF1dG8g
c3R5bGVkTWFya2VkVGV4dHMgPSBTdHlsZWRNYXJrZWRUZXh0OjpzdWJkaXZpZGVBbmRSZXNvbHZl
KG1hcmtlZFRleHRzLCBtX3JlbmRlcmVyLCBtX3RleHRCb3guaXNGaXJzdExpbmUoKSwgbV9wYWlu
dEluZm8pOworCisgICAgLy8gQ29hbGVzY2Ugc3R5bGVzIG9mIGFkamFjZW50IG1hcmtlZCB0ZXh0
cyB0byBtaW5pbWl6ZSB0aGUgbnVtYmVyIG9mIGRyYXdpbmcgY29tbWFuZHMuCisgICAgYXV0byBj
b2FsZXNjZWRTdHlsZWRNYXJrZWRUZXh0cyA9IFN0eWxlZE1hcmtlZFRleHQ6OmNvYWxlc2NlQWRq
YWNlbnRXaXRoRXF1YWxCYWNrZ3JvdW5kKHN0eWxlZE1hcmtlZFRleHRzKTsKKworICAgIGZvciAo
YXV0byYgbWFya2VkVGV4dCA6IGNvYWxlc2NlZFN0eWxlZE1hcmtlZFRleHRzKQorICAgICAgICBw
YWludEJhY2tncm91bmQobWFya2VkVGV4dCk7Cit9CisKK3ZvaWQgVGV4dEJveFBhaW50ZXI6OnBh
aW50Rm9yZWdyb3VuZEFuZERlY29yYXRpb25zKCkKK3sKKyAgICBib29sIHNob3VsZFBhaW50U2Vs
ZWN0aW9uRm9yZWdyb3VuZCA9IG1faGF2ZVNlbGVjdGlvbiAmJiAhbV91c2VDdXN0b21VbmRlcmxp
bmVzOworICAgIFZlY3RvcjxNYXJrZWRUZXh0PiBtYXJrZWRUZXh0czsKKyAgICBpZiAobV9wYWlu
dEluZm8ucGhhc2UgIT0gUGFpbnRQaGFzZTo6U2VsZWN0aW9uKSB7CisgICAgICAgIGF1dG8gc2Vs
ZWN0YWJsZVJhbmdlID0gbV90ZXh0Qm94LnNlbGVjdGFibGVSYW5nZSgpOworCisgICAgICAgIC8v
IFRoZSBtYXJrZWQgdGV4dHMgZm9yIHRoZSBnYXBzIGJldHdlZW4gZG9jdW1lbnQgbWFya2VycyBh
bmQgc2VsZWN0aW9uIGFyZSBpbXBsaWNpdGx5IGNyZWF0ZWQgYnkgc3ViZGl2aWRpbmcgdGhlIGVu
dGlyZSBsaW5lLgorICAgICAgICBtYXJrZWRUZXh0cy5hcHBlbmQoeyBzZWxlY3RhYmxlUmFuZ2Uu
Y2xhbXAobV90ZXh0Qm94LnN0YXJ0KCkpLCBzZWxlY3RhYmxlUmFuZ2UuY2xhbXAobV90ZXh0Qm94
LmVuZCgpKSwgTWFya2VkVGV4dDo6VW5tYXJrZWQgfSk7CisKKyAgICAgICAgaWYgKCFtX2lzUHJp
bnRpbmcpIHsKKyAgICAgICAgICAgIG1hcmtlZFRleHRzLmFwcGVuZFZlY3RvcihNYXJrZWRUZXh0
Ojpjb2xsZWN0Rm9yRG9jdW1lbnRNYXJrZXJzKG1fcmVuZGVyZXIsIHNlbGVjdGFibGVSYW5nZSwg
TWFya2VkVGV4dDo6UGFpbnRQaGFzZTo6Rm9yZWdyb3VuZCkpOworICAgICAgICAgICAgbWFya2Vk
VGV4dHMuYXBwZW5kVmVjdG9yKE1hcmtlZFRleHQ6OmNvbGxlY3RGb3JIaWdobGlnaHRzKG1fcmVu
ZGVyZXIsIHNlbGVjdGFibGVSYW5nZSwgTWFya2VkVGV4dDo6UGFpbnRQaGFzZTo6Rm9yZWdyb3Vu
ZCkpOworCisgICAgICAgICAgICBib29sIHNob3VsZFBhaW50RHJhZ2dlZENvbnRlbnQgPSAhKG1f
cGFpbnRJbmZvLnBhaW50QmVoYXZpb3IuY29udGFpbnMoUGFpbnRCZWhhdmlvcjo6RXhjbHVkZVNl
bGVjdGlvbikpOworICAgICAgICAgICAgaWYgKHNob3VsZFBhaW50RHJhZ2dlZENvbnRlbnQpIHsK
KyAgICAgICAgICAgICAgICBhdXRvIG1hcmtlZFRleHRzRm9yRHJhZ2dlZENvbnRlbnQgPSBNYXJr
ZWRUZXh0Ojpjb2xsZWN0Rm9yRHJhZ2dlZENvbnRlbnQobV9yZW5kZXJlciwgc2VsZWN0YWJsZVJh
bmdlKTsKKyAgICAgICAgICAgICAgICBpZiAoIW1hcmtlZFRleHRzRm9yRHJhZ2dlZENvbnRlbnQu
aXNFbXB0eSgpKSB7CisgICAgICAgICAgICAgICAgICAgIHNob3VsZFBhaW50U2VsZWN0aW9uRm9y
ZWdyb3VuZCA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICBtYXJrZWRUZXh0cy5hcHBlbmRW
ZWN0b3IobWFya2VkVGV4dHNGb3JEcmFnZ2VkQ29udGVudCk7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIC8vIFRoZSBzZWxlY3Rpb24gbWFy
a2VkIHRleHQgYWN0cyBhcyBhIHBsYWNlaG9sZGVyIHdoZW4gY29tcHV0aW5nIHRoZSBtYXJrZWQg
dGV4dHMgZm9yIHRoZSBnYXBzLi4uCisgICAgaWYgKHNob3VsZFBhaW50U2VsZWN0aW9uRm9yZWdy
b3VuZCkgeworICAgICAgICBBU1NFUlQoIW1faXNQcmludGluZyk7CisgICAgICAgIGF1dG8gc2Vs
ZWN0aW9uTWFya2VkVGV4dCA9IGNyZWF0ZU1hcmtlZFRleHRGcm9tU2VsZWN0aW9uSW5Cb3gobV90
ZXh0Qm94KTsKKyAgICAgICAgaWYgKCFzZWxlY3Rpb25NYXJrZWRUZXh0LmlzRW1wdHkoKSkKKyAg
ICAgICAgICAgIG1hcmtlZFRleHRzLmFwcGVuZChXVEZNb3ZlKHNlbGVjdGlvbk1hcmtlZFRleHQp
KTsKKyAgICB9CisKKyAgICBhdXRvIHN0eWxlZE1hcmtlZFRleHRzID0gU3R5bGVkTWFya2VkVGV4
dDo6c3ViZGl2aWRlQW5kUmVzb2x2ZShtYXJrZWRUZXh0cywgbV9yZW5kZXJlciwgbV90ZXh0Qm94
LmlzRmlyc3RMaW5lKCksIG1fcGFpbnRJbmZvKTsKKworICAgIC8vIC4uLiBub3cgcmVtb3ZlIHRo
ZSBzZWxlY3Rpb24gbWFya2VkIHRleHQgaWYgd2UgYXJlIGV4Y2x1ZGluZyBzZWxlY3Rpb24uCisg
ICAgaWYgKCFtX2lzUHJpbnRpbmcgJiYgbV9wYWludEluZm8ucGFpbnRCZWhhdmlvci5jb250YWlu
cyhQYWludEJlaGF2aW9yOjpFeGNsdWRlU2VsZWN0aW9uKSkgeworICAgICAgICBzdHlsZWRNYXJr
ZWRUZXh0cy5yZW1vdmVBbGxNYXRjaGluZyhbXSAoY29uc3QgU3R5bGVkTWFya2VkVGV4dCYgbWFy
a2VkVGV4dCkgeworICAgICAgICAgICAgcmV0dXJuIG1hcmtlZFRleHQudHlwZSA9PSBNYXJrZWRU
ZXh0OjpTZWxlY3Rpb247CisgICAgICAgIH0pOworICAgIH0KKworICAgIC8vIENvYWxlc2NlIHN0
eWxlcyBvZiBhZGphY2VudCBtYXJrZWQgdGV4dHMgdG8gbWluaW1pemUgdGhlIG51bWJlciBvZiBk
cmF3aW5nIGNvbW1hbmRzLgorICAgIGF1dG8gY29hbGVzY2VkU3R5bGVkTWFya2VkVGV4dHMgPSBT
dHlsZWRNYXJrZWRUZXh0Ojpjb2FsZXNjZUFkamFjZW50V2l0aEVxdWFsRm9yZWdyb3VuZChzdHls
ZWRNYXJrZWRUZXh0cyk7CisKKyAgICBmb3IgKGF1dG8mIG1hcmtlZFRleHQgOiBjb2FsZXNjZWRT
dHlsZWRNYXJrZWRUZXh0cykKKyAgICAgICAgcGFpbnRGb3JlZ3JvdW5kKG1hcmtlZFRleHQpOwor
CisgICAgYXV0byB0ZXh0RGVjb3JhdGlvbnMgPSBtX3RleHRCb3gubGluZVN0eWxlKCkudGV4dERl
Y29yYXRpb25zSW5FZmZlY3QoKTsKKyAgICBib29sIGhpZ2hsaWdodERlY29yYXRpb25zID0gIU1h
cmtlZFRleHQ6OmNvbGxlY3RGb3JIaWdobGlnaHRzKG1fcmVuZGVyZXIsIG1fdGV4dEJveC5zZWxl
Y3RhYmxlUmFuZ2UoKSwgTWFya2VkVGV4dDo6UGFpbnRQaGFzZTo6RGVjb3JhdGlvbikuaXNFbXB0
eSgpOworICAgIGJvb2wgbGluZURlY29yYXRpb25zID0gIXRleHREZWNvcmF0aW9ucy5pc0VtcHR5
KCk7CisgICAgaWYgKChsaW5lRGVjb3JhdGlvbnMgfHwgaGlnaGxpZ2h0RGVjb3JhdGlvbnMpICYm
IG1fcGFpbnRJbmZvLnBoYXNlICE9IFBhaW50UGhhc2U6OlNlbGVjdGlvbikgeworICAgICAgICBU
ZXh0UnVuIHRleHRSdW4gPSBtX3RleHRCb3guY3JlYXRlVGV4dFJ1bigpOworICAgICAgICB1bnNp
Z25lZCBsZW5ndGggPSB0ZXh0UnVuLmxlbmd0aCgpOworICAgICAgICBpZiAobV90ZXh0Qm94LnRy
dW5jYXRpb24oKSAhPSBjTm9UcnVuY2F0aW9uKQorICAgICAgICAgICAgbGVuZ3RoID0gbV90ZXh0
Qm94LnRydW5jYXRpb24oKTsKKyAgICAgICAgdW5zaWduZWQgc2VsZWN0aW9uU3RhcnQgPSAwOwor
ICAgICAgICB1bnNpZ25lZCBzZWxlY3Rpb25FbmQgPSAwOworICAgICAgICBpZiAobV9oYXZlU2Vs
ZWN0aW9uKQorICAgICAgICAgICAgc3RkOjp0aWUoc2VsZWN0aW9uU3RhcnQsIHNlbGVjdGlvbkVu
ZCkgPSBtX3RleHRCb3guc2VsZWN0aW9uU3RhcnRFbmQoKTsKKworICAgICAgICBGbG9hdFJlY3Qg
dGV4dERlY29yYXRpb25TZWxlY3Rpb25DbGlwT3V0UmVjdDsKKyAgICAgICAgaWYgKChtX3BhaW50
SW5mby5wYWludEJlaGF2aW9yLmNvbnRhaW5zKFBhaW50QmVoYXZpb3I6OkV4Y2x1ZGVTZWxlY3Rp
b24pKSAmJiBzZWxlY3Rpb25TdGFydCA8IHNlbGVjdGlvbkVuZCAmJiBzZWxlY3Rpb25FbmQgPD0g
bGVuZ3RoKSB7CisgICAgICAgICAgICB0ZXh0RGVjb3JhdGlvblNlbGVjdGlvbkNsaXBPdXRSZWN0
ID0gbV9wYWludFJlY3Q7CisgICAgICAgICAgICBmbG9hdCBsb2dpY2FsV2lkdGhCZWZvcmVSYW5n
ZTsKKyAgICAgICAgICAgIGZsb2F0IGxvZ2ljYWxXaWR0aEFmdGVyUmFuZ2U7CisgICAgICAgICAg
ICBmbG9hdCBsb2dpY2FsU2VsZWN0aW9uV2lkdGggPSBtX3RleHRCb3gubGluZUZvbnQoKS53aWR0
aE9mVGV4dFJhbmdlKHRleHRSdW4sIHNlbGVjdGlvblN0YXJ0LCBzZWxlY3Rpb25FbmQsIG51bGxw
dHIsICZsb2dpY2FsV2lkdGhCZWZvcmVSYW5nZSwgJmxvZ2ljYWxXaWR0aEFmdGVyUmFuZ2UpOwor
ICAgICAgICAgICAgLy8gRklYTUU6IERvIHdlIG5lZWQgdG8gaGFuZGxlIHZlcnRpY2FsIGJvdHRv
bSB0byB0b3AgdGV4dD8KKyAgICAgICAgICAgIGlmICghbV90ZXh0Qm94LmlzSG9yaXpvbnRhbCgp
KSB7CisgICAgICAgICAgICAgICAgdGV4dERlY29yYXRpb25TZWxlY3Rpb25DbGlwT3V0UmVjdC5t
b3ZlKDAsIGxvZ2ljYWxXaWR0aEJlZm9yZVJhbmdlKTsKKyAgICAgICAgICAgICAgICB0ZXh0RGVj
b3JhdGlvblNlbGVjdGlvbkNsaXBPdXRSZWN0LnNldEhlaWdodChsb2dpY2FsU2VsZWN0aW9uV2lk
dGgpOworICAgICAgICAgICAgfSBlbHNlIGlmIChtX3RleHRCb3guZGlyZWN0aW9uKCkgPT0gVGV4
dERpcmVjdGlvbjo6UlRMKSB7CisgICAgICAgICAgICAgICAgdGV4dERlY29yYXRpb25TZWxlY3Rp
b25DbGlwT3V0UmVjdC5tb3ZlKGxvZ2ljYWxXaWR0aEFmdGVyUmFuZ2UsIDApOworICAgICAgICAg
ICAgICAgIHRleHREZWNvcmF0aW9uU2VsZWN0aW9uQ2xpcE91dFJlY3Quc2V0V2lkdGgobG9naWNh
bFNlbGVjdGlvbldpZHRoKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAg
dGV4dERlY29yYXRpb25TZWxlY3Rpb25DbGlwT3V0UmVjdC5tb3ZlKGxvZ2ljYWxXaWR0aEJlZm9y
ZVJhbmdlLCAwKTsKKyAgICAgICAgICAgICAgICB0ZXh0RGVjb3JhdGlvblNlbGVjdGlvbkNsaXBP
dXRSZWN0LnNldFdpZHRoKGxvZ2ljYWxTZWxlY3Rpb25XaWR0aCk7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKworICAgICAgICAvLyBDb2FsZXNjZSBzdHlsZXMgb2YgYWRqYWNlbnQgbWFya2Vk
IHRleHRzIHRvIG1pbmltaXplIHRoZSBudW1iZXIgb2YgZHJhd2luZyBjb21tYW5kcy4KKyAgICAg
ICAgYXV0byBjb2FsZXNjZWRTdHlsZWRNYXJrZWRUZXh0cyA9IFN0eWxlZE1hcmtlZFRleHQ6OmNv
YWxlc2NlQWRqYWNlbnRXaXRoRXF1YWxEZWNvcmF0aW9ucyhzdHlsZWRNYXJrZWRUZXh0cyk7CisK
KyAgICAgICAgZm9yIChhdXRvJiBtYXJrZWRUZXh0IDogY29hbGVzY2VkU3R5bGVkTWFya2VkVGV4
dHMpCisgICAgICAgICAgICBwYWludERlY29yYXRpb24obWFya2VkVGV4dCwgdGV4dERlY29yYXRp
b25TZWxlY3Rpb25DbGlwT3V0UmVjdCk7CisgICAgfQogfQogCiB2b2lkIFRleHRCb3hQYWludGVy
OjpwYWludENvbXBvc2l0aW9uQmFja2dyb3VuZCgpCiB7CiAgICAgYXV0byBzZWxlY3RhYmxlUmFu
Z2UgPSBtX3RleHRCb3guc2VsZWN0YWJsZVJhbmdlKCk7CiAKLSAgICBhdXRvJiBlZGl0b3IgPSBt
X3RleHRCb3gucmVuZGVyZXIoKS5mcmFtZSgpLmVkaXRvcigpOworICAgIGF1dG8mIGVkaXRvciA9
IG1fcmVuZGVyZXIuZnJhbWUoKS5lZGl0b3IoKTsKIAogICAgIGlmICghZWRpdG9yLmNvbXBvc2l0
aW9uVXNlc0N1c3RvbUhpZ2hsaWdodHMoKSkgewogICAgICAgICBhdXRvIFtjbGFtcGVkU3RhcnQs
IGNsYW1wZWRFbmRdID0gc2VsZWN0YWJsZVJhbmdlLmNsYW1wKGVkaXRvci5jb21wb3NpdGlvblN0
YXJ0KCksIGVkaXRvci5jb21wb3NpdGlvbkVuZCgpKTsKQEAgLTEwNiwxNCArMjY1LDE0IEBAIHZv
aWQgVGV4dEJveFBhaW50ZXI6OnBhaW50QmFja2dyb3VuZCh1bnNpZ25lZCBzdGFydE9mZnNldCwg
dW5zaWduZWQgZW5kT2Zmc2V0LCBjCiAKICAgICAvLyBVc2Ugc2FtZSB5IHBvc2l0aW9uaW5nIGFu
ZCBoZWlnaHQgYXMgZm9yIHNlbGVjdGlvbiwgc28gdGhhdCB3aGVuIHRoZSBzZWxlY3Rpb24gYW5k
IHRoaXMgc3VicmFuZ2UgYXJlIG9uCiAgICAgLy8gdGhlIHNhbWUgd29yZCB0aGVyZSBhcmUgbm8g
cGllY2VzIHN0aWNraW5nIG91dC4KLSAgICBMYXlvdXRVbml0IGRlbHRhWSB7IG1fdGV4dEJveC5y
ZW5kZXJlcigpLnN0eWxlKCkuaXNGbGlwcGVkTGluZXNXcml0aW5nTW9kZSgpID8gc2VsZWN0aW9u
Qm90dG9tIC0gbV90ZXh0Qm94LmxvZ2ljYWxCb3R0b20oKSA6IG1fdGV4dEJveC5sb2dpY2FsVG9w
KCkgLSBzZWxlY3Rpb25Ub3AgfTsKKyAgICBMYXlvdXRVbml0IGRlbHRhWSB7IG1fcmVuZGVyZXIu
c3R5bGUoKS5pc0ZsaXBwZWRMaW5lc1dyaXRpbmdNb2RlKCkgPyBzZWxlY3Rpb25Cb3R0b20gLSBt
X3RleHRCb3gubG9naWNhbEJvdHRvbSgpIDogbV90ZXh0Qm94LmxvZ2ljYWxUb3AoKSAtIHNlbGVj
dGlvblRvcCB9OwogICAgIExheW91dFVuaXQgc2VsZWN0aW9uSGVpZ2h0ID0gc3RkOjptYXg8TGF5
b3V0VW5pdD4oMCwgc2VsZWN0aW9uQm90dG9tIC0gc2VsZWN0aW9uVG9wKTsKIAotICAgIExheW91
dFJlY3Qgc2VsZWN0aW9uUmVjdCB7IExheW91dFVuaXQobV9ib3hSZWN0LngoKSksIExheW91dFVu
aXQobV9ib3hSZWN0LnkoKSAtIGRlbHRhWSksIExheW91dFVuaXQobV90ZXh0Qm94LmxvZ2ljYWxX
aWR0aCgpKSwgc2VsZWN0aW9uSGVpZ2h0IH07CisgICAgTGF5b3V0UmVjdCBzZWxlY3Rpb25SZWN0
IHsgTGF5b3V0VW5pdChtX3BhaW50UmVjdC54KCkpLCBMYXlvdXRVbml0KG1fcGFpbnRSZWN0Lnko
KSAtIGRlbHRhWSksIExheW91dFVuaXQobV90ZXh0Qm94LmxvZ2ljYWxXaWR0aCgpKSwgc2VsZWN0
aW9uSGVpZ2h0IH07CiAgICAgbV90ZXh0Qm94LmxpbmVGb250KCkuYWRqdXN0U2VsZWN0aW9uUmVj
dEZvclRleHQodGV4dFJ1biwgc2VsZWN0aW9uUmVjdCwgc3RhcnRPZmZzZXQsIGVuZE9mZnNldCk7
CiAKICAgICAvLyBGSVhNRTogU3VwcG9ydCBwYWludGluZyBjb21iaW5lZCB0ZXh0LiBTZWUgPGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODA5OTM+LgotICAgIGF1dG8g
YmFja2dyb3VuZFJlY3QgPSBzbmFwUmVjdFRvRGV2aWNlUGl4ZWxzV2l0aFdyaXRpbmdEaXJlY3Rp
b24oc2VsZWN0aW9uUmVjdCwgbV90ZXh0Qm94LnJlbmRlcmVyKCkuZG9jdW1lbnQoKS5kZXZpY2VT
Y2FsZUZhY3RvcigpLCB0ZXh0UnVuLmx0cigpKTsKKyAgICBhdXRvIGJhY2tncm91bmRSZWN0ID0g
c25hcFJlY3RUb0RldmljZVBpeGVsc1dpdGhXcml0aW5nRGlyZWN0aW9uKHNlbGVjdGlvblJlY3Qs
IG1fZG9jdW1lbnQuZGV2aWNlU2NhbGVGYWN0b3IoKSwgdGV4dFJ1bi5sdHIoKSk7CiAgICAgaWYg
KGJhY2tncm91bmRTdHlsZSA9PSBCYWNrZ3JvdW5kU3R5bGU6OlJvdW5kZWQpIHsKICAgICAgICAg
YmFja2dyb3VuZFJlY3QuZXhwYW5kKC0xLCAtMSk7CiAgICAgICAgIGJhY2tncm91bmRSZWN0Lm1v
dmUoMC41LCAwLjUpOwpAQCAtMTYxLDcgKzMyMCw3IEBAIHZvaWQgVGV4dEJveFBhaW50ZXI6OnBh
aW50Rm9yZWdyb3VuZChjb25zdCBTdHlsZWRNYXJrZWRUZXh0JiBtYXJrZWRUZXh0KQogICAgICAg
ICBjb250ZXh0LnNldEFscGhhKG1hcmtlZFRleHQuc3R5bGUuYWxwaGEpOwogICAgIH0KICAgICAv
LyBUZXh0UGFpbnRlciB3YW50cyB0aGUgYm94IHJlY3RhbmdsZSBhbmQgdGV4dCBvcmlnaW4gb2Yg
dGhlIGVudGlyZSBsaW5lIGJveC4KLSAgICB0ZXh0UGFpbnRlci5wYWludFJhbmdlKHRleHRSdW4s
IG1fYm94UmVjdCwgbV90ZXh0Qm94LnRleHRPcmlnaW5Gcm9tQm94UmVjdChtX2JveFJlY3QpLCBt
YXJrZWRUZXh0LnN0YXJ0T2Zmc2V0LCBtYXJrZWRUZXh0LmVuZE9mZnNldCk7CisgICAgdGV4dFBh
aW50ZXIucGFpbnRSYW5nZSh0ZXh0UnVuLCBtX3BhaW50UmVjdCwgbV90ZXh0Qm94LnRleHRPcmln
aW5Gcm9tQm94UmVjdChtX3BhaW50UmVjdCksIG1hcmtlZFRleHQuc3RhcnRPZmZzZXQsIG1hcmtl
ZFRleHQuZW5kT2Zmc2V0KTsKIH0KIAogdm9pZCBUZXh0Qm94UGFpbnRlcjo6cGFpbnREZWNvcmF0
aW9uKGNvbnN0IFN0eWxlZE1hcmtlZFRleHQmIG1hcmtlZFRleHQsIGNvbnN0IEZsb2F0UmVjdCYg
Y2xpcE91dFJlY3QpCkBAIC0xNzcsNyArMzM2LDcgQEAgdm9pZCBUZXh0Qm94UGFpbnRlcjo6cGFp
bnREZWNvcmF0aW9uKGNvbnN0IFN0eWxlZE1hcmtlZFRleHQmIG1hcmtlZFRleHQsIGNvbnN0IEYK
IAogICAgIGJvb2wgaXNDb21iaW5lZFRleHQgPSBtX3RleHRCb3guY29tYmluZWRUZXh0KCk7CiAg
ICAgaWYgKGlzQ29tYmluZWRUZXh0KQotICAgICAgICBjb250ZXh0LmNvbmNhdENUTShyb3RhdGlv
bihtX2JveFJlY3QsIENsb2Nrd2lzZSkpOworICAgICAgICBjb250ZXh0LmNvbmNhdENUTShyb3Rh
dGlvbihtX3BhaW50UmVjdCwgQ2xvY2t3aXNlKSk7CiAKICAgICAvLyAxLiBDb21wdXRlIHRleHQg
c2VsZWN0aW9uCiAgICAgdW5zaWduZWQgc3RhcnRPZmZzZXQgPSBtYXJrZWRUZXh0LnN0YXJ0T2Zm
c2V0OwpAQCAtMTkwLDE3ICszNDksMTcgQEAgdm9pZCBUZXh0Qm94UGFpbnRlcjo6cGFpbnREZWNv
cmF0aW9uKGNvbnN0IFN0eWxlZE1hcmtlZFRleHQmIG1hcmtlZFRleHQsIGNvbnN0IEYKICAgICBU
ZXh0UnVuIHRleHRSdW4gPSBtX3RleHRCb3guY3JlYXRlVGV4dFJ1bigpOwogCiAgICAgLy8gQXZv
aWQgbWVhc3VyaW5nIHRoZSB0ZXh0IHdoZW4gdGhlIGVudGlyZSBsaW5lIGJveCBpcyBzZWxlY3Rl
ZCBhcyBhbiBvcHRpbWl6YXRpb24uCi0gICAgRmxvYXRSZWN0IHNuYXBwZWRTZWxlY3Rpb25SZWN0
ID0gbV9ib3hSZWN0OworICAgIEZsb2F0UmVjdCBzbmFwcGVkU2VsZWN0aW9uUmVjdCA9IG1fcGFp
bnRSZWN0OwogICAgIGlmIChzdGFydE9mZnNldCB8fCBlbmRPZmZzZXQgIT0gdGV4dFJ1bi5sZW5n
dGgoKSkgewotICAgICAgICBMYXlvdXRSZWN0IHNlbGVjdGlvblJlY3QgPSB7IG1fYm94UmVjdC54
KCksIG1fYm94UmVjdC55KCksIG1fYm94UmVjdC53aWR0aCgpLCBtX2JveFJlY3QuaGVpZ2h0KCkg
fTsKKyAgICAgICAgTGF5b3V0UmVjdCBzZWxlY3Rpb25SZWN0ID0geyBtX3BhaW50UmVjdC54KCks
IG1fcGFpbnRSZWN0LnkoKSwgbV9wYWludFJlY3Qud2lkdGgoKSwgbV9wYWludFJlY3QuaGVpZ2h0
KCkgfTsKICAgICAgICAgZm9udC5hZGp1c3RTZWxlY3Rpb25SZWN0Rm9yVGV4dCh0ZXh0UnVuLCBz
ZWxlY3Rpb25SZWN0LCBzdGFydE9mZnNldCwgZW5kT2Zmc2V0KTsKLSAgICAgICAgc25hcHBlZFNl
bGVjdGlvblJlY3QgPSBzbmFwUmVjdFRvRGV2aWNlUGl4ZWxzV2l0aFdyaXRpbmdEaXJlY3Rpb24o
c2VsZWN0aW9uUmVjdCwgbV90ZXh0Qm94LnJlbmRlcmVyKCkuZG9jdW1lbnQoKS5kZXZpY2VTY2Fs
ZUZhY3RvcigpLCB0ZXh0UnVuLmx0cigpKTsKKyAgICAgICAgc25hcHBlZFNlbGVjdGlvblJlY3Qg
PSBzbmFwUmVjdFRvRGV2aWNlUGl4ZWxzV2l0aFdyaXRpbmdEaXJlY3Rpb24oc2VsZWN0aW9uUmVj
dCwgbV9kb2N1bWVudC5kZXZpY2VTY2FsZUZhY3RvcigpLCB0ZXh0UnVuLmx0cigpKTsKICAgICB9
CiAKICAgICAvLyAyLiBQYWludAogICAgIGF1dG8gdGV4dERlY29yYXRpb25zID0gbGluZVN0eWxl
LnRleHREZWNvcmF0aW9uc0luRWZmZWN0KCk7CiAgICAgdGV4dERlY29yYXRpb25zLmFkZChUZXh0
RGVjb3JhdGlvblBhaW50ZXI6OnRleHREZWNvcmF0aW9uc0luRWZmZWN0Rm9yU3R5bGUobWFya2Vk
VGV4dC5zdHlsZS50ZXh0RGVjb3JhdGlvblN0eWxlcykpOwotICAgIFRleHREZWNvcmF0aW9uUGFp
bnRlciBkZWNvcmF0aW9uUGFpbnRlciB7IGNvbnRleHQsIHRleHREZWNvcmF0aW9ucywgbV90ZXh0
Qm94LnJlbmRlcmVyKCksIG1fdGV4dEJveC5pc0ZpcnN0TGluZSgpLCBmb250LCBtYXJrZWRUZXh0
LnN0eWxlLnRleHREZWNvcmF0aW9uU3R5bGVzIH07CisgICAgVGV4dERlY29yYXRpb25QYWludGVy
IGRlY29yYXRpb25QYWludGVyIHsgY29udGV4dCwgdGV4dERlY29yYXRpb25zLCBtX3JlbmRlcmVy
LCBtX3RleHRCb3guaXNGaXJzdExpbmUoKSwgZm9udCwgbWFya2VkVGV4dC5zdHlsZS50ZXh0RGVj
b3JhdGlvblN0eWxlcyB9OwogICAgIGRlY29yYXRpb25QYWludGVyLnNldFRleHRSdW5JdGVyYXRv
cihMYXlvdXRJbnRlZ3JhdGlvbjo6dGV4dFJ1bkZvcigmbV90ZXh0Qm94KSk7CiAgICAgZGVjb3Jh
dGlvblBhaW50ZXIuc2V0V2lkdGgoc25hcHBlZFNlbGVjdGlvblJlY3Qud2lkdGgoKSk7CiAgICAg
ZGVjb3JhdGlvblBhaW50ZXIuc2V0SXNIb3Jpem9udGFsKG1fdGV4dEJveC5pc0hvcml6b250YWwo
KSk7CkBAIC0yMjQsNyArMzgzLDcgQEAgdm9pZCBUZXh0Qm94UGFpbnRlcjo6cGFpbnREZWNvcmF0
aW9uKGNvbnN0IFN0eWxlZE1hcmtlZFRleHQmIG1hcmtlZFRleHQsIGNvbnN0IEYKICAgICB9CiAK
ICAgICBpZiAoaXNDb21iaW5lZFRleHQpCi0gICAgICAgIGNvbnRleHQuY29uY2F0Q1RNKHJvdGF0
aW9uKG1fYm94UmVjdCwgQ291bnRlcmNsb2Nrd2lzZSkpOworICAgICAgICBjb250ZXh0LmNvbmNh
dENUTShyb3RhdGlvbihtX3BhaW50UmVjdCwgQ291bnRlcmNsb2Nrd2lzZSkpOwogfQogCiB2b2lk
IFRleHRCb3hQYWludGVyOjpwYWludENvbXBvc2l0aW9uVW5kZXJsaW5lcygpCkBAIC0yMzIsNyAr
MzkxLDcgQEAgdm9pZCBUZXh0Qm94UGFpbnRlcjo6cGFpbnRDb21wb3NpdGlvblVuZGVybGluZXMo
KQogICAgIGlmIChtX3RleHRCb3gudHJ1bmNhdGlvbigpID09IGNGdWxsVHJ1bmNhdGlvbikKICAg
ICAgICAgcmV0dXJuOwogCi0gICAgZm9yIChhdXRvJiB1bmRlcmxpbmUgOiBtX3RleHRCb3gucmVu
ZGVyZXIoKS5mcmFtZSgpLmVkaXRvcigpLmN1c3RvbUNvbXBvc2l0aW9uVW5kZXJsaW5lcygpKSB7
CisgICAgZm9yIChhdXRvJiB1bmRlcmxpbmUgOiBtX3JlbmRlcmVyLmZyYW1lKCkuZWRpdG9yKCku
Y3VzdG9tQ29tcG9zaXRpb25VbmRlcmxpbmVzKCkpIHsKICAgICAgICAgaWYgKHVuZGVybGluZS5l
bmRPZmZzZXQgPD0gbV90ZXh0Qm94LnN0YXJ0KCkpIHsKICAgICAgICAgICAgIC8vIFVuZGVybGlu
ZSBpcyBjb21wbGV0ZWx5IGJlZm9yZSB0aGlzIHJ1bi4gVGhpcyBtaWdodCBiZSBhbiB1bmRlcmxp
bmUgdGhhdCBzaXRzCiAgICAgICAgICAgICAvLyBiZWZvcmUgdGhlIGZpcnN0IHJ1biB3ZSBkcmF3
LCBvciB1bmRlcmxpbmVzIHRoYXQgd2VyZSB3aXRoaW4gcnVucyB3ZSBza2lwcGVkCkBAIC0yNjAs
OCArNDE5LDYgQEAgc3RhdGljIGlubGluZSB2b2lkIG1pcnJvclJUTFNlZ21lbnQoZmxvYXQgbG9n
aWNhbFdpZHRoLCBUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbiwKIAogdm9pZCBUZXh0Qm94UGFpbnRl
cjo6cGFpbnRDb21wb3NpdGlvblVuZGVybGluZShjb25zdCBDb21wb3NpdGlvblVuZGVybGluZSYg
dW5kZXJsaW5lKQogewotICAgIGF1dG8mIHJlbmRlcmVyID0gbV90ZXh0Qm94LnJlbmRlcmVyKCk7
Ci0KICAgICBmbG9hdCBzdGFydCA9IDA7IC8vIHN0YXJ0IG9mIGxpbmUgdG8gZHJhdywgcmVsYXRp
dmUgdG8gdHgKICAgICBmbG9hdCB3aWR0aCA9IG1fdGV4dEJveC5sb2dpY2FsV2lkdGgoKTsgLy8g
aG93IG11Y2ggbGluZSB0byBkcmF3CiAgICAgYm9vbCB1c2VXaG9sZVdpZHRoID0gdHJ1ZTsKQEAg
LTI3MCw3ICs0MjcsNyBAQCB2b2lkIFRleHRCb3hQYWludGVyOjpwYWludENvbXBvc2l0aW9uVW5k
ZXJsaW5lKGNvbnN0IENvbXBvc2l0aW9uVW5kZXJsaW5lJiB1bmRlcgogICAgIGlmIChwYWludFN0
YXJ0IDw9IHVuZGVybGluZS5zdGFydE9mZnNldCkgewogICAgICAgICBwYWludFN0YXJ0ID0gdW5k
ZXJsaW5lLnN0YXJ0T2Zmc2V0OwogICAgICAgICB1c2VXaG9sZVdpZHRoID0gZmFsc2U7Ci0gICAg
ICAgIHN0YXJ0ID0gcmVuZGVyZXIud2lkdGgobV90ZXh0Qm94LnN0YXJ0KCksIHBhaW50U3RhcnQg
LSBtX3RleHRCb3guc3RhcnQoKSwgbV90ZXh0Qm94LnRleHRQb3MoKSwgbV90ZXh0Qm94LmlzRmly
c3RMaW5lKCkpOworICAgICAgICBzdGFydCA9IG1fcmVuZGVyZXIud2lkdGgobV90ZXh0Qm94LnN0
YXJ0KCksIHBhaW50U3RhcnQgLSBtX3RleHRCb3guc3RhcnQoKSwgbV90ZXh0Qm94LnRleHRQb3Mo
KSwgbV90ZXh0Qm94LmlzRmlyc3RMaW5lKCkpOwogICAgIH0KICAgICBpZiAocGFpbnRFbmQgIT0g
dW5kZXJsaW5lLmVuZE9mZnNldCkgewogICAgICAgICBwYWludEVuZCA9IHN0ZDo6bWluKHBhaW50
RW5kLCAodW5zaWduZWQpdW5kZXJsaW5lLmVuZE9mZnNldCk7CkBAIC0yODEsNyArNDM4LDcgQEAg
dm9pZCBUZXh0Qm94UGFpbnRlcjo6cGFpbnRDb21wb3NpdGlvblVuZGVybGluZShjb25zdCBDb21w
b3NpdGlvblVuZGVybGluZSYgdW5kZXIKICAgICAgICAgdXNlV2hvbGVXaWR0aCA9IGZhbHNlOwog
ICAgIH0KICAgICBpZiAoIXVzZVdob2xlV2lkdGgpIHsKLSAgICAgICAgd2lkdGggPSByZW5kZXJl
ci53aWR0aChwYWludFN0YXJ0LCBwYWludEVuZCAtIHBhaW50U3RhcnQsIG1fdGV4dEJveC50ZXh0
UG9zKCkgKyBzdGFydCwgbV90ZXh0Qm94LmlzRmlyc3RMaW5lKCkpOworICAgICAgICB3aWR0aCA9
IG1fcmVuZGVyZXIud2lkdGgocGFpbnRTdGFydCwgcGFpbnRFbmQgLSBwYWludFN0YXJ0LCBtX3Rl
eHRCb3gudGV4dFBvcygpICsgc3RhcnQsIG1fdGV4dEJveC5pc0ZpcnN0TGluZSgpKTsKICAgICAg
ICAgbWlycm9yUlRMU2VnbWVudChtX3RleHRCb3gubG9naWNhbFdpZHRoKCksIG1fdGV4dEJveC5k
aXJlY3Rpb24oKSwgc3RhcnQsIHdpZHRoKTsKICAgICB9CiAKQEAgLTI5OCwxNiArNDU1LDE4IEBA
IHZvaWQgVGV4dEJveFBhaW50ZXI6OnBhaW50Q29tcG9zaXRpb25VbmRlcmxpbmUoY29uc3QgQ29t
cG9zaXRpb25VbmRlcmxpbmUmIHVuZGVyCiAgICAgc3RhcnQgKz0gMTsKICAgICB3aWR0aCAtPSAy
OwogCisgICAgYXV0byYgc3R5bGUgPSBtX3JlbmRlcmVyLnN0eWxlKCk7CisgICAgQ29sb3IgdW5k
ZXJsaW5lQ29sb3IgPSB1bmRlcmxpbmUuY29tcG9zaXRpb25VbmRlcmxpbmVDb2xvciA9PSBDb21w
b3NpdGlvblVuZGVybGluZUNvbG9yOjpUZXh0Q29sb3IgPyBzdHlsZS52aXNpdGVkRGVwZW5kZW50
Q29sb3JXaXRoQ29sb3JGaWx0ZXIoQ1NTUHJvcGVydHlXZWJraXRUZXh0RmlsbENvbG9yKSA6IHN0
eWxlLmNvbG9yQnlBcHBseWluZ0NvbG9yRmlsdGVyKHVuZGVybGluZS5jb2xvcik7CisKICAgICBH
cmFwaGljc0NvbnRleHQmIGNvbnRleHQgPSBtX3BhaW50SW5mby5jb250ZXh0KCk7Ci0gICAgQ29s
b3IgdW5kZXJsaW5lQ29sb3IgPSB1bmRlcmxpbmUuY29tcG9zaXRpb25VbmRlcmxpbmVDb2xvciA9
PSBDb21wb3NpdGlvblVuZGVybGluZUNvbG9yOjpUZXh0Q29sb3IgPyByZW5kZXJlci5zdHlsZSgp
LnZpc2l0ZWREZXBlbmRlbnRDb2xvcldpdGhDb2xvckZpbHRlcihDU1NQcm9wZXJ0eVdlYmtpdFRl
eHRGaWxsQ29sb3IpIDogcmVuZGVyZXIuc3R5bGUoKS5jb2xvckJ5QXBwbHlpbmdDb2xvckZpbHRl
cih1bmRlcmxpbmUuY29sb3IpOwogICAgIGNvbnRleHQuc2V0U3Ryb2tlQ29sb3IodW5kZXJsaW5l
Q29sb3IpOwogICAgIGNvbnRleHQuc2V0U3Ryb2tlVGhpY2tuZXNzKGxpbmVUaGlja25lc3MpOwot
ICAgIGNvbnRleHQuZHJhd0xpbmVGb3JUZXh0KEZsb2F0UmVjdChtX2JveFJlY3QueCgpICsgc3Rh
cnQsIG1fYm94UmVjdC55KCkgKyBtX3RleHRCb3gubG9naWNhbEhlaWdodCgpIC0gbGluZVRoaWNr
bmVzcywgd2lkdGgsIGxpbmVUaGlja25lc3MpLCByZW5kZXJlci5kb2N1bWVudCgpLnByaW50aW5n
KCkpOworICAgIGNvbnRleHQuZHJhd0xpbmVGb3JUZXh0KEZsb2F0UmVjdChtX3BhaW50UmVjdC54
KCkgKyBzdGFydCwgbV9wYWludFJlY3QueSgpICsgbV90ZXh0Qm94LmxvZ2ljYWxIZWlnaHQoKSAt
IGxpbmVUaGlja25lc3MsIHdpZHRoLCBsaW5lVGhpY2tuZXNzKSwgbV9kb2N1bWVudC5wcmludGlu
ZygpKTsKIH0KIAogdm9pZCBUZXh0Qm94UGFpbnRlcjo6cGFpbnRQbGF0Zm9ybURvY3VtZW50TWFy
a2VycygpCiB7Ci0gICAgYXV0byBtYXJrZWRUZXh0cyA9IE1hcmtlZFRleHQ6OmNvbGxlY3RGb3JE
b2N1bWVudE1hcmtlcnMobV90ZXh0Qm94LnJlbmRlcmVyKCksIG1fdGV4dEJveC5zZWxlY3RhYmxl
UmFuZ2UoKSwgTWFya2VkVGV4dDo6UGFpbnRQaGFzZTo6RGVjb3JhdGlvbik7CisgICAgYXV0byBt
YXJrZWRUZXh0cyA9IE1hcmtlZFRleHQ6OmNvbGxlY3RGb3JEb2N1bWVudE1hcmtlcnMobV9yZW5k
ZXJlciwgbV90ZXh0Qm94LnNlbGVjdGFibGVSYW5nZSgpLCBNYXJrZWRUZXh0OjpQYWludFBoYXNl
OjpEZWNvcmF0aW9uKTsKICAgICBmb3IgKGF1dG8mIG1hcmtlZFRleHQgOiBNYXJrZWRUZXh0Ojpz
dWJkaXZpZGUobWFya2VkVGV4dHMsIE1hcmtlZFRleHQ6Ok92ZXJsYXBTdHJhdGVneTo6RnJvbnRt
b3N0KSkKICAgICAgICAgcGFpbnRQbGF0Zm9ybURvY3VtZW50TWFya2VyKG1hcmtlZFRleHQpOwog
fQpAQCAtMzI1LDcgKzQ4NCw3IEBAIEZsb2F0UmVjdCBUZXh0Qm94UGFpbnRlcjo6Y2FsY3VsYXRl
VW5pb25PZkFsbERvY3VtZW50TWFya2VyQm91bmRzKGNvbnN0IExlZ2FjeUluCiB2b2lkIFRleHRC
b3hQYWludGVyOjpwYWludFBsYXRmb3JtRG9jdW1lbnRNYXJrZXIoY29uc3QgTWFya2VkVGV4dCYg
bWFya2VkVGV4dCkKIHsKICAgICAvLyBOZXZlciBwcmludCBzcGVsbGluZy9ncmFtbWFyIG1hcmtl
cnMgKDUzMjc4ODcpCi0gICAgaWYgKG1fdGV4dEJveC5yZW5kZXJlcigpLmRvY3VtZW50KCkucHJp
bnRpbmcoKSkKKyAgICBpZiAobV9kb2N1bWVudC5wcmludGluZygpKQogICAgICAgICByZXR1cm47
CiAKICAgICBpZiAobV90ZXh0Qm94LnRydW5jYXRpb24oKSA9PSBjRnVsbFRydW5jYXRpb24pCkBA
IC0zMzQsNyArNDkzLDcgQEAgdm9pZCBUZXh0Qm94UGFpbnRlcjo6cGFpbnRQbGF0Zm9ybURvY3Vt
ZW50TWFya2VyKGNvbnN0IE1hcmtlZFRleHQmIG1hcmtlZFRleHQpCiAgICAgYXV0byBib3VuZHMg
PSBjYWxjdWxhdGVEb2N1bWVudE1hcmtlckJvdW5kcyhtX3RleHRCb3gsIG1hcmtlZFRleHQpOwog
CiAgICAgYXV0byBsaW5lU3R5bGVGb3JNYXJrZWRUZXh0VHlwZSA9IFsmXSgpIC0+IERvY3VtZW50
TWFya2VyTGluZVN0eWxlIHsKLSAgICAgICAgYm9vbCBzaG91bGRVc2VEYXJrQXBwZWFyYW5jZSA9
IG1fdGV4dEJveC5yZW5kZXJlcigpLnVzZURhcmtBcHBlYXJhbmNlKCk7CisgICAgICAgIGJvb2wg
c2hvdWxkVXNlRGFya0FwcGVhcmFuY2UgPSBtX3JlbmRlcmVyLnVzZURhcmtBcHBlYXJhbmNlKCk7
CiAgICAgICAgIHN3aXRjaCAobWFya2VkVGV4dC50eXBlKSB7CiAgICAgICAgIGNhc2UgTWFya2Vk
VGV4dDo6U3BlbGxpbmdFcnJvcjoKICAgICAgICAgICAgIHJldHVybiB7IERvY3VtZW50TWFya2Vy
TGluZVN0eWxlOjpNb2RlOjpTcGVsbGluZywgc2hvdWxkVXNlRGFya0FwcGVhcmFuY2UgfTsKQEAg
LTM1NSwxMCArNTE0LDM5IEBAIHZvaWQgVGV4dEJveFBhaW50ZXI6OnBhaW50UGxhdGZvcm1Eb2N1
bWVudE1hcmtlcihjb25zdCBNYXJrZWRUZXh0JiBtYXJrZWRUZXh0KQogICAgICAgICB9CiAgICAg
fTsKIAotICAgIGJvdW5kcy5tb3ZlQnkobV9ib3hSZWN0LmxvY2F0aW9uKCkpOworICAgIGJvdW5k
cy5tb3ZlQnkobV9wYWludFJlY3QubG9jYXRpb24oKSk7CiAgICAgbV9wYWludEluZm8uY29udGV4
dCgpLmRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIoYm91bmRzLCBsaW5lU3R5bGVGb3JNYXJrZWRU
ZXh0VHlwZSgpKTsKIH0KIAorRmxvYXRSZWN0IFRleHRCb3hQYWludGVyOjpjb21wdXRlUGFpbnRS
ZWN0KGNvbnN0IExlZ2FjeUlubGluZVRleHRCb3gmIHRleHRCb3gsIGNvbnN0IExheW91dFBvaW50
JiBwYWludE9mZnNldCkKK3sKKyAgICBGbG9hdFBvaW50IGxvY2FsUGFpbnRPZmZzZXQocGFpbnRP
ZmZzZXQpOworCisgICAgaWYgKHRleHRCb3gudHJ1bmNhdGlvbigpICE9IGNOb1RydW5jYXRpb24p
IHsKKyAgICAgICAgYXV0byYgcmVuZGVyZXIgPSB0ZXh0Qm94LnJlbmRlcmVyKCk7CisgICAgICAg
IGlmIChyZW5kZXJlci5jb250YWluaW5nQmxvY2soKS0+c3R5bGUoKS5pc0xlZnRUb1JpZ2h0RGly
ZWN0aW9uKCkgIT0gdGV4dEJveC5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkpIHsKKyAgICAgICAg
ICAgIC8vIE1ha2UgdGhlIHZpc2libGUgZnJhZ21lbnQgb2YgdGV4dCBodWcgdGhlIGVkZ2UgY2xv
c2VzdCB0byB0aGUgcmVzdCBvZiB0aGUgcnVuIGJ5IG1vdmluZyB0aGUgb3JpZ2luCisgICAgICAg
ICAgICAvLyBhdCB3aGljaCB3ZSBzdGFydCBkcmF3aW5nIHRleHQuCisgICAgICAgICAgICAvLyBl
LmcuIEluIHRoZSBjYXNlIG9mIExUUiB0ZXh0IHRydW5jYXRlZCBpbiBhbiBSVEwgQ29udGV4dCwg
dGhlIGNvcnJlY3QgYmVoYXZpb3IgaXM6CisgICAgICAgICAgICAvLyB8SGVsbG98Q0JBfCAtPiB8
Li4uSGV8Q0JBfAorICAgICAgICAgICAgLy8gSW4gb3JkZXIgdG8gZHJhdyB0aGUgZnJhZ21lbnQg
IkhlIiBhbGlnbmVkIHRvIHRoZSByaWdodCBlZGdlIG9mIGl0J3MgYm94LCB3ZSBuZWVkIHRvIHN0
YXJ0IGRyYXdpbmcKKyAgICAgICAgICAgIC8vIGZhcnRoZXIgdG8gdGhlIHJpZ2h0LgorICAgICAg
ICAgICAgLy8gTk9URTogV2ViS2l0J3MgYmVoYXZpb3IgZGlmZmVycyBmcm9tIHRoYXQgb2YgSUUg
d2hpY2ggYXBwZWFycyB0byBqdXN0IG92ZXJsYXkgdGhlIGVsbGlwc2lzIG9uIHRvcCBvZiB0aGUK
KyAgICAgICAgICAgIC8vIHRydW5jYXRlZCBzdHJpbmcgaS5lLiAgfEhlbGxvfENCQXwgLT4gfC4u
LmxvfENCQXwKKyAgICAgICAgICAgIExheW91dFVuaXQgd2lkdGhPZlZpc2libGVUZXh0IHsgcmVu
ZGVyZXIud2lkdGgodGV4dEJveC5zdGFydCgpLCB0ZXh0Qm94LnRydW5jYXRpb24oKSwgdGV4dEJv
eC50ZXh0UG9zKCksIHRleHRCb3guaXNGaXJzdExpbmUoKSkgfTsKKyAgICAgICAgICAgIExheW91
dFVuaXQgd2lkdGhPZkhpZGRlblRleHQgeyB0ZXh0Qm94LmxvZ2ljYWxXaWR0aCgpIC0gd2lkdGhP
ZlZpc2libGVUZXh0IH07CisgICAgICAgICAgICBMYXlvdXRTaXplIHRydW5jYXRpb25PZmZzZXQo
dGV4dEJveC5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkgPyB3aWR0aE9mSGlkZGVuVGV4dCA6IC13
aWR0aE9mSGlkZGVuVGV4dCwgMF9sdSk7CisgICAgICAgICAgICBsb2NhbFBhaW50T2Zmc2V0Lm1v
dmUodGV4dEJveC5pc0hvcml6b250YWwoKSA/IHRydW5jYXRpb25PZmZzZXQgOiB0cnVuY2F0aW9u
T2Zmc2V0LnRyYW5zcG9zZWRTaXplKCkpOworICAgICAgICB9CisgICAgfQorCisgICAgbG9jYWxQ
YWludE9mZnNldC5tb3ZlKDAsIHRleHRCb3gubGluZVN0eWxlKCkuaXNIb3Jpem9udGFsV3JpdGlu
Z01vZGUoKSA/IDAgOiAtdGV4dEJveC5sb2dpY2FsSGVpZ2h0KCkpOworCisgICAgRmxvYXRQb2lu
dCBib3hPcmlnaW4gPSB0ZXh0Qm94LmxvY2F0aW9uSW5jbHVkaW5nRmxpcHBpbmcoKTsKKyAgICBi
b3hPcmlnaW4ubW92ZUJ5KGxvY2FsUGFpbnRPZmZzZXQpOworICAgIHJldHVybiB7IGJveE9yaWdp
biwgRmxvYXRTaXplKHRleHRCb3gubG9naWNhbFdpZHRoKCksIHRleHRCb3gubG9naWNhbEhlaWdo
dCgpKSB9OworfQorCiBGbG9hdFJlY3QgVGV4dEJveFBhaW50ZXI6OmNhbGN1bGF0ZURvY3VtZW50
TWFya2VyQm91bmRzKGNvbnN0IExlZ2FjeUlubGluZVRleHRCb3gmIHRleHRCb3gsIGNvbnN0IE1h
cmtlZFRleHQmIG1hcmtlZFRleHQpCiB7CiAgICAgYXV0byYgZm9udCA9IHRleHRCb3gubGluZUZv
bnQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0Qm94UGFpbnRl
ci5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1RleHRCb3hQYWludGVyLmgKaW5kZXggNTNl
Yzk2NDMwNmJjOTEyYmVmMDNiNGIxMDY0NDE1YjBhYzA2MzlkMS4uMTZjOWNlMjM2MDlkMjA2MmQx
ZjFjY2YzNWMwOTY1M2NkZDQ2ZGJiZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1RleHRCb3hQYWludGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1RleHRC
b3hQYWludGVyLmgKQEAgLTI5LDcgKzI5LDkgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xh
c3MgQ29sb3I7CitjbGFzcyBEb2N1bWVudDsKIGNsYXNzIExlZ2FjeUlubGluZVRleHRCb3g7Citj
bGFzcyBSZW5kZXJUZXh0Owogc3RydWN0IENvbXBvc2l0aW9uVW5kZXJsaW5lOwogc3RydWN0IE1h
cmtlZFRleHQ7CiBzdHJ1Y3QgUGFpbnRJbmZvOwpAQCAtMzcsMjkgKzM5LDQwIEBAIHN0cnVjdCBT
dHlsZWRNYXJrZWRUZXh0OwogCiBjbGFzcyBUZXh0Qm94UGFpbnRlciB7CiBwdWJsaWM6Ci0gICAg
VGV4dEJveFBhaW50ZXIoY29uc3QgTGVnYWN5SW5saW5lVGV4dEJveCYsIFBhaW50SW5mbyYsIGNv
bnN0IEZsb2F0UmVjdCYgYm94UmVjdCk7CisgICAgVGV4dEJveFBhaW50ZXIoY29uc3QgTGVnYWN5
SW5saW5lVGV4dEJveCYsIFBhaW50SW5mbyYsIGNvbnN0IExheW91dFBvaW50JiBwYWludE9mZnNl
dCk7CiAgICAgflRleHRCb3hQYWludGVyKCk7CiAKLSAgICB2b2lkIHBhaW50Q29tcG9zaXRpb25C
YWNrZ3JvdW5kKCk7Ci0gICAgdm9pZCBwYWludEJhY2tncm91bmQoY29uc3QgU3R5bGVkTWFya2Vk
VGV4dCYpOwotICAgIHZvaWQgcGFpbnRGb3JlZ3JvdW5kKGNvbnN0IFN0eWxlZE1hcmtlZFRleHQm
KTsKLSAgICB2b2lkIHBhaW50RGVjb3JhdGlvbihjb25zdCBTdHlsZWRNYXJrZWRUZXh0JiwgY29u
c3QgRmxvYXRSZWN0JiBjbGlwT3V0UmVjdCk7Ci0gICAgdm9pZCBwYWludENvbXBvc2l0aW9uVW5k
ZXJsaW5lcygpOwotICAgIHZvaWQgcGFpbnRQbGF0Zm9ybURvY3VtZW50TWFya2VycygpOworICAg
IHZvaWQgcGFpbnQoKTsKIAogICAgIHN0YXRpYyBGbG9hdFJlY3QgY2FsY3VsYXRlVW5pb25PZkFs
bERvY3VtZW50TWFya2VyQm91bmRzKGNvbnN0IExlZ2FjeUlubGluZVRleHRCb3gmKTsKIAogcHJp
dmF0ZToKKyAgICB2b2lkIHBhaW50QmFja2dyb3VuZCgpOworICAgIHZvaWQgcGFpbnRGb3JlZ3Jv
dW5kQW5kRGVjb3JhdGlvbnMoKTsKKyAgICB2b2lkIHBhaW50Q29tcG9zaXRpb25CYWNrZ3JvdW5k
KCk7CisgICAgdm9pZCBwYWludENvbXBvc2l0aW9uVW5kZXJsaW5lcygpOworICAgIHZvaWQgcGFp
bnRQbGF0Zm9ybURvY3VtZW50TWFya2VycygpOworCiAgICAgZW51bSBjbGFzcyBCYWNrZ3JvdW5k
U3R5bGUgeyBOb3JtYWwsIFJvdW5kZWQgfTsKICAgICB2b2lkIHBhaW50QmFja2dyb3VuZCh1bnNp
Z25lZCBzdGFydE9mZnNldCwgdW5zaWduZWQgZW5kT2Zmc2V0LCBjb25zdCBDb2xvciYsIEJhY2tn
cm91bmRTdHlsZSA9IEJhY2tncm91bmRTdHlsZTo6Tm9ybWFsKTsKKyAgICB2b2lkIHBhaW50QmFj
a2dyb3VuZChjb25zdCBTdHlsZWRNYXJrZWRUZXh0Jik7CisgICAgdm9pZCBwYWludEZvcmVncm91
bmQoY29uc3QgU3R5bGVkTWFya2VkVGV4dCYpOworICAgIHZvaWQgcGFpbnREZWNvcmF0aW9uKGNv
bnN0IFN0eWxlZE1hcmtlZFRleHQmLCBjb25zdCBGbG9hdFJlY3QmIGNsaXBPdXRSZWN0KTsKICAg
ICB2b2lkIHBhaW50Q29tcG9zaXRpb25VbmRlcmxpbmUoY29uc3QgQ29tcG9zaXRpb25VbmRlcmxp
bmUmKTsKICAgICB2b2lkIHBhaW50UGxhdGZvcm1Eb2N1bWVudE1hcmtlcihjb25zdCBNYXJrZWRU
ZXh0Jik7Ci0gICAgCisKKyAgICBzdGF0aWMgRmxvYXRSZWN0IGNvbXB1dGVQYWludFJlY3QoY29u
c3QgTGVnYWN5SW5saW5lVGV4dEJveCYsIGNvbnN0IExheW91dFBvaW50JiBwYWludE9mZnNldCk7
CiAgICAgc3RhdGljIEZsb2F0UmVjdCBjYWxjdWxhdGVEb2N1bWVudE1hcmtlckJvdW5kcyhjb25z
dCBMZWdhY3lJbmxpbmVUZXh0Qm94JiwgY29uc3QgTWFya2VkVGV4dCYpOwogCiAgICAgY29uc3Qg
TGVnYWN5SW5saW5lVGV4dEJveCYgbV90ZXh0Qm94OworICAgIGNvbnN0IFJlbmRlclRleHQmIG1f
cmVuZGVyZXI7CisgICAgY29uc3QgRG9jdW1lbnQmIG1fZG9jdW1lbnQ7CiAgICAgUGFpbnRJbmZv
JiBtX3BhaW50SW5mbzsKLSAgICBjb25zdCBGbG9hdFJlY3QgbV9ib3hSZWN0OworICAgIGNvbnN0
IEZsb2F0UmVjdCBtX3BhaW50UmVjdDsKKyAgICBjb25zdCBib29sIG1faXNQcmludGluZzsKKyAg
ICBjb25zdCBib29sIG1faGF2ZVNlbGVjdGlvbjsKKyAgICBjb25zdCBib29sIG1fY29udGFpbnND
b21wb3NpdGlvbjsKKyAgICBjb25zdCBib29sIG1fdXNlQ3VzdG9tVW5kZXJsaW5lczsKIH07CiAK
IH0K
</data>

          </attachment>
      

    </bug>

</bugzilla>