<?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>138340</bug_id>
          
          <creation_ts>2014-11-03 17:35:16 -0800</creation_ts>
          <short_desc>Implement yellow highlight over data detected items</short_desc>
          <delta_ts>2014-11-04 12:46:00 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit2</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Tim Horton">thorton</reporter>
          <assigned_to name="Tim Horton">thorton</assigned_to>
          <cc>andersca</cc>
    
    <cc>bdakin</cc>
    
    <cc>buildbot</cc>
    
    <cc>commit-queue</cc>
    
    <cc>conrad_shultz</cc>
    
    <cc>mitz</cc>
    
    <cc>rniwa</cc>
    
    <cc>sam</cc>
    
    <cc>simon.fraser</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1045915</commentid>
    <comment_count>0</comment_count>
    <who name="Tim Horton">thorton</who>
    <bug_when>2014-11-03 17:35:16 -0800</bug_when>
    <thetext>&lt;rdar://problem/18840102&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1045917</commentid>
    <comment_count>1</comment_count>
      <attachid>240887</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2014-11-03 17:36:16 -0800</bug_when>
    <thetext>Created attachment 240887
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1045919</commentid>
    <comment_count>2</comment_count>
      <attachid>240889</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2014-11-03 17:40:05 -0800</bug_when>
    <thetext>Created attachment 240889
rebase</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1045920</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-11-03 17:41:25 -0800</bug_when>
    <thetext>Attachment 240889 did not pass style-queue:


ERROR: Source/WebKit2/UIProcess/mac/WKActionMenuController.mm:357:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Total errors found: 1 in 26 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1045933</commentid>
    <comment_count>4</comment_count>
    <who name="Tim Horton">thorton</who>
    <bug_when>2014-11-03 18:15:29 -0800</bug_when>
    <thetext>Andersca sez &quot;use unique_ptr for TextIndicator&quot; and &quot;make sure there&apos;s not a refcycle with the completion block&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1045966</commentid>
    <comment_count>5</comment_count>
      <attachid>240903</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2014-11-03 20:10:01 -0800</bug_when>
    <thetext>Created attachment 240903
patch

un-did the un-refcounting of TextIndicator; we can switch to unique_ptr later if we want.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1045968</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-11-03 20:13:02 -0800</bug_when>
    <thetext>Attachment 240903 did not pass style-queue:


ERROR: Source/WebKit2/UIProcess/mac/WKActionMenuController.mm:358:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Total errors found: 1 in 17 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1046126</commentid>
    <comment_count>7</comment_count>
    <who name="Tim Horton">thorton</who>
    <bug_when>2014-11-04 11:43:09 -0800</bug_when>
    <thetext>http://trac.webkit.org/changeset/175564</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1046146</commentid>
    <comment_count>8</comment_count>
    <who name="Tim Horton">thorton</who>
    <bug_when>2014-11-04 12:46:00 -0800</bug_when>
    <thetext>And http://trac.webkit.org/changeset/175568</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>240887</attachid>
            <date>2014-11-03 17:36:16 -0800</date>
            <delta_ts>2014-11-03 17:40:05 -0800</delta_ts>
            <desc>patch</desc>
            <filename>dd-indicator.diff</filename>
            <type>text/plain</type>
            <size>68196</size>
            <attacher name="Tim Horton">thorton</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA2YmRmNTk2Li41ZmM3N2QyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQg
QEAKKzIwMTQtMTEtMDMgIFRpbSBIb3J0b24gIDx0aW1vdGh5X2hvcnRvbkBhcHBsZS5jb20+CisK
KyAgICAgICAgSW1wbGVtZW50IHllbGxvdyBoaWdobGlnaHQgb3ZlciBkYXRhIGRldGVjdGVkIGl0
ZW1zCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzgz
NDAKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzE4ODQwMTAyPgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogcGxhdGZvcm0vc3BpL21hYy9EYXRhRGV0
ZWN0b3JzU1BJLmg6CisgICAgICAgIEFkZCBjb21wbGV0aW9uSGFuZGxlciBTUEkuCisKIDIwMTQt
MTEtMDMgIEFuZHJlYXMgS2xpbmcgIDxha2xpbmdAYXBwbGUuY29tPgogCiAgICAgICAgIFJlbmRl
ckNvdW50ZXIgc2hvdWxkbid0IG5lZWQgYSBwcmUtZGVzdHJ1Y3RvciBob29rLgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vc3BpL21hYy9EYXRhRGV0ZWN0b3JzU1BJLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9zcGkvbWFjL0RhdGFEZXRlY3RvcnNTUEkuaAppbmRleCBm
NTI4MjUwLi5lNmQwODU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9zcGkv
bWFjL0RhdGFEZXRlY3RvcnNTUEkuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9zcGkv
bWFjL0RhdGFEZXRlY3RvcnNTUEkuaApAQCAtNjYsNiArNjYsNyBAQCBTT0ZUX0xJTktfQ0xBU1Mo
RGF0YURldGVjdG9ycywgRERBY3Rpb25zTWFuYWdlcikKIEBwcm9wZXJ0eSBOU1JlY3QgaGlnaGxp
Z2h0RnJhbWU7CiBAcHJvcGVydHkgKHJldGFpbikgTlNBcnJheSAqYWxsUmVzdWx0czsKIEBwcm9w
ZXJ0eSAocmV0YWluKSBfX2F0dHJpYnV0ZV9fKChOU09iamVjdCkpIEREUmVzdWx0UmVmIG1haW5S
ZXN1bHQ7CitAcHJvcGVydHkgKGNvcHkpIHZvaWQgKF5jb21wbGV0aW9uSGFuZGxlcikodm9pZCk7
CiAKIEBlbmQKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nIGIvU291cmNl
L1dlYktpdDIvQ2hhbmdlTG9nCmluZGV4IDMyNjUzZjIuLjk5YjE3MGUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKQEAg
LTEsNSArMSw5OSBAQAogMjAxNC0xMS0wMyAgVGltIEhvcnRvbiAgPHRpbW90aHlfaG9ydG9uQGFw
cGxlLmNvbT4KIAorICAgICAgICBJbXBsZW1lbnQgeWVsbG93IGhpZ2hsaWdodCBvdmVyIGRhdGEg
ZGV0ZWN0ZWQgaXRlbXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTEzODM0MAorICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTg4NDAxMDI+CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBTaGFyZWQvVGV4dElu
ZGljYXRvci5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvVGV4dElu
ZGljYXRvci5jcHAuCisgICAgICAgICogU2hhcmVkL1RleHRJbmRpY2F0b3IuaDogUmVuYW1lZCBm
cm9tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9UZXh0SW5kaWNhdG9yLmguCisgICAgICAgIE1v
dmUgVGV4dEluZGljYXRvciB0byBTaGFyZWQuCisgICAgICAgIEltcGxlbWVudCBlbmNvZGUvZGVj
b2RlIGZvciBpdCwgc28gaXQgY2FuIGJlIHBhc3NlZCBhcyB0aGUgYXJndW1lbnQgdG8gU2V0VGV4
dEluZGljYXRvci4KKyAgICAgICAgTWFrZSBpdCBub3QgcmVmLWNvdW50ZWQgYW55bW9yZSwgYW5k
IGFkanVzdCB1c2VycyBhY2NvcmRpbmdseS4KKyAgICAgICAgQWRkICdpbmRpY2F0b3JXaXRoU2Vs
ZWN0aW9uSW5GcmFtZScsIHdoaWNoIGJ1aWxkcyBhIFRleHRJbmRpY2F0b3IKKyAgICAgICAgZnJv
bSB0aGUgc2VsZWN0aW9uIGluIHRoZSBnaXZlbiBmcmFtZS4KKworICAgICAgICAqIFNoYXJlZC9t
YWMvQWN0aW9uTWVudUhpdFRlc3RSZXN1bHQuaDoKKyAgICAgICAgKiBTaGFyZWQvbWFjL0FjdGlv
bk1lbnVIaXRUZXN0UmVzdWx0Lm1tOgorICAgICAgICAoV2ViS2l0OjpBY3Rpb25NZW51SGl0VGVz
dFJlc3VsdDo6ZW5jb2RlKToKKyAgICAgICAgKFdlYktpdDo6QWN0aW9uTWVudUhpdFRlc3RSZXN1
bHQ6OmRlY29kZSk6CisgICAgICAgIFJlbmFtZSBhY3Rpb25Cb3VuZGluZ0JveCB0byBkZXRlY3Rl
ZERhdGFCb3VuZGluZ0JveC4KKyAgICAgICAgU3RvcmUvZW5jb2RlL2RlY29kZSBkZXRlY3RlZERh
dGFUZXh0SW5kaWNhdG9yLgorCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9tYWMvV0tWaWV3Lm1t
OgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvbWFjL1dLVmlld0ludGVybmFsLmg6CisgICAgICAg
ICogVUlQcm9jZXNzL1BhZ2VDbGllbnQuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvaW9zL1BhZ2VD
bGllbnRJbXBsSU9TLmg6CisgICAgICAgICogVUlQcm9jZXNzL2lvcy9QYWdlQ2xpZW50SW1wbElP
Uy5tbToKKyAgICAgICAgKFdlYktpdDo6UGFnZUNsaWVudEltcGw6OnNldFRleHRJbmRpY2F0b3Ip
OgorICAgICAgICAqIFVJUHJvY2Vzcy9tYWMvUGFnZUNsaWVudEltcGwuaDoKKyAgICAgICAgKiBV
SVByb2Nlc3MvbWFjL1BhZ2VDbGllbnRJbXBsLm1tOgorICAgICAgICAoV2ViS2l0OjpQYWdlQ2xp
ZW50SW1wbDo6c2V0VGV4dEluZGljYXRvcik6CisgICAgICAgIChXZWJLaXQ6OlBhZ2VDbGllbnRJ
bXBsOjpuYXZpZ2F0aW9uR2VzdHVyZURpZEJlZ2luKToKKyAgICAgICAgKiBVSVByb2Nlc3MvbWFj
L1RleHRJbmRpY2F0b3JXaW5kb3cuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvbWFjL1RleHRJbmRp
Y2F0b3JXaW5kb3cubW06CisgICAgICAgICgtW1dLVGV4dEluZGljYXRvclZpZXcgX2luaXRXaXRo
VGV4dEluZGljYXRvcjpdKToKKyAgICAgICAgKC1bV0tUZXh0SW5kaWNhdG9yVmlldyBkcmF3UmVj
dDpdKToKKyAgICAgICAgKFdlYktpdDo6VGV4dEluZGljYXRvcldpbmRvdzo6c2V0VGV4dEluZGlj
YXRvcik6CisgICAgICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHA6CisgICAgICAgIChX
ZWJLaXQ6OldlYlBhZ2VQcm94eTo6c2V0VGV4dEluZGljYXRvcik6CisgICAgICAgICogVUlQcm9j
ZXNzL1dlYlBhZ2VQcm94eS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdlUHJveHkubWVz
c2FnZXMuaW46CisgICAgICAgIEFkanVzdCB0byB0aGUgbmV3IG5vbi1yZWZjb3VudGVkIGRpcmVj
dGx5LWVuY29kZWQgVGV4dEluZGljYXRvci4KKyAgICAgICAgCisgICAgICAgICogVUlQcm9jZXNz
L21hYy9XS0FjdGlvbk1lbnVDb250cm9sbGVyLmg6CisgICAgICAgICogVUlQcm9jZXNzL21hYy9X
S0FjdGlvbk1lbnVDb250cm9sbGVyLm1tOgorICAgICAgICAoLVtXS0FjdGlvbk1lbnVDb250cm9s
bGVyIHByZXBhcmVGb3JNZW51OndpdGhFdmVudDpdKToKKyAgICAgICAgSWYgdGhlIHRleHQgaW5k
aWNhdG9yIGlzIHVwIHdoZW4gcHJlcGFyaW5nIGZvciBhIG5ldyBtZW51IGludm9jYXRpb24sIGhp
ZGUgaXQuCisKKyAgICAgICAgKC1bV0tBY3Rpb25NZW51Q29udHJvbGxlciB3aWxsT3Blbk1lbnU6
d2l0aEV2ZW50Ol0pOgorICAgICAgICBTaG93IHRoZSB0ZXh0IGluZGljYXRvciB3aGVuIHRoZSBt
ZW51IG9wZW5zLCBmb3IgZGF0YSBkZXRlY3RlZCBpdGVtcy4KKworICAgICAgICAoLVtXS0FjdGlv
bk1lbnVDb250cm9sbGVyIGRpZENsb3NlTWVudTp3aXRoRXZlbnQ6XSk6CisgICAgICAgIEhpZGUg
dGhlIHRleHQgaW5kaWNhdG9yIHdoZW4gdGhlIG1lbnUgY2xvc2VzLCB1bmxlc3Mgd2Ugb25seSBo
YWQgb25lIGl0ZW0uCisgICAgICAgIFRoZW4sIHdlJ2xsIGhpZGUgaXQgaW4gdGhlIEREQWN0aW9u
Q29udGV4dCBjb21wbGV0aW9uSGFuZGxlciBibG9jay4KKyAgICAgICAgCisgICAgICAgICgtW1dL
QWN0aW9uTWVudUNvbnRyb2xsZXIgX3Nob3dUZXh0SW5kaWNhdG9yXSk6CisgICAgICAgICgtW1dL
QWN0aW9uTWVudUNvbnRyb2xsZXIgX2hpZGVUZXh0SW5kaWNhdG9yXSk6CisgICAgICAgIEFkZGVk
LiBTaG93IGFuZCBoaWRlIHRoZSB0ZXh0IGluZGljYXRvciBiYXNlZCBvbiB0aGUgVGV4dEluZGlj
YXRvcgorICAgICAgICBkYXRhIGluY2x1ZGVkIGluIHRoZSBhY3Rpb24gbWVudSBoaXQgdGVzdCBy
ZXN1bHQuCisKKyAgICAgICAgKC1bV0tBY3Rpb25NZW51Q29udHJvbGxlciBfZGVmYXVsdE1lbnVJ
dGVtc0ZvckRhdGFEZXRlY3RlZFRleHRdKToKKyAgICAgICAgSGlkZSB0aGUgdGV4dCBpbmRpY2F0
b3Igd2hlbiB0aGUgZGF0YSBkZXRlY3RvciBwb3BvdmVyIGNvbXBsZXRlcy4KKworICAgICAgICAq
IFdlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBXZWJQcm9jZXNz
L1dlYlBhZ2UvRmluZENvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViS2l0OjpGaW5kQ29udHJv
bGxlcjo6Z2V0SW1hZ2VGb3JGaW5kTWF0Y2gpOgorICAgICAgICBNYWtlIHVzZSBvZiB0aGUgbmV3
bHktbW92ZWQgY3JlYXRlU2VsZWN0aW9uU25hcHNob3QuCisKKyAgICAgICAgKFdlYktpdDo6Rmlu
ZENvbnRyb2xsZXI6OnVwZGF0ZUZpbmRJbmRpY2F0b3IpOgorICAgICAgICBNYWtlIHVzZSBvZiBU
ZXh0SW5kaWNhdG9yOjppbmRpY2F0b3JXaXRoU2VsZWN0aW9uSW5GcmFtZSwgd2hpY2ggYWxsb3dz
CisgICAgICAgIHVzIHRvIHNoYXJlIHRoaXMgY29kZSBmb3IgYnVpbGRpbmcgYSBUZXh0SW5kaWNh
dG9yIHdpdGggb3RoZXIgY2FsbGVycy4KKworICAgICAgICAoV2ViS2l0OjpGaW5kQ29udHJvbGxl
cjo6aGlkZUZpbmRJbmRpY2F0b3IpOgorCisgICAgICAgIChXZWJLaXQ6OmdldEZpbmRJbmRpY2F0
b3JCaXRtYXApOiBEZWxldGVkLgorICAgICAgICBNb3ZlIGdldEZpbmRJbmRpY2F0b3JCaXRtYXAg
dG8gV2ViRnJhbWU6OmNyZWF0ZVNlbGVjdGlvblNuYXBzaG90LgorCisgICAgICAgICogV2ViUHJv
Y2Vzcy9XZWJQYWdlL1dlYkZyYW1lLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViRnJhbWU6OmNy
ZWF0ZVNlbGVjdGlvblNuYXBzaG90KToKKyAgICAgICAgTW92ZWQgZnJvbSBGaW5kQ29udHJvbGxl
cidzIGdldEZpbmRJbmRpY2F0b3JCaXRtYXAuCisgICAgICAgIE5vdyByZXR1cm5zIGEgU2hhcmVh
YmxlQml0bWFwIGluc3RlYWQgb2YgZ29pbmcgYWhlYWQgYW5kIG1ha2luZyBhIEhhbmRsZS4KKwor
ICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJGcmFtZS5oOgorICAgICAgICAqIFdlYlBy
b2Nlc3MvV2ViUGFnZS9tYWMvV2ViUGFnZU1hYy5tbToKKyAgICAgICAgKFdlYktpdDo6c2NhbkZv
ckRhdGFEZXRlY3RlZEl0ZW1zKToKKyAgICAgICAgKFdlYktpdDo6dGV4dEluZGljYXRvckZvclJh
bmdlKToKKyAgICAgICAgVGVtcG9yYXJpbHkgY2hhbmdlIHRoZSBzZWxlY3Rpb24gdG8gdGhlIGdp
dmVuIHJhbmdlLCB0aGVuIHVzZQorICAgICAgICBUZXh0SW5kaWNhdG9yOjppbmRpY2F0b3JXaXRo
U2VsZWN0aW9uSW5GcmFtZSB0byBhY3F1aXJlIGEgVGV4dEluZGljYXRvciwKKyAgICAgICAgdGhl
biByZXNldCB0aGUgc2VsZWN0aW9uLgorCisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OnBlcmZv
cm1BY3Rpb25NZW51SGl0VGVzdEF0TG9jYXRpb24pOgorICAgICAgICBDcmVhdGUgYSBUZXh0SW5k
aWNhdG9yIGZyb20gdGhlIGRhdGEgZGV0ZWN0ZWQgcmFuZ2UuCisKKzIwMTQtMTEtMDMgIFRpbSBI
b3J0b24gIDx0aW1vdGh5X2hvcnRvbkBhcHBsZS5jb20+CisKICAgICAgICAgX2FjdGlvbk1lbnVJ
dGVtc0ZvckhpdFRlc3RSZXN1bHQgaXMgZ2l2ZW4ga1dLQWN0aW9uTWVudUxpbmsgYnV0IGFuIGVt
cHR5IGFycmF5IG9mIGRlZmF1bHRNZW51SXRlbXMKICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTEzODMyMQogICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTg4
NTUxMzQ+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvVGV4dEluZGljYXRvci5j
cHAgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvVGV4dEluZGljYXRvci5jcHAKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjNkNmNmNAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1NoYXJlZC9UZXh0SW5kaWNhdG9yLmNwcApAQCAtMCwwICsxLDM0MSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJUZXh0SW5kaWNhdG9yLmgi
CisKKyNpbmNsdWRlICJBcmd1bWVudENvZGVyc0NGLmgiCisjaW5jbHVkZSAiQXJndW1lbnREZWNv
ZGVyLmgiCisjaW5jbHVkZSAiQXJndW1lbnRFbmNvZGVyLmgiCisjaW5jbHVkZSAiU2hhcmVhYmxl
Qml0bWFwLmgiCisjaW5jbHVkZSAiV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgiCisjaW5jbHVkZSAi
V2ViRnJhbWUuaCIKKyNpbmNsdWRlICJXZWJQYWdlLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9GcmFt
ZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRnJhbWVTZWxlY3Rpb24uaD4KKyNpbmNsdWRlIDxXZWJD
b3JlL0ZyYW1lVmlldy5oPgorI2luY2x1ZGUgPFdlYkNvcmUvR2VvbWV0cnlVdGlsaXRpZXMuaD4K
KyNpbmNsdWRlIDxXZWJDb3JlL0dyYWRpZW50Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9HcmFwaGlj
c0NvbnRleHQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0ludFJlY3QuaD4KKyNpbmNsdWRlIDxXZWJD
b3JlL1BhdGguaD4KKworI2lmIFBMQVRGT1JNKE1BQykgJiYgX19NQUNfT1NfWF9WRVJTSU9OX01J
Tl9SRVFVSVJFRCA8IDEwMTAwMAorI2RlZmluZSBFTkFCTEVfTEVHQUNZX1RFWFRfSU5ESUNBVE9S
X1NUWUxFIDEKKyNlbHNlCisjZGVmaW5lIEVOQUJMRV9MRUdBQ1lfVEVYVF9JTkRJQ0FUT1JfU1RZ
TEUgMAorI2VuZGlmCisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCisjaWYgRU5BQkxFKExF
R0FDWV9URVhUX0lORElDQVRPUl9TVFlMRSkKK3N0YXRpYyBjb25zdCBmbG9hdCBjb3JuZXJSYWRp
dXMgPSAzLjA7CisKK3N0YXRpYyBjb25zdCBmbG9hdCBzaGFkb3dPZmZzZXRYID0gMC4wOworc3Rh
dGljIGNvbnN0IGZsb2F0IHNoYWRvd09mZnNldFkgPSAxLjA7CitzdGF0aWMgY29uc3QgZmxvYXQg
c2hhZG93Qmx1clJhZGl1cyA9IDMuMDsKKworc3RhdGljIGNvbnN0IGludCBzaGFkb3dSZWQgPSAw
Oworc3RhdGljIGNvbnN0IGludCBzaGFkb3dHcmVlbiA9IDA7CitzdGF0aWMgY29uc3QgaW50IHNo
YWRvd0JsdWUgPSAwOworc3RhdGljIGNvbnN0IGludCBzaGFkb3dBbHBoYSA9IDIwNDsKKworc3Rh
dGljIGNvbnN0IGZsb2F0IGxpZ2h0Qm9yZGVyVGhpY2tuZXNzID0gMS4wOworc3RhdGljIGNvbnN0
IGZsb2F0IGhvcml6b250YWxQYWRkaW5nSW5zaWRlTGlnaHRCb3JkZXIgPSAzLjA7CitzdGF0aWMg
Y29uc3QgZmxvYXQgdmVydGljYWxQYWRkaW5nSW5zaWRlTGlnaHRCb3JkZXIgPSAxLjA7CisKK3N0
YXRpYyBjb25zdCBmbG9hdCBob3Jpem9udGFsQm9yZGVySW5zaWRlU2hhZG93ID0gbGlnaHRCb3Jk
ZXJUaGlja25lc3MgKyBob3Jpem9udGFsUGFkZGluZ0luc2lkZUxpZ2h0Qm9yZGVyOworc3RhdGlj
IGNvbnN0IGZsb2F0IHZlcnRpY2FsQm9yZGVySW5zaWRlU2hhZG93ID0gbGlnaHRCb3JkZXJUaGlj
a25lc3MgKyB2ZXJ0aWNhbFBhZGRpbmdJbnNpZGVMaWdodEJvcmRlcjsKKworc3RhdGljIGNvbnN0
IGZsb2F0IGxlZnRCb3JkZXJUaGlja25lc3MgPSBob3Jpem9udGFsQm9yZGVySW5zaWRlU2hhZG93
ICsgc2hhZG93T2Zmc2V0WCArIHNoYWRvd0JsdXJSYWRpdXMgLyAyLjA7CitzdGF0aWMgY29uc3Qg
ZmxvYXQgdG9wQm9yZGVyVGhpY2tuZXNzID0gdmVydGljYWxCb3JkZXJJbnNpZGVTaGFkb3cgLSBz
aGFkb3dPZmZzZXRZICsgc2hhZG93Qmx1clJhZGl1cyAvIDIuMDsKK3N0YXRpYyBjb25zdCBmbG9h
dCByaWdodEJvcmRlclRoaWNrbmVzcyA9IGhvcml6b250YWxCb3JkZXJJbnNpZGVTaGFkb3cgLSBz
aGFkb3dPZmZzZXRYICsgc2hhZG93Qmx1clJhZGl1cyAvIDIuMDsKK3N0YXRpYyBjb25zdCBmbG9h
dCBib3R0b21Cb3JkZXJUaGlja25lc3MgPSB2ZXJ0aWNhbEJvcmRlckluc2lkZVNoYWRvdyArIHNo
YWRvd09mZnNldFkgKyBzaGFkb3dCbHVyUmFkaXVzIC8gMi4wOworCitzdGF0aWMgY29uc3QgZmxv
YXQgaG9yaXpvbnRhbE91dHNldFRvQ2VudGVyT2ZMaWdodEJvcmRlciA9IGhvcml6b250YWxCb3Jk
ZXJJbnNpZGVTaGFkb3cgLSBsaWdodEJvcmRlclRoaWNrbmVzcyAvIDIuMDsKK3N0YXRpYyBjb25z
dCBmbG9hdCB2ZXJ0aWNhbE91dHNldFRvQ2VudGVyT2ZMaWdodEJvcmRlciA9IHZlcnRpY2FsQm9y
ZGVySW5zaWRlU2hhZG93IC0gbGlnaHRCb3JkZXJUaGlja25lc3MgLyAyLjA7CisKK3N0YXRpYyBj
b25zdCBpbnQgbGlnaHRCb3JkZXJSZWQgPSAyNDU7CitzdGF0aWMgY29uc3QgaW50IGxpZ2h0Qm9y
ZGVyR3JlZW4gPSAyMzA7CitzdGF0aWMgY29uc3QgaW50IGxpZ2h0Qm9yZGVyQmx1ZSA9IDA7Citz
dGF0aWMgY29uc3QgaW50IGxpZ2h0Qm9yZGVyQWxwaGEgPSAyNTU7CisKK3N0YXRpYyBjb25zdCBp
bnQgZ3JhZGllbnREYXJrUmVkID0gMjM3Oworc3RhdGljIGNvbnN0IGludCBncmFkaWVudERhcmtH
cmVlbiA9IDIwNDsKK3N0YXRpYyBjb25zdCBpbnQgZ3JhZGllbnREYXJrQmx1ZSA9IDA7CitzdGF0
aWMgY29uc3QgaW50IGdyYWRpZW50RGFya0FscGhhID0gMjU1OworCitzdGF0aWMgY29uc3QgaW50
IGdyYWRpZW50TGlnaHRSZWQgPSAyNDI7CitzdGF0aWMgY29uc3QgaW50IGdyYWRpZW50TGlnaHRH
cmVlbiA9IDIzOTsKK3N0YXRpYyBjb25zdCBpbnQgZ3JhZGllbnRMaWdodEJsdWUgPSAwOworc3Rh
dGljIGNvbnN0IGludCBncmFkaWVudExpZ2h0QWxwaGEgPSAyNTU7CisjZWxzZQorY29uc3QgZmxv
YXQgZmxhdFN0eWxlSG9yaXpvbnRhbEJvcmRlciA9IDI7Citjb25zdCBmbG9hdCBmbGF0U3R5bGVW
ZXJ0aWNhbEJvcmRlciA9IDE7Citjb25zdCBmbG9hdCBmbGF0U2hhZG93T2Zmc2V0WCA9IDA7Citj
b25zdCBmbG9hdCBmbGF0U2hhZG93T2Zmc2V0WSA9IDU7Citjb25zdCBmbG9hdCBmbGF0U2hhZG93
Qmx1clJhZGl1cyA9IDI1OworY29uc3QgZmxvYXQgZmxhdFJpbVNoYWRvd0JsdXJSYWRpdXMgPSAy
OworI2VuZGlmCisKK25hbWVzcGFjZSBXZWJLaXQgeworCitzdGF0aWMgRmxvYXRSZWN0IGluZmxh
dGVSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgaW5mbGF0ZVgsIGZsb2F0IGluZmxh
dGVZKQoreworICAgIEZsb2F0UmVjdCBpbmZsYXRlZFJlY3QgPSByZWN0OworICAgIGluZmxhdGVk
UmVjdC5pbmZsYXRlWChpbmZsYXRlWCk7CisgICAgaW5mbGF0ZWRSZWN0LmluZmxhdGVZKGluZmxh
dGVZKTsKKyAgICByZXR1cm4gaW5mbGF0ZWRSZWN0OworfQorCitzdGF0aWMgRmxvYXRSZWN0IG91
dHNldEluZGljYXRvclJlY3RJbmNsdWRpbmdTaGFkb3coY29uc3QgRmxvYXRSZWN0IHJlY3QpCit7
CisjaWYgRU5BQkxFKExFR0FDWV9URVhUX0lORElDQVRPUl9TVFlMRSkKKyAgICBGbG9hdFJlY3Qg
b3V0c2V0UmVjdCA9IHJlY3Q7CisgICAgb3V0c2V0UmVjdC5tb3ZlKC1sZWZ0Qm9yZGVyVGhpY2tu
ZXNzLCAtdG9wQm9yZGVyVGhpY2tuZXNzKTsKKyAgICBvdXRzZXRSZWN0LmV4cGFuZChsZWZ0Qm9y
ZGVyVGhpY2tuZXNzICsgcmlnaHRCb3JkZXJUaGlja25lc3MsIHRvcEJvcmRlclRoaWNrbmVzcyAr
IGJvdHRvbUJvcmRlclRoaWNrbmVzcyk7CisgICAgcmV0dXJuIG91dHNldFJlY3Q7CisjZWxzZQor
ICAgIHJldHVybiBpbmZsYXRlUmVjdChyZWN0LCBmbGF0U2hhZG93Qmx1clJhZGl1cyArIGZsYXRT
dHlsZUhvcml6b250YWxCb3JkZXIsIGZsYXRTaGFkb3dCbHVyUmFkaXVzICsgZmxhdFN0eWxlVmVy
dGljYWxCb3JkZXIpOworI2VuZGlmCit9CisKK3N0YXRpYyBib29sIHRleHRJbmRpY2F0b3JzRm9y
VGV4dFJlY3RzT3ZlcmxhcChjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYgdGV4dFJlY3RzKQorewor
ICAgIHNpemVfdCBjb3VudCA9IHRleHRSZWN0cy5zaXplKCk7CisgICAgaWYgKGNvdW50IDw9IDEp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIFZlY3RvcjxGbG9hdFJlY3Q+IGluZGljYXRv
clJlY3RzOworICAgIGluZGljYXRvclJlY3RzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoY291bnQp
OworCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7CisgICAgICAgIEZs
b2F0UmVjdCBpbmRpY2F0b3JSZWN0ID0gb3V0c2V0SW5kaWNhdG9yUmVjdEluY2x1ZGluZ1NoYWRv
dyh0ZXh0UmVjdHNbaV0pOworCisgICAgICAgIGZvciAoc2l6ZV90IGogPSBpbmRpY2F0b3JSZWN0
cy5zaXplKCk7IGo7ICkgeworICAgICAgICAgICAgLS1qOworICAgICAgICAgICAgaWYgKGluZGlj
YXRvclJlY3QuaW50ZXJzZWN0cyhpbmRpY2F0b3JSZWN0c1tqXSkpCisgICAgICAgICAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgICAgIH0KKworICAgICAgICBpbmRpY2F0b3JSZWN0cy51bmNoZWNr
ZWRBcHBlbmQoaW5kaWNhdG9yUmVjdCk7CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworfQor
CitUZXh0SW5kaWNhdG9yOjpUZXh0SW5kaWNhdG9yKCkKK3sKK30KKworVGV4dEluZGljYXRvcjo6
VGV4dEluZGljYXRvcihjb25zdCBGbG9hdFJlY3QmIHNlbGVjdGlvblJlY3RJbldpbmRvd0Nvb3Jk
aW5hdGVzLCBjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYgdGV4dFJlY3RzSW5TZWxlY3Rpb25SZWN0
Q29vcmRpbmF0ZXMsIGZsb2F0IGNvbnRlbnRJbWFnZVNjYWxlRmFjdG9yLCBQYXNzUmVmUHRyPFNo
YXJlYWJsZUJpdG1hcD4gY29udGVudEltYWdlKQorICAgIDogbV9zZWxlY3Rpb25SZWN0SW5XaW5k
b3dDb29yZGluYXRlcyhzZWxlY3Rpb25SZWN0SW5XaW5kb3dDb29yZGluYXRlcykKKyAgICAsIG1f
dGV4dFJlY3RzSW5TZWxlY3Rpb25SZWN0Q29vcmRpbmF0ZXModGV4dFJlY3RzSW5TZWxlY3Rpb25S
ZWN0Q29vcmRpbmF0ZXMpCisgICAgLCBtX2NvbnRlbnRJbWFnZVNjYWxlRmFjdG9yKGNvbnRlbnRJ
bWFnZVNjYWxlRmFjdG9yKQorICAgICwgbV9jb250ZW50SW1hZ2UoY29udGVudEltYWdlKQorewor
ICAgIEFTU0VSVChtX2NvbnRlbnRJbWFnZVNjYWxlRmFjdG9yICE9IDEgfHwgbV9jb250ZW50SW1h
Z2UtPnNpemUoKSA9PSBlbmNsb3NpbmdJbnRSZWN0KG1fc2VsZWN0aW9uUmVjdEluV2luZG93Q29v
cmRpbmF0ZXMpLnNpemUoKSk7CisKKyAgICBpZiAodGV4dEluZGljYXRvcnNGb3JUZXh0UmVjdHNP
dmVybGFwKG1fdGV4dFJlY3RzSW5TZWxlY3Rpb25SZWN0Q29vcmRpbmF0ZXMpKSB7CisgICAgICAg
IG1fdGV4dFJlY3RzSW5TZWxlY3Rpb25SZWN0Q29vcmRpbmF0ZXNbMF0gPSB1bmlvblJlY3QobV90
ZXh0UmVjdHNJblNlbGVjdGlvblJlY3RDb29yZGluYXRlcyk7CisgICAgICAgIG1fdGV4dFJlY3Rz
SW5TZWxlY3Rpb25SZWN0Q29vcmRpbmF0ZXMuc2hyaW5rKDEpOworICAgIH0KK30KKworVGV4dElu
ZGljYXRvciBUZXh0SW5kaWNhdG9yOjppbmRpY2F0b3JXaXRoU2VsZWN0aW9uSW5GcmFtZShXZWJG
cmFtZSYgZnJhbWUpCit7CisgICAgRnJhbWUmIGNvcmVGcmFtZSA9ICpmcmFtZS5jb3JlRnJhbWUo
KTsKKyAgICBJbnRSZWN0IHNlbGVjdGlvblJlY3QgPSBlbmNsb3NpbmdJbnRSZWN0KGNvcmVGcmFt
ZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb25Cb3VuZHMoKSk7CisgICAgUmVmUHRyPFNoYXJlYWJsZUJp
dG1hcD4gaW5kaWNhdG9yQml0bWFwID0gZnJhbWUuY3JlYXRlU2VsZWN0aW9uU25hcHNob3QoKTsK
KyAgICBpZiAoIWluZGljYXRvckJpdG1hcCkKKyAgICAgICAgcmV0dXJuIFRleHRJbmRpY2F0b3Io
KTsKKworICAgIC8vIFdlIHdhbnQgdGhlIHNlbGVjdGlvbiByZWN0IGluIHdpbmRvdyBjb29yZGlu
YXRlcy4KKyAgICBJbnRSZWN0IHNlbGVjdGlvblJlY3RJbldpbmRvd0Nvb3JkaW5hdGVzID0gY29y
ZUZyYW1lLnZpZXcoKS0+Y29udGVudHNUb1dpbmRvdyhzZWxlY3Rpb25SZWN0KTsKKworICAgIFZl
Y3RvcjxGbG9hdFJlY3Q+IHRleHRSZWN0czsKKyAgICBjb3JlRnJhbWUuc2VsZWN0aW9uKCkuZ2V0
Q2xpcHBlZFZpc2libGVUZXh0UmVjdGFuZ2xlcyh0ZXh0UmVjdHMpOworCisgICAgLy8gV2Ugd2Fu
dCB0aGUgdGV4dCByZWN0cyBpbiBzZWxlY3Rpb24gcmVjdCBjb29yZGluYXRlcy4KKyAgICBWZWN0
b3I8RmxvYXRSZWN0PiB0ZXh0UmVjdHNJblNlbGVjdGlvblJlY3RDb29yZGluYXRlczsKKworICAg
IGZvciAoY29uc3QgRmxvYXRSZWN0JiB0ZXh0UmVjdCA6IHRleHRSZWN0cykgeworICAgICAgICBJ
bnRSZWN0IHRleHRSZWN0SW5TZWxlY3Rpb25SZWN0Q29vcmRpbmF0ZXMgPSBjb3JlRnJhbWUudmll
dygpLT5jb250ZW50c1RvV2luZG93KGVuY2xvc2luZ0ludFJlY3QodGV4dFJlY3QpKTsKKyAgICAg
ICAgdGV4dFJlY3RJblNlbGVjdGlvblJlY3RDb29yZGluYXRlcy5tb3ZlKC1zZWxlY3Rpb25SZWN0
SW5XaW5kb3dDb29yZGluYXRlcy54KCksIC1zZWxlY3Rpb25SZWN0SW5XaW5kb3dDb29yZGluYXRl
cy55KCkpOworICAgICAgICB0ZXh0UmVjdHNJblNlbGVjdGlvblJlY3RDb29yZGluYXRlcy5hcHBl
bmQodGV4dFJlY3RJblNlbGVjdGlvblJlY3RDb29yZGluYXRlcyk7CisgICAgfQorCisgICAgcmV0
dXJuIFRleHRJbmRpY2F0b3Ioc2VsZWN0aW9uUmVjdEluV2luZG93Q29vcmRpbmF0ZXMsIHRleHRS
ZWN0c0luU2VsZWN0aW9uUmVjdENvb3JkaW5hdGVzLCBmcmFtZS5wYWdlKCktPmRldmljZVNjYWxl
RmFjdG9yKCksIGluZGljYXRvckJpdG1hcCk7Cit9CisKK1RleHRJbmRpY2F0b3I6On5UZXh0SW5k
aWNhdG9yKCkKK3sKK30KKworRmxvYXRSZWN0IFRleHRJbmRpY2F0b3I6OmZyYW1lUmVjdCgpIGNv
bnN0Cit7CisgICAgcmV0dXJuIG91dHNldEluZGljYXRvclJlY3RJbmNsdWRpbmdTaGFkb3cobV9z
ZWxlY3Rpb25SZWN0SW5XaW5kb3dDb29yZGluYXRlcyk7Cit9CisKKyNpZiBFTkFCTEUoTEVHQUNZ
X1RFWFRfSU5ESUNBVE9SX1NUWUxFKQorc3RhdGljIGlubGluZSBDb2xvciBsaWdodEJvcmRlckNv
bG9yKCkKK3sKKyAgICByZXR1cm4gQ29sb3IobGlnaHRCb3JkZXJSZWQsIGxpZ2h0Qm9yZGVyR3Jl
ZW4sIGxpZ2h0Qm9yZGVyQmx1ZSwgbGlnaHRCb3JkZXJBbHBoYSk7Cit9CisKK3N0YXRpYyBpbmxp
bmUgQ29sb3Igc2hhZG93Q29sb3IoKQoreworICAgIHJldHVybiBDb2xvcihzaGFkb3dSZWQsIHNo
YWRvd0dyZWVuLCBzaGFkb3dCbHVlLCBzaGFkb3dBbHBoYSk7Cit9CisKK3N0YXRpYyBpbmxpbmUg
Q29sb3IgZ3JhZGllbnRMaWdodENvbG9yKCkKK3sKKyAgICByZXR1cm4gQ29sb3IoZ3JhZGllbnRM
aWdodFJlZCwgZ3JhZGllbnRMaWdodEdyZWVuLCBncmFkaWVudExpZ2h0Qmx1ZSwgZ3JhZGllbnRM
aWdodEFscGhhKTsKK30KKworc3RhdGljIGlubGluZSBDb2xvciBncmFkaWVudERhcmtDb2xvcigp
Cit7CisgICAgcmV0dXJuIENvbG9yKGdyYWRpZW50RGFya1JlZCwgZ3JhZGllbnREYXJrR3JlZW4s
IGdyYWRpZW50RGFya0JsdWUsIGdyYWRpZW50RGFya0FscGhhKTsKK30KKworc3RhdGljIFBhdGgg
cGF0aFdpdGhSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJlY3QmIHBhdGhSZWN0LCBmbG9hdCByYWRp
dXMpCit7CisgICAgUGF0aCBwYXRoOworICAgIHBhdGguYWRkUm91bmRlZFJlY3QocGF0aFJlY3Qs
IEZsb2F0U2l6ZShyYWRpdXMsIHJhZGl1cykpOworCisgICAgcmV0dXJuIHBhdGg7Cit9CisjZWxz
ZQorc3RhdGljIGlubGluZSBDb2xvciBmbGF0SGlnaGxpZ2h0Q29sb3IoKQoreworICAgIHJldHVy
biBDb2xvcigyNTUsIDI1NSwgMCwgMjU1KTsKK30KKworc3RhdGljIGlubGluZSBDb2xvciBmbGF0
UmltU2hhZG93Q29sb3IoKQoreworICAgIHJldHVybiBDb2xvcigwLCAwLCAwLCAzOCk7Cit9CisK
K3N0YXRpYyBpbmxpbmUgQ29sb3IgZmxhdERyb3BTaGFkb3dDb2xvcigpCit7CisgICAgcmV0dXJu
IENvbG9yKDAsIDAsIDAsIDUxKTsKK30KKyNlbmRpZgorICAgIAordm9pZCBUZXh0SW5kaWNhdG9y
OjpkcmF3KEdyYXBoaWNzQ29udGV4dCYgZ3JhcGhpY3NDb250ZXh0LCBjb25zdCBJbnRSZWN0JiAv
KmRpcnR5UmVjdCovKQoreworI2lmIEVOQUJMRShMRUdBQ1lfVEVYVF9JTkRJQ0FUT1JfU1RZTEUp
CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3RleHRSZWN0c0luU2VsZWN0aW9uUmVjdENv
b3JkaW5hdGVzLnNpemUoKTsgKytpKSB7CisgICAgICAgIEZsb2F0UmVjdCB0ZXh0UmVjdCA9IG1f
dGV4dFJlY3RzSW5TZWxlY3Rpb25SZWN0Q29vcmRpbmF0ZXNbaV07CisgICAgICAgIHRleHRSZWN0
Lm1vdmUobGVmdEJvcmRlclRoaWNrbmVzcywgdG9wQm9yZGVyVGhpY2tuZXNzKTsKKworICAgICAg
ICBGbG9hdFJlY3Qgb3V0ZXJQYXRoUmVjdCA9IGluZmxhdGVSZWN0KHRleHRSZWN0LCBob3Jpem9u
dGFsT3V0c2V0VG9DZW50ZXJPZkxpZ2h0Qm9yZGVyLCB2ZXJ0aWNhbE91dHNldFRvQ2VudGVyT2ZM
aWdodEJvcmRlcik7CisgICAgICAgIEZsb2F0UmVjdCBpbm5lclBhdGhSZWN0ID0gaW5mbGF0ZVJl
Y3QodGV4dFJlY3QsIGhvcml6b250YWxQYWRkaW5nSW5zaWRlTGlnaHRCb3JkZXIsIHZlcnRpY2Fs
UGFkZGluZ0luc2lkZUxpZ2h0Qm9yZGVyKTsKKworICAgICAgICB7CisgICAgICAgICAgICBHcmFw
aGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoZ3JhcGhpY3NDb250ZXh0KTsKKyAgICAg
ICAgICAgIGdyYXBoaWNzQ29udGV4dC5zZXRTaGFkb3coRmxvYXRTaXplKHNoYWRvd09mZnNldFgs
IHNoYWRvd09mZnNldFkpLCBzaGFkb3dCbHVyUmFkaXVzLCBzaGFkb3dDb2xvcigpLCBDb2xvclNw
YWNlU1JHQik7CisgICAgICAgICAgICBncmFwaGljc0NvbnRleHQuc2V0RmlsbENvbG9yKGxpZ2h0
Qm9yZGVyQ29sb3IoKSwgQ29sb3JTcGFjZURldmljZVJHQik7CisgICAgICAgICAgICBncmFwaGlj
c0NvbnRleHQuZmlsbFBhdGgocGF0aFdpdGhSb3VuZGVkUmVjdChvdXRlclBhdGhSZWN0LCBjb3Ju
ZXJSYWRpdXMpKTsKKyAgICAgICAgfQorCisgICAgICAgIHsKKyAgICAgICAgICAgIEdyYXBoaWNz
Q29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcihncmFwaGljc0NvbnRleHQpOworICAgICAgICAg
ICAgZ3JhcGhpY3NDb250ZXh0LmNsaXAocGF0aFdpdGhSb3VuZGVkUmVjdChpbm5lclBhdGhSZWN0
LCBjb3JuZXJSYWRpdXMpKTsKKyAgICAgICAgICAgIFJlZlB0cjxHcmFkaWVudD4gZ3JhZGllbnQg
PSBHcmFkaWVudDo6Y3JlYXRlKEZsb2F0UG9pbnQoaW5uZXJQYXRoUmVjdC54KCksIGlubmVyUGF0
aFJlY3QueSgpKSwgRmxvYXRQb2ludChpbm5lclBhdGhSZWN0LngoKSwgaW5uZXJQYXRoUmVjdC5t
YXhZKCkpKTsKKyAgICAgICAgICAgIGdyYWRpZW50LT5hZGRDb2xvclN0b3AoMCwgZ3JhZGllbnRM
aWdodENvbG9yKCkpOworICAgICAgICAgICAgZ3JhZGllbnQtPmFkZENvbG9yU3RvcCgxLCBncmFk
aWVudERhcmtDb2xvcigpKTsKKyAgICAgICAgICAgIGdyYXBoaWNzQ29udGV4dC5zZXRGaWxsR3Jh
ZGllbnQoZ3JhZGllbnQucmVsZWFzZU5vbk51bGwoKSk7CisgICAgICAgICAgICBncmFwaGljc0Nv
bnRleHQuZmlsbFJlY3Qob3V0ZXJQYXRoUmVjdCk7CisgICAgICAgIH0KKworICAgICAgICB7Cisg
ICAgICAgICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoZ3JhcGhpY3ND
b250ZXh0KTsKKyAgICAgICAgICAgIGdyYXBoaWNzQ29udGV4dC50cmFuc2xhdGUoRmxvYXRTaXpl
KHJvdW5kZihsZWZ0Qm9yZGVyVGhpY2tuZXNzKSwgcm91bmRmKHRvcEJvcmRlclRoaWNrbmVzcykp
KTsKKworICAgICAgICAgICAgSW50UmVjdCBjb250ZW50SW1hZ2VSZWN0ID0gZW5jbG9zaW5nSW50
UmVjdChtX3RleHRSZWN0c0luU2VsZWN0aW9uUmVjdENvb3JkaW5hdGVzW2ldKTsKKyAgICAgICAg
ICAgIG1fY29udGVudEltYWdlLT5wYWludChncmFwaGljc0NvbnRleHQsIG1fY29udGVudEltYWdl
U2NhbGVGYWN0b3IsIGNvbnRlbnRJbWFnZVJlY3QubG9jYXRpb24oKSwgY29udGVudEltYWdlUmVj
dCk7CisgICAgICAgIH0KKyAgICB9CisjZWxzZQorICAgIGZvciAoYXV0byYgdGV4dFJlY3QgOiBt
X3RleHRSZWN0c0luU2VsZWN0aW9uUmVjdENvb3JkaW5hdGVzKSB7CisgICAgICAgIEZsb2F0UmVj
dCBibHVyUmVjdCA9IHRleHRSZWN0OworICAgICAgICBibHVyUmVjdC5tb3ZlKGZsYXRTaGFkb3dC
bHVyUmFkaXVzICsgZmxhdFN0eWxlSG9yaXpvbnRhbEJvcmRlciwgZmxhdFNoYWRvd0JsdXJSYWRp
dXMgKyBmbGF0U3R5bGVWZXJ0aWNhbEJvcmRlcik7CisgICAgICAgIEZsb2F0UmVjdCBvdXRlclBh
dGhSZWN0ID0gaW5mbGF0ZVJlY3QoYmx1clJlY3QsIGZsYXRTdHlsZUhvcml6b250YWxCb3JkZXIs
IGZsYXRTdHlsZVZlcnRpY2FsQm9yZGVyKTsKKworICAgICAgICB7CisgICAgICAgICAgICBHcmFw
aGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoZ3JhcGhpY3NDb250ZXh0KTsKKyAgICAg
ICAgICAgIGdyYXBoaWNzQ29udGV4dC5zZXRTaGFkb3coRmxvYXRTaXplKCksIGZsYXRSaW1TaGFk
b3dCbHVyUmFkaXVzLCBmbGF0UmltU2hhZG93Q29sb3IoKSwgQ29sb3JTcGFjZVNSR0IpOworICAg
ICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LnNldEZpbGxDb2xvcihmbGF0SGlnaGxpZ2h0Q29sb3Io
KSwgQ29sb3JTcGFjZVNSR0IpOworICAgICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LmZpbGxSZWN0
KG91dGVyUGF0aFJlY3QpOworICAgICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LnNldFNoYWRvdyhG
bG9hdFNpemUoZmxhdFNoYWRvd09mZnNldFgsIGZsYXRTaGFkb3dPZmZzZXRZKSwgZmxhdFNoYWRv
d0JsdXJSYWRpdXMsIGZsYXREcm9wU2hhZG93Q29sb3IoKSwgQ29sb3JTcGFjZVNSR0IpOworICAg
ICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LmZpbGxSZWN0KG91dGVyUGF0aFJlY3QpOworICAgICAg
ICB9CisKKyAgICAgICAgeworICAgICAgICAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBz
dGF0ZVNhdmVyKGdyYXBoaWNzQ29udGV4dCk7CisgICAgICAgICAgICBncmFwaGljc0NvbnRleHQu
dHJhbnNsYXRlKEZsb2F0U2l6ZShmbGF0U2hhZG93Qmx1clJhZGl1cyArIGZsYXRTdHlsZUhvcml6
b250YWxCb3JkZXIsIGZsYXRTaGFkb3dCbHVyUmFkaXVzICsgZmxhdFN0eWxlVmVydGljYWxCb3Jk
ZXIpKTsKKworICAgICAgICAgICAgSW50UmVjdCBjb250ZW50SW1hZ2VSZWN0ID0gZW5jbG9zaW5n
SW50UmVjdCh0ZXh0UmVjdCk7CisgICAgICAgICAgICBtX2NvbnRlbnRJbWFnZS0+cGFpbnQoZ3Jh
cGhpY3NDb250ZXh0LCBtX2NvbnRlbnRJbWFnZVNjYWxlRmFjdG9yLCBjb250ZW50SW1hZ2VSZWN0
LmxvY2F0aW9uKCksIGNvbnRlbnRJbWFnZVJlY3QpOworICAgICAgICB9CisgICAgfQorI2VuZGlm
Cit9CisKK3ZvaWQgVGV4dEluZGljYXRvcjo6ZW5jb2RlKElQQzo6QXJndW1lbnRFbmNvZGVyJiBl
bmNvZGVyKSBjb25zdAoreworICAgIGVuY29kZXIgPDwgbV9zZWxlY3Rpb25SZWN0SW5XaW5kb3dD
b29yZGluYXRlczsKKyAgICBlbmNvZGVyIDw8IG1fdGV4dFJlY3RzSW5TZWxlY3Rpb25SZWN0Q29v
cmRpbmF0ZXM7CisgICAgZW5jb2RlciA8PCBtX2NvbnRlbnRJbWFnZVNjYWxlRmFjdG9yOworCisg
ICAgU2hhcmVhYmxlQml0bWFwOjpIYW5kbGUgY29udGVudEltYWdlSGFuZGxlOworICAgIGlmICht
X2NvbnRlbnRJbWFnZSkKKyAgICAgICAgbV9jb250ZW50SW1hZ2UtPmNyZWF0ZUhhbmRsZShjb250
ZW50SW1hZ2VIYW5kbGUsIFNoYXJlZE1lbW9yeTo6UmVhZE9ubHkpOworICAgIGVuY29kZXIgPDwg
Y29udGVudEltYWdlSGFuZGxlOworfQorCitib29sIFRleHRJbmRpY2F0b3I6OmRlY29kZShJUEM6
OkFyZ3VtZW50RGVjb2RlciYgZGVjb2RlciwgVGV4dEluZGljYXRvciYgdGV4dEluZGljYXRvcikK
K3sKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHRleHRJbmRpY2F0b3IubV9zZWxlY3Rpb25SZWN0
SW5XaW5kb3dDb29yZGluYXRlcykpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmICgh
ZGVjb2Rlci5kZWNvZGUodGV4dEluZGljYXRvci5tX3RleHRSZWN0c0luU2VsZWN0aW9uUmVjdENv
b3JkaW5hdGVzKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKCFkZWNvZGVyLmRl
Y29kZSh0ZXh0SW5kaWNhdG9yLm1fY29udGVudEltYWdlU2NhbGVGYWN0b3IpKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICBTaGFyZWFibGVCaXRtYXA6OkhhbmRsZSBjb250ZW50SW1hZ2VI
YW5kbGU7CisgICAgaWYgKCFkZWNvZGVyLmRlY29kZShjb250ZW50SW1hZ2VIYW5kbGUpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoIWNvbnRlbnRJbWFnZUhhbmRsZS5pc051bGwo
KSkKKyAgICAgICAgdGV4dEluZGljYXRvci5tX2NvbnRlbnRJbWFnZSA9IFNoYXJlYWJsZUJpdG1h
cDo6Y3JlYXRlKGNvbnRlbnRJbWFnZUhhbmRsZSwgU2hhcmVkTWVtb3J5OjpSZWFkT25seSk7CisK
KyAgICByZXR1cm4gdHJ1ZTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvVGV4dEluZGljYXRvci5oIGIvU291cmNlL1dlYktpdDIv
U2hhcmVkL1RleHRJbmRpY2F0b3IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
Li45OTQ0ODk1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL1RleHRJ
bmRpY2F0b3IuaApAQCAtMCwwICsxLDgzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBUZXh0SW5k
aWNhdG9yX2gKKyNkZWZpbmUgVGV4dEluZGljYXRvcl9oCisKKyNpbmNsdWRlICJTaGFyZWFibGVC
aXRtYXAuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0Zsb2F0UmVjdC5oPgorI2luY2x1ZGUgPHd0Zi9Q
YXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYv
VmVjdG9yLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNzIEdyYXBoaWNzQ29udGV4dDsK
K30KKworbmFtZXNwYWNlIElQQyB7CitjbGFzcyBBcmd1bWVudERlY29kZXI7CitjbGFzcyBBcmd1
bWVudEVuY29kZXI7Cit9CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBXZWJGcmFtZTsK
KworY2xhc3MgVGV4dEluZGljYXRvciB7CitwdWJsaWM6CisgICAgVGV4dEluZGljYXRvcigpOwor
ICAgIFRleHRJbmRpY2F0b3IoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBzZWxlY3Rpb25SZWN0
SW5XaW5kb3dDb29yZGluYXRlcywgY29uc3QgVmVjdG9yPFdlYkNvcmU6OkZsb2F0UmVjdD4mIHRl
eHRSZWN0c0luU2VsZWN0aW9uQ29vcmRpbmF0ZXMsIGZsb2F0IGNvbnRlbnRJbWFnZVNjYWxlRmFj
dG9yLCBQYXNzUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4gY29udGVudEltYWdlKTsKKyAgICB+VGV4
dEluZGljYXRvcigpOworCisgICAgc3RhdGljIFRleHRJbmRpY2F0b3IgaW5kaWNhdG9yV2l0aFNl
bGVjdGlvbkluRnJhbWUoV2ViRnJhbWUmKTsKKworICAgIFdlYkNvcmU6OkZsb2F0UmVjdCBzZWxl
Y3Rpb25SZWN0SW5XaW5kb3dDb29yZGluYXRlcygpIGNvbnN0IHsgcmV0dXJuIG1fc2VsZWN0aW9u
UmVjdEluV2luZG93Q29vcmRpbmF0ZXM7IH0KKyAgICBXZWJDb3JlOjpGbG9hdFJlY3QgZnJhbWVS
ZWN0KCkgY29uc3Q7CisKKyAgICBTaGFyZWFibGVCaXRtYXAqIGNvbnRlbnRJbWFnZSgpIGNvbnN0
IHsgcmV0dXJuIG1fY29udGVudEltYWdlLmdldCgpOyB9CisKKyAgICB2b2lkIGRyYXcoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0JiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgZGlydHlSZWN0KTsK
KworICAgIHZvaWQgZW5jb2RlKElQQzo6QXJndW1lbnRFbmNvZGVyJikgY29uc3Q7CisgICAgc3Rh
dGljIGJvb2wgZGVjb2RlKElQQzo6QXJndW1lbnREZWNvZGVyJiwgVGV4dEluZGljYXRvciYpOwor
CisgICAgaW5saW5lIGJvb2wgb3BlcmF0b3I9PSAoY29uc3QgVGV4dEluZGljYXRvciYgbykKKyAg
ICB7CisgICAgICAgIHJldHVybiBtX3NlbGVjdGlvblJlY3RJbldpbmRvd0Nvb3JkaW5hdGVzID09
IG8ubV9zZWxlY3Rpb25SZWN0SW5XaW5kb3dDb29yZGluYXRlcworICAgICAgICAmJiBtX3RleHRS
ZWN0c0luU2VsZWN0aW9uUmVjdENvb3JkaW5hdGVzID09IG8ubV90ZXh0UmVjdHNJblNlbGVjdGlv
blJlY3RDb29yZGluYXRlcworICAgICAgICAmJiBtX2NvbnRlbnRJbWFnZVNjYWxlRmFjdG9yID09
IG8ubV9jb250ZW50SW1hZ2VTY2FsZUZhY3RvcgorICAgICAgICAmJiBtX2NvbnRlbnRJbWFnZSA9
PSBvLm1fY29udGVudEltYWdlOworICAgIH0KKworcHJpdmF0ZToKKyAgICBXZWJDb3JlOjpGbG9h
dFJlY3QgbV9zZWxlY3Rpb25SZWN0SW5XaW5kb3dDb29yZGluYXRlczsKKyAgICBWZWN0b3I8V2Vi
Q29yZTo6RmxvYXRSZWN0PiBtX3RleHRSZWN0c0luU2VsZWN0aW9uUmVjdENvb3JkaW5hdGVzOwor
ICAgIGZsb2F0IG1fY29udGVudEltYWdlU2NhbGVGYWN0b3I7CisgICAgUmVmUHRyPFNoYXJlYWJs
ZUJpdG1hcD4gbV9jb250ZW50SW1hZ2U7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKwor
I2VuZGlmIC8vIFRleHRJbmRpY2F0b3JfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hh
cmVkL21hYy9BY3Rpb25NZW51SGl0VGVzdFJlc3VsdC5oIGIvU291cmNlL1dlYktpdDIvU2hhcmVk
L21hYy9BY3Rpb25NZW51SGl0VGVzdFJlc3VsdC5oCmluZGV4IDg1MGMwYWQuLjk1MTM1ODAgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9tYWMvQWN0aW9uTWVudUhpdFRlc3RSZXN1
bHQuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbWFjL0FjdGlvbk1lbnVIaXRUZXN0UmVz
dWx0LmgKQEAgLTI3LDYgKzI3LDcgQEAKICNkZWZpbmUgQWN0aW9uTWVudUhpdFRlc3RSZXN1bHRf
aAogCiAjaW5jbHVkZSAiU2hhcmVhYmxlQml0bWFwLmgiCisjaW5jbHVkZSAiVGV4dEluZGljYXRv
ci5oIgogI2luY2x1ZGUgIldlYkhpdFRlc3RSZXN1bHQuaCIKICNpbmNsdWRlIDxXZWJDb3JlL0Zs
b2F0UmVjdC5oPgogCkBAIC00OSw3ICs1MCw4IEBAIHN0cnVjdCBBY3Rpb25NZW51SGl0VGVzdFJl
c3VsdCB7CiAgICAgUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4gaW1hZ2U7CiAKICAgICBSZXRhaW5Q
dHI8RERBY3Rpb25Db250ZXh0PiBhY3Rpb25Db250ZXh0OwotICAgIFdlYkNvcmU6OkZsb2F0UmVj
dCBhY3Rpb25Cb3VuZGluZ0JveDsKKyAgICBXZWJDb3JlOjpGbG9hdFJlY3QgZGV0ZWN0ZWREYXRh
Qm91bmRpbmdCb3g7CisgICAgVGV4dEluZGljYXRvciBkZXRlY3RlZERhdGFUZXh0SW5kaWNhdG9y
OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9TaGFyZWQvbWFjL0FjdGlvbk1lbnVIaXRUZXN0UmVzdWx0Lm1tIGIvU291cmNlL1dlYktpdDIv
U2hhcmVkL21hYy9BY3Rpb25NZW51SGl0VGVzdFJlc3VsdC5tbQppbmRleCBmNDFjMWRhLi42MTFl
YjZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbWFjL0FjdGlvbk1lbnVIaXRU
ZXN0UmVzdWx0Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9tYWMvQWN0aW9uTWVudUhp
dFRlc3RSZXN1bHQubW0KQEAgLTI5LDYgKzI5LDcgQEAKICNpbXBvcnQgIkFyZ3VtZW50Q29kZXJz
Q0YuaCIKICNpbXBvcnQgIkFyZ3VtZW50RGVjb2Rlci5oIgogI2ltcG9ydCAiQXJndW1lbnRFbmNv
ZGVyLmgiCisjaW1wb3J0ICJUZXh0SW5kaWNhdG9yLmgiCiAjaW1wb3J0ICJXZWJDb3JlQXJndW1l
bnRDb2RlcnMuaCIKICNpbXBvcnQgPFdlYkNvcmUvRGF0YURldGVjdG9yc1NQSS5oPgogCkBAIC01
Nyw5ICs1OCwxMCBAQCB2b2lkIEFjdGlvbk1lbnVIaXRUZXN0UmVzdWx0OjplbmNvZGUoSVBDOjpB
cmd1bWVudEVuY29kZXImIGVuY29kZXIpIGNvbnN0CiAgICAgICAgIFthcmNoaXZlciBmaW5pc2hF
bmNvZGluZ107CiAKICAgICAgICAgSVBDOjplbmNvZGUoZW5jb2RlciwgcmVpbnRlcnByZXRfY2Fz
dDxDRkRhdGFSZWY+KGRhdGEuZ2V0KCkpKTsKLSAgICB9CiAKLSAgICBlbmNvZGVyIDw8IGFjdGlv
bkJvdW5kaW5nQm94OworICAgICAgICBlbmNvZGVyIDw8IGRldGVjdGVkRGF0YUJvdW5kaW5nQm94
OworICAgICAgICBlbmNvZGVyIDw8IGRldGVjdGVkRGF0YVRleHRJbmRpY2F0b3I7CisgICAgfQog
fQogCiBib29sIEFjdGlvbk1lbnVIaXRUZXN0UmVzdWx0OjpkZWNvZGUoSVBDOjpBcmd1bWVudERl
Y29kZXImIGRlY29kZXIsIEFjdGlvbk1lbnVIaXRUZXN0UmVzdWx0JiBhY3Rpb25NZW51SGl0VGVz
dFJlc3VsdCkKQEAgLTk2LDEwICs5OCwxMyBAQCBib29sIEFjdGlvbk1lbnVIaXRUZXN0UmVzdWx0
OjpkZWNvZGUoSVBDOjpBcmd1bWVudERlY29kZXImIGRlY29kZXIsIEFjdGlvbk1lbnVIaQogICAg
ICAgICB9CiAgICAgICAgIAogICAgICAgICBbdW5hcmNoaXZlciBmaW5pc2hEZWNvZGluZ107Ci0g
ICAgfQogCi0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShhY3Rpb25NZW51SGl0VGVzdFJlc3VsdC5h
Y3Rpb25Cb3VuZGluZ0JveCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgaWYgKCFk
ZWNvZGVyLmRlY29kZShhY3Rpb25NZW51SGl0VGVzdFJlc3VsdC5kZXRlY3RlZERhdGFCb3VuZGlu
Z0JveCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgaWYgKCFkZWNvZGVy
LmRlY29kZShhY3Rpb25NZW51SGl0VGVzdFJlc3VsdC5kZXRlY3RlZERhdGFUZXh0SW5kaWNhdG9y
KSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CiAKICAgICByZXR1cm4gdHJ1ZTsK
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1dLVmlldy5t
bSBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1dLVmlldy5tbQppbmRleCA3Mjc5
YTgyLi5hODU4MWEwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21h
Yy9XS1ZpZXcubW0KKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9tYWMvV0tWaWV3
Lm1tCkBAIC0zMDQxLDkgKzMwNDEsOSBAQCBzdGF0aWMgdm9pZCoga2V5VmFsdWVPYnNlcnZpbmdD
b250ZXh0ID0gJmtleVZhbHVlT2JzZXJ2aW5nQ29udGV4dDsKICAgICB9CiB9CiAKLS0gKHZvaWQp
X3NldFRleHRJbmRpY2F0b3I6KFBhc3NSZWZQdHI8VGV4dEluZGljYXRvcj4pdGV4dEluZGljYXRv
ciBmYWRlT3V0OihCT09MKWZhZGVPdXQgYW5pbWF0ZTooQk9PTClhbmltYXRlCistICh2b2lkKV9z
ZXRUZXh0SW5kaWNhdG9yOihjb25zdCBUZXh0SW5kaWNhdG9yJil0ZXh0SW5kaWNhdG9yIGZhZGVP
dXQ6KEJPT0wpZmFkZU91dCBhbmltYXRlOihCT09MKWFuaW1hdGUKIHsKLSAgICBpZiAoIXRleHRJ
bmRpY2F0b3IpIHsKKyAgICBpZiAoIXRleHRJbmRpY2F0b3IuY29udGVudEltYWdlKCkpIHsKICAg
ICAgICAgX2RhdGEtPl90ZXh0SW5kaWNhdG9yV2luZG93ID0gbnVsbHB0cjsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFj
L1dLVmlld0ludGVybmFsLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9XS1Zp
ZXdJbnRlcm5hbC5oCmluZGV4IDFlYzJlYzAuLmI1MzI2ODUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1dLVmlld0ludGVybmFsLmgKKysrIGIvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9tYWMvV0tWaWV3SW50ZXJuYWwuaApAQCAtODAsNyArODAsNyBA
QCBzdHJ1Y3QgV2ViUGFnZUNvbmZpZ3VyYXRpb247CiAtICh2b2lkKV9zZXRJbnRyaW5zaWNDb250
ZW50U2l6ZTooTlNTaXplKWludHJpbnNpY0NvbnRlbnRTaXplOwogLSAoTlNSZWN0KV9jb252ZXJ0
VG9EZXZpY2VTcGFjZTooTlNSZWN0KXJlY3Q7CiAtIChOU1JlY3QpX2NvbnZlcnRUb1VzZXJTcGFj
ZTooTlNSZWN0KXJlY3Q7Ci0tICh2b2lkKV9zZXRUZXh0SW5kaWNhdG9yOihQYXNzUmVmUHRyPFdl
YktpdDo6VGV4dEluZGljYXRvcj4pdGV4dEluZGljYXRvciBmYWRlT3V0OihCT09MKWZhZGVPdXQg
YW5pbWF0ZTooQk9PTClhbmltYXRlOworLSAodm9pZClfc2V0VGV4dEluZGljYXRvcjooY29uc3Qg
V2ViS2l0OjpUZXh0SW5kaWNhdG9yJil0ZXh0SW5kaWNhdG9yIGZhZGVPdXQ6KEJPT0wpZmFkZU91
dCBhbmltYXRlOihCT09MKWFuaW1hdGU7CiAKIC0gKHZvaWQpX3NldEFjY2VsZXJhdGVkQ29tcG9z
aXRpbmdNb2RlUm9vdExheWVyOihDQUxheWVyICopcm9vdExheWVyOwogLSAoQ0FMYXllciAqKV9h
Y2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZVJvb3RMYXllcjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9QYWdlQ2xpZW50LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
UGFnZUNsaWVudC5oCmluZGV4IGEwM2EzNjAuLjgxYzEwM2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9QYWdlQ2xpZW50LmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL1BhZ2VDbGllbnQuaApAQCAtMjE0LDcgKzIxNCw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFs
IFBhc3NSZWZQdHI8V2ViQ29sb3JQaWNrZXI+IGNyZWF0ZUNvbG9yUGlja2VyKFdlYlBhZ2VQcm94
eSosIGNvbnN0IFdlYkNvcmU6OkNvbG9yJiBpbml0aWFsQ29sb3IsIGNvbnN0IFdlYkNvcmU6Oklu
dFJlY3QmKSA9IDA7CiAjZW5kaWYKIAotICAgIHZpcnR1YWwgdm9pZCBzZXRUZXh0SW5kaWNhdG9y
KFBhc3NSZWZQdHI8VGV4dEluZGljYXRvcj4sIGJvb2wgZmFkZU91dCwgYm9vbCBhbmltYXRlKSA9
IDA7CisgICAgdmlydHVhbCB2b2lkIHNldFRleHRJbmRpY2F0b3IoY29uc3QgVGV4dEluZGljYXRv
ciYsIGJvb2wgZmFkZU91dCwgYm9vbCBhbmltYXRlKSA9IDA7CiAKICAgICB2aXJ0dWFsIHZvaWQg
ZW50ZXJBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZShjb25zdCBMYXllclRyZWVDb250ZXh0Jikg
PSAwOwogICAgIHZpcnR1YWwgdm9pZCBleGl0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUoKSA9
IDA7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvVGV4dEluZGljYXRvci5j
cHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvVGV4dEluZGljYXRvci5jcHAKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZlNThkMjEuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL1RleHRJbmRpY2F0b3IuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMjc3ICsw
LDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0g
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiVGV4dElu
ZGljYXRvci5oIgotCi0jaW5jbHVkZSAiU2hhcmVhYmxlQml0bWFwLmgiCi0jaW5jbHVkZSA8V2Vi
Q29yZS9HZW9tZXRyeVV0aWxpdGllcy5oPgotI2luY2x1ZGUgPFdlYkNvcmUvR3JhZGllbnQuaD4K
LSNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzQ29udGV4dC5oPgotI2luY2x1ZGUgPFdlYkNvcmUv
SW50UmVjdC5oPgotI2luY2x1ZGUgPFdlYkNvcmUvUGF0aC5oPgotCi0jaWYgUExBVEZPUk0oTUFD
KSAmJiBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEIDwgMTAxMDAwCi0jZGVmaW5lIEVO
QUJMRV9MRUdBQ1lfVEVYVF9JTkRJQ0FUT1JfU1RZTEUgMQotI2Vsc2UKLSNkZWZpbmUgRU5BQkxF
X0xFR0FDWV9URVhUX0lORElDQVRPUl9TVFlMRSAwCi0jZW5kaWYKLQotdXNpbmcgbmFtZXNwYWNl
IFdlYkNvcmU7Ci0KLSNpZiBFTkFCTEUoTEVHQUNZX1RFWFRfSU5ESUNBVE9SX1NUWUxFKQotc3Rh
dGljIGNvbnN0IGZsb2F0IGNvcm5lclJhZGl1cyA9IDMuMDsKLQotc3RhdGljIGNvbnN0IGZsb2F0
IHNoYWRvd09mZnNldFggPSAwLjA7Ci1zdGF0aWMgY29uc3QgZmxvYXQgc2hhZG93T2Zmc2V0WSA9
IDEuMDsKLXN0YXRpYyBjb25zdCBmbG9hdCBzaGFkb3dCbHVyUmFkaXVzID0gMy4wOwotCi1zdGF0
aWMgY29uc3QgaW50IHNoYWRvd1JlZCA9IDA7Ci1zdGF0aWMgY29uc3QgaW50IHNoYWRvd0dyZWVu
ID0gMDsKLXN0YXRpYyBjb25zdCBpbnQgc2hhZG93Qmx1ZSA9IDA7Ci1zdGF0aWMgY29uc3QgaW50
IHNoYWRvd0FscGhhID0gMjA0OwotCi1zdGF0aWMgY29uc3QgZmxvYXQgbGlnaHRCb3JkZXJUaGlj
a25lc3MgPSAxLjA7Ci1zdGF0aWMgY29uc3QgZmxvYXQgaG9yaXpvbnRhbFBhZGRpbmdJbnNpZGVM
aWdodEJvcmRlciA9IDMuMDsKLXN0YXRpYyBjb25zdCBmbG9hdCB2ZXJ0aWNhbFBhZGRpbmdJbnNp
ZGVMaWdodEJvcmRlciA9IDEuMDsKLQotc3RhdGljIGNvbnN0IGZsb2F0IGhvcml6b250YWxCb3Jk
ZXJJbnNpZGVTaGFkb3cgPSBsaWdodEJvcmRlclRoaWNrbmVzcyArIGhvcml6b250YWxQYWRkaW5n
SW5zaWRlTGlnaHRCb3JkZXI7Ci1zdGF0aWMgY29uc3QgZmxvYXQgdmVydGljYWxCb3JkZXJJbnNp
ZGVTaGFkb3cgPSBsaWdodEJvcmRlclRoaWNrbmVzcyArIHZlcnRpY2FsUGFkZGluZ0luc2lkZUxp
Z2h0Qm9yZGVyOwotCi1zdGF0aWMgY29uc3QgZmxvYXQgbGVmdEJvcmRlclRoaWNrbmVzcyA9IGhv
cml6b250YWxCb3JkZXJJbnNpZGVTaGFkb3cgKyBzaGFkb3dPZmZzZXRYICsgc2hhZG93Qmx1clJh
ZGl1cyAvIDIuMDsKLXN0YXRpYyBjb25zdCBmbG9hdCB0b3BCb3JkZXJUaGlja25lc3MgPSB2ZXJ0
aWNhbEJvcmRlckluc2lkZVNoYWRvdyAtIHNoYWRvd09mZnNldFkgKyBzaGFkb3dCbHVyUmFkaXVz
IC8gMi4wOwotc3RhdGljIGNvbnN0IGZsb2F0IHJpZ2h0Qm9yZGVyVGhpY2tuZXNzID0gaG9yaXpv
bnRhbEJvcmRlckluc2lkZVNoYWRvdyAtIHNoYWRvd09mZnNldFggKyBzaGFkb3dCbHVyUmFkaXVz
IC8gMi4wOwotc3RhdGljIGNvbnN0IGZsb2F0IGJvdHRvbUJvcmRlclRoaWNrbmVzcyA9IHZlcnRp
Y2FsQm9yZGVySW5zaWRlU2hhZG93ICsgc2hhZG93T2Zmc2V0WSArIHNoYWRvd0JsdXJSYWRpdXMg
LyAyLjA7Ci0KLXN0YXRpYyBjb25zdCBmbG9hdCBob3Jpem9udGFsT3V0c2V0VG9DZW50ZXJPZkxp
Z2h0Qm9yZGVyID0gaG9yaXpvbnRhbEJvcmRlckluc2lkZVNoYWRvdyAtIGxpZ2h0Qm9yZGVyVGhp
Y2tuZXNzIC8gMi4wOwotc3RhdGljIGNvbnN0IGZsb2F0IHZlcnRpY2FsT3V0c2V0VG9DZW50ZXJP
ZkxpZ2h0Qm9yZGVyID0gdmVydGljYWxCb3JkZXJJbnNpZGVTaGFkb3cgLSBsaWdodEJvcmRlclRo
aWNrbmVzcyAvIDIuMDsKLQotc3RhdGljIGNvbnN0IGludCBsaWdodEJvcmRlclJlZCA9IDI0NTsK
LXN0YXRpYyBjb25zdCBpbnQgbGlnaHRCb3JkZXJHcmVlbiA9IDIzMDsKLXN0YXRpYyBjb25zdCBp
bnQgbGlnaHRCb3JkZXJCbHVlID0gMDsKLXN0YXRpYyBjb25zdCBpbnQgbGlnaHRCb3JkZXJBbHBo
YSA9IDI1NTsKLQotc3RhdGljIGNvbnN0IGludCBncmFkaWVudERhcmtSZWQgPSAyMzc7Ci1zdGF0
aWMgY29uc3QgaW50IGdyYWRpZW50RGFya0dyZWVuID0gMjA0Owotc3RhdGljIGNvbnN0IGludCBn
cmFkaWVudERhcmtCbHVlID0gMDsKLXN0YXRpYyBjb25zdCBpbnQgZ3JhZGllbnREYXJrQWxwaGEg
PSAyNTU7Ci0KLXN0YXRpYyBjb25zdCBpbnQgZ3JhZGllbnRMaWdodFJlZCA9IDI0MjsKLXN0YXRp
YyBjb25zdCBpbnQgZ3JhZGllbnRMaWdodEdyZWVuID0gMjM5Owotc3RhdGljIGNvbnN0IGludCBn
cmFkaWVudExpZ2h0Qmx1ZSA9IDA7Ci1zdGF0aWMgY29uc3QgaW50IGdyYWRpZW50TGlnaHRBbHBo
YSA9IDI1NTsKLSNlbHNlCi1jb25zdCBmbG9hdCBmbGF0U3R5bGVIb3Jpem9udGFsQm9yZGVyID0g
MjsKLWNvbnN0IGZsb2F0IGZsYXRTdHlsZVZlcnRpY2FsQm9yZGVyID0gMTsKLWNvbnN0IGZsb2F0
IGZsYXRTaGFkb3dPZmZzZXRYID0gMDsKLWNvbnN0IGZsb2F0IGZsYXRTaGFkb3dPZmZzZXRZID0g
NTsKLWNvbnN0IGZsb2F0IGZsYXRTaGFkb3dCbHVyUmFkaXVzID0gMjU7Ci1jb25zdCBmbG9hdCBm
bGF0UmltU2hhZG93Qmx1clJhZGl1cyA9IDI7Ci0jZW5kaWYKLQotbmFtZXNwYWNlIFdlYktpdCB7
Ci0KLVBhc3NSZWZQdHI8VGV4dEluZGljYXRvcj4gVGV4dEluZGljYXRvcjo6Y3JlYXRlKGNvbnN0
IEZsb2F0UmVjdCYgc2VsZWN0aW9uUmVjdEluV2luZG93Q29vcmRpbmF0ZXMsIGNvbnN0IFZlY3Rv
cjxGbG9hdFJlY3Q+JiB0ZXh0UmVjdHNJblNlbGVjdGlvblJlY3RDb29yZGluYXRlcywgZmxvYXQg
Y29udGVudEltYWdlU2NhbGVGYWN0b3IsIGNvbnN0IFNoYXJlYWJsZUJpdG1hcDo6SGFuZGxlJiBj
b250ZW50SW1hZ2VIYW5kbGUpCi17Ci0gICAgUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4gY29udGVu
dEltYWdlID0gU2hhcmVhYmxlQml0bWFwOjpjcmVhdGUoY29udGVudEltYWdlSGFuZGxlKTsKLSAg
ICBpZiAoIWNvbnRlbnRJbWFnZSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgQVNTRVJUKGNvbnRl
bnRJbWFnZVNjYWxlRmFjdG9yICE9IDEgfHwgY29udGVudEltYWdlLT5zaXplKCkgPT0gZW5jbG9z
aW5nSW50UmVjdChzZWxlY3Rpb25SZWN0SW5XaW5kb3dDb29yZGluYXRlcykuc2l6ZSgpKTsKLQot
ICAgIHJldHVybiBhZG9wdFJlZihuZXcgVGV4dEluZGljYXRvcihzZWxlY3Rpb25SZWN0SW5XaW5k
b3dDb29yZGluYXRlcywgdGV4dFJlY3RzSW5TZWxlY3Rpb25SZWN0Q29vcmRpbmF0ZXMsIGNvbnRl
bnRJbWFnZVNjYWxlRmFjdG9yLCBjb250ZW50SW1hZ2UucmVsZWFzZSgpKSk7Ci19Ci0KLXN0YXRp
YyBGbG9hdFJlY3QgaW5mbGF0ZVJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBmbG9hdCBpbmZs
YXRlWCwgZmxvYXQgaW5mbGF0ZVkpCi17Ci0gICAgRmxvYXRSZWN0IGluZmxhdGVkUmVjdCA9IHJl
Y3Q7Ci0gICAgaW5mbGF0ZWRSZWN0LmluZmxhdGVYKGluZmxhdGVYKTsKLSAgICBpbmZsYXRlZFJl
Y3QuaW5mbGF0ZVkoaW5mbGF0ZVkpOwotICAgIHJldHVybiBpbmZsYXRlZFJlY3Q7Ci19Ci0KLXN0
YXRpYyBGbG9hdFJlY3Qgb3V0c2V0SW5kaWNhdG9yUmVjdEluY2x1ZGluZ1NoYWRvdyhjb25zdCBG
bG9hdFJlY3QgcmVjdCkKLXsKLSNpZiBFTkFCTEUoTEVHQUNZX1RFWFRfSU5ESUNBVE9SX1NUWUxF
KQotICAgIEZsb2F0UmVjdCBvdXRzZXRSZWN0ID0gcmVjdDsKLSAgICBvdXRzZXRSZWN0Lm1vdmUo
LWxlZnRCb3JkZXJUaGlja25lc3MsIC10b3BCb3JkZXJUaGlja25lc3MpOwotICAgIG91dHNldFJl
Y3QuZXhwYW5kKGxlZnRCb3JkZXJUaGlja25lc3MgKyByaWdodEJvcmRlclRoaWNrbmVzcywgdG9w
Qm9yZGVyVGhpY2tuZXNzICsgYm90dG9tQm9yZGVyVGhpY2tuZXNzKTsKLSAgICByZXR1cm4gb3V0
c2V0UmVjdDsKLSNlbHNlCi0gICAgcmV0dXJuIGluZmxhdGVSZWN0KHJlY3QsIGZsYXRTaGFkb3dC
bHVyUmFkaXVzICsgZmxhdFN0eWxlSG9yaXpvbnRhbEJvcmRlciwgZmxhdFNoYWRvd0JsdXJSYWRp
dXMgKyBmbGF0U3R5bGVWZXJ0aWNhbEJvcmRlcik7Ci0jZW5kaWYKLX0KLQotc3RhdGljIGJvb2wg
dGV4dEluZGljYXRvcnNGb3JUZXh0UmVjdHNPdmVybGFwKGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+
JiB0ZXh0UmVjdHMpCi17Ci0gICAgc2l6ZV90IGNvdW50ID0gdGV4dFJlY3RzLnNpemUoKTsKLSAg
ICBpZiAoY291bnQgPD0gMSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgVmVjdG9yPEZs
b2F0UmVjdD4gaW5kaWNhdG9yUmVjdHM7Ci0gICAgaW5kaWNhdG9yUmVjdHMucmVzZXJ2ZUluaXRp
YWxDYXBhY2l0eShjb3VudCk7Ci0KLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNvdW50OyAr
K2kpIHsKLSAgICAgICAgRmxvYXRSZWN0IGluZGljYXRvclJlY3QgPSBvdXRzZXRJbmRpY2F0b3JS
ZWN0SW5jbHVkaW5nU2hhZG93KHRleHRSZWN0c1tpXSk7Ci0KLSAgICAgICAgZm9yIChzaXplX3Qg
aiA9IGluZGljYXRvclJlY3RzLnNpemUoKTsgajsgKSB7Ci0gICAgICAgICAgICAtLWo7Ci0gICAg
ICAgICAgICBpZiAoaW5kaWNhdG9yUmVjdC5pbnRlcnNlY3RzKGluZGljYXRvclJlY3RzW2pdKSkK
LSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotCi0gICAgICAgIGluZGlj
YXRvclJlY3RzLnVuY2hlY2tlZEFwcGVuZChpbmRpY2F0b3JSZWN0KTsKLSAgICB9Ci0KLSAgICBy
ZXR1cm4gZmFsc2U7Ci19Ci0KLVRleHRJbmRpY2F0b3I6OlRleHRJbmRpY2F0b3IoY29uc3QgV2Vi
Q29yZTo6RmxvYXRSZWN0JiBzZWxlY3Rpb25SZWN0SW5XaW5kb3dDb29yZGluYXRlcywgY29uc3Qg
VmVjdG9yPFdlYkNvcmU6OkZsb2F0UmVjdD4mIHRleHRSZWN0c0luU2VsZWN0aW9uUmVjdENvb3Jk
aW5hdGVzLCBmbG9hdCBjb250ZW50SW1hZ2VTY2FsZUZhY3RvciwgUGFzc1JlZlB0cjxTaGFyZWFi
bGVCaXRtYXA+IGNvbnRlbnRJbWFnZSkKLSAgICA6IG1fc2VsZWN0aW9uUmVjdEluV2luZG93Q29v
cmRpbmF0ZXMoc2VsZWN0aW9uUmVjdEluV2luZG93Q29vcmRpbmF0ZXMpCi0gICAgLCBtX3RleHRS
ZWN0c0luU2VsZWN0aW9uUmVjdENvb3JkaW5hdGVzKHRleHRSZWN0c0luU2VsZWN0aW9uUmVjdENv
b3JkaW5hdGVzKQotICAgICwgbV9jb250ZW50SW1hZ2VTY2FsZUZhY3Rvcihjb250ZW50SW1hZ2VT
Y2FsZUZhY3RvcikKLSAgICAsIG1fY29udGVudEltYWdlKGNvbnRlbnRJbWFnZSkKLXsKLSAgICBp
ZiAodGV4dEluZGljYXRvcnNGb3JUZXh0UmVjdHNPdmVybGFwKG1fdGV4dFJlY3RzSW5TZWxlY3Rp
b25SZWN0Q29vcmRpbmF0ZXMpKSB7Ci0gICAgICAgIG1fdGV4dFJlY3RzSW5TZWxlY3Rpb25SZWN0
Q29vcmRpbmF0ZXNbMF0gPSB1bmlvblJlY3QobV90ZXh0UmVjdHNJblNlbGVjdGlvblJlY3RDb29y
ZGluYXRlcyk7Ci0gICAgICAgIG1fdGV4dFJlY3RzSW5TZWxlY3Rpb25SZWN0Q29vcmRpbmF0ZXMu
c2hyaW5rKDEpOwotICAgIH0KLX0KLQotVGV4dEluZGljYXRvcjo6flRleHRJbmRpY2F0b3IoKQot
ewotfQotCi1GbG9hdFJlY3QgVGV4dEluZGljYXRvcjo6ZnJhbWVSZWN0KCkgY29uc3QKLXsKLSAg
ICByZXR1cm4gb3V0c2V0SW5kaWNhdG9yUmVjdEluY2x1ZGluZ1NoYWRvdyhtX3NlbGVjdGlvblJl
Y3RJbldpbmRvd0Nvb3JkaW5hdGVzKTsKLX0KLQotI2lmIEVOQUJMRShMRUdBQ1lfVEVYVF9JTkRJ
Q0FUT1JfU1RZTEUpCi1zdGF0aWMgaW5saW5lIENvbG9yIGxpZ2h0Qm9yZGVyQ29sb3IoKQotewot
ICAgIHJldHVybiBDb2xvcihsaWdodEJvcmRlclJlZCwgbGlnaHRCb3JkZXJHcmVlbiwgbGlnaHRC
b3JkZXJCbHVlLCBsaWdodEJvcmRlckFscGhhKTsKLX0KLQotc3RhdGljIGlubGluZSBDb2xvciBz
aGFkb3dDb2xvcigpCi17Ci0gICAgcmV0dXJuIENvbG9yKHNoYWRvd1JlZCwgc2hhZG93R3JlZW4s
IHNoYWRvd0JsdWUsIHNoYWRvd0FscGhhKTsKLX0KLQotc3RhdGljIGlubGluZSBDb2xvciBncmFk
aWVudExpZ2h0Q29sb3IoKQotewotICAgIHJldHVybiBDb2xvcihncmFkaWVudExpZ2h0UmVkLCBn
cmFkaWVudExpZ2h0R3JlZW4sIGdyYWRpZW50TGlnaHRCbHVlLCBncmFkaWVudExpZ2h0QWxwaGEp
OwotfQotCi1zdGF0aWMgaW5saW5lIENvbG9yIGdyYWRpZW50RGFya0NvbG9yKCkKLXsKLSAgICBy
ZXR1cm4gQ29sb3IoZ3JhZGllbnREYXJrUmVkLCBncmFkaWVudERhcmtHcmVlbiwgZ3JhZGllbnRE
YXJrQmx1ZSwgZ3JhZGllbnREYXJrQWxwaGEpOwotfQotCi1zdGF0aWMgUGF0aCBwYXRoV2l0aFJv
dW5kZWRSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcGF0aFJlY3QsIGZsb2F0IHJhZGl1cykKLXsKLSAg
ICBQYXRoIHBhdGg7Ci0gICAgcGF0aC5hZGRSb3VuZGVkUmVjdChwYXRoUmVjdCwgRmxvYXRTaXpl
KHJhZGl1cywgcmFkaXVzKSk7Ci0KLSAgICByZXR1cm4gcGF0aDsKLX0KLSNlbHNlCi1zdGF0aWMg
aW5saW5lIENvbG9yIGZsYXRIaWdobGlnaHRDb2xvcigpCi17Ci0gICAgcmV0dXJuIENvbG9yKDI1
NSwgMjU1LCAwLCAyNTUpOwotfQotCi1zdGF0aWMgaW5saW5lIENvbG9yIGZsYXRSaW1TaGFkb3dD
b2xvcigpCi17Ci0gICAgcmV0dXJuIENvbG9yKDAsIDAsIDAsIDM4KTsKLX0KLQotc3RhdGljIGlu
bGluZSBDb2xvciBmbGF0RHJvcFNoYWRvd0NvbG9yKCkKLXsKLSAgICByZXR1cm4gQ29sb3IoMCwg
MCwgMCwgNTEpOwotfQotI2VuZGlmCi0gICAgCi12b2lkIFRleHRJbmRpY2F0b3I6OmRyYXcoR3Jh
cGhpY3NDb250ZXh0JiBncmFwaGljc0NvbnRleHQsIGNvbnN0IEludFJlY3QmIC8qZGlydHlSZWN0
Ki8pCi17Ci0jaWYgRU5BQkxFKExFR0FDWV9URVhUX0lORElDQVRPUl9TVFlMRSkKLSAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IG1fdGV4dFJlY3RzSW5TZWxlY3Rpb25SZWN0Q29vcmRpbmF0ZXMu
c2l6ZSgpOyArK2kpIHsKLSAgICAgICAgRmxvYXRSZWN0IHRleHRSZWN0ID0gbV90ZXh0UmVjdHNJ
blNlbGVjdGlvblJlY3RDb29yZGluYXRlc1tpXTsKLSAgICAgICAgdGV4dFJlY3QubW92ZShsZWZ0
Qm9yZGVyVGhpY2tuZXNzLCB0b3BCb3JkZXJUaGlja25lc3MpOwotCi0gICAgICAgIEZsb2F0UmVj
dCBvdXRlclBhdGhSZWN0ID0gaW5mbGF0ZVJlY3QodGV4dFJlY3QsIGhvcml6b250YWxPdXRzZXRU
b0NlbnRlck9mTGlnaHRCb3JkZXIsIHZlcnRpY2FsT3V0c2V0VG9DZW50ZXJPZkxpZ2h0Qm9yZGVy
KTsKLSAgICAgICAgRmxvYXRSZWN0IGlubmVyUGF0aFJlY3QgPSBpbmZsYXRlUmVjdCh0ZXh0UmVj
dCwgaG9yaXpvbnRhbFBhZGRpbmdJbnNpZGVMaWdodEJvcmRlciwgdmVydGljYWxQYWRkaW5nSW5z
aWRlTGlnaHRCb3JkZXIpOwotCi0gICAgICAgIHsKLSAgICAgICAgICAgIEdyYXBoaWNzQ29udGV4
dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcihncmFwaGljc0NvbnRleHQpOwotICAgICAgICAgICAgZ3Jh
cGhpY3NDb250ZXh0LnNldFNoYWRvdyhGbG9hdFNpemUoc2hhZG93T2Zmc2V0WCwgc2hhZG93T2Zm
c2V0WSksIHNoYWRvd0JsdXJSYWRpdXMsIHNoYWRvd0NvbG9yKCksIENvbG9yU3BhY2VTUkdCKTsK
LSAgICAgICAgICAgIGdyYXBoaWNzQ29udGV4dC5zZXRGaWxsQ29sb3IobGlnaHRCb3JkZXJDb2xv
cigpLCBDb2xvclNwYWNlRGV2aWNlUkdCKTsKLSAgICAgICAgICAgIGdyYXBoaWNzQ29udGV4dC5m
aWxsUGF0aChwYXRoV2l0aFJvdW5kZWRSZWN0KG91dGVyUGF0aFJlY3QsIGNvcm5lclJhZGl1cykp
OwotICAgICAgICB9Ci0KLSAgICAgICAgewotICAgICAgICAgICAgR3JhcGhpY3NDb250ZXh0U3Rh
dGVTYXZlciBzdGF0ZVNhdmVyKGdyYXBoaWNzQ29udGV4dCk7Ci0gICAgICAgICAgICBncmFwaGlj
c0NvbnRleHQuY2xpcChwYXRoV2l0aFJvdW5kZWRSZWN0KGlubmVyUGF0aFJlY3QsIGNvcm5lclJh
ZGl1cykpOwotICAgICAgICAgICAgUmVmUHRyPEdyYWRpZW50PiBncmFkaWVudCA9IEdyYWRpZW50
OjpjcmVhdGUoRmxvYXRQb2ludChpbm5lclBhdGhSZWN0LngoKSwgaW5uZXJQYXRoUmVjdC55KCkp
LCBGbG9hdFBvaW50KGlubmVyUGF0aFJlY3QueCgpLCBpbm5lclBhdGhSZWN0Lm1heFkoKSkpOwot
ICAgICAgICAgICAgZ3JhZGllbnQtPmFkZENvbG9yU3RvcCgwLCBncmFkaWVudExpZ2h0Q29sb3Io
KSk7Ci0gICAgICAgICAgICBncmFkaWVudC0+YWRkQ29sb3JTdG9wKDEsIGdyYWRpZW50RGFya0Nv
bG9yKCkpOwotICAgICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LnNldEZpbGxHcmFkaWVudChncmFk
aWVudC5yZWxlYXNlTm9uTnVsbCgpKTsKLSAgICAgICAgICAgIGdyYXBoaWNzQ29udGV4dC5maWxs
UmVjdChvdXRlclBhdGhSZWN0KTsKLSAgICAgICAgfQotCi0gICAgICAgIHsKLSAgICAgICAgICAg
IEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcihncmFwaGljc0NvbnRleHQpOwot
ICAgICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LnRyYW5zbGF0ZShGbG9hdFNpemUocm91bmRmKGxl
ZnRCb3JkZXJUaGlja25lc3MpLCByb3VuZGYodG9wQm9yZGVyVGhpY2tuZXNzKSkpOwotCi0gICAg
ICAgICAgICBJbnRSZWN0IGNvbnRlbnRJbWFnZVJlY3QgPSBlbmNsb3NpbmdJbnRSZWN0KG1fdGV4
dFJlY3RzSW5TZWxlY3Rpb25SZWN0Q29vcmRpbmF0ZXNbaV0pOwotICAgICAgICAgICAgbV9jb250
ZW50SW1hZ2UtPnBhaW50KGdyYXBoaWNzQ29udGV4dCwgbV9jb250ZW50SW1hZ2VTY2FsZUZhY3Rv
ciwgY29udGVudEltYWdlUmVjdC5sb2NhdGlvbigpLCBjb250ZW50SW1hZ2VSZWN0KTsKLSAgICAg
ICAgfQotICAgIH0KLSNlbHNlCi0gICAgZm9yIChhdXRvJiB0ZXh0UmVjdCA6IG1fdGV4dFJlY3Rz
SW5TZWxlY3Rpb25SZWN0Q29vcmRpbmF0ZXMpIHsKLSAgICAgICAgRmxvYXRSZWN0IGJsdXJSZWN0
ID0gdGV4dFJlY3Q7Ci0gICAgICAgIGJsdXJSZWN0Lm1vdmUoZmxhdFNoYWRvd0JsdXJSYWRpdXMg
KyBmbGF0U3R5bGVIb3Jpem9udGFsQm9yZGVyLCBmbGF0U2hhZG93Qmx1clJhZGl1cyArIGZsYXRT
dHlsZVZlcnRpY2FsQm9yZGVyKTsKLSAgICAgICAgRmxvYXRSZWN0IG91dGVyUGF0aFJlY3QgPSBp
bmZsYXRlUmVjdChibHVyUmVjdCwgZmxhdFN0eWxlSG9yaXpvbnRhbEJvcmRlciwgZmxhdFN0eWxl
VmVydGljYWxCb3JkZXIpOwotCi0gICAgICAgIHsKLSAgICAgICAgICAgIEdyYXBoaWNzQ29udGV4
dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcihncmFwaGljc0NvbnRleHQpOwotICAgICAgICAgICAgZ3Jh
cGhpY3NDb250ZXh0LnNldFNoYWRvdyhGbG9hdFNpemUoKSwgZmxhdFJpbVNoYWRvd0JsdXJSYWRp
dXMsIGZsYXRSaW1TaGFkb3dDb2xvcigpLCBDb2xvclNwYWNlU1JHQik7Ci0gICAgICAgICAgICBn
cmFwaGljc0NvbnRleHQuc2V0RmlsbENvbG9yKGZsYXRIaWdobGlnaHRDb2xvcigpLCBDb2xvclNw
YWNlU1JHQik7Ci0gICAgICAgICAgICBncmFwaGljc0NvbnRleHQuZmlsbFJlY3Qob3V0ZXJQYXRo
UmVjdCk7Ci0gICAgICAgICAgICBncmFwaGljc0NvbnRleHQuc2V0U2hhZG93KEZsb2F0U2l6ZShm
bGF0U2hhZG93T2Zmc2V0WCwgZmxhdFNoYWRvd09mZnNldFkpLCBmbGF0U2hhZG93Qmx1clJhZGl1
cywgZmxhdERyb3BTaGFkb3dDb2xvcigpLCBDb2xvclNwYWNlU1JHQik7Ci0gICAgICAgICAgICBn
cmFwaGljc0NvbnRleHQuZmlsbFJlY3Qob3V0ZXJQYXRoUmVjdCk7Ci0gICAgICAgIH0KLQotICAg
ICAgICB7Ci0gICAgICAgICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIo
Z3JhcGhpY3NDb250ZXh0KTsKLSAgICAgICAgICAgIGdyYXBoaWNzQ29udGV4dC50cmFuc2xhdGUo
RmxvYXRTaXplKGZsYXRTaGFkb3dCbHVyUmFkaXVzICsgZmxhdFN0eWxlSG9yaXpvbnRhbEJvcmRl
ciwgZmxhdFNoYWRvd0JsdXJSYWRpdXMgKyBmbGF0U3R5bGVWZXJ0aWNhbEJvcmRlcikpOwotCi0g
ICAgICAgICAgICBJbnRSZWN0IGNvbnRlbnRJbWFnZVJlY3QgPSBlbmNsb3NpbmdJbnRSZWN0KHRl
eHRSZWN0KTsKLSAgICAgICAgICAgIG1fY29udGVudEltYWdlLT5wYWludChncmFwaGljc0NvbnRl
eHQsIG1fY29udGVudEltYWdlU2NhbGVGYWN0b3IsIGNvbnRlbnRJbWFnZVJlY3QubG9jYXRpb24o
KSwgY29udGVudEltYWdlUmVjdCk7Ci0gICAgICAgIH0KLSAgICB9Ci0jZW5kaWYKLX0KLQotfSAv
LyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
VGV4dEluZGljYXRvci5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1RleHRJbmRpY2F0b3Iu
aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTQ3NmU3MC4uMDAwMDAwMAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvVGV4dEluZGljYXRvci5oCisrKyAvZGV2L251bGwKQEAg
LTEsNjQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgVGV4dEluZGljYXRvcl9oCi0jZGVm
aW5lIFRleHRJbmRpY2F0b3JfaAotCi0jaW5jbHVkZSAiU2hhcmVhYmxlQml0bWFwLmgiCi0jaW5j
bHVkZSA8V2ViQ29yZS9GbG9hdFJlY3QuaD4KLSNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgot
I2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotCi1u
YW1lc3BhY2UgV2ViQ29yZSB7Ci1jbGFzcyBHcmFwaGljc0NvbnRleHQ7Ci19Ci0KLW5hbWVzcGFj
ZSBXZWJLaXQgewotCi1jbGFzcyBUZXh0SW5kaWNhdG9yIDogcHVibGljIFJlZkNvdW50ZWQ8VGV4
dEluZGljYXRvcj4gewotcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPFRleHRJbmRpY2F0
b3I+IGNyZWF0ZShjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIHNlbGVjdGlvblJlY3RJbldpbmRv
d0Nvb3JkaW5hdGVzLCBjb25zdCBWZWN0b3I8V2ViQ29yZTo6RmxvYXRSZWN0PiYgdGV4dFJlY3Rz
SW5TZWxlY3Rpb25SZWN0Q29vcmRpbmF0ZXMsIGZsb2F0IGNvbnRlbnRJbWFnZVNjYWxlRmFjdG9y
LCBjb25zdCBTaGFyZWFibGVCaXRtYXA6OkhhbmRsZSYgY29udGVudEltYWdlSGFuZGxlKTsKLSAg
ICB+VGV4dEluZGljYXRvcigpOwotCi0gICAgV2ViQ29yZTo6RmxvYXRSZWN0IHNlbGVjdGlvblJl
Y3RJbldpbmRvd0Nvb3JkaW5hdGVzKCkgY29uc3QgeyByZXR1cm4gbV9zZWxlY3Rpb25SZWN0SW5X
aW5kb3dDb29yZGluYXRlczsgfQotICAgIFdlYkNvcmU6OkZsb2F0UmVjdCBmcmFtZVJlY3QoKSBj
b25zdDsKLQotICAgIFNoYXJlYWJsZUJpdG1hcCogY29udGVudEltYWdlKCkgY29uc3QgeyByZXR1
cm4gbV9jb250ZW50SW1hZ2UuZ2V0KCk7IH0KLQotICAgIHZvaWQgZHJhdyhXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQmLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBkaXJ0eVJlY3QpOwotCi1wcml2
YXRlOgotICAgIFRleHRJbmRpY2F0b3IoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBzZWxlY3Rp
b25SZWN0LCBjb25zdCBWZWN0b3I8V2ViQ29yZTo6RmxvYXRSZWN0PiYgdGV4dFJlY3RzLCBmbG9h
dCBjb250ZW50SW1hZ2VTY2FsZUZhY3RvciwgUGFzc1JlZlB0cjxTaGFyZWFibGVCaXRtYXA+IGNv
bnRlbnRJbWFnZSk7Ci0KLSAgICBXZWJDb3JlOjpGbG9hdFJlY3QgbV9zZWxlY3Rpb25SZWN0SW5X
aW5kb3dDb29yZGluYXRlczsKLSAgICBWZWN0b3I8V2ViQ29yZTo6RmxvYXRSZWN0PiBtX3RleHRS
ZWN0c0luU2VsZWN0aW9uUmVjdENvb3JkaW5hdGVzOwotICAgIGZsb2F0IG1fY29udGVudEltYWdl
U2NhbGVGYWN0b3I7Ci0gICAgUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4gbV9jb250ZW50SW1hZ2U7
Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQotI2VuZGlmIC8vIFRleHRJbmRpY2F0b3Jf
aApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAg
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcAppbmRleCA2MjJkMTIz
Li4yZWE1YTFiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVBy
b3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcApA
QCAtMzYyNSwxMCArMzYyNSw5IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpkaWRHZXRJbWFnZUZvckZp
bmRNYXRjaChjb25zdCBTaGFyZWFibGVCaXRtYXA6OkhhbmRsZSYgY29udGVuCiAgICAgbV9maW5k
TWF0Y2hlc0NsaWVudC5kaWRHZXRJbWFnZUZvck1hdGNoUmVzdWx0KHRoaXMsIFdlYkltYWdlOjpj
cmVhdGUoU2hhcmVhYmxlQml0bWFwOjpjcmVhdGUoY29udGVudEltYWdlSGFuZGxlKSkuZ2V0KCks
IG1hdGNoSW5kZXgpOwogfQogCi12b2lkIFdlYlBhZ2VQcm94eTo6c2V0VGV4dEluZGljYXRvcihj
b25zdCBGbG9hdFJlY3QmIHNlbGVjdGlvblJlY3RJbldpbmRvd0Nvb3JkaW5hdGVzLCBjb25zdCBW
ZWN0b3I8RmxvYXRSZWN0PiYgdGV4dFJlY3RzSW5TZWxlY3Rpb25SZWN0Q29vcmRpbmF0ZXMsIGZs
b2F0IGNvbnRlbnRJbWFnZVNjYWxlRmFjdG9yLCBjb25zdCBTaGFyZWFibGVCaXRtYXA6OkhhbmRs
ZSYgY29udGVudEltYWdlSGFuZGxlLCBib29sIGZhZGVPdXQsIGJvb2wgYW5pbWF0ZSkKK3ZvaWQg
V2ViUGFnZVByb3h5OjpzZXRUZXh0SW5kaWNhdG9yKGNvbnN0IFRleHRJbmRpY2F0b3ImIGluZGlj
YXRvciwgYm9vbCBmYWRlT3V0LCBib29sIGFuaW1hdGUpCiB7Ci0gICAgUmVmUHRyPFRleHRJbmRp
Y2F0b3I+IHRleHRJbmRpY2F0b3IgPSBUZXh0SW5kaWNhdG9yOjpjcmVhdGUoc2VsZWN0aW9uUmVj
dEluV2luZG93Q29vcmRpbmF0ZXMsIHRleHRSZWN0c0luU2VsZWN0aW9uUmVjdENvb3JkaW5hdGVz
LCBjb250ZW50SW1hZ2VTY2FsZUZhY3RvciwgY29udGVudEltYWdlSGFuZGxlKTsKLSAgICBtX3Bh
Z2VDbGllbnQuc2V0VGV4dEluZGljYXRvcih0ZXh0SW5kaWNhdG9yLnJlbGVhc2UoKSwgZmFkZU91
dCwgYW5pbWF0ZSk7CisgICAgbV9wYWdlQ2xpZW50LnNldFRleHRJbmRpY2F0b3IoaW5kaWNhdG9y
LCBmYWRlT3V0LCBhbmltYXRlKTsKIH0KIAogdm9pZCBXZWJQYWdlUHJveHk6OmRpZEZpbmRTdHJp
bmcoY29uc3QgU3RyaW5nJiBzdHJpbmcsIHVpbnQzMl90IG1hdGNoQ291bnQsIGludDMyX3QgbWF0
Y2hJbmRleCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJv
eHkuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAppbmRleCAzZDIx
NjVmLi5mNjY4MjA1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFn
ZVByb3h5LmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCkBA
IC0xNTIsNiArMTUyLDcgQEAgY2xhc3MgUGFnZUNsaWVudDsKIGNsYXNzIFJlbW90ZUxheWVyVHJl
ZVRyYW5zYWN0aW9uOwogY2xhc3MgUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3JQcm94eTsKIGNs
YXNzIFN0cmluZ1BhaXJWZWN0b3I7CitjbGFzcyBUZXh0SW5kaWNhdG9yOwogY2xhc3MgVmlld1Nu
YXBzaG90OwogY2xhc3MgVmlzaXRlZExpbmtQcm92aWRlcjsKIGNsYXNzIFdlYkJhY2tGb3J3YXJk
TGlzdDsKQEAgLTY2MSw3ICs2NjIsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBoaWRlRmluZFVJKCk7
CiAgICAgdm9pZCBjb3VudFN0cmluZ01hdGNoZXMoY29uc3QgU3RyaW5nJiwgRmluZE9wdGlvbnMs
IHVuc2lnbmVkIG1heE1hdGNoQ291bnQpOwogICAgIHZvaWQgZGlkQ291bnRTdHJpbmdNYXRjaGVz
KGNvbnN0IFN0cmluZyYsIHVpbnQzMl90IG1hdGNoQ291bnQpOwotICAgIHZvaWQgc2V0VGV4dElu
ZGljYXRvcihjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIHNlbGVjdGlvblJlY3RJbldpbmRvd0Nv
b3JkaW5hdGVzLCBjb25zdCBWZWN0b3I8V2ViQ29yZTo6RmxvYXRSZWN0PiYgdGV4dFJlY3RzSW5T
ZWxlY3Rpb25SZWN0Q29vcmRpbmF0ZXMsIGZsb2F0IGNvbnRlbnRJbWFnZVNjYWxlRmFjdG9yLCBj
b25zdCBTaGFyZWFibGVCaXRtYXA6OkhhbmRsZSYgY29udGVudEltYWdlSGFuZGxlLCBib29sIGZh
ZGVPdXQsIGJvb2wgYW5pbWF0ZSk7CisgICAgdm9pZCBzZXRUZXh0SW5kaWNhdG9yKGNvbnN0IFRl
eHRJbmRpY2F0b3ImLCBib29sIGZhZGVPdXQsIGJvb2wgYW5pbWF0ZSk7CiAgICAgdm9pZCBkaWRG
aW5kU3RyaW5nKGNvbnN0IFN0cmluZyYsIHVpbnQzMl90IG1hdGNoQ291bnQsIGludDMyX3QgbWF0
Y2hJbmRleCk7CiAgICAgdm9pZCBkaWRGYWlsVG9GaW5kU3RyaW5nKGNvbnN0IFN0cmluZyYpOwog
ICAgIHZvaWQgZGlkRmluZFN0cmluZ01hdGNoZXMoY29uc3QgU3RyaW5nJiwgY29uc3QgVmVjdG9y
PFZlY3RvcjxXZWJDb3JlOjpJbnRSZWN0Pj4mIG1hdGNoUmVjdHMsIGludDMyX3QgZmlyc3RJbmRl
eEFmdGVyU2VsZWN0aW9uKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9X
ZWJQYWdlUHJveHkubWVzc2FnZXMuaW4gYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFn
ZVByb3h5Lm1lc3NhZ2VzLmluCmluZGV4IDM3MDlkYzguLjg3MmMxMzAgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkubWVzc2FnZXMuaW4KKysrIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5tZXNzYWdlcy5pbgpAQCAtMjI4LDcg
KzIyOCw3IEBAIG1lc3NhZ2VzIC0+IFdlYlBhZ2VQcm94eSB7CiAKICAgICAjIEZpbmQgbWVzc2Fn
ZXMKICAgICBEaWRDb3VudFN0cmluZ01hdGNoZXMoU3RyaW5nIHN0cmluZywgdWludDMyX3QgbWF0
Y2hDb3VudCkKLSAgICBTZXRUZXh0SW5kaWNhdG9yKFdlYkNvcmU6OkZsb2F0UmVjdCBzZWxlY3Rp
b25SZWN0LCBWZWN0b3I8V2ViQ29yZTo6RmxvYXRSZWN0PiB0ZXh0UmVjdHMsIGZsb2F0IGNvbnRl
bnRJbWFnZVNjYWxlRmFjdG9yLCBXZWJLaXQ6OlNoYXJlYWJsZUJpdG1hcDo6SGFuZGxlIGNvbnRl
bnRJbWFnZUhhbmRsZSwgYm9vbCBmYWRlT3V0LCBib29sIGFuaW1hdGUpCisgICAgU2V0VGV4dElu
ZGljYXRvcihXZWJLaXQ6OlRleHRJbmRpY2F0b3IgaW5kaWNhdG9yLCBib29sIGZhZGVPdXQsIGJv
b2wgYW5pbWF0ZSkKICAgICBEaWRGaW5kU3RyaW5nKFN0cmluZyBzdHJpbmcsIHVpbnQzMl90IG1h
dGNoQ291bnQsIGludDMyX3QgbWF0Y2hJbmRleCkKICAgICBEaWRGYWlsVG9GaW5kU3RyaW5nKFN0
cmluZyBzdHJpbmcpCiAgICAgRGlkRmluZFN0cmluZ01hdGNoZXMoU3RyaW5nIHN0cmluZywgVmVj
dG9yPFZlY3RvcjxXZWJDb3JlOjpJbnRSZWN0Pj4gbWF0Y2hlcywgaW50MzJfdCBmaXJzdEluZGV4
QWZ0ZXJTZWxlY3Rpb24pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvaW9z
L1BhZ2VDbGllbnRJbXBsSU9TLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvaW9zL1BhZ2VD
bGllbnRJbXBsSU9TLmgKaW5kZXggMzIzZGZkMS4uYzY1MjViNiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL2lvcy9QYWdlQ2xpZW50SW1wbElPUy5oCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9pb3MvUGFnZUNsaWVudEltcGxJT1MuaApAQCAtOTYsNyArOTYsNyBA
QCBwcml2YXRlOgogI2VuZGlmCiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPFdlYlBvcHVwTWVudVBy
b3h5PiBjcmVhdGVQb3B1cE1lbnVQcm94eShXZWJQYWdlUHJveHkqKSBvdmVycmlkZTsKICAgICB2
aXJ0dWFsIFBhc3NSZWZQdHI8V2ViQ29udGV4dE1lbnVQcm94eT4gY3JlYXRlQ29udGV4dE1lbnVQ
cm94eShXZWJQYWdlUHJveHkqKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0VGV4dElu
ZGljYXRvcihQYXNzUmVmUHRyPFRleHRJbmRpY2F0b3I+LCBib29sIGZhZGVPdXQsIGJvb2wgYW5p
bWF0ZSkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIHNldFRleHRJbmRpY2F0b3IoY29uc3Qg
VGV4dEluZGljYXRvciYsIGJvb2wgZmFkZU91dCwgYm9vbCBhbmltYXRlKSBvdmVycmlkZTsKIAog
ICAgIHZpcnR1YWwgdm9pZCBlbnRlckFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKGNvbnN0IExh
eWVyVHJlZUNvbnRleHQmKSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHZvaWQgZXhpdEFjY2VsZXJh
dGVkQ29tcG9zaXRpbmdNb2RlKCkgb3ZlcnJpZGU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvaW9zL1BhZ2VDbGllbnRJbXBsSU9TLm1tIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL2lvcy9QYWdlQ2xpZW50SW1wbElPUy5tbQppbmRleCA4YzNiYjExLi4xYzViN2U5IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvaW9zL1BhZ2VDbGllbnRJbXBsSU9T
Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9pb3MvUGFnZUNsaWVudEltcGxJT1Mu
bW0KQEAgLTQ0MCw3ICs0NDAsNyBAQCBQYXNzUmVmUHRyPFdlYkNvbnRleHRNZW51UHJveHk+IFBh
Z2VDbGllbnRJbXBsOjpjcmVhdGVDb250ZXh0TWVudVByb3h5KFdlYlBhZ2VQcgogICAgIHJldHVy
biAwOwogfQogCi12b2lkIFBhZ2VDbGllbnRJbXBsOjpzZXRUZXh0SW5kaWNhdG9yKFBhc3NSZWZQ
dHI8VGV4dEluZGljYXRvcj4gdGV4dEluZGljYXRvciwgYm9vbCBmYWRlT3V0LCBib29sIGFuaW1h
dGUpCit2b2lkIFBhZ2VDbGllbnRJbXBsOjpzZXRUZXh0SW5kaWNhdG9yKGNvbnN0IFRleHRJbmRp
Y2F0b3ImLCBib29sIGZhZGVPdXQsIGJvb2wgYW5pbWF0ZSkKIHsKIH0KIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9QYWdlQ2xpZW50SW1wbC5oIGIvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL21hYy9QYWdlQ2xpZW50SW1wbC5oCmluZGV4IDE0NzU4MjcuLmMzOWJi
NTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvUGFnZUNsaWVudElt
cGwuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1BhZ2VDbGllbnRJbXBsLmgK
QEAgLTEyMCw3ICsxMjAsNyBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxXZWJD
b2xvclBpY2tlcj4gY3JlYXRlQ29sb3JQaWNrZXIoV2ViUGFnZVByb3h5KiwgY29uc3QgV2ViQ29y
ZTo6Q29sb3ImIGluaXRpYWxDb2xvciwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpOwogI2VuZGlm
CiAKLSAgICB2b2lkIHNldFRleHRJbmRpY2F0b3IoUGFzc1JlZlB0cjxUZXh0SW5kaWNhdG9yPiwg
Ym9vbCBmYWRlT3V0LCBib29sIGFuaW1hdGUpOworICAgIHZvaWQgc2V0VGV4dEluZGljYXRvcihj
b25zdCBUZXh0SW5kaWNhdG9yJiwgYm9vbCBmYWRlT3V0LCBib29sIGFuaW1hdGUpOwogCiAgICAg
dmlydHVhbCB2b2lkIGVudGVyQWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUoY29uc3QgTGF5ZXJU
cmVlQ29udGV4dCYpOwogICAgIHZpcnR1YWwgdm9pZCBleGl0QWNjZWxlcmF0ZWRDb21wb3NpdGlu
Z01vZGUoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvUGFnZUNs
aWVudEltcGwubW0gYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1BhZ2VDbGllbnRJbXBs
Lm1tCmluZGV4IDM3NGZlZmIuLjBhMTExNDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9tYWMvUGFnZUNsaWVudEltcGwubW0KKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL21hYy9QYWdlQ2xpZW50SW1wbC5tbQpAQCAtNDY3LDcgKzQ2Nyw3IEBAIFBhc3NSZWZQdHI8
V2ViQ29sb3JQaWNrZXI+IFBhZ2VDbGllbnRJbXBsOjpjcmVhdGVDb2xvclBpY2tlcihXZWJQYWdl
UHJveHkqIHBhZ2UsCiB9CiAjZW5kaWYKIAotdm9pZCBQYWdlQ2xpZW50SW1wbDo6c2V0VGV4dElu
ZGljYXRvcihQYXNzUmVmUHRyPFRleHRJbmRpY2F0b3I+IHRleHRJbmRpY2F0b3IsIGJvb2wgZmFk
ZU91dCwgYm9vbCBhbmltYXRlKQordm9pZCBQYWdlQ2xpZW50SW1wbDo6c2V0VGV4dEluZGljYXRv
cihjb25zdCBUZXh0SW5kaWNhdG9yJiB0ZXh0SW5kaWNhdG9yLCBib29sIGZhZGVPdXQsIGJvb2wg
YW5pbWF0ZSkKIHsKICAgICBbbV93a1ZpZXcgX3NldFRleHRJbmRpY2F0b3I6dGV4dEluZGljYXRv
ciBmYWRlT3V0OmZhZGVPdXQgYW5pbWF0ZTphbmltYXRlXTsKIH0KQEAgLTY4NCw4ICs2ODQsOCBA
QCB2b2lkIFBhZ2VDbGllbnRJbXBsOjpiZWdhbkV4aXRGdWxsU2NyZWVuKGNvbnN0IEludFJlY3Qm
IGluaXRpYWxGcmFtZSwgY29uc3QgSW50UgogCiB2b2lkIFBhZ2VDbGllbnRJbXBsOjpuYXZpZ2F0
aW9uR2VzdHVyZURpZEJlZ2luKCkKIHsKLSAgICAvLyBIaWRlIHRoZSBmaW5kZSBpbmRpY2F0b3Ig
aWYgaXQncyB2aXNpYmxlLgotICAgIHNldFRleHRJbmRpY2F0b3IobnVsbHB0ciwgZmFsc2UsIGZh
bHNlKTsKKyAgICAvLyBIaWRlIHRoZSB0ZXh0IGluZGljYXRvciBpZiBpdCdzIHZpc2libGUuCisg
ICAgc2V0VGV4dEluZGljYXRvcihUZXh0SW5kaWNhdG9yKCksIGZhbHNlLCBmYWxzZSk7CiAKICNp
ZiBXS19BUElfRU5BQkxFRAogICAgIGlmIChtX3dlYlZpZXcpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1RleHRJbmRpY2F0b3JXaW5kb3cuaCBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9tYWMvVGV4dEluZGljYXRvcldpbmRvdy5oCmluZGV4IDllZjE2NGQuLmUz
YTUwYTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvVGV4dEluZGlj
YXRvcldpbmRvdy5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvVGV4dEluZGlj
YXRvcldpbmRvdy5oCkBAIC0yOCw2ICsyOCw3IEBACiAKICNpZiBQTEFURk9STShNQUMpCiAKKyNp
bXBvcnQgIlRleHRJbmRpY2F0b3IuaCIKICNpbXBvcnQgIldlYktpdFN5c3RlbUludGVyZmFjZS5o
IgogI2ltcG9ydCA8d3RmL05vbmNvcHlhYmxlLmg+CiAjaW1wb3J0IDx3dGYvUmVmUHRyLmg+CkBA
IC0zOSw4ICs0MCw2IEBACiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCi1jbGFzcyBUZXh0SW5kaWNh
dG9yOwotCiBjbGFzcyBUZXh0SW5kaWNhdG9yV2luZG93IHsKICAgICBXVEZfTUFLRV9OT05DT1BZ
QUJMRShUZXh0SW5kaWNhdG9yV2luZG93KTsKIApAQCAtNDgsNyArNDcsNyBAQCBwdWJsaWM6CiAg
ICAgZXhwbGljaXQgVGV4dEluZGljYXRvcldpbmRvdyhXS1ZpZXcgKik7CiAgICAgflRleHRJbmRp
Y2F0b3JXaW5kb3coKTsKIAotICAgIHZvaWQgc2V0VGV4dEluZGljYXRvcihQYXNzUmVmUHRyPFRl
eHRJbmRpY2F0b3I+LCBib29sIGZhZGVPdXQsIGJvb2wgYW5pbWF0ZSk7CisgICAgdm9pZCBzZXRU
ZXh0SW5kaWNhdG9yKGNvbnN0IFRleHRJbmRpY2F0b3ImLCBib29sIGZhZGVPdXQsIGJvb2wgYW5p
bWF0ZSk7CiAKIHByaXZhdGU6CiAgICAgdm9pZCBjbG9zZVdpbmRvdygpOwpAQCAtNjIsNyArNjEs
NyBAQCBwcml2YXRlOgogICAgIHZvaWQgYm91bmNlQW5pbWF0aW9uRGlkRW5kKCk7CiAKICAgICBX
S1ZpZXcqIG1fd2tWaWV3OwotICAgIFJlZlB0cjxUZXh0SW5kaWNhdG9yPiBtX3RleHRJbmRpY2F0
b3I7CisgICAgVGV4dEluZGljYXRvciBtX3RleHRJbmRpY2F0b3I7CiAgICAgUmV0YWluUHRyPE5T
V2luZG93PiBtX3RleHRJbmRpY2F0b3JXaW5kb3c7CiAKICAgICBXS1dpbmRvd0JvdW5jZUFuaW1h
dGlvbkNvbnRleHRSZWYgbV9ib3VuY2VBbmltYXRpb25Db250ZXh0OwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9UZXh0SW5kaWNhdG9yV2luZG93Lm1tIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL21hYy9UZXh0SW5kaWNhdG9yV2luZG93Lm1tCmluZGV4IDVkNjU4
ZDUuLjc5MmNjN2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvVGV4
dEluZGljYXRvcldpbmRvdy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1Rl
eHRJbmRpY2F0b3JXaW5kb3cubW0KQEAgLTM5LDE1ICszOSwxNSBAQCBzdGF0aWMgY29uc3QgZG91
YmxlIGZhZGVPdXRBbmltYXRpb25EdXJhdGlvbiA9IDAuMzsKIHVzaW5nIG5hbWVzcGFjZSBXZWJD
b3JlOwogCiBAaW50ZXJmYWNlIFdLVGV4dEluZGljYXRvclZpZXcgOiBOU1ZpZXcgewotICAgIFJl
ZlB0cjxXZWJLaXQ6OlRleHRJbmRpY2F0b3I+IF90ZXh0SW5kaWNhdG9yOworICAgIFdlYktpdDo6
VGV4dEluZGljYXRvciBfdGV4dEluZGljYXRvcjsKIH0KIAotLSAoaWQpX2luaXRXaXRoVGV4dElu
ZGljYXRvcjooUGFzc1JlZlB0cjxXZWJLaXQ6OlRleHRJbmRpY2F0b3I+KXRleHRJbmRpY2F0b3I7
CistIChpZClfaW5pdFdpdGhUZXh0SW5kaWNhdG9yOihXZWJLaXQ6OlRleHRJbmRpY2F0b3ImKXRl
eHRJbmRpY2F0b3I7CiBAZW5kCiAKIEBpbXBsZW1lbnRhdGlvbiBXS1RleHRJbmRpY2F0b3JWaWV3
CiAKLS0gKGlkKV9pbml0V2l0aFRleHRJbmRpY2F0b3I6KFBhc3NSZWZQdHI8V2ViS2l0OjpUZXh0
SW5kaWNhdG9yPil0ZXh0SW5kaWNhdG9yCistIChpZClfaW5pdFdpdGhUZXh0SW5kaWNhdG9yOihX
ZWJLaXQ6OlRleHRJbmRpY2F0b3ImKXRleHRJbmRpY2F0b3IKIHsKICAgICBpZiAoKHNlbGYgPSBb
c3VwZXIgaW5pdFdpdGhGcmFtZTpOU1plcm9SZWN0XSkpCiAgICAgICAgIF90ZXh0SW5kaWNhdG9y
ID0gdGV4dEluZGljYXRvcjsKQEAgLTU5LDcgKzU5LDcgQEAgdXNpbmcgbmFtZXNwYWNlIFdlYkNv
cmU7CiB7CiAgICAgR3JhcGhpY3NDb250ZXh0IGdyYXBoaWNzQ29udGV4dChzdGF0aWNfY2FzdDxD
R0NvbnRleHRSZWY+KFtbTlNHcmFwaGljc0NvbnRleHQgY3VycmVudENvbnRleHRdIGdyYXBoaWNz
UG9ydF0pKTsKIAotICAgIF90ZXh0SW5kaWNhdG9yLT5kcmF3KGdyYXBoaWNzQ29udGV4dCwgZW5j
bG9zaW5nSW50UmVjdChyZWN0KSk7CisgICAgX3RleHRJbmRpY2F0b3IuZHJhdyhncmFwaGljc0Nv
bnRleHQsIGVuY2xvc2luZ0ludFJlY3QocmVjdCkpOwogfQogCiAtIChCT09MKWlzRmxpcHBlZApA
QCAtMTIwLDcgKzEyMCw3IEBAIFRleHRJbmRpY2F0b3JXaW5kb3c6On5UZXh0SW5kaWNhdG9yV2lu
ZG93KCkKICAgICBjbG9zZVdpbmRvdygpOwogfQogCi12b2lkIFRleHRJbmRpY2F0b3JXaW5kb3c6
OnNldFRleHRJbmRpY2F0b3IoUGFzc1JlZlB0cjxUZXh0SW5kaWNhdG9yPiB0ZXh0SW5kaWNhdG9y
LCBib29sIGZhZGVPdXQsIGJvb2wgYW5pbWF0ZSkKK3ZvaWQgVGV4dEluZGljYXRvcldpbmRvdzo6
c2V0VGV4dEluZGljYXRvcihjb25zdCBUZXh0SW5kaWNhdG9yJiB0ZXh0SW5kaWNhdG9yLCBib29s
IGZhZGVPdXQsIGJvb2wgYW5pbWF0ZSkKIHsKICAgICBpZiAobV90ZXh0SW5kaWNhdG9yID09IHRl
eHRJbmRpY2F0b3IpCiAgICAgICAgIHJldHVybjsKQEAgLTEzMCwxMCArMTMwLDEwIEBAIHZvaWQg
VGV4dEluZGljYXRvcldpbmRvdzo6c2V0VGV4dEluZGljYXRvcihQYXNzUmVmUHRyPFRleHRJbmRp
Y2F0b3I+IHRleHRJbmRpY2F0CiAgICAgLy8gR2V0IHJpZCBvZiB0aGUgb2xkIHdpbmRvdy4KICAg
ICBjbG9zZVdpbmRvdygpOwogCi0gICAgaWYgKCFtX3RleHRJbmRpY2F0b3IpCisgICAgaWYgKCFt
X3RleHRJbmRpY2F0b3IuY29udGVudEltYWdlKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIE5T
UmVjdCBjb250ZW50UmVjdCA9IG1fdGV4dEluZGljYXRvci0+ZnJhbWVSZWN0KCk7CisgICAgTlNS
ZWN0IGNvbnRlbnRSZWN0ID0gbV90ZXh0SW5kaWNhdG9yLmZyYW1lUmVjdCgpOwogICAgIE5TUmVj
dCB3aW5kb3dGcmFtZVJlY3QgPSBOU0ludGVncmFsUmVjdChbbV93a1ZpZXcgY29udmVydFJlY3Q6
Y29udGVudFJlY3QgdG9WaWV3Om5pbF0pOwogI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIHB1c2gK
ICNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBpZ25vcmVkICItV2RlcHJlY2F0ZWQtZGVjbGFyYXRp
b25zIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9XS0FjdGlvbk1l
bnVDb250cm9sbGVyLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1dLQWN0aW9uTWVu
dUNvbnRyb2xsZXIuaAppbmRleCA2NzEyZDAzLi5hYjk3MWQ4IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1dLQWN0aW9uTWVudUNvbnRyb2xsZXIuaAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1dLQWN0aW9uTWVudUNvbnRyb2xsZXIuaApAQCAtNTYs
NiArNTYsOCBAQCBlbnVtIGNsYXNzIEFjdGlvbk1lbnVTdGF0ZSB7CiAgICAgUmVmUHRyPEFQSTo6
T2JqZWN0PiBfdXNlckRhdGE7CiAgICAgX1dLQWN0aW9uTWVudVR5cGUgX3R5cGU7CiAgICAgUmV0
YWluUHRyPE5TU2hhcmluZ1NlcnZpY2VQaWNrZXI+IF9zaGFyaW5nU2VydmljZVBpY2tlcjsKKwor
ICAgIEJPT0wgX2lzU2hvd2luZ1RleHRJbmRpY2F0b3I7CiB9CiAKIC0gKGluc3RhbmNldHlwZSlp
bml0V2l0aFBhZ2U6KFdlYktpdDo6V2ViUGFnZVByb3h5JilwYWdlIHZpZXc6KFdLVmlldyAqKXdr
VmlldzsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvV0tBY3Rpb25N
ZW51Q29udHJvbGxlci5tbSBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvV0tBY3Rpb25N
ZW51Q29udHJvbGxlci5tbQppbmRleCBmYzI3YjBkLi5jYTc4YjRmIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1dLQWN0aW9uTWVudUNvbnRyb2xsZXIubW0KKysrIGIv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9XS0FjdGlvbk1lbnVDb250cm9sbGVyLm1tCkBA
IC0yOCw2ICsyOCw3IEBACiAKICNpZiBQTEFURk9STShNQUMpICYmIF9fTUFDX09TX1hfVkVSU0lP
Tl9NSU5fUkVRVUlSRUQgPj0gMTAxMDAwCiAKKyNpbXBvcnQgIlRleHRJbmRpY2F0b3IuaCIKICNp
bXBvcnQgIldLTlNVUkxFeHRyYXMuaCIKICNpbXBvcnQgIldLVmlld0ludGVybmFsLmgiCiAjaW1w
b3J0ICJXZWJDb250ZXh0LmgiCkBAIC03MSw2ICs3Miw4IEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJL
aXQ7CiBAaW50ZXJmYWNlIFdLQWN0aW9uTWVudUNvbnRyb2xsZXIgKCkgPE5TU2hhcmluZ1NlcnZp
Y2VEZWxlZ2F0ZSwgTlNTaGFyaW5nU2VydmljZVBpY2tlckRlbGVnYXRlPgogLSAodm9pZClfdXBk
YXRlQWN0aW9uTWVudUl0ZW1zRm9yU3RhZ2U6KE1lbnVVcGRhdGVTdGFnZSlzdGFnZTsKIC0gKEJP
T0wpX2NhbkFkZEltYWdlVG9QaG90b3M7CistICh2b2lkKV9zaG93VGV4dEluZGljYXRvcjsKKy0g
KHZvaWQpX2hpZGVUZXh0SW5kaWNhdG9yOwogQGVuZAogCiBAaW50ZXJmYWNlIFdLVmlldyAoV0tE
ZXByZWNhdGVkU1BJKQpAQCAtMTA4LDYgKzExMSw4IEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7
CiAKICAgICBfc3RhdGUgPSBBY3Rpb25NZW51U3RhdGU6OlBlbmRpbmc7CiAgICAgW3NlbGYgX3Vw
ZGF0ZUFjdGlvbk1lbnVJdGVtc0ZvclN0YWdlOk1lbnVVcGRhdGVTdGFnZTo6UHJlcGFyZUZvck1l
bnVdOworCisgICAgW3NlbGYgX2hpZGVUZXh0SW5kaWNhdG9yXTsKIH0KIAogLSAodm9pZCl3aWxs
T3Blbk1lbnU6KE5TTWVudSAqKW1lbnUgd2l0aEV2ZW50OihOU0V2ZW50ICopZXZlbnQKQEAgLTEx
NSw2ICsxMjAsOSBAQCB1c2luZyBuYW1lc3BhY2UgV2ViS2l0OwogICAgIGlmIChtZW51ICE9IF93
a1ZpZXcuYWN0aW9uTWVudSkKICAgICAgICAgcmV0dXJuOwogCisgICAgaWYgKF90eXBlID09IGtX
S0FjdGlvbk1lbnVEYXRhRGV0ZWN0ZWRJdGVtKQorICAgICAgICBbc2VsZiBfc2hvd1RleHRJbmRp
Y2F0b3JdOworCiAgICAgaWYgKF90eXBlICE9IGtXS0FjdGlvbk1lbnVSZWFkT25seVRleHQgJiYg
X3R5cGUgIT0ga1dLQWN0aW9uTWVudUVkaXRhYmxlVGV4dCkKICAgICAgICAgcmV0dXJuOwogCkBA
IC0xMjksNiArMTM3LDkgQEAgdXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKIHsKICAgICBpZiAobWVu
dSAhPSBfd2tWaWV3LmFjdGlvbk1lbnUpCiAgICAgICAgIHJldHVybjsKKworICAgIGlmIChfdHlw
ZSA9PSBrV0tBY3Rpb25NZW51RGF0YURldGVjdGVkSXRlbSAmJiBtZW51Lm51bWJlck9mSXRlbXMg
PiAxKQorICAgICAgICBbc2VsZiBfaGlkZVRleHRJbmRpY2F0b3JdOwogICAgIAogICAgIF9zdGF0
ZSA9IEFjdGlvbk1lbnVTdGF0ZTo6Tm9uZTsKICAgICBfaGl0VGVzdFJlc3VsdCA9IEFjdGlvbk1l
bnVIaXRUZXN0UmVzdWx0KCk7CkBAIC0xNDQsNiArMTU1LDI4IEBAIHVzaW5nIG5hbWVzcGFjZSBX
ZWJLaXQ7CiAgICAgX3VzZXJEYXRhID0gdXNlckRhdGE7CiB9CiAKKyNwcmFnbWEgbWFyayBUZXh0
IEluZGljYXRvcgorCistICh2b2lkKV9zaG93VGV4dEluZGljYXRvcgoreworICAgIGlmIChfaXNT
aG93aW5nVGV4dEluZGljYXRvcikKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKF9oaXRUZXN0
UmVzdWx0LmRldGVjdGVkRGF0YVRleHRJbmRpY2F0b3IuY29udGVudEltYWdlKCkpIHsKKyAgICAg
ICAgX3BhZ2UtPnNldFRleHRJbmRpY2F0b3IoX2hpdFRlc3RSZXN1bHQuZGV0ZWN0ZWREYXRhVGV4
dEluZGljYXRvciwgZmFsc2UsIHRydWUpOworICAgICAgICBfaXNTaG93aW5nVGV4dEluZGljYXRv
ciA9IFlFUzsKKyAgICB9Cit9CisKKy0gKHZvaWQpX2hpZGVUZXh0SW5kaWNhdG9yCit7CisgICAg
aWYgKCFfaXNTaG93aW5nVGV4dEluZGljYXRvcikKKyAgICAgICAgcmV0dXJuOworCisgICAgX3Bh
Z2UtPnNldFRleHRJbmRpY2F0b3IoVGV4dEluZGljYXRvcigpLCB0cnVlLCB0cnVlKTsKKyAgICBf
aXNTaG93aW5nVGV4dEluZGljYXRvciA9IE5POworfQorCiAjcHJhZ21hIG1hcmsgTGluayBhY3Rp
b25zCiAKIC0gKE5TQXJyYXkgKilfZGVmYXVsdE1lbnVJdGVtc0ZvckxpbmsKQEAgLTMxNiw4ICsz
NDksMTIgQEAgc3RhdGljIE5TU3RyaW5nICpwYXRoVG9QaG90b09uRGlzayhOU1N0cmluZyAqc3Vn
Z2VzdGVkRmlsZW5hbWUpCiAgICAgaWYgKCFhY3Rpb25Db250ZXh0KQogICAgICAgICByZXR1cm4g
QFsgXTsKIAorICAgIGFjdGlvbkNvbnRleHQuY29tcGxldGlvbkhhbmRsZXIgPSBeKCkgeworICAg
ICAgICBbc2VsZiBfaGlkZVRleHRJbmRpY2F0b3JdOworICAgIH07CisKICAgICBXS1NldEREQWN0
aW9uQ29udGV4dElzRm9yQWN0aW9uTWVudShhY3Rpb25Db250ZXh0KTsKLSAgICBhY3Rpb25Db250
ZXh0LmhpZ2hsaWdodEZyYW1lID0gW193a1ZpZXcud2luZG93IGNvbnZlcnRSZWN0VG9TY3JlZW46
W193a1ZpZXcgY29udmVydFJlY3Q6X2hpdFRlc3RSZXN1bHQuYWN0aW9uQm91bmRpbmdCb3ggdG9W
aWV3Om5pbF1dOworICAgIGFjdGlvbkNvbnRleHQuaGlnaGxpZ2h0RnJhbWUgPSBbX3drVmlldy53
aW5kb3cgY29udmVydFJlY3RUb1NjcmVlbjpbX3drVmlldyBjb252ZXJ0UmVjdDpfaGl0VGVzdFJl
c3VsdC5kZXRlY3RlZERhdGFCb3VuZGluZ0JveCB0b1ZpZXc6bmlsXV07CiAgICAgcmV0dXJuIFtb
Z2V0RERBY3Rpb25zTWFuYWdlckNsYXNzKCkgc2hhcmVkTWFuYWdlcl0gbWVudUl0ZW1zRm9yUmVz
dWx0OltfaGl0VGVzdFJlc3VsdC5hY3Rpb25Db250ZXh0IG1haW5SZXN1bHRdIGFjdGlvbkNvbnRl
eHQ6YWN0aW9uQ29udGV4dF07CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYktp
dDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJLaXQyL1dlYktpdDIueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBmMGM4NDMwLi5mM2RmZTNiIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIv
U291cmNlL1dlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC00NDU4
LDYgKzQ0NTgsOCBAQAogCQkJCTUyNzJCMjg4MTQwNjk4NUQwMDk2QTVEMCAvKiBTdGF0aXN0aWNz
RGF0YS5jcHAgKi8sCiAJCQkJNTI3MkIyODkxNDA2OTg1RDAwOTZBNUQwIC8qIFN0YXRpc3RpY3NE
YXRhLmggKi8sCiAJCQkJMUE1RTREQTMxMkQzQkQzRDAwOTlBMkJCIC8qIFRleHRDaGVja2VyU3Rh
dGUuaCAqLywKKwkJCQkxQTkxMDA3MDEyNjY3NUM0MDAxODQyRjUgLyogVGV4dEluZGljYXRvci5j
cHAgKi8sCisJCQkJMUE5MTAwNkYxMjY2NzVDMzAwMTg0MkY1IC8qIFRleHRJbmRpY2F0b3IuaCAq
LywKIAkJCQkxQTY0MjQ1RDEyREUyOUExMDBDQUFFMkMgLyogVXBkYXRlSW5mby5jcHAgKi8sCiAJ
CQkJMUE2NDI0NUMxMkRFMjlBMTAwQ0FBRTJDIC8qIFVwZGF0ZUluZm8uaCAqLywKIAkJCQkxQUMx
MzM2NTE4NTY1QjU3MDBGM0VDMDUgLyogVXNlckRhdGEuY3BwICovLApAQCAtNTc3OCwxMCArNTc4
MCw4IEBACiAJCQkJQkMyNjUyMTIxMTgyNjA4MTAwMjQzRTEyIC8qIERyYXdpbmdBcmVhUHJveHku
Y3BwICovLAogCQkJCUJDMjY1MjEzMTE4MjYwODEwMDI0M0UxMiAvKiBEcmF3aW5nQXJlYVByb3h5
LmggKi8sCiAJCQkJMUE2NDIyRkMxMkREMDhGRTAwQ0FBRTJDIC8qIERyYXdpbmdBcmVhUHJveHku
bWVzc2FnZXMuaW4gKi8sCi0JCQkJMUE5MTAwNzAxMjY2NzVDNDAwMTg0MkY1IC8qIFRleHRJbmRp
Y2F0b3IuY3BwICovLAogCQkJCTFBRTAwRDVFMTgzMTc5MjEwMDA4N0RENyAvKiBGcmFtZUxvYWRT
dGF0ZS5jcHAgKi8sCiAJCQkJMUFFMDBENUYxODMxNzkyMTAwMDg3REQ3IC8qIEZyYW1lTG9hZFN0
YXRlLmggKi8sCi0JCQkJMUE5MTAwNkYxMjY2NzVDMzAwMTg0MkY1IC8qIFRleHRJbmRpY2F0b3Iu
aCAqLywKIAkJCQlCQzE3NzUzRTExOEJBQkYwMDA3RDlFOUEgLyogR2VuZXJpY0NhbGxiYWNrLmgg
Ki8sCiAJCQkJQkMwNkY0NDkxMkRCRDFGNTAwMkQ3OERFIC8qIEdlb2xvY2F0aW9uUGVybWlzc2lv
blJlcXVlc3RNYW5hZ2VyUHJveHkuY3BwICovLAogCQkJCUJDMDZGNDQ4MTJEQkQxRjUwMDJENzhE
RSAvKiBHZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlclByb3h5LmggKi8sCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvRmluZENvbnRyb2xsZXIu
Y3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0ZpbmRDb250cm9sbGVyLmNw
cAppbmRleCBhODFmZWQ5Li4zMDE5Y2MxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYlBhZ2UvRmluZENvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvV2ViUGFnZS9GaW5kQ29udHJvbGxlci5jcHAKQEAgLTI5LDYgKzI5LDcgQEAKICNp
bmNsdWRlICJEcmF3aW5nQXJlYS5oIgogI2luY2x1ZGUgIlBsdWdpblZpZXcuaCIKICNpbmNsdWRl
ICJTaGFyZWFibGVCaXRtYXAuaCIKKyNpbmNsdWRlICJUZXh0SW5kaWNhdG9yLmgiCiAjaW5jbHVk
ZSAiV0tQYWdlLmgiCiAjaW5jbHVkZSAiV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgiCiAjaW5jbHVk
ZSAiV2ViUGFnZS5oIgpAQCAtMzYsMTAgKzM3LDggQEAKICNpbmNsdWRlIDxXZWJDb3JlL0RvY3Vt
ZW50TWFya2VyQ29udHJvbGxlci5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRmxvYXRRdWFkLmg+CiAj
aW5jbHVkZSA8V2ViQ29yZS9Gb2N1c0NvbnRyb2xsZXIuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0Zy
YW1lU25hcHNob3R0aW5nLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9GcmFtZVZpZXcuaD4KICNpbmNs
dWRlIDxXZWJDb3JlL0dyYXBoaWNzQ29udGV4dC5oPgotI2luY2x1ZGUgPFdlYkNvcmUvSW1hZ2VC
dWZmZXIuaD4KICNpbmNsdWRlIDxXZWJDb3JlL01haW5GcmFtZS5oPgogI2luY2x1ZGUgPFdlYkNv
cmUvUGFnZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUGFnZU92ZXJsYXlDb250cm9sbGVyLmg+CkBA
IC0yNTksMjggKzI1OCw2IEBAIHZvaWQgRmluZENvbnRyb2xsZXI6OmZpbmRTdHJpbmdNYXRjaGVz
KGNvbnN0IFN0cmluZyYgc3RyaW5nLCBGaW5kT3B0aW9ucyBvcHRpb25zCiAgICAgbV93ZWJQYWdl
LT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkRpZEZpbmRTdHJpbmdNYXRjaGVzKHN0cmlu
ZywgbWF0Y2hSZWN0cywgaW5kZXhGb3JTZWxlY3Rpb24pKTsKIH0KIAotc3RhdGljIGJvb2wgZ2V0
RmluZEluZGljYXRvckJpdG1hcChGcmFtZSYgZnJhbWUsIFNoYXJlYWJsZUJpdG1hcDo6SGFuZGxl
JiBoYW5kbGUpCi17Ci0gICAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBzbmFwc2hvdCA9
IHNuYXBzaG90U2VsZWN0aW9uKGZyYW1lLCBXZWJDb3JlOjpTbmFwc2hvdE9wdGlvbnNGb3JjZUJs
YWNrVGV4dCk7Ci0gICAgaWYgKCFzbmFwc2hvdCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0g
ICAgUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4gZmluZEluZGljYXRvclRleHRCYWNraW5nU3RvcmUg
PSBTaGFyZWFibGVCaXRtYXA6OmNyZWF0ZVNoYXJlYWJsZShzbmFwc2hvdC0+aW50ZXJuYWxTaXpl
KCksIFNoYXJlYWJsZUJpdG1hcDo6U3VwcG9ydHNBbHBoYSk7Ci0gICAgaWYgKCFmaW5kSW5kaWNh
dG9yVGV4dEJhY2tpbmdTdG9yZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgLy8gRklY
TUU6IFdlIHNob3VsZCBjb25zaWRlciB1c2luZyBzdWJwaXhlbCBhbnRpYWxpYXNpbmcgZm9yIHRo
ZSBzbmFwc2hvdAotICAgIC8vIGlmIHdlJ3JlIGNvbXBvc2l0aW5nIHRoaXMgaW1hZ2Ugb250byBh
IHNvbGlkIGNvbG9yICh0aGUgbW9kZXJuIGZpbmQgaW5kaWNhdG9yIHN0eWxlKS4KLSAgICBhdXRv
IGdyYXBoaWNzQ29udGV4dCA9IGZpbmRJbmRpY2F0b3JUZXh0QmFja2luZ1N0b3JlLT5jcmVhdGVH
cmFwaGljc0NvbnRleHQoKTsKLSAgICBmbG9hdCBkZXZpY2VTY2FsZUZhY3RvciA9IGZyYW1lLnBh
Z2UoKS0+ZGV2aWNlU2NhbGVGYWN0b3IoKTsKLSAgICBncmFwaGljc0NvbnRleHQtPnNjYWxlKEZs
b2F0U2l6ZShkZXZpY2VTY2FsZUZhY3RvciwgZGV2aWNlU2NhbGVGYWN0b3IpKTsKLSAgICBncmFw
aGljc0NvbnRleHQtPmRyYXdJbWFnZUJ1ZmZlcihzbmFwc2hvdC5nZXQoKSwgQ29sb3JTcGFjZURl
dmljZVJHQiwgRmxvYXRQb2ludCgpKTsKLQotICAgIGlmICghZmluZEluZGljYXRvclRleHRCYWNr
aW5nU3RvcmUtPmNyZWF0ZUhhbmRsZShoYW5kbGUpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgcmV0dXJuIHRydWU7Ci19Ci0KIHZvaWQgRmluZENvbnRyb2xsZXI6OmdldEltYWdlRm9yRmlu
ZE1hdGNoKHVpbnQzMl90IG1hdGNoSW5kZXgpCiB7CiAgICAgaWYgKG1hdGNoSW5kZXggPj0gbV9m
aW5kTWF0Y2hlcy5zaXplKCkpCkBAIC0yOTIsMTEgKzI2OSwxNiBAQCB2b2lkIEZpbmRDb250cm9s
bGVyOjpnZXRJbWFnZUZvckZpbmRNYXRjaCh1aW50MzJfdCBtYXRjaEluZGV4KQogICAgIFZpc2li
bGVTZWxlY3Rpb24gb2xkU2VsZWN0aW9uID0gZnJhbWUtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigp
OwogICAgIGZyYW1lLT5zZWxlY3Rpb24oKS5zZXRTZWxlY3Rpb24oVmlzaWJsZVNlbGVjdGlvbiht
X2ZpbmRNYXRjaGVzW21hdGNoSW5kZXhdLmdldCgpKSk7CiAKLSAgICBTaGFyZWFibGVCaXRtYXA6
OkhhbmRsZSBoYW5kbGU7Ci0gICAgZ2V0RmluZEluZGljYXRvckJpdG1hcCgqZnJhbWUsIGhhbmRs
ZSk7CisgICAgUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4gc2VsZWN0aW9uU25hcHNob3QgPSBXZWJG
cmFtZTo6ZnJvbUNvcmVGcmFtZSgqZnJhbWUpLT5jcmVhdGVTZWxlY3Rpb25TbmFwc2hvdCgpOwog
CiAgICAgZnJhbWUtPnNlbGVjdGlvbigpLnNldFNlbGVjdGlvbihvbGRTZWxlY3Rpb24pOwogCisg
ICAgaWYgKCFzZWxlY3Rpb25TbmFwc2hvdCkKKyAgICAgICAgcmV0dXJuOworCisgICAgU2hhcmVh
YmxlQml0bWFwOjpIYW5kbGUgaGFuZGxlOworICAgIHNlbGVjdGlvblNuYXBzaG90LT5jcmVhdGVI
YW5kbGUoaGFuZGxlKTsKKwogICAgIGlmIChoYW5kbGUuaXNOdWxsKCkpCiAgICAgICAgIHJldHVy
bjsKIApAQCAtMzMyLDI5ICszMTQsMTIgQEAgdm9pZCBGaW5kQ29udHJvbGxlcjo6aGlkZUZpbmRV
SSgpCiAjaWYgIVBMQVRGT1JNKElPUykKIGJvb2wgRmluZENvbnRyb2xsZXI6OnVwZGF0ZUZpbmRJ
bmRpY2F0b3IoRnJhbWUmIHNlbGVjdGVkRnJhbWUsIGJvb2wgaXNTaG93aW5nT3ZlcmxheSwgYm9v
bCBzaG91bGRBbmltYXRlKQogewotICAgIEludFJlY3Qgc2VsZWN0aW9uUmVjdCA9IGVuY2xvc2lu
Z0ludFJlY3Qoc2VsZWN0ZWRGcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb25Cb3VuZHMoKSk7Ci0g
ICAgU2hhcmVhYmxlQml0bWFwOjpIYW5kbGUgaGFuZGxlOwotICAgIGlmICghZ2V0RmluZEluZGlj
YXRvckJpdG1hcChzZWxlY3RlZEZyYW1lLCBoYW5kbGUpKQorICAgIGF1dG8gaW5kaWNhdG9yID0g
VGV4dEluZGljYXRvcjo6aW5kaWNhdG9yV2l0aFNlbGVjdGlvbkluRnJhbWUoKldlYkZyYW1lOjpm
cm9tQ29yZUZyYW1lKHNlbGVjdGVkRnJhbWUpKTsKKyAgICBpZiAoIWluZGljYXRvci5jb250ZW50
SW1hZ2UoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgLy8gV2Ugd2FudCB0aGUgc2Vs
ZWN0aW9uIHJlY3QgaW4gd2luZG93IGNvb3JkaW5hdGVzLgotICAgIEludFJlY3Qgc2VsZWN0aW9u
UmVjdEluV2luZG93Q29vcmRpbmF0ZXMgPSBzZWxlY3RlZEZyYW1lLnZpZXcoKS0+Y29udGVudHNU
b1dpbmRvdyhzZWxlY3Rpb25SZWN0KTsKLQotICAgIFZlY3RvcjxGbG9hdFJlY3Q+IHRleHRSZWN0
czsKLSAgICBzZWxlY3RlZEZyYW1lLnNlbGVjdGlvbigpLmdldENsaXBwZWRWaXNpYmxlVGV4dFJl
Y3RhbmdsZXModGV4dFJlY3RzKTsKLQotICAgIC8vIFdlIHdhbnQgdGhlIHRleHQgcmVjdHMgaW4g
c2VsZWN0aW9uIHJlY3QgY29vcmRpbmF0ZXMuCi0gICAgVmVjdG9yPEZsb2F0UmVjdD4gdGV4dFJl
Y3RzSW5TZWxlY3Rpb25SZWN0Q29vcmRpbmF0ZXM7Ci0gICAgCi0gICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCB0ZXh0UmVjdHMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgSW50UmVjdCB0ZXh0UmVj
dEluU2VsZWN0aW9uUmVjdENvb3JkaW5hdGVzID0gc2VsZWN0ZWRGcmFtZS52aWV3KCktPmNvbnRl
bnRzVG9XaW5kb3coZW5jbG9zaW5nSW50UmVjdCh0ZXh0UmVjdHNbaV0pKTsKLSAgICAgICAgdGV4
dFJlY3RJblNlbGVjdGlvblJlY3RDb29yZGluYXRlcy5tb3ZlKC1zZWxlY3Rpb25SZWN0SW5XaW5k
b3dDb29yZGluYXRlcy54KCksIC1zZWxlY3Rpb25SZWN0SW5XaW5kb3dDb29yZGluYXRlcy55KCkp
OwotCi0gICAgICAgIHRleHRSZWN0c0luU2VsZWN0aW9uUmVjdENvb3JkaW5hdGVzLmFwcGVuZCh0
ZXh0UmVjdEluU2VsZWN0aW9uUmVjdENvb3JkaW5hdGVzKTsKLSAgICB9ICAgICAgICAgICAgCi0K
LSAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6U2V0VGV4dEluZGlj
YXRvcihzZWxlY3Rpb25SZWN0SW5XaW5kb3dDb29yZGluYXRlcywgdGV4dFJlY3RzSW5TZWxlY3Rp
b25SZWN0Q29vcmRpbmF0ZXMsIG1fd2ViUGFnZS0+Y29yZVBhZ2UoKS0+ZGV2aWNlU2NhbGVGYWN0
b3IoKSwgaGFuZGxlLCAhaXNTaG93aW5nT3ZlcmxheSwgc2hvdWxkQW5pbWF0ZSkpOwotICAgIG1f
ZmluZEluZGljYXRvclJlY3QgPSBzZWxlY3Rpb25SZWN0SW5XaW5kb3dDb29yZGluYXRlczsKKyAg
ICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6U2V0VGV4dEluZGljYXRv
cihpbmRpY2F0b3IsICFpc1Nob3dpbmdPdmVybGF5LCBzaG91bGRBbmltYXRlKSk7CisgICAgbV9m
aW5kSW5kaWNhdG9yUmVjdCA9IGVuY2xvc2luZ0ludFJlY3QoaW5kaWNhdG9yLnNlbGVjdGlvblJl
Y3RJbldpbmRvd0Nvb3JkaW5hdGVzKCkpOwogICAgIG1faXNTaG93aW5nRmluZEluZGljYXRvciA9
IHRydWU7CiAKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTM2NSw4ICszMzAsNyBAQCB2b2lkIEZpbmRD
b250cm9sbGVyOjpoaWRlRmluZEluZGljYXRvcigpCiAgICAgaWYgKCFtX2lzU2hvd2luZ0ZpbmRJ
bmRpY2F0b3IpCiAgICAgICAgIHJldHVybjsKIAotICAgIFNoYXJlYWJsZUJpdG1hcDo6SGFuZGxl
IGhhbmRsZTsKLSAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6U2V0
VGV4dEluZGljYXRvcihGbG9hdFJlY3QoKSwgVmVjdG9yPEZsb2F0UmVjdD4oKSwgbV93ZWJQYWdl
LT5jb3JlUGFnZSgpLT5kZXZpY2VTY2FsZUZhY3RvcigpLCBoYW5kbGUsIGZhbHNlLCB0cnVlKSk7
CisgICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlNldFRleHRJbmRp
Y2F0b3IoVGV4dEluZGljYXRvcigpLCBmYWxzZSwgdHJ1ZSkpOwogICAgIG1faXNTaG93aW5nRmlu
ZEluZGljYXRvciA9IGZhbHNlOwogICAgIG1fZm91bmRTdHJpbmdNYXRjaEluZGV4ID0gLTE7CiAg
ICAgZGlkSGlkZUZpbmRJbmRpY2F0b3IoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvV2ViUGFnZS9XZWJGcmFtZS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L1dlYlBhZ2UvV2ViRnJhbWUuY3BwCmluZGV4IDlkY2VlNDYuLjBlNDBlMjYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJGcmFtZS5jcHAKKysrIGIvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkZyYW1lLmNwcApAQCAtNTAsMTIgKzUw
LDE0IEBACiAjaW5jbHVkZSA8V2ViQ29yZS9Eb2N1bWVudExvYWRlci5oPgogI2luY2x1ZGUgPFdl
YkNvcmUvRXZlbnRIYW5kbGVyLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9GcmFtZS5oPgorI2luY2x1
ZGUgPFdlYkNvcmUvRnJhbWVTbmFwc2hvdHRpbmcuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0ZyYW1l
Vmlldy5oPgogI2luY2x1ZGUgPFdlYkNvcmUvSFRNTEZvcm1FbGVtZW50Lmg+CiAjaW5jbHVkZSA8
V2ViQ29yZS9IVE1MRnJhbWVPd25lckVsZW1lbnQuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0hUTUxJ
bnB1dEVsZW1lbnQuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0hUTUxOYW1lcy5oPgogI2luY2x1ZGUg
PFdlYkNvcmUvSFRNTFRleHRBcmVhRWxlbWVudC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvSW1hZ2VC
dWZmZXIuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0pTQ1NTU3R5bGVEZWNsYXJhdGlvbi5oPgogI2lu
Y2x1ZGUgPFdlYkNvcmUvSlNFbGVtZW50Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9KU1JhbmdlLmg+
CkBAIC03ODAsNSArNzgyLDI1IEBAIFJldGFpblB0cjxDRkRhdGFSZWY+IFdlYkZyYW1lOjp3ZWJB
cmNoaXZlRGF0YShGcmFtZUZpbHRlckZ1bmN0aW9uIGNhbGxiYWNrLCB2b2lkCiAgICAgcmV0dXJu
IGFyY2hpdmUtPnJhd0RhdGFSZXByZXNlbnRhdGlvbigpOwogfQogI2VuZGlmCisKK1Bhc3NSZWZQ
dHI8U2hhcmVhYmxlQml0bWFwPiBXZWJGcmFtZTo6Y3JlYXRlU2VsZWN0aW9uU25hcHNob3QoKQor
eworICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gc25hcHNob3QgPSBzbmFwc2hvdFNl
bGVjdGlvbigqY29yZUZyYW1lKCksIFdlYkNvcmU6OlNuYXBzaG90T3B0aW9uc0ZvcmNlQmxhY2tU
ZXh0KTsKKyAgICBpZiAoIXNuYXBzaG90KQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAg
IFJlZlB0cjxTaGFyZWFibGVCaXRtYXA+IHNoYXJlZFNuYXBzaG90ID0gU2hhcmVhYmxlQml0bWFw
OjpjcmVhdGVTaGFyZWFibGUoc25hcHNob3QtPmludGVybmFsU2l6ZSgpLCBTaGFyZWFibGVCaXRt
YXA6OlN1cHBvcnRzQWxwaGEpOworICAgIGlmICghc2hhcmVkU25hcHNob3QpCisgICAgICAgIHJl
dHVybiBudWxscHRyOworCisgICAgLy8gRklYTUU6IFdlIHNob3VsZCBjb25zaWRlciBwcm92aWRp
bmcgYSB3YXkgdG8gdXNlIHN1YnBpeGVsIGFudGlhbGlhc2luZyBmb3IgdGhlIHNuYXBzaG90Cisg
ICAgLy8gaWYgd2UncmUgY29tcG9zaXRpbmcgdGhpcyBpbWFnZSBvbnRvIGEgc29saWQgY29sb3Ig
KGUuZy4gdGhlIG1vZGVybiBmaW5kIGluZGljYXRvciBzdHlsZSkuCisgICAgYXV0byBncmFwaGlj
c0NvbnRleHQgPSBzaGFyZWRTbmFwc2hvdC0+Y3JlYXRlR3JhcGhpY3NDb250ZXh0KCk7CisgICAg
ZmxvYXQgZGV2aWNlU2NhbGVGYWN0b3IgPSBjb3JlRnJhbWUoKS0+cGFnZSgpLT5kZXZpY2VTY2Fs
ZUZhY3RvcigpOworICAgIGdyYXBoaWNzQ29udGV4dC0+c2NhbGUoRmxvYXRTaXplKGRldmljZVNj
YWxlRmFjdG9yLCBkZXZpY2VTY2FsZUZhY3RvcikpOworICAgIGdyYXBoaWNzQ29udGV4dC0+ZHJh
d0ltYWdlQnVmZmVyKHNuYXBzaG90LmdldCgpLCBDb2xvclNwYWNlRGV2aWNlUkdCLCBGbG9hdFBv
aW50KCkpOworCisgICAgcmV0dXJuIHNoYXJlZFNuYXBzaG90LnJlbGVhc2UoKTsKK30KICAgICAK
IH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9XZWJQYWdlL1dlYkZyYW1lLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBh
Z2UvV2ViRnJhbWUuaAppbmRleCBiMTE0YjJlLi42MGM5NDM0IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViRnJhbWUuaAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViRnJhbWUuaApAQCAtMjcsNiArMjcsNyBAQAogI2RlZmlu
ZSBXZWJGcmFtZV9oCiAKICNpbmNsdWRlICJBUElPYmplY3QuaCIKKyNpbmNsdWRlICJTaGFyZWFi
bGVCaXRtYXAuaCIKICNpbmNsdWRlICJXS0Jhc2UuaCIKICNpbmNsdWRlICJXZWJGcmFtZUxvYWRl
ckNsaWVudC5oIgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTQmFzZS5oPgpAQCAtMTQ5LDYg
KzE1MCw4IEBAIHB1YmxpYzoKICAgICBSZXRhaW5QdHI8Q0ZEYXRhUmVmPiB3ZWJBcmNoaXZlRGF0
YShGcmFtZUZpbHRlckZ1bmN0aW9uLCB2b2lkKiBjb250ZXh0KTsKICNlbmRpZgogCisgICAgUGFz
c1JlZlB0cjxTaGFyZWFibGVCaXRtYXA+IGNyZWF0ZVNlbGVjdGlvblNuYXBzaG90KCk7CisKIHBy
aXZhdGU6CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8V2ViRnJhbWU+IGNyZWF0ZShzdGQ6OnVuaXF1
ZV9wdHI8V2ViRnJhbWVMb2FkZXJDbGllbnQ+KTsKICAgICBXZWJGcmFtZShzdGQ6OnVuaXF1ZV9w
dHI8V2ViRnJhbWVMb2FkZXJDbGllbnQ+KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvV2ViUGFnZS9tYWMvV2ViUGFnZU1hYy5tbSBiL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvV2ViUGFnZS9tYWMvV2ViUGFnZU1hYy5tbQppbmRleCA3ZGFiMGYzLi44N2VlMDViIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VN
YWMubW0KKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9XZWJQYWdl
TWFjLm1tCkBAIC0xMDc0LDcgKzEwNzQsNyBAQCBTdHJpbmcgV2ViUGFnZTo6cGxhdGZvcm1Vc2Vy
QWdlbnQoY29uc3QgVVJMJikgY29uc3QKICAgICByZXR1cm4gU3RyaW5nKCk7CiB9CiAKLXN0YXRp
YyBSZXRhaW5QdHI8RERBY3Rpb25Db250ZXh0PiBzY2FuRm9yRGF0YURldGVjdGVkSXRlbXMoY29u
c3QgSGl0VGVzdFJlc3VsdCYgaGl0VGVzdFJlc3VsdCwgRmxvYXRSZWN0JiBhY3Rpb25Cb3VuZGlu
Z0JveCkKK3N0YXRpYyBSZXRhaW5QdHI8RERBY3Rpb25Db250ZXh0PiBzY2FuRm9yRGF0YURldGVj
dGVkSXRlbXMoY29uc3QgSGl0VGVzdFJlc3VsdCYgaGl0VGVzdFJlc3VsdCwgRmxvYXRSZWN0JiBk
ZXRlY3RlZERhdGFCb3VuZGluZ0JveCwgUmVmUHRyPFJhbmdlPiYgZGV0ZWN0ZWREYXRhUmFuZ2Up
CiB7CiAgICAgTm9kZSogbm9kZSA9IGhpdFRlc3RSZXN1bHQuaW5uZXJOb25TaGFyZWROb2RlKCk7
CiAgICAgaWYgKCFub2RlKQpAQCAtMTEyNSwxMSArMTEyNSwzMyBAQCBzdGF0aWMgUmV0YWluUHRy
PEREQWN0aW9uQ29udGV4dD4gc2NhbkZvckRhdGFEZXRlY3RlZEl0ZW1zKGNvbnN0IEhpdFRlc3RS
ZXN1bHQmCiAgICAgVmVjdG9yPEZsb2F0UXVhZD4gcXVhZHM7CiAgICAgbWFpblJlc3VsdFJhbmdl
LT50ZXh0UXVhZHMocXVhZHMpOwogICAgIGlmICghcXVhZHMuaXNFbXB0eSgpKQotICAgICAgICBh
Y3Rpb25Cb3VuZGluZ0JveCA9IG1haW5SZXN1bHRSYW5nZS0+b3duZXJEb2N1bWVudCgpLnZpZXco
KS0+Y29udGVudHNUb1dpbmRvdyhxdWFkc1swXS5lbmNsb3NpbmdCb3VuZGluZ0JveCgpKTsKKyAg
ICAgICAgZGV0ZWN0ZWREYXRhQm91bmRpbmdCb3ggPSBtYWluUmVzdWx0UmFuZ2UtPm93bmVyRG9j
dW1lbnQoKS52aWV3KCktPmNvbnRlbnRzVG9XaW5kb3cocXVhZHNbMF0uZW5jbG9zaW5nQm91bmRp
bmdCb3goKSk7CisKKyAgICBkZXRlY3RlZERhdGFSYW5nZSA9IG1haW5SZXN1bHRSYW5nZTsKIAog
ICAgIHJldHVybiBhY3Rpb25Db250ZXh0OwogfQogCitzdGF0aWMgVGV4dEluZGljYXRvciB0ZXh0
SW5kaWNhdG9yRm9yUmFuZ2UoUmFuZ2UqIHJhbmdlKQoreworICAgIGlmICghcmFuZ2UpCisgICAg
ICAgIHJldHVybiBUZXh0SW5kaWNhdG9yKCk7CisKKyAgICBGcmFtZSogZnJhbWUgPSByYW5nZS0+
c3RhcnRDb250YWluZXIoKS0+ZG9jdW1lbnQoKS5mcmFtZSgpOworCisgICAgaWYgKCFmcmFtZSkK
KyAgICAgICAgcmV0dXJuIFRleHRJbmRpY2F0b3IoKTsKKworICAgIFZpc2libGVTZWxlY3Rpb24g
b2xkU2VsZWN0aW9uID0gZnJhbWUtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOworICAgIGZyYW1l
LT5zZWxlY3Rpb24oKS5zZXRTZWxlY3Rpb24ocmFuZ2UpOworCisgICAgYXV0byBpbmRpY2F0b3Ig
PSBUZXh0SW5kaWNhdG9yOjppbmRpY2F0b3JXaXRoU2VsZWN0aW9uSW5GcmFtZSgqV2ViRnJhbWU6
OmZyb21Db3JlRnJhbWUoKmZyYW1lKSk7CisKKyAgICBmcmFtZS0+c2VsZWN0aW9uKCkuc2V0U2Vs
ZWN0aW9uKG9sZFNlbGVjdGlvbik7CisKKyAgICByZXR1cm4gaW5kaWNhdG9yOworfQorCiB2b2lk
IFdlYlBhZ2U6OnBlcmZvcm1BY3Rpb25NZW51SGl0VGVzdEF0TG9jYXRpb24oV2ViQ29yZTo6Rmxv
YXRQb2ludCBsb2NhdGlvbkluVmlld0Nvb29yZGluYXRlcykKIHsKICAgICBsYXlvdXRJZk5lZWRl
ZCgpOwpAQCAtMTE2MCw5ICsxMTgyLDEzIEBAIHZvaWQgV2ViUGFnZTo6cGVyZm9ybUFjdGlvbk1l
bnVIaXRUZXN0QXRMb2NhdGlvbihXZWJDb3JlOjpGbG9hdFBvaW50IGxvY2F0aW9uSW5WCiAKICAg
ICAvLyBGSVhNRTogQXZvaWQgc2Nhbm5pbmcgaWYgd2Ugd2lsbCBqdXN0IHRocm93IGF3YXkgdGhl
IHJlc3VsdCAoZS5nLiB3ZSdyZSBvdmVyIGEgbGluaykuCiAgICAgaWYgKGhpdFRlc3RSZXN1bHQu
aW5uZXJOb2RlKCkgJiYgaGl0VGVzdFJlc3VsdC5pbm5lck5vZGUoKS0+aXNUZXh0Tm9kZSgpKSB7
Ci0gICAgICAgIEZsb2F0UmVjdCBhY3Rpb25Cb3VuZGluZ0JveDsKLSAgICAgICAgYWN0aW9uTWVu
dVJlc3VsdC5hY3Rpb25Db250ZXh0ID0gc2NhbkZvckRhdGFEZXRlY3RlZEl0ZW1zKGhpdFRlc3RS
ZXN1bHQsIGFjdGlvbkJvdW5kaW5nQm94KTsKLSAgICAgICAgYWN0aW9uTWVudVJlc3VsdC5hY3Rp
b25Cb3VuZGluZ0JveCA9IGFjdGlvbkJvdW5kaW5nQm94OworICAgICAgICBGbG9hdFJlY3QgZGV0
ZWN0ZWREYXRhQm91bmRpbmdCb3g7CisgICAgICAgIFJlZlB0cjxSYW5nZT4gZGV0ZWN0ZWREYXRh
UmFuZ2U7CisgICAgICAgIGFjdGlvbk1lbnVSZXN1bHQuYWN0aW9uQ29udGV4dCA9IHNjYW5Gb3JE
YXRhRGV0ZWN0ZWRJdGVtcyhoaXRUZXN0UmVzdWx0LCBkZXRlY3RlZERhdGFCb3VuZGluZ0JveCwg
ZGV0ZWN0ZWREYXRhUmFuZ2UpOworICAgICAgICBpZiAoYWN0aW9uTWVudVJlc3VsdC5hY3Rpb25D
b250ZXh0KSB7CisgICAgICAgICAgICBhY3Rpb25NZW51UmVzdWx0LmRldGVjdGVkRGF0YUJvdW5k
aW5nQm94ID0gZGV0ZWN0ZWREYXRhQm91bmRpbmdCb3g7CisgICAgICAgICAgICBhY3Rpb25NZW51
UmVzdWx0LmRldGVjdGVkRGF0YVRleHRJbmRpY2F0b3IgPSB0ZXh0SW5kaWNhdG9yRm9yUmFuZ2Uo
ZGV0ZWN0ZWREYXRhUmFuZ2UuZ2V0KCkpOworICAgICAgICB9CiAgICAgfQogCiAgICAgUmVmUHRy
PEFQSTo6T2JqZWN0PiB1c2VyRGF0YTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>240889</attachid>
            <date>2014-11-03 17:40:05 -0800</date>
            <delta_ts>2014-11-03 20:10:01 -0800</delta_ts>
            <desc>rebase</desc>
            <filename>dd-indicator.diff</filename>
            <type>text/plain</type>
            <size>68150</size>
            <attacher name="Tim Horton">thorton</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBlNzYxNDg1Li5kOWQ4MzA1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQg
QEAKKzIwMTQtMTEtMDMgIFRpbSBIb3J0b24gIDx0aW1vdGh5X2hvcnRvbkBhcHBsZS5jb20+CisK
KyAgICAgICAgSW1wbGVtZW50IHllbGxvdyBoaWdobGlnaHQgb3ZlciBkYXRhIGRldGVjdGVkIGl0
ZW1zCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzgz
NDAKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzE4ODQwMTAyPgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogcGxhdGZvcm0vc3BpL21hYy9EYXRhRGV0
ZWN0b3JzU1BJLmg6CisgICAgICAgIEFkZCBjb21wbGV0aW9uSGFuZGxlciBTUEkuCisKIDIwMTQt
MTEtMDMgIEd5dXlvdW5nIEtpbSAgPGd5dXlvdW5nLmtpbUBzYW1zdW5nLmNvbT4KIAogICAgICAg
ICBNb3ZlIFdlYkNvcmUvYnJpZGdlIHRvIHN0ZDo6dW5pcXVlX3B0cgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vc3BpL21hYy9EYXRhRGV0ZWN0b3JzU1BJLmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9zcGkvbWFjL0RhdGFEZXRlY3RvcnNTUEkuaAppbmRleCBmNTI4MjUw
Li5lNmQwODU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9zcGkvbWFjL0Rh
dGFEZXRlY3RvcnNTUEkuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9zcGkvbWFjL0Rh
dGFEZXRlY3RvcnNTUEkuaApAQCAtNjYsNiArNjYsNyBAQCBTT0ZUX0xJTktfQ0xBU1MoRGF0YURl
dGVjdG9ycywgRERBY3Rpb25zTWFuYWdlcikKIEBwcm9wZXJ0eSBOU1JlY3QgaGlnaGxpZ2h0RnJh
bWU7CiBAcHJvcGVydHkgKHJldGFpbikgTlNBcnJheSAqYWxsUmVzdWx0czsKIEBwcm9wZXJ0eSAo
cmV0YWluKSBfX2F0dHJpYnV0ZV9fKChOU09iamVjdCkpIEREUmVzdWx0UmVmIG1haW5SZXN1bHQ7
CitAcHJvcGVydHkgKGNvcHkpIHZvaWQgKF5jb21wbGV0aW9uSGFuZGxlcikodm9pZCk7CiAKIEBl
bmQKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktp
dDIvQ2hhbmdlTG9nCmluZGV4IDc0MjQwOTQuLjQwOTlmYWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQyL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKQEAgLTgzLDYg
KzgzLDEwMCBAQAogCiAyMDE0LTExLTAzICBUaW0gSG9ydG9uICA8dGltb3RoeV9ob3J0b25AYXBw
bGUuY29tPgogCisgICAgICAgIEltcGxlbWVudCB5ZWxsb3cgaGlnaGxpZ2h0IG92ZXIgZGF0YSBk
ZXRlY3RlZCBpdGVtcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTM4MzQwCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xODg0MDEwMj4KKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFNoYXJlZC9UZXh0SW5k
aWNhdG9yLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9UZXh0SW5k
aWNhdG9yLmNwcC4KKyAgICAgICAgKiBTaGFyZWQvVGV4dEluZGljYXRvci5oOiBSZW5hbWVkIGZy
b20gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1RleHRJbmRpY2F0b3IuaC4KKyAgICAgICAgTW92
ZSBUZXh0SW5kaWNhdG9yIHRvIFNoYXJlZC4KKyAgICAgICAgSW1wbGVtZW50IGVuY29kZS9kZWNv
ZGUgZm9yIGl0LCBzbyBpdCBjYW4gYmUgcGFzc2VkIGFzIHRoZSBhcmd1bWVudCB0byBTZXRUZXh0
SW5kaWNhdG9yLgorICAgICAgICBNYWtlIGl0IG5vdCByZWYtY291bnRlZCBhbnltb3JlLCBhbmQg
YWRqdXN0IHVzZXJzIGFjY29yZGluZ2x5LgorICAgICAgICBBZGQgJ2luZGljYXRvcldpdGhTZWxl
Y3Rpb25JbkZyYW1lJywgd2hpY2ggYnVpbGRzIGEgVGV4dEluZGljYXRvcgorICAgICAgICBmcm9t
IHRoZSBzZWxlY3Rpb24gaW4gdGhlIGdpdmVuIGZyYW1lLgorCisgICAgICAgICogU2hhcmVkL21h
Yy9BY3Rpb25NZW51SGl0VGVzdFJlc3VsdC5oOgorICAgICAgICAqIFNoYXJlZC9tYWMvQWN0aW9u
TWVudUhpdFRlc3RSZXN1bHQubW06CisgICAgICAgIChXZWJLaXQ6OkFjdGlvbk1lbnVIaXRUZXN0
UmVzdWx0OjplbmNvZGUpOgorICAgICAgICAoV2ViS2l0OjpBY3Rpb25NZW51SGl0VGVzdFJlc3Vs
dDo6ZGVjb2RlKToKKyAgICAgICAgUmVuYW1lIGFjdGlvbkJvdW5kaW5nQm94IHRvIGRldGVjdGVk
RGF0YUJvdW5kaW5nQm94LgorICAgICAgICBTdG9yZS9lbmNvZGUvZGVjb2RlIGRldGVjdGVkRGF0
YVRleHRJbmRpY2F0b3IuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL21hYy9XS1ZpZXcubW06
CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9tYWMvV0tWaWV3SW50ZXJuYWwuaDoKKyAgICAgICAg
KiBVSVByb2Nlc3MvUGFnZUNsaWVudC5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9pb3MvUGFnZUNs
aWVudEltcGxJT1MuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvaW9zL1BhZ2VDbGllbnRJbXBsSU9T
Lm1tOgorICAgICAgICAoV2ViS2l0OjpQYWdlQ2xpZW50SW1wbDo6c2V0VGV4dEluZGljYXRvcik6
CisgICAgICAgICogVUlQcm9jZXNzL21hYy9QYWdlQ2xpZW50SW1wbC5oOgorICAgICAgICAqIFVJ
UHJvY2Vzcy9tYWMvUGFnZUNsaWVudEltcGwubW06CisgICAgICAgIChXZWJLaXQ6OlBhZ2VDbGll
bnRJbXBsOjpzZXRUZXh0SW5kaWNhdG9yKToKKyAgICAgICAgKFdlYktpdDo6UGFnZUNsaWVudElt
cGw6Om5hdmlnYXRpb25HZXN0dXJlRGlkQmVnaW4pOgorICAgICAgICAqIFVJUHJvY2Vzcy9tYWMv
VGV4dEluZGljYXRvcldpbmRvdy5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9tYWMvVGV4dEluZGlj
YXRvcldpbmRvdy5tbToKKyAgICAgICAgKC1bV0tUZXh0SW5kaWNhdG9yVmlldyBfaW5pdFdpdGhU
ZXh0SW5kaWNhdG9yOl0pOgorICAgICAgICAoLVtXS1RleHRJbmRpY2F0b3JWaWV3IGRyYXdSZWN0
Ol0pOgorICAgICAgICAoV2ViS2l0OjpUZXh0SW5kaWNhdG9yV2luZG93OjpzZXRUZXh0SW5kaWNh
dG9yKToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcDoKKyAgICAgICAgKFdl
YktpdDo6V2ViUGFnZVByb3h5OjpzZXRUZXh0SW5kaWNhdG9yKToKKyAgICAgICAgKiBVSVByb2Nl
c3MvV2ViUGFnZVByb3h5Lmg6CisgICAgICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5tZXNz
YWdlcy5pbjoKKyAgICAgICAgQWRqdXN0IHRvIHRoZSBuZXcgbm9uLXJlZmNvdW50ZWQgZGlyZWN0
bHktZW5jb2RlZCBUZXh0SW5kaWNhdG9yLgorICAgICAgICAKKyAgICAgICAgKiBVSVByb2Nlc3Mv
bWFjL1dLQWN0aW9uTWVudUNvbnRyb2xsZXIuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvbWFjL1dL
QWN0aW9uTWVudUNvbnRyb2xsZXIubW06CisgICAgICAgICgtW1dLQWN0aW9uTWVudUNvbnRyb2xs
ZXIgcHJlcGFyZUZvck1lbnU6d2l0aEV2ZW50Ol0pOgorICAgICAgICBJZiB0aGUgdGV4dCBpbmRp
Y2F0b3IgaXMgdXAgd2hlbiBwcmVwYXJpbmcgZm9yIGEgbmV3IG1lbnUgaW52b2NhdGlvbiwgaGlk
ZSBpdC4KKworICAgICAgICAoLVtXS0FjdGlvbk1lbnVDb250cm9sbGVyIHdpbGxPcGVuTWVudTp3
aXRoRXZlbnQ6XSk6CisgICAgICAgIFNob3cgdGhlIHRleHQgaW5kaWNhdG9yIHdoZW4gdGhlIG1l
bnUgb3BlbnMsIGZvciBkYXRhIGRldGVjdGVkIGl0ZW1zLgorCisgICAgICAgICgtW1dLQWN0aW9u
TWVudUNvbnRyb2xsZXIgZGlkQ2xvc2VNZW51OndpdGhFdmVudDpdKToKKyAgICAgICAgSGlkZSB0
aGUgdGV4dCBpbmRpY2F0b3Igd2hlbiB0aGUgbWVudSBjbG9zZXMsIHVubGVzcyB3ZSBvbmx5IGhh
ZCBvbmUgaXRlbS4KKyAgICAgICAgVGhlbiwgd2UnbGwgaGlkZSBpdCBpbiB0aGUgRERBY3Rpb25D
b250ZXh0IGNvbXBsZXRpb25IYW5kbGVyIGJsb2NrLgorICAgICAgICAKKyAgICAgICAgKC1bV0tB
Y3Rpb25NZW51Q29udHJvbGxlciBfc2hvd1RleHRJbmRpY2F0b3JdKToKKyAgICAgICAgKC1bV0tB
Y3Rpb25NZW51Q29udHJvbGxlciBfaGlkZVRleHRJbmRpY2F0b3JdKToKKyAgICAgICAgQWRkZWQu
IFNob3cgYW5kIGhpZGUgdGhlIHRleHQgaW5kaWNhdG9yIGJhc2VkIG9uIHRoZSBUZXh0SW5kaWNh
dG9yCisgICAgICAgIGRhdGEgaW5jbHVkZWQgaW4gdGhlIGFjdGlvbiBtZW51IGhpdCB0ZXN0IHJl
c3VsdC4KKworICAgICAgICAoLVtXS0FjdGlvbk1lbnVDb250cm9sbGVyIF9kZWZhdWx0TWVudUl0
ZW1zRm9yRGF0YURldGVjdGVkVGV4dF0pOgorICAgICAgICBIaWRlIHRoZSB0ZXh0IGluZGljYXRv
ciB3aGVuIHRoZSBkYXRhIGRldGVjdG9yIHBvcG92ZXIgY29tcGxldGVzLgorCisgICAgICAgICog
V2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIFdlYlByb2Nlc3Mv
V2ViUGFnZS9GaW5kQ29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJLaXQ6OkZpbmRDb250cm9s
bGVyOjpnZXRJbWFnZUZvckZpbmRNYXRjaCk6CisgICAgICAgIE1ha2UgdXNlIG9mIHRoZSBuZXds
eS1tb3ZlZCBjcmVhdGVTZWxlY3Rpb25TbmFwc2hvdC4KKworICAgICAgICAoV2ViS2l0OjpGaW5k
Q29udHJvbGxlcjo6dXBkYXRlRmluZEluZGljYXRvcik6CisgICAgICAgIE1ha2UgdXNlIG9mIFRl
eHRJbmRpY2F0b3I6OmluZGljYXRvcldpdGhTZWxlY3Rpb25JbkZyYW1lLCB3aGljaCBhbGxvd3MK
KyAgICAgICAgdXMgdG8gc2hhcmUgdGhpcyBjb2RlIGZvciBidWlsZGluZyBhIFRleHRJbmRpY2F0
b3Igd2l0aCBvdGhlciBjYWxsZXJzLgorCisgICAgICAgIChXZWJLaXQ6OkZpbmRDb250cm9sbGVy
OjpoaWRlRmluZEluZGljYXRvcik6CisKKyAgICAgICAgKFdlYktpdDo6Z2V0RmluZEluZGljYXRv
ckJpdG1hcCk6IERlbGV0ZWQuCisgICAgICAgIE1vdmUgZ2V0RmluZEluZGljYXRvckJpdG1hcCB0
byBXZWJGcmFtZTo6Y3JlYXRlU2VsZWN0aW9uU25hcHNob3QuCisKKyAgICAgICAgKiBXZWJQcm9j
ZXNzL1dlYlBhZ2UvV2ViRnJhbWUuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJGcmFtZTo6Y3Jl
YXRlU2VsZWN0aW9uU25hcHNob3QpOgorICAgICAgICBNb3ZlZCBmcm9tIEZpbmRDb250cm9sbGVy
J3MgZ2V0RmluZEluZGljYXRvckJpdG1hcC4KKyAgICAgICAgTm93IHJldHVybnMgYSBTaGFyZWFi
bGVCaXRtYXAgaW5zdGVhZCBvZiBnb2luZyBhaGVhZCBhbmQgbWFraW5nIGEgSGFuZGxlLgorCisg
ICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkZyYW1lLmg6CisgICAgICAgICogV2ViUHJv
Y2Vzcy9XZWJQYWdlL21hYy9XZWJQYWdlTWFjLm1tOgorICAgICAgICAoV2ViS2l0OjpzY2FuRm9y
RGF0YURldGVjdGVkSXRlbXMpOgorICAgICAgICAoV2ViS2l0Ojp0ZXh0SW5kaWNhdG9yRm9yUmFu
Z2UpOgorICAgICAgICBUZW1wb3JhcmlseSBjaGFuZ2UgdGhlIHNlbGVjdGlvbiB0byB0aGUgZ2l2
ZW4gcmFuZ2UsIHRoZW4gdXNlCisgICAgICAgIFRleHRJbmRpY2F0b3I6OmluZGljYXRvcldpdGhT
ZWxlY3Rpb25JbkZyYW1lIHRvIGFjcXVpcmUgYSBUZXh0SW5kaWNhdG9yLAorICAgICAgICB0aGVu
IHJlc2V0IHRoZSBzZWxlY3Rpb24uCisKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6cGVyZm9y
bUFjdGlvbk1lbnVIaXRUZXN0QXRMb2NhdGlvbik6CisgICAgICAgIENyZWF0ZSBhIFRleHRJbmRp
Y2F0b3IgZnJvbSB0aGUgZGF0YSBkZXRlY3RlZCByYW5nZS4KKworMjAxNC0xMS0wMyAgVGltIEhv
cnRvbiAgPHRpbW90aHlfaG9ydG9uQGFwcGxlLmNvbT4KKwogICAgICAgICBfYWN0aW9uTWVudUl0
ZW1zRm9ySGl0VGVzdFJlc3VsdCBpcyBnaXZlbiBrV0tBY3Rpb25NZW51TGluayBidXQgYW4gZW1w
dHkgYXJyYXkgb2YgZGVmYXVsdE1lbnVJdGVtcwogICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM4MzIxCiAgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xODg1
NTEzND4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9UZXh0SW5kaWNhdG9yLmNw
cCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9UZXh0SW5kaWNhdG9yLmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwLi4yM2Q2Y2Y0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYktpdDIvU2hhcmVkL1RleHRJbmRpY2F0b3IuY3BwCkBAIC0wLDAgKzEsMzQxIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRleHRJbmRpY2F0b3IuaCIK
KworI2luY2x1ZGUgIkFyZ3VtZW50Q29kZXJzQ0YuaCIKKyNpbmNsdWRlICJBcmd1bWVudERlY29k
ZXIuaCIKKyNpbmNsdWRlICJBcmd1bWVudEVuY29kZXIuaCIKKyNpbmNsdWRlICJTaGFyZWFibGVC
aXRtYXAuaCIKKyNpbmNsdWRlICJXZWJDb3JlQXJndW1lbnRDb2RlcnMuaCIKKyNpbmNsdWRlICJX
ZWJGcmFtZS5oIgorI2luY2x1ZGUgIldlYlBhZ2UuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0ZyYW1l
Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9GcmFtZVNlbGVjdGlvbi5oPgorI2luY2x1ZGUgPFdlYkNv
cmUvRnJhbWVWaWV3Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9HZW9tZXRyeVV0aWxpdGllcy5oPgor
I2luY2x1ZGUgPFdlYkNvcmUvR3JhZGllbnQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNz
Q29udGV4dC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvSW50UmVjdC5oPgorI2luY2x1ZGUgPFdlYkNv
cmUvUGF0aC5oPgorCisjaWYgUExBVEZPUk0oTUFDKSAmJiBfX01BQ19PU19YX1ZFUlNJT05fTUlO
X1JFUVVJUkVEIDwgMTAxMDAwCisjZGVmaW5lIEVOQUJMRV9MRUdBQ1lfVEVYVF9JTkRJQ0FUT1Jf
U1RZTEUgMQorI2Vsc2UKKyNkZWZpbmUgRU5BQkxFX0xFR0FDWV9URVhUX0lORElDQVRPUl9TVFlM
RSAwCisjZW5kaWYKKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKKyNpZiBFTkFCTEUoTEVH
QUNZX1RFWFRfSU5ESUNBVE9SX1NUWUxFKQorc3RhdGljIGNvbnN0IGZsb2F0IGNvcm5lclJhZGl1
cyA9IDMuMDsKKworc3RhdGljIGNvbnN0IGZsb2F0IHNoYWRvd09mZnNldFggPSAwLjA7CitzdGF0
aWMgY29uc3QgZmxvYXQgc2hhZG93T2Zmc2V0WSA9IDEuMDsKK3N0YXRpYyBjb25zdCBmbG9hdCBz
aGFkb3dCbHVyUmFkaXVzID0gMy4wOworCitzdGF0aWMgY29uc3QgaW50IHNoYWRvd1JlZCA9IDA7
CitzdGF0aWMgY29uc3QgaW50IHNoYWRvd0dyZWVuID0gMDsKK3N0YXRpYyBjb25zdCBpbnQgc2hh
ZG93Qmx1ZSA9IDA7CitzdGF0aWMgY29uc3QgaW50IHNoYWRvd0FscGhhID0gMjA0OworCitzdGF0
aWMgY29uc3QgZmxvYXQgbGlnaHRCb3JkZXJUaGlja25lc3MgPSAxLjA7CitzdGF0aWMgY29uc3Qg
ZmxvYXQgaG9yaXpvbnRhbFBhZGRpbmdJbnNpZGVMaWdodEJvcmRlciA9IDMuMDsKK3N0YXRpYyBj
b25zdCBmbG9hdCB2ZXJ0aWNhbFBhZGRpbmdJbnNpZGVMaWdodEJvcmRlciA9IDEuMDsKKworc3Rh
dGljIGNvbnN0IGZsb2F0IGhvcml6b250YWxCb3JkZXJJbnNpZGVTaGFkb3cgPSBsaWdodEJvcmRl
clRoaWNrbmVzcyArIGhvcml6b250YWxQYWRkaW5nSW5zaWRlTGlnaHRCb3JkZXI7CitzdGF0aWMg
Y29uc3QgZmxvYXQgdmVydGljYWxCb3JkZXJJbnNpZGVTaGFkb3cgPSBsaWdodEJvcmRlclRoaWNr
bmVzcyArIHZlcnRpY2FsUGFkZGluZ0luc2lkZUxpZ2h0Qm9yZGVyOworCitzdGF0aWMgY29uc3Qg
ZmxvYXQgbGVmdEJvcmRlclRoaWNrbmVzcyA9IGhvcml6b250YWxCb3JkZXJJbnNpZGVTaGFkb3cg
KyBzaGFkb3dPZmZzZXRYICsgc2hhZG93Qmx1clJhZGl1cyAvIDIuMDsKK3N0YXRpYyBjb25zdCBm
bG9hdCB0b3BCb3JkZXJUaGlja25lc3MgPSB2ZXJ0aWNhbEJvcmRlckluc2lkZVNoYWRvdyAtIHNo
YWRvd09mZnNldFkgKyBzaGFkb3dCbHVyUmFkaXVzIC8gMi4wOworc3RhdGljIGNvbnN0IGZsb2F0
IHJpZ2h0Qm9yZGVyVGhpY2tuZXNzID0gaG9yaXpvbnRhbEJvcmRlckluc2lkZVNoYWRvdyAtIHNo
YWRvd09mZnNldFggKyBzaGFkb3dCbHVyUmFkaXVzIC8gMi4wOworc3RhdGljIGNvbnN0IGZsb2F0
IGJvdHRvbUJvcmRlclRoaWNrbmVzcyA9IHZlcnRpY2FsQm9yZGVySW5zaWRlU2hhZG93ICsgc2hh
ZG93T2Zmc2V0WSArIHNoYWRvd0JsdXJSYWRpdXMgLyAyLjA7CisKK3N0YXRpYyBjb25zdCBmbG9h
dCBob3Jpem9udGFsT3V0c2V0VG9DZW50ZXJPZkxpZ2h0Qm9yZGVyID0gaG9yaXpvbnRhbEJvcmRl
ckluc2lkZVNoYWRvdyAtIGxpZ2h0Qm9yZGVyVGhpY2tuZXNzIC8gMi4wOworc3RhdGljIGNvbnN0
IGZsb2F0IHZlcnRpY2FsT3V0c2V0VG9DZW50ZXJPZkxpZ2h0Qm9yZGVyID0gdmVydGljYWxCb3Jk
ZXJJbnNpZGVTaGFkb3cgLSBsaWdodEJvcmRlclRoaWNrbmVzcyAvIDIuMDsKKworc3RhdGljIGNv
bnN0IGludCBsaWdodEJvcmRlclJlZCA9IDI0NTsKK3N0YXRpYyBjb25zdCBpbnQgbGlnaHRCb3Jk
ZXJHcmVlbiA9IDIzMDsKK3N0YXRpYyBjb25zdCBpbnQgbGlnaHRCb3JkZXJCbHVlID0gMDsKK3N0
YXRpYyBjb25zdCBpbnQgbGlnaHRCb3JkZXJBbHBoYSA9IDI1NTsKKworc3RhdGljIGNvbnN0IGlu
dCBncmFkaWVudERhcmtSZWQgPSAyMzc7CitzdGF0aWMgY29uc3QgaW50IGdyYWRpZW50RGFya0dy
ZWVuID0gMjA0Oworc3RhdGljIGNvbnN0IGludCBncmFkaWVudERhcmtCbHVlID0gMDsKK3N0YXRp
YyBjb25zdCBpbnQgZ3JhZGllbnREYXJrQWxwaGEgPSAyNTU7CisKK3N0YXRpYyBjb25zdCBpbnQg
Z3JhZGllbnRMaWdodFJlZCA9IDI0MjsKK3N0YXRpYyBjb25zdCBpbnQgZ3JhZGllbnRMaWdodEdy
ZWVuID0gMjM5Oworc3RhdGljIGNvbnN0IGludCBncmFkaWVudExpZ2h0Qmx1ZSA9IDA7CitzdGF0
aWMgY29uc3QgaW50IGdyYWRpZW50TGlnaHRBbHBoYSA9IDI1NTsKKyNlbHNlCitjb25zdCBmbG9h
dCBmbGF0U3R5bGVIb3Jpem9udGFsQm9yZGVyID0gMjsKK2NvbnN0IGZsb2F0IGZsYXRTdHlsZVZl
cnRpY2FsQm9yZGVyID0gMTsKK2NvbnN0IGZsb2F0IGZsYXRTaGFkb3dPZmZzZXRYID0gMDsKK2Nv
bnN0IGZsb2F0IGZsYXRTaGFkb3dPZmZzZXRZID0gNTsKK2NvbnN0IGZsb2F0IGZsYXRTaGFkb3dC
bHVyUmFkaXVzID0gMjU7Citjb25zdCBmbG9hdCBmbGF0UmltU2hhZG93Qmx1clJhZGl1cyA9IDI7
CisjZW5kaWYKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK3N0YXRpYyBGbG9hdFJlY3QgaW5mbGF0
ZVJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBmbG9hdCBpbmZsYXRlWCwgZmxvYXQgaW5mbGF0
ZVkpCit7CisgICAgRmxvYXRSZWN0IGluZmxhdGVkUmVjdCA9IHJlY3Q7CisgICAgaW5mbGF0ZWRS
ZWN0LmluZmxhdGVYKGluZmxhdGVYKTsKKyAgICBpbmZsYXRlZFJlY3QuaW5mbGF0ZVkoaW5mbGF0
ZVkpOworICAgIHJldHVybiBpbmZsYXRlZFJlY3Q7Cit9CisKK3N0YXRpYyBGbG9hdFJlY3Qgb3V0
c2V0SW5kaWNhdG9yUmVjdEluY2x1ZGluZ1NoYWRvdyhjb25zdCBGbG9hdFJlY3QgcmVjdCkKK3sK
KyNpZiBFTkFCTEUoTEVHQUNZX1RFWFRfSU5ESUNBVE9SX1NUWUxFKQorICAgIEZsb2F0UmVjdCBv
dXRzZXRSZWN0ID0gcmVjdDsKKyAgICBvdXRzZXRSZWN0Lm1vdmUoLWxlZnRCb3JkZXJUaGlja25l
c3MsIC10b3BCb3JkZXJUaGlja25lc3MpOworICAgIG91dHNldFJlY3QuZXhwYW5kKGxlZnRCb3Jk
ZXJUaGlja25lc3MgKyByaWdodEJvcmRlclRoaWNrbmVzcywgdG9wQm9yZGVyVGhpY2tuZXNzICsg
Ym90dG9tQm9yZGVyVGhpY2tuZXNzKTsKKyAgICByZXR1cm4gb3V0c2V0UmVjdDsKKyNlbHNlCisg
ICAgcmV0dXJuIGluZmxhdGVSZWN0KHJlY3QsIGZsYXRTaGFkb3dCbHVyUmFkaXVzICsgZmxhdFN0
eWxlSG9yaXpvbnRhbEJvcmRlciwgZmxhdFNoYWRvd0JsdXJSYWRpdXMgKyBmbGF0U3R5bGVWZXJ0
aWNhbEJvcmRlcik7CisjZW5kaWYKK30KKworc3RhdGljIGJvb2wgdGV4dEluZGljYXRvcnNGb3JU
ZXh0UmVjdHNPdmVybGFwKGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiB0ZXh0UmVjdHMpCit7Cisg
ICAgc2l6ZV90IGNvdW50ID0gdGV4dFJlY3RzLnNpemUoKTsKKyAgICBpZiAoY291bnQgPD0gMSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgVmVjdG9yPEZsb2F0UmVjdD4gaW5kaWNhdG9y
UmVjdHM7CisgICAgaW5kaWNhdG9yUmVjdHMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShjb3VudCk7
CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKKyAgICAgICAgRmxv
YXRSZWN0IGluZGljYXRvclJlY3QgPSBvdXRzZXRJbmRpY2F0b3JSZWN0SW5jbHVkaW5nU2hhZG93
KHRleHRSZWN0c1tpXSk7CisKKyAgICAgICAgZm9yIChzaXplX3QgaiA9IGluZGljYXRvclJlY3Rz
LnNpemUoKTsgajsgKSB7CisgICAgICAgICAgICAtLWo7CisgICAgICAgICAgICBpZiAoaW5kaWNh
dG9yUmVjdC5pbnRlcnNlY3RzKGluZGljYXRvclJlY3RzW2pdKSkKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorCisgICAgICAgIGluZGljYXRvclJlY3RzLnVuY2hlY2tl
ZEFwcGVuZChpbmRpY2F0b3JSZWN0KTsKKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisK
K1RleHRJbmRpY2F0b3I6OlRleHRJbmRpY2F0b3IoKQoreworfQorCitUZXh0SW5kaWNhdG9yOjpU
ZXh0SW5kaWNhdG9yKGNvbnN0IEZsb2F0UmVjdCYgc2VsZWN0aW9uUmVjdEluV2luZG93Q29vcmRp
bmF0ZXMsIGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiB0ZXh0UmVjdHNJblNlbGVjdGlvblJlY3RD
b29yZGluYXRlcywgZmxvYXQgY29udGVudEltYWdlU2NhbGVGYWN0b3IsIFBhc3NSZWZQdHI8U2hh
cmVhYmxlQml0bWFwPiBjb250ZW50SW1hZ2UpCisgICAgOiBtX3NlbGVjdGlvblJlY3RJbldpbmRv
d0Nvb3JkaW5hdGVzKHNlbGVjdGlvblJlY3RJbldpbmRvd0Nvb3JkaW5hdGVzKQorICAgICwgbV90
ZXh0UmVjdHNJblNlbGVjdGlvblJlY3RDb29yZGluYXRlcyh0ZXh0UmVjdHNJblNlbGVjdGlvblJl
Y3RDb29yZGluYXRlcykKKyAgICAsIG1fY29udGVudEltYWdlU2NhbGVGYWN0b3IoY29udGVudElt
YWdlU2NhbGVGYWN0b3IpCisgICAgLCBtX2NvbnRlbnRJbWFnZShjb250ZW50SW1hZ2UpCit7Cisg
ICAgQVNTRVJUKG1fY29udGVudEltYWdlU2NhbGVGYWN0b3IgIT0gMSB8fCBtX2NvbnRlbnRJbWFn
ZS0+c2l6ZSgpID09IGVuY2xvc2luZ0ludFJlY3QobV9zZWxlY3Rpb25SZWN0SW5XaW5kb3dDb29y
ZGluYXRlcykuc2l6ZSgpKTsKKworICAgIGlmICh0ZXh0SW5kaWNhdG9yc0ZvclRleHRSZWN0c092
ZXJsYXAobV90ZXh0UmVjdHNJblNlbGVjdGlvblJlY3RDb29yZGluYXRlcykpIHsKKyAgICAgICAg
bV90ZXh0UmVjdHNJblNlbGVjdGlvblJlY3RDb29yZGluYXRlc1swXSA9IHVuaW9uUmVjdChtX3Rl
eHRSZWN0c0luU2VsZWN0aW9uUmVjdENvb3JkaW5hdGVzKTsKKyAgICAgICAgbV90ZXh0UmVjdHNJ
blNlbGVjdGlvblJlY3RDb29yZGluYXRlcy5zaHJpbmsoMSk7CisgICAgfQorfQorCitUZXh0SW5k
aWNhdG9yIFRleHRJbmRpY2F0b3I6OmluZGljYXRvcldpdGhTZWxlY3Rpb25JbkZyYW1lKFdlYkZy
YW1lJiBmcmFtZSkKK3sKKyAgICBGcmFtZSYgY29yZUZyYW1lID0gKmZyYW1lLmNvcmVGcmFtZSgp
OworICAgIEludFJlY3Qgc2VsZWN0aW9uUmVjdCA9IGVuY2xvc2luZ0ludFJlY3QoY29yZUZyYW1l
LnNlbGVjdGlvbigpLnNlbGVjdGlvbkJvdW5kcygpKTsKKyAgICBSZWZQdHI8U2hhcmVhYmxlQml0
bWFwPiBpbmRpY2F0b3JCaXRtYXAgPSBmcmFtZS5jcmVhdGVTZWxlY3Rpb25TbmFwc2hvdCgpOwor
ICAgIGlmICghaW5kaWNhdG9yQml0bWFwKQorICAgICAgICByZXR1cm4gVGV4dEluZGljYXRvcigp
OworCisgICAgLy8gV2Ugd2FudCB0aGUgc2VsZWN0aW9uIHJlY3QgaW4gd2luZG93IGNvb3JkaW5h
dGVzLgorICAgIEludFJlY3Qgc2VsZWN0aW9uUmVjdEluV2luZG93Q29vcmRpbmF0ZXMgPSBjb3Jl
RnJhbWUudmlldygpLT5jb250ZW50c1RvV2luZG93KHNlbGVjdGlvblJlY3QpOworCisgICAgVmVj
dG9yPEZsb2F0UmVjdD4gdGV4dFJlY3RzOworICAgIGNvcmVGcmFtZS5zZWxlY3Rpb24oKS5nZXRD
bGlwcGVkVmlzaWJsZVRleHRSZWN0YW5nbGVzKHRleHRSZWN0cyk7CisKKyAgICAvLyBXZSB3YW50
IHRoZSB0ZXh0IHJlY3RzIGluIHNlbGVjdGlvbiByZWN0IGNvb3JkaW5hdGVzLgorICAgIFZlY3Rv
cjxGbG9hdFJlY3Q+IHRleHRSZWN0c0luU2VsZWN0aW9uUmVjdENvb3JkaW5hdGVzOworCisgICAg
Zm9yIChjb25zdCBGbG9hdFJlY3QmIHRleHRSZWN0IDogdGV4dFJlY3RzKSB7CisgICAgICAgIElu
dFJlY3QgdGV4dFJlY3RJblNlbGVjdGlvblJlY3RDb29yZGluYXRlcyA9IGNvcmVGcmFtZS52aWV3
KCktPmNvbnRlbnRzVG9XaW5kb3coZW5jbG9zaW5nSW50UmVjdCh0ZXh0UmVjdCkpOworICAgICAg
ICB0ZXh0UmVjdEluU2VsZWN0aW9uUmVjdENvb3JkaW5hdGVzLm1vdmUoLXNlbGVjdGlvblJlY3RJ
bldpbmRvd0Nvb3JkaW5hdGVzLngoKSwgLXNlbGVjdGlvblJlY3RJbldpbmRvd0Nvb3JkaW5hdGVz
LnkoKSk7CisgICAgICAgIHRleHRSZWN0c0luU2VsZWN0aW9uUmVjdENvb3JkaW5hdGVzLmFwcGVu
ZCh0ZXh0UmVjdEluU2VsZWN0aW9uUmVjdENvb3JkaW5hdGVzKTsKKyAgICB9CisKKyAgICByZXR1
cm4gVGV4dEluZGljYXRvcihzZWxlY3Rpb25SZWN0SW5XaW5kb3dDb29yZGluYXRlcywgdGV4dFJl
Y3RzSW5TZWxlY3Rpb25SZWN0Q29vcmRpbmF0ZXMsIGZyYW1lLnBhZ2UoKS0+ZGV2aWNlU2NhbGVG
YWN0b3IoKSwgaW5kaWNhdG9yQml0bWFwKTsKK30KKworVGV4dEluZGljYXRvcjo6flRleHRJbmRp
Y2F0b3IoKQoreworfQorCitGbG9hdFJlY3QgVGV4dEluZGljYXRvcjo6ZnJhbWVSZWN0KCkgY29u
c3QKK3sKKyAgICByZXR1cm4gb3V0c2V0SW5kaWNhdG9yUmVjdEluY2x1ZGluZ1NoYWRvdyhtX3Nl
bGVjdGlvblJlY3RJbldpbmRvd0Nvb3JkaW5hdGVzKTsKK30KKworI2lmIEVOQUJMRShMRUdBQ1lf
VEVYVF9JTkRJQ0FUT1JfU1RZTEUpCitzdGF0aWMgaW5saW5lIENvbG9yIGxpZ2h0Qm9yZGVyQ29s
b3IoKQoreworICAgIHJldHVybiBDb2xvcihsaWdodEJvcmRlclJlZCwgbGlnaHRCb3JkZXJHcmVl
biwgbGlnaHRCb3JkZXJCbHVlLCBsaWdodEJvcmRlckFscGhhKTsKK30KKworc3RhdGljIGlubGlu
ZSBDb2xvciBzaGFkb3dDb2xvcigpCit7CisgICAgcmV0dXJuIENvbG9yKHNoYWRvd1JlZCwgc2hh
ZG93R3JlZW4sIHNoYWRvd0JsdWUsIHNoYWRvd0FscGhhKTsKK30KKworc3RhdGljIGlubGluZSBD
b2xvciBncmFkaWVudExpZ2h0Q29sb3IoKQoreworICAgIHJldHVybiBDb2xvcihncmFkaWVudExp
Z2h0UmVkLCBncmFkaWVudExpZ2h0R3JlZW4sIGdyYWRpZW50TGlnaHRCbHVlLCBncmFkaWVudExp
Z2h0QWxwaGEpOworfQorCitzdGF0aWMgaW5saW5lIENvbG9yIGdyYWRpZW50RGFya0NvbG9yKCkK
K3sKKyAgICByZXR1cm4gQ29sb3IoZ3JhZGllbnREYXJrUmVkLCBncmFkaWVudERhcmtHcmVlbiwg
Z3JhZGllbnREYXJrQmx1ZSwgZ3JhZGllbnREYXJrQWxwaGEpOworfQorCitzdGF0aWMgUGF0aCBw
YXRoV2l0aFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcGF0aFJlY3QsIGZsb2F0IHJhZGl1
cykKK3sKKyAgICBQYXRoIHBhdGg7CisgICAgcGF0aC5hZGRSb3VuZGVkUmVjdChwYXRoUmVjdCwg
RmxvYXRTaXplKHJhZGl1cywgcmFkaXVzKSk7CisKKyAgICByZXR1cm4gcGF0aDsKK30KKyNlbHNl
CitzdGF0aWMgaW5saW5lIENvbG9yIGZsYXRIaWdobGlnaHRDb2xvcigpCit7CisgICAgcmV0dXJu
IENvbG9yKDI1NSwgMjU1LCAwLCAyNTUpOworfQorCitzdGF0aWMgaW5saW5lIENvbG9yIGZsYXRS
aW1TaGFkb3dDb2xvcigpCit7CisgICAgcmV0dXJuIENvbG9yKDAsIDAsIDAsIDM4KTsKK30KKwor
c3RhdGljIGlubGluZSBDb2xvciBmbGF0RHJvcFNoYWRvd0NvbG9yKCkKK3sKKyAgICByZXR1cm4g
Q29sb3IoMCwgMCwgMCwgNTEpOworfQorI2VuZGlmCisgICAgCit2b2lkIFRleHRJbmRpY2F0b3I6
OmRyYXcoR3JhcGhpY3NDb250ZXh0JiBncmFwaGljc0NvbnRleHQsIGNvbnN0IEludFJlY3QmIC8q
ZGlydHlSZWN0Ki8pCit7CisjaWYgRU5BQkxFKExFR0FDWV9URVhUX0lORElDQVRPUl9TVFlMRSkK
KyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fdGV4dFJlY3RzSW5TZWxlY3Rpb25SZWN0Q29v
cmRpbmF0ZXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgRmxvYXRSZWN0IHRleHRSZWN0ID0gbV90
ZXh0UmVjdHNJblNlbGVjdGlvblJlY3RDb29yZGluYXRlc1tpXTsKKyAgICAgICAgdGV4dFJlY3Qu
bW92ZShsZWZ0Qm9yZGVyVGhpY2tuZXNzLCB0b3BCb3JkZXJUaGlja25lc3MpOworCisgICAgICAg
IEZsb2F0UmVjdCBvdXRlclBhdGhSZWN0ID0gaW5mbGF0ZVJlY3QodGV4dFJlY3QsIGhvcml6b250
YWxPdXRzZXRUb0NlbnRlck9mTGlnaHRCb3JkZXIsIHZlcnRpY2FsT3V0c2V0VG9DZW50ZXJPZkxp
Z2h0Qm9yZGVyKTsKKyAgICAgICAgRmxvYXRSZWN0IGlubmVyUGF0aFJlY3QgPSBpbmZsYXRlUmVj
dCh0ZXh0UmVjdCwgaG9yaXpvbnRhbFBhZGRpbmdJbnNpZGVMaWdodEJvcmRlciwgdmVydGljYWxQ
YWRkaW5nSW5zaWRlTGlnaHRCb3JkZXIpOworCisgICAgICAgIHsKKyAgICAgICAgICAgIEdyYXBo
aWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcihncmFwaGljc0NvbnRleHQpOworICAgICAg
ICAgICAgZ3JhcGhpY3NDb250ZXh0LnNldFNoYWRvdyhGbG9hdFNpemUoc2hhZG93T2Zmc2V0WCwg
c2hhZG93T2Zmc2V0WSksIHNoYWRvd0JsdXJSYWRpdXMsIHNoYWRvd0NvbG9yKCksIENvbG9yU3Bh
Y2VTUkdCKTsKKyAgICAgICAgICAgIGdyYXBoaWNzQ29udGV4dC5zZXRGaWxsQ29sb3IobGlnaHRC
b3JkZXJDb2xvcigpLCBDb2xvclNwYWNlRGV2aWNlUkdCKTsKKyAgICAgICAgICAgIGdyYXBoaWNz
Q29udGV4dC5maWxsUGF0aChwYXRoV2l0aFJvdW5kZWRSZWN0KG91dGVyUGF0aFJlY3QsIGNvcm5l
clJhZGl1cykpOworICAgICAgICB9CisKKyAgICAgICAgeworICAgICAgICAgICAgR3JhcGhpY3ND
b250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKGdyYXBoaWNzQ29udGV4dCk7CisgICAgICAgICAg
ICBncmFwaGljc0NvbnRleHQuY2xpcChwYXRoV2l0aFJvdW5kZWRSZWN0KGlubmVyUGF0aFJlY3Qs
IGNvcm5lclJhZGl1cykpOworICAgICAgICAgICAgUmVmUHRyPEdyYWRpZW50PiBncmFkaWVudCA9
IEdyYWRpZW50OjpjcmVhdGUoRmxvYXRQb2ludChpbm5lclBhdGhSZWN0LngoKSwgaW5uZXJQYXRo
UmVjdC55KCkpLCBGbG9hdFBvaW50KGlubmVyUGF0aFJlY3QueCgpLCBpbm5lclBhdGhSZWN0Lm1h
eFkoKSkpOworICAgICAgICAgICAgZ3JhZGllbnQtPmFkZENvbG9yU3RvcCgwLCBncmFkaWVudExp
Z2h0Q29sb3IoKSk7CisgICAgICAgICAgICBncmFkaWVudC0+YWRkQ29sb3JTdG9wKDEsIGdyYWRp
ZW50RGFya0NvbG9yKCkpOworICAgICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LnNldEZpbGxHcmFk
aWVudChncmFkaWVudC5yZWxlYXNlTm9uTnVsbCgpKTsKKyAgICAgICAgICAgIGdyYXBoaWNzQ29u
dGV4dC5maWxsUmVjdChvdXRlclBhdGhSZWN0KTsKKyAgICAgICAgfQorCisgICAgICAgIHsKKyAg
ICAgICAgICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcihncmFwaGljc0Nv
bnRleHQpOworICAgICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LnRyYW5zbGF0ZShGbG9hdFNpemUo
cm91bmRmKGxlZnRCb3JkZXJUaGlja25lc3MpLCByb3VuZGYodG9wQm9yZGVyVGhpY2tuZXNzKSkp
OworCisgICAgICAgICAgICBJbnRSZWN0IGNvbnRlbnRJbWFnZVJlY3QgPSBlbmNsb3NpbmdJbnRS
ZWN0KG1fdGV4dFJlY3RzSW5TZWxlY3Rpb25SZWN0Q29vcmRpbmF0ZXNbaV0pOworICAgICAgICAg
ICAgbV9jb250ZW50SW1hZ2UtPnBhaW50KGdyYXBoaWNzQ29udGV4dCwgbV9jb250ZW50SW1hZ2VT
Y2FsZUZhY3RvciwgY29udGVudEltYWdlUmVjdC5sb2NhdGlvbigpLCBjb250ZW50SW1hZ2VSZWN0
KTsKKyAgICAgICAgfQorICAgIH0KKyNlbHNlCisgICAgZm9yIChhdXRvJiB0ZXh0UmVjdCA6IG1f
dGV4dFJlY3RzSW5TZWxlY3Rpb25SZWN0Q29vcmRpbmF0ZXMpIHsKKyAgICAgICAgRmxvYXRSZWN0
IGJsdXJSZWN0ID0gdGV4dFJlY3Q7CisgICAgICAgIGJsdXJSZWN0Lm1vdmUoZmxhdFNoYWRvd0Js
dXJSYWRpdXMgKyBmbGF0U3R5bGVIb3Jpem9udGFsQm9yZGVyLCBmbGF0U2hhZG93Qmx1clJhZGl1
cyArIGZsYXRTdHlsZVZlcnRpY2FsQm9yZGVyKTsKKyAgICAgICAgRmxvYXRSZWN0IG91dGVyUGF0
aFJlY3QgPSBpbmZsYXRlUmVjdChibHVyUmVjdCwgZmxhdFN0eWxlSG9yaXpvbnRhbEJvcmRlciwg
ZmxhdFN0eWxlVmVydGljYWxCb3JkZXIpOworCisgICAgICAgIHsKKyAgICAgICAgICAgIEdyYXBo
aWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcihncmFwaGljc0NvbnRleHQpOworICAgICAg
ICAgICAgZ3JhcGhpY3NDb250ZXh0LnNldFNoYWRvdyhGbG9hdFNpemUoKSwgZmxhdFJpbVNoYWRv
d0JsdXJSYWRpdXMsIGZsYXRSaW1TaGFkb3dDb2xvcigpLCBDb2xvclNwYWNlU1JHQik7CisgICAg
ICAgICAgICBncmFwaGljc0NvbnRleHQuc2V0RmlsbENvbG9yKGZsYXRIaWdobGlnaHRDb2xvcigp
LCBDb2xvclNwYWNlU1JHQik7CisgICAgICAgICAgICBncmFwaGljc0NvbnRleHQuZmlsbFJlY3Qo
b3V0ZXJQYXRoUmVjdCk7CisgICAgICAgICAgICBncmFwaGljc0NvbnRleHQuc2V0U2hhZG93KEZs
b2F0U2l6ZShmbGF0U2hhZG93T2Zmc2V0WCwgZmxhdFNoYWRvd09mZnNldFkpLCBmbGF0U2hhZG93
Qmx1clJhZGl1cywgZmxhdERyb3BTaGFkb3dDb2xvcigpLCBDb2xvclNwYWNlU1JHQik7CisgICAg
ICAgICAgICBncmFwaGljc0NvbnRleHQuZmlsbFJlY3Qob3V0ZXJQYXRoUmVjdCk7CisgICAgICAg
IH0KKworICAgICAgICB7CisgICAgICAgICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0
YXRlU2F2ZXIoZ3JhcGhpY3NDb250ZXh0KTsKKyAgICAgICAgICAgIGdyYXBoaWNzQ29udGV4dC50
cmFuc2xhdGUoRmxvYXRTaXplKGZsYXRTaGFkb3dCbHVyUmFkaXVzICsgZmxhdFN0eWxlSG9yaXpv
bnRhbEJvcmRlciwgZmxhdFNoYWRvd0JsdXJSYWRpdXMgKyBmbGF0U3R5bGVWZXJ0aWNhbEJvcmRl
cikpOworCisgICAgICAgICAgICBJbnRSZWN0IGNvbnRlbnRJbWFnZVJlY3QgPSBlbmNsb3NpbmdJ
bnRSZWN0KHRleHRSZWN0KTsKKyAgICAgICAgICAgIG1fY29udGVudEltYWdlLT5wYWludChncmFw
aGljc0NvbnRleHQsIG1fY29udGVudEltYWdlU2NhbGVGYWN0b3IsIGNvbnRlbnRJbWFnZVJlY3Qu
bG9jYXRpb24oKSwgY29udGVudEltYWdlUmVjdCk7CisgICAgICAgIH0KKyAgICB9CisjZW5kaWYK
K30KKwordm9pZCBUZXh0SW5kaWNhdG9yOjplbmNvZGUoSVBDOjpBcmd1bWVudEVuY29kZXImIGVu
Y29kZXIpIGNvbnN0Cit7CisgICAgZW5jb2RlciA8PCBtX3NlbGVjdGlvblJlY3RJbldpbmRvd0Nv
b3JkaW5hdGVzOworICAgIGVuY29kZXIgPDwgbV90ZXh0UmVjdHNJblNlbGVjdGlvblJlY3RDb29y
ZGluYXRlczsKKyAgICBlbmNvZGVyIDw8IG1fY29udGVudEltYWdlU2NhbGVGYWN0b3I7CisKKyAg
ICBTaGFyZWFibGVCaXRtYXA6OkhhbmRsZSBjb250ZW50SW1hZ2VIYW5kbGU7CisgICAgaWYgKG1f
Y29udGVudEltYWdlKQorICAgICAgICBtX2NvbnRlbnRJbWFnZS0+Y3JlYXRlSGFuZGxlKGNvbnRl
bnRJbWFnZUhhbmRsZSwgU2hhcmVkTWVtb3J5OjpSZWFkT25seSk7CisgICAgZW5jb2RlciA8PCBj
b250ZW50SW1hZ2VIYW5kbGU7Cit9CisKK2Jvb2wgVGV4dEluZGljYXRvcjo6ZGVjb2RlKElQQzo6
QXJndW1lbnREZWNvZGVyJiBkZWNvZGVyLCBUZXh0SW5kaWNhdG9yJiB0ZXh0SW5kaWNhdG9yKQor
eworICAgIGlmICghZGVjb2Rlci5kZWNvZGUodGV4dEluZGljYXRvci5tX3NlbGVjdGlvblJlY3RJ
bldpbmRvd0Nvb3JkaW5hdGVzKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKCFk
ZWNvZGVyLmRlY29kZSh0ZXh0SW5kaWNhdG9yLm1fdGV4dFJlY3RzSW5TZWxlY3Rpb25SZWN0Q29v
cmRpbmF0ZXMpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoIWRlY29kZXIuZGVj
b2RlKHRleHRJbmRpY2F0b3IubV9jb250ZW50SW1hZ2VTY2FsZUZhY3RvcikpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgIFNoYXJlYWJsZUJpdG1hcDo6SGFuZGxlIGNvbnRlbnRJbWFnZUhh
bmRsZTsKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGNvbnRlbnRJbWFnZUhhbmRsZSkpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmICghY29udGVudEltYWdlSGFuZGxlLmlzTnVsbCgp
KQorICAgICAgICB0ZXh0SW5kaWNhdG9yLm1fY29udGVudEltYWdlID0gU2hhcmVhYmxlQml0bWFw
OjpjcmVhdGUoY29udGVudEltYWdlSGFuZGxlLCBTaGFyZWRNZW1vcnk6OlJlYWRPbmx5KTsKKwor
ICAgIHJldHVybiB0cnVlOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9UZXh0SW5kaWNhdG9yLmggYi9Tb3VyY2UvV2ViS2l0Mi9T
aGFyZWQvVGV4dEluZGljYXRvci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu
Ljk5NDQ4OTUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvVGV4dElu
ZGljYXRvci5oCkBAIC0wLDAgKzEsODMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFRleHRJbmRp
Y2F0b3JfaAorI2RlZmluZSBUZXh0SW5kaWNhdG9yX2gKKworI2luY2x1ZGUgIlNoYXJlYWJsZUJp
dG1hcC5oIgorI2luY2x1ZGUgPFdlYkNvcmUvRmxvYXRSZWN0Lmg+CisjaW5jbHVkZSA8d3RmL1Bh
c3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9W
ZWN0b3IuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworY2xhc3MgR3JhcGhpY3NDb250ZXh0Owor
fQorCituYW1lc3BhY2UgSVBDIHsKK2NsYXNzIEFyZ3VtZW50RGVjb2RlcjsKK2NsYXNzIEFyZ3Vt
ZW50RW5jb2RlcjsKK30KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFdlYkZyYW1lOwor
CitjbGFzcyBUZXh0SW5kaWNhdG9yIHsKK3B1YmxpYzoKKyAgICBUZXh0SW5kaWNhdG9yKCk7Cisg
ICAgVGV4dEluZGljYXRvcihjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIHNlbGVjdGlvblJlY3RJ
bldpbmRvd0Nvb3JkaW5hdGVzLCBjb25zdCBWZWN0b3I8V2ViQ29yZTo6RmxvYXRSZWN0PiYgdGV4
dFJlY3RzSW5TZWxlY3Rpb25Db29yZGluYXRlcywgZmxvYXQgY29udGVudEltYWdlU2NhbGVGYWN0
b3IsIFBhc3NSZWZQdHI8U2hhcmVhYmxlQml0bWFwPiBjb250ZW50SW1hZ2UpOworICAgIH5UZXh0
SW5kaWNhdG9yKCk7CisKKyAgICBzdGF0aWMgVGV4dEluZGljYXRvciBpbmRpY2F0b3JXaXRoU2Vs
ZWN0aW9uSW5GcmFtZShXZWJGcmFtZSYpOworCisgICAgV2ViQ29yZTo6RmxvYXRSZWN0IHNlbGVj
dGlvblJlY3RJbldpbmRvd0Nvb3JkaW5hdGVzKCkgY29uc3QgeyByZXR1cm4gbV9zZWxlY3Rpb25S
ZWN0SW5XaW5kb3dDb29yZGluYXRlczsgfQorICAgIFdlYkNvcmU6OkZsb2F0UmVjdCBmcmFtZVJl
Y3QoKSBjb25zdDsKKworICAgIFNoYXJlYWJsZUJpdG1hcCogY29udGVudEltYWdlKCkgY29uc3Qg
eyByZXR1cm4gbV9jb250ZW50SW1hZ2UuZ2V0KCk7IH0KKworICAgIHZvaWQgZHJhdyhXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQmLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBkaXJ0eVJlY3QpOwor
CisgICAgdm9pZCBlbmNvZGUoSVBDOjpBcmd1bWVudEVuY29kZXImKSBjb25zdDsKKyAgICBzdGF0
aWMgYm9vbCBkZWNvZGUoSVBDOjpBcmd1bWVudERlY29kZXImLCBUZXh0SW5kaWNhdG9yJik7CisK
KyAgICBpbmxpbmUgYm9vbCBvcGVyYXRvcj09IChjb25zdCBUZXh0SW5kaWNhdG9yJiBvKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIG1fc2VsZWN0aW9uUmVjdEluV2luZG93Q29vcmRpbmF0ZXMgPT0g
by5tX3NlbGVjdGlvblJlY3RJbldpbmRvd0Nvb3JkaW5hdGVzCisgICAgICAgICYmIG1fdGV4dFJl
Y3RzSW5TZWxlY3Rpb25SZWN0Q29vcmRpbmF0ZXMgPT0gby5tX3RleHRSZWN0c0luU2VsZWN0aW9u
UmVjdENvb3JkaW5hdGVzCisgICAgICAgICYmIG1fY29udGVudEltYWdlU2NhbGVGYWN0b3IgPT0g
by5tX2NvbnRlbnRJbWFnZVNjYWxlRmFjdG9yCisgICAgICAgICYmIG1fY29udGVudEltYWdlID09
IG8ubV9jb250ZW50SW1hZ2U7CisgICAgfQorCitwcml2YXRlOgorICAgIFdlYkNvcmU6OkZsb2F0
UmVjdCBtX3NlbGVjdGlvblJlY3RJbldpbmRvd0Nvb3JkaW5hdGVzOworICAgIFZlY3RvcjxXZWJD
b3JlOjpGbG9hdFJlY3Q+IG1fdGV4dFJlY3RzSW5TZWxlY3Rpb25SZWN0Q29vcmRpbmF0ZXM7Cisg
ICAgZmxvYXQgbV9jb250ZW50SW1hZ2VTY2FsZUZhY3RvcjsKKyAgICBSZWZQdHI8U2hhcmVhYmxl
Qml0bWFwPiBtX2NvbnRlbnRJbWFnZTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisj
ZW5kaWYgLy8gVGV4dEluZGljYXRvcl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFy
ZWQvbWFjL0FjdGlvbk1lbnVIaXRUZXN0UmVzdWx0LmggYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQv
bWFjL0FjdGlvbk1lbnVIaXRUZXN0UmVzdWx0LmgKaW5kZXggMWE5NGMyNC4uMzkwOTg1ZSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdDIvU2hhcmVkL21hYy9BY3Rpb25NZW51SGl0VGVzdFJlc3Vs
dC5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9tYWMvQWN0aW9uTWVudUhpdFRlc3RSZXN1
bHQuaApAQCAtMjcsNiArMjcsNyBAQAogI2RlZmluZSBBY3Rpb25NZW51SGl0VGVzdFJlc3VsdF9o
CiAKICNpbmNsdWRlICJTaGFyZWFibGVCaXRtYXAuaCIKKyNpbmNsdWRlICJUZXh0SW5kaWNhdG9y
LmgiCiAjaW5jbHVkZSAiV2ViSGl0VGVzdFJlc3VsdC5oIgogI2luY2x1ZGUgPFdlYkNvcmUvRmxv
YXRSZWN0Lmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CkBAIC01MSw3ICs1Miw4
IEBAIHN0cnVjdCBBY3Rpb25NZW51SGl0VGVzdFJlc3VsdCB7CiAgICAgUmVmUHRyPFNoYXJlYWJs
ZUJpdG1hcD4gaW1hZ2U7CiAKICAgICBSZXRhaW5QdHI8RERBY3Rpb25Db250ZXh0PiBhY3Rpb25D
b250ZXh0OwotICAgIFdlYkNvcmU6OkZsb2F0UmVjdCBhY3Rpb25Cb3VuZGluZ0JveDsKKyAgICBX
ZWJDb3JlOjpGbG9hdFJlY3QgZGV0ZWN0ZWREYXRhQm91bmRpbmdCb3g7CisgICAgVGV4dEluZGlj
YXRvciBkZXRlY3RlZERhdGFUZXh0SW5kaWNhdG9yOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2Vi
S2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbWFjL0FjdGlvbk1lbnVIaXRU
ZXN0UmVzdWx0Lm1tIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL21hYy9BY3Rpb25NZW51SGl0VGVz
dFJlc3VsdC5tbQppbmRleCBiNmI4ZTVmLi42YWNjYTdmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0Mi9TaGFyZWQvbWFjL0FjdGlvbk1lbnVIaXRUZXN0UmVzdWx0Lm1tCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL1NoYXJlZC9tYWMvQWN0aW9uTWVudUhpdFRlc3RSZXN1bHQubW0KQEAgLTI5LDYgKzI5
LDcgQEAKICNpbXBvcnQgIkFyZ3VtZW50Q29kZXJzQ0YuaCIKICNpbXBvcnQgIkFyZ3VtZW50RGVj
b2Rlci5oIgogI2ltcG9ydCAiQXJndW1lbnRFbmNvZGVyLmgiCisjaW1wb3J0ICJUZXh0SW5kaWNh
dG9yLmgiCiAjaW1wb3J0ICJXZWJDb3JlQXJndW1lbnRDb2RlcnMuaCIKICNpbXBvcnQgPFdlYkNv
cmUvRGF0YURldGVjdG9yc1NQSS5oPgogCkBAIC01OCw5ICs1OSwxMCBAQCB2b2lkIEFjdGlvbk1l
bnVIaXRUZXN0UmVzdWx0OjplbmNvZGUoSVBDOjpBcmd1bWVudEVuY29kZXImIGVuY29kZXIpIGNv
bnN0CiAgICAgICAgIFthcmNoaXZlciBmaW5pc2hFbmNvZGluZ107CiAKICAgICAgICAgSVBDOjpl
bmNvZGUoZW5jb2RlciwgcmVpbnRlcnByZXRfY2FzdDxDRkRhdGFSZWY+KGRhdGEuZ2V0KCkpKTsK
LSAgICB9CiAKLSAgICBlbmNvZGVyIDw8IGFjdGlvbkJvdW5kaW5nQm94OworICAgICAgICBlbmNv
ZGVyIDw8IGRldGVjdGVkRGF0YUJvdW5kaW5nQm94OworICAgICAgICBlbmNvZGVyIDw8IGRldGVj
dGVkRGF0YVRleHRJbmRpY2F0b3I7CisgICAgfQogfQogCiBib29sIEFjdGlvbk1lbnVIaXRUZXN0
UmVzdWx0OjpkZWNvZGUoSVBDOjpBcmd1bWVudERlY29kZXImIGRlY29kZXIsIEFjdGlvbk1lbnVI
aXRUZXN0UmVzdWx0JiBhY3Rpb25NZW51SGl0VGVzdFJlc3VsdCkKQEAgLTEwMCwxMCArMTAyLDEz
IEBAIGJvb2wgQWN0aW9uTWVudUhpdFRlc3RSZXN1bHQ6OmRlY29kZShJUEM6OkFyZ3VtZW50RGVj
b2RlciYgZGVjb2RlciwgQWN0aW9uTWVudUhpCiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAg
IFt1bmFyY2hpdmVyIGZpbmlzaERlY29kaW5nXTsKLSAgICB9CiAKLSAgICBpZiAoIWRlY29kZXIu
ZGVjb2RlKGFjdGlvbk1lbnVIaXRUZXN0UmVzdWx0LmFjdGlvbkJvdW5kaW5nQm94KSkKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGFjdGlvbk1lbnVI
aXRUZXN0UmVzdWx0LmRldGVjdGVkRGF0YUJvdW5kaW5nQm94KSkKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGFjdGlvbk1lbnVIaXRUZXN0
UmVzdWx0LmRldGVjdGVkRGF0YVRleHRJbmRpY2F0b3IpKQorICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH0KIAogICAgIHJldHVybiB0cnVlOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9tYWMvV0tWaWV3Lm1tIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9tYWMvV0tWaWV3Lm1tCmluZGV4IDcyNzlhODIuLmE4NTgxYTAgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1dLVmlldy5tbQorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9XS1ZpZXcubW0KQEAgLTMwNDEsOSArMzA0MSw5IEBA
IHN0YXRpYyB2b2lkKiBrZXlWYWx1ZU9ic2VydmluZ0NvbnRleHQgPSAma2V5VmFsdWVPYnNlcnZp
bmdDb250ZXh0OwogICAgIH0KIH0KIAotLSAodm9pZClfc2V0VGV4dEluZGljYXRvcjooUGFzc1Jl
ZlB0cjxUZXh0SW5kaWNhdG9yPil0ZXh0SW5kaWNhdG9yIGZhZGVPdXQ6KEJPT0wpZmFkZU91dCBh
bmltYXRlOihCT09MKWFuaW1hdGUKKy0gKHZvaWQpX3NldFRleHRJbmRpY2F0b3I6KGNvbnN0IFRl
eHRJbmRpY2F0b3ImKXRleHRJbmRpY2F0b3IgZmFkZU91dDooQk9PTClmYWRlT3V0IGFuaW1hdGU6
KEJPT0wpYW5pbWF0ZQogewotICAgIGlmICghdGV4dEluZGljYXRvcikgeworICAgIGlmICghdGV4
dEluZGljYXRvci5jb250ZW50SW1hZ2UoKSkgewogICAgICAgICBfZGF0YS0+X3RleHRJbmRpY2F0
b3JXaW5kb3cgPSBudWxscHRyOwogICAgICAgICByZXR1cm47CiAgICAgfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9tYWMvV0tWaWV3SW50ZXJuYWwuaCBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1dLVmlld0ludGVybmFsLmgKaW5kZXggMWVjMmVj
MC4uYjUzMjY4NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9tYWMv
V0tWaWV3SW50ZXJuYWwuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9X
S1ZpZXdJbnRlcm5hbC5oCkBAIC04MCw3ICs4MCw3IEBAIHN0cnVjdCBXZWJQYWdlQ29uZmlndXJh
dGlvbjsKIC0gKHZvaWQpX3NldEludHJpbnNpY0NvbnRlbnRTaXplOihOU1NpemUpaW50cmluc2lj
Q29udGVudFNpemU7CiAtIChOU1JlY3QpX2NvbnZlcnRUb0RldmljZVNwYWNlOihOU1JlY3QpcmVj
dDsKIC0gKE5TUmVjdClfY29udmVydFRvVXNlclNwYWNlOihOU1JlY3QpcmVjdDsKLS0gKHZvaWQp
X3NldFRleHRJbmRpY2F0b3I6KFBhc3NSZWZQdHI8V2ViS2l0OjpUZXh0SW5kaWNhdG9yPil0ZXh0
SW5kaWNhdG9yIGZhZGVPdXQ6KEJPT0wpZmFkZU91dCBhbmltYXRlOihCT09MKWFuaW1hdGU7Cist
ICh2b2lkKV9zZXRUZXh0SW5kaWNhdG9yOihjb25zdCBXZWJLaXQ6OlRleHRJbmRpY2F0b3ImKXRl
eHRJbmRpY2F0b3IgZmFkZU91dDooQk9PTClmYWRlT3V0IGFuaW1hdGU6KEJPT0wpYW5pbWF0ZTsK
IAogLSAodm9pZClfc2V0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGVSb290TGF5ZXI6KENBTGF5
ZXIgKilyb290TGF5ZXI7CiAtIChDQUxheWVyICopX2FjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2Rl
Um9vdExheWVyOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1BhZ2VDbGll
bnQuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9QYWdlQ2xpZW50LmgKaW5kZXggYTAzYTM2
MC4uODFjMTAzZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1BhZ2VDbGll
bnQuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvUGFnZUNsaWVudC5oCkBAIC0yMTQs
NyArMjE0LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxXZWJDb2xvclBpY2tl
cj4gY3JlYXRlQ29sb3JQaWNrZXIoV2ViUGFnZVByb3h5KiwgY29uc3QgV2ViQ29yZTo6Q29sb3Im
IGluaXRpYWxDb2xvciwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpID0gMDsKICNlbmRpZgogCi0g
ICAgdmlydHVhbCB2b2lkIHNldFRleHRJbmRpY2F0b3IoUGFzc1JlZlB0cjxUZXh0SW5kaWNhdG9y
PiwgYm9vbCBmYWRlT3V0LCBib29sIGFuaW1hdGUpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0
VGV4dEluZGljYXRvcihjb25zdCBUZXh0SW5kaWNhdG9yJiwgYm9vbCBmYWRlT3V0LCBib29sIGFu
aW1hdGUpID0gMDsKIAogICAgIHZpcnR1YWwgdm9pZCBlbnRlckFjY2VsZXJhdGVkQ29tcG9zaXRp
bmdNb2RlKGNvbnN0IExheWVyVHJlZUNvbnRleHQmKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGV4
aXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZSgpID0gMDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9UZXh0SW5kaWNhdG9yLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9UZXh0SW5kaWNhdG9yLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmU1
OGQyMS4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvVGV4dEluZGljYXRv
ci5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwyNzcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNs
dWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJUZXh0SW5kaWNhdG9yLmgiCi0KLSNpbmNsdWRlICJT
aGFyZWFibGVCaXRtYXAuaCIKLSNpbmNsdWRlIDxXZWJDb3JlL0dlb21ldHJ5VXRpbGl0aWVzLmg+
Ci0jaW5jbHVkZSA8V2ViQ29yZS9HcmFkaWVudC5oPgotI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhp
Y3NDb250ZXh0Lmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9JbnRSZWN0Lmg+Ci0jaW5jbHVkZSA8V2Vi
Q29yZS9QYXRoLmg+Ci0KLSNpZiBQTEFURk9STShNQUMpICYmIF9fTUFDX09TX1hfVkVSU0lPTl9N
SU5fUkVRVUlSRUQgPCAxMDEwMDAKLSNkZWZpbmUgRU5BQkxFX0xFR0FDWV9URVhUX0lORElDQVRP
Ul9TVFlMRSAxCi0jZWxzZQotI2RlZmluZSBFTkFCTEVfTEVHQUNZX1RFWFRfSU5ESUNBVE9SX1NU
WUxFIDAKLSNlbmRpZgotCi11c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKLQotI2lmIEVOQUJMRShM
RUdBQ1lfVEVYVF9JTkRJQ0FUT1JfU1RZTEUpCi1zdGF0aWMgY29uc3QgZmxvYXQgY29ybmVyUmFk
aXVzID0gMy4wOwotCi1zdGF0aWMgY29uc3QgZmxvYXQgc2hhZG93T2Zmc2V0WCA9IDAuMDsKLXN0
YXRpYyBjb25zdCBmbG9hdCBzaGFkb3dPZmZzZXRZID0gMS4wOwotc3RhdGljIGNvbnN0IGZsb2F0
IHNoYWRvd0JsdXJSYWRpdXMgPSAzLjA7Ci0KLXN0YXRpYyBjb25zdCBpbnQgc2hhZG93UmVkID0g
MDsKLXN0YXRpYyBjb25zdCBpbnQgc2hhZG93R3JlZW4gPSAwOwotc3RhdGljIGNvbnN0IGludCBz
aGFkb3dCbHVlID0gMDsKLXN0YXRpYyBjb25zdCBpbnQgc2hhZG93QWxwaGEgPSAyMDQ7Ci0KLXN0
YXRpYyBjb25zdCBmbG9hdCBsaWdodEJvcmRlclRoaWNrbmVzcyA9IDEuMDsKLXN0YXRpYyBjb25z
dCBmbG9hdCBob3Jpem9udGFsUGFkZGluZ0luc2lkZUxpZ2h0Qm9yZGVyID0gMy4wOwotc3RhdGlj
IGNvbnN0IGZsb2F0IHZlcnRpY2FsUGFkZGluZ0luc2lkZUxpZ2h0Qm9yZGVyID0gMS4wOwotCi1z
dGF0aWMgY29uc3QgZmxvYXQgaG9yaXpvbnRhbEJvcmRlckluc2lkZVNoYWRvdyA9IGxpZ2h0Qm9y
ZGVyVGhpY2tuZXNzICsgaG9yaXpvbnRhbFBhZGRpbmdJbnNpZGVMaWdodEJvcmRlcjsKLXN0YXRp
YyBjb25zdCBmbG9hdCB2ZXJ0aWNhbEJvcmRlckluc2lkZVNoYWRvdyA9IGxpZ2h0Qm9yZGVyVGhp
Y2tuZXNzICsgdmVydGljYWxQYWRkaW5nSW5zaWRlTGlnaHRCb3JkZXI7Ci0KLXN0YXRpYyBjb25z
dCBmbG9hdCBsZWZ0Qm9yZGVyVGhpY2tuZXNzID0gaG9yaXpvbnRhbEJvcmRlckluc2lkZVNoYWRv
dyArIHNoYWRvd09mZnNldFggKyBzaGFkb3dCbHVyUmFkaXVzIC8gMi4wOwotc3RhdGljIGNvbnN0
IGZsb2F0IHRvcEJvcmRlclRoaWNrbmVzcyA9IHZlcnRpY2FsQm9yZGVySW5zaWRlU2hhZG93IC0g
c2hhZG93T2Zmc2V0WSArIHNoYWRvd0JsdXJSYWRpdXMgLyAyLjA7Ci1zdGF0aWMgY29uc3QgZmxv
YXQgcmlnaHRCb3JkZXJUaGlja25lc3MgPSBob3Jpem9udGFsQm9yZGVySW5zaWRlU2hhZG93IC0g
c2hhZG93T2Zmc2V0WCArIHNoYWRvd0JsdXJSYWRpdXMgLyAyLjA7Ci1zdGF0aWMgY29uc3QgZmxv
YXQgYm90dG9tQm9yZGVyVGhpY2tuZXNzID0gdmVydGljYWxCb3JkZXJJbnNpZGVTaGFkb3cgKyBz
aGFkb3dPZmZzZXRZICsgc2hhZG93Qmx1clJhZGl1cyAvIDIuMDsKLQotc3RhdGljIGNvbnN0IGZs
b2F0IGhvcml6b250YWxPdXRzZXRUb0NlbnRlck9mTGlnaHRCb3JkZXIgPSBob3Jpem9udGFsQm9y
ZGVySW5zaWRlU2hhZG93IC0gbGlnaHRCb3JkZXJUaGlja25lc3MgLyAyLjA7Ci1zdGF0aWMgY29u
c3QgZmxvYXQgdmVydGljYWxPdXRzZXRUb0NlbnRlck9mTGlnaHRCb3JkZXIgPSB2ZXJ0aWNhbEJv
cmRlckluc2lkZVNoYWRvdyAtIGxpZ2h0Qm9yZGVyVGhpY2tuZXNzIC8gMi4wOwotCi1zdGF0aWMg
Y29uc3QgaW50IGxpZ2h0Qm9yZGVyUmVkID0gMjQ1Owotc3RhdGljIGNvbnN0IGludCBsaWdodEJv
cmRlckdyZWVuID0gMjMwOwotc3RhdGljIGNvbnN0IGludCBsaWdodEJvcmRlckJsdWUgPSAwOwot
c3RhdGljIGNvbnN0IGludCBsaWdodEJvcmRlckFscGhhID0gMjU1OwotCi1zdGF0aWMgY29uc3Qg
aW50IGdyYWRpZW50RGFya1JlZCA9IDIzNzsKLXN0YXRpYyBjb25zdCBpbnQgZ3JhZGllbnREYXJr
R3JlZW4gPSAyMDQ7Ci1zdGF0aWMgY29uc3QgaW50IGdyYWRpZW50RGFya0JsdWUgPSAwOwotc3Rh
dGljIGNvbnN0IGludCBncmFkaWVudERhcmtBbHBoYSA9IDI1NTsKLQotc3RhdGljIGNvbnN0IGlu
dCBncmFkaWVudExpZ2h0UmVkID0gMjQyOwotc3RhdGljIGNvbnN0IGludCBncmFkaWVudExpZ2h0
R3JlZW4gPSAyMzk7Ci1zdGF0aWMgY29uc3QgaW50IGdyYWRpZW50TGlnaHRCbHVlID0gMDsKLXN0
YXRpYyBjb25zdCBpbnQgZ3JhZGllbnRMaWdodEFscGhhID0gMjU1OwotI2Vsc2UKLWNvbnN0IGZs
b2F0IGZsYXRTdHlsZUhvcml6b250YWxCb3JkZXIgPSAyOwotY29uc3QgZmxvYXQgZmxhdFN0eWxl
VmVydGljYWxCb3JkZXIgPSAxOwotY29uc3QgZmxvYXQgZmxhdFNoYWRvd09mZnNldFggPSAwOwot
Y29uc3QgZmxvYXQgZmxhdFNoYWRvd09mZnNldFkgPSA1OwotY29uc3QgZmxvYXQgZmxhdFNoYWRv
d0JsdXJSYWRpdXMgPSAyNTsKLWNvbnN0IGZsb2F0IGZsYXRSaW1TaGFkb3dCbHVyUmFkaXVzID0g
MjsKLSNlbmRpZgotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotUGFzc1JlZlB0cjxUZXh0SW5kaWNh
dG9yPiBUZXh0SW5kaWNhdG9yOjpjcmVhdGUoY29uc3QgRmxvYXRSZWN0JiBzZWxlY3Rpb25SZWN0
SW5XaW5kb3dDb29yZGluYXRlcywgY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mIHRleHRSZWN0c0lu
U2VsZWN0aW9uUmVjdENvb3JkaW5hdGVzLCBmbG9hdCBjb250ZW50SW1hZ2VTY2FsZUZhY3Rvciwg
Y29uc3QgU2hhcmVhYmxlQml0bWFwOjpIYW5kbGUmIGNvbnRlbnRJbWFnZUhhbmRsZSkKLXsKLSAg
ICBSZWZQdHI8U2hhcmVhYmxlQml0bWFwPiBjb250ZW50SW1hZ2UgPSBTaGFyZWFibGVCaXRtYXA6
OmNyZWF0ZShjb250ZW50SW1hZ2VIYW5kbGUpOwotICAgIGlmICghY29udGVudEltYWdlKQotICAg
ICAgICByZXR1cm4gMDsKLSAgICBBU1NFUlQoY29udGVudEltYWdlU2NhbGVGYWN0b3IgIT0gMSB8
fCBjb250ZW50SW1hZ2UtPnNpemUoKSA9PSBlbmNsb3NpbmdJbnRSZWN0KHNlbGVjdGlvblJlY3RJ
bldpbmRvd0Nvb3JkaW5hdGVzKS5zaXplKCkpOwotCi0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBU
ZXh0SW5kaWNhdG9yKHNlbGVjdGlvblJlY3RJbldpbmRvd0Nvb3JkaW5hdGVzLCB0ZXh0UmVjdHNJ
blNlbGVjdGlvblJlY3RDb29yZGluYXRlcywgY29udGVudEltYWdlU2NhbGVGYWN0b3IsIGNvbnRl
bnRJbWFnZS5yZWxlYXNlKCkpKTsKLX0KLQotc3RhdGljIEZsb2F0UmVjdCBpbmZsYXRlUmVjdChj
b25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IGluZmxhdGVYLCBmbG9hdCBpbmZsYXRlWSkKLXsK
LSAgICBGbG9hdFJlY3QgaW5mbGF0ZWRSZWN0ID0gcmVjdDsKLSAgICBpbmZsYXRlZFJlY3QuaW5m
bGF0ZVgoaW5mbGF0ZVgpOwotICAgIGluZmxhdGVkUmVjdC5pbmZsYXRlWShpbmZsYXRlWSk7Ci0g
ICAgcmV0dXJuIGluZmxhdGVkUmVjdDsKLX0KLQotc3RhdGljIEZsb2F0UmVjdCBvdXRzZXRJbmRp
Y2F0b3JSZWN0SW5jbHVkaW5nU2hhZG93KGNvbnN0IEZsb2F0UmVjdCByZWN0KQotewotI2lmIEVO
QUJMRShMRUdBQ1lfVEVYVF9JTkRJQ0FUT1JfU1RZTEUpCi0gICAgRmxvYXRSZWN0IG91dHNldFJl
Y3QgPSByZWN0OwotICAgIG91dHNldFJlY3QubW92ZSgtbGVmdEJvcmRlclRoaWNrbmVzcywgLXRv
cEJvcmRlclRoaWNrbmVzcyk7Ci0gICAgb3V0c2V0UmVjdC5leHBhbmQobGVmdEJvcmRlclRoaWNr
bmVzcyArIHJpZ2h0Qm9yZGVyVGhpY2tuZXNzLCB0b3BCb3JkZXJUaGlja25lc3MgKyBib3R0b21C
b3JkZXJUaGlja25lc3MpOwotICAgIHJldHVybiBvdXRzZXRSZWN0OwotI2Vsc2UKLSAgICByZXR1
cm4gaW5mbGF0ZVJlY3QocmVjdCwgZmxhdFNoYWRvd0JsdXJSYWRpdXMgKyBmbGF0U3R5bGVIb3Jp
em9udGFsQm9yZGVyLCBmbGF0U2hhZG93Qmx1clJhZGl1cyArIGZsYXRTdHlsZVZlcnRpY2FsQm9y
ZGVyKTsKLSNlbmRpZgotfQotCi1zdGF0aWMgYm9vbCB0ZXh0SW5kaWNhdG9yc0ZvclRleHRSZWN0
c092ZXJsYXAoY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mIHRleHRSZWN0cykKLXsKLSAgICBzaXpl
X3QgY291bnQgPSB0ZXh0UmVjdHMuc2l6ZSgpOwotICAgIGlmIChjb3VudCA8PSAxKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0KLSAgICBWZWN0b3I8RmxvYXRSZWN0PiBpbmRpY2F0b3JSZWN0czsK
LSAgICBpbmRpY2F0b3JSZWN0cy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KGNvdW50KTsKLQotICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY291bnQ7ICsraSkgewotICAgICAgICBGbG9hdFJlY3Qg
aW5kaWNhdG9yUmVjdCA9IG91dHNldEluZGljYXRvclJlY3RJbmNsdWRpbmdTaGFkb3codGV4dFJl
Y3RzW2ldKTsKLQotICAgICAgICBmb3IgKHNpemVfdCBqID0gaW5kaWNhdG9yUmVjdHMuc2l6ZSgp
OyBqOyApIHsKLSAgICAgICAgICAgIC0tajsKLSAgICAgICAgICAgIGlmIChpbmRpY2F0b3JSZWN0
LmludGVyc2VjdHMoaW5kaWNhdG9yUmVjdHNbal0pKQotICAgICAgICAgICAgICAgIHJldHVybiB0
cnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgaW5kaWNhdG9yUmVjdHMudW5jaGVja2VkQXBwZW5k
KGluZGljYXRvclJlY3QpOwotICAgIH0KLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotVGV4dElu
ZGljYXRvcjo6VGV4dEluZGljYXRvcihjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIHNlbGVjdGlv
blJlY3RJbldpbmRvd0Nvb3JkaW5hdGVzLCBjb25zdCBWZWN0b3I8V2ViQ29yZTo6RmxvYXRSZWN0
PiYgdGV4dFJlY3RzSW5TZWxlY3Rpb25SZWN0Q29vcmRpbmF0ZXMsIGZsb2F0IGNvbnRlbnRJbWFn
ZVNjYWxlRmFjdG9yLCBQYXNzUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4gY29udGVudEltYWdlKQot
ICAgIDogbV9zZWxlY3Rpb25SZWN0SW5XaW5kb3dDb29yZGluYXRlcyhzZWxlY3Rpb25SZWN0SW5X
aW5kb3dDb29yZGluYXRlcykKLSAgICAsIG1fdGV4dFJlY3RzSW5TZWxlY3Rpb25SZWN0Q29vcmRp
bmF0ZXModGV4dFJlY3RzSW5TZWxlY3Rpb25SZWN0Q29vcmRpbmF0ZXMpCi0gICAgLCBtX2NvbnRl
bnRJbWFnZVNjYWxlRmFjdG9yKGNvbnRlbnRJbWFnZVNjYWxlRmFjdG9yKQotICAgICwgbV9jb250
ZW50SW1hZ2UoY29udGVudEltYWdlKQotewotICAgIGlmICh0ZXh0SW5kaWNhdG9yc0ZvclRleHRS
ZWN0c092ZXJsYXAobV90ZXh0UmVjdHNJblNlbGVjdGlvblJlY3RDb29yZGluYXRlcykpIHsKLSAg
ICAgICAgbV90ZXh0UmVjdHNJblNlbGVjdGlvblJlY3RDb29yZGluYXRlc1swXSA9IHVuaW9uUmVj
dChtX3RleHRSZWN0c0luU2VsZWN0aW9uUmVjdENvb3JkaW5hdGVzKTsKLSAgICAgICAgbV90ZXh0
UmVjdHNJblNlbGVjdGlvblJlY3RDb29yZGluYXRlcy5zaHJpbmsoMSk7Ci0gICAgfQotfQotCi1U
ZXh0SW5kaWNhdG9yOjp+VGV4dEluZGljYXRvcigpCi17Ci19Ci0KLUZsb2F0UmVjdCBUZXh0SW5k
aWNhdG9yOjpmcmFtZVJlY3QoKSBjb25zdAotewotICAgIHJldHVybiBvdXRzZXRJbmRpY2F0b3JS
ZWN0SW5jbHVkaW5nU2hhZG93KG1fc2VsZWN0aW9uUmVjdEluV2luZG93Q29vcmRpbmF0ZXMpOwot
fQotCi0jaWYgRU5BQkxFKExFR0FDWV9URVhUX0lORElDQVRPUl9TVFlMRSkKLXN0YXRpYyBpbmxp
bmUgQ29sb3IgbGlnaHRCb3JkZXJDb2xvcigpCi17Ci0gICAgcmV0dXJuIENvbG9yKGxpZ2h0Qm9y
ZGVyUmVkLCBsaWdodEJvcmRlckdyZWVuLCBsaWdodEJvcmRlckJsdWUsIGxpZ2h0Qm9yZGVyQWxw
aGEpOwotfQotCi1zdGF0aWMgaW5saW5lIENvbG9yIHNoYWRvd0NvbG9yKCkKLXsKLSAgICByZXR1
cm4gQ29sb3Ioc2hhZG93UmVkLCBzaGFkb3dHcmVlbiwgc2hhZG93Qmx1ZSwgc2hhZG93QWxwaGEp
OwotfQotCi1zdGF0aWMgaW5saW5lIENvbG9yIGdyYWRpZW50TGlnaHRDb2xvcigpCi17Ci0gICAg
cmV0dXJuIENvbG9yKGdyYWRpZW50TGlnaHRSZWQsIGdyYWRpZW50TGlnaHRHcmVlbiwgZ3JhZGll
bnRMaWdodEJsdWUsIGdyYWRpZW50TGlnaHRBbHBoYSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgQ29s
b3IgZ3JhZGllbnREYXJrQ29sb3IoKQotewotICAgIHJldHVybiBDb2xvcihncmFkaWVudERhcmtS
ZWQsIGdyYWRpZW50RGFya0dyZWVuLCBncmFkaWVudERhcmtCbHVlLCBncmFkaWVudERhcmtBbHBo
YSk7Ci19Ci0KLXN0YXRpYyBQYXRoIHBhdGhXaXRoUm91bmRlZFJlY3QoY29uc3QgRmxvYXRSZWN0
JiBwYXRoUmVjdCwgZmxvYXQgcmFkaXVzKQotewotICAgIFBhdGggcGF0aDsKLSAgICBwYXRoLmFk
ZFJvdW5kZWRSZWN0KHBhdGhSZWN0LCBGbG9hdFNpemUocmFkaXVzLCByYWRpdXMpKTsKLQotICAg
IHJldHVybiBwYXRoOwotfQotI2Vsc2UKLXN0YXRpYyBpbmxpbmUgQ29sb3IgZmxhdEhpZ2hsaWdo
dENvbG9yKCkKLXsKLSAgICByZXR1cm4gQ29sb3IoMjU1LCAyNTUsIDAsIDI1NSk7Ci19Ci0KLXN0
YXRpYyBpbmxpbmUgQ29sb3IgZmxhdFJpbVNoYWRvd0NvbG9yKCkKLXsKLSAgICByZXR1cm4gQ29s
b3IoMCwgMCwgMCwgMzgpOwotfQotCi1zdGF0aWMgaW5saW5lIENvbG9yIGZsYXREcm9wU2hhZG93
Q29sb3IoKQotewotICAgIHJldHVybiBDb2xvcigwLCAwLCAwLCA1MSk7Ci19Ci0jZW5kaWYKLSAg
ICAKLXZvaWQgVGV4dEluZGljYXRvcjo6ZHJhdyhHcmFwaGljc0NvbnRleHQmIGdyYXBoaWNzQ29u
dGV4dCwgY29uc3QgSW50UmVjdCYgLypkaXJ0eVJlY3QqLykKLXsKLSNpZiBFTkFCTEUoTEVHQUNZ
X1RFWFRfSU5ESUNBVE9SX1NUWUxFKQotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV90ZXh0
UmVjdHNJblNlbGVjdGlvblJlY3RDb29yZGluYXRlcy5zaXplKCk7ICsraSkgewotICAgICAgICBG
bG9hdFJlY3QgdGV4dFJlY3QgPSBtX3RleHRSZWN0c0luU2VsZWN0aW9uUmVjdENvb3JkaW5hdGVz
W2ldOwotICAgICAgICB0ZXh0UmVjdC5tb3ZlKGxlZnRCb3JkZXJUaGlja25lc3MsIHRvcEJvcmRl
clRoaWNrbmVzcyk7Ci0KLSAgICAgICAgRmxvYXRSZWN0IG91dGVyUGF0aFJlY3QgPSBpbmZsYXRl
UmVjdCh0ZXh0UmVjdCwgaG9yaXpvbnRhbE91dHNldFRvQ2VudGVyT2ZMaWdodEJvcmRlciwgdmVy
dGljYWxPdXRzZXRUb0NlbnRlck9mTGlnaHRCb3JkZXIpOwotICAgICAgICBGbG9hdFJlY3QgaW5u
ZXJQYXRoUmVjdCA9IGluZmxhdGVSZWN0KHRleHRSZWN0LCBob3Jpem9udGFsUGFkZGluZ0luc2lk
ZUxpZ2h0Qm9yZGVyLCB2ZXJ0aWNhbFBhZGRpbmdJbnNpZGVMaWdodEJvcmRlcik7Ci0KLSAgICAg
ICAgewotICAgICAgICAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKGdy
YXBoaWNzQ29udGV4dCk7Ci0gICAgICAgICAgICBncmFwaGljc0NvbnRleHQuc2V0U2hhZG93KEZs
b2F0U2l6ZShzaGFkb3dPZmZzZXRYLCBzaGFkb3dPZmZzZXRZKSwgc2hhZG93Qmx1clJhZGl1cywg
c2hhZG93Q29sb3IoKSwgQ29sb3JTcGFjZVNSR0IpOwotICAgICAgICAgICAgZ3JhcGhpY3NDb250
ZXh0LnNldEZpbGxDb2xvcihsaWdodEJvcmRlckNvbG9yKCksIENvbG9yU3BhY2VEZXZpY2VSR0Ip
OwotICAgICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LmZpbGxQYXRoKHBhdGhXaXRoUm91bmRlZFJl
Y3Qob3V0ZXJQYXRoUmVjdCwgY29ybmVyUmFkaXVzKSk7Ci0gICAgICAgIH0KLQotICAgICAgICB7
Ci0gICAgICAgICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoZ3JhcGhp
Y3NDb250ZXh0KTsKLSAgICAgICAgICAgIGdyYXBoaWNzQ29udGV4dC5jbGlwKHBhdGhXaXRoUm91
bmRlZFJlY3QoaW5uZXJQYXRoUmVjdCwgY29ybmVyUmFkaXVzKSk7Ci0gICAgICAgICAgICBSZWZQ
dHI8R3JhZGllbnQ+IGdyYWRpZW50ID0gR3JhZGllbnQ6OmNyZWF0ZShGbG9hdFBvaW50KGlubmVy
UGF0aFJlY3QueCgpLCBpbm5lclBhdGhSZWN0LnkoKSksIEZsb2F0UG9pbnQoaW5uZXJQYXRoUmVj
dC54KCksIGlubmVyUGF0aFJlY3QubWF4WSgpKSk7Ci0gICAgICAgICAgICBncmFkaWVudC0+YWRk
Q29sb3JTdG9wKDAsIGdyYWRpZW50TGlnaHRDb2xvcigpKTsKLSAgICAgICAgICAgIGdyYWRpZW50
LT5hZGRDb2xvclN0b3AoMSwgZ3JhZGllbnREYXJrQ29sb3IoKSk7Ci0gICAgICAgICAgICBncmFw
aGljc0NvbnRleHQuc2V0RmlsbEdyYWRpZW50KGdyYWRpZW50LnJlbGVhc2VOb25OdWxsKCkpOwot
ICAgICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LmZpbGxSZWN0KG91dGVyUGF0aFJlY3QpOwotICAg
ICAgICB9Ci0KLSAgICAgICAgewotICAgICAgICAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZl
ciBzdGF0ZVNhdmVyKGdyYXBoaWNzQ29udGV4dCk7Ci0gICAgICAgICAgICBncmFwaGljc0NvbnRl
eHQudHJhbnNsYXRlKEZsb2F0U2l6ZShyb3VuZGYobGVmdEJvcmRlclRoaWNrbmVzcyksIHJvdW5k
Zih0b3BCb3JkZXJUaGlja25lc3MpKSk7Ci0KLSAgICAgICAgICAgIEludFJlY3QgY29udGVudElt
YWdlUmVjdCA9IGVuY2xvc2luZ0ludFJlY3QobV90ZXh0UmVjdHNJblNlbGVjdGlvblJlY3RDb29y
ZGluYXRlc1tpXSk7Ci0gICAgICAgICAgICBtX2NvbnRlbnRJbWFnZS0+cGFpbnQoZ3JhcGhpY3ND
b250ZXh0LCBtX2NvbnRlbnRJbWFnZVNjYWxlRmFjdG9yLCBjb250ZW50SW1hZ2VSZWN0LmxvY2F0
aW9uKCksIGNvbnRlbnRJbWFnZVJlY3QpOwotICAgICAgICB9Ci0gICAgfQotI2Vsc2UKLSAgICBm
b3IgKGF1dG8mIHRleHRSZWN0IDogbV90ZXh0UmVjdHNJblNlbGVjdGlvblJlY3RDb29yZGluYXRl
cykgewotICAgICAgICBGbG9hdFJlY3QgYmx1clJlY3QgPSB0ZXh0UmVjdDsKLSAgICAgICAgYmx1
clJlY3QubW92ZShmbGF0U2hhZG93Qmx1clJhZGl1cyArIGZsYXRTdHlsZUhvcml6b250YWxCb3Jk
ZXIsIGZsYXRTaGFkb3dCbHVyUmFkaXVzICsgZmxhdFN0eWxlVmVydGljYWxCb3JkZXIpOwotICAg
ICAgICBGbG9hdFJlY3Qgb3V0ZXJQYXRoUmVjdCA9IGluZmxhdGVSZWN0KGJsdXJSZWN0LCBmbGF0
U3R5bGVIb3Jpem9udGFsQm9yZGVyLCBmbGF0U3R5bGVWZXJ0aWNhbEJvcmRlcik7Ci0KLSAgICAg
ICAgewotICAgICAgICAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKGdy
YXBoaWNzQ29udGV4dCk7Ci0gICAgICAgICAgICBncmFwaGljc0NvbnRleHQuc2V0U2hhZG93KEZs
b2F0U2l6ZSgpLCBmbGF0UmltU2hhZG93Qmx1clJhZGl1cywgZmxhdFJpbVNoYWRvd0NvbG9yKCks
IENvbG9yU3BhY2VTUkdCKTsKLSAgICAgICAgICAgIGdyYXBoaWNzQ29udGV4dC5zZXRGaWxsQ29s
b3IoZmxhdEhpZ2hsaWdodENvbG9yKCksIENvbG9yU3BhY2VTUkdCKTsKLSAgICAgICAgICAgIGdy
YXBoaWNzQ29udGV4dC5maWxsUmVjdChvdXRlclBhdGhSZWN0KTsKLSAgICAgICAgICAgIGdyYXBo
aWNzQ29udGV4dC5zZXRTaGFkb3coRmxvYXRTaXplKGZsYXRTaGFkb3dPZmZzZXRYLCBmbGF0U2hh
ZG93T2Zmc2V0WSksIGZsYXRTaGFkb3dCbHVyUmFkaXVzLCBmbGF0RHJvcFNoYWRvd0NvbG9yKCks
IENvbG9yU3BhY2VTUkdCKTsKLSAgICAgICAgICAgIGdyYXBoaWNzQ29udGV4dC5maWxsUmVjdChv
dXRlclBhdGhSZWN0KTsKLSAgICAgICAgfQotCi0gICAgICAgIHsKLSAgICAgICAgICAgIEdyYXBo
aWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcihncmFwaGljc0NvbnRleHQpOwotICAgICAg
ICAgICAgZ3JhcGhpY3NDb250ZXh0LnRyYW5zbGF0ZShGbG9hdFNpemUoZmxhdFNoYWRvd0JsdXJS
YWRpdXMgKyBmbGF0U3R5bGVIb3Jpem9udGFsQm9yZGVyLCBmbGF0U2hhZG93Qmx1clJhZGl1cyAr
IGZsYXRTdHlsZVZlcnRpY2FsQm9yZGVyKSk7Ci0KLSAgICAgICAgICAgIEludFJlY3QgY29udGVu
dEltYWdlUmVjdCA9IGVuY2xvc2luZ0ludFJlY3QodGV4dFJlY3QpOwotICAgICAgICAgICAgbV9j
b250ZW50SW1hZ2UtPnBhaW50KGdyYXBoaWNzQ29udGV4dCwgbV9jb250ZW50SW1hZ2VTY2FsZUZh
Y3RvciwgY29udGVudEltYWdlUmVjdC5sb2NhdGlvbigpLCBjb250ZW50SW1hZ2VSZWN0KTsKLSAg
ICAgICAgfQotICAgIH0KLSNlbmRpZgotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9UZXh0SW5kaWNhdG9yLmggYi9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvVGV4dEluZGljYXRvci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCBhNDc2ZTcwLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9U
ZXh0SW5kaWNhdG9yLmgKKysrIC9kZXYvbnVsbApAQCAtMSw2NCArMCwwIEBACi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
LSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0g
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8K
LQotI2lmbmRlZiBUZXh0SW5kaWNhdG9yX2gKLSNkZWZpbmUgVGV4dEluZGljYXRvcl9oCi0KLSNp
bmNsdWRlICJTaGFyZWFibGVCaXRtYXAuaCIKLSNpbmNsdWRlIDxXZWJDb3JlL0Zsb2F0UmVjdC5o
PgotI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQu
aD4KLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLWNsYXNz
IEdyYXBoaWNzQ29udGV4dDsKLX0KLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLWNsYXNzIFRleHRJ
bmRpY2F0b3IgOiBwdWJsaWMgUmVmQ291bnRlZDxUZXh0SW5kaWNhdG9yPiB7Ci1wdWJsaWM6Ci0g
ICAgc3RhdGljIFBhc3NSZWZQdHI8VGV4dEluZGljYXRvcj4gY3JlYXRlKGNvbnN0IFdlYkNvcmU6
OkZsb2F0UmVjdCYgc2VsZWN0aW9uUmVjdEluV2luZG93Q29vcmRpbmF0ZXMsIGNvbnN0IFZlY3Rv
cjxXZWJDb3JlOjpGbG9hdFJlY3Q+JiB0ZXh0UmVjdHNJblNlbGVjdGlvblJlY3RDb29yZGluYXRl
cywgZmxvYXQgY29udGVudEltYWdlU2NhbGVGYWN0b3IsIGNvbnN0IFNoYXJlYWJsZUJpdG1hcDo6
SGFuZGxlJiBjb250ZW50SW1hZ2VIYW5kbGUpOwotICAgIH5UZXh0SW5kaWNhdG9yKCk7Ci0KLSAg
ICBXZWJDb3JlOjpGbG9hdFJlY3Qgc2VsZWN0aW9uUmVjdEluV2luZG93Q29vcmRpbmF0ZXMoKSBj
b25zdCB7IHJldHVybiBtX3NlbGVjdGlvblJlY3RJbldpbmRvd0Nvb3JkaW5hdGVzOyB9Ci0gICAg
V2ViQ29yZTo6RmxvYXRSZWN0IGZyYW1lUmVjdCgpIGNvbnN0OwotCi0gICAgU2hhcmVhYmxlQml0
bWFwKiBjb250ZW50SW1hZ2UoKSBjb25zdCB7IHJldHVybiBtX2NvbnRlbnRJbWFnZS5nZXQoKTsg
fQotCi0gICAgdm9pZCBkcmF3KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IFdlYkNv
cmU6OkludFJlY3QmIGRpcnR5UmVjdCk7Ci0KLXByaXZhdGU6Ci0gICAgVGV4dEluZGljYXRvcihj
b25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIHNlbGVjdGlvblJlY3QsIGNvbnN0IFZlY3RvcjxXZWJD
b3JlOjpGbG9hdFJlY3Q+JiB0ZXh0UmVjdHMsIGZsb2F0IGNvbnRlbnRJbWFnZVNjYWxlRmFjdG9y
LCBQYXNzUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4gY29udGVudEltYWdlKTsKLQotICAgIFdlYkNv
cmU6OkZsb2F0UmVjdCBtX3NlbGVjdGlvblJlY3RJbldpbmRvd0Nvb3JkaW5hdGVzOwotICAgIFZl
Y3RvcjxXZWJDb3JlOjpGbG9hdFJlY3Q+IG1fdGV4dFJlY3RzSW5TZWxlY3Rpb25SZWN0Q29vcmRp
bmF0ZXM7Ci0gICAgZmxvYXQgbV9jb250ZW50SW1hZ2VTY2FsZUZhY3RvcjsKLSAgICBSZWZQdHI8
U2hhcmVhYmxlQml0bWFwPiBtX2NvbnRlbnRJbWFnZTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdl
YktpdAotCi0jZW5kaWYgLy8gVGV4dEluZGljYXRvcl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9XZWJQYWdlUHJveHkuY3BwCmluZGV4IDYyMmQxMjMuLjJlYTVhMWIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCkBAIC0zNjI1LDEwICszNjI1LDkgQEAgdm9p
ZCBXZWJQYWdlUHJveHk6OmRpZEdldEltYWdlRm9yRmluZE1hdGNoKGNvbnN0IFNoYXJlYWJsZUJp
dG1hcDo6SGFuZGxlJiBjb250ZW4KICAgICBtX2ZpbmRNYXRjaGVzQ2xpZW50LmRpZEdldEltYWdl
Rm9yTWF0Y2hSZXN1bHQodGhpcywgV2ViSW1hZ2U6OmNyZWF0ZShTaGFyZWFibGVCaXRtYXA6OmNy
ZWF0ZShjb250ZW50SW1hZ2VIYW5kbGUpKS5nZXQoKSwgbWF0Y2hJbmRleCk7CiB9CiAKLXZvaWQg
V2ViUGFnZVByb3h5OjpzZXRUZXh0SW5kaWNhdG9yKGNvbnN0IEZsb2F0UmVjdCYgc2VsZWN0aW9u
UmVjdEluV2luZG93Q29vcmRpbmF0ZXMsIGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiB0ZXh0UmVj
dHNJblNlbGVjdGlvblJlY3RDb29yZGluYXRlcywgZmxvYXQgY29udGVudEltYWdlU2NhbGVGYWN0
b3IsIGNvbnN0IFNoYXJlYWJsZUJpdG1hcDo6SGFuZGxlJiBjb250ZW50SW1hZ2VIYW5kbGUsIGJv
b2wgZmFkZU91dCwgYm9vbCBhbmltYXRlKQordm9pZCBXZWJQYWdlUHJveHk6OnNldFRleHRJbmRp
Y2F0b3IoY29uc3QgVGV4dEluZGljYXRvciYgaW5kaWNhdG9yLCBib29sIGZhZGVPdXQsIGJvb2wg
YW5pbWF0ZSkKIHsKLSAgICBSZWZQdHI8VGV4dEluZGljYXRvcj4gdGV4dEluZGljYXRvciA9IFRl
eHRJbmRpY2F0b3I6OmNyZWF0ZShzZWxlY3Rpb25SZWN0SW5XaW5kb3dDb29yZGluYXRlcywgdGV4
dFJlY3RzSW5TZWxlY3Rpb25SZWN0Q29vcmRpbmF0ZXMsIGNvbnRlbnRJbWFnZVNjYWxlRmFjdG9y
LCBjb250ZW50SW1hZ2VIYW5kbGUpOwotICAgIG1fcGFnZUNsaWVudC5zZXRUZXh0SW5kaWNhdG9y
KHRleHRJbmRpY2F0b3IucmVsZWFzZSgpLCBmYWRlT3V0LCBhbmltYXRlKTsKKyAgICBtX3BhZ2VD
bGllbnQuc2V0VGV4dEluZGljYXRvcihpbmRpY2F0b3IsIGZhZGVPdXQsIGFuaW1hdGUpOwogfQog
CiB2b2lkIFdlYlBhZ2VQcm94eTo6ZGlkRmluZFN0cmluZyhjb25zdCBTdHJpbmcmIHN0cmluZywg
dWludDMyX3QgbWF0Y2hDb3VudCwgaW50MzJfdCBtYXRjaEluZGV4KQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL1dlYlBhZ2VQcm94eS5oCmluZGV4IDU5NTMyMDAuLmQ4ODEwYTIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgKQEAgLTE1Miw2ICsxNTIsNyBAQCBjbGFzcyBQ
YWdlQ2xpZW50OwogY2xhc3MgUmVtb3RlTGF5ZXJUcmVlVHJhbnNhY3Rpb247CiBjbGFzcyBSZW1v
dGVTY3JvbGxpbmdDb29yZGluYXRvclByb3h5OwogY2xhc3MgU3RyaW5nUGFpclZlY3RvcjsKK2Ns
YXNzIFRleHRJbmRpY2F0b3I7CiBjbGFzcyBWaWV3U25hcHNob3Q7CiBjbGFzcyBWaXNpdGVkTGlu
a1Byb3ZpZGVyOwogY2xhc3MgV2ViQmFja0ZvcndhcmRMaXN0OwpAQCAtNjYxLDcgKzY2Miw3IEBA
IHB1YmxpYzoKICAgICB2b2lkIGhpZGVGaW5kVUkoKTsKICAgICB2b2lkIGNvdW50U3RyaW5nTWF0
Y2hlcyhjb25zdCBTdHJpbmcmLCBGaW5kT3B0aW9ucywgdW5zaWduZWQgbWF4TWF0Y2hDb3VudCk7
CiAgICAgdm9pZCBkaWRDb3VudFN0cmluZ01hdGNoZXMoY29uc3QgU3RyaW5nJiwgdWludDMyX3Qg
bWF0Y2hDb3VudCk7Ci0gICAgdm9pZCBzZXRUZXh0SW5kaWNhdG9yKGNvbnN0IFdlYkNvcmU6OkZs
b2F0UmVjdCYgc2VsZWN0aW9uUmVjdEluV2luZG93Q29vcmRpbmF0ZXMsIGNvbnN0IFZlY3RvcjxX
ZWJDb3JlOjpGbG9hdFJlY3Q+JiB0ZXh0UmVjdHNJblNlbGVjdGlvblJlY3RDb29yZGluYXRlcywg
ZmxvYXQgY29udGVudEltYWdlU2NhbGVGYWN0b3IsIGNvbnN0IFNoYXJlYWJsZUJpdG1hcDo6SGFu
ZGxlJiBjb250ZW50SW1hZ2VIYW5kbGUsIGJvb2wgZmFkZU91dCwgYm9vbCBhbmltYXRlKTsKKyAg
ICB2b2lkIHNldFRleHRJbmRpY2F0b3IoY29uc3QgVGV4dEluZGljYXRvciYsIGJvb2wgZmFkZU91
dCwgYm9vbCBhbmltYXRlKTsKICAgICB2b2lkIGRpZEZpbmRTdHJpbmcoY29uc3QgU3RyaW5nJiwg
dWludDMyX3QgbWF0Y2hDb3VudCwgaW50MzJfdCBtYXRjaEluZGV4KTsKICAgICB2b2lkIGRpZEZh
aWxUb0ZpbmRTdHJpbmcoY29uc3QgU3RyaW5nJik7CiAgICAgdm9pZCBkaWRGaW5kU3RyaW5nTWF0
Y2hlcyhjb25zdCBTdHJpbmcmLCBjb25zdCBWZWN0b3I8VmVjdG9yPFdlYkNvcmU6OkludFJlY3Q+
PiYgbWF0Y2hSZWN0cywgaW50MzJfdCBmaXJzdEluZGV4QWZ0ZXJTZWxlY3Rpb24pOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5tZXNzYWdlcy5pbiBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkubWVzc2FnZXMuaW4KaW5kZXgg
MzcwOWRjOC4uODcyYzEzMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dl
YlBhZ2VQcm94eS5tZXNzYWdlcy5pbgorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2Vi
UGFnZVByb3h5Lm1lc3NhZ2VzLmluCkBAIC0yMjgsNyArMjI4LDcgQEAgbWVzc2FnZXMgLT4gV2Vi
UGFnZVByb3h5IHsKIAogICAgICMgRmluZCBtZXNzYWdlcwogICAgIERpZENvdW50U3RyaW5nTWF0
Y2hlcyhTdHJpbmcgc3RyaW5nLCB1aW50MzJfdCBtYXRjaENvdW50KQotICAgIFNldFRleHRJbmRp
Y2F0b3IoV2ViQ29yZTo6RmxvYXRSZWN0IHNlbGVjdGlvblJlY3QsIFZlY3RvcjxXZWJDb3JlOjpG
bG9hdFJlY3Q+IHRleHRSZWN0cywgZmxvYXQgY29udGVudEltYWdlU2NhbGVGYWN0b3IsIFdlYktp
dDo6U2hhcmVhYmxlQml0bWFwOjpIYW5kbGUgY29udGVudEltYWdlSGFuZGxlLCBib29sIGZhZGVP
dXQsIGJvb2wgYW5pbWF0ZSkKKyAgICBTZXRUZXh0SW5kaWNhdG9yKFdlYktpdDo6VGV4dEluZGlj
YXRvciBpbmRpY2F0b3IsIGJvb2wgZmFkZU91dCwgYm9vbCBhbmltYXRlKQogICAgIERpZEZpbmRT
dHJpbmcoU3RyaW5nIHN0cmluZywgdWludDMyX3QgbWF0Y2hDb3VudCwgaW50MzJfdCBtYXRjaElu
ZGV4KQogICAgIERpZEZhaWxUb0ZpbmRTdHJpbmcoU3RyaW5nIHN0cmluZykKICAgICBEaWRGaW5k
U3RyaW5nTWF0Y2hlcyhTdHJpbmcgc3RyaW5nLCBWZWN0b3I8VmVjdG9yPFdlYkNvcmU6OkludFJl
Y3Q+PiBtYXRjaGVzLCBpbnQzMl90IGZpcnN0SW5kZXhBZnRlclNlbGVjdGlvbikKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9pb3MvUGFnZUNsaWVudEltcGxJT1MuaCBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9pb3MvUGFnZUNsaWVudEltcGxJT1MuaAppbmRleCAzMjNk
ZmQxLi5jNjUyNWI2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvaW9zL1Bh
Z2VDbGllbnRJbXBsSU9TLmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2lvcy9QYWdl
Q2xpZW50SW1wbElPUy5oCkBAIC05Niw3ICs5Niw3IEBAIHByaXZhdGU6CiAjZW5kaWYKICAgICB2
aXJ0dWFsIFBhc3NSZWZQdHI8V2ViUG9wdXBNZW51UHJveHk+IGNyZWF0ZVBvcHVwTWVudVByb3h5
KFdlYlBhZ2VQcm94eSopIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxXZWJDb250
ZXh0TWVudVByb3h5PiBjcmVhdGVDb250ZXh0TWVudVByb3h5KFdlYlBhZ2VQcm94eSopIG92ZXJy
aWRlOwotICAgIHZpcnR1YWwgdm9pZCBzZXRUZXh0SW5kaWNhdG9yKFBhc3NSZWZQdHI8VGV4dElu
ZGljYXRvcj4sIGJvb2wgZmFkZU91dCwgYm9vbCBhbmltYXRlKSBvdmVycmlkZTsKKyAgICB2aXJ0
dWFsIHZvaWQgc2V0VGV4dEluZGljYXRvcihjb25zdCBUZXh0SW5kaWNhdG9yJiwgYm9vbCBmYWRl
T3V0LCBib29sIGFuaW1hdGUpIG92ZXJyaWRlOwogCiAgICAgdmlydHVhbCB2b2lkIGVudGVyQWNj
ZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUoY29uc3QgTGF5ZXJUcmVlQ29udGV4dCYpIG92ZXJyaWRl
OwogICAgIHZpcnR1YWwgdm9pZCBleGl0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUoKSBvdmVy
cmlkZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9pb3MvUGFnZUNsaWVu
dEltcGxJT1MubW0gYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvaW9zL1BhZ2VDbGllbnRJbXBs
SU9TLm1tCmluZGV4IDhjM2JiMTEuLjFjNWI3ZTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9pb3MvUGFnZUNsaWVudEltcGxJT1MubW0KKysrIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL2lvcy9QYWdlQ2xpZW50SW1wbElPUy5tbQpAQCAtNDQwLDcgKzQ0MCw3IEBAIFBh
c3NSZWZQdHI8V2ViQ29udGV4dE1lbnVQcm94eT4gUGFnZUNsaWVudEltcGw6OmNyZWF0ZUNvbnRl
eHRNZW51UHJveHkoV2ViUGFnZVByCiAgICAgcmV0dXJuIDA7CiB9CiAKLXZvaWQgUGFnZUNsaWVu
dEltcGw6OnNldFRleHRJbmRpY2F0b3IoUGFzc1JlZlB0cjxUZXh0SW5kaWNhdG9yPiB0ZXh0SW5k
aWNhdG9yLCBib29sIGZhZGVPdXQsIGJvb2wgYW5pbWF0ZSkKK3ZvaWQgUGFnZUNsaWVudEltcGw6
OnNldFRleHRJbmRpY2F0b3IoY29uc3QgVGV4dEluZGljYXRvciYsIGJvb2wgZmFkZU91dCwgYm9v
bCBhbmltYXRlKQogewogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
bWFjL1BhZ2VDbGllbnRJbXBsLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1BhZ2VD
bGllbnRJbXBsLmgKaW5kZXggMTQ3NTgyNy4uYzM5YmI1OCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL21hYy9QYWdlQ2xpZW50SW1wbC5oCisrKyBiL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9tYWMvUGFnZUNsaWVudEltcGwuaApAQCAtMTIwLDcgKzEyMCw3IEBAIHByaXZh
dGU6CiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPFdlYkNvbG9yUGlja2VyPiBjcmVhdGVDb2xvclBp
Y2tlcihXZWJQYWdlUHJveHkqLCBjb25zdCBXZWJDb3JlOjpDb2xvciYgaW5pdGlhbENvbG9yLCBj
b25zdCBXZWJDb3JlOjpJbnRSZWN0Jik7CiAjZW5kaWYKIAotICAgIHZvaWQgc2V0VGV4dEluZGlj
YXRvcihQYXNzUmVmUHRyPFRleHRJbmRpY2F0b3I+LCBib29sIGZhZGVPdXQsIGJvb2wgYW5pbWF0
ZSk7CisgICAgdm9pZCBzZXRUZXh0SW5kaWNhdG9yKGNvbnN0IFRleHRJbmRpY2F0b3ImLCBib29s
IGZhZGVPdXQsIGJvb2wgYW5pbWF0ZSk7CiAKICAgICB2aXJ0dWFsIHZvaWQgZW50ZXJBY2NlbGVy
YXRlZENvbXBvc2l0aW5nTW9kZShjb25zdCBMYXllclRyZWVDb250ZXh0Jik7CiAgICAgdmlydHVh
bCB2b2lkIGV4aXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZSgpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9QYWdlQ2xpZW50SW1wbC5tbSBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9tYWMvUGFnZUNsaWVudEltcGwubW0KaW5kZXggMzc0ZmVmYi4uMGExMTE0
NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9QYWdlQ2xpZW50SW1w
bC5tbQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1BhZ2VDbGllbnRJbXBsLm1t
CkBAIC00NjcsNyArNDY3LDcgQEAgUGFzc1JlZlB0cjxXZWJDb2xvclBpY2tlcj4gUGFnZUNsaWVu
dEltcGw6OmNyZWF0ZUNvbG9yUGlja2VyKFdlYlBhZ2VQcm94eSogcGFnZSwKIH0KICNlbmRpZgog
Ci12b2lkIFBhZ2VDbGllbnRJbXBsOjpzZXRUZXh0SW5kaWNhdG9yKFBhc3NSZWZQdHI8VGV4dElu
ZGljYXRvcj4gdGV4dEluZGljYXRvciwgYm9vbCBmYWRlT3V0LCBib29sIGFuaW1hdGUpCit2b2lk
IFBhZ2VDbGllbnRJbXBsOjpzZXRUZXh0SW5kaWNhdG9yKGNvbnN0IFRleHRJbmRpY2F0b3ImIHRl
eHRJbmRpY2F0b3IsIGJvb2wgZmFkZU91dCwgYm9vbCBhbmltYXRlKQogewogICAgIFttX3drVmll
dyBfc2V0VGV4dEluZGljYXRvcjp0ZXh0SW5kaWNhdG9yIGZhZGVPdXQ6ZmFkZU91dCBhbmltYXRl
OmFuaW1hdGVdOwogfQpAQCAtNjg0LDggKzY4NCw4IEBAIHZvaWQgUGFnZUNsaWVudEltcGw6OmJl
Z2FuRXhpdEZ1bGxTY3JlZW4oY29uc3QgSW50UmVjdCYgaW5pdGlhbEZyYW1lLCBjb25zdCBJbnRS
CiAKIHZvaWQgUGFnZUNsaWVudEltcGw6Om5hdmlnYXRpb25HZXN0dXJlRGlkQmVnaW4oKQogewot
ICAgIC8vIEhpZGUgdGhlIGZpbmRlIGluZGljYXRvciBpZiBpdCdzIHZpc2libGUuCi0gICAgc2V0
VGV4dEluZGljYXRvcihudWxscHRyLCBmYWxzZSwgZmFsc2UpOworICAgIC8vIEhpZGUgdGhlIHRl
eHQgaW5kaWNhdG9yIGlmIGl0J3MgdmlzaWJsZS4KKyAgICBzZXRUZXh0SW5kaWNhdG9yKFRleHRJ
bmRpY2F0b3IoKSwgZmFsc2UsIGZhbHNlKTsKIAogI2lmIFdLX0FQSV9FTkFCTEVECiAgICAgaWYg
KG1fd2ViVmlldykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvVGV4
dEluZGljYXRvcldpbmRvdy5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9UZXh0SW5k
aWNhdG9yV2luZG93LmgKaW5kZXggOWVmMTY0ZC4uZTNhNTBhMCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL21hYy9UZXh0SW5kaWNhdG9yV2luZG93LmgKKysrIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL21hYy9UZXh0SW5kaWNhdG9yV2luZG93LmgKQEAgLTI4LDYgKzI4
LDcgQEAKIAogI2lmIFBMQVRGT1JNKE1BQykKIAorI2ltcG9ydCAiVGV4dEluZGljYXRvci5oIgog
I2ltcG9ydCAiV2ViS2l0U3lzdGVtSW50ZXJmYWNlLmgiCiAjaW1wb3J0IDx3dGYvTm9uY29weWFi
bGUuaD4KICNpbXBvcnQgPHd0Zi9SZWZQdHIuaD4KQEAgLTM5LDggKzQwLDYgQEAKIAogbmFtZXNw
YWNlIFdlYktpdCB7CiAKLWNsYXNzIFRleHRJbmRpY2F0b3I7Ci0KIGNsYXNzIFRleHRJbmRpY2F0
b3JXaW5kb3cgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFRleHRJbmRpY2F0b3JXaW5kb3cp
OwogCkBAIC00OCw3ICs0Nyw3IEBAIHB1YmxpYzoKICAgICBleHBsaWNpdCBUZXh0SW5kaWNhdG9y
V2luZG93KFdLVmlldyAqKTsKICAgICB+VGV4dEluZGljYXRvcldpbmRvdygpOwogCi0gICAgdm9p
ZCBzZXRUZXh0SW5kaWNhdG9yKFBhc3NSZWZQdHI8VGV4dEluZGljYXRvcj4sIGJvb2wgZmFkZU91
dCwgYm9vbCBhbmltYXRlKTsKKyAgICB2b2lkIHNldFRleHRJbmRpY2F0b3IoY29uc3QgVGV4dElu
ZGljYXRvciYsIGJvb2wgZmFkZU91dCwgYm9vbCBhbmltYXRlKTsKIAogcHJpdmF0ZToKICAgICB2
b2lkIGNsb3NlV2luZG93KCk7CkBAIC02Miw3ICs2MSw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBi
b3VuY2VBbmltYXRpb25EaWRFbmQoKTsKIAogICAgIFdLVmlldyogbV93a1ZpZXc7Ci0gICAgUmVm
UHRyPFRleHRJbmRpY2F0b3I+IG1fdGV4dEluZGljYXRvcjsKKyAgICBUZXh0SW5kaWNhdG9yIG1f
dGV4dEluZGljYXRvcjsKICAgICBSZXRhaW5QdHI8TlNXaW5kb3c+IG1fdGV4dEluZGljYXRvcldp
bmRvdzsKIAogICAgIFdLV2luZG93Qm91bmNlQW5pbWF0aW9uQ29udGV4dFJlZiBtX2JvdW5jZUFu
aW1hdGlvbkNvbnRleHQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFj
L1RleHRJbmRpY2F0b3JXaW5kb3cubW0gYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1Rl
eHRJbmRpY2F0b3JXaW5kb3cubW0KaW5kZXggNWQ2NThkNS4uNzkyY2M3YiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9UZXh0SW5kaWNhdG9yV2luZG93Lm1tCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvVGV4dEluZGljYXRvcldpbmRvdy5tbQpAQCAt
MzksMTUgKzM5LDE1IEBAIHN0YXRpYyBjb25zdCBkb3VibGUgZmFkZU91dEFuaW1hdGlvbkR1cmF0
aW9uID0gMC4zOwogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKIEBpbnRlcmZhY2UgV0tUZXh0
SW5kaWNhdG9yVmlldyA6IE5TVmlldyB7Ci0gICAgUmVmUHRyPFdlYktpdDo6VGV4dEluZGljYXRv
cj4gX3RleHRJbmRpY2F0b3I7CisgICAgV2ViS2l0OjpUZXh0SW5kaWNhdG9yIF90ZXh0SW5kaWNh
dG9yOwogfQogCi0tIChpZClfaW5pdFdpdGhUZXh0SW5kaWNhdG9yOihQYXNzUmVmUHRyPFdlYktp
dDo6VGV4dEluZGljYXRvcj4pdGV4dEluZGljYXRvcjsKKy0gKGlkKV9pbml0V2l0aFRleHRJbmRp
Y2F0b3I6KFdlYktpdDo6VGV4dEluZGljYXRvciYpdGV4dEluZGljYXRvcjsKIEBlbmQKIAogQGlt
cGxlbWVudGF0aW9uIFdLVGV4dEluZGljYXRvclZpZXcKIAotLSAoaWQpX2luaXRXaXRoVGV4dElu
ZGljYXRvcjooUGFzc1JlZlB0cjxXZWJLaXQ6OlRleHRJbmRpY2F0b3I+KXRleHRJbmRpY2F0b3IK
Ky0gKGlkKV9pbml0V2l0aFRleHRJbmRpY2F0b3I6KFdlYktpdDo6VGV4dEluZGljYXRvciYpdGV4
dEluZGljYXRvcgogewogICAgIGlmICgoc2VsZiA9IFtzdXBlciBpbml0V2l0aEZyYW1lOk5TWmVy
b1JlY3RdKSkKICAgICAgICAgX3RleHRJbmRpY2F0b3IgPSB0ZXh0SW5kaWNhdG9yOwpAQCAtNTks
NyArNTksNyBAQCB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIHsKICAgICBHcmFwaGljc0NvbnRl
eHQgZ3JhcGhpY3NDb250ZXh0KHN0YXRpY19jYXN0PENHQ29udGV4dFJlZj4oW1tOU0dyYXBoaWNz
Q29udGV4dCBjdXJyZW50Q29udGV4dF0gZ3JhcGhpY3NQb3J0XSkpOwogCi0gICAgX3RleHRJbmRp
Y2F0b3ItPmRyYXcoZ3JhcGhpY3NDb250ZXh0LCBlbmNsb3NpbmdJbnRSZWN0KHJlY3QpKTsKKyAg
ICBfdGV4dEluZGljYXRvci5kcmF3KGdyYXBoaWNzQ29udGV4dCwgZW5jbG9zaW5nSW50UmVjdChy
ZWN0KSk7CiB9CiAKIC0gKEJPT0wpaXNGbGlwcGVkCkBAIC0xMjAsNyArMTIwLDcgQEAgVGV4dElu
ZGljYXRvcldpbmRvdzo6flRleHRJbmRpY2F0b3JXaW5kb3coKQogICAgIGNsb3NlV2luZG93KCk7
CiB9CiAKLXZvaWQgVGV4dEluZGljYXRvcldpbmRvdzo6c2V0VGV4dEluZGljYXRvcihQYXNzUmVm
UHRyPFRleHRJbmRpY2F0b3I+IHRleHRJbmRpY2F0b3IsIGJvb2wgZmFkZU91dCwgYm9vbCBhbmlt
YXRlKQordm9pZCBUZXh0SW5kaWNhdG9yV2luZG93OjpzZXRUZXh0SW5kaWNhdG9yKGNvbnN0IFRl
eHRJbmRpY2F0b3ImIHRleHRJbmRpY2F0b3IsIGJvb2wgZmFkZU91dCwgYm9vbCBhbmltYXRlKQog
ewogICAgIGlmIChtX3RleHRJbmRpY2F0b3IgPT0gdGV4dEluZGljYXRvcikKICAgICAgICAgcmV0
dXJuOwpAQCAtMTMwLDEwICsxMzAsMTAgQEAgdm9pZCBUZXh0SW5kaWNhdG9yV2luZG93OjpzZXRU
ZXh0SW5kaWNhdG9yKFBhc3NSZWZQdHI8VGV4dEluZGljYXRvcj4gdGV4dEluZGljYXQKICAgICAv
LyBHZXQgcmlkIG9mIHRoZSBvbGQgd2luZG93LgogICAgIGNsb3NlV2luZG93KCk7CiAKLSAgICBp
ZiAoIW1fdGV4dEluZGljYXRvcikKKyAgICBpZiAoIW1fdGV4dEluZGljYXRvci5jb250ZW50SW1h
Z2UoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgTlNSZWN0IGNvbnRlbnRSZWN0ID0gbV90ZXh0
SW5kaWNhdG9yLT5mcmFtZVJlY3QoKTsKKyAgICBOU1JlY3QgY29udGVudFJlY3QgPSBtX3RleHRJ
bmRpY2F0b3IuZnJhbWVSZWN0KCk7CiAgICAgTlNSZWN0IHdpbmRvd0ZyYW1lUmVjdCA9IE5TSW50
ZWdyYWxSZWN0KFttX3drVmlldyBjb252ZXJ0UmVjdDpjb250ZW50UmVjdCB0b1ZpZXc6bmlsXSk7
CiAjcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgcHVzaAogI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGlj
IGlnbm9yZWQgIi1XZGVwcmVjYXRlZC1kZWNsYXJhdGlvbnMiCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1dLQWN0aW9uTWVudUNvbnRyb2xsZXIuaCBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9tYWMvV0tBY3Rpb25NZW51Q29udHJvbGxlci5oCmluZGV4IDY3MTJk
MDMuLmFiOTcxZDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvV0tB
Y3Rpb25NZW51Q29udHJvbGxlci5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMv
V0tBY3Rpb25NZW51Q29udHJvbGxlci5oCkBAIC01Niw2ICs1Niw4IEBAIGVudW0gY2xhc3MgQWN0
aW9uTWVudVN0YXRlIHsKICAgICBSZWZQdHI8QVBJOjpPYmplY3Q+IF91c2VyRGF0YTsKICAgICBf
V0tBY3Rpb25NZW51VHlwZSBfdHlwZTsKICAgICBSZXRhaW5QdHI8TlNTaGFyaW5nU2VydmljZVBp
Y2tlcj4gX3NoYXJpbmdTZXJ2aWNlUGlja2VyOworCisgICAgQk9PTCBfaXNTaG93aW5nVGV4dElu
ZGljYXRvcjsKIH0KIAogLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUGFnZTooV2ViS2l0OjpXZWJQ
YWdlUHJveHkmKXBhZ2UgdmlldzooV0tWaWV3ICopd2tWaWV3OwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL21hYy9XS0FjdGlvbk1lbnVDb250cm9sbGVyLm1tIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL21hYy9XS0FjdGlvbk1lbnVDb250cm9sbGVyLm1tCmluZGV4IDUx
ZmEwN2QuLmI5ZjU3ZGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMv
V0tBY3Rpb25NZW51Q29udHJvbGxlci5tbQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
bWFjL1dLQWN0aW9uTWVudUNvbnRyb2xsZXIubW0KQEAgLTI4LDYgKzI4LDcgQEAKIAogI2lmIFBM
QVRGT1JNKE1BQykgJiYgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMDEwMDAK
IAorI2ltcG9ydCAiVGV4dEluZGljYXRvci5oIgogI2ltcG9ydCAiV0tOU1VSTEV4dHJhcy5oIgog
I2ltcG9ydCAiV0tWaWV3SW50ZXJuYWwuaCIKICNpbXBvcnQgIldlYkNvbnRleHQuaCIKQEAgLTcx
LDYgKzcyLDggQEAgdXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKIEBpbnRlcmZhY2UgV0tBY3Rpb25N
ZW51Q29udHJvbGxlciAoKSA8TlNTaGFyaW5nU2VydmljZURlbGVnYXRlLCBOU1NoYXJpbmdTZXJ2
aWNlUGlja2VyRGVsZWdhdGU+CiAtICh2b2lkKV91cGRhdGVBY3Rpb25NZW51SXRlbXNGb3JTdGFn
ZTooTWVudVVwZGF0ZVN0YWdlKXN0YWdlOwogLSAoQk9PTClfY2FuQWRkSW1hZ2VUb1Bob3RvczsK
Ky0gKHZvaWQpX3Nob3dUZXh0SW5kaWNhdG9yOworLSAodm9pZClfaGlkZVRleHRJbmRpY2F0b3I7
CiBAZW5kCiAKIEBpbnRlcmZhY2UgV0tWaWV3IChXS0RlcHJlY2F0ZWRTUEkpCkBAIC0xMDgsNiAr
MTExLDggQEAgdXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKIAogICAgIF9zdGF0ZSA9IEFjdGlvbk1l
bnVTdGF0ZTo6UGVuZGluZzsKICAgICBbc2VsZiBfdXBkYXRlQWN0aW9uTWVudUl0ZW1zRm9yU3Rh
Z2U6TWVudVVwZGF0ZVN0YWdlOjpQcmVwYXJlRm9yTWVudV07CisKKyAgICBbc2VsZiBfaGlkZVRl
eHRJbmRpY2F0b3JdOwogfQogCiAtIChCT09MKWlzTWVudUZvclRleHRDb250ZW50CkBAIC0xMjAs
NiArMTI1LDkgQEAgdXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKICAgICBpZiAobWVudSAhPSBfd2tW
aWV3LmFjdGlvbk1lbnUpCiAgICAgICAgIHJldHVybjsKIAorICAgIGlmIChfdHlwZSA9PSBrV0tB
Y3Rpb25NZW51RGF0YURldGVjdGVkSXRlbSkKKyAgICAgICAgW3NlbGYgX3Nob3dUZXh0SW5kaWNh
dG9yXTsKKwogICAgIGlmICghW3NlbGYgaXNNZW51Rm9yVGV4dENvbnRlbnRdKQogICAgICAgICBy
ZXR1cm47CiAKQEAgLTEzNCw2ICsxNDIsOSBAQCB1c2luZyBuYW1lc3BhY2UgV2ViS2l0Owogewog
ICAgIGlmIChtZW51ICE9IF93a1ZpZXcuYWN0aW9uTWVudSkKICAgICAgICAgcmV0dXJuOworCisg
ICAgaWYgKF90eXBlID09IGtXS0FjdGlvbk1lbnVEYXRhRGV0ZWN0ZWRJdGVtICYmIG1lbnUubnVt
YmVyT2ZJdGVtcyA+IDEpCisgICAgICAgIFtzZWxmIF9oaWRlVGV4dEluZGljYXRvcl07CiAgICAg
CiAgICAgX3N0YXRlID0gQWN0aW9uTWVudVN0YXRlOjpOb25lOwogICAgIF9oaXRUZXN0UmVzdWx0
ID0gQWN0aW9uTWVudUhpdFRlc3RSZXN1bHQoKTsKQEAgLTE0OSw2ICsxNjAsMjggQEAgdXNpbmcg
bmFtZXNwYWNlIFdlYktpdDsKICAgICBfdXNlckRhdGEgPSB1c2VyRGF0YTsKIH0KIAorI3ByYWdt
YSBtYXJrIFRleHQgSW5kaWNhdG9yCisKKy0gKHZvaWQpX3Nob3dUZXh0SW5kaWNhdG9yCit7Cisg
ICAgaWYgKF9pc1Nob3dpbmdUZXh0SW5kaWNhdG9yKQorICAgICAgICByZXR1cm47CisKKyAgICBp
ZiAoX2hpdFRlc3RSZXN1bHQuZGV0ZWN0ZWREYXRhVGV4dEluZGljYXRvci5jb250ZW50SW1hZ2Uo
KSkgeworICAgICAgICBfcGFnZS0+c2V0VGV4dEluZGljYXRvcihfaGl0VGVzdFJlc3VsdC5kZXRl
Y3RlZERhdGFUZXh0SW5kaWNhdG9yLCBmYWxzZSwgdHJ1ZSk7CisgICAgICAgIF9pc1Nob3dpbmdU
ZXh0SW5kaWNhdG9yID0gWUVTOworICAgIH0KK30KKworLSAodm9pZClfaGlkZVRleHRJbmRpY2F0
b3IKK3sKKyAgICBpZiAoIV9pc1Nob3dpbmdUZXh0SW5kaWNhdG9yKQorICAgICAgICByZXR1cm47
CisKKyAgICBfcGFnZS0+c2V0VGV4dEluZGljYXRvcihUZXh0SW5kaWNhdG9yKCksIHRydWUsIHRy
dWUpOworICAgIF9pc1Nob3dpbmdUZXh0SW5kaWNhdG9yID0gTk87Cit9CisKICNwcmFnbWEgbWFy
ayBMaW5rIGFjdGlvbnMKIAogLSAoTlNBcnJheSAqKV9kZWZhdWx0TWVudUl0ZW1zRm9yTGluawpA
QCAtMzIxLDggKzM1NCwxMiBAQCBzdGF0aWMgTlNTdHJpbmcgKnBhdGhUb1Bob3RvT25EaXNrKE5T
U3RyaW5nICpzdWdnZXN0ZWRGaWxlbmFtZSkKICAgICBpZiAoIWFjdGlvbkNvbnRleHQpCiAgICAg
ICAgIHJldHVybiBAWyBdOwogCisgICAgYWN0aW9uQ29udGV4dC5jb21wbGV0aW9uSGFuZGxlciA9
IF4oKSB7CisgICAgICAgIFtzZWxmIF9oaWRlVGV4dEluZGljYXRvcl07CisgICAgfTsKKwogICAg
IFdLU2V0RERBY3Rpb25Db250ZXh0SXNGb3JBY3Rpb25NZW51KGFjdGlvbkNvbnRleHQpOwotICAg
IGFjdGlvbkNvbnRleHQuaGlnaGxpZ2h0RnJhbWUgPSBbX3drVmlldy53aW5kb3cgY29udmVydFJl
Y3RUb1NjcmVlbjpbX3drVmlldyBjb252ZXJ0UmVjdDpfaGl0VGVzdFJlc3VsdC5hY3Rpb25Cb3Vu
ZGluZ0JveCB0b1ZpZXc6bmlsXV07CisgICAgYWN0aW9uQ29udGV4dC5oaWdobGlnaHRGcmFtZSA9
IFtfd2tWaWV3LndpbmRvdyBjb252ZXJ0UmVjdFRvU2NyZWVuOltfd2tWaWV3IGNvbnZlcnRSZWN0
Ol9oaXRUZXN0UmVzdWx0LmRldGVjdGVkRGF0YUJvdW5kaW5nQm94IHRvVmlldzpuaWxdXTsKICAg
ICByZXR1cm4gW1tnZXREREFjdGlvbnNNYW5hZ2VyQ2xhc3MoKSBzaGFyZWRNYW5hZ2VyXSBtZW51
SXRlbXNGb3JSZXN1bHQ6W19oaXRUZXN0UmVzdWx0LmFjdGlvbkNvbnRleHQgbWFpblJlc3VsdF0g
YWN0aW9uQ29udGV4dDphY3Rpb25Db250ZXh0XTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYktpdDIv
V2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IGFjOTVjZmQuLjUyZmE0YzEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oKQEAgLTQ0NjIsNiArNDQ2Miw4IEBACiAJCQkJNTI3MkIyODgxNDA2OTg1RDAwOTZBNUQwIC8q
IFN0YXRpc3RpY3NEYXRhLmNwcCAqLywKIAkJCQk1MjcyQjI4OTE0MDY5ODVEMDA5NkE1RDAgLyog
U3RhdGlzdGljc0RhdGEuaCAqLywKIAkJCQkxQTVFNERBMzEyRDNCRDNEMDA5OUEyQkIgLyogVGV4
dENoZWNrZXJTdGF0ZS5oICovLAorCQkJCTFBOTEwMDcwMTI2Njc1QzQwMDE4NDJGNSAvKiBUZXh0
SW5kaWNhdG9yLmNwcCAqLywKKwkJCQkxQTkxMDA2RjEyNjY3NUMzMDAxODQyRjUgLyogVGV4dElu
ZGljYXRvci5oICovLAogCQkJCTFBNjQyNDVEMTJERTI5QTEwMENBQUUyQyAvKiBVcGRhdGVJbmZv
LmNwcCAqLywKIAkJCQkxQTY0MjQ1QzEyREUyOUExMDBDQUFFMkMgLyogVXBkYXRlSW5mby5oICov
LAogCQkJCTFBQzEzMzY1MTg1NjVCNTcwMEYzRUMwNSAvKiBVc2VyRGF0YS5jcHAgKi8sCkBAIC01
Nzg0LDEwICs1Nzg2LDggQEAKIAkJCQlCQzI2NTIxMjExODI2MDgxMDAyNDNFMTIgLyogRHJhd2lu
Z0FyZWFQcm94eS5jcHAgKi8sCiAJCQkJQkMyNjUyMTMxMTgyNjA4MTAwMjQzRTEyIC8qIERyYXdp
bmdBcmVhUHJveHkuaCAqLywKIAkJCQkxQTY0MjJGQzEyREQwOEZFMDBDQUFFMkMgLyogRHJhd2lu
Z0FyZWFQcm94eS5tZXNzYWdlcy5pbiAqLywKLQkJCQkxQTkxMDA3MDEyNjY3NUM0MDAxODQyRjUg
LyogVGV4dEluZGljYXRvci5jcHAgKi8sCiAJCQkJMUFFMDBENUUxODMxNzkyMTAwMDg3REQ3IC8q
IEZyYW1lTG9hZFN0YXRlLmNwcCAqLywKIAkJCQkxQUUwMEQ1RjE4MzE3OTIxMDAwODdERDcgLyog
RnJhbWVMb2FkU3RhdGUuaCAqLywKLQkJCQkxQTkxMDA2RjEyNjY3NUMzMDAxODQyRjUgLyogVGV4
dEluZGljYXRvci5oICovLAogCQkJCUJDMTc3NTNFMTE4QkFCRjAwMDdEOUU5QSAvKiBHZW5lcmlj
Q2FsbGJhY2suaCAqLywKIAkJCQlCQzA2RjQ0OTEyREJEMUY1MDAyRDc4REUgLyogR2VvbG9jYXRp
b25QZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXJQcm94eS5jcHAgKi8sCiAJCQkJQkMwNkY0NDgxMkRC
RDFGNTAwMkQ3OERFIC8qIEdlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3RNYW5hZ2VyUHJveHku
aCAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9GaW5k
Q29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvRmluZENv
bnRyb2xsZXIuY3BwCmluZGV4IGE4MWZlZDkuLjMwMTljYzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9GaW5kQ29udHJvbGxlci5jcHAKKysrIGIvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0ZpbmRDb250cm9sbGVyLmNwcApAQCAtMjksNiAr
MjksNyBAQAogI2luY2x1ZGUgIkRyYXdpbmdBcmVhLmgiCiAjaW5jbHVkZSAiUGx1Z2luVmlldy5o
IgogI2luY2x1ZGUgIlNoYXJlYWJsZUJpdG1hcC5oIgorI2luY2x1ZGUgIlRleHRJbmRpY2F0b3Iu
aCIKICNpbmNsdWRlICJXS1BhZ2UuaCIKICNpbmNsdWRlICJXZWJDb3JlQXJndW1lbnRDb2RlcnMu
aCIKICNpbmNsdWRlICJXZWJQYWdlLmgiCkBAIC0zNiwxMCArMzcsOCBAQAogI2luY2x1ZGUgPFdl
YkNvcmUvRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9GbG9h
dFF1YWQuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0ZvY3VzQ29udHJvbGxlci5oPgotI2luY2x1ZGUg
PFdlYkNvcmUvRnJhbWVTbmFwc2hvdHRpbmcuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0ZyYW1lVmll
dy5oPgogI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0Lmg+Ci0jaW5jbHVkZSA8V2Vi
Q29yZS9JbWFnZUJ1ZmZlci5oPgogI2luY2x1ZGUgPFdlYkNvcmUvTWFpbkZyYW1lLmg+CiAjaW5j
bHVkZSA8V2ViQ29yZS9QYWdlLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9QYWdlT3ZlcmxheUNvbnRy
b2xsZXIuaD4KQEAgLTI1OSwyOCArMjU4LDYgQEAgdm9pZCBGaW5kQ29udHJvbGxlcjo6ZmluZFN0
cmluZ01hdGNoZXMoY29uc3QgU3RyaW5nJiBzdHJpbmcsIEZpbmRPcHRpb25zIG9wdGlvbnMKICAg
ICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6RGlkRmluZFN0cmluZ01h
dGNoZXMoc3RyaW5nLCBtYXRjaFJlY3RzLCBpbmRleEZvclNlbGVjdGlvbikpOwogfQogCi1zdGF0
aWMgYm9vbCBnZXRGaW5kSW5kaWNhdG9yQml0bWFwKEZyYW1lJiBmcmFtZSwgU2hhcmVhYmxlQml0
bWFwOjpIYW5kbGUmIGhhbmRsZSkKLXsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+
IHNuYXBzaG90ID0gc25hcHNob3RTZWxlY3Rpb24oZnJhbWUsIFdlYkNvcmU6OlNuYXBzaG90T3B0
aW9uc0ZvcmNlQmxhY2tUZXh0KTsKLSAgICBpZiAoIXNuYXBzaG90KQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0KLSAgICBSZWZQdHI8U2hhcmVhYmxlQml0bWFwPiBmaW5kSW5kaWNhdG9yVGV4dEJh
Y2tpbmdTdG9yZSA9IFNoYXJlYWJsZUJpdG1hcDo6Y3JlYXRlU2hhcmVhYmxlKHNuYXBzaG90LT5p
bnRlcm5hbFNpemUoKSwgU2hhcmVhYmxlQml0bWFwOjpTdXBwb3J0c0FscGhhKTsKLSAgICBpZiAo
IWZpbmRJbmRpY2F0b3JUZXh0QmFja2luZ1N0b3JlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0K
LSAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGNvbnNpZGVyIHVzaW5nIHN1YnBpeGVsIGFudGlhbGlh
c2luZyBmb3IgdGhlIHNuYXBzaG90Ci0gICAgLy8gaWYgd2UncmUgY29tcG9zaXRpbmcgdGhpcyBp
bWFnZSBvbnRvIGEgc29saWQgY29sb3IgKHRoZSBtb2Rlcm4gZmluZCBpbmRpY2F0b3Igc3R5bGUp
LgotICAgIGF1dG8gZ3JhcGhpY3NDb250ZXh0ID0gZmluZEluZGljYXRvclRleHRCYWNraW5nU3Rv
cmUtPmNyZWF0ZUdyYXBoaWNzQ29udGV4dCgpOwotICAgIGZsb2F0IGRldmljZVNjYWxlRmFjdG9y
ID0gZnJhbWUucGFnZSgpLT5kZXZpY2VTY2FsZUZhY3RvcigpOwotICAgIGdyYXBoaWNzQ29udGV4
dC0+c2NhbGUoRmxvYXRTaXplKGRldmljZVNjYWxlRmFjdG9yLCBkZXZpY2VTY2FsZUZhY3Rvcikp
OwotICAgIGdyYXBoaWNzQ29udGV4dC0+ZHJhd0ltYWdlQnVmZmVyKHNuYXBzaG90LmdldCgpLCBD
b2xvclNwYWNlRGV2aWNlUkdCLCBGbG9hdFBvaW50KCkpOwotCi0gICAgaWYgKCFmaW5kSW5kaWNh
dG9yVGV4dEJhY2tpbmdTdG9yZS0+Y3JlYXRlSGFuZGxlKGhhbmRsZSkpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQogdm9pZCBGaW5kQ29udHJvbGxlcjo6Z2V0
SW1hZ2VGb3JGaW5kTWF0Y2godWludDMyX3QgbWF0Y2hJbmRleCkKIHsKICAgICBpZiAobWF0Y2hJ
bmRleCA+PSBtX2ZpbmRNYXRjaGVzLnNpemUoKSkKQEAgLTI5MiwxMSArMjY5LDE2IEBAIHZvaWQg
RmluZENvbnRyb2xsZXI6OmdldEltYWdlRm9yRmluZE1hdGNoKHVpbnQzMl90IG1hdGNoSW5kZXgp
CiAgICAgVmlzaWJsZVNlbGVjdGlvbiBvbGRTZWxlY3Rpb24gPSBmcmFtZS0+c2VsZWN0aW9uKCku
c2VsZWN0aW9uKCk7CiAgICAgZnJhbWUtPnNlbGVjdGlvbigpLnNldFNlbGVjdGlvbihWaXNpYmxl
U2VsZWN0aW9uKG1fZmluZE1hdGNoZXNbbWF0Y2hJbmRleF0uZ2V0KCkpKTsKIAotICAgIFNoYXJl
YWJsZUJpdG1hcDo6SGFuZGxlIGhhbmRsZTsKLSAgICBnZXRGaW5kSW5kaWNhdG9yQml0bWFwKCpm
cmFtZSwgaGFuZGxlKTsKKyAgICBSZWZQdHI8U2hhcmVhYmxlQml0bWFwPiBzZWxlY3Rpb25TbmFw
c2hvdCA9IFdlYkZyYW1lOjpmcm9tQ29yZUZyYW1lKCpmcmFtZSktPmNyZWF0ZVNlbGVjdGlvblNu
YXBzaG90KCk7CiAKICAgICBmcmFtZS0+c2VsZWN0aW9uKCkuc2V0U2VsZWN0aW9uKG9sZFNlbGVj
dGlvbik7CiAKKyAgICBpZiAoIXNlbGVjdGlvblNuYXBzaG90KQorICAgICAgICByZXR1cm47CisK
KyAgICBTaGFyZWFibGVCaXRtYXA6OkhhbmRsZSBoYW5kbGU7CisgICAgc2VsZWN0aW9uU25hcHNo
b3QtPmNyZWF0ZUhhbmRsZShoYW5kbGUpOworCiAgICAgaWYgKGhhbmRsZS5pc051bGwoKSkKICAg
ICAgICAgcmV0dXJuOwogCkBAIC0zMzIsMjkgKzMxNCwxMiBAQCB2b2lkIEZpbmRDb250cm9sbGVy
OjpoaWRlRmluZFVJKCkKICNpZiAhUExBVEZPUk0oSU9TKQogYm9vbCBGaW5kQ29udHJvbGxlcjo6
dXBkYXRlRmluZEluZGljYXRvcihGcmFtZSYgc2VsZWN0ZWRGcmFtZSwgYm9vbCBpc1Nob3dpbmdP
dmVybGF5LCBib29sIHNob3VsZEFuaW1hdGUpCiB7Ci0gICAgSW50UmVjdCBzZWxlY3Rpb25SZWN0
ID0gZW5jbG9zaW5nSW50UmVjdChzZWxlY3RlZEZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbkJv
dW5kcygpKTsKLSAgICBTaGFyZWFibGVCaXRtYXA6OkhhbmRsZSBoYW5kbGU7Ci0gICAgaWYgKCFn
ZXRGaW5kSW5kaWNhdG9yQml0bWFwKHNlbGVjdGVkRnJhbWUsIGhhbmRsZSkpCisgICAgYXV0byBp
bmRpY2F0b3IgPSBUZXh0SW5kaWNhdG9yOjppbmRpY2F0b3JXaXRoU2VsZWN0aW9uSW5GcmFtZSgq
V2ViRnJhbWU6OmZyb21Db3JlRnJhbWUoc2VsZWN0ZWRGcmFtZSkpOworICAgIGlmICghaW5kaWNh
dG9yLmNvbnRlbnRJbWFnZSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAvLyBXZSB3
YW50IHRoZSBzZWxlY3Rpb24gcmVjdCBpbiB3aW5kb3cgY29vcmRpbmF0ZXMuCi0gICAgSW50UmVj
dCBzZWxlY3Rpb25SZWN0SW5XaW5kb3dDb29yZGluYXRlcyA9IHNlbGVjdGVkRnJhbWUudmlldygp
LT5jb250ZW50c1RvV2luZG93KHNlbGVjdGlvblJlY3QpOwotCi0gICAgVmVjdG9yPEZsb2F0UmVj
dD4gdGV4dFJlY3RzOwotICAgIHNlbGVjdGVkRnJhbWUuc2VsZWN0aW9uKCkuZ2V0Q2xpcHBlZFZp
c2libGVUZXh0UmVjdGFuZ2xlcyh0ZXh0UmVjdHMpOwotCi0gICAgLy8gV2Ugd2FudCB0aGUgdGV4
dCByZWN0cyBpbiBzZWxlY3Rpb24gcmVjdCBjb29yZGluYXRlcy4KLSAgICBWZWN0b3I8RmxvYXRS
ZWN0PiB0ZXh0UmVjdHNJblNlbGVjdGlvblJlY3RDb29yZGluYXRlczsKLSAgICAKLSAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IHRleHRSZWN0cy5zaXplKCk7ICsraSkgewotICAgICAgICBJbnRS
ZWN0IHRleHRSZWN0SW5TZWxlY3Rpb25SZWN0Q29vcmRpbmF0ZXMgPSBzZWxlY3RlZEZyYW1lLnZp
ZXcoKS0+Y29udGVudHNUb1dpbmRvdyhlbmNsb3NpbmdJbnRSZWN0KHRleHRSZWN0c1tpXSkpOwot
ICAgICAgICB0ZXh0UmVjdEluU2VsZWN0aW9uUmVjdENvb3JkaW5hdGVzLm1vdmUoLXNlbGVjdGlv
blJlY3RJbldpbmRvd0Nvb3JkaW5hdGVzLngoKSwgLXNlbGVjdGlvblJlY3RJbldpbmRvd0Nvb3Jk
aW5hdGVzLnkoKSk7Ci0KLSAgICAgICAgdGV4dFJlY3RzSW5TZWxlY3Rpb25SZWN0Q29vcmRpbmF0
ZXMuYXBwZW5kKHRleHRSZWN0SW5TZWxlY3Rpb25SZWN0Q29vcmRpbmF0ZXMpOwotICAgIH0gICAg
ICAgICAgICAKLQotICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpT
ZXRUZXh0SW5kaWNhdG9yKHNlbGVjdGlvblJlY3RJbldpbmRvd0Nvb3JkaW5hdGVzLCB0ZXh0UmVj
dHNJblNlbGVjdGlvblJlY3RDb29yZGluYXRlcywgbV93ZWJQYWdlLT5jb3JlUGFnZSgpLT5kZXZp
Y2VTY2FsZUZhY3RvcigpLCBoYW5kbGUsICFpc1Nob3dpbmdPdmVybGF5LCBzaG91bGRBbmltYXRl
KSk7Ci0gICAgbV9maW5kSW5kaWNhdG9yUmVjdCA9IHNlbGVjdGlvblJlY3RJbldpbmRvd0Nvb3Jk
aW5hdGVzOworICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpTZXRU
ZXh0SW5kaWNhdG9yKGluZGljYXRvciwgIWlzU2hvd2luZ092ZXJsYXksIHNob3VsZEFuaW1hdGUp
KTsKKyAgICBtX2ZpbmRJbmRpY2F0b3JSZWN0ID0gZW5jbG9zaW5nSW50UmVjdChpbmRpY2F0b3Iu
c2VsZWN0aW9uUmVjdEluV2luZG93Q29vcmRpbmF0ZXMoKSk7CiAgICAgbV9pc1Nob3dpbmdGaW5k
SW5kaWNhdG9yID0gdHJ1ZTsKIAogICAgIHJldHVybiB0cnVlOwpAQCAtMzY1LDggKzMzMCw3IEBA
IHZvaWQgRmluZENvbnRyb2xsZXI6OmhpZGVGaW5kSW5kaWNhdG9yKCkKICAgICBpZiAoIW1faXNT
aG93aW5nRmluZEluZGljYXRvcikKICAgICAgICAgcmV0dXJuOwogCi0gICAgU2hhcmVhYmxlQml0
bWFwOjpIYW5kbGUgaGFuZGxlOwotICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6V2ViUGFn
ZVByb3h5OjpTZXRUZXh0SW5kaWNhdG9yKEZsb2F0UmVjdCgpLCBWZWN0b3I8RmxvYXRSZWN0Pigp
LCBtX3dlYlBhZ2UtPmNvcmVQYWdlKCktPmRldmljZVNjYWxlRmFjdG9yKCksIGhhbmRsZSwgZmFs
c2UsIHRydWUpKTsKKyAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6
U2V0VGV4dEluZGljYXRvcihUZXh0SW5kaWNhdG9yKCksIGZhbHNlLCB0cnVlKSk7CiAgICAgbV9p
c1Nob3dpbmdGaW5kSW5kaWNhdG9yID0gZmFsc2U7CiAgICAgbV9mb3VuZFN0cmluZ01hdGNoSW5k
ZXggPSAtMTsKICAgICBkaWRIaWRlRmluZEluZGljYXRvcigpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkZyYW1lLmNwcCBiL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJGcmFtZS5jcHAKaW5kZXggNTRlMGI3ZC4uM2VmYmM5NCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkZyYW1lLmNw
cAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViRnJhbWUuY3BwCkBA
IC01MCwxMiArNTAsMTQgQEAKICNpbmNsdWRlIDxXZWJDb3JlL0RvY3VtZW50TG9hZGVyLmg+CiAj
aW5jbHVkZSA8V2ViQ29yZS9FdmVudEhhbmRsZXIuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0ZyYW1l
Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9GcmFtZVNuYXBzaG90dGluZy5oPgogI2luY2x1ZGUgPFdl
YkNvcmUvRnJhbWVWaWV3Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9IVE1MRm9ybUVsZW1lbnQuaD4K
ICNpbmNsdWRlIDxXZWJDb3JlL0hUTUxGcmFtZU93bmVyRWxlbWVudC5oPgogI2luY2x1ZGUgPFdl
YkNvcmUvSFRNTElucHV0RWxlbWVudC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvSFRNTE5hbWVzLmg+
CiAjaW5jbHVkZSA8V2ViQ29yZS9IVE1MVGV4dEFyZWFFbGVtZW50Lmg+CisjaW5jbHVkZSA8V2Vi
Q29yZS9JbWFnZUJ1ZmZlci5oPgogI2luY2x1ZGUgPFdlYkNvcmUvSlNDU1NTdHlsZURlY2xhcmF0
aW9uLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9KU0VsZW1lbnQuaD4KICNpbmNsdWRlIDxXZWJDb3Jl
L0pTUmFuZ2UuaD4KQEAgLTc4MSw1ICs3ODMsMjUgQEAgUmV0YWluUHRyPENGRGF0YVJlZj4gV2Vi
RnJhbWU6OndlYkFyY2hpdmVEYXRhKEZyYW1lRmlsdGVyRnVuY3Rpb24gY2FsbGJhY2ssIHZvaWQK
ICAgICByZXR1cm4gYXJjaGl2ZS0+cmF3RGF0YVJlcHJlc2VudGF0aW9uKCk7CiB9CiAjZW5kaWYK
KworUGFzc1JlZlB0cjxTaGFyZWFibGVCaXRtYXA+IFdlYkZyYW1lOjpjcmVhdGVTZWxlY3Rpb25T
bmFwc2hvdCgpCit7CisgICAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBzbmFwc2hvdCA9
IHNuYXBzaG90U2VsZWN0aW9uKCpjb3JlRnJhbWUoKSwgV2ViQ29yZTo6U25hcHNob3RPcHRpb25z
Rm9yY2VCbGFja1RleHQpOworICAgIGlmICghc25hcHNob3QpCisgICAgICAgIHJldHVybiBudWxs
cHRyOworCisgICAgUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4gc2hhcmVkU25hcHNob3QgPSBTaGFy
ZWFibGVCaXRtYXA6OmNyZWF0ZVNoYXJlYWJsZShzbmFwc2hvdC0+aW50ZXJuYWxTaXplKCksIFNo
YXJlYWJsZUJpdG1hcDo6U3VwcG9ydHNBbHBoYSk7CisgICAgaWYgKCFzaGFyZWRTbmFwc2hvdCkK
KyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGNvbnNp
ZGVyIHByb3ZpZGluZyBhIHdheSB0byB1c2Ugc3VicGl4ZWwgYW50aWFsaWFzaW5nIGZvciB0aGUg
c25hcHNob3QKKyAgICAvLyBpZiB3ZSdyZSBjb21wb3NpdGluZyB0aGlzIGltYWdlIG9udG8gYSBz
b2xpZCBjb2xvciAoZS5nLiB0aGUgbW9kZXJuIGZpbmQgaW5kaWNhdG9yIHN0eWxlKS4KKyAgICBh
dXRvIGdyYXBoaWNzQ29udGV4dCA9IHNoYXJlZFNuYXBzaG90LT5jcmVhdGVHcmFwaGljc0NvbnRl
eHQoKTsKKyAgICBmbG9hdCBkZXZpY2VTY2FsZUZhY3RvciA9IGNvcmVGcmFtZSgpLT5wYWdlKCkt
PmRldmljZVNjYWxlRmFjdG9yKCk7CisgICAgZ3JhcGhpY3NDb250ZXh0LT5zY2FsZShGbG9hdFNp
emUoZGV2aWNlU2NhbGVGYWN0b3IsIGRldmljZVNjYWxlRmFjdG9yKSk7CisgICAgZ3JhcGhpY3ND
b250ZXh0LT5kcmF3SW1hZ2VCdWZmZXIoc25hcHNob3QuZ2V0KCksIENvbG9yU3BhY2VEZXZpY2VS
R0IsIEZsb2F0UG9pbnQoKSk7CisKKyAgICByZXR1cm4gc2hhcmVkU25hcHNob3QucmVsZWFzZSgp
OworfQogICAgIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViRnJhbWUuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvV2ViUGFnZS9XZWJGcmFtZS5oCmluZGV4IGIxMTRiMmUuLjYwYzk0MzQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJGcmFtZS5oCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJGcmFtZS5oCkBAIC0yNyw2ICsyNyw3
IEBACiAjZGVmaW5lIFdlYkZyYW1lX2gKIAogI2luY2x1ZGUgIkFQSU9iamVjdC5oIgorI2luY2x1
ZGUgIlNoYXJlYWJsZUJpdG1hcC5oIgogI2luY2x1ZGUgIldLQmFzZS5oIgogI2luY2x1ZGUgIldl
YkZyYW1lTG9hZGVyQ2xpZW50LmgiCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNCYXNlLmg+
CkBAIC0xNDksNiArMTUwLDggQEAgcHVibGljOgogICAgIFJldGFpblB0cjxDRkRhdGFSZWY+IHdl
YkFyY2hpdmVEYXRhKEZyYW1lRmlsdGVyRnVuY3Rpb24sIHZvaWQqIGNvbnRleHQpOwogI2VuZGlm
CiAKKyAgICBQYXNzUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4gY3JlYXRlU2VsZWN0aW9uU25hcHNo
b3QoKTsKKwogcHJpdmF0ZToKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxXZWJGcmFtZT4gY3JlYXRl
KHN0ZDo6dW5pcXVlX3B0cjxXZWJGcmFtZUxvYWRlckNsaWVudD4pOwogICAgIFdlYkZyYW1lKHN0
ZDo6dW5pcXVlX3B0cjxXZWJGcmFtZUxvYWRlckNsaWVudD4pOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9XZWJQYWdlTWFjLm1tIGIvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9XZWJQYWdlTWFjLm1tCmluZGV4IDRiYjJlMjUu
LjgxOTZhMzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9t
YWMvV2ViUGFnZU1hYy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2Uv
bWFjL1dlYlBhZ2VNYWMubW0KQEAgLTEwNzQsNyArMTA3NCw3IEBAIFN0cmluZyBXZWJQYWdlOjpw
bGF0Zm9ybVVzZXJBZ2VudChjb25zdCBVUkwmKSBjb25zdAogICAgIHJldHVybiBTdHJpbmcoKTsK
IH0KIAotc3RhdGljIFJldGFpblB0cjxEREFjdGlvbkNvbnRleHQ+IHNjYW5Gb3JEYXRhRGV0ZWN0
ZWRJdGVtcyhjb25zdCBIaXRUZXN0UmVzdWx0JiBoaXRUZXN0UmVzdWx0LCBGbG9hdFJlY3QmIGFj
dGlvbkJvdW5kaW5nQm94KQorc3RhdGljIFJldGFpblB0cjxEREFjdGlvbkNvbnRleHQ+IHNjYW5G
b3JEYXRhRGV0ZWN0ZWRJdGVtcyhjb25zdCBIaXRUZXN0UmVzdWx0JiBoaXRUZXN0UmVzdWx0LCBG
bG9hdFJlY3QmIGRldGVjdGVkRGF0YUJvdW5kaW5nQm94LCBSZWZQdHI8UmFuZ2U+JiBkZXRlY3Rl
ZERhdGFSYW5nZSkKIHsKICAgICBOb2RlKiBub2RlID0gaGl0VGVzdFJlc3VsdC5pbm5lck5vblNo
YXJlZE5vZGUoKTsKICAgICBpZiAoIW5vZGUpCkBAIC0xMTI1LDExICsxMTI1LDMzIEBAIHN0YXRp
YyBSZXRhaW5QdHI8RERBY3Rpb25Db250ZXh0PiBzY2FuRm9yRGF0YURldGVjdGVkSXRlbXMoY29u
c3QgSGl0VGVzdFJlc3VsdCYKICAgICBWZWN0b3I8RmxvYXRRdWFkPiBxdWFkczsKICAgICBtYWlu
UmVzdWx0UmFuZ2UtPnRleHRRdWFkcyhxdWFkcyk7CiAgICAgaWYgKCFxdWFkcy5pc0VtcHR5KCkp
Ci0gICAgICAgIGFjdGlvbkJvdW5kaW5nQm94ID0gbWFpblJlc3VsdFJhbmdlLT5vd25lckRvY3Vt
ZW50KCkudmlldygpLT5jb250ZW50c1RvV2luZG93KHF1YWRzWzBdLmVuY2xvc2luZ0JvdW5kaW5n
Qm94KCkpOworICAgICAgICBkZXRlY3RlZERhdGFCb3VuZGluZ0JveCA9IG1haW5SZXN1bHRSYW5n
ZS0+b3duZXJEb2N1bWVudCgpLnZpZXcoKS0+Y29udGVudHNUb1dpbmRvdyhxdWFkc1swXS5lbmNs
b3NpbmdCb3VuZGluZ0JveCgpKTsKKworICAgIGRldGVjdGVkRGF0YVJhbmdlID0gbWFpblJlc3Vs
dFJhbmdlOwogCiAgICAgcmV0dXJuIGFjdGlvbkNvbnRleHQ7CiB9CiAKK3N0YXRpYyBUZXh0SW5k
aWNhdG9yIHRleHRJbmRpY2F0b3JGb3JSYW5nZShSYW5nZSogcmFuZ2UpCit7CisgICAgaWYgKCFy
YW5nZSkKKyAgICAgICAgcmV0dXJuIFRleHRJbmRpY2F0b3IoKTsKKworICAgIEZyYW1lKiBmcmFt
ZSA9IHJhbmdlLT5zdGFydENvbnRhaW5lcigpLT5kb2N1bWVudCgpLmZyYW1lKCk7CisKKyAgICBp
ZiAoIWZyYW1lKQorICAgICAgICByZXR1cm4gVGV4dEluZGljYXRvcigpOworCisgICAgVmlzaWJs
ZVNlbGVjdGlvbiBvbGRTZWxlY3Rpb24gPSBmcmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7
CisgICAgZnJhbWUtPnNlbGVjdGlvbigpLnNldFNlbGVjdGlvbihyYW5nZSk7CisKKyAgICBhdXRv
IGluZGljYXRvciA9IFRleHRJbmRpY2F0b3I6OmluZGljYXRvcldpdGhTZWxlY3Rpb25JbkZyYW1l
KCpXZWJGcmFtZTo6ZnJvbUNvcmVGcmFtZSgqZnJhbWUpKTsKKworICAgIGZyYW1lLT5zZWxlY3Rp
b24oKS5zZXRTZWxlY3Rpb24ob2xkU2VsZWN0aW9uKTsKKworICAgIHJldHVybiBpbmRpY2F0b3I7
Cit9CisKIHZvaWQgV2ViUGFnZTo6cGVyZm9ybUFjdGlvbk1lbnVIaXRUZXN0QXRMb2NhdGlvbihX
ZWJDb3JlOjpGbG9hdFBvaW50IGxvY2F0aW9uSW5WaWV3Q29vb3JkaW5hdGVzKQogewogICAgIGxh
eW91dElmTmVlZGVkKCk7CkBAIC0xMTYzLDkgKzExODUsMTMgQEAgdm9pZCBXZWJQYWdlOjpwZXJm
b3JtQWN0aW9uTWVudUhpdFRlc3RBdExvY2F0aW9uKFdlYkNvcmU6OkZsb2F0UG9pbnQgbG9jYXRp
b25JblYKIAogICAgIC8vIEZJWE1FOiBBdm9pZCBzY2FubmluZyBpZiB3ZSB3aWxsIGp1c3QgdGhy
b3cgYXdheSB0aGUgcmVzdWx0IChlLmcuIHdlJ3JlIG92ZXIgYSBsaW5rKS4KICAgICBpZiAoaGl0
VGVzdFJlc3VsdC5pbm5lck5vZGUoKSAmJiBoaXRUZXN0UmVzdWx0LmlubmVyTm9kZSgpLT5pc1Rl
eHROb2RlKCkpIHsKLSAgICAgICAgRmxvYXRSZWN0IGFjdGlvbkJvdW5kaW5nQm94OwotICAgICAg
ICBhY3Rpb25NZW51UmVzdWx0LmFjdGlvbkNvbnRleHQgPSBzY2FuRm9yRGF0YURldGVjdGVkSXRl
bXMoaGl0VGVzdFJlc3VsdCwgYWN0aW9uQm91bmRpbmdCb3gpOwotICAgICAgICBhY3Rpb25NZW51
UmVzdWx0LmFjdGlvbkJvdW5kaW5nQm94ID0gYWN0aW9uQm91bmRpbmdCb3g7CisgICAgICAgIEZs
b2F0UmVjdCBkZXRlY3RlZERhdGFCb3VuZGluZ0JveDsKKyAgICAgICAgUmVmUHRyPFJhbmdlPiBk
ZXRlY3RlZERhdGFSYW5nZTsKKyAgICAgICAgYWN0aW9uTWVudVJlc3VsdC5hY3Rpb25Db250ZXh0
ID0gc2NhbkZvckRhdGFEZXRlY3RlZEl0ZW1zKGhpdFRlc3RSZXN1bHQsIGRldGVjdGVkRGF0YUJv
dW5kaW5nQm94LCBkZXRlY3RlZERhdGFSYW5nZSk7CisgICAgICAgIGlmIChhY3Rpb25NZW51UmVz
dWx0LmFjdGlvbkNvbnRleHQpIHsKKyAgICAgICAgICAgIGFjdGlvbk1lbnVSZXN1bHQuZGV0ZWN0
ZWREYXRhQm91bmRpbmdCb3ggPSBkZXRlY3RlZERhdGFCb3VuZGluZ0JveDsKKyAgICAgICAgICAg
IGFjdGlvbk1lbnVSZXN1bHQuZGV0ZWN0ZWREYXRhVGV4dEluZGljYXRvciA9IHRleHRJbmRpY2F0
b3JGb3JSYW5nZShkZXRlY3RlZERhdGFSYW5nZS5nZXQoKSk7CisgICAgICAgIH0KICAgICB9CiAK
ICAgICBSZWZQdHI8QVBJOjpPYmplY3Q+IHVzZXJEYXRhOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>240903</attachid>
            <date>2014-11-03 20:10:01 -0800</date>
            <delta_ts>2014-11-04 10:40:44 -0800</delta_ts>
            <desc>patch</desc>
            <filename>dd-indicator-try-refd.diff</filename>
            <type>text/plain</type>
            <size>59949</size>
            <attacher name="Tim Horton">thorton</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBlNzYxNDg1Li5kOWQ4MzA1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQg
QEAKKzIwMTQtMTEtMDMgIFRpbSBIb3J0b24gIDx0aW1vdGh5X2hvcnRvbkBhcHBsZS5jb20+CisK
KyAgICAgICAgSW1wbGVtZW50IHllbGxvdyBoaWdobGlnaHQgb3ZlciBkYXRhIGRldGVjdGVkIGl0
ZW1zCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzgz
NDAKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzE4ODQwMTAyPgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogcGxhdGZvcm0vc3BpL21hYy9EYXRhRGV0
ZWN0b3JzU1BJLmg6CisgICAgICAgIEFkZCBjb21wbGV0aW9uSGFuZGxlciBTUEkuCisKIDIwMTQt
MTEtMDMgIEd5dXlvdW5nIEtpbSAgPGd5dXlvdW5nLmtpbUBzYW1zdW5nLmNvbT4KIAogICAgICAg
ICBNb3ZlIFdlYkNvcmUvYnJpZGdlIHRvIHN0ZDo6dW5pcXVlX3B0cgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vc3BpL21hYy9EYXRhRGV0ZWN0b3JzU1BJLmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9zcGkvbWFjL0RhdGFEZXRlY3RvcnNTUEkuaAppbmRleCBmNTI4MjUw
Li5lNmQwODU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9zcGkvbWFjL0Rh
dGFEZXRlY3RvcnNTUEkuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9zcGkvbWFjL0Rh
dGFEZXRlY3RvcnNTUEkuaApAQCAtNjYsNiArNjYsNyBAQCBTT0ZUX0xJTktfQ0xBU1MoRGF0YURl
dGVjdG9ycywgRERBY3Rpb25zTWFuYWdlcikKIEBwcm9wZXJ0eSBOU1JlY3QgaGlnaGxpZ2h0RnJh
bWU7CiBAcHJvcGVydHkgKHJldGFpbikgTlNBcnJheSAqYWxsUmVzdWx0czsKIEBwcm9wZXJ0eSAo
cmV0YWluKSBfX2F0dHJpYnV0ZV9fKChOU09iamVjdCkpIEREUmVzdWx0UmVmIG1haW5SZXN1bHQ7
CitAcHJvcGVydHkgKGNvcHkpIHZvaWQgKF5jb21wbGV0aW9uSGFuZGxlcikodm9pZCk7CiAKIEBl
bmQKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktp
dDIvQ2hhbmdlTG9nCmluZGV4IDc0MjQwOTQuLjU4Mjc3MDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQyL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKQEAgLTEsMyAr
MSw4NCBAQAorMjAxNC0xMS0wMyAgVGltIEhvcnRvbiAgPHRpbW90aHlfaG9ydG9uQGFwcGxlLmNv
bT4KKworICAgICAgICBJbXBsZW1lbnQgeWVsbG93IGhpZ2hsaWdodCBvdmVyIGRhdGEgZGV0ZWN0
ZWQgaXRlbXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTEzODM0MAorICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTg4NDAxMDI+CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBTaGFyZWQvVGV4dEluZGljYXRv
ci5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvVGV4dEluZGljYXRv
ci5jcHAuCisgICAgICAgICogU2hhcmVkL1RleHRJbmRpY2F0b3IuaDogUmVuYW1lZCBmcm9tIFNv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9UZXh0SW5kaWNhdG9yLmguCisgICAgICAgIE1vdmUgVGV4
dEluZGljYXRvciB0byBTaGFyZWQuCisgICAgICAgIE1vdmUgYWxsIG9mIHRoZSBtZW1iZXJzIHRv
IGEgRGF0YSBzdHJ1Y3QuCisgICAgICAgIEltcGxlbWVudCBlbmNvZGUvZGVjb2RlIGZvciBUZXh0
SW5kaWNhdG9yOjpEYXRhLCBzbyBpdCBjYW4gYmUgcGFzc2VkIGFzCisgICAgICAgIHRoZSBhcmd1
bWVudCB0byBTZXRUZXh0SW5kaWNhdG9yLCBhbmQgYWxzbyBhcyBhIGZpZWxkIG9uIEFjdGlvbk1l
bnVIaXRUZXN0UmVzdWx0LgorICAgICAgICBBZGQgJ2NyZWF0ZVdpdGhTZWxlY3Rpb25JbkZyYW1l
Jywgd2hpY2ggYnVpbGRzIGEgVGV4dEluZGljYXRvcgorICAgICAgICBmcm9tIHRoZSBzZWxlY3Rp
b24gaW4gdGhlIGdpdmVuIGZyYW1lLgorCisgICAgICAgICogU2hhcmVkL21hYy9BY3Rpb25NZW51
SGl0VGVzdFJlc3VsdC5oOgorICAgICAgICAqIFNoYXJlZC9tYWMvQWN0aW9uTWVudUhpdFRlc3RS
ZXN1bHQubW06CisgICAgICAgIChXZWJLaXQ6OkFjdGlvbk1lbnVIaXRUZXN0UmVzdWx0OjplbmNv
ZGUpOgorICAgICAgICAoV2ViS2l0OjpBY3Rpb25NZW51SGl0VGVzdFJlc3VsdDo6ZGVjb2RlKToK
KyAgICAgICAgUmVuYW1lIGFjdGlvbkJvdW5kaW5nQm94IHRvIGRldGVjdGVkRGF0YUJvdW5kaW5n
Qm94LgorICAgICAgICBTdG9yZS9lbmNvZGUvZGVjb2RlIGRldGVjdGVkRGF0YVRleHRJbmRpY2F0
b3IuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcDoKKyAgICAgICAgKFdl
YktpdDo6V2ViUGFnZVByb3h5OjpzZXRUZXh0SW5kaWNhdG9yKToKKyAgICAgICAgKiBVSVByb2Nl
c3MvV2ViUGFnZVByb3h5Lmg6CisgICAgICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5tZXNz
YWdlcy5pbjoKKyAgICAgICAgQ3JlYXRlIGEgVGV4dEluZGljYXRvciBmcm9tIHRoZSBUZXh0SW5k
aWNhdG9yOjpEYXRhLgorICAgICAgICBBZGQgYW4gZXhwbGljaXQgQ2xlYXJUZXh0SW5kaWNhdG9y
IG1lc3NhZ2UgaW5zdGVhZCBvZiBzZW5kaW5nIGVtcHR5IERhdGEuCisgICAgICAgIAorICAgICAg
ICAqIFVJUHJvY2Vzcy9tYWMvV0tBY3Rpb25NZW51Q29udHJvbGxlci5oOgorICAgICAgICAqIFVJ
UHJvY2Vzcy9tYWMvV0tBY3Rpb25NZW51Q29udHJvbGxlci5tbToKKyAgICAgICAgKC1bV0tBY3Rp
b25NZW51Q29udHJvbGxlciBwcmVwYXJlRm9yTWVudTp3aXRoRXZlbnQ6XSk6CisgICAgICAgIElm
IHRoZSB0ZXh0IGluZGljYXRvciBpcyB1cCB3aGVuIHByZXBhcmluZyBmb3IgYSBuZXcgbWVudSBp
bnZvY2F0aW9uLCBoaWRlIGl0LgorCisgICAgICAgICgtW1dLQWN0aW9uTWVudUNvbnRyb2xsZXIg
d2lsbE9wZW5NZW51OndpdGhFdmVudDpdKToKKyAgICAgICAgU2hvdyB0aGUgdGV4dCBpbmRpY2F0
b3Igd2hlbiB0aGUgbWVudSBvcGVucywgZm9yIGRhdGEgZGV0ZWN0ZWQgaXRlbXMuCisKKyAgICAg
ICAgKC1bV0tBY3Rpb25NZW51Q29udHJvbGxlciBkaWRDbG9zZU1lbnU6d2l0aEV2ZW50Ol0pOgor
ICAgICAgICBIaWRlIHRoZSB0ZXh0IGluZGljYXRvciB3aGVuIHRoZSBtZW51IGNsb3NlcywgdW5s
ZXNzIHdlIG9ubHkgaGFkIG9uZSBpdGVtLgorICAgICAgICBUaGVuLCB3ZSdsbCBoaWRlIGl0IGlu
IHRoZSBEREFjdGlvbkNvbnRleHQgY29tcGxldGlvbkhhbmRsZXIgYmxvY2suCisgICAgICAgIAor
ICAgICAgICAoLVtXS0FjdGlvbk1lbnVDb250cm9sbGVyIF9zaG93VGV4dEluZGljYXRvcl0pOgor
ICAgICAgICAoLVtXS0FjdGlvbk1lbnVDb250cm9sbGVyIF9oaWRlVGV4dEluZGljYXRvcl0pOgor
ICAgICAgICBBZGRlZC4gU2hvdyBhbmQgaGlkZSB0aGUgdGV4dCBpbmRpY2F0b3IgYmFzZWQgb24g
dGhlIFRleHRJbmRpY2F0b3IKKyAgICAgICAgZGF0YSBpbmNsdWRlZCBpbiB0aGUgYWN0aW9uIG1l
bnUgaGl0IHRlc3QgcmVzdWx0LgorCisgICAgICAgICgtW1dLQWN0aW9uTWVudUNvbnRyb2xsZXIg
X2RlZmF1bHRNZW51SXRlbXNGb3JEYXRhRGV0ZWN0ZWRUZXh0XSk6CisgICAgICAgIEhpZGUgdGhl
IHRleHQgaW5kaWNhdG9yIHdoZW4gdGhlIGRhdGEgZGV0ZWN0b3IgcG9wb3ZlciBjb21wbGV0ZXMu
CisKKyAgICAgICAgKiBXZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAg
ICogV2ViUHJvY2Vzcy9XZWJQYWdlL0ZpbmRDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYktp
dDo6RmluZENvbnRyb2xsZXI6OmdldEltYWdlRm9yRmluZE1hdGNoKToKKyAgICAgICAgTWFrZSB1
c2Ugb2YgdGhlIG5ld2x5LW1vdmVkIGNyZWF0ZVNlbGVjdGlvblNuYXBzaG90LgorCisgICAgICAg
IChXZWJLaXQ6OkZpbmRDb250cm9sbGVyOjp1cGRhdGVGaW5kSW5kaWNhdG9yKToKKyAgICAgICAg
TWFrZSB1c2Ugb2YgVGV4dEluZGljYXRvcjo6Y3JlYXRlV2l0aFNlbGVjdGlvbkluRnJhbWUsIHdo
aWNoIGFsbG93cworICAgICAgICB1cyB0byBzaGFyZSB0aGlzIGNvZGUgZm9yIGJ1aWxkaW5nIGEg
VGV4dEluZGljYXRvciB3aXRoIG90aGVyIGNhbGxlcnMuCisKKyAgICAgICAgKFdlYktpdDo6Rmlu
ZENvbnRyb2xsZXI6OmhpZGVGaW5kSW5kaWNhdG9yKToKKworICAgICAgICAoV2ViS2l0OjpnZXRG
aW5kSW5kaWNhdG9yQml0bWFwKTogRGVsZXRlZC4KKyAgICAgICAgTW92ZSBnZXRGaW5kSW5kaWNh
dG9yQml0bWFwIHRvIFdlYkZyYW1lOjpjcmVhdGVTZWxlY3Rpb25TbmFwc2hvdC4KKworICAgICAg
ICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJGcmFtZS5jcHA6CisgICAgICAgIChXZWJLaXQ6Oldl
YkZyYW1lOjpjcmVhdGVTZWxlY3Rpb25TbmFwc2hvdCk6CisgICAgICAgIE1vdmVkIGZyb20gRmlu
ZENvbnRyb2xsZXIncyBnZXRGaW5kSW5kaWNhdG9yQml0bWFwLgorICAgICAgICBOb3cgcmV0dXJu
cyBhIFNoYXJlYWJsZUJpdG1hcCBpbnN0ZWFkIG9mIGdvaW5nIGFoZWFkIGFuZCBtYWtpbmcgYSBI
YW5kbGUuCisKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViRnJhbWUuaDoKKyAgICAg
ICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW06CisgICAgICAgIChXZWJL
aXQ6OnNjYW5Gb3JEYXRhRGV0ZWN0ZWRJdGVtcyk6CisgICAgICAgIChXZWJLaXQ6OnRleHRJbmRp
Y2F0b3JGb3JSYW5nZSk6CisgICAgICAgIFRlbXBvcmFyaWx5IGNoYW5nZSB0aGUgc2VsZWN0aW9u
IHRvIHRoZSBnaXZlbiByYW5nZSwgdGhlbiB1c2UKKyAgICAgICAgVGV4dEluZGljYXRvcjo6aW5k
aWNhdG9yV2l0aFNlbGVjdGlvbkluRnJhbWUgdG8gYWNxdWlyZSBhIFRleHRJbmRpY2F0b3IsCisg
ICAgICAgIHRoZW4gcmVzZXQgdGhlIHNlbGVjdGlvbi4KKworICAgICAgICAoV2ViS2l0OjpXZWJQ
YWdlOjpwZXJmb3JtQWN0aW9uTWVudUhpdFRlc3RBdExvY2F0aW9uKToKKyAgICAgICAgQ3JlYXRl
IGEgVGV4dEluZGljYXRvciBmcm9tIHRoZSBkYXRhIGRldGVjdGVkIHJhbmdlLgorCiAyMDE0LTEx
LTAzICBCZXRoIERha2luICA8YmRha2luQGFwcGxlLmNvbT4KIAogICAgICAgICBJbXBsZW1lbnQg
YWN0aW9uIG1lbnVzIGZvciBlZGl0YWJsZSB0ZXh0IHdpdGggc3BlbGxpbmcgc3VnZ2VzdGlvbnMK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9UZXh0SW5kaWNhdG9yLmNwcCBiL1Nv
dXJjZS9XZWJLaXQyL1NoYXJlZC9UZXh0SW5kaWNhdG9yLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwLi5lOGFmZjVlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktp
dDIvU2hhcmVkL1RleHRJbmRpY2F0b3IuY3BwCkBAIC0wLDAgKzEsMzUwIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRleHRJbmRpY2F0b3IuaCIKKworI2lu
Y2x1ZGUgIkFyZ3VtZW50Q29kZXJzQ0YuaCIKKyNpbmNsdWRlICJBcmd1bWVudERlY29kZXIuaCIK
KyNpbmNsdWRlICJBcmd1bWVudEVuY29kZXIuaCIKKyNpbmNsdWRlICJTaGFyZWFibGVCaXRtYXAu
aCIKKyNpbmNsdWRlICJXZWJDb3JlQXJndW1lbnRDb2RlcnMuaCIKKyNpbmNsdWRlICJXZWJGcmFt
ZS5oIgorI2luY2x1ZGUgIldlYlBhZ2UuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0ZyYW1lLmg+Cisj
aW5jbHVkZSA8V2ViQ29yZS9GcmFtZVNlbGVjdGlvbi5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRnJh
bWVWaWV3Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9HZW9tZXRyeVV0aWxpdGllcy5oPgorI2luY2x1
ZGUgPFdlYkNvcmUvR3JhZGllbnQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzQ29udGV4
dC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvSW50UmVjdC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvUGF0
aC5oPgorCisjaWYgUExBVEZPUk0oTUFDKSAmJiBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJ
UkVEIDwgMTAxMDAwCisjZGVmaW5lIEVOQUJMRV9MRUdBQ1lfVEVYVF9JTkRJQ0FUT1JfU1RZTEUg
MQorI2Vsc2UKKyNkZWZpbmUgRU5BQkxFX0xFR0FDWV9URVhUX0lORElDQVRPUl9TVFlMRSAwCisj
ZW5kaWYKKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKKyNpZiBFTkFCTEUoTEVHQUNZX1RF
WFRfSU5ESUNBVE9SX1NUWUxFKQorc3RhdGljIGNvbnN0IGZsb2F0IGNvcm5lclJhZGl1cyA9IDMu
MDsKKworc3RhdGljIGNvbnN0IGZsb2F0IHNoYWRvd09mZnNldFggPSAwLjA7CitzdGF0aWMgY29u
c3QgZmxvYXQgc2hhZG93T2Zmc2V0WSA9IDEuMDsKK3N0YXRpYyBjb25zdCBmbG9hdCBzaGFkb3dC
bHVyUmFkaXVzID0gMy4wOworCitzdGF0aWMgY29uc3QgaW50IHNoYWRvd1JlZCA9IDA7CitzdGF0
aWMgY29uc3QgaW50IHNoYWRvd0dyZWVuID0gMDsKK3N0YXRpYyBjb25zdCBpbnQgc2hhZG93Qmx1
ZSA9IDA7CitzdGF0aWMgY29uc3QgaW50IHNoYWRvd0FscGhhID0gMjA0OworCitzdGF0aWMgY29u
c3QgZmxvYXQgbGlnaHRCb3JkZXJUaGlja25lc3MgPSAxLjA7CitzdGF0aWMgY29uc3QgZmxvYXQg
aG9yaXpvbnRhbFBhZGRpbmdJbnNpZGVMaWdodEJvcmRlciA9IDMuMDsKK3N0YXRpYyBjb25zdCBm
bG9hdCB2ZXJ0aWNhbFBhZGRpbmdJbnNpZGVMaWdodEJvcmRlciA9IDEuMDsKKworc3RhdGljIGNv
bnN0IGZsb2F0IGhvcml6b250YWxCb3JkZXJJbnNpZGVTaGFkb3cgPSBsaWdodEJvcmRlclRoaWNr
bmVzcyArIGhvcml6b250YWxQYWRkaW5nSW5zaWRlTGlnaHRCb3JkZXI7CitzdGF0aWMgY29uc3Qg
ZmxvYXQgdmVydGljYWxCb3JkZXJJbnNpZGVTaGFkb3cgPSBsaWdodEJvcmRlclRoaWNrbmVzcyAr
IHZlcnRpY2FsUGFkZGluZ0luc2lkZUxpZ2h0Qm9yZGVyOworCitzdGF0aWMgY29uc3QgZmxvYXQg
bGVmdEJvcmRlclRoaWNrbmVzcyA9IGhvcml6b250YWxCb3JkZXJJbnNpZGVTaGFkb3cgKyBzaGFk
b3dPZmZzZXRYICsgc2hhZG93Qmx1clJhZGl1cyAvIDIuMDsKK3N0YXRpYyBjb25zdCBmbG9hdCB0
b3BCb3JkZXJUaGlja25lc3MgPSB2ZXJ0aWNhbEJvcmRlckluc2lkZVNoYWRvdyAtIHNoYWRvd09m
ZnNldFkgKyBzaGFkb3dCbHVyUmFkaXVzIC8gMi4wOworc3RhdGljIGNvbnN0IGZsb2F0IHJpZ2h0
Qm9yZGVyVGhpY2tuZXNzID0gaG9yaXpvbnRhbEJvcmRlckluc2lkZVNoYWRvdyAtIHNoYWRvd09m
ZnNldFggKyBzaGFkb3dCbHVyUmFkaXVzIC8gMi4wOworc3RhdGljIGNvbnN0IGZsb2F0IGJvdHRv
bUJvcmRlclRoaWNrbmVzcyA9IHZlcnRpY2FsQm9yZGVySW5zaWRlU2hhZG93ICsgc2hhZG93T2Zm
c2V0WSArIHNoYWRvd0JsdXJSYWRpdXMgLyAyLjA7CisKK3N0YXRpYyBjb25zdCBmbG9hdCBob3Jp
em9udGFsT3V0c2V0VG9DZW50ZXJPZkxpZ2h0Qm9yZGVyID0gaG9yaXpvbnRhbEJvcmRlckluc2lk
ZVNoYWRvdyAtIGxpZ2h0Qm9yZGVyVGhpY2tuZXNzIC8gMi4wOworc3RhdGljIGNvbnN0IGZsb2F0
IHZlcnRpY2FsT3V0c2V0VG9DZW50ZXJPZkxpZ2h0Qm9yZGVyID0gdmVydGljYWxCb3JkZXJJbnNp
ZGVTaGFkb3cgLSBsaWdodEJvcmRlclRoaWNrbmVzcyAvIDIuMDsKKworc3RhdGljIGNvbnN0IGlu
dCBsaWdodEJvcmRlclJlZCA9IDI0NTsKK3N0YXRpYyBjb25zdCBpbnQgbGlnaHRCb3JkZXJHcmVl
biA9IDIzMDsKK3N0YXRpYyBjb25zdCBpbnQgbGlnaHRCb3JkZXJCbHVlID0gMDsKK3N0YXRpYyBj
b25zdCBpbnQgbGlnaHRCb3JkZXJBbHBoYSA9IDI1NTsKKworc3RhdGljIGNvbnN0IGludCBncmFk
aWVudERhcmtSZWQgPSAyMzc7CitzdGF0aWMgY29uc3QgaW50IGdyYWRpZW50RGFya0dyZWVuID0g
MjA0Oworc3RhdGljIGNvbnN0IGludCBncmFkaWVudERhcmtCbHVlID0gMDsKK3N0YXRpYyBjb25z
dCBpbnQgZ3JhZGllbnREYXJrQWxwaGEgPSAyNTU7CisKK3N0YXRpYyBjb25zdCBpbnQgZ3JhZGll
bnRMaWdodFJlZCA9IDI0MjsKK3N0YXRpYyBjb25zdCBpbnQgZ3JhZGllbnRMaWdodEdyZWVuID0g
MjM5Oworc3RhdGljIGNvbnN0IGludCBncmFkaWVudExpZ2h0Qmx1ZSA9IDA7CitzdGF0aWMgY29u
c3QgaW50IGdyYWRpZW50TGlnaHRBbHBoYSA9IDI1NTsKKyNlbHNlCitjb25zdCBmbG9hdCBmbGF0
U3R5bGVIb3Jpem9udGFsQm9yZGVyID0gMjsKK2NvbnN0IGZsb2F0IGZsYXRTdHlsZVZlcnRpY2Fs
Qm9yZGVyID0gMTsKK2NvbnN0IGZsb2F0IGZsYXRTaGFkb3dPZmZzZXRYID0gMDsKK2NvbnN0IGZs
b2F0IGZsYXRTaGFkb3dPZmZzZXRZID0gNTsKK2NvbnN0IGZsb2F0IGZsYXRTaGFkb3dCbHVyUmFk
aXVzID0gMjU7Citjb25zdCBmbG9hdCBmbGF0UmltU2hhZG93Qmx1clJhZGl1cyA9IDI7CisjZW5k
aWYKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK3N0YXRpYyBGbG9hdFJlY3QgaW5mbGF0ZVJlY3Qo
Y29uc3QgRmxvYXRSZWN0JiByZWN0LCBmbG9hdCBpbmZsYXRlWCwgZmxvYXQgaW5mbGF0ZVkpCit7
CisgICAgRmxvYXRSZWN0IGluZmxhdGVkUmVjdCA9IHJlY3Q7CisgICAgaW5mbGF0ZWRSZWN0Lmlu
ZmxhdGVYKGluZmxhdGVYKTsKKyAgICBpbmZsYXRlZFJlY3QuaW5mbGF0ZVkoaW5mbGF0ZVkpOwor
ICAgIHJldHVybiBpbmZsYXRlZFJlY3Q7Cit9CisKK3N0YXRpYyBGbG9hdFJlY3Qgb3V0c2V0SW5k
aWNhdG9yUmVjdEluY2x1ZGluZ1NoYWRvdyhjb25zdCBGbG9hdFJlY3QgcmVjdCkKK3sKKyNpZiBF
TkFCTEUoTEVHQUNZX1RFWFRfSU5ESUNBVE9SX1NUWUxFKQorICAgIEZsb2F0UmVjdCBvdXRzZXRS
ZWN0ID0gcmVjdDsKKyAgICBvdXRzZXRSZWN0Lm1vdmUoLWxlZnRCb3JkZXJUaGlja25lc3MsIC10
b3BCb3JkZXJUaGlja25lc3MpOworICAgIG91dHNldFJlY3QuZXhwYW5kKGxlZnRCb3JkZXJUaGlj
a25lc3MgKyByaWdodEJvcmRlclRoaWNrbmVzcywgdG9wQm9yZGVyVGhpY2tuZXNzICsgYm90dG9t
Qm9yZGVyVGhpY2tuZXNzKTsKKyAgICByZXR1cm4gb3V0c2V0UmVjdDsKKyNlbHNlCisgICAgcmV0
dXJuIGluZmxhdGVSZWN0KHJlY3QsIGZsYXRTaGFkb3dCbHVyUmFkaXVzICsgZmxhdFN0eWxlSG9y
aXpvbnRhbEJvcmRlciwgZmxhdFNoYWRvd0JsdXJSYWRpdXMgKyBmbGF0U3R5bGVWZXJ0aWNhbEJv
cmRlcik7CisjZW5kaWYKK30KKworc3RhdGljIGJvb2wgdGV4dEluZGljYXRvcnNGb3JUZXh0UmVj
dHNPdmVybGFwKGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiB0ZXh0UmVjdHMpCit7CisgICAgc2l6
ZV90IGNvdW50ID0gdGV4dFJlY3RzLnNpemUoKTsKKyAgICBpZiAoY291bnQgPD0gMSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworCisgICAgVmVjdG9yPEZsb2F0UmVjdD4gaW5kaWNhdG9yUmVjdHM7
CisgICAgaW5kaWNhdG9yUmVjdHMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShjb3VudCk7CisKKyAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKKyAgICAgICAgRmxvYXRSZWN0
IGluZGljYXRvclJlY3QgPSBvdXRzZXRJbmRpY2F0b3JSZWN0SW5jbHVkaW5nU2hhZG93KHRleHRS
ZWN0c1tpXSk7CisKKyAgICAgICAgZm9yIChzaXplX3QgaiA9IGluZGljYXRvclJlY3RzLnNpemUo
KTsgajsgKSB7CisgICAgICAgICAgICAtLWo7CisgICAgICAgICAgICBpZiAoaW5kaWNhdG9yUmVj
dC5pbnRlcnNlY3RzKGluZGljYXRvclJlY3RzW2pdKSkKKyAgICAgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICAgICAgfQorCisgICAgICAgIGluZGljYXRvclJlY3RzLnVuY2hlY2tlZEFwcGVu
ZChpbmRpY2F0b3JSZWN0KTsKKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK1Bhc3NS
ZWZQdHI8VGV4dEluZGljYXRvcj4gVGV4dEluZGljYXRvcjo6Y3JlYXRlKGNvbnN0IFdlYkNvcmU6
OkZsb2F0UmVjdCYgc2VsZWN0aW9uUmVjdEluV2luZG93Q29vcmRpbmF0ZXMsIGNvbnN0IFZlY3Rv
cjxXZWJDb3JlOjpGbG9hdFJlY3Q+JiB0ZXh0UmVjdHNJblNlbGVjdGlvblJlY3RDb29yZGluYXRl
cywgZmxvYXQgY29udGVudEltYWdlU2NhbGVGYWN0b3IsIFBhc3NSZWZQdHI8U2hhcmVhYmxlQml0
bWFwPiBjb250ZW50SW1hZ2UpCit7CisgICAgVGV4dEluZGljYXRvcjo6RGF0YSBkYXRhOworICAg
IGRhdGEuc2VsZWN0aW9uUmVjdEluV2luZG93Q29vcmRpbmF0ZXMgPSBzZWxlY3Rpb25SZWN0SW5X
aW5kb3dDb29yZGluYXRlczsKKyAgICBkYXRhLnRleHRSZWN0c0luU2VsZWN0aW9uUmVjdENvb3Jk
aW5hdGVzID0gdGV4dFJlY3RzSW5TZWxlY3Rpb25SZWN0Q29vcmRpbmF0ZXM7CisgICAgZGF0YS5j
b250ZW50SW1hZ2VTY2FsZUZhY3RvciA9IGNvbnRlbnRJbWFnZVNjYWxlRmFjdG9yOworICAgIGRh
dGEuY29udGVudEltYWdlID0gY29udGVudEltYWdlOworCisgICAgcmV0dXJuIFRleHRJbmRpY2F0
b3I6OmNyZWF0ZShkYXRhKTsKK30KKworUGFzc1JlZlB0cjxUZXh0SW5kaWNhdG9yPiBUZXh0SW5k
aWNhdG9yOjpjcmVhdGUoY29uc3QgVGV4dEluZGljYXRvcjo6RGF0YSYgZGF0YSkKK3sKKyAgICBy
ZXR1cm4gYWRvcHRSZWYobmV3IFRleHRJbmRpY2F0b3IoZGF0YSkpOworfQorCitQYXNzUmVmUHRy
PFRleHRJbmRpY2F0b3I+IFRleHRJbmRpY2F0b3I6OmNyZWF0ZVdpdGhTZWxlY3Rpb25JbkZyYW1l
KFdlYkZyYW1lJiBmcmFtZSkKK3sKKyAgICBGcmFtZSYgY29yZUZyYW1lID0gKmZyYW1lLmNvcmVG
cmFtZSgpOworICAgIEludFJlY3Qgc2VsZWN0aW9uUmVjdCA9IGVuY2xvc2luZ0ludFJlY3QoY29y
ZUZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbkJvdW5kcygpKTsKKyAgICBSZWZQdHI8U2hhcmVh
YmxlQml0bWFwPiBpbmRpY2F0b3JCaXRtYXAgPSBmcmFtZS5jcmVhdGVTZWxlY3Rpb25TbmFwc2hv
dCgpOworICAgIGlmICghaW5kaWNhdG9yQml0bWFwKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KworICAgIC8vIFdlIHdhbnQgdGhlIHNlbGVjdGlvbiByZWN0IGluIHdpbmRvdyBjb29yZGluYXRl
cy4KKyAgICBJbnRSZWN0IHNlbGVjdGlvblJlY3RJbldpbmRvd0Nvb3JkaW5hdGVzID0gY29yZUZy
YW1lLnZpZXcoKS0+Y29udGVudHNUb1dpbmRvdyhzZWxlY3Rpb25SZWN0KTsKKworICAgIFZlY3Rv
cjxGbG9hdFJlY3Q+IHRleHRSZWN0czsKKyAgICBjb3JlRnJhbWUuc2VsZWN0aW9uKCkuZ2V0Q2xp
cHBlZFZpc2libGVUZXh0UmVjdGFuZ2xlcyh0ZXh0UmVjdHMpOworCisgICAgLy8gV2Ugd2FudCB0
aGUgdGV4dCByZWN0cyBpbiBzZWxlY3Rpb24gcmVjdCBjb29yZGluYXRlcy4KKyAgICBWZWN0b3I8
RmxvYXRSZWN0PiB0ZXh0UmVjdHNJblNlbGVjdGlvblJlY3RDb29yZGluYXRlczsKKworICAgIGZv
ciAoY29uc3QgRmxvYXRSZWN0JiB0ZXh0UmVjdCA6IHRleHRSZWN0cykgeworICAgICAgICBJbnRS
ZWN0IHRleHRSZWN0SW5TZWxlY3Rpb25SZWN0Q29vcmRpbmF0ZXMgPSBjb3JlRnJhbWUudmlldygp
LT5jb250ZW50c1RvV2luZG93KGVuY2xvc2luZ0ludFJlY3QodGV4dFJlY3QpKTsKKyAgICAgICAg
dGV4dFJlY3RJblNlbGVjdGlvblJlY3RDb29yZGluYXRlcy5tb3ZlKC1zZWxlY3Rpb25SZWN0SW5X
aW5kb3dDb29yZGluYXRlcy54KCksIC1zZWxlY3Rpb25SZWN0SW5XaW5kb3dDb29yZGluYXRlcy55
KCkpOworICAgICAgICB0ZXh0UmVjdHNJblNlbGVjdGlvblJlY3RDb29yZGluYXRlcy5hcHBlbmQo
dGV4dFJlY3RJblNlbGVjdGlvblJlY3RDb29yZGluYXRlcyk7CisgICAgfQorCisgICAgcmV0dXJu
IFRleHRJbmRpY2F0b3I6OmNyZWF0ZShzZWxlY3Rpb25SZWN0SW5XaW5kb3dDb29yZGluYXRlcywg
dGV4dFJlY3RzSW5TZWxlY3Rpb25SZWN0Q29vcmRpbmF0ZXMsIGZyYW1lLnBhZ2UoKS0+ZGV2aWNl
U2NhbGVGYWN0b3IoKSwgaW5kaWNhdG9yQml0bWFwKTsKK30KKworVGV4dEluZGljYXRvcjo6VGV4
dEluZGljYXRvcihjb25zdCBUZXh0SW5kaWNhdG9yOjpEYXRhJiBkYXRhKQorICAgIDogbV9kYXRh
KGRhdGEpCit7CisgICAgQVNTRVJUKG1fZGF0YS5jb250ZW50SW1hZ2VTY2FsZUZhY3RvciAhPSAx
IHx8IG1fZGF0YS5jb250ZW50SW1hZ2UtPnNpemUoKSA9PSBlbmNsb3NpbmdJbnRSZWN0KG1fZGF0
YS5zZWxlY3Rpb25SZWN0SW5XaW5kb3dDb29yZGluYXRlcykuc2l6ZSgpKTsKKworICAgIGlmICh0
ZXh0SW5kaWNhdG9yc0ZvclRleHRSZWN0c092ZXJsYXAobV9kYXRhLnRleHRSZWN0c0luU2VsZWN0
aW9uUmVjdENvb3JkaW5hdGVzKSkgeworICAgICAgICBtX2RhdGEudGV4dFJlY3RzSW5TZWxlY3Rp
b25SZWN0Q29vcmRpbmF0ZXNbMF0gPSB1bmlvblJlY3QobV9kYXRhLnRleHRSZWN0c0luU2VsZWN0
aW9uUmVjdENvb3JkaW5hdGVzKTsKKyAgICAgICAgbV9kYXRhLnRleHRSZWN0c0luU2VsZWN0aW9u
UmVjdENvb3JkaW5hdGVzLnNocmluaygxKTsKKyAgICB9Cit9CisKK1RleHRJbmRpY2F0b3I6On5U
ZXh0SW5kaWNhdG9yKCkKK3sKK30KKworRmxvYXRSZWN0IFRleHRJbmRpY2F0b3I6OmZyYW1lUmVj
dCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG91dHNldEluZGljYXRvclJlY3RJbmNsdWRpbmdTaGFk
b3cobV9kYXRhLnNlbGVjdGlvblJlY3RJbldpbmRvd0Nvb3JkaW5hdGVzKTsKK30KKworI2lmIEVO
QUJMRShMRUdBQ1lfVEVYVF9JTkRJQ0FUT1JfU1RZTEUpCitzdGF0aWMgaW5saW5lIENvbG9yIGxp
Z2h0Qm9yZGVyQ29sb3IoKQoreworICAgIHJldHVybiBDb2xvcihsaWdodEJvcmRlclJlZCwgbGln
aHRCb3JkZXJHcmVlbiwgbGlnaHRCb3JkZXJCbHVlLCBsaWdodEJvcmRlckFscGhhKTsKK30KKwor
c3RhdGljIGlubGluZSBDb2xvciBzaGFkb3dDb2xvcigpCit7CisgICAgcmV0dXJuIENvbG9yKHNo
YWRvd1JlZCwgc2hhZG93R3JlZW4sIHNoYWRvd0JsdWUsIHNoYWRvd0FscGhhKTsKK30KKworc3Rh
dGljIGlubGluZSBDb2xvciBncmFkaWVudExpZ2h0Q29sb3IoKQoreworICAgIHJldHVybiBDb2xv
cihncmFkaWVudExpZ2h0UmVkLCBncmFkaWVudExpZ2h0R3JlZW4sIGdyYWRpZW50TGlnaHRCbHVl
LCBncmFkaWVudExpZ2h0QWxwaGEpOworfQorCitzdGF0aWMgaW5saW5lIENvbG9yIGdyYWRpZW50
RGFya0NvbG9yKCkKK3sKKyAgICByZXR1cm4gQ29sb3IoZ3JhZGllbnREYXJrUmVkLCBncmFkaWVu
dERhcmtHcmVlbiwgZ3JhZGllbnREYXJrQmx1ZSwgZ3JhZGllbnREYXJrQWxwaGEpOworfQorCitz
dGF0aWMgUGF0aCBwYXRoV2l0aFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcGF0aFJlY3Qs
IGZsb2F0IHJhZGl1cykKK3sKKyAgICBQYXRoIHBhdGg7CisgICAgcGF0aC5hZGRSb3VuZGVkUmVj
dChwYXRoUmVjdCwgRmxvYXRTaXplKHJhZGl1cywgcmFkaXVzKSk7CisKKyAgICByZXR1cm4gcGF0
aDsKK30KKyNlbHNlCitzdGF0aWMgaW5saW5lIENvbG9yIGZsYXRIaWdobGlnaHRDb2xvcigpCit7
CisgICAgcmV0dXJuIENvbG9yKDI1NSwgMjU1LCAwLCAyNTUpOworfQorCitzdGF0aWMgaW5saW5l
IENvbG9yIGZsYXRSaW1TaGFkb3dDb2xvcigpCit7CisgICAgcmV0dXJuIENvbG9yKDAsIDAsIDAs
IDM4KTsKK30KKworc3RhdGljIGlubGluZSBDb2xvciBmbGF0RHJvcFNoYWRvd0NvbG9yKCkKK3sK
KyAgICByZXR1cm4gQ29sb3IoMCwgMCwgMCwgNTEpOworfQorI2VuZGlmCisgICAgCit2b2lkIFRl
eHRJbmRpY2F0b3I6OmRyYXcoR3JhcGhpY3NDb250ZXh0JiBncmFwaGljc0NvbnRleHQsIGNvbnN0
IEludFJlY3QmIC8qZGlydHlSZWN0Ki8pCit7CisjaWYgRU5BQkxFKExFR0FDWV9URVhUX0lORElD
QVRPUl9TVFlMRSkKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fZGF0YS50ZXh0UmVjdHNJ
blNlbGVjdGlvblJlY3RDb29yZGluYXRlcy5zaXplKCk7ICsraSkgeworICAgICAgICBGbG9hdFJl
Y3QgdGV4dFJlY3QgPSBtX2RhdGEudGV4dFJlY3RzSW5TZWxlY3Rpb25SZWN0Q29vcmRpbmF0ZXNb
aV07CisgICAgICAgIHRleHRSZWN0Lm1vdmUobGVmdEJvcmRlclRoaWNrbmVzcywgdG9wQm9yZGVy
VGhpY2tuZXNzKTsKKworICAgICAgICBGbG9hdFJlY3Qgb3V0ZXJQYXRoUmVjdCA9IGluZmxhdGVS
ZWN0KHRleHRSZWN0LCBob3Jpem9udGFsT3V0c2V0VG9DZW50ZXJPZkxpZ2h0Qm9yZGVyLCB2ZXJ0
aWNhbE91dHNldFRvQ2VudGVyT2ZMaWdodEJvcmRlcik7CisgICAgICAgIEZsb2F0UmVjdCBpbm5l
clBhdGhSZWN0ID0gaW5mbGF0ZVJlY3QodGV4dFJlY3QsIGhvcml6b250YWxQYWRkaW5nSW5zaWRl
TGlnaHRCb3JkZXIsIHZlcnRpY2FsUGFkZGluZ0luc2lkZUxpZ2h0Qm9yZGVyKTsKKworICAgICAg
ICB7CisgICAgICAgICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoZ3Jh
cGhpY3NDb250ZXh0KTsKKyAgICAgICAgICAgIGdyYXBoaWNzQ29udGV4dC5zZXRTaGFkb3coRmxv
YXRTaXplKHNoYWRvd09mZnNldFgsIHNoYWRvd09mZnNldFkpLCBzaGFkb3dCbHVyUmFkaXVzLCBz
aGFkb3dDb2xvcigpLCBDb2xvclNwYWNlU1JHQik7CisgICAgICAgICAgICBncmFwaGljc0NvbnRl
eHQuc2V0RmlsbENvbG9yKGxpZ2h0Qm9yZGVyQ29sb3IoKSwgQ29sb3JTcGFjZURldmljZVJHQik7
CisgICAgICAgICAgICBncmFwaGljc0NvbnRleHQuZmlsbFBhdGgocGF0aFdpdGhSb3VuZGVkUmVj
dChvdXRlclBhdGhSZWN0LCBjb3JuZXJSYWRpdXMpKTsKKyAgICAgICAgfQorCisgICAgICAgIHsK
KyAgICAgICAgICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcihncmFwaGlj
c0NvbnRleHQpOworICAgICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LmNsaXAocGF0aFdpdGhSb3Vu
ZGVkUmVjdChpbm5lclBhdGhSZWN0LCBjb3JuZXJSYWRpdXMpKTsKKyAgICAgICAgICAgIFJlZlB0
cjxHcmFkaWVudD4gZ3JhZGllbnQgPSBHcmFkaWVudDo6Y3JlYXRlKEZsb2F0UG9pbnQoaW5uZXJQ
YXRoUmVjdC54KCksIGlubmVyUGF0aFJlY3QueSgpKSwgRmxvYXRQb2ludChpbm5lclBhdGhSZWN0
LngoKSwgaW5uZXJQYXRoUmVjdC5tYXhZKCkpKTsKKyAgICAgICAgICAgIGdyYWRpZW50LT5hZGRD
b2xvclN0b3AoMCwgZ3JhZGllbnRMaWdodENvbG9yKCkpOworICAgICAgICAgICAgZ3JhZGllbnQt
PmFkZENvbG9yU3RvcCgxLCBncmFkaWVudERhcmtDb2xvcigpKTsKKyAgICAgICAgICAgIGdyYXBo
aWNzQ29udGV4dC5zZXRGaWxsR3JhZGllbnQoZ3JhZGllbnQucmVsZWFzZU5vbk51bGwoKSk7Cisg
ICAgICAgICAgICBncmFwaGljc0NvbnRleHQuZmlsbFJlY3Qob3V0ZXJQYXRoUmVjdCk7CisgICAg
ICAgIH0KKworICAgICAgICB7CisgICAgICAgICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVy
IHN0YXRlU2F2ZXIoZ3JhcGhpY3NDb250ZXh0KTsKKyAgICAgICAgICAgIGdyYXBoaWNzQ29udGV4
dC50cmFuc2xhdGUoRmxvYXRTaXplKHJvdW5kZihsZWZ0Qm9yZGVyVGhpY2tuZXNzKSwgcm91bmRm
KHRvcEJvcmRlclRoaWNrbmVzcykpKTsKKworICAgICAgICAgICAgSW50UmVjdCBjb250ZW50SW1h
Z2VSZWN0ID0gZW5jbG9zaW5nSW50UmVjdChtX2RhdGEudGV4dFJlY3RzSW5TZWxlY3Rpb25SZWN0
Q29vcmRpbmF0ZXNbaV0pOworICAgICAgICAgICAgbV9kYXRhLmNvbnRlbnRJbWFnZS0+cGFpbnQo
Z3JhcGhpY3NDb250ZXh0LCBtX2RhdGEuY29udGVudEltYWdlU2NhbGVGYWN0b3IsIGNvbnRlbnRJ
bWFnZVJlY3QubG9jYXRpb24oKSwgY29udGVudEltYWdlUmVjdCk7CisgICAgICAgIH0KKyAgICB9
CisjZWxzZQorICAgIGZvciAoYXV0byYgdGV4dFJlY3QgOiBtX2RhdGEudGV4dFJlY3RzSW5TZWxl
Y3Rpb25SZWN0Q29vcmRpbmF0ZXMpIHsKKyAgICAgICAgRmxvYXRSZWN0IGJsdXJSZWN0ID0gdGV4
dFJlY3Q7CisgICAgICAgIGJsdXJSZWN0Lm1vdmUoZmxhdFNoYWRvd0JsdXJSYWRpdXMgKyBmbGF0
U3R5bGVIb3Jpem9udGFsQm9yZGVyLCBmbGF0U2hhZG93Qmx1clJhZGl1cyArIGZsYXRTdHlsZVZl
cnRpY2FsQm9yZGVyKTsKKyAgICAgICAgRmxvYXRSZWN0IG91dGVyUGF0aFJlY3QgPSBpbmZsYXRl
UmVjdChibHVyUmVjdCwgZmxhdFN0eWxlSG9yaXpvbnRhbEJvcmRlciwgZmxhdFN0eWxlVmVydGlj
YWxCb3JkZXIpOworCisgICAgICAgIHsKKyAgICAgICAgICAgIEdyYXBoaWNzQ29udGV4dFN0YXRl
U2F2ZXIgc3RhdGVTYXZlcihncmFwaGljc0NvbnRleHQpOworICAgICAgICAgICAgZ3JhcGhpY3ND
b250ZXh0LnNldFNoYWRvdyhGbG9hdFNpemUoKSwgZmxhdFJpbVNoYWRvd0JsdXJSYWRpdXMsIGZs
YXRSaW1TaGFkb3dDb2xvcigpLCBDb2xvclNwYWNlU1JHQik7CisgICAgICAgICAgICBncmFwaGlj
c0NvbnRleHQuc2V0RmlsbENvbG9yKGZsYXRIaWdobGlnaHRDb2xvcigpLCBDb2xvclNwYWNlU1JH
Qik7CisgICAgICAgICAgICBncmFwaGljc0NvbnRleHQuZmlsbFJlY3Qob3V0ZXJQYXRoUmVjdCk7
CisgICAgICAgICAgICBncmFwaGljc0NvbnRleHQuc2V0U2hhZG93KEZsb2F0U2l6ZShmbGF0U2hh
ZG93T2Zmc2V0WCwgZmxhdFNoYWRvd09mZnNldFkpLCBmbGF0U2hhZG93Qmx1clJhZGl1cywgZmxh
dERyb3BTaGFkb3dDb2xvcigpLCBDb2xvclNwYWNlU1JHQik7CisgICAgICAgICAgICBncmFwaGlj
c0NvbnRleHQuZmlsbFJlY3Qob3V0ZXJQYXRoUmVjdCk7CisgICAgICAgIH0KKworICAgICAgICB7
CisgICAgICAgICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoZ3JhcGhp
Y3NDb250ZXh0KTsKKyAgICAgICAgICAgIGdyYXBoaWNzQ29udGV4dC50cmFuc2xhdGUoRmxvYXRT
aXplKGZsYXRTaGFkb3dCbHVyUmFkaXVzICsgZmxhdFN0eWxlSG9yaXpvbnRhbEJvcmRlciwgZmxh
dFNoYWRvd0JsdXJSYWRpdXMgKyBmbGF0U3R5bGVWZXJ0aWNhbEJvcmRlcikpOworCisgICAgICAg
ICAgICBJbnRSZWN0IGNvbnRlbnRJbWFnZVJlY3QgPSBlbmNsb3NpbmdJbnRSZWN0KHRleHRSZWN0
KTsKKyAgICAgICAgICAgIG1fZGF0YS5jb250ZW50SW1hZ2UtPnBhaW50KGdyYXBoaWNzQ29udGV4
dCwgbV9kYXRhLmNvbnRlbnRJbWFnZVNjYWxlRmFjdG9yLCBjb250ZW50SW1hZ2VSZWN0LmxvY2F0
aW9uKCksIGNvbnRlbnRJbWFnZVJlY3QpOworICAgICAgICB9CisgICAgfQorI2VuZGlmCit9CisK
K3ZvaWQgVGV4dEluZGljYXRvcjo6RGF0YTo6ZW5jb2RlKElQQzo6QXJndW1lbnRFbmNvZGVyJiBl
bmNvZGVyKSBjb25zdAoreworICAgIGVuY29kZXIgPDwgc2VsZWN0aW9uUmVjdEluV2luZG93Q29v
cmRpbmF0ZXM7CisgICAgZW5jb2RlciA8PCB0ZXh0UmVjdHNJblNlbGVjdGlvblJlY3RDb29yZGlu
YXRlczsKKyAgICBlbmNvZGVyIDw8IGNvbnRlbnRJbWFnZVNjYWxlRmFjdG9yOworCisgICAgU2hh
cmVhYmxlQml0bWFwOjpIYW5kbGUgY29udGVudEltYWdlSGFuZGxlOworICAgIGlmIChjb250ZW50
SW1hZ2UpCisgICAgICAgIGNvbnRlbnRJbWFnZS0+Y3JlYXRlSGFuZGxlKGNvbnRlbnRJbWFnZUhh
bmRsZSwgU2hhcmVkTWVtb3J5OjpSZWFkT25seSk7CisgICAgZW5jb2RlciA8PCBjb250ZW50SW1h
Z2VIYW5kbGU7Cit9CisKK2Jvb2wgVGV4dEluZGljYXRvcjo6RGF0YTo6ZGVjb2RlKElQQzo6QXJn
dW1lbnREZWNvZGVyJiBkZWNvZGVyLCBUZXh0SW5kaWNhdG9yOjpEYXRhJiB0ZXh0SW5kaWNhdG9y
RGF0YSkKK3sKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHRleHRJbmRpY2F0b3JEYXRhLnNlbGVj
dGlvblJlY3RJbldpbmRvd0Nvb3JkaW5hdGVzKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgaWYgKCFkZWNvZGVyLmRlY29kZSh0ZXh0SW5kaWNhdG9yRGF0YS50ZXh0UmVjdHNJblNlbGVj
dGlvblJlY3RDb29yZGluYXRlcykpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmICgh
ZGVjb2Rlci5kZWNvZGUodGV4dEluZGljYXRvckRhdGEuY29udGVudEltYWdlU2NhbGVGYWN0b3Ip
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBTaGFyZWFibGVCaXRtYXA6OkhhbmRsZSBj
b250ZW50SW1hZ2VIYW5kbGU7CisgICAgaWYgKCFkZWNvZGVyLmRlY29kZShjb250ZW50SW1hZ2VI
YW5kbGUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoIWNvbnRlbnRJbWFnZUhh
bmRsZS5pc051bGwoKSkKKyAgICAgICAgdGV4dEluZGljYXRvckRhdGEuY29udGVudEltYWdlID0g
U2hhcmVhYmxlQml0bWFwOjpjcmVhdGUoY29udGVudEltYWdlSGFuZGxlLCBTaGFyZWRNZW1vcnk6
OlJlYWRPbmx5KTsKKworICAgIHJldHVybiB0cnVlOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJL
aXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9UZXh0SW5kaWNhdG9yLmggYi9T
b3VyY2UvV2ViS2l0Mi9TaGFyZWQvVGV4dEluZGljYXRvci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAuLjg0MGZhZGQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9TaGFyZWQvVGV4dEluZGljYXRvci5oCkBAIC0wLDAgKzEsODEgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aWZuZGVmIFRleHRJbmRpY2F0b3JfaAorI2RlZmluZSBUZXh0SW5kaWNhdG9yX2gKKworI2luY2x1
ZGUgIlNoYXJlYWJsZUJpdG1hcC5oIgorI2luY2x1ZGUgPFdlYkNvcmUvRmxvYXRSZWN0Lmg+Cisj
aW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgor
I2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworY2xhc3MgR3Jh
cGhpY3NDb250ZXh0OworfQorCituYW1lc3BhY2UgSVBDIHsKK2NsYXNzIEFyZ3VtZW50RGVjb2Rl
cjsKK2NsYXNzIEFyZ3VtZW50RW5jb2RlcjsKK30KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2Ns
YXNzIFdlYkZyYW1lOworCitjbGFzcyBUZXh0SW5kaWNhdG9yIDogcHVibGljIFJlZkNvdW50ZWQ8
VGV4dEluZGljYXRvcj4geworcHVibGljOgorICAgIHN0cnVjdCBEYXRhIHsKKyAgICAgICAgV2Vi
Q29yZTo6RmxvYXRSZWN0IHNlbGVjdGlvblJlY3RJbldpbmRvd0Nvb3JkaW5hdGVzOworICAgICAg
ICBWZWN0b3I8V2ViQ29yZTo6RmxvYXRSZWN0PiB0ZXh0UmVjdHNJblNlbGVjdGlvblJlY3RDb29y
ZGluYXRlczsKKyAgICAgICAgZmxvYXQgY29udGVudEltYWdlU2NhbGVGYWN0b3I7CisgICAgICAg
IFJlZlB0cjxTaGFyZWFibGVCaXRtYXA+IGNvbnRlbnRJbWFnZTsKKworICAgICAgICB2b2lkIGVu
Y29kZShJUEM6OkFyZ3VtZW50RW5jb2RlciYpIGNvbnN0OworICAgICAgICBzdGF0aWMgYm9vbCBk
ZWNvZGUoSVBDOjpBcmd1bWVudERlY29kZXImLCBEYXRhJik7CisgICAgfTsKKworICAgIHN0YXRp
YyBQYXNzUmVmUHRyPFRleHRJbmRpY2F0b3I+IGNyZWF0ZShjb25zdCBXZWJDb3JlOjpGbG9hdFJl
Y3QmIHNlbGVjdGlvblJlY3RJbldpbmRvd0Nvb3JkaW5hdGVzLCBjb25zdCBWZWN0b3I8V2ViQ29y
ZTo6RmxvYXRSZWN0PiYgdGV4dFJlY3RzSW5TZWxlY3Rpb25Db29yZGluYXRlcywgZmxvYXQgY29u
dGVudEltYWdlU2NhbGVGYWN0b3IsIFBhc3NSZWZQdHI8U2hhcmVhYmxlQml0bWFwPiBjb250ZW50
SW1hZ2UpOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPFRleHRJbmRpY2F0b3I+IGNyZWF0ZShjb25z
dCBUZXh0SW5kaWNhdG9yOjpEYXRhJik7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8VGV4dEluZGlj
YXRvcj4gY3JlYXRlV2l0aFNlbGVjdGlvbkluRnJhbWUoV2ViRnJhbWUmKTsKKworICAgIH5UZXh0
SW5kaWNhdG9yKCk7CisKKyAgICBXZWJDb3JlOjpGbG9hdFJlY3Qgc2VsZWN0aW9uUmVjdEluV2lu
ZG93Q29vcmRpbmF0ZXMoKSBjb25zdCB7IHJldHVybiBtX2RhdGEuc2VsZWN0aW9uUmVjdEluV2lu
ZG93Q29vcmRpbmF0ZXM7IH0KKyAgICBXZWJDb3JlOjpGbG9hdFJlY3QgZnJhbWVSZWN0KCkgY29u
c3Q7CisgICAgU2hhcmVhYmxlQml0bWFwKiBjb250ZW50SW1hZ2UoKSBjb25zdCB7IHJldHVybiBt
X2RhdGEuY29udGVudEltYWdlLmdldCgpOyB9CisgICAgRGF0YSBkYXRhKCkgY29uc3QgeyByZXR1
cm4gbV9kYXRhOyB9CisKKyAgICB2b2lkIGRyYXcoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Jiwg
Y29uc3QgV2ViQ29yZTo6SW50UmVjdCYgZGlydHlSZWN0KTsKKworcHJpdmF0ZToKKyAgICBUZXh0
SW5kaWNhdG9yKGNvbnN0IFRleHRJbmRpY2F0b3I6OkRhdGEmKTsKKworICAgIERhdGEgbV9kYXRh
OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBUZXh0SW5kaWNhdG9y
X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9tYWMvQWN0aW9uTWVudUhpdFRl
c3RSZXN1bHQuaCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9tYWMvQWN0aW9uTWVudUhpdFRlc3RS
ZXN1bHQuaAppbmRleCAxYTk0YzI0Li5hZTRhMDhhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9TaGFyZWQvbWFjL0FjdGlvbk1lbnVIaXRUZXN0UmVzdWx0LmgKKysrIGIvU291cmNlL1dlYktp
dDIvU2hhcmVkL21hYy9BY3Rpb25NZW51SGl0VGVzdFJlc3VsdC5oCkBAIC0yNyw2ICsyNyw3IEBA
CiAjZGVmaW5lIEFjdGlvbk1lbnVIaXRUZXN0UmVzdWx0X2gKIAogI2luY2x1ZGUgIlNoYXJlYWJs
ZUJpdG1hcC5oIgorI2luY2x1ZGUgIlRleHRJbmRpY2F0b3IuaCIKICNpbmNsdWRlICJXZWJIaXRU
ZXN0UmVzdWx0LmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9GbG9hdFJlY3QuaD4KICNpbmNsdWRlIDx3
dGYvdGV4dC9XVEZTdHJpbmcuaD4KQEAgLTUxLDcgKzUyLDggQEAgc3RydWN0IEFjdGlvbk1lbnVI
aXRUZXN0UmVzdWx0IHsKICAgICBSZWZQdHI8U2hhcmVhYmxlQml0bWFwPiBpbWFnZTsKIAogICAg
IFJldGFpblB0cjxEREFjdGlvbkNvbnRleHQ+IGFjdGlvbkNvbnRleHQ7Ci0gICAgV2ViQ29yZTo6
RmxvYXRSZWN0IGFjdGlvbkJvdW5kaW5nQm94OworICAgIFdlYkNvcmU6OkZsb2F0UmVjdCBkZXRl
Y3RlZERhdGFCb3VuZGluZ0JveDsKKyAgICBSZWZQdHI8VGV4dEluZGljYXRvcj4gZGV0ZWN0ZWRE
YXRhVGV4dEluZGljYXRvcjsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL21hYy9BY3Rpb25NZW51SGl0VGVzdFJlc3VsdC5tbSBi
L1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9tYWMvQWN0aW9uTWVudUhpdFRlc3RSZXN1bHQubW0KaW5k
ZXggYjZiOGU1Zi4uMGM5MGU0MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvU2hhcmVkL21h
Yy9BY3Rpb25NZW51SGl0VGVzdFJlc3VsdC5tbQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQv
bWFjL0FjdGlvbk1lbnVIaXRUZXN0UmVzdWx0Lm1tCkBAIC0yOSw2ICsyOSw3IEBACiAjaW1wb3J0
ICJBcmd1bWVudENvZGVyc0NGLmgiCiAjaW1wb3J0ICJBcmd1bWVudERlY29kZXIuaCIKICNpbXBv
cnQgIkFyZ3VtZW50RW5jb2Rlci5oIgorI2ltcG9ydCAiVGV4dEluZGljYXRvci5oIgogI2ltcG9y
dCAiV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgiCiAjaW1wb3J0IDxXZWJDb3JlL0RhdGFEZXRlY3Rv
cnNTUEkuaD4KIApAQCAtNTgsOSArNTksMTQgQEAgdm9pZCBBY3Rpb25NZW51SGl0VGVzdFJlc3Vs
dDo6ZW5jb2RlKElQQzo6QXJndW1lbnRFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAogICAgICAgICBb
YXJjaGl2ZXIgZmluaXNoRW5jb2RpbmddOwogCiAgICAgICAgIElQQzo6ZW5jb2RlKGVuY29kZXIs
IHJlaW50ZXJwcmV0X2Nhc3Q8Q0ZEYXRhUmVmPihkYXRhLmdldCgpKSk7Ci0gICAgfQogCi0gICAg
ZW5jb2RlciA8PCBhY3Rpb25Cb3VuZGluZ0JveDsKKyAgICAgICAgZW5jb2RlciA8PCBkZXRlY3Rl
ZERhdGFCb3VuZGluZ0JveDsKKworICAgICAgICBib29sIGhhc1RleHRJbmRpY2F0b3IgPSBkZXRl
Y3RlZERhdGFUZXh0SW5kaWNhdG9yOworICAgICAgICBlbmNvZGVyIDw8IGhhc1RleHRJbmRpY2F0
b3I7CisgICAgICAgIGlmIChoYXNUZXh0SW5kaWNhdG9yKQorICAgICAgICAgICAgZW5jb2RlciA8
PCBkZXRlY3RlZERhdGFUZXh0SW5kaWNhdG9yLT5kYXRhKCk7CisgICAgfQogfQogCiBib29sIEFj
dGlvbk1lbnVIaXRUZXN0UmVzdWx0OjpkZWNvZGUoSVBDOjpBcmd1bWVudERlY29kZXImIGRlY29k
ZXIsIEFjdGlvbk1lbnVIaXRUZXN0UmVzdWx0JiBhY3Rpb25NZW51SGl0VGVzdFJlc3VsdCkKQEAg
LTEwMCwxMCArMTA2LDIyIEBAIGJvb2wgQWN0aW9uTWVudUhpdFRlc3RSZXN1bHQ6OmRlY29kZShJ
UEM6OkFyZ3VtZW50RGVjb2RlciYgZGVjb2RlciwgQWN0aW9uTWVudUhpCiAgICAgICAgIH0KICAg
ICAgICAgCiAgICAgICAgIFt1bmFyY2hpdmVyIGZpbmlzaERlY29kaW5nXTsKLSAgICB9CiAKLSAg
ICBpZiAoIWRlY29kZXIuZGVjb2RlKGFjdGlvbk1lbnVIaXRUZXN0UmVzdWx0LmFjdGlvbkJvdW5k
aW5nQm94KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBpZiAoIWRlY29kZXIuZGVj
b2RlKGFjdGlvbk1lbnVIaXRUZXN0UmVzdWx0LmRldGVjdGVkRGF0YUJvdW5kaW5nQm94KSkKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICBib29sIGhhc1RleHRJbmRpY2F0b3I7
CisgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUoaGFzVGV4dEluZGljYXRvcikpCisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgaWYgKGhhc1RleHRJbmRpY2F0b3IpIHsKKyAg
ICAgICAgICAgIFRleHRJbmRpY2F0b3I6OkRhdGEgaW5kaWNhdG9yRGF0YTsKKyAgICAgICAgICAg
IGlmICghZGVjb2Rlci5kZWNvZGUoaW5kaWNhdG9yRGF0YSkpCisgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgICAgICAgICBhY3Rpb25NZW51SGl0VGVzdFJlc3VsdC5kZXRlY3Rl
ZERhdGFUZXh0SW5kaWNhdG9yID0gVGV4dEluZGljYXRvcjo6Y3JlYXRlKGluZGljYXRvckRhdGEp
OworICAgICAgICB9CisgICAgfQogCiAgICAgcmV0dXJuIHRydWU7CiB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvVGV4dEluZGljYXRvci5jcHAgYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvVGV4dEluZGljYXRvci5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IGZlNThkMjEuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1RleHRJ
bmRpY2F0b3IuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMjc3ICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiVGV4dEluZGljYXRvci5oIgotCi0jaW5j
bHVkZSAiU2hhcmVhYmxlQml0bWFwLmgiCi0jaW5jbHVkZSA8V2ViQ29yZS9HZW9tZXRyeVV0aWxp
dGllcy5oPgotI2luY2x1ZGUgPFdlYkNvcmUvR3JhZGllbnQuaD4KLSNpbmNsdWRlIDxXZWJDb3Jl
L0dyYXBoaWNzQ29udGV4dC5oPgotI2luY2x1ZGUgPFdlYkNvcmUvSW50UmVjdC5oPgotI2luY2x1
ZGUgPFdlYkNvcmUvUGF0aC5oPgotCi0jaWYgUExBVEZPUk0oTUFDKSAmJiBfX01BQ19PU19YX1ZF
UlNJT05fTUlOX1JFUVVJUkVEIDwgMTAxMDAwCi0jZGVmaW5lIEVOQUJMRV9MRUdBQ1lfVEVYVF9J
TkRJQ0FUT1JfU1RZTEUgMQotI2Vsc2UKLSNkZWZpbmUgRU5BQkxFX0xFR0FDWV9URVhUX0lORElD
QVRPUl9TVFlMRSAwCi0jZW5kaWYKLQotdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Ci0KLSNpZiBF
TkFCTEUoTEVHQUNZX1RFWFRfSU5ESUNBVE9SX1NUWUxFKQotc3RhdGljIGNvbnN0IGZsb2F0IGNv
cm5lclJhZGl1cyA9IDMuMDsKLQotc3RhdGljIGNvbnN0IGZsb2F0IHNoYWRvd09mZnNldFggPSAw
LjA7Ci1zdGF0aWMgY29uc3QgZmxvYXQgc2hhZG93T2Zmc2V0WSA9IDEuMDsKLXN0YXRpYyBjb25z
dCBmbG9hdCBzaGFkb3dCbHVyUmFkaXVzID0gMy4wOwotCi1zdGF0aWMgY29uc3QgaW50IHNoYWRv
d1JlZCA9IDA7Ci1zdGF0aWMgY29uc3QgaW50IHNoYWRvd0dyZWVuID0gMDsKLXN0YXRpYyBjb25z
dCBpbnQgc2hhZG93Qmx1ZSA9IDA7Ci1zdGF0aWMgY29uc3QgaW50IHNoYWRvd0FscGhhID0gMjA0
OwotCi1zdGF0aWMgY29uc3QgZmxvYXQgbGlnaHRCb3JkZXJUaGlja25lc3MgPSAxLjA7Ci1zdGF0
aWMgY29uc3QgZmxvYXQgaG9yaXpvbnRhbFBhZGRpbmdJbnNpZGVMaWdodEJvcmRlciA9IDMuMDsK
LXN0YXRpYyBjb25zdCBmbG9hdCB2ZXJ0aWNhbFBhZGRpbmdJbnNpZGVMaWdodEJvcmRlciA9IDEu
MDsKLQotc3RhdGljIGNvbnN0IGZsb2F0IGhvcml6b250YWxCb3JkZXJJbnNpZGVTaGFkb3cgPSBs
aWdodEJvcmRlclRoaWNrbmVzcyArIGhvcml6b250YWxQYWRkaW5nSW5zaWRlTGlnaHRCb3JkZXI7
Ci1zdGF0aWMgY29uc3QgZmxvYXQgdmVydGljYWxCb3JkZXJJbnNpZGVTaGFkb3cgPSBsaWdodEJv
cmRlclRoaWNrbmVzcyArIHZlcnRpY2FsUGFkZGluZ0luc2lkZUxpZ2h0Qm9yZGVyOwotCi1zdGF0
aWMgY29uc3QgZmxvYXQgbGVmdEJvcmRlclRoaWNrbmVzcyA9IGhvcml6b250YWxCb3JkZXJJbnNp
ZGVTaGFkb3cgKyBzaGFkb3dPZmZzZXRYICsgc2hhZG93Qmx1clJhZGl1cyAvIDIuMDsKLXN0YXRp
YyBjb25zdCBmbG9hdCB0b3BCb3JkZXJUaGlja25lc3MgPSB2ZXJ0aWNhbEJvcmRlckluc2lkZVNo
YWRvdyAtIHNoYWRvd09mZnNldFkgKyBzaGFkb3dCbHVyUmFkaXVzIC8gMi4wOwotc3RhdGljIGNv
bnN0IGZsb2F0IHJpZ2h0Qm9yZGVyVGhpY2tuZXNzID0gaG9yaXpvbnRhbEJvcmRlckluc2lkZVNo
YWRvdyAtIHNoYWRvd09mZnNldFggKyBzaGFkb3dCbHVyUmFkaXVzIC8gMi4wOwotc3RhdGljIGNv
bnN0IGZsb2F0IGJvdHRvbUJvcmRlclRoaWNrbmVzcyA9IHZlcnRpY2FsQm9yZGVySW5zaWRlU2hh
ZG93ICsgc2hhZG93T2Zmc2V0WSArIHNoYWRvd0JsdXJSYWRpdXMgLyAyLjA7Ci0KLXN0YXRpYyBj
b25zdCBmbG9hdCBob3Jpem9udGFsT3V0c2V0VG9DZW50ZXJPZkxpZ2h0Qm9yZGVyID0gaG9yaXpv
bnRhbEJvcmRlckluc2lkZVNoYWRvdyAtIGxpZ2h0Qm9yZGVyVGhpY2tuZXNzIC8gMi4wOwotc3Rh
dGljIGNvbnN0IGZsb2F0IHZlcnRpY2FsT3V0c2V0VG9DZW50ZXJPZkxpZ2h0Qm9yZGVyID0gdmVy
dGljYWxCb3JkZXJJbnNpZGVTaGFkb3cgLSBsaWdodEJvcmRlclRoaWNrbmVzcyAvIDIuMDsKLQot
c3RhdGljIGNvbnN0IGludCBsaWdodEJvcmRlclJlZCA9IDI0NTsKLXN0YXRpYyBjb25zdCBpbnQg
bGlnaHRCb3JkZXJHcmVlbiA9IDIzMDsKLXN0YXRpYyBjb25zdCBpbnQgbGlnaHRCb3JkZXJCbHVl
ID0gMDsKLXN0YXRpYyBjb25zdCBpbnQgbGlnaHRCb3JkZXJBbHBoYSA9IDI1NTsKLQotc3RhdGlj
IGNvbnN0IGludCBncmFkaWVudERhcmtSZWQgPSAyMzc7Ci1zdGF0aWMgY29uc3QgaW50IGdyYWRp
ZW50RGFya0dyZWVuID0gMjA0Owotc3RhdGljIGNvbnN0IGludCBncmFkaWVudERhcmtCbHVlID0g
MDsKLXN0YXRpYyBjb25zdCBpbnQgZ3JhZGllbnREYXJrQWxwaGEgPSAyNTU7Ci0KLXN0YXRpYyBj
b25zdCBpbnQgZ3JhZGllbnRMaWdodFJlZCA9IDI0MjsKLXN0YXRpYyBjb25zdCBpbnQgZ3JhZGll
bnRMaWdodEdyZWVuID0gMjM5Owotc3RhdGljIGNvbnN0IGludCBncmFkaWVudExpZ2h0Qmx1ZSA9
IDA7Ci1zdGF0aWMgY29uc3QgaW50IGdyYWRpZW50TGlnaHRBbHBoYSA9IDI1NTsKLSNlbHNlCi1j
b25zdCBmbG9hdCBmbGF0U3R5bGVIb3Jpem9udGFsQm9yZGVyID0gMjsKLWNvbnN0IGZsb2F0IGZs
YXRTdHlsZVZlcnRpY2FsQm9yZGVyID0gMTsKLWNvbnN0IGZsb2F0IGZsYXRTaGFkb3dPZmZzZXRY
ID0gMDsKLWNvbnN0IGZsb2F0IGZsYXRTaGFkb3dPZmZzZXRZID0gNTsKLWNvbnN0IGZsb2F0IGZs
YXRTaGFkb3dCbHVyUmFkaXVzID0gMjU7Ci1jb25zdCBmbG9hdCBmbGF0UmltU2hhZG93Qmx1clJh
ZGl1cyA9IDI7Ci0jZW5kaWYKLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLVBhc3NSZWZQdHI8VGV4
dEluZGljYXRvcj4gVGV4dEluZGljYXRvcjo6Y3JlYXRlKGNvbnN0IEZsb2F0UmVjdCYgc2VsZWN0
aW9uUmVjdEluV2luZG93Q29vcmRpbmF0ZXMsIGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiB0ZXh0
UmVjdHNJblNlbGVjdGlvblJlY3RDb29yZGluYXRlcywgZmxvYXQgY29udGVudEltYWdlU2NhbGVG
YWN0b3IsIGNvbnN0IFNoYXJlYWJsZUJpdG1hcDo6SGFuZGxlJiBjb250ZW50SW1hZ2VIYW5kbGUp
Ci17Ci0gICAgUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4gY29udGVudEltYWdlID0gU2hhcmVhYmxl
Qml0bWFwOjpjcmVhdGUoY29udGVudEltYWdlSGFuZGxlKTsKLSAgICBpZiAoIWNvbnRlbnRJbWFn
ZSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgQVNTRVJUKGNvbnRlbnRJbWFnZVNjYWxlRmFjdG9y
ICE9IDEgfHwgY29udGVudEltYWdlLT5zaXplKCkgPT0gZW5jbG9zaW5nSW50UmVjdChzZWxlY3Rp
b25SZWN0SW5XaW5kb3dDb29yZGluYXRlcykuc2l6ZSgpKTsKLQotICAgIHJldHVybiBhZG9wdFJl
ZihuZXcgVGV4dEluZGljYXRvcihzZWxlY3Rpb25SZWN0SW5XaW5kb3dDb29yZGluYXRlcywgdGV4
dFJlY3RzSW5TZWxlY3Rpb25SZWN0Q29vcmRpbmF0ZXMsIGNvbnRlbnRJbWFnZVNjYWxlRmFjdG9y
LCBjb250ZW50SW1hZ2UucmVsZWFzZSgpKSk7Ci19Ci0KLXN0YXRpYyBGbG9hdFJlY3QgaW5mbGF0
ZVJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBmbG9hdCBpbmZsYXRlWCwgZmxvYXQgaW5mbGF0
ZVkpCi17Ci0gICAgRmxvYXRSZWN0IGluZmxhdGVkUmVjdCA9IHJlY3Q7Ci0gICAgaW5mbGF0ZWRS
ZWN0LmluZmxhdGVYKGluZmxhdGVYKTsKLSAgICBpbmZsYXRlZFJlY3QuaW5mbGF0ZVkoaW5mbGF0
ZVkpOwotICAgIHJldHVybiBpbmZsYXRlZFJlY3Q7Ci19Ci0KLXN0YXRpYyBGbG9hdFJlY3Qgb3V0
c2V0SW5kaWNhdG9yUmVjdEluY2x1ZGluZ1NoYWRvdyhjb25zdCBGbG9hdFJlY3QgcmVjdCkKLXsK
LSNpZiBFTkFCTEUoTEVHQUNZX1RFWFRfSU5ESUNBVE9SX1NUWUxFKQotICAgIEZsb2F0UmVjdCBv
dXRzZXRSZWN0ID0gcmVjdDsKLSAgICBvdXRzZXRSZWN0Lm1vdmUoLWxlZnRCb3JkZXJUaGlja25l
c3MsIC10b3BCb3JkZXJUaGlja25lc3MpOwotICAgIG91dHNldFJlY3QuZXhwYW5kKGxlZnRCb3Jk
ZXJUaGlja25lc3MgKyByaWdodEJvcmRlclRoaWNrbmVzcywgdG9wQm9yZGVyVGhpY2tuZXNzICsg
Ym90dG9tQm9yZGVyVGhpY2tuZXNzKTsKLSAgICByZXR1cm4gb3V0c2V0UmVjdDsKLSNlbHNlCi0g
ICAgcmV0dXJuIGluZmxhdGVSZWN0KHJlY3QsIGZsYXRTaGFkb3dCbHVyUmFkaXVzICsgZmxhdFN0
eWxlSG9yaXpvbnRhbEJvcmRlciwgZmxhdFNoYWRvd0JsdXJSYWRpdXMgKyBmbGF0U3R5bGVWZXJ0
aWNhbEJvcmRlcik7Ci0jZW5kaWYKLX0KLQotc3RhdGljIGJvb2wgdGV4dEluZGljYXRvcnNGb3JU
ZXh0UmVjdHNPdmVybGFwKGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiB0ZXh0UmVjdHMpCi17Ci0g
ICAgc2l6ZV90IGNvdW50ID0gdGV4dFJlY3RzLnNpemUoKTsKLSAgICBpZiAoY291bnQgPD0gMSkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgVmVjdG9yPEZsb2F0UmVjdD4gaW5kaWNhdG9y
UmVjdHM7Ci0gICAgaW5kaWNhdG9yUmVjdHMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShjb3VudCk7
Ci0KLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKLSAgICAgICAgRmxv
YXRSZWN0IGluZGljYXRvclJlY3QgPSBvdXRzZXRJbmRpY2F0b3JSZWN0SW5jbHVkaW5nU2hhZG93
KHRleHRSZWN0c1tpXSk7Ci0KLSAgICAgICAgZm9yIChzaXplX3QgaiA9IGluZGljYXRvclJlY3Rz
LnNpemUoKTsgajsgKSB7Ci0gICAgICAgICAgICAtLWo7Ci0gICAgICAgICAgICBpZiAoaW5kaWNh
dG9yUmVjdC5pbnRlcnNlY3RzKGluZGljYXRvclJlY3RzW2pdKSkKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotCi0gICAgICAgIGluZGljYXRvclJlY3RzLnVuY2hlY2tl
ZEFwcGVuZChpbmRpY2F0b3JSZWN0KTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0K
LVRleHRJbmRpY2F0b3I6OlRleHRJbmRpY2F0b3IoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBz
ZWxlY3Rpb25SZWN0SW5XaW5kb3dDb29yZGluYXRlcywgY29uc3QgVmVjdG9yPFdlYkNvcmU6OkZs
b2F0UmVjdD4mIHRleHRSZWN0c0luU2VsZWN0aW9uUmVjdENvb3JkaW5hdGVzLCBmbG9hdCBjb250
ZW50SW1hZ2VTY2FsZUZhY3RvciwgUGFzc1JlZlB0cjxTaGFyZWFibGVCaXRtYXA+IGNvbnRlbnRJ
bWFnZSkKLSAgICA6IG1fc2VsZWN0aW9uUmVjdEluV2luZG93Q29vcmRpbmF0ZXMoc2VsZWN0aW9u
UmVjdEluV2luZG93Q29vcmRpbmF0ZXMpCi0gICAgLCBtX3RleHRSZWN0c0luU2VsZWN0aW9uUmVj
dENvb3JkaW5hdGVzKHRleHRSZWN0c0luU2VsZWN0aW9uUmVjdENvb3JkaW5hdGVzKQotICAgICwg
bV9jb250ZW50SW1hZ2VTY2FsZUZhY3Rvcihjb250ZW50SW1hZ2VTY2FsZUZhY3RvcikKLSAgICAs
IG1fY29udGVudEltYWdlKGNvbnRlbnRJbWFnZSkKLXsKLSAgICBpZiAodGV4dEluZGljYXRvcnNG
b3JUZXh0UmVjdHNPdmVybGFwKG1fdGV4dFJlY3RzSW5TZWxlY3Rpb25SZWN0Q29vcmRpbmF0ZXMp
KSB7Ci0gICAgICAgIG1fdGV4dFJlY3RzSW5TZWxlY3Rpb25SZWN0Q29vcmRpbmF0ZXNbMF0gPSB1
bmlvblJlY3QobV90ZXh0UmVjdHNJblNlbGVjdGlvblJlY3RDb29yZGluYXRlcyk7Ci0gICAgICAg
IG1fdGV4dFJlY3RzSW5TZWxlY3Rpb25SZWN0Q29vcmRpbmF0ZXMuc2hyaW5rKDEpOwotICAgIH0K
LX0KLQotVGV4dEluZGljYXRvcjo6flRleHRJbmRpY2F0b3IoKQotewotfQotCi1GbG9hdFJlY3Qg
VGV4dEluZGljYXRvcjo6ZnJhbWVSZWN0KCkgY29uc3QKLXsKLSAgICByZXR1cm4gb3V0c2V0SW5k
aWNhdG9yUmVjdEluY2x1ZGluZ1NoYWRvdyhtX3NlbGVjdGlvblJlY3RJbldpbmRvd0Nvb3JkaW5h
dGVzKTsKLX0KLQotI2lmIEVOQUJMRShMRUdBQ1lfVEVYVF9JTkRJQ0FUT1JfU1RZTEUpCi1zdGF0
aWMgaW5saW5lIENvbG9yIGxpZ2h0Qm9yZGVyQ29sb3IoKQotewotICAgIHJldHVybiBDb2xvcihs
aWdodEJvcmRlclJlZCwgbGlnaHRCb3JkZXJHcmVlbiwgbGlnaHRCb3JkZXJCbHVlLCBsaWdodEJv
cmRlckFscGhhKTsKLX0KLQotc3RhdGljIGlubGluZSBDb2xvciBzaGFkb3dDb2xvcigpCi17Ci0g
ICAgcmV0dXJuIENvbG9yKHNoYWRvd1JlZCwgc2hhZG93R3JlZW4sIHNoYWRvd0JsdWUsIHNoYWRv
d0FscGhhKTsKLX0KLQotc3RhdGljIGlubGluZSBDb2xvciBncmFkaWVudExpZ2h0Q29sb3IoKQot
ewotICAgIHJldHVybiBDb2xvcihncmFkaWVudExpZ2h0UmVkLCBncmFkaWVudExpZ2h0R3JlZW4s
IGdyYWRpZW50TGlnaHRCbHVlLCBncmFkaWVudExpZ2h0QWxwaGEpOwotfQotCi1zdGF0aWMgaW5s
aW5lIENvbG9yIGdyYWRpZW50RGFya0NvbG9yKCkKLXsKLSAgICByZXR1cm4gQ29sb3IoZ3JhZGll
bnREYXJrUmVkLCBncmFkaWVudERhcmtHcmVlbiwgZ3JhZGllbnREYXJrQmx1ZSwgZ3JhZGllbnRE
YXJrQWxwaGEpOwotfQotCi1zdGF0aWMgUGF0aCBwYXRoV2l0aFJvdW5kZWRSZWN0KGNvbnN0IEZs
b2F0UmVjdCYgcGF0aFJlY3QsIGZsb2F0IHJhZGl1cykKLXsKLSAgICBQYXRoIHBhdGg7Ci0gICAg
cGF0aC5hZGRSb3VuZGVkUmVjdChwYXRoUmVjdCwgRmxvYXRTaXplKHJhZGl1cywgcmFkaXVzKSk7
Ci0KLSAgICByZXR1cm4gcGF0aDsKLX0KLSNlbHNlCi1zdGF0aWMgaW5saW5lIENvbG9yIGZsYXRI
aWdobGlnaHRDb2xvcigpCi17Ci0gICAgcmV0dXJuIENvbG9yKDI1NSwgMjU1LCAwLCAyNTUpOwot
fQotCi1zdGF0aWMgaW5saW5lIENvbG9yIGZsYXRSaW1TaGFkb3dDb2xvcigpCi17Ci0gICAgcmV0
dXJuIENvbG9yKDAsIDAsIDAsIDM4KTsKLX0KLQotc3RhdGljIGlubGluZSBDb2xvciBmbGF0RHJv
cFNoYWRvd0NvbG9yKCkKLXsKLSAgICByZXR1cm4gQ29sb3IoMCwgMCwgMCwgNTEpOwotfQotI2Vu
ZGlmCi0gICAgCi12b2lkIFRleHRJbmRpY2F0b3I6OmRyYXcoR3JhcGhpY3NDb250ZXh0JiBncmFw
aGljc0NvbnRleHQsIGNvbnN0IEludFJlY3QmIC8qZGlydHlSZWN0Ki8pCi17Ci0jaWYgRU5BQkxF
KExFR0FDWV9URVhUX0lORElDQVRPUl9TVFlMRSkKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IG1fdGV4dFJlY3RzSW5TZWxlY3Rpb25SZWN0Q29vcmRpbmF0ZXMuc2l6ZSgpOyArK2kpIHsKLSAg
ICAgICAgRmxvYXRSZWN0IHRleHRSZWN0ID0gbV90ZXh0UmVjdHNJblNlbGVjdGlvblJlY3RDb29y
ZGluYXRlc1tpXTsKLSAgICAgICAgdGV4dFJlY3QubW92ZShsZWZ0Qm9yZGVyVGhpY2tuZXNzLCB0
b3BCb3JkZXJUaGlja25lc3MpOwotCi0gICAgICAgIEZsb2F0UmVjdCBvdXRlclBhdGhSZWN0ID0g
aW5mbGF0ZVJlY3QodGV4dFJlY3QsIGhvcml6b250YWxPdXRzZXRUb0NlbnRlck9mTGlnaHRCb3Jk
ZXIsIHZlcnRpY2FsT3V0c2V0VG9DZW50ZXJPZkxpZ2h0Qm9yZGVyKTsKLSAgICAgICAgRmxvYXRS
ZWN0IGlubmVyUGF0aFJlY3QgPSBpbmZsYXRlUmVjdCh0ZXh0UmVjdCwgaG9yaXpvbnRhbFBhZGRp
bmdJbnNpZGVMaWdodEJvcmRlciwgdmVydGljYWxQYWRkaW5nSW5zaWRlTGlnaHRCb3JkZXIpOwot
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVT
YXZlcihncmFwaGljc0NvbnRleHQpOwotICAgICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LnNldFNo
YWRvdyhGbG9hdFNpemUoc2hhZG93T2Zmc2V0WCwgc2hhZG93T2Zmc2V0WSksIHNoYWRvd0JsdXJS
YWRpdXMsIHNoYWRvd0NvbG9yKCksIENvbG9yU3BhY2VTUkdCKTsKLSAgICAgICAgICAgIGdyYXBo
aWNzQ29udGV4dC5zZXRGaWxsQ29sb3IobGlnaHRCb3JkZXJDb2xvcigpLCBDb2xvclNwYWNlRGV2
aWNlUkdCKTsKLSAgICAgICAgICAgIGdyYXBoaWNzQ29udGV4dC5maWxsUGF0aChwYXRoV2l0aFJv
dW5kZWRSZWN0KG91dGVyUGF0aFJlY3QsIGNvcm5lclJhZGl1cykpOwotICAgICAgICB9Ci0KLSAg
ICAgICAgewotICAgICAgICAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVy
KGdyYXBoaWNzQ29udGV4dCk7Ci0gICAgICAgICAgICBncmFwaGljc0NvbnRleHQuY2xpcChwYXRo
V2l0aFJvdW5kZWRSZWN0KGlubmVyUGF0aFJlY3QsIGNvcm5lclJhZGl1cykpOwotICAgICAgICAg
ICAgUmVmUHRyPEdyYWRpZW50PiBncmFkaWVudCA9IEdyYWRpZW50OjpjcmVhdGUoRmxvYXRQb2lu
dChpbm5lclBhdGhSZWN0LngoKSwgaW5uZXJQYXRoUmVjdC55KCkpLCBGbG9hdFBvaW50KGlubmVy
UGF0aFJlY3QueCgpLCBpbm5lclBhdGhSZWN0Lm1heFkoKSkpOwotICAgICAgICAgICAgZ3JhZGll
bnQtPmFkZENvbG9yU3RvcCgwLCBncmFkaWVudExpZ2h0Q29sb3IoKSk7Ci0gICAgICAgICAgICBn
cmFkaWVudC0+YWRkQ29sb3JTdG9wKDEsIGdyYWRpZW50RGFya0NvbG9yKCkpOwotICAgICAgICAg
ICAgZ3JhcGhpY3NDb250ZXh0LnNldEZpbGxHcmFkaWVudChncmFkaWVudC5yZWxlYXNlTm9uTnVs
bCgpKTsKLSAgICAgICAgICAgIGdyYXBoaWNzQ29udGV4dC5maWxsUmVjdChvdXRlclBhdGhSZWN0
KTsKLSAgICAgICAgfQotCi0gICAgICAgIHsKLSAgICAgICAgICAgIEdyYXBoaWNzQ29udGV4dFN0
YXRlU2F2ZXIgc3RhdGVTYXZlcihncmFwaGljc0NvbnRleHQpOwotICAgICAgICAgICAgZ3JhcGhp
Y3NDb250ZXh0LnRyYW5zbGF0ZShGbG9hdFNpemUocm91bmRmKGxlZnRCb3JkZXJUaGlja25lc3Mp
LCByb3VuZGYodG9wQm9yZGVyVGhpY2tuZXNzKSkpOwotCi0gICAgICAgICAgICBJbnRSZWN0IGNv
bnRlbnRJbWFnZVJlY3QgPSBlbmNsb3NpbmdJbnRSZWN0KG1fdGV4dFJlY3RzSW5TZWxlY3Rpb25S
ZWN0Q29vcmRpbmF0ZXNbaV0pOwotICAgICAgICAgICAgbV9jb250ZW50SW1hZ2UtPnBhaW50KGdy
YXBoaWNzQ29udGV4dCwgbV9jb250ZW50SW1hZ2VTY2FsZUZhY3RvciwgY29udGVudEltYWdlUmVj
dC5sb2NhdGlvbigpLCBjb250ZW50SW1hZ2VSZWN0KTsKLSAgICAgICAgfQotICAgIH0KLSNlbHNl
Ci0gICAgZm9yIChhdXRvJiB0ZXh0UmVjdCA6IG1fdGV4dFJlY3RzSW5TZWxlY3Rpb25SZWN0Q29v
cmRpbmF0ZXMpIHsKLSAgICAgICAgRmxvYXRSZWN0IGJsdXJSZWN0ID0gdGV4dFJlY3Q7Ci0gICAg
ICAgIGJsdXJSZWN0Lm1vdmUoZmxhdFNoYWRvd0JsdXJSYWRpdXMgKyBmbGF0U3R5bGVIb3Jpem9u
dGFsQm9yZGVyLCBmbGF0U2hhZG93Qmx1clJhZGl1cyArIGZsYXRTdHlsZVZlcnRpY2FsQm9yZGVy
KTsKLSAgICAgICAgRmxvYXRSZWN0IG91dGVyUGF0aFJlY3QgPSBpbmZsYXRlUmVjdChibHVyUmVj
dCwgZmxhdFN0eWxlSG9yaXpvbnRhbEJvcmRlciwgZmxhdFN0eWxlVmVydGljYWxCb3JkZXIpOwot
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVT
YXZlcihncmFwaGljc0NvbnRleHQpOwotICAgICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LnNldFNo
YWRvdyhGbG9hdFNpemUoKSwgZmxhdFJpbVNoYWRvd0JsdXJSYWRpdXMsIGZsYXRSaW1TaGFkb3dD
b2xvcigpLCBDb2xvclNwYWNlU1JHQik7Ci0gICAgICAgICAgICBncmFwaGljc0NvbnRleHQuc2V0
RmlsbENvbG9yKGZsYXRIaWdobGlnaHRDb2xvcigpLCBDb2xvclNwYWNlU1JHQik7Ci0gICAgICAg
ICAgICBncmFwaGljc0NvbnRleHQuZmlsbFJlY3Qob3V0ZXJQYXRoUmVjdCk7Ci0gICAgICAgICAg
ICBncmFwaGljc0NvbnRleHQuc2V0U2hhZG93KEZsb2F0U2l6ZShmbGF0U2hhZG93T2Zmc2V0WCwg
ZmxhdFNoYWRvd09mZnNldFkpLCBmbGF0U2hhZG93Qmx1clJhZGl1cywgZmxhdERyb3BTaGFkb3dD
b2xvcigpLCBDb2xvclNwYWNlU1JHQik7Ci0gICAgICAgICAgICBncmFwaGljc0NvbnRleHQuZmls
bFJlY3Qob3V0ZXJQYXRoUmVjdCk7Ci0gICAgICAgIH0KLQotICAgICAgICB7Ci0gICAgICAgICAg
ICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoZ3JhcGhpY3NDb250ZXh0KTsK
LSAgICAgICAgICAgIGdyYXBoaWNzQ29udGV4dC50cmFuc2xhdGUoRmxvYXRTaXplKGZsYXRTaGFk
b3dCbHVyUmFkaXVzICsgZmxhdFN0eWxlSG9yaXpvbnRhbEJvcmRlciwgZmxhdFNoYWRvd0JsdXJS
YWRpdXMgKyBmbGF0U3R5bGVWZXJ0aWNhbEJvcmRlcikpOwotCi0gICAgICAgICAgICBJbnRSZWN0
IGNvbnRlbnRJbWFnZVJlY3QgPSBlbmNsb3NpbmdJbnRSZWN0KHRleHRSZWN0KTsKLSAgICAgICAg
ICAgIG1fY29udGVudEltYWdlLT5wYWludChncmFwaGljc0NvbnRleHQsIG1fY29udGVudEltYWdl
U2NhbGVGYWN0b3IsIGNvbnRlbnRJbWFnZVJlY3QubG9jYXRpb24oKSwgY29udGVudEltYWdlUmVj
dCk7Ci0gICAgICAgIH0KLSAgICB9Ci0jZW5kaWYKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvVGV4dEluZGljYXRvci5oIGIv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1RleHRJbmRpY2F0b3IuaApkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggYTQ3NmU3MC4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvVGV4dEluZGljYXRvci5oCisrKyAvZGV2L251bGwKQEAgLTEsNjQgKzAsMCBAQAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotICovCi0KLSNpZm5kZWYgVGV4dEluZGljYXRvcl9oCi0jZGVmaW5lIFRleHRJbmRpY2F0b3Jf
aAotCi0jaW5jbHVkZSAiU2hhcmVhYmxlQml0bWFwLmgiCi0jaW5jbHVkZSA8V2ViQ29yZS9GbG9h
dFJlY3QuaD4KLSNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi9SZWZD
b3VudGVkLmg+Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7
Ci1jbGFzcyBHcmFwaGljc0NvbnRleHQ7Ci19Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1jbGFz
cyBUZXh0SW5kaWNhdG9yIDogcHVibGljIFJlZkNvdW50ZWQ8VGV4dEluZGljYXRvcj4gewotcHVi
bGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPFRleHRJbmRpY2F0b3I+IGNyZWF0ZShjb25zdCBX
ZWJDb3JlOjpGbG9hdFJlY3QmIHNlbGVjdGlvblJlY3RJbldpbmRvd0Nvb3JkaW5hdGVzLCBjb25z
dCBWZWN0b3I8V2ViQ29yZTo6RmxvYXRSZWN0PiYgdGV4dFJlY3RzSW5TZWxlY3Rpb25SZWN0Q29v
cmRpbmF0ZXMsIGZsb2F0IGNvbnRlbnRJbWFnZVNjYWxlRmFjdG9yLCBjb25zdCBTaGFyZWFibGVC
aXRtYXA6OkhhbmRsZSYgY29udGVudEltYWdlSGFuZGxlKTsKLSAgICB+VGV4dEluZGljYXRvcigp
OwotCi0gICAgV2ViQ29yZTo6RmxvYXRSZWN0IHNlbGVjdGlvblJlY3RJbldpbmRvd0Nvb3JkaW5h
dGVzKCkgY29uc3QgeyByZXR1cm4gbV9zZWxlY3Rpb25SZWN0SW5XaW5kb3dDb29yZGluYXRlczsg
fQotICAgIFdlYkNvcmU6OkZsb2F0UmVjdCBmcmFtZVJlY3QoKSBjb25zdDsKLQotICAgIFNoYXJl
YWJsZUJpdG1hcCogY29udGVudEltYWdlKCkgY29uc3QgeyByZXR1cm4gbV9jb250ZW50SW1hZ2Uu
Z2V0KCk7IH0KLQotICAgIHZvaWQgZHJhdyhXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQmLCBjb25z
dCBXZWJDb3JlOjpJbnRSZWN0JiBkaXJ0eVJlY3QpOwotCi1wcml2YXRlOgotICAgIFRleHRJbmRp
Y2F0b3IoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBzZWxlY3Rpb25SZWN0LCBjb25zdCBWZWN0
b3I8V2ViQ29yZTo6RmxvYXRSZWN0PiYgdGV4dFJlY3RzLCBmbG9hdCBjb250ZW50SW1hZ2VTY2Fs
ZUZhY3RvciwgUGFzc1JlZlB0cjxTaGFyZWFibGVCaXRtYXA+IGNvbnRlbnRJbWFnZSk7Ci0KLSAg
ICBXZWJDb3JlOjpGbG9hdFJlY3QgbV9zZWxlY3Rpb25SZWN0SW5XaW5kb3dDb29yZGluYXRlczsK
LSAgICBWZWN0b3I8V2ViQ29yZTo6RmxvYXRSZWN0PiBtX3RleHRSZWN0c0luU2VsZWN0aW9uUmVj
dENvb3JkaW5hdGVzOwotICAgIGZsb2F0IG1fY29udGVudEltYWdlU2NhbGVGYWN0b3I7Ci0gICAg
UmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4gbV9jb250ZW50SW1hZ2U7Ci19OwotCi19IC8vIG5hbWVz
cGFjZSBXZWJLaXQKLQotI2VuZGlmIC8vIFRleHRJbmRpY2F0b3JfaApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcAppbmRleCA2MjJkMTIzLi5hM2MyZWI5IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcApAQCAtMzYyNSwxMCArMzYyNSwx
NCBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6ZGlkR2V0SW1hZ2VGb3JGaW5kTWF0Y2goY29uc3QgU2hh
cmVhYmxlQml0bWFwOjpIYW5kbGUmIGNvbnRlbgogICAgIG1fZmluZE1hdGNoZXNDbGllbnQuZGlk
R2V0SW1hZ2VGb3JNYXRjaFJlc3VsdCh0aGlzLCBXZWJJbWFnZTo6Y3JlYXRlKFNoYXJlYWJsZUJp
dG1hcDo6Y3JlYXRlKGNvbnRlbnRJbWFnZUhhbmRsZSkpLmdldCgpLCBtYXRjaEluZGV4KTsKIH0K
IAotdm9pZCBXZWJQYWdlUHJveHk6OnNldFRleHRJbmRpY2F0b3IoY29uc3QgRmxvYXRSZWN0JiBz
ZWxlY3Rpb25SZWN0SW5XaW5kb3dDb29yZGluYXRlcywgY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4m
IHRleHRSZWN0c0luU2VsZWN0aW9uUmVjdENvb3JkaW5hdGVzLCBmbG9hdCBjb250ZW50SW1hZ2VT
Y2FsZUZhY3RvciwgY29uc3QgU2hhcmVhYmxlQml0bWFwOjpIYW5kbGUmIGNvbnRlbnRJbWFnZUhh
bmRsZSwgYm9vbCBmYWRlT3V0LCBib29sIGFuaW1hdGUpCit2b2lkIFdlYlBhZ2VQcm94eTo6c2V0
VGV4dEluZGljYXRvcihjb25zdCBUZXh0SW5kaWNhdG9yOjpEYXRhJiBpbmRpY2F0b3JEYXRhLCBi
b29sIGZhZGVPdXQsIGJvb2wgYW5pbWF0ZSkKIHsKLSAgICBSZWZQdHI8VGV4dEluZGljYXRvcj4g
dGV4dEluZGljYXRvciA9IFRleHRJbmRpY2F0b3I6OmNyZWF0ZShzZWxlY3Rpb25SZWN0SW5XaW5k
b3dDb29yZGluYXRlcywgdGV4dFJlY3RzSW5TZWxlY3Rpb25SZWN0Q29vcmRpbmF0ZXMsIGNvbnRl
bnRJbWFnZVNjYWxlRmFjdG9yLCBjb250ZW50SW1hZ2VIYW5kbGUpOwotICAgIG1fcGFnZUNsaWVu
dC5zZXRUZXh0SW5kaWNhdG9yKHRleHRJbmRpY2F0b3IucmVsZWFzZSgpLCBmYWRlT3V0LCBhbmlt
YXRlKTsKKyAgICBtX3BhZ2VDbGllbnQuc2V0VGV4dEluZGljYXRvcihUZXh0SW5kaWNhdG9yOjpj
cmVhdGUoaW5kaWNhdG9yRGF0YSksIGZhZGVPdXQsIGFuaW1hdGUpOworfQorCit2b2lkIFdlYlBh
Z2VQcm94eTo6Y2xlYXJUZXh0SW5kaWNhdG9yKGJvb2wgZmFkZU91dCwgYm9vbCBhbmltYXRlKQor
eworICAgIG1fcGFnZUNsaWVudC5zZXRUZXh0SW5kaWNhdG9yKG51bGxwdHIsIGZhZGVPdXQsIGFu
aW1hdGUpOwogfQogCiB2b2lkIFdlYlBhZ2VQcm94eTo6ZGlkRmluZFN0cmluZyhjb25zdCBTdHJp
bmcmIHN0cmluZywgdWludDMyX3QgbWF0Y2hDb3VudCwgaW50MzJfdCBtYXRjaEluZGV4KQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCmluZGV4IDU5NTMyMDAuLjEwOWQxYWMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAorKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgKQEAgLTE1Miw2ICsxNTIs
NyBAQCBjbGFzcyBQYWdlQ2xpZW50OwogY2xhc3MgUmVtb3RlTGF5ZXJUcmVlVHJhbnNhY3Rpb247
CiBjbGFzcyBSZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvclByb3h5OwogY2xhc3MgU3RyaW5nUGFp
clZlY3RvcjsKK2NsYXNzIFRleHRJbmRpY2F0b3I7CiBjbGFzcyBWaWV3U25hcHNob3Q7CiBjbGFz
cyBWaXNpdGVkTGlua1Byb3ZpZGVyOwogY2xhc3MgV2ViQmFja0ZvcndhcmRMaXN0OwpAQCAtNjYx
LDcgKzY2Miw4IEBAIHB1YmxpYzoKICAgICB2b2lkIGhpZGVGaW5kVUkoKTsKICAgICB2b2lkIGNv
dW50U3RyaW5nTWF0Y2hlcyhjb25zdCBTdHJpbmcmLCBGaW5kT3B0aW9ucywgdW5zaWduZWQgbWF4
TWF0Y2hDb3VudCk7CiAgICAgdm9pZCBkaWRDb3VudFN0cmluZ01hdGNoZXMoY29uc3QgU3RyaW5n
JiwgdWludDMyX3QgbWF0Y2hDb3VudCk7Ci0gICAgdm9pZCBzZXRUZXh0SW5kaWNhdG9yKGNvbnN0
IFdlYkNvcmU6OkZsb2F0UmVjdCYgc2VsZWN0aW9uUmVjdEluV2luZG93Q29vcmRpbmF0ZXMsIGNv
bnN0IFZlY3RvcjxXZWJDb3JlOjpGbG9hdFJlY3Q+JiB0ZXh0UmVjdHNJblNlbGVjdGlvblJlY3RD
b29yZGluYXRlcywgZmxvYXQgY29udGVudEltYWdlU2NhbGVGYWN0b3IsIGNvbnN0IFNoYXJlYWJs
ZUJpdG1hcDo6SGFuZGxlJiBjb250ZW50SW1hZ2VIYW5kbGUsIGJvb2wgZmFkZU91dCwgYm9vbCBh
bmltYXRlKTsKKyAgICB2b2lkIHNldFRleHRJbmRpY2F0b3IoY29uc3QgVGV4dEluZGljYXRvcjo6
RGF0YSYsIGJvb2wgZmFkZU91dCwgYm9vbCBhbmltYXRlKTsKKyAgICB2b2lkIGNsZWFyVGV4dElu
ZGljYXRvcihib29sIGZhZGVPdXQsIGJvb2wgYW5pbWF0ZSk7CiAgICAgdm9pZCBkaWRGaW5kU3Ry
aW5nKGNvbnN0IFN0cmluZyYsIHVpbnQzMl90IG1hdGNoQ291bnQsIGludDMyX3QgbWF0Y2hJbmRl
eCk7CiAgICAgdm9pZCBkaWRGYWlsVG9GaW5kU3RyaW5nKGNvbnN0IFN0cmluZyYpOwogICAgIHZv
aWQgZGlkRmluZFN0cmluZ01hdGNoZXMoY29uc3QgU3RyaW5nJiwgY29uc3QgVmVjdG9yPFZlY3Rv
cjxXZWJDb3JlOjpJbnRSZWN0Pj4mIG1hdGNoUmVjdHMsIGludDMyX3QgZmlyc3RJbmRleEFmdGVy
U2VsZWN0aW9uKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdl
UHJveHkubWVzc2FnZXMuaW4gYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5
Lm1lc3NhZ2VzLmluCmluZGV4IDM3MDlkYzguLmY3ZjE2MGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkubWVzc2FnZXMuaW4KKysrIGIvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5tZXNzYWdlcy5pbgpAQCAtMjI4LDcgKzIyOCw4
IEBAIG1lc3NhZ2VzIC0+IFdlYlBhZ2VQcm94eSB7CiAKICAgICAjIEZpbmQgbWVzc2FnZXMKICAg
ICBEaWRDb3VudFN0cmluZ01hdGNoZXMoU3RyaW5nIHN0cmluZywgdWludDMyX3QgbWF0Y2hDb3Vu
dCkKLSAgICBTZXRUZXh0SW5kaWNhdG9yKFdlYkNvcmU6OkZsb2F0UmVjdCBzZWxlY3Rpb25SZWN0
LCBWZWN0b3I8V2ViQ29yZTo6RmxvYXRSZWN0PiB0ZXh0UmVjdHMsIGZsb2F0IGNvbnRlbnRJbWFn
ZVNjYWxlRmFjdG9yLCBXZWJLaXQ6OlNoYXJlYWJsZUJpdG1hcDo6SGFuZGxlIGNvbnRlbnRJbWFn
ZUhhbmRsZSwgYm9vbCBmYWRlT3V0LCBib29sIGFuaW1hdGUpCisgICAgU2V0VGV4dEluZGljYXRv
cihXZWJLaXQ6OlRleHRJbmRpY2F0b3I6OkRhdGEgaW5kaWNhdG9yLCBib29sIGZhZGVPdXQsIGJv
b2wgYW5pbWF0ZSkKKyAgICBDbGVhclRleHRJbmRpY2F0b3IoYm9vbCBmYWRlT3V0LCBib29sIGFu
aW1hdGUpCiAgICAgRGlkRmluZFN0cmluZyhTdHJpbmcgc3RyaW5nLCB1aW50MzJfdCBtYXRjaENv
dW50LCBpbnQzMl90IG1hdGNoSW5kZXgpCiAgICAgRGlkRmFpbFRvRmluZFN0cmluZyhTdHJpbmcg
c3RyaW5nKQogICAgIERpZEZpbmRTdHJpbmdNYXRjaGVzKFN0cmluZyBzdHJpbmcsIFZlY3RvcjxW
ZWN0b3I8V2ViQ29yZTo6SW50UmVjdD4+IG1hdGNoZXMsIGludDMyX3QgZmlyc3RJbmRleEFmdGVy
U2VsZWN0aW9uKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9XS0Fj
dGlvbk1lbnVDb250cm9sbGVyLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1dLQWN0
aW9uTWVudUNvbnRyb2xsZXIuaAppbmRleCA2NzEyZDAzLi5hYjk3MWQ4IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1dLQWN0aW9uTWVudUNvbnRyb2xsZXIuaAorKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1dLQWN0aW9uTWVudUNvbnRyb2xsZXIuaApA
QCAtNTYsNiArNTYsOCBAQCBlbnVtIGNsYXNzIEFjdGlvbk1lbnVTdGF0ZSB7CiAgICAgUmVmUHRy
PEFQSTo6T2JqZWN0PiBfdXNlckRhdGE7CiAgICAgX1dLQWN0aW9uTWVudVR5cGUgX3R5cGU7CiAg
ICAgUmV0YWluUHRyPE5TU2hhcmluZ1NlcnZpY2VQaWNrZXI+IF9zaGFyaW5nU2VydmljZVBpY2tl
cjsKKworICAgIEJPT0wgX2lzU2hvd2luZ1RleHRJbmRpY2F0b3I7CiB9CiAKIC0gKGluc3RhbmNl
dHlwZSlpbml0V2l0aFBhZ2U6KFdlYktpdDo6V2ViUGFnZVByb3h5JilwYWdlIHZpZXc6KFdLVmll
dyAqKXdrVmlldzsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvV0tB
Y3Rpb25NZW51Q29udHJvbGxlci5tbSBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvV0tB
Y3Rpb25NZW51Q29udHJvbGxlci5tbQppbmRleCA1MWZhMDdkLi5lNGUxOTNjIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1dLQWN0aW9uTWVudUNvbnRyb2xsZXIubW0K
KysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9XS0FjdGlvbk1lbnVDb250cm9sbGVy
Lm1tCkBAIC0yOCw2ICsyOCw3IEBACiAKICNpZiBQTEFURk9STShNQUMpICYmIF9fTUFDX09TX1hf
VkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTAxMDAwCiAKKyNpbXBvcnQgIlRleHRJbmRpY2F0b3Iu
aCIKICNpbXBvcnQgIldLTlNVUkxFeHRyYXMuaCIKICNpbXBvcnQgIldLVmlld0ludGVybmFsLmgi
CiAjaW1wb3J0ICJXZWJDb250ZXh0LmgiCkBAIC03MSw2ICs3Miw4IEBAIHVzaW5nIG5hbWVzcGFj
ZSBXZWJLaXQ7CiBAaW50ZXJmYWNlIFdLQWN0aW9uTWVudUNvbnRyb2xsZXIgKCkgPE5TU2hhcmlu
Z1NlcnZpY2VEZWxlZ2F0ZSwgTlNTaGFyaW5nU2VydmljZVBpY2tlckRlbGVnYXRlPgogLSAodm9p
ZClfdXBkYXRlQWN0aW9uTWVudUl0ZW1zRm9yU3RhZ2U6KE1lbnVVcGRhdGVTdGFnZSlzdGFnZTsK
IC0gKEJPT0wpX2NhbkFkZEltYWdlVG9QaG90b3M7CistICh2b2lkKV9zaG93VGV4dEluZGljYXRv
cjsKKy0gKHZvaWQpX2hpZGVUZXh0SW5kaWNhdG9yOwogQGVuZAogCiBAaW50ZXJmYWNlIFdLVmll
dyAoV0tEZXByZWNhdGVkU1BJKQpAQCAtOTcsNiArMTAwLDcgQEAgdXNpbmcgbmFtZXNwYWNlIFdl
YktpdDsKIHsKICAgICBfcGFnZSA9IG51bGxwdHI7CiAgICAgX3drVmlldyA9IG51bGxwdHI7Cisg
ICAgX2hpdFRlc3RSZXN1bHQgPSBBY3Rpb25NZW51SGl0VGVzdFJlc3VsdCgpOwogfQogCiAtICh2
b2lkKXByZXBhcmVGb3JNZW51OihOU01lbnUgKiltZW51IHdpdGhFdmVudDooTlNFdmVudCAqKWV2
ZW50CkBAIC0xMDgsNiArMTEyLDggQEAgdXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKIAogICAgIF9z
dGF0ZSA9IEFjdGlvbk1lbnVTdGF0ZTo6UGVuZGluZzsKICAgICBbc2VsZiBfdXBkYXRlQWN0aW9u
TWVudUl0ZW1zRm9yU3RhZ2U6TWVudVVwZGF0ZVN0YWdlOjpQcmVwYXJlRm9yTWVudV07CisKKyAg
ICBbc2VsZiBfaGlkZVRleHRJbmRpY2F0b3JdOwogfQogCiAtIChCT09MKWlzTWVudUZvclRleHRD
b250ZW50CkBAIC0xMjAsNiArMTI2LDkgQEAgdXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKICAgICBp
ZiAobWVudSAhPSBfd2tWaWV3LmFjdGlvbk1lbnUpCiAgICAgICAgIHJldHVybjsKIAorICAgIGlm
IChfdHlwZSA9PSBrV0tBY3Rpb25NZW51RGF0YURldGVjdGVkSXRlbSkKKyAgICAgICAgW3NlbGYg
X3Nob3dUZXh0SW5kaWNhdG9yXTsKKwogICAgIGlmICghW3NlbGYgaXNNZW51Rm9yVGV4dENvbnRl
bnRdKQogICAgICAgICByZXR1cm47CiAKQEAgLTEzNCw2ICsxNDMsOSBAQCB1c2luZyBuYW1lc3Bh
Y2UgV2ViS2l0OwogewogICAgIGlmIChtZW51ICE9IF93a1ZpZXcuYWN0aW9uTWVudSkKICAgICAg
ICAgcmV0dXJuOworCisgICAgaWYgKF90eXBlID09IGtXS0FjdGlvbk1lbnVEYXRhRGV0ZWN0ZWRJ
dGVtICYmIG1lbnUubnVtYmVyT2ZJdGVtcyA+IDEpCisgICAgICAgIFtzZWxmIF9oaWRlVGV4dElu
ZGljYXRvcl07CiAgICAgCiAgICAgX3N0YXRlID0gQWN0aW9uTWVudVN0YXRlOjpOb25lOwogICAg
IF9oaXRUZXN0UmVzdWx0ID0gQWN0aW9uTWVudUhpdFRlc3RSZXN1bHQoKTsKQEAgLTE0OSw2ICsx
NjEsMjggQEAgdXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKICAgICBfdXNlckRhdGEgPSB1c2VyRGF0
YTsKIH0KIAorI3ByYWdtYSBtYXJrIFRleHQgSW5kaWNhdG9yCisKKy0gKHZvaWQpX3Nob3dUZXh0
SW5kaWNhdG9yCit7CisgICAgaWYgKF9pc1Nob3dpbmdUZXh0SW5kaWNhdG9yKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBpZiAoX2hpdFRlc3RSZXN1bHQuZGV0ZWN0ZWREYXRhVGV4dEluZGljYXRv
cikgeworICAgICAgICBfcGFnZS0+c2V0VGV4dEluZGljYXRvcihfaGl0VGVzdFJlc3VsdC5kZXRl
Y3RlZERhdGFUZXh0SW5kaWNhdG9yLT5kYXRhKCksIGZhbHNlLCB0cnVlKTsKKyAgICAgICAgX2lz
U2hvd2luZ1RleHRJbmRpY2F0b3IgPSBZRVM7CisgICAgfQorfQorCistICh2b2lkKV9oaWRlVGV4
dEluZGljYXRvcgoreworICAgIGlmICghX2lzU2hvd2luZ1RleHRJbmRpY2F0b3IpCisgICAgICAg
IHJldHVybjsKKworICAgIF9wYWdlLT5jbGVhclRleHRJbmRpY2F0b3IoZmFsc2UsIHRydWUpOwor
ICAgIF9pc1Nob3dpbmdUZXh0SW5kaWNhdG9yID0gTk87Cit9CisKICNwcmFnbWEgbWFyayBMaW5r
IGFjdGlvbnMKIAogLSAoTlNBcnJheSAqKV9kZWZhdWx0TWVudUl0ZW1zRm9yTGluawpAQCAtMzIx
LDggKzM1NSwxMiBAQCBzdGF0aWMgTlNTdHJpbmcgKnBhdGhUb1Bob3RvT25EaXNrKE5TU3RyaW5n
ICpzdWdnZXN0ZWRGaWxlbmFtZSkKICAgICBpZiAoIWFjdGlvbkNvbnRleHQpCiAgICAgICAgIHJl
dHVybiBAWyBdOwogCisgICAgYWN0aW9uQ29udGV4dC5jb21wbGV0aW9uSGFuZGxlciA9IF4oKSB7
CisgICAgICAgIFtzZWxmIF9oaWRlVGV4dEluZGljYXRvcl07CisgICAgfTsKKwogICAgIFdLU2V0
RERBY3Rpb25Db250ZXh0SXNGb3JBY3Rpb25NZW51KGFjdGlvbkNvbnRleHQpOwotICAgIGFjdGlv
bkNvbnRleHQuaGlnaGxpZ2h0RnJhbWUgPSBbX3drVmlldy53aW5kb3cgY29udmVydFJlY3RUb1Nj
cmVlbjpbX3drVmlldyBjb252ZXJ0UmVjdDpfaGl0VGVzdFJlc3VsdC5hY3Rpb25Cb3VuZGluZ0Jv
eCB0b1ZpZXc6bmlsXV07CisgICAgYWN0aW9uQ29udGV4dC5oaWdobGlnaHRGcmFtZSA9IFtfd2tW
aWV3LndpbmRvdyBjb252ZXJ0UmVjdFRvU2NyZWVuOltfd2tWaWV3IGNvbnZlcnRSZWN0Ol9oaXRU
ZXN0UmVzdWx0LmRldGVjdGVkRGF0YUJvdW5kaW5nQm94IHRvVmlldzpuaWxdXTsKICAgICByZXR1
cm4gW1tnZXREREFjdGlvbnNNYW5hZ2VyQ2xhc3MoKSBzaGFyZWRNYW5hZ2VyXSBtZW51SXRlbXNG
b3JSZXN1bHQ6W19oaXRUZXN0UmVzdWx0LmFjdGlvbkNvbnRleHQgbWFpblJlc3VsdF0gYWN0aW9u
Q29udGV4dDphY3Rpb25Db250ZXh0XTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
V2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYktpdDIvV2ViS2l0
Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IGFjOTVjZmQuLjUyZmE0YzEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAg
LTQ0NjIsNiArNDQ2Miw4IEBACiAJCQkJNTI3MkIyODgxNDA2OTg1RDAwOTZBNUQwIC8qIFN0YXRp
c3RpY3NEYXRhLmNwcCAqLywKIAkJCQk1MjcyQjI4OTE0MDY5ODVEMDA5NkE1RDAgLyogU3RhdGlz
dGljc0RhdGEuaCAqLywKIAkJCQkxQTVFNERBMzEyRDNCRDNEMDA5OUEyQkIgLyogVGV4dENoZWNr
ZXJTdGF0ZS5oICovLAorCQkJCTFBOTEwMDcwMTI2Njc1QzQwMDE4NDJGNSAvKiBUZXh0SW5kaWNh
dG9yLmNwcCAqLywKKwkJCQkxQTkxMDA2RjEyNjY3NUMzMDAxODQyRjUgLyogVGV4dEluZGljYXRv
ci5oICovLAogCQkJCTFBNjQyNDVEMTJERTI5QTEwMENBQUUyQyAvKiBVcGRhdGVJbmZvLmNwcCAq
LywKIAkJCQkxQTY0MjQ1QzEyREUyOUExMDBDQUFFMkMgLyogVXBkYXRlSW5mby5oICovLAogCQkJ
CTFBQzEzMzY1MTg1NjVCNTcwMEYzRUMwNSAvKiBVc2VyRGF0YS5jcHAgKi8sCkBAIC01Nzg0LDEw
ICs1Nzg2LDggQEAKIAkJCQlCQzI2NTIxMjExODI2MDgxMDAyNDNFMTIgLyogRHJhd2luZ0FyZWFQ
cm94eS5jcHAgKi8sCiAJCQkJQkMyNjUyMTMxMTgyNjA4MTAwMjQzRTEyIC8qIERyYXdpbmdBcmVh
UHJveHkuaCAqLywKIAkJCQkxQTY0MjJGQzEyREQwOEZFMDBDQUFFMkMgLyogRHJhd2luZ0FyZWFQ
cm94eS5tZXNzYWdlcy5pbiAqLywKLQkJCQkxQTkxMDA3MDEyNjY3NUM0MDAxODQyRjUgLyogVGV4
dEluZGljYXRvci5jcHAgKi8sCiAJCQkJMUFFMDBENUUxODMxNzkyMTAwMDg3REQ3IC8qIEZyYW1l
TG9hZFN0YXRlLmNwcCAqLywKIAkJCQkxQUUwMEQ1RjE4MzE3OTIxMDAwODdERDcgLyogRnJhbWVM
b2FkU3RhdGUuaCAqLywKLQkJCQkxQTkxMDA2RjEyNjY3NUMzMDAxODQyRjUgLyogVGV4dEluZGlj
YXRvci5oICovLAogCQkJCUJDMTc3NTNFMTE4QkFCRjAwMDdEOUU5QSAvKiBHZW5lcmljQ2FsbGJh
Y2suaCAqLywKIAkJCQlCQzA2RjQ0OTEyREJEMUY1MDAyRDc4REUgLyogR2VvbG9jYXRpb25QZXJt
aXNzaW9uUmVxdWVzdE1hbmFnZXJQcm94eS5jcHAgKi8sCiAJCQkJQkMwNkY0NDgxMkRCRDFGNTAw
MkQ3OERFIC8qIEdlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3RNYW5hZ2VyUHJveHkuaCAqLywK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9GaW5kQ29udHJv
bGxlci5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvRmluZENvbnRyb2xs
ZXIuY3BwCmluZGV4IGE4MWZlZDkuLjAzOTFlMGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvV2ViUGFnZS9GaW5kQ29udHJvbGxlci5jcHAKKysrIGIvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0ZpbmRDb250cm9sbGVyLmNwcApAQCAtMjksNiArMjksNyBA
QAogI2luY2x1ZGUgIkRyYXdpbmdBcmVhLmgiCiAjaW5jbHVkZSAiUGx1Z2luVmlldy5oIgogI2lu
Y2x1ZGUgIlNoYXJlYWJsZUJpdG1hcC5oIgorI2luY2x1ZGUgIlRleHRJbmRpY2F0b3IuaCIKICNp
bmNsdWRlICJXS1BhZ2UuaCIKICNpbmNsdWRlICJXZWJDb3JlQXJndW1lbnRDb2RlcnMuaCIKICNp
bmNsdWRlICJXZWJQYWdlLmgiCkBAIC0zNiwxMCArMzcsOCBAQAogI2luY2x1ZGUgPFdlYkNvcmUv
RG9jdW1lbnRNYXJrZXJDb250cm9sbGVyLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9GbG9hdFF1YWQu
aD4KICNpbmNsdWRlIDxXZWJDb3JlL0ZvY3VzQ29udHJvbGxlci5oPgotI2luY2x1ZGUgPFdlYkNv
cmUvRnJhbWVTbmFwc2hvdHRpbmcuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0ZyYW1lVmlldy5oPgog
I2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0Lmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9J
bWFnZUJ1ZmZlci5oPgogI2luY2x1ZGUgPFdlYkNvcmUvTWFpbkZyYW1lLmg+CiAjaW5jbHVkZSA8
V2ViQ29yZS9QYWdlLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9QYWdlT3ZlcmxheUNvbnRyb2xsZXIu
aD4KQEAgLTI1OSwyOCArMjU4LDYgQEAgdm9pZCBGaW5kQ29udHJvbGxlcjo6ZmluZFN0cmluZ01h
dGNoZXMoY29uc3QgU3RyaW5nJiBzdHJpbmcsIEZpbmRPcHRpb25zIG9wdGlvbnMKICAgICBtX3dl
YlBhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6RGlkRmluZFN0cmluZ01hdGNoZXMo
c3RyaW5nLCBtYXRjaFJlY3RzLCBpbmRleEZvclNlbGVjdGlvbikpOwogfQogCi1zdGF0aWMgYm9v
bCBnZXRGaW5kSW5kaWNhdG9yQml0bWFwKEZyYW1lJiBmcmFtZSwgU2hhcmVhYmxlQml0bWFwOjpI
YW5kbGUmIGhhbmRsZSkKLXsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IHNuYXBz
aG90ID0gc25hcHNob3RTZWxlY3Rpb24oZnJhbWUsIFdlYkNvcmU6OlNuYXBzaG90T3B0aW9uc0Zv
cmNlQmxhY2tUZXh0KTsKLSAgICBpZiAoIXNuYXBzaG90KQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0KLSAgICBSZWZQdHI8U2hhcmVhYmxlQml0bWFwPiBmaW5kSW5kaWNhdG9yVGV4dEJhY2tpbmdT
dG9yZSA9IFNoYXJlYWJsZUJpdG1hcDo6Y3JlYXRlU2hhcmVhYmxlKHNuYXBzaG90LT5pbnRlcm5h
bFNpemUoKSwgU2hhcmVhYmxlQml0bWFwOjpTdXBwb3J0c0FscGhhKTsKLSAgICBpZiAoIWZpbmRJ
bmRpY2F0b3JUZXh0QmFja2luZ1N0b3JlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAv
LyBGSVhNRTogV2Ugc2hvdWxkIGNvbnNpZGVyIHVzaW5nIHN1YnBpeGVsIGFudGlhbGlhc2luZyBm
b3IgdGhlIHNuYXBzaG90Ci0gICAgLy8gaWYgd2UncmUgY29tcG9zaXRpbmcgdGhpcyBpbWFnZSBv
bnRvIGEgc29saWQgY29sb3IgKHRoZSBtb2Rlcm4gZmluZCBpbmRpY2F0b3Igc3R5bGUpLgotICAg
IGF1dG8gZ3JhcGhpY3NDb250ZXh0ID0gZmluZEluZGljYXRvclRleHRCYWNraW5nU3RvcmUtPmNy
ZWF0ZUdyYXBoaWNzQ29udGV4dCgpOwotICAgIGZsb2F0IGRldmljZVNjYWxlRmFjdG9yID0gZnJh
bWUucGFnZSgpLT5kZXZpY2VTY2FsZUZhY3RvcigpOwotICAgIGdyYXBoaWNzQ29udGV4dC0+c2Nh
bGUoRmxvYXRTaXplKGRldmljZVNjYWxlRmFjdG9yLCBkZXZpY2VTY2FsZUZhY3RvcikpOwotICAg
IGdyYXBoaWNzQ29udGV4dC0+ZHJhd0ltYWdlQnVmZmVyKHNuYXBzaG90LmdldCgpLCBDb2xvclNw
YWNlRGV2aWNlUkdCLCBGbG9hdFBvaW50KCkpOwotCi0gICAgaWYgKCFmaW5kSW5kaWNhdG9yVGV4
dEJhY2tpbmdTdG9yZS0+Y3JlYXRlSGFuZGxlKGhhbmRsZSkpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQogdm9pZCBGaW5kQ29udHJvbGxlcjo6Z2V0SW1hZ2VG
b3JGaW5kTWF0Y2godWludDMyX3QgbWF0Y2hJbmRleCkKIHsKICAgICBpZiAobWF0Y2hJbmRleCA+
PSBtX2ZpbmRNYXRjaGVzLnNpemUoKSkKQEAgLTI5MiwxMSArMjY5LDE2IEBAIHZvaWQgRmluZENv
bnRyb2xsZXI6OmdldEltYWdlRm9yRmluZE1hdGNoKHVpbnQzMl90IG1hdGNoSW5kZXgpCiAgICAg
VmlzaWJsZVNlbGVjdGlvbiBvbGRTZWxlY3Rpb24gPSBmcmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0
aW9uKCk7CiAgICAgZnJhbWUtPnNlbGVjdGlvbigpLnNldFNlbGVjdGlvbihWaXNpYmxlU2VsZWN0
aW9uKG1fZmluZE1hdGNoZXNbbWF0Y2hJbmRleF0uZ2V0KCkpKTsKIAotICAgIFNoYXJlYWJsZUJp
dG1hcDo6SGFuZGxlIGhhbmRsZTsKLSAgICBnZXRGaW5kSW5kaWNhdG9yQml0bWFwKCpmcmFtZSwg
aGFuZGxlKTsKKyAgICBSZWZQdHI8U2hhcmVhYmxlQml0bWFwPiBzZWxlY3Rpb25TbmFwc2hvdCA9
IFdlYkZyYW1lOjpmcm9tQ29yZUZyYW1lKCpmcmFtZSktPmNyZWF0ZVNlbGVjdGlvblNuYXBzaG90
KCk7CiAKICAgICBmcmFtZS0+c2VsZWN0aW9uKCkuc2V0U2VsZWN0aW9uKG9sZFNlbGVjdGlvbik7
CiAKKyAgICBpZiAoIXNlbGVjdGlvblNuYXBzaG90KQorICAgICAgICByZXR1cm47CisKKyAgICBT
aGFyZWFibGVCaXRtYXA6OkhhbmRsZSBoYW5kbGU7CisgICAgc2VsZWN0aW9uU25hcHNob3QtPmNy
ZWF0ZUhhbmRsZShoYW5kbGUpOworCiAgICAgaWYgKGhhbmRsZS5pc051bGwoKSkKICAgICAgICAg
cmV0dXJuOwogCkBAIC0zMzIsMjkgKzMxNCwxMiBAQCB2b2lkIEZpbmRDb250cm9sbGVyOjpoaWRl
RmluZFVJKCkKICNpZiAhUExBVEZPUk0oSU9TKQogYm9vbCBGaW5kQ29udHJvbGxlcjo6dXBkYXRl
RmluZEluZGljYXRvcihGcmFtZSYgc2VsZWN0ZWRGcmFtZSwgYm9vbCBpc1Nob3dpbmdPdmVybGF5
LCBib29sIHNob3VsZEFuaW1hdGUpCiB7Ci0gICAgSW50UmVjdCBzZWxlY3Rpb25SZWN0ID0gZW5j
bG9zaW5nSW50UmVjdChzZWxlY3RlZEZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbkJvdW5kcygp
KTsKLSAgICBTaGFyZWFibGVCaXRtYXA6OkhhbmRsZSBoYW5kbGU7Ci0gICAgaWYgKCFnZXRGaW5k
SW5kaWNhdG9yQml0bWFwKHNlbGVjdGVkRnJhbWUsIGhhbmRsZSkpCisgICAgUmVmUHRyPFRleHRJ
bmRpY2F0b3I+IGluZGljYXRvciA9IFRleHRJbmRpY2F0b3I6OmNyZWF0ZVdpdGhTZWxlY3Rpb25J
bkZyYW1lKCpXZWJGcmFtZTo6ZnJvbUNvcmVGcmFtZShzZWxlY3RlZEZyYW1lKSk7CisgICAgaWYg
KCFpbmRpY2F0b3IpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIC8vIFdlIHdhbnQgdGhl
IHNlbGVjdGlvbiByZWN0IGluIHdpbmRvdyBjb29yZGluYXRlcy4KLSAgICBJbnRSZWN0IHNlbGVj
dGlvblJlY3RJbldpbmRvd0Nvb3JkaW5hdGVzID0gc2VsZWN0ZWRGcmFtZS52aWV3KCktPmNvbnRl
bnRzVG9XaW5kb3coc2VsZWN0aW9uUmVjdCk7Ci0KLSAgICBWZWN0b3I8RmxvYXRSZWN0PiB0ZXh0
UmVjdHM7Ci0gICAgc2VsZWN0ZWRGcmFtZS5zZWxlY3Rpb24oKS5nZXRDbGlwcGVkVmlzaWJsZVRl
eHRSZWN0YW5nbGVzKHRleHRSZWN0cyk7Ci0KLSAgICAvLyBXZSB3YW50IHRoZSB0ZXh0IHJlY3Rz
IGluIHNlbGVjdGlvbiByZWN0IGNvb3JkaW5hdGVzLgotICAgIFZlY3RvcjxGbG9hdFJlY3Q+IHRl
eHRSZWN0c0luU2VsZWN0aW9uUmVjdENvb3JkaW5hdGVzOwotICAgIAotICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgdGV4dFJlY3RzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIEludFJlY3QgdGV4
dFJlY3RJblNlbGVjdGlvblJlY3RDb29yZGluYXRlcyA9IHNlbGVjdGVkRnJhbWUudmlldygpLT5j
b250ZW50c1RvV2luZG93KGVuY2xvc2luZ0ludFJlY3QodGV4dFJlY3RzW2ldKSk7Ci0gICAgICAg
IHRleHRSZWN0SW5TZWxlY3Rpb25SZWN0Q29vcmRpbmF0ZXMubW92ZSgtc2VsZWN0aW9uUmVjdElu
V2luZG93Q29vcmRpbmF0ZXMueCgpLCAtc2VsZWN0aW9uUmVjdEluV2luZG93Q29vcmRpbmF0ZXMu
eSgpKTsKLQotICAgICAgICB0ZXh0UmVjdHNJblNlbGVjdGlvblJlY3RDb29yZGluYXRlcy5hcHBl
bmQodGV4dFJlY3RJblNlbGVjdGlvblJlY3RDb29yZGluYXRlcyk7Ci0gICAgfSAgICAgICAgICAg
IAotCi0gICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlNldFRleHRJ
bmRpY2F0b3Ioc2VsZWN0aW9uUmVjdEluV2luZG93Q29vcmRpbmF0ZXMsIHRleHRSZWN0c0luU2Vs
ZWN0aW9uUmVjdENvb3JkaW5hdGVzLCBtX3dlYlBhZ2UtPmNvcmVQYWdlKCktPmRldmljZVNjYWxl
RmFjdG9yKCksIGhhbmRsZSwgIWlzU2hvd2luZ092ZXJsYXksIHNob3VsZEFuaW1hdGUpKTsKLSAg
ICBtX2ZpbmRJbmRpY2F0b3JSZWN0ID0gc2VsZWN0aW9uUmVjdEluV2luZG93Q29vcmRpbmF0ZXM7
CisgICAgbV9maW5kSW5kaWNhdG9yUmVjdCA9IGVuY2xvc2luZ0ludFJlY3QoaW5kaWNhdG9yLT5z
ZWxlY3Rpb25SZWN0SW5XaW5kb3dDb29yZGluYXRlcygpKTsKKyAgICBtX3dlYlBhZ2UtPnNlbmQo
TWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6U2V0VGV4dEluZGljYXRvcihpbmRpY2F0b3ItPmRhdGEo
KSwgIWlzU2hvd2luZ092ZXJsYXksIHNob3VsZEFuaW1hdGUpKTsKICAgICBtX2lzU2hvd2luZ0Zp
bmRJbmRpY2F0b3IgPSB0cnVlOwogCiAgICAgcmV0dXJuIHRydWU7CkBAIC0zNjUsOCArMzMwLDcg
QEAgdm9pZCBGaW5kQ29udHJvbGxlcjo6aGlkZUZpbmRJbmRpY2F0b3IoKQogICAgIGlmICghbV9p
c1Nob3dpbmdGaW5kSW5kaWNhdG9yKQogICAgICAgICByZXR1cm47CiAKLSAgICBTaGFyZWFibGVC
aXRtYXA6OkhhbmRsZSBoYW5kbGU7Ci0gICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJQ
YWdlUHJveHk6OlNldFRleHRJbmRpY2F0b3IoRmxvYXRSZWN0KCksIFZlY3RvcjxGbG9hdFJlY3Q+
KCksIG1fd2ViUGFnZS0+Y29yZVBhZ2UoKS0+ZGV2aWNlU2NhbGVGYWN0b3IoKSwgaGFuZGxlLCBm
YWxzZSwgdHJ1ZSkpOworICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5
OjpDbGVhclRleHRJbmRpY2F0b3IoZmFsc2UsIHRydWUpKTsKICAgICBtX2lzU2hvd2luZ0ZpbmRJ
bmRpY2F0b3IgPSBmYWxzZTsKICAgICBtX2ZvdW5kU3RyaW5nTWF0Y2hJbmRleCA9IC0xOwogICAg
IGRpZEhpZGVGaW5kSW5kaWNhdG9yKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYlBhZ2UvV2ViRnJhbWUuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJQYWdlL1dlYkZyYW1lLmNwcAppbmRleCA1NGUwYjdkLi4zZWZiYzk0IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViRnJhbWUuY3BwCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJGcmFtZS5jcHAKQEAgLTUwLDEyICs1MCwx
NCBAQAogI2luY2x1ZGUgPFdlYkNvcmUvRG9jdW1lbnRMb2FkZXIuaD4KICNpbmNsdWRlIDxXZWJD
b3JlL0V2ZW50SGFuZGxlci5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRnJhbWUuaD4KKyNpbmNsdWRl
IDxXZWJDb3JlL0ZyYW1lU25hcHNob3R0aW5nLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9GcmFtZVZp
ZXcuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0hUTUxGb3JtRWxlbWVudC5oPgogI2luY2x1ZGUgPFdl
YkNvcmUvSFRNTEZyYW1lT3duZXJFbGVtZW50Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9IVE1MSW5w
dXRFbGVtZW50Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9IVE1MTmFtZXMuaD4KICNpbmNsdWRlIDxX
ZWJDb3JlL0hUTUxUZXh0QXJlYUVsZW1lbnQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0ltYWdlQnVm
ZmVyLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9KU0NTU1N0eWxlRGVjbGFyYXRpb24uaD4KICNpbmNs
dWRlIDxXZWJDb3JlL0pTRWxlbWVudC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvSlNSYW5nZS5oPgpA
QCAtNzgxLDUgKzc4MywyNSBAQCBSZXRhaW5QdHI8Q0ZEYXRhUmVmPiBXZWJGcmFtZTo6d2ViQXJj
aGl2ZURhdGEoRnJhbWVGaWx0ZXJGdW5jdGlvbiBjYWxsYmFjaywgdm9pZAogICAgIHJldHVybiBh
cmNoaXZlLT5yYXdEYXRhUmVwcmVzZW50YXRpb24oKTsKIH0KICNlbmRpZgorCitQYXNzUmVmUHRy
PFNoYXJlYWJsZUJpdG1hcD4gV2ViRnJhbWU6OmNyZWF0ZVNlbGVjdGlvblNuYXBzaG90KCkKK3sK
KyAgICBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IHNuYXBzaG90ID0gc25hcHNob3RTZWxl
Y3Rpb24oKmNvcmVGcmFtZSgpLCBXZWJDb3JlOjpTbmFwc2hvdE9wdGlvbnNGb3JjZUJsYWNrVGV4
dCk7CisgICAgaWYgKCFzbmFwc2hvdCkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBS
ZWZQdHI8U2hhcmVhYmxlQml0bWFwPiBzaGFyZWRTbmFwc2hvdCA9IFNoYXJlYWJsZUJpdG1hcDo6
Y3JlYXRlU2hhcmVhYmxlKHNuYXBzaG90LT5pbnRlcm5hbFNpemUoKSwgU2hhcmVhYmxlQml0bWFw
OjpTdXBwb3J0c0FscGhhKTsKKyAgICBpZiAoIXNoYXJlZFNuYXBzaG90KQorICAgICAgICByZXR1
cm4gbnVsbHB0cjsKKworICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgY29uc2lkZXIgcHJvdmlkaW5n
IGEgd2F5IHRvIHVzZSBzdWJwaXhlbCBhbnRpYWxpYXNpbmcgZm9yIHRoZSBzbmFwc2hvdAorICAg
IC8vIGlmIHdlJ3JlIGNvbXBvc2l0aW5nIHRoaXMgaW1hZ2Ugb250byBhIHNvbGlkIGNvbG9yIChl
LmcuIHRoZSBtb2Rlcm4gZmluZCBpbmRpY2F0b3Igc3R5bGUpLgorICAgIGF1dG8gZ3JhcGhpY3ND
b250ZXh0ID0gc2hhcmVkU25hcHNob3QtPmNyZWF0ZUdyYXBoaWNzQ29udGV4dCgpOworICAgIGZs
b2F0IGRldmljZVNjYWxlRmFjdG9yID0gY29yZUZyYW1lKCktPnBhZ2UoKS0+ZGV2aWNlU2NhbGVG
YWN0b3IoKTsKKyAgICBncmFwaGljc0NvbnRleHQtPnNjYWxlKEZsb2F0U2l6ZShkZXZpY2VTY2Fs
ZUZhY3RvciwgZGV2aWNlU2NhbGVGYWN0b3IpKTsKKyAgICBncmFwaGljc0NvbnRleHQtPmRyYXdJ
bWFnZUJ1ZmZlcihzbmFwc2hvdC5nZXQoKSwgQ29sb3JTcGFjZURldmljZVJHQiwgRmxvYXRQb2lu
dCgpKTsKKworICAgIHJldHVybiBzaGFyZWRTbmFwc2hvdC5yZWxlYXNlKCk7Cit9CiAgICAgCiB9
IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvV2ViUGFnZS9XZWJGcmFtZS5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdl
L1dlYkZyYW1lLmgKaW5kZXggYjExNGIyZS4uNjBjOTQzNCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkZyYW1lLmgKKysrIGIvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkZyYW1lLmgKQEAgLTI3LDYgKzI3LDcgQEAKICNkZWZpbmUg
V2ViRnJhbWVfaAogCiAjaW5jbHVkZSAiQVBJT2JqZWN0LmgiCisjaW5jbHVkZSAiU2hhcmVhYmxl
Qml0bWFwLmgiCiAjaW5jbHVkZSAiV0tCYXNlLmgiCiAjaW5jbHVkZSAiV2ViRnJhbWVMb2FkZXJD
bGllbnQuaCIKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0Jhc2UuaD4KQEAgLTE0OSw2ICsx
NTAsOCBAQCBwdWJsaWM6CiAgICAgUmV0YWluUHRyPENGRGF0YVJlZj4gd2ViQXJjaGl2ZURhdGEo
RnJhbWVGaWx0ZXJGdW5jdGlvbiwgdm9pZCogY29udGV4dCk7CiAjZW5kaWYKIAorICAgIFBhc3NS
ZWZQdHI8U2hhcmVhYmxlQml0bWFwPiBjcmVhdGVTZWxlY3Rpb25TbmFwc2hvdCgpOworCiBwcml2
YXRlOgogICAgIHN0YXRpYyBQYXNzUmVmUHRyPFdlYkZyYW1lPiBjcmVhdGUoc3RkOjp1bmlxdWVf
cHRyPFdlYkZyYW1lTG9hZGVyQ2xpZW50Pik7CiAgICAgV2ViRnJhbWUoc3RkOjp1bmlxdWVfcHRy
PFdlYkZyYW1lTG9hZGVyQ2xpZW50Pik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW0gYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW0KaW5kZXggNGJiMmUyNS4uNWYwNDk2NSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9XZWJQYWdlTWFj
Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvV2ViUGFnZU1h
Yy5tbQpAQCAtMTA3NCw3ICsxMDc0LDcgQEAgU3RyaW5nIFdlYlBhZ2U6OnBsYXRmb3JtVXNlckFn
ZW50KGNvbnN0IFVSTCYpIGNvbnN0CiAgICAgcmV0dXJuIFN0cmluZygpOwogfQogCi1zdGF0aWMg
UmV0YWluUHRyPEREQWN0aW9uQ29udGV4dD4gc2NhbkZvckRhdGFEZXRlY3RlZEl0ZW1zKGNvbnN0
IEhpdFRlc3RSZXN1bHQmIGhpdFRlc3RSZXN1bHQsIEZsb2F0UmVjdCYgYWN0aW9uQm91bmRpbmdC
b3gpCitzdGF0aWMgUmV0YWluUHRyPEREQWN0aW9uQ29udGV4dD4gc2NhbkZvckRhdGFEZXRlY3Rl
ZEl0ZW1zKGNvbnN0IEhpdFRlc3RSZXN1bHQmIGhpdFRlc3RSZXN1bHQsIEZsb2F0UmVjdCYgZGV0
ZWN0ZWREYXRhQm91bmRpbmdCb3gsIFJlZlB0cjxSYW5nZT4mIGRldGVjdGVkRGF0YVJhbmdlKQog
ewogICAgIE5vZGUqIG5vZGUgPSBoaXRUZXN0UmVzdWx0LmlubmVyTm9uU2hhcmVkTm9kZSgpOwog
ICAgIGlmICghbm9kZSkKQEAgLTExMjUsMTEgKzExMjUsMzMgQEAgc3RhdGljIFJldGFpblB0cjxE
REFjdGlvbkNvbnRleHQ+IHNjYW5Gb3JEYXRhRGV0ZWN0ZWRJdGVtcyhjb25zdCBIaXRUZXN0UmVz
dWx0JgogICAgIFZlY3RvcjxGbG9hdFF1YWQ+IHF1YWRzOwogICAgIG1haW5SZXN1bHRSYW5nZS0+
dGV4dFF1YWRzKHF1YWRzKTsKICAgICBpZiAoIXF1YWRzLmlzRW1wdHkoKSkKLSAgICAgICAgYWN0
aW9uQm91bmRpbmdCb3ggPSBtYWluUmVzdWx0UmFuZ2UtPm93bmVyRG9jdW1lbnQoKS52aWV3KCkt
PmNvbnRlbnRzVG9XaW5kb3cocXVhZHNbMF0uZW5jbG9zaW5nQm91bmRpbmdCb3goKSk7CisgICAg
ICAgIGRldGVjdGVkRGF0YUJvdW5kaW5nQm94ID0gbWFpblJlc3VsdFJhbmdlLT5vd25lckRvY3Vt
ZW50KCkudmlldygpLT5jb250ZW50c1RvV2luZG93KHF1YWRzWzBdLmVuY2xvc2luZ0JvdW5kaW5n
Qm94KCkpOworCisgICAgZGV0ZWN0ZWREYXRhUmFuZ2UgPSBtYWluUmVzdWx0UmFuZ2U7CiAKICAg
ICByZXR1cm4gYWN0aW9uQ29udGV4dDsKIH0KIAorc3RhdGljIFBhc3NSZWZQdHI8VGV4dEluZGlj
YXRvcj4gdGV4dEluZGljYXRvckZvclJhbmdlKFJhbmdlKiByYW5nZSkKK3sKKyAgICBpZiAoIXJh
bmdlKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIEZyYW1lKiBmcmFtZSA9IHJhbmdl
LT5zdGFydENvbnRhaW5lcigpLT5kb2N1bWVudCgpLmZyYW1lKCk7CisKKyAgICBpZiAoIWZyYW1l
KQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIFZpc2libGVTZWxlY3Rpb24gb2xkU2Vs
ZWN0aW9uID0gZnJhbWUtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOworICAgIGZyYW1lLT5zZWxl
Y3Rpb24oKS5zZXRTZWxlY3Rpb24ocmFuZ2UpOworCisgICAgUmVmUHRyPFRleHRJbmRpY2F0b3I+
IGluZGljYXRvciA9IFRleHRJbmRpY2F0b3I6OmNyZWF0ZVdpdGhTZWxlY3Rpb25JbkZyYW1lKCpX
ZWJGcmFtZTo6ZnJvbUNvcmVGcmFtZSgqZnJhbWUpKTsKKworICAgIGZyYW1lLT5zZWxlY3Rpb24o
KS5zZXRTZWxlY3Rpb24ob2xkU2VsZWN0aW9uKTsKKworICAgIHJldHVybiBpbmRpY2F0b3IucmVs
ZWFzZSgpOworfQorCiB2b2lkIFdlYlBhZ2U6OnBlcmZvcm1BY3Rpb25NZW51SGl0VGVzdEF0TG9j
YXRpb24oV2ViQ29yZTo6RmxvYXRQb2ludCBsb2NhdGlvbkluVmlld0Nvb29yZGluYXRlcykKIHsK
ICAgICBsYXlvdXRJZk5lZWRlZCgpOwpAQCAtMTE2Myw5ICsxMTg1LDEzIEBAIHZvaWQgV2ViUGFn
ZTo6cGVyZm9ybUFjdGlvbk1lbnVIaXRUZXN0QXRMb2NhdGlvbihXZWJDb3JlOjpGbG9hdFBvaW50
IGxvY2F0aW9uSW5WCiAKICAgICAvLyBGSVhNRTogQXZvaWQgc2Nhbm5pbmcgaWYgd2Ugd2lsbCBq
dXN0IHRocm93IGF3YXkgdGhlIHJlc3VsdCAoZS5nLiB3ZSdyZSBvdmVyIGEgbGluaykuCiAgICAg
aWYgKGhpdFRlc3RSZXN1bHQuaW5uZXJOb2RlKCkgJiYgaGl0VGVzdFJlc3VsdC5pbm5lck5vZGUo
KS0+aXNUZXh0Tm9kZSgpKSB7Ci0gICAgICAgIEZsb2F0UmVjdCBhY3Rpb25Cb3VuZGluZ0JveDsK
LSAgICAgICAgYWN0aW9uTWVudVJlc3VsdC5hY3Rpb25Db250ZXh0ID0gc2NhbkZvckRhdGFEZXRl
Y3RlZEl0ZW1zKGhpdFRlc3RSZXN1bHQsIGFjdGlvbkJvdW5kaW5nQm94KTsKLSAgICAgICAgYWN0
aW9uTWVudVJlc3VsdC5hY3Rpb25Cb3VuZGluZ0JveCA9IGFjdGlvbkJvdW5kaW5nQm94OworICAg
ICAgICBGbG9hdFJlY3QgZGV0ZWN0ZWREYXRhQm91bmRpbmdCb3g7CisgICAgICAgIFJlZlB0cjxS
YW5nZT4gZGV0ZWN0ZWREYXRhUmFuZ2U7CisgICAgICAgIGFjdGlvbk1lbnVSZXN1bHQuYWN0aW9u
Q29udGV4dCA9IHNjYW5Gb3JEYXRhRGV0ZWN0ZWRJdGVtcyhoaXRUZXN0UmVzdWx0LCBkZXRlY3Rl
ZERhdGFCb3VuZGluZ0JveCwgZGV0ZWN0ZWREYXRhUmFuZ2UpOworICAgICAgICBpZiAoYWN0aW9u
TWVudVJlc3VsdC5hY3Rpb25Db250ZXh0KSB7CisgICAgICAgICAgICBhY3Rpb25NZW51UmVzdWx0
LmRldGVjdGVkRGF0YUJvdW5kaW5nQm94ID0gZGV0ZWN0ZWREYXRhQm91bmRpbmdCb3g7CisgICAg
ICAgICAgICBhY3Rpb25NZW51UmVzdWx0LmRldGVjdGVkRGF0YVRleHRJbmRpY2F0b3IgPSB0ZXh0
SW5kaWNhdG9yRm9yUmFuZ2UoZGV0ZWN0ZWREYXRhUmFuZ2UuZ2V0KCkpOworICAgICAgICB9CiAg
ICAgfQogCiAgICAgUmVmUHRyPEFQSTo6T2JqZWN0PiB1c2VyRGF0YTsK
</data>
<flag name="review"
          id="265703"
          type_id="1"
          status="+"
          setter="andersca"
    />
          </attachment>
      

    </bug>

</bugzilla>