<?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>122318</bug_id>
          
          <creation_ts>2013-10-03 22:00:28 -0700</creation_ts>
          <short_desc>FTL should use LLVM intrinsics for OSR exit, watchpoints, inline caches, and stack layout</short_desc>
          <delta_ts>2013-11-03 10:22:56 -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>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</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>
          <dependson>113647</dependson>
    
    <dependson>116189</dependson>
    
    <dependson>122487</dependson>
    
    <dependson>122739</dependson>
    
    <dependson>123219</dependson>
          <blocked>112840</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>barraclough</cc>
    
    <cc>ggaren</cc>
    
    <cc>mark.lam</cc>
    
    <cc>mhahnenberg</cc>
    
    <cc>msaboff</cc>
    
    <cc>nrotem</cc>
    
    <cc>oliver</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>936110</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-10-03 22:00:28 -0700</bug_when>
    <thetext>Patch and further description forthcoming.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>936257</commentid>
    <comment_count>1</comment_count>
      <attachid>213378</attachid>
    <who name="Andrew Trick">atrick</who>
    <bug_when>2013-10-04 11:12:28 -0700</bug_when>
    <thetext>Created attachment 213378
LLVM trunk patch to support new webkit intrinsics.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>937148</commentid>
    <comment_count>2</comment_count>
      <attachid>213605</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-10-07 11:39:40 -0700</bug_when>
    <thetext>Created attachment 213605
rebased LLVM patch

Just rebasing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>937855</commentid>
    <comment_count>3</comment_count>
    <who name="Mark Rowe (bdash)">mrowe</who>
    <bug_when>2013-10-09 02:37:00 -0700</bug_when>
    <thetext>Probably worth using the correct spellings of JavaScript and WebKit in the comments within the LLVM patch. You&apos;ve used &quot;Java Script&quot;, &quot;javascript&quot; and &quot;webkit&quot; in various places.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>942817</commentid>
    <comment_count>4</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-10-23 13:46:53 -0700</bug_when>
    <thetext>OK, it looks like we have GetById IC&apos;s and OSR exits working with stackmap/patchpoint.  So, as far as I can tell, those intrinsics Work As Advertised.  So lets get &apos;em landed in LLVM trunk!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>946376</commentid>
    <comment_count>5</comment_count>
      <attachid>215844</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-11-02 20:18:03 -0700</bug_when>
    <thetext>Created attachment 215844
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>946381</commentid>
    <comment_count>6</comment_count>
      <attachid>215845</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-11-02 20:54:41 -0700</bug_when>
    <thetext>Created attachment 215845
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>946450</commentid>
    <comment_count>7</comment_count>
      <attachid>215845</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2013-11-03 10:18:19 -0800</bug_when>
    <thetext>Comment on attachment 215845
the patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>946452</commentid>
    <comment_count>8</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-11-03 10:22:56 -0800</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/158535</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>213378</attachid>
            <date>2013-10-04 11:12:28 -0700</date>
            <delta_ts>2013-10-07 11:39:40 -0700</delta_ts>
            <desc>LLVM trunk patch to support new webkit intrinsics.</desc>
            <filename>llvm-webkit-trunk.diff</filename>
            <type>text/plain</type>
            <size>33251</size>
            <attacher name="Andrew Trick">atrick</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGx2bS9JUi9DYWxsaW5nQ29udi5oIGIvaW5jbHVkZS9sbHZt
L0lSL0NhbGxpbmdDb252LmgKaW5kZXggNTg1ZmM1ZS4uZjgwODc3NSAxMDA2NDQKLS0tIGEvaW5j
bHVkZS9sbHZtL0lSL0NhbGxpbmdDb252LmgKKysrIGIvaW5jbHVkZS9sbHZtL0lSL0NhbGxpbmdD
b252LmgKQEAgLTUxLDYgKzUxLDEyIEBAIG5hbWVzcGFjZSBDYWxsaW5nQ29udiB7CiAgICAgLy8g
KEhpUEUpLgogICAgIEhpUEUgPSAxMSwKIAorICAgIC8vIFdlYktpdCBKUyAtIENhbGxpbmcgY29u
dmVudGlvbiBmb3Igc3RhY2sgYmFzZWQgSmF2YSBTY3JpcHQgY2FsbHMKKyAgICBXZWJLaXRfSlMg
PSAxMiwKKworICAgIC8vIENhbGxpbmcgY29udmVudGlvbiBmb3IgZHluYW1pYyByZWdpc3RlciBi
YXNlZCBjYWxscyAodXNpbmcgc3RhY2ttYXBzKS4KKyAgICBBbnlSZWcgPSAxMywKKwogICAgIC8v
IFRhcmdldCAtIFRoaXMgaXMgdGhlIHN0YXJ0IG9mIHRoZSB0YXJnZXQtc3BlY2lmaWMgY2FsbGlu
ZyBjb252ZW50aW9ucywKICAgICAvLyBlLmcuIGZhc3RjYWxsIGFuZCB0aGlzY2FsbCBvbiBYODYu
CiAgICAgRmlyc3RUYXJnZXRDQyA9IDY0LApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9sbHZtL0lSL0lu
dHJpbnNpY3MuaCBiL2luY2x1ZGUvbGx2bS9JUi9JbnRyaW5zaWNzLmgKaW5kZXggYzgxZDExMC4u
NDczZTUyNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9sbHZtL0lSL0ludHJpbnNpY3MuaAorKysgYi9p
bmNsdWRlL2xsdm0vSVIvSW50cmluc2ljcy5oCkBAIC03Nyw3ICs3Nyw3IEBAIG5hbWVzcGFjZSBJ
bnRyaW5zaWMgewogICAvLy8gZ2V0SW50cmluc2ljSW5mb1RhYmxlRW50cmllcy4KICAgc3RydWN0
IElJVERlc2NyaXB0b3IgewogICAgIGVudW0gSUlURGVzY3JpcHRvcktpbmQgewotICAgICAgVm9p
ZCwgTU1YLCBNZXRhZGF0YSwgSGFsZiwgRmxvYXQsIERvdWJsZSwKKyAgICAgIFZvaWQsIFZhckFy
ZywgTU1YLCBNZXRhZGF0YSwgSGFsZiwgRmxvYXQsIERvdWJsZSwKICAgICAgIEludGVnZXIsIFZl
Y3RvciwgUG9pbnRlciwgU3RydWN0LAogICAgICAgQXJndW1lbnQsIEV4dGVuZFZlY0FyZ3VtZW50
LCBUcnVuY1ZlY0FyZ3VtZW50CiAgICAgfSBLaW5kOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9sbHZt
L0lSL0ludHJpbnNpY3MudGQgYi9pbmNsdWRlL2xsdm0vSVIvSW50cmluc2ljcy50ZAppbmRleCA1
N2M5OWQ5Li4zYmFjYzQ2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xsdm0vSVIvSW50cmluc2ljcy50
ZAorKysgYi9pbmNsdWRlL2xsdm0vSVIvSW50cmluc2ljcy50ZApAQCAtNDk4LDYgKzQ5OCwzMyBA
QCBkZWYgaW50X2NvbnZlcnR1cyAgOiBJbnRyaW5zaWM8W2xsdm1fYW55aW50X3R5XSwKIGRlZiBp
bnRfY29udmVydHV1ICA6IEludHJpbnNpYzxbbGx2bV9hbnlpbnRfdHldLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFtsbHZtX2FueWludF90eSwgbGx2bV9pMzJfdHksIGxsdm1faTMy
X3R5XT47CiAKKy8vIFRoaXMgaW50cmluc2ljIGltcGxlbWVudHMgYSB3ZWJraXQgc3RhY2sgbWFw
LiBUaGUgc3RhY2sgbWFwIHJlY29yZHMKKy8vIHRoZSBsb2NhdGlvbiBvZiBsaXZlIHZhcmlhYmxl
cyBhdCBpdHMgcG9pbnQgaW4gdGhlIGluc3RydWN0aW9uCisvLyBzdHJlYW0uIFRoZSBzdGFjayBt
YXAgZ2VuZXJhdGVzIG5vIGNvZGUgaW4gcGxhY2UsIGJ1dCBpdHMgb2Zmc2V0CisvLyBmcm9tIGZ1
bmN0aW9uIGVudHJ5IGlzIHN0b3JlZCBpbiB0aGUgc3RhY2sgbWFwLiBGdXJ0aGVybW9yZSwgaXQK
Ky8vIGd1YXJhbnRlZXMgYSBzaGFkb3cgb2YgaW5zdHJ1Y3Rpb25zIGZvbGxvd2luZyB0aGlzIGlu
c3RydWN0aW9uCisvLyBvZmZzZXQgZHVyaW5nIHdoaWNoIG5laXRoZXIgdGhlIGVuZCBvZiB0aGUg
ZnVuY3Rpb24gbm9yIGFub3RoZXIKKy8vIHN0YWNrbWFwIG1heSBvY2N1ci4gVGhpcyBhbGxvd3Mg
dGhlIHJ1bnRpbWUgdG8gcGF0Y2ggdGhlIGNvZGUgYXQKKy8vIHRoaXMgcG9pbnQgaW4gcmVzcG9u
c2UgdG8gc29tZSBhc3luY2hyb25vdXMgZXZlbnQuCisvLworLy8gaTMyIGlkLCBpMzIgbnVtU2hh
ZG93Qnl0ZXMsIFtsaXZlVmFyc10KK2RlZiBpbnRfd2Via2l0X3N0YWNrbWFwIDogSW50cmluc2lj
PFtdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xsdm1faTMyX3R5LCBs
bHZtX2kzMl90eSwgbGx2bV92YXJhcmdfdHldPjsKKworLy8gVGhpcyBpbnRyaW5zaWMgaXMgdXNl
ZCB0byBpbXBsZW1lbnQgd2Via2l0IHBhdGNocG9pbnRzIC0gcGF0Y2hhYmxlIGNhbGxzaXRlcwor
Ly8gZm9yIGNhbGxzIHRvIHRoZSBKUyBydW50aW1lLgorLy8gVE9ETzogTW92ZSB0byBkb2N1bWVu
dGF0aW9uIG9uY2UgdGhpcyBBUEkgaXMgc3RhYmxlCisvLyBpMzIgaWQsIGkzMiBudW1Ob3BCeXRl
cywgaTgqIHRhcmdldCwgaTMyIG51bUFyZ3MsIFthcmdzIGFuZCBsaXZlIHZhcnNdCitkZWYgaW50
X3dlYmtpdF9wYXRjaHBvaW50X3ZvaWQgOiBJbnRyaW5zaWM8W10sCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xsdm1faTMyX3R5LCBsbHZtX2kzMl90eSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGx2bV9wdHJfdHksIGxs
dm1faTMyX3R5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBs
bHZtX3ZhcmFyZ190eV0+OworZGVmIGludF93ZWJraXRfcGF0Y2hwb2ludF9pNjQgOiBJbnRyaW5z
aWM8W2xsdm1faTY0X3R5XSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFtsbHZtX2kzMl90eSwgbGx2bV9pMzJfdHksCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbGx2bV9wdHJfdHksIGxsdm1faTMyX3R5LAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxsdm1fdmFyYXJnX3R5XT47CisKKwogLy89
PT0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tPT09Ly8KIC8vIFRhcmdldC1zcGVjaWZpYyBpbnRyaW5zaWNzCiAvLz09
PS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS09PT0vLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9sbHZtL1RhcmdldC9UYXJn
ZXQudGQgYi9pbmNsdWRlL2xsdm0vVGFyZ2V0L1RhcmdldC50ZAppbmRleCBjMTVhNGFiLi4zYzc0
OWVjOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9sbHZtL1RhcmdldC9UYXJnZXQudGQKKysrIGIvaW5j
bHVkZS9sbHZtL1RhcmdldC9UYXJnZXQudGQKQEAgLTgwMCw2ICs4MDAsMTggQEAgZGVmIExJRkVU
SU1FX0VORCA6IEluc3RydWN0aW9uIHsKICAgbGV0IEFzbVN0cmluZyA9ICJMSUZFVElNRV9FTkQi
OwogICBsZXQgbmV2ZXJIYXNTaWRlRWZmZWN0cyA9IDE7CiB9CitkZWYgV0VCS0lUX1NUQUNLTUFQ
IDogSW5zdHJ1Y3Rpb24geworICBsZXQgT3V0T3BlcmFuZExpc3QgPSAob3V0cyk7CisgIGxldCBJ
bk9wZXJhbmRMaXN0ID0gKGlucyBpMzJpbW06JGlkLCBpMzJpbW06JG5ieXRlcywgdmFyaWFibGVf
b3BzKTsKKyAgbGV0IGlzQ2FsbCA9IDE7Cit9CitkZWYgV0VCS0lUX1BBVENIUE9JTlQgOiBJbnN0
cnVjdGlvbiB7CisgIGxldCBPdXRPcGVyYW5kTGlzdCA9IChvdXRzKTsKKyAgbGV0IEluT3BlcmFu
ZExpc3QgPSAoaW5zIGkzMmltbTokaWQsIGkzMmltbTokbmJ5dGVzLCB1bmtub3duOiRjYWxsZWUs
CisgICAgICAgICAgICAgICAgICAgICAgIGkzMmltbTokbmFyZ3MsIHZhcmlhYmxlX29wcyk7Cisg
IGxldCBpc0NhbGwgPSAxOworICBsZXQgbWF5TG9hZCA9IDE7Cit9CiB9CiAKIC8vPT09LS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLT09PS8vCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xsdm0vVGFyZ2V0L1RhcmdldE9wY29k
ZXMuaCBiL2luY2x1ZGUvbGx2bS9UYXJnZXQvVGFyZ2V0T3Bjb2Rlcy5oCmluZGV4IDUxNmUwNzAu
LjE3YjhhMTkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGx2bS9UYXJnZXQvVGFyZ2V0T3Bjb2Rlcy5o
CisrKyBiL2luY2x1ZGUvbGx2bS9UYXJnZXQvVGFyZ2V0T3Bjb2Rlcy5oCkBAIC05MSw3ICs5MSwx
OSBAQCBuYW1lc3BhY2UgVGFyZ2V0T3Bjb2RlIHsKIAogICAgIC8vLyBMaWZldGltZSBtYXJrZXJz
LgogICAgIExJRkVUSU1FX1NUQVJUID0gMTUsCi0gICAgTElGRVRJTUVfRU5EID0gMTYKKyAgICBM
SUZFVElNRV9FTkQgPSAxNiwKKworICAgIC8vLyBBIFN0YWNrbWFwIGluc3RydWN0aW9uIGNhcHR1
cmVzIHRoZSBsb2NhdGlvbiBvZiBsaXZlIHZhcmlhYmxlcyBhdCBpdHMKKyAgICAvLy8gcG9zaXRp
b24gaW4gdGhlIGluc3RydWN0aW9uIHN0cmVhbS4gSXQgaXMgZm9sbG93ZWQgYnkgYSBzaGFkb3cg
b2YgYnl0ZXMKKyAgICAvLy8gdGhhdCBtdXN0IGxpZSB3aXRoaW4gdGhlIGZ1bmN0aW9uIGFuZCBu
b3QgY29udGFpbiBhbm90aGVyIHN0YWNrbWFwLgorICAgIFdFQktJVF9TVEFDS01BUCA9IDE3LAor
CisgICAgLy8vIFBhdGNoYWJsZSBjYWxsIGluc3RydWN0aW9uIC0gdGhpcyBpbnN0cnVjdGlvbiBy
ZXByZXNlbnRzIGEgY2FsbCB0byBhCisgICAgLy8vIGNvbnN0YW50IGFkZHJlc3MsIGZvbGxvd2Vk
IGJ5IGEgc2VyaWVzIG9mIE5PUHMuIEl0IGlzIGludGVuZGVkIHRvCisgICAgLy8vIHN1cHBvcnQg
b3B0aW1pemF0aW9ucyBmb3IgZHluYW1pYyBsYW5ndWFnZXMgKHN1Y2ggYXMgamF2YXNjcmlwdCkg
dGhhdAorICAgIC8vLyByZXdyaXRlIGNhbGxzIHRvIHJ1bnRpbWVzIHdpdGggbW9yZSBlZmZpY2ll
bnQgY29kZSBzZXF1ZW5jZXMuCisgICAgLy8vIFRoaXMgYWxzbyBpbXBsaWVzIGEgc3RhY2sgbWFw
LgorICAgIFdFQktJVF9QQVRDSFBPSU5UID0gMTgKICAgfTsKIH0gLy8gZW5kIG5hbWVzcGFjZSBU
YXJnZXRPcGNvZGUKIH0gLy8gZW5kIG5hbWVzcGFjZSBsbHZtCmRpZmYgLS1naXQgYS9saWIvQXNt
UGFyc2VyL0xMTGV4ZXIuY3BwIGIvbGliL0FzbVBhcnNlci9MTExleGVyLmNwcAppbmRleCA5OWJm
ZjQ1Li5mOGFhMmY5IDEwMDY0NAotLS0gYS9saWIvQXNtUGFyc2VyL0xMTGV4ZXIuY3BwCisrKyBi
L2xpYi9Bc21QYXJzZXIvTExMZXhlci5jcHAKQEAgLTU1OSw2ICs1NTksOCBAQCBsbHRvazo6S2lu
ZCBMTExleGVyOjpMZXhJZGVudGlmaWVyKCkgewogICBLRVlXT1JEKGludGVsX29jbF9iaWNjKTsK
ICAgS0VZV09SRCh4ODZfNjRfc3lzdmNjKTsKICAgS0VZV09SRCh4ODZfNjRfd2luNjRjYyk7Cisg
IEtFWVdPUkQod2Via2l0X2pzY2MpOworICBLRVlXT1JEKGFueXJlZ2NjKTsKIAogICBLRVlXT1JE
KGNjKTsKICAgS0VZV09SRChjKTsKZGlmZiAtLWdpdCBhL2xpYi9Bc21QYXJzZXIvTExQYXJzZXIu
Y3BwIGIvbGliL0FzbVBhcnNlci9MTFBhcnNlci5jcHAKaW5kZXggYmRjNzkwNi4uMmI2ZWZlYiAx
MDA2NDQKLS0tIGEvbGliL0FzbVBhcnNlci9MTFBhcnNlci5jcHAKKysrIGIvbGliL0FzbVBhcnNl
ci9MTFBhcnNlci5jcHAKQEAgLTEzNzUsNiArMTM3NSw4IEBAIGJvb2wgTExQYXJzZXI6OlBhcnNl
T3B0aW9uYWxDYWxsaW5nQ29udihDYWxsaW5nQ29udjo6SUQgJkNDKSB7CiAgIGNhc2UgbGx0b2s6
Omt3X2ludGVsX29jbF9iaWNjOiBDQyA9IENhbGxpbmdDb252OjpJbnRlbF9PQ0xfQkk7IGJyZWFr
OwogICBjYXNlIGxsdG9rOjprd194ODZfNjRfc3lzdmNjOiAgQ0MgPSBDYWxsaW5nQ29udjo6WDg2
XzY0X1N5c1Y7IGJyZWFrOwogICBjYXNlIGxsdG9rOjprd194ODZfNjRfd2luNjRjYzogQ0MgPSBD
YWxsaW5nQ29udjo6WDg2XzY0X1dpbjY0OyBicmVhazsKKyAgY2FzZSBsbHRvazo6a3dfd2Via2l0
X2pzY2M6ICAgIENDID0gQ2FsbGluZ0NvbnY6OldlYktpdF9KUzsgYnJlYWs7CisgIGNhc2UgbGx0
b2s6Omt3X2FueXJlZ2NjOiAgICAgICBDQyA9IENhbGxpbmdDb252OjpBbnlSZWc7IGJyZWFrOwog
ICBjYXNlIGxsdG9rOjprd19jYzogewogICAgICAgdW5zaWduZWQgQXJiaXRyYXJ5Q0M7CiAgICAg
ICBMZXguTGV4KCk7CmRpZmYgLS1naXQgYS9saWIvQXNtUGFyc2VyL0xMVG9rZW4uaCBiL2xpYi9B
c21QYXJzZXIvTExUb2tlbi5oCmluZGV4IGUxMzgyZmQuLjMxNmYzZmQgMTAwNjQ0Ci0tLSBhL2xp
Yi9Bc21QYXJzZXIvTExUb2tlbi5oCisrKyBiL2xpYi9Bc21QYXJzZXIvTExUb2tlbi5oCkBAIC05
Miw2ICs5Miw4IEBAIG5hbWVzcGFjZSBsbHRvayB7CiAgICAga3dfcHR4X2tlcm5lbCwga3dfcHR4
X2RldmljZSwKICAgICBrd19zcGlyX2tlcm5lbCwga3dfc3Bpcl9mdW5jLAogICAgIGt3X3g4Nl82
NF9zeXN2Y2MsIGt3X3g4Nl82NF93aW42NGNjLAorICAgIGt3X3dlYmtpdF9qc2NjLAorICAgIGt3
X2FueXJlZ2NjLAogCiAgICAgLy8gQXR0cmlidXRlczoKICAgICBrd19hdHRyaWJ1dGVzLApkaWZm
IC0tZ2l0IGEvbGliL0NvZGVHZW4vQ01ha2VMaXN0cy50eHQgYi9saWIvQ29kZUdlbi9DTWFrZUxp
c3RzLnR4dAppbmRleCA1NmFhMzMwLi5lZjA1NTU4IDEwMDY0NAotLS0gYS9saWIvQ29kZUdlbi9D
TWFrZUxpc3RzLnR4dAorKysgYi9saWIvQ29kZUdlbi9DTWFrZUxpc3RzLnR4dApAQCAtMTA5LDYg
KzEwOSw3IEBAIGFkZF9sbHZtX2xpYnJhcnkoTExWTUNvZGVHZW4KICAgVHdvQWRkcmVzc0luc3Ry
dWN0aW9uUGFzcy5jcHAKICAgVW5yZWFjaGFibGVCbG9ja0VsaW0uY3BwCiAgIFZpcnRSZWdNYXAu
Y3BwCisgIFdlYktpdFN0YWNrTWFwcy5jcHAKICAgKQogCiBhZGRfZGVwZW5kZW5jaWVzKExMVk1D
b2RlR2VuIGludHJpbnNpY3NfZ2VuKQpkaWZmIC0tZ2l0IGEvbGliL0NvZGVHZW4vU2VsZWN0aW9u
REFHL1NlbGVjdGlvbkRBR0J1aWxkZXIuY3BwIGIvbGliL0NvZGVHZW4vU2VsZWN0aW9uREFHL1Nl
bGVjdGlvbkRBR0J1aWxkZXIuY3BwCmluZGV4IDA5NzFlOGEuLmY5MmIxYjMgMTAwNjQ0Ci0tLSBh
L2xpYi9Db2RlR2VuL1NlbGVjdGlvbkRBRy9TZWxlY3Rpb25EQUdCdWlsZGVyLmNwcAorKysgYi9s
aWIvQ29kZUdlbi9TZWxlY3Rpb25EQUcvU2VsZWN0aW9uREFHQnVpbGRlci5jcHAKQEAgLTUzMTEs
NiArNTMxMSwxNSBAQCBTZWxlY3Rpb25EQUdCdWlsZGVyOjp2aXNpdEludHJpbnNpY0NhbGwoY29u
c3QgQ2FsbEluc3QgJkksIHVuc2lnbmVkIEludHJpbnNpYykgewogICBjYXNlIEludHJpbnNpYzo6
ZG9ub3RoaW5nOgogICAgIC8vIGlnbm9yZQogICAgIHJldHVybiAwOworICBjYXNlIEludHJpbnNp
Yzo6d2Via2l0X3N0YWNrbWFwOiB7CisgICAgdmlzaXRXZWJLaXRTdGFja21hcChJKTsKKyAgICBy
ZXR1cm4gMDsKKyAgfQorICBjYXNlIEludHJpbnNpYzo6d2Via2l0X3BhdGNocG9pbnRfdm9pZDoK
KyAgY2FzZSBJbnRyaW5zaWM6OndlYmtpdF9wYXRjaHBvaW50X2k2NDogeworICAgIHZpc2l0V2Vi
S2l0UGF0Y2hwb2ludChJKTsKKyAgICByZXR1cm4gMDsKKyAgfQogICB9CiB9CiAKQEAgLTY3MjMs
NiArNjczMiwxNjUgQEAgdm9pZCBTZWxlY3Rpb25EQUdCdWlsZGVyOjp2aXNpdFZBQ29weShjb25z
dCBDYWxsSW5zdCAmSSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICBEQUcuZ2V0U3JjVmFs
dWUoSS5nZXRBcmdPcGVyYW5kKDEpKSkpOwogfQogCit2b2lkIFNlbGVjdGlvbkRBR0J1aWxkZXI6
OnZpc2l0V2ViS2l0U3RhY2ttYXAoY29uc3QgQ2FsbEluc3QgJkNJKSB7CisgIFNEVmFsdWUgQ2hh
aW4gPSBnZXRDb250cm9sUm9vdCgpOworICBTbWFsbFZlY3RvcjxTRFZhbHVlLCA4PiBPcHM7CisK
KyAgLy8gQWRkIHRoZSBJRCBhbmQgTnVtU2hhZG93Qnl0ZXMgY29uc3RhbnRzLgorICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgMjsgKytpKSB7CisgICAgU0RWYWx1ZSB0bXAgPSBnZXRWYWx1ZShD
SS5nZXRPcGVyYW5kKGkpKTsKKyAgICBPcHMucHVzaF9iYWNrKERBRy5nZXRUYXJnZXRDb25zdGFu
dCgKKyAgICAgICAgY2FzdDxDb25zdGFudFNETm9kZT4odG1wKS0+Z2V0WkV4dFZhbHVlKCksIE1W
VDo6aTMyKSk7CisgIH0KKworICAvLyBOb3cgcHVzaCBsaXZlIHZhcmlhYmxlcyBmb3IgdGhlIHN0
YWNrIG1hcC4KKyAgZm9yICh1bnNpZ25lZCBpID0gMiwgZSA9IENJLmdldE51bUFyZ09wZXJhbmRz
KCk7IGkgIT0gZTsgKytpKQorICAgIE9wcy5wdXNoX2JhY2soZ2V0VmFsdWUoQ0kuZ2V0QXJnT3Bl
cmFuZChpKSkpOworCisgIC8vIFB1c2ggdGhlIGNoYWluIChmaXJzdCBvcGVyYW5kKQorICBPcHMu
cHVzaF9iYWNrKENoYWluKTsKKworICBTRE5vZGUgKk5vZGUgPSBEQUcuZ2V0TWFjaGluZU5vZGUo
VGFyZ2V0T3Bjb2RlOjpXRUJLSVRfU1RBQ0tNQVAsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBnZXRDdXJTRExvYygpLCBNVlQ6Ok90aGVyLCBPcHMpOworICBDaGFpbiA9IFNE
VmFsdWUoTm9kZSwgMCk7CisgIERBRy5zZXRSb290KENoYWluKTsKK30KKwordm9pZCBTZWxlY3Rp
b25EQUdCdWlsZGVyOjp2aXNpdFdlYktpdFBhdGNocG9pbnQoY29uc3QgQ2FsbEluc3QgJkNJKSB7
CisgIC8vIEdlbmVyYXRlIGEgbmV3IGZha2UgaW50cmluc2ljIGRlZmluaXRpb24gdGhhdCBvbmx5
IGNvbnRhaW5zIHRoZSBhcmd1bWVudHMKKyAgLy8gdGhhdCBuZWVkIHRvIGJlIGxvd2VyZWQgYnkg
dGhlIGdpdmVuIGNhbGxpbmcgY29udmVudGlvbgorICBTbWFsbFZlY3RvcjxBdHRyaWJ1dGVTZXQs
IDg+IEF0dHJpYnV0ZXNWZWM7CisgIFNtYWxsVmVjdG9yPFZhbHVlICosIDg+IEFyZ3M7CisgIFNt
YWxsVmVjdG9yPFR5cGUgKiwgOD4gVHlwZXM7CisgIGNvbnN0IEF0dHJpYnV0ZVNldCAmQUwgPSBD
SS5nZXRBdHRyaWJ1dGVzKCk7CisKKyAgLy8gR2V0IHRoZSByZWFsIG51bWJlciBvZiBhcmd1bWVu
dHMgcGFydGljaXBhdGluZyBpbiB0aGUgY2FsbAorICB1bnNpZ25lZCBOdW1BcmdzID0KKyAgICAg
IGNhc3Q8Q29uc3RhbnRTRE5vZGU+KGdldFZhbHVlKENJLmdldEFyZ09wZXJhbmQoMykpKS0+Z2V0
WkV4dFZhbHVlKCk7CisKKyAgLy8gQWRkIGFueSByZXR1cm4gYXR0cmlidXRlcy4KKyAgaWYgKEFM
Lmhhc0F0dHJpYnV0ZXMoQXR0cmlidXRlU2V0OjpSZXR1cm5JbmRleCkpCisgICAgQXR0cmlidXRl
c1ZlYy5wdXNoX2JhY2soCisgICAgICAgIEF0dHJpYnV0ZVNldDo6Z2V0KENJLmdldENvbnRleHQo
KSwgQUwuZ2V0UmV0QXR0cmlidXRlcygpKSk7CisKKyAgYXNzZXJ0KENJLmdldE51bUFyZ09wZXJh
bmRzKCkgPj0gTnVtQXJncyArIDQgJiYKKyAgICAgICAgICJOb3QgZW5vdWdoIGFyZ3VtZW50cyBw
cm92aWRlZCB0byB0aGUgaW50cmluc2ljIik7CisKKyAgLy8gQ3JlYXRlIHRoZSBuZXcgYXJndW1l
bnQgbGlzdAorICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpICE9IE51bUFyZ3M7ICsraSkgeworICAg
IC8vIHNraXAgdGhlIGZpcnN0IDQgaW50cmluc2ljIGFyZ3VtZW50cyB0byBnZXQgdG8gdGhlIHJl
YWwgZnVuY3Rpb24KKyAgICAvLyBhcmd1bWVudHMKKyAgICB1bnNpZ25lZCBBcmdJbmRleCA9IGkg
KyA0OworICAgIHVuc2lnbmVkIEF0dHJJbmRleCA9IGkgKyA0ICsgMTsgLy8gQXR0cmlidXRlcyBm
b3IgYXJncyBzdGFydCBhdCBvZmZzZXQgMQorICAgIEFyZ3MucHVzaF9iYWNrKENJLmdldEFyZ09w
ZXJhbmQoQXJnSW5kZXgpKTsKKyAgICBUeXBlcy5wdXNoX2JhY2soQ0kuZ2V0QXJnT3BlcmFuZChB
cmdJbmRleCktPmdldFR5cGUoKSk7CisgICAgQXR0cmlidXRlU2V0IEF0dHJzID0gQUwuZ2V0UGFy
YW1BdHRyaWJ1dGVzKEF0dHJJbmRleCk7CisgICAgaWYgKEF0dHJzLmhhc0F0dHJpYnV0ZXMoQXR0
ckluZGV4KSkgeworICAgICAgQXR0ckJ1aWxkZXIgQShBdHRycywgQXR0ckluZGV4KTsKKyAgICAg
IEF0dHJpYnV0ZXNWZWMucHVzaF9iYWNrKAorICAgICAgICAgIEF0dHJpYnV0ZVNldDo6Z2V0KENJ
LmdldENvbnRleHQoKSwgQXJncy5zaXplKCksIEEpKTsKKyAgICB9CisgIH0KKworICAvLyBBZGQg
YW55IGZ1bmN0aW9uIGF0dHJpYnV0ZXMuCisgIGlmIChBTC5oYXNBdHRyaWJ1dGVzKEF0dHJpYnV0
ZVNldDo6RnVuY3Rpb25JbmRleCkpCisgICAgQXR0cmlidXRlc1ZlYy5wdXNoX2JhY2soCisgICAg
ICAgIEF0dHJpYnV0ZVNldDo6Z2V0KENJLmdldENvbnRleHQoKSwgQUwuZ2V0Rm5BdHRyaWJ1dGVz
KCkpKTsKKworICBjb25zdCBGdW5jdGlvbiAqRiA9IENJLmdldENhbGxlZEZ1bmN0aW9uKCk7Cisg
IFR5cGUgKlJldFR5ID0gRi0+Z2V0UmV0dXJuVHlwZSgpOworCisgIC8vIENvbnN0cnVjdCB0aGUg
bmV3IGZ1bmN0aW9uIHR5cGUgdXNpbmcgdGhlIHJlYWwgYXJndW1lbnRzLgorICAvLyBOT1RFOiBB
bHRob3VnaCB0aGUgaW50cmluc2ljIGlzIGRlZmluZWQgYXMgdmFyaWFibGUgYXJndW1lbnRzIGZ1
bmN0aW9uLCB0aGUKKyAgLy8gZmFrZSBmdW5jdGlvbiB3ZSBjcmVhdGUgaXMgbm90LgorICAvLyBU
T0RPOiBEbyB3ZSBuZWVkIHRvIHN1cHBvcnQgdmFyIGFyZ3MgaGVyZSB0b28/CisgIEZ1bmN0aW9u
VHlwZSAqTkZUeSA9IEZ1bmN0aW9uVHlwZTo6Z2V0KFJldFR5LCBUeXBlcywgLyppc1ZhckFyZyov
IGZhbHNlKTsKKworICAvLyBDcmVhdGUgdGhlIGZha2UgZnVuY3Rpb24uCisgIEZ1bmN0aW9uICpO
RiA9IEZ1bmN0aW9uOjpDcmVhdGUoTkZUeSwgRi0+Z2V0TGlua2FnZSgpLCBGLT5nZXROYW1lKCkp
OworICBORi0+Y29weUF0dHJpYnV0ZXNGcm9tKEYpOworCisgIC8vIFJlY29tcHV0ZSB0aGUgcGFy
YW1ldGVyIGF0dHJpYnV0ZXMgbGlzdCBiYXNlZCBvbiB0aGUgbmV3IGFyZ3VtZW50cyBmb3IKKyAg
Ly8gdGhlIGZ1bmN0aW9uLgorICBORi0+c2V0QXR0cmlidXRlcyhBdHRyaWJ1dGVTZXQ6OmdldChG
LT5nZXRDb250ZXh0KCksIEF0dHJpYnV0ZXNWZWMpKTsKKworICAvLyBDcmVhdGUgYSB0ZW1wb3Jh
cnkgY2FsbCBpbnN0cnVjdGlvbgorICBDYWxsSW5zdCAqSSA9IENhbGxJbnN0OjpDcmVhdGUoTkYs
IEFyZ3MsIENJLmdldE5hbWUoKSk7CisgIGNhc3Q8Q2FsbEluc3Q+KEkpLT5zZXRDYWxsaW5nQ29u
dihDSS5nZXRDYWxsaW5nQ29udigpKTsKKyAgY2FzdDxDYWxsSW5zdD4oSSkKKyAgICAgIC0+c2V0
QXR0cmlidXRlcyhBdHRyaWJ1dGVTZXQ6OmdldChJLT5nZXRDb250ZXh0KCksIEF0dHJpYnV0ZXNW
ZWMpKTsKKworICAvLyBMZXQgdGhlIHRhcmdldCBzcGVjaWZpYyBpbXBsZW1lbnRhdGlvbiBkbyB0
aGUgaGVhdnkgbGlmdGluZyBmb3IgdXMKKyAgTG93ZXJDYWxsVG8oSSwgZ2V0VmFsdWUoTkYpLCAv
KmlzVGFpbENhbGwqLyBmYWxzZSk7CisKKyAgLy8gVHJhbnNmZXIgdGhlIGluZnJvbWF0aW9uIGZv
cm0gdGhlIHRlbXBvcmFyeSBjYWxsIGluc3RydWN0aW9uIHRvIHRoZSBhY3R1YWwKKyAgLy8gb25l
CisgIGlmICghQ0kuZ2V0VHlwZSgpLT5pc1ZvaWRUeSgpKQorICAgIHNldFZhbHVlKCZDSSwgZ2V0
VmFsdWUoSSkpOworCisgIC8vIE5vdyBnZXQgcmlkIG9mIHRoZSB0ZW1wb3JhcnkgY2FsbCBpbnN0
cnVjdGlvbgorICBkZWxldGUgSTsKKworICAvLyBSZXBsYWNlIHRoZSB0YXJnZXQgc3BlY2lmaWMg
Y2FsbCBub2RlIHdpdGggdGhlIHdlYmtpdCBwYXRjaGFibGUgaW50cmluc2ljCisgIC8vIFRPRE86
IE5lZWQgdG8gY2hlY2sgaWYgdGhpcyBuZWVkcyB0byBiZSBtb3ZlZCBpbnRvIHRoZSBhY3R1YWwg
dGFyZ2V0CisgIC8vIHNwZWNpZmljIGNvZGUgaWYgQVJNIGRvZXMgdGhpbmdzIGRpZmZlcmVudGx5
CisgIFNETm9kZSAqQ2FsbFNlcXVlbmNlRW5kID0gREFHLmdldFJvb3QoKS5nZXROb2RlKCk7Cisg
IHdoaWxlIChDYWxsU2VxdWVuY2VFbmQtPmdldE9wY29kZSgpICE9IElTRDo6Q0FMTFNFUV9FTkQp
CisgICAgQ2FsbFNlcXVlbmNlRW5kID0gQ2FsbFNlcXVlbmNlRW5kLT5nZXRHbHVlZE5vZGUoKTsK
KworICBTRE5vZGUgKkNhbGwgPSBDYWxsU2VxdWVuY2VFbmQtPmdldEdsdWVkTm9kZSgpOworICBi
b29sIGhhc0dsdWUgPSBDYWxsLT5nZXRHbHVlZE5vZGUoKTsKKworICBTbWFsbFZlY3RvcjxTRFZh
bHVlLCA4PiBPcHM7CisKKyAgLy8gRmlyc3Qgd2UgcHV0IHRoZSBmaXJzdCBmb3VyIGFyZ3VtZW50
cyBvZiB0aGUgaW50cmluc2ljCisgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCAyOyArK2kpIHsK
KyAgICBTRFZhbHVlIHRtcCA9IGdldFZhbHVlKENJLmdldE9wZXJhbmQoaSkpOworICAgIE9wcy5w
dXNoX2JhY2soREFHLmdldFRhcmdldENvbnN0YW50KAorICAgICAgICBjYXN0PENvbnN0YW50U0RO
b2RlPih0bXApLT5nZXRaRXh0VmFsdWUoKSwgTVZUOjppMzIpKTsKKyAgfQorICB7CisgICAgU0RW
YWx1ZSB0bXAgPSBnZXRWYWx1ZShDSS5nZXRPcGVyYW5kKDIpKTsKKyAgICBPcHMucHVzaF9iYWNr
KAorICAgICAgREFHLmdldEludFB0ckNvbnN0YW50KGNhc3Q8Q29uc3RhbnRTRE5vZGU+KHRtcCkt
PmdldFpFeHRWYWx1ZSgpKSk7CisKKyAgICAvLyBBZGp1c3QgTnVtQXJncyB0byBhY2NvdW50IGZv
ciBhbnkgc3RhY2sgYXJncy4KKyAgICAvLyBDYWxsIE5vZGU6IENoYWluLCBUYXJnZXQsIHtBcmdz
fSwgUmVnTWFzaywgW0dsdWVdCisgICAgdW5zaWduZWQgTnVtQ2FsbEFyZ3MgPSBDYWxsLT5nZXRO
dW1PcGVyYW5kcygpIC0gKGhhc0dsdWUgPyA0IDogMyk7CisgICAgT3BzLnB1c2hfYmFjayhEQUcu
Z2V0VGFyZ2V0Q29uc3RhbnQoTnVtQ2FsbEFyZ3MsIE1WVDo6aTMyKSk7CisgIH0KKyAgLy8gTm93
IHB1c2ggdGhlIGFyZ3VtZW50cyBmcm9tIHRoZSBjYWxsIGluc3RydWN0aW9uCisgIFNETm9kZTo6
b3BfaXRlcmF0b3IgZSA9IGhhc0dsdWUgPyBDYWxsLT5vcF9lbmQoKS0yIDogQ2FsbC0+b3BfZW5k
KCktMTsKKyAgZm9yIChTRE5vZGU6Om9wX2l0ZXJhdG9yIGkgPSBDYWxsLT5vcF9iZWdpbigpKzI7
IGkgIT0gZTsgKytpKQorICAgIE9wcy5wdXNoX2JhY2soKmkpOworCisgIC8vIE5vdyBwdXNoIGFs
bCB0aGUgSlMgbGl2ZSBhcmdzCisgIGZvciAodW5zaWduZWQgaSA9IE51bUFyZ3MgKyA0LCBlID0g
Q0kuZ2V0TnVtQXJnT3BlcmFuZHMoKTsgaSAhPSBlOyArK2kpCisgICAgT3BzLnB1c2hfYmFjayhn
ZXRWYWx1ZShDSS5nZXRBcmdPcGVyYW5kKGkpKSk7CisKKyAgLy8gcHVzaCB0aGUgcmVnc2l0ZXIg
bWFzayBpbmZvCisgIGlmIChoYXNHbHVlKQorICAgIE9wcy5wdXNoX2JhY2soKihDYWxsLT5vcF9l
bmQoKS0yKSk7CisgIGVsc2UKKyAgICBPcHMucHVzaF9iYWNrKCooQ2FsbC0+b3BfZW5kKCktMSkp
OworCisgIC8vIFB1c2ggdGhlIGNoYWluIChmaXJzdCBvcGVyYW5kKQorICBPcHMucHVzaF9iYWNr
KCooQ2FsbC0+b3BfYmVnaW4oKSkpOworCisgIC8vIFB1c2ggdGhlIGdsdWUgZmxhZyAobGFzdCBv
cGVyYW5kKQorICBpZiAoaGFzR2x1ZSkKKyAgICBPcHMucHVzaF9iYWNrKCooQ2FsbC0+b3BfZW5k
KCktMSkpOworCisgIC8vIFJlcGxhY2UgdGhlIGV4aXRpbmcgdGFyZ2V0IHNwZWNpZmljIGNhbGwg
bm9kZSB3aXRoIHRoZSB3ZWJraXQgcGF0Y2hhYmxlCisgIC8vIGludHJpbnNpYyBpbi1wbGFjZS4g
VGhpcyB3YXkgd2UgZG9uJ3QgaGF2ZSB0byBjYWxsIFJlcGxhY2VBbGxVc2VzV2l0aC4KKyAgU0RW
VExpc3QgTm9kZVR5cyA9IERBRy5nZXRWVExpc3QoTVZUOjpPdGhlciwgTVZUOjpHbHVlKTsKKyAg
REFHLlNlbGVjdE5vZGVUbyhDYWxsLCBUYXJnZXRPcGNvZGU6OldFQktJVF9QQVRDSFBPSU5ULCBO
b2RlVHlzLCAmT3BzWzBdLAorICAgICAgICAgICAgICAgICAgIE9wcy5zaXplKCkpOworCisgIC8v
IExvd2VyQ2FsbCBzZXQgdGhlIHJvb3QgdG8gQ2FsbCwgYW5kIFNlbGVjdE5vZGUgbW9kaWZpZXMg
aXQgaW4tcGxhY2UsIHNvCisgIC8vIFdFQktJVF9QQVRDSFBPSU5UIGJlY29tZXMgdGhlIG5ldyBy
b290LgorfQorCiAvLy8gVGFyZ2V0TG93ZXJpbmc6Okxvd2VyQ2FsbFRvIC0gVGhpcyBpcyB0aGUg
ZGVmYXVsdCBMb3dlckNhbGxUbwogLy8vIGltcGxlbWVudGF0aW9uLCB3aGljaCBqdXN0IGNhbGxz
IExvd2VyQ2FsbC4KIC8vLyBGSVhNRTogV2hlbiBhbGwgdGFyZ2V0cyBhcmUKZGlmZiAtLWdpdCBh
L2xpYi9Db2RlR2VuL1NlbGVjdGlvbkRBRy9TZWxlY3Rpb25EQUdCdWlsZGVyLmggYi9saWIvQ29k
ZUdlbi9TZWxlY3Rpb25EQUcvU2VsZWN0aW9uREFHQnVpbGRlci5oCmluZGV4IDY0NjNlY2EuLjJi
ZTVjZmQgMTAwNjQ0Ci0tLSBhL2xpYi9Db2RlR2VuL1NlbGVjdGlvbkRBRy9TZWxlY3Rpb25EQUdC
dWlsZGVyLmgKKysrIGIvbGliL0NvZGVHZW4vU2VsZWN0aW9uREFHL1NlbGVjdGlvbkRBR0J1aWxk
ZXIuaApAQCAtNzUyLDYgKzc1Miw4IEBAIHByaXZhdGU6CiAgIHZvaWQgdmlzaXRWQUFyZyhjb25z
dCBWQUFyZ0luc3QgJkkpOwogICB2b2lkIHZpc2l0VkFFbmQoY29uc3QgQ2FsbEluc3QgJkkpOwog
ICB2b2lkIHZpc2l0VkFDb3B5KGNvbnN0IENhbGxJbnN0ICZJKTsKKyAgdm9pZCB2aXNpdFdlYktp
dFN0YWNrbWFwKGNvbnN0IENhbGxJbnN0ICZJKTsKKyAgdm9pZCB2aXNpdFdlYktpdFBhdGNocG9p
bnQoY29uc3QgQ2FsbEluc3QgJkkpOwogCiAgIHZvaWQgdmlzaXRVc2VyT3AxKGNvbnN0IEluc3Ry
dWN0aW9uICZJKSB7CiAgICAgbGx2bV91bnJlYWNoYWJsZSgiVXNlck9wMSBzaG91bGQgbm90IGV4
aXN0IGF0IGluc3RydWN0aW9uIHNlbGVjdGlvbiB0aW1lISIpOwpkaWZmIC0tZ2l0IGEvbGliL0lS
L0Z1bmN0aW9uLmNwcCBiL2xpYi9JUi9GdW5jdGlvbi5jcHAKaW5kZXggZjRiZjc3NC4uZThhMjQw
MiAxMDA2NDQKLS0tIGEvbGliL0lSL0Z1bmN0aW9uLmNwcAorKysgYi9saWIvSVIvRnVuY3Rpb24u
Y3BwCkBAIC00NTQsNyArNDU0LDggQEAgZW51bSBJSVRfSW5mbyB7CiAgIElJVF9FWFRFTkRfVkVD
X0FSRyA9IDIzLAogICBJSVRfVFJVTkNfVkVDX0FSRyA9IDI0LAogICBJSVRfQU5ZUFRSID0gMjUs
Ci0gIElJVF9WMSAgID0gMjYKKyAgSUlUX1YxICAgPSAyNiwKKyAgSUlUX1ZBUkFSRyA9IDI3CiB9
OwogCiAKQEAgLTQ2OCw2ICs0NjksOSBAQCBzdGF0aWMgdm9pZCBEZWNvZGVJSVRUeXBlKHVuc2ln
bmVkICZOZXh0RWx0LCBBcnJheVJlZjx1bnNpZ25lZCBjaGFyPiBJbmZvcywKICAgY2FzZSBJSVRf
RG9uZToKICAgICBPdXRwdXRUYWJsZS5wdXNoX2JhY2soSUlURGVzY3JpcHRvcjo6Z2V0KElJVERl
c2NyaXB0b3I6OlZvaWQsIDApKTsKICAgICByZXR1cm47CisgIGNhc2UgSUlUX1ZBUkFSRzoKKyAg
ICBPdXRwdXRUYWJsZS5wdXNoX2JhY2soSUlURGVzY3JpcHRvcjo6Z2V0KElJVERlc2NyaXB0b3I6
OlZhckFyZywgMCkpOworICAgIHJldHVybjsKICAgY2FzZSBJSVRfTU1YOgogICAgIE91dHB1dFRh
YmxlLnB1c2hfYmFjayhJSVREZXNjcmlwdG9yOjpnZXQoSUlURGVzY3JpcHRvcjo6TU1YLCAwKSk7
CiAgICAgcmV0dXJuOwpAQCAtNjEzLDYgKzYxNyw3IEBAIHN0YXRpYyBUeXBlICpEZWNvZGVGaXhl
ZFR5cGUoQXJyYXlSZWY8SW50cmluc2ljOjpJSVREZXNjcmlwdG9yPiAmSW5mb3MsCiAKICAgc3dp
dGNoIChELktpbmQpIHsKICAgY2FzZSBJSVREZXNjcmlwdG9yOjpWb2lkOiByZXR1cm4gVHlwZTo6
Z2V0Vm9pZFR5KENvbnRleHQpOworICBjYXNlIElJVERlc2NyaXB0b3I6OlZhckFyZzogcmV0dXJu
IFR5cGU6OmdldFZvaWRUeShDb250ZXh0KTsKICAgY2FzZSBJSVREZXNjcmlwdG9yOjpNTVg6IHJl
dHVybiBUeXBlOjpnZXRYODZfTU1YVHkoQ29udGV4dCk7CiAgIGNhc2UgSUlURGVzY3JpcHRvcjo6
TWV0YWRhdGE6IHJldHVybiBUeXBlOjpnZXRNZXRhZGF0YVR5KENvbnRleHQpOwogICBjYXNlIElJ
VERlc2NyaXB0b3I6OkhhbGY6IHJldHVybiBUeXBlOjpnZXRIYWxmVHkoQ29udGV4dCk7CmRpZmYg
LS1naXQgYS9saWIvSVIvVmVyaWZpZXIuY3BwIGIvbGliL0lSL1ZlcmlmaWVyLmNwcAppbmRleCBi
NmQxNDhiLi44OGRjZmE5IDEwMDY0NAotLS0gYS9saWIvSVIvVmVyaWZpZXIuY3BwCisrKyBiL2xp
Yi9JUi9WZXJpZmllci5jcHAKQEAgLTMxOSw2ICszMTksOCBAQCBuYW1lc3BhY2UgewogICAgIGJv
b2wgVmVyaWZ5SW50cmluc2ljVHlwZShUeXBlICpUeSwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgQXJyYXlSZWY8SW50cmluc2ljOjpJSVREZXNjcmlwdG9yPiAmSW5mb3MsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFNtYWxsVmVjdG9ySW1wbDxUeXBlKj4gJkFyZ1R5cyk7Cisg
ICAgYm9vbCBWZXJpZnlJbnRyaW5zaWNJc1ZhckFyZyhib29sIGlzVmFyQXJnLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgQXJyYXlSZWY8SW50cmluc2ljOjpJSVREZXNjcmlwdG9y
PiAmSW5mb3MpOwogICAgIGJvb2wgVmVyaWZ5QXR0cmlidXRlQ291bnQoQXR0cmlidXRlU2V0IEF0
dHJzLCB1bnNpZ25lZCBQYXJhbXMpOwogICAgIHZvaWQgVmVyaWZ5QXR0cmlidXRlVHlwZXMoQXR0
cmlidXRlU2V0IEF0dHJzLCB1bnNpZ25lZCBJZHgsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBib29sIGlzRnVuY3Rpb24sIGNvbnN0IFZhbHVlICpWKTsKQEAgLTIxMTYsNiArMjExOCw3
IEBAIGJvb2wgVmVyaWZpZXI6OlZlcmlmeUludHJpbnNpY1R5cGUoVHlwZSAqVHksCiAKICAgc3dp
dGNoIChELktpbmQpIHsKICAgY2FzZSBJSVREZXNjcmlwdG9yOjpWb2lkOiByZXR1cm4gIVR5LT5p
c1ZvaWRUeSgpOworICBjYXNlIElJVERlc2NyaXB0b3I6OlZhckFyZzogcmV0dXJuIHRydWU7CiAg
IGNhc2UgSUlURGVzY3JpcHRvcjo6TU1YOiAgcmV0dXJuICFUeS0+aXNYODZfTU1YVHkoKTsKICAg
Y2FzZSBJSVREZXNjcmlwdG9yOjpNZXRhZGF0YTogcmV0dXJuICFUeS0+aXNNZXRhZGF0YVR5KCk7
CiAgIGNhc2UgSUlURGVzY3JpcHRvcjo6SGFsZjogcmV0dXJuICFUeS0+aXNIYWxmVHkoKTsKQEAg
LTIxODAsNiArMjE4MywzMiBAQCBib29sIFZlcmlmaWVyOjpWZXJpZnlJbnRyaW5zaWNUeXBlKFR5
cGUgKlR5LAogICBsbHZtX3VucmVhY2hhYmxlKCJ1bmhhbmRsZWQiKTsKIH0KIAorLy8vIFZlcmlm
eSBpZiB0aGUgaW50cmluc2ljIGhhcyB2YXJpYWJsZSBhcmd1bWVudHMuIFRoaXMgbWV0aG9kIGlz
IGludGVuZGVkIHRvCisvLy8gYmUgY2FsbGVkIGFmdGVyIGFsbCB0aGUgZml4ZWQgYXJndW1lbnRz
IGhhdmUgYmVlbiB2ZXJpZmllZCBmaXJzdC4KKy8vLworLy8vIFRoaXMgbWV0aG9kIHJldHVybnMg
dHJ1ZSBvbiBlcnJvciBhbmQgZG9lcyBub3QgcHJpbnQgYW4gZXJyb3IgbWVzc2FnZS4KK2Jvb2wK
K1ZlcmlmaWVyOjpWZXJpZnlJbnRyaW5zaWNJc1ZhckFyZyhib29sIGlzVmFyQXJnLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFycmF5UmVmPEludHJpbnNpYzo6SUlURGVzY3Jp
cHRvcj4gJkluZm9zKSB7CisgIHVzaW5nIG5hbWVzcGFjZSBJbnRyaW5zaWM7CisKKyAgLy8gVGhl
cmUgYXJlIG5vIGRlc2NyaXB0b3JzIGxlZnQsIHNvIGl0IGNhbid0IGJlIHZhcmFyZworICBpZiAo
SW5mb3MuZW1wdHkoKSkKKyAgICByZXR1cm4gaXNWYXJBcmcgPyB0cnVlIDogZmFsc2U7CisKKyAg
Ly8gT25seSBleHBlY3Qgb25lIGRlc2NyaXB0b3IgYXQgdGhpcyBwb2ludAorICBpZiAoSW5mb3Mu
c2l6ZSgpICE9IDEpCisgICAgcmV0dXJuIHRydWU7CisKKyAgLy8gQ2hlY2sgdGhlIGRlc2NyaXB0
b3IgYW5kIHZlcmlmeQorICBJSVREZXNjcmlwdG9yIEQgPSBJbmZvcy5mcm9udCgpOworICBJbmZv
cyA9IEluZm9zLnNsaWNlKDEpOworICBpZiAoRC5LaW5kID09IElJVERlc2NyaXB0b3I6OlZhckFy
ZykKKyAgICByZXR1cm4gaXNWYXJBcmcgPyBmYWxzZSA6IHRydWU7CisKKyAgcmV0dXJuIHRydWU7
Cit9CisKIC8vLyB2aXNpdEludHJpbnNpY0Z1bmN0aW9uIC0gQWxsb3cgaW50cmluc2ljcyB0byBi
ZSB2ZXJpZmllZCBpbiBkaWZmZXJlbnQgd2F5cy4KIC8vLwogdm9pZCBWZXJpZmllcjo6dmlzaXRJ
bnRyaW5zaWNGdW5jdGlvbkNhbGwoSW50cmluc2ljOjpJRCBJRCwgQ2FsbEluc3QgJkNJKSB7CkBA
IC0yMTkwLDcgKzIyMTksNyBAQCB2b2lkIFZlcmlmaWVyOjp2aXNpdEludHJpbnNpY0Z1bmN0aW9u
Q2FsbChJbnRyaW5zaWM6OklEIElELCBDYWxsSW5zdCAmQ0kpIHsKICAgLy8gVmVyaWZ5IHRoYXQg
dGhlIGludHJpbnNpYyBwcm90b3R5cGUgbGluZXMgdXAgd2l0aCB3aGF0IHRoZSAudGQgZmlsZXMK
ICAgLy8gZGVzY3JpYmUuCiAgIEZ1bmN0aW9uVHlwZSAqSUZUeSA9IElGLT5nZXRGdW5jdGlvblR5
cGUoKTsKLSAgQXNzZXJ0MSghSUZUeS0+aXNWYXJBcmcoKSwgIkludHJpbnNpYyBwcm90b3R5cGVz
IGFyZSBub3QgdmFyYXJncyIsIElGKTsKKyAgYm9vbCBJc1ZhckFyZyA9IElGVHktPmlzVmFyQXJn
KCk7CiAKICAgU21hbGxWZWN0b3I8SW50cmluc2ljOjpJSVREZXNjcmlwdG9yLCA4PiBUYWJsZTsK
ICAgZ2V0SW50cmluc2ljSW5mb1RhYmxlRW50cmllcyhJRCwgVGFibGUpOwpAQCAtMjIwMiw2ICsy
MjMxLDE3IEBAIHZvaWQgVmVyaWZpZXI6OnZpc2l0SW50cmluc2ljRnVuY3Rpb25DYWxsKEludHJp
bnNpYzo6SUQgSUQsIENhbGxJbnN0ICZDSSkgewogICBmb3IgKHVuc2lnbmVkIGkgPSAwLCBlID0g
SUZUeS0+Z2V0TnVtUGFyYW1zKCk7IGkgIT0gZTsgKytpKQogICAgIEFzc2VydDEoIVZlcmlmeUlu
dHJpbnNpY1R5cGUoSUZUeS0+Z2V0UGFyYW1UeXBlKGkpLCBUYWJsZVJlZiwgQXJnVHlzKSwKICAg
ICAgICAgICAgICJJbnRyaW5zaWMgaGFzIGluY29ycmVjdCBhcmd1bWVudCB0eXBlISIsIElGKTsK
KworICAvLyBWZXJpZnkgaWYgdGhlIGludHJpbnNpYyBjYWxsIG1hdGNoZXMgdGhlIHZhcmFyZyBw
cm9wZXJ0eQorICBpZiAoSXNWYXJBcmcpIHsKKyAgICBBc3NlcnQxKCFWZXJpZnlJbnRyaW5zaWNJ
c1ZhckFyZyhJc1ZhckFyZywgVGFibGVSZWYpLAorICAgICAgICAgICAgIkludHJpbnNpYyB3YXMg
bm90IGRlZmluZWQgd2l0aCB2YXJpYWJsZSBhcmd1bWVudHMhIiwgSUYpOworICB9IGVsc2Ugewor
ICAgIEFzc2VydDEoIVZlcmlmeUludHJpbnNpY0lzVmFyQXJnKElzVmFyQXJnLCBUYWJsZVJlZiks
CisgICAgICAgICAgICAiQ2FsbHNpdGUgd2FzIG5vdCBkZWZpbmVkIHdpdGggdmFyaWFibGUgYXJn
dW1lbnRzISIsIElGKTsKKyAgfQorCisgIC8vIEFsbCBkZXNjcmlwdG9ycyBzaG91bGQgYmUgYWJz
b3JiZWQgYnkgbm93CiAgIEFzc2VydDEoVGFibGVSZWYuZW1wdHkoKSwgIkludHJpbnNpYyBoYXMg
dG9vIGZldyBhcmd1bWVudHMhIiwgSUYpOwogCiAgIC8vIE5vdyB0aGF0IHdlIGhhdmUgdGhlIGlu
dHJpbnNpYyBJRCBhbmQgdGhlIGFjdHVhbCBhcmd1bWVudCB0eXBlcyAoYW5kIHdlCmRpZmYgLS1n
aXQgYS9saWIvVGFyZ2V0L1g4Ni9YODZBc21QcmludGVyLmNwcCBiL2xpYi9UYXJnZXQvWDg2L1g4
NkFzbVByaW50ZXIuY3BwCmluZGV4IDdkN2ExYWQuLmE4NDgxMDkgMTAwNjQ0Ci0tLSBhL2xpYi9U
YXJnZXQvWDg2L1g4NkFzbVByaW50ZXIuY3BwCisrKyBiL2xpYi9UYXJnZXQvWDg2L1g4NkFzbVBy
aW50ZXIuY3BwCkBAIC01MTYsOSArNTE2LDYgQEAgYm9vbCBYODZBc21QcmludGVyOjpQcmludEFz
bU1lbW9yeU9wZXJhbmQoY29uc3QgTWFjaGluZUluc3RyICpNSSwKIH0KIAogdm9pZCBYODZBc21Q
cmludGVyOjpFbWl0U3RhcnRPZkFzbUZpbGUoTW9kdWxlICZNKSB7Ci0gIGlmIChTdWJ0YXJnZXQt
PmlzVGFyZ2V0RW52TWFjaG8oKSkKLSAgICBPdXRTdHJlYW1lci5Td2l0Y2hTZWN0aW9uKGdldE9i
akZpbGVMb3dlcmluZygpLmdldFRleHRTZWN0aW9uKCkpOwotCiAgIGlmIChTdWJ0YXJnZXQtPmlz
VGFyZ2V0Q09GRigpKSB7CiAgICAgLy8gRW1pdCBhbiBhYnNvbHV0ZSBAZmVhdC4wMCBzeW1ib2wu
ICBUaGlzIGFwcGVhcnMgdG8gYmUgc29tZSBraW5kIG9mCiAgICAgLy8gY29tcGlsZXIgZmVhdHVy
ZXMgYml0ZmllbGQgcmVhZCBieSBsaW5rLmV4ZS4KQEAgLTU0MCw3ICs1MzcsNiBAQCB2b2lkIFg4
NkFzbVByaW50ZXI6OkVtaXRTdGFydE9mQXNtRmlsZShNb2R1bGUgJk0pIHsKICAgfQogfQogCi0K
IHZvaWQgWDg2QXNtUHJpbnRlcjo6RW1pdEVuZE9mQXNtRmlsZShNb2R1bGUgJk0pIHsKICAgaWYg
KFN1YnRhcmdldC0+aXNUYXJnZXRFbnZNYWNobygpKSB7CiAgICAgLy8gQWxsIGRhcndpbiB0YXJn
ZXRzIHVzZSBtYWNoLW8uCkBAIC02MjYsNiArNjIyLDggQEAgdm9pZCBYODZBc21QcmludGVyOjpF
bWl0RW5kT2ZBc21GaWxlKE1vZHVsZSAmTSkgewogICAgICAgT3V0U3RyZWFtZXIuQWRkQmxhbmtM
aW5lKCk7CiAgICAgfQogCisgICAgV1NNLnNlcmlhbGl6ZVRvU3RhY2tNYXBzU2VjdGlvbigpOwor
CiAgICAgLy8gRnVubnkgRGFyd2luIGhhY2s6IFRoaXMgZmxhZyB0ZWxscyB0aGUgbGlua2VyIHRo
YXQgbm8gZ2xvYmFsIHN5bWJvbHMKICAgICAvLyBjb250YWluIGNvZGUgdGhhdCBmYWxscyB0aHJv
dWdoIHRvIG90aGVyIGdsb2JhbCBzeW1ib2xzIChlLmcuIHRoZSBvYnZpb3VzCiAgICAgLy8gaW1w
bGVtZW50YXRpb24gb2YgbXVsdGlwbGUgZW50cnkgcG9pbnRzKS4gIElmIHRoaXMgZG9lc24ndCBv
Y2N1ciwgdGhlCmRpZmYgLS1naXQgYS9saWIvVGFyZ2V0L1g4Ni9YODZBc21QcmludGVyLmggYi9s
aWIvVGFyZ2V0L1g4Ni9YODZBc21QcmludGVyLmgKaW5kZXggNmVlZDVjZS4uM2Y4NTkyMCAxMDA2
NDQKLS0tIGEvbGliL1RhcmdldC9YODYvWDg2QXNtUHJpbnRlci5oCisrKyBiL2xpYi9UYXJnZXQv
WDg2L1g4NkFzbVByaW50ZXIuaApAQCAtMTYsMTcgKzE2LDMxIEBACiAjaW5jbHVkZSAibGx2bS9D
b2RlR2VuL0FzbVByaW50ZXIuaCIKICNpbmNsdWRlICJsbHZtL0NvZGVHZW4vTWFjaGluZU1vZHVs
ZUluZm8uaCIKICNpbmNsdWRlICJsbHZtL0NvZGVHZW4vVmFsdWVUeXBlcy5oIgorI2luY2x1ZGUg
Imxsdm0vQ29kZUdlbi9XZWJLaXRTdGFja01hcHMuaCIKICNpbmNsdWRlICJsbHZtL1N1cHBvcnQv
Q29tcGlsZXIuaCIKIAogbmFtZXNwYWNlIGxsdm0gewogCiBjbGFzcyBNQ1N0cmVhbWVyOwogCisK
KwogY2xhc3MgTExWTV9MSUJSQVJZX1ZJU0lCSUxJVFkgWDg2QXNtUHJpbnRlciA6IHB1YmxpYyBB
c21QcmludGVyIHsKICAgY29uc3QgWDg2U3VidGFyZ2V0ICpTdWJ0YXJnZXQ7CisgIFdlYktpdFN0
YWNrTWFwcyBXU007CisKKyAgLy8gUGFyc2VzIG9wZXJhbmRzIG9mIFdFQktJVF9QQVRDSFBPSU5U
IGFuZCBXRUJLSVRfU1RBQ0tNQVAgdG8gcHJvZHVjZQorICAvLyBzdGFjayBtYXAgTG9jYXRpb24g
c3RydWN0dXJlcy4gUmV0dXJucyBhIHJlc3VsdCBsb2NhdGlvbiBhbmQgYW4KKyAgLy8gaXRlcmF0
b3IgdG8gdGhlIG9wZXJhbmQgaW1tZWRpYXRlbHkgZm9sbG93aW5nIHRoZSBvcGVyYW5kcyBjb25z
dW1lZC4KKyAgLy8KKyAgLy8gVGhpcyBtZXRob2QgaXMgaW1wbGVtZW50ZWQgaW4gWDg2TUNJbnN0
TG93ZXIuY3BwLgorICBzdGF0aWMgc3RkOjpwYWlyPFdlYktpdFN0YWNrTWFwczo6TG9jYXRpb24s
IE1hY2hpbmVJbnN0cjo6Y29uc3RfbW9wX2l0ZXJhdG9yPgorICAgIHdrc21PcGVyYW5kUGFyc2Vy
KE1hY2hpbmVJbnN0cjo6Y29uc3RfbW9wX2l0ZXJhdG9yIE1PSSwKKyAgICAgICAgICAgICAgICAg
ICAgICBNYWNoaW5lSW5zdHI6OmNvbnN0X21vcF9pdGVyYXRvciBNT0UpOworCiAgcHVibGljOgog
ICBleHBsaWNpdCBYODZBc21QcmludGVyKFRhcmdldE1hY2hpbmUgJlRNLCBNQ1N0cmVhbWVyICZT
dHJlYW1lcikKLSAgICA6IEFzbVByaW50ZXIoVE0sIFN0cmVhbWVyKSB7CisgICAgOiBBc21Qcmlu
dGVyKFRNLCBTdHJlYW1lciksIFdTTSgqdGhpcywgd2tzbU9wZXJhbmRQYXJzZXIpIHsKICAgICBT
dWJ0YXJnZXQgPSAmVE0uZ2V0U3VidGFyZ2V0PFg4NlN1YnRhcmdldD4oKTsKICAgfQogCmRpZmYg
LS1naXQgYS9saWIvVGFyZ2V0L1g4Ni9YODZDYWxsaW5nQ29udi50ZCBiL2xpYi9UYXJnZXQvWDg2
L1g4NkNhbGxpbmdDb252LnRkCmluZGV4IDM4ZTI1OTEuLjgyOWMyMjEgMTAwNjQ0Ci0tLSBhL2xp
Yi9UYXJnZXQvWDg2L1g4NkNhbGxpbmdDb252LnRkCisrKyBiL2xpYi9UYXJnZXQvWDg2L1g4NkNh
bGxpbmdDb252LnRkCkBAIC0xNTEsNiArMTUxLDEyIEBAIGRlZiBSZXRDQ19YODZfNjRfSGlQRSA6
IENhbGxpbmdDb252PFsKICAgQ0NJZlR5cGU8W2k2NF0sIENDQXNzaWduVG9SZWc8W1IxNSwgUkJQ
LCBSQVgsIFJEWF0+PgogXT47CiAKKy8vIFg4Ni02NCBXZWJLaXRfSlMgcmV0dXJuLXZhbHVlIGNv
bnZlbnRpb24uCitkZWYgUmV0Q0NfWDg2XzY0X1dlYktpdF9KUyA6IENhbGxpbmdDb252PFsKKyAg
Ly8gUmV0dXJuOiBSQVgKKyAgQ0NJZlR5cGU8W2k2NF0sIENDQXNzaWduVG9SZWc8W1JBWF0+Pgor
XT47CisKIC8vIFRoaXMgaXMgdGhlIHJvb3QgcmV0dXJuLXZhbHVlIGNvbnZlbnRpb24gZm9yIHRo
ZSBYODYtMzIgYmFja2VuZC4KIGRlZiBSZXRDQ19YODZfMzIgOiBDYWxsaW5nQ29udjxbCiAgIC8v
IElmIEZhc3RDQywgdXNlIFJldENDX1g4Nl8zMl9GYXN0LgpAQCAtMTY3LDYgKzE3Myw5IEBAIGRl
ZiBSZXRDQ19YODZfNjQgOiBDYWxsaW5nQ29udjxbCiAgIC8vIEhpUEUgdXNlcyBSZXRDQ19YODZf
NjRfSGlQRQogICBDQ0lmQ0M8IkNhbGxpbmdDb252OjpIaVBFIiwgQ0NEZWxlZ2F0ZVRvPFJldEND
X1g4Nl82NF9IaVBFPj4sCiAKKyAgLy8gSGFuZGxlIEphdmFTY3JpcHQgY2FsbHMuCisgIENDSWZD
QzwiQ2FsbGluZ0NvbnY6OldlYktpdF9KUyIsIENDRGVsZWdhdGVUbzxSZXRDQ19YODZfNjRfV2Vi
S2l0X0pTPj4sCisKICAgLy8gSGFuZGxlIGV4cGxpY2l0IENDIHNlbGVjdGlvbgogICBDQ0lmQ0M8
IkNhbGxpbmdDb252OjpYODZfNjRfV2luNjQiLCBDQ0RlbGVnYXRlVG88UmV0Q0NfWDg2X1dpbjY0
X0M+PiwKICAgQ0NJZkNDPCJDYWxsaW5nQ29udjo6WDg2XzY0X1N5c1YiLCBDQ0RlbGVnYXRlVG88
UmV0Q0NfWDg2XzY0X0M+PiwKQEAgLTMyOSw2ICszMzgsMTUgQEAgZGVmIENDX1g4Nl82NF9IaVBF
IDogQ2FsbGluZ0NvbnY8WwogICBDQ0lmVHlwZTxbaTMyLCBpNjQsIGYzMiwgZjY0XSwgQ0NBc3Np
Z25Ub1N0YWNrPDgsIDg+PgogXT47CiAKK2RlZiBDQ19YODZfNjRfV2ViS2l0X0pTIDogQ2FsbGlu
Z0NvbnY8WworICAvLyBQcm9tb3RlIGk4L2kxNi9pMzIgYXJndW1lbnRzIHRvIGk2NC4KKyAgQ0NJ
ZlR5cGU8W2k4LCBpMTYsIGkzMl0sIENDUHJvbW90ZVRvVHlwZTxpNjQ+PiwKKworICAvLyBJbnRl
Z2VyL0ZQIHZhbHVlcyBnZXQgc3RvcmVkIGluIHN0YWNrIHNsb3RzIHRoYXQgYXJlIDggYnl0ZXMg
aW4gc2l6ZSBhbmQKKyAgLy8gOC1ieXRlIGFsaWduZWQgaWYgdGhlcmUgYXJlIG5vIG1vcmUgcmVn
aXN0ZXJzIHRvIGhvbGQgdGhlbS4KKyAgQ0NJZlR5cGU8W2kzMiwgaTY0LCBmMzIsIGY2NF0sIEND
QXNzaWduVG9TdGFjazw4LCA4Pj4KK10+OworCiAvLz09PS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0vLwogLy8g
WDg2IEMgQ2FsbGluZyBDb252ZW50aW9uCiAvLz09PS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0vLwpAQCAtNTIw
LDYgKzUzOCw3IEBAIGRlZiBDQ19YODZfMzIgOiBDYWxsaW5nQ29udjxbCiBkZWYgQ0NfWDg2XzY0
IDogQ2FsbGluZ0NvbnY8WwogICBDQ0lmQ0M8IkNhbGxpbmdDb252OjpHSEMiLCBDQ0RlbGVnYXRl
VG88Q0NfWDg2XzY0X0dIQz4+LAogICBDQ0lmQ0M8IkNhbGxpbmdDb252OjpIaVBFIiwgQ0NEZWxl
Z2F0ZVRvPENDX1g4Nl82NF9IaVBFPj4sCisgIENDSWZDQzwiQ2FsbGluZ0NvbnY6OldlYktpdF9K
UyIsIENDRGVsZWdhdGVUbzxDQ19YODZfNjRfV2ViS2l0X0pTPj4sCiAgIENDSWZDQzwiQ2FsbGlu
Z0NvbnY6Olg4Nl82NF9XaW42NCIsIENDRGVsZWdhdGVUbzxDQ19YODZfV2luNjRfQz4+LAogICBD
Q0lmQ0M8IkNhbGxpbmdDb252OjpYODZfNjRfU3lzViIsIENDRGVsZWdhdGVUbzxDQ19YODZfNjRf
Qz4+LAogCmRpZmYgLS1naXQgYS9saWIvVGFyZ2V0L1g4Ni9YODZJbnN0ckluZm8uY3BwIGIvbGli
L1RhcmdldC9YODYvWDg2SW5zdHJJbmZvLmNwcAppbmRleCA2MjE2NjI3Li5jY2ZhMGY1IDEwMDY0
NAotLS0gYS9saWIvVGFyZ2V0L1g4Ni9YODZJbnN0ckluZm8uY3BwCisrKyBiL2xpYi9UYXJnZXQv
WDg2L1g4Nkluc3RySW5mby5jcHAKQEAgLTQxMjgsMTAgKzQxMjgsNDggQEAgYnJlYWtQYXJ0aWFs
UmVnRGVwZW5kZW5jeShNYWNoaW5lQmFzaWNCbG9jazo6aXRlcmF0b3IgTUksIHVuc2lnbmVkIE9w
TnVtLAogICBNSS0+YWRkUmVnaXN0ZXJLaWxsZWQoUmVnLCBUUkksIHRydWUpOwogfQogCitzdGF0
aWMgTWFjaGluZUluc3RyKiBmb2xkV2ViS2l0UGF0Y2hwb2ludChNYWNoaW5lRnVuY3Rpb24gJk1G
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWFjaGluZUluc3Ry
ICpNSSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFNt
YWxsVmVjdG9ySW1wbDx1bnNpZ25lZD4gJk9wcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGludCBGcmFtZUluZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgVGFyZ2V0SW5zdHJJbmZvICZUSUkpIHsKKyAgLy8gQXNz
dW1lIGZvciBub3cgdGhhdCB0aGVyZSdzIG9ubHkgb25lIG9wZXJhbmQgcGVyIGZyYW1lIGluZGV4
LgorICAvLyBGSVhNRTogU3VwcG9ydCBtdWx0aXBsZSByZWZlcmVuY2VzIHRvIHRoZSBzYW1lIEZJ
IC0gbWF5IGJlIG5lY2Vzc2FyeSBpZgorICAvLyAgICAgICAgYW55IG9wdGltaXphdGlvbnMgcGxh
Y2UgZGlmZmVyZW50IG9wZXJhbmRzIGluIHRoZSBzYW1lIEZJLgorICBhc3NlcnQoT3BzLnNpemUo
KSA9PSAxICYmICJNdWx0aXBsZSBvcGVyYW5kcyBmb3IgRkkuIik7CisKKyAgdW5zaWduZWQgRklP
cCA9IE9wc1swXTsKKyAgdW5zaWduZWQgTkFyZ3MgPSBNSS0+Z2V0T3BlcmFuZCgzKS5nZXRJbW0o
KTsKKyAgKHZvaWQpTkFyZ3M7CisgIGlmIChGSU9wIDwgTkFyZ3MgKyA0KQorICAgIHJldHVybiAw
OworCisgIE1hY2hpbmVJbnN0ciAqTmV3TUkgPQorICAgIE1GLkNyZWF0ZU1hY2hpbmVJbnN0cihU
SUkuZ2V0KFRhcmdldE9wY29kZTo6V0VCS0lUX1BBVENIUE9JTlQpLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICBNSS0+Z2V0RGVidWdMb2MoKSwgdHJ1ZSk7CisgIE1hY2hpbmVJbnN0ckJ1aWxk
ZXIgTUlCKE1GLCBOZXdNSSk7CisKKyAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IE1JLT5nZXRO
dW1PcGVyYW5kcygpOyArK2kpIHsKKyAgICBNYWNoaW5lT3BlcmFuZCAmTU8gPSBNSS0+Z2V0T3Bl
cmFuZChpKTsKKyAgICBpZiAoaSA9PSBGSU9wKSB7CisgICAgICBNSUIuYWRkT3BlcmFuZChNYWNo
aW5lT3BlcmFuZDo6Q3JlYXRlRkkoRnJhbWVJbmRleCkpOworICAgICAgYWRkT2Zmc2V0KE1JQiwg
MCk7CisgICAgfQorICAgIGVsc2UKKyAgICAgIE1JQi5hZGRPcGVyYW5kKE1PKTsKKyAgfQorCisg
IHJldHVybiBOZXdNSTsKK30KKwogTWFjaGluZUluc3RyKiBYODZJbnN0ckluZm86OmZvbGRNZW1v
cnlPcGVyYW5kSW1wbChNYWNoaW5lRnVuY3Rpb24gJk1GLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYWNoaW5lSW5zdHIgKk1JLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFNtYWxsVmVjdG9ySW1wbDx1
bnNpZ25lZD4gJk9wcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaW50IEZyYW1lSW5kZXgpIGNvbnN0IHsKKyAgLy8gU3BlY2lhbCBjYXNlIHdlYmtp
dC5wYXRjaHBvaW50LioKKyAgaWYgKE1JLT5nZXRPcGNvZGUoKSA9PSBUYXJnZXRPcGNvZGU6OldF
QktJVF9QQVRDSFBPSU5UKQorICAgIHJldHVybiBmb2xkV2ViS2l0UGF0Y2hwb2ludChNRiwgTUks
IE9wcywgRnJhbWVJbmRleCwgKnRoaXMpOworCiAgIC8vIENoZWNrIHN3aXRjaCBmbGFnCiAgIGlm
IChOb0Z1c2luZykgcmV0dXJuIE5VTEw7CiAKZGlmZiAtLWdpdCBhL2xpYi9UYXJnZXQvWDg2L1g4
Nk1DSW5zdExvd2VyLmNwcCBiL2xpYi9UYXJnZXQvWDg2L1g4Nk1DSW5zdExvd2VyLmNwcAppbmRl
eCBjN2MwMGI1Li44NTg3NzQyIDEwMDY0NAotLS0gYS9saWIvVGFyZ2V0L1g4Ni9YODZNQ0luc3RM
b3dlci5jcHAKKysrIGIvbGliL1RhcmdldC9YODYvWDg2TUNJbnN0TG93ZXIuY3BwCkBAIC0xNyw2
ICsxNyw3IEBACiAjaW5jbHVkZSAiWDg2Q09GRk1hY2hpbmVNb2R1bGVJbmZvLmgiCiAjaW5jbHVk
ZSAibGx2bS9BRFQvU21hbGxTdHJpbmcuaCIKICNpbmNsdWRlICJsbHZtL0NvZGVHZW4vTWFjaGlu
ZU1vZHVsZUluZm9JbXBscy5oIgorI2luY2x1ZGUgImxsdm0vQ29kZUdlbi9XZWJLaXRTdGFja01h
cHMuaCIKICNpbmNsdWRlICJsbHZtL0lSL1R5cGUuaCIKICNpbmNsdWRlICJsbHZtL01DL01DQXNt
SW5mby5oIgogI2luY2x1ZGUgImxsdm0vTUMvTUNDb250ZXh0LmgiCkBAIC02ODUsNiArNjg2LDEx
MyBAQCBzdGF0aWMgdm9pZCBMb3dlclRsc0FkZHIoTUNTdHJlYW1lciAmT3V0U3RyZWFtZXIsCiAg
ICAgLmFkZEV4cHIodGxzUmVmKSk7CiB9CiAKK3N0ZDo6cGFpcjxXZWJLaXRTdGFja01hcHM6Okxv
Y2F0aW9uLCBNYWNoaW5lSW5zdHI6OmNvbnN0X21vcF9pdGVyYXRvcj4KK1g4NkFzbVByaW50ZXI6
Ondrc21PcGVyYW5kUGFyc2VyKE1hY2hpbmVJbnN0cjo6Y29uc3RfbW9wX2l0ZXJhdG9yIE1PSSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1hY2hpbmVJbnN0cjo6Y29uc3RfbW9w
X2l0ZXJhdG9yIE1PRSkgeworCisgIHR5cGVkZWYgV2ViS2l0U3RhY2tNYXBzOjpMb2NhdGlvbiBM
b2NhdGlvbjsKKworICBjb25zdCBNYWNoaW5lT3BlcmFuZCAmTU9QID0gKk1PSTsKKyAgYXNzZXJ0
KCFNT1AuaXNSZWdNYXNrKCkgJiYgIU1PUC5pc0ltcGxpY2l0KCkgJiYKKyAgICAgICAgICJSZWdp
c3RlciBtYXNrIGFuZCBpbXBsaWNpdCBvcGVyYW5kcyBzaG91bGQgbm90IGJlIHByb2Nlc3NlZC4i
KTsKKworICAvLyBJZiB0aGUgbmV4dCBvcGVyYW5kIGlzIGEgcmVnaXN0ZXIgKG9yIHdlJ3JlIGF0
IHRoZSBlbmQgb2YgdGhlIHNlcXVlbmNlKQorICAvLyB0aGVuIHRoaXMgc2hvdWxkIGJlIGEgcmVn
aXN0ZXIgb3BlcmFuZC4gSWYgdGhlIG5leHQgb3BlcmFuZCBpcyBhbgorICAvLyBpbW1lZGlhdGUs
IHRoZW4gdGhpcyBpcyBhIHN0YWNrIHJlZmVyZW5jZS4KKyAgaWYgKGxsdm06Om5leHQoTU9JKSA9
PSBNT0UgfHwgbGx2bTo6bmV4dChNT0kpLT5pc1JlZygpKSB7CisgICAgYXNzZXJ0KE1PUC5pc1Jl
ZygpICYmICJFeHBlY3RlZCByZWdpc3RlciBvcGVyYW5kIGhlcmUuIik7CisgICAgYXNzZXJ0KFRh
cmdldFJlZ2lzdGVySW5mbzo6aXNQaHlzaWNhbFJlZ2lzdGVyKE1PUC5nZXRSZWcoKSkgJiYKKyAg
ICAgICAgICAgIlZpcnRyZWcgb3BlcmFuZHMgc2hvdWxkIGhhdmUgYmVlbiByZXdyaXR0ZW4gYmVm
b3JlIG5vdy4iKTsKKyAgICByZXR1cm4gc3RkOjptYWtlX3BhaXIoTG9jYXRpb24oTG9jYXRpb246
OlJlZ2lzdGVyLCBNT1AuZ2V0UmVnKCksIDApLCArK01PSSk7CisgIH0KKworICAvLyBlbHNlOgor
ICAvLyBXZSBwYXJzZWQgYSByZWdpc3RlciBmb2xsb3dlZCBieSBhIG5vbi1yZWdpc3Rlci4gQXNz
dW1lIHRoaXMgaXMgYSBzdGFjaworICAvLyByZWZlcmVuY2UuCisgIGNvbnN0IE1hY2hpbmVPcGVy
YW5kICZCYXNlID0gTU9QOworICBjb25zdCBNYWNoaW5lT3BlcmFuZCAmU2NhbGUgPSAqKCsrTU9J
KTsKKyAgY29uc3QgTWFjaGluZU9wZXJhbmQgJkluZGV4ID0gKigrK01PSSk7CisgIGNvbnN0IE1h
Y2hpbmVPcGVyYW5kICZEaXNwID0gKigrK01PSSk7CisgIGNvbnN0IE1hY2hpbmVPcGVyYW5kICZa
ZXJvUmVnID0gKigrK01PSSk7CisKKyAgLy8gU2FuaXR5IGNoZWNrIGZvciBzdXBwb3J0ZWQgb3Bl
cmFuZCBmb3JtYXQuCisgIGFzc2VydChCYXNlLmlzUmVnKCkgJiYKKyAgICAgICAgIFNjYWxlLmlz
SW1tKCkgJiYgU2NhbGUuZ2V0SW1tKCkgPT0gMSAmJgorICAgICAgICAgSW5kZXguaXNSZWcoKSAm
JiBJbmRleC5nZXRSZWcoKSA9PSAwICYmCisgICAgICAgICBEaXNwLmlzSW1tKCkgJiYgWmVyb1Jl
Zy5pc1JlZygpICYmIChaZXJvUmVnLmdldFJlZygpID09IDApICYmCisgICAgICAgICAiVW5zdXBw
b3J0ZWQgeDg2IG1lbW9yeSBvcGVyYW5kIHNlcXVlbmNlLiIpOworCisgIHJldHVybiBzdGQ6Om1h
a2VfcGFpcigKKyAgICAgICAgICAgTG9jYXRpb24oTG9jYXRpb246OkluZGlyZWN0LCBCYXNlLmdl
dFJlZygpLCBEaXNwLmdldEltbSgpKSwgKytNT0kpOworfQorCitzdGF0aWMgTWFjaGluZUluc3Ry
Ojpjb25zdF9tb3BfaXRlcmF0b3IKK2dldFN0YWNrTWFwRW5kTU9QKE1hY2hpbmVJbnN0cjo6Y29u
c3RfbW9wX2l0ZXJhdG9yIE1PSSwKKyAgICAgICAgICAgICAgICAgIE1hY2hpbmVJbnN0cjo6Y29u
c3RfbW9wX2l0ZXJhdG9yIE1PRSkgeworICBmb3IgKDsgTU9JICE9IE1PRTsgKytNT0kpCisgICAg
aWYgKE1PSS0+aXNSZWdNYXNrKCkgfHwgKE1PSS0+aXNSZWcoKSAmJiBNT0ktPmlzSW1wbGljaXQo
KSkpCisgICAgICBicmVhazsKKworICByZXR1cm4gTU9JOworfQorCitzdGF0aWMgdm9pZCBMb3dl
cldFQktJVF9TVEFDS01BUChNQ1N0cmVhbWVyICZPdXRTdHJlYW1lciwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFg4Nk1DSW5zdExvd2VyICZNQ0luc3RMb3dlcmluZywKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdlYktpdFN0YWNrTWFwcyAmV1NNLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgTWFjaGluZUluc3RyICZNSSkKK3sKKyAg
aW50NjRfdCBJRCA9IE1JLmdldE9wZXJhbmQoMCkuZ2V0SW1tKCk7CisgIHVuc2lnbmVkIE51bU5P
UEJ5dGVzID0gTUkuZ2V0T3BlcmFuZCgxKS5nZXRJbW0oKTsKKworICBhc3NlcnQoKGludDMyX3Qp
SUQgPT0gSUQgJiYgIlN0YWNrIG1hcHMgaG9sZCAzMi1iaXQgSURzIik7CisgIFdTTS5yZWNvcmRT
dGFja01hcChNSSwgSUQsIGxsdm06Om5leHQoTUkub3BlcmFuZHNfYmVnaW4oKSwgMiksCisgICAg
ICAgICAgICAgICAgICAgICBnZXRTdGFja01hcEVuZE1PUChNSS5vcGVyYW5kc19iZWdpbigpLCBN
SS5vcGVyYW5kc19lbmQoKSkpOworICAvLyBFbWl0IHBhZGRpbmcuCisgIC8vCisgIC8vIEZJWE1F
OiBUaGUgU3RhY2tNYXAgc2hhZG93IGRvZXMgbm90IGhhdmUgdG8gYmUgbm9wcy4gV2UganVzdCBu
ZWVkIHRvIGVuc3VyZQorICAvLyB0aGUgZnVuY3Rpb24gZG9lcyBlbmQgb3IgY29udGFpbiBhbm90
aGVyIHN0YWNrIG1hcCBiZWZvcmUgdGhlIHNoYWRvdy4gV2UKKyAgLy8gc2hvdWxkIGhhdmUgYSBw
cmVFbWl0IHBhc3MgZG8gdGhpcywgYW5kIGFkanVzdCB0aGUgc3RhY2ttYXAncyBzaGFkb3cgYnl0
ZXMKKyAgLy8gYWNjb3JkaW5nbHksIHVzdWFsbHkgZG93biB0byB6ZXJvIGJ5dGVzLiBUaGlzIGlt
cGxlbWVudGF0aW9uIHdvbid0IGFjdHVhbGx5CisgIC8vIG5lZWQgdG8gY2hhbmdlLgorICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgTnVtTk9QQnl0ZXM7ICsraSkKKyAgICBPdXRTdHJlYW1lci5F
bWl0SW5zdHJ1Y3Rpb24oTUNJbnN0QnVpbGRlcihYODY6Ok5PT1ApKTsKK30KKworc3RhdGljIHZv
aWQgTG93ZXJXRUJLSVRfUEFUQ0hQT0lOVChNQ1N0cmVhbWVyICZPdXRTdHJlYW1lciwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWDg2TUNJbnN0TG93ZXIgJk1DSW5zdExvd2Vy
aW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJLaXRTdGFja01hcHMg
JldTTSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgTWFjaGluZUlu
c3RyICZNSSkKK3sKKyAgaW50NjRfdCBJRCA9IE1JLmdldE9wZXJhbmQoMCkuZ2V0SW1tKCk7Cisg
IGFzc2VydCgoaW50MzJfdClJRCA9PSBJRCAmJiAiU3RhY2sgbWFwcyBob2xkIDMyLWJpdCBJRHMi
KTsKKworICAvLyBHZXQgdGhlIG51bWJlciBvZiBhcmd1bWVudHMgcGFydGljaXBhdGluZyBpbiB0
aGUgY2FsbC4gVGhpcyBudW1iZXIgd2FzCisgIC8vIGFkanVzdGVkIGR1cmluZyBjYWxsIGxvd2Vy
aW5nIGJ5IHN1YnRyYWN0aW5nIHN0YWNrIGFyZ3MuCisgIC8vCisgIC8vIFRPRE86IEZvciBBbnlS
ZWdDQywgdGhlIGNhbGwgYXJndW1lbnRzIGFsc28gbmVlZCBzdGFjayBtYXAgZW50cmllcy4KKyAg
aW50NjRfdCBTdGFja01hcElkeCA9IE1JLmdldE9wZXJhbmQoMykuZ2V0SW1tKCkgKyA0OworICBh
c3NlcnQoU3RhY2tNYXBJZHggPD0gTUkuZ2V0TnVtT3BlcmFuZHMoKSAmJiAiUGF0Y2hwb2ludCBk
cm9wcGVkIGFyZ3MuIik7CisKKyAgV1NNLnJlY29yZFN0YWNrTWFwKE1JLCBJRCwgbGx2bTo6bmV4
dChNSS5vcGVyYW5kc19iZWdpbigpLCBTdGFja01hcElkeCksCisgICAgICAgICAgICAgICAgICAg
ICBnZXRTdGFja01hcEVuZE1PUChNSS5vcGVyYW5kc19iZWdpbigpLCBNSS5vcGVyYW5kc19lbmQo
KSkpOworCisgIC8vIEVtaXQgY2FsbC4gV2UgbmVlZCB0byBrbm93IGhvdyBtYW55IGJ5dGVzIHdl
IGVuY29kZWQgaGVyZS4KKyAgLy8KKyAgLy8gRklYTUU6IEFsc28gZW5jb2RlIHRoZSB0YXJnZXQg
YWRkcmVzcyBtYXRlcmlhbGl6YXRpb24gaGVyZSBhcyBhIDEwLWJ5dGUKKyAgLy8gbW92YWJzcS4g
Q2hhbmdlIHRoZSB0YXJnZXQgb3BlcmFuZCBmcm9tIHJlZ2lzdGVyIHRvIGltbWVkaWF0ZS4KKyAg
dW5zaWduZWQgRW5jb2RlZEJ5dGVzID0gMjsKKyAgT3V0U3RyZWFtZXIuRW1pdEluc3RydWN0aW9u
KE1DSW5zdEJ1aWxkZXIoWDg2OjpDQUxMNjRyKQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAuYWRkUmVnKE1JLmdldE9wZXJhbmQoMikuZ2V0UmVnKCkpKTsKKworICAvLyBFbWl0IHBh
ZGRpbmcuCisgIHVuc2lnbmVkIE51bU5PUEJ5dGVzID0gTUkuZ2V0T3BlcmFuZCgxKS5nZXRJbW0o
KTsKKyAgYXNzZXJ0KE51bU5PUEJ5dGVzID49IEVuY29kZWRCeXRlcyAmJgorICAgICAgICAgIndl
YmtpdC5wYXRjaHBvaW50IGNhbid0IHJlcXVlc3Qgc2l6ZSBsZXNzIHRoYW4gdGhlIGxlbmd0aCBv
ZiBhIGNhbGwiKTsKKworICBmb3IgKHVuc2lnbmVkIGkgPSBFbmNvZGVkQnl0ZXM7IGkgPCBOdW1O
T1BCeXRlczsgKytpKQorICAgIE91dFN0cmVhbWVyLkVtaXRJbnN0cnVjdGlvbihNQ0luc3RCdWls
ZGVyKFg4Njo6Tk9PUCkpOworfQorCiB2b2lkIFg4NkFzbVByaW50ZXI6OkVtaXRJbnN0cnVjdGlv
bihjb25zdCBNYWNoaW5lSW5zdHIgKk1JKSB7CiAgIFg4Nk1DSW5zdExvd2VyIE1DSW5zdExvd2Vy
aW5nKE1hbmcsICpNRiwgKnRoaXMpOwogICBzd2l0Y2ggKE1JLT5nZXRPcGNvZGUoKSkgewpAQCAt
Nzc0LDYgKzg4MiwxMiBAQCB2b2lkIFg4NkFzbVByaW50ZXI6OkVtaXRJbnN0cnVjdGlvbihjb25z
dCBNYWNoaW5lSW5zdHIgKk1JKSB7CiAgICAgICAuYWRkRXhwcihEb3RFeHByKSk7CiAgICAgcmV0
dXJuOwogICB9CisKKyAgY2FzZSBUYXJnZXRPcGNvZGU6OldFQktJVF9TVEFDS01BUDoKKyAgICBy
ZXR1cm4gTG93ZXJXRUJLSVRfU1RBQ0tNQVAoT3V0U3RyZWFtZXIsIE1DSW5zdExvd2VyaW5nLCBX
U00sICpNSSk7CisKKyAgY2FzZSBUYXJnZXRPcGNvZGU6OldFQktJVF9QQVRDSFBPSU5UOgorICAg
IHJldHVybiBMb3dlcldFQktJVF9QQVRDSFBPSU5UKE91dFN0cmVhbWVyLCBNQ0luc3RMb3dlcmlu
ZywgV1NNLCAqTUkpOwogICB9CiAKICAgTUNJbnN0IFRtcEluc3Q7CmRpZmYgLS1naXQgYS9saWIv
VGFyZ2V0L1g4Ni9YODZSZWdpc3RlckluZm8uY3BwIGIvbGliL1RhcmdldC9YODYvWDg2UmVnaXN0
ZXJJbmZvLmNwcAppbmRleCAwOTIzMzEwLi4xZmQ1ODRiIDEwMDY0NAotLS0gYS9saWIvVGFyZ2V0
L1g4Ni9YODZSZWdpc3RlckluZm8uY3BwCisrKyBiL2xpYi9UYXJnZXQvWDg2L1g4NlJlZ2lzdGVy
SW5mby5jcHAKQEAgLTI5OCw3ICsyOTgsNyBAQCBYODZSZWdpc3RlckluZm86OmdldENhbGxQcmVz
ZXJ2ZWRNYXNrKENhbGxpbmdDb252OjpJRCBDQykgY29uc3QgewogICAgIHJldHVybiBDU1JfTm9S
ZWdzX1JlZ01hc2s7CiAgIGlmICghSXM2NEJpdCkKICAgICByZXR1cm4gQ1NSXzMyX1JlZ01hc2s7
Ci0gIGlmIChDQyA9PSBDYWxsaW5nQ29udjo6Q29sZCkKKyAgaWYgKENDID09IENhbGxpbmdDb252
OjpDb2xkIHx8IENDID09IENhbGxpbmdDb252OjpXZWJLaXRfSlMpCiAgICAgcmV0dXJuIENTUl9N
b3N0UmVnc182NF9SZWdNYXNrOwogICBpZiAoSXNXaW42NCkKICAgICByZXR1cm4gQ1NSX1dpbjY0
X1JlZ01hc2s7CmRpZmYgLS1naXQgYS91dGlscy9UYWJsZUdlbi9Db2RlR2VuVGFyZ2V0LmNwcCBi
L3V0aWxzL1RhYmxlR2VuL0NvZGVHZW5UYXJnZXQuY3BwCmluZGV4IGNkMGI4YzcuLmI0M2E3MDQg
MTAwNjQ0Ci0tLSBhL3V0aWxzL1RhYmxlR2VuL0NvZGVHZW5UYXJnZXQuY3BwCisrKyBiL3V0aWxz
L1RhYmxlR2VuL0NvZGVHZW5UYXJnZXQuY3BwCkBAIC0zMjEsNiArMzIxLDggQEAgdm9pZCBDb2Rl
R2VuVGFyZ2V0OjpDb21wdXRlSW5zdHJzQnlFbnVtKCkgY29uc3QgewogICAgICJCVU5ETEUiLAog
ICAgICJMSUZFVElNRV9TVEFSVCIsCiAgICAgIkxJRkVUSU1FX0VORCIsCisgICAgIldFQktJVF9T
VEFDS01BUCIsCisgICAgIldFQktJVF9QQVRDSFBPSU5UIiwKICAgICAwCiAgIH07CiAgIGNvbnN0
IERlbnNlTWFwPGNvbnN0IFJlY29yZCosIENvZGVHZW5JbnN0cnVjdGlvbio+ICZJbnN0cyA9IGdl
dEluc3RydWN0aW9ucygpOwpkaWZmIC0tZ2l0IGEvdXRpbHMvVGFibGVHZW4vSW50cmluc2ljRW1p
dHRlci5jcHAgYi91dGlscy9UYWJsZUdlbi9JbnRyaW5zaWNFbWl0dGVyLmNwcAppbmRleCBmNmVh
NjljLi42NTMxZGNiIDEwMDY0NAotLS0gYS91dGlscy9UYWJsZUdlbi9JbnRyaW5zaWNFbWl0dGVy
LmNwcAorKysgYi91dGlscy9UYWJsZUdlbi9JbnRyaW5zaWNFbWl0dGVyLmNwcApAQCAtMjYxLDcg
KzI2MSw4IEBAIGVudW0gSUlUX0luZm8gewogICBJSVRfRVhURU5EX1ZFQ19BUkcgPSAyMywKICAg
SUlUX1RSVU5DX1ZFQ19BUkcgPSAyNCwKICAgSUlUX0FOWVBUUiA9IDI1LAotICBJSVRfVjEgICA9
IDI2CisgIElJVF9WMSAgID0gMjYsCisgIElJVF9WQVJBUkcgPSAyNwogfTsKIAogCkBAIC0yODgs
NiArMjg5LDggQEAgc3RhdGljIHZvaWQgRW5jb2RlRml4ZWRWYWx1ZVR5cGUoTVZUOjpTaW1wbGVW
YWx1ZVR5cGUgVlQsCiAgIGNhc2UgTVZUOjp4ODZtbXg6IHJldHVybiBTaWcucHVzaF9iYWNrKElJ
VF9NTVgpOwogICAvLyBNVlQ6Ok90aGVyVlQgaXMgdXNlZCB0byBtZWFuIHRoZSBlbXB0eSBzdHJ1
Y3QgdHlwZSBoZXJlLgogICBjYXNlIE1WVDo6T3RoZXI6IHJldHVybiBTaWcucHVzaF9iYWNrKElJ
VF9FTVBUWVNUUlVDVCk7CisgIC8vIE1WVDo6aXNWb2lkIGlzIHVzZWQgdG8gcmVwcmVzZW50IHZh
cmFyZ3MgaGVyZS4KKyAgY2FzZSBNVlQ6OmlzVm9pZDogcmV0dXJuIFNpZy5wdXNoX2JhY2soSUlU
X1ZBUkFSRyk7CiAgIH0KIH0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>213605</attachid>
            <date>2013-10-07 11:39:40 -0700</date>
            <delta_ts>2013-11-02 20:15:39 -0700</delta_ts>
            <desc>rebased LLVM patch</desc>
            <filename>stackmaps.diff</filename>
            <type>text/plain</type>
            <size>49898</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IGluY2x1ZGUvbGx2bS9Db2RlR2VuL1dlYktpdFN0YWNrTWFwcy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIGluY2x1ZGUvbGx2bS9Db2RlR2VuL1dlYktpdFN0YWNrTWFwcy5oCShyZXZpc2lvbiAwKQor
KysgaW5jbHVkZS9sbHZtL0NvZGVHZW4vV2ViS2l0U3RhY2tNYXBzLmgJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSw4MCBAQAorLy89PT0tLS0tLS0tIFdlYktpdFN0YWNrTWFwcy5oIC0gTGl2ZSBJ
bnRlcnZhbCBBbmFseXNpcyAtLS0tLS0tLS0qLSBDKysgLSotPT09Ly8KKy8vCisvLyAgICAgICAg
ICAgICAgICAgICAgIFRoZSBMTFZNIENvbXBpbGVyIEluZnJhc3RydWN0dXJlCisvLworLy8gVGhp
cyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBVbml2ZXJzaXR5IG9mIElsbGlub2lzIE9w
ZW4gU291cmNlCisvLyBMaWNlbnNlLiBTZWUgTElDRU5TRS5UWFQgZm9yIGRldGFpbHMuCisvLwor
Ly89PT0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tPT09Ly8KKworI2lmbmRlZiBMTFZNX1dFQktJVF9TVEFDS19NQVBT
CisjZGVmaW5lIExMVk1fV0VCS0lUX1NUQUNLX01BUFMKKworI2luY2x1ZGUgImxsdm0vQURUL1Nt
YWxsVmVjdG9yLmgiCisjaW5jbHVkZSAibGx2bS9Db2RlR2VuL01hY2hpbmVJbnN0ci5oIgorI2lu
Y2x1ZGUgPHZlY3Rvcj4KKworbmFtZXNwYWNlIGxsdm0geworCitjbGFzcyBBc21QcmludGVyOwor
Y2xhc3MgTUNFeHByOworCitjbGFzcyBXZWJLaXRTdGFja01hcHMgeworcHVibGljOgorICBzdHJ1
Y3QgTG9jYXRpb24geworICAgIGVudW0gTG9jYXRpb25UeXBlIHsgVW5wcm9jZXNzZWQsIFJlZ2lz
dGVyLCBJbmRpcmVjdCwgQ29uc3RhbnQsCisgICAgICAgICAgICAgICAgICAgICAgICBDb25zdGFu
dEluZGV4IH07CisgICAgTG9jYXRpb25UeXBlIExvY1R5cGU7CisgICAgdW5zaWduZWQgUmVnOwor
ICAgIGludCBPZmZzZXQ7CisgICAgTG9jYXRpb24oKSA6IExvY1R5cGUoVW5wcm9jZXNzZWQpLCBS
ZWcoMCksIE9mZnNldCgwKSB7fQorICAgIExvY2F0aW9uKExvY2F0aW9uVHlwZSBMb2NUeXBlLCB1
bnNpZ25lZCBSZWcsIGludCBPZmZzZXQpCisgICAgICA6IExvY1R5cGUoTG9jVHlwZSksIFJlZyhS
ZWcpLCBPZmZzZXQoT2Zmc2V0KSB7fQorICB9OworCisgIC8vIFR5cGVkZWYgYSBmdW5jdGlvbiBw
b2ludGVyIGZvciBmdW5jdGlvbnMgdGhhdCBwYXJzZSBzZXF1ZW5jZXMgb2Ygb3BlcmFuZHMKKyAg
Ly8gYW5kIHJldHVybiBhIExvY2F0aW9uLCBwbHVzIGEgbmV3ICJuZXh0IiBvcGVyYW5kIGl0ZXJh
dG9yLgorICB0eXBlZGVmIHN0ZDo6cGFpcjxMb2NhdGlvbiwgTWFjaGluZUluc3RyOjpjb25zdF9t
b3BfaXRlcmF0b3I+CisgICAgKCpPcGVyYW5kUGFyc2VyKShNYWNoaW5lSW5zdHI6OmNvbnN0X21v
cF9pdGVyYXRvciwKKyAgICAgICAgICAgICAgICAgICAgIE1hY2hpbmVJbnN0cjo6Y29uc3RfbW9w
X2l0ZXJhdG9yKTsKKworICBXZWJLaXRTdGFja01hcHMoQXNtUHJpbnRlciAmQVAsIE9wZXJhbmRQ
YXJzZXIgT3BQYXJzZXIpCisgICAgOiBBUChBUCksIE9wUGFyc2VyKE9wUGFyc2VyKSB7fQorCisg
IC8vLyBUaGlzIHNob3VsZCBiZSBjYWxsZWQgYnkgdGhlIE1DIGxvd2VyaW5nIGNvZGUgX2ltbWVk
aWF0ZWx5XyBiZWZvcmUKKyAgLy8vIGxvd2VyaW5nIHRoZSBNSSB0byBhbiBNQ0luc3QuIEl0IHJl
Y29yZHMgd2hlcmUgdGhlIG9wZXJhbmRzIGZvciB0aGUKKyAgLy8vIGluc3RydWN0aW9uIGFyZSBz
dG9yZWQsIGFuZCBvdXRwdXRzIGEgbGFiZWwgdG8gcmVjb3JkIHRoZSBvZmZzZXQgb2YKKyAgLy8v
IHRoZSBjYWxsIGZyb20gdGhlIHN0YXJ0IG9mIHRoZSB0ZXh0IHNlY3Rpb24uCisgIHZvaWQgcmVj
b3JkU3RhY2tNYXAoY29uc3QgTWFjaGluZUluc3RyICZNSSwgdWludDMyX3QgSUQsCisgICAgICAg
ICAgICAgICAgICAgICAgTWFjaGluZUluc3RyOjpjb25zdF9tb3BfaXRlcmF0b3IgTU9JLAorICAg
ICAgICAgICAgICAgICAgICAgIE1hY2hpbmVJbnN0cjo6Y29uc3RfbW9wX2l0ZXJhdG9yIE1PRSk7
CisKKyAgLy8vIElmIHRoZXJlIGlzIGFueSBzdGFjayBtYXAgZGF0YSwgY3JlYXRlIGEgc3RhY2sg
bWFwIHNlY3Rpb24gYW5kIHNlcmlhbGl6ZQorICAvLy8gdGhlIG1hcCBpbmZvIGludG8gaXQuIFRo
aXMgY2xlYXJzIHRoZSBzdGFjayBtYXAgZGF0YSBzdHJ1Y3R1cmVzCisgIC8vLyBhZnRlcndhcmRz
LgorICB2b2lkIHNlcmlhbGl6ZVRvU3RhY2tNYXBzU2VjdGlvbigpOworCitwcml2YXRlOgorCisg
IHR5cGVkZWYgU21hbGxWZWN0b3I8TG9jYXRpb24sIDg+IExvY2F0aW9uVmVjOworCisgIHN0cnVj
dCBDYWxsc2l0ZUluZm8geworICAgIGNvbnN0IE1DRXhwciAqQ1NPZmZzZXRFeHByOworICAgIHVu
c2lnbmVkIElEOworICAgIExvY2F0aW9uVmVjIExvY2F0aW9uczsKKyAgICBDYWxsc2l0ZUluZm8o
KSA6IENTT2Zmc2V0RXhwcigwKSwgSUQoMCkge30KKyAgICBDYWxsc2l0ZUluZm8oY29uc3QgTUNF
eHByICpDU09mZnNldEV4cHIsIHVuc2lnbmVkIElELAorICAgICAgICAgICAgICAgICBMb2NhdGlv
blZlYyBMb2NhdGlvbnMpCisgICAgICA6IENTT2Zmc2V0RXhwcihDU09mZnNldEV4cHIpLCBJRChJ
RCksIExvY2F0aW9ucyhMb2NhdGlvbnMpIHt9CisgIH07CisKKyAgdHlwZWRlZiBzdGQ6OnZlY3Rv
cjxDYWxsc2l0ZUluZm8+IENhbGxzaXRlSW5mb0xpc3Q7CisKKyAgQXNtUHJpbnRlciAmQVA7Cisg
IE9wZXJhbmRQYXJzZXIgT3BQYXJzZXI7CisgIENhbGxzaXRlSW5mb0xpc3QgQ1NJbmZvczsKK307
CisKK30KKworI2VuZGlmIC8vIExMVk1fV0VCS0lUX1NUQUNLX01BUFMKSW5kZXg6IGluY2x1ZGUv
bGx2bS9JUi9DYWxsaW5nQ29udi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGluY2x1ZGUvbGx2bS9JUi9DYWxs
aW5nQ29udi5oCShyZXZpc2lvbiAxOTIxMTUpCisrKyBpbmNsdWRlL2xsdm0vSVIvQ2FsbGluZ0Nv
bnYuaAkod29ya2luZyBjb3B5KQpAQCAtNTEsNiArNTEsMTIgQEAKICAgICAvLyAoSGlQRSkuCiAg
ICAgSGlQRSA9IDExLAogCisgICAgLy8gV2ViS2l0IEpTIC0gQ2FsbGluZyBjb252ZW50aW9uIGZv
ciBzdGFjayBiYXNlZCBKYXZhIFNjcmlwdCBjYWxscworICAgIFdlYktpdF9KUyA9IDEyLAorCisg
ICAgLy8gQ2FsbGluZyBjb252ZW50aW9uIGZvciBkeW5hbWljIHJlZ2lzdGVyIGJhc2VkIGNhbGxz
ICh1c2luZyBzdGFja21hcHMpLgorICAgIEFueVJlZyA9IDEzLAorCiAgICAgLy8gVGFyZ2V0IC0g
VGhpcyBpcyB0aGUgc3RhcnQgb2YgdGhlIHRhcmdldC1zcGVjaWZpYyBjYWxsaW5nIGNvbnZlbnRp
b25zLAogICAgIC8vIGUuZy4gZmFzdGNhbGwgYW5kIHRoaXNjYWxsIG9uIFg4Ni4KICAgICBGaXJz
dFRhcmdldENDID0gNjQsCkluZGV4OiBpbmNsdWRlL2xsdm0vSVIvSW50cmluc2ljcy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIGluY2x1ZGUvbGx2bS9JUi9JbnRyaW5zaWNzLmgJKHJldmlzaW9uIDE5MjExNSkK
KysrIGluY2x1ZGUvbGx2bS9JUi9JbnRyaW5zaWNzLmgJKHdvcmtpbmcgY29weSkKQEAgLTc3LDcg
Kzc3LDcgQEAKICAgLy8vIGdldEludHJpbnNpY0luZm9UYWJsZUVudHJpZXMuCiAgIHN0cnVjdCBJ
SVREZXNjcmlwdG9yIHsKICAgICBlbnVtIElJVERlc2NyaXB0b3JLaW5kIHsKLSAgICAgIFZvaWQs
IE1NWCwgTWV0YWRhdGEsIEhhbGYsIEZsb2F0LCBEb3VibGUsCisgICAgICBWb2lkLCBWYXJBcmcs
IE1NWCwgTWV0YWRhdGEsIEhhbGYsIEZsb2F0LCBEb3VibGUsCiAgICAgICBJbnRlZ2VyLCBWZWN0
b3IsIFBvaW50ZXIsIFN0cnVjdCwKICAgICAgIEFyZ3VtZW50LCBFeHRlbmRWZWNBcmd1bWVudCwg
VHJ1bmNWZWNBcmd1bWVudAogICAgIH0gS2luZDsKSW5kZXg6IGluY2x1ZGUvbGx2bS9JUi9JbnRy
aW5zaWNzLnRkCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIGluY2x1ZGUvbGx2bS9JUi9JbnRyaW5zaWNzLnRkCShy
ZXZpc2lvbiAxOTIxMTUpCisrKyBpbmNsdWRlL2xsdm0vSVIvSW50cmluc2ljcy50ZAkod29ya2lu
ZyBjb3B5KQpAQCAtNDk4LDYgKzQ5OCwzMyBAQAogZGVmIGludF9jb252ZXJ0dXUgIDogSW50cmlu
c2ljPFtsbHZtX2FueWludF90eV0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xs
dm1fYW55aW50X3R5LCBsbHZtX2kzMl90eSwgbGx2bV9pMzJfdHldPjsKIAorLy8gVGhpcyBpbnRy
aW5zaWMgaW1wbGVtZW50cyBhIHdlYmtpdCBzdGFjayBtYXAuIFRoZSBzdGFjayBtYXAgcmVjb3Jk
cworLy8gdGhlIGxvY2F0aW9uIG9mIGxpdmUgdmFyaWFibGVzIGF0IGl0cyBwb2ludCBpbiB0aGUg
aW5zdHJ1Y3Rpb24KKy8vIHN0cmVhbS4gVGhlIHN0YWNrIG1hcCBnZW5lcmF0ZXMgbm8gY29kZSBp
biBwbGFjZSwgYnV0IGl0cyBvZmZzZXQKKy8vIGZyb20gZnVuY3Rpb24gZW50cnkgaXMgc3RvcmVk
IGluIHRoZSBzdGFjayBtYXAuIEZ1cnRoZXJtb3JlLCBpdAorLy8gZ3VhcmFudGVlcyBhIHNoYWRv
dyBvZiBpbnN0cnVjdGlvbnMgZm9sbG93aW5nIHRoaXMgaW5zdHJ1Y3Rpb24KKy8vIG9mZnNldCBk
dXJpbmcgd2hpY2ggbmVpdGhlciB0aGUgZW5kIG9mIHRoZSBmdW5jdGlvbiBub3IgYW5vdGhlcgor
Ly8gc3RhY2ttYXAgbWF5IG9jY3VyLiBUaGlzIGFsbG93cyB0aGUgcnVudGltZSB0byBwYXRjaCB0
aGUgY29kZSBhdAorLy8gdGhpcyBwb2ludCBpbiByZXNwb25zZSB0byBzb21lIGFzeW5jaHJvbm91
cyBldmVudC4KKy8vCisvLyBpMzIgaWQsIGkzMiBudW1TaGFkb3dCeXRlcywgW2xpdmVWYXJzXQor
ZGVmIGludF93ZWJraXRfc3RhY2ttYXAgOiBJbnRyaW5zaWM8W10sCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBbbGx2bV9pMzJfdHksIGxsdm1faTMyX3R5LCBsbHZtX3ZhcmFy
Z190eV0+OworCisvLyBUaGlzIGludHJpbnNpYyBpcyB1c2VkIHRvIGltcGxlbWVudCB3ZWJraXQg
cGF0Y2hwb2ludHMgLSBwYXRjaGFibGUgY2FsbHNpdGVzCisvLyBmb3IgY2FsbHMgdG8gdGhlIEpT
IHJ1bnRpbWUuCisvLyBUT0RPOiBNb3ZlIHRvIGRvY3VtZW50YXRpb24gb25jZSB0aGlzIEFQSSBp
cyBzdGFibGUKKy8vIGkzMiBpZCwgaTMyIG51bU5vcEJ5dGVzLCBpOCogdGFyZ2V0LCBpMzIgbnVt
QXJncywgW2FyZ3MgYW5kIGxpdmUgdmFyc10KK2RlZiBpbnRfd2Via2l0X3BhdGNocG9pbnRfdm9p
ZCA6IEludHJpbnNpYzxbXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBbbGx2bV9pMzJfdHksIGxsdm1faTMyX3R5LAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBsbHZtX3B0cl90eSwgbGx2bV9pMzJfdHksCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxsdm1fdmFyYXJnX3R5XT47CitkZWYg
aW50X3dlYmtpdF9wYXRjaHBvaW50X2k2NCA6IEludHJpbnNpYzxbbGx2bV9pNjRfdHldLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xsdm1faTMyX3R5LCBsbHZt
X2kzMl90eSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsbHZt
X3B0cl90eSwgbGx2bV9pMzJfdHksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbGx2bV92YXJhcmdfdHldPjsKKworCiAvLz09PS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0vLwog
Ly8gVGFyZ2V0LXNwZWNpZmljIGludHJpbnNpY3MKIC8vPT09LS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PS8vCklu
ZGV4OiBpbmNsdWRlL2xsdm0vVGFyZ2V0L1RhcmdldC50ZAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBpbmNsdWRl
L2xsdm0vVGFyZ2V0L1RhcmdldC50ZAkocmV2aXNpb24gMTkyMTE1KQorKysgaW5jbHVkZS9sbHZt
L1RhcmdldC9UYXJnZXQudGQJKHdvcmtpbmcgY29weSkKQEAgLTgwMCw3ICs4MDAsMTkgQEAKICAg
bGV0IEFzbVN0cmluZyA9ICJMSUZFVElNRV9FTkQiOwogICBsZXQgbmV2ZXJIYXNTaWRlRWZmZWN0
cyA9IDE7CiB9CitkZWYgV0VCS0lUX1NUQUNLTUFQIDogSW5zdHJ1Y3Rpb24geworICBsZXQgT3V0
T3BlcmFuZExpc3QgPSAob3V0cyk7CisgIGxldCBJbk9wZXJhbmRMaXN0ID0gKGlucyBpMzJpbW06
JGlkLCBpMzJpbW06JG5ieXRlcywgdmFyaWFibGVfb3BzKTsKKyAgbGV0IGlzQ2FsbCA9IDE7CiB9
CitkZWYgV0VCS0lUX1BBVENIUE9JTlQgOiBJbnN0cnVjdGlvbiB7CisgIGxldCBPdXRPcGVyYW5k
TGlzdCA9IChvdXRzKTsKKyAgbGV0IEluT3BlcmFuZExpc3QgPSAoaW5zIGkzMmltbTokaWQsIGkz
MmltbTokbmJ5dGVzLCB1bmtub3duOiRjYWxsZWUsCisgICAgICAgICAgICAgICAgICAgICAgIGkz
MmltbTokbmFyZ3MsIHZhcmlhYmxlX29wcyk7CisgIGxldCBpc0NhbGwgPSAxOworICBsZXQgbWF5
TG9hZCA9IDE7Cit9Cit9CiAKIC8vPT09LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PS8vCiAvLyBBc21QYXJzZXIg
LSBUaGlzIGNsYXNzIGNhbiBiZSBpbXBsZW1lbnRlZCBieSB0YXJnZXRzIHRoYXQgd2lzaCB0byBp
bXBsZW1lbnQKSW5kZXg6IGluY2x1ZGUvbGx2bS9UYXJnZXQvVGFyZ2V0T3Bjb2Rlcy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIGluY2x1ZGUvbGx2bS9UYXJnZXQvVGFyZ2V0T3Bjb2Rlcy5oCShyZXZpc2lvbiAx
OTIxMTUpCisrKyBpbmNsdWRlL2xsdm0vVGFyZ2V0L1RhcmdldE9wY29kZXMuaAkod29ya2luZyBj
b3B5KQpAQCAtOTEsNyArOTEsMTkgQEAKIAogICAgIC8vLyBMaWZldGltZSBtYXJrZXJzLgogICAg
IExJRkVUSU1FX1NUQVJUID0gMTUsCi0gICAgTElGRVRJTUVfRU5EID0gMTYKKyAgICBMSUZFVElN
RV9FTkQgPSAxNiwKKworICAgIC8vLyBBIFN0YWNrbWFwIGluc3RydWN0aW9uIGNhcHR1cmVzIHRo
ZSBsb2NhdGlvbiBvZiBsaXZlIHZhcmlhYmxlcyBhdCBpdHMKKyAgICAvLy8gcG9zaXRpb24gaW4g
dGhlIGluc3RydWN0aW9uIHN0cmVhbS4gSXQgaXMgZm9sbG93ZWQgYnkgYSBzaGFkb3cgb2YgYnl0
ZXMKKyAgICAvLy8gdGhhdCBtdXN0IGxpZSB3aXRoaW4gdGhlIGZ1bmN0aW9uIGFuZCBub3QgY29u
dGFpbiBhbm90aGVyIHN0YWNrbWFwLgorICAgIFdFQktJVF9TVEFDS01BUCA9IDE3LAorCisgICAg
Ly8vIFBhdGNoYWJsZSBjYWxsIGluc3RydWN0aW9uIC0gdGhpcyBpbnN0cnVjdGlvbiByZXByZXNl
bnRzIGEgY2FsbCB0byBhCisgICAgLy8vIGNvbnN0YW50IGFkZHJlc3MsIGZvbGxvd2VkIGJ5IGEg
c2VyaWVzIG9mIE5PUHMuIEl0IGlzIGludGVuZGVkIHRvCisgICAgLy8vIHN1cHBvcnQgb3B0aW1p
emF0aW9ucyBmb3IgZHluYW1pYyBsYW5ndWFnZXMgKHN1Y2ggYXMgamF2YXNjcmlwdCkgdGhhdAor
ICAgIC8vLyByZXdyaXRlIGNhbGxzIHRvIHJ1bnRpbWVzIHdpdGggbW9yZSBlZmZpY2llbnQgY29k
ZSBzZXF1ZW5jZXMuCisgICAgLy8vIFRoaXMgYWxzbyBpbXBsaWVzIGEgc3RhY2sgbWFwLgorICAg
IFdFQktJVF9QQVRDSFBPSU5UID0gMTgKICAgfTsKIH0gLy8gZW5kIG5hbWVzcGFjZSBUYXJnZXRP
cGNvZGUKIH0gLy8gZW5kIG5hbWVzcGFjZSBsbHZtCkluZGV4OiBsaWIvQXNtUGFyc2VyL0xMTGV4
ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIGxpYi9Bc21QYXJzZXIvTExMZXhlci5jcHAJKHJldmlzaW9u
IDE5MjExNSkKKysrIGxpYi9Bc21QYXJzZXIvTExMZXhlci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTU1OSw2ICs1NTksOCBAQAogICBLRVlXT1JEKGludGVsX29jbF9iaWNjKTsKICAgS0VZV09SRCh4
ODZfNjRfc3lzdmNjKTsKICAgS0VZV09SRCh4ODZfNjRfd2luNjRjYyk7CisgIEtFWVdPUkQod2Vi
a2l0X2pzY2MpOworICBLRVlXT1JEKGFueXJlZ2NjKTsKIAogICBLRVlXT1JEKGNjKTsKICAgS0VZ
V09SRChjKTsKSW5kZXg6IGxpYi9Bc21QYXJzZXIvTExQYXJzZXIuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IGxpYi9Bc21QYXJzZXIvTExQYXJzZXIuY3BwCShyZXZpc2lvbiAxOTIxMTUpCisrKyBsaWIvQXNt
UGFyc2VyL0xMUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTM3NCw2ICsxMzc0LDggQEAK
ICAgY2FzZSBsbHRvazo6a3dfaW50ZWxfb2NsX2JpY2M6IENDID0gQ2FsbGluZ0NvbnY6OkludGVs
X09DTF9CSTsgYnJlYWs7CiAgIGNhc2UgbGx0b2s6Omt3X3g4Nl82NF9zeXN2Y2M6ICBDQyA9IENh
bGxpbmdDb252OjpYODZfNjRfU3lzVjsgYnJlYWs7CiAgIGNhc2UgbGx0b2s6Omt3X3g4Nl82NF93
aW42NGNjOiBDQyA9IENhbGxpbmdDb252OjpYODZfNjRfV2luNjQ7IGJyZWFrOworICBjYXNlIGxs
dG9rOjprd193ZWJraXRfanNjYzogICAgQ0MgPSBDYWxsaW5nQ29udjo6V2ViS2l0X0pTOyBicmVh
azsKKyAgY2FzZSBsbHRvazo6a3dfYW55cmVnY2M6ICAgICAgIENDID0gQ2FsbGluZ0NvbnY6OkFu
eVJlZzsgYnJlYWs7CiAgIGNhc2UgbGx0b2s6Omt3X2NjOiB7CiAgICAgICB1bnNpZ25lZCBBcmJp
dHJhcnlDQzsKICAgICAgIExleC5MZXgoKTsKSW5kZXg6IGxpYi9Bc21QYXJzZXIvTExUb2tlbi5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIGxpYi9Bc21QYXJzZXIvTExUb2tlbi5oCShyZXZpc2lvbiAxOTIxMTUp
CisrKyBsaWIvQXNtUGFyc2VyL0xMVG9rZW4uaAkod29ya2luZyBjb3B5KQpAQCAtOTIsNiArOTIs
OCBAQAogICAgIGt3X3B0eF9rZXJuZWwsIGt3X3B0eF9kZXZpY2UsCiAgICAga3dfc3Bpcl9rZXJu
ZWwsIGt3X3NwaXJfZnVuYywKICAgICBrd194ODZfNjRfc3lzdmNjLCBrd194ODZfNjRfd2luNjRj
YywKKyAgICBrd193ZWJraXRfanNjYywKKyAgICBrd19hbnlyZWdjYywKIAogICAgIC8vIEF0dHJp
YnV0ZXM6CiAgICAga3dfYXR0cmlidXRlcywKSW5kZXg6IGxpYi9Db2RlR2VuL0NNYWtlTGlzdHMu
dHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIGxpYi9Db2RlR2VuL0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiAx
OTIxMTUpCisrKyBsaWIvQ29kZUdlbi9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpAQCAt
MTA5LDYgKzEwOSw3IEBACiAgIFR3b0FkZHJlc3NJbnN0cnVjdGlvblBhc3MuY3BwCiAgIFVucmVh
Y2hhYmxlQmxvY2tFbGltLmNwcAogICBWaXJ0UmVnTWFwLmNwcAorICBXZWJLaXRTdGFja01hcHMu
Y3BwCiAgICkKIAogYWRkX2RlcGVuZGVuY2llcyhMTFZNQ29kZUdlbiBpbnRyaW5zaWNzX2dlbikK
SW5kZXg6IGxpYi9Db2RlR2VuL1NlbGVjdGlvbkRBRy9TZWxlY3Rpb25EQUdCdWlsZGVyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBsaWIvQ29kZUdlbi9TZWxlY3Rpb25EQUcvU2VsZWN0aW9uREFHQnVpbGRl
ci5jcHAJKHJldmlzaW9uIDE5MjExNSkKKysrIGxpYi9Db2RlR2VuL1NlbGVjdGlvbkRBRy9TZWxl
Y3Rpb25EQUdCdWlsZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTMxMSw3ICs1MzExLDE2IEBA
CiAgIGNhc2UgSW50cmluc2ljOjpkb25vdGhpbmc6CiAgICAgLy8gaWdub3JlCiAgICAgcmV0dXJu
IDA7CisgIGNhc2UgSW50cmluc2ljOjp3ZWJraXRfc3RhY2ttYXA6IHsKKyAgICB2aXNpdFdlYktp
dFN0YWNrbWFwKEkpOworICAgIHJldHVybiAwOwogICB9CisgIGNhc2UgSW50cmluc2ljOjp3ZWJr
aXRfcGF0Y2hwb2ludF92b2lkOgorICBjYXNlIEludHJpbnNpYzo6d2Via2l0X3BhdGNocG9pbnRf
aTY0OiB7CisgICAgdmlzaXRXZWJLaXRQYXRjaHBvaW50KEkpOworICAgIHJldHVybiAwOworICB9
CisgIH0KIH0KIAogdm9pZCBTZWxlY3Rpb25EQUdCdWlsZGVyOjpMb3dlckNhbGxUbyhJbW11dGFi
bGVDYWxsU2l0ZSBDUywgU0RWYWx1ZSBDYWxsZWUsCkBAIC02NzIzLDYgKzY3MzIsMTY1IEBACiAg
ICAgICAgICAgICAgICAgICAgICAgICAgIERBRy5nZXRTcmNWYWx1ZShJLmdldEFyZ09wZXJhbmQo
MSkpKSk7CiB9CiAKK3ZvaWQgU2VsZWN0aW9uREFHQnVpbGRlcjo6dmlzaXRXZWJLaXRTdGFja21h
cChjb25zdCBDYWxsSW5zdCAmQ0kpIHsKKyAgU0RWYWx1ZSBDaGFpbiA9IGdldENvbnRyb2xSb290
KCk7CisgIFNtYWxsVmVjdG9yPFNEVmFsdWUsIDg+IE9wczsKKworICAvLyBBZGQgdGhlIElEIGFu
ZCBOdW1TaGFkb3dCeXRlcyBjb25zdGFudHMuCisgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCAy
OyArK2kpIHsKKyAgICBTRFZhbHVlIHRtcCA9IGdldFZhbHVlKENJLmdldE9wZXJhbmQoaSkpOwor
ICAgIE9wcy5wdXNoX2JhY2soREFHLmdldFRhcmdldENvbnN0YW50KAorICAgICAgICBjYXN0PENv
bnN0YW50U0ROb2RlPih0bXApLT5nZXRaRXh0VmFsdWUoKSwgTVZUOjppMzIpKTsKKyAgfQorCisg
IC8vIE5vdyBwdXNoIGxpdmUgdmFyaWFibGVzIGZvciB0aGUgc3RhY2sgbWFwLgorICBmb3IgKHVu
c2lnbmVkIGkgPSAyLCBlID0gQ0kuZ2V0TnVtQXJnT3BlcmFuZHMoKTsgaSAhPSBlOyArK2kpCisg
ICAgT3BzLnB1c2hfYmFjayhnZXRWYWx1ZShDSS5nZXRBcmdPcGVyYW5kKGkpKSk7CisKKyAgLy8g
UHVzaCB0aGUgY2hhaW4gKGZpcnN0IG9wZXJhbmQpCisgIE9wcy5wdXNoX2JhY2soQ2hhaW4pOwor
CisgIFNETm9kZSAqTm9kZSA9IERBRy5nZXRNYWNoaW5lTm9kZShUYXJnZXRPcGNvZGU6OldFQktJ
VF9TVEFDS01BUCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldEN1clNE
TG9jKCksIE1WVDo6T3RoZXIsIE9wcyk7CisgIENoYWluID0gU0RWYWx1ZShOb2RlLCAwKTsKKyAg
REFHLnNldFJvb3QoQ2hhaW4pOworfQorCit2b2lkIFNlbGVjdGlvbkRBR0J1aWxkZXI6OnZpc2l0
V2ViS2l0UGF0Y2hwb2ludChjb25zdCBDYWxsSW5zdCAmQ0kpIHsKKyAgLy8gR2VuZXJhdGUgYSBu
ZXcgZmFrZSBpbnRyaW5zaWMgZGVmaW5pdGlvbiB0aGF0IG9ubHkgY29udGFpbnMgdGhlIGFyZ3Vt
ZW50cworICAvLyB0aGF0IG5lZWQgdG8gYmUgbG93ZXJlZCBieSB0aGUgZ2l2ZW4gY2FsbGluZyBj
b252ZW50aW9uCisgIFNtYWxsVmVjdG9yPEF0dHJpYnV0ZVNldCwgOD4gQXR0cmlidXRlc1ZlYzsK
KyAgU21hbGxWZWN0b3I8VmFsdWUgKiwgOD4gQXJnczsKKyAgU21hbGxWZWN0b3I8VHlwZSAqLCA4
PiBUeXBlczsKKyAgY29uc3QgQXR0cmlidXRlU2V0ICZBTCA9IENJLmdldEF0dHJpYnV0ZXMoKTsK
KworICAvLyBHZXQgdGhlIHJlYWwgbnVtYmVyIG9mIGFyZ3VtZW50cyBwYXJ0aWNpcGF0aW5nIGlu
IHRoZSBjYWxsCisgIHVuc2lnbmVkIE51bUFyZ3MgPQorICAgICAgY2FzdDxDb25zdGFudFNETm9k
ZT4oZ2V0VmFsdWUoQ0kuZ2V0QXJnT3BlcmFuZCgzKSkpLT5nZXRaRXh0VmFsdWUoKTsKKworICAv
LyBBZGQgYW55IHJldHVybiBhdHRyaWJ1dGVzLgorICBpZiAoQUwuaGFzQXR0cmlidXRlcyhBdHRy
aWJ1dGVTZXQ6OlJldHVybkluZGV4KSkKKyAgICBBdHRyaWJ1dGVzVmVjLnB1c2hfYmFjaygKKyAg
ICAgICAgQXR0cmlidXRlU2V0OjpnZXQoQ0kuZ2V0Q29udGV4dCgpLCBBTC5nZXRSZXRBdHRyaWJ1
dGVzKCkpKTsKKworICBhc3NlcnQoQ0kuZ2V0TnVtQXJnT3BlcmFuZHMoKSA+PSBOdW1BcmdzICsg
NCAmJgorICAgICAgICAgIk5vdCBlbm91Z2ggYXJndW1lbnRzIHByb3ZpZGVkIHRvIHRoZSBpbnRy
aW5zaWMiKTsKKworICAvLyBDcmVhdGUgdGhlIG5ldyBhcmd1bWVudCBsaXN0CisgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgIT0gTnVtQXJnczsgKytpKSB7CisgICAgLy8gc2tpcCB0aGUgZmlyc3Qg
NCBpbnRyaW5zaWMgYXJndW1lbnRzIHRvIGdldCB0byB0aGUgcmVhbCBmdW5jdGlvbgorICAgIC8v
IGFyZ3VtZW50cworICAgIHVuc2lnbmVkIEFyZ0luZGV4ID0gaSArIDQ7CisgICAgdW5zaWduZWQg
QXR0ckluZGV4ID0gaSArIDQgKyAxOyAvLyBBdHRyaWJ1dGVzIGZvciBhcmdzIHN0YXJ0IGF0IG9m
ZnNldCAxCisgICAgQXJncy5wdXNoX2JhY2soQ0kuZ2V0QXJnT3BlcmFuZChBcmdJbmRleCkpOwor
ICAgIFR5cGVzLnB1c2hfYmFjayhDSS5nZXRBcmdPcGVyYW5kKEFyZ0luZGV4KS0+Z2V0VHlwZSgp
KTsKKyAgICBBdHRyaWJ1dGVTZXQgQXR0cnMgPSBBTC5nZXRQYXJhbUF0dHJpYnV0ZXMoQXR0cklu
ZGV4KTsKKyAgICBpZiAoQXR0cnMuaGFzQXR0cmlidXRlcyhBdHRySW5kZXgpKSB7CisgICAgICBB
dHRyQnVpbGRlciBBKEF0dHJzLCBBdHRySW5kZXgpOworICAgICAgQXR0cmlidXRlc1ZlYy5wdXNo
X2JhY2soCisgICAgICAgICAgQXR0cmlidXRlU2V0OjpnZXQoQ0kuZ2V0Q29udGV4dCgpLCBBcmdz
LnNpemUoKSwgQSkpOworICAgIH0KKyAgfQorCisgIC8vIEFkZCBhbnkgZnVuY3Rpb24gYXR0cmli
dXRlcy4KKyAgaWYgKEFMLmhhc0F0dHJpYnV0ZXMoQXR0cmlidXRlU2V0OjpGdW5jdGlvbkluZGV4
KSkKKyAgICBBdHRyaWJ1dGVzVmVjLnB1c2hfYmFjaygKKyAgICAgICAgQXR0cmlidXRlU2V0Ojpn
ZXQoQ0kuZ2V0Q29udGV4dCgpLCBBTC5nZXRGbkF0dHJpYnV0ZXMoKSkpOworCisgIGNvbnN0IEZ1
bmN0aW9uICpGID0gQ0kuZ2V0Q2FsbGVkRnVuY3Rpb24oKTsKKyAgVHlwZSAqUmV0VHkgPSBGLT5n
ZXRSZXR1cm5UeXBlKCk7CisKKyAgLy8gQ29uc3RydWN0IHRoZSBuZXcgZnVuY3Rpb24gdHlwZSB1
c2luZyB0aGUgcmVhbCBhcmd1bWVudHMuCisgIC8vIE5PVEU6IEFsdGhvdWdoIHRoZSBpbnRyaW5z
aWMgaXMgZGVmaW5lZCBhcyB2YXJpYWJsZSBhcmd1bWVudHMgZnVuY3Rpb24sIHRoZQorICAvLyBm
YWtlIGZ1bmN0aW9uIHdlIGNyZWF0ZSBpcyBub3QuCisgIC8vIFRPRE86IERvIHdlIG5lZWQgdG8g
c3VwcG9ydCB2YXIgYXJncyBoZXJlIHRvbz8KKyAgRnVuY3Rpb25UeXBlICpORlR5ID0gRnVuY3Rp
b25UeXBlOjpnZXQoUmV0VHksIFR5cGVzLCAvKmlzVmFyQXJnKi8gZmFsc2UpOworCisgIC8vIENy
ZWF0ZSB0aGUgZmFrZSBmdW5jdGlvbi4KKyAgRnVuY3Rpb24gKk5GID0gRnVuY3Rpb246OkNyZWF0
ZShORlR5LCBGLT5nZXRMaW5rYWdlKCksIEYtPmdldE5hbWUoKSk7CisgIE5GLT5jb3B5QXR0cmli
dXRlc0Zyb20oRik7CisKKyAgLy8gUmVjb21wdXRlIHRoZSBwYXJhbWV0ZXIgYXR0cmlidXRlcyBs
aXN0IGJhc2VkIG9uIHRoZSBuZXcgYXJndW1lbnRzIGZvcgorICAvLyB0aGUgZnVuY3Rpb24uCisg
IE5GLT5zZXRBdHRyaWJ1dGVzKEF0dHJpYnV0ZVNldDo6Z2V0KEYtPmdldENvbnRleHQoKSwgQXR0
cmlidXRlc1ZlYykpOworCisgIC8vIENyZWF0ZSBhIHRlbXBvcmFyeSBjYWxsIGluc3RydWN0aW9u
CisgIENhbGxJbnN0ICpJID0gQ2FsbEluc3Q6OkNyZWF0ZShORiwgQXJncywgQ0kuZ2V0TmFtZSgp
KTsKKyAgY2FzdDxDYWxsSW5zdD4oSSktPnNldENhbGxpbmdDb252KENJLmdldENhbGxpbmdDb252
KCkpOworICBjYXN0PENhbGxJbnN0PihJKQorICAgICAgLT5zZXRBdHRyaWJ1dGVzKEF0dHJpYnV0
ZVNldDo6Z2V0KEktPmdldENvbnRleHQoKSwgQXR0cmlidXRlc1ZlYykpOworCisgIC8vIExldCB0
aGUgdGFyZ2V0IHNwZWNpZmljIGltcGxlbWVudGF0aW9uIGRvIHRoZSBoZWF2eSBsaWZ0aW5nIGZv
ciB1cworICBMb3dlckNhbGxUbyhJLCBnZXRWYWx1ZShORiksIC8qaXNUYWlsQ2FsbCovIGZhbHNl
KTsKKworICAvLyBUcmFuc2ZlciB0aGUgaW5mcm9tYXRpb24gZm9ybSB0aGUgdGVtcG9yYXJ5IGNh
bGwgaW5zdHJ1Y3Rpb24gdG8gdGhlIGFjdHVhbAorICAvLyBvbmUKKyAgaWYgKCFDSS5nZXRUeXBl
KCktPmlzVm9pZFR5KCkpCisgICAgc2V0VmFsdWUoJkNJLCBnZXRWYWx1ZShJKSk7CisKKyAgLy8g
Tm93IGdldCByaWQgb2YgdGhlIHRlbXBvcmFyeSBjYWxsIGluc3RydWN0aW9uCisgIGRlbGV0ZSBJ
OworCisgIC8vIFJlcGxhY2UgdGhlIHRhcmdldCBzcGVjaWZpYyBjYWxsIG5vZGUgd2l0aCB0aGUg
d2Via2l0IHBhdGNoYWJsZSBpbnRyaW5zaWMKKyAgLy8gVE9ETzogTmVlZCB0byBjaGVjayBpZiB0
aGlzIG5lZWRzIHRvIGJlIG1vdmVkIGludG8gdGhlIGFjdHVhbCB0YXJnZXQKKyAgLy8gc3BlY2lm
aWMgY29kZSBpZiBBUk0gZG9lcyB0aGluZ3MgZGlmZmVyZW50bHkKKyAgU0ROb2RlICpDYWxsU2Vx
dWVuY2VFbmQgPSBEQUcuZ2V0Um9vdCgpLmdldE5vZGUoKTsKKyAgd2hpbGUgKENhbGxTZXF1ZW5j
ZUVuZC0+Z2V0T3Bjb2RlKCkgIT0gSVNEOjpDQUxMU0VRX0VORCkKKyAgICBDYWxsU2VxdWVuY2VF
bmQgPSBDYWxsU2VxdWVuY2VFbmQtPmdldEdsdWVkTm9kZSgpOworCisgIFNETm9kZSAqQ2FsbCA9
IENhbGxTZXF1ZW5jZUVuZC0+Z2V0R2x1ZWROb2RlKCk7CisgIGJvb2wgaGFzR2x1ZSA9IENhbGwt
PmdldEdsdWVkTm9kZSgpOworCisgIFNtYWxsVmVjdG9yPFNEVmFsdWUsIDg+IE9wczsKKworICAv
LyBGaXJzdCB3ZSBwdXQgdGhlIGZpcnN0IGZvdXIgYXJndW1lbnRzIG9mIHRoZSBpbnRyaW5zaWMK
KyAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IDI7ICsraSkgeworICAgIFNEVmFsdWUgdG1wID0g
Z2V0VmFsdWUoQ0kuZ2V0T3BlcmFuZChpKSk7CisgICAgT3BzLnB1c2hfYmFjayhEQUcuZ2V0VGFy
Z2V0Q29uc3RhbnQoCisgICAgICAgIGNhc3Q8Q29uc3RhbnRTRE5vZGU+KHRtcCktPmdldFpFeHRW
YWx1ZSgpLCBNVlQ6OmkzMikpOworICB9CisgIHsKKyAgICBTRFZhbHVlIHRtcCA9IGdldFZhbHVl
KENJLmdldE9wZXJhbmQoMikpOworICAgIE9wcy5wdXNoX2JhY2soCisgICAgICBEQUcuZ2V0SW50
UHRyQ29uc3RhbnQoY2FzdDxDb25zdGFudFNETm9kZT4odG1wKS0+Z2V0WkV4dFZhbHVlKCkpKTsK
KworICAgIC8vIEFkanVzdCBOdW1BcmdzIHRvIGFjY291bnQgZm9yIGFueSBzdGFjayBhcmdzLgor
ICAgIC8vIENhbGwgTm9kZTogQ2hhaW4sIFRhcmdldCwge0FyZ3N9LCBSZWdNYXNrLCBbR2x1ZV0K
KyAgICB1bnNpZ25lZCBOdW1DYWxsQXJncyA9IENhbGwtPmdldE51bU9wZXJhbmRzKCkgLSAoaGFz
R2x1ZSA/IDQgOiAzKTsKKyAgICBPcHMucHVzaF9iYWNrKERBRy5nZXRUYXJnZXRDb25zdGFudChO
dW1DYWxsQXJncywgTVZUOjppMzIpKTsKKyAgfQorICAvLyBOb3cgcHVzaCB0aGUgYXJndW1lbnRz
IGZyb20gdGhlIGNhbGwgaW5zdHJ1Y3Rpb24KKyAgU0ROb2RlOjpvcF9pdGVyYXRvciBlID0gaGFz
R2x1ZSA/IENhbGwtPm9wX2VuZCgpLTIgOiBDYWxsLT5vcF9lbmQoKS0xOworICBmb3IgKFNETm9k
ZTo6b3BfaXRlcmF0b3IgaSA9IENhbGwtPm9wX2JlZ2luKCkrMjsgaSAhPSBlOyArK2kpCisgICAg
T3BzLnB1c2hfYmFjaygqaSk7CisKKyAgLy8gTm93IHB1c2ggYWxsIHRoZSBKUyBsaXZlIGFyZ3MK
KyAgZm9yICh1bnNpZ25lZCBpID0gTnVtQXJncyArIDQsIGUgPSBDSS5nZXROdW1BcmdPcGVyYW5k
cygpOyBpICE9IGU7ICsraSkKKyAgICBPcHMucHVzaF9iYWNrKGdldFZhbHVlKENJLmdldEFyZ09w
ZXJhbmQoaSkpKTsKKworICAvLyBwdXNoIHRoZSByZWdzaXRlciBtYXNrIGluZm8KKyAgaWYgKGhh
c0dsdWUpCisgICAgT3BzLnB1c2hfYmFjaygqKENhbGwtPm9wX2VuZCgpLTIpKTsKKyAgZWxzZQor
ICAgIE9wcy5wdXNoX2JhY2soKihDYWxsLT5vcF9lbmQoKS0xKSk7CisKKyAgLy8gUHVzaCB0aGUg
Y2hhaW4gKGZpcnN0IG9wZXJhbmQpCisgIE9wcy5wdXNoX2JhY2soKihDYWxsLT5vcF9iZWdpbigp
KSk7CisKKyAgLy8gUHVzaCB0aGUgZ2x1ZSBmbGFnIChsYXN0IG9wZXJhbmQpCisgIGlmIChoYXNH
bHVlKQorICAgIE9wcy5wdXNoX2JhY2soKihDYWxsLT5vcF9lbmQoKS0xKSk7CisKKyAgLy8gUmVw
bGFjZSB0aGUgZXhpdGluZyB0YXJnZXQgc3BlY2lmaWMgY2FsbCBub2RlIHdpdGggdGhlIHdlYmtp
dCBwYXRjaGFibGUKKyAgLy8gaW50cmluc2ljIGluLXBsYWNlLiBUaGlzIHdheSB3ZSBkb24ndCBo
YXZlIHRvIGNhbGwgUmVwbGFjZUFsbFVzZXNXaXRoLgorICBTRFZUTGlzdCBOb2RlVHlzID0gREFH
LmdldFZUTGlzdChNVlQ6Ok90aGVyLCBNVlQ6OkdsdWUpOworICBEQUcuU2VsZWN0Tm9kZVRvKENh
bGwsIFRhcmdldE9wY29kZTo6V0VCS0lUX1BBVENIUE9JTlQsIE5vZGVUeXMsICZPcHNbMF0sCisg
ICAgICAgICAgICAgICAgICAgT3BzLnNpemUoKSk7CisKKyAgLy8gTG93ZXJDYWxsIHNldCB0aGUg
cm9vdCB0byBDYWxsLCBhbmQgU2VsZWN0Tm9kZSBtb2RpZmllcyBpdCBpbi1wbGFjZSwgc28KKyAg
Ly8gV0VCS0lUX1BBVENIUE9JTlQgYmVjb21lcyB0aGUgbmV3IHJvb3QuCit9CisKIC8vLyBUYXJn
ZXRMb3dlcmluZzo6TG93ZXJDYWxsVG8gLSBUaGlzIGlzIHRoZSBkZWZhdWx0IExvd2VyQ2FsbFRv
CiAvLy8gaW1wbGVtZW50YXRpb24sIHdoaWNoIGp1c3QgY2FsbHMgTG93ZXJDYWxsLgogLy8vIEZJ
WE1FOiBXaGVuIGFsbCB0YXJnZXRzIGFyZQpJbmRleDogbGliL0NvZGVHZW4vU2VsZWN0aW9uREFH
L1NlbGVjdGlvbkRBR0J1aWxkZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBsaWIvQ29kZUdlbi9TZWxlY3Rp
b25EQUcvU2VsZWN0aW9uREFHQnVpbGRlci5oCShyZXZpc2lvbiAxOTIxMTUpCisrKyBsaWIvQ29k
ZUdlbi9TZWxlY3Rpb25EQUcvU2VsZWN0aW9uREFHQnVpbGRlci5oCSh3b3JraW5nIGNvcHkpCkBA
IC03NTIsNiArNzUyLDggQEAKICAgdm9pZCB2aXNpdFZBQXJnKGNvbnN0IFZBQXJnSW5zdCAmSSk7
CiAgIHZvaWQgdmlzaXRWQUVuZChjb25zdCBDYWxsSW5zdCAmSSk7CiAgIHZvaWQgdmlzaXRWQUNv
cHkoY29uc3QgQ2FsbEluc3QgJkkpOworICB2b2lkIHZpc2l0V2ViS2l0U3RhY2ttYXAoY29uc3Qg
Q2FsbEluc3QgJkkpOworICB2b2lkIHZpc2l0V2ViS2l0UGF0Y2hwb2ludChjb25zdCBDYWxsSW5z
dCAmSSk7CiAKICAgdm9pZCB2aXNpdFVzZXJPcDEoY29uc3QgSW5zdHJ1Y3Rpb24gJkkpIHsKICAg
ICBsbHZtX3VucmVhY2hhYmxlKCJVc2VyT3AxIHNob3VsZCBub3QgZXhpc3QgYXQgaW5zdHJ1Y3Rp
b24gc2VsZWN0aW9uIHRpbWUhIik7CkluZGV4OiBsaWIvQ29kZUdlbi9XZWJLaXRTdGFja01hcHMu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIGxpYi9Db2RlR2VuL1dlYktpdFN0YWNrTWFwcy5jcHAJKHJldmlz
aW9uIDApCisrKyBsaWIvQ29kZUdlbi9XZWJLaXRTdGFja01hcHMuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsMTcyIEBACisvLz09PS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gV2ViS2l0
U3RhY2tNYXBzLmNwcCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0vLworLy8KKy8vICAgICAg
ICAgICAgICAgICAgICAgVGhlIExMVk0gQ29tcGlsZXIgSW5mcmFzdHJ1Y3R1cmUKKy8vCisvLyBU
aGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIFVuaXZlcnNpdHkgb2YgSWxsaW5vaXMg
T3BlbiBTb3VyY2UKKy8vIExpY2Vuc2UuIFNlZSBMSUNFTlNFLlRYVCBmb3IgZGV0YWlscy4KKy8v
CisvLz09PS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS09PT0vLworCisjZGVmaW5lIERFQlVHX1RZUEUgIndlYmtpdF9z
dGFja21hcHMiCisKKyNpbmNsdWRlICJsbHZtL0NvZGVHZW4vV2ViS2l0U3RhY2tNYXBzLmgiCisK
KyNpbmNsdWRlICJsbHZtL0NvZGVHZW4vQXNtUHJpbnRlci5oIgorI2luY2x1ZGUgImxsdm0vQ29k
ZUdlbi9NYWNoaW5lSW5zdHIuaCIKKyNpbmNsdWRlICJsbHZtL01DL01DQ29udGV4dC5oIgorI2lu
Y2x1ZGUgImxsdm0vTUMvTUNFeHByLmgiCisjaW5jbHVkZSAibGx2bS9NQy9NQ1NlY3Rpb25NYWNo
Ty5oIgorI2luY2x1ZGUgImxsdm0vTUMvTUNTdHJlYW1lci5oIgorI2luY2x1ZGUgImxsdm0vU3Vw
cG9ydC9EZWJ1Zy5oIgorI2luY2x1ZGUgImxsdm0vU3VwcG9ydC9yYXdfb3N0cmVhbS5oIgorI2lu
Y2x1ZGUgImxsdm0vVGFyZ2V0L1RhcmdldE9wY29kZXMuaCIKKyNpbmNsdWRlICJsbHZtL1Rhcmdl
dC9UYXJnZXRNYWNoaW5lLmgiCisjaW5jbHVkZSAibGx2bS9UYXJnZXQvVGFyZ2V0UmVnaXN0ZXJJ
bmZvLmgiCisKKyNpbmNsdWRlIDxpdGVyYXRvcj4KKwordXNpbmcgbmFtZXNwYWNlIGxsdm07CisK
K3ZvaWQgV2ViS2l0U3RhY2tNYXBzOjpyZWNvcmRTdGFja01hcChjb25zdCBNYWNoaW5lSW5zdHIg
Jk1JLCB1aW50MzJfdCBJRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBN
YWNoaW5lSW5zdHI6OmNvbnN0X21vcF9pdGVyYXRvciBNT0ksCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgTWFjaGluZUluc3RyOjpjb25zdF9tb3BfaXRlcmF0b3IgTU9FKSB7
CisKKyAgTUNDb250ZXh0ICZPdXRDb250ZXh0ID0gQVAuT3V0U3RyZWFtZXIuZ2V0Q29udGV4dCgp
OworICBNQ1N5bWJvbCAqTUlMYWJlbCA9IE91dENvbnRleHQuQ3JlYXRlVGVtcFN5bWJvbCgpOwor
ICBBUC5PdXRTdHJlYW1lci5FbWl0TGFiZWwoTUlMYWJlbCk7CisKKyAgTG9jYXRpb25WZWMgQ2Fs
bHNpdGVMb2NzOworCisgIHdoaWxlIChNT0kgIT0gTU9FKSB7CisgICAgc3RkOjpwYWlyPExvY2F0
aW9uLCBNYWNoaW5lSW5zdHI6OmNvbnN0X21vcF9pdGVyYXRvcj4gcFJlcyA9CisgICAgICBPcFBh
cnNlcihNT0ksIE1PRSk7CisKKyAgICBDYWxsc2l0ZUxvY3MucHVzaF9iYWNrKHBSZXMuZmlyc3Qp
OworICAgIE1PSSA9IHBSZXMuc2Vjb25kOworICB9CisKKyAgY29uc3QgTUNFeHByICpDU09mZnNl
dEV4cHIgPSBNQ0JpbmFyeUV4cHI6OkNyZWF0ZVN1YigKKyAgICBNQ1N5bWJvbFJlZkV4cHI6OkNy
ZWF0ZShNSUxhYmVsLCBPdXRDb250ZXh0KSwKKyAgICBNQ1N5bWJvbFJlZkV4cHI6OkNyZWF0ZShB
UC5DdXJyZW50Rm5TeW0sIE91dENvbnRleHQpLAorICAgIE91dENvbnRleHQpOworCisgIENTSW5m
b3MucHVzaF9iYWNrKENhbGxzaXRlSW5mbyhDU09mZnNldEV4cHIsIElELCBDYWxsc2l0ZUxvY3Mp
KTsKK30KKworLy8vIHNlcmlhbGl6ZVRvU3RhY2tNYXBzU2VjdGlvbiBjb25jZXB0dWFsbHkgcG9w
dWxhdGVzIHRoZSBmb2xsb3dpbmcgZmllbGRzOgorLy8vCisvLy8gdWludDE2IDogTnVtQ29uc3Rh
bnRzCisvLy8gaW50NjQgIDogQ29uc3RhbnRzW10KKy8vLyB1aW50MTYgOiBOdW1SZWNvcmRzCisv
Ly8gU3RrTWFwUmVjb3JkW10geworLy8vICAgdWludDMyIDogUGF0Y2hQb2ludCBJRAorLy8vICAg
dWludDMyIDogSW5zdHJ1Y3Rpb24gT2Zmc2V0CisvLy8gICB1aW50MTYgOiBSZXNlcnZlZCAoZmxh
Z3MpCisvLy8gICB1aW50MTYgOiBOdW0gTG9jYXRpb25zCisvLy8gICBMb2NhdGlvbiB7CisvLy8g
ICAgIHVpbnQxMiA6IER3YXJmIFJlZ051bQorLy8vICAgICB1aW50NCAgOiBSZWdpc3RlciB8IElu
ZGlyZWN0IHwgQ29uc3RhbnQgfCBDb25zdGFudEluZGV4CisvLy8gICAgIGludDE2ICA6IE9mZnNl
dAorLy8vICAgfQorLy8vIH0KKy8vLworLy8vIExvY2F0aW9uIEVuY29kaW5nLCBUeXBlLCBWYWx1
ZToKKy8vLyAgIDB4MSwgUmVnaXN0ZXIsIFJlZyArIE9mZnNldCAgICAgICAgKHZhbHVlIGluIHJl
ZyBvciBmcmFtZSBpbmRleCkKKy8vLyAgIDB4MiwgSW5kaXJlY3QsIFtSZWcgKyBPZmZzZXRdICAg
ICAgKHNwaWxsZWQgdmFsdWUpCisvLy8gICAweDMsIENvbnN0YW50LCBPZmZzZXQgICAgICAgICAg
ICAgIChzbWFsbCBjb25zdGFudCkKKy8vLyAgIDB4NCwgQ29uc3RJbmRleCwgQ29uc3RhbnRzW09m
ZnNldF0gKGxhcmdlIGNvbnN0YW50KQorLy8vCit2b2lkIFdlYktpdFN0YWNrTWFwczo6c2VyaWFs
aXplVG9TdGFja01hcHNTZWN0aW9uKCkgeworICAvLyBCYWlsIG91dCBpZiB0aGVyZSdzIG5vIHN0
YWNrIG1hcCBkYXRhLgorICBpZiAoQ1NJbmZvcy5lbXB0eSgpKQorICAgIHJldHVybjsKKworICBN
Q0NvbnRleHQgJk91dENvbnRleHQgPSBBUC5PdXRTdHJlYW1lci5nZXRDb250ZXh0KCk7CisKKyAg
Ly8gQ3JlYXRlIHRoZSBzZWN0aW9uLgorICBjb25zdCBNQ1NlY3Rpb24gKlN0YWNrTWFwU2VjdGlv
biA9CisgICAgT3V0Q29udGV4dC5nZXRNYWNoT1NlY3Rpb24oIl9fSlNfU1RBQ0tNQVBTIiwgIl9f
anNfc3RhY2ttYXBzIiwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZWN0aW9u
S2luZDo6Z2V0TWV0YWRhdGEoKSk7CisgIEFQLk91dFN0cmVhbWVyLlN3aXRjaFNlY3Rpb24oU3Rh
Y2tNYXBTZWN0aW9uKTsKKworICAvLyBTZXJpYWxpemUgZGF0YS4KKyAgY29uc3QgY2hhciAqV1NN
UCA9ICJXZWJLaXQgU3RhY2sgTWFwczogIjsKKyAgY29uc3QgTUNSZWdpc3RlckluZm8gJk1DUkkg
PSAqT3V0Q29udGV4dC5nZXRSZWdpc3RlckluZm8oKTsKKworICBERUJVRyhkYmdzKCkgPDwgIioq
KioqKioqKiogV2ViS2l0IFN0YWNrIE1hcCBPdXRwdXQgKioqKioqKioqKlxuIik7CisKKyAgLy8g
TnVtQ29uc3RhbnRzOiBUQkQKKyAgQVAuT3V0U3RyZWFtZXIuRW1pdEludFZhbHVlKDAsIDQpOwor
CisgIERFQlVHKGRiZ3MoKSA8PCBXU01QIDw8ICIjY2FsbHNpdGVzID0gIiA8PCBDU0luZm9zLnNp
emUoKSA8PCAiXG4iKTsKKyAgQVAuT3V0U3RyZWFtZXIuRW1pdEludFZhbHVlKENTSW5mb3Muc2l6
ZSgpLCA0KTsKKworICBmb3IgKENhbGxzaXRlSW5mb0xpc3Q6OmNvbnN0X2l0ZXJhdG9yIENTSUkg
PSBDU0luZm9zLmJlZ2luKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgQ1NJRSA9IENTSW5mb3MuZW5kKCk7CisgICAgICAgQ1NJSSAhPSBDU0lFOyArK0NTSUkpIHsK
KworICAgIHVuc2lnbmVkIENhbGxzaXRlSUQgPSBDU0lJLT5JRDsKKyAgICBjb25zdCBMb2NhdGlv
blZlYyAmQ1NMb2NzID0gQ1NJSS0+TG9jYXRpb25zOworCisgICAgREVCVUcoZGJncygpIDw8IFdT
TVAgPDwgImNhbGxzaXRlICIgPDwgQ2FsbHNpdGVJRCA8PCAiXG4iKTsKKworICAgIC8vIFZlcmlm
eSBzdGFjayBtYXAgZW50cnkuIEl0J3MgYmV0dGVyIHRvIGNvbW11bmljYXRlIGEgcHJvYmxlbSB0
byB0aGUKKyAgICAvLyBydW50aW1lIHRoYW4gY3Jhc2ggaW4gY2FzZSBvZiBpbi1wcm9jZXNzIGNv
bXBpbGF0aW9uLiBDdXJyZW50bHksIHdlIGRvCisgICAgLy8gc2ltcGxlIG92ZXJmbG93IGNoZWNr
cywgYnV0IHdlIG1heSBldmVudHVhbGx5IGNvbW11bmljYXRlIG90aGVyCisgICAgLy8gY29tcGls
YXRpb24gZXJyb3JzIHRoaXMgd2F5LgorICAgIGlmIChDU0xvY3Muc2l6ZSgpID4gVUlOVDE2X01B
WCkgeworICAgICAgQVAuT3V0U3RyZWFtZXIuRW1pdEludFZhbHVlKFVJTlQzMl9NQVgsIDQpOwor
ICAgICAgQVAuT3V0U3RyZWFtZXIuRW1pdFZhbHVlKENTSUktPkNTT2Zmc2V0RXhwciwgNCk7Cisg
ICAgICBBUC5PdXRTdHJlYW1lci5FbWl0SW50VmFsdWUoMCwgMik7CisgICAgICBjb250aW51ZTsK
KyAgICB9CisKKyAgICBBUC5PdXRTdHJlYW1lci5FbWl0SW50VmFsdWUoQ2FsbHNpdGVJRCwgNCk7
CisgICAgQVAuT3V0U3RyZWFtZXIuRW1pdFZhbHVlKENTSUktPkNTT2Zmc2V0RXhwciwgNCk7CisK
KyAgICAvLyBSZXNlcnZlZCBmb3IgZmxhZ3MuCisgICAgQVAuT3V0U3RyZWFtZXIuRW1pdEludFZh
bHVlKDAsIDIpOworCisgICAgREVCVUcoZGJncygpIDw8IFdTTVAgPDwgIiAgaGFzICIgPDwgQ1NM
b2NzLnNpemUoKSA8PCAiIGxvY2F0aW9uc1xuIik7CisKKyAgICBBUC5PdXRTdHJlYW1lci5FbWl0
SW50VmFsdWUoQ1NMb2NzLnNpemUoKSwgMik7CisKKyAgICB1bnNpZ25lZCBvcGVySWR4ID0gMDsK
KyAgICBmb3IgKExvY2F0aW9uVmVjOjpjb25zdF9pdGVyYXRvciBMb2NJID0gQ1NMb2NzLmJlZ2lu
KCksIExvY0UgPSBDU0xvY3MuZW5kKCk7CisgICAgICAgICBMb2NJICE9IExvY0U7ICsrTG9jSSwg
KytvcGVySWR4KSB7CisgICAgICBjb25zdCBMb2NhdGlvbiAmTG9jID0gKkxvY0k7CisgICAgICBE
RUJVRygKKyAgICAgICAgZGJncygpIDw8IFdTTVAgPDwgIiAgTG9jICIgPDwgb3BlcklkeCA8PCAi
OiAiOworICAgICAgICBzd2l0Y2ggKExvYy5Mb2NUeXBlKSB7CisgICAgICAgIGNhc2UgTG9jYXRp
b246OlVucHJvY2Vzc2VkOgorICAgICAgICAgIGRiZ3MoKSA8PCAiPFVucHJvY2Vzc2VkIG9wZXJh
bmQ+IjsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBMb2NhdGlvbjo6UmVnaXN0ZXI6
CisgICAgICAgICAgZGJncygpIDw8ICJSZWdpc3RlciAiIDw8IE1DUkkuZ2V0TmFtZShMb2MuUmVn
KTsKKyAgICAgICAgICBpZiAoTG9jLk9mZnNldCkKKyAgICAgICAgICAgIGRiZ3MoKSA8PCAiICsg
IiA8PCBMb2MuT2Zmc2V0OworICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIExvY2F0aW9u
OjpJbmRpcmVjdDoKKyAgICAgICAgICBkYmdzKCkgPDwgIkluZGlyZWN0ICIgPDwgTUNSSS5nZXRO
YW1lKExvYy5SZWcpCisgICAgICAgICAgICAgICAgIDw8ICIgKyAiIDw8IExvYy5PZmZzZXQ7Cisg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgTG9jYXRpb246OkNvbnN0YW50OgorICAgICAg
ICAgIGRiZ3MoKSA8PCAiQ29uc3RhbnQgIiA8PCBMb2MuT2Zmc2V0OworICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIExvY2F0aW9uOjpDb25zdGFudEluZGV4OgorICAgICAgICAgIGRiZ3Mo
KSA8PCAiQ29uc3RhbnQgSW5kZXggIiA8PCBMb2MuT2Zmc2V0OworICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CisgICAgICAgIGRiZ3MoKSA8PCAiXG4iOworICAgICAgKTsKKworICAgICAgaW50
IFRhZ2dlZFJlZyA9IE1DUkkuZ2V0RHdhcmZSZWdOdW0oTG9jLlJlZywgZmFsc2UpIHwgTG9jLkxv
Y1R5cGUgPDwgMTI7CisgICAgICBBUC5PdXRTdHJlYW1lci5FbWl0SW50VmFsdWUoVGFnZ2VkUmVn
LCAyKTsKKyAgICAgIEFQLk91dFN0cmVhbWVyLkVtaXRJbnRWYWx1ZShMb2MuT2Zmc2V0LCAyKTsK
KyAgICB9CisgIH0KKworICBBUC5PdXRTdHJlYW1lci5BZGRCbGFua0xpbmUoKTsKKworICBDU0lu
Zm9zLmNsZWFyKCk7Cit9CkluZGV4OiBsaWIvSVIvRnVuY3Rpb24uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IGxpYi9JUi9GdW5jdGlvbi5jcHAJKHJldmlzaW9uIDE5MjExNSkKKysrIGxpYi9JUi9GdW5jdGlv
bi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1NCw3ICs0NTQsOCBAQAogICBJSVRfRVhURU5EX1ZF
Q19BUkcgPSAyMywKICAgSUlUX1RSVU5DX1ZFQ19BUkcgPSAyNCwKICAgSUlUX0FOWVBUUiA9IDI1
LAotICBJSVRfVjEgICA9IDI2CisgIElJVF9WMSAgID0gMjYsCisgIElJVF9WQVJBUkcgPSAyNwog
fTsKIAogCkBAIC00NjgsNiArNDY5LDkgQEAKICAgY2FzZSBJSVRfRG9uZToKICAgICBPdXRwdXRU
YWJsZS5wdXNoX2JhY2soSUlURGVzY3JpcHRvcjo6Z2V0KElJVERlc2NyaXB0b3I6OlZvaWQsIDAp
KTsKICAgICByZXR1cm47CisgIGNhc2UgSUlUX1ZBUkFSRzoKKyAgICBPdXRwdXRUYWJsZS5wdXNo
X2JhY2soSUlURGVzY3JpcHRvcjo6Z2V0KElJVERlc2NyaXB0b3I6OlZhckFyZywgMCkpOworICAg
IHJldHVybjsKICAgY2FzZSBJSVRfTU1YOgogICAgIE91dHB1dFRhYmxlLnB1c2hfYmFjayhJSVRE
ZXNjcmlwdG9yOjpnZXQoSUlURGVzY3JpcHRvcjo6TU1YLCAwKSk7CiAgICAgcmV0dXJuOwpAQCAt
NjEzLDYgKzYxNyw3IEBACiAKICAgc3dpdGNoIChELktpbmQpIHsKICAgY2FzZSBJSVREZXNjcmlw
dG9yOjpWb2lkOiByZXR1cm4gVHlwZTo6Z2V0Vm9pZFR5KENvbnRleHQpOworICBjYXNlIElJVERl
c2NyaXB0b3I6OlZhckFyZzogcmV0dXJuIFR5cGU6OmdldFZvaWRUeShDb250ZXh0KTsKICAgY2Fz
ZSBJSVREZXNjcmlwdG9yOjpNTVg6IHJldHVybiBUeXBlOjpnZXRYODZfTU1YVHkoQ29udGV4dCk7
CiAgIGNhc2UgSUlURGVzY3JpcHRvcjo6TWV0YWRhdGE6IHJldHVybiBUeXBlOjpnZXRNZXRhZGF0
YVR5KENvbnRleHQpOwogICBjYXNlIElJVERlc2NyaXB0b3I6OkhhbGY6IHJldHVybiBUeXBlOjpn
ZXRIYWxmVHkoQ29udGV4dCk7CkluZGV4OiBsaWIvSVIvVmVyaWZpZXIuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIGxpYi9JUi9WZXJpZmllci5jcHAJKHJldmlzaW9uIDE5MjExNSkKKysrIGxpYi9JUi9WZXJp
Zmllci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxOSw2ICszMTksOCBAQAogICAgIGJvb2wgVmVy
aWZ5SW50cmluc2ljVHlwZShUeXBlICpUeSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
QXJyYXlSZWY8SW50cmluc2ljOjpJSVREZXNjcmlwdG9yPiAmSW5mb3MsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFNtYWxsVmVjdG9ySW1wbDxUeXBlKj4gJkFyZ1R5cyk7CisgICAgYm9v
bCBWZXJpZnlJbnRyaW5zaWNJc1ZhckFyZyhib29sIGlzVmFyQXJnLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgQXJyYXlSZWY8SW50cmluc2ljOjpJSVREZXNjcmlwdG9yPiAmSW5m
b3MpOwogICAgIGJvb2wgVmVyaWZ5QXR0cmlidXRlQ291bnQoQXR0cmlidXRlU2V0IEF0dHJzLCB1
bnNpZ25lZCBQYXJhbXMpOwogICAgIHZvaWQgVmVyaWZ5QXR0cmlidXRlVHlwZXMoQXR0cmlidXRl
U2V0IEF0dHJzLCB1bnNpZ25lZCBJZHgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBi
b29sIGlzRnVuY3Rpb24sIGNvbnN0IFZhbHVlICpWKTsKQEAgLTIxMTYsNiArMjExOCw3IEBACiAK
ICAgc3dpdGNoIChELktpbmQpIHsKICAgY2FzZSBJSVREZXNjcmlwdG9yOjpWb2lkOiByZXR1cm4g
IVR5LT5pc1ZvaWRUeSgpOworICBjYXNlIElJVERlc2NyaXB0b3I6OlZhckFyZzogcmV0dXJuIHRy
dWU7CiAgIGNhc2UgSUlURGVzY3JpcHRvcjo6TU1YOiAgcmV0dXJuICFUeS0+aXNYODZfTU1YVHko
KTsKICAgY2FzZSBJSVREZXNjcmlwdG9yOjpNZXRhZGF0YTogcmV0dXJuICFUeS0+aXNNZXRhZGF0
YVR5KCk7CiAgIGNhc2UgSUlURGVzY3JpcHRvcjo6SGFsZjogcmV0dXJuICFUeS0+aXNIYWxmVHko
KTsKQEAgLTIxODAsNiArMjE4MywzMiBAQAogICBsbHZtX3VucmVhY2hhYmxlKCJ1bmhhbmRsZWQi
KTsKIH0KIAorLy8vIFZlcmlmeSBpZiB0aGUgaW50cmluc2ljIGhhcyB2YXJpYWJsZSBhcmd1bWVu
dHMuIFRoaXMgbWV0aG9kIGlzIGludGVuZGVkIHRvCisvLy8gYmUgY2FsbGVkIGFmdGVyIGFsbCB0
aGUgZml4ZWQgYXJndW1lbnRzIGhhdmUgYmVlbiB2ZXJpZmllZCBmaXJzdC4KKy8vLworLy8vIFRo
aXMgbWV0aG9kIHJldHVybnMgdHJ1ZSBvbiBlcnJvciBhbmQgZG9lcyBub3QgcHJpbnQgYW4gZXJy
b3IgbWVzc2FnZS4KK2Jvb2wKK1ZlcmlmaWVyOjpWZXJpZnlJbnRyaW5zaWNJc1ZhckFyZyhib29s
IGlzVmFyQXJnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFycmF5UmVmPElu
dHJpbnNpYzo6SUlURGVzY3JpcHRvcj4gJkluZm9zKSB7CisgIHVzaW5nIG5hbWVzcGFjZSBJbnRy
aW5zaWM7CisKKyAgLy8gVGhlcmUgYXJlIG5vIGRlc2NyaXB0b3JzIGxlZnQsIHNvIGl0IGNhbid0
IGJlIHZhcmFyZworICBpZiAoSW5mb3MuZW1wdHkoKSkKKyAgICByZXR1cm4gaXNWYXJBcmcgPyB0
cnVlIDogZmFsc2U7CisKKyAgLy8gT25seSBleHBlY3Qgb25lIGRlc2NyaXB0b3IgYXQgdGhpcyBw
b2ludAorICBpZiAoSW5mb3Muc2l6ZSgpICE9IDEpCisgICAgcmV0dXJuIHRydWU7CisKKyAgLy8g
Q2hlY2sgdGhlIGRlc2NyaXB0b3IgYW5kIHZlcmlmeQorICBJSVREZXNjcmlwdG9yIEQgPSBJbmZv
cy5mcm9udCgpOworICBJbmZvcyA9IEluZm9zLnNsaWNlKDEpOworICBpZiAoRC5LaW5kID09IElJ
VERlc2NyaXB0b3I6OlZhckFyZykKKyAgICByZXR1cm4gaXNWYXJBcmcgPyBmYWxzZSA6IHRydWU7
CisKKyAgcmV0dXJuIHRydWU7Cit9CisKIC8vLyB2aXNpdEludHJpbnNpY0Z1bmN0aW9uIC0gQWxs
b3cgaW50cmluc2ljcyB0byBiZSB2ZXJpZmllZCBpbiBkaWZmZXJlbnQgd2F5cy4KIC8vLwogdm9p
ZCBWZXJpZmllcjo6dmlzaXRJbnRyaW5zaWNGdW5jdGlvbkNhbGwoSW50cmluc2ljOjpJRCBJRCwg
Q2FsbEluc3QgJkNJKSB7CkBAIC0yMTkwLDcgKzIyMTksNyBAQAogICAvLyBWZXJpZnkgdGhhdCB0
aGUgaW50cmluc2ljIHByb3RvdHlwZSBsaW5lcyB1cCB3aXRoIHdoYXQgdGhlIC50ZCBmaWxlcwog
ICAvLyBkZXNjcmliZS4KICAgRnVuY3Rpb25UeXBlICpJRlR5ID0gSUYtPmdldEZ1bmN0aW9uVHlw
ZSgpOwotICBBc3NlcnQxKCFJRlR5LT5pc1ZhckFyZygpLCAiSW50cmluc2ljIHByb3RvdHlwZXMg
YXJlIG5vdCB2YXJhcmdzIiwgSUYpOworICBib29sIElzVmFyQXJnID0gSUZUeS0+aXNWYXJBcmco
KTsKIAogICBTbWFsbFZlY3RvcjxJbnRyaW5zaWM6OklJVERlc2NyaXB0b3IsIDg+IFRhYmxlOwog
ICBnZXRJbnRyaW5zaWNJbmZvVGFibGVFbnRyaWVzKElELCBUYWJsZSk7CkBAIC0yMjAyLDYgKzIy
MzEsMTcgQEAKICAgZm9yICh1bnNpZ25lZCBpID0gMCwgZSA9IElGVHktPmdldE51bVBhcmFtcygp
OyBpICE9IGU7ICsraSkKICAgICBBc3NlcnQxKCFWZXJpZnlJbnRyaW5zaWNUeXBlKElGVHktPmdl
dFBhcmFtVHlwZShpKSwgVGFibGVSZWYsIEFyZ1R5cyksCiAgICAgICAgICAgICAiSW50cmluc2lj
IGhhcyBpbmNvcnJlY3QgYXJndW1lbnQgdHlwZSEiLCBJRik7CisKKyAgLy8gVmVyaWZ5IGlmIHRo
ZSBpbnRyaW5zaWMgY2FsbCBtYXRjaGVzIHRoZSB2YXJhcmcgcHJvcGVydHkKKyAgaWYgKElzVmFy
QXJnKSB7CisgICAgQXNzZXJ0MSghVmVyaWZ5SW50cmluc2ljSXNWYXJBcmcoSXNWYXJBcmcsIFRh
YmxlUmVmKSwKKyAgICAgICAgICAgICJJbnRyaW5zaWMgd2FzIG5vdCBkZWZpbmVkIHdpdGggdmFy
aWFibGUgYXJndW1lbnRzISIsIElGKTsKKyAgfSBlbHNlIHsKKyAgICBBc3NlcnQxKCFWZXJpZnlJ
bnRyaW5zaWNJc1ZhckFyZyhJc1ZhckFyZywgVGFibGVSZWYpLAorICAgICAgICAgICAgIkNhbGxz
aXRlIHdhcyBub3QgZGVmaW5lZCB3aXRoIHZhcmlhYmxlIGFyZ3VtZW50cyEiLCBJRik7CisgIH0K
KworICAvLyBBbGwgZGVzY3JpcHRvcnMgc2hvdWxkIGJlIGFic29yYmVkIGJ5IG5vdwogICBBc3Nl
cnQxKFRhYmxlUmVmLmVtcHR5KCksICJJbnRyaW5zaWMgaGFzIHRvbyBmZXcgYXJndW1lbnRzISIs
IElGKTsKIAogICAvLyBOb3cgdGhhdCB3ZSBoYXZlIHRoZSBpbnRyaW5zaWMgSUQgYW5kIHRoZSBh
Y3R1YWwgYXJndW1lbnQgdHlwZXMgKGFuZCB3ZQpJbmRleDogbGliL1RhcmdldC9YODYvWDg2QXNt
UHJpbnRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gbGliL1RhcmdldC9YODYvWDg2QXNtUHJpbnRlci5j
cHAJKHJldmlzaW9uIDE5MjExNSkKKysrIGxpYi9UYXJnZXQvWDg2L1g4NkFzbVByaW50ZXIuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC01MTYsOSArNTE2LDYgQEAKIH0KIAogdm9pZCBYODZBc21Qcmlu
dGVyOjpFbWl0U3RhcnRPZkFzbUZpbGUoTW9kdWxlICZNKSB7Ci0gIGlmIChTdWJ0YXJnZXQtPmlz
VGFyZ2V0RW52TWFjaG8oKSkKLSAgICBPdXRTdHJlYW1lci5Td2l0Y2hTZWN0aW9uKGdldE9iakZp
bGVMb3dlcmluZygpLmdldFRleHRTZWN0aW9uKCkpOwotCiAgIGlmIChTdWJ0YXJnZXQtPmlzVGFy
Z2V0Q09GRigpKSB7CiAgICAgLy8gRW1pdCBhbiBhYnNvbHV0ZSBAZmVhdC4wMCBzeW1ib2wuICBU
aGlzIGFwcGVhcnMgdG8gYmUgc29tZSBraW5kIG9mCiAgICAgLy8gY29tcGlsZXIgZmVhdHVyZXMg
Yml0ZmllbGQgcmVhZCBieSBsaW5rLmV4ZS4KQEAgLTU0MCw3ICs1MzcsNiBAQAogICB9CiB9CiAK
LQogdm9pZCBYODZBc21QcmludGVyOjpFbWl0RW5kT2ZBc21GaWxlKE1vZHVsZSAmTSkgewogICBp
ZiAoU3VidGFyZ2V0LT5pc1RhcmdldEVudk1hY2hvKCkpIHsKICAgICAvLyBBbGwgZGFyd2luIHRh
cmdldHMgdXNlIG1hY2gtby4KQEAgLTYyNiw2ICs2MjIsOCBAQAogICAgICAgT3V0U3RyZWFtZXIu
QWRkQmxhbmtMaW5lKCk7CiAgICAgfQogCisgICAgV1NNLnNlcmlhbGl6ZVRvU3RhY2tNYXBzU2Vj
dGlvbigpOworCiAgICAgLy8gRnVubnkgRGFyd2luIGhhY2s6IFRoaXMgZmxhZyB0ZWxscyB0aGUg
bGlua2VyIHRoYXQgbm8gZ2xvYmFsIHN5bWJvbHMKICAgICAvLyBjb250YWluIGNvZGUgdGhhdCBm
YWxscyB0aHJvdWdoIHRvIG90aGVyIGdsb2JhbCBzeW1ib2xzIChlLmcuIHRoZSBvYnZpb3VzCiAg
ICAgLy8gaW1wbGVtZW50YXRpb24gb2YgbXVsdGlwbGUgZW50cnkgcG9pbnRzKS4gIElmIHRoaXMg
ZG9lc24ndCBvY2N1ciwgdGhlCkluZGV4OiBsaWIvVGFyZ2V0L1g4Ni9YODZBc21QcmludGVyLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gbGliL1RhcmdldC9YODYvWDg2QXNtUHJpbnRlci5oCShyZXZpc2lvbiAx
OTIxMTUpCisrKyBsaWIvVGFyZ2V0L1g4Ni9YODZBc21QcmludGVyLmgJKHdvcmtpbmcgY29weSkK
QEAgLTE2LDE3ICsxNiwzMSBAQAogI2luY2x1ZGUgImxsdm0vQ29kZUdlbi9Bc21QcmludGVyLmgi
CiAjaW5jbHVkZSAibGx2bS9Db2RlR2VuL01hY2hpbmVNb2R1bGVJbmZvLmgiCiAjaW5jbHVkZSAi
bGx2bS9Db2RlR2VuL1ZhbHVlVHlwZXMuaCIKKyNpbmNsdWRlICJsbHZtL0NvZGVHZW4vV2ViS2l0
U3RhY2tNYXBzLmgiCiAjaW5jbHVkZSAibGx2bS9TdXBwb3J0L0NvbXBpbGVyLmgiCiAKIG5hbWVz
cGFjZSBsbHZtIHsKIAogY2xhc3MgTUNTdHJlYW1lcjsKIAorCisKIGNsYXNzIExMVk1fTElCUkFS
WV9WSVNJQklMSVRZIFg4NkFzbVByaW50ZXIgOiBwdWJsaWMgQXNtUHJpbnRlciB7CiAgIGNvbnN0
IFg4NlN1YnRhcmdldCAqU3VidGFyZ2V0OworICBXZWJLaXRTdGFja01hcHMgV1NNOworCisgIC8v
IFBhcnNlcyBvcGVyYW5kcyBvZiBXRUJLSVRfUEFUQ0hQT0lOVCBhbmQgV0VCS0lUX1NUQUNLTUFQ
IHRvIHByb2R1Y2UKKyAgLy8gc3RhY2sgbWFwIExvY2F0aW9uIHN0cnVjdHVyZXMuIFJldHVybnMg
YSByZXN1bHQgbG9jYXRpb24gYW5kIGFuCisgIC8vIGl0ZXJhdG9yIHRvIHRoZSBvcGVyYW5kIGlt
bWVkaWF0ZWx5IGZvbGxvd2luZyB0aGUgb3BlcmFuZHMgY29uc3VtZWQuCisgIC8vCisgIC8vIFRo
aXMgbWV0aG9kIGlzIGltcGxlbWVudGVkIGluIFg4Nk1DSW5zdExvd2VyLmNwcC4KKyAgc3RhdGlj
IHN0ZDo6cGFpcjxXZWJLaXRTdGFja01hcHM6OkxvY2F0aW9uLCBNYWNoaW5lSW5zdHI6OmNvbnN0
X21vcF9pdGVyYXRvcj4KKyAgICB3a3NtT3BlcmFuZFBhcnNlcihNYWNoaW5lSW5zdHI6OmNvbnN0
X21vcF9pdGVyYXRvciBNT0ksCisgICAgICAgICAgICAgICAgICAgICAgTWFjaGluZUluc3RyOjpj
b25zdF9tb3BfaXRlcmF0b3IgTU9FKTsKKwogIHB1YmxpYzoKICAgZXhwbGljaXQgWDg2QXNtUHJp
bnRlcihUYXJnZXRNYWNoaW5lICZUTSwgTUNTdHJlYW1lciAmU3RyZWFtZXIpCi0gICAgOiBBc21Q
cmludGVyKFRNLCBTdHJlYW1lcikgeworICAgIDogQXNtUHJpbnRlcihUTSwgU3RyZWFtZXIpLCBX
U00oKnRoaXMsIHdrc21PcGVyYW5kUGFyc2VyKSB7CiAgICAgU3VidGFyZ2V0ID0gJlRNLmdldFN1
YnRhcmdldDxYODZTdWJ0YXJnZXQ+KCk7CiAgIH0KIApJbmRleDogbGliL1RhcmdldC9YODYvWDg2
Q2FsbGluZ0NvbnYudGQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gbGliL1RhcmdldC9YODYvWDg2Q2FsbGluZ0Nv
bnYudGQJKHJldmlzaW9uIDE5MjExNSkKKysrIGxpYi9UYXJnZXQvWDg2L1g4NkNhbGxpbmdDb252
LnRkCSh3b3JraW5nIGNvcHkpCkBAIC0xNTEsNiArMTUxLDEyIEBACiAgIENDSWZUeXBlPFtpNjRd
LCBDQ0Fzc2lnblRvUmVnPFtSMTUsIFJCUCwgUkFYLCBSRFhdPj4KIF0+OwogCisvLyBYODYtNjQg
V2ViS2l0X0pTIHJldHVybi12YWx1ZSBjb252ZW50aW9uLgorZGVmIFJldENDX1g4Nl82NF9XZWJL
aXRfSlMgOiBDYWxsaW5nQ29udjxbCisgIC8vIFJldHVybjogUkFYCisgIENDSWZUeXBlPFtpNjRd
LCBDQ0Fzc2lnblRvUmVnPFtSQVhdPj4KK10+OworCiAvLyBUaGlzIGlzIHRoZSByb290IHJldHVy
bi12YWx1ZSBjb252ZW50aW9uIGZvciB0aGUgWDg2LTMyIGJhY2tlbmQuCiBkZWYgUmV0Q0NfWDg2
XzMyIDogQ2FsbGluZ0NvbnY8WwogICAvLyBJZiBGYXN0Q0MsIHVzZSBSZXRDQ19YODZfMzJfRmFz
dC4KQEAgLTE2Nyw2ICsxNzMsOSBAQAogICAvLyBIaVBFIHVzZXMgUmV0Q0NfWDg2XzY0X0hpUEUK
ICAgQ0NJZkNDPCJDYWxsaW5nQ29udjo6SGlQRSIsIENDRGVsZWdhdGVUbzxSZXRDQ19YODZfNjRf
SGlQRT4+LAogCisgIC8vIEhhbmRsZSBKYXZhU2NyaXB0IGNhbGxzLgorICBDQ0lmQ0M8IkNhbGxp
bmdDb252OjpXZWJLaXRfSlMiLCBDQ0RlbGVnYXRlVG88UmV0Q0NfWDg2XzY0X1dlYktpdF9KUz4+
LAorCiAgIC8vIEhhbmRsZSBleHBsaWNpdCBDQyBzZWxlY3Rpb24KICAgQ0NJZkNDPCJDYWxsaW5n
Q29udjo6WDg2XzY0X1dpbjY0IiwgQ0NEZWxlZ2F0ZVRvPFJldENDX1g4Nl9XaW42NF9DPj4sCiAg
IENDSWZDQzwiQ2FsbGluZ0NvbnY6Olg4Nl82NF9TeXNWIiwgQ0NEZWxlZ2F0ZVRvPFJldENDX1g4
Nl82NF9DPj4sCkBAIC0zMjksNiArMzM4LDE1IEBACiAgIENDSWZUeXBlPFtpMzIsIGk2NCwgZjMy
LCBmNjRdLCBDQ0Fzc2lnblRvU3RhY2s8OCwgOD4+CiBdPjsKIAorZGVmIENDX1g4Nl82NF9XZWJL
aXRfSlMgOiBDYWxsaW5nQ29udjxbCisgIC8vIFByb21vdGUgaTgvaTE2L2kzMiBhcmd1bWVudHMg
dG8gaTY0LgorICBDQ0lmVHlwZTxbaTgsIGkxNiwgaTMyXSwgQ0NQcm9tb3RlVG9UeXBlPGk2ND4+
LAorCisgIC8vIEludGVnZXIvRlAgdmFsdWVzIGdldCBzdG9yZWQgaW4gc3RhY2sgc2xvdHMgdGhh
dCBhcmUgOCBieXRlcyBpbiBzaXplIGFuZAorICAvLyA4LWJ5dGUgYWxpZ25lZCBpZiB0aGVyZSBh
cmUgbm8gbW9yZSByZWdpc3RlcnMgdG8gaG9sZCB0aGVtLgorICBDQ0lmVHlwZTxbaTMyLCBpNjQs
IGYzMiwgZjY0XSwgQ0NBc3NpZ25Ub1N0YWNrPDgsIDg+PgorXT47CisKIC8vPT09LS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLT09PS8vCiAvLyBYODYgQyBDYWxsaW5nIENvbnZlbnRpb24KIC8vPT09LS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LT09PS8vCkBAIC01MjAsNiArNTM4LDcgQEAKIGRlZiBDQ19YODZfNjQgOiBDYWxsaW5nQ29udjxb
CiAgIENDSWZDQzwiQ2FsbGluZ0NvbnY6OkdIQyIsIENDRGVsZWdhdGVUbzxDQ19YODZfNjRfR0hD
Pj4sCiAgIENDSWZDQzwiQ2FsbGluZ0NvbnY6OkhpUEUiLCBDQ0RlbGVnYXRlVG88Q0NfWDg2XzY0
X0hpUEU+PiwKKyAgQ0NJZkNDPCJDYWxsaW5nQ29udjo6V2ViS2l0X0pTIiwgQ0NEZWxlZ2F0ZVRv
PENDX1g4Nl82NF9XZWJLaXRfSlM+PiwKICAgQ0NJZkNDPCJDYWxsaW5nQ29udjo6WDg2XzY0X1dp
bjY0IiwgQ0NEZWxlZ2F0ZVRvPENDX1g4Nl9XaW42NF9DPj4sCiAgIENDSWZDQzwiQ2FsbGluZ0Nv
bnY6Olg4Nl82NF9TeXNWIiwgQ0NEZWxlZ2F0ZVRvPENDX1g4Nl82NF9DPj4sCiAKSW5kZXg6IGxp
Yi9UYXJnZXQvWDg2L1g4Nkluc3RySW5mby5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gbGliL1RhcmdldC9Y
ODYvWDg2SW5zdHJJbmZvLmNwcAkocmV2aXNpb24gMTkyMTE1KQorKysgbGliL1RhcmdldC9YODYv
WDg2SW5zdHJJbmZvLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDE0MSwxMCArNDE0MSw0OCBAQAog
ICBNSS0+YWRkUmVnaXN0ZXJLaWxsZWQoUmVnLCBUUkksIHRydWUpOwogfQogCitzdGF0aWMgTWFj
aGluZUluc3RyKiBmb2xkV2ViS2l0UGF0Y2hwb2ludChNYWNoaW5lRnVuY3Rpb24gJk1GLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWFjaGluZUluc3RyICpNSSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFNtYWxsVmVj
dG9ySW1wbDx1bnNpZ25lZD4gJk9wcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGludCBGcmFtZUluZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgVGFyZ2V0SW5zdHJJbmZvICZUSUkpIHsKKyAgLy8gQXNzdW1lIGZv
ciBub3cgdGhhdCB0aGVyZSdzIG9ubHkgb25lIG9wZXJhbmQgcGVyIGZyYW1lIGluZGV4LgorICAv
LyBGSVhNRTogU3VwcG9ydCBtdWx0aXBsZSByZWZlcmVuY2VzIHRvIHRoZSBzYW1lIEZJIC0gbWF5
IGJlIG5lY2Vzc2FyeSBpZgorICAvLyAgICAgICAgYW55IG9wdGltaXphdGlvbnMgcGxhY2UgZGlm
ZmVyZW50IG9wZXJhbmRzIGluIHRoZSBzYW1lIEZJLgorICBhc3NlcnQoT3BzLnNpemUoKSA9PSAx
ICYmICJNdWx0aXBsZSBvcGVyYW5kcyBmb3IgRkkuIik7CisKKyAgdW5zaWduZWQgRklPcCA9IE9w
c1swXTsKKyAgdW5zaWduZWQgTkFyZ3MgPSBNSS0+Z2V0T3BlcmFuZCgzKS5nZXRJbW0oKTsKKyAg
KHZvaWQpTkFyZ3M7CisgIGlmIChGSU9wIDwgTkFyZ3MgKyA0KQorICAgIHJldHVybiAwOworCisg
IE1hY2hpbmVJbnN0ciAqTmV3TUkgPQorICAgIE1GLkNyZWF0ZU1hY2hpbmVJbnN0cihUSUkuZ2V0
KFRhcmdldE9wY29kZTo6V0VCS0lUX1BBVENIUE9JTlQpLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICBNSS0+Z2V0RGVidWdMb2MoKSwgdHJ1ZSk7CisgIE1hY2hpbmVJbnN0ckJ1aWxkZXIgTUlC
KE1GLCBOZXdNSSk7CisKKyAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IE1JLT5nZXROdW1PcGVy
YW5kcygpOyArK2kpIHsKKyAgICBNYWNoaW5lT3BlcmFuZCAmTU8gPSBNSS0+Z2V0T3BlcmFuZChp
KTsKKyAgICBpZiAoaSA9PSBGSU9wKSB7CisgICAgICBNSUIuYWRkT3BlcmFuZChNYWNoaW5lT3Bl
cmFuZDo6Q3JlYXRlRkkoRnJhbWVJbmRleCkpOworICAgICAgYWRkT2Zmc2V0KE1JQiwgMCk7Cisg
ICAgfQorICAgIGVsc2UKKyAgICAgIE1JQi5hZGRPcGVyYW5kKE1PKTsKKyAgfQorCisgIHJldHVy
biBOZXdNSTsKK30KKwogTWFjaGluZUluc3RyKiBYODZJbnN0ckluZm86OmZvbGRNZW1vcnlPcGVy
YW5kSW1wbChNYWNoaW5lRnVuY3Rpb24gJk1GLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBNYWNoaW5lSW5zdHIgKk1JLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFNtYWxsVmVjdG9ySW1wbDx1bnNpZ25l
ZD4gJk9wcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaW50IEZyYW1lSW5kZXgpIGNvbnN0IHsKKyAgLy8gU3BlY2lhbCBjYXNlIHdlYmtpdC5wYXRj
aHBvaW50LioKKyAgaWYgKE1JLT5nZXRPcGNvZGUoKSA9PSBUYXJnZXRPcGNvZGU6OldFQktJVF9Q
QVRDSFBPSU5UKQorICAgIHJldHVybiBmb2xkV2ViS2l0UGF0Y2hwb2ludChNRiwgTUksIE9wcywg
RnJhbWVJbmRleCwgKnRoaXMpOworCiAgIC8vIENoZWNrIHN3aXRjaCBmbGFnCiAgIGlmIChOb0Z1
c2luZykgcmV0dXJuIE5VTEw7CiAKSW5kZXg6IGxpYi9UYXJnZXQvWDg2L1g4Nk1DSW5zdExvd2Vy
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBsaWIvVGFyZ2V0L1g4Ni9YODZNQ0luc3RMb3dlci5jcHAJKHJl
dmlzaW9uIDE5MjExNSkKKysrIGxpYi9UYXJnZXQvWDg2L1g4Nk1DSW5zdExvd2VyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTcsNiArMTcsNyBAQAogI2luY2x1ZGUgIlg4NkNPRkZNYWNoaW5lTW9k
dWxlSW5mby5oIgogI2luY2x1ZGUgImxsdm0vQURUL1NtYWxsU3RyaW5nLmgiCiAjaW5jbHVkZSAi
bGx2bS9Db2RlR2VuL01hY2hpbmVNb2R1bGVJbmZvSW1wbHMuaCIKKyNpbmNsdWRlICJsbHZtL0Nv
ZGVHZW4vV2ViS2l0U3RhY2tNYXBzLmgiCiAjaW5jbHVkZSAibGx2bS9JUi9UeXBlLmgiCiAjaW5j
bHVkZSAibGx2bS9NQy9NQ0FzbUluZm8uaCIKICNpbmNsdWRlICJsbHZtL01DL01DQ29udGV4dC5o
IgpAQCAtNjg1LDYgKzY4NiwxMTMgQEAKICAgICAuYWRkRXhwcih0bHNSZWYpKTsKIH0KIAorc3Rk
OjpwYWlyPFdlYktpdFN0YWNrTWFwczo6TG9jYXRpb24sIE1hY2hpbmVJbnN0cjo6Y29uc3RfbW9w
X2l0ZXJhdG9yPgorWDg2QXNtUHJpbnRlcjo6d2tzbU9wZXJhbmRQYXJzZXIoTWFjaGluZUluc3Ry
Ojpjb25zdF9tb3BfaXRlcmF0b3IgTU9JLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgTWFjaGluZUluc3RyOjpjb25zdF9tb3BfaXRlcmF0b3IgTU9FKSB7CisKKyAgdHlwZWRlZiBX
ZWJLaXRTdGFja01hcHM6OkxvY2F0aW9uIExvY2F0aW9uOworCisgIGNvbnN0IE1hY2hpbmVPcGVy
YW5kICZNT1AgPSAqTU9JOworICBhc3NlcnQoIU1PUC5pc1JlZ01hc2soKSAmJiAhTU9QLmlzSW1w
bGljaXQoKSAmJgorICAgICAgICAgIlJlZ2lzdGVyIG1hc2sgYW5kIGltcGxpY2l0IG9wZXJhbmRz
IHNob3VsZCBub3QgYmUgcHJvY2Vzc2VkLiIpOworCisgIC8vIElmIHRoZSBuZXh0IG9wZXJhbmQg
aXMgYSByZWdpc3RlciAob3Igd2UncmUgYXQgdGhlIGVuZCBvZiB0aGUgc2VxdWVuY2UpCisgIC8v
IHRoZW4gdGhpcyBzaG91bGQgYmUgYSByZWdpc3RlciBvcGVyYW5kLiBJZiB0aGUgbmV4dCBvcGVy
YW5kIGlzIGFuCisgIC8vIGltbWVkaWF0ZSwgdGhlbiB0aGlzIGlzIGEgc3RhY2sgcmVmZXJlbmNl
LgorICBpZiAobGx2bTo6bmV4dChNT0kpID09IE1PRSB8fCBsbHZtOjpuZXh0KE1PSSktPmlzUmVn
KCkpIHsKKyAgICBhc3NlcnQoTU9QLmlzUmVnKCkgJiYgIkV4cGVjdGVkIHJlZ2lzdGVyIG9wZXJh
bmQgaGVyZS4iKTsKKyAgICBhc3NlcnQoVGFyZ2V0UmVnaXN0ZXJJbmZvOjppc1BoeXNpY2FsUmVn
aXN0ZXIoTU9QLmdldFJlZygpKSAmJgorICAgICAgICAgICAiVmlydHJlZyBvcGVyYW5kcyBzaG91
bGQgaGF2ZSBiZWVuIHJld3JpdHRlbiBiZWZvcmUgbm93LiIpOworICAgIHJldHVybiBzdGQ6Om1h
a2VfcGFpcihMb2NhdGlvbihMb2NhdGlvbjo6UmVnaXN0ZXIsIE1PUC5nZXRSZWcoKSwgMCksICsr
TU9JKTsKKyAgfQorCisgIC8vIGVsc2U6CisgIC8vIFdlIHBhcnNlZCBhIHJlZ2lzdGVyIGZvbGxv
d2VkIGJ5IGEgbm9uLXJlZ2lzdGVyLiBBc3N1bWUgdGhpcyBpcyBhIHN0YWNrCisgIC8vIHJlZmVy
ZW5jZS4KKyAgY29uc3QgTWFjaGluZU9wZXJhbmQgJkJhc2UgPSBNT1A7CisgIGNvbnN0IE1hY2hp
bmVPcGVyYW5kICZTY2FsZSA9ICooKytNT0kpOworICBjb25zdCBNYWNoaW5lT3BlcmFuZCAmSW5k
ZXggPSAqKCsrTU9JKTsKKyAgY29uc3QgTWFjaGluZU9wZXJhbmQgJkRpc3AgPSAqKCsrTU9JKTsK
KyAgY29uc3QgTWFjaGluZU9wZXJhbmQgJlplcm9SZWcgPSAqKCsrTU9JKTsKKworICAvLyBTYW5p
dHkgY2hlY2sgZm9yIHN1cHBvcnRlZCBvcGVyYW5kIGZvcm1hdC4KKyAgYXNzZXJ0KEJhc2UuaXNS
ZWcoKSAmJgorICAgICAgICAgU2NhbGUuaXNJbW0oKSAmJiBTY2FsZS5nZXRJbW0oKSA9PSAxICYm
CisgICAgICAgICBJbmRleC5pc1JlZygpICYmIEluZGV4LmdldFJlZygpID09IDAgJiYKKyAgICAg
ICAgIERpc3AuaXNJbW0oKSAmJiBaZXJvUmVnLmlzUmVnKCkgJiYgKFplcm9SZWcuZ2V0UmVnKCkg
PT0gMCkgJiYKKyAgICAgICAgICJVbnN1cHBvcnRlZCB4ODYgbWVtb3J5IG9wZXJhbmQgc2VxdWVu
Y2UuIik7CisKKyAgcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKAorICAgICAgICAgICBMb2NhdGlvbihM
b2NhdGlvbjo6SW5kaXJlY3QsIEJhc2UuZ2V0UmVnKCksIERpc3AuZ2V0SW1tKCkpLCArK01PSSk7
Cit9CisKK3N0YXRpYyBNYWNoaW5lSW5zdHI6OmNvbnN0X21vcF9pdGVyYXRvcgorZ2V0U3RhY2tN
YXBFbmRNT1AoTWFjaGluZUluc3RyOjpjb25zdF9tb3BfaXRlcmF0b3IgTU9JLAorICAgICAgICAg
ICAgICAgICAgTWFjaGluZUluc3RyOjpjb25zdF9tb3BfaXRlcmF0b3IgTU9FKSB7CisgIGZvciAo
OyBNT0kgIT0gTU9FOyArK01PSSkKKyAgICBpZiAoTU9JLT5pc1JlZ01hc2soKSB8fCAoTU9JLT5p
c1JlZygpICYmIE1PSS0+aXNJbXBsaWNpdCgpKSkKKyAgICAgIGJyZWFrOworCisgIHJldHVybiBN
T0k7Cit9CisKK3N0YXRpYyB2b2lkIExvd2VyV0VCS0lUX1NUQUNLTUFQKE1DU3RyZWFtZXIgJk91
dFN0cmVhbWVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWDg2TUNJbnN0TG93
ZXIgJk1DSW5zdExvd2VyaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2Vi
S2l0U3RhY2tNYXBzICZXU00sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBNYWNoaW5lSW5zdHIgJk1JKQoreworICBpbnQ2NF90IElEID0gTUkuZ2V0T3BlcmFuZCgwKS5n
ZXRJbW0oKTsKKyAgdW5zaWduZWQgTnVtTk9QQnl0ZXMgPSBNSS5nZXRPcGVyYW5kKDEpLmdldElt
bSgpOworCisgIGFzc2VydCgoaW50MzJfdClJRCA9PSBJRCAmJiAiU3RhY2sgbWFwcyBob2xkIDMy
LWJpdCBJRHMiKTsKKyAgV1NNLnJlY29yZFN0YWNrTWFwKE1JLCBJRCwgbGx2bTo6bmV4dChNSS5v
cGVyYW5kc19iZWdpbigpLCAyKSwKKyAgICAgICAgICAgICAgICAgICAgIGdldFN0YWNrTWFwRW5k
TU9QKE1JLm9wZXJhbmRzX2JlZ2luKCksIE1JLm9wZXJhbmRzX2VuZCgpKSk7CisgIC8vIEVtaXQg
cGFkZGluZy4KKyAgLy8KKyAgLy8gRklYTUU6IFRoZSBTdGFja01hcCBzaGFkb3cgZG9lcyBub3Qg
aGF2ZSB0byBiZSBub3BzLiBXZSBqdXN0IG5lZWQgdG8gZW5zdXJlCisgIC8vIHRoZSBmdW5jdGlv
biBkb2VzIGVuZCBvciBjb250YWluIGFub3RoZXIgc3RhY2sgbWFwIGJlZm9yZSB0aGUgc2hhZG93
LiBXZQorICAvLyBzaG91bGQgaGF2ZSBhIHByZUVtaXQgcGFzcyBkbyB0aGlzLCBhbmQgYWRqdXN0
IHRoZSBzdGFja21hcCdzIHNoYWRvdyBieXRlcworICAvLyBhY2NvcmRpbmdseSwgdXN1YWxseSBk
b3duIHRvIHplcm8gYnl0ZXMuIFRoaXMgaW1wbGVtZW50YXRpb24gd29uJ3QgYWN0dWFsbHkKKyAg
Ly8gbmVlZCB0byBjaGFuZ2UuCisgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBOdW1OT1BCeXRl
czsgKytpKQorICAgIE91dFN0cmVhbWVyLkVtaXRJbnN0cnVjdGlvbihNQ0luc3RCdWlsZGVyKFg4
Njo6Tk9PUCkpOworfQorCitzdGF0aWMgdm9pZCBMb3dlcldFQktJVF9QQVRDSFBPSU5UKE1DU3Ry
ZWFtZXIgJk91dFN0cmVhbWVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBY
ODZNQ0luc3RMb3dlciAmTUNJbnN0TG93ZXJpbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFdlYktpdFN0YWNrTWFwcyAmV1NNLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBNYWNoaW5lSW5zdHIgJk1JKQoreworICBpbnQ2NF90IElEID0gTUku
Z2V0T3BlcmFuZCgwKS5nZXRJbW0oKTsKKyAgYXNzZXJ0KChpbnQzMl90KUlEID09IElEICYmICJT
dGFjayBtYXBzIGhvbGQgMzItYml0IElEcyIpOworCisgIC8vIEdldCB0aGUgbnVtYmVyIG9mIGFy
Z3VtZW50cyBwYXJ0aWNpcGF0aW5nIGluIHRoZSBjYWxsLiBUaGlzIG51bWJlciB3YXMKKyAgLy8g
YWRqdXN0ZWQgZHVyaW5nIGNhbGwgbG93ZXJpbmcgYnkgc3VidHJhY3Rpbmcgc3RhY2sgYXJncy4K
KyAgLy8KKyAgLy8gVE9ETzogRm9yIEFueVJlZ0NDLCB0aGUgY2FsbCBhcmd1bWVudHMgYWxzbyBu
ZWVkIHN0YWNrIG1hcCBlbnRyaWVzLgorICBpbnQ2NF90IFN0YWNrTWFwSWR4ID0gTUkuZ2V0T3Bl
cmFuZCgzKS5nZXRJbW0oKSArIDQ7CisgIGFzc2VydChTdGFja01hcElkeCA8PSBNSS5nZXROdW1P
cGVyYW5kcygpICYmICJQYXRjaHBvaW50IGRyb3BwZWQgYXJncy4iKTsKKworICBXU00ucmVjb3Jk
U3RhY2tNYXAoTUksIElELCBsbHZtOjpuZXh0KE1JLm9wZXJhbmRzX2JlZ2luKCksIFN0YWNrTWFw
SWR4KSwKKyAgICAgICAgICAgICAgICAgICAgIGdldFN0YWNrTWFwRW5kTU9QKE1JLm9wZXJhbmRz
X2JlZ2luKCksIE1JLm9wZXJhbmRzX2VuZCgpKSk7CisKKyAgLy8gRW1pdCBjYWxsLiBXZSBuZWVk
IHRvIGtub3cgaG93IG1hbnkgYnl0ZXMgd2UgZW5jb2RlZCBoZXJlLgorICAvLworICAvLyBGSVhN
RTogQWxzbyBlbmNvZGUgdGhlIHRhcmdldCBhZGRyZXNzIG1hdGVyaWFsaXphdGlvbiBoZXJlIGFz
IGEgMTAtYnl0ZQorICAvLyBtb3ZhYnNxLiBDaGFuZ2UgdGhlIHRhcmdldCBvcGVyYW5kIGZyb20g
cmVnaXN0ZXIgdG8gaW1tZWRpYXRlLgorICB1bnNpZ25lZCBFbmNvZGVkQnl0ZXMgPSAyOworICBP
dXRTdHJlYW1lci5FbWl0SW5zdHJ1Y3Rpb24oTUNJbnN0QnVpbGRlcihYODY6OkNBTEw2NHIpCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5hZGRSZWcoTUkuZ2V0T3BlcmFuZCgyKS5n
ZXRSZWcoKSkpOworCisgIC8vIEVtaXQgcGFkZGluZy4KKyAgdW5zaWduZWQgTnVtTk9QQnl0ZXMg
PSBNSS5nZXRPcGVyYW5kKDEpLmdldEltbSgpOworICBhc3NlcnQoTnVtTk9QQnl0ZXMgPj0gRW5j
b2RlZEJ5dGVzICYmCisgICAgICAgICAid2Via2l0LnBhdGNocG9pbnQgY2FuJ3QgcmVxdWVzdCBz
aXplIGxlc3MgdGhhbiB0aGUgbGVuZ3RoIG9mIGEgY2FsbCIpOworCisgIGZvciAodW5zaWduZWQg
aSA9IEVuY29kZWRCeXRlczsgaSA8IE51bU5PUEJ5dGVzOyArK2kpCisgICAgT3V0U3RyZWFtZXIu
RW1pdEluc3RydWN0aW9uKE1DSW5zdEJ1aWxkZXIoWDg2OjpOT09QKSk7Cit9CisKIHZvaWQgWDg2
QXNtUHJpbnRlcjo6RW1pdEluc3RydWN0aW9uKGNvbnN0IE1hY2hpbmVJbnN0ciAqTUkpIHsKICAg
WDg2TUNJbnN0TG93ZXIgTUNJbnN0TG93ZXJpbmcoTWFuZywgKk1GLCAqdGhpcyk7CiAgIHN3aXRj
aCAoTUktPmdldE9wY29kZSgpKSB7CkBAIC03NzQsNiArODgyLDEyIEBACiAgICAgICAuYWRkRXhw
cihEb3RFeHByKSk7CiAgICAgcmV0dXJuOwogICB9CisKKyAgY2FzZSBUYXJnZXRPcGNvZGU6OldF
QktJVF9TVEFDS01BUDoKKyAgICByZXR1cm4gTG93ZXJXRUJLSVRfU1RBQ0tNQVAoT3V0U3RyZWFt
ZXIsIE1DSW5zdExvd2VyaW5nLCBXU00sICpNSSk7CisKKyAgY2FzZSBUYXJnZXRPcGNvZGU6OldF
QktJVF9QQVRDSFBPSU5UOgorICAgIHJldHVybiBMb3dlcldFQktJVF9QQVRDSFBPSU5UKE91dFN0
cmVhbWVyLCBNQ0luc3RMb3dlcmluZywgV1NNLCAqTUkpOwogICB9CiAKICAgTUNJbnN0IFRtcElu
c3Q7CkluZGV4OiBsaWIvVGFyZ2V0L1g4Ni9YODZSZWdpc3RlckluZm8uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIGxpYi9UYXJnZXQvWDg2L1g4NlJlZ2lzdGVySW5mby5jcHAJKHJldmlzaW9uIDE5MjExNSkK
KysrIGxpYi9UYXJnZXQvWDg2L1g4NlJlZ2lzdGVySW5mby5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTI5OCw3ICsyOTgsNyBAQAogICAgIHJldHVybiBDU1JfTm9SZWdzX1JlZ01hc2s7CiAgIGlmICgh
SXM2NEJpdCkKICAgICByZXR1cm4gQ1NSXzMyX1JlZ01hc2s7Ci0gIGlmIChDQyA9PSBDYWxsaW5n
Q29udjo6Q29sZCkKKyAgaWYgKENDID09IENhbGxpbmdDb252OjpDb2xkIHx8IENDID09IENhbGxp
bmdDb252OjpXZWJLaXRfSlMpCiAgICAgcmV0dXJuIENTUl9Nb3N0UmVnc182NF9SZWdNYXNrOwog
ICBpZiAoSXNXaW42NCkKICAgICByZXR1cm4gQ1NSX1dpbjY0X1JlZ01hc2s7CkluZGV4OiB0ZXN0
L0NvZGVHZW4vWDg2L3dlYmtpdC1wYXRjaHBvaW50LmxsCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHRlc3QvQ29k
ZUdlbi9YODYvd2Via2l0LXBhdGNocG9pbnQubGwJKHJldmlzaW9uIDApCisrKyB0ZXN0L0NvZGVH
ZW4vWDg2L3dlYmtpdC1wYXRjaHBvaW50LmxsCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzUg
QEAKKzsgUlVOOiBsbGMgPCAlcyAtbWFyY2g9eDg2LTY0IHwgRmlsZUNoZWNrICVzCisKKzsgVHJp
dmlhbCBwYXRjaHBvaW50IGNvZGVnZW4KK2RlZmluZSB2b2lkIEB0cml2aWFsX3drcHBfY29kZWdl
bihpNjQgJXAxLCBpNjQgJXAyLCBpNjQgJXAzLCBpNjQgJXA0KSAjMCB7CitlbnRyeToKKzsgQ0hF
Q0s6IF90cml2aWFsX3drcHBfY29kZWdlbjoKKzsgQ0hFQ0s6IEx0bXA1OgorOyBDSEVDSy1ORVhU
OiBjYWxscSAqJXJheAorOyBDSEVDSy1ORVhUOiBub3AKKyAgJXJlc29sdmVDYWxsID0gaW50dG9w
dHIgaTY0IC01NTkwMzg3MzcgdG8gaTgqCisgIHRhaWwgY2FsbCB2b2lkIChpMzIsIGkzMiwgaTgq
LCBpMzIsIC4uLikqIEBsbHZtLndlYmtpdC5wYXRjaHBvaW50LnZvaWQoaTMyIDMsIGkzMiAxMiwg
aTgqICVyZXNvbHZlQ2FsbCwgaTMyIDQsIGk2NCAlcDEsIGk2NCAlcDIsIGk2NCAlcDMsIGk2NCAl
cDQpICMxCisgIHJldCB2b2lkCit9CisKKzsgQ2FsbGVyIGZyYW1lIG1ldGFkYXRhIHdpdGggc3Rh
Y2ttYXBzLiBUaGlzIHNob3VsZCBub3QgYmUgb3B0aW1pemVkIGFzIGEgbGVhZiBmdW5jdGlvbi4K
KzsKKzsgVE9ETzogY2hlY2sgZnJhbWUgY3JlYXRpb24uIFNQIG11c3QgYmUgdmFsaWQgYXQgYSBz
dGFjayBtYXAuCitkZWZpbmUgdm9pZCBAY2FsbGVyX21ldGFfbGVhZihpNjQgJWwxKSAjMCB7Citl
bnRyeToKKyAgJW1ldGFkYXRhID0gYWxsb2NhIGk2NCwgaTMyIDMsIGFsaWduIDgKKyAgc3RvcmUg
aTY0IDExLCBpNjQqICVtZXRhZGF0YQorICBzdG9yZSBpNjQgMTIsIGk2NCogJW1ldGFkYXRhCisg
IHN0b3JlIGk2NCAxMywgaTY0KiAlbWV0YWRhdGEKKyAgY2FsbCB2b2lkIChpMzIsIGkzMiwgLi4u
KSogQGxsdm0ud2Via2l0LnN0YWNrbWFwKGkzMiA0LCBpMzIgMCwgaTY0KiAlbWV0YWRhdGEpICMx
CisgIGNhbGwgdm9pZCAoaTMyLCBpMzIsIC4uLikqIEBsbHZtLndlYmtpdC5zdGFja21hcChpMzIg
NSwgaTMyIDEyLCBpNjQgJWwxKSAjMQorICByZXQgdm9pZAorfQorCisKK2RlY2xhcmUgdm9pZCBA
bGx2bS53ZWJraXQuc3RhY2ttYXAoaTMyLCBpMzIsIC4uLikgIzEKK2RlY2xhcmUgdm9pZCBAbGx2
bS53ZWJraXQucGF0Y2hwb2ludC52b2lkKGkzMiwgaTMyLCBpOCosIGkzMiwgLi4uKSAjMQorCith
dHRyaWJ1dGVzICMwID0geyBub2lubGluZSBub3Vud2luZCBzc3AgdXd0YWJsZSAibGVzcy1wcmVj
aXNlLWZwbWFkIj0iZmFsc2UiICJuby1mcmFtZS1wb2ludGVyLWVsaW0iPSJ0cnVlIiAibm8tZnJh
bWUtcG9pbnRlci1lbGltLW5vbi1sZWFmIj0idHJ1ZSIgIm5vLWluZnMtZnAtbWF0aCI9ImZhbHNl
IiAibm8tbmFucy1mcC1tYXRoIj0iZmFsc2UiICJzdGFjay1wcm90ZWN0b3ItYnVmZmVyLXNpemUi
PSI4IiAidW5zYWZlLWZwLW1hdGgiPSJmYWxzZSIgInVzZS1zb2Z0LWZsb2F0Ij0iZmFsc2UiIH0K
KworYXR0cmlidXRlcyAjMSA9IHsgImxlc3MtcHJlY2lzZS1mcG1hZCI9ImZhbHNlIiAibm8tZnJh
bWUtcG9pbnRlci1lbGltIj0idHJ1ZSIgIm5vLWZyYW1lLXBvaW50ZXItZWxpbS1ub24tbGVhZiI9
InRydWUiICJuby1pbmZzLWZwLW1hdGgiPSJmYWxzZSIgIm5vLW5hbnMtZnAtbWF0aCI9ImZhbHNl
IiAic3RhY2stcHJvdGVjdG9yLWJ1ZmZlci1zaXplIj0iOCIgInVuc2FmZS1mcC1tYXRoIj0iZmFs
c2UiICJ1c2Utc29mdC1mbG9hdCI9ImZhbHNlIiB9CkluZGV4OiB0ZXN0L0NvZGVHZW4vWDg2L3dl
YmtpdC1zdGFja21hcC5sbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSB0ZXN0L0NvZGVHZW4vWDg2L3dlYmtpdC1z
dGFja21hcC5sbAkocmV2aXNpb24gMCkKKysrIHRlc3QvQ29kZUdlbi9YODYvd2Via2l0LXN0YWNr
bWFwLmxsCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTYxIEBACis7IFJVTjogbGxjIDwgJXMg
LW1hcmNoPXg4Ni02NCB8IEZpbGVDaGVjayAlcworCis7IENIRUNLLUxBQkVMOiAuc2VjdGlvbglf
X0pTX1NUQUNLTUFQUyxfX2pzX3N0YWNrbWFwcworOyBOdW0gQ29uc3RhbnRzCis7IENIRUNLLU5F
WFQ6IC5sb25nCTAKKzsgTnVtIENhbGxzaXRlcworOyBDSEVDSy1ORVhUOiAubG9uZwk4CisKKzsg
SW5saW5lIE9TUiBFeGl0Cis7Cis7IENIRUNLLU5FWFQ6CS5sb25nCTMKKzsgQ0hFQ0stTkVYVDog
ICAubG9uZyAgIEx7ey4qfX0tX29zcmlubGluZQorOyBDSEVDSy1ORVhUOgkuc2hvcnQJMAorOyBD
SEVDSy1ORVhUOgkuc2hvcnQJMgorOyBFbmNvZGluZzogNDA5NiArIFJCWAorOyBDSEVDSy1ORVhU
Ogkuc2hvcnQJNDA5OQorOyBDSEVDSy1ORVhUOgkuc2hvcnQJMAorOyBFbmNvZGluZzogNDA5NiAr
IFIxNAorOyBDSEVDSy1ORVhUOgkuc2hvcnQJNDExMAorOyBDSEVDSy1ORVhUOgkuc2hvcnQJMAor
ZGVmaW5lIHZvaWQgQG9zcmlubGluZShpNjQgJWEsIGk2NCAlYikgIzAgeworZW50cnk6CisgIDsg
UnVudGltZSB2b2lkLT52b2lkIGNhbGwuCisgIGNhbGwgdm9pZCBpbnR0b3B0ciAoaTY0IC01NTkw
Mzg3MzcgdG8gdm9pZCAoKSopKCkKKyAgOyBGb2xsb3dlZCBieSBpbmxpbmUgT1NSIHBhdGNocG9p
bnQgd2l0aCAxMi1ieXRlIHNoYWRvdyBhbmQgMiBsaXZlIHZhcnMuCisgIGNhbGwgdm9pZCAoaTMy
LCBpMzIsIC4uLikqIEBsbHZtLndlYmtpdC5zdGFja21hcChpMzIgMywgaTMyIDEyLCBpNjQgJWEs
IGk2NCAlYikgIzEKKyAgcmV0IHZvaWQKK30KKworOyBDb2xkIE9TUiBFeGl0Cis7Cis7IENIRUNL
LU5FWFQ6CS5sb25nCTQKKzsgQ0hFQ0stTkVYVDogICAubG9uZyAgIEx7ey4qfX0tX29zcmNvbGQK
KzsgQ0hFQ0stTkVYVDoJLnNob3J0CTAKKzsgQ0hFQ0stTkVYVDoJLnNob3J0CTIKKzsgRW5jb2Rp
bmc6IDQwOTYgKyBSREkKKzsgQ0hFQ0stTkVYVDoJLnNob3J0CTQxMDEKKzsgQ0hFQ0stTkVYVDoJ
LnNob3J0CTAKKzsgRW5jb2Rpbmc6IDQwOTYgKyBSU0kKKzsgQ0hFQ0stTkVYVDoJLnNob3J0CTQx
MDAKKzsgQ0hFQ0stTkVYVDoJLnNob3J0CTAKK2RlZmluZSB2b2lkIEBvc3Jjb2xkKGk2NCAlYSwg
aTY0ICViKSAjMCB7CitlbnRyeToKKyAgJXRlc3QgPSBpY21wIHNsdCBpNjQgJWEsICViCisgIGJy
IGkxICV0ZXN0LCBsYWJlbCAlcmV0LCBsYWJlbCAlY29sZAorY29sZDoKKyAgOyBPU1IgcGF0Y2hw
b2ludCB3aXRoIDEyLWJ5dGUgbm9wLXNsaWRlIGFuZCAyIGxpdmUgdmFycy4KKyAgJXRodW5rID0g
aW50dG9wdHIgaTY0IC01NTkwMzg3MzcgdG8gaTgqCisgIGNhbGwgdm9pZCAoaTMyLCBpMzIsIGk4
KiwgaTMyLCAuLi4pKiBAbGx2bS53ZWJraXQucGF0Y2hwb2ludC52b2lkKGkzMiA0LCBpMzIgMTIs
IGk4KiAldGh1bmssIGkzMiAwLCBpNjQgJWEsIGk2NCAlYikgIzEKKyAgdW5yZWFjaGFibGUKK3Jl
dDoKKyAgcmV0IHZvaWQKK30KKworOyBQcm9wZXJ0eSBSZWFkCis7IENIRUNLLU5FWFQ6CS5sb25n
CTUKKzsgQ0hFQ0stTkVYVDogICAubG9uZyAgIEx7ey4qfX0tX3Byb3BlcnR5UmVhZAorOyBDSEVD
Sy1ORVhUOgkuc2hvcnQJMAorOyBDSEVDSy1ORVhUOgkuc2hvcnQJMAorOworOyBGSVhNRTogV2Ug
c2hvdWxkIGhhdmUgYSBzdGFjayBtYXAgZW50cnkgZm9yIHRoZSBvYmplY3QgYW5kIHJldHVybgor
OyB2YWx1ZSBvbmNlIHdlIG1vdmUgdG8gQW55UmVnQ0MgY29udmVudGlvbi4KK2RlZmluZSBpNjQg
QHByb3BlcnR5UmVhZChpNjQqICVvYmopIHsKK2VudHJ5OgorICAlcmVzb2x2ZVJlYWQgPSBpbnR0
b3B0ciBpNjQgLTU1OTAzODczNyB0byBpOCoKKyAgJXJlc3VsdCA9IGNhbGwgaTY0IChpMzIsIGkz
MiwgaTgqLCBpMzIsIC4uLikqIEBsbHZtLndlYmtpdC5wYXRjaHBvaW50Lmk2NChpMzIgNSwgaTMy
IDEyLCBpOCogJXJlc29sdmVSZWFkLCBpMzIgMSwgaTY0KiAlb2JqKSAjMQorICAlYWRkID0gYWRk
IGk2NCAlcmVzdWx0LCAzCisgIHJldCBpNjQgJWFkZAorfQorCis7IFByb3BlcnR5IFdyaXRlCis7
IENIRUNLLU5FWFQ6CS5sb25nCTYKKzsgQ0hFQ0stTkVYVDogICAubG9uZyAgIEx7ey4qfX0tX3By
b3BlcnR5V3JpdGUKKzsgQ0hFQ0stTkVYVDoJLnNob3J0CTAKKzsgQ0hFQ0stTkVYVDoJLnNob3J0
CTAKKzsgRklYTUU6IFdlIHNob3VsZCBoYXZlIGEgc3RhY2sgbWFwIGVudHJ5IGZvciB0aGUgb2Jq
ZWN0IGFuZCBhcmd1bWVudAorOyBvbmNlIHdlIG1vdmUgdG8gQW55UmVnQ0MgY29udmVudGlvbi4K
K2RlZmluZSB2b2lkIEBwcm9wZXJ0eVdyaXRlKGk2NCAlZHVtbXkxLCBpNjQqICVvYmosIGk2NCAl
ZHVtbXkyLCBpNjQgJWEpIHsKK2VudHJ5OgorICAlcmVzb2x2ZVdyaXRlID0gaW50dG9wdHIgaTY0
IC01NTkwMzg3MzcgdG8gaTgqCisgIGNhbGwgdm9pZCAoaTMyLCBpMzIsIGk4KiwgaTMyLCAuLi4p
KiBAbGx2bS53ZWJraXQucGF0Y2hwb2ludC52b2lkKGkzMiA2LCBpMzIgMTIsIGk4KiAlcmVzb2x2
ZVdyaXRlLCBpMzIgMiwgaTY0KiAlb2JqLCBpNjQgJWEpICMxCisgIHJldCB2b2lkCit9CisKKzsg
Vm9pZCBKUyBDYWxsCis7Cis7IENIRUNLLU5FWFQ6CS5sb25nCTcKKzsgQ0hFQ0stTkVYVDogICAu
bG9uZyAgIEx7ey4qfX0tX2pzVm9pZENhbGwKKzsgQ0hFQ0stTkVYVDoJLnNob3J0CTAKKzsgQ0hF
Q0stTkVYVDoJLnNob3J0CTIKKzsgRW5jb2Rpbmc6IDQwOTYgKyBSQ1gKKzsgQ0hFQ0stTkVYVDoJ
LnNob3J0CTQwOTgKKzsgQ0hFQ0stTkVYVDoJLnNob3J0CTAKKzsgRW5jb2Rpbmc6IDQwOTYgKyBS
OAorOyBDSEVDSy1ORVhUOgkuc2hvcnQJNDEwNAorOyBDSEVDSy1ORVhUOgkuc2hvcnQJMAorZGVm
aW5lIHZvaWQgQGpzVm9pZENhbGwoaTY0ICVkdW1teTEsIGk2NCogJW9iaiwgaTY0ICVhcmcsIGk2
NCAlbDEsIGk2NCAlbDIpIHsKK2VudHJ5OgorICAlcmVzb2x2ZUNhbGwgPSBpbnR0b3B0ciBpNjQg
LTU1OTAzODczNyB0byBpOCoKKyAgY2FsbCB3ZWJraXRfanNjYyB2b2lkIChpMzIsIGkzMiwgaTgq
LCBpMzIsIC4uLikqIEBsbHZtLndlYmtpdC5wYXRjaHBvaW50LnZvaWQoaTMyIDcsIGkzMiAxMiwg
aTgqICVyZXNvbHZlQ2FsbCwgaTMyIDIsIGk2NCogJW9iaiwgaTY0ICVhcmcsIGk2NCAlbDEsIGk2
NCAlbDIpICMxCisgIHJldCB2b2lkCit9CisKKzsgaTY0IEpTIENhbGwKKzsKKzsgRklYTUU6IHJl
ZW5hYmxlIHRoZXNlIGNoZWNrcyB3aGVuIHN0YWNrIG1hcHMgc3VwcG9ydCBmcmFtZSBpbmRpY2Vz
LgorOyBDSEVDSzoJLmxvbmcJOAorOyBDSEVDSy1ORVhUOiAgIC5sb25nICAgTHt7Lip9fS1fanNJ
bnRDYWxsCis7IENIRUNLLU5FWFQ6CS5zaG9ydAkwCis7IENIRUNLLU5FWFQ6CS5zaG9ydAkyCis7
IEVuY29kaW5nOiA0MDk2ICsgUkNYCis7IENIRUNLLU5FWFQ6CS5zaG9ydAk0MDk4Cis7IENIRUNL
LU5FWFQ6CS5zaG9ydAkwCis7IEVuY29kaW5nOiA0MDk2ICsgUjgKKzsgQ0hFQ0stTkVYVDoJLnNo
b3J0CTQxMDQKKzsgQ0hFQ0stTkVYVDoJLnNob3J0CTAKK2RlZmluZSBpNjQgQGpzSW50Q2FsbChp
NjQgJWR1bW15MSwgaTY0KiAlb2JqLCBpNjQgJWFyZywgaTY0ICVsMSwgaTY0ICVsMikgeworZW50
cnk6CisgICVyZXNvbHZlQ2FsbCA9IGludHRvcHRyIGk2NCAtNTU5MDM4NzM3IHRvIGk4KgorICAl
cmVzdWx0ID0gY2FsbCB3ZWJraXRfanNjYyBpNjQgKGkzMiwgaTMyLCBpOCosIGkzMiwgLi4uKSog
QGxsdm0ud2Via2l0LnBhdGNocG9pbnQuaTY0KGkzMiA4LCBpMzIgMTIsIGk4KiAlcmVzb2x2ZUNh
bGwsIGkzMiAyLCBpNjQqICVvYmosIGk2NCAlYXJnLCBpNjQgJWwxLCBpNjQgJWwyKSAjMQorICAl
YWRkID0gYWRkIGk2NCAlcmVzdWx0LCAzCisgIHJldCBpNjQgJWFkZAorfQorCis7IENhbGxlciBm
cmFtZSBtZXRhZGF0YS4KKzsKKzsgQ0hFQ0s6CS5sb25nCTkKKzsgQ0hFQ0stTkVYVDoJLmxvbmcJ
THt7Lip9fS1fY2FsbGVyTWV0YQorOyBDSEVDSy1ORVhUOgkuc2hvcnQJMAorOyBDSEVDSy1ORVhU
Ogkuc2hvcnQJMQorOyBFbmNvZGluZzogNDA5NiArIFJBWAorOyBDSEVDSy1ORVhUOgkuc2hvcnQJ
NDA5NgorOyBDSEVDSy1ORVhUOgkuc2hvcnQJMAorOyBDSEVDSzoJLmxvbmcJMTAKKzsgQ0hFQ0st
TkVYVDoJLmxvbmcJTHt7Lip9fS1fY2FsbGVyTWV0YQorOyBDSEVDSy1ORVhUOgkuc2hvcnQJMAor
OyBDSEVDSy1ORVhUOgkuc2hvcnQJMQorOyBFbmNvZGluZzogNDA5NiArIFJESQorOyBDSEVDSy1O
RVhUOgkuc2hvcnQJNDEwMQorOyBDSEVDSy1ORVhUOgkuc2hvcnQJMAorZGVmaW5lIHZvaWQgQGNh
bGxlck1ldGEoaTY0ICVsMSwgaTY0KiAlb2JqKSAjMCB7CitlbnRyeToKKyAgJW1ldGFkYXRhID0g
YWxsb2NhIGk2NCwgaTMyIDMsIGFsaWduIDgKKyAgc3RvcmUgaTY0IDExLCBpNjQqICVtZXRhZGF0
YQorICBzdG9yZSBpNjQgMTIsIGk2NCogJW1ldGFkYXRhCisgIHN0b3JlIGk2NCAxMywgaTY0KiAl
bWV0YWRhdGEKKyAgY2FsbCB2b2lkIChpMzIsIGkzMiwgLi4uKSogQGxsdm0ud2Via2l0LnN0YWNr
bWFwKGkzMiA5LCBpMzIgMCwgaTY0KiAlbWV0YWRhdGEpICMxCisgICVyZXNvbHZlQ2FsbCA9IGlu
dHRvcHRyIGk2NCAtNTU5MDM4NzM3IHRvIGk4KgorICBjYWxsIHdlYmtpdF9qc2NjIHZvaWQgKGkz
MiwgaTMyLCBpOCosIGkzMiwgLi4uKSogQGxsdm0ud2Via2l0LnBhdGNocG9pbnQudm9pZChpMzIg
MTAsIGkzMiAxMiwgaTgqICVyZXNvbHZlQ2FsbCwgaTMyIDEsIGk2NCogJW9iaiwgaTY0ICVsMSkg
IzEKKyAgcmV0IHZvaWQKK30KKworZGVjbGFyZSB2b2lkIEBsbHZtLndlYmtpdC5zdGFja21hcChp
MzIsIGkzMiwgLi4uKSAjMgorZGVjbGFyZSB2b2lkIEBsbHZtLndlYmtpdC5wYXRjaHBvaW50LnZv
aWQoaTMyLCBpMzIsIGk4KiwgaTMyLCAuLi4pICMyCitkZWNsYXJlIGk2NCBAbGx2bS53ZWJraXQu
cGF0Y2hwb2ludC5pNjQoaTMyLCBpMzIsIGk4KiwgaTMyLCAuLi4pICMyCisKK2F0dHJpYnV0ZXMg
IzAgPSB7IG5vaW5saW5lIG5vdW53aW5kIHNzcCB1d3RhYmxlICJsZXNzLXByZWNpc2UtZnBtYWQi
PSJmYWxzZSIgIm5vLWZyYW1lLXBvaW50ZXItZWxpbSI9InRydWUiICJuby1mcmFtZS1wb2ludGVy
LWVsaW0tbm9uLWxlYWYiPSJ0cnVlIiAibm8taW5mcy1mcC1tYXRoIj0iZmFsc2UiICJuby1uYW5z
LWZwLW1hdGgiPSJmYWxzZSIgInN0YWNrLXByb3RlY3Rvci1idWZmZXItc2l6ZSI9IjgiICJ1bnNh
ZmUtZnAtbWF0aCI9ImZhbHNlIiAidXNlLXNvZnQtZmxvYXQiPSJmYWxzZSIgfQorCithdHRyaWJ1
dGVzICMxID0geyBub3Vud2luZCB9CisKK2F0dHJpYnV0ZXMgIzIgPSB7ICJsZXNzLXByZWNpc2Ut
ZnBtYWQiPSJmYWxzZSIgIm5vLWZyYW1lLXBvaW50ZXItZWxpbSI9InRydWUiICJuby1mcmFtZS1w
b2ludGVyLWVsaW0tbm9uLWxlYWYiPSJ0cnVlIiAibm8taW5mcy1mcC1tYXRoIj0iZmFsc2UiICJu
by1uYW5zLWZwLW1hdGgiPSJmYWxzZSIgInN0YWNrLXByb3RlY3Rvci1idWZmZXItc2l6ZSI9Ijgi
ICJ1bnNhZmUtZnAtbWF0aCI9ImZhbHNlIiAidXNlLXNvZnQtZmxvYXQiPSJmYWxzZSIgfQpJbmRl
eDogdGVzdC9UYWJsZUdlbi9pbnRyaW5zaWMtdmFyYXJncy50ZAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSB0ZXN0
L1RhYmxlR2VuL2ludHJpbnNpYy12YXJhcmdzLnRkCShyZXZpc2lvbiAwKQorKysgdGVzdC9UYWJs
ZUdlbi9pbnRyaW5zaWMtdmFyYXJncy50ZAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDI5IEBA
CisvLyBSVU46IGxsdm0tdGJsZ2VuIC1nZW4taW50cmluc2ljICVzIHwgRmlsZUNoZWNrICVzCisK
K2NsYXNzIEludHJpbnNpY1Byb3BlcnR5OworCitjbGFzcyBWYWx1ZVR5cGU8aW50IHNpemUsIGlu
dCB2YWx1ZT4geworICBzdHJpbmcgTmFtZXNwYWNlID0gIk1WVCI7CisgIGludCBTaXplID0gc2l6
ZTsKKyAgaW50IFZhbHVlID0gdmFsdWU7Cit9CisKK2NsYXNzIExMVk1UeXBlPFZhbHVlVHlwZSB2
dD4geworICBWYWx1ZVR5cGUgVlQgPSB2dDsKK30KKworY2xhc3MgSW50cmluc2ljPHN0cmluZyBu
YW1lLCBsaXN0PExMVk1UeXBlPiBwYXJhbV90eXBlcyA9IFtdPiB7CisgIHN0cmluZyBMTFZNTmFt
ZSA9IG5hbWU7CisgIGJpdCBpc1RhcmdldCA9IDA7CisgIHN0cmluZyBUYXJnZXRQcmVmaXggPSAi
IjsKKyAgbGlzdDxMTFZNVHlwZT4gUmV0VHlwZXMgPSBbXTsKKyAgbGlzdDxMTFZNVHlwZT4gUGFy
YW1UeXBlcyA9IHBhcmFtX3R5cGVzOworICBsaXN0PEludHJpbnNpY1Byb3BlcnR5PiBQcm9wZXJ0
aWVzID0gW107Cit9CisKKy8vIFZhbHVlVHlwZXMuaCBsaXN0cyBpc1ZvaWQ9NTUuCitkZWYgaXNW
b2lkIDogVmFsdWVUeXBlPDAsIDU2PjsgICAvLyBQcm9kdWNlcyBubyB2YWx1ZQorZGVmIGxsdm1f
dmFyYXJnX3R5IDogTExWTVR5cGU8aXNWb2lkPjsgICAvLyB0aGlzIG1lYW5zIHZhcmFyZyBoZXJl
CisKKy8vIENIRUNLOiAvKiAwICovIDAsIDI3LCAwLAorZGVmIGludF9mb28gOiBJbnRyaW5zaWM8
Imxsdm0uZm9vIiwgW2xsdm1fdmFyYXJnX3R5XT47CkluZGV4OiB1dGlscy9UYWJsZUdlbi9Db2Rl
R2VuVGFyZ2V0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSB1dGlscy9UYWJsZUdlbi9Db2RlR2VuVGFyZ2V0
LmNwcAkocmV2aXNpb24gMTkyMTE1KQorKysgdXRpbHMvVGFibGVHZW4vQ29kZUdlblRhcmdldC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTMyMSw2ICszMjEsOCBAQAogICAgICJCVU5ETEUiLAogICAg
ICJMSUZFVElNRV9TVEFSVCIsCiAgICAgIkxJRkVUSU1FX0VORCIsCisgICAgIldFQktJVF9TVEFD
S01BUCIsCisgICAgIldFQktJVF9QQVRDSFBPSU5UIiwKICAgICAwCiAgIH07CiAgIGNvbnN0IERl
bnNlTWFwPGNvbnN0IFJlY29yZCosIENvZGVHZW5JbnN0cnVjdGlvbio+ICZJbnN0cyA9IGdldElu
c3RydWN0aW9ucygpOwpJbmRleDogdXRpbHMvVGFibGVHZW4vSW50cmluc2ljRW1pdHRlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gdXRpbHMvVGFibGVHZW4vSW50cmluc2ljRW1pdHRlci5jcHAJKHJldmlz
aW9uIDE5MjExNSkKKysrIHV0aWxzL1RhYmxlR2VuL0ludHJpbnNpY0VtaXR0ZXIuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yNjEsNyArMjYxLDggQEAKICAgSUlUX0VYVEVORF9WRUNfQVJHID0gMjMs
CiAgIElJVF9UUlVOQ19WRUNfQVJHID0gMjQsCiAgIElJVF9BTllQVFIgPSAyNSwKLSAgSUlUX1Yx
ICAgPSAyNgorICBJSVRfVjEgICA9IDI2LAorICBJSVRfVkFSQVJHID0gMjcKIH07CiAKIApAQCAt
Mjg4LDYgKzI4OSw4IEBACiAgIGNhc2UgTVZUOjp4ODZtbXg6IHJldHVybiBTaWcucHVzaF9iYWNr
KElJVF9NTVgpOwogICAvLyBNVlQ6Ok90aGVyVlQgaXMgdXNlZCB0byBtZWFuIHRoZSBlbXB0eSBz
dHJ1Y3QgdHlwZSBoZXJlLgogICBjYXNlIE1WVDo6T3RoZXI6IHJldHVybiBTaWcucHVzaF9iYWNr
KElJVF9FTVBUWVNUUlVDVCk7CisgIC8vIE1WVDo6aXNWb2lkIGlzIHVzZWQgdG8gcmVwcmVzZW50
IHZhcmFyZ3MgaGVyZS4KKyAgY2FzZSBNVlQ6OmlzVm9pZDogcmV0dXJuIFNpZy5wdXNoX2JhY2so
SUlUX1ZBUkFSRyk7CiAgIH0KIH0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>215844</attachid>
            <date>2013-11-02 20:18:03 -0700</date>
            <delta_ts>2013-11-02 20:54:41 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>34021</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTU4NTE2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ4IEBA
CisyMDEzLTExLTAyICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
RlRMIHNob3VsZCB1c2UgTExWTSBpbnRyaW5zaWNzIGZvciBPU1IgZXhpdCwgd2F0Y2hwb2ludHMs
IGlubGluZSBjYWNoZXMsIGFuZCBzdGFjayBsYXlvdXQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyMjMxOAorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAgICAgVGhpcyBhbGwgbm93IHdvcmtzLiBUaGlz
IHBhdGNoIGp1c3QgdXBkYXRlcyBvdXIgaW1wbGVtZW50YXRpb24gdG8gd29yayB3aXRoIExMVk0g
dHJ1bmssCisgICAgICAgIGFuZCByZW1vdmVzIGFsbCBvZiB0aGUgb2xkIGNvZGUgdGhhdCB0cmll
ZCB0byBkbyBPU1IgZXhpdHMgYW5kIGhlYXAgYWNjZXNzZXMgd2l0aG91dAorICAgICAgICB0aGUg
YmVuZWZpdCBvZiB0aG9zZSBpbnRyaW5zaWNzLgorCisgICAgICAgICogZGZnL0RGR0RyaXZlci5j
cHA6CisgICAgICAgIChKU0M6OkRGRzo6Y29tcGlsZUltcGwpOgorICAgICAgICAqIGZ0bC9GVExD
b21waWxlLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjptbUFsbG9jYXRlRGF0YVNlY3Rpb24pOgor
ICAgICAgICAqIGZ0bC9GVExFeGl0VGh1bmtHZW5lcmF0b3IuY3BwOgorICAgICAgICAoSlNDOjpG
VEw6OkV4aXRUaHVua0dlbmVyYXRvcjo6ZW1pdFRodW5rKToKKyAgICAgICAgKiBmdGwvRlRMSW50
cmluc2ljUmVwb3NpdG9yeS5oOgorICAgICAgICAqIGZ0bC9GVExMb2NhdGlvbi5jcHA6CisgICAg
ICAgIChKU0M6OkZUTDo6TG9jYXRpb246OmZvclN0YWNrbWFwcyk6CisgICAgICAgICogZnRsL0ZU
TExvd2VyREZHVG9MTFZNLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6
TG93ZXJERkdUb0xMVk0pOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpsb3dl
cik6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmNvbXBpbGVHZXRCeUlkKToK
KyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6Y29tcGlsZUludmFsaWRhdGlvblBv
aW50KToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6YXBwZW5kT1NSRXhpdCk6
CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmVtaXRPU1JFeGl0Q2FsbCk6Cisg
ICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmNhbGxTdGFja21hcCk6CisgICAgICAg
IChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmFkZEV4aXRBcmd1bWVudEZvck5vZGUpOgorICAg
ICAgICAqIGZ0bC9GVExPU1JFeGl0Q29tcGlsYXRpb25JbmZvLmg6CisgICAgICAgIChKU0M6OkZU
TDo6T1NSRXhpdENvbXBpbGF0aW9uSW5mbzo6T1NSRXhpdENvbXBpbGF0aW9uSW5mbyk6CisgICAg
ICAgICogZnRsL0ZUTE9TUkV4aXRDb21waWxlci5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6Y29t
cGlsZVN0dWIpOgorICAgICAgICAoSlNDOjpGVEw6OmNvbXBpbGVGVExPU1JFeGl0KToKKyAgICAg
ICAgKiBmdGwvRlRMU3RhY2tNYXBzLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpTdGFja01hcHM6
OkxvY2F0aW9uOjpwYXJzZSk6CisgICAgICAgIChKU0M6OkZUTDo6U3RhY2tNYXBzOjpwYXJzZSk6
CisgICAgICAgIChXVEY6OnByaW50SW50ZXJuYWwpOgorICAgICAgICAqIGZ0bC9GVExTdGFja01h
cHMuaDoKKyAgICAgICAgKiBmdGwvRlRMVGh1bmtzLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpv
c3JFeGl0R2VuZXJhdGlvblRodW5rR2VuZXJhdG9yKToKKyAgICAgICAgKiBmdGwvRlRMVGh1bmtz
Lmg6CisgICAgICAgIChKU0M6OkZUTDo6VGh1bmtzOjpnZXRPU1JFeGl0R2VuZXJhdGlvblRodW5r
KToKKyAgICAgICAgKiBydW50aW1lL09wdGlvbnMuaDoKKwogMjAxMy0xMS0wMiAgUGF0cmljayBH
YW5zdGVyZXIgIDxwYXJvZ2FAd2Via2l0Lm9yZz4KIAogICAgICAgICBGaXggTVNWQyB3YXJuaW5n
IGFib3V0IHVuYXJ5IG1pbnVzIG9wZXJhdG9yCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0RyaXZlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdEcml2ZXIuY3BwCShyZXZpc2lvbiAxNTg1MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0RyaXZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg1LDkgKzg1LDYgQEAgc3Rh
dGljIENvbXBpbGF0aW9uUmVzdWx0IGNvbXBpbGVJbXBsKAogICAgIHZtLmdldENUSVN0dWIobGlu
a0Nsb3N1cmVDYWxsVGh1bmtHZW5lcmF0b3IpOwogICAgIHZtLmdldENUSVN0dWIodmlydHVhbENh
bGxUaHVua0dlbmVyYXRvcik7CiAgICAgdm0uZ2V0Q1RJU3R1Yih2aXJ0dWFsQ29uc3RydWN0VGh1
bmtHZW5lcmF0b3IpOwotI2lmIEVOQUJMRShGVExfSklUKQotICAgIHZtLmdldENUSVN0dWIoRlRM
Ojpvc3JFeGl0R2VuZXJhdGlvbldpdGhvdXRTdGFja01hcFRodW5rR2VuZXJhdG9yKTsKLSNlbmRp
ZgogICAgIAogICAgIFJlZlB0cjxQbGFuPiBwbGFuID0gYWRvcHRSZWYoCiAgICAgICAgIG5ldyBQ
bGFuKGNvZGVCbG9jaywgbW9kZSwgb3NyRW50cnlCeXRlY29kZUluZGV4LCBtdXN0SGFuZGxlVmFs
dWVzKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENvbXBpbGUuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ29tcGlsZS5jcHAJKHJl
dmlzaW9uIDE1ODUxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ29tcGlsZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTc4LDcgKzc4LDcgQEAgc3RhdGljIHVpbnQ4X3QqIG1tQWxs
b2NhdGVEYXRhU2VjdGlvbigKICAgICBSZWZDb3VudGVkQXJyYXk8TFNlY3Rpb25Xb3JkPiBzZWN0
aW9uKAogICAgICAgICAoc2l6ZSArIHNpemVvZihMU2VjdGlvbldvcmQpIC0gMSkgLyBzaXplb2Yo
TFNlY3Rpb25Xb3JkKSk7CiAgICAgCi0gICAgaWYgKCFzdHJjbXAoc2VjdGlvbk5hbWUsICJfX2pz
X3N0YWNrbWFwcyIpKQorICAgIGlmICghc3RyY21wKHNlY3Rpb25OYW1lLCAiX19sbHZtX3N0YWNr
bWFwcyIpKQogICAgICAgICBzdGF0ZS5zdGFja21hcHNTZWN0aW9uID0gc2VjdGlvbjsKICAgICBl
bHNlIHsKICAgICAgICAgc3RhdGUuaml0Q29kZS0+YWRkRGF0YVNlY3Rpb24oc2VjdGlvbik7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEV4aXRUaHVua0dlbmVyYXRvci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExFeGl0VGh1bmtHZW5l
cmF0b3IuY3BwCShyZXZpc2lvbiAxNTg1MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTEV4aXRUaHVua0dlbmVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUxLDEwICs1MSw3
IEBAIHZvaWQgRXhpdFRodW5rR2VuZXJhdG9yOjplbWl0VGh1bmsodW5zaWcKICAgICBPU1JFeGl0
Q29tcGlsYXRpb25JbmZvJiBpbmZvID0gbV9zdGF0ZS5maW5hbGl6ZXItPm9zckV4aXRbaW5kZXhd
OwogICAgIAogICAgIGluZm8ubV90aHVua0xhYmVsID0gbGFiZWwoKTsKLSAgICBpZiAoT3B0aW9u
czo6ZnRsVXNlc1N0YWNrbWFwcygpKQotICAgICAgICBwdXNoKFRydXN0ZWRJbW0zMihpbmRleCkp
OwotICAgIGVsc2UKLSAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoaW5kZXgpLCBHUFJJbmZvOjpu
b25BcmdHUFIwKTsKKyAgICBwdXNoKFRydXN0ZWRJbW0zMihpbmRleCkpOwogICAgIGluZm8ubV90
aHVua0p1bXAgPSBwYXRjaGFibGVKdW1wKCk7CiAgICAgCiAgICAgbV9kaWRUaGluZ3MgPSB0cnVl
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExJbnRyaW5zaWNSZXBvc2l0b3J5
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExJbnRyaW5zaWNS
ZXBvc2l0b3J5LmgJKHJldmlzaW9uIDE1ODUxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMSW50cmluc2ljUmVwb3NpdG9yeS5oCSh3b3JraW5nIGNvcHkpCkBAIC00NCw4ICs0NCw4
IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKICAgICBtYWNybyhtdWxXaXRoT3Zl
cmZsb3c2NCwgImxsdm0uc211bC53aXRoLm92ZXJmbG93Lmk2NCIsIGZ1bmN0aW9uVHlwZShzdHJ1
Y3RUeXBlKG1fY29udGV4dCwgaW50NjQsIGJvb2xlYW4pLCBpbnQ2NCwgaW50NjQpKSBcCiAgICAg
bWFjcm8oc3ViV2l0aE92ZXJmbG93MzIsICJsbHZtLnNzdWIud2l0aC5vdmVyZmxvdy5pMzIiLCBm
dW5jdGlvblR5cGUoc3RydWN0VHlwZShtX2NvbnRleHQsIGludDMyLCBib29sZWFuKSwgaW50MzIs
IGludDMyKSkgXAogICAgIG1hY3JvKHN1YldpdGhPdmVyZmxvdzY0LCAibGx2bS5zc3ViLndpdGgu
b3ZlcmZsb3cuaTY0IiwgZnVuY3Rpb25UeXBlKHN0cnVjdFR5cGUobV9jb250ZXh0LCBpbnQ2NCwg
Ym9vbGVhbiksIGludDY0LCBpbnQ2NCkpIFwKLSAgICBtYWNybyh3ZWJraXRQYXRjaHBvaW50SW50
NjQsICJsbHZtLndlYmtpdC5wYXRjaHBvaW50Lmk2NCIsIGZ1bmN0aW9uVHlwZShpbnQ2NCwgaW50
MzIsIGludDMyLCByZWY4LCBpbnQzMiwgVmFyaWFkaWMpKSBcCi0gICAgbWFjcm8od2Via2l0U3Rh
Y2ttYXAsICJsbHZtLndlYmtpdC5zdGFja21hcCIsIGZ1bmN0aW9uVHlwZSh2b2lkVHlwZSwgaW50
MzIsIGludDMyLCBWYXJpYWRpYykpIFwKKyAgICBtYWNybyhwYXRjaHBvaW50SW50NjQsICJsbHZt
LmV4cGVyaW1lbnRhbC5wYXRjaHBvaW50Lmk2NCIsIGZ1bmN0aW9uVHlwZShpbnQ2NCwgaW50MzIs
IGludDMyLCByZWY4LCBpbnQzMiwgVmFyaWFkaWMpKSBcCisgICAgbWFjcm8oc3RhY2ttYXAsICJs
bHZtLmV4cGVyaW1lbnRhbC5zdGFja21hcCIsIGZ1bmN0aW9uVHlwZSh2b2lkVHlwZSwgaW50MzIs
IGludDMyLCBWYXJpYWRpYykpIFwKICAgICBtYWNybyh0cmFwLCAibGx2bS50cmFwIiwgZnVuY3Rp
b25UeXBlKHZvaWRUeXBlKSkgXAogICAgIG1hY3JvKG9zckV4aXQsICJ3ZWJraXRfb3NyX2V4aXQi
LCBmdW5jdGlvblR5cGUodm9pZFR5cGUsIGJvb2xlYW4sIGludDMyLCBWYXJpYWRpYykpCiAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG9jYXRpb24uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG9jYXRpb24uY3BwCShyZXZpc2lvbiAx
NTg1MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvY2F0aW9uLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzksOSArMzksMTEgQEAgTG9jYXRpb24gTG9jYXRpb246OmZvclN0YWNr
bWFwcyhjb25zdCBTdAogewogICAgIHN3aXRjaCAobG9jYXRpb24ua2luZCkgewogICAgIGNhc2Ug
U3RhY2tNYXBzOjpMb2NhdGlvbjo6VW5wcm9jZXNzZWQ6Ci0gICAgICAgIHJldHVybiBMb2NhdGlv
bigpOworICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBicmVh
azsKICAgICAgICAgCiAgICAgY2FzZSBTdGFja01hcHM6OkxvY2F0aW9uOjpSZWdpc3RlcjoKKyAg
ICBjYXNlIFN0YWNrTWFwczo6TG9jYXRpb246OkRpcmVjdDoKICAgICAgICAgcmV0dXJuIGZvclJl
Z2lzdGVyKGxvY2F0aW9uLmR3YXJmUmVnTnVtLCBsb2NhdGlvbi5vZmZzZXQpOwogICAgICAgICAK
ICAgICBjYXNlIFN0YWNrTWFwczo6TG9jYXRpb246OkluZGlyZWN0OgpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAJKHJldmlzaW9uIDE1
ODUxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zMiw3ICszMiw2IEBACiAjaW5jbHVkZSAiREZHQWJzdHJhY3RJ
bnRlcnByZXRlcklubGluZXMuaCIKICNpbmNsdWRlICJERkdJblBsYWNlQWJzdHJhY3RTdGF0ZS5o
IgogI2luY2x1ZGUgIkZUTEFic3RyYWN0SGVhcFJlcG9zaXRvcnkuaCIKLSNpbmNsdWRlICJGVExF
eGl0VGh1bmtHZW5lcmF0b3IuaCIKICNpbmNsdWRlICJGVExGb3JPU1JFbnRyeUpJVENvZGUuaCIK
ICNpbmNsdWRlICJGVExGb3JtYXR0ZWRWYWx1ZS5oIgogI2luY2x1ZGUgIkZUTElubGluZUNhY2hl
U2l6ZS5oIgpAQCAtNTMsMTEgKzUyLDYgQEAgdXNpbmcgbmFtZXNwYWNlIERGRzsKIAogc3RhdGlj
IGludCBjb21waWxlQ291bnRlcjsKIAotc3RhdGljIGJvb2wgZ2VuZXJhdGVFeGl0VGh1bmtzKCkK
LXsKLSAgICByZXR1cm4gIU9wdGlvbnM6OnVzZUxMVk1PU1JFeGl0SW50cmluc2ljKCkgJiYgIU9w
dGlvbnM6OmZ0bFVzZXNTdGFja21hcHMoKTsKLX0KLQogLy8gVXNpbmcgdGhpcyBpbnN0ZWFkIG9m
IHR5cGVDaGVjaygpIGhlbHBzIHRvIHJlZHVjZSB0aGUgbG9hZCBvbiBMTFZNLCBieSBjcmVhdGlu
ZwogLy8gc2lnbmlmaWNhbnRseSBsZXNzIGRlYWQgY29kZS4KICNkZWZpbmUgRlRMX1RZUEVfQ0hF
Q0sobG93VmFsdWUsIGhpZ2hWYWx1ZSwgdHlwZXNQYXNzZWRUaHJvdWdoLCBmYWlsQ29uZGl0aW9u
KSBkbyB7IFwKQEAgLTc4LDcgKzcyLDYgQEAgcHVibGljOgogICAgICAgICAsIG1fb3V0KHN0YXRl
LmNvbnRleHQpCiAgICAgICAgICwgbV92YWx1ZVNvdXJjZXMoT3BlcmFuZHNMaWtlLCBzdGF0ZS5n
cmFwaC5ibG9jaygwKS0+dmFyaWFibGVzQXRIZWFkKQogICAgICAgICAsIG1fbGFzdFNldE9wZXJh
bmQoVmlydHVhbFJlZ2lzdGVyKCkpCi0gICAgICAgICwgbV9leGl0VGh1bmtHZW5lcmF0b3Ioc3Rh
dGUpCiAgICAgICAgICwgbV9zdGF0ZShzdGF0ZS5ncmFwaCkKICAgICAgICAgLCBtX2ludGVycHJl
dGVyKHN0YXRlLmdyYXBoLCBtX3N0YXRlKQogICAgICAgICAsIG1fc3RhY2ttYXBJRHMoMCkKQEAg
LTExMCw4ICsxMDMsNiBAQCBwdWJsaWM6CiAgICAgICAgIG1fb3V0LmFwcGVuZFRvKG1fcHJvbG9n
dWUpOwogICAgICAgICBjcmVhdGVQaGlWYXJpYWJsZXMoKTsKICAgICAgICAgCi0gICAgICAgIG1f
aW5pdGlhbGl6YXRpb24gPSBhcHBlbmRCYXNpY0Jsb2NrKG1fZnRsU3RhdGUuY29udGV4dCwgbV9m
dGxTdGF0ZS5mdW5jdGlvbik7Ci0KICAgICAgICAgbV9jYWxsRnJhbWUgPSBtX291dC5wYXJhbSgw
KTsKICAgICAgICAgbV90YWdUeXBlTnVtYmVyID0gbV9vdXQuY29uc3RJbnQ2NChUYWdUeXBlTnVt
YmVyKTsKICAgICAgICAgbV90YWdNYXNrID0gbV9vdXQuY29uc3RJbnQ2NChUYWdNYXNrKTsKQEAg
LTEyMywxNCArMTE0LDE0IEBAIHB1YmxpYzoKICAgICAgICAgICAgIG1fYmxvY2tzLmFkZChtX2hp
Z2hCbG9jaywgRlRMX05FV19CTE9DSyhtX291dCwgKCJCbG9jayAiLCAqbV9oaWdoQmxvY2spKSk7
CiAgICAgICAgIH0KICAgICAgICAgCisgICAgICAgIG1fb3V0LmFwcGVuZFRvKG1fcHJvbG9ndWUp
OworICAgICAgICBtX291dC5qdW1wKGxvd0Jsb2NrKG1fZ3JhcGguYmxvY2soMCkpKTsKKyAgICAg
ICAgCiAgICAgICAgIFZlY3RvcjxCYXNpY0Jsb2NrKj4gZGVwdGhGaXJzdDsKICAgICAgICAgbV9n
cmFwaC5nZXRCbG9ja3NJbkRlcHRoRmlyc3RPcmRlcihkZXB0aEZpcnN0KTsKICAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IGRlcHRoRmlyc3Quc2l6ZSgpOyArK2kpCiAgICAgICAgICAg
ICBjb21waWxlQmxvY2soZGVwdGhGaXJzdFtpXSk7CiAgICAgICAgIAotICAgICAgICAvLyBBbmQg
bm93IGNvbXBsZXRlIHRoZSBpbml0aWFsaXphdGlvbiBibG9jay4KLSAgICAgICAgbGlua09TUkV4
aXRzQW5kQ29tcGxldGVJbml0aWFsaXphdGlvbkJsb2NrcygpOwotCiAgICAgICAgIGlmIChPcHRp
b25zOjpkdW1wTExWTUlSKCkpCiAgICAgICAgICAgICBkdW1wTW9kdWxlKG1fZnRsU3RhdGUubW9k
dWxlKTsKICAgICAgICAgCkBAIC0xMjU4LDE1ICsxMjQ5LDEwIEBAIHByaXZhdGU6CiAgICAgICAg
IExWYWx1ZSBiYXNlID0gbG93Q2VsbChtX25vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgU3RyaW5n
SW1wbCogdWlkID0gbV9ncmFwaC5pZGVudGlmaWVycygpW21fbm9kZS0+aWRlbnRpZmllck51bWJl
cigpXTsKIAotICAgICAgICBpZiAoIU9wdGlvbnM6OmZ0bFVzZXNTdGFja21hcHMoKSkgewotICAg
ICAgICAgICAgc2V0SlNWYWx1ZSh2bUNhbGwobV9vdXQub3BlcmF0aW9uKG9wZXJhdGlvbkdldEJ5
SWQpLCBtX2NhbGxGcmFtZSwgbV9vdXQuaW50UHRyWmVybywgYmFzZSwgbV9vdXQuY29uc3RJbnRQ
dHIodWlkKSkpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KICAgICAgICAgLy8g
QXJndW1lbnRzOiBpZCwgYnl0ZXMsIHRhcmdldCwgbnVtQXJncywgYXJncy4uLgogICAgICAgICB1
bnNpZ25lZCBzdGFja21hcElEID0gbV9zdGFja21hcElEcysrOwogICAgICAgICBzZXRKU1ZhbHVl
KG1fb3V0LmNhbGwoCi0gICAgICAgICAgICBtX291dC53ZWJraXRQYXRjaHBvaW50SW50NjRJbnRy
aW5zaWMoKSwKKyAgICAgICAgICAgIG1fb3V0LnBhdGNocG9pbnRJbnQ2NEludHJpbnNpYygpLAog
ICAgICAgICAgICAgbV9vdXQuY29uc3RJbnQzMihzdGFja21hcElEKSwgbV9vdXQuY29uc3RJbnQz
MihzaXplT2ZHZXRCeUlkKCkpLAogICAgICAgICAgICAgY29uc3ROdWxsKG1fb3V0LnJlZjgpLCBt
X291dC5jb25zdEludDMyKDIpLCBtX2NhbGxGcmFtZSwgYmFzZSkpOwogICAgICAgICAKQEAgLTIx
MzYsMTIgKzIxMjIsNiBAQCBwcml2YXRlOgogICAgIAogICAgIHZvaWQgY29tcGlsZUludmFsaWRh
dGlvblBvaW50KCkKICAgICB7Ci0gICAgICAgIGlmICghT3B0aW9uczo6ZnRsVXNlc1N0YWNrbWFw
cygpKSB7Ci0gICAgICAgICAgICAvLyBXZSBzaWxlbnRseSBkb24ndCBpbXBsZW1lbnQgaW52YWxp
ZGF0aW9uIHBvaW50cyBpZiB3ZSBkb24ndCBoYXZlIHN0YWNrbWFwcy4KLSAgICAgICAgICAgIC8v
IFRoaXMgaXMgZmluZSBzaW5jZSB0aGUgbG9uZy10ZXJtIHBsYW4gaXMgdG8gcmVxdWlyZSBzdGFj
a21hcHMuCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgCiAgICAgICAg
IGlmICh2ZXJib3NlQ29tcGlsYXRpb25FbmFibGVkKCkpCiAgICAgICAgICAgICBkYXRhTG9nKCIg
ICAgSW52YWxpZGF0aW9uIHBvaW50IHdpdGggdmFsdWUgc291cmNlczogIiwgbV92YWx1ZVNvdXJj
ZXMsICJcbiIpOwogICAgICAgICAKQEAgLTMzMDksMjUgKzMyODksMTAgQEAgcHJpdmF0ZToKICAg
ICAgICAgRXhpdEtpbmQga2luZCwgRm9ybWF0dGVkVmFsdWUgbG93VmFsdWUsIE5vZGUqIGhpZ2hW
YWx1ZSwgTFZhbHVlIGZhaWxDb25kaXRpb24sCiAgICAgICAgIFNwZWN1bGF0aW9uRGlyZWN0aW9u
IGRpcmVjdGlvbiwgRm9ybWF0dGVkVmFsdWUgcmVjb3ZlcnkpCiAgICAgewotICAgICAgICBpZiAo
T3B0aW9uczo6ZnRsVHJhcHNPbk9TUkV4aXQoKSkgewotICAgICAgICAgICAgTEJhc2ljQmxvY2sg
ZmFpbENhc2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIk9TUiBleGl0IGZhaWxDYXNlIGZvciAi
LCBtX25vZGUpKTsKLSAgICAgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IEZUTF9O
RVdfQkxPQ0sobV9vdXQsICgiT1NSIGV4aXQgY29udGludWF0aW9uIGZvciAiLCBtX25vZGUpKTsK
LSAgICAgICAgICAgIAotICAgICAgICAgICAgbV9vdXQuYnJhbmNoKGZhaWxDb25kaXRpb24sIGZh
aWxDYXNlLCBjb250aW51YXRpb24pOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBMQmFzaWNC
bG9jayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRvKGZhaWxDYXNlLCBjb250aW51YXRpb24pOwot
ICAgICAgICAgICAgbV9vdXQudHJhcCgpOwotICAgICAgICAgICAgbV9vdXQudW5yZWFjaGFibGUo
KTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9u
LCBsYXN0TmV4dCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgCiAg
ICAgICAgIGlmICh2ZXJib3NlQ29tcGlsYXRpb25FbmFibGVkKCkpCiAgICAgICAgICAgICBkYXRh
TG9nKCIgICAgT1NSIGV4aXQgd2l0aCB2YWx1ZSBzb3VyY2VzOiAiLCBtX3ZhbHVlU291cmNlcywg
IlxuIik7CiAgICAgICAgIAogICAgICAgICBBU1NFUlQobV9mdGxTdGF0ZS5qaXRDb2RlLT5vc3JF
eGl0LnNpemUoKSA9PSBtX2Z0bFN0YXRlLmZpbmFsaXplci0+b3NyRXhpdC5zaXplKCkpOwotICAg
ICAgICB1bnNpZ25lZCBpbmRleCA9IG1fZnRsU3RhdGUuZmluYWxpemVyLT5vc3JFeGl0LnNpemUo
KTsKICAgICAgICAgCiAgICAgICAgIG1fZnRsU3RhdGUuaml0Q29kZS0+b3NyRXhpdC5hcHBlbmQo
T1NSRXhpdCgKICAgICAgICAgICAgIGtpbmQsIGxvd1ZhbHVlLmZvcm1hdCgpLCBtX2dyYXBoLm1l
dGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGVGb3IoaGlnaFZhbHVlKSwKQEAgLTMzMzYsNTQgKzMz
MDEsMzAgQEAgcHJpdmF0ZToKICAgICAgICAgbV9mdGxTdGF0ZS5maW5hbGl6ZXItPm9zckV4aXQu
YXBwZW5kKE9TUkV4aXRDb21waWxhdGlvbkluZm8oKSk7CiAgICAgICAgIAogICAgICAgICBPU1JF
eGl0JiBleGl0ID0gbV9mdGxTdGF0ZS5qaXRDb2RlLT5vc3JFeGl0Lmxhc3QoKTsKLSAgICAgICAg
T1NSRXhpdENvbXBpbGF0aW9uSW5mbyYgaW5mbyA9IG1fZnRsU3RhdGUuZmluYWxpemVyLT5vc3JF
eGl0Lmxhc3QoKTsKIAogICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IDA7CiAgICAgICAg
IExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IDA7CiAgICAgICAgIAotICAgICAgICBpZiAoIU9w
dGlvbnM6OnVzZUxMVk1PU1JFeGl0SW50cmluc2ljKCkpIHsKLSAgICAgICAgICAgIExCYXNpY0Js
b2NrIGZhaWxDYXNlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJPU1IgZXhpdCBmYWlsQ2FzZSBm
b3IgIiwgbV9ub2RlKSk7Ci0gICAgICAgICAgICBjb250aW51YXRpb24gPSBGVExfTkVXX0JMT0NL
KG1fb3V0LCAoIk9TUiBleGl0IGNvbnRpbnVhdGlvbiBmb3IgIiwgbV9ub2RlKSk7Ci0gICAgICAg
ICAgICAKLSAgICAgICAgICAgIG1fb3V0LmJyYW5jaChmYWlsQ29uZGl0aW9uLCBmYWlsQ2FzZSwg
Y29udGludWF0aW9uKTsKLQotICAgICAgICAgICAgaWYgKGdlbmVyYXRlRXhpdFRodW5rcygpKSB7
Ci0gICAgICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8obV9wcm9sb2d1ZSk7Ci0gICAgICAgICAg
ICAgICAgaW5mby5tX3RodW5rQWRkcmVzc1ZhbHVlID0gYnVpbGRBbGxvY2EobV9vdXQubV9idWls
ZGVyLCBtX291dC5pbnRQdHIpOwotICAgICAgICAgICAgfQorICAgICAgICBMQmFzaWNCbG9jayBm
YWlsQ2FzZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiT1NSIGV4aXQgZmFpbENhc2UgZm9yICIs
IG1fbm9kZSkpOworICAgICAgICBjb250aW51YXRpb24gPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAo
Ik9TUiBleGl0IGNvbnRpbnVhdGlvbiBmb3IgIiwgbV9ub2RlKSk7CiAgICAgICAgIAotICAgICAg
ICAgICAgbGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyhmYWlsQ2FzZSwgY29udGludWF0aW9uKTsK
LSAgICAgICAgfQorICAgICAgICBtX291dC5icmFuY2goZmFpbENvbmRpdGlvbiwgZmFpbENhc2Us
IGNvbnRpbnVhdGlvbik7CiAgICAgICAgIAotICAgICAgICBpZiAoT3B0aW9uczo6ZnRsT1NSRXhp
dE9taXRzTWFyc2hhbGxpbmcoKSkgewotICAgICAgICAgICAgbV9vdXQuY2FsbCgKLSAgICAgICAg
ICAgICAgICBtX291dC5pbnRUb1B0cigKLSAgICAgICAgICAgICAgICAgICAgbV9vdXQuZ2V0KGlu
Zm8ubV90aHVua0FkZHJlc3NWYWx1ZSksCi0gICAgICAgICAgICAgICAgICAgIHBvaW50ZXJUeXBl
KGZ1bmN0aW9uVHlwZShtX291dC52b2lkVHlwZSkpKSk7Ci0gICAgICAgIH0gZWxzZQotICAgICAg
ICAgICAgZW1pdE9TUkV4aXRDYWxsKGZhaWxDb25kaXRpb24sIGluZGV4LCBleGl0LCBpbmZvLCBs
b3dWYWx1ZSwgZGlyZWN0aW9uLCByZWNvdmVyeSk7CisgICAgICAgIGxhc3ROZXh0ID0gbV9vdXQu
YXBwZW5kVG8oZmFpbENhc2UsIGNvbnRpbnVhdGlvbik7CiAgICAgICAgIAotICAgICAgICBpZiAo
IU9wdGlvbnM6OnVzZUxMVk1PU1JFeGl0SW50cmluc2ljKCkpIHsKLSAgICAgICAgICAgIG1fb3V0
LnVucmVhY2hhYmxlKCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRv
KGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOworICAgICAgICBlbWl0T1NSRXhpdENhbGwoZXhpdCwg
bG93VmFsdWUsIGRpcmVjdGlvbiwgcmVjb3ZlcnkpOwogICAgICAgICAKLSAgICAgICAgICAgIGlm
IChnZW5lcmF0ZUV4aXRUaHVua3MoKSkKLSAgICAgICAgICAgICAgICBtX2V4aXRUaHVua0dlbmVy
YXRvci5lbWl0VGh1bmsoaW5kZXgpOwotICAgICAgICB9CisgICAgICAgIG1fb3V0LnVucmVhY2hh
YmxlKCk7CisgICAgICAgIAorICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxh
c3ROZXh0KTsKICAgICB9CiAgICAgCiAgICAgdm9pZCBlbWl0T1NSRXhpdENhbGwoCi0gICAgICAg
IExWYWx1ZSBmYWlsQ29uZGl0aW9uLCB1bnNpZ25lZCBpbmRleCwgT1NSRXhpdCYgZXhpdCwgT1NS
RXhpdENvbXBpbGF0aW9uSW5mbyYgaW5mbywKLSAgICAgICAgRm9ybWF0dGVkVmFsdWUgbG93VmFs
dWUsIFNwZWN1bGF0aW9uRGlyZWN0aW9uIGRpcmVjdGlvbiwgRm9ybWF0dGVkVmFsdWUgcmVjb3Zl
cnkpCisgICAgICAgIE9TUkV4aXQmIGV4aXQsIEZvcm1hdHRlZFZhbHVlIGxvd1ZhbHVlLCBTcGVj
dWxhdGlvbkRpcmVjdGlvbiBkaXJlY3Rpb24sCisgICAgICAgIEZvcm1hdHRlZFZhbHVlIHJlY292
ZXJ5KQogICAgIHsKICAgICAgICAgRXhpdEFyZ3VtZW50TGlzdCBhcmd1bWVudHM7CiAgICAgICAg
IAotICAgICAgICBpZiAoT3B0aW9uczo6dXNlTExWTU9TUkV4aXRJbnRyaW5zaWMoKSkgewotICAg
ICAgICAgICAgYXJndW1lbnRzLmFwcGVuZChmYWlsQ29uZGl0aW9uKTsKLSAgICAgICAgICAgIGFy
Z3VtZW50cy5hcHBlbmQobV9vdXQuY29uc3RJbnQzMihpbmRleCkpOwotICAgICAgICB9Ci0gICAg
ICAgIAogICAgICAgICBidWlsZEV4aXRBcmd1bWVudHMoZXhpdCwgYXJndW1lbnRzLCBsb3dWYWx1
ZSk7CiAgICAgICAgIAogICAgICAgICBpZiAoZGlyZWN0aW9uID09IEZvcndhcmRTcGVjdWxhdGlv
bikgewpAQCAtMzM5MSwyNyArMzMzMiw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBleGl0LmNv
bnZlcnRUb0ZvcndhcmQobV9oaWdoQmxvY2ssIG1fbm9kZSwgbV9ub2RlSW5kZXgsIHJlY292ZXJ5
LCBhcmd1bWVudHMpOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBpZiAoT3B0aW9uczo6
dXNlTExWTU9TUkV4aXRJbnRyaW5zaWMoKSkgewotICAgICAgICAgICAgbV9vdXQuY2FsbChtX291
dC5vc3JFeGl0SW50cmluc2ljKCksIGFyZ3VtZW50cyk7Ci0gICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlmIChPcHRpb25zOjpmdGxVc2VzU3RhY2ttYXBz
KCkpIHsKLSAgICAgICAgICAgIGNhbGxTdGFja21hcChleGl0LCBhcmd1bWVudHMpOwotICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICAvLyBTbywgdGhlIHJl
YWxseSBsYW1lIHRoaW5nIGhlcmUgaXMgdGhhdCB3ZSBoYXZlIHRvIGJ1aWxkIGFuIExMVk0gZnVu
Y3Rpb24gdHlwZS4KLSAgICAgICAgLy8gQm9vby4KLSAgICAgICAgVmVjdG9yPExUeXBlLCAxNj4g
YXJndW1lbnRUeXBlczsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGFyZ3VtZW50
cy5zaXplKCk7ICsraSkKLSAgICAgICAgICAgIGFyZ3VtZW50VHlwZXMuYXBwZW5kKHR5cGVPZihh
cmd1bWVudHNbaV0pKTsKLSAgICAgICAgCi0gICAgICAgIG1fb3V0LmNhbGwoCi0gICAgICAgICAg
ICBtX291dC5pbnRUb1B0cigKLSAgICAgICAgICAgICAgICBtX291dC5nZXQoaW5mby5tX3RodW5r
QWRkcmVzc1ZhbHVlKSwKLSAgICAgICAgICAgICAgICBwb2ludGVyVHlwZShmdW5jdGlvblR5cGUo
bV9vdXQudm9pZFR5cGUsIGFyZ3VtZW50VHlwZXMpKSksCi0gICAgICAgICAgICBhcmd1bWVudHMp
OworICAgICAgICBjYWxsU3RhY2ttYXAoZXhpdCwgYXJndW1lbnRzKTsKICAgICB9CiAgICAgCiAg
ICAgdm9pZCBidWlsZEV4aXRBcmd1bWVudHMoCkBAIC0zNDU5LDcgKzMzODAsNyBAQCBwcml2YXRl
OgogICAgICAgICBhcmd1bWVudHMuaW5zZXJ0KDAsIG1fb3V0LmNvbnN0SW50MzIoTWFjcm9Bc3Nl
bWJsZXI6Om1heEp1bXBSZXBsYWNlbWVudFNpemUoKSkpOwogICAgICAgICBhcmd1bWVudHMuaW5z
ZXJ0KDAsIG1fb3V0LmNvbnN0SW50MzIoZXhpdC5tX3N0YWNrbWFwSUQpKTsKICAgICAgICAgCi0g
ICAgICAgIG1fb3V0LmNhbGwobV9vdXQud2Via2l0U3RhY2ttYXBJbnRyaW5zaWMoKSwgYXJndW1l
bnRzKTsKKyAgICAgICAgbV9vdXQuY2FsbChtX291dC5zdGFja21hcEludHJpbnNpYygpLCBhcmd1
bWVudHMpOwogICAgIH0KICAgICAKICAgICB2b2lkIGFkZEV4aXRBcmd1bWVudEZvck5vZGUoCkBA
IC0zNTM4LDExICszNDU5LDcgQEAgcHJpdmF0ZToKICAgICAgICAgCiAgICAgICAgIHZhbHVlID0g
bV9ib29sZWFuVmFsdWVzLmdldChub2RlKTsKICAgICAgICAgaWYgKGlzVmFsaWQodmFsdWUpKSB7
Ci0gICAgICAgICAgICBMVmFsdWUgdmFsdWVUb1Bhc3M7Ci0gICAgICAgICAgICBpZiAoT3B0aW9u
czo6ZnRsVXNlc1N0YWNrbWFwcygpKQotICAgICAgICAgICAgICAgIHZhbHVlVG9QYXNzID0gbV9v
dXQuemVyb0V4dCh2YWx1ZS52YWx1ZSgpLCBtX291dC5pbnQzMik7Ci0gICAgICAgICAgICBlbHNl
Ci0gICAgICAgICAgICAgICAgdmFsdWVUb1Bhc3MgPSB2YWx1ZS52YWx1ZSgpOworICAgICAgICAg
ICAgTFZhbHVlIHZhbHVlVG9QYXNzID0gbV9vdXQuemVyb0V4dCh2YWx1ZS52YWx1ZSgpLCBtX291
dC5pbnQzMik7CiAgICAgICAgICAgICBhZGRFeGl0QXJndW1lbnQoZXhpdCwgYXJndW1lbnRzLCBp
bmRleCwgVmFsdWVGb3JtYXRCb29sZWFuLCB2YWx1ZVRvUGFzcyk7CiAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgIH0KQEAgLTM1OTEsNDQgKzM1MDgsNiBAQCBwcml2YXRlOgogICAgICAgICBh
cmd1bWVudHMuYXBwZW5kKHZhbHVlKTsKICAgICB9CiAgICAgCi0gICAgdm9pZCBsaW5rT1NSRXhp
dHNBbmRDb21wbGV0ZUluaXRpYWxpemF0aW9uQmxvY2tzKCkKLSAgICB7Ci0gICAgICAgIE1hY3Jv
QXNzZW1ibGVyQ29kZVJlZiBvc3JFeGl0VGh1bmsgPQotICAgICAgICAgICAgdm0oKS5nZXRDVElT
dHViKG9zckV4aXRHZW5lcmF0aW9uV2l0aG91dFN0YWNrTWFwVGh1bmtHZW5lcmF0b3IpOwotICAg
ICAgICBDb2RlTG9jYXRpb25MYWJlbCB0YXJnZXQgPSBDb2RlTG9jYXRpb25MYWJlbChvc3JFeGl0
VGh1bmsuY29kZSgpKTsKLSAgICAgICAgCi0gICAgICAgIG1fb3V0LmFwcGVuZFRvKG1fcHJvbG9n
dWUpOwotICAgICAgICBtX291dC5qdW1wKG1faW5pdGlhbGl6YXRpb24pOwotICAgICAgICAKLSAg
ICAgICAgbV9vdXQuYXBwZW5kVG8obV9pbml0aWFsaXphdGlvbik7Ci0gICAgICAgIAotICAgICAg
ICBpZiAobV9leGl0VGh1bmtHZW5lcmF0b3IuZGlkVGhpbmdzKCkpIHsKLSAgICAgICAgICAgIE93
blB0cjxMaW5rQnVmZmVyPiBsaW5rQnVmZmVyID0gYWRvcHRQdHIobmV3IExpbmtCdWZmZXIoCi0g
ICAgICAgICAgICAgICAgdm0oKSwgJm1fZXhpdFRodW5rR2VuZXJhdG9yLCBtX2Z0bFN0YXRlLmdy
YXBoLm1fY29kZUJsb2NrLAotICAgICAgICAgICAgICAgIEpJVENvbXBpbGF0aW9uTXVzdFN1Y2Nl
ZWQpKTsKLSAgICAgICAgCi0gICAgICAgICAgICBBU1NFUlQobV9mdGxTdGF0ZS5maW5hbGl6ZXIt
Pm9zckV4aXQuc2l6ZSgpID09IG1fZnRsU3RhdGUuaml0Q29kZS0+b3NyRXhpdC5zaXplKCkpOwot
ICAgICAgICAKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2Z0bFN0YXRl
LmZpbmFsaXplci0+b3NyRXhpdC5zaXplKCk7ICsraSkgewotICAgICAgICAgICAgICAgIE9TUkV4
aXRDb21waWxhdGlvbkluZm8mIGluZm8gPSBtX2Z0bFN0YXRlLmZpbmFsaXplci0+b3NyRXhpdFtp
XTsKLSAgICAgICAgICAgICAgICBPU1JFeGl0JiBleGl0ID0gbV9mdGxTdGF0ZS5qaXRDb2RlLT5v
c3JFeGl0W2ldOwotICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgbGlua0J1ZmZlci0+bGlu
ayhpbmZvLm1fdGh1bmtKdW1wLCB0YXJnZXQpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICAg
ICAgbV9vdXQuc2V0KAotICAgICAgICAgICAgICAgICAgICBtX291dC5jb25zdEludFB0cigKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGxpbmtCdWZmZXItPmxvY2F0aW9uT2YoaW5mby5tX3RodW5r
TGFiZWwpLmV4ZWN1dGFibGVBZGRyZXNzKCkpLAotICAgICAgICAgICAgICAgICAgICBpbmZvLm1f
dGh1bmtBZGRyZXNzVmFsdWUpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgZXhpdC5t
X3BhdGNoYWJsZUNvZGVPZmZzZXQgPSBsaW5rQnVmZmVyLT5vZmZzZXRPZihpbmZvLm1fdGh1bmtK
dW1wKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgICAgICBtX2Z0bFN0YXRlLmZp
bmFsaXplci0+ZXhpdFRodW5rc0xpbmtCdWZmZXIgPSBsaW5rQnVmZmVyLnJlbGVhc2UoKTsKLSAg
ICAgICAgfQotCi0gICAgICAgIG1fb3V0Lmp1bXAobG93QmxvY2sobV9ncmFwaC5ibG9jaygwKSkp
OwotICAgIH0KLSAgICAKICAgICB2b2lkIG9ic2VydmVNb3ZIaW50KE5vZGUqIG5vZGUpCiAgICAg
ewogICAgICAgICBBU1NFUlQobm9kZS0+Y29udGFpbnNNb3ZIaW50KCkpOwpAQCAtMzc4Miw3ICsz
NjYxLDYgQEAgcHJpdmF0ZToKICAgICBPdXRwdXQgbV9vdXQ7CiAgICAgCiAgICAgTEJhc2ljQmxv
Y2sgbV9wcm9sb2d1ZTsKLSAgICBMQmFzaWNCbG9jayBtX2luaXRpYWxpemF0aW9uOwogICAgIEhh
c2hNYXA8QmFzaWNCbG9jayosIExCYXNpY0Jsb2NrPiBtX2Jsb2NrczsKICAgICAKICAgICBMVmFs
dWUgbV9jYWxsRnJhbWU7CkBAIC0zODAyLDcgKzM2ODAsNiBAQCBwcml2YXRlOgogICAgIAogICAg
IE9wZXJhbmRzPFZhbHVlU291cmNlPiBtX3ZhbHVlU291cmNlczsKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgbV9sYXN0U2V0T3BlcmFuZDsKLSAgICBFeGl0VGh1bmtHZW5lcmF0b3IgbV9leGl0VGh1bmtH
ZW5lcmF0b3I7CiAgICAgCiAgICAgSW5QbGFjZUFic3RyYWN0U3RhdGUgbV9zdGF0ZTsKICAgICBB
YnN0cmFjdEludGVycHJldGVyPEluUGxhY2VBYnN0cmFjdFN0YXRlPiBtX2ludGVycHJldGVyOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0Q29tcGlsYXRpb25JbmZv
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0Q29t
cGlsYXRpb25JbmZvLmgJKHJldmlzaW9uIDE1ODUxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMT1NSRXhpdENvbXBpbGF0aW9uSW5mby5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNywx
NSArMzcsMTMgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgewogCiBzdHJ1Y3QgT1NS
RXhpdENvbXBpbGF0aW9uSW5mbyB7CiAgICAgT1NSRXhpdENvbXBpbGF0aW9uSW5mbygpCi0gICAg
ICAgIDogbV90aHVua0FkZHJlc3NWYWx1ZSgwKQotICAgICAgICAsIG1faXNJbnZhbGlkYXRpb25Q
b2ludChmYWxzZSkKKyAgICAgICAgOiBtX2lzSW52YWxpZGF0aW9uUG9pbnQoZmFsc2UpCiAgICAg
ewogICAgIH0KICAgICAKICAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgbV90aHVua0xhYmVsOwog
ICAgIE1hY3JvQXNzZW1ibGVyOjpQYXRjaGFibGVKdW1wIG1fdGh1bmtKdW1wOwogICAgIENvZGVM
b2NhdGlvbkxhYmVsIG1fdGh1bmtBZGRyZXNzOwotICAgIExWYWx1ZSBtX3RodW5rQWRkcmVzc1Zh
bHVlOwogICAgIGJvb2wgbV9pc0ludmFsaWRhdGlvblBvaW50OwogfTsKIApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0Q29tcGlsZXIuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdENvbXBpbGVyLmNwcAkocmV2aXNp
b24gMTU4NTEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0Q29tcGls
ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MiwxMSArNDIsNyBAQCBuYW1lc3BhY2UgSlNDIHsg
bmFtZXNwYWNlIEZUTCB7CiAKIHVzaW5nIG5hbWVzcGFjZSBERkc7CiAKLS8vIFRoaXMgaW1wbGVt
ZW50cyB0d28gZmxhdm9ycyBvZiBPU1IgZXhpdDogb25lIHRoYXQgaW52b2x2ZXMgaGF2aW5nIExM
Vk0gaW50cmluc2ljcyB0byBoZWxwCi0vLyBPU1IgZXhpdCwgYW5kIG9uZSB0aGF0IGRvZXNuJ3Qu
IFRoZSBvbmUgdGhhdCBkb2Vzbid0IHdpbGwgZ2V0IGtpbGxlZCBvZmYsIHNvIHdlIGRvbid0IGF0
dGVtcHQKLS8vIHRvIHNoYXJlIGNvZGUgYmV0d2VlbiB0aGUgdHdvLgotCi1zdGF0aWMgdm9pZCBj
b21waWxlU3R1YldpdGhPU1JFeGl0U3RhY2ttYXAoCitzdGF0aWMgdm9pZCBjb21waWxlU3R1YigK
ICAgICB1bnNpZ25lZCBleGl0SUQsIEpJVENvZGUqIGppdENvZGUsIE9TUkV4aXQmIGV4aXQsIFZN
KiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2spCiB7CiAgICAgU3RhY2tNYXBzOjpSZWNvcmQqIHJl
Y29yZDsKQEAgLTE3OCwxNjkgKzE3NCw2IEBAIHN0YXRpYyB2b2lkIGNvbXBpbGVTdHViV2l0aE9T
UkV4aXRTdGFja20KICAgICAgICAgICAgIHRvQ1N0cmluZygqcmVjb3JkKS5kYXRhKCkpKTsKIH0K
IAotc3RhdGljIHZvaWQgY29tcGlsZVN0dWJXaXRob3V0T1NSRXhpdFN0YWNrbWFwKAotICAgIHVu
c2lnbmVkIGV4aXRJRCwgT1NSRXhpdCYgZXhpdCwgVk0qIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9j
aykKLXsKLSAgICBDQ2FsbEhlbHBlcnMgaml0KHZtLCBjb2RlQmxvY2spOwotICAgIAotICAgIC8v
IE1ha2Ugb3Vyc2VsdmVzIGxvb2sgbGlrZSBhIHJlYWwgQyBmdW5jdGlvbi4KLSAgICBqaXQucHVz
aChNYWNyb0Fzc2VtYmxlcjo6ZnJhbWVQb2ludGVyUmVnaXN0ZXIpOwotICAgIGppdC5tb3ZlKE1h
Y3JvQXNzZW1ibGVyOjpzdGFja1BvaW50ZXJSZWdpc3RlciwgTWFjcm9Bc3NlbWJsZXI6OmZyYW1l
UG9pbnRlclJlZ2lzdGVyKTsKLSAgICAKLSAgICAvLyBUaGlzIGlzIGFjdHVhbGx5IGZhaXJseSBl
YXN5LCBldmVuIHRob3VnaCBpdCBpcyBob3JyaWJseSBncm9zcy4gV2Uga25vdyB0aGF0Ci0gICAg
Ly8gTExWTSB3b3VsZCBoYXZlIHBhc3NlcyB1cyBhbGwgb2YgdGhlIHN0YXRlIHZpYSBhcmd1bWVu
dHMuIFdlIGtub3cgaG93IHRvIGdldAotICAgIC8vIHRoZSBhcmd1bWVudHMuIEFuZCwgd2Uga25v
dyBob3cgdG8gcG9wIHN0YWNrIGJhY2sgdG8gdGhlIEpJVCBzdGFjayBmcmFtZSwgc29ydAotICAg
IC8vIG9mOiB3ZSBrbm93IHRoYXQgaXQncyB0d28gZnJhbWVzIGJlbmVhdGggdXMuIFRoaXMgaXMg
dGVycmlibGUgYW5kIEkgZmVlbAotICAgIC8vIGFzaGFtZWQgb2YgaXQsIGJ1dCBpdCB3aWxsIHdv
cmsgZm9yIG5vdy4KLSAgICAKLSAgICBDQXJndW1lbnRHZXR0ZXIgYXJndW1lbnRzKGppdCwgMik7
Ci0gICAgCi0gICAgLy8gRmlyc3QgcmVjb3ZlciBvdXIgY2FsbCBmcmFtZSBhbmQgdGFnIHRoaW5n
aWVzLgotICAgIGFyZ3VtZW50cy5sb2FkTmV4dFB0cihHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rl
cik7Ci0gICAgaml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW02NChUYWdUeXBlTnVt
YmVyKSwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKTsKLSAgICBqaXQubW92ZShNYWNy
b0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTY0KFRhZ01hc2spLCBHUFJJbmZvOjp0YWdNYXNrUmVnaXN0
ZXIpOwotICAgIAotICAgIC8vIERvIHNvbWUgdmFsdWUgcHJvZmlsaW5nLgotICAgIGlmIChleGl0
Lm1fcHJvZmlsZVZhbHVlRm9ybWF0ICE9IEludmFsaWRWYWx1ZUZvcm1hdCkgewotICAgICAgICBh
cmd1bWVudHMubG9hZE5leHRBbmRCb3goZXhpdC5tX3Byb2ZpbGVWYWx1ZUZvcm1hdCwgR1BSSW5m
bzo6bm9uQXJnR1BSMCk7Ci0gICAgICAgIAotICAgICAgICBpZiAoZXhpdC5tX2tpbmQgPT0gQmFk
Q2FjaGUgfHwgZXhpdC5tX2tpbmQgPT0gQmFkSW5kZXhpbmdUeXBlKSB7Ci0gICAgICAgICAgICBD
b2RlT3JpZ2luIGNvZGVPcmlnaW4gPSBleGl0Lm1fY29kZU9yaWdpbkZvckV4aXRQcm9maWxlOwot
ICAgICAgICAgICAgaWYgKEFycmF5UHJvZmlsZSogYXJyYXlQcm9maWxlID0gaml0LmJhc2VsaW5l
Q29kZUJsb2NrRm9yKGNvZGVPcmlnaW4pLT5nZXRBcnJheVByb2ZpbGUoY29kZU9yaWdpbi5ieXRl
Y29kZUluZGV4KSkgewotICAgICAgICAgICAgICAgIGppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKEdQUkluZm86Om5vbkFyZ0dQUjAsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkp
LCBHUFJJbmZvOjpub25BcmdHUFIxKTsKLSAgICAgICAgICAgICAgICBqaXQuc3RvcmVQdHIoR1BS
SW5mbzo6bm9uQXJnR1BSMSwgYXJyYXlQcm9maWxlLT5hZGRyZXNzT2ZMYXN0U2VlblN0cnVjdHVy
ZSgpKTsKLSAgICAgICAgICAgICAgICBqaXQubG9hZDgoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
R1BSSW5mbzo6bm9uQXJnR1BSMSwgU3RydWN0dXJlOjppbmRleGluZ1R5cGVPZmZzZXQoKSksIEdQ
UkluZm86Om5vbkFyZ0dQUjEpOwotICAgICAgICAgICAgICAgIGppdC5tb3ZlKE1hY3JvQXNzZW1i
bGVyOjpUcnVzdGVkSW1tMzIoMSksIEdQUkluZm86Om5vbkFyZ0dQUjIpOwotICAgICAgICAgICAg
ICAgIGppdC5sc2hpZnQzMihHUFJJbmZvOjpub25BcmdHUFIxLCBHUFJJbmZvOjpub25BcmdHUFIy
KTsKLSAgICAgICAgICAgICAgICBqaXQub3IzMihHUFJJbmZvOjpub25BcmdHUFIyLCBNYWNyb0Fz
c2VtYmxlcjo6QWJzb2x1dGVBZGRyZXNzKGFycmF5UHJvZmlsZS0+YWRkcmVzc09mQXJyYXlNb2Rl
cygpKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlmICgh
IWV4aXQubV92YWx1ZVByb2ZpbGUpCi0gICAgICAgICAgICBqaXQuc3RvcmU2NChHUFJJbmZvOjpu
b25BcmdHUFIwLCBleGl0Lm1fdmFsdWVQcm9maWxlLmdldFNwZWNGYWlsQnVja2V0KDApKTsKLSAg
ICB9Ci0gICAgCi0gICAgLy8gVXNlIGEgc2NyYXRjaCBidWZmZXIgdG8gdHJhbnNmZXIgYWxsIHZh
bHVlcy4KLSAgICBTY3JhdGNoQnVmZmVyKiBzY3JhdGNoQnVmZmVyID0gdm0tPnNjcmF0Y2hCdWZm
ZXJGb3JTaXplKHNpemVvZihFbmNvZGVkSlNWYWx1ZSkgKiBleGl0Lm1fdmFsdWVzLnNpemUoKSk7
Ci0gICAgRW5jb2RlZEpTVmFsdWUqIHNjcmF0Y2ggPSBzY3JhdGNoQnVmZmVyID8gc3RhdGljX2Nh
c3Q8RW5jb2RlZEpTVmFsdWUqPihzY3JhdGNoQnVmZmVyLT5kYXRhQnVmZmVyKCkpIDogMDsKLSAg
ICAKLSAgICAvLyBTdGFydCBieSBkdW1waW5nIGFsbCBhcmd1bWVudCBleGl0IHZhbHVlcyB0byB0
aGUgc3RhY2suCi0gICAgCi0gICAgVmVjdG9yPEV4aXRBcmd1bWVudEZvck9wZXJhbmQsIDE2PiBz
b3J0ZWRBcmd1bWVudHM7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gZXhpdC5tX3ZhbHVlcy5zaXpl
KCk7IGktLTspIHsKLSAgICAgICAgRXhpdFZhbHVlIHZhbHVlID0gZXhpdC5tX3ZhbHVlc1tpXTsK
LSAgICAgICAgaW50IG9wZXJhbmQgPSBleGl0Lm1fdmFsdWVzLm9wZXJhbmRGb3JJbmRleChpKTsK
LSAgICAgICAgCi0gICAgICAgIGlmICghdmFsdWUuaXNBcmd1bWVudCgpKQotICAgICAgICAgICAg
Y29udGludWU7Ci0gICAgICAgIAotICAgICAgICBzb3J0ZWRBcmd1bWVudHMuYXBwZW5kKEV4aXRB
cmd1bWVudEZvck9wZXJhbmQodmFsdWUuZXhpdEFyZ3VtZW50KCksIFZpcnR1YWxSZWdpc3Rlcihv
cGVyYW5kKSkpOwotICAgIH0KLSAgICBzdGQ6OnNvcnQoc29ydGVkQXJndW1lbnRzLmJlZ2luKCks
IHNvcnRlZEFyZ3VtZW50cy5lbmQoKSwgbGVzc2VyQXJndW1lbnRJbmRleCk7Ci0gICAgCi0gICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNvcnRlZEFyZ3VtZW50cy5zaXplKCk7ICsraSkgewot
ICAgICAgICBFeGl0QXJndW1lbnRGb3JPcGVyYW5kIGFyZ3VtZW50ID0gc29ydGVkQXJndW1lbnRz
W2ldOwotICAgICAgICAKLSAgICAgICAgYXJndW1lbnRzLmxvYWROZXh0QW5kQm94KGFyZ3VtZW50
LmV4aXRBcmd1bWVudCgpLmZvcm1hdCgpLCBHUFJJbmZvOjpub25BcmdHUFIwKTsKLSAgICAgICAg
aml0LnN0b3JlNjQoCi0gICAgICAgICAgICBHUFJJbmZvOjpub25BcmdHUFIwLCBzY3JhdGNoICsg
ZXhpdC5tX3ZhbHVlcy5pbmRleEZvck9wZXJhbmQoYXJndW1lbnQub3BlcmFuZCgpKSk7Ci0gICAg
fQotICAgIAotICAgIC8vIEFsbCB0ZW1wIHJlZ2lzdGVycyBhcmUgZnJlZSBhdCB0aGlzIHBvaW50
LgotICAgIAotICAgIC8vIE1vdmUgYW55dGhpbmcgb24gdGhlIHN0YWNrIGludG8gdGhlIGFwcHJv
cHJpYXRlIHBsYWNlIGluIHRoZSBzY3JhdGNoIGJ1ZmZlci4KLSAgICAKLSAgICBmb3IgKHVuc2ln
bmVkIGkgPSBleGl0Lm1fdmFsdWVzLnNpemUoKTsgaS0tOykgewotICAgICAgICBFeGl0VmFsdWUg
dmFsdWUgPSBleGl0Lm1fdmFsdWVzW2ldOwotICAgICAgICAKLSAgICAgICAgc3dpdGNoICh2YWx1
ZS5raW5kKCkpIHsKLSAgICAgICAgY2FzZSBFeGl0VmFsdWVJbkpTU3RhY2s6Ci0gICAgICAgICAg
ICBqaXQubG9hZDY0KEFzc2VtYmx5SGVscGVyczo6YWRkcmVzc0Zvcih2YWx1ZS52aXJ0dWFsUmVn
aXN0ZXIoKSksIEdQUkluZm86OnJlZ1QwKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBj
YXNlIEV4aXRWYWx1ZUluSlNTdGFja0FzSW50MzI6Ci0gICAgICAgICAgICBqaXQubG9hZDMyKAot
ICAgICAgICAgICAgICAgIEFzc2VtYmx5SGVscGVyczo6YWRkcmVzc0Zvcih2YWx1ZS52aXJ0dWFs
UmVnaXN0ZXIoKSkud2l0aE9mZnNldCgKLSAgICAgICAgICAgICAgICAgICAgT0JKRUNUX09GRlNF
VE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy5wYXlsb2FkKSksCi0gICAgICAgICAg
ICAgICAgR1BSSW5mbzo6cmVnVDApOwotICAgICAgICAgICAgaml0Lm9yNjQoR1BSSW5mbzo6dGFn
VHlwZU51bWJlclJlZ2lzdGVyLCBHUFJJbmZvOjpyZWdUMCk7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgY2FzZSBFeGl0VmFsdWVJbkpTU3RhY2tBc0ludDUyOgotICAgICAgICAgICAgaml0
LmxvYWQ2NChBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NGb3IodmFsdWUudmlydHVhbFJlZ2lzdGVy
KCkpLCBHUFJJbmZvOjpyZWdUMCk7Ci0gICAgICAgICAgICBqaXQucnNoaWZ0NjQoCi0gICAgICAg
ICAgICAgICAgQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6aW50NTJTaGlm
dEFtb3VudCksIEdQUkluZm86OnJlZ1QwKTsKLSAgICAgICAgICAgIGppdC5ib3hJbnQ1MihHUFJJ
bmZvOjpyZWdUMCwgR1BSSW5mbzo6cmVnVDAsIEdQUkluZm86OnJlZ1QxLCBGUFJJbmZvOjpmcFJl
Z1QwKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEV4aXRWYWx1ZUluSlNTdGFj
a0FzRG91YmxlOgotICAgICAgICAgICAgaml0LmxvYWREb3VibGUoQXNzZW1ibHlIZWxwZXJzOjph
ZGRyZXNzRm9yKHZhbHVlLnZpcnR1YWxSZWdpc3RlcigpKSwgRlBSSW5mbzo6ZnBSZWdUMCk7Ci0g
ICAgICAgICAgICBqaXQuYm94RG91YmxlKEZQUkluZm86OmZwUmVnVDAsIEdQUkluZm86OnJlZ1Qw
KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEV4aXRWYWx1ZURlYWQ6Ci0gICAg
ICAgIGNhc2UgRXhpdFZhbHVlQ29uc3RhbnQ6Ci0gICAgICAgIGNhc2UgRXhpdFZhbHVlQXJndW1l
bnQ6Ci0gICAgICAgICAgICAvLyBEb24ndCBkbyBhbnl0aGluZyBmb3IgdGhlc2UuCi0gICAgICAg
ICAgICBjb250aW51ZTsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIFJFTEVBU0VfQVNT
RVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAg
ICAKLSAgICAgICAgaml0LnN0b3JlNjQoR1BSSW5mbzo6cmVnVDAsIHNjcmF0Y2ggKyBpKTsKLSAg
ICB9Ci0gICAgCi0gICAgLy8gTW92ZSBldmVyeXRoaW5nIGZyb20gdGhlIHNjcmF0Y2ggYnVmZmVy
IHRvIHRoZSBzdGFjazsgdGhpcyBhbHNvIHJlaWZpZXMgY29uc3RhbnRzLgotICAgIAotICAgIGZv
ciAodW5zaWduZWQgaSA9IGV4aXQubV92YWx1ZXMuc2l6ZSgpOyBpLS07KSB7Ci0gICAgICAgIEV4
aXRWYWx1ZSB2YWx1ZSA9IGV4aXQubV92YWx1ZXNbaV07Ci0gICAgICAgIGludCBvcGVyYW5kID0g
ZXhpdC5tX3ZhbHVlcy5vcGVyYW5kRm9ySW5kZXgoaSk7Ci0gICAgICAgIAotICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6QWRkcmVzcyBhZGRyZXNzID0gQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9y
KG9wZXJhbmQpOwotICAgICAgICAKLSAgICAgICAgc3dpdGNoICh2YWx1ZS5raW5kKCkpIHsKLSAg
ICAgICAgY2FzZSBFeGl0VmFsdWVEZWFkOgotICAgICAgICAgICAgaml0LnN0b3JlNjQoTWFjcm9B
c3NlbWJsZXI6OlRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSkpLCBh
ZGRyZXNzKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEV4aXRWYWx1ZUNvbnN0
YW50OgotICAgICAgICAgICAgaml0LnN0b3JlNjQoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW02
NChKU1ZhbHVlOjplbmNvZGUodmFsdWUuY29uc3RhbnQoKSkpLCBhZGRyZXNzKTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICBjYXNlIEV4aXRWYWx1ZUluSlNTdGFjazoKLSAgICAgICAgY2Fz
ZSBFeGl0VmFsdWVJbkpTU3RhY2tBc0ludDMyOgotICAgICAgICBjYXNlIEV4aXRWYWx1ZUluSlNT
dGFja0FzSW50NTI6Ci0gICAgICAgIGNhc2UgRXhpdFZhbHVlSW5KU1N0YWNrQXNEb3VibGU6Ci0g
ICAgICAgIGNhc2UgRXhpdFZhbHVlQXJndW1lbnQ6Ci0gICAgICAgICAgICBqaXQubG9hZDY0KHNj
cmF0Y2ggKyBpLCBHUFJJbmZvOjpyZWdUMCk7Ci0gICAgICAgICAgICBqaXQuc3RvcmU2NChHUFJJ
bmZvOjpyZWdUMCwgYWRkcmVzcyk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVs
dDoKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgfQotICAgIH0KLSAgICAKLSAgICBoYW5kbGVFeGl0Q291bnRzKGpp
dCwgZXhpdCk7Ci0gICAgcmVpZnlJbmxpbmVkQ2FsbEZyYW1lcyhqaXQsIGV4aXQpOwotICAgIAot
ICAgIGppdC5wb3AoTWFjcm9Bc3NlbWJsZXI6OmZyYW1lUG9pbnRlclJlZ2lzdGVyKTsKLSAgICBq
aXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6ZnJhbWVQb2ludGVyUmVnaXN0ZXIsIE1hY3JvQXNzZW1i
bGVyOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7Ci0gICAgaml0LnBvcChNYWNyb0Fzc2VtYmxlcjo6
ZnJhbWVQb2ludGVyUmVnaXN0ZXIpOwotICAgIGppdC5wb3AoR1BSSW5mbzo6bm9uQXJnR1BSMCk7
IC8vIGlnbm9yZSB0aGUgcmVzdWx0LgotICAgIAotICAgIGlmIChleGl0Lm1fbGFzdFNldE9wZXJh
bmQuaXNWYWxpZCgpKSB7Ci0gICAgICAgIGppdC5sb2FkNjQoCi0gICAgICAgICAgICBBc3NlbWJs
eUhlbHBlcnM6OmFkZHJlc3NGb3IoZXhpdC5tX2xhc3RTZXRPcGVyYW5kKSwgR1BSSW5mbzo6Y2Fj
aGVkUmVzdWx0UmVnaXN0ZXIpOwotICAgIH0KLSAgICAKLSAgICBhZGp1c3RBbmRKdW1wVG9UYXJn
ZXQoaml0LCBleGl0KTsKLSAgICAKLSAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCp2bSwgJmpp
dCwgY29kZUJsb2NrKTsKLSAgICBleGl0Lm1fY29kZSA9IEZJTkFMSVpFX0NPREVfSUYoCi0gICAg
ICAgIHNob3VsZFNob3dEaXNhc3NlbWJseSgpLAotICAgICAgICBwYXRjaEJ1ZmZlciwKLSAgICAg
ICAgKCJGVEwgT1NSIGV4aXQgIyV1IChiYyMldSwgJXMpIGZyb20gJXMsIHdpdGggb3BlcmFuZHMg
PSAlcyIsCi0gICAgICAgICAgICBleGl0SUQsIGV4aXQubV9jb2RlT3JpZ2luLmJ5dGVjb2RlSW5k
ZXgsCi0gICAgICAgICAgICBleGl0S2luZFRvU3RyaW5nKGV4aXQubV9raW5kKSwgdG9DU3RyaW5n
KCpjb2RlQmxvY2spLmRhdGEoKSwKLSAgICAgICAgICAgIHRvQ1N0cmluZyhpZ25vcmluZ0NvbnRl
eHQ8RHVtcENvbnRleHQ+KGV4aXQubV92YWx1ZXMpKS5kYXRhKCkpKTsKLX0KLQogZXh0ZXJuICJD
IiB2b2lkKiBjb21waWxlRlRMT1NSRXhpdChFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGV4aXRJ
RCkKIHsKICAgICBTYW1wbGluZ1JlZ2lvbiBzYW1wbGluZ1JlZ2lvbigiRlRMIE9TUiBFeGl0IENv
bXBpbGF0aW9uIik7CkBAIC0zNjEsMTAgKzE5NCw3IEBAIGV4dGVybiAiQyIgdm9pZCogY29tcGls
ZUZUTE9TUkV4aXQoRXhlY1MKICAgICAKICAgICBwcmVwYXJlQ29kZU9yaWdpbkZvck9TUkV4aXQo
ZXhlYywgZXhpdC5tX2NvZGVPcmlnaW4pOwogICAgIAotICAgIGlmIChPcHRpb25zOjpmdGxVc2Vz
U3RhY2ttYXBzKCkpCi0gICAgICAgIGNvbXBpbGVTdHViV2l0aE9TUkV4aXRTdGFja21hcChleGl0
SUQsIGppdENvZGUsIGV4aXQsIHZtLCBjb2RlQmxvY2spOwotICAgIGVsc2UKLSAgICAgICAgY29t
cGlsZVN0dWJXaXRob3V0T1NSRXhpdFN0YWNrbWFwKGV4aXRJRCwgZXhpdCwgdm0sIGNvZGVCbG9j
ayk7CisgICAgY29tcGlsZVN0dWIoZXhpdElELCBqaXRDb2RlLCBleGl0LCB2bSwgY29kZUJsb2Nr
KTsKICAgICAKICAgICBSZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIoY29kZUJsb2NrKTsKICAg
ICByZXBhdGNoQnVmZmVyLnJlbGluaygKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMU3RhY2tNYXBzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTFN0YWNrTWFwcy5jcHAJKHJldmlzaW9uIDE1ODUxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMU3RhY2tNYXBzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTUsMTcgKzU1LDEw
IEBAIHZvaWQgU3RhY2tNYXBzOjpDb25zdGFudDo6ZHVtcChQcmludFN0cmUKIAogdm9pZCBTdGFj
a01hcHM6OkxvY2F0aW9uOjpwYXJzZShEYXRhVmlldyogdmlldywgdW5zaWduZWQmIG9mZnNldCkK
IHsKLSAgICB1aW50MTZfdCB0YWdnZWRSZWcgPSB2aWV3LT5yZWFkPHVpbnQxNl90PihvZmZzZXQs
IHRydWUpOwotICAgIGlmIChzdGF0aWNfY2FzdDxpbnQxNl90Pih0YWdnZWRSZWcpIDwgMCkgewot
ICAgICAgICBkYXRhTG9nKAotICAgICAgICAgICAgIkRldGVjdGVkIGEgbmVnYXRpdmUgdGFnZ2Vk
IHJlZ2lzdGVyICIsIHN0YXRpY19jYXN0PGludDE2X3Q+KHRhZ2dlZFJlZyksCi0gICAgICAgICAg
ICAiIGF0IG9mZnNldCAiLCBvZmZzZXQsICJcbiIpOwotICAgICAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOwotICAgIH0KLSAgICBkd2FyZlJlZ051bSA9IHRhZ2dlZFJlZyAmICgoMSA8
PCAxMikgLSAxKTsKLSAgICBraW5kID0gc3RhdGljX2Nhc3Q8S2luZD4odGFnZ2VkUmVnID4+IDEy
KTsKLQotICAgIHRoaXMtPm9mZnNldCA9IHZpZXctPnJlYWQ8aW50MTZfdD4ob2Zmc2V0LCB0cnVl
KTsKKyAgICBraW5kID0gc3RhdGljX2Nhc3Q8S2luZD4odmlldy0+cmVhZDx1aW50OF90PihvZmZz
ZXQsIHRydWUpKTsKKyAgICB2aWV3LT5yZWFkPHVpbnQ4X3Q+KG9mZnNldCwgdHJ1ZSk7IC8vIHJl
c2VydmVkCisgICAgZHdhcmZSZWdOdW0gPSB2aWV3LT5yZWFkPHVpbnQxNl90PihvZmZzZXQsIHRy
dWUpOworICAgIHRoaXMtPm9mZnNldCA9IHZpZXctPnJlYWQ8aW50MzJfdD4ob2Zmc2V0LCB0cnVl
KTsKIH0KIAogdm9pZCBTdGFja01hcHM6OkxvY2F0aW9uOjpkdW1wKFByaW50U3RyZWFtJiBvdXQp
IGNvbnN0CkBAIC0xMTEsNiArMTA0LDggQEAgYm9vbCBTdGFja01hcHM6OnBhcnNlKERhdGFWaWV3
KiB2aWV3KQogewogICAgIHVuc2lnbmVkIG9mZnNldCA9IDA7CiAgICAgCisgICAgdmlldy0+cmVh
ZDx1aW50MzJfdD4ob2Zmc2V0LCB0cnVlKTsgLy8gUmVzZXJ2ZWQgKGhlYWRlcikKKyAgICAKICAg
ICB1aW50MzJfdCBudW1Db25zdGFudHMgPSB2aWV3LT5yZWFkPHVpbnQzMl90PihvZmZzZXQsIHRy
dWUpOwogICAgIHdoaWxlIChudW1Db25zdGFudHMtLSkKICAgICAgICAgY29uc3RhbnRzLmFwcGVu
ZChyZWFkT2JqZWN0PENvbnN0YW50Pih2aWV3LCBvZmZzZXQpKTsKQEAgLTE2NCw2ICsxNTksOSBA
QCB2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgU3RhCiAgICAgY2FzZSBTdGFj
a01hcHM6OkxvY2F0aW9uOjpSZWdpc3RlcjoKICAgICAgICAgb3V0LnByaW50KCJSZWdpc3RlciIp
OwogICAgICAgICByZXR1cm47CisgICAgY2FzZSBTdGFja01hcHM6OkxvY2F0aW9uOjpEaXJlY3Q6
CisgICAgICAgIG91dC5wcmludCgiRGlyZWN0Iik7CisgICAgICAgIHJldHVybjsKICAgICBjYXNl
IFN0YWNrTWFwczo6TG9jYXRpb246OkluZGlyZWN0OgogICAgICAgICBvdXQucHJpbnQoIkluZGly
ZWN0Iik7CiAgICAgICAgIHJldHVybjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMU3RhY2tNYXBzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExTdGFja01hcHMuaAkocmV2aXNpb24gMTU4NTEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExTdGFja01hcHMuaAkod29ya2luZyBjb3B5KQpAQCAtNTIsNiArNTIsNyBAQCBzdHJ1
Y3QgU3RhY2tNYXBzIHsKICAgICAgICAgZW51bSBLaW5kIHsKICAgICAgICAgICAgIFVucHJvY2Vz
c2VkLAogICAgICAgICAgICAgUmVnaXN0ZXIsCisgICAgICAgICAgICBEaXJlY3QsCiAgICAgICAg
ICAgICBJbmRpcmVjdCwKICAgICAgICAgICAgIENvbnN0YW50LAogICAgICAgICAgICAgQ29uc3Rh
bnRJbmRleApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExUaHVua3MuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMVGh1bmtzLmNwcAkocmV2
aXNpb24gMTU4NTEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExUaHVua3MuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zOSw2MCArMzksNyBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNw
YWNlIEZUTCB7CiAKIHVzaW5nIG5hbWVzcGFjZSBERkc7CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVJl
ZiBvc3JFeGl0R2VuZXJhdGlvbldpdGhvdXRTdGFja01hcFRodW5rR2VuZXJhdG9yKFZNKiB2bSkK
LXsKLSAgICBBc3NlbWJseUhlbHBlcnMgaml0KHZtLCAwKTsKLSAgICAKLSAgICAvLyBQcmV0ZW5k
IHRoYXQgd2UncmUgYSBDIGNhbGwgZnJhbWUuCi0gICAgaml0LnB1c2goTWFjcm9Bc3NlbWJsZXI6
OmZyYW1lUG9pbnRlclJlZ2lzdGVyKTsKLSAgICBqaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6c3Rh
Y2tQb2ludGVyUmVnaXN0ZXIsIE1hY3JvQXNzZW1ibGVyOjpmcmFtZVBvaW50ZXJSZWdpc3Rlcik7
Ci0gICAgaml0LnB1c2goR1BSSW5mbzo6cmVnVDApOwotICAgIGppdC5wdXNoKEdQUkluZm86OnJl
Z1QwKTsKLSAgICAKLSAgICBqaXQucG9rZShHUFJJbmZvOjpub25BcmdHUFIwLCAxKTsKLSAgICAK
LSAgICBTY3JhdGNoQnVmZmVyKiBzY3JhdGNoQnVmZmVyID0gdm0tPnNjcmF0Y2hCdWZmZXJGb3JT
aXplKHJlcXVpcmVkU2NyYXRjaE1lbW9yeVNpemVJbkJ5dGVzKCkpOwotICAgIGNoYXIqIGJ1ZmZl
ciA9IHN0YXRpY19jYXN0PGNoYXIqPihzY3JhdGNoQnVmZmVyLT5kYXRhQnVmZmVyKCkpOwotICAg
IAotICAgIHNhdmVBbGxSZWdpc3RlcnMoaml0LCBidWZmZXIpOwotICAgIAotICAgIC8vIFRlbGwg
R0MgbWFyayBwaGFzZSBob3cgbXVjaCBvZiB0aGUgc2NyYXRjaCBidWZmZXIgaXMgYWN0aXZlIGR1
cmluZyBjYWxsLgotICAgIGppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKHNj
cmF0Y2hCdWZmZXItPmFjdGl2ZUxlbmd0aFB0cigpKSwgR1BSSW5mbzo6bm9uQXJnR1BSMSk7Ci0g
ICAgaml0LnN0b3JlUHRyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKHJlcXVpcmVkU2Ny
YXRjaE1lbW9yeVNpemVJbkJ5dGVzKCkpLCBHUFJJbmZvOjpub25BcmdHUFIxKTsKLQotICAgIC8v
IGFyZ3VtZW50IDAgaXMgYWxyZWFkeSB0aGUgY2FsbCBmcmFtZS4KLSAgICBqaXQucGVlayhHUFJJ
bmZvOjphcmd1bWVudEdQUjEsIDEpOwotICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGZ1bmN0aW9u
Q2FsbCA9IGppdC5jYWxsKCk7Ci0gICAgCi0gICAgLy8gQXQgdGhpcyBwb2ludCB3ZSB3YW50IHRv
IG1ha2UgYSB0YWlsIGNhbGwgdG8gd2hhdCB3YXMgcmV0dXJuZWQgdG8gdXMgaW4gdGhlCi0gICAg
Ly8gcmV0dXJuVmFsdWVHUFIuIEJ1dCBhdCB0aGUgc2FtZSB0aW1lIGFzIHdlIGRvIHRoaXMsIHdl
IG11c3QgcmVzdG9yZSBhbGwgcmVnaXN0ZXJzLgotICAgIC8vIFRoZSB3YXkgd2Ugd2lsbCBhY2Nv
bXBsaXNoIHRoaXMgaXMgYnkgYXJyYW5naW5nIHRvIGhhdmUgdGhlIHRhaWwgY2FsbCB0YXJnZXQg
aW4gdGhlCi0gICAgLy8gcmV0dXJuIGFkZHJlc3MgInNsb3QiIChiZSBpdCBhIHJlZ2lzdGVyIG9y
IHRoZSBzdGFjaykuCi0gICAgCi0gICAgaml0Lm1vdmUoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIs
IEdQUkluZm86OnJlZ1QwKTsKLSAgICAKLSAgICAvLyBQcmVwYXJlIGZvciB0YWlsIGNhbGwuCi0g
ICAgaml0LnBvcChHUFJJbmZvOjpyZWdUMSk7Ci0gICAgaml0LnBvcChHUFJJbmZvOjpyZWdUMSk7
Ci0gICAgaml0LnBvcChNYWNyb0Fzc2VtYmxlcjo6ZnJhbWVQb2ludGVyUmVnaXN0ZXIpOwotICAg
IAotICAgIC8vIEF0IHRoaXMgcG9pbnQgd2UncmUgc2l0dGluZyBvbiB0aGUgcmV0dXJuIGFkZHJl
c3MgLSBzbyBpZiB3ZSBkaWQgYSBqdW1wIHJpZ2h0IG5vdywgdGhlCi0gICAgLy8gdGFpbC1jYWxs
ZWUgd291bGQgYmUgaGFwcHkuIEluc3RlYWQgd2UnbGwgc3Rhc2ggdGhlIGNhbGxlZSBpbiB0aGUg
cmV0dXJuIGFkZHJlc3MgYW5kIHRoZW4KLSAgICAvLyByZXN0b3JlIGFsbCByZWdpc3RlcnMuCi0g
ICAgCi0gICAgaml0LnJlc3RvcmVSZXR1cm5BZGRyZXNzQmVmb3JlUmV0dXJuKEdQUkluZm86OnJl
Z1QwKTsKLSAgICAKLSAgICByZXN0b3JlQWxsUmVnaXN0ZXJzKGppdCwgYnVmZmVyKTsKLQotICAg
IGppdC5yZXQoKTsKLSAgICAKLSAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCp2bSwgJmppdCwg
R0xPQkFMX1RIVU5LX0lEKTsKLSAgICBwYXRjaEJ1ZmZlci5saW5rKGZ1bmN0aW9uQ2FsbCwgY29t
cGlsZUZUTE9TUkV4aXQpOwotICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCAo
IkZUTCBPU1IgZXhpdCBnZW5lcmF0aW9uIHRodW5rIikpOwotfQotCi1NYWNyb0Fzc2VtYmxlckNv
ZGVSZWYgb3NyRXhpdEdlbmVyYXRpb25XaXRoU3RhY2tNYXBUaHVua0dlbmVyYXRvcigKLSAgICBW
TSYgdm0sIGNvbnN0IExvY2F0aW9uJiBsb2NhdGlvbikKK01hY3JvQXNzZW1ibGVyQ29kZVJlZiBv
c3JFeGl0R2VuZXJhdGlvblRodW5rR2VuZXJhdG9yKFZNJiB2bSwgY29uc3QgTG9jYXRpb24mIGxv
Y2F0aW9uKQogewogICAgIEFzc2VtYmx5SGVscGVycyBqaXQoJnZtLCAwKTsKICAgICAKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMVGh1bmtzLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExUaHVua3MuaAkocmV2aXNpb24gMTU4NTEwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExUaHVua3MuaAkod29ya2luZyBjb3B5KQpAQCAt
NDEsOSArNDEsNyBAQCBjbGFzcyBWTTsKIAogbmFtZXNwYWNlIEZUTCB7CiAKLU1hY3JvQXNzZW1i
bGVyQ29kZVJlZiBvc3JFeGl0R2VuZXJhdGlvbldpdGhvdXRTdGFja01hcFRodW5rR2VuZXJhdG9y
KFZNKik7Ci0KLU1hY3JvQXNzZW1ibGVyQ29kZVJlZiBvc3JFeGl0R2VuZXJhdGlvbldpdGhTdGFj
a01hcFRodW5rR2VuZXJhdG9yKFZNJiwgY29uc3QgTG9jYXRpb24mKTsKK01hY3JvQXNzZW1ibGVy
Q29kZVJlZiBvc3JFeGl0R2VuZXJhdGlvblRodW5rR2VuZXJhdG9yKFZNJiwgY29uc3QgTG9jYXRp
b24mKTsKIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBzbG93UGF0aENhbGxUaHVua0dlbmVyYXRvcihW
TSYsIGNvbnN0IFNsb3dQYXRoQ2FsbEtleSYpOwogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBNYXBUeXBl
LCB0eXBlbmFtZSBLZXlUeXBlLCB0eXBlbmFtZSBHZW5lcmF0b3JUeXBlPgpAQCAtNjQsNyArNjIs
NyBAQCBwdWJsaWM6CiAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGdldE9TUkV4aXRHZW5lcmF0
aW9uVGh1bmsoVk0mIHZtLCBjb25zdCBMb2NhdGlvbiYgbG9jYXRpb24pCiAgICAgewogICAgICAg
ICByZXR1cm4gZ2VuZXJhdGVJZk5lY2Vzc2FyeSgKLSAgICAgICAgICAgIHZtLCBtX29zckV4aXRU
aHVua3MsIGxvY2F0aW9uLCBvc3JFeGl0R2VuZXJhdGlvbldpdGhTdGFja01hcFRodW5rR2VuZXJh
dG9yKTsKKyAgICAgICAgICAgIHZtLCBtX29zckV4aXRUaHVua3MsIGxvY2F0aW9uLCBvc3JFeGl0
R2VuZXJhdGlvblRodW5rR2VuZXJhdG9yKTsKICAgICB9CiAgICAgCiAgICAgTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmIGdldFNsb3dQYXRoQ2FsbFRodW5rKFZNJiB2bSwgY29uc3QgU2xvd1BhdGhDYWxs
S2V5JiBrZXkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oCShy
ZXZpc2lvbiAxNTg1MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25z
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEyNCwxMCArMTI0LDYgQEAgdHlwZWRlZiBPcHRpb25SYW5n
ZSBvcHRpb25SYW5nZTsKICAgICB2KGJvb2wsIHVzZUZUTFRCQUEsIHRydWUpIFwKICAgICB2KGJv
b2wsIGVuYWJsZUxMVk1GYXN0SVNlbCwgZmFsc2UpIFwKICAgICB2KGJvb2wsIHVzZUxMVk1TbWFs
bENvZGVNb2RlbCwgZmFsc2UpIFwKLSAgICB2KGJvb2wsIGZ0bFRyYXBzT25PU1JFeGl0LCBmYWxz
ZSkgXAotICAgIHYoYm9vbCwgZnRsT1NSRXhpdE9taXRzTWFyc2hhbGxpbmcsIGZhbHNlKSBcCi0g
ICAgdihib29sLCBmdGxVc2VzU3RhY2ttYXBzLCBmYWxzZSkgXAotICAgIHYoYm9vbCwgdXNlTExW
TU9TUkV4aXRJbnRyaW5zaWMsIGZhbHNlKSBcCiAgICAgdihib29sLCBkdW1wTExWTUlSLCBmYWxz
ZSkgXAogICAgIHYoYm9vbCwgbGx2bUFsd2F5c0ZhaWxzQmVmb3JlQ29tcGlsZSwgZmFsc2UpIFwK
ICAgICB2KGJvb2wsIGxsdm1BbHdheXNGYWlsc0JlZm9yZUxpbmssIGZhbHNlKSBcCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>215845</attachid>
            <date>2013-11-02 20:54:41 -0700</date>
            <delta_ts>2013-11-03 10:18:19 -0800</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>34810</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTU4NTE2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDY0IEBA
CisyMDEzLTExLTAyICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
RlRMIHNob3VsZCB1c2UgTExWTSBpbnRyaW5zaWNzIGZvciBPU1IgZXhpdCwgd2F0Y2hwb2ludHMs
IGlubGluZSBjYWNoZXMsIGFuZCBzdGFjayBsYXlvdXQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyMjMxOAorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAgICAgVGhpcyBhbGwgbm93IHdvcmtzLiBUaGlz
IHBhdGNoIGp1c3QgdXBkYXRlcyBvdXIgaW1wbGVtZW50YXRpb24gdG8gd29yayB3aXRoIExMVk0g
dHJ1bmssCisgICAgICAgIGFuZCByZW1vdmVzIGFsbCBvZiB0aGUgb2xkIGNvZGUgdGhhdCB0cmll
ZCB0byBkbyBPU1IgZXhpdHMgYW5kIGhlYXAgYWNjZXNzZXMgd2l0aG91dAorICAgICAgICB0aGUg
YmVuZWZpdCBvZiB0aG9zZSBpbnRyaW5zaWNzLgorICAgICAgICAKKyAgICAgICAgSW4gcGFydGlj
dWxhcjoKKyAgICAgICAgCisgICAgICAgIC0gU3RhY2tNYXBzIHBhcnNpbmcgbm93IHVzZXMgdGhl
IG5ldywgbGVzcyBjb21wYWN0LCBidXQgbW9yZSBmdXR1cmUtcHJvb2YsIGZvcm1hdC4KKyAgICAg
ICAgCisgICAgICAgIC0gUmVtb3ZlIHRoZSBmdGxVc2VzU3RhY2ttYXBzKCkgb3B0aW9uIGFuZCBo
YXJkLWNvZGUgZnRsVXNlc1N0YWNrbWFwcyA9IHRydWUuIFJlbW92ZQorICAgICAgICAgIGFsbCBj
b2RlIGZvciBmdGxVc2VzU3RhY2ttYXBzID0gZmFsc2UsIHNpbmNlIHRoYXQgd2FzIG9ubHkgdGhl
cmUgZm9yIGJhY2sgd2hlbiB3ZQorICAgICAgICAgIGRpZG4ndCBoYXZlIHRoZSBpbnRyaW5zaWNz
LgorICAgICAgICAKKyAgICAgICAgLSBSZW1vdmUgdGhlIG90aGVyIGV4cGVyaW1lbnRhbCBPU1Ig
b3B0aW9ucyAodXNlTExWTU9TUkV4aXRJbnRyaW5zaWMsCisgICAgICAgICAgZnRsVHJhcHNPbk9T
UkV4aXQsIGFuZCBGVExPU1JFeGl0T21pdHNNYXJzaGFsbGluZykuCisgICAgICAgIAorICAgICAg
ICAtIFJlbW92ZSBMb3dlckRGR1RvTExWTSdzIHVzZSBvZiB0aGUgRXhpdFRodW5rR2VuZXJhdG9y
IHNpbmNlIHdlIGRvbid0IG5lZWQgdG8gZ2VuZXJhdGUKKyAgICAgICAgICB0aGUgZXhpdCB0aHVu
a3MgdW50aWwgYWZ0ZXIgd2UgcGFyc2UgdGhlIHN0YWNrbWFwcy4KKyAgICAgICAgCisgICAgICAg
IC0gUmVtb3ZlIGFsbCBvZiB0aGUgZXhpdCB0aHVuayBhbmQgY29tcGlsZXIgY29kZSBmb3IgdGhl
IG5vLXN0YWNrbWFwcyBjYXNlLgorCisgICAgICAgICogZGZnL0RGR0RyaXZlci5jcHA6CisgICAg
ICAgIChKU0M6OkRGRzo6Y29tcGlsZUltcGwpOgorICAgICAgICAqIGZ0bC9GVExDb21waWxlLmNw
cDoKKyAgICAgICAgKEpTQzo6RlRMOjptbUFsbG9jYXRlRGF0YVNlY3Rpb24pOgorICAgICAgICAq
IGZ0bC9GVExFeGl0VGh1bmtHZW5lcmF0b3IuY3BwOgorICAgICAgICAoSlNDOjpGVEw6OkV4aXRU
aHVua0dlbmVyYXRvcjo6ZW1pdFRodW5rKToKKyAgICAgICAgKiBmdGwvRlRMSW50cmluc2ljUmVw
b3NpdG9yeS5oOgorICAgICAgICAqIGZ0bC9GVExMb2NhdGlvbi5jcHA6CisgICAgICAgIChKU0M6
OkZUTDo6TG9jYXRpb246OmZvclN0YWNrbWFwcyk6CisgICAgICAgICogZnRsL0ZUTExvd2VyREZH
VG9MTFZNLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6TG93ZXJERkdU
b0xMVk0pOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpsb3dlcik6CisgICAg
ICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmNvbXBpbGVHZXRCeUlkKToKKyAgICAgICAg
KEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6Y29tcGlsZUludmFsaWRhdGlvblBvaW50KToKKyAg
ICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6YXBwZW5kT1NSRXhpdCk6CisgICAgICAg
IChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmVtaXRPU1JFeGl0Q2FsbCk6CisgICAgICAgIChK
U0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmNhbGxTdGFja21hcCk6CisgICAgICAgIChKU0M6OkZU
TDo6TG93ZXJERkdUb0xMVk06OmFkZEV4aXRBcmd1bWVudEZvck5vZGUpOgorICAgICAgICAqIGZ0
bC9GVExPU1JFeGl0Q29tcGlsYXRpb25JbmZvLmg6CisgICAgICAgIChKU0M6OkZUTDo6T1NSRXhp
dENvbXBpbGF0aW9uSW5mbzo6T1NSRXhpdENvbXBpbGF0aW9uSW5mbyk6CisgICAgICAgICogZnRs
L0ZUTE9TUkV4aXRDb21waWxlci5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6Y29tcGlsZVN0dWIp
OgorICAgICAgICAoSlNDOjpGVEw6OmNvbXBpbGVGVExPU1JFeGl0KToKKyAgICAgICAgKiBmdGwv
RlRMU3RhY2tNYXBzLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpTdGFja01hcHM6OkxvY2F0aW9u
OjpwYXJzZSk6CisgICAgICAgIChKU0M6OkZUTDo6U3RhY2tNYXBzOjpwYXJzZSk6CisgICAgICAg
IChXVEY6OnByaW50SW50ZXJuYWwpOgorICAgICAgICAqIGZ0bC9GVExTdGFja01hcHMuaDoKKyAg
ICAgICAgKiBmdGwvRlRMVGh1bmtzLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpvc3JFeGl0R2Vu
ZXJhdGlvblRodW5rR2VuZXJhdG9yKToKKyAgICAgICAgKiBmdGwvRlRMVGh1bmtzLmg6CisgICAg
ICAgIChKU0M6OkZUTDo6VGh1bmtzOjpnZXRPU1JFeGl0R2VuZXJhdGlvblRodW5rKToKKyAgICAg
ICAgKiBydW50aW1lL09wdGlvbnMuaDoKKwogMjAxMy0xMS0wMiAgUGF0cmljayBHYW5zdGVyZXIg
IDxwYXJvZ2FAd2Via2l0Lm9yZz4KIAogICAgICAgICBGaXggTVNWQyB3YXJuaW5nIGFib3V0IHVu
YXJ5IG1pbnVzIG9wZXJhdG9yCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Ry
aXZlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEcml2
ZXIuY3BwCShyZXZpc2lvbiAxNTg1MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0RyaXZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg1LDkgKzg1LDYgQEAgc3RhdGljIENvbXBp
bGF0aW9uUmVzdWx0IGNvbXBpbGVJbXBsKAogICAgIHZtLmdldENUSVN0dWIobGlua0Nsb3N1cmVD
YWxsVGh1bmtHZW5lcmF0b3IpOwogICAgIHZtLmdldENUSVN0dWIodmlydHVhbENhbGxUaHVua0dl
bmVyYXRvcik7CiAgICAgdm0uZ2V0Q1RJU3R1Yih2aXJ0dWFsQ29uc3RydWN0VGh1bmtHZW5lcmF0
b3IpOwotI2lmIEVOQUJMRShGVExfSklUKQotICAgIHZtLmdldENUSVN0dWIoRlRMOjpvc3JFeGl0
R2VuZXJhdGlvbldpdGhvdXRTdGFja01hcFRodW5rR2VuZXJhdG9yKTsKLSNlbmRpZgogICAgIAog
ICAgIFJlZlB0cjxQbGFuPiBwbGFuID0gYWRvcHRSZWYoCiAgICAgICAgIG5ldyBQbGFuKGNvZGVC
bG9jaywgbW9kZSwgb3NyRW50cnlCeXRlY29kZUluZGV4LCBtdXN0SGFuZGxlVmFsdWVzKSk7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENvbXBpbGUuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ29tcGlsZS5jcHAJKHJldmlzaW9uIDE1
ODUxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ29tcGlsZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTc4LDcgKzc4LDcgQEAgc3RhdGljIHVpbnQ4X3QqIG1tQWxsb2NhdGVEYXRh
U2VjdGlvbigKICAgICBSZWZDb3VudGVkQXJyYXk8TFNlY3Rpb25Xb3JkPiBzZWN0aW9uKAogICAg
ICAgICAoc2l6ZSArIHNpemVvZihMU2VjdGlvbldvcmQpIC0gMSkgLyBzaXplb2YoTFNlY3Rpb25X
b3JkKSk7CiAgICAgCi0gICAgaWYgKCFzdHJjbXAoc2VjdGlvbk5hbWUsICJfX2pzX3N0YWNrbWFw
cyIpKQorICAgIGlmICghc3RyY21wKHNlY3Rpb25OYW1lLCAiX19sbHZtX3N0YWNrbWFwcyIpKQog
ICAgICAgICBzdGF0ZS5zdGFja21hcHNTZWN0aW9uID0gc2VjdGlvbjsKICAgICBlbHNlIHsKICAg
ICAgICAgc3RhdGUuaml0Q29kZS0+YWRkRGF0YVNlY3Rpb24oc2VjdGlvbik7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEV4aXRUaHVua0dlbmVyYXRvci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExFeGl0VGh1bmtHZW5lcmF0b3IuY3Bw
CShyZXZpc2lvbiAxNTg1MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEV4aXRU
aHVua0dlbmVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUxLDEwICs1MSw3IEBAIHZvaWQg
RXhpdFRodW5rR2VuZXJhdG9yOjplbWl0VGh1bmsodW5zaWcKICAgICBPU1JFeGl0Q29tcGlsYXRp
b25JbmZvJiBpbmZvID0gbV9zdGF0ZS5maW5hbGl6ZXItPm9zckV4aXRbaW5kZXhdOwogICAgIAog
ICAgIGluZm8ubV90aHVua0xhYmVsID0gbGFiZWwoKTsKLSAgICBpZiAoT3B0aW9uczo6ZnRsVXNl
c1N0YWNrbWFwcygpKQotICAgICAgICBwdXNoKFRydXN0ZWRJbW0zMihpbmRleCkpOwotICAgIGVs
c2UKLSAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoaW5kZXgpLCBHUFJJbmZvOjpub25BcmdHUFIw
KTsKKyAgICBwdXNoKFRydXN0ZWRJbW0zMihpbmRleCkpOwogICAgIGluZm8ubV90aHVua0p1bXAg
PSBwYXRjaGFibGVKdW1wKCk7CiAgICAgCiAgICAgbV9kaWRUaGluZ3MgPSB0cnVlOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExJbnRyaW5zaWNSZXBvc2l0b3J5LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExJbnRyaW5zaWNSZXBvc2l0b3J5
LmgJKHJldmlzaW9uIDE1ODUxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSW50
cmluc2ljUmVwb3NpdG9yeS5oCSh3b3JraW5nIGNvcHkpCkBAIC00NCw4ICs0NCw4IEBAIG5hbWVz
cGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKICAgICBtYWNybyhtdWxXaXRoT3ZlcmZsb3c2NCwg
Imxsdm0uc211bC53aXRoLm92ZXJmbG93Lmk2NCIsIGZ1bmN0aW9uVHlwZShzdHJ1Y3RUeXBlKG1f
Y29udGV4dCwgaW50NjQsIGJvb2xlYW4pLCBpbnQ2NCwgaW50NjQpKSBcCiAgICAgbWFjcm8oc3Vi
V2l0aE92ZXJmbG93MzIsICJsbHZtLnNzdWIud2l0aC5vdmVyZmxvdy5pMzIiLCBmdW5jdGlvblR5
cGUoc3RydWN0VHlwZShtX2NvbnRleHQsIGludDMyLCBib29sZWFuKSwgaW50MzIsIGludDMyKSkg
XAogICAgIG1hY3JvKHN1YldpdGhPdmVyZmxvdzY0LCAibGx2bS5zc3ViLndpdGgub3ZlcmZsb3cu
aTY0IiwgZnVuY3Rpb25UeXBlKHN0cnVjdFR5cGUobV9jb250ZXh0LCBpbnQ2NCwgYm9vbGVhbiks
IGludDY0LCBpbnQ2NCkpIFwKLSAgICBtYWNybyh3ZWJraXRQYXRjaHBvaW50SW50NjQsICJsbHZt
LndlYmtpdC5wYXRjaHBvaW50Lmk2NCIsIGZ1bmN0aW9uVHlwZShpbnQ2NCwgaW50MzIsIGludDMy
LCByZWY4LCBpbnQzMiwgVmFyaWFkaWMpKSBcCi0gICAgbWFjcm8od2Via2l0U3RhY2ttYXAsICJs
bHZtLndlYmtpdC5zdGFja21hcCIsIGZ1bmN0aW9uVHlwZSh2b2lkVHlwZSwgaW50MzIsIGludDMy
LCBWYXJpYWRpYykpIFwKKyAgICBtYWNybyhwYXRjaHBvaW50SW50NjQsICJsbHZtLmV4cGVyaW1l
bnRhbC5wYXRjaHBvaW50Lmk2NCIsIGZ1bmN0aW9uVHlwZShpbnQ2NCwgaW50MzIsIGludDMyLCBy
ZWY4LCBpbnQzMiwgVmFyaWFkaWMpKSBcCisgICAgbWFjcm8oc3RhY2ttYXAsICJsbHZtLmV4cGVy
aW1lbnRhbC5zdGFja21hcCIsIGZ1bmN0aW9uVHlwZSh2b2lkVHlwZSwgaW50MzIsIGludDMyLCBW
YXJpYWRpYykpIFwKICAgICBtYWNybyh0cmFwLCAibGx2bS50cmFwIiwgZnVuY3Rpb25UeXBlKHZv
aWRUeXBlKSkgXAogICAgIG1hY3JvKG9zckV4aXQsICJ3ZWJraXRfb3NyX2V4aXQiLCBmdW5jdGlv
blR5cGUodm9pZFR5cGUsIGJvb2xlYW4sIGludDMyLCBWYXJpYWRpYykpCiAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG9jYXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG9jYXRpb24uY3BwCShyZXZpc2lvbiAxNTg1MTApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvY2F0aW9uLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzksOSArMzksMTEgQEAgTG9jYXRpb24gTG9jYXRpb246OmZvclN0YWNrbWFwcyhjb25z
dCBTdAogewogICAgIHN3aXRjaCAobG9jYXRpb24ua2luZCkgewogICAgIGNhc2UgU3RhY2tNYXBz
OjpMb2NhdGlvbjo6VW5wcm9jZXNzZWQ6Ci0gICAgICAgIHJldHVybiBMb2NhdGlvbigpOworICAg
ICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBicmVhazsKICAgICAg
ICAgCiAgICAgY2FzZSBTdGFja01hcHM6OkxvY2F0aW9uOjpSZWdpc3RlcjoKKyAgICBjYXNlIFN0
YWNrTWFwczo6TG9jYXRpb246OkRpcmVjdDoKICAgICAgICAgcmV0dXJuIGZvclJlZ2lzdGVyKGxv
Y2F0aW9uLmR3YXJmUmVnTnVtLCBsb2NhdGlvbi5vZmZzZXQpOwogICAgICAgICAKICAgICBjYXNl
IFN0YWNrTWFwczo6TG9jYXRpb246OkluZGlyZWN0OgpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAJKHJldmlzaW9uIDE1ODUxMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zMiw3ICszMiw2IEBACiAjaW5jbHVkZSAiREZHQWJzdHJhY3RJbnRlcnByZXRl
cklubGluZXMuaCIKICNpbmNsdWRlICJERkdJblBsYWNlQWJzdHJhY3RTdGF0ZS5oIgogI2luY2x1
ZGUgIkZUTEFic3RyYWN0SGVhcFJlcG9zaXRvcnkuaCIKLSNpbmNsdWRlICJGVExFeGl0VGh1bmtH
ZW5lcmF0b3IuaCIKICNpbmNsdWRlICJGVExGb3JPU1JFbnRyeUpJVENvZGUuaCIKICNpbmNsdWRl
ICJGVExGb3JtYXR0ZWRWYWx1ZS5oIgogI2luY2x1ZGUgIkZUTElubGluZUNhY2hlU2l6ZS5oIgpA
QCAtNTMsMTEgKzUyLDYgQEAgdXNpbmcgbmFtZXNwYWNlIERGRzsKIAogc3RhdGljIGludCBjb21w
aWxlQ291bnRlcjsKIAotc3RhdGljIGJvb2wgZ2VuZXJhdGVFeGl0VGh1bmtzKCkKLXsKLSAgICBy
ZXR1cm4gIU9wdGlvbnM6OnVzZUxMVk1PU1JFeGl0SW50cmluc2ljKCkgJiYgIU9wdGlvbnM6OmZ0
bFVzZXNTdGFja21hcHMoKTsKLX0KLQogLy8gVXNpbmcgdGhpcyBpbnN0ZWFkIG9mIHR5cGVDaGVj
aygpIGhlbHBzIHRvIHJlZHVjZSB0aGUgbG9hZCBvbiBMTFZNLCBieSBjcmVhdGluZwogLy8gc2ln
bmlmaWNhbnRseSBsZXNzIGRlYWQgY29kZS4KICNkZWZpbmUgRlRMX1RZUEVfQ0hFQ0sobG93VmFs
dWUsIGhpZ2hWYWx1ZSwgdHlwZXNQYXNzZWRUaHJvdWdoLCBmYWlsQ29uZGl0aW9uKSBkbyB7IFwK
QEAgLTc4LDcgKzcyLDYgQEAgcHVibGljOgogICAgICAgICAsIG1fb3V0KHN0YXRlLmNvbnRleHQp
CiAgICAgICAgICwgbV92YWx1ZVNvdXJjZXMoT3BlcmFuZHNMaWtlLCBzdGF0ZS5ncmFwaC5ibG9j
aygwKS0+dmFyaWFibGVzQXRIZWFkKQogICAgICAgICAsIG1fbGFzdFNldE9wZXJhbmQoVmlydHVh
bFJlZ2lzdGVyKCkpCi0gICAgICAgICwgbV9leGl0VGh1bmtHZW5lcmF0b3Ioc3RhdGUpCiAgICAg
ICAgICwgbV9zdGF0ZShzdGF0ZS5ncmFwaCkKICAgICAgICAgLCBtX2ludGVycHJldGVyKHN0YXRl
LmdyYXBoLCBtX3N0YXRlKQogICAgICAgICAsIG1fc3RhY2ttYXBJRHMoMCkKQEAgLTExMCw4ICsx
MDMsNiBAQCBwdWJsaWM6CiAgICAgICAgIG1fb3V0LmFwcGVuZFRvKG1fcHJvbG9ndWUpOwogICAg
ICAgICBjcmVhdGVQaGlWYXJpYWJsZXMoKTsKICAgICAgICAgCi0gICAgICAgIG1faW5pdGlhbGl6
YXRpb24gPSBhcHBlbmRCYXNpY0Jsb2NrKG1fZnRsU3RhdGUuY29udGV4dCwgbV9mdGxTdGF0ZS5m
dW5jdGlvbik7Ci0KICAgICAgICAgbV9jYWxsRnJhbWUgPSBtX291dC5wYXJhbSgwKTsKICAgICAg
ICAgbV90YWdUeXBlTnVtYmVyID0gbV9vdXQuY29uc3RJbnQ2NChUYWdUeXBlTnVtYmVyKTsKICAg
ICAgICAgbV90YWdNYXNrID0gbV9vdXQuY29uc3RJbnQ2NChUYWdNYXNrKTsKQEAgLTEyMywxNCAr
MTE0LDE0IEBAIHB1YmxpYzoKICAgICAgICAgICAgIG1fYmxvY2tzLmFkZChtX2hpZ2hCbG9jaywg
RlRMX05FV19CTE9DSyhtX291dCwgKCJCbG9jayAiLCAqbV9oaWdoQmxvY2spKSk7CiAgICAgICAg
IH0KICAgICAgICAgCisgICAgICAgIG1fb3V0LmFwcGVuZFRvKG1fcHJvbG9ndWUpOworICAgICAg
ICBtX291dC5qdW1wKGxvd0Jsb2NrKG1fZ3JhcGguYmxvY2soMCkpKTsKKyAgICAgICAgCiAgICAg
ICAgIFZlY3RvcjxCYXNpY0Jsb2NrKj4gZGVwdGhGaXJzdDsKICAgICAgICAgbV9ncmFwaC5nZXRC
bG9ja3NJbkRlcHRoRmlyc3RPcmRlcihkZXB0aEZpcnN0KTsKICAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IGRlcHRoRmlyc3Quc2l6ZSgpOyArK2kpCiAgICAgICAgICAgICBjb21waWxl
QmxvY2soZGVwdGhGaXJzdFtpXSk7CiAgICAgICAgIAotICAgICAgICAvLyBBbmQgbm93IGNvbXBs
ZXRlIHRoZSBpbml0aWFsaXphdGlvbiBibG9jay4KLSAgICAgICAgbGlua09TUkV4aXRzQW5kQ29t
cGxldGVJbml0aWFsaXphdGlvbkJsb2NrcygpOwotCiAgICAgICAgIGlmIChPcHRpb25zOjpkdW1w
TExWTUlSKCkpCiAgICAgICAgICAgICBkdW1wTW9kdWxlKG1fZnRsU3RhdGUubW9kdWxlKTsKICAg
ICAgICAgCkBAIC0xMjU4LDE1ICsxMjQ5LDEwIEBAIHByaXZhdGU6CiAgICAgICAgIExWYWx1ZSBi
YXNlID0gbG93Q2VsbChtX25vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgU3RyaW5nSW1wbCogdWlk
ID0gbV9ncmFwaC5pZGVudGlmaWVycygpW21fbm9kZS0+aWRlbnRpZmllck51bWJlcigpXTsKIAot
ICAgICAgICBpZiAoIU9wdGlvbnM6OmZ0bFVzZXNTdGFja21hcHMoKSkgewotICAgICAgICAgICAg
c2V0SlNWYWx1ZSh2bUNhbGwobV9vdXQub3BlcmF0aW9uKG9wZXJhdGlvbkdldEJ5SWQpLCBtX2Nh
bGxGcmFtZSwgbV9vdXQuaW50UHRyWmVybywgYmFzZSwgbV9vdXQuY29uc3RJbnRQdHIodWlkKSkp
OwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KICAgICAgICAgLy8gQXJndW1lbnRz
OiBpZCwgYnl0ZXMsIHRhcmdldCwgbnVtQXJncywgYXJncy4uLgogICAgICAgICB1bnNpZ25lZCBz
dGFja21hcElEID0gbV9zdGFja21hcElEcysrOwogICAgICAgICBzZXRKU1ZhbHVlKG1fb3V0LmNh
bGwoCi0gICAgICAgICAgICBtX291dC53ZWJraXRQYXRjaHBvaW50SW50NjRJbnRyaW5zaWMoKSwK
KyAgICAgICAgICAgIG1fb3V0LnBhdGNocG9pbnRJbnQ2NEludHJpbnNpYygpLAogICAgICAgICAg
ICAgbV9vdXQuY29uc3RJbnQzMihzdGFja21hcElEKSwgbV9vdXQuY29uc3RJbnQzMihzaXplT2ZH
ZXRCeUlkKCkpLAogICAgICAgICAgICAgY29uc3ROdWxsKG1fb3V0LnJlZjgpLCBtX291dC5jb25z
dEludDMyKDIpLCBtX2NhbGxGcmFtZSwgYmFzZSkpOwogICAgICAgICAKQEAgLTIxMzYsMTIgKzIx
MjIsNiBAQCBwcml2YXRlOgogICAgIAogICAgIHZvaWQgY29tcGlsZUludmFsaWRhdGlvblBvaW50
KCkKICAgICB7Ci0gICAgICAgIGlmICghT3B0aW9uczo6ZnRsVXNlc1N0YWNrbWFwcygpKSB7Ci0g
ICAgICAgICAgICAvLyBXZSBzaWxlbnRseSBkb24ndCBpbXBsZW1lbnQgaW52YWxpZGF0aW9uIHBv
aW50cyBpZiB3ZSBkb24ndCBoYXZlIHN0YWNrbWFwcy4KLSAgICAgICAgICAgIC8vIFRoaXMgaXMg
ZmluZSBzaW5jZSB0aGUgbG9uZy10ZXJtIHBsYW4gaXMgdG8gcmVxdWlyZSBzdGFja21hcHMuCi0g
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgCiAgICAgICAgIGlmICh2ZXJi
b3NlQ29tcGlsYXRpb25FbmFibGVkKCkpCiAgICAgICAgICAgICBkYXRhTG9nKCIgICAgSW52YWxp
ZGF0aW9uIHBvaW50IHdpdGggdmFsdWUgc291cmNlczogIiwgbV92YWx1ZVNvdXJjZXMsICJcbiIp
OwogICAgICAgICAKQEAgLTMzMDksMjUgKzMyODksMTAgQEAgcHJpdmF0ZToKICAgICAgICAgRXhp
dEtpbmQga2luZCwgRm9ybWF0dGVkVmFsdWUgbG93VmFsdWUsIE5vZGUqIGhpZ2hWYWx1ZSwgTFZh
bHVlIGZhaWxDb25kaXRpb24sCiAgICAgICAgIFNwZWN1bGF0aW9uRGlyZWN0aW9uIGRpcmVjdGlv
biwgRm9ybWF0dGVkVmFsdWUgcmVjb3ZlcnkpCiAgICAgewotICAgICAgICBpZiAoT3B0aW9uczo6
ZnRsVHJhcHNPbk9TUkV4aXQoKSkgewotICAgICAgICAgICAgTEJhc2ljQmxvY2sgZmFpbENhc2Ug
PSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIk9TUiBleGl0IGZhaWxDYXNlIGZvciAiLCBtX25vZGUp
KTsKLSAgICAgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IEZUTF9ORVdfQkxPQ0so
bV9vdXQsICgiT1NSIGV4aXQgY29udGludWF0aW9uIGZvciAiLCBtX25vZGUpKTsKLSAgICAgICAg
ICAgIAotICAgICAgICAgICAgbV9vdXQuYnJhbmNoKGZhaWxDb25kaXRpb24sIGZhaWxDYXNlLCBj
b250aW51YXRpb24pOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBMQmFzaWNCbG9jayBsYXN0
TmV4dCA9IG1fb3V0LmFwcGVuZFRvKGZhaWxDYXNlLCBjb250aW51YXRpb24pOwotICAgICAgICAg
ICAgbV9vdXQudHJhcCgpOwotICAgICAgICAgICAgbV9vdXQudW5yZWFjaGFibGUoKTsKLSAgICAg
ICAgICAgIAotICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4
dCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgCiAgICAgICAgIGlm
ICh2ZXJib3NlQ29tcGlsYXRpb25FbmFibGVkKCkpCiAgICAgICAgICAgICBkYXRhTG9nKCIgICAg
T1NSIGV4aXQgd2l0aCB2YWx1ZSBzb3VyY2VzOiAiLCBtX3ZhbHVlU291cmNlcywgIlxuIik7CiAg
ICAgICAgIAogICAgICAgICBBU1NFUlQobV9mdGxTdGF0ZS5qaXRDb2RlLT5vc3JFeGl0LnNpemUo
KSA9PSBtX2Z0bFN0YXRlLmZpbmFsaXplci0+b3NyRXhpdC5zaXplKCkpOwotICAgICAgICB1bnNp
Z25lZCBpbmRleCA9IG1fZnRsU3RhdGUuZmluYWxpemVyLT5vc3JFeGl0LnNpemUoKTsKICAgICAg
ICAgCiAgICAgICAgIG1fZnRsU3RhdGUuaml0Q29kZS0+b3NyRXhpdC5hcHBlbmQoT1NSRXhpdCgK
ICAgICAgICAgICAgIGtpbmQsIGxvd1ZhbHVlLmZvcm1hdCgpLCBtX2dyYXBoLm1ldGhvZE9mR2V0
dGluZ0FWYWx1ZVByb2ZpbGVGb3IoaGlnaFZhbHVlKSwKQEAgLTMzMzYsNTQgKzMzMDEsMzAgQEAg
cHJpdmF0ZToKICAgICAgICAgbV9mdGxTdGF0ZS5maW5hbGl6ZXItPm9zckV4aXQuYXBwZW5kKE9T
UkV4aXRDb21waWxhdGlvbkluZm8oKSk7CiAgICAgICAgIAogICAgICAgICBPU1JFeGl0JiBleGl0
ID0gbV9mdGxTdGF0ZS5qaXRDb2RlLT5vc3JFeGl0Lmxhc3QoKTsKLSAgICAgICAgT1NSRXhpdENv
bXBpbGF0aW9uSW5mbyYgaW5mbyA9IG1fZnRsU3RhdGUuZmluYWxpemVyLT5vc3JFeGl0Lmxhc3Qo
KTsKIAogICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IDA7CiAgICAgICAgIExCYXNpY0Js
b2NrIGNvbnRpbnVhdGlvbiA9IDA7CiAgICAgICAgIAotICAgICAgICBpZiAoIU9wdGlvbnM6OnVz
ZUxMVk1PU1JFeGl0SW50cmluc2ljKCkpIHsKLSAgICAgICAgICAgIExCYXNpY0Jsb2NrIGZhaWxD
YXNlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJPU1IgZXhpdCBmYWlsQ2FzZSBmb3IgIiwgbV9u
b2RlKSk7Ci0gICAgICAgICAgICBjb250aW51YXRpb24gPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAo
Ik9TUiBleGl0IGNvbnRpbnVhdGlvbiBmb3IgIiwgbV9ub2RlKSk7Ci0gICAgICAgICAgICAKLSAg
ICAgICAgICAgIG1fb3V0LmJyYW5jaChmYWlsQ29uZGl0aW9uLCBmYWlsQ2FzZSwgY29udGludWF0
aW9uKTsKLQotICAgICAgICAgICAgaWYgKGdlbmVyYXRlRXhpdFRodW5rcygpKSB7Ci0gICAgICAg
ICAgICAgICAgbV9vdXQuYXBwZW5kVG8obV9wcm9sb2d1ZSk7Ci0gICAgICAgICAgICAgICAgaW5m
by5tX3RodW5rQWRkcmVzc1ZhbHVlID0gYnVpbGRBbGxvY2EobV9vdXQubV9idWlsZGVyLCBtX291
dC5pbnRQdHIpOwotICAgICAgICAgICAgfQorICAgICAgICBMQmFzaWNCbG9jayBmYWlsQ2FzZSA9
IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiT1NSIGV4aXQgZmFpbENhc2UgZm9yICIsIG1fbm9kZSkp
OworICAgICAgICBjb250aW51YXRpb24gPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIk9TUiBleGl0
IGNvbnRpbnVhdGlvbiBmb3IgIiwgbV9ub2RlKSk7CiAgICAgICAgIAotICAgICAgICAgICAgbGFz
dE5leHQgPSBtX291dC5hcHBlbmRUbyhmYWlsQ2FzZSwgY29udGludWF0aW9uKTsKLSAgICAgICAg
fQorICAgICAgICBtX291dC5icmFuY2goZmFpbENvbmRpdGlvbiwgZmFpbENhc2UsIGNvbnRpbnVh
dGlvbik7CiAgICAgICAgIAotICAgICAgICBpZiAoT3B0aW9uczo6ZnRsT1NSRXhpdE9taXRzTWFy
c2hhbGxpbmcoKSkgewotICAgICAgICAgICAgbV9vdXQuY2FsbCgKLSAgICAgICAgICAgICAgICBt
X291dC5pbnRUb1B0cigKLSAgICAgICAgICAgICAgICAgICAgbV9vdXQuZ2V0KGluZm8ubV90aHVu
a0FkZHJlc3NWYWx1ZSksCi0gICAgICAgICAgICAgICAgICAgIHBvaW50ZXJUeXBlKGZ1bmN0aW9u
VHlwZShtX291dC52b2lkVHlwZSkpKSk7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgZW1p
dE9TUkV4aXRDYWxsKGZhaWxDb25kaXRpb24sIGluZGV4LCBleGl0LCBpbmZvLCBsb3dWYWx1ZSwg
ZGlyZWN0aW9uLCByZWNvdmVyeSk7CisgICAgICAgIGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8o
ZmFpbENhc2UsIGNvbnRpbnVhdGlvbik7CiAgICAgICAgIAotICAgICAgICBpZiAoIU9wdGlvbnM6
OnVzZUxMVk1PU1JFeGl0SW50cmluc2ljKCkpIHsKLSAgICAgICAgICAgIG1fb3V0LnVucmVhY2hh
YmxlKCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVh
dGlvbiwgbGFzdE5leHQpOworICAgICAgICBlbWl0T1NSRXhpdENhbGwoZXhpdCwgbG93VmFsdWUs
IGRpcmVjdGlvbiwgcmVjb3ZlcnkpOwogICAgICAgICAKLSAgICAgICAgICAgIGlmIChnZW5lcmF0
ZUV4aXRUaHVua3MoKSkKLSAgICAgICAgICAgICAgICBtX2V4aXRUaHVua0dlbmVyYXRvci5lbWl0
VGh1bmsoaW5kZXgpOwotICAgICAgICB9CisgICAgICAgIG1fb3V0LnVucmVhY2hhYmxlKCk7Cisg
ICAgICAgIAorICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsK
ICAgICB9CiAgICAgCiAgICAgdm9pZCBlbWl0T1NSRXhpdENhbGwoCi0gICAgICAgIExWYWx1ZSBm
YWlsQ29uZGl0aW9uLCB1bnNpZ25lZCBpbmRleCwgT1NSRXhpdCYgZXhpdCwgT1NSRXhpdENvbXBp
bGF0aW9uSW5mbyYgaW5mbywKLSAgICAgICAgRm9ybWF0dGVkVmFsdWUgbG93VmFsdWUsIFNwZWN1
bGF0aW9uRGlyZWN0aW9uIGRpcmVjdGlvbiwgRm9ybWF0dGVkVmFsdWUgcmVjb3ZlcnkpCisgICAg
ICAgIE9TUkV4aXQmIGV4aXQsIEZvcm1hdHRlZFZhbHVlIGxvd1ZhbHVlLCBTcGVjdWxhdGlvbkRp
cmVjdGlvbiBkaXJlY3Rpb24sCisgICAgICAgIEZvcm1hdHRlZFZhbHVlIHJlY292ZXJ5KQogICAg
IHsKICAgICAgICAgRXhpdEFyZ3VtZW50TGlzdCBhcmd1bWVudHM7CiAgICAgICAgIAotICAgICAg
ICBpZiAoT3B0aW9uczo6dXNlTExWTU9TUkV4aXRJbnRyaW5zaWMoKSkgewotICAgICAgICAgICAg
YXJndW1lbnRzLmFwcGVuZChmYWlsQ29uZGl0aW9uKTsKLSAgICAgICAgICAgIGFyZ3VtZW50cy5h
cHBlbmQobV9vdXQuY29uc3RJbnQzMihpbmRleCkpOwotICAgICAgICB9Ci0gICAgICAgIAogICAg
ICAgICBidWlsZEV4aXRBcmd1bWVudHMoZXhpdCwgYXJndW1lbnRzLCBsb3dWYWx1ZSk7CiAgICAg
ICAgIAogICAgICAgICBpZiAoZGlyZWN0aW9uID09IEZvcndhcmRTcGVjdWxhdGlvbikgewpAQCAt
MzM5MSwyNyArMzMzMiw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBleGl0LmNvbnZlcnRUb0Zv
cndhcmQobV9oaWdoQmxvY2ssIG1fbm9kZSwgbV9ub2RlSW5kZXgsIHJlY292ZXJ5LCBhcmd1bWVu
dHMpOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBpZiAoT3B0aW9uczo6dXNlTExWTU9T
UkV4aXRJbnRyaW5zaWMoKSkgewotICAgICAgICAgICAgbV9vdXQuY2FsbChtX291dC5vc3JFeGl0
SW50cmluc2ljKCksIGFyZ3VtZW50cyk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0K
LSAgICAgICAgCi0gICAgICAgIGlmIChPcHRpb25zOjpmdGxVc2VzU3RhY2ttYXBzKCkpIHsKLSAg
ICAgICAgICAgIGNhbGxTdGFja21hcChleGl0LCBhcmd1bWVudHMpOwotICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICAvLyBTbywgdGhlIHJlYWxseSBsYW1l
IHRoaW5nIGhlcmUgaXMgdGhhdCB3ZSBoYXZlIHRvIGJ1aWxkIGFuIExMVk0gZnVuY3Rpb24gdHlw
ZS4KLSAgICAgICAgLy8gQm9vby4KLSAgICAgICAgVmVjdG9yPExUeXBlLCAxNj4gYXJndW1lbnRU
eXBlczsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGFyZ3VtZW50cy5zaXplKCk7
ICsraSkKLSAgICAgICAgICAgIGFyZ3VtZW50VHlwZXMuYXBwZW5kKHR5cGVPZihhcmd1bWVudHNb
aV0pKTsKLSAgICAgICAgCi0gICAgICAgIG1fb3V0LmNhbGwoCi0gICAgICAgICAgICBtX291dC5p
bnRUb1B0cigKLSAgICAgICAgICAgICAgICBtX291dC5nZXQoaW5mby5tX3RodW5rQWRkcmVzc1Zh
bHVlKSwKLSAgICAgICAgICAgICAgICBwb2ludGVyVHlwZShmdW5jdGlvblR5cGUobV9vdXQudm9p
ZFR5cGUsIGFyZ3VtZW50VHlwZXMpKSksCi0gICAgICAgICAgICBhcmd1bWVudHMpOworICAgICAg
ICBjYWxsU3RhY2ttYXAoZXhpdCwgYXJndW1lbnRzKTsKICAgICB9CiAgICAgCiAgICAgdm9pZCBi
dWlsZEV4aXRBcmd1bWVudHMoCkBAIC0zNDU5LDcgKzMzODAsNyBAQCBwcml2YXRlOgogICAgICAg
ICBhcmd1bWVudHMuaW5zZXJ0KDAsIG1fb3V0LmNvbnN0SW50MzIoTWFjcm9Bc3NlbWJsZXI6Om1h
eEp1bXBSZXBsYWNlbWVudFNpemUoKSkpOwogICAgICAgICBhcmd1bWVudHMuaW5zZXJ0KDAsIG1f
b3V0LmNvbnN0SW50MzIoZXhpdC5tX3N0YWNrbWFwSUQpKTsKICAgICAgICAgCi0gICAgICAgIG1f
b3V0LmNhbGwobV9vdXQud2Via2l0U3RhY2ttYXBJbnRyaW5zaWMoKSwgYXJndW1lbnRzKTsKKyAg
ICAgICAgbV9vdXQuY2FsbChtX291dC5zdGFja21hcEludHJpbnNpYygpLCBhcmd1bWVudHMpOwog
ICAgIH0KICAgICAKICAgICB2b2lkIGFkZEV4aXRBcmd1bWVudEZvck5vZGUoCkBAIC0zNTM4LDEx
ICszNDU5LDcgQEAgcHJpdmF0ZToKICAgICAgICAgCiAgICAgICAgIHZhbHVlID0gbV9ib29sZWFu
VmFsdWVzLmdldChub2RlKTsKICAgICAgICAgaWYgKGlzVmFsaWQodmFsdWUpKSB7Ci0gICAgICAg
ICAgICBMVmFsdWUgdmFsdWVUb1Bhc3M7Ci0gICAgICAgICAgICBpZiAoT3B0aW9uczo6ZnRsVXNl
c1N0YWNrbWFwcygpKQotICAgICAgICAgICAgICAgIHZhbHVlVG9QYXNzID0gbV9vdXQuemVyb0V4
dCh2YWx1ZS52YWx1ZSgpLCBtX291dC5pbnQzMik7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAg
ICAgICAgICAgdmFsdWVUb1Bhc3MgPSB2YWx1ZS52YWx1ZSgpOworICAgICAgICAgICAgTFZhbHVl
IHZhbHVlVG9QYXNzID0gbV9vdXQuemVyb0V4dCh2YWx1ZS52YWx1ZSgpLCBtX291dC5pbnQzMik7
CiAgICAgICAgICAgICBhZGRFeGl0QXJndW1lbnQoZXhpdCwgYXJndW1lbnRzLCBpbmRleCwgVmFs
dWVGb3JtYXRCb29sZWFuLCB2YWx1ZVRvUGFzcyk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgIH0KQEAgLTM1OTEsNDQgKzM1MDgsNiBAQCBwcml2YXRlOgogICAgICAgICBhcmd1bWVudHMu
YXBwZW5kKHZhbHVlKTsKICAgICB9CiAgICAgCi0gICAgdm9pZCBsaW5rT1NSRXhpdHNBbmRDb21w
bGV0ZUluaXRpYWxpemF0aW9uQmxvY2tzKCkKLSAgICB7Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVy
Q29kZVJlZiBvc3JFeGl0VGh1bmsgPQotICAgICAgICAgICAgdm0oKS5nZXRDVElTdHViKG9zckV4
aXRHZW5lcmF0aW9uV2l0aG91dFN0YWNrTWFwVGh1bmtHZW5lcmF0b3IpOwotICAgICAgICBDb2Rl
TG9jYXRpb25MYWJlbCB0YXJnZXQgPSBDb2RlTG9jYXRpb25MYWJlbChvc3JFeGl0VGh1bmsuY29k
ZSgpKTsKLSAgICAgICAgCi0gICAgICAgIG1fb3V0LmFwcGVuZFRvKG1fcHJvbG9ndWUpOwotICAg
ICAgICBtX291dC5qdW1wKG1faW5pdGlhbGl6YXRpb24pOwotICAgICAgICAKLSAgICAgICAgbV9v
dXQuYXBwZW5kVG8obV9pbml0aWFsaXphdGlvbik7Ci0gICAgICAgIAotICAgICAgICBpZiAobV9l
eGl0VGh1bmtHZW5lcmF0b3IuZGlkVGhpbmdzKCkpIHsKLSAgICAgICAgICAgIE93blB0cjxMaW5r
QnVmZmVyPiBsaW5rQnVmZmVyID0gYWRvcHRQdHIobmV3IExpbmtCdWZmZXIoCi0gICAgICAgICAg
ICAgICAgdm0oKSwgJm1fZXhpdFRodW5rR2VuZXJhdG9yLCBtX2Z0bFN0YXRlLmdyYXBoLm1fY29k
ZUJsb2NrLAotICAgICAgICAgICAgICAgIEpJVENvbXBpbGF0aW9uTXVzdFN1Y2NlZWQpKTsKLSAg
ICAgICAgCi0gICAgICAgICAgICBBU1NFUlQobV9mdGxTdGF0ZS5maW5hbGl6ZXItPm9zckV4aXQu
c2l6ZSgpID09IG1fZnRsU3RhdGUuaml0Q29kZS0+b3NyRXhpdC5zaXplKCkpOwotICAgICAgICAK
LSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2Z0bFN0YXRlLmZpbmFsaXpl
ci0+b3NyRXhpdC5zaXplKCk7ICsraSkgewotICAgICAgICAgICAgICAgIE9TUkV4aXRDb21waWxh
dGlvbkluZm8mIGluZm8gPSBtX2Z0bFN0YXRlLmZpbmFsaXplci0+b3NyRXhpdFtpXTsKLSAgICAg
ICAgICAgICAgICBPU1JFeGl0JiBleGl0ID0gbV9mdGxTdGF0ZS5qaXRDb2RlLT5vc3JFeGl0W2ld
OwotICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgbGlua0J1ZmZlci0+bGluayhpbmZvLm1f
dGh1bmtKdW1wLCB0YXJnZXQpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgbV9vdXQu
c2V0KAotICAgICAgICAgICAgICAgICAgICBtX291dC5jb25zdEludFB0cigKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGxpbmtCdWZmZXItPmxvY2F0aW9uT2YoaW5mby5tX3RodW5rTGFiZWwpLmV4
ZWN1dGFibGVBZGRyZXNzKCkpLAotICAgICAgICAgICAgICAgICAgICBpbmZvLm1fdGh1bmtBZGRy
ZXNzVmFsdWUpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgZXhpdC5tX3BhdGNoYWJs
ZUNvZGVPZmZzZXQgPSBsaW5rQnVmZmVyLT5vZmZzZXRPZihpbmZvLm1fdGh1bmtKdW1wKTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgICAgICBtX2Z0bFN0YXRlLmZpbmFsaXplci0+
ZXhpdFRodW5rc0xpbmtCdWZmZXIgPSBsaW5rQnVmZmVyLnJlbGVhc2UoKTsKLSAgICAgICAgfQot
Ci0gICAgICAgIG1fb3V0Lmp1bXAobG93QmxvY2sobV9ncmFwaC5ibG9jaygwKSkpOwotICAgIH0K
LSAgICAKICAgICB2b2lkIG9ic2VydmVNb3ZIaW50KE5vZGUqIG5vZGUpCiAgICAgewogICAgICAg
ICBBU1NFUlQobm9kZS0+Y29udGFpbnNNb3ZIaW50KCkpOwpAQCAtMzc4Miw3ICszNjYxLDYgQEAg
cHJpdmF0ZToKICAgICBPdXRwdXQgbV9vdXQ7CiAgICAgCiAgICAgTEJhc2ljQmxvY2sgbV9wcm9s
b2d1ZTsKLSAgICBMQmFzaWNCbG9jayBtX2luaXRpYWxpemF0aW9uOwogICAgIEhhc2hNYXA8QmFz
aWNCbG9jayosIExCYXNpY0Jsb2NrPiBtX2Jsb2NrczsKICAgICAKICAgICBMVmFsdWUgbV9jYWxs
RnJhbWU7CkBAIC0zODAyLDcgKzM2ODAsNiBAQCBwcml2YXRlOgogICAgIAogICAgIE9wZXJhbmRz
PFZhbHVlU291cmNlPiBtX3ZhbHVlU291cmNlczsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgbV9sYXN0
U2V0T3BlcmFuZDsKLSAgICBFeGl0VGh1bmtHZW5lcmF0b3IgbV9leGl0VGh1bmtHZW5lcmF0b3I7
CiAgICAgCiAgICAgSW5QbGFjZUFic3RyYWN0U3RhdGUgbV9zdGF0ZTsKICAgICBBYnN0cmFjdElu
dGVycHJldGVyPEluUGxhY2VBYnN0cmFjdFN0YXRlPiBtX2ludGVycHJldGVyOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0Q29tcGlsYXRpb25JbmZvLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0Q29tcGlsYXRpb25J
bmZvLmgJKHJldmlzaW9uIDE1ODUxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
T1NSRXhpdENvbXBpbGF0aW9uSW5mby5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNywxNSArMzcsMTMg
QEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgewogCiBzdHJ1Y3QgT1NSRXhpdENvbXBp
bGF0aW9uSW5mbyB7CiAgICAgT1NSRXhpdENvbXBpbGF0aW9uSW5mbygpCi0gICAgICAgIDogbV90
aHVua0FkZHJlc3NWYWx1ZSgwKQotICAgICAgICAsIG1faXNJbnZhbGlkYXRpb25Qb2ludChmYWxz
ZSkKKyAgICAgICAgOiBtX2lzSW52YWxpZGF0aW9uUG9pbnQoZmFsc2UpCiAgICAgewogICAgIH0K
ICAgICAKICAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgbV90aHVua0xhYmVsOwogICAgIE1hY3Jv
QXNzZW1ibGVyOjpQYXRjaGFibGVKdW1wIG1fdGh1bmtKdW1wOwogICAgIENvZGVMb2NhdGlvbkxh
YmVsIG1fdGh1bmtBZGRyZXNzOwotICAgIExWYWx1ZSBtX3RodW5rQWRkcmVzc1ZhbHVlOwogICAg
IGJvb2wgbV9pc0ludmFsaWRhdGlvblBvaW50OwogfTsKIApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExPU1JFeGl0Q29tcGlsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdENvbXBpbGVyLmNwcAkocmV2aXNpb24gMTU4NTEw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0Q29tcGlsZXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC00MiwxMSArNDIsNyBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IEZUTCB7CiAKIHVzaW5nIG5hbWVzcGFjZSBERkc7CiAKLS8vIFRoaXMgaW1wbGVtZW50cyB0d28g
Zmxhdm9ycyBvZiBPU1IgZXhpdDogb25lIHRoYXQgaW52b2x2ZXMgaGF2aW5nIExMVk0gaW50cmlu
c2ljcyB0byBoZWxwCi0vLyBPU1IgZXhpdCwgYW5kIG9uZSB0aGF0IGRvZXNuJ3QuIFRoZSBvbmUg
dGhhdCBkb2Vzbid0IHdpbGwgZ2V0IGtpbGxlZCBvZmYsIHNvIHdlIGRvbid0IGF0dGVtcHQKLS8v
IHRvIHNoYXJlIGNvZGUgYmV0d2VlbiB0aGUgdHdvLgotCi1zdGF0aWMgdm9pZCBjb21waWxlU3R1
YldpdGhPU1JFeGl0U3RhY2ttYXAoCitzdGF0aWMgdm9pZCBjb21waWxlU3R1YigKICAgICB1bnNp
Z25lZCBleGl0SUQsIEpJVENvZGUqIGppdENvZGUsIE9TUkV4aXQmIGV4aXQsIFZNKiB2bSwgQ29k
ZUJsb2NrKiBjb2RlQmxvY2spCiB7CiAgICAgU3RhY2tNYXBzOjpSZWNvcmQqIHJlY29yZDsKQEAg
LTE3OCwxNjkgKzE3NCw2IEBAIHN0YXRpYyB2b2lkIGNvbXBpbGVTdHViV2l0aE9TUkV4aXRTdGFj
a20KICAgICAgICAgICAgIHRvQ1N0cmluZygqcmVjb3JkKS5kYXRhKCkpKTsKIH0KIAotc3RhdGlj
IHZvaWQgY29tcGlsZVN0dWJXaXRob3V0T1NSRXhpdFN0YWNrbWFwKAotICAgIHVuc2lnbmVkIGV4
aXRJRCwgT1NSRXhpdCYgZXhpdCwgVk0qIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaykKLXsKLSAg
ICBDQ2FsbEhlbHBlcnMgaml0KHZtLCBjb2RlQmxvY2spOwotICAgIAotICAgIC8vIE1ha2Ugb3Vy
c2VsdmVzIGxvb2sgbGlrZSBhIHJlYWwgQyBmdW5jdGlvbi4KLSAgICBqaXQucHVzaChNYWNyb0Fz
c2VtYmxlcjo6ZnJhbWVQb2ludGVyUmVnaXN0ZXIpOwotICAgIGppdC5tb3ZlKE1hY3JvQXNzZW1i
bGVyOjpzdGFja1BvaW50ZXJSZWdpc3RlciwgTWFjcm9Bc3NlbWJsZXI6OmZyYW1lUG9pbnRlclJl
Z2lzdGVyKTsKLSAgICAKLSAgICAvLyBUaGlzIGlzIGFjdHVhbGx5IGZhaXJseSBlYXN5LCBldmVu
IHRob3VnaCBpdCBpcyBob3JyaWJseSBncm9zcy4gV2Uga25vdyB0aGF0Ci0gICAgLy8gTExWTSB3
b3VsZCBoYXZlIHBhc3NlcyB1cyBhbGwgb2YgdGhlIHN0YXRlIHZpYSBhcmd1bWVudHMuIFdlIGtu
b3cgaG93IHRvIGdldAotICAgIC8vIHRoZSBhcmd1bWVudHMuIEFuZCwgd2Uga25vdyBob3cgdG8g
cG9wIHN0YWNrIGJhY2sgdG8gdGhlIEpJVCBzdGFjayBmcmFtZSwgc29ydAotICAgIC8vIG9mOiB3
ZSBrbm93IHRoYXQgaXQncyB0d28gZnJhbWVzIGJlbmVhdGggdXMuIFRoaXMgaXMgdGVycmlibGUg
YW5kIEkgZmVlbAotICAgIC8vIGFzaGFtZWQgb2YgaXQsIGJ1dCBpdCB3aWxsIHdvcmsgZm9yIG5v
dy4KLSAgICAKLSAgICBDQXJndW1lbnRHZXR0ZXIgYXJndW1lbnRzKGppdCwgMik7Ci0gICAgCi0g
ICAgLy8gRmlyc3QgcmVjb3ZlciBvdXIgY2FsbCBmcmFtZSBhbmQgdGFnIHRoaW5naWVzLgotICAg
IGFyZ3VtZW50cy5sb2FkTmV4dFB0cihHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlcik7Ci0gICAg
aml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW02NChUYWdUeXBlTnVtYmVyKSwgR1BS
SW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKTsKLSAgICBqaXQubW92ZShNYWNyb0Fzc2VtYmxl
cjo6VHJ1c3RlZEltbTY0KFRhZ01hc2spLCBHUFJJbmZvOjp0YWdNYXNrUmVnaXN0ZXIpOwotICAg
IAotICAgIC8vIERvIHNvbWUgdmFsdWUgcHJvZmlsaW5nLgotICAgIGlmIChleGl0Lm1fcHJvZmls
ZVZhbHVlRm9ybWF0ICE9IEludmFsaWRWYWx1ZUZvcm1hdCkgewotICAgICAgICBhcmd1bWVudHMu
bG9hZE5leHRBbmRCb3goZXhpdC5tX3Byb2ZpbGVWYWx1ZUZvcm1hdCwgR1BSSW5mbzo6bm9uQXJn
R1BSMCk7Ci0gICAgICAgIAotICAgICAgICBpZiAoZXhpdC5tX2tpbmQgPT0gQmFkQ2FjaGUgfHwg
ZXhpdC5tX2tpbmQgPT0gQmFkSW5kZXhpbmdUeXBlKSB7Ci0gICAgICAgICAgICBDb2RlT3JpZ2lu
IGNvZGVPcmlnaW4gPSBleGl0Lm1fY29kZU9yaWdpbkZvckV4aXRQcm9maWxlOwotICAgICAgICAg
ICAgaWYgKEFycmF5UHJvZmlsZSogYXJyYXlQcm9maWxlID0gaml0LmJhc2VsaW5lQ29kZUJsb2Nr
Rm9yKGNvZGVPcmlnaW4pLT5nZXRBcnJheVByb2ZpbGUoY29kZU9yaWdpbi5ieXRlY29kZUluZGV4
KSkgewotICAgICAgICAgICAgICAgIGppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNz
KEdQUkluZm86Om5vbkFyZ0dQUjAsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBHUFJJbmZv
Ojpub25BcmdHUFIxKTsKLSAgICAgICAgICAgICAgICBqaXQuc3RvcmVQdHIoR1BSSW5mbzo6bm9u
QXJnR1BSMSwgYXJyYXlQcm9maWxlLT5hZGRyZXNzT2ZMYXN0U2VlblN0cnVjdHVyZSgpKTsKLSAg
ICAgICAgICAgICAgICBqaXQubG9hZDgoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoR1BSSW5mbzo6
bm9uQXJnR1BSMSwgU3RydWN0dXJlOjppbmRleGluZ1R5cGVPZmZzZXQoKSksIEdQUkluZm86Om5v
bkFyZ0dQUjEpOwotICAgICAgICAgICAgICAgIGppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVz
dGVkSW1tMzIoMSksIEdQUkluZm86Om5vbkFyZ0dQUjIpOwotICAgICAgICAgICAgICAgIGppdC5s
c2hpZnQzMihHUFJJbmZvOjpub25BcmdHUFIxLCBHUFJJbmZvOjpub25BcmdHUFIyKTsKLSAgICAg
ICAgICAgICAgICBqaXQub3IzMihHUFJJbmZvOjpub25BcmdHUFIyLCBNYWNyb0Fzc2VtYmxlcjo6
QWJzb2x1dGVBZGRyZXNzKGFycmF5UHJvZmlsZS0+YWRkcmVzc09mQXJyYXlNb2RlcygpKSk7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlmICghIWV4aXQubV92
YWx1ZVByb2ZpbGUpCi0gICAgICAgICAgICBqaXQuc3RvcmU2NChHUFJJbmZvOjpub25BcmdHUFIw
LCBleGl0Lm1fdmFsdWVQcm9maWxlLmdldFNwZWNGYWlsQnVja2V0KDApKTsKLSAgICB9Ci0gICAg
Ci0gICAgLy8gVXNlIGEgc2NyYXRjaCBidWZmZXIgdG8gdHJhbnNmZXIgYWxsIHZhbHVlcy4KLSAg
ICBTY3JhdGNoQnVmZmVyKiBzY3JhdGNoQnVmZmVyID0gdm0tPnNjcmF0Y2hCdWZmZXJGb3JTaXpl
KHNpemVvZihFbmNvZGVkSlNWYWx1ZSkgKiBleGl0Lm1fdmFsdWVzLnNpemUoKSk7Ci0gICAgRW5j
b2RlZEpTVmFsdWUqIHNjcmF0Y2ggPSBzY3JhdGNoQnVmZmVyID8gc3RhdGljX2Nhc3Q8RW5jb2Rl
ZEpTVmFsdWUqPihzY3JhdGNoQnVmZmVyLT5kYXRhQnVmZmVyKCkpIDogMDsKLSAgICAKLSAgICAv
LyBTdGFydCBieSBkdW1waW5nIGFsbCBhcmd1bWVudCBleGl0IHZhbHVlcyB0byB0aGUgc3RhY2su
Ci0gICAgCi0gICAgVmVjdG9yPEV4aXRBcmd1bWVudEZvck9wZXJhbmQsIDE2PiBzb3J0ZWRBcmd1
bWVudHM7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gZXhpdC5tX3ZhbHVlcy5zaXplKCk7IGktLTsp
IHsKLSAgICAgICAgRXhpdFZhbHVlIHZhbHVlID0gZXhpdC5tX3ZhbHVlc1tpXTsKLSAgICAgICAg
aW50IG9wZXJhbmQgPSBleGl0Lm1fdmFsdWVzLm9wZXJhbmRGb3JJbmRleChpKTsKLSAgICAgICAg
Ci0gICAgICAgIGlmICghdmFsdWUuaXNBcmd1bWVudCgpKQotICAgICAgICAgICAgY29udGludWU7
Ci0gICAgICAgIAotICAgICAgICBzb3J0ZWRBcmd1bWVudHMuYXBwZW5kKEV4aXRBcmd1bWVudEZv
ck9wZXJhbmQodmFsdWUuZXhpdEFyZ3VtZW50KCksIFZpcnR1YWxSZWdpc3RlcihvcGVyYW5kKSkp
OwotICAgIH0KLSAgICBzdGQ6OnNvcnQoc29ydGVkQXJndW1lbnRzLmJlZ2luKCksIHNvcnRlZEFy
Z3VtZW50cy5lbmQoKSwgbGVzc2VyQXJndW1lbnRJbmRleCk7Ci0gICAgCi0gICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IHNvcnRlZEFyZ3VtZW50cy5zaXplKCk7ICsraSkgewotICAgICAgICBF
eGl0QXJndW1lbnRGb3JPcGVyYW5kIGFyZ3VtZW50ID0gc29ydGVkQXJndW1lbnRzW2ldOwotICAg
ICAgICAKLSAgICAgICAgYXJndW1lbnRzLmxvYWROZXh0QW5kQm94KGFyZ3VtZW50LmV4aXRBcmd1
bWVudCgpLmZvcm1hdCgpLCBHUFJJbmZvOjpub25BcmdHUFIwKTsKLSAgICAgICAgaml0LnN0b3Jl
NjQoCi0gICAgICAgICAgICBHUFJJbmZvOjpub25BcmdHUFIwLCBzY3JhdGNoICsgZXhpdC5tX3Zh
bHVlcy5pbmRleEZvck9wZXJhbmQoYXJndW1lbnQub3BlcmFuZCgpKSk7Ci0gICAgfQotICAgIAot
ICAgIC8vIEFsbCB0ZW1wIHJlZ2lzdGVycyBhcmUgZnJlZSBhdCB0aGlzIHBvaW50LgotICAgIAot
ICAgIC8vIE1vdmUgYW55dGhpbmcgb24gdGhlIHN0YWNrIGludG8gdGhlIGFwcHJvcHJpYXRlIHBs
YWNlIGluIHRoZSBzY3JhdGNoIGJ1ZmZlci4KLSAgICAKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSBl
eGl0Lm1fdmFsdWVzLnNpemUoKTsgaS0tOykgewotICAgICAgICBFeGl0VmFsdWUgdmFsdWUgPSBl
eGl0Lm1fdmFsdWVzW2ldOwotICAgICAgICAKLSAgICAgICAgc3dpdGNoICh2YWx1ZS5raW5kKCkp
IHsKLSAgICAgICAgY2FzZSBFeGl0VmFsdWVJbkpTU3RhY2s6Ci0gICAgICAgICAgICBqaXQubG9h
ZDY0KEFzc2VtYmx5SGVscGVyczo6YWRkcmVzc0Zvcih2YWx1ZS52aXJ0dWFsUmVnaXN0ZXIoKSks
IEdQUkluZm86OnJlZ1QwKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEV4aXRW
YWx1ZUluSlNTdGFja0FzSW50MzI6Ci0gICAgICAgICAgICBqaXQubG9hZDMyKAotICAgICAgICAg
ICAgICAgIEFzc2VtYmx5SGVscGVyczo6YWRkcmVzc0Zvcih2YWx1ZS52aXJ0dWFsUmVnaXN0ZXIo
KSkud2l0aE9mZnNldCgKLSAgICAgICAgICAgICAgICAgICAgT0JKRUNUX09GRlNFVE9GKEVuY29k
ZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy5wYXlsb2FkKSksCi0gICAgICAgICAgICAgICAgR1BS
SW5mbzo6cmVnVDApOwotICAgICAgICAgICAgaml0Lm9yNjQoR1BSSW5mbzo6dGFnVHlwZU51bWJl
clJlZ2lzdGVyLCBHUFJJbmZvOjpyZWdUMCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
Y2FzZSBFeGl0VmFsdWVJbkpTU3RhY2tBc0ludDUyOgotICAgICAgICAgICAgaml0LmxvYWQ2NChB
c3NlbWJseUhlbHBlcnM6OmFkZHJlc3NGb3IodmFsdWUudmlydHVhbFJlZ2lzdGVyKCkpLCBHUFJJ
bmZvOjpyZWdUMCk7Ci0gICAgICAgICAgICBqaXQucnNoaWZ0NjQoCi0gICAgICAgICAgICAgICAg
QXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6aW50NTJTaGlmdEFtb3VudCks
IEdQUkluZm86OnJlZ1QwKTsKLSAgICAgICAgICAgIGppdC5ib3hJbnQ1MihHUFJJbmZvOjpyZWdU
MCwgR1BSSW5mbzo6cmVnVDAsIEdQUkluZm86OnJlZ1QxLCBGUFJJbmZvOjpmcFJlZ1QwKTsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEV4aXRWYWx1ZUluSlNTdGFja0FzRG91Ymxl
OgotICAgICAgICAgICAgaml0LmxvYWREb3VibGUoQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9y
KHZhbHVlLnZpcnR1YWxSZWdpc3RlcigpKSwgRlBSSW5mbzo6ZnBSZWdUMCk7Ci0gICAgICAgICAg
ICBqaXQuYm94RG91YmxlKEZQUkluZm86OmZwUmVnVDAsIEdQUkluZm86OnJlZ1QwKTsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEV4aXRWYWx1ZURlYWQ6Ci0gICAgICAgIGNhc2Ug
RXhpdFZhbHVlQ29uc3RhbnQ6Ci0gICAgICAgIGNhc2UgRXhpdFZhbHVlQXJndW1lbnQ6Ci0gICAg
ICAgICAgICAvLyBEb24ndCBkbyBhbnl0aGluZyBmb3IgdGhlc2UuCi0gICAgICAgICAgICBjb250
aW51ZTsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9S
RUFDSEVEKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAg
ICAgaml0LnN0b3JlNjQoR1BSSW5mbzo6cmVnVDAsIHNjcmF0Y2ggKyBpKTsKLSAgICB9Ci0gICAg
Ci0gICAgLy8gTW92ZSBldmVyeXRoaW5nIGZyb20gdGhlIHNjcmF0Y2ggYnVmZmVyIHRvIHRoZSBz
dGFjazsgdGhpcyBhbHNvIHJlaWZpZXMgY29uc3RhbnRzLgotICAgIAotICAgIGZvciAodW5zaWdu
ZWQgaSA9IGV4aXQubV92YWx1ZXMuc2l6ZSgpOyBpLS07KSB7Ci0gICAgICAgIEV4aXRWYWx1ZSB2
YWx1ZSA9IGV4aXQubV92YWx1ZXNbaV07Ci0gICAgICAgIGludCBvcGVyYW5kID0gZXhpdC5tX3Zh
bHVlcy5vcGVyYW5kRm9ySW5kZXgoaSk7Ci0gICAgICAgIAotICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyBhZGRyZXNzID0gQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yKG9wZXJhbmQp
OwotICAgICAgICAKLSAgICAgICAgc3dpdGNoICh2YWx1ZS5raW5kKCkpIHsKLSAgICAgICAgY2Fz
ZSBFeGl0VmFsdWVEZWFkOgotICAgICAgICAgICAgaml0LnN0b3JlNjQoTWFjcm9Bc3NlbWJsZXI6
OlRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSkpLCBhZGRyZXNzKTsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEV4aXRWYWx1ZUNvbnN0YW50OgotICAg
ICAgICAgICAgaml0LnN0b3JlNjQoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW02NChKU1ZhbHVl
OjplbmNvZGUodmFsdWUuY29uc3RhbnQoKSkpLCBhZGRyZXNzKTsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICBjYXNlIEV4aXRWYWx1ZUluSlNTdGFjazoKLSAgICAgICAgY2FzZSBFeGl0VmFs
dWVJbkpTU3RhY2tBc0ludDMyOgotICAgICAgICBjYXNlIEV4aXRWYWx1ZUluSlNTdGFja0FzSW50
NTI6Ci0gICAgICAgIGNhc2UgRXhpdFZhbHVlSW5KU1N0YWNrQXNEb3VibGU6Ci0gICAgICAgIGNh
c2UgRXhpdFZhbHVlQXJndW1lbnQ6Ci0gICAgICAgICAgICBqaXQubG9hZDY0KHNjcmF0Y2ggKyBp
LCBHUFJJbmZvOjpyZWdUMCk7Ci0gICAgICAgICAgICBqaXQuc3RvcmU2NChHUFJJbmZvOjpyZWdU
MCwgYWRkcmVzcyk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAg
ICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgfQotICAgIH0KLSAgICAKLSAgICBoYW5kbGVFeGl0Q291bnRzKGppdCwgZXhpdCk7
Ci0gICAgcmVpZnlJbmxpbmVkQ2FsbEZyYW1lcyhqaXQsIGV4aXQpOwotICAgIAotICAgIGppdC5w
b3AoTWFjcm9Bc3NlbWJsZXI6OmZyYW1lUG9pbnRlclJlZ2lzdGVyKTsKLSAgICBqaXQubW92ZShN
YWNyb0Fzc2VtYmxlcjo6ZnJhbWVQb2ludGVyUmVnaXN0ZXIsIE1hY3JvQXNzZW1ibGVyOjpzdGFj
a1BvaW50ZXJSZWdpc3Rlcik7Ci0gICAgaml0LnBvcChNYWNyb0Fzc2VtYmxlcjo6ZnJhbWVQb2lu
dGVyUmVnaXN0ZXIpOwotICAgIGppdC5wb3AoR1BSSW5mbzo6bm9uQXJnR1BSMCk7IC8vIGlnbm9y
ZSB0aGUgcmVzdWx0LgotICAgIAotICAgIGlmIChleGl0Lm1fbGFzdFNldE9wZXJhbmQuaXNWYWxp
ZCgpKSB7Ci0gICAgICAgIGppdC5sb2FkNjQoCi0gICAgICAgICAgICBBc3NlbWJseUhlbHBlcnM6
OmFkZHJlc3NGb3IoZXhpdC5tX2xhc3RTZXRPcGVyYW5kKSwgR1BSSW5mbzo6Y2FjaGVkUmVzdWx0
UmVnaXN0ZXIpOwotICAgIH0KLSAgICAKLSAgICBhZGp1c3RBbmRKdW1wVG9UYXJnZXQoaml0LCBl
eGl0KTsKLSAgICAKLSAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCp2bSwgJmppdCwgY29kZUJs
b2NrKTsKLSAgICBleGl0Lm1fY29kZSA9IEZJTkFMSVpFX0NPREVfSUYoCi0gICAgICAgIHNob3Vs
ZFNob3dEaXNhc3NlbWJseSgpLAotICAgICAgICBwYXRjaEJ1ZmZlciwKLSAgICAgICAgKCJGVEwg
T1NSIGV4aXQgIyV1IChiYyMldSwgJXMpIGZyb20gJXMsIHdpdGggb3BlcmFuZHMgPSAlcyIsCi0g
ICAgICAgICAgICBleGl0SUQsIGV4aXQubV9jb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgsCi0gICAg
ICAgICAgICBleGl0S2luZFRvU3RyaW5nKGV4aXQubV9raW5kKSwgdG9DU3RyaW5nKCpjb2RlQmxv
Y2spLmRhdGEoKSwKLSAgICAgICAgICAgIHRvQ1N0cmluZyhpZ25vcmluZ0NvbnRleHQ8RHVtcENv
bnRleHQ+KGV4aXQubV92YWx1ZXMpKS5kYXRhKCkpKTsKLX0KLQogZXh0ZXJuICJDIiB2b2lkKiBj
b21waWxlRlRMT1NSRXhpdChFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGV4aXRJRCkKIHsKICAg
ICBTYW1wbGluZ1JlZ2lvbiBzYW1wbGluZ1JlZ2lvbigiRlRMIE9TUiBFeGl0IENvbXBpbGF0aW9u
Iik7CkBAIC0zNjEsMTAgKzE5NCw3IEBAIGV4dGVybiAiQyIgdm9pZCogY29tcGlsZUZUTE9TUkV4
aXQoRXhlY1MKICAgICAKICAgICBwcmVwYXJlQ29kZU9yaWdpbkZvck9TUkV4aXQoZXhlYywgZXhp
dC5tX2NvZGVPcmlnaW4pOwogICAgIAotICAgIGlmIChPcHRpb25zOjpmdGxVc2VzU3RhY2ttYXBz
KCkpCi0gICAgICAgIGNvbXBpbGVTdHViV2l0aE9TUkV4aXRTdGFja21hcChleGl0SUQsIGppdENv
ZGUsIGV4aXQsIHZtLCBjb2RlQmxvY2spOwotICAgIGVsc2UKLSAgICAgICAgY29tcGlsZVN0dWJX
aXRob3V0T1NSRXhpdFN0YWNrbWFwKGV4aXRJRCwgZXhpdCwgdm0sIGNvZGVCbG9jayk7CisgICAg
Y29tcGlsZVN0dWIoZXhpdElELCBqaXRDb2RlLCBleGl0LCB2bSwgY29kZUJsb2NrKTsKICAgICAK
ICAgICBSZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIoY29kZUJsb2NrKTsKICAgICByZXBhdGNo
QnVmZmVyLnJlbGluaygKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU3RhY2tN
YXBzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFN0YWNr
TWFwcy5jcHAJKHJldmlzaW9uIDE1ODUxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMU3RhY2tNYXBzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTUsMTcgKzU1LDEwIEBAIHZvaWQg
U3RhY2tNYXBzOjpDb25zdGFudDo6ZHVtcChQcmludFN0cmUKIAogdm9pZCBTdGFja01hcHM6Okxv
Y2F0aW9uOjpwYXJzZShEYXRhVmlldyogdmlldywgdW5zaWduZWQmIG9mZnNldCkKIHsKLSAgICB1
aW50MTZfdCB0YWdnZWRSZWcgPSB2aWV3LT5yZWFkPHVpbnQxNl90PihvZmZzZXQsIHRydWUpOwot
ICAgIGlmIChzdGF0aWNfY2FzdDxpbnQxNl90Pih0YWdnZWRSZWcpIDwgMCkgewotICAgICAgICBk
YXRhTG9nKAotICAgICAgICAgICAgIkRldGVjdGVkIGEgbmVnYXRpdmUgdGFnZ2VkIHJlZ2lzdGVy
ICIsIHN0YXRpY19jYXN0PGludDE2X3Q+KHRhZ2dlZFJlZyksCi0gICAgICAgICAgICAiIGF0IG9m
ZnNldCAiLCBvZmZzZXQsICJcbiIpOwotICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOwotICAgIH0KLSAgICBkd2FyZlJlZ051bSA9IHRhZ2dlZFJlZyAmICgoMSA8PCAxMikgLSAx
KTsKLSAgICBraW5kID0gc3RhdGljX2Nhc3Q8S2luZD4odGFnZ2VkUmVnID4+IDEyKTsKLQotICAg
IHRoaXMtPm9mZnNldCA9IHZpZXctPnJlYWQ8aW50MTZfdD4ob2Zmc2V0LCB0cnVlKTsKKyAgICBr
aW5kID0gc3RhdGljX2Nhc3Q8S2luZD4odmlldy0+cmVhZDx1aW50OF90PihvZmZzZXQsIHRydWUp
KTsKKyAgICB2aWV3LT5yZWFkPHVpbnQ4X3Q+KG9mZnNldCwgdHJ1ZSk7IC8vIHJlc2VydmVkCisg
ICAgZHdhcmZSZWdOdW0gPSB2aWV3LT5yZWFkPHVpbnQxNl90PihvZmZzZXQsIHRydWUpOworICAg
IHRoaXMtPm9mZnNldCA9IHZpZXctPnJlYWQ8aW50MzJfdD4ob2Zmc2V0LCB0cnVlKTsKIH0KIAog
dm9pZCBTdGFja01hcHM6OkxvY2F0aW9uOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CkBA
IC0xMTEsNiArMTA0LDggQEAgYm9vbCBTdGFja01hcHM6OnBhcnNlKERhdGFWaWV3KiB2aWV3KQog
ewogICAgIHVuc2lnbmVkIG9mZnNldCA9IDA7CiAgICAgCisgICAgdmlldy0+cmVhZDx1aW50MzJf
dD4ob2Zmc2V0LCB0cnVlKTsgLy8gUmVzZXJ2ZWQgKGhlYWRlcikKKyAgICAKICAgICB1aW50MzJf
dCBudW1Db25zdGFudHMgPSB2aWV3LT5yZWFkPHVpbnQzMl90PihvZmZzZXQsIHRydWUpOwogICAg
IHdoaWxlIChudW1Db25zdGFudHMtLSkKICAgICAgICAgY29uc3RhbnRzLmFwcGVuZChyZWFkT2Jq
ZWN0PENvbnN0YW50Pih2aWV3LCBvZmZzZXQpKTsKQEAgLTE2NCw2ICsxNTksOSBAQCB2b2lkIHBy
aW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgU3RhCiAgICAgY2FzZSBTdGFja01hcHM6Okxv
Y2F0aW9uOjpSZWdpc3RlcjoKICAgICAgICAgb3V0LnByaW50KCJSZWdpc3RlciIpOwogICAgICAg
ICByZXR1cm47CisgICAgY2FzZSBTdGFja01hcHM6OkxvY2F0aW9uOjpEaXJlY3Q6CisgICAgICAg
IG91dC5wcmludCgiRGlyZWN0Iik7CisgICAgICAgIHJldHVybjsKICAgICBjYXNlIFN0YWNrTWFw
czo6TG9jYXRpb246OkluZGlyZWN0OgogICAgICAgICBvdXQucHJpbnQoIkluZGlyZWN0Iik7CiAg
ICAgICAgIHJldHVybjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU3RhY2tN
YXBzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTdGFja01h
cHMuaAkocmV2aXNpb24gMTU4NTEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExT
dGFja01hcHMuaAkod29ya2luZyBjb3B5KQpAQCAtNTIsNiArNTIsNyBAQCBzdHJ1Y3QgU3RhY2tN
YXBzIHsKICAgICAgICAgZW51bSBLaW5kIHsKICAgICAgICAgICAgIFVucHJvY2Vzc2VkLAogICAg
ICAgICAgICAgUmVnaXN0ZXIsCisgICAgICAgICAgICBEaXJlY3QsCiAgICAgICAgICAgICBJbmRp
cmVjdCwKICAgICAgICAgICAgIENvbnN0YW50LAogICAgICAgICAgICAgQ29uc3RhbnRJbmRleApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExUaHVua3MuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMVGh1bmtzLmNwcAkocmV2aXNpb24gMTU4
NTEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExUaHVua3MuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zOSw2MCArMzksNyBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7
CiAKIHVzaW5nIG5hbWVzcGFjZSBERkc7CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZiBvc3JFeGl0
R2VuZXJhdGlvbldpdGhvdXRTdGFja01hcFRodW5rR2VuZXJhdG9yKFZNKiB2bSkKLXsKLSAgICBB
c3NlbWJseUhlbHBlcnMgaml0KHZtLCAwKTsKLSAgICAKLSAgICAvLyBQcmV0ZW5kIHRoYXQgd2Un
cmUgYSBDIGNhbGwgZnJhbWUuCi0gICAgaml0LnB1c2goTWFjcm9Bc3NlbWJsZXI6OmZyYW1lUG9p
bnRlclJlZ2lzdGVyKTsKLSAgICBqaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6c3RhY2tQb2ludGVy
UmVnaXN0ZXIsIE1hY3JvQXNzZW1ibGVyOjpmcmFtZVBvaW50ZXJSZWdpc3Rlcik7Ci0gICAgaml0
LnB1c2goR1BSSW5mbzo6cmVnVDApOwotICAgIGppdC5wdXNoKEdQUkluZm86OnJlZ1QwKTsKLSAg
ICAKLSAgICBqaXQucG9rZShHUFJJbmZvOjpub25BcmdHUFIwLCAxKTsKLSAgICAKLSAgICBTY3Jh
dGNoQnVmZmVyKiBzY3JhdGNoQnVmZmVyID0gdm0tPnNjcmF0Y2hCdWZmZXJGb3JTaXplKHJlcXVp
cmVkU2NyYXRjaE1lbW9yeVNpemVJbkJ5dGVzKCkpOwotICAgIGNoYXIqIGJ1ZmZlciA9IHN0YXRp
Y19jYXN0PGNoYXIqPihzY3JhdGNoQnVmZmVyLT5kYXRhQnVmZmVyKCkpOwotICAgIAotICAgIHNh
dmVBbGxSZWdpc3RlcnMoaml0LCBidWZmZXIpOwotICAgIAotICAgIC8vIFRlbGwgR0MgbWFyayBw
aGFzZSBob3cgbXVjaCBvZiB0aGUgc2NyYXRjaCBidWZmZXIgaXMgYWN0aXZlIGR1cmluZyBjYWxs
LgotICAgIGppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKHNjcmF0Y2hCdWZm
ZXItPmFjdGl2ZUxlbmd0aFB0cigpKSwgR1BSSW5mbzo6bm9uQXJnR1BSMSk7Ci0gICAgaml0LnN0
b3JlUHRyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKHJlcXVpcmVkU2NyYXRjaE1lbW9y
eVNpemVJbkJ5dGVzKCkpLCBHUFJJbmZvOjpub25BcmdHUFIxKTsKLQotICAgIC8vIGFyZ3VtZW50
IDAgaXMgYWxyZWFkeSB0aGUgY2FsbCBmcmFtZS4KLSAgICBqaXQucGVlayhHUFJJbmZvOjphcmd1
bWVudEdQUjEsIDEpOwotICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGZ1bmN0aW9uQ2FsbCA9IGpp
dC5jYWxsKCk7Ci0gICAgCi0gICAgLy8gQXQgdGhpcyBwb2ludCB3ZSB3YW50IHRvIG1ha2UgYSB0
YWlsIGNhbGwgdG8gd2hhdCB3YXMgcmV0dXJuZWQgdG8gdXMgaW4gdGhlCi0gICAgLy8gcmV0dXJu
VmFsdWVHUFIuIEJ1dCBhdCB0aGUgc2FtZSB0aW1lIGFzIHdlIGRvIHRoaXMsIHdlIG11c3QgcmVz
dG9yZSBhbGwgcmVnaXN0ZXJzLgotICAgIC8vIFRoZSB3YXkgd2Ugd2lsbCBhY2NvbXBsaXNoIHRo
aXMgaXMgYnkgYXJyYW5naW5nIHRvIGhhdmUgdGhlIHRhaWwgY2FsbCB0YXJnZXQgaW4gdGhlCi0g
ICAgLy8gcmV0dXJuIGFkZHJlc3MgInNsb3QiIChiZSBpdCBhIHJlZ2lzdGVyIG9yIHRoZSBzdGFj
aykuCi0gICAgCi0gICAgaml0Lm1vdmUoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIEdQUkluZm86
OnJlZ1QwKTsKLSAgICAKLSAgICAvLyBQcmVwYXJlIGZvciB0YWlsIGNhbGwuCi0gICAgaml0LnBv
cChHUFJJbmZvOjpyZWdUMSk7Ci0gICAgaml0LnBvcChHUFJJbmZvOjpyZWdUMSk7Ci0gICAgaml0
LnBvcChNYWNyb0Fzc2VtYmxlcjo6ZnJhbWVQb2ludGVyUmVnaXN0ZXIpOwotICAgIAotICAgIC8v
IEF0IHRoaXMgcG9pbnQgd2UncmUgc2l0dGluZyBvbiB0aGUgcmV0dXJuIGFkZHJlc3MgLSBzbyBp
ZiB3ZSBkaWQgYSBqdW1wIHJpZ2h0IG5vdywgdGhlCi0gICAgLy8gdGFpbC1jYWxsZWUgd291bGQg
YmUgaGFwcHkuIEluc3RlYWQgd2UnbGwgc3Rhc2ggdGhlIGNhbGxlZSBpbiB0aGUgcmV0dXJuIGFk
ZHJlc3MgYW5kIHRoZW4KLSAgICAvLyByZXN0b3JlIGFsbCByZWdpc3RlcnMuCi0gICAgCi0gICAg
aml0LnJlc3RvcmVSZXR1cm5BZGRyZXNzQmVmb3JlUmV0dXJuKEdQUkluZm86OnJlZ1QwKTsKLSAg
ICAKLSAgICByZXN0b3JlQWxsUmVnaXN0ZXJzKGppdCwgYnVmZmVyKTsKLQotICAgIGppdC5yZXQo
KTsKLSAgICAKLSAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCp2bSwgJmppdCwgR0xPQkFMX1RI
VU5LX0lEKTsKLSAgICBwYXRjaEJ1ZmZlci5saW5rKGZ1bmN0aW9uQ2FsbCwgY29tcGlsZUZUTE9T
UkV4aXQpOwotICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCAoIkZUTCBPU1Ig
ZXhpdCBnZW5lcmF0aW9uIHRodW5rIikpOwotfQotCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWYgb3Ny
RXhpdEdlbmVyYXRpb25XaXRoU3RhY2tNYXBUaHVua0dlbmVyYXRvcigKLSAgICBWTSYgdm0sIGNv
bnN0IExvY2F0aW9uJiBsb2NhdGlvbikKK01hY3JvQXNzZW1ibGVyQ29kZVJlZiBvc3JFeGl0R2Vu
ZXJhdGlvblRodW5rR2VuZXJhdG9yKFZNJiB2bSwgY29uc3QgTG9jYXRpb24mIGxvY2F0aW9uKQog
ewogICAgIEFzc2VtYmx5SGVscGVycyBqaXQoJnZtLCAwKTsKICAgICAKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMVGh1bmtzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExUaHVua3MuaAkocmV2aXNpb24gMTU4NTEwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExUaHVua3MuaAkod29ya2luZyBjb3B5KQpAQCAtNDEsOSArNDEs
NyBAQCBjbGFzcyBWTTsKIAogbmFtZXNwYWNlIEZUTCB7CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVJl
ZiBvc3JFeGl0R2VuZXJhdGlvbldpdGhvdXRTdGFja01hcFRodW5rR2VuZXJhdG9yKFZNKik7Ci0K
LU1hY3JvQXNzZW1ibGVyQ29kZVJlZiBvc3JFeGl0R2VuZXJhdGlvbldpdGhTdGFja01hcFRodW5r
R2VuZXJhdG9yKFZNJiwgY29uc3QgTG9jYXRpb24mKTsKK01hY3JvQXNzZW1ibGVyQ29kZVJlZiBv
c3JFeGl0R2VuZXJhdGlvblRodW5rR2VuZXJhdG9yKFZNJiwgY29uc3QgTG9jYXRpb24mKTsKIE1h
Y3JvQXNzZW1ibGVyQ29kZVJlZiBzbG93UGF0aENhbGxUaHVua0dlbmVyYXRvcihWTSYsIGNvbnN0
IFNsb3dQYXRoQ2FsbEtleSYpOwogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBNYXBUeXBlLCB0eXBlbmFt
ZSBLZXlUeXBlLCB0eXBlbmFtZSBHZW5lcmF0b3JUeXBlPgpAQCAtNjQsNyArNjIsNyBAQCBwdWJs
aWM6CiAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGdldE9TUkV4aXRHZW5lcmF0aW9uVGh1bmso
Vk0mIHZtLCBjb25zdCBMb2NhdGlvbiYgbG9jYXRpb24pCiAgICAgewogICAgICAgICByZXR1cm4g
Z2VuZXJhdGVJZk5lY2Vzc2FyeSgKLSAgICAgICAgICAgIHZtLCBtX29zckV4aXRUaHVua3MsIGxv
Y2F0aW9uLCBvc3JFeGl0R2VuZXJhdGlvbldpdGhTdGFja01hcFRodW5rR2VuZXJhdG9yKTsKKyAg
ICAgICAgICAgIHZtLCBtX29zckV4aXRUaHVua3MsIGxvY2F0aW9uLCBvc3JFeGl0R2VuZXJhdGlv
blRodW5rR2VuZXJhdG9yKTsKICAgICB9CiAgICAgCiAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
IGdldFNsb3dQYXRoQ2FsbFRodW5rKFZNJiB2bSwgY29uc3QgU2xvd1BhdGhDYWxsS2V5JiBrZXkp
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oCShyZXZpc2lvbiAx
NTg1MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgJKHdvcmtp
bmcgY29weSkKQEAgLTEyNCwxMCArMTI0LDYgQEAgdHlwZWRlZiBPcHRpb25SYW5nZSBvcHRpb25S
YW5nZTsKICAgICB2KGJvb2wsIHVzZUZUTFRCQUEsIHRydWUpIFwKICAgICB2KGJvb2wsIGVuYWJs
ZUxMVk1GYXN0SVNlbCwgZmFsc2UpIFwKICAgICB2KGJvb2wsIHVzZUxMVk1TbWFsbENvZGVNb2Rl
bCwgZmFsc2UpIFwKLSAgICB2KGJvb2wsIGZ0bFRyYXBzT25PU1JFeGl0LCBmYWxzZSkgXAotICAg
IHYoYm9vbCwgZnRsT1NSRXhpdE9taXRzTWFyc2hhbGxpbmcsIGZhbHNlKSBcCi0gICAgdihib29s
LCBmdGxVc2VzU3RhY2ttYXBzLCBmYWxzZSkgXAotICAgIHYoYm9vbCwgdXNlTExWTU9TUkV4aXRJ
bnRyaW5zaWMsIGZhbHNlKSBcCiAgICAgdihib29sLCBkdW1wTExWTUlSLCBmYWxzZSkgXAogICAg
IHYoYm9vbCwgbGx2bUFsd2F5c0ZhaWxzQmVmb3JlQ29tcGlsZSwgZmFsc2UpIFwKICAgICB2KGJv
b2wsIGxsdm1BbHdheXNGYWlsc0JlZm9yZUxpbmssIGZhbHNlKSBcCg==
</data>
<flag name="review"
          id="238693"
          type_id="1"
          status="+"
          setter="ggaren"
    />
          </attachment>
      

    </bug>

</bugzilla>