<?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>39746</bug_id>
          
          <creation_ts>2010-05-26 09:32:44 -0700</creation_ts>
          <short_desc>[Qt] qt_runtime.h and .cpp have coding-style errors</short_desc>
          <delta_ts>2011-05-22 23:50:25 -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>WebKit Qt</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>DUPLICATE</resolution>
          <dup_id>60842</dup_id>
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>Qt, QtTriaged</keywords>
          <priority>P5</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Anders Bakken">agbakken</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>ademar</cc>
    
    <cc>benjamin</cc>
    
    <cc>jesus</cc>
    
    <cc>kenneth</cc>
    
    <cc>kling</cc>
    
    <cc>manish_c_mulimani</cc>
    
    <cc>noam</cc>
    
    <cc>peojala11</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>230736</commentid>
    <comment_count>0</comment_count>
    <who name="Anders Bakken">agbakken</who>
    <bug_when>2010-05-26 09:32:44 -0700</bug_when>
    <thetext>WebCore/bridge/qt/qt_runtime.h:20:  #ifndef header guard has wrong style, please use: qt_runtime_h  [build/header_guard] [5]
WebCore/bridge/qt/qt_runtime.h:76:  This { should be at the end of the previous line  [whitespace/braces] [4]
WebCore/bridge/qt/qt_runtime.h:98:  This { should be at the end of the previous line  [whitespace/braces] [4]
WebCore/bridge/qt/qt_runtime.h:170:  This { should be at the end of the previous line  [whitespace/braces] [4]
WebCore/bridge/qt/qt_runtime.h:181:  d_func is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebCore/bridge/qt/qt_runtime.h:193:  This { should be at the end of the previous line  [whitespace/braces] [4]
WebCore/bridge/qt/qt_runtime.h:195:  Extra space before )  [whitespace/parens] [2]
WebCore/bridge/qt/qt_runtime.h:202:  d_func is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebCore/bridge/qt/qt_runtime.h:213:  This { should be at the end of the previous line  [whitespace/braces] [4]
Total errors found: 9 in 1 files</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>230744</commentid>
    <comment_count>1</comment_count>
      <attachid>57108</attachid>
    <who name="Anders Bakken">agbakken</who>
    <bug_when>2010-05-26 09:57:29 -0700</bug_when>
    <thetext>Created attachment 57108
Patch that fixes the coding style issues</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>230752</commentid>
    <comment_count>2</comment_count>
    <who name="Anders Bakken">agbakken</who>
    <bug_when>2010-05-26 10:09:49 -0700</bug_when>
    <thetext>*** Bug 39747 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>230756</commentid>
    <comment_count>3</comment_count>
      <attachid>57112</attachid>
    <who name="Anders Bakken">agbakken</who>
    <bug_when>2010-05-26 10:11:46 -0700</bug_when>
    <thetext>Created attachment 57112
Patch that fixes the coding style issues</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>231074</commentid>
    <comment_count>4</comment_count>
    <who name="Petri Ojala">peojala11</who>
    <bug_when>2010-05-26 21:39:49 -0700</bug_when>
    <thetext>QtTriaged</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>244348</commentid>
    <comment_count>5</comment_count>
    <who name="Jesus Sanchez-Palencia">jesus</who>
    <bug_when>2010-06-29 10:15:46 -0700</bug_when>
    <thetext>Is this waiting for review? Maybe Anders forgot the flag...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>330887</commentid>
    <comment_count>6</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2011-01-07 11:40:57 -0800</bug_when>
    <thetext>Anders, what is the status of this?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>407779</commentid>
    <comment_count>7</comment_count>
    <who name="">manish_c_mulimani</who>
    <bug_when>2011-05-22 23:34:11 -0700</bug_when>
    <thetext>There is no activity on this bug from a long time. So can I assign it to myself and take it further?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>407781</commentid>
    <comment_count>8</comment_count>
    <who name="Andreas Kling">kling</who>
    <bug_when>2011-05-22 23:48:55 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; There is no activity on this bug from a long time. So can I assign it to myself and take it further?

Given that Noam is currently rewriting this code, I&apos;d suggest you sync with him (noamr on #qtwebkit) :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>407782</commentid>
    <comment_count>9</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2011-05-22 23:50:25 -0700</bug_when>
    <thetext>

*** This bug has been marked as a duplicate of bug 60842 ***</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>57108</attachid>
            <date>2010-05-26 09:57:29 -0700</date>
            <delta_ts>2010-05-26 10:11:46 -0700</delta_ts>
            <desc>Patch that fixes the coding style issues</desc>
            <filename>patch.39746</filename>
            <type>text/plain</type>
            <size>4231</size>
            <attacher name="Anders Bakken">agbakken</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2MDI0MSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTggQEAKKzIwMTAtMDUtMjYgIEFuZGVycyBCYWtrZW4gIDxhZ2Jha2tlbkBnbWFp
bC5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
cXRfcnVudGltZS5oIGhhcyBjb2Rpbmctc3R5bGUgZXJyb3JzCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zOTc0NgorCisgICAgICAgIEZpeCB3ZWJraXQg
Y29kaW5nIHN0eWxlIGlzc3VlcyBpbiBxdF9ydW50aW1lLmgKKworICAgICAgICAqIGJyaWRnZS9x
dC9xdF9ydW50aW1lLmg6CisgICAgICAgIChKU0M6OkJpbmRpbmdzOjpRdFJ1bnRpbWVNZXRob2Q6
OmRmdW5jKToKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6OlF0UnVudGltZU1ldGFNZXRob2Q6OmRm
dW5jKToKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6OlF0UnVudGltZUNvbm5lY3Rpb25NZXRob2Q6
OmRmdW5jKToKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6Oik6CisKIDIwMTAtMDUtMjYgIEplcmVt
eSBPcmxvdyAgPGpvcmxvd0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgVW5yZXZpZXdlZCBidWls
ZCBmaXggZm9yIFdpbmRvd3MgKyBjbGVhbiB1cCB0aGUgeGNvZGUgcHJvamVjdC4KSW5kZXg6IFdl
YkNvcmUvYnJpZGdlL3F0L3F0X3J1bnRpbWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JyaWRn
ZS9xdC9xdF9ydW50aW1lLmgJKHJldmlzaW9uIDYwMDk1KQorKysgV2ViQ29yZS9icmlkZ2UvcXQv
cXRfcnVudGltZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNyw4ICsxNyw4IEBACiAgKgogICovCiAK
LSNpZm5kZWYgQklORElOR1NfUVRfUlVOVElNRV9IXwotI2RlZmluZSBCSU5ESU5HU19RVF9SVU5U
SU1FX0hfCisjaWZuZGVmIHF0X3J1bnRpbWVfaAorI2RlZmluZSBxdF9ydW50aW1lX2gKIAogI2lu
Y2x1ZGUgIkJyaWRnZS5oIgogI2luY2x1ZGUgIkNvbXBsZXRpb24uaCIKQEAgLTcyLDggKzcyLDcg
QEAgcHJpdmF0ZToKIH07CiAKIAotY2xhc3MgUXRNZXRob2QgOiBwdWJsaWMgTWV0aG9kCi17Citj
bGFzcyBRdE1ldGhvZCA6IHB1YmxpYyBNZXRob2QgewogcHVibGljOgogICAgIFF0TWV0aG9kKGNv
bnN0IFFNZXRhT2JqZWN0ICptbywgaW50IGksIGNvbnN0IFFCeXRlQXJyYXkgJmlkZW50LCBpbnQg
bnVtUGFyYW1ldGVycykKICAgICAgICAgOiBtX21ldGFPYmplY3QobW8pLApAQCAtOTQsOCArOTMs
NyBAQCBwcml2YXRlOgogfTsKIAogCi10ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gY2xhc3MgUXRBcnJh
eSA6IHB1YmxpYyBBcnJheQotewordGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGNsYXNzIFF0QXJyYXkg
OiBwdWJsaWMgQXJyYXkgewogcHVibGljOgogICAgIFF0QXJyYXkoUUxpc3Q8VD4gbGlzdCwgUU1l
dGFUeXBlOjpUeXBlIHR5cGUsIFBhc3NSZWZQdHI8Um9vdE9iamVjdD4pOwogICAgIHZpcnR1YWwg
flF0QXJyYXkoKTsKQEAgLTE2MSwxMyArMTU5LDEyIEBAIHB1YmxpYzoKIHByb3RlY3RlZDoKICAg
ICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBPdmVycmlkZXNHZXRPd25Q
cm9wZXJ0eVNsb3QgfCBPdmVycmlkZXNHZXRQcm9wZXJ0eU5hbWVzIHwgSW50ZXJuYWxGdW5jdGlv
bjo6U3RydWN0dXJlRmxhZ3MgfCBPdmVycmlkZXNNYXJrQ2hpbGRyZW47CiAKLSAgICBRdFJ1bnRp
bWVNZXRob2REYXRhICpkX2Z1bmMoKSBjb25zdCB7cmV0dXJuIGRfcHRyO30KKyAgICBRdFJ1bnRp
bWVNZXRob2REYXRhICpkZnVuYygpIGNvbnN0IHtyZXR1cm4gZHB0cjt9CiAgICAgUXRSdW50aW1l
TWV0aG9kKFF0UnVudGltZU1ldGhvZERhdGEgKmRkLCBFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElk
ZW50aWZpZXIgJm4sIFBhc3NSZWZQdHI8UXRJbnN0YW5jZT4gaW5zdCk7Ci0gICAgUXRSdW50aW1l
TWV0aG9kRGF0YSAqZF9wdHI7CisgICAgUXRSdW50aW1lTWV0aG9kRGF0YSAqZHB0cjsKIH07CiAK
LWNsYXNzIFF0UnVudGltZU1ldGFNZXRob2QgOiBwdWJsaWMgUXRSdW50aW1lTWV0aG9kCi17Citj
bGFzcyBRdFJ1bnRpbWVNZXRhTWV0aG9kIDogcHVibGljIFF0UnVudGltZU1ldGhvZCB7CiBwdWJs
aWM6CiAgICAgUXRSdW50aW1lTWV0YU1ldGhvZChFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50
aWZpZXIgJm4sIFBhc3NSZWZQdHI8UXRJbnN0YW5jZT4gaW5zdCwgaW50IGluZGV4LCBjb25zdCBR
Qnl0ZUFycmF5JiBzaWduYXR1cmUsIGJvb2wgYWxsb3dQcml2YXRlKTsKIApAQCAtMTc4LDcgKzE3
NSw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgbWFya0NoaWxkcmVuKE1hcmtTdGFjayYg
bWFya1N0YWNrKTsKIAogcHJvdGVjdGVkOgotICAgIFF0UnVudGltZU1ldGFNZXRob2REYXRhKiBk
X2Z1bmMoKSBjb25zdCB7cmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8UXRSdW50aW1lTWV0YU1ldGhv
ZERhdGEqPihkX3B0cik7fQorICAgIFF0UnVudGltZU1ldGFNZXRob2REYXRhKiBkZnVuYygpIGNv
bnN0IHtyZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxRdFJ1bnRpbWVNZXRhTWV0aG9kRGF0YSo+KGRw
dHIpO30KIAogcHJpdmF0ZToKICAgICB2aXJ0dWFsIENhbGxUeXBlIGdldENhbGxEYXRhKENhbGxE
YXRhJik7CkBAIC0xODksMTcgKzE4NiwxNiBAQCBwcml2YXRlOgogfTsKIAogY2xhc3MgUXRDb25u
ZWN0aW9uT2JqZWN0OwotY2xhc3MgUXRSdW50aW1lQ29ubmVjdGlvbk1ldGhvZCA6IHB1YmxpYyBR
dFJ1bnRpbWVNZXRob2QKLXsKK2NsYXNzIFF0UnVudGltZUNvbm5lY3Rpb25NZXRob2QgOiBwdWJs
aWMgUXRSdW50aW1lTWV0aG9kIHsKIHB1YmxpYzoKLSAgICBRdFJ1bnRpbWVDb25uZWN0aW9uTWV0
aG9kKEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciAmbiwgYm9vbCBpc0Nvbm5lY3Qs
IFBhc3NSZWZQdHI8UXRJbnN0YW5jZT4gaW5zdCwgaW50IGluZGV4LCBjb25zdCBRQnl0ZUFycmF5
JiBzaWduYXR1cmUgKTsKKyAgICBRdFJ1bnRpbWVDb25uZWN0aW9uTWV0aG9kKEV4ZWNTdGF0ZSAq
ZXhlYywgY29uc3QgSWRlbnRpZmllciAmbiwgYm9vbCBpc0Nvbm5lY3QsIFBhc3NSZWZQdHI8UXRJ
bnN0YW5jZT4gaW5zdCwgaW50IGluZGV4LCBjb25zdCBRQnl0ZUFycmF5JiBzaWduYXR1cmUpOwog
CiAgICAgdmlydHVhbCBib29sIGdldE93blByb3BlcnR5U2xvdChFeGVjU3RhdGUgKiwgY29uc3Qg
SWRlbnRpZmllciYsIFByb3BlcnR5U2xvdCYpOwogICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9w
ZXJ0eURlc2NyaXB0b3IoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYsIFByb3BlcnR5RGVz
Y3JpcHRvciYpOwogICAgIHZpcnR1YWwgdm9pZCBnZXRPd25Qcm9wZXJ0eU5hbWVzKEV4ZWNTdGF0
ZSosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlIG1vZGUgPSBFeGNsdWRlRG9u
dEVudW1Qcm9wZXJ0aWVzKTsKIAogcHJvdGVjdGVkOgotICAgIFF0UnVudGltZUNvbm5lY3Rpb25N
ZXRob2REYXRhKiBkX2Z1bmMoKSBjb25zdCB7cmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8UXRSdW50
aW1lQ29ubmVjdGlvbk1ldGhvZERhdGEqPihkX3B0cik7fQorICAgIFF0UnVudGltZUNvbm5lY3Rp
b25NZXRob2REYXRhKiBkZnVuYygpIGNvbnN0IHtyZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxRdFJ1
bnRpbWVDb25uZWN0aW9uTWV0aG9kRGF0YSo+KGRwdHIpO30KIAogcHJpdmF0ZToKICAgICB2aXJ0
dWFsIENhbGxUeXBlIGdldENhbGxEYXRhKENhbGxEYXRhJik7CkBAIC0yMDksOCArMjA1LDcgQEAg
cHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgUXRDb25uZWN0aW9uT2JqZWN0OwogfTsKIAotY2xh
c3MgUXRDb25uZWN0aW9uT2JqZWN0OiBwdWJsaWMgUU9iamVjdAoteworY2xhc3MgUXRDb25uZWN0
aW9uT2JqZWN0OiBwdWJsaWMgUU9iamVjdCB7CiBwdWJsaWM6CiAgICAgUXRDb25uZWN0aW9uT2Jq
ZWN0KFBhc3NSZWZQdHI8UXRJbnN0YW5jZT4gaW5zdGFuY2UsIGludCBzaWduYWxJbmRleCwgSlNP
YmplY3QqIHRoaXNPYmplY3QsIEpTT2JqZWN0KiBmdW5jT2JqZWN0KTsKICAgICB+UXRDb25uZWN0
aW9uT2JqZWN0KCk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>57112</attachid>
            <date>2010-05-26 10:11:46 -0700</date>
            <delta_ts>2010-06-11 13:38:25 -0700</delta_ts>
            <desc>Patch that fixes the coding style issues</desc>
            <filename>patch.39746</filename>
            <type>text/plain</type>
            <size>73619</size>
            <attacher name="Anders Bakken">agbakken</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2MDI0MikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDIgQEAKKzIwMTAtMDUtMjYgIEFuZGVycyBCYWtrZW4gIDxhZ2Jha2tlbkBnbWFp
bC5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
cXRfcnVudGltZS5oIGFuZCAuY3BwIGhhdmUgY29kaW5nLXN0eWxlIGVycm9ycworICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Mzk3NDYKKworICAgICAgICBG
aXggd2Via2l0IGNvZGluZyBzdHlsZSBpc3N1ZXMgaW4gcXRfcnVudGltZS5oIGFuZCBxdF9ydW50
aW1lLmNwcAorCisgICAgICAgICogYnJpZGdlL3F0L3F0X3J1bnRpbWUuY3BwOgorICAgICAgICAo
SlNDOjpCaW5kaW5nczo6UVdLTm9EZWJ1Zzo6UVdLTm9EZWJ1Zyk6CisgICAgICAgIChKU0M6OkJp
bmRpbmdzOjpRV0tOb0RlYnVnOjp+UVdLTm9EZWJ1Zyk6CisgICAgICAgIChKU0M6OkJpbmRpbmdz
Ojp2YWx1ZVJlYWxUeXBlKToKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6OmNvbnZlcnRWYWx1ZVRv
UVZhcmlhbnQpOgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6Y29udmVydFFWYXJpYW50VG9WYWx1
ZSk6CisgICAgICAgIChKU0M6OkJpbmRpbmdzOjpRdFJ1bnRpbWVNZXRob2Q6OlF0UnVudGltZU1l
dGhvZCk6CisgICAgICAgIChKU0M6OkJpbmRpbmdzOjpRdFJ1bnRpbWVNZXRob2Q6On5RdFJ1bnRp
bWVNZXRob2QpOgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6UXRNZXRob2RNYXRjaFR5cGU6OmVu
dW1lcmF0b3JJbmRleCk6CisgICAgICAgIChKU0M6OkJpbmRpbmdzOjpRdE1ldGhvZE1hdGNoVHlw
ZTo6bmFtZSk6CisgICAgICAgIChKU0M6OkJpbmRpbmdzOjpRdE1ldGhvZE1hdGNoRGF0YTo6Zmly
c3RVbnJlc29sdmVkSW5kZXgpOgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6ZmluZE1ldGhvZElu
ZGV4KToKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6OlF0UnVudGltZU1ldGFNZXRob2Q6OmNhbGwp
OgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6UXRSdW50aW1lTWV0YU1ldGhvZDo6Z2V0T3duUHJv
cGVydHlTbG90KToKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6OlF0UnVudGltZUNvbm5lY3Rpb25N
ZXRob2Q6OmNhbGwpOgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6KToKKyAgICAgICAgKEpTQzo6
QmluZGluZ3M6OlF0Q29ubmVjdGlvbk9iamVjdDo6bWV0YU9iamVjdCk6CisgICAgICAgIChKU0M6
OkJpbmRpbmdzOjpRdENvbm5lY3Rpb25PYmplY3Q6OnF0X21ldGFjYXN0KToKKyAgICAgICAgKEpT
Qzo6QmluZGluZ3M6OlF0Q29ubmVjdGlvbk9iamVjdDo6cXRfbWV0YWNhbGwpOgorICAgICAgICAo
SlNDOjpCaW5kaW5nczo6UXRDb25uZWN0aW9uT2JqZWN0OjpleGVjdXRlKToKKyAgICAgICAgKEpT
Qzo6QmluZGluZ3M6OlF0Q29ubmVjdGlvbk9iamVjdDo6bWF0Y2gpOgorICAgICAgICAoSlNDOjpC
aW5kaW5nczo6Ojp+UXRBcnJheSk6CisgICAgICAgIChKU0M6OkJpbmRpbmdzOjo6OnNldFZhbHVl
QXQpOgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6Ojp2YWx1ZUF0KToKKyAgICAgICAgKiBicmlk
Z2UvcXQvcXRfcnVudGltZS5oOgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6UXRSdW50aW1lTWV0
aG9kOjpkZnVuYyk6CisgICAgICAgIChKU0M6OkJpbmRpbmdzOjpRdFJ1bnRpbWVNZXRhTWV0aG9k
OjpkZnVuYyk6CisgICAgICAgIChKU0M6OkJpbmRpbmdzOjpRdFJ1bnRpbWVDb25uZWN0aW9uTWV0
aG9kOjpkZnVuYyk6CisgICAgICAgIChKU0M6OkJpbmRpbmdzOjopOgorCiAyMDEwLTA1LTI2ICBK
ZXJlbXkgT3Jsb3cgIDxqb3Jsb3dAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFVucmV2aWV3ZWQg
YnVpbGQgZml4IGZvciBXaW5kb3dzICsgY2xlYW4gdXAgdGhlIFZpc3VhbCBTdHVkaW8gcHJvamVj
dC4KSW5kZXg6IFdlYkNvcmUvYnJpZGdlL3F0L3F0X3J1bnRpbWUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvYnJpZGdlL3F0L3F0X3J1bnRpbWUuY3BwCShyZXZpc2lvbiA2MDA5NSkKKysrIFdl
YkNvcmUvYnJpZGdlL3F0L3F0X3J1bnRpbWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw3ICsz
MCw2IEBACiAjaW5jbHVkZSAiSlNCeXRlQXJyYXkuaCIKICNpbmNsdWRlICJKU0RPTUJpbmRpbmcu
aCIKICNpbmNsdWRlICJKU0RPTVdpbmRvdy5oIgotI2luY2x1ZGUgPEpTRnVuY3Rpb24uaD4KICNp
bmNsdWRlICJKU0dsb2JhbE9iamVjdC5oIgogI2luY2x1ZGUgIkpTSFRNTEVsZW1lbnQuaCIKICNp
bmNsdWRlICJKU0xvY2suaCIKQEAgLTQ5LDYgKzQ4LDcgQEAKICNpbmNsdWRlICJxdF9waXhtYXBy
dW50aW1lLmgiCiAjaW5jbHVkZSAicXZhcmxlbmd0aGFycmF5LmgiCiAjaW5jbHVkZSAicXdlYmVs
ZW1lbnQuaCIKKyNpbmNsdWRlIDxKU0Z1bmN0aW9uLmg+CiAjaW5jbHVkZSA8bGltaXRzLmg+CiAj
aW5jbHVkZSA8cnVudGltZS9FcnJvci5oPgogI2luY2x1ZGUgPHJ1bnRpbWVfYXJyYXkuaD4KQEAg
LTY1LDE0ICs2NSwxMyBAQCBuYW1lc3BhY2UgSlNDIHsKIG5hbWVzcGFjZSBCaW5kaW5ncyB7CiAK
IC8vIERlYnVnZ2luZwotLy8jZGVmaW5lIFFUV0tfUlVOVElNRV9DT05WRVJTSU9OX0RFQlVHCi0v
LyNkZWZpbmUgUVRXS19SVU5USU1FX01BVENIX0RFQlVHCisvLyAjZGVmaW5lIFFUV0tfUlVOVElN
RV9DT05WRVJTSU9OX0RFQlVHCisvLyAjZGVmaW5lIFFUV0tfUlVOVElNRV9NQVRDSF9ERUJVRwog
Ci1jbGFzcyBRV0tOb0RlYnVnCi17CitjbGFzcyBRV0tOb0RlYnVnIHsKIHB1YmxpYzoKLSAgICBp
bmxpbmUgUVdLTm9EZWJ1Zygpe30KLSAgICBpbmxpbmUgflFXS05vRGVidWcoKXt9CisgICAgaW5s
aW5lIFFXS05vRGVidWcoKSB7fQorICAgIGlubGluZSB+UVdLTm9EZWJ1ZygpIHt9CiAKICAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBUPgogICAgIGlubGluZSBRV0tOb0RlYnVnICZvcGVyYXRvcjw8KGNv
bnN0IFQgJikgeyByZXR1cm4gKnRoaXM7IH0KQEAgLTEzNiwyNSArMTM1LDI1IEBAIHN0YXRpYyBK
U1JlYWxUeXBlIHZhbHVlUmVhbFR5cGUoRXhlY1N0YXQKIHsKICAgICBpZiAodmFsLmlzTnVtYmVy
KCkpCiAgICAgICAgIHJldHVybiBOdW1iZXI7Ci0gICAgZWxzZSBpZiAodmFsLmlzU3RyaW5nKCkp
CisgICAgaWYgKHZhbC5pc1N0cmluZygpKQogICAgICAgICByZXR1cm4gU3RyaW5nOwotICAgIGVs
c2UgaWYgKHZhbC5pc0Jvb2xlYW4oKSkKKyAgICBpZiAodmFsLmlzQm9vbGVhbigpKQogICAgICAg
ICByZXR1cm4gQm9vbGVhbjsKLSAgICBlbHNlIGlmICh2YWwuaXNOdWxsKCkpCisgICAgaWYgKHZh
bC5pc051bGwoKSkKICAgICAgICAgcmV0dXJuIE51bGw7Ci0gICAgZWxzZSBpZiAoaXNKU0J5dGVB
cnJheSgmZXhlYy0+Z2xvYmFsRGF0YSgpLCB2YWwpKQorICAgIGlmIChpc0pTQnl0ZUFycmF5KCZl
eGVjLT5nbG9iYWxEYXRhKCksIHZhbCkpCiAgICAgICAgIHJldHVybiBKU0J5dGVBcnJheTsKLSAg
ICBlbHNlIGlmICh2YWwuaXNPYmplY3QoKSkgewotICAgICAgICBKU09iamVjdCAqb2JqZWN0ID0g
dmFsLnRvT2JqZWN0KGV4ZWMpOwotICAgICAgICBpZiAob2JqZWN0LT5pbmhlcml0cygmUnVudGlt
ZUFycmF5OjpzX2luZm8pKSAgLy8gUnVudGltZUFycmF5ICdpbmhlcml0cycgZnJvbSBBcnJheSwg
YnV0IG5vdCBpbiBDKysKKyAgICBpZiAodmFsLmlzT2JqZWN0KCkpIHsKKyAgICAgICAgSlNPYmpl
Y3QqIG9iamVjdCA9IHZhbC50b09iamVjdChleGVjKTsKKyAgICAgICAgaWYgKG9iamVjdC0+aW5o
ZXJpdHMoJlJ1bnRpbWVBcnJheTo6c19pbmZvKSkgLy8gUnVudGltZUFycmF5ICdpbmhlcml0cycg
ZnJvbSBBcnJheSwgYnV0IG5vdCBpbiBDKysKICAgICAgICAgICAgIHJldHVybiBSVEFycmF5Owot
ICAgICAgICBlbHNlIGlmIChvYmplY3QtPmluaGVyaXRzKCZKU0FycmF5OjppbmZvKSkKKyAgICAg
ICAgaWYgKG9iamVjdC0+aW5oZXJpdHMoJkpTQXJyYXk6OmluZm8pKQogICAgICAgICAgICAgcmV0
dXJuIEFycmF5OwotICAgICAgICBlbHNlIGlmIChvYmplY3QtPmluaGVyaXRzKCZEYXRlSW5zdGFu
Y2U6OmluZm8pKQorICAgICAgICBpZiAob2JqZWN0LT5pbmhlcml0cygmRGF0ZUluc3RhbmNlOjpp
bmZvKSkKICAgICAgICAgICAgIHJldHVybiBEYXRlOwotICAgICAgICBlbHNlIGlmIChvYmplY3Qt
PmluaGVyaXRzKCZSZWdFeHBPYmplY3Q6OmluZm8pKQorICAgICAgICBpZiAob2JqZWN0LT5pbmhl
cml0cygmUmVnRXhwT2JqZWN0OjppbmZvKSkKICAgICAgICAgICAgIHJldHVybiBSZWdFeHA7Ci0g
ICAgICAgIGVsc2UgaWYgKG9iamVjdC0+aW5oZXJpdHMoJlJ1bnRpbWVPYmplY3Q6OnNfaW5mbykp
CisgICAgICAgIGlmIChvYmplY3QtPmluaGVyaXRzKCZSdW50aW1lT2JqZWN0OjpzX2luZm8pKQog
ICAgICAgICAgICAgcmV0dXJuIFFPYmo7CiAgICAgICAgIHJldHVybiBPYmplY3Q7CiAgICAgfQpA
QCAtMTg5LDQxICsxODgsNDEgQEAgUVZhcmlhbnQgY29udmVydFZhbHVlVG9RVmFyaWFudChFeGVj
U3RhdAogICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CiAgICAgSlNSZWFs
VHlwZSB0eXBlID0gdmFsdWVSZWFsVHlwZShleGVjLCB2YWx1ZSk7CiAgICAgaWYgKGhpbnQgPT0g
UU1ldGFUeXBlOjpWb2lkKSB7Ci0gICAgICAgIHN3aXRjaCh0eXBlKSB7Ci0gICAgICAgICAgICBj
YXNlIE51bWJlcjoKKyAgICAgICAgc3dpdGNoICh0eXBlKSB7CisgICAgICAgIGNhc2UgTnVtYmVy
OgorICAgICAgICAgICAgaGludCA9IFFNZXRhVHlwZTo6RG91YmxlOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGNhc2UgQm9vbGVhbjoKKyAgICAgICAgICAgIGhpbnQgPSBRTWV0YVR5cGU6
OkJvb2w7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBTdHJpbmc6CisgICAgICAg
IGRlZmF1bHQ6CisgICAgICAgICAgICBoaW50ID0gUU1ldGFUeXBlOjpRU3RyaW5nOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRGF0ZToKKyAgICAgICAgICAgIGhpbnQgPSBRTWV0
YVR5cGU6OlFEYXRlVGltZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFJlZ0V4
cDoKKyAgICAgICAgICAgIGhpbnQgPSBRTWV0YVR5cGU6OlFSZWdFeHA7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBPYmplY3Q6CisgICAgICAgICAgICBpZiAob2JqZWN0LT5pbmhl
cml0cygmTnVtYmVyT2JqZWN0OjppbmZvKSkKICAgICAgICAgICAgICAgICBoaW50ID0gUU1ldGFU
eXBlOjpEb3VibGU7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIEJv
b2xlYW46CisgICAgICAgICAgICBlbHNlIGlmIChvYmplY3QtPmluaGVyaXRzKCZCb29sZWFuT2Jq
ZWN0OjppbmZvKSkKICAgICAgICAgICAgICAgICBoaW50ID0gUU1ldGFUeXBlOjpCb29sOwotICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBTdHJpbmc6Ci0gICAgICAgICAg
ICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIGhpbnQgPSBRTWV0YVR5cGU6OlFTdHJpbmc7Ci0g
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIERhdGU6Ci0gICAgICAgICAg
ICAgICAgaGludCA9IFFNZXRhVHlwZTo6UURhdGVUaW1lOwotICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgY2FzZSBSZWdFeHA6Ci0gICAgICAgICAgICAgICAgaGludCA9IFFNZXRh
VHlwZTo6UVJlZ0V4cDsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2Ug
T2JqZWN0OgotICAgICAgICAgICAgICAgIGlmIChvYmplY3QtPmluaGVyaXRzKCZOdW1iZXJPYmpl
Y3Q6OmluZm8pKQotICAgICAgICAgICAgICAgICAgICBoaW50ID0gUU1ldGFUeXBlOjpEb3VibGU7
Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAob2JqZWN0LT5pbmhlcml0cygmQm9vbGVhbk9iamVj
dDo6aW5mbykpCi0gICAgICAgICAgICAgICAgICAgIGhpbnQgPSBRTWV0YVR5cGU6OkJvb2w7Ci0g
ICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBoaW50ID0gUU1ldGFUeXBl
OjpRVmFyaWFudE1hcDsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2Ug
UU9iajoKLSAgICAgICAgICAgICAgICBoaW50ID0gUU1ldGFUeXBlOjpRT2JqZWN0U3RhcjsKLSAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgSlNCeXRlQXJyYXk6Ci0gICAg
ICAgICAgICAgICAgaGludCA9IFFNZXRhVHlwZTo6UUJ5dGVBcnJheTsKLSAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgQXJyYXk6Ci0gICAgICAgICAgICBjYXNlIFJUQXJy
YXk6Ci0gICAgICAgICAgICAgICAgaGludCA9IFFNZXRhVHlwZTo6UVZhcmlhbnRMaXN0OwotICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGhp
bnQgPSBRTWV0YVR5cGU6OlFWYXJpYW50TWFwOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgUU9iajoKKyAgICAgICAgICAgIGhpbnQgPSBRTWV0YVR5cGU6OlFPYmplY3RTdGFyOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSlNCeXRlQXJyYXk6CisgICAgICAgICAg
ICBoaW50ID0gUU1ldGFUeXBlOjpRQnl0ZUFycmF5OworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIGNhc2UgQXJyYXk6CisgICAgICAgIGNhc2UgUlRBcnJheToKKyAgICAgICAgICAgIGhpbnQg
PSBRTWV0YVR5cGU6OlFWYXJpYW50TGlzdDsKKyAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9
CiAgICAgfQogCkBAIC0yNDIsNTI5ICsyNDEsNTI5IEBAIFFWYXJpYW50IGNvbnZlcnRWYWx1ZVRv
UVZhcmlhbnQoRXhlY1N0YXQKICAgICBRVmFyaWFudCByZXQ7CiAgICAgaW50IGRpc3QgPSAtMTsK
ICAgICBzd2l0Y2ggKGhpbnQpIHsKLSAgICAgICAgY2FzZSBRTWV0YVR5cGU6OkJvb2w6Ci0gICAg
ICAgICAgICBpZiAodHlwZSA9PSBPYmplY3QgJiYgb2JqZWN0LT5pbmhlcml0cygmQm9vbGVhbk9i
amVjdDo6aW5mbykpCi0gICAgICAgICAgICAgICAgcmV0ID0gUVZhcmlhbnQoYXNCb29sZWFuT2Jq
ZWN0KHZhbHVlKS0+aW50ZXJuYWxWYWx1ZSgpLnRvQm9vbGVhbihleGVjKSk7Ci0gICAgICAgICAg
ICBlbHNlCi0gICAgICAgICAgICAgICAgcmV0ID0gUVZhcmlhbnQodmFsdWUudG9Cb29sZWFuKGV4
ZWMpKTsKKyAgICBjYXNlIFFNZXRhVHlwZTo6Qm9vbDoKKyAgICAgICAgaWYgKHR5cGUgPT0gT2Jq
ZWN0ICYmIG9iamVjdC0+aW5oZXJpdHMoJkJvb2xlYW5PYmplY3Q6OmluZm8pKQorICAgICAgICAg
ICAgcmV0ID0gUVZhcmlhbnQoYXNCb29sZWFuT2JqZWN0KHZhbHVlKS0+aW50ZXJuYWxWYWx1ZSgp
LnRvQm9vbGVhbihleGVjKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJldCA9IFFWYXJp
YW50KHZhbHVlLnRvQm9vbGVhbihleGVjKSk7CisgICAgICAgIGlmICh0eXBlID09IEJvb2xlYW4p
CisgICAgICAgICAgICBkaXN0ID0gMDsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZGlzdCA9
IDEwOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgUU1ldGFUeXBlOjpJbnQ6CisgICAgY2Fz
ZSBRTWV0YVR5cGU6OlVJbnQ6CisgICAgY2FzZSBRTWV0YVR5cGU6Okxvbmc6CisgICAgY2FzZSBR
TWV0YVR5cGU6OlVMb25nOgorICAgIGNhc2UgUU1ldGFUeXBlOjpMb25nTG9uZzoKKyAgICBjYXNl
IFFNZXRhVHlwZTo6VUxvbmdMb25nOgorICAgIGNhc2UgUU1ldGFUeXBlOjpTaG9ydDoKKyAgICBj
YXNlIFFNZXRhVHlwZTo6VVNob3J0OgorICAgIGNhc2UgUU1ldGFUeXBlOjpGbG9hdDoKKyAgICBj
YXNlIFFNZXRhVHlwZTo6RG91YmxlOgorICAgICAgICByZXQgPSBRVmFyaWFudCh2YWx1ZS50b051
bWJlcihleGVjKSk7CisgICAgICAgIHJldC5jb252ZXJ0KChRVmFyaWFudDo6VHlwZSloaW50KTsK
KyAgICAgICAgaWYgKHR5cGUgPT0gTnVtYmVyKSB7CisgICAgICAgICAgICBzd2l0Y2ggKGhpbnQp
IHsKKyAgICAgICAgICAgIGNhc2UgUU1ldGFUeXBlOjpEb3VibGU6CisgICAgICAgICAgICAgICAg
ZGlzdCA9IDA7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFFNZXRh
VHlwZTo6RmxvYXQ6CisgICAgICAgICAgICAgICAgZGlzdCA9IDE7CisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICBjYXNlIFFNZXRhVHlwZTo6TG9uZ0xvbmc6CisgICAgICAgICAg
ICBjYXNlIFFNZXRhVHlwZTo6VUxvbmdMb25nOgorICAgICAgICAgICAgICAgIGRpc3QgPSAyOwor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBRTWV0YVR5cGU6Okxvbmc6
CisgICAgICAgICAgICBjYXNlIFFNZXRhVHlwZTo6VUxvbmc6CisgICAgICAgICAgICAgICAgZGlz
dCA9IDM7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFFNZXRhVHlw
ZTo6SW50OgorICAgICAgICAgICAgY2FzZSBRTWV0YVR5cGU6OlVJbnQ6CisgICAgICAgICAgICAg
ICAgZGlzdCA9IDQ7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFFN
ZXRhVHlwZTo6U2hvcnQ6CisgICAgICAgICAgICBjYXNlIFFNZXRhVHlwZTo6VVNob3J0OgorICAg
ICAgICAgICAgICAgIGRpc3QgPSA1OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBkaXN0ID0gMTA7CisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBkaXN0
ID0gMTA7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFFNZXRhVHlwZTo6
UUNoYXI6CisgICAgICAgIGlmICh0eXBlID09IE51bWJlciB8fCB0eXBlID09IEJvb2xlYW4pIHsK
KyAgICAgICAgICAgIHJldCA9IFFWYXJpYW50KFFDaGFyKCh1c2hvcnQpdmFsdWUudG9OdW1iZXIo
ZXhlYykpKTsKICAgICAgICAgICAgIGlmICh0eXBlID09IEJvb2xlYW4pCisgICAgICAgICAgICAg
ICAgZGlzdCA9IDM7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgZGlzdCA9IDY7
CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBVU3RyaW5nIHN0ciA9IHZhbHVlLnRvU3Ry
aW5nKGV4ZWMpOworICAgICAgICAgICAgcmV0ID0gUVZhcmlhbnQoUUNoYXIoc3RyLnNpemUoKSA/
ICooY29uc3QgdXNob3J0KilzdHIucmVwKCktPmNoYXJhY3RlcnMoKSA6IDApKTsKKyAgICAgICAg
ICAgIGlmICh0eXBlID09IFN0cmluZykKKyAgICAgICAgICAgICAgICBkaXN0ID0gMzsKKyAgICAg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBkaXN0ID0gMTA7CisgICAgICAgIH0KKyAgICAg
ICAgYnJlYWs7CisKKyAgICBjYXNlIFFNZXRhVHlwZTo6UVN0cmluZzogeworICAgICAgICBpZiAo
dmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkgeworICAgICAgICAgICAgaWYgKGRpc3RhbmNlKQor
ICAgICAgICAgICAgICAgICpkaXN0YW5jZSA9IDE7CisgICAgICAgICAgICByZXR1cm4gUVN0cmlu
ZygpOworICAgICAgICB9CisgICAgICAgIHsKKyAgICAgICAgICAgIFVTdHJpbmcgdXN0cmluZyA9
IHZhbHVlLnRvU3RyaW5nKGV4ZWMpOworICAgICAgICAgICAgcmV0ID0gUVZhcmlhbnQoUVN0cmlu
ZygoY29uc3QgUUNoYXIqKXVzdHJpbmcucmVwKCktPmNoYXJhY3RlcnMoKSwgdXN0cmluZy5zaXpl
KCkpKTsKKyAgICAgICAgICAgIGlmICh0eXBlID09IFN0cmluZykKICAgICAgICAgICAgICAgICBk
aXN0ID0gMDsKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBkaXN0ID0gMTA7Ci0g
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICB9CiAKLSAg
ICAgICAgY2FzZSBRTWV0YVR5cGU6OkludDoKLSAgICAgICAgY2FzZSBRTWV0YVR5cGU6OlVJbnQ6
Ci0gICAgICAgIGNhc2UgUU1ldGFUeXBlOjpMb25nOgotICAgICAgICBjYXNlIFFNZXRhVHlwZTo6
VUxvbmc6Ci0gICAgICAgIGNhc2UgUU1ldGFUeXBlOjpMb25nTG9uZzoKLSAgICAgICAgY2FzZSBR
TWV0YVR5cGU6OlVMb25nTG9uZzoKLSAgICAgICAgY2FzZSBRTWV0YVR5cGU6OlNob3J0OgotICAg
ICAgICBjYXNlIFFNZXRhVHlwZTo6VVNob3J0OgotICAgICAgICBjYXNlIFFNZXRhVHlwZTo6Rmxv
YXQ6Ci0gICAgICAgIGNhc2UgUU1ldGFUeXBlOjpEb3VibGU6Ci0gICAgICAgICAgICByZXQgPSBR
VmFyaWFudCh2YWx1ZS50b051bWJlcihleGVjKSk7Ci0gICAgICAgICAgICByZXQuY29udmVydCgo
UVZhcmlhbnQ6OlR5cGUpaGludCk7Ci0gICAgICAgICAgICBpZiAodHlwZSA9PSBOdW1iZXIpIHsK
LSAgICAgICAgICAgICAgICBzd2l0Y2ggKGhpbnQpIHsKLSAgICAgICAgICAgICAgICBjYXNlIFFN
ZXRhVHlwZTo6RG91YmxlOgotICAgICAgICAgICAgICAgICAgICBkaXN0ID0gMDsKLSAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBRTWV0YVR5cGU6OkZsb2F0
OgotICAgICAgICAgICAgICAgICAgICBkaXN0ID0gMTsKLSAgICAgICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBRTWV0YVR5cGU6OkxvbmdMb25nOgotICAgICAgICAg
ICAgICAgIGNhc2UgUU1ldGFUeXBlOjpVTG9uZ0xvbmc6Ci0gICAgICAgICAgICAgICAgICAgIGRp
c3QgPSAyOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNl
IFFNZXRhVHlwZTo6TG9uZzoKLSAgICAgICAgICAgICAgICBjYXNlIFFNZXRhVHlwZTo6VUxvbmc6
Ci0gICAgICAgICAgICAgICAgICAgIGRpc3QgPSAzOwotICAgICAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgICAgICBjYXNlIFFNZXRhVHlwZTo6SW50OgotICAgICAgICAgICAgICAg
IGNhc2UgUU1ldGFUeXBlOjpVSW50OgotICAgICAgICAgICAgICAgICAgICBkaXN0ID0gNDsKLSAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBRTWV0YVR5cGU6
OlNob3J0OgotICAgICAgICAgICAgICAgIGNhc2UgUU1ldGFUeXBlOjpVU2hvcnQ6Ci0gICAgICAg
ICAgICAgICAgICAgIGRpc3QgPSA1OwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAg
ICAgICAgICAgICAgZGlzdCA9IDEwOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICBj
YXNlIFFNZXRhVHlwZTo6UVZhcmlhbnRNYXA6CisgICAgICAgIGlmICh0eXBlID09IE9iamVjdCB8
fCB0eXBlID09IEFycmF5IHx8IHR5cGUgPT0gUlRBcnJheSkgeworICAgICAgICAgICAgLy8gRW51
bWVyYXRlIHRoZSBjb250ZW50cyBvZiB0aGUgb2JqZWN0CisgICAgICAgICAgICBQcm9wZXJ0eU5h
bWVBcnJheSBwcm9wZXJ0aWVzKGV4ZWMpOworICAgICAgICAgICAgb2JqZWN0LT5nZXRQcm9wZXJ0
eU5hbWVzKGV4ZWMsIHByb3BlcnRpZXMpOworICAgICAgICAgICAgUHJvcGVydHlOYW1lQXJyYXk6
OmNvbnN0X2l0ZXJhdG9yIGl0ID0gcHJvcGVydGllcy5iZWdpbigpOworCisgICAgICAgICAgICBR
VmFyaWFudE1hcCByZXN1bHQ7CisgICAgICAgICAgICBpbnQgb2JqZGlzdCA9IDA7CisgICAgICAg
ICAgICB3aGlsZSAoaXQgIT0gcHJvcGVydGllcy5lbmQoKSkgeworICAgICAgICAgICAgICAgIGlm
IChvYmplY3QtPnByb3BlcnR5SXNFbnVtZXJhYmxlKGV4ZWMsICppdCkpIHsKKyAgICAgICAgICAg
ICAgICAgICAgSlNWYWx1ZSB2YWwgPSBvYmplY3QtPmdldChleGVjLCAqaXQpOworICAgICAgICAg
ICAgICAgICAgICBRVmFyaWFudCB2ID0gY29udmVydFZhbHVlVG9RVmFyaWFudChleGVjLCB2YWws
IFFNZXRhVHlwZTo6Vm9pZCwgJm9iamRpc3QsIHZpc2l0ZWRPYmplY3RzKTsKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKG9iamRpc3QgPj0gMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgVVN0
cmluZyB1c3RyaW5nID0gKCppdCkudXN0cmluZygpOworICAgICAgICAgICAgICAgICAgICAgICAg
UVN0cmluZyBpZCA9IFFTdHJpbmcoKGNvbnN0IFFDaGFyKil1c3RyaW5nLnJlcCgpLT5jaGFyYWN0
ZXJzKCksIHVzdHJpbmcuc2l6ZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5p
bnNlcnQoaWQsIHYpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICsraXQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBkaXN0ID0g
MTsKKyAgICAgICAgICAgIHJldCA9IFFWYXJpYW50KHJlc3VsdCk7CisgICAgICAgIH0KKyAgICAg
ICAgYnJlYWs7CisKKyAgICBjYXNlIFFNZXRhVHlwZTo6UVZhcmlhbnRMaXN0OgorICAgICAgICBp
ZiAodHlwZSA9PSBSVEFycmF5KSB7CisgICAgICAgICAgICBSdW50aW1lQXJyYXkqIHJ0YXJyYXkg
PSBzdGF0aWNfY2FzdDxSdW50aW1lQXJyYXkqPihvYmplY3QpOworCisgICAgICAgICAgICBRVmFy
aWFudExpc3QgcmVzdWx0OworICAgICAgICAgICAgaW50IGxlbiA9IHJ0YXJyYXktPmdldExlbmd0
aCgpOworICAgICAgICAgICAgaW50IG9iamRpc3QgPSAwOworICAgICAgICAgICAgcUNvbnZEZWJ1
ZygpIDw8ICJjb252ZXJ0aW5nIGEgIiA8PCBsZW4gPDwgIiBsZW5ndGggQXJyYXkiOworICAgICAg
ICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW47ICsraSkgeworICAgICAgICAgICAgICAgIEpT
VmFsdWUgdmFsID0gcnRhcnJheS0+Z2V0Q29uY3JldGVBcnJheSgpLT52YWx1ZUF0KGV4ZWMsIGkp
OworICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoY29udmVydFZhbHVlVG9RVmFyaWFudChl
eGVjLCB2YWwsIFFNZXRhVHlwZTo6Vm9pZCwgJm9iamRpc3QsIHZpc2l0ZWRPYmplY3RzKSk7Cisg
ICAgICAgICAgICAgICAgaWYgKG9iamRpc3QgPT0gLTEpIHsKKyAgICAgICAgICAgICAgICAgICAg
cUNvbnZEZWJ1ZygpIDw8ICJGYWlsZWQgY29udmVydGluZyBlbGVtZW50IGF0IGluZGV4ICIgPDwg
aTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7IC8vIEZhaWxlZCBjb252ZXJ0aW5nIGEgbGlz
dCBlbnRyeSwgc28gZmFpbCB0aGUgYXJyYXkKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKG9iamRpc3QgIT0gLTEp
IHsKKyAgICAgICAgICAgICAgICBkaXN0ID0gNTsKKyAgICAgICAgICAgICAgICByZXQgPSBRVmFy
aWFudChyZXN1bHQpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT0g
QXJyYXkpIHsKKyAgICAgICAgICAgIEpTQXJyYXkqIGFycmF5ID0gc3RhdGljX2Nhc3Q8SlNBcnJh
eSo+KG9iamVjdCk7CisKKyAgICAgICAgICAgIFFWYXJpYW50TGlzdCByZXN1bHQ7CisgICAgICAg
ICAgICBpbnQgbGVuID0gYXJyYXktPmxlbmd0aCgpOworICAgICAgICAgICAgaW50IG9iamRpc3Qg
PSAwOworICAgICAgICAgICAgcUNvbnZEZWJ1ZygpIDw8ICJjb252ZXJ0aW5nIGEgIiA8PCBsZW4g
PDwgIiBsZW5ndGggQXJyYXkiOworICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW47
ICsraSkgeworICAgICAgICAgICAgICAgIEpTVmFsdWUgdmFsID0gYXJyYXktPmdldChleGVjLCBp
KTsKKyAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKGNvbnZlcnRWYWx1ZVRvUVZhcmlhbnQo
ZXhlYywgdmFsLCBRTWV0YVR5cGU6OlZvaWQsICZvYmpkaXN0LCB2aXNpdGVkT2JqZWN0cykpOwor
ICAgICAgICAgICAgICAgIGlmIChvYmpkaXN0ID09IC0xKSB7CisgICAgICAgICAgICAgICAgICAg
IHFDb252RGVidWcoKSA8PCAiRmFpbGVkIGNvbnZlcnRpbmcgZWxlbWVudCBhdCBpbmRleCAiIDw8
IGk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOyAvLyBGYWlsZWQgY29udmVydGluZyBhIGxp
c3QgZW50cnksIHNvIGZhaWwgdGhlIGFycmF5CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgfQorICAgICAgICAgICAgaWYgKG9iamRpc3QgIT0gLTEpIHsKKyAgICAgICAgICAgICAgICBk
aXN0ID0gNTsKKyAgICAgICAgICAgICAgICByZXQgPSBRVmFyaWFudChyZXN1bHQpOworICAgICAg
ICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gTWFrZSBhIHNpbmdsZSBs
ZW5ndGggYXJyYXkKKyAgICAgICAgICAgIGludCBvYmpkaXN0OworICAgICAgICAgICAgcUNvbnZE
ZWJ1ZygpIDw8ICJtYWtpbmcgYSBzaW5nbGUgbGVuZ3RoIHZhcmlhbnRsaXN0IjsKKyAgICAgICAg
ICAgIFFWYXJpYW50IHZhciA9IGNvbnZlcnRWYWx1ZVRvUVZhcmlhbnQoZXhlYywgdmFsdWUsIFFN
ZXRhVHlwZTo6Vm9pZCwgJm9iamRpc3QsIHZpc2l0ZWRPYmplY3RzKTsKKyAgICAgICAgICAgIGlm
IChvYmpkaXN0ICE9IC0xKSB7CisgICAgICAgICAgICAgICAgUVZhcmlhbnRMaXN0IHJlc3VsdDsK
KyAgICAgICAgICAgICAgICByZXN1bHQgPDwgdmFyOworICAgICAgICAgICAgICAgIHJldCA9IFFW
YXJpYW50KHJlc3VsdCk7CiAgICAgICAgICAgICAgICAgZGlzdCA9IDEwOworICAgICAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgICAgICBxQ29udkRlYnVnKCkgPDwgImZhaWxlZCBtYWtpbmcg
c2luZ2xlIGxlbmd0aCB2YXJsaXN0IjsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFr
OworICAgICAgICB9CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBRTWV0YVR5cGU6OlFTdHJp
bmdMaXN0OiB7CisgICAgICAgIGlmICh0eXBlID09IFJUQXJyYXkpIHsKKyAgICAgICAgICAgIFJ1
bnRpbWVBcnJheSogcnRhcnJheSA9IHN0YXRpY19jYXN0PFJ1bnRpbWVBcnJheSo+KG9iamVjdCk7
CisKKyAgICAgICAgICAgIFFTdHJpbmdMaXN0IHJlc3VsdDsKKyAgICAgICAgICAgIGludCBsZW4g
PSBydGFycmF5LT5nZXRMZW5ndGgoKTsKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
bGVuOyArK2kpIHsKKyAgICAgICAgICAgICAgICBKU1ZhbHVlIHZhbCA9IHJ0YXJyYXktPmdldENv
bmNyZXRlQXJyYXkoKS0+dmFsdWVBdChleGVjLCBpKTsKKyAgICAgICAgICAgICAgICBVU3RyaW5n
IHVzdHJpbmcgPSB2YWwudG9TdHJpbmcoZXhlYyk7CisgICAgICAgICAgICAgICAgUVN0cmluZyBx
c3RyaW5nID0gUVN0cmluZygoY29uc3QgUUNoYXIqKXVzdHJpbmcucmVwKCktPmNoYXJhY3RlcnMo
KSwgdXN0cmluZy5zaXplKCkpOwogCi0gICAgICAgIGNhc2UgUU1ldGFUeXBlOjpRQ2hhcjoKLSAg
ICAgICAgICAgIGlmICh0eXBlID09IE51bWJlciB8fCB0eXBlID09IEJvb2xlYW4pIHsKLSAgICAg
ICAgICAgICAgICByZXQgPSBRVmFyaWFudChRQ2hhcigodXNob3J0KXZhbHVlLnRvTnVtYmVyKGV4
ZWMpKSk7Ci0gICAgICAgICAgICAgICAgaWYgKHR5cGUgPT0gQm9vbGVhbikKKyAgICAgICAgICAg
ICAgICByZXN1bHQuYXBwZW5kKHFzdHJpbmcpOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
ZGlzdCA9IDU7CisgICAgICAgICAgICByZXQgPSBRVmFyaWFudChyZXN1bHQpOworICAgICAgICB9
IGVsc2UgaWYgKHR5cGUgPT0gQXJyYXkpIHsKKyAgICAgICAgICAgIEpTQXJyYXkqIGFycmF5ID0g
c3RhdGljX2Nhc3Q8SlNBcnJheSo+KG9iamVjdCk7CisKKyAgICAgICAgICAgIFFTdHJpbmdMaXN0
IHJlc3VsdDsKKyAgICAgICAgICAgIGludCBsZW4gPSBhcnJheS0+bGVuZ3RoKCk7CisgICAgICAg
ICAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbjsgKytpKSB7CisgICAgICAgICAgICAgICAgSlNW
YWx1ZSB2YWwgPSBhcnJheS0+Z2V0KGV4ZWMsIGkpOworICAgICAgICAgICAgICAgIFVTdHJpbmcg
dXN0cmluZyA9IHZhbC50b1N0cmluZyhleGVjKTsKKyAgICAgICAgICAgICAgICBRU3RyaW5nIHFz
dHJpbmcgPSBRU3RyaW5nKChjb25zdCBRQ2hhciopdXN0cmluZy5yZXAoKS0+Y2hhcmFjdGVycygp
LCB1c3RyaW5nLnNpemUoKSk7CisKKyAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKHFzdHJp
bmcpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZGlzdCA9IDU7CisgICAgICAgICAgICBy
ZXQgPSBRVmFyaWFudChyZXN1bHQpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8g
TWFrZSBhIHNpbmdsZSBsZW5ndGggYXJyYXkKKyAgICAgICAgICAgIFVTdHJpbmcgdXN0cmluZyA9
IHZhbHVlLnRvU3RyaW5nKGV4ZWMpOworICAgICAgICAgICAgUVN0cmluZyBxc3RyaW5nID0gUVN0
cmluZygoY29uc3QgUUNoYXIqKXVzdHJpbmcucmVwKCktPmNoYXJhY3RlcnMoKSwgdXN0cmluZy5z
aXplKCkpOworICAgICAgICAgICAgUVN0cmluZ0xpc3QgcmVzdWx0OworICAgICAgICAgICAgcmVz
dWx0LmFwcGVuZChxc3RyaW5nKTsKKyAgICAgICAgICAgIHJldCA9IFFWYXJpYW50KHJlc3VsdCk7
CisgICAgICAgICAgICBkaXN0ID0gMTA7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAg
fQorCisgICAgY2FzZSBRTWV0YVR5cGU6OlFCeXRlQXJyYXk6IHsKKyAgICAgICAgaWYgKHR5cGUg
PT0gSlNCeXRlQXJyYXkpIHsKKyAgICAgICAgICAgIFdURjo6Qnl0ZUFycmF5KiBhcnIgPSBhc0J5
dGVBcnJheSh2YWx1ZSktPnN0b3JhZ2UoKTsKKyAgICAgICAgICAgIHJldCA9IFFWYXJpYW50KFFC
eXRlQXJyYXkocmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4oYXJyLT5kYXRhKCkpLCBhcnIt
Pmxlbmd0aCgpKSk7CisgICAgICAgICAgICBkaXN0ID0gMDsKKyAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgIFVTdHJpbmcgdXN0cmluZyA9IHZhbHVlLnRvU3RyaW5nKGV4ZWMpOworICAgICAg
ICAgICAgcmV0ID0gUVZhcmlhbnQoUVN0cmluZygoY29uc3QgUUNoYXIqKXVzdHJpbmcucmVwKCkt
PmNoYXJhY3RlcnMoKSwgdXN0cmluZy5zaXplKCkpLnRvTGF0aW4xKCkpOworICAgICAgICAgICAg
aWYgKHR5cGUgPT0gU3RyaW5nKQorICAgICAgICAgICAgICAgIGRpc3QgPSA1OworICAgICAgICAg
ICAgZWxzZQorICAgICAgICAgICAgICAgIGRpc3QgPSAxMDsKKyAgICAgICAgfQorICAgICAgICBi
cmVhazsKKyAgICB9CisKKyAgICBjYXNlIFFNZXRhVHlwZTo6UURhdGVUaW1lOgorICAgIGNhc2Ug
UU1ldGFUeXBlOjpRRGF0ZToKKyAgICBjYXNlIFFNZXRhVHlwZTo6UVRpbWU6CisgICAgICAgIGlm
ICh0eXBlID09IERhdGUpIHsKKyAgICAgICAgICAgIERhdGVJbnN0YW5jZSogZGF0ZSA9IHN0YXRp
Y19jYXN0PERhdGVJbnN0YW5jZSo+KG9iamVjdCk7CisgICAgICAgICAgICBHcmVnb3JpYW5EYXRl
VGltZSBnZHQ7CisgICAgICAgICAgICBtc1RvR3JlZ29yaWFuRGF0ZVRpbWUoZXhlYywgZGF0ZS0+
aW50ZXJuYWxOdW1iZXIoKSwgdHJ1ZSwgZ2R0KTsKKyAgICAgICAgICAgIGlmIChoaW50ID09IFFN
ZXRhVHlwZTo6UURhdGVUaW1lKSB7CisgICAgICAgICAgICAgICAgcmV0ID0gUURhdGVUaW1lKFFE
YXRlKGdkdC55ZWFyICsgMTkwMCwgZ2R0Lm1vbnRoICsgMSwgZ2R0Lm1vbnRoRGF5KSwgUVRpbWUo
Z2R0LmhvdXIsIGdkdC5taW51dGUsIGdkdC5zZWNvbmQpLCBRdDo6VVRDKTsKKyAgICAgICAgICAg
ICAgICBkaXN0ID0gMDsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoaGludCA9PSBRTWV0YVR5cGU6
OlFEYXRlKSB7CisgICAgICAgICAgICAgICAgcmV0ID0gUURhdGUoZ2R0LnllYXIgKyAxOTAwLCBn
ZHQubW9udGggKyAxLCBnZHQubW9udGhEYXkpOworICAgICAgICAgICAgICAgIGRpc3QgPSAxOwor
ICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICByZXQgPSBRVGltZShnZHQuaG91
ciArIDE5MDAsIGdkdC5taW51dGUsIGdkdC5zZWNvbmQpOworICAgICAgICAgICAgICAgIGRpc3Qg
PSAyOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT0gTnVtYmVyKSB7
CisgICAgICAgICAgICBkb3VibGUgYiA9IHZhbHVlLnRvTnVtYmVyKGV4ZWMpOworICAgICAgICAg
ICAgR3JlZ29yaWFuRGF0ZVRpbWUgZ2R0OworICAgICAgICAgICAgbXNUb0dyZWdvcmlhbkRhdGVU
aW1lKGV4ZWMsIGIsIHRydWUsIGdkdCk7CisgICAgICAgICAgICBpZiAoaGludCA9PSBRTWV0YVR5
cGU6OlFEYXRlVGltZSkgeworICAgICAgICAgICAgICAgIHJldCA9IFFEYXRlVGltZShRRGF0ZShn
ZHQueWVhciArIDE5MDAsIGdkdC5tb250aCArIDEsIGdkdC5tb250aERheSksIFFUaW1lKGdkdC5o
b3VyLCBnZHQubWludXRlLCBnZHQuc2Vjb25kKSwgUXQ6OlVUQyk7CisgICAgICAgICAgICAgICAg
ZGlzdCA9IDY7CisgICAgICAgICAgICB9IGVsc2UgaWYgKGhpbnQgPT0gUU1ldGFUeXBlOjpRRGF0
ZSkgeworICAgICAgICAgICAgICAgIHJldCA9IFFEYXRlKGdkdC55ZWFyICsgMTkwMCwgZ2R0Lm1v
bnRoICsgMSwgZ2R0Lm1vbnRoRGF5KTsKKyAgICAgICAgICAgICAgICBkaXN0ID0gODsKKyAgICAg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgcmV0ID0gUVRpbWUoZ2R0LmhvdXIsIGdk
dC5taW51dGUsIGdkdC5zZWNvbmQpOworICAgICAgICAgICAgICAgIGRpc3QgPSAxMDsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmICh0eXBlID09IFN0cmluZykgeworICAgICAgICAg
ICAgVVN0cmluZyB1c3RyaW5nID0gdmFsdWUudG9TdHJpbmcoZXhlYyk7CisgICAgICAgICAgICBR
U3RyaW5nIHFzdHJpbmcgPSBRU3RyaW5nKChjb25zdCBRQ2hhciopdXN0cmluZy5yZXAoKS0+Y2hh
cmFjdGVycygpLCB1c3RyaW5nLnNpemUoKSk7CisKKyAgICAgICAgICAgIGlmIChoaW50ID09IFFN
ZXRhVHlwZTo6UURhdGVUaW1lKSB7CisgICAgICAgICAgICAgICAgUURhdGVUaW1lIGR0ID0gUURh
dGVUaW1lOjpmcm9tU3RyaW5nKHFzdHJpbmcsIFF0OjpJU09EYXRlKTsKKyAgICAgICAgICAgICAg
ICBpZiAoIWR0LmlzVmFsaWQoKSkKKyAgICAgICAgICAgICAgICAgICAgZHQgPSBRRGF0ZVRpbWU6
OmZyb21TdHJpbmcocXN0cmluZywgUXQ6OlRleHREYXRlKTsKKyAgICAgICAgICAgICAgICBpZiAo
IWR0LmlzVmFsaWQoKSkKKyAgICAgICAgICAgICAgICAgICAgZHQgPSBRRGF0ZVRpbWU6OmZyb21T
dHJpbmcocXN0cmluZywgUXQ6OlN5c3RlbUxvY2FsZURhdGUpOworICAgICAgICAgICAgICAgIGlm
ICghZHQuaXNWYWxpZCgpKQorICAgICAgICAgICAgICAgICAgICBkdCA9IFFEYXRlVGltZTo6ZnJv
bVN0cmluZyhxc3RyaW5nLCBRdDo6TG9jYWxlRGF0ZSk7CisgICAgICAgICAgICAgICAgaWYgKGR0
LmlzVmFsaWQoKSkgeworICAgICAgICAgICAgICAgICAgICByZXQgPSBkdDsKKyAgICAgICAgICAg
ICAgICAgICAgZGlzdCA9IDI7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNl
IGlmIChoaW50ID09IFFNZXRhVHlwZTo6UURhdGUpIHsKKyAgICAgICAgICAgICAgICBRRGF0ZSBk
dCA9IFFEYXRlOjpmcm9tU3RyaW5nKHFzdHJpbmcsIFF0OjpJU09EYXRlKTsKKyAgICAgICAgICAg
ICAgICBpZiAoIWR0LmlzVmFsaWQoKSkKKyAgICAgICAgICAgICAgICAgICAgZHQgPSBRRGF0ZTo6
ZnJvbVN0cmluZyhxc3RyaW5nLCBRdDo6VGV4dERhdGUpOworICAgICAgICAgICAgICAgIGlmICgh
ZHQuaXNWYWxpZCgpKQorICAgICAgICAgICAgICAgICAgICBkdCA9IFFEYXRlOjpmcm9tU3RyaW5n
KHFzdHJpbmcsIFF0OjpTeXN0ZW1Mb2NhbGVEYXRlKTsKKyAgICAgICAgICAgICAgICBpZiAoIWR0
LmlzVmFsaWQoKSkKKyAgICAgICAgICAgICAgICAgICAgZHQgPSBRRGF0ZTo6ZnJvbVN0cmluZyhx
c3RyaW5nLCBRdDo6TG9jYWxlRGF0ZSk7CisgICAgICAgICAgICAgICAgaWYgKGR0LmlzVmFsaWQo
KSkgeworICAgICAgICAgICAgICAgICAgICByZXQgPSBkdDsKICAgICAgICAgICAgICAgICAgICAg
ZGlzdCA9IDM7Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBkaXN0
ID0gNjsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAg
ICAgICAgIFVTdHJpbmcgc3RyID0gdmFsdWUudG9TdHJpbmcoZXhlYyk7Ci0gICAgICAgICAgICAg
ICAgcmV0ID0gUVZhcmlhbnQoUUNoYXIoc3RyLnNpemUoKSA/ICooY29uc3QgdXNob3J0KilzdHIu
cmVwKCktPmNoYXJhY3RlcnMoKSA6IDApKTsKLSAgICAgICAgICAgICAgICBpZiAodHlwZSA9PSBT
dHJpbmcpCisgICAgICAgICAgICAgICAgUVRpbWUgZHQgPSBRVGltZTo6ZnJvbVN0cmluZyhxc3Ry
aW5nLCBRdDo6SVNPRGF0ZSk7CisgICAgICAgICAgICAgICAgaWYgKCFkdC5pc1ZhbGlkKCkpCisg
ICAgICAgICAgICAgICAgICAgIGR0ID0gUVRpbWU6OmZyb21TdHJpbmcocXN0cmluZywgUXQ6OlRl
eHREYXRlKTsKKyAgICAgICAgICAgICAgICBpZiAoIWR0LmlzVmFsaWQoKSkKKyAgICAgICAgICAg
ICAgICAgICAgZHQgPSBRVGltZTo6ZnJvbVN0cmluZyhxc3RyaW5nLCBRdDo6U3lzdGVtTG9jYWxl
RGF0ZSk7CisgICAgICAgICAgICAgICAgaWYgKCFkdC5pc1ZhbGlkKCkpCisgICAgICAgICAgICAg
ICAgICAgIGR0ID0gUVRpbWU6OmZyb21TdHJpbmcocXN0cmluZywgUXQ6OkxvY2FsZURhdGUpOwor
ICAgICAgICAgICAgICAgIGlmIChkdC5pc1ZhbGlkKCkpIHsKKyAgICAgICAgICAgICAgICAgICAg
cmV0ID0gZHQ7CiAgICAgICAgICAgICAgICAgICAgIGRpc3QgPSAzOwotICAgICAgICAgICAgICAg
IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgZGlzdCA9IDEwOworICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGJy
ZWFrOwogCi0gICAgICAgIGNhc2UgUU1ldGFUeXBlOjpRU3RyaW5nOiB7Ci0gICAgICAgICAgICBp
ZiAodmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkgewotICAgICAgICAgICAgICAgIGlmIChkaXN0
YW5jZSkKLSAgICAgICAgICAgICAgICAgICAgKmRpc3RhbmNlID0gMTsKLSAgICAgICAgICAgICAg
ICByZXR1cm4gUVN0cmluZygpOworICAgIGNhc2UgUU1ldGFUeXBlOjpRUmVnRXhwOgorICAgICAg
ICBpZiAodHlwZSA9PSBSZWdFeHApIHsKKy8qCisgIFJlZ0V4cE9iamVjdCAqcmUgPSBzdGF0aWNf
Y2FzdDxSZWdFeHBPYmplY3QqPihvYmplY3QpOworKi8KKyAgICAgICAgICAgIC8vIEF0dGVtcHQg
dG8gY29udmVydC4uIGEgYml0IHJpc2t5CisgICAgICAgICAgICBVU3RyaW5nIHVzdHJpbmcgPSB2
YWx1ZS50b1N0cmluZyhleGVjKTsKKyAgICAgICAgICAgIFFTdHJpbmcgcXN0cmluZyA9IFFTdHJp
bmcoKGNvbnN0IFFDaGFyKil1c3RyaW5nLnJlcCgpLT5jaGFyYWN0ZXJzKCksIHVzdHJpbmcuc2l6
ZSgpKTsKKworICAgICAgICAgICAgLy8gdGhpcyBpcyBvZiB0aGUgZm9ybSAnL3h4eHh4eC9pJwor
ICAgICAgICAgICAgaW50IGZpcnN0U2xhc2ggPSBxc3RyaW5nLmluZGV4T2YoUUxhdGluMUNoYXIo
Jy8nKSk7CisgICAgICAgICAgICBpbnQgbGFzdFNsYXNoID0gcXN0cmluZy5sYXN0SW5kZXhPZihR
TGF0aW4xQ2hhcignLycpKTsKKyAgICAgICAgICAgIGlmIChmaXJzdFNsYXNoID49MCAmJiBsYXN0
U2xhc2ggPiBmaXJzdFNsYXNoKSB7CisgICAgICAgICAgICAgICAgUVJlZ0V4cCByZWFsUmU7CisK
KyAgICAgICAgICAgICAgICByZWFsUmUuc2V0UGF0dGVybihxc3RyaW5nLm1pZChmaXJzdFNsYXNo
ICsgMSwgbGFzdFNsYXNoIC0gZmlyc3RTbGFzaCAtIDEpKTsKKworICAgICAgICAgICAgICAgIGlm
IChxc3RyaW5nLm1pZChsYXN0U2xhc2ggKyAxKS5jb250YWlucyhRTGF0aW4xQ2hhcignaScpKSkK
KyAgICAgICAgICAgICAgICAgICAgcmVhbFJlLnNldENhc2VTZW5zaXRpdml0eShRdDo6Q2FzZUlu
c2Vuc2l0aXZlKTsKKworICAgICAgICAgICAgICAgIHJldCA9IHFWYXJpYW50RnJvbVZhbHVlKHJl
YWxSZSk7CisgICAgICAgICAgICAgICAgZGlzdCA9IDA7CiAgICAgICAgICAgICB9IGVsc2Ugewot
ICAgICAgICAgICAgICAgIFVTdHJpbmcgdXN0cmluZyA9IHZhbHVlLnRvU3RyaW5nKGV4ZWMpOwot
ICAgICAgICAgICAgICAgIHJldCA9IFFWYXJpYW50KFFTdHJpbmcoKGNvbnN0IFFDaGFyKil1c3Ry
aW5nLnJlcCgpLT5jaGFyYWN0ZXJzKCksIHVzdHJpbmcuc2l6ZSgpKSk7Ci0gICAgICAgICAgICAg
ICAgaWYgKHR5cGUgPT0gU3RyaW5nKQorICAgICAgICAgICAgICAgIHFDb252RGVidWcoKSA8PCAi
Y291bGRuJ3QgcGFyc2UgYSBKUyByZWdleHAiOworICAgICAgICAgICAgfQorICAgICAgICB9IGVs
c2UgaWYgKHR5cGUgPT0gU3RyaW5nKSB7CisgICAgICAgICAgICBVU3RyaW5nIHVzdHJpbmcgPSB2
YWx1ZS50b1N0cmluZyhleGVjKTsKKyAgICAgICAgICAgIFFTdHJpbmcgcXN0cmluZyA9IFFTdHJp
bmcoKGNvbnN0IFFDaGFyKil1c3RyaW5nLnJlcCgpLT5jaGFyYWN0ZXJzKCksIHVzdHJpbmcuc2l6
ZSgpKTsKKworICAgICAgICAgICAgUVJlZ0V4cCByZShxc3RyaW5nKTsKKyAgICAgICAgICAgIGlm
IChyZS5pc1ZhbGlkKCkpIHsKKyAgICAgICAgICAgICAgICByZXQgPSBxVmFyaWFudEZyb21WYWx1
ZShyZSk7CisgICAgICAgICAgICAgICAgZGlzdCA9IDEwOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBRTWV0YVR5cGU6OlFPYmplY3RTdGFyOgor
ICAgICAgICBpZiAodHlwZSA9PSBRT2JqKSB7CisgICAgICAgICAgICBRdEluc3RhbmNlKiBxdGlu
c3QgPSBRdEluc3RhbmNlOjpnZXRJbnN0YW5jZShvYmplY3QpOworICAgICAgICAgICAgaWYgKHF0
aW5zdCkgeworICAgICAgICAgICAgICAgIGlmIChxdGluc3QtPmdldE9iamVjdCgpKSB7CisgICAg
ICAgICAgICAgICAgICAgIHFDb252RGVidWcoKSA8PCAiZm91bmQgaW5zdGFuY2UsIHdpdGggb2Jq
ZWN0OiIgPDwgKHZvaWQqKSBxdGluc3QtPmdldE9iamVjdCgpOworICAgICAgICAgICAgICAgICAg
ICByZXQgPSBxVmFyaWFudEZyb21WYWx1ZShxdGluc3QtPmdldE9iamVjdCgpKTsKKyAgICAgICAg
ICAgICAgICAgICAgcUNvbnZEZWJ1ZygpIDw8IHJldDsKICAgICAgICAgICAgICAgICAgICAgZGlz
dCA9IDA7Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBkaXN0ID0g
MTA7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgcUNvbnZE
ZWJ1ZygpIDw8ICJjYW4ndCBjb252ZXJ0IGRlbGV0ZWQgcW9iamVjdCI7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBxQ29udkRlYnVnKCkg
PDwgIndhc24ndCBhIHF0aW5zdGFuY2UiOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PSBOdWxsKSB7CisgICAgICAgICAgICBRT2Jq
ZWN0KiBudWxsb2JqID0gMDsKKyAgICAgICAgICAgIHJldCA9IHFWYXJpYW50RnJvbVZhbHVlKG51
bGxvYmopOworICAgICAgICAgICAgZGlzdCA9IDA7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICBxQ29udkRlYnVnKCkgPDwgInByZXZpb3VzIHR5cGUgd2FzIG5vdCBhbiBvYmplY3Q6IiA8
PCB0eXBlOwogICAgICAgICB9CisgICAgICAgIGJyZWFrOwogCi0gICAgICAgIGNhc2UgUU1ldGFU
eXBlOjpRVmFyaWFudE1hcDoKLSAgICAgICAgICAgIGlmICh0eXBlID09IE9iamVjdCB8fCB0eXBl
ID09IEFycmF5IHx8IHR5cGUgPT0gUlRBcnJheSkgewotICAgICAgICAgICAgICAgIC8vIEVudW1l
cmF0ZSB0aGUgY29udGVudHMgb2YgdGhlIG9iamVjdAotICAgICAgICAgICAgICAgIFByb3BlcnR5
TmFtZUFycmF5IHByb3BlcnRpZXMoZXhlYyk7Ci0gICAgICAgICAgICAgICAgb2JqZWN0LT5nZXRQ
cm9wZXJ0eU5hbWVzKGV4ZWMsIHByb3BlcnRpZXMpOwotICAgICAgICAgICAgICAgIFByb3BlcnR5
TmFtZUFycmF5Ojpjb25zdF9pdGVyYXRvciBpdCA9IHByb3BlcnRpZXMuYmVnaW4oKTsKLQotICAg
ICAgICAgICAgICAgIFFWYXJpYW50TWFwIHJlc3VsdDsKLSAgICAgICAgICAgICAgICBpbnQgb2Jq
ZGlzdCA9IDA7Ci0gICAgICAgICAgICAgICAgd2hpbGUoaXQgIT0gcHJvcGVydGllcy5lbmQoKSkg
ewotICAgICAgICAgICAgICAgICAgICBpZiAob2JqZWN0LT5wcm9wZXJ0eUlzRW51bWVyYWJsZShl
eGVjLCAqaXQpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBKU1ZhbHVlIHZhbCA9IG9iamVj
dC0+Z2V0KGV4ZWMsICppdCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBRVmFyaWFudCB2ID0g
Y29udmVydFZhbHVlVG9RVmFyaWFudChleGVjLCB2YWwsIFFNZXRhVHlwZTo6Vm9pZCwgJm9iamRp
c3QsIHZpc2l0ZWRPYmplY3RzKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvYmpkaXN0
ID49IDApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBVU3RyaW5nIHVzdHJpbmcgPSAo
Kml0KS51c3RyaW5nKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgUVN0cmluZyBpZCA9
IFFTdHJpbmcoKGNvbnN0IFFDaGFyKil1c3RyaW5nLnJlcCgpLT5jaGFyYWN0ZXJzKCksIHVzdHJp
bmcuc2l6ZSgpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQuaW5zZXJ0KGlk
LCB2KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgICAgICArK2l0OworICAgIGNhc2UgUU1ldGFUeXBlOjpWb2lkU3RhcjoK
KyAgICAgICAgaWYgKHR5cGUgPT0gUU9iaikgeworICAgICAgICAgICAgUXRJbnN0YW5jZSogcXRp
bnN0ID0gUXRJbnN0YW5jZTo6Z2V0SW5zdGFuY2Uob2JqZWN0KTsKKyAgICAgICAgICAgIGlmIChx
dGluc3QpIHsKKyAgICAgICAgICAgICAgICBpZiAocXRpbnN0LT5nZXRPYmplY3QoKSkgeworICAg
ICAgICAgICAgICAgICAgICBxQ29udkRlYnVnKCkgPDwgImZvdW5kIGluc3RhbmNlLCB3aXRoIG9i
amVjdDoiIDw8ICh2b2lkKikgcXRpbnN0LT5nZXRPYmplY3QoKTsKKyAgICAgICAgICAgICAgICAg
ICAgcmV0ID0gcVZhcmlhbnRGcm9tVmFsdWUoKHZvaWQgKilxdGluc3QtPmdldE9iamVjdCgpKTsK
KyAgICAgICAgICAgICAgICAgICAgcUNvbnZEZWJ1ZygpIDw8IHJldDsKKyAgICAgICAgICAgICAg
ICAgICAgZGlzdCA9IDA7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAg
ICAgICAgcUNvbnZEZWJ1ZygpIDw8ICJjYW4ndCBjb252ZXJ0IGRlbGV0ZWQgcW9iamVjdCI7CiAg
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGRpc3QgPSAxOwotICAgICAgICAgICAg
ICAgIHJldCA9IFFWYXJpYW50KHJlc3VsdCk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgICAgIHFDb252RGVidWcoKSA8PCAid2Fzbid0IGEgcXRpbnN0YW5jZSI7CiAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgfSBlbHNlIGlmICh0eXBlID09IE51
bGwpIHsKKyAgICAgICAgICAgIHJldCA9IHFWYXJpYW50RnJvbVZhbHVlKCh2b2lkKikwKTsKKyAg
ICAgICAgICAgIGRpc3QgPSAwOworICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT0gTnVtYmVyKSB7
CisgICAgICAgICAgICAvLyBJIGRvbid0IHRoaW5rIHRoYXQgY29udmVydGluZyBhIGRvdWJsZSB0
byBhIHBvaW50ZXIgaXMgYSB3aXNlCisgICAgICAgICAgICAvLyBtb3ZlLiAgRXhjZXB0IG1heWJl
IDAuCisgICAgICAgICAgICBxQ29udkRlYnVnKCkgPDwgImdvdCBudW1iZXIgZm9yIHZvaWQgKiAt
IG5vdCBjb252ZXJ0aW5nLCBzZWVtcyB1bnNhZmU6IiA8PCB2YWx1ZS50b051bWJlcihleGVjKTsK
KyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHFDb252RGVidWcoKSA8PCAidm9pZCogLSB1
bmhhbmRsZWQgdHlwZSIgPDwgdHlwZTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKIAotICAg
ICAgICBjYXNlIFFNZXRhVHlwZTo6UVZhcmlhbnRMaXN0OgorICAgIGRlZmF1bHQ6CisgICAgICAg
IC8vIE5vbiBjb25zdCB0eXBlIGlkcworICAgICAgICBpZiAoaGludCA9PSAoUU1ldGFUeXBlOjpU
eXBlKSBxTWV0YVR5cGVJZDxRT2JqZWN0TGlzdD4oKSkgewogICAgICAgICAgICAgaWYgKHR5cGUg
PT0gUlRBcnJheSkgewogICAgICAgICAgICAgICAgIFJ1bnRpbWVBcnJheSogcnRhcnJheSA9IHN0
YXRpY19jYXN0PFJ1bnRpbWVBcnJheSo+KG9iamVjdCk7CiAKLSAgICAgICAgICAgICAgICBRVmFy
aWFudExpc3QgcmVzdWx0OworICAgICAgICAgICAgICAgIFFPYmplY3RMaXN0IHJlc3VsdDsKICAg
ICAgICAgICAgICAgICBpbnQgbGVuID0gcnRhcnJheS0+Z2V0TGVuZ3RoKCk7Ci0gICAgICAgICAg
ICAgICAgaW50IG9iamRpc3QgPSAwOwotICAgICAgICAgICAgICAgIHFDb252RGVidWcoKSA8PCAi
Y29udmVydGluZyBhICIgPDwgbGVuIDw8ICIgbGVuZ3RoIEFycmF5IjsKICAgICAgICAgICAgICAg
ICBmb3IgKGludCBpID0gMDsgaSA8IGxlbjsgKytpKSB7CiAgICAgICAgICAgICAgICAgICAgIEpT
VmFsdWUgdmFsID0gcnRhcnJheS0+Z2V0Q29uY3JldGVBcnJheSgpLT52YWx1ZUF0KGV4ZWMsIGkp
OwotICAgICAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKGNvbnZlcnRWYWx1ZVRvUVZhcmlh
bnQoZXhlYywgdmFsLCBRTWV0YVR5cGU6OlZvaWQsICZvYmpkaXN0LCB2aXNpdGVkT2JqZWN0cykp
OwotICAgICAgICAgICAgICAgICAgICBpZiAob2JqZGlzdCA9PSAtMSkgewotICAgICAgICAgICAg
ICAgICAgICAgICAgcUNvbnZEZWJ1ZygpIDw8ICJGYWlsZWQgY29udmVydGluZyBlbGVtZW50IGF0
IGluZGV4ICIgPDwgaTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOyAvLyBGYWlsZWQg
Y29udmVydGluZyBhIGxpc3QgZW50cnksIHNvIGZhaWwgdGhlIGFycmF5Ci0gICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaW50IGl0ZW1kaXN0ID0gLTE7CisgICAgICAg
ICAgICAgICAgICAgIFFWYXJpYW50IGl0ZW0gPSBjb252ZXJ0VmFsdWVUb1FWYXJpYW50KGV4ZWMs
IHZhbCwgUU1ldGFUeXBlOjpRT2JqZWN0U3RhciwgJml0ZW1kaXN0LCB2aXNpdGVkT2JqZWN0cyk7
CisgICAgICAgICAgICAgICAgICAgIGlmIChpdGVtZGlzdCA+PSAwKQorICAgICAgICAgICAgICAg
ICAgICAgICAgcmVzdWx0LmFwcGVuZChpdGVtLnZhbHVlPFFPYmplY3QqPigpKTsKKyAgICAgICAg
ICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmIChvYmpkaXN0ICE9IC0xKSB7CisgICAgICAg
ICAgICAgICAgLy8gSWYgd2UgZGlkbid0IGZhaWwgY29udmVyc2lvbgorICAgICAgICAgICAgICAg
IGlmIChyZXN1bHQuY291bnQoKSA9PSBsZW4pIHsKICAgICAgICAgICAgICAgICAgICAgZGlzdCA9
IDU7Ci0gICAgICAgICAgICAgICAgICAgIHJldCA9IFFWYXJpYW50KHJlc3VsdCk7CisgICAgICAg
ICAgICAgICAgICAgIHJldCA9IFFWYXJpYW50Ojpmcm9tVmFsdWUocmVzdWx0KTsKICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT0gQXJyYXkpIHsKLSAgICAg
ICAgICAgICAgICBKU0FycmF5KiBhcnJheSA9IHN0YXRpY19jYXN0PEpTQXJyYXkqPihvYmplY3Qp
OwotCi0gICAgICAgICAgICAgICAgUVZhcmlhbnRMaXN0IHJlc3VsdDsKKyAgICAgICAgICAgICAg
ICBKU09iamVjdCogb2JqZWN0ID0gdmFsdWUudG9PYmplY3QoZXhlYyk7CisgICAgICAgICAgICAg
ICAgSlNBcnJheSogYXJyYXkgPSBzdGF0aWNfY2FzdDxKU0FycmF5ICo+KG9iamVjdCk7CisgICAg
ICAgICAgICAgICAgUU9iamVjdExpc3QgcmVzdWx0OwogICAgICAgICAgICAgICAgIGludCBsZW4g
PSBhcnJheS0+bGVuZ3RoKCk7Ci0gICAgICAgICAgICAgICAgaW50IG9iamRpc3QgPSAwOwotICAg
ICAgICAgICAgICAgIHFDb252RGVidWcoKSA8PCAiY29udmVydGluZyBhICIgPDwgbGVuIDw8ICIg
bGVuZ3RoIEFycmF5IjsKICAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbjsg
KytpKSB7CiAgICAgICAgICAgICAgICAgICAgIEpTVmFsdWUgdmFsID0gYXJyYXktPmdldChleGVj
LCBpKTsKLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChjb252ZXJ0VmFsdWVUb1FW
YXJpYW50KGV4ZWMsIHZhbCwgUU1ldGFUeXBlOjpWb2lkLCAmb2JqZGlzdCwgdmlzaXRlZE9iamVj
dHMpKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKG9iamRpc3QgPT0gLTEpIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIHFDb252RGVidWcoKSA8PCAiRmFpbGVkIGNvbnZlcnRpbmcgZWxlbWVu
dCBhdCBpbmRleCAiIDw8IGk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsgLy8gRmFp
bGVkIGNvbnZlcnRpbmcgYSBsaXN0IGVudHJ5LCBzbyBmYWlsIHRoZSBhcnJheQotICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGludCBpdGVtZGlzdCA9IC0xOworICAg
ICAgICAgICAgICAgICAgICBRVmFyaWFudCBpdGVtID0gY29udmVydFZhbHVlVG9RVmFyaWFudChl
eGVjLCB2YWwsIFFNZXRhVHlwZTo6UU9iamVjdFN0YXIsICZpdGVtZGlzdCwgdmlzaXRlZE9iamVj
dHMpOworICAgICAgICAgICAgICAgICAgICBpZiAoaXRlbWRpc3QgPj0gMCkKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoaXRlbS52YWx1ZTxRT2JqZWN0Kj4oKSk7CisgICAg
ICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAob2JqZGlzdCAhPSAtMSkgeworICAg
ICAgICAgICAgICAgIC8vIElmIHdlIGRpZG4ndCBmYWlsIGNvbnZlcnNpb24KKyAgICAgICAgICAg
ICAgICBpZiAocmVzdWx0LmNvdW50KCkgPT0gbGVuKSB7CiAgICAgICAgICAgICAgICAgICAgIGRp
c3QgPSA1OwotICAgICAgICAgICAgICAgICAgICByZXQgPSBRVmFyaWFudChyZXN1bHQpOworICAg
ICAgICAgICAgICAgICAgICByZXQgPSBRVmFyaWFudDo6ZnJvbVZhbHVlKHJlc3VsdCk7CiAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAvLyBN
YWtlIGEgc2luZ2xlIGxlbmd0aCBhcnJheQotICAgICAgICAgICAgICAgIGludCBvYmpkaXN0Owot
ICAgICAgICAgICAgICAgIHFDb252RGVidWcoKSA8PCAibWFraW5nIGEgc2luZ2xlIGxlbmd0aCB2
YXJpYW50bGlzdCI7Ci0gICAgICAgICAgICAgICAgUVZhcmlhbnQgdmFyID0gY29udmVydFZhbHVl
VG9RVmFyaWFudChleGVjLCB2YWx1ZSwgUU1ldGFUeXBlOjpWb2lkLCAmb2JqZGlzdCwgdmlzaXRl
ZE9iamVjdHMpOwotICAgICAgICAgICAgICAgIGlmIChvYmpkaXN0ICE9IC0xKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIFFWYXJpYW50TGlzdCByZXN1bHQ7Ci0gICAgICAgICAgICAgICAgICAgIHJl
c3VsdCA8PCB2YXI7Ci0gICAgICAgICAgICAgICAgICAgIHJldCA9IFFWYXJpYW50KHJlc3VsdCk7
CisgICAgICAgICAgICAgICAgUU9iamVjdExpc3QgcmVzdWx0OworICAgICAgICAgICAgICAgIGlu
dCBpdGVtZGlzdCA9IC0xOworICAgICAgICAgICAgICAgIFFWYXJpYW50IGl0ZW0gPSBjb252ZXJ0
VmFsdWVUb1FWYXJpYW50KGV4ZWMsIHZhbHVlLCBRTWV0YVR5cGU6OlFPYmplY3RTdGFyLCAmaXRl
bWRpc3QsIHZpc2l0ZWRPYmplY3RzKTsKKyAgICAgICAgICAgICAgICBpZiAoaXRlbWRpc3QgPj0g
MCkgeworICAgICAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKGl0ZW0udmFsdWU8UU9iamVj
dCo+KCkpOwogICAgICAgICAgICAgICAgICAgICBkaXN0ID0gMTA7Ci0gICAgICAgICAgICAgICAg
fSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgcUNvbnZEZWJ1ZygpIDw8ICJmYWlsZWQgbWFr
aW5nIHNpbmdsZSBsZW5ndGggdmFybGlzdCI7CisgICAgICAgICAgICAgICAgICAgIHJldCA9IFFW
YXJpYW50Ojpmcm9tVmFsdWUocmVzdWx0KTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIFFNZXRhVHlwZTo6UVN0cmlu
Z0xpc3Q6IHsKKyAgICAgICAgfQorICAgICAgICBpZiAoaGludCA9PSAoUU1ldGFUeXBlOjpUeXBl
KSBxTWV0YVR5cGVJZDxRTGlzdDxpbnQ+ID4oKSkgewogICAgICAgICAgICAgaWYgKHR5cGUgPT0g
UlRBcnJheSkgewogICAgICAgICAgICAgICAgIFJ1bnRpbWVBcnJheSogcnRhcnJheSA9IHN0YXRp
Y19jYXN0PFJ1bnRpbWVBcnJheSo+KG9iamVjdCk7CiAKLSAgICAgICAgICAgICAgICBRU3RyaW5n
TGlzdCByZXN1bHQ7CisgICAgICAgICAgICAgICAgUUxpc3Q8aW50PiByZXN1bHQ7CiAgICAgICAg
ICAgICAgICAgaW50IGxlbiA9IHJ0YXJyYXktPmdldExlbmd0aCgpOwogICAgICAgICAgICAgICAg
IGZvciAoaW50IGkgPSAwOyBpIDwgbGVuOyArK2kpIHsKICAgICAgICAgICAgICAgICAgICAgSlNW
YWx1ZSB2YWwgPSBydGFycmF5LT5nZXRDb25jcmV0ZUFycmF5KCktPnZhbHVlQXQoZXhlYywgaSk7
Ci0gICAgICAgICAgICAgICAgICAgIFVTdHJpbmcgdXN0cmluZyA9IHZhbC50b1N0cmluZyhleGVj
KTsKLSAgICAgICAgICAgICAgICAgICAgUVN0cmluZyBxc3RyaW5nID0gUVN0cmluZygoY29uc3Qg
UUNoYXIqKXVzdHJpbmcucmVwKCktPmNoYXJhY3RlcnMoKSwgdXN0cmluZy5zaXplKCkpOwotCi0g
ICAgICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQocXN0cmluZyk7CisgICAgICAgICAgICAg
ICAgICAgIGludCBpdGVtZGlzdCA9IC0xOworICAgICAgICAgICAgICAgICAgICBRVmFyaWFudCBp
dGVtID0gY29udmVydFZhbHVlVG9RVmFyaWFudChleGVjLCB2YWwsIFFNZXRhVHlwZTo6SW50LCAm
aXRlbWRpc3QsIHZpc2l0ZWRPYmplY3RzKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZW1k
aXN0ID49IDApCisgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKGl0ZW0udmFs
dWU8aW50PigpKTsKKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIC8vIElmIHdl
IGRpZG4ndCBmYWlsIGNvbnZlcnNpb24KKyAgICAgICAgICAgICAgICBpZiAocmVzdWx0LmNvdW50
KCkgPT0gbGVuKSB7CisgICAgICAgICAgICAgICAgICAgIGRpc3QgPSA1OworICAgICAgICAgICAg
ICAgICAgICByZXQgPSBRVmFyaWFudDo6ZnJvbVZhbHVlKHJlc3VsdCk7CiAgICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgIGRpc3QgPSA1OwotICAgICAgICAgICAgICAgIHJldCA9IFFW
YXJpYW50KHJlc3VsdCk7CiAgICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT0gQXJyYXkpIHsK
LSAgICAgICAgICAgICAgICBKU0FycmF5KiBhcnJheSA9IHN0YXRpY19jYXN0PEpTQXJyYXkqPihv
YmplY3QpOworICAgICAgICAgICAgICAgIEpTQXJyYXkqIGFycmF5ID0gc3RhdGljX2Nhc3Q8SlNB
cnJheSAqPihvYmplY3QpOwogCi0gICAgICAgICAgICAgICAgUVN0cmluZ0xpc3QgcmVzdWx0Owor
ICAgICAgICAgICAgICAgIFFMaXN0PGludD4gcmVzdWx0OwogICAgICAgICAgICAgICAgIGludCBs
ZW4gPSBhcnJheS0+bGVuZ3RoKCk7CiAgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkg
PCBsZW47ICsraSkgewogICAgICAgICAgICAgICAgICAgICBKU1ZhbHVlIHZhbCA9IGFycmF5LT5n
ZXQoZXhlYywgaSk7Ci0gICAgICAgICAgICAgICAgICAgIFVTdHJpbmcgdXN0cmluZyA9IHZhbC50
b1N0cmluZyhleGVjKTsKLSAgICAgICAgICAgICAgICAgICAgUVN0cmluZyBxc3RyaW5nID0gUVN0
cmluZygoY29uc3QgUUNoYXIqKXVzdHJpbmcucmVwKCktPmNoYXJhY3RlcnMoKSwgdXN0cmluZy5z
aXplKCkpOwotCi0gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQocXN0cmluZyk7Cisg
ICAgICAgICAgICAgICAgICAgIGludCBpdGVtZGlzdCA9IC0xOworICAgICAgICAgICAgICAgICAg
ICBRVmFyaWFudCBpdGVtID0gY29udmVydFZhbHVlVG9RVmFyaWFudChleGVjLCB2YWwsIFFNZXRh
VHlwZTo6SW50LCAmaXRlbWRpc3QsIHZpc2l0ZWRPYmplY3RzKTsKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKGl0ZW1kaXN0ID49IDApCisgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQuYXBw
ZW5kKGl0ZW0udmFsdWU8aW50PigpKTsKKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgIGRpc3QgPSA1OwotICAgICAgICAgICAgICAgIHJldCA9IFFWYXJpYW50KHJlc3VsdCk7Ci0g
ICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIC8vIE1ha2UgYSBzaW5nbGUgbGVu
Z3RoIGFycmF5Ci0gICAgICAgICAgICAgICAgVVN0cmluZyB1c3RyaW5nID0gdmFsdWUudG9TdHJp
bmcoZXhlYyk7Ci0gICAgICAgICAgICAgICAgUVN0cmluZyBxc3RyaW5nID0gUVN0cmluZygoY29u
c3QgUUNoYXIqKXVzdHJpbmcucmVwKCktPmNoYXJhY3RlcnMoKSwgdXN0cmluZy5zaXplKCkpOwot
ICAgICAgICAgICAgICAgIFFTdHJpbmdMaXN0IHJlc3VsdDsKLSAgICAgICAgICAgICAgICByZXN1
bHQuYXBwZW5kKHFzdHJpbmcpOwotICAgICAgICAgICAgICAgIHJldCA9IFFWYXJpYW50KHJlc3Vs
dCk7Ci0gICAgICAgICAgICAgICAgZGlzdCA9IDEwOwotICAgICAgICAgICAgfQotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICBjYXNlIFFNZXRhVHlwZTo6UUJ5dGVBcnJh
eTogewotICAgICAgICAgICAgaWYgKHR5cGUgPT0gSlNCeXRlQXJyYXkpIHsKLSAgICAgICAgICAg
ICAgICBXVEY6OkJ5dGVBcnJheSogYXJyID0gYXNCeXRlQXJyYXkodmFsdWUpLT5zdG9yYWdlKCk7
Ci0gICAgICAgICAgICAgICAgcmV0ID0gUVZhcmlhbnQoUUJ5dGVBcnJheShyZWludGVycHJldF9j
YXN0PGNvbnN0IGNoYXIqPihhcnItPmRhdGEoKSksIGFyci0+bGVuZ3RoKCkpKTsKLSAgICAgICAg
ICAgICAgICBkaXN0ID0gMDsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAg
VVN0cmluZyB1c3RyaW5nID0gdmFsdWUudG9TdHJpbmcoZXhlYyk7Ci0gICAgICAgICAgICAgICAg
cmV0ID0gUVZhcmlhbnQoUVN0cmluZygoY29uc3QgUUNoYXIqKXVzdHJpbmcucmVwKCktPmNoYXJh
Y3RlcnMoKSwgdXN0cmluZy5zaXplKCkpLnRvTGF0aW4xKCkpOwotICAgICAgICAgICAgICAgIGlm
ICh0eXBlID09IFN0cmluZykKKyAgICAgICAgICAgICAgICAvLyBJZiB3ZSBkaWRuJ3QgZmFpbCBj
b252ZXJzaW9uCisgICAgICAgICAgICAgICAgaWYgKHJlc3VsdC5jb3VudCgpID09IGxlbikgewog
ICAgICAgICAgICAgICAgICAgICBkaXN0ID0gNTsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAg
ICAgICAgICAgICAgICAgIGRpc3QgPSAxMDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgY2FzZSBRTWV0YVR5cGU6OlFEYXRlVGltZToKLSAg
ICAgICAgY2FzZSBRTWV0YVR5cGU6OlFEYXRlOgotICAgICAgICBjYXNlIFFNZXRhVHlwZTo6UVRp
bWU6Ci0gICAgICAgICAgICBpZiAodHlwZSA9PSBEYXRlKSB7Ci0gICAgICAgICAgICAgICAgRGF0
ZUluc3RhbmNlKiBkYXRlID0gc3RhdGljX2Nhc3Q8RGF0ZUluc3RhbmNlKj4ob2JqZWN0KTsKLSAg
ICAgICAgICAgICAgICBHcmVnb3JpYW5EYXRlVGltZSBnZHQ7Ci0gICAgICAgICAgICAgICAgbXNU
b0dyZWdvcmlhbkRhdGVUaW1lKGV4ZWMsIGRhdGUtPmludGVybmFsTnVtYmVyKCksIHRydWUsIGdk
dCk7Ci0gICAgICAgICAgICAgICAgaWYgKGhpbnQgPT0gUU1ldGFUeXBlOjpRRGF0ZVRpbWUpIHsK
LSAgICAgICAgICAgICAgICAgICAgcmV0ID0gUURhdGVUaW1lKFFEYXRlKGdkdC55ZWFyICsgMTkw
MCwgZ2R0Lm1vbnRoICsgMSwgZ2R0Lm1vbnRoRGF5KSwgUVRpbWUoZ2R0LmhvdXIsIGdkdC5taW51
dGUsIGdkdC5zZWNvbmQpLCBRdDo6VVRDKTsKLSAgICAgICAgICAgICAgICAgICAgZGlzdCA9IDA7
Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChoaW50ID09IFFNZXRhVHlwZTo6UURhdGUpIHsK
LSAgICAgICAgICAgICAgICAgICAgcmV0ID0gUURhdGUoZ2R0LnllYXIgKyAxOTAwLCBnZHQubW9u
dGggKyAxLCBnZHQubW9udGhEYXkpOwotICAgICAgICAgICAgICAgICAgICBkaXN0ID0gMTsKLSAg
ICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICByZXQgPSBRVGltZShn
ZHQuaG91ciArIDE5MDAsIGdkdC5taW51dGUsIGdkdC5zZWNvbmQpOwotICAgICAgICAgICAgICAg
ICAgICBkaXN0ID0gMjsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UgaWYg
KHR5cGUgPT0gTnVtYmVyKSB7Ci0gICAgICAgICAgICAgICAgZG91YmxlIGIgPSB2YWx1ZS50b051
bWJlcihleGVjKTsKLSAgICAgICAgICAgICAgICBHcmVnb3JpYW5EYXRlVGltZSBnZHQ7Ci0gICAg
ICAgICAgICAgICAgbXNUb0dyZWdvcmlhbkRhdGVUaW1lKGV4ZWMsIGIsIHRydWUsIGdkdCk7Ci0g
ICAgICAgICAgICAgICAgaWYgKGhpbnQgPT0gUU1ldGFUeXBlOjpRRGF0ZVRpbWUpIHsKLSAgICAg
ICAgICAgICAgICAgICAgcmV0ID0gUURhdGVUaW1lKFFEYXRlKGdkdC55ZWFyICsgMTkwMCwgZ2R0
Lm1vbnRoICsgMSwgZ2R0Lm1vbnRoRGF5KSwgUVRpbWUoZ2R0LmhvdXIsIGdkdC5taW51dGUsIGdk
dC5zZWNvbmQpLCBRdDo6VVRDKTsKLSAgICAgICAgICAgICAgICAgICAgZGlzdCA9IDY7Ci0gICAg
ICAgICAgICAgICAgfSBlbHNlIGlmIChoaW50ID09IFFNZXRhVHlwZTo6UURhdGUpIHsKLSAgICAg
ICAgICAgICAgICAgICAgcmV0ID0gUURhdGUoZ2R0LnllYXIgKyAxOTAwLCBnZHQubW9udGggKyAx
LCBnZHQubW9udGhEYXkpOwotICAgICAgICAgICAgICAgICAgICBkaXN0ID0gODsKLSAgICAgICAg
ICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICByZXQgPSBRVGltZShnZHQuaG91
ciwgZ2R0Lm1pbnV0ZSwgZ2R0LnNlY29uZCk7Ci0gICAgICAgICAgICAgICAgICAgIGRpc3QgPSAx
MDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT0gU3Ry
aW5nKSB7Ci0gICAgICAgICAgICAgICAgVVN0cmluZyB1c3RyaW5nID0gdmFsdWUudG9TdHJpbmco
ZXhlYyk7Ci0gICAgICAgICAgICAgICAgUVN0cmluZyBxc3RyaW5nID0gUVN0cmluZygoY29uc3Qg
UUNoYXIqKXVzdHJpbmcucmVwKCktPmNoYXJhY3RlcnMoKSwgdXN0cmluZy5zaXplKCkpOwotCi0g
ICAgICAgICAgICAgICAgaWYgKGhpbnQgPT0gUU1ldGFUeXBlOjpRRGF0ZVRpbWUpIHsKLSAgICAg
ICAgICAgICAgICAgICAgUURhdGVUaW1lIGR0ID0gUURhdGVUaW1lOjpmcm9tU3RyaW5nKHFzdHJp
bmcsIFF0OjpJU09EYXRlKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFkdC5pc1ZhbGlkKCkp
Ci0gICAgICAgICAgICAgICAgICAgICAgICBkdCA9IFFEYXRlVGltZTo6ZnJvbVN0cmluZyhxc3Ry
aW5nLCBRdDo6VGV4dERhdGUpOwotICAgICAgICAgICAgICAgICAgICBpZiAoIWR0LmlzVmFsaWQo
KSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGR0ID0gUURhdGVUaW1lOjpmcm9tU3RyaW5nKHFz
dHJpbmcsIFF0OjpTeXN0ZW1Mb2NhbGVEYXRlKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFk
dC5pc1ZhbGlkKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICBkdCA9IFFEYXRlVGltZTo6ZnJv
bVN0cmluZyhxc3RyaW5nLCBRdDo6TG9jYWxlRGF0ZSk7Ci0gICAgICAgICAgICAgICAgICAgIGlm
IChkdC5pc1ZhbGlkKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldCA9IGR0OwotICAg
ICAgICAgICAgICAgICAgICAgICAgZGlzdCA9IDI7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICB9IGVsc2UgaWYgKGhpbnQgPT0gUU1ldGFUeXBlOjpRRGF0ZSkgewotICAg
ICAgICAgICAgICAgICAgICBRRGF0ZSBkdCA9IFFEYXRlOjpmcm9tU3RyaW5nKHFzdHJpbmcsIFF0
OjpJU09EYXRlKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFkdC5pc1ZhbGlkKCkpCi0gICAg
ICAgICAgICAgICAgICAgICAgICBkdCA9IFFEYXRlOjpmcm9tU3RyaW5nKHFzdHJpbmcsIFF0OjpU
ZXh0RGF0ZSk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghZHQuaXNWYWxpZCgpKQotICAgICAg
ICAgICAgICAgICAgICAgICAgZHQgPSBRRGF0ZTo6ZnJvbVN0cmluZyhxc3RyaW5nLCBRdDo6U3lz
dGVtTG9jYWxlRGF0ZSk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghZHQuaXNWYWxpZCgpKQot
ICAgICAgICAgICAgICAgICAgICAgICAgZHQgPSBRRGF0ZTo6ZnJvbVN0cmluZyhxc3RyaW5nLCBR
dDo6TG9jYWxlRGF0ZSk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChkdC5pc1ZhbGlkKCkpIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgIHJldCA9IGR0OwotICAgICAgICAgICAgICAgICAgICAg
ICAgZGlzdCA9IDM7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9IGVs
c2UgewotICAgICAgICAgICAgICAgICAgICBRVGltZSBkdCA9IFFUaW1lOjpmcm9tU3RyaW5nKHFz
dHJpbmcsIFF0OjpJU09EYXRlKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFkdC5pc1ZhbGlk
KCkpCi0gICAgICAgICAgICAgICAgICAgICAgICBkdCA9IFFUaW1lOjpmcm9tU3RyaW5nKHFzdHJp
bmcsIFF0OjpUZXh0RGF0ZSk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghZHQuaXNWYWxpZCgp
KQotICAgICAgICAgICAgICAgICAgICAgICAgZHQgPSBRVGltZTo6ZnJvbVN0cmluZyhxc3RyaW5n
LCBRdDo6U3lzdGVtTG9jYWxlRGF0ZSk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghZHQuaXNW
YWxpZCgpKQotICAgICAgICAgICAgICAgICAgICAgICAgZHQgPSBRVGltZTo6ZnJvbVN0cmluZyhx
c3RyaW5nLCBRdDo6TG9jYWxlRGF0ZSk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChkdC5pc1Zh
bGlkKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldCA9IGR0OwotICAgICAgICAgICAg
ICAgICAgICAgICAgZGlzdCA9IDM7Ci0gICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAgICAgcmV0ID0gUVZhcmlhbnQ6OmZyb21WYWx1ZShyZXN1bHQpOwogICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2Ug
UU1ldGFUeXBlOjpRUmVnRXhwOgotICAgICAgICAgICAgaWYgKHR5cGUgPT0gUmVnRXhwKSB7Ci0v
KgotICAgICAgICAgICAgICAgIFJlZ0V4cE9iamVjdCAqcmUgPSBzdGF0aWNfY2FzdDxSZWdFeHBP
YmplY3QqPihvYmplY3QpOwotKi8KLSAgICAgICAgICAgICAgICAvLyBBdHRlbXB0IHRvIGNvbnZl
cnQuLiBhIGJpdCByaXNreQotICAgICAgICAgICAgICAgIFVTdHJpbmcgdXN0cmluZyA9IHZhbHVl
LnRvU3RyaW5nKGV4ZWMpOwotICAgICAgICAgICAgICAgIFFTdHJpbmcgcXN0cmluZyA9IFFTdHJp
bmcoKGNvbnN0IFFDaGFyKil1c3RyaW5nLnJlcCgpLT5jaGFyYWN0ZXJzKCksIHVzdHJpbmcuc2l6
ZSgpKTsKLQotICAgICAgICAgICAgICAgIC8vIHRoaXMgaXMgb2YgdGhlIGZvcm0gJy94eHh4eHgv
aScKLSAgICAgICAgICAgICAgICBpbnQgZmlyc3RTbGFzaCA9IHFzdHJpbmcuaW5kZXhPZihRTGF0
aW4xQ2hhcignLycpKTsKLSAgICAgICAgICAgICAgICBpbnQgbGFzdFNsYXNoID0gcXN0cmluZy5s
YXN0SW5kZXhPZihRTGF0aW4xQ2hhcignLycpKTsKLSAgICAgICAgICAgICAgICBpZiAoZmlyc3RT
bGFzaCA+PTAgJiYgbGFzdFNsYXNoID4gZmlyc3RTbGFzaCkgewotICAgICAgICAgICAgICAgICAg
ICBRUmVnRXhwIHJlYWxSZTsKLQotICAgICAgICAgICAgICAgICAgICByZWFsUmUuc2V0UGF0dGVy
bihxc3RyaW5nLm1pZChmaXJzdFNsYXNoICsgMSwgbGFzdFNsYXNoIC0gZmlyc3RTbGFzaCAtIDEp
KTsKLQotICAgICAgICAgICAgICAgICAgICBpZiAocXN0cmluZy5taWQobGFzdFNsYXNoICsgMSku
Y29udGFpbnMoUUxhdGluMUNoYXIoJ2knKSkpCi0gICAgICAgICAgICAgICAgICAgICAgICByZWFs
UmUuc2V0Q2FzZVNlbnNpdGl2aXR5KFF0OjpDYXNlSW5zZW5zaXRpdmUpOwotCi0gICAgICAgICAg
ICAgICAgICAgIHJldCA9IHFWYXJpYW50RnJvbVZhbHVlKHJlYWxSZSk7Ci0gICAgICAgICAgICAg
ICAgICAgIGRpc3QgPSAwOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAg
ICAgICAgIHFDb252RGVidWcoKSA8PCAiY291bGRuJ3QgcGFyc2UgYSBKUyByZWdleHAiOwotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PSBTdHJpbmcpIHsK
LSAgICAgICAgICAgICAgICBVU3RyaW5nIHVzdHJpbmcgPSB2YWx1ZS50b1N0cmluZyhleGVjKTsK
LSAgICAgICAgICAgICAgICBRU3RyaW5nIHFzdHJpbmcgPSBRU3RyaW5nKChjb25zdCBRQ2hhciop
dXN0cmluZy5yZXAoKS0+Y2hhcmFjdGVycygpLCB1c3RyaW5nLnNpemUoKSk7Ci0KLSAgICAgICAg
ICAgICAgICBRUmVnRXhwIHJlKHFzdHJpbmcpOwotICAgICAgICAgICAgICAgIGlmIChyZS5pc1Zh
bGlkKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0ID0gcVZhcmlhbnRGcm9tVmFsdWUocmUp
OworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAvLyBNYWtlIGEgc2luZ2xl
IGxlbmd0aCBhcnJheQorICAgICAgICAgICAgICAgIFFMaXN0PGludD4gcmVzdWx0OworICAgICAg
ICAgICAgICAgIGludCBpdGVtZGlzdCA9IC0xOworICAgICAgICAgICAgICAgIFFWYXJpYW50IGl0
ZW0gPSBjb252ZXJ0VmFsdWVUb1FWYXJpYW50KGV4ZWMsIHZhbHVlLCBRTWV0YVR5cGU6OkludCwg
Jml0ZW1kaXN0LCB2aXNpdGVkT2JqZWN0cyk7CisgICAgICAgICAgICAgICAgaWYgKGl0ZW1kaXN0
ID49IDApIHsKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChpdGVtLnZhbHVlPGlu
dD4oKSk7CiAgICAgICAgICAgICAgICAgICAgIGRpc3QgPSAxMDsKKyAgICAgICAgICAgICAgICAg
ICAgcmV0ID0gUVZhcmlhbnQ6OmZyb21WYWx1ZShyZXN1bHQpOwogICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgUU1ldGFU
eXBlOjpRT2JqZWN0U3RhcjoKLSAgICAgICAgICAgIGlmICh0eXBlID09IFFPYmopIHsKLSAgICAg
ICAgICAgICAgICBRdEluc3RhbmNlKiBxdGluc3QgPSBRdEluc3RhbmNlOjpnZXRJbnN0YW5jZShv
YmplY3QpOwotICAgICAgICAgICAgICAgIGlmIChxdGluc3QpIHsKLSAgICAgICAgICAgICAgICAg
ICAgaWYgKHF0aW5zdC0+Z2V0T2JqZWN0KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHFD
b252RGVidWcoKSA8PCAiZm91bmQgaW5zdGFuY2UsIHdpdGggb2JqZWN0OiIgPDwgKHZvaWQqKSBx
dGluc3QtPmdldE9iamVjdCgpOwotICAgICAgICAgICAgICAgICAgICAgICAgcmV0ID0gcVZhcmlh
bnRGcm9tVmFsdWUocXRpbnN0LT5nZXRPYmplY3QoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBxQ29udkRlYnVnKCkgPDwgcmV0OwotICAgICAgICAgICAgICAgICAgICAgICAgZGlzdCA9IDA7
Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBx
Q29udkRlYnVnKCkgPDwgImNhbid0IGNvbnZlcnQgZGVsZXRlZCBxb2JqZWN0IjsKLSAgICAgICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAg
ICAgIHFDb252RGVidWcoKSA8PCAid2Fzbid0IGEgcXRpbnN0YW5jZSI7Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlID09IE51bGwpIHsKLSAgICAgICAgICAg
ICAgICBRT2JqZWN0KiBudWxsb2JqID0gMDsKLSAgICAgICAgICAgICAgICByZXQgPSBxVmFyaWFu
dEZyb21WYWx1ZShudWxsb2JqKTsKLSAgICAgICAgICAgICAgICBkaXN0ID0gMDsKLSAgICAgICAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgcUNvbnZEZWJ1ZygpIDw8ICJwcmV2aW91cyB0
eXBlIHdhcyBub3QgYW4gb2JqZWN0OiIgPDwgdHlwZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgUU1ldGFUeXBlOjpWb2lkU3RhcjoKLSAgICAgICAg
ICAgIGlmICh0eXBlID09IFFPYmopIHsKLSAgICAgICAgICAgICAgICBRdEluc3RhbmNlKiBxdGlu
c3QgPSBRdEluc3RhbmNlOjpnZXRJbnN0YW5jZShvYmplY3QpOwotICAgICAgICAgICAgICAgIGlm
IChxdGluc3QpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHF0aW5zdC0+Z2V0T2JqZWN0KCkp
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHFDb252RGVidWcoKSA8PCAiZm91bmQgaW5zdGFu
Y2UsIHdpdGggb2JqZWN0OiIgPDwgKHZvaWQqKSBxdGluc3QtPmdldE9iamVjdCgpOwotICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0ID0gcVZhcmlhbnRGcm9tVmFsdWUoKHZvaWQgKilxdGluc3Qt
PmdldE9iamVjdCgpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHFDb252RGVidWcoKSA8PCBy
ZXQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkaXN0ID0gMDsKLSAgICAgICAgICAgICAgICAg
ICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHFDb252RGVidWcoKSA8PCAiY2Fu
J3QgY29udmVydCBkZWxldGVkIHFvYmplY3QiOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgcUNvbnZEZWJ1ZygpIDw8
ICJ3YXNuJ3QgYSBxdGluc3RhbmNlIjsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9
IGVsc2UgaWYgKHR5cGUgPT0gTnVsbCkgewotICAgICAgICAgICAgICAgIHJldCA9IHFWYXJpYW50
RnJvbVZhbHVlKCh2b2lkKikwKTsKLSAgICAgICAgICAgICAgICBkaXN0ID0gMDsKLSAgICAgICAg
ICAgIH0gZWxzZSBpZiAodHlwZSA9PSBOdW1iZXIpIHsKLSAgICAgICAgICAgICAgICAvLyBJIGRv
bid0IHRoaW5rIHRoYXQgY29udmVydGluZyBhIGRvdWJsZSB0byBhIHBvaW50ZXIgaXMgYSB3aXNl
Ci0gICAgICAgICAgICAgICAgLy8gbW92ZS4gIEV4Y2VwdCBtYXliZSAwLgotICAgICAgICAgICAg
ICAgIHFDb252RGVidWcoKSA8PCAiZ290IG51bWJlciBmb3Igdm9pZCAqIC0gbm90IGNvbnZlcnRp
bmcsIHNlZW1zIHVuc2FmZToiIDw8IHZhbHVlLnRvTnVtYmVyKGV4ZWMpOwotICAgICAgICAgICAg
fSBlbHNlIHsKLSAgICAgICAgICAgICAgICBxQ29udkRlYnVnKCkgPDwgInZvaWQqIC0gdW5oYW5k
bGVkIHR5cGUiIDw8IHR5cGU7CisgICAgICAgIH0KKyAgICAgICAgaWYgKFF0UGl4bWFwSW5zdGFu
Y2U6OmNhbkhhbmRsZShzdGF0aWNfY2FzdDxRTWV0YVR5cGU6OlR5cGU+KGhpbnQpKSkgeworICAg
ICAgICAgICAgcmV0ID0gUXRQaXhtYXBJbnN0YW5jZTo6dmFyaWFudEZyb21PYmplY3Qob2JqZWN0
LCBzdGF0aWNfY2FzdDxRTWV0YVR5cGU6OlR5cGU+KGhpbnQpKTsKKyAgICAgICAgfSBlbHNlIGlm
IChoaW50ID09IChRTWV0YVR5cGU6OlR5cGUpIHFNZXRhVHlwZUlkPFFXZWJFbGVtZW50PigpKSB7
CisgICAgICAgICAgICBpZiAob2JqZWN0ICYmIG9iamVjdC0+aW5oZXJpdHMoJkpTSFRNTEVsZW1l
bnQ6OnNfaW5mbykpCisgICAgICAgICAgICAgICAgcmV0ID0gUVZhcmlhbnQ6OmZyb21WYWx1ZTxR
V2ViRWxlbWVudD4oUXRXZWJFbGVtZW50UnVudGltZTo6Y3JlYXRlKChzdGF0aWNfY2FzdDxKU0hU
TUxFbGVtZW50Kj4ob2JqZWN0KSktPmltcGwoKSkpOworICAgICAgICAgICAgZWxzZQorICAgICAg
ICAgICAgICAgIHJldCA9IFFWYXJpYW50Ojpmcm9tVmFsdWU8UVdlYkVsZW1lbnQ+KFFXZWJFbGVt
ZW50KCkpOworICAgICAgICB9IGVsc2UgaWYgKGhpbnQgPT0gKFFNZXRhVHlwZTo6VHlwZSkgcU1l
dGFUeXBlSWQ8UVZhcmlhbnQ+KCkpIHsKKyAgICAgICAgICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5l
ZE9yTnVsbCgpKSB7CisgICAgICAgICAgICAgICAgaWYgKGRpc3RhbmNlKQorICAgICAgICAgICAg
ICAgICAgICAqZGlzdGFuY2UgPSAxOworICAgICAgICAgICAgICAgIHJldHVybiBRVmFyaWFudCgp
OwogICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgZGVmYXVsdDoK
LSAgICAgICAgICAgIC8vIE5vbiBjb25zdCB0eXBlIGlkcwotICAgICAgICAgICAgaWYgKGhpbnQg
PT0gKFFNZXRhVHlwZTo6VHlwZSkgcU1ldGFUeXBlSWQ8UU9iamVjdExpc3Q+KCkpCi0gICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKHR5cGUgPT0gUlRBcnJheSkgewotICAgICAgICAg
ICAgICAgICAgICBSdW50aW1lQXJyYXkqIHJ0YXJyYXkgPSBzdGF0aWNfY2FzdDxSdW50aW1lQXJy
YXkqPihvYmplY3QpOwotCi0gICAgICAgICAgICAgICAgICAgIFFPYmplY3RMaXN0IHJlc3VsdDsK
LSAgICAgICAgICAgICAgICAgICAgaW50IGxlbiA9IHJ0YXJyYXktPmdldExlbmd0aCgpOwotICAg
ICAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbjsgKytpKSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBKU1ZhbHVlIHZhbCA9IHJ0YXJyYXktPmdldENvbmNyZXRlQXJyYXko
KS0+dmFsdWVBdChleGVjLCBpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGludCBpdGVtZGlz
dCA9IC0xOwotICAgICAgICAgICAgICAgICAgICAgICAgUVZhcmlhbnQgaXRlbSA9IGNvbnZlcnRW
YWx1ZVRvUVZhcmlhbnQoZXhlYywgdmFsLCBRTWV0YVR5cGU6OlFPYmplY3RTdGFyLCAmaXRlbWRp
c3QsIHZpc2l0ZWRPYmplY3RzKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpdGVtZGlz
dCA+PSAwKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoaXRlbS52
YWx1ZTxRT2JqZWN0Kj4oKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICAgICAgLy8gSWYgd2UgZGlkbid0IGZhaWwgY29udmVyc2lvbgotICAgICAgICAg
ICAgICAgICAgICBpZiAocmVzdWx0LmNvdW50KCkgPT0gbGVuKSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBkaXN0ID0gNTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldCA9IFFWYXJpYW50
Ojpmcm9tVmFsdWUocmVzdWx0KTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgIH0gZWxzZSBpZiAodHlwZSA9PSBBcnJheSkgewotICAgICAgICAgICAgICAgICAgICBKU09i
amVjdCogb2JqZWN0ID0gdmFsdWUudG9PYmplY3QoZXhlYyk7Ci0gICAgICAgICAgICAgICAgICAg
IEpTQXJyYXkqIGFycmF5ID0gc3RhdGljX2Nhc3Q8SlNBcnJheSAqPihvYmplY3QpOwotICAgICAg
ICAgICAgICAgICAgICBRT2JqZWN0TGlzdCByZXN1bHQ7Ci0gICAgICAgICAgICAgICAgICAgIGlu
dCBsZW4gPSBhcnJheS0+bGVuZ3RoKCk7Ci0gICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGkg
PSAwOyBpIDwgbGVuOyArK2kpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIEpTVmFsdWUgdmFs
ID0gYXJyYXktPmdldChleGVjLCBpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGludCBpdGVt
ZGlzdCA9IC0xOwotICAgICAgICAgICAgICAgICAgICAgICAgUVZhcmlhbnQgaXRlbSA9IGNvbnZl
cnRWYWx1ZVRvUVZhcmlhbnQoZXhlYywgdmFsLCBRTWV0YVR5cGU6OlFPYmplY3RTdGFyLCAmaXRl
bWRpc3QsIHZpc2l0ZWRPYmplY3RzKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpdGVt
ZGlzdCA+PSAwKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoaXRl
bS52YWx1ZTxRT2JqZWN0Kj4oKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICAgICAgLy8gSWYgd2UgZGlkbid0IGZhaWwgY29udmVyc2lvbgotICAgICAg
ICAgICAgICAgICAgICBpZiAocmVzdWx0LmNvdW50KCkgPT0gbGVuKSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBkaXN0ID0gNTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldCA9IFFWYXJp
YW50Ojpmcm9tVmFsdWUocmVzdWx0KTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIE1ha2UgYSBzaW5nbGUgbGVu
Z3RoIGFycmF5Ci0gICAgICAgICAgICAgICAgICAgIFFPYmplY3RMaXN0IHJlc3VsdDsKLSAgICAg
ICAgICAgICAgICAgICAgaW50IGl0ZW1kaXN0ID0gLTE7Ci0gICAgICAgICAgICAgICAgICAgIFFW
YXJpYW50IGl0ZW0gPSBjb252ZXJ0VmFsdWVUb1FWYXJpYW50KGV4ZWMsIHZhbHVlLCBRTWV0YVR5
cGU6OlFPYmplY3RTdGFyLCAmaXRlbWRpc3QsIHZpc2l0ZWRPYmplY3RzKTsKLSAgICAgICAgICAg
ICAgICAgICAgaWYgKGl0ZW1kaXN0ID49IDApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJl
c3VsdC5hcHBlbmQoaXRlbS52YWx1ZTxRT2JqZWN0Kj4oKSk7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBkaXN0ID0gMTA7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXQgPSBRVmFyaWFudDo6
ZnJvbVZhbHVlKHJlc3VsdCk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKGhpbnQg
PT0gKFFNZXRhVHlwZTo6VHlwZSkgcU1ldGFUeXBlSWQ8UUxpc3Q8aW50PiA+KCkpIHsKLSAgICAg
ICAgICAgICAgICBpZiAodHlwZSA9PSBSVEFycmF5KSB7Ci0gICAgICAgICAgICAgICAgICAgIFJ1
bnRpbWVBcnJheSogcnRhcnJheSA9IHN0YXRpY19jYXN0PFJ1bnRpbWVBcnJheSo+KG9iamVjdCk7
Ci0KLSAgICAgICAgICAgICAgICAgICAgUUxpc3Q8aW50PiByZXN1bHQ7Ci0gICAgICAgICAgICAg
ICAgICAgIGludCBsZW4gPSBydGFycmF5LT5nZXRMZW5ndGgoKTsKLSAgICAgICAgICAgICAgICAg
ICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW47ICsraSkgewotICAgICAgICAgICAgICAgICAgICAg
ICAgSlNWYWx1ZSB2YWwgPSBydGFycmF5LT5nZXRDb25jcmV0ZUFycmF5KCktPnZhbHVlQXQoZXhl
YywgaSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpbnQgaXRlbWRpc3QgPSAtMTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIFFWYXJpYW50IGl0ZW0gPSBjb252ZXJ0VmFsdWVUb1FWYXJpYW50
KGV4ZWMsIHZhbCwgUU1ldGFUeXBlOjpJbnQsICZpdGVtZGlzdCwgdmlzaXRlZE9iamVjdHMpOwot
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZW1kaXN0ID49IDApCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChpdGVtLnZhbHVlPGludD4oKSk7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgLy8gSWYgd2UgZGlk
bid0IGZhaWwgY29udmVyc2lvbgotICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0LmNvdW50
KCkgPT0gbGVuKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkaXN0ID0gNTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIHJldCA9IFFWYXJpYW50Ojpmcm9tVmFsdWUocmVzdWx0KTsKLSAgICAg
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PSBBcnJh
eSkgewotICAgICAgICAgICAgICAgICAgICBKU0FycmF5KiBhcnJheSA9IHN0YXRpY19jYXN0PEpT
QXJyYXkgKj4ob2JqZWN0KTsKLQotICAgICAgICAgICAgICAgICAgICBRTGlzdDxpbnQ+IHJlc3Vs
dDsKLSAgICAgICAgICAgICAgICAgICAgaW50IGxlbiA9IGFycmF5LT5sZW5ndGgoKTsKLSAgICAg
ICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW47ICsraSkgewotICAgICAgICAg
ICAgICAgICAgICAgICAgSlNWYWx1ZSB2YWwgPSBhcnJheS0+Z2V0KGV4ZWMsIGkpOwotICAgICAg
ICAgICAgICAgICAgICAgICAgaW50IGl0ZW1kaXN0ID0gLTE7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBRVmFyaWFudCBpdGVtID0gY29udmVydFZhbHVlVG9RVmFyaWFudChleGVjLCB2YWwsIFFN
ZXRhVHlwZTo6SW50LCAmaXRlbWRpc3QsIHZpc2l0ZWRPYmplY3RzKTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGlmIChpdGVtZGlzdCA+PSAwKQotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHJlc3VsdC5hcHBlbmQoaXRlbS52YWx1ZTxpbnQ+KCkpOwotICAgICAgICAgICAgICAgICAgICAg
ICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIC8vIElmIHdlIGRpZG4ndCBmYWlsIGNvbnZl
cnNpb24KLSAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdC5jb3VudCgpID09IGxlbikgewot
ICAgICAgICAgICAgICAgICAgICAgICAgZGlzdCA9IDU7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICByZXQgPSBRVmFyaWFudDo6ZnJvbVZhbHVlKHJlc3VsdCk7Ci0gICAgICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAvLyBNYWtl
IGEgc2luZ2xlIGxlbmd0aCBhcnJheQotICAgICAgICAgICAgICAgICAgICBRTGlzdDxpbnQ+IHJl
c3VsdDsKLSAgICAgICAgICAgICAgICAgICAgaW50IGl0ZW1kaXN0ID0gLTE7Ci0gICAgICAgICAg
ICAgICAgICAgIFFWYXJpYW50IGl0ZW0gPSBjb252ZXJ0VmFsdWVUb1FWYXJpYW50KGV4ZWMsIHZh
bHVlLCBRTWV0YVR5cGU6OkludCwgJml0ZW1kaXN0LCB2aXNpdGVkT2JqZWN0cyk7Ci0gICAgICAg
ICAgICAgICAgICAgIGlmIChpdGVtZGlzdCA+PSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICByZXN1bHQuYXBwZW5kKGl0ZW0udmFsdWU8aW50PigpKTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGRpc3QgPSAxMDsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldCA9IFFWYXJpYW50Ojpm
cm9tVmFsdWUocmVzdWx0KTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoUXRQaXht
YXBJbnN0YW5jZTo6Y2FuSGFuZGxlKHN0YXRpY19jYXN0PFFNZXRhVHlwZTo6VHlwZT4oaGludCkp
KSB7Ci0gICAgICAgICAgICAgICAgcmV0ID0gUXRQaXhtYXBJbnN0YW5jZTo6dmFyaWFudEZyb21P
YmplY3Qob2JqZWN0LCBzdGF0aWNfY2FzdDxRTWV0YVR5cGU6OlR5cGU+KGhpbnQpKTsKLSAgICAg
ICAgICAgIH0gZWxzZSBpZiAoaGludCA9PSAoUU1ldGFUeXBlOjpUeXBlKSBxTWV0YVR5cGVJZDxR
V2ViRWxlbWVudD4oKSkgewotICAgICAgICAgICAgICAgIGlmIChvYmplY3QgJiYgb2JqZWN0LT5p
bmhlcml0cygmSlNIVE1MRWxlbWVudDo6c19pbmZvKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0
ID0gUVZhcmlhbnQ6OmZyb21WYWx1ZTxRV2ViRWxlbWVudD4oUXRXZWJFbGVtZW50UnVudGltZTo6
Y3JlYXRlKChzdGF0aWNfY2FzdDxKU0hUTUxFbGVtZW50Kj4ob2JqZWN0KSktPmltcGwoKSkpOwot
ICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgcmV0ID0gUVZhcmlhbnQ6
OmZyb21WYWx1ZTxRV2ViRWxlbWVudD4oUVdlYkVsZW1lbnQoKSk7Ci0gICAgICAgICAgICB9IGVs
c2UgaWYgKGhpbnQgPT0gKFFNZXRhVHlwZTo6VHlwZSkgcU1ldGFUeXBlSWQ8UVZhcmlhbnQ+KCkp
IHsKLSAgICAgICAgICAgICAgICBpZiAodmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkgewotICAg
ICAgICAgICAgICAgICAgICBpZiAoZGlzdGFuY2UpCi0gICAgICAgICAgICAgICAgICAgICAgICAq
ZGlzdGFuY2UgPSAxOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gUVZhcmlhbnQoKTsKLSAg
ICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBpZiAodHlwZSA9PSBP
YmplY3QpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNpbmNlIHdlIGhhdmVuJ3QgcmVh
bGx5IHZpc2l0ZWQgdGhpcyBvYmplY3QgeWV0LCB3ZSByZW1vdmUgaXQKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHZpc2l0ZWRPYmplY3RzLT5yZW1vdmUob2JqZWN0KTsKLSAgICAgICAgICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIC8vIEFuZCB0aGVuIHJlY3Vyc2Ugd2l0aCB0
aGUgYXV0b2RldGVjdCBmbGFnCi0gICAgICAgICAgICAgICAgICAgIHJldCA9IGNvbnZlcnRWYWx1
ZVRvUVZhcmlhbnQoZXhlYywgdmFsdWUsIFFNZXRhVHlwZTo6Vm9pZCwgZGlzdGFuY2UsIHZpc2l0
ZWRPYmplY3RzKTsKLSAgICAgICAgICAgICAgICAgICAgZGlzdCA9IDEwOwotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGlmICh0eXBlID09IE9i
amVjdCkgeworICAgICAgICAgICAgICAgIC8vIFNpbmNlIHdlIGhhdmVuJ3QgcmVhbGx5IHZpc2l0
ZWQgdGhpcyBvYmplY3QgeWV0LCB3ZSByZW1vdmUgaXQKKyAgICAgICAgICAgICAgICB2aXNpdGVk
T2JqZWN0cy0+cmVtb3ZlKG9iamVjdCk7CiAgICAgICAgICAgICB9CiAKKyAgICAgICAgICAgIC8v
IEFuZCB0aGVuIHJlY3Vyc2Ugd2l0aCB0aGUgYXV0b2RldGVjdCBmbGFnCisgICAgICAgICAgICBy
ZXQgPSBjb252ZXJ0VmFsdWVUb1FWYXJpYW50KGV4ZWMsIHZhbHVlLCBRTWV0YVR5cGU6OlZvaWQs
IGRpc3RhbmNlLCB2aXNpdGVkT2JqZWN0cyk7CiAgICAgICAgICAgICBkaXN0ID0gMTA7CiAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGRpc3QgPSAxMDsKKyAgICAgICAg
YnJlYWs7CiAgICAgfQogCiAgICAgaWYgKCFyZXQuaXNWYWxpZCgpKQpAQCAtNzg4LDExICs3ODcs
MTEgQEAgSlNWYWx1ZSBjb252ZXJ0UVZhcmlhbnRUb1ZhbHVlKEV4ZWNTdGF0ZQogICAgIFFNZXRh
VHlwZTo6VHlwZSB0eXBlID0gKFFNZXRhVHlwZTo6VHlwZSkgdmFyaWFudC51c2VyVHlwZSgpOwog
CiAgICAgcUNvbnZEZWJ1ZygpIDw8ICJjb252ZXJ0UVZhcmlhbnRUb1ZhbHVlOiBtZXRhdHlwZToi
IDw8IHR5cGUgPDwgIiwgaXNudWxsOiAiIDw8IHZhcmlhbnQuaXNOdWxsKCk7Ci0gICAgaWYgKHZh
cmlhbnQuaXNOdWxsKCkgJiYKLSAgICAgICAgdHlwZSAhPSBRTWV0YVR5cGU6OlFPYmplY3RTdGFy
ICYmCi0gICAgICAgIHR5cGUgIT0gUU1ldGFUeXBlOjpWb2lkU3RhciAmJgotICAgICAgICB0eXBl
ICE9IFFNZXRhVHlwZTo6UVdpZGdldFN0YXIgJiYKLSAgICAgICAgdHlwZSAhPSBRTWV0YVR5cGU6
OlFTdHJpbmcpIHsKKyAgICBpZiAodmFyaWFudC5pc051bGwoKQorICAgICAgICAmJiB0eXBlICE9
IFFNZXRhVHlwZTo6UU9iamVjdFN0YXIKKyAgICAgICAgJiYgdHlwZSAhPSBRTWV0YVR5cGU6OlZv
aWRTdGFyCisgICAgICAgICYmIHR5cGUgIT0gUU1ldGFUeXBlOjpRV2lkZ2V0U3RhcgorICAgICAg
ICAmJiB0eXBlICE9IFFNZXRhVHlwZTo6UVN0cmluZykgewogICAgICAgICByZXR1cm4ganNOdWxs
KCk7CiAgICAgfQogCkBAIC04MDEsMTYgKzgwMCwxNiBAQCBKU1ZhbHVlIGNvbnZlcnRRVmFyaWFu
dFRvVmFsdWUoRXhlY1N0YXRlCiAgICAgaWYgKHR5cGUgPT0gUU1ldGFUeXBlOjpCb29sKQogICAg
ICAgICByZXR1cm4ganNCb29sZWFuKHZhcmlhbnQudG9Cb29sKCkpOwogCi0gICAgaWYgKHR5cGUg
PT0gUU1ldGFUeXBlOjpJbnQgfHwKLSAgICAgICAgdHlwZSA9PSBRTWV0YVR5cGU6OlVJbnQgfHwK
LSAgICAgICAgdHlwZSA9PSBRTWV0YVR5cGU6OkxvbmcgfHwKLSAgICAgICAgdHlwZSA9PSBRTWV0
YVR5cGU6OlVMb25nIHx8Ci0gICAgICAgIHR5cGUgPT0gUU1ldGFUeXBlOjpMb25nTG9uZyB8fAot
ICAgICAgICB0eXBlID09IFFNZXRhVHlwZTo6VUxvbmdMb25nIHx8Ci0gICAgICAgIHR5cGUgPT0g
UU1ldGFUeXBlOjpTaG9ydCB8fAotICAgICAgICB0eXBlID09IFFNZXRhVHlwZTo6VVNob3J0IHx8
Ci0gICAgICAgIHR5cGUgPT0gUU1ldGFUeXBlOjpGbG9hdCB8fAotICAgICAgICB0eXBlID09IFFN
ZXRhVHlwZTo6RG91YmxlKQorICAgIGlmICh0eXBlID09IFFNZXRhVHlwZTo6SW50CisgICAgICAg
IHx8IHR5cGUgPT0gUU1ldGFUeXBlOjpVSW50CisgICAgICAgIHx8IHR5cGUgPT0gUU1ldGFUeXBl
OjpMb25nCisgICAgICAgIHx8IHR5cGUgPT0gUU1ldGFUeXBlOjpVTG9uZworICAgICAgICB8fCB0
eXBlID09IFFNZXRhVHlwZTo6TG9uZ0xvbmcKKyAgICAgICAgfHwgdHlwZSA9PSBRTWV0YVR5cGU6
OlVMb25nTG9uZworICAgICAgICB8fCB0eXBlID09IFFNZXRhVHlwZTo6U2hvcnQKKyAgICAgICAg
fHwgdHlwZSA9PSBRTWV0YVR5cGU6OlVTaG9ydAorICAgICAgICB8fCB0eXBlID09IFFNZXRhVHlw
ZTo6RmxvYXQKKyAgICAgICAgfHwgdHlwZSA9PSBRTWV0YVR5cGU6OkRvdWJsZSkKICAgICAgICAg
cmV0dXJuIGpzTnVtYmVyKGV4ZWMsIHZhcmlhbnQudG9Eb3VibGUoKSk7CiAKICAgICBpZiAodHlw
ZSA9PSBRTWV0YVR5cGU6OlFSZWdFeHApIHsKQEAgLTgyNiwxNyArODI1LDE3IEBAIEpTVmFsdWUg
Y29udmVydFFWYXJpYW50VG9WYWx1ZShFeGVjU3RhdGUKICAgICAgICAgICAgIFJlZlB0cjxKU0M6
OlJlZ0V4cD4gcmVnRXhwID0gSlNDOjpSZWdFeHA6OmNyZWF0ZSgmZXhlYy0+Z2xvYmFsRGF0YSgp
LCBwYXR0ZXJuLCB1ZmxhZ3MpOwogICAgICAgICAgICAgaWYgKHJlZ0V4cC0+aXNWYWxpZCgpKQog
ICAgICAgICAgICAgICAgIHJldHVybiBuZXcgKGV4ZWMpIFJlZ0V4cE9iamVjdChleGVjLT5sZXhp
Y2FsR2xvYmFsT2JqZWN0KCksIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+cmVnRXhwU3Ry
dWN0dXJlKCksIHJlZ0V4cC5yZWxlYXNlKCkpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAg
ICAgICAgIHJldHVybiBqc051bGwoKTsKKworICAgICAgICAgICAgcmV0dXJuIGpzTnVsbCgpOwog
ICAgICAgICB9CiAgICAgfQogCi0gICAgaWYgKHR5cGUgPT0gUU1ldGFUeXBlOjpRRGF0ZVRpbWUg
fHwKLSAgICAgICAgdHlwZSA9PSBRTWV0YVR5cGU6OlFEYXRlIHx8Ci0gICAgICAgIHR5cGUgPT0g
UU1ldGFUeXBlOjpRVGltZSkgeworICAgIGlmICh0eXBlID09IFFNZXRhVHlwZTo6UURhdGVUaW1l
CisgICAgICAgIHx8IHR5cGUgPT0gUU1ldGFUeXBlOjpRRGF0ZQorICAgICAgICB8fCB0eXBlID09
IFFNZXRhVHlwZTo6UVRpbWUpIHsKIAogICAgICAgICBRRGF0ZSBkYXRlID0gUURhdGU6OmN1cnJl
bnREYXRlKCk7Ci0gICAgICAgIFFUaW1lIHRpbWUoMCwwLDApOyAvLyBtaWRuaWdodAorICAgICAg
ICBRVGltZSB0aW1lKDAsIDAsIDApOyAvLyBtaWRuaWdodAogCiAgICAgICAgIGlmICh0eXBlID09
IFFNZXRhVHlwZTo6UURhdGUpCiAgICAgICAgICAgICBkYXRlID0gdmFyaWFudC52YWx1ZTxRRGF0
ZT4oKTsKQEAgLTkxNCwxMyArOTEzLDE2IEBAIEpTVmFsdWUgY29udmVydFFWYXJpYW50VG9WYWx1
ZShFeGVjU3RhdGUKICAgICAgICAgUVZhcmlhbnRMaXN0IHZsID0gdmFyaWFudC50b0xpc3QoKTsK
ICAgICAgICAgcUNvbnZEZWJ1ZygpIDw8ICJnb3QgYSAiIDw8IHZsLmNvdW50KCkgPDwgIiBsZW5n
dGggbGlzdDoiIDw8IHZsOwogICAgICAgICByZXR1cm4gbmV3IChleGVjKSBSdW50aW1lQXJyYXko
ZXhlYywgbmV3IFF0QXJyYXk8UVZhcmlhbnQ+KHZsLCBRTWV0YVR5cGU6OlZvaWQsIHJvb3QpKTsK
LSAgICB9IGVsc2UgaWYgKHR5cGUgPT0gUU1ldGFUeXBlOjpRU3RyaW5nTGlzdCkgeworICAgIH0K
KyAgICBpZiAodHlwZSA9PSBRTWV0YVR5cGU6OlFTdHJpbmdMaXN0KSB7CiAgICAgICAgIFFTdHJp
bmdMaXN0IHNsID0gdmFyaWFudC52YWx1ZTxRU3RyaW5nTGlzdD4oKTsKICAgICAgICAgcmV0dXJu
IG5ldyAoZXhlYykgUnVudGltZUFycmF5KGV4ZWMsIG5ldyBRdEFycmF5PFFTdHJpbmc+KHNsLCBR
TWV0YVR5cGU6OlFTdHJpbmcsIHJvb3QpKTsKLSAgICB9IGVsc2UgaWYgKHR5cGUgPT0gKFFNZXRh
VHlwZTo6VHlwZSkgcU1ldGFUeXBlSWQ8UU9iamVjdExpc3Q+KCkpIHsKKyAgICB9CisgICAgaWYg
KHR5cGUgPT0gKFFNZXRhVHlwZTo6VHlwZSkgcU1ldGFUeXBlSWQ8UU9iamVjdExpc3Q+KCkpIHsK
ICAgICAgICAgUU9iamVjdExpc3Qgb2w9IHZhcmlhbnQudmFsdWU8UU9iamVjdExpc3Q+KCk7CiAg
ICAgICAgIHJldHVybiBuZXcgKGV4ZWMpIFJ1bnRpbWVBcnJheShleGVjLCBuZXcgUXRBcnJheTxR
T2JqZWN0Kj4ob2wsIFFNZXRhVHlwZTo6UU9iamVjdFN0YXIsIHJvb3QpKTsKLSAgICB9IGVsc2Ug
aWYgKHR5cGUgPT0gKFFNZXRhVHlwZTo6VHlwZSlxTWV0YVR5cGVJZDxRTGlzdDxpbnQ+ID4oKSkg
eworICAgIH0KKyAgICBpZiAodHlwZSA9PSAoUU1ldGFUeXBlOjpUeXBlKXFNZXRhVHlwZUlkPFFM
aXN0PGludD4gPigpKSB7CiAgICAgICAgIFFMaXN0PGludD4gaWw9IHZhcmlhbnQudmFsdWU8UUxp
c3Q8aW50PiA+KCk7CiAgICAgICAgIHJldHVybiBuZXcgKGV4ZWMpIFJ1bnRpbWVBcnJheShleGVj
LCBuZXcgUXRBcnJheTxpbnQ+KGlsLCBRTWV0YVR5cGU6OkludCwgcm9vdCkpOwogICAgIH0KQEAg
LTk0MSwxNCArOTQzLDE0IEBAIEpTVmFsdWUgY29udmVydFFWYXJpYW50VG9WYWx1ZShFeGVjU3Rh
dGUKIC8vID09PT09PT09PT09PT09PQogCiAvLyBRdC1saWtlIG1hY3JvcwotI2RlZmluZSBRV19E
KENsYXNzKSBDbGFzcyMjRGF0YSogZCA9IGRfZnVuYygpCi0jZGVmaW5lIFFXX0RTKENsYXNzLElu
c3RhbmNlKSBDbGFzcyMjRGF0YSogZCA9IEluc3RhbmNlLT5kX2Z1bmMoKQorI2RlZmluZSBRV19E
KENsYXNzKSBDbGFzcyMjRGF0YSogZCA9IGRmdW5jKCkKKyNkZWZpbmUgUVdfRFMoQ2xhc3MsIElu
c3RhbmNlKSBDbGFzcyMjRGF0YSogZCA9IEluc3RhbmNlLT5kZnVuYygpCiAKIGNvbnN0IENsYXNz
SW5mbyBRdFJ1bnRpbWVNZXRob2Q6OnNfaW5mbyA9IHsgIlF0UnVudGltZU1ldGhvZCIsIDAsIDAs
IDAgfTsKIAogUXRSdW50aW1lTWV0aG9kOjpRdFJ1bnRpbWVNZXRob2QoUXRSdW50aW1lTWV0aG9k
RGF0YSogZGQsIEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYgaWRlbnQsIFBhc3NS
ZWZQdHI8UXRJbnN0YW5jZT4gaW5zdCkKICAgICA6IEludGVybmFsRnVuY3Rpb24oJmV4ZWMtPmds
b2JhbERhdGEoKSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBkZXByZWNhdGVkR2V0RE9N
U3RydWN0dXJlPFF0UnVudGltZU1ldGhvZD4oZXhlYyksIGlkZW50KQotICAgICwgZF9wdHIoZGQp
CisgICAgLCBkcHRyKGRkKQogewogICAgIFFXX0QoUXRSdW50aW1lTWV0aG9kKTsKICAgICBkLT5t
X2luc3RhbmNlID0gaW5zdDsKQEAgLTk1OCw3ICs5NjAsNyBAQCBRdFJ1bnRpbWVNZXRob2Q6On5R
dFJ1bnRpbWVNZXRob2QoKQogewogICAgIFFXX0QoUXRSdW50aW1lTWV0aG9kKTsKICAgICBkLT5t
X2luc3RhbmNlLT5yZW1vdmVDYWNoZWRNZXRob2QodGhpcyk7Ci0gICAgZGVsZXRlIGRfcHRyOwor
ICAgIGRlbGV0ZSBkcHRyOwogfQogCiAvLyA9PT09PT09PT09PT09PT0KQEAgLTk4MCw4ICs5ODIs
NyBAQCBRdFJ1bnRpbWVDb25uZWN0aW9uTWV0aG9kRGF0YTo6flF0UnVudGltCiAvLyA9PT09PT09
PT09PT09PT0KIAogLy8gVHlwZSBjb252ZXJzaW9uIG1ldGFkYXRhIChmcm9tIFF0U2NyaXB0IG9y
aWdpbmFsbHkpCi1jbGFzcyBRdE1ldGhvZE1hdGNoVHlwZQoteworY2xhc3MgUXRNZXRob2RNYXRj
aFR5cGUgewogcHVibGljOgogICAgIGVudW0gS2luZCB7CiAgICAgICAgIEludmFsaWQsCkBAIC0x
MDE4LDcgKzEwMTksMTAgQEAgcHVibGljOgogICAgIFFCeXRlQXJyYXkgbmFtZSgpIGNvbnN0Owog
CiAgICAgaW50IGVudW1lcmF0b3JJbmRleCgpIGNvbnN0Ci0gICAgeyBRX0FTU0VSVChpc01ldGFF
bnVtKCkpOyByZXR1cm4gbV90eXBlSWQ7IH0KKyAgICB7CisgICAgICAgIFFfQVNTRVJUKGlzTWV0
YUVudW0oKSk7CisgICAgICAgIHJldHVybiBtX3R5cGVJZDsKKyAgICB9CiAKICAgICBzdGF0aWMg
UXRNZXRob2RNYXRjaFR5cGUgdmFyaWFudCgpCiAgICAgeyByZXR1cm4gUXRNZXRob2RNYXRjaFR5
cGUoVmFyaWFudCk7IH0KQEAgLTEwNTIsMTMgKzEwNTYsMTIgQEAgUUJ5dGVBcnJheSBRdE1ldGhv
ZE1hdGNoVHlwZTo6bmFtZSgpIGNvbgogewogICAgIGlmICghbV9uYW1lLmlzRW1wdHkoKSkKICAg
ICAgICAgcmV0dXJuIG1fbmFtZTsKLSAgICBlbHNlIGlmIChtX2tpbmQgPT0gVmFyaWFudCkKKyAg
ICBpZiAobV9raW5kID09IFZhcmlhbnQpCiAgICAgICAgIHJldHVybiAiUVZhcmlhbnQiOwogICAg
IHJldHVybiBRQnl0ZUFycmF5KCk7CiB9CiAKLXN0cnVjdCBRdE1ldGhvZE1hdGNoRGF0YQotewor
c3RydWN0IFF0TWV0aG9kTWF0Y2hEYXRhIHsKICAgICBpbnQgbWF0Y2hEaXN0YW5jZTsKICAgICBp
bnQgaW5kZXg7CiAgICAgUVZlY3RvcjxRdE1ldGhvZE1hdGNoVHlwZT4gdHlwZXM7CkBAIC0xMDc1
LDcgKzEwNzgsNyBAQCBzdHJ1Y3QgUXRNZXRob2RNYXRjaERhdGEKIAogICAgIGludCBmaXJzdFVu
cmVzb2x2ZWRJbmRleCgpIGNvbnN0CiAgICAgewotICAgICAgICBmb3IgKGludCBpPTA7IGkgPCB0
eXBlcy5jb3VudCgpOyBpKyspIHsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB0eXBlcy5j
b3VudCgpOyBpKyspIHsKICAgICAgICAgICAgIGlmICh0eXBlcy5hdChpKS5pc1VucmVzb2x2ZWQo
KSkKICAgICAgICAgICAgICAgICByZXR1cm4gaTsKICAgICAgICAgfQpAQCAtMTE0Niw3ICsxMTQ5
LDcgQEAgc3RhdGljIGludCBmaW5kTWV0aG9kSW5kZXgoRXhlY1N0YXRlKiBleAogICAgIFFWZWN0
b3I8aW50PiB0b29GZXdBcmdzOwogICAgIFFWZWN0b3I8aW50PiBjb252ZXJzaW9uRmFpbGVkOwog
Ci0gICAgZm9yZWFjaChpbnQgaW5kZXgsIG1hdGNoaW5nSW5kaWNlcykgeworICAgIGZvcmVhY2gg
KGludCBpbmRleCwgbWF0Y2hpbmdJbmRpY2VzKSB7CiAgICAgICAgIFFNZXRhTWV0aG9kIG1ldGhv
ZCA9IG1ldGEtPm1ldGhvZChpbmRleCk7CiAKICAgICAgICAgUVZlY3RvcjxRdE1ldGhvZE1hdGNo
VHlwZT4gdHlwZXM7CkBAIC0xMTU1LDcgKzExNTgsNyBAQCBzdGF0aWMgaW50IGZpbmRNZXRob2RJ
bmRleChFeGVjU3RhdGUqIGV4CiAgICAgICAgIC8vIHJlc29sdmUgcmV0dXJuIHR5cGUKICAgICAg
ICAgUUJ5dGVBcnJheSByZXR1cm5UeXBlTmFtZSA9IG1ldGhvZC50eXBlTmFtZSgpOwogICAgICAg
ICBpbnQgcnR5cGUgPSBRTWV0YVR5cGU6OnR5cGUocmV0dXJuVHlwZU5hbWUpOwotICAgICAgICBp
ZiAoKHJ0eXBlID09IDApICYmICFyZXR1cm5UeXBlTmFtZS5pc0VtcHR5KCkpIHsKKyAgICAgICAg
aWYgKCFydHlwZSAmJiAhcmV0dXJuVHlwZU5hbWUuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICBp
ZiAocmV0dXJuVHlwZU5hbWUgPT0gIlFWYXJpYW50IikgewogICAgICAgICAgICAgICAgIHR5cGVz
LmFwcGVuZChRdE1ldGhvZE1hdGNoVHlwZTo6dmFyaWFudCgpKTsKICAgICAgICAgICAgIH0gZWxz
ZSBpZiAocmV0dXJuVHlwZU5hbWUuZW5kc1dpdGgoJyonKSkgewpAQCAtMTE4MSwxMCArMTE4NCwx
MCBAQCBzdGF0aWMgaW50IGZpbmRNZXRob2RJbmRleChFeGVjU3RhdGUqIGV4CiAgICAgICAgIGZv
ciAoaW50IGkgPSAwOyBpIDwgcGFyYW1ldGVyVHlwZU5hbWVzLmNvdW50KCk7ICsraSkgewogICAg
ICAgICAgICAgUUJ5dGVBcnJheSBhcmdUeXBlTmFtZSA9IHBhcmFtZXRlclR5cGVOYW1lcy5hdChp
KTsKICAgICAgICAgICAgIGludCBhdHlwZSA9IFFNZXRhVHlwZTo6dHlwZShhcmdUeXBlTmFtZSk7
Ci0gICAgICAgICAgICBpZiAoYXR5cGUgPT0gMCkgewotICAgICAgICAgICAgICAgIGlmIChhcmdU
eXBlTmFtZSA9PSAiUVZhcmlhbnQiKSB7CisgICAgICAgICAgICBpZiAoIWF0eXBlKSB7CisgICAg
ICAgICAgICAgICAgaWYgKGFyZ1R5cGVOYW1lID09ICJRVmFyaWFudCIpCiAgICAgICAgICAgICAg
ICAgICAgIHR5cGVzLmFwcGVuZChRdE1ldGhvZE1hdGNoVHlwZTo6dmFyaWFudCgpKTsKLSAgICAg
ICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAg
ICAgICAgICBpbnQgZW51bUluZGV4ID0gaW5kZXhPZk1ldGFFbnVtKG1ldGEsIGFyZ1R5cGVOYW1l
KTsKICAgICAgICAgICAgICAgICAgICAgaWYgKGVudW1JbmRleCAhPSAtMSkKICAgICAgICAgICAg
ICAgICAgICAgICAgIHR5cGVzLmFwcGVuZChRdE1ldGhvZE1hdGNoVHlwZTo6bWV0YUVudW0oZW51
bUluZGV4LCBhcmdUeXBlTmFtZSkpOwpAQCAtMTI0MiwyNCArMTI0NSwyMiBAQCBzdGF0aWMgaW50
IGZpbmRNZXRob2RJbmRleChFeGVjU3RhdGUqIGV4CiAgICAgICAgIHFNYXRjaERlYnVnKCkgPDwg
Ik1hdGNoOiAiIDw8IG1ldGhvZC5zaWduYXR1cmUoKSA8PCAoY29udmVydGVkID8gImNvbnZlcnRl
ZCI6ImZhaWxlZCB0byBjb252ZXJ0IikgPDwgImRpc3RhbmNlICIgPDwgbWF0Y2hEaXN0YW5jZTsK
IAogICAgICAgICBpZiAoY29udmVydGVkKSB7Ci0gICAgICAgICAgICBpZiAoKGpzQXJncy5zaXpl
KCkgKyAxID09IHN0YXRpY19jYXN0PHVuc2lnbmVkPih0eXBlcy5jb3VudCgpKSkKLSAgICAgICAg
ICAgICAgICAmJiAobWF0Y2hEaXN0YW5jZSA9PSAwKSkgeworICAgICAgICAgICAgaWYgKChqc0Fy
Z3Muc2l6ZSgpICsgMSA9PSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4odHlwZXMuY291bnQoKSkpICYm
ICFtYXRjaERpc3RhbmNlKSB7CiAgICAgICAgICAgICAgICAgLy8gcGVyZmVjdCBtYXRjaCwgdXNl
IHRoaXMgb25lCiAgICAgICAgICAgICAgICAgY2hvc2VuSW5kZXggPSBpbmRleDsKICAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgUXRN
ZXRob2RNYXRjaERhdGEgY3VycmVudE1hdGNoKG1hdGNoRGlzdGFuY2UsIGluZGV4LCB0eXBlcywg
YXJncyk7Ci0gICAgICAgICAgICAgICAgaWYgKGNhbmRpZGF0ZXMuaXNFbXB0eSgpKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIGNhbmRpZGF0ZXMuYXBwZW5kKGN1cnJlbnRNYXRjaCk7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBRdE1ldGhvZE1hdGNoRGF0YSBjdXJyZW50TWF0Y2gobWF0Y2hE
aXN0YW5jZSwgaW5kZXgsIHR5cGVzLCBhcmdzKTsKKyAgICAgICAgICAgIGlmIChjYW5kaWRhdGVz
LmlzRW1wdHkoKSkKKyAgICAgICAgICAgICAgICBjYW5kaWRhdGVzLmFwcGVuZChjdXJyZW50TWF0
Y2gpOworICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgUXRNZXRob2RNYXRjaERh
dGEgYmVzdE1hdGNoU29GYXIgPSBjYW5kaWRhdGVzLmF0KDApOworICAgICAgICAgICAgICAgIGlm
ICgoYXJncy5jb3VudCgpID4gYmVzdE1hdGNoU29GYXIuYXJncy5jb3VudCgpKQorICAgICAgICAg
ICAgICAgICAgICB8fCAoKGFyZ3MuY291bnQoKSA9PSBiZXN0TWF0Y2hTb0Zhci5hcmdzLmNvdW50
KCkpCisgICAgICAgICAgICAgICAgICAgICAgICAmJiAobWF0Y2hEaXN0YW5jZSA8PSBiZXN0TWF0
Y2hTb0Zhci5tYXRjaERpc3RhbmNlKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgY2FuZGlkYXRl
cy5wcmVwZW5kKGN1cnJlbnRNYXRjaCk7CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAg
ICAgICAgICAgICAgICAgUXRNZXRob2RNYXRjaERhdGEgYmVzdE1hdGNoU29GYXIgPSBjYW5kaWRh
dGVzLmF0KDApOwotICAgICAgICAgICAgICAgICAgICBpZiAoKGFyZ3MuY291bnQoKSA+IGJlc3RN
YXRjaFNvRmFyLmFyZ3MuY291bnQoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHx8ICgoYXJn
cy5jb3VudCgpID09IGJlc3RNYXRjaFNvRmFyLmFyZ3MuY291bnQoKSkKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAmJiAobWF0Y2hEaXN0YW5jZSA8PSBiZXN0TWF0Y2hTb0Zhci5tYXRjaERp
c3RhbmNlKSkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNhbmRpZGF0ZXMucHJlcGVuZChj
dXJyZW50TWF0Y2gpOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg
ICAgICAgICAgICAgY2FuZGlkYXRlcy5hcHBlbmQoY3VycmVudE1hdGNoKTsKLSAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBjYW5kaWRhdGVzLmFwcGVuZChjdXJyZW50
TWF0Y2gpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNl
IHsKQEAgLTEyNzAsNyArMTI3MSw3IEBAIHN0YXRpYyBpbnQgZmluZE1ldGhvZEluZGV4KEV4ZWNT
dGF0ZSogZXgKICAgICAgICAgICAgIGJyZWFrOwogICAgIH0KIAotICAgIGlmIChjaG9zZW5JbmRl
eCA9PSAtMSAmJiBjYW5kaWRhdGVzLmNvdW50KCkgPT0gMCkgeworICAgIGlmIChjaG9zZW5JbmRl
eCA9PSAtMSAmJiBjYW5kaWRhdGVzLmlzRW1wdHkoKSkgewogICAgICAgICAvLyBObyB2YWxpZCBm
dW5jdGlvbnMgYXQgYWxsIC0gZm9ybWF0IGFuIGVycm9yIG1lc3NhZ2UKICAgICAgICAgaWYgKCFj
b252ZXJzaW9uRmFpbGVkLmlzRW1wdHkoKSkgewogICAgICAgICAgICAgUVN0cmluZyBtZXNzYWdl
ID0gUVN0cmluZzo6ZnJvbUxhdGluMSgiaW5jb21wYXRpYmxlIHR5cGUgb2YgYXJndW1lbnQocykg
aW4gY2FsbCB0byAlMCgpOyBjYW5kaWRhdGVzIHdlcmVcbiIpCkBAIC0xMzMzLDcgKzEzMzQsNyBA
QCBzdGF0aWMgaW50IGZpbmRNZXRob2RJbmRleChFeGVjU3RhdGUqIGV4CiAgICAgICAgIC8qIENv
cHkgdGhlIHN0dWZmIG92ZXIgKi8KICAgICAgICAgaW50IGk7CiAgICAgICAgIHZhcnMucmVzaXpl
KGFyZ3MuY291bnQoKSk7Ci0gICAgICAgIGZvciAoaT0wOyBpIDwgYXJncy5jb3VudCgpOyBpKysp
IHsKKyAgICAgICAgZm9yIChpID0gMDsgaSA8IGFyZ3MuY291bnQoKTsgaSsrKSB7CiAgICAgICAg
ICAgICB2YXJzW2ldID0gYXJnc1tpXTsKICAgICAgICAgICAgIHZ2YXJzW2ldID0gdmFyc1tpXS5k
YXRhKCk7CiAgICAgICAgIH0KQEAgLTEzODAsNyArMTM4MSw3IEBAIHZvaWQgUXRSdW50aW1lTWV0
YU1ldGhvZDo6bWFya0NoaWxkcmVuKE0KIAogSlNWYWx1ZSBRdFJ1bnRpbWVNZXRhTWV0aG9kOjpj
YWxsKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIGZ1bmN0aW9uT2JqZWN0LCBKU1ZhbHVlLCBj
b25zdCBBcmdMaXN0JiBhcmdzKQogewotICAgIFF0UnVudGltZU1ldGFNZXRob2REYXRhKiBkID0g
c3RhdGljX2Nhc3Q8UXRSdW50aW1lTWV0YU1ldGhvZCAqPihmdW5jdGlvbk9iamVjdCktPmRfZnVu
YygpOworICAgIFF0UnVudGltZU1ldGFNZXRob2REYXRhKiBkID0gc3RhdGljX2Nhc3Q8UXRSdW50
aW1lTWV0YU1ldGhvZCAqPihmdW5jdGlvbk9iamVjdCktPmRmdW5jKCk7CiAKICAgICAvLyBXZSdy
ZSBsaW1pdGVkIHRvIDEwIGFyZ3MKICAgICBpZiAoYXJncy5zaXplKCkgPiAxMCkKQEAgLTEzODks
MTAgKzEzOTAsMTAgQEAgSlNWYWx1ZSBRdFJ1bnRpbWVNZXRhTWV0aG9kOjpjYWxsKEV4ZWNTdAog
ICAgIC8vIFdlIGhhdmUgdG8gcGljayBhIG1ldGhvZCB0aGF0IG1hdGNoZXMuLgogICAgIEpTTG9j
ayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CiAKLSAgICBRT2JqZWN0ICpvYmogPSBkLT5t
X2luc3RhbmNlLT5nZXRPYmplY3QoKTsKKyAgICBRT2JqZWN0KiBvYmogPSBkLT5tX2luc3RhbmNl
LT5nZXRPYmplY3QoKTsKICAgICBpZiAob2JqKSB7CiAgICAgICAgIFFWYXJMZW5ndGhBcnJheTxR
VmFyaWFudCwgMTA+IHZhcmdzOwotICAgICAgICB2b2lkICpxYXJnc1sxMV07CisgICAgICAgIHZv
aWQqIHFhcmdzWzExXTsKIAogICAgICAgICBpbnQgbWV0aG9kSW5kZXg7CiAgICAgICAgIEpTT2Jq
ZWN0KiBlcnJvck9iaiA9IDA7CkBAIC0xNDI1LDEwICsxNDI2LDEyIEBAIGJvb2wgUXRSdW50aW1l
TWV0YU1ldGhvZDo6Z2V0T3duUHJvcGVydHkKICAgICBpZiAocHJvcGVydHlOYW1lID09ICJjb25u
ZWN0IikgewogICAgICAgICBzbG90LnNldEN1c3RvbSh0aGlzLCBjb25uZWN0R2V0dGVyKTsKICAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfSBlbHNlIGlmIChwcm9wZXJ0eU5hbWUgPT0gImRpc2Nv
bm5lY3QiKSB7CisgICAgfQorICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gImRpc2Nvbm5lY3QiKSB7
CiAgICAgICAgIHNsb3Quc2V0Q3VzdG9tKHRoaXMsIGRpc2Nvbm5lY3RHZXR0ZXIpOwogICAgICAg
ICByZXR1cm4gdHJ1ZTsKLSAgICB9IGVsc2UgaWYgKHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9w
ZXJ0eU5hbWVzKCkubGVuZ3RoKSB7CisgICAgfQorICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gZXhl
Yy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCkgewogICAgICAgICBzbG90LnNldEN1c3RvbSh0aGlz
LCBsZW5ndGhHZXR0ZXIpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CkBAIC0xNTE1LDcg
KzE1MTgsNyBAQCBRdFJ1bnRpbWVDb25uZWN0aW9uTWV0aG9kOjpRdFJ1bnRpbWVDb25uCiAKIEpT
VmFsdWUgUXRSdW50aW1lQ29ubmVjdGlvbk1ldGhvZDo6Y2FsbChFeGVjU3RhdGUqIGV4ZWMsIEpT
T2JqZWN0KiBmdW5jdGlvbk9iamVjdCwgSlNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJncykKIHsK
LSAgICBRdFJ1bnRpbWVDb25uZWN0aW9uTWV0aG9kRGF0YSogZCA9IHN0YXRpY19jYXN0PFF0UnVu
dGltZUNvbm5lY3Rpb25NZXRob2QgKj4oZnVuY3Rpb25PYmplY3QpLT5kX2Z1bmMoKTsKKyAgICBR
dFJ1bnRpbWVDb25uZWN0aW9uTWV0aG9kRGF0YSogZCA9IHN0YXRpY19jYXN0PFF0UnVudGltZUNv
bm5lY3Rpb25NZXRob2QgKj4oZnVuY3Rpb25PYmplY3QpLT5kZnVuYygpOwogCiAgICAgSlNMb2Nr
IGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKIApAQCAtMTU0MSwxNSArMTU0NCwxNSBAQCBK
U1ZhbHVlIFF0UnVudGltZUNvbm5lY3Rpb25NZXRob2Q6OmNhbGwoCiAgICAgICAgICAgICAgICAg
aWYgKGZ1bmNPYmplY3QtPmdldENhbGxEYXRhKGNhbGxEYXRhKSA9PSBDYWxsVHlwZU5vbmUpIHsK
ICAgICAgICAgICAgICAgICAgICAgaWYgKGQtPm1faXNDb25uZWN0KQogICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgVHlwZUVycm9yLCAiUXRNZXRhTWV0aG9k
LmNvbm5lY3Q6IHRhcmdldCBpcyBub3QgYSBmdW5jdGlvbiIpOwotICAgICAgICAgICAgICAgICAg
ICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBU
eXBlRXJyb3IsICJRdE1ldGFNZXRob2QuZGlzY29ubmVjdDogdGFyZ2V0IGlzIG5vdCBhIGZ1bmN0
aW9uIik7CisKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgVHlw
ZUVycm9yLCAiUXRNZXRhTWV0aG9kLmRpc2Nvbm5lY3Q6IHRhcmdldCBpcyBub3QgYSBmdW5jdGlv
biIpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0gZWxzZSBpZiAoYXJncy5zaXpl
KCkgPj0gMikgewogICAgICAgICAgICAgICAgIGlmIChhcmdzLmF0KDApLmlzT2JqZWN0KCkpIHsK
ICAgICAgICAgICAgICAgICAgICAgdGhpc09iamVjdCA9IGFyZ3MuYXQoMCkudG9PYmplY3QoZXhl
Yyk7CiAKICAgICAgICAgICAgICAgICAgICAgLy8gR2V0IHRoZSBhY3R1YWwgZnVuY3Rpb24gdG8g
Y2FsbAotICAgICAgICAgICAgICAgICAgICBKU09iamVjdCAqYXNPYmogPSBhcmdzLmF0KDEpLnRv
T2JqZWN0KGV4ZWMpOworICAgICAgICAgICAgICAgICAgICBKU09iamVjdCogYXNPYmogPSBhcmdz
LmF0KDEpLnRvT2JqZWN0KGV4ZWMpOwogICAgICAgICAgICAgICAgICAgICBDYWxsRGF0YSBjYWxs
RGF0YTsKICAgICAgICAgICAgICAgICAgICAgaWYgKGFzT2JqLT5nZXRDYWxsRGF0YShjYWxsRGF0
YSkgIT0gQ2FsbFR5cGVOb25lKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBGdW5jdGlv
biB2ZXJzaW9uCkBAIC0xNTY0LDI2ICsxNTY3LDI2IEBAIEpTVmFsdWUgUXRSdW50aW1lQ29ubmVj
dGlvbk1ldGhvZDo6Y2FsbCgKICAgICAgICAgICAgICAgICAgICAgICAgIEpTVmFsdWUgdmFsID0g
dGhpc09iamVjdC0+Z2V0KGV4ZWMsIGZ1bmNJZGVudCk7CiAgICAgICAgICAgICAgICAgICAgICAg
ICBKU09iamVjdCogYXNGdW5jT2JqID0gdmFsLnRvT2JqZWN0KGV4ZWMpOwogCi0gICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoYXNGdW5jT2JqLT5nZXRDYWxsRGF0YShjYWxsRGF0YSkgIT0gQ2Fs
bFR5cGVOb25lKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXNGdW5jT2JqLT5nZXRD
YWxsRGF0YShjYWxsRGF0YSkgIT0gQ2FsbFR5cGVOb25lKQogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGZ1bmNPYmplY3QgPSBhc0Z1bmNPYmo7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKGQtPm1faXNDb25uZWN0KQogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBUeXBlRXJyb3IsICJRdE1ldGFNZXRob2Qu
Y29ubmVjdDogdGFyZ2V0IGlzIG5vdCBhIGZ1bmN0aW9uIik7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhy
b3dFcnJvcihleGVjLCBUeXBlRXJyb3IsICJRdE1ldGFNZXRob2QuZGlzY29ubmVjdDogdGFyZ2V0
IGlzIG5vdCBhIGZ1bmN0aW9uIik7CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm4gdGhyb3dFcnJvcihleGVjLCBUeXBlRXJyb3IsICJRdE1ldGFNZXRob2QuZGlzY29ubmVjdDog
dGFyZ2V0IGlzIG5vdCBhIGZ1bmN0aW9uIik7CiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAg
ICAgICAgICAgICBpZiAoZC0+bV9pc0Nvbm5lY3QpCiAgICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gdGhyb3dFcnJvcihleGVjLCBUeXBlRXJyb3IsICJRdE1ldGFNZXRob2QuY29ubmVjdDog
dGhpc09iamVjdCBpcyBub3QgYW4gb2JqZWN0Iik7Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UK
LSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFR5cGVFcnJv
ciwgIlF0TWV0YU1ldGhvZC5kaXNjb25uZWN0OiB0aGlzT2JqZWN0IGlzIG5vdCBhbiBvYmplY3Qi
KTsKKworICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBUeXBlRXJy
b3IsICJRdE1ldGFNZXRob2QuZGlzY29ubmVjdDogdGhpc09iamVjdCBpcyBub3QgYW4gb2JqZWN0
Iik7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAg
ICAgICBpZiAoZC0+bV9pc0Nvbm5lY3QpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aHJv
d0Vycm9yKGV4ZWMsIEdlbmVyYWxFcnJvciwgIlF0TWV0YU1ldGhvZC5jb25uZWN0OiBubyBhcmd1
bWVudHMgZ2l2ZW4iKTsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAg
IHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIEdlbmVyYWxFcnJvciwgIlF0TWV0YU1ldGhvZC5kaXNj
b25uZWN0OiBubyBhcmd1bWVudHMgZ2l2ZW4iKTsKKworICAgICAgICAgICAgICAgIHJldHVybiB0
aHJvd0Vycm9yKGV4ZWMsIEdlbmVyYWxFcnJvciwgIlF0TWV0YU1ldGhvZC5kaXNjb25uZWN0OiBu
byBhcmd1bWVudHMgZ2l2ZW4iKTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgaWYgKGQt
Pm1faXNDb25uZWN0KSB7CkBAIC0xNjAyLDE2ICsxNjA1LDE0IEBAIEpTVmFsdWUgUXRSdW50aW1l
Q29ubmVjdGlvbk1ldGhvZDo6Y2FsbCgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuYXJn
KFFMYXRpbjFTdHJpbmcoZC0+bV9zaWduYXR1cmUpKTsKICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIHRocm93RXJyb3IoZXhlYywgR2VuZXJhbEVycm9yLCBtc2cudG9MYXRpbjEoKS5jb25zdERh
dGEoKSk7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAg
ICAgICAgICAgICAgICAvLyBTdG9yZSBjb25uZWN0aW9uCi0gICAgICAgICAgICAgICAgICAgIGNv
bm5lY3Rpb25zLmluc2VydChzZW5kZXIsIGNvbm4pOwotICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICAvLyBTdG9yZSBjb25uZWN0aW9uCisgICAgICAgICAgICAgICAgY29ubmVjdGlv
bnMuaW5zZXJ0KHNlbmRlciwgY29ubik7CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAg
ICAgICAgIC8vIE5vdyB0byBmaW5kIG91ciBwcmV2aW91cyBjb25uZWN0aW9uIG9iamVjdC4gSG1t
LgogICAgICAgICAgICAgICAgIFFMaXN0PFF0Q29ubmVjdGlvbk9iamVjdCo+IGNvbm5zID0gY29u
bmVjdGlvbnMudmFsdWVzKHNlbmRlcik7CiAgICAgICAgICAgICAgICAgYm9vbCByZXQgPSBmYWxz
ZTsKIAotICAgICAgICAgICAgICAgIGZvcmVhY2goUXRDb25uZWN0aW9uT2JqZWN0KiBjb25uLCBj
b25ucykgeworICAgICAgICAgICAgICAgIGZvcmVhY2ggKFF0Q29ubmVjdGlvbk9iamVjdCogY29u
biwgY29ubnMpIHsKICAgICAgICAgICAgICAgICAgICAgLy8gSXMgdGhpcyB0aGUgcmlnaHQgY29u
bmVjdGlvbj8KICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbm4tPm1hdGNoKHNlbmRlciwgc2ln
bmFsSW5kZXgsIHRoaXNPYmplY3QsIGZ1bmNPYmplY3QpKSB7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAvLyBZZXAsIGRpc2Nvbm5lY3QgaXQKQEAgLTE3MDUsMTkgKzE3MDYsMTggQEAgUXRDb25u
ZWN0aW9uT2JqZWN0Ojp+UXRDb25uZWN0aW9uT2JqZWN0KAogfQogCiBzdGF0aWMgY29uc3QgdWlu
dCBxdF9tZXRhX2RhdGFfUXRDb25uZWN0aW9uT2JqZWN0W10gPSB7CisgICAgLy8gY29udGVudDoK
KyAgICAxLCAvLyByZXZpc2lvbgorICAgIDAsIC8vIGNsYXNzbmFtZQorICAgIDAsIDAsIC8vIGNs
YXNzaW5mbworICAgIDEsIDEwLCAvLyBtZXRob2RzCisgICAgMCwgMCwgLy8gcHJvcGVydGllcwor
ICAgIDAsIDAsIC8vIGVudW1zL3NldHMKIAotIC8vIGNvbnRlbnQ6Ci0gICAgICAgMSwgICAgICAg
Ly8gcmV2aXNpb24KLSAgICAgICAwLCAgICAgICAvLyBjbGFzc25hbWUKLSAgICAgICAwLCAgICAw
LCAvLyBjbGFzc2luZm8KLSAgICAgICAxLCAgIDEwLCAvLyBtZXRob2RzCi0gICAgICAgMCwgICAg
MCwgLy8gcHJvcGVydGllcwotICAgICAgIDAsICAgIDAsIC8vIGVudW1zL3NldHMKKyAgICAvLyBz
bG90czogc2lnbmF0dXJlLCBwYXJhbWV0ZXJzLCB0eXBlLCB0YWcsIGZsYWdzCisgICAgMjgsIDI3
LCAyNywgMjcsIDB4MGEsCiAKLSAvLyBzbG90czogc2lnbmF0dXJlLCBwYXJhbWV0ZXJzLCB0eXBl
LCB0YWcsIGZsYWdzCi0gICAgICAyOCwgICAyNywgICAyNywgICAyNywgMHgwYSwKLQotICAgICAg
IDAgICAgICAgIC8vIGVvZAorICAgIDAgLy8gZW9kCiB9OwogCiBzdGF0aWMgY29uc3QgY2hhciBx
dF9tZXRhX3N0cmluZ2RhdGFfUXRDb25uZWN0aW9uT2JqZWN0W10gPSB7CkBAIC0xNzI5LDM0ICsx
NzI5LDM1IEBAIGNvbnN0IFFNZXRhT2JqZWN0IFF0Q29ubmVjdGlvbk9iamVjdDo6c3QKICAgICAg
IHF0X21ldGFfZGF0YV9RdENvbm5lY3Rpb25PYmplY3QsIDAgfQogfTsKIAotY29uc3QgUU1ldGFP
YmplY3QgKlF0Q29ubmVjdGlvbk9iamVjdDo6bWV0YU9iamVjdCgpIGNvbnN0Citjb25zdCBRTWV0
YU9iamVjdCogUXRDb25uZWN0aW9uT2JqZWN0OjptZXRhT2JqZWN0KCkgY29uc3QKIHsKICAgICBy
ZXR1cm4gJnN0YXRpY01ldGFPYmplY3Q7CiB9CiAKLXZvaWQgKlF0Q29ubmVjdGlvbk9iamVjdDo6
cXRfbWV0YWNhc3QoY29uc3QgY2hhciAqX2NsbmFtZSkKK3ZvaWQqIFF0Q29ubmVjdGlvbk9iamVj
dDo6cXRfbWV0YWNhc3QoY29uc3QgY2hhciogY2xuYW1lKQogewotICAgIGlmICghX2NsbmFtZSkg
cmV0dXJuIDA7Ci0gICAgaWYgKCFzdHJjbXAoX2NsbmFtZSwgcXRfbWV0YV9zdHJpbmdkYXRhX1F0
Q29ubmVjdGlvbk9iamVjdCkpCisgICAgaWYgKCFjbG5hbWUpCisgICAgICAgIHJldHVybiAwOwor
ICAgIGlmICghc3RyY21wKGNsbmFtZSwgcXRfbWV0YV9zdHJpbmdkYXRhX1F0Q29ubmVjdGlvbk9i
amVjdCkpCiAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDx2b2lkKj4oY29uc3RfY2FzdDxRdENv
bm5lY3Rpb25PYmplY3QqPih0aGlzKSk7Ci0gICAgcmV0dXJuIFFPYmplY3Q6OnF0X21ldGFjYXN0
KF9jbG5hbWUpOworICAgIHJldHVybiBRT2JqZWN0OjpxdF9tZXRhY2FzdChjbG5hbWUpOwogfQog
Ci1pbnQgUXRDb25uZWN0aW9uT2JqZWN0OjpxdF9tZXRhY2FsbChRTWV0YU9iamVjdDo6Q2FsbCBf
YywgaW50IF9pZCwgdm9pZCAqKl9hKQoraW50IFF0Q29ubmVjdGlvbk9iamVjdDo6cXRfbWV0YWNh
bGwoUU1ldGFPYmplY3Q6OkNhbGwgYywgaW50IGlkLCB2b2lkKiogYSkKIHsKLSAgICBfaWQgPSBR
T2JqZWN0OjpxdF9tZXRhY2FsbChfYywgX2lkLCBfYSk7Ci0gICAgaWYgKF9pZCA8IDApCi0gICAg
ICAgIHJldHVybiBfaWQ7Ci0gICAgaWYgKF9jID09IFFNZXRhT2JqZWN0OjpJbnZva2VNZXRhTWV0
aG9kKSB7Ci0gICAgICAgIHN3aXRjaCAoX2lkKSB7Ci0gICAgICAgIGNhc2UgMDogZXhlY3V0ZShf
YSk7IGJyZWFrOworICAgIGlkID0gUU9iamVjdDo6cXRfbWV0YWNhbGwoYywgaWQsIGEpOworICAg
IGlmIChpZCA8IDApCisgICAgICAgIHJldHVybiBpZDsKKyAgICBpZiAoYyA9PSBRTWV0YU9iamVj
dDo6SW52b2tlTWV0YU1ldGhvZCkgeworICAgICAgICBzd2l0Y2ggKGlkKSB7CisgICAgICAgIGNh
c2UgMDogZXhlY3V0ZShhKTsgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgX2lkIC09IDE7Cisg
ICAgICAgIGlkIC09IDE7CiAgICAgfQotICAgIHJldHVybiBfaWQ7CisgICAgcmV0dXJuIGlkOwog
fQogCi12b2lkIFF0Q29ubmVjdGlvbk9iamVjdDo6ZXhlY3V0ZSh2b2lkICoqYXJndikKK3ZvaWQg
UXRDb25uZWN0aW9uT2JqZWN0OjpleGVjdXRlKHZvaWQqKiBhcmd2KQogewogICAgIFFPYmplY3Qq
IG9iaiA9IG1faW5zdGFuY2UtPmdldE9iamVjdCgpOwogICAgIGlmIChvYmopIHsKQEAgLTE3Nzcs
MTYgKzE3NzgsMTYgQEAgdm9pZCBRdENvbm5lY3Rpb25PYmplY3Q6OmV4ZWN1dGUodm9pZCAqKgog
ICAgICAgICAgICAgICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGdsb2JhbG9iai0+Z2xvYmFsRXhlYygp
OwogICAgICAgICAgICAgICAgIGlmIChleGVjKSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIEJ1
aWxkIHRoZSBhcmd1bWVudCBsaXN0ICh1cCB0byB0aGUgZm9ybWFsIGFyZ3VtZW50IGxlbmd0aCBv
ZiB0aGUgc2xvdCkKLSAgICAgICAgICAgICAgICAgICAgTWFya2VkQXJndW1lbnRCdWZmZXIgbDsK
KyAgICAgICAgICAgICAgICAgICAgTWFya2VkQXJndW1lbnRCdWZmZXIgYnVmZmVyOwogICAgICAg
ICAgICAgICAgICAgICAvLyAjIyMgRHJvcEFsbExvY2tzPwogICAgICAgICAgICAgICAgICAgICBp
bnQgZnVuY0FyZ0MgPSBtX2Z1bmNPYmplY3QtPmdldChleGVjLCBleGVjLT5wcm9wZXJ0eU5hbWVz
KCkubGVuZ3RoKS50b0ludDMyKGV4ZWMpOwogICAgICAgICAgICAgICAgICAgICBpbnQgYXJnVG90
YWwgPSBxTWF4KGZ1bmNBcmdDLCBhcmdjKTsKLSAgICAgICAgICAgICAgICAgICAgZm9yKGludCBp
PTA7IGkgPCBhcmdUb3RhbDsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGkg
PSAwOyBpIDwgYXJnVG90YWw7IGkrKykgewogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGkg
PCBhcmdjKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGFyZ1R5cGUgPSBRTWV0
YVR5cGU6OnR5cGUocGFyYW1ldGVyVHlwZXMuYXQoaSkpOwotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGwuYXBwZW5kKGNvbnZlcnRRVmFyaWFudFRvVmFsdWUoZXhlYywgcm8sIFFWYXJpYW50
KGFyZ1R5cGUsIGFyZ3ZbaSsxXSkpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZm
ZXIuYXBwZW5kKGNvbnZlcnRRVmFyaWFudFRvVmFsdWUoZXhlYywgcm8sIFFWYXJpYW50KGFyZ1R5
cGUsIGFyZ3ZbaSsxXSkpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbC5hcHBlbmQoanNVbmRlZmluZWQoKSk7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYnVmZmVyLmFwcGVuZChqc1VuZGVmaW5lZCgpKTsKICAgICAg
ICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgICAgICBDYWxsRGF0YSBjYWxsRGF0YTsKQEAgLTE4MDQsMTAgKzE4MDUsMTAgQEAgdm9pZCBR
dENvbm5lY3Rpb25PYmplY3Q6OmV4ZWN1dGUodm9pZCAqKgogICAgICAgICAgICAgICAgICAgICAg
ICAgc2MucHVzaCh3cmFwcGVyKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGZpbXAtPnNldFNj
b3BlKHNjKTsKIAotICAgICAgICAgICAgICAgICAgICAgICAgY2FsbChleGVjLCBmaW1wLCBjYWxs
VHlwZSwgY2FsbERhdGEsIG1fdGhpc09iamVjdCwgbCk7CisgICAgICAgICAgICAgICAgICAgICAg
ICBjYWxsKGV4ZWMsIGZpbXAsIGNhbGxUeXBlLCBjYWxsRGF0YSwgbV90aGlzT2JqZWN0LCBidWZm
ZXIpOwogICAgICAgICAgICAgICAgICAgICAgICAgZmltcC0+c2V0U2NvcGUob2xkc2MpOwogICAg
ICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgY2FsbChl
eGVjLCBtX2Z1bmNPYmplY3QsIGNhbGxUeXBlLCBjYWxsRGF0YSwgbV90aGlzT2JqZWN0LCBsKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGNhbGwoZXhlYywgbV9mdW5jT2JqZWN0LCBjYWxsVHlw
ZSwgY2FsbERhdGEsIG1fdGhpc09iamVjdCwgYnVmZmVyKTsKICAgICAgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KQEAgLTE4MTgsNyArMTgxOSw3IEBA
IHZvaWQgUXRDb25uZWN0aW9uT2JqZWN0OjpleGVjdXRlKHZvaWQgKioKICAgICB9CiB9CiAKLWJv
b2wgUXRDb25uZWN0aW9uT2JqZWN0OjptYXRjaChRT2JqZWN0KiBzZW5kZXIsIGludCBzaWduYWxJ
bmRleCwgSlNPYmplY3QqIHRoaXNPYmplY3QsIEpTT2JqZWN0ICpmdW5jT2JqZWN0KQorYm9vbCBR
dENvbm5lY3Rpb25PYmplY3Q6Om1hdGNoKFFPYmplY3QqIHNlbmRlciwgaW50IHNpZ25hbEluZGV4
LCBKU09iamVjdCogdGhpc09iamVjdCwgSlNPYmplY3QqIGZ1bmNPYmplY3QpCiB7CiAgICAgaWYg
KG1fb3JpZ2luYWxPYmplY3QgPT0gc2VuZGVyICYmIG1fc2lnbmFsSW5kZXggPT0gc2lnbmFsSW5k
ZXgKICAgICAgICAgJiYgdGhpc09iamVjdCA9PSAoSlNPYmplY3QqKW1fdGhpc09iamVjdCAmJiBm
dW5jT2JqZWN0ID09IChKU09iamVjdCopbV9mdW5jT2JqZWN0KQpAQCAtMTgzNiw3ICsxODM3LDcg
QEAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IFF0QXJyYXk8VD46OlF0QXJyYQogICAgIG1fbGVuZ3Ro
ID0gbV9saXN0LmNvdW50KCk7CiB9CiAKLXRlbXBsYXRlIDx0eXBlbmFtZSBUPiBRdEFycmF5PFQ+
Ojp+UXRBcnJheSAoKQordGVtcGxhdGUgPHR5cGVuYW1lIFQ+IFF0QXJyYXk8VD46On5RdEFycmF5
KCkKIHsKIH0KIApAQCAtMTg1MywxMyArMTg1NCwxMiBAQCB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4g
dm9pZCBRdEFycmF5PFQ+OjpzCiAgICAgaW50IGRpc3QgPSAtMTsKICAgICBRVmFyaWFudCB2YWwg
PSBjb252ZXJ0VmFsdWVUb1FWYXJpYW50KGV4ZWMsIGFWYWx1ZSwgbV90eXBlLCAmZGlzdCk7CiAK
LSAgICBpZiAoZGlzdCA+PSAwKSB7CisgICAgaWYgKGRpc3QgPj0gMCkKICAgICAgICAgbV9saXN0
W2luZGV4XSA9IHZhbC52YWx1ZTxUPigpOwotICAgIH0KIH0KIAogCi10ZW1wbGF0ZSA8dHlwZW5h
bWUgVD4gSlNWYWx1ZSBRdEFycmF5PFQ+Ojp2YWx1ZUF0KEV4ZWNTdGF0ZSAqZXhlYywgdW5zaWdu
ZWQgaW50IGluZGV4KSBjb25zdAordGVtcGxhdGUgPHR5cGVuYW1lIFQ+IEpTVmFsdWUgUXRBcnJh
eTxUPjo6dmFsdWVBdChFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGludCBpbmRleCkgY29uc3QK
IHsKICAgICBpZiAoaW5kZXggPCBtX2xlbmd0aCkgewogICAgICAgICBUIHZhbCA9IG1fbGlzdC5h
dChpbmRleCk7CkluZGV4OiBXZWJDb3JlL2JyaWRnZS9xdC9xdF9ydW50aW1lLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9icmlkZ2UvcXQvcXRfcnVudGltZS5oCShyZXZpc2lvbiA2MDA5NSkKKysr
IFdlYkNvcmUvYnJpZGdlL3F0L3F0X3J1bnRpbWUuaAkod29ya2luZyBjb3B5KQpAQCAtMTcsOCAr
MTcsOCBAQAogICoKICAqLwogCi0jaWZuZGVmIEJJTkRJTkdTX1FUX1JVTlRJTUVfSF8KLSNkZWZp
bmUgQklORElOR1NfUVRfUlVOVElNRV9IXworI2lmbmRlZiBxdF9ydW50aW1lX2gKKyNkZWZpbmUg
cXRfcnVudGltZV9oCiAKICNpbmNsdWRlICJCcmlkZ2UuaCIKICNpbmNsdWRlICJDb21wbGV0aW9u
LmgiCkBAIC03Miw4ICs3Miw3IEBAIHByaXZhdGU6CiB9OwogCiAKLWNsYXNzIFF0TWV0aG9kIDog
cHVibGljIE1ldGhvZAoteworY2xhc3MgUXRNZXRob2QgOiBwdWJsaWMgTWV0aG9kIHsKIHB1Ymxp
YzoKICAgICBRdE1ldGhvZChjb25zdCBRTWV0YU9iamVjdCAqbW8sIGludCBpLCBjb25zdCBRQnl0
ZUFycmF5ICZpZGVudCwgaW50IG51bVBhcmFtZXRlcnMpCiAgICAgICAgIDogbV9tZXRhT2JqZWN0
KG1vKSwKQEAgLTk0LDggKzkzLDcgQEAgcHJpdmF0ZToKIH07CiAKIAotdGVtcGxhdGUgPHR5cGVu
YW1lIFQ+IGNsYXNzIFF0QXJyYXkgOiBwdWJsaWMgQXJyYXkKLXsKK3RlbXBsYXRlIDx0eXBlbmFt
ZSBUPiBjbGFzcyBRdEFycmF5IDogcHVibGljIEFycmF5IHsKIHB1YmxpYzoKICAgICBRdEFycmF5
KFFMaXN0PFQ+IGxpc3QsIFFNZXRhVHlwZTo6VHlwZSB0eXBlLCBQYXNzUmVmUHRyPFJvb3RPYmpl
Y3Q+KTsKICAgICB2aXJ0dWFsIH5RdEFycmF5KCk7CkBAIC0xNjEsMTMgKzE1OSwxMiBAQCBwdWJs
aWM6CiBwcm90ZWN0ZWQ6CiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdz
ID0gT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgT3ZlcnJpZGVzR2V0UHJvcGVydHlOYW1l
cyB8IEludGVybmFsRnVuY3Rpb246OlN0cnVjdHVyZUZsYWdzIHwgT3ZlcnJpZGVzTWFya0NoaWxk
cmVuOwogCi0gICAgUXRSdW50aW1lTWV0aG9kRGF0YSAqZF9mdW5jKCkgY29uc3Qge3JldHVybiBk
X3B0cjt9CisgICAgUXRSdW50aW1lTWV0aG9kRGF0YSAqZGZ1bmMoKSBjb25zdCB7cmV0dXJuIGRw
dHI7fQogICAgIFF0UnVudGltZU1ldGhvZChRdFJ1bnRpbWVNZXRob2REYXRhICpkZCwgRXhlY1N0
YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyICZuLCBQYXNzUmVmUHRyPFF0SW5zdGFuY2U+IGlu
c3QpOwotICAgIFF0UnVudGltZU1ldGhvZERhdGEgKmRfcHRyOworICAgIFF0UnVudGltZU1ldGhv
ZERhdGEgKmRwdHI7CiB9OwogCi1jbGFzcyBRdFJ1bnRpbWVNZXRhTWV0aG9kIDogcHVibGljIFF0
UnVudGltZU1ldGhvZAoteworY2xhc3MgUXRSdW50aW1lTWV0YU1ldGhvZCA6IHB1YmxpYyBRdFJ1
bnRpbWVNZXRob2QgewogcHVibGljOgogICAgIFF0UnVudGltZU1ldGFNZXRob2QoRXhlY1N0YXRl
ICpleGVjLCBjb25zdCBJZGVudGlmaWVyICZuLCBQYXNzUmVmUHRyPFF0SW5zdGFuY2U+IGluc3Qs
IGludCBpbmRleCwgY29uc3QgUUJ5dGVBcnJheSYgc2lnbmF0dXJlLCBib29sIGFsbG93UHJpdmF0
ZSk7CiAKQEAgLTE3OCw3ICsxNzUsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIG1hcmtD
aGlsZHJlbihNYXJrU3RhY2smIG1hcmtTdGFjayk7CiAKIHByb3RlY3RlZDoKLSAgICBRdFJ1bnRp
bWVNZXRhTWV0aG9kRGF0YSogZF9mdW5jKCkgY29uc3Qge3JldHVybiByZWludGVycHJldF9jYXN0
PFF0UnVudGltZU1ldGFNZXRob2REYXRhKj4oZF9wdHIpO30KKyAgICBRdFJ1bnRpbWVNZXRhTWV0
aG9kRGF0YSogZGZ1bmMoKSBjb25zdCB7cmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8UXRSdW50aW1l
TWV0YU1ldGhvZERhdGEqPihkcHRyKTt9CiAKIHByaXZhdGU6CiAgICAgdmlydHVhbCBDYWxsVHlw
ZSBnZXRDYWxsRGF0YShDYWxsRGF0YSYpOwpAQCAtMTg5LDE3ICsxODYsMTYgQEAgcHJpdmF0ZToK
IH07CiAKIGNsYXNzIFF0Q29ubmVjdGlvbk9iamVjdDsKLWNsYXNzIFF0UnVudGltZUNvbm5lY3Rp
b25NZXRob2QgOiBwdWJsaWMgUXRSdW50aW1lTWV0aG9kCi17CitjbGFzcyBRdFJ1bnRpbWVDb25u
ZWN0aW9uTWV0aG9kIDogcHVibGljIFF0UnVudGltZU1ldGhvZCB7CiBwdWJsaWM6Ci0gICAgUXRS
dW50aW1lQ29ubmVjdGlvbk1ldGhvZChFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXIg
Jm4sIGJvb2wgaXNDb25uZWN0LCBQYXNzUmVmUHRyPFF0SW5zdGFuY2U+IGluc3QsIGludCBpbmRl
eCwgY29uc3QgUUJ5dGVBcnJheSYgc2lnbmF0dXJlICk7CisgICAgUXRSdW50aW1lQ29ubmVjdGlv
bk1ldGhvZChFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXIgJm4sIGJvb2wgaXNDb25u
ZWN0LCBQYXNzUmVmUHRyPFF0SW5zdGFuY2U+IGluc3QsIGludCBpbmRleCwgY29uc3QgUUJ5dGVB
cnJheSYgc2lnbmF0dXJlKTsKIAogICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3Qo
RXhlY1N0YXRlICosIGNvbnN0IElkZW50aWZpZXImLCBQcm9wZXJ0eVNsb3QmKTsKICAgICB2aXJ0
dWFsIGJvb2wgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50
aWZpZXImLCBQcm9wZXJ0eURlc2NyaXB0b3ImKTsKICAgICB2aXJ0dWFsIHZvaWQgZ2V0T3duUHJv
cGVydHlOYW1lcyhFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9k
ZSBtb2RlID0gRXhjbHVkZURvbnRFbnVtUHJvcGVydGllcyk7CiAKIHByb3RlY3RlZDoKLSAgICBR
dFJ1bnRpbWVDb25uZWN0aW9uTWV0aG9kRGF0YSogZF9mdW5jKCkgY29uc3Qge3JldHVybiByZWlu
dGVycHJldF9jYXN0PFF0UnVudGltZUNvbm5lY3Rpb25NZXRob2REYXRhKj4oZF9wdHIpO30KKyAg
ICBRdFJ1bnRpbWVDb25uZWN0aW9uTWV0aG9kRGF0YSogZGZ1bmMoKSBjb25zdCB7cmV0dXJuIHJl
aW50ZXJwcmV0X2Nhc3Q8UXRSdW50aW1lQ29ubmVjdGlvbk1ldGhvZERhdGEqPihkcHRyKTt9CiAK
IHByaXZhdGU6CiAgICAgdmlydHVhbCBDYWxsVHlwZSBnZXRDYWxsRGF0YShDYWxsRGF0YSYpOwpA
QCAtMjA5LDggKzIwNSw3IEBAIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIFF0Q29ubmVjdGlv
bk9iamVjdDsKIH07CiAKLWNsYXNzIFF0Q29ubmVjdGlvbk9iamVjdDogcHVibGljIFFPYmplY3QK
LXsKK2NsYXNzIFF0Q29ubmVjdGlvbk9iamVjdDogcHVibGljIFFPYmplY3QgewogcHVibGljOgog
ICAgIFF0Q29ubmVjdGlvbk9iamVjdChQYXNzUmVmUHRyPFF0SW5zdGFuY2U+IGluc3RhbmNlLCBp
bnQgc2lnbmFsSW5kZXgsIEpTT2JqZWN0KiB0aGlzT2JqZWN0LCBKU09iamVjdCogZnVuY09iamVj
dCk7CiAgICAgflF0Q29ubmVjdGlvbk9iamVjdCgpOwo=
</data>

          </attachment>
      

    </bug>

</bugzilla>